36 lines
2.0 KiB
TypeScript
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 {};
|