awai 1.0.0-rc-3 → 1.0.0-rc-5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/{index.js → index.cjs} +9 -16
- package/dist/index.cjs.map +1 -0
- package/dist/index.d.ts +10 -6
- package/dist/index.mjs +8 -15
- package/dist/index.mjs.map +1 -1
- package/package.json +9 -2
- package/dist/index.js.map +0 -1
|
@@ -65,10 +65,7 @@ const rejectAfter = (ms) => {
|
|
|
65
65
|
|
|
66
66
|
var __defProp$2 = Object.defineProperty;
|
|
67
67
|
var __defNormalProp$2 = (obj, key, value) => key in obj ? __defProp$2(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
|
|
68
|
-
var __publicField$2 = (obj, key, value) =>
|
|
69
|
-
__defNormalProp$2(obj, typeof key !== "symbol" ? key + "" : key, value);
|
|
70
|
-
return value;
|
|
71
|
-
};
|
|
68
|
+
var __publicField$2 = (obj, key, value) => __defNormalProp$2(obj, typeof key !== "symbol" ? key + "" : key, value);
|
|
72
69
|
class SyncQueue {
|
|
73
70
|
constructor() {
|
|
74
71
|
__publicField$2(this, "callbacksQueue", []);
|
|
@@ -96,10 +93,7 @@ const queue = new SyncQueue();
|
|
|
96
93
|
|
|
97
94
|
var __defProp$1 = Object.defineProperty;
|
|
98
95
|
var __defNormalProp$1 = (obj, key, value) => key in obj ? __defProp$1(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
|
|
99
|
-
var __publicField$1 = (obj, key, value) =>
|
|
100
|
-
__defNormalProp$1(obj, typeof key !== "symbol" ? key + "" : key, value);
|
|
101
|
-
return value;
|
|
102
|
-
};
|
|
96
|
+
var __publicField$1 = (obj, key, value) => __defNormalProp$1(obj, typeof key !== "symbol" ? key + "" : key, value);
|
|
103
97
|
class AwaiEvent {
|
|
104
98
|
constructor() {
|
|
105
99
|
__publicField$1(this, "_awaiters", []);
|
|
@@ -154,10 +148,7 @@ const flush = () => new Promise((resolve) => setTimeout(resolve, 0));
|
|
|
154
148
|
|
|
155
149
|
var __defProp = Object.defineProperty;
|
|
156
150
|
var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
|
|
157
|
-
var __publicField = (obj, key, value) =>
|
|
158
|
-
__defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
|
|
159
|
-
return value;
|
|
160
|
-
};
|
|
151
|
+
var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
|
|
161
152
|
class Registry {
|
|
162
153
|
constructor() {
|
|
163
154
|
__publicField(this, "_nodes", []);
|
|
@@ -203,18 +194,20 @@ function action(...args) {
|
|
|
203
194
|
fulfilled: hasCallback ? new AwaiEvent() : void 0
|
|
204
195
|
};
|
|
205
196
|
const invoke = async (...invokeArgs) => {
|
|
206
|
-
|
|
197
|
+
const invocationId = getUniqueId("invocation");
|
|
198
|
+
events.invoked.emit({ arguments: invokeArgs, config, invocationId });
|
|
207
199
|
try {
|
|
208
200
|
const valueOrPromise = isFunction(callback) ? callback(...invokeArgs) : void 0;
|
|
209
201
|
const value = await valueOrPromise;
|
|
210
202
|
await flush();
|
|
211
|
-
events.fulfilled?.emit({ arguments: invokeArgs, config, result: value });
|
|
203
|
+
events.fulfilled?.emit({ arguments: invokeArgs, config, result: value, invocationId });
|
|
212
204
|
return value;
|
|
213
205
|
} catch (error) {
|
|
214
206
|
events.rejected?.emit({
|
|
215
207
|
arguments: invokeArgs,
|
|
216
208
|
config,
|
|
217
|
-
error
|
|
209
|
+
error,
|
|
210
|
+
invocationId
|
|
218
211
|
});
|
|
219
212
|
throw error;
|
|
220
213
|
}
|
|
@@ -767,4 +760,4 @@ exports.rejectAfter = rejectAfter;
|
|
|
767
760
|
exports.scenario = scenario;
|
|
768
761
|
exports.selector = selector;
|
|
769
762
|
exports.state = state;
|
|
770
|
-
//# sourceMappingURL=index.
|
|
763
|
+
//# sourceMappingURL=index.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.cjs","sources":["../src/constants/AsyncStatus.ts","../src/constants/SystemTag.ts","../src/lib/delay.ts","../src/lib/fork.ts","../src/lib/getAggregatedAsyncStatus.ts","../src/lib/getUniqueId.ts","../src/lib/isCoreNode.ts","../src/lib/isFunction.ts","../src/lib/isObject.ts","../src/lib/isPromiseLike.ts","../src/lib/isPromiseOrFunction.ts","../src/lib/isReadableAsyncState.ts","../src/lib/noop.ts","../src/lib/rejectAfter.ts","../src/lib/SyncQueue.ts","../src/global/queue.ts","../src/core/AwaiEvent.ts","../src/core/flush.ts","../src/core/Registry.ts","../src/global/registry.ts","../src/action/action.ts","../src/async-state/async-state.ts","../src/scenario/lib/getDefaultStrategy.ts","../src/scenario/lib/getTriggerPromise.ts","../src/scenario/scenario.ts","../src/effect/effect.ts","../src/state/state.ts","../src/family-state/family-state.ts","../src/selector/asyncSelector.ts","../src/selector/syncSelector.ts","../src/selector/selector.ts"],"sourcesContent":["enum AsyncStatus {\n FULFILLED = 'fulfilled',\n PENDING = 'pending',\n REJECTED = 'rejected',\n}\n\nexport default AsyncStatus;\n","enum SystemTag {\n ACTION = '@awai/action',\n ASYNC_SELECTOR = '@awai/async-selector',\n ASYNC_STATE = '@awai/async-state',\n CORE_NODE = '@awai/core-node',\n EFFECT = '@awai/effect',\n FAMILY_STATE = '@awai/family-state',\n SCENARIO = '@awai/scenario',\n SELECTOR = '@awai/selector',\n STATE = '@awai/state',\n}\n\nexport default SystemTag;\n","const delay = (ms: number): Promise<void> => new Promise((resolve) => setTimeout(resolve, ms));\n\nexport default delay;\n","const fork = async (forkFn: () => Promise<any>) => {\n await forkFn();\n};\n\nexport default fork;\n","import { AsyncStatus } from '../constants';\nimport type { ReadableAsyncState } from '../types';\n\nconst getAggregatedAsyncStatus = <T extends Pick<ReadableAsyncState, 'getStatus'>[]>(\n states: T,\n): AsyncStatus => {\n const hasError = states.some((state) => state.getStatus() === AsyncStatus.REJECTED);\n\n if (hasError) {\n return AsyncStatus.REJECTED;\n }\n\n const isPending = states.some((state) => state.getStatus() === AsyncStatus.PENDING);\n\n if (isPending) {\n return AsyncStatus.PENDING;\n }\n\n return AsyncStatus.FULFILLED;\n};\n\nexport default getAggregatedAsyncStatus;\n","const lastScopesIds: Record<string, number> = {};\n\nconst getUniqueId = (scope = 'unknown') => {\n const nextId = (lastScopesIds[scope] ?? 0) + 1;\n lastScopesIds[scope] = nextId;\n return `awai\\$${scope}\\$${nextId}`;\n};\n\nexport default getUniqueId;\n","import { SystemTag } from '../constants';\nimport type { BaseNode } from '../types';\n\nconst isCoreNode = (node: BaseNode): boolean => node.config.tags.includes(SystemTag.CORE_NODE);\n\nexport default isCoreNode;\n","const isFunction = (value: unknown): value is Function => typeof value === 'function';\n\nexport default isFunction;\n","const isObject = (value: unknown): value is Record<string, unknown> =>\n typeof value === 'object' && value !== null;\n\nexport default isObject;\n","import isFunction from './isFunction';\nimport isObject from './isObject';\n\nconst isPromiseLike = <T>(value: unknown): value is PromiseLike<T> =>\n isObject(value) && (value instanceof Promise || isFunction(value.then));\n\nexport default isPromiseLike;\n","import isFunction from './isFunction';\nimport isPromiseLike from './isPromiseLike';\n\nconst isPromiseOrFunction = <T>(\n value: unknown,\n): value is Promise<T> | ((...args: any) => Promise<T>) =>\n isFunction(value) || isPromiseLike<T>(value);\n\nexport default isPromiseOrFunction;\n","import type { ReadableAsyncState } from '../types';\n\nimport isFunction from './isFunction';\nimport isObject from './isObject';\n\nconst isReadableAsyncState = <T>(value: unknown): value is ReadableAsyncState<T> =>\n isObject(value) &&\n isFunction(value.get) &&\n isFunction(value.getAsync) &&\n isFunction(value.getPromise) &&\n isFunction(value.then);\n\nexport default isReadableAsyncState;\n","const noop = () => undefined;\n\nexport default noop;\n","const rejectAfter = (ms: number): Promise<void> => {\n return new Promise((_, reject) => setTimeout(reject, ms));\n};\n\nexport default rejectAfter;\n","/**\n * @description\n * This helper is needed to emit events synchronously, so that scenarios/effects/selectors\n * can resubscribe to an event before another emission.\n *\n * @example\n * const state = state(0);\n *\n * scenario(state.events.change, () => {\n * // Without `SyncQueue` this scenario would only run once\n * });\n *\n * state.set(1);\n * state.set(2);\n */\n\nexport default class SyncQueue {\n private callbacksQueue: Function[] = [];\n private isDequeuing = false;\n\n public enqueue(callback: Function) {\n this.callbacksQueue.push(callback);\n this.dequeue();\n }\n\n private dequeue = async () => {\n if (this.isDequeuing || this.callbacksQueue.length === 0) {\n return;\n }\n\n this.isDequeuing = true;\n const callback = this.callbacksQueue.shift()!;\n callback();\n\n queueMicrotask(() => {\n this.isDequeuing = false;\n this.dequeue();\n });\n };\n}\n","import { SyncQueue } from '../lib';\n\nconst queue = new SyncQueue();\n\nexport default queue;\n","import queue from '../global/queue';\nimport { isFunction } from '../lib';\n\ntype Resolver<T> = (value: T) => any;\ntype FilterPredicate<T> = (value: T) => boolean;\n\nexport default class AwaiEvent<T = void> {\n private _awaiters: Resolver<T>[] = [];\n\n then: PromiseLike<T>['then'] = (onfulfilled) => {\n return new Promise<any>((resolve, reject) => {\n this._awaiters.push((value: T) => {\n try {\n const result = isFunction(onfulfilled) ? onfulfilled(value) : value;\n resolve(result);\n } catch (error) {\n reject(error);\n }\n });\n });\n };\n\n abortable(abortController: AbortController): Promise<T> {\n return new Promise<T>((resolve, reject) => {\n this._awaiters.push(resolve);\n\n const abortionHandler = () => {\n this._awaiters = this._awaiters.filter((awaiter) => awaiter !== resolve);\n reject('Aborted');\n\n abortController.signal.removeEventListener('abort', abortionHandler);\n };\n\n abortController.signal.addEventListener('abort', abortionHandler);\n });\n }\n\n emit(value: T) {\n queue.enqueue(async () => {\n const awaiters = this._awaiters;\n this._awaiters = [];\n\n for (const resolve of awaiters) {\n resolve(value);\n }\n });\n }\n\n async filter(predicate: FilterPredicate<T>) {\n return new Promise(async (resolve) => {\n while (true) {\n const newValue = await this;\n const isApplicable = Boolean(predicate(newValue));\n\n if (isApplicable) {\n resolve(newValue);\n return;\n }\n }\n });\n }\n}\n","const flush = () => new Promise<void>((resolve) => setTimeout(resolve, 0));\n\nexport default flush;\n","import { isCoreNode } from '../lib';\nimport type BaseNode from '../types/BaseNode';\n\nimport AwaiEvent from './AwaiEvent';\n\nexport default class Registry<T extends BaseNode> {\n private _nodes: T[] = [];\n public readonly events = {\n deregistered: new AwaiEvent<T['config']['id']>(),\n registered: new AwaiEvent<T>(),\n };\n\n public async register(node: T) {\n if (isCoreNode(node)) {\n return;\n }\n\n this._nodes.push(node);\n this.events.registered.emit(node);\n }\n\n public async deregister(id: BaseNode['config']['id']) {\n const node = this._nodes.find((node) => node.config.id === id);\n\n if (!node) {\n return;\n }\n\n this._nodes = this._nodes.filter((node) => node.config.id !== id);\n this.events.deregistered.emit(id);\n }\n\n get nodes() {\n return [...this._nodes];\n }\n}\n","import { Registry } from '../core';\n\nconst registry = new Registry();\n\nexport default registry;\n","import { SystemTag } from '../constants';\nimport { AwaiEvent, flush } from '../core';\nimport { registry } from '../global';\nimport { getUniqueId, isFunction } from '../lib';\n\nimport type { CallbackAction, Config, EmptyAction } from './types';\n\nconst getConfig = (customConfig: Partial<Config> = {}): Config => ({\n ...customConfig,\n id: customConfig.id ?? getUniqueId(action.name),\n tags: [SystemTag.ACTION, ...(customConfig.tags ?? [])],\n});\n\nfunction action<Args extends any[] = []>(): EmptyAction<Args>;\nfunction action<Args extends any[] = []>(config?: Partial<Config>): EmptyAction<Args>;\nfunction action<Args extends any[], Return = void>(\n callback: (...args: Args) => Return,\n config?: Partial<Config>,\n): CallbackAction<Args, Return>;\n\nfunction action<Args extends any[], Return = void>(\n ...args: [Partial<Config>?] | [(...args: Args) => Return, Partial<Config>?]\n): EmptyAction<Args> | CallbackAction<Args, Return> {\n type Action = EmptyAction<Args> | CallbackAction<Args, Return>;\n\n const hasCallback = isFunction(args[0]);\n const [callback, customConfig] = hasCallback\n ? (args as [(...args: Args) => Return, Partial<Config>?])\n : ([, ...args] as [undefined, Partial<Config>?]);\n\n const config = getConfig(customConfig);\n\n const events = {\n invoked: new AwaiEvent(),\n rejected: hasCallback ? new AwaiEvent() : undefined,\n fulfilled: hasCallback ? new AwaiEvent() : undefined,\n } satisfies Action['events'];\n\n const invoke = async (...invokeArgs: Args) => {\n const invocationId = getUniqueId('invocation');\n\n events.invoked.emit({ arguments: invokeArgs, config, invocationId });\n\n try {\n const valueOrPromise: Return | Promise<Return> = isFunction(callback)\n ? callback(...invokeArgs)\n : (undefined as Return);\n\n const value = await valueOrPromise;\n await flush();\n events.fulfilled?.emit({ arguments: invokeArgs, config, result: value, invocationId });\n return value;\n } catch (error) {\n events.rejected?.emit({\n arguments: invokeArgs,\n config,\n error,\n invocationId,\n });\n throw error;\n }\n };\n\n const actionNode = Object.assign(invoke, { config, events }) as Action;\n\n registry.register(actionNode);\n\n return actionNode;\n}\n\nexport default action;\n","import { AsyncStatus, SystemTag } from '../constants';\nimport { AwaiEvent, flush } from '../core';\nimport { registry } from '../global';\nimport { getUniqueId, isFunction, isPromiseOrFunction, noop } from '../lib';\n\nimport type { VersionIgnoredEvent, AsyncState, Config, InitialValue, Version } from './types';\n\nconst getConfig = (customConfig: Partial<Config> = {}): Config => ({\n ...customConfig,\n id: customConfig.id ?? getUniqueId(asyncState.name),\n tags: [SystemTag.ASYNC_STATE, ...(customConfig.tags ?? [])],\n});\n\nconst asyncState = <T>(\n initialValue?: InitialValue<T>,\n customConfig?: Partial<Config>,\n): AsyncState<T> => {\n const config = getConfig(customConfig);\n const isInitialValueAsync = isPromiseOrFunction(initialValue);\n let version: Version = isInitialValueAsync ? 0 : 1;\n let lastPendingVersion: Version = version;\n let status: AsyncStatus = AsyncStatus.FULFILLED;\n let error: unknown = null;\n let value: T | undefined = isInitialValueAsync ? undefined : initialValue;\n\n const events: AsyncState<T>['events'] = {\n changed: new AwaiEvent<T | undefined>(),\n fulfilled: new AwaiEvent<T>(),\n ignored: new AwaiEvent<VersionIgnoredEvent<T>>(),\n rejected: new AwaiEvent<unknown>(),\n requested: new AwaiEvent<void>(),\n };\n\n const getStatus: AsyncState<T>['getStatus'] = () => status;\n\n const set: AsyncState<T>['set'] = async (nextValueOrResolver) => {\n const currentPendingVersion: Version = (lastPendingVersion + 1) % Number.MAX_SAFE_INTEGER;\n lastPendingVersion = currentPendingVersion;\n\n try {\n if (isPromiseOrFunction(nextValueOrResolver)) {\n status = AsyncStatus.PENDING;\n events.requested.emit();\n }\n\n let newValue = isFunction(nextValueOrResolver)\n ? await nextValueOrResolver(value)\n : await nextValueOrResolver;\n const isChanged = !Object.is(newValue, value);\n\n if (currentPendingVersion !== lastPendingVersion || !isChanged) {\n events.ignored.emit({ value: newValue, version: currentPendingVersion });\n return;\n }\n\n error = null;\n value = newValue;\n status = AsyncStatus.FULFILLED;\n\n events.fulfilled.emit(newValue);\n\n if (isChanged) {\n events.changed.emit(value);\n }\n } catch (e) {\n if (currentPendingVersion !== lastPendingVersion) {\n events.ignored.emit({ error: e, version: currentPendingVersion });\n return;\n }\n\n const isChanged = !Object.is(e, error);\n\n error = e;\n value = undefined;\n status = AsyncStatus.REJECTED;\n\n events.rejected.emit(error);\n\n if (isChanged) {\n events.changed.emit(value);\n }\n }\n\n version = lastPendingVersion;\n await flush();\n };\n\n const get: AsyncState<T>['get'] = () => value;\n\n const getAsync: AsyncState<T>['getAsync'] = () => ({\n error,\n isLoading: status === AsyncStatus.PENDING,\n value,\n });\n\n const getPromise: AsyncState<T>['getPromise'] = async () => {\n if (version === lastPendingVersion) {\n return value!;\n }\n\n const abortController = new AbortController();\n\n try {\n return await new Promise((resolve, reject) => {\n events.fulfilled.abortable(abortController).then(resolve).catch(noop);\n events.rejected.abortable(abortController).then(reject).catch(noop);\n });\n } finally {\n abortController.abort();\n }\n };\n\n const then: PromiseLike<T>['then'] = async (resolve) => {\n if (!isFunction(resolve)) {\n return getPromise() as any;\n }\n\n return resolve(await getPromise());\n };\n\n if (isInitialValueAsync) {\n set(initialValue);\n }\n\n const asyncStateNode: AsyncState<T> = {\n config,\n events,\n get,\n getAsync,\n getPromise,\n getStatus,\n set,\n then,\n };\n\n registry.register(asyncStateNode);\n\n return asyncStateNode;\n};\n\nexport default asyncState;\n","import type { Config } from '../types';\n\nconst getDefaultStrategy = (\n isPlainPromiseTrigger: boolean,\n hasTrigger: boolean,\n): Config['strategy'] => {\n if (isPlainPromiseTrigger) {\n return 'once';\n }\n\n if (hasTrigger) {\n return 'fork';\n }\n\n return 'cyclic';\n};\n\nexport default getDefaultStrategy;\n","import { isFunction } from '../../lib';\nimport type { Trigger } from '../types';\n\nconst getTriggerPromise = <T>(trigger: Trigger<T> | undefined) => {\n if (!trigger) {\n return Promise.resolve(undefined as T);\n }\n\n return isFunction(trigger) ? trigger() : trigger;\n};\n\nexport default getTriggerPromise;\n","import { SystemTag } from '../constants';\nimport { AwaiEvent, flush } from '../core';\nimport { registry } from '../global';\nimport { getUniqueId, isFunction, isObject, isPromiseLike } from '../lib';\n\nimport { getDefaultStrategy, getTriggerPromise } from './lib';\nimport type { Callback, Config, ExpirationTrigger, SettledEvent, Scenario, Trigger } from './types';\n\nconst getConfig = (\n isPlainPromiseTrigger: boolean,\n hasTrigger: boolean,\n customConfig: Partial<Config> = {},\n): Config => ({\n ...customConfig,\n id: customConfig.id ?? getUniqueId(scenario.name),\n strategy: customConfig.strategy ?? getDefaultStrategy(isPlainPromiseTrigger, hasTrigger),\n tags: [SystemTag.SCENARIO, ...(customConfig.tags ?? [])],\n});\n\nfunction scenario<T, R, E>(\n trigger: Trigger<T>,\n callback: Callback<T, R>,\n customConfig?: Partial<Config>,\n): Scenario<T, R, E>;\n\nfunction scenario<T, R, E>(\n trigger: Trigger<T>,\n expirationTrigger: ExpirationTrigger<E>,\n callback: Callback<T, R>,\n customConfig?: Partial<Config>,\n): Scenario<T, R, E>;\n\nfunction scenario<T, R, E = unknown>(\n callback: Callback,\n config?: Partial<Config>,\n): Scenario<T, R, E>;\n\nfunction scenario<T, R, E>(\n ...args:\n | [Trigger<T>, Callback<T, R>, Partial<Config>?]\n | [Trigger<T>, ExpirationTrigger<E>, Callback<T, R>, Partial<Config>?]\n | [Callback, Partial<Config>?]\n) {\n const hasTrigger = isFunction(args[1]) || isFunction(args[2]);\n const hasExpirationTrigger = isFunction(args[2]);\n\n const trigger = hasTrigger ? (args[0] as Trigger<T>) : undefined;\n const expirationTrigger = hasExpirationTrigger ? (args[1] as ExpirationTrigger<E>) : undefined;\n const callback = args.findLast(isFunction) as Callback<T, R>;\n const customConfig = args.at(args.indexOf(callback) + 1) as Partial<Config> | undefined;\n const isPlainPromiseTrigger = hasTrigger && isObject(args[0]) && args[0].constructor === Promise;\n const isFiniteScenario =\n isPlainPromiseTrigger || hasExpirationTrigger || typeof customConfig?.repeat !== 'undefined';\n\n const config = getConfig(isPlainPromiseTrigger, hasTrigger, customConfig);\n const { strategy } = config;\n let { repeat = Infinity } = config;\n let runningCallbacksCount = 0;\n let shouldExpire = false;\n let expired = false;\n\n const events: Scenario<T, R, E>['events'] = {\n fulfilled: new AwaiEvent(),\n rejected: new AwaiEvent(),\n settled: new AwaiEvent(),\n started: new AwaiEvent(),\n };\n\n const checkShouldExpire = () =>\n repeat <= 0 ||\n strategy === 'once' ||\n shouldExpire ||\n (isFunction(expirationTrigger) && expirationTrigger());\n\n const expire = async (event?: E) => {\n expired = true;\n await flush();\n await events.settled.emit({ event, config });\n await flush();\n await registry.deregister(config.id);\n };\n\n if (isPromiseLike(expirationTrigger)) {\n Promise.resolve(expirationTrigger).then((event) => {\n shouldExpire = true;\n\n if (runningCallbacksCount === 0) {\n expire(event);\n }\n });\n }\n\n const run = async () => {\n getTriggerPromise(trigger).then(\n (event) => {\n repeat--;\n\n if (expired) {\n return;\n }\n\n runningCallbacksCount++;\n events.started.emit({ config, event });\n\n try {\n Promise.resolve(callback(event))\n .then((result) => {\n flush().then(() => {\n events.fulfilled.emit({ config, event, result });\n });\n })\n .catch((error) => {\n events.rejected.emit(error);\n })\n .finally(() => {\n runningCallbacksCount--;\n\n if (checkShouldExpire() && runningCallbacksCount === 0) {\n expire();\n return;\n }\n\n if (strategy === 'cyclic') {\n queueMicrotask(run);\n }\n });\n } catch (error) {\n runningCallbacksCount--;\n events.rejected.emit(error);\n }\n\n if (strategy === 'fork') {\n queueMicrotask(run);\n }\n },\n () => {\n queueMicrotask(run);\n },\n );\n };\n\n const then: AwaiEvent<SettledEvent<E>>['then'] = (resolve) => {\n if (!isFiniteScenario) {\n console.warn(\n 'You seem to await an infinite scenario. This causes a memory leak in your application.',\n );\n }\n\n if (!isFunction(resolve)) {\n return Promise.resolve(events.settled) as any;\n }\n\n return events.settled.then(resolve);\n };\n\n const scenarioNode: Scenario<T, R, E> = { config, events, then };\n\n registry.register(scenarioNode);\n\n run();\n\n return scenarioNode;\n}\n\nexport default scenario;\n","import { AsyncStatus, SystemTag } from '../constants';\nimport { AwaiEvent } from '../core';\nimport { registry } from '../global';\nimport { getAggregatedAsyncStatus, getUniqueId, isFunction, isReadableAsyncState } from '../lib';\nimport scenario from '../scenario';\nimport { type InferReadableType, type ReadableAsyncState, type ReadableState } from '../types';\n\nimport type { CleanupCallback, Config, Effect } from './types';\n\nconst getConfig = (customConfig: Partial<Config> = {}): Config => ({\n ...customConfig,\n id: customConfig.id ?? getUniqueId(effect.name),\n tags: [SystemTag.EFFECT, ...(customConfig.tags ?? [])],\n});\n\nconst effect = <\n T extends (ReadableState<any> | ReadableAsyncState<any>)[],\n V extends { [K in keyof T]: InferReadableType<T[K]> },\n>(\n states: [...T],\n effect: (...values: V) => CleanupCallback | void,\n customConfig?: Partial<Config>,\n): Effect<T, V> => {\n const config = getConfig(customConfig);\n const asyncStates = states.filter(isReadableAsyncState);\n\n let cleanup: ReturnType<typeof effect>;\n\n const events: Effect<T, V>['events'] = {\n cleared: new AwaiEvent(),\n started: new AwaiEvent(),\n };\n\n const runEffect = () => {\n const values = states.map((state) => state.get()) as V;\n const status = getAggregatedAsyncStatus(asyncStates);\n\n if (status !== AsyncStatus.FULFILLED) {\n return;\n }\n\n events.started.emit({ states, values });\n\n cleanup = effect(...values);\n };\n\n queueMicrotask(() => {\n scenario(\n () => Promise.race(states.map((state) => state.events.changed)),\n () => {\n if (isFunction(cleanup)) {\n cleanup();\n events.cleared.emit({ states });\n }\n\n runEffect();\n },\n { tags: [SystemTag.CORE_NODE] },\n );\n\n queueMicrotask(runEffect);\n });\n\n const effectNode: Effect<T, V> = { config, events };\n\n registry.register(effectNode);\n\n return effectNode;\n};\n\nexport default effect;\n","import { SystemTag } from '../constants';\nimport { AwaiEvent, flush } from '../core';\nimport { getUniqueId, isFunction } from '../lib';\nimport { registry } from '../global';\n\nimport type { Config, State } from './types';\n\nconst getConfig = (customConfig: Partial<Config> = {}): Config => ({\n ...customConfig,\n id: customConfig.id ?? getUniqueId(state.name),\n tags: [SystemTag.STATE, ...(customConfig.tags ?? [])],\n});\n\nconst state = <T>(initialValue: T, customConfig?: Partial<Config>): State<T> => {\n const config = getConfig(customConfig);\n\n let value = initialValue;\n\n const events = {\n changed: new AwaiEvent<T>(),\n };\n\n const set: State<T>['set'] = (nextValueOrResolver) => {\n let newValue = isFunction(nextValueOrResolver)\n ? nextValueOrResolver(value)\n : nextValueOrResolver;\n\n if (!Object.is(newValue, value)) {\n value = newValue;\n events.changed.emit(newValue);\n }\n\n return flush().then(() => newValue);\n };\n\n const get = () => value;\n\n const then: State<T>['then'] = async (resolve) => {\n if (!isFunction(resolve)) {\n return value as any;\n }\n\n return resolve(value);\n };\n\n const stateNode: State<T> = { config, events, get, set, then };\n\n registry.register(stateNode);\n\n return stateNode;\n};\n\nexport default state;\n","import asyncState, { type AsyncState } from '../async-state';\nimport { SystemTag } from '../constants';\nimport { AwaiEvent, flush } from '../core';\nimport { registry } from '../global';\nimport { getUniqueId, isFunction } from '../lib';\nimport scenario from '../scenario';\nimport state, { type State } from '../state';\nimport type { Id } from '../types';\n\nimport type { Config, FamilyState } from './types';\n\nconst getConfig = (customConfig: Partial<Config> = {}): Config => ({\n ...customConfig,\n id: customConfig.id ?? getUniqueId(familyState.name),\n tags: [SystemTag.FAMILY_STATE, ...(customConfig.tags ?? [])],\n});\n\nconst familyState = <\n T,\n Initializer extends (id: Id) => T | Promise<T>,\n Family extends Record<Id, NodeType>,\n NodeType extends State<any> | AsyncState<any> = ReturnType<Initializer> extends PromiseLike<\n infer Q\n >\n ? AsyncState<Q>\n : State<ReturnType<Initializer>>,\n>(\n initializer: Initializer,\n customConfig?: Partial<Config>,\n): FamilyState<NodeType> => {\n const config = getConfig(customConfig);\n\n let family: Family = {} as Family;\n\n const events = {\n changed: new AwaiEvent<Record<Id, NodeType>>(),\n stateCreated: new AwaiEvent<Id>(),\n };\n\n const getNode = (id: Id): NodeType => {\n if (id in family) {\n return family[id];\n }\n\n const initialValue = initializer(id);\n\n const stateNode =\n initialValue instanceof Promise\n ? asyncState(initialValue, { tags: [SystemTag.CORE_NODE] })\n : state(initialValue, { tags: [SystemTag.CORE_NODE] });\n\n family = { ...family, [id]: stateNode };\n events.stateCreated.emit(id);\n events.changed.emit(family);\n\n scenario(\n stateNode.events.changed,\n () => {\n events.changed.emit(family);\n },\n { tags: [SystemTag.CORE_NODE] },\n );\n\n return stateNode as NodeType;\n };\n\n const setNode = async (id: Id, stateNode: NodeType) => {\n if (id in family) {\n throw new Error(`Cannot set node. Node with id \"${id}\" already exists.`);\n }\n\n family = { ...family, [id]: stateNode };\n\n scenario(\n stateNode.events.changed,\n () => {\n events.changed.emit(family);\n },\n { tags: [SystemTag.CORE_NODE] },\n );\n\n events.changed.emit(family);\n\n await flush();\n };\n\n const get = () => {\n return family;\n };\n\n const then: FamilyState<NodeType>['then'] = async (resolve) => {\n if (!isFunction(resolve)) {\n return family as any;\n }\n\n return resolve(family);\n };\n\n const familyStateNode: FamilyState<NodeType> = { config, events, get, getNode, setNode, then };\n\n registry.register(familyStateNode);\n\n return familyStateNode;\n};\n\nexport default familyState;\n","import { AsyncStatus, SystemTag } from '../constants';\nimport { AwaiEvent } from '../core';\nimport { registry } from '../global';\nimport {\n fork,\n getAggregatedAsyncStatus,\n getUniqueId,\n isFunction,\n isReadableAsyncState,\n} from '../lib';\nimport scenario from '../scenario';\nimport type { InferReadableType, ReadableAsyncState, ReadableState } from '../types';\n\nimport type { AsyncConfig, AsyncSelector, VersionIgnoredEvent } from './types';\n\nconst getConfig = (customConfig: Partial<AsyncConfig> = {}): AsyncConfig => ({\n ...customConfig,\n id: customConfig.id ?? getUniqueId(asyncSelector.name),\n tags: [SystemTag.ASYNC_SELECTOR, ...(customConfig.tags ?? [])],\n});\n\nconst asyncSelector = <T extends (ReadableState | ReadableAsyncState)[], U>(\n states: T,\n predicate: (...values: { [K in keyof T]: InferReadableType<T[K]> }) => U,\n customConfig?: Partial<AsyncConfig>,\n): AsyncSelector<U> => {\n type StatesValues = { [K in keyof T]: InferReadableType<T[K]> };\n\n const config = getConfig(customConfig);\n const asyncStates = states.filter(isReadableAsyncState);\n\n let error: AggregateError | unknown | null = null;\n let value: U | undefined;\n let isLoading: boolean = true;\n let version = 0;\n let lastPendingVersion: number = version;\n\n const events: AsyncSelector<U>['events'] = {\n changed: new AwaiEvent<U | undefined>(),\n fulfilled: new AwaiEvent<U>(),\n ignored: new AwaiEvent<VersionIgnoredEvent<U>>(),\n rejected: new AwaiEvent<unknown>(),\n requested: new AwaiEvent<void>(),\n };\n\n const getStatus = () => {\n const aggregatedStatus = getAggregatedAsyncStatus(asyncStates);\n\n return error !== null && aggregatedStatus === AsyncStatus.FULFILLED\n ? AsyncStatus.REJECTED\n : aggregatedStatus;\n };\n\n const determineNextVersion = async () => {\n const currentPendingVersion = (lastPendingVersion + 1) % Number.MAX_SAFE_INTEGER;\n lastPendingVersion = currentPendingVersion;\n\n const status = getAggregatedAsyncStatus(asyncStates);\n const errors = asyncStates.map((state) => state.getAsync().error).filter(Boolean);\n\n if (status === AsyncStatus.PENDING) {\n isLoading = true;\n }\n\n events.requested.emit();\n\n if (errors.length > 0) {\n error = new AggregateError(errors);\n value = undefined;\n isLoading = status === AsyncStatus.PENDING;\n version = lastPendingVersion;\n events.rejected.emit(error);\n events.changed.emit(value);\n return;\n }\n\n if (status === AsyncStatus.FULFILLED) {\n const values = states.map((state) => state.get()) as StatesValues;\n\n fork(async () => {\n isLoading = true;\n\n try {\n const newValue = await predicate(...values);\n const isChanged = !Object.is(newValue, value);\n\n if (currentPendingVersion !== lastPendingVersion) {\n events.ignored.emit({ value: newValue, version: currentPendingVersion });\n return;\n }\n\n error = null;\n value = newValue;\n\n events.fulfilled.emit(newValue);\n\n if (isChanged) {\n events.changed.emit(value);\n }\n } catch (caughtError) {\n if (currentPendingVersion !== lastPendingVersion) {\n events.ignored.emit({ error: caughtError, version: currentPendingVersion });\n return;\n }\n\n const isChanged = typeof value !== 'undefined';\n\n error = caughtError;\n value = undefined;\n\n events.rejected.emit(caughtError);\n\n if (isChanged) {\n events.changed.emit(value);\n }\n } finally {\n if (currentPendingVersion === lastPendingVersion) {\n version = lastPendingVersion;\n isLoading = false;\n }\n }\n });\n }\n };\n\n scenario(\n async () => {\n const abortController = new AbortController();\n await Promise.race(\n states.flatMap((state) => {\n return isReadableAsyncState(state)\n ? [\n state.events.requested.abortable(abortController),\n state.events.rejected.abortable(abortController),\n state.events.fulfilled.abortable(abortController),\n ]\n : state.events.changed.abortable(abortController);\n }),\n );\n abortController.abort();\n },\n determineNextVersion,\n { tags: [SystemTag.CORE_NODE] },\n );\n\n const get = () => value;\n\n const getAsync = () => ({ error, isLoading, value });\n\n const getPromise = async (): Promise<U> => {\n const values = (await Promise.all(\n states.map((state) => (isReadableAsyncState(state) ? state.getPromise() : state.get())),\n )) as StatesValues;\n\n return predicate(...values);\n };\n\n const then: AsyncSelector<U>['then'] = async (resolve) => {\n if (!isFunction(resolve)) {\n return getPromise() as any;\n }\n\n return resolve(await getPromise());\n };\n\n const selectorNode = {\n config,\n events,\n get,\n getAsync,\n getPromise,\n getStatus,\n then,\n };\n\n queueMicrotask(determineNextVersion);\n\n registry.register(selectorNode);\n\n return selectorNode;\n};\n\nexport default asyncSelector;\n","import { SystemTag } from '../constants';\nimport { AwaiEvent } from '../core';\nimport { registry } from '../global';\nimport { getUniqueId, isFunction } from '../lib';\nimport scenario from '../scenario';\nimport type { InferReadableType, ReadableAsyncState, ReadableState } from '../types';\n\nimport type { SyncConfig, SyncSelector } from './types';\n\nconst getConfig = (customConfig: Partial<SyncConfig> = {}): SyncConfig => ({\n ...customConfig,\n id: customConfig.id ?? getUniqueId(syncSelector.name),\n tags: [SystemTag.SELECTOR, ...(customConfig.tags ?? [])],\n});\n\nconst syncSelector = <T extends (ReadableState | ReadableAsyncState)[], U>(\n states: [...T],\n predicate: (...values: { [K in keyof T]: InferReadableType<T[K]> }) => U,\n customConfig?: Partial<SyncConfig>,\n): SyncSelector<U> => {\n const config = getConfig(customConfig);\n let value: U;\n\n const events = {\n changed: new AwaiEvent<U>(),\n };\n\n const get = () => {\n const values = states.map((state) => state.get()) as {\n [K in keyof T]: InferReadableType<T[K]>;\n };\n return predicate(...values);\n };\n\n const then: SyncSelector<U>['then'] = async (resolve) => {\n if (!isFunction(resolve)) {\n return get() as any;\n }\n\n return resolve(get());\n };\n\n scenario(\n async () => {\n const abortController = new AbortController();\n await Promise.race(states.map((state) => state.events.changed.abortable(abortController)));\n abortController.abort();\n },\n () => {\n const newValue = get();\n\n if (!Object.is(newValue, value)) {\n value = newValue;\n events.changed.emit(newValue);\n }\n },\n { tags: [SystemTag.CORE_NODE] },\n );\n\n value = get();\n\n const selectorNode: SyncSelector<U> = { config, events, get, then };\n\n registry.register(selectorNode);\n\n return selectorNode;\n};\n\nexport default syncSelector;\n","import { isReadableAsyncState } from '../lib';\nimport { type InferReadableType } from '../types';\n\nimport asyncSelector from './asyncSelector';\nimport syncSelector from './syncSelector';\nimport type { Config, Selector } from './types';\n\nconst selector = <T extends any[], U>(\n states: [...T],\n predicate: (...values: { [K in keyof T]: InferReadableType<T[K]> }) => U,\n customConfig?: Partial<Config<T, U>>,\n): Selector<T, U> => {\n const isAsyncPredicate = predicate.constructor.name === 'AsyncFunction';\n\n const state =\n isAsyncPredicate || states.some((state) => isReadableAsyncState(state))\n ? asyncSelector(states, predicate, customConfig)\n : syncSelector(states, predicate, customConfig);\n\n return state as Selector<T, U>;\n};\n\nexport default selector;\n"],"names":["AsyncStatus","SystemTag","__publicField","node","getConfig","effect","state"],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -107,16 +107,19 @@ type Config$6 = BaseConfig & Record<string, any>;
|
|
|
107
107
|
type ActionInvokedEvent<Args> = {
|
|
108
108
|
arguments: Args;
|
|
109
109
|
config: Config$6;
|
|
110
|
+
invocationId: string;
|
|
110
111
|
};
|
|
111
112
|
type ActionFulfilledEvent<Args, Return> = {
|
|
112
113
|
arguments: Args;
|
|
113
114
|
config: Config$6;
|
|
114
115
|
result: Awaited<Return>;
|
|
116
|
+
invocationId: string;
|
|
115
117
|
};
|
|
116
118
|
type ActionRejectedEvent<Args> = {
|
|
117
119
|
arguments: Args;
|
|
118
120
|
config: Config$6;
|
|
119
121
|
error: unknown;
|
|
122
|
+
invocationId: string;
|
|
120
123
|
};
|
|
121
124
|
type BaseEvents<Args> = {
|
|
122
125
|
invoked: AwaiEvent<ActionInvokedEvent<Args>>;
|
|
@@ -154,7 +157,7 @@ type AsyncState<T> = ReadableAsyncState<T> & WritableAsyncState<T> & {
|
|
|
154
157
|
};
|
|
155
158
|
};
|
|
156
159
|
|
|
157
|
-
declare const asyncState: <T>(initialValue?: InitialValue<T
|
|
160
|
+
declare const asyncState: <T>(initialValue?: InitialValue<T>, customConfig?: Partial<Config$5>) => AsyncState<T>;
|
|
158
161
|
|
|
159
162
|
type CleanupCallback = () => void;
|
|
160
163
|
type Config$4 = BaseConfig & Record<string, any>;
|
|
@@ -177,7 +180,7 @@ interface Effect<T extends (ReadableState | ReadableAsyncState)[], V extends {
|
|
|
177
180
|
};
|
|
178
181
|
}
|
|
179
182
|
|
|
180
|
-
declare const effect: <T extends (
|
|
183
|
+
declare const effect: <T extends (ReadableState<any> | ReadableAsyncState<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
184
|
|
|
182
185
|
type Config$3 = BaseConfig & Record<string, any>;
|
|
183
186
|
type State<T> = ReadableState<T> & WritableState<T> & {
|
|
@@ -197,13 +200,13 @@ type FamilyState<T> = ReadableState<Record<Id, T>> & {
|
|
|
197
200
|
setNode: (id: Id, stateNode: T) => void;
|
|
198
201
|
};
|
|
199
202
|
|
|
200
|
-
declare const familyState: <T, Initializer extends (id: Id) => T | Promise<T>, Family extends Record<
|
|
203
|
+
declare const familyState: <T, Initializer extends (id: Id) => T | Promise<T>, Family extends Record<Id, 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
204
|
|
|
202
205
|
declare const delay: (ms: number) => Promise<void>;
|
|
203
206
|
|
|
204
207
|
declare const fork: (forkFn: () => Promise<any>) => Promise<void>;
|
|
205
208
|
|
|
206
|
-
declare const getAggregatedAsyncStatus: <T extends Pick<ReadableAsyncState
|
|
209
|
+
declare const getAggregatedAsyncStatus: <T extends Pick<ReadableAsyncState, "getStatus">[]>(states: T) => AsyncStatus;
|
|
207
210
|
|
|
208
211
|
declare const isPromiseLike: <T>(value: unknown) => value is PromiseLike<T>;
|
|
209
212
|
|
|
@@ -294,6 +297,7 @@ type ContainsAsync<T extends any[]> = T extends [infer First, ...infer Rest] ? F
|
|
|
294
297
|
type Selector<T extends any[], U> = U extends PromiseLike<infer P> ? AsyncSelector<P> : ContainsAsync<T> extends true ? AsyncSelector<U> : SyncSelector<U>;
|
|
295
298
|
type Config<T extends any[], U> = U extends PromiseLike<any> ? AsyncConfig : ContainsAsync<T> extends true ? AsyncConfig : SyncConfig;
|
|
296
299
|
|
|
297
|
-
declare const selector: <T extends any[], U>(states: [...T], predicate: (...values: { [K in keyof T]: InferReadableType<T[K]>; }) => U, customConfig?: Partial<Config<T, U>>
|
|
300
|
+
declare const selector: <T extends any[], U>(states: [...T], predicate: (...values: { [K in keyof T]: InferReadableType<T[K]>; }) => U, customConfig?: Partial<Config<T, U>>) => Selector<T, U>;
|
|
298
301
|
|
|
299
|
-
export {
|
|
302
|
+
export { AsyncStatus, AwaiEvent, Registry, SyncQueue, SystemTag, action, asyncState, delay, effect, familyState, flush, fork, getAggregatedAsyncStatus, isPromiseLike, isReadableAsyncState, queue, registry, rejectAfter, scenario, selector, state };
|
|
303
|
+
export type { AsyncSetter, AsyncState, AsyncValue, FamilyState, InferReadableType, ReadableAsyncState, ReadableState, Config$1 as ScenarioConfig, Setter, State, WritableAsyncState, WritableState };
|
package/dist/index.mjs
CHANGED
|
@@ -63,10 +63,7 @@ const rejectAfter = (ms) => {
|
|
|
63
63
|
|
|
64
64
|
var __defProp$2 = Object.defineProperty;
|
|
65
65
|
var __defNormalProp$2 = (obj, key, value) => key in obj ? __defProp$2(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
|
|
66
|
-
var __publicField$2 = (obj, key, value) =>
|
|
67
|
-
__defNormalProp$2(obj, typeof key !== "symbol" ? key + "" : key, value);
|
|
68
|
-
return value;
|
|
69
|
-
};
|
|
66
|
+
var __publicField$2 = (obj, key, value) => __defNormalProp$2(obj, typeof key !== "symbol" ? key + "" : key, value);
|
|
70
67
|
class SyncQueue {
|
|
71
68
|
constructor() {
|
|
72
69
|
__publicField$2(this, "callbacksQueue", []);
|
|
@@ -94,10 +91,7 @@ const queue = new SyncQueue();
|
|
|
94
91
|
|
|
95
92
|
var __defProp$1 = Object.defineProperty;
|
|
96
93
|
var __defNormalProp$1 = (obj, key, value) => key in obj ? __defProp$1(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
|
|
97
|
-
var __publicField$1 = (obj, key, value) =>
|
|
98
|
-
__defNormalProp$1(obj, typeof key !== "symbol" ? key + "" : key, value);
|
|
99
|
-
return value;
|
|
100
|
-
};
|
|
94
|
+
var __publicField$1 = (obj, key, value) => __defNormalProp$1(obj, typeof key !== "symbol" ? key + "" : key, value);
|
|
101
95
|
class AwaiEvent {
|
|
102
96
|
constructor() {
|
|
103
97
|
__publicField$1(this, "_awaiters", []);
|
|
@@ -152,10 +146,7 @@ const flush = () => new Promise((resolve) => setTimeout(resolve, 0));
|
|
|
152
146
|
|
|
153
147
|
var __defProp = Object.defineProperty;
|
|
154
148
|
var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
|
|
155
|
-
var __publicField = (obj, key, value) =>
|
|
156
|
-
__defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
|
|
157
|
-
return value;
|
|
158
|
-
};
|
|
149
|
+
var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
|
|
159
150
|
class Registry {
|
|
160
151
|
constructor() {
|
|
161
152
|
__publicField(this, "_nodes", []);
|
|
@@ -201,18 +192,20 @@ function action(...args) {
|
|
|
201
192
|
fulfilled: hasCallback ? new AwaiEvent() : void 0
|
|
202
193
|
};
|
|
203
194
|
const invoke = async (...invokeArgs) => {
|
|
204
|
-
|
|
195
|
+
const invocationId = getUniqueId("invocation");
|
|
196
|
+
events.invoked.emit({ arguments: invokeArgs, config, invocationId });
|
|
205
197
|
try {
|
|
206
198
|
const valueOrPromise = isFunction(callback) ? callback(...invokeArgs) : void 0;
|
|
207
199
|
const value = await valueOrPromise;
|
|
208
200
|
await flush();
|
|
209
|
-
events.fulfilled?.emit({ arguments: invokeArgs, config, result: value });
|
|
201
|
+
events.fulfilled?.emit({ arguments: invokeArgs, config, result: value, invocationId });
|
|
210
202
|
return value;
|
|
211
203
|
} catch (error) {
|
|
212
204
|
events.rejected?.emit({
|
|
213
205
|
arguments: invokeArgs,
|
|
214
206
|
config,
|
|
215
|
-
error
|
|
207
|
+
error,
|
|
208
|
+
invocationId
|
|
216
209
|
});
|
|
217
210
|
throw error;
|
|
218
211
|
}
|
package/dist/index.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.mjs","sources":["../src/constants/AsyncStatus.ts","../src/constants/SystemTag.ts","../src/lib/delay.ts","../src/lib/fork.ts","../src/lib/getAggregatedAsyncStatus.ts","../src/lib/getUniqueId.ts","../src/lib/isCoreNode.ts","../src/lib/isFunction.ts","../src/lib/isObject.ts","../src/lib/isPromiseLike.ts","../src/lib/isPromiseOrFunction.ts","../src/lib/isReadableAsyncState.ts","../src/lib/noop.ts","../src/lib/rejectAfter.ts","../src/lib/SyncQueue.ts","../src/global/queue.ts","../src/core/AwaiEvent.ts","../src/core/flush.ts","../src/core/Registry.ts","../src/global/registry.ts","../src/action/action.ts","../src/async-state/async-state.ts","../src/scenario/lib/getDefaultStrategy.ts","../src/scenario/lib/getTriggerPromise.ts","../src/scenario/scenario.ts","../src/effect/effect.ts","../src/state/state.ts","../src/family-state/family-state.ts","../src/selector/asyncSelector.ts","../src/selector/syncSelector.ts","../src/selector/selector.ts"],"sourcesContent":["enum AsyncStatus {\n FULFILLED = 'fulfilled',\n PENDING = 'pending',\n REJECTED = 'rejected',\n}\n\nexport default AsyncStatus;\n","enum SystemTag {\n ACTION = '@awai/action',\n ASYNC_SELECTOR = '@awai/async-selector',\n ASYNC_STATE = '@awai/async-state',\n CORE_NODE = '@awai/core-node',\n EFFECT = '@awai/effect',\n FAMILY_STATE = '@awai/family-state',\n SCENARIO = '@awai/scenario',\n SELECTOR = '@awai/selector',\n STATE = '@awai/state',\n}\n\nexport default SystemTag;\n","const delay = (ms: number): Promise<void> => new Promise((resolve) => setTimeout(resolve, ms));\n\nexport default delay;\n","const fork = async (forkFn: () => Promise<any>) => {\n await forkFn();\n};\n\nexport default fork;\n","import { AsyncStatus } from '../constants';\nimport type { ReadableAsyncState } from '../types';\n\nconst getAggregatedAsyncStatus = <T extends Pick<ReadableAsyncState, 'getStatus'>[]>(\n states: T,\n): AsyncStatus => {\n const hasError = states.some((state) => state.getStatus() === AsyncStatus.REJECTED);\n\n if (hasError) {\n return AsyncStatus.REJECTED;\n }\n\n const isPending = states.some((state) => state.getStatus() === AsyncStatus.PENDING);\n\n if (isPending) {\n return AsyncStatus.PENDING;\n }\n\n return AsyncStatus.FULFILLED;\n};\n\nexport default getAggregatedAsyncStatus;\n","const lastScopesIds: Record<string, number> = {};\n\nconst getUniqueId = (scope = 'unknown') => {\n const nextId = (lastScopesIds[scope] ?? 0) + 1;\n lastScopesIds[scope] = nextId;\n return `awai\\$${scope}\\$${nextId}`;\n};\n\nexport default getUniqueId;\n","import { SystemTag } from '../constants';\nimport type { BaseNode } from '../types';\n\nconst isCoreNode = (node: BaseNode): boolean => node.config.tags.includes(SystemTag.CORE_NODE);\n\nexport default isCoreNode;\n","const isFunction = (value: unknown): value is Function => typeof value === 'function';\n\nexport default isFunction;\n","const isObject = (value: unknown): value is Record<string, unknown> =>\n typeof value === 'object' && value !== null;\n\nexport default isObject;\n","import isFunction from './isFunction';\nimport isObject from './isObject';\n\nconst isPromiseLike = <T>(value: unknown): value is PromiseLike<T> =>\n isObject(value) && (value instanceof Promise || isFunction(value.then));\n\nexport default isPromiseLike;\n","import isFunction from './isFunction';\nimport isPromiseLike from './isPromiseLike';\n\nconst isPromiseOrFunction = <T>(\n value: unknown,\n): value is Promise<T> | ((...args: any) => Promise<T>) =>\n isFunction(value) || isPromiseLike<T>(value);\n\nexport default isPromiseOrFunction;\n","import type { ReadableAsyncState } from '../types';\n\nimport isFunction from './isFunction';\nimport isObject from './isObject';\n\nconst isReadableAsyncState = <T>(value: unknown): value is ReadableAsyncState<T> =>\n isObject(value) &&\n isFunction(value.get) &&\n isFunction(value.getAsync) &&\n isFunction(value.getPromise) &&\n isFunction(value.then);\n\nexport default isReadableAsyncState;\n","const noop = () => undefined;\n\nexport default noop;\n","const rejectAfter = (ms: number): Promise<void> => {\n return new Promise((_, reject) => setTimeout(reject, ms));\n};\n\nexport default rejectAfter;\n","/**\n * @description\n * This helper is needed to emit events synchronously, so that scenarios/effects/selectors\n * can resubscribe to an event before another emission.\n *\n * @example\n * const state = state(0);\n *\n * scenario(state.events.change, () => {\n * // Without `SyncQueue` this scenario would only run once\n * });\n *\n * state.set(1);\n * state.set(2);\n */\n\nexport default class SyncQueue {\n private callbacksQueue: Function[] = [];\n private isDequeuing = false;\n\n public enqueue(callback: Function) {\n this.callbacksQueue.push(callback);\n this.dequeue();\n }\n\n private dequeue = async () => {\n if (this.isDequeuing || this.callbacksQueue.length === 0) {\n return;\n }\n\n this.isDequeuing = true;\n const callback = this.callbacksQueue.shift()!;\n callback();\n\n queueMicrotask(() => {\n this.isDequeuing = false;\n this.dequeue();\n });\n };\n}\n","import { SyncQueue } from '../lib';\n\nconst queue = new SyncQueue();\n\nexport default queue;\n","import queue from '../global/queue';\nimport { isFunction } from '../lib';\n\ntype Resolver<T> = (value: T) => any;\ntype FilterPredicate<T> = (value: T) => boolean;\n\nexport default class AwaiEvent<T = void> {\n private _awaiters: Resolver<T>[] = [];\n\n then: PromiseLike<T>['then'] = (onfulfilled) => {\n return new Promise<any>((resolve, reject) => {\n this._awaiters.push((value: T) => {\n try {\n const result = isFunction(onfulfilled) ? onfulfilled(value) : value;\n resolve(result);\n } catch (error) {\n reject(error);\n }\n });\n });\n };\n\n abortable(abortController: AbortController): Promise<T> {\n return new Promise<T>((resolve, reject) => {\n this._awaiters.push(resolve);\n\n const abortionHandler = () => {\n this._awaiters = this._awaiters.filter((awaiter) => awaiter !== resolve);\n reject('Aborted');\n\n abortController.signal.removeEventListener('abort', abortionHandler);\n };\n\n abortController.signal.addEventListener('abort', abortionHandler);\n });\n }\n\n emit(value: T) {\n queue.enqueue(async () => {\n const awaiters = this._awaiters;\n this._awaiters = [];\n\n for (const resolve of awaiters) {\n resolve(value);\n }\n });\n }\n\n async filter(predicate: FilterPredicate<T>) {\n return new Promise(async (resolve) => {\n while (true) {\n const newValue = await this;\n const isApplicable = Boolean(predicate(newValue));\n\n if (isApplicable) {\n resolve(newValue);\n return;\n }\n }\n });\n }\n}\n","const flush = () => new Promise<void>((resolve) => setTimeout(resolve, 0));\n\nexport default flush;\n","import { isCoreNode } from '../lib';\nimport type BaseNode from '../types/BaseNode';\n\nimport AwaiEvent from './AwaiEvent';\n\nexport default class Registry<T extends BaseNode> {\n private _nodes: T[] = [];\n public readonly events = {\n deregistered: new AwaiEvent<T['config']['id']>(),\n registered: new AwaiEvent<T>(),\n };\n\n public async register(node: T) {\n if (isCoreNode(node)) {\n return;\n }\n\n this._nodes.push(node);\n this.events.registered.emit(node);\n }\n\n public async deregister(id: BaseNode['config']['id']) {\n const node = this._nodes.find((node) => node.config.id === id);\n\n if (!node) {\n return;\n }\n\n this._nodes = this._nodes.filter((node) => node.config.id !== id);\n this.events.deregistered.emit(id);\n }\n\n get nodes() {\n return [...this._nodes];\n }\n}\n","import { Registry } from '../core';\n\nconst registry = new Registry();\n\nexport default registry;\n","import { SystemTag } from '../constants';\nimport { AwaiEvent, flush } from '../core';\nimport { registry } from '../global';\nimport { getUniqueId, isFunction } from '../lib';\n\nimport type { CallbackAction, Config, EmptyAction } from './types';\n\nconst getConfig = (customConfig: Partial<Config> = {}): Config => ({\n ...customConfig,\n id: customConfig.id ?? getUniqueId(action.name),\n tags: [SystemTag.ACTION, ...(customConfig.tags ?? [])],\n});\n\nfunction action<Args extends any[] = []>(): EmptyAction<Args>;\nfunction action<Args extends any[] = []>(config?: Partial<Config>): EmptyAction<Args>;\nfunction action<Args extends any[], Return = void>(\n callback: (...args: Args) => Return,\n config?: Partial<Config>,\n): CallbackAction<Args, Return>;\n\nfunction action<Args extends any[], Return = void>(\n ...args: [Partial<Config>?] | [(...args: Args) => Return, Partial<Config>?]\n): EmptyAction<Args> | CallbackAction<Args, Return> {\n type Action = EmptyAction<Args> | CallbackAction<Args, Return>;\n\n const hasCallback = isFunction(args[0]);\n const [callback, customConfig] = hasCallback\n ? (args as [(...args: Args) => Return, Partial<Config>?])\n : ([, ...args] as [undefined, Partial<Config>?]);\n\n const config = getConfig(customConfig);\n\n const events = {\n invoked: new AwaiEvent(),\n rejected: hasCallback ? new AwaiEvent() : undefined,\n fulfilled: hasCallback ? new AwaiEvent() : undefined,\n } satisfies Action['events'];\n\n const invoke = async (...invokeArgs: Args) => {\n 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'] = (nextValueOrResolver) => {\n let newValue = isFunction(nextValueOrResolver)\n ? nextValueOrResolver(value)\n : nextValueOrResolver;\n\n if (!Object.is(newValue, value)) {\n value = newValue;\n events.changed.emit(newValue);\n }\n\n return flush().then(() => newValue);\n };\n\n const get = () => value;\n\n const then: State<T>['then'] = async (resolve) => {\n if (!isFunction(resolve)) {\n return value as any;\n }\n\n return resolve(value);\n };\n\n const stateNode: State<T> = { config, events, get, set, then };\n\n registry.register(stateNode);\n\n return stateNode;\n};\n\nexport default state;\n","import asyncState, { type AsyncState } from '../async-state';\nimport { SystemTag } from '../constants';\nimport { AwaiEvent, flush } from '../core';\nimport { registry } from '../global';\nimport { getUniqueId, isFunction } from '../lib';\nimport scenario from '../scenario';\nimport state, { type State } from '../state';\nimport type { Id } from '../types';\n\nimport type { Config, FamilyState } from './types';\n\nconst getConfig = (customConfig: Partial<Config> = {}): Config => ({\n ...customConfig,\n id: customConfig.id ?? getUniqueId(familyState.name),\n tags: [SystemTag.FAMILY_STATE, ...(customConfig.tags ?? [])],\n});\n\nconst familyState = <\n T,\n Initializer extends (id: Id) => T | Promise<T>,\n Family extends Record<Id, NodeType>,\n NodeType extends State<any> | AsyncState<any> = ReturnType<Initializer> extends PromiseLike<\n infer Q\n >\n ? AsyncState<Q>\n : State<ReturnType<Initializer>>,\n>(\n initializer: Initializer,\n customConfig?: Partial<Config>,\n): FamilyState<NodeType> => {\n const config = getConfig(customConfig);\n\n let family: Family = {} as Family;\n\n const events = {\n changed: new AwaiEvent<Record<Id, NodeType>>(),\n stateCreated: new AwaiEvent<Id>(),\n };\n\n const getNode = (id: Id): NodeType => {\n if (id in family) {\n return family[id];\n }\n\n const initialValue = initializer(id);\n\n const stateNode =\n initialValue instanceof Promise\n ? asyncState(initialValue, { tags: [SystemTag.CORE_NODE] })\n : state(initialValue, { tags: [SystemTag.CORE_NODE] });\n\n family = { ...family, [id]: stateNode };\n events.stateCreated.emit(id);\n events.changed.emit(family);\n\n scenario(\n stateNode.events.changed,\n () => {\n events.changed.emit(family);\n },\n { tags: [SystemTag.CORE_NODE] },\n );\n\n return stateNode as NodeType;\n };\n\n const setNode = async (id: Id, stateNode: NodeType) => {\n if (id in family) {\n throw new Error(`Cannot set node. Node with id \"${id}\" already exists.`);\n }\n\n family = { ...family, [id]: stateNode };\n\n scenario(\n stateNode.events.changed,\n () => {\n events.changed.emit(family);\n },\n { tags: [SystemTag.CORE_NODE] },\n );\n\n events.changed.emit(family);\n\n await flush();\n };\n\n const get = () => {\n return family;\n };\n\n const then: FamilyState<NodeType>['then'] = async (resolve) => {\n if (!isFunction(resolve)) {\n return family as any;\n }\n\n return resolve(family);\n };\n\n const familyStateNode: FamilyState<NodeType> = { config, events, get, getNode, setNode, then };\n\n registry.register(familyStateNode);\n\n return familyStateNode;\n};\n\nexport default familyState;\n","import { AsyncStatus, SystemTag } from '../constants';\nimport { AwaiEvent } from '../core';\nimport { registry } from '../global';\nimport {\n fork,\n getAggregatedAsyncStatus,\n getUniqueId,\n isFunction,\n isReadableAsyncState,\n} from '../lib';\nimport scenario from '../scenario';\nimport type { InferReadableType, ReadableAsyncState, ReadableState } from '../types';\n\nimport type { AsyncConfig, AsyncSelector, VersionIgnoredEvent } from './types';\n\nconst getConfig = (customConfig: Partial<AsyncConfig> = {}): AsyncConfig => ({\n ...customConfig,\n id: customConfig.id ?? getUniqueId(asyncSelector.name),\n tags: [SystemTag.ASYNC_SELECTOR, ...(customConfig.tags ?? [])],\n});\n\nconst asyncSelector = <T extends (ReadableState | ReadableAsyncState)[], U>(\n states: T,\n predicate: (...values: { [K in keyof T]: InferReadableType<T[K]> }) => U,\n customConfig?: Partial<AsyncConfig>,\n): AsyncSelector<U> => {\n type StatesValues = { [K in keyof T]: InferReadableType<T[K]> };\n\n const config = getConfig(customConfig);\n const asyncStates = states.filter(isReadableAsyncState);\n\n let error: AggregateError | unknown | null = null;\n let value: U | undefined;\n let isLoading: boolean = true;\n let version = 0;\n let lastPendingVersion: number = version;\n\n const events: AsyncSelector<U>['events'] = {\n changed: new AwaiEvent<U | undefined>(),\n fulfilled: new AwaiEvent<U>(),\n ignored: new AwaiEvent<VersionIgnoredEvent<U>>(),\n rejected: new AwaiEvent<unknown>(),\n requested: new AwaiEvent<void>(),\n };\n\n const getStatus = () => {\n const aggregatedStatus = getAggregatedAsyncStatus(asyncStates);\n\n return error !== null && aggregatedStatus === AsyncStatus.FULFILLED\n ? AsyncStatus.REJECTED\n : aggregatedStatus;\n };\n\n const determineNextVersion = async () => {\n const currentPendingVersion = (lastPendingVersion + 1) % Number.MAX_SAFE_INTEGER;\n lastPendingVersion = currentPendingVersion;\n\n const status = getAggregatedAsyncStatus(asyncStates);\n const errors = asyncStates.map((state) => state.getAsync().error).filter(Boolean);\n\n if (status === AsyncStatus.PENDING) {\n isLoading = true;\n }\n\n events.requested.emit();\n\n if (errors.length > 0) {\n error = new AggregateError(errors);\n value = undefined;\n isLoading = status === AsyncStatus.PENDING;\n version = lastPendingVersion;\n events.rejected.emit(error);\n events.changed.emit(value);\n return;\n }\n\n if (status === AsyncStatus.FULFILLED) {\n const values = states.map((state) => state.get()) as StatesValues;\n\n fork(async () => {\n isLoading = true;\n\n try {\n const newValue = await predicate(...values);\n const isChanged = !Object.is(newValue, value);\n\n if (currentPendingVersion !== lastPendingVersion) {\n events.ignored.emit({ value: newValue, version: currentPendingVersion });\n return;\n }\n\n error = null;\n value = newValue;\n\n events.fulfilled.emit(newValue);\n\n if (isChanged) {\n events.changed.emit(value);\n }\n } catch (caughtError) {\n if (currentPendingVersion !== lastPendingVersion) {\n events.ignored.emit({ error: caughtError, version: currentPendingVersion });\n return;\n }\n\n const isChanged = typeof value !== 'undefined';\n\n error = caughtError;\n value = undefined;\n\n events.rejected.emit(caughtError);\n\n if (isChanged) {\n events.changed.emit(value);\n }\n } finally {\n if (currentPendingVersion === lastPendingVersion) {\n version = lastPendingVersion;\n isLoading = false;\n }\n }\n });\n }\n };\n\n scenario(\n async () => {\n const abortController = new AbortController();\n await Promise.race(\n states.flatMap((state) => {\n return isReadableAsyncState(state)\n ? [\n state.events.requested.abortable(abortController),\n state.events.rejected.abortable(abortController),\n state.events.fulfilled.abortable(abortController),\n ]\n : state.events.changed.abortable(abortController);\n }),\n );\n abortController.abort();\n },\n determineNextVersion,\n { tags: [SystemTag.CORE_NODE] },\n );\n\n const get = () => value;\n\n const getAsync = () => ({ error, isLoading, value });\n\n const getPromise = async (): Promise<U> => {\n const values = (await Promise.all(\n states.map((state) => (isReadableAsyncState(state) ? state.getPromise() : state.get())),\n )) as StatesValues;\n\n return predicate(...values);\n };\n\n const then: AsyncSelector<U>['then'] = async (resolve) => {\n if (!isFunction(resolve)) {\n return getPromise() as any;\n }\n\n return resolve(await getPromise());\n };\n\n const selectorNode = {\n config,\n events,\n get,\n getAsync,\n getPromise,\n getStatus,\n then,\n };\n\n queueMicrotask(determineNextVersion);\n\n registry.register(selectorNode);\n\n return selectorNode;\n};\n\nexport default asyncSelector;\n","import { SystemTag } from '../constants';\nimport { AwaiEvent } from '../core';\nimport { registry } from '../global';\nimport { getUniqueId, isFunction } from '../lib';\nimport scenario from '../scenario';\nimport type { InferReadableType, ReadableAsyncState, ReadableState } from '../types';\n\nimport type { SyncConfig, SyncSelector } from './types';\n\nconst getConfig = (customConfig: Partial<SyncConfig> = {}): SyncConfig => ({\n ...customConfig,\n id: customConfig.id ?? getUniqueId(syncSelector.name),\n tags: [SystemTag.SELECTOR, ...(customConfig.tags ?? [])],\n});\n\nconst syncSelector = <T extends (ReadableState | ReadableAsyncState)[], U>(\n states: [...T],\n predicate: (...values: { [K in keyof T]: InferReadableType<T[K]> }) => U,\n customConfig?: Partial<SyncConfig>,\n): SyncSelector<U> => {\n const config = getConfig(customConfig);\n let value: U;\n\n const events = {\n changed: new AwaiEvent<U>(),\n };\n\n const get = () => {\n const values = states.map((state) => state.get()) as {\n [K in keyof T]: InferReadableType<T[K]>;\n };\n return predicate(...values);\n };\n\n const then: SyncSelector<U>['then'] = async (resolve) => {\n if (!isFunction(resolve)) {\n return get() as any;\n }\n\n return resolve(get());\n };\n\n scenario(\n async () => {\n const abortController = new AbortController();\n await Promise.race(states.map((state) => state.events.changed.abortable(abortController)));\n abortController.abort();\n },\n () => {\n const newValue = get();\n\n if (!Object.is(newValue, value)) {\n value = newValue;\n events.changed.emit(newValue);\n }\n },\n { tags: [SystemTag.CORE_NODE] },\n );\n\n value = get();\n\n const selectorNode: SyncSelector<U> = { config, events, get, then };\n\n registry.register(selectorNode);\n\n return selectorNode;\n};\n\nexport default syncSelector;\n","import { isReadableAsyncState } from '../lib';\nimport { type InferReadableType } from '../types';\n\nimport asyncSelector from './asyncSelector';\nimport syncSelector from './syncSelector';\nimport type { Config, Selector } from './types';\n\nconst selector = <T extends any[], U>(\n states: [...T],\n predicate: (...values: { [K in keyof T]: InferReadableType<T[K]> }) => U,\n customConfig?: Partial<Config<T, U>>,\n): Selector<T, U> => {\n const isAsyncPredicate = predicate.constructor.name === 'AsyncFunction';\n\n const state =\n isAsyncPredicate || states.some((state) => isReadableAsyncState(state))\n ? asyncSelector(states, predicate, customConfig)\n : syncSelector(states, predicate, customConfig);\n\n return state as Selector<T, U>;\n};\n\nexport default selector;\n"],"names":["AsyncStatus","SystemTag","__publicField","node","getConfig","effect","state"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.mjs","sources":["../src/constants/AsyncStatus.ts","../src/constants/SystemTag.ts","../src/lib/delay.ts","../src/lib/fork.ts","../src/lib/getAggregatedAsyncStatus.ts","../src/lib/getUniqueId.ts","../src/lib/isCoreNode.ts","../src/lib/isFunction.ts","../src/lib/isObject.ts","../src/lib/isPromiseLike.ts","../src/lib/isPromiseOrFunction.ts","../src/lib/isReadableAsyncState.ts","../src/lib/noop.ts","../src/lib/rejectAfter.ts","../src/lib/SyncQueue.ts","../src/global/queue.ts","../src/core/AwaiEvent.ts","../src/core/flush.ts","../src/core/Registry.ts","../src/global/registry.ts","../src/action/action.ts","../src/async-state/async-state.ts","../src/scenario/lib/getDefaultStrategy.ts","../src/scenario/lib/getTriggerPromise.ts","../src/scenario/scenario.ts","../src/effect/effect.ts","../src/state/state.ts","../src/family-state/family-state.ts","../src/selector/asyncSelector.ts","../src/selector/syncSelector.ts","../src/selector/selector.ts"],"sourcesContent":["enum AsyncStatus {\n FULFILLED = 'fulfilled',\n PENDING = 'pending',\n REJECTED = 'rejected',\n}\n\nexport default AsyncStatus;\n","enum SystemTag {\n ACTION = '@awai/action',\n ASYNC_SELECTOR = '@awai/async-selector',\n ASYNC_STATE = '@awai/async-state',\n CORE_NODE = '@awai/core-node',\n EFFECT = '@awai/effect',\n FAMILY_STATE = '@awai/family-state',\n SCENARIO = '@awai/scenario',\n SELECTOR = '@awai/selector',\n STATE = '@awai/state',\n}\n\nexport default SystemTag;\n","const delay = (ms: number): Promise<void> => new Promise((resolve) => setTimeout(resolve, ms));\n\nexport default delay;\n","const fork = async (forkFn: () => Promise<any>) => {\n await forkFn();\n};\n\nexport default fork;\n","import { AsyncStatus } from '../constants';\nimport type { ReadableAsyncState } from '../types';\n\nconst getAggregatedAsyncStatus = <T extends Pick<ReadableAsyncState, 'getStatus'>[]>(\n states: T,\n): AsyncStatus => {\n const hasError = states.some((state) => state.getStatus() === AsyncStatus.REJECTED);\n\n if (hasError) {\n return AsyncStatus.REJECTED;\n }\n\n const isPending = states.some((state) => state.getStatus() === AsyncStatus.PENDING);\n\n if (isPending) {\n return AsyncStatus.PENDING;\n }\n\n return AsyncStatus.FULFILLED;\n};\n\nexport default getAggregatedAsyncStatus;\n","const lastScopesIds: Record<string, number> = {};\n\nconst getUniqueId = (scope = 'unknown') => {\n const nextId = (lastScopesIds[scope] ?? 0) + 1;\n lastScopesIds[scope] = nextId;\n return `awai\\$${scope}\\$${nextId}`;\n};\n\nexport default getUniqueId;\n","import { SystemTag } from '../constants';\nimport type { BaseNode } from '../types';\n\nconst isCoreNode = (node: BaseNode): boolean => node.config.tags.includes(SystemTag.CORE_NODE);\n\nexport default isCoreNode;\n","const isFunction = (value: unknown): value is Function => typeof value === 'function';\n\nexport default isFunction;\n","const isObject = (value: unknown): value is Record<string, unknown> =>\n typeof value === 'object' && value !== null;\n\nexport default isObject;\n","import isFunction from './isFunction';\nimport isObject from './isObject';\n\nconst isPromiseLike = <T>(value: unknown): value is PromiseLike<T> =>\n isObject(value) && (value instanceof Promise || isFunction(value.then));\n\nexport default isPromiseLike;\n","import isFunction from './isFunction';\nimport isPromiseLike from './isPromiseLike';\n\nconst isPromiseOrFunction = <T>(\n value: unknown,\n): value is Promise<T> | ((...args: any) => Promise<T>) =>\n isFunction(value) || isPromiseLike<T>(value);\n\nexport default isPromiseOrFunction;\n","import type { ReadableAsyncState } from '../types';\n\nimport isFunction from './isFunction';\nimport isObject from './isObject';\n\nconst isReadableAsyncState = <T>(value: unknown): value is ReadableAsyncState<T> =>\n isObject(value) &&\n isFunction(value.get) &&\n isFunction(value.getAsync) &&\n isFunction(value.getPromise) &&\n isFunction(value.then);\n\nexport default isReadableAsyncState;\n","const noop = () => undefined;\n\nexport default noop;\n","const rejectAfter = (ms: number): Promise<void> => {\n return new Promise((_, reject) => setTimeout(reject, ms));\n};\n\nexport default rejectAfter;\n","/**\n * @description\n * This helper is needed to emit events synchronously, so that scenarios/effects/selectors\n * can resubscribe to an event before another emission.\n *\n * @example\n * const state = state(0);\n *\n * scenario(state.events.change, () => {\n * // Without `SyncQueue` this scenario would only run once\n * });\n *\n * state.set(1);\n * state.set(2);\n */\n\nexport default class SyncQueue {\n private callbacksQueue: Function[] = [];\n private isDequeuing = false;\n\n public enqueue(callback: Function) {\n this.callbacksQueue.push(callback);\n this.dequeue();\n }\n\n private dequeue = async () => {\n if (this.isDequeuing || this.callbacksQueue.length === 0) {\n return;\n }\n\n this.isDequeuing = true;\n const callback = this.callbacksQueue.shift()!;\n callback();\n\n queueMicrotask(() => {\n this.isDequeuing = false;\n this.dequeue();\n });\n };\n}\n","import { SyncQueue } from '../lib';\n\nconst queue = new SyncQueue();\n\nexport default queue;\n","import queue from '../global/queue';\nimport { isFunction } from '../lib';\n\ntype Resolver<T> = (value: T) => any;\ntype FilterPredicate<T> = (value: T) => boolean;\n\nexport default class AwaiEvent<T = void> {\n private _awaiters: Resolver<T>[] = [];\n\n then: PromiseLike<T>['then'] = (onfulfilled) => {\n return new Promise<any>((resolve, reject) => {\n this._awaiters.push((value: T) => {\n try {\n const result = isFunction(onfulfilled) ? onfulfilled(value) : value;\n resolve(result);\n } catch (error) {\n reject(error);\n }\n });\n });\n };\n\n abortable(abortController: AbortController): Promise<T> {\n return new Promise<T>((resolve, reject) => {\n this._awaiters.push(resolve);\n\n const abortionHandler = () => {\n this._awaiters = this._awaiters.filter((awaiter) => awaiter !== resolve);\n reject('Aborted');\n\n abortController.signal.removeEventListener('abort', abortionHandler);\n };\n\n abortController.signal.addEventListener('abort', abortionHandler);\n });\n }\n\n emit(value: T) {\n queue.enqueue(async () => {\n const awaiters = this._awaiters;\n this._awaiters = [];\n\n for (const resolve of awaiters) {\n resolve(value);\n }\n });\n }\n\n async filter(predicate: FilterPredicate<T>) {\n return new Promise(async (resolve) => {\n while (true) {\n const newValue = await this;\n const isApplicable = Boolean(predicate(newValue));\n\n if (isApplicable) {\n resolve(newValue);\n return;\n }\n }\n });\n }\n}\n","const flush = () => new Promise<void>((resolve) => setTimeout(resolve, 0));\n\nexport default flush;\n","import { isCoreNode } from '../lib';\nimport type BaseNode from '../types/BaseNode';\n\nimport AwaiEvent from './AwaiEvent';\n\nexport default class Registry<T extends BaseNode> {\n private _nodes: T[] = [];\n public readonly events = {\n deregistered: new AwaiEvent<T['config']['id']>(),\n registered: new AwaiEvent<T>(),\n };\n\n public async register(node: T) {\n if (isCoreNode(node)) {\n return;\n }\n\n this._nodes.push(node);\n this.events.registered.emit(node);\n }\n\n public async deregister(id: BaseNode['config']['id']) {\n const node = this._nodes.find((node) => node.config.id === id);\n\n if (!node) {\n return;\n }\n\n this._nodes = this._nodes.filter((node) => node.config.id !== id);\n this.events.deregistered.emit(id);\n }\n\n get nodes() {\n return [...this._nodes];\n }\n}\n","import { Registry } from '../core';\n\nconst registry = new Registry();\n\nexport default registry;\n","import { SystemTag } from '../constants';\nimport { AwaiEvent, flush } from '../core';\nimport { registry } from '../global';\nimport { getUniqueId, isFunction } from '../lib';\n\nimport type { CallbackAction, Config, EmptyAction } from './types';\n\nconst getConfig = (customConfig: Partial<Config> = {}): Config => ({\n ...customConfig,\n id: customConfig.id ?? getUniqueId(action.name),\n tags: [SystemTag.ACTION, ...(customConfig.tags ?? [])],\n});\n\nfunction action<Args extends any[] = []>(): EmptyAction<Args>;\nfunction action<Args extends any[] = []>(config?: Partial<Config>): EmptyAction<Args>;\nfunction action<Args extends any[], Return = void>(\n callback: (...args: Args) => Return,\n config?: Partial<Config>,\n): CallbackAction<Args, Return>;\n\nfunction action<Args extends any[], Return = void>(\n ...args: [Partial<Config>?] | [(...args: Args) => Return, Partial<Config>?]\n): EmptyAction<Args> | CallbackAction<Args, Return> {\n type Action = EmptyAction<Args> | CallbackAction<Args, Return>;\n\n const hasCallback = isFunction(args[0]);\n const [callback, customConfig] = hasCallback\n ? (args as [(...args: Args) => Return, Partial<Config>?])\n : ([, ...args] as [undefined, Partial<Config>?]);\n\n const config = getConfig(customConfig);\n\n const events = {\n invoked: new AwaiEvent(),\n rejected: hasCallback ? new AwaiEvent() : undefined,\n fulfilled: hasCallback ? new AwaiEvent() : undefined,\n } satisfies Action['events'];\n\n const invoke = async (...invokeArgs: Args) => {\n const invocationId = getUniqueId('invocation');\n\n events.invoked.emit({ arguments: invokeArgs, config, invocationId });\n\n try {\n const valueOrPromise: Return | Promise<Return> = isFunction(callback)\n ? callback(...invokeArgs)\n : (undefined as Return);\n\n const value = await valueOrPromise;\n await flush();\n events.fulfilled?.emit({ arguments: invokeArgs, config, result: value, invocationId });\n return value;\n } catch (error) {\n events.rejected?.emit({\n arguments: invokeArgs,\n config,\n error,\n invocationId,\n });\n throw error;\n }\n };\n\n const actionNode = Object.assign(invoke, { config, events }) as Action;\n\n registry.register(actionNode);\n\n return actionNode;\n}\n\nexport default action;\n","import { AsyncStatus, SystemTag } from '../constants';\nimport { AwaiEvent, flush } from '../core';\nimport { registry } from '../global';\nimport { getUniqueId, isFunction, isPromiseOrFunction, noop } from '../lib';\n\nimport type { VersionIgnoredEvent, AsyncState, Config, InitialValue, Version } from './types';\n\nconst getConfig = (customConfig: Partial<Config> = {}): Config => ({\n ...customConfig,\n id: customConfig.id ?? getUniqueId(asyncState.name),\n tags: [SystemTag.ASYNC_STATE, ...(customConfig.tags ?? [])],\n});\n\nconst asyncState = <T>(\n initialValue?: InitialValue<T>,\n customConfig?: Partial<Config>,\n): AsyncState<T> => {\n const config = getConfig(customConfig);\n const isInitialValueAsync = isPromiseOrFunction(initialValue);\n let version: Version = isInitialValueAsync ? 0 : 1;\n let lastPendingVersion: Version = version;\n let status: AsyncStatus = AsyncStatus.FULFILLED;\n let error: unknown = null;\n let value: T | undefined = isInitialValueAsync ? undefined : initialValue;\n\n const events: AsyncState<T>['events'] = {\n changed: new AwaiEvent<T | undefined>(),\n fulfilled: new AwaiEvent<T>(),\n ignored: new AwaiEvent<VersionIgnoredEvent<T>>(),\n rejected: new AwaiEvent<unknown>(),\n requested: new AwaiEvent<void>(),\n };\n\n const getStatus: AsyncState<T>['getStatus'] = () => status;\n\n const set: AsyncState<T>['set'] = async (nextValueOrResolver) => {\n const currentPendingVersion: Version = (lastPendingVersion + 1) % Number.MAX_SAFE_INTEGER;\n lastPendingVersion = currentPendingVersion;\n\n try {\n if (isPromiseOrFunction(nextValueOrResolver)) {\n status = AsyncStatus.PENDING;\n events.requested.emit();\n }\n\n let newValue = isFunction(nextValueOrResolver)\n ? await nextValueOrResolver(value)\n : await nextValueOrResolver;\n const isChanged = !Object.is(newValue, value);\n\n if (currentPendingVersion !== lastPendingVersion || !isChanged) {\n events.ignored.emit({ value: newValue, version: currentPendingVersion });\n return;\n }\n\n error = null;\n value = newValue;\n status = AsyncStatus.FULFILLED;\n\n events.fulfilled.emit(newValue);\n\n if (isChanged) {\n events.changed.emit(value);\n }\n } catch (e) {\n if (currentPendingVersion !== lastPendingVersion) {\n events.ignored.emit({ error: e, version: currentPendingVersion });\n return;\n }\n\n const isChanged = !Object.is(e, error);\n\n error = e;\n value = undefined;\n status = AsyncStatus.REJECTED;\n\n events.rejected.emit(error);\n\n if (isChanged) {\n events.changed.emit(value);\n }\n }\n\n version = lastPendingVersion;\n await flush();\n };\n\n const get: AsyncState<T>['get'] = () => value;\n\n const getAsync: AsyncState<T>['getAsync'] = () => ({\n error,\n isLoading: status === AsyncStatus.PENDING,\n value,\n });\n\n const getPromise: AsyncState<T>['getPromise'] = async () => {\n if (version === lastPendingVersion) {\n return value!;\n }\n\n const abortController = new AbortController();\n\n try {\n return await new Promise((resolve, reject) => {\n events.fulfilled.abortable(abortController).then(resolve).catch(noop);\n events.rejected.abortable(abortController).then(reject).catch(noop);\n });\n } finally {\n abortController.abort();\n }\n };\n\n const then: PromiseLike<T>['then'] = async (resolve) => {\n if (!isFunction(resolve)) {\n return getPromise() as any;\n }\n\n return resolve(await getPromise());\n };\n\n if (isInitialValueAsync) {\n set(initialValue);\n }\n\n const asyncStateNode: AsyncState<T> = {\n config,\n events,\n get,\n getAsync,\n getPromise,\n getStatus,\n set,\n then,\n };\n\n registry.register(asyncStateNode);\n\n return asyncStateNode;\n};\n\nexport default asyncState;\n","import type { Config } from '../types';\n\nconst getDefaultStrategy = (\n isPlainPromiseTrigger: boolean,\n hasTrigger: boolean,\n): Config['strategy'] => {\n if (isPlainPromiseTrigger) {\n return 'once';\n }\n\n if (hasTrigger) {\n return 'fork';\n }\n\n return 'cyclic';\n};\n\nexport default getDefaultStrategy;\n","import { isFunction } from '../../lib';\nimport type { Trigger } from '../types';\n\nconst getTriggerPromise = <T>(trigger: Trigger<T> | undefined) => {\n if (!trigger) {\n return Promise.resolve(undefined as T);\n }\n\n return isFunction(trigger) ? trigger() : trigger;\n};\n\nexport default getTriggerPromise;\n","import { SystemTag } from '../constants';\nimport { AwaiEvent, flush } from '../core';\nimport { registry } from '../global';\nimport { getUniqueId, isFunction, isObject, isPromiseLike } from '../lib';\n\nimport { getDefaultStrategy, getTriggerPromise } from './lib';\nimport type { Callback, Config, ExpirationTrigger, SettledEvent, Scenario, Trigger } from './types';\n\nconst getConfig = (\n isPlainPromiseTrigger: boolean,\n hasTrigger: boolean,\n customConfig: Partial<Config> = {},\n): Config => ({\n ...customConfig,\n id: customConfig.id ?? getUniqueId(scenario.name),\n strategy: customConfig.strategy ?? getDefaultStrategy(isPlainPromiseTrigger, hasTrigger),\n tags: [SystemTag.SCENARIO, ...(customConfig.tags ?? [])],\n});\n\nfunction scenario<T, R, E>(\n trigger: Trigger<T>,\n callback: Callback<T, R>,\n customConfig?: Partial<Config>,\n): Scenario<T, R, E>;\n\nfunction scenario<T, R, E>(\n trigger: Trigger<T>,\n expirationTrigger: ExpirationTrigger<E>,\n callback: Callback<T, R>,\n customConfig?: Partial<Config>,\n): Scenario<T, R, E>;\n\nfunction scenario<T, R, E = unknown>(\n callback: Callback,\n config?: Partial<Config>,\n): Scenario<T, R, E>;\n\nfunction scenario<T, R, E>(\n ...args:\n | [Trigger<T>, Callback<T, R>, Partial<Config>?]\n | [Trigger<T>, ExpirationTrigger<E>, Callback<T, R>, Partial<Config>?]\n | [Callback, Partial<Config>?]\n) {\n const hasTrigger = isFunction(args[1]) || isFunction(args[2]);\n const hasExpirationTrigger = isFunction(args[2]);\n\n const trigger = hasTrigger ? (args[0] as Trigger<T>) : undefined;\n const expirationTrigger = hasExpirationTrigger ? (args[1] as ExpirationTrigger<E>) : undefined;\n const callback = args.findLast(isFunction) as Callback<T, R>;\n const customConfig = args.at(args.indexOf(callback) + 1) as Partial<Config> | undefined;\n const isPlainPromiseTrigger = hasTrigger && isObject(args[0]) && args[0].constructor === Promise;\n const isFiniteScenario =\n isPlainPromiseTrigger || hasExpirationTrigger || typeof customConfig?.repeat !== 'undefined';\n\n const config = getConfig(isPlainPromiseTrigger, hasTrigger, customConfig);\n const { strategy } = config;\n let { repeat = Infinity } = config;\n let runningCallbacksCount = 0;\n let shouldExpire = false;\n let expired = false;\n\n const events: Scenario<T, R, E>['events'] = {\n fulfilled: new AwaiEvent(),\n rejected: new AwaiEvent(),\n settled: new AwaiEvent(),\n started: new AwaiEvent(),\n };\n\n const checkShouldExpire = () =>\n repeat <= 0 ||\n strategy === 'once' ||\n shouldExpire ||\n (isFunction(expirationTrigger) && expirationTrigger());\n\n const expire = async (event?: E) => {\n expired = true;\n await flush();\n await events.settled.emit({ event, config });\n await flush();\n await registry.deregister(config.id);\n };\n\n if (isPromiseLike(expirationTrigger)) {\n Promise.resolve(expirationTrigger).then((event) => {\n shouldExpire = true;\n\n if (runningCallbacksCount === 0) {\n expire(event);\n }\n });\n }\n\n const run = async () => {\n getTriggerPromise(trigger).then(\n (event) => {\n repeat--;\n\n if (expired) {\n return;\n }\n\n runningCallbacksCount++;\n events.started.emit({ config, event });\n\n try {\n Promise.resolve(callback(event))\n .then((result) => {\n flush().then(() => {\n events.fulfilled.emit({ config, event, result });\n });\n })\n .catch((error) => {\n events.rejected.emit(error);\n })\n .finally(() => {\n runningCallbacksCount--;\n\n if (checkShouldExpire() && runningCallbacksCount === 0) {\n expire();\n return;\n }\n\n if (strategy === 'cyclic') {\n queueMicrotask(run);\n }\n });\n } catch (error) {\n runningCallbacksCount--;\n events.rejected.emit(error);\n }\n\n if (strategy === 'fork') {\n queueMicrotask(run);\n }\n },\n () => {\n queueMicrotask(run);\n },\n );\n };\n\n const then: AwaiEvent<SettledEvent<E>>['then'] = (resolve) => {\n if (!isFiniteScenario) {\n console.warn(\n 'You seem to await an infinite scenario. This causes a memory leak in your application.',\n );\n }\n\n if (!isFunction(resolve)) {\n return Promise.resolve(events.settled) as any;\n }\n\n return events.settled.then(resolve);\n };\n\n const scenarioNode: Scenario<T, R, E> = { config, events, then };\n\n registry.register(scenarioNode);\n\n run();\n\n return scenarioNode;\n}\n\nexport default scenario;\n","import { AsyncStatus, SystemTag } from '../constants';\nimport { AwaiEvent } from '../core';\nimport { registry } from '../global';\nimport { getAggregatedAsyncStatus, getUniqueId, isFunction, isReadableAsyncState } from '../lib';\nimport scenario from '../scenario';\nimport { type InferReadableType, type ReadableAsyncState, type ReadableState } from '../types';\n\nimport type { CleanupCallback, Config, Effect } from './types';\n\nconst getConfig = (customConfig: Partial<Config> = {}): Config => ({\n ...customConfig,\n id: customConfig.id ?? getUniqueId(effect.name),\n tags: [SystemTag.EFFECT, ...(customConfig.tags ?? [])],\n});\n\nconst effect = <\n T extends (ReadableState<any> | ReadableAsyncState<any>)[],\n V extends { [K in keyof T]: InferReadableType<T[K]> },\n>(\n states: [...T],\n effect: (...values: V) => CleanupCallback | void,\n customConfig?: Partial<Config>,\n): Effect<T, V> => {\n const config = getConfig(customConfig);\n const asyncStates = states.filter(isReadableAsyncState);\n\n let cleanup: ReturnType<typeof effect>;\n\n const events: Effect<T, V>['events'] = {\n cleared: new AwaiEvent(),\n started: new AwaiEvent(),\n };\n\n const runEffect = () => {\n const values = states.map((state) => state.get()) as V;\n const status = getAggregatedAsyncStatus(asyncStates);\n\n if (status !== AsyncStatus.FULFILLED) {\n return;\n }\n\n events.started.emit({ states, values });\n\n cleanup = effect(...values);\n };\n\n queueMicrotask(() => {\n scenario(\n () => Promise.race(states.map((state) => state.events.changed)),\n () => {\n if (isFunction(cleanup)) {\n cleanup();\n events.cleared.emit({ states });\n }\n\n runEffect();\n },\n { tags: [SystemTag.CORE_NODE] },\n );\n\n queueMicrotask(runEffect);\n });\n\n const effectNode: Effect<T, V> = { config, events };\n\n registry.register(effectNode);\n\n return effectNode;\n};\n\nexport default effect;\n","import { SystemTag } from '../constants';\nimport { AwaiEvent, flush } from '../core';\nimport { getUniqueId, isFunction } from '../lib';\nimport { registry } from '../global';\n\nimport type { Config, State } from './types';\n\nconst getConfig = (customConfig: Partial<Config> = {}): Config => ({\n ...customConfig,\n id: customConfig.id ?? getUniqueId(state.name),\n tags: [SystemTag.STATE, ...(customConfig.tags ?? [])],\n});\n\nconst state = <T>(initialValue: T, customConfig?: Partial<Config>): State<T> => {\n const config = getConfig(customConfig);\n\n let value = initialValue;\n\n const events = {\n changed: new AwaiEvent<T>(),\n };\n\n const set: State<T>['set'] = (nextValueOrResolver) => {\n let newValue = isFunction(nextValueOrResolver)\n ? nextValueOrResolver(value)\n : nextValueOrResolver;\n\n if (!Object.is(newValue, value)) {\n value = newValue;\n events.changed.emit(newValue);\n }\n\n return flush().then(() => newValue);\n };\n\n const get = () => value;\n\n const then: State<T>['then'] = async (resolve) => {\n if (!isFunction(resolve)) {\n return value as any;\n }\n\n return resolve(value);\n };\n\n const stateNode: State<T> = { config, events, get, set, then };\n\n registry.register(stateNode);\n\n return stateNode;\n};\n\nexport default state;\n","import asyncState, { type AsyncState } from '../async-state';\nimport { SystemTag } from '../constants';\nimport { AwaiEvent, flush } from '../core';\nimport { registry } from '../global';\nimport { getUniqueId, isFunction } from '../lib';\nimport scenario from '../scenario';\nimport state, { type State } from '../state';\nimport type { Id } from '../types';\n\nimport type { Config, FamilyState } from './types';\n\nconst getConfig = (customConfig: Partial<Config> = {}): Config => ({\n ...customConfig,\n id: customConfig.id ?? getUniqueId(familyState.name),\n tags: [SystemTag.FAMILY_STATE, ...(customConfig.tags ?? [])],\n});\n\nconst familyState = <\n T,\n Initializer extends (id: Id) => T | Promise<T>,\n Family extends Record<Id, NodeType>,\n NodeType extends State<any> | AsyncState<any> = ReturnType<Initializer> extends PromiseLike<\n infer Q\n >\n ? AsyncState<Q>\n : State<ReturnType<Initializer>>,\n>(\n initializer: Initializer,\n customConfig?: Partial<Config>,\n): FamilyState<NodeType> => {\n const config = getConfig(customConfig);\n\n let family: Family = {} as Family;\n\n const events = {\n changed: new AwaiEvent<Record<Id, NodeType>>(),\n stateCreated: new AwaiEvent<Id>(),\n };\n\n const getNode = (id: Id): NodeType => {\n if (id in family) {\n return family[id];\n }\n\n const initialValue = initializer(id);\n\n const stateNode =\n initialValue instanceof Promise\n ? asyncState(initialValue, { tags: [SystemTag.CORE_NODE] })\n : state(initialValue, { tags: [SystemTag.CORE_NODE] });\n\n family = { ...family, [id]: stateNode };\n events.stateCreated.emit(id);\n events.changed.emit(family);\n\n scenario(\n stateNode.events.changed,\n () => {\n events.changed.emit(family);\n },\n { tags: [SystemTag.CORE_NODE] },\n );\n\n return stateNode as NodeType;\n };\n\n const setNode = async (id: Id, stateNode: NodeType) => {\n if (id in family) {\n throw new Error(`Cannot set node. Node with id \"${id}\" already exists.`);\n }\n\n family = { ...family, [id]: stateNode };\n\n scenario(\n stateNode.events.changed,\n () => {\n events.changed.emit(family);\n },\n { tags: [SystemTag.CORE_NODE] },\n );\n\n events.changed.emit(family);\n\n await flush();\n };\n\n const get = () => {\n return family;\n };\n\n const then: FamilyState<NodeType>['then'] = async (resolve) => {\n if (!isFunction(resolve)) {\n return family as any;\n }\n\n return resolve(family);\n };\n\n const familyStateNode: FamilyState<NodeType> = { config, events, get, getNode, setNode, then };\n\n registry.register(familyStateNode);\n\n return familyStateNode;\n};\n\nexport default familyState;\n","import { AsyncStatus, SystemTag } from '../constants';\nimport { AwaiEvent } from '../core';\nimport { registry } from '../global';\nimport {\n fork,\n getAggregatedAsyncStatus,\n getUniqueId,\n isFunction,\n isReadableAsyncState,\n} from '../lib';\nimport scenario from '../scenario';\nimport type { InferReadableType, ReadableAsyncState, ReadableState } from '../types';\n\nimport type { AsyncConfig, AsyncSelector, VersionIgnoredEvent } from './types';\n\nconst getConfig = (customConfig: Partial<AsyncConfig> = {}): AsyncConfig => ({\n ...customConfig,\n id: customConfig.id ?? getUniqueId(asyncSelector.name),\n tags: [SystemTag.ASYNC_SELECTOR, ...(customConfig.tags ?? [])],\n});\n\nconst asyncSelector = <T extends (ReadableState | ReadableAsyncState)[], U>(\n states: T,\n predicate: (...values: { [K in keyof T]: InferReadableType<T[K]> }) => U,\n customConfig?: Partial<AsyncConfig>,\n): AsyncSelector<U> => {\n type StatesValues = { [K in keyof T]: InferReadableType<T[K]> };\n\n const config = getConfig(customConfig);\n const asyncStates = states.filter(isReadableAsyncState);\n\n let error: AggregateError | unknown | null = null;\n let value: U | undefined;\n let isLoading: boolean = true;\n let version = 0;\n let lastPendingVersion: number = version;\n\n const events: AsyncSelector<U>['events'] = {\n changed: new AwaiEvent<U | undefined>(),\n fulfilled: new AwaiEvent<U>(),\n ignored: new AwaiEvent<VersionIgnoredEvent<U>>(),\n rejected: new AwaiEvent<unknown>(),\n requested: new AwaiEvent<void>(),\n };\n\n const getStatus = () => {\n const aggregatedStatus = getAggregatedAsyncStatus(asyncStates);\n\n return error !== null && aggregatedStatus === AsyncStatus.FULFILLED\n ? AsyncStatus.REJECTED\n : aggregatedStatus;\n };\n\n const determineNextVersion = async () => {\n const currentPendingVersion = (lastPendingVersion + 1) % Number.MAX_SAFE_INTEGER;\n lastPendingVersion = currentPendingVersion;\n\n const status = getAggregatedAsyncStatus(asyncStates);\n const errors = asyncStates.map((state) => state.getAsync().error).filter(Boolean);\n\n if (status === AsyncStatus.PENDING) {\n isLoading = true;\n }\n\n events.requested.emit();\n\n if (errors.length > 0) {\n error = new AggregateError(errors);\n value = undefined;\n isLoading = status === AsyncStatus.PENDING;\n version = lastPendingVersion;\n events.rejected.emit(error);\n events.changed.emit(value);\n return;\n }\n\n if (status === AsyncStatus.FULFILLED) {\n const values = states.map((state) => state.get()) as StatesValues;\n\n fork(async () => {\n isLoading = true;\n\n try {\n const newValue = await predicate(...values);\n const isChanged = !Object.is(newValue, value);\n\n if (currentPendingVersion !== lastPendingVersion) {\n events.ignored.emit({ value: newValue, version: currentPendingVersion });\n return;\n }\n\n error = null;\n value = newValue;\n\n events.fulfilled.emit(newValue);\n\n if (isChanged) {\n events.changed.emit(value);\n }\n } catch (caughtError) {\n if (currentPendingVersion !== lastPendingVersion) {\n events.ignored.emit({ error: caughtError, version: currentPendingVersion });\n return;\n }\n\n const isChanged = typeof value !== 'undefined';\n\n error = caughtError;\n value = undefined;\n\n events.rejected.emit(caughtError);\n\n if (isChanged) {\n events.changed.emit(value);\n }\n } finally {\n if (currentPendingVersion === lastPendingVersion) {\n version = lastPendingVersion;\n isLoading = false;\n }\n }\n });\n }\n };\n\n scenario(\n async () => {\n const abortController = new AbortController();\n await Promise.race(\n states.flatMap((state) => {\n return isReadableAsyncState(state)\n ? [\n state.events.requested.abortable(abortController),\n state.events.rejected.abortable(abortController),\n state.events.fulfilled.abortable(abortController),\n ]\n : state.events.changed.abortable(abortController);\n }),\n );\n abortController.abort();\n },\n determineNextVersion,\n { tags: [SystemTag.CORE_NODE] },\n );\n\n const get = () => value;\n\n const getAsync = () => ({ error, isLoading, value });\n\n const getPromise = async (): Promise<U> => {\n const values = (await Promise.all(\n states.map((state) => (isReadableAsyncState(state) ? state.getPromise() : state.get())),\n )) as StatesValues;\n\n return predicate(...values);\n };\n\n const then: AsyncSelector<U>['then'] = async (resolve) => {\n if (!isFunction(resolve)) {\n return getPromise() as any;\n }\n\n return resolve(await getPromise());\n };\n\n const selectorNode = {\n config,\n events,\n get,\n getAsync,\n getPromise,\n getStatus,\n then,\n };\n\n queueMicrotask(determineNextVersion);\n\n registry.register(selectorNode);\n\n return selectorNode;\n};\n\nexport default asyncSelector;\n","import { SystemTag } from '../constants';\nimport { AwaiEvent } from '../core';\nimport { registry } from '../global';\nimport { getUniqueId, isFunction } from '../lib';\nimport scenario from '../scenario';\nimport type { InferReadableType, ReadableAsyncState, ReadableState } from '../types';\n\nimport type { SyncConfig, SyncSelector } from './types';\n\nconst getConfig = (customConfig: Partial<SyncConfig> = {}): SyncConfig => ({\n ...customConfig,\n id: customConfig.id ?? getUniqueId(syncSelector.name),\n tags: [SystemTag.SELECTOR, ...(customConfig.tags ?? [])],\n});\n\nconst syncSelector = <T extends (ReadableState | ReadableAsyncState)[], U>(\n states: [...T],\n predicate: (...values: { [K in keyof T]: InferReadableType<T[K]> }) => U,\n customConfig?: Partial<SyncConfig>,\n): SyncSelector<U> => {\n const config = getConfig(customConfig);\n let value: U;\n\n const events = {\n changed: new AwaiEvent<U>(),\n };\n\n const get = () => {\n const values = states.map((state) => state.get()) as {\n [K in keyof T]: InferReadableType<T[K]>;\n };\n return predicate(...values);\n };\n\n const then: SyncSelector<U>['then'] = async (resolve) => {\n if (!isFunction(resolve)) {\n return get() as any;\n }\n\n return resolve(get());\n };\n\n scenario(\n async () => {\n const abortController = new AbortController();\n await Promise.race(states.map((state) => state.events.changed.abortable(abortController)));\n abortController.abort();\n },\n () => {\n const newValue = get();\n\n if (!Object.is(newValue, value)) {\n value = newValue;\n events.changed.emit(newValue);\n }\n },\n { tags: [SystemTag.CORE_NODE] },\n );\n\n value = get();\n\n const selectorNode: SyncSelector<U> = { config, events, get, then };\n\n registry.register(selectorNode);\n\n return selectorNode;\n};\n\nexport default syncSelector;\n","import { isReadableAsyncState } from '../lib';\nimport { type InferReadableType } from '../types';\n\nimport asyncSelector from './asyncSelector';\nimport syncSelector from './syncSelector';\nimport type { Config, Selector } from './types';\n\nconst selector = <T extends any[], U>(\n states: [...T],\n predicate: (...values: { [K in keyof T]: InferReadableType<T[K]> }) => U,\n customConfig?: Partial<Config<T, U>>,\n): Selector<T, U> => {\n const isAsyncPredicate = predicate.constructor.name === 'AsyncFunction';\n\n const state =\n isAsyncPredicate || states.some((state) => isReadableAsyncState(state))\n ? asyncSelector(states, predicate, customConfig)\n : syncSelector(states, predicate, customConfig);\n\n return state as Selector<T, U>;\n};\n\nexport default selector;\n"],"names":["AsyncStatus","SystemTag","__publicField","node","getConfig","effect","state"],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,12 +1,19 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "awai",
|
|
3
|
-
"version": "1.0.0-rc-
|
|
3
|
+
"version": "1.0.0-rc-5",
|
|
4
4
|
"author": "Yuriy Yakym",
|
|
5
5
|
"description": "State management library",
|
|
6
6
|
"license": "MIT",
|
|
7
|
-
"main": "dist/index.
|
|
7
|
+
"main": "dist/index.cjs",
|
|
8
8
|
"module": "dist/index.mjs",
|
|
9
9
|
"typings": "dist/index.d.ts",
|
|
10
|
+
"exports": {
|
|
11
|
+
".": {
|
|
12
|
+
"import": "./dist/index.mjs",
|
|
13
|
+
"require": "./dist/index.cjs",
|
|
14
|
+
"types": "./dist/index.d.ts"
|
|
15
|
+
}
|
|
16
|
+
},
|
|
10
17
|
"type": "module",
|
|
11
18
|
"files": [
|
|
12
19
|
"dist"
|
package/dist/index.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
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'] = (nextValueOrResolver) => {\n let newValue = isFunction(nextValueOrResolver)\n ? nextValueOrResolver(value)\n : nextValueOrResolver;\n\n if (!Object.is(newValue, value)) {\n value = newValue;\n events.changed.emit(newValue);\n }\n\n return flush().then(() => newValue);\n };\n\n const get = () => value;\n\n const then: State<T>['then'] = async (resolve) => {\n if (!isFunction(resolve)) {\n return value as any;\n }\n\n return resolve(value);\n };\n\n const stateNode: State<T> = { config, events, get, set, then };\n\n registry.register(stateNode);\n\n return stateNode;\n};\n\nexport default state;\n","import asyncState, { type AsyncState } from '../async-state';\nimport { SystemTag } from '../constants';\nimport { AwaiEvent, flush } from '../core';\nimport { registry } from '../global';\nimport { getUniqueId, isFunction } from '../lib';\nimport scenario from '../scenario';\nimport state, { type State } from '../state';\nimport type { Id } from '../types';\n\nimport type { Config, FamilyState } from './types';\n\nconst getConfig = (customConfig: Partial<Config> = {}): Config => ({\n ...customConfig,\n id: customConfig.id ?? getUniqueId(familyState.name),\n tags: [SystemTag.FAMILY_STATE, ...(customConfig.tags ?? [])],\n});\n\nconst familyState = <\n T,\n Initializer extends (id: Id) => T | Promise<T>,\n Family extends Record<Id, NodeType>,\n NodeType extends State<any> | AsyncState<any> = ReturnType<Initializer> extends PromiseLike<\n infer Q\n >\n ? AsyncState<Q>\n : State<ReturnType<Initializer>>,\n>(\n initializer: Initializer,\n customConfig?: Partial<Config>,\n): FamilyState<NodeType> => {\n const config = getConfig(customConfig);\n\n let family: Family = {} as Family;\n\n const events = {\n changed: new AwaiEvent<Record<Id, NodeType>>(),\n stateCreated: new AwaiEvent<Id>(),\n };\n\n const getNode = (id: Id): NodeType => {\n if (id in family) {\n return family[id];\n }\n\n const initialValue = initializer(id);\n\n const stateNode =\n initialValue instanceof Promise\n ? asyncState(initialValue, { tags: [SystemTag.CORE_NODE] })\n : state(initialValue, { tags: [SystemTag.CORE_NODE] });\n\n family = { ...family, [id]: stateNode };\n events.stateCreated.emit(id);\n events.changed.emit(family);\n\n scenario(\n stateNode.events.changed,\n () => {\n events.changed.emit(family);\n },\n { tags: [SystemTag.CORE_NODE] },\n );\n\n return stateNode as NodeType;\n };\n\n const setNode = async (id: Id, stateNode: NodeType) => {\n if (id in family) {\n throw new Error(`Cannot set node. Node with id \"${id}\" already exists.`);\n }\n\n family = { ...family, [id]: stateNode };\n\n scenario(\n stateNode.events.changed,\n () => {\n events.changed.emit(family);\n },\n { tags: [SystemTag.CORE_NODE] },\n );\n\n events.changed.emit(family);\n\n await flush();\n };\n\n const get = () => {\n return family;\n };\n\n const then: FamilyState<NodeType>['then'] = async (resolve) => {\n if (!isFunction(resolve)) {\n return family as any;\n }\n\n return resolve(family);\n };\n\n const familyStateNode: FamilyState<NodeType> = { config, events, get, getNode, setNode, then };\n\n registry.register(familyStateNode);\n\n return familyStateNode;\n};\n\nexport default familyState;\n","import { AsyncStatus, SystemTag } from '../constants';\nimport { AwaiEvent } from '../core';\nimport { registry } from '../global';\nimport {\n fork,\n getAggregatedAsyncStatus,\n getUniqueId,\n isFunction,\n isReadableAsyncState,\n} from '../lib';\nimport scenario from '../scenario';\nimport type { InferReadableType, ReadableAsyncState, ReadableState } from '../types';\n\nimport type { AsyncConfig, AsyncSelector, VersionIgnoredEvent } from './types';\n\nconst getConfig = (customConfig: Partial<AsyncConfig> = {}): AsyncConfig => ({\n ...customConfig,\n id: customConfig.id ?? getUniqueId(asyncSelector.name),\n tags: [SystemTag.ASYNC_SELECTOR, ...(customConfig.tags ?? [])],\n});\n\nconst asyncSelector = <T extends (ReadableState | ReadableAsyncState)[], U>(\n states: T,\n predicate: (...values: { [K in keyof T]: InferReadableType<T[K]> }) => U,\n customConfig?: Partial<AsyncConfig>,\n): AsyncSelector<U> => {\n type StatesValues = { [K in keyof T]: InferReadableType<T[K]> };\n\n const config = getConfig(customConfig);\n const asyncStates = states.filter(isReadableAsyncState);\n\n let error: AggregateError | unknown | null = null;\n let value: U | undefined;\n let isLoading: boolean = true;\n let version = 0;\n let lastPendingVersion: number = version;\n\n const events: AsyncSelector<U>['events'] = {\n changed: new AwaiEvent<U | undefined>(),\n fulfilled: new AwaiEvent<U>(),\n ignored: new AwaiEvent<VersionIgnoredEvent<U>>(),\n rejected: new AwaiEvent<unknown>(),\n requested: new AwaiEvent<void>(),\n };\n\n const getStatus = () => {\n const aggregatedStatus = getAggregatedAsyncStatus(asyncStates);\n\n return error !== null && aggregatedStatus === AsyncStatus.FULFILLED\n ? AsyncStatus.REJECTED\n : aggregatedStatus;\n };\n\n const determineNextVersion = async () => {\n const currentPendingVersion = (lastPendingVersion + 1) % Number.MAX_SAFE_INTEGER;\n lastPendingVersion = currentPendingVersion;\n\n const status = getAggregatedAsyncStatus(asyncStates);\n const errors = asyncStates.map((state) => state.getAsync().error).filter(Boolean);\n\n if (status === AsyncStatus.PENDING) {\n isLoading = true;\n }\n\n events.requested.emit();\n\n if (errors.length > 0) {\n error = new AggregateError(errors);\n value = undefined;\n isLoading = status === AsyncStatus.PENDING;\n version = lastPendingVersion;\n events.rejected.emit(error);\n events.changed.emit(value);\n return;\n }\n\n if (status === AsyncStatus.FULFILLED) {\n const values = states.map((state) => state.get()) as StatesValues;\n\n fork(async () => {\n isLoading = true;\n\n try {\n const newValue = await predicate(...values);\n const isChanged = !Object.is(newValue, value);\n\n if (currentPendingVersion !== lastPendingVersion) {\n events.ignored.emit({ value: newValue, version: currentPendingVersion });\n return;\n }\n\n error = null;\n value = newValue;\n\n events.fulfilled.emit(newValue);\n\n if (isChanged) {\n events.changed.emit(value);\n }\n } catch (caughtError) {\n if (currentPendingVersion !== lastPendingVersion) {\n events.ignored.emit({ error: caughtError, version: currentPendingVersion });\n return;\n }\n\n const isChanged = typeof value !== 'undefined';\n\n error = caughtError;\n value = undefined;\n\n events.rejected.emit(caughtError);\n\n if (isChanged) {\n events.changed.emit(value);\n }\n } finally {\n if (currentPendingVersion === lastPendingVersion) {\n version = lastPendingVersion;\n isLoading = false;\n }\n }\n });\n }\n };\n\n scenario(\n async () => {\n const abortController = new AbortController();\n await Promise.race(\n states.flatMap((state) => {\n return isReadableAsyncState(state)\n ? [\n state.events.requested.abortable(abortController),\n state.events.rejected.abortable(abortController),\n state.events.fulfilled.abortable(abortController),\n ]\n : state.events.changed.abortable(abortController);\n }),\n );\n abortController.abort();\n },\n determineNextVersion,\n { tags: [SystemTag.CORE_NODE] },\n );\n\n const get = () => value;\n\n const getAsync = () => ({ error, isLoading, value });\n\n const getPromise = async (): Promise<U> => {\n const values = (await Promise.all(\n states.map((state) => (isReadableAsyncState(state) ? state.getPromise() : state.get())),\n )) as StatesValues;\n\n return predicate(...values);\n };\n\n const then: AsyncSelector<U>['then'] = async (resolve) => {\n if (!isFunction(resolve)) {\n return getPromise() as any;\n }\n\n return resolve(await getPromise());\n };\n\n const selectorNode = {\n config,\n events,\n get,\n getAsync,\n getPromise,\n getStatus,\n then,\n };\n\n queueMicrotask(determineNextVersion);\n\n registry.register(selectorNode);\n\n return selectorNode;\n};\n\nexport default asyncSelector;\n","import { SystemTag } from '../constants';\nimport { AwaiEvent } from '../core';\nimport { registry } from '../global';\nimport { getUniqueId, isFunction } from '../lib';\nimport scenario from '../scenario';\nimport type { InferReadableType, ReadableAsyncState, ReadableState } from '../types';\n\nimport type { SyncConfig, SyncSelector } from './types';\n\nconst getConfig = (customConfig: Partial<SyncConfig> = {}): SyncConfig => ({\n ...customConfig,\n id: customConfig.id ?? getUniqueId(syncSelector.name),\n tags: [SystemTag.SELECTOR, ...(customConfig.tags ?? [])],\n});\n\nconst syncSelector = <T extends (ReadableState | ReadableAsyncState)[], U>(\n states: [...T],\n predicate: (...values: { [K in keyof T]: InferReadableType<T[K]> }) => U,\n customConfig?: Partial<SyncConfig>,\n): SyncSelector<U> => {\n const config = getConfig(customConfig);\n let value: U;\n\n const events = {\n changed: new AwaiEvent<U>(),\n };\n\n const get = () => {\n const values = states.map((state) => state.get()) as {\n [K in keyof T]: InferReadableType<T[K]>;\n };\n return predicate(...values);\n };\n\n const then: SyncSelector<U>['then'] = async (resolve) => {\n if (!isFunction(resolve)) {\n return get() as any;\n }\n\n return resolve(get());\n };\n\n scenario(\n async () => {\n const abortController = new AbortController();\n await Promise.race(states.map((state) => state.events.changed.abortable(abortController)));\n abortController.abort();\n },\n () => {\n const newValue = get();\n\n if (!Object.is(newValue, value)) {\n value = newValue;\n events.changed.emit(newValue);\n }\n },\n { tags: [SystemTag.CORE_NODE] },\n );\n\n value = get();\n\n const selectorNode: SyncSelector<U> = { config, events, get, then };\n\n registry.register(selectorNode);\n\n return selectorNode;\n};\n\nexport default syncSelector;\n","import { isReadableAsyncState } from '../lib';\nimport { type InferReadableType } from '../types';\n\nimport asyncSelector from './asyncSelector';\nimport syncSelector from './syncSelector';\nimport type { Config, Selector } from './types';\n\nconst selector = <T extends any[], U>(\n states: [...T],\n predicate: (...values: { [K in keyof T]: InferReadableType<T[K]> }) => U,\n customConfig?: Partial<Config<T, U>>,\n): Selector<T, U> => {\n const isAsyncPredicate = predicate.constructor.name === 'AsyncFunction';\n\n const state =\n isAsyncPredicate || states.some((state) => isReadableAsyncState(state))\n ? asyncSelector(states, predicate, customConfig)\n : syncSelector(states, predicate, customConfig);\n\n return state as Selector<T, U>;\n};\n\nexport default selector;\n"],"names":["AsyncStatus","SystemTag","__publicField","node","getConfig","effect","state"],"mappings":"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"}
|