@pristine-ts/local-scheduling 4.0.2

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 (150) hide show
  1. package/LICENSE +201 -0
  2. package/dist/lib/cjs/builders/builders.js +18 -0
  3. package/dist/lib/cjs/builders/builders.js.map +1 -0
  4. package/dist/lib/cjs/builders/cron-expression.builder.js +159 -0
  5. package/dist/lib/cjs/builders/cron-expression.builder.js.map +1 -0
  6. package/dist/lib/cjs/enums/day-of-week.enum.js +19 -0
  7. package/dist/lib/cjs/enums/day-of-week.enum.js.map +1 -0
  8. package/dist/lib/cjs/enums/enums.js +19 -0
  9. package/dist/lib/cjs/enums/enums.js.map +1 -0
  10. package/dist/lib/cjs/enums/month.enum.js +23 -0
  11. package/dist/lib/cjs/enums/month.enum.js.map +1 -0
  12. package/dist/lib/cjs/errors/errors.js +20 -0
  13. package/dist/lib/cjs/errors/errors.js.map +1 -0
  14. package/dist/lib/cjs/errors/invalid-cron-expression.error.js +30 -0
  15. package/dist/lib/cjs/errors/invalid-cron-expression.error.js.map +1 -0
  16. package/dist/lib/cjs/errors/schedule-already-exists.error.js +25 -0
  17. package/dist/lib/cjs/errors/schedule-already-exists.error.js.map +1 -0
  18. package/dist/lib/cjs/errors/schedule-not-found.error.js +22 -0
  19. package/dist/lib/cjs/errors/schedule-not-found.error.js.map +1 -0
  20. package/dist/lib/cjs/interfaces/interfaces.js +22 -0
  21. package/dist/lib/cjs/interfaces/interfaces.js.map +1 -0
  22. package/dist/lib/cjs/interfaces/local-scheduler.interface.js +3 -0
  23. package/dist/lib/cjs/interfaces/local-scheduler.interface.js.map +1 -0
  24. package/dist/lib/cjs/interfaces/schedulable.interface.js +3 -0
  25. package/dist/lib/cjs/interfaces/schedulable.interface.js.map +1 -0
  26. package/dist/lib/cjs/interfaces/schedule-descriptor.interface.js +3 -0
  27. package/dist/lib/cjs/interfaces/schedule-descriptor.interface.js.map +1 -0
  28. package/dist/lib/cjs/interfaces/schedule-options.interface.js +3 -0
  29. package/dist/lib/cjs/interfaces/schedule-options.interface.js.map +1 -0
  30. package/dist/lib/cjs/interfaces/schedule-state.interface.js +3 -0
  31. package/dist/lib/cjs/interfaces/schedule-state.interface.js.map +1 -0
  32. package/dist/lib/cjs/interfaces/schedule.interface.js +3 -0
  33. package/dist/lib/cjs/interfaces/schedule.interface.js.map +1 -0
  34. package/dist/lib/cjs/local-scheduling.module.js +85 -0
  35. package/dist/lib/cjs/local-scheduling.module.js.map +1 -0
  36. package/dist/lib/cjs/local-scheduling.module.keyname.js +5 -0
  37. package/dist/lib/cjs/local-scheduling.module.keyname.js.map +1 -0
  38. package/dist/lib/cjs/managers/local-scheduler.manager.js +361 -0
  39. package/dist/lib/cjs/managers/local-scheduler.manager.js.map +1 -0
  40. package/dist/lib/cjs/managers/managers.js +18 -0
  41. package/dist/lib/cjs/managers/managers.js.map +1 -0
  42. package/dist/lib/cjs/models/cron-expression.model.js +304 -0
  43. package/dist/lib/cjs/models/cron-expression.model.js.map +1 -0
  44. package/dist/lib/cjs/models/models.js +18 -0
  45. package/dist/lib/cjs/models/models.js.map +1 -0
  46. package/dist/lib/cjs/schedules/cron.schedule.js +34 -0
  47. package/dist/lib/cjs/schedules/cron.schedule.js.map +1 -0
  48. package/dist/lib/cjs/schedules/date.schedule.js +27 -0
  49. package/dist/lib/cjs/schedules/date.schedule.js.map +1 -0
  50. package/dist/lib/cjs/schedules/schedules.js +19 -0
  51. package/dist/lib/cjs/schedules/schedules.js.map +1 -0
  52. package/dist/lib/cjs/servers/local-scheduler.runtime-server.js +69 -0
  53. package/dist/lib/cjs/servers/local-scheduler.runtime-server.js.map +1 -0
  54. package/dist/lib/cjs/servers/servers.js +18 -0
  55. package/dist/lib/cjs/servers/servers.js.map +1 -0
  56. package/dist/lib/cjs/types/scheduled-task-function.type.js +3 -0
  57. package/dist/lib/cjs/types/scheduled-task-function.type.js.map +1 -0
  58. package/dist/lib/cjs/types/types.js +18 -0
  59. package/dist/lib/cjs/types/types.js.map +1 -0
  60. package/dist/lib/esm/builders/builders.js +2 -0
  61. package/dist/lib/esm/builders/builders.js.map +1 -0
  62. package/dist/lib/esm/builders/cron-expression.builder.js +155 -0
  63. package/dist/lib/esm/builders/cron-expression.builder.js.map +1 -0
  64. package/dist/lib/esm/enums/day-of-week.enum.js +16 -0
  65. package/dist/lib/esm/enums/day-of-week.enum.js.map +1 -0
  66. package/dist/lib/esm/enums/enums.js +3 -0
  67. package/dist/lib/esm/enums/enums.js.map +1 -0
  68. package/dist/lib/esm/enums/month.enum.js +20 -0
  69. package/dist/lib/esm/enums/month.enum.js.map +1 -0
  70. package/dist/lib/esm/errors/errors.js +4 -0
  71. package/dist/lib/esm/errors/errors.js.map +1 -0
  72. package/dist/lib/esm/errors/invalid-cron-expression.error.js +26 -0
  73. package/dist/lib/esm/errors/invalid-cron-expression.error.js.map +1 -0
  74. package/dist/lib/esm/errors/schedule-already-exists.error.js +21 -0
  75. package/dist/lib/esm/errors/schedule-already-exists.error.js.map +1 -0
  76. package/dist/lib/esm/errors/schedule-not-found.error.js +18 -0
  77. package/dist/lib/esm/errors/schedule-not-found.error.js.map +1 -0
  78. package/dist/lib/esm/interfaces/interfaces.js +6 -0
  79. package/dist/lib/esm/interfaces/interfaces.js.map +1 -0
  80. package/dist/lib/esm/interfaces/local-scheduler.interface.js +2 -0
  81. package/dist/lib/esm/interfaces/local-scheduler.interface.js.map +1 -0
  82. package/dist/lib/esm/interfaces/schedulable.interface.js +2 -0
  83. package/dist/lib/esm/interfaces/schedulable.interface.js.map +1 -0
  84. package/dist/lib/esm/interfaces/schedule-descriptor.interface.js +2 -0
  85. package/dist/lib/esm/interfaces/schedule-descriptor.interface.js.map +1 -0
  86. package/dist/lib/esm/interfaces/schedule-options.interface.js +2 -0
  87. package/dist/lib/esm/interfaces/schedule-options.interface.js.map +1 -0
  88. package/dist/lib/esm/interfaces/schedule-state.interface.js +2 -0
  89. package/dist/lib/esm/interfaces/schedule-state.interface.js.map +1 -0
  90. package/dist/lib/esm/interfaces/schedule.interface.js +2 -0
  91. package/dist/lib/esm/interfaces/schedule.interface.js.map +1 -0
  92. package/dist/lib/esm/local-scheduling.module.js +68 -0
  93. package/dist/lib/esm/local-scheduling.module.js.map +1 -0
  94. package/dist/lib/esm/local-scheduling.module.keyname.js +2 -0
  95. package/dist/lib/esm/local-scheduling.module.keyname.js.map +1 -0
  96. package/dist/lib/esm/managers/local-scheduler.manager.js +358 -0
  97. package/dist/lib/esm/managers/local-scheduler.manager.js.map +1 -0
  98. package/dist/lib/esm/managers/managers.js +2 -0
  99. package/dist/lib/esm/managers/managers.js.map +1 -0
  100. package/dist/lib/esm/models/cron-expression.model.js +300 -0
  101. package/dist/lib/esm/models/cron-expression.model.js.map +1 -0
  102. package/dist/lib/esm/models/models.js +2 -0
  103. package/dist/lib/esm/models/models.js.map +1 -0
  104. package/dist/lib/esm/schedules/cron.schedule.js +30 -0
  105. package/dist/lib/esm/schedules/cron.schedule.js.map +1 -0
  106. package/dist/lib/esm/schedules/date.schedule.js +23 -0
  107. package/dist/lib/esm/schedules/date.schedule.js.map +1 -0
  108. package/dist/lib/esm/schedules/schedules.js +3 -0
  109. package/dist/lib/esm/schedules/schedules.js.map +1 -0
  110. package/dist/lib/esm/servers/local-scheduler.runtime-server.js +66 -0
  111. package/dist/lib/esm/servers/local-scheduler.runtime-server.js.map +1 -0
  112. package/dist/lib/esm/servers/servers.js +2 -0
  113. package/dist/lib/esm/servers/servers.js.map +1 -0
  114. package/dist/lib/esm/types/scheduled-task-function.type.js +2 -0
  115. package/dist/lib/esm/types/scheduled-task-function.type.js.map +1 -0
  116. package/dist/lib/esm/types/types.js +2 -0
  117. package/dist/lib/esm/types/types.js.map +1 -0
  118. package/dist/lib/tsconfig.cjs.tsbuildinfo +1 -0
  119. package/dist/lib/tsconfig.tsbuildinfo +1 -0
  120. package/dist/types/builders/builders.d.ts +1 -0
  121. package/dist/types/builders/cron-expression.builder.d.ts +69 -0
  122. package/dist/types/enums/day-of-week.enum.d.ts +14 -0
  123. package/dist/types/enums/enums.d.ts +2 -0
  124. package/dist/types/enums/month.enum.d.ts +18 -0
  125. package/dist/types/errors/errors.d.ts +3 -0
  126. package/dist/types/errors/invalid-cron-expression.error.d.ts +20 -0
  127. package/dist/types/errors/schedule-already-exists.error.d.ts +15 -0
  128. package/dist/types/errors/schedule-not-found.error.d.ts +12 -0
  129. package/dist/types/interfaces/interfaces.d.ts +5 -0
  130. package/dist/types/interfaces/local-scheduler.interface.d.ts +57 -0
  131. package/dist/types/interfaces/schedulable.interface.d.ts +43 -0
  132. package/dist/types/interfaces/schedule-descriptor.interface.d.ts +22 -0
  133. package/dist/types/interfaces/schedule-options.interface.d.ts +37 -0
  134. package/dist/types/interfaces/schedule-state.interface.d.ts +24 -0
  135. package/dist/types/interfaces/schedule.interface.d.ts +20 -0
  136. package/dist/types/local-scheduling.module.d.ts +30 -0
  137. package/dist/types/local-scheduling.module.keyname.d.ts +1 -0
  138. package/dist/types/managers/local-scheduler.manager.d.ts +110 -0
  139. package/dist/types/managers/managers.d.ts +1 -0
  140. package/dist/types/models/cron-expression.model.d.ts +120 -0
  141. package/dist/types/models/models.d.ts +1 -0
  142. package/dist/types/schedules/cron.schedule.d.ts +22 -0
  143. package/dist/types/schedules/date.schedule.d.ts +17 -0
  144. package/dist/types/schedules/schedules.d.ts +2 -0
  145. package/dist/types/servers/local-scheduler.runtime-server.d.ts +24 -0
  146. package/dist/types/servers/servers.d.ts +1 -0
  147. package/dist/types/types/scheduled-task-function.type.d.ts +10 -0
  148. package/dist/types/types/types.d.ts +1 -0
  149. package/package.json +68 -0
  150. package/readme.md +307 -0
@@ -0,0 +1,358 @@
1
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
2
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
3
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
4
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
5
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
6
+ };
7
+ var __metadata = (this && this.__metadata) || function (k, v) {
8
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
9
+ };
10
+ var __param = (this && this.__param) || function (paramIndex, decorator) {
11
+ return function (target, key) { decorator(target, key, paramIndex); }
12
+ };
13
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
14
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
15
+ return new (P || (P = Promise))(function (resolve, reject) {
16
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
17
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
18
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
19
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
20
+ });
21
+ };
22
+ var LocalSchedulerManager_1;
23
+ import { inject, injectable, injectAll, singleton } from "tsyringe";
24
+ import { moduleScoped, tag, ServiceDefinitionTagEnum } from "@pristine-ts/common";
25
+ import { LocalSchedulingModuleKeyname } from "../local-scheduling.module.keyname";
26
+ import { CronSchedule } from "../schedules/cron.schedule";
27
+ import { ScheduleAlreadyExistsError } from "../errors/schedule-already-exists.error";
28
+ import { ScheduleNotFoundError } from "../errors/schedule-not-found.error";
29
+ /**
30
+ * In-process scheduler driver for long-running Pristine applications (an always-up server, a
31
+ * worker). Unlike {@link SchedulerManager} from `@pristine-ts/scheduling` — which runs tagged
32
+ * tasks when an external trigger (e.g. AWS EventBridge) fires — this manager owns the clock
33
+ * itself and runs each task on its own {@link ScheduleInterface} (cron, one-off date, ...)
34
+ * from inside the Node process.
35
+ *
36
+ * It offers two registration paths that share one id space and one set of timers:
37
+ *
38
+ * - **Dynamic** — schedules registered, replaced, and removed at runtime by id, which suits a
39
+ * consumer that loads user-defined schedules from a database and mutates them from HTTP
40
+ * controllers.
41
+ * - **Static** — any class tagged {@link ServiceDefinitionTagEnum.Schedulable} that implements
42
+ * {@link SchedulableInterface} is discovered via `@injectAll` and **auto-registered on
43
+ * `start()`** from the schedules it declares.
44
+ *
45
+ * **Timer strategy:** each schedule owns a single chained `setTimeout` armed for its next
46
+ * occurrence, re-armed after every fire. The delay is always recomputed from the current time
47
+ * (never accumulated), so the schedule does not drift; delays beyond the `setTimeout` maximum
48
+ * are chunked. See {@link ScheduleOptions} for the overlap and missed-fire policies.
49
+ *
50
+ * It is tagged `"LocalSchedulerInterface"` and module-scoped to the local-scheduling module,
51
+ * so it can be injected either by class or by interface token. It is a `@singleton()`: there
52
+ * is exactly one instance per process, so the code that starts it at bootstrap and the HTTP
53
+ * controllers that mutate schedules at runtime all share the same set of timers.
54
+ */
55
+ let LocalSchedulerManager = LocalSchedulerManager_1 = class LocalSchedulerManager {
56
+ /**
57
+ * @param logHandler The log handler used to report skips, task errors, and lifecycle.
58
+ * @param schedulables Every class tagged {@link ServiceDefinitionTagEnum.Schedulable}. Injected optionally, so the
59
+ * collection is simply empty when none is tagged. They are registered on `start()`.
60
+ * Defaults to `[]` so the manager can also be constructed directly (e.g. in tests)
61
+ * without wiring the collection.
62
+ */
63
+ constructor(logHandler, schedulables = []) {
64
+ this.logHandler = logHandler;
65
+ this.schedulables = schedulables;
66
+ this.states = new Map();
67
+ /** Every task invocation that has been started and not yet settled — awaited by `stop()`. */
68
+ this.inFlightInvocations = new Set();
69
+ this.started = false;
70
+ }
71
+ get isStarted() {
72
+ return this.started;
73
+ }
74
+ schedule(id, schedule, task, options) {
75
+ var _a, _b, _c;
76
+ if (this.states.has(id)) {
77
+ throw new ScheduleAlreadyExistsError(id);
78
+ }
79
+ const state = {
80
+ id,
81
+ schedule: this.resolveSchedule(schedule),
82
+ task,
83
+ allowOverlap: (_a = options === null || options === void 0 ? void 0 : options.allowOverlap) !== null && _a !== void 0 ? _a : false,
84
+ catchUp: (_b = options === null || options === void 0 ? void 0 : options.catchUp) !== null && _b !== void 0 ? _b : false,
85
+ missedExecutionThresholdInMilliseconds: (_c = options === null || options === void 0 ? void 0 : options.missedExecutionThresholdInMilliseconds) !== null && _c !== void 0 ? _c : LocalSchedulerManager_1.DEFAULT_MISSED_EXECUTION_THRESHOLD_MS,
86
+ running: false,
87
+ };
88
+ this.states.set(id, state);
89
+ this.logHandler.debug("LocalSchedulerManager: registered a schedule.", {
90
+ extra: { id, schedule: state.schedule.toString(), started: this.started },
91
+ });
92
+ if (this.started) {
93
+ this.arm(state);
94
+ }
95
+ }
96
+ unschedule(id) {
97
+ const state = this.states.get(id);
98
+ if (state === undefined) {
99
+ return false;
100
+ }
101
+ this.clearTimer(state);
102
+ this.states.delete(id);
103
+ this.logHandler.debug("LocalSchedulerManager: removed a schedule.", { extra: { id } });
104
+ return true;
105
+ }
106
+ reschedule(id, schedule) {
107
+ const state = this.states.get(id);
108
+ if (state === undefined) {
109
+ throw new ScheduleNotFoundError(id);
110
+ }
111
+ this.clearTimer(state);
112
+ state.schedule = this.resolveSchedule(schedule);
113
+ state.armedTargetEpoch = undefined;
114
+ state.nextExecutionDate = undefined;
115
+ this.logHandler.debug("LocalSchedulerManager: rescheduled.", {
116
+ extra: { id, schedule: state.schedule.toString() },
117
+ });
118
+ if (this.started) {
119
+ this.arm(state);
120
+ }
121
+ }
122
+ has(id) {
123
+ return this.states.has(id);
124
+ }
125
+ list() {
126
+ return Array.from(this.states.values()).map((state) => ({
127
+ id: state.id,
128
+ schedule: state.schedule,
129
+ isRunning: state.running,
130
+ nextExecutionDate: state.nextExecutionDate,
131
+ }));
132
+ }
133
+ getNextExecutionDate(id) {
134
+ var _a;
135
+ const state = this.states.get(id);
136
+ if (state === undefined) {
137
+ throw new ScheduleNotFoundError(id);
138
+ }
139
+ return (_a = state.nextExecutionDate) !== null && _a !== void 0 ? _a : state.schedule.getNextExecutionDate(new Date());
140
+ }
141
+ start() {
142
+ if (this.started) {
143
+ return;
144
+ }
145
+ // Register statically-tagged tasks first (while still stopped, so they only register and
146
+ // don't arm yet), then arm everything — tagged and dynamic — in one pass.
147
+ this.registerSchedulables();
148
+ this.started = true;
149
+ this.logHandler.info("LocalSchedulerManager: starting.", { extra: { scheduleCount: this.states.size } });
150
+ for (const state of this.states.values()) {
151
+ this.arm(state);
152
+ }
153
+ }
154
+ stop() {
155
+ return __awaiter(this, void 0, void 0, function* () {
156
+ this.started = false;
157
+ for (const state of this.states.values()) {
158
+ this.clearTimer(state);
159
+ state.armedTargetEpoch = undefined;
160
+ state.nextExecutionDate = undefined;
161
+ }
162
+ this.logHandler.info("LocalSchedulerManager: stopping; awaiting in-flight tasks.", {
163
+ extra: { inFlightCount: this.inFlightInvocations.size },
164
+ });
165
+ // Timers are already cleared synchronously above, so no new fires occur. We only wait for
166
+ // invocations that were already running to settle, enabling a graceful shutdown.
167
+ yield Promise.allSettled(Array.from(this.inFlightInvocations));
168
+ });
169
+ }
170
+ /**
171
+ * Registers each statically-tagged {@link SchedulableInterface} from the schedules it
172
+ * declares. Called once by `start()`. Each task's registration id derives from its class
173
+ * name (suffixed with the schedule index when a task declares more than one schedule). A
174
+ * task whose id is already registered (a collision with a dynamic schedule, or a repeat call
175
+ * after stop→start) is skipped, and a task whose `getSchedules()` throws is logged and
176
+ * skipped — neither prevents the others, or the scheduler, from starting.
177
+ */
178
+ registerSchedulables() {
179
+ var _a, _b, _c;
180
+ for (const schedulable of this.schedulables) {
181
+ const name = (_b = (_a = schedulable.constructor) === null || _a === void 0 ? void 0 : _a.name) !== null && _b !== void 0 ? _b : "Schedulable";
182
+ try {
183
+ const schedules = schedulable.getSchedules();
184
+ schedules.forEach((schedule, index) => {
185
+ const id = schedules.length > 1 ? `${name}#${index}` : name;
186
+ if (this.states.has(id)) {
187
+ this.logHandler.warning("LocalSchedulerManager: a tagged task's id is already registered; skipping it.", {
188
+ extra: { id, task: name },
189
+ });
190
+ return;
191
+ }
192
+ this.schedule(id, schedule, (eventId) => schedulable.run(eventId));
193
+ });
194
+ }
195
+ catch (error) {
196
+ this.logHandler.error("LocalSchedulerManager: failed to register a tagged task; skipping it.", {
197
+ extra: {
198
+ task: name,
199
+ error: error instanceof Error ? ((_c = error.stack) !== null && _c !== void 0 ? _c : error.message) : String(error),
200
+ },
201
+ });
202
+ }
203
+ }
204
+ }
205
+ resolveSchedule(schedule) {
206
+ // A string is shorthand for a cron schedule; constructing it validates the expression and
207
+ // propagates an InvalidCronExpressionError (HTTP 400) for malformed input.
208
+ return typeof schedule === "string" ? new CronSchedule(schedule) : schedule;
209
+ }
210
+ /**
211
+ * Computes the next occurrence from now and arms the timer for it. Any existing timer is
212
+ * cleared first.
213
+ */
214
+ arm(state) {
215
+ this.clearTimer(state);
216
+ this.armFrom(state, Date.now());
217
+ }
218
+ /**
219
+ * Computes the next occurrence strictly after `baseEpoch` and arms the timer for it. If the
220
+ * schedule has no upcoming occurrence, it is left unarmed (a one-shot that already fired, or
221
+ * a cron that never matches).
222
+ */
223
+ armFrom(state, baseEpoch) {
224
+ const next = state.schedule.getNextExecutionDate(new Date(baseEpoch));
225
+ if (next === undefined) {
226
+ state.armedTargetEpoch = undefined;
227
+ state.nextExecutionDate = undefined;
228
+ // Not an error: a terminal schedule (e.g. an elapsed one-off date) legitimately has no
229
+ // next occurrence. It stays registered and observable via list() with no next date.
230
+ this.logHandler.debug("LocalSchedulerManager: schedule has no upcoming occurrence; leaving it unarmed.", {
231
+ extra: { id: state.id, schedule: state.schedule.toString() },
232
+ });
233
+ return;
234
+ }
235
+ state.armedTargetEpoch = next.getTime();
236
+ state.nextExecutionDate = next;
237
+ this.setChunkedTimeout(state);
238
+ }
239
+ /**
240
+ * Arms a `setTimeout` for the currently-armed target, chunked so it never exceeds the
241
+ * platform maximum. Re-computing the delay from `Date.now()` on each (re-)arm keeps the
242
+ * schedule drift-free.
243
+ */
244
+ setChunkedTimeout(state) {
245
+ const target = state.armedTargetEpoch;
246
+ if (target === undefined) {
247
+ return;
248
+ }
249
+ const delay = target - Date.now();
250
+ const chunk = Math.max(0, Math.min(delay, LocalSchedulerManager_1.MAX_TIMEOUT_DELAY));
251
+ state.timeout = setTimeout(() => this.onTimer(state), chunk);
252
+ }
253
+ /**
254
+ * Fires when a (possibly chunked) timeout elapses. If the real target is still in the future
255
+ * — because the delay was chunked — it re-arms for the remaining time; otherwise it fires
256
+ * the occurrence.
257
+ */
258
+ onTimer(state) {
259
+ state.timeout = undefined;
260
+ if (!this.started) {
261
+ return;
262
+ }
263
+ const target = state.armedTargetEpoch;
264
+ if (target === undefined) {
265
+ return;
266
+ }
267
+ // A chunked long delay: the target is still ahead, so arm the next chunk. The 1ms
268
+ // tolerance avoids a needless extra timer when we land essentially on the target.
269
+ if (target - Date.now() > 1) {
270
+ this.setChunkedTimeout(state);
271
+ return;
272
+ }
273
+ this.fire(state, target);
274
+ }
275
+ /**
276
+ * Decides whether the occurrence at `target` should run (applying the missed-fire and
277
+ * overlap policies), re-arms for the next occurrence, and executes the task if warranted.
278
+ */
279
+ fire(state, target) {
280
+ const now = Date.now();
281
+ const driftMs = now - target;
282
+ const isMissed = driftMs > state.missedExecutionThresholdInMilliseconds;
283
+ const skipBecauseMissed = isMissed && !state.catchUp;
284
+ const skipBecauseOverlap = state.running && !state.allowOverlap;
285
+ // Re-arm for the next future occurrence *before* running the task, from max(now, target):
286
+ // this guarantees monotonic progress (never re-selecting this or an earlier occurrence,
287
+ // even if the timer fired a hair early or very late) and means a long-running task never
288
+ // delays the scheduling of subsequent occurrences.
289
+ this.armFrom(state, Math.max(now, target));
290
+ if (skipBecauseMissed) {
291
+ this.logHandler.info("LocalSchedulerManager: skipped a missed occurrence.", {
292
+ extra: { id: state.id, scheduledFor: new Date(target).toISOString(), driftMs },
293
+ });
294
+ return;
295
+ }
296
+ if (skipBecauseOverlap) {
297
+ this.logHandler.warning("LocalSchedulerManager: skipped an overlapping occurrence (previous invocation still running).", {
298
+ extra: { id: state.id, scheduledFor: new Date(target).toISOString() },
299
+ });
300
+ return;
301
+ }
302
+ this.execute(state, target);
303
+ }
304
+ /**
305
+ * Runs the task, isolating any error so it can never break the scheduling loop, and tracks
306
+ * the invocation so `stop()` can await it. The task receives an `eventId` correlating logs
307
+ * to this specific occurrence.
308
+ */
309
+ execute(state, target) {
310
+ state.running = true;
311
+ const scheduledFor = new Date(target).toISOString();
312
+ const eventId = `${state.id}:${scheduledFor}`;
313
+ const invocation = (() => __awaiter(this, void 0, void 0, function* () {
314
+ var _a;
315
+ try {
316
+ yield state.task(eventId);
317
+ }
318
+ catch (error) {
319
+ this.logHandler.error("LocalSchedulerManager: a scheduled task threw; the schedule continues.", {
320
+ extra: {
321
+ id: state.id,
322
+ scheduledFor,
323
+ error: error instanceof Error ? ((_a = error.stack) !== null && _a !== void 0 ? _a : error.message) : String(error),
324
+ },
325
+ });
326
+ }
327
+ finally {
328
+ state.running = false;
329
+ }
330
+ }))();
331
+ this.inFlightInvocations.add(invocation);
332
+ invocation.finally(() => this.inFlightInvocations.delete(invocation));
333
+ }
334
+ clearTimer(state) {
335
+ if (state.timeout !== undefined) {
336
+ clearTimeout(state.timeout);
337
+ state.timeout = undefined;
338
+ }
339
+ }
340
+ };
341
+ /**
342
+ * The largest delay a single `setTimeout` can represent: 2^31 - 1 milliseconds (~24.8
343
+ * days). Longer waits are chunked into successive timeouts.
344
+ */
345
+ LocalSchedulerManager.MAX_TIMEOUT_DELAY = 2147483647;
346
+ /** Default value for {@link ScheduleOptions.missedExecutionThresholdInMilliseconds}. */
347
+ LocalSchedulerManager.DEFAULT_MISSED_EXECUTION_THRESHOLD_MS = 5000;
348
+ LocalSchedulerManager = LocalSchedulerManager_1 = __decorate([
349
+ moduleScoped(LocalSchedulingModuleKeyname),
350
+ tag("LocalSchedulerInterface"),
351
+ singleton(),
352
+ injectable(),
353
+ __param(0, inject("LogHandlerInterface")),
354
+ __param(1, injectAll(ServiceDefinitionTagEnum.Schedulable, { isOptional: true })),
355
+ __metadata("design:paramtypes", [Object, Array])
356
+ ], LocalSchedulerManager);
357
+ export { LocalSchedulerManager };
358
+ //# sourceMappingURL=local-scheduler.manager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"local-scheduler.manager.js","sourceRoot":"","sources":["../../../../src/managers/local-scheduler.manager.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export * from "./local-scheduler.manager";
2
+ //# sourceMappingURL=managers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"managers.js","sourceRoot":"","sources":["../../../../src/managers/managers.ts"],"names":[],"mappings":"AAAA,cAAc,2BAA2B,CAAC"}