exisjs 0.7.6 → 0.7.8

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 (211) 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 +15 -1
  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/index.js +16 -2
  16. package/dist/cli/index.js.map +1 -1
  17. package/dist/cli/manifest.d.ts +1 -0
  18. package/dist/cli/manifest.d.ts.map +1 -1
  19. package/dist/cli/manifest.js +161 -23
  20. package/dist/cli/manifest.js.map +1 -1
  21. package/dist/config/config.d.ts.map +1 -1
  22. package/dist/config/config.js +9 -0
  23. package/dist/config/config.js.map +1 -1
  24. package/dist/config/types.d.ts +4 -0
  25. package/dist/config/types.d.ts.map +1 -1
  26. package/dist/cron/expressions.d.ts +45 -0
  27. package/dist/cron/expressions.d.ts.map +1 -0
  28. package/dist/cron/expressions.js +87 -0
  29. package/dist/cron/expressions.js.map +1 -0
  30. package/dist/cron/index.d.ts +6 -0
  31. package/dist/cron/index.d.ts.map +1 -0
  32. package/dist/cron/index.js +22 -0
  33. package/dist/cron/index.js.map +1 -0
  34. package/dist/cron/job.d.ts +50 -0
  35. package/dist/cron/job.d.ts.map +1 -0
  36. package/dist/cron/job.js +247 -0
  37. package/dist/cron/job.js.map +1 -0
  38. package/dist/cron/manager.d.ts +105 -0
  39. package/dist/cron/manager.d.ts.map +1 -0
  40. package/dist/cron/manager.js +245 -0
  41. package/dist/cron/manager.js.map +1 -0
  42. package/dist/cron/parser.d.ts +22 -0
  43. package/dist/cron/parser.d.ts.map +1 -0
  44. package/dist/cron/parser.js +269 -0
  45. package/dist/cron/parser.js.map +1 -0
  46. package/dist/cron/types.d.ts +76 -0
  47. package/dist/cron/types.d.ts.map +1 -0
  48. package/dist/cron/types.js +3 -0
  49. package/dist/cron/types.js.map +1 -0
  50. package/dist/decorators/constants.d.ts +2 -0
  51. package/dist/decorators/constants.d.ts.map +1 -1
  52. package/dist/decorators/constants.js +3 -1
  53. package/dist/decorators/constants.js.map +1 -1
  54. package/dist/decorators/core.d.ts +29 -11
  55. package/dist/decorators/core.d.ts.map +1 -1
  56. package/dist/decorators/core.js +49 -11
  57. package/dist/decorators/core.js.map +1 -1
  58. package/dist/decorators/cron.d.ts +57 -0
  59. package/dist/decorators/cron.d.ts.map +1 -0
  60. package/dist/decorators/cron.js +143 -0
  61. package/dist/decorators/cron.js.map +1 -0
  62. package/dist/decorators/index.d.ts +2 -0
  63. package/dist/decorators/index.d.ts.map +1 -1
  64. package/dist/decorators/index.js +2 -0
  65. package/dist/decorators/index.js.map +1 -1
  66. package/dist/decorators/params.d.ts +97 -2
  67. package/dist/decorators/params.d.ts.map +1 -1
  68. package/dist/decorators/params.js +94 -2
  69. package/dist/decorators/params.js.map +1 -1
  70. package/dist/decorators/routing.d.ts +81 -16
  71. package/dist/decorators/routing.d.ts.map +1 -1
  72. package/dist/decorators/routing.js +81 -16
  73. package/dist/decorators/routing.js.map +1 -1
  74. package/dist/docs/content/cron.mdx +196 -0
  75. package/dist/docs/content/errors.mdx +58 -9
  76. package/dist/docs/content/structure.mdx +1 -1
  77. package/dist/docs/content/swagger.mdx +289 -0
  78. package/dist/docs/reference/cron.mdx +300 -0
  79. package/dist/docs/reference/decorators.mdx +8 -0
  80. package/dist/docs/reference/error.mdx +44 -0
  81. package/dist/docs/reference/swagger.mdx +226 -0
  82. package/dist/docs/reference/validator.mdx +1 -1
  83. package/dist/router/boundary.d.ts +24 -2
  84. package/dist/router/boundary.d.ts.map +1 -1
  85. package/dist/router/boundary.js +24 -2
  86. package/dist/router/boundary.js.map +1 -1
  87. package/dist/router/controller-registrar.d.ts.map +1 -1
  88. package/dist/router/controller-registrar.js +52 -3
  89. package/dist/router/controller-registrar.js.map +1 -1
  90. package/dist/router/route-builder.d.ts +196 -33
  91. package/dist/router/route-builder.d.ts.map +1 -1
  92. package/dist/router/route-builder.js +171 -11
  93. package/dist/router/route-builder.js.map +1 -1
  94. package/dist/router/route-scanner.d.ts +6 -0
  95. package/dist/router/route-scanner.d.ts.map +1 -1
  96. package/dist/router/route-scanner.js +69 -812
  97. package/dist/router/route-scanner.js.map +1 -1
  98. package/dist/router/router.d.ts.map +1 -1
  99. package/dist/router/router.js +27 -0
  100. package/dist/router/router.js.map +1 -1
  101. package/dist/router/scanner/boundary-loader.d.ts +18 -0
  102. package/dist/router/scanner/boundary-loader.d.ts.map +1 -0
  103. package/dist/router/scanner/boundary-loader.js +539 -0
  104. package/dist/router/scanner/boundary-loader.js.map +1 -0
  105. package/dist/router/scanner/cron-mounter.d.ts +15 -0
  106. package/dist/router/scanner/cron-mounter.d.ts.map +1 -0
  107. package/dist/router/scanner/cron-mounter.js +216 -0
  108. package/dist/router/scanner/cron-mounter.js.map +1 -0
  109. package/dist/router/scanner/error-mounter.d.ts +14 -0
  110. package/dist/router/scanner/error-mounter.d.ts.map +1 -0
  111. package/dist/router/scanner/error-mounter.js +200 -0
  112. package/dist/router/scanner/error-mounter.js.map +1 -0
  113. package/dist/router/scanner/fs-scanner.d.ts +25 -0
  114. package/dist/router/scanner/fs-scanner.d.ts.map +1 -0
  115. package/dist/router/scanner/fs-scanner.js +115 -0
  116. package/dist/router/scanner/fs-scanner.js.map +1 -0
  117. package/dist/router/scanner/functional-compiler.d.ts +9 -0
  118. package/dist/router/scanner/functional-compiler.d.ts.map +1 -0
  119. package/dist/router/scanner/functional-compiler.js +233 -0
  120. package/dist/router/scanner/functional-compiler.js.map +1 -0
  121. package/dist/router/scanner/index.d.ts +9 -0
  122. package/dist/router/scanner/index.d.ts.map +1 -0
  123. package/dist/router/scanner/index.js +19 -0
  124. package/dist/router/scanner/index.js.map +1 -0
  125. package/dist/router/types.d.ts +15 -0
  126. package/dist/router/types.d.ts.map +1 -1
  127. package/dist/server/app.d.ts +2 -0
  128. package/dist/server/app.d.ts.map +1 -1
  129. package/dist/server/app.js +3 -0
  130. package/dist/server/app.js.map +1 -1
  131. package/dist/server/helpers/body-parser.d.ts +18 -0
  132. package/dist/server/helpers/body-parser.d.ts.map +1 -0
  133. package/dist/server/helpers/body-parser.js +246 -0
  134. package/dist/server/helpers/body-parser.js.map +1 -0
  135. package/dist/server/helpers/cookie.d.ts +4 -0
  136. package/dist/server/helpers/cookie.d.ts.map +1 -0
  137. package/dist/server/helpers/cookie.js +61 -0
  138. package/dist/server/helpers/cookie.js.map +1 -0
  139. package/dist/server/helpers/etag.d.ts +3 -0
  140. package/dist/server/helpers/etag.d.ts.map +1 -0
  141. package/dist/server/helpers/etag.js +25 -0
  142. package/dist/server/helpers/etag.js.map +1 -0
  143. package/dist/server/helpers/index.d.ts +6 -0
  144. package/dist/server/helpers/index.d.ts.map +1 -0
  145. package/dist/server/helpers/index.js +21 -0
  146. package/dist/server/helpers/index.js.map +1 -0
  147. package/dist/server/helpers/ip.d.ts +9 -0
  148. package/dist/server/helpers/ip.d.ts.map +1 -0
  149. package/dist/server/helpers/ip.js +62 -0
  150. package/dist/server/helpers/ip.js.map +1 -0
  151. package/dist/server/helpers/stream.d.ts +4 -0
  152. package/dist/server/helpers/stream.d.ts.map +1 -0
  153. package/dist/server/helpers/stream.js +193 -0
  154. package/dist/server/helpers/stream.js.map +1 -0
  155. package/dist/server/request.d.ts +1 -139
  156. package/dist/server/request.d.ts.map +1 -1
  157. package/dist/server/request.js +19 -433
  158. package/dist/server/request.js.map +1 -1
  159. package/dist/server/response.d.ts +105 -158
  160. package/dist/server/response.d.ts.map +1 -1
  161. package/dist/server/response.js +121 -423
  162. package/dist/server/response.js.map +1 -1
  163. package/dist/swagger/decorators.d.ts +81 -0
  164. package/dist/swagger/decorators.d.ts.map +1 -0
  165. package/dist/swagger/decorators.js +172 -0
  166. package/dist/swagger/decorators.js.map +1 -0
  167. package/dist/swagger/generator.d.ts +19 -0
  168. package/dist/swagger/generator.d.ts.map +1 -0
  169. package/dist/swagger/generator.js +344 -0
  170. package/dist/swagger/generator.js.map +1 -0
  171. package/dist/swagger/index.d.ts +31 -0
  172. package/dist/swagger/index.d.ts.map +1 -0
  173. package/dist/swagger/index.js +53 -0
  174. package/dist/swagger/index.js.map +1 -0
  175. package/dist/swagger/mounter.d.ts +7 -0
  176. package/dist/swagger/mounter.d.ts.map +1 -0
  177. package/dist/swagger/mounter.js +56 -0
  178. package/dist/swagger/mounter.js.map +1 -0
  179. package/dist/swagger/types.d.ts +190 -0
  180. package/dist/swagger/types.d.ts.map +1 -0
  181. package/dist/swagger/types.js +3 -0
  182. package/dist/swagger/types.js.map +1 -0
  183. package/dist/swagger/ui.d.ts +6 -0
  184. package/dist/swagger/ui.d.ts.map +1 -0
  185. package/dist/swagger/ui.js +118 -0
  186. package/dist/swagger/ui.js.map +1 -0
  187. package/dist/validator/builder.d.ts +223 -0
  188. package/dist/validator/builder.d.ts.map +1 -0
  189. package/dist/validator/builder.js +517 -0
  190. package/dist/validator/builder.js.map +1 -0
  191. package/dist/validator/engine.d.ts +19 -0
  192. package/dist/validator/engine.d.ts.map +1 -0
  193. package/dist/validator/engine.js +568 -0
  194. package/dist/validator/engine.js.map +1 -0
  195. package/dist/validator/error.d.ts +12 -0
  196. package/dist/validator/error.d.ts.map +1 -0
  197. package/dist/validator/error.js +63 -0
  198. package/dist/validator/error.js.map +1 -0
  199. package/dist/validator/pagination.d.ts +40 -0
  200. package/dist/validator/pagination.d.ts.map +1 -0
  201. package/dist/validator/pagination.js +60 -0
  202. package/dist/validator/pagination.js.map +1 -0
  203. package/dist/validator/tex.d.ts +6 -158
  204. package/dist/validator/tex.d.ts.map +1 -1
  205. package/dist/validator/tex.js +14 -971
  206. package/dist/validator/tex.js.map +1 -1
  207. package/dist/validator/types.d.ts +83 -0
  208. package/dist/validator/types.d.ts.map +1 -0
  209. package/dist/validator/types.js +3 -0
  210. package/dist/validator/types.js.map +1 -0
  211. package/package.json +9 -1
