UNPKG

alepha

Version:

Alepha is a convention-driven TypeScript framework for building robust, end-to-end type-safe applications, from serverless APIs to full-stack React apps.

145 lines (144 loc) 4.22 kB
import * as _alepha_core4 from "alepha"; import { Alepha, Async, Descriptor, KIND, Static } from "alepha"; import * as _alepha_lock0 from "alepha/lock"; import { DateTime, DateTimeProvider, DurationLike } from "alepha/datetime"; import * as _alepha_logger0 from "alepha/logger"; import { Cron } from "cron-schedule"; import * as dayjs0 from "dayjs"; //#region src/constants/CRON.d.ts declare const CRON: { EVERY_MINUTE: string; EVERY_5_MINUTES: string; EVERY_15_MINUTES: string; EVERY_30_MINUTES: string; EVERY_HOUR: string; EVERY_DAY_AT_MIDNIGHT: string; }; //#endregion //#region src/providers/CronProvider.d.ts declare class CronProvider { protected readonly dt: DateTimeProvider; protected readonly alepha: Alepha; protected readonly log: _alepha_logger0.Logger; protected readonly cronJobs: Array<CronJob>; getCronJobs(): Array<CronJob>; protected readonly start: _alepha_core4.HookDescriptor<"start">; protected readonly stop: _alepha_core4.HookDescriptor<"stop">; protected boot(name: string | CronJob): void; abort(name: string | CronJob): void; /** * Registers a cron job. * * It's automatically done when using the `$scheduler` descriptor but can also be used manually. */ createCronJob(name: string, expression: string, handler: (context: { now: DateTime; }) => Promise<void>, start?: boolean): void; protected run(task: CronJob, now?: dayjs0.Dayjs): void; } interface CronJob { name: string; expression: string; handler: (context: { now: DateTime; }) => Promise<void>; cron: Cron; loop: boolean; running?: boolean; onError?: (error: Error) => void; abort: AbortController; } //#endregion //#region src/descriptors/$scheduler.d.ts /** * Scheduler descriptor. */ declare const $scheduler: { (options: SchedulerDescriptorOptions): SchedulerDescriptor; [KIND]: typeof SchedulerDescriptor; }; type SchedulerDescriptorOptions = { /** * Function to run on schedule. */ handler: (args: SchedulerHandlerArguments) => Async<void>; /** * Name of the scheduler. Defaults to the function name. */ name?: string; /** * Optional description of the scheduler. */ description?: string; /** * Cron expression or interval to run the scheduler. */ cron?: string; /** * Cron expression or interval to run the scheduler. */ interval?: DurationLike; /** * If true, the scheduler will be locked and only one instance will run at a time. * You probably need to import {@link AlephaLockRedis} for distributed locking. * * @default true */ lock?: boolean; }; declare const envSchema: _alepha_core4.TObject<{ SCHEDULER_PREFIX: _alepha_core4.TOptional<_alepha_core4.TString>; }>; declare module "alepha" { interface Env extends Partial<Static<typeof envSchema>> {} } declare class SchedulerDescriptor extends Descriptor<SchedulerDescriptorOptions> { protected readonly log: _alepha_logger0.Logger; protected readonly env: { SCHEDULER_PREFIX?: string | undefined; }; protected readonly alepha: Alepha; protected readonly dateTimeProvider: DateTimeProvider; protected readonly cronProvider: CronProvider; get name(): string; protected onInit(): void; trigger(): Promise<void>; protected schedulerLock: _alepha_lock0.LockDescriptor<(args: SchedulerHandlerArguments) => Promise<void>>; } interface SchedulerHandlerArguments { now: DateTime; } //#endregion //#region src/index.d.ts declare module "alepha" { interface Hooks { "scheduler:begin": { name: string; now: DateTime; context: string; }; "scheduler:success": { name: string; context: string; }; "scheduler:error": { name: string; error: Error; context: string; }; "scheduler:end": { name: string; context: string; }; } } /** * Generic interface for scheduling tasks. * * @see {@link $scheduler} * @module alepha.scheduler */ declare const AlephaScheduler: _alepha_core4.Service<_alepha_core4.Module<{}>>; //#endregion export { $scheduler, AlephaScheduler, CRON, CronJob, CronProvider, SchedulerDescriptor, SchedulerDescriptorOptions, SchedulerHandlerArguments }; //# sourceMappingURL=index.d.ts.map