awai 1.0.0-rc-5 → 1.0.0-rc-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/dist/index.cjs +84 -45
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.ts +18 -17
- package/dist/index.mjs +84 -46
- package/dist/index.mjs.map +1 -1
- package/package.json +1 -1
package/dist/index.cjs
CHANGED
|
@@ -45,6 +45,8 @@ const getUniqueId = (scope = "unknown") => {
|
|
|
45
45
|
return `awai$${scope}$${nextId}`;
|
|
46
46
|
};
|
|
47
47
|
|
|
48
|
+
const isAbortSignal = (value) => typeof AbortSignal !== "undefined" && value instanceof AbortSignal;
|
|
49
|
+
|
|
48
50
|
const isCoreNode = (node) => node.config.tags.includes(SystemTag.CORE_NODE);
|
|
49
51
|
|
|
50
52
|
const isFunction = (value) => typeof value === "function";
|
|
@@ -57,7 +59,22 @@ const isPromiseOrFunction = (value) => isFunction(value) || isPromiseLike(value)
|
|
|
57
59
|
|
|
58
60
|
const isReadableAsyncState = (value) => isObject(value) && isFunction(value.get) && isFunction(value.getAsync) && isFunction(value.getPromise) && isFunction(value.then);
|
|
59
61
|
|
|
60
|
-
const
|
|
62
|
+
const race = async (promises, abortSignal) => {
|
|
63
|
+
if (abortSignal?.aborted) {
|
|
64
|
+
return Promise.reject(abortSignal.reason);
|
|
65
|
+
}
|
|
66
|
+
const internalAbortController = new AbortController();
|
|
67
|
+
const abort = () => {
|
|
68
|
+
internalAbortController.abort();
|
|
69
|
+
abortSignal?.removeEventListener("abort", abort);
|
|
70
|
+
};
|
|
71
|
+
abortSignal?.addEventListener("abort", abort);
|
|
72
|
+
const abortablePromises = promises.map((promise) => {
|
|
73
|
+
return isAbortable(promise) ? promise.abortable(internalAbortController.signal) : promise;
|
|
74
|
+
});
|
|
75
|
+
return await Promise.race(abortablePromises).finally(abort);
|
|
76
|
+
};
|
|
77
|
+
const isAbortable = (promise) => isPromiseLike(promise) && "abortable" in promise && isFunction(promise.abortable);
|
|
61
78
|
|
|
62
79
|
const rejectAfter = (ms) => {
|
|
63
80
|
return new Promise((_, reject) => setTimeout(reject, ms));
|
|
@@ -110,15 +127,21 @@ class AwaiEvent {
|
|
|
110
127
|
});
|
|
111
128
|
});
|
|
112
129
|
}
|
|
113
|
-
abortable(
|
|
130
|
+
abortable(abortSignal) {
|
|
131
|
+
if (abortSignal.aborted) {
|
|
132
|
+
return Promise.reject(abortSignal.reason);
|
|
133
|
+
}
|
|
114
134
|
return new Promise((resolve, reject) => {
|
|
115
|
-
|
|
135
|
+
const resolveWithCleanup = (value) => {
|
|
136
|
+
abortSignal.removeEventListener("abort", abortionHandler);
|
|
137
|
+
resolve(value);
|
|
138
|
+
};
|
|
139
|
+
this._awaiters.push(resolveWithCleanup);
|
|
116
140
|
const abortionHandler = () => {
|
|
117
|
-
this._awaiters = this._awaiters.filter((awaiter) => awaiter !==
|
|
118
|
-
reject(
|
|
119
|
-
abortController.signal.removeEventListener("abort", abortionHandler);
|
|
141
|
+
this._awaiters = this._awaiters.filter((awaiter) => awaiter !== resolveWithCleanup);
|
|
142
|
+
reject(abortSignal.reason);
|
|
120
143
|
};
|
|
121
|
-
|
|
144
|
+
abortSignal.addEventListener("abort", abortionHandler, { once: true });
|
|
122
145
|
});
|
|
123
146
|
}
|
|
124
147
|
emit(value) {
|
|
@@ -286,15 +309,11 @@ const asyncState = (initialValue, customConfig) => {
|
|
|
286
309
|
if (version === lastPendingVersion) {
|
|
287
310
|
return value;
|
|
288
311
|
}
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
events.fulfilled.abortable(abortController).then(resolve).catch(noop);
|
|
293
|
-
events.rejected.abortable(abortController).then(reject).catch(noop);
|
|
294
|
-
});
|
|
295
|
-
} finally {
|
|
296
|
-
abortController.abort();
|
|
312
|
+
await race([events.fulfilled, events.rejected]);
|
|
313
|
+
if (error) {
|
|
314
|
+
throw error;
|
|
297
315
|
}
|
|
316
|
+
return value;
|
|
298
317
|
};
|
|
299
318
|
const then = async (resolve) => {
|
|
300
319
|
if (!isFunction(resolve)) {
|
|
@@ -336,6 +355,18 @@ const getTriggerPromise = (trigger) => {
|
|
|
336
355
|
return isFunction(trigger) ? trigger() : trigger;
|
|
337
356
|
};
|
|
338
357
|
|
|
358
|
+
const getExpirationPromise = (until) => {
|
|
359
|
+
if (typeof AbortSignal !== "undefined" && until instanceof AbortSignal) {
|
|
360
|
+
if (until.aborted) {
|
|
361
|
+
return Promise.resolve(void 0);
|
|
362
|
+
}
|
|
363
|
+
return new Promise((resolve) => {
|
|
364
|
+
until.addEventListener("abort", () => resolve(void 0), { once: true });
|
|
365
|
+
});
|
|
366
|
+
}
|
|
367
|
+
return Promise.resolve(until);
|
|
368
|
+
};
|
|
369
|
+
|
|
339
370
|
const getConfig$5 = (isPlainPromiseTrigger, hasTrigger, customConfig = {}) => ({
|
|
340
371
|
...customConfig,
|
|
341
372
|
id: customConfig.id ?? getUniqueId(scenario.name),
|
|
@@ -343,17 +374,15 @@ const getConfig$5 = (isPlainPromiseTrigger, hasTrigger, customConfig = {}) => ({
|
|
|
343
374
|
tags: [SystemTag.SCENARIO, ...customConfig.tags ?? []]
|
|
344
375
|
});
|
|
345
376
|
function scenario(...args) {
|
|
346
|
-
const hasTrigger = isFunction(args[1])
|
|
347
|
-
const hasExpirationTrigger = isFunction(args[2]);
|
|
377
|
+
const hasTrigger = isFunction(args[1]);
|
|
348
378
|
const trigger = hasTrigger ? args[0] : void 0;
|
|
349
|
-
const
|
|
350
|
-
const
|
|
351
|
-
const customConfig = args.at(args.indexOf(callback) + 1);
|
|
379
|
+
const callback = hasTrigger ? args[1] : args[0];
|
|
380
|
+
const customConfig = hasTrigger ? args[2] : args[1];
|
|
352
381
|
const isPlainPromiseTrigger = hasTrigger && isObject(args[0]) && args[0].constructor === Promise;
|
|
353
|
-
const isFiniteScenario = isPlainPromiseTrigger || hasExpirationTrigger || typeof customConfig?.repeat !== "undefined";
|
|
354
382
|
const config = getConfig$5(isPlainPromiseTrigger, hasTrigger, customConfig);
|
|
355
|
-
const { strategy } = config;
|
|
356
|
-
|
|
383
|
+
const { strategy, until } = config;
|
|
384
|
+
const isFiniteScenario = isPlainPromiseTrigger || strategy === "once" || typeof until !== "undefined";
|
|
385
|
+
let expirationEvent;
|
|
357
386
|
let runningCallbacksCount = 0;
|
|
358
387
|
let shouldExpire = false;
|
|
359
388
|
let expired = false;
|
|
@@ -363,26 +392,29 @@ function scenario(...args) {
|
|
|
363
392
|
settled: new AwaiEvent(),
|
|
364
393
|
started: new AwaiEvent()
|
|
365
394
|
};
|
|
366
|
-
const checkShouldExpire = () =>
|
|
367
|
-
const expire = async (
|
|
395
|
+
const checkShouldExpire = () => strategy === "once" || shouldExpire || (isAbortSignal(until) ? until.aborted : false) || (isFunction(until) ? until() : false);
|
|
396
|
+
const expire = async () => {
|
|
397
|
+
if (expired) {
|
|
398
|
+
return;
|
|
399
|
+
}
|
|
368
400
|
expired = true;
|
|
369
401
|
await flush();
|
|
370
|
-
await events.settled.emit({ event, config });
|
|
402
|
+
await events.settled.emit({ event: expirationEvent, config });
|
|
371
403
|
await flush();
|
|
372
404
|
await registry.deregister(config.id);
|
|
373
405
|
};
|
|
374
|
-
if (
|
|
375
|
-
|
|
406
|
+
if (until && !isFunction(until)) {
|
|
407
|
+
getExpirationPromise(until).then((event) => {
|
|
376
408
|
shouldExpire = true;
|
|
409
|
+
expirationEvent = event;
|
|
377
410
|
if (runningCallbacksCount === 0) {
|
|
378
|
-
expire(
|
|
411
|
+
expire();
|
|
379
412
|
}
|
|
380
413
|
});
|
|
381
414
|
}
|
|
382
415
|
const run = async () => {
|
|
383
416
|
getTriggerPromise(trigger).then(
|
|
384
417
|
(event) => {
|
|
385
|
-
repeat--;
|
|
386
418
|
if (expired) {
|
|
387
419
|
return;
|
|
388
420
|
}
|
|
@@ -414,6 +446,10 @@ function scenario(...args) {
|
|
|
414
446
|
}
|
|
415
447
|
},
|
|
416
448
|
() => {
|
|
449
|
+
if (checkShouldExpire() && runningCallbacksCount === 0) {
|
|
450
|
+
expire();
|
|
451
|
+
return;
|
|
452
|
+
}
|
|
417
453
|
queueMicrotask(run);
|
|
418
454
|
}
|
|
419
455
|
);
|
|
@@ -587,6 +623,9 @@ const asyncSelector = (states, predicate, customConfig) => {
|
|
|
587
623
|
requested: new AwaiEvent()
|
|
588
624
|
};
|
|
589
625
|
const getStatus = () => {
|
|
626
|
+
if (isLoading) {
|
|
627
|
+
return AsyncStatus.PENDING;
|
|
628
|
+
}
|
|
590
629
|
const aggregatedStatus = getAggregatedAsyncStatus(asyncStates);
|
|
591
630
|
return error !== null && aggregatedStatus === AsyncStatus.FULFILLED ? AsyncStatus.REJECTED : aggregatedStatus;
|
|
592
631
|
};
|
|
@@ -649,13 +688,13 @@ const asyncSelector = (states, predicate, customConfig) => {
|
|
|
649
688
|
scenario(
|
|
650
689
|
async () => {
|
|
651
690
|
const abortController = new AbortController();
|
|
691
|
+
const abortSignal = abortController.signal;
|
|
652
692
|
await Promise.race(
|
|
653
|
-
states.
|
|
654
|
-
return isReadableAsyncState(state) ?
|
|
655
|
-
state.events.requested.
|
|
656
|
-
|
|
657
|
-
|
|
658
|
-
] : state.events.changed.abortable(abortController);
|
|
693
|
+
states.map((state) => {
|
|
694
|
+
return isReadableAsyncState(state) ? race(
|
|
695
|
+
[state.events.requested, state.events.rejected, state.events.fulfilled],
|
|
696
|
+
abortSignal
|
|
697
|
+
) : state.events.changed.abortable(abortSignal);
|
|
659
698
|
})
|
|
660
699
|
);
|
|
661
700
|
abortController.abort();
|
|
@@ -666,10 +705,13 @@ const asyncSelector = (states, predicate, customConfig) => {
|
|
|
666
705
|
const get = () => value;
|
|
667
706
|
const getAsync = () => ({ error, isLoading, value });
|
|
668
707
|
const getPromise = async () => {
|
|
669
|
-
|
|
670
|
-
|
|
671
|
-
|
|
672
|
-
|
|
708
|
+
while (isLoading) {
|
|
709
|
+
await race([events.fulfilled, events.rejected]);
|
|
710
|
+
}
|
|
711
|
+
if (error) {
|
|
712
|
+
throw error;
|
|
713
|
+
}
|
|
714
|
+
return value;
|
|
673
715
|
};
|
|
674
716
|
const then = async (resolve) => {
|
|
675
717
|
if (!isFunction(resolve)) {
|
|
@@ -713,11 +755,7 @@ const syncSelector = (states, predicate, customConfig) => {
|
|
|
713
755
|
return resolve(get());
|
|
714
756
|
};
|
|
715
757
|
scenario(
|
|
716
|
-
|
|
717
|
-
const abortController = new AbortController();
|
|
718
|
-
await Promise.race(states.map((state) => state.events.changed.abortable(abortController)));
|
|
719
|
-
abortController.abort();
|
|
720
|
-
},
|
|
758
|
+
() => race(states.map((state) => state.events.changed)),
|
|
721
759
|
() => {
|
|
722
760
|
const newValue = get();
|
|
723
761
|
if (!Object.is(newValue, value)) {
|
|
@@ -755,6 +793,7 @@ exports.getAggregatedAsyncStatus = getAggregatedAsyncStatus;
|
|
|
755
793
|
exports.isPromiseLike = isPromiseLike;
|
|
756
794
|
exports.isReadableAsyncState = isReadableAsyncState;
|
|
757
795
|
exports.queue = queue;
|
|
796
|
+
exports.race = race;
|
|
758
797
|
exports.registry = registry;
|
|
759
798
|
exports.rejectAfter = rejectAfter;
|
|
760
799
|
exports.scenario = scenario;
|
package/dist/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.cjs","sources":["../src/constants/AsyncStatus.ts","../src/constants/SystemTag.ts","../src/lib/delay.ts","../src/lib/fork.ts","../src/lib/getAggregatedAsyncStatus.ts","../src/lib/getUniqueId.ts","../src/lib/isCoreNode.ts","../src/lib/isFunction.ts","../src/lib/isObject.ts","../src/lib/isPromiseLike.ts","../src/lib/isPromiseOrFunction.ts","../src/lib/isReadableAsyncState.ts","../src/lib/noop.ts","../src/lib/rejectAfter.ts","../src/lib/SyncQueue.ts","../src/global/queue.ts","../src/core/AwaiEvent.ts","../src/core/flush.ts","../src/core/Registry.ts","../src/global/registry.ts","../src/action/action.ts","../src/async-state/async-state.ts","../src/scenario/lib/getDefaultStrategy.ts","../src/scenario/lib/getTriggerPromise.ts","../src/scenario/scenario.ts","../src/effect/effect.ts","../src/state/state.ts","../src/family-state/family-state.ts","../src/selector/asyncSelector.ts","../src/selector/syncSelector.ts","../src/selector/selector.ts"],"sourcesContent":["enum AsyncStatus {\n FULFILLED = 'fulfilled',\n PENDING = 'pending',\n REJECTED = 'rejected',\n}\n\nexport default AsyncStatus;\n","enum SystemTag {\n ACTION = '@awai/action',\n ASYNC_SELECTOR = '@awai/async-selector',\n ASYNC_STATE = '@awai/async-state',\n CORE_NODE = '@awai/core-node',\n EFFECT = '@awai/effect',\n FAMILY_STATE = '@awai/family-state',\n SCENARIO = '@awai/scenario',\n SELECTOR = '@awai/selector',\n STATE = '@awai/state',\n}\n\nexport default SystemTag;\n","const delay = (ms: number): Promise<void> => new Promise((resolve) => setTimeout(resolve, ms));\n\nexport default delay;\n","const fork = async (forkFn: () => Promise<any>) => {\n await forkFn();\n};\n\nexport default fork;\n","import { AsyncStatus } from '../constants';\nimport type { ReadableAsyncState } from '../types';\n\nconst getAggregatedAsyncStatus = <T extends Pick<ReadableAsyncState, 'getStatus'>[]>(\n states: T,\n): AsyncStatus => {\n const hasError = states.some((state) => state.getStatus() === AsyncStatus.REJECTED);\n\n if (hasError) {\n return AsyncStatus.REJECTED;\n }\n\n const isPending = states.some((state) => state.getStatus() === AsyncStatus.PENDING);\n\n if (isPending) {\n return AsyncStatus.PENDING;\n }\n\n return AsyncStatus.FULFILLED;\n};\n\nexport default getAggregatedAsyncStatus;\n","const lastScopesIds: Record<string, number> = {};\n\nconst getUniqueId = (scope = 'unknown') => {\n const nextId = (lastScopesIds[scope] ?? 0) + 1;\n lastScopesIds[scope] = nextId;\n return `awai\\$${scope}\\$${nextId}`;\n};\n\nexport default getUniqueId;\n","import { SystemTag } from '../constants';\nimport type { BaseNode } from '../types';\n\nconst isCoreNode = (node: BaseNode): boolean => node.config.tags.includes(SystemTag.CORE_NODE);\n\nexport default isCoreNode;\n","const isFunction = (value: unknown): value is Function => typeof value === 'function';\n\nexport default isFunction;\n","const isObject = (value: unknown): value is Record<string, unknown> =>\n typeof value === 'object' && value !== null;\n\nexport default isObject;\n","import isFunction from './isFunction';\nimport isObject from './isObject';\n\nconst isPromiseLike = <T>(value: unknown): value is PromiseLike<T> =>\n isObject(value) && (value instanceof Promise || isFunction(value.then));\n\nexport default isPromiseLike;\n","import isFunction from './isFunction';\nimport isPromiseLike from './isPromiseLike';\n\nconst isPromiseOrFunction = <T>(\n value: unknown,\n): value is Promise<T> | ((...args: any) => Promise<T>) =>\n isFunction(value) || isPromiseLike<T>(value);\n\nexport default isPromiseOrFunction;\n","import type { ReadableAsyncState } from '../types';\n\nimport isFunction from './isFunction';\nimport isObject from './isObject';\n\nconst isReadableAsyncState = <T>(value: unknown): value is ReadableAsyncState<T> =>\n isObject(value) &&\n isFunction(value.get) &&\n isFunction(value.getAsync) &&\n isFunction(value.getPromise) &&\n isFunction(value.then);\n\nexport default isReadableAsyncState;\n","const noop = () => undefined;\n\nexport default noop;\n","const rejectAfter = (ms: number): Promise<void> => {\n return new Promise((_, reject) => setTimeout(reject, ms));\n};\n\nexport default rejectAfter;\n","/**\n * @description\n * This helper is needed to emit events synchronously, so that scenarios/effects/selectors\n * can resubscribe to an event before another emission.\n *\n * @example\n * const state = state(0);\n *\n * scenario(state.events.change, () => {\n * // Without `SyncQueue` this scenario would only run once\n * });\n *\n * state.set(1);\n * state.set(2);\n */\n\nexport default class SyncQueue {\n private callbacksQueue: Function[] = [];\n private isDequeuing = false;\n\n public enqueue(callback: Function) {\n this.callbacksQueue.push(callback);\n this.dequeue();\n }\n\n private dequeue = async () => {\n if (this.isDequeuing || this.callbacksQueue.length === 0) {\n return;\n }\n\n this.isDequeuing = true;\n const callback = this.callbacksQueue.shift()!;\n callback();\n\n queueMicrotask(() => {\n this.isDequeuing = false;\n this.dequeue();\n });\n };\n}\n","import { SyncQueue } from '../lib';\n\nconst queue = new SyncQueue();\n\nexport default queue;\n","import queue from '../global/queue';\nimport { isFunction } from '../lib';\n\ntype Resolver<T> = (value: T) => any;\ntype FilterPredicate<T> = (value: T) => boolean;\n\nexport default class AwaiEvent<T = void> {\n private _awaiters: Resolver<T>[] = [];\n\n then: PromiseLike<T>['then'] = (onfulfilled) => {\n return new Promise<any>((resolve, reject) => {\n this._awaiters.push((value: T) => {\n try {\n const result = isFunction(onfulfilled) ? onfulfilled(value) : value;\n resolve(result);\n } catch (error) {\n reject(error);\n }\n });\n });\n };\n\n abortable(abortController: AbortController): Promise<T> {\n return new Promise<T>((resolve, reject) => {\n this._awaiters.push(resolve);\n\n const abortionHandler = () => {\n this._awaiters = this._awaiters.filter((awaiter) => awaiter !== resolve);\n reject('Aborted');\n\n abortController.signal.removeEventListener('abort', abortionHandler);\n };\n\n abortController.signal.addEventListener('abort', abortionHandler);\n });\n }\n\n emit(value: T) {\n queue.enqueue(async () => {\n const awaiters = this._awaiters;\n this._awaiters = [];\n\n for (const resolve of awaiters) {\n resolve(value);\n }\n });\n }\n\n async filter(predicate: FilterPredicate<T>) {\n return new Promise(async (resolve) => {\n while (true) {\n const newValue = await this;\n const isApplicable = Boolean(predicate(newValue));\n\n if (isApplicable) {\n resolve(newValue);\n return;\n }\n }\n });\n }\n}\n","const flush = () => new Promise<void>((resolve) => setTimeout(resolve, 0));\n\nexport default flush;\n","import { isCoreNode } from '../lib';\nimport type BaseNode from '../types/BaseNode';\n\nimport AwaiEvent from './AwaiEvent';\n\nexport default class Registry<T extends BaseNode> {\n private _nodes: T[] = [];\n public readonly events = {\n deregistered: new AwaiEvent<T['config']['id']>(),\n registered: new AwaiEvent<T>(),\n };\n\n public async register(node: T) {\n if (isCoreNode(node)) {\n return;\n }\n\n this._nodes.push(node);\n this.events.registered.emit(node);\n }\n\n public async deregister(id: BaseNode['config']['id']) {\n const node = this._nodes.find((node) => node.config.id === id);\n\n if (!node) {\n return;\n }\n\n this._nodes = this._nodes.filter((node) => node.config.id !== id);\n this.events.deregistered.emit(id);\n }\n\n get nodes() {\n return [...this._nodes];\n }\n}\n","import { Registry } from '../core';\n\nconst registry = new Registry();\n\nexport default registry;\n","import { SystemTag } from '../constants';\nimport { AwaiEvent, flush } from '../core';\nimport { registry } from '../global';\nimport { getUniqueId, isFunction } from '../lib';\n\nimport type { CallbackAction, Config, EmptyAction } from './types';\n\nconst getConfig = (customConfig: Partial<Config> = {}): Config => ({\n ...customConfig,\n id: customConfig.id ?? getUniqueId(action.name),\n tags: [SystemTag.ACTION, ...(customConfig.tags ?? [])],\n});\n\nfunction action<Args extends any[] = []>(): EmptyAction<Args>;\nfunction action<Args extends any[] = []>(config?: Partial<Config>): EmptyAction<Args>;\nfunction action<Args extends any[], Return = void>(\n callback: (...args: Args) => Return,\n config?: Partial<Config>,\n): CallbackAction<Args, Return>;\n\nfunction action<Args extends any[], Return = void>(\n ...args: [Partial<Config>?] | [(...args: Args) => Return, Partial<Config>?]\n): EmptyAction<Args> | CallbackAction<Args, Return> {\n type Action = EmptyAction<Args> | CallbackAction<Args, Return>;\n\n const hasCallback = isFunction(args[0]);\n const [callback, customConfig] = hasCallback\n ? (args as [(...args: Args) => Return, Partial<Config>?])\n : ([, ...args] as [undefined, Partial<Config>?]);\n\n const config = getConfig(customConfig);\n\n const events = {\n invoked: new AwaiEvent(),\n rejected: hasCallback ? new AwaiEvent() : undefined,\n fulfilled: hasCallback ? new AwaiEvent() : undefined,\n } satisfies Action['events'];\n\n const invoke = async (...invokeArgs: Args) => {\n const invocationId = getUniqueId('invocation');\n\n events.invoked.emit({ arguments: invokeArgs, config, invocationId });\n\n try {\n const valueOrPromise: Return | Promise<Return> = isFunction(callback)\n ? callback(...invokeArgs)\n : (undefined as Return);\n\n const value = await valueOrPromise;\n await flush();\n events.fulfilled?.emit({ arguments: invokeArgs, config, result: value, invocationId });\n return value;\n } catch (error) {\n events.rejected?.emit({\n arguments: invokeArgs,\n config,\n error,\n invocationId,\n });\n throw error;\n }\n };\n\n const actionNode = Object.assign(invoke, { config, events }) as Action;\n\n registry.register(actionNode);\n\n return actionNode;\n}\n\nexport default action;\n","import { AsyncStatus, SystemTag } from '../constants';\nimport { AwaiEvent, flush } from '../core';\nimport { registry } from '../global';\nimport { getUniqueId, isFunction, isPromiseOrFunction, noop } from '../lib';\n\nimport type { VersionIgnoredEvent, AsyncState, Config, InitialValue, Version } from './types';\n\nconst getConfig = (customConfig: Partial<Config> = {}): Config => ({\n ...customConfig,\n id: customConfig.id ?? getUniqueId(asyncState.name),\n tags: [SystemTag.ASYNC_STATE, ...(customConfig.tags ?? [])],\n});\n\nconst asyncState = <T>(\n initialValue?: InitialValue<T>,\n customConfig?: Partial<Config>,\n): AsyncState<T> => {\n const config = getConfig(customConfig);\n const isInitialValueAsync = isPromiseOrFunction(initialValue);\n let version: Version = isInitialValueAsync ? 0 : 1;\n let lastPendingVersion: Version = version;\n let status: AsyncStatus = AsyncStatus.FULFILLED;\n let error: unknown = null;\n let value: T | undefined = isInitialValueAsync ? undefined : initialValue;\n\n const events: AsyncState<T>['events'] = {\n changed: new AwaiEvent<T | undefined>(),\n fulfilled: new AwaiEvent<T>(),\n ignored: new AwaiEvent<VersionIgnoredEvent<T>>(),\n rejected: new AwaiEvent<unknown>(),\n requested: new AwaiEvent<void>(),\n };\n\n const getStatus: AsyncState<T>['getStatus'] = () => status;\n\n const set: AsyncState<T>['set'] = async (nextValueOrResolver) => {\n const currentPendingVersion: Version = (lastPendingVersion + 1) % Number.MAX_SAFE_INTEGER;\n lastPendingVersion = currentPendingVersion;\n\n try {\n if (isPromiseOrFunction(nextValueOrResolver)) {\n status = AsyncStatus.PENDING;\n events.requested.emit();\n }\n\n let newValue = isFunction(nextValueOrResolver)\n ? await nextValueOrResolver(value)\n : await nextValueOrResolver;\n const isChanged = !Object.is(newValue, value);\n\n if (currentPendingVersion !== lastPendingVersion || !isChanged) {\n events.ignored.emit({ value: newValue, version: currentPendingVersion });\n return;\n }\n\n error = null;\n value = newValue;\n status = AsyncStatus.FULFILLED;\n\n events.fulfilled.emit(newValue);\n\n if (isChanged) {\n events.changed.emit(value);\n }\n } catch (e) {\n if (currentPendingVersion !== lastPendingVersion) {\n events.ignored.emit({ error: e, version: currentPendingVersion });\n return;\n }\n\n const isChanged = !Object.is(e, error);\n\n error = e;\n value = undefined;\n status = AsyncStatus.REJECTED;\n\n events.rejected.emit(error);\n\n if (isChanged) {\n events.changed.emit(value);\n }\n }\n\n version = lastPendingVersion;\n await flush();\n };\n\n const get: AsyncState<T>['get'] = () => value;\n\n const getAsync: AsyncState<T>['getAsync'] = () => ({\n error,\n isLoading: status === AsyncStatus.PENDING,\n value,\n });\n\n const getPromise: AsyncState<T>['getPromise'] = async () => {\n if (version === lastPendingVersion) {\n return value!;\n }\n\n const abortController = new AbortController();\n\n try {\n return await new Promise((resolve, reject) => {\n events.fulfilled.abortable(abortController).then(resolve).catch(noop);\n events.rejected.abortable(abortController).then(reject).catch(noop);\n });\n } finally {\n abortController.abort();\n }\n };\n\n const then: PromiseLike<T>['then'] = async (resolve) => {\n if (!isFunction(resolve)) {\n return getPromise() as any;\n }\n\n return resolve(await getPromise());\n };\n\n if (isInitialValueAsync) {\n set(initialValue);\n }\n\n const asyncStateNode: AsyncState<T> = {\n config,\n events,\n get,\n getAsync,\n getPromise,\n getStatus,\n set,\n then,\n };\n\n registry.register(asyncStateNode);\n\n return asyncStateNode;\n};\n\nexport default asyncState;\n","import type { Config } from '../types';\n\nconst getDefaultStrategy = (\n isPlainPromiseTrigger: boolean,\n hasTrigger: boolean,\n): Config['strategy'] => {\n if (isPlainPromiseTrigger) {\n return 'once';\n }\n\n if (hasTrigger) {\n return 'fork';\n }\n\n return 'cyclic';\n};\n\nexport default getDefaultStrategy;\n","import { isFunction } from '../../lib';\nimport type { Trigger } from '../types';\n\nconst getTriggerPromise = <T>(trigger: Trigger<T> | undefined) => {\n if (!trigger) {\n return Promise.resolve(undefined as T);\n }\n\n return isFunction(trigger) ? trigger() : trigger;\n};\n\nexport default getTriggerPromise;\n","import { SystemTag } from '../constants';\nimport { AwaiEvent, flush } from '../core';\nimport { registry } from '../global';\nimport { getUniqueId, isFunction, isObject, isPromiseLike } from '../lib';\n\nimport { getDefaultStrategy, getTriggerPromise } from './lib';\nimport type { Callback, Config, ExpirationTrigger, SettledEvent, Scenario, Trigger } from './types';\n\nconst getConfig = (\n isPlainPromiseTrigger: boolean,\n hasTrigger: boolean,\n customConfig: Partial<Config> = {},\n): Config => ({\n ...customConfig,\n id: customConfig.id ?? getUniqueId(scenario.name),\n strategy: customConfig.strategy ?? getDefaultStrategy(isPlainPromiseTrigger, hasTrigger),\n tags: [SystemTag.SCENARIO, ...(customConfig.tags ?? [])],\n});\n\nfunction scenario<T, R, E>(\n trigger: Trigger<T>,\n callback: Callback<T, R>,\n customConfig?: Partial<Config>,\n): Scenario<T, R, E>;\n\nfunction scenario<T, R, E>(\n trigger: Trigger<T>,\n expirationTrigger: ExpirationTrigger<E>,\n callback: Callback<T, R>,\n customConfig?: Partial<Config>,\n): Scenario<T, R, E>;\n\nfunction scenario<T, R, E = unknown>(\n callback: Callback,\n config?: Partial<Config>,\n): Scenario<T, R, E>;\n\nfunction scenario<T, R, E>(\n ...args:\n | [Trigger<T>, Callback<T, R>, Partial<Config>?]\n | [Trigger<T>, ExpirationTrigger<E>, Callback<T, R>, Partial<Config>?]\n | [Callback, Partial<Config>?]\n) {\n const hasTrigger = isFunction(args[1]) || isFunction(args[2]);\n const hasExpirationTrigger = isFunction(args[2]);\n\n const trigger = hasTrigger ? (args[0] as Trigger<T>) : undefined;\n const expirationTrigger = hasExpirationTrigger ? (args[1] as ExpirationTrigger<E>) : undefined;\n const callback = args.findLast(isFunction) as Callback<T, R>;\n const customConfig = args.at(args.indexOf(callback) + 1) as Partial<Config> | undefined;\n const isPlainPromiseTrigger = hasTrigger && isObject(args[0]) && args[0].constructor === Promise;\n const isFiniteScenario =\n isPlainPromiseTrigger || hasExpirationTrigger || typeof customConfig?.repeat !== 'undefined';\n\n const config = getConfig(isPlainPromiseTrigger, hasTrigger, customConfig);\n const { strategy } = config;\n let { repeat = Infinity } = config;\n let runningCallbacksCount = 0;\n let shouldExpire = false;\n let expired = false;\n\n const events: Scenario<T, R, E>['events'] = {\n fulfilled: new AwaiEvent(),\n rejected: new AwaiEvent(),\n settled: new AwaiEvent(),\n started: new AwaiEvent(),\n };\n\n const checkShouldExpire = () =>\n repeat <= 0 ||\n strategy === 'once' ||\n shouldExpire ||\n (isFunction(expirationTrigger) && expirationTrigger());\n\n const expire = async (event?: E) => {\n expired = true;\n await flush();\n await events.settled.emit({ event, config });\n await flush();\n await registry.deregister(config.id);\n };\n\n if (isPromiseLike(expirationTrigger)) {\n Promise.resolve(expirationTrigger).then((event) => {\n shouldExpire = true;\n\n if (runningCallbacksCount === 0) {\n expire(event);\n }\n });\n }\n\n const run = async () => {\n getTriggerPromise(trigger).then(\n (event) => {\n repeat--;\n\n if (expired) {\n return;\n }\n\n runningCallbacksCount++;\n events.started.emit({ config, event });\n\n try {\n Promise.resolve(callback(event))\n .then((result) => {\n flush().then(() => {\n events.fulfilled.emit({ config, event, result });\n });\n })\n .catch((error) => {\n events.rejected.emit(error);\n })\n .finally(() => {\n runningCallbacksCount--;\n\n if (checkShouldExpire() && runningCallbacksCount === 0) {\n expire();\n return;\n }\n\n if (strategy === 'cyclic') {\n queueMicrotask(run);\n }\n });\n } catch (error) {\n runningCallbacksCount--;\n events.rejected.emit(error);\n }\n\n if (strategy === 'fork') {\n queueMicrotask(run);\n }\n },\n () => {\n queueMicrotask(run);\n },\n );\n };\n\n const then: AwaiEvent<SettledEvent<E>>['then'] = (resolve) => {\n if (!isFiniteScenario) {\n console.warn(\n 'You seem to await an infinite scenario. This causes a memory leak in your application.',\n );\n }\n\n if (!isFunction(resolve)) {\n return Promise.resolve(events.settled) as any;\n }\n\n return events.settled.then(resolve);\n };\n\n const scenarioNode: Scenario<T, R, E> = { config, events, then };\n\n registry.register(scenarioNode);\n\n run();\n\n return scenarioNode;\n}\n\nexport default scenario;\n","import { AsyncStatus, SystemTag } from '../constants';\nimport { AwaiEvent } from '../core';\nimport { registry } from '../global';\nimport { getAggregatedAsyncStatus, getUniqueId, isFunction, isReadableAsyncState } from '../lib';\nimport scenario from '../scenario';\nimport { type InferReadableType, type ReadableAsyncState, type ReadableState } from '../types';\n\nimport type { CleanupCallback, Config, Effect } from './types';\n\nconst getConfig = (customConfig: Partial<Config> = {}): Config => ({\n ...customConfig,\n id: customConfig.id ?? getUniqueId(effect.name),\n tags: [SystemTag.EFFECT, ...(customConfig.tags ?? [])],\n});\n\nconst effect = <\n T extends (ReadableState<any> | ReadableAsyncState<any>)[],\n V extends { [K in keyof T]: InferReadableType<T[K]> },\n>(\n states: [...T],\n effect: (...values: V) => CleanupCallback | void,\n customConfig?: Partial<Config>,\n): Effect<T, V> => {\n const config = getConfig(customConfig);\n const asyncStates = states.filter(isReadableAsyncState);\n\n let cleanup: ReturnType<typeof effect>;\n\n const events: Effect<T, V>['events'] = {\n cleared: new AwaiEvent(),\n started: new AwaiEvent(),\n };\n\n const runEffect = () => {\n const values = states.map((state) => state.get()) as V;\n const status = getAggregatedAsyncStatus(asyncStates);\n\n if (status !== AsyncStatus.FULFILLED) {\n return;\n }\n\n events.started.emit({ states, values });\n\n cleanup = effect(...values);\n };\n\n queueMicrotask(() => {\n scenario(\n () => Promise.race(states.map((state) => state.events.changed)),\n () => {\n if (isFunction(cleanup)) {\n cleanup();\n events.cleared.emit({ states });\n }\n\n runEffect();\n },\n { tags: [SystemTag.CORE_NODE] },\n );\n\n queueMicrotask(runEffect);\n });\n\n const effectNode: Effect<T, V> = { config, events };\n\n registry.register(effectNode);\n\n return effectNode;\n};\n\nexport default effect;\n","import { SystemTag } from '../constants';\nimport { AwaiEvent, flush } from '../core';\nimport { getUniqueId, isFunction } from '../lib';\nimport { registry } from '../global';\n\nimport type { Config, State } from './types';\n\nconst getConfig = (customConfig: Partial<Config> = {}): Config => ({\n ...customConfig,\n id: customConfig.id ?? getUniqueId(state.name),\n tags: [SystemTag.STATE, ...(customConfig.tags ?? [])],\n});\n\nconst state = <T>(initialValue: T, customConfig?: Partial<Config>): State<T> => {\n const config = getConfig(customConfig);\n\n let value = initialValue;\n\n const events = {\n changed: new AwaiEvent<T>(),\n };\n\n const set: State<T>['set'] = (nextValueOrResolver) => {\n let newValue = isFunction(nextValueOrResolver)\n ? nextValueOrResolver(value)\n : nextValueOrResolver;\n\n if (!Object.is(newValue, value)) {\n value = newValue;\n events.changed.emit(newValue);\n }\n\n return flush().then(() => newValue);\n };\n\n const get = () => value;\n\n const then: State<T>['then'] = async (resolve) => {\n if (!isFunction(resolve)) {\n return value as any;\n }\n\n return resolve(value);\n };\n\n const stateNode: State<T> = { config, events, get, set, then };\n\n registry.register(stateNode);\n\n return stateNode;\n};\n\nexport default state;\n","import asyncState, { type AsyncState } from '../async-state';\nimport { SystemTag } from '../constants';\nimport { AwaiEvent, flush } from '../core';\nimport { registry } from '../global';\nimport { getUniqueId, isFunction } from '../lib';\nimport scenario from '../scenario';\nimport state, { type State } from '../state';\nimport type { Id } from '../types';\n\nimport type { Config, FamilyState } from './types';\n\nconst getConfig = (customConfig: Partial<Config> = {}): Config => ({\n ...customConfig,\n id: customConfig.id ?? getUniqueId(familyState.name),\n tags: [SystemTag.FAMILY_STATE, ...(customConfig.tags ?? [])],\n});\n\nconst familyState = <\n T,\n Initializer extends (id: Id) => T | Promise<T>,\n Family extends Record<Id, NodeType>,\n NodeType extends State<any> | AsyncState<any> = ReturnType<Initializer> extends PromiseLike<\n infer Q\n >\n ? AsyncState<Q>\n : State<ReturnType<Initializer>>,\n>(\n initializer: Initializer,\n customConfig?: Partial<Config>,\n): FamilyState<NodeType> => {\n const config = getConfig(customConfig);\n\n let family: Family = {} as Family;\n\n const events = {\n changed: new AwaiEvent<Record<Id, NodeType>>(),\n stateCreated: new AwaiEvent<Id>(),\n };\n\n const getNode = (id: Id): NodeType => {\n if (id in family) {\n return family[id];\n }\n\n const initialValue = initializer(id);\n\n const stateNode =\n initialValue instanceof Promise\n ? asyncState(initialValue, { tags: [SystemTag.CORE_NODE] })\n : state(initialValue, { tags: [SystemTag.CORE_NODE] });\n\n family = { ...family, [id]: stateNode };\n events.stateCreated.emit(id);\n events.changed.emit(family);\n\n scenario(\n stateNode.events.changed,\n () => {\n events.changed.emit(family);\n },\n { tags: [SystemTag.CORE_NODE] },\n );\n\n return stateNode as NodeType;\n };\n\n const setNode = async (id: Id, stateNode: NodeType) => {\n if (id in family) {\n throw new Error(`Cannot set node. Node with id \"${id}\" already exists.`);\n }\n\n family = { ...family, [id]: stateNode };\n\n scenario(\n stateNode.events.changed,\n () => {\n events.changed.emit(family);\n },\n { tags: [SystemTag.CORE_NODE] },\n );\n\n events.changed.emit(family);\n\n await flush();\n };\n\n const get = () => {\n return family;\n };\n\n const then: FamilyState<NodeType>['then'] = async (resolve) => {\n if (!isFunction(resolve)) {\n return family as any;\n }\n\n return resolve(family);\n };\n\n const familyStateNode: FamilyState<NodeType> = { config, events, get, getNode, setNode, then };\n\n registry.register(familyStateNode);\n\n return familyStateNode;\n};\n\nexport default familyState;\n","import { AsyncStatus, SystemTag } from '../constants';\nimport { AwaiEvent } from '../core';\nimport { registry } from '../global';\nimport {\n fork,\n getAggregatedAsyncStatus,\n getUniqueId,\n isFunction,\n isReadableAsyncState,\n} from '../lib';\nimport scenario from '../scenario';\nimport type { InferReadableType, ReadableAsyncState, ReadableState } from '../types';\n\nimport type { AsyncConfig, AsyncSelector, VersionIgnoredEvent } from './types';\n\nconst getConfig = (customConfig: Partial<AsyncConfig> = {}): AsyncConfig => ({\n ...customConfig,\n id: customConfig.id ?? getUniqueId(asyncSelector.name),\n tags: [SystemTag.ASYNC_SELECTOR, ...(customConfig.tags ?? [])],\n});\n\nconst asyncSelector = <T extends (ReadableState | ReadableAsyncState)[], U>(\n states: T,\n predicate: (...values: { [K in keyof T]: InferReadableType<T[K]> }) => U,\n customConfig?: Partial<AsyncConfig>,\n): AsyncSelector<U> => {\n type StatesValues = { [K in keyof T]: InferReadableType<T[K]> };\n\n const config = getConfig(customConfig);\n const asyncStates = states.filter(isReadableAsyncState);\n\n let error: AggregateError | unknown | null = null;\n let value: U | undefined;\n let isLoading: boolean = true;\n let version = 0;\n let lastPendingVersion: number = version;\n\n const events: AsyncSelector<U>['events'] = {\n changed: new AwaiEvent<U | undefined>(),\n fulfilled: new AwaiEvent<U>(),\n ignored: new AwaiEvent<VersionIgnoredEvent<U>>(),\n rejected: new AwaiEvent<unknown>(),\n requested: new AwaiEvent<void>(),\n };\n\n const getStatus = () => {\n const aggregatedStatus = getAggregatedAsyncStatus(asyncStates);\n\n return error !== null && aggregatedStatus === AsyncStatus.FULFILLED\n ? AsyncStatus.REJECTED\n : aggregatedStatus;\n };\n\n const determineNextVersion = async () => {\n const currentPendingVersion = (lastPendingVersion + 1) % Number.MAX_SAFE_INTEGER;\n lastPendingVersion = currentPendingVersion;\n\n const status = getAggregatedAsyncStatus(asyncStates);\n const errors = asyncStates.map((state) => state.getAsync().error).filter(Boolean);\n\n if (status === AsyncStatus.PENDING) {\n isLoading = true;\n }\n\n events.requested.emit();\n\n if (errors.length > 0) {\n error = new AggregateError(errors);\n value = undefined;\n isLoading = status === AsyncStatus.PENDING;\n version = lastPendingVersion;\n events.rejected.emit(error);\n events.changed.emit(value);\n return;\n }\n\n if (status === AsyncStatus.FULFILLED) {\n const values = states.map((state) => state.get()) as StatesValues;\n\n fork(async () => {\n isLoading = true;\n\n try {\n const newValue = await predicate(...values);\n const isChanged = !Object.is(newValue, value);\n\n if (currentPendingVersion !== lastPendingVersion) {\n events.ignored.emit({ value: newValue, version: currentPendingVersion });\n return;\n }\n\n error = null;\n value = newValue;\n\n events.fulfilled.emit(newValue);\n\n if (isChanged) {\n events.changed.emit(value);\n }\n } catch (caughtError) {\n if (currentPendingVersion !== lastPendingVersion) {\n events.ignored.emit({ error: caughtError, version: currentPendingVersion });\n return;\n }\n\n const isChanged = typeof value !== 'undefined';\n\n error = caughtError;\n value = undefined;\n\n events.rejected.emit(caughtError);\n\n if (isChanged) {\n events.changed.emit(value);\n }\n } finally {\n if (currentPendingVersion === lastPendingVersion) {\n version = lastPendingVersion;\n isLoading = false;\n }\n }\n });\n }\n };\n\n scenario(\n async () => {\n const abortController = new AbortController();\n await Promise.race(\n states.flatMap((state) => {\n return isReadableAsyncState(state)\n ? [\n state.events.requested.abortable(abortController),\n state.events.rejected.abortable(abortController),\n state.events.fulfilled.abortable(abortController),\n ]\n : state.events.changed.abortable(abortController);\n }),\n );\n abortController.abort();\n },\n determineNextVersion,\n { tags: [SystemTag.CORE_NODE] },\n );\n\n const get = () => value;\n\n const getAsync = () => ({ error, isLoading, value });\n\n const getPromise = async (): Promise<U> => {\n const values = (await Promise.all(\n states.map((state) => (isReadableAsyncState(state) ? state.getPromise() : state.get())),\n )) as StatesValues;\n\n return predicate(...values);\n };\n\n const then: AsyncSelector<U>['then'] = async (resolve) => {\n if (!isFunction(resolve)) {\n return getPromise() as any;\n }\n\n return resolve(await getPromise());\n };\n\n const selectorNode = {\n config,\n events,\n get,\n getAsync,\n getPromise,\n getStatus,\n then,\n };\n\n queueMicrotask(determineNextVersion);\n\n registry.register(selectorNode);\n\n return selectorNode;\n};\n\nexport default asyncSelector;\n","import { SystemTag } from '../constants';\nimport { AwaiEvent } from '../core';\nimport { registry } from '../global';\nimport { getUniqueId, isFunction } from '../lib';\nimport scenario from '../scenario';\nimport type { InferReadableType, ReadableAsyncState, ReadableState } from '../types';\n\nimport type { SyncConfig, SyncSelector } from './types';\n\nconst getConfig = (customConfig: Partial<SyncConfig> = {}): SyncConfig => ({\n ...customConfig,\n id: customConfig.id ?? getUniqueId(syncSelector.name),\n tags: [SystemTag.SELECTOR, ...(customConfig.tags ?? [])],\n});\n\nconst syncSelector = <T extends (ReadableState | ReadableAsyncState)[], U>(\n states: [...T],\n predicate: (...values: { [K in keyof T]: InferReadableType<T[K]> }) => U,\n customConfig?: Partial<SyncConfig>,\n): SyncSelector<U> => {\n const config = getConfig(customConfig);\n let value: U;\n\n const events = {\n changed: new AwaiEvent<U>(),\n };\n\n const get = () => {\n const values = states.map((state) => state.get()) as {\n [K in keyof T]: InferReadableType<T[K]>;\n };\n return predicate(...values);\n };\n\n const then: SyncSelector<U>['then'] = async (resolve) => {\n if (!isFunction(resolve)) {\n return get() as any;\n }\n\n return resolve(get());\n };\n\n scenario(\n async () => {\n const abortController = new AbortController();\n await Promise.race(states.map((state) => state.events.changed.abortable(abortController)));\n abortController.abort();\n },\n () => {\n const newValue = get();\n\n if (!Object.is(newValue, value)) {\n value = newValue;\n events.changed.emit(newValue);\n }\n },\n { tags: [SystemTag.CORE_NODE] },\n );\n\n value = get();\n\n const selectorNode: SyncSelector<U> = { config, events, get, then };\n\n registry.register(selectorNode);\n\n return selectorNode;\n};\n\nexport default syncSelector;\n","import { isReadableAsyncState } from '../lib';\nimport { type InferReadableType } from '../types';\n\nimport asyncSelector from './asyncSelector';\nimport syncSelector from './syncSelector';\nimport type { Config, Selector } from './types';\n\nconst selector = <T extends any[], U>(\n states: [...T],\n predicate: (...values: { [K in keyof T]: InferReadableType<T[K]> }) => U,\n customConfig?: Partial<Config<T, U>>,\n): Selector<T, U> => {\n const isAsyncPredicate = predicate.constructor.name === 'AsyncFunction';\n\n const state =\n isAsyncPredicate || states.some((state) => isReadableAsyncState(state))\n ? asyncSelector(states, predicate, customConfig)\n : syncSelector(states, predicate, customConfig);\n\n return state as Selector<T, U>;\n};\n\nexport default selector;\n"],"names":["AsyncStatus","SystemTag","__publicField","node","getConfig","effect","state"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.cjs","sources":["../src/constants/AsyncStatus.ts","../src/constants/SystemTag.ts","../src/lib/delay.ts","../src/lib/fork.ts","../src/lib/getAggregatedAsyncStatus.ts","../src/lib/getUniqueId.ts","../src/lib/isAbortSignal.ts","../src/lib/isCoreNode.ts","../src/lib/isFunction.ts","../src/lib/isObject.ts","../src/lib/isPromiseLike.ts","../src/lib/isPromiseOrFunction.ts","../src/lib/isReadableAsyncState.ts","../src/lib/race.ts","../src/lib/rejectAfter.ts","../src/lib/SyncQueue.ts","../src/global/queue.ts","../src/core/AwaiEvent.ts","../src/core/flush.ts","../src/core/Registry.ts","../src/global/registry.ts","../src/action/action.ts","../src/async-state/async-state.ts","../src/scenario/lib/getDefaultStrategy.ts","../src/scenario/lib/getTriggerPromise.ts","../src/scenario/lib/getExpirationPromise.ts","../src/scenario/scenario.ts","../src/effect/effect.ts","../src/state/state.ts","../src/family-state/family-state.ts","../src/selector/asyncSelector.ts","../src/selector/syncSelector.ts","../src/selector/selector.ts"],"sourcesContent":["enum AsyncStatus {\n FULFILLED = 'fulfilled',\n PENDING = 'pending',\n REJECTED = 'rejected',\n}\n\nexport default AsyncStatus;\n","enum SystemTag {\n ACTION = '@awai/action',\n ASYNC_SELECTOR = '@awai/async-selector',\n ASYNC_STATE = '@awai/async-state',\n CORE_NODE = '@awai/core-node',\n EFFECT = '@awai/effect',\n FAMILY_STATE = '@awai/family-state',\n SCENARIO = '@awai/scenario',\n SELECTOR = '@awai/selector',\n STATE = '@awai/state',\n}\n\nexport default SystemTag;\n","const delay = (ms: number): Promise<void> => new Promise((resolve) => setTimeout(resolve, ms));\n\nexport default delay;\n","const fork = async (forkFn: () => Promise<any>) => {\n await forkFn();\n};\n\nexport default fork;\n","import { AsyncStatus } from '../constants';\nimport type { ReadableAsyncState } from '../types';\n\nconst getAggregatedAsyncStatus = <T extends Pick<ReadableAsyncState, 'getStatus'>[]>(\n states: T,\n): AsyncStatus => {\n const hasError = states.some((state) => state.getStatus() === AsyncStatus.REJECTED);\n\n if (hasError) {\n return AsyncStatus.REJECTED;\n }\n\n const isPending = states.some((state) => state.getStatus() === AsyncStatus.PENDING);\n\n if (isPending) {\n return AsyncStatus.PENDING;\n }\n\n return AsyncStatus.FULFILLED;\n};\n\nexport default getAggregatedAsyncStatus;\n","const lastScopesIds: Record<string, number> = {};\n\nconst getUniqueId = (scope = 'unknown') => {\n const nextId = (lastScopesIds[scope] ?? 0) + 1;\n lastScopesIds[scope] = nextId;\n return `awai\\$${scope}\\$${nextId}`;\n};\n\nexport default getUniqueId;\n","const isAbortSignal = (value: unknown): value is AbortSignal =>\n typeof AbortSignal !== 'undefined' && value instanceof AbortSignal;\n\nexport default isAbortSignal;\n","import { SystemTag } from '../constants';\nimport type { BaseNode } from '../types';\n\nconst isCoreNode = (node: BaseNode): boolean => node.config.tags.includes(SystemTag.CORE_NODE);\n\nexport default isCoreNode;\n","const isFunction = (value: unknown): value is Function => typeof value === 'function';\n\nexport default isFunction;\n","const isObject = (value: unknown): value is Record<string, unknown> =>\n typeof value === 'object' && value !== null;\n\nexport default isObject;\n","import isFunction from './isFunction';\nimport isObject from './isObject';\n\nconst isPromiseLike = <T>(value: unknown): value is PromiseLike<T> =>\n isObject(value) && (value instanceof Promise || isFunction(value.then));\n\nexport default isPromiseLike;\n","import isFunction from './isFunction';\nimport isPromiseLike from './isPromiseLike';\n\nconst isPromiseOrFunction = <T>(\n value: unknown,\n): value is Promise<T> | ((...args: any) => Promise<T>) =>\n isFunction(value) || isPromiseLike<T>(value);\n\nexport default isPromiseOrFunction;\n","import type { ReadableAsyncState } from '../types';\n\nimport isFunction from './isFunction';\nimport isObject from './isObject';\n\nconst isReadableAsyncState = <T>(value: unknown): value is ReadableAsyncState<T> =>\n isObject(value) &&\n isFunction(value.get) &&\n isFunction(value.getAsync) &&\n isFunction(value.getPromise) &&\n isFunction(value.then);\n\nexport default isReadableAsyncState;\n","import isPromiseLike from './isPromiseLike';\nimport isFunction from './isFunction';\n\nconst race = async <T extends readonly unknown[] | []>(promises: T, abortSignal?: AbortSignal) => {\n if (abortSignal?.aborted) {\n return Promise.reject(abortSignal.reason);\n }\n\n const internalAbortController = new AbortController();\n\n const abort = () => {\n internalAbortController.abort();\n abortSignal?.removeEventListener('abort', abort);\n };\n\n abortSignal?.addEventListener('abort', abort);\n\n const abortablePromises = promises.map((promise) => {\n return isAbortable(promise) ? promise.abortable(internalAbortController.signal) : promise;\n }) as Promise<T[number]>[];\n\n return await Promise.race(abortablePromises).finally(abort);\n};\n\nexport default race;\n\ntype AbortablePromise<T> = Promise<T> & { abortable: (signal: AbortSignal) => Promise<T> };\n\nconst isAbortable = <T>(promise: unknown): promise is AbortablePromise<T> =>\n isPromiseLike<T>(promise) && 'abortable' in promise && isFunction(promise.abortable);\n","const rejectAfter = (ms: number): Promise<void> => {\n return new Promise((_, reject) => setTimeout(reject, ms));\n};\n\nexport default rejectAfter;\n","/**\n * @description\n * This helper is needed to emit events synchronously, so that scenarios/effects/selectors\n * can resubscribe to an event before another emission.\n *\n * @example\n * const state = state(0);\n *\n * scenario(state.events.change, () => {\n * // Without `SyncQueue` this scenario would only run once\n * });\n *\n * state.set(1);\n * state.set(2);\n */\n\nexport default class SyncQueue {\n private callbacksQueue: Function[] = [];\n private isDequeuing = false;\n\n public enqueue(callback: Function) {\n this.callbacksQueue.push(callback);\n this.dequeue();\n }\n\n private dequeue = async () => {\n if (this.isDequeuing || this.callbacksQueue.length === 0) {\n return;\n }\n\n this.isDequeuing = true;\n const callback = this.callbacksQueue.shift()!;\n callback();\n\n queueMicrotask(() => {\n this.isDequeuing = false;\n this.dequeue();\n });\n };\n}\n","import { SyncQueue } from '../lib';\n\nconst queue = new SyncQueue();\n\nexport default queue;\n","import queue from '../global/queue';\nimport { isFunction } from '../lib';\n\ntype Resolver<T> = (value: T) => any;\ntype FilterPredicate<T> = (value: T) => boolean;\n\nexport default class AwaiEvent<T = void> {\n private _awaiters: Resolver<T>[] = [];\n\n then: PromiseLike<T>['then'] = (onfulfilled) => {\n return new Promise<any>((resolve, reject) => {\n this._awaiters.push((value: T) => {\n try {\n const result = isFunction(onfulfilled) ? onfulfilled(value) : value;\n resolve(result);\n } catch (error) {\n reject(error);\n }\n });\n });\n };\n\n abortable(abortSignal: AbortSignal): Promise<T> {\n if (abortSignal.aborted) {\n return Promise.reject(abortSignal.reason);\n }\n\n return new Promise<T>((resolve, reject) => {\n const resolveWithCleanup: Resolver<T> = (value: T) => {\n abortSignal.removeEventListener('abort', abortionHandler);\n resolve(value);\n };\n\n this._awaiters.push(resolveWithCleanup);\n\n const abortionHandler = () => {\n this._awaiters = this._awaiters.filter((awaiter) => awaiter !== resolveWithCleanup);\n reject(abortSignal.reason);\n };\n\n abortSignal.addEventListener('abort', abortionHandler, { once: true });\n });\n }\n\n emit(value: T) {\n queue.enqueue(async () => {\n const awaiters = this._awaiters;\n this._awaiters = [];\n\n for (const resolve of awaiters) {\n resolve(value);\n }\n });\n }\n\n async filter(predicate: FilterPredicate<T>) {\n return new Promise(async (resolve) => {\n while (true) {\n const newValue = await this;\n const isApplicable = Boolean(predicate(newValue));\n\n if (isApplicable) {\n resolve(newValue);\n return;\n }\n }\n });\n }\n}\n","const flush = () => new Promise<void>((resolve) => setTimeout(resolve, 0));\n\nexport default flush;\n","import { isCoreNode } from '../lib';\nimport type BaseNode from '../types/BaseNode';\n\nimport AwaiEvent from './AwaiEvent';\n\nexport default class Registry<T extends BaseNode> {\n private _nodes: T[] = [];\n public readonly events = {\n deregistered: new AwaiEvent<T['config']['id']>(),\n registered: new AwaiEvent<T>(),\n };\n\n public async register(node: T) {\n if (isCoreNode(node)) {\n return;\n }\n\n this._nodes.push(node);\n this.events.registered.emit(node);\n }\n\n public async deregister(id: BaseNode['config']['id']) {\n const node = this._nodes.find((node) => node.config.id === id);\n\n if (!node) {\n return;\n }\n\n this._nodes = this._nodes.filter((node) => node.config.id !== id);\n this.events.deregistered.emit(id);\n }\n\n get nodes() {\n return [...this._nodes];\n }\n}\n","import { Registry } from '../core';\n\nconst registry = new Registry();\n\nexport default registry;\n","import { SystemTag } from '../constants';\nimport { AwaiEvent, flush } from '../core';\nimport { registry } from '../global';\nimport { getUniqueId, isFunction } from '../lib';\n\nimport type { CallbackAction, Config, EmptyAction } from './types';\n\nconst getConfig = (customConfig: Partial<Config> = {}): Config => ({\n ...customConfig,\n id: customConfig.id ?? getUniqueId(action.name),\n tags: [SystemTag.ACTION, ...(customConfig.tags ?? [])],\n});\n\nfunction action<Args extends any[] = []>(): EmptyAction<Args>;\nfunction action<Args extends any[] = []>(config?: Partial<Config>): EmptyAction<Args>;\nfunction action<Args extends any[], Return = void>(\n callback: (...args: Args) => Return,\n config?: Partial<Config>,\n): CallbackAction<Args, Return>;\n\nfunction action<Args extends any[], Return = void>(\n ...args: [Partial<Config>?] | [(...args: Args) => Return, Partial<Config>?]\n): EmptyAction<Args> | CallbackAction<Args, Return> {\n type Action = EmptyAction<Args> | CallbackAction<Args, Return>;\n\n const hasCallback = isFunction(args[0]);\n const [callback, customConfig] = hasCallback\n ? (args as [(...args: Args) => Return, Partial<Config>?])\n : ([, ...args] as [undefined, Partial<Config>?]);\n\n const config = getConfig(customConfig);\n\n const events = {\n invoked: new AwaiEvent(),\n rejected: hasCallback ? new AwaiEvent() : undefined,\n fulfilled: hasCallback ? new AwaiEvent() : undefined,\n } satisfies Action['events'];\n\n const invoke = async (...invokeArgs: Args) => {\n const invocationId = getUniqueId('invocation');\n\n events.invoked.emit({ arguments: invokeArgs, config, invocationId });\n\n try {\n const valueOrPromise: Return | Promise<Return> = isFunction(callback)\n ? callback(...invokeArgs)\n : (undefined as Return);\n\n const value = await valueOrPromise;\n await flush();\n events.fulfilled?.emit({ arguments: invokeArgs, config, result: value, invocationId });\n return value;\n } catch (error) {\n events.rejected?.emit({\n arguments: invokeArgs,\n config,\n error,\n invocationId,\n });\n throw error;\n }\n };\n\n const actionNode = Object.assign(invoke, { config, events }) as Action;\n\n registry.register(actionNode);\n\n return actionNode;\n}\n\nexport default action;\n","import { AsyncStatus, SystemTag } from '../constants';\nimport { AwaiEvent, flush } from '../core';\nimport { registry } from '../global';\nimport { getUniqueId, isFunction, isPromiseOrFunction, race } from '../lib';\n\nimport type { VersionIgnoredEvent, AsyncState, Config, InitialValue, Version } from './types';\n\nconst getConfig = (customConfig: Partial<Config> = {}): Config => ({\n ...customConfig,\n id: customConfig.id ?? getUniqueId(asyncState.name),\n tags: [SystemTag.ASYNC_STATE, ...(customConfig.tags ?? [])],\n});\n\nconst asyncState = <T>(\n initialValue?: InitialValue<T>,\n customConfig?: Partial<Config>,\n): AsyncState<T> => {\n const config = getConfig(customConfig);\n const isInitialValueAsync = isPromiseOrFunction(initialValue);\n let version: Version = isInitialValueAsync ? 0 : 1;\n let lastPendingVersion: Version = version;\n let status: AsyncStatus = AsyncStatus.FULFILLED;\n let error: unknown = null;\n let value: T | undefined = isInitialValueAsync ? undefined : initialValue;\n\n const events: AsyncState<T>['events'] = {\n changed: new AwaiEvent<T | undefined>(),\n fulfilled: new AwaiEvent<T>(),\n ignored: new AwaiEvent<VersionIgnoredEvent<T>>(),\n rejected: new AwaiEvent<unknown>(),\n requested: new AwaiEvent<void>(),\n };\n\n const getStatus: AsyncState<T>['getStatus'] = () => status;\n\n const set: AsyncState<T>['set'] = async (nextValueOrResolver) => {\n const currentPendingVersion: Version = (lastPendingVersion + 1) % Number.MAX_SAFE_INTEGER;\n lastPendingVersion = currentPendingVersion;\n\n try {\n if (isPromiseOrFunction(nextValueOrResolver)) {\n status = AsyncStatus.PENDING;\n events.requested.emit();\n }\n\n let newValue = isFunction(nextValueOrResolver)\n ? await nextValueOrResolver(value)\n : await nextValueOrResolver;\n const isChanged = !Object.is(newValue, value);\n\n if (currentPendingVersion !== lastPendingVersion || !isChanged) {\n events.ignored.emit({ value: newValue, version: currentPendingVersion });\n return;\n }\n\n error = null;\n value = newValue;\n status = AsyncStatus.FULFILLED;\n\n events.fulfilled.emit(newValue);\n\n if (isChanged) {\n events.changed.emit(value);\n }\n } catch (e) {\n if (currentPendingVersion !== lastPendingVersion) {\n events.ignored.emit({ error: e, version: currentPendingVersion });\n return;\n }\n\n const isChanged = !Object.is(e, error);\n\n error = e;\n value = undefined;\n status = AsyncStatus.REJECTED;\n\n events.rejected.emit(error);\n\n if (isChanged) {\n events.changed.emit(value);\n }\n }\n\n version = lastPendingVersion;\n await flush();\n };\n\n const get: AsyncState<T>['get'] = () => value;\n\n const getAsync: AsyncState<T>['getAsync'] = () => ({\n error,\n isLoading: status === AsyncStatus.PENDING,\n value,\n });\n\n const getPromise: AsyncState<T>['getPromise'] = async () => {\n if (version === lastPendingVersion) {\n return value!;\n }\n\n await race([events.fulfilled, events.rejected]);\n\n if (error) {\n throw error;\n }\n\n return value!;\n };\n\n const then: PromiseLike<T>['then'] = async (resolve) => {\n if (!isFunction(resolve)) {\n return getPromise() as any;\n }\n\n return resolve(await getPromise());\n };\n\n if (isInitialValueAsync) {\n set(initialValue);\n }\n\n const asyncStateNode: AsyncState<T> = {\n config,\n events,\n get,\n getAsync,\n getPromise,\n getStatus,\n set,\n then,\n };\n\n registry.register(asyncStateNode);\n\n return asyncStateNode;\n};\n\nexport default asyncState;\n","import type { Config } from '../types';\n\nconst getDefaultStrategy = (\n isPlainPromiseTrigger: boolean,\n hasTrigger: boolean,\n): Config<unknown>['strategy'] => {\n if (isPlainPromiseTrigger) {\n return 'once';\n }\n\n if (hasTrigger) {\n return 'fork';\n }\n\n return 'cyclic';\n};\n\nexport default getDefaultStrategy;\n","import { isFunction } from '../../lib';\nimport type { Trigger } from '../types';\n\nconst getTriggerPromise = <T>(trigger: Trigger<T> | undefined) => {\n if (!trigger) {\n return Promise.resolve(undefined as T);\n }\n\n return isFunction(trigger) ? trigger() : trigger;\n};\n\nexport default getTriggerPromise;\n","import type { ShouldExpirePredicate, UntilTrigger } from '../types';\n\nconst getExpirationPromise = <E>(until: Exclude<UntilTrigger<E>, ShouldExpirePredicate>) => {\n if (typeof AbortSignal !== 'undefined' && until instanceof AbortSignal) {\n if (until.aborted) {\n return Promise.resolve(undefined);\n }\n\n return new Promise((resolve) => {\n until.addEventListener('abort', () => resolve(undefined), { once: true });\n });\n }\n\n return Promise.resolve(until) as Promise<E>;\n};\n\nexport default getExpirationPromise;\n","import { SystemTag } from '../constants';\nimport { AwaiEvent, flush } from '../core';\nimport { registry } from '../global';\nimport { getUniqueId, isAbortSignal, isFunction, isObject } from '../lib';\n\nimport { getDefaultStrategy, getExpirationPromise, getTriggerPromise } from './lib';\nimport type { Callback, Config, Scenario, Trigger } from './types';\n\nconst getConfig = <E = unknown>(\n isPlainPromiseTrigger: boolean,\n hasTrigger: boolean,\n customConfig: Partial<Config<E>> = {},\n): Config<E> => ({\n ...customConfig,\n id: customConfig.id ?? getUniqueId(scenario.name),\n strategy: customConfig.strategy ?? getDefaultStrategy(isPlainPromiseTrigger, hasTrigger),\n tags: [SystemTag.SCENARIO, ...(customConfig.tags ?? [])],\n});\n\nfunction scenario<T, R, E = unknown>(\n trigger: Trigger<T>,\n callback: Callback<T, R>,\n customConfig?: Partial<Config<E>>,\n): Scenario<T, R, E>;\n\nfunction scenario<T, R, E = unknown>(\n callback: Callback<T, R>,\n config?: Partial<Config<E>>,\n): Scenario<T, R, E>;\n\nfunction scenario<T, R, E = unknown>(\n ...args: [Trigger<T>, Callback<T, R>, Partial<Config<E>>?] | [Callback<T, R>, Partial<Config<E>>?]\n): Scenario<T, R, E> {\n const hasTrigger = isFunction(args[1]);\n\n const trigger = hasTrigger ? (args[0] as Trigger<T>) : undefined;\n const callback = (hasTrigger ? args[1] : args[0]) as Callback<T, R>;\n const customConfig = (hasTrigger ? args[2] : args[1]) as Partial<Config<E>> | undefined;\n const isPlainPromiseTrigger = hasTrigger && isObject(args[0]) && args[0].constructor === Promise;\n\n const config = getConfig<E>(isPlainPromiseTrigger, hasTrigger, customConfig);\n const { strategy, until } = config;\n const isFiniteScenario =\n isPlainPromiseTrigger || strategy === 'once' || typeof until !== 'undefined';\n let expirationEvent: E | undefined;\n let runningCallbacksCount = 0;\n let shouldExpire = false;\n let expired = false;\n\n const events: Scenario<T, R, E>['events'] = {\n fulfilled: new AwaiEvent(),\n rejected: new AwaiEvent(),\n settled: new AwaiEvent(),\n started: new AwaiEvent(),\n };\n\n const checkShouldExpire = () =>\n strategy === 'once' ||\n shouldExpire ||\n (isAbortSignal(until) ? until.aborted : false) ||\n (isFunction(until) ? until() : false);\n\n const expire = async () => {\n if (expired) {\n return;\n }\n\n expired = true;\n await flush();\n await events.settled.emit({ event: expirationEvent, config });\n await flush();\n await registry.deregister(config.id);\n };\n\n if (until && !isFunction(until)) {\n getExpirationPromise<E>(until).then((event) => {\n shouldExpire = true;\n expirationEvent = event as E;\n\n if (runningCallbacksCount === 0) {\n expire();\n }\n });\n }\n\n const run = async () => {\n getTriggerPromise(trigger).then(\n (event) => {\n if (expired) {\n return;\n }\n\n runningCallbacksCount++;\n events.started.emit({ config, event });\n\n try {\n Promise.resolve(callback(event))\n .then((result) => {\n flush().then(() => {\n events.fulfilled.emit({ config, event, result });\n });\n })\n .catch((error) => {\n events.rejected.emit(error);\n })\n .finally(() => {\n runningCallbacksCount--;\n\n if (checkShouldExpire() && runningCallbacksCount === 0) {\n expire();\n return;\n }\n\n if (strategy === 'cyclic') {\n queueMicrotask(run);\n }\n });\n } catch (error) {\n runningCallbacksCount--;\n events.rejected.emit(error);\n }\n\n if (strategy === 'fork') {\n queueMicrotask(run);\n }\n },\n () => {\n if (checkShouldExpire() && runningCallbacksCount === 0) {\n expire();\n return;\n }\n\n queueMicrotask(run);\n },\n );\n };\n\n const then: Scenario<T, R, E>['then'] = (resolve) => {\n if (!isFiniteScenario) {\n console.warn(\n 'You seem to await an infinite scenario. This causes a memory leak in your application.',\n );\n }\n\n if (!isFunction(resolve)) {\n return Promise.resolve(events.settled) as any;\n }\n\n return events.settled.then(resolve);\n };\n\n const scenarioNode: Scenario<T, R, E> = { config, events, then };\n\n registry.register(scenarioNode);\n\n run();\n\n return scenarioNode;\n}\n\nexport default scenario;\n","import { AsyncStatus, SystemTag } from '../constants';\nimport { AwaiEvent } from '../core';\nimport { registry } from '../global';\nimport { getAggregatedAsyncStatus, getUniqueId, isFunction, isReadableAsyncState } from '../lib';\nimport scenario from '../scenario';\nimport { type InferReadableType, type ReadableAsyncState, type ReadableState } from '../types';\n\nimport type { CleanupCallback, Config, Effect } from './types';\n\nconst getConfig = (customConfig: Partial<Config> = {}): Config => ({\n ...customConfig,\n id: customConfig.id ?? getUniqueId(effect.name),\n tags: [SystemTag.EFFECT, ...(customConfig.tags ?? [])],\n});\n\nconst effect = <\n T extends (ReadableState<any> | ReadableAsyncState<any>)[],\n V extends { [K in keyof T]: InferReadableType<T[K]> },\n>(\n states: [...T],\n effect: (...values: V) => CleanupCallback | void,\n customConfig?: Partial<Config>,\n): Effect<T, V> => {\n const config = getConfig(customConfig);\n const asyncStates = states.filter(isReadableAsyncState);\n\n let cleanup: ReturnType<typeof effect>;\n\n const events: Effect<T, V>['events'] = {\n cleared: new AwaiEvent(),\n started: new AwaiEvent(),\n };\n\n const runEffect = () => {\n const values = states.map((state) => state.get()) as V;\n const status = getAggregatedAsyncStatus(asyncStates);\n\n if (status !== AsyncStatus.FULFILLED) {\n return;\n }\n\n events.started.emit({ states, values });\n\n cleanup = effect(...values);\n };\n\n queueMicrotask(() => {\n scenario(\n () => Promise.race(states.map((state) => state.events.changed)),\n () => {\n if (isFunction(cleanup)) {\n cleanup();\n events.cleared.emit({ states });\n }\n\n runEffect();\n },\n { tags: [SystemTag.CORE_NODE] },\n );\n\n queueMicrotask(runEffect);\n });\n\n const effectNode: Effect<T, V> = { config, events };\n\n registry.register(effectNode);\n\n return effectNode;\n};\n\nexport default effect;\n","import { SystemTag } from '../constants';\nimport { AwaiEvent, flush } from '../core';\nimport { getUniqueId, isFunction } from '../lib';\nimport { registry } from '../global';\n\nimport type { Config, State } from './types';\n\nconst getConfig = (customConfig: Partial<Config> = {}): Config => ({\n ...customConfig,\n id: customConfig.id ?? getUniqueId(state.name),\n tags: [SystemTag.STATE, ...(customConfig.tags ?? [])],\n});\n\nconst state = <T>(initialValue: T, customConfig?: Partial<Config>): State<T> => {\n const config = getConfig(customConfig);\n\n let value = initialValue;\n\n const events = {\n changed: new AwaiEvent<T>(),\n };\n\n const set: State<T>['set'] = (nextValueOrResolver) => {\n let newValue = isFunction(nextValueOrResolver)\n ? nextValueOrResolver(value)\n : nextValueOrResolver;\n\n if (!Object.is(newValue, value)) {\n value = newValue;\n events.changed.emit(newValue);\n }\n\n return flush().then(() => newValue);\n };\n\n const get = () => value;\n\n const then: State<T>['then'] = async (resolve) => {\n if (!isFunction(resolve)) {\n return value as any;\n }\n\n return resolve(value);\n };\n\n const stateNode: State<T> = { config, events, get, set, then };\n\n registry.register(stateNode);\n\n return stateNode;\n};\n\nexport default state;\n","import asyncState, { type AsyncState } from '../async-state';\nimport { SystemTag } from '../constants';\nimport { AwaiEvent, flush } from '../core';\nimport { registry } from '../global';\nimport { getUniqueId, isFunction } from '../lib';\nimport scenario from '../scenario';\nimport state, { type State } from '../state';\nimport type { Id } from '../types';\n\nimport type { Config, FamilyState } from './types';\n\nconst getConfig = (customConfig: Partial<Config> = {}): Config => ({\n ...customConfig,\n id: customConfig.id ?? getUniqueId(familyState.name),\n tags: [SystemTag.FAMILY_STATE, ...(customConfig.tags ?? [])],\n});\n\nconst familyState = <\n T,\n Initializer extends (id: Id) => T | Promise<T>,\n Family extends Record<Id, NodeType>,\n NodeType extends State<any> | AsyncState<any> = ReturnType<Initializer> extends PromiseLike<\n infer Q\n >\n ? AsyncState<Q>\n : State<ReturnType<Initializer>>,\n>(\n initializer: Initializer,\n customConfig?: Partial<Config>,\n): FamilyState<NodeType> => {\n const config = getConfig(customConfig);\n\n let family: Family = {} as Family;\n\n const events = {\n changed: new AwaiEvent<Record<Id, NodeType>>(),\n stateCreated: new AwaiEvent<Id>(),\n };\n\n const getNode = (id: Id): NodeType => {\n if (id in family) {\n return family[id];\n }\n\n const initialValue = initializer(id);\n\n const stateNode =\n initialValue instanceof Promise\n ? asyncState(initialValue, { tags: [SystemTag.CORE_NODE] })\n : state(initialValue, { tags: [SystemTag.CORE_NODE] });\n\n family = { ...family, [id]: stateNode };\n events.stateCreated.emit(id);\n events.changed.emit(family);\n\n scenario(\n stateNode.events.changed,\n () => {\n events.changed.emit(family);\n },\n { tags: [SystemTag.CORE_NODE] },\n );\n\n return stateNode as NodeType;\n };\n\n const setNode = async (id: Id, stateNode: NodeType) => {\n if (id in family) {\n throw new Error(`Cannot set node. Node with id \"${id}\" already exists.`);\n }\n\n family = { ...family, [id]: stateNode };\n\n scenario(\n stateNode.events.changed,\n () => {\n events.changed.emit(family);\n },\n { tags: [SystemTag.CORE_NODE] },\n );\n\n events.changed.emit(family);\n\n await flush();\n };\n\n const get = () => {\n return family;\n };\n\n const then: FamilyState<NodeType>['then'] = async (resolve) => {\n if (!isFunction(resolve)) {\n return family as any;\n }\n\n return resolve(family);\n };\n\n const familyStateNode: FamilyState<NodeType> = { config, events, get, getNode, setNode, then };\n\n registry.register(familyStateNode);\n\n return familyStateNode;\n};\n\nexport default familyState;\n","import { AsyncStatus, SystemTag } from '../constants';\nimport { AwaiEvent } from '../core';\nimport { registry } from '../global';\nimport {\n fork,\n getAggregatedAsyncStatus,\n getUniqueId,\n isFunction,\n isReadableAsyncState,\n race,\n} from '../lib';\nimport scenario from '../scenario';\nimport type { InferReadableType, ReadableAsyncState, ReadableState } from '../types';\n\nimport type { AsyncConfig, AsyncSelector, VersionIgnoredEvent } from './types';\n\nconst getConfig = (customConfig: Partial<AsyncConfig> = {}): AsyncConfig => ({\n ...customConfig,\n id: customConfig.id ?? getUniqueId(asyncSelector.name),\n tags: [SystemTag.ASYNC_SELECTOR, ...(customConfig.tags ?? [])],\n});\n\nconst asyncSelector = <T extends (ReadableState | ReadableAsyncState)[], U>(\n states: T,\n predicate: (...values: { [K in keyof T]: InferReadableType<T[K]> }) => U,\n customConfig?: Partial<AsyncConfig>,\n): AsyncSelector<U> => {\n type StatesValues = { [K in keyof T]: InferReadableType<T[K]> };\n\n const config = getConfig(customConfig);\n const asyncStates = states.filter(isReadableAsyncState);\n\n let error: AggregateError | unknown | null = null;\n let value: U | undefined;\n let isLoading: boolean = true;\n let version = 0;\n let lastPendingVersion: number = version;\n\n const events: AsyncSelector<U>['events'] = {\n changed: new AwaiEvent<U | undefined>(),\n fulfilled: new AwaiEvent<U>(),\n ignored: new AwaiEvent<VersionIgnoredEvent<U>>(),\n rejected: new AwaiEvent<unknown>(),\n requested: new AwaiEvent<void>(),\n };\n\n const getStatus = () => {\n if (isLoading) {\n return AsyncStatus.PENDING;\n }\n\n const aggregatedStatus = getAggregatedAsyncStatus(asyncStates);\n\n return error !== null && aggregatedStatus === AsyncStatus.FULFILLED\n ? AsyncStatus.REJECTED\n : aggregatedStatus;\n };\n\n const determineNextVersion = async () => {\n const currentPendingVersion = (lastPendingVersion + 1) % Number.MAX_SAFE_INTEGER;\n lastPendingVersion = currentPendingVersion;\n\n const status = getAggregatedAsyncStatus(asyncStates);\n const errors = asyncStates.map((state) => state.getAsync().error).filter(Boolean);\n\n if (status === AsyncStatus.PENDING) {\n isLoading = true;\n }\n\n events.requested.emit();\n\n if (errors.length > 0) {\n error = new AggregateError(errors);\n value = undefined;\n isLoading = status === AsyncStatus.PENDING;\n version = lastPendingVersion;\n events.rejected.emit(error);\n events.changed.emit(value);\n return;\n }\n\n if (status === AsyncStatus.FULFILLED) {\n const values = states.map((state) => state.get()) as StatesValues;\n\n fork(async () => {\n isLoading = true;\n\n try {\n const newValue = await predicate(...values);\n const isChanged = !Object.is(newValue, value);\n\n if (currentPendingVersion !== lastPendingVersion) {\n events.ignored.emit({ value: newValue, version: currentPendingVersion });\n return;\n }\n\n error = null;\n value = newValue;\n\n events.fulfilled.emit(newValue);\n\n if (isChanged) {\n events.changed.emit(value);\n }\n } catch (caughtError) {\n if (currentPendingVersion !== lastPendingVersion) {\n events.ignored.emit({ error: caughtError, version: currentPendingVersion });\n return;\n }\n\n const isChanged = typeof value !== 'undefined';\n\n error = caughtError;\n value = undefined;\n\n events.rejected.emit(caughtError);\n\n if (isChanged) {\n events.changed.emit(value);\n }\n } finally {\n if (currentPendingVersion === lastPendingVersion) {\n version = lastPendingVersion;\n isLoading = false;\n }\n }\n });\n }\n };\n\n scenario(\n async () => {\n const abortController = new AbortController();\n const abortSignal = abortController.signal;\n await Promise.race(\n states.map((state) => {\n return isReadableAsyncState(state)\n ? race(\n [state.events.requested, state.events.rejected, state.events.fulfilled],\n abortSignal,\n )\n : state.events.changed.abortable(abortSignal);\n }),\n );\n abortController.abort();\n },\n determineNextVersion,\n { tags: [SystemTag.CORE_NODE] },\n );\n\n const get = () => value;\n\n const getAsync = () => ({ error, isLoading, value });\n\n const getPromise = async (): Promise<U> => {\n while (isLoading) {\n await race([events.fulfilled, events.rejected]);\n }\n\n if (error) {\n throw error;\n }\n\n return value!;\n };\n\n const then: AsyncSelector<U>['then'] = async (resolve) => {\n if (!isFunction(resolve)) {\n return getPromise() as any;\n }\n\n return resolve(await getPromise());\n };\n\n const selectorNode = {\n config,\n events,\n get,\n getAsync,\n getPromise,\n getStatus,\n then,\n };\n\n queueMicrotask(determineNextVersion);\n\n registry.register(selectorNode);\n\n return selectorNode;\n};\n\nexport default asyncSelector;\n","import { SystemTag } from '../constants';\nimport { AwaiEvent } from '../core';\nimport { registry } from '../global';\nimport { getUniqueId, isFunction, race } from '../lib';\nimport scenario from '../scenario';\nimport type { InferReadableType, ReadableAsyncState, ReadableState } from '../types';\n\nimport type { SyncConfig, SyncSelector } from './types';\n\nconst getConfig = (customConfig: Partial<SyncConfig> = {}): SyncConfig => ({\n ...customConfig,\n id: customConfig.id ?? getUniqueId(syncSelector.name),\n tags: [SystemTag.SELECTOR, ...(customConfig.tags ?? [])],\n});\n\nconst syncSelector = <T extends (ReadableState | ReadableAsyncState)[], U>(\n states: [...T],\n predicate: (...values: { [K in keyof T]: InferReadableType<T[K]> }) => U,\n customConfig?: Partial<SyncConfig>,\n): SyncSelector<U> => {\n const config = getConfig(customConfig);\n let value: U;\n\n const events = {\n changed: new AwaiEvent<U>(),\n };\n\n const get = () => {\n const values = states.map((state) => state.get()) as {\n [K in keyof T]: InferReadableType<T[K]>;\n };\n return predicate(...values);\n };\n\n const then: SyncSelector<U>['then'] = async (resolve) => {\n if (!isFunction(resolve)) {\n return get() as any;\n }\n\n return resolve(get());\n };\n\n scenario(\n () => race(states.map((state) => state.events.changed)),\n () => {\n const newValue = get();\n\n if (!Object.is(newValue, value)) {\n value = newValue;\n events.changed.emit(newValue);\n }\n },\n { tags: [SystemTag.CORE_NODE] },\n );\n\n value = get();\n\n const selectorNode: SyncSelector<U> = { config, events, get, then };\n\n registry.register(selectorNode);\n\n return selectorNode;\n};\n\nexport default syncSelector;\n","import { isReadableAsyncState } from '../lib';\nimport { type InferReadableType } from '../types';\n\nimport asyncSelector from './asyncSelector';\nimport syncSelector from './syncSelector';\nimport type { Config, Selector } from './types';\n\nconst selector = <T extends any[], U>(\n states: [...T],\n predicate: (...values: { [K in keyof T]: InferReadableType<T[K]> }) => U,\n customConfig?: Partial<Config<T, U>>,\n): Selector<T, U> => {\n const isAsyncPredicate = predicate.constructor.name === 'AsyncFunction';\n\n const state =\n isAsyncPredicate || states.some((state) => isReadableAsyncState(state))\n ? asyncSelector(states, predicate, customConfig)\n : syncSelector(states, predicate, customConfig);\n\n return state as Selector<T, U>;\n};\n\nexport default selector;\n"],"names":["AsyncStatus","SystemTag","__publicField","node","getConfig","effect","state"],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -2,7 +2,7 @@ type FilterPredicate<T> = (value: T) => boolean;
|
|
|
2
2
|
declare class AwaiEvent<T = void> {
|
|
3
3
|
private _awaiters;
|
|
4
4
|
then: PromiseLike<T>['then'];
|
|
5
|
-
abortable(
|
|
5
|
+
abortable(abortSignal: AbortSignal): Promise<T>;
|
|
6
6
|
emit(value: T): void;
|
|
7
7
|
filter(predicate: FilterPredicate<T>): Promise<unknown>;
|
|
8
8
|
}
|
|
@@ -212,6 +212,8 @@ declare const isPromiseLike: <T>(value: unknown) => value is PromiseLike<T>;
|
|
|
212
212
|
|
|
213
213
|
declare const isReadableAsyncState: <T>(value: unknown) => value is ReadableAsyncState<T>;
|
|
214
214
|
|
|
215
|
+
declare const race: <T extends readonly unknown[] | []>(promises: T, abortSignal?: AbortSignal) => Promise<T[number]>;
|
|
216
|
+
|
|
215
217
|
declare const rejectAfter: (ms: number) => Promise<void>;
|
|
216
218
|
|
|
217
219
|
/**
|
|
@@ -242,39 +244,38 @@ declare const registry: Registry<BaseNode>;
|
|
|
242
244
|
|
|
243
245
|
type Trigger<T> = AwaiEvent<T> | PromiseLike<T> | (() => PromiseLike<T>);
|
|
244
246
|
type ShouldExpirePredicate = () => boolean;
|
|
245
|
-
type
|
|
247
|
+
type UntilTrigger<T> = AwaiEvent<T> | PromiseLike<T> | ShouldExpirePredicate | AbortSignal;
|
|
246
248
|
type Callback<T = never, R = any> = (value: T) => R;
|
|
247
|
-
interface Config$1 extends BaseConfig, Record<string, any> {
|
|
248
|
-
repeat?: number;
|
|
249
|
+
interface Config$1<T = unknown> extends BaseConfig, Record<string, any> {
|
|
249
250
|
strategy: 'fork' | 'cyclic' | 'once';
|
|
251
|
+
until?: UntilTrigger<T>;
|
|
250
252
|
}
|
|
251
|
-
interface FulfilledEvent<T, R> {
|
|
253
|
+
interface FulfilledEvent<T, R, E = unknown> {
|
|
252
254
|
event: T;
|
|
253
255
|
result: R;
|
|
254
|
-
config: Config$1
|
|
256
|
+
config: Config$1<E>;
|
|
255
257
|
}
|
|
256
258
|
interface SettledEvent<T> {
|
|
257
259
|
event?: T;
|
|
258
|
-
config: Config$1
|
|
260
|
+
config: Config$1<T>;
|
|
259
261
|
}
|
|
260
|
-
interface StartedEvent<T> {
|
|
262
|
+
interface StartedEvent<T, E = unknown> {
|
|
261
263
|
event: T;
|
|
262
|
-
config: Config$1
|
|
264
|
+
config: Config$1<E>;
|
|
263
265
|
}
|
|
264
|
-
interface Scenario<T, R, E> {
|
|
266
|
+
interface Scenario<T, R, E = unknown> {
|
|
265
267
|
events: {
|
|
266
|
-
fulfilled: AwaiEvent<FulfilledEvent<T, R>>;
|
|
268
|
+
fulfilled: AwaiEvent<FulfilledEvent<T, R, E>>;
|
|
267
269
|
rejected: AwaiEvent<unknown>;
|
|
268
270
|
settled: AwaiEvent<SettledEvent<E>>;
|
|
269
|
-
started: AwaiEvent<StartedEvent<T>>;
|
|
271
|
+
started: AwaiEvent<StartedEvent<T, E>>;
|
|
270
272
|
};
|
|
271
|
-
get config(): Config$1
|
|
273
|
+
get config(): Config$1<E>;
|
|
272
274
|
then: AwaiEvent<SettledEvent<E>>['then'];
|
|
273
275
|
}
|
|
274
276
|
|
|
275
|
-
declare function scenario<T, R, E>(trigger: Trigger<T>, callback: Callback<T, R>, customConfig?: Partial<Config$1
|
|
276
|
-
declare function scenario<T, R, E>(
|
|
277
|
-
declare function scenario<T, R, E = unknown>(callback: Callback, config?: Partial<Config$1>): Scenario<T, R, E>;
|
|
277
|
+
declare function scenario<T, R, E = unknown>(trigger: Trigger<T>, callback: Callback<T, R>, customConfig?: Partial<Config$1<E>>): Scenario<T, R, E>;
|
|
278
|
+
declare function scenario<T, R, E = unknown>(callback: Callback<T, R>, config?: Partial<Config$1<E>>): Scenario<T, R, E>;
|
|
278
279
|
|
|
279
280
|
type Version = number;
|
|
280
281
|
type SyncConfig = BaseConfig & Record<string, any>;
|
|
@@ -299,5 +300,5 @@ type Config<T extends any[], U> = U extends PromiseLike<any> ? AsyncConfig : Con
|
|
|
299
300
|
|
|
300
301
|
declare const selector: <T extends any[], U>(states: [...T], predicate: (...values: { [K in keyof T]: InferReadableType<T[K]>; }) => U, customConfig?: Partial<Config<T, U>>) => Selector<T, U>;
|
|
301
302
|
|
|
302
|
-
export { AsyncStatus, AwaiEvent, Registry, SyncQueue, SystemTag, action, asyncState, delay, effect, familyState, flush, fork, getAggregatedAsyncStatus, isPromiseLike, isReadableAsyncState, queue, registry, rejectAfter, scenario, selector, state };
|
|
303
|
+
export { AsyncStatus, AwaiEvent, Registry, SyncQueue, SystemTag, action, asyncState, delay, effect, familyState, flush, fork, getAggregatedAsyncStatus, isPromiseLike, isReadableAsyncState, queue, race, registry, rejectAfter, scenario, selector, state };
|
|
303
304
|
export type { AsyncSetter, AsyncState, AsyncValue, FamilyState, InferReadableType, ReadableAsyncState, ReadableState, Config$1 as ScenarioConfig, Setter, State, WritableAsyncState, WritableState };
|
package/dist/index.mjs
CHANGED
|
@@ -43,6 +43,8 @@ const getUniqueId = (scope = "unknown") => {
|
|
|
43
43
|
return `awai$${scope}$${nextId}`;
|
|
44
44
|
};
|
|
45
45
|
|
|
46
|
+
const isAbortSignal = (value) => typeof AbortSignal !== "undefined" && value instanceof AbortSignal;
|
|
47
|
+
|
|
46
48
|
const isCoreNode = (node) => node.config.tags.includes(SystemTag.CORE_NODE);
|
|
47
49
|
|
|
48
50
|
const isFunction = (value) => typeof value === "function";
|
|
@@ -55,7 +57,22 @@ const isPromiseOrFunction = (value) => isFunction(value) || isPromiseLike(value)
|
|
|
55
57
|
|
|
56
58
|
const isReadableAsyncState = (value) => isObject(value) && isFunction(value.get) && isFunction(value.getAsync) && isFunction(value.getPromise) && isFunction(value.then);
|
|
57
59
|
|
|
58
|
-
const
|
|
60
|
+
const race = async (promises, abortSignal) => {
|
|
61
|
+
if (abortSignal?.aborted) {
|
|
62
|
+
return Promise.reject(abortSignal.reason);
|
|
63
|
+
}
|
|
64
|
+
const internalAbortController = new AbortController();
|
|
65
|
+
const abort = () => {
|
|
66
|
+
internalAbortController.abort();
|
|
67
|
+
abortSignal?.removeEventListener("abort", abort);
|
|
68
|
+
};
|
|
69
|
+
abortSignal?.addEventListener("abort", abort);
|
|
70
|
+
const abortablePromises = promises.map((promise) => {
|
|
71
|
+
return isAbortable(promise) ? promise.abortable(internalAbortController.signal) : promise;
|
|
72
|
+
});
|
|
73
|
+
return await Promise.race(abortablePromises).finally(abort);
|
|
74
|
+
};
|
|
75
|
+
const isAbortable = (promise) => isPromiseLike(promise) && "abortable" in promise && isFunction(promise.abortable);
|
|
59
76
|
|
|
60
77
|
const rejectAfter = (ms) => {
|
|
61
78
|
return new Promise((_, reject) => setTimeout(reject, ms));
|
|
@@ -108,15 +125,21 @@ class AwaiEvent {
|
|
|
108
125
|
});
|
|
109
126
|
});
|
|
110
127
|
}
|
|
111
|
-
abortable(
|
|
128
|
+
abortable(abortSignal) {
|
|
129
|
+
if (abortSignal.aborted) {
|
|
130
|
+
return Promise.reject(abortSignal.reason);
|
|
131
|
+
}
|
|
112
132
|
return new Promise((resolve, reject) => {
|
|
113
|
-
|
|
133
|
+
const resolveWithCleanup = (value) => {
|
|
134
|
+
abortSignal.removeEventListener("abort", abortionHandler);
|
|
135
|
+
resolve(value);
|
|
136
|
+
};
|
|
137
|
+
this._awaiters.push(resolveWithCleanup);
|
|
114
138
|
const abortionHandler = () => {
|
|
115
|
-
this._awaiters = this._awaiters.filter((awaiter) => awaiter !==
|
|
116
|
-
reject(
|
|
117
|
-
abortController.signal.removeEventListener("abort", abortionHandler);
|
|
139
|
+
this._awaiters = this._awaiters.filter((awaiter) => awaiter !== resolveWithCleanup);
|
|
140
|
+
reject(abortSignal.reason);
|
|
118
141
|
};
|
|
119
|
-
|
|
142
|
+
abortSignal.addEventListener("abort", abortionHandler, { once: true });
|
|
120
143
|
});
|
|
121
144
|
}
|
|
122
145
|
emit(value) {
|
|
@@ -284,15 +307,11 @@ const asyncState = (initialValue, customConfig) => {
|
|
|
284
307
|
if (version === lastPendingVersion) {
|
|
285
308
|
return value;
|
|
286
309
|
}
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
events.fulfilled.abortable(abortController).then(resolve).catch(noop);
|
|
291
|
-
events.rejected.abortable(abortController).then(reject).catch(noop);
|
|
292
|
-
});
|
|
293
|
-
} finally {
|
|
294
|
-
abortController.abort();
|
|
310
|
+
await race([events.fulfilled, events.rejected]);
|
|
311
|
+
if (error) {
|
|
312
|
+
throw error;
|
|
295
313
|
}
|
|
314
|
+
return value;
|
|
296
315
|
};
|
|
297
316
|
const then = async (resolve) => {
|
|
298
317
|
if (!isFunction(resolve)) {
|
|
@@ -334,6 +353,18 @@ const getTriggerPromise = (trigger) => {
|
|
|
334
353
|
return isFunction(trigger) ? trigger() : trigger;
|
|
335
354
|
};
|
|
336
355
|
|
|
356
|
+
const getExpirationPromise = (until) => {
|
|
357
|
+
if (typeof AbortSignal !== "undefined" && until instanceof AbortSignal) {
|
|
358
|
+
if (until.aborted) {
|
|
359
|
+
return Promise.resolve(void 0);
|
|
360
|
+
}
|
|
361
|
+
return new Promise((resolve) => {
|
|
362
|
+
until.addEventListener("abort", () => resolve(void 0), { once: true });
|
|
363
|
+
});
|
|
364
|
+
}
|
|
365
|
+
return Promise.resolve(until);
|
|
366
|
+
};
|
|
367
|
+
|
|
337
368
|
const getConfig$5 = (isPlainPromiseTrigger, hasTrigger, customConfig = {}) => ({
|
|
338
369
|
...customConfig,
|
|
339
370
|
id: customConfig.id ?? getUniqueId(scenario.name),
|
|
@@ -341,17 +372,15 @@ const getConfig$5 = (isPlainPromiseTrigger, hasTrigger, customConfig = {}) => ({
|
|
|
341
372
|
tags: [SystemTag.SCENARIO, ...customConfig.tags ?? []]
|
|
342
373
|
});
|
|
343
374
|
function scenario(...args) {
|
|
344
|
-
const hasTrigger = isFunction(args[1])
|
|
345
|
-
const hasExpirationTrigger = isFunction(args[2]);
|
|
375
|
+
const hasTrigger = isFunction(args[1]);
|
|
346
376
|
const trigger = hasTrigger ? args[0] : void 0;
|
|
347
|
-
const
|
|
348
|
-
const
|
|
349
|
-
const customConfig = args.at(args.indexOf(callback) + 1);
|
|
377
|
+
const callback = hasTrigger ? args[1] : args[0];
|
|
378
|
+
const customConfig = hasTrigger ? args[2] : args[1];
|
|
350
379
|
const isPlainPromiseTrigger = hasTrigger && isObject(args[0]) && args[0].constructor === Promise;
|
|
351
|
-
const isFiniteScenario = isPlainPromiseTrigger || hasExpirationTrigger || typeof customConfig?.repeat !== "undefined";
|
|
352
380
|
const config = getConfig$5(isPlainPromiseTrigger, hasTrigger, customConfig);
|
|
353
|
-
const { strategy } = config;
|
|
354
|
-
|
|
381
|
+
const { strategy, until } = config;
|
|
382
|
+
const isFiniteScenario = isPlainPromiseTrigger || strategy === "once" || typeof until !== "undefined";
|
|
383
|
+
let expirationEvent;
|
|
355
384
|
let runningCallbacksCount = 0;
|
|
356
385
|
let shouldExpire = false;
|
|
357
386
|
let expired = false;
|
|
@@ -361,26 +390,29 @@ function scenario(...args) {
|
|
|
361
390
|
settled: new AwaiEvent(),
|
|
362
391
|
started: new AwaiEvent()
|
|
363
392
|
};
|
|
364
|
-
const checkShouldExpire = () =>
|
|
365
|
-
const expire = async (
|
|
393
|
+
const checkShouldExpire = () => strategy === "once" || shouldExpire || (isAbortSignal(until) ? until.aborted : false) || (isFunction(until) ? until() : false);
|
|
394
|
+
const expire = async () => {
|
|
395
|
+
if (expired) {
|
|
396
|
+
return;
|
|
397
|
+
}
|
|
366
398
|
expired = true;
|
|
367
399
|
await flush();
|
|
368
|
-
await events.settled.emit({ event, config });
|
|
400
|
+
await events.settled.emit({ event: expirationEvent, config });
|
|
369
401
|
await flush();
|
|
370
402
|
await registry.deregister(config.id);
|
|
371
403
|
};
|
|
372
|
-
if (
|
|
373
|
-
|
|
404
|
+
if (until && !isFunction(until)) {
|
|
405
|
+
getExpirationPromise(until).then((event) => {
|
|
374
406
|
shouldExpire = true;
|
|
407
|
+
expirationEvent = event;
|
|
375
408
|
if (runningCallbacksCount === 0) {
|
|
376
|
-
expire(
|
|
409
|
+
expire();
|
|
377
410
|
}
|
|
378
411
|
});
|
|
379
412
|
}
|
|
380
413
|
const run = async () => {
|
|
381
414
|
getTriggerPromise(trigger).then(
|
|
382
415
|
(event) => {
|
|
383
|
-
repeat--;
|
|
384
416
|
if (expired) {
|
|
385
417
|
return;
|
|
386
418
|
}
|
|
@@ -412,6 +444,10 @@ function scenario(...args) {
|
|
|
412
444
|
}
|
|
413
445
|
},
|
|
414
446
|
() => {
|
|
447
|
+
if (checkShouldExpire() && runningCallbacksCount === 0) {
|
|
448
|
+
expire();
|
|
449
|
+
return;
|
|
450
|
+
}
|
|
415
451
|
queueMicrotask(run);
|
|
416
452
|
}
|
|
417
453
|
);
|
|
@@ -585,6 +621,9 @@ const asyncSelector = (states, predicate, customConfig) => {
|
|
|
585
621
|
requested: new AwaiEvent()
|
|
586
622
|
};
|
|
587
623
|
const getStatus = () => {
|
|
624
|
+
if (isLoading) {
|
|
625
|
+
return AsyncStatus.PENDING;
|
|
626
|
+
}
|
|
588
627
|
const aggregatedStatus = getAggregatedAsyncStatus(asyncStates);
|
|
589
628
|
return error !== null && aggregatedStatus === AsyncStatus.FULFILLED ? AsyncStatus.REJECTED : aggregatedStatus;
|
|
590
629
|
};
|
|
@@ -647,13 +686,13 @@ const asyncSelector = (states, predicate, customConfig) => {
|
|
|
647
686
|
scenario(
|
|
648
687
|
async () => {
|
|
649
688
|
const abortController = new AbortController();
|
|
689
|
+
const abortSignal = abortController.signal;
|
|
650
690
|
await Promise.race(
|
|
651
|
-
states.
|
|
652
|
-
return isReadableAsyncState(state) ?
|
|
653
|
-
state.events.requested.
|
|
654
|
-
|
|
655
|
-
|
|
656
|
-
] : state.events.changed.abortable(abortController);
|
|
691
|
+
states.map((state) => {
|
|
692
|
+
return isReadableAsyncState(state) ? race(
|
|
693
|
+
[state.events.requested, state.events.rejected, state.events.fulfilled],
|
|
694
|
+
abortSignal
|
|
695
|
+
) : state.events.changed.abortable(abortSignal);
|
|
657
696
|
})
|
|
658
697
|
);
|
|
659
698
|
abortController.abort();
|
|
@@ -664,10 +703,13 @@ const asyncSelector = (states, predicate, customConfig) => {
|
|
|
664
703
|
const get = () => value;
|
|
665
704
|
const getAsync = () => ({ error, isLoading, value });
|
|
666
705
|
const getPromise = async () => {
|
|
667
|
-
|
|
668
|
-
|
|
669
|
-
|
|
670
|
-
|
|
706
|
+
while (isLoading) {
|
|
707
|
+
await race([events.fulfilled, events.rejected]);
|
|
708
|
+
}
|
|
709
|
+
if (error) {
|
|
710
|
+
throw error;
|
|
711
|
+
}
|
|
712
|
+
return value;
|
|
671
713
|
};
|
|
672
714
|
const then = async (resolve) => {
|
|
673
715
|
if (!isFunction(resolve)) {
|
|
@@ -711,11 +753,7 @@ const syncSelector = (states, predicate, customConfig) => {
|
|
|
711
753
|
return resolve(get());
|
|
712
754
|
};
|
|
713
755
|
scenario(
|
|
714
|
-
|
|
715
|
-
const abortController = new AbortController();
|
|
716
|
-
await Promise.race(states.map((state) => state.events.changed.abortable(abortController)));
|
|
717
|
-
abortController.abort();
|
|
718
|
-
},
|
|
756
|
+
() => race(states.map((state) => state.events.changed)),
|
|
719
757
|
() => {
|
|
720
758
|
const newValue = get();
|
|
721
759
|
if (!Object.is(newValue, value)) {
|
|
@@ -737,5 +775,5 @@ const selector = (states, predicate, customConfig) => {
|
|
|
737
775
|
return state;
|
|
738
776
|
};
|
|
739
777
|
|
|
740
|
-
export { AsyncStatus, AwaiEvent, Registry, SyncQueue, SystemTag, action, asyncState, delay, effect, familyState, flush, fork, getAggregatedAsyncStatus, isPromiseLike, isReadableAsyncState, queue, registry, rejectAfter, scenario, selector, state };
|
|
778
|
+
export { AsyncStatus, AwaiEvent, Registry, SyncQueue, SystemTag, action, asyncState, delay, effect, familyState, flush, fork, getAggregatedAsyncStatus, isPromiseLike, isReadableAsyncState, queue, race, registry, rejectAfter, scenario, selector, state };
|
|
741
779
|
//# sourceMappingURL=index.mjs.map
|
package/dist/index.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.mjs","sources":["../src/constants/AsyncStatus.ts","../src/constants/SystemTag.ts","../src/lib/delay.ts","../src/lib/fork.ts","../src/lib/getAggregatedAsyncStatus.ts","../src/lib/getUniqueId.ts","../src/lib/isCoreNode.ts","../src/lib/isFunction.ts","../src/lib/isObject.ts","../src/lib/isPromiseLike.ts","../src/lib/isPromiseOrFunction.ts","../src/lib/isReadableAsyncState.ts","../src/lib/noop.ts","../src/lib/rejectAfter.ts","../src/lib/SyncQueue.ts","../src/global/queue.ts","../src/core/AwaiEvent.ts","../src/core/flush.ts","../src/core/Registry.ts","../src/global/registry.ts","../src/action/action.ts","../src/async-state/async-state.ts","../src/scenario/lib/getDefaultStrategy.ts","../src/scenario/lib/getTriggerPromise.ts","../src/scenario/scenario.ts","../src/effect/effect.ts","../src/state/state.ts","../src/family-state/family-state.ts","../src/selector/asyncSelector.ts","../src/selector/syncSelector.ts","../src/selector/selector.ts"],"sourcesContent":["enum AsyncStatus {\n FULFILLED = 'fulfilled',\n PENDING = 'pending',\n REJECTED = 'rejected',\n}\n\nexport default AsyncStatus;\n","enum SystemTag {\n ACTION = '@awai/action',\n ASYNC_SELECTOR = '@awai/async-selector',\n ASYNC_STATE = '@awai/async-state',\n CORE_NODE = '@awai/core-node',\n EFFECT = '@awai/effect',\n FAMILY_STATE = '@awai/family-state',\n SCENARIO = '@awai/scenario',\n SELECTOR = '@awai/selector',\n STATE = '@awai/state',\n}\n\nexport default SystemTag;\n","const delay = (ms: number): Promise<void> => new Promise((resolve) => setTimeout(resolve, ms));\n\nexport default delay;\n","const fork = async (forkFn: () => Promise<any>) => {\n await forkFn();\n};\n\nexport default fork;\n","import { AsyncStatus } from '../constants';\nimport type { ReadableAsyncState } from '../types';\n\nconst getAggregatedAsyncStatus = <T extends Pick<ReadableAsyncState, 'getStatus'>[]>(\n states: T,\n): AsyncStatus => {\n const hasError = states.some((state) => state.getStatus() === AsyncStatus.REJECTED);\n\n if (hasError) {\n return AsyncStatus.REJECTED;\n }\n\n const isPending = states.some((state) => state.getStatus() === AsyncStatus.PENDING);\n\n if (isPending) {\n return AsyncStatus.PENDING;\n }\n\n return AsyncStatus.FULFILLED;\n};\n\nexport default getAggregatedAsyncStatus;\n","const lastScopesIds: Record<string, number> = {};\n\nconst getUniqueId = (scope = 'unknown') => {\n const nextId = (lastScopesIds[scope] ?? 0) + 1;\n lastScopesIds[scope] = nextId;\n return `awai\\$${scope}\\$${nextId}`;\n};\n\nexport default getUniqueId;\n","import { SystemTag } from '../constants';\nimport type { BaseNode } from '../types';\n\nconst isCoreNode = (node: BaseNode): boolean => node.config.tags.includes(SystemTag.CORE_NODE);\n\nexport default isCoreNode;\n","const isFunction = (value: unknown): value is Function => typeof value === 'function';\n\nexport default isFunction;\n","const isObject = (value: unknown): value is Record<string, unknown> =>\n typeof value === 'object' && value !== null;\n\nexport default isObject;\n","import isFunction from './isFunction';\nimport isObject from './isObject';\n\nconst isPromiseLike = <T>(value: unknown): value is PromiseLike<T> =>\n isObject(value) && (value instanceof Promise || isFunction(value.then));\n\nexport default isPromiseLike;\n","import isFunction from './isFunction';\nimport isPromiseLike from './isPromiseLike';\n\nconst isPromiseOrFunction = <T>(\n value: unknown,\n): value is Promise<T> | ((...args: any) => Promise<T>) =>\n isFunction(value) || isPromiseLike<T>(value);\n\nexport default isPromiseOrFunction;\n","import type { ReadableAsyncState } from '../types';\n\nimport isFunction from './isFunction';\nimport isObject from './isObject';\n\nconst isReadableAsyncState = <T>(value: unknown): value is ReadableAsyncState<T> =>\n isObject(value) &&\n isFunction(value.get) &&\n isFunction(value.getAsync) &&\n isFunction(value.getPromise) &&\n isFunction(value.then);\n\nexport default isReadableAsyncState;\n","const noop = () => undefined;\n\nexport default noop;\n","const rejectAfter = (ms: number): Promise<void> => {\n return new Promise((_, reject) => setTimeout(reject, ms));\n};\n\nexport default rejectAfter;\n","/**\n * @description\n * This helper is needed to emit events synchronously, so that scenarios/effects/selectors\n * can resubscribe to an event before another emission.\n *\n * @example\n * const state = state(0);\n *\n * scenario(state.events.change, () => {\n * // Without `SyncQueue` this scenario would only run once\n * });\n *\n * state.set(1);\n * state.set(2);\n */\n\nexport default class SyncQueue {\n private callbacksQueue: Function[] = [];\n private isDequeuing = false;\n\n public enqueue(callback: Function) {\n this.callbacksQueue.push(callback);\n this.dequeue();\n }\n\n private dequeue = async () => {\n if (this.isDequeuing || this.callbacksQueue.length === 0) {\n return;\n }\n\n this.isDequeuing = true;\n const callback = this.callbacksQueue.shift()!;\n callback();\n\n queueMicrotask(() => {\n this.isDequeuing = false;\n this.dequeue();\n });\n };\n}\n","import { SyncQueue } from '../lib';\n\nconst queue = new SyncQueue();\n\nexport default queue;\n","import queue from '../global/queue';\nimport { isFunction } from '../lib';\n\ntype Resolver<T> = (value: T) => any;\ntype FilterPredicate<T> = (value: T) => boolean;\n\nexport default class AwaiEvent<T = void> {\n private _awaiters: Resolver<T>[] = [];\n\n then: PromiseLike<T>['then'] = (onfulfilled) => {\n return new Promise<any>((resolve, reject) => {\n this._awaiters.push((value: T) => {\n try {\n const result = isFunction(onfulfilled) ? onfulfilled(value) : value;\n resolve(result);\n } catch (error) {\n reject(error);\n }\n });\n });\n };\n\n abortable(abortController: AbortController): Promise<T> {\n return new Promise<T>((resolve, reject) => {\n this._awaiters.push(resolve);\n\n const abortionHandler = () => {\n this._awaiters = this._awaiters.filter((awaiter) => awaiter !== resolve);\n reject('Aborted');\n\n abortController.signal.removeEventListener('abort', abortionHandler);\n };\n\n abortController.signal.addEventListener('abort', abortionHandler);\n });\n }\n\n emit(value: T) {\n queue.enqueue(async () => {\n const awaiters = this._awaiters;\n this._awaiters = [];\n\n for (const resolve of awaiters) {\n resolve(value);\n }\n });\n }\n\n async filter(predicate: FilterPredicate<T>) {\n return new Promise(async (resolve) => {\n while (true) {\n const newValue = await this;\n const isApplicable = Boolean(predicate(newValue));\n\n if (isApplicable) {\n resolve(newValue);\n return;\n }\n }\n });\n }\n}\n","const flush = () => new Promise<void>((resolve) => setTimeout(resolve, 0));\n\nexport default flush;\n","import { isCoreNode } from '../lib';\nimport type BaseNode from '../types/BaseNode';\n\nimport AwaiEvent from './AwaiEvent';\n\nexport default class Registry<T extends BaseNode> {\n private _nodes: T[] = [];\n public readonly events = {\n deregistered: new AwaiEvent<T['config']['id']>(),\n registered: new AwaiEvent<T>(),\n };\n\n public async register(node: T) {\n if (isCoreNode(node)) {\n return;\n }\n\n this._nodes.push(node);\n this.events.registered.emit(node);\n }\n\n public async deregister(id: BaseNode['config']['id']) {\n const node = this._nodes.find((node) => node.config.id === id);\n\n if (!node) {\n return;\n }\n\n this._nodes = this._nodes.filter((node) => node.config.id !== id);\n this.events.deregistered.emit(id);\n }\n\n get nodes() {\n return [...this._nodes];\n }\n}\n","import { Registry } from '../core';\n\nconst registry = new Registry();\n\nexport default registry;\n","import { SystemTag } from '../constants';\nimport { AwaiEvent, flush } from '../core';\nimport { registry } from '../global';\nimport { getUniqueId, isFunction } from '../lib';\n\nimport type { CallbackAction, Config, EmptyAction } from './types';\n\nconst getConfig = (customConfig: Partial<Config> = {}): Config => ({\n ...customConfig,\n id: customConfig.id ?? getUniqueId(action.name),\n tags: [SystemTag.ACTION, ...(customConfig.tags ?? [])],\n});\n\nfunction action<Args extends any[] = []>(): EmptyAction<Args>;\nfunction action<Args extends any[] = []>(config?: Partial<Config>): EmptyAction<Args>;\nfunction action<Args extends any[], Return = void>(\n callback: (...args: Args) => Return,\n config?: Partial<Config>,\n): CallbackAction<Args, Return>;\n\nfunction action<Args extends any[], Return = void>(\n ...args: [Partial<Config>?] | [(...args: Args) => Return, Partial<Config>?]\n): EmptyAction<Args> | CallbackAction<Args, Return> {\n type Action = EmptyAction<Args> | CallbackAction<Args, Return>;\n\n const hasCallback = isFunction(args[0]);\n const [callback, customConfig] = hasCallback\n ? (args as [(...args: Args) => Return, Partial<Config>?])\n : ([, ...args] as [undefined, Partial<Config>?]);\n\n const config = getConfig(customConfig);\n\n const events = {\n invoked: new AwaiEvent(),\n rejected: hasCallback ? new AwaiEvent() : undefined,\n fulfilled: hasCallback ? new AwaiEvent() : undefined,\n } satisfies Action['events'];\n\n const invoke = async (...invokeArgs: Args) => {\n const invocationId = getUniqueId('invocation');\n\n events.invoked.emit({ arguments: invokeArgs, config, invocationId });\n\n try {\n const valueOrPromise: Return | Promise<Return> = isFunction(callback)\n ? callback(...invokeArgs)\n : (undefined as Return);\n\n const value = await valueOrPromise;\n await flush();\n events.fulfilled?.emit({ arguments: invokeArgs, config, result: value, invocationId });\n return value;\n } catch (error) {\n events.rejected?.emit({\n arguments: invokeArgs,\n config,\n error,\n invocationId,\n });\n throw error;\n }\n };\n\n const actionNode = Object.assign(invoke, { config, events }) as Action;\n\n registry.register(actionNode);\n\n return actionNode;\n}\n\nexport default action;\n","import { AsyncStatus, SystemTag } from '../constants';\nimport { AwaiEvent, flush } from '../core';\nimport { registry } from '../global';\nimport { getUniqueId, isFunction, isPromiseOrFunction, noop } from '../lib';\n\nimport type { VersionIgnoredEvent, AsyncState, Config, InitialValue, Version } from './types';\n\nconst getConfig = (customConfig: Partial<Config> = {}): Config => ({\n ...customConfig,\n id: customConfig.id ?? getUniqueId(asyncState.name),\n tags: [SystemTag.ASYNC_STATE, ...(customConfig.tags ?? [])],\n});\n\nconst asyncState = <T>(\n initialValue?: InitialValue<T>,\n customConfig?: Partial<Config>,\n): AsyncState<T> => {\n const config = getConfig(customConfig);\n const isInitialValueAsync = isPromiseOrFunction(initialValue);\n let version: Version = isInitialValueAsync ? 0 : 1;\n let lastPendingVersion: Version = version;\n let status: AsyncStatus = AsyncStatus.FULFILLED;\n let error: unknown = null;\n let value: T | undefined = isInitialValueAsync ? undefined : initialValue;\n\n const events: AsyncState<T>['events'] = {\n changed: new AwaiEvent<T | undefined>(),\n fulfilled: new AwaiEvent<T>(),\n ignored: new AwaiEvent<VersionIgnoredEvent<T>>(),\n rejected: new AwaiEvent<unknown>(),\n requested: new AwaiEvent<void>(),\n };\n\n const getStatus: AsyncState<T>['getStatus'] = () => status;\n\n const set: AsyncState<T>['set'] = async (nextValueOrResolver) => {\n const currentPendingVersion: Version = (lastPendingVersion + 1) % Number.MAX_SAFE_INTEGER;\n lastPendingVersion = currentPendingVersion;\n\n try {\n if (isPromiseOrFunction(nextValueOrResolver)) {\n status = AsyncStatus.PENDING;\n events.requested.emit();\n }\n\n let newValue = isFunction(nextValueOrResolver)\n ? await nextValueOrResolver(value)\n : await nextValueOrResolver;\n const isChanged = !Object.is(newValue, value);\n\n if (currentPendingVersion !== lastPendingVersion || !isChanged) {\n events.ignored.emit({ value: newValue, version: currentPendingVersion });\n return;\n }\n\n error = null;\n value = newValue;\n status = AsyncStatus.FULFILLED;\n\n events.fulfilled.emit(newValue);\n\n if (isChanged) {\n events.changed.emit(value);\n }\n } catch (e) {\n if (currentPendingVersion !== lastPendingVersion) {\n events.ignored.emit({ error: e, version: currentPendingVersion });\n return;\n }\n\n const isChanged = !Object.is(e, error);\n\n error = e;\n value = undefined;\n status = AsyncStatus.REJECTED;\n\n events.rejected.emit(error);\n\n if (isChanged) {\n events.changed.emit(value);\n }\n }\n\n version = lastPendingVersion;\n await flush();\n };\n\n const get: AsyncState<T>['get'] = () => value;\n\n const getAsync: AsyncState<T>['getAsync'] = () => ({\n error,\n isLoading: status === AsyncStatus.PENDING,\n value,\n });\n\n const getPromise: AsyncState<T>['getPromise'] = async () => {\n if (version === lastPendingVersion) {\n return value!;\n }\n\n const abortController = new AbortController();\n\n try {\n return await new Promise((resolve, reject) => {\n events.fulfilled.abortable(abortController).then(resolve).catch(noop);\n events.rejected.abortable(abortController).then(reject).catch(noop);\n });\n } finally {\n abortController.abort();\n }\n };\n\n const then: PromiseLike<T>['then'] = async (resolve) => {\n if (!isFunction(resolve)) {\n return getPromise() as any;\n }\n\n return resolve(await getPromise());\n };\n\n if (isInitialValueAsync) {\n set(initialValue);\n }\n\n const asyncStateNode: AsyncState<T> = {\n config,\n events,\n get,\n getAsync,\n getPromise,\n getStatus,\n set,\n then,\n };\n\n registry.register(asyncStateNode);\n\n return asyncStateNode;\n};\n\nexport default asyncState;\n","import type { Config } from '../types';\n\nconst getDefaultStrategy = (\n isPlainPromiseTrigger: boolean,\n hasTrigger: boolean,\n): Config['strategy'] => {\n if (isPlainPromiseTrigger) {\n return 'once';\n }\n\n if (hasTrigger) {\n return 'fork';\n }\n\n return 'cyclic';\n};\n\nexport default getDefaultStrategy;\n","import { isFunction } from '../../lib';\nimport type { Trigger } from '../types';\n\nconst getTriggerPromise = <T>(trigger: Trigger<T> | undefined) => {\n if (!trigger) {\n return Promise.resolve(undefined as T);\n }\n\n return isFunction(trigger) ? trigger() : trigger;\n};\n\nexport default getTriggerPromise;\n","import { SystemTag } from '../constants';\nimport { AwaiEvent, flush } from '../core';\nimport { registry } from '../global';\nimport { getUniqueId, isFunction, isObject, isPromiseLike } from '../lib';\n\nimport { getDefaultStrategy, getTriggerPromise } from './lib';\nimport type { Callback, Config, ExpirationTrigger, SettledEvent, Scenario, Trigger } from './types';\n\nconst getConfig = (\n isPlainPromiseTrigger: boolean,\n hasTrigger: boolean,\n customConfig: Partial<Config> = {},\n): Config => ({\n ...customConfig,\n id: customConfig.id ?? getUniqueId(scenario.name),\n strategy: customConfig.strategy ?? getDefaultStrategy(isPlainPromiseTrigger, hasTrigger),\n tags: [SystemTag.SCENARIO, ...(customConfig.tags ?? [])],\n});\n\nfunction scenario<T, R, E>(\n trigger: Trigger<T>,\n callback: Callback<T, R>,\n customConfig?: Partial<Config>,\n): Scenario<T, R, E>;\n\nfunction scenario<T, R, E>(\n trigger: Trigger<T>,\n expirationTrigger: ExpirationTrigger<E>,\n callback: Callback<T, R>,\n customConfig?: Partial<Config>,\n): Scenario<T, R, E>;\n\nfunction scenario<T, R, E = unknown>(\n callback: Callback,\n config?: Partial<Config>,\n): Scenario<T, R, E>;\n\nfunction scenario<T, R, E>(\n ...args:\n | [Trigger<T>, Callback<T, R>, Partial<Config>?]\n | [Trigger<T>, ExpirationTrigger<E>, Callback<T, R>, Partial<Config>?]\n | [Callback, Partial<Config>?]\n) {\n const hasTrigger = isFunction(args[1]) || isFunction(args[2]);\n const hasExpirationTrigger = isFunction(args[2]);\n\n const trigger = hasTrigger ? (args[0] as Trigger<T>) : undefined;\n const expirationTrigger = hasExpirationTrigger ? (args[1] as ExpirationTrigger<E>) : undefined;\n const callback = args.findLast(isFunction) as Callback<T, R>;\n const customConfig = args.at(args.indexOf(callback) + 1) as Partial<Config> | undefined;\n const isPlainPromiseTrigger = hasTrigger && isObject(args[0]) && args[0].constructor === Promise;\n const isFiniteScenario =\n isPlainPromiseTrigger || hasExpirationTrigger || typeof customConfig?.repeat !== 'undefined';\n\n const config = getConfig(isPlainPromiseTrigger, hasTrigger, customConfig);\n const { strategy } = config;\n let { repeat = Infinity } = config;\n let runningCallbacksCount = 0;\n let shouldExpire = false;\n let expired = false;\n\n const events: Scenario<T, R, E>['events'] = {\n fulfilled: new AwaiEvent(),\n rejected: new AwaiEvent(),\n settled: new AwaiEvent(),\n started: new AwaiEvent(),\n };\n\n const checkShouldExpire = () =>\n repeat <= 0 ||\n strategy === 'once' ||\n shouldExpire ||\n (isFunction(expirationTrigger) && expirationTrigger());\n\n const expire = async (event?: E) => {\n expired = true;\n await flush();\n await events.settled.emit({ event, config });\n await flush();\n await registry.deregister(config.id);\n };\n\n if (isPromiseLike(expirationTrigger)) {\n Promise.resolve(expirationTrigger).then((event) => {\n shouldExpire = true;\n\n if (runningCallbacksCount === 0) {\n expire(event);\n }\n });\n }\n\n const run = async () => {\n getTriggerPromise(trigger).then(\n (event) => {\n repeat--;\n\n if (expired) {\n return;\n }\n\n runningCallbacksCount++;\n events.started.emit({ config, event });\n\n try {\n Promise.resolve(callback(event))\n .then((result) => {\n flush().then(() => {\n events.fulfilled.emit({ config, event, result });\n });\n })\n .catch((error) => {\n events.rejected.emit(error);\n })\n .finally(() => {\n runningCallbacksCount--;\n\n if (checkShouldExpire() && runningCallbacksCount === 0) {\n expire();\n return;\n }\n\n if (strategy === 'cyclic') {\n queueMicrotask(run);\n }\n });\n } catch (error) {\n runningCallbacksCount--;\n events.rejected.emit(error);\n }\n\n if (strategy === 'fork') {\n queueMicrotask(run);\n }\n },\n () => {\n queueMicrotask(run);\n },\n );\n };\n\n const then: AwaiEvent<SettledEvent<E>>['then'] = (resolve) => {\n if (!isFiniteScenario) {\n console.warn(\n 'You seem to await an infinite scenario. This causes a memory leak in your application.',\n );\n }\n\n if (!isFunction(resolve)) {\n return Promise.resolve(events.settled) as any;\n }\n\n return events.settled.then(resolve);\n };\n\n const scenarioNode: Scenario<T, R, E> = { config, events, then };\n\n registry.register(scenarioNode);\n\n run();\n\n return scenarioNode;\n}\n\nexport default scenario;\n","import { AsyncStatus, SystemTag } from '../constants';\nimport { AwaiEvent } from '../core';\nimport { registry } from '../global';\nimport { getAggregatedAsyncStatus, getUniqueId, isFunction, isReadableAsyncState } from '../lib';\nimport scenario from '../scenario';\nimport { type InferReadableType, type ReadableAsyncState, type ReadableState } from '../types';\n\nimport type { CleanupCallback, Config, Effect } from './types';\n\nconst getConfig = (customConfig: Partial<Config> = {}): Config => ({\n ...customConfig,\n id: customConfig.id ?? getUniqueId(effect.name),\n tags: [SystemTag.EFFECT, ...(customConfig.tags ?? [])],\n});\n\nconst effect = <\n T extends (ReadableState<any> | ReadableAsyncState<any>)[],\n V extends { [K in keyof T]: InferReadableType<T[K]> },\n>(\n states: [...T],\n effect: (...values: V) => CleanupCallback | void,\n customConfig?: Partial<Config>,\n): Effect<T, V> => {\n const config = getConfig(customConfig);\n const asyncStates = states.filter(isReadableAsyncState);\n\n let cleanup: ReturnType<typeof effect>;\n\n const events: Effect<T, V>['events'] = {\n cleared: new AwaiEvent(),\n started: new AwaiEvent(),\n };\n\n const runEffect = () => {\n const values = states.map((state) => state.get()) as V;\n const status = getAggregatedAsyncStatus(asyncStates);\n\n if (status !== AsyncStatus.FULFILLED) {\n return;\n }\n\n events.started.emit({ states, values });\n\n cleanup = effect(...values);\n };\n\n queueMicrotask(() => {\n scenario(\n () => Promise.race(states.map((state) => state.events.changed)),\n () => {\n if (isFunction(cleanup)) {\n cleanup();\n events.cleared.emit({ states });\n }\n\n runEffect();\n },\n { tags: [SystemTag.CORE_NODE] },\n );\n\n queueMicrotask(runEffect);\n });\n\n const effectNode: Effect<T, V> = { config, events };\n\n registry.register(effectNode);\n\n return effectNode;\n};\n\nexport default effect;\n","import { SystemTag } from '../constants';\nimport { AwaiEvent, flush } from '../core';\nimport { getUniqueId, isFunction } from '../lib';\nimport { registry } from '../global';\n\nimport type { Config, State } from './types';\n\nconst getConfig = (customConfig: Partial<Config> = {}): Config => ({\n ...customConfig,\n id: customConfig.id ?? getUniqueId(state.name),\n tags: [SystemTag.STATE, ...(customConfig.tags ?? [])],\n});\n\nconst state = <T>(initialValue: T, customConfig?: Partial<Config>): State<T> => {\n const config = getConfig(customConfig);\n\n let value = initialValue;\n\n const events = {\n changed: new AwaiEvent<T>(),\n };\n\n const set: State<T>['set'] = (nextValueOrResolver) => {\n let newValue = isFunction(nextValueOrResolver)\n ? nextValueOrResolver(value)\n : nextValueOrResolver;\n\n if (!Object.is(newValue, value)) {\n value = newValue;\n events.changed.emit(newValue);\n }\n\n return flush().then(() => newValue);\n };\n\n const get = () => value;\n\n const then: State<T>['then'] = async (resolve) => {\n if (!isFunction(resolve)) {\n return value as any;\n }\n\n return resolve(value);\n };\n\n const stateNode: State<T> = { config, events, get, set, then };\n\n registry.register(stateNode);\n\n return stateNode;\n};\n\nexport default state;\n","import asyncState, { type AsyncState } from '../async-state';\nimport { SystemTag } from '../constants';\nimport { AwaiEvent, flush } from '../core';\nimport { registry } from '../global';\nimport { getUniqueId, isFunction } from '../lib';\nimport scenario from '../scenario';\nimport state, { type State } from '../state';\nimport type { Id } from '../types';\n\nimport type { Config, FamilyState } from './types';\n\nconst getConfig = (customConfig: Partial<Config> = {}): Config => ({\n ...customConfig,\n id: customConfig.id ?? getUniqueId(familyState.name),\n tags: [SystemTag.FAMILY_STATE, ...(customConfig.tags ?? [])],\n});\n\nconst familyState = <\n T,\n Initializer extends (id: Id) => T | Promise<T>,\n Family extends Record<Id, NodeType>,\n NodeType extends State<any> | AsyncState<any> = ReturnType<Initializer> extends PromiseLike<\n infer Q\n >\n ? AsyncState<Q>\n : State<ReturnType<Initializer>>,\n>(\n initializer: Initializer,\n customConfig?: Partial<Config>,\n): FamilyState<NodeType> => {\n const config = getConfig(customConfig);\n\n let family: Family = {} as Family;\n\n const events = {\n changed: new AwaiEvent<Record<Id, NodeType>>(),\n stateCreated: new AwaiEvent<Id>(),\n };\n\n const getNode = (id: Id): NodeType => {\n if (id in family) {\n return family[id];\n }\n\n const initialValue = initializer(id);\n\n const stateNode =\n initialValue instanceof Promise\n ? asyncState(initialValue, { tags: [SystemTag.CORE_NODE] })\n : state(initialValue, { tags: [SystemTag.CORE_NODE] });\n\n family = { ...family, [id]: stateNode };\n events.stateCreated.emit(id);\n events.changed.emit(family);\n\n scenario(\n stateNode.events.changed,\n () => {\n events.changed.emit(family);\n },\n { tags: [SystemTag.CORE_NODE] },\n );\n\n return stateNode as NodeType;\n };\n\n const setNode = async (id: Id, stateNode: NodeType) => {\n if (id in family) {\n throw new Error(`Cannot set node. Node with id \"${id}\" already exists.`);\n }\n\n family = { ...family, [id]: stateNode };\n\n scenario(\n stateNode.events.changed,\n () => {\n events.changed.emit(family);\n },\n { tags: [SystemTag.CORE_NODE] },\n );\n\n events.changed.emit(family);\n\n await flush();\n };\n\n const get = () => {\n return family;\n };\n\n const then: FamilyState<NodeType>['then'] = async (resolve) => {\n if (!isFunction(resolve)) {\n return family as any;\n }\n\n return resolve(family);\n };\n\n const familyStateNode: FamilyState<NodeType> = { config, events, get, getNode, setNode, then };\n\n registry.register(familyStateNode);\n\n return familyStateNode;\n};\n\nexport default familyState;\n","import { AsyncStatus, SystemTag } from '../constants';\nimport { AwaiEvent } from '../core';\nimport { registry } from '../global';\nimport {\n fork,\n getAggregatedAsyncStatus,\n getUniqueId,\n isFunction,\n isReadableAsyncState,\n} from '../lib';\nimport scenario from '../scenario';\nimport type { InferReadableType, ReadableAsyncState, ReadableState } from '../types';\n\nimport type { AsyncConfig, AsyncSelector, VersionIgnoredEvent } from './types';\n\nconst getConfig = (customConfig: Partial<AsyncConfig> = {}): AsyncConfig => ({\n ...customConfig,\n id: customConfig.id ?? getUniqueId(asyncSelector.name),\n tags: [SystemTag.ASYNC_SELECTOR, ...(customConfig.tags ?? [])],\n});\n\nconst asyncSelector = <T extends (ReadableState | ReadableAsyncState)[], U>(\n states: T,\n predicate: (...values: { [K in keyof T]: InferReadableType<T[K]> }) => U,\n customConfig?: Partial<AsyncConfig>,\n): AsyncSelector<U> => {\n type StatesValues = { [K in keyof T]: InferReadableType<T[K]> };\n\n const config = getConfig(customConfig);\n const asyncStates = states.filter(isReadableAsyncState);\n\n let error: AggregateError | unknown | null = null;\n let value: U | undefined;\n let isLoading: boolean = true;\n let version = 0;\n let lastPendingVersion: number = version;\n\n const events: AsyncSelector<U>['events'] = {\n changed: new AwaiEvent<U | undefined>(),\n fulfilled: new AwaiEvent<U>(),\n ignored: new AwaiEvent<VersionIgnoredEvent<U>>(),\n rejected: new AwaiEvent<unknown>(),\n requested: new AwaiEvent<void>(),\n };\n\n const getStatus = () => {\n const aggregatedStatus = getAggregatedAsyncStatus(asyncStates);\n\n return error !== null && aggregatedStatus === AsyncStatus.FULFILLED\n ? AsyncStatus.REJECTED\n : aggregatedStatus;\n };\n\n const determineNextVersion = async () => {\n const currentPendingVersion = (lastPendingVersion + 1) % Number.MAX_SAFE_INTEGER;\n lastPendingVersion = currentPendingVersion;\n\n const status = getAggregatedAsyncStatus(asyncStates);\n const errors = asyncStates.map((state) => state.getAsync().error).filter(Boolean);\n\n if (status === AsyncStatus.PENDING) {\n isLoading = true;\n }\n\n events.requested.emit();\n\n if (errors.length > 0) {\n error = new AggregateError(errors);\n value = undefined;\n isLoading = status === AsyncStatus.PENDING;\n version = lastPendingVersion;\n events.rejected.emit(error);\n events.changed.emit(value);\n return;\n }\n\n if (status === AsyncStatus.FULFILLED) {\n const values = states.map((state) => state.get()) as StatesValues;\n\n fork(async () => {\n isLoading = true;\n\n try {\n const newValue = await predicate(...values);\n const isChanged = !Object.is(newValue, value);\n\n if (currentPendingVersion !== lastPendingVersion) {\n events.ignored.emit({ value: newValue, version: currentPendingVersion });\n return;\n }\n\n error = null;\n value = newValue;\n\n events.fulfilled.emit(newValue);\n\n if (isChanged) {\n events.changed.emit(value);\n }\n } catch (caughtError) {\n if (currentPendingVersion !== lastPendingVersion) {\n events.ignored.emit({ error: caughtError, version: currentPendingVersion });\n return;\n }\n\n const isChanged = typeof value !== 'undefined';\n\n error = caughtError;\n value = undefined;\n\n events.rejected.emit(caughtError);\n\n if (isChanged) {\n events.changed.emit(value);\n }\n } finally {\n if (currentPendingVersion === lastPendingVersion) {\n version = lastPendingVersion;\n isLoading = false;\n }\n }\n });\n }\n };\n\n scenario(\n async () => {\n const abortController = new AbortController();\n await Promise.race(\n states.flatMap((state) => {\n return isReadableAsyncState(state)\n ? [\n state.events.requested.abortable(abortController),\n state.events.rejected.abortable(abortController),\n state.events.fulfilled.abortable(abortController),\n ]\n : state.events.changed.abortable(abortController);\n }),\n );\n abortController.abort();\n },\n determineNextVersion,\n { tags: [SystemTag.CORE_NODE] },\n );\n\n const get = () => value;\n\n const getAsync = () => ({ error, isLoading, value });\n\n const getPromise = async (): Promise<U> => {\n const values = (await Promise.all(\n states.map((state) => (isReadableAsyncState(state) ? state.getPromise() : state.get())),\n )) as StatesValues;\n\n return predicate(...values);\n };\n\n const then: AsyncSelector<U>['then'] = async (resolve) => {\n if (!isFunction(resolve)) {\n return getPromise() as any;\n }\n\n return resolve(await getPromise());\n };\n\n const selectorNode = {\n config,\n events,\n get,\n getAsync,\n getPromise,\n getStatus,\n then,\n };\n\n queueMicrotask(determineNextVersion);\n\n registry.register(selectorNode);\n\n return selectorNode;\n};\n\nexport default asyncSelector;\n","import { SystemTag } from '../constants';\nimport { AwaiEvent } from '../core';\nimport { registry } from '../global';\nimport { getUniqueId, isFunction } from '../lib';\nimport scenario from '../scenario';\nimport type { InferReadableType, ReadableAsyncState, ReadableState } from '../types';\n\nimport type { SyncConfig, SyncSelector } from './types';\n\nconst getConfig = (customConfig: Partial<SyncConfig> = {}): SyncConfig => ({\n ...customConfig,\n id: customConfig.id ?? getUniqueId(syncSelector.name),\n tags: [SystemTag.SELECTOR, ...(customConfig.tags ?? [])],\n});\n\nconst syncSelector = <T extends (ReadableState | ReadableAsyncState)[], U>(\n states: [...T],\n predicate: (...values: { [K in keyof T]: InferReadableType<T[K]> }) => U,\n customConfig?: Partial<SyncConfig>,\n): SyncSelector<U> => {\n const config = getConfig(customConfig);\n let value: U;\n\n const events = {\n changed: new AwaiEvent<U>(),\n };\n\n const get = () => {\n const values = states.map((state) => state.get()) as {\n [K in keyof T]: InferReadableType<T[K]>;\n };\n return predicate(...values);\n };\n\n const then: SyncSelector<U>['then'] = async (resolve) => {\n if (!isFunction(resolve)) {\n return get() as any;\n }\n\n return resolve(get());\n };\n\n scenario(\n async () => {\n const abortController = new AbortController();\n await Promise.race(states.map((state) => state.events.changed.abortable(abortController)));\n abortController.abort();\n },\n () => {\n const newValue = get();\n\n if (!Object.is(newValue, value)) {\n value = newValue;\n events.changed.emit(newValue);\n }\n },\n { tags: [SystemTag.CORE_NODE] },\n );\n\n value = get();\n\n const selectorNode: SyncSelector<U> = { config, events, get, then };\n\n registry.register(selectorNode);\n\n return selectorNode;\n};\n\nexport default syncSelector;\n","import { isReadableAsyncState } from '../lib';\nimport { type InferReadableType } from '../types';\n\nimport asyncSelector from './asyncSelector';\nimport syncSelector from './syncSelector';\nimport type { Config, Selector } from './types';\n\nconst selector = <T extends any[], U>(\n states: [...T],\n predicate: (...values: { [K in keyof T]: InferReadableType<T[K]> }) => U,\n customConfig?: Partial<Config<T, U>>,\n): Selector<T, U> => {\n const isAsyncPredicate = predicate.constructor.name === 'AsyncFunction';\n\n const state =\n isAsyncPredicate || states.some((state) => isReadableAsyncState(state))\n ? asyncSelector(states, predicate, customConfig)\n : syncSelector(states, predicate, customConfig);\n\n return state as Selector<T, U>;\n};\n\nexport default selector;\n"],"names":["AsyncStatus","SystemTag","__publicField","node","getConfig","effect","state"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.mjs","sources":["../src/constants/AsyncStatus.ts","../src/constants/SystemTag.ts","../src/lib/delay.ts","../src/lib/fork.ts","../src/lib/getAggregatedAsyncStatus.ts","../src/lib/getUniqueId.ts","../src/lib/isAbortSignal.ts","../src/lib/isCoreNode.ts","../src/lib/isFunction.ts","../src/lib/isObject.ts","../src/lib/isPromiseLike.ts","../src/lib/isPromiseOrFunction.ts","../src/lib/isReadableAsyncState.ts","../src/lib/race.ts","../src/lib/rejectAfter.ts","../src/lib/SyncQueue.ts","../src/global/queue.ts","../src/core/AwaiEvent.ts","../src/core/flush.ts","../src/core/Registry.ts","../src/global/registry.ts","../src/action/action.ts","../src/async-state/async-state.ts","../src/scenario/lib/getDefaultStrategy.ts","../src/scenario/lib/getTriggerPromise.ts","../src/scenario/lib/getExpirationPromise.ts","../src/scenario/scenario.ts","../src/effect/effect.ts","../src/state/state.ts","../src/family-state/family-state.ts","../src/selector/asyncSelector.ts","../src/selector/syncSelector.ts","../src/selector/selector.ts"],"sourcesContent":["enum AsyncStatus {\n FULFILLED = 'fulfilled',\n PENDING = 'pending',\n REJECTED = 'rejected',\n}\n\nexport default AsyncStatus;\n","enum SystemTag {\n ACTION = '@awai/action',\n ASYNC_SELECTOR = '@awai/async-selector',\n ASYNC_STATE = '@awai/async-state',\n CORE_NODE = '@awai/core-node',\n EFFECT = '@awai/effect',\n FAMILY_STATE = '@awai/family-state',\n SCENARIO = '@awai/scenario',\n SELECTOR = '@awai/selector',\n STATE = '@awai/state',\n}\n\nexport default SystemTag;\n","const delay = (ms: number): Promise<void> => new Promise((resolve) => setTimeout(resolve, ms));\n\nexport default delay;\n","const fork = async (forkFn: () => Promise<any>) => {\n await forkFn();\n};\n\nexport default fork;\n","import { AsyncStatus } from '../constants';\nimport type { ReadableAsyncState } from '../types';\n\nconst getAggregatedAsyncStatus = <T extends Pick<ReadableAsyncState, 'getStatus'>[]>(\n states: T,\n): AsyncStatus => {\n const hasError = states.some((state) => state.getStatus() === AsyncStatus.REJECTED);\n\n if (hasError) {\n return AsyncStatus.REJECTED;\n }\n\n const isPending = states.some((state) => state.getStatus() === AsyncStatus.PENDING);\n\n if (isPending) {\n return AsyncStatus.PENDING;\n }\n\n return AsyncStatus.FULFILLED;\n};\n\nexport default getAggregatedAsyncStatus;\n","const lastScopesIds: Record<string, number> = {};\n\nconst getUniqueId = (scope = 'unknown') => {\n const nextId = (lastScopesIds[scope] ?? 0) + 1;\n lastScopesIds[scope] = nextId;\n return `awai\\$${scope}\\$${nextId}`;\n};\n\nexport default getUniqueId;\n","const isAbortSignal = (value: unknown): value is AbortSignal =>\n typeof AbortSignal !== 'undefined' && value instanceof AbortSignal;\n\nexport default isAbortSignal;\n","import { SystemTag } from '../constants';\nimport type { BaseNode } from '../types';\n\nconst isCoreNode = (node: BaseNode): boolean => node.config.tags.includes(SystemTag.CORE_NODE);\n\nexport default isCoreNode;\n","const isFunction = (value: unknown): value is Function => typeof value === 'function';\n\nexport default isFunction;\n","const isObject = (value: unknown): value is Record<string, unknown> =>\n typeof value === 'object' && value !== null;\n\nexport default isObject;\n","import isFunction from './isFunction';\nimport isObject from './isObject';\n\nconst isPromiseLike = <T>(value: unknown): value is PromiseLike<T> =>\n isObject(value) && (value instanceof Promise || isFunction(value.then));\n\nexport default isPromiseLike;\n","import isFunction from './isFunction';\nimport isPromiseLike from './isPromiseLike';\n\nconst isPromiseOrFunction = <T>(\n value: unknown,\n): value is Promise<T> | ((...args: any) => Promise<T>) =>\n isFunction(value) || isPromiseLike<T>(value);\n\nexport default isPromiseOrFunction;\n","import type { ReadableAsyncState } from '../types';\n\nimport isFunction from './isFunction';\nimport isObject from './isObject';\n\nconst isReadableAsyncState = <T>(value: unknown): value is ReadableAsyncState<T> =>\n isObject(value) &&\n isFunction(value.get) &&\n isFunction(value.getAsync) &&\n isFunction(value.getPromise) &&\n isFunction(value.then);\n\nexport default isReadableAsyncState;\n","import isPromiseLike from './isPromiseLike';\nimport isFunction from './isFunction';\n\nconst race = async <T extends readonly unknown[] | []>(promises: T, abortSignal?: AbortSignal) => {\n if (abortSignal?.aborted) {\n return Promise.reject(abortSignal.reason);\n }\n\n const internalAbortController = new AbortController();\n\n const abort = () => {\n internalAbortController.abort();\n abortSignal?.removeEventListener('abort', abort);\n };\n\n abortSignal?.addEventListener('abort', abort);\n\n const abortablePromises = promises.map((promise) => {\n return isAbortable(promise) ? promise.abortable(internalAbortController.signal) : promise;\n }) as Promise<T[number]>[];\n\n return await Promise.race(abortablePromises).finally(abort);\n};\n\nexport default race;\n\ntype AbortablePromise<T> = Promise<T> & { abortable: (signal: AbortSignal) => Promise<T> };\n\nconst isAbortable = <T>(promise: unknown): promise is AbortablePromise<T> =>\n isPromiseLike<T>(promise) && 'abortable' in promise && isFunction(promise.abortable);\n","const rejectAfter = (ms: number): Promise<void> => {\n return new Promise((_, reject) => setTimeout(reject, ms));\n};\n\nexport default rejectAfter;\n","/**\n * @description\n * This helper is needed to emit events synchronously, so that scenarios/effects/selectors\n * can resubscribe to an event before another emission.\n *\n * @example\n * const state = state(0);\n *\n * scenario(state.events.change, () => {\n * // Without `SyncQueue` this scenario would only run once\n * });\n *\n * state.set(1);\n * state.set(2);\n */\n\nexport default class SyncQueue {\n private callbacksQueue: Function[] = [];\n private isDequeuing = false;\n\n public enqueue(callback: Function) {\n this.callbacksQueue.push(callback);\n this.dequeue();\n }\n\n private dequeue = async () => {\n if (this.isDequeuing || this.callbacksQueue.length === 0) {\n return;\n }\n\n this.isDequeuing = true;\n const callback = this.callbacksQueue.shift()!;\n callback();\n\n queueMicrotask(() => {\n this.isDequeuing = false;\n this.dequeue();\n });\n };\n}\n","import { SyncQueue } from '../lib';\n\nconst queue = new SyncQueue();\n\nexport default queue;\n","import queue from '../global/queue';\nimport { isFunction } from '../lib';\n\ntype Resolver<T> = (value: T) => any;\ntype FilterPredicate<T> = (value: T) => boolean;\n\nexport default class AwaiEvent<T = void> {\n private _awaiters: Resolver<T>[] = [];\n\n then: PromiseLike<T>['then'] = (onfulfilled) => {\n return new Promise<any>((resolve, reject) => {\n this._awaiters.push((value: T) => {\n try {\n const result = isFunction(onfulfilled) ? onfulfilled(value) : value;\n resolve(result);\n } catch (error) {\n reject(error);\n }\n });\n });\n };\n\n abortable(abortSignal: AbortSignal): Promise<T> {\n if (abortSignal.aborted) {\n return Promise.reject(abortSignal.reason);\n }\n\n return new Promise<T>((resolve, reject) => {\n const resolveWithCleanup: Resolver<T> = (value: T) => {\n abortSignal.removeEventListener('abort', abortionHandler);\n resolve(value);\n };\n\n this._awaiters.push(resolveWithCleanup);\n\n const abortionHandler = () => {\n this._awaiters = this._awaiters.filter((awaiter) => awaiter !== resolveWithCleanup);\n reject(abortSignal.reason);\n };\n\n abortSignal.addEventListener('abort', abortionHandler, { once: true });\n });\n }\n\n emit(value: T) {\n queue.enqueue(async () => {\n const awaiters = this._awaiters;\n this._awaiters = [];\n\n for (const resolve of awaiters) {\n resolve(value);\n }\n });\n }\n\n async filter(predicate: FilterPredicate<T>) {\n return new Promise(async (resolve) => {\n while (true) {\n const newValue = await this;\n const isApplicable = Boolean(predicate(newValue));\n\n if (isApplicable) {\n resolve(newValue);\n return;\n }\n }\n });\n }\n}\n","const flush = () => new Promise<void>((resolve) => setTimeout(resolve, 0));\n\nexport default flush;\n","import { isCoreNode } from '../lib';\nimport type BaseNode from '../types/BaseNode';\n\nimport AwaiEvent from './AwaiEvent';\n\nexport default class Registry<T extends BaseNode> {\n private _nodes: T[] = [];\n public readonly events = {\n deregistered: new AwaiEvent<T['config']['id']>(),\n registered: new AwaiEvent<T>(),\n };\n\n public async register(node: T) {\n if (isCoreNode(node)) {\n return;\n }\n\n this._nodes.push(node);\n this.events.registered.emit(node);\n }\n\n public async deregister(id: BaseNode['config']['id']) {\n const node = this._nodes.find((node) => node.config.id === id);\n\n if (!node) {\n return;\n }\n\n this._nodes = this._nodes.filter((node) => node.config.id !== id);\n this.events.deregistered.emit(id);\n }\n\n get nodes() {\n return [...this._nodes];\n }\n}\n","import { Registry } from '../core';\n\nconst registry = new Registry();\n\nexport default registry;\n","import { SystemTag } from '../constants';\nimport { AwaiEvent, flush } from '../core';\nimport { registry } from '../global';\nimport { getUniqueId, isFunction } from '../lib';\n\nimport type { CallbackAction, Config, EmptyAction } from './types';\n\nconst getConfig = (customConfig: Partial<Config> = {}): Config => ({\n ...customConfig,\n id: customConfig.id ?? getUniqueId(action.name),\n tags: [SystemTag.ACTION, ...(customConfig.tags ?? [])],\n});\n\nfunction action<Args extends any[] = []>(): EmptyAction<Args>;\nfunction action<Args extends any[] = []>(config?: Partial<Config>): EmptyAction<Args>;\nfunction action<Args extends any[], Return = void>(\n callback: (...args: Args) => Return,\n config?: Partial<Config>,\n): CallbackAction<Args, Return>;\n\nfunction action<Args extends any[], Return = void>(\n ...args: [Partial<Config>?] | [(...args: Args) => Return, Partial<Config>?]\n): EmptyAction<Args> | CallbackAction<Args, Return> {\n type Action = EmptyAction<Args> | CallbackAction<Args, Return>;\n\n const hasCallback = isFunction(args[0]);\n const [callback, customConfig] = hasCallback\n ? (args as [(...args: Args) => Return, Partial<Config>?])\n : ([, ...args] as [undefined, Partial<Config>?]);\n\n const config = getConfig(customConfig);\n\n const events = {\n invoked: new AwaiEvent(),\n rejected: hasCallback ? new AwaiEvent() : undefined,\n fulfilled: hasCallback ? new AwaiEvent() : undefined,\n } satisfies Action['events'];\n\n const invoke = async (...invokeArgs: Args) => {\n const invocationId = getUniqueId('invocation');\n\n events.invoked.emit({ arguments: invokeArgs, config, invocationId });\n\n try {\n const valueOrPromise: Return | Promise<Return> = isFunction(callback)\n ? callback(...invokeArgs)\n : (undefined as Return);\n\n const value = await valueOrPromise;\n await flush();\n events.fulfilled?.emit({ arguments: invokeArgs, config, result: value, invocationId });\n return value;\n } catch (error) {\n events.rejected?.emit({\n arguments: invokeArgs,\n config,\n error,\n invocationId,\n });\n throw error;\n }\n };\n\n const actionNode = Object.assign(invoke, { config, events }) as Action;\n\n registry.register(actionNode);\n\n return actionNode;\n}\n\nexport default action;\n","import { AsyncStatus, SystemTag } from '../constants';\nimport { AwaiEvent, flush } from '../core';\nimport { registry } from '../global';\nimport { getUniqueId, isFunction, isPromiseOrFunction, race } from '../lib';\n\nimport type { VersionIgnoredEvent, AsyncState, Config, InitialValue, Version } from './types';\n\nconst getConfig = (customConfig: Partial<Config> = {}): Config => ({\n ...customConfig,\n id: customConfig.id ?? getUniqueId(asyncState.name),\n tags: [SystemTag.ASYNC_STATE, ...(customConfig.tags ?? [])],\n});\n\nconst asyncState = <T>(\n initialValue?: InitialValue<T>,\n customConfig?: Partial<Config>,\n): AsyncState<T> => {\n const config = getConfig(customConfig);\n const isInitialValueAsync = isPromiseOrFunction(initialValue);\n let version: Version = isInitialValueAsync ? 0 : 1;\n let lastPendingVersion: Version = version;\n let status: AsyncStatus = AsyncStatus.FULFILLED;\n let error: unknown = null;\n let value: T | undefined = isInitialValueAsync ? undefined : initialValue;\n\n const events: AsyncState<T>['events'] = {\n changed: new AwaiEvent<T | undefined>(),\n fulfilled: new AwaiEvent<T>(),\n ignored: new AwaiEvent<VersionIgnoredEvent<T>>(),\n rejected: new AwaiEvent<unknown>(),\n requested: new AwaiEvent<void>(),\n };\n\n const getStatus: AsyncState<T>['getStatus'] = () => status;\n\n const set: AsyncState<T>['set'] = async (nextValueOrResolver) => {\n const currentPendingVersion: Version = (lastPendingVersion + 1) % Number.MAX_SAFE_INTEGER;\n lastPendingVersion = currentPendingVersion;\n\n try {\n if (isPromiseOrFunction(nextValueOrResolver)) {\n status = AsyncStatus.PENDING;\n events.requested.emit();\n }\n\n let newValue = isFunction(nextValueOrResolver)\n ? await nextValueOrResolver(value)\n : await nextValueOrResolver;\n const isChanged = !Object.is(newValue, value);\n\n if (currentPendingVersion !== lastPendingVersion || !isChanged) {\n events.ignored.emit({ value: newValue, version: currentPendingVersion });\n return;\n }\n\n error = null;\n value = newValue;\n status = AsyncStatus.FULFILLED;\n\n events.fulfilled.emit(newValue);\n\n if (isChanged) {\n events.changed.emit(value);\n }\n } catch (e) {\n if (currentPendingVersion !== lastPendingVersion) {\n events.ignored.emit({ error: e, version: currentPendingVersion });\n return;\n }\n\n const isChanged = !Object.is(e, error);\n\n error = e;\n value = undefined;\n status = AsyncStatus.REJECTED;\n\n events.rejected.emit(error);\n\n if (isChanged) {\n events.changed.emit(value);\n }\n }\n\n version = lastPendingVersion;\n await flush();\n };\n\n const get: AsyncState<T>['get'] = () => value;\n\n const getAsync: AsyncState<T>['getAsync'] = () => ({\n error,\n isLoading: status === AsyncStatus.PENDING,\n value,\n });\n\n const getPromise: AsyncState<T>['getPromise'] = async () => {\n if (version === lastPendingVersion) {\n return value!;\n }\n\n await race([events.fulfilled, events.rejected]);\n\n if (error) {\n throw error;\n }\n\n return value!;\n };\n\n const then: PromiseLike<T>['then'] = async (resolve) => {\n if (!isFunction(resolve)) {\n return getPromise() as any;\n }\n\n return resolve(await getPromise());\n };\n\n if (isInitialValueAsync) {\n set(initialValue);\n }\n\n const asyncStateNode: AsyncState<T> = {\n config,\n events,\n get,\n getAsync,\n getPromise,\n getStatus,\n set,\n then,\n };\n\n registry.register(asyncStateNode);\n\n return asyncStateNode;\n};\n\nexport default asyncState;\n","import type { Config } from '../types';\n\nconst getDefaultStrategy = (\n isPlainPromiseTrigger: boolean,\n hasTrigger: boolean,\n): Config<unknown>['strategy'] => {\n if (isPlainPromiseTrigger) {\n return 'once';\n }\n\n if (hasTrigger) {\n return 'fork';\n }\n\n return 'cyclic';\n};\n\nexport default getDefaultStrategy;\n","import { isFunction } from '../../lib';\nimport type { Trigger } from '../types';\n\nconst getTriggerPromise = <T>(trigger: Trigger<T> | undefined) => {\n if (!trigger) {\n return Promise.resolve(undefined as T);\n }\n\n return isFunction(trigger) ? trigger() : trigger;\n};\n\nexport default getTriggerPromise;\n","import type { ShouldExpirePredicate, UntilTrigger } from '../types';\n\nconst getExpirationPromise = <E>(until: Exclude<UntilTrigger<E>, ShouldExpirePredicate>) => {\n if (typeof AbortSignal !== 'undefined' && until instanceof AbortSignal) {\n if (until.aborted) {\n return Promise.resolve(undefined);\n }\n\n return new Promise((resolve) => {\n until.addEventListener('abort', () => resolve(undefined), { once: true });\n });\n }\n\n return Promise.resolve(until) as Promise<E>;\n};\n\nexport default getExpirationPromise;\n","import { SystemTag } from '../constants';\nimport { AwaiEvent, flush } from '../core';\nimport { registry } from '../global';\nimport { getUniqueId, isAbortSignal, isFunction, isObject } from '../lib';\n\nimport { getDefaultStrategy, getExpirationPromise, getTriggerPromise } from './lib';\nimport type { Callback, Config, Scenario, Trigger } from './types';\n\nconst getConfig = <E = unknown>(\n isPlainPromiseTrigger: boolean,\n hasTrigger: boolean,\n customConfig: Partial<Config<E>> = {},\n): Config<E> => ({\n ...customConfig,\n id: customConfig.id ?? getUniqueId(scenario.name),\n strategy: customConfig.strategy ?? getDefaultStrategy(isPlainPromiseTrigger, hasTrigger),\n tags: [SystemTag.SCENARIO, ...(customConfig.tags ?? [])],\n});\n\nfunction scenario<T, R, E = unknown>(\n trigger: Trigger<T>,\n callback: Callback<T, R>,\n customConfig?: Partial<Config<E>>,\n): Scenario<T, R, E>;\n\nfunction scenario<T, R, E = unknown>(\n callback: Callback<T, R>,\n config?: Partial<Config<E>>,\n): Scenario<T, R, E>;\n\nfunction scenario<T, R, E = unknown>(\n ...args: [Trigger<T>, Callback<T, R>, Partial<Config<E>>?] | [Callback<T, R>, Partial<Config<E>>?]\n): Scenario<T, R, E> {\n const hasTrigger = isFunction(args[1]);\n\n const trigger = hasTrigger ? (args[0] as Trigger<T>) : undefined;\n const callback = (hasTrigger ? args[1] : args[0]) as Callback<T, R>;\n const customConfig = (hasTrigger ? args[2] : args[1]) as Partial<Config<E>> | undefined;\n const isPlainPromiseTrigger = hasTrigger && isObject(args[0]) && args[0].constructor === Promise;\n\n const config = getConfig<E>(isPlainPromiseTrigger, hasTrigger, customConfig);\n const { strategy, until } = config;\n const isFiniteScenario =\n isPlainPromiseTrigger || strategy === 'once' || typeof until !== 'undefined';\n let expirationEvent: E | undefined;\n let runningCallbacksCount = 0;\n let shouldExpire = false;\n let expired = false;\n\n const events: Scenario<T, R, E>['events'] = {\n fulfilled: new AwaiEvent(),\n rejected: new AwaiEvent(),\n settled: new AwaiEvent(),\n started: new AwaiEvent(),\n };\n\n const checkShouldExpire = () =>\n strategy === 'once' ||\n shouldExpire ||\n (isAbortSignal(until) ? until.aborted : false) ||\n (isFunction(until) ? until() : false);\n\n const expire = async () => {\n if (expired) {\n return;\n }\n\n expired = true;\n await flush();\n await events.settled.emit({ event: expirationEvent, config });\n await flush();\n await registry.deregister(config.id);\n };\n\n if (until && !isFunction(until)) {\n getExpirationPromise<E>(until).then((event) => {\n shouldExpire = true;\n expirationEvent = event as E;\n\n if (runningCallbacksCount === 0) {\n expire();\n }\n });\n }\n\n const run = async () => {\n getTriggerPromise(trigger).then(\n (event) => {\n if (expired) {\n return;\n }\n\n runningCallbacksCount++;\n events.started.emit({ config, event });\n\n try {\n Promise.resolve(callback(event))\n .then((result) => {\n flush().then(() => {\n events.fulfilled.emit({ config, event, result });\n });\n })\n .catch((error) => {\n events.rejected.emit(error);\n })\n .finally(() => {\n runningCallbacksCount--;\n\n if (checkShouldExpire() && runningCallbacksCount === 0) {\n expire();\n return;\n }\n\n if (strategy === 'cyclic') {\n queueMicrotask(run);\n }\n });\n } catch (error) {\n runningCallbacksCount--;\n events.rejected.emit(error);\n }\n\n if (strategy === 'fork') {\n queueMicrotask(run);\n }\n },\n () => {\n if (checkShouldExpire() && runningCallbacksCount === 0) {\n expire();\n return;\n }\n\n queueMicrotask(run);\n },\n );\n };\n\n const then: Scenario<T, R, E>['then'] = (resolve) => {\n if (!isFiniteScenario) {\n console.warn(\n 'You seem to await an infinite scenario. This causes a memory leak in your application.',\n );\n }\n\n if (!isFunction(resolve)) {\n return Promise.resolve(events.settled) as any;\n }\n\n return events.settled.then(resolve);\n };\n\n const scenarioNode: Scenario<T, R, E> = { config, events, then };\n\n registry.register(scenarioNode);\n\n run();\n\n return scenarioNode;\n}\n\nexport default scenario;\n","import { AsyncStatus, SystemTag } from '../constants';\nimport { AwaiEvent } from '../core';\nimport { registry } from '../global';\nimport { getAggregatedAsyncStatus, getUniqueId, isFunction, isReadableAsyncState } from '../lib';\nimport scenario from '../scenario';\nimport { type InferReadableType, type ReadableAsyncState, type ReadableState } from '../types';\n\nimport type { CleanupCallback, Config, Effect } from './types';\n\nconst getConfig = (customConfig: Partial<Config> = {}): Config => ({\n ...customConfig,\n id: customConfig.id ?? getUniqueId(effect.name),\n tags: [SystemTag.EFFECT, ...(customConfig.tags ?? [])],\n});\n\nconst effect = <\n T extends (ReadableState<any> | ReadableAsyncState<any>)[],\n V extends { [K in keyof T]: InferReadableType<T[K]> },\n>(\n states: [...T],\n effect: (...values: V) => CleanupCallback | void,\n customConfig?: Partial<Config>,\n): Effect<T, V> => {\n const config = getConfig(customConfig);\n const asyncStates = states.filter(isReadableAsyncState);\n\n let cleanup: ReturnType<typeof effect>;\n\n const events: Effect<T, V>['events'] = {\n cleared: new AwaiEvent(),\n started: new AwaiEvent(),\n };\n\n const runEffect = () => {\n const values = states.map((state) => state.get()) as V;\n const status = getAggregatedAsyncStatus(asyncStates);\n\n if (status !== AsyncStatus.FULFILLED) {\n return;\n }\n\n events.started.emit({ states, values });\n\n cleanup = effect(...values);\n };\n\n queueMicrotask(() => {\n scenario(\n () => Promise.race(states.map((state) => state.events.changed)),\n () => {\n if (isFunction(cleanup)) {\n cleanup();\n events.cleared.emit({ states });\n }\n\n runEffect();\n },\n { tags: [SystemTag.CORE_NODE] },\n );\n\n queueMicrotask(runEffect);\n });\n\n const effectNode: Effect<T, V> = { config, events };\n\n registry.register(effectNode);\n\n return effectNode;\n};\n\nexport default effect;\n","import { SystemTag } from '../constants';\nimport { AwaiEvent, flush } from '../core';\nimport { getUniqueId, isFunction } from '../lib';\nimport { registry } from '../global';\n\nimport type { Config, State } from './types';\n\nconst getConfig = (customConfig: Partial<Config> = {}): Config => ({\n ...customConfig,\n id: customConfig.id ?? getUniqueId(state.name),\n tags: [SystemTag.STATE, ...(customConfig.tags ?? [])],\n});\n\nconst state = <T>(initialValue: T, customConfig?: Partial<Config>): State<T> => {\n const config = getConfig(customConfig);\n\n let value = initialValue;\n\n const events = {\n changed: new AwaiEvent<T>(),\n };\n\n const set: State<T>['set'] = (nextValueOrResolver) => {\n let newValue = isFunction(nextValueOrResolver)\n ? nextValueOrResolver(value)\n : nextValueOrResolver;\n\n if (!Object.is(newValue, value)) {\n value = newValue;\n events.changed.emit(newValue);\n }\n\n return flush().then(() => newValue);\n };\n\n const get = () => value;\n\n const then: State<T>['then'] = async (resolve) => {\n if (!isFunction(resolve)) {\n return value as any;\n }\n\n return resolve(value);\n };\n\n const stateNode: State<T> = { config, events, get, set, then };\n\n registry.register(stateNode);\n\n return stateNode;\n};\n\nexport default state;\n","import asyncState, { type AsyncState } from '../async-state';\nimport { SystemTag } from '../constants';\nimport { AwaiEvent, flush } from '../core';\nimport { registry } from '../global';\nimport { getUniqueId, isFunction } from '../lib';\nimport scenario from '../scenario';\nimport state, { type State } from '../state';\nimport type { Id } from '../types';\n\nimport type { Config, FamilyState } from './types';\n\nconst getConfig = (customConfig: Partial<Config> = {}): Config => ({\n ...customConfig,\n id: customConfig.id ?? getUniqueId(familyState.name),\n tags: [SystemTag.FAMILY_STATE, ...(customConfig.tags ?? [])],\n});\n\nconst familyState = <\n T,\n Initializer extends (id: Id) => T | Promise<T>,\n Family extends Record<Id, NodeType>,\n NodeType extends State<any> | AsyncState<any> = ReturnType<Initializer> extends PromiseLike<\n infer Q\n >\n ? AsyncState<Q>\n : State<ReturnType<Initializer>>,\n>(\n initializer: Initializer,\n customConfig?: Partial<Config>,\n): FamilyState<NodeType> => {\n const config = getConfig(customConfig);\n\n let family: Family = {} as Family;\n\n const events = {\n changed: new AwaiEvent<Record<Id, NodeType>>(),\n stateCreated: new AwaiEvent<Id>(),\n };\n\n const getNode = (id: Id): NodeType => {\n if (id in family) {\n return family[id];\n }\n\n const initialValue = initializer(id);\n\n const stateNode =\n initialValue instanceof Promise\n ? asyncState(initialValue, { tags: [SystemTag.CORE_NODE] })\n : state(initialValue, { tags: [SystemTag.CORE_NODE] });\n\n family = { ...family, [id]: stateNode };\n events.stateCreated.emit(id);\n events.changed.emit(family);\n\n scenario(\n stateNode.events.changed,\n () => {\n events.changed.emit(family);\n },\n { tags: [SystemTag.CORE_NODE] },\n );\n\n return stateNode as NodeType;\n };\n\n const setNode = async (id: Id, stateNode: NodeType) => {\n if (id in family) {\n throw new Error(`Cannot set node. Node with id \"${id}\" already exists.`);\n }\n\n family = { ...family, [id]: stateNode };\n\n scenario(\n stateNode.events.changed,\n () => {\n events.changed.emit(family);\n },\n { tags: [SystemTag.CORE_NODE] },\n );\n\n events.changed.emit(family);\n\n await flush();\n };\n\n const get = () => {\n return family;\n };\n\n const then: FamilyState<NodeType>['then'] = async (resolve) => {\n if (!isFunction(resolve)) {\n return family as any;\n }\n\n return resolve(family);\n };\n\n const familyStateNode: FamilyState<NodeType> = { config, events, get, getNode, setNode, then };\n\n registry.register(familyStateNode);\n\n return familyStateNode;\n};\n\nexport default familyState;\n","import { AsyncStatus, SystemTag } from '../constants';\nimport { AwaiEvent } from '../core';\nimport { registry } from '../global';\nimport {\n fork,\n getAggregatedAsyncStatus,\n getUniqueId,\n isFunction,\n isReadableAsyncState,\n race,\n} from '../lib';\nimport scenario from '../scenario';\nimport type { InferReadableType, ReadableAsyncState, ReadableState } from '../types';\n\nimport type { AsyncConfig, AsyncSelector, VersionIgnoredEvent } from './types';\n\nconst getConfig = (customConfig: Partial<AsyncConfig> = {}): AsyncConfig => ({\n ...customConfig,\n id: customConfig.id ?? getUniqueId(asyncSelector.name),\n tags: [SystemTag.ASYNC_SELECTOR, ...(customConfig.tags ?? [])],\n});\n\nconst asyncSelector = <T extends (ReadableState | ReadableAsyncState)[], U>(\n states: T,\n predicate: (...values: { [K in keyof T]: InferReadableType<T[K]> }) => U,\n customConfig?: Partial<AsyncConfig>,\n): AsyncSelector<U> => {\n type StatesValues = { [K in keyof T]: InferReadableType<T[K]> };\n\n const config = getConfig(customConfig);\n const asyncStates = states.filter(isReadableAsyncState);\n\n let error: AggregateError | unknown | null = null;\n let value: U | undefined;\n let isLoading: boolean = true;\n let version = 0;\n let lastPendingVersion: number = version;\n\n const events: AsyncSelector<U>['events'] = {\n changed: new AwaiEvent<U | undefined>(),\n fulfilled: new AwaiEvent<U>(),\n ignored: new AwaiEvent<VersionIgnoredEvent<U>>(),\n rejected: new AwaiEvent<unknown>(),\n requested: new AwaiEvent<void>(),\n };\n\n const getStatus = () => {\n if (isLoading) {\n return AsyncStatus.PENDING;\n }\n\n const aggregatedStatus = getAggregatedAsyncStatus(asyncStates);\n\n return error !== null && aggregatedStatus === AsyncStatus.FULFILLED\n ? AsyncStatus.REJECTED\n : aggregatedStatus;\n };\n\n const determineNextVersion = async () => {\n const currentPendingVersion = (lastPendingVersion + 1) % Number.MAX_SAFE_INTEGER;\n lastPendingVersion = currentPendingVersion;\n\n const status = getAggregatedAsyncStatus(asyncStates);\n const errors = asyncStates.map((state) => state.getAsync().error).filter(Boolean);\n\n if (status === AsyncStatus.PENDING) {\n isLoading = true;\n }\n\n events.requested.emit();\n\n if (errors.length > 0) {\n error = new AggregateError(errors);\n value = undefined;\n isLoading = status === AsyncStatus.PENDING;\n version = lastPendingVersion;\n events.rejected.emit(error);\n events.changed.emit(value);\n return;\n }\n\n if (status === AsyncStatus.FULFILLED) {\n const values = states.map((state) => state.get()) as StatesValues;\n\n fork(async () => {\n isLoading = true;\n\n try {\n const newValue = await predicate(...values);\n const isChanged = !Object.is(newValue, value);\n\n if (currentPendingVersion !== lastPendingVersion) {\n events.ignored.emit({ value: newValue, version: currentPendingVersion });\n return;\n }\n\n error = null;\n value = newValue;\n\n events.fulfilled.emit(newValue);\n\n if (isChanged) {\n events.changed.emit(value);\n }\n } catch (caughtError) {\n if (currentPendingVersion !== lastPendingVersion) {\n events.ignored.emit({ error: caughtError, version: currentPendingVersion });\n return;\n }\n\n const isChanged = typeof value !== 'undefined';\n\n error = caughtError;\n value = undefined;\n\n events.rejected.emit(caughtError);\n\n if (isChanged) {\n events.changed.emit(value);\n }\n } finally {\n if (currentPendingVersion === lastPendingVersion) {\n version = lastPendingVersion;\n isLoading = false;\n }\n }\n });\n }\n };\n\n scenario(\n async () => {\n const abortController = new AbortController();\n const abortSignal = abortController.signal;\n await Promise.race(\n states.map((state) => {\n return isReadableAsyncState(state)\n ? race(\n [state.events.requested, state.events.rejected, state.events.fulfilled],\n abortSignal,\n )\n : state.events.changed.abortable(abortSignal);\n }),\n );\n abortController.abort();\n },\n determineNextVersion,\n { tags: [SystemTag.CORE_NODE] },\n );\n\n const get = () => value;\n\n const getAsync = () => ({ error, isLoading, value });\n\n const getPromise = async (): Promise<U> => {\n while (isLoading) {\n await race([events.fulfilled, events.rejected]);\n }\n\n if (error) {\n throw error;\n }\n\n return value!;\n };\n\n const then: AsyncSelector<U>['then'] = async (resolve) => {\n if (!isFunction(resolve)) {\n return getPromise() as any;\n }\n\n return resolve(await getPromise());\n };\n\n const selectorNode = {\n config,\n events,\n get,\n getAsync,\n getPromise,\n getStatus,\n then,\n };\n\n queueMicrotask(determineNextVersion);\n\n registry.register(selectorNode);\n\n return selectorNode;\n};\n\nexport default asyncSelector;\n","import { SystemTag } from '../constants';\nimport { AwaiEvent } from '../core';\nimport { registry } from '../global';\nimport { getUniqueId, isFunction, race } from '../lib';\nimport scenario from '../scenario';\nimport type { InferReadableType, ReadableAsyncState, ReadableState } from '../types';\n\nimport type { SyncConfig, SyncSelector } from './types';\n\nconst getConfig = (customConfig: Partial<SyncConfig> = {}): SyncConfig => ({\n ...customConfig,\n id: customConfig.id ?? getUniqueId(syncSelector.name),\n tags: [SystemTag.SELECTOR, ...(customConfig.tags ?? [])],\n});\n\nconst syncSelector = <T extends (ReadableState | ReadableAsyncState)[], U>(\n states: [...T],\n predicate: (...values: { [K in keyof T]: InferReadableType<T[K]> }) => U,\n customConfig?: Partial<SyncConfig>,\n): SyncSelector<U> => {\n const config = getConfig(customConfig);\n let value: U;\n\n const events = {\n changed: new AwaiEvent<U>(),\n };\n\n const get = () => {\n const values = states.map((state) => state.get()) as {\n [K in keyof T]: InferReadableType<T[K]>;\n };\n return predicate(...values);\n };\n\n const then: SyncSelector<U>['then'] = async (resolve) => {\n if (!isFunction(resolve)) {\n return get() as any;\n }\n\n return resolve(get());\n };\n\n scenario(\n () => race(states.map((state) => state.events.changed)),\n () => {\n const newValue = get();\n\n if (!Object.is(newValue, value)) {\n value = newValue;\n events.changed.emit(newValue);\n }\n },\n { tags: [SystemTag.CORE_NODE] },\n );\n\n value = get();\n\n const selectorNode: SyncSelector<U> = { config, events, get, then };\n\n registry.register(selectorNode);\n\n return selectorNode;\n};\n\nexport default syncSelector;\n","import { isReadableAsyncState } from '../lib';\nimport { type InferReadableType } from '../types';\n\nimport asyncSelector from './asyncSelector';\nimport syncSelector from './syncSelector';\nimport type { Config, Selector } from './types';\n\nconst selector = <T extends any[], U>(\n states: [...T],\n predicate: (...values: { [K in keyof T]: InferReadableType<T[K]> }) => U,\n customConfig?: Partial<Config<T, U>>,\n): Selector<T, U> => {\n const isAsyncPredicate = predicate.constructor.name === 'AsyncFunction';\n\n const state =\n isAsyncPredicate || states.some((state) => isReadableAsyncState(state))\n ? asyncSelector(states, predicate, customConfig)\n : syncSelector(states, predicate, customConfig);\n\n return state as Selector<T, U>;\n};\n\nexport default selector;\n"],"names":["AsyncStatus","SystemTag","__publicField","node","getConfig","effect","state"],"mappings":"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"}
|