@@ -0,0 +1,269 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.parseCronExpression = parseCronExpression;
4
+ exports.isValidCron = isValidCron;
5
+ exports.getNextCronDate = getNextCronDate;
6
+ const MONTH_NAMES = {
7
+ jan: 1,
8
+ feb: 2,
9
+ mar: 3,
10
+ apr: 4,
11
+ may: 5,
12
+ jun: 6,
13
+ jul: 7,
14
+ aug: 8,
15
+ sep: 9,
16
+ oct: 10,
17
+ nov: 11,
18
+ dec: 12,
19
+ };
20
+ const DAY_NAMES = {
21
+ sun: 0,
22
+ mon: 1,
23
+ tue: 2,
24
+ wed: 3,
25
+ thu: 4,
26
+ fri: 5,
27
+ sat: 6,
28
+ };
29
+ const MACROS = {
30
+ '@yearly': '0 0 1 1 *',
31
+ '@annually': '0 0 1 1 *',
32
+ '@monthly': '0 0 1 * *',
33
+ '@weekly': '0 0 * * 0',
34
+ '@daily': '0 0 * * *',
35
+ '@midnight': '0 0 * * *',
36
+ '@hourly': '0 * * * *',
37
+ };
38
+ /**
39
+ * Parses a single cron field expression (e.g. `*`, `1,2,5`, `10-20`, `* /5`, `L`, `W`).
40
+ */
41
+ function parseField(field, min, max, aliases) {
42
+ const result = new Set();
43
+ const str = field.trim().toLowerCase();
44
+ if (!str)
45
+ return result;
46
+ let normalized = str;
47
+ if (aliases) {
48
+ for (const [alias, val] of Object.entries(aliases)) {
49
+ normalized = normalized.replace(new RegExp(alias, 'g'), String(val));
50
+ }
51
+ }
52
+ const parts = normalized.split(',');
53
+ for (const part of parts) {
54
+ if (part === '*' || part === '?') {
55
+ for (let i = min; i <= max; i++)
56
+ result.add(i);
57
+ }
58
+ else if (part.includes('/')) {
59
+ const [rangeStr, stepStr] = part.split('/');
60
+ const step = parseInt(stepStr, 10);
61
+ if (isNaN(step) || step <= 0) {
62
+ throw new Error(`Invalid cron step: ${part}`);
63
+ }
64
+ let start = min;
65
+ let end = max;
66
+ if (rangeStr && rangeStr !== '*' && rangeStr !== '?') {
67
+ if (rangeStr.includes('-')) {
68
+ const [s, e] = rangeStr.split('-').map((v) => parseInt(v, 10));
69
+ start = isNaN(s) ? min : s;
70
+ end = isNaN(e) ? max : e;
71
+ }
72
+ else {
73
+ start = parseInt(rangeStr, 10);
74
+ }
75
+ }
76
+ for (let i = start; i <= end; i += step) {
77
+ if (i >= min && i <= max)
78
+ result.add(i);
79
+ }
80
+ }
81
+ else if (part.includes('-')) {
82
+ const [sStr, eStr] = part.split('-');
83
+ const s = parseInt(sStr, 10);
84
+ const e = parseInt(eStr, 10);
85
+ if (isNaN(s) || isNaN(e) || s > e || s < min || e > max) {
86
+ throw new Error(`Invalid cron range: ${part} (min: ${min}, max: ${max})`);
87
+ }
88
+ for (let i = s; i <= e; i++)
89
+ result.add(i);
90
+ }
91
+ else {
92
+ const val = parseInt(part, 10);
93
+ if (isNaN(val) || val < min || val > max) {
94
+ if (min === 0 && max === 6 && val === 7) {
95
+ result.add(0);
96
+ }
97
+ else {
98
+ throw new Error(`Invalid cron value: ${part} (expected ${min}-${max})`);
99
+ }
100
+ }
101
+ else {
102
+ result.add(val);
103
+ }
104
+ }
105
+ }
106
+ return result;
107
+ }
108
+ /**
109
+ * Parses a 5 or 6 field cron expression into a structured pattern object.
110
+ */
111
+ function parseCronExpression(expression) {
112
+ const trimmed = expression.trim();
113
+ const exp = MACROS[trimmed] || trimmed;
114
+ const tokens = exp.split(/\s+/).filter(Boolean);
115
+ if (tokens.length !== 5 && tokens.length !== 6) {
116
+ throw new Error(`Invalid cron expression "${expression}". Expected 5 or 6 fields, received ${tokens.length}.`);
117
+ }
118
+ const hasSeconds = tokens.length === 6;
119
+ let secStr = '0';
120
+ let minStr;
121
+ let hourStr;
122
+ let domStr;
123
+ let monthStr;
124
+ let dowStr;
125
+ if (hasSeconds) {
126
+ ;
127
+ [secStr, minStr, hourStr, domStr, monthStr, dowStr] = tokens;
128
+ }
129
+ else {
130
+ ;
131
+ [minStr, hourStr, domStr, monthStr, dowStr] = tokens;
132
+ }
133
+ return {
134
+ hasSeconds,
135
+ seconds: parseField(secStr, 0, 59),
136
+ minutes: parseField(minStr, 0, 59),
137
+ hours: parseField(hourStr, 0, 23),
138
+ daysOfMonth: parseField(domStr, 1, 31),
139
+ months: parseField(monthStr, 1, 12, MONTH_NAMES),
140
+ daysOfWeek: parseField(dowStr, 0, 6, DAY_NAMES),
141
+ };
142
+ }
143
+ const formatterCache = new Map();
144
+ function getFormatter(timezone) {
145
+ if (!timezone || timezone.toUpperCase() === 'UTC')
146
+ return null;
147
+ let fmt = formatterCache.get(timezone);
148
+ if (!fmt) {
149
+ fmt = new Intl.DateTimeFormat('en-US', {
150
+ timeZone: timezone,
151
+ year: 'numeric',
152
+ month: 'numeric',
153
+ day: 'numeric',
154
+ hour: 'numeric',
155
+ minute: 'numeric',
156
+ second: 'numeric',
157
+ weekday: 'short',
158
+ hour12: false,
159
+ });
160
+ formatterCache.set(timezone, fmt);
161
+ }
162
+ return fmt;
163
+ }
164
+ const dayOfWeekMap = {
165
+ Sun: 0,
166
+ Mon: 1,
167
+ Tue: 2,
168
+ Wed: 3,
169
+ Thu: 4,
170
+ Fri: 5,
171
+ Sat: 6,
172
+ };
173
+ /**
174
+ * Computes date parts in a given IANA timezone using cached formatter.
175
+ */
176
+ function getDatePartsInTimezone(date, timezone) {
177
+ const formatter = getFormatter(timezone);
178
+ if (!formatter) {
179
+ return {
180
+ year: date.getUTCFullYear(),
181
+ month: date.getUTCMonth() + 1,
182
+ day: date.getUTCDate(),
183
+ hour: date.getUTCHours(),
184
+ minute: date.getUTCMinutes(),
185
+ second: date.getUTCSeconds(),
186
+ dayOfWeek: date.getUTCDay(),
187
+ };
188
+ }
189
+ const parts = formatter.formatToParts(date);
190
+ const map = {};
191
+ for (const part of parts) {
192
+ map[part.type] = part.value;
193
+ }
194
+ let hour = parseInt(map.hour, 10);
195
+ if (hour === 24)
196
+ hour = 0;
197
+ return {
198
+ year: parseInt(map.year, 10),
199
+ month: parseInt(map.month, 10),
200
+ day: parseInt(map.day, 10),
201
+ hour,
202
+ minute: parseInt(map.minute, 10),
203
+ second: parseInt(map.second, 10),
204
+ dayOfWeek: dayOfWeekMap[map.weekday] ?? date.getUTCDay(),
205
+ };
206
+ }
207
+ /**
208
+ * Validates whether a cron expression is syntactically valid.
209
+ */
210
+ function isValidCron(expression) {
211
+ try {
212
+ parseCronExpression(expression);
213
+ return true;
214
+ }
215
+ catch {
216
+ return false;
217
+ }
218
+ }
219
+ /**
220
+ * Calculates the next occurrence Date for a cron pattern from a base date.
221
+ */
222
+ function getNextCronDate(pattern, fromDate = new Date(), timezone) {
223
+ const parsed = typeof pattern === 'string' ? parseCronExpression(pattern) : pattern;
224
+ const current = new Date(fromDate.getTime());
225
+ if (parsed.hasSeconds) {
226
+ current.setUTCSeconds(current.getUTCSeconds() + 1, 0);
227
+ }
228
+ else {
229
+ current.setUTCSeconds(0, 0);
230
+ current.setUTCMinutes(current.getUTCMinutes() + 1);
231
+ }
232
+ const stepMs = parsed.hasSeconds ? 1000 : 60 * 1000;
233
+ const maxIterations = 5 * 365 * 24 * 60; // 5 years
234
+ for (let i = 0; i < maxIterations; i++) {
235
+ const parts = getDatePartsInTimezone(current, timezone);
236
+ if (!parsed.months.has(parts.month)) {
237
+ current.setTime(current.getTime() + 12 * 60 * 60 * 1000);
238
+ continue;
239
+ }
240
+ const domMatch = parsed.daysOfMonth.has(parts.day);
241
+ const dowMatch = parsed.daysOfWeek.has(parts.dayOfWeek);
242
+ if (!domMatch || !dowMatch) {
243
+ current.setTime(current.getTime() + 12 * 60 * 60 * 1000);
244
+ continue;
245
+ }
246
+ if (!parsed.hours.has(parts.hour)) {
247
+ current.setTime(current.getTime() + 60 * 60 * 1000);
248
+ // Align to start of hour in current timezone
249
+ const hourPart = getDatePartsInTimezone(current, timezone);
250
+ if (hourPart.minute !== 0) {
251
+ current.setTime(current.getTime() - hourPart.minute * 60 * 1000);
252
+ }
253
+ continue;
254
+ }
255
+ if (!parsed.minutes.has(parts.minute)) {
256
+ current.setTime(current.getTime() + stepMs);
257
+ continue;
258
+ }
259
+ if (parsed.hasSeconds) {
260
+ if (!parsed.seconds.has(parts.second)) {
261
+ current.setTime(current.getTime() + 1000);
262
+ continue;
263
+ }
264
+ }
265
+ return current;
266
+ }
267
+ throw new Error('Unable to find next cron execution within 5-year window');
268
+ }
269
+ //# sourceMappingURL=parser.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parser.js","sourceRoot":"","sources":["../../src/cron/parser.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,76 @@
1
+ import type { App } from '../server/app';
2
+ import type { Logger } from '../types';
3
+ export type CronSchedule = string | Date | number;
4
+ export type OverlapPolicy = 'skip' | 'queue';
5
+ export type CronJobStatus = 'idle' | 'running' | 'paused' | 'stopped';
6
+ export interface CronJobOptions {
7
+ /** Unique name for the cron job */
8
+ name?: string;
9
+ /** Cron pattern (e.g. '0 0 * * *' or '0 *\/5 * * * *') */
10
+ schedule?: string;
11
+ /** Interval in milliseconds */
12
+ interval?: number;
13
+ /** Timeout delay in milliseconds (runs once) */
14
+ timeout?: number;
15
+ /** IANA Timezone string (e.g. 'UTC', 'America/New_York', 'Asia/Kolkata') */
16
+ timezone?: string;
17
+ /**
18
+ * If true, prevents concurrent executions if the job takes longer than its interval.
19
+ * Default: true
20
+ */
21
+ preventOverlap?: boolean;
22
+ /** Action to take when an execution overlaps ('skip' to drop, 'queue' to run immediately after) */
23
+ onOverlap?: OverlapPolicy;
24
+ /** Whether the job starts running automatically upon registration. Default: true */
25
+ autoStart?: boolean;
26
+ /** Number of retry attempts if the handler throws an error */
27
+ retries?: number;
28
+ /** Backoff strategy between retries in milliseconds */
29
+ retryDelayMs?: number;
30
+ /** Optional error hook specific to this job */
31
+ onError?: (err: Error, context: CronContext) => void | Promise<void>;
32
+ /** Handler function for the cron job */
33
+ run?: (context: CronContext) => any | Promise<any>;
34
+ /** Alternative handler key name */
35
+ handle?: (context: CronContext) => any | Promise<any>;
36
+ }
37
+ export interface CronContext {
38
+ /** The Exis application instance */
39
+ app: App<any>;
40
+ /** Structured logger */
41
+ log: Logger;
42
+ /** Name of the running job */
43
+ jobName: string;
44
+ /** Timestamp when this execution started */
45
+ startedAt: Date;
46
+ /** Current execution iteration count */
47
+ iteration: number;
48
+ /** Signal that aborts when the server initiates graceful shutdown */
49
+ signal?: AbortSignal;
50
+ }
51
+ export interface CronJobStats {
52
+ name: string;
53
+ status: CronJobStatus;
54
+ schedule?: string;
55
+ intervalMs?: number;
56
+ timezone?: string;
57
+ preventOverlap: boolean;
58
+ lastRun?: Date;
59
+ nextRun?: Date;
60
+ executionCount: number;
61
+ failureCount: number;
62
+ lastDurationMs?: number;
63
+ lastError?: string;
64
+ }
65
+ export interface IntervalOptions {
66
+ name?: string;
67
+ preventOverlap?: boolean;
68
+ autoStart?: boolean;
69
+ onError?: (err: Error, context: CronContext) => void | Promise<void>;
70
+ }
71
+ export interface TimeoutOptions {
72
+ name?: string;
73
+ autoStart?: boolean;
74
+ onError?: (err: Error, context: CronContext) => void | Promise<void>;
75
+ }
76
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/cron/types.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/cron/types.ts"],"names":[],"mappings":""}
@@ -9,6 +9,8 @@ export declare const PARAM_METADATA: unique symbol;
9
9
  export declare const SERVER_CONFIG: unique symbol;
