exisjs 0.7.5 → 0.7.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cli/commands/build.d.ts.map +1 -1
- package/dist/cli/commands/build.js +12 -0
- package/dist/cli/commands/build.js.map +1 -1
- package/dist/cli/commands/clean.d.ts +5 -0
- package/dist/cli/commands/clean.d.ts.map +1 -0
- package/dist/cli/commands/clean.js +30 -0
- package/dist/cli/commands/clean.js.map +1 -0
- package/dist/cli/commands/dev.d.ts.map +1 -1
- package/dist/cli/commands/dev.js +171 -86
- package/dist/cli/commands/dev.js.map +1 -1
- package/dist/cli/commands/generate.d.ts +6 -1
- package/dist/cli/commands/generate.d.ts.map +1 -1
- package/dist/cli/commands/generate.js +57 -2
- package/dist/cli/commands/generate.js.map +1 -1
- package/dist/cli/commands/start.d.ts.map +1 -1
- package/dist/cli/commands/start.js +54 -16
- package/dist/cli/commands/start.js.map +1 -1
- package/dist/cli/index.js +26 -3
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/manifest.d.ts +1 -0
- package/dist/cli/manifest.d.ts.map +1 -1
- package/dist/cli/manifest.js +264 -33
- package/dist/cli/manifest.js.map +1 -1
- package/dist/cli/resolve-aliases.d.ts +1 -1
- package/dist/cli/resolve-aliases.d.ts.map +1 -1
- package/dist/cli/resolve-aliases.js +30 -13
- package/dist/cli/resolve-aliases.js.map +1 -1
- package/dist/config/config.d.ts +3 -1
- package/dist/config/config.d.ts.map +1 -1
- package/dist/config/config.js +9 -0
- package/dist/config/config.js.map +1 -1
- package/dist/config/types.d.ts +6 -0
- package/dist/config/types.d.ts.map +1 -1
- package/dist/cron/expressions.d.ts +45 -0
- package/dist/cron/expressions.d.ts.map +1 -0
- package/dist/cron/expressions.js +87 -0
- package/dist/cron/expressions.js.map +1 -0
- package/dist/cron/index.d.ts +6 -0
- package/dist/cron/index.d.ts.map +1 -0
- package/dist/cron/index.js +22 -0
- package/dist/cron/index.js.map +1 -0
- package/dist/cron/job.d.ts +50 -0
- package/dist/cron/job.d.ts.map +1 -0
- package/dist/cron/job.js +247 -0
- package/dist/cron/job.js.map +1 -0
- package/dist/cron/manager.d.ts +105 -0
- package/dist/cron/manager.d.ts.map +1 -0
- package/dist/cron/manager.js +245 -0
- package/dist/cron/manager.js.map +1 -0
- package/dist/cron/parser.d.ts +22 -0
- package/dist/cron/parser.d.ts.map +1 -0
- package/dist/cron/parser.js +269 -0
- package/dist/cron/parser.js.map +1 -0
- package/dist/cron/types.d.ts +76 -0
- package/dist/cron/types.d.ts.map +1 -0
- package/dist/cron/types.js +3 -0
- package/dist/cron/types.js.map +1 -0
- package/dist/decorators/constants.d.ts +2 -0
- package/dist/decorators/constants.d.ts.map +1 -1
- package/dist/decorators/constants.js +3 -1
- package/dist/decorators/constants.js.map +1 -1
- package/dist/decorators/core.d.ts +29 -11
- package/dist/decorators/core.d.ts.map +1 -1
- package/dist/decorators/core.js +49 -11
- package/dist/decorators/core.js.map +1 -1
- package/dist/decorators/cron.d.ts +57 -0
- package/dist/decorators/cron.d.ts.map +1 -0
- package/dist/decorators/cron.js +143 -0
- package/dist/decorators/cron.js.map +1 -0
- package/dist/decorators/index.d.ts +2 -0
- package/dist/decorators/index.d.ts.map +1 -1
- package/dist/decorators/index.js +2 -0
- package/dist/decorators/index.js.map +1 -1
- package/dist/decorators/middleware.d.ts +65 -2
- package/dist/decorators/middleware.d.ts.map +1 -1
- package/dist/decorators/middleware.js +148 -62
- package/dist/decorators/middleware.js.map +1 -1
- package/dist/decorators/params.d.ts +102 -2
- package/dist/decorators/params.d.ts.map +1 -1
- package/dist/decorators/params.js +105 -3
- package/dist/decorators/params.js.map +1 -1
- package/dist/decorators/response.d.ts.map +1 -1
- package/dist/decorators/response.js +32 -22
- package/dist/decorators/response.js.map +1 -1
- package/dist/decorators/routing.d.ts +81 -16
- package/dist/decorators/routing.d.ts.map +1 -1
- package/dist/decorators/routing.js +81 -16
- package/dist/decorators/routing.js.map +1 -1
- package/dist/di/container.d.ts.map +1 -1
- package/dist/di/container.js +6 -1
- package/dist/di/container.js.map +1 -1
- package/dist/docs/content/cli/commands.mdx +1 -1
- package/dist/docs/content/controllers.mdx +127 -10
- package/dist/docs/content/cron.mdx +196 -0
- package/dist/docs/content/decorators.mdx +22 -4
- package/dist/docs/content/errors.mdx +58 -9
- package/dist/docs/content/introduction.mdx +7 -7
- package/dist/docs/content/middleware.mdx +269 -6
- package/dist/docs/content/requests.mdx +180 -6
- package/dist/docs/content/responses.mdx +283 -32
- package/dist/docs/content/routing.mdx +46 -0
- package/dist/docs/content/swagger.mdx +228 -0
- package/dist/docs/content/validation.mdx +190 -11
- package/dist/docs/reference/context.mdx +11 -0
- package/dist/docs/reference/cron.mdx +300 -0
- package/dist/docs/reference/decorators.mdx +22 -4
- package/dist/docs/reference/error.mdx +88 -0
- package/dist/docs/reference/logger.mdx +175 -43
- package/dist/docs/reference/middleware.mdx +31 -0
- package/dist/docs/reference/router.mdx +22 -0
- package/dist/docs/reference/swagger.mdx +143 -0
- package/dist/docs/reference/validator.mdx +83 -23
- package/dist/error/errors.d.ts.map +1 -1
- package/dist/error/errors.js +95 -43
- package/dist/error/errors.js.map +1 -1
- package/dist/error/index.d.ts +1 -0
- package/dist/error/index.d.ts.map +1 -1
- package/dist/error/index.js +11 -1
- package/dist/error/index.js.map +1 -1
- package/dist/error/overlay.d.ts +42 -0
- package/dist/error/overlay.d.ts.map +1 -0
- package/dist/error/overlay.js +306 -0
- package/dist/error/overlay.js.map +1 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +22 -1
- package/dist/index.js.map +1 -1
- package/dist/lib/start-server.js +33 -7
- package/dist/lib/start-server.js.map +1 -1
- package/dist/logger/index.d.ts +1 -1
- package/dist/logger/index.d.ts.map +1 -1
- package/dist/logger/index.js +9 -1
- package/dist/logger/index.js.map +1 -1
- package/dist/middleware/guard.d.ts +2 -2
- package/dist/middleware/guard.d.ts.map +1 -1
- package/dist/middleware/guard.js.map +1 -1
- package/dist/middleware/ip-filter.d.ts +1 -0
- package/dist/middleware/ip-filter.d.ts.map +1 -1
- package/dist/middleware/ip-filter.js +2 -0
- package/dist/middleware/ip-filter.js.map +1 -1
- package/dist/middleware/middleware.d.ts +2 -2
- package/dist/middleware/middleware.d.ts.map +1 -1
- package/dist/middleware/middleware.js +20 -2
- package/dist/middleware/middleware.js.map +1 -1
- package/dist/middleware/security.d.ts +43 -1
- package/dist/middleware/security.d.ts.map +1 -1
- package/dist/middleware/security.js +101 -0
- package/dist/middleware/security.js.map +1 -1
- package/dist/response/index.d.ts +229 -6
- package/dist/response/index.d.ts.map +1 -1
- package/dist/response/index.js +272 -2
- package/dist/response/index.js.map +1 -1
- package/dist/router/boundary.d.ts +41 -11
- package/dist/router/boundary.d.ts.map +1 -1
- package/dist/router/boundary.js +24 -2
- package/dist/router/boundary.js.map +1 -1
- package/dist/router/controller-registrar.d.ts.map +1 -1
- package/dist/router/controller-registrar.js +108 -4
- package/dist/router/controller-registrar.js.map +1 -1
- package/dist/router/index.d.ts +2 -2
- package/dist/router/index.d.ts.map +1 -1
- package/dist/router/index.js +2 -1
- package/dist/router/index.js.map +1 -1
- package/dist/router/route-builder.d.ts +262 -65
- package/dist/router/route-builder.d.ts.map +1 -1
- package/dist/router/route-builder.js +181 -23
- package/dist/router/route-builder.js.map +1 -1
- package/dist/router/route-scanner.d.ts +6 -0
- package/dist/router/route-scanner.d.ts.map +1 -1
- package/dist/router/route-scanner.js +71 -792
- package/dist/router/route-scanner.js.map +1 -1
- package/dist/router/router.d.ts.map +1 -1
- package/dist/router/router.js +62 -17
- package/dist/router/router.js.map +1 -1
- package/dist/router/scanner/boundary-loader.d.ts +18 -0
- package/dist/router/scanner/boundary-loader.d.ts.map +1 -0
- package/dist/router/scanner/boundary-loader.js +539 -0
- package/dist/router/scanner/boundary-loader.js.map +1 -0
- package/dist/router/scanner/cron-mounter.d.ts +15 -0
- package/dist/router/scanner/cron-mounter.d.ts.map +1 -0
- package/dist/router/scanner/cron-mounter.js +216 -0
- package/dist/router/scanner/cron-mounter.js.map +1 -0
- package/dist/router/scanner/error-mounter.d.ts +14 -0
- package/dist/router/scanner/error-mounter.d.ts.map +1 -0
- package/dist/router/scanner/error-mounter.js +200 -0
- package/dist/router/scanner/error-mounter.js.map +1 -0
- package/dist/router/scanner/fs-scanner.d.ts +25 -0
- package/dist/router/scanner/fs-scanner.d.ts.map +1 -0
- package/dist/router/scanner/fs-scanner.js +115 -0
- package/dist/router/scanner/fs-scanner.js.map +1 -0
- package/dist/router/scanner/functional-compiler.d.ts +9 -0
- package/dist/router/scanner/functional-compiler.d.ts.map +1 -0
- package/dist/router/scanner/functional-compiler.js +233 -0
- package/dist/router/scanner/functional-compiler.js.map +1 -0
- package/dist/router/scanner/index.d.ts +9 -0
- package/dist/router/scanner/index.d.ts.map +1 -0
- package/dist/router/scanner/index.js +19 -0
- package/dist/router/scanner/index.js.map +1 -0
- package/dist/router/types.d.ts +23 -0
- package/dist/router/types.d.ts.map +1 -1
- package/dist/server/app.d.ts +3 -0
- package/dist/server/app.d.ts.map +1 -1
- package/dist/server/app.js +13 -0
- package/dist/server/app.js.map +1 -1
- package/dist/server/bootstrapper.d.ts.map +1 -1
- package/dist/server/bootstrapper.js +91 -30
- package/dist/server/bootstrapper.js.map +1 -1
- package/dist/server/cluster.d.ts.map +1 -1
- package/dist/server/cluster.js +13 -2
- package/dist/server/cluster.js.map +1 -1
- package/dist/server/context.d.ts +8 -0
- package/dist/server/context.d.ts.map +1 -1
- package/dist/server/context.js +50 -6
- package/dist/server/context.js.map +1 -1
- package/dist/server/helpers/body-parser.d.ts +18 -0
- package/dist/server/helpers/body-parser.d.ts.map +1 -0
- package/dist/server/helpers/body-parser.js +246 -0
- package/dist/server/helpers/body-parser.js.map +1 -0
- package/dist/server/helpers/cookie.d.ts +4 -0
- package/dist/server/helpers/cookie.d.ts.map +1 -0
- package/dist/server/helpers/cookie.js +61 -0
- package/dist/server/helpers/cookie.js.map +1 -0
- package/dist/server/helpers/etag.d.ts +3 -0
- package/dist/server/helpers/etag.d.ts.map +1 -0
- package/dist/server/helpers/etag.js +25 -0
- package/dist/server/helpers/etag.js.map +1 -0
- package/dist/server/helpers/index.d.ts +6 -0
- package/dist/server/helpers/index.d.ts.map +1 -0
- package/dist/server/helpers/index.js +21 -0
- package/dist/server/helpers/index.js.map +1 -0
- package/dist/server/helpers/ip.d.ts +9 -0
- package/dist/server/helpers/ip.d.ts.map +1 -0
- package/dist/server/helpers/ip.js +62 -0
- package/dist/server/helpers/ip.js.map +1 -0
- package/dist/server/helpers/stream.d.ts +4 -0
- package/dist/server/helpers/stream.d.ts.map +1 -0
- package/dist/server/helpers/stream.js +193 -0
- package/dist/server/helpers/stream.js.map +1 -0
- package/dist/server/lifecycle.d.ts +22 -0
- package/dist/server/lifecycle.d.ts.map +1 -0
- package/dist/server/lifecycle.js +106 -0
- package/dist/server/lifecycle.js.map +1 -0
- package/dist/server/request-handler.d.ts +1 -0
- package/dist/server/request-handler.d.ts.map +1 -1
- package/dist/server/request-handler.js +27 -17
- package/dist/server/request-handler.js.map +1 -1
- package/dist/server/request.d.ts +1 -139
- package/dist/server/request.d.ts.map +1 -1
- package/dist/server/request.js +37 -433
- package/dist/server/request.js.map +1 -1
- package/dist/server/response.d.ts +112 -156
- package/dist/server/response.d.ts.map +1 -1
- package/dist/server/response.js +129 -279
- package/dist/server/response.js.map +1 -1
- package/dist/swagger/decorators.d.ts +81 -0
- package/dist/swagger/decorators.d.ts.map +1 -0
- package/dist/swagger/decorators.js +172 -0
- package/dist/swagger/decorators.js.map +1 -0
- package/dist/swagger/generator.d.ts +19 -0
- package/dist/swagger/generator.d.ts.map +1 -0
- package/dist/swagger/generator.js +344 -0
- package/dist/swagger/generator.js.map +1 -0
- package/dist/swagger/index.d.ts +31 -0
- package/dist/swagger/index.d.ts.map +1 -0
- package/dist/swagger/index.js +53 -0
- package/dist/swagger/index.js.map +1 -0
- package/dist/swagger/mounter.d.ts +7 -0
- package/dist/swagger/mounter.d.ts.map +1 -0
- package/dist/swagger/mounter.js +56 -0
- package/dist/swagger/mounter.js.map +1 -0
- package/dist/swagger/types.d.ts +190 -0
- package/dist/swagger/types.d.ts.map +1 -0
- package/dist/swagger/types.js +3 -0
- package/dist/swagger/types.js.map +1 -0
- package/dist/swagger/ui.d.ts +6 -0
- package/dist/swagger/ui.d.ts.map +1 -0
- package/dist/swagger/ui.js +118 -0
- package/dist/swagger/ui.js.map +1 -0
- package/dist/testing/index.d.ts.map +1 -1
- package/dist/testing/index.js +6 -1
- package/dist/testing/index.js.map +1 -1
- package/dist/testing/mocks.d.ts.map +1 -1
- package/dist/testing/mocks.js +15 -3
- package/dist/testing/mocks.js.map +1 -1
- package/dist/utils/logger.d.ts +8 -0
- package/dist/utils/logger.d.ts.map +1 -1
- package/dist/utils/logger.js +184 -1
- package/dist/utils/logger.js.map +1 -1
- package/dist/validator/builder.d.ts +223 -0
- package/dist/validator/builder.d.ts.map +1 -0
- package/dist/validator/builder.js +517 -0
- package/dist/validator/builder.js.map +1 -0
- package/dist/validator/engine.d.ts +19 -0
- package/dist/validator/engine.d.ts.map +1 -0
- package/dist/validator/engine.js +568 -0
- package/dist/validator/engine.js.map +1 -0
- package/dist/validator/error.d.ts +12 -0
- package/dist/validator/error.d.ts.map +1 -0
- package/dist/validator/error.js +63 -0
- package/dist/validator/error.js.map +1 -0
- package/dist/validator/pagination.d.ts +40 -0
- package/dist/validator/pagination.d.ts.map +1 -0
- package/dist/validator/pagination.js +60 -0
- package/dist/validator/pagination.js.map +1 -0
- package/dist/validator/tex-types.d.ts +2 -1
- package/dist/validator/tex-types.d.ts.map +1 -1
- package/dist/validator/tex-types.js +2 -1
- package/dist/validator/tex-types.js.map +1 -1
- package/dist/validator/tex.d.ts +6 -142
- package/dist/validator/tex.d.ts.map +1 -1
- package/dist/validator/tex.js +14 -733
- package/dist/validator/tex.js.map +1 -1
- package/dist/validator/types.d.ts +83 -0
- package/dist/validator/types.d.ts.map +1 -0
- package/dist/validator/types.js +3 -0
- package/dist/validator/types.js.map +1 -0
- package/package.json +8 -4
- package/dist/dev/error-overlay.d.ts +0 -3
- package/dist/dev/error-overlay.d.ts.map +0 -1
- package/dist/dev/error-overlay.js +0 -118
- package/dist/dev/error-overlay.js.map +0 -1
package/dist/config/types.d.ts
CHANGED
|
@@ -56,6 +56,8 @@ export interface HealthCheckConfig {
|
|
|
56
56
|
path?: string;
|
|
57
57
|
checks?: (() => Promise<boolean>)[];
|
|
58
58
|
}
|
|
59
|
+
import type { SwaggerConfig } from '../swagger/types';
|
|
60
|
+
export type { SwaggerConfig } from '../swagger/types';
|
|
59
61
|
export interface ExisConfig {
|
|
60
62
|
port?: number;
|
|
61
63
|
host?: string;
|
|
@@ -64,11 +66,15 @@ export interface ExisConfig {
|
|
|
64
66
|
telemetry?: TelemetryConfig | boolean;
|
|
65
67
|
metrics?: MetricsConfig | boolean;
|
|
66
68
|
healthcheck?: HealthCheckConfig | boolean;
|
|
69
|
+
docs?: SwaggerConfig | boolean;
|
|
70
|
+
swagger?: SwaggerConfig | boolean;
|
|
67
71
|
helmet?: HelmetConfig | boolean;
|
|
68
72
|
trustProxy?: boolean | number;
|
|
69
73
|
bodyLimit?: number;
|
|
70
74
|
env?: 'development' | 'production' | 'test';
|
|
71
75
|
compression?: boolean;
|
|
76
|
+
blockProbes?: boolean | import('../middleware/security').BlockProbesOptions;
|
|
77
|
+
blockSuspiciousProbes?: boolean | import('../middleware/security').BlockProbesOptions;
|
|
72
78
|
keepAlive?: KeepAliveConfig | boolean;
|
|
73
79
|
ssl?: SslConfig;
|
|
74
80
|
http2?: boolean;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/config/types.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/config/types.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Standard, production-tested cron expression constants.
|
|
3
|
+
*/
|
|
4
|
+
export declare const CronExpression: {
|
|
5
|
+
readonly EVERY_SECOND: "* * * * * *";
|
|
6
|
+
readonly EVERY_5_SECONDS: "*/5 * * * * *";
|
|
7
|
+
readonly EVERY_10_SECONDS: "*/10 * * * * *";
|
|
8
|
+
readonly EVERY_30_SECONDS: "*/30 * * * * *";
|
|
9
|
+
readonly EVERY_MINUTE: "* * * * *";
|
|
10
|
+
readonly EVERY_2_MINUTES: "*/2 * * * *";
|
|
11
|
+
readonly EVERY_3_MINUTES: "*/3 * * * *";
|
|
12
|
+
readonly EVERY_5_MINUTES: "*/5 * * * *";
|
|
13
|
+
readonly EVERY_10_MINUTES: "*/10 * * * *";
|
|
14
|
+
readonly EVERY_15_MINUTES: "*/15 * * * *";
|
|
15
|
+
readonly EVERY_30_MINUTES: "*/30 * * * *";
|
|
16
|
+
readonly EVERY_HOUR: "0 * * * *";
|
|
17
|
+
readonly EVERY_2_HOURS: "0 */2 * * *";
|
|
18
|
+
readonly EVERY_3_HOURS: "0 */3 * * *";
|
|
19
|
+
readonly EVERY_6_HOURS: "0 */6 * * *";
|
|
20
|
+
readonly EVERY_12_HOURS: "0 */12 * * *";
|
|
21
|
+
readonly EVERY_DAY_AT_MIDNIGHT: "0 0 * * *";
|
|
22
|
+
readonly EVERY_DAY_AT_1AM: "0 1 * * *";
|
|
23
|
+
readonly EVERY_DAY_AT_2AM: "0 2 * * *";
|
|
24
|
+
readonly EVERY_DAY_AT_NOON: "0 12 * * *";
|
|
25
|
+
readonly EVERY_WEEK: "0 0 * * 0";
|
|
26
|
+
readonly EVERY_WEEKDAY: "0 0 * * 1-5";
|
|
27
|
+
readonly EVERY_WEEKEND: "0 0 * * 6,0";
|
|
28
|
+
readonly EVERY_MONTH: "0 0 1 * *";
|
|
29
|
+
readonly EVERY_QUARTER: "0 0 1 1,4,7,10 *";
|
|
30
|
+
readonly EVERY_YEAR: "0 0 1 1 *";
|
|
31
|
+
};
|
|
32
|
+
export type CronExpressionValue = (typeof CronExpression)[keyof typeof CronExpression];
|
|
33
|
+
/**
|
|
34
|
+
* Human-readable duration converter into standard cron patterns.
|
|
35
|
+
*
|
|
36
|
+
* @example
|
|
37
|
+
* ```typescript
|
|
38
|
+
* every('5 minutes') // Every 5 minutes
|
|
39
|
+
* every('10 seconds') // Every 10 seconds
|
|
40
|
+
* every('2 hours') // Every 2 hours
|
|
41
|
+
* every('1 day') // Daily at midnight
|
|
42
|
+
* ```
|
|
43
|
+
*/
|
|
44
|
+
export declare function every(duration: string): string;
|
|
45
|
+
//# sourceMappingURL=expressions.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"expressions.d.ts","sourceRoot":"","sources":["../../src/cron/expressions.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,eAAO,MAAM,cAAc;;;;;;;;;;;;;;;;;;;;;;;;;;;CA2BjB,CAAA;AAEV,MAAM,MAAM,mBAAmB,GAC7B,CAAC,OAAO,cAAc,CAAC,CAAC,MAAM,OAAO,cAAc,CAAC,CAAA;AAEtD;;;;;;;;;;GAUG;AACH,wBAAgB,KAAK,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CA8C9C"}
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.CronExpression = void 0;
|
|
4
|
+
exports.every = every;
|
|
5
|
+
/**
|
|
6
|
+
* Standard, production-tested cron expression constants.
|
|
7
|
+
*/
|
|
8
|
+
exports.CronExpression = {
|
|
9
|
+
EVERY_SECOND: '* * * * * *',
|
|
10
|
+
EVERY_5_SECONDS: '*/5 * * * * *',
|
|
11
|
+
EVERY_10_SECONDS: '*/10 * * * * *',
|
|
12
|
+
EVERY_30_SECONDS: '*/30 * * * * *',
|
|
13
|
+
EVERY_MINUTE: '* * * * *',
|
|
14
|
+
EVERY_2_MINUTES: '*/2 * * * *',
|
|
15
|
+
EVERY_3_MINUTES: '*/3 * * * *',
|
|
16
|
+
EVERY_5_MINUTES: '*/5 * * * *',
|
|
17
|
+
EVERY_10_MINUTES: '*/10 * * * *',
|
|
18
|
+
EVERY_15_MINUTES: '*/15 * * * *',
|
|
19
|
+
EVERY_30_MINUTES: '*/30 * * * *',
|
|
20
|
+
EVERY_HOUR: '0 * * * *',
|
|
21
|
+
EVERY_2_HOURS: '0 */2 * * *',
|
|
22
|
+
EVERY_3_HOURS: '0 */3 * * *',
|
|
23
|
+
EVERY_6_HOURS: '0 */6 * * *',
|
|
24
|
+
EVERY_12_HOURS: '0 */12 * * *',
|
|
25
|
+
EVERY_DAY_AT_MIDNIGHT: '0 0 * * *',
|
|
26
|
+
EVERY_DAY_AT_1AM: '0 1 * * *',
|
|
27
|
+
EVERY_DAY_AT_2AM: '0 2 * * *',
|
|
28
|
+
EVERY_DAY_AT_NOON: '0 12 * * *',
|
|
29
|
+
EVERY_WEEK: '0 0 * * 0',
|
|
30
|
+
EVERY_WEEKDAY: '0 0 * * 1-5',
|
|
31
|
+
EVERY_WEEKEND: '0 0 * * 6,0',
|
|
32
|
+
EVERY_MONTH: '0 0 1 * *',
|
|
33
|
+
EVERY_QUARTER: '0 0 1 1,4,7,10 *',
|
|
34
|
+
EVERY_YEAR: '0 0 1 1 *',
|
|
35
|
+
};
|
|
36
|
+
/**
|
|
37
|
+
* Human-readable duration converter into standard cron patterns.
|
|
38
|
+
*
|
|
39
|
+
* @example
|
|
40
|
+
* ```typescript
|
|
41
|
+
* every('5 minutes') // Every 5 minutes
|
|
42
|
+
* every('10 seconds') // Every 10 seconds
|
|
43
|
+
* every('2 hours') // Every 2 hours
|
|
44
|
+
* every('1 day') // Daily at midnight
|
|
45
|
+
* ```
|
|
46
|
+
*/
|
|
47
|
+
function every(duration) {
|
|
48
|
+
const normalized = duration.trim().toLowerCase();
|
|
49
|
+
const match = normalized.match(/^(\d+)\s*(s|sec|second|seconds|m|min|minute|minutes|h|hr|hour|hours|d|day|days|w|week|weeks|mo|month|months)$/);
|
|
50
|
+
if (!match) {
|
|
51
|
+
throw new Error(`Invalid duration string "${duration}". Expected format like "5 minutes", "30 seconds", "2 hours", "1 day".`);
|
|
52
|
+
}
|
|
53
|
+
const count = parseInt(match[1], 10);
|
|
54
|
+
const unit = match[2];
|
|
55
|
+
if (unit.startsWith('s')) {
|
|
56
|
+
if (count === 1)
|
|
57
|
+
return exports.CronExpression.EVERY_SECOND;
|
|
58
|
+
return `*/${count} * * * * *`;
|
|
59
|
+
}
|
|
60
|
+
if (unit.startsWith('m') && !unit.startsWith('mo')) {
|
|
61
|
+
if (count === 1)
|
|
62
|
+
return exports.CronExpression.EVERY_MINUTE;
|
|
63
|
+
return `*/${count} * * * *`;
|
|
64
|
+
}
|
|
65
|
+
if (unit.startsWith('h')) {
|
|
66
|
+
if (count === 1)
|
|
67
|
+
return exports.CronExpression.EVERY_HOUR;
|
|
68
|
+
return `0 */${count} * * *`;
|
|
69
|
+
}
|
|
70
|
+
if (unit.startsWith('d')) {
|
|
71
|
+
if (count === 1)
|
|
72
|
+
return exports.CronExpression.EVERY_DAY_AT_MIDNIGHT;
|
|
73
|
+
return `0 0 */${count} * *`;
|
|
74
|
+
}
|
|
75
|
+
if (unit.startsWith('w')) {
|
|
76
|
+
if (count === 1)
|
|
77
|
+
return exports.CronExpression.EVERY_WEEK;
|
|
78
|
+
return `0 0 * * 0`;
|
|
79
|
+
}
|
|
80
|
+
if (unit.startsWith('mo')) {
|
|
81
|
+
if (count === 1)
|
|
82
|
+
return exports.CronExpression.EVERY_MONTH;
|
|
83
|
+
return `0 0 1 */${count} *`;
|
|
84
|
+
}
|
|
85
|
+
throw new Error(`Unsupported duration unit in "${duration}"`);
|
|
86
|
+
}
|
|
87
|
+
//# sourceMappingURL=expressions.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"expressions.js","sourceRoot":"","sources":["../../src/cron/expressions.ts"],"names":[],"mappings":";;;AA8CA,sBA8CC;AA5FD;;GAEG;AACU,QAAA,cAAc,GAAG;IAC5B,YAAY,EAAE,aAAa;IAC3B,eAAe,EAAE,eAAe;IAChC,gBAAgB,EAAE,gBAAgB;IAClC,gBAAgB,EAAE,gBAAgB;IAClC,YAAY,EAAE,WAAW;IACzB,eAAe,EAAE,aAAa;IAC9B,eAAe,EAAE,aAAa;IAC9B,eAAe,EAAE,aAAa;IAC9B,gBAAgB,EAAE,cAAc;IAChC,gBAAgB,EAAE,cAAc;IAChC,gBAAgB,EAAE,cAAc;IAChC,UAAU,EAAE,WAAW;IACvB,aAAa,EAAE,aAAa;IAC5B,aAAa,EAAE,aAAa;IAC5B,aAAa,EAAE,aAAa;IAC5B,cAAc,EAAE,cAAc;IAC9B,qBAAqB,EAAE,WAAW;IAClC,gBAAgB,EAAE,WAAW;IAC7B,gBAAgB,EAAE,WAAW;IAC7B,iBAAiB,EAAE,YAAY;IAC/B,UAAU,EAAE,WAAW;IACvB,aAAa,EAAE,aAAa;IAC5B,aAAa,EAAE,aAAa;IAC5B,WAAW,EAAE,WAAW;IACxB,aAAa,EAAE,kBAAkB;IACjC,UAAU,EAAE,WAAW;CACf,CAAA;AAKV;;;;;;;;;;GAUG;AACH,SAAgB,KAAK,CAAC,QAAgB;IACpC,MAAM,UAAU,GAAG,QAAQ,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAA;IAChD,MAAM,KAAK,GAAG,UAAU,CAAC,KAAK,CAC5B,+GAA+G,CAChH,CAAA;IAED,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,MAAM,IAAI,KAAK,CACb,4BAA4B,QAAQ,wEAAwE,CAC7G,CAAA;IACH,CAAC;IAED,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAA;IACpC,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAA;IAErB,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;QACzB,IAAI,KAAK,KAAK,CAAC;YAAE,OAAO,sBAAc,CAAC,YAAY,CAAA;QACnD,OAAO,KAAK,KAAK,YAAY,CAAA;IAC/B,CAAC;IAED,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;QACnD,IAAI,KAAK,KAAK,CAAC;YAAE,OAAO,sBAAc,CAAC,YAAY,CAAA;QACnD,OAAO,KAAK,KAAK,UAAU,CAAA;IAC7B,CAAC;IAED,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;QACzB,IAAI,KAAK,KAAK,CAAC;YAAE,OAAO,sBAAc,CAAC,UAAU,CAAA;QACjD,OAAO,OAAO,KAAK,QAAQ,CAAA;IAC7B,CAAC;IAED,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;QACzB,IAAI,KAAK,KAAK,CAAC;YAAE,OAAO,sBAAc,CAAC,qBAAqB,CAAA;QAC5D,OAAO,SAAS,KAAK,MAAM,CAAA;IAC7B,CAAC;IAED,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;QACzB,IAAI,KAAK,KAAK,CAAC;YAAE,OAAO,sBAAc,CAAC,UAAU,CAAA;QACjD,OAAO,WAAW,CAAA;IACpB,CAAC;IAED,IAAI,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;QAC1B,IAAI,KAAK,KAAK,CAAC;YAAE,OAAO,sBAAc,CAAC,WAAW,CAAA;QAClD,OAAO,WAAW,KAAK,IAAI,CAAA;IAC7B,CAAC;IAED,MAAM,IAAI,KAAK,CAAC,iCAAiC,QAAQ,GAAG,CAAC,CAAA;AAC/D,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/cron/index.ts"],"names":[],"mappings":"AAAA,cAAc,SAAS,CAAA;AACvB,cAAc,UAAU,CAAA;AACxB,cAAc,eAAe,CAAA;AAC7B,cAAc,OAAO,CAAA;AACrB,cAAc,WAAW,CAAA"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
14
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
|
+
};
|
|
16
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
+
__exportStar(require("./types"), exports);
|
|
18
|
+
__exportStar(require("./parser"), exports);
|
|
19
|
+
__exportStar(require("./expressions"), exports);
|
|
20
|
+
__exportStar(require("./job"), exports);
|
|
21
|
+
__exportStar(require("./manager"), exports);
|
|
22
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cron/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,0CAAuB;AACvB,2CAAwB;AACxB,gDAA6B;AAC7B,wCAAqB;AACrB,4CAAyB"}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import type { App } from '../server/app';
|
|
2
|
+
import type { CronJobOptions, CronJobStatus, CronJobStats } from './types';
|
|
3
|
+
export declare class CronJob {
|
|
4
|
+
readonly name: string;
|
|
5
|
+
readonly schedule?: string;
|
|
6
|
+
readonly intervalMs?: number;
|
|
7
|
+
readonly timeoutMs?: number;
|
|
8
|
+
readonly timezone?: string;
|
|
9
|
+
readonly preventOverlap: boolean;
|
|
10
|
+
readonly retries: number;
|
|
11
|
+
readonly retryDelayMs: number;
|
|
12
|
+
private status;
|
|
13
|
+
private parsedPattern;
|
|
14
|
+
private timer;
|
|
15
|
+
private runningPromise;
|
|
16
|
+
private executionCount;
|
|
17
|
+
private failureCount;
|
|
18
|
+
private lastRun?;
|
|
19
|
+
private nextRun?;
|
|
20
|
+
private lastDurationMs?;
|
|
21
|
+
private lastError?;
|
|
22
|
+
private abortController;
|
|
23
|
+
private handler;
|
|
24
|
+
private onErrorHook?;
|
|
25
|
+
private app;
|
|
26
|
+
constructor(options: CronJobOptions, app: App<any>);
|
|
27
|
+
getStatus(): CronJobStatus;
|
|
28
|
+
getStats(): CronJobStats;
|
|
29
|
+
start(): this;
|
|
30
|
+
pause(): this;
|
|
31
|
+
resume(): this;
|
|
32
|
+
stop(): this;
|
|
33
|
+
/**
|
|
34
|
+
* Manually triggers an immediate execution of the job without affecting its recurring schedule.
|
|
35
|
+
*/
|
|
36
|
+
trigger(): Promise<any>;
|
|
37
|
+
/**
|
|
38
|
+
* Schedules the next timer execution.
|
|
39
|
+
*/
|
|
40
|
+
private scheduleNextRun;
|
|
41
|
+
/**
|
|
42
|
+
* Executes the handler inside an isolated error sandbox with overlap prevention.
|
|
43
|
+
*/
|
|
44
|
+
private execute;
|
|
45
|
+
/**
|
|
46
|
+
* Awaits completion of in-flight execution during graceful shutdown.
|
|
47
|
+
*/
|
|
48
|
+
drain(timeoutMs?: number): Promise<void>;
|
|
49
|
+
}
|
|
50
|
+
//# sourceMappingURL=job.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"job.d.ts","sourceRoot":"","sources":["../../src/cron/job.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,eAAe,CAAA;AACxC,OAAO,KAAK,EACV,cAAc,EACd,aAAa,EACb,YAAY,EAEb,MAAM,SAAS,CAAA;AAOhB,qBAAa,OAAO;IAClB,SAAgB,IAAI,EAAE,MAAM,CAAA;IAC5B,SAAgB,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjC,SAAgB,UAAU,CAAC,EAAE,MAAM,CAAA;IACnC,SAAgB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClC,SAAgB,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjC,SAAgB,cAAc,EAAE,OAAO,CAAA;IACvC,SAAgB,OAAO,EAAE,MAAM,CAAA;IAC/B,SAAgB,YAAY,EAAE,MAAM,CAAA;IAEpC,OAAO,CAAC,MAAM,CAAwB;IACtC,OAAO,CAAC,aAAa,CAAiC;IACtD,OAAO,CAAC,KAAK,CAA8B;IAC3C,OAAO,CAAC,cAAc,CAA4B;IAClD,OAAO,CAAC,cAAc,CAAI;IAC1B,OAAO,CAAC,YAAY,CAAI;IACxB,OAAO,CAAC,OAAO,CAAC,CAAM;IACtB,OAAO,CAAC,OAAO,CAAC,CAAM;IACtB,OAAO,CAAC,cAAc,CAAC,CAAQ;IAC/B,OAAO,CAAC,SAAS,CAAC,CAAQ;IAC1B,OAAO,CAAC,eAAe,CAA+B;IAEtD,OAAO,CAAC,OAAO,CAA2B;IAC1C,OAAO,CAAC,WAAW,CAAC,CAAwD;IAC5E,OAAO,CAAC,GAAG,CAAU;gBAET,OAAO,EAAE,cAAc,EAAE,GAAG,EAAE,GAAG,CAAC,GAAG,CAAC;IA8B3C,SAAS,IAAI,aAAa;IAI1B,QAAQ,IAAI,YAAY;IAiBxB,KAAK,IAAI,IAAI;IAUb,KAAK,IAAI,IAAI;IAUb,MAAM,IAAI,IAAI;IAQd,IAAI,IAAI,IAAI;IAcnB;;OAEG;IACU,OAAO,IAAI,OAAO,CAAC,GAAG,CAAC;IAIpC;;OAEG;IACH,OAAO,CAAC,eAAe;IAwDvB;;OAEG;YACW,OAAO;IAsFrB;;OAEG;IACU,KAAK,CAAC,SAAS,SAAO,GAAG,OAAO,CAAC,IAAI,CAAC;CA2BpD"}
|
package/dist/cron/job.js
ADDED
|
@@ -0,0 +1,247 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.CronJob = void 0;
|
|
4
|
+
const parser_1 = require("./parser");
|
|
5
|
+
class CronJob {
|
|
6
|
+
constructor(options, app) {
|
|
7
|
+
this.status = 'idle';
|
|
8
|
+
this.parsedPattern = null;
|
|
9
|
+
this.timer = null;
|
|
10
|
+
this.runningPromise = null;
|
|
11
|
+
this.executionCount = 0;
|
|
12
|
+
this.failureCount = 0;
|
|
13
|
+
this.abortController = null;
|
|
14
|
+
this.app = app;
|
|
15
|
+
this.name =
|
|
16
|
+
options.name || `job_${Math.random().toString(36).substring(2, 9)}`;
|
|
17
|
+
this.schedule = options.schedule;
|
|
18
|
+
this.intervalMs = options.interval;
|
|
19
|
+
this.timeoutMs = options.timeout;
|
|
20
|
+
this.timezone = options.timezone;
|
|
21
|
+
this.preventOverlap = options.preventOverlap !== false;
|
|
22
|
+
this.retries = options.retries ?? 0;
|
|
23
|
+
this.retryDelayMs = options.retryDelayMs ?? 1000;
|
|
24
|
+
this.onErrorHook = options.onError;
|
|
25
|
+
const fn = options.run || options.handle;
|
|
26
|
+
if (typeof fn !== 'function') {
|
|
27
|
+
throw new Error(`CronJob "${this.name}" requires a valid handler function ('run' or 'handle')`);
|
|
28
|
+
}
|
|
29
|
+
this.handler = fn;
|
|
30
|
+
if (this.schedule) {
|
|
31
|
+
this.parsedPattern = (0, parser_1.parseCronExpression)(this.schedule);
|
|
32
|
+
}
|
|
33
|
+
if (options.autoStart !== false) {
|
|
34
|
+
this.start();
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
getStatus() {
|
|
38
|
+
return this.status;
|
|
39
|
+
}
|
|
40
|
+
getStats() {
|
|
41
|
+
return {
|
|
42
|
+
name: this.name,
|
|
43
|
+
status: this.status,
|
|
44
|
+
schedule: this.schedule,
|
|
45
|
+
intervalMs: this.intervalMs,
|
|
46
|
+
timezone: this.timezone,
|
|
47
|
+
preventOverlap: this.preventOverlap,
|
|
48
|
+
lastRun: this.lastRun,
|
|
49
|
+
nextRun: this.nextRun,
|
|
50
|
+
executionCount: this.executionCount,
|
|
51
|
+
failureCount: this.failureCount,
|
|
52
|
+
lastDurationMs: this.lastDurationMs,
|
|
53
|
+
lastError: this.lastError,
|
|
54
|
+
};
|
|
55
|
+
}
|
|
56
|
+
start() {
|
|
57
|
+
if (this.status === 'running' || this.status === 'idle') {
|
|
58
|
+
this.scheduleNextRun();
|
|
59
|
+
}
|
|
60
|
+
else if (this.status === 'paused' || this.status === 'stopped') {
|
|
61
|
+
this.status = 'idle';
|
|
62
|
+
this.scheduleNextRun();
|
|
63
|
+
}
|
|
64
|
+
return this;
|
|
65
|
+
}
|
|
66
|
+
pause() {
|
|
67
|
+
this.status = 'paused';
|
|
68
|
+
if (this.timer) {
|
|
69
|
+
clearTimeout(this.timer);
|
|
70
|
+
this.timer = null;
|
|
71
|
+
}
|
|
72
|
+
this.nextRun = undefined;
|
|
73
|
+
return this;
|
|
74
|
+
}
|
|
75
|
+
resume() {
|
|
76
|
+
if (this.status === 'paused') {
|
|
77
|
+
this.status = 'idle';
|
|
78
|
+
this.scheduleNextRun();
|
|
79
|
+
}
|
|
80
|
+
return this;
|
|
81
|
+
}
|
|
82
|
+
stop() {
|
|
83
|
+
this.status = 'stopped';
|
|
84
|
+
if (this.timer) {
|
|
85
|
+
clearTimeout(this.timer);
|
|
86
|
+
this.timer = null;
|
|
87
|
+
}
|
|
88
|
+
if (this.abortController) {
|
|
89
|
+
this.abortController.abort();
|
|
90
|
+
this.abortController = null;
|
|
91
|
+
}
|
|
92
|
+
this.nextRun = undefined;
|
|
93
|
+
return this;
|
|
94
|
+
}
|
|
95
|
+
/**
|
|
96
|
+
* Manually triggers an immediate execution of the job without affecting its recurring schedule.
|
|
97
|
+
*/
|
|
98
|
+
async trigger() {
|
|
99
|
+
return this.execute('manual');
|
|
100
|
+
}
|
|
101
|
+
/**
|
|
102
|
+
* Schedules the next timer execution.
|
|
103
|
+
*/
|
|
104
|
+
scheduleNextRun() {
|
|
105
|
+
if (this.status === 'stopped' || this.status === 'paused')
|
|
106
|
+
return;
|
|
107
|
+
if (this.timer) {
|
|
108
|
+
clearTimeout(this.timer);
|
|
109
|
+
this.timer = null;
|
|
110
|
+
}
|
|
111
|
+
if (this.timeoutMs !== undefined) {
|
|
112
|
+
this.nextRun = new Date(Date.now() + this.timeoutMs);
|
|
113
|
+
this.timer = setTimeout(async () => {
|
|
114
|
+
await this.execute('timeout');
|
|
115
|
+
this.status = 'stopped';
|
|
116
|
+
}, this.timeoutMs);
|
|
117
|
+
this.timer.unref?.();
|
|
118
|
+
return;
|
|
119
|
+
}
|
|
120
|
+
if (this.intervalMs !== undefined) {
|
|
121
|
+
this.nextRun = new Date(Date.now() + this.intervalMs);
|
|
122
|
+
this.timer = setTimeout(async () => {
|
|
123
|
+
await this.execute('interval');
|
|
124
|
+
if (this.status !== 'stopped' && this.status !== 'paused') {
|
|
125
|
+
this.scheduleNextRun();
|
|
126
|
+
}
|
|
127
|
+
}, this.intervalMs);
|
|
128
|
+
this.timer.unref?.();
|
|
129
|
+
return;
|
|
130
|
+
}
|
|
131
|
+
if (this.parsedPattern) {
|
|
132
|
+
try {
|
|
133
|
+
const nextDate = (0, parser_1.getNextCronDate)(this.parsedPattern, new Date(), this.timezone);
|
|
134
|
+
this.nextRun = nextDate;
|
|
135
|
+
const delayMs = Math.max(0, nextDate.getTime() - Date.now());
|
|
136
|
+
this.timer = setTimeout(async () => {
|
|
137
|
+
await this.execute('cron');
|
|
138
|
+
if (this.status !== 'stopped' && this.status !== 'paused') {
|
|
139
|
+
this.scheduleNextRun();
|
|
140
|
+
}
|
|
141
|
+
}, delayMs);
|
|
142
|
+
this.timer.unref?.();
|
|
143
|
+
}
|
|
144
|
+
catch (err) {
|
|
145
|
+
this.app.log?.error({ err: err.message, job: this.name }, `[exis:cron] Failed to compute next execution date for "${this.name}"`);
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
/**
|
|
150
|
+
* Executes the handler inside an isolated error sandbox with overlap prevention.
|
|
151
|
+
*/
|
|
152
|
+
async execute(_triggerSource) {
|
|
153
|
+
if (this.status === 'running' && this.preventOverlap) {
|
|
154
|
+
this.app.log?.warn({ job: this.name }, `[exis:cron] Skipped execution of "${this.name}" because previous instance is still running (preventOverlap: true)`);
|
|
155
|
+
return;
|
|
156
|
+
}
|
|
157
|
+
const previousStatus = this.status;
|
|
158
|
+
this.status = 'running';
|
|
159
|
+
this.abortController = new AbortController();
|
|
160
|
+
const startedAt = new Date();
|
|
161
|
+
this.lastRun = startedAt;
|
|
162
|
+
this.executionCount++;
|
|
163
|
+
const context = {
|
|
164
|
+
app: this.app,
|
|
165
|
+
log: this.app.log,
|
|
166
|
+
jobName: this.name,
|
|
167
|
+
startedAt,
|
|
168
|
+
iteration: this.executionCount,
|
|
169
|
+
signal: this.abortController.signal,
|
|
170
|
+
};
|
|
171
|
+
const startTimer = process.hrtime();
|
|
172
|
+
const runWithRetry = async (attempt = 0) => {
|
|
173
|
+
try {
|
|
174
|
+
return await this.handler(context);
|
|
175
|
+
}
|
|
176
|
+
catch (err) {
|
|
177
|
+
if (attempt < this.retries) {
|
|
178
|
+
this.app.log?.warn({ job: this.name, attempt: attempt + 1, retries: this.retries }, `[exis:cron] Retrying job "${this.name}" in ${this.retryDelayMs}ms`);
|
|
179
|
+
await new Promise((resolve) => setTimeout(resolve, this.retryDelayMs));
|
|
180
|
+
return runWithRetry(attempt + 1);
|
|
181
|
+
}
|
|
182
|
+
throw err;
|
|
183
|
+
}
|
|
184
|
+
};
|
|
185
|
+
this.runningPromise = runWithRetry();
|
|
186
|
+
try {
|
|
187
|
+
const result = await this.runningPromise;
|
|
188
|
+
const [sec, nano] = process.hrtime(startTimer);
|
|
189
|
+
this.lastDurationMs = Math.round(sec * 1000 + nano / 1e6);
|
|
190
|
+
this.lastError = undefined;
|
|
191
|
+
return result;
|
|
192
|
+
}
|
|
193
|
+
catch (err) {
|
|
194
|
+
const [sec, nano] = process.hrtime(startTimer);
|
|
195
|
+
this.lastDurationMs = Math.round(sec * 1000 + nano / 1e6);
|
|
196
|
+
this.failureCount++;
|
|
197
|
+
this.lastError = err?.message || String(err);
|
|
198
|
+
this.app.log?.error({
|
|
199
|
+
err: this.lastError,
|
|
200
|
+
job: this.name,
|
|
201
|
+
durationMs: this.lastDurationMs,
|
|
202
|
+
}, `[exis:cron] Unhandled error in cron job "${this.name}"`);
|
|
203
|
+
if (this.onErrorHook) {
|
|
204
|
+
try {
|
|
205
|
+
await this.onErrorHook(err, context);
|
|
206
|
+
}
|
|
207
|
+
catch (hookErr) {
|
|
208
|
+
this.app.log?.error({ err: hookErr.message, job: this.name }, `[exis:cron] Error in onError hook for "${this.name}"`);
|
|
209
|
+
}
|
|
210
|
+
}
|
|
211
|
+
}
|
|
212
|
+
finally {
|
|
213
|
+
this.runningPromise = null;
|
|
214
|
+
this.abortController = null;
|
|
215
|
+
if (this.status === 'running') {
|
|
216
|
+
this.status = previousStatus === 'running' ? 'idle' : previousStatus;
|
|
217
|
+
}
|
|
218
|
+
}
|
|
219
|
+
}
|
|
220
|
+
/**
|
|
221
|
+
* Awaits completion of in-flight execution during graceful shutdown.
|
|
222
|
+
*/
|
|
223
|
+
async drain(timeoutMs = 5000) {
|
|
224
|
+
this.stop();
|
|
225
|
+
if (this.runningPromise) {
|
|
226
|
+
let timeoutHandle;
|
|
227
|
+
const timeoutPromise = new Promise((_, reject) => {
|
|
228
|
+
timeoutHandle = setTimeout(() => {
|
|
229
|
+
reject(new Error(`[exis:cron] Job "${this.name}" drain timed out after ${timeoutMs}ms`));
|
|
230
|
+
}, timeoutMs);
|
|
231
|
+
timeoutHandle.unref?.();
|
|
232
|
+
});
|
|
233
|
+
try {
|
|
234
|
+
await Promise.race([this.runningPromise, timeoutPromise]);
|
|
235
|
+
}
|
|
236
|
+
catch (err) {
|
|
237
|
+
this.app.log?.warn({ err }, `[exis:cron] Drain timeout on job "${this.name}"`);
|
|
238
|
+
}
|
|
239
|
+
finally {
|
|
240
|
+
if (timeoutHandle)
|
|
241
|
+
clearTimeout(timeoutHandle);
|
|
242
|
+
}
|
|
243
|
+
}
|
|
244
|
+
}
|
|
245
|
+
}
|
|
246
|
+
exports.CronJob = CronJob;
|
|
247
|
+
//# sourceMappingURL=job.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"job.js","sourceRoot":"","sources":["../../src/cron/job.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
import type { App } from '../server/app';
|
|
2
|
+
import { CronJob } from './job';
|
|
3
|
+
import type { CronJobOptions, CronJobStats, CronContext } from './types';
|
|
4
|
+
export declare class CronManager {
|
|
5
|
+
private jobs;
|
|
6
|
+
private app;
|
|
7
|
+
constructor(app: App<any>);
|
|
8
|
+
/**
|
|
9
|
+
* Checks whether a cron job with the given name is registered.
|
|
10
|
+
*/
|
|
11
|
+
has(name: string): boolean;
|
|
12
|
+
/**
|
|
13
|
+
* Registers and optionally starts a scheduled background task or cron job.
|
|
14
|
+
*
|
|
15
|
+
* @param nameOrOptions Job name or configuration options
|
|
16
|
+
* @param schedule Optional cron schedule pattern if name is passed as first argument
|
|
17
|
+
* @param handler Optional execution handler if name is passed as first argument
|
|
18
|
+
* @param options Optional additional configuration options
|
|
19
|
+
* @returns Active `CronJob` instance
|
|
20
|
+
*
|
|
21
|
+
* @example
|
|
22
|
+
* ```ts
|
|
23
|
+
* app.cron.schedule({
|
|
24
|
+
* name: 'nightly-backup',
|
|
25
|
+
* schedule: '0 2 * * *',
|
|
26
|
+
* timezone: 'UTC',
|
|
27
|
+
* run: async ({ log }) => {
|
|
28
|
+
* log.info('Running database backup')
|
|
29
|
+
* }
|
|
30
|
+
* })
|
|
31
|
+
* ```
|
|
32
|
+
*/
|
|
33
|
+
schedule(nameOrOptions: string | CronJobOptions, schedule?: string, handler?: (ctx: CronContext) => any, options?: Partial<CronJobOptions>): CronJob;
|
|
34
|
+
/**
|
|
35
|
+
* Schedules a recurring task using fixed millisecond intervals.
|
|
36
|
+
*/
|
|
37
|
+
interval(name: string, ms: number, handler: (ctx: CronContext) => any, options?: Partial<CronJobOptions>): CronJob;
|
|
38
|
+
/**
|
|
39
|
+
* Schedules a one-time delayed task.
|
|
40
|
+
*/
|
|
41
|
+
timeout(name: string, ms: number, handler: (ctx: CronContext) => any, options?: Partial<CronJobOptions>): CronJob;
|
|
42
|
+
/**
|
|
43
|
+
* Retrieves a registered cron job by its unique identifier.
|
|
44
|
+
*/
|
|
45
|
+
getJob(name: string): CronJob | undefined;
|
|
46
|
+
/**
|
|
47
|
+
* Returns a snapshot map of all registered cron jobs and their execution statistics.
|
|
48
|
+
*/
|
|
49
|
+
getJobs(): Map<string, CronJob>;
|
|
50
|
+
/**
|
|
51
|
+
* Returns an array of statistics for all registered jobs (last run, failure count, execution duration).
|
|
52
|
+
*/
|
|
53
|
+
getStats(): CronJobStats[];
|
|
54
|
+
/**
|
|
55
|
+
* Starts all registered idle, paused, or stopped cron jobs.
|
|
56
|
+
*/
|
|
57
|
+
startAll(): void;
|
|
58
|
+
/**
|
|
59
|
+
* Pauses all registered active cron jobs.
|
|
60
|
+
*/
|
|
61
|
+
pauseAll(): void;
|
|
62
|
+
/**
|
|
63
|
+
* Permanently stops all registered cron jobs.
|
|
64
|
+
*/
|
|
65
|
+
stopAll(): void;
|
|
66
|
+
/**
|
|
67
|
+
* Triggers immediate manual execution of a specific cron job by name.
|
|
68
|
+
*/
|
|
69
|
+
trigger(name: string): Promise<any>;
|
|
70
|
+
/**
|
|
71
|
+
* Gracefully waits for all in-flight cron job executions to finish before server shutdown.
|
|
72
|
+
*/
|
|
73
|
+
drain(timeoutMs?: number): Promise<void>;
|
|
74
|
+
}
|
|
75
|
+
/**
|
|
76
|
+
* Functional definition helper object for ExisJS cron jobs.
|
|
77
|
+
*/
|
|
78
|
+
export interface FunctionalCronDefinition {
|
|
79
|
+
__isExisCron: true;
|
|
80
|
+
options: CronJobOptions;
|
|
81
|
+
handler?: (ctx: CronContext) => any;
|
|
82
|
+
}
|
|
83
|
+
/**
|
|
84
|
+
* Declarative helper for creating scheduled background jobs and cron tasks.
|
|
85
|
+
*
|
|
86
|
+
* @param scheduleOrOptions Standard 5/6-field cron pattern (e.g. `'0 * * * *'`) or full `CronJobOptions`
|
|
87
|
+
* @param handler Execution function receiving `CronContext`
|
|
88
|
+
* @returns Functional cron definition ready for export
|
|
89
|
+
*
|
|
90
|
+
* @example
|
|
91
|
+
* ```ts
|
|
92
|
+
* // src/cron/cleanup.ts
|
|
93
|
+
* export default cron('0 0 * * *', async ({ log }) => {
|
|
94
|
+
* log.info('Running nightly cleanup')
|
|
95
|
+
* })
|
|
96
|
+
* ```
|
|
97
|
+
*/
|
|
98
|
+
export declare function cron(scheduleOrOptions: string | CronJobOptions, handler?: (ctx: CronContext) => any): FunctionalCronDefinition;
|
|
99
|
+
export declare namespace cron {
|
|
100
|
+
var every: (duration: string, handler: (ctx: CronContext) => any, options?: Omit<CronJobOptions, "schedule" | "run" | "handle">) => FunctionalCronDefinition;
|
|
101
|
+
var interval: (ms: number, handler: (ctx: CronContext) => any, options?: Omit<CronJobOptions, "interval" | "run" | "handle">) => FunctionalCronDefinition;
|
|
102
|
+
var timeout: (ms: number, handler: (ctx: CronContext) => any, options?: Omit<CronJobOptions, "timeout" | "run" | "handle">) => FunctionalCronDefinition;
|
|
103
|
+
}
|
|
104
|
+
export declare const defineCron: typeof cron;
|
|
105
|
+
//# sourceMappingURL=manager.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"manager.d.ts","sourceRoot":"","sources":["../../src/cron/manager.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,eAAe,CAAA;AACxC,OAAO,EAAE,OAAO,EAAE,MAAM,OAAO,CAAA;AAC/B,OAAO,KAAK,EAAE,cAAc,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,SAAS,CAAA;AAGxE,qBAAa,WAAW;IACtB,OAAO,CAAC,IAAI,CAA6B;IACzC,OAAO,CAAC,GAAG,CAAU;gBAET,GAAG,EAAE,GAAG,CAAC,GAAG,CAAC;IAIzB;;OAEG;IACI,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IAIjC;;;;;;;;;;;;;;;;;;;;OAoBG;IACI,QAAQ,CACb,aAAa,EAAE,MAAM,GAAG,cAAc,EACtC,QAAQ,CAAC,EAAE,MAAM,EACjB,OAAO,CAAC,EAAE,CAAC,GAAG,EAAE,WAAW,KAAK,GAAG,EACnC,OAAO,CAAC,EAAE,OAAO,CAAC,cAAc,CAAC,GAChC,OAAO;IAyBV;;OAEG;IACI,QAAQ,CACb,IAAI,EAAE,MAAM,EACZ,EAAE,EAAE,MAAM,EACV,OAAO,EAAE,CAAC,GAAG,EAAE,WAAW,KAAK,GAAG,EAClC,OAAO,CAAC,EAAE,OAAO,CAAC,cAAc,CAAC,GAChC,OAAO;IASV;;OAEG;IACI,OAAO,CACZ,IAAI,EAAE,MAAM,EACZ,EAAE,EAAE,MAAM,EACV,OAAO,EAAE,CAAC,GAAG,EAAE,WAAW,KAAK,GAAG,EAClC,OAAO,CAAC,EAAE,OAAO,CAAC,cAAc,CAAC,GAChC,OAAO;IASV;;OAEG;IACI,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,GAAG,SAAS;IAIhD;;OAEG;IACI,OAAO,IAAI,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC;IAItC;;OAEG;IACI,QAAQ,IAAI,YAAY,EAAE;IAIjC;;OAEG;IACI,QAAQ,IAAI,IAAI;IAMvB;;OAEG;IACI,QAAQ,IAAI,IAAI;IAMvB;;OAEG;IACI,OAAO,IAAI,IAAI;IAMtB;;OAEG;IACU,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC;IAQhD;;OAEG;IACU,KAAK,CAAC,SAAS,SAAO,GAAG,OAAO,CAAC,IAAI,CAAC;CAMpD;AAED;;GAEG;AACH,MAAM,WAAW,wBAAwB;IACvC,YAAY,EAAE,IAAI,CAAA;IAClB,OAAO,EAAE,cAAc,CAAA;IACvB,OAAO,CAAC,EAAE,CAAC,GAAG,EAAE,WAAW,KAAK,GAAG,CAAA;CACpC;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,IAAI,CAClB,iBAAiB,EAAE,MAAM,GAAG,cAAc,EAC1C,OAAO,CAAC,EAAE,CAAC,GAAG,EAAE,WAAW,KAAK,GAAG,GAClC,wBAAwB,CAoB1B;yBAvBe,IAAI;0BAyCR,MAAM,WACP,CAAC,GAAG,EAAE,WAAW,KAAK,GAAG,YACzB,IAAI,CAAC,cAAc,EAAE,UAAU,GAAG,KAAK,GAAG,QAAQ,CAAC,KAC3D,wBAAwB;uBAwBrB,MAAM,WACD,CAAC,GAAG,EAAE,WAAW,KAAK,GAAG,YACzB,IAAI,CAAC,cAAc,EAAE,UAAU,GAAG,KAAK,GAAG,QAAQ,CAAC,KAC3D,wBAAwB;sBAwBrB,MAAM,WACD,CAAC,GAAG,EAAE,WAAW,KAAK,GAAG,YACzB,IAAI,CAAC,cAAc,EAAE,SAAS,GAAG,KAAK,GAAG,QAAQ,CAAC,KAC1D,wBAAwB;;AAQ3B,eAAO,MAAM,UAAU,aAAO,CAAA"}
|