@doeixd/machine 1.1.0 → 1.2.0

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.
@@ -8,6 +8,15 @@ function tag(nameOrObj, props) {
8
8
  }
9
9
  return { tag: nameOrObj };
10
10
  }
11
+ ((tag2) => {
12
+ function factory2(name) {
13
+ if (name) {
14
+ return (props) => tag2(name, props);
15
+ }
16
+ return (name2) => (props) => tag2(name2, props);
17
+ }
18
+ tag2.factory = factory2;
19
+ })(tag || (tag = {}));
11
20
  function isState(machine2, tagValue) {
12
21
  return machine2.tag === tagValue;
13
22
  }
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../src/types.ts", "../../../src/minimal.ts"],
4
- "sourcesContent": ["/**\n * @fileoverview Utility types for the machine library.\n */\n\n/**\n * Extracts the context type from a machine (works with regular and minimal machines).\n */\nexport type Context<M> = M extends { readonly context: infer C } ? C : M;\n\n/**\n * Extracts the transitions type from a machine (works with regular and minimal machines).\n */\nexport type Transitions<M> = M extends { readonly context: any } & infer T ? T : M;\n\n/**\n * A discriminated union type representing an event that can be dispatched to a machine.\n */\nexport type Tagged<T extends string = string> = { readonly tag: T };\n\n/**\n * Extracts the tag literal type from a tagged object.\n */\nexport type TagOf<T extends Tagged> = T['tag'];\n\n/**\n * Cleanup function returned from onEnter.\n */\nexport type Cleanup = () => void;\n\n/**\n * Extracts the return type from a factory function.\n * @example\n * const factory = () => machine({ count: 0 }, { ... });\n * type MyMachine = InferMachine<typeof factory>;\n */\nexport type InferMachine<F extends (...args: any[]) => any> = ReturnType<F>;\n\n/**\n * Alias for InferMachine, more descriptive for state machine contexts.\n */\nexport type MachineOf<F extends (...args: any[]) => any> = InferMachine<F>;\n\n/**\n * Creates a tagged object or adds a tag to an existing object.\n */\nexport function tag<T extends string>(name: T): { tag: T };\nexport function tag<T extends string, O extends object>(name: T, props: O): { tag: T } & O;\nexport function tag<const T extends { tag: string }>(obj: T): T;\nexport function tag<T extends string, O extends object>(\n nameOrObj: T | { tag: string },\n props?: O\n): { tag: T } | ({ tag: T } & O) | { tag: string } {\n if (typeof nameOrObj === 'object') {\n return nameOrObj;\n }\n if (props) {\n return { ...props, tag: nameOrObj };\n }\n return { tag: nameOrObj };\n}\n\n/**\n * Type guard to check if a machine or object is in a specific state.\n */\nexport function isState<M extends Tagged, Tag extends TagOf<M>>(\n machine: M,\n tagValue: Tag\n): machine is Extract<M, { tag: Tag }> {\n return (machine as Tagged).tag === tagValue;\n}\n\n/**\n * Recursively freezes an object and its properties.\n */\nexport function freeze<T extends object>(obj: T): Readonly<T> {\n Object.freeze(obj);\n if (typeof (Object as any).values === 'function') {\n for (const value of Object.values(obj)) {\n if (value && typeof value === 'object') {\n freeze(value);\n }\n }\n }\n return obj;\n}\n", "/**\n * @fileoverview A minimal, type-safe typestate library.\n */\n\n// ============================================================================\n// CORE TYPES (MUST BE IN THIS FILE FOR INFERENCE)\n// ============================================================================\n\n/**\n * A state machine combining context (state data) with transitions (methods).\n */\nexport type Machine<C extends object, T> = C & T;\n\n// Re-export utilities\nexport * from './types';\nimport { type Tagged, type TagOf, type Cleanup } from './types';\n\n// ============================================================================\n// CORE: machine()\n// ============================================================================\n\n/**\n * Creates a state machine by bundling context with transitions.\n * \n * Note: 'any' is used in the 'next' callback signature to break recursive \n * inference cycles. This is required for TypeScript to correctly infer \n * transitions 'T' from the return object of the factory.\n */\nexport function machine<C extends object, T>(\n context: C,\n factory: (ctx: C, next: (context: C) => any) => T\n): C & T {\n const next = (newContext: C) => machine(newContext, factory);\n const transitions = factory(context, next);\n return Object.assign({}, context, transitions) as C & T;\n}\n\n// ============================================================================\n// PATTERN MATCHING: match()\n// ============================================================================\n\n/**\n * Handler functions for each case in a tagged union.\n */\nexport type MatchCases<T extends Tagged, R> = {\n [K in TagOf<T>]: (state: Extract<T, { tag: K }>) => R;\n};\n\n/**\n * Exhaustive pattern matching on tagged unions.\n */\nexport function match<T extends Tagged, R>(\n state: T,\n cases: MatchCases<T, R>\n): R {\n const handler = cases[state.tag as TagOf<T>];\n return handler(state as Extract<T, { tag: typeof state.tag }>);\n}\n\n// ============================================================================\n// EFFECTS: runnable() + run()\n// ============================================================================\n\nexport interface Lifecycle<E extends string = string> {\n onEnter?: (send: Send<E>) => Cleanup;\n}\n\nexport type Send<E extends string = string> = (event: E, ...args: unknown[]) => void;\n\nexport type LifecycleMap<Tags extends string> = {\n [K in Tags]?: Lifecycle<string>;\n};\n\nconst LIFECYCLE = Symbol('lifecycle');\n\nexport type RunnableMachine<M, Tags extends string> = M & {\n [LIFECYCLE]?: LifecycleMap<Tags>;\n};\n\nexport function runnable<\n M extends Tagged,\n Tags extends string = TagOf<M>\n>(\n initialMachine: M,\n lifecycles: LifecycleMap<Tags>\n): RunnableMachine<M, Tags> {\n const result = { ...initialMachine } as RunnableMachine<M, Tags>;\n result[LIFECYCLE] = lifecycles;\n return result;\n}\n\nexport interface Runner<M> {\n get: () => M;\n send: Send<string>;\n stop: () => void;\n subscribe: (listener: (state: M) => void) => () => void;\n}\n\nexport function run<M extends Tagged>(\n initial: RunnableMachine<M, string>\n): Runner<M> {\n let current: RunnableMachine<M, string> = initial;\n let cleanup: Cleanup | null = null;\n const listeners = new Set<(state: M) => void>();\n\n const notify = () => {\n listeners.forEach((fn) => fn(current as M));\n };\n\n const enter = () => {\n if (cleanup) {\n cleanup();\n cleanup = null;\n }\n const lifecycles = current[LIFECYCLE];\n const tagValue = (current as Tagged).tag;\n const lifecycle = lifecycles?.[tagValue];\n if (lifecycle?.onEnter) {\n cleanup = lifecycle.onEnter(send);\n }\n };\n\n const send: Send<string> = (event, ...args) => {\n const transition = (current as Record<string, unknown>)[event];\n if (typeof transition === 'function') {\n const nextValue = (transition as (...a: unknown[]) => unknown)(...args);\n if (nextValue && typeof nextValue === 'object' && 'tag' in nextValue) {\n const nextMachine = nextValue as RunnableMachine<M, string>;\n if (!nextMachine[LIFECYCLE] && current[LIFECYCLE]) {\n nextMachine[LIFECYCLE] = current[LIFECYCLE];\n }\n current = nextMachine;\n enter();\n notify();\n }\n }\n };\n\n enter();\n\n return {\n get: () => current as M,\n send,\n stop: () => {\n if (cleanup) {\n cleanup();\n cleanup = null;\n }\n listeners.clear();\n },\n subscribe: (listener) => {\n listeners.add(listener);\n return () => listeners.delete(listener);\n }\n };\n}\n\n// ============================================================================\n// COMPOSITION: withChildren()\n// ============================================================================\n\nexport type ParentMachine<P extends object, C extends Record<string, object>> =\n P & { [K in keyof C]: ChildProxy<P, C, C[K]> };\n\ntype ChildProxy<P extends object, C extends Record<string, object>, Child extends object> = {\n [K in keyof Child]: Child[K] extends (...args: infer A) => unknown\n ? (...args: A) => ParentMachine<P, C>\n : Child[K];\n};\n\nexport function withChildren<\n P extends object,\n C extends Record<string, object>\n>(\n parent: P,\n children: C\n): ParentMachine<P, C> {\n const result = { ...parent } as ParentMachine<P, C>;\n\n for (const key of Object.keys(children) as Array<keyof C>) {\n const child = children[key];\n\n const childProxy = new Proxy(child, {\n get(target, prop: string | symbol) {\n const value = (target as Record<string | symbol, unknown>)[prop];\n\n if (typeof value === 'function') {\n return (...args: unknown[]) => {\n const nextChild = (value as (...a: unknown[]) => unknown)(...args);\n return withChildren(\n { ...parent },\n { ...children, [key]: nextChild as object } as C\n );\n };\n }\n\n return value;\n }\n }) as unknown as ChildProxy<P, C, C[keyof C]>;\n (result as Record<string, unknown>)[key as string] = childProxy;\n }\n\n return result;\n}\n\n// ============================================================================\n// UTILITIES\n// ============================================================================\n\n// Re-exports from types.ts are enough\n\nexport function factory<C extends object>() {\n return <T>(\n transitionFactory: (ctx: C, next: (context: C) => any) => T\n ) => (context: C): C & T => machine(context, transitionFactory);\n}\n\n/**\n * Extracts the union of all possible machine states from a union factory.\n */\nexport type UnionOf<F extends (...args: any[]) => any> = ReturnType<F>;\n\n/**\n * Creates a union factory that routes to different transition factories based on a tag.\n * This is the primary way to define multi-state machines (Type-States) in the minimal API.\n * \n * @param factories - A map of tags to transition factories.\n * @returns A single factory function that produces the correct machine based on the input context's tag.\n * \n * @example\n * const auth = union({\n * idle: (ctx, next) => ({ login: () => next({ tag: 'loggedIn', user: 'alice' }) }),\n * loggedIn: (ctx, next) => ({ logout: () => next({ tag: 'idle' }) })\n * });\n * \n * const m = auth({ tag: 'idle' });\n * const next = m.login(); // Transition to loggedIn state\n */\n/**\n * Creates a union factory that routes to different transition factories based on a tag.\n * This is the primary way to define multi-state machines (Type-States) in the minimal API.\n * \n * @example\n * const auth = union<AuthState>()({\n * idle: (ctx, next) => ({ login: () => next({ tag: 'loggedIn', user: 'alice' }) }),\n * loggedIn: (ctx, next) => ({ logout: () => next({ tag: 'idle' }) })\n * });\n * \n * const m = auth({ tag: 'idle' });\n * const next = m.login(); // Transition to loggedIn state\n */\nexport function union<C extends Tagged>() {\n return <F extends { [K in TagOf<C>]: (ctx: Extract<C, { tag: K }>, next: (c: C) => any) => any }>(\n factories: F\n ) => {\n type MachineMap = {\n [K in TagOf<C> & keyof F]: F[K] extends (ctx: any, next: any) => infer T\n ? Extract<C, { tag: K }> & T\n : never\n };\n\n const resultFactory = <T extends C>(context: T): MachineMap[T['tag'] & keyof MachineMap] => {\n const factoryFn = (factories as any)[(context as any).tag];\n return machine(context as any, (ctx: any, _next: any) => factoryFn(ctx as any, resultFactory as any)) as any;\n };\n\n return resultFactory;\n };\n}\n"],
5
- "mappings": "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",
6
- "names": ["machine", "factory"]
4
+ "sourcesContent": ["/**\n * @fileoverview Utility types for the machine library.\n */\n\n/**\n * Extracts the context type from a machine (works with regular and minimal machines).\n */\nexport type Context<M> = M extends { readonly context: infer C } ? C : M;\n\n/**\n * Extracts the transitions type from a machine (works with regular and minimal machines).\n */\nexport type Transitions<M> = M extends { readonly context: any } & infer T ? T : M;\n\n/**\n * A discriminated union type representing an event that can be dispatched to a machine.\n */\nexport type Tagged<T extends string = string> = { readonly tag: T };\n\n/**\n * Extracts the tag literal type from a tagged object.\n */\nexport type TagOf<T extends Tagged> = T['tag'];\n\n/**\n * Utility to define a union of tagged states from a mapping type.\n * @example\n * type PickMode = States<{\n * idle: {},\n * active: { isCloseMode: boolean; timeoutId: number }\n * }>;\n */\nexport type States<M extends Record<string, object>> = {\n [K in keyof M]: { readonly tag: K } & M[K]\n}[keyof M];\n\n/**\n * Cleanup function returned from onEnter.\n */\nexport type Cleanup = () => void;\n\n/**\n * Extracts the return type from a factory function.\n * @example\n * const factory = () => machine({ count: 0 }, { ... });\n * type MyMachine = InferMachine<typeof factory>;\n */\nexport type InferMachine<F extends (...args: any[]) => any> = ReturnType<F>;\n\n/**\n * Alias for InferMachine, more descriptive for state machine contexts.\n */\nexport type MachineOf<F extends (...args: any[]) => any> = InferMachine<F>;\n\n/**\n * Creates a tagged object or adds a tag to an existing object.\n */\nexport function tag<T extends string>(name: T): { tag: T };\nexport function tag<T extends string, O extends object>(name: T, props: O): { tag: T } & O;\nexport function tag<const T extends { tag: string }>(obj: T): T;\nexport function tag<T extends string, O extends object>(\n nameOrObj: T | { tag: string },\n props?: O\n): { tag: T } | ({ tag: T } & O) | { tag: string } {\n if (typeof nameOrObj === 'object') {\n return nameOrObj;\n }\n if (props) {\n return { ...props, tag: nameOrObj };\n }\n return { tag: nameOrObj };\n}\n\n/**\n * Namespace for tag factory utility.\n */\nexport namespace tag {\n /**\n * Creates a pre-bound tag factory for a specific state.\n * \n * @typeParam C - Context (data) type\n * @typeParam T - Transitions type (optional, for machine return types)\n * @param name - The tag name for this state\n * @returns A function that takes context data and returns a tagged object\n * \n * @typeParam C - Context (data) type\n * @typeParam T - Transitions type (optional)\n * @param name - The tag name\n * @example const idle = tag.factory<{ count: number }>('idle');\n */\n export function factory<C extends object, T extends object = {}>(name: string): (props: C) => { readonly tag: string } & C & T;\n /**\n * Creates a curried tag factory, ideal for use with the States utility.\n * @example const state = tag.factory<AppState>()('idle')({ count: 0 });\n */\n export function factory<C extends object, T extends object = {}>(): <K extends string>(name: K) => (props: Omit<Extract<C, { tag: K }>, 'tag'>) => (Extract<C, { tag: K }> extends never ? { readonly tag: K } & C : Extract<C, { tag: K }>) & T;\n\n export function factory(name?: string) {\n if (name) {\n return (props: any) => tag(name, props);\n }\n return (name: string) => (props: any) => tag(name, props);\n }\n}\n\n/**\n * Type guard to check if a machine or object is in a specific state.\n */\nexport function isState<M extends Tagged, Tag extends TagOf<M>>(\n machine: M,\n tagValue: Tag\n): machine is Extract<M, { tag: Tag }> {\n return (machine as Tagged).tag === tagValue;\n}\n\n/**\n * Recursively freezes an object and its properties.\n */\nexport function freeze<T extends object>(obj: T): Readonly<T> {\n Object.freeze(obj);\n if (typeof (Object as any).values === 'function') {\n for (const value of Object.values(obj)) {\n if (value && typeof value === 'object') {\n freeze(value);\n }\n }\n }\n return obj;\n}\n", "/**\n * @fileoverview A minimal, type-safe typestate library.\n */\n\n// ============================================================================\n// CORE TYPES (MUST BE IN THIS FILE FOR INFERENCE)\n// ============================================================================\n\n/**\n * A state machine combining context (state data) with transitions (methods).\n */\nexport type Machine<C extends object, T> = C & T;\n\n// Re-export utilities\nexport * from './types';\nimport { type Tagged, type TagOf, type Cleanup } from './types';\n\n// ============================================================================\n// CORE: machine()\n// ============================================================================\n\n/**\n * Creates a state machine by bundling context with transitions.\n * \n * Note: 'any' is used in the 'next' callback signature to break recursive \n * inference cycles. This is required for TypeScript to correctly infer \n * transitions 'T' from the return object of the factory.\n */\nexport function machine<C extends object, T>(\n context: C,\n factory: (ctx: C, next: (context: C) => any) => T\n): C & T {\n const next = (newContext: C) => machine(newContext, factory);\n const transitions = factory(context, next);\n return Object.assign({}, context, transitions) as C & T;\n}\n\n// ============================================================================\n// PATTERN MATCHING: match()\n// ============================================================================\n\n/**\n * Handler functions for each case in a tagged union.\n */\nexport type MatchCases<T extends Tagged, R> = {\n [K in TagOf<T>]: (state: Extract<T, { tag: K }>) => R;\n};\n\n/**\n * Exhaustive pattern matching on tagged unions.\n */\nexport function match<T extends Tagged, R>(\n state: T,\n cases: MatchCases<T, R>\n): R {\n const handler = cases[state.tag as TagOf<T>];\n return handler(state as Extract<T, { tag: typeof state.tag }>);\n}\n\n// ============================================================================\n// EFFECTS: runnable() + run()\n// ============================================================================\n\nexport interface Lifecycle<E extends string = string> {\n onEnter?: (send: Send<E>) => Cleanup;\n}\n\nexport type Send<E extends string = string> = (event: E, ...args: unknown[]) => void;\n\nexport type LifecycleMap<Tags extends string> = {\n [K in Tags]?: Lifecycle<string>;\n};\n\nconst LIFECYCLE = Symbol('lifecycle');\n\nexport type RunnableMachine<M, Tags extends string> = M & {\n [LIFECYCLE]?: LifecycleMap<Tags>;\n};\n\nexport function runnable<\n M extends Tagged,\n Tags extends string = TagOf<M>\n>(\n initialMachine: M,\n lifecycles: LifecycleMap<Tags>\n): RunnableMachine<M, Tags> {\n const result = { ...initialMachine } as RunnableMachine<M, Tags>;\n result[LIFECYCLE] = lifecycles;\n return result;\n}\n\nexport interface Runner<M> {\n get: () => M;\n send: Send<string>;\n stop: () => void;\n subscribe: (listener: (state: M) => void) => () => void;\n}\n\nexport function run<M extends Tagged>(\n initial: RunnableMachine<M, string>\n): Runner<M> {\n let current: RunnableMachine<M, string> = initial;\n let cleanup: Cleanup | null = null;\n const listeners = new Set<(state: M) => void>();\n\n const notify = () => {\n listeners.forEach((fn) => fn(current as M));\n };\n\n const enter = () => {\n if (cleanup) {\n cleanup();\n cleanup = null;\n }\n const lifecycles = current[LIFECYCLE];\n const tagValue = (current as Tagged).tag;\n const lifecycle = lifecycles?.[tagValue];\n if (lifecycle?.onEnter) {\n cleanup = lifecycle.onEnter(send);\n }\n };\n\n const send: Send<string> = (event, ...args) => {\n const transition = (current as Record<string, unknown>)[event];\n if (typeof transition === 'function') {\n const nextValue = (transition as (...a: unknown[]) => unknown)(...args);\n if (nextValue && typeof nextValue === 'object' && 'tag' in nextValue) {\n const nextMachine = nextValue as RunnableMachine<M, string>;\n if (!nextMachine[LIFECYCLE] && current[LIFECYCLE]) {\n nextMachine[LIFECYCLE] = current[LIFECYCLE];\n }\n current = nextMachine;\n enter();\n notify();\n }\n }\n };\n\n enter();\n\n return {\n get: () => current as M,\n send,\n stop: () => {\n if (cleanup) {\n cleanup();\n cleanup = null;\n }\n listeners.clear();\n },\n subscribe: (listener) => {\n listeners.add(listener);\n return () => listeners.delete(listener);\n }\n };\n}\n\n// ============================================================================\n// COMPOSITION: withChildren()\n// ============================================================================\n\nexport type ParentMachine<P extends object, C extends Record<string, object>> =\n P & { [K in keyof C]: ChildProxy<P, C, C[K]> };\n\ntype ChildProxy<P extends object, C extends Record<string, object>, Child extends object> = {\n [K in keyof Child]: Child[K] extends (...args: infer A) => unknown\n ? (...args: A) => ParentMachine<P, C>\n : Child[K];\n};\n\nexport function withChildren<\n P extends object,\n C extends Record<string, object>\n>(\n parent: P,\n children: C\n): ParentMachine<P, C> {\n const result = { ...parent } as ParentMachine<P, C>;\n\n for (const key of Object.keys(children) as Array<keyof C>) {\n const child = children[key];\n\n const childProxy = new Proxy(child, {\n get(target, prop: string | symbol) {\n const value = (target as Record<string | symbol, unknown>)[prop];\n\n if (typeof value === 'function') {\n return (...args: unknown[]) => {\n const nextChild = (value as (...a: unknown[]) => unknown)(...args);\n return withChildren(\n { ...parent },\n { ...children, [key]: nextChild as object } as C\n );\n };\n }\n\n return value;\n }\n }) as unknown as ChildProxy<P, C, C[keyof C]>;\n (result as Record<string, unknown>)[key as string] = childProxy;\n }\n\n return result;\n}\n\n// ============================================================================\n// UTILITIES\n// ============================================================================\n\n// Re-exports from types.ts are enough\n\nexport function factory<C extends object>() {\n return <T>(\n transitionFactory: (ctx: C, next: (context: C) => any) => T\n ) => (context: C): C & T => machine(context, transitionFactory);\n}\n\n/**\n * Extracts the union of all possible machine states from a union factory.\n */\nexport type UnionOf<F extends (...args: any[]) => any> = ReturnType<F>;\n\n/**\n * Creates a union factory that routes to different transition factories based on a tag.\n * This is the primary way to define multi-state machines (Type-States) in the minimal API.\n * \n * @param factories - A map of tags to transition factories.\n * @returns A single factory function that produces the correct machine based on the input context's tag.\n * \n * @example\n * const auth = union({\n * idle: (ctx, next) => ({ login: () => next({ tag: 'loggedIn', user: 'alice' }) }),\n * loggedIn: (ctx, next) => ({ logout: () => next({ tag: 'idle' }) })\n * });\n * \n * const m = auth({ tag: 'idle' });\n * const next = m.login(); // Transition to loggedIn state\n */\n/**\n * Creates a union factory that routes to different transition factories based on a tag.\n * This is the primary way to define multi-state machines (Type-States) in the minimal API.\n * \n * @example\n * const auth = union<AuthState>()({\n * idle: (ctx, next) => ({ login: () => next({ tag: 'loggedIn', user: 'alice' }) }),\n * loggedIn: (ctx, next) => ({ logout: () => next({ tag: 'idle' }) })\n * });\n * \n * const m = auth({ tag: 'idle' });\n * const next = m.login(); // Transition to loggedIn state\n */\nexport function union<C extends Tagged>() {\n return <F extends { [K in TagOf<C>]: (ctx: Extract<C, { tag: K }>, next: (c: C) => any) => any }>(\n factories: F\n ) => {\n type MachineMap = {\n [K in TagOf<C> & keyof F]: F[K] extends (ctx: any, next: any) => infer T\n ? Extract<C, { tag: K }> & T\n : never\n };\n\n const resultFactory = <T extends C>(context: T): MachineMap[T['tag'] & keyof MachineMap] => {\n const factoryFn = (factories as any)[(context as any).tag];\n return machine(context as any, (ctx: any, _next: any) => factoryFn(ctx as any, resultFactory as any)) as any;\n };\n\n return resultFactory;\n };\n}\n"],
5
+ "mappings": "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",
6
+ "names": ["tag", "factory", "name", "machine", "factory"]
7
7
  }
@@ -1,4 +1,4 @@
1
- var we=Object.defineProperty;var ee=(e,t)=>{for(var n in t)we(e,n,{get:t[n],enumerable:!0})};var te=Symbol.for("__machine_transitions__");function b(e,t){return Object.defineProperty(e,te,{value:t,enumerable:!1,configurable:!1}),e}function A(e){if(!(!e||typeof e!="object"))return e[te]}function F(e){if(!e||typeof e!="object")return{};let t=Object.entries(e).filter(([n,r])=>n!=="context"&&typeof r=="function");return Object.fromEntries(t)}var m=class{constructor(t){this.context=t}};function ne(e,t){let n=e(t),r=t;for(;;){let{value:o,done:a}=n.next(r);if(a)return o;r=o}}function Ee(e){return function*(){return yield e}()}function ve(e){return e}function Re(e,t){return t.reduce((n,r)=>ne(r,n),e)}function je(e){return e}function Ae(e,t,n=(r,o)=>{console.log(`Step ${r}:`,o.context)}){let r=e(t),o=t,a=0;for(n(a,o);;){let{value:s,done:i}=r.next(o);if(i)return console.log("Final:",s),s;o=s,a++,n(a,o)}}async function Fe(e,t){let n=e(t),r=t;for(;;){let{value:o,done:a}=await n.next(r);if(a)return o;r=o}}async function*Se(e){return yield e}var Oe=Symbol("MachineMeta"),re=Symbol("__machine_runtime_meta__");function w(e,t){let n=e[re]||{},r={...n,...t};t.guards&&n.guards?r.guards=[...t.guards,...n.guards]:t.guards&&(r.guards=[...t.guards]),t.actions&&n.actions?r.actions=[...t.actions,...n.actions]:t.actions&&(r.actions=[...t.actions]),Object.defineProperty(e,re,{value:r,enumerable:!1,writable:!1,configurable:!0})}function Pe(e,t){return w(t,{target:e.name||e.toString()}),t}function ke(e,t){return w(t,{description:e}),t}function Ke(e,t){return w(t,{guards:[e]}),t}function _e(e,t){return w(t,{invoke:{src:e.src,onDone:e.onDone.name||e.onDone.toString(),onError:e.onError.name||e.onError.toString(),description:e.description}}),t}function Be(e,t){return w(t,{actions:[e]}),t}function K(e,t,n={}){let{onFail:r="throw",errorMessage:o,description:a}=n,s={...n,onFail:r,errorMessage:o,description:a},i=function(...c){let d=typeof this=="object"&&"context"in this,u=d?this.context:this;if(e(u,...c)){let x=d?this:{context:this};return t.apply(x,c)}else if(r==="throw"){let x=o||"Guard condition failed";throw new Error(x)}else if(r==="ignore"){if(d)return this;throw new Error('Cannot use "ignore" mode with context-only binding. Use full machine binding or provide fallback.')}else if(typeof r=="function"){if(d)return r.apply(this,c);throw new Error("Cannot use function fallback with context-only binding. Use full machine binding.")}else return r};return Object.defineProperty(i,"__guard",{value:!0,enumerable:!1}),Object.defineProperty(i,"condition",{value:e,enumerable:!1}),Object.defineProperty(i,"transition",{value:t,enumerable:!1}),Object.defineProperty(i,"options",{value:s,enumerable:!1}),w(i,{description:a||"Synchronous guarded transition",guards:[{name:"runtime_guard",description:a||"Synchronous condition check"}]}),i}function _(e,t,n={}){let{onFail:r="throw",errorMessage:o,description:a}=n,s={...n,onFail:r,errorMessage:o,description:a},i=async function(...c){let d=typeof this=="object"&&"context"in this,u=d?this.context:this;if(await Promise.resolve(e(u,...c))){let x=d?this:{context:this};return t.apply(x,c)}else if(r==="throw"){let x=o||"Guard condition failed";throw new Error(x)}else if(r==="ignore"){if(d)return this;throw new Error('Cannot use "ignore" mode with context-only binding. Use full machine binding or provide fallback.')}else if(typeof r=="function"){if(d)return r.apply(this,c);throw new Error("Cannot use function fallback with context-only binding. Use full machine binding.")}else return r};return Object.defineProperty(i,"__guard",{value:!0,enumerable:!1}),Object.defineProperty(i,"condition",{value:e,enumerable:!1}),Object.defineProperty(i,"transition",{value:t,enumerable:!1}),Object.defineProperty(i,"options",{value:s,enumerable:!1}),w(i,{description:a||"Runtime guarded transition",guards:[{name:"runtime_guard",description:a||"Runtime condition check"}]}),i}function Ne(e){return{do(t){let n=K(e,t);return n.else=function(r){return K(e,t,{onFail:r})},n}}}function He(e){return{do(t){let n=_(e,t);return n.else=function(r){return _(e,t,{onFail:r})},n}}}function Ie(e,t){return t}function ze(e,t){let n=e,r=i=>{n=i,t==null||t(i)},{context:o,...a}=e,s=new Proxy({},{get(i,c){let d=n[c];if(typeof d=="function")return(...u)=>{let y=d.apply(n,u),x=Object.assign({context:y.context},a);return r(x),x}}});return{get state(){return n},get context(){return n.context},actions:s,setState:r}}function De(e,t,n){let r=()=>{let a=e.getContext(),s=n(a),i=t[s];if(!i)throw new Error(`[Ensemble] Invalid state: No factory found for state "${String(s)}".`);return i(a)},o=new Proxy({},{get(a,s){let i=r(),c=i[s];if(typeof c!="function")throw new Error(`[Ensemble] Transition "${s}" is not valid in the current state.`);return(...d)=>c.apply(i,d)}});return{get context(){return e.getContext()},get state(){return r()},actions:o}}function jt(e,t){return function(r){return De(e,r,t)}}function At(e,t){let n=ze(t),r=e(n),o=r.next();for(;!o.done;)o=r.next();return o.value}function Ft(e,t){let n=e(t),r=n.next();for(;!r.done;)r=n.next();return r.value}var oe=class{constructor(t){this.store=t}get context(){return this.store.getContext()}setContext(t){this.store.setContext(t)}};function St(e,t){let n=new e(t);return new Proxy({},{get(r,o){let a=t.getContext();if(o in a)return a[o];let s=n[o];if(typeof s=="function")return(...i)=>s.apply(n,i)},set(r,o,a){let s=t.getContext();if(o in s){let i={...s,[o]:a};return t.setContext(i),!0}return!1},has(r,o){let a=t.getContext();return o in a||typeof n[o]=="function"},ownKeys(r){let o=t.getContext(),a=Object.keys(o),s=Object.getOwnPropertyNames(Object.getPrototypeOf(n)).filter(i=>i!=="constructor"&&typeof n[i]=="function");return Array.from(new Set([...a,...s]))},getOwnPropertyDescriptor(r,o){let a=t.getContext();if(o in a||typeof n[o]=="function")return{value:void 0,writable:!0,enumerable:!0,configurable:!0}}})}function Ot(e,t,n){let r=()=>{let o=n(e),a=t[o];if(!a)throw new Error(`[MutableMachine] Invalid state: No factory for state "${String(o)}".`);return a(e)};return new Proxy(e,{get(o,a,s){if(a in o)return o[a];let i=r(),c=i[a];if(typeof c=="function")return(...d)=>{let u=c.apply(i,d);if(typeof u!="object"||u===null){console.warn(`[MutableMachine] Transition "${String(a)}" did not return a valid context object. State may be inconsistent.`);return}Object.keys(o).forEach(y=>delete o[y]),Object.assign(o,u)}},set(o,a,s,i){return o[a]=s,!0},has(o,a){let s=r();return a in o||typeof s[a]=="function"}})}function Ht(e){return function(...t){let n=this.context.child;if(typeof n[e]=="function"){let r=n[e](...t);return v(this,{...this.context,child:r})}return this}}function It(e){return function(){return typeof this.context[e]!="boolean"&&console.warn(`[toggle primitive] Property '${String(e)}' is not a boolean. Toggling may have unexpected results.`),v(this,{...this.context,[e]:!this.context[e]})}}var B=class extends m{constructor(n){super({status:"idle"});this.config=n;this.fetch=n=>new E(this.config,n!=null?n:this.config.initialParams,1)}},E=class extends m{constructor(n,r,o){super({status:"loading",abortController:new AbortController,attempts:o});this.config=n;this.params=r;this.succeed=n=>{var r,o;return(o=(r=this.config).onSuccess)==null||o.call(r,n),new H(this.config,{status:"success",data:n})};this.fail=n=>{var o,a,s;let r=(o=this.config.maxRetries)!=null?o:3;return this.context.attempts<r?new N(this.config,this.params,n,this.context.attempts):((s=(a=this.config).onError)==null||s.call(a,n),new I(this.config,{status:"error",error:n}))};this.cancel=()=>(this.context.abortController.abort(),new z(this.config));this.execute()}async execute(){}},N=class extends m{constructor(n,r,o,a){super({status:"retrying",error:o,attempts:a});this.config=n;this.params=r;this.retry=n=>new E(this.config,n!=null?n:this.params,this.context.attempts+1)}},H=class extends m{constructor(n,r){super(r);this.config=n;this.refetch=n=>new E(this.config,n!=null?n:this.config.initialParams,1)}},I=class extends m{constructor(n,r){super(r);this.config=n;this.retry=n=>new E(this.config,n!=null?n:this.config.initialParams,1)}},z=class extends m{constructor(n){super({status:"canceled"});this.config=n;this.refetch=n=>new E(this.config,n!=null?n:this.config.initialParams,1)}};function zt(e){return new B(e)}function ae(e,t){let n={...e.context,...t.context},r={...e},o={...t};delete r.context,delete o.context;let a={};for(let s in r){let i=r[s];a[s]=(...c)=>{let d=i.apply(e,c);return ae(d,t)}}for(let s in o){let i=o[s];a[s]=(...c)=>{let d=i.apply(t,c);return ae(e,d)}}return{context:n,...a}}var se=Symbol("CANCEL");function g(e,t,n={}){let{continueOnError:r=!1,logErrors:o=!0,onError:a}=n,s={...e};for(let i in e)Object.prototype.hasOwnProperty.call(e,i)&&i!=="context"&&typeof e[i]!="function"&&(s[i]=e[i]);for(let i in e){if(!Object.prototype.hasOwnProperty.call(e,i))continue;let c=e[i];typeof c=="function"&&i!=="context"&&(s[i]=function(...d){let u=i,y=s.context,x=()=>{let l;try{l=c.apply(this,d)}catch(f){if(t.error)try{t.error({transitionName:u,context:y,args:[...d],error:f})}catch(p){if(!r)throw p;o&&console.error(`Middleware error hook error for ${u}:`,p),a==null||a(p,"error",{transitionName:u,context:y,args:d,error:f})}throw f}let M=f=>{if(f&&typeof f=="object"&&f.context){for(let p in s)Object.prototype.hasOwnProperty.call(s,p)&&p!=="context"&&!(p in f)&&(f[p]=s[p]);for(let p in f){if(!Object.prototype.hasOwnProperty.call(f,p))continue;typeof f[p]=="function"&&p!=="context"&&s[p]&&(f[p]=s[p])}}return f};if(l&&typeof l.then=="function")return l.then(p=>{if(M(p),t.after)try{let C=t.after({transitionName:u,prevContext:y,nextContext:p.context,args:[...d]});if(C&&typeof C.then=="function")return C.then(()=>p)}catch(C){if(!r)throw C;o&&console.error(`Middleware after hook error for ${u}:`,C),a==null||a(C,"after",{transitionName:u,prevContext:y,nextContext:p.context,args:d})}return p});if(M(l),t.after)try{let f=t.after({transitionName:u,prevContext:y,nextContext:l.context,args:[...d]});if(f&&typeof f=="object"&&f&&"then"in f)return f.then(()=>l).catch(p=>{if(!r)throw p;return o&&console.error(`Middleware after hook error for ${u}:`,p),a==null||a(p,"after",{transitionName:u,prevContext:y,nextContext:l.context,args:d}),l})}catch(f){if(!r)throw f;o&&console.error(`Middleware after hook error for ${u}:`,f),a==null||a(f,"after",{transitionName:u,prevContext:y,nextContext:l.context,args:d})}return l};if(t.before)try{let l=t.before({transitionName:u,context:y,args:[...d]});if(l&&typeof l=="object"&&l&&"then"in l)return l.then(M=>M===se?s:x()).catch(M=>{if(!r)throw M;return o&&console.error(`Middleware before hook error for ${u}:`,M),a==null||a(M,"before",{transitionName:u,context:y,args:d}),x()});if(l===se)return s}catch(l){if(!r)throw l;o&&console.error(`Middleware before hook error for ${u}:`,l),a==null||a(l,"before",{transitionName:u,context:y,args:d})}return x()})}return s}function ie(e,t={}){let{logger:n=console.log,includeArgs:r=!1,includeContext:o=!0}=t;return g(e,{before:({transitionName:a,args:s})=>{let i=r?`→ ${a} [${s.join(", ")}]`:`→ ${a}`;n(i)},after:({transitionName:a,nextContext:s})=>{let i=o?` ${JSON.stringify(s)}`:"";n(`✓ ${a}${i}`)},error:({transitionName:a,error:s})=>{console.error(`[Machine] ${a} failed:`,s)}})}function ce(e,t,n={}){let{eventPrefix:r="state_transition",includePrevContext:o=!1,includeArgs:a=!1}=n;return g(e,{after:({transitionName:s,prevContext:i,nextContext:c,args:d})=>{let u=`${r}.${s}`,y={transition:s};o&&(y.from=i),y.to=c,a&&(y.args=d),t(u,y)}})}function de(e,t){return g(e,{before:n=>{if(t(n)===!1)throw new Error(`Validation failed for transition: ${n.transitionName}`)}})}function ue(e,t){return g(e,{before:n=>{if(!t(n))throw new Error(`Unauthorized transition: ${n.transitionName}`)}})}function ye(e,t,n={}){let{includeArgs:r=!1}=n;return g(e,{error:o=>{let a={transition:o.transitionName,context:o.context,...r&&{args:o.args}};t(o.error,a)}})}function le(e,t){let n=new Map;return g(e,{before:r=>{n.set(r.transitionName,Date.now())},after:r=>{let o=n.get(r.transitionName);if(o){let a=Date.now()-o;n.delete(r.transitionName);let s={transitionName:r.transitionName,duration:a,context:r.nextContext||r.prevContext};t(s)}}})}function xe(e,t={}){var c,d;let{maxAttempts:n=(c=t.maxRetries)!=null?c:3,shouldRetry:r=()=>!0,backoffMs:o=(d=t.delay)!=null?d:100,backoffMultiplier:a=2,onRetry:s}=t,i={...e};for(let u in e){if(!Object.prototype.hasOwnProperty.call(e,u))continue;let y=e[u];typeof y=="function"&&u!=="context"&&(i[u]=async function(...x){let l,M=0;for(;M<n;)try{return await y.apply(this,x)}catch(f){if(l=f,M++,M<n&&r(l,M)){s==null||s(l,M);let C=(typeof o=="function"?o(M):o)*Math.pow(a,M-1);await new Promise(T=>setTimeout(T,C))}else throw l}throw l})}return i}function $t(e,t){return n=>g(n,e,t)}function D(e,t={}){let{maxSize:n,serializer:r,onEntry:o}=t,a=[],s=0,i=g(e,{before:({transitionName:c,args:d})=>{let u={id:`entry-${s++}`,transitionName:c,args:[...d],timestamp:Date.now()};if(r)try{u.serializedArgs=r.serialize(d)}catch(y){console.error("Failed to serialize history args:",y)}a.push(u),n&&a.length>n&&a.shift(),o==null||o(u)}});return Object.assign(i,{history:a,clearHistory:()=>{a.length=0,s=0}})}function $(e,t={}){let{maxSize:n,serializer:r,captureSnapshot:o,onlyOnChange:a=!1}=t,s=[],i=0,c=g(e,{after:({transitionName:u,prevContext:y,nextContext:x})=>{if(a&&JSON.stringify(y)===JSON.stringify(x))return;let l={id:`snapshot-${i++}`,transitionName:u,before:{...y},after:{...x},timestamp:Date.now()};if(r)try{l.serializedBefore=r.serialize(y),l.serializedAfter=r.serialize(x)}catch(M){console.error("Failed to serialize snapshot:",M)}if(o)try{l.diff=o(y,x)}catch(M){console.error("Failed to capture snapshot:",M)}s.push(l),n&&s.length>n&&s.shift()}});return Object.assign(c,{snapshots:s,clearSnapshots:()=>{s.length=0,i=0},restoreSnapshot:u=>{let y=Object.fromEntries(Object.entries(e).filter(([x])=>x!=="context"&&x!=="snapshots"&&x!=="clearSnapshots"&&x!=="restoreSnapshot"&&typeof e[x]=="function"));return Object.assign({context:u},y)}})}function W(e,t={}){let{maxSize:n,serializer:r,onRecord:o}=t,a=[],s=[],i=0,c=0,d=g(e,{before:({transitionName:x,args:l})=>{let M={id:`entry-${i++}`,transitionName:x,args:[...l],timestamp:Date.now()};if(r)try{M.serializedArgs=r.serialize(l)}catch(f){console.error("Failed to serialize history args:",f)}a.push(M),n&&a.length>n&&a.shift(),o==null||o("history",M)},after:({transitionName:x,prevContext:l,nextContext:M})=>{let f={id:`snapshot-${c++}`,transitionName:x,before:{...l},after:{...M},timestamp:Date.now()};if(r)try{f.serializedBefore=r.serialize(l),f.serializedAfter=r.serialize(M)}catch(p){console.error("Failed to serialize snapshot:",p)}s.push(f),n&&s.length>n&&s.shift(),o==null||o("snapshot",f)}});return Object.assign(d,{history:a,snapshots:s,clearHistory:()=>{a.length=0,i=0},clearSnapshots:()=>{s.length=0,c=0},clearTimeTravel:()=>{a.length=0,s.length=0,i=0,c=0},restoreSnapshot:x=>{let l=Object.fromEntries(Object.entries(e).filter(([M])=>M!=="context"&&M!=="history"&&M!=="snapshots"&&M!=="clearHistory"&&M!=="clearSnapshots"&&M!=="restoreSnapshot"&&M!=="clearTimeTravel"&&M!=="replayFrom"&&typeof e[M]=="function"));return Object.assign({context:x},l)},replayFrom:x=>{var C;if(x<0||x>=a.length)throw new Error(`Invalid replay start index: ${x}`);let l=(C=s[x])==null?void 0:C.before;if(!l)throw new Error(`No snapshot available for index ${x}`);let M=a.slice(x),p=Object.assign({context:l},Object.fromEntries(Object.entries(e).filter(([T])=>T!=="context"&&typeof e[T]=="function")));for(let T of M){let Z=p[T.transitionName];Z&&(p=Z.apply(p,T.args))}return p}})}function en(e,...t){return t.reduce((n,r)=>r(n),e)}function G(e,...t){return t.reduce((n,r)=>r(n),e)}var U=class e{constructor(t){this.machine=t}with(t){let n=t(this.machine);return new e(n)}build(){return this.machine}};function tn(e){return new U(e)}function V(e,t){let n=function(r){return t(r)?e(r):r};return n.middleware=e,n.when=t,n}function nn(e){return V(e,()=>typeof process!="undefined"?!1:typeof window!="undefined"?!window.location.hostname.includes("production"):!1)}function rn(e,t,n){return V(n,r=>r.context[e]===t)}function on(){let e=new Map;return{register(t,n,r,o){if(e.has(t))throw new Error(`Middleware '${t}' is already registered`);return e.set(t,{name:t,middleware:n,description:r,priority:o}),this},unregister(t){return e.delete(t)},has(t){return e.has(t)},get(t){return e.get(t)},list(){return Array.from(e.values()).sort((t,n)=>{var r,o;return((r=t.priority)!=null?r:0)-((o=n.priority)!=null?o:0)})},apply(t,n){let r=n.map(o=>{let a=e.get(o);if(!a)throw new Error(`Middleware '${o}' is not registered`);return a}).sort((o,a)=>{var s,i;return((s=o.priority)!=null?s:0)-((i=a.priority)!=null?i:0)});return G(t,...r.map(o=>o.middleware))},applyAll(t){let n=this.list();return G(t,...n.map(r=>r.middleware))}}}function an(e={}){let{continueOnError:t=!1,logErrors:n=!0,onError:r}=e;return(o,...a)=>{let s=o,i=[],c=!0;for(let d=0;d<a.length;d++){let u=a[d];try{if("middleware"in u&&"when"in u){if(!u.when(s))continue;s=u.middleware(s)}else s=u(s)}catch(y){if(c=!1,!t)throw y;i.push({error:y,middlewareIndex:d,middlewareName:u.name}),n&&console.error(`Pipeline middleware error at index ${d}:`,y),r==null||r(y,d,u.name)}}return{machine:s,errors:i,success:c}}}function sn(...e){return t=>G(t,...e)}function cn(e,t){return n=>{for(let[r,o]of e)if(r(n))return o(n);return t?t(n):n}}function Me(e){return typeof e=="function"&&e.length===1}function dn(e){return e!==null&&(typeof e=="object"||typeof e=="function")&&"middleware"in e&&"when"in e&&Me(e.middleware)&&typeof e.when=="function"}function un(e,t){return e!==null&&typeof e=="object"&&"transitionName"in e&&"prevContext"in e&&"nextContext"in e&&"args"in e&&typeof e.transitionName=="string"&&Array.isArray(e.args)&&(!t||S(e.prevContext,t)&&S(e.nextContext,t))}function yn(e,t){return e!==null&&typeof e=="object"&&"transitionName"in e&&"context"in e&&"args"in e&&typeof e.transitionName=="string"&&Array.isArray(e.args)&&(!t||S(e.context,t))}function ln(e,t){return e!==null&&typeof e=="object"&&"transitionName"in e&&"context"in e&&"args"in e&&"error"in e&&typeof e.transitionName=="string"&&Array.isArray(e.args)&&e.error instanceof Error&&(!t||S(e.context,t))}function xn(e,t){if(e===null||typeof e!="object")return!1;let n=e;return!("before"in n&&n.before!==void 0&&typeof n.before!="function"||"after"in n&&n.after!==void 0&&typeof n.after!="function"||"error"in n&&n.error!==void 0&&typeof n.error!="function")}function Mn(e){return e===void 0||e!==null&&typeof e=="object"&&("continueOnError"in e?typeof e.continueOnError=="boolean":!0)&&("logErrors"in e?typeof e.logErrors=="boolean":!0)&&("onError"in e?typeof e.onError=="function"||e.onError===void 0:!0)}function S(e,t){return e!==null&&typeof e=="object"}function fn(e){return e!==null&&typeof e=="object"&&"name"in e&&"middleware"in e&&typeof e.name=="string"&&Me(e.middleware)&&("description"in e?typeof e.description=="string"||e.description===void 0:!0)&&("priority"in e?typeof e.priority=="number"||e.priority===void 0:!0)}function pn(e){return e===void 0||e!==null&&typeof e=="object"&&("continueOnError"in e?typeof e.continueOnError=="boolean":!0)&&("logErrors"in e?typeof e.logErrors=="boolean":!0)&&("onError"in e?typeof e.onError=="function"||e.onError===void 0:!0)}var L=class{constructor(t){this.machine=t;this.middlewares=[]}withLogging(t){return this.middlewares.push(n=>ie(n,t)),this}withAnalytics(t,n){return this.middlewares.push(r=>ce(r,t,n)),this}withValidation(t,n){return this.middlewares.push(r=>de(r,t)),this}withPermissions(t){return this.middlewares.push(n=>ue(n,t)),this}withErrorReporting(t,n){return this.middlewares.push(r=>ye(r,t,n)),this}withPerformanceMonitoring(t,n){return this.middlewares.push(r=>le(r,t)),this}withRetry(t){return this.middlewares.push(n=>xe(n,t)),this}withHistory(t){return this.middlewares.push(n=>D(n,t)),this}withSnapshot(t){return this.middlewares.push(n=>$(n,t)),this}withTimeTravel(t){return this.middlewares.push(n=>W(n,t)),this}withDebugging(){return this.middlewares.push(t=>We(t)),this}withCustom(t){return this.middlewares.push(t),this}withConditional(t,n){return this.middlewares.push(V(t,n)),this}build(){let t=this.machine;for(let n of this.middlewares)t=n(t);return t}getChain(){return[...this.middlewares]}clear(){return this.middlewares=[],this}};function $e(e){return new L(e)}function hn(e={}){return{create:t=>{let n=$e(t);return e.logging&&n.withLogging(e.logging),e.analytics&&n.withAnalytics(e.analytics.track,e.analytics.options),e.history&&n.withHistory(e.history),e.snapshot&&n.withSnapshot(e.snapshot),e.timeTravel&&n.withTimeTravel(e.timeTravel),e.retry&&n.withRetry(e.retry),n}}}function We(e){return W($(D(e)))}function q(e){let t={},n=e;for(;n&&n!==Object.prototype;){let r=Object.getOwnPropertyDescriptors(n);for(let[o,a]of Object.entries(r))o!=="constructor"&&(o in t||(t[o]=a));n=Object.getPrototypeOf(n)}return t}function Ge(...e){let t=e[0];class n extends t{constructor(a){super(a)}}let r=o=>function(...a){let s=o.apply(this,a);if(s&&typeof s=="object"&&"context"in s){let i={...this.context,...s.context};return new n(i)}return s};for(let o of e){let a=q(o.prototype);for(let[s,i]of Object.entries(a))if(s!=="constructor")if(typeof i.value=="function"){let c=i.value,d=r(c);Object.defineProperty(n.prototype,s,{...i,value:d})}else Object.defineProperty(n.prototype,s,i)}return n}function Ue(e,...t){class n extends m{constructor(a){super(a)}}let r=q(e.prototype);for(let[o,a]of Object.entries(r))if(o!=="constructor")if(typeof a.value=="function"){let s=a.value,i=function(...c){let d=s.apply(this,c);return d&&typeof d=="object"&&"context"in d?new n({...this.context,...d.context}):d};Object.defineProperty(n.prototype,o,{...a,value:i})}else Object.defineProperty(n.prototype,o,a);for(let o of t){let a=q(o.prototype);for(let s of Object.keys(a))Object.prototype.hasOwnProperty.call(n.prototype,s)&&delete n.prototype[s]}return n}function mn(...e){let t=e.map(a=>a.constructor),n=e.map(a=>a.context),r=Object.assign({},...n),o=Ge(...t);return new o(r)}function Tn(e,...t){let n=e.constructor,r=t.map(a=>a.constructor),o=Ue(n,...r);return new o(e.context)}function Le(e,t){return e instanceof t}function Ve(e,...t){return{type:e,args:t}}function qe(e,t){return v(e,n=>({...n,...t}))}async function Ye(e,...t){let n=e;for(let r of t)n=await r(n);return n}function Je(e,t){return t?console.log(t,e.context):console.log(e.context),e}function Qe(e,t){return function(...n){let r=t(this.context,...n);return h(r,e())}}function Xe(e,t,...n){return e.apply(t,n)}function fe(e){return new Proxy(e,{get(t,n){let r=t[n];return typeof r=="function"?function(...o){let a=r.apply(t,o);return a&&typeof a=="object"&&"context"in a?fe(a):a}:r}})}var Y=class e{constructor(t){return this.wrappedMachine=t,new Proxy(this,{get:(n,r)=>{if(r==="wrappedMachine")return Reflect.get(n,r);if(r==="context")return this.wrappedMachine.context;let o=this.wrappedMachine[r];return typeof o=="function"?(...a)=>{let s=o.apply(this.wrappedMachine,a);return s&&typeof s=="object"&&"context"in s?new e(s):s}:o}})}};function Ze(){return function(t){return function(...n){let r=t(this.context,...n);return h(r,this)}}}function pe(e){return{machine:e,addTransition:function(t,n){let r=function(...a){let s=n(this.context,...a);return h(s,this)},o=Ce(e,{[t]:r});return pe(o)}}}function he(e){return function(n){let r={},o=Object.fromEntries(Object.entries(n).map(([a,s])=>[a,function(...i){let c=s(this.context,...i);return h(c,r)}]));return Object.assign(r,o),h(e,r)}}function et(e,t){return t!==void 0?h(e,t):he(e)}function tt(...e){let t=new Map;for(let[i,c,d]of e){if(t.has(i))throw new Error(`Duplicate matcher case name: "${i}"`);t.set(i,{predicate:d})}let n=new Proxy({},{get(i,c){return function(u){let y=t.get(c);if(!y){let x=Array.from(t.keys()).join(", ");throw new Error(`Unknown matcher case: "${c}". Available cases: ${x}`)}return y.predicate(u)}}}),r=new Proxy({},{get(i,c){return function(u){if(!t.has(c)){let y=Array.from(t.keys()).join(", ");throw new Error(`Unknown matcher case: "${c}". Available cases: ${y}`)}return{__brand:"CaseHandler",__name:c,__machine:void 0,__return:void 0,handler:u}}}}),o={__exhaustive:!0};function a(i){return{is(...c){if(c.length===0)throw new Error("Pattern match requires at least one handler and exhaustiveness marker");let d=c[c.length-1];if(!d||typeof d!="object"||!("__exhaustive"in d))throw new Error("Pattern match must end with match.exhaustive for compile-time exhaustiveness checking");let u=c.slice(0,-1);for(let l of u){let M=l.__name,f=t.get(M);if(!f)throw new Error(`Internal error: Unknown matcher case in handler: ${M}`);if(f.predicate(i))return l.handler(i)}let y=u.map(l=>l.__name).join(", "),x=Array.from(t.keys()).join(", ");throw new Error(`Non-exhaustive pattern match at runtime: no handler matched the machine.
2
- Handled cases: [${y}]
1
+ var Ee=Object.defineProperty;var te=(e,t)=>{for(var n in t)Ee(e,n,{get:t[n],enumerable:!0})};var ne=Symbol.for("__machine_transitions__");function b(e,t){return Object.defineProperty(e,ne,{value:t,enumerable:!1,configurable:!1}),e}function A(e){if(!(!e||typeof e!="object"))return e[ne]}function F(e){if(!e||typeof e!="object")return{};let t=Object.entries(e).filter(([n,r])=>n!=="context"&&typeof r=="function");return Object.fromEntries(t)}var m=class{constructor(t){this.context=t}};function re(e,t){let n=e(t),r=t;for(;;){let{value:o,done:a}=n.next(r);if(a)return o;r=o}}function ve(e){return function*(){return yield e}()}function Re(e){return e}function je(e,t){return t.reduce((n,r)=>re(r,n),e)}function Ae(e){return e}function Fe(e,t,n=(r,o)=>{console.log(`Step ${r}:`,o.context)}){let r=e(t),o=t,a=0;for(n(a,o);;){let{value:s,done:i}=r.next(o);if(i)return console.log("Final:",s),s;o=s,a++,n(a,o)}}async function Se(e,t){let n=e(t),r=t;for(;;){let{value:o,done:a}=await n.next(r);if(a)return o;r=o}}async function*Oe(e){return yield e}var Pe=Symbol("MachineMeta"),oe=Symbol("__machine_runtime_meta__");function w(e,t){let n=e[oe]||{},r={...n,...t};t.guards&&n.guards?r.guards=[...t.guards,...n.guards]:t.guards&&(r.guards=[...t.guards]),t.actions&&n.actions?r.actions=[...t.actions,...n.actions]:t.actions&&(r.actions=[...t.actions]),Object.defineProperty(e,oe,{value:r,enumerable:!1,writable:!1,configurable:!0})}function ke(e,t){return w(t,{target:e.name||e.toString()}),t}function Ke(e,t){return w(t,{description:e}),t}function _e(e,t){return w(t,{guards:[e]}),t}function Be(e,t){return w(t,{invoke:{src:e.src,onDone:e.onDone.name||e.onDone.toString(),onError:e.onError.name||e.onError.toString(),description:e.description}}),t}function Ne(e,t){return w(t,{actions:[e]}),t}function _(e,t,n={}){let{onFail:r="throw",errorMessage:o,description:a}=n,s={...n,onFail:r,errorMessage:o,description:a},i=function(...c){let d=typeof this=="object"&&"context"in this,y=d?this.context:this;if(e(y,...c)){let x=d?this:{context:this};return t.apply(x,c)}else if(r==="throw"){let x=o||"Guard condition failed";throw new Error(x)}else if(r==="ignore"){if(d)return this;throw new Error('Cannot use "ignore" mode with context-only binding. Use full machine binding or provide fallback.')}else if(typeof r=="function"){if(d)return r.apply(this,c);throw new Error("Cannot use function fallback with context-only binding. Use full machine binding.")}else return r};return Object.defineProperty(i,"__guard",{value:!0,enumerable:!1}),Object.defineProperty(i,"condition",{value:e,enumerable:!1}),Object.defineProperty(i,"transition",{value:t,enumerable:!1}),Object.defineProperty(i,"options",{value:s,enumerable:!1}),w(i,{description:a||"Synchronous guarded transition",guards:[{name:"runtime_guard",description:a||"Synchronous condition check"}]}),i}function B(e,t,n={}){let{onFail:r="throw",errorMessage:o,description:a}=n,s={...n,onFail:r,errorMessage:o,description:a},i=async function(...c){let d=typeof this=="object"&&"context"in this,y=d?this.context:this;if(await Promise.resolve(e(y,...c))){let x=d?this:{context:this};return t.apply(x,c)}else if(r==="throw"){let x=o||"Guard condition failed";throw new Error(x)}else if(r==="ignore"){if(d)return this;throw new Error('Cannot use "ignore" mode with context-only binding. Use full machine binding or provide fallback.')}else if(typeof r=="function"){if(d)return r.apply(this,c);throw new Error("Cannot use function fallback with context-only binding. Use full machine binding.")}else return r};return Object.defineProperty(i,"__guard",{value:!0,enumerable:!1}),Object.defineProperty(i,"condition",{value:e,enumerable:!1}),Object.defineProperty(i,"transition",{value:t,enumerable:!1}),Object.defineProperty(i,"options",{value:s,enumerable:!1}),w(i,{description:a||"Runtime guarded transition",guards:[{name:"runtime_guard",description:a||"Runtime condition check"}]}),i}function He(e){return{do(t){let n=_(e,t);return n.else=function(r){return _(e,t,{onFail:r})},n}}}function Ie(e){return{do(t){let n=B(e,t);return n.else=function(r){return B(e,t,{onFail:r})},n}}}function ze(e,t){return t}function De(e,t){let n=e,r=i=>{n=i,t==null||t(i)},{context:o,...a}=e,s=new Proxy({},{get(i,c){let d=n[c];if(typeof d=="function")return(...y)=>{let u=d.apply(n,y),x=Object.assign({context:u.context},a);return r(x),x}}});return{get state(){return n},get context(){return n.context},actions:s,setState:r}}function $e(e,t,n){let r=()=>{let a=e.getContext(),s=n(a),i=t[s];if(!i)throw new Error(`[Ensemble] Invalid state: No factory found for state "${String(s)}".`);return i(a)},o=new Proxy({},{get(a,s){let i=r(),c=i[s];if(typeof c!="function")throw new Error(`[Ensemble] Transition "${s}" is not valid in the current state.`);return(...d)=>c.apply(i,d)}});return{get context(){return e.getContext()},get state(){return r()},actions:o}}function jt(e,t){return function(r){return $e(e,r,t)}}function At(e,t){let n=De(t),r=e(n),o=r.next();for(;!o.done;)o=r.next();return o.value}function Ft(e,t){let n=e(t),r=n.next();for(;!r.done;)r=n.next();return r.value}var ae=class{constructor(t){this.store=t}get context(){return this.store.getContext()}setContext(t){this.store.setContext(t)}};function St(e,t){let n=new e(t);return new Proxy({},{get(r,o){let a=t.getContext();if(o in a)return a[o];let s=n[o];if(typeof s=="function")return(...i)=>s.apply(n,i)},set(r,o,a){let s=t.getContext();if(o in s){let i={...s,[o]:a};return t.setContext(i),!0}return!1},has(r,o){let a=t.getContext();return o in a||typeof n[o]=="function"},ownKeys(r){let o=t.getContext(),a=Object.keys(o),s=Object.getOwnPropertyNames(Object.getPrototypeOf(n)).filter(i=>i!=="constructor"&&typeof n[i]=="function");return Array.from(new Set([...a,...s]))},getOwnPropertyDescriptor(r,o){let a=t.getContext();if(o in a||typeof n[o]=="function")return{value:void 0,writable:!0,enumerable:!0,configurable:!0}}})}function Ot(e,t,n){let r=()=>{let o=n(e),a=t[o];if(!a)throw new Error(`[MutableMachine] Invalid state: No factory for state "${String(o)}".`);return a(e)};return new Proxy(e,{get(o,a,s){if(a in o)return o[a];let i=r(),c=i[a];if(typeof c=="function")return(...d)=>{let y=c.apply(i,d);if(typeof y!="object"||y===null){console.warn(`[MutableMachine] Transition "${String(a)}" did not return a valid context object. State may be inconsistent.`);return}Object.keys(o).forEach(u=>delete o[u]),Object.assign(o,y)}},set(o,a,s,i){return o[a]=s,!0},has(o,a){let s=r();return a in o||typeof s[a]=="function"}})}function Ht(e){return function(...t){let n=this.context.child;if(typeof n[e]=="function"){let r=n[e](...t);return v(this,{...this.context,child:r})}return this}}function It(e){return function(){return typeof this.context[e]!="boolean"&&console.warn(`[toggle primitive] Property '${String(e)}' is not a boolean. Toggling may have unexpected results.`),v(this,{...this.context,[e]:!this.context[e]})}}var N=class extends m{constructor(n){super({status:"idle"});this.config=n;this.fetch=n=>new E(this.config,n!=null?n:this.config.initialParams,1)}},E=class extends m{constructor(n,r,o){super({status:"loading",abortController:new AbortController,attempts:o});this.config=n;this.params=r;this.succeed=n=>{var r,o;return(o=(r=this.config).onSuccess)==null||o.call(r,n),new I(this.config,{status:"success",data:n})};this.fail=n=>{var o,a,s;let r=(o=this.config.maxRetries)!=null?o:3;return this.context.attempts<r?new H(this.config,this.params,n,this.context.attempts):((s=(a=this.config).onError)==null||s.call(a,n),new z(this.config,{status:"error",error:n}))};this.cancel=()=>(this.context.abortController.abort(),new D(this.config));this.execute()}async execute(){}},H=class extends m{constructor(n,r,o,a){super({status:"retrying",error:o,attempts:a});this.config=n;this.params=r;this.retry=n=>new E(this.config,n!=null?n:this.params,this.context.attempts+1)}},I=class extends m{constructor(n,r){super(r);this.config=n;this.refetch=n=>new E(this.config,n!=null?n:this.config.initialParams,1)}},z=class extends m{constructor(n,r){super(r);this.config=n;this.retry=n=>new E(this.config,n!=null?n:this.config.initialParams,1)}},D=class extends m{constructor(n){super({status:"canceled"});this.config=n;this.refetch=n=>new E(this.config,n!=null?n:this.config.initialParams,1)}};function zt(e){return new N(e)}function se(e,t){let n={...e.context,...t.context},r={...e},o={...t};delete r.context,delete o.context;let a={};for(let s in r){let i=r[s];a[s]=(...c)=>{let d=i.apply(e,c);return se(d,t)}}for(let s in o){let i=o[s];a[s]=(...c)=>{let d=i.apply(t,c);return se(e,d)}}return{context:n,...a}}var ie=Symbol("CANCEL");function g(e,t,n={}){let{continueOnError:r=!1,logErrors:o=!0,onError:a}=n,s={...e};for(let i in e)Object.prototype.hasOwnProperty.call(e,i)&&i!=="context"&&typeof e[i]!="function"&&(s[i]=e[i]);for(let i in e){if(!Object.prototype.hasOwnProperty.call(e,i))continue;let c=e[i];typeof c=="function"&&i!=="context"&&(s[i]=function(...d){let y=i,u=s.context,x=()=>{let l;try{l=c.apply(this,d)}catch(f){if(t.error)try{t.error({transitionName:y,context:u,args:[...d],error:f})}catch(p){if(!r)throw p;o&&console.error(`Middleware error hook error for ${y}:`,p),a==null||a(p,"error",{transitionName:y,context:u,args:d,error:f})}throw f}let M=f=>{if(f&&typeof f=="object"&&f.context){for(let p in s)Object.prototype.hasOwnProperty.call(s,p)&&p!=="context"&&!(p in f)&&(f[p]=s[p]);for(let p in f){if(!Object.prototype.hasOwnProperty.call(f,p))continue;typeof f[p]=="function"&&p!=="context"&&s[p]&&(f[p]=s[p])}}return f};if(l&&typeof l.then=="function")return l.then(p=>{if(M(p),t.after)try{let C=t.after({transitionName:y,prevContext:u,nextContext:p.context,args:[...d]});if(C&&typeof C.then=="function")return C.then(()=>p)}catch(C){if(!r)throw C;o&&console.error(`Middleware after hook error for ${y}:`,C),a==null||a(C,"after",{transitionName:y,prevContext:u,nextContext:p.context,args:d})}return p});if(M(l),t.after)try{let f=t.after({transitionName:y,prevContext:u,nextContext:l.context,args:[...d]});if(f&&typeof f=="object"&&f&&"then"in f)return f.then(()=>l).catch(p=>{if(!r)throw p;return o&&console.error(`Middleware after hook error for ${y}:`,p),a==null||a(p,"after",{transitionName:y,prevContext:u,nextContext:l.context,args:d}),l})}catch(f){if(!r)throw f;o&&console.error(`Middleware after hook error for ${y}:`,f),a==null||a(f,"after",{transitionName:y,prevContext:u,nextContext:l.context,args:d})}return l};if(t.before)try{let l=t.before({transitionName:y,context:u,args:[...d]});if(l&&typeof l=="object"&&l&&"then"in l)return l.then(M=>M===ie?s:x()).catch(M=>{if(!r)throw M;return o&&console.error(`Middleware before hook error for ${y}:`,M),a==null||a(M,"before",{transitionName:y,context:u,args:d}),x()});if(l===ie)return s}catch(l){if(!r)throw l;o&&console.error(`Middleware before hook error for ${y}:`,l),a==null||a(l,"before",{transitionName:y,context:u,args:d})}return x()})}return s}function ce(e,t={}){let{logger:n=console.log,includeArgs:r=!1,includeContext:o=!0}=t;return g(e,{before:({transitionName:a,args:s})=>{let i=r?`→ ${a} [${s.join(", ")}]`:`→ ${a}`;n(i)},after:({transitionName:a,nextContext:s})=>{let i=o?` ${JSON.stringify(s)}`:"";n(`✓ ${a}${i}`)},error:({transitionName:a,error:s})=>{console.error(`[Machine] ${a} failed:`,s)}})}function de(e,t,n={}){let{eventPrefix:r="state_transition",includePrevContext:o=!1,includeArgs:a=!1}=n;return g(e,{after:({transitionName:s,prevContext:i,nextContext:c,args:d})=>{let y=`${r}.${s}`,u={transition:s};o&&(u.from=i),u.to=c,a&&(u.args=d),t(y,u)}})}function ye(e,t){return g(e,{before:n=>{if(t(n)===!1)throw new Error(`Validation failed for transition: ${n.transitionName}`)}})}function ue(e,t){return g(e,{before:n=>{if(!t(n))throw new Error(`Unauthorized transition: ${n.transitionName}`)}})}function le(e,t,n={}){let{includeArgs:r=!1}=n;return g(e,{error:o=>{let a={transition:o.transitionName,context:o.context,...r&&{args:o.args}};t(o.error,a)}})}function xe(e,t){let n=new Map;return g(e,{before:r=>{n.set(r.transitionName,Date.now())},after:r=>{let o=n.get(r.transitionName);if(o){let a=Date.now()-o;n.delete(r.transitionName);let s={transitionName:r.transitionName,duration:a,context:r.nextContext||r.prevContext};t(s)}}})}function Me(e,t={}){var c,d;let{maxAttempts:n=(c=t.maxRetries)!=null?c:3,shouldRetry:r=()=>!0,backoffMs:o=(d=t.delay)!=null?d:100,backoffMultiplier:a=2,onRetry:s}=t,i={...e};for(let y in e){if(!Object.prototype.hasOwnProperty.call(e,y))continue;let u=e[y];typeof u=="function"&&y!=="context"&&(i[y]=async function(...x){let l,M=0;for(;M<n;)try{return await u.apply(this,x)}catch(f){if(l=f,M++,M<n&&r(l,M)){s==null||s(l,M);let C=(typeof o=="function"?o(M):o)*Math.pow(a,M-1);await new Promise(T=>setTimeout(T,C))}else throw l}throw l})}return i}function $t(e,t){return n=>g(n,e,t)}function $(e,t={}){let{maxSize:n,serializer:r,onEntry:o}=t,a=[],s=0,i=g(e,{before:({transitionName:c,args:d})=>{let y={id:`entry-${s++}`,transitionName:c,args:[...d],timestamp:Date.now()};if(r)try{y.serializedArgs=r.serialize(d)}catch(u){console.error("Failed to serialize history args:",u)}a.push(y),n&&a.length>n&&a.shift(),o==null||o(y)}});return Object.assign(i,{history:a,clearHistory:()=>{a.length=0,s=0}})}function W(e,t={}){let{maxSize:n,serializer:r,captureSnapshot:o,onlyOnChange:a=!1}=t,s=[],i=0,c=g(e,{after:({transitionName:y,prevContext:u,nextContext:x})=>{if(a&&JSON.stringify(u)===JSON.stringify(x))return;let l={id:`snapshot-${i++}`,transitionName:y,before:{...u},after:{...x},timestamp:Date.now()};if(r)try{l.serializedBefore=r.serialize(u),l.serializedAfter=r.serialize(x)}catch(M){console.error("Failed to serialize snapshot:",M)}if(o)try{l.diff=o(u,x)}catch(M){console.error("Failed to capture snapshot:",M)}s.push(l),n&&s.length>n&&s.shift()}});return Object.assign(c,{snapshots:s,clearSnapshots:()=>{s.length=0,i=0},restoreSnapshot:y=>{let u=Object.fromEntries(Object.entries(e).filter(([x])=>x!=="context"&&x!=="snapshots"&&x!=="clearSnapshots"&&x!=="restoreSnapshot"&&typeof e[x]=="function"));return Object.assign({context:y},u)}})}function G(e,t={}){let{maxSize:n,serializer:r,onRecord:o}=t,a=[],s=[],i=0,c=0,d=g(e,{before:({transitionName:x,args:l})=>{let M={id:`entry-${i++}`,transitionName:x,args:[...l],timestamp:Date.now()};if(r)try{M.serializedArgs=r.serialize(l)}catch(f){console.error("Failed to serialize history args:",f)}a.push(M),n&&a.length>n&&a.shift(),o==null||o("history",M)},after:({transitionName:x,prevContext:l,nextContext:M})=>{let f={id:`snapshot-${c++}`,transitionName:x,before:{...l},after:{...M},timestamp:Date.now()};if(r)try{f.serializedBefore=r.serialize(l),f.serializedAfter=r.serialize(M)}catch(p){console.error("Failed to serialize snapshot:",p)}s.push(f),n&&s.length>n&&s.shift(),o==null||o("snapshot",f)}});return Object.assign(d,{history:a,snapshots:s,clearHistory:()=>{a.length=0,i=0},clearSnapshots:()=>{s.length=0,c=0},clearTimeTravel:()=>{a.length=0,s.length=0,i=0,c=0},restoreSnapshot:x=>{let l=Object.fromEntries(Object.entries(e).filter(([M])=>M!=="context"&&M!=="history"&&M!=="snapshots"&&M!=="clearHistory"&&M!=="clearSnapshots"&&M!=="restoreSnapshot"&&M!=="clearTimeTravel"&&M!=="replayFrom"&&typeof e[M]=="function"));return Object.assign({context:x},l)},replayFrom:x=>{var C;if(x<0||x>=a.length)throw new Error(`Invalid replay start index: ${x}`);let l=(C=s[x])==null?void 0:C.before;if(!l)throw new Error(`No snapshot available for index ${x}`);let M=a.slice(x),p=Object.assign({context:l},Object.fromEntries(Object.entries(e).filter(([T])=>T!=="context"&&typeof e[T]=="function")));for(let T of M){let ee=p[T.transitionName];ee&&(p=ee.apply(p,T.args))}return p}})}function en(e,...t){return t.reduce((n,r)=>r(n),e)}function U(e,...t){return t.reduce((n,r)=>r(n),e)}var L=class e{constructor(t){this.machine=t}with(t){let n=t(this.machine);return new e(n)}build(){return this.machine}};function tn(e){return new L(e)}function q(e,t){let n=function(r){return t(r)?e(r):r};return n.middleware=e,n.when=t,n}function nn(e){return q(e,()=>typeof process!="undefined"?!1:typeof window!="undefined"?!window.location.hostname.includes("production"):!1)}function rn(e,t,n){return q(n,r=>r.context[e]===t)}function on(){let e=new Map;return{register(t,n,r,o){if(e.has(t))throw new Error(`Middleware '${t}' is already registered`);return e.set(t,{name:t,middleware:n,description:r,priority:o}),this},unregister(t){return e.delete(t)},has(t){return e.has(t)},get(t){return e.get(t)},list(){return Array.from(e.values()).sort((t,n)=>{var r,o;return((r=t.priority)!=null?r:0)-((o=n.priority)!=null?o:0)})},apply(t,n){let r=n.map(o=>{let a=e.get(o);if(!a)throw new Error(`Middleware '${o}' is not registered`);return a}).sort((o,a)=>{var s,i;return((s=o.priority)!=null?s:0)-((i=a.priority)!=null?i:0)});return U(t,...r.map(o=>o.middleware))},applyAll(t){let n=this.list();return U(t,...n.map(r=>r.middleware))}}}function an(e={}){let{continueOnError:t=!1,logErrors:n=!0,onError:r}=e;return(o,...a)=>{let s=o,i=[],c=!0;for(let d=0;d<a.length;d++){let y=a[d];try{if("middleware"in y&&"when"in y){if(!y.when(s))continue;s=y.middleware(s)}else s=y(s)}catch(u){if(c=!1,!t)throw u;i.push({error:u,middlewareIndex:d,middlewareName:y.name}),n&&console.error(`Pipeline middleware error at index ${d}:`,u),r==null||r(u,d,y.name)}}return{machine:s,errors:i,success:c}}}function sn(...e){return t=>U(t,...e)}function cn(e,t){return n=>{for(let[r,o]of e)if(r(n))return o(n);return t?t(n):n}}function fe(e){return typeof e=="function"&&e.length===1}function dn(e){return e!==null&&(typeof e=="object"||typeof e=="function")&&"middleware"in e&&"when"in e&&fe(e.middleware)&&typeof e.when=="function"}function yn(e,t){return e!==null&&typeof e=="object"&&"transitionName"in e&&"prevContext"in e&&"nextContext"in e&&"args"in e&&typeof e.transitionName=="string"&&Array.isArray(e.args)&&(!t||S(e.prevContext,t)&&S(e.nextContext,t))}function un(e,t){return e!==null&&typeof e=="object"&&"transitionName"in e&&"context"in e&&"args"in e&&typeof e.transitionName=="string"&&Array.isArray(e.args)&&(!t||S(e.context,t))}function ln(e,t){return e!==null&&typeof e=="object"&&"transitionName"in e&&"context"in e&&"args"in e&&"error"in e&&typeof e.transitionName=="string"&&Array.isArray(e.args)&&e.error instanceof Error&&(!t||S(e.context,t))}function xn(e,t){if(e===null||typeof e!="object")return!1;let n=e;return!("before"in n&&n.before!==void 0&&typeof n.before!="function"||"after"in n&&n.after!==void 0&&typeof n.after!="function"||"error"in n&&n.error!==void 0&&typeof n.error!="function")}function Mn(e){return e===void 0||e!==null&&typeof e=="object"&&("continueOnError"in e?typeof e.continueOnError=="boolean":!0)&&("logErrors"in e?typeof e.logErrors=="boolean":!0)&&("onError"in e?typeof e.onError=="function"||e.onError===void 0:!0)}function S(e,t){return e!==null&&typeof e=="object"}function fn(e){return e!==null&&typeof e=="object"&&"name"in e&&"middleware"in e&&typeof e.name=="string"&&fe(e.middleware)&&("description"in e?typeof e.description=="string"||e.description===void 0:!0)&&("priority"in e?typeof e.priority=="number"||e.priority===void 0:!0)}function pn(e){return e===void 0||e!==null&&typeof e=="object"&&("continueOnError"in e?typeof e.continueOnError=="boolean":!0)&&("logErrors"in e?typeof e.logErrors=="boolean":!0)&&("onError"in e?typeof e.onError=="function"||e.onError===void 0:!0)}var V=class{constructor(t){this.machine=t;this.middlewares=[]}withLogging(t){return this.middlewares.push(n=>ce(n,t)),this}withAnalytics(t,n){return this.middlewares.push(r=>de(r,t,n)),this}withValidation(t,n){return this.middlewares.push(r=>ye(r,t)),this}withPermissions(t){return this.middlewares.push(n=>ue(n,t)),this}withErrorReporting(t,n){return this.middlewares.push(r=>le(r,t,n)),this}withPerformanceMonitoring(t,n){return this.middlewares.push(r=>xe(r,t)),this}withRetry(t){return this.middlewares.push(n=>Me(n,t)),this}withHistory(t){return this.middlewares.push(n=>$(n,t)),this}withSnapshot(t){return this.middlewares.push(n=>W(n,t)),this}withTimeTravel(t){return this.middlewares.push(n=>G(n,t)),this}withDebugging(){return this.middlewares.push(t=>Ge(t)),this}withCustom(t){return this.middlewares.push(t),this}withConditional(t,n){return this.middlewares.push(q(t,n)),this}build(){let t=this.machine;for(let n of this.middlewares)t=n(t);return t}getChain(){return[...this.middlewares]}clear(){return this.middlewares=[],this}};function We(e){return new V(e)}function hn(e={}){return{create:t=>{let n=We(t);return e.logging&&n.withLogging(e.logging),e.analytics&&n.withAnalytics(e.analytics.track,e.analytics.options),e.history&&n.withHistory(e.history),e.snapshot&&n.withSnapshot(e.snapshot),e.timeTravel&&n.withTimeTravel(e.timeTravel),e.retry&&n.withRetry(e.retry),n}}}function Ge(e){return G(W($(e)))}function Y(e){let t={},n=e;for(;n&&n!==Object.prototype;){let r=Object.getOwnPropertyDescriptors(n);for(let[o,a]of Object.entries(r))o!=="constructor"&&(o in t||(t[o]=a));n=Object.getPrototypeOf(n)}return t}function Ue(...e){let t=e[0];class n extends t{constructor(a){super(a)}}let r=o=>function(...a){let s=o.apply(this,a);if(s&&typeof s=="object"&&"context"in s){let i={...this.context,...s.context};return new n(i)}return s};for(let o of e){let a=Y(o.prototype);for(let[s,i]of Object.entries(a))if(s!=="constructor")if(typeof i.value=="function"){let c=i.value,d=r(c);Object.defineProperty(n.prototype,s,{...i,value:d})}else Object.defineProperty(n.prototype,s,i)}return n}function Le(e,...t){class n extends m{constructor(a){super(a)}}let r=Y(e.prototype);for(let[o,a]of Object.entries(r))if(o!=="constructor")if(typeof a.value=="function"){let s=a.value,i=function(...c){let d=s.apply(this,c);return d&&typeof d=="object"&&"context"in d?new n({...this.context,...d.context}):d};Object.defineProperty(n.prototype,o,{...a,value:i})}else Object.defineProperty(n.prototype,o,a);for(let o of t){let a=Y(o.prototype);for(let s of Object.keys(a))Object.prototype.hasOwnProperty.call(n.prototype,s)&&delete n.prototype[s]}return n}function mn(...e){let t=e.map(a=>a.constructor),n=e.map(a=>a.context),r=Object.assign({},...n),o=Ue(...t);return new o(r)}function Tn(e,...t){let n=e.constructor,r=t.map(a=>a.constructor),o=Le(n,...r);return new o(e.context)}function Ve(e,t){return e instanceof t}function qe(e,...t){return{type:e,args:t}}function Ye(e,t){return v(e,n=>({...n,...t}))}async function Je(e,...t){let n=e;for(let r of t)n=await r(n);return n}function Qe(e,t){return t?console.log(t,e.context):console.log(e.context),e}function Xe(e,t){return function(...n){let r=t(this.context,...n);return h(r,e())}}function Ze(e,t,...n){return e.apply(t,n)}function pe(e){return new Proxy(e,{get(t,n){let r=t[n];return typeof r=="function"?function(...o){let a=r.apply(t,o);return a&&typeof a=="object"&&"context"in a?pe(a):a}:r}})}var J=class e{constructor(t){return this.wrappedMachine=t,new Proxy(this,{get:(n,r)=>{if(r==="wrappedMachine")return Reflect.get(n,r);if(r==="context")return this.wrappedMachine.context;let o=this.wrappedMachine[r];return typeof o=="function"?(...a)=>{let s=o.apply(this.wrappedMachine,a);return s&&typeof s=="object"&&"context"in s?new e(s):s}:o}})}};function et(){return function(t){return function(...n){let r=t(this.context,...n);return h(r,this)}}}function he(e){return{machine:e,addTransition:function(t,n){let r=function(...a){let s=n(this.context,...a);return h(s,this)},o=ge(e,{[t]:r});return he(o)}}}function Ce(e){return function(n){let r={},o=Object.fromEntries(Object.entries(n).map(([a,s])=>[a,function(...i){let c=s(this.context,...i);return h(c,r)}]));return Object.assign(r,o),h(e,r)}}function tt(e,t){return t!==void 0?h(e,t):Ce(e)}function nt(...e){let t=new Map;for(let[i,c,d]of e){if(t.has(i))throw new Error(`Duplicate matcher case name: "${i}"`);t.set(i,{predicate:d})}let n=new Proxy({},{get(i,c){return function(y){let u=t.get(c);if(!u){let x=Array.from(t.keys()).join(", ");throw new Error(`Unknown matcher case: "${c}". Available cases: ${x}`)}return u.predicate(y)}}}),r=new Proxy({},{get(i,c){return function(y){if(!t.has(c)){let u=Array.from(t.keys()).join(", ");throw new Error(`Unknown matcher case: "${c}". Available cases: ${u}`)}return{__brand:"CaseHandler",__name:c,__machine:void 0,__return:void 0,handler:y}}}}),o={__exhaustive:!0};function a(i){return{is(...c){if(c.length===0)throw new Error("Pattern match requires at least one handler and exhaustiveness marker");let d=c[c.length-1];if(!d||typeof d!="object"||!("__exhaustive"in d))throw new Error("Pattern match must end with match.exhaustive for compile-time exhaustiveness checking");let y=c.slice(0,-1);for(let l of y){let M=l.__name,f=t.get(M);if(!f)throw new Error(`Internal error: Unknown matcher case in handler: ${M}`);if(f.predicate(i))return l.handler(i)}let u=y.map(l=>l.__name).join(", "),x=Array.from(t.keys()).join(", ");throw new Error(`Non-exhaustive pattern match at runtime: no handler matched the machine.
2
+ Handled cases: [${u}]
3
3
  All cases: [${x}]
4
- This may occur if predicates don't cover all runtime possibilities.`)}}}function s(i){for(let[c,d,u]of e)if(u(i))return c;return null}return Object.assign(s,{is:n,when:a,case:r,exhaustive:o})}function nt(e,t){return[e,void 0,n=>n instanceof t]}function rt(e,t,n){return[e,void 0,r=>J(r,t,n)]}function ot(e,t){return[e,void 0,t]}function at(){return{case(e,t,n){return[e,void 0,r=>J(r,t,n)]}}}var R=class R{constructor(t){this._observers=new Set;this._queue=[];this._processing=!1;this._state=t,this.ref={send:n=>this.dispatch(n)},this.send=new Proxy({},{get:(n,r)=>(...o)=>{this.dispatch({type:r,args:o})}})}static inspect(t){R._inspector=t}getSnapshot(){return this._state}subscribe(t){return this._observers.add(t),()=>{this._observers.delete(t)}}select(t){return t(this._state)}start(){return this}stop(){this._observers.clear()}dispatch(t){if(R._inspector&&R._inspector({type:"@actor/send",actor:this,event:t,snapshot:this._state}),this._processing){this._queue.push(t);return}this._processing=!0,this._queue.push(t),this._flush()}_flush(){for(;this._queue.length>0;){let t=this._queue[0];this._queue.shift();let r=this._state[t.type];if(typeof r!="function"){console.warn(`[Actor] Transition '${String(t.type)}' not found.`);continue}let o;try{o=r.apply(this._state,t.args)}catch(a){console.error(`[Actor] Error in transition '${String(t.type)}':`,a);continue}if(o instanceof Promise){o.then(a=>{this._state=a,this._notify(),this._flush()}).catch(a=>{console.error(`[Actor] Async error in transition '${String(t.type)}':`,a),this._flush()});return}else this._state=o,this._notify()}this._processing=!1}_notify(){let t=this.getSnapshot();this._observers.forEach(n=>n(t))}};R._inspector=null;var O=R;function P(e){return new O(e)}function st(e){return P(e)}function it(e){let n=h({status:"pending",data:void 0,error:void 0},o=>({resolve(a){return o({status:"resolved",data:a,error:void 0})},reject(a){return o({status:"rejected",error:a,data:void 0})}})),r=P(n);return e().then(o=>r.send.resolve(o)).catch(o=>r.send.reject(o)),r}function ct(e){let n=h({status:"active",value:void 0,error:void 0},o=>({next(a){return o({status:"active",value:a,error:void 0})},error(a){return o({status:"error",error:a,value:void 0})},complete(){return o({status:"done",value:void 0,error:void 0})}})),r=P(n);return e.subscribe(o=>r.send.next(o),o=>r.send.error(o),()=>r.send.complete()),r}function ge(e,t){let n=t,r=Object.fromEntries(Object.entries(t).map(([o,a])=>[o,function(...s){let i={context:this.context},c=a.apply(i,s);return ge(c,n)}]));return Object.values(r).forEach(o=>{typeof o=="function"&&Object.defineProperty(o,"__contextBound",{value:!0,enumerable:!1})}),b(Object.assign({context:e},r),r)}function dt(e,t,...n){let r=e[t],o={context:e.context};return r.apply(o,n)}function ut(e){let t=Object.values(e).find(n=>typeof n=="function");return t?t.__contextBound===!0:!1}var Q={};ee(Q,{factory:()=>pt,freeze:()=>me,isState:()=>lt,machine:()=>k,match:()=>xt,run:()=>ft,runnable:()=>Mt,tag:()=>yt,union:()=>ht,withChildren:()=>Te});function yt(e,t){return typeof e=="object"?e:t?{...t,tag:e}:{tag:e}}function lt(e,t){return e.tag===t}function me(e){if(Object.freeze(e),typeof Object.values=="function")for(let t of Object.values(e))t&&typeof t=="object"&&me(t);return e}function k(e,t){let r=t(e,o=>k(o,t));return Object.assign({},e,r)}function xt(e,t){let n=t[e.tag];return n(e)}var j=Symbol("lifecycle");function Mt(e,t){let n={...e};return n[j]=t,n}function ft(e){let t=e,n=null,r=new Set,o=()=>{r.forEach(i=>i(t))},a=()=>{n&&(n(),n=null);let i=t[j],c=t.tag,d=i==null?void 0:i[c];d!=null&&d.onEnter&&(n=d.onEnter(s))},s=(i,...c)=>{let d=t[i];if(typeof d=="function"){let u=d(...c);if(u&&typeof u=="object"&&"tag"in u){let y=u;!y[j]&&t[j]&&(y[j]=t[j]),t=y,a(),o()}}};return a(),{get:()=>t,send:s,stop:()=>{n&&(n(),n=null),r.clear()},subscribe:i=>(r.add(i),()=>r.delete(i))}}function Te(e,t){let n={...e};for(let r of Object.keys(t)){let o=t[r],a=new Proxy(o,{get(s,i){let c=s[i];return typeof c=="function"?(...d)=>{let u=c(...d);return Te({...e},{...t,[r]:u})}:c}});n[r]=a}return n}function pt(){return e=>t=>k(t,e)}function ht(){return e=>{let t=n=>{let r=e[n.tag];return k(n,(o,a)=>r(o,t))};return t}}var X={};ee(X,{createDelegate:()=>Ct,delegate:()=>be,delegateAll:()=>gt,renameMap:()=>mt});function be(e,t,n,r){let o=e[t],a={},s=Object.keys(o).filter(c=>typeof o[c]=="function"),i;if(!r)i=Object.fromEntries(s.map(c=>[c,c]));else if("pick"in r)i=Object.fromEntries(r.pick.filter(c=>s.includes(c)).map(c=>[c,c]));else if("omit"in r){let c=new Set(r.omit);i=Object.fromEntries(s.filter(d=>!c.has(d)).map(d=>[d,d]))}else"rename"in r?i=Object.fromEntries(Object.entries(r.rename).filter(([c])=>s.includes(c))):i={};for(let[c,d]of Object.entries(i)){let u=o[c];a[d]=(...y)=>{let x=u.apply(o,y);return n({...e,[t]:x})}}return a}function Ct(e,t){return(n,r)=>be(e,n,t,r)}function gt(e,t,n,r=!1){let o={};for(let a of t){let s=e[a],i=Object.keys(s).filter(c=>typeof s[c]=="function");for(let c of i){let d=r?`${String(a)}_${c}`:c,u=s[c];o[d]=(...y)=>{let x=u.apply(s,y);return n({...e,[a]:x})}}}return o}function mt(){return e=>e}function h(e,t){if(typeof t=="function"){let a;return a=t(i=>h(i,a)),b(Object.assign({context:e},a),a)}let n=A(t),r=n!=null?n:"context"in t?F(t):t,o=Object.assign({context:e},r);return b(o,r)}function Tt(e,t){if(typeof t=="function"){let a;return a=t(i=>Tt(i,a)),b(Object.assign({context:e},a),a)}let n=A(t),r=n!=null?n:"context"in t?F(t):t,o=Object.assign({context:e},r);return b(o,r)}function Jn(){return e=>{let t=Object.fromEntries(Object.entries(e).map(([n,r])=>[n,function(...o){let a=r(this.context,...o);return h(a,t)}]));return n=>h(n,t)}}function v(e,t){var a;let n=e.context,r=(a=A(e))!=null?a:F(e),o=typeof t=="function"?t(n):t;return h(o,r)}function Qn(e){return{context:e}}function Xn(e,t){let{context:n,...r}=e,o={...r,...t};return h(n,o)}function Ce(e,t){let{context:n,...r}=e,o={...r,...t};return h(n,o)}function Zn(e,t){return(...n)=>{let r=e(...n),o=t(),a={...r.context,...o.context},{context:s,...i}=r,{context:c,...d}=o,u={...i,...d};return h(a,u)}}function er(e){let{context:t,...n}=e;return r=>h(r,n)}function tr(e,t,n){let r=e.context[t],o=n[r];if(!o)throw new Error(`No handler found for state: ${String(r)}`);return o(e.context)}function J(e,t,n){return e.context[t]===n}function nr(e,t){let n=e,r=null;async function o(a){r&&(r.abort(),r=null);let s=n[a.type];if(typeof s!="function")throw new Error(`[Machine] Unknown event type '${String(a.type)}' on current state.`);let i=new AbortController;r=i;try{let d=await s.apply(n,[...a.args,{signal:i.signal}]);return i.signal.aborted||(n=d,t==null||t(n)),n}finally{r===i&&(r=null)}}return{get state(){return n.context},dispatch:o,stop:()=>{r&&(r.abort(),r=null)}}}function rr(e,t){return v(e,n=>t(n))}export{O as Actor,Y as BoundMachine,se as CANCEL,Oe as META_KEY,m as MachineBase,Ue as MachineExclude,Ge as MachineUnion,L as MiddlewareBuilder,oe as MultiMachineBase,Be as action,fe as bindTransitions,cn as branch,Xe as call,dt as callWithContext,tn as chain,nt as classCase,sn as combine,Zn as combineFactories,en as compose,G as composeTyped,P as createActor,Tt as createAsyncMachine,Qn as createContext,ge as createContextBoundMachine,$t as createCustomMiddleware,De as createEnsemble,jt as createEnsembleFactory,Ve as createEvent,zt as createFetchMachine,je as createFlow,he as createFunctionalMachine,h as createMachine,er as createMachineBuilder,Jn as createMachineFactory,tt as createMatcher,g as createMiddleware,hn as createMiddlewareFactory,on as createMiddlewareRegistry,St as createMultiMachine,Ot as createMutableMachine,ae as createParallelMachine,an as createPipeline,ze as createRunner,Qe as createTransition,pe as createTransitionExtender,Ze as createTransitionFactory,ot as customCase,X as delegate,Ht as delegateToChild,ke as describe,rt as discriminantCase,Ce as extendTransitions,at as forContext,me as freeze,ct as fromObservable,it as fromPromise,K as guard,_ as guardAsync,Ke as guarded,J as hasState,nn as inDevelopment,_e as invoke,dn as isConditionalMiddleware,ut as isContextBound,yn as isMiddlewareContext,ln as isMiddlewareError,Me as isMiddlewareFn,xn as isMiddlewareHooks,Mn as isMiddlewareOptions,un as isMiddlewareResult,fn as isNamedMiddleware,pn as isPipelineConfig,Le as isState,Je as logState,Tn as machineExclude,mn as machineUnion,tr as matchMachine,qe as mergeContext,Ie as metadata,$e as middlewareBuilder,Q as minimal,rr as next,Xn as overrideTransitions,Ye as pipeTransitions,ne as run,Fe as runAsync,nr as runMachine,Re as runSequence,Ae as runWithDebug,Ft as runWithEnsemble,At as runWithRunner,v as setContext,st as spawn,et as state,Ee as step,Se as stepAsync,yt as tag,It as toggle,Pe as transitionTo,V as when,rn as whenContext,Ne as whenGuard,He as whenGuardAsync,ce as withAnalytics,We as withDebugging,ye as withErrorReporting,D as withHistory,ie as withLogging,le as withPerformanceMonitoring,ue as withPermissions,xe as withRetry,$ as withSnapshot,W as withTimeTravel,de as withValidation,ve as yieldMachine};
4
+ This may occur if predicates don't cover all runtime possibilities.`)}}}function s(i){for(let[c,d,y]of e)if(y(i))return c;return null}return Object.assign(s,{is:n,when:a,case:r,exhaustive:o})}function rt(e,t){return[e,void 0,n=>n instanceof t]}function ot(e,t,n){return[e,void 0,r=>Q(r,t,n)]}function at(e,t){return[e,void 0,t]}function st(){return{case(e,t,n){return[e,void 0,r=>Q(r,t,n)]}}}var R=class R{constructor(t){this._observers=new Set;this._queue=[];this._processing=!1;this._state=t,this.ref={send:n=>this.dispatch(n)},this.send=new Proxy({},{get:(n,r)=>(...o)=>{this.dispatch({type:r,args:o})}})}static inspect(t){R._inspector=t}getSnapshot(){return this._state}subscribe(t){return this._observers.add(t),()=>{this._observers.delete(t)}}select(t){return t(this._state)}start(){return this}stop(){this._observers.clear()}dispatch(t){if(R._inspector&&R._inspector({type:"@actor/send",actor:this,event:t,snapshot:this._state}),this._processing){this._queue.push(t);return}this._processing=!0,this._queue.push(t),this._flush()}_flush(){for(;this._queue.length>0;){let t=this._queue[0];this._queue.shift();let r=this._state[t.type];if(typeof r!="function"){console.warn(`[Actor] Transition '${String(t.type)}' not found.`);continue}let o;try{o=r.apply(this._state,t.args)}catch(a){console.error(`[Actor] Error in transition '${String(t.type)}':`,a);continue}if(o instanceof Promise){o.then(a=>{this._state=a,this._notify(),this._flush()}).catch(a=>{console.error(`[Actor] Async error in transition '${String(t.type)}':`,a),this._flush()});return}else this._state=o,this._notify()}this._processing=!1}_notify(){let t=this.getSnapshot();this._observers.forEach(n=>n(t))}};R._inspector=null;var O=R;function P(e){return new O(e)}function it(e){return P(e)}function ct(e){let n=h({status:"pending",data:void 0,error:void 0},o=>({resolve(a){return o({status:"resolved",data:a,error:void 0})},reject(a){return o({status:"rejected",error:a,data:void 0})}})),r=P(n);return e().then(o=>r.send.resolve(o)).catch(o=>r.send.reject(o)),r}function dt(e){let n=h({status:"active",value:void 0,error:void 0},o=>({next(a){return o({status:"active",value:a,error:void 0})},error(a){return o({status:"error",error:a,value:void 0})},complete(){return o({status:"done",value:void 0,error:void 0})}})),r=P(n);return e.subscribe(o=>r.send.next(o),o=>r.send.error(o),()=>r.send.complete()),r}function me(e,t){let n=t,r=Object.fromEntries(Object.entries(t).map(([o,a])=>[o,function(...s){let i={context:this.context},c=a.apply(i,s);return me(c,n)}]));return Object.values(r).forEach(o=>{typeof o=="function"&&Object.defineProperty(o,"__contextBound",{value:!0,enumerable:!1})}),b(Object.assign({context:e},r),r)}function yt(e,t,...n){let r=e[t],o={context:e.context};return r.apply(o,n)}function ut(e){let t=Object.values(e).find(n=>typeof n=="function");return t?t.__contextBound===!0:!1}var X={};te(X,{factory:()=>pt,freeze:()=>Te,isState:()=>lt,machine:()=>K,match:()=>xt,run:()=>ft,runnable:()=>Mt,tag:()=>k,union:()=>ht,withChildren:()=>be});function k(e,t){return typeof e=="object"?e:t?{...t,tag:e}:{tag:e}}(t=>{function e(n){return n?r=>t(n,r):r=>o=>t(r,o)}t.factory=e})(k||(k={}));function lt(e,t){return e.tag===t}function Te(e){if(Object.freeze(e),typeof Object.values=="function")for(let t of Object.values(e))t&&typeof t=="object"&&Te(t);return e}function K(e,t){let r=t(e,o=>K(o,t));return Object.assign({},e,r)}function xt(e,t){let n=t[e.tag];return n(e)}var j=Symbol("lifecycle");function Mt(e,t){let n={...e};return n[j]=t,n}function ft(e){let t=e,n=null,r=new Set,o=()=>{r.forEach(i=>i(t))},a=()=>{n&&(n(),n=null);let i=t[j],c=t.tag,d=i==null?void 0:i[c];d!=null&&d.onEnter&&(n=d.onEnter(s))},s=(i,...c)=>{let d=t[i];if(typeof d=="function"){let y=d(...c);if(y&&typeof y=="object"&&"tag"in y){let u=y;!u[j]&&t[j]&&(u[j]=t[j]),t=u,a(),o()}}};return a(),{get:()=>t,send:s,stop:()=>{n&&(n(),n=null),r.clear()},subscribe:i=>(r.add(i),()=>r.delete(i))}}function be(e,t){let n={...e};for(let r of Object.keys(t)){let o=t[r],a=new Proxy(o,{get(s,i){let c=s[i];return typeof c=="function"?(...d)=>{let y=c(...d);return be({...e},{...t,[r]:y})}:c}});n[r]=a}return n}function pt(){return e=>t=>K(t,e)}function ht(){return e=>{let t=n=>{let r=e[n.tag];return K(n,(o,a)=>r(o,t))};return t}}var Z={};te(Z,{createDelegate:()=>Ct,delegate:()=>we,delegateAll:()=>gt,renameMap:()=>mt});function we(e,t,n,r){let o=e[t],a={},s=Object.keys(o).filter(c=>typeof o[c]=="function"),i;if(!r)i=Object.fromEntries(s.map(c=>[c,c]));else if("pick"in r)i=Object.fromEntries(r.pick.filter(c=>s.includes(c)).map(c=>[c,c]));else if("omit"in r){let c=new Set(r.omit);i=Object.fromEntries(s.filter(d=>!c.has(d)).map(d=>[d,d]))}else"rename"in r?i=Object.fromEntries(Object.entries(r.rename).filter(([c])=>s.includes(c))):i={};for(let[c,d]of Object.entries(i)){let y=o[c];a[d]=(...u)=>{let x=y.apply(o,u);return n({...e,[t]:x})}}return a}function Ct(e,t){return(n,r)=>we(e,n,t,r)}function gt(e,t,n,r=!1){let o={};for(let a of t){let s=e[a],i=Object.keys(s).filter(c=>typeof s[c]=="function");for(let c of i){let d=r?`${String(a)}_${c}`:c,y=s[c];o[d]=(...u)=>{let x=y.apply(s,u);return n({...e,[a]:x})}}}return o}function mt(){return e=>e}function h(e,t){if(typeof t=="function"){let a;return a=t(i=>h(i,a)),b(Object.assign({context:e},a),a)}let n=A(t),r=n!=null?n:"context"in t?F(t):t,o=Object.assign({context:e},r);return b(o,r)}function Tt(e,t){if(typeof t=="function"){let a;return a=t(i=>Tt(i,a)),b(Object.assign({context:e},a),a)}let n=A(t),r=n!=null?n:"context"in t?F(t):t,o=Object.assign({context:e},r);return b(o,r)}function Jn(){return e=>{let t=Object.fromEntries(Object.entries(e).map(([n,r])=>[n,function(...o){let a=r(this.context,...o);return h(a,t)}]));return n=>h(n,t)}}function v(e,t){var a;let n=e.context,r=(a=A(e))!=null?a:F(e),o=typeof t=="function"?t(n):t;return h(o,r)}function Qn(e){return{context:e}}function Xn(e,t){let{context:n,...r}=e,o={...r,...t};return h(n,o)}function ge(e,t){let{context:n,...r}=e,o={...r,...t};return h(n,o)}function Zn(e,t){return(...n)=>{let r=e(...n),o=t(),a={...r.context,...o.context},{context:s,...i}=r,{context:c,...d}=o,y={...i,...d};return h(a,y)}}function er(e){let{context:t,...n}=e;return r=>h(r,n)}function tr(e,t,n){let r=e.context[t],o=n[r];if(!o)throw new Error(`No handler found for state: ${String(r)}`);return o(e.context)}function Q(e,t,n){return e.context[t]===n}function nr(e,t){let n=e,r=null;async function o(a){r&&(r.abort(),r=null);let s=n[a.type];if(typeof s!="function")throw new Error(`[Machine] Unknown event type '${String(a.type)}' on current state.`);let i=new AbortController;r=i;try{let d=await s.apply(n,[...a.args,{signal:i.signal}]);return i.signal.aborted||(n=d,t==null||t(n)),n}finally{r===i&&(r=null)}}return{get state(){return n.context},dispatch:o,stop:()=>{r&&(r.abort(),r=null)}}}function rr(e,t){return v(e,n=>t(n))}export{O as Actor,J as BoundMachine,ie as CANCEL,Pe as META_KEY,m as MachineBase,Le as MachineExclude,Ue as MachineUnion,V as MiddlewareBuilder,ae as MultiMachineBase,Ne as action,pe as bindTransitions,cn as branch,Ze as call,yt as callWithContext,tn as chain,rt as classCase,sn as combine,Zn as combineFactories,en as compose,U as composeTyped,P as createActor,Tt as createAsyncMachine,Qn as createContext,me as createContextBoundMachine,$t as createCustomMiddleware,$e as createEnsemble,jt as createEnsembleFactory,qe as createEvent,zt as createFetchMachine,Ae as createFlow,Ce as createFunctionalMachine,h as createMachine,er as createMachineBuilder,Jn as createMachineFactory,nt as createMatcher,g as createMiddleware,hn as createMiddlewareFactory,on as createMiddlewareRegistry,St as createMultiMachine,Ot as createMutableMachine,se as createParallelMachine,an as createPipeline,De as createRunner,Xe as createTransition,he as createTransitionExtender,et as createTransitionFactory,at as customCase,Z as delegate,Ht as delegateToChild,Ke as describe,ot as discriminantCase,ge as extendTransitions,st as forContext,Te as freeze,dt as fromObservable,ct as fromPromise,_ as guard,B as guardAsync,_e as guarded,Q as hasState,nn as inDevelopment,Be as invoke,dn as isConditionalMiddleware,ut as isContextBound,un as isMiddlewareContext,ln as isMiddlewareError,fe as isMiddlewareFn,xn as isMiddlewareHooks,Mn as isMiddlewareOptions,yn as isMiddlewareResult,fn as isNamedMiddleware,pn as isPipelineConfig,Ve as isState,Qe as logState,Tn as machineExclude,mn as machineUnion,tr as matchMachine,Ye as mergeContext,ze as metadata,We as middlewareBuilder,X as minimal,rr as next,Xn as overrideTransitions,Je as pipeTransitions,re as run,Se as runAsync,nr as runMachine,je as runSequence,Fe as runWithDebug,Ft as runWithEnsemble,At as runWithRunner,v as setContext,it as spawn,tt as state,ve as step,Oe as stepAsync,k as tag,It as toggle,ke as transitionTo,q as when,rn as whenContext,He as whenGuard,Ie as whenGuardAsync,de as withAnalytics,Ge as withDebugging,le as withErrorReporting,$ as withHistory,ce as withLogging,xe as withPerformanceMonitoring,ue as withPermissions,Me as withRetry,W as withSnapshot,G as withTimeTravel,ye as withValidation,Re as yieldMachine};
@@ -1 +1 @@
1
- function p(n,e){return typeof n=="object"?n:e?{...e,tag:n}:{tag:n}}function C(n,e){return n.tag===e}function T(n){if(Object.freeze(n),typeof Object.values=="function")for(let e of Object.values(n))e&&typeof e=="object"&&T(e);return n}function y(n,e){let a=e(n,o=>y(o,e));return Object.assign({},n,a)}function M(n,e){let t=e[n.tag];return t(n)}var g=Symbol("lifecycle");function h(n,e){let t={...n};return t[g]=e,t}function b(n){let e=n,t=null,a=new Set,o=()=>{a.forEach(s=>s(e))},x=()=>{t&&(t(),t=null);let s=e[g],i=e.tag,r=s==null?void 0:s[i];r!=null&&r.onEnter&&(t=r.onEnter(d))},d=(s,...i)=>{let r=e[s];if(typeof r=="function"){let c=r(...i);if(c&&typeof c=="object"&&"tag"in c){let u=c;!u[g]&&e[g]&&(u[g]=e[g]),e=u,x(),o()}}};return x(),{get:()=>e,send:d,stop:()=>{t&&(t(),t=null),a.clear()},subscribe:s=>(a.add(s),()=>a.delete(s))}}function f(n,e){let t={...n};for(let a of Object.keys(e)){let o=e[a],x=new Proxy(o,{get(d,s){let i=d[s];return typeof i=="function"?(...r)=>{let c=i(...r);return f({...n},{...e,[a]:c})}:i}});t[a]=x}return t}function R(){return n=>e=>y(e,n)}function k(){return n=>{let e=t=>{let a=n[t.tag];return y(t,(o,x)=>a(o,e))};return e}}export{R as factory,T as freeze,C as isState,y as machine,M as match,b as run,h as runnable,p as tag,k as union,f as withChildren};
1
+ function u(t,e){return typeof t=="object"?t:e?{...e,tag:t}:{tag:t}}(e=>{function t(n){return n?a=>e(n,a):a=>s=>e(a,s)}e.factory=t})(u||(u={}));function C(t,e){return t.tag===e}function p(t){if(Object.freeze(t),typeof Object.values=="function")for(let e of Object.values(t))e&&typeof e=="object"&&p(e);return t}function f(t,e){let a=e(t,s=>f(s,e));return Object.assign({},t,a)}function l(t,e){let n=e[t.tag];return n(t)}var g=Symbol("lifecycle");function b(t,e){let n={...t};return n[g]=e,n}function h(t){let e=t,n=null,a=new Set,s=()=>{a.forEach(r=>r(e))},x=()=>{n&&(n(),n=null);let r=e[g],c=e.tag,o=r==null?void 0:r[c];o!=null&&o.onEnter&&(n=o.onEnter(d))},d=(r,...c)=>{let o=e[r];if(typeof o=="function"){let i=o(...c);if(i&&typeof i=="object"&&"tag"in i){let y=i;!y[g]&&e[g]&&(y[g]=e[g]),e=y,x(),s()}}};return x(),{get:()=>e,send:d,stop:()=>{n&&(n(),n=null),a.clear()},subscribe:r=>(a.add(r),()=>a.delete(r))}}function T(t,e){let n={...t};for(let a of Object.keys(e)){let s=e[a],x=new Proxy(s,{get(d,r){let c=d[r];return typeof c=="function"?(...o)=>{let i=c(...o);return T({...t},{...e,[a]:i})}:c}});n[a]=x}return n}function j(){return t=>e=>f(e,t)}function R(){return t=>{let e=n=>{let a=t[n.tag];return f(n,(s,x)=>a(s,e))};return e}}export{j as factory,p as freeze,C as isState,f as machine,l as match,h as run,b as runnable,u as tag,R as union,T as withChildren};
@@ -23,6 +23,19 @@ export type Tagged<T extends string = string> = {
23
23
  * Extracts the tag literal type from a tagged object.
24
24
  */
25
25
  export type TagOf<T extends Tagged> = T['tag'];
26
+ /**
27
+ * Utility to define a union of tagged states from a mapping type.
28
+ * @example
29
+ * type PickMode = States<{
30
+ * idle: {},
31
+ * active: { isCloseMode: boolean; timeoutId: number }
32
+ * }>;
33
+ */
34
+ export type States<M extends Record<string, object>> = {
35
+ [K in keyof M]: {
36
+ readonly tag: K;
37
+ } & M[K];
38
+ }[keyof M];
26
39
  /**
27
40
  * Cleanup function returned from onEnter.
28
41
  */
@@ -50,6 +63,40 @@ export declare function tag<T extends string, O extends object>(name: T, props:
50
63
  export declare function tag<const T extends {
51
64
  tag: string;
52
65
  }>(obj: T): T;
66
+ /**
67
+ * Namespace for tag factory utility.
68
+ */
69
+ export declare namespace tag {
70
+ /**
71
+ * Creates a pre-bound tag factory for a specific state.
72
+ *
73
+ * @typeParam C - Context (data) type
74
+ * @typeParam T - Transitions type (optional, for machine return types)
75
+ * @param name - The tag name for this state
76
+ * @returns A function that takes context data and returns a tagged object
77
+ *
78
+ * @typeParam C - Context (data) type
79
+ * @typeParam T - Transitions type (optional)
80
+ * @param name - The tag name
81
+ * @example const idle = tag.factory<{ count: number }>('idle');
82
+ */
83
+ function factory<C extends object, T extends object = {}>(name: string): (props: C) => {
84
+ readonly tag: string;
85
+ } & C & T;
86
+ /**
87
+ * Creates a curried tag factory, ideal for use with the States utility.
88
+ * @example const state = tag.factory<AppState>()('idle')({ count: 0 });
89
+ */
90
+ function factory<C extends object, T extends object = {}>(): <K extends string>(name: K) => (props: Omit<Extract<C, {
91
+ tag: K;
92
+ }>, 'tag'>) => (Extract<C, {
93
+ tag: K;
94
+ }> extends never ? {
95
+ readonly tag: K;
96
+ } & C : Extract<C, {
97
+ tag: K;
98
+ }>) & T;
99
+ }
53
100
  /**
54
101
  * Type guard to check if a machine or object is in a specific state.
55
102
  */
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH;;GAEG;AACH,MAAM,MAAM,OAAO,CAAC,CAAC,IAAI,CAAC,SAAS;IAAE,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC,CAAA;CAAE,GAAG,CAAC,GAAG,CAAC,CAAC;AAEzE;;GAEG;AACH,MAAM,MAAM,WAAW,CAAC,CAAC,IAAI,CAAC,SAAS;IAAE,QAAQ,CAAC,OAAO,EAAE,GAAG,CAAA;CAAE,GAAG,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;AAEnF;;GAEG;AACH,MAAM,MAAM,MAAM,CAAC,CAAC,SAAS,MAAM,GAAG,MAAM,IAAI;IAAE,QAAQ,CAAC,GAAG,EAAE,CAAC,CAAA;CAAE,CAAC;AAEpE;;GAEG;AACH,MAAM,MAAM,KAAK,CAAC,CAAC,SAAS,MAAM,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC;AAE/C;;GAEG;AACH,MAAM,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC;AAEjC;;;;;GAKG;AACH,MAAM,MAAM,YAAY,CAAC,CAAC,SAAS,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,GAAG,IAAI,UAAU,CAAC,CAAC,CAAC,CAAC;AAE5E;;GAEG;AACH,MAAM,MAAM,SAAS,CAAC,CAAC,SAAS,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,GAAG,IAAI,YAAY,CAAC,CAAC,CAAC,CAAC;AAE3E;;GAEG;AACH,wBAAgB,GAAG,CAAC,CAAC,SAAS,MAAM,EAAE,IAAI,EAAE,CAAC,GAAG;IAAE,GAAG,EAAE,CAAC,CAAA;CAAE,CAAC;AAC3D,wBAAgB,GAAG,CAAC,CAAC,SAAS,MAAM,EAAE,CAAC,SAAS,MAAM,EAAE,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,GAAG;IAAE,GAAG,EAAE,CAAC,CAAA;CAAE,GAAG,CAAC,CAAC;AAC3F,wBAAgB,GAAG,CAAC,KAAK,CAAC,CAAC,SAAS;IAAE,GAAG,EAAE,MAAM,CAAA;CAAE,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC;AAchE;;GAEG;AACH,wBAAgB,OAAO,CAAC,CAAC,SAAS,MAAM,EAAE,GAAG,SAAS,KAAK,CAAC,CAAC,CAAC,EAC5D,OAAO,EAAE,CAAC,EACV,QAAQ,EAAE,GAAG,GACZ,OAAO,IAAI,OAAO,CAAC,CAAC,EAAE;IAAE,GAAG,EAAE,GAAG,CAAA;CAAE,CAAC,CAErC;AAED;;GAEG;AACH,wBAAgB,MAAM,CAAC,CAAC,SAAS,MAAM,EAAE,GAAG,EAAE,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,CAU5D"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@doeixd/machine",
3
- "version": "1.1.0",
3
+ "version": "1.2.0",
4
4
  "files": [
5
5
  "dist",
6
6
  "src"
package/src/types.ts CHANGED
@@ -22,6 +22,18 @@ export type Tagged<T extends string = string> = { readonly tag: T };
22
22
  */
23
23
  export type TagOf<T extends Tagged> = T['tag'];
24
24
 
25
+ /**
26
+ * Utility to define a union of tagged states from a mapping type.
27
+ * @example
28
+ * type PickMode = States<{
29
+ * idle: {},
30
+ * active: { isCloseMode: boolean; timeoutId: number }
31
+ * }>;
32
+ */
33
+ export type States<M extends Record<string, object>> = {
34
+ [K in keyof M]: { readonly tag: K } & M[K]
35
+ }[keyof M];
36
+
25
37
  /**
26
38
  * Cleanup function returned from onEnter.
27
39
  */
@@ -59,6 +71,38 @@ export function tag<T extends string, O extends object>(
59
71
  return { tag: nameOrObj };
60
72
  }
61
73
 
74
+ /**
75
+ * Namespace for tag factory utility.
76
+ */
77
+ export namespace tag {
78
+ /**
79
+ * Creates a pre-bound tag factory for a specific state.
80
+ *
81
+ * @typeParam C - Context (data) type
82
+ * @typeParam T - Transitions type (optional, for machine return types)
83
+ * @param name - The tag name for this state
84
+ * @returns A function that takes context data and returns a tagged object
85
+ *
86
+ * @typeParam C - Context (data) type
87
+ * @typeParam T - Transitions type (optional)
88
+ * @param name - The tag name
89
+ * @example const idle = tag.factory<{ count: number }>('idle');
90
+ */
91
+ export function factory<C extends object, T extends object = {}>(name: string): (props: C) => { readonly tag: string } & C & T;
92
+ /**
93
+ * Creates a curried tag factory, ideal for use with the States utility.
94
+ * @example const state = tag.factory<AppState>()('idle')({ count: 0 });
95
+ */
96
+ export function factory<C extends object, T extends object = {}>(): <K extends string>(name: K) => (props: Omit<Extract<C, { tag: K }>, 'tag'>) => (Extract<C, { tag: K }> extends never ? { readonly tag: K } & C : Extract<C, { tag: K }>) & T;
97
+
98
+ export function factory(name?: string) {
99
+ if (name) {
100
+ return (props: any) => tag(name, props);
101
+ }
102
+ return (name: string) => (props: any) => tag(name, props);
103
+ }
104
+ }
105
+
62
106
  /**
63
107
  * Type guard to check if a machine or object is in a specific state.
64
108
  */