10
10
  export declare const BOUNDARY_CONFIG: unique symbol;
11
11
  export declare const MODULE_METADATA: unique symbol;
12
+ export declare const CRON_REGISTRY: unique symbol;
13
+ export declare const CRON_META: unique symbol;
12
14
  export declare const ROUTE_META: unique symbol;
13
15
  export declare const METHOD_MIDDLEWARES: unique symbol;
14
16
  export declare const ROUTE_METADATA_PROP: unique symbol;
@@ -1 +1 @@
1
- {"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../src/decorators/constants.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,UAAU,CAAA;AAGvD,eAAO,MAAM,cAAc,eAA8B,CAAA;AACzD,eAAO,MAAM,iBAAiB,eAAyC,CAAA;AACvE,eAAO,MAAM,eAAe,eAAuC,CAAA;AACnE,eAAO,MAAM,mBAAmB,eAAmC,CAAA;AACnE,eAAO,MAAM,cAAc,eAAsC,CAAA;AACjE,eAAO,MAAM,kBAAkB,eAA0C,CAAA;AACzE,eAAO,MAAM,cAAc,eAAsC,CAAA;AACjE,eAAO,MAAM,aAAa,eAAqC,CAAA;AAC/D,eAAO,MAAM,eAAe,eAAuC,CAAA;AACnE,eAAO,MAAM,eAAe,eAAuC,CAAA;AAEnE,eAAO,MAAM,UAAU,eAAkC,CAAA;AACzD,eAAO,MAAM,kBAAkB,eAA0C,CAAA;AACzE,eAAO,MAAM,mBAAmB,eAA2C,CAAA;AAC3E,eAAO,MAAM,uBAAuB,eAEnC,CAAA;AACD,eAAO,MAAM,mBAAmB,eAA2C,CAAA;AAE3E,MAAM,WAAW,SAAS;IACxB,MAAM,EAAE,UAAU,CAAA;IAClB,IAAI,EAAE,MAAM,CAAA;IACZ,MAAM,CAAC,EAAE,WAAW,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAA;IACxC,WAAW,EAAE,MAAM,CAAA;CACpB;AAED,MAAM,WAAW,iBAAiB;IAChC,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,IAAI,CAAC,EAAE,MAAM,CAAA;CACd;AAED,MAAM,WAAW,YAAY;IAC3B,OAAO,CAAC,EAAE,GAAG,EAAE,CAAA;IACf,SAAS,CAAC,EAAE,GAAG,EAAE,CAAA;IACjB,IAAI,CAAC,EAAE,GAAG,EAAE,CAAA;IACZ,KAAK,CAAC,EAAE,GAAG,EAAE,CAAA;CACd;AAED,MAAM,WAAW,cAAc;IAC7B,OAAO,CAAC,EAAE,GAAG,EAAE,CAAA;IACf,UAAU,CAAC,EAAE,GAAG,EAAE,CAAA;IAClB,OAAO,CAAC,EAAE,GAAG,EAAE,CAAA;IACf,MAAM,CAAC,EAAE,GAAG,EAAE,CAAA;IACd,YAAY,CAAC,EAAE,GAAG,EAAE,CAAA;IACpB,OAAO,CAAC,EAAE,MAAM,GAAG,CAAC,CAAC,GAAG,EAAE,GAAG,KAAK,MAAM,CAAC,CAAA;IACzC,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAA;IAC9B,IAAI,CAAC,EAAE,GAAG,CAAA;IACV,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IAChC,OAAO,CAAC,EAAE,GAAG,EAAE,CAAA;IACf,SAAS,CAAC,EAAE,GAAG,EAAE,CAAA;IACjB,YAAY,CAAC,EAAE,GAAG,CAAA;IAClB,WAAW,CAAC,EAAE,GAAG,CAAA;CAClB;AAED,MAAM,WAAW,kBAAkB;IACjC,OAAO,CAAC,EAAE,GAAG,EAAE,CAAA;IACf,WAAW,CAAC,EAAE,GAAG,EAAE,CAAA;IACnB,SAAS,CAAC,EAAE,GAAG,EAAE,CAAA;IACjB,OAAO,CAAC,EAAE,GAAG,EAAE,CAAA;CAChB"}
1
+ {"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../src/decorators/constants.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,UAAU,CAAA;AAGvD,eAAO,MAAM,cAAc,eAA8B,CAAA;AACzD,eAAO,MAAM,iBAAiB,eAAyC,CAAA;AACvE,eAAO,MAAM,eAAe,eAAuC,CAAA;AACnE,eAAO,MAAM,mBAAmB,eAAmC,CAAA;AACnE,eAAO,MAAM,cAAc,eAAsC,CAAA;AACjE,eAAO,MAAM,kBAAkB,eAA0C,CAAA;AACzE,eAAO,MAAM,cAAc,eAAsC,CAAA;AACjE,eAAO,MAAM,aAAa,eAAqC,CAAA;AAC/D,eAAO,MAAM,eAAe,eAAuC,CAAA;AACnE,eAAO,MAAM,eAAe,eAAuC,CAAA;AACnE,eAAO,MAAM,aAAa,eAAiC,CAAA;AAC3D,eAAO,MAAM,SAAS,eAAiC,CAAA;AAEvD,eAAO,MAAM,UAAU,eAAkC,CAAA;AACzD,eAAO,MAAM,kBAAkB,eAA0C,CAAA;AACzE,eAAO,MAAM,mBAAmB,eAA2C,CAAA;AAC3E,eAAO,MAAM,uBAAuB,eAEnC,CAAA;AACD,eAAO,MAAM,mBAAmB,eAA2C,CAAA;AAE3E,MAAM,WAAW,SAAS;IACxB,MAAM,EAAE,UAAU,CAAA;IAClB,IAAI,EAAE,MAAM,CAAA;IACZ,MAAM,CAAC,EAAE,WAAW,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAA;IACxC,WAAW,EAAE,MAAM,CAAA;CACpB;AAED,MAAM,WAAW,iBAAiB;IAChC,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,IAAI,CAAC,EAAE,MAAM,CAAA;CACd;AAED,MAAM,WAAW,YAAY;IAC3B,OAAO,CAAC,EAAE,GAAG,EAAE,CAAA;IACf,SAAS,CAAC,EAAE,GAAG,EAAE,CAAA;IACjB,IAAI,CAAC,EAAE,GAAG,EAAE,CAAA;IACZ,KAAK,CAAC,EAAE,GAAG,EAAE,CAAA;CACd;AAED,MAAM,WAAW,cAAc;IAC7B,OAAO,CAAC,EAAE,GAAG,EAAE,CAAA;IACf,UAAU,CAAC,EAAE,GAAG,EAAE,CAAA;IAClB,OAAO,CAAC,EAAE,GAAG,EAAE,CAAA;IACf,MAAM,CAAC,EAAE,GAAG,EAAE,CAAA;IACd,YAAY,CAAC,EAAE,GAAG,EAAE,CAAA;IACpB,OAAO,CAAC,EAAE,MAAM,GAAG,CAAC,CAAC,GAAG,EAAE,GAAG,KAAK,MAAM,CAAC,CAAA;IACzC,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAA;IAC9B,IAAI,CAAC,EAAE,GAAG,CAAA;IACV,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IAChC,OAAO,CAAC,EAAE,GAAG,EAAE,CAAA;IACf,SAAS,CAAC,EAAE,GAAG,EAAE,CAAA;IACjB,YAAY,CAAC,EAAE,GAAG,CAAA;IAClB,WAAW,CAAC,EAAE,GAAG,CAAA;CAClB;AAED,MAAM,WAAW,kBAAkB;IACjC,OAAO,CAAC,EAAE,GAAG,EAAE,CAAA;IACf,WAAW,CAAC,EAAE,GAAG,EAAE,CAAA;IACnB,SAAS,CAAC,EAAE,GAAG,EAAE,CAAA;IACjB,OAAO,CAAC,EAAE,GAAG,EAAE,CAAA;CAChB"}
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.PARAM_METADATA_PROP = exports.LIFECYCLE_METADATA_PROP = exports.ROUTE_METADATA_PROP = exports.METHOD_MIDDLEWARES = exports.ROUTE_META = exports.MODULE_METADATA = exports.BOUNDARY_CONFIG = exports.SERVER_CONFIG = exports.PARAM_METADATA = exports.LIFECYCLE_METADATA = exports.ROUTE_METADATA = exports.MIDDLEWARE_REGISTRY = exports.CONTROLLER_HOST = exports.CONTROLLER_PREFIX = exports.ROUTE_REGISTRY = void 0;
3
+ exports.PARAM_METADATA_PROP = exports.LIFECYCLE_METADATA_PROP = exports.ROUTE_METADATA_PROP = exports.METHOD_MIDDLEWARES = exports.ROUTE_META = exports.CRON_META = exports.CRON_REGISTRY = exports.MODULE_METADATA = exports.BOUNDARY_CONFIG = exports.SERVER_CONFIG = exports.PARAM_METADATA = exports.LIFECYCLE_METADATA = exports.ROUTE_METADATA = exports.MIDDLEWARE_REGISTRY = exports.CONTROLLER_HOST = exports.CONTROLLER_PREFIX = exports.ROUTE_REGISTRY = void 0;
4
4
  // Store metadata on class prototypes using symbols to avoid reflect-metadata
