awai 1.0.0-rc-4 → 1.0.0-rc-6

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 CHANGED
@@ -57,7 +57,19 @@ const isPromiseOrFunction = (value) => isFunction(value) || isPromiseLike(value)
57
57
 
58
58
  const isReadableAsyncState = (value) => isObject(value) && isFunction(value.get) && isFunction(value.getAsync) && isFunction(value.getPromise) && isFunction(value.then);
59
59
 
60
- const noop = () => void 0;
60
+ const race = async (promises, abortSignal) => {
61
+ const internalAbortController = new AbortController();
62
+ const abort = () => {
63
+ internalAbortController.abort();
64
+ abortSignal?.removeEventListener("abort", abort);
65
+ };
66
+ abortSignal?.addEventListener("abort", abort);
67
+ const abortablePromises = promises.map((promise) => {
68
+ return isAbortable(promise) ? promise.abortable(internalAbortController.signal) : promise;
69
+ });
70
+ return await Promise.race(abortablePromises).finally(abort);
71
+ };
72
+ const isAbortable = (promise) => isPromiseLike(promise) && "abortable" in promise && isFunction(promise.abortable);
61
73
 
62
74
  const rejectAfter = (ms) => {
63
75
  return new Promise((_, reject) => setTimeout(reject, ms));
@@ -110,15 +122,21 @@ class AwaiEvent {
110
122
  });
111
123
  });
112
124
  }
113
- abortable(abortController) {
125
+ abortable(abortSignal) {
126
+ if (abortSignal.aborted) {
127
+ return Promise.reject(abortSignal.reason);
128
+ }
114
129
  return new Promise((resolve, reject) => {
115
- this._awaiters.push(resolve);
130
+ const resolveWithCleanup = (value) => {
131
+ abortSignal.removeEventListener("abort", abortionHandler);
132
+ resolve(value);
133
+ };
134
+ this._awaiters.push(resolveWithCleanup);
116
135
  const abortionHandler = () => {
117
- this._awaiters = this._awaiters.filter((awaiter) => awaiter !== resolve);
118
- reject("Aborted");
119
- abortController.signal.removeEventListener("abort", abortionHandler);
136
+ this._awaiters = this._awaiters.filter((awaiter) => awaiter !== resolveWithCleanup);
137
+ reject(abortSignal.reason);
120
138
  };
121
- abortController.signal.addEventListener("abort", abortionHandler);
139
+ abortSignal.addEventListener("abort", abortionHandler, { once: true });
122
140
  });
123
141
  }
124
142
  emit(value) {
@@ -194,18 +212,20 @@ function action(...args) {
194
212
  fulfilled: hasCallback ? new AwaiEvent() : void 0
195
213
  };
196
214
  const invoke = async (...invokeArgs) => {
197
- events.invoked.emit({ arguments: invokeArgs, config });
215
+ const invocationId = getUniqueId("invocation");
216
+ events.invoked.emit({ arguments: invokeArgs, config, invocationId });
198
217
  try {
199
218
  const valueOrPromise = isFunction(callback) ? callback(...invokeArgs) : void 0;
200
219
  const value = await valueOrPromise;
201
220
  await flush();
202
- events.fulfilled?.emit({ arguments: invokeArgs, config, result: value });
221
+ events.fulfilled?.emit({ arguments: invokeArgs, config, result: value, invocationId });
203
222
  return value;
204
223
  } catch (error) {
205
224
  events.rejected?.emit({
206
225
  arguments: invokeArgs,
207
226
  config,
208
- error
227
+ error,
228
+ invocationId
209
229
  });
210
230
  throw error;
211
231
  }
@@ -284,15 +304,11 @@ const asyncState = (initialValue, customConfig) => {
284
304
  if (version === lastPendingVersion) {
285
305
  return value;
286
306
  }
287
- const abortController = new AbortController();
288
- try {
289
- return await new Promise((resolve, reject) => {
290
- events.fulfilled.abortable(abortController).then(resolve).catch(noop);
291
- events.rejected.abortable(abortController).then(reject).catch(noop);
292
- });
293
- } finally {
294
- abortController.abort();
307
+ await race([events.fulfilled, events.rejected]);
308
+ if (error) {
309
+ throw error;
295
310
  }
311
+ return value;
296
312
  };
297
313
  const then = async (resolve) => {
298
314
  if (!isFunction(resolve)) {
@@ -334,6 +350,15 @@ const getTriggerPromise = (trigger) => {
334
350
  return isFunction(trigger) ? trigger() : trigger;
335
351
  };
336
352
 
353
+ const getExpirationPromise = (until) => {
354
+ if (typeof AbortSignal !== "undefined" && until instanceof AbortSignal) {
355
+ return new Promise((resolve) => {
356
+ until.addEventListener("abort", () => resolve(void 0), { once: true });
357
+ });
358
+ }
359
+ return Promise.resolve(until);
360
+ };
361
+
337
362
  const getConfig$5 = (isPlainPromiseTrigger, hasTrigger, customConfig = {}) => ({
338
363
  ...customConfig,
339
364
  id: customConfig.id ?? getUniqueId(scenario.name),
@@ -341,17 +366,15 @@ const getConfig$5 = (isPlainPromiseTrigger, hasTrigger, customConfig = {}) => ({
341
366
  tags: [SystemTag.SCENARIO, ...customConfig.tags ?? []]
342
367
  });
343
368
  function scenario(...args) {
344
- const hasTrigger = isFunction(args[1]) || isFunction(args[2]);
345
- const hasExpirationTrigger = isFunction(args[2]);
369
+ const hasTrigger = isFunction(args[1]);
346
370
  const trigger = hasTrigger ? args[0] : void 0;
347
- const expirationTrigger = hasExpirationTrigger ? args[1] : void 0;
348
- const callback = args.findLast(isFunction);
349
- const customConfig = args.at(args.indexOf(callback) + 1);
371
+ const callback = hasTrigger ? args[1] : args[0];
372
+ const customConfig = hasTrigger ? args[2] : args[1];
350
373
  const isPlainPromiseTrigger = hasTrigger && isObject(args[0]) && args[0].constructor === Promise;
351
- const isFiniteScenario = isPlainPromiseTrigger || hasExpirationTrigger || typeof customConfig?.repeat !== "undefined";
352
374
  const config = getConfig$5(isPlainPromiseTrigger, hasTrigger, customConfig);
353
- const { strategy } = config;
354
- let { repeat = Infinity } = config;
375
+ const { strategy, until } = config;
376
+ const isFiniteScenario = isPlainPromiseTrigger || strategy === "once" || typeof until !== "undefined";
377
+ let expirationEvent;
355
378
  let runningCallbacksCount = 0;
356
379
  let shouldExpire = false;
357
380
  let expired = false;
@@ -361,26 +384,27 @@ function scenario(...args) {
361
384
  settled: new AwaiEvent(),
362
385
  started: new AwaiEvent()
363
386
  };
364
- const checkShouldExpire = () => repeat <= 0 || strategy === "once" || shouldExpire || isFunction(expirationTrigger) && expirationTrigger();
365
- const expire = async (event) => {
387
+ const untilPredicate = isFunction(until) ? until : void 0;
388
+ const checkShouldExpire = () => strategy === "once" || shouldExpire || (untilPredicate ? untilPredicate() : false);
389
+ const expire = async () => {
366
390
  expired = true;
367
391
  await flush();
368
- await events.settled.emit({ event, config });
392
+ await events.settled.emit({ event: expirationEvent, config });
369
393
  await flush();
370
394
  await registry.deregister(config.id);
371
395
  };
372
- if (isPromiseLike(expirationTrigger)) {
373
- Promise.resolve(expirationTrigger).then((event) => {
396
+ if (until && !isFunction(until)) {
397
+ getExpirationPromise(until).then((event) => {
374
398
  shouldExpire = true;
399
+ expirationEvent = event;
375
400
  if (runningCallbacksCount === 0) {
376
- expire(event);
401
+ expire();
377
402
  }
378
403
  });
379
404
  }
380
405
  const run = async () => {
381
406
  getTriggerPromise(trigger).then(
382
407
  (event) => {
383
- repeat--;
384
408
  if (expired) {
385
409
  return;
386
410
  }
@@ -585,6 +609,9 @@ const asyncSelector = (states, predicate, customConfig) => {
585
609
  requested: new AwaiEvent()
586
610
  };
587
611
  const getStatus = () => {
612
+ if (isLoading) {
613
+ return AsyncStatus.PENDING;
614
+ }
588
615
  const aggregatedStatus = getAggregatedAsyncStatus(asyncStates);
589
616
  return error !== null && aggregatedStatus === AsyncStatus.FULFILLED ? AsyncStatus.REJECTED : aggregatedStatus;
590
617
  };
@@ -647,13 +674,13 @@ const asyncSelector = (states, predicate, customConfig) => {
647
674
  scenario(
648
675
  async () => {
649
676
  const abortController = new AbortController();
677
+ const abortSignal = abortController.signal;
650
678
  await Promise.race(
651
- states.flatMap((state) => {
652
- return isReadableAsyncState(state) ? [
653
- state.events.requested.abortable(abortController),
654
- state.events.rejected.abortable(abortController),
655
- state.events.fulfilled.abortable(abortController)
656
- ] : state.events.changed.abortable(abortController);
679
+ states.map((state) => {
680
+ return isReadableAsyncState(state) ? race(
681
+ [state.events.requested, state.events.rejected, state.events.fulfilled],
682
+ abortSignal
683
+ ) : state.events.changed.abortable(abortSignal);
657
684
  })
658
685
  );
659
686
  abortController.abort();
@@ -664,10 +691,13 @@ const asyncSelector = (states, predicate, customConfig) => {
664
691
  const get = () => value;
665
692
  const getAsync = () => ({ error, isLoading, value });
666
693
  const getPromise = async () => {
667
- const values = await Promise.all(
668
- states.map((state) => isReadableAsyncState(state) ? state.getPromise() : state.get())
669
- );
670
- return predicate(...values);
694
+ while (isLoading) {
695
+ await race([events.fulfilled, events.rejected]);
696
+ }
697
+ if (error) {
698
+ throw error;
699
+ }
700
+ return value;
671
701
  };
672
702
  const then = async (resolve) => {
673
703
  if (!isFunction(resolve)) {
@@ -711,11 +741,7 @@ const syncSelector = (states, predicate, customConfig) => {
711
741
  return resolve(get());
712
742
  };
713
743
  scenario(
714
- async () => {
715
- const abortController = new AbortController();
716
- await Promise.race(states.map((state) => state.events.changed.abortable(abortController)));
717
- abortController.abort();
718
- },
744
+ () => race(states.map((state) => state.events.changed)),
719
745
  () => {
720
746
  const newValue = get();
721
747
  if (!Object.is(newValue, value)) {
@@ -753,6 +779,7 @@ exports.getAggregatedAsyncStatus = getAggregatedAsyncStatus;
753
779
  exports.isPromiseLike = isPromiseLike;
754
780
  exports.isReadableAsyncState = isReadableAsyncState;
755
781
  exports.queue = queue;
782
+ exports.race = race;
756
783
  exports.registry = registry;
757
784
  exports.rejectAfter = rejectAfter;
758
785
  exports.scenario = scenario;
@@ -1 +1 @@
1
- {"version":3,"file":"index.cjs","sources":["../src/constants/AsyncStatus.ts","../src/constants/SystemTag.ts","../src/lib/delay.ts","../src/lib/fork.ts","../src/lib/getAggregatedAsyncStatus.ts","../src/lib/getUniqueId.ts","../src/lib/isCoreNode.ts","../src/lib/isFunction.ts","../src/lib/isObject.ts","../src/lib/isPromiseLike.ts","../src/lib/isPromiseOrFunction.ts","../src/lib/isReadableAsyncState.ts","../src/lib/noop.ts","../src/lib/rejectAfter.ts","../src/lib/SyncQueue.ts","../src/global/queue.ts","../src/core/AwaiEvent.ts","../src/core/flush.ts","../src/core/Registry.ts","../src/global/registry.ts","../src/action/action.ts","../src/async-state/async-state.ts","../src/scenario/lib/getDefaultStrategy.ts","../src/scenario/lib/getTriggerPromise.ts","../src/scenario/scenario.ts","../src/effect/effect.ts","../src/state/state.ts","../src/family-state/family-state.ts","../src/selector/asyncSelector.ts","../src/selector/syncSelector.ts","../src/selector/selector.ts"],"sourcesContent":["enum AsyncStatus {\n FULFILLED = 'fulfilled',\n PENDING = 'pending',\n REJECTED = 'rejected',\n}\n\nexport default AsyncStatus;\n","enum SystemTag {\n ACTION = '@awai/action',\n ASYNC_SELECTOR = '@awai/async-selector',\n ASYNC_STATE = '@awai/async-state',\n CORE_NODE = '@awai/core-node',\n EFFECT = '@awai/effect',\n FAMILY_STATE = '@awai/family-state',\n SCENARIO = '@awai/scenario',\n SELECTOR = '@awai/selector',\n STATE = '@awai/state',\n}\n\nexport default SystemTag;\n","const delay = (ms: number): Promise<void> => new Promise((resolve) => setTimeout(resolve, ms));\n\nexport default delay;\n","const fork = async (forkFn: () => Promise<any>) => {\n await forkFn();\n};\n\nexport default fork;\n","import { AsyncStatus } from '../constants';\nimport type { ReadableAsyncState } from '../types';\n\nconst getAggregatedAsyncStatus = <T extends Pick<ReadableAsyncState, 'getStatus'>[]>(\n states: T,\n): AsyncStatus => {\n const hasError = states.some((state) => state.getStatus() === AsyncStatus.REJECTED);\n\n if (hasError) {\n return AsyncStatus.REJECTED;\n }\n\n const isPending = states.some((state) => state.getStatus() === AsyncStatus.PENDING);\n\n if (isPending) {\n return AsyncStatus.PENDING;\n }\n\n return AsyncStatus.FULFILLED;\n};\n\nexport default getAggregatedAsyncStatus;\n","const lastScopesIds: Record<string, number> = {};\n\nconst getUniqueId = (scope = 'unknown') => {\n const nextId = (lastScopesIds[scope] ?? 0) + 1;\n lastScopesIds[scope] = nextId;\n return `awai\\$${scope}\\$${nextId}`;\n};\n\nexport default getUniqueId;\n","import { SystemTag } from '../constants';\nimport type { BaseNode } from '../types';\n\nconst isCoreNode = (node: BaseNode): boolean => node.config.tags.includes(SystemTag.CORE_NODE);\n\nexport default isCoreNode;\n","const isFunction = (value: unknown): value is Function => typeof value === 'function';\n\nexport default isFunction;\n","const isObject = (value: unknown): value is Record<string, unknown> =>\n typeof value === 'object' && value !== null;\n\nexport default isObject;\n","import isFunction from './isFunction';\nimport isObject from './isObject';\n\nconst isPromiseLike = <T>(value: unknown): value is PromiseLike<T> =>\n isObject(value) && (value instanceof Promise || isFunction(value.then));\n\nexport default isPromiseLike;\n","import isFunction from './isFunction';\nimport isPromiseLike from './isPromiseLike';\n\nconst isPromiseOrFunction = <T>(\n value: unknown,\n): value is Promise<T> | ((...args: any) => Promise<T>) =>\n isFunction(value) || isPromiseLike<T>(value);\n\nexport default isPromiseOrFunction;\n","import type { ReadableAsyncState } from '../types';\n\nimport isFunction from './isFunction';\nimport isObject from './isObject';\n\nconst isReadableAsyncState = <T>(value: unknown): value is ReadableAsyncState<T> =>\n isObject(value) &&\n isFunction(value.get) &&\n isFunction(value.getAsync) &&\n isFunction(value.getPromise) &&\n isFunction(value.then);\n\nexport default isReadableAsyncState;\n","const noop = () => undefined;\n\nexport default noop;\n","const rejectAfter = (ms: number): Promise<void> => {\n return new Promise((_, reject) => setTimeout(reject, ms));\n};\n\nexport default rejectAfter;\n","/**\n * @description\n * This helper is needed to emit events synchronously, so that scenarios/effects/selectors\n * can resubscribe to an event before another emission.\n *\n * @example\n * const state = state(0);\n *\n * scenario(state.events.change, () => {\n * // Without `SyncQueue` this scenario would only run once\n * });\n *\n * state.set(1);\n * state.set(2);\n */\n\nexport default class SyncQueue {\n private callbacksQueue: Function[] = [];\n private isDequeuing = false;\n\n public enqueue(callback: Function) {\n this.callbacksQueue.push(callback);\n this.dequeue();\n }\n\n private dequeue = async () => {\n if (this.isDequeuing || this.callbacksQueue.length === 0) {\n return;\n }\n\n this.isDequeuing = true;\n const callback = this.callbacksQueue.shift()!;\n callback();\n\n queueMicrotask(() => {\n this.isDequeuing = false;\n this.dequeue();\n });\n };\n}\n","import { SyncQueue } from '../lib';\n\nconst queue = new SyncQueue();\n\nexport default queue;\n","import queue from '../global/queue';\nimport { isFunction } from '../lib';\n\ntype Resolver<T> = (value: T) => any;\ntype FilterPredicate<T> = (value: T) => boolean;\n\nexport default class AwaiEvent<T = void> {\n private _awaiters: Resolver<T>[] = [];\n\n then: PromiseLike<T>['then'] = (onfulfilled) => {\n return new Promise<any>((resolve, reject) => {\n this._awaiters.push((value: T) => {\n try {\n const result = isFunction(onfulfilled) ? onfulfilled(value) : value;\n resolve(result);\n } catch (error) {\n reject(error);\n }\n });\n });\n };\n\n abortable(abortController: AbortController): Promise<T> {\n return new Promise<T>((resolve, reject) => {\n this._awaiters.push(resolve);\n\n const abortionHandler = () => {\n this._awaiters = this._awaiters.filter((awaiter) => awaiter !== resolve);\n reject('Aborted');\n\n abortController.signal.removeEventListener('abort', abortionHandler);\n };\n\n abortController.signal.addEventListener('abort', abortionHandler);\n });\n }\n\n emit(value: T) {\n queue.enqueue(async () => {\n const awaiters = this._awaiters;\n this._awaiters = [];\n\n for (const resolve of awaiters) {\n resolve(value);\n }\n });\n }\n\n async filter(predicate: FilterPredicate<T>) {\n return new Promise(async (resolve) => {\n while (true) {\n const newValue = await this;\n const isApplicable = Boolean(predicate(newValue));\n\n if (isApplicable) {\n resolve(newValue);\n return;\n }\n }\n });\n }\n}\n","const flush = () => new Promise<void>((resolve) => setTimeout(resolve, 0));\n\nexport default flush;\n","import { isCoreNode } from '../lib';\nimport type BaseNode from '../types/BaseNode';\n\nimport AwaiEvent from './AwaiEvent';\n\nexport default class Registry<T extends BaseNode> {\n private _nodes: T[] = [];\n public readonly events = {\n deregistered: new AwaiEvent<T['config']['id']>(),\n registered: new AwaiEvent<T>(),\n };\n\n public async register(node: T) {\n if (isCoreNode(node)) {\n return;\n }\n\n this._nodes.push(node);\n this.events.registered.emit(node);\n }\n\n public async deregister(id: BaseNode['config']['id']) {\n const node = this._nodes.find((node) => node.config.id === id);\n\n if (!node) {\n return;\n }\n\n this._nodes = this._nodes.filter((node) => node.config.id !== id);\n this.events.deregistered.emit(id);\n }\n\n get nodes() {\n return [...this._nodes];\n }\n}\n","import { Registry } from '../core';\n\nconst registry = new Registry();\n\nexport default registry;\n","import { SystemTag } from '../constants';\nimport { AwaiEvent, flush } from '../core';\nimport { registry } from '../global';\nimport { getUniqueId, isFunction } from '../lib';\n\nimport type { CallbackAction, Config, EmptyAction } from './types';\n\nconst getConfig = (customConfig: Partial<Config> = {}): Config => ({\n ...customConfig,\n id: customConfig.id ?? getUniqueId(action.name),\n tags: [SystemTag.ACTION, ...(customConfig.tags ?? [])],\n});\n\nfunction action<Args extends any[] = []>(): EmptyAction<Args>;\nfunction action<Args extends any[] = []>(config?: Partial<Config>): EmptyAction<Args>;\nfunction action<Args extends any[], Return = void>(\n callback: (...args: Args) => Return,\n config?: Partial<Config>,\n): CallbackAction<Args, Return>;\n\nfunction action<Args extends any[], Return = void>(\n ...args: [Partial<Config>?] | [(...args: Args) => Return, Partial<Config>?]\n): EmptyAction<Args> | CallbackAction<Args, Return> {\n type Action = EmptyAction<Args> | CallbackAction<Args, Return>;\n\n const hasCallback = isFunction(args[0]);\n const [callback, customConfig] = hasCallback\n ? (args as [(...args: Args) => Return, Partial<Config>?])\n : ([, ...args] as [undefined, Partial<Config>?]);\n\n const config = getConfig(customConfig);\n\n const events = {\n invoked: new AwaiEvent(),\n rejected: hasCallback ? new AwaiEvent() : undefined,\n fulfilled: hasCallback ? new AwaiEvent() : undefined,\n } satisfies Action['events'];\n\n const invoke = async (...invokeArgs: Args) => {\n events.invoked.emit({ arguments: invokeArgs, config });\n\n try {\n const valueOrPromise: Return | Promise<Return> = isFunction(callback)\n ? callback(...invokeArgs)\n : (undefined as Return);\n\n const value = await valueOrPromise;\n await flush();\n events.fulfilled?.emit({ arguments: invokeArgs, config, result: value });\n return value;\n } catch (error) {\n events.rejected?.emit({\n arguments: invokeArgs,\n config,\n error,\n });\n throw error;\n }\n };\n\n const actionNode = Object.assign(invoke, { config, events }) as Action;\n\n registry.register(actionNode);\n\n return actionNode;\n}\n\nexport default action;\n","import { AsyncStatus, SystemTag } from '../constants';\nimport { AwaiEvent, flush } from '../core';\nimport { registry } from '../global';\nimport { getUniqueId, isFunction, isPromiseOrFunction, noop } from '../lib';\n\nimport type { VersionIgnoredEvent, AsyncState, Config, InitialValue, Version } from './types';\n\nconst getConfig = (customConfig: Partial<Config> = {}): Config => ({\n ...customConfig,\n id: customConfig.id ?? getUniqueId(asyncState.name),\n tags: [SystemTag.ASYNC_STATE, ...(customConfig.tags ?? [])],\n});\n\nconst asyncState = <T>(\n initialValue?: InitialValue<T>,\n customConfig?: Partial<Config>,\n): AsyncState<T> => {\n const config = getConfig(customConfig);\n const isInitialValueAsync = isPromiseOrFunction(initialValue);\n let version: Version = isInitialValueAsync ? 0 : 1;\n let lastPendingVersion: Version = version;\n let status: AsyncStatus = AsyncStatus.FULFILLED;\n let error: unknown = null;\n let value: T | undefined = isInitialValueAsync ? undefined : initialValue;\n\n const events: AsyncState<T>['events'] = {\n changed: new AwaiEvent<T | undefined>(),\n fulfilled: new AwaiEvent<T>(),\n ignored: new AwaiEvent<VersionIgnoredEvent<T>>(),\n rejected: new AwaiEvent<unknown>(),\n requested: new AwaiEvent<void>(),\n };\n\n const getStatus: AsyncState<T>['getStatus'] = () => status;\n\n const set: AsyncState<T>['set'] = async (nextValueOrResolver) => {\n const currentPendingVersion: Version = (lastPendingVersion + 1) % Number.MAX_SAFE_INTEGER;\n lastPendingVersion = currentPendingVersion;\n\n try {\n if (isPromiseOrFunction(nextValueOrResolver)) {\n status = AsyncStatus.PENDING;\n events.requested.emit();\n }\n\n let newValue = isFunction(nextValueOrResolver)\n ? await nextValueOrResolver(value)\n : await nextValueOrResolver;\n const isChanged = !Object.is(newValue, value);\n\n if (currentPendingVersion !== lastPendingVersion || !isChanged) {\n events.ignored.emit({ value: newValue, version: currentPendingVersion });\n return;\n }\n\n error = null;\n value = newValue;\n status = AsyncStatus.FULFILLED;\n\n events.fulfilled.emit(newValue);\n\n if (isChanged) {\n events.changed.emit(value);\n }\n } catch (e) {\n if (currentPendingVersion !== lastPendingVersion) {\n events.ignored.emit({ error: e, version: currentPendingVersion });\n return;\n }\n\n const isChanged = !Object.is(e, error);\n\n error = e;\n value = undefined;\n status = AsyncStatus.REJECTED;\n\n events.rejected.emit(error);\n\n if (isChanged) {\n events.changed.emit(value);\n }\n }\n\n version = lastPendingVersion;\n await flush();\n };\n\n const get: AsyncState<T>['get'] = () => value;\n\n const getAsync: AsyncState<T>['getAsync'] = () => ({\n error,\n isLoading: status === AsyncStatus.PENDING,\n value,\n });\n\n const getPromise: AsyncState<T>['getPromise'] = async () => {\n if (version === lastPendingVersion) {\n return value!;\n }\n\n const abortController = new AbortController();\n\n try {\n return await new Promise((resolve, reject) => {\n events.fulfilled.abortable(abortController).then(resolve).catch(noop);\n events.rejected.abortable(abortController).then(reject).catch(noop);\n });\n } finally {\n abortController.abort();\n }\n };\n\n const then: PromiseLike<T>['then'] = async (resolve) => {\n if (!isFunction(resolve)) {\n return getPromise() as any;\n }\n\n return resolve(await getPromise());\n };\n\n if (isInitialValueAsync) {\n set(initialValue);\n }\n\n const asyncStateNode: AsyncState<T> = {\n config,\n events,\n get,\n getAsync,\n getPromise,\n getStatus,\n set,\n then,\n };\n\n registry.register(asyncStateNode);\n\n return asyncStateNode;\n};\n\nexport default asyncState;\n","import type { Config } from '../types';\n\nconst getDefaultStrategy = (\n isPlainPromiseTrigger: boolean,\n hasTrigger: boolean,\n): Config['strategy'] => {\n if (isPlainPromiseTrigger) {\n return 'once';\n }\n\n if (hasTrigger) {\n return 'fork';\n }\n\n return 'cyclic';\n};\n\nexport default getDefaultStrategy;\n","import { isFunction } from '../../lib';\nimport type { Trigger } from '../types';\n\nconst getTriggerPromise = <T>(trigger: Trigger<T> | undefined) => {\n if (!trigger) {\n return Promise.resolve(undefined as T);\n }\n\n return isFunction(trigger) ? trigger() : trigger;\n};\n\nexport default getTriggerPromise;\n","import { SystemTag } from '../constants';\nimport { AwaiEvent, flush } from '../core';\nimport { registry } from '../global';\nimport { getUniqueId, isFunction, isObject, isPromiseLike } from '../lib';\n\nimport { getDefaultStrategy, getTriggerPromise } from './lib';\nimport type { Callback, Config, ExpirationTrigger, SettledEvent, Scenario, Trigger } from './types';\n\nconst getConfig = (\n isPlainPromiseTrigger: boolean,\n hasTrigger: boolean,\n customConfig: Partial<Config> = {},\n): Config => ({\n ...customConfig,\n id: customConfig.id ?? getUniqueId(scenario.name),\n strategy: customConfig.strategy ?? getDefaultStrategy(isPlainPromiseTrigger, hasTrigger),\n tags: [SystemTag.SCENARIO, ...(customConfig.tags ?? [])],\n});\n\nfunction scenario<T, R, E>(\n trigger: Trigger<T>,\n callback: Callback<T, R>,\n customConfig?: Partial<Config>,\n): Scenario<T, R, E>;\n\nfunction scenario<T, R, E>(\n trigger: Trigger<T>,\n expirationTrigger: ExpirationTrigger<E>,\n callback: Callback<T, R>,\n customConfig?: Partial<Config>,\n): Scenario<T, R, E>;\n\nfunction scenario<T, R, E = unknown>(\n callback: Callback,\n config?: Partial<Config>,\n): Scenario<T, R, E>;\n\nfunction scenario<T, R, E>(\n ...args:\n | [Trigger<T>, Callback<T, R>, Partial<Config>?]\n | [Trigger<T>, ExpirationTrigger<E>, Callback<T, R>, Partial<Config>?]\n | [Callback, Partial<Config>?]\n) {\n const hasTrigger = isFunction(args[1]) || isFunction(args[2]);\n const hasExpirationTrigger = isFunction(args[2]);\n\n const trigger = hasTrigger ? (args[0] as Trigger<T>) : undefined;\n const expirationTrigger = hasExpirationTrigger ? (args[1] as ExpirationTrigger<E>) : undefined;\n const callback = args.findLast(isFunction) as Callback<T, R>;\n const customConfig = args.at(args.indexOf(callback) + 1) as Partial<Config> | undefined;\n const isPlainPromiseTrigger = hasTrigger && isObject(args[0]) && args[0].constructor === Promise;\n const isFiniteScenario =\n isPlainPromiseTrigger || hasExpirationTrigger || typeof customConfig?.repeat !== 'undefined';\n\n const config = getConfig(isPlainPromiseTrigger, hasTrigger, customConfig);\n const { strategy } = config;\n let { repeat = Infinity } = config;\n let runningCallbacksCount = 0;\n let shouldExpire = false;\n let expired = false;\n\n const events: Scenario<T, R, E>['events'] = {\n fulfilled: new AwaiEvent(),\n rejected: new AwaiEvent(),\n settled: new AwaiEvent(),\n started: new AwaiEvent(),\n };\n\n const checkShouldExpire = () =>\n repeat <= 0 ||\n strategy === 'once' ||\n shouldExpire ||\n (isFunction(expirationTrigger) && expirationTrigger());\n\n const expire = async (event?: E) => {\n expired = true;\n await flush();\n await events.settled.emit({ event, config });\n await flush();\n await registry.deregister(config.id);\n };\n\n if (isPromiseLike(expirationTrigger)) {\n Promise.resolve(expirationTrigger).then((event) => {\n shouldExpire = true;\n\n if (runningCallbacksCount === 0) {\n expire(event);\n }\n });\n }\n\n const run = async () => {\n getTriggerPromise(trigger).then(\n (event) => {\n repeat--;\n\n if (expired) {\n return;\n }\n\n runningCallbacksCount++;\n events.started.emit({ config, event });\n\n try {\n Promise.resolve(callback(event))\n .then((result) => {\n flush().then(() => {\n events.fulfilled.emit({ config, event, result });\n });\n })\n .catch((error) => {\n events.rejected.emit(error);\n })\n .finally(() => {\n runningCallbacksCount--;\n\n if (checkShouldExpire() && runningCallbacksCount === 0) {\n expire();\n return;\n }\n\n if (strategy === 'cyclic') {\n queueMicrotask(run);\n }\n });\n } catch (error) {\n runningCallbacksCount--;\n events.rejected.emit(error);\n }\n\n if (strategy === 'fork') {\n queueMicrotask(run);\n }\n },\n () => {\n queueMicrotask(run);\n },\n );\n };\n\n const then: AwaiEvent<SettledEvent<E>>['then'] = (resolve) => {\n if (!isFiniteScenario) {\n console.warn(\n 'You seem to await an infinite scenario. This causes a memory leak in your application.',\n );\n }\n\n if (!isFunction(resolve)) {\n return Promise.resolve(events.settled) as any;\n }\n\n return events.settled.then(resolve);\n };\n\n const scenarioNode: Scenario<T, R, E> = { config, events, then };\n\n registry.register(scenarioNode);\n\n run();\n\n return scenarioNode;\n}\n\nexport default scenario;\n","import { AsyncStatus, SystemTag } from '../constants';\nimport { AwaiEvent } from '../core';\nimport { registry } from '../global';\nimport { getAggregatedAsyncStatus, getUniqueId, isFunction, isReadableAsyncState } from '../lib';\nimport scenario from '../scenario';\nimport { type InferReadableType, type ReadableAsyncState, type ReadableState } from '../types';\n\nimport type { CleanupCallback, Config, Effect } from './types';\n\nconst getConfig = (customConfig: Partial<Config> = {}): Config => ({\n ...customConfig,\n id: customConfig.id ?? getUniqueId(effect.name),\n tags: [SystemTag.EFFECT, ...(customConfig.tags ?? [])],\n});\n\nconst effect = <\n T extends (ReadableState<any> | ReadableAsyncState<any>)[],\n V extends { [K in keyof T]: InferReadableType<T[K]> },\n>(\n states: [...T],\n effect: (...values: V) => CleanupCallback | void,\n customConfig?: Partial<Config>,\n): Effect<T, V> => {\n const config = getConfig(customConfig);\n const asyncStates = states.filter(isReadableAsyncState);\n\n let cleanup: ReturnType<typeof effect>;\n\n const events: Effect<T, V>['events'] = {\n cleared: new AwaiEvent(),\n started: new AwaiEvent(),\n };\n\n const runEffect = () => {\n const values = states.map((state) => state.get()) as V;\n const status = getAggregatedAsyncStatus(asyncStates);\n\n if (status !== AsyncStatus.FULFILLED) {\n return;\n }\n\n events.started.emit({ states, values });\n\n cleanup = effect(...values);\n };\n\n queueMicrotask(() => {\n scenario(\n () => Promise.race(states.map((state) => state.events.changed)),\n () => {\n if (isFunction(cleanup)) {\n cleanup();\n events.cleared.emit({ states });\n }\n\n runEffect();\n },\n { tags: [SystemTag.CORE_NODE] },\n );\n\n queueMicrotask(runEffect);\n });\n\n const effectNode: Effect<T, V> = { config, events };\n\n registry.register(effectNode);\n\n return effectNode;\n};\n\nexport default effect;\n","import { SystemTag } from '../constants';\nimport { AwaiEvent, flush } from '../core';\nimport { getUniqueId, isFunction } from '../lib';\nimport { registry } from '../global';\n\nimport type { Config, State } from './types';\n\nconst getConfig = (customConfig: Partial<Config> = {}): Config => ({\n ...customConfig,\n id: customConfig.id ?? getUniqueId(state.name),\n tags: [SystemTag.STATE, ...(customConfig.tags ?? [])],\n});\n\nconst state = <T>(initialValue: T, customConfig?: Partial<Config>): State<T> => {\n const config = getConfig(customConfig);\n\n let value = initialValue;\n\n const events = {\n changed: new AwaiEvent<T>(),\n };\n\n const set: State<T>['set'] = (nextValueOrResolver) => {\n let newValue = isFunction(nextValueOrResolver)\n ? nextValueOrResolver(value)\n : nextValueOrResolver;\n\n if (!Object.is(newValue, value)) {\n value = newValue;\n events.changed.emit(newValue);\n }\n\n return flush().then(() => newValue);\n };\n\n const get = () => value;\n\n const then: State<T>['then'] = async (resolve) => {\n if (!isFunction(resolve)) {\n return value as any;\n }\n\n return resolve(value);\n };\n\n const stateNode: State<T> = { config, events, get, set, then };\n\n registry.register(stateNode);\n\n return stateNode;\n};\n\nexport default state;\n","import asyncState, { type AsyncState } from '../async-state';\nimport { SystemTag } from '../constants';\nimport { AwaiEvent, flush } from '../core';\nimport { registry } from '../global';\nimport { getUniqueId, isFunction } from '../lib';\nimport scenario from '../scenario';\nimport state, { type State } from '../state';\nimport type { Id } from '../types';\n\nimport type { Config, FamilyState } from './types';\n\nconst getConfig = (customConfig: Partial<Config> = {}): Config => ({\n ...customConfig,\n id: customConfig.id ?? getUniqueId(familyState.name),\n tags: [SystemTag.FAMILY_STATE, ...(customConfig.tags ?? [])],\n});\n\nconst familyState = <\n T,\n Initializer extends (id: Id) => T | Promise<T>,\n Family extends Record<Id, NodeType>,\n NodeType extends State<any> | AsyncState<any> = ReturnType<Initializer> extends PromiseLike<\n infer Q\n >\n ? AsyncState<Q>\n : State<ReturnType<Initializer>>,\n>(\n initializer: Initializer,\n customConfig?: Partial<Config>,\n): FamilyState<NodeType> => {\n const config = getConfig(customConfig);\n\n let family: Family = {} as Family;\n\n const events = {\n changed: new AwaiEvent<Record<Id, NodeType>>(),\n stateCreated: new AwaiEvent<Id>(),\n };\n\n const getNode = (id: Id): NodeType => {\n if (id in family) {\n return family[id];\n }\n\n const initialValue = initializer(id);\n\n const stateNode =\n initialValue instanceof Promise\n ? asyncState(initialValue, { tags: [SystemTag.CORE_NODE] })\n : state(initialValue, { tags: [SystemTag.CORE_NODE] });\n\n family = { ...family, [id]: stateNode };\n events.stateCreated.emit(id);\n events.changed.emit(family);\n\n scenario(\n stateNode.events.changed,\n () => {\n events.changed.emit(family);\n },\n { tags: [SystemTag.CORE_NODE] },\n );\n\n return stateNode as NodeType;\n };\n\n const setNode = async (id: Id, stateNode: NodeType) => {\n if (id in family) {\n throw new Error(`Cannot set node. Node with id \"${id}\" already exists.`);\n }\n\n family = { ...family, [id]: stateNode };\n\n scenario(\n stateNode.events.changed,\n () => {\n events.changed.emit(family);\n },\n { tags: [SystemTag.CORE_NODE] },\n );\n\n events.changed.emit(family);\n\n await flush();\n };\n\n const get = () => {\n return family;\n };\n\n const then: FamilyState<NodeType>['then'] = async (resolve) => {\n if (!isFunction(resolve)) {\n return family as any;\n }\n\n return resolve(family);\n };\n\n const familyStateNode: FamilyState<NodeType> = { config, events, get, getNode, setNode, then };\n\n registry.register(familyStateNode);\n\n return familyStateNode;\n};\n\nexport default familyState;\n","import { AsyncStatus, SystemTag } from '../constants';\nimport { AwaiEvent } from '../core';\nimport { registry } from '../global';\nimport {\n fork,\n getAggregatedAsyncStatus,\n getUniqueId,\n isFunction,\n isReadableAsyncState,\n} from '../lib';\nimport scenario from '../scenario';\nimport type { InferReadableType, ReadableAsyncState, ReadableState } from '../types';\n\nimport type { AsyncConfig, AsyncSelector, VersionIgnoredEvent } from './types';\n\nconst getConfig = (customConfig: Partial<AsyncConfig> = {}): AsyncConfig => ({\n ...customConfig,\n id: customConfig.id ?? getUniqueId(asyncSelector.name),\n tags: [SystemTag.ASYNC_SELECTOR, ...(customConfig.tags ?? [])],\n});\n\nconst asyncSelector = <T extends (ReadableState | ReadableAsyncState)[], U>(\n states: T,\n predicate: (...values: { [K in keyof T]: InferReadableType<T[K]> }) => U,\n customConfig?: Partial<AsyncConfig>,\n): AsyncSelector<U> => {\n type StatesValues = { [K in keyof T]: InferReadableType<T[K]> };\n\n const config = getConfig(customConfig);\n const asyncStates = states.filter(isReadableAsyncState);\n\n let error: AggregateError | unknown | null = null;\n let value: U | undefined;\n let isLoading: boolean = true;\n let version = 0;\n let lastPendingVersion: number = version;\n\n const events: AsyncSelector<U>['events'] = {\n changed: new AwaiEvent<U | undefined>(),\n fulfilled: new AwaiEvent<U>(),\n ignored: new AwaiEvent<VersionIgnoredEvent<U>>(),\n rejected: new AwaiEvent<unknown>(),\n requested: new AwaiEvent<void>(),\n };\n\n const getStatus = () => {\n const aggregatedStatus = getAggregatedAsyncStatus(asyncStates);\n\n return error !== null && aggregatedStatus === AsyncStatus.FULFILLED\n ? AsyncStatus.REJECTED\n : aggregatedStatus;\n };\n\n const determineNextVersion = async () => {\n const currentPendingVersion = (lastPendingVersion + 1) % Number.MAX_SAFE_INTEGER;\n lastPendingVersion = currentPendingVersion;\n\n const status = getAggregatedAsyncStatus(asyncStates);\n const errors = asyncStates.map((state) => state.getAsync().error).filter(Boolean);\n\n if (status === AsyncStatus.PENDING) {\n isLoading = true;\n }\n\n events.requested.emit();\n\n if (errors.length > 0) {\n error = new AggregateError(errors);\n value = undefined;\n isLoading = status === AsyncStatus.PENDING;\n version = lastPendingVersion;\n events.rejected.emit(error);\n events.changed.emit(value);\n return;\n }\n\n if (status === AsyncStatus.FULFILLED) {\n const values = states.map((state) => state.get()) as StatesValues;\n\n fork(async () => {\n isLoading = true;\n\n try {\n const newValue = await predicate(...values);\n const isChanged = !Object.is(newValue, value);\n\n if (currentPendingVersion !== lastPendingVersion) {\n events.ignored.emit({ value: newValue, version: currentPendingVersion });\n return;\n }\n\n error = null;\n value = newValue;\n\n events.fulfilled.emit(newValue);\n\n if (isChanged) {\n events.changed.emit(value);\n }\n } catch (caughtError) {\n if (currentPendingVersion !== lastPendingVersion) {\n events.ignored.emit({ error: caughtError, version: currentPendingVersion });\n return;\n }\n\n const isChanged = typeof value !== 'undefined';\n\n error = caughtError;\n value = undefined;\n\n events.rejected.emit(caughtError);\n\n if (isChanged) {\n events.changed.emit(value);\n }\n } finally {\n if (currentPendingVersion === lastPendingVersion) {\n version = lastPendingVersion;\n isLoading = false;\n }\n }\n });\n }\n };\n\n scenario(\n async () => {\n const abortController = new AbortController();\n await Promise.race(\n states.flatMap((state) => {\n return isReadableAsyncState(state)\n ? [\n state.events.requested.abortable(abortController),\n state.events.rejected.abortable(abortController),\n state.events.fulfilled.abortable(abortController),\n ]\n : state.events.changed.abortable(abortController);\n }),\n );\n abortController.abort();\n },\n determineNextVersion,\n { tags: [SystemTag.CORE_NODE] },\n );\n\n const get = () => value;\n\n const getAsync = () => ({ error, isLoading, value });\n\n const getPromise = async (): Promise<U> => {\n const values = (await Promise.all(\n states.map((state) => (isReadableAsyncState(state) ? state.getPromise() : state.get())),\n )) as StatesValues;\n\n return predicate(...values);\n };\n\n const then: AsyncSelector<U>['then'] = async (resolve) => {\n if (!isFunction(resolve)) {\n return getPromise() as any;\n }\n\n return resolve(await getPromise());\n };\n\n const selectorNode = {\n config,\n events,\n get,\n getAsync,\n getPromise,\n getStatus,\n then,\n };\n\n queueMicrotask(determineNextVersion);\n\n registry.register(selectorNode);\n\n return selectorNode;\n};\n\nexport default asyncSelector;\n","import { SystemTag } from '../constants';\nimport { AwaiEvent } from '../core';\nimport { registry } from '../global';\nimport { getUniqueId, isFunction } from '../lib';\nimport scenario from '../scenario';\nimport type { InferReadableType, ReadableAsyncState, ReadableState } from '../types';\n\nimport type { SyncConfig, SyncSelector } from './types';\n\nconst getConfig = (customConfig: Partial<SyncConfig> = {}): SyncConfig => ({\n ...customConfig,\n id: customConfig.id ?? getUniqueId(syncSelector.name),\n tags: [SystemTag.SELECTOR, ...(customConfig.tags ?? [])],\n});\n\nconst syncSelector = <T extends (ReadableState | ReadableAsyncState)[], U>(\n states: [...T],\n predicate: (...values: { [K in keyof T]: InferReadableType<T[K]> }) => U,\n customConfig?: Partial<SyncConfig>,\n): SyncSelector<U> => {\n const config = getConfig(customConfig);\n let value: U;\n\n const events = {\n changed: new AwaiEvent<U>(),\n };\n\n const get = () => {\n const values = states.map((state) => state.get()) as {\n [K in keyof T]: InferReadableType<T[K]>;\n };\n return predicate(...values);\n };\n\n const then: SyncSelector<U>['then'] = async (resolve) => {\n if (!isFunction(resolve)) {\n return get() as any;\n }\n\n return resolve(get());\n };\n\n scenario(\n async () => {\n const abortController = new AbortController();\n await Promise.race(states.map((state) => state.events.changed.abortable(abortController)));\n abortController.abort();\n },\n () => {\n const newValue = get();\n\n if (!Object.is(newValue, value)) {\n value = newValue;\n events.changed.emit(newValue);\n }\n },\n { tags: [SystemTag.CORE_NODE] },\n );\n\n value = get();\n\n const selectorNode: SyncSelector<U> = { config, events, get, then };\n\n registry.register(selectorNode);\n\n return selectorNode;\n};\n\nexport default syncSelector;\n","import { isReadableAsyncState } from '../lib';\nimport { type InferReadableType } from '../types';\n\nimport asyncSelector from './asyncSelector';\nimport syncSelector from './syncSelector';\nimport type { Config, Selector } from './types';\n\nconst selector = <T extends any[], U>(\n states: [...T],\n predicate: (...values: { [K in keyof T]: InferReadableType<T[K]> }) => U,\n customConfig?: Partial<Config<T, U>>,\n): Selector<T, U> => {\n const isAsyncPredicate = predicate.constructor.name === 'AsyncFunction';\n\n const state =\n isAsyncPredicate || states.some((state) => isReadableAsyncState(state))\n ? asyncSelector(states, predicate, customConfig)\n : syncSelector(states, predicate, customConfig);\n\n return state as Selector<T, U>;\n};\n\nexport default selector;\n"],"names":["AsyncStatus","SystemTag","__publicField","node","getConfig","effect","state"],"mappings":"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"}
1
+ {"version":3,"file":"index.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":";;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;;ACHA,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,OACX,QAAA,EACA,WAAA,KACgC;AAChC,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;;AC5BrF,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,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;;ACFA,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,cAAA,GAAiB,UAAA,CAAW,KAAK,CAAA,GAAI,KAAA,GAAQ,MAAA;AAEnD,EAAA,MAAM,oBAAoB,MACxB,QAAA,KAAa,UAAU,YAAA,KAAiB,cAAA,GAAiB,gBAAe,GAAI,KAAA,CAAA;AAE9E,EAAA,MAAM,SAAS,YAAY;AACzB,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,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;;AC3IA,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
@@ -2,7 +2,7 @@ type FilterPredicate<T> = (value: T) => boolean;
2
2
  declare class AwaiEvent<T = void> {
3
3
  private _awaiters;
4
4
  then: PromiseLike<T>['then'];
5
- abortable(abortController: AbortController): Promise<T>;
5
+ abortable(abortSignal: AbortSignal): Promise<T>;
6
6
  emit(value: T): void;
7
7
  filter(predicate: FilterPredicate<T>): Promise<unknown>;
8
8
  }
@@ -107,16 +107,19 @@ type Config$6 = BaseConfig & Record<string, any>;
107
107
  type ActionInvokedEvent<Args> = {
108
108
  arguments: Args;
109
109
  config: Config$6;
110
+ invocationId: string;
110
111
  };
111
112
  type ActionFulfilledEvent<Args, Return> = {
112
113
  arguments: Args;
113
114
  config: Config$6;
114
115
  result: Awaited<Return>;
116
+ invocationId: string;
115
117
  };
116
118
  type ActionRejectedEvent<Args> = {
117
119
  arguments: Args;
118
120
  config: Config$6;
119
121
  error: unknown;
122
+ invocationId: string;
120
123
  };
121
124
  type BaseEvents<Args> = {
122
125
  invoked: AwaiEvent<ActionInvokedEvent<Args>>;
@@ -209,6 +212,8 @@ declare const isPromiseLike: <T>(value: unknown) => value is PromiseLike<T>;
209
212
 
210
213
  declare const isReadableAsyncState: <T>(value: unknown) => value is ReadableAsyncState<T>;
211
214
 
215
+ declare const race: <T extends readonly unknown[] | []>(promises: T, abortSignal?: AbortSignal) => Promise<Awaited<T[number]>>;
216
+
212
217
  declare const rejectAfter: (ms: number) => Promise<void>;
213
218
 
214
219
  /**
@@ -239,39 +244,38 @@ declare const registry: Registry<BaseNode>;
239
244
 
240
245
  type Trigger<T> = AwaiEvent<T> | PromiseLike<T> | (() => PromiseLike<T>);
241
246
  type ShouldExpirePredicate = () => boolean;
242
- type ExpirationTrigger<T> = AwaiEvent<T> | PromiseLike<T> | ShouldExpirePredicate;
247
+ type UntilTrigger<T> = AwaiEvent<T> | PromiseLike<T> | ShouldExpirePredicate | AbortSignal;
243
248
  type Callback<T = never, R = any> = (value: T) => R;
244
- interface Config$1 extends BaseConfig, Record<string, any> {
245
- repeat?: number;
249
+ interface Config$1<T = unknown> extends BaseConfig, Record<string, any> {
246
250
  strategy: 'fork' | 'cyclic' | 'once';
251
+ until?: UntilTrigger<T>;
247
252
  }
248
- interface FulfilledEvent<T, R> {
253
+ interface FulfilledEvent<T, R, E = unknown> {
249
254
  event: T;
250
255
  result: R;
251
- config: Config$1;
256
+ config: Config$1<E>;
252
257
  }
253
258
  interface SettledEvent<T> {
254
259
  event?: T;
255
- config: Config$1;
260
+ config: Config$1<T>;
256
261
  }
257
- interface StartedEvent<T> {
262
+ interface StartedEvent<T, E = unknown> {
258
263
  event: T;
259
- config: Config$1;
264
+ config: Config$1<E>;
260
265
  }
261
- interface Scenario<T, R, E> {
266
+ interface Scenario<T, R, E = unknown> {
262
267
  events: {
263
- fulfilled: AwaiEvent<FulfilledEvent<T, R>>;
268
+ fulfilled: AwaiEvent<FulfilledEvent<T, R, E>>;
264
269
  rejected: AwaiEvent<unknown>;
265
270
  settled: AwaiEvent<SettledEvent<E>>;
266
- started: AwaiEvent<StartedEvent<T>>;
271
+ started: AwaiEvent<StartedEvent<T, E>>;
267
272
  };
268
- get config(): Config$1;
273
+ get config(): Config$1<E>;
269
274
  then: AwaiEvent<SettledEvent<E>>['then'];
270
275
  }
271
276
 
272
- declare function scenario<T, R, E>(trigger: Trigger<T>, callback: Callback<T, R>, customConfig?: Partial<Config$1>): Scenario<T, R, E>;
273
- declare function scenario<T, R, E>(trigger: Trigger<T>, expirationTrigger: ExpirationTrigger<E>, callback: Callback<T, R>, customConfig?: Partial<Config$1>): Scenario<T, R, E>;
274
- declare function scenario<T, R, E = unknown>(callback: Callback, config?: Partial<Config$1>): Scenario<T, R, E>;
277
+ declare function scenario<T, R, E = unknown>(trigger: Trigger<T>, callback: Callback<T, R>, customConfig?: Partial<Config$1<E>>): Scenario<T, R, E>;
278
+ declare function scenario<T, R, E = unknown>(callback: Callback<T, R>, config?: Partial<Config$1<E>>): Scenario<T, R, E>;
275
279
 
276
280
  type Version = number;
277
281
  type SyncConfig = BaseConfig & Record<string, any>;
@@ -296,5 +300,5 @@ type Config<T extends any[], U> = U extends PromiseLike<any> ? AsyncConfig : Con
296
300
 
297
301
  declare const selector: <T extends any[], U>(states: [...T], predicate: (...values: { [K in keyof T]: InferReadableType<T[K]>; }) => U, customConfig?: Partial<Config<T, U>>) => Selector<T, U>;
298
302
 
299
- export { AsyncStatus, AwaiEvent, Registry, SyncQueue, SystemTag, action, asyncState, delay, effect, familyState, flush, fork, getAggregatedAsyncStatus, isPromiseLike, isReadableAsyncState, queue, registry, rejectAfter, scenario, selector, state };
303
+ export { AsyncStatus, AwaiEvent, Registry, SyncQueue, SystemTag, action, asyncState, delay, effect, familyState, flush, fork, getAggregatedAsyncStatus, isPromiseLike, isReadableAsyncState, queue, race, registry, rejectAfter, scenario, selector, state };
300
304
  export type { AsyncSetter, AsyncState, AsyncValue, FamilyState, InferReadableType, ReadableAsyncState, ReadableState, Config$1 as ScenarioConfig, Setter, State, WritableAsyncState, WritableState };
package/dist/index.mjs CHANGED
@@ -55,7 +55,19 @@ const isPromiseOrFunction = (value) => isFunction(value) || isPromiseLike(value)
55
55
 
56
56
  const isReadableAsyncState = (value) => isObject(value) && isFunction(value.get) && isFunction(value.getAsync) && isFunction(value.getPromise) && isFunction(value.then);
57
57
 
58
- const noop = () => void 0;
58
+ const race = async (promises, abortSignal) => {
59
+ const internalAbortController = new AbortController();
60
+ const abort = () => {
61
+ internalAbortController.abort();
62
+ abortSignal?.removeEventListener("abort", abort);
63
+ };
64
+ abortSignal?.addEventListener("abort", abort);
65
+ const abortablePromises = promises.map((promise) => {
66
+ return isAbortable(promise) ? promise.abortable(internalAbortController.signal) : promise;
67
+ });
68
+ return await Promise.race(abortablePromises).finally(abort);
69
+ };
70
+ const isAbortable = (promise) => isPromiseLike(promise) && "abortable" in promise && isFunction(promise.abortable);
59
71
 
60
72
  const rejectAfter = (ms) => {
61
73
  return new Promise((_, reject) => setTimeout(reject, ms));
@@ -108,15 +120,21 @@ class AwaiEvent {
108
120
  });
109
121
  });
110
122
  }
111
- abortable(abortController) {
123
+ abortable(abortSignal) {
124
+ if (abortSignal.aborted) {
125
+ return Promise.reject(abortSignal.reason);
126
+ }
112
127
  return new Promise((resolve, reject) => {
113
- this._awaiters.push(resolve);
128
+ const resolveWithCleanup = (value) => {
129
+ abortSignal.removeEventListener("abort", abortionHandler);
130
+ resolve(value);
131
+ };
132
+ this._awaiters.push(resolveWithCleanup);
114
133
  const abortionHandler = () => {
115
- this._awaiters = this._awaiters.filter((awaiter) => awaiter !== resolve);
116
- reject("Aborted");
117
- abortController.signal.removeEventListener("abort", abortionHandler);
134
+ this._awaiters = this._awaiters.filter((awaiter) => awaiter !== resolveWithCleanup);
135
+ reject(abortSignal.reason);
118
136
  };
119
- abortController.signal.addEventListener("abort", abortionHandler);
137
+ abortSignal.addEventListener("abort", abortionHandler, { once: true });
120
138
  });
121
139
  }
122
140
  emit(value) {
@@ -192,18 +210,20 @@ function action(...args) {
192
210
  fulfilled: hasCallback ? new AwaiEvent() : void 0
193
211
  };
194
212
  const invoke = async (...invokeArgs) => {
195
- events.invoked.emit({ arguments: invokeArgs, config });
213
+ const invocationId = getUniqueId("invocation");
214
+ events.invoked.emit({ arguments: invokeArgs, config, invocationId });
196
215
  try {
197
216
  const valueOrPromise = isFunction(callback) ? callback(...invokeArgs) : void 0;
198
217
  const value = await valueOrPromise;
199
218
  await flush();
200
- events.fulfilled?.emit({ arguments: invokeArgs, config, result: value });
219
+ events.fulfilled?.emit({ arguments: invokeArgs, config, result: value, invocationId });
201
220
  return value;
202
221
  } catch (error) {
203
222
  events.rejected?.emit({
204
223
  arguments: invokeArgs,
205
224
  config,
206
- error
225
+ error,
226
+ invocationId
207
227
  });
208
228
  throw error;
209
229
  }
@@ -282,15 +302,11 @@ const asyncState = (initialValue, customConfig) => {
282
302
  if (version === lastPendingVersion) {
283
303
  return value;
284
304
  }
285
- const abortController = new AbortController();
286
- try {
287
- return await new Promise((resolve, reject) => {
288
- events.fulfilled.abortable(abortController).then(resolve).catch(noop);
289
- events.rejected.abortable(abortController).then(reject).catch(noop);
290
- });
291
- } finally {
292
- abortController.abort();
305
+ await race([events.fulfilled, events.rejected]);
306
+ if (error) {
307
+ throw error;
293
308
  }
309
+ return value;
294
310
  };
295
311
  const then = async (resolve) => {
296
312
  if (!isFunction(resolve)) {
@@ -332,6 +348,15 @@ const getTriggerPromise = (trigger) => {
332
348
  return isFunction(trigger) ? trigger() : trigger;
333
349
  };
334
350
 
351
+ const getExpirationPromise = (until) => {
352
+ if (typeof AbortSignal !== "undefined" && until instanceof AbortSignal) {
353
+ return new Promise((resolve) => {
354
+ until.addEventListener("abort", () => resolve(void 0), { once: true });
355
+ });
356
+ }
357
+ return Promise.resolve(until);
358
+ };
359
+
335
360
  const getConfig$5 = (isPlainPromiseTrigger, hasTrigger, customConfig = {}) => ({
336
361
  ...customConfig,
337
362
  id: customConfig.id ?? getUniqueId(scenario.name),
@@ -339,17 +364,15 @@ const getConfig$5 = (isPlainPromiseTrigger, hasTrigger, customConfig = {}) => ({
339
364
  tags: [SystemTag.SCENARIO, ...customConfig.tags ?? []]
340
365
  });
341
366
  function scenario(...args) {
342
- const hasTrigger = isFunction(args[1]) || isFunction(args[2]);
343
- const hasExpirationTrigger = isFunction(args[2]);
367
+ const hasTrigger = isFunction(args[1]);
344
368
  const trigger = hasTrigger ? args[0] : void 0;
345
- const expirationTrigger = hasExpirationTrigger ? args[1] : void 0;
346
- const callback = args.findLast(isFunction);
347
- const customConfig = args.at(args.indexOf(callback) + 1);
369
+ const callback = hasTrigger ? args[1] : args[0];
370
+ const customConfig = hasTrigger ? args[2] : args[1];
348
371
  const isPlainPromiseTrigger = hasTrigger && isObject(args[0]) && args[0].constructor === Promise;
349
- const isFiniteScenario = isPlainPromiseTrigger || hasExpirationTrigger || typeof customConfig?.repeat !== "undefined";
350
372
  const config = getConfig$5(isPlainPromiseTrigger, hasTrigger, customConfig);
351
- const { strategy } = config;
352
- let { repeat = Infinity } = config;
373
+ const { strategy, until } = config;
374
+ const isFiniteScenario = isPlainPromiseTrigger || strategy === "once" || typeof until !== "undefined";
375
+ let expirationEvent;
353
376
  let runningCallbacksCount = 0;
354
377
  let shouldExpire = false;
355
378
  let expired = false;
@@ -359,26 +382,27 @@ function scenario(...args) {
359
382
  settled: new AwaiEvent(),
360
383
  started: new AwaiEvent()
361
384
  };
362
- const checkShouldExpire = () => repeat <= 0 || strategy === "once" || shouldExpire || isFunction(expirationTrigger) && expirationTrigger();
363
- const expire = async (event) => {
385
+ const untilPredicate = isFunction(until) ? until : void 0;
386
+ const checkShouldExpire = () => strategy === "once" || shouldExpire || (untilPredicate ? untilPredicate() : false);
387
+ const expire = async () => {
364
388
  expired = true;
365
389
  await flush();
366
- await events.settled.emit({ event, config });
390
+ await events.settled.emit({ event: expirationEvent, config });
367
391
  await flush();
368
392
  await registry.deregister(config.id);
369
393
  };
370
- if (isPromiseLike(expirationTrigger)) {
371
- Promise.resolve(expirationTrigger).then((event) => {
394
+ if (until && !isFunction(until)) {
395
+ getExpirationPromise(until).then((event) => {
372
396
  shouldExpire = true;
397
+ expirationEvent = event;
373
398
  if (runningCallbacksCount === 0) {
374
- expire(event);
399
+ expire();
375
400
  }
376
401
  });
377
402
  }
378
403
  const run = async () => {
379
404
  getTriggerPromise(trigger).then(
380
405
  (event) => {
381
- repeat--;
382
406
  if (expired) {
383
407
  return;
384
408
  }
@@ -583,6 +607,9 @@ const asyncSelector = (states, predicate, customConfig) => {
583
607
  requested: new AwaiEvent()
584
608
  };
585
609
  const getStatus = () => {
610
+ if (isLoading) {
611
+ return AsyncStatus.PENDING;
612
+ }
586
613
  const aggregatedStatus = getAggregatedAsyncStatus(asyncStates);
587
614
  return error !== null && aggregatedStatus === AsyncStatus.FULFILLED ? AsyncStatus.REJECTED : aggregatedStatus;
588
615
  };
@@ -645,13 +672,13 @@ const asyncSelector = (states, predicate, customConfig) => {
645
672
  scenario(
646
673
  async () => {
647
674
  const abortController = new AbortController();
675
+ const abortSignal = abortController.signal;
648
676
  await Promise.race(
649
- states.flatMap((state) => {
650
- return isReadableAsyncState(state) ? [
651
- state.events.requested.abortable(abortController),
652
- state.events.rejected.abortable(abortController),
653
- state.events.fulfilled.abortable(abortController)
654
- ] : state.events.changed.abortable(abortController);
677
+ states.map((state) => {
678
+ return isReadableAsyncState(state) ? race(
679
+ [state.events.requested, state.events.rejected, state.events.fulfilled],
680
+ abortSignal
681
+ ) : state.events.changed.abortable(abortSignal);
655
682
  })
656
683
  );
657
684
  abortController.abort();
@@ -662,10 +689,13 @@ const asyncSelector = (states, predicate, customConfig) => {
662
689
  const get = () => value;
663
690
  const getAsync = () => ({ error, isLoading, value });
664
691
  const getPromise = async () => {
665
- const values = await Promise.all(
666
- states.map((state) => isReadableAsyncState(state) ? state.getPromise() : state.get())
667
- );
668
- return predicate(...values);
692
+ while (isLoading) {
693
+ await race([events.fulfilled, events.rejected]);
694
+ }
695
+ if (error) {
696
+ throw error;
697
+ }
698
+ return value;
669
699
  };
670
700
  const then = async (resolve) => {
671
701
  if (!isFunction(resolve)) {
@@ -709,11 +739,7 @@ const syncSelector = (states, predicate, customConfig) => {
709
739
  return resolve(get());
710
740
  };
711
741
  scenario(
712
- async () => {
713
- const abortController = new AbortController();
714
- await Promise.race(states.map((state) => state.events.changed.abortable(abortController)));
715
- abortController.abort();
716
- },
742
+ () => race(states.map((state) => state.events.changed)),
717
743
  () => {
718
744
  const newValue = get();
719
745
  if (!Object.is(newValue, value)) {
@@ -735,5 +761,5 @@ const selector = (states, predicate, customConfig) => {
735
761
  return state;
736
762
  };
737
763
 
738
- export { AsyncStatus, AwaiEvent, Registry, SyncQueue, SystemTag, action, asyncState, delay, effect, familyState, flush, fork, getAggregatedAsyncStatus, isPromiseLike, isReadableAsyncState, queue, registry, rejectAfter, scenario, selector, state };
764
+ export { AsyncStatus, AwaiEvent, Registry, SyncQueue, SystemTag, action, asyncState, delay, effect, familyState, flush, fork, getAggregatedAsyncStatus, isPromiseLike, isReadableAsyncState, queue, race, registry, rejectAfter, scenario, selector, state };
739
765
  //# sourceMappingURL=index.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.mjs","sources":["../src/constants/AsyncStatus.ts","../src/constants/SystemTag.ts","../src/lib/delay.ts","../src/lib/fork.ts","../src/lib/getAggregatedAsyncStatus.ts","../src/lib/getUniqueId.ts","../src/lib/isCoreNode.ts","../src/lib/isFunction.ts","../src/lib/isObject.ts","../src/lib/isPromiseLike.ts","../src/lib/isPromiseOrFunction.ts","../src/lib/isReadableAsyncState.ts","../src/lib/noop.ts","../src/lib/rejectAfter.ts","../src/lib/SyncQueue.ts","../src/global/queue.ts","../src/core/AwaiEvent.ts","../src/core/flush.ts","../src/core/Registry.ts","../src/global/registry.ts","../src/action/action.ts","../src/async-state/async-state.ts","../src/scenario/lib/getDefaultStrategy.ts","../src/scenario/lib/getTriggerPromise.ts","../src/scenario/scenario.ts","../src/effect/effect.ts","../src/state/state.ts","../src/family-state/family-state.ts","../src/selector/asyncSelector.ts","../src/selector/syncSelector.ts","../src/selector/selector.ts"],"sourcesContent":["enum AsyncStatus {\n FULFILLED = 'fulfilled',\n PENDING = 'pending',\n REJECTED = 'rejected',\n}\n\nexport default AsyncStatus;\n","enum SystemTag {\n ACTION = '@awai/action',\n ASYNC_SELECTOR = '@awai/async-selector',\n ASYNC_STATE = '@awai/async-state',\n CORE_NODE = '@awai/core-node',\n EFFECT = '@awai/effect',\n FAMILY_STATE = '@awai/family-state',\n SCENARIO = '@awai/scenario',\n SELECTOR = '@awai/selector',\n STATE = '@awai/state',\n}\n\nexport default SystemTag;\n","const delay = (ms: number): Promise<void> => new Promise((resolve) => setTimeout(resolve, ms));\n\nexport default delay;\n","const fork = async (forkFn: () => Promise<any>) => {\n await forkFn();\n};\n\nexport default fork;\n","import { AsyncStatus } from '../constants';\nimport type { ReadableAsyncState } from '../types';\n\nconst getAggregatedAsyncStatus = <T extends Pick<ReadableAsyncState, 'getStatus'>[]>(\n states: T,\n): AsyncStatus => {\n const hasError = states.some((state) => state.getStatus() === AsyncStatus.REJECTED);\n\n if (hasError) {\n return AsyncStatus.REJECTED;\n }\n\n const isPending = states.some((state) => state.getStatus() === AsyncStatus.PENDING);\n\n if (isPending) {\n return AsyncStatus.PENDING;\n }\n\n return AsyncStatus.FULFILLED;\n};\n\nexport default getAggregatedAsyncStatus;\n","const lastScopesIds: Record<string, number> = {};\n\nconst getUniqueId = (scope = 'unknown') => {\n const nextId = (lastScopesIds[scope] ?? 0) + 1;\n lastScopesIds[scope] = nextId;\n return `awai\\$${scope}\\$${nextId}`;\n};\n\nexport default getUniqueId;\n","import { SystemTag } from '../constants';\nimport type { BaseNode } from '../types';\n\nconst isCoreNode = (node: BaseNode): boolean => node.config.tags.includes(SystemTag.CORE_NODE);\n\nexport default isCoreNode;\n","const isFunction = (value: unknown): value is Function => typeof value === 'function';\n\nexport default isFunction;\n","const isObject = (value: unknown): value is Record<string, unknown> =>\n typeof value === 'object' && value !== null;\n\nexport default isObject;\n","import isFunction from './isFunction';\nimport isObject from './isObject';\n\nconst isPromiseLike = <T>(value: unknown): value is PromiseLike<T> =>\n isObject(value) && (value instanceof Promise || isFunction(value.then));\n\nexport default isPromiseLike;\n","import isFunction from './isFunction';\nimport isPromiseLike from './isPromiseLike';\n\nconst isPromiseOrFunction = <T>(\n value: unknown,\n): value is Promise<T> | ((...args: any) => Promise<T>) =>\n isFunction(value) || isPromiseLike<T>(value);\n\nexport default isPromiseOrFunction;\n","import type { ReadableAsyncState } from '../types';\n\nimport isFunction from './isFunction';\nimport isObject from './isObject';\n\nconst isReadableAsyncState = <T>(value: unknown): value is ReadableAsyncState<T> =>\n isObject(value) &&\n isFunction(value.get) &&\n isFunction(value.getAsync) &&\n isFunction(value.getPromise) &&\n isFunction(value.then);\n\nexport default isReadableAsyncState;\n","const noop = () => undefined;\n\nexport default noop;\n","const rejectAfter = (ms: number): Promise<void> => {\n return new Promise((_, reject) => setTimeout(reject, ms));\n};\n\nexport default rejectAfter;\n","/**\n * @description\n * This helper is needed to emit events synchronously, so that scenarios/effects/selectors\n * can resubscribe to an event before another emission.\n *\n * @example\n * const state = state(0);\n *\n * scenario(state.events.change, () => {\n * // Without `SyncQueue` this scenario would only run once\n * });\n *\n * state.set(1);\n * state.set(2);\n */\n\nexport default class SyncQueue {\n private callbacksQueue: Function[] = [];\n private isDequeuing = false;\n\n public enqueue(callback: Function) {\n this.callbacksQueue.push(callback);\n this.dequeue();\n }\n\n private dequeue = async () => {\n if (this.isDequeuing || this.callbacksQueue.length === 0) {\n return;\n }\n\n this.isDequeuing = true;\n const callback = this.callbacksQueue.shift()!;\n callback();\n\n queueMicrotask(() => {\n this.isDequeuing = false;\n this.dequeue();\n });\n };\n}\n","import { SyncQueue } from '../lib';\n\nconst queue = new SyncQueue();\n\nexport default queue;\n","import queue from '../global/queue';\nimport { isFunction } from '../lib';\n\ntype Resolver<T> = (value: T) => any;\ntype FilterPredicate<T> = (value: T) => boolean;\n\nexport default class AwaiEvent<T = void> {\n private _awaiters: Resolver<T>[] = [];\n\n then: PromiseLike<T>['then'] = (onfulfilled) => {\n return new Promise<any>((resolve, reject) => {\n this._awaiters.push((value: T) => {\n try {\n const result = isFunction(onfulfilled) ? onfulfilled(value) : value;\n resolve(result);\n } catch (error) {\n reject(error);\n }\n });\n });\n };\n\n abortable(abortController: AbortController): Promise<T> {\n return new Promise<T>((resolve, reject) => {\n this._awaiters.push(resolve);\n\n const abortionHandler = () => {\n this._awaiters = this._awaiters.filter((awaiter) => awaiter !== resolve);\n reject('Aborted');\n\n abortController.signal.removeEventListener('abort', abortionHandler);\n };\n\n abortController.signal.addEventListener('abort', abortionHandler);\n });\n }\n\n emit(value: T) {\n queue.enqueue(async () => {\n const awaiters = this._awaiters;\n this._awaiters = [];\n\n for (const resolve of awaiters) {\n resolve(value);\n }\n });\n }\n\n async filter(predicate: FilterPredicate<T>) {\n return new Promise(async (resolve) => {\n while (true) {\n const newValue = await this;\n const isApplicable = Boolean(predicate(newValue));\n\n if (isApplicable) {\n resolve(newValue);\n return;\n }\n }\n });\n }\n}\n","const flush = () => new Promise<void>((resolve) => setTimeout(resolve, 0));\n\nexport default flush;\n","import { isCoreNode } from '../lib';\nimport type BaseNode from '../types/BaseNode';\n\nimport AwaiEvent from './AwaiEvent';\n\nexport default class Registry<T extends BaseNode> {\n private _nodes: T[] = [];\n public readonly events = {\n deregistered: new AwaiEvent<T['config']['id']>(),\n registered: new AwaiEvent<T>(),\n };\n\n public async register(node: T) {\n if (isCoreNode(node)) {\n return;\n }\n\n this._nodes.push(node);\n this.events.registered.emit(node);\n }\n\n public async deregister(id: BaseNode['config']['id']) {\n const node = this._nodes.find((node) => node.config.id === id);\n\n if (!node) {\n return;\n }\n\n this._nodes = this._nodes.filter((node) => node.config.id !== id);\n this.events.deregistered.emit(id);\n }\n\n get nodes() {\n return [...this._nodes];\n }\n}\n","import { Registry } from '../core';\n\nconst registry = new Registry();\n\nexport default registry;\n","import { SystemTag } from '../constants';\nimport { AwaiEvent, flush } from '../core';\nimport { registry } from '../global';\nimport { getUniqueId, isFunction } from '../lib';\n\nimport type { CallbackAction, Config, EmptyAction } from './types';\n\nconst getConfig = (customConfig: Partial<Config> = {}): Config => ({\n ...customConfig,\n id: customConfig.id ?? getUniqueId(action.name),\n tags: [SystemTag.ACTION, ...(customConfig.tags ?? [])],\n});\n\nfunction action<Args extends any[] = []>(): EmptyAction<Args>;\nfunction action<Args extends any[] = []>(config?: Partial<Config>): EmptyAction<Args>;\nfunction action<Args extends any[], Return = void>(\n callback: (...args: Args) => Return,\n config?: Partial<Config>,\n): CallbackAction<Args, Return>;\n\nfunction action<Args extends any[], Return = void>(\n ...args: [Partial<Config>?] | [(...args: Args) => Return, Partial<Config>?]\n): EmptyAction<Args> | CallbackAction<Args, Return> {\n type Action = EmptyAction<Args> | CallbackAction<Args, Return>;\n\n const hasCallback = isFunction(args[0]);\n const [callback, customConfig] = hasCallback\n ? (args as [(...args: Args) => Return, Partial<Config>?])\n : ([, ...args] as [undefined, Partial<Config>?]);\n\n const config = getConfig(customConfig);\n\n const events = {\n invoked: new AwaiEvent(),\n rejected: hasCallback ? new AwaiEvent() : undefined,\n fulfilled: hasCallback ? new AwaiEvent() : undefined,\n } satisfies Action['events'];\n\n const invoke = async (...invokeArgs: Args) => {\n events.invoked.emit({ arguments: invokeArgs, config });\n\n try {\n const valueOrPromise: Return | Promise<Return> = isFunction(callback)\n ? callback(...invokeArgs)\n : (undefined as Return);\n\n const value = await valueOrPromise;\n await flush();\n events.fulfilled?.emit({ arguments: invokeArgs, config, result: value });\n return value;\n } catch (error) {\n events.rejected?.emit({\n arguments: invokeArgs,\n config,\n error,\n });\n throw error;\n }\n };\n\n const actionNode = Object.assign(invoke, { config, events }) as Action;\n\n registry.register(actionNode);\n\n return actionNode;\n}\n\nexport default action;\n","import { AsyncStatus, SystemTag } from '../constants';\nimport { AwaiEvent, flush } from '../core';\nimport { registry } from '../global';\nimport { getUniqueId, isFunction, isPromiseOrFunction, noop } from '../lib';\n\nimport type { VersionIgnoredEvent, AsyncState, Config, InitialValue, Version } from './types';\n\nconst getConfig = (customConfig: Partial<Config> = {}): Config => ({\n ...customConfig,\n id: customConfig.id ?? getUniqueId(asyncState.name),\n tags: [SystemTag.ASYNC_STATE, ...(customConfig.tags ?? [])],\n});\n\nconst asyncState = <T>(\n initialValue?: InitialValue<T>,\n customConfig?: Partial<Config>,\n): AsyncState<T> => {\n const config = getConfig(customConfig);\n const isInitialValueAsync = isPromiseOrFunction(initialValue);\n let version: Version = isInitialValueAsync ? 0 : 1;\n let lastPendingVersion: Version = version;\n let status: AsyncStatus = AsyncStatus.FULFILLED;\n let error: unknown = null;\n let value: T | undefined = isInitialValueAsync ? undefined : initialValue;\n\n const events: AsyncState<T>['events'] = {\n changed: new AwaiEvent<T | undefined>(),\n fulfilled: new AwaiEvent<T>(),\n ignored: new AwaiEvent<VersionIgnoredEvent<T>>(),\n rejected: new AwaiEvent<unknown>(),\n requested: new AwaiEvent<void>(),\n };\n\n const getStatus: AsyncState<T>['getStatus'] = () => status;\n\n const set: AsyncState<T>['set'] = async (nextValueOrResolver) => {\n const currentPendingVersion: Version = (lastPendingVersion + 1) % Number.MAX_SAFE_INTEGER;\n lastPendingVersion = currentPendingVersion;\n\n try {\n if (isPromiseOrFunction(nextValueOrResolver)) {\n status = AsyncStatus.PENDING;\n events.requested.emit();\n }\n\n let newValue = isFunction(nextValueOrResolver)\n ? await nextValueOrResolver(value)\n : await nextValueOrResolver;\n const isChanged = !Object.is(newValue, value);\n\n if (currentPendingVersion !== lastPendingVersion || !isChanged) {\n events.ignored.emit({ value: newValue, version: currentPendingVersion });\n return;\n }\n\n error = null;\n value = newValue;\n status = AsyncStatus.FULFILLED;\n\n events.fulfilled.emit(newValue);\n\n if (isChanged) {\n events.changed.emit(value);\n }\n } catch (e) {\n if (currentPendingVersion !== lastPendingVersion) {\n events.ignored.emit({ error: e, version: currentPendingVersion });\n return;\n }\n\n const isChanged = !Object.is(e, error);\n\n error = e;\n value = undefined;\n status = AsyncStatus.REJECTED;\n\n events.rejected.emit(error);\n\n if (isChanged) {\n events.changed.emit(value);\n }\n }\n\n version = lastPendingVersion;\n await flush();\n };\n\n const get: AsyncState<T>['get'] = () => value;\n\n const getAsync: AsyncState<T>['getAsync'] = () => ({\n error,\n isLoading: status === AsyncStatus.PENDING,\n value,\n });\n\n const getPromise: AsyncState<T>['getPromise'] = async () => {\n if (version === lastPendingVersion) {\n return value!;\n }\n\n const abortController = new AbortController();\n\n try {\n return await new Promise((resolve, reject) => {\n events.fulfilled.abortable(abortController).then(resolve).catch(noop);\n events.rejected.abortable(abortController).then(reject).catch(noop);\n });\n } finally {\n abortController.abort();\n }\n };\n\n const then: PromiseLike<T>['then'] = async (resolve) => {\n if (!isFunction(resolve)) {\n return getPromise() as any;\n }\n\n return resolve(await getPromise());\n };\n\n if (isInitialValueAsync) {\n set(initialValue);\n }\n\n const asyncStateNode: AsyncState<T> = {\n config,\n events,\n get,\n getAsync,\n getPromise,\n getStatus,\n set,\n then,\n };\n\n registry.register(asyncStateNode);\n\n return asyncStateNode;\n};\n\nexport default asyncState;\n","import type { Config } from '../types';\n\nconst getDefaultStrategy = (\n isPlainPromiseTrigger: boolean,\n hasTrigger: boolean,\n): Config['strategy'] => {\n if (isPlainPromiseTrigger) {\n return 'once';\n }\n\n if (hasTrigger) {\n return 'fork';\n }\n\n return 'cyclic';\n};\n\nexport default getDefaultStrategy;\n","import { isFunction } from '../../lib';\nimport type { Trigger } from '../types';\n\nconst getTriggerPromise = <T>(trigger: Trigger<T> | undefined) => {\n if (!trigger) {\n return Promise.resolve(undefined as T);\n }\n\n return isFunction(trigger) ? trigger() : trigger;\n};\n\nexport default getTriggerPromise;\n","import { SystemTag } from '../constants';\nimport { AwaiEvent, flush } from '../core';\nimport { registry } from '../global';\nimport { getUniqueId, isFunction, isObject, isPromiseLike } from '../lib';\n\nimport { getDefaultStrategy, getTriggerPromise } from './lib';\nimport type { Callback, Config, ExpirationTrigger, SettledEvent, Scenario, Trigger } from './types';\n\nconst getConfig = (\n isPlainPromiseTrigger: boolean,\n hasTrigger: boolean,\n customConfig: Partial<Config> = {},\n): Config => ({\n ...customConfig,\n id: customConfig.id ?? getUniqueId(scenario.name),\n strategy: customConfig.strategy ?? getDefaultStrategy(isPlainPromiseTrigger, hasTrigger),\n tags: [SystemTag.SCENARIO, ...(customConfig.tags ?? [])],\n});\n\nfunction scenario<T, R, E>(\n trigger: Trigger<T>,\n callback: Callback<T, R>,\n customConfig?: Partial<Config>,\n): Scenario<T, R, E>;\n\nfunction scenario<T, R, E>(\n trigger: Trigger<T>,\n expirationTrigger: ExpirationTrigger<E>,\n callback: Callback<T, R>,\n customConfig?: Partial<Config>,\n): Scenario<T, R, E>;\n\nfunction scenario<T, R, E = unknown>(\n callback: Callback,\n config?: Partial<Config>,\n): Scenario<T, R, E>;\n\nfunction scenario<T, R, E>(\n ...args:\n | [Trigger<T>, Callback<T, R>, Partial<Config>?]\n | [Trigger<T>, ExpirationTrigger<E>, Callback<T, R>, Partial<Config>?]\n | [Callback, Partial<Config>?]\n) {\n const hasTrigger = isFunction(args[1]) || isFunction(args[2]);\n const hasExpirationTrigger = isFunction(args[2]);\n\n const trigger = hasTrigger ? (args[0] as Trigger<T>) : undefined;\n const expirationTrigger = hasExpirationTrigger ? (args[1] as ExpirationTrigger<E>) : undefined;\n const callback = args.findLast(isFunction) as Callback<T, R>;\n const customConfig = args.at(args.indexOf(callback) + 1) as Partial<Config> | undefined;\n const isPlainPromiseTrigger = hasTrigger && isObject(args[0]) && args[0].constructor === Promise;\n const isFiniteScenario =\n isPlainPromiseTrigger || hasExpirationTrigger || typeof customConfig?.repeat !== 'undefined';\n\n const config = getConfig(isPlainPromiseTrigger, hasTrigger, customConfig);\n const { strategy } = config;\n let { repeat = Infinity } = config;\n let runningCallbacksCount = 0;\n let shouldExpire = false;\n let expired = false;\n\n const events: Scenario<T, R, E>['events'] = {\n fulfilled: new AwaiEvent(),\n rejected: new AwaiEvent(),\n settled: new AwaiEvent(),\n started: new AwaiEvent(),\n };\n\n const checkShouldExpire = () =>\n repeat <= 0 ||\n strategy === 'once' ||\n shouldExpire ||\n (isFunction(expirationTrigger) && expirationTrigger());\n\n const expire = async (event?: E) => {\n expired = true;\n await flush();\n await events.settled.emit({ event, config });\n await flush();\n await registry.deregister(config.id);\n };\n\n if (isPromiseLike(expirationTrigger)) {\n Promise.resolve(expirationTrigger).then((event) => {\n shouldExpire = true;\n\n if (runningCallbacksCount === 0) {\n expire(event);\n }\n });\n }\n\n const run = async () => {\n getTriggerPromise(trigger).then(\n (event) => {\n repeat--;\n\n if (expired) {\n return;\n }\n\n runningCallbacksCount++;\n events.started.emit({ config, event });\n\n try {\n Promise.resolve(callback(event))\n .then((result) => {\n flush().then(() => {\n events.fulfilled.emit({ config, event, result });\n });\n })\n .catch((error) => {\n events.rejected.emit(error);\n })\n .finally(() => {\n runningCallbacksCount--;\n\n if (checkShouldExpire() && runningCallbacksCount === 0) {\n expire();\n return;\n }\n\n if (strategy === 'cyclic') {\n queueMicrotask(run);\n }\n });\n } catch (error) {\n runningCallbacksCount--;\n events.rejected.emit(error);\n }\n\n if (strategy === 'fork') {\n queueMicrotask(run);\n }\n },\n () => {\n queueMicrotask(run);\n },\n );\n };\n\n const then: AwaiEvent<SettledEvent<E>>['then'] = (resolve) => {\n if (!isFiniteScenario) {\n console.warn(\n 'You seem to await an infinite scenario. This causes a memory leak in your application.',\n );\n }\n\n if (!isFunction(resolve)) {\n return Promise.resolve(events.settled) as any;\n }\n\n return events.settled.then(resolve);\n };\n\n const scenarioNode: Scenario<T, R, E> = { config, events, then };\n\n registry.register(scenarioNode);\n\n run();\n\n return scenarioNode;\n}\n\nexport default scenario;\n","import { AsyncStatus, SystemTag } from '../constants';\nimport { AwaiEvent } from '../core';\nimport { registry } from '../global';\nimport { getAggregatedAsyncStatus, getUniqueId, isFunction, isReadableAsyncState } from '../lib';\nimport scenario from '../scenario';\nimport { type InferReadableType, type ReadableAsyncState, type ReadableState } from '../types';\n\nimport type { CleanupCallback, Config, Effect } from './types';\n\nconst getConfig = (customConfig: Partial<Config> = {}): Config => ({\n ...customConfig,\n id: customConfig.id ?? getUniqueId(effect.name),\n tags: [SystemTag.EFFECT, ...(customConfig.tags ?? [])],\n});\n\nconst effect = <\n T extends (ReadableState<any> | ReadableAsyncState<any>)[],\n V extends { [K in keyof T]: InferReadableType<T[K]> },\n>(\n states: [...T],\n effect: (...values: V) => CleanupCallback | void,\n customConfig?: Partial<Config>,\n): Effect<T, V> => {\n const config = getConfig(customConfig);\n const asyncStates = states.filter(isReadableAsyncState);\n\n let cleanup: ReturnType<typeof effect>;\n\n const events: Effect<T, V>['events'] = {\n cleared: new AwaiEvent(),\n started: new AwaiEvent(),\n };\n\n const runEffect = () => {\n const values = states.map((state) => state.get()) as V;\n const status = getAggregatedAsyncStatus(asyncStates);\n\n if (status !== AsyncStatus.FULFILLED) {\n return;\n }\n\n events.started.emit({ states, values });\n\n cleanup = effect(...values);\n };\n\n queueMicrotask(() => {\n scenario(\n () => Promise.race(states.map((state) => state.events.changed)),\n () => {\n if (isFunction(cleanup)) {\n cleanup();\n events.cleared.emit({ states });\n }\n\n runEffect();\n },\n { tags: [SystemTag.CORE_NODE] },\n );\n\n queueMicrotask(runEffect);\n });\n\n const effectNode: Effect<T, V> = { config, events };\n\n registry.register(effectNode);\n\n return effectNode;\n};\n\nexport default effect;\n","import { SystemTag } from '../constants';\nimport { AwaiEvent, flush } from '../core';\nimport { getUniqueId, isFunction } from '../lib';\nimport { registry } from '../global';\n\nimport type { Config, State } from './types';\n\nconst getConfig = (customConfig: Partial<Config> = {}): Config => ({\n ...customConfig,\n id: customConfig.id ?? getUniqueId(state.name),\n tags: [SystemTag.STATE, ...(customConfig.tags ?? [])],\n});\n\nconst state = <T>(initialValue: T, customConfig?: Partial<Config>): State<T> => {\n const config = getConfig(customConfig);\n\n let value = initialValue;\n\n const events = {\n changed: new AwaiEvent<T>(),\n };\n\n const set: State<T>['set'] = (nextValueOrResolver) => {\n let newValue = isFunction(nextValueOrResolver)\n ? nextValueOrResolver(value)\n : nextValueOrResolver;\n\n if (!Object.is(newValue, value)) {\n value = newValue;\n events.changed.emit(newValue);\n }\n\n return flush().then(() => newValue);\n };\n\n const get = () => value;\n\n const then: State<T>['then'] = async (resolve) => {\n if (!isFunction(resolve)) {\n return value as any;\n }\n\n return resolve(value);\n };\n\n const stateNode: State<T> = { config, events, get, set, then };\n\n registry.register(stateNode);\n\n return stateNode;\n};\n\nexport default state;\n","import asyncState, { type AsyncState } from '../async-state';\nimport { SystemTag } from '../constants';\nimport { AwaiEvent, flush } from '../core';\nimport { registry } from '../global';\nimport { getUniqueId, isFunction } from '../lib';\nimport scenario from '../scenario';\nimport state, { type State } from '../state';\nimport type { Id } from '../types';\n\nimport type { Config, FamilyState } from './types';\n\nconst getConfig = (customConfig: Partial<Config> = {}): Config => ({\n ...customConfig,\n id: customConfig.id ?? getUniqueId(familyState.name),\n tags: [SystemTag.FAMILY_STATE, ...(customConfig.tags ?? [])],\n});\n\nconst familyState = <\n T,\n Initializer extends (id: Id) => T | Promise<T>,\n Family extends Record<Id, NodeType>,\n NodeType extends State<any> | AsyncState<any> = ReturnType<Initializer> extends PromiseLike<\n infer Q\n >\n ? AsyncState<Q>\n : State<ReturnType<Initializer>>,\n>(\n initializer: Initializer,\n customConfig?: Partial<Config>,\n): FamilyState<NodeType> => {\n const config = getConfig(customConfig);\n\n let family: Family = {} as Family;\n\n const events = {\n changed: new AwaiEvent<Record<Id, NodeType>>(),\n stateCreated: new AwaiEvent<Id>(),\n };\n\n const getNode = (id: Id): NodeType => {\n if (id in family) {\n return family[id];\n }\n\n const initialValue = initializer(id);\n\n const stateNode =\n initialValue instanceof Promise\n ? asyncState(initialValue, { tags: [SystemTag.CORE_NODE] })\n : state(initialValue, { tags: [SystemTag.CORE_NODE] });\n\n family = { ...family, [id]: stateNode };\n events.stateCreated.emit(id);\n events.changed.emit(family);\n\n scenario(\n stateNode.events.changed,\n () => {\n events.changed.emit(family);\n },\n { tags: [SystemTag.CORE_NODE] },\n );\n\n return stateNode as NodeType;\n };\n\n const setNode = async (id: Id, stateNode: NodeType) => {\n if (id in family) {\n throw new Error(`Cannot set node. Node with id \"${id}\" already exists.`);\n }\n\n family = { ...family, [id]: stateNode };\n\n scenario(\n stateNode.events.changed,\n () => {\n events.changed.emit(family);\n },\n { tags: [SystemTag.CORE_NODE] },\n );\n\n events.changed.emit(family);\n\n await flush();\n };\n\n const get = () => {\n return family;\n };\n\n const then: FamilyState<NodeType>['then'] = async (resolve) => {\n if (!isFunction(resolve)) {\n return family as any;\n }\n\n return resolve(family);\n };\n\n const familyStateNode: FamilyState<NodeType> = { config, events, get, getNode, setNode, then };\n\n registry.register(familyStateNode);\n\n return familyStateNode;\n};\n\nexport default familyState;\n","import { AsyncStatus, SystemTag } from '../constants';\nimport { AwaiEvent } from '../core';\nimport { registry } from '../global';\nimport {\n fork,\n getAggregatedAsyncStatus,\n getUniqueId,\n isFunction,\n isReadableAsyncState,\n} from '../lib';\nimport scenario from '../scenario';\nimport type { InferReadableType, ReadableAsyncState, ReadableState } from '../types';\n\nimport type { AsyncConfig, AsyncSelector, VersionIgnoredEvent } from './types';\n\nconst getConfig = (customConfig: Partial<AsyncConfig> = {}): AsyncConfig => ({\n ...customConfig,\n id: customConfig.id ?? getUniqueId(asyncSelector.name),\n tags: [SystemTag.ASYNC_SELECTOR, ...(customConfig.tags ?? [])],\n});\n\nconst asyncSelector = <T extends (ReadableState | ReadableAsyncState)[], U>(\n states: T,\n predicate: (...values: { [K in keyof T]: InferReadableType<T[K]> }) => U,\n customConfig?: Partial<AsyncConfig>,\n): AsyncSelector<U> => {\n type StatesValues = { [K in keyof T]: InferReadableType<T[K]> };\n\n const config = getConfig(customConfig);\n const asyncStates = states.filter(isReadableAsyncState);\n\n let error: AggregateError | unknown | null = null;\n let value: U | undefined;\n let isLoading: boolean = true;\n let version = 0;\n let lastPendingVersion: number = version;\n\n const events: AsyncSelector<U>['events'] = {\n changed: new AwaiEvent<U | undefined>(),\n fulfilled: new AwaiEvent<U>(),\n ignored: new AwaiEvent<VersionIgnoredEvent<U>>(),\n rejected: new AwaiEvent<unknown>(),\n requested: new AwaiEvent<void>(),\n };\n\n const getStatus = () => {\n const aggregatedStatus = getAggregatedAsyncStatus(asyncStates);\n\n return error !== null && aggregatedStatus === AsyncStatus.FULFILLED\n ? AsyncStatus.REJECTED\n : aggregatedStatus;\n };\n\n const determineNextVersion = async () => {\n const currentPendingVersion = (lastPendingVersion + 1) % Number.MAX_SAFE_INTEGER;\n lastPendingVersion = currentPendingVersion;\n\n const status = getAggregatedAsyncStatus(asyncStates);\n const errors = asyncStates.map((state) => state.getAsync().error).filter(Boolean);\n\n if (status === AsyncStatus.PENDING) {\n isLoading = true;\n }\n\n events.requested.emit();\n\n if (errors.length > 0) {\n error = new AggregateError(errors);\n value = undefined;\n isLoading = status === AsyncStatus.PENDING;\n version = lastPendingVersion;\n events.rejected.emit(error);\n events.changed.emit(value);\n return;\n }\n\n if (status === AsyncStatus.FULFILLED) {\n const values = states.map((state) => state.get()) as StatesValues;\n\n fork(async () => {\n isLoading = true;\n\n try {\n const newValue = await predicate(...values);\n const isChanged = !Object.is(newValue, value);\n\n if (currentPendingVersion !== lastPendingVersion) {\n events.ignored.emit({ value: newValue, version: currentPendingVersion });\n return;\n }\n\n error = null;\n value = newValue;\n\n events.fulfilled.emit(newValue);\n\n if (isChanged) {\n events.changed.emit(value);\n }\n } catch (caughtError) {\n if (currentPendingVersion !== lastPendingVersion) {\n events.ignored.emit({ error: caughtError, version: currentPendingVersion });\n return;\n }\n\n const isChanged = typeof value !== 'undefined';\n\n error = caughtError;\n value = undefined;\n\n events.rejected.emit(caughtError);\n\n if (isChanged) {\n events.changed.emit(value);\n }\n } finally {\n if (currentPendingVersion === lastPendingVersion) {\n version = lastPendingVersion;\n isLoading = false;\n }\n }\n });\n }\n };\n\n scenario(\n async () => {\n const abortController = new AbortController();\n await Promise.race(\n states.flatMap((state) => {\n return isReadableAsyncState(state)\n ? [\n state.events.requested.abortable(abortController),\n state.events.rejected.abortable(abortController),\n state.events.fulfilled.abortable(abortController),\n ]\n : state.events.changed.abortable(abortController);\n }),\n );\n abortController.abort();\n },\n determineNextVersion,\n { tags: [SystemTag.CORE_NODE] },\n );\n\n const get = () => value;\n\n const getAsync = () => ({ error, isLoading, value });\n\n const getPromise = async (): Promise<U> => {\n const values = (await Promise.all(\n states.map((state) => (isReadableAsyncState(state) ? state.getPromise() : state.get())),\n )) as StatesValues;\n\n return predicate(...values);\n };\n\n const then: AsyncSelector<U>['then'] = async (resolve) => {\n if (!isFunction(resolve)) {\n return getPromise() as any;\n }\n\n return resolve(await getPromise());\n };\n\n const selectorNode = {\n config,\n events,\n get,\n getAsync,\n getPromise,\n getStatus,\n then,\n };\n\n queueMicrotask(determineNextVersion);\n\n registry.register(selectorNode);\n\n return selectorNode;\n};\n\nexport default asyncSelector;\n","import { SystemTag } from '../constants';\nimport { AwaiEvent } from '../core';\nimport { registry } from '../global';\nimport { getUniqueId, isFunction } from '../lib';\nimport scenario from '../scenario';\nimport type { InferReadableType, ReadableAsyncState, ReadableState } from '../types';\n\nimport type { SyncConfig, SyncSelector } from './types';\n\nconst getConfig = (customConfig: Partial<SyncConfig> = {}): SyncConfig => ({\n ...customConfig,\n id: customConfig.id ?? getUniqueId(syncSelector.name),\n tags: [SystemTag.SELECTOR, ...(customConfig.tags ?? [])],\n});\n\nconst syncSelector = <T extends (ReadableState | ReadableAsyncState)[], U>(\n states: [...T],\n predicate: (...values: { [K in keyof T]: InferReadableType<T[K]> }) => U,\n customConfig?: Partial<SyncConfig>,\n): SyncSelector<U> => {\n const config = getConfig(customConfig);\n let value: U;\n\n const events = {\n changed: new AwaiEvent<U>(),\n };\n\n const get = () => {\n const values = states.map((state) => state.get()) as {\n [K in keyof T]: InferReadableType<T[K]>;\n };\n return predicate(...values);\n };\n\n const then: SyncSelector<U>['then'] = async (resolve) => {\n if (!isFunction(resolve)) {\n return get() as any;\n }\n\n return resolve(get());\n };\n\n scenario(\n async () => {\n const abortController = new AbortController();\n await Promise.race(states.map((state) => state.events.changed.abortable(abortController)));\n abortController.abort();\n },\n () => {\n const newValue = get();\n\n if (!Object.is(newValue, value)) {\n value = newValue;\n events.changed.emit(newValue);\n }\n },\n { tags: [SystemTag.CORE_NODE] },\n );\n\n value = get();\n\n const selectorNode: SyncSelector<U> = { config, events, get, then };\n\n registry.register(selectorNode);\n\n return selectorNode;\n};\n\nexport default syncSelector;\n","import { isReadableAsyncState } from '../lib';\nimport { type InferReadableType } from '../types';\n\nimport asyncSelector from './asyncSelector';\nimport syncSelector from './syncSelector';\nimport type { Config, Selector } from './types';\n\nconst selector = <T extends any[], U>(\n states: [...T],\n predicate: (...values: { [K in keyof T]: InferReadableType<T[K]> }) => U,\n customConfig?: Partial<Config<T, U>>,\n): Selector<T, U> => {\n const isAsyncPredicate = predicate.constructor.name === 'AsyncFunction';\n\n const state =\n isAsyncPredicate || states.some((state) => isReadableAsyncState(state))\n ? asyncSelector(states, predicate, customConfig)\n : syncSelector(states, predicate, customConfig);\n\n return state as Selector<T, U>;\n};\n\nexport default selector;\n"],"names":["AsyncStatus","SystemTag","__publicField","node","getConfig","effect","state"],"mappings":"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"}
1
+ {"version":3,"file":"index.mjs","sources":["../src/constants/AsyncStatus.ts","../src/constants/SystemTag.ts","../src/lib/delay.ts","../src/lib/fork.ts","../src/lib/getAggregatedAsyncStatus.ts","../src/lib/getUniqueId.ts","../src/lib/isCoreNode.ts","../src/lib/isFunction.ts","../src/lib/isObject.ts","../src/lib/isPromiseLike.ts","../src/lib/isPromiseOrFunction.ts","../src/lib/isReadableAsyncState.ts","../src/lib/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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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "awai",
3
- "version": "1.0.0-rc-4",
3
+ "version": "1.0.0-rc-6",
4
4
  "author": "Yuriy Yakym",
5
5
  "description": "State management library",
6
6
  "license": "MIT",