awai 1.0.0-rc-6 → 1.0.0-rc-7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.cjs +16 -2
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.mjs +16 -2
- package/dist/index.mjs.map +1 -1
- package/package.json +1 -1
package/dist/index.cjs
CHANGED
|
@@ -45,6 +45,8 @@ const getUniqueId = (scope = "unknown") => {
|
|
|
45
45
|
return `awai$${scope}$${nextId}`;
|
|
46
46
|
};
|
|
47
47
|
|
|
48
|
+
const isAbortSignal = (value) => typeof AbortSignal !== "undefined" && value instanceof AbortSignal;
|
|
49
|
+
|
|
48
50
|
const isCoreNode = (node) => node.config.tags.includes(SystemTag.CORE_NODE);
|
|
49
51
|
|
|
50
52
|
const isFunction = (value) => typeof value === "function";
|
|
@@ -58,6 +60,9 @@ const isPromiseOrFunction = (value) => isFunction(value) || isPromiseLike(value)
|
|
|
58
60
|
const isReadableAsyncState = (value) => isObject(value) && isFunction(value.get) && isFunction(value.getAsync) && isFunction(value.getPromise) && isFunction(value.then);
|
|
59
61
|
|
|
60
62
|
const race = async (promises, abortSignal) => {
|
|
63
|
+
if (abortSignal?.aborted) {
|
|
64
|
+
return Promise.reject(abortSignal.reason);
|
|
65
|
+
}
|
|
61
66
|
const internalAbortController = new AbortController();
|
|
62
67
|
const abort = () => {
|
|
63
68
|
internalAbortController.abort();
|
|
@@ -352,6 +357,9 @@ const getTriggerPromise = (trigger) => {
|
|
|
352
357
|
|
|
353
358
|
const getExpirationPromise = (until) => {
|
|
354
359
|
if (typeof AbortSignal !== "undefined" && until instanceof AbortSignal) {
|
|
360
|
+
if (until.aborted) {
|
|
361
|
+
return Promise.resolve(void 0);
|
|
362
|
+
}
|
|
355
363
|
return new Promise((resolve) => {
|
|
356
364
|
until.addEventListener("abort", () => resolve(void 0), { once: true });
|
|
357
365
|
});
|
|
@@ -384,9 +392,11 @@ function scenario(...args) {
|
|
|
384
392
|
settled: new AwaiEvent(),
|
|
385
393
|
started: new AwaiEvent()
|
|
386
394
|
};
|
|
387
|
-
const
|
|
388
|
-
const checkShouldExpire = () => strategy === "once" || shouldExpire || (untilPredicate ? untilPredicate() : false);
|
|
395
|
+
const checkShouldExpire = () => strategy === "once" || shouldExpire || (isAbortSignal(until) ? until.aborted : false) || (isFunction(until) ? until() : false);
|
|
389
396
|
const expire = async () => {
|
|
397
|
+
if (expired) {
|
|
398
|
+
return;
|
|
399
|
+
}
|
|
390
400
|
expired = true;
|
|
391
401
|
await flush();
|
|
392
402
|
await events.settled.emit({ event: expirationEvent, config });
|
|
@@ -436,6 +446,10 @@ function scenario(...args) {
|
|
|
436
446
|
}
|
|
437
447
|
},
|
|
438
448
|
() => {
|
|
449
|
+
if (checkShouldExpire() && runningCallbacksCount === 0) {
|
|
450
|
+
expire();
|
|
451
|
+
return;
|
|
452
|
+
}
|
|
439
453
|
queueMicrotask(run);
|
|
440
454
|
}
|
|
441
455
|
);
|
package/dist/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.cjs","sources":["../src/constants/AsyncStatus.ts","../src/constants/SystemTag.ts","../src/lib/delay.ts","../src/lib/fork.ts","../src/lib/getAggregatedAsyncStatus.ts","../src/lib/getUniqueId.ts","../src/lib/isCoreNode.ts","../src/lib/isFunction.ts","../src/lib/isObject.ts","../src/lib/isPromiseLike.ts","../src/lib/isPromiseOrFunction.ts","../src/lib/isReadableAsyncState.ts","../src/lib/race.ts","../src/lib/rejectAfter.ts","../src/lib/SyncQueue.ts","../src/global/queue.ts","../src/core/AwaiEvent.ts","../src/core/flush.ts","../src/core/Registry.ts","../src/global/registry.ts","../src/action/action.ts","../src/async-state/async-state.ts","../src/scenario/lib/getDefaultStrategy.ts","../src/scenario/lib/getTriggerPromise.ts","../src/scenario/lib/getExpirationPromise.ts","../src/scenario/scenario.ts","../src/effect/effect.ts","../src/state/state.ts","../src/family-state/family-state.ts","../src/selector/asyncSelector.ts","../src/selector/syncSelector.ts","../src/selector/selector.ts"],"sourcesContent":["enum AsyncStatus {\n FULFILLED = 'fulfilled',\n PENDING = 'pending',\n REJECTED = 'rejected',\n}\n\nexport default AsyncStatus;\n","enum SystemTag {\n ACTION = '@awai/action',\n ASYNC_SELECTOR = '@awai/async-selector',\n ASYNC_STATE = '@awai/async-state',\n CORE_NODE = '@awai/core-node',\n EFFECT = '@awai/effect',\n FAMILY_STATE = '@awai/family-state',\n SCENARIO = '@awai/scenario',\n SELECTOR = '@awai/selector',\n STATE = '@awai/state',\n}\n\nexport default SystemTag;\n","const delay = (ms: number): Promise<void> => new Promise((resolve) => setTimeout(resolve, ms));\n\nexport default delay;\n","const fork = async (forkFn: () => Promise<any>) => {\n await forkFn();\n};\n\nexport default fork;\n","import { AsyncStatus } from '../constants';\nimport type { ReadableAsyncState } from '../types';\n\nconst getAggregatedAsyncStatus = <T extends Pick<ReadableAsyncState, 'getStatus'>[]>(\n states: T,\n): AsyncStatus => {\n const hasError = states.some((state) => state.getStatus() === AsyncStatus.REJECTED);\n\n if (hasError) {\n return AsyncStatus.REJECTED;\n }\n\n const isPending = states.some((state) => state.getStatus() === AsyncStatus.PENDING);\n\n if (isPending) {\n return AsyncStatus.PENDING;\n }\n\n return AsyncStatus.FULFILLED;\n};\n\nexport default getAggregatedAsyncStatus;\n","const lastScopesIds: Record<string, number> = {};\n\nconst getUniqueId = (scope = 'unknown') => {\n const nextId = (lastScopesIds[scope] ?? 0) + 1;\n lastScopesIds[scope] = nextId;\n return `awai\\$${scope}\\$${nextId}`;\n};\n\nexport default getUniqueId;\n","import { SystemTag } from '../constants';\nimport type { BaseNode } from '../types';\n\nconst isCoreNode = (node: BaseNode): boolean => node.config.tags.includes(SystemTag.CORE_NODE);\n\nexport default isCoreNode;\n","const isFunction = (value: unknown): value is Function => typeof value === 'function';\n\nexport default isFunction;\n","const isObject = (value: unknown): value is Record<string, unknown> =>\n typeof value === 'object' && value !== null;\n\nexport default isObject;\n","import isFunction from './isFunction';\nimport isObject from './isObject';\n\nconst isPromiseLike = <T>(value: unknown): value is PromiseLike<T> =>\n isObject(value) && (value instanceof Promise || isFunction(value.then));\n\nexport default isPromiseLike;\n","import isFunction from './isFunction';\nimport isPromiseLike from './isPromiseLike';\n\nconst isPromiseOrFunction = <T>(\n value: unknown,\n): value is Promise<T> | ((...args: any) => Promise<T>) =>\n isFunction(value) || isPromiseLike<T>(value);\n\nexport default isPromiseOrFunction;\n","import type { ReadableAsyncState } from '../types';\n\nimport isFunction from './isFunction';\nimport isObject from './isObject';\n\nconst isReadableAsyncState = <T>(value: unknown): value is ReadableAsyncState<T> =>\n isObject(value) &&\n isFunction(value.get) &&\n isFunction(value.getAsync) &&\n isFunction(value.getPromise) &&\n isFunction(value.then);\n\nexport default isReadableAsyncState;\n","import isPromiseLike from './isPromiseLike';\nimport isFunction from './isFunction';\n\nconst race = async <T extends readonly unknown[] | []>(\n promises: T,\n abortSignal?: AbortSignal,\n): Promise<Awaited<T[number]>> => {\n const internalAbortController = new AbortController();\n\n const abort = () => {\n internalAbortController.abort();\n abortSignal?.removeEventListener('abort', abort);\n };\n\n abortSignal?.addEventListener('abort', abort);\n\n const abortablePromises = promises.map((promise) => {\n return isAbortable(promise) ? promise.abortable(internalAbortController.signal) : promise;\n }) as Promise<T[number]>[];\n\n return await Promise.race(abortablePromises).finally(abort);\n};\n\nexport default race;\n\ntype AbortablePromise<T> = Promise<T> & { abortable: (signal: AbortSignal) => Promise<T> };\n\nconst isAbortable = <T>(promise: unknown): promise is AbortablePromise<T> =>\n isPromiseLike<T>(promise) && 'abortable' in promise && isFunction(promise.abortable);\n","const rejectAfter = (ms: number): Promise<void> => {\n return new Promise((_, reject) => setTimeout(reject, ms));\n};\n\nexport default rejectAfter;\n","/**\n * @description\n * This helper is needed to emit events synchronously, so that scenarios/effects/selectors\n * can resubscribe to an event before another emission.\n *\n * @example\n * const state = state(0);\n *\n * scenario(state.events.change, () => {\n * // Without `SyncQueue` this scenario would only run once\n * });\n *\n * state.set(1);\n * state.set(2);\n */\n\nexport default class SyncQueue {\n private callbacksQueue: Function[] = [];\n private isDequeuing = false;\n\n public enqueue(callback: Function) {\n this.callbacksQueue.push(callback);\n this.dequeue();\n }\n\n private dequeue = async () => {\n if (this.isDequeuing || this.callbacksQueue.length === 0) {\n return;\n }\n\n this.isDequeuing = true;\n const callback = this.callbacksQueue.shift()!;\n callback();\n\n queueMicrotask(() => {\n this.isDequeuing = false;\n this.dequeue();\n });\n };\n}\n","import { SyncQueue } from '../lib';\n\nconst queue = new SyncQueue();\n\nexport default queue;\n","import queue from '../global/queue';\nimport { isFunction } from '../lib';\n\ntype Resolver<T> = (value: T) => any;\ntype FilterPredicate<T> = (value: T) => boolean;\n\nexport default class AwaiEvent<T = void> {\n private _awaiters: Resolver<T>[] = [];\n\n then: PromiseLike<T>['then'] = (onfulfilled) => {\n return new Promise<any>((resolve, reject) => {\n this._awaiters.push((value: T) => {\n try {\n const result = isFunction(onfulfilled) ? onfulfilled(value) : value;\n resolve(result);\n } catch (error) {\n reject(error);\n }\n });\n });\n };\n\n abortable(abortSignal: AbortSignal): Promise<T> {\n if (abortSignal.aborted) {\n return Promise.reject(abortSignal.reason);\n }\n\n return new Promise<T>((resolve, reject) => {\n const resolveWithCleanup: Resolver<T> = (value: T) => {\n abortSignal.removeEventListener('abort', abortionHandler);\n resolve(value);\n };\n\n this._awaiters.push(resolveWithCleanup);\n\n const abortionHandler = () => {\n this._awaiters = this._awaiters.filter((awaiter) => awaiter !== resolveWithCleanup);\n reject(abortSignal.reason);\n };\n\n abortSignal.addEventListener('abort', abortionHandler, { once: true });\n });\n }\n\n emit(value: T) {\n queue.enqueue(async () => {\n const awaiters = this._awaiters;\n this._awaiters = [];\n\n for (const resolve of awaiters) {\n resolve(value);\n }\n });\n }\n\n async filter(predicate: FilterPredicate<T>) {\n return new Promise(async (resolve) => {\n while (true) {\n const newValue = await this;\n const isApplicable = Boolean(predicate(newValue));\n\n if (isApplicable) {\n resolve(newValue);\n return;\n }\n }\n });\n }\n}\n","const flush = () => new Promise<void>((resolve) => setTimeout(resolve, 0));\n\nexport default flush;\n","import { isCoreNode } from '../lib';\nimport type BaseNode from '../types/BaseNode';\n\nimport AwaiEvent from './AwaiEvent';\n\nexport default class Registry<T extends BaseNode> {\n private _nodes: T[] = [];\n public readonly events = {\n deregistered: new AwaiEvent<T['config']['id']>(),\n registered: new AwaiEvent<T>(),\n };\n\n public async register(node: T) {\n if (isCoreNode(node)) {\n return;\n }\n\n this._nodes.push(node);\n this.events.registered.emit(node);\n }\n\n public async deregister(id: BaseNode['config']['id']) {\n const node = this._nodes.find((node) => node.config.id === id);\n\n if (!node) {\n return;\n }\n\n this._nodes = this._nodes.filter((node) => node.config.id !== id);\n this.events.deregistered.emit(id);\n }\n\n get nodes() {\n return [...this._nodes];\n }\n}\n","import { Registry } from '../core';\n\nconst registry = new Registry();\n\nexport default registry;\n","import { SystemTag } from '../constants';\nimport { AwaiEvent, flush } from '../core';\nimport { registry } from '../global';\nimport { getUniqueId, isFunction } from '../lib';\n\nimport type { CallbackAction, Config, EmptyAction } from './types';\n\nconst getConfig = (customConfig: Partial<Config> = {}): Config => ({\n ...customConfig,\n id: customConfig.id ?? getUniqueId(action.name),\n tags: [SystemTag.ACTION, ...(customConfig.tags ?? [])],\n});\n\nfunction action<Args extends any[] = []>(): EmptyAction<Args>;\nfunction action<Args extends any[] = []>(config?: Partial<Config>): EmptyAction<Args>;\nfunction action<Args extends any[], Return = void>(\n callback: (...args: Args) => Return,\n config?: Partial<Config>,\n): CallbackAction<Args, Return>;\n\nfunction action<Args extends any[], Return = void>(\n ...args: [Partial<Config>?] | [(...args: Args) => Return, Partial<Config>?]\n): EmptyAction<Args> | CallbackAction<Args, Return> {\n type Action = EmptyAction<Args> | CallbackAction<Args, Return>;\n\n const hasCallback = isFunction(args[0]);\n const [callback, customConfig] = hasCallback\n ? (args as [(...args: Args) => Return, Partial<Config>?])\n : ([, ...args] as [undefined, Partial<Config>?]);\n\n const config = getConfig(customConfig);\n\n const events = {\n invoked: new AwaiEvent(),\n rejected: hasCallback ? new AwaiEvent() : undefined,\n fulfilled: hasCallback ? new AwaiEvent() : undefined,\n } satisfies Action['events'];\n\n const invoke = async (...invokeArgs: Args) => {\n const invocationId = getUniqueId('invocation');\n\n events.invoked.emit({ arguments: invokeArgs, config, invocationId });\n\n try {\n const valueOrPromise: Return | Promise<Return> = isFunction(callback)\n ? callback(...invokeArgs)\n : (undefined as Return);\n\n const value = await valueOrPromise;\n await flush();\n events.fulfilled?.emit({ arguments: invokeArgs, config, result: value, invocationId });\n return value;\n } catch (error) {\n events.rejected?.emit({\n arguments: invokeArgs,\n config,\n error,\n invocationId,\n });\n throw error;\n }\n };\n\n const actionNode = Object.assign(invoke, { config, events }) as Action;\n\n registry.register(actionNode);\n\n return actionNode;\n}\n\nexport default action;\n","import { AsyncStatus, SystemTag } from '../constants';\nimport { AwaiEvent, flush } from '../core';\nimport { registry } from '../global';\nimport { getUniqueId, isFunction, isPromiseOrFunction, race } from '../lib';\n\nimport type { VersionIgnoredEvent, AsyncState, Config, InitialValue, Version } from './types';\n\nconst getConfig = (customConfig: Partial<Config> = {}): Config => ({\n ...customConfig,\n id: customConfig.id ?? getUniqueId(asyncState.name),\n tags: [SystemTag.ASYNC_STATE, ...(customConfig.tags ?? [])],\n});\n\nconst asyncState = <T>(\n initialValue?: InitialValue<T>,\n customConfig?: Partial<Config>,\n): AsyncState<T> => {\n const config = getConfig(customConfig);\n const isInitialValueAsync = isPromiseOrFunction(initialValue);\n let version: Version = isInitialValueAsync ? 0 : 1;\n let lastPendingVersion: Version = version;\n let status: AsyncStatus = AsyncStatus.FULFILLED;\n let error: unknown = null;\n let value: T | undefined = isInitialValueAsync ? undefined : initialValue;\n\n const events: AsyncState<T>['events'] = {\n changed: new AwaiEvent<T | undefined>(),\n fulfilled: new AwaiEvent<T>(),\n ignored: new AwaiEvent<VersionIgnoredEvent<T>>(),\n rejected: new AwaiEvent<unknown>(),\n requested: new AwaiEvent<void>(),\n };\n\n const getStatus: AsyncState<T>['getStatus'] = () => status;\n\n const set: AsyncState<T>['set'] = async (nextValueOrResolver) => {\n const currentPendingVersion: Version = (lastPendingVersion + 1) % Number.MAX_SAFE_INTEGER;\n lastPendingVersion = currentPendingVersion;\n\n try {\n if (isPromiseOrFunction(nextValueOrResolver)) {\n status = AsyncStatus.PENDING;\n events.requested.emit();\n }\n\n let newValue = isFunction(nextValueOrResolver)\n ? await nextValueOrResolver(value)\n : await nextValueOrResolver;\n const isChanged = !Object.is(newValue, value);\n\n if (currentPendingVersion !== lastPendingVersion || !isChanged) {\n events.ignored.emit({ value: newValue, version: currentPendingVersion });\n return;\n }\n\n error = null;\n value = newValue;\n status = AsyncStatus.FULFILLED;\n\n events.fulfilled.emit(newValue);\n\n if (isChanged) {\n events.changed.emit(value);\n }\n } catch (e) {\n if (currentPendingVersion !== lastPendingVersion) {\n events.ignored.emit({ error: e, version: currentPendingVersion });\n return;\n }\n\n const isChanged = !Object.is(e, error);\n\n error = e;\n value = undefined;\n status = AsyncStatus.REJECTED;\n\n events.rejected.emit(error);\n\n if (isChanged) {\n events.changed.emit(value);\n }\n }\n\n version = lastPendingVersion;\n await flush();\n };\n\n const get: AsyncState<T>['get'] = () => value;\n\n const getAsync: AsyncState<T>['getAsync'] = () => ({\n error,\n isLoading: status === AsyncStatus.PENDING,\n value,\n });\n\n const getPromise: AsyncState<T>['getPromise'] = async () => {\n if (version === lastPendingVersion) {\n return value!;\n }\n\n await race([events.fulfilled, events.rejected]);\n\n if (error) {\n throw error;\n }\n\n return value!;\n };\n\n const then: PromiseLike<T>['then'] = async (resolve) => {\n if (!isFunction(resolve)) {\n return getPromise() as any;\n }\n\n return resolve(await getPromise());\n };\n\n if (isInitialValueAsync) {\n set(initialValue);\n }\n\n const asyncStateNode: AsyncState<T> = {\n config,\n events,\n get,\n getAsync,\n getPromise,\n getStatus,\n set,\n then,\n };\n\n registry.register(asyncStateNode);\n\n return asyncStateNode;\n};\n\nexport default asyncState;\n","import type { Config } from '../types';\n\nconst getDefaultStrategy = (\n isPlainPromiseTrigger: boolean,\n hasTrigger: boolean,\n): Config<unknown>['strategy'] => {\n if (isPlainPromiseTrigger) {\n return 'once';\n }\n\n if (hasTrigger) {\n return 'fork';\n }\n\n return 'cyclic';\n};\n\nexport default getDefaultStrategy;\n","import { isFunction } from '../../lib';\nimport type { Trigger } from '../types';\n\nconst getTriggerPromise = <T>(trigger: Trigger<T> | undefined) => {\n if (!trigger) {\n return Promise.resolve(undefined as T);\n }\n\n return isFunction(trigger) ? trigger() : trigger;\n};\n\nexport default getTriggerPromise;\n","import type { ShouldExpirePredicate, UntilTrigger } from '../types';\n\nconst getExpirationPromise = <E>(until: Exclude<UntilTrigger<E>, ShouldExpirePredicate>) => {\n if (typeof AbortSignal !== 'undefined' && until instanceof AbortSignal) {\n return new Promise((resolve) => {\n until.addEventListener('abort', () => resolve(undefined), { once: true });\n });\n }\n\n return Promise.resolve(until) as Promise<E>;\n};\n\nexport default getExpirationPromise;\n","import { SystemTag } from '../constants';\nimport { AwaiEvent, flush } from '../core';\nimport { registry } from '../global';\nimport { getUniqueId, isFunction, isObject } from '../lib';\n\nimport { getDefaultStrategy, getExpirationPromise, getTriggerPromise } from './lib';\nimport type { Callback, Config, Scenario, Trigger } from './types';\n\nconst getConfig = <E = unknown>(\n isPlainPromiseTrigger: boolean,\n hasTrigger: boolean,\n customConfig: Partial<Config<E>> = {},\n): Config<E> => ({\n ...customConfig,\n id: customConfig.id ?? getUniqueId(scenario.name),\n strategy: customConfig.strategy ?? getDefaultStrategy(isPlainPromiseTrigger, hasTrigger),\n tags: [SystemTag.SCENARIO, ...(customConfig.tags ?? [])],\n});\n\nfunction scenario<T, R, E = unknown>(\n trigger: Trigger<T>,\n callback: Callback<T, R>,\n customConfig?: Partial<Config<E>>,\n): Scenario<T, R, E>;\n\nfunction scenario<T, R, E = unknown>(\n callback: Callback<T, R>,\n config?: Partial<Config<E>>,\n): Scenario<T, R, E>;\n\nfunction scenario<T, R, E = unknown>(\n ...args: [Trigger<T>, Callback<T, R>, Partial<Config<E>>?] | [Callback<T, R>, Partial<Config<E>>?]\n): Scenario<T, R, E> {\n const hasTrigger = isFunction(args[1]);\n\n const trigger = hasTrigger ? (args[0] as Trigger<T>) : undefined;\n const callback = (hasTrigger ? args[1] : args[0]) as Callback<T, R>;\n const customConfig = (hasTrigger ? args[2] : args[1]) as Partial<Config<E>> | undefined;\n const isPlainPromiseTrigger = hasTrigger && isObject(args[0]) && args[0].constructor === Promise;\n\n const config = getConfig<E>(isPlainPromiseTrigger, hasTrigger, customConfig);\n const { strategy, until } = config;\n const isFiniteScenario =\n isPlainPromiseTrigger || strategy === 'once' || typeof until !== 'undefined';\n let expirationEvent: E | undefined;\n let runningCallbacksCount = 0;\n let shouldExpire = false;\n let expired = false;\n\n const events: Scenario<T, R, E>['events'] = {\n fulfilled: new AwaiEvent(),\n rejected: new AwaiEvent(),\n settled: new AwaiEvent(),\n started: new AwaiEvent(),\n };\n\n const untilPredicate = isFunction(until) ? until : undefined;\n\n const checkShouldExpire = () =>\n strategy === 'once' || shouldExpire || (untilPredicate ? untilPredicate() : false);\n\n const expire = async () => {\n expired = true;\n await flush();\n await events.settled.emit({ event: expirationEvent, config });\n await flush();\n await registry.deregister(config.id);\n };\n\n if (until && !isFunction(until)) {\n getExpirationPromise<E>(until).then((event) => {\n shouldExpire = true;\n expirationEvent = event as E;\n\n if (runningCallbacksCount === 0) {\n expire();\n }\n });\n }\n\n const run = async () => {\n getTriggerPromise(trigger).then(\n (event) => {\n if (expired) {\n return;\n }\n\n runningCallbacksCount++;\n events.started.emit({ config, event });\n\n try {\n Promise.resolve(callback(event))\n .then((result) => {\n flush().then(() => {\n events.fulfilled.emit({ config, event, result });\n });\n })\n .catch((error) => {\n events.rejected.emit(error);\n })\n .finally(() => {\n runningCallbacksCount--;\n\n if (checkShouldExpire() && runningCallbacksCount === 0) {\n expire();\n return;\n }\n\n if (strategy === 'cyclic') {\n queueMicrotask(run);\n }\n });\n } catch (error) {\n runningCallbacksCount--;\n events.rejected.emit(error);\n }\n\n if (strategy === 'fork') {\n queueMicrotask(run);\n }\n },\n () => {\n queueMicrotask(run);\n },\n );\n };\n\n const then: Scenario<T, R, E>['then'] = (resolve) => {\n if (!isFiniteScenario) {\n console.warn(\n 'You seem to await an infinite scenario. This causes a memory leak in your application.',\n );\n }\n\n if (!isFunction(resolve)) {\n return Promise.resolve(events.settled) as any;\n }\n\n return events.settled.then(resolve);\n };\n\n const scenarioNode: Scenario<T, R, E> = { config, events, then };\n\n registry.register(scenarioNode);\n\n run();\n\n return scenarioNode;\n}\n\nexport default scenario;\n","import { AsyncStatus, SystemTag } from '../constants';\nimport { AwaiEvent } from '../core';\nimport { registry } from '../global';\nimport { getAggregatedAsyncStatus, getUniqueId, isFunction, isReadableAsyncState } from '../lib';\nimport scenario from '../scenario';\nimport { type InferReadableType, type ReadableAsyncState, type ReadableState } from '../types';\n\nimport type { CleanupCallback, Config, Effect } from './types';\n\nconst getConfig = (customConfig: Partial<Config> = {}): Config => ({\n ...customConfig,\n id: customConfig.id ?? getUniqueId(effect.name),\n tags: [SystemTag.EFFECT, ...(customConfig.tags ?? [])],\n});\n\nconst effect = <\n T extends (ReadableState<any> | ReadableAsyncState<any>)[],\n V extends { [K in keyof T]: InferReadableType<T[K]> },\n>(\n states: [...T],\n effect: (...values: V) => CleanupCallback | void,\n customConfig?: Partial<Config>,\n): Effect<T, V> => {\n const config = getConfig(customConfig);\n const asyncStates = states.filter(isReadableAsyncState);\n\n let cleanup: ReturnType<typeof effect>;\n\n const events: Effect<T, V>['events'] = {\n cleared: new AwaiEvent(),\n started: new AwaiEvent(),\n };\n\n const runEffect = () => {\n const values = states.map((state) => state.get()) as V;\n const status = getAggregatedAsyncStatus(asyncStates);\n\n if (status !== AsyncStatus.FULFILLED) {\n return;\n }\n\n events.started.emit({ states, values });\n\n cleanup = effect(...values);\n };\n\n queueMicrotask(() => {\n scenario(\n () => Promise.race(states.map((state) => state.events.changed)),\n () => {\n if (isFunction(cleanup)) {\n cleanup();\n events.cleared.emit({ states });\n }\n\n runEffect();\n },\n { tags: [SystemTag.CORE_NODE] },\n );\n\n queueMicrotask(runEffect);\n });\n\n const effectNode: Effect<T, V> = { config, events };\n\n registry.register(effectNode);\n\n return effectNode;\n};\n\nexport default effect;\n","import { SystemTag } from '../constants';\nimport { AwaiEvent, flush } from '../core';\nimport { getUniqueId, isFunction } from '../lib';\nimport { registry } from '../global';\n\nimport type { Config, State } from './types';\n\nconst getConfig = (customConfig: Partial<Config> = {}): Config => ({\n ...customConfig,\n id: customConfig.id ?? getUniqueId(state.name),\n tags: [SystemTag.STATE, ...(customConfig.tags ?? [])],\n});\n\nconst state = <T>(initialValue: T, customConfig?: Partial<Config>): State<T> => {\n const config = getConfig(customConfig);\n\n let value = initialValue;\n\n const events = {\n changed: new AwaiEvent<T>(),\n };\n\n const set: State<T>['set'] = (nextValueOrResolver) => {\n let newValue = isFunction(nextValueOrResolver)\n ? nextValueOrResolver(value)\n : nextValueOrResolver;\n\n if (!Object.is(newValue, value)) {\n value = newValue;\n events.changed.emit(newValue);\n }\n\n return flush().then(() => newValue);\n };\n\n const get = () => value;\n\n const then: State<T>['then'] = async (resolve) => {\n if (!isFunction(resolve)) {\n return value as any;\n }\n\n return resolve(value);\n };\n\n const stateNode: State<T> = { config, events, get, set, then };\n\n registry.register(stateNode);\n\n return stateNode;\n};\n\nexport default state;\n","import asyncState, { type AsyncState } from '../async-state';\nimport { SystemTag } from '../constants';\nimport { AwaiEvent, flush } from '../core';\nimport { registry } from '../global';\nimport { getUniqueId, isFunction } from '../lib';\nimport scenario from '../scenario';\nimport state, { type State } from '../state';\nimport type { Id } from '../types';\n\nimport type { Config, FamilyState } from './types';\n\nconst getConfig = (customConfig: Partial<Config> = {}): Config => ({\n ...customConfig,\n id: customConfig.id ?? getUniqueId(familyState.name),\n tags: [SystemTag.FAMILY_STATE, ...(customConfig.tags ?? [])],\n});\n\nconst familyState = <\n T,\n Initializer extends (id: Id) => T | Promise<T>,\n Family extends Record<Id, NodeType>,\n NodeType extends State<any> | AsyncState<any> = ReturnType<Initializer> extends PromiseLike<\n infer Q\n >\n ? AsyncState<Q>\n : State<ReturnType<Initializer>>,\n>(\n initializer: Initializer,\n customConfig?: Partial<Config>,\n): FamilyState<NodeType> => {\n const config = getConfig(customConfig);\n\n let family: Family = {} as Family;\n\n const events = {\n changed: new AwaiEvent<Record<Id, NodeType>>(),\n stateCreated: new AwaiEvent<Id>(),\n };\n\n const getNode = (id: Id): NodeType => {\n if (id in family) {\n return family[id];\n }\n\n const initialValue = initializer(id);\n\n const stateNode =\n initialValue instanceof Promise\n ? asyncState(initialValue, { tags: [SystemTag.CORE_NODE] })\n : state(initialValue, { tags: [SystemTag.CORE_NODE] });\n\n family = { ...family, [id]: stateNode };\n events.stateCreated.emit(id);\n events.changed.emit(family);\n\n scenario(\n stateNode.events.changed,\n () => {\n events.changed.emit(family);\n },\n { tags: [SystemTag.CORE_NODE] },\n );\n\n return stateNode as NodeType;\n };\n\n const setNode = async (id: Id, stateNode: NodeType) => {\n if (id in family) {\n throw new Error(`Cannot set node. Node with id \"${id}\" already exists.`);\n }\n\n family = { ...family, [id]: stateNode };\n\n scenario(\n stateNode.events.changed,\n () => {\n events.changed.emit(family);\n },\n { tags: [SystemTag.CORE_NODE] },\n );\n\n events.changed.emit(family);\n\n await flush();\n };\n\n const get = () => {\n return family;\n };\n\n const then: FamilyState<NodeType>['then'] = async (resolve) => {\n if (!isFunction(resolve)) {\n return family as any;\n }\n\n return resolve(family);\n };\n\n const familyStateNode: FamilyState<NodeType> = { config, events, get, getNode, setNode, then };\n\n registry.register(familyStateNode);\n\n return familyStateNode;\n};\n\nexport default familyState;\n","import { AsyncStatus, SystemTag } from '../constants';\nimport { AwaiEvent } from '../core';\nimport { registry } from '../global';\nimport {\n fork,\n getAggregatedAsyncStatus,\n getUniqueId,\n isFunction,\n isReadableAsyncState,\n race,\n} from '../lib';\nimport scenario from '../scenario';\nimport type { InferReadableType, ReadableAsyncState, ReadableState } from '../types';\n\nimport type { AsyncConfig, AsyncSelector, VersionIgnoredEvent } from './types';\n\nconst getConfig = (customConfig: Partial<AsyncConfig> = {}): AsyncConfig => ({\n ...customConfig,\n id: customConfig.id ?? getUniqueId(asyncSelector.name),\n tags: [SystemTag.ASYNC_SELECTOR, ...(customConfig.tags ?? [])],\n});\n\nconst asyncSelector = <T extends (ReadableState | ReadableAsyncState)[], U>(\n states: T,\n predicate: (...values: { [K in keyof T]: InferReadableType<T[K]> }) => U,\n customConfig?: Partial<AsyncConfig>,\n): AsyncSelector<U> => {\n type StatesValues = { [K in keyof T]: InferReadableType<T[K]> };\n\n const config = getConfig(customConfig);\n const asyncStates = states.filter(isReadableAsyncState);\n\n let error: AggregateError | unknown | null = null;\n let value: U | undefined;\n let isLoading: boolean = true;\n let version = 0;\n let lastPendingVersion: number = version;\n\n const events: AsyncSelector<U>['events'] = {\n changed: new AwaiEvent<U | undefined>(),\n fulfilled: new AwaiEvent<U>(),\n ignored: new AwaiEvent<VersionIgnoredEvent<U>>(),\n rejected: new AwaiEvent<unknown>(),\n requested: new AwaiEvent<void>(),\n };\n\n const getStatus = () => {\n if (isLoading) {\n return AsyncStatus.PENDING;\n }\n\n const aggregatedStatus = getAggregatedAsyncStatus(asyncStates);\n\n return error !== null && aggregatedStatus === AsyncStatus.FULFILLED\n ? AsyncStatus.REJECTED\n : aggregatedStatus;\n };\n\n const determineNextVersion = async () => {\n const currentPendingVersion = (lastPendingVersion + 1) % Number.MAX_SAFE_INTEGER;\n lastPendingVersion = currentPendingVersion;\n\n const status = getAggregatedAsyncStatus(asyncStates);\n const errors = asyncStates.map((state) => state.getAsync().error).filter(Boolean);\n\n if (status === AsyncStatus.PENDING) {\n isLoading = true;\n }\n\n events.requested.emit();\n\n if (errors.length > 0) {\n error = new AggregateError(errors);\n value = undefined;\n isLoading = status === AsyncStatus.PENDING;\n version = lastPendingVersion;\n events.rejected.emit(error);\n events.changed.emit(value);\n return;\n }\n\n if (status === AsyncStatus.FULFILLED) {\n const values = states.map((state) => state.get()) as StatesValues;\n\n fork(async () => {\n isLoading = true;\n\n try {\n const newValue = await predicate(...values);\n const isChanged = !Object.is(newValue, value);\n\n if (currentPendingVersion !== lastPendingVersion) {\n events.ignored.emit({ value: newValue, version: currentPendingVersion });\n return;\n }\n\n error = null;\n value = newValue;\n\n events.fulfilled.emit(newValue);\n\n if (isChanged) {\n events.changed.emit(value);\n }\n } catch (caughtError) {\n if (currentPendingVersion !== lastPendingVersion) {\n events.ignored.emit({ error: caughtError, version: currentPendingVersion });\n return;\n }\n\n const isChanged = typeof value !== 'undefined';\n\n error = caughtError;\n value = undefined;\n\n events.rejected.emit(caughtError);\n\n if (isChanged) {\n events.changed.emit(value);\n }\n } finally {\n if (currentPendingVersion === lastPendingVersion) {\n version = lastPendingVersion;\n isLoading = false;\n }\n }\n });\n }\n };\n\n scenario(\n async () => {\n const abortController = new AbortController();\n const abortSignal = abortController.signal;\n await Promise.race(\n states.map((state) => {\n return isReadableAsyncState(state)\n ? race(\n [state.events.requested, state.events.rejected, state.events.fulfilled],\n abortSignal,\n )\n : state.events.changed.abortable(abortSignal);\n }),\n );\n abortController.abort();\n },\n determineNextVersion,\n { tags: [SystemTag.CORE_NODE] },\n );\n\n const get = () => value;\n\n const getAsync = () => ({ error, isLoading, value });\n\n const getPromise = async (): Promise<U> => {\n while (isLoading) {\n await race([events.fulfilled, events.rejected]);\n }\n\n if (error) {\n throw error;\n }\n\n return value!;\n };\n\n const then: AsyncSelector<U>['then'] = async (resolve) => {\n if (!isFunction(resolve)) {\n return getPromise() as any;\n }\n\n return resolve(await getPromise());\n };\n\n const selectorNode = {\n config,\n events,\n get,\n getAsync,\n getPromise,\n getStatus,\n then,\n };\n\n queueMicrotask(determineNextVersion);\n\n registry.register(selectorNode);\n\n return selectorNode;\n};\n\nexport default asyncSelector;\n","import { SystemTag } from '../constants';\nimport { AwaiEvent } from '../core';\nimport { registry } from '../global';\nimport { getUniqueId, isFunction, race } from '../lib';\nimport scenario from '../scenario';\nimport type { InferReadableType, ReadableAsyncState, ReadableState } from '../types';\n\nimport type { SyncConfig, SyncSelector } from './types';\n\nconst getConfig = (customConfig: Partial<SyncConfig> = {}): SyncConfig => ({\n ...customConfig,\n id: customConfig.id ?? getUniqueId(syncSelector.name),\n tags: [SystemTag.SELECTOR, ...(customConfig.tags ?? [])],\n});\n\nconst syncSelector = <T extends (ReadableState | ReadableAsyncState)[], U>(\n states: [...T],\n predicate: (...values: { [K in keyof T]: InferReadableType<T[K]> }) => U,\n customConfig?: Partial<SyncConfig>,\n): SyncSelector<U> => {\n const config = getConfig(customConfig);\n let value: U;\n\n const events = {\n changed: new AwaiEvent<U>(),\n };\n\n const get = () => {\n const values = states.map((state) => state.get()) as {\n [K in keyof T]: InferReadableType<T[K]>;\n };\n return predicate(...values);\n };\n\n const then: SyncSelector<U>['then'] = async (resolve) => {\n if (!isFunction(resolve)) {\n return get() as any;\n }\n\n return resolve(get());\n };\n\n scenario(\n () => race(states.map((state) => state.events.changed)),\n () => {\n const newValue = get();\n\n if (!Object.is(newValue, value)) {\n value = newValue;\n events.changed.emit(newValue);\n }\n },\n { tags: [SystemTag.CORE_NODE] },\n );\n\n value = get();\n\n const selectorNode: SyncSelector<U> = { config, events, get, then };\n\n registry.register(selectorNode);\n\n return selectorNode;\n};\n\nexport default syncSelector;\n","import { isReadableAsyncState } from '../lib';\nimport { type InferReadableType } from '../types';\n\nimport asyncSelector from './asyncSelector';\nimport syncSelector from './syncSelector';\nimport type { Config, Selector } from './types';\n\nconst selector = <T extends any[], U>(\n states: [...T],\n predicate: (...values: { [K in keyof T]: InferReadableType<T[K]> }) => U,\n customConfig?: Partial<Config<T, U>>,\n): Selector<T, U> => {\n const isAsyncPredicate = predicate.constructor.name === 'AsyncFunction';\n\n const state =\n isAsyncPredicate || states.some((state) => isReadableAsyncState(state))\n ? asyncSelector(states, predicate, customConfig)\n : syncSelector(states, predicate, customConfig);\n\n return state as Selector<T, U>;\n};\n\nexport default selector;\n"],"names":["AsyncStatus","SystemTag","__publicField","node","getConfig","effect","state"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.cjs","sources":["../src/constants/AsyncStatus.ts","../src/constants/SystemTag.ts","../src/lib/delay.ts","../src/lib/fork.ts","../src/lib/getAggregatedAsyncStatus.ts","../src/lib/getUniqueId.ts","../src/lib/isAbortSignal.ts","../src/lib/isCoreNode.ts","../src/lib/isFunction.ts","../src/lib/isObject.ts","../src/lib/isPromiseLike.ts","../src/lib/isPromiseOrFunction.ts","../src/lib/isReadableAsyncState.ts","../src/lib/race.ts","../src/lib/rejectAfter.ts","../src/lib/SyncQueue.ts","../src/global/queue.ts","../src/core/AwaiEvent.ts","../src/core/flush.ts","../src/core/Registry.ts","../src/global/registry.ts","../src/action/action.ts","../src/async-state/async-state.ts","../src/scenario/lib/getDefaultStrategy.ts","../src/scenario/lib/getTriggerPromise.ts","../src/scenario/lib/getExpirationPromise.ts","../src/scenario/scenario.ts","../src/effect/effect.ts","../src/state/state.ts","../src/family-state/family-state.ts","../src/selector/asyncSelector.ts","../src/selector/syncSelector.ts","../src/selector/selector.ts"],"sourcesContent":["enum AsyncStatus {\n FULFILLED = 'fulfilled',\n PENDING = 'pending',\n REJECTED = 'rejected',\n}\n\nexport default AsyncStatus;\n","enum SystemTag {\n ACTION = '@awai/action',\n ASYNC_SELECTOR = '@awai/async-selector',\n ASYNC_STATE = '@awai/async-state',\n CORE_NODE = '@awai/core-node',\n EFFECT = '@awai/effect',\n FAMILY_STATE = '@awai/family-state',\n SCENARIO = '@awai/scenario',\n SELECTOR = '@awai/selector',\n STATE = '@awai/state',\n}\n\nexport default SystemTag;\n","const delay = (ms: number): Promise<void> => new Promise((resolve) => setTimeout(resolve, ms));\n\nexport default delay;\n","const fork = async (forkFn: () => Promise<any>) => {\n await forkFn();\n};\n\nexport default fork;\n","import { AsyncStatus } from '../constants';\nimport type { ReadableAsyncState } from '../types';\n\nconst getAggregatedAsyncStatus = <T extends Pick<ReadableAsyncState, 'getStatus'>[]>(\n states: T,\n): AsyncStatus => {\n const hasError = states.some((state) => state.getStatus() === AsyncStatus.REJECTED);\n\n if (hasError) {\n return AsyncStatus.REJECTED;\n }\n\n const isPending = states.some((state) => state.getStatus() === AsyncStatus.PENDING);\n\n if (isPending) {\n return AsyncStatus.PENDING;\n }\n\n return AsyncStatus.FULFILLED;\n};\n\nexport default getAggregatedAsyncStatus;\n","const lastScopesIds: Record<string, number> = {};\n\nconst getUniqueId = (scope = 'unknown') => {\n const nextId = (lastScopesIds[scope] ?? 0) + 1;\n lastScopesIds[scope] = nextId;\n return `awai\\$${scope}\\$${nextId}`;\n};\n\nexport default getUniqueId;\n","const isAbortSignal = (value: unknown): value is AbortSignal =>\n typeof AbortSignal !== 'undefined' && value instanceof AbortSignal;\n\nexport default isAbortSignal;\n","import { SystemTag } from '../constants';\nimport type { BaseNode } from '../types';\n\nconst isCoreNode = (node: BaseNode): boolean => node.config.tags.includes(SystemTag.CORE_NODE);\n\nexport default isCoreNode;\n","const isFunction = (value: unknown): value is Function => typeof value === 'function';\n\nexport default isFunction;\n","const isObject = (value: unknown): value is Record<string, unknown> =>\n typeof value === 'object' && value !== null;\n\nexport default isObject;\n","import isFunction from './isFunction';\nimport isObject from './isObject';\n\nconst isPromiseLike = <T>(value: unknown): value is PromiseLike<T> =>\n isObject(value) && (value instanceof Promise || isFunction(value.then));\n\nexport default isPromiseLike;\n","import isFunction from './isFunction';\nimport isPromiseLike from './isPromiseLike';\n\nconst isPromiseOrFunction = <T>(\n value: unknown,\n): value is Promise<T> | ((...args: any) => Promise<T>) =>\n isFunction(value) || isPromiseLike<T>(value);\n\nexport default isPromiseOrFunction;\n","import type { ReadableAsyncState } from '../types';\n\nimport isFunction from './isFunction';\nimport isObject from './isObject';\n\nconst isReadableAsyncState = <T>(value: unknown): value is ReadableAsyncState<T> =>\n isObject(value) &&\n isFunction(value.get) &&\n isFunction(value.getAsync) &&\n isFunction(value.getPromise) &&\n isFunction(value.then);\n\nexport default isReadableAsyncState;\n","import isPromiseLike from './isPromiseLike';\nimport isFunction from './isFunction';\n\nconst race = async <T extends readonly unknown[] | []>(promises: T, abortSignal?: AbortSignal) => {\n if (abortSignal?.aborted) {\n return Promise.reject(abortSignal.reason);\n }\n\n const internalAbortController = new AbortController();\n\n const abort = () => {\n internalAbortController.abort();\n abortSignal?.removeEventListener('abort', abort);\n };\n\n abortSignal?.addEventListener('abort', abort);\n\n const abortablePromises = promises.map((promise) => {\n return isAbortable(promise) ? promise.abortable(internalAbortController.signal) : promise;\n }) as Promise<T[number]>[];\n\n return await Promise.race(abortablePromises).finally(abort);\n};\n\nexport default race;\n\ntype AbortablePromise<T> = Promise<T> & { abortable: (signal: AbortSignal) => Promise<T> };\n\nconst isAbortable = <T>(promise: unknown): promise is AbortablePromise<T> =>\n isPromiseLike<T>(promise) && 'abortable' in promise && isFunction(promise.abortable);\n","const rejectAfter = (ms: number): Promise<void> => {\n return new Promise((_, reject) => setTimeout(reject, ms));\n};\n\nexport default rejectAfter;\n","/**\n * @description\n * This helper is needed to emit events synchronously, so that scenarios/effects/selectors\n * can resubscribe to an event before another emission.\n *\n * @example\n * const state = state(0);\n *\n * scenario(state.events.change, () => {\n * // Without `SyncQueue` this scenario would only run once\n * });\n *\n * state.set(1);\n * state.set(2);\n */\n\nexport default class SyncQueue {\n private callbacksQueue: Function[] = [];\n private isDequeuing = false;\n\n public enqueue(callback: Function) {\n this.callbacksQueue.push(callback);\n this.dequeue();\n }\n\n private dequeue = async () => {\n if (this.isDequeuing || this.callbacksQueue.length === 0) {\n return;\n }\n\n this.isDequeuing = true;\n const callback = this.callbacksQueue.shift()!;\n callback();\n\n queueMicrotask(() => {\n this.isDequeuing = false;\n this.dequeue();\n });\n };\n}\n","import { SyncQueue } from '../lib';\n\nconst queue = new SyncQueue();\n\nexport default queue;\n","import queue from '../global/queue';\nimport { isFunction } from '../lib';\n\ntype Resolver<T> = (value: T) => any;\ntype FilterPredicate<T> = (value: T) => boolean;\n\nexport default class AwaiEvent<T = void> {\n private _awaiters: Resolver<T>[] = [];\n\n then: PromiseLike<T>['then'] = (onfulfilled) => {\n return new Promise<any>((resolve, reject) => {\n this._awaiters.push((value: T) => {\n try {\n const result = isFunction(onfulfilled) ? onfulfilled(value) : value;\n resolve(result);\n } catch (error) {\n reject(error);\n }\n });\n });\n };\n\n abortable(abortSignal: AbortSignal): Promise<T> {\n if (abortSignal.aborted) {\n return Promise.reject(abortSignal.reason);\n }\n\n return new Promise<T>((resolve, reject) => {\n const resolveWithCleanup: Resolver<T> = (value: T) => {\n abortSignal.removeEventListener('abort', abortionHandler);\n resolve(value);\n };\n\n this._awaiters.push(resolveWithCleanup);\n\n const abortionHandler = () => {\n this._awaiters = this._awaiters.filter((awaiter) => awaiter !== resolveWithCleanup);\n reject(abortSignal.reason);\n };\n\n abortSignal.addEventListener('abort', abortionHandler, { once: true });\n });\n }\n\n emit(value: T) {\n queue.enqueue(async () => {\n const awaiters = this._awaiters;\n this._awaiters = [];\n\n for (const resolve of awaiters) {\n resolve(value);\n }\n });\n }\n\n async filter(predicate: FilterPredicate<T>) {\n return new Promise(async (resolve) => {\n while (true) {\n const newValue = await this;\n const isApplicable = Boolean(predicate(newValue));\n\n if (isApplicable) {\n resolve(newValue);\n return;\n }\n }\n });\n }\n}\n","const flush = () => new Promise<void>((resolve) => setTimeout(resolve, 0));\n\nexport default flush;\n","import { isCoreNode } from '../lib';\nimport type BaseNode from '../types/BaseNode';\n\nimport AwaiEvent from './AwaiEvent';\n\nexport default class Registry<T extends BaseNode> {\n private _nodes: T[] = [];\n public readonly events = {\n deregistered: new AwaiEvent<T['config']['id']>(),\n registered: new AwaiEvent<T>(),\n };\n\n public async register(node: T) {\n if (isCoreNode(node)) {\n return;\n }\n\n this._nodes.push(node);\n this.events.registered.emit(node);\n }\n\n public async deregister(id: BaseNode['config']['id']) {\n const node = this._nodes.find((node) => node.config.id === id);\n\n if (!node) {\n return;\n }\n\n this._nodes = this._nodes.filter((node) => node.config.id !== id);\n this.events.deregistered.emit(id);\n }\n\n get nodes() {\n return [...this._nodes];\n }\n}\n","import { Registry } from '../core';\n\nconst registry = new Registry();\n\nexport default registry;\n","import { SystemTag } from '../constants';\nimport { AwaiEvent, flush } from '../core';\nimport { registry } from '../global';\nimport { getUniqueId, isFunction } from '../lib';\n\nimport type { CallbackAction, Config, EmptyAction } from './types';\n\nconst getConfig = (customConfig: Partial<Config> = {}): Config => ({\n ...customConfig,\n id: customConfig.id ?? getUniqueId(action.name),\n tags: [SystemTag.ACTION, ...(customConfig.tags ?? [])],\n});\n\nfunction action<Args extends any[] = []>(): EmptyAction<Args>;\nfunction action<Args extends any[] = []>(config?: Partial<Config>): EmptyAction<Args>;\nfunction action<Args extends any[], Return = void>(\n callback: (...args: Args) => Return,\n config?: Partial<Config>,\n): CallbackAction<Args, Return>;\n\nfunction action<Args extends any[], Return = void>(\n ...args: [Partial<Config>?] | [(...args: Args) => Return, Partial<Config>?]\n): EmptyAction<Args> | CallbackAction<Args, Return> {\n type Action = EmptyAction<Args> | CallbackAction<Args, Return>;\n\n const hasCallback = isFunction(args[0]);\n const [callback, customConfig] = hasCallback\n ? (args as [(...args: Args) => Return, Partial<Config>?])\n : ([, ...args] as [undefined, Partial<Config>?]);\n\n const config = getConfig(customConfig);\n\n const events = {\n invoked: new AwaiEvent(),\n rejected: hasCallback ? new AwaiEvent() : undefined,\n fulfilled: hasCallback ? new AwaiEvent() : undefined,\n } satisfies Action['events'];\n\n const invoke = async (...invokeArgs: Args) => {\n const invocationId = getUniqueId('invocation');\n\n events.invoked.emit({ arguments: invokeArgs, config, invocationId });\n\n try {\n const valueOrPromise: Return | Promise<Return> = isFunction(callback)\n ? callback(...invokeArgs)\n : (undefined as Return);\n\n const value = await valueOrPromise;\n await flush();\n events.fulfilled?.emit({ arguments: invokeArgs, config, result: value, invocationId });\n return value;\n } catch (error) {\n events.rejected?.emit({\n arguments: invokeArgs,\n config,\n error,\n invocationId,\n });\n throw error;\n }\n };\n\n const actionNode = Object.assign(invoke, { config, events }) as Action;\n\n registry.register(actionNode);\n\n return actionNode;\n}\n\nexport default action;\n","import { AsyncStatus, SystemTag } from '../constants';\nimport { AwaiEvent, flush } from '../core';\nimport { registry } from '../global';\nimport { getUniqueId, isFunction, isPromiseOrFunction, race } from '../lib';\n\nimport type { VersionIgnoredEvent, AsyncState, Config, InitialValue, Version } from './types';\n\nconst getConfig = (customConfig: Partial<Config> = {}): Config => ({\n ...customConfig,\n id: customConfig.id ?? getUniqueId(asyncState.name),\n tags: [SystemTag.ASYNC_STATE, ...(customConfig.tags ?? [])],\n});\n\nconst asyncState = <T>(\n initialValue?: InitialValue<T>,\n customConfig?: Partial<Config>,\n): AsyncState<T> => {\n const config = getConfig(customConfig);\n const isInitialValueAsync = isPromiseOrFunction(initialValue);\n let version: Version = isInitialValueAsync ? 0 : 1;\n let lastPendingVersion: Version = version;\n let status: AsyncStatus = AsyncStatus.FULFILLED;\n let error: unknown = null;\n let value: T | undefined = isInitialValueAsync ? undefined : initialValue;\n\n const events: AsyncState<T>['events'] = {\n changed: new AwaiEvent<T | undefined>(),\n fulfilled: new AwaiEvent<T>(),\n ignored: new AwaiEvent<VersionIgnoredEvent<T>>(),\n rejected: new AwaiEvent<unknown>(),\n requested: new AwaiEvent<void>(),\n };\n\n const getStatus: AsyncState<T>['getStatus'] = () => status;\n\n const set: AsyncState<T>['set'] = async (nextValueOrResolver) => {\n const currentPendingVersion: Version = (lastPendingVersion + 1) % Number.MAX_SAFE_INTEGER;\n lastPendingVersion = currentPendingVersion;\n\n try {\n if (isPromiseOrFunction(nextValueOrResolver)) {\n status = AsyncStatus.PENDING;\n events.requested.emit();\n }\n\n let newValue = isFunction(nextValueOrResolver)\n ? await nextValueOrResolver(value)\n : await nextValueOrResolver;\n const isChanged = !Object.is(newValue, value);\n\n if (currentPendingVersion !== lastPendingVersion || !isChanged) {\n events.ignored.emit({ value: newValue, version: currentPendingVersion });\n return;\n }\n\n error = null;\n value = newValue;\n status = AsyncStatus.FULFILLED;\n\n events.fulfilled.emit(newValue);\n\n if (isChanged) {\n events.changed.emit(value);\n }\n } catch (e) {\n if (currentPendingVersion !== lastPendingVersion) {\n events.ignored.emit({ error: e, version: currentPendingVersion });\n return;\n }\n\n const isChanged = !Object.is(e, error);\n\n error = e;\n value = undefined;\n status = AsyncStatus.REJECTED;\n\n events.rejected.emit(error);\n\n if (isChanged) {\n events.changed.emit(value);\n }\n }\n\n version = lastPendingVersion;\n await flush();\n };\n\n const get: AsyncState<T>['get'] = () => value;\n\n const getAsync: AsyncState<T>['getAsync'] = () => ({\n error,\n isLoading: status === AsyncStatus.PENDING,\n value,\n });\n\n const getPromise: AsyncState<T>['getPromise'] = async () => {\n if (version === lastPendingVersion) {\n return value!;\n }\n\n await race([events.fulfilled, events.rejected]);\n\n if (error) {\n throw error;\n }\n\n return value!;\n };\n\n const then: PromiseLike<T>['then'] = async (resolve) => {\n if (!isFunction(resolve)) {\n return getPromise() as any;\n }\n\n return resolve(await getPromise());\n };\n\n if (isInitialValueAsync) {\n set(initialValue);\n }\n\n const asyncStateNode: AsyncState<T> = {\n config,\n events,\n get,\n getAsync,\n getPromise,\n getStatus,\n set,\n then,\n };\n\n registry.register(asyncStateNode);\n\n return asyncStateNode;\n};\n\nexport default asyncState;\n","import type { Config } from '../types';\n\nconst getDefaultStrategy = (\n isPlainPromiseTrigger: boolean,\n hasTrigger: boolean,\n): Config<unknown>['strategy'] => {\n if (isPlainPromiseTrigger) {\n return 'once';\n }\n\n if (hasTrigger) {\n return 'fork';\n }\n\n return 'cyclic';\n};\n\nexport default getDefaultStrategy;\n","import { isFunction } from '../../lib';\nimport type { Trigger } from '../types';\n\nconst getTriggerPromise = <T>(trigger: Trigger<T> | undefined) => {\n if (!trigger) {\n return Promise.resolve(undefined as T);\n }\n\n return isFunction(trigger) ? trigger() : trigger;\n};\n\nexport default getTriggerPromise;\n","import type { ShouldExpirePredicate, UntilTrigger } from '../types';\n\nconst getExpirationPromise = <E>(until: Exclude<UntilTrigger<E>, ShouldExpirePredicate>) => {\n if (typeof AbortSignal !== 'undefined' && until instanceof AbortSignal) {\n if (until.aborted) {\n return Promise.resolve(undefined);\n }\n\n return new Promise((resolve) => {\n until.addEventListener('abort', () => resolve(undefined), { once: true });\n });\n }\n\n return Promise.resolve(until) as Promise<E>;\n};\n\nexport default getExpirationPromise;\n","import { SystemTag } from '../constants';\nimport { AwaiEvent, flush } from '../core';\nimport { registry } from '../global';\nimport { getUniqueId, isAbortSignal, isFunction, isObject } from '../lib';\n\nimport { getDefaultStrategy, getExpirationPromise, getTriggerPromise } from './lib';\nimport type { Callback, Config, Scenario, Trigger } from './types';\n\nconst getConfig = <E = unknown>(\n isPlainPromiseTrigger: boolean,\n hasTrigger: boolean,\n customConfig: Partial<Config<E>> = {},\n): Config<E> => ({\n ...customConfig,\n id: customConfig.id ?? getUniqueId(scenario.name),\n strategy: customConfig.strategy ?? getDefaultStrategy(isPlainPromiseTrigger, hasTrigger),\n tags: [SystemTag.SCENARIO, ...(customConfig.tags ?? [])],\n});\n\nfunction scenario<T, R, E = unknown>(\n trigger: Trigger<T>,\n callback: Callback<T, R>,\n customConfig?: Partial<Config<E>>,\n): Scenario<T, R, E>;\n\nfunction scenario<T, R, E = unknown>(\n callback: Callback<T, R>,\n config?: Partial<Config<E>>,\n): Scenario<T, R, E>;\n\nfunction scenario<T, R, E = unknown>(\n ...args: [Trigger<T>, Callback<T, R>, Partial<Config<E>>?] | [Callback<T, R>, Partial<Config<E>>?]\n): Scenario<T, R, E> {\n const hasTrigger = isFunction(args[1]);\n\n const trigger = hasTrigger ? (args[0] as Trigger<T>) : undefined;\n const callback = (hasTrigger ? args[1] : args[0]) as Callback<T, R>;\n const customConfig = (hasTrigger ? args[2] : args[1]) as Partial<Config<E>> | undefined;\n const isPlainPromiseTrigger = hasTrigger && isObject(args[0]) && args[0].constructor === Promise;\n\n const config = getConfig<E>(isPlainPromiseTrigger, hasTrigger, customConfig);\n const { strategy, until } = config;\n const isFiniteScenario =\n isPlainPromiseTrigger || strategy === 'once' || typeof until !== 'undefined';\n let expirationEvent: E | undefined;\n let runningCallbacksCount = 0;\n let shouldExpire = false;\n let expired = false;\n\n const events: Scenario<T, R, E>['events'] = {\n fulfilled: new AwaiEvent(),\n rejected: new AwaiEvent(),\n settled: new AwaiEvent(),\n started: new AwaiEvent(),\n };\n\n const checkShouldExpire = () =>\n strategy === 'once' ||\n shouldExpire ||\n (isAbortSignal(until) ? until.aborted : false) ||\n (isFunction(until) ? until() : false);\n\n const expire = async () => {\n if (expired) {\n return;\n }\n\n expired = true;\n await flush();\n await events.settled.emit({ event: expirationEvent, config });\n await flush();\n await registry.deregister(config.id);\n };\n\n if (until && !isFunction(until)) {\n getExpirationPromise<E>(until).then((event) => {\n shouldExpire = true;\n expirationEvent = event as E;\n\n if (runningCallbacksCount === 0) {\n expire();\n }\n });\n }\n\n const run = async () => {\n getTriggerPromise(trigger).then(\n (event) => {\n if (expired) {\n return;\n }\n\n runningCallbacksCount++;\n events.started.emit({ config, event });\n\n try {\n Promise.resolve(callback(event))\n .then((result) => {\n flush().then(() => {\n events.fulfilled.emit({ config, event, result });\n });\n })\n .catch((error) => {\n events.rejected.emit(error);\n })\n .finally(() => {\n runningCallbacksCount--;\n\n if (checkShouldExpire() && runningCallbacksCount === 0) {\n expire();\n return;\n }\n\n if (strategy === 'cyclic') {\n queueMicrotask(run);\n }\n });\n } catch (error) {\n runningCallbacksCount--;\n events.rejected.emit(error);\n }\n\n if (strategy === 'fork') {\n queueMicrotask(run);\n }\n },\n () => {\n if (checkShouldExpire() && runningCallbacksCount === 0) {\n expire();\n return;\n }\n\n queueMicrotask(run);\n },\n );\n };\n\n const then: Scenario<T, R, E>['then'] = (resolve) => {\n if (!isFiniteScenario) {\n console.warn(\n 'You seem to await an infinite scenario. This causes a memory leak in your application.',\n );\n }\n\n if (!isFunction(resolve)) {\n return Promise.resolve(events.settled) as any;\n }\n\n return events.settled.then(resolve);\n };\n\n const scenarioNode: Scenario<T, R, E> = { config, events, then };\n\n registry.register(scenarioNode);\n\n run();\n\n return scenarioNode;\n}\n\nexport default scenario;\n","import { AsyncStatus, SystemTag } from '../constants';\nimport { AwaiEvent } from '../core';\nimport { registry } from '../global';\nimport { getAggregatedAsyncStatus, getUniqueId, isFunction, isReadableAsyncState } from '../lib';\nimport scenario from '../scenario';\nimport { type InferReadableType, type ReadableAsyncState, type ReadableState } from '../types';\n\nimport type { CleanupCallback, Config, Effect } from './types';\n\nconst getConfig = (customConfig: Partial<Config> = {}): Config => ({\n ...customConfig,\n id: customConfig.id ?? getUniqueId(effect.name),\n tags: [SystemTag.EFFECT, ...(customConfig.tags ?? [])],\n});\n\nconst effect = <\n T extends (ReadableState<any> | ReadableAsyncState<any>)[],\n V extends { [K in keyof T]: InferReadableType<T[K]> },\n>(\n states: [...T],\n effect: (...values: V) => CleanupCallback | void,\n customConfig?: Partial<Config>,\n): Effect<T, V> => {\n const config = getConfig(customConfig);\n const asyncStates = states.filter(isReadableAsyncState);\n\n let cleanup: ReturnType<typeof effect>;\n\n const events: Effect<T, V>['events'] = {\n cleared: new AwaiEvent(),\n started: new AwaiEvent(),\n };\n\n const runEffect = () => {\n const values = states.map((state) => state.get()) as V;\n const status = getAggregatedAsyncStatus(asyncStates);\n\n if (status !== AsyncStatus.FULFILLED) {\n return;\n }\n\n events.started.emit({ states, values });\n\n cleanup = effect(...values);\n };\n\n queueMicrotask(() => {\n scenario(\n () => Promise.race(states.map((state) => state.events.changed)),\n () => {\n if (isFunction(cleanup)) {\n cleanup();\n events.cleared.emit({ states });\n }\n\n runEffect();\n },\n { tags: [SystemTag.CORE_NODE] },\n );\n\n queueMicrotask(runEffect);\n });\n\n const effectNode: Effect<T, V> = { config, events };\n\n registry.register(effectNode);\n\n return effectNode;\n};\n\nexport default effect;\n","import { SystemTag } from '../constants';\nimport { AwaiEvent, flush } from '../core';\nimport { getUniqueId, isFunction } from '../lib';\nimport { registry } from '../global';\n\nimport type { Config, State } from './types';\n\nconst getConfig = (customConfig: Partial<Config> = {}): Config => ({\n ...customConfig,\n id: customConfig.id ?? getUniqueId(state.name),\n tags: [SystemTag.STATE, ...(customConfig.tags ?? [])],\n});\n\nconst state = <T>(initialValue: T, customConfig?: Partial<Config>): State<T> => {\n const config = getConfig(customConfig);\n\n let value = initialValue;\n\n const events = {\n changed: new AwaiEvent<T>(),\n };\n\n const set: State<T>['set'] = (nextValueOrResolver) => {\n let newValue = isFunction(nextValueOrResolver)\n ? nextValueOrResolver(value)\n : nextValueOrResolver;\n\n if (!Object.is(newValue, value)) {\n value = newValue;\n events.changed.emit(newValue);\n }\n\n return flush().then(() => newValue);\n };\n\n const get = () => value;\n\n const then: State<T>['then'] = async (resolve) => {\n if (!isFunction(resolve)) {\n return value as any;\n }\n\n return resolve(value);\n };\n\n const stateNode: State<T> = { config, events, get, set, then };\n\n registry.register(stateNode);\n\n return stateNode;\n};\n\nexport default state;\n","import asyncState, { type AsyncState } from '../async-state';\nimport { SystemTag } from '../constants';\nimport { AwaiEvent, flush } from '../core';\nimport { registry } from '../global';\nimport { getUniqueId, isFunction } from '../lib';\nimport scenario from '../scenario';\nimport state, { type State } from '../state';\nimport type { Id } from '../types';\n\nimport type { Config, FamilyState } from './types';\n\nconst getConfig = (customConfig: Partial<Config> = {}): Config => ({\n ...customConfig,\n id: customConfig.id ?? getUniqueId(familyState.name),\n tags: [SystemTag.FAMILY_STATE, ...(customConfig.tags ?? [])],\n});\n\nconst familyState = <\n T,\n Initializer extends (id: Id) => T | Promise<T>,\n Family extends Record<Id, NodeType>,\n NodeType extends State<any> | AsyncState<any> = ReturnType<Initializer> extends PromiseLike<\n infer Q\n >\n ? AsyncState<Q>\n : State<ReturnType<Initializer>>,\n>(\n initializer: Initializer,\n customConfig?: Partial<Config>,\n): FamilyState<NodeType> => {\n const config = getConfig(customConfig);\n\n let family: Family = {} as Family;\n\n const events = {\n changed: new AwaiEvent<Record<Id, NodeType>>(),\n stateCreated: new AwaiEvent<Id>(),\n };\n\n const getNode = (id: Id): NodeType => {\n if (id in family) {\n return family[id];\n }\n\n const initialValue = initializer(id);\n\n const stateNode =\n initialValue instanceof Promise\n ? asyncState(initialValue, { tags: [SystemTag.CORE_NODE] })\n : state(initialValue, { tags: [SystemTag.CORE_NODE] });\n\n family = { ...family, [id]: stateNode };\n events.stateCreated.emit(id);\n events.changed.emit(family);\n\n scenario(\n stateNode.events.changed,\n () => {\n events.changed.emit(family);\n },\n { tags: [SystemTag.CORE_NODE] },\n );\n\n return stateNode as NodeType;\n };\n\n const setNode = async (id: Id, stateNode: NodeType) => {\n if (id in family) {\n throw new Error(`Cannot set node. Node with id \"${id}\" already exists.`);\n }\n\n family = { ...family, [id]: stateNode };\n\n scenario(\n stateNode.events.changed,\n () => {\n events.changed.emit(family);\n },\n { tags: [SystemTag.CORE_NODE] },\n );\n\n events.changed.emit(family);\n\n await flush();\n };\n\n const get = () => {\n return family;\n };\n\n const then: FamilyState<NodeType>['then'] = async (resolve) => {\n if (!isFunction(resolve)) {\n return family as any;\n }\n\n return resolve(family);\n };\n\n const familyStateNode: FamilyState<NodeType> = { config, events, get, getNode, setNode, then };\n\n registry.register(familyStateNode);\n\n return familyStateNode;\n};\n\nexport default familyState;\n","import { AsyncStatus, SystemTag } from '../constants';\nimport { AwaiEvent } from '../core';\nimport { registry } from '../global';\nimport {\n fork,\n getAggregatedAsyncStatus,\n getUniqueId,\n isFunction,\n isReadableAsyncState,\n race,\n} from '../lib';\nimport scenario from '../scenario';\nimport type { InferReadableType, ReadableAsyncState, ReadableState } from '../types';\n\nimport type { AsyncConfig, AsyncSelector, VersionIgnoredEvent } from './types';\n\nconst getConfig = (customConfig: Partial<AsyncConfig> = {}): AsyncConfig => ({\n ...customConfig,\n id: customConfig.id ?? getUniqueId(asyncSelector.name),\n tags: [SystemTag.ASYNC_SELECTOR, ...(customConfig.tags ?? [])],\n});\n\nconst asyncSelector = <T extends (ReadableState | ReadableAsyncState)[], U>(\n states: T,\n predicate: (...values: { [K in keyof T]: InferReadableType<T[K]> }) => U,\n customConfig?: Partial<AsyncConfig>,\n): AsyncSelector<U> => {\n type StatesValues = { [K in keyof T]: InferReadableType<T[K]> };\n\n const config = getConfig(customConfig);\n const asyncStates = states.filter(isReadableAsyncState);\n\n let error: AggregateError | unknown | null = null;\n let value: U | undefined;\n let isLoading: boolean = true;\n let version = 0;\n let lastPendingVersion: number = version;\n\n const events: AsyncSelector<U>['events'] = {\n changed: new AwaiEvent<U | undefined>(),\n fulfilled: new AwaiEvent<U>(),\n ignored: new AwaiEvent<VersionIgnoredEvent<U>>(),\n rejected: new AwaiEvent<unknown>(),\n requested: new AwaiEvent<void>(),\n };\n\n const getStatus = () => {\n if (isLoading) {\n return AsyncStatus.PENDING;\n }\n\n const aggregatedStatus = getAggregatedAsyncStatus(asyncStates);\n\n return error !== null && aggregatedStatus === AsyncStatus.FULFILLED\n ? AsyncStatus.REJECTED\n : aggregatedStatus;\n };\n\n const determineNextVersion = async () => {\n const currentPendingVersion = (lastPendingVersion + 1) % Number.MAX_SAFE_INTEGER;\n lastPendingVersion = currentPendingVersion;\n\n const status = getAggregatedAsyncStatus(asyncStates);\n const errors = asyncStates.map((state) => state.getAsync().error).filter(Boolean);\n\n if (status === AsyncStatus.PENDING) {\n isLoading = true;\n }\n\n events.requested.emit();\n\n if (errors.length > 0) {\n error = new AggregateError(errors);\n value = undefined;\n isLoading = status === AsyncStatus.PENDING;\n version = lastPendingVersion;\n events.rejected.emit(error);\n events.changed.emit(value);\n return;\n }\n\n if (status === AsyncStatus.FULFILLED) {\n const values = states.map((state) => state.get()) as StatesValues;\n\n fork(async () => {\n isLoading = true;\n\n try {\n const newValue = await predicate(...values);\n const isChanged = !Object.is(newValue, value);\n\n if (currentPendingVersion !== lastPendingVersion) {\n events.ignored.emit({ value: newValue, version: currentPendingVersion });\n return;\n }\n\n error = null;\n value = newValue;\n\n events.fulfilled.emit(newValue);\n\n if (isChanged) {\n events.changed.emit(value);\n }\n } catch (caughtError) {\n if (currentPendingVersion !== lastPendingVersion) {\n events.ignored.emit({ error: caughtError, version: currentPendingVersion });\n return;\n }\n\n const isChanged = typeof value !== 'undefined';\n\n error = caughtError;\n value = undefined;\n\n events.rejected.emit(caughtError);\n\n if (isChanged) {\n events.changed.emit(value);\n }\n } finally {\n if (currentPendingVersion === lastPendingVersion) {\n version = lastPendingVersion;\n isLoading = false;\n }\n }\n });\n }\n };\n\n scenario(\n async () => {\n const abortController = new AbortController();\n const abortSignal = abortController.signal;\n await Promise.race(\n states.map((state) => {\n return isReadableAsyncState(state)\n ? race(\n [state.events.requested, state.events.rejected, state.events.fulfilled],\n abortSignal,\n )\n : state.events.changed.abortable(abortSignal);\n }),\n );\n abortController.abort();\n },\n determineNextVersion,\n { tags: [SystemTag.CORE_NODE] },\n );\n\n const get = () => value;\n\n const getAsync = () => ({ error, isLoading, value });\n\n const getPromise = async (): Promise<U> => {\n while (isLoading) {\n await race([events.fulfilled, events.rejected]);\n }\n\n if (error) {\n throw error;\n }\n\n return value!;\n };\n\n const then: AsyncSelector<U>['then'] = async (resolve) => {\n if (!isFunction(resolve)) {\n return getPromise() as any;\n }\n\n return resolve(await getPromise());\n };\n\n const selectorNode = {\n config,\n events,\n get,\n getAsync,\n getPromise,\n getStatus,\n then,\n };\n\n queueMicrotask(determineNextVersion);\n\n registry.register(selectorNode);\n\n return selectorNode;\n};\n\nexport default asyncSelector;\n","import { SystemTag } from '../constants';\nimport { AwaiEvent } from '../core';\nimport { registry } from '../global';\nimport { getUniqueId, isFunction, race } from '../lib';\nimport scenario from '../scenario';\nimport type { InferReadableType, ReadableAsyncState, ReadableState } from '../types';\n\nimport type { SyncConfig, SyncSelector } from './types';\n\nconst getConfig = (customConfig: Partial<SyncConfig> = {}): SyncConfig => ({\n ...customConfig,\n id: customConfig.id ?? getUniqueId(syncSelector.name),\n tags: [SystemTag.SELECTOR, ...(customConfig.tags ?? [])],\n});\n\nconst syncSelector = <T extends (ReadableState | ReadableAsyncState)[], U>(\n states: [...T],\n predicate: (...values: { [K in keyof T]: InferReadableType<T[K]> }) => U,\n customConfig?: Partial<SyncConfig>,\n): SyncSelector<U> => {\n const config = getConfig(customConfig);\n let value: U;\n\n const events = {\n changed: new AwaiEvent<U>(),\n };\n\n const get = () => {\n const values = states.map((state) => state.get()) as {\n [K in keyof T]: InferReadableType<T[K]>;\n };\n return predicate(...values);\n };\n\n const then: SyncSelector<U>['then'] = async (resolve) => {\n if (!isFunction(resolve)) {\n return get() as any;\n }\n\n return resolve(get());\n };\n\n scenario(\n () => race(states.map((state) => state.events.changed)),\n () => {\n const newValue = get();\n\n if (!Object.is(newValue, value)) {\n value = newValue;\n events.changed.emit(newValue);\n }\n },\n { tags: [SystemTag.CORE_NODE] },\n );\n\n value = get();\n\n const selectorNode: SyncSelector<U> = { config, events, get, then };\n\n registry.register(selectorNode);\n\n return selectorNode;\n};\n\nexport default syncSelector;\n","import { isReadableAsyncState } from '../lib';\nimport { type InferReadableType } from '../types';\n\nimport asyncSelector from './asyncSelector';\nimport syncSelector from './syncSelector';\nimport type { Config, Selector } from './types';\n\nconst selector = <T extends any[], U>(\n states: [...T],\n predicate: (...values: { [K in keyof T]: InferReadableType<T[K]> }) => U,\n customConfig?: Partial<Config<T, U>>,\n): Selector<T, U> => {\n const isAsyncPredicate = predicate.constructor.name === 'AsyncFunction';\n\n const state =\n isAsyncPredicate || states.some((state) => isReadableAsyncState(state))\n ? asyncSelector(states, predicate, customConfig)\n : syncSelector(states, predicate, customConfig);\n\n return state as Selector<T, U>;\n};\n\nexport default selector;\n"],"names":["AsyncStatus","SystemTag","__publicField","node","getConfig","effect","state"],"mappings":";;AAAA,IAAK,WAAA,qBAAAA,YAAAA,KAAL;AACE,EAAAA,aAAA,WAAA,CAAA,GAAY,WAAA;AACZ,EAAAA,aAAA,SAAA,CAAA,GAAU,SAAA;AACV,EAAAA,aAAA,UAAA,CAAA,GAAW,UAAA;AAHR,EAAA,OAAAA,YAAAA;AAAA,CAAA,EAAA,WAAA,IAAA,EAAA;;ACAL,IAAK,SAAA,qBAAAC,UAAAA,KAAL;AACE,EAAAA,WAAA,QAAA,CAAA,GAAS,cAAA;AACT,EAAAA,WAAA,gBAAA,CAAA,GAAiB,sBAAA;AACjB,EAAAA,WAAA,aAAA,CAAA,GAAc,mBAAA;AACd,EAAAA,WAAA,WAAA,CAAA,GAAY,iBAAA;AACZ,EAAAA,WAAA,QAAA,CAAA,GAAS,cAAA;AACT,EAAAA,WAAA,cAAA,CAAA,GAAe,oBAAA;AACf,EAAAA,WAAA,UAAA,CAAA,GAAW,gBAAA;AACX,EAAAA,WAAA,UAAA,CAAA,GAAW,gBAAA;AACX,EAAAA,WAAA,OAAA,CAAA,GAAQ,aAAA;AATL,EAAA,OAAAA,UAAAA;AAAA,CAAA,EAAA,SAAA,IAAA,EAAA;;ACAL,MAAM,KAAA,GAAQ,CAAC,EAAA,KAA8B,IAAI,OAAA,CAAQ,CAAC,OAAA,KAAY,UAAA,CAAW,OAAA,EAAS,EAAE,CAAC;;ACA7F,MAAM,IAAA,GAAO,OAAO,MAAA,KAA+B;AACjD,EAAA,MAAM,MAAA,EAAO;AACf;;ACCA,MAAM,wBAAA,GAA2B,CAC/B,MAAA,KACgB;AAChB,EAAA,MAAM,QAAA,GAAW,OAAO,IAAA,CAAK,CAAC,UAAU,KAAA,CAAM,SAAA,EAAU,KAAM,WAAA,CAAY,QAAQ,CAAA;AAElF,EAAA,IAAI,QAAA,EAAU;AACZ,IAAA,OAAO,WAAA,CAAY,QAAA;AAAA,EACrB;AAEA,EAAA,MAAM,SAAA,GAAY,OAAO,IAAA,CAAK,CAAC,UAAU,KAAA,CAAM,SAAA,EAAU,KAAM,WAAA,CAAY,OAAO,CAAA;AAElF,EAAA,IAAI,SAAA,EAAW;AACb,IAAA,OAAO,WAAA,CAAY,OAAA;AAAA,EACrB;AAEA,EAAA,OAAO,WAAA,CAAY,SAAA;AACrB;;ACnBA,MAAM,gBAAwC,EAAC;AAE/C,MAAM,WAAA,GAAc,CAAC,KAAA,GAAQ,SAAA,KAAc;AACzC,EAAA,MAAM,MAAA,GAAA,CAAU,aAAA,CAAc,KAAK,CAAA,IAAK,CAAA,IAAK,CAAA;AAC7C,EAAA,aAAA,CAAc,KAAK,CAAA,GAAI,MAAA;AACvB,EAAA,OAAO,CAAA,KAAA,EAAS,KAAK,CAAA,CAAA,EAAK,MAAM,CAAA,CAAA;AAClC,CAAA;;ACNA,MAAM,gBAAgB,CAAC,KAAA,KACrB,OAAO,WAAA,KAAgB,eAAe,KAAA,YAAiB,WAAA;;ACEzD,MAAM,UAAA,GAAa,CAAC,IAAA,KAA4B,IAAA,CAAK,OAAO,IAAA,CAAK,QAAA,CAAS,UAAU,SAAS,CAAA;;ACH7F,MAAM,UAAA,GAAa,CAAC,KAAA,KAAsC,OAAO,KAAA,KAAU,UAAA;;ACA3E,MAAM,WAAW,CAAC,KAAA,KAChB,OAAO,KAAA,KAAU,YAAY,KAAA,KAAU,IAAA;;ACEzC,MAAM,aAAA,GAAgB,CAAI,KAAA,KACxB,QAAA,CAAS,KAAK,MAAM,KAAA,YAAiB,OAAA,IAAW,UAAA,CAAW,KAAA,CAAM,IAAI,CAAA;;ACDvE,MAAM,sBAAsB,CAC1B,KAAA,KAEA,WAAW,KAAK,CAAA,IAAK,cAAiB,KAAK,CAAA;;ACD7C,MAAM,oBAAA,GAAuB,CAAI,KAAA,KAC/B,QAAA,CAAS,KAAK,CAAA,IACd,UAAA,CAAW,MAAM,GAAG,CAAA,IACpB,WAAW,KAAA,CAAM,QAAQ,KACzB,UAAA,CAAW,KAAA,CAAM,UAAU,CAAA,IAC3B,UAAA,CAAW,MAAM,IAAI;;ACPvB,MAAM,IAAA,GAAO,OAA0C,QAAA,EAAa,WAAA,KAA8B;AAChG,EAAA,IAAI,aAAa,OAAA,EAAS;AACxB,IAAA,OAAO,OAAA,CAAQ,MAAA,CAAO,WAAA,CAAY,MAAM,CAAA;AAAA,EAC1C;AAEA,EAAA,MAAM,uBAAA,GAA0B,IAAI,eAAA,EAAgB;AAEpD,EAAA,MAAM,QAAQ,MAAM;AAClB,IAAA,uBAAA,CAAwB,KAAA,EAAM;AAC9B,IAAA,WAAA,EAAa,mBAAA,CAAoB,SAAS,KAAK,CAAA;AAAA,EACjD,CAAA;AAEA,EAAA,WAAA,EAAa,gBAAA,CAAiB,SAAS,KAAK,CAAA;AAE5C,EAAA,MAAM,iBAAA,GAAoB,QAAA,CAAS,GAAA,CAAI,CAAC,OAAA,KAAY;AAClD,IAAA,OAAO,YAAY,OAAO,CAAA,GAAI,QAAQ,SAAA,CAAU,uBAAA,CAAwB,MAAM,CAAA,GAAI,OAAA;AAAA,EACpF,CAAC,CAAA;AAED,EAAA,OAAO,MAAM,OAAA,CAAQ,IAAA,CAAK,iBAAiB,CAAA,CAAE,QAAQ,KAAK,CAAA;AAC5D;AAMA,MAAM,WAAA,GAAc,CAAI,OAAA,KACtB,aAAA,CAAiB,OAAO,KAAK,WAAA,IAAe,OAAA,IAAW,UAAA,CAAW,OAAA,CAAQ,SAAS,CAAA;;AC7BrF,MAAM,WAAA,GAAc,CAAC,EAAA,KAA8B;AACjD,EAAA,OAAO,IAAI,QAAQ,CAAC,CAAA,EAAG,WAAW,UAAA,CAAW,MAAA,EAAQ,EAAE,CAAC,CAAA;AAC1D;;;;;ACcA,MAAqB,SAAA,CAAU;AAAA,EAA/B,WAAA,GAAA;AACE,IAAAC,eAAA,CAAA,IAAA,EAAQ,kBAA6B,EAAC,CAAA;AACtC,IAAAA,eAAA,CAAA,IAAA,EAAQ,aAAA,EAAc,KAAA,CAAA;AAOtB,IAAAA,eAAA,CAAA,IAAA,EAAQ,WAAU,YAAY;AAC5B,MAAA,IAAI,IAAA,CAAK,WAAA,IAAe,IAAA,CAAK,cAAA,CAAe,WAAW,CAAA,EAAG;AACxD,QAAA;AAAA,MACF;AAEA,MAAA,IAAA,CAAK,WAAA,GAAc,IAAA;AACnB,MAAA,MAAM,QAAA,GAAW,IAAA,CAAK,cAAA,CAAe,KAAA,EAAM;AAC3C,MAAA,QAAA,EAAS;AAET,MAAA,cAAA,CAAe,MAAM;AACnB,QAAA,IAAA,CAAK,WAAA,GAAc,KAAA;AACnB,QAAA,IAAA,CAAK,OAAA,EAAQ;AAAA,MACf,CAAC,CAAA;AAAA,IACH,CAAA,CAAA;AAAA,EAAA;AAAA,EAlBO,QAAQ,QAAA,EAAoB;AACjC,IAAA,IAAA,CAAK,cAAA,CAAe,KAAK,QAAQ,CAAA;AACjC,IAAA,IAAA,CAAK,OAAA,EAAQ;AAAA,EACf;AAgBF;;ACrCA,MAAM,KAAA,GAAQ,IAAI,SAAA;;;;;ACIlB,MAAqB,SAAA,CAAoB;AAAA,EAAzC,WAAA,GAAA;AACE,IAAAA,eAAA,CAAA,IAAA,EAAQ,aAA2B,EAAC,CAAA;AAEpC,IAAAA,eAAA,CAAA,IAAA,EAAA,MAAA,EAA+B,CAAC,WAAA,KAAgB;AAC9C,MAAA,OAAO,IAAI,OAAA,CAAa,CAAC,OAAA,EAAS,MAAA,KAAW;AAC3C,QAAA,IAAA,CAAK,SAAA,CAAU,IAAA,CAAK,CAAC,KAAA,KAAa;AAChC,UAAA,IAAI;AACF,YAAA,MAAM,SAAS,UAAA,CAAW,WAAW,CAAA,GAAI,WAAA,CAAY,KAAK,CAAA,GAAI,KAAA;AAC9D,YAAA,OAAA,CAAQ,MAAM,CAAA;AAAA,UAChB,SAAS,KAAA,EAAO;AACd,YAAA,MAAA,CAAO,KAAK,CAAA;AAAA,UACd;AAAA,QACF,CAAC,CAAA;AAAA,MACH,CAAC,CAAA;AAAA,IACH,CAAA,CAAA;AAAA,EAAA;AAAA,EAEA,UAAU,WAAA,EAAsC;AAC9C,IAAA,IAAI,YAAY,OAAA,EAAS;AACvB,MAAA,OAAO,OAAA,CAAQ,MAAA,CAAO,WAAA,CAAY,MAAM,CAAA;AAAA,IAC1C;AAEA,IAAA,OAAO,IAAI,OAAA,CAAW,CAAC,OAAA,EAAS,MAAA,KAAW;AACzC,MAAA,MAAM,kBAAA,GAAkC,CAAC,KAAA,KAAa;AACpD,QAAA,WAAA,CAAY,mBAAA,CAAoB,SAAS,eAAe,CAAA;AACxD,QAAA,OAAA,CAAQ,KAAK,CAAA;AAAA,MACf,CAAA;AAEA,MAAA,IAAA,CAAK,SAAA,CAAU,KAAK,kBAAkB,CAAA;AAEtC,MAAA,MAAM,kBAAkB,MAAM;AAC5B,QAAA,IAAA,CAAK,YAAY,IAAA,CAAK,SAAA,CAAU,OAAO,CAAC,OAAA,KAAY,YAAY,kBAAkB,CAAA;AAClF,QAAA,MAAA,CAAO,YAAY,MAAM,CAAA;AAAA,MAC3B,CAAA;AAEA,MAAA,WAAA,CAAY,iBAAiB,OAAA,EAAS,eAAA,EAAiB,EAAE,IAAA,EAAM,MAAM,CAAA;AAAA,IACvE,CAAC,CAAA;AAAA,EACH;AAAA,EAEA,KAAK,KAAA,EAAU;AACb,IAAA,KAAA,CAAM,QAAQ,YAAY;AACxB,MAAA,MAAM,WAAW,IAAA,CAAK,SAAA;AACtB,MAAA,IAAA,CAAK,YAAY,EAAC;AAElB,MAAA,KAAA,MAAW,WAAW,QAAA,EAAU;AAC9B,QAAA,OAAA,CAAQ,KAAK,CAAA;AAAA,MACf;AAAA,IACF,CAAC,CAAA;AAAA,EACH;AAAA,EAEA,MAAM,OAAO,SAAA,EAA+B;AAC1C,IAAA,OAAO,IAAI,OAAA,CAAQ,OAAO,OAAA,KAAY;AACpC,MAAA,OAAO,IAAA,EAAM;AACX,QAAA,MAAM,WAAW,MAAM,IAAA;AACvB,QAAA,MAAM,YAAA,GAAe,OAAA,CAAQ,SAAA,CAAU,QAAQ,CAAC,CAAA;AAEhD,QAAA,IAAI,YAAA,EAAc;AAChB,UAAA,OAAA,CAAQ,QAAQ,CAAA;AAChB,UAAA;AAAA,QACF;AAAA,MACF;AAAA,IACF,CAAC,CAAA;AAAA,EACH;AACF;;ACpEA,MAAM,KAAA,GAAQ,MAAM,IAAI,OAAA,CAAc,CAAC,OAAA,KAAY,UAAA,CAAW,OAAA,EAAS,CAAC,CAAC;;;;;ACKzE,MAAqB,QAAA,CAA6B;AAAA,EAAlD,WAAA,GAAA;AACE,IAAA,aAAA,CAAA,IAAA,EAAQ,UAAc,EAAC,CAAA;AACvB,IAAA,aAAA,CAAA,IAAA,EAAgB,QAAA,EAAS;AAAA,MACvB,YAAA,EAAc,IAAI,SAAA,EAA6B;AAAA,MAC/C,UAAA,EAAY,IAAI,SAAA;AAAa,KAC/B,CAAA;AAAA,EAAA;AAAA,EAEA,MAAa,SAAS,IAAA,EAAS;AAC7B,IAAA,IAAI,UAAA,CAAW,IAAI,CAAA,EAAG;AACpB,MAAA;AAAA,IACF;AAEA,IAAA,IAAA,CAAK,MAAA,CAAO,KAAK,IAAI,CAAA;AACrB,IAAA,IAAA,CAAK,MAAA,CAAO,UAAA,CAAW,IAAA,CAAK,IAAI,CAAA;AAAA,EAClC;AAAA,EAEA,MAAa,WAAW,EAAA,EAA8B;AACpD,IAAA,MAAM,IAAA,GAAO,KAAK,MAAA,CAAO,IAAA,CAAK,CAACC,KAAAA,KAASA,KAAAA,CAAK,MAAA,CAAO,EAAA,KAAO,EAAE,CAAA;AAE7D,IAAA,IAAI,CAAC,IAAA,EAAM;AACT,MAAA;AAAA,IACF;AAEA,IAAA,IAAA,CAAK,MAAA,GAAS,KAAK,MAAA,CAAO,MAAA,CAAO,CAACA,KAAAA,KAASA,KAAAA,CAAK,MAAA,CAAO,EAAA,KAAO,EAAE,CAAA;AAChE,IAAA,IAAA,CAAK,MAAA,CAAO,YAAA,CAAa,IAAA,CAAK,EAAE,CAAA;AAAA,EAClC;AAAA,EAEA,IAAI,KAAA,GAAQ;AACV,IAAA,OAAO,CAAC,GAAG,IAAA,CAAK,MAAM,CAAA;AAAA,EACxB;AACF;;ACjCA,MAAM,QAAA,GAAW,IAAI,QAAA;;ACKrB,MAAMC,WAAA,GAAY,CAAC,YAAA,GAAgC,EAAC,MAAe;AAAA,EACjE,GAAG,YAAA;AAAA,EACH,EAAA,EAAI,YAAA,CAAa,EAAA,IAAM,WAAA,CAAY,OAAO,IAAI,CAAA;AAAA,EAC9C,IAAA,EAAM,CAAC,SAAA,CAAU,MAAA,EAAQ,GAAI,YAAA,CAAa,IAAA,IAAQ,EAAG;AACvD,CAAA,CAAA;AASA,SAAS,UACJ,IAAA,EAC+C;AAGlD,EAAA,MAAM,WAAA,GAAc,UAAA,CAAW,IAAA,CAAK,CAAC,CAAC,CAAA;AACtC,EAAA,MAAM,CAAC,UAAU,YAAY,CAAA,GAAI,cAC5B,IAAA,GACA,GAAG,GAAG,IAAI,CAAA;AAEf,EAAA,MAAM,MAAA,GAASA,YAAU,YAAY,CAAA;AAErC,EAAA,MAAM,MAAA,GAAS;AAAA,IACb,OAAA,EAAS,IAAI,SAAA,EAAU;AAAA,IACvB,QAAA,EAAU,WAAA,GAAc,IAAI,SAAA,EAAU,GAAI,MAAA;AAAA,IAC1C,SAAA,EAAW,WAAA,GAAc,IAAI,SAAA,EAAU,GAAI;AAAA,GAC7C;AAEA,EAAA,MAAM,MAAA,GAAS,UAAU,UAAA,KAAqB;AAC5C,IAAA,MAAM,YAAA,GAAe,YAAY,YAAY,CAAA;AAE7C,IAAA,MAAA,CAAO,QAAQ,IAAA,CAAK,EAAE,WAAW,UAAA,EAAY,MAAA,EAAQ,cAAc,CAAA;AAEnE,IAAA,IAAI;AACF,MAAA,MAAM,iBAA2C,UAAA,CAAW,QAAQ,IAChE,QAAA,CAAS,GAAG,UAAU,CAAA,GACrB,KAAA,CAAA;AAEL,MAAA,MAAM,QAAQ,MAAM,cAAA;AACpB,MAAA,MAAM,KAAA,EAAM;AACZ,MAAA,MAAA,CAAO,SAAA,EAAW,KAAK,EAAE,SAAA,EAAW,YAAY,MAAA,EAAQ,MAAA,EAAQ,KAAA,EAAO,YAAA,EAAc,CAAA;AACrF,MAAA,OAAO,KAAA;AAAA,IACT,SAAS,KAAA,EAAO;AACd,MAAA,MAAA,CAAO,UAAU,IAAA,CAAK;AAAA,QACpB,SAAA,EAAW,UAAA;AAAA,QACX,MAAA;AAAA,QACA,KAAA;AAAA,QACA;AAAA,OACD,CAAA;AACD,MAAA,MAAM,KAAA;AAAA,IACR;AAAA,EACF,CAAA;AAEA,EAAA,MAAM,aAAa,MAAA,CAAO,MAAA,CAAO,QAAQ,EAAE,MAAA,EAAQ,QAAQ,CAAA;AAE3D,EAAA,QAAA,CAAS,SAAS,UAAU,CAAA;AAE5B,EAAA,OAAO,UAAA;AACT;;AC7DA,MAAMA,WAAA,GAAY,CAAC,YAAA,GAAgC,EAAC,MAAe;AAAA,EACjE,GAAG,YAAA;AAAA,EACH,EAAA,EAAI,YAAA,CAAa,EAAA,IAAM,WAAA,CAAY,WAAW,IAAI,CAAA;AAAA,EAClD,IAAA,EAAM,CAAC,SAAA,CAAU,WAAA,EAAa,GAAI,YAAA,CAAa,IAAA,IAAQ,EAAG;AAC5D,CAAA,CAAA;AAEA,MAAM,UAAA,GAAa,CACjB,YAAA,EACA,YAAA,KACkB;AAClB,EAAA,MAAM,MAAA,GAASA,YAAU,YAAY,CAAA;AACrC,EAAA,MAAM,mBAAA,GAAsB,oBAAoB,YAAY,CAAA;AAC5D,EAAA,IAAI,OAAA,GAAmB,sBAAsB,CAAA,GAAI,CAAA;AACjD,EAAA,IAAI,kBAAA,GAA8B,OAAA;AAClC,EAAA,IAAI,SAAsB,WAAA,CAAY,SAAA;AACtC,EAAA,IAAI,KAAA,GAAiB,IAAA;AACrB,EAAA,IAAI,KAAA,GAAuB,sBAAsB,MAAA,GAAY,YAAA;AAE7D,EAAA,MAAM,MAAA,GAAkC;AAAA,IACtC,OAAA,EAAS,IAAI,SAAA,EAAyB;AAAA,IACtC,SAAA,EAAW,IAAI,SAAA,EAAa;AAAA,IAC5B,OAAA,EAAS,IAAI,SAAA,EAAkC;AAAA,IAC/C,QAAA,EAAU,IAAI,SAAA,EAAmB;AAAA,IACjC,SAAA,EAAW,IAAI,SAAA;AAAgB,GACjC;AAEA,EAAA,MAAM,YAAwC,MAAM,MAAA;AAEpD,EAAA,MAAM,GAAA,GAA4B,OAAO,mBAAA,KAAwB;AAC/D,IAAA,MAAM,qBAAA,GAAA,CAAkC,kBAAA,GAAqB,CAAA,IAAK,MAAA,CAAO,gBAAA;AACzE,IAAA,kBAAA,GAAqB,qBAAA;AAErB,IAAA,IAAI;AACF,MAAA,IAAI,mBAAA,CAAoB,mBAAmB,CAAA,EAAG;AAC5C,QAAA,MAAA,GAAS,WAAA,CAAY,OAAA;AACrB,QAAA,MAAA,CAAO,UAAU,IAAA,EAAK;AAAA,MACxB;AAEA,MAAA,IAAI,QAAA,GAAW,WAAW,mBAAmB,CAAA,GACzC,MAAM,mBAAA,CAAoB,KAAK,IAC/B,MAAM,mBAAA;AACV,MAAA,MAAM,SAAA,GAAY,CAAC,MAAA,CAAO,EAAA,CAAG,UAAU,KAAK,CAAA;AAE5C,MAAA,IAAI,qBAAA,KAA0B,kBAAA,IAAsB,CAAC,SAAA,EAAW;AAC9D,QAAA,MAAA,CAAO,QAAQ,IAAA,CAAK,EAAE,OAAO,QAAA,EAAU,OAAA,EAAS,uBAAuB,CAAA;AACvE,QAAA;AAAA,MACF;AAEA,MAAA,KAAA,GAAQ,IAAA;AACR,MAAA,KAAA,GAAQ,QAAA;AACR,MAAA,MAAA,GAAS,WAAA,CAAY,SAAA;AAErB,MAAA,MAAA,CAAO,SAAA,CAAU,KAAK,QAAQ,CAAA;AAE9B,MAAA,IAAI,SAAA,EAAW;AACb,QAAA,MAAA,CAAO,OAAA,CAAQ,KAAK,KAAK,CAAA;AAAA,MAC3B;AAAA,IACF,SAAS,CAAA,EAAG;AACV,MAAA,IAAI,0BAA0B,kBAAA,EAAoB;AAChD,QAAA,MAAA,CAAO,QAAQ,IAAA,CAAK,EAAE,OAAO,CAAA,EAAG,OAAA,EAAS,uBAAuB,CAAA;AAChE,QAAA;AAAA,MACF;AAEA,MAAA,MAAM,SAAA,GAAY,CAAC,MAAA,CAAO,EAAA,CAAG,GAAG,KAAK,CAAA;AAErC,MAAA,KAAA,GAAQ,CAAA;AACR,MAAA,KAAA,GAAQ,MAAA;AACR,MAAA,MAAA,GAAS,WAAA,CAAY,QAAA;AAErB,MAAA,MAAA,CAAO,QAAA,CAAS,KAAK,KAAK,CAAA;AAE1B,MAAA,IAAI,SAAA,EAAW;AACb,QAAA,MAAA,CAAO,OAAA,CAAQ,KAAK,KAAK,CAAA;AAAA,MAC3B;AAAA,IACF;AAEA,IAAA,OAAA,GAAU,kBAAA;AACV,IAAA,MAAM,KAAA,EAAM;AAAA,EACd,CAAA;AAEA,EAAA,MAAM,MAA4B,MAAM,KAAA;AAExC,EAAA,MAAM,WAAsC,OAAO;AAAA,IACjD,KAAA;AAAA,IACA,SAAA,EAAW,WAAW,WAAA,CAAY,OAAA;AAAA,IAClC;AAAA,GACF,CAAA;AAEA,EAAA,MAAM,aAA0C,YAAY;AAC1D,IAAA,IAAI,YAAY,kBAAA,EAAoB;AAClC,MAAA,OAAO,KAAA;AAAA,IACT;AAEA,IAAA,MAAM,KAAK,CAAC,MAAA,CAAO,SAAA,EAAW,MAAA,CAAO,QAAQ,CAAC,CAAA;AAE9C,IAAA,IAAI,KAAA,EAAO;AACT,MAAA,MAAM,KAAA;AAAA,IACR;AAEA,IAAA,OAAO,KAAA;AAAA,EACT,CAAA;AAEA,EAAA,MAAM,IAAA,GAA+B,OAAO,OAAA,KAAY;AACtD,IAAA,IAAI,CAAC,UAAA,CAAW,OAAO,CAAA,EAAG;AACxB,MAAA,OAAO,UAAA,EAAW;AAAA,IACpB;AAEA,IAAA,OAAO,OAAA,CAAQ,MAAM,UAAA,EAAY,CAAA;AAAA,EACnC,CAAA;AAEA,EAAA,IAAI,mBAAA,EAAqB;AACvB,IAAA,GAAA,CAAI,YAAY,CAAA;AAAA,EAClB;AAEA,EAAA,MAAM,cAAA,GAAgC;AAAA,IACpC,MAAA;AAAA,IACA,MAAA;AAAA,IACA,GAAA;AAAA,IACA,QAAA;AAAA,IACA,UAAA;AAAA,IACA,SAAA;AAAA,IACA,GAAA;AAAA,IACA;AAAA,GACF;AAEA,EAAA,QAAA,CAAS,SAAS,cAAc,CAAA;AAEhC,EAAA,OAAO,cAAA;AACT;;ACrIA,MAAM,kBAAA,GAAqB,CACzB,qBAAA,EACA,UAAA,KACgC;AAChC,EAAA,IAAI,qBAAA,EAAuB;AACzB,IAAA,OAAO,MAAA;AAAA,EACT;AAEA,EAAA,IAAI,UAAA,EAAY;AACd,IAAA,OAAO,MAAA;AAAA,EACT;AAEA,EAAA,OAAO,QAAA;AACT,CAAA;;ACZA,MAAM,iBAAA,GAAoB,CAAI,OAAA,KAAoC;AAChE,EAAA,IAAI,CAAC,OAAA,EAAS;AACZ,IAAA,OAAO,OAAA,CAAQ,QAAQ,MAAc,CAAA;AAAA,EACvC;AAEA,EAAA,OAAO,UAAA,CAAW,OAAO,CAAA,GAAI,OAAA,EAAQ,GAAI,OAAA;AAC3C,CAAA;;ACPA,MAAM,oBAAA,GAAuB,CAAI,KAAA,KAA2D;AAC1F,EAAA,IAAI,OAAO,WAAA,KAAgB,WAAA,IAAe,KAAA,YAAiB,WAAA,EAAa;AACtE,IAAA,IAAI,MAAM,OAAA,EAAS;AACjB,MAAA,OAAO,OAAA,CAAQ,QAAQ,MAAS,CAAA;AAAA,IAClC;AAEA,IAAA,OAAO,IAAI,OAAA,CAAQ,CAAC,OAAA,KAAY;AAC9B,MAAA,KAAA,CAAM,gBAAA,CAAiB,SAAS,MAAM,OAAA,CAAQ,MAAS,CAAA,EAAG,EAAE,IAAA,EAAM,IAAA,EAAM,CAAA;AAAA,IAC1E,CAAC,CAAA;AAAA,EACH;AAEA,EAAA,OAAO,OAAA,CAAQ,QAAQ,KAAK,CAAA;AAC9B,CAAA;;ACNA,MAAMA,cAAY,CAChB,qBAAA,EACA,UAAA,EACA,YAAA,GAAmC,EAAC,MACrB;AAAA,EACf,GAAG,YAAA;AAAA,EACH,EAAA,EAAI,YAAA,CAAa,EAAA,IAAM,WAAA,CAAY,SAAS,IAAI,CAAA;AAAA,EAChD,QAAA,EAAU,YAAA,CAAa,QAAA,IAAY,kBAAA,CAAmB,uBAAuB,UAAU,CAAA;AAAA,EACvF,IAAA,EAAM,CAAC,SAAA,CAAU,QAAA,EAAU,GAAI,YAAA,CAAa,IAAA,IAAQ,EAAG;AACzD,CAAA,CAAA;AAaA,SAAS,YACJ,IAAA,EACgB;AACnB,EAAA,MAAM,UAAA,GAAa,UAAA,CAAW,IAAA,CAAK,CAAC,CAAC,CAAA;AAErC,EAAA,MAAM,OAAA,GAAU,UAAA,GAAc,IAAA,CAAK,CAAC,CAAA,GAAmB,MAAA;AACvD,EAAA,MAAM,WAAY,UAAA,GAAa,IAAA,CAAK,CAAC,CAAA,GAAI,KAAK,CAAC,CAAA;AAC/C,EAAA,MAAM,eAAgB,UAAA,GAAa,IAAA,CAAK,CAAC,CAAA,GAAI,KAAK,CAAC,CAAA;AACnD,EAAA,MAAM,qBAAA,GAAwB,UAAA,IAAc,QAAA,CAAS,IAAA,CAAK,CAAC,CAAC,CAAA,IAAK,IAAA,CAAK,CAAC,CAAA,CAAE,WAAA,KAAgB,OAAA;AAEzF,EAAA,MAAM,MAAA,GAASA,WAAA,CAAa,qBAAA,EAAuB,UAAA,EAAY,YAAY,CAAA;AAC3E,EAAA,MAAM,EAAE,QAAA,EAAU,KAAA,EAAM,GAAI,MAAA;AAC5B,EAAA,MAAM,gBAAA,GACJ,qBAAA,IAAyB,QAAA,KAAa,MAAA,IAAU,OAAO,KAAA,KAAU,WAAA;AACnE,EAAA,IAAI,eAAA;AACJ,EAAA,IAAI,qBAAA,GAAwB,CAAA;AAC5B,EAAA,IAAI,YAAA,GAAe,KAAA;AACnB,EAAA,IAAI,OAAA,GAAU,KAAA;AAEd,EAAA,MAAM,MAAA,GAAsC;AAAA,IAC1C,SAAA,EAAW,IAAI,SAAA,EAAU;AAAA,IACzB,QAAA,EAAU,IAAI,SAAA,EAAU;AAAA,IACxB,OAAA,EAAS,IAAI,SAAA,EAAU;AAAA,IACvB,OAAA,EAAS,IAAI,SAAA;AAAU,GACzB;AAEA,EAAA,MAAM,iBAAA,GAAoB,MACxB,QAAA,KAAa,MAAA,IACb,iBACC,aAAA,CAAc,KAAK,CAAA,GAAI,KAAA,CAAM,UAAU,KAAA,CAAA,KACvC,UAAA,CAAW,KAAK,CAAA,GAAI,OAAM,GAAI,KAAA,CAAA;AAEjC,EAAA,MAAM,SAAS,YAAY;AACzB,IAAA,IAAI,OAAA,EAAS;AACX,MAAA;AAAA,IACF;AAEA,IAAA,OAAA,GAAU,IAAA;AACV,IAAA,MAAM,KAAA,EAAM;AACZ,IAAA,MAAM,OAAO,OAAA,CAAQ,IAAA,CAAK,EAAE,KAAA,EAAO,eAAA,EAAiB,QAAQ,CAAA;AAC5D,IAAA,MAAM,KAAA,EAAM;AACZ,IAAA,MAAM,QAAA,CAAS,UAAA,CAAW,MAAA,CAAO,EAAE,CAAA;AAAA,EACrC,CAAA;AAEA,EAAA,IAAI,KAAA,IAAS,CAAC,UAAA,CAAW,KAAK,CAAA,EAAG;AAC/B,IAAA,oBAAA,CAAwB,KAAK,CAAA,CAAE,IAAA,CAAK,CAAC,KAAA,KAAU;AAC7C,MAAA,YAAA,GAAe,IAAA;AACf,MAAA,eAAA,GAAkB,KAAA;AAElB,MAAA,IAAI,0BAA0B,CAAA,EAAG;AAC/B,QAAA,MAAA,EAAO;AAAA,MACT;AAAA,IACF,CAAC,CAAA;AAAA,EACH;AAEA,EAAA,MAAM,MAAM,YAAY;AACtB,IAAA,iBAAA,CAAkB,OAAO,CAAA,CAAE,IAAA;AAAA,MACzB,CAAC,KAAA,KAAU;AACT,QAAA,IAAI,OAAA,EAAS;AACX,UAAA;AAAA,QACF;AAEA,QAAA,qBAAA,EAAA;AACA,QAAA,MAAA,CAAO,OAAA,CAAQ,IAAA,CAAK,EAAE,MAAA,EAAQ,OAAO,CAAA;AAErC,QAAA,IAAI;AACF,UAAA,OAAA,CAAQ,QAAQ,QAAA,CAAS,KAAK,CAAC,CAAA,CAC5B,IAAA,CAAK,CAAC,MAAA,KAAW;AAChB,YAAA,KAAA,EAAM,CAAE,KAAK,MAAM;AACjB,cAAA,MAAA,CAAO,UAAU,IAAA,CAAK,EAAE,MAAA,EAAQ,KAAA,EAAO,QAAQ,CAAA;AAAA,YACjD,CAAC,CAAA;AAAA,UACH,CAAC,CAAA,CACA,KAAA,CAAM,CAAC,KAAA,KAAU;AAChB,YAAA,MAAA,CAAO,QAAA,CAAS,KAAK,KAAK,CAAA;AAAA,UAC5B,CAAC,CAAA,CACA,OAAA,CAAQ,MAAM;AACb,YAAA,qBAAA,EAAA;AAEA,YAAA,IAAI,iBAAA,EAAkB,IAAK,qBAAA,KAA0B,CAAA,EAAG;AACtD,cAAA,MAAA,EAAO;AACP,cAAA;AAAA,YACF;AAEA,YAAA,IAAI,aAAa,QAAA,EAAU;AACzB,cAAA,cAAA,CAAe,GAAG,CAAA;AAAA,YACpB;AAAA,UACF,CAAC,CAAA;AAAA,QACL,SAAS,KAAA,EAAO;AACd,UAAA,qBAAA,EAAA;AACA,UAAA,MAAA,CAAO,QAAA,CAAS,KAAK,KAAK,CAAA;AAAA,QAC5B;AAEA,QAAA,IAAI,aAAa,MAAA,EAAQ;AACvB,UAAA,cAAA,CAAe,GAAG,CAAA;AAAA,QACpB;AAAA,MACF,CAAA;AAAA,MACA,MAAM;AACJ,QAAA,IAAI,iBAAA,EAAkB,IAAK,qBAAA,KAA0B,CAAA,EAAG;AACtD,UAAA,MAAA,EAAO;AACP,UAAA;AAAA,QACF;AAEA,QAAA,cAAA,CAAe,GAAG,CAAA;AAAA,MACpB;AAAA,KACF;AAAA,EACF,CAAA;AAEA,EAAA,MAAM,IAAA,GAAkC,CAAC,OAAA,KAAY;AACnD,IAAA,IAAI,CAAC,gBAAA,EAAkB;AACrB,MAAA,OAAA,CAAQ,IAAA;AAAA,QACN;AAAA,OACF;AAAA,IACF;AAEA,IAAA,IAAI,CAAC,UAAA,CAAW,OAAO,CAAA,EAAG;AACxB,MAAA,OAAO,OAAA,CAAQ,OAAA,CAAQ,MAAA,CAAO,OAAO,CAAA;AAAA,IACvC;AAEA,IAAA,OAAO,MAAA,CAAO,OAAA,CAAQ,IAAA,CAAK,OAAO,CAAA;AAAA,EACpC,CAAA;AAEA,EAAA,MAAM,YAAA,GAAkC,EAAE,MAAA,EAAQ,MAAA,EAAQ,IAAA,EAAK;AAE/D,EAAA,QAAA,CAAS,SAAS,YAAY,CAAA;AAE9B,EAAA,GAAA,EAAI;AAEJ,EAAA,OAAO,YAAA;AACT;;ACrJA,MAAMA,WAAA,GAAY,CAAC,YAAA,GAAgC,EAAC,MAAe;AAAA,EACjE,GAAG,YAAA;AAAA,EACH,EAAA,EAAI,YAAA,CAAa,EAAA,IAAM,WAAA,CAAY,OAAO,IAAI,CAAA;AAAA,EAC9C,IAAA,EAAM,CAAC,SAAA,CAAU,MAAA,EAAQ,GAAI,YAAA,CAAa,IAAA,IAAQ,EAAG;AACvD,CAAA,CAAA;AAEA,MAAM,MAAA,GAAS,CAIb,MAAA,EACAC,OAAAA,EACA,YAAA,KACiB;AACjB,EAAA,MAAM,MAAA,GAASD,YAAU,YAAY,CAAA;AACrC,EAAA,MAAM,WAAA,GAAc,MAAA,CAAO,MAAA,CAAO,oBAAoB,CAAA;AAEtD,EAAA,IAAI,OAAA;AAEJ,EAAA,MAAM,MAAA,GAAiC;AAAA,IACrC,OAAA,EAAS,IAAI,SAAA,EAAU;AAAA,IACvB,OAAA,EAAS,IAAI,SAAA;AAAU,GACzB;AAEA,EAAA,MAAM,YAAY,MAAM;AACtB,IAAA,MAAM,SAAS,MAAA,CAAO,GAAA,CAAI,CAAC,KAAA,KAAU,KAAA,CAAM,KAAK,CAAA;AAChD,IAAA,MAAM,MAAA,GAAS,yBAAyB,WAAW,CAAA;AAEnD,IAAA,IAAI,MAAA,KAAW,YAAY,SAAA,EAAW;AACpC,MAAA;AAAA,IACF;AAEA,IAAA,MAAA,CAAO,OAAA,CAAQ,IAAA,CAAK,EAAE,MAAA,EAAQ,QAAQ,CAAA;AAEtC,IAAA,OAAA,GAAUC,OAAAA,CAAO,GAAG,MAAM,CAAA;AAAA,EAC5B,CAAA;AAEA,EAAA,cAAA,CAAe,MAAM;AACnB,IAAA,QAAA;AAAA,MACE,MAAM,OAAA,CAAQ,IAAA,CAAK,MAAA,CAAO,GAAA,CAAI,CAAC,KAAA,KAAU,KAAA,CAAM,MAAA,CAAO,OAAO,CAAC,CAAA;AAAA,MAC9D,MAAM;AACJ,QAAA,IAAI,UAAA,CAAW,OAAO,CAAA,EAAG;AACvB,UAAA,OAAA,EAAQ;AACR,UAAA,MAAA,CAAO,OAAA,CAAQ,IAAA,CAAK,EAAE,MAAA,EAAQ,CAAA;AAAA,QAChC;AAEA,QAAA,SAAA,EAAU;AAAA,MACZ,CAAA;AAAA,MACA,EAAE,IAAA,EAAM,CAAC,SAAA,CAAU,SAAS,CAAA;AAAE,KAChC;AAEA,IAAA,cAAA,CAAe,SAAS,CAAA;AAAA,EAC1B,CAAC,CAAA;AAED,EAAA,MAAM,UAAA,GAA2B,EAAE,MAAA,EAAQ,MAAA,EAAO;AAElD,EAAA,QAAA,CAAS,SAAS,UAAU,CAAA;AAE5B,EAAA,OAAO,UAAA;AACT;;AC7DA,MAAMD,WAAA,GAAY,CAAC,YAAA,GAAgC,EAAC,MAAe;AAAA,EACjE,GAAG,YAAA;AAAA,EACH,EAAA,EAAI,YAAA,CAAa,EAAA,IAAM,WAAA,CAAY,MAAM,IAAI,CAAA;AAAA,EAC7C,IAAA,EAAM,CAAC,SAAA,CAAU,KAAA,EAAO,GAAI,YAAA,CAAa,IAAA,IAAQ,EAAG;AACtD,CAAA,CAAA;AAEA,MAAM,KAAA,GAAQ,CAAI,YAAA,EAAiB,YAAA,KAA6C;AAC9E,EAAA,MAAM,MAAA,GAASA,YAAU,YAAY,CAAA;AAErC,EAAA,IAAI,KAAA,GAAQ,YAAA;AAEZ,EAAA,MAAM,MAAA,GAAS;AAAA,IACb,OAAA,EAAS,IAAI,SAAA;AAAa,GAC5B;AAEA,EAAA,MAAM,GAAA,GAAuB,CAAC,mBAAA,KAAwB;AACpD,IAAA,IAAI,WAAW,UAAA,CAAW,mBAAmB,CAAA,GACzC,mBAAA,CAAoB,KAAK,CAAA,GACzB,mBAAA;AAEJ,IAAA,IAAI,CAAC,MAAA,CAAO,EAAA,CAAG,QAAA,EAAU,KAAK,CAAA,EAAG;AAC/B,MAAA,KAAA,GAAQ,QAAA;AACR,MAAA,MAAA,CAAO,OAAA,CAAQ,KAAK,QAAQ,CAAA;AAAA,IAC9B;AAEA,IAAA,OAAO,KAAA,EAAM,CAAE,IAAA,CAAK,MAAM,QAAQ,CAAA;AAAA,EACpC,CAAA;AAEA,EAAA,MAAM,MAAM,MAAM,KAAA;AAElB,EAAA,MAAM,IAAA,GAAyB,OAAO,OAAA,KAAY;AAChD,IAAA,IAAI,CAAC,UAAA,CAAW,OAAO,CAAA,EAAG;AACxB,MAAA,OAAO,KAAA;AAAA,IACT;AAEA,IAAA,OAAO,QAAQ,KAAK,CAAA;AAAA,EACtB,CAAA;AAEA,EAAA,MAAM,YAAsB,EAAE,MAAA,EAAQ,MAAA,EAAQ,GAAA,EAAK,KAAK,IAAA,EAAK;AAE7D,EAAA,QAAA,CAAS,SAAS,SAAS,CAAA;AAE3B,EAAA,OAAO,SAAA;AACT;;ACvCA,MAAMA,WAAA,GAAY,CAAC,YAAA,GAAgC,EAAC,MAAe;AAAA,EACjE,GAAG,YAAA;AAAA,EACH,EAAA,EAAI,YAAA,CAAa,EAAA,IAAM,WAAA,CAAY,YAAY,IAAI,CAAA;AAAA,EACnD,IAAA,EAAM,CAAC,SAAA,CAAU,YAAA,EAAc,GAAI,YAAA,CAAa,IAAA,IAAQ,EAAG;AAC7D,CAAA,CAAA;AAEA,MAAM,WAAA,GAAc,CAUlB,WAAA,EACA,YAAA,KAC0B;AAC1B,EAAA,MAAM,MAAA,GAASA,YAAU,YAAY,CAAA;AAErC,EAAA,IAAI,SAAiB,EAAC;AAEtB,EAAA,MAAM,MAAA,GAAS;AAAA,IACb,OAAA,EAAS,IAAI,SAAA,EAAgC;AAAA,IAC7C,YAAA,EAAc,IAAI,SAAA;AAAc,GAClC;AAEA,EAAA,MAAM,OAAA,GAAU,CAAC,EAAA,KAAqB;AACpC,IAAA,IAAI,MAAM,MAAA,EAAQ;AAChB,MAAA,OAAO,OAAO,EAAE,CAAA;AAAA,IAClB;AAEA,IAAA,MAAM,YAAA,GAAe,YAAY,EAAE,CAAA;AAEnC,IAAA,MAAM,SAAA,GACJ,wBAAwB,OAAA,GACpB,UAAA,CAAW,cAAc,EAAE,IAAA,EAAM,CAAC,SAAA,CAAU,SAAS,GAAG,CAAA,GACxD,MAAM,YAAA,EAAc,EAAE,MAAM,CAAC,SAAA,CAAU,SAAS,CAAA,EAAG,CAAA;AAEzD,IAAA,MAAA,GAAS,EAAE,GAAG,MAAA,EAAQ,CAAC,EAAE,GAAG,SAAA,EAAU;AACtC,IAAA,MAAA,CAAO,YAAA,CAAa,KAAK,EAAE,CAAA;AAC3B,IAAA,MAAA,CAAO,OAAA,CAAQ,KAAK,MAAM,CAAA;AAE1B,IAAA,QAAA;AAAA,MACE,UAAU,MAAA,CAAO,OAAA;AAAA,MACjB,MAAM;AACJ,QAAA,MAAA,CAAO,OAAA,CAAQ,KAAK,MAAM,CAAA;AAAA,MAC5B,CAAA;AAAA,MACA,EAAE,IAAA,EAAM,CAAC,SAAA,CAAU,SAAS,CAAA;AAAE,KAChC;AAEA,IAAA,OAAO,SAAA;AAAA,EACT,CAAA;AAEA,EAAA,MAAM,OAAA,GAAU,OAAO,EAAA,EAAQ,SAAA,KAAwB;AACrD,IAAA,IAAI,MAAM,MAAA,EAAQ;AAChB,MAAA,MAAM,IAAI,KAAA,CAAM,CAAA,+BAAA,EAAkC,EAAE,CAAA,iBAAA,CAAmB,CAAA;AAAA,IACzE;AAEA,IAAA,MAAA,GAAS,EAAE,GAAG,MAAA,EAAQ,CAAC,EAAE,GAAG,SAAA,EAAU;AAEtC,IAAA,QAAA;AAAA,MACE,UAAU,MAAA,CAAO,OAAA;AAAA,MACjB,MAAM;AACJ,QAAA,MAAA,CAAO,OAAA,CAAQ,KAAK,MAAM,CAAA;AAAA,MAC5B,CAAA;AAAA,MACA,EAAE,IAAA,EAAM,CAAC,SAAA,CAAU,SAAS,CAAA;AAAE,KAChC;AAEA,IAAA,MAAA,CAAO,OAAA,CAAQ,KAAK,MAAM,CAAA;AAE1B,IAAA,MAAM,KAAA,EAAM;AAAA,EACd,CAAA;AAEA,EAAA,MAAM,MAAM,MAAM;AAChB,IAAA,OAAO,MAAA;AAAA,EACT,CAAA;AAEA,EAAA,MAAM,IAAA,GAAsC,OAAO,OAAA,KAAY;AAC7D,IAAA,IAAI,CAAC,UAAA,CAAW,OAAO,CAAA,EAAG;AACxB,MAAA,OAAO,MAAA;AAAA,IACT;AAEA,IAAA,OAAO,QAAQ,MAAM,CAAA;AAAA,EACvB,CAAA;AAEA,EAAA,MAAM,kBAAyC,EAAE,MAAA,EAAQ,QAAQ,GAAA,EAAK,OAAA,EAAS,SAAS,IAAA,EAAK;AAE7F,EAAA,QAAA,CAAS,SAAS,eAAe,CAAA;AAEjC,EAAA,OAAO,eAAA;AACT;;ACvFA,MAAMA,WAAA,GAAY,CAAC,YAAA,GAAqC,EAAC,MAAoB;AAAA,EAC3E,GAAG,YAAA;AAAA,EACH,EAAA,EAAI,YAAA,CAAa,EAAA,IAAM,WAAA,CAAY,cAAc,IAAI,CAAA;AAAA,EACrD,IAAA,EAAM,CAAC,SAAA,CAAU,cAAA,EAAgB,GAAI,YAAA,CAAa,IAAA,IAAQ,EAAG;AAC/D,CAAA,CAAA;AAEA,MAAM,aAAA,GAAgB,CACpB,MAAA,EACA,SAAA,EACA,YAAA,KACqB;AAGrB,EAAA,MAAM,MAAA,GAASA,YAAU,YAAY,CAAA;AACrC,EAAA,MAAM,WAAA,GAAc,MAAA,CAAO,MAAA,CAAO,oBAAoB,CAAA;AAEtD,EAAA,IAAI,KAAA,GAAyC,IAAA;AAC7C,EAAA,IAAI,KAAA;AACJ,EAAA,IAAI,SAAA,GAAqB,IAAA;AACzB,EAAA,IAAI,OAAA,GAAU,CAAA;AACd,EAAA,IAAI,kBAAA,GAA6B,OAAA;AAEjC,EAAA,MAAM,MAAA,GAAqC;AAAA,IACzC,OAAA,EAAS,IAAI,SAAA,EAAyB;AAAA,IACtC,SAAA,EAAW,IAAI,SAAA,EAAa;AAAA,IAC5B,OAAA,EAAS,IAAI,SAAA,EAAkC;AAAA,IAC/C,QAAA,EAAU,IAAI,SAAA,EAAmB;AAAA,IACjC,SAAA,EAAW,IAAI,SAAA;AAAgB,GACjC;AAEA,EAAA,MAAM,YAAY,MAAM;AACtB,IAAA,IAAI,SAAA,EAAW;AACb,MAAA,OAAO,WAAA,CAAY,OAAA;AAAA,IACrB;AAEA,IAAA,MAAM,gBAAA,GAAmB,yBAAyB,WAAW,CAAA;AAE7D,IAAA,OAAO,UAAU,IAAA,IAAQ,gBAAA,KAAqB,WAAA,CAAY,SAAA,GACtD,YAAY,QAAA,GACZ,gBAAA;AAAA,EACN,CAAA;AAEA,EAAA,MAAM,uBAAuB,YAAY;AACvC,IAAA,MAAM,qBAAA,GAAA,CAAyB,kBAAA,GAAqB,CAAA,IAAK,MAAA,CAAO,gBAAA;AAChE,IAAA,kBAAA,GAAqB,qBAAA;AAErB,IAAA,MAAM,MAAA,GAAS,yBAAyB,WAAW,CAAA;AACnD,IAAA,MAAM,MAAA,GAAS,WAAA,CAAY,GAAA,CAAI,CAAC,KAAA,KAAU,KAAA,CAAM,QAAA,EAAS,CAAE,KAAK,CAAA,CAAE,MAAA,CAAO,OAAO,CAAA;AAEhF,IAAA,IAAI,MAAA,KAAW,YAAY,OAAA,EAAS;AAClC,MAAA,SAAA,GAAY,IAAA;AAAA,IACd;AAEA,IAAA,MAAA,CAAO,UAAU,IAAA,EAAK;AAEtB,IAAA,IAAI,MAAA,CAAO,SAAS,CAAA,EAAG;AACrB,MAAA,KAAA,GAAQ,IAAI,eAAe,MAAM,CAAA;AACjC,MAAA,KAAA,GAAQ,MAAA;AACR,MAAA,SAAA,GAAY,WAAW,WAAA,CAAY,OAAA;AACnC,MAAA,OAAA,GAAU,kBAAA;AACV,MAAA,MAAA,CAAO,QAAA,CAAS,KAAK,KAAK,CAAA;AAC1B,MAAA,MAAA,CAAO,OAAA,CAAQ,KAAK,KAAK,CAAA;AACzB,MAAA;AAAA,IACF;AAEA,IAAA,IAAI,MAAA,KAAW,YAAY,SAAA,EAAW;AACpC,MAAA,MAAM,SAAS,MAAA,CAAO,GAAA,CAAI,CAAC,KAAA,KAAU,KAAA,CAAM,KAAK,CAAA;AAEhD,MAAA,IAAA,CAAK,YAAY;AACf,QAAA,SAAA,GAAY,IAAA;AAEZ,QAAA,IAAI;AACF,UAAA,MAAM,QAAA,GAAW,MAAM,SAAA,CAAU,GAAG,MAAM,CAAA;AAC1C,UAAA,MAAM,SAAA,GAAY,CAAC,MAAA,CAAO,EAAA,CAAG,UAAU,KAAK,CAAA;AAE5C,UAAA,IAAI,0BAA0B,kBAAA,EAAoB;AAChD,YAAA,MAAA,CAAO,QAAQ,IAAA,CAAK,EAAE,OAAO,QAAA,EAAU,OAAA,EAAS,uBAAuB,CAAA;AACvE,YAAA;AAAA,UACF;AAEA,UAAA,KAAA,GAAQ,IAAA;AACR,UAAA,KAAA,GAAQ,QAAA;AAER,UAAA,MAAA,CAAO,SAAA,CAAU,KAAK,QAAQ,CAAA;AAE9B,UAAA,IAAI,SAAA,EAAW;AACb,YAAA,MAAA,CAAO,OAAA,CAAQ,KAAK,KAAK,CAAA;AAAA,UAC3B;AAAA,QACF,SAAS,WAAA,EAAa;AACpB,UAAA,IAAI,0BAA0B,kBAAA,EAAoB;AAChD,YAAA,MAAA,CAAO,QAAQ,IAAA,CAAK,EAAE,OAAO,WAAA,EAAa,OAAA,EAAS,uBAAuB,CAAA;AAC1E,YAAA;AAAA,UACF;AAEA,UAAA,MAAM,SAAA,GAAY,OAAO,KAAA,KAAU,WAAA;AAEnC,UAAA,KAAA,GAAQ,WAAA;AACR,UAAA,KAAA,GAAQ,MAAA;AAER,UAAA,MAAA,CAAO,QAAA,CAAS,KAAK,WAAW,CAAA;AAEhC,UAAA,IAAI,SAAA,EAAW;AACb,YAAA,MAAA,CAAO,OAAA,CAAQ,KAAK,KAAK,CAAA;AAAA,UAC3B;AAAA,QACF,CAAA,SAAE;AACA,UAAA,IAAI,0BAA0B,kBAAA,EAAoB;AAChD,YAAA,OAAA,GAAU,kBAAA;AACV,YAAA,SAAA,GAAY,KAAA;AAAA,UACd;AAAA,QACF;AAAA,MACF,CAAC,CAAA;AAAA,IACH;AAAA,EACF,CAAA;AAEA,EAAA,QAAA;AAAA,IACE,YAAY;AACV,MAAA,MAAM,eAAA,GAAkB,IAAI,eAAA,EAAgB;AAC5C,MAAA,MAAM,cAAc,eAAA,CAAgB,MAAA;AACpC,MAAA,MAAM,OAAA,CAAQ,IAAA;AAAA,QACZ,MAAA,CAAO,GAAA,CAAI,CAAC,KAAA,KAAU;AACpB,UAAA,OAAO,oBAAA,CAAqB,KAAK,CAAA,GAC7B,IAAA;AAAA,YACE,CAAC,MAAM,MAAA,CAAO,SAAA,EAAW,MAAM,MAAA,CAAO,QAAA,EAAU,KAAA,CAAM,MAAA,CAAO,SAAS,CAAA;AAAA,YACtE;AAAA,WACF,GACA,KAAA,CAAM,MAAA,CAAO,OAAA,CAAQ,UAAU,WAAW,CAAA;AAAA,QAChD,CAAC;AAAA,OACH;AACA,MAAA,eAAA,CAAgB,KAAA,EAAM;AAAA,IACxB,CAAA;AAAA,IACA,oBAAA;AAAA,IACA,EAAE,IAAA,EAAM,CAAC,SAAA,CAAU,SAAS,CAAA;AAAE,GAChC;AAEA,EAAA,MAAM,MAAM,MAAM,KAAA;AAElB,EAAA,MAAM,QAAA,GAAW,OAAO,EAAE,KAAA,EAAO,WAAW,KAAA,EAAM,CAAA;AAElD,EAAA,MAAM,aAAa,YAAwB;AACzC,IAAA,OAAO,SAAA,EAAW;AAChB,MAAA,MAAM,KAAK,CAAC,MAAA,CAAO,SAAA,EAAW,MAAA,CAAO,QAAQ,CAAC,CAAA;AAAA,IAChD;AAEA,IAAA,IAAI,KAAA,EAAO;AACT,MAAA,MAAM,KAAA;AAAA,IACR;AAEA,IAAA,OAAO,KAAA;AAAA,EACT,CAAA;AAEA,EAAA,MAAM,IAAA,GAAiC,OAAO,OAAA,KAAY;AACxD,IAAA,IAAI,CAAC,UAAA,CAAW,OAAO,CAAA,EAAG;AACxB,MAAA,OAAO,UAAA,EAAW;AAAA,IACpB;AAEA,IAAA,OAAO,OAAA,CAAQ,MAAM,UAAA,EAAY,CAAA;AAAA,EACnC,CAAA;AAEA,EAAA,MAAM,YAAA,GAAe;AAAA,IACnB,MAAA;AAAA,IACA,MAAA;AAAA,IACA,GAAA;AAAA,IACA,QAAA;AAAA,IACA,UAAA;AAAA,IACA,SAAA;AAAA,IACA;AAAA,GACF;AAEA,EAAA,cAAA,CAAe,oBAAoB,CAAA;AAEnC,EAAA,QAAA,CAAS,SAAS,YAAY,CAAA;AAE9B,EAAA,OAAO,YAAA;AACT,CAAA;;ACpLA,MAAM,SAAA,GAAY,CAAC,YAAA,GAAoC,EAAC,MAAmB;AAAA,EACzE,GAAG,YAAA;AAAA,EACH,EAAA,EAAI,YAAA,CAAa,EAAA,IAAM,WAAA,CAAY,aAAa,IAAI,CAAA;AAAA,EACpD,IAAA,EAAM,CAAC,SAAA,CAAU,QAAA,EAAU,GAAI,YAAA,CAAa,IAAA,IAAQ,EAAG;AACzD,CAAA,CAAA;AAEA,MAAM,YAAA,GAAe,CACnB,MAAA,EACA,SAAA,EACA,YAAA,KACoB;AACpB,EAAA,MAAM,MAAA,GAAS,UAAU,YAAY,CAAA;AACrC,EAAA,IAAI,KAAA;AAEJ,EAAA,MAAM,MAAA,GAAS;AAAA,IACb,OAAA,EAAS,IAAI,SAAA;AAAa,GAC5B;AAEA,EAAA,MAAM,MAAM,MAAM;AAChB,IAAA,MAAM,SAAS,MAAA,CAAO,GAAA,CAAI,CAAC,KAAA,KAAU,KAAA,CAAM,KAAK,CAAA;AAGhD,IAAA,OAAO,SAAA,CAAU,GAAG,MAAM,CAAA;AAAA,EAC5B,CAAA;AAEA,EAAA,MAAM,IAAA,GAAgC,OAAO,OAAA,KAAY;AACvD,IAAA,IAAI,CAAC,UAAA,CAAW,OAAO,CAAA,EAAG;AACxB,MAAA,OAAO,GAAA,EAAI;AAAA,IACb;AAEA,IAAA,OAAO,OAAA,CAAQ,KAAK,CAAA;AAAA,EACtB,CAAA;AAEA,EAAA,QAAA;AAAA,IACE,MAAM,KAAK,MAAA,CAAO,GAAA,CAAI,CAAC,KAAA,KAAU,KAAA,CAAM,MAAA,CAAO,OAAO,CAAC,CAAA;AAAA,IACtD,MAAM;AACJ,MAAA,MAAM,WAAW,GAAA,EAAI;AAErB,MAAA,IAAI,CAAC,MAAA,CAAO,EAAA,CAAG,QAAA,EAAU,KAAK,CAAA,EAAG;AAC/B,QAAA,KAAA,GAAQ,QAAA;AACR,QAAA,MAAA,CAAO,OAAA,CAAQ,KAAK,QAAQ,CAAA;AAAA,MAC9B;AAAA,IACF,CAAA;AAAA,IACA,EAAE,IAAA,EAAM,CAAC,SAAA,CAAU,SAAS,CAAA;AAAE,GAChC;AAEA,EAAA,KAAA,GAAQ,GAAA,EAAI;AAEZ,EAAA,MAAM,YAAA,GAAgC,EAAE,MAAA,EAAQ,MAAA,EAAQ,KAAK,IAAA,EAAK;AAElE,EAAA,QAAA,CAAS,SAAS,YAAY,CAAA;AAE9B,EAAA,OAAO,YAAA;AACT,CAAA;;ACvDA,MAAM,QAAA,GAAW,CACf,MAAA,EACA,SAAA,EACA,YAAA,KACmB;AACnB,EAAA,MAAM,gBAAA,GAAmB,SAAA,CAAU,WAAA,CAAY,IAAA,KAAS,eAAA;AAExD,EAAA,MAAM,QACJ,gBAAA,IAAoB,MAAA,CAAO,KAAK,CAACE,MAAAA,KAAU,qBAAqBA,MAAK,CAAC,CAAA,GAClE,aAAA,CAAc,QAAQ,SAAA,EAAW,YAAY,IAC7C,YAAA,CAAa,MAAA,EAAQ,WAAW,YAAY,CAAA;AAElD,EAAA,OAAO,KAAA;AACT;;;;;;;;;;;;;;;;;;;;;;;;;"}
|
package/dist/index.d.ts
CHANGED
|
@@ -212,7 +212,7 @@ declare const isPromiseLike: <T>(value: unknown) => value is PromiseLike<T>;
|
|
|
212
212
|
|
|
213
213
|
declare const isReadableAsyncState: <T>(value: unknown) => value is ReadableAsyncState<T>;
|
|
214
214
|
|
|
215
|
-
declare const race: <T extends readonly unknown[] | []>(promises: T, abortSignal?: AbortSignal) => Promise<
|
|
215
|
+
declare const race: <T extends readonly unknown[] | []>(promises: T, abortSignal?: AbortSignal) => Promise<T[number]>;
|
|
216
216
|
|
|
217
217
|
declare const rejectAfter: (ms: number) => Promise<void>;
|
|
218
218
|
|
package/dist/index.mjs
CHANGED
|
@@ -43,6 +43,8 @@ const getUniqueId = (scope = "unknown") => {
|
|
|
43
43
|
return `awai$${scope}$${nextId}`;
|
|
44
44
|
};
|
|
45
45
|
|
|
46
|
+
const isAbortSignal = (value) => typeof AbortSignal !== "undefined" && value instanceof AbortSignal;
|
|
47
|
+
|
|
46
48
|
const isCoreNode = (node) => node.config.tags.includes(SystemTag.CORE_NODE);
|
|
47
49
|
|
|
48
50
|
const isFunction = (value) => typeof value === "function";
|
|
@@ -56,6 +58,9 @@ const isPromiseOrFunction = (value) => isFunction(value) || isPromiseLike(value)
|
|
|
56
58
|
const isReadableAsyncState = (value) => isObject(value) && isFunction(value.get) && isFunction(value.getAsync) && isFunction(value.getPromise) && isFunction(value.then);
|
|
57
59
|
|
|
58
60
|
const race = async (promises, abortSignal) => {
|
|
61
|
+
if (abortSignal?.aborted) {
|
|
62
|
+
return Promise.reject(abortSignal.reason);
|
|
63
|
+
}
|
|
59
64
|
const internalAbortController = new AbortController();
|
|
60
65
|
const abort = () => {
|
|
61
66
|
internalAbortController.abort();
|
|
@@ -350,6 +355,9 @@ const getTriggerPromise = (trigger) => {
|
|
|
350
355
|
|
|
351
356
|
const getExpirationPromise = (until) => {
|
|
352
357
|
if (typeof AbortSignal !== "undefined" && until instanceof AbortSignal) {
|
|
358
|
+
if (until.aborted) {
|
|
359
|
+
return Promise.resolve(void 0);
|
|
360
|
+
}
|
|
353
361
|
return new Promise((resolve) => {
|
|
354
362
|
until.addEventListener("abort", () => resolve(void 0), { once: true });
|
|
355
363
|
});
|
|
@@ -382,9 +390,11 @@ function scenario(...args) {
|
|
|
382
390
|
settled: new AwaiEvent(),
|
|
383
391
|
started: new AwaiEvent()
|
|
384
392
|
};
|
|
385
|
-
const
|
|
386
|
-
const checkShouldExpire = () => strategy === "once" || shouldExpire || (untilPredicate ? untilPredicate() : false);
|
|
393
|
+
const checkShouldExpire = () => strategy === "once" || shouldExpire || (isAbortSignal(until) ? until.aborted : false) || (isFunction(until) ? until() : false);
|
|
387
394
|
const expire = async () => {
|
|
395
|
+
if (expired) {
|
|
396
|
+
return;
|
|
397
|
+
}
|
|
388
398
|
expired = true;
|
|
389
399
|
await flush();
|
|
390
400
|
await events.settled.emit({ event: expirationEvent, config });
|
|
@@ -434,6 +444,10 @@ function scenario(...args) {
|
|
|
434
444
|
}
|
|
435
445
|
},
|
|
436
446
|
() => {
|
|
447
|
+
if (checkShouldExpire() && runningCallbacksCount === 0) {
|
|
448
|
+
expire();
|
|
449
|
+
return;
|
|
450
|
+
}
|
|
437
451
|
queueMicrotask(run);
|
|
438
452
|
}
|
|
439
453
|
);
|
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/race.ts","../src/lib/rejectAfter.ts","../src/lib/SyncQueue.ts","../src/global/queue.ts","../src/core/AwaiEvent.ts","../src/core/flush.ts","../src/core/Registry.ts","../src/global/registry.ts","../src/action/action.ts","../src/async-state/async-state.ts","../src/scenario/lib/getDefaultStrategy.ts","../src/scenario/lib/getTriggerPromise.ts","../src/scenario/lib/getExpirationPromise.ts","../src/scenario/scenario.ts","../src/effect/effect.ts","../src/state/state.ts","../src/family-state/family-state.ts","../src/selector/asyncSelector.ts","../src/selector/syncSelector.ts","../src/selector/selector.ts"],"sourcesContent":["enum AsyncStatus {\n FULFILLED = 'fulfilled',\n PENDING = 'pending',\n REJECTED = 'rejected',\n}\n\nexport default AsyncStatus;\n","enum SystemTag {\n ACTION = '@awai/action',\n ASYNC_SELECTOR = '@awai/async-selector',\n ASYNC_STATE = '@awai/async-state',\n CORE_NODE = '@awai/core-node',\n EFFECT = '@awai/effect',\n FAMILY_STATE = '@awai/family-state',\n SCENARIO = '@awai/scenario',\n SELECTOR = '@awai/selector',\n STATE = '@awai/state',\n}\n\nexport default SystemTag;\n","const delay = (ms: number): Promise<void> => new Promise((resolve) => setTimeout(resolve, ms));\n\nexport default delay;\n","const fork = async (forkFn: () => Promise<any>) => {\n await forkFn();\n};\n\nexport default fork;\n","import { AsyncStatus } from '../constants';\nimport type { ReadableAsyncState } from '../types';\n\nconst getAggregatedAsyncStatus = <T extends Pick<ReadableAsyncState, 'getStatus'>[]>(\n states: T,\n): AsyncStatus => {\n const hasError = states.some((state) => state.getStatus() === AsyncStatus.REJECTED);\n\n if (hasError) {\n return AsyncStatus.REJECTED;\n }\n\n const isPending = states.some((state) => state.getStatus() === AsyncStatus.PENDING);\n\n if (isPending) {\n return AsyncStatus.PENDING;\n }\n\n return AsyncStatus.FULFILLED;\n};\n\nexport default getAggregatedAsyncStatus;\n","const lastScopesIds: Record<string, number> = {};\n\nconst getUniqueId = (scope = 'unknown') => {\n const nextId = (lastScopesIds[scope] ?? 0) + 1;\n lastScopesIds[scope] = nextId;\n return `awai\\$${scope}\\$${nextId}`;\n};\n\nexport default getUniqueId;\n","import { SystemTag } from '../constants';\nimport type { BaseNode } from '../types';\n\nconst isCoreNode = (node: BaseNode): boolean => node.config.tags.includes(SystemTag.CORE_NODE);\n\nexport default isCoreNode;\n","const isFunction = (value: unknown): value is Function => typeof value === 'function';\n\nexport default isFunction;\n","const isObject = (value: unknown): value is Record<string, unknown> =>\n typeof value === 'object' && value !== null;\n\nexport default isObject;\n","import isFunction from './isFunction';\nimport isObject from './isObject';\n\nconst isPromiseLike = <T>(value: unknown): value is PromiseLike<T> =>\n isObject(value) && (value instanceof Promise || isFunction(value.then));\n\nexport default isPromiseLike;\n","import isFunction from './isFunction';\nimport isPromiseLike from './isPromiseLike';\n\nconst isPromiseOrFunction = <T>(\n value: unknown,\n): value is Promise<T> | ((...args: any) => Promise<T>) =>\n isFunction(value) || isPromiseLike<T>(value);\n\nexport default isPromiseOrFunction;\n","import type { ReadableAsyncState } from '../types';\n\nimport isFunction from './isFunction';\nimport isObject from './isObject';\n\nconst isReadableAsyncState = <T>(value: unknown): value is ReadableAsyncState<T> =>\n isObject(value) &&\n isFunction(value.get) &&\n isFunction(value.getAsync) &&\n isFunction(value.getPromise) &&\n isFunction(value.then);\n\nexport default isReadableAsyncState;\n","import isPromiseLike from './isPromiseLike';\nimport isFunction from './isFunction';\n\nconst race = async <T extends readonly unknown[] | []>(\n promises: T,\n abortSignal?: AbortSignal,\n): Promise<Awaited<T[number]>> => {\n const internalAbortController = new AbortController();\n\n const abort = () => {\n internalAbortController.abort();\n abortSignal?.removeEventListener('abort', abort);\n };\n\n abortSignal?.addEventListener('abort', abort);\n\n const abortablePromises = promises.map((promise) => {\n return isAbortable(promise) ? promise.abortable(internalAbortController.signal) : promise;\n }) as Promise<T[number]>[];\n\n return await Promise.race(abortablePromises).finally(abort);\n};\n\nexport default race;\n\ntype AbortablePromise<T> = Promise<T> & { abortable: (signal: AbortSignal) => Promise<T> };\n\nconst isAbortable = <T>(promise: unknown): promise is AbortablePromise<T> =>\n isPromiseLike<T>(promise) && 'abortable' in promise && isFunction(promise.abortable);\n","const rejectAfter = (ms: number): Promise<void> => {\n return new Promise((_, reject) => setTimeout(reject, ms));\n};\n\nexport default rejectAfter;\n","/**\n * @description\n * This helper is needed to emit events synchronously, so that scenarios/effects/selectors\n * can resubscribe to an event before another emission.\n *\n * @example\n * const state = state(0);\n *\n * scenario(state.events.change, () => {\n * // Without `SyncQueue` this scenario would only run once\n * });\n *\n * state.set(1);\n * state.set(2);\n */\n\nexport default class SyncQueue {\n private callbacksQueue: Function[] = [];\n private isDequeuing = false;\n\n public enqueue(callback: Function) {\n this.callbacksQueue.push(callback);\n this.dequeue();\n }\n\n private dequeue = async () => {\n if (this.isDequeuing || this.callbacksQueue.length === 0) {\n return;\n }\n\n this.isDequeuing = true;\n const callback = this.callbacksQueue.shift()!;\n callback();\n\n queueMicrotask(() => {\n this.isDequeuing = false;\n this.dequeue();\n });\n };\n}\n","import { SyncQueue } from '../lib';\n\nconst queue = new SyncQueue();\n\nexport default queue;\n","import queue from '../global/queue';\nimport { isFunction } from '../lib';\n\ntype Resolver<T> = (value: T) => any;\ntype FilterPredicate<T> = (value: T) => boolean;\n\nexport default class AwaiEvent<T = void> {\n private _awaiters: Resolver<T>[] = [];\n\n then: PromiseLike<T>['then'] = (onfulfilled) => {\n return new Promise<any>((resolve, reject) => {\n this._awaiters.push((value: T) => {\n try {\n const result = isFunction(onfulfilled) ? onfulfilled(value) : value;\n resolve(result);\n } catch (error) {\n reject(error);\n }\n });\n });\n };\n\n abortable(abortSignal: AbortSignal): Promise<T> {\n if (abortSignal.aborted) {\n return Promise.reject(abortSignal.reason);\n }\n\n return new Promise<T>((resolve, reject) => {\n const resolveWithCleanup: Resolver<T> = (value: T) => {\n abortSignal.removeEventListener('abort', abortionHandler);\n resolve(value);\n };\n\n this._awaiters.push(resolveWithCleanup);\n\n const abortionHandler = () => {\n this._awaiters = this._awaiters.filter((awaiter) => awaiter !== resolveWithCleanup);\n reject(abortSignal.reason);\n };\n\n abortSignal.addEventListener('abort', abortionHandler, { once: true });\n });\n }\n\n emit(value: T) {\n queue.enqueue(async () => {\n const awaiters = this._awaiters;\n this._awaiters = [];\n\n for (const resolve of awaiters) {\n resolve(value);\n }\n });\n }\n\n async filter(predicate: FilterPredicate<T>) {\n return new Promise(async (resolve) => {\n while (true) {\n const newValue = await this;\n const isApplicable = Boolean(predicate(newValue));\n\n if (isApplicable) {\n resolve(newValue);\n return;\n }\n }\n });\n }\n}\n","const flush = () => new Promise<void>((resolve) => setTimeout(resolve, 0));\n\nexport default flush;\n","import { isCoreNode } from '../lib';\nimport type BaseNode from '../types/BaseNode';\n\nimport AwaiEvent from './AwaiEvent';\n\nexport default class Registry<T extends BaseNode> {\n private _nodes: T[] = [];\n public readonly events = {\n deregistered: new AwaiEvent<T['config']['id']>(),\n registered: new AwaiEvent<T>(),\n };\n\n public async register(node: T) {\n if (isCoreNode(node)) {\n return;\n }\n\n this._nodes.push(node);\n this.events.registered.emit(node);\n }\n\n public async deregister(id: BaseNode['config']['id']) {\n const node = this._nodes.find((node) => node.config.id === id);\n\n if (!node) {\n return;\n }\n\n this._nodes = this._nodes.filter((node) => node.config.id !== id);\n this.events.deregistered.emit(id);\n }\n\n get nodes() {\n return [...this._nodes];\n }\n}\n","import { Registry } from '../core';\n\nconst registry = new Registry();\n\nexport default registry;\n","import { SystemTag } from '../constants';\nimport { AwaiEvent, flush } from '../core';\nimport { registry } from '../global';\nimport { getUniqueId, isFunction } from '../lib';\n\nimport type { CallbackAction, Config, EmptyAction } from './types';\n\nconst getConfig = (customConfig: Partial<Config> = {}): Config => ({\n ...customConfig,\n id: customConfig.id ?? getUniqueId(action.name),\n tags: [SystemTag.ACTION, ...(customConfig.tags ?? [])],\n});\n\nfunction action<Args extends any[] = []>(): EmptyAction<Args>;\nfunction action<Args extends any[] = []>(config?: Partial<Config>): EmptyAction<Args>;\nfunction action<Args extends any[], Return = void>(\n callback: (...args: Args) => Return,\n config?: Partial<Config>,\n): CallbackAction<Args, Return>;\n\nfunction action<Args extends any[], Return = void>(\n ...args: [Partial<Config>?] | [(...args: Args) => Return, Partial<Config>?]\n): EmptyAction<Args> | CallbackAction<Args, Return> {\n type Action = EmptyAction<Args> | CallbackAction<Args, Return>;\n\n const hasCallback = isFunction(args[0]);\n const [callback, customConfig] = hasCallback\n ? (args as [(...args: Args) => Return, Partial<Config>?])\n : ([, ...args] as [undefined, Partial<Config>?]);\n\n const config = getConfig(customConfig);\n\n const events = {\n invoked: new AwaiEvent(),\n rejected: hasCallback ? new AwaiEvent() : undefined,\n fulfilled: hasCallback ? new AwaiEvent() : undefined,\n } satisfies Action['events'];\n\n const invoke = async (...invokeArgs: Args) => {\n const invocationId = getUniqueId('invocation');\n\n events.invoked.emit({ arguments: invokeArgs, config, invocationId });\n\n try {\n const valueOrPromise: Return | Promise<Return> = isFunction(callback)\n ? callback(...invokeArgs)\n : (undefined as Return);\n\n const value = await valueOrPromise;\n await flush();\n events.fulfilled?.emit({ arguments: invokeArgs, config, result: value, invocationId });\n return value;\n } catch (error) {\n events.rejected?.emit({\n arguments: invokeArgs,\n config,\n error,\n invocationId,\n });\n throw error;\n }\n };\n\n const actionNode = Object.assign(invoke, { config, events }) as Action;\n\n registry.register(actionNode);\n\n return actionNode;\n}\n\nexport default action;\n","import { AsyncStatus, SystemTag } from '../constants';\nimport { AwaiEvent, flush } from '../core';\nimport { registry } from '../global';\nimport { getUniqueId, isFunction, isPromiseOrFunction, race } from '../lib';\n\nimport type { VersionIgnoredEvent, AsyncState, Config, InitialValue, Version } from './types';\n\nconst getConfig = (customConfig: Partial<Config> = {}): Config => ({\n ...customConfig,\n id: customConfig.id ?? getUniqueId(asyncState.name),\n tags: [SystemTag.ASYNC_STATE, ...(customConfig.tags ?? [])],\n});\n\nconst asyncState = <T>(\n initialValue?: InitialValue<T>,\n customConfig?: Partial<Config>,\n): AsyncState<T> => {\n const config = getConfig(customConfig);\n const isInitialValueAsync = isPromiseOrFunction(initialValue);\n let version: Version = isInitialValueAsync ? 0 : 1;\n let lastPendingVersion: Version = version;\n let status: AsyncStatus = AsyncStatus.FULFILLED;\n let error: unknown = null;\n let value: T | undefined = isInitialValueAsync ? undefined : initialValue;\n\n const events: AsyncState<T>['events'] = {\n changed: new AwaiEvent<T | undefined>(),\n fulfilled: new AwaiEvent<T>(),\n ignored: new AwaiEvent<VersionIgnoredEvent<T>>(),\n rejected: new AwaiEvent<unknown>(),\n requested: new AwaiEvent<void>(),\n };\n\n const getStatus: AsyncState<T>['getStatus'] = () => status;\n\n const set: AsyncState<T>['set'] = async (nextValueOrResolver) => {\n const currentPendingVersion: Version = (lastPendingVersion + 1) % Number.MAX_SAFE_INTEGER;\n lastPendingVersion = currentPendingVersion;\n\n try {\n if (isPromiseOrFunction(nextValueOrResolver)) {\n status = AsyncStatus.PENDING;\n events.requested.emit();\n }\n\n let newValue = isFunction(nextValueOrResolver)\n ? await nextValueOrResolver(value)\n : await nextValueOrResolver;\n const isChanged = !Object.is(newValue, value);\n\n if (currentPendingVersion !== lastPendingVersion || !isChanged) {\n events.ignored.emit({ value: newValue, version: currentPendingVersion });\n return;\n }\n\n error = null;\n value = newValue;\n status = AsyncStatus.FULFILLED;\n\n events.fulfilled.emit(newValue);\n\n if (isChanged) {\n events.changed.emit(value);\n }\n } catch (e) {\n if (currentPendingVersion !== lastPendingVersion) {\n events.ignored.emit({ error: e, version: currentPendingVersion });\n return;\n }\n\n const isChanged = !Object.is(e, error);\n\n error = e;\n value = undefined;\n status = AsyncStatus.REJECTED;\n\n events.rejected.emit(error);\n\n if (isChanged) {\n events.changed.emit(value);\n }\n }\n\n version = lastPendingVersion;\n await flush();\n };\n\n const get: AsyncState<T>['get'] = () => value;\n\n const getAsync: AsyncState<T>['getAsync'] = () => ({\n error,\n isLoading: status === AsyncStatus.PENDING,\n value,\n });\n\n const getPromise: AsyncState<T>['getPromise'] = async () => {\n if (version === lastPendingVersion) {\n return value!;\n }\n\n await race([events.fulfilled, events.rejected]);\n\n if (error) {\n throw error;\n }\n\n return value!;\n };\n\n const then: PromiseLike<T>['then'] = async (resolve) => {\n if (!isFunction(resolve)) {\n return getPromise() as any;\n }\n\n return resolve(await getPromise());\n };\n\n if (isInitialValueAsync) {\n set(initialValue);\n }\n\n const asyncStateNode: AsyncState<T> = {\n config,\n events,\n get,\n getAsync,\n getPromise,\n getStatus,\n set,\n then,\n };\n\n registry.register(asyncStateNode);\n\n return asyncStateNode;\n};\n\nexport default asyncState;\n","import type { Config } from '../types';\n\nconst getDefaultStrategy = (\n isPlainPromiseTrigger: boolean,\n hasTrigger: boolean,\n): Config<unknown>['strategy'] => {\n if (isPlainPromiseTrigger) {\n return 'once';\n }\n\n if (hasTrigger) {\n return 'fork';\n }\n\n return 'cyclic';\n};\n\nexport default getDefaultStrategy;\n","import { isFunction } from '../../lib';\nimport type { Trigger } from '../types';\n\nconst getTriggerPromise = <T>(trigger: Trigger<T> | undefined) => {\n if (!trigger) {\n return Promise.resolve(undefined as T);\n }\n\n return isFunction(trigger) ? trigger() : trigger;\n};\n\nexport default getTriggerPromise;\n","import type { ShouldExpirePredicate, UntilTrigger } from '../types';\n\nconst getExpirationPromise = <E>(until: Exclude<UntilTrigger<E>, ShouldExpirePredicate>) => {\n if (typeof AbortSignal !== 'undefined' && until instanceof AbortSignal) {\n return new Promise((resolve) => {\n until.addEventListener('abort', () => resolve(undefined), { once: true });\n });\n }\n\n return Promise.resolve(until) as Promise<E>;\n};\n\nexport default getExpirationPromise;\n","import { SystemTag } from '../constants';\nimport { AwaiEvent, flush } from '../core';\nimport { registry } from '../global';\nimport { getUniqueId, isFunction, isObject } from '../lib';\n\nimport { getDefaultStrategy, getExpirationPromise, getTriggerPromise } from './lib';\nimport type { Callback, Config, Scenario, Trigger } from './types';\n\nconst getConfig = <E = unknown>(\n isPlainPromiseTrigger: boolean,\n hasTrigger: boolean,\n customConfig: Partial<Config<E>> = {},\n): Config<E> => ({\n ...customConfig,\n id: customConfig.id ?? getUniqueId(scenario.name),\n strategy: customConfig.strategy ?? getDefaultStrategy(isPlainPromiseTrigger, hasTrigger),\n tags: [SystemTag.SCENARIO, ...(customConfig.tags ?? [])],\n});\n\nfunction scenario<T, R, E = unknown>(\n trigger: Trigger<T>,\n callback: Callback<T, R>,\n customConfig?: Partial<Config<E>>,\n): Scenario<T, R, E>;\n\nfunction scenario<T, R, E = unknown>(\n callback: Callback<T, R>,\n config?: Partial<Config<E>>,\n): Scenario<T, R, E>;\n\nfunction scenario<T, R, E = unknown>(\n ...args: [Trigger<T>, Callback<T, R>, Partial<Config<E>>?] | [Callback<T, R>, Partial<Config<E>>?]\n): Scenario<T, R, E> {\n const hasTrigger = isFunction(args[1]);\n\n const trigger = hasTrigger ? (args[0] as Trigger<T>) : undefined;\n const callback = (hasTrigger ? args[1] : args[0]) as Callback<T, R>;\n const customConfig = (hasTrigger ? args[2] : args[1]) as Partial<Config<E>> | undefined;\n const isPlainPromiseTrigger = hasTrigger && isObject(args[0]) && args[0].constructor === Promise;\n\n const config = getConfig<E>(isPlainPromiseTrigger, hasTrigger, customConfig);\n const { strategy, until } = config;\n const isFiniteScenario =\n isPlainPromiseTrigger || strategy === 'once' || typeof until !== 'undefined';\n let expirationEvent: E | undefined;\n let runningCallbacksCount = 0;\n let shouldExpire = false;\n let expired = false;\n\n const events: Scenario<T, R, E>['events'] = {\n fulfilled: new AwaiEvent(),\n rejected: new AwaiEvent(),\n settled: new AwaiEvent(),\n started: new AwaiEvent(),\n };\n\n const untilPredicate = isFunction(until) ? until : undefined;\n\n const checkShouldExpire = () =>\n strategy === 'once' || shouldExpire || (untilPredicate ? untilPredicate() : false);\n\n const expire = async () => {\n expired = true;\n await flush();\n await events.settled.emit({ event: expirationEvent, config });\n await flush();\n await registry.deregister(config.id);\n };\n\n if (until && !isFunction(until)) {\n getExpirationPromise<E>(until).then((event) => {\n shouldExpire = true;\n expirationEvent = event as E;\n\n if (runningCallbacksCount === 0) {\n expire();\n }\n });\n }\n\n const run = async () => {\n getTriggerPromise(trigger).then(\n (event) => {\n if (expired) {\n return;\n }\n\n runningCallbacksCount++;\n events.started.emit({ config, event });\n\n try {\n Promise.resolve(callback(event))\n .then((result) => {\n flush().then(() => {\n events.fulfilled.emit({ config, event, result });\n });\n })\n .catch((error) => {\n events.rejected.emit(error);\n })\n .finally(() => {\n runningCallbacksCount--;\n\n if (checkShouldExpire() && runningCallbacksCount === 0) {\n expire();\n return;\n }\n\n if (strategy === 'cyclic') {\n queueMicrotask(run);\n }\n });\n } catch (error) {\n runningCallbacksCount--;\n events.rejected.emit(error);\n }\n\n if (strategy === 'fork') {\n queueMicrotask(run);\n }\n },\n () => {\n queueMicrotask(run);\n },\n );\n };\n\n const then: Scenario<T, R, E>['then'] = (resolve) => {\n if (!isFiniteScenario) {\n console.warn(\n 'You seem to await an infinite scenario. This causes a memory leak in your application.',\n );\n }\n\n if (!isFunction(resolve)) {\n return Promise.resolve(events.settled) as any;\n }\n\n return events.settled.then(resolve);\n };\n\n const scenarioNode: Scenario<T, R, E> = { config, events, then };\n\n registry.register(scenarioNode);\n\n run();\n\n return scenarioNode;\n}\n\nexport default scenario;\n","import { AsyncStatus, SystemTag } from '../constants';\nimport { AwaiEvent } from '../core';\nimport { registry } from '../global';\nimport { getAggregatedAsyncStatus, getUniqueId, isFunction, isReadableAsyncState } from '../lib';\nimport scenario from '../scenario';\nimport { type InferReadableType, type ReadableAsyncState, type ReadableState } from '../types';\n\nimport type { CleanupCallback, Config, Effect } from './types';\n\nconst getConfig = (customConfig: Partial<Config> = {}): Config => ({\n ...customConfig,\n id: customConfig.id ?? getUniqueId(effect.name),\n tags: [SystemTag.EFFECT, ...(customConfig.tags ?? [])],\n});\n\nconst effect = <\n T extends (ReadableState<any> | ReadableAsyncState<any>)[],\n V extends { [K in keyof T]: InferReadableType<T[K]> },\n>(\n states: [...T],\n effect: (...values: V) => CleanupCallback | void,\n customConfig?: Partial<Config>,\n): Effect<T, V> => {\n const config = getConfig(customConfig);\n const asyncStates = states.filter(isReadableAsyncState);\n\n let cleanup: ReturnType<typeof effect>;\n\n const events: Effect<T, V>['events'] = {\n cleared: new AwaiEvent(),\n started: new AwaiEvent(),\n };\n\n const runEffect = () => {\n const values = states.map((state) => state.get()) as V;\n const status = getAggregatedAsyncStatus(asyncStates);\n\n if (status !== AsyncStatus.FULFILLED) {\n return;\n }\n\n events.started.emit({ states, values });\n\n cleanup = effect(...values);\n };\n\n queueMicrotask(() => {\n scenario(\n () => Promise.race(states.map((state) => state.events.changed)),\n () => {\n if (isFunction(cleanup)) {\n cleanup();\n events.cleared.emit({ states });\n }\n\n runEffect();\n },\n { tags: [SystemTag.CORE_NODE] },\n );\n\n queueMicrotask(runEffect);\n });\n\n const effectNode: Effect<T, V> = { config, events };\n\n registry.register(effectNode);\n\n return effectNode;\n};\n\nexport default effect;\n","import { SystemTag } from '../constants';\nimport { AwaiEvent, flush } from '../core';\nimport { getUniqueId, isFunction } from '../lib';\nimport { registry } from '../global';\n\nimport type { Config, State } from './types';\n\nconst getConfig = (customConfig: Partial<Config> = {}): Config => ({\n ...customConfig,\n id: customConfig.id ?? getUniqueId(state.name),\n tags: [SystemTag.STATE, ...(customConfig.tags ?? [])],\n});\n\nconst state = <T>(initialValue: T, customConfig?: Partial<Config>): State<T> => {\n const config = getConfig(customConfig);\n\n let value = initialValue;\n\n const events = {\n changed: new AwaiEvent<T>(),\n };\n\n const set: State<T>['set'] = (nextValueOrResolver) => {\n let newValue = isFunction(nextValueOrResolver)\n ? nextValueOrResolver(value)\n : nextValueOrResolver;\n\n if (!Object.is(newValue, value)) {\n value = newValue;\n events.changed.emit(newValue);\n }\n\n return flush().then(() => newValue);\n };\n\n const get = () => value;\n\n const then: State<T>['then'] = async (resolve) => {\n if (!isFunction(resolve)) {\n return value as any;\n }\n\n return resolve(value);\n };\n\n const stateNode: State<T> = { config, events, get, set, then };\n\n registry.register(stateNode);\n\n return stateNode;\n};\n\nexport default state;\n","import asyncState, { type AsyncState } from '../async-state';\nimport { SystemTag } from '../constants';\nimport { AwaiEvent, flush } from '../core';\nimport { registry } from '../global';\nimport { getUniqueId, isFunction } from '../lib';\nimport scenario from '../scenario';\nimport state, { type State } from '../state';\nimport type { Id } from '../types';\n\nimport type { Config, FamilyState } from './types';\n\nconst getConfig = (customConfig: Partial<Config> = {}): Config => ({\n ...customConfig,\n id: customConfig.id ?? getUniqueId(familyState.name),\n tags: [SystemTag.FAMILY_STATE, ...(customConfig.tags ?? [])],\n});\n\nconst familyState = <\n T,\n Initializer extends (id: Id) => T | Promise<T>,\n Family extends Record<Id, NodeType>,\n NodeType extends State<any> | AsyncState<any> = ReturnType<Initializer> extends PromiseLike<\n infer Q\n >\n ? AsyncState<Q>\n : State<ReturnType<Initializer>>,\n>(\n initializer: Initializer,\n customConfig?: Partial<Config>,\n): FamilyState<NodeType> => {\n const config = getConfig(customConfig);\n\n let family: Family = {} as Family;\n\n const events = {\n changed: new AwaiEvent<Record<Id, NodeType>>(),\n stateCreated: new AwaiEvent<Id>(),\n };\n\n const getNode = (id: Id): NodeType => {\n if (id in family) {\n return family[id];\n }\n\n const initialValue = initializer(id);\n\n const stateNode =\n initialValue instanceof Promise\n ? asyncState(initialValue, { tags: [SystemTag.CORE_NODE] })\n : state(initialValue, { tags: [SystemTag.CORE_NODE] });\n\n family = { ...family, [id]: stateNode };\n events.stateCreated.emit(id);\n events.changed.emit(family);\n\n scenario(\n stateNode.events.changed,\n () => {\n events.changed.emit(family);\n },\n { tags: [SystemTag.CORE_NODE] },\n );\n\n return stateNode as NodeType;\n };\n\n const setNode = async (id: Id, stateNode: NodeType) => {\n if (id in family) {\n throw new Error(`Cannot set node. Node with id \"${id}\" already exists.`);\n }\n\n family = { ...family, [id]: stateNode };\n\n scenario(\n stateNode.events.changed,\n () => {\n events.changed.emit(family);\n },\n { tags: [SystemTag.CORE_NODE] },\n );\n\n events.changed.emit(family);\n\n await flush();\n };\n\n const get = () => {\n return family;\n };\n\n const then: FamilyState<NodeType>['then'] = async (resolve) => {\n if (!isFunction(resolve)) {\n return family as any;\n }\n\n return resolve(family);\n };\n\n const familyStateNode: FamilyState<NodeType> = { config, events, get, getNode, setNode, then };\n\n registry.register(familyStateNode);\n\n return familyStateNode;\n};\n\nexport default familyState;\n","import { AsyncStatus, SystemTag } from '../constants';\nimport { AwaiEvent } from '../core';\nimport { registry } from '../global';\nimport {\n fork,\n getAggregatedAsyncStatus,\n getUniqueId,\n isFunction,\n isReadableAsyncState,\n race,\n} from '../lib';\nimport scenario from '../scenario';\nimport type { InferReadableType, ReadableAsyncState, ReadableState } from '../types';\n\nimport type { AsyncConfig, AsyncSelector, VersionIgnoredEvent } from './types';\n\nconst getConfig = (customConfig: Partial<AsyncConfig> = {}): AsyncConfig => ({\n ...customConfig,\n id: customConfig.id ?? getUniqueId(asyncSelector.name),\n tags: [SystemTag.ASYNC_SELECTOR, ...(customConfig.tags ?? [])],\n});\n\nconst asyncSelector = <T extends (ReadableState | ReadableAsyncState)[], U>(\n states: T,\n predicate: (...values: { [K in keyof T]: InferReadableType<T[K]> }) => U,\n customConfig?: Partial<AsyncConfig>,\n): AsyncSelector<U> => {\n type StatesValues = { [K in keyof T]: InferReadableType<T[K]> };\n\n const config = getConfig(customConfig);\n const asyncStates = states.filter(isReadableAsyncState);\n\n let error: AggregateError | unknown | null = null;\n let value: U | undefined;\n let isLoading: boolean = true;\n let version = 0;\n let lastPendingVersion: number = version;\n\n const events: AsyncSelector<U>['events'] = {\n changed: new AwaiEvent<U | undefined>(),\n fulfilled: new AwaiEvent<U>(),\n ignored: new AwaiEvent<VersionIgnoredEvent<U>>(),\n rejected: new AwaiEvent<unknown>(),\n requested: new AwaiEvent<void>(),\n };\n\n const getStatus = () => {\n if (isLoading) {\n return AsyncStatus.PENDING;\n }\n\n const aggregatedStatus = getAggregatedAsyncStatus(asyncStates);\n\n return error !== null && aggregatedStatus === AsyncStatus.FULFILLED\n ? AsyncStatus.REJECTED\n : aggregatedStatus;\n };\n\n const determineNextVersion = async () => {\n const currentPendingVersion = (lastPendingVersion + 1) % Number.MAX_SAFE_INTEGER;\n lastPendingVersion = currentPendingVersion;\n\n const status = getAggregatedAsyncStatus(asyncStates);\n const errors = asyncStates.map((state) => state.getAsync().error).filter(Boolean);\n\n if (status === AsyncStatus.PENDING) {\n isLoading = true;\n }\n\n events.requested.emit();\n\n if (errors.length > 0) {\n error = new AggregateError(errors);\n value = undefined;\n isLoading = status === AsyncStatus.PENDING;\n version = lastPendingVersion;\n events.rejected.emit(error);\n events.changed.emit(value);\n return;\n }\n\n if (status === AsyncStatus.FULFILLED) {\n const values = states.map((state) => state.get()) as StatesValues;\n\n fork(async () => {\n isLoading = true;\n\n try {\n const newValue = await predicate(...values);\n const isChanged = !Object.is(newValue, value);\n\n if (currentPendingVersion !== lastPendingVersion) {\n events.ignored.emit({ value: newValue, version: currentPendingVersion });\n return;\n }\n\n error = null;\n value = newValue;\n\n events.fulfilled.emit(newValue);\n\n if (isChanged) {\n events.changed.emit(value);\n }\n } catch (caughtError) {\n if (currentPendingVersion !== lastPendingVersion) {\n events.ignored.emit({ error: caughtError, version: currentPendingVersion });\n return;\n }\n\n const isChanged = typeof value !== 'undefined';\n\n error = caughtError;\n value = undefined;\n\n events.rejected.emit(caughtError);\n\n if (isChanged) {\n events.changed.emit(value);\n }\n } finally {\n if (currentPendingVersion === lastPendingVersion) {\n version = lastPendingVersion;\n isLoading = false;\n }\n }\n });\n }\n };\n\n scenario(\n async () => {\n const abortController = new AbortController();\n const abortSignal = abortController.signal;\n await Promise.race(\n states.map((state) => {\n return isReadableAsyncState(state)\n ? race(\n [state.events.requested, state.events.rejected, state.events.fulfilled],\n abortSignal,\n )\n : state.events.changed.abortable(abortSignal);\n }),\n );\n abortController.abort();\n },\n determineNextVersion,\n { tags: [SystemTag.CORE_NODE] },\n );\n\n const get = () => value;\n\n const getAsync = () => ({ error, isLoading, value });\n\n const getPromise = async (): Promise<U> => {\n while (isLoading) {\n await race([events.fulfilled, events.rejected]);\n }\n\n if (error) {\n throw error;\n }\n\n return value!;\n };\n\n const then: AsyncSelector<U>['then'] = async (resolve) => {\n if (!isFunction(resolve)) {\n return getPromise() as any;\n }\n\n return resolve(await getPromise());\n };\n\n const selectorNode = {\n config,\n events,\n get,\n getAsync,\n getPromise,\n getStatus,\n then,\n };\n\n queueMicrotask(determineNextVersion);\n\n registry.register(selectorNode);\n\n return selectorNode;\n};\n\nexport default asyncSelector;\n","import { SystemTag } from '../constants';\nimport { AwaiEvent } from '../core';\nimport { registry } from '../global';\nimport { getUniqueId, isFunction, race } from '../lib';\nimport scenario from '../scenario';\nimport type { InferReadableType, ReadableAsyncState, ReadableState } from '../types';\n\nimport type { SyncConfig, SyncSelector } from './types';\n\nconst getConfig = (customConfig: Partial<SyncConfig> = {}): SyncConfig => ({\n ...customConfig,\n id: customConfig.id ?? getUniqueId(syncSelector.name),\n tags: [SystemTag.SELECTOR, ...(customConfig.tags ?? [])],\n});\n\nconst syncSelector = <T extends (ReadableState | ReadableAsyncState)[], U>(\n states: [...T],\n predicate: (...values: { [K in keyof T]: InferReadableType<T[K]> }) => U,\n customConfig?: Partial<SyncConfig>,\n): SyncSelector<U> => {\n const config = getConfig(customConfig);\n let value: U;\n\n const events = {\n changed: new AwaiEvent<U>(),\n };\n\n const get = () => {\n const values = states.map((state) => state.get()) as {\n [K in keyof T]: InferReadableType<T[K]>;\n };\n return predicate(...values);\n };\n\n const then: SyncSelector<U>['then'] = async (resolve) => {\n if (!isFunction(resolve)) {\n return get() as any;\n }\n\n return resolve(get());\n };\n\n scenario(\n () => race(states.map((state) => state.events.changed)),\n () => {\n const newValue = get();\n\n if (!Object.is(newValue, value)) {\n value = newValue;\n events.changed.emit(newValue);\n }\n },\n { tags: [SystemTag.CORE_NODE] },\n );\n\n value = get();\n\n const selectorNode: SyncSelector<U> = { config, events, get, then };\n\n registry.register(selectorNode);\n\n return selectorNode;\n};\n\nexport default syncSelector;\n","import { isReadableAsyncState } from '../lib';\nimport { type InferReadableType } from '../types';\n\nimport asyncSelector from './asyncSelector';\nimport syncSelector from './syncSelector';\nimport type { Config, Selector } from './types';\n\nconst selector = <T extends any[], U>(\n states: [...T],\n predicate: (...values: { [K in keyof T]: InferReadableType<T[K]> }) => U,\n customConfig?: Partial<Config<T, U>>,\n): Selector<T, U> => {\n const isAsyncPredicate = predicate.constructor.name === 'AsyncFunction';\n\n const state =\n isAsyncPredicate || states.some((state) => isReadableAsyncState(state))\n ? asyncSelector(states, predicate, customConfig)\n : syncSelector(states, predicate, customConfig);\n\n return state as Selector<T, U>;\n};\n\nexport default selector;\n"],"names":["AsyncStatus","SystemTag","__publicField","node","getConfig","effect","state"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.mjs","sources":["../src/constants/AsyncStatus.ts","../src/constants/SystemTag.ts","../src/lib/delay.ts","../src/lib/fork.ts","../src/lib/getAggregatedAsyncStatus.ts","../src/lib/getUniqueId.ts","../src/lib/isAbortSignal.ts","../src/lib/isCoreNode.ts","../src/lib/isFunction.ts","../src/lib/isObject.ts","../src/lib/isPromiseLike.ts","../src/lib/isPromiseOrFunction.ts","../src/lib/isReadableAsyncState.ts","../src/lib/race.ts","../src/lib/rejectAfter.ts","../src/lib/SyncQueue.ts","../src/global/queue.ts","../src/core/AwaiEvent.ts","../src/core/flush.ts","../src/core/Registry.ts","../src/global/registry.ts","../src/action/action.ts","../src/async-state/async-state.ts","../src/scenario/lib/getDefaultStrategy.ts","../src/scenario/lib/getTriggerPromise.ts","../src/scenario/lib/getExpirationPromise.ts","../src/scenario/scenario.ts","../src/effect/effect.ts","../src/state/state.ts","../src/family-state/family-state.ts","../src/selector/asyncSelector.ts","../src/selector/syncSelector.ts","../src/selector/selector.ts"],"sourcesContent":["enum AsyncStatus {\n FULFILLED = 'fulfilled',\n PENDING = 'pending',\n REJECTED = 'rejected',\n}\n\nexport default AsyncStatus;\n","enum SystemTag {\n ACTION = '@awai/action',\n ASYNC_SELECTOR = '@awai/async-selector',\n ASYNC_STATE = '@awai/async-state',\n CORE_NODE = '@awai/core-node',\n EFFECT = '@awai/effect',\n FAMILY_STATE = '@awai/family-state',\n SCENARIO = '@awai/scenario',\n SELECTOR = '@awai/selector',\n STATE = '@awai/state',\n}\n\nexport default SystemTag;\n","const delay = (ms: number): Promise<void> => new Promise((resolve) => setTimeout(resolve, ms));\n\nexport default delay;\n","const fork = async (forkFn: () => Promise<any>) => {\n await forkFn();\n};\n\nexport default fork;\n","import { AsyncStatus } from '../constants';\nimport type { ReadableAsyncState } from '../types';\n\nconst getAggregatedAsyncStatus = <T extends Pick<ReadableAsyncState, 'getStatus'>[]>(\n states: T,\n): AsyncStatus => {\n const hasError = states.some((state) => state.getStatus() === AsyncStatus.REJECTED);\n\n if (hasError) {\n return AsyncStatus.REJECTED;\n }\n\n const isPending = states.some((state) => state.getStatus() === AsyncStatus.PENDING);\n\n if (isPending) {\n return AsyncStatus.PENDING;\n }\n\n return AsyncStatus.FULFILLED;\n};\n\nexport default getAggregatedAsyncStatus;\n","const lastScopesIds: Record<string, number> = {};\n\nconst getUniqueId = (scope = 'unknown') => {\n const nextId = (lastScopesIds[scope] ?? 0) + 1;\n lastScopesIds[scope] = nextId;\n return `awai\\$${scope}\\$${nextId}`;\n};\n\nexport default getUniqueId;\n","const isAbortSignal = (value: unknown): value is AbortSignal =>\n typeof AbortSignal !== 'undefined' && value instanceof AbortSignal;\n\nexport default isAbortSignal;\n","import { SystemTag } from '../constants';\nimport type { BaseNode } from '../types';\n\nconst isCoreNode = (node: BaseNode): boolean => node.config.tags.includes(SystemTag.CORE_NODE);\n\nexport default isCoreNode;\n","const isFunction = (value: unknown): value is Function => typeof value === 'function';\n\nexport default isFunction;\n","const isObject = (value: unknown): value is Record<string, unknown> =>\n typeof value === 'object' && value !== null;\n\nexport default isObject;\n","import isFunction from './isFunction';\nimport isObject from './isObject';\n\nconst isPromiseLike = <T>(value: unknown): value is PromiseLike<T> =>\n isObject(value) && (value instanceof Promise || isFunction(value.then));\n\nexport default isPromiseLike;\n","import isFunction from './isFunction';\nimport isPromiseLike from './isPromiseLike';\n\nconst isPromiseOrFunction = <T>(\n value: unknown,\n): value is Promise<T> | ((...args: any) => Promise<T>) =>\n isFunction(value) || isPromiseLike<T>(value);\n\nexport default isPromiseOrFunction;\n","import type { ReadableAsyncState } from '../types';\n\nimport isFunction from './isFunction';\nimport isObject from './isObject';\n\nconst isReadableAsyncState = <T>(value: unknown): value is ReadableAsyncState<T> =>\n isObject(value) &&\n isFunction(value.get) &&\n isFunction(value.getAsync) &&\n isFunction(value.getPromise) &&\n isFunction(value.then);\n\nexport default isReadableAsyncState;\n","import isPromiseLike from './isPromiseLike';\nimport isFunction from './isFunction';\n\nconst race = async <T extends readonly unknown[] | []>(promises: T, abortSignal?: AbortSignal) => {\n if (abortSignal?.aborted) {\n return Promise.reject(abortSignal.reason);\n }\n\n const internalAbortController = new AbortController();\n\n const abort = () => {\n internalAbortController.abort();\n abortSignal?.removeEventListener('abort', abort);\n };\n\n abortSignal?.addEventListener('abort', abort);\n\n const abortablePromises = promises.map((promise) => {\n return isAbortable(promise) ? promise.abortable(internalAbortController.signal) : promise;\n }) as Promise<T[number]>[];\n\n return await Promise.race(abortablePromises).finally(abort);\n};\n\nexport default race;\n\ntype AbortablePromise<T> = Promise<T> & { abortable: (signal: AbortSignal) => Promise<T> };\n\nconst isAbortable = <T>(promise: unknown): promise is AbortablePromise<T> =>\n isPromiseLike<T>(promise) && 'abortable' in promise && isFunction(promise.abortable);\n","const rejectAfter = (ms: number): Promise<void> => {\n return new Promise((_, reject) => setTimeout(reject, ms));\n};\n\nexport default rejectAfter;\n","/**\n * @description\n * This helper is needed to emit events synchronously, so that scenarios/effects/selectors\n * can resubscribe to an event before another emission.\n *\n * @example\n * const state = state(0);\n *\n * scenario(state.events.change, () => {\n * // Without `SyncQueue` this scenario would only run once\n * });\n *\n * state.set(1);\n * state.set(2);\n */\n\nexport default class SyncQueue {\n private callbacksQueue: Function[] = [];\n private isDequeuing = false;\n\n public enqueue(callback: Function) {\n this.callbacksQueue.push(callback);\n this.dequeue();\n }\n\n private dequeue = async () => {\n if (this.isDequeuing || this.callbacksQueue.length === 0) {\n return;\n }\n\n this.isDequeuing = true;\n const callback = this.callbacksQueue.shift()!;\n callback();\n\n queueMicrotask(() => {\n this.isDequeuing = false;\n this.dequeue();\n });\n };\n}\n","import { SyncQueue } from '../lib';\n\nconst queue = new SyncQueue();\n\nexport default queue;\n","import queue from '../global/queue';\nimport { isFunction } from '../lib';\n\ntype Resolver<T> = (value: T) => any;\ntype FilterPredicate<T> = (value: T) => boolean;\n\nexport default class AwaiEvent<T = void> {\n private _awaiters: Resolver<T>[] = [];\n\n then: PromiseLike<T>['then'] = (onfulfilled) => {\n return new Promise<any>((resolve, reject) => {\n this._awaiters.push((value: T) => {\n try {\n const result = isFunction(onfulfilled) ? onfulfilled(value) : value;\n resolve(result);\n } catch (error) {\n reject(error);\n }\n });\n });\n };\n\n abortable(abortSignal: AbortSignal): Promise<T> {\n if (abortSignal.aborted) {\n return Promise.reject(abortSignal.reason);\n }\n\n return new Promise<T>((resolve, reject) => {\n const resolveWithCleanup: Resolver<T> = (value: T) => {\n abortSignal.removeEventListener('abort', abortionHandler);\n resolve(value);\n };\n\n this._awaiters.push(resolveWithCleanup);\n\n const abortionHandler = () => {\n this._awaiters = this._awaiters.filter((awaiter) => awaiter !== resolveWithCleanup);\n reject(abortSignal.reason);\n };\n\n abortSignal.addEventListener('abort', abortionHandler, { once: true });\n });\n }\n\n emit(value: T) {\n queue.enqueue(async () => {\n const awaiters = this._awaiters;\n this._awaiters = [];\n\n for (const resolve of awaiters) {\n resolve(value);\n }\n });\n }\n\n async filter(predicate: FilterPredicate<T>) {\n return new Promise(async (resolve) => {\n while (true) {\n const newValue = await this;\n const isApplicable = Boolean(predicate(newValue));\n\n if (isApplicable) {\n resolve(newValue);\n return;\n }\n }\n });\n }\n}\n","const flush = () => new Promise<void>((resolve) => setTimeout(resolve, 0));\n\nexport default flush;\n","import { isCoreNode } from '../lib';\nimport type BaseNode from '../types/BaseNode';\n\nimport AwaiEvent from './AwaiEvent';\n\nexport default class Registry<T extends BaseNode> {\n private _nodes: T[] = [];\n public readonly events = {\n deregistered: new AwaiEvent<T['config']['id']>(),\n registered: new AwaiEvent<T>(),\n };\n\n public async register(node: T) {\n if (isCoreNode(node)) {\n return;\n }\n\n this._nodes.push(node);\n this.events.registered.emit(node);\n }\n\n public async deregister(id: BaseNode['config']['id']) {\n const node = this._nodes.find((node) => node.config.id === id);\n\n if (!node) {\n return;\n }\n\n this._nodes = this._nodes.filter((node) => node.config.id !== id);\n this.events.deregistered.emit(id);\n }\n\n get nodes() {\n return [...this._nodes];\n }\n}\n","import { Registry } from '../core';\n\nconst registry = new Registry();\n\nexport default registry;\n","import { SystemTag } from '../constants';\nimport { AwaiEvent, flush } from '../core';\nimport { registry } from '../global';\nimport { getUniqueId, isFunction } from '../lib';\n\nimport type { CallbackAction, Config, EmptyAction } from './types';\n\nconst getConfig = (customConfig: Partial<Config> = {}): Config => ({\n ...customConfig,\n id: customConfig.id ?? getUniqueId(action.name),\n tags: [SystemTag.ACTION, ...(customConfig.tags ?? [])],\n});\n\nfunction action<Args extends any[] = []>(): EmptyAction<Args>;\nfunction action<Args extends any[] = []>(config?: Partial<Config>): EmptyAction<Args>;\nfunction action<Args extends any[], Return = void>(\n callback: (...args: Args) => Return,\n config?: Partial<Config>,\n): CallbackAction<Args, Return>;\n\nfunction action<Args extends any[], Return = void>(\n ...args: [Partial<Config>?] | [(...args: Args) => Return, Partial<Config>?]\n): EmptyAction<Args> | CallbackAction<Args, Return> {\n type Action = EmptyAction<Args> | CallbackAction<Args, Return>;\n\n const hasCallback = isFunction(args[0]);\n const [callback, customConfig] = hasCallback\n ? (args as [(...args: Args) => Return, Partial<Config>?])\n : ([, ...args] as [undefined, Partial<Config>?]);\n\n const config = getConfig(customConfig);\n\n const events = {\n invoked: new AwaiEvent(),\n rejected: hasCallback ? new AwaiEvent() : undefined,\n fulfilled: hasCallback ? new AwaiEvent() : undefined,\n } satisfies Action['events'];\n\n const invoke = async (...invokeArgs: Args) => {\n const invocationId = getUniqueId('invocation');\n\n events.invoked.emit({ arguments: invokeArgs, config, invocationId });\n\n try {\n const valueOrPromise: Return | Promise<Return> = isFunction(callback)\n ? callback(...invokeArgs)\n : (undefined as Return);\n\n const value = await valueOrPromise;\n await flush();\n events.fulfilled?.emit({ arguments: invokeArgs, config, result: value, invocationId });\n return value;\n } catch (error) {\n events.rejected?.emit({\n arguments: invokeArgs,\n config,\n error,\n invocationId,\n });\n throw error;\n }\n };\n\n const actionNode = Object.assign(invoke, { config, events }) as Action;\n\n registry.register(actionNode);\n\n return actionNode;\n}\n\nexport default action;\n","import { AsyncStatus, SystemTag } from '../constants';\nimport { AwaiEvent, flush } from '../core';\nimport { registry } from '../global';\nimport { getUniqueId, isFunction, isPromiseOrFunction, race } from '../lib';\n\nimport type { VersionIgnoredEvent, AsyncState, Config, InitialValue, Version } from './types';\n\nconst getConfig = (customConfig: Partial<Config> = {}): Config => ({\n ...customConfig,\n id: customConfig.id ?? getUniqueId(asyncState.name),\n tags: [SystemTag.ASYNC_STATE, ...(customConfig.tags ?? [])],\n});\n\nconst asyncState = <T>(\n initialValue?: InitialValue<T>,\n customConfig?: Partial<Config>,\n): AsyncState<T> => {\n const config = getConfig(customConfig);\n const isInitialValueAsync = isPromiseOrFunction(initialValue);\n let version: Version = isInitialValueAsync ? 0 : 1;\n let lastPendingVersion: Version = version;\n let status: AsyncStatus = AsyncStatus.FULFILLED;\n let error: unknown = null;\n let value: T | undefined = isInitialValueAsync ? undefined : initialValue;\n\n const events: AsyncState<T>['events'] = {\n changed: new AwaiEvent<T | undefined>(),\n fulfilled: new AwaiEvent<T>(),\n ignored: new AwaiEvent<VersionIgnoredEvent<T>>(),\n rejected: new AwaiEvent<unknown>(),\n requested: new AwaiEvent<void>(),\n };\n\n const getStatus: AsyncState<T>['getStatus'] = () => status;\n\n const set: AsyncState<T>['set'] = async (nextValueOrResolver) => {\n const currentPendingVersion: Version = (lastPendingVersion + 1) % Number.MAX_SAFE_INTEGER;\n lastPendingVersion = currentPendingVersion;\n\n try {\n if (isPromiseOrFunction(nextValueOrResolver)) {\n status = AsyncStatus.PENDING;\n events.requested.emit();\n }\n\n let newValue = isFunction(nextValueOrResolver)\n ? await nextValueOrResolver(value)\n : await nextValueOrResolver;\n const isChanged = !Object.is(newValue, value);\n\n if (currentPendingVersion !== lastPendingVersion || !isChanged) {\n events.ignored.emit({ value: newValue, version: currentPendingVersion });\n return;\n }\n\n error = null;\n value = newValue;\n status = AsyncStatus.FULFILLED;\n\n events.fulfilled.emit(newValue);\n\n if (isChanged) {\n events.changed.emit(value);\n }\n } catch (e) {\n if (currentPendingVersion !== lastPendingVersion) {\n events.ignored.emit({ error: e, version: currentPendingVersion });\n return;\n }\n\n const isChanged = !Object.is(e, error);\n\n error = e;\n value = undefined;\n status = AsyncStatus.REJECTED;\n\n events.rejected.emit(error);\n\n if (isChanged) {\n events.changed.emit(value);\n }\n }\n\n version = lastPendingVersion;\n await flush();\n };\n\n const get: AsyncState<T>['get'] = () => value;\n\n const getAsync: AsyncState<T>['getAsync'] = () => ({\n error,\n isLoading: status === AsyncStatus.PENDING,\n value,\n });\n\n const getPromise: AsyncState<T>['getPromise'] = async () => {\n if (version === lastPendingVersion) {\n return value!;\n }\n\n await race([events.fulfilled, events.rejected]);\n\n if (error) {\n throw error;\n }\n\n return value!;\n };\n\n const then: PromiseLike<T>['then'] = async (resolve) => {\n if (!isFunction(resolve)) {\n return getPromise() as any;\n }\n\n return resolve(await getPromise());\n };\n\n if (isInitialValueAsync) {\n set(initialValue);\n }\n\n const asyncStateNode: AsyncState<T> = {\n config,\n events,\n get,\n getAsync,\n getPromise,\n getStatus,\n set,\n then,\n };\n\n registry.register(asyncStateNode);\n\n return asyncStateNode;\n};\n\nexport default asyncState;\n","import type { Config } from '../types';\n\nconst getDefaultStrategy = (\n isPlainPromiseTrigger: boolean,\n hasTrigger: boolean,\n): Config<unknown>['strategy'] => {\n if (isPlainPromiseTrigger) {\n return 'once';\n }\n\n if (hasTrigger) {\n return 'fork';\n }\n\n return 'cyclic';\n};\n\nexport default getDefaultStrategy;\n","import { isFunction } from '../../lib';\nimport type { Trigger } from '../types';\n\nconst getTriggerPromise = <T>(trigger: Trigger<T> | undefined) => {\n if (!trigger) {\n return Promise.resolve(undefined as T);\n }\n\n return isFunction(trigger) ? trigger() : trigger;\n};\n\nexport default getTriggerPromise;\n","import type { ShouldExpirePredicate, UntilTrigger } from '../types';\n\nconst getExpirationPromise = <E>(until: Exclude<UntilTrigger<E>, ShouldExpirePredicate>) => {\n if (typeof AbortSignal !== 'undefined' && until instanceof AbortSignal) {\n if (until.aborted) {\n return Promise.resolve(undefined);\n }\n\n return new Promise((resolve) => {\n until.addEventListener('abort', () => resolve(undefined), { once: true });\n });\n }\n\n return Promise.resolve(until) as Promise<E>;\n};\n\nexport default getExpirationPromise;\n","import { SystemTag } from '../constants';\nimport { AwaiEvent, flush } from '../core';\nimport { registry } from '../global';\nimport { getUniqueId, isAbortSignal, isFunction, isObject } from '../lib';\n\nimport { getDefaultStrategy, getExpirationPromise, getTriggerPromise } from './lib';\nimport type { Callback, Config, Scenario, Trigger } from './types';\n\nconst getConfig = <E = unknown>(\n isPlainPromiseTrigger: boolean,\n hasTrigger: boolean,\n customConfig: Partial<Config<E>> = {},\n): Config<E> => ({\n ...customConfig,\n id: customConfig.id ?? getUniqueId(scenario.name),\n strategy: customConfig.strategy ?? getDefaultStrategy(isPlainPromiseTrigger, hasTrigger),\n tags: [SystemTag.SCENARIO, ...(customConfig.tags ?? [])],\n});\n\nfunction scenario<T, R, E = unknown>(\n trigger: Trigger<T>,\n callback: Callback<T, R>,\n customConfig?: Partial<Config<E>>,\n): Scenario<T, R, E>;\n\nfunction scenario<T, R, E = unknown>(\n callback: Callback<T, R>,\n config?: Partial<Config<E>>,\n): Scenario<T, R, E>;\n\nfunction scenario<T, R, E = unknown>(\n ...args: [Trigger<T>, Callback<T, R>, Partial<Config<E>>?] | [Callback<T, R>, Partial<Config<E>>?]\n): Scenario<T, R, E> {\n const hasTrigger = isFunction(args[1]);\n\n const trigger = hasTrigger ? (args[0] as Trigger<T>) : undefined;\n const callback = (hasTrigger ? args[1] : args[0]) as Callback<T, R>;\n const customConfig = (hasTrigger ? args[2] : args[1]) as Partial<Config<E>> | undefined;\n const isPlainPromiseTrigger = hasTrigger && isObject(args[0]) && args[0].constructor === Promise;\n\n const config = getConfig<E>(isPlainPromiseTrigger, hasTrigger, customConfig);\n const { strategy, until } = config;\n const isFiniteScenario =\n isPlainPromiseTrigger || strategy === 'once' || typeof until !== 'undefined';\n let expirationEvent: E | undefined;\n let runningCallbacksCount = 0;\n let shouldExpire = false;\n let expired = false;\n\n const events: Scenario<T, R, E>['events'] = {\n fulfilled: new AwaiEvent(),\n rejected: new AwaiEvent(),\n settled: new AwaiEvent(),\n started: new AwaiEvent(),\n };\n\n const checkShouldExpire = () =>\n strategy === 'once' ||\n shouldExpire ||\n (isAbortSignal(until) ? until.aborted : false) ||\n (isFunction(until) ? until() : false);\n\n const expire = async () => {\n if (expired) {\n return;\n }\n\n expired = true;\n await flush();\n await events.settled.emit({ event: expirationEvent, config });\n await flush();\n await registry.deregister(config.id);\n };\n\n if (until && !isFunction(until)) {\n getExpirationPromise<E>(until).then((event) => {\n shouldExpire = true;\n expirationEvent = event as E;\n\n if (runningCallbacksCount === 0) {\n expire();\n }\n });\n }\n\n const run = async () => {\n getTriggerPromise(trigger).then(\n (event) => {\n if (expired) {\n return;\n }\n\n runningCallbacksCount++;\n events.started.emit({ config, event });\n\n try {\n Promise.resolve(callback(event))\n .then((result) => {\n flush().then(() => {\n events.fulfilled.emit({ config, event, result });\n });\n })\n .catch((error) => {\n events.rejected.emit(error);\n })\n .finally(() => {\n runningCallbacksCount--;\n\n if (checkShouldExpire() && runningCallbacksCount === 0) {\n expire();\n return;\n }\n\n if (strategy === 'cyclic') {\n queueMicrotask(run);\n }\n });\n } catch (error) {\n runningCallbacksCount--;\n events.rejected.emit(error);\n }\n\n if (strategy === 'fork') {\n queueMicrotask(run);\n }\n },\n () => {\n if (checkShouldExpire() && runningCallbacksCount === 0) {\n expire();\n return;\n }\n\n queueMicrotask(run);\n },\n );\n };\n\n const then: Scenario<T, R, E>['then'] = (resolve) => {\n if (!isFiniteScenario) {\n console.warn(\n 'You seem to await an infinite scenario. This causes a memory leak in your application.',\n );\n }\n\n if (!isFunction(resolve)) {\n return Promise.resolve(events.settled) as any;\n }\n\n return events.settled.then(resolve);\n };\n\n const scenarioNode: Scenario<T, R, E> = { config, events, then };\n\n registry.register(scenarioNode);\n\n run();\n\n return scenarioNode;\n}\n\nexport default scenario;\n","import { AsyncStatus, SystemTag } from '../constants';\nimport { AwaiEvent } from '../core';\nimport { registry } from '../global';\nimport { getAggregatedAsyncStatus, getUniqueId, isFunction, isReadableAsyncState } from '../lib';\nimport scenario from '../scenario';\nimport { type InferReadableType, type ReadableAsyncState, type ReadableState } from '../types';\n\nimport type { CleanupCallback, Config, Effect } from './types';\n\nconst getConfig = (customConfig: Partial<Config> = {}): Config => ({\n ...customConfig,\n id: customConfig.id ?? getUniqueId(effect.name),\n tags: [SystemTag.EFFECT, ...(customConfig.tags ?? [])],\n});\n\nconst effect = <\n T extends (ReadableState<any> | ReadableAsyncState<any>)[],\n V extends { [K in keyof T]: InferReadableType<T[K]> },\n>(\n states: [...T],\n effect: (...values: V) => CleanupCallback | void,\n customConfig?: Partial<Config>,\n): Effect<T, V> => {\n const config = getConfig(customConfig);\n const asyncStates = states.filter(isReadableAsyncState);\n\n let cleanup: ReturnType<typeof effect>;\n\n const events: Effect<T, V>['events'] = {\n cleared: new AwaiEvent(),\n started: new AwaiEvent(),\n };\n\n const runEffect = () => {\n const values = states.map((state) => state.get()) as V;\n const status = getAggregatedAsyncStatus(asyncStates);\n\n if (status !== AsyncStatus.FULFILLED) {\n return;\n }\n\n events.started.emit({ states, values });\n\n cleanup = effect(...values);\n };\n\n queueMicrotask(() => {\n scenario(\n () => Promise.race(states.map((state) => state.events.changed)),\n () => {\n if (isFunction(cleanup)) {\n cleanup();\n events.cleared.emit({ states });\n }\n\n runEffect();\n },\n { tags: [SystemTag.CORE_NODE] },\n );\n\n queueMicrotask(runEffect);\n });\n\n const effectNode: Effect<T, V> = { config, events };\n\n registry.register(effectNode);\n\n return effectNode;\n};\n\nexport default effect;\n","import { SystemTag } from '../constants';\nimport { AwaiEvent, flush } from '../core';\nimport { getUniqueId, isFunction } from '../lib';\nimport { registry } from '../global';\n\nimport type { Config, State } from './types';\n\nconst getConfig = (customConfig: Partial<Config> = {}): Config => ({\n ...customConfig,\n id: customConfig.id ?? getUniqueId(state.name),\n tags: [SystemTag.STATE, ...(customConfig.tags ?? [])],\n});\n\nconst state = <T>(initialValue: T, customConfig?: Partial<Config>): State<T> => {\n const config = getConfig(customConfig);\n\n let value = initialValue;\n\n const events = {\n changed: new AwaiEvent<T>(),\n };\n\n const set: State<T>['set'] = (nextValueOrResolver) => {\n let newValue = isFunction(nextValueOrResolver)\n ? nextValueOrResolver(value)\n : nextValueOrResolver;\n\n if (!Object.is(newValue, value)) {\n value = newValue;\n events.changed.emit(newValue);\n }\n\n return flush().then(() => newValue);\n };\n\n const get = () => value;\n\n const then: State<T>['then'] = async (resolve) => {\n if (!isFunction(resolve)) {\n return value as any;\n }\n\n return resolve(value);\n };\n\n const stateNode: State<T> = { config, events, get, set, then };\n\n registry.register(stateNode);\n\n return stateNode;\n};\n\nexport default state;\n","import asyncState, { type AsyncState } from '../async-state';\nimport { SystemTag } from '../constants';\nimport { AwaiEvent, flush } from '../core';\nimport { registry } from '../global';\nimport { getUniqueId, isFunction } from '../lib';\nimport scenario from '../scenario';\nimport state, { type State } from '../state';\nimport type { Id } from '../types';\n\nimport type { Config, FamilyState } from './types';\n\nconst getConfig = (customConfig: Partial<Config> = {}): Config => ({\n ...customConfig,\n id: customConfig.id ?? getUniqueId(familyState.name),\n tags: [SystemTag.FAMILY_STATE, ...(customConfig.tags ?? [])],\n});\n\nconst familyState = <\n T,\n Initializer extends (id: Id) => T | Promise<T>,\n Family extends Record<Id, NodeType>,\n NodeType extends State<any> | AsyncState<any> = ReturnType<Initializer> extends PromiseLike<\n infer Q\n >\n ? AsyncState<Q>\n : State<ReturnType<Initializer>>,\n>(\n initializer: Initializer,\n customConfig?: Partial<Config>,\n): FamilyState<NodeType> => {\n const config = getConfig(customConfig);\n\n let family: Family = {} as Family;\n\n const events = {\n changed: new AwaiEvent<Record<Id, NodeType>>(),\n stateCreated: new AwaiEvent<Id>(),\n };\n\n const getNode = (id: Id): NodeType => {\n if (id in family) {\n return family[id];\n }\n\n const initialValue = initializer(id);\n\n const stateNode =\n initialValue instanceof Promise\n ? asyncState(initialValue, { tags: [SystemTag.CORE_NODE] })\n : state(initialValue, { tags: [SystemTag.CORE_NODE] });\n\n family = { ...family, [id]: stateNode };\n events.stateCreated.emit(id);\n events.changed.emit(family);\n\n scenario(\n stateNode.events.changed,\n () => {\n events.changed.emit(family);\n },\n { tags: [SystemTag.CORE_NODE] },\n );\n\n return stateNode as NodeType;\n };\n\n const setNode = async (id: Id, stateNode: NodeType) => {\n if (id in family) {\n throw new Error(`Cannot set node. Node with id \"${id}\" already exists.`);\n }\n\n family = { ...family, [id]: stateNode };\n\n scenario(\n stateNode.events.changed,\n () => {\n events.changed.emit(family);\n },\n { tags: [SystemTag.CORE_NODE] },\n );\n\n events.changed.emit(family);\n\n await flush();\n };\n\n const get = () => {\n return family;\n };\n\n const then: FamilyState<NodeType>['then'] = async (resolve) => {\n if (!isFunction(resolve)) {\n return family as any;\n }\n\n return resolve(family);\n };\n\n const familyStateNode: FamilyState<NodeType> = { config, events, get, getNode, setNode, then };\n\n registry.register(familyStateNode);\n\n return familyStateNode;\n};\n\nexport default familyState;\n","import { AsyncStatus, SystemTag } from '../constants';\nimport { AwaiEvent } from '../core';\nimport { registry } from '../global';\nimport {\n fork,\n getAggregatedAsyncStatus,\n getUniqueId,\n isFunction,\n isReadableAsyncState,\n race,\n} from '../lib';\nimport scenario from '../scenario';\nimport type { InferReadableType, ReadableAsyncState, ReadableState } from '../types';\n\nimport type { AsyncConfig, AsyncSelector, VersionIgnoredEvent } from './types';\n\nconst getConfig = (customConfig: Partial<AsyncConfig> = {}): AsyncConfig => ({\n ...customConfig,\n id: customConfig.id ?? getUniqueId(asyncSelector.name),\n tags: [SystemTag.ASYNC_SELECTOR, ...(customConfig.tags ?? [])],\n});\n\nconst asyncSelector = <T extends (ReadableState | ReadableAsyncState)[], U>(\n states: T,\n predicate: (...values: { [K in keyof T]: InferReadableType<T[K]> }) => U,\n customConfig?: Partial<AsyncConfig>,\n): AsyncSelector<U> => {\n type StatesValues = { [K in keyof T]: InferReadableType<T[K]> };\n\n const config = getConfig(customConfig);\n const asyncStates = states.filter(isReadableAsyncState);\n\n let error: AggregateError | unknown | null = null;\n let value: U | undefined;\n let isLoading: boolean = true;\n let version = 0;\n let lastPendingVersion: number = version;\n\n const events: AsyncSelector<U>['events'] = {\n changed: new AwaiEvent<U | undefined>(),\n fulfilled: new AwaiEvent<U>(),\n ignored: new AwaiEvent<VersionIgnoredEvent<U>>(),\n rejected: new AwaiEvent<unknown>(),\n requested: new AwaiEvent<void>(),\n };\n\n const getStatus = () => {\n if (isLoading) {\n return AsyncStatus.PENDING;\n }\n\n const aggregatedStatus = getAggregatedAsyncStatus(asyncStates);\n\n return error !== null && aggregatedStatus === AsyncStatus.FULFILLED\n ? AsyncStatus.REJECTED\n : aggregatedStatus;\n };\n\n const determineNextVersion = async () => {\n const currentPendingVersion = (lastPendingVersion + 1) % Number.MAX_SAFE_INTEGER;\n lastPendingVersion = currentPendingVersion;\n\n const status = getAggregatedAsyncStatus(asyncStates);\n const errors = asyncStates.map((state) => state.getAsync().error).filter(Boolean);\n\n if (status === AsyncStatus.PENDING) {\n isLoading = true;\n }\n\n events.requested.emit();\n\n if (errors.length > 0) {\n error = new AggregateError(errors);\n value = undefined;\n isLoading = status === AsyncStatus.PENDING;\n version = lastPendingVersion;\n events.rejected.emit(error);\n events.changed.emit(value);\n return;\n }\n\n if (status === AsyncStatus.FULFILLED) {\n const values = states.map((state) => state.get()) as StatesValues;\n\n fork(async () => {\n isLoading = true;\n\n try {\n const newValue = await predicate(...values);\n const isChanged = !Object.is(newValue, value);\n\n if (currentPendingVersion !== lastPendingVersion) {\n events.ignored.emit({ value: newValue, version: currentPendingVersion });\n return;\n }\n\n error = null;\n value = newValue;\n\n events.fulfilled.emit(newValue);\n\n if (isChanged) {\n events.changed.emit(value);\n }\n } catch (caughtError) {\n if (currentPendingVersion !== lastPendingVersion) {\n events.ignored.emit({ error: caughtError, version: currentPendingVersion });\n return;\n }\n\n const isChanged = typeof value !== 'undefined';\n\n error = caughtError;\n value = undefined;\n\n events.rejected.emit(caughtError);\n\n if (isChanged) {\n events.changed.emit(value);\n }\n } finally {\n if (currentPendingVersion === lastPendingVersion) {\n version = lastPendingVersion;\n isLoading = false;\n }\n }\n });\n }\n };\n\n scenario(\n async () => {\n const abortController = new AbortController();\n const abortSignal = abortController.signal;\n await Promise.race(\n states.map((state) => {\n return isReadableAsyncState(state)\n ? race(\n [state.events.requested, state.events.rejected, state.events.fulfilled],\n abortSignal,\n )\n : state.events.changed.abortable(abortSignal);\n }),\n );\n abortController.abort();\n },\n determineNextVersion,\n { tags: [SystemTag.CORE_NODE] },\n );\n\n const get = () => value;\n\n const getAsync = () => ({ error, isLoading, value });\n\n const getPromise = async (): Promise<U> => {\n while (isLoading) {\n await race([events.fulfilled, events.rejected]);\n }\n\n if (error) {\n throw error;\n }\n\n return value!;\n };\n\n const then: AsyncSelector<U>['then'] = async (resolve) => {\n if (!isFunction(resolve)) {\n return getPromise() as any;\n }\n\n return resolve(await getPromise());\n };\n\n const selectorNode = {\n config,\n events,\n get,\n getAsync,\n getPromise,\n getStatus,\n then,\n };\n\n queueMicrotask(determineNextVersion);\n\n registry.register(selectorNode);\n\n return selectorNode;\n};\n\nexport default asyncSelector;\n","import { SystemTag } from '../constants';\nimport { AwaiEvent } from '../core';\nimport { registry } from '../global';\nimport { getUniqueId, isFunction, race } from '../lib';\nimport scenario from '../scenario';\nimport type { InferReadableType, ReadableAsyncState, ReadableState } from '../types';\n\nimport type { SyncConfig, SyncSelector } from './types';\n\nconst getConfig = (customConfig: Partial<SyncConfig> = {}): SyncConfig => ({\n ...customConfig,\n id: customConfig.id ?? getUniqueId(syncSelector.name),\n tags: [SystemTag.SELECTOR, ...(customConfig.tags ?? [])],\n});\n\nconst syncSelector = <T extends (ReadableState | ReadableAsyncState)[], U>(\n states: [...T],\n predicate: (...values: { [K in keyof T]: InferReadableType<T[K]> }) => U,\n customConfig?: Partial<SyncConfig>,\n): SyncSelector<U> => {\n const config = getConfig(customConfig);\n let value: U;\n\n const events = {\n changed: new AwaiEvent<U>(),\n };\n\n const get = () => {\n const values = states.map((state) => state.get()) as {\n [K in keyof T]: InferReadableType<T[K]>;\n };\n return predicate(...values);\n };\n\n const then: SyncSelector<U>['then'] = async (resolve) => {\n if (!isFunction(resolve)) {\n return get() as any;\n }\n\n return resolve(get());\n };\n\n scenario(\n () => race(states.map((state) => state.events.changed)),\n () => {\n const newValue = get();\n\n if (!Object.is(newValue, value)) {\n value = newValue;\n events.changed.emit(newValue);\n }\n },\n { tags: [SystemTag.CORE_NODE] },\n );\n\n value = get();\n\n const selectorNode: SyncSelector<U> = { config, events, get, then };\n\n registry.register(selectorNode);\n\n return selectorNode;\n};\n\nexport default syncSelector;\n","import { isReadableAsyncState } from '../lib';\nimport { type InferReadableType } from '../types';\n\nimport asyncSelector from './asyncSelector';\nimport syncSelector from './syncSelector';\nimport type { Config, Selector } from './types';\n\nconst selector = <T extends any[], U>(\n states: [...T],\n predicate: (...values: { [K in keyof T]: InferReadableType<T[K]> }) => U,\n customConfig?: Partial<Config<T, U>>,\n): Selector<T, U> => {\n const isAsyncPredicate = predicate.constructor.name === 'AsyncFunction';\n\n const state =\n isAsyncPredicate || states.some((state) => isReadableAsyncState(state))\n ? asyncSelector(states, predicate, customConfig)\n : syncSelector(states, predicate, customConfig);\n\n return state as Selector<T, U>;\n};\n\nexport default selector;\n"],"names":["AsyncStatus","SystemTag","__publicField","node","getConfig","effect","state"],"mappings":"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"}
|