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,410 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Abortable function utilities.
|
|
3
|
+
*
|
|
4
|
+
* Creates async functions with full lifecycle control:
|
|
5
|
+
* - Pause/Resume execution
|
|
6
|
+
* - Abort with cleanup
|
|
7
|
+
* - External event injection (take/send)
|
|
8
|
+
* - Status tracking
|
|
9
|
+
*
|
|
10
|
+
* Similar to saga pattern but uses async/await instead of suspense.
|
|
11
|
+
*/
|
|
12
|
+
import { createSafe } from "./safe";
|
|
13
|
+
import { abortableSymbol, isAbortable } from "./abortable-guard";
|
|
14
|
+
// Re-export for convenience
|
|
15
|
+
export { abortableSymbol, isAbortable };
|
|
16
|
+
// =============================================================================
|
|
17
|
+
// ERROR TYPES
|
|
18
|
+
// =============================================================================
|
|
19
|
+
/**
|
|
20
|
+
* Error thrown when abortable is aborted.
|
|
21
|
+
*/
|
|
22
|
+
export class AbortableAbortedError extends Error {
|
|
23
|
+
name = "AbortableAbortedError";
|
|
24
|
+
constructor(message = "Abortable was aborted") {
|
|
25
|
+
super(message);
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
function createAbortableContext(controller, pauseState, takeState, setStatus, prevController) {
|
|
29
|
+
const signal = controller.signal;
|
|
30
|
+
// Shared checkpoint logic - checks abort and pause
|
|
31
|
+
// Used by: checkpoint(), take() (after event), safe() (after promise)
|
|
32
|
+
const checkPauseAndAbort = async () => {
|
|
33
|
+
// Check abort before pause
|
|
34
|
+
if (signal.aborted) {
|
|
35
|
+
throw new AbortableAbortedError();
|
|
36
|
+
}
|
|
37
|
+
// Wait if paused
|
|
38
|
+
if (pauseState.isPaused) {
|
|
39
|
+
setStatus("paused");
|
|
40
|
+
await new Promise((resolve) => {
|
|
41
|
+
pauseState.resumeResolve = resolve;
|
|
42
|
+
});
|
|
43
|
+
pauseState.resumeResolve = null;
|
|
44
|
+
setStatus("running");
|
|
45
|
+
}
|
|
46
|
+
// Check abort after resume (might have been aborted while paused)
|
|
47
|
+
if (signal.aborted) {
|
|
48
|
+
throw new AbortableAbortedError();
|
|
49
|
+
}
|
|
50
|
+
};
|
|
51
|
+
// Helper to chain pause/abort check after promise resolution
|
|
52
|
+
const afterCheck = async (value) => {
|
|
53
|
+
await checkPauseAndAbort();
|
|
54
|
+
return value;
|
|
55
|
+
};
|
|
56
|
+
// Join function - coordinates multiple abortable results
|
|
57
|
+
// Defined first because safe() uses it for abortable functions
|
|
58
|
+
const join = ((resultOrResults) => {
|
|
59
|
+
// Check abort before starting
|
|
60
|
+
if (signal.aborted) {
|
|
61
|
+
return Promise.reject(new AbortableAbortedError());
|
|
62
|
+
}
|
|
63
|
+
const isArray = Array.isArray(resultOrResults);
|
|
64
|
+
const results = isArray ? resultOrResults : [resultOrResults];
|
|
65
|
+
// Abort all joined results when this abortable aborts
|
|
66
|
+
const abortAll = () => {
|
|
67
|
+
for (const result of results) {
|
|
68
|
+
result.abort();
|
|
69
|
+
}
|
|
70
|
+
};
|
|
71
|
+
signal.addEventListener("abort", abortAll, { once: true });
|
|
72
|
+
// Wait for all results
|
|
73
|
+
const promise = Promise.all(results)
|
|
74
|
+
.then(async (values) => {
|
|
75
|
+
// Clean up abort listener
|
|
76
|
+
signal.removeEventListener("abort", abortAll);
|
|
77
|
+
// Check pause/abort after all complete
|
|
78
|
+
await checkPauseAndAbort();
|
|
79
|
+
return isArray ? values : values[0];
|
|
80
|
+
})
|
|
81
|
+
.catch(async (error) => {
|
|
82
|
+
// Clean up abort listener
|
|
83
|
+
signal.removeEventListener("abort", abortAll);
|
|
84
|
+
// Abort remaining results on error
|
|
85
|
+
abortAll();
|
|
86
|
+
// Re-throw as AbortableAbortedError if aborted
|
|
87
|
+
if (signal.aborted) {
|
|
88
|
+
throw new AbortableAbortedError();
|
|
89
|
+
}
|
|
90
|
+
throw error;
|
|
91
|
+
});
|
|
92
|
+
return promise;
|
|
93
|
+
});
|
|
94
|
+
// Enhanced safe() that respects pause
|
|
95
|
+
const baseSafe = createSafe(() => signal, () => signal.aborted);
|
|
96
|
+
const safeFn = async (fnOrPromise, ...args) => {
|
|
97
|
+
// If it's an abortable, use withSignal and join for proper abort propagation
|
|
98
|
+
if (isAbortable(fnOrPromise)) {
|
|
99
|
+
const abortableResult = fnOrPromise.withSignal(signal, ...args);
|
|
100
|
+
return join(abortableResult);
|
|
101
|
+
}
|
|
102
|
+
// Call the base safe for regular functions/promises
|
|
103
|
+
const result = await baseSafe(fnOrPromise, ...args);
|
|
104
|
+
// Check pause/abort after async operation completes
|
|
105
|
+
await checkPauseAndAbort();
|
|
106
|
+
return result;
|
|
107
|
+
};
|
|
108
|
+
// Attach utility methods from baseSafe (.all, .race, .settled, .any, .callback)
|
|
109
|
+
const safe = Object.assign(safeFn, {
|
|
110
|
+
all: baseSafe.all,
|
|
111
|
+
race: baseSafe.race,
|
|
112
|
+
settled: baseSafe.settled,
|
|
113
|
+
any: baseSafe.any,
|
|
114
|
+
callback: baseSafe.callback,
|
|
115
|
+
delay: baseSafe.delay,
|
|
116
|
+
});
|
|
117
|
+
const take = ((key) => {
|
|
118
|
+
const takeKey = String(key ?? "__checkpoint__");
|
|
119
|
+
// Check if aborted before waiting
|
|
120
|
+
if (signal.aborted) {
|
|
121
|
+
return Promise.reject(new AbortableAbortedError());
|
|
122
|
+
}
|
|
123
|
+
// Check if already resolved
|
|
124
|
+
const existing = takeState.pendingTakes.get(takeKey);
|
|
125
|
+
if (existing) {
|
|
126
|
+
return existing.promise.then(afterCheck);
|
|
127
|
+
}
|
|
128
|
+
// Create new pending take
|
|
129
|
+
let resolve;
|
|
130
|
+
let reject;
|
|
131
|
+
const promise = new Promise((res, rej) => {
|
|
132
|
+
resolve = res;
|
|
133
|
+
reject = rej;
|
|
134
|
+
});
|
|
135
|
+
takeState.pendingTakes.set(takeKey, {
|
|
136
|
+
resolve: resolve,
|
|
137
|
+
reject: reject,
|
|
138
|
+
promise,
|
|
139
|
+
});
|
|
140
|
+
setStatus("waiting");
|
|
141
|
+
return promise.then(afterCheck);
|
|
142
|
+
});
|
|
143
|
+
return {
|
|
144
|
+
signal,
|
|
145
|
+
safe,
|
|
146
|
+
take,
|
|
147
|
+
join,
|
|
148
|
+
aborted: () => signal.aborted,
|
|
149
|
+
abort: () => {
|
|
150
|
+
if (signal.aborted)
|
|
151
|
+
return false;
|
|
152
|
+
controller.abort();
|
|
153
|
+
return true;
|
|
154
|
+
},
|
|
155
|
+
abortPrev: (message) => {
|
|
156
|
+
prevController?.abort(message);
|
|
157
|
+
},
|
|
158
|
+
fork: () => {
|
|
159
|
+
const childController = new AbortController();
|
|
160
|
+
const handler = () => {
|
|
161
|
+
controller.signal.removeEventListener("abort", handler);
|
|
162
|
+
childController.abort();
|
|
163
|
+
};
|
|
164
|
+
controller.signal.addEventListener("abort", handler);
|
|
165
|
+
return createAbortableContext(childController, pauseState, takeState, setStatus, undefined);
|
|
166
|
+
},
|
|
167
|
+
spawn: () => {
|
|
168
|
+
return createAbortableContext(new AbortController(), pauseState, takeState, setStatus, undefined);
|
|
169
|
+
},
|
|
170
|
+
checkpoint: checkPauseAndAbort,
|
|
171
|
+
};
|
|
172
|
+
}
|
|
173
|
+
// =============================================================================
|
|
174
|
+
// INTERNAL: CREATE SEND
|
|
175
|
+
// =============================================================================
|
|
176
|
+
function createSend(takeState, setStatus) {
|
|
177
|
+
return ((key, value) => {
|
|
178
|
+
const takeKey = String(key ?? "__checkpoint__");
|
|
179
|
+
const pending = takeState.pendingTakes.get(takeKey);
|
|
180
|
+
if (pending) {
|
|
181
|
+
pending.resolve(value);
|
|
182
|
+
takeState.pendingTakes.delete(takeKey);
|
|
183
|
+
setStatus("running");
|
|
184
|
+
}
|
|
185
|
+
});
|
|
186
|
+
}
|
|
187
|
+
// =============================================================================
|
|
188
|
+
// INTERNAL: EXECUTE ABORTABLE
|
|
189
|
+
// =============================================================================
|
|
190
|
+
function executeAbortable(fn, args, parentSignal, prevController, controllerRef) {
|
|
191
|
+
// Create own AbortController
|
|
192
|
+
const controller = new AbortController();
|
|
193
|
+
// Store controller reference for tracking previous invocations
|
|
194
|
+
if (controllerRef) {
|
|
195
|
+
controllerRef.current = controller;
|
|
196
|
+
}
|
|
197
|
+
// Link to parent signal (parent abort → this aborts, but not vice versa)
|
|
198
|
+
if (parentSignal) {
|
|
199
|
+
if (parentSignal.aborted) {
|
|
200
|
+
controller.abort();
|
|
201
|
+
}
|
|
202
|
+
else {
|
|
203
|
+
const onParentAbort = () => controller.abort();
|
|
204
|
+
parentSignal.addEventListener("abort", onParentAbort, { once: true });
|
|
205
|
+
// Clean up listener when this completes
|
|
206
|
+
controller.signal.addEventListener("abort", () => parentSignal.removeEventListener("abort", onParentAbort), { once: true });
|
|
207
|
+
}
|
|
208
|
+
}
|
|
209
|
+
// State
|
|
210
|
+
let status = "running";
|
|
211
|
+
let resultValue;
|
|
212
|
+
let errorValue;
|
|
213
|
+
const pauseState = {
|
|
214
|
+
isPaused: false,
|
|
215
|
+
resumeResolve: null,
|
|
216
|
+
};
|
|
217
|
+
const takeState = {
|
|
218
|
+
pendingTakes: new Map(),
|
|
219
|
+
};
|
|
220
|
+
const setStatus = (newStatus) => {
|
|
221
|
+
if (!["success", "error", "aborted"].includes(status)) {
|
|
222
|
+
status = newStatus;
|
|
223
|
+
}
|
|
224
|
+
};
|
|
225
|
+
// Create context with previous controller for abortPrev()
|
|
226
|
+
const ctx = createAbortableContext(controller, pauseState, takeState, setStatus, prevController);
|
|
227
|
+
// Wrap the function
|
|
228
|
+
const wrappedFn = async () => {
|
|
229
|
+
try {
|
|
230
|
+
// Check abort before starting
|
|
231
|
+
if (controller.signal.aborted) {
|
|
232
|
+
throw new AbortableAbortedError();
|
|
233
|
+
}
|
|
234
|
+
// Execute the handler
|
|
235
|
+
const result = await fn(ctx, ...args);
|
|
236
|
+
return result;
|
|
237
|
+
}
|
|
238
|
+
catch (e) {
|
|
239
|
+
// Re-check if this was due to abort
|
|
240
|
+
if (controller.signal.aborted) {
|
|
241
|
+
throw new AbortableAbortedError();
|
|
242
|
+
}
|
|
243
|
+
throw e;
|
|
244
|
+
}
|
|
245
|
+
};
|
|
246
|
+
// Execute and track result
|
|
247
|
+
const promise = wrappedFn()
|
|
248
|
+
.then((result) => {
|
|
249
|
+
status = "success";
|
|
250
|
+
resultValue = result;
|
|
251
|
+
return result;
|
|
252
|
+
})
|
|
253
|
+
.catch((error) => {
|
|
254
|
+
if (error instanceof AbortableAbortedError || controller.signal.aborted) {
|
|
255
|
+
status = "aborted";
|
|
256
|
+
errorValue =
|
|
257
|
+
error instanceof Error ? error : new AbortableAbortedError();
|
|
258
|
+
}
|
|
259
|
+
else {
|
|
260
|
+
status = "error";
|
|
261
|
+
errorValue = error instanceof Error ? error : new Error(String(error));
|
|
262
|
+
}
|
|
263
|
+
throw errorValue;
|
|
264
|
+
});
|
|
265
|
+
// Create send function
|
|
266
|
+
const send = createSend(takeState, setStatus);
|
|
267
|
+
// Attach control methods to promise
|
|
268
|
+
return Object.assign(promise, {
|
|
269
|
+
send,
|
|
270
|
+
// Status checks
|
|
271
|
+
failed: () => status === "error",
|
|
272
|
+
completed: () => ["success", "error", "aborted"].includes(status),
|
|
273
|
+
running: () => status === "running",
|
|
274
|
+
succeeded: () => status === "success",
|
|
275
|
+
paused: () => status === "paused",
|
|
276
|
+
waiting: () => status === "waiting",
|
|
277
|
+
aborted: () => status === "aborted",
|
|
278
|
+
status: () => status,
|
|
279
|
+
// Result access
|
|
280
|
+
result: () => resultValue,
|
|
281
|
+
error: () => errorValue,
|
|
282
|
+
// Control methods
|
|
283
|
+
pause: () => {
|
|
284
|
+
if (pauseState.isPaused ||
|
|
285
|
+
["success", "error", "aborted"].includes(status)) {
|
|
286
|
+
return false;
|
|
287
|
+
}
|
|
288
|
+
pauseState.isPaused = true;
|
|
289
|
+
status = "paused";
|
|
290
|
+
return true;
|
|
291
|
+
},
|
|
292
|
+
resume: () => {
|
|
293
|
+
if (!pauseState.isPaused) {
|
|
294
|
+
return false;
|
|
295
|
+
}
|
|
296
|
+
pauseState.isPaused = false;
|
|
297
|
+
status = "running";
|
|
298
|
+
if (pauseState.resumeResolve) {
|
|
299
|
+
pauseState.resumeResolve();
|
|
300
|
+
}
|
|
301
|
+
return true;
|
|
302
|
+
},
|
|
303
|
+
abort: () => {
|
|
304
|
+
if (controller.signal.aborted || ["success", "error"].includes(status)) {
|
|
305
|
+
return false;
|
|
306
|
+
}
|
|
307
|
+
status = "aborted";
|
|
308
|
+
controller.abort();
|
|
309
|
+
// Reject any pending takes to unblock with abort error
|
|
310
|
+
const abortError = new AbortableAbortedError();
|
|
311
|
+
for (const [, pending] of takeState.pendingTakes) {
|
|
312
|
+
pending.reject(abortError);
|
|
313
|
+
}
|
|
314
|
+
takeState.pendingTakes.clear();
|
|
315
|
+
// Resume if paused
|
|
316
|
+
if (pauseState.resumeResolve) {
|
|
317
|
+
pauseState.resumeResolve();
|
|
318
|
+
}
|
|
319
|
+
return true;
|
|
320
|
+
},
|
|
321
|
+
});
|
|
322
|
+
}
|
|
323
|
+
// =============================================================================
|
|
324
|
+
// MAIN: ABORTABLE FACTORY
|
|
325
|
+
// =============================================================================
|
|
326
|
+
/**
|
|
327
|
+
* Create an abortable function with full lifecycle control.
|
|
328
|
+
*
|
|
329
|
+
* Features:
|
|
330
|
+
* - Pause/Resume execution
|
|
331
|
+
* - Abort with cleanup
|
|
332
|
+
* - External event injection (take/send)
|
|
333
|
+
* - Status tracking
|
|
334
|
+
* - Parent signal linkage (parent abort → this aborts, not vice versa)
|
|
335
|
+
*
|
|
336
|
+
* @example
|
|
337
|
+
* ```ts
|
|
338
|
+
* // Simple abortable
|
|
339
|
+
* const fetchUser = abortable(async ({ signal, safe }, id: string) => {
|
|
340
|
+
* const res = await fetch(`/api/users/${id}`, { signal });
|
|
341
|
+
* return res.json();
|
|
342
|
+
* });
|
|
343
|
+
*
|
|
344
|
+
* // With events
|
|
345
|
+
* const checkout = abortable<[Cart], Receipt, { confirm: boolean }>(
|
|
346
|
+
* async ({ signal, safe, take }, cart) => {
|
|
347
|
+
* const validated = await safe(validateCart, cart);
|
|
348
|
+
*
|
|
349
|
+
* const confirmed = await take("confirm");
|
|
350
|
+
* if (!confirmed) throw new Error("Cancelled");
|
|
351
|
+
*
|
|
352
|
+
* return await safe(processPayment, validated);
|
|
353
|
+
* }
|
|
354
|
+
* );
|
|
355
|
+
*
|
|
356
|
+
* // Usage
|
|
357
|
+
* const result = checkout(cart);
|
|
358
|
+
* result.send("confirm", true);
|
|
359
|
+
* const receipt = await result;
|
|
360
|
+
*
|
|
361
|
+
* // With pause/resume
|
|
362
|
+
* result.pause();
|
|
363
|
+
* result.resume();
|
|
364
|
+
*
|
|
365
|
+
* // With abort
|
|
366
|
+
* result.abort();
|
|
367
|
+
* ```
|
|
368
|
+
*/
|
|
369
|
+
export function abortable(fn) {
|
|
370
|
+
// Track previous invocation's controller for abortPrev()
|
|
371
|
+
let prevController = null;
|
|
372
|
+
// Create the wrapper function
|
|
373
|
+
const wrapper = ((...args) => {
|
|
374
|
+
// Track this invocation's controller for next call
|
|
375
|
+
const controllerRef = { current: null };
|
|
376
|
+
const result = executeAbortable(fn, args, undefined, prevController, controllerRef);
|
|
377
|
+
// Update previous controller for next invocation
|
|
378
|
+
if (controllerRef.current) {
|
|
379
|
+
prevController = controllerRef.current;
|
|
380
|
+
}
|
|
381
|
+
return result;
|
|
382
|
+
});
|
|
383
|
+
// Add withSignal() method for parent signal linkage
|
|
384
|
+
wrapper.withSignal = (signal, ...args) => {
|
|
385
|
+
const controllerRef = { current: null };
|
|
386
|
+
const result = executeAbortable(fn, args, signal, prevController, controllerRef);
|
|
387
|
+
if (controllerRef.current) {
|
|
388
|
+
prevController = controllerRef.current;
|
|
389
|
+
}
|
|
390
|
+
return result;
|
|
391
|
+
};
|
|
392
|
+
// Add use() method for chainable wrappers
|
|
393
|
+
wrapper.use = (wrapperFn) => {
|
|
394
|
+
const wrappedHandler = wrapperFn(fn);
|
|
395
|
+
return abortable(wrappedHandler);
|
|
396
|
+
};
|
|
397
|
+
// Add as() method for type assertion
|
|
398
|
+
wrapper.as = () => {
|
|
399
|
+
return wrapper;
|
|
400
|
+
};
|
|
401
|
+
// Add type brand
|
|
402
|
+
Object.defineProperty(wrapper, abortableSymbol, {
|
|
403
|
+
value: true,
|
|
404
|
+
writable: false,
|
|
405
|
+
enumerable: false,
|
|
406
|
+
configurable: false,
|
|
407
|
+
});
|
|
408
|
+
return wrapper;
|
|
409
|
+
}
|
|
410
|
+
//# sourceMappingURL=abortable.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"abortable.js","sourceRoot":"","sources":["../../src/async/abortable.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,EAAE,UAAU,EAAwB,MAAM,QAAQ,CAAC;AAC1D,OAAO,EAAE,eAAe,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAEjE,4BAA4B;AAC5B,OAAO,EAAE,eAAe,EAAE,WAAW,EAAE,CAAC;AA8YxC,gFAAgF;AAChF,cAAc;AACd,gFAAgF;AAEhF;;GAEG;AACH,MAAM,OAAO,qBAAsB,SAAQ,KAAK;IACrC,IAAI,GAAG,uBAAuB,CAAC;IAExC,YAAY,OAAO,GAAG,uBAAuB;QAC3C,KAAK,CAAC,OAAO,CAAC,CAAC;IACjB,CAAC;CACF;AA0BD,SAAS,sBAAsB,CAC7B,UAA2B,EAC3B,UAAsB,EACtB,SAAoB,EACpB,SAA4C,EAC5C,cAAuC;IAEvC,MAAM,MAAM,GAAG,UAAU,CAAC,MAAM,CAAC;IAEjC,mDAAmD;IACnD,sEAAsE;IACtE,MAAM,kBAAkB,GAAG,KAAK,IAAmB,EAAE;QACnD,2BAA2B;QAC3B,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;YACnB,MAAM,IAAI,qBAAqB,EAAE,CAAC;QACpC,CAAC;QAED,iBAAiB;QACjB,IAAI,UAAU,CAAC,QAAQ,EAAE,CAAC;YACxB,SAAS,CAAC,QAAQ,CAAC,CAAC;YACpB,MAAM,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,EAAE;gBAClC,UAAU,CAAC,aAAa,GAAG,OAAO,CAAC;YACrC,CAAC,CAAC,CAAC;YACH,UAAU,CAAC,aAAa,GAAG,IAAI,CAAC;YAChC,SAAS,CAAC,SAAS,CAAC,CAAC;QACvB,CAAC;QAED,kEAAkE;QAClE,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;YACnB,MAAM,IAAI,qBAAqB,EAAE,CAAC;QACpC,CAAC;IACH,CAAC,CAAC;IAEF,6DAA6D;IAC7D,MAAM,UAAU,GAAG,KAAK,EAAK,KAAQ,EAAc,EAAE;QACnD,MAAM,kBAAkB,EAAE,CAAC;QAC3B,OAAO,KAAK,CAAC;IACf,CAAC,CAAC;IAEF,yDAAyD;IACzD,+DAA+D;IAC/D,MAAM,IAAI,GAAG,CAAC,CACZ,eAAwE,EAC1D,EAAE;QAChB,8BAA8B;QAC9B,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;YACnB,OAAO,OAAO,CAAC,MAAM,CAAC,IAAI,qBAAqB,EAAE,CAAC,CAAC;QACrD,CAAC;QAED,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC;QAC/C,MAAM,OAAO,GAAG,OAAO,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC;QAE9D,sDAAsD;QACtD,MAAM,QAAQ,GAAG,GAAG,EAAE;YACpB,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;gBAC7B,MAAM,CAAC,KAAK,EAAE,CAAC;YACjB,CAAC;QACH,CAAC,CAAC;QACF,MAAM,CAAC,gBAAgB,CAAC,OAAO,EAAE,QAAQ,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;QAE3D,uBAAuB;QACvB,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC;aACjC,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE;YACrB,0BAA0B;YAC1B,MAAM,CAAC,mBAAmB,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;YAC9C,uCAAuC;YACvC,MAAM,kBAAkB,EAAE,CAAC;YAC3B,OAAO,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;QACtC,CAAC,CAAC;aACD,KAAK,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE;YACrB,0BAA0B;YAC1B,MAAM,CAAC,mBAAmB,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;YAC9C,mCAAmC;YACnC,QAAQ,EAAE,CAAC;YACX,+CAA+C;YAC/C,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;gBACnB,MAAM,IAAI,qBAAqB,EAAE,CAAC;YACpC,CAAC;YACD,MAAM,KAAK,CAAC;QACd,CAAC,CAAC,CAAC;QAEL,OAAO,OAAO,CAAC;IACjB,CAAC,CAAkB,CAAC;IAEpB,sCAAsC;IACtC,MAAM,QAAQ,GAAG,UAAU,CACzB,GAAG,EAAE,CAAC,MAAM,EACZ,GAAG,EAAE,CAAC,MAAM,CAAC,OAAO,CACrB,CAAC;IAEF,MAAM,MAAM,GAAG,KAAK,EAAE,WAAgB,EAAE,GAAG,IAAW,EAAE,EAAE;QACxD,6EAA6E;QAC7E,IAAI,WAAW,CAAC,WAAW,CAAC,EAAE,CAAC;YAC7B,MAAM,eAAe,GAAG,WAAW,CAAC,UAAU,CAAC,MAAM,EAAE,GAAG,IAAI,CAAC,CAAC;YAChE,OAAO,IAAI,CAAC,eAAe,CAAC,CAAC;QAC/B,CAAC;QAED,oDAAoD;QACpD,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,WAAW,EAAE,GAAG,IAAI,CAAC,CAAC;QACpD,oDAAoD;QACpD,MAAM,kBAAkB,EAAE,CAAC;QAC3B,OAAO,MAAM,CAAC;IAChB,CAAC,CAAC;IAEF,gFAAgF;IAChF,MAAM,IAAI,GAAoB,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE;QAClD,GAAG,EAAE,QAAQ,CAAC,GAAG;QACjB,IAAI,EAAE,QAAQ,CAAC,IAAI;QACnB,OAAO,EAAE,QAAQ,CAAC,OAAO;QACzB,GAAG,EAAE,QAAQ,CAAC,GAAG;QACjB,QAAQ,EAAE,QAAQ,CAAC,QAAQ;QAC3B,KAAK,EAAE,QAAQ,CAAC,KAAK;KACtB,CAAC,CAAC;IAEH,MAAM,IAAI,GAAG,CAAC,CAAC,GAAkB,EAAE,EAAE;QACnC,MAAM,OAAO,GAAG,MAAM,CAAC,GAAG,IAAI,gBAAgB,CAAC,CAAC;QAEhD,kCAAkC;QAClC,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;YACnB,OAAO,OAAO,CAAC,MAAM,CAAC,IAAI,qBAAqB,EAAE,CAAC,CAAC;QACrD,CAAC;QAED,4BAA4B;QAC5B,MAAM,QAAQ,GAAG,SAAS,CAAC,YAAY,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QACrD,IAAI,QAAQ,EAAE,CAAC;YACb,OAAO,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAC3C,CAAC;QAED,0BAA0B;QAC1B,IAAI,OAA6B,CAAC;QAClC,IAAI,MAA4B,CAAC;QACjC,MAAM,OAAO,GAAG,IAAI,OAAO,CAAM,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE;YAC5C,OAAO,GAAG,GAAG,CAAC;YACd,MAAM,GAAG,GAAG,CAAC;QACf,CAAC,CAAC,CAAC;QAEH,SAAS,CAAC,YAAY,CAAC,GAAG,CAAC,OAAO,EAAE;YAClC,OAAO,EAAE,OAAQ;YACjB,MAAM,EAAE,MAAO;YACf,OAAO;SACR,CAAC,CAAC;QACH,SAAS,CAAC,SAAS,CAAC,CAAC;QAErB,OAAO,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IAClC,CAAC,CAA0B,CAAC;IAE5B,OAAO;QACL,MAAM;QACN,IAAI;QACJ,IAAI;QACJ,IAAI;QACJ,OAAO,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,OAAO;QAC7B,KAAK,EAAE,GAAG,EAAE;YACV,IAAI,MAAM,CAAC,OAAO;gBAAE,OAAO,KAAK,CAAC;YACjC,UAAU,CAAC,KAAK,EAAE,CAAC;YACnB,OAAO,IAAI,CAAC;QACd,CAAC;QACD,SAAS,EAAE,CAAC,OAAgB,EAAE,EAAE;YAC9B,cAAc,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC;QACjC,CAAC;QACD,IAAI,EAAE,GAAG,EAAE;YACT,MAAM,eAAe,GAAG,IAAI,eAAe,EAAE,CAAC;YAC9C,MAAM,OAAO,GAAG,GAAG,EAAE;gBACnB,UAAU,CAAC,MAAM,CAAC,mBAAmB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;gBACxD,eAAe,CAAC,KAAK,EAAE,CAAC;YAC1B,CAAC,CAAC;YACF,UAAU,CAAC,MAAM,CAAC,gBAAgB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;YACrD,OAAO,sBAAsB,CAC3B,eAAe,EACf,UAAU,EACV,SAAS,EACT,SAAS,EACT,SAAS,CACkB,CAAC;QAChC,CAAC;QACD,KAAK,EAAE,GAAG,EAAE;YACV,OAAO,sBAAsB,CAC3B,IAAI,eAAe,EAAE,EACrB,UAAU,EACV,SAAS,EACT,SAAS,EACT,SAAS,CACkB,CAAC;QAChC,CAAC;QACD,UAAU,EAAE,kBAAkB;KAC/B,CAAC;AACJ,CAAC;AAED,gFAAgF;AAChF,wBAAwB;AACxB,gFAAgF;AAEhF,SAAS,UAAU,CACjB,SAAoB,EACpB,SAA4C;IAE5C,OAAO,CAAC,CAAC,GAAkB,EAAE,KAAW,EAAE,EAAE;QAC1C,MAAM,OAAO,GAAG,MAAM,CAAC,GAAG,IAAI,gBAAgB,CAAC,CAAC;QAChD,MAAM,OAAO,GAAG,SAAS,CAAC,YAAY,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QAEpD,IAAI,OAAO,EAAE,CAAC;YACZ,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;YACvB,SAAS,CAAC,YAAY,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;YACvC,SAAS,CAAC,SAAS,CAAC,CAAC;QACvB,CAAC;IACH,CAAC,CAA0B,CAAC;AAC9B,CAAC;AAED,gFAAgF;AAChF,8BAA8B;AAC9B,gFAAgF;AAEhF,SAAS,gBAAgB,CAKvB,EAAuC,EACvC,IAAW,EACX,YAA0B,EAC1B,cAAuC,EACvC,aAAmD;IAEnD,6BAA6B;IAC7B,MAAM,UAAU,GAAG,IAAI,eAAe,EAAE,CAAC;IAEzC,+DAA+D;IAC/D,IAAI,aAAa,EAAE,CAAC;QAClB,aAAa,CAAC,OAAO,GAAG,UAAU,CAAC;IACrC,CAAC;IAED,yEAAyE;IACzE,IAAI,YAAY,EAAE,CAAC;QACjB,IAAI,YAAY,CAAC,OAAO,EAAE,CAAC;YACzB,UAAU,CAAC,KAAK,EAAE,CAAC;QACrB,CAAC;aAAM,CAAC;YACN,MAAM,aAAa,GAAG,GAAG,EAAE,CAAC,UAAU,CAAC,KAAK,EAAE,CAAC;YAC/C,YAAY,CAAC,gBAAgB,CAAC,OAAO,EAAE,aAAa,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;YACtE,wCAAwC;YACxC,UAAU,CAAC,MAAM,CAAC,gBAAgB,CAChC,OAAO,EACP,GAAG,EAAE,CAAC,YAAY,CAAC,mBAAmB,CAAC,OAAO,EAAE,aAAa,CAAC,EAC9D,EAAE,IAAI,EAAE,IAAI,EAAE,CACf,CAAC;QACJ,CAAC;IACH,CAAC;IAED,QAAQ;IACR,IAAI,MAAM,GAAoB,SAAS,CAAC;IACxC,IAAI,WAAgC,CAAC;IACrC,IAAI,UAA6B,CAAC;IAElC,MAAM,UAAU,GAAe;QAC7B,QAAQ,EAAE,KAAK;QACf,aAAa,EAAE,IAAI;KACpB,CAAC;IAEF,MAAM,SAAS,GAAc;QAC3B,YAAY,EAAE,IAAI,GAAG,EAAE;KACxB,CAAC;IAEF,MAAM,SAAS,GAAG,CAAC,SAA0B,EAAE,EAAE;QAC/C,IAAI,CAAC,CAAC,SAAS,EAAE,OAAO,EAAE,SAAS,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;YACtD,MAAM,GAAG,SAAS,CAAC;QACrB,CAAC;IACH,CAAC,CAAC;IAEF,0DAA0D;IAC1D,MAAM,GAAG,GAAG,sBAAsB,CAChC,UAAU,EACV,UAAU,EACV,SAAS,EACT,SAAS,EACT,cAAc,CACf,CAAC;IAEF,oBAAoB;IACpB,MAAM,SAAS,GAAG,KAAK,IAAsB,EAAE;QAC7C,IAAI,CAAC;YACH,8BAA8B;YAC9B,IAAI,UAAU,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;gBAC9B,MAAM,IAAI,qBAAqB,EAAE,CAAC;YACpC,CAAC;YAED,sBAAsB;YACtB,MAAM,MAAM,GAAG,MAAM,EAAE,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC;YAEtC,OAAO,MAAM,CAAC;QAChB,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,oCAAoC;YACpC,IAAI,UAAU,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;gBAC9B,MAAM,IAAI,qBAAqB,EAAE,CAAC;YACpC,CAAC;YACD,MAAM,CAAC,CAAC;QACV,CAAC;IACH,CAAC,CAAC;IAEF,2BAA2B;IAC3B,MAAM,OAAO,GAAG,SAAS,EAAE;SACxB,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE;QACf,MAAM,GAAG,SAAS,CAAC;QACnB,WAAW,GAAG,MAAM,CAAC;QACrB,OAAO,MAAM,CAAC;IAChB,CAAC,CAAC;SACD,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE;QACf,IAAI,KAAK,YAAY,qBAAqB,IAAI,UAAU,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;YACxE,MAAM,GAAG,SAAS,CAAC;YACnB,UAAU;gBACR,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,qBAAqB,EAAE,CAAC;QACjE,CAAC;aAAM,CAAC;YACN,MAAM,GAAG,OAAO,CAAC;YACjB,UAAU,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;QACzE,CAAC;QACD,MAAM,UAAU,CAAC;IACnB,CAAC,CAAC,CAAC;IAEL,uBAAuB;IACvB,MAAM,IAAI,GAAG,UAAU,CAAS,SAAS,EAAE,SAAS,CAAC,CAAC;IAEtD,oCAAoC;IACpC,OAAO,MAAM,CAAC,MAAM,CAAC,OAAO,EAAE;QAC5B,IAAI;QAEJ,gBAAgB;QAChB,MAAM,EAAE,GAAG,EAAE,CAAC,MAAM,KAAK,OAAO;QAChC,SAAS,EAAE,GAAG,EAAE,CAAC,CAAC,SAAS,EAAE,OAAO,EAAE,SAAS,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC;QACjE,OAAO,EAAE,GAAG,EAAE,CAAC,MAAM,KAAK,SAAS;QACnC,SAAS,EAAE,GAAG,EAAE,CAAC,MAAM,KAAK,SAAS;QACrC,MAAM,EAAE,GAAG,EAAE,CAAC,MAAM,KAAK,QAAQ;QACjC,OAAO,EAAE,GAAG,EAAE,CAAC,MAAM,KAAK,SAAS;QACnC,OAAO,EAAE,GAAG,EAAE,CAAC,MAAM,KAAK,SAAS;QACnC,MAAM,EAAE,GAAG,EAAE,CAAC,MAAM;QAEpB,gBAAgB;QAChB,MAAM,EAAE,GAAG,EAAE,CAAC,WAAW;QACzB,KAAK,EAAE,GAAG,EAAE,CAAC,UAAU;QAEvB,kBAAkB;QAClB,KAAK,EAAE,GAAG,EAAE;YACV,IACE,UAAU,CAAC,QAAQ;gBACnB,CAAC,SAAS,EAAE,OAAO,EAAE,SAAS,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,EAChD,CAAC;gBACD,OAAO,KAAK,CAAC;YACf,CAAC;YACD,UAAU,CAAC,QAAQ,GAAG,IAAI,CAAC;YAC3B,MAAM,GAAG,QAAQ,CAAC;YAClB,OAAO,IAAI,CAAC;QACd,CAAC;QAED,MAAM,EAAE,GAAG,EAAE;YACX,IAAI,CAAC,UAAU,CAAC,QAAQ,EAAE,CAAC;gBACzB,OAAO,KAAK,CAAC;YACf,CAAC;YACD,UAAU,CAAC,QAAQ,GAAG,KAAK,CAAC;YAC5B,MAAM,GAAG,SAAS,CAAC;YACnB,IAAI,UAAU,CAAC,aAAa,EAAE,CAAC;gBAC7B,UAAU,CAAC,aAAa,EAAE,CAAC;YAC7B,CAAC;YACD,OAAO,IAAI,CAAC;QACd,CAAC;QAED,KAAK,EAAE,GAAG,EAAE;YACV,IAAI,UAAU,CAAC,MAAM,CAAC,OAAO,IAAI,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;gBACvE,OAAO,KAAK,CAAC;YACf,CAAC;YACD,MAAM,GAAG,SAAS,CAAC;YACnB,UAAU,CAAC,KAAK,EAAE,CAAC;YACnB,uDAAuD;YACvD,MAAM,UAAU,GAAG,IAAI,qBAAqB,EAAE,CAAC;YAC/C,KAAK,MAAM,CAAC,EAAE,OAAO,CAAC,IAAI,SAAS,CAAC,YAAY,EAAE,CAAC;gBACjD,OAAO,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;YAC7B,CAAC;YACD,SAAS,CAAC,YAAY,CAAC,KAAK,EAAE,CAAC;YAC/B,mBAAmB;YACnB,IAAI,UAAU,CAAC,aAAa,EAAE,CAAC;gBAC7B,UAAU,CAAC,aAAa,EAAE,CAAC;YAC7B,CAAC;YACD,OAAO,IAAI,CAAC;QACd,CAAC;KACF,CAAqC,CAAC;AACzC,CAAC;AAED,gFAAgF;AAChF,0BAA0B;AAC1B,gFAAgF;AAEhF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA0CG;AACH,MAAM,UAAU,SAAS,CAIvB,EAAuC;IACvC,yDAAyD;IACzD,IAAI,cAAc,GAA2B,IAAI,CAAC;IAElD,8BAA8B;IAC9B,MAAM,OAAO,GAAG,CAAC,CAAC,GAAG,IAAW,EAAoC,EAAE;QACpE,mDAAmD;QACnD,MAAM,aAAa,GAAG,EAAE,OAAO,EAAE,IAA8B,EAAE,CAAC;QAClE,MAAM,MAAM,GAAG,gBAAgB,CAC7B,EAAE,EACF,IAAI,EACJ,SAAS,EACT,cAAc,EACd,aAAa,CACd,CAAC;QAEF,iDAAiD;QACjD,IAAI,aAAa,CAAC,OAAO,EAAE,CAAC;YAC1B,cAAc,GAAG,aAAa,CAAC,OAAO,CAAC;QACzC,CAAC;QAED,OAAO,MAAM,CAAC;IAChB,CAAC,CAAsC,CAAC;IAExC,oDAAoD;IACpD,OAAO,CAAC,UAAU,GAAG,CACnB,MAA+B,EAC/B,GAAG,IAAW,EACoB,EAAE;QACpC,MAAM,aAAa,GAAG,EAAE,OAAO,EAAE,IAA8B,EAAE,CAAC;QAClE,MAAM,MAAM,GAAG,gBAAgB,CAC7B,EAAE,EACF,IAAI,EACJ,MAAM,EACN,cAAc,EACd,aAAa,CACd,CAAC;QACF,IAAI,aAAa,CAAC,OAAO,EAAE,CAAC;YAC1B,cAAc,GAAG,aAAa,CAAC,OAAO,CAAC;QACzC,CAAC;QACD,OAAO,MAAM,CAAC;IAChB,CAAC,CAAC;IAEF,0CAA0C;IAC1C,OAAO,CAAC,GAAG,GAAG,CAKZ,SAOC,EAC2C,EAAE;QAC9C,MAAM,cAAc,GAAG,SAAS,CAAC,EAAE,CAAC,CAAC;QACrC,OAAO,SAAS,CAAkC,cAAc,CAAC,CAAC;IACpE,CAAC,CAAC;IAEF,qCAAqC;IACrC,OAAO,CAAC,EAAE,GAAG,GAImC,EAAE;QAChD,OAAO,OAAgE,CAAC;IAC1E,CAAC,CAAC;IAEF,iBAAiB;IACjB,MAAM,CAAC,cAAc,CAAC,OAAO,EAAE,eAAe,EAAE;QAC9C,KAAK,EAAE,IAAI;QACX,QAAQ,EAAE,KAAK;QACf,UAAU,EAAE,KAAK;QACjB,YAAY,EAAE,KAAK;KACpB,CAAC,CAAC;IAEH,OAAO,OAAO,CAAC;AACjB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"abortable.test.d.ts","sourceRoot":"","sources":["../../src/async/abortable.test.ts"],"names":[],"mappings":""}
|