@n8n/scheduler 0.2.3 → 0.3.0

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 (166) hide show
  1. package/README.md +60 -23
  2. package/dist/build.tsbuildinfo +1 -1
  3. package/dist/core/errors.d.ts +6 -0
  4. package/dist/core/errors.js +15 -1
  5. package/dist/core/errors.js.map +1 -1
  6. package/dist/core/executor/backoff.js.map +1 -0
  7. package/dist/core/executor/executor.d.ts +38 -0
  8. package/dist/core/executor/executor.js +137 -0
  9. package/dist/core/executor/executor.js.map +1 -0
  10. package/dist/core/executor/index.d.ts +8 -0
  11. package/dist/core/executor/index.js +16 -0
  12. package/dist/core/executor/index.js.map +1 -0
  13. package/dist/core/executor/options.d.ts +6 -0
  14. package/dist/core/executor/options.js +10 -0
  15. package/dist/core/executor/options.js.map +1 -0
  16. package/dist/{executor → core/executor}/precision-timer.d.ts +1 -0
  17. package/dist/{executor → core/executor}/precision-timer.js +3 -0
  18. package/dist/core/executor/precision-timer.js.map +1 -0
  19. package/dist/core/executor/store.d.ts +21 -0
  20. package/dist/core/executor/store.js +3 -0
  21. package/dist/core/executor/store.js.map +1 -0
  22. package/dist/{executor → core/executor}/task-handler.d.ts +1 -1
  23. package/dist/{executor → core/executor}/task-handler.js +2 -2
  24. package/dist/core/executor/task-handler.js.map +1 -0
  25. package/dist/core/executor/tracing.d.ts +11 -0
  26. package/dist/core/executor/tracing.js +7 -0
  27. package/dist/core/executor/tracing.js.map +1 -0
  28. package/dist/core/factory.d.ts +29 -0
  29. package/dist/core/factory.js +254 -0
  30. package/dist/core/factory.js.map +1 -0
  31. package/dist/core/index.d.ts +17 -9
  32. package/dist/core/index.js +15 -17
  33. package/dist/core/index.js.map +1 -1
  34. package/dist/core/lifecycle/alarm.d.ts +8 -0
  35. package/dist/core/lifecycle/alarm.js +32 -0
  36. package/dist/core/lifecycle/alarm.js.map +1 -0
  37. package/dist/core/lifecycle/index.d.ts +5 -0
  38. package/dist/core/lifecycle/index.js +11 -0
  39. package/dist/core/lifecycle/index.js.map +1 -0
  40. package/dist/core/lifecycle/lookahead.d.ts +1 -0
  41. package/dist/core/lifecycle/lookahead.js +7 -0
  42. package/dist/core/lifecycle/lookahead.js.map +1 -0
  43. package/dist/core/lifecycle/loop.d.ts +39 -0
  44. package/dist/core/lifecycle/loop.js +86 -0
  45. package/dist/core/lifecycle/loop.js.map +1 -0
  46. package/dist/core/lifecycle/options.d.ts +15 -0
  47. package/dist/core/lifecycle/options.js +18 -0
  48. package/dist/core/lifecycle/options.js.map +1 -0
  49. package/dist/core/lifecycle/timeline.d.ts +9 -0
  50. package/dist/core/lifecycle/timeline.js +22 -0
  51. package/dist/core/lifecycle/timeline.js.map +1 -0
  52. package/dist/core/materializer/index.d.ts +2 -2
  53. package/dist/core/materializer/index.js.map +1 -1
  54. package/dist/core/materializer/materialize.d.ts +10 -2
  55. package/dist/core/materializer/materialize.js +32 -6
  56. package/dist/core/materializer/materialize.js.map +1 -1
  57. package/dist/core/materializer/options.d.ts +1 -0
  58. package/dist/core/materializer/options.js +1 -0
  59. package/dist/core/materializer/options.js.map +1 -1
  60. package/dist/core/materializer/plan.d.ts +1 -0
  61. package/dist/core/materializer/plan.js +12 -6
  62. package/dist/core/materializer/plan.js.map +1 -1
  63. package/dist/core/materializer/transaction.d.ts +18 -1
  64. package/dist/core/provisioning/index.d.ts +5 -0
  65. package/dist/core/provisioning/index.js +9 -0
  66. package/dist/core/provisioning/index.js.map +1 -0
  67. package/dist/core/provisioning/provision.d.ts +6 -0
  68. package/dist/core/provisioning/provision.js +64 -0
  69. package/dist/core/provisioning/provision.js.map +1 -0
  70. package/dist/core/provisioning/provisioner.d.ts +15 -0
  71. package/dist/core/provisioning/provisioner.js +18 -0
  72. package/dist/core/provisioning/provisioner.js.map +1 -0
  73. package/dist/core/provisioning/transaction.d.ts +13 -0
  74. package/dist/core/provisioning/transaction.js +3 -0
  75. package/dist/core/provisioning/transaction.js.map +1 -0
  76. package/dist/core/provisioning/types.d.ts +43 -0
  77. package/dist/core/provisioning/types.js +3 -0
  78. package/dist/core/provisioning/types.js.map +1 -0
  79. package/dist/core/reaper/index.d.ts +1 -0
  80. package/dist/core/reaper/index.js +7 -0
  81. package/dist/core/reaper/index.js.map +1 -0
  82. package/dist/{reaper/reaper.d.ts → core/reaper/reap.d.ts} +13 -8
  83. package/dist/core/reaper/reap.js +51 -0
  84. package/dist/core/reaper/reap.js.map +1 -0
  85. package/dist/core/recurrence/field.d.ts +2 -0
  86. package/dist/core/recurrence/field.js +12 -0
  87. package/dist/core/recurrence/field.js.map +1 -0
  88. package/dist/core/recurrence/kinds/cron.d.ts +10 -0
  89. package/dist/core/recurrence/kinds/cron.js +64 -0
  90. package/dist/core/recurrence/kinds/cron.js.map +1 -0
  91. package/dist/core/recurrence/kinds/interval.d.ts +5 -0
  92. package/dist/core/recurrence/kinds/interval.js +29 -0
  93. package/dist/core/recurrence/kinds/interval.js.map +1 -0
  94. package/dist/core/recurrence/kinds/one-off.d.ts +5 -0
  95. package/dist/core/recurrence/kinds/one-off.js +24 -0
  96. package/dist/core/recurrence/kinds/one-off.js.map +1 -0
  97. package/dist/core/recurrence/kinds/recurring-cron.d.ts +7 -0
  98. package/dist/core/recurrence/kinds/recurring-cron.js +64 -0
  99. package/dist/core/recurrence/kinds/recurring-cron.js.map +1 -0
  100. package/dist/core/recurrence/next-run.d.ts +2 -0
  101. package/dist/core/recurrence/next-run.js +37 -24
  102. package/dist/core/recurrence/next-run.js.map +1 -1
  103. package/dist/core/recurrence/periods.d.ts +2 -0
  104. package/dist/core/recurrence/periods.js +30 -0
  105. package/dist/core/recurrence/periods.js.map +1 -0
  106. package/dist/core/recurrence/resolve.d.ts +2 -0
  107. package/dist/core/recurrence/resolve.js +25 -0
  108. package/dist/core/recurrence/resolve.js.map +1 -0
  109. package/dist/core/recurrence/validate.js +9 -38
  110. package/dist/core/recurrence/validate.js.map +1 -1
  111. package/dist/core/retention/prune.d.ts +1 -1
  112. package/dist/core/retention/prune.js +11 -9
  113. package/dist/core/retention/prune.js.map +1 -1
  114. package/dist/core/retention/store.d.ts +1 -1
  115. package/dist/core/scheduler.d.ts +16 -0
  116. package/dist/core/scheduler.js +3 -0
  117. package/dist/core/scheduler.js.map +1 -0
  118. package/dist/core/types/schedule.d.ts +17 -4
  119. package/dist/core/types/task.d.ts +2 -5
  120. package/dist/observability/attributes.d.ts +41 -0
  121. package/dist/observability/attributes.js +56 -0
  122. package/dist/observability/attributes.js.map +1 -0
  123. package/dist/observability/executor-tracing.d.ts +4 -0
  124. package/dist/observability/executor-tracing.js +61 -0
  125. package/dist/observability/executor-tracing.js.map +1 -0
  126. package/dist/observability/materializer-tracing.d.ts +3 -0
  127. package/dist/observability/materializer-tracing.js +22 -0
  128. package/dist/observability/materializer-tracing.js.map +1 -0
  129. package/dist/observability/metrics.d.ts +11 -0
  130. package/dist/observability/metrics.js +14 -0
  131. package/dist/observability/metrics.js.map +1 -0
  132. package/dist/observability/pass-tracing.d.ts +2 -0
  133. package/dist/observability/pass-tracing.js +24 -0
  134. package/dist/observability/pass-tracing.js.map +1 -0
  135. package/dist/observability/provisioner-tracing.d.ts +11 -0
  136. package/dist/observability/provisioner-tracing.js +51 -0
  137. package/dist/observability/provisioner-tracing.js.map +1 -0
  138. package/dist/observability/tracer.d.ts +21 -0
  139. package/dist/observability/tracer.js +10 -0
  140. package/dist/observability/tracer.js.map +1 -0
  141. package/package.json +11 -22
  142. package/dist/core/enums.d.ts +0 -1
  143. package/dist/core/enums.js +0 -10
  144. package/dist/core/enums.js.map +0 -1
  145. package/dist/executor/backoff.js.map +0 -1
  146. package/dist/executor/executor.d.ts +0 -23
  147. package/dist/executor/executor.js +0 -133
  148. package/dist/executor/executor.js.map +0 -1
  149. package/dist/executor/precision-timer.js.map +0 -1
  150. package/dist/executor/task-handler.js.map +0 -1
  151. package/dist/reaper/reaper.js +0 -37
  152. package/dist/reaper/reaper.js.map +0 -1
  153. package/dist/storage/index.d.ts +0 -3
  154. package/dist/storage/index.js +0 -12
  155. package/dist/storage/index.js.map +0 -1
  156. package/dist/storage/mappers.d.ts +0 -6
  157. package/dist/storage/mappers.js +0 -72
  158. package/dist/storage/mappers.js.map +0 -1
  159. package/dist/storage/materializer-store.d.ts +0 -14
  160. package/dist/storage/materializer-store.js +0 -83
  161. package/dist/storage/materializer-store.js.map +0 -1
  162. package/dist/storage/scheduler.service.d.ts +0 -16
  163. package/dist/storage/scheduler.service.js +0 -70
  164. package/dist/storage/scheduler.service.js.map +0 -1
  165. /package/dist/{executor → core/executor}/backoff.d.ts +0 -0
  166. /package/dist/{executor → core/executor}/backoff.js +0 -0