5
5
  exports.ROUTE_REGISTRY = Symbol.for('exisjs:routes');
6
6
  exports.CONTROLLER_PREFIX = Symbol.for('exisjs:controller_prefix');
@@ -12,6 +12,8 @@ exports.PARAM_METADATA = Symbol.for('exisjs:param_metadata');
12
12
  exports.SERVER_CONFIG = Symbol.for('exisjs:server_config');
13
13
  exports.BOUNDARY_CONFIG = Symbol.for('exisjs:boundary_config');
14
14
  exports.MODULE_METADATA = Symbol.for('exisjs:module_metadata');
15
+ exports.CRON_REGISTRY = Symbol.for('exisjs:cron_jobs');
16
+ exports.CRON_META = Symbol.for('exisjs:cron_meta');
15
17
  exports.ROUTE_META = Symbol.for('exisjs:route_meta');
16
18
  exports.METHOD_MIDDLEWARES = Symbol.for('exisjs:method_middlewares');
17
19
  exports.ROUTE_METADATA_PROP = Symbol.for('exisjs:route_metadata_prop');
@@ -1 +1 @@
1
- {"version":3,"file":"constants.js","sourceRoot":"","sources":["../../src/decorators/constants.ts"],"names":[],"mappings":";;;AAEA,6EAA6E;AAChE,QAAA,cAAc,GAAG,MAAM,CAAC,GAAG,CAAC,eAAe,CAAC,CAAA;AAC5C,QAAA,iBAAiB,GAAG,MAAM,CAAC,GAAG,CAAC,0BAA0B,CAAC,CAAA;AAC1D,QAAA,eAAe,GAAG,MAAM,CAAC,GAAG,CAAC,wBAAwB,CAAC,CAAA;AACtD,QAAA,mBAAmB,GAAG,MAAM,CAAC,GAAG,CAAC,oBAAoB,CAAC,CAAA;AACtD,QAAA,cAAc,GAAG,MAAM,CAAC,GAAG,CAAC,uBAAuB,CAAC,CAAA;AACpD,QAAA,kBAAkB,GAAG,MAAM,CAAC,GAAG,CAAC,2BAA2B,CAAC,CAAA;AAC5D,QAAA,cAAc,GAAG,MAAM,CAAC,GAAG,CAAC,uBAAuB,CAAC,CAAA;AACpD,QAAA,aAAa,GAAG,MAAM,CAAC,GAAG,CAAC,sBAAsB,CAAC,CAAA;AAClD,QAAA,eAAe,GAAG,MAAM,CAAC,GAAG,CAAC,wBAAwB,CAAC,CAAA;AACtD,QAAA,eAAe,GAAG,MAAM,CAAC,GAAG,CAAC,wBAAwB,CAAC,CAAA;AAEtD,QAAA,UAAU,GAAG,MAAM,CAAC,GAAG,CAAC,mBAAmB,CAAC,CAAA;AAC5C,QAAA,kBAAkB,GAAG,MAAM,CAAC,GAAG,CAAC,2BAA2B,CAAC,CAAA;AAC5D,QAAA,mBAAmB,GAAG,MAAM,CAAC,GAAG,CAAC,4BAA4B,CAAC,CAAA;AAC9D,QAAA,uBAAuB,GAAG,MAAM,CAAC,GAAG,CAC/C,gCAAgC,CACjC,CAAA;AACY,QAAA,mBAAmB,GAAG,MAAM,CAAC,GAAG,CAAC,4BAA4B,CAAC,CAAA"}
1
+ {"version":3,"file":"constants.js","sourceRoot":"","sources":["../../src/decorators/constants.ts"],"names":[],"mappings":";;;AAEA,6EAA6E;AAChE,QAAA,cAAc,GAAG,MAAM,CAAC,GAAG,CAAC,eAAe,CAAC,CAAA;AAC5C,QAAA,iBAAiB,GAAG,MAAM,CAAC,GAAG,CAAC,0BAA0B,CAAC,CAAA;AAC1D,QAAA,eAAe,GAAG,MAAM,CAAC,GAAG,CAAC,wBAAwB,CAAC,CAAA;AACtD,QAAA,mBAAmB,GAAG,MAAM,CAAC,GAAG,CAAC,oBAAoB,CAAC,CAAA;AACtD,QAAA,cAAc,GAAG,MAAM,CAAC,GAAG,CAAC,uBAAuB,CAAC,CAAA;AACpD,QAAA,kBAAkB,GAAG,MAAM,CAAC,GAAG,CAAC,2BAA2B,CAAC,CAAA;AAC5D,QAAA,cAAc,GAAG,MAAM,CAAC,GAAG,CAAC,uBAAuB,CAAC,CAAA;AACpD,QAAA,aAAa,GAAG,MAAM,CAAC,GAAG,CAAC,sBAAsB,CAAC,CAAA;AAClD,QAAA,eAAe,GAAG,MAAM,CAAC,GAAG,CAAC,wBAAwB,CAAC,CAAA;AACtD,QAAA,eAAe,GAAG,MAAM,CAAC,GAAG,CAAC,wBAAwB,CAAC,CAAA;AACtD,QAAA,aAAa,GAAG,MAAM,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAA;AAC9C,QAAA,SAAS,GAAG,MAAM,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAA;AAE1C,QAAA,UAAU,GAAG,MAAM,CAAC,GAAG,CAAC,mBAAmB,CAAC,CAAA;AAC5C,QAAA,kBAAkB,GAAG,MAAM,CAAC,GAAG,CAAC,2BAA2B,CAAC,CAAA;AAC5D,QAAA,mBAAmB,GAAG,MAAM,CAAC,GAAG,CAAC,4BAA4B,CAAC,CAAA;AAC9D,QAAA,uBAAuB,GAAG,MAAM,CAAC,GAAG,CAC/C,gCAAgC,CACjC,CAAA;AACY,QAAA,mBAAmB,GAAG,MAAM,CAAC,GAAG,CAAC,4BAA4B,CAAC,CAAA"}
@@ -1,21 +1,39 @@
1
1
  import type { ControllerOptions, ServerConfig, BoundaryConfig, ClassModuleOptions } from './constants';
