march-hare 0.6.1 → 0.7.1

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.
Files changed (53) hide show
  1. package/README.md +89 -96
  2. package/dist/{src/library/action → action}/index.d.ts +19 -15
  3. package/dist/{src/library/action → action}/utils.d.ts +2 -2
  4. package/dist/{src/library/boundary → boundary}/components/broadcast/index.d.ts +2 -2
  5. package/dist/{src/library/boundary → boundary}/components/broadcast/types.d.ts +1 -1
  6. package/dist/{src/library/boundary → boundary}/components/consumer/components/partition/index.d.ts +1 -1
  7. package/dist/{src/library/boundary → boundary}/components/consumer/components/partition/types.d.ts +1 -1
  8. package/dist/{src/library/boundary → boundary}/components/consumer/index.d.ts +5 -5
  9. package/dist/{src/library/boundary → boundary}/components/consumer/types.d.ts +1 -1
  10. package/dist/{src/library/boundary → boundary}/components/consumer/utils.d.ts +1 -1
  11. package/dist/{src/library/boundary → boundary}/components/scope/index.d.ts +3 -3
  12. package/dist/{src/library/boundary → boundary}/components/scope/types.d.ts +2 -2
  13. package/dist/{src/library/boundary → boundary}/components/scope/utils.d.ts +2 -2
  14. package/dist/boundary/components/store/index.d.ts +41 -0
  15. package/dist/boundary/components/store/types.d.ts +11 -0
  16. package/dist/boundary/components/store/utils.d.ts +64 -0
  17. package/dist/{src/library/boundary → boundary}/components/tasks/index.d.ts +2 -2
  18. package/dist/{src/library/boundary → boundary}/components/tasks/types.d.ts +3 -3
  19. package/dist/{src/library/boundary → boundary}/components/tasks/utils.d.ts +1 -1
  20. package/dist/boundary/index.d.ts +21 -0
  21. package/dist/boundary/types.d.ts +22 -0
  22. package/dist/cache/index.d.ts +44 -0
  23. package/dist/cache/types.d.ts +54 -0
  24. package/dist/{src/library/error → error}/types.d.ts +1 -1
  25. package/dist/{src/library/error → error}/utils.d.ts +1 -1
  26. package/dist/{src/library/hooks → hooks}/index.d.ts +3 -3
  27. package/dist/{src/library/hooks → hooks}/types.d.ts +3 -3
  28. package/dist/{src/library/hooks → hooks}/utils.d.ts +3 -3
  29. package/dist/index.d.ts +19 -0
  30. package/dist/march-hare.js +6 -6
  31. package/dist/march-hare.umd.cjs +1 -1
  32. package/dist/resource/index.d.ts +102 -0
  33. package/dist/resource/types.d.ts +27 -0
  34. package/dist/resource/utils.d.ts +37 -0
  35. package/dist/{src/library/types → types}/index.d.ts +162 -21
  36. package/dist/{src/library/utils → utils}/index.d.ts +3 -43
  37. package/dist/utils/types.d.ts +18 -0
  38. package/dist/{src/library/utils → utils}/utils.d.ts +1 -1
  39. package/package.json +2 -2
  40. package/dist/src/library/boundary/components/mode/index.d.ts +0 -15
  41. package/dist/src/library/boundary/components/mode/types.d.ts +0 -7
  42. package/dist/src/library/boundary/components/mode/utils.d.ts +0 -55
  43. package/dist/src/library/boundary/index.d.ts +0 -20
  44. package/dist/src/library/boundary/types.d.ts +0 -4
  45. package/dist/src/library/index.d.ts +0 -17
  46. package/dist/src/library/resource/index.d.ts +0 -65
  47. package/dist/src/library/resource/types.d.ts +0 -150
  48. package/dist/src/library/resource/utils.d.ts +0 -23
  49. package/dist/src/library/utils/types.d.ts +0 -101
  50. /package/dist/{src/library/annotate → annotate}/index.d.ts +0 -0
  51. /package/dist/{src/library/boundary → boundary}/components/broadcast/utils.d.ts +0 -0
  52. /package/dist/{src/library/error → error}/index.d.ts +0 -0
  53. /package/dist/{src/library/utils.d.ts → utils.d.ts} +0 -0
@@ -27,9 +27,9 @@ export type ActionId = symbol | string;
27
27
  * ```
28
28
  */
29
29
  export type Task<P = unknown> = {
30
- controller: AbortController;
31
- action: ActionId;
32
- payload: P;
30
+ readonly controller: AbortController;
31
+ readonly action: ActionId;
32
+ readonly payload: P;
33
33
  };
34
34
  /**
35
35
  * A set of running tasks ordered by creation time (oldest first).
@@ -1,4 +1,4 @@
1
- import { Tasks } from './types.ts';
1
+ import { Tasks } from './types';
2
2
  import * as React from "react";
3
3
  /**
4
4
  * React context for the shared tasks Set.
@@ -0,0 +1,21 @@
1
+ import { Props } from './types';
2
+ import * as React from "react";
3
+ /**
4
+ * Creates a unified context boundary for all March Hare features.
5
+ * Wraps children with Broadcaster, Store, and Tasks providers.
6
+ *
7
+ * Use this at the root of your application or to create isolated context
8
+ * boundaries for libraries that need their own March Hare context.
9
+ *
10
+ * Pass the `store` prop with the initial Store value (session, locale,
11
+ * feature flags, etc.) &mdash; the shape is determined by module
12
+ * augmentation on the library's `Store` interface.
13
+ *
14
+ * @example
15
+ * ```tsx
16
+ * <Boundary store={{ session: null, locale: "en-GB" }}>
17
+ * <App />
18
+ * </Boundary>
19
+ * ```
20
+ */
21
+ export declare function Boundary({ store, children }: Props): React.ReactNode;
@@ -0,0 +1,22 @@
1
+ import { Store } from './components/store/types';
2
+ import type * as React from "react";
3
+ export type Props = {
4
+ /**
5
+ * Initial value of the per-Boundary {@link Store}. The shape is
6
+ * derived from module augmentation &mdash; declare the keys your
7
+ * application needs once via:
8
+ *
9
+ * ```ts
10
+ * declare module "march-hare" {
11
+ * interface Store {
12
+ * session: Session | null;
13
+ * locale: string;
14
+ * }
15
+ * }
16
+ * ```
17
+ *
18
+ * Optional only when the augmented Store has no required keys.
19
+ */
20
+ store?: Store;
21
+ children: React.ReactNode;
22
+ };
@@ -0,0 +1,44 @@
1
+ import { Adapter, Stored } from './types';
2
+ export type { Adapter, Encoded } from './types';
3
+ /**
4
+ * Persistence-aware cache for a single {@link Resource}. Wraps a
5
+ * synchronous {@link Adapter} (localStorage, MMKV, chrome.storage with a
6
+ * sync facade, etc.) and traffics in {@link Stored} envelopes &mdash;
7
+ * storage entries serialise as {@link Encoded}`<T>` so the
8
+ * `Temporal.Instant` timestamp survives the string round-trip and
9
+ * `.exceeds({...})` can short-circuit on the persisted timestamp after
10
+ * a reload.
11
+ *
12
+ * Call with no arguments for an in-memory cache scoped to this
13
+ * instance &mdash; useful for tests, ephemeral state, or when you want a
14
+ * first-class cache object to share between Resources without
15
+ * persistence. Pass an {@link Adapter} to back the cache with a
16
+ * persistent store.
17
+ *
18
+ * @example
19
+ * ```ts
20
+ * // In-memory, scoped to this instance.
21
+ * const cache = Cache();
22
+ *
23
+ * // Persisted via localStorage.
24
+ * const cache = Cache({
25
+ * get: (key) => localStorage.getItem(key),
26
+ * set: (key, value) => localStorage.setItem(key, value),
27
+ * remove: (key) => localStorage.removeItem(key),
28
+ * clear: () => localStorage.clear(),
29
+ * });
30
+ *
31
+ * // Wired into a Resource — successful runs write through automatically.
32
+ * export const cat = Resource(
33
+ * async ({ controller }) => fetchCat(controller.signal),
34
+ * cache,
35
+ * );
36
+ * ```
37
+ */
38
+ export type Cache = {
39
+ get<T>(key: string): Stored<T>;
40
+ set<T>(key: string, value: Stored<T>): boolean;
41
+ remove(key: string): void;
42
+ clear(): void;
43
+ };
44
+ export declare function Cache(adapter?: Adapter): Cache;
@@ -0,0 +1,54 @@
1
+ export type { Stored } from '../utils/types';
2
+ /**
3
+ * On-disk JSON shape of a `Stored` envelope. The Cache wrapper
4
+ * encodes a populated Stored as `{ data, at: at.toString() }` so the
5
+ * `Temporal.Instant` survives the string round-trip, and decodes via
6
+ * `Temporal.Instant.from(...)` on read. Adapters never see this shape
7
+ * directly &mdash; they shuttle the already-stringified JSON.
8
+ *
9
+ * @template T The payload type carried by the matching {@link Stored}.
10
+ */
11
+ export type Encoded<T> = {
12
+ readonly data: T;
13
+ readonly at: string;
14
+ };
15
+ /**
16
+ * Adapter contract for synchronous key/value storage. Implement once per
17
+ * backend (localStorage, MMKV on React Native, chrome.storage with a sync
18
+ * facade, etc.) and pass to {@link Cache}. The adapter shuttles raw
19
+ * strings; JSON encoding and `Temporal.Instant` round-tripping happen
20
+ * inside the Cache wrapper, so adapters stay trivial.
21
+ */
22
+ export type Adapter = {
23
+ /**
24
+ * Return the raw string stored under `key`, or `null` when no entry
25
+ * exists. The Cache wrapper handles JSON parsing and `Temporal.Instant`
26
+ * round-tripping, so this stays a plain string getter. Treat any
27
+ * read-time error (decryption, IPC, etc.) as "not found" and return
28
+ * `null` &mdash; the Cache falls through to its next fallback rather
29
+ * than crashing the render.
30
+ */
31
+ readonly get: (key: string) => string | null;
32
+ /**
33
+ * Persist the raw string `value` under `key`. The Cache guarantees
34
+ * `value` is a JSON-encoded `{ data, at }` envelope produced by a
35
+ * resolved snapshot &mdash; never a placeholder. Throwing is fine on
36
+ * quota, private mode, sandboxed iframes, etc.; the Cache catches and
37
+ * swallows so a write failure can't poison an already-resolved fetch.
38
+ */
39
+ readonly set: (key: string, value: string) => void;
40
+ /**
41
+ * Drop the entry at `key`. Idempotent &mdash; calling `remove` for a
42
+ * key that isn't present must not throw.
43
+ */
44
+ readonly remove: (key: string) => void;
45
+ /**
46
+ * Wipe every entry this adapter can see. On a shared backend such as
47
+ * `localStorage` this means the whole origin &mdash; third-party SDK
48
+ * state, dismissed banners, route hints, etc. all go with it. Adapter
49
+ * authors should either delegate to the backend's native clear
50
+ * (accepting that scope) or namespace by key prefix and remove only
51
+ * their own.
52
+ */
53
+ readonly clear: () => void;
54
+ };
@@ -1,4 +1,4 @@
1
- import { Task } from '../boundary/components/tasks/types.ts';
1
+ import { Task } from '../boundary/components/tasks/types';
2
2
  /**
3
3
  * Reasons why an action error occurred.
4
4
  */
@@ -1,4 +1,4 @@
1
- import { Reason } from './types.ts';
1
+ import { Reason } from './types';
2
2
  /**
3
3
  * Determines the error reason based on what was thrown.
4
4
  *
@@ -1,6 +1,6 @@
1
- import { Data } from './types.ts';
2
- import { Model, Props, Actions, UseActions } from '../types/index.ts';
3
- export { With } from './utils.ts';
1
+ import { Data } from './types';
2
+ import { Model, Props, Actions, UseActions } from '../types/index';
3
+ export { With } from './utils';
4
4
  /**
5
5
  * A hook for managing state with actions.
6
6
  *
@@ -1,8 +1,8 @@
1
1
  import { default as EventEmitter } from 'eventemitter3';
2
2
  import { RefObject } from 'react';
3
- import { Model, HandlerContext, Actions, Props, Tasks, ActionId, Phase, Filter } from '../types/index.ts';
4
- import { BroadcastEmitter } from '../boundary/components/broadcast/utils.ts';
5
- import { ScopeContext } from '../boundary/components/scope/types.ts';
3
+ import { Model, HandlerContext, Actions, Props, Tasks, ActionId, Phase, Filter } from '../types/index';
4
+ import { BroadcastEmitter } from '../boundary/components/broadcast/utils';
5
+ import { ScopeContext } from '../boundary/components/scope/types';
6
6
  /**
7
7
  * Function signature for action handlers registered via `useAction`.
8
8
  * Receives the reactive context and payload, returning void or a promise/generator.
@@ -1,8 +1,8 @@
1
1
  import { RefObject } from 'react';
2
- import { Props, Model, Actions, Filter, ActionId, HandlerPayload, ChanneledAction, HandlerContext } from '../types/index.ts';
2
+ import { Props, Model, Actions, Filter, ActionId, HandlerPayload, ChanneledAction, HandlerContext } from '../types/index';
3
3
  import { default as EventEmitter } from 'eventemitter3';
4
- import { Dispatchers, LifecycleConfig, Scope } from './types.ts';
5
- import { isChanneledAction, getActionSymbol } from '../action/index.ts';
4
+ import { Dispatchers, LifecycleConfig, Scope } from './types';
5
+ import { isChanneledAction, getActionSymbol } from '../action/index';
6
6
  import * as React from "react";
7
7
  /**
8
8
  * Creates a new object with getters for each property of the input object.
@@ -0,0 +1,19 @@
1
+ export { Action } from './action/index';
2
+ export { Distribution, Lifecycle } from './types/index';
3
+ export { Reason, AbortError, TimeoutError } from './error/index';
4
+ export { Operation, Op, State } from 'immertation';
5
+ export { annotate } from './annotate/index';
6
+ export { Boundary } from './boundary/index';
7
+ export { withScope } from './boundary/components/scope/index';
8
+ export { useStore } from './boundary/components/store/index';
9
+ export type { Store } from './boundary/components/store/index';
10
+ export { useActions, With } from './hooks/index';
11
+ export { Resource } from './resource/index';
12
+ export type { Fetcher } from './resource/index';
13
+ export { Cache } from './cache/index';
14
+ export type { Adapter, Encoded } from './cache/index';
15
+ export * as utils from './utils/index';
16
+ export type { Stored, Unset } from './utils/index';
17
+ export type { Box } from 'immertation';
18
+ export type { Fault } from './error/index';
19
+ export type { Pk, Task, Tasks, Handlers, Handler, LeafActions, Dispatchable, Subscribable, } from './types/index';
@@ -1,6 +1,6 @@
1
- import{G as e,A as t}from"@mobily/ts-belt";import{immerable as n,enablePatches as r,Immer as o}from"immer";import{jsx as s}from"react/jsx-runtime";import*as a from"react";const c=(e="")=>`march-hare.action/${e}`,i=(e="")=>`march-hare.action/broadcast/${e}`,u=(e="")=>`march-hare.action/multicast/${e}`,l=(e="")=>`march-hare.action.lifecycle/${e}`;class f{static Payload=/* @__PURE__ */Symbol("march-hare.brand/Payload");static Broadcast=/* @__PURE__ */Symbol("march-hare.brand/Broadcast");static Multicast=/* @__PURE__ */Symbol("march-hare.brand/Multicast");static Action=/* @__PURE__ */Symbol("march-hare.brand/Action");static Channel=/* @__PURE__ */Symbol("march-hare.brand/Channel")}function d(e){const t=/* @__PURE__ */Symbol(`march-hare.action.lifecycle/${e}`),n=function(e){return{[f.Action]:t,[f.Payload]:void 0,[f.Channel]:e,channel:e}};return Object.defineProperty(n,f.Action,{value:t,enumerable:!1}),Object.defineProperty(n,f.Payload,{value:void 0,enumerable:!1}),n}const p=Symbol(i("Fault"));class h{static Mount(){return d("Mount")}static Unmount(){return d("Unmount")}static Error(){return d("Error")}static Update(){return d("Update")}static Fault=(()=>{const e={};return Object.defineProperty(e,f.Action,{value:p,enumerable:!1}),Object.defineProperty(e,f.Payload,{value:void 0,enumerable:!1}),Object.defineProperty(e,f.Broadcast,{value:!0,enumerable:!1}),e})()}var m=/* @__PURE__ */(e=>(e.Unicast="unicast",e.Broadcast="broadcast",e.Multicast="multicast",e))(m||{}),y=/* @__PURE__ */(e=>(e.Mounting="mounting",e.Mounted="mounted",e.Unmounting="unmounting",e.Unmounted="unmounted",e))(y||{});const b=e=>"symbol"==typeof e;function v(t){return e.isString(t)||b(t)?t:(e.isObject(t)||e.isFunction(t))&&f.Action in t?t[f.Action]:t}function g(t){if(e.isString(t))return t.startsWith(i());if(b(t))return t.description?.startsWith(i())??!1;if(e.isObject(t)||e.isFunction(t)){if(f.Broadcast in t&&t[f.Broadcast])return!0;if(f.Action in t){const e=t[f.Action];return e.description?.startsWith(i())??!1}}return!1}function w(t){const n=v(t),r=e.isString(n)?n:n.description??"";return r.startsWith(c())&&r.slice(r.lastIndexOf("/")+1)||"unknown"}function O(t){return e.isObject(t)&&f.Channel in t&&"channel"in t}function S(e){const t=v(e),n=b(t)?t.description??"":t;return n.startsWith(l())&&n.slice(l().length)||null}function j(t){if(e.isString(t))return t.startsWith(u());if(b(t))return t.description?.startsWith(u())??!1;if(e.isObject(t)||e.isFunction(t)){if(f.Multicast in t&&t[f.Multicast])return!0;if(f.Action in t){const e=t[f.Action];return e.description?.startsWith(u())??!1}}return!1}const P=(e,t=m.Unicast)=>{const n=t===m.Broadcast?Symbol(i(e)):t===m.Multicast?Symbol(u(e)):Symbol(c(e)),r=function(e){return{[f.Action]:n,[f.Payload]:void 0,[f.Channel]:e,channel:e}};return Object.defineProperty(r,f.Action,{value:n,enumerable:!1}),Object.defineProperty(r,f.Payload,{value:void 0,enumerable:!1}),t===m.Broadcast&&Object.defineProperty(r,f.Broadcast,{value:!0,enumerable:!1}),t===m.Multicast&&Object.defineProperty(r,f.Multicast,{value:!0,enumerable:!1}),r};var E=/* @__PURE__ */(e=>(e[e.Timedout=0]="Timedout",e[e.Supplanted=1]="Supplanted",e[e.Errored=2]="Errored",e))(E||{});class M extends Error{name="AbortError";constructor(e="Aborted"){super(e)}}class C extends Error{name="TimeoutError";constructor(e="Timeout"){super(e)}}let x=(e=21)=>{let t="",n=crypto.getRandomValues(new Uint8Array(e|=0));for(;e--;)t+="useandom-26T198340PX75pxJACKVERYMINDBUSHWOLF_GQZbfghjklqvwyzrict"[63&n[e]];return t};var k=/* @__PURE__ */(e=>(e[e.Add=1]="Add",e[e.Remove=2]="Remove",e[e.Update=4]="Update",e[e.Move=8]="Move",e[e.Replace=16]="Replace",e[e.Sort=32]="Sort",e[e.Create=64]="Create",e[e.Fetch=128]="Fetch",e[e.Clone=256]="Clone",e[e.Archive=512]="Archive",e[e.Restore=1024]="Restore",e[e.Merge=2048]="Merge",e[e.Reorder=4096]="Reorder",e[e.Sync=8192]="Sync",e[e.Publish=16384]="Publish",e[e.Link=32768]="Link",e[e.Unlink=65536]="Unlink",e[e.Lock=131072]="Lock",e[e.Unlock=262144]="Unlock",e[e.Import=524288]="Import",e[e.Export=1048576]="Export",e[e.Transfer=2097152]="Transfer",e))(k||{}),A=/* @__PURE__ */(e=>(e[e.Produce=0]="Produce",e[e.Hydrate=1]="Hydrate",e))(A||{}),_=/* @__PURE__ */(e=>(e.Property="property",e.Process="process",e.Value="value",e.Operation="operation",e))(_||{});class N{[n]=!0;static keys=new Set(Object.values(_));property=null;process=null;value;operation;constructor(e,t){this.value=e,this.operation=t}assign(e,t){const n=new N(this.value,this.operation);return n.property=e,n.process=t,n}}class R{static immer=(()=>{r();const e=new o;return e.setAutoFreeze(!1),e})();static tag="κ";static id=x}function U(e,t){const n="string"==typeof t?""===t?[]:t.split("."):t;let r=e;for(const o of n){if(null==r)return;r=r[o]}return r}function L(t){if(e.isNullable(t)||F(t))return t;if(e.isArray(t))return t.map(e=>L(e));if(e.isObject(t)&&B(t)){const e=Object.entries(t).map(([e,t])=>[e,L(t)]);return{...Object.fromEntries(e),[R.tag]:t[R.tag]??R.id()}}return t}function T(e){if(Array.isArray(e))return e.filter(e=>R.tag in e).map(e=>e[R.tag]??"").join(",");const t=e[R.tag];if(t)return t;try{return JSON.stringify(e)}catch{return`[unserializable:${typeof e}]`}}function B(e){const t=Object.getPrototypeOf(e);return t===Object.prototype||null===t}function F(t){return e.isNullable(t)||e.isString(t)||e.isNumber(t)||e.isBoolean(t)||"symbol"==typeof t||"bigint"==typeof t}function W(t,n,r,o,s,a){return function c(i,u=n.path){if(i instanceof N){const n=U(r,u.join("."));if(Object.entries(i).filter(([e,t])=>!N.keys.has(e)&&t instanceof N).forEach(([e,t])=>c(t,u.concat(e))),F(i.value)){if(t===A.Hydrate)return i.value;const c=u.slice(0,-1),l=c.length>0?U(r,c.join(".")):r;return e.isNullable(l)||$(l,i,u.at(-1),o,s,a),n??i.value}if(t===A.Hydrate){const e=L(c(i.value,u));return $(e,i,null,o,s,a),e}const l=n??L(i.value);return $(l,i,null,o,s,a),e.isNullable(n)?l:(c(i.value,u),n)}if(e.isArray(i))return i.map((e,t)=>c(e,u.concat(t)));if(e.isObject(i)&&!B(i))return i;if(e.isObject(i)){const e=Object.entries(i).map(([e,t])=>[e,c(t,u.concat(e))]),n=Object.fromEntries(e);if(t===A.Hydrate){const e=L(n);return Object.entries(i).forEach(([t,n])=>{n instanceof N&&F(n.value)&&$(e,n,t,o,s,a)}),e}return n}return i}(n.value)}function $(e,t,n,r,o,s){const a=s(e),c=o.get(a)??[];o.set(a,[t.assign(n,r),...c])}class H{#e={};#t;#n=/* @__PURE__ */new Map;#r=/* @__PURE__ */new Set;#o=!1;constructor(e=T){this.#t=e}static pk(){return x()}static"κ"=H.pk;annotate(e,t){return new N(t,e)}"δ"=this.annotate;get model(){return this.#e}get inspect(){return function(n,r,o,s,a){function c(s){const a=s.at(-1),c=U(n(),s),i=s.slice(0,-1),u=t.isNotEmpty(i)?U(n(),i):n();return[...e.isObject(c)||e.isArray(c)?r.get(o(c))?.filter(t=>e.isNullable(t.property))??[]:[],...e.isObject(u)?r.get(o(u))?.filter(e=>e.property===a)??[]:[]]}return function e(r){return new Proxy(()=>{},{get:(o,i)=>"pending"===i?()=>!t.isEmpty(c(r)):"remaining"===i?()=>t.length(c(r)):"box"===i?()=>({value:U(n(),r),inspect:e(r)}):"is"===i?e=>c(r).some(t=>0!==(t.operation&e)):"draft"===i?()=>t.head(c(r))?.value??U(n(),r):"settled"===i?()=>new Promise(e=>{if(t.isEmpty(c(r)))return e(U(n(),r));const o=()=>{t.isEmpty(c(r))&&(a(o),e(U(n(),r)))};s(o)}):e([...r,String(i)])})}([])}(()=>this.#e,this.#n,this.#t,e=>this.#r.add(e),e=>this.#r.delete(e))}hydrate(e){return this.#o=!0,this.#s(A.Hydrate,()=>e)}produce(e){if(!this.#o)throw new Error("State must be hydrated using hydrate() before calling produce()");return this.#s(A.Produce,e)}#s(e,t){const n=/* @__PURE__ */Symbol("process"),[,r]=R.immer.produceWithPatches(this.#e,t);return this.#e=r.reduce((t,r)=>R.immer.applyPatches(t,[{...r,value:W(e,r,t,n,this.#n,this.#t)}]),this.#e),this.#e=L(this.#e),this.#a(),n}prune(e){this.#n.forEach((n,r)=>{const o=n.filter(t=>t.process!==e);t.isEmpty(o)?this.#n.delete(r):this.#n.set(r,o)}),this.#a()}#a(){this.#r.forEach(e=>e())}observe(e){const t=()=>e(this.#e);return this.#r.add(t),()=>this.#r.delete(t)}}const I=new H;function z(e,t=k.Update){return I.annotate(t,e)}function D(e){return e&&e.__esModule&&Object.prototype.hasOwnProperty.call(e,"default")?e.default:e}var J,G={exports:{}};const V=/* @__PURE__ */D((J||(J=1,function(e){var t=Object.prototype.hasOwnProperty,n="~";function r(){}function o(e,t,n){this.fn=e,this.context=t,this.once=n||!1}function s(e,t,r,s,a){if("function"!=typeof r)throw new TypeError("The listener must be a function");var c=new o(r,s||e,a),i=n?n+t:t;return e._events[i]?e._events[i].fn?e._events[i]=[e._events[i],c]:e._events[i].push(c):(e._events[i]=c,e._eventsCount++),e}function a(e,t){0===--e._eventsCount?e._events=new r:delete e._events[t]}function c(){this._events=new r,this._eventsCount=0}Object.create&&(r.prototype=/* @__PURE__ */Object.create(null),(new r).__proto__||(n=!1)),c.prototype.eventNames=function(){var e,r,o=[];if(0===this._eventsCount)return o;for(r in e=this._events)t.call(e,r)&&o.push(n?r.slice(1):r);return Object.getOwnPropertySymbols?o.concat(Object.getOwnPropertySymbols(e)):o},c.prototype.listeners=function(e){var t=this._events[n?n+e:e];if(!t)return[];if(t.fn)return[t.fn];for(var r=0,o=t.length,s=new Array(o);r<o;r++)s[r]=t[r].fn;return s},c.prototype.listenerCount=function(e){var t=this._events[n?n+e:e];return t?t.fn?1:t.length:0},c.prototype.emit=function(e,t,r,o,s,a){var c=n?n+e:e;if(!this._events[c])return!1;var i,u,l=this._events[c],f=arguments.length;if(l.fn){switch(l.once&&this.removeListener(e,l.fn,void 0,!0),f){case 1:return l.fn.call(l.context),!0;case 2:return l.fn.call(l.context,t),!0;case 3:return l.fn.call(l.context,t,r),!0;case 4:return l.fn.call(l.context,t,r,o),!0;case 5:return l.fn.call(l.context,t,r,o,s),!0;case 6:return l.fn.call(l.context,t,r,o,s,a),!0}for(u=1,i=new Array(f-1);u<f;u++)i[u-1]=arguments[u];l.fn.apply(l.context,i)}else{var d,p=l.length;for(u=0;u<p;u++)switch(l[u].once&&this.removeListener(e,l[u].fn,void 0,!0),f){case 1:l[u].fn.call(l[u].context);break;case 2:l[u].fn.call(l[u].context,t);break;case 3:l[u].fn.call(l[u].context,t,r);break;case 4:l[u].fn.call(l[u].context,t,r,o);break;default:if(!i)for(d=1,i=new Array(f-1);d<f;d++)i[d-1]=arguments[d];l[u].fn.apply(l[u].context,i)}}return!0},c.prototype.on=function(e,t,n){return s(this,e,t,n,!1)},c.prototype.once=function(e,t,n){return s(this,e,t,n,!0)},c.prototype.removeListener=function(e,t,r,o){var s=n?n+e:e;if(!this._events[s])return this;if(!t)return a(this,s),this;var c=this._events[s];if(c.fn)c.fn!==t||o&&!c.once||r&&c.context!==r||a(this,s);else{for(var i=0,u=[],l=c.length;i<l;i++)(c[i].fn!==t||o&&!c[i].once||r&&c[i].context!==r)&&u.push(c[i]);u.length?this._events[s]=1===u.length?u[0]:u:a(this,s)}return this},c.prototype.removeAllListeners=function(e){var t;return e?this._events[t=n?n+e:e]&&a(this,t):(this._events=new r,this._eventsCount=0),this},c.prototype.off=c.prototype.removeListener,c.prototype.addListener=c.prototype.on,c.prefixed=n,c.EventEmitter=c,e.exports=c}(G)),G.exports));class q extends V{cache=/* @__PURE__ */new Map;emit(e,...t){return this.cache.set(e,t[0]),super.emit(e,...t)}setCache(e,t){this.cache.set(e,t)}getCached(e){return this.cache.get(e)}fire(e,...t){return super.emit(e,...t)}}const K=a.createContext(new q);function Q(){return a.useContext(K)}function X({children:e}){const t=a.useMemo(()=>new q,[]);/* @__PURE__ */
2
- return s(K.Provider,{value:t,children:e})}const Y=a.createContext(/* @__PURE__ */new Set);function Z({children:e}){const t=a.useMemo(()=>/* @__PURE__ */new Set,[]);/* @__PURE__ */
3
- return s(Y.Provider,{value:t,children:e})}const ee=a.createContext({current:null});function te(){const e=a.useContext(ee);return a.useMemo(()=>({read:()=>e.current,update(t){e.current=t}}),[e])}function ne({children:e}){const t=a.useRef(null);/* @__PURE__ */
4
- return s(ee.Provider,{value:t,children:e})}function re({children:e}){/* @__PURE__ */
5
- return s(X,{children:/* @__PURE__ */s(ne,{children:/* @__PURE__ */s(Z,{children:e})})})}const oe=a.createContext(null);function se(){return a.useContext(oe)}function ae(e,t){return e?.get(t)??null}function ce(e,t){const n=`Scoped${t.displayName||t.name||"Component"}`,r=v(e);return{[n](e){const n=se(),o=a.useMemo(()=>({action:r,emitter:new q}),[]),c=a.useMemo(()=>{const e=new Map(n??[]);return e.set(r,o),e},[n,o]);/* @__PURE__ */
6
- return s(oe.Provider,{value:c,children:/* @__PURE__ */s(t,{...e})})}}[n]}const ie=Symbol(((e="")=>`march-hare/replay${e}`)());function ue(e,t,...n){e instanceof q&&e.setCache(t,n[0]);const r=e.listeners(t);return 0===r.length?Promise.resolve():Promise.all(r.map(e=>Promise.resolve(e(...n)))).then(()=>{})}const le={Update:e=>(t,n)=>{t.actions.produce(t=>{t.model[e]=n})},Invert:e=>t=>{t.actions.produce(t=>{t.model[e]=!t.model[e]})}};function fe(e,t){for(const n of e.keys())if(S(n)===t)return n;return null}const de=/* @__PURE__ */Symbol("march-hare.unset");function pe(){const[,e]=a.useReducer(e=>e+1,0);return e}function he(){return{data:de,at:null,else:e=>e}}function me(e,t){return{data:e,at:t,else:t=>e}}function ye(e){if(e instanceof Error){if("TimeoutError"===e.name)return E.Timedout;if("AbortError"===e.name)return E.Supplanted}return E.Errored}const be=a.createContext(/* @__PURE__ */new Map);function ve({action:t,renderer:n}){const r=Q(),o=a.useContext(be),s=pe(),c=a.useMemo(()=>{const e=o.get(t);if(e)return e;const n={state:new H,listeners:/* @__PURE__ */new Set};return o.set(t,n),n},[t,o]);a.useLayoutEffect(()=>{function e(e){c.state.hydrate({value:e}),c.listeners.forEach(e=>e())}return c.listeners.add(s),r.on(t,e),()=>{c.listeners.delete(s),r.off(t,e)}},[t,r,c]);const i=c.state.model?.value;return e.isNullable(i)?null:n(i,c.state.inspect.value)}function ge(...n){const r=e.isUndefined(n[0])||e.isFunction(n[0])?{}:n[0],o=e.isFunction(n[0])?n[0]:n[1]??(()=>({})),s=Q(),c=se(),i=a.useContext(Y),u=pe(),l=a.useRef(!1),f=a.useRef(null),d=a.useRef(new H);l.current||(l.current=!0,f.current=d.current.hydrate(r));const[h,m]=a.useState(()=>d.current.model),b=function(e){const t=a.useRef(e);return a.useLayoutEffect(()=>{t.current=e},[e]),a.useMemo(()=>{return n=t,Object.keys(e).reduce((e,t)=>(Object.defineProperty(e,t,{get:()=>n.current[t],enumerable:!0}),e),{});var n},[e])}(o()),S=a.useMemo(()=>new V,[]),P=a.useRef({handlers:/* @__PURE__ */new Map});P.current.handlers=/* @__PURE__ */new Map;const E=function(){const e=a.useRef(/* @__PURE__ */new Set),t=a.useRef(/* @__PURE__ */new Set);return a.useMemo(()=>({broadcast:e.current,multicast:t.current}),[])}(),M=a.useRef(y.Mounting),C=a.useRef(/* @__PURE__ */new Set),x=a.useRef(0),A=a.useCallback((e,t,n)=>{const r=new AbortController,o={controller:r,action:e,payload:t};return i.add(o),C.current.add(o),{model:d.current.model,get phase(){return M.current},task:o,data:b,tasks:i,actions:{produce(e){if(r.signal.aborted)return;const t=d.current.produce(t=>{e({model:t,inspect:d.current.inspect})});m(d.current.model),n.processes.add(t),f.current&&(n.processes.add(f.current),f.current=null)},dispatch(e,t){if(r.signal.aborted)return Promise.resolve();const n=v(e),o=O(e)?e.channel:void 0;if(j(e)){const e=ae(c,n);return e?ue(e.emitter,n,t,o):Promise.resolve()}return ue(g(e)?s:S,n,t,o)},annotate:(e,t=k.Update)=>d.current.annotate(t,e),async resolution(e){if(r.signal.aborted)return null;const t=v(e),n=j(e)?ae(c,t)?.emitter??null:s;if(!n)return null;if(void 0===n.getCached(t))return null;const o=w(e),a="unknown"!==o?o[0].toLowerCase()+o.slice(1):null;if(a){const e=d.current.inspect[a];e?.pending?.()&&await new Promise((t,n)=>{if(r.signal.aborted)return void n(r.signal.reason);const o=()=>n(r.signal.reason);r.signal.addEventListener("abort",o,{once:!0}),e.settled().then(()=>{r.signal.removeEventListener("abort",o),t()})})}return n.getCached(t)??null},peek(e){if(r.signal.aborted)return null;const t=v(e),n=j(e)?ae(c,t)?.emitter??null:s;return n?n.getCached(t)??null:null}}}},[h]);a.useLayoutEffect(()=>{function t(t,n,r){return function(o,a){const c=r();if(a===ie&&e.isNotNullable(c))return;if(e.isNotNullable(a)&&a!==ie&&e.isNotNullable(c)&&!function(e,t){for(const n of Object.keys(e))if(t[n]!==e[n])return!1;return!0}(a,c))return;const l={processes:/* @__PURE__ */new Set},f=Promise.withResolvers(),h=A(t,o,l);function m(e){const n=fe(P.current.handlers,"Error"),r=null!==n,o={reason:ye(e),error:(a=e,a instanceof Error?a:new Error(String(a))),action:w(t),handled:r,tasks:i};var a;s.fire(p,o),r&&n&&S.emit(n,o)}function y(){for(const e of i)if(e===h.task){i.delete(e),C.current.delete(e);break}l.processes.forEach(e=>d.current.prune(e)),l.processes.size>0&&u(),f.resolve()}let b;try{b=n(h,o)}catch(v){return m(v),void y()}if(!function(e){if(!e||"object"!=typeof e)return!1;const t=Object.prototype.toString.call(e);return"[object Generator]"===t||"[object AsyncGenerator]"===t}(b))return Promise.resolve(b).catch(m).finally(y),f.promise;(async()=>{for await(const e of b);})().catch(m).finally(y)}}x.current++;const n=/* @__PURE__ */new Set;return P.current.handlers.forEach((e,r)=>{for(const{getChannel:o,handler:a}of e){const e=t(r,a,o);if(j(r)){if(c)for(const t of c.values()){const o=t.emitter;o.on(r,e),n.add(()=>o.off(r,e))}S.on(r,e),E.multicast.add(r),n.add(()=>S.off(r,e))}else g(r)?(s.on(r,e),S.on(r,e),E.broadcast.add(r),n.add(()=>{s.off(r,e),S.off(r,e)})):(S.on(r,e),n.add(()=>S.off(r,e)))}}),()=>{const e=++x.current,t=new Set(n);queueMicrotask(()=>{if(x.current!==e){for(const e of t)e();return}for(const e of C.current)e.controller.abort(),i.delete(e);C.current.clear(),M.current=y.Unmounting;const n=fe(P.current.handlers,"Unmount");n&&S.emit(n),M.current=y.Unmounted;for(const e of t)e()})}},[S]),function({unicast:n,broadcast:r,dispatchers:o,scope:s,phase:c,data:i,handlers:u}){const l=a.useRef(null);a.useLayoutEffect(()=>{if(c.current===y.Mounted)return;c.current=y.Mounting;const t=fe(u,"Mount");t&&n.emit(t),o.broadcast.forEach(t=>{const o=r.getCached(t);e.isNullable(o)||n.emit(t,o,ie)}),s&&o.multicast.forEach(t=>{for(const r of s.values()){const o=r.emitter.getCached(t);e.isNullable(o)||n.emit(t,o,ie)}}),c.current=y.Mounted},[]),a.useLayoutEffect(()=>{if(e.isNotNullable(l.current)){const e=function(e,t){return Object.keys(t).reduce((n,r)=>e[r]!==t[r]?{...n,[r]:t[r]}:n,{})}(l.current,i);if(t.isNotEmpty(Object.keys(e))){const t=fe(u,"Update");t&&n.emit(t,e)}}l.current=i},[i,n])}({unicast:S,broadcast:s,dispatchers:E,scope:c,phase:M,data:o(),handlers:P.current.handlers});const _=a.useMemo(()=>[h,{dispatch(e,t){const n=v(e),r=O(e)?e.channel:void 0;if(j(e)){const e=ae(c,n);return e?ue(e.emitter,n,t,r):Promise.resolve()}return ue(g(e)?s:S,n,t,r)},get inspect(){return d.current.inspect},stream:(e,t)=>a.createElement(ve,{action:v(e),renderer:t})}],[h,S]);return _.useAction=(e,t)=>{!function(e,t,n){const r=a.useRef(n);a.useLayoutEffect(()=>{r.current=n});const o=a.useRef(t);a.useLayoutEffect(()=>{o.current=t});const s=a.useCallback((e,t)=>r.current(e,t),[]),c=a.useCallback(()=>O(o.current)?o.current.channel:void 0,[]),i=v(t),u=e.current.handlers.get(i)??/* @__PURE__ */new Set;0===u.size&&e.current.handlers.set(i,u),u.add({getChannel:c,handler:s})}(P,e,t)},_}function we(e,t){return new Promise((n,r)=>{if(t?.aborted)return void r(new M);const o=setTimeout(n,e);t?.addEventListener("abort",()=>{clearTimeout(o),r(new M)},{once:!0})})}async function Oe(e,t,n){if(t?.aborted)throw new M;for(;;){if(await n())return;await we(e,t)}}function Se(e){return e?Boolean(e&&"symbol"!=typeof e):/* @__PURE__ */Symbol(`pk.${Date.now()}.${crypto.randomUUID()}`)}function je(e){return{get(t){try{const n=e.get(t);if(null===n)return he();const r=JSON.parse(n);return me(r.data,Temporal.Instant.from(r.at))}catch{return he()}},set(t,n){if(n.data===de||null===n.at)return!1;try{return e.set(t,JSON.stringify({data:n.data,at:n.at.toString()})),!0}catch{return!1}},remove(t){e.remove(t)},clear(){e.clear()}}}const Pe=/* @__PURE__ */Object.freeze(/* @__PURE__ */Object.defineProperty({__proto__:null,pk:Se,poll:Oe,sleep:we,store:je,unset:de,"ζ":we,"κ":Se,"π":Oe,"σ":je},Symbol.toStringTag,{value:"Module"})),Ee=/* @__PURE__ */new WeakMap;function Me(e){return{run:(t,n)=>e(t,n).then(t=>(Ee.set(e,{data:t,at:Temporal.Now.instant()}),t)),get data(){const t=Ee.get(e);return void 0===t?de:t.data},get at(){return Ee.get(e)?.at??null},seed(t,n){Ee.set(e,{data:t,at:n})}}}function Ce(e){return a.useMemo(()=>{const t=(t,n)=>e.run(t??void 0,n??{});return Object.defineProperties(t,{if:{value:(t,n,r)=>{const o=e.data,s=e.at;if(o!==de&&null!==s){const e=Temporal.Now.instant().since(s),n=Temporal.Duration.from(t.over);if(Temporal.Duration.compare(e,n)<=0)return Promise.resolve(o)}return e.run(n??void 0,r??{})},enumerable:!0},else:{value:function(n){if(null!==(r=n)&&"object"==typeof r&&"data"in r&&"at"in r&&"else"in r)return e.data===de&&n.data!==de&&null!==n.at&&e.seed(n.data,n.at),t;var r;const o=e.data;return o===de?n:o},enumerable:!0},snapshot:{value:()=>{const t=e.data,n=e.at;return t===de||null===n?he():me(t,n)},enumerable:!0},data:{get:()=>e.data,enumerable:!0},at:{get:()=>e.at,enumerable:!0}}),t},[e])}export{M as AbortError,P as Action,re as Boundary,m as Distribution,h as Lifecycle,k as Op,k as Operation,E as Reason,Me as Resource,H as State,C as TimeoutError,le as With,z as annotate,ge as useActions,te as useMode,Ce as useResource,Pe as utils,ce as withScope};
1
+ import{G as e,A as t}from"@mobily/ts-belt";import{immerable as n,enablePatches as r,Immer as o,produce as s}from"immer";import{jsx as c}from"react/jsx-runtime";import*as a from"react";const i=(e="")=>`march-hare.action/${e}`,u=(e="")=>`march-hare.action/broadcast/${e}`,l=(e="")=>`march-hare.action/multicast/${e}`,f=(e="")=>`march-hare.action.lifecycle/${e}`;class d{static Payload=/* @__PURE__ */Symbol("march-hare.brand/Payload");static Broadcast=/* @__PURE__ */Symbol("march-hare.brand/Broadcast");static Multicast=/* @__PURE__ */Symbol("march-hare.brand/Multicast");static Action=/* @__PURE__ */Symbol("march-hare.brand/Action");static Channel=/* @__PURE__ */Symbol("march-hare.brand/Channel");static Name=/* @__PURE__ */Symbol("march-hare.brand/Name")}function p(e){const t=/* @__PURE__ */Symbol(`march-hare.action.lifecycle/${e}`),n=function(n){return{[d.Action]:t,[d.Payload]:void 0,[d.Channel]:n,[d.Name]:e,channel:n}};return Object.defineProperty(n,d.Action,{value:t,enumerable:!1}),Object.defineProperty(n,d.Payload,{value:void 0,enumerable:!1}),Object.defineProperty(n,d.Name,{value:e,enumerable:!1}),n}const h=Symbol(u("Fault"));class m{static Mount(){return p("Mount")}static Unmount(){return p("Unmount")}static Error(){return p("Error")}static Update(){return p("Update")}static Fault=(()=>{const e={};return Object.defineProperty(e,d.Action,{value:h,enumerable:!1}),Object.defineProperty(e,d.Payload,{value:void 0,enumerable:!1}),Object.defineProperty(e,d.Broadcast,{value:!0,enumerable:!1}),Object.defineProperty(e,d.Name,{value:"Fault",enumerable:!1}),e})()}var y=/* @__PURE__ */(e=>(e.Unicast="unicast",e.Broadcast="broadcast",e.Multicast="multicast",e))(y||{}),b=/* @__PURE__ */(e=>(e.Mounting="mounting",e.Mounted="mounted",e.Unmounting="unmounting",e.Unmounted="unmounted",e))(b||{});const v=e=>"symbol"==typeof e;function g(t){return e.isString(t)||v(t)?t:(e.isObject(t)||e.isFunction(t))&&d.Action in t?t[d.Action]:t}function w(t){if(e.isString(t))return t.startsWith(u());if(v(t))return t.description?.startsWith(u())??!1;if(e.isObject(t)||e.isFunction(t)){if(d.Broadcast in t&&t[d.Broadcast])return!0;if(d.Action in t){const e=t[d.Action];return e.description?.startsWith(u())??!1}}return!1}function O(t){const n=g(t),r=e.isString(n)?n:n.description??"";return r.startsWith(i())&&r.slice(r.lastIndexOf("/")+1)||"unknown"}function S(t){return e.isObject(t)&&d.Channel in t&&"channel"in t}function P(e){const t=g(e),n=v(t)?t.description??"":t;return n.startsWith(f())&&n.slice(f().length)||null}function j(t){if(e.isString(t))return t.startsWith(l());if(v(t))return t.description?.startsWith(l())??!1;if(e.isObject(t)||e.isFunction(t)){if(d.Multicast in t&&t[d.Multicast])return!0;if(d.Action in t){const e=t[d.Action];return e.description?.startsWith(l())??!1}}return!1}const E=(e,t=y.Unicast)=>{const n=t===y.Broadcast?Symbol(u(e)):t===y.Multicast?Symbol(l(e)):Symbol(i(e)),r=function(t){return{[d.Action]:n,[d.Payload]:void 0,[d.Channel]:t,[d.Name]:e,channel:t}};return Object.defineProperty(r,d.Action,{value:n,enumerable:!1}),Object.defineProperty(r,d.Payload,{value:void 0,enumerable:!1}),Object.defineProperty(r,d.Name,{value:e,enumerable:!1}),t===y.Broadcast&&Object.defineProperty(r,d.Broadcast,{value:!0,enumerable:!1}),t===y.Multicast&&Object.defineProperty(r,d.Multicast,{value:!0,enumerable:!1}),r};var x=/* @__PURE__ */(e=>(e[e.Timedout=0]="Timedout",e[e.Supplanted=1]="Supplanted",e[e.Errored=2]="Errored",e))(x||{});class M extends Error{name="AbortError";constructor(e="Aborted"){super(e)}}class C extends Error{name="TimeoutError";constructor(e="Timeout"){super(e)}}let k=(e=21)=>{let t="",n=crypto.getRandomValues(new Uint8Array(e|=0));for(;e--;)t+="useandom-26T198340PX75pxJACKVERYMINDBUSHWOLF_GQZbfghjklqvwyzrict"[63&n[e]];return t};var N=/* @__PURE__ */(e=>(e[e.Add=1]="Add",e[e.Remove=2]="Remove",e[e.Update=4]="Update",e[e.Move=8]="Move",e[e.Replace=16]="Replace",e[e.Sort=32]="Sort",e[e.Create=64]="Create",e[e.Fetch=128]="Fetch",e[e.Clone=256]="Clone",e[e.Archive=512]="Archive",e[e.Restore=1024]="Restore",e[e.Merge=2048]="Merge",e[e.Reorder=4096]="Reorder",e[e.Sync=8192]="Sync",e[e.Publish=16384]="Publish",e[e.Link=32768]="Link",e[e.Unlink=65536]="Unlink",e[e.Lock=131072]="Lock",e[e.Unlock=262144]="Unlock",e[e.Import=524288]="Import",e[e.Export=1048576]="Export",e[e.Transfer=2097152]="Transfer",e))(N||{}),A=/* @__PURE__ */(e=>(e[e.Produce=0]="Produce",e[e.Hydrate=1]="Hydrate",e))(A||{}),_=/* @__PURE__ */(e=>(e.Property="property",e.Process="process",e.Value="value",e.Operation="operation",e))(_||{});class R{[n]=!0;static keys=new Set(Object.values(_));property=null;process=null;value;operation;constructor(e,t){this.value=e,this.operation=t}assign(e,t){const n=new R(this.value,this.operation);return n.property=e,n.process=t,n}}class U{static immer=(()=>{r();const e=new o;return e.setAutoFreeze(!1),e})();static tag="κ";static id=k}function L(e,t){const n="string"==typeof t?""===t?[]:t.split("."):t;let r=e;for(const o of n){if(null==r)return;r=r[o]}return r}function T(t){if(e.isNullable(t)||W(t))return t;if(e.isArray(t))return t.map(e=>T(e));if(e.isObject(t)&&F(t)){const e=Object.entries(t).map(([e,t])=>[e,T(t)]);return{...Object.fromEntries(e),[U.tag]:t[U.tag]??U.id()}}return t}function B(e){if(Array.isArray(e))return e.filter(e=>U.tag in e).map(e=>e[U.tag]??"").join(",");const t=e[U.tag];if(t)return t;try{return JSON.stringify(e)}catch{return`[unserializable:${typeof e}]`}}function F(e){const t=Object.getPrototypeOf(e);return t===Object.prototype||null===t}function W(t){return e.isNullable(t)||e.isString(t)||e.isNumber(t)||e.isBoolean(t)||"symbol"==typeof t||"bigint"==typeof t}function $(t,n,r,o,s,c){return function a(i,u=n.path){if(i instanceof R){const n=L(r,u.join("."));if(Object.entries(i).filter(([e,t])=>!R.keys.has(e)&&t instanceof R).forEach(([e,t])=>a(t,u.concat(e))),W(i.value)){if(t===A.Hydrate)return i.value;const a=u.slice(0,-1),l=a.length>0?L(r,a.join(".")):r;return e.isNullable(l)||D(l,i,u.at(-1),o,s,c),n??i.value}if(t===A.Hydrate){const e=T(a(i.value,u));return D(e,i,null,o,s,c),e}const l=n??T(i.value);return D(l,i,null,o,s,c),e.isNullable(n)?l:(a(i.value,u),n)}if(e.isArray(i))return i.map((e,t)=>a(e,u.concat(t)));if(e.isObject(i)&&!F(i))return i;if(e.isObject(i)){const e=Object.entries(i).map(([e,t])=>[e,a(t,u.concat(e))]),n=Object.fromEntries(e);if(t===A.Hydrate){const e=T(n);return Object.entries(i).forEach(([t,n])=>{n instanceof R&&W(n.value)&&D(e,n,t,o,s,c)}),e}return n}return i}(n.value)}function D(e,t,n,r,o,s){const c=s(e),a=o.get(c)??[];o.set(c,[t.assign(n,r),...a])}class H{#e={};#t;#n=/* @__PURE__ */new Map;#r=/* @__PURE__ */new Set;#o=!1;constructor(e=B){this.#t=e}static pk(){return k()}static"κ"=H.pk;annotate(e,t){return new R(t,e)}"δ"=this.annotate;get model(){return this.#e}get inspect(){return function(n,r,o,s,c){function a(s){const c=s.at(-1),a=L(n(),s),i=s.slice(0,-1),u=t.isNotEmpty(i)?L(n(),i):n();return[...e.isObject(a)||e.isArray(a)?r.get(o(a))?.filter(t=>e.isNullable(t.property))??[]:[],...e.isObject(u)?r.get(o(u))?.filter(e=>e.property===c)??[]:[]]}return function e(r){return new Proxy(()=>{},{get:(o,i)=>"pending"===i?()=>!t.isEmpty(a(r)):"remaining"===i?()=>t.length(a(r)):"box"===i?()=>({value:L(n(),r),inspect:e(r)}):"is"===i?e=>a(r).some(t=>0!==(t.operation&e)):"draft"===i?()=>t.head(a(r))?.value??L(n(),r):"settled"===i?()=>new Promise(e=>{if(t.isEmpty(a(r)))return e(L(n(),r));const o=()=>{t.isEmpty(a(r))&&(c(o),e(L(n(),r)))};s(o)}):e([...r,String(i)])})}([])}(()=>this.#e,this.#n,this.#t,e=>this.#r.add(e),e=>this.#r.delete(e))}hydrate(e){return this.#o=!0,this.#s(A.Hydrate,()=>e)}produce(e){if(!this.#o)throw new Error("State must be hydrated using hydrate() before calling produce()");return this.#s(A.Produce,e)}#s(e,t){const n=/* @__PURE__ */Symbol("process"),[,r]=U.immer.produceWithPatches(this.#e,t);return this.#e=r.reduce((t,r)=>U.immer.applyPatches(t,[{...r,value:$(e,r,t,n,this.#n,this.#t)}]),this.#e),this.#e=T(this.#e),this.#c(),n}prune(e){this.#n.forEach((n,r)=>{const o=n.filter(t=>t.process!==e);t.isEmpty(o)?this.#n.delete(r):this.#n.set(r,o)}),this.#c()}#c(){this.#r.forEach(e=>e())}observe(e){const t=()=>e(this.#e);return this.#r.add(t),()=>this.#r.delete(t)}}const I=new H;function z(e,t=N.Update){return I.annotate(t,e)}function J(e){return e&&e.__esModule&&Object.prototype.hasOwnProperty.call(e,"default")?e.default:e}var q,G={exports:{}};const K=/* @__PURE__ */J((q||(q=1,function(e){var t=Object.prototype.hasOwnProperty,n="~";function r(){}function o(e,t,n){this.fn=e,this.context=t,this.once=n||!1}function s(e,t,r,s,c){if("function"!=typeof r)throw new TypeError("The listener must be a function");var a=new o(r,s||e,c),i=n?n+t:t;return e._events[i]?e._events[i].fn?e._events[i]=[e._events[i],a]:e._events[i].push(a):(e._events[i]=a,e._eventsCount++),e}function c(e,t){0===--e._eventsCount?e._events=new r:delete e._events[t]}function a(){this._events=new r,this._eventsCount=0}Object.create&&(r.prototype=/* @__PURE__ */Object.create(null),(new r).__proto__||(n=!1)),a.prototype.eventNames=function(){var e,r,o=[];if(0===this._eventsCount)return o;for(r in e=this._events)t.call(e,r)&&o.push(n?r.slice(1):r);return Object.getOwnPropertySymbols?o.concat(Object.getOwnPropertySymbols(e)):o},a.prototype.listeners=function(e){var t=this._events[n?n+e:e];if(!t)return[];if(t.fn)return[t.fn];for(var r=0,o=t.length,s=new Array(o);r<o;r++)s[r]=t[r].fn;return s},a.prototype.listenerCount=function(e){var t=this._events[n?n+e:e];return t?t.fn?1:t.length:0},a.prototype.emit=function(e,t,r,o,s,c){var a=n?n+e:e;if(!this._events[a])return!1;var i,u,l=this._events[a],f=arguments.length;if(l.fn){switch(l.once&&this.removeListener(e,l.fn,void 0,!0),f){case 1:return l.fn.call(l.context),!0;case 2:return l.fn.call(l.context,t),!0;case 3:return l.fn.call(l.context,t,r),!0;case 4:return l.fn.call(l.context,t,r,o),!0;case 5:return l.fn.call(l.context,t,r,o,s),!0;case 6:return l.fn.call(l.context,t,r,o,s,c),!0}for(u=1,i=new Array(f-1);u<f;u++)i[u-1]=arguments[u];l.fn.apply(l.context,i)}else{var d,p=l.length;for(u=0;u<p;u++)switch(l[u].once&&this.removeListener(e,l[u].fn,void 0,!0),f){case 1:l[u].fn.call(l[u].context);break;case 2:l[u].fn.call(l[u].context,t);break;case 3:l[u].fn.call(l[u].context,t,r);break;case 4:l[u].fn.call(l[u].context,t,r,o);break;default:if(!i)for(d=1,i=new Array(f-1);d<f;d++)i[d-1]=arguments[d];l[u].fn.apply(l[u].context,i)}}return!0},a.prototype.on=function(e,t,n){return s(this,e,t,n,!1)},a.prototype.once=function(e,t,n){return s(this,e,t,n,!0)},a.prototype.removeListener=function(e,t,r,o){var s=n?n+e:e;if(!this._events[s])return this;if(!t)return c(this,s),this;var a=this._events[s];if(a.fn)a.fn!==t||o&&!a.once||r&&a.context!==r||c(this,s);else{for(var i=0,u=[],l=a.length;i<l;i++)(a[i].fn!==t||o&&!a[i].once||r&&a[i].context!==r)&&u.push(a[i]);u.length?this._events[s]=1===u.length?u[0]:u:c(this,s)}return this},a.prototype.removeAllListeners=function(e){var t;return e?this._events[t=n?n+e:e]&&c(this,t):(this._events=new r,this._eventsCount=0),this},a.prototype.off=a.prototype.removeListener,a.prototype.addListener=a.prototype.on,a.prefixed=n,a.EventEmitter=a,e.exports=a}(G)),G.exports));class V extends K{cache=/* @__PURE__ */new Map;emit(e,...t){return this.cache.set(e,t[0]),super.emit(e,...t)}setCache(e,t){this.cache.set(e,t)}getCached(e){return this.cache.get(e)}fire(e,...t){return super.emit(e,...t)}}const Q=a.createContext(new V);function X(){return a.useContext(Q)}function Y({children:e}){const t=a.useMemo(()=>new V,[]);/* @__PURE__ */
2
+ return c(Q.Provider,{value:t,children:e})}const Z=a.createContext(/* @__PURE__ */new Set);function ee({children:e}){const t=a.useMemo(()=>/* @__PURE__ */new Set,[]);/* @__PURE__ */
3
+ return c(Z.Provider,{value:t,children:e})}const te=a.createContext({current:{}});function ne(){const e=a.useContext(te);return a.useMemo(()=>new Proxy({},{get:(t,n)=>Reflect.get(e.current,n),has:(t,n)=>n in e.current,ownKeys:()=>Reflect.ownKeys(e.current),getOwnPropertyDescriptor(t,n){const r=Object.getOwnPropertyDescriptor(e.current,n);if(void 0!==r)return{...r,configurable:!0}},set(){throw new TypeError("Store is read-only outside `context.actions.produce`. Mutate via produce(({ store }) => { store.x = ... }) instead.")}}),[e])}function re({initial:e,children:t}){const n=a.useRef(e);/* @__PURE__ */
4
+ return c(te.Provider,{value:n,children:t})}function oe({store:e,children:t}){/* @__PURE__ */
5
+ return c(Y,{children:/* @__PURE__ */c(re,{initial:e??{},children:/* @__PURE__ */c(ee,{children:t})})})}const se=a.createContext(null);function ce(){return a.useContext(se)}function ae(e,t){return e?.get(t)??null}function ie(e,t){const n=`Scoped${t.displayName||t.name||"Component"}`,r=g(e);return{[n](e){const n=ce(),o=a.useMemo(()=>({action:r,emitter:new V}),[]),s=a.useMemo(()=>{const e=new Map(n??[]);return e.set(r,o),e},[n,o]);/* @__PURE__ */
6
+ return c(se.Provider,{value:s,children:/* @__PURE__ */c(t,{...e})})}}[n]}const ue=Symbol(((e="")=>`march-hare/replay${e}`)());function le(e,t,...n){e instanceof V&&e.setCache(t,n[0]);const r=e.listeners(t);return 0===r.length?Promise.resolve():Promise.all(r.map(e=>Promise.resolve(e(...n)))).then(()=>{})}const fe={Update:e=>(t,n)=>{t.actions.produce(t=>{t.model[e]=n})},Invert:e=>t=>{t.actions.produce(t=>{t.model[e]=!t.model[e]})}};function de(e,t){for(const n of e.keys())if(P(n)===t)return n;return null}const pe=/* @__PURE__ */Symbol("march-hare.unset");function he(){const[,e]=a.useReducer(e=>e+1,0);return e}function me(){return{data:pe,at:null,else:e=>e}}function ye(e,t){return{data:e,at:t,else:t=>e}}function be(e){if(e instanceof Error){if("TimeoutError"===e.name)return x.Timedout;if("AbortError"===e.name)return x.Supplanted}return x.Errored}function ve(e){const t=/* @__PURE__ */new Map,n=e??{get:e=>t.get(e)??null,set:(e,n)=>{t.set(e,n)},remove:e=>{t.delete(e)},clear:()=>{t.clear()}};return{get(e){try{const t=n.get(e);if(null===t)return me();const r=JSON.parse(t);return ye(r.data,Temporal.Instant.from(r.at))}catch{return me()}},set(e,t){if(t.data===pe||null===t.at)return!1;try{return n.set(e,JSON.stringify({data:t.data,at:t.at.toString()})),!0}catch{return!1}},remove(e){n.remove(e)},clear(){n.clear()}}}function ge(e,t){return new Promise((n,r)=>{if(t?.aborted)return void r(new M);const o=setTimeout(n,e);t?.addEventListener("abort",()=>{clearTimeout(o),r(new M)},{once:!0})})}async function we(e,t,n){if(t?.aborted)throw new M;for(;;){if(await n())return;await ge(e,t)}}function Oe(e){return e?Boolean(e&&"symbol"!=typeof e):/* @__PURE__ */Symbol(`pk.${Date.now()}.${crypto.randomUUID()}`)}const Se=/* @__PURE__ */Object.freeze(/* @__PURE__ */Object.defineProperty({__proto__:null,pk:Oe,poll:we,sleep:ge,unset:pe,"ζ":ge,"κ":Oe,"π":we},Symbol.toStringTag,{value:"Module"})),Pe=/* @__PURE__ */new WeakMap;function je(e){return JSON.stringify(e)}let Ee=null;function xe(){if(null===Ee)throw new Error("context.actions.resource(...) and context.actions.resource.set(...) must be called with a fresh resource invocation, e.g. context.actions.resource(cat({ id: 5 })).");const e=Ee;return Ee=null,e}function Me(e,t){const n=t??function(e){let t=Pe.get(e);return void 0===t&&(t=ve(),Pe.set(e,t)),t}(e),r=e=>{const t=n.get(je(e));return t.data===pe||null===t.at?{data:pe,at:null}:{data:t.data,at:t.at}},o=(t,r,o)=>e({store:t,controller:r,params:o}).then(e=>(n.set(je(o),ye(e,Temporal.Now.instant())),e)),s=(e,t,r)=>{n.set(je(e),ye(t,r))};return function(e){const t=e??{};Ee={run:o,read:r,seed:s,params:t},queueMicrotask(()=>{null!==Ee&&Ee.params===t&&(Ee=null)});const{data:n}=r(t);return n===pe?null:n}}const Ce=a.createContext(/* @__PURE__ */new Map);function ke({action:t,renderer:n}){const r=X(),o=a.useContext(Ce),s=he(),c=a.useMemo(()=>{const e=o.get(t);if(e)return e;const n={state:new H,listeners:/* @__PURE__ */new Set};return o.set(t,n),n},[t,o]);a.useLayoutEffect(()=>{function e(e){c.state.hydrate({value:e}),c.listeners.forEach(e=>e())}return c.listeners.add(s),r.on(t,e),()=>{c.listeners.delete(s),r.off(t,e)}},[t,r,c]);const i=c.state.model?.value;return e.isNullable(i)?null:n(i,c.state.inspect.value)}function Ne(...n){const r=e.isUndefined(n[0])||e.isFunction(n[0])?{}:n[0],o=e.isFunction(n[0])?n[0]:n[1]??(()=>({})),c=X(),i=ce(),u=a.useContext(Z),l=ne(),f=a.useContext(te),d=he(),p=a.useRef(!1),m=a.useRef(null),y=a.useRef(new H);p.current||(p.current=!0,m.current=y.current.hydrate(r));const[v,P]=a.useState(()=>y.current.model),E=function(e){const t=a.useRef(e);return a.useLayoutEffect(()=>{t.current=e},[e]),a.useMemo(()=>{return n=t,Object.keys(e).reduce((e,t)=>(Object.defineProperty(e,t,{get:()=>n.current[t],enumerable:!0}),e),{});var n},[e])}(o()),x=a.useMemo(()=>new K,[]),M=a.useRef({handlers:/* @__PURE__ */new Map});M.current.handlers=/* @__PURE__ */new Map;const C=function(){const e=a.useRef(/* @__PURE__ */new Set),t=a.useRef(/* @__PURE__ */new Set);return a.useMemo(()=>({broadcast:e.current,multicast:t.current}),[])}(),k=a.useRef(b.Mounting),A=a.useRef(/* @__PURE__ */new Set),_=a.useRef(0),R=a.useCallback((e,t,n)=>{const r=new AbortController,o={controller:r,action:e,payload:t};return u.add(o),A.current.add(o),{model:y.current.model,get phase(){return k.current},task:o,data:E,tasks:u,store:l,actions:{produce(e){if(r.signal.aborted)return;const t=y.current.produce(t=>{f.current=s(f.current,n=>{e({model:t,inspect:y.current.inspect,store:n})})});P(y.current.model),n.processes.add(t),m.current&&(n.processes.add(m.current),m.current=null)},dispatch(e,t){if(r.signal.aborted)return Promise.resolve();const n=g(e),o=S(e)?e.channel:void 0;if(j(e)){const e=ae(i,n);return e?le(e.emitter,n,t,o):Promise.resolve()}return le(w(e)?c:x,n,t,o)},annotate:(e,t=N.Update)=>y.current.annotate(t,e),resource:Object.assign(function(e){const t=xe(),n=()=>t.run(f.current,r,t.params);return{then:(e,t)=>n().then(e,t),exceeds:e=>{const{data:r,at:o}=t.read(t.params);if(r!==pe&&null!==o){const t=Temporal.Now.instant().since(o),n=Temporal.Duration.from(e);if(Temporal.Duration.compare(t,n)<=0)return Promise.resolve(r)}return n()}}},{set:(e,t)=>{const n=xe();n.seed(n.params,t,Temporal.Now.instant())}}),async resolution(e){if(r.signal.aborted)return null;const t=g(e),n=j(e)?ae(i,t)?.emitter??null:c;if(!n)return null;if(void 0===n.getCached(t))return null;const o=O(e),s="unknown"!==o?o[0].toLowerCase()+o.slice(1):null;if(s){const e=y.current.inspect[s];e?.pending?.()&&await new Promise((t,n)=>{if(r.signal.aborted)return void n(r.signal.reason);const o=()=>n(r.signal.reason);r.signal.addEventListener("abort",o,{once:!0}),e.settled().then(()=>{r.signal.removeEventListener("abort",o),t()})})}return n.getCached(t)??null},peek(e){if(r.signal.aborted)return null;const t=g(e),n=j(e)?ae(i,t)?.emitter??null:c;return n?n.getCached(t)??null:null}}}},[v]);a.useLayoutEffect(()=>{function t(t,n,r){return function(o,s){const a=r();if(s===ue&&e.isNotNullable(a))return;if(e.isNotNullable(s)&&s!==ue&&e.isNotNullable(a)&&!function(e,t){for(const n of Object.keys(e))if(t[n]!==e[n])return!1;return!0}(s,a))return;const i={processes:/* @__PURE__ */new Set},l=Promise.withResolvers(),f=R(t,o,i);function p(e){const n=de(M.current.handlers,"Error"),r=null!==n,o={reason:be(e),error:(s=e,s instanceof Error?s:new Error(String(s))),action:O(t),handled:r,tasks:u};var s;c.fire(h,o),r&&n&&x.emit(n,o)}function m(){for(const e of u)if(e===f.task){u.delete(e),A.current.delete(e);break}i.processes.forEach(e=>y.current.prune(e)),i.processes.size>0&&d(),l.resolve()}let b;try{b=n(f,o)}catch(v){return p(v),void m()}if(!function(e){if(!e||"object"!=typeof e)return!1;const t=Object.prototype.toString.call(e);return"[object Generator]"===t||"[object AsyncGenerator]"===t}(b))return Promise.resolve(b).catch(p).finally(m),l.promise;(async()=>{for await(const e of b);})().catch(p).finally(m)}}_.current++;const n=/* @__PURE__ */new Set;return M.current.handlers.forEach((e,r)=>{for(const{getChannel:o,handler:s}of e){const e=t(r,s,o);if(j(r)){if(i)for(const t of i.values()){const o=t.emitter;o.on(r,e),n.add(()=>o.off(r,e))}x.on(r,e),C.multicast.add(r),n.add(()=>x.off(r,e))}else w(r)?(c.on(r,e),x.on(r,e),C.broadcast.add(r),n.add(()=>{c.off(r,e),x.off(r,e)})):(x.on(r,e),n.add(()=>x.off(r,e)))}}),()=>{const e=++_.current,t=new Set(n);queueMicrotask(()=>{if(_.current!==e){for(const e of t)e();return}for(const e of A.current)e.controller.abort(),u.delete(e);A.current.clear(),k.current=b.Unmounting;const n=de(M.current.handlers,"Unmount");n&&x.emit(n),k.current=b.Unmounted;for(const e of t)e()})}},[x]),function({unicast:n,broadcast:r,dispatchers:o,scope:s,phase:c,data:i,handlers:u}){const l=a.useRef(null);a.useLayoutEffect(()=>{if(c.current===b.Mounted)return;c.current=b.Mounting;const t=de(u,"Mount");t&&n.emit(t),o.broadcast.forEach(t=>{const o=r.getCached(t);e.isNullable(o)||n.emit(t,o,ue)}),s&&o.multicast.forEach(t=>{for(const r of s.values()){const o=r.emitter.getCached(t);e.isNullable(o)||n.emit(t,o,ue)}}),c.current=b.Mounted},[]),a.useLayoutEffect(()=>{if(e.isNotNullable(l.current)){const e=function(e,t){return Object.keys(t).reduce((n,r)=>e[r]!==t[r]?{...n,[r]:t[r]}:n,{})}(l.current,i);if(t.isNotEmpty(Object.keys(e))){const t=de(u,"Update");t&&n.emit(t,e)}}l.current=i},[i,n])}({unicast:x,broadcast:c,dispatchers:C,scope:i,phase:k,data:o(),handlers:M.current.handlers});const U=a.useMemo(()=>[v,{dispatch(e,t){const n=g(e),r=S(e)?e.channel:void 0;if(j(e)){const e=ae(i,n);return e?le(e.emitter,n,t,r):Promise.resolve()}return le(w(e)?c:x,n,t,r)},get inspect(){return y.current.inspect},stream:(e,t)=>a.createElement(ke,{action:g(e),renderer:t})}],[v,x]);return U.useAction=(e,t)=>{!function(e,t,n){const r=a.useRef(n);a.useLayoutEffect(()=>{r.current=n});const o=a.useRef(t);a.useLayoutEffect(()=>{o.current=t});const s=a.useCallback((e,t)=>r.current(e,t),[]),c=a.useCallback(()=>S(o.current)?o.current.channel:void 0,[]),i=g(t),u=e.current.handlers.get(i)??/* @__PURE__ */new Set;0===u.size&&e.current.handlers.set(i,u),u.add({getChannel:c,handler:s})}(M,e,t)},U}export{M as AbortError,E as Action,oe as Boundary,ve as Cache,y as Distribution,m as Lifecycle,N as Op,N as Operation,x as Reason,Me as Resource,H as State,C as TimeoutError,fe as With,z as annotate,Ne as useActions,ne as useStore,Se as utils,ie as withScope};
@@ -1 +1 @@
1
- var global,factory;global=this,factory=function(e,t,n,r,o){"use strict";function s(e){const t=Object.create(null,{[Symbol.toStringTag]:{value:"Module"}});if(e)for(const n in e)if("default"!==n){const r=Object.getOwnPropertyDescriptor(e,n);Object.defineProperty(t,n,r.get?r:{enumerable:!0,get:()=>e[n]})}return t.default=e,Object.freeze(t)}const a=s(o),c=(e="")=>`march-hare.action/${e}`,i=(e="")=>`march-hare.action/broadcast/${e}`,u=(e="")=>`march-hare.action/multicast/${e}`,l=(e="")=>`march-hare.action.lifecycle/${e}`;class f{static Payload=Symbol("march-hare.brand/Payload");static Broadcast=Symbol("march-hare.brand/Broadcast");static Multicast=Symbol("march-hare.brand/Multicast");static Action=Symbol("march-hare.brand/Action");static Channel=Symbol("march-hare.brand/Channel")}function d(e){const t=Symbol(`march-hare.action.lifecycle/${e}`),n=function(e){return{[f.Action]:t,[f.Payload]:void 0,[f.Channel]:e,channel:e}};return Object.defineProperty(n,f.Action,{value:t,enumerable:!1}),Object.defineProperty(n,f.Payload,{value:void 0,enumerable:!1}),n}const p=Symbol(i("Fault"));class h{static Mount(){return d("Mount")}static Unmount(){return d("Unmount")}static Error(){return d("Error")}static Update(){return d("Update")}static Fault=(()=>{const e={};return Object.defineProperty(e,f.Action,{value:p,enumerable:!1}),Object.defineProperty(e,f.Payload,{value:void 0,enumerable:!1}),Object.defineProperty(e,f.Broadcast,{value:!0,enumerable:!1}),e})()}var m=(e=>(e.Unicast="unicast",e.Broadcast="broadcast",e.Multicast="multicast",e))(m||{}),b=(e=>(e.Mounting="mounting",e.Mounted="mounted",e.Unmounting="unmounting",e.Unmounted="unmounted",e))(b||{});const y=e=>"symbol"==typeof e;function v(e){return t.G.isString(e)||y(e)?e:(t.G.isObject(e)||t.G.isFunction(e))&&f.Action in e?e[f.Action]:e}function g(e){if(t.G.isString(e))return e.startsWith(i());if(y(e))return e.description?.startsWith(i())??!1;if(t.G.isObject(e)||t.G.isFunction(e)){if(f.Broadcast in e&&e[f.Broadcast])return!0;if(f.Action in e){const t=e[f.Action];return t.description?.startsWith(i())??!1}}return!1}function w(e){const n=v(e),r=t.G.isString(n)?n:n.description??"";return r.startsWith(c())&&r.slice(r.lastIndexOf("/")+1)||"unknown"}function j(e){return t.G.isObject(e)&&f.Channel in e&&"channel"in e}function O(e){const t=v(e),n=y(t)?t.description??"":t;return n.startsWith(l())&&n.slice(l().length)||null}function S(e){if(t.G.isString(e))return e.startsWith(u());if(y(e))return e.description?.startsWith(u())??!1;if(t.G.isObject(e)||t.G.isFunction(e)){if(f.Multicast in e&&e[f.Multicast])return!0;if(f.Action in e){const t=e[f.Action];return t.description?.startsWith(u())??!1}}return!1}var P=(e=>(e[e.Timedout=0]="Timedout",e[e.Supplanted=1]="Supplanted",e[e.Errored=2]="Errored",e))(P||{});class x extends Error{name="AbortError";constructor(e="Aborted"){super(e)}}class E extends Error{name="TimeoutError";constructor(e="Timeout"){super(e)}}let M=(e=21)=>{let t="",n=crypto.getRandomValues(new Uint8Array(e|=0));for(;e--;)t+="useandom-26T198340PX75pxJACKVERYMINDBUSHWOLF_GQZbfghjklqvwyzrict"[63&n[e]];return t};var A=(e=>(e[e.Add=1]="Add",e[e.Remove=2]="Remove",e[e.Update=4]="Update",e[e.Move=8]="Move",e[e.Replace=16]="Replace",e[e.Sort=32]="Sort",e[e.Create=64]="Create",e[e.Fetch=128]="Fetch",e[e.Clone=256]="Clone",e[e.Archive=512]="Archive",e[e.Restore=1024]="Restore",e[e.Merge=2048]="Merge",e[e.Reorder=4096]="Reorder",e[e.Sync=8192]="Sync",e[e.Publish=16384]="Publish",e[e.Link=32768]="Link",e[e.Unlink=65536]="Unlink",e[e.Lock=131072]="Lock",e[e.Unlock=262144]="Unlock",e[e.Import=524288]="Import",e[e.Export=1048576]="Export",e[e.Transfer=2097152]="Transfer",e))(A||{}),C=(e=>(e[e.Produce=0]="Produce",e[e.Hydrate=1]="Hydrate",e))(C||{}),G=(e=>(e.Property="property",e.Process="process",e.Value="value",e.Operation="operation",e))(G||{});class k{[n.immerable]=!0;static keys=new Set(Object.values(G));property=null;process=null;value;operation;constructor(e,t){this.value=e,this.operation=t}assign(e,t){const n=new k(this.value,this.operation);return n.property=e,n.process=t,n}}class _{static immer=(()=>{n.enablePatches();const e=new n.Immer;return e.setAutoFreeze(!1),e})();static tag="κ";static id=M}function R(e,t){const n="string"==typeof t?""===t?[]:t.split("."):t;let r=e;for(const o of n){if(null==r)return;r=r[o]}return r}function N(e){if(t.G.isNullable(e)||L(e))return e;if(t.G.isArray(e))return e.map(e=>N(e));if(t.G.isObject(e)&&T(e)){const t=Object.entries(e).map(([e,t])=>[e,N(t)]);return{...Object.fromEntries(t),[_.tag]:e[_.tag]??_.id()}}return e}function U(e){if(Array.isArray(e))return e.filter(e=>_.tag in e).map(e=>e[_.tag]??"").join(",");const t=e[_.tag];if(t)return t;try{return JSON.stringify(e)}catch{return`[unserializable:${typeof e}]`}}function T(e){const t=Object.getPrototypeOf(e);return t===Object.prototype||null===t}function L(e){return t.G.isNullable(e)||t.G.isString(e)||t.G.isNumber(e)||t.G.isBoolean(e)||"symbol"==typeof e||"bigint"==typeof e}function B(e,n,r,o,s,a){return function c(i,u=n.path){if(i instanceof k){const n=R(r,u.join("."));if(Object.entries(i).filter(([e,t])=>!k.keys.has(e)&&t instanceof k).forEach(([e,t])=>c(t,u.concat(e))),L(i.value)){if(e===C.Hydrate)return i.value;const c=u.slice(0,-1),l=c.length>0?R(r,c.join(".")):r;return t.G.isNullable(l)||W(l,i,u.at(-1),o,s,a),n??i.value}if(e===C.Hydrate){const e=N(c(i.value,u));return W(e,i,null,o,s,a),e}const l=n??N(i.value);return W(l,i,null,o,s,a),t.G.isNullable(n)?l:(c(i.value,u),n)}if(t.G.isArray(i))return i.map((e,t)=>c(e,u.concat(t)));if(t.G.isObject(i)&&!T(i))return i;if(t.G.isObject(i)){const t=Object.entries(i).map(([e,t])=>[e,c(t,u.concat(e))]),n=Object.fromEntries(t);if(e===C.Hydrate){const e=N(n);return Object.entries(i).forEach(([t,n])=>{n instanceof k&&L(n.value)&&W(e,n,t,o,s,a)}),e}return n}return i}(n.value)}function W(e,t,n,r,o,s){const a=s(e),c=o.get(a)??[];o.set(a,[t.assign(n,r),...c])}class F{#e={};#t;#n=new Map;#r=new Set;#o=!1;constructor(e=U){this.#t=e}static pk(){return M()}static"κ"=F.pk;annotate(e,t){return new k(t,e)}"δ"=this.annotate;get model(){return this.#e}get inspect(){return function(e,n,r,o,s){function a(o){const s=o.at(-1),a=R(e(),o),c=o.slice(0,-1),i=t.A.isNotEmpty(c)?R(e(),c):e();return[...t.G.isObject(a)||t.G.isArray(a)?n.get(r(a))?.filter(e=>t.G.isNullable(e.property))??[]:[],...t.G.isObject(i)?n.get(r(i))?.filter(e=>e.property===s)??[]:[]]}return function n(r){return new Proxy(()=>{},{get:(c,i)=>"pending"===i?()=>!t.A.isEmpty(a(r)):"remaining"===i?()=>t.A.length(a(r)):"box"===i?()=>({value:R(e(),r),inspect:n(r)}):"is"===i?e=>a(r).some(t=>0!==(t.operation&e)):"draft"===i?()=>t.A.head(a(r))?.value??R(e(),r):"settled"===i?()=>new Promise(n=>{if(t.A.isEmpty(a(r)))return n(R(e(),r));const c=()=>{t.A.isEmpty(a(r))&&(s(c),n(R(e(),r)))};o(c)}):n([...r,String(i)])})}([])}(()=>this.#e,this.#n,this.#t,e=>this.#r.add(e),e=>this.#r.delete(e))}hydrate(e){return this.#o=!0,this.#s(C.Hydrate,()=>e)}produce(e){if(!this.#o)throw new Error("State must be hydrated using hydrate() before calling produce()");return this.#s(C.Produce,e)}#s(e,t){const n=Symbol("process"),[,r]=_.immer.produceWithPatches(this.#e,t);return this.#e=r.reduce((t,r)=>_.immer.applyPatches(t,[{...r,value:B(e,r,t,n,this.#n,this.#t)}]),this.#e),this.#e=N(this.#e),this.#a(),n}prune(e){this.#n.forEach((n,r)=>{const o=n.filter(t=>t.process!==e);t.A.isEmpty(o)?this.#n.delete(r):this.#n.set(r,o)}),this.#a()}#a(){this.#r.forEach(e=>e())}observe(e){const t=()=>e(this.#e);return this.#r.add(t),()=>this.#r.delete(t)}}const $=new F;function I(e){return e&&e.__esModule&&Object.prototype.hasOwnProperty.call(e,"default")?e.default:e}var H,z={exports:{}},D=(H||(H=1,function(e){var t=Object.prototype.hasOwnProperty,n="~";function r(){}function o(e,t,n){this.fn=e,this.context=t,this.once=n||!1}function s(e,t,r,s,a){if("function"!=typeof r)throw new TypeError("The listener must be a function");var c=new o(r,s||e,a),i=n?n+t:t;return e._events[i]?e._events[i].fn?e._events[i]=[e._events[i],c]:e._events[i].push(c):(e._events[i]=c,e._eventsCount++),e}function a(e,t){0===--e._eventsCount?e._events=new r:delete e._events[t]}function c(){this._events=new r,this._eventsCount=0}Object.create&&(r.prototype=Object.create(null),(new r).__proto__||(n=!1)),c.prototype.eventNames=function(){var e,r,o=[];if(0===this._eventsCount)return o;for(r in e=this._events)t.call(e,r)&&o.push(n?r.slice(1):r);return Object.getOwnPropertySymbols?o.concat(Object.getOwnPropertySymbols(e)):o},c.prototype.listeners=function(e){var t=this._events[n?n+e:e];if(!t)return[];if(t.fn)return[t.fn];for(var r=0,o=t.length,s=new Array(o);r<o;r++)s[r]=t[r].fn;return s},c.prototype.listenerCount=function(e){var t=this._events[n?n+e:e];return t?t.fn?1:t.length:0},c.prototype.emit=function(e,t,r,o,s,a){var c=n?n+e:e;if(!this._events[c])return!1;var i,u,l=this._events[c],f=arguments.length;if(l.fn){switch(l.once&&this.removeListener(e,l.fn,void 0,!0),f){case 1:return l.fn.call(l.context),!0;case 2:return l.fn.call(l.context,t),!0;case 3:return l.fn.call(l.context,t,r),!0;case 4:return l.fn.call(l.context,t,r,o),!0;case 5:return l.fn.call(l.context,t,r,o,s),!0;case 6:return l.fn.call(l.context,t,r,o,s,a),!0}for(u=1,i=new Array(f-1);u<f;u++)i[u-1]=arguments[u];l.fn.apply(l.context,i)}else{var d,p=l.length;for(u=0;u<p;u++)switch(l[u].once&&this.removeListener(e,l[u].fn,void 0,!0),f){case 1:l[u].fn.call(l[u].context);break;case 2:l[u].fn.call(l[u].context,t);break;case 3:l[u].fn.call(l[u].context,t,r);break;case 4:l[u].fn.call(l[u].context,t,r,o);break;default:if(!i)for(d=1,i=new Array(f-1);d<f;d++)i[d-1]=arguments[d];l[u].fn.apply(l[u].context,i)}}return!0},c.prototype.on=function(e,t,n){return s(this,e,t,n,!1)},c.prototype.once=function(e,t,n){return s(this,e,t,n,!0)},c.prototype.removeListener=function(e,t,r,o){var s=n?n+e:e;if(!this._events[s])return this;if(!t)return a(this,s),this;var c=this._events[s];if(c.fn)c.fn!==t||o&&!c.once||r&&c.context!==r||a(this,s);else{for(var i=0,u=[],l=c.length;i<l;i++)(c[i].fn!==t||o&&!c[i].once||r&&c[i].context!==r)&&u.push(c[i]);u.length?this._events[s]=1===u.length?u[0]:u:a(this,s)}return this},c.prototype.removeAllListeners=function(e){var t;return e?this._events[t=n?n+e:e]&&a(this,t):(this._events=new r,this._eventsCount=0),this},c.prototype.off=c.prototype.removeListener,c.prototype.addListener=c.prototype.on,c.prefixed=n,c.EventEmitter=c,e.exports=c}(z)),z.exports);const q=I(D);class J extends q{cache=new Map;emit(e,...t){return this.cache.set(e,t[0]),super.emit(e,...t)}setCache(e,t){this.cache.set(e,t)}getCached(e){return this.cache.get(e)}fire(e,...t){return super.emit(e,...t)}}const V=a.createContext(new J);function K(){return a.useContext(V)}function Q({children:e}){const t=a.useMemo(()=>new J,[]);return r.jsx(V.Provider,{value:t,children:e})}const X=a.createContext(new Set);function Y({children:e}){const t=a.useMemo(()=>new Set,[]);return r.jsx(X.Provider,{value:t,children:e})}const Z=a.createContext({current:null});function ee({children:e}){const t=a.useRef(null);return r.jsx(Z.Provider,{value:t,children:e})}const te=a.createContext(null);function ne(){return a.useContext(te)}function re(e,t){return e?.get(t)??null}const oe=Symbol(((e="")=>`march-hare/replay${e}`)());function se(e,t,...n){e instanceof J&&e.setCache(t,n[0]);const r=e.listeners(t);return 0===r.length?Promise.resolve():Promise.all(r.map(e=>Promise.resolve(e(...n)))).then(()=>{})}function ae(e,t){for(const n of e.keys())if(O(n)===t)return n;return null}const ce=Symbol("march-hare.unset");function ie(){const[,e]=a.useReducer(e=>e+1,0);return e}function ue(){return{data:ce,at:null,else:e=>e}}function le(e,t){return{data:e,at:t,else:t=>e}}function fe(e){if(e instanceof Error){if("TimeoutError"===e.name)return P.Timedout;if("AbortError"===e.name)return P.Supplanted}return P.Errored}const de=a.createContext(new Map);function pe({action:e,renderer:n}){const r=K(),o=a.useContext(de),s=ie(),c=a.useMemo(()=>{const t=o.get(e);if(t)return t;const n={state:new F,listeners:new Set};return o.set(e,n),n},[e,o]);a.useLayoutEffect(()=>{function t(e){c.state.hydrate({value:e}),c.listeners.forEach(e=>e())}return c.listeners.add(s),r.on(e,t),()=>{c.listeners.delete(s),r.off(e,t)}},[e,r,c]);const i=c.state.model?.value;return t.G.isNullable(i)?null:n(i,c.state.inspect.value)}function he(e,t){return new Promise((n,r)=>{if(t?.aborted)return void r(new x);const o=setTimeout(n,e);t?.addEventListener("abort",()=>{clearTimeout(o),r(new x)},{once:!0})})}async function me(e,t,n){if(t?.aborted)throw new x;for(;;){if(await n())return;await he(e,t)}}function be(e){return e?Boolean(e&&"symbol"!=typeof e):Symbol(`pk.${Date.now()}.${crypto.randomUUID()}`)}function ye(e){return{get(t){try{const n=e.get(t);if(null===n)return ue();const r=JSON.parse(n);return le(r.data,Temporal.Instant.from(r.at))}catch{return ue()}},set(t,n){if(n.data===ce||null===n.at)return!1;try{return e.set(t,JSON.stringify({data:n.data,at:n.at.toString()})),!0}catch{return!1}},remove(t){e.remove(t)},clear(){e.clear()}}}const ve=Object.freeze(Object.defineProperty({__proto__:null,pk:be,poll:me,sleep:he,store:ye,unset:ce,"ζ":he,"κ":be,"π":me,"σ":ye},Symbol.toStringTag,{value:"Module"})),ge=new WeakMap;e.AbortError=x,e.Action=(e,t=m.Unicast)=>{const n=t===m.Broadcast?Symbol(i(e)):t===m.Multicast?Symbol(u(e)):Symbol(c(e)),r=function(e){return{[f.Action]:n,[f.Payload]:void 0,[f.Channel]:e,channel:e}};return Object.defineProperty(r,f.Action,{value:n,enumerable:!1}),Object.defineProperty(r,f.Payload,{value:void 0,enumerable:!1}),t===m.Broadcast&&Object.defineProperty(r,f.Broadcast,{value:!0,enumerable:!1}),t===m.Multicast&&Object.defineProperty(r,f.Multicast,{value:!0,enumerable:!1}),r},e.Boundary=function({children:e}){return r.jsx(Q,{children:r.jsx(ee,{children:r.jsx(Y,{children:e})})})},e.Distribution=m,e.Lifecycle=h,e.Op=A,e.Operation=A,e.Reason=P,e.Resource=function(e){return{run:(t,n)=>e(t,n).then(t=>(ge.set(e,{data:t,at:Temporal.Now.instant()}),t)),get data(){const t=ge.get(e);return void 0===t?ce:t.data},get at(){return ge.get(e)?.at??null},seed(t,n){ge.set(e,{data:t,at:n})}}},e.State=F,e.TimeoutError=E,e.With={Update:e=>(t,n)=>{t.actions.produce(t=>{t.model[e]=n})},Invert:e=>t=>{t.actions.produce(t=>{t.model[e]=!t.model[e]})}},e.annotate=function(e,t=A.Update){return $.annotate(t,e)},e.useActions=function(...e){const n=t.G.isUndefined(e[0])||t.G.isFunction(e[0])?{}:e[0],r=t.G.isFunction(e[0])?e[0]:e[1]??(()=>({})),o=K(),s=ne(),c=a.useContext(X),i=ie(),u=a.useRef(!1),l=a.useRef(null),f=a.useRef(new F);u.current||(u.current=!0,l.current=f.current.hydrate(n));const[d,h]=a.useState(()=>f.current.model),m=function(e){const t=a.useRef(e);return a.useLayoutEffect(()=>{t.current=e},[e]),a.useMemo(()=>{return n=t,Object.keys(e).reduce((e,t)=>(Object.defineProperty(e,t,{get:()=>n.current[t],enumerable:!0}),e),{});var n},[e])}(r()),y=a.useMemo(()=>new q,[]),O=a.useRef({handlers:new Map});O.current.handlers=new Map;const P=function(){const e=a.useRef(new Set),t=a.useRef(new Set);return a.useMemo(()=>({broadcast:e.current,multicast:t.current}),[])}(),x=a.useRef(b.Mounting),E=a.useRef(new Set),M=a.useRef(0),C=a.useCallback((e,t,n)=>{const r=new AbortController,a={controller:r,action:e,payload:t};return c.add(a),E.current.add(a),{model:f.current.model,get phase(){return x.current},task:a,data:m,tasks:c,actions:{produce(e){if(r.signal.aborted)return;const t=f.current.produce(t=>{e({model:t,inspect:f.current.inspect})});h(f.current.model),n.processes.add(t),l.current&&(n.processes.add(l.current),l.current=null)},dispatch(e,t){if(r.signal.aborted)return Promise.resolve();const n=v(e),a=j(e)?e.channel:void 0;if(S(e)){const e=re(s,n);return e?se(e.emitter,n,t,a):Promise.resolve()}return se(g(e)?o:y,n,t,a)},annotate:(e,t=A.Update)=>f.current.annotate(t,e),async resolution(e){if(r.signal.aborted)return null;const t=v(e),n=S(e)?re(s,t)?.emitter??null:o;if(!n)return null;if(void 0===n.getCached(t))return null;const a=w(e),c="unknown"!==a?a[0].toLowerCase()+a.slice(1):null;if(c){const e=f.current.inspect[c];e?.pending?.()&&await new Promise((t,n)=>{if(r.signal.aborted)return void n(r.signal.reason);const o=()=>n(r.signal.reason);r.signal.addEventListener("abort",o,{once:!0}),e.settled().then(()=>{r.signal.removeEventListener("abort",o),t()})})}return n.getCached(t)??null},peek(e){if(r.signal.aborted)return null;const t=v(e),n=S(e)?re(s,t)?.emitter??null:o;return n?n.getCached(t)??null:null}}}},[d]);a.useLayoutEffect(()=>{function e(e,n,r){return function(s,a){const u=r();if(a===oe&&t.G.isNotNullable(u))return;if(t.G.isNotNullable(a)&&a!==oe&&t.G.isNotNullable(u)&&!function(e,t){for(const n of Object.keys(e))if(t[n]!==e[n])return!1;return!0}(a,u))return;const l={processes:new Set},d=Promise.withResolvers(),h=C(e,s,l);function m(t){const n=ae(O.current.handlers,"Error"),r=null!==n,s={reason:fe(t),error:(a=t,a instanceof Error?a:new Error(String(a))),action:w(e),handled:r,tasks:c};var a;o.fire(p,s),r&&n&&y.emit(n,s)}function b(){for(const e of c)if(e===h.task){c.delete(e),E.current.delete(e);break}l.processes.forEach(e=>f.current.prune(e)),l.processes.size>0&&i(),d.resolve()}let v;try{v=n(h,s)}catch(g){return m(g),void b()}if(!function(e){if(!e||"object"!=typeof e)return!1;const t=Object.prototype.toString.call(e);return"[object Generator]"===t||"[object AsyncGenerator]"===t}(v))return Promise.resolve(v).catch(m).finally(b),d.promise;(async()=>{for await(const e of v);})().catch(m).finally(b)}}M.current++;const n=new Set;return O.current.handlers.forEach((t,r)=>{for(const{getChannel:a,handler:c}of t){const t=e(r,c,a);if(S(r)){if(s)for(const e of s.values()){const o=e.emitter;o.on(r,t),n.add(()=>o.off(r,t))}y.on(r,t),P.multicast.add(r),n.add(()=>y.off(r,t))}else g(r)?(o.on(r,t),y.on(r,t),P.broadcast.add(r),n.add(()=>{o.off(r,t),y.off(r,t)})):(y.on(r,t),n.add(()=>y.off(r,t)))}}),()=>{const e=++M.current,t=new Set(n);queueMicrotask(()=>{if(M.current!==e){for(const e of t)e();return}for(const e of E.current)e.controller.abort(),c.delete(e);E.current.clear(),x.current=b.Unmounting;const n=ae(O.current.handlers,"Unmount");n&&y.emit(n),x.current=b.Unmounted;for(const e of t)e()})}},[y]),function({unicast:e,broadcast:n,dispatchers:r,scope:o,phase:s,data:c,handlers:i}){const u=a.useRef(null);a.useLayoutEffect(()=>{if(s.current===b.Mounted)return;s.current=b.Mounting;const a=ae(i,"Mount");a&&e.emit(a),r.broadcast.forEach(r=>{const o=n.getCached(r);t.G.isNullable(o)||e.emit(r,o,oe)}),o&&r.multicast.forEach(n=>{for(const r of o.values()){const o=r.emitter.getCached(n);t.G.isNullable(o)||e.emit(n,o,oe)}}),s.current=b.Mounted},[]),a.useLayoutEffect(()=>{if(t.G.isNotNullable(u.current)){const n=function(e,t){return Object.keys(t).reduce((n,r)=>e[r]!==t[r]?{...n,[r]:t[r]}:n,{})}(u.current,c);if(t.A.isNotEmpty(Object.keys(n))){const t=ae(i,"Update");t&&e.emit(t,n)}}u.current=c},[c,e])}({unicast:y,broadcast:o,dispatchers:P,scope:s,phase:x,data:r(),handlers:O.current.handlers});const G=a.useMemo(()=>[d,{dispatch(e,t){const n=v(e),r=j(e)?e.channel:void 0;if(S(e)){const e=re(s,n);return e?se(e.emitter,n,t,r):Promise.resolve()}return se(g(e)?o:y,n,t,r)},get inspect(){return f.current.inspect},stream:(e,t)=>a.createElement(pe,{action:v(e),renderer:t})}],[d,y]);return G.useAction=(e,t)=>{!function(e,t,n){const r=a.useRef(n);a.useLayoutEffect(()=>{r.current=n});const o=a.useRef(t);a.useLayoutEffect(()=>{o.current=t});const s=a.useCallback((e,t)=>r.current(e,t),[]),c=a.useCallback(()=>j(o.current)?o.current.channel:void 0,[]),i=v(t),u=e.current.handlers.get(i)??new Set;0===u.size&&e.current.handlers.set(i,u),u.add({getChannel:c,handler:s})}(O,e,t)},G},e.useMode=function(){const e=a.useContext(Z);return a.useMemo(()=>({read:()=>e.current,update(t){e.current=t}}),[e])},e.useResource=function(e){return a.useMemo(()=>{const t=(t,n)=>e.run(t??void 0,n??{});return Object.defineProperties(t,{if:{value:(t,n,r)=>{const o=e.data,s=e.at;if(o!==ce&&null!==s){const e=Temporal.Now.instant().since(s),n=Temporal.Duration.from(t.over);if(Temporal.Duration.compare(e,n)<=0)return Promise.resolve(o)}return e.run(n??void 0,r??{})},enumerable:!0},else:{value:function(n){if(null!==(r=n)&&"object"==typeof r&&"data"in r&&"at"in r&&"else"in r)return e.data===ce&&n.data!==ce&&null!==n.at&&e.seed(n.data,n.at),t;var r;const o=e.data;return o===ce?n:o},enumerable:!0},snapshot:{value:()=>{const t=e.data,n=e.at;return t===ce||null===n?ue():le(t,n)},enumerable:!0},data:{get:()=>e.data,enumerable:!0},at:{get:()=>e.at,enumerable:!0}}),t},[e])},e.utils=ve,e.withScope=function(e,t){const n=`Scoped${t.displayName||t.name||"Component"}`,o=v(e);return{[n](e){const n=ne(),s=a.useMemo(()=>({action:o,emitter:new J}),[]),c=a.useMemo(()=>{const e=new Map(n??[]);return e.set(o,s),e},[n,s]);return r.jsx(te.Provider,{value:c,children:r.jsx(t,{...e})})}}[n]},Object.defineProperty(e,Symbol.toStringTag,{value:"Module"})},"object"==typeof exports&&"undefined"!=typeof module?factory(exports,require("@mobily/ts-belt"),require("immer"),require("react/jsx-runtime"),require("react")):"function"==typeof define&&define.amd?define(["exports","@mobily/ts-belt","immer","react/jsx-runtime","react"],factory):factory((global="undefined"!=typeof globalThis?globalThis:global||self).MarchHare={},global.TsBelt,global.Immer,global.jsxRuntime,global.React);
1
+ var global,factory;global=this,factory=function(e,t,n,r,o){"use strict";function s(e){const t=Object.create(null,{[Symbol.toStringTag]:{value:"Module"}});if(e)for(const n in e)if("default"!==n){const r=Object.getOwnPropertyDescriptor(e,n);Object.defineProperty(t,n,r.get?r:{enumerable:!0,get:()=>e[n]})}return t.default=e,Object.freeze(t)}const c=s(o),a=(e="")=>`march-hare.action/${e}`,i=(e="")=>`march-hare.action/broadcast/${e}`,u=(e="")=>`march-hare.action/multicast/${e}`,l=(e="")=>`march-hare.action.lifecycle/${e}`;class f{static Payload=Symbol("march-hare.brand/Payload");static Broadcast=Symbol("march-hare.brand/Broadcast");static Multicast=Symbol("march-hare.brand/Multicast");static Action=Symbol("march-hare.brand/Action");static Channel=Symbol("march-hare.brand/Channel");static Name=Symbol("march-hare.brand/Name")}function d(e){const t=Symbol(`march-hare.action.lifecycle/${e}`),n=function(n){return{[f.Action]:t,[f.Payload]:void 0,[f.Channel]:n,[f.Name]:e,channel:n}};return Object.defineProperty(n,f.Action,{value:t,enumerable:!1}),Object.defineProperty(n,f.Payload,{value:void 0,enumerable:!1}),Object.defineProperty(n,f.Name,{value:e,enumerable:!1}),n}const p=Symbol(i("Fault"));class h{static Mount(){return d("Mount")}static Unmount(){return d("Unmount")}static Error(){return d("Error")}static Update(){return d("Update")}static Fault=(()=>{const e={};return Object.defineProperty(e,f.Action,{value:p,enumerable:!1}),Object.defineProperty(e,f.Payload,{value:void 0,enumerable:!1}),Object.defineProperty(e,f.Broadcast,{value:!0,enumerable:!1}),Object.defineProperty(e,f.Name,{value:"Fault",enumerable:!1}),e})()}var m=(e=>(e.Unicast="unicast",e.Broadcast="broadcast",e.Multicast="multicast",e))(m||{}),b=(e=>(e.Mounting="mounting",e.Mounted="mounted",e.Unmounting="unmounting",e.Unmounted="unmounted",e))(b||{});const y=e=>"symbol"==typeof e;function v(e){return t.G.isString(e)||y(e)?e:(t.G.isObject(e)||t.G.isFunction(e))&&f.Action in e?e[f.Action]:e}function g(e){if(t.G.isString(e))return e.startsWith(i());if(y(e))return e.description?.startsWith(i())??!1;if(t.G.isObject(e)||t.G.isFunction(e)){if(f.Broadcast in e&&e[f.Broadcast])return!0;if(f.Action in e){const t=e[f.Action];return t.description?.startsWith(i())??!1}}return!1}function w(e){const n=v(e),r=t.G.isString(n)?n:n.description??"";return r.startsWith(a())&&r.slice(r.lastIndexOf("/")+1)||"unknown"}function j(e){return t.G.isObject(e)&&f.Channel in e&&"channel"in e}function O(e){const t=v(e),n=y(t)?t.description??"":t;return n.startsWith(l())&&n.slice(l().length)||null}function S(e){if(t.G.isString(e))return e.startsWith(u());if(y(e))return e.description?.startsWith(u())??!1;if(t.G.isObject(e)||t.G.isFunction(e)){if(f.Multicast in e&&e[f.Multicast])return!0;if(f.Action in e){const t=e[f.Action];return t.description?.startsWith(u())??!1}}return!1}var x=(e=>(e[e.Timedout=0]="Timedout",e[e.Supplanted=1]="Supplanted",e[e.Errored=2]="Errored",e))(x||{});class P extends Error{name="AbortError";constructor(e="Aborted"){super(e)}}class E extends Error{name="TimeoutError";constructor(e="Timeout"){super(e)}}let M=(e=21)=>{let t="",n=crypto.getRandomValues(new Uint8Array(e|=0));for(;e--;)t+="useandom-26T198340PX75pxJACKVERYMINDBUSHWOLF_GQZbfghjklqvwyzrict"[63&n[e]];return t};var A=(e=>(e[e.Add=1]="Add",e[e.Remove=2]="Remove",e[e.Update=4]="Update",e[e.Move=8]="Move",e[e.Replace=16]="Replace",e[e.Sort=32]="Sort",e[e.Create=64]="Create",e[e.Fetch=128]="Fetch",e[e.Clone=256]="Clone",e[e.Archive=512]="Archive",e[e.Restore=1024]="Restore",e[e.Merge=2048]="Merge",e[e.Reorder=4096]="Reorder",e[e.Sync=8192]="Sync",e[e.Publish=16384]="Publish",e[e.Link=32768]="Link",e[e.Unlink=65536]="Unlink",e[e.Lock=131072]="Lock",e[e.Unlock=262144]="Unlock",e[e.Import=524288]="Import",e[e.Export=1048576]="Export",e[e.Transfer=2097152]="Transfer",e))(A||{}),C=(e=>(e[e.Produce=0]="Produce",e[e.Hydrate=1]="Hydrate",e))(C||{}),G=(e=>(e.Property="property",e.Process="process",e.Value="value",e.Operation="operation",e))(G||{});class k{[n.immerable]=!0;static keys=new Set(Object.values(G));property=null;process=null;value;operation;constructor(e,t){this.value=e,this.operation=t}assign(e,t){const n=new k(this.value,this.operation);return n.property=e,n.process=t,n}}class N{static immer=(()=>{n.enablePatches();const e=new n.Immer;return e.setAutoFreeze(!1),e})();static tag="κ";static id=M}function _(e,t){const n="string"==typeof t?""===t?[]:t.split("."):t;let r=e;for(const o of n){if(null==r)return;r=r[o]}return r}function R(e){if(t.G.isNullable(e)||L(e))return e;if(t.G.isArray(e))return e.map(e=>R(e));if(t.G.isObject(e)&&U(e)){const t=Object.entries(e).map(([e,t])=>[e,R(t)]);return{...Object.fromEntries(t),[N.tag]:e[N.tag]??N.id()}}return e}function T(e){if(Array.isArray(e))return e.filter(e=>N.tag in e).map(e=>e[N.tag]??"").join(",");const t=e[N.tag];if(t)return t;try{return JSON.stringify(e)}catch{return`[unserializable:${typeof e}]`}}function U(e){const t=Object.getPrototypeOf(e);return t===Object.prototype||null===t}function L(e){return t.G.isNullable(e)||t.G.isString(e)||t.G.isNumber(e)||t.G.isBoolean(e)||"symbol"==typeof e||"bigint"==typeof e}function B(e,n,r,o,s,c){return function a(i,u=n.path){if(i instanceof k){const n=_(r,u.join("."));if(Object.entries(i).filter(([e,t])=>!k.keys.has(e)&&t instanceof k).forEach(([e,t])=>a(t,u.concat(e))),L(i.value)){if(e===C.Hydrate)return i.value;const a=u.slice(0,-1),l=a.length>0?_(r,a.join(".")):r;return t.G.isNullable(l)||F(l,i,u.at(-1),o,s,c),n??i.value}if(e===C.Hydrate){const e=R(a(i.value,u));return F(e,i,null,o,s,c),e}const l=n??R(i.value);return F(l,i,null,o,s,c),t.G.isNullable(n)?l:(a(i.value,u),n)}if(t.G.isArray(i))return i.map((e,t)=>a(e,u.concat(t)));if(t.G.isObject(i)&&!U(i))return i;if(t.G.isObject(i)){const t=Object.entries(i).map(([e,t])=>[e,a(t,u.concat(e))]),n=Object.fromEntries(t);if(e===C.Hydrate){const e=R(n);return Object.entries(i).forEach(([t,n])=>{n instanceof k&&L(n.value)&&F(e,n,t,o,s,c)}),e}return n}return i}(n.value)}function F(e,t,n,r,o,s){const c=s(e),a=o.get(c)??[];o.set(c,[t.assign(n,r),...a])}class W{#e={};#t;#n=new Map;#r=new Set;#o=!1;constructor(e=T){this.#t=e}static pk(){return M()}static"κ"=W.pk;annotate(e,t){return new k(t,e)}"δ"=this.annotate;get model(){return this.#e}get inspect(){return function(e,n,r,o,s){function c(o){const s=o.at(-1),c=_(e(),o),a=o.slice(0,-1),i=t.A.isNotEmpty(a)?_(e(),a):e();return[...t.G.isObject(c)||t.G.isArray(c)?n.get(r(c))?.filter(e=>t.G.isNullable(e.property))??[]:[],...t.G.isObject(i)?n.get(r(i))?.filter(e=>e.property===s)??[]:[]]}return function n(r){return new Proxy(()=>{},{get:(a,i)=>"pending"===i?()=>!t.A.isEmpty(c(r)):"remaining"===i?()=>t.A.length(c(r)):"box"===i?()=>({value:_(e(),r),inspect:n(r)}):"is"===i?e=>c(r).some(t=>0!==(t.operation&e)):"draft"===i?()=>t.A.head(c(r))?.value??_(e(),r):"settled"===i?()=>new Promise(n=>{if(t.A.isEmpty(c(r)))return n(_(e(),r));const a=()=>{t.A.isEmpty(c(r))&&(s(a),n(_(e(),r)))};o(a)}):n([...r,String(i)])})}([])}(()=>this.#e,this.#n,this.#t,e=>this.#r.add(e),e=>this.#r.delete(e))}hydrate(e){return this.#o=!0,this.#s(C.Hydrate,()=>e)}produce(e){if(!this.#o)throw new Error("State must be hydrated using hydrate() before calling produce()");return this.#s(C.Produce,e)}#s(e,t){const n=Symbol("process"),[,r]=N.immer.produceWithPatches(this.#e,t);return this.#e=r.reduce((t,r)=>N.immer.applyPatches(t,[{...r,value:B(e,r,t,n,this.#n,this.#t)}]),this.#e),this.#e=R(this.#e),this.#c(),n}prune(e){this.#n.forEach((n,r)=>{const o=n.filter(t=>t.process!==e);t.A.isEmpty(o)?this.#n.delete(r):this.#n.set(r,o)}),this.#c()}#c(){this.#r.forEach(e=>e())}observe(e){const t=()=>e(this.#e);return this.#r.add(t),()=>this.#r.delete(t)}}const $=new W;function D(e){return e&&e.__esModule&&Object.prototype.hasOwnProperty.call(e,"default")?e.default:e}var I,H={exports:{}},q=(I||(I=1,function(e){var t=Object.prototype.hasOwnProperty,n="~";function r(){}function o(e,t,n){this.fn=e,this.context=t,this.once=n||!1}function s(e,t,r,s,c){if("function"!=typeof r)throw new TypeError("The listener must be a function");var a=new o(r,s||e,c),i=n?n+t:t;return e._events[i]?e._events[i].fn?e._events[i]=[e._events[i],a]:e._events[i].push(a):(e._events[i]=a,e._eventsCount++),e}function c(e,t){0===--e._eventsCount?e._events=new r:delete e._events[t]}function a(){this._events=new r,this._eventsCount=0}Object.create&&(r.prototype=Object.create(null),(new r).__proto__||(n=!1)),a.prototype.eventNames=function(){var e,r,o=[];if(0===this._eventsCount)return o;for(r in e=this._events)t.call(e,r)&&o.push(n?r.slice(1):r);return Object.getOwnPropertySymbols?o.concat(Object.getOwnPropertySymbols(e)):o},a.prototype.listeners=function(e){var t=this._events[n?n+e:e];if(!t)return[];if(t.fn)return[t.fn];for(var r=0,o=t.length,s=new Array(o);r<o;r++)s[r]=t[r].fn;return s},a.prototype.listenerCount=function(e){var t=this._events[n?n+e:e];return t?t.fn?1:t.length:0},a.prototype.emit=function(e,t,r,o,s,c){var a=n?n+e:e;if(!this._events[a])return!1;var i,u,l=this._events[a],f=arguments.length;if(l.fn){switch(l.once&&this.removeListener(e,l.fn,void 0,!0),f){case 1:return l.fn.call(l.context),!0;case 2:return l.fn.call(l.context,t),!0;case 3:return l.fn.call(l.context,t,r),!0;case 4:return l.fn.call(l.context,t,r,o),!0;case 5:return l.fn.call(l.context,t,r,o,s),!0;case 6:return l.fn.call(l.context,t,r,o,s,c),!0}for(u=1,i=new Array(f-1);u<f;u++)i[u-1]=arguments[u];l.fn.apply(l.context,i)}else{var d,p=l.length;for(u=0;u<p;u++)switch(l[u].once&&this.removeListener(e,l[u].fn,void 0,!0),f){case 1:l[u].fn.call(l[u].context);break;case 2:l[u].fn.call(l[u].context,t);break;case 3:l[u].fn.call(l[u].context,t,r);break;case 4:l[u].fn.call(l[u].context,t,r,o);break;default:if(!i)for(d=1,i=new Array(f-1);d<f;d++)i[d-1]=arguments[d];l[u].fn.apply(l[u].context,i)}}return!0},a.prototype.on=function(e,t,n){return s(this,e,t,n,!1)},a.prototype.once=function(e,t,n){return s(this,e,t,n,!0)},a.prototype.removeListener=function(e,t,r,o){var s=n?n+e:e;if(!this._events[s])return this;if(!t)return c(this,s),this;var a=this._events[s];if(a.fn)a.fn!==t||o&&!a.once||r&&a.context!==r||c(this,s);else{for(var i=0,u=[],l=a.length;i<l;i++)(a[i].fn!==t||o&&!a[i].once||r&&a[i].context!==r)&&u.push(a[i]);u.length?this._events[s]=1===u.length?u[0]:u:c(this,s)}return this},a.prototype.removeAllListeners=function(e){var t;return e?this._events[t=n?n+e:e]&&c(this,t):(this._events=new r,this._eventsCount=0),this},a.prototype.off=a.prototype.removeListener,a.prototype.addListener=a.prototype.on,a.prefixed=n,a.EventEmitter=a,e.exports=a}(H)),H.exports);const z=D(q);class J extends z{cache=new Map;emit(e,...t){return this.cache.set(e,t[0]),super.emit(e,...t)}setCache(e,t){this.cache.set(e,t)}getCached(e){return this.cache.get(e)}fire(e,...t){return super.emit(e,...t)}}const K=c.createContext(new J);function V(){return c.useContext(K)}function Q({children:e}){const t=c.useMemo(()=>new J,[]);return r.jsx(K.Provider,{value:t,children:e})}const X=c.createContext(new Set);function Y({children:e}){const t=c.useMemo(()=>new Set,[]);return r.jsx(X.Provider,{value:t,children:e})}const Z=c.createContext({current:{}});function ee(){const e=c.useContext(Z);return c.useMemo(()=>new Proxy({},{get:(t,n)=>Reflect.get(e.current,n),has:(t,n)=>n in e.current,ownKeys:()=>Reflect.ownKeys(e.current),getOwnPropertyDescriptor(t,n){const r=Object.getOwnPropertyDescriptor(e.current,n);if(void 0!==r)return{...r,configurable:!0}},set(){throw new TypeError("Store is read-only outside `context.actions.produce`. Mutate via produce(({ store }) => { store.x = ... }) instead.")}}),[e])}function te({initial:e,children:t}){const n=c.useRef(e);return r.jsx(Z.Provider,{value:n,children:t})}const ne=c.createContext(null);function re(){return c.useContext(ne)}function oe(e,t){return e?.get(t)??null}const se=Symbol(((e="")=>`march-hare/replay${e}`)());function ce(e,t,...n){e instanceof J&&e.setCache(t,n[0]);const r=e.listeners(t);return 0===r.length?Promise.resolve():Promise.all(r.map(e=>Promise.resolve(e(...n)))).then(()=>{})}function ae(e,t){for(const n of e.keys())if(O(n)===t)return n;return null}const ie=Symbol("march-hare.unset");function ue(){const[,e]=c.useReducer(e=>e+1,0);return e}function le(){return{data:ie,at:null,else:e=>e}}function fe(e,t){return{data:e,at:t,else:t=>e}}function de(e){if(e instanceof Error){if("TimeoutError"===e.name)return x.Timedout;if("AbortError"===e.name)return x.Supplanted}return x.Errored}function pe(e){const t=new Map,n=e??{get:e=>t.get(e)??null,set:(e,n)=>{t.set(e,n)},remove:e=>{t.delete(e)},clear:()=>{t.clear()}};return{get(e){try{const t=n.get(e);if(null===t)return le();const r=JSON.parse(t);return fe(r.data,Temporal.Instant.from(r.at))}catch{return le()}},set(e,t){if(t.data===ie||null===t.at)return!1;try{return n.set(e,JSON.stringify({data:t.data,at:t.at.toString()})),!0}catch{return!1}},remove(e){n.remove(e)},clear(){n.clear()}}}function he(e,t){return new Promise((n,r)=>{if(t?.aborted)return void r(new P);const o=setTimeout(n,e);t?.addEventListener("abort",()=>{clearTimeout(o),r(new P)},{once:!0})})}async function me(e,t,n){if(t?.aborted)throw new P;for(;;){if(await n())return;await he(e,t)}}function be(e){return e?Boolean(e&&"symbol"!=typeof e):Symbol(`pk.${Date.now()}.${crypto.randomUUID()}`)}const ye=Object.freeze(Object.defineProperty({__proto__:null,pk:be,poll:me,sleep:he,unset:ie,"ζ":he,"κ":be,"π":me},Symbol.toStringTag,{value:"Module"})),ve=new WeakMap;function ge(e){return JSON.stringify(e)}let we=null;function je(){if(null===we)throw new Error("context.actions.resource(...) and context.actions.resource.set(...) must be called with a fresh resource invocation, e.g. context.actions.resource(cat({ id: 5 })).");const e=we;return we=null,e}const Oe=c.createContext(new Map);function Se({action:e,renderer:n}){const r=V(),o=c.useContext(Oe),s=ue(),a=c.useMemo(()=>{const t=o.get(e);if(t)return t;const n={state:new W,listeners:new Set};return o.set(e,n),n},[e,o]);c.useLayoutEffect(()=>{function t(e){a.state.hydrate({value:e}),a.listeners.forEach(e=>e())}return a.listeners.add(s),r.on(e,t),()=>{a.listeners.delete(s),r.off(e,t)}},[e,r,a]);const i=a.state.model?.value;return t.G.isNullable(i)?null:n(i,a.state.inspect.value)}e.AbortError=P,e.Action=(e,t=m.Unicast)=>{const n=t===m.Broadcast?Symbol(i(e)):t===m.Multicast?Symbol(u(e)):Symbol(a(e)),r=function(t){return{[f.Action]:n,[f.Payload]:void 0,[f.Channel]:t,[f.Name]:e,channel:t}};return Object.defineProperty(r,f.Action,{value:n,enumerable:!1}),Object.defineProperty(r,f.Payload,{value:void 0,enumerable:!1}),Object.defineProperty(r,f.Name,{value:e,enumerable:!1}),t===m.Broadcast&&Object.defineProperty(r,f.Broadcast,{value:!0,enumerable:!1}),t===m.Multicast&&Object.defineProperty(r,f.Multicast,{value:!0,enumerable:!1}),r},e.Boundary=function({store:e,children:t}){return r.jsx(Q,{children:r.jsx(te,{initial:e??{},children:r.jsx(Y,{children:t})})})},e.Cache=pe,e.Distribution=m,e.Lifecycle=h,e.Op=A,e.Operation=A,e.Reason=x,e.Resource=function(e,t){const n=t??function(e){let t=ve.get(e);return void 0===t&&(t=pe(),ve.set(e,t)),t}(e),r=e=>{const t=n.get(ge(e));return t.data===ie||null===t.at?{data:ie,at:null}:{data:t.data,at:t.at}},o=(t,r,o)=>e({store:t,controller:r,params:o}).then(e=>(n.set(ge(o),fe(e,Temporal.Now.instant())),e)),s=(e,t,r)=>{n.set(ge(e),fe(t,r))};return function(e){const t=e??{};we={run:o,read:r,seed:s,params:t},queueMicrotask(()=>{null!==we&&we.params===t&&(we=null)});const{data:n}=r(t);return n===ie?null:n}},e.State=W,e.TimeoutError=E,e.With={Update:e=>(t,n)=>{t.actions.produce(t=>{t.model[e]=n})},Invert:e=>t=>{t.actions.produce(t=>{t.model[e]=!t.model[e]})}},e.annotate=function(e,t=A.Update){return $.annotate(t,e)},e.useActions=function(...e){const r=t.G.isUndefined(e[0])||t.G.isFunction(e[0])?{}:e[0],o=t.G.isFunction(e[0])?e[0]:e[1]??(()=>({})),s=V(),a=re(),i=c.useContext(X),u=ee(),l=c.useContext(Z),f=ue(),d=c.useRef(!1),h=c.useRef(null),m=c.useRef(new W);d.current||(d.current=!0,h.current=m.current.hydrate(r));const[y,O]=c.useState(()=>m.current.model),x=function(e){const t=c.useRef(e);return c.useLayoutEffect(()=>{t.current=e},[e]),c.useMemo(()=>{return n=t,Object.keys(e).reduce((e,t)=>(Object.defineProperty(e,t,{get:()=>n.current[t],enumerable:!0}),e),{});var n},[e])}(o()),P=c.useMemo(()=>new z,[]),E=c.useRef({handlers:new Map});E.current.handlers=new Map;const M=function(){const e=c.useRef(new Set),t=c.useRef(new Set);return c.useMemo(()=>({broadcast:e.current,multicast:t.current}),[])}(),C=c.useRef(b.Mounting),G=c.useRef(new Set),k=c.useRef(0),N=c.useCallback((e,t,r)=>{const o=new AbortController,c={controller:o,action:e,payload:t};return i.add(c),G.current.add(c),{model:m.current.model,get phase(){return C.current},task:c,data:x,tasks:i,store:u,actions:{produce(e){if(o.signal.aborted)return;const t=m.current.produce(t=>{l.current=n.produce(l.current,n=>{e({model:t,inspect:m.current.inspect,store:n})})});O(m.current.model),r.processes.add(t),h.current&&(r.processes.add(h.current),h.current=null)},dispatch(e,t){if(o.signal.aborted)return Promise.resolve();const n=v(e),r=j(e)?e.channel:void 0;if(S(e)){const e=oe(a,n);return e?ce(e.emitter,n,t,r):Promise.resolve()}return ce(g(e)?s:P,n,t,r)},annotate:(e,t=A.Update)=>m.current.annotate(t,e),resource:Object.assign(function(e){const t=je(),n=()=>t.run(l.current,o,t.params);return{then:(e,t)=>n().then(e,t),exceeds:e=>{const{data:r,at:o}=t.read(t.params);if(r!==ie&&null!==o){const t=Temporal.Now.instant().since(o),n=Temporal.Duration.from(e);if(Temporal.Duration.compare(t,n)<=0)return Promise.resolve(r)}return n()}}},{set:(e,t)=>{const n=je();n.seed(n.params,t,Temporal.Now.instant())}}),async resolution(e){if(o.signal.aborted)return null;const t=v(e),n=S(e)?oe(a,t)?.emitter??null:s;if(!n)return null;if(void 0===n.getCached(t))return null;const r=w(e),c="unknown"!==r?r[0].toLowerCase()+r.slice(1):null;if(c){const e=m.current.inspect[c];e?.pending?.()&&await new Promise((t,n)=>{if(o.signal.aborted)return void n(o.signal.reason);const r=()=>n(o.signal.reason);o.signal.addEventListener("abort",r,{once:!0}),e.settled().then(()=>{o.signal.removeEventListener("abort",r),t()})})}return n.getCached(t)??null},peek(e){if(o.signal.aborted)return null;const t=v(e),n=S(e)?oe(a,t)?.emitter??null:s;return n?n.getCached(t)??null:null}}}},[y]);c.useLayoutEffect(()=>{function e(e,n,r){return function(o,c){const a=r();if(c===se&&t.G.isNotNullable(a))return;if(t.G.isNotNullable(c)&&c!==se&&t.G.isNotNullable(a)&&!function(e,t){for(const n of Object.keys(e))if(t[n]!==e[n])return!1;return!0}(c,a))return;const u={processes:new Set},l=Promise.withResolvers(),d=N(e,o,u);function h(t){const n=ae(E.current.handlers,"Error"),r=null!==n,o={reason:de(t),error:(c=t,c instanceof Error?c:new Error(String(c))),action:w(e),handled:r,tasks:i};var c;s.fire(p,o),r&&n&&P.emit(n,o)}function b(){for(const e of i)if(e===d.task){i.delete(e),G.current.delete(e);break}u.processes.forEach(e=>m.current.prune(e)),u.processes.size>0&&f(),l.resolve()}let y;try{y=n(d,o)}catch(v){return h(v),void b()}if(!function(e){if(!e||"object"!=typeof e)return!1;const t=Object.prototype.toString.call(e);return"[object Generator]"===t||"[object AsyncGenerator]"===t}(y))return Promise.resolve(y).catch(h).finally(b),l.promise;(async()=>{for await(const e of y);})().catch(h).finally(b)}}k.current++;const n=new Set;return E.current.handlers.forEach((t,r)=>{for(const{getChannel:o,handler:c}of t){const t=e(r,c,o);if(S(r)){if(a)for(const e of a.values()){const o=e.emitter;o.on(r,t),n.add(()=>o.off(r,t))}P.on(r,t),M.multicast.add(r),n.add(()=>P.off(r,t))}else g(r)?(s.on(r,t),P.on(r,t),M.broadcast.add(r),n.add(()=>{s.off(r,t),P.off(r,t)})):(P.on(r,t),n.add(()=>P.off(r,t)))}}),()=>{const e=++k.current,t=new Set(n);queueMicrotask(()=>{if(k.current!==e){for(const e of t)e();return}for(const e of G.current)e.controller.abort(),i.delete(e);G.current.clear(),C.current=b.Unmounting;const n=ae(E.current.handlers,"Unmount");n&&P.emit(n),C.current=b.Unmounted;for(const e of t)e()})}},[P]),function({unicast:e,broadcast:n,dispatchers:r,scope:o,phase:s,data:a,handlers:i}){const u=c.useRef(null);c.useLayoutEffect(()=>{if(s.current===b.Mounted)return;s.current=b.Mounting;const c=ae(i,"Mount");c&&e.emit(c),r.broadcast.forEach(r=>{const o=n.getCached(r);t.G.isNullable(o)||e.emit(r,o,se)}),o&&r.multicast.forEach(n=>{for(const r of o.values()){const o=r.emitter.getCached(n);t.G.isNullable(o)||e.emit(n,o,se)}}),s.current=b.Mounted},[]),c.useLayoutEffect(()=>{if(t.G.isNotNullable(u.current)){const n=function(e,t){return Object.keys(t).reduce((n,r)=>e[r]!==t[r]?{...n,[r]:t[r]}:n,{})}(u.current,a);if(t.A.isNotEmpty(Object.keys(n))){const t=ae(i,"Update");t&&e.emit(t,n)}}u.current=a},[a,e])}({unicast:P,broadcast:s,dispatchers:M,scope:a,phase:C,data:o(),handlers:E.current.handlers});const _=c.useMemo(()=>[y,{dispatch(e,t){const n=v(e),r=j(e)?e.channel:void 0;if(S(e)){const e=oe(a,n);return e?ce(e.emitter,n,t,r):Promise.resolve()}return ce(g(e)?s:P,n,t,r)},get inspect(){return m.current.inspect},stream:(e,t)=>c.createElement(Se,{action:v(e),renderer:t})}],[y,P]);return _.useAction=(e,t)=>{!function(e,t,n){const r=c.useRef(n);c.useLayoutEffect(()=>{r.current=n});const o=c.useRef(t);c.useLayoutEffect(()=>{o.current=t});const s=c.useCallback((e,t)=>r.current(e,t),[]),a=c.useCallback(()=>j(o.current)?o.current.channel:void 0,[]),i=v(t),u=e.current.handlers.get(i)??new Set;0===u.size&&e.current.handlers.set(i,u),u.add({getChannel:a,handler:s})}(E,e,t)},_},e.useStore=ee,e.utils=ye,e.withScope=function(e,t){const n=`Scoped${t.displayName||t.name||"Component"}`,o=v(e);return{[n](e){const n=re(),s=c.useMemo(()=>({action:o,emitter:new J}),[]),a=c.useMemo(()=>{const e=new Map(n??[]);return e.set(o,s),e},[n,s]);return r.jsx(ne.Provider,{value:a,children:r.jsx(t,{...e})})}}[n]},Object.defineProperty(e,Symbol.toStringTag,{value:"Module"})},"object"==typeof exports&&"undefined"!=typeof module?factory(exports,require("@mobily/ts-belt"),require("immer"),require("react/jsx-runtime"),require("react")):"function"==typeof define&&define.amd?define(["exports","@mobily/ts-belt","immer","react/jsx-runtime","react"],factory):factory((global="undefined"!=typeof globalThis?globalThis:global||self).MarchHare={},global.TsBelt,global.Immer,global.jsxRuntime,global.React);
@@ -0,0 +1,102 @@
1
+ import { Fetcher } from './types';
2
+ import { Cache } from './utils';
3
+ import { Store } from '../boundary/components/store/index';
4
+ export type { Fetcher } from './types';
5
+ /**
6
+ * Snapshot of the most recent resource invocation. `cat(params)` writes
7
+ * one of these into a module-scope slot; the next
8
+ * `context.actions.resource(...)` / `.set(...)` call consumes it via
9
+ * {@link consumePending}.
10
+ *
11
+ * @internal
12
+ */
13
+ export type PendingCall = {
14
+ readonly run: (store: Store, controller: AbortController, params: object) => Promise<unknown>;
15
+ readonly read: (params: object) => {
16
+ data: unknown;
17
+ at: Temporal.Instant | null;
18
+ };
19
+ readonly seed: (params: object, data: unknown, at: Temporal.Instant) => void;
20
+ readonly params: object;
21
+ };
22
+ /**
23
+ * Reads and clears the slot populated by the most recent resource
24
+ * invocation. Throws when the slot is empty &mdash; the public
25
+ * `.resource(...)` shape requires a fresh `cat(params)` call as its
26
+ * argument.
27
+ *
28
+ * @internal
29
+ */
30
+ export declare function consumePending(): PendingCall;
31
+ /**
32
+ * Resource handle returned by `Resource(...)`. Call it with `params` to
33
+ * read the per-params cache slot synchronously and prime the slot
34
+ * consumed by `context.actions.resource(...)` for a follow-up fetch or
35
+ * `context.actions.resource.set(...)` for an out-of-band write.
36
+ *
37
+ * ```ts
38
+ * // Sync cache read in a model literal.
39
+ * { cat: cat({ id: 5 }) }
40
+ *
41
+ * // Fetch with `.exceeds(...)` for cache-aware refresh.
42
+ * await context.actions.resource(cat({ id: 5 })).exceeds({ minutes: 5 });
43
+ *
44
+ * // Write through to the per-params cache slot.
45
+ * context.actions.resource.set(cat({ id: 5 }), data);
46
+ * ```
47
+ */
48
+ export type Resource<T, P extends object = Record<never, never>> = [
49
+ keyof P
50
+ ] extends [never] ? (params?: P) => T | null : (params: P) => T | null;
51
+ /**
52
+ * Defines a remote resource &mdash; declared at module scope and used
53
+ * directly. Calling the returned handle with `params` returns the sync
54
+ * cache value (`T | null`) and primes the slot consumed by
55
+ * `context.actions.resource(...)` / `.set(...)` for fetch and write
56
+ * paths.
57
+ *
58
+ * The fetcher receives a single args object `{ store, controller, params }`:
59
+ *
60
+ * - `store` &ndash; snapshot of the per-`<Boundary>` Store (session,
61
+ * locale, feature flags, etc.). Reads only; writes go through
62
+ * `context.actions.produce(({ store }) => ...)` in handlers.
63
+ * - `controller` &ndash; the `AbortController` auto-threaded from the
64
+ * calling handler's `context.task.controller`. Pass `controller.signal`
65
+ * to `fetch`/`ky`, or call `controller.abort()` to fail fast.
66
+ * - `params` &ndash; the call-site params object (defaults to `{}`).
67
+ *
68
+ * Resources do **not** carry any callbacks &ndash; side-effects
69
+ * (broadcasting, logging, model updates) belong in the `useAction`
70
+ * handler that awaited `context.actions.resource(...)`.
71
+ *
72
+ * Every successful fetch writes through to the per-fetcher {@link Cache}
73
+ * (in-memory by default, persistent when an adapter is supplied via the
74
+ * second argument).
75
+ *
76
+ * @example
77
+ * ```ts
78
+ * import { Resource, Cache } from "march-hare";
79
+ *
80
+ * export const user = Resource<User, { id: number }>(
81
+ * ({ store, controller, params }) =>
82
+ * ky.get(`users/${params.id}`, {
83
+ * headers: store.session
84
+ * ? { Authorization: `Bearer ${store.session.accessToken}` }
85
+ * : {},
86
+ * signal: controller.signal,
87
+ * }).json<User>(),
88
+ * );
89
+ *
90
+ * // Sync cache read at module scope or in the model literal.
91
+ * const cached: User | null = user({ id: 5 });
92
+ *
93
+ * // Fetch inside a handler — controller and Store auto-threaded.
94
+ * actions.useAction(Actions.Mount, async (context) => {
95
+ * const data = await context.actions
96
+ * .resource(user({ id: 5 }))
97
+ * .exceeds({ minutes: 5 });
98
+ * context.actions.produce(({ model }) => void (model.user = data));
99
+ * });
100
+ * ```
101
+ */
102
+ export declare function Resource<T, P extends object = Record<never, never>>(fetcher: Fetcher<T, P>, cache?: Cache): Resource<T, P>;
@@ -0,0 +1,27 @@
1
+ import { Store } from '../boundary/components/store/index';
2
+ /**
3
+ * Args object passed to every {@link Fetcher}. The fetcher destructures
4
+ * whatever it needs; unused fields can be omitted.
5
+ *
6
+ * - `store` &mdash; snapshot of the per-`<Boundary>` Store at the
7
+ * moment the fetcher is invoked.
8
+ * - `controller` &mdash; the `AbortController` auto-threaded from the
9
+ * calling handler's `context.task.controller`. Pass
10
+ * `controller.signal` to `fetch`/`ky`/`EventSource`, or call
11
+ * `controller.abort()` to fail fast.
12
+ * - `params` &mdash; the call-site params object. Defaults to `{}`.
13
+ *
14
+ * @internal
15
+ */
16
+ export type Args<P extends object = Record<never, never>> = {
17
+ readonly store: Store;
18
+ readonly controller: AbortController;
19
+ readonly params: P;
20
+ };
21
+ /**
22
+ * Fetcher signature accepted by `Resource`. Receives the args object
23
+ * `{ store, controller, params }`. Side-effects (dispatching broadcasts,
24
+ * analytics, etc.) belong in the calling `useAction` handler, not
25
+ * inside the fetcher.
26
+ */
27
+ export type Fetcher<T, P extends object = Record<never, never>> = (args: Args<P>) => Promise<T>;