@zukhruf/sqlite-queue 0.0.0-stage → 0.3.42

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 (115) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +151 -2
  3. package/dist/activity.d.ts +10 -0
  4. package/dist/activity.d.ts.map +1 -0
  5. package/dist/activity.js +93 -0
  6. package/dist/activity.js.map +1 -0
  7. package/dist/attorney.d.ts +35 -0
  8. package/dist/attorney.d.ts.map +1 -0
  9. package/dist/attorney.js +367 -0
  10. package/dist/attorney.js.map +1 -0
  11. package/dist/claim-timer.d.ts +8 -0
  12. package/dist/claim-timer.d.ts.map +1 -0
  13. package/dist/claim-timer.js +80 -0
  14. package/dist/claim-timer.js.map +1 -0
  15. package/dist/completion-data.d.ts +6 -0
  16. package/dist/completion-data.d.ts.map +1 -0
  17. package/dist/completion-data.js +36 -0
  18. package/dist/completion-data.js.map +1 -0
  19. package/dist/database-error.d.ts +6 -0
  20. package/dist/database-error.d.ts.map +1 -0
  21. package/dist/database-error.js +12 -0
  22. package/dist/database-error.js.map +1 -0
  23. package/dist/database.d.ts +7 -0
  24. package/dist/database.d.ts.map +1 -0
  25. package/dist/database.js +28 -0
  26. package/dist/database.js.map +1 -0
  27. package/dist/in-flight.d.ts +7 -0
  28. package/dist/in-flight.d.ts.map +1 -0
  29. package/dist/in-flight.js +24 -0
  30. package/dist/in-flight.js.map +1 -0
  31. package/dist/index.d.ts +54 -0
  32. package/dist/index.d.ts.map +1 -0
  33. package/dist/index.js +1069 -0
  34. package/dist/index.js.map +1 -0
  35. package/dist/job-fetcher.d.ts +16 -0
  36. package/dist/job-fetcher.d.ts.map +1 -0
  37. package/dist/job-fetcher.js +227 -0
  38. package/dist/job-fetcher.js.map +1 -0
  39. package/dist/job-queue.d.ts +27 -0
  40. package/dist/job-queue.d.ts.map +1 -0
  41. package/dist/job-queue.js +2 -0
  42. package/dist/job-queue.js.map +1 -0
  43. package/dist/job-rows.d.ts +49 -0
  44. package/dist/job-rows.d.ts.map +1 -0
  45. package/dist/job-rows.js +155 -0
  46. package/dist/job-rows.js.map +1 -0
  47. package/dist/job-settler.d.ts +24 -0
  48. package/dist/job-settler.d.ts.map +1 -0
  49. package/dist/job-settler.js +240 -0
  50. package/dist/job-settler.js.map +1 -0
  51. package/dist/jsonb.d.ts +7 -0
  52. package/dist/jsonb.d.ts.map +1 -0
  53. package/dist/jsonb.js +85 -0
  54. package/dist/jsonb.js.map +1 -0
  55. package/dist/local-groups.d.ts +16 -0
  56. package/dist/local-groups.d.ts.map +1 -0
  57. package/dist/local-groups.js +113 -0
  58. package/dist/local-groups.js.map +1 -0
  59. package/dist/naive-timestamp.d.ts +6 -0
  60. package/dist/naive-timestamp.d.ts.map +1 -0
  61. package/dist/naive-timestamp.js +21 -0
  62. package/dist/naive-timestamp.js.map +1 -0
  63. package/dist/queue-cache.d.ts +9 -0
  64. package/dist/queue-cache.d.ts.map +1 -0
  65. package/dist/queue-cache.js +27 -0
  66. package/dist/queue-cache.js.map +1 -0
  67. package/dist/queue-rows.d.ts +25 -0
  68. package/dist/queue-rows.d.ts.map +1 -0
  69. package/dist/queue-rows.js +44 -0
  70. package/dist/queue-rows.js.map +1 -0
  71. package/dist/recurrence.d.ts +11 -0
  72. package/dist/recurrence.d.ts.map +1 -0
  73. package/dist/recurrence.js +226 -0
  74. package/dist/recurrence.js.map +1 -0
  75. package/dist/rows.d.ts +10 -0
  76. package/dist/rows.d.ts.map +1 -0
  77. package/dist/rows.js +46 -0
  78. package/dist/rows.js.map +1 -0
  79. package/dist/schema.d.ts +3 -0
  80. package/dist/schema.d.ts.map +1 -0
  81. package/dist/schema.js +139 -0
  82. package/dist/schema.js.map +1 -0
  83. package/dist/sql-values.d.ts +9 -0
  84. package/dist/sql-values.d.ts.map +1 -0
  85. package/dist/sql-values.js +26 -0
  86. package/dist/sql-values.js.map +1 -0
  87. package/dist/start-after.d.ts +10 -0
  88. package/dist/start-after.d.ts.map +1 -0
  89. package/dist/start-after.js +125 -0
  90. package/dist/start-after.js.map +1 -0
  91. package/dist/supervisor.d.ts +16 -0
  92. package/dist/supervisor.d.ts.map +1 -0
  93. package/dist/supervisor.js +288 -0
  94. package/dist/supervisor.js.map +1 -0
  95. package/dist/throttle.d.ts +6 -0
  96. package/dist/throttle.d.ts.map +1 -0
  97. package/dist/throttle.js +35 -0
  98. package/dist/throttle.js.map +1 -0
  99. package/dist/timekeeper.d.ts +36 -0
  100. package/dist/timekeeper.d.ts.map +1 -0
  101. package/dist/timekeeper.js +305 -0
  102. package/dist/timekeeper.js.map +1 -0
  103. package/dist/timers.d.ts +9 -0
  104. package/dist/timers.d.ts.map +1 -0
  105. package/dist/timers.js +50 -0
  106. package/dist/timers.js.map +1 -0
  107. package/dist/uuid.d.ts +7 -0
  108. package/dist/uuid.d.ts.map +1 -0
  109. package/dist/uuid.js +36 -0
  110. package/dist/uuid.js.map +1 -0
  111. package/dist/worker.d.ts +35 -0
  112. package/dist/worker.d.ts.map +1 -0
  113. package/dist/worker.js +147 -0
  114. package/dist/worker.js.map +1 -0
  115. package/package.json +53 -4
@@ -0,0 +1,367 @@
1
+ import assert from 'node:assert';
2
+ import { systemClock, } from 'pg-boss';
3
+ // pg-boss's argument validation (node_modules/pg-boss/dist/attorney.js,
4
+ // 12.35.1). pg-boss ships no exports map, so these are module-private there:
5
+ // each assert is ported by citation and proven equal by the parity suite.
6
+ // pg-boss compares raw values (`config.x >= 1`); `Number(value) >= n` keeps
7
+ // JavaScript's relational coercion for primitives without widening types.
8
+ export class Attorney {
9
+ // attorney.js:5
10
+ static MAX_EXPIRATION_HOURS = 24;
11
+ // attorney.js:6
12
+ static MIN_POLLING_INTERVAL_MS = 500;
13
+ // attorney.js:428
14
+ static #clockMethods = [
15
+ 'now',
16
+ 'setTimeout',
17
+ 'clearTimeout',
18
+ 'setInterval',
19
+ 'clearInterval',
20
+ ];
21
+ // attorney.js:429-437
22
+ static applyClockConfig(clock) {
23
+ if (clock) {
24
+ for (const method of Attorney.#clockMethods) {
25
+ assert(typeof clock[method] === 'function', `configuration assert: clock must implement ${method}()`);
26
+ }
27
+ }
28
+ return clock || systemClock;
29
+ }
30
+ // attorney.js:608-620, in that order: each at least a second, at most a
31
+ // day, 60 s when unset except maintenance's day. pg-boss writes the
32
+ // defaults onto its config; they are returned here.
33
+ static applyOpsConfig(config) {
34
+ const day = Attorney.MAX_EXPIRATION_HOURS * 60 * 60;
35
+ return {
36
+ superviseIntervalSeconds: Attorney.#opsInterval(config, 'superviseIntervalSeconds', 60),
37
+ maintenanceIntervalSeconds: Attorney.#opsInterval(config, 'maintenanceIntervalSeconds', day),
38
+ monitorIntervalSeconds: Attorney.#opsInterval(config, 'monitorIntervalSeconds', 60),
39
+ queueCacheIntervalSeconds: Attorney.#opsInterval(config, 'queueCacheIntervalSeconds', 60),
40
+ };
41
+ }
42
+ static #opsInterval(config, key, fallback) {
43
+ const value = Attorney.#read(config, key);
44
+ assert(!(key in config) || Number(value) >= 1, `configuration assert: ${key} must be at least every second`);
45
+ const seconds = Number(value) || fallback;
46
+ assert(seconds / 60 / 60 <= Attorney.MAX_EXPIRATION_HOURS, `configuration assert: ${key} cannot exceed ${Attorney.MAX_EXPIRATION_HOURS} hours`);
47
+ return seconds;
48
+ }
49
+ // attorney.js:653-660, in that order. clockMonitorIntervalSeconds is
50
+ // validated only: it paces pg-boss's clock-skew read, and SQLite's clock is
51
+ // the database clock.
52
+ static applyScheduleConfig(config) {
53
+ Attorney.#scheduleInterval(config, 'clockMonitorIntervalSeconds', {
54
+ max: 600,
55
+ range: 'between 1 second and 10 minutes',
56
+ fallback: 600,
57
+ });
58
+ return {
59
+ cronMonitorIntervalSeconds: Attorney.#scheduleInterval(config, 'cronMonitorIntervalSeconds', { max: 45, range: 'between 1 and 45 seconds', fallback: 30 }),
60
+ cronWorkerIntervalSeconds: Attorney.#scheduleInterval(config, 'cronWorkerIntervalSeconds', { max: 45, range: 'between 1 and 45 seconds', fallback: 5 }),
61
+ };
62
+ }
63
+ static #scheduleInterval(config, key, bounds) {
64
+ const value = Attorney.#read(config, key);
65
+ assert(!(key in config) || (Number(value) >= 1 && Number(value) <= bounds.max), `configuration assert: ${key} must be ${bounds.range}`);
66
+ return Number(value) || bounds.fallback;
67
+ }
68
+ // attorney.js:445. warningSlowQuerySeconds and warningRetentionDays (446-449)
69
+ // configure warnings this queue never raises or persists.
70
+ static validateWarningConfig(config) {
71
+ assert(!('warningQueueSize' in config) ||
72
+ Number(Attorney.#read(config, 'warningQueueSize')) >= 1, 'configuration assert: warningQueueSize must be at least 1');
73
+ }
74
+ // attorney.js:585-607: a worker's poll and notify-backstop intervals in ms.
75
+ // pg-boss writes them onto the options object; they are returned here.
76
+ static #applyPollingInterval(config) {
77
+ const minimum = Attorney.MIN_POLLING_INTERVAL_MS;
78
+ const pollingSeconds = Attorney.#read(config, 'pollingIntervalSeconds');
79
+ assert(!('pollingIntervalSeconds' in config) ||
80
+ Number(pollingSeconds) >= minimum / 1000, `configuration assert: pollingIntervalSeconds must be at least every ${minimum}ms`);
81
+ const pollingInterval = 'pollingIntervalSeconds' in config ? Number(pollingSeconds) * 1000 : 2000;
82
+ const notifySeconds = Attorney.#read(config, 'notifyPollingIntervalSeconds');
83
+ assert(!('notifyPollingIntervalSeconds' in config) ||
84
+ Number(notifySeconds) >= minimum / 1000, `configuration assert: notifyPollingIntervalSeconds must be at least every ${minimum}ms`);
85
+ let notifyPollingInterval = Math.max(30000, pollingInterval);
86
+ if ('notifyPollingIntervalSeconds' in config) {
87
+ notifyPollingInterval = Number(notifySeconds) * 1000;
88
+ assert(notifyPollingInterval >= pollingInterval, 'configuration assert: notifyPollingIntervalSeconds must be at least pollingIntervalSeconds');
89
+ }
90
+ const burstWhenReadyExceeds = Attorney.#read(config, 'burstWhenReadyExceeds');
91
+ assert(!('burstWhenReadyExceeds' in config) ||
92
+ (Number.isInteger(burstWhenReadyExceeds) &&
93
+ Number(burstWhenReadyExceeds) >= 1), 'configuration assert: burstWhenReadyExceeds must be an integer >= 1');
94
+ assert(!('burstWhenBatchFull' in config) ||
95
+ typeof config.burstWhenBatchFull === 'boolean', 'configuration assert: burstWhenBatchFull must be a boolean');
96
+ return { pollingInterval, notifyPollingInterval };
97
+ }
98
+ // attorney.js:357-383. pg-boss checks a copy of the options and writes the
99
+ // poll intervals onto it; they are returned here instead.
100
+ static checkWorkArgs(name, args) {
101
+ assert(name, 'queue name is required');
102
+ let options;
103
+ let callback;
104
+ if (args.length === 1) {
105
+ callback = args[0];
106
+ options = {};
107
+ }
108
+ else if (args.length > 1) {
109
+ options = args[0] || {};
110
+ callback = args[1];
111
+ }
112
+ assert(typeof callback === 'function', 'expected callback to be a function');
113
+ assert(typeof options === 'object', 'expected config to be an object');
114
+ const config = { ...options };
115
+ const intervals = Attorney.#applyPollingInterval(config);
116
+ const read = (key) => Attorney.#read(config, key);
117
+ assert(!('batchSize' in config) ||
118
+ (Number.isInteger(read('batchSize')) && Number(read('batchSize')) >= 1), 'batchSize must be an integer > 0');
119
+ assert(!('includeMetadata' in config) ||
120
+ typeof read('includeMetadata') === 'boolean', 'includeMetadata must be a boolean');
121
+ assert(!('priority' in config) || typeof read('priority') === 'boolean', 'priority must be a boolean');
122
+ assert(!('localConcurrency' in config) ||
123
+ (Number.isInteger(read('localConcurrency')) &&
124
+ Number(read('localConcurrency')) >= 1), 'localConcurrency must be an integer >= 1');
125
+ assert(!('perJobResults' in config) ||
126
+ typeof read('perJobResults') === 'boolean', 'perJobResults must be a boolean');
127
+ assert(!('transactional' in config) ||
128
+ typeof read('transactional') === 'boolean', 'transactional must be a boolean');
129
+ Attorney.#validatePriorityRangeConfig(config);
130
+ Attorney.#validateGroupConcurrencyConfig(config);
131
+ Attorney.#validateHeartbeatRefreshConfig(config);
132
+ Attorney.#validateTransactionalConfig(config);
133
+ return intervals;
134
+ }
135
+ // pg-boss reads options as plain properties, inherited ones included.
136
+ static #read(config, key) {
137
+ return key in config ? Reflect.get(config, key) : undefined;
138
+ }
139
+ // attorney.js:320-330
140
+ static #validatePriorityRangeConfig(config) {
141
+ const minPriority = Attorney.#read(config, 'minPriority');
142
+ const maxPriority = Attorney.#read(config, 'maxPriority');
143
+ if (minPriority !== undefined) {
144
+ assert(Number.isInteger(minPriority), 'minPriority must be an integer');
145
+ }
146
+ if (maxPriority !== undefined) {
147
+ assert(Number.isInteger(maxPriority), 'maxPriority must be an integer');
148
+ }
149
+ if (minPriority !== undefined && maxPriority !== undefined) {
150
+ assert(Number(minPriority) <= Number(maxPriority), 'minPriority must be <= maxPriority');
151
+ }
152
+ }
153
+ // attorney.js:331-341
154
+ static #validateGroupConcurrencyConfig(config) {
155
+ const groupConcurrency = Attorney.#read(config, 'groupConcurrency');
156
+ const localGroupConcurrency = Attorney.#read(config, 'localGroupConcurrency');
157
+ const hasGlobal = groupConcurrency != null;
158
+ const hasLocal = localGroupConcurrency != null;
159
+ assert(!(hasGlobal && hasLocal), 'cannot specify both groupConcurrency and localGroupConcurrency - choose one');
160
+ if (hasGlobal) {
161
+ Attorney.#validateGroupConcurrencyValue(groupConcurrency, 'groupConcurrency');
162
+ }
163
+ if (hasLocal) {
164
+ Attorney.#validateGroupConcurrencyValue(localGroupConcurrency, 'localGroupConcurrency');
165
+ Attorney.#validateLocalGroupConcurrencyLimit(localGroupConcurrency, Attorney.#read(config, 'localConcurrency'));
166
+ }
167
+ }
168
+ // attorney.js:306-319
169
+ static #validateGroupConcurrencyValue(value, name) {
170
+ if (typeof value === 'number') {
171
+ assert(Number.isInteger(value) && value >= 1, `${name} must be an integer >= 1`);
172
+ return;
173
+ }
174
+ assert(typeof value === 'object' && value !== null, `${name} must be a number or an object with { default, tiers? }`);
175
+ const fallback = Attorney.#read(value, 'default');
176
+ assert(Number.isInteger(fallback) && Number(fallback) >= 1, `${name}.default must be an integer >= 1`);
177
+ const tiers = Attorney.#read(value, 'tiers');
178
+ if (tiers) {
179
+ assert(typeof tiers === 'object', `${name}.tiers must be an object`);
180
+ for (const [tier, limit] of Object.entries(tiers)) {
181
+ assert(typeof tier === 'string' && tier.length > 0, `${name} tier keys must be non-empty strings`);
182
+ assert(Number.isInteger(limit) && Number(limit) >= 1, `${name}.tiers["${tier}"] must be an integer >= 1`);
183
+ }
184
+ }
185
+ }
186
+ // attorney.js:342-356
187
+ static #validateLocalGroupConcurrencyLimit(localGroupConcurrency, localConcurrency) {
188
+ const effective = localConcurrency ?? 1;
189
+ if (typeof localGroupConcurrency === 'number') {
190
+ assert(localGroupConcurrency <= Number(effective), `localGroupConcurrency (${localGroupConcurrency}) cannot exceed localConcurrency (${effective})`);
191
+ }
192
+ else if (typeof localGroupConcurrency === 'object' &&
193
+ localGroupConcurrency !== null) {
194
+ const fallback = Attorney.#read(localGroupConcurrency, 'default');
195
+ assert(Number(fallback) <= Number(effective), `localGroupConcurrency.default (${fallback}) cannot exceed localConcurrency (${effective})`);
196
+ const tiers = Attorney.#read(localGroupConcurrency, 'tiers');
197
+ if (typeof tiers === 'object' && tiers !== null) {
198
+ for (const [tier, limit] of Object.entries(tiers)) {
199
+ assert(Number(limit) <= Number(effective), `localGroupConcurrency.tiers["${tier}"] (${limit}) cannot exceed localConcurrency (${effective})`);
200
+ }
201
+ }
202
+ }
203
+ }
204
+ // attorney.js:401-405
205
+ static #validateHeartbeatRefreshConfig(config) {
206
+ const refresh = Attorney.#read(config, 'heartbeatRefreshSeconds');
207
+ if (refresh == null) {
208
+ return;
209
+ }
210
+ assert(typeof refresh === 'number' && refresh > 0, 'heartbeatRefreshSeconds must be a number > 0');
211
+ }
212
+ // attorney.js:388-398
213
+ static #validateTransactionalConfig(config) {
214
+ const timeout = Attorney.#read(config, 'transactionTimeoutSeconds');
215
+ assert(!('transactionTimeoutSeconds' in config) ||
216
+ (Number.isInteger(timeout) && Number(timeout) >= 0), 'transactionTimeoutSeconds must be an integer >= 0');
217
+ if (!Attorney.#read(config, 'transactional')) {
218
+ assert(!('transactionTimeoutSeconds' in config), 'transactionTimeoutSeconds requires transactional');
219
+ return;
220
+ }
221
+ assert(!Attorney.#read(config, 'perJobResults'), 'transactional cannot be combined with perJobResults');
222
+ }
223
+ // attorney.js:87-89
224
+ static assertObjectName(value, name) {
225
+ assert(/^[\w.\-/]+$/.test(String(value)), `${name} can only contain alphanumeric characters, underscores, hyphens, periods, or forward slashes`);
226
+ }
227
+ // manager.js:1596-1605: ids, or jobs as fetch() and work() hand them out,
228
+ // whose retryCount fences the call to the attempt that was fetched.
229
+ static mapAttemptArg(id, funcName) {
230
+ assert(id, `${funcName}() requires an id`);
231
+ const items = Array.isArray(id) ? id : [id];
232
+ assert(items.length, `${funcName}() requires an id`);
233
+ if (items.every((item) => typeof item === 'string')) {
234
+ return { ids: items };
235
+ }
236
+ const jobs = items.filter((item) => typeof item === 'object' &&
237
+ item !== null &&
238
+ typeof item.id === 'string' &&
239
+ Number.isInteger(item.retryCount) &&
240
+ item.retryCount >= 0);
241
+ assert(jobs.length === items.length, `${funcName}() requires either ids or jobs with an id and an integer retryCount, not a mix`);
242
+ return {
243
+ ids: jobs.map((job) => job.id),
244
+ attempts: jobs.map((job) => job.retryCount),
245
+ };
246
+ }
247
+ // attorney.js:554-559
248
+ static assertKey(key) {
249
+ if (!key) {
250
+ return;
251
+ }
252
+ assert(typeof key === 'string', 'Key must be a string');
253
+ Attorney.assertObjectName(key, 'Key');
254
+ }
255
+ // attorney.js:549-553
256
+ static assertQueueName(name) {
257
+ assert(name, 'Name is required');
258
+ assert(typeof name === 'string', 'Name must be a string');
259
+ Attorney.assertObjectName(name, 'Name');
260
+ }
261
+ // attorney.js:90-101
262
+ static validateQueueArgs(config) {
263
+ const deadLetter = 'deadLetter' in config ? config.deadLetter : undefined;
264
+ assert(!('deadLetter' in config) ||
265
+ deadLetter === null ||
266
+ typeof deadLetter === 'string', 'deadLetter must be a string');
267
+ assert(!('notify' in config) || typeof config.notify === 'boolean', 'notify must be a boolean');
268
+ if (deadLetter) {
269
+ Attorney.assertObjectName(deadLetter, 'deadLetter');
270
+ }
271
+ Attorney.#validateRetryConfig(config);
272
+ Attorney.#validateExpirationConfig(config);
273
+ Attorney.#validateRetentionConfig(config);
274
+ Attorney.#validateDeletionConfig(config);
275
+ Attorney.#validateHeartbeatConfig(config);
276
+ }
277
+ // attorney.js:118-153: the positional send(name, data, options) and the
278
+ // request send({ name, data, options }), the options checked and returned
279
+ // as an own-property copy. The startAfter normalization it ends with lives
280
+ // in StartAfter.
281
+ static checkSendArgs(args) {
282
+ let name;
283
+ let data;
284
+ let options;
285
+ const [first] = args;
286
+ if (typeof first === 'string') {
287
+ name = first;
288
+ data = args[1];
289
+ assert(typeof data !== 'function', 'send() cannot accept a function as the payload. Did you intend to use work()?');
290
+ options = args[2];
291
+ }
292
+ else if (typeof first === 'object') {
293
+ assert(args.length === 1, 'send object API only accepts 1 argument');
294
+ assert(first, 'boss requires all jobs to have a name');
295
+ name = Attorney.#read(first, 'name');
296
+ data = Attorney.#read(first, 'data');
297
+ options = Attorney.#read(first, 'options');
298
+ }
299
+ const supplied = options || {};
300
+ assert(name, 'boss requires all jobs to have a queue name');
301
+ assert(typeof supplied === 'object', 'options should be an object');
302
+ const copy = { ...supplied };
303
+ assert(!('priority' in copy) || Number.isInteger(copy.priority), 'priority must be an integer');
304
+ Attorney.#validateRetryConfig(copy);
305
+ Attorney.#validateExpirationConfig(copy);
306
+ Attorney.#validateRetentionConfig(copy);
307
+ Attorney.#validateDeletionConfig(copy);
308
+ Attorney.#validateGroupConfig(copy);
309
+ Attorney.#validateHeartbeatConfig(copy);
310
+ return { name, data, options: copy };
311
+ }
312
+ // attorney.js:208-215
313
+ static #validateGroupConfig(config) {
314
+ if (!('group' in config) ||
315
+ config.group === undefined ||
316
+ config.group === null) {
317
+ return;
318
+ }
319
+ const group = config.group;
320
+ assert(typeof group === 'object', 'group must be an object');
321
+ assert('id' in group && typeof group.id === 'string' && group.id.length > 0, 'group.id must be a non-empty string');
322
+ assert(!('tier' in group) ||
323
+ (typeof group.tier === 'string' && group.tier.length > 0), 'group.tier must be a non-empty string if provided');
324
+ }
325
+ // attorney.js:570-576
326
+ static #validateRetryConfig(config) {
327
+ assert(!('retryDelay' in config) ||
328
+ (Number.isInteger(config.retryDelay) && Number(config.retryDelay) >= 0), 'retryDelay must be an integer >= 0');
329
+ assert(!('retryLimit' in config) ||
330
+ (Number.isInteger(config.retryLimit) && Number(config.retryLimit) >= 0), 'retryLimit must be an integer >= 0');
331
+ assert(!('retryBackoff' in config) ||
332
+ config.retryBackoff === true ||
333
+ config.retryBackoff === false, 'retryBackoff must be either true or false');
334
+ const retryBackoff = 'retryBackoff' in config ? config.retryBackoff : undefined;
335
+ assert(!('retryDelayMax' in config) ||
336
+ config.retryDelayMax === null ||
337
+ retryBackoff === true, 'retryDelayMax can only be set if retryBackoff is true');
338
+ assert(!('retryDelayMax' in config) ||
339
+ config.retryDelayMax === null ||
340
+ (Number.isInteger(config.retryDelayMax) &&
341
+ Number(config.retryDelayMax) >= 0), 'retryDelayMax must be an integer >= 0');
342
+ }
343
+ // attorney.js:563-569
344
+ static #validateExpirationConfig(config) {
345
+ const expireInSeconds = 'expireInSeconds' in config ? config.expireInSeconds : undefined;
346
+ assert(!('expireInSeconds' in config) || Number(expireInSeconds) >= 1, 'configuration assert: expireInSeconds must be at least every second');
347
+ assert(!expireInSeconds ||
348
+ Number(expireInSeconds) / 60 / 60 <= Attorney.MAX_EXPIRATION_HOURS, `configuration assert: expiration cannot exceed ${Attorney.MAX_EXPIRATION_HOURS} hours`);
349
+ }
350
+ // attorney.js:560-562
351
+ static #validateRetentionConfig(config) {
352
+ assert(!('retentionSeconds' in config) || Number(config.retentionSeconds) >= 1, 'configuration assert: retentionSeconds must be at least every second');
353
+ }
354
+ // attorney.js:650-652
355
+ static #validateDeletionConfig(config) {
356
+ assert(!('deleteAfterSeconds' in config) ||
357
+ Number(config.deleteAfterSeconds) >= 0, 'configuration assert: deleteAfterSeconds must be at least 0 (0 disables deletion)');
358
+ }
359
+ // attorney.js:577-579
360
+ static #validateHeartbeatConfig(config) {
361
+ assert(!('heartbeatSeconds' in config) ||
362
+ config.heartbeatSeconds === null ||
363
+ (Number.isInteger(config.heartbeatSeconds) &&
364
+ Number(config.heartbeatSeconds) >= 10), 'heartbeatSeconds must be an integer >= 10');
365
+ }
366
+ }
367
+ //# sourceMappingURL=attorney.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"attorney.js","sourceRoot":"","sources":["../src/attorney.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ import type { Clock } from 'pg-boss';
2
+ export declare class ClaimTimer {
3
+ #private;
4
+ constructor(clock: Clock, seconds: number, fn: () => Promise<void>);
5
+ stop(): void;
6
+ anchor(ms?: number): void;
7
+ }
8
+ //# sourceMappingURL=claim-timer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"claim-timer.d.ts","sourceRoot":"","sources":["../src/claim-timer.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAc,MAAM,SAAS,CAAC;AAOjD,qBAAa,UAAU;;gBAaT,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC;IAOlE,IAAI,IAAI,IAAI;IAOZ,MAAM,CAAC,EAAE,SAAW,GAAG,IAAI;CAmD5B"}
@@ -0,0 +1,80 @@
1
+ // pg-boss's ClaimTimer (node_modules/pg-boss/dist/claimTimer.js): a pass
2
+ // re-arms the next attempt through anchor() once its claims are stamped, and
3
+ // one that never reached them is re-armed from its own end, so the chain
4
+ // survives a pass that skipped or threw. It arms at construction and runs
5
+ // until stop(), once.
6
+ export class ClaimTimer {
7
+ #clock;
8
+ #ms;
9
+ #fn;
10
+ #stopped = new AbortController();
11
+ #handle;
12
+ #due = 0;
13
+ // pg-boss's #anchored is cleared as each pass starts and set by anchor():
14
+ // a pass was anchored when the last anchor() came after the last pass
15
+ // started.
16
+ #passes = 0;
17
+ #anchoredPass = 0;
18
+ constructor(clock, seconds, fn) {
19
+ this.#clock = clock;
20
+ this.#ms = seconds * 1000;
21
+ this.#fn = fn;
22
+ this.#arm();
23
+ }
24
+ stop() {
25
+ this.#stopped.abort();
26
+ this.#disarm();
27
+ }
28
+ // claimTimer.js:66-71: the next attempt an interval from now, or after
29
+ // `ms` when the pass knows when the claim it lost to comes due.
30
+ anchor(ms = this.#ms) {
31
+ if (this.#stopped.signal.aborted) {
32
+ return;
33
+ }
34
+ this.#anchoredPass = this.#passes;
35
+ this.#arm(ms);
36
+ }
37
+ #arm(ms = this.#ms) {
38
+ this.#disarm();
39
+ if (this.#stopped.signal.aborted) {
40
+ return;
41
+ }
42
+ this.#due = this.#clock.now() + ms;
43
+ this.#wait(ms);
44
+ }
45
+ // claimTimer.js:79-94: a timer that fires short of its due time waits out
46
+ // the rest.
47
+ #wait(ms) {
48
+ this.#handle = this.#clock.setTimeout(() => {
49
+ const remaining = this.#due - this.#clock.now();
50
+ if (remaining > 0) {
51
+ this.#wait(remaining);
52
+ }
53
+ else {
54
+ void this.#run();
55
+ }
56
+ }, ms);
57
+ }
58
+ #disarm() {
59
+ if (this.#handle !== undefined) {
60
+ this.#clock.clearTimeout(this.#handle);
61
+ this.#handle = undefined;
62
+ }
63
+ }
64
+ // claimTimer.js:101-119: a rejection is left to the process, as pg-boss
65
+ // leaves it: every pass reports its own failure, so only an error event
66
+ // nobody listens for gets here.
67
+ async #run() {
68
+ this.#handle = undefined;
69
+ this.#passes += 1;
70
+ try {
71
+ await this.#fn();
72
+ }
73
+ finally {
74
+ if (this.#anchoredPass !== this.#passes) {
75
+ this.#arm();
76
+ }
77
+ }
78
+ }
79
+ }
80
+ //# sourceMappingURL=claim-timer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"claim-timer.js","sourceRoot":"","sources":["../src/claim-timer.ts"],"names":[],"mappings":"AAEA,yEAAyE;AACzE,6EAA6E;AAC7E,yEAAyE;AACzE,0EAA0E;AAC1E,sBAAsB;AACtB,MAAM,OAAO,UAAU;IACZ,MAAM,CAAQ;IACd,GAAG,CAAS;IACZ,GAAG,CAAsB;IACzB,QAAQ,GAAG,IAAI,eAAe,EAAE,CAAC;IAC1C,OAAO,CAAyB;IAChC,IAAI,GAAG,CAAC,CAAC;IACT,0EAA0E;IAC1E,sEAAsE;IACtE,WAAW;IACX,OAAO,GAAG,CAAC,CAAC;IACZ,aAAa,GAAG,CAAC,CAAC;IAElB,YAAY,KAAY,EAAE,OAAe,EAAE,EAAuB;QAChE,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC;QACpB,IAAI,CAAC,GAAG,GAAG,OAAO,GAAG,IAAI,CAAC;QAC1B,IAAI,CAAC,GAAG,GAAG,EAAE,CAAC;QACd,IAAI,CAAC,IAAI,EAAE,CAAC;IACd,CAAC;IAED,IAAI;QACF,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC;QACtB,IAAI,CAAC,OAAO,EAAE,CAAC;IACjB,CAAC;IAED,uEAAuE;IACvE,gEAAgE;IAChE,MAAM,CAAC,EAAE,GAAG,IAAI,CAAC,GAAG;QAClB,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;YACjC,OAAO;QACT,CAAC;QACD,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,OAAO,CAAC;QAClC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAChB,CAAC;IAED,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC,GAAG;QAChB,IAAI,CAAC,OAAO,EAAE,CAAC;QACf,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;YACjC,OAAO;QACT,CAAC;QACD,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC;QACnC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;IACjB,CAAC;IAED,0EAA0E;IAC1E,YAAY;IACZ,KAAK,CAAC,EAAU;QACd,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,GAAG,EAAE;YACzC,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC;YAChD,IAAI,SAAS,GAAG,CAAC,EAAE,CAAC;gBAClB,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;YACxB,CAAC;iBAAM,CAAC;gBACN,KAAK,IAAI,CAAC,IAAI,EAAE,CAAC;YACnB,CAAC;QACH,CAAC,EAAE,EAAE,CAAC,CAAC;IACT,CAAC;IAED,OAAO;QACL,IAAI,IAAI,CAAC,OAAO,KAAK,SAAS,EAAE,CAAC;YAC/B,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YACvC,IAAI,CAAC,OAAO,GAAG,SAAS,CAAC;QAC3B,CAAC;IACH,CAAC;IAED,wEAAwE;IACxE,wEAAwE;IACxE,gCAAgC;IAChC,KAAK,CAAC,IAAI;QACR,IAAI,CAAC,OAAO,GAAG,SAAS,CAAC;QACzB,IAAI,CAAC,OAAO,IAAI,CAAC,CAAC;QAClB,IAAI,CAAC;YACH,MAAM,IAAI,CAAC,GAAG,EAAE,CAAC;QACnB,CAAC;gBAAS,CAAC;YACT,IAAI,IAAI,CAAC,aAAa,KAAK,IAAI,CAAC,OAAO,EAAE,CAAC;gBACxC,IAAI,CAAC,IAAI,EAAE,CAAC;YACd,CAAC;QACH,CAAC;IACH,CAAC;CACF"}
@@ -0,0 +1,6 @@
1
+ export declare class CompletionData {
2
+ #private;
3
+ static serialize(data: unknown): string | null;
4
+ static serializeAll(data: unknown[]): (string | null)[];
5
+ }
6
+ //# sourceMappingURL=completion-data.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"completion-data.d.ts","sourceRoot":"","sources":["../src/completion-data.ts"],"names":[],"mappings":"AAIA,qBAAa,cAAc;;IAGzB,MAAM,CAAC,SAAS,CAAC,IAAI,EAAE,OAAO,GAAG,MAAM,GAAG,IAAI;IAY9C,MAAM,CAAC,YAAY,CAAC,IAAI,EAAE,OAAO,EAAE,GAAG,CAAC,MAAM,GAAG,IAAI,CAAC,EAAE;CAsBxD"}
@@ -0,0 +1,36 @@
1
+ import { serializeError } from 'serialize-error';
2
+ import { Jsonb } from "./jsonb.js";
3
+ export class CompletionData {
4
+ // What complete() and fail() bind as their jsonb parameter. The drivers send
5
+ // null and undefined as SQL NULL.
6
+ static serialize(data) {
7
+ const output = CompletionData.#map(data);
8
+ return output === null || output === undefined
9
+ ? null
10
+ : Jsonb.parameter(output);
11
+ }
12
+ // A group's outputs bound as one JSON recordset (node_modules/pg-boss/dist/
13
+ // manager.js:412, 422, 447, 451; plans.js:2137, 2654, 2667): every output is
14
+ // mapped before the payload is stringified, and each row's output is then
15
+ // stored as the JSON value it is, so a mapped string stays a JSON string.
16
+ // An output the payload leaves out or holds as JSON null is SQL NULL.
17
+ static serializeAll(data) {
18
+ const outputs = data.map((item) => CompletionData.#map(item));
19
+ const texts = outputs.map((output) => JSON.stringify(output));
20
+ return texts.map((text) => text === undefined || text === 'null' ? null : Jsonb.parameter(text));
21
+ }
22
+ // pg-boss's mapCompletionDataArg (node_modules/pg-boss/dist/manager.js:
23
+ // 1614-1622): what complete() and fail() store as a job's output. Nothing,
24
+ // undefined and functions store null; an object that is not an array stores
25
+ // as it is; anything else, arrays included, as { value }. serialize-error
26
+ // turns an Error into { name, message, stack, ... } and an object with toJSON
27
+ // into what toJSON returns.
28
+ static #map(data) {
29
+ if (data === null || data === undefined || typeof data === 'function') {
30
+ return null;
31
+ }
32
+ const result = typeof data === 'object' && !Array.isArray(data) ? data : { value: data };
33
+ return serializeError(result);
34
+ }
35
+ }
36
+ //# sourceMappingURL=completion-data.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"completion-data.js","sourceRoot":"","sources":["../src/completion-data.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAEjD,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AAEnC,MAAM,OAAO,cAAc;IACzB,6EAA6E;IAC7E,kCAAkC;IAClC,MAAM,CAAC,SAAS,CAAC,IAAa;QAC5B,MAAM,MAAM,GAAG,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACzC,OAAO,MAAM,KAAK,IAAI,IAAI,MAAM,KAAK,SAAS;YAC5C,CAAC,CAAC,IAAI;YACN,CAAC,CAAC,KAAK,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;IAC9B,CAAC;IAED,4EAA4E;IAC5E,6EAA6E;IAC7E,0EAA0E;IAC1E,0EAA0E;IAC1E,sEAAsE;IACtE,MAAM,CAAC,YAAY,CAAC,IAAe;QACjC,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;QAC9D,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC;QAC9D,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CACxB,IAAI,KAAK,SAAS,IAAI,IAAI,KAAK,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,SAAS,CAAC,IAAI,CAAC,CACrE,CAAC;IACJ,CAAC;IAED,wEAAwE;IACxE,2EAA2E;IAC3E,4EAA4E;IAC5E,0EAA0E;IAC1E,8EAA8E;IAC9E,4BAA4B;IAC5B,MAAM,CAAC,IAAI,CAAC,IAAa;QACvB,IAAI,IAAI,KAAK,IAAI,IAAI,IAAI,KAAK,SAAS,IAAI,OAAO,IAAI,KAAK,UAAU,EAAE,CAAC;YACtE,OAAO,IAAI,CAAC;QACd,CAAC;QACD,MAAM,MAAM,GACV,OAAO,IAAI,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;QAC5E,OAAO,cAAc,CAAC,MAAM,CAAC,CAAC;IAChC,CAAC;CACF"}
@@ -0,0 +1,6 @@
1
+ export declare class DatabaseError extends Error {
2
+ name: string;
3
+ readonly code: string;
4
+ constructor(message: string, code: string);
5
+ }
6
+ //# sourceMappingURL=database-error.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"database-error.d.ts","sourceRoot":"","sources":["../src/database-error.ts"],"names":[],"mappings":"AAGA,qBAAa,aAAc,SAAQ,KAAK;IAC7B,IAAI,SAAW;IACxB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;gBAEV,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM;CAI1C"}
@@ -0,0 +1,12 @@
1
+ // pg-boss surfaces some driver errors as they are, and node-postgres and
2
+ // PGlite both name those `error` and carry Postgres's SQLSTATE as `code`
3
+ // (node_modules/pg-protocol/dist/messages.js:36-41).
4
+ export class DatabaseError extends Error {
5
+ name = 'error';
6
+ code;
7
+ constructor(message, code) {
8
+ super(message);
9
+ this.code = code;
10
+ }
11
+ }
12
+ //# sourceMappingURL=database-error.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"database-error.js","sourceRoot":"","sources":["../src/database-error.ts"],"names":[],"mappings":"AAAA,yEAAyE;AACzE,yEAAyE;AACzE,qDAAqD;AACrD,MAAM,OAAO,aAAc,SAAQ,KAAK;IAC7B,IAAI,GAAG,OAAO,CAAC;IACf,IAAI,CAAS;IAEtB,YAAY,OAAe,EAAE,IAAY;QACvC,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;IACnB,CAAC;CACF"}
@@ -0,0 +1,7 @@
1
+ export declare class Database {
2
+ #private;
3
+ static isUniqueViolation(error: unknown): boolean;
4
+ static isForeignKeyViolation(error: unknown): boolean;
5
+ static notNullColumn(error: unknown): string | undefined;
6
+ }
7
+ //# sourceMappingURL=database.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"database.d.ts","sourceRoot":"","sources":["../src/database.ts"],"names":[],"mappings":"AAMA,qBAAa,QAAQ;;IAEnB,MAAM,CAAC,iBAAiB,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO;IAKjD,MAAM,CAAC,qBAAqB,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO;IAMrD,MAAM,CAAC,aAAa,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,GAAG,SAAS;CAezD"}
@@ -0,0 +1,28 @@
1
+ // Extended result codes (https://www.sqlite.org/rescode.html#constraint_unique,
2
+ // #constraint_foreignkey); Postgres's are SQLSTATE 23505 and 23503.
3
+ const SQLITE_CONSTRAINT_UNIQUE = 2067;
4
+ const SQLITE_CONSTRAINT_FOREIGNKEY = 787;
5
+ const SQLITE_CONSTRAINT_NOTNULL = 1299;
6
+ export class Database {
7
+ // node:sqlite carries SQLite's extended result code as `errcode`.
8
+ static isUniqueViolation(error) {
9
+ return Database.#hasErrcode(error, SQLITE_CONSTRAINT_UNIQUE);
10
+ }
11
+ // SQLite names no constraint, so callers name pg-boss's.
12
+ static isForeignKeyViolation(error) {
13
+ return Database.#hasErrcode(error, SQLITE_CONSTRAINT_FOREIGNKEY);
14
+ }
15
+ // The column a NOT NULL violation names (`NOT NULL constraint failed:
16
+ // table.column`), or undefined for any other error.
17
+ static notNullColumn(error) {
18
+ if (!(error instanceof Error) ||
19
+ !Database.#hasErrcode(error, SQLITE_CONSTRAINT_NOTNULL)) {
20
+ return undefined;
21
+ }
22
+ return error.message.slice(error.message.lastIndexOf('.') + 1);
23
+ }
24
+ static #hasErrcode(error, errcode) {
25
+ return (error instanceof Error && 'errcode' in error && error.errcode === errcode);
26
+ }
27
+ }
28
+ //# sourceMappingURL=database.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"database.js","sourceRoot":"","sources":["../src/database.ts"],"names":[],"mappings":"AAAA,gFAAgF;AAChF,oEAAoE;AACpE,MAAM,wBAAwB,GAAG,IAAI,CAAC;AACtC,MAAM,4BAA4B,GAAG,GAAG,CAAC;AACzC,MAAM,yBAAyB,GAAG,IAAI,CAAC;AAEvC,MAAM,OAAO,QAAQ;IACnB,kEAAkE;IAClE,MAAM,CAAC,iBAAiB,CAAC,KAAc;QACrC,OAAO,QAAQ,CAAC,WAAW,CAAC,KAAK,EAAE,wBAAwB,CAAC,CAAC;IAC/D,CAAC;IAED,yDAAyD;IACzD,MAAM,CAAC,qBAAqB,CAAC,KAAc;QACzC,OAAO,QAAQ,CAAC,WAAW,CAAC,KAAK,EAAE,4BAA4B,CAAC,CAAC;IACnE,CAAC;IAED,sEAAsE;IACtE,oDAAoD;IACpD,MAAM,CAAC,aAAa,CAAC,KAAc;QACjC,IACE,CAAC,CAAC,KAAK,YAAY,KAAK,CAAC;YACzB,CAAC,QAAQ,CAAC,WAAW,CAAC,KAAK,EAAE,yBAAyB,CAAC,EACvD,CAAC;YACD,OAAO,SAAS,CAAC;QACnB,CAAC;QACD,OAAO,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,WAAW,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;IACjE,CAAC;IAED,MAAM,CAAC,WAAW,CAAC,KAAc,EAAE,OAAe;QAChD,OAAO,CACL,KAAK,YAAY,KAAK,IAAI,SAAS,IAAI,KAAK,IAAI,KAAK,CAAC,OAAO,KAAK,OAAO,CAC1E,CAAC;IACJ,CAAC;CACF"}
@@ -0,0 +1,7 @@
1
+ export declare class InFlight<T> {
2
+ #private;
3
+ constructor(operation: Promise<T>);
4
+ result(): Promise<T>;
5
+ settled(): Promise<void>;
6
+ }
7
+ //# sourceMappingURL=in-flight.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"in-flight.d.ts","sourceRoot":"","sources":["../src/in-flight.ts"],"names":[],"mappings":"AAQA,qBAAa,QAAQ,CAAC,CAAC;;gBAGT,SAAS,EAAE,OAAO,CAAC,CAAC,CAAC;IAQ3B,MAAM,IAAI,OAAO,CAAC,CAAC,CAAC;IASpB,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;CAG/B"}