2
2
  /**
3
3
  * Marks a class as a controller, automatically grouping its routes under the provided prefix.
4
- * Uses standard ES decorators, completely avoiding reflect-metadata bloat.
5
4
  *
6
- * Example:
5
+ * @param prefixOrOptions Base route prefix string or configuration options
7
6
  *
8
- * @Controller('/api/users')
9
- * export class UserController {
10
- * @Get()
11
- * getUsers() { return []; }
12
- * }
13
- *
14
- * @param {string | ControllerOptions} [prefixOrOptions] Route prefix or options
15
- * @public
7
+ * @example
8
+ * ```ts
9
+ * @Controller('/api/users')
10
+ * export class UserController {
11
+ * @Get('/')
12
+ * getUsers() {
13
+ * return []
14
+ * }
15
+ * }
16
+ * ```
16
17
  */
17
18
  export declare function Controller(prefixOrOptions?: string | ControllerOptions): any;
18
19
  export declare const INJECTABLE_REGISTRY: Set<any>;
20
+ /**
21
+ * Decorates a class as a Dependency Injection provider managed by the Exis container.
22
+ *
23
+ * @param options Scope options (`singleton`, `request`, `transient`)
24
+ *
25
+ * @example
26
+ * ```ts
27
+ * @Injectable()
28
+ * export class UserService {
29
+ * constructor(@Inject(DatabaseService) private db: DatabaseService) {}
30
+ *
31
+ * async findById(id: string) {
32
+ * return this.db.query('SELECT * FROM users WHERE id = $1', [id])
33
+ * }
34
+ * }
35
+ * ```
36
+ */
19
37
  export declare function Injectable(options?: {
20
38
  scope?: 'singleton' | 'request' | 'transient';
21
39
  }): any;
@@ -30,7 +48,7 @@ export declare function Boundary(options?: BoundaryConfig): any;
30
48
  /**
31
49
  * Marks a class as an OOP Module, configuring its imported modules, controllers, providers, and exports.
32
50
  *
33
- * Example:
51
+ * @example
34
52
  * ```ts
35
53
  * @Module({
36
54
  * imports: [DatabaseModule],
@@ -1 +1 @@
1
- {"version":3,"file":"core.d.ts","sourceRoot":"","sources":["../../src/decorators/core.ts"],"names":[],"mappings":"AAiBA,OAAO,KAAK,EACV,iBAAiB,EACjB,YAAY,EACZ,cAAc,EACd,kBAAkB,EACnB,MAAM,aAAa,CAAA;AAGpB;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,UAAU,CAAC,eAAe,CAAC,EAAE,MAAM,GAAG,iBAAiB,GAAG,GAAG,CA8F5E;AAED,eAAO,MAAM,mBAAmB,UAAiB,CAAA;AAEjD,wBAAgB,UAAU,CAAC,OAAO,CAAC,EAAE;IACnC,KAAK,CAAC,EAAE,WAAW,GAAG,SAAS,GAAG,WAAW,CAAA;CAC9C,GAAG,GAAG,CAWN;AAED;;GAEG;AACH,wBAAgB,MAAM,CAAC,OAAO,CAAC,EAAE,YAAY,GAAG,GAAG,CAIlD;AAED;;GAEG;AACH,wBAAgB,QAAQ,CAAC,OAAO,CAAC,EAAE,cAAc,GAAG,GAAG,CAItD;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,MAAM,CAAC,OAAO,GAAE,kBAAuB,GAAG,GAAG,CAO5D"}
1
+ {"version":3,"file":"core.d.ts","sourceRoot":"","sources":["../../src/decorators/core.ts"],"names":[],"mappings":"AAiBA,OAAO,KAAK,EACV,iBAAiB,EACjB,YAAY,EACZ,cAAc,EACd,kBAAkB,EACnB,MAAM,aAAa,CAAA;AAGpB;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,UAAU,CAAC,eAAe,CAAC,EAAE,MAAM,GAAG,iBAAiB,GAAG,GAAG,CA8F5E;AAED,eAAO,MAAM,mBAAmB,UAAiB,CAAA;AAEjD;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,UAAU,CAAC,OAAO,CAAC,EAAE;IACnC,KAAK,CAAC,EAAE,WAAW,GAAG,SAAS,GAAG,WAAW,CAAA;CAC9C,GAAG,GAAG,CAiCN;AAED;;GAEG;AACH,wBAAgB,MAAM,CAAC,OAAO,CAAC,EAAE,YAAY,GAAG,GAAG,CAIlD;AAED;;GAEG;AACH,wBAAgB,QAAQ,CAAC,OAAO,CAAC,EAAE,cAAc,GAAG,GAAG,CAItD;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,MAAM,CAAC,OAAO,GAAE,kBAAuB,GAAG,GAAG,CAO5D"}
@@ -10,18 +10,19 @@ const constants_1 = require("./constants");
10
10
  const metadata_1 = require("./core/metadata");
11
11
  /**
12
12
  * Marks a class as a controller, automatically grouping its routes under the provided prefix.
13
- * Uses standard ES decorators, completely avoiding reflect-metadata bloat.
14
13
  *
15
- * Example:
14
+ * @param prefixOrOptions Base route prefix string or configuration options
16
15
  *
17
- * @Controller('/api/users')
18
- * export class UserController {
19
- * @Get()
20
- * getUsers() { return []; }
21
- * }
22
- *
23
- * @param {string | ControllerOptions} [prefixOrOptions] Route prefix or options
24
- * @public
16
+ * @example
17
+ * ```ts
18
+ * @Controller('/api/users')
19
+ * export class UserController {
20
+ * @Get('/')
21
+ * getUsers() {
22
+ * return []
23
+ * }
24
+ * }
25
+ * ```
25
26
  */
26
27
  function Controller(prefixOrOptions) {
27
28
  return function (target, context) {
@@ -104,12 +105,49 @@ function Controller(prefixOrOptions) {
104
105
  };
105
106
  }
106
107
  exports.INJECTABLE_REGISTRY = new Set();
108
+ /**
109
+ * Decorates a class as a Dependency Injection provider managed by the Exis container.
110
+ *
111
+ * @param options Scope options (`singleton`, `request`, `transient`)
112
+ *
113
+ * @example
114
+ * ```ts
115
+ * @Injectable()
116
+ * export class UserService {
117
+ * constructor(@Inject(DatabaseService) private db: DatabaseService) {}
118
+ *
119
+ * async findById(id: string) {
120
+ * return this.db.query('SELECT * FROM users WHERE id = $1', [id])
121
+ * }
122
+ * }
123
+ * ```
124
+ */
107
125
  function Injectable(options) {
108
126
  return function (target, _context) {
109
127
  exports.INJECTABLE_REGISTRY.add(target);
110
128
  if (options?.scope) {
111
129
  metadata_1.MetadataEngine.set(target.prototype, Symbol.for('exisjs:scope'), options.scope);
112
130
  }
131
+ const proto = target.prototype;
132
+ if (proto) {
133
+ const CRON_REGISTRY = Symbol.for('exisjs:cron_jobs');
134
+ const CRON_META = Symbol.for('exisjs:cron_meta');
135
+ metadata_1.MetadataEngine.init(proto, CRON_REGISTRY, []);
136
+ const cronRegistry = metadata_1.MetadataEngine.get(proto, CRON_REGISTRY);
137
+ for (const key of Object.getOwnPropertyNames(proto)) {
138
+ const descriptor = Object.getOwnPropertyDescriptor(proto, key);
139
+ if (descriptor && typeof descriptor.value === 'function') {
140
+ const fn = descriptor.value;
141
+ const cronMeta = metadata_1.MetadataEngine.get(fn, CRON_META);
142
+ if (cronMeta) {
143
+ const exists = cronRegistry.some((c) => c.methodName === key);
144
+ if (!exists) {
145
+ cronRegistry.push({ ...cronMeta, methodName: key });
146
+ }
147
+ }
148
+ }
149
+ }
150
+ }
113
151
  };
114
152
  }
115
153
  /**
@@ -131,7 +169,7 @@ function Boundary(options) {
131
169
  /**
132
170
  * Marks a class as an OOP Module, configuring its imported modules, controllers, providers, and exports.
133
171
  *
134
- * Example:
172
+ * @example
135
173
  * ```ts
136
174
  * @Module({
137
175
  * imports: [DatabaseModule],
@@ -1 +1 @@
1
- {"version":3,"file":"core.js","sourceRoot":"","sources":["../../src/decorators/core.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"core.js","sourceRoot":"","sources":["../../src/decorators/core.ts"],"names":[],"mappings":"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"}