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.
Files changed (321) hide show
  1. package/dist/cli/commands/build.d.ts.map +1 -1
  2. package/dist/cli/commands/build.js +12 -0
  3. package/dist/cli/commands/build.js.map +1 -1
  4. package/dist/cli/commands/clean.d.ts +5 -0
  5. package/dist/cli/commands/clean.d.ts.map +1 -0
  6. package/dist/cli/commands/clean.js +30 -0
  7. package/dist/cli/commands/clean.js.map +1 -0
  8. package/dist/cli/commands/dev.d.ts.map +1 -1
  9. package/dist/cli/commands/dev.js +171 -86
  10. package/dist/cli/commands/dev.js.map +1 -1
  11. package/dist/cli/commands/generate.d.ts +6 -1
  12. package/dist/cli/commands/generate.d.ts.map +1 -1
  13. package/dist/cli/commands/generate.js +57 -2
  14. package/dist/cli/commands/generate.js.map +1 -1
  15. package/dist/cli/commands/start.d.ts.map +1 -1
  16. package/dist/cli/commands/start.js +54 -16
  17. package/dist/cli/commands/start.js.map +1 -1
  18. package/dist/cli/index.js +26 -3
  19. package/dist/cli/index.js.map +1 -1
  20. package/dist/cli/manifest.d.ts +1 -0
  21. package/dist/cli/manifest.d.ts.map +1 -1
  22. package/dist/cli/manifest.js +264 -33
  23. package/dist/cli/manifest.js.map +1 -1
  24. package/dist/cli/resolve-aliases.d.ts +1 -1
  25. package/dist/cli/resolve-aliases.d.ts.map +1 -1
  26. package/dist/cli/resolve-aliases.js +30 -13
  27. package/dist/cli/resolve-aliases.js.map +1 -1
  28. package/dist/config/config.d.ts +3 -1
  29. package/dist/config/config.d.ts.map +1 -1
  30. package/dist/config/config.js +9 -0
  31. package/dist/config/config.js.map +1 -1
  32. package/dist/config/types.d.ts +6 -0
  33. package/dist/config/types.d.ts.map +1 -1
  34. package/dist/cron/expressions.d.ts +45 -0
  35. package/dist/cron/expressions.d.ts.map +1 -0
  36. package/dist/cron/expressions.js +87 -0
  37. package/dist/cron/expressions.js.map +1 -0
  38. package/dist/cron/index.d.ts +6 -0
  39. package/dist/cron/index.d.ts.map +1 -0
  40. package/dist/cron/index.js +22 -0
  41. package/dist/cron/index.js.map +1 -0
  42. package/dist/cron/job.d.ts +50 -0
  43. package/dist/cron/job.d.ts.map +1 -0
  44. package/dist/cron/job.js +247 -0
  45. package/dist/cron/job.js.map +1 -0
  46. package/dist/cron/manager.d.ts +105 -0
  47. package/dist/cron/manager.d.ts.map +1 -0
  48. package/dist/cron/manager.js +245 -0
  49. package/dist/cron/manager.js.map +1 -0
  50. package/dist/cron/parser.d.ts +22 -0
  51. package/dist/cron/parser.d.ts.map +1 -0
  52. package/dist/cron/parser.js +269 -0
  53. package/dist/cron/parser.js.map +1 -0
  54. package/dist/cron/types.d.ts +76 -0
  55. package/dist/cron/types.d.ts.map +1 -0
  56. package/dist/cron/types.js +3 -0
  57. package/dist/cron/types.js.map +1 -0
  58. package/dist/decorators/constants.d.ts +2 -0
  59. package/dist/decorators/constants.d.ts.map +1 -1
  60. package/dist/decorators/constants.js +3 -1
  61. package/dist/decorators/constants.js.map +1 -1
  62. package/dist/decorators/core.d.ts +29 -11
  63. package/dist/decorators/core.d.ts.map +1 -1
  64. package/dist/decorators/core.js +49 -11
  65. package/dist/decorators/core.js.map +1 -1
  66. package/dist/decorators/cron.d.ts +57 -0
  67. package/dist/decorators/cron.d.ts.map +1 -0
  68. package/dist/decorators/cron.js +143 -0
  69. package/dist/decorators/cron.js.map +1 -0
  70. package/dist/decorators/index.d.ts +2 -0
  71. package/dist/decorators/index.d.ts.map +1 -1
  72. package/dist/decorators/index.js +2 -0
  73. package/dist/decorators/index.js.map +1 -1
  74. package/dist/decorators/middleware.d.ts +65 -2
  75. package/dist/decorators/middleware.d.ts.map +1 -1
  76. package/dist/decorators/middleware.js +148 -62
  77. package/dist/decorators/middleware.js.map +1 -1
  78. package/dist/decorators/params.d.ts +102 -2
  79. package/dist/decorators/params.d.ts.map +1 -1
  80. package/dist/decorators/params.js +105 -3
  81. package/dist/decorators/params.js.map +1 -1
  82. package/dist/decorators/response.d.ts.map +1 -1
  83. package/dist/decorators/response.js +32 -22
  84. package/dist/decorators/response.js.map +1 -1
  85. package/dist/decorators/routing.d.ts +81 -16
  86. package/dist/decorators/routing.d.ts.map +1 -1
  87. package/dist/decorators/routing.js +81 -16
  88. package/dist/decorators/routing.js.map +1 -1
  89. package/dist/di/container.d.ts.map +1 -1
  90. package/dist/di/container.js +6 -1
  91. package/dist/di/container.js.map +1 -1
  92. package/dist/docs/content/cli/commands.mdx +1 -1
  93. package/dist/docs/content/controllers.mdx +127 -10
  94. package/dist/docs/content/cron.mdx +196 -0
  95. package/dist/docs/content/decorators.mdx +22 -4
  96. package/dist/docs/content/errors.mdx +58 -9
  97. package/dist/docs/content/introduction.mdx +7 -7
  98. package/dist/docs/content/middleware.mdx +269 -6
  99. package/dist/docs/content/requests.mdx +180 -6
  100. package/dist/docs/content/responses.mdx +283 -32
  101. package/dist/docs/content/routing.mdx +46 -0
  102. package/dist/docs/content/swagger.mdx +228 -0
  103. package/dist/docs/content/validation.mdx +190 -11
  104. package/dist/docs/reference/context.mdx +11 -0
  105. package/dist/docs/reference/cron.mdx +300 -0
  106. package/dist/docs/reference/decorators.mdx +22 -4
  107. package/dist/docs/reference/error.mdx +88 -0
  108. package/dist/docs/reference/logger.mdx +175 -43
  109. package/dist/docs/reference/middleware.mdx +31 -0
  110. package/dist/docs/reference/router.mdx +22 -0
  111. package/dist/docs/reference/swagger.mdx +143 -0
  112. package/dist/docs/reference/validator.mdx +83 -23
  113. package/dist/error/errors.d.ts.map +1 -1
  114. package/dist/error/errors.js +95 -43
  115. package/dist/error/errors.js.map +1 -1
  116. package/dist/error/index.d.ts +1 -0
  117. package/dist/error/index.d.ts.map +1 -1
  118. package/dist/error/index.js +11 -1
  119. package/dist/error/index.js.map +1 -1
  120. package/dist/error/overlay.d.ts +42 -0
  121. package/dist/error/overlay.d.ts.map +1 -0
  122. package/dist/error/overlay.js +306 -0
  123. package/dist/error/overlay.js.map +1 -0
  124. package/dist/index.d.ts +1 -0
  125. package/dist/index.d.ts.map +1 -1
  126. package/dist/index.js +22 -1
  127. package/dist/index.js.map +1 -1
  128. package/dist/lib/start-server.js +33 -7
  129. package/dist/lib/start-server.js.map +1 -1
  130. package/dist/logger/index.d.ts +1 -1
  131. package/dist/logger/index.d.ts.map +1 -1
  132. package/dist/logger/index.js +9 -1
  133. package/dist/logger/index.js.map +1 -1
  134. package/dist/middleware/guard.d.ts +2 -2
  135. package/dist/middleware/guard.d.ts.map +1 -1
  136. package/dist/middleware/guard.js.map +1 -1
  137. package/dist/middleware/ip-filter.d.ts +1 -0
  138. package/dist/middleware/ip-filter.d.ts.map +1 -1
  139. package/dist/middleware/ip-filter.js +2 -0
  140. package/dist/middleware/ip-filter.js.map +1 -1
  141. package/dist/middleware/middleware.d.ts +2 -2
  142. package/dist/middleware/middleware.d.ts.map +1 -1
  143. package/dist/middleware/middleware.js +20 -2
  144. package/dist/middleware/middleware.js.map +1 -1
  145. package/dist/middleware/security.d.ts +43 -1
  146. package/dist/middleware/security.d.ts.map +1 -1
  147. package/dist/middleware/security.js +101 -0
  148. package/dist/middleware/security.js.map +1 -1
  149. package/dist/response/index.d.ts +229 -6
  150. package/dist/response/index.d.ts.map +1 -1
  151. package/dist/response/index.js +272 -2
  152. package/dist/response/index.js.map +1 -1
  153. package/dist/router/boundary.d.ts +41 -11
  154. package/dist/router/boundary.d.ts.map +1 -1
  155. package/dist/router/boundary.js +24 -2
  156. package/dist/router/boundary.js.map +1 -1
  157. package/dist/router/controller-registrar.d.ts.map +1 -1
  158. package/dist/router/controller-registrar.js +108 -4
  159. package/dist/router/controller-registrar.js.map +1 -1
  160. package/dist/router/index.d.ts +2 -2
  161. package/dist/router/index.d.ts.map +1 -1
  162. package/dist/router/index.js +2 -1
  163. package/dist/router/index.js.map +1 -1
  164. package/dist/router/route-builder.d.ts +262 -65
  165. package/dist/router/route-builder.d.ts.map +1 -1
  166. package/dist/router/route-builder.js +181 -23
  167. package/dist/router/route-builder.js.map +1 -1
  168. package/dist/router/route-scanner.d.ts +6 -0
  169. package/dist/router/route-scanner.d.ts.map +1 -1
  170. package/dist/router/route-scanner.js +71 -792
  171. package/dist/router/route-scanner.js.map +1 -1
  172. package/dist/router/router.d.ts.map +1 -1
  173. package/dist/router/router.js +62 -17
  174. package/dist/router/router.js.map +1 -1
  175. package/dist/router/scanner/boundary-loader.d.ts +18 -0
  176. package/dist/router/scanner/boundary-loader.d.ts.map +1 -0
  177. package/dist/router/scanner/boundary-loader.js +539 -0
  178. package/dist/router/scanner/boundary-loader.js.map +1 -0
  179. package/dist/router/scanner/cron-mounter.d.ts +15 -0
  180. package/dist/router/scanner/cron-mounter.d.ts.map +1 -0
  181. package/dist/router/scanner/cron-mounter.js +216 -0
  182. package/dist/router/scanner/cron-mounter.js.map +1 -0
  183. package/dist/router/scanner/error-mounter.d.ts +14 -0
  184. package/dist/router/scanner/error-mounter.d.ts.map +1 -0
  185. package/dist/router/scanner/error-mounter.js +200 -0
  186. package/dist/router/scanner/error-mounter.js.map +1 -0
  187. package/dist/router/scanner/fs-scanner.d.ts +25 -0
  188. package/dist/router/scanner/fs-scanner.d.ts.map +1 -0
  189. package/dist/router/scanner/fs-scanner.js +115 -0
  190. package/dist/router/scanner/fs-scanner.js.map +1 -0
  191. package/dist/router/scanner/functional-compiler.d.ts +9 -0
  192. package/dist/router/scanner/functional-compiler.d.ts.map +1 -0
  193. package/dist/router/scanner/functional-compiler.js +233 -0
  194. package/dist/router/scanner/functional-compiler.js.map +1 -0
  195. package/dist/router/scanner/index.d.ts +9 -0
  196. package/dist/router/scanner/index.d.ts.map +1 -0
  197. package/dist/router/scanner/index.js +19 -0
  198. package/dist/router/scanner/index.js.map +1 -0
  199. package/dist/router/types.d.ts +23 -0
  200. package/dist/router/types.d.ts.map +1 -1
  201. package/dist/server/app.d.ts +3 -0
  202. package/dist/server/app.d.ts.map +1 -1
  203. package/dist/server/app.js +13 -0
  204. package/dist/server/app.js.map +1 -1
  205. package/dist/server/bootstrapper.d.ts.map +1 -1
  206. package/dist/server/bootstrapper.js +91 -30
  207. package/dist/server/bootstrapper.js.map +1 -1
  208. package/dist/server/cluster.d.ts.map +1 -1
  209. package/dist/server/cluster.js +13 -2
  210. package/dist/server/cluster.js.map +1 -1
  211. package/dist/server/context.d.ts +8 -0
  212. package/dist/server/context.d.ts.map +1 -1
  213. package/dist/server/context.js +50 -6
  214. package/dist/server/context.js.map +1 -1
  215. package/dist/server/helpers/body-parser.d.ts +18 -0
  216. package/dist/server/helpers/body-parser.d.ts.map +1 -0
  217. package/dist/server/helpers/body-parser.js +246 -0
  218. package/dist/server/helpers/body-parser.js.map +1 -0
  219. package/dist/server/helpers/cookie.d.ts +4 -0
  220. package/dist/server/helpers/cookie.d.ts.map +1 -0
  221. package/dist/server/helpers/cookie.js +61 -0
  222. package/dist/server/helpers/cookie.js.map +1 -0
  223. package/dist/server/helpers/etag.d.ts +3 -0
  224. package/dist/server/helpers/etag.d.ts.map +1 -0
  225. package/dist/server/helpers/etag.js +25 -0
  226. package/dist/server/helpers/etag.js.map +1 -0
  227. package/dist/server/helpers/index.d.ts +6 -0
  228. package/dist/server/helpers/index.d.ts.map +1 -0
  229. package/dist/server/helpers/index.js +21 -0
  230. package/dist/server/helpers/index.js.map +1 -0
  231. package/dist/server/helpers/ip.d.ts +9 -0
  232. package/dist/server/helpers/ip.d.ts.map +1 -0
  233. package/dist/server/helpers/ip.js +62 -0
  234. package/dist/server/helpers/ip.js.map +1 -0
  235. package/dist/server/helpers/stream.d.ts +4 -0
  236. package/dist/server/helpers/stream.d.ts.map +1 -0
  237. package/dist/server/helpers/stream.js +193 -0
  238. package/dist/server/helpers/stream.js.map +1 -0
  239. package/dist/server/lifecycle.d.ts +22 -0
  240. package/dist/server/lifecycle.d.ts.map +1 -0
  241. package/dist/server/lifecycle.js +106 -0
  242. package/dist/server/lifecycle.js.map +1 -0
  243. package/dist/server/request-handler.d.ts +1 -0
  244. package/dist/server/request-handler.d.ts.map +1 -1
  245. package/dist/server/request-handler.js +27 -17
  246. package/dist/server/request-handler.js.map +1 -1
  247. package/dist/server/request.d.ts +1 -139
  248. package/dist/server/request.d.ts.map +1 -1
  249. package/dist/server/request.js +37 -433
  250. package/dist/server/request.js.map +1 -1
  251. package/dist/server/response.d.ts +112 -156
  252. package/dist/server/response.d.ts.map +1 -1
  253. package/dist/server/response.js +129 -279
  254. package/dist/server/response.js.map +1 -1
  255. package/dist/swagger/decorators.d.ts +81 -0
  256. package/dist/swagger/decorators.d.ts.map +1 -0
  257. package/dist/swagger/decorators.js +172 -0
  258. package/dist/swagger/decorators.js.map +1 -0
  259. package/dist/swagger/generator.d.ts +19 -0
  260. package/dist/swagger/generator.d.ts.map +1 -0
  261. package/dist/swagger/generator.js +344 -0
  262. package/dist/swagger/generator.js.map +1 -0
  263. package/dist/swagger/index.d.ts +31 -0
  264. package/dist/swagger/index.d.ts.map +1 -0
  265. package/dist/swagger/index.js +53 -0
  266. package/dist/swagger/index.js.map +1 -0
  267. package/dist/swagger/mounter.d.ts +7 -0
  268. package/dist/swagger/mounter.d.ts.map +1 -0
  269. package/dist/swagger/mounter.js +56 -0
  270. package/dist/swagger/mounter.js.map +1 -0
  271. package/dist/swagger/types.d.ts +190 -0
  272. package/dist/swagger/types.d.ts.map +1 -0
  273. package/dist/swagger/types.js +3 -0
  274. package/dist/swagger/types.js.map +1 -0
  275. package/dist/swagger/ui.d.ts +6 -0
  276. package/dist/swagger/ui.d.ts.map +1 -0
  277. package/dist/swagger/ui.js +118 -0
  278. package/dist/swagger/ui.js.map +1 -0
  279. package/dist/testing/index.d.ts.map +1 -1
  280. package/dist/testing/index.js +6 -1
  281. package/dist/testing/index.js.map +1 -1
  282. package/dist/testing/mocks.d.ts.map +1 -1
  283. package/dist/testing/mocks.js +15 -3
  284. package/dist/testing/mocks.js.map +1 -1
  285. package/dist/utils/logger.d.ts +8 -0
  286. package/dist/utils/logger.d.ts.map +1 -1
  287. package/dist/utils/logger.js +184 -1
  288. package/dist/utils/logger.js.map +1 -1
  289. package/dist/validator/builder.d.ts +223 -0
  290. package/dist/validator/builder.d.ts.map +1 -0
  291. package/dist/validator/builder.js +517 -0
  292. package/dist/validator/builder.js.map +1 -0
  293. package/dist/validator/engine.d.ts +19 -0
  294. package/dist/validator/engine.d.ts.map +1 -0
  295. package/dist/validator/engine.js +568 -0
  296. package/dist/validator/engine.js.map +1 -0
  297. package/dist/validator/error.d.ts +12 -0
  298. package/dist/validator/error.d.ts.map +1 -0
  299. package/dist/validator/error.js +63 -0
  300. package/dist/validator/error.js.map +1 -0
  301. package/dist/validator/pagination.d.ts +40 -0
  302. package/dist/validator/pagination.d.ts.map +1 -0
  303. package/dist/validator/pagination.js +60 -0
  304. package/dist/validator/pagination.js.map +1 -0
  305. package/dist/validator/tex-types.d.ts +2 -1
  306. package/dist/validator/tex-types.d.ts.map +1 -1
  307. package/dist/validator/tex-types.js +2 -1
  308. package/dist/validator/tex-types.js.map +1 -1
  309. package/dist/validator/tex.d.ts +6 -142
  310. package/dist/validator/tex.d.ts.map +1 -1
  311. package/dist/validator/tex.js +14 -733
  312. package/dist/validator/tex.js.map +1 -1
  313. package/dist/validator/types.d.ts +83 -0
  314. package/dist/validator/types.d.ts.map +1 -0
  315. package/dist/validator/types.js +3 -0
  316. package/dist/validator/types.js.map +1 -0
  317. package/package.json +8 -4
  318. package/dist/dev/error-overlay.d.ts +0 -3
  319. package/dist/dev/error-overlay.d.ts.map +0 -1
  320. package/dist/dev/error-overlay.js +0 -118
  321. package/dist/dev/error-overlay.js.map +0 -1
@@ -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,6 @@
1
+ export * from './types';
2
+ export * from './parser';
3
+ export * from './expressions';
4
+ export * from './job';
5
+ export * from './manager';
6
+ //# sourceMappingURL=index.d.ts.map
@@ -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"}
@@ -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"}