@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.
- package/CHANGELOG.md +32 -0
- package/dist/decorators.d.ts +3 -3
- package/dist/decorators.d.ts.map +1 -1
- package/dist/decorators.js +23 -38
- package/dist/decorators.js.map +1 -1
- package/dist/pool.d.ts.map +1 -1
- package/dist/pool.js +64 -43
- package/dist/pool.js.map +1 -1
- package/dist/queue.d.ts.map +1 -1
- package/dist/queue.js +53 -50
- package/dist/queue.js.map +1 -1
- package/dist/task.d.ts.map +1 -1
- package/dist/task.js +39 -33
- package/dist/task.js.map +1 -1
- package/dist/utils.d.ts +12 -0
- package/dist/utils.d.ts.map +1 -1
- package/dist/utils.js +42 -0
- package/dist/utils.js.map +1 -1
- package/package.json +15 -6
- package/src/decorators.ts +37 -38
- package/src/pool.ts +64 -46
- package/src/queue.ts +60 -56
- package/src/task.ts +38 -34
- package/src/utils.ts +55 -0
- package/dist/__tests__/decorators.test.d.ts +0 -2
- package/dist/__tests__/decorators.test.d.ts.map +0 -1
- package/dist/__tests__/decorators.test.js +0 -195
- package/dist/__tests__/decorators.test.js.map +0 -1
- package/dist/__tests__/pool.test.d.ts +0 -2
- package/dist/__tests__/pool.test.d.ts.map +0 -1
- package/dist/__tests__/pool.test.js +0 -196
- package/dist/__tests__/pool.test.js.map +0 -1
- package/dist/__tests__/queue.test.d.ts +0 -2
- package/dist/__tests__/queue.test.d.ts.map +0 -1
- package/dist/__tests__/queue.test.js +0 -173
- package/dist/__tests__/queue.test.js.map +0 -1
- package/dist/__tests__/task.test.d.ts +0 -2
- package/dist/__tests__/task.test.d.ts.map +0 -1
- package/dist/__tests__/task.test.js +0 -182
- package/dist/__tests__/task.test.js.map +0 -1
- package/dist/__tests__/utils.test.d.ts +0 -2
- package/dist/__tests__/utils.test.d.ts.map +0 -1
- package/dist/__tests__/utils.test.js +0 -32
- package/dist/__tests__/utils.test.js.map +0 -1
- package/src/__tests__/decorators.test.ts +0 -267
- package/src/__tests__/pool.test.ts +0 -212
- package/src/__tests__/queue.test.ts +0 -197
- package/src/__tests__/task.test.ts +0 -205
- package/src/__tests__/utils.test.ts +0 -48
- package/tsconfig.json +0 -8
package/src/utils.ts
CHANGED
|
@@ -1,12 +1,37 @@
|
|
|
1
|
+
import {
|
|
2
|
+
createEffect,
|
|
3
|
+
disposeEffect,
|
|
4
|
+
pauseTracking,
|
|
5
|
+
readSignal,
|
|
6
|
+
resumeTracking,
|
|
7
|
+
type SignalNode,
|
|
8
|
+
} from "@praxisjs/core/internal";
|
|
9
|
+
import type { Computed } from "@praxisjs/shared";
|
|
10
|
+
|
|
11
|
+
const signalParams = new WeakMap<object, boolean>();
|
|
12
|
+
|
|
1
13
|
/**
|
|
2
14
|
* Returns true if the function declares `signal` as its first parameter name.
|
|
3
15
|
* Used to decide whether to inject an AbortSignal at call time.
|
|
4
16
|
*
|
|
5
17
|
* Works on unminified source (class methods, arrow functions, async functions).
|
|
6
18
|
* Bound functions always return false — check the original method before binding.
|
|
19
|
+
*
|
|
20
|
+
* Cached per function: a decorated method is the same prototype function for every instance, and
|
|
21
|
+
* reading its source on each construction was the main cost of creating a decorated component.
|
|
7
22
|
*/
|
|
8
23
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
9
24
|
export function acceptsSignal(fn: (...args: any[]) => any): boolean {
|
|
25
|
+
let result = signalParams.get(fn);
|
|
26
|
+
if (result === undefined) {
|
|
27
|
+
result = readsSignalParam(fn);
|
|
28
|
+
signalParams.set(fn, result);
|
|
29
|
+
}
|
|
30
|
+
return result;
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
34
|
+
function readsSignalParam(fn: (...args: any[]) => any): boolean {
|
|
10
35
|
try {
|
|
11
36
|
const src = fn.toString();
|
|
12
37
|
// Match the first character of the parameter list, e.g.:
|
|
@@ -22,3 +47,33 @@ export function acceptsSignal(fn: (...args: any[]) => any): boolean {
|
|
|
22
47
|
return false;
|
|
23
48
|
}
|
|
24
49
|
}
|
|
50
|
+
|
|
51
|
+
/**
|
|
52
|
+
* A read-only `Computed` view of a signal node: reading it tracks the node directly, without the
|
|
53
|
+
* extra computed node, getter closure and recomputation a `computed(() => sig())` wrapper costs.
|
|
54
|
+
*/
|
|
55
|
+
export function readonlyView<T>(node: SignalNode<T>): Computed<T> {
|
|
56
|
+
const view = (() => readSignal(node)) as Computed<T>;
|
|
57
|
+
view.subscribe = (fn: (value: T) => void) => {
|
|
58
|
+
const effect = createEffect(() => {
|
|
59
|
+
const value = readSignal(node);
|
|
60
|
+
const prev = pauseTracking();
|
|
61
|
+
try {
|
|
62
|
+
fn(value);
|
|
63
|
+
} finally {
|
|
64
|
+
resumeTracking(prev);
|
|
65
|
+
}
|
|
66
|
+
});
|
|
67
|
+
return () => { disposeEffect(effect); };
|
|
68
|
+
};
|
|
69
|
+
view.__isComputed = true;
|
|
70
|
+
return view;
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
export function isAbortError(err: unknown): boolean {
|
|
74
|
+
return err instanceof Error && err.name === "AbortError";
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
export function toError(err: unknown): Error {
|
|
78
|
+
return err instanceof Error ? err : new Error(String(err));
|
|
79
|
+
}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"decorators.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/decorators.test.ts"],"names":[],"mappings":""}
|
|
@@ -1,195 +0,0 @@
|
|
|
1
|
-
import { describe, it, expect } from "vitest";
|
|
2
|
-
import { Task, Queue, Pool } from "../decorators";
|
|
3
|
-
import { QueueClearedError } from "../queue";
|
|
4
|
-
function fieldCtx(name) {
|
|
5
|
-
const initializers = [];
|
|
6
|
-
return {
|
|
7
|
-
ctx: {
|
|
8
|
-
name,
|
|
9
|
-
kind: "field",
|
|
10
|
-
addInitializer(fn) { initializers.push(fn); },
|
|
11
|
-
},
|
|
12
|
-
run(instance) { initializers.forEach((fn) => { fn.call(instance); }); },
|
|
13
|
-
};
|
|
14
|
-
}
|
|
15
|
-
// ── Task ──────────────────────────────────────────────────────────────────────
|
|
16
|
-
describe("Task decorator", () => {
|
|
17
|
-
it("wraps the named method and exposes signals as sub-properties", async () => {
|
|
18
|
-
const { ctx, run } = fieldCtx("taskLoad");
|
|
19
|
-
Task("load")(undefined, ctx);
|
|
20
|
-
const instance = {
|
|
21
|
-
load: async (x) => x * 2,
|
|
22
|
-
};
|
|
23
|
-
run(instance);
|
|
24
|
-
const taskLoad = instance.taskLoad;
|
|
25
|
-
expect(typeof taskLoad).toBe("function");
|
|
26
|
-
expect(taskLoad.loading).toBeDefined();
|
|
27
|
-
expect(taskLoad.error).toBeDefined();
|
|
28
|
-
expect(taskLoad.lastResult).toBeDefined();
|
|
29
|
-
expect(taskLoad.cancelAll).toBeDefined();
|
|
30
|
-
const result = await taskLoad(5);
|
|
31
|
-
expect(result).toBe(10);
|
|
32
|
-
expect(taskLoad.lastResult()).toBe(10);
|
|
33
|
-
});
|
|
34
|
-
it("sets loading while running", async () => {
|
|
35
|
-
const { ctx, run } = fieldCtx("taskFetch");
|
|
36
|
-
Task("fetch")(undefined, ctx);
|
|
37
|
-
let resolve;
|
|
38
|
-
const instance = {
|
|
39
|
-
fetch: async () => new Promise((r) => { resolve = r; }),
|
|
40
|
-
};
|
|
41
|
-
run(instance);
|
|
42
|
-
const taskFetch = instance.taskFetch;
|
|
43
|
-
const p = taskFetch();
|
|
44
|
-
expect(taskFetch.loading()).toBe(true);
|
|
45
|
-
resolve("done");
|
|
46
|
-
await p;
|
|
47
|
-
expect(taskFetch.loading()).toBe(false);
|
|
48
|
-
});
|
|
49
|
-
it("cancelAll() aborts the in-flight signal", async () => {
|
|
50
|
-
const { ctx, run } = fieldCtx("taskFetch");
|
|
51
|
-
Task("fetch")(undefined, ctx);
|
|
52
|
-
let capturedSignal;
|
|
53
|
-
let resolve;
|
|
54
|
-
const instance = {
|
|
55
|
-
fetch: async (signal) => {
|
|
56
|
-
capturedSignal = signal;
|
|
57
|
-
await new Promise((r) => { resolve = r; });
|
|
58
|
-
},
|
|
59
|
-
};
|
|
60
|
-
run(instance);
|
|
61
|
-
const taskFetch = instance.taskFetch;
|
|
62
|
-
const p = taskFetch();
|
|
63
|
-
taskFetch.cancelAll();
|
|
64
|
-
resolve();
|
|
65
|
-
await p;
|
|
66
|
-
expect(capturedSignal.aborted).toBe(true);
|
|
67
|
-
});
|
|
68
|
-
});
|
|
69
|
-
// ── Queue ─────────────────────────────────────────────────────────────────────
|
|
70
|
-
describe("Queue decorator", () => {
|
|
71
|
-
it("wraps the named method and exposes signals", async () => {
|
|
72
|
-
const { ctx, run } = fieldCtx("taskSave");
|
|
73
|
-
Queue("save")(undefined, ctx);
|
|
74
|
-
const instance = {
|
|
75
|
-
save: async (x) => String(x),
|
|
76
|
-
};
|
|
77
|
-
run(instance);
|
|
78
|
-
const taskSave = instance.taskSave;
|
|
79
|
-
expect(typeof taskSave).toBe("function");
|
|
80
|
-
expect(taskSave.loading).toBeDefined();
|
|
81
|
-
expect(taskSave.pending).toBeDefined();
|
|
82
|
-
expect(taskSave.error).toBeDefined();
|
|
83
|
-
expect(taskSave.clear).toBeDefined();
|
|
84
|
-
const result = await taskSave("hello");
|
|
85
|
-
expect(result).toBe("hello");
|
|
86
|
-
});
|
|
87
|
-
it("clear() rejects queued calls with QueueClearedError", async () => {
|
|
88
|
-
const { ctx, run } = fieldCtx("taskSave");
|
|
89
|
-
Queue("save")(undefined, ctx);
|
|
90
|
-
let resolveFirst;
|
|
91
|
-
const instance = {
|
|
92
|
-
save: async (signal, _, idx) => {
|
|
93
|
-
void signal;
|
|
94
|
-
return idx === 0
|
|
95
|
-
? new Promise((r) => { resolveFirst = r; })
|
|
96
|
-
: Promise.resolve();
|
|
97
|
-
},
|
|
98
|
-
};
|
|
99
|
-
run(instance);
|
|
100
|
-
const taskSave = instance.taskSave;
|
|
101
|
-
taskSave(null, 0);
|
|
102
|
-
const p1 = taskSave(null, 1);
|
|
103
|
-
taskSave.clear();
|
|
104
|
-
await expect(p1).rejects.toThrow("Queue cleared");
|
|
105
|
-
resolveFirst();
|
|
106
|
-
});
|
|
107
|
-
});
|
|
108
|
-
// ── Pool ──────────────────────────────────────────────────────────────────────
|
|
109
|
-
describe("Pool decorator", () => {
|
|
110
|
-
it("wraps the named method and exposes signals", async () => {
|
|
111
|
-
const { ctx, run } = fieldCtx("taskProcess");
|
|
112
|
-
Pool("process", 2)(undefined, ctx);
|
|
113
|
-
const instance = {
|
|
114
|
-
process: async (x) => x + 1,
|
|
115
|
-
};
|
|
116
|
-
run(instance);
|
|
117
|
-
const taskProcess = instance.taskProcess;
|
|
118
|
-
expect(typeof taskProcess).toBe("function");
|
|
119
|
-
expect(taskProcess.loading).toBeDefined();
|
|
120
|
-
expect(taskProcess.active).toBeDefined();
|
|
121
|
-
expect(taskProcess.pending).toBeDefined();
|
|
122
|
-
expect(taskProcess.error).toBeDefined();
|
|
123
|
-
expect(taskProcess.cancelAll).toBeDefined();
|
|
124
|
-
const result = await taskProcess(9);
|
|
125
|
-
expect(result).toBe(10);
|
|
126
|
-
});
|
|
127
|
-
it("respects concurrency limit", async () => {
|
|
128
|
-
const { ctx, run } = fieldCtx("taskWork");
|
|
129
|
-
Pool("work", 2)(undefined, ctx);
|
|
130
|
-
const resolvers = [];
|
|
131
|
-
const instance = {
|
|
132
|
-
work: async () => new Promise((r) => resolvers.push(r)),
|
|
133
|
-
};
|
|
134
|
-
run(instance);
|
|
135
|
-
const taskWork = instance.taskWork;
|
|
136
|
-
const t1 = taskWork();
|
|
137
|
-
const t2 = taskWork();
|
|
138
|
-
taskWork();
|
|
139
|
-
expect(taskWork.active()).toBe(2);
|
|
140
|
-
expect(taskWork.pending()).toBe(1);
|
|
141
|
-
resolvers.forEach((r) => { r(); });
|
|
142
|
-
await Promise.all([t1, t2]);
|
|
143
|
-
});
|
|
144
|
-
it("defaults concurrency to 1", async () => {
|
|
145
|
-
const { ctx, run } = fieldCtx("taskWork");
|
|
146
|
-
Pool("work")(undefined, ctx);
|
|
147
|
-
const resolvers = [];
|
|
148
|
-
const instance = {
|
|
149
|
-
work: async () => new Promise((r) => resolvers.push(r)),
|
|
150
|
-
};
|
|
151
|
-
run(instance);
|
|
152
|
-
const taskWork = instance.taskWork;
|
|
153
|
-
const t1 = taskWork();
|
|
154
|
-
const t2 = taskWork();
|
|
155
|
-
expect(taskWork.active()).toBe(1);
|
|
156
|
-
expect(taskWork.pending()).toBe(1);
|
|
157
|
-
resolvers[0]();
|
|
158
|
-
await t1;
|
|
159
|
-
resolvers[1]();
|
|
160
|
-
await t2;
|
|
161
|
-
});
|
|
162
|
-
it("cancelAll() cancels pending and active tasks", async () => {
|
|
163
|
-
const { ctx, run } = fieldCtx("taskWork");
|
|
164
|
-
Pool("work", 1)(undefined, ctx);
|
|
165
|
-
let resolveFirst;
|
|
166
|
-
const instance = {
|
|
167
|
-
work: async (signal, idx) => {
|
|
168
|
-
void signal;
|
|
169
|
-
if (idx === 0)
|
|
170
|
-
await new Promise((r) => { resolveFirst = r; });
|
|
171
|
-
},
|
|
172
|
-
};
|
|
173
|
-
run(instance);
|
|
174
|
-
const taskWork = instance.taskWork;
|
|
175
|
-
const t1 = taskWork(0);
|
|
176
|
-
const t2 = taskWork(1);
|
|
177
|
-
await Promise.resolve();
|
|
178
|
-
taskWork.cancelAll();
|
|
179
|
-
resolveFirst();
|
|
180
|
-
await Promise.all([t1, t2]);
|
|
181
|
-
expect(taskWork.active()).toBe(0);
|
|
182
|
-
expect(taskWork.pending()).toBe(0);
|
|
183
|
-
});
|
|
184
|
-
});
|
|
185
|
-
// ── QueueClearedError re-export ────────────────────────────────────────────────
|
|
186
|
-
describe("QueueClearedError", () => {
|
|
187
|
-
it("is exported from the package", () => {
|
|
188
|
-
expect(QueueClearedError).toBeDefined();
|
|
189
|
-
const e = new QueueClearedError();
|
|
190
|
-
expect(e).toBeInstanceOf(Error);
|
|
191
|
-
expect(e.name).toBe("QueueClearedError");
|
|
192
|
-
expect(e.message).toBe("Queue cleared");
|
|
193
|
-
});
|
|
194
|
-
});
|
|
195
|
-
//# sourceMappingURL=decorators.test.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"decorators.test.js","sourceRoot":"","sources":["../../src/__tests__/decorators.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"pool.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/pool.test.ts"],"names":[],"mappings":""}
|
|
@@ -1,196 +0,0 @@
|
|
|
1
|
-
import { describe, it, expect, vi } from "vitest";
|
|
2
|
-
import { pool } from "../pool";
|
|
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("pool — without signal", () => {
|
|
15
|
-
it("executes a task and resolves with its result", async () => {
|
|
16
|
-
const p = pool(2, async (x) => x * 3);
|
|
17
|
-
expect(await p(4)).toBe(12);
|
|
18
|
-
});
|
|
19
|
-
it("respects concurrency limit", async () => {
|
|
20
|
-
let active = 0;
|
|
21
|
-
let maxActive = 0;
|
|
22
|
-
const p = pool(2, async () => {
|
|
23
|
-
active++;
|
|
24
|
-
maxActive = Math.max(maxActive, active);
|
|
25
|
-
await new Promise((r) => setTimeout(r, 10));
|
|
26
|
-
active--;
|
|
27
|
-
});
|
|
28
|
-
await Promise.all([p(), p(), p(), p()]);
|
|
29
|
-
expect(maxActive).toBeLessThanOrEqual(2);
|
|
30
|
-
});
|
|
31
|
-
it("active() reflects currently running tasks", async () => {
|
|
32
|
-
const resolvers = [];
|
|
33
|
-
const p = pool(3, () => new Promise((r) => resolvers.push(r)));
|
|
34
|
-
const tasks = [p(), p()];
|
|
35
|
-
expect(p.active()).toBe(2);
|
|
36
|
-
resolvers.forEach((r) => { r(); });
|
|
37
|
-
await Promise.all(tasks);
|
|
38
|
-
expect(p.active()).toBe(0);
|
|
39
|
-
});
|
|
40
|
-
it("loading is true when active > 0", async () => {
|
|
41
|
-
let resolve;
|
|
42
|
-
const p = pool(1, () => new Promise((r) => { resolve = r; }));
|
|
43
|
-
const t = p();
|
|
44
|
-
expect(p.loading()).toBe(true);
|
|
45
|
-
resolve();
|
|
46
|
-
await t;
|
|
47
|
-
expect(p.loading()).toBe(false);
|
|
48
|
-
});
|
|
49
|
-
it("captures errors in the error signal and resolves undefined", async () => {
|
|
50
|
-
const p = pool(1, async () => { throw new Error("pool error"); });
|
|
51
|
-
expect(await p()).toBeUndefined();
|
|
52
|
-
expect(p.error()?.message).toBe("pool error");
|
|
53
|
-
});
|
|
54
|
-
it("wraps non-Error throws in an Error object", async () => {
|
|
55
|
-
// eslint-disable-next-line @typescript-eslint/only-throw-error
|
|
56
|
-
const p = pool(1, async () => { throw "plain string error"; });
|
|
57
|
-
expect(await p()).toBeUndefined();
|
|
58
|
-
expect(p.error()).toBeInstanceOf(Error);
|
|
59
|
-
expect(p.error()?.message).toBe("plain string error");
|
|
60
|
-
});
|
|
61
|
-
it("AbortError thrown by fn itself (no cancelAll) is not stored in error()", async () => {
|
|
62
|
-
const p = pool(1, async () => { throw new DOMException("Aborted", "AbortError"); });
|
|
63
|
-
const result = await p();
|
|
64
|
-
expect(result).toBeUndefined();
|
|
65
|
-
expect(p.error()).toBeNull();
|
|
66
|
-
});
|
|
67
|
-
it("pending count decrements as tasks start", async () => {
|
|
68
|
-
let resolveFirst;
|
|
69
|
-
const p = pool(1, async (idx) => {
|
|
70
|
-
if (idx === 0)
|
|
71
|
-
await new Promise((r) => { resolveFirst = r; });
|
|
72
|
-
});
|
|
73
|
-
const t1 = p(0);
|
|
74
|
-
const t2 = p(1);
|
|
75
|
-
expect(p.pending()).toBe(1);
|
|
76
|
-
resolveFirst();
|
|
77
|
-
await t1;
|
|
78
|
-
await t2;
|
|
79
|
-
expect(p.pending()).toBe(0);
|
|
80
|
-
});
|
|
81
|
-
it("concurrency=1 guarantees serial execution", async () => {
|
|
82
|
-
const order = [];
|
|
83
|
-
let resolveFirst;
|
|
84
|
-
const p = pool(1, async (n) => {
|
|
85
|
-
if (n === 0)
|
|
86
|
-
await new Promise((r) => { resolveFirst = r; });
|
|
87
|
-
order.push(n);
|
|
88
|
-
});
|
|
89
|
-
const t1 = p(0);
|
|
90
|
-
const t2 = p(1);
|
|
91
|
-
expect(p.active()).toBe(1);
|
|
92
|
-
expect(p.pending()).toBe(1);
|
|
93
|
-
resolveFirst();
|
|
94
|
-
await t1;
|
|
95
|
-
await t2;
|
|
96
|
-
expect(order).toEqual([0, 1]);
|
|
97
|
-
});
|
|
98
|
-
it("error in one task does not block subsequent tasks", async () => {
|
|
99
|
-
const p = pool(1, async (n) => {
|
|
100
|
-
if (n === 0)
|
|
101
|
-
throw new Error("task 0 failed");
|
|
102
|
-
return n;
|
|
103
|
-
});
|
|
104
|
-
expect(await p(0)).toBeUndefined();
|
|
105
|
-
expect(await p(1)).toBe(1);
|
|
106
|
-
});
|
|
107
|
-
it("concurrency=0 — clamps to 1", async () => {
|
|
108
|
-
const fn = vi.fn(async () => "result");
|
|
109
|
-
const p = pool(0, fn);
|
|
110
|
-
expect(await p()).toBe("result");
|
|
111
|
-
expect(fn).toHaveBeenCalledOnce();
|
|
112
|
-
});
|
|
113
|
-
it("cancelAll() when idle — no-op, no crash", () => {
|
|
114
|
-
const p = pool(2, async () => "ok");
|
|
115
|
-
expect(() => p.cancelAll()).not.toThrow();
|
|
116
|
-
expect(p.pending()).toBe(0);
|
|
117
|
-
expect(p.active()).toBe(0);
|
|
118
|
-
});
|
|
119
|
-
});
|
|
120
|
-
// ── With AbortSignal (opt-in via first param named "signal") ──────────────────
|
|
121
|
-
describe("pool — with signal", () => {
|
|
122
|
-
it("passes a live AbortSignal to fn", async () => {
|
|
123
|
-
let capturedSignal;
|
|
124
|
-
const p = pool(1, async (signal) => { capturedSignal = signal; });
|
|
125
|
-
await p();
|
|
126
|
-
expect(capturedSignal).toBeInstanceOf(AbortSignal);
|
|
127
|
-
expect(capturedSignal.aborted).toBe(false);
|
|
128
|
-
});
|
|
129
|
-
it("executes tasks and passes correct args alongside signal", async () => {
|
|
130
|
-
const p = pool(2, async (signal, x) => { void signal; return x * 3; });
|
|
131
|
-
expect(await p(4)).toBe(12);
|
|
132
|
-
});
|
|
133
|
-
it("cancelAll() aborts all active signals", async () => {
|
|
134
|
-
const signals = [];
|
|
135
|
-
const resolvers = [];
|
|
136
|
-
const p = pool(3, async (signal) => {
|
|
137
|
-
signals.push(signal);
|
|
138
|
-
await new Promise((r) => resolvers.push(r));
|
|
139
|
-
});
|
|
140
|
-
const t1 = p();
|
|
141
|
-
const t2 = p();
|
|
142
|
-
const t3 = p();
|
|
143
|
-
await Promise.resolve();
|
|
144
|
-
p.cancelAll();
|
|
145
|
-
resolvers.forEach((r) => r());
|
|
146
|
-
await Promise.all([t1, t2, t3]);
|
|
147
|
-
expect(signals.every((s) => s.aborted)).toBe(true);
|
|
148
|
-
});
|
|
149
|
-
it("cancelAll() resolves active tasks as undefined without setting error()", async () => {
|
|
150
|
-
const p = pool(1, async (signal) => { await delay(10000, signal); });
|
|
151
|
-
const t = p();
|
|
152
|
-
await Promise.resolve();
|
|
153
|
-
p.cancelAll();
|
|
154
|
-
expect(await t).toBeUndefined();
|
|
155
|
-
expect(p.error()).toBeNull();
|
|
156
|
-
expect(p.active()).toBe(0);
|
|
157
|
-
});
|
|
158
|
-
it("cancelAll() resolves pending tasks as undefined", async () => {
|
|
159
|
-
let resolveFirst;
|
|
160
|
-
const p = pool(1, async (signal, idx) => {
|
|
161
|
-
void signal;
|
|
162
|
-
if (idx === 0)
|
|
163
|
-
await new Promise((r) => { resolveFirst = r; });
|
|
164
|
-
});
|
|
165
|
-
const t1 = p(0);
|
|
166
|
-
const t2 = p(1);
|
|
167
|
-
const t3 = p(2);
|
|
168
|
-
await Promise.resolve();
|
|
169
|
-
p.cancelAll();
|
|
170
|
-
resolveFirst();
|
|
171
|
-
const [r1, r2, r3] = await Promise.all([t1, t2, t3]);
|
|
172
|
-
expect(r1).toBeUndefined();
|
|
173
|
-
expect(r2).toBeUndefined();
|
|
174
|
-
expect(r3).toBeUndefined();
|
|
175
|
-
expect(p.pending()).toBe(0);
|
|
176
|
-
expect(p.error()).toBeNull();
|
|
177
|
-
});
|
|
178
|
-
it("cancelAll() then new runs work normally", async () => {
|
|
179
|
-
let resolve;
|
|
180
|
-
const p = pool(1, async (signal, which) => {
|
|
181
|
-
void signal;
|
|
182
|
-
if (which === "stale")
|
|
183
|
-
await new Promise((r) => { resolve = r; });
|
|
184
|
-
return which;
|
|
185
|
-
});
|
|
186
|
-
const stale = p("stale");
|
|
187
|
-
await Promise.resolve();
|
|
188
|
-
p.cancelAll();
|
|
189
|
-
resolve();
|
|
190
|
-
await stale;
|
|
191
|
-
expect(await p("fresh")).toBe("fresh");
|
|
192
|
-
expect(p.active()).toBe(0);
|
|
193
|
-
expect(p.error()).toBeNull();
|
|
194
|
-
});
|
|
195
|
-
});
|
|
196
|
-
//# sourceMappingURL=pool.test.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"pool.test.js","sourceRoot":"","sources":["../../src/__tests__/pool.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"queue.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/queue.test.ts"],"names":[],"mappings":""}
|