@@ -0,0 +1,254 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.createScheduler = createScheduler;
4
+ const constants_1 = require("@n8n/constants");
5
+ const ensure_error_1 = require("@n8n/utils/errors/ensure-error");
6
+ const errors_1 = require("./errors");
7
+ const executor_1 = require("./executor");
8
+ const lifecycle_1 = require("./lifecycle");
9
+ const materializer_1 = require("./materializer");
10
+ const reaper_1 = require("./reaper");
11
+ const retention_1 = require("./retention");
12
+ const attributes_1 = require("../observability/attributes");
13
+ const executor_tracing_1 = require("../observability/executor-tracing");
14
+ const materializer_tracing_1 = require("../observability/materializer-tracing");
15
+ const metrics_1 = require("../observability/metrics");
16
+ const pass_tracing_1 = require("../observability/pass-tracing");
17
+ const tracer_1 = require("../observability/tracer");
18
+ function withDefaults(defaults, overrides = {}) {
19
+ const merged = { ...defaults };
20
+ for (const key of Object.keys(overrides)) {
21
+ const value = overrides[key];
22
+ if (value !== undefined) {
23
+ merged[key] = value;
24
+ }
25
+ }
26
+ return merged;
27
+ }
28
+ function createScheduler(deps) {
29
+ const { hostId, materializerTransaction, taskStore, onEvent } = deps;
30
+ const tracer = deps.tracer ?? tracer_1.noopTracer;
31
+ const metrics = deps.metrics ?? metrics_1.noopMetrics;
32
+ const materializerOptions = withDefaults(materializer_1.DEFAULT_MATERIALIZER_OPTIONS, deps.materializer);
33
+ const executorOptions = withDefaults(executor_1.DEFAULT_EXECUTOR_OPTIONS, deps.executor);
34
+ const reaperOptions = withDefaults(reaper_1.DEFAULT_REAPER_OPTIONS, deps.reaper);
35
+ const retentionOptions = withDefaults(retention_1.DEFAULT_RETENTION_OPTIONS, deps.retention);
36
+ const lifecycleOptions = withDefaults(lifecycle_1.DEFAULT_LIFECYCLE_OPTIONS, deps.lifecycle);
37
+ if (!(lifecycleOptions.jitterRatio >= 0 && lifecycleOptions.jitterRatio < 1)) {
38
+ throw new errors_1.InvalidLifecycleOptionsError(`jitterRatio must be at least 0 and below 1, got ${lifecycleOptions.jitterRatio}`);
39
+ }
40
+ const durationKeys = [
41
+ 'materializerIntervalSeconds',
42
+ 'executorIntervalSeconds',
43
+ 'reaperIntervalSeconds',
44
+ 'retentionIntervalSeconds',
45
+ 'materializerTimeoutSeconds',
46
+ 'executorTimeoutSeconds',
47
+ 'reaperTimeoutSeconds',
48
+ 'retentionTimeoutSeconds',
49
+ ];
50
+ for (const key of durationKeys) {
51
+ const value = lifecycleOptions[key];
52
+ if (!(Number.isFinite(value) && value > 0)) {
53
+ throw new errors_1.InvalidLifecycleOptionsError(`${key} must be a positive number of seconds, got ${value}`);
54
+ }
55
+ }
56
+ if (lifecycleOptions.concurrencyMode !== 'sequential' &&
57
+ lifecycleOptions.concurrencyMode !== 'concurrent') {
58
+ throw new errors_1.InvalidLifecycleOptionsError(`concurrencyMode must be 'sequential' or 'concurrent', got ${String(lifecycleOptions.concurrencyMode)}`);
59
+ }
60
+ const { maxConcurrentPasses } = lifecycleOptions;
61
+ if (!(Number.isInteger(maxConcurrentPasses) && maxConcurrentPasses >= 1)) {
62
+ throw new errors_1.InvalidLifecycleOptionsError(`maxConcurrentPasses must be a positive integer, got ${maxConcurrentPasses}`);
63
+ }
64
+ const emit = (level, message, context) => {
65
+ try {
66
+ onEvent?.({ level, message, context });
67
+ }
68
+ catch {
69
+ }
70
+ };
71
+ const described = (error) => (0, ensure_error_1.ensureError)(error).message;
72
+ const recordMetric = (record) => {
73
+ try {
74
+ record();
75
+ }
76
+ catch {
77
+ }
78
+ };
79
+ const registry = new executor_1.TaskHandlerRegistry();
80
+ const executor = new executor_1.Executor(taskStore, registry, new executor_1.PrecisionTimer(), executorOptions, {
81
+ onLeaseShorterThanLookahead: (context) => {
82
+ emit('warn', 'Scheduler executor lookahead reaches or exceeds the lease; claimed tasks may lose their lease before firing', { ...context });
83
+ },
84
+ onMissingHandler: (task) => {
85
+ emit('warn', 'Scheduler claimed a task with no registered handler; claim released', {
86
+ taskId: task.id,
87
+ taskType: task.taskType,
88
+ });
89
+ },
90
+ onFireError: (task, error) => {
91
+ emit('error', 'Scheduler could not record a task outcome; left for the reaper', {
92
+ taskId: task.id,
93
+ error: described(error),
94
+ });
95
+ },
96
+ onReleaseError: (taskId, error) => {
97
+ emit('error', 'Scheduler failed to release a claimed task; left for the reaper', {
98
+ taskId,
99
+ error: described(error),
100
+ });
101
+ },
102
+ onDispatch: (taskType, lagSeconds) => recordMetric(() => {
103
+ metrics.recordDispatch(taskType);
104
+ metrics.observeDispatchLagSeconds(taskType, lagSeconds);
105
+ }),
106
+ onFire: (taskType, result) => recordMetric(() => {
107
+ metrics.recordFireOutcome(taskType, result);
108
+ if (result === 'failure')
109
+ metrics.recordDeadLettered();
110
+ }),
111
+ onRetry: (taskType) => recordMetric(() => metrics.recordRetry(taskType)),
112
+ }, (0, executor_tracing_1.createExecutorTracing)(tracer));
113
+ if (retentionOptions.failedRetentionSeconds < retentionOptions.retentionSeconds) {
114
+ emit('warn', 'Scheduler retention keeps failed runs shorter than succeeded ones; failure evidence will be deleted first', {
115
+ retentionSeconds: retentionOptions.retentionSeconds,
116
+ failedRetentionSeconds: retentionOptions.failedRetentionSeconds,
117
+ });
118
+ }
119
+ const runMaterialize = (0, pass_tracing_1.tracePass)(tracer, { name: 'Scheduler materialize', op: 'scheduler.materialize' }, async (signal) => {
120
+ try {
121
+ const summary = await (0, materializer_1.materialize)(materializerTransaction, materializerOptions, {
122
+ onPlanError: (job, error) => {
123
+ emit('error', 'Scheduler could not plan a job schedule; deferred for retry', {
124
+ jobId: job.id,
125
+ error: described(error),
126
+ });
127
+ },
128
+ onSkippedDuplicates: (context) => {
129
+ emit('debug', 'Scheduler materializer skipped occurrences that were already recorded', { ...context });
130
+ },
131
+ }, signal);
132
+ await (0, materializer_tracing_1.traceCreatedTasks)(tracer, summary.created);
133
+ recordMetric(() => metrics.recordMaterialized(summary.occurrences, summary.deferredJobs));
134
+ return summary;
135
+ }
136
+ catch (error) {
137
+ if (signal?.aborted === true &&
138
+ signal.reason !== lifecycle_1.PASS_TIMED_OUT &&
139
+ error === signal.reason) {
140
+ return { claimedJobs: 0, occurrences: 0, created: [], deferredJobs: 0 };
141
+ }
142
+ throw error;
143
+ }
144
+ }, (summary) => ({
145
+ [attributes_1.SCHEDULER_ATTRIBUTES.claimedJobs]: summary.claimedJobs,
146
+ [attributes_1.SCHEDULER_ATTRIBUTES.occurrences]: summary.occurrences,
147
+ [attributes_1.SCHEDULER_ATTRIBUTES.deferredJobs]: summary.deferredJobs,
148
+ }));
149
+ const runExecute = (0, pass_tracing_1.tracePass)(tracer, {
150
+ name: 'Scheduler claim',
151
+ op: 'scheduler.claim',
152
+ attributes: { [attributes_1.SCHEDULER_ATTRIBUTES.host]: hostId },
153
+ }, async (signal) => await executor.claimAndSchedule(hostId, signal), (tasks) => ({ [attributes_1.SCHEDULER_ATTRIBUTES.claimedCount]: tasks.length }));
154
+ const runReap = (0, pass_tracing_1.tracePass)(tracer, { name: 'Scheduler reap', op: 'scheduler.reap' }, async (signal) => {
155
+ const result = await (0, reaper_1.reap)(taskStore, reaperOptions, {
156
+ onRowError: (taskId, error) => {
157
+ emit('error', 'Scheduler could not recover an expired task; skipped until the next sweep', {
158
+ taskId,
159
+ error: described(error),
160
+ });
161
+ },
162
+ onDeadLetter: (task) => {
163
+ emit('warn', 'Scheduler dead-lettered a task; its last attempt lost its lease', {
164
+ ...task,
165
+ });
166
+ },
167
+ }, signal);
168
+ recordMetric(() => metrics.recordReaped(result.reclaimed, result.deadLettered));
169
+ return result;
170
+ }, (result) => ({
171
+ [attributes_1.SCHEDULER_ATTRIBUTES.reclaimed]: result.reclaimed,
172
+ [attributes_1.SCHEDULER_ATTRIBUTES.deadLettered]: result.deadLettered,
173
+ }));
174
+ const runPrune = (0, pass_tracing_1.tracePass)(tracer, { name: 'Scheduler retention', op: 'scheduler.retention' }, async (signal) => {
175
+ const summary = await (0, retention_1.prune)(taskStore, retentionOptions, signal);
176
+ if (!summary.drained && signal?.aborted !== true) {
177
+ emit('warn', 'Scheduler retention pass hit its batch budget; backlog remains', {
178
+ ...summary,
179
+ });
180
+ }
181
+ else if (summary.drained && summary.deleted > 0) {
182
+ emit('debug', 'Scheduler retention deleted finished tasks', { ...summary });
183
+ }
184
+ recordMetric(() => metrics.recordPruned(summary.deleted));
185
+ return summary;
186
+ }, (summary) => ({
187
+ [attributes_1.SCHEDULER_ATTRIBUTES.retentionDeleted]: summary.deleted,
188
+ [attributes_1.SCHEDULER_ATTRIBUTES.retentionDrained]: summary.drained,
189
+ }));
190
+ const loopOver = (pass, run, intervalSeconds, timeoutSeconds) => new lifecycle_1.Loop(run, {
191
+ intervalMs: intervalSeconds * constants_1.Time.seconds.toMilliseconds,
192
+ jitterRatio: lifecycleOptions.jitterRatio,
193
+ timeoutMs: timeoutSeconds * constants_1.Time.seconds.toMilliseconds,
194
+ concurrency: lifecycleOptions.concurrencyMode,
195
+ maxConcurrent: lifecycleOptions.maxConcurrentPasses,
196
+ }, {
197
+ onError: (error) => {
198
+ emit('error', 'Scheduler pass failed; retrying on its next tick', {
199
+ pass,
200
+ error: described(error),
201
+ });
202
+ },
203
+ onTimeout: ({ timeoutMs }) => {
204
+ emit('error', 'Scheduler pass timed out and was abandoned; retrying on its next tick', {
205
+ pass,
206
+ timeoutMs,
207
+ });
208
+ },
209
+ onSkippedTick: ({ inFlight, limit }) => {
210
+ emit('warn', 'Scheduler pass tick dropped; in-flight passes at the concurrency limit', {
211
+ pass,
212
+ inFlight,
213
+ limit,
214
+ });
215
+ },
216
+ });
217
+ const loops = [
218
+ loopOver('materializer', runMaterialize, lifecycleOptions.materializerIntervalSeconds, lifecycleOptions.materializerTimeoutSeconds),
219
+ loopOver('executor', runExecute, lifecycleOptions.executorIntervalSeconds, lifecycleOptions.executorTimeoutSeconds),
220
+ loopOver('reaper', runReap, lifecycleOptions.reaperIntervalSeconds, lifecycleOptions.reaperTimeoutSeconds),
221
+ loopOver('retention', runPrune, lifecycleOptions.retentionIntervalSeconds, lifecycleOptions.retentionTimeoutSeconds),
222
+ ];
223
+ let started = false;
224
+ let stopping;
225
+ return {
226
+ registerTaskHandler(taskType, handler) {
227
+ registry.register(taskType, (0, executor_tracing_1.withHandoffTracing)(tracer, handler));
228
+ },
229
+ materialize: runMaterialize,
230
+ execute: runExecute,
231
+ reap: runReap,
232
+ prune: runPrune,
233
+ start() {
234
+ if (!started && stopping === undefined) {
235
+ started = true;
236
+ for (const loop of loops) {
237
+ loop.start();
238
+ }
239
+ emit('info', 'Scheduler started', { hostId });
240
+ }
241
+ },
242
+ async stop() {
243
+ stopping ??= (async () => {
244
+ await Promise.all(loops.map(async (loop) => await loop.stop()));
245
+ await executor.stop();
246
+ if (started) {
247
+ emit('info', 'Scheduler stopped', { hostId });
248
+ }
249
+ })();
250
+ await stopping;
251
+ },
252
+ };
253
+ }
254
+ //# sourceMappingURL=factory.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"factory.js","sourceRoot":"","sources":["../../src/core/factory.ts"],"names":[],"mappings":"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"}
@@ -1,10 +1,18 @@
1
- export { ScheduledJobKind, ScheduledJobKindList, ScheduledTaskStatus, ScheduledTaskStatusList, type TerminalTaskStatus, TerminalTaskStatusList, } from './enums';
2
- export type { CronSchedule, IntervalSchedule, OneOffSchedule, Schedule, ScheduledJob, ScheduledTask, } from './types';
3
- export { InvalidScheduleError, InvalidRetentionOptionsError, CorruptStorageRowError, } from './errors';
4
- export { computeNextRunAt } from './recurrence/next-run';
1
+ export type { Scheduler, SchedulerPasses } from './scheduler';
2
+ export { createScheduler } from './factory';
3
+ export type { SchedulerDeps, SchedulerEvent, SchedulerEventLevel, SchedulerTaskStore, } from './factory';
4
+ export type { ClaimedTask, CronSchedule, IntervalSchedule, OneOffSchedule, RecurringCronSchedule, Schedule, } from './types';
5
+ export { computeFirstRunAt, computeNextRunAt } from './recurrence/next-run';
5
6
  export { validateSchedule } from './recurrence/validate';
6
- export { materialize, DEFAULT_MATERIALIZER_OPTIONS } from './materializer';
7
- export type { MaterializerSummary, MaterializerOptions, OnJobPlanError, } from './materializer';
8
- export type { DueJobs, PlannedJob, RunInTransaction, MaterializerTransaction, } from './materializer';
9
- export { prune, DEFAULT_RETENTION_OPTIONS } from './retention';
10
- export type { RetentionSummary, RetentionOptions, RetentionBatch, RetentionStore, } from './retention';
7
+ export { provision, deprovision, createJobProvisioner } from './provisioning';
8
+ export type { JobProvisioner, JobProvisionerDeps, ProvisionTransaction, RunInProvisionTransaction, DeprovisionTransaction, RunInDeprovisionTransaction, ScheduleDefinition, CronDefinition, RecurringCronDefinition, IntervalDefinition, OneOffDefinition, DesiredJob, ExistingJob, ProvisionedJob, ProvisionSummary, } from './provisioning';
9
+ export type { ExecutorOptions, TaskHandler } from './executor';
10
+ export type { MaterializerOptions, MaterializerSummary, NewOccurrence, RunInTransaction, } from './materializer';
11
+ export { executorLookaheadSeconds } from './lifecycle';
12
+ export type { ConcurrencyMode, LifecycleOptions } from './lifecycle';
13
+ export type { ReaperOptions, ReapResult } from './reaper';
14
+ export type { RetentionOptions, RetentionSummary } from './retention';
15
+ export { SpanStatus, noopTracer } from '../observability/tracer';
16
+ export type { Tracer, Span, SpanOptions } from '../observability/tracer';
17
+ export { noopMetrics } from '../observability/metrics';
18
+ export type { SchedulerMetrics } from '../observability/metrics';
@@ -1,24 +1,22 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.DEFAULT_RETENTION_OPTIONS = exports.prune = exports.DEFAULT_MATERIALIZER_OPTIONS = exports.materialize = exports.validateSchedule = exports.computeNextRunAt = exports.CorruptStorageRowError = exports.InvalidRetentionOptionsError = exports.InvalidScheduleError = exports.TerminalTaskStatusList = exports.ScheduledTaskStatusList = exports.ScheduledTaskStatus = exports.ScheduledJobKindList = exports.ScheduledJobKind = void 0;
4
- var enums_1 = require("./enums");
5
- Object.defineProperty(exports, "ScheduledJobKind", { enumerable: true, get: function () { return enums_1.ScheduledJobKind; } });
6
- Object.defineProperty(exports, "ScheduledJobKindList", { enumerable: true, get: function () { return enums_1.ScheduledJobKindList; } });
7
- Object.defineProperty(exports, "ScheduledTaskStatus", { enumerable: true, get: function () { return enums_1.ScheduledTaskStatus; } });
8
- Object.defineProperty(exports, "ScheduledTaskStatusList", { enumerable: true, get: function () { return enums_1.ScheduledTaskStatusList; } });
9
- Object.defineProperty(exports, "TerminalTaskStatusList", { enumerable: true, get: function () { return enums_1.TerminalTaskStatusList; } });
10
- var errors_1 = require("./errors");
11
- Object.defineProperty(exports, "InvalidScheduleError", { enumerable: true, get: function () { return errors_1.InvalidScheduleError; } });
12
- Object.defineProperty(exports, "InvalidRetentionOptionsError", { enumerable: true, get: function () { return errors_1.InvalidRetentionOptionsError; } });
13
- Object.defineProperty(exports, "CorruptStorageRowError", { enumerable: true, get: function () { return errors_1.CorruptStorageRowError; } });
3
+ exports.noopMetrics = exports.noopTracer = exports.SpanStatus = exports.executorLookaheadSeconds = exports.createJobProvisioner = exports.deprovision = exports.provision = exports.validateSchedule = exports.computeNextRunAt = exports.computeFirstRunAt = exports.createScheduler = void 0;
4
+ var factory_1 = require("./factory");
5
+ Object.defineProperty(exports, "createScheduler", { enumerable: true, get: function () { return factory_1.createScheduler; } });
14
6
  var next_run_1 = require("./recurrence/next-run");
7
+ Object.defineProperty(exports, "computeFirstRunAt", { enumerable: true, get: function () { return next_run_1.computeFirstRunAt; } });
15
8
  Object.defineProperty(exports, "computeNextRunAt", { enumerable: true, get: function () { return next_run_1.computeNextRunAt; } });
16
9
  var validate_1 = require("./recurrence/validate");
17
10
  Object.defineProperty(exports, "validateSchedule", { enumerable: true, get: function () { return validate_1.validateSchedule; } });
18
- var materializer_1 = require("./materializer");
19
- Object.defineProperty(exports, "materialize", { enumerable: true, get: function () { return materializer_1.materialize; } });
20
- Object.defineProperty(exports, "DEFAULT_MATERIALIZER_OPTIONS", { enumerable: true, get: function () { return materializer_1.DEFAULT_MATERIALIZER_OPTIONS; } });
21
- var retention_1 = require("./retention");
22
- Object.defineProperty(exports, "prune", { enumerable: true, get: function () { return retention_1.prune; } });
23
- Object.defineProperty(exports, "DEFAULT_RETENTION_OPTIONS", { enumerable: true, get: function () { return retention_1.DEFAULT_RETENTION_OPTIONS; } });
11
+ var provisioning_1 = require("./provisioning");
12
+ Object.defineProperty(exports, "provision", { enumerable: true, get: function () { return provisioning_1.provision; } });
13
+ Object.defineProperty(exports, "deprovision", { enumerable: true, get: function () { return provisioning_1.deprovision; } });
14
+ Object.defineProperty(exports, "createJobProvisioner", { enumerable: true, get: function () { return provisioning_1.createJobProvisioner; } });
15
+ var lifecycle_1 = require("./lifecycle");
16
+ Object.defineProperty(exports, "executorLookaheadSeconds", { enumerable: true, get: function () { return lifecycle_1.executorLookaheadSeconds; } });
17
+ var tracer_1 = require("../observability/tracer");
18
+ Object.defineProperty(exports, "SpanStatus", { enumerable: true, get: function () { return tracer_1.SpanStatus; } });
19
+ Object.defineProperty(exports, "noopTracer", { enumerable: true, get: function () { return tracer_1.noopTracer; } });
20
+ var metrics_1 = require("../observability/metrics");
21
+ Object.defineProperty(exports, "noopMetrics", { enumerable: true, get: function () { return metrics_1.noopMetrics; } });
24
22
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/core/index.ts"],"names":[],"mappings":";;;AAqBA,iCAOiB;AANhB,yGAAA,gBAAgB,OAAA;AAChB,6GAAA,oBAAoB,OAAA;AACpB,4GAAA,mBAAmB,OAAA;AACnB,gHAAA,uBAAuB,OAAA;AAEvB,+GAAA,sBAAsB,OAAA;AAYvB,mCAIkB;AAHjB,8GAAA,oBAAoB,OAAA;AACpB,sHAAA,4BAA4B,OAAA;AAC5B,gHAAA,sBAAsB,OAAA;AAGvB,kDAAyD;AAAhD,4GAAA,gBAAgB,OAAA;AACzB,kDAAyD;AAAhD,4GAAA,gBAAgB,OAAA;AAEzB,+CAA2E;AAAlE,2GAAA,WAAW,OAAA;AAAE,4HAAA,4BAA4B,OAAA;AAclD,yCAA+D;AAAtD,kGAAA,KAAK,OAAA;AAAE,sHAAA,yBAAyB,OAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/core/index.ts"],"names":[],"mappings":";;;AACA,qCAA4C;AAAnC,0GAAA,eAAe,OAAA;AAgBxB,kDAA4E;AAAnE,6GAAA,iBAAiB,OAAA;AAAE,4GAAA,gBAAgB,OAAA;AAC5C,kDAAyD;AAAhD,4GAAA,gBAAgB,OAAA;AAEzB,+CAA8E;AAArE,yGAAA,SAAS,OAAA;AAAE,2GAAA,WAAW,OAAA;AAAE,oHAAA,oBAAoB,OAAA;AAyBrD,yCAAuD;AAA9C,qHAAA,wBAAwB,OAAA;AAKjC,kDAAiE;AAAxD,oGAAA,UAAU,OAAA;AAAE,oGAAA,UAAU,OAAA;AAE/B,oDAAuD;AAA9C,sGAAA,WAAW,OAAA"}
@@ -0,0 +1,8 @@
1
+ export declare const MAX_DELAY_MS: number;
2
+ export declare class Alarm {
3
+ private readonly now;
4
+ private timer?;
5
+ constructor(now: () => number);
6
+ set(targetAt: number, fire: () => void): void;
7
+ cancel(): void;
8
+ }
@@ -0,0 +1,32 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Alarm = exports.MAX_DELAY_MS = void 0;
4
+ const constants_1 = require("@n8n/constants");
5
+ exports.MAX_DELAY_MS = constants_1.MAX_INTEGER_32BITS_SIGNED;
6
+ class Alarm {
7
+ constructor(now) {
8
+ this.now = now;
9
+ }
10
+ set(targetAt, fire) {
11
+ this.cancel();
12
+ const delayMs = Math.min(Math.max(0, targetAt - this.now()), exports.MAX_DELAY_MS);
13
+ this.timer = setTimeout(() => {
14
+ this.timer = undefined;
15
+ if (targetAt > this.now()) {
16
+ this.set(targetAt, fire);
17
+ }
18
+ else {
19
+ fire();
20
+ }
21
+ }, delayMs);
22
+ this.timer.unref();
23
+ }
24
+ cancel() {
25
+ if (this.timer !== undefined) {
26
+ clearTimeout(this.timer);
27
+ this.timer = undefined;
28
+ }
29
+ }
30
+ }
31
+ exports.Alarm = Alarm;
32
+ //# sourceMappingURL=alarm.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"alarm.js","sourceRoot":"","sources":["../../../src/core/lifecycle/alarm.ts"],"names":[],"mappings":";;;AAAA,8CAA2D;AAG9C,QAAA,YAAY,GAAG,qCAAyB,CAAC;AAQtD,MAAa,KAAK;IAGjB,YAA6B,GAAiB;QAAjB,QAAG,GAAH,GAAG,CAAc;IAAG,CAAC;IAGlD,GAAG,CAAC,QAAgB,EAAE,IAAgB;QACrC,IAAI,CAAC,MAAM,EAAE,CAAC;QACd,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC,EAAE,oBAAY,CAAC,CAAC;QAC3E,IAAI,CAAC,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE;YAC5B,IAAI,CAAC,KAAK,GAAG,SAAS,CAAC;YAEvB,IAAI,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC;gBAC3B,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;YAC1B,CAAC;iBAAM,CAAC;gBACP,IAAI,EAAE,CAAC;YACR,CAAC;QACF,CAAC,EAAE,OAAO,CAAC,CAAC;QACZ,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;IACpB,CAAC;IAED,MAAM;QACL,IAAI,IAAI,CAAC,KAAK,KAAK,SAAS,EAAE,CAAC;YAC9B,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACzB,IAAI,CAAC,KAAK,GAAG,SAAS,CAAC;QACxB,CAAC;IACF,CAAC;CACD;AA3BD,sBA2BC"}
@@ -0,0 +1,5 @@
1
+ export { Loop, PASS_TIMED_OUT } from './loop';
2
+ export type { ConcurrencyMode, LoopHooks, LoopOptions } from './loop';
3
+ export { executorLookaheadSeconds } from './lookahead';
4
+ export { DEFAULT_LIFECYCLE_OPTIONS } from './options';
5
+ export type { LifecycleOptions } from './options';
@@ -0,0 +1,11 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.DEFAULT_LIFECYCLE_OPTIONS = exports.executorLookaheadSeconds = exports.PASS_TIMED_OUT = exports.Loop = void 0;
4
+ var loop_1 = require("./loop");
5
+ Object.defineProperty(exports, "Loop", { enumerable: true, get: function () { return loop_1.Loop; } });
6
+ Object.defineProperty(exports, "PASS_TIMED_OUT", { enumerable: true, get: function () { return loop_1.PASS_TIMED_OUT; } });
7
+ var lookahead_1 = require("./lookahead");
8
+ Object.defineProperty(exports, "executorLookaheadSeconds", { enumerable: true, get: function () { return lookahead_1.executorLookaheadSeconds; } });
9
+ var options_1 = require("./options");
10
+ Object.defineProperty(exports, "DEFAULT_LIFECYCLE_OPTIONS", { enumerable: true, get: function () { return options_1.DEFAULT_LIFECYCLE_OPTIONS; } });
11
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/core/lifecycle/index.ts"],"names":[],"mappings":";;;AAAA,+BAA8C;AAArC,4FAAA,IAAI,OAAA;AAAE,sGAAA,cAAc,OAAA;AAE7B,yCAAuD;AAA9C,qHAAA,wBAAwB,OAAA;AACjC,qCAAsD;AAA7C,oHAAA,yBAAyB,OAAA"}
@@ -0,0 +1 @@
1
+ export declare function executorLookaheadSeconds(intervalSeconds: number, jitterRatio: number): number;
@@ -0,0 +1,7 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.executorLookaheadSeconds = executorLookaheadSeconds;
4
+ function executorLookaheadSeconds(intervalSeconds, jitterRatio) {
5
+ return intervalSeconds * (1 + 2 * jitterRatio);
6
+ }
7
+ //# sourceMappingURL=lookahead.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lookahead.js","sourceRoot":"","sources":["../../../src/core/lifecycle/lookahead.ts"],"names":[],"mappings":";;AAWA,4DAEC;AAFD,SAAgB,wBAAwB,CAAC,eAAuB,EAAE,WAAmB;IACpF,OAAO,eAAe,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,WAAW,CAAC,CAAC;AAChD,CAAC"}
@@ -0,0 +1,39 @@
1
+ export declare const PASS_TIMED_OUT: unique symbol;
2
+ export type ConcurrencyMode = 'sequential' | 'concurrent';
3
+ export interface LoopOptions {
4
+ intervalMs: number;
5
+ jitterRatio: number;
6
+ timeoutMs: number;
7
+ concurrency: ConcurrencyMode;
8
+ maxConcurrent: number;
9
+ }
10
+ export interface LoopHooks {
11
+ onError: (error: unknown) => void;
12
+ onTimeout: (context: {
13
+ timeoutMs: number;
14
+ }) => void;
15
+ onSkippedTick: (context: {
16
+ inFlight: number;
17
+ limit: number;
18
+ }) => void;
19
+ }
20
+ export declare class Loop {
21
+ private readonly pass;
22
+ private readonly options;
23
+ private readonly hooks;
24
+ private readonly random;
25
+ private readonly now;
26
+ private readonly alarm;
27
+ private readonly inFlight;
28
+ private readonly inFlightControllers;
29
+ private timeline?;
30
+ private stopped;
31
+ private readonly limit;
32
+ constructor(pass: (signal: AbortSignal) => Promise<unknown>, options: LoopOptions, hooks: LoopHooks, random?: () => number, now?: () => number);
33
+ start(): void;
34
+ stop(): Promise<void>;
35
+ private tick;
36
+ private launch;
37
+ private runOnce;
38
+ private runPass;
39
+ }
@@ -0,0 +1,86 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Loop = exports.PASS_TIMED_OUT = void 0;
4
+ const alarm_1 = require("./alarm");
5
+ const timeline_1 = require("./timeline");
6
+ const TIMED_OUT = Symbol('pass timed out');
7
+ exports.PASS_TIMED_OUT = Symbol('pass aborted after timeout');
8
+ function timeoutAfter(ms) {
9
+ let timer;
10
+ const timedOut = new Promise((resolve) => {
11
+ timer = setTimeout(() => resolve(TIMED_OUT), Math.min(ms, alarm_1.MAX_DELAY_MS));
12
+ timer.unref();
13
+ });
14
+ return { timedOut, cancel: () => clearTimeout(timer) };
15
+ }
16
+ class Loop {
17
+ constructor(pass, options, hooks, random = Math.random, now = Date.now) {
18
+ this.pass = pass;
19
+ this.options = options;
20
+ this.hooks = hooks;
21
+ this.random = random;
22
+ this.now = now;
23
+ this.inFlight = new Set();
24
+ this.inFlightControllers = new Set();
25
+ this.stopped = false;
26
+ this.limit = options.concurrency === 'sequential' ? 1 : options.maxConcurrent;
27
+ this.alarm = new alarm_1.Alarm(now);
28
+ }
29
+ start() {
30
+ if (this.timeline === undefined && !this.stopped) {
31
+ this.timeline = new timeline_1.Timeline(this.options.intervalMs, this.options.jitterRatio, this.random, this.now());
32
+ this.alarm.set(this.timeline.firstTickAt, () => this.tick());
33
+ }
34
+ }
35
+ async stop() {
36
+ this.stopped = true;
37
+ this.alarm.cancel();
38
+ for (const controller of this.inFlightControllers) {
39
+ controller.abort();
40
+ }
41
+ await Promise.all(this.inFlight);
42
+ }
43
+ tick() {
44
+ if (this.timeline) {
45
+ this.alarm.set(this.timeline.nextTickAt(this.now()), () => this.tick());
46
+ this.launch();
47
+ }
48
+ }
49
+ launch() {
50
+ if (this.inFlight.size >= this.limit) {
51
+ this.hooks.onSkippedTick({ inFlight: this.inFlight.size, limit: this.limit });
52
+ }
53
+ else {
54
+ const run = this.runOnce();
55
+ this.inFlight.add(run);
56
+ void run.finally(() => this.inFlight.delete(run));
57
+ }
58
+ }
59
+ async runOnce() {
60
+ const controller = new AbortController();
61
+ this.inFlightControllers.add(controller);
62
+ const timeout = timeoutAfter(this.options.timeoutMs);
63
+ const pass = this.runPass(controller.signal);
64
+ pass.catch(() => { });
65
+ try {
66
+ if ((await Promise.race([pass, timeout.timedOut])) === TIMED_OUT) {
67
+ controller.abort(exports.PASS_TIMED_OUT);
68
+ this.hooks.onTimeout({ timeoutMs: this.options.timeoutMs });
69
+ }
70
+ }
71
+ catch (error) {
72
+ if (!controller.signal.aborted) {
73
+ this.hooks.onError(error);
74
+ }
75
+ }
76
+ finally {
77
+ this.inFlightControllers.delete(controller);
78
+ timeout.cancel();
79
+ }
80
+ }
81
+ async runPass(signal) {
82
+ return await this.pass(signal);
83
+ }
84
+ }
85
+ exports.Loop = Loop;
86
+ //# sourceMappingURL=loop.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"loop.js","sourceRoot":"","sources":["../../../src/core/lifecycle/loop.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,15 @@
1
+ import type { ConcurrencyMode } from './loop';
2
+ export interface LifecycleOptions {
3
+ materializerIntervalSeconds: number;
4
+ executorIntervalSeconds: number;
5
+ reaperIntervalSeconds: number;
6
+ retentionIntervalSeconds: number;
7
+ materializerTimeoutSeconds: number;
8
+ executorTimeoutSeconds: number;
9
+ reaperTimeoutSeconds: number;
10
+ retentionTimeoutSeconds: number;
11
+ jitterRatio: number;
12
+ concurrencyMode: ConcurrencyMode;
13
+ maxConcurrentPasses: number;
14
+ }
15
+ export declare const DEFAULT_LIFECYCLE_OPTIONS: LifecycleOptions;
@@ -0,0 +1,18 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.DEFAULT_LIFECYCLE_OPTIONS = void 0;
4
+ const constants_1 = require("@n8n/constants");
5
+ exports.DEFAULT_LIFECYCLE_OPTIONS = {
6
+ materializerIntervalSeconds: 10,
7
+ executorIntervalSeconds: 5,
8
+ reaperIntervalSeconds: 30,
9
+ retentionIntervalSeconds: constants_1.Time.hours.toSeconds,
10
+ materializerTimeoutSeconds: constants_1.Time.minutes.toSeconds,
11
+ executorTimeoutSeconds: constants_1.Time.minutes.toSeconds,
12
+ reaperTimeoutSeconds: constants_1.Time.minutes.toSeconds,
13
+ retentionTimeoutSeconds: 5 * constants_1.Time.minutes.toSeconds,
14
+ jitterRatio: 0.1,
15
+ concurrencyMode: 'sequential',
16
+ maxConcurrentPasses: 10,
17
+ };
18
+ //# sourceMappingURL=options.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"options.js","sourceRoot":"","sources":["../../../src/core/lifecycle/options.ts"],"names":[],"mappings":";;;AAAA,8CAAsC;AAwDzB,QAAA,yBAAyB,GAAqB;IAC1D,2BAA2B,EAAE,EAAE;IAC/B,uBAAuB,EAAE,CAAC;IAC1B,qBAAqB,EAAE,EAAE;IACzB,wBAAwB,EAAE,gBAAI,CAAC,KAAK,CAAC,SAAS;IAC9C,0BAA0B,EAAE,gBAAI,CAAC,OAAO,CAAC,SAAS;IAClD,sBAAsB,EAAE,gBAAI,CAAC,OAAO,CAAC,SAAS;IAC9C,oBAAoB,EAAE,gBAAI,CAAC,OAAO,CAAC,SAAS;IAC5C,uBAAuB,EAAE,CAAC,GAAG,gBAAI,CAAC,OAAO,CAAC,SAAS;IACnD,WAAW,EAAE,GAAG;IAChB,eAAe,EAAE,YAAY;IAC7B,mBAAmB,EAAE,EAAE;CACvB,CAAC"}
@@ -0,0 +1,9 @@
1
+ export declare class Timeline {
2
+ private readonly intervalMs;
3
+ private readonly jitterRatio;
4
+ private readonly random;
5
+ private slotAt;
6
+ constructor(intervalMs: number, jitterRatio: number, random: () => number, startAt: number);
7
+ get firstTickAt(): number;
8
+ nextTickAt(now: number): number;
9
+ }