@stamhoofd/queues 2.119.0 → 2.120.1
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.
- package/dist/QueueHandler.d.ts.map +1 -0
- package/dist/{src/QueueHandler.js → QueueHandler.js} +16 -24
- package/dist/QueueHandler.js.map +1 -0
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -4
- package/dist/index.js.map +1 -1
- package/package.json +7 -6
- package/dist/src/QueueHandler.d.ts.map +0 -1
- package/dist/src/QueueHandler.js.map +0 -1
- package/dist/src/QueueHandler.test.d.ts +0 -2
- package/dist/src/QueueHandler.test.d.ts.map +0 -1
- package/dist/src/QueueHandler.test.js +0 -75
- package/dist/src/QueueHandler.test.js.map +0 -1
- package/dist/tsconfig.tsbuildinfo +0 -1
- package/src/QueueHandler.test.ts +0 -88
- package/src/QueueHandler.ts +0 -317
- /package/dist/{src/QueueHandler.d.ts → QueueHandler.d.ts} +0 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"QueueHandler.d.ts","sourceRoot":"","sources":["../src/QueueHandler.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AAErD,cAAM,KAAK;IACP,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,SAAS,CAAC,GAAG,CAAC,EAAE,CAAM;IAC7B,QAAQ,SAAK;IACb,QAAQ,SAAK;IACb,YAAY,EAAE,GAAG,CAAC,WAAW,CAAC,CAAa;gBAE/B,IAAI,EAAE,MAAM,EAAE,QAAQ,SAAI;IAKtC,OAAO,CAAC,IAAI,EAAE,SAAS,CAAC,GAAG,CAAC;IAI5B,iBAAiB;IAMjB,iBAAiB,CAAC,MAAM,EAAE,WAAW;IAIrC,KAAK,CAAC,KAAK,CAAC,EAAE,KAAK;CAMtB;AAED,MAAM,MAAM,mBAAmB,GAAG;IAC9B,KAAK,EAAE,WAAW,CAAC;CACtB,CAAC;AAEF,cAAM,SAAS,CAAC,CAAC;IACb,OAAO,EAAE,CAAC,OAAO,EAAE,mBAAmB,KAAK,OAAO,CAAC,CAAC,CAAC,CAAC;IACtD,OAAO,EAAE,CAAC,KAAK,EAAE,CAAC,KAAK,IAAI,CAAC;IAC5B,MAAM,EAAE,CAAC,MAAM,CAAC,EAAE,GAAG,KAAK,IAAI,CAAC;CAClC;AAED,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,OAAO,WAE9C;AAED,wBAAgB,eAAe,CAAC,KAAK,EAAE,OAAO,WAE7C;AAED,wBAAgB,cAAc,CAAC,KAAK,EAAE,OAAO,WAE5C;AAED,qBAAa,WAAW;IACpB,SAAS,CAAC,cAAc,EAAE,OAAO,GAAG,IAAI,CAAQ;IAChD,SAAS,CAAC,SAAS,EAAE,CAAC,CAAC,KAAK,EAAE,OAAO,KAAK,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,EAAE,CAAM;IAEvE,IAAI,SAAS,YAEZ;IAED,KAAK,CAAC,KAAK,CAAC,EAAE,OAAO;IAqBrB,cAAc,CAAC,OAAO,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IAC3D,cAAc,CAAC,OAAO,CAAC,EAAE,MAAM,IAAI,GAAG,IAAI;IAgB1C,EAAE,CAAC,EAAE,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI;CAGrE;AAED;;GAEG;AACH,qBAAa,YAAY;IACrB,MAAM,CAAC,MAAM,qBAA4B;IACzC,MAAM,CAAC,iBAAiB,8BAAqC;IAE7D,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,KAAK;IAe1C;;OAEG;IACH,MAAM,CAAC,KAAK,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,KAAK;IAiBzC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,KAAK;IAM7B;;;;;OAKG;WACU,QAAQ,CAAC,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,OAAO,EAAE,mBAAmB,KAAK,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC;WA0B9G,QAAQ,CAAC,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,OAAO,EAAE,mBAAmB,KAAK,OAAO,CAAC,CAAC,CAAC,EAAE,QAAQ,SAAI,GAAG,OAAO,CAAC,CAAC,CAAC;IAuCxH,MAAM,CAAC,SAAS,CAAC,KAAK,EAAE,MAAM;IAI9B;;OAEG;IACH,MAAM,CAAC,OAAO,CAAC,KAAK,EAAE,MAAM;WAKf,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;mBAqBjB,OAAO;CAsD/B"}
|
|
@@ -1,11 +1,5 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
exports.QueueHandler = exports.AbortSignal = void 0;
|
|
4
|
-
exports.isDebouncedError = isDebouncedError;
|
|
5
|
-
exports.isCanceledError = isCanceledError;
|
|
6
|
-
exports.isAbortedError = isAbortedError;
|
|
7
|
-
const simple_errors_1 = require("@simonbackx/simple-errors");
|
|
8
|
-
const node_async_hooks_1 = require("node:async_hooks");
|
|
1
|
+
import { isSimpleError, SimpleError } from '@simonbackx/simple-errors';
|
|
2
|
+
import { AsyncLocalStorage } from 'node:async_hooks';
|
|
9
3
|
class Queue {
|
|
10
4
|
name;
|
|
11
5
|
items = [];
|
|
@@ -39,16 +33,16 @@ class QueueItem {
|
|
|
39
33
|
resolve;
|
|
40
34
|
reject;
|
|
41
35
|
}
|
|
42
|
-
function isDebouncedError(error) {
|
|
43
|
-
return
|
|
36
|
+
export function isDebouncedError(error) {
|
|
37
|
+
return isSimpleError(error) && error.code === 'queue-debounced';
|
|
44
38
|
}
|
|
45
|
-
function isCanceledError(error) {
|
|
46
|
-
return
|
|
39
|
+
export function isCanceledError(error) {
|
|
40
|
+
return isSimpleError(error) && error.code === 'queue-canceled';
|
|
47
41
|
}
|
|
48
|
-
function isAbortedError(error) {
|
|
49
|
-
return
|
|
42
|
+
export function isAbortedError(error) {
|
|
43
|
+
return isSimpleError(error) && error.code === 'queue-aborted';
|
|
50
44
|
}
|
|
51
|
-
class AbortSignal {
|
|
45
|
+
export class AbortSignal {
|
|
52
46
|
abortWithError = null;
|
|
53
47
|
listeners = [];
|
|
54
48
|
get isAborted() {
|
|
@@ -58,7 +52,7 @@ class AbortSignal {
|
|
|
58
52
|
if (this.isAborted) {
|
|
59
53
|
return;
|
|
60
54
|
}
|
|
61
|
-
this.abortWithError = error ?? new
|
|
55
|
+
this.abortWithError = error ?? new SimpleError({
|
|
62
56
|
code: 'queue-aborted',
|
|
63
57
|
message: 'Queue was aborted',
|
|
64
58
|
statusCode: 500,
|
|
@@ -91,20 +85,19 @@ class AbortSignal {
|
|
|
91
85
|
this.listeners.push(listener);
|
|
92
86
|
}
|
|
93
87
|
}
|
|
94
|
-
exports.AbortSignal = AbortSignal;
|
|
95
88
|
/**
|
|
96
89
|
* Force the usage of a queue to prevent concurrency issues
|
|
97
90
|
*/
|
|
98
|
-
class QueueHandler {
|
|
91
|
+
export class QueueHandler {
|
|
99
92
|
static queues = new Map();
|
|
100
|
-
static asyncLocalStorage = new
|
|
93
|
+
static asyncLocalStorage = new AsyncLocalStorage();
|
|
101
94
|
static cancel(queue, error) {
|
|
102
95
|
const q = this.queues.get(queue);
|
|
103
96
|
if (q) {
|
|
104
97
|
// This doesn't interfere any running items
|
|
105
98
|
for (const item of q.items) {
|
|
106
99
|
item.handler = () => {
|
|
107
|
-
return Promise.reject(error ?? new
|
|
100
|
+
return Promise.reject(error ?? new SimpleError({
|
|
108
101
|
code: 'queue-canceled',
|
|
109
102
|
message: 'Queue ' + queue + ' was canceled',
|
|
110
103
|
}));
|
|
@@ -121,7 +114,7 @@ class QueueHandler {
|
|
|
121
114
|
// This doesn't interfere any running items
|
|
122
115
|
for (const item of q.items) {
|
|
123
116
|
item.handler = () => {
|
|
124
|
-
return Promise.reject(error ?? new
|
|
117
|
+
return Promise.reject(error ?? new SimpleError({
|
|
125
118
|
code: 'queue-canceled',
|
|
126
119
|
message: 'Queue ' + queue + ' was canceled',
|
|
127
120
|
}));
|
|
@@ -143,7 +136,7 @@ class QueueHandler {
|
|
|
143
136
|
*/
|
|
144
137
|
static async debounce(queue, handler, timeout) {
|
|
145
138
|
// Stop any running items that were not yet executed
|
|
146
|
-
this.abort(queue, new
|
|
139
|
+
this.abort(queue, new SimpleError({
|
|
147
140
|
code: 'queue-debounced',
|
|
148
141
|
message: 'Debounced',
|
|
149
142
|
statusCode: 500,
|
|
@@ -172,7 +165,7 @@ class QueueHandler {
|
|
|
172
165
|
}
|
|
173
166
|
// We need to save the current AsyncLocalStorage context
|
|
174
167
|
// otherwise we could run items on the queue with the wrong context
|
|
175
|
-
const snapshot =
|
|
168
|
+
const snapshot = AsyncLocalStorage.snapshot();
|
|
176
169
|
const item = new QueueItem();
|
|
177
170
|
item.handler = options => snapshot(async () => {
|
|
178
171
|
const currentQueues = this.asyncLocalStorage.getStore() ?? [];
|
|
@@ -273,5 +266,4 @@ class QueueHandler {
|
|
|
273
266
|
await this.runNext(queue);
|
|
274
267
|
}
|
|
275
268
|
}
|
|
276
|
-
exports.QueueHandler = QueueHandler;
|
|
277
269
|
//# sourceMappingURL=QueueHandler.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"QueueHandler.js","sourceRoot":"","sources":["../src/QueueHandler.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export * from
|
|
1
|
+
export * from './QueueHandler.js';
|
|
2
2
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":"AAAA,cAAc,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,mBAAmB,CAAC"}
|
package/dist/index.js
CHANGED
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,mBAAmB,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,20 +1,21 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@stamhoofd/queues",
|
|
3
|
-
"version": "2.
|
|
4
|
-
"
|
|
3
|
+
"version": "2.120.1",
|
|
4
|
+
"type": "module",
|
|
5
5
|
"types": "./dist/index.d.ts",
|
|
6
|
+
"main": "./dist/index.js",
|
|
6
7
|
"license": "UNLICENCED",
|
|
7
8
|
"sideEffects": false,
|
|
8
9
|
"files": [
|
|
9
|
-
"src",
|
|
10
10
|
"dist"
|
|
11
11
|
],
|
|
12
12
|
"scripts": {
|
|
13
|
-
"build": "tsc
|
|
14
|
-
"test": "
|
|
13
|
+
"build": "tsc --build tsconfig.build.json",
|
|
14
|
+
"test": "vitest",
|
|
15
|
+
"lint": "eslint"
|
|
15
16
|
},
|
|
16
17
|
"publishConfig": {
|
|
17
18
|
"access": "public"
|
|
18
19
|
},
|
|
19
|
-
"gitHead": "
|
|
20
|
+
"gitHead": "00f65fc28d68feb86c30789784181a8954d638d7"
|
|
20
21
|
}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"QueueHandler.d.ts","sourceRoot":"","sources":["../../src/QueueHandler.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AAErD,cAAM,KAAK;IACP,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,SAAS,CAAC,GAAG,CAAC,EAAE,CAAM;IAC7B,QAAQ,SAAK;IACb,QAAQ,SAAK;IACb,YAAY,EAAE,GAAG,CAAC,WAAW,CAAC,CAAa;gBAE/B,IAAI,EAAE,MAAM,EAAE,QAAQ,SAAI;IAKtC,OAAO,CAAC,IAAI,EAAE,SAAS,CAAC,GAAG,CAAC;IAI5B,iBAAiB;IAMjB,iBAAiB,CAAC,MAAM,EAAE,WAAW;IAIrC,KAAK,CAAC,KAAK,CAAC,EAAE,KAAK;CAMtB;AAED,MAAM,MAAM,mBAAmB,GAAG;IAC9B,KAAK,EAAE,WAAW,CAAC;CACtB,CAAC;AAEF,cAAM,SAAS,CAAC,CAAC;IACb,OAAO,EAAE,CAAC,OAAO,EAAE,mBAAmB,KAAK,OAAO,CAAC,CAAC,CAAC,CAAC;IACtD,OAAO,EAAE,CAAC,KAAK,EAAE,CAAC,KAAK,IAAI,CAAC;IAC5B,MAAM,EAAE,CAAC,MAAM,CAAC,EAAE,GAAG,KAAK,IAAI,CAAC;CAClC;AAED,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,OAAO,WAE9C;AAED,wBAAgB,eAAe,CAAC,KAAK,EAAE,OAAO,WAE7C;AAED,wBAAgB,cAAc,CAAC,KAAK,EAAE,OAAO,WAE5C;AAED,qBAAa,WAAW;IACpB,SAAS,CAAC,cAAc,EAAE,OAAO,GAAG,IAAI,CAAQ;IAChD,SAAS,CAAC,SAAS,EAAE,CAAC,CAAC,KAAK,EAAE,OAAO,KAAK,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,EAAE,CAAM;IAEvE,IAAI,SAAS,YAEZ;IAED,KAAK,CAAC,KAAK,CAAC,EAAE,OAAO;IAqBrB,cAAc,CAAC,OAAO,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IAC3D,cAAc,CAAC,OAAO,CAAC,EAAE,MAAM,IAAI,GAAG,IAAI;IAgB1C,EAAE,CAAC,EAAE,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI;CAGrE;AAED;;GAEG;AACH,qBAAa,YAAY;IACrB,MAAM,CAAC,MAAM,qBAA4B;IACzC,MAAM,CAAC,iBAAiB,8BAAqC;IAE7D,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,KAAK;IAe1C;;OAEG;IACH,MAAM,CAAC,KAAK,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,KAAK;IAiBzC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,KAAK;IAM7B;;;;;OAKG;WACU,QAAQ,CAAC,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,OAAO,EAAE,mBAAmB,KAAK,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC;WA0B9G,QAAQ,CAAC,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,OAAO,EAAE,mBAAmB,KAAK,OAAO,CAAC,CAAC,CAAC,EAAE,QAAQ,SAAI,GAAG,OAAO,CAAC,CAAC,CAAC;IAuCxH,MAAM,CAAC,SAAS,CAAC,KAAK,EAAE,MAAM;IAI9B;;OAEG;IACH,MAAM,CAAC,OAAO,CAAC,KAAK,EAAE,MAAM;WAKf,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;mBAqBjB,OAAO;CAsD/B"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"QueueHandler.js","sourceRoot":"","sources":["../../src/QueueHandler.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"QueueHandler.test.d.ts","sourceRoot":"","sources":["../../src/QueueHandler.test.ts"],"names":[],"mappings":""}
|
|
@@ -1,75 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
const node_async_hooks_1 = require("node:async_hooks");
|
|
4
|
-
const QueueHandler_1 = require("./QueueHandler");
|
|
5
|
-
describe('QueueHandler', () => {
|
|
6
|
-
it('Guards against deadlocks', async () => {
|
|
7
|
-
const result = await QueueHandler_1.QueueHandler.schedule('test', async () => {
|
|
8
|
-
return QueueHandler_1.QueueHandler.schedule('test', async () => {
|
|
9
|
-
return 'test';
|
|
10
|
-
});
|
|
11
|
-
});
|
|
12
|
-
expect(result).toBe('test');
|
|
13
|
-
});
|
|
14
|
-
it('Guards against deep deadlocks', async () => {
|
|
15
|
-
const result = await QueueHandler_1.QueueHandler.schedule('test', async () => {
|
|
16
|
-
return QueueHandler_1.QueueHandler.schedule('other', async () => {
|
|
17
|
-
return QueueHandler_1.QueueHandler.schedule('test', async () => {
|
|
18
|
-
return QueueHandler_1.QueueHandler.schedule('other', async () => {
|
|
19
|
-
return QueueHandler_1.QueueHandler.schedule('test', async () => {
|
|
20
|
-
return 'test';
|
|
21
|
-
});
|
|
22
|
-
});
|
|
23
|
-
});
|
|
24
|
-
});
|
|
25
|
-
});
|
|
26
|
-
expect(result).toBe('test');
|
|
27
|
-
});
|
|
28
|
-
it('Inherits the right AsyncLocalStorage context', async () => {
|
|
29
|
-
const context = new node_async_hooks_1.AsyncLocalStorage();
|
|
30
|
-
const ranContexts = [];
|
|
31
|
-
const promises = [];
|
|
32
|
-
// Do some quick scheduling
|
|
33
|
-
for (let i = 0; i < 20; i++) {
|
|
34
|
-
promises.push(context.run(i.toString(), async () => {
|
|
35
|
-
return await QueueHandler_1.QueueHandler.schedule('test', async () => {
|
|
36
|
-
await new Promise((resolve) => {
|
|
37
|
-
setTimeout(() => {
|
|
38
|
-
resolve();
|
|
39
|
-
}, 100);
|
|
40
|
-
});
|
|
41
|
-
if (i.toString() === context.getStore()) {
|
|
42
|
-
ranContexts.push(context.getStore() ?? '');
|
|
43
|
-
}
|
|
44
|
-
});
|
|
45
|
-
}));
|
|
46
|
-
}
|
|
47
|
-
await Promise.allSettled(promises);
|
|
48
|
-
expect(ranContexts).toHaveLength(20);
|
|
49
|
-
expect(ranContexts.sort()).toEqual(['0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '10', '11', '12', '13', '14', '15', '16', '17', '18', '19'].sort());
|
|
50
|
-
});
|
|
51
|
-
it('Inherits the right AsyncLocalStorage context with parallel execution', async () => {
|
|
52
|
-
const context = new node_async_hooks_1.AsyncLocalStorage();
|
|
53
|
-
const ranContexts = [];
|
|
54
|
-
const promises = [];
|
|
55
|
-
// Do some quick scheduling
|
|
56
|
-
for (let i = 0; i < 50; i++) {
|
|
57
|
-
promises.push(context.run(i.toString(), async () => {
|
|
58
|
-
await QueueHandler_1.QueueHandler.schedule('test', async () => {
|
|
59
|
-
await new Promise((resolve) => {
|
|
60
|
-
setTimeout(() => {
|
|
61
|
-
resolve();
|
|
62
|
-
}, 100);
|
|
63
|
-
});
|
|
64
|
-
if (i.toString() === context.getStore()) {
|
|
65
|
-
ranContexts.push(context.getStore() ?? '');
|
|
66
|
-
}
|
|
67
|
-
}, 5);
|
|
68
|
-
}));
|
|
69
|
-
}
|
|
70
|
-
await Promise.allSettled(promises);
|
|
71
|
-
expect(ranContexts).toHaveLength(50);
|
|
72
|
-
expect(ranContexts.sort()).toEqual(['0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '10', '11', '12', '13', '14', '15', '16', '17', '18', '19', '20', '21', '22', '23', '24', '25', '26', '27', '28', '29', '30', '31', '32', '33', '34', '35', '36', '37', '38', '39', '40', '41', '42', '43', '44', '45', '46', '47', '48', '49'].sort());
|
|
73
|
-
});
|
|
74
|
-
});
|
|
75
|
-
//# sourceMappingURL=QueueHandler.test.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"QueueHandler.test.js","sourceRoot":"","sources":["../../src/QueueHandler.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"root":["../src/queuehandler.test.ts","../src/queuehandler.ts","../index.ts","../../../../environment.d.ts","../../../../jest-extended.d.ts","../../../stamhoofd.d.ts"],"version":"5.8.3"}
|
package/src/QueueHandler.test.ts
DELETED
|
@@ -1,88 +0,0 @@
|
|
|
1
|
-
import { AsyncLocalStorage } from 'node:async_hooks';
|
|
2
|
-
import { QueueHandler } from './QueueHandler';
|
|
3
|
-
|
|
4
|
-
describe('QueueHandler', () => {
|
|
5
|
-
it('Guards against deadlocks', async () => {
|
|
6
|
-
const result = await QueueHandler.schedule('test', async () => {
|
|
7
|
-
return QueueHandler.schedule('test', async () => {
|
|
8
|
-
return 'test';
|
|
9
|
-
});
|
|
10
|
-
});
|
|
11
|
-
|
|
12
|
-
expect(result).toBe('test');
|
|
13
|
-
});
|
|
14
|
-
|
|
15
|
-
it('Guards against deep deadlocks', async () => {
|
|
16
|
-
const result = await QueueHandler.schedule('test', async () => {
|
|
17
|
-
return QueueHandler.schedule('other', async () => {
|
|
18
|
-
return QueueHandler.schedule('test', async () => {
|
|
19
|
-
return QueueHandler.schedule('other', async () => {
|
|
20
|
-
return QueueHandler.schedule('test', async () => {
|
|
21
|
-
return 'test';
|
|
22
|
-
});
|
|
23
|
-
});
|
|
24
|
-
});
|
|
25
|
-
});
|
|
26
|
-
});
|
|
27
|
-
|
|
28
|
-
expect(result).toBe('test');
|
|
29
|
-
});
|
|
30
|
-
|
|
31
|
-
it('Inherits the right AsyncLocalStorage context', async () => {
|
|
32
|
-
const context = new AsyncLocalStorage<string>();
|
|
33
|
-
|
|
34
|
-
const ranContexts: string[] = [];
|
|
35
|
-
const promises: Promise<void>[] = [];
|
|
36
|
-
|
|
37
|
-
// Do some quick scheduling
|
|
38
|
-
for (let i = 0; i < 20; i++) {
|
|
39
|
-
promises.push(context.run(i.toString(), async () => {
|
|
40
|
-
return await QueueHandler.schedule('test', async () => {
|
|
41
|
-
await new Promise<void>((resolve) => {
|
|
42
|
-
setTimeout(() => {
|
|
43
|
-
resolve();
|
|
44
|
-
}, 100);
|
|
45
|
-
});
|
|
46
|
-
|
|
47
|
-
if (i.toString() === context.getStore()) {
|
|
48
|
-
ranContexts.push(context.getStore() ?? '');
|
|
49
|
-
}
|
|
50
|
-
});
|
|
51
|
-
}));
|
|
52
|
-
}
|
|
53
|
-
|
|
54
|
-
await Promise.allSettled(promises);
|
|
55
|
-
|
|
56
|
-
expect(ranContexts).toHaveLength(20);
|
|
57
|
-
expect(ranContexts.sort()).toEqual(['0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '10', '11', '12', '13', '14', '15', '16', '17', '18', '19'].sort());
|
|
58
|
-
});
|
|
59
|
-
|
|
60
|
-
it('Inherits the right AsyncLocalStorage context with parallel execution', async () => {
|
|
61
|
-
const context = new AsyncLocalStorage<string>();
|
|
62
|
-
|
|
63
|
-
const ranContexts: string[] = [];
|
|
64
|
-
const promises: Promise<void>[] = [];
|
|
65
|
-
|
|
66
|
-
// Do some quick scheduling
|
|
67
|
-
for (let i = 0; i < 50; i++) {
|
|
68
|
-
promises.push(context.run(i.toString(), async () => {
|
|
69
|
-
await QueueHandler.schedule('test', async () => {
|
|
70
|
-
await new Promise<void>((resolve) => {
|
|
71
|
-
setTimeout(() => {
|
|
72
|
-
resolve();
|
|
73
|
-
}, 100);
|
|
74
|
-
});
|
|
75
|
-
|
|
76
|
-
if (i.toString() === context.getStore()) {
|
|
77
|
-
ranContexts.push(context.getStore() ?? '');
|
|
78
|
-
}
|
|
79
|
-
}, 5);
|
|
80
|
-
}));
|
|
81
|
-
}
|
|
82
|
-
|
|
83
|
-
await Promise.allSettled(promises);
|
|
84
|
-
|
|
85
|
-
expect(ranContexts).toHaveLength(50);
|
|
86
|
-
expect(ranContexts.sort()).toEqual(['0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '10', '11', '12', '13', '14', '15', '16', '17', '18', '19', '20', '21', '22', '23', '24', '25', '26', '27', '28', '29', '30', '31', '32', '33', '34', '35', '36', '37', '38', '39', '40', '41', '42', '43', '44', '45', '46', '47', '48', '49'].sort());
|
|
87
|
-
});
|
|
88
|
-
});
|
package/src/QueueHandler.ts
DELETED
|
@@ -1,317 +0,0 @@
|
|
|
1
|
-
import { isSimpleError, SimpleError } from '@simonbackx/simple-errors';
|
|
2
|
-
import { AsyncLocalStorage } from 'node:async_hooks';
|
|
3
|
-
|
|
4
|
-
class Queue {
|
|
5
|
-
name: string;
|
|
6
|
-
items: QueueItem<any>[] = [];
|
|
7
|
-
parallel = 1;
|
|
8
|
-
runCount = 0;
|
|
9
|
-
abortSignals: Set<AbortSignal> = new Set();
|
|
10
|
-
|
|
11
|
-
constructor(name: string, parallel = 1) {
|
|
12
|
-
this.name = name;
|
|
13
|
-
this.parallel = parallel;
|
|
14
|
-
}
|
|
15
|
-
|
|
16
|
-
addItem(item: QueueItem<any>) {
|
|
17
|
-
this.items.push(item);
|
|
18
|
-
}
|
|
19
|
-
|
|
20
|
-
createAbortSignal() {
|
|
21
|
-
const signal = new AbortSignal();
|
|
22
|
-
this.abortSignals.add(signal);
|
|
23
|
-
return signal;
|
|
24
|
-
}
|
|
25
|
-
|
|
26
|
-
removeAbortSignal(signal: AbortSignal) {
|
|
27
|
-
this.abortSignals.delete(signal);
|
|
28
|
-
}
|
|
29
|
-
|
|
30
|
-
abort(error?: Error) {
|
|
31
|
-
for (const signal of this.abortSignals) {
|
|
32
|
-
signal.abort(error);
|
|
33
|
-
}
|
|
34
|
-
this.abortSignals.clear(); // Avoid swapping error midway the abort
|
|
35
|
-
}
|
|
36
|
-
}
|
|
37
|
-
|
|
38
|
-
export type QueueHandlerOptions = {
|
|
39
|
-
abort: AbortSignal;
|
|
40
|
-
};
|
|
41
|
-
|
|
42
|
-
class QueueItem<T> {
|
|
43
|
-
handler: (options: QueueHandlerOptions) => Promise<T>;
|
|
44
|
-
resolve: (value: T) => void;
|
|
45
|
-
reject: (reason?: any) => void;
|
|
46
|
-
}
|
|
47
|
-
|
|
48
|
-
export function isDebouncedError(error: unknown) {
|
|
49
|
-
return isSimpleError(error) && error.code === 'queue-debounced';
|
|
50
|
-
}
|
|
51
|
-
|
|
52
|
-
export function isCanceledError(error: unknown) {
|
|
53
|
-
return isSimpleError(error) && error.code === 'queue-canceled';
|
|
54
|
-
}
|
|
55
|
-
|
|
56
|
-
export function isAbortedError(error: unknown) {
|
|
57
|
-
return isSimpleError(error) && error.code === 'queue-aborted';
|
|
58
|
-
}
|
|
59
|
-
|
|
60
|
-
export class AbortSignal {
|
|
61
|
-
protected abortWithError: unknown | null = null;
|
|
62
|
-
protected listeners: ((error: unknown) => Promise<void> | void)[] = [];
|
|
63
|
-
|
|
64
|
-
get isAborted() {
|
|
65
|
-
return this.abortWithError !== null;
|
|
66
|
-
}
|
|
67
|
-
|
|
68
|
-
abort(error?: unknown) {
|
|
69
|
-
if (this.isAborted) {
|
|
70
|
-
return;
|
|
71
|
-
}
|
|
72
|
-
this.abortWithError = error ?? new SimpleError({
|
|
73
|
-
code: 'queue-aborted',
|
|
74
|
-
message: 'Queue was aborted',
|
|
75
|
-
statusCode: 500,
|
|
76
|
-
});
|
|
77
|
-
|
|
78
|
-
for (const listener of this.listeners) {
|
|
79
|
-
const promise = listener(this.abortWithError);
|
|
80
|
-
if (promise instanceof Promise) {
|
|
81
|
-
promise.catch((e) => {
|
|
82
|
-
console.error('Error in abort listener', e);
|
|
83
|
-
});
|
|
84
|
-
}
|
|
85
|
-
}
|
|
86
|
-
this.listeners = [];
|
|
87
|
-
}
|
|
88
|
-
|
|
89
|
-
throwIfAborted(cleanup: () => Promise<void>): Promise<void>;
|
|
90
|
-
throwIfAborted(cleanup?: () => void): void;
|
|
91
|
-
throwIfAborted(cleanup?: () => Promise<void> | void): Promise<void> | void {
|
|
92
|
-
if (this.isAborted) {
|
|
93
|
-
if (cleanup) {
|
|
94
|
-
const promise = cleanup();
|
|
95
|
-
if (promise instanceof Promise) {
|
|
96
|
-
return promise.then(() => {
|
|
97
|
-
throw this.abortWithError;
|
|
98
|
-
});
|
|
99
|
-
}
|
|
100
|
-
}
|
|
101
|
-
throw this.abortWithError;
|
|
102
|
-
}
|
|
103
|
-
}
|
|
104
|
-
|
|
105
|
-
// Add event listeners
|
|
106
|
-
on(on: 'abort', listener: (error: unknown) => Promise<void> | void) {
|
|
107
|
-
this.listeners.push(listener);
|
|
108
|
-
}
|
|
109
|
-
}
|
|
110
|
-
|
|
111
|
-
/**
|
|
112
|
-
* Force the usage of a queue to prevent concurrency issues
|
|
113
|
-
*/
|
|
114
|
-
export class QueueHandler {
|
|
115
|
-
static queues = new Map<string, Queue>();
|
|
116
|
-
static asyncLocalStorage = new AsyncLocalStorage<string[]>();
|
|
117
|
-
|
|
118
|
-
static cancel(queue: string, error?: Error) {
|
|
119
|
-
const q = this.queues.get(queue);
|
|
120
|
-
if (q) {
|
|
121
|
-
// This doesn't interfere any running items
|
|
122
|
-
for (const item of q.items) {
|
|
123
|
-
item.handler = () => {
|
|
124
|
-
return Promise.reject(error ?? new SimpleError({
|
|
125
|
-
code: 'queue-canceled',
|
|
126
|
-
message: 'Queue ' + queue + ' was canceled',
|
|
127
|
-
}));
|
|
128
|
-
};
|
|
129
|
-
}
|
|
130
|
-
}
|
|
131
|
-
}
|
|
132
|
-
|
|
133
|
-
/**
|
|
134
|
-
* Abort any running queue items. Same as 'cancel' but will also reject any running items if they support the 'abort' method (otherwise they will just resolve as normal)
|
|
135
|
-
*/
|
|
136
|
-
static abort(queue: string, error?: Error) {
|
|
137
|
-
const q = this.queues.get(queue);
|
|
138
|
-
if (q) {
|
|
139
|
-
// This doesn't interfere any running items
|
|
140
|
-
for (const item of q.items) {
|
|
141
|
-
item.handler = () => {
|
|
142
|
-
return Promise.reject(error ?? new SimpleError({
|
|
143
|
-
code: 'queue-canceled',
|
|
144
|
-
message: 'Queue ' + queue + ' was canceled',
|
|
145
|
-
}));
|
|
146
|
-
};
|
|
147
|
-
}
|
|
148
|
-
|
|
149
|
-
q.abort(error);
|
|
150
|
-
}
|
|
151
|
-
}
|
|
152
|
-
|
|
153
|
-
static abortAll(error?: Error) {
|
|
154
|
-
for (const queueName of this.queues.keys()) {
|
|
155
|
-
this.abort(queueName, error);
|
|
156
|
-
}
|
|
157
|
-
}
|
|
158
|
-
|
|
159
|
-
/** $
|
|
160
|
-
* Waits {timeout} ms before executing the handler, if another call is made to the same queue, the timeout is reset
|
|
161
|
-
* and the other users will receive an error.
|
|
162
|
-
*
|
|
163
|
-
* Note: this will throw if the handler was debounced and not yet executed
|
|
164
|
-
*/
|
|
165
|
-
static async debounce<T>(queue: string, handler: (options: QueueHandlerOptions) => Promise<T>, timeout: number): Promise<T> {
|
|
166
|
-
// Stop any running items that were not yet executed
|
|
167
|
-
this.abort(queue, new SimpleError({
|
|
168
|
-
code: 'queue-debounced',
|
|
169
|
-
message: 'Debounced',
|
|
170
|
-
statusCode: 500,
|
|
171
|
-
}));
|
|
172
|
-
|
|
173
|
-
// Schedule timeout (will throw if cancelled)
|
|
174
|
-
await this.schedule(queue, ({ abort }) => {
|
|
175
|
-
return new Promise<void>((resolve, reject) => {
|
|
176
|
-
const timeoutId = setTimeout(() => {
|
|
177
|
-
resolve();
|
|
178
|
-
}, timeout);
|
|
179
|
-
|
|
180
|
-
abort.on('abort', (error) => {
|
|
181
|
-
clearTimeout(timeoutId);
|
|
182
|
-
reject(error);
|
|
183
|
-
});
|
|
184
|
-
});
|
|
185
|
-
});
|
|
186
|
-
|
|
187
|
-
// Run the handler
|
|
188
|
-
return await this.schedule(queue, handler);
|
|
189
|
-
}
|
|
190
|
-
|
|
191
|
-
static async schedule<T>(queue: string, handler: (options: QueueHandlerOptions) => Promise<T>, parallel = 1): Promise<T> {
|
|
192
|
-
// console.log("[QUEUE] Schedule "+queue)
|
|
193
|
-
|
|
194
|
-
const currentQueues = this.asyncLocalStorage.getStore();
|
|
195
|
-
if (currentQueues !== undefined && currentQueues.includes(queue)) {
|
|
196
|
-
// Recursive usage of queues detected. Ignored running in queue
|
|
197
|
-
return await handler({ abort: new AbortSignal() });
|
|
198
|
-
}
|
|
199
|
-
|
|
200
|
-
// We need to save the current AsyncLocalStorage context
|
|
201
|
-
// otherwise we could run items on the queue with the wrong context
|
|
202
|
-
const snapshot = AsyncLocalStorage.snapshot();
|
|
203
|
-
|
|
204
|
-
const item = new QueueItem<T>();
|
|
205
|
-
item.handler = options => snapshot(async () => {
|
|
206
|
-
const currentQueues = this.asyncLocalStorage.getStore() ?? [];
|
|
207
|
-
return await this.asyncLocalStorage.run([...currentQueues, queue], async () => {
|
|
208
|
-
return await handler(options);
|
|
209
|
-
});
|
|
210
|
-
});
|
|
211
|
-
|
|
212
|
-
const promise = new Promise<T>((resolve, reject) => {
|
|
213
|
-
item.resolve = resolve;
|
|
214
|
-
item.reject = reject;
|
|
215
|
-
|
|
216
|
-
// We only add it here because resolve and reject is required
|
|
217
|
-
const q = this.queues.get(queue) ?? new Queue(queue, parallel);
|
|
218
|
-
q.addItem(item);
|
|
219
|
-
this.queues.set(queue, q);
|
|
220
|
-
|
|
221
|
-
// Run the next item if not already running
|
|
222
|
-
this.runNext(queue).catch((e) => {
|
|
223
|
-
console.error('[QUEUE] Fatal error in queue logic', e);
|
|
224
|
-
});
|
|
225
|
-
});
|
|
226
|
-
|
|
227
|
-
return promise;
|
|
228
|
-
}
|
|
229
|
-
|
|
230
|
-
static isRunning(queue: string) {
|
|
231
|
-
return this.getSize(queue) > 0;
|
|
232
|
-
}
|
|
233
|
-
|
|
234
|
-
/**
|
|
235
|
-
* Returns amount of running jobs + pending jobs for a given queue
|
|
236
|
-
*/
|
|
237
|
-
static getSize(queue: string) {
|
|
238
|
-
const q = this.queues.get(queue);
|
|
239
|
-
return q ? (q.runCount + q.items.length) : 0;
|
|
240
|
-
}
|
|
241
|
-
|
|
242
|
-
static async awaitAll(): Promise<void> {
|
|
243
|
-
for (const queue of this.queues.keys()) {
|
|
244
|
-
if (this.getSize(queue) > 0) {
|
|
245
|
-
let didResolve = false;
|
|
246
|
-
let timeout: NodeJS.Timeout | undefined;
|
|
247
|
-
if (STAMHOOFD.environment !== 'production') {
|
|
248
|
-
timeout = setTimeout(() => {
|
|
249
|
-
if (!didResolve) {
|
|
250
|
-
console.warn('[QUEUE] Still waiting for queue', queue, 'to finish. This might indicate a deadlock or a long-running task.');
|
|
251
|
-
}
|
|
252
|
-
}, 2000);
|
|
253
|
-
}
|
|
254
|
-
await this.schedule(queue, async () => {});
|
|
255
|
-
didResolve = true;
|
|
256
|
-
if (timeout) {
|
|
257
|
-
clearTimeout(timeout);
|
|
258
|
-
}
|
|
259
|
-
}
|
|
260
|
-
}
|
|
261
|
-
}
|
|
262
|
-
|
|
263
|
-
private static async runNext(queue: string) {
|
|
264
|
-
const q = this.queues.get(queue);
|
|
265
|
-
if (!q) {
|
|
266
|
-
// console.warn("[QUEUE] Queue not found (no items left)", queue)
|
|
267
|
-
return;
|
|
268
|
-
}
|
|
269
|
-
|
|
270
|
-
if (q.runCount >= q.parallel) {
|
|
271
|
-
// console.log("[QUEUE] Queue", queue, 'reached maximum of', q.parallel)
|
|
272
|
-
return;
|
|
273
|
-
}
|
|
274
|
-
|
|
275
|
-
const next = q.items.shift();
|
|
276
|
-
|
|
277
|
-
if (next === undefined) {
|
|
278
|
-
this.queues.delete(queue);
|
|
279
|
-
return;
|
|
280
|
-
}
|
|
281
|
-
|
|
282
|
-
q.runCount += 1;
|
|
283
|
-
// console.log("[QUEUE] ("+q.runCount+"/"+q.parallel+") Executing "+queue+" ("+q.items.length+" remaining)")
|
|
284
|
-
const abort = q.createAbortSignal();
|
|
285
|
-
|
|
286
|
-
try {
|
|
287
|
-
next.resolve(await next.handler({
|
|
288
|
-
abort,
|
|
289
|
-
}));
|
|
290
|
-
// console.log("[QUEUE] ("+(q.runCount-1)+"/"+q.parallel+") Resolved "+queue+" ("+q.items.length+" remaining)")
|
|
291
|
-
}
|
|
292
|
-
catch (e) {
|
|
293
|
-
next.reject(e);
|
|
294
|
-
if (!isDebouncedError(e) && !isCanceledError(e) && !isAbortedError(e)) {
|
|
295
|
-
console.log('[QUEUE] (' + (q.runCount - 1) + '/' + q.parallel + ') Rejected ' + queue + ' (' + q.items.length + ' remaining)');
|
|
296
|
-
console.error(e);
|
|
297
|
-
}
|
|
298
|
-
else {
|
|
299
|
-
if (isDebouncedError(e)) {
|
|
300
|
-
console.log('[QUEUE] (' + (q.runCount - 1) + '/' + q.parallel + ') Debounced ' + queue + ' (' + q.items.length + ' remaining)');
|
|
301
|
-
}
|
|
302
|
-
else if (isCanceledError(e)) {
|
|
303
|
-
console.log('[QUEUE] (' + (q.runCount - 1) + '/' + q.parallel + ') Canceled ' + queue + ' (' + q.items.length + ' remaining)');
|
|
304
|
-
}
|
|
305
|
-
else if (isAbortedError(e)) {
|
|
306
|
-
console.log('[QUEUE] (' + (q.runCount - 1) + '/' + q.parallel + ') Aborted ' + queue + ' (' + q.items.length + ' remaining)');
|
|
307
|
-
}
|
|
308
|
-
}
|
|
309
|
-
}
|
|
310
|
-
finally {
|
|
311
|
-
q.removeAbortSignal(abort);
|
|
312
|
-
}
|
|
313
|
-
|
|
314
|
-
q.runCount -= 1;
|
|
315
|
-
await this.runNext(queue);
|
|
316
|
-
}
|
|
317
|
-
}
|
|
File without changes
|