awai 1.0.0-alpha-1 → 1.0.0-alpha-3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +10 -0
- package/dist/index.d.ts +5 -5
- package/dist/index.js +62 -38
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +62 -38
- package/dist/index.mjs.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -16,3 +16,13 @@
|
|
|
16
16
|
|
|
17
17
|
<p>| <a href="https://awai.vercel.app/">Documentation</a> | <a href="https://github.com/yuriyyakym/awai-react">Awai-React</a> |</p>
|
|
18
18
|
</div>
|
|
19
|
+
|
|
20
|
+
---
|
|
21
|
+
|
|
22
|
+
## Examples
|
|
23
|
+
|
|
24
|
+
- Paint - [Playground](https://codesandbox.io/p/github/yuriyyakym/awai-paint/master) | [Repository](https://github.com/yuriyyakym/awai-paint) | [Demo](https://awai-paint.vercel.app/)
|
|
25
|
+
|
|
26
|
+
- Todo list - [Playground](https://codesandbox.io/p/sandbox/awai--todo-list-wqyjfz?file=%2FREADME.md%3A3%2C23)
|
|
27
|
+
|
|
28
|
+
- Safe counter - [Playground](https://codesandbox.io/p/sandbox/awai--cunter-qk7h6p?file=%2FREADME.md%3A3%2C23)
|
package/dist/index.d.ts
CHANGED
|
@@ -108,7 +108,7 @@ type ActionInvokedEvent<Args> = {
|
|
|
108
108
|
arguments: Args;
|
|
109
109
|
config: Config$6;
|
|
110
110
|
};
|
|
111
|
-
type
|
|
111
|
+
type ActionFulfilledEvent<Args, Return> = {
|
|
112
112
|
arguments: Args;
|
|
113
113
|
config: Config$6;
|
|
114
114
|
result: Return;
|
|
@@ -122,7 +122,7 @@ type BaseEvents<Args> = {
|
|
|
122
122
|
invoked: AwaiEvent<ActionInvokedEvent<Args>>;
|
|
123
123
|
};
|
|
124
124
|
type EventsWithCallback<Args, Return> = BaseEvents<Args> & {
|
|
125
|
-
fulfilled: AwaiEvent<
|
|
125
|
+
fulfilled: AwaiEvent<ActionFulfilledEvent<Args, Return>>;
|
|
126
126
|
rejected: AwaiEvent<ActionRejectedEvent<Args>>;
|
|
127
127
|
};
|
|
128
128
|
type EmptyAction<Args extends any[]> = ((...args: Args) => Promise<void>) & {
|
|
@@ -177,7 +177,7 @@ interface Effect<T extends (ReadableState | ReadableAsyncState)[], V extends {
|
|
|
177
177
|
};
|
|
178
178
|
}
|
|
179
179
|
|
|
180
|
-
declare const effect: <T extends (
|
|
180
|
+
declare const effect: <T extends (ReadableAsyncState<any> | ReadableState<any>)[], V extends { [K in keyof T]: InferReadableType<T[K]>; }>(states: [...T], effect: (...values: V) => CleanupCallback | void, customConfig?: Partial<Config$4>) => Effect<T, V>;
|
|
181
181
|
|
|
182
182
|
type Config$3 = BaseConfig & Record<string, any>;
|
|
183
183
|
type State<T> = ReadableState<T> & WritableState<T> & {
|
|
@@ -197,13 +197,13 @@ type FamilyState<T> = ReadableState<Record<Id, T>> & {
|
|
|
197
197
|
setNode: (id: Id, stateNode: T) => void;
|
|
198
198
|
};
|
|
199
199
|
|
|
200
|
-
declare const familyState: <T, Initializer extends (id: Id) => T | Promise<T>, Family extends Record<string, NodeType>, NodeType = ReturnType<Initializer> extends PromiseLike<infer Q> ? AsyncState<Q> : State<ReturnType<Initializer>>>(initializer: Initializer, customConfig?: Partial<Config$2>) => FamilyState<NodeType>;
|
|
200
|
+
declare const familyState: <T, Initializer extends (id: Id) => T | Promise<T>, Family extends Record<string, NodeType>, NodeType extends State<any> | AsyncState<any> = ReturnType<Initializer> extends PromiseLike<infer Q> ? AsyncState<Q> : State<ReturnType<Initializer>>>(initializer: Initializer, customConfig?: Partial<Config$2>) => FamilyState<NodeType>;
|
|
201
201
|
|
|
202
202
|
declare const delay: (ms: number) => Promise<void>;
|
|
203
203
|
|
|
204
204
|
declare const fork: (forkFn: () => Promise<any>) => Promise<void>;
|
|
205
205
|
|
|
206
|
-
declare const getAggregatedAsyncStatus: <T extends
|
|
206
|
+
declare const getAggregatedAsyncStatus: <T extends Pick<ReadableAsyncState<any>, "getStatus">[]>(states: T) => AsyncStatus;
|
|
207
207
|
|
|
208
208
|
declare const isPromiseLike: <T>(value: unknown) => value is PromiseLike<T>;
|
|
209
209
|
|
package/dist/index.js
CHANGED
|
@@ -26,19 +26,12 @@ const fork = async (forkFn) => {
|
|
|
26
26
|
await forkFn();
|
|
27
27
|
};
|
|
28
28
|
|
|
29
|
-
const isFunction = (value) => typeof value === "function";
|
|
30
|
-
|
|
31
|
-
const isObject = (value) => typeof value === "object" && value !== null;
|
|
32
|
-
|
|
33
|
-
const isReadableAsyncState = (value) => isObject(value) && isFunction(value.get) && isFunction(value.getAsync) && isFunction(value.getPromise) && isFunction(value.then);
|
|
34
|
-
|
|
35
29
|
const getAggregatedAsyncStatus = (states) => {
|
|
36
|
-
const
|
|
37
|
-
const hasError = asyncStates.some((state) => state.getStatus() === AsyncStatus.REJECTED);
|
|
30
|
+
const hasError = states.some((state) => state.getStatus() === AsyncStatus.REJECTED);
|
|
38
31
|
if (hasError) {
|
|
39
32
|
return AsyncStatus.REJECTED;
|
|
40
33
|
}
|
|
41
|
-
const isPending =
|
|
34
|
+
const isPending = states.some((state) => state.getStatus() === AsyncStatus.PENDING);
|
|
42
35
|
if (isPending) {
|
|
43
36
|
return AsyncStatus.PENDING;
|
|
44
37
|
}
|
|
@@ -54,10 +47,16 @@ const getUniqueId = (scope = "unknown") => {
|
|
|
54
47
|
|
|
55
48
|
const isCoreNode = (node) => node.config.tags.includes(SystemTag.CORE_NODE);
|
|
56
49
|
|
|
50
|
+
const isFunction = (value) => typeof value === "function";
|
|
51
|
+
|
|
52
|
+
const isObject = (value) => typeof value === "object" && value !== null;
|
|
53
|
+
|
|
57
54
|
const isPromiseLike = (value) => isObject(value) && (value instanceof Promise || isFunction(value.then));
|
|
58
55
|
|
|
59
56
|
const isPromiseOrFunction = (value) => isFunction(value) || isPromiseLike(value);
|
|
60
57
|
|
|
58
|
+
const isReadableAsyncState = (value) => isObject(value) && isFunction(value.get) && isFunction(value.getAsync) && isFunction(value.getPromise) && isFunction(value.then);
|
|
59
|
+
|
|
61
60
|
const noop = () => void 0;
|
|
62
61
|
|
|
63
62
|
const rejectAfter = (ms) => {
|
|
@@ -255,7 +254,8 @@ const asyncState = (initialValue, customConfig) => {
|
|
|
255
254
|
events.requested.emit();
|
|
256
255
|
}
|
|
257
256
|
let newValue = isFunction(nextValueOrResolver) ? await nextValueOrResolver(value) : await nextValueOrResolver;
|
|
258
|
-
|
|
257
|
+
const isChanged = !Object.is(newValue, value);
|
|
258
|
+
if (currentPendingVersion !== lastPendingVersion || !isChanged) {
|
|
259
259
|
events.ignored.emit({ value: newValue, version: currentPendingVersion });
|
|
260
260
|
return;
|
|
261
261
|
}
|
|
@@ -263,17 +263,22 @@ const asyncState = (initialValue, customConfig) => {
|
|
|
263
263
|
value = newValue;
|
|
264
264
|
status = AsyncStatus.FULFILLED;
|
|
265
265
|
events.fulfilled.emit(newValue);
|
|
266
|
-
|
|
266
|
+
if (isChanged) {
|
|
267
|
+
events.changed.emit(value);
|
|
268
|
+
}
|
|
267
269
|
} catch (e) {
|
|
268
270
|
if (currentPendingVersion !== lastPendingVersion) {
|
|
269
271
|
events.ignored.emit({ error: e, version: currentPendingVersion });
|
|
270
272
|
return;
|
|
271
273
|
}
|
|
274
|
+
const isChanged = !Object.is(e, error);
|
|
272
275
|
error = e;
|
|
273
276
|
value = void 0;
|
|
274
277
|
status = AsyncStatus.REJECTED;
|
|
275
278
|
events.rejected.emit(error);
|
|
276
|
-
|
|
279
|
+
if (isChanged) {
|
|
280
|
+
events.changed.emit(value);
|
|
281
|
+
}
|
|
277
282
|
}
|
|
278
283
|
version = lastPendingVersion;
|
|
279
284
|
await flush();
|
|
@@ -444,6 +449,7 @@ const getConfig$4 = (customConfig = {}) => ({
|
|
|
444
449
|
});
|
|
445
450
|
const effect = (states, effect2, customConfig) => {
|
|
446
451
|
const config = getConfig$4(customConfig);
|
|
452
|
+
const asyncStates = states.filter(isReadableAsyncState);
|
|
447
453
|
let cleanup;
|
|
448
454
|
const events = {
|
|
449
455
|
cleared: new AwaiEvent(),
|
|
@@ -451,7 +457,7 @@ const effect = (states, effect2, customConfig) => {
|
|
|
451
457
|
};
|
|
452
458
|
const runEffect = () => {
|
|
453
459
|
const values = states.map((state) => state.get());
|
|
454
|
-
const status = getAggregatedAsyncStatus(
|
|
460
|
+
const status = getAggregatedAsyncStatus(asyncStates);
|
|
455
461
|
if (status !== AsyncStatus.FULFILLED) {
|
|
456
462
|
return;
|
|
457
463
|
}
|
|
@@ -539,12 +545,20 @@ const familyState = (initializer, customConfig) => {
|
|
|
539
545
|
);
|
|
540
546
|
return stateNode;
|
|
541
547
|
};
|
|
542
|
-
const setNode = (id, stateNode) => {
|
|
548
|
+
const setNode = async (id, stateNode) => {
|
|
543
549
|
if (id in family) {
|
|
544
550
|
throw new Error(`Cannot set node. Node with id "${id}" already exists.`);
|
|
545
551
|
}
|
|
546
552
|
family = { ...family, [id]: stateNode };
|
|
553
|
+
scenario(
|
|
554
|
+
stateNode.events.changed,
|
|
555
|
+
() => {
|
|
556
|
+
events.changed.emit(family);
|
|
557
|
+
},
|
|
558
|
+
{ tags: [SystemTag.CORE_NODE] }
|
|
559
|
+
);
|
|
547
560
|
events.changed.emit(family);
|
|
561
|
+
await flush();
|
|
548
562
|
};
|
|
549
563
|
const get = () => {
|
|
550
564
|
return family;
|
|
@@ -580,11 +594,15 @@ const asyncSelector = (states, predicate, customConfig) => {
|
|
|
580
594
|
rejected: new AwaiEvent(),
|
|
581
595
|
requested: new AwaiEvent()
|
|
582
596
|
};
|
|
583
|
-
const getStatus = () =>
|
|
597
|
+
const getStatus = () => {
|
|
598
|
+
const aggregatedStatus = getAggregatedAsyncStatus(asyncStates);
|
|
599
|
+
return error !== null && aggregatedStatus === AsyncStatus.FULFILLED ? AsyncStatus.REJECTED : aggregatedStatus;
|
|
600
|
+
};
|
|
584
601
|
const determineNextVersion = async () => {
|
|
585
602
|
const currentPendingVersion = (lastPendingVersion + 1) % Number.MAX_SAFE_INTEGER;
|
|
586
603
|
lastPendingVersion = currentPendingVersion;
|
|
587
|
-
|
|
604
|
+
events.requested.emit();
|
|
605
|
+
const status = getAggregatedAsyncStatus(asyncStates);
|
|
588
606
|
const errors = asyncStates.map((state) => state.getAsync().error).filter(Boolean);
|
|
589
607
|
if (errors.length > 0) {
|
|
590
608
|
error = new AggregateError(errors);
|
|
@@ -601,14 +619,15 @@ const asyncSelector = (states, predicate, customConfig) => {
|
|
|
601
619
|
isLoading = true;
|
|
602
620
|
try {
|
|
603
621
|
const newValue = await predicate(...values);
|
|
622
|
+
const isChanged = !Object.is(newValue, value);
|
|
604
623
|
if (currentPendingVersion !== lastPendingVersion) {
|
|
605
624
|
events.ignored.emit({ value: newValue, version: currentPendingVersion });
|
|
606
625
|
return;
|
|
607
626
|
}
|
|
608
|
-
|
|
609
|
-
|
|
610
|
-
|
|
611
|
-
|
|
627
|
+
error = null;
|
|
628
|
+
value = newValue;
|
|
629
|
+
events.fulfilled.emit(newValue);
|
|
630
|
+
if (isChanged) {
|
|
612
631
|
events.changed.emit(value);
|
|
613
632
|
}
|
|
614
633
|
} catch (caughtError) {
|
|
@@ -616,10 +635,13 @@ const asyncSelector = (states, predicate, customConfig) => {
|
|
|
616
635
|
events.ignored.emit({ error: caughtError, version: currentPendingVersion });
|
|
617
636
|
return;
|
|
618
637
|
}
|
|
638
|
+
const isChanged = typeof value !== "undefined";
|
|
619
639
|
error = caughtError;
|
|
620
640
|
value = void 0;
|
|
621
641
|
events.rejected.emit(caughtError);
|
|
622
|
-
|
|
642
|
+
if (isChanged) {
|
|
643
|
+
events.changed.emit(value);
|
|
644
|
+
}
|
|
623
645
|
} finally {
|
|
624
646
|
if (currentPendingVersion === lastPendingVersion) {
|
|
625
647
|
version = lastPendingVersion;
|
|
@@ -629,28 +651,22 @@ const asyncSelector = (states, predicate, customConfig) => {
|
|
|
629
651
|
});
|
|
630
652
|
}
|
|
631
653
|
};
|
|
632
|
-
scenario(
|
|
633
|
-
async () => {
|
|
634
|
-
const abortController = new AbortController();
|
|
635
|
-
await Promise.race(states.map((state) => state.events.changed.abortable(abortController)));
|
|
636
|
-
abortController.abort();
|
|
637
|
-
},
|
|
638
|
-
determineNextVersion,
|
|
639
|
-
{ tags: [SystemTag.CORE_NODE] }
|
|
640
|
-
);
|
|
641
654
|
scenario(
|
|
642
655
|
async () => {
|
|
643
656
|
const abortController = new AbortController();
|
|
644
657
|
await Promise.race(
|
|
645
|
-
|
|
658
|
+
states.flatMap((state) => {
|
|
659
|
+
return isReadableAsyncState(state) ? [
|
|
660
|
+
state.events.requested.abortable(abortController),
|
|
661
|
+
state.events.rejected.abortable(abortController),
|
|
662
|
+
state.events.fulfilled.abortable(abortController)
|
|
663
|
+
] : state.events.changed.abortable(abortController);
|
|
664
|
+
})
|
|
646
665
|
);
|
|
647
666
|
abortController.abort();
|
|
648
667
|
},
|
|
649
|
-
|
|
650
|
-
|
|
651
|
-
await events.fulfilled;
|
|
652
|
-
},
|
|
653
|
-
{ tags: [SystemTag.CORE_NODE], strategy: "cyclic" }
|
|
668
|
+
determineNextVersion,
|
|
669
|
+
{ tags: [SystemTag.CORE_NODE] }
|
|
654
670
|
);
|
|
655
671
|
const get = () => value;
|
|
656
672
|
const getAsync = () => ({ error, isLoading, value });
|
|
@@ -675,7 +691,7 @@ const asyncSelector = (states, predicate, customConfig) => {
|
|
|
675
691
|
getStatus,
|
|
676
692
|
then
|
|
677
693
|
};
|
|
678
|
-
determineNextVersion
|
|
694
|
+
queueMicrotask(determineNextVersion);
|
|
679
695
|
registry.register(selectorNode);
|
|
680
696
|
return selectorNode;
|
|
681
697
|
};
|
|
@@ -687,6 +703,7 @@ const getConfig = (customConfig = {}) => ({
|
|
|
687
703
|
});
|
|
688
704
|
const syncSelector = (states, predicate, customConfig) => {
|
|
689
705
|
const config = getConfig(customConfig);
|
|
706
|
+
let value;
|
|
690
707
|
const events = {
|
|
691
708
|
changed: new AwaiEvent()
|
|
692
709
|
};
|
|
@@ -706,9 +723,16 @@ const syncSelector = (states, predicate, customConfig) => {
|
|
|
706
723
|
await Promise.race(states.map((state) => state.events.changed.abortable(abortController)));
|
|
707
724
|
abortController.abort();
|
|
708
725
|
},
|
|
709
|
-
() =>
|
|
726
|
+
() => {
|
|
727
|
+
const newValue = get();
|
|
728
|
+
if (!Object.is(newValue, value)) {
|
|
729
|
+
value = newValue;
|
|
730
|
+
events.changed.emit(newValue);
|
|
731
|
+
}
|
|
732
|
+
},
|
|
710
733
|
{ tags: [SystemTag.CORE_NODE] }
|
|
711
734
|
);
|
|
735
|
+
value = get();
|
|
712
736
|
const selectorNode = { config, events, get, then };
|
|
713
737
|
registry.register(selectorNode);
|
|
714
738
|
return selectorNode;
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../src/constants/AsyncStatus.ts","../src/constants/SystemTag.ts","../src/lib/delay.ts","../src/lib/fork.ts","../src/lib/isFunction.ts","../src/lib/isObject.ts","../src/lib/isReadableAsyncState.ts","../src/lib/getAggregatedAsyncStatus.ts","../src/lib/getUniqueId.ts","../src/lib/isCoreNode.ts","../src/lib/isPromiseLike.ts","../src/lib/isPromiseOrFunction.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","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 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 { AsyncStatus } from '../constants';\nimport type { ReadableAsyncState, ReadableState } from '../types';\n\nimport isReadableAsyncState from './isReadableAsyncState';\n\nconst getAggregatedAsyncStatus = <\n T extends (ReadableState<any> | ReadableAsyncState<any> | Promise<any>)[],\n>(\n states: T,\n): AsyncStatus => {\n const asyncStates = states.filter(isReadableAsyncState);\n\n const hasError = asyncStates.some((state) => state.getStatus() === AsyncStatus.REJECTED);\n\n if (hasError) {\n return AsyncStatus.REJECTED;\n }\n\n const isPending = asyncStates.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","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","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 events.invoked.emit({ arguments: invokeArgs, config });\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 });\n return value;\n } catch (error) {\n events.rejected?.emit({\n arguments: invokeArgs,\n config,\n error,\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\n if (currentPendingVersion !== lastPendingVersion) {\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 events.changed.emit(value);\n } catch (e) {\n if (currentPendingVersion !== lastPendingVersion) {\n events.ignored.emit({ error: e, version: currentPendingVersion });\n return;\n }\n\n error = e;\n value = undefined;\n status = AsyncStatus.REJECTED;\n\n events.rejected.emit(error);\n events.changed.emit(value);\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 } 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\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(states);\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'] = async (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 await flush();\n\n return 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 } 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 = ReturnType<Initializer> extends PromiseLike<infer Q>\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 = (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 events.changed.emit(family);\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, flush } 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 = () => getAggregatedAsyncStatus(states);\n\n const determineNextVersion = async () => {\n const currentPendingVersion = (lastPendingVersion + 1) % Number.MAX_SAFE_INTEGER;\n lastPendingVersion = currentPendingVersion;\n\n const status = getStatus();\n const errors = asyncStates.map((state) => state.getAsync().error).filter(Boolean);\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\n if (currentPendingVersion !== lastPendingVersion) {\n events.ignored.emit({ value: newValue, version: currentPendingVersion });\n return;\n }\n\n if (newValue !== value) {\n error = null;\n value = newValue;\n events.fulfilled.emit(newValue);\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 error = caughtError;\n value = undefined;\n events.rejected.emit(caughtError);\n events.changed.emit(value);\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(states.map((state) => state.events.changed.abortable(abortController)));\n abortController.abort();\n },\n determineNextVersion,\n { tags: [SystemTag.CORE_NODE] },\n );\n\n scenario(\n async () => {\n const abortController = new AbortController();\n await Promise.race(\n asyncStates.map((state) => state.events.requested.abortable(abortController)),\n );\n abortController.abort();\n },\n async () => {\n events.requested.emit();\n await events.fulfilled;\n },\n { tags: [SystemTag.CORE_NODE], strategy: 'cyclic' },\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 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\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 () => events.changed.emit(get()),\n { tags: [SystemTag.CORE_NODE] },\n );\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.js","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 events.invoked.emit({ arguments: invokeArgs, config });\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 });\n return value;\n } catch (error) {\n events.rejected?.emit({\n arguments: invokeArgs,\n config,\n error,\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'] = async (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 await flush();\n\n return 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, flush } 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 events.requested.emit();\n\n const status = getAggregatedAsyncStatus(asyncStates);\n const errors = asyncStates.map((state) => state.getAsync().error).filter(Boolean);\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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"}
|
package/dist/index.mjs
CHANGED
|
@@ -24,19 +24,12 @@ const fork = async (forkFn) => {
|
|
|
24
24
|
await forkFn();
|
|
25
25
|
};
|
|
26
26
|
|
|
27
|
-
const isFunction = (value) => typeof value === "function";
|
|
28
|
-
|
|
29
|
-
const isObject = (value) => typeof value === "object" && value !== null;
|
|
30
|
-
|
|
31
|
-
const isReadableAsyncState = (value) => isObject(value) && isFunction(value.get) && isFunction(value.getAsync) && isFunction(value.getPromise) && isFunction(value.then);
|
|
32
|
-
|
|
33
27
|
const getAggregatedAsyncStatus = (states) => {
|
|
34
|
-
const
|
|
35
|
-
const hasError = asyncStates.some((state) => state.getStatus() === AsyncStatus.REJECTED);
|
|
28
|
+
const hasError = states.some((state) => state.getStatus() === AsyncStatus.REJECTED);
|
|
36
29
|
if (hasError) {
|
|
37
30
|
return AsyncStatus.REJECTED;
|
|
38
31
|
}
|
|
39
|
-
const isPending =
|
|
32
|
+
const isPending = states.some((state) => state.getStatus() === AsyncStatus.PENDING);
|
|
40
33
|
if (isPending) {
|
|
41
34
|
return AsyncStatus.PENDING;
|
|
42
35
|
}
|
|
@@ -52,10 +45,16 @@ const getUniqueId = (scope = "unknown") => {
|
|
|
52
45
|
|
|
53
46
|
const isCoreNode = (node) => node.config.tags.includes(SystemTag.CORE_NODE);
|
|
54
47
|
|
|
48
|
+
const isFunction = (value) => typeof value === "function";
|
|
49
|
+
|
|
50
|
+
const isObject = (value) => typeof value === "object" && value !== null;
|
|
51
|
+
|
|
55
52
|
const isPromiseLike = (value) => isObject(value) && (value instanceof Promise || isFunction(value.then));
|
|
56
53
|
|
|
57
54
|
const isPromiseOrFunction = (value) => isFunction(value) || isPromiseLike(value);
|
|
58
55
|
|
|
56
|
+
const isReadableAsyncState = (value) => isObject(value) && isFunction(value.get) && isFunction(value.getAsync) && isFunction(value.getPromise) && isFunction(value.then);
|
|
57
|
+
|
|
59
58
|
const noop = () => void 0;
|
|
60
59
|
|
|
61
60
|
const rejectAfter = (ms) => {
|
|
@@ -253,7 +252,8 @@ const asyncState = (initialValue, customConfig) => {
|
|
|
253
252
|
events.requested.emit();
|
|
254
253
|
}
|
|
255
254
|
let newValue = isFunction(nextValueOrResolver) ? await nextValueOrResolver(value) : await nextValueOrResolver;
|
|
256
|
-
|
|
255
|
+
const isChanged = !Object.is(newValue, value);
|
|
256
|
+
if (currentPendingVersion !== lastPendingVersion || !isChanged) {
|
|
257
257
|
events.ignored.emit({ value: newValue, version: currentPendingVersion });
|
|
258
258
|
return;
|
|
259
259
|
}
|
|
@@ -261,17 +261,22 @@ const asyncState = (initialValue, customConfig) => {
|
|
|
261
261
|
value = newValue;
|
|
262
262
|
status = AsyncStatus.FULFILLED;
|
|
263
263
|
events.fulfilled.emit(newValue);
|
|
264
|
-
|
|
264
|
+
if (isChanged) {
|
|
265
|
+
events.changed.emit(value);
|
|
266
|
+
}
|
|
265
267
|
} catch (e) {
|
|
266
268
|
if (currentPendingVersion !== lastPendingVersion) {
|
|
267
269
|
events.ignored.emit({ error: e, version: currentPendingVersion });
|
|
268
270
|
return;
|
|
269
271
|
}
|
|
272
|
+
const isChanged = !Object.is(e, error);
|
|
270
273
|
error = e;
|
|
271
274
|
value = void 0;
|
|
272
275
|
status = AsyncStatus.REJECTED;
|
|
273
276
|
events.rejected.emit(error);
|
|
274
|
-
|
|
277
|
+
if (isChanged) {
|
|
278
|
+
events.changed.emit(value);
|
|
279
|
+
}
|
|
275
280
|
}
|
|
276
281
|
version = lastPendingVersion;
|
|
277
282
|
await flush();
|
|
@@ -442,6 +447,7 @@ const getConfig$4 = (customConfig = {}) => ({
|
|
|
442
447
|
});
|
|
443
448
|
const effect = (states, effect2, customConfig) => {
|
|
444
449
|
const config = getConfig$4(customConfig);
|
|
450
|
+
const asyncStates = states.filter(isReadableAsyncState);
|
|
445
451
|
let cleanup;
|
|
446
452
|
const events = {
|
|
447
453
|
cleared: new AwaiEvent(),
|
|
@@ -449,7 +455,7 @@ const effect = (states, effect2, customConfig) => {
|
|
|
449
455
|
};
|
|
450
456
|
const runEffect = () => {
|
|
451
457
|
const values = states.map((state) => state.get());
|
|
452
|
-
const status = getAggregatedAsyncStatus(
|
|
458
|
+
const status = getAggregatedAsyncStatus(asyncStates);
|
|
453
459
|
if (status !== AsyncStatus.FULFILLED) {
|
|
454
460
|
return;
|
|
455
461
|
}
|
|
@@ -537,12 +543,20 @@ const familyState = (initializer, customConfig) => {
|
|
|
537
543
|
);
|
|
538
544
|
return stateNode;
|
|
539
545
|
};
|
|
540
|
-
const setNode = (id, stateNode) => {
|
|
546
|
+
const setNode = async (id, stateNode) => {
|
|
541
547
|
if (id in family) {
|
|
542
548
|
throw new Error(`Cannot set node. Node with id "${id}" already exists.`);
|
|
543
549
|
}
|
|
544
550
|
family = { ...family, [id]: stateNode };
|
|
551
|
+
scenario(
|
|
552
|
+
stateNode.events.changed,
|
|
553
|
+
() => {
|
|
554
|
+
events.changed.emit(family);
|
|
555
|
+
},
|
|
556
|
+
{ tags: [SystemTag.CORE_NODE] }
|
|
557
|
+
);
|
|
545
558
|
events.changed.emit(family);
|
|
559
|
+
await flush();
|
|
546
560
|
};
|
|
547
561
|
const get = () => {
|
|
548
562
|
return family;
|
|
@@ -578,11 +592,15 @@ const asyncSelector = (states, predicate, customConfig) => {
|
|
|
578
592
|
rejected: new AwaiEvent(),
|
|
579
593
|
requested: new AwaiEvent()
|
|
580
594
|
};
|
|
581
|
-
const getStatus = () =>
|
|
595
|
+
const getStatus = () => {
|
|
596
|
+
const aggregatedStatus = getAggregatedAsyncStatus(asyncStates);
|
|
597
|
+
return error !== null && aggregatedStatus === AsyncStatus.FULFILLED ? AsyncStatus.REJECTED : aggregatedStatus;
|
|
598
|
+
};
|
|
582
599
|
const determineNextVersion = async () => {
|
|
583
600
|
const currentPendingVersion = (lastPendingVersion + 1) % Number.MAX_SAFE_INTEGER;
|
|
584
601
|
lastPendingVersion = currentPendingVersion;
|
|
585
|
-
|
|
602
|
+
events.requested.emit();
|
|
603
|
+
const status = getAggregatedAsyncStatus(asyncStates);
|
|
586
604
|
const errors = asyncStates.map((state) => state.getAsync().error).filter(Boolean);
|
|
587
605
|
if (errors.length > 0) {
|
|
588
606
|
error = new AggregateError(errors);
|
|
@@ -599,14 +617,15 @@ const asyncSelector = (states, predicate, customConfig) => {
|
|
|
599
617
|
isLoading = true;
|
|
600
618
|
try {
|
|
601
619
|
const newValue = await predicate(...values);
|
|
620
|
+
const isChanged = !Object.is(newValue, value);
|
|
602
621
|
if (currentPendingVersion !== lastPendingVersion) {
|
|
603
622
|
events.ignored.emit({ value: newValue, version: currentPendingVersion });
|
|
604
623
|
return;
|
|
605
624
|
}
|
|
606
|
-
|
|
607
|
-
|
|
608
|
-
|
|
609
|
-
|
|
625
|
+
error = null;
|
|
626
|
+
value = newValue;
|
|
627
|
+
events.fulfilled.emit(newValue);
|
|
628
|
+
if (isChanged) {
|
|
610
629
|
events.changed.emit(value);
|
|
611
630
|
}
|
|
612
631
|
} catch (caughtError) {
|
|
@@ -614,10 +633,13 @@ const asyncSelector = (states, predicate, customConfig) => {
|
|
|
614
633
|
events.ignored.emit({ error: caughtError, version: currentPendingVersion });
|
|
615
634
|
return;
|
|
616
635
|
}
|
|
636
|
+
const isChanged = typeof value !== "undefined";
|
|
617
637
|
error = caughtError;
|
|
618
638
|
value = void 0;
|
|
619
639
|
events.rejected.emit(caughtError);
|
|
620
|
-
|
|
640
|
+
if (isChanged) {
|
|
641
|
+
events.changed.emit(value);
|
|
642
|
+
}
|
|
621
643
|
} finally {
|
|
622
644
|
if (currentPendingVersion === lastPendingVersion) {
|
|
623
645
|
version = lastPendingVersion;
|
|
@@ -627,28 +649,22 @@ const asyncSelector = (states, predicate, customConfig) => {
|
|
|
627
649
|
});
|
|
628
650
|
}
|
|
629
651
|
};
|
|
630
|
-
scenario(
|
|
631
|
-
async () => {
|
|
632
|
-
const abortController = new AbortController();
|
|
633
|
-
await Promise.race(states.map((state) => state.events.changed.abortable(abortController)));
|
|
634
|
-
abortController.abort();
|
|
635
|
-
},
|
|
636
|
-
determineNextVersion,
|
|
637
|
-
{ tags: [SystemTag.CORE_NODE] }
|
|
638
|
-
);
|
|
639
652
|
scenario(
|
|
640
653
|
async () => {
|
|
641
654
|
const abortController = new AbortController();
|
|
642
655
|
await Promise.race(
|
|
643
|
-
|
|
656
|
+
states.flatMap((state) => {
|
|
657
|
+
return isReadableAsyncState(state) ? [
|
|
658
|
+
state.events.requested.abortable(abortController),
|
|
659
|
+
state.events.rejected.abortable(abortController),
|
|
660
|
+
state.events.fulfilled.abortable(abortController)
|
|
661
|
+
] : state.events.changed.abortable(abortController);
|
|
662
|
+
})
|
|
644
663
|
);
|
|
645
664
|
abortController.abort();
|
|
646
665
|
},
|
|
647
|
-
|
|
648
|
-
|
|
649
|
-
await events.fulfilled;
|
|
650
|
-
},
|
|
651
|
-
{ tags: [SystemTag.CORE_NODE], strategy: "cyclic" }
|
|
666
|
+
determineNextVersion,
|
|
667
|
+
{ tags: [SystemTag.CORE_NODE] }
|
|
652
668
|
);
|
|
653
669
|
const get = () => value;
|
|
654
670
|
const getAsync = () => ({ error, isLoading, value });
|
|
@@ -673,7 +689,7 @@ const asyncSelector = (states, predicate, customConfig) => {
|
|
|
673
689
|
getStatus,
|
|
674
690
|
then
|
|
675
691
|
};
|
|
676
|
-
determineNextVersion
|
|
692
|
+
queueMicrotask(determineNextVersion);
|
|
677
693
|
registry.register(selectorNode);
|
|
678
694
|
return selectorNode;
|
|
679
695
|
};
|
|
@@ -685,6 +701,7 @@ const getConfig = (customConfig = {}) => ({
|
|
|
685
701
|
});
|
|
686
702
|
const syncSelector = (states, predicate, customConfig) => {
|
|
687
703
|
const config = getConfig(customConfig);
|
|
704
|
+
let value;
|
|
688
705
|
const events = {
|
|
689
706
|
changed: new AwaiEvent()
|
|
690
707
|
};
|
|
@@ -704,9 +721,16 @@ const syncSelector = (states, predicate, customConfig) => {
|
|
|
704
721
|
await Promise.race(states.map((state) => state.events.changed.abortable(abortController)));
|
|
705
722
|
abortController.abort();
|
|
706
723
|
},
|
|
707
|
-
() =>
|
|
724
|
+
() => {
|
|
725
|
+
const newValue = get();
|
|
726
|
+
if (!Object.is(newValue, value)) {
|
|
727
|
+
value = newValue;
|
|
728
|
+
events.changed.emit(newValue);
|
|
729
|
+
}
|
|
730
|
+
},
|
|
708
731
|
{ tags: [SystemTag.CORE_NODE] }
|
|
709
732
|
);
|
|
733
|
+
value = get();
|
|
710
734
|
const selectorNode = { config, events, get, then };
|
|
711
735
|
registry.register(selectorNode);
|
|
712
736
|
return selectorNode;
|
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/isFunction.ts","../src/lib/isObject.ts","../src/lib/isReadableAsyncState.ts","../src/lib/getAggregatedAsyncStatus.ts","../src/lib/getUniqueId.ts","../src/lib/isCoreNode.ts","../src/lib/isPromiseLike.ts","../src/lib/isPromiseOrFunction.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","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 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 { AsyncStatus } from '../constants';\nimport type { ReadableAsyncState, ReadableState } from '../types';\n\nimport isReadableAsyncState from './isReadableAsyncState';\n\nconst getAggregatedAsyncStatus = <\n T extends (ReadableState<any> | ReadableAsyncState<any> | Promise<any>)[],\n>(\n states: T,\n): AsyncStatus => {\n const asyncStates = states.filter(isReadableAsyncState);\n\n const hasError = asyncStates.some((state) => state.getStatus() === AsyncStatus.REJECTED);\n\n if (hasError) {\n return AsyncStatus.REJECTED;\n }\n\n const isPending = asyncStates.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","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","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 events.invoked.emit({ arguments: invokeArgs, config });\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 });\n return value;\n } catch (error) {\n events.rejected?.emit({\n arguments: invokeArgs,\n config,\n error,\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\n if (currentPendingVersion !== lastPendingVersion) {\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 events.changed.emit(value);\n } catch (e) {\n if (currentPendingVersion !== lastPendingVersion) {\n events.ignored.emit({ error: e, version: currentPendingVersion });\n return;\n }\n\n error = e;\n value = undefined;\n status = AsyncStatus.REJECTED;\n\n events.rejected.emit(error);\n events.changed.emit(value);\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 } 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\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(states);\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'] = async (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 await flush();\n\n return 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 } 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 = ReturnType<Initializer> extends PromiseLike<infer Q>\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 = (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 events.changed.emit(family);\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, flush } 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 = () => getAggregatedAsyncStatus(states);\n\n const determineNextVersion = async () => {\n const currentPendingVersion = (lastPendingVersion + 1) % Number.MAX_SAFE_INTEGER;\n lastPendingVersion = currentPendingVersion;\n\n const status = getStatus();\n const errors = asyncStates.map((state) => state.getAsync().error).filter(Boolean);\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\n if (currentPendingVersion !== lastPendingVersion) {\n events.ignored.emit({ value: newValue, version: currentPendingVersion });\n return;\n }\n\n if (newValue !== value) {\n error = null;\n value = newValue;\n events.fulfilled.emit(newValue);\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 error = caughtError;\n value = undefined;\n events.rejected.emit(caughtError);\n events.changed.emit(value);\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(states.map((state) => state.events.changed.abortable(abortController)));\n abortController.abort();\n },\n determineNextVersion,\n { tags: [SystemTag.CORE_NODE] },\n );\n\n scenario(\n async () => {\n const abortController = new AbortController();\n await Promise.race(\n asyncStates.map((state) => state.events.requested.abortable(abortController)),\n );\n abortController.abort();\n },\n async () => {\n events.requested.emit();\n await events.fulfilled;\n },\n { tags: [SystemTag.CORE_NODE], strategy: 'cyclic' },\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 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\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 () => events.changed.emit(get()),\n { tags: [SystemTag.CORE_NODE] },\n );\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/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 events.invoked.emit({ arguments: invokeArgs, config });\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 });\n return value;\n } catch (error) {\n events.rejected?.emit({\n arguments: invokeArgs,\n config,\n error,\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'] = async (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 await flush();\n\n return 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, flush } 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 events.requested.emit();\n\n const status = getAggregatedAsyncStatus(asyncStates);\n const errors = asyncStates.map((state) => state.getAsync().error).filter(Boolean);\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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"}
|