rexfect 0.0.7
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/README.md +1756 -0
- package/dist/abortableContext.d.ts +3 -0
- package/dist/abortableContext.d.ts.map +1 -0
- package/dist/abortableContext.js +48 -0
- package/dist/abortableContext.js.map +1 -0
- package/dist/action.d.ts +64 -0
- package/dist/action.d.ts.map +1 -0
- package/dist/action.js +208 -0
- package/dist/action.js.map +1 -0
- package/dist/action.test.d.ts +2 -0
- package/dist/action.test.d.ts.map +1 -0
- package/dist/action.test.js +189 -0
- package/dist/action.test.js.map +1 -0
- package/dist/async/abortable-guard.d.ts +25 -0
- package/dist/async/abortable-guard.d.ts.map +1 -0
- package/dist/async/abortable-guard.js +33 -0
- package/dist/async/abortable-guard.js.map +1 -0
- package/dist/async/abortable.d.ts +331 -0
- package/dist/async/abortable.d.ts.map +1 -0
- package/dist/async/abortable.js +410 -0
- package/dist/async/abortable.js.map +1 -0
- package/dist/async/abortable.test.d.ts +2 -0
- package/dist/async/abortable.test.d.ts.map +1 -0
- package/dist/async/abortable.test.js +535 -0
- package/dist/async/abortable.test.js.map +1 -0
- package/dist/async/abortable.typeCheck.d.ts +8 -0
- package/dist/async/abortable.typeCheck.d.ts.map +1 -0
- package/dist/async/abortable.typeCheck.js +138 -0
- package/dist/async/abortable.typeCheck.js.map +1 -0
- package/dist/async/async.d.ts +18 -0
- package/dist/async/async.d.ts.map +1 -0
- package/dist/async/async.js +20 -0
- package/dist/async/async.js.map +1 -0
- package/dist/async/index.d.ts +15 -0
- package/dist/async/index.d.ts.map +1 -0
- package/dist/async/index.js +13 -0
- package/dist/async/index.js.map +1 -0
- package/dist/async/loadable.d.ts +7 -0
- package/dist/async/loadable.d.ts.map +1 -0
- package/dist/async/loadable.js +52 -0
- package/dist/async/loadable.js.map +1 -0
- package/dist/async/loadable.test.d.ts +2 -0
- package/dist/async/loadable.test.d.ts.map +1 -0
- package/dist/async/loadable.test.js +322 -0
- package/dist/async/loadable.test.js.map +1 -0
- package/dist/async/promiseCache.d.ts +14 -0
- package/dist/async/promiseCache.d.ts.map +1 -0
- package/dist/async/promiseCache.js +29 -0
- package/dist/async/promiseCache.js.map +1 -0
- package/dist/async/read.d.ts +120 -0
- package/dist/async/read.d.ts.map +1 -0
- package/dist/async/read.js +286 -0
- package/dist/async/read.js.map +1 -0
- package/dist/async/read.test.d.ts +2 -0
- package/dist/async/read.test.d.ts.map +1 -0
- package/dist/async/read.test.js +419 -0
- package/dist/async/read.test.js.map +1 -0
- package/dist/async/read.typeCheck.d.ts +6 -0
- package/dist/async/read.typeCheck.d.ts.map +1 -0
- package/dist/async/read.typeCheck.js +101 -0
- package/dist/async/read.typeCheck.js.map +1 -0
- package/dist/async/safe.d.ts +230 -0
- package/dist/async/safe.d.ts.map +1 -0
- package/dist/async/safe.js +247 -0
- package/dist/async/safe.js.map +1 -0
- package/dist/async/safe.test.d.ts +2 -0
- package/dist/async/safe.test.d.ts.map +1 -0
- package/dist/async/safe.test.js +447 -0
- package/dist/async/safe.test.js.map +1 -0
- package/dist/async/utils.d.ts +17 -0
- package/dist/async/utils.d.ts.map +1 -0
- package/dist/async/utils.js +38 -0
- package/dist/async/utils.js.map +1 -0
- package/dist/async/wait.d.ts +120 -0
- package/dist/async/wait.d.ts.map +1 -0
- package/dist/async/wait.js +112 -0
- package/dist/async/wait.js.map +1 -0
- package/dist/async/wait.test.d.ts +2 -0
- package/dist/async/wait.test.d.ts.map +1 -0
- package/dist/async/wait.test.js +122 -0
- package/dist/async/wait.test.js.map +1 -0
- package/dist/async/wait.typeCheck.d.ts +6 -0
- package/dist/async/wait.typeCheck.d.ts.map +1 -0
- package/dist/async/wait.typeCheck.js +104 -0
- package/dist/async/wait.typeCheck.js.map +1 -0
- package/dist/atom.d.ts +46 -0
- package/dist/atom.d.ts.map +1 -0
- package/dist/atom.js +86 -0
- package/dist/atom.js.map +1 -0
- package/dist/atom.test.d.ts +2 -0
- package/dist/atom.test.d.ts.map +1 -0
- package/dist/atom.test.js +75 -0
- package/dist/atom.test.js.map +1 -0
- package/dist/batch.d.ts +15 -0
- package/dist/batch.d.ts.map +1 -0
- package/dist/batch.js +45 -0
- package/dist/batch.js.map +1 -0
- package/dist/defer.d.ts +56 -0
- package/dist/defer.d.ts.map +1 -0
- package/dist/defer.js +49 -0
- package/dist/defer.js.map +1 -0
- package/dist/effect.d.ts +91 -0
- package/dist/effect.d.ts.map +1 -0
- package/dist/effect.js +311 -0
- package/dist/effect.js.map +1 -0
- package/dist/effect.test.d.ts +2 -0
- package/dist/effect.test.d.ts.map +1 -0
- package/dist/effect.test.js +123 -0
- package/dist/effect.test.js.map +1 -0
- package/dist/emitter.d.ts +129 -0
- package/dist/emitter.d.ts.map +1 -0
- package/dist/emitter.js +164 -0
- package/dist/emitter.js.map +1 -0
- package/dist/emitter.test.d.ts +2 -0
- package/dist/emitter.test.d.ts.map +1 -0
- package/dist/emitter.test.js +259 -0
- package/dist/emitter.test.js.map +1 -0
- package/dist/equality.d.ts +66 -0
- package/dist/equality.d.ts.map +1 -0
- package/dist/equality.js +145 -0
- package/dist/equality.js.map +1 -0
- package/dist/event.d.ts +18 -0
- package/dist/event.d.ts.map +1 -0
- package/dist/event.js +166 -0
- package/dist/event.js.map +1 -0
- package/dist/event.test.d.ts +2 -0
- package/dist/event.test.d.ts.map +1 -0
- package/dist/event.test.js +167 -0
- package/dist/event.test.js.map +1 -0
- package/dist/hooks.d.ts +152 -0
- package/dist/hooks.d.ts.map +1 -0
- package/dist/hooks.js +122 -0
- package/dist/hooks.js.map +1 -0
- package/dist/hooks.test.d.ts +2 -0
- package/dist/hooks.test.d.ts.map +1 -0
- package/dist/hooks.test.js +99 -0
- package/dist/hooks.test.js.map +1 -0
- package/dist/index.d.ts +33 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +35 -0
- package/dist/index.js.map +1 -0
- package/dist/isPromiseLike.d.ts +10 -0
- package/dist/isPromiseLike.d.ts.map +1 -0
- package/dist/isPromiseLike.js +15 -0
- package/dist/isPromiseLike.js.map +1 -0
- package/dist/pick.d.ts +22 -0
- package/dist/pick.d.ts.map +1 -0
- package/dist/pick.js +46 -0
- package/dist/pick.js.map +1 -0
- package/dist/react/index.d.ts +8 -0
- package/dist/react/index.d.ts.map +1 -0
- package/dist/react/index.js +8 -0
- package/dist/react/index.js.map +1 -0
- package/dist/react/useRx.d.ts +14 -0
- package/dist/react/useRx.d.ts.map +1 -0
- package/dist/react/useRx.js +110 -0
- package/dist/react/useRx.js.map +1 -0
- package/dist/react/useRx.test.d.ts +2 -0
- package/dist/react/useRx.test.d.ts.map +1 -0
- package/dist/react/useRx.test.js +457 -0
- package/dist/react/useRx.test.js.map +1 -0
- package/dist/strictModeTest.d.ts +11 -0
- package/dist/strictModeTest.d.ts.map +1 -0
- package/dist/strictModeTest.js +41 -0
- package/dist/strictModeTest.js.map +1 -0
- package/dist/types.d.ts +606 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +5 -0
- package/dist/types.js.map +1 -0
- package/dist/untrack.d.ts +14 -0
- package/dist/untrack.d.ts.map +1 -0
- package/dist/untrack.js +17 -0
- package/dist/untrack.js.map +1 -0
- package/dist/utils/withUse.d.ts +10 -0
- package/dist/utils/withUse.d.ts.map +1 -0
- package/dist/utils/withUse.js +21 -0
- package/dist/utils/withUse.js.map +1 -0
- package/dist/utils/withUse.test.d.ts +2 -0
- package/dist/utils/withUse.test.d.ts.map +1 -0
- package/dist/utils/withUse.test.js +233 -0
- package/dist/utils/withUse.test.js.map +1 -0
- package/dist/utils.d.ts +7 -0
- package/dist/utils.d.ts.map +1 -0
- package/dist/utils.js +7 -0
- package/dist/utils.js.map +1 -0
- package/dist/utils.test.d.ts +2 -0
- package/dist/utils.test.d.ts.map +1 -0
- package/dist/utils.test.js +119 -0
- package/dist/utils.test.js.map +1 -0
- package/package.json +64 -0
|
@@ -0,0 +1,419 @@
|
|
|
1
|
+
import { describe, it, expect } from "vitest";
|
|
2
|
+
import { atom } from "../atom";
|
|
3
|
+
import { read } from "./read";
|
|
4
|
+
// Helper to create rejected promise without unhandled rejection warning
|
|
5
|
+
function rejectedPromise(error) {
|
|
6
|
+
// Delay rejection to allow handlers to be attached first
|
|
7
|
+
return new Promise((_, reject) => queueMicrotask(() => reject(error)));
|
|
8
|
+
}
|
|
9
|
+
// Helper to suppress unhandled rejection from thrown Suspense promises
|
|
10
|
+
function suppressSuspense(fn) {
|
|
11
|
+
try {
|
|
12
|
+
fn();
|
|
13
|
+
}
|
|
14
|
+
catch (e) {
|
|
15
|
+
if (e instanceof Promise) {
|
|
16
|
+
e.catch(() => { }); // Suppress unhandled rejection
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
describe("read", () => {
|
|
21
|
+
describe("read(signal)", () => {
|
|
22
|
+
it("should throw promise for pending state (Suspense)", () => {
|
|
23
|
+
const [promise] = atom(new Promise(() => { })); // never resolves
|
|
24
|
+
expect(() => read(promise)).toThrow();
|
|
25
|
+
});
|
|
26
|
+
it("should return value for resolved promise", async () => {
|
|
27
|
+
const [promise] = atom(Promise.resolve("hello"));
|
|
28
|
+
// First call to initialize tracking (will throw for Suspense)
|
|
29
|
+
suppressSuspense(() => read(promise));
|
|
30
|
+
// Wait for promise to settle and tracking to update
|
|
31
|
+
await new Promise((r) => setTimeout(r, 10));
|
|
32
|
+
const result = read(promise);
|
|
33
|
+
expect(result).toBe("hello");
|
|
34
|
+
});
|
|
35
|
+
it("should throw error for rejected promise", async () => {
|
|
36
|
+
const error = new Error("test error");
|
|
37
|
+
const [promise] = atom(rejectedPromise(error));
|
|
38
|
+
// First call to initialize tracking
|
|
39
|
+
suppressSuspense(() => read(promise));
|
|
40
|
+
// Wait for promise to settle
|
|
41
|
+
await new Promise((r) => setTimeout(r, 10));
|
|
42
|
+
expect(() => read(promise)).toThrow(error);
|
|
43
|
+
});
|
|
44
|
+
});
|
|
45
|
+
describe("read.all", () => {
|
|
46
|
+
it("should throw promise if any is pending (array)", () => {
|
|
47
|
+
const [p1] = atom(Promise.resolve(1));
|
|
48
|
+
const [p2] = atom(new Promise(() => { })); // never resolves
|
|
49
|
+
expect(() => read.all([p1, p2])).toThrow();
|
|
50
|
+
});
|
|
51
|
+
it("should return all values when all resolved (array)", async () => {
|
|
52
|
+
const [p1] = atom(Promise.resolve(1));
|
|
53
|
+
const [p2] = atom(Promise.resolve("two"));
|
|
54
|
+
// First call to initialize tracking
|
|
55
|
+
suppressSuspense(() => read.all([p1, p2]));
|
|
56
|
+
// Wait for promises to settle
|
|
57
|
+
await new Promise((r) => setTimeout(r, 10));
|
|
58
|
+
const result = read.all([p1, p2]);
|
|
59
|
+
expect(result).toEqual([1, "two"]);
|
|
60
|
+
});
|
|
61
|
+
it("should return object when given object input", async () => {
|
|
62
|
+
const [p1] = atom(Promise.resolve(1));
|
|
63
|
+
const [p2] = atom(Promise.resolve("two"));
|
|
64
|
+
suppressSuspense(() => read.all({ num: p1, str: p2 }));
|
|
65
|
+
await new Promise((r) => setTimeout(r, 10));
|
|
66
|
+
const result = read.all({ num: p1, str: p2 });
|
|
67
|
+
expect(result).toEqual({ num: 1, str: "two" });
|
|
68
|
+
});
|
|
69
|
+
it("should throw first error if any rejected (array)", async () => {
|
|
70
|
+
const error = new Error("test error");
|
|
71
|
+
const [p1] = atom(Promise.resolve(1));
|
|
72
|
+
const [p2] = atom(rejectedPromise(error));
|
|
73
|
+
// First call to initialize tracking
|
|
74
|
+
suppressSuspense(() => read.all([p1, p2]));
|
|
75
|
+
// Wait for promises to settle
|
|
76
|
+
await new Promise((r) => setTimeout(r, 10));
|
|
77
|
+
expect(() => read.all([p1, p2])).toThrow(error);
|
|
78
|
+
});
|
|
79
|
+
it("should throw Promise.all of all pending promises (not one by one)", async () => {
|
|
80
|
+
let resolve1;
|
|
81
|
+
let resolve2;
|
|
82
|
+
let resolve3;
|
|
83
|
+
const p1 = new Promise((r) => (resolve1 = r));
|
|
84
|
+
const p2 = new Promise((r) => (resolve2 = r));
|
|
85
|
+
const p3 = new Promise((r) => (resolve3 = r));
|
|
86
|
+
const [s1] = atom(p1);
|
|
87
|
+
const [s2] = atom(p2);
|
|
88
|
+
const [s3] = atom(p3);
|
|
89
|
+
// First call should throw a combined Promise
|
|
90
|
+
let thrownPromise = null;
|
|
91
|
+
try {
|
|
92
|
+
read.all([s1, s2, s3]);
|
|
93
|
+
}
|
|
94
|
+
catch (e) {
|
|
95
|
+
thrownPromise = e;
|
|
96
|
+
}
|
|
97
|
+
expect(thrownPromise).toBeInstanceOf(Promise);
|
|
98
|
+
// Resolve all promises
|
|
99
|
+
resolve1(1);
|
|
100
|
+
resolve2("two");
|
|
101
|
+
resolve3(true);
|
|
102
|
+
// Wait for the combined promise to resolve
|
|
103
|
+
await thrownPromise;
|
|
104
|
+
// Now all should be available
|
|
105
|
+
await new Promise((r) => setTimeout(r, 10));
|
|
106
|
+
const result = read.all([s1, s2, s3]);
|
|
107
|
+
expect(result).toEqual([1, "two", true]);
|
|
108
|
+
});
|
|
109
|
+
it("should throw AggregateError when multiple promises reject", async () => {
|
|
110
|
+
const error1 = new Error("error1");
|
|
111
|
+
const error2 = new Error("error2");
|
|
112
|
+
const [p1] = atom(rejectedPromise(error1));
|
|
113
|
+
const [p2] = atom(rejectedPromise(error2));
|
|
114
|
+
// First call to initialize tracking
|
|
115
|
+
suppressSuspense(() => read.all([p1, p2]));
|
|
116
|
+
// Wait for promises to settle
|
|
117
|
+
await new Promise((r) => setTimeout(r, 10));
|
|
118
|
+
expect(() => read.all([p1, p2])).toThrow(AggregateError);
|
|
119
|
+
try {
|
|
120
|
+
read.all([p1, p2]);
|
|
121
|
+
}
|
|
122
|
+
catch (e) {
|
|
123
|
+
expect(e).toBeInstanceOf(AggregateError);
|
|
124
|
+
expect(e.errors).toHaveLength(2);
|
|
125
|
+
expect(e.errors).toContain(error1);
|
|
126
|
+
expect(e.errors).toContain(error2);
|
|
127
|
+
}
|
|
128
|
+
});
|
|
129
|
+
it("should throw single error when only one promise rejects", async () => {
|
|
130
|
+
const error = new Error("single error");
|
|
131
|
+
const [p1] = atom(Promise.resolve(1));
|
|
132
|
+
const [p2] = atom(rejectedPromise(error));
|
|
133
|
+
suppressSuspense(() => read.all([p1, p2]));
|
|
134
|
+
await new Promise((r) => setTimeout(r, 10));
|
|
135
|
+
expect(() => read.all([p1, p2])).toThrow(error);
|
|
136
|
+
expect(() => read.all([p1, p2])).not.toThrow(AggregateError);
|
|
137
|
+
});
|
|
138
|
+
it("should throw single error for object input when only one promise rejects", async () => {
|
|
139
|
+
const error = new Error("obj single error");
|
|
140
|
+
const [p1] = atom(Promise.resolve(1));
|
|
141
|
+
const [p2] = atom(rejectedPromise(error));
|
|
142
|
+
suppressSuspense(() => read.all({ success: p1, fail: p2 }));
|
|
143
|
+
await new Promise((r) => setTimeout(r, 10));
|
|
144
|
+
expect(() => read.all({ success: p1, fail: p2 })).toThrow(error);
|
|
145
|
+
expect(() => read.all({ success: p1, fail: p2 })).not.toThrow(AggregateError);
|
|
146
|
+
});
|
|
147
|
+
it("should throw AggregateError for object input when multiple promises reject", async () => {
|
|
148
|
+
const error1 = new Error("obj error1");
|
|
149
|
+
const error2 = new Error("obj error2");
|
|
150
|
+
const [p1] = atom(rejectedPromise(error1));
|
|
151
|
+
const [p2] = atom(rejectedPromise(error2));
|
|
152
|
+
suppressSuspense(() => read.all({ a: p1, b: p2 }));
|
|
153
|
+
await new Promise((r) => setTimeout(r, 10));
|
|
154
|
+
expect(() => read.all({ a: p1, b: p2 })).toThrow(AggregateError);
|
|
155
|
+
try {
|
|
156
|
+
read.all({ a: p1, b: p2 });
|
|
157
|
+
}
|
|
158
|
+
catch (e) {
|
|
159
|
+
expect(e).toBeInstanceOf(AggregateError);
|
|
160
|
+
expect(e.errors).toHaveLength(2);
|
|
161
|
+
expect(e.errors).toContain(error1);
|
|
162
|
+
expect(e.errors).toContain(error2);
|
|
163
|
+
}
|
|
164
|
+
});
|
|
165
|
+
});
|
|
166
|
+
describe("read.race", () => {
|
|
167
|
+
it("should return first resolved value (array)", async () => {
|
|
168
|
+
const [p1] = atom(new Promise(() => { })); // never resolves
|
|
169
|
+
const [p2] = atom(Promise.resolve("second"));
|
|
170
|
+
// First call to initialize tracking
|
|
171
|
+
suppressSuspense(() => read.race([p1, p2]));
|
|
172
|
+
// Wait for p2 to settle
|
|
173
|
+
await new Promise((r) => setTimeout(r, 10));
|
|
174
|
+
const result = read.race([p1, p2]);
|
|
175
|
+
expect(result).toBe("second");
|
|
176
|
+
});
|
|
177
|
+
it("should return [winner, value] tuple for object input", async () => {
|
|
178
|
+
const [p1] = atom(new Promise(() => { })); // never resolves
|
|
179
|
+
const [p2] = atom(Promise.resolve("winner"));
|
|
180
|
+
suppressSuspense(() => read.race({ slow: p1, fast: p2 }));
|
|
181
|
+
await new Promise((r) => setTimeout(r, 10));
|
|
182
|
+
const result = read.race({ slow: p1, fast: p2 });
|
|
183
|
+
expect(result).toEqual(["fast", "winner"]);
|
|
184
|
+
});
|
|
185
|
+
it("should throw first promise when all are pending (array)", async () => {
|
|
186
|
+
// Create promises that never resolve
|
|
187
|
+
const p1 = new Promise(() => { });
|
|
188
|
+
const p2 = new Promise(() => { });
|
|
189
|
+
const [s1] = atom(p1);
|
|
190
|
+
const [s2] = atom(p2);
|
|
191
|
+
// First call should throw the first promise
|
|
192
|
+
let thrownPromise = null;
|
|
193
|
+
try {
|
|
194
|
+
read.race([s1, s2]);
|
|
195
|
+
}
|
|
196
|
+
catch (e) {
|
|
197
|
+
thrownPromise = e;
|
|
198
|
+
}
|
|
199
|
+
// Should throw the first promise (p1)
|
|
200
|
+
expect(thrownPromise).toBe(p1);
|
|
201
|
+
});
|
|
202
|
+
it("should throw first promise when all are pending (object)", async () => {
|
|
203
|
+
// Create promises that never resolve
|
|
204
|
+
const p1 = new Promise(() => { });
|
|
205
|
+
const p2 = new Promise(() => { });
|
|
206
|
+
const [s1] = atom(p1);
|
|
207
|
+
const [s2] = atom(p2);
|
|
208
|
+
// First call should throw the first promise
|
|
209
|
+
let thrownPromise = null;
|
|
210
|
+
try {
|
|
211
|
+
read.race({ first: s1, second: s2 });
|
|
212
|
+
}
|
|
213
|
+
catch (e) {
|
|
214
|
+
thrownPromise = e;
|
|
215
|
+
}
|
|
216
|
+
// Should throw the first promise (p1)
|
|
217
|
+
expect(thrownPromise).toBe(p1);
|
|
218
|
+
});
|
|
219
|
+
it("should throw error for first rejected promise (array)", async () => {
|
|
220
|
+
const error = new Error("race error");
|
|
221
|
+
const [p1] = atom(rejectedPromise(error));
|
|
222
|
+
const [p2] = atom(new Promise(() => { })); // never resolves
|
|
223
|
+
// First call to initialize tracking
|
|
224
|
+
suppressSuspense(() => read.race([p1, p2]));
|
|
225
|
+
// Wait for rejection
|
|
226
|
+
await new Promise((r) => setTimeout(r, 10));
|
|
227
|
+
expect(() => read.race([p1, p2])).toThrow(error);
|
|
228
|
+
});
|
|
229
|
+
it("should throw error for first rejected promise (object)", async () => {
|
|
230
|
+
const error = new Error("race error object");
|
|
231
|
+
const [p1] = atom(rejectedPromise(error));
|
|
232
|
+
const [p2] = atom(new Promise(() => { })); // never resolves
|
|
233
|
+
// First call to initialize tracking
|
|
234
|
+
suppressSuspense(() => read.race({ fail: p1, pending: p2 }));
|
|
235
|
+
// Wait for rejection
|
|
236
|
+
await new Promise((r) => setTimeout(r, 10));
|
|
237
|
+
expect(() => read.race({ fail: p1, pending: p2 })).toThrow(error);
|
|
238
|
+
});
|
|
239
|
+
});
|
|
240
|
+
describe("read.settled", () => {
|
|
241
|
+
it("should return all results (fulfilled and rejected) - array", async () => {
|
|
242
|
+
const error = new Error("test");
|
|
243
|
+
const [p1] = atom(Promise.resolve(1));
|
|
244
|
+
const [p2] = atom(rejectedPromise(error));
|
|
245
|
+
// First call to initialize tracking
|
|
246
|
+
suppressSuspense(() => read.settled([p1, p2]));
|
|
247
|
+
// Wait for promises to settle
|
|
248
|
+
await new Promise((r) => setTimeout(r, 10));
|
|
249
|
+
const results = read.settled([p1, p2]);
|
|
250
|
+
expect(results[0]).toEqual({ status: "fulfilled", value: 1 });
|
|
251
|
+
expect(results[1]).toEqual({ status: "rejected", reason: error });
|
|
252
|
+
});
|
|
253
|
+
it("should return object with PromiseSettledResult values", async () => {
|
|
254
|
+
const error = new Error("test");
|
|
255
|
+
const [p1] = atom(Promise.resolve(1));
|
|
256
|
+
const [p2] = atom(rejectedPromise(error));
|
|
257
|
+
suppressSuspense(() => read.settled({ success: p1, fail: p2 }));
|
|
258
|
+
await new Promise((r) => setTimeout(r, 10));
|
|
259
|
+
const results = read.settled({ success: p1, fail: p2 });
|
|
260
|
+
expect(results.success).toEqual({ status: "fulfilled", value: 1 });
|
|
261
|
+
expect(results.fail).toEqual({ status: "rejected", reason: error });
|
|
262
|
+
});
|
|
263
|
+
it("should throw Promise.all of all pending promises (not one by one)", async () => {
|
|
264
|
+
let resolve1;
|
|
265
|
+
let resolve2;
|
|
266
|
+
const p1 = new Promise((r) => (resolve1 = r));
|
|
267
|
+
const p2 = new Promise((r) => (resolve2 = r));
|
|
268
|
+
const [s1] = atom(p1);
|
|
269
|
+
const [s2] = atom(p2);
|
|
270
|
+
// First call should throw a combined Promise
|
|
271
|
+
let thrownPromise = null;
|
|
272
|
+
try {
|
|
273
|
+
read.settled([s1, s2]);
|
|
274
|
+
}
|
|
275
|
+
catch (e) {
|
|
276
|
+
thrownPromise = e;
|
|
277
|
+
}
|
|
278
|
+
expect(thrownPromise).toBeInstanceOf(Promise);
|
|
279
|
+
// Resolve all promises
|
|
280
|
+
resolve1(1);
|
|
281
|
+
resolve2("two");
|
|
282
|
+
// Wait for the combined promise to resolve
|
|
283
|
+
await thrownPromise;
|
|
284
|
+
// Now all should be available
|
|
285
|
+
await new Promise((r) => setTimeout(r, 10));
|
|
286
|
+
const result = read.settled([s1, s2]);
|
|
287
|
+
expect(result).toEqual([
|
|
288
|
+
{ status: "fulfilled", value: 1 },
|
|
289
|
+
{ status: "fulfilled", value: "two" },
|
|
290
|
+
]);
|
|
291
|
+
});
|
|
292
|
+
});
|
|
293
|
+
describe("read.any", () => {
|
|
294
|
+
it("should return first successful value (array)", async () => {
|
|
295
|
+
const [p1] = atom(rejectedPromise(new Error("error")));
|
|
296
|
+
const [p2] = atom(Promise.resolve("success"));
|
|
297
|
+
// First call to initialize tracking
|
|
298
|
+
suppressSuspense(() => read.any([p1, p2]));
|
|
299
|
+
// Wait for promises to settle
|
|
300
|
+
await new Promise((r) => setTimeout(r, 10));
|
|
301
|
+
const result = read.any([p1, p2]);
|
|
302
|
+
expect(result).toBe("success");
|
|
303
|
+
});
|
|
304
|
+
it("should return [winner, value] tuple for object input", async () => {
|
|
305
|
+
const [p1] = atom(rejectedPromise(new Error("error")));
|
|
306
|
+
const [p2] = atom(Promise.resolve("success"));
|
|
307
|
+
suppressSuspense(() => read.any({ fail: p1, win: p2 }));
|
|
308
|
+
await new Promise((r) => setTimeout(r, 10));
|
|
309
|
+
const result = read.any({ fail: p1, win: p2 });
|
|
310
|
+
expect(result).toEqual(["win", "success"]);
|
|
311
|
+
});
|
|
312
|
+
it("should throw AggregateError if all reject", async () => {
|
|
313
|
+
const [p1] = atom(rejectedPromise(new Error("error1")));
|
|
314
|
+
const [p2] = atom(rejectedPromise(new Error("error2")));
|
|
315
|
+
// First call to initialize tracking
|
|
316
|
+
suppressSuspense(() => read.any([p1, p2]));
|
|
317
|
+
// Wait for promises to settle
|
|
318
|
+
await new Promise((r) => setTimeout(r, 10));
|
|
319
|
+
expect(() => read.any([p1, p2])).toThrow(AggregateError);
|
|
320
|
+
});
|
|
321
|
+
it("should throw Promise when pending promises exist", () => {
|
|
322
|
+
const [s1] = atom(new Promise(() => { }));
|
|
323
|
+
const [s2] = atom(new Promise(() => { }));
|
|
324
|
+
let thrownValue = null;
|
|
325
|
+
try {
|
|
326
|
+
read.any([s1, s2]);
|
|
327
|
+
}
|
|
328
|
+
catch (e) {
|
|
329
|
+
thrownValue = e;
|
|
330
|
+
}
|
|
331
|
+
// Should throw a Promise (for Suspense)
|
|
332
|
+
expect(thrownValue).toBeInstanceOf(Promise);
|
|
333
|
+
});
|
|
334
|
+
it("should return first fulfilled value immediately (array) - covers lines 441-445", async () => {
|
|
335
|
+
// Create a resolved promise (will be first fulfilled)
|
|
336
|
+
const [p1] = atom(Promise.resolve("first-success"));
|
|
337
|
+
// Second one is pending
|
|
338
|
+
const [p2] = atom(new Promise(() => { }));
|
|
339
|
+
// Initialize tracking
|
|
340
|
+
suppressSuspense(() => read.any([p1, p2]));
|
|
341
|
+
// Wait for p1 to settle
|
|
342
|
+
await new Promise((r) => setTimeout(r, 10));
|
|
343
|
+
// Now should return the fulfilled value directly
|
|
344
|
+
const result = read.any([p1, p2]);
|
|
345
|
+
expect(result).toBe("first-success");
|
|
346
|
+
});
|
|
347
|
+
it("should return first fulfilled value even if before rejected (array)", async () => {
|
|
348
|
+
// First is fulfilled
|
|
349
|
+
const [p1] = atom(Promise.resolve("winner"));
|
|
350
|
+
// Second is rejected
|
|
351
|
+
const [p2] = atom(rejectedPromise(new Error("loser")));
|
|
352
|
+
suppressSuspense(() => read.any([p1, p2]));
|
|
353
|
+
await new Promise((r) => setTimeout(r, 10));
|
|
354
|
+
const result = read.any([p1, p2]);
|
|
355
|
+
expect(result).toBe("winner");
|
|
356
|
+
});
|
|
357
|
+
it("should return first fulfilled value even if before rejected (object)", async () => {
|
|
358
|
+
// First is fulfilled
|
|
359
|
+
const [p1] = atom(Promise.resolve("winner-obj"));
|
|
360
|
+
// Second is rejected
|
|
361
|
+
const [p2] = atom(rejectedPromise(new Error("loser")));
|
|
362
|
+
suppressSuspense(() => read.any({ win: p1, lose: p2 }));
|
|
363
|
+
await new Promise((r) => setTimeout(r, 10));
|
|
364
|
+
const result = read.any({ win: p1, lose: p2 });
|
|
365
|
+
expect(result).toEqual(["win", "winner-obj"]);
|
|
366
|
+
});
|
|
367
|
+
it("should throw AggregateError with all errors when all reject (object)", async () => {
|
|
368
|
+
const error1 = new Error("obj-err-1");
|
|
369
|
+
const error2 = new Error("obj-err-2");
|
|
370
|
+
const [p1] = atom(rejectedPromise(error1));
|
|
371
|
+
const [p2] = atom(rejectedPromise(error2));
|
|
372
|
+
suppressSuspense(() => read.any({ a: p1, b: p2 }));
|
|
373
|
+
await new Promise((r) => setTimeout(r, 10));
|
|
374
|
+
expect(() => read.any({ a: p1, b: p2 })).toThrow(AggregateError);
|
|
375
|
+
try {
|
|
376
|
+
read.any({ a: p1, b: p2 });
|
|
377
|
+
}
|
|
378
|
+
catch (e) {
|
|
379
|
+
expect(e).toBeInstanceOf(AggregateError);
|
|
380
|
+
expect(e.errors).toContain(error1);
|
|
381
|
+
expect(e.errors).toContain(error2);
|
|
382
|
+
}
|
|
383
|
+
});
|
|
384
|
+
it("should throw Promise.all when some pending and none fulfilled yet (array)", () => {
|
|
385
|
+
// One pending, one rejected
|
|
386
|
+
const [p1] = atom(new Promise(() => { })); // pending
|
|
387
|
+
const rejected = rejectedPromise(new Error("rej"));
|
|
388
|
+
const [p2] = atom(rejected);
|
|
389
|
+
// Need to wait for rejected to settle first
|
|
390
|
+
// But since p1 is pending and we have no fulfilled, it should throw Promise.all of pending
|
|
391
|
+
let thrownPromise = null;
|
|
392
|
+
try {
|
|
393
|
+
read.any([p1, p2]);
|
|
394
|
+
}
|
|
395
|
+
catch (e) {
|
|
396
|
+
thrownPromise = e;
|
|
397
|
+
// Suppress unhandled rejection from the thrown Promise.all
|
|
398
|
+
thrownPromise.catch(() => { });
|
|
399
|
+
}
|
|
400
|
+
expect(thrownPromise).toBeInstanceOf(Promise);
|
|
401
|
+
});
|
|
402
|
+
it("should throw Promise.all when some pending and none fulfilled yet (object)", () => {
|
|
403
|
+
const [p1] = atom(new Promise(() => { })); // pending
|
|
404
|
+
const rejected = rejectedPromise(new Error("rej"));
|
|
405
|
+
const [p2] = atom(rejected);
|
|
406
|
+
let thrownPromise = null;
|
|
407
|
+
try {
|
|
408
|
+
read.any({ pending: p1, rej: p2 });
|
|
409
|
+
}
|
|
410
|
+
catch (e) {
|
|
411
|
+
thrownPromise = e;
|
|
412
|
+
// Suppress unhandled rejection from the thrown Promise.all
|
|
413
|
+
thrownPromise.catch(() => { });
|
|
414
|
+
}
|
|
415
|
+
expect(thrownPromise).toBeInstanceOf(Promise);
|
|
416
|
+
});
|
|
417
|
+
});
|
|
418
|
+
});
|
|
419
|
+
//# sourceMappingURL=read.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"read.test.js","sourceRoot":"","sources":["../../src/async/read.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"read.typeCheck.d.ts","sourceRoot":"","sources":["../../src/async/read.typeCheck.ts"],"names":[],"mappings":"AAAA;;;GAGG"}
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Type-level tests for read API (Suspense mode).
|
|
3
|
+
* This file is only for compile-time type checking - not executed at runtime.
|
|
4
|
+
*/
|
|
5
|
+
import { read } from "./read";
|
|
6
|
+
// ============================================================================
|
|
7
|
+
// read(signal) - Single input
|
|
8
|
+
// ============================================================================
|
|
9
|
+
consume(read(stringSignal));
|
|
10
|
+
consume(read(numberSignal));
|
|
11
|
+
// ============================================================================
|
|
12
|
+
// read.all - Array form
|
|
13
|
+
// ============================================================================
|
|
14
|
+
{
|
|
15
|
+
const result = read.all([stringSignal, numberSignal]);
|
|
16
|
+
const first = result[0];
|
|
17
|
+
const second = result[1];
|
|
18
|
+
consume(first, second);
|
|
19
|
+
}
|
|
20
|
+
// ============================================================================
|
|
21
|
+
// read.all - Object form
|
|
22
|
+
// ============================================================================
|
|
23
|
+
{
|
|
24
|
+
const result = read.all({
|
|
25
|
+
user: stringSignal,
|
|
26
|
+
count: numberSignal,
|
|
27
|
+
});
|
|
28
|
+
const user = result.user;
|
|
29
|
+
const count = result.count;
|
|
30
|
+
consume(user, count);
|
|
31
|
+
}
|
|
32
|
+
// ============================================================================
|
|
33
|
+
// read.race - Array form
|
|
34
|
+
// ============================================================================
|
|
35
|
+
{
|
|
36
|
+
const result = read.race([stringSignal, numberSignal]);
|
|
37
|
+
consume(result);
|
|
38
|
+
}
|
|
39
|
+
// ============================================================================
|
|
40
|
+
// read.race - Object form (returns [winner, value] tuple)
|
|
41
|
+
// ============================================================================
|
|
42
|
+
{
|
|
43
|
+
const result = read.race({
|
|
44
|
+
a: stringSignal,
|
|
45
|
+
b: numberSignal,
|
|
46
|
+
});
|
|
47
|
+
consume(result);
|
|
48
|
+
const [winner, value] = result;
|
|
49
|
+
if (winner === "a") {
|
|
50
|
+
consume(value);
|
|
51
|
+
}
|
|
52
|
+
else {
|
|
53
|
+
consume(value);
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
// ============================================================================
|
|
57
|
+
// read.settled - Array form
|
|
58
|
+
// ============================================================================
|
|
59
|
+
{
|
|
60
|
+
const results = read.settled([stringSignal, numberSignal]);
|
|
61
|
+
const first = results[0];
|
|
62
|
+
const second = results[1];
|
|
63
|
+
consume(first, second);
|
|
64
|
+
}
|
|
65
|
+
// ============================================================================
|
|
66
|
+
// read.settled - Object form
|
|
67
|
+
// ============================================================================
|
|
68
|
+
{
|
|
69
|
+
const results = read.settled({
|
|
70
|
+
a: stringSignal,
|
|
71
|
+
b: numberSignal,
|
|
72
|
+
});
|
|
73
|
+
const a = results.a;
|
|
74
|
+
const b = results.b;
|
|
75
|
+
consume(a, b);
|
|
76
|
+
}
|
|
77
|
+
// ============================================================================
|
|
78
|
+
// read.any - Array form
|
|
79
|
+
// ============================================================================
|
|
80
|
+
{
|
|
81
|
+
const result = read.any([stringSignal, numberSignal]);
|
|
82
|
+
consume(result);
|
|
83
|
+
}
|
|
84
|
+
// ============================================================================
|
|
85
|
+
// read.any - Object form (returns [winner, value] tuple)
|
|
86
|
+
// ============================================================================
|
|
87
|
+
{
|
|
88
|
+
const result = read.any({
|
|
89
|
+
primary: stringSignal,
|
|
90
|
+
fallback: numberSignal,
|
|
91
|
+
});
|
|
92
|
+
consume(result);
|
|
93
|
+
const [winner, value] = result;
|
|
94
|
+
if (winner === "primary") {
|
|
95
|
+
consume(value);
|
|
96
|
+
}
|
|
97
|
+
else {
|
|
98
|
+
consume(value);
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
//# sourceMappingURL=read.typeCheck.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"read.typeCheck.js","sourceRoot":"","sources":["../../src/async/read.typeCheck.ts"],"names":[],"mappings":"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"}
|