@praxisjs/concurrent 1.3.8 → 1.3.10

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 (50) hide show
  1. package/CHANGELOG.md +32 -0
  2. package/dist/decorators.d.ts +3 -3
  3. package/dist/decorators.d.ts.map +1 -1
  4. package/dist/decorators.js +23 -38
  5. package/dist/decorators.js.map +1 -1
  6. package/dist/pool.d.ts.map +1 -1
  7. package/dist/pool.js +64 -43
  8. package/dist/pool.js.map +1 -1
  9. package/dist/queue.d.ts.map +1 -1
  10. package/dist/queue.js +53 -50
  11. package/dist/queue.js.map +1 -1
  12. package/dist/task.d.ts.map +1 -1
  13. package/dist/task.js +39 -33
  14. package/dist/task.js.map +1 -1
  15. package/dist/utils.d.ts +12 -0
  16. package/dist/utils.d.ts.map +1 -1
  17. package/dist/utils.js +42 -0
  18. package/dist/utils.js.map +1 -1
  19. package/package.json +15 -6
  20. package/src/decorators.ts +37 -38
  21. package/src/pool.ts +64 -46
  22. package/src/queue.ts +60 -56
  23. package/src/task.ts +38 -34
  24. package/src/utils.ts +55 -0
  25. package/dist/__tests__/decorators.test.d.ts +0 -2
  26. package/dist/__tests__/decorators.test.d.ts.map +0 -1
  27. package/dist/__tests__/decorators.test.js +0 -195
  28. package/dist/__tests__/decorators.test.js.map +0 -1
  29. package/dist/__tests__/pool.test.d.ts +0 -2
  30. package/dist/__tests__/pool.test.d.ts.map +0 -1
  31. package/dist/__tests__/pool.test.js +0 -196
  32. package/dist/__tests__/pool.test.js.map +0 -1
  33. package/dist/__tests__/queue.test.d.ts +0 -2
  34. package/dist/__tests__/queue.test.d.ts.map +0 -1
  35. package/dist/__tests__/queue.test.js +0 -173
  36. package/dist/__tests__/queue.test.js.map +0 -1
  37. package/dist/__tests__/task.test.d.ts +0 -2
  38. package/dist/__tests__/task.test.d.ts.map +0 -1
  39. package/dist/__tests__/task.test.js +0 -182
  40. package/dist/__tests__/task.test.js.map +0 -1
  41. package/dist/__tests__/utils.test.d.ts +0 -2
  42. package/dist/__tests__/utils.test.d.ts.map +0 -1
  43. package/dist/__tests__/utils.test.js +0 -32
  44. package/dist/__tests__/utils.test.js.map +0 -1
  45. package/src/__tests__/decorators.test.ts +0 -267
  46. package/src/__tests__/pool.test.ts +0 -212
  47. package/src/__tests__/queue.test.ts +0 -197
  48. package/src/__tests__/task.test.ts +0 -205
  49. package/src/__tests__/utils.test.ts +0 -48
  50. package/tsconfig.json +0 -8
@@ -1,173 +0,0 @@
1
- import { describe, it, expect } from "vitest";
2
- import { queue, QueueClearedError } from "../queue";
3
- /** Abortable delay — rejects with AbortError when signal fires. */
4
- function delay(ms, signal) {
5
- return new Promise((resolve, reject) => {
6
- const timer = setTimeout(resolve, ms);
7
- signal?.addEventListener("abort", () => {
8
- clearTimeout(timer);
9
- reject(Object.assign(new Error("Aborted"), { name: "AbortError" }));
10
- }, { once: true });
11
- });
12
- }
13
- // ── Without AbortSignal (existing behaviour) ───────────────────────────────────
14
- describe("queue — without signal", () => {
15
- it("executes the task and resolves the promise", async () => {
16
- const q = queue(async (x) => x * 2);
17
- expect(await q(5)).toBe(10);
18
- });
19
- it("runs tasks sequentially (FIFO)", async () => {
20
- const order = [];
21
- const q = queue(async (n) => { order.push(n); return n; });
22
- await Promise.all([q(1), q(2), q(3)]);
23
- expect(order).toEqual([1, 2, 3]);
24
- });
25
- it("loading is true while running, false when done", async () => {
26
- let resolve;
27
- const q = queue(() => new Promise((r) => { resolve = r; }));
28
- const p = q();
29
- expect(q.loading()).toBe(true);
30
- resolve();
31
- await p;
32
- expect(q.loading()).toBe(false);
33
- });
34
- it("pending decrements as tasks complete", async () => {
35
- let resolveFirst;
36
- const q = queue((_, idx) => idx === 0
37
- ? new Promise((r) => { resolveFirst = r; })
38
- : Promise.resolve());
39
- const p1 = q(null, 0);
40
- const p2 = q(null, 1);
41
- expect(q.pending()).toBeGreaterThanOrEqual(0);
42
- resolveFirst();
43
- await p1;
44
- await p2;
45
- expect(q.pending()).toBe(0);
46
- });
47
- it("captures errors in the error signal", async () => {
48
- const q = queue(async () => { throw new Error("boom"); });
49
- await expect(q()).rejects.toThrow("boom");
50
- expect(q.error()?.message).toBe("boom");
51
- });
52
- it("wraps non-Error throws in an Error", async () => {
53
- // eslint-disable-next-line @typescript-eslint/no-throw-literal
54
- const q = queue(async () => { throw "string error"; });
55
- await expect(q()).rejects.toThrow("string error");
56
- expect(q.error()?.message).toBe("string error");
57
- });
58
- it("error in one task does not prevent subsequent tasks from running", async () => {
59
- const q = queue(async (n) => {
60
- if (n === 0)
61
- throw new Error("task 0 failed");
62
- return n;
63
- });
64
- const p0 = q(0);
65
- const p1 = q(1);
66
- const p2 = q(2);
67
- await expect(p0).rejects.toThrow("task 0 failed");
68
- expect(await p1).toBe(1);
69
- expect(await p2).toBe(2);
70
- });
71
- it("clear() with pending tasks rejects their promises with QueueClearedError", async () => {
72
- let resolveFirst;
73
- const q = queue((_, idx) => idx === 0
74
- ? new Promise((r) => { resolveFirst = r; })
75
- : Promise.resolve());
76
- q(null, 0);
77
- const p1 = q(null, 1);
78
- const p2 = q(null, 2);
79
- q.clear();
80
- await expect(p1).rejects.toBeInstanceOf(QueueClearedError);
81
- await expect(p2).rejects.toBeInstanceOf(QueueClearedError);
82
- resolveFirst();
83
- });
84
- it("clear() then new enqueue() — queue works normally after being cleared", async () => {
85
- let resolveFirst;
86
- const q = queue((n, stall) => stall
87
- ? new Promise((r) => { resolveFirst = () => r(n); })
88
- : Promise.resolve(n));
89
- q(0, true);
90
- const p1 = q(1, false);
91
- q.clear();
92
- await expect(p1).rejects.toBeInstanceOf(QueueClearedError);
93
- resolveFirst();
94
- expect(await q(42, false)).toBe(42);
95
- expect(q.pending()).toBe(0);
96
- });
97
- it("clear() with no pending tasks — no-op, no crash", () => {
98
- const q = queue(async () => "ok");
99
- expect(() => q.clear()).not.toThrow();
100
- expect(q.pending()).toBe(0);
101
- });
102
- it("very large queue (100 tasks) — all execute in order", async () => {
103
- const order = [];
104
- const q = queue(async (n) => { order.push(n); return n; });
105
- await Promise.all(Array.from({ length: 100 }, (_, i) => q(i)));
106
- expect(order).toEqual(Array.from({ length: 100 }, (_, i) => i));
107
- expect(q.pending()).toBe(0);
108
- });
109
- });
110
- // ── With AbortSignal (opt-in via first param named "signal") ──────────────────
111
- describe("queue — with signal", () => {
112
- it("passes a live AbortSignal to fn", async () => {
113
- let capturedSignal;
114
- const q = queue(async (signal) => { capturedSignal = signal; });
115
- await q();
116
- expect(capturedSignal).toBeInstanceOf(AbortSignal);
117
- expect(capturedSignal.aborted).toBe(false);
118
- });
119
- it("executes tasks and passes correct args alongside signal", async () => {
120
- const q = queue(async (signal, x) => { void signal; return x * 2; });
121
- expect(await q(5)).toBe(10);
122
- });
123
- it("clear() aborts the running item's signal", async () => {
124
- let capturedSignal;
125
- let resolve;
126
- const q = queue(async (signal) => {
127
- capturedSignal = signal;
128
- await new Promise((r) => { resolve = r; });
129
- });
130
- const p = q();
131
- p.catch(() => undefined);
132
- await Promise.resolve(); // let drain start
133
- q.clear();
134
- resolve();
135
- await p.catch(() => undefined);
136
- expect(capturedSignal.aborted).toBe(true);
137
- });
138
- it("clear() rejects the running item with QueueClearedError", async () => {
139
- const q = queue(async (signal) => { await delay(10000, signal); });
140
- const p = q();
141
- await Promise.resolve();
142
- q.clear();
143
- await expect(p).rejects.toBeInstanceOf(QueueClearedError);
144
- });
145
- it("AbortError from clear() is not stored in error()", async () => {
146
- const q = queue(async (signal) => { await delay(10000, signal); });
147
- const p = q();
148
- await Promise.resolve();
149
- q.clear();
150
- await p.catch(() => undefined);
151
- expect(q.error()).toBeNull();
152
- });
153
- it("each pending item gets its own AbortSignal, all aborted on clear()", async () => {
154
- const signals = [];
155
- let resolveFirst;
156
- const q = queue(async (signal, idx) => {
157
- signals.push(signal);
158
- if (idx === 0)
159
- await new Promise((r) => { resolveFirst = r; });
160
- });
161
- const p0 = q(0);
162
- const p1 = q(1);
163
- const p2 = q(2);
164
- p1.catch(() => undefined);
165
- p2.catch(() => undefined);
166
- await Promise.resolve();
167
- q.clear();
168
- resolveFirst();
169
- await Promise.all([p0.catch(() => undefined), p1.catch(() => undefined), p2.catch(() => undefined)]);
170
- expect(signals[0]?.aborted).toBe(true);
171
- });
172
- });
173
- //# sourceMappingURL=queue.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"queue.test.js","sourceRoot":"","sources":["../../src/__tests__/queue.test.ts"],"names":[],"mappings":"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"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=task.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"task.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/task.test.ts"],"names":[],"mappings":""}
@@ -1,182 +0,0 @@
1
- import { describe, it, expect } from "vitest";
2
- import { task } from "../task";
3
- /** Abortable delay — rejects with AbortError when signal fires. */
4
- function delay(ms, signal) {
5
- return new Promise((resolve, reject) => {
6
- const timer = setTimeout(resolve, ms);
7
- signal?.addEventListener("abort", () => {
8
- clearTimeout(timer);
9
- reject(Object.assign(new Error("Aborted"), { name: "AbortError" }));
10
- }, { once: true });
11
- });
12
- }
13
- // ── Without AbortSignal (existing behaviour) ───────────────────────────────────
14
- describe("task — without signal", () => {
15
- it("resolves with the function result", async () => {
16
- const t = task(async (x) => x + 1);
17
- expect(await t(9)).toBe(10);
18
- });
19
- it("sets loading to true while running", async () => {
20
- let resolve;
21
- const t = task(() => new Promise((r) => { resolve = r; }));
22
- const p = t();
23
- expect(t.loading()).toBe(true);
24
- resolve(42);
25
- await p;
26
- expect(t.loading()).toBe(false);
27
- });
28
- it("stores last result", async () => {
29
- const t = task(async () => "hello");
30
- await t();
31
- expect(t.lastResult()).toBe("hello");
32
- });
33
- it("captures errors in the error signal", async () => {
34
- const t = task(async () => { throw new Error("task failed"); });
35
- const result = await t();
36
- expect(result).toBeUndefined();
37
- expect(t.error()?.message).toBe("task failed");
38
- });
39
- it("clears error on a new run", async () => {
40
- let shouldFail = true;
41
- const t = task(async () => {
42
- if (shouldFail)
43
- throw new Error("oops");
44
- return "ok";
45
- });
46
- await t();
47
- shouldFail = false;
48
- await t();
49
- expect(t.error()).toBeNull();
50
- expect(t.lastResult()).toBe("ok");
51
- });
52
- it("cancelAll() discards in-flight results", async () => {
53
- let resolve;
54
- const t = task(() => new Promise((r) => { resolve = r; }));
55
- const p = t();
56
- t.cancelAll();
57
- resolve("stale");
58
- expect(await p).toBeUndefined();
59
- expect(t.loading()).toBe(false);
60
- });
61
- it("cancelAll() during a failing task discards the error", async () => {
62
- let reject;
63
- const t = task(() => new Promise((_res, rej) => { reject = rej; }));
64
- const p = t();
65
- t.cancelAll();
66
- reject(new Error("cancelled"));
67
- expect(await p).toBeUndefined();
68
- expect(t.error()).toBeNull();
69
- });
70
- it("wraps non-Error throws in an Error object", async () => {
71
- // eslint-disable-next-line @typescript-eslint/only-throw-error
72
- const t = task(async () => { throw "string-error"; });
73
- await t();
74
- expect(t.error()).toBeInstanceOf(Error);
75
- expect(t.error()?.message).toBe("string-error");
76
- });
77
- it("AbortError thrown by fn itself (no cancelAll) is not stored in error()", async () => {
78
- const t = task(async () => { throw new DOMException("Aborted", "AbortError"); });
79
- const result = await t();
80
- expect(result).toBeUndefined();
81
- expect(t.error()).toBeNull();
82
- expect(t.loading()).toBe(false);
83
- });
84
- it("second run while first is pending discards the first result", async () => {
85
- let resolveFirst;
86
- let resolveSecond;
87
- const t = task((run) => run === 1
88
- ? new Promise((r) => { resolveFirst = r; })
89
- : new Promise((r) => { resolveSecond = r; }));
90
- let run = 1;
91
- const p1 = t(run++);
92
- const p2 = t(run++);
93
- resolveSecond("result-2");
94
- resolveFirst("result-1");
95
- const [r1, r2] = await Promise.all([p1, p2]);
96
- expect(r2).toBe("result-2");
97
- expect(r1).toBeUndefined();
98
- expect(t.lastResult()).toBe("result-2");
99
- });
100
- it("synchronous function (non-async) resolves correctly via await", async () => {
101
- const t = task((() => 42));
102
- expect(await t()).toBe(42);
103
- expect(t.lastResult()).toBe(42);
104
- });
105
- });
106
- // ── With AbortSignal (opt-in via first param named "signal") ──────────────────
107
- describe("task — with signal", () => {
108
- it("resolves with the function result", async () => {
109
- const t = task(async (signal, x) => { void signal; return x + 1; });
110
- expect(await t(9)).toBe(10);
111
- });
112
- it("passes a live AbortSignal to fn", async () => {
113
- let capturedSignal;
114
- const t = task(async (signal) => { capturedSignal = signal; return "done"; });
115
- await t();
116
- expect(capturedSignal).toBeInstanceOf(AbortSignal);
117
- expect(capturedSignal.aborted).toBe(false);
118
- });
119
- it("new run aborts the previous signal", async () => {
120
- const signals = [];
121
- let resolveFirst;
122
- const t = task(async (signal) => {
123
- signals.push(signal);
124
- if (signals.length === 1)
125
- await new Promise((r) => { resolveFirst = r; });
126
- return signals.length;
127
- });
128
- const p1 = t();
129
- const p2 = t();
130
- resolveFirst();
131
- await Promise.all([p1, p2]);
132
- expect(signals[0].aborted).toBe(true);
133
- expect(signals[1].aborted).toBe(false);
134
- });
135
- it("cancelAll() aborts the current signal", async () => {
136
- let capturedSignal;
137
- let resolve;
138
- const t = task(async (signal) => {
139
- capturedSignal = signal;
140
- await new Promise((r) => { resolve = r; });
141
- });
142
- const p = t();
143
- t.cancelAll();
144
- resolve();
145
- await p;
146
- expect(capturedSignal.aborted).toBe(true);
147
- });
148
- it("AbortError from cancelAll() is not stored in error()", async () => {
149
- const t = task(async (signal) => { await delay(10000, signal); });
150
- const p = t();
151
- t.cancelAll();
152
- await p;
153
- expect(t.error()).toBeNull();
154
- expect(t.loading()).toBe(false);
155
- });
156
- it("AbortError from a superseded run is not stored in error()", async () => {
157
- const t = task(async (signal, which) => {
158
- if (which === "first")
159
- await delay(10000, signal);
160
- return which;
161
- });
162
- const p1 = t("first");
163
- const p2 = t("second");
164
- const [r1, r2] = await Promise.all([p1, p2]);
165
- expect(r1).toBeUndefined();
166
- expect(r2).toBe("second");
167
- expect(t.error()).toBeNull();
168
- });
169
- it("cancelAll() called, then new call — new call works normally", async () => {
170
- let resolveStale;
171
- const t = task((signal, which) => which === "stale"
172
- ? new Promise((r) => { resolveStale = r; })
173
- : Promise.resolve("fresh"));
174
- const staleP = t("stale");
175
- t.cancelAll();
176
- resolveStale("stale-value");
177
- await staleP;
178
- expect(await t("fresh")).toBe("fresh");
179
- expect(t.lastResult()).toBe("fresh");
180
- });
181
- });
182
- //# sourceMappingURL=task.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"task.test.js","sourceRoot":"","sources":["../../src/__tests__/task.test.ts"],"names":[],"mappings":"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"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=utils.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"utils.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/utils.test.ts"],"names":[],"mappings":""}
@@ -1,32 +0,0 @@
1
- import { describe, it, expect } from "vitest";
2
- import { acceptsSignal } from "../utils";
3
- describe("acceptsSignal", () => {
4
- it("returns true for a function with 'signal' as first param", () => {
5
- expect(acceptsSignal((signal) => signal)).toBe(true);
6
- });
7
- it("returns true for an async function with 'signal' as first param", () => {
8
- expect(acceptsSignal(async (signal, id) => ({ signal, id }))).toBe(true);
9
- });
10
- it("returns true for a named function with 'signal' as first param", () => {
11
- function loadUser(signal) { return signal; }
12
- expect(acceptsSignal(loadUser)).toBe(true);
13
- });
14
- it("returns false for a function with no params", () => {
15
- expect(acceptsSignal(() => "ok")).toBe(false);
16
- });
17
- it("returns false for a function whose first param is not 'signal'", () => {
18
- expect(acceptsSignal((id) => id)).toBe(false);
19
- });
20
- it("returns false for _signal (underscore-prefixed)", () => {
21
- expect(acceptsSignal((_signal) => _signal)).toBe(false);
22
- });
23
- it("returns false when fn.toString() contains no parentheses (regex yields no match)", () => {
24
- const noParenFn = Object.assign(() => undefined, { toString() { return "no parens here"; } });
25
- expect(acceptsSignal(noParenFn)).toBe(false);
26
- });
27
- it("returns false when fn.toString() throws", () => {
28
- const badFn = Object.assign(() => undefined, { toString() { throw new Error("no source"); } });
29
- expect(acceptsSignal(badFn)).toBe(false);
30
- });
31
- });
32
- //# sourceMappingURL=utils.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"utils.test.js","sourceRoot":"","sources":["../../src/__tests__/utils.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAE9C,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAEzC,QAAQ,CAAC,eAAe,EAAE,GAAG,EAAE;IAC7B,EAAE,CAAC,0DAA0D,EAAE,GAAG,EAAE;QAClE,MAAM,CAAC,aAAa,CAAC,CAAC,MAAmB,EAAE,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACpE,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,iEAAiE,EAAE,GAAG,EAAE;QACzE,MAAM,CAAC,aAAa,CAAC,KAAK,EAAE,MAAmB,EAAE,EAAU,EAAE,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAChG,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,gEAAgE,EAAE,GAAG,EAAE;QACxE,SAAS,QAAQ,CAAC,MAAmB,IAAI,OAAO,MAAM,CAAC,CAAC,CAAC;QACzD,MAAM,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC7C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,6CAA6C,EAAE,GAAG,EAAE;QACrD,MAAM,CAAC,aAAa,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAChD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,gEAAgE,EAAE,GAAG,EAAE;QACxE,MAAM,CAAC,aAAa,CAAC,CAAC,EAAU,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACxD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,iDAAiD,EAAE,GAAG,EAAE;QACzD,MAAM,CAAC,aAAa,CAAC,CAAC,OAAoB,EAAE,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACvE,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,kFAAkF,EAAE,GAAG,EAAE;QAC1F,MAAM,SAAS,GAAG,MAAM,CAAC,MAAM,CAC7B,GAAG,EAAE,CAAC,SAAS,EACf,EAAE,QAAQ,KAAK,OAAO,gBAAgB,CAAC,CAAC,CAAC,EAAE,CAChB,CAAC;QAE9B,MAAM,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAC/C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,yCAAyC,EAAE,GAAG,EAAE;QACjD,MAAM,KAAK,GAAG,MAAM,CAAC,MAAM,CACzB,GAAG,EAAE,CAAC,SAAS,EACf,EAAE,QAAQ,KAAK,MAAM,IAAI,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,EAAE,CACrB,CAAC;QAE9B,MAAM,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAC3C,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}