@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.
@@ -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
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
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 (0, simple_errors_1.isSimpleError)(error) && error.code === 'queue-debounced';
36
+ export function isDebouncedError(error) {
37
+ return isSimpleError(error) && error.code === 'queue-debounced';
44
38
  }
45
- function isCanceledError(error) {
46
- return (0, simple_errors_1.isSimpleError)(error) && error.code === 'queue-canceled';
39
+ export function isCanceledError(error) {
40
+ return isSimpleError(error) && error.code === 'queue-canceled';
47
41
  }
48
- function isAbortedError(error) {
49
- return (0, simple_errors_1.isSimpleError)(error) && error.code === 'queue-aborted';
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 simple_errors_1.SimpleError({
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 node_async_hooks_1.AsyncLocalStorage();
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 simple_errors_1.SimpleError({
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 simple_errors_1.SimpleError({
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 simple_errors_1.SimpleError({
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 = node_async_hooks_1.AsyncLocalStorage.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 "./src/QueueHandler";
1
+ export * from './QueueHandler.js';
2
2
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":"AAAA,cAAc,oBAAoB,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,mBAAmB,CAAC"}
package/dist/index.js CHANGED
@@ -1,5 +1,2 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- const tslib_1 = require("tslib");
4
- tslib_1.__exportStar(require("./src/QueueHandler"), exports);
1
+ export * from './QueueHandler.js';
5
2
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":";;;AAAA,6DAAkC"}
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.119.0",
4
- "main": "./dist/index.js",
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 -b",
14
- "test": "jest --runInBand"
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": "7bcbadd31fcc4f3109efc67c4034d1382a1d0439"
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,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=QueueHandler.test.d.ts.map
@@ -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"}
@@ -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
- });
@@ -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
- }