oak-domain/lib/types/Timer.d.ts

36 lines
2.0 KiB
TypeScript

import { RecurrenceRule, RecurrenceSpecDateRange, RecurrenceSpecObjLit } from 'node-schedule';
import { EntityDict, OperationResult } from './Entity';
import { EntityDict as BaseEntityDict } from '../base-app-domain';
import { AsyncContext } from '../store/AsyncRowStore';
import { Watcher } from './Watcher';
import { Namespace } from 'socket.io';
type FreeRoutineFn<ED extends EntityDict & BaseEntityDict, Cxt extends AsyncContext<ED>> = (context: Cxt, env: {
socket: Namespace;
contextBuilder: () => Promise<Cxt>;
}) => Promise<OperationResult<ED>>;
type BaseTimerFn<ED extends EntityDict & BaseEntityDict, Cxt extends AsyncContext<ED>> = (context: Cxt) => Promise<OperationResult<ED>>;
type FreeTimerFn<ED extends EntityDict & BaseEntityDict, Cxt extends AsyncContext<ED>> = (builder: () => Promise<Cxt>) => Promise<OperationResult<ED>>;
export type FreeRoutine<ED extends EntityDict & BaseEntityDict, Cxt extends AsyncContext<ED>> = {
name: string;
routine: FreeRoutineFn<ED, Cxt>;
};
export type BaseTimer<ED extends EntityDict & BaseEntityDict, Cxt extends AsyncContext<ED>> = {
type?: 'base';
name: string;
cron: RecurrenceRule | RecurrenceSpecDateRange | RecurrenceSpecObjLit | Date | string | number;
timer: BaseTimerFn<ED, Cxt>;
singleton?: true;
};
export type FreeTimer<ED extends EntityDict & BaseEntityDict, Cxt extends AsyncContext<ED>> = {
type: 'free';
name: string;
cron: RecurrenceRule | RecurrenceSpecDateRange | RecurrenceSpecObjLit | Date | string | number;
timer: FreeTimerFn<ED, Cxt>;
singleton?: true;
};
export type Routine<ED extends EntityDict & BaseEntityDict, T extends keyof ED, Cxt extends AsyncContext<ED>> = FreeRoutine<ED, Cxt> | Watcher<ED, T, Cxt>;
export type Timer<ED extends EntityDict & BaseEntityDict, T extends keyof ED, Cxt extends AsyncContext<ED>> = BaseTimer<ED, Cxt> | FreeTimer<ED, Cxt> | Watcher<ED, T, Cxt> & {
cron: RecurrenceRule | RecurrenceSpecDateRange | RecurrenceSpecObjLit | Date | string | number;
};
export {};