@stateforward/hsm.ts 0.1.0 → 0.1.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.cjs +60 -17
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +14 -3
- package/dist/index.d.ts +14 -3
- package/dist/index.js +60 -17
- package/dist/index.js.map +1 -1
- package/package.json +4 -4
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/hsm.ts"],"sourcesContent":["import { kinds, makeKind, isKind, type Kind } from \"./kind.ts\";\nexport { kinds, makeKind, isKind, kinds as Kinds, makeKind as MakeKind, isKind as IsKind };\n\ntype Path = string;\ntype TimerHandle = ReturnType<typeof setTimeout>;\ntype TimerFunction = (\n callback: (...args: Array<unknown>) => void,\n timeout?: number,\n ...args: Array<unknown>\n) => TimerHandle;\ntype CancelFunction = (id: TimerHandle | undefined) => void;\ntype AnyModelElement = State | Transition | Behavior | Constraint | Vertex;\ntype TransitionTable = Record<Path, TransitionCandidate[]>;\ntype TransitionCandidate = {\n transition: Transition;\n priority: number;\n};\n\ntype EventRecord = {\n kind: Kind;\n name: string;\n data?: any;\n schema?: any;\n source?: string;\n target?: string;\n id?: string;\n qualifiedName?: string;\n};\n\ntype Element = {\n kind: Kind;\n qualifiedName: Path;\n id?: string;\n};\n\ntype Vertex = Element & {\n transitions: Path[];\n};\n\ntype State = Vertex & {\n entry: Path[];\n exit: Path[];\n activities: Path[];\n deferred: Path[];\n initial?: Path;\n};\n\ntype TransitionPath = {\n enter: Path[];\n exit: Path[];\n};\n\ntype AttributeDefinition = {\n name: string;\n qualifiedName: string;\n hasDefault: boolean;\n defaultValue?: any;\n};\n\ntype OperationDefinition = {\n name: string;\n qualifiedName: string;\n implementation: (...args: unknown[]) => unknown;\n};\n\ntype Model = State & {\n members: Record<Path, AnyModelElement>;\n transitionMap: Record<Path, Record<Path, any[]>>;\n deferredMap: Record<Path, Record<Path, boolean>>;\n events: Record<string, EventRecord>;\n attributes: Record<string, AttributeDefinition>;\n operations: Record<string, OperationDefinition>;\n partials: Array<(model: Model, stack: AnyModelElement[]) => void>;\n};\n\ntype Transition = Element & {\n guard: string;\n events: string[];\n effect: Path[];\n source: Path;\n target?: Path;\n paths: Record<Path, TransitionPath>;\n};\n\ntype Operation = (ctx: Context, instance: Instance, event: EventRecord) => unknown;\n\ntype Expression = (ctx: Context, instance: Instance, event: EventRecord) => boolean;\n\ntype TimeExpression = (\n ctx: Context,\n instance: Instance,\n event: EventRecord,\n) => number | Date | Promise<number> | Promise<Date>;\n\ntype GuardFunction = (ctx: Context, instance: Instance, event: EventRecord) => boolean;\ntype SignalCallback = () => void;\ntype Thenable = {\n then: (...args: Array<(...args: unknown[]) => unknown>) => unknown;\n};\ntype DoneEventTarget = {\n addEventListener: (event: string, listener: SignalCallback) => void;\n};\ntype OnEventTarget = {\n on: (event: string, listener: SignalCallback) => void;\n};\ntype SignalLike = Thenable | DoneEventTarget | OnEventTarget;\ntype Timepoint = number | Date;\ntype TimerValue = number;\n\ntype Behavior = Element & {\n operation: Operation | null;\n operationName?: string;\n Owner?: () => string;\n};\n\ntype Constraint = Element & {\n expression: Expression;\n};\n\ntype PartialElement<T extends Element = Element, M extends Model = Model> = (\n model: M,\n elements: Element[],\n) => T | void;\n\ntype Snapshot = {\n id: string;\n qualifiedName: string;\n state: string;\n attributes: Record<string, any>;\n queueLen: number;\n events: Array<{\n event: string;\n target?: string;\n guard: boolean;\n schema?: any;\n }>;\n};\n\ntype ActiveContext = {\n listeners: Array<() => void>;\n instances: Record<string, Instance>;\n done: boolean;\n};\n\ntype Active = {\n context: ActiveContext;\n promise: Promise<void>;\n};\n\ntype Config = {\n id?: string;\n name?: string;\n data?: any;\n clock?: {\n setTimeout?: TimerFunction;\n clearTimeout?: CancelFunction;\n now?: () => number;\n };\n};\ntype ClockConfig = {\n setTimeout: TimerFunction;\n clearTimeout: CancelFunction;\n now: () => number;\n};\n\ntype QueueShape = {\n front: EventRecord[];\n back: Array<EventRecord | undefined>;\n backHead: number;\n len: () => number;\n};\n\ntype StripLeadingSlash<S extends string> = S extends `/${infer Rest}` ? Rest : S;\ntype StripTrailingSlash<S extends string> = S extends `${infer Rest}/` ? Rest : S;\ntype PathParts<S extends string> =\n S extends ''\n ? []\n : S extends `${infer Head}/${infer Tail}`\n ? [Head, ...PathParts<Tail>]\n : [S];\n\ntype CompactPathParts<Parts extends readonly string[], Acc extends readonly string[] = []> =\n Parts extends readonly [infer Head extends string, ...infer Tail extends string[]]\n ? Head extends '.'\n ? CompactPathParts<Tail, Acc>\n : Head extends ''\n ? CompactPathParts<Tail, Acc>\n : Head extends '..'\n ? CompactPathParts<Tail, PopSegment<Acc>>\n : CompactPathParts<Tail, [...Acc, Head]>\n : Acc;\n\ntype JoinPathParts<Parts extends readonly string[]> =\n Parts extends []\n ? ''\n : Parts extends readonly [infer Head extends string]\n ? Head\n : Parts extends readonly [infer Head extends string, ...infer Tail extends string[]]\n ? `${Head}/${JoinPathParts<Tail>}`\n : string;\n\ntype NormalizePath<Raw extends string> =\n ToAbsolutePath<CompactPathParts<PathParts<Raw>>>;\n\ntype ToAbsolutePath<Parts extends readonly string[]> =\n Parts extends []\n ? '/'\n : `/${JoinPathParts<Parts>}`;\n\ntype PopSegment<Parts extends readonly string[]> =\n Parts extends readonly [...infer Rest extends string[], infer _Last]\n ? Rest\n : [];\n\ntype IsAbsolutePath<S extends string> = S extends `/${string}` ? true : false;\n\ntype ResolvePathExpression<Base extends string, Expr extends string> =\n IsAbsolutePath<Expr> extends true\n ? NormalizePath<Expr>\n : ToAbsolutePath<\n CompactPathParts<\n [\n ...PathParts<StripLeadingSlash<Base>>,\n ...PathParts<StripLeadingSlash<StripTrailingSlash<Expr>>>,\n ]\n >\n >;\n\ntype ResolveModelPathExpression<\n Owner extends string,\n ModelRoot extends string,\n Expr extends string,\n> =\n IsAbsolutePath<Expr> extends true\n ? IsPathUnderBase<NormalizePath<Expr>, ModelRoot> extends true\n ? NormalizePath<Expr>\n : ToAbsolutePath<\n CompactPathParts<\n [\n ...PathParts<StripLeadingSlash<ModelRoot>>,\n ...PathParts<StripLeadingSlash<StripTrailingSlash<Expr>>>,\n ]\n >\n >\n : ToAbsolutePath<\n CompactPathParts<\n [\n ...PathParts<StripLeadingSlash<Owner>>,\n ...PathParts<StripLeadingSlash<StripTrailingSlash<Expr>>>,\n ]\n >\n >;\n\ntype IsPathUnderBase<Path extends string, Base extends string> =\n Path extends Base\n | `${Base}/${string}`\n ? true\n : false;\n\ntype RelativeFromAbsolute<Path extends string> =\n Path extends `/${string}/${infer Rest}` ? Rest : never;\n\ntype ParentParts<Parts extends readonly string[]> =\n Parts extends readonly [...infer Prefix extends string[], infer _Last extends string]\n ? Prefix\n : [];\n\ntype ParentPath<Path extends string> =\n Path extends `/${infer Tail}`\n ? ToAbsolutePath<ParentParts<PathParts<Tail>>>\n : never;\n\ntype IsStatePathPrefix<Prefix extends string, Path extends string> =\n Path extends `${Prefix}/${string}` ? true : false;\n\nexport type Event<Name extends string = string, Data = unknown> = EventRecord & {\n readonly name: Name;\n readonly schema?: Data;\n};\n\nexport interface TypedModel<\n TAttributes extends Record<string, any> = Record<string, any>,\n TOperations extends Record<string, (...args: any[]) => any> = Record<string, (...args: any[]) => any>,\n TGuards extends Record<string, (...args: any[]) => any> = Record<string, (...args: any[]) => any>,\n TActivities extends Record<string, (...args: any[]) => any> = Record<string, (...args: any[]) => any>,\n TEvents = Event<string, unknown>,\n TEventGroups = unknown,\n TName extends string = string,\n TInstance extends Instance = Instance,\n> extends Model {\n readonly __hsm_attributes?: TAttributes;\n readonly __hsm_operations?: TOperations;\n readonly __hsm_guards?: TGuards;\n readonly __hsm_activities?: TActivities;\n readonly __hsm_events?: TEvents;\n readonly __hsm_eventGroups?: TEventGroups;\n readonly __hsm_name?: TName;\n readonly __hsm_instance?: TInstance;\n readonly __hsm_meta?: {\n name: unknown;\n states: unknown;\n finalStates: unknown;\n transitions: unknown;\n initials: unknown;\n attributes: unknown;\n operations: unknown;\n eventSchemas: unknown;\n };\n}\n\nexport type EventClause<Name extends string = string, Schema = unknown> = {\n kind: 'on';\n name: Name;\n schema?: Schema;\n};\nexport type OnSetClause<Name extends string = string> = { kind: 'onSet'; name: Name };\nexport type OnCallClause<Name extends string = string> = { kind: 'onCall'; name: Name };\nexport type WhenClause<Name extends string = string> = { kind: 'when'; name: Name };\nexport type WhenExprClause = { kind: 'whenExpr' };\nexport type SourceClause<Name extends string = string> = { kind: 'source'; name: Name };\nexport type TargetClause<Name extends string = string> = { kind: 'target'; name: Name };\nexport type GuardClause<Value = unknown> = { kind: 'guard'; value: Value };\nexport type EffectClause<Value = unknown> = { kind: 'effect'; value: Value };\nexport type AfterClause<Value = unknown> = { kind: 'after'; value: Value };\nexport type EveryClause<Value = unknown> = { kind: 'every'; value: Value };\nexport type AtClause<Value = unknown> = { kind: 'at'; value: Value };\n\nexport type TransitionSpec<Parts extends readonly TransitionBuilderClause[]> = {\n kind: 'transition';\n parts: Parts;\n};\n\nexport type StateSpec<\n Name extends string = string,\n Parts extends readonly unknown[] = readonly unknown[]\n> = {\n kind: 'state';\n name: Name;\n parts: Parts;\n};\n\nexport type InitialSpec<Parts extends readonly TransitionBuilderClause[] = readonly TransitionBuilderClause[]> = {\n kind: 'initial';\n name: string;\n parts: Parts;\n};\n\nexport type FinalSpec<Name extends string = string> = { kind: 'final'; name: Name };\nexport type ShallowHistorySpec<\n Name extends string = string,\n Parts extends readonly unknown[] = readonly unknown[]\n> = { kind: 'shallowHistory'; name: Name; parts: Parts };\nexport type DeepHistorySpec<\n Name extends string = string,\n Parts extends readonly unknown[] = readonly unknown[]\n> = { kind: 'deepHistory'; name: Name; parts: Parts };\nexport type ChoiceSpec<\n Name extends string = string,\n Parts extends readonly unknown[] = readonly unknown[]\n> = { kind: 'choice'; name: Name; parts: Parts };\nexport type EntrySpec<Operations = unknown> = { kind: 'entry'; value: Operations };\nexport type ExitSpec<Operations = unknown> = { kind: 'exit'; value: Operations };\nexport type ActivitySpec<Operations = unknown> = { kind: 'activity'; value: Operations };\nexport type DeferSpec<EventNames extends readonly string[] = readonly string[]> = {\n kind: 'defer';\n eventNames: EventNames;\n};\n\nexport type AttributeSpec<Name extends string = string, Value = unknown> = {\n kind: 'attribute';\n name: Name;\n value: Value;\n};\n\nexport type OperationSpec<\n Name extends string = string,\n Fn extends (...args: any[]) => any = (...args: any[]) => any,\n> = {\n kind: 'operation';\n name: Name;\n impl: Fn;\n};\n\nexport type ModelElementSpec =\n | TransitionSpec<readonly TransitionBuilderClause[]>\n | StateSpec<string, readonly unknown[]>\n | InitialSpec<readonly TransitionBuilderClause[]>\n | FinalSpec\n | ShallowHistorySpec<string, readonly unknown[]>\n | DeepHistorySpec<string, readonly unknown[]>\n | ChoiceSpec<string, readonly unknown[]>\n | EntrySpec\n | ExitSpec\n | ActivitySpec\n | AttributeSpec\n | OperationSpec\n | DeferSpec\n | { kind: 'unknown' };\n\nexport type TransitionBuilderClause =\n | EventClause\n | OnSetClause\n | OnCallClause\n | WhenClause\n | WhenExprClause\n | SourceClause\n | TargetClause\n | GuardClause\n | EffectClause\n | AfterClause\n | EveryClause\n | AtClause\n | { kind: 'unknownTransitionClause' };\n\ntype MetaFromBuilder<T> = T extends { __hsmSpec: infer Meta } ? Meta : never;\n\ntype ModelMetaOf<T> = T extends { __hsm_meta: infer M } ? M : never;\n\ntype BuilderTuple<Specs extends readonly unknown[]> = {\n [K in keyof Specs]: BuilderWithSpec<\n (model: Model, stack: AnyModelElement[]) => unknown,\n Specs[K]\n >;\n};\n\ntype GuardBuilder<EventType extends EventRecord = EventRecord> =\n BuilderWithSpec<\n (model: Model, stack: AnyModelElement[]) => unknown,\n GuardClause<unknown>\n > & {\n readonly __hsmTransitionEvent?: EventType;\n };\n\ntype EffectBuilder<EventType extends EventRecord = EventRecord> =\n BuilderWithSpec<\n (model: Model, stack: AnyModelElement[]) => unknown,\n EffectClause<unknown>\n > & {\n readonly __hsmTransitionEvent?: EventType;\n };\n\ntype TransitionBuilderTuple<Clauses extends readonly TransitionBuilderClause[]> = BuilderTuple<Clauses>;\n\ntype ModelElementBuilderTuple<Specs extends readonly ModelElementSpec[]> = BuilderTuple<Specs>;\ntype ScopeModelParts<\n LocalParts extends readonly unknown[],\n ModelParts extends readonly unknown[],\n> = readonly [...ModelParts, ...LocalParts];\n\ntype IsAny<T> = 0 extends (1 & T) ? true : false;\n\ntype AttributeKeysFromModelParts<Parts extends readonly unknown[]> =\n keyof ModelAttributeTypeMap<Parts> & string;\n\ntype DurationAttributeKeysFromModelParts<Parts extends readonly unknown[]> = {\n [K in AttributeKeysFromModelParts<Parts>]:\n IsAny<EventValueFromAttribute<Parts, K>> extends true\n ? K\n : [Extract<EventValueFromAttribute<Parts, K>, string | number>] extends [never]\n ? never\n : K;\n}[AttributeKeysFromModelParts<Parts>];\n\ntype TimepointAttributeKeysFromModelParts<Parts extends readonly unknown[]> = {\n [K in AttributeKeysFromModelParts<Parts>]:\n IsAny<EventValueFromAttribute<Parts, K>> extends true\n ? K\n : [Extract<EventValueFromAttribute<Parts, K>, string | number | Date>] extends [never]\n ? never\n : K;\n}[AttributeKeysFromModelParts<Parts>];\n\ntype OperationKeysFromModelParts<Parts extends readonly unknown[]> =\n keyof ModelOperationTypeMap<Parts> & string;\n\ntype GuardOperationKeysFromModelParts<Parts extends readonly unknown[]> = {\n [K in OperationKeysFromModelParts<Parts>]:\n IsAny<ReturnType<Extract<ModelOperationTypeMap<Parts>[K], (...args: any[]) => any>>> extends true\n ? never\n : ReturnType<Extract<ModelOperationTypeMap<Parts>[K], (...args: any[]) => any>> extends boolean\n ? K\n : never;\n}[OperationKeysFromModelParts<Parts>];\n\ntype InvalidString<Message extends string, Actual extends string> = Actual & {\n readonly __hsmTypeError: Message;\n};\n\ntype ValidateBehaviorArgument<\n Argument,\n ModelParts extends readonly unknown[],\n GuardOnly extends boolean = false,\n> =\n Argument extends string\n ? GuardOnly extends true\n ? Argument extends GuardOperationKeysFromModelParts<ModelParts>\n ? Argument\n : InvalidString<`Invalid guard operation: ${Argument}`, Argument>\n : Argument extends OperationKeysFromModelParts<ModelParts>\n ? Argument\n : InvalidString<`Invalid behavior operation: ${Argument}`, Argument>\n : Argument;\n\ntype ValidateBehaviorArguments<\n Arguments,\n ModelParts extends readonly unknown[],\n GuardOnly extends boolean = false,\n> =\n Arguments extends readonly [infer Head, ...infer Tail]\n ? readonly [\n ValidateBehaviorArgument<Head, ModelParts, GuardOnly>,\n ...ValidateBehaviorArguments<Tail, ModelParts, GuardOnly>,\n ]\n : readonly [];\n\ntype KnownEventNamesFromRootModelParts<\n RootModelParts extends readonly unknown[],\n RootPath extends string,\n> =\n keyof CollectModelParts<\n RootModelParts,\n RootPath,\n RootPath,\n RootModelParts\n >['eventSchemas'] & string;\n\ntype ValidateDeferredEventName<\n EventName extends string,\n RootModelParts extends readonly unknown[],\n RootPath extends string,\n> =\n string extends EventName\n ? EventName\n : EventName extends KnownEventNamesFromRootModelParts<RootModelParts, RootPath>\n ? EventName\n : InvalidString<`Invalid deferred event: ${EventName}`, EventName>;\n\ntype ValidateDeferredEventNames<\n EventNames extends readonly string[],\n RootModelParts extends readonly unknown[],\n RootPath extends string,\n> = {\n [K in keyof EventNames]:\n EventNames[K] extends string\n ? ValidateDeferredEventName<EventNames[K], RootModelParts, RootPath>\n : EventNames[K];\n};\n\ntype LocalKnownEventNamesFromParts<\n Parts extends readonly unknown[],\n> = keyof CollectModelParts<Parts, '/', '/', Parts>['eventSchemas'] & string;\n\ntype ValidateDeferredEventNameFromParts<\n EventName extends string,\n Parts extends readonly unknown[],\n> =\n string extends EventName\n ? EventName\n : EventName extends LocalKnownEventNamesFromParts<Parts>\n ? EventName\n : InvalidString<`Invalid deferred event: ${EventName}`, EventName>;\n\ntype ValidateDeferredEventNamesFromParts<\n EventNames extends readonly string[],\n Parts extends readonly unknown[],\n> = {\n [K in keyof EventNames]:\n EventNames[K] extends string\n ? ValidateDeferredEventNameFromParts<EventNames[K], Parts>\n : EventNames[K];\n};\n\ntype ValidateStateLocalSpec<\n Spec,\n RootParts extends readonly unknown[],\n> =\n Spec extends DeferSpec<infer EventNames>\n ? DeferSpec<ValidateDeferredEventNamesFromParts<EventNames, RootParts>>\n : Spec extends StateSpec<infer Name, infer Parts>\n ? StateSpec<Name, ValidateStateLocalSpecs<Parts, RootParts>>\n : Spec;\n\ntype ValidateStateLocalSpecs<\n Specs extends readonly unknown[],\n RootParts extends readonly unknown[] = Specs,\n> = {\n [K in keyof Specs]: ValidateStateLocalSpec<Specs[K], RootParts>;\n};\n\ntype ValidateTransitionClause<\n Clause,\n ScopedModelParts extends readonly unknown[],\n RootModelParts extends readonly unknown[],\n RootPath extends string,\n OwnerPath extends string,\n> =\n Clause extends OnSetClause<infer Name>\n ? Name extends AttributeKeysFromModelParts<ScopedModelParts>\n ? OnSetClause<Name>\n : OnSetClause<InvalidString<`Invalid onSet attribute: ${Name}`, Name>>\n : Clause extends WhenClause<infer Name>\n ? Name extends AttributeKeysFromModelParts<ScopedModelParts>\n ? WhenClause<Name>\n : WhenClause<InvalidString<`Invalid when attribute: ${Name}`, Name>>\n : Clause extends OnCallClause<infer Name>\n ? Name extends OperationKeysFromModelParts<ScopedModelParts>\n ? OnCallClause<Name>\n : OnCallClause<InvalidString<`Invalid onCall operation: ${Name}`, Name>>\n : Clause extends SourceClause<infer Name>\n ? ResolveModelPathExpression<OwnerPath, RootPath, Name> extends\n | RootPath\n | CollectModelParts<RootModelParts, RootPath, RootPath, RootModelParts>['states']\n ? SourceClause<Name>\n : SourceClause<InvalidString<`Invalid transition source path: ${Name}`, Name>>\n : Clause extends TargetClause<infer Name>\n ? ResolveModelPathExpression<OwnerPath, RootPath, Name> extends\n | RootPath\n | CollectModelParts<RootModelParts, RootPath, RootPath, RootModelParts>['states']\n ? TargetClause<Name>\n : TargetClause<InvalidString<`Invalid transition target path: ${Name}`, Name>>\n : Clause extends AfterClause<infer Value>\n ? Value extends string\n ? Value extends DurationAttributeKeysFromModelParts<ScopedModelParts>\n ? AfterClause<Value>\n : AfterClause<InvalidString<`Invalid after attribute: ${Value}`, Value>>\n : Clause\n : Clause extends EveryClause<infer Value>\n ? Value extends string\n ? Value extends DurationAttributeKeysFromModelParts<ScopedModelParts>\n ? EveryClause<Value>\n : EveryClause<InvalidString<`Invalid every attribute: ${Value}`, Value>>\n : Clause\n : Clause extends AtClause<infer Value>\n ? Value extends string\n ? Value extends TimepointAttributeKeysFromModelParts<ScopedModelParts>\n ? AtClause<Value>\n : AtClause<InvalidString<`Invalid at attribute: ${Value}`, Value>>\n : Clause\n : Clause extends GuardClause<infer Value>\n ? GuardClause<ValidateBehaviorArgument<Value, ScopedModelParts, true>>\n : Clause extends EffectClause<infer Value>\n ? EffectClause<ValidateBehaviorArguments<Value, ScopedModelParts>>\n : Clause;\n\ntype ValidateTransitionClauses<\n Clauses extends readonly unknown[],\n ScopedModelParts extends readonly unknown[],\n RootModelParts extends readonly unknown[],\n RootPath extends string,\n OwnerPath extends string,\n> = {\n [K in keyof Clauses]:\n ValidateTransitionClause<Clauses[K], ScopedModelParts, RootModelParts, RootPath, OwnerPath>;\n};\n\ntype ValidateModelSpec<\n Spec,\n ScopedModelParts extends readonly unknown[],\n RootModelParts extends readonly unknown[],\n RootPath extends string,\n OwnerPath extends string,\n> =\n Spec extends StateSpec<infer Name, infer Parts>\n ? StateSpec<\n Name,\n ValidateModelSpecs<\n Parts,\n ScopeModelParts<Parts, ScopedModelParts>,\n RootModelParts,\n RootPath,\n ResolvePathExpression<OwnerPath, Name>\n >\n >\n : Spec extends TransitionSpec<infer Clauses>\n ? TransitionSpec<\n ValidateTransitionClauses<Clauses, ScopedModelParts, RootModelParts, RootPath, OwnerPath>\n >\n : Spec extends InitialSpec<infer Clauses>\n ? InitialSpec<\n ValidateTransitionClauses<Clauses, ScopedModelParts, RootModelParts, RootPath, OwnerPath>\n >\n : Spec extends EntrySpec<infer Value>\n ? EntrySpec<ValidateBehaviorArguments<Value, ScopedModelParts>>\n : Spec extends ExitSpec<infer Value>\n ? ExitSpec<ValidateBehaviorArguments<Value, ScopedModelParts>>\n : Spec extends ActivitySpec<infer Value>\n ? ActivitySpec<ValidateBehaviorArguments<Value, ScopedModelParts>>\n : Spec extends DeferSpec<infer EventNames>\n ? DeferSpec<\n ValidateDeferredEventNames<\n EventNames,\n RootModelParts,\n RootPath\n >\n >\n : Spec;\n\ntype ValidateModelSpecs<\n Specs extends readonly unknown[],\n ScopedModelParts extends readonly unknown[] = Specs,\n RootModelParts extends readonly unknown[] = ScopedModelParts,\n RootPath extends string = '/',\n OwnerPath extends string = RootPath,\n> = {\n [K in keyof Specs]:\n ValidateModelSpec<Specs[K], ScopedModelParts, RootModelParts, RootPath, OwnerPath>;\n};\n\ntype ValidatedModelElementBuilderTuple<\n Specs extends readonly ModelElementSpec[],\n ScopedModelParts extends readonly ModelElementSpec[] = Specs,\n RootModelParts extends readonly ModelElementSpec[] = ScopedModelParts,\n RootPath extends string = '/',\n OwnerPath extends string = RootPath,\n> = BuilderTuple<\n ValidateModelSpecs<Specs, ScopedModelParts, RootModelParts, RootPath, OwnerPath>\n>;\n\ntype ModelAttributeMap<T> =\n T extends TypedModel<infer A, any, any, any, any, any, any, any>\n ? A\n : ModelMetaOf<T> extends { attributes: infer A }\n ? A extends Record<string, unknown>\n ? A\n : {}\n : {};\n\ntype ModelOperationMap<T> =\n T extends TypedModel<any, infer O, any, any, any, any, any, any>\n ? O\n : ModelMetaOf<T> extends { operations: infer O }\n ? O extends Record<string, (...args: any[]) => any>\n ? O\n : {}\n : {};\n\ntype ModelEventMap<T> =\n T extends TypedModel<any, any, any, any, infer E, any, any, any>\n ? EventMapFromUnion<E>\n : ModelMetaOf<T> extends { eventSchemas: infer E }\n ? E extends Record<string, unknown>\n ? E\n : {}\n : {};\n\ntype ModelStateMeta<T> =\n T extends { __hsm_meta: infer Meta }\n ? Meta extends {\n name: string;\n states: infer States;\n finalStates: infer Finals;\n transitions: infer Transitions;\n initials: infer Initials;\n attributes: infer Attributes;\n operations: infer Operations;\n eventSchemas: infer EventSchemas;\n }\n ? {\n name: string & Meta['name'];\n states: States & string;\n finalStates: Finals & string;\n transitions: Transitions;\n initials: Initials extends Record<string, string> ? Initials : Record<string, string>;\n attributes: Attributes extends Record<string, unknown> ? Attributes : Record<string, unknown>;\n operations: Operations extends Record<string, (...args: any[]) => any> ? Operations : Record<string, (...args: any[]) => any>;\n eventSchemas: EventSchemas extends Record<string, unknown> ? EventSchemas : Record<string, unknown>;\n }\n : never\n : TypedModelMetaFallback<T>;\n\ntype TypedModelMetaFallback<T> = {\n name: string;\n states: string;\n finalStates: string;\n transitions: string;\n initials: Record<string, string>;\n attributes: ModelAttributeMap<T>;\n operations: ModelOperationMap<T>;\n eventSchemas: ModelEventMap<T>;\n};\n\ntype TypedModelFromInfer<\n RootName extends string,\n Parts extends readonly unknown[],\n> = {\n [K in keyof Model & string]: Model[K];\n} & TypedModel<\n InferredAttributes<Parts>,\n InferredOperations<Parts>,\n any,\n any,\n InferredEventUnion<Parts>,\n any,\n RootName,\n Instance\n> & {\n readonly __hsm_meta: ModelStateMetaFromParts<`/${RootName}`, Parts>;\n};\n\ntype ModelAttributeTypeMap<Parts extends readonly unknown[]> =\n MergeMaps<AttributeFromParts<Parts>>;\n\ntype ModelOperationTypeMap<Parts extends readonly unknown[]> =\n NormalizeOpMap<MergeMaps<OperationFromParts<Parts>>>;\n\ntype InferredAttributes<Parts extends readonly unknown[]> =\n ModelAttributeTypeMap<Parts>;\n\ntype InferredOperations<Parts extends readonly unknown[]> =\n ModelOperationTypeMap<Parts>;\n\ntype InferredEventUnion<Parts extends readonly unknown[]> =\n EventUnionFromTransitions<\n CollectModelParts<Parts, '/', '/', Parts>['transitions']\n > |\n EventUnionFromMap<\n CollectModelParts<Parts, '/', '/', Parts>['eventSchemas']\n >;\n\ntype UnionToIntersection<T> =\n (T extends any ? (value: T) => void : never) extends (value: infer I) => void ? I : never;\n\ntype EventMapFromUnion<U> =\n UnionToIntersection<\n U extends Event<infer Name, infer Schema>\n ? { [K in Name]: Schema }\n : {}\n > extends infer M\n ? M extends Record<string, unknown>\n ? MergeMaps<M>\n : {}\n : {};\n\ntype MergeEventMaps<\n A extends Record<string, unknown>,\n B extends Record<string, unknown>,\n> = {\n [K in keyof A | keyof B]: K extends keyof B ? B[K] : K extends keyof A ? A[K] : never;\n};\n\ntype EventSpecMapToUnion<SchemaMap> = SchemaMap;\n\ntype MergeMaps<\n M extends Record<string, unknown>,\n> = {\n [K in keyof M]: M[K];\n};\n\ntype NormalizeOpMap<M extends Record<string, unknown>> = {\n [K in keyof M]: M[K] extends (...args: any[]) => any ? M[K] : never;\n};\n\ntype AttributeFromParts<Parts extends readonly unknown[]> =\n Parts extends readonly [infer H, ...infer T]\n ? H extends AttributeSpec<infer Name, infer Value>\n ? { [K in Name]: Value } & AttributeFromParts<T>\n : AttributeFromParts<T>\n : {};\n\ntype OperationFromParts<Parts extends readonly unknown[]> =\n Parts extends readonly [infer H, ...infer T]\n ? H extends OperationSpec<infer Name, infer Fn>\n ? { [K in Name]: Fn } & OperationFromParts<T>\n : OperationFromParts<T>\n : {};\n\ntype EventValueFromAttribute<Parts extends readonly unknown[], Name extends string> =\n Name extends keyof ModelAttributeTypeMap<Parts> & string\n ? ModelAttributeTypeMap<Parts>[Name]\n : unknown;\n\ntype EventArgsFromOperation<Parts extends readonly unknown[], Name extends string> =\n Name extends keyof ModelOperationTypeMap<Parts> & string\n ? Parameters<Extract<ModelOperationTypeMap<Parts>[Name], (...args: any[]) => any>>\n : unknown[];\n\ntype EventSchemasFromPartialsWithContext<\n Parts extends readonly unknown[],\n ModelParts extends readonly unknown[],\n> =\n Parts extends readonly [infer H, ...infer T]\n ? H extends EventClause<infer Name, infer Schema>\n ? { [K in Name]: Schema extends undefined ? unknown : Schema } &\n EventSchemasFromPartialsWithContext<T, ModelParts>\n : H extends OnSetClause<infer Name>\n ? {\n [K in `set:${Name}`]: {\n name: Name;\n old: EventValueFromAttribute<ModelParts, Name>;\n new: EventValueFromAttribute<ModelParts, Name>;\n };\n } & EventSchemasFromPartialsWithContext<T, ModelParts>\n : H extends OnCallClause<infer Name>\n ? {\n [K in `call:${Name}`]: {\n name: Name;\n args: EventArgsFromOperation<ModelParts, Name>;\n };\n } & EventSchemasFromPartialsWithContext<T, ModelParts>\n : H extends WhenClause<infer Name>\n ? {\n [K in `set:${Name}`]: {\n name: Name;\n old: EventValueFromAttribute<ModelParts, Name>;\n new: EventValueFromAttribute<ModelParts, Name>;\n };\n } & EventSchemasFromPartialsWithContext<T, ModelParts>\n : H extends TransitionSpec<infer Clauses>\n ? EventSchemasFromClausesWithContext<Clauses, ModelParts> &\n EventSchemasFromPartialsWithContext<T, ModelParts>\n : H extends StateSpec<infer _Name, infer S>\n ? EventSchemasFromPartialsWithContext<S, ModelParts> &\n EventSchemasFromPartialsWithContext<T, ModelParts>\n : EventSchemasFromPartialsWithContext<T, ModelParts>\n : {};\n\ntype EventSchemasFromPartials<Parts extends readonly unknown[]> =\n EventSchemasFromPartialsWithContext<Parts, Parts>;\n\ntype EventSchemasFromClausesWithContext<\n Clauses extends readonly unknown[],\n ModelParts extends readonly unknown[],\n> =\n Clauses extends readonly [infer H, ...infer T]\n ? H extends EventClause<infer Name, infer Schema>\n ? { [K in Name]: Schema extends undefined ? unknown : Schema } &\n EventSchemasFromClausesWithContext<T, ModelParts>\n : H extends OnSetClause<infer Name>\n ? {\n [K in `set:${Name}`]: {\n name: Name;\n old: EventValueFromAttribute<ModelParts, Name>;\n new: EventValueFromAttribute<ModelParts, Name>;\n };\n } & EventSchemasFromClausesWithContext<T, ModelParts>\n : H extends OnCallClause<infer Name>\n ? {\n [K in `call:${Name}`]: {\n name: Name;\n args: EventArgsFromOperation<ModelParts, Name>;\n };\n } & EventSchemasFromClausesWithContext<T, ModelParts>\n : H extends WhenClause<infer Name>\n ? {\n [K in `set:${Name}`]: {\n name: Name;\n old: EventValueFromAttribute<ModelParts, Name>;\n new: EventValueFromAttribute<ModelParts, Name>;\n };\n } & EventSchemasFromClausesWithContext<T, ModelParts>\n : EventSchemasFromClausesWithContext<T, ModelParts>\n : {};\n\ntype EventSchemasFromClauses<Clauses extends readonly unknown[]> =\n EventSchemasFromClausesWithContext<Clauses, Clauses>;\n\ntype TransitionRaw<Name extends string = string> = {\n owner: string;\n source: string;\n target: string | undefined;\n events: Name;\n schema: Record<string, unknown>;\n};\n\ntype TransitionFromClauses<\n Clauses extends readonly unknown[],\n Owner extends string = string,\n Source extends string = Owner,\n Target extends string | undefined = undefined,\n Events extends string = never,\n Schemas extends Record<string, unknown> = {},\n ModelParts extends readonly unknown[] = readonly unknown[],\n> = Clauses extends readonly [infer H, ...infer T]\n ? H extends SourceClause<infer Name>\n ? TransitionFromClauses<T, Owner, Name, Target, Events, Schemas, ModelParts>\n : H extends TargetClause<infer Name>\n ? TransitionFromClauses<T, Owner, Source, Name, Events, Schemas, ModelParts>\n : H extends EventClause<infer Name, infer Schema>\n ? TransitionFromClauses<\n T,\n Owner,\n Source,\n Target,\n Events | Name,\n MergeEventMaps<Schemas, { [K in Name]: Schema extends undefined ? unknown : Schema }>,\n ModelParts\n >\n : H extends OnSetClause<infer Name>\n ? TransitionFromClauses<\n T,\n Owner,\n Source,\n Target,\n Events | `set:${Name}`,\n MergeEventMaps<\n Schemas,\n {\n [K in `set:${Name}`]: {\n name: Name;\n old: EventValueFromAttribute<ModelParts, Name>;\n new: EventValueFromAttribute<ModelParts, Name>;\n };\n }\n >,\n ModelParts\n >\n : H extends OnCallClause<infer Name>\n ? TransitionFromClauses<\n T,\n Owner,\n Source,\n Target,\n Events | `call:${Name}`,\n MergeEventMaps<\n Schemas,\n {\n [K in `call:${Name}`]: {\n name: Name;\n args: EventArgsFromOperation<ModelParts, Name>;\n };\n }\n >,\n ModelParts\n >\n : H extends WhenClause<infer Name>\n ? TransitionFromClauses<\n T,\n Owner,\n Source,\n Target,\n Events | `set:${Name}`,\n MergeEventMaps<\n Schemas,\n {\n [K in `set:${Name}`]: {\n name: Name;\n old: EventValueFromAttribute<ModelParts, Name>;\n new: EventValueFromAttribute<ModelParts, Name>;\n };\n }\n >,\n ModelParts\n >\n : TransitionFromClauses<T, Owner, Source, Target, Events, Schemas, ModelParts>\n : {\n owner: Owner;\n source: Source;\n target: Target;\n events: Events;\n schema: Schemas;\n };\n\ntype CollectModelParts<\n Parts extends readonly unknown[],\n ParentPath extends string,\n ModelRoot extends string,\n AllParts extends readonly unknown[] = Parts,\n> = Parts extends readonly [infer H, ...infer T]\n ? MergeCollect<\n InferFromSpec<H, ParentPath, ModelRoot, AllParts>,\n CollectModelParts<T, ParentPath, ModelRoot, AllParts>\n >\n : {\n states: never;\n finalStates: never;\n transitions: never;\n initials: {};\n attributes: {};\n operations: {};\n eventSchemas: {};\n };\n\ntype InferFromSpec<\n Spec,\n ParentPath extends string,\n ModelRoot extends string,\n AllParts extends readonly unknown[],\n> = Spec extends StateSpec<infer Name, infer P>\n ? StateFromSpec<Name, P, ParentPath, ModelRoot, AllParts>\n : Spec extends FinalSpec<infer Name>\n ? FinalFromSpec<Name, ParentPath>\n : Spec extends TransitionSpec<infer Clauses>\n ? TransitionFromSpec<Clauses, ParentPath, ModelRoot, AllParts>\n : Spec extends InitialSpec<infer Clauses>\n ? InitialFromSpec<Clauses, ParentPath, ModelRoot, AllParts>\n : Spec extends AttributeSpec<infer Name, infer Value>\n ? { states: never; finalStates: never; transitions: never; initials: {}; attributes: { [K in Name]: Value }; operations: {}; eventSchemas: {} }\n : Spec extends OperationSpec<infer Name, infer Fn>\n ? { states: never; finalStates: never; transitions: never; initials: {}; attributes: {}; operations: { [K in Name]: Fn }; eventSchemas: {} }\n : Spec extends ShallowHistorySpec<infer Name, infer P>\n ? StateAliasFromPseudo<Name, P, ParentPath, ModelRoot, AllParts>\n : Spec extends DeepHistorySpec<infer Name, infer P>\n ? StateAliasFromPseudo<Name, P, ParentPath, ModelRoot, AllParts>\n : Spec extends ChoiceSpec<infer Name, infer P>\n ? StateAliasFromPseudo<Name, P, ParentPath, ModelRoot, AllParts>\n : { states: never; finalStates: never; transitions: never; initials: {}; attributes: {}; operations: {}; eventSchemas: {} };\n\ntype StateAliasFromPseudo<\n Name extends string,\n Parts extends readonly unknown[],\n ParentPath extends string,\n ModelRoot extends string,\n AllParts extends readonly unknown[],\n> = StateFromSpec<Name, Parts, ParentPath, ModelRoot, AllParts>;\n\ntype StateFromSpec<\n Name extends string,\n Parts extends readonly unknown[],\n ParentPath extends string,\n ModelRoot extends string,\n AllParts extends readonly unknown[],\n> = {\n states:\n | ResolvePathExpression<ParentPath, Name>\n | ChildTransitionsFromParts<\n Parts,\n ResolvePathExpression<ParentPath, Name>,\n ModelRoot,\n AllParts\n >['states'];\n finalStates: ChildTransitionsFromParts<\n Parts,\n ResolvePathExpression<ParentPath, Name>,\n ModelRoot,\n AllParts\n >['finalStates'];\n transitions: ChildTransitionsFromParts<\n Parts,\n ResolvePathExpression<ParentPath, Name>,\n ModelRoot,\n AllParts\n >['transitions'];\n initials: ChildTransitionsFromParts<\n Parts,\n ResolvePathExpression<ParentPath, Name>,\n ModelRoot,\n AllParts\n >['initials'];\n attributes: ChildTransitionsFromParts<\n Parts,\n ResolvePathExpression<ParentPath, Name>,\n ModelRoot,\n AllParts\n >['attributes'];\n operations: ChildTransitionsFromParts<\n Parts,\n ResolvePathExpression<ParentPath, Name>,\n ModelRoot,\n AllParts\n >['operations'];\n eventSchemas: ChildTransitionsFromParts<\n Parts,\n ResolvePathExpression<ParentPath, Name>,\n ModelRoot,\n AllParts\n >['eventSchemas'];\n};\n\ntype ChildTransitionsFromParts<\n Parts extends readonly unknown[],\n ParentPath extends string,\n ModelRoot extends string,\n AllParts extends readonly unknown[],\n> = CollectModelParts<Parts, ParentPath, ModelRoot, AllParts>;\n\ntype FinalFromSpec<Name extends string, ParentPath extends string> = {\n states: ResolvePathExpression<ParentPath, Name>;\n finalStates: ResolvePathExpression<ParentPath, Name>;\n transitions: never;\n initials: {};\n attributes: {};\n operations: {};\n eventSchemas: {};\n};\n\ntype EventSchemasFromChildrenWithContext<\n Parts extends readonly unknown[],\n AllParts extends readonly unknown[],\n> =\n Parts extends readonly [infer H, ...infer T]\n ? H extends StateSpec<any, infer ChildParts>\n ? EventSchemasFromPartialsWithContext<ChildParts, AllParts> &\n EventSchemasFromChildrenWithContext<T, AllParts>\n : H extends FinalSpec<any>\n ? EventSchemasFromChildrenWithContext<T, AllParts>\n : H extends InitialSpec<infer Clauses>\n ? EventSchemasFromClausesWithContext<Clauses, AllParts> &\n EventSchemasFromChildrenWithContext<T, AllParts>\n : H extends TransitionSpec<infer Clauses>\n ? EventSchemasFromClausesWithContext<Clauses, AllParts> &\n EventSchemasFromChildrenWithContext<T, AllParts>\n : EventSchemasFromChildrenWithContext<T, AllParts>\n : {};\n\ntype EventSchemasFromChildren<Parts extends readonly unknown[]> =\n EventSchemasFromChildrenWithContext<Parts, Parts>;\n\ntype TransitionFromSpec<\n Clauses extends readonly unknown[],\n OwnerPath extends string,\n ModelRoot extends string,\n ModelParts extends readonly unknown[],\n> = {\n states: never;\n finalStates: never;\n transitions: NormalizeTransition<\n TransitionFromClauses<Clauses, OwnerPath, OwnerPath, undefined, never, {}, ModelParts>,\n OwnerPath,\n ModelRoot\n >;\n attributes: {};\n operations: {};\n eventSchemas: EventSchemasFromClausesWithContext<Clauses, ModelParts>;\n initials: {};\n};\n\ntype InitialsFromClauses<\n Clauses extends readonly unknown[],\n OwnerPath extends string,\n ModelRoot extends string,\n> =\n NormalizeTransition<\n TransitionFromClauses<Clauses, OwnerPath, OwnerPath>,\n OwnerPath,\n ModelRoot\n >['target'] extends infer Target\n ? Target extends string\n ? { [K in OwnerPath]: Target }\n : {}\n : {};\n\ntype InitialFromSpec<\n Clauses extends readonly unknown[],\n OwnerPath extends string,\n ModelRoot extends string,\n ModelParts extends readonly unknown[],\n> = {\n states: never;\n finalStates: never;\n transitions: NormalizeTransition<\n TransitionFromClauses<Clauses, OwnerPath, OwnerPath, undefined, never, {}, ModelParts>,\n OwnerPath,\n ModelRoot\n >;\n initials: InitialsFromClauses<Clauses, OwnerPath, ModelRoot>;\n attributes: {};\n operations: {};\n eventSchemas: EventSchemasFromClausesWithContext<Clauses, ModelParts>;\n};\n\ntype NormalizeTransition<\n T extends {\n owner: string;\n source: string;\n target: string | undefined;\n events: string;\n schema: Record<string, unknown>;\n },\n Owner extends string,\n Root extends string,\n> = {\n source: ResolveModelPathExpression<Owner, Root, T['source']>;\n target: T['target'] extends string ? ResolveModelPathExpression<Owner, Root, T['target']> : undefined;\n events: T['events'];\n schema: T['schema'];\n};\n\ntype MergeCollect<A, B> = {\n states: A extends { states: infer AS } ? (B extends { states: infer BS } ? AS | BS : AS) : never;\n finalStates: A extends { finalStates: infer AF } ? (B extends { finalStates: infer BF } ? AF | BF : AF) : never;\n transitions: A extends { transitions: infer AT } ? (B extends { transitions: infer BT } ? AT | BT : AT) : never;\n initials: A extends { initials: infer AI } ? B extends { initials: infer BI } ? MergeEventMaps<AI & Record<string, string>, BI & Record<string, string>> : AI : never;\n attributes: A extends { attributes: infer AA } ? B extends { attributes: infer BA } ? MergeEventMaps<AA & Record<string, unknown>, BA & Record<string, unknown>> : AA : never;\n operations: A extends { operations: infer AO } ? B extends { operations: infer BO } ? MergeEventMaps<AO & Record<string, (...args: any[]) => any>, BO & Record<string, (...args: any[]) => any>> : AO : never;\n eventSchemas: A extends { eventSchemas: infer AE } ? B extends { eventSchemas: infer BE } ? MergeEventMaps<AE & Record<string, unknown>, BE & Record<string, unknown>> : AE : never;\n};\n\ntype ModelStateMetaFromParts<\n RootPath extends string,\n Parts extends readonly unknown[],\n> = {\n name: RootPath;\n states: (CollectModelParts<Parts, RootPath, RootPath, Parts>['states']) & string;\n finalStates: (CollectModelParts<Parts, RootPath, RootPath, Parts>['finalStates']) & string;\n transitions: CollectModelParts<Parts, RootPath, RootPath, Parts>['transitions'];\n initials: CollectModelParts<Parts, RootPath, RootPath, Parts>['initials'];\n attributes: InferredAttributes<Parts>;\n operations: InferredOperations<Parts>;\n eventSchemas: MergeEventMaps<\n EventSchemasFromPartialsWithContext<Parts, Parts>,\n EventSchemaFromTransitions<\n CollectModelParts<Parts, RootPath, RootPath, Parts>['transitions']\n >\n >;\n};\n\ntype EventSchemaFromTransitions<Transitions> =\n [Transitions] extends [never]\n ? {}\n : {\n [Name in TransitionEventNames<Transitions>]: EventSchemaForTransitionEvent<Transitions, Name>;\n };\n\ntype TransitionEventNames<Transitions> =\n Transitions extends { events: infer EventName }\n ? EventName & string\n : never;\n\ntype EventSchemaForTransitionEvent<Transitions, EventName extends string> =\n Transitions extends infer Transition\n ? Transition extends { events: infer E; schema: infer S }\n ? EventName extends E\n ? S extends Record<string, unknown>\n ? EventName extends keyof S\n ? S[EventName]\n : unknown\n : unknown\n : never\n : never\n : never;\n\ntype EventFromSchemaMap<SchemaMap extends Record<string, unknown>> = {\n [Name in keyof SchemaMap & string]: Event<Name, SchemaMap[Name]>\n}[keyof SchemaMap & string];\n\ntype EventNameFromUnion<U> =\n U extends Event<infer Name, any>\n ? Name\n : never;\n\ntype EventUnionFromMap<SchemaMap> =\n SchemaMap extends Record<string, unknown> ? EventFromSchemaMap<SchemaMap> : never;\n\ntype EventUnionFromTransitions<Transitions> =\n TransitionEventNames<Transitions> extends infer Name\n ? Name extends string\n ? Event<Name, EventSchemaForTransitionEvent<Transitions, Name>>\n : never\n : never;\n\ntype ModelTransitionEventsFromParts<Transitions> = EventUnionFromTransitions<Transitions>;\n\ntype ModelNameFromInstance<M extends TypedModel<any, any, any, any, any, any, any, Instance>> =\n M extends TypedModel<any, any, any, any, any, any, infer TName, any> ? TName : string;\n\ntype ModelEventSchemas<M> =\n ModelStateMeta<M> extends { eventSchemas: infer E }\n ? E extends Record<string, unknown>\n ? E\n : ModelEventMap<M>\n : ModelEventMap<M>;\n\ntype EventMapKeys<M> = keyof ModelEventSchemas<M> & string;\n\ntype EventSchemaFromMapFor<\n M,\n N extends string,\n> = ModelEventMap<M> extends infer E\n ? E extends Record<string, unknown>\n ? N extends keyof E\n ? E[N]\n : never\n : never\n : never;\n\ntype EventSchemaFromTransitionsFor<\n M,\n N extends string,\n> = EventSchemaForTransitionEvent<TransitionMetaModel<M>, N>;\n\ntype EventSchemaFor<M, N extends string> =\n N extends EventMapKeys<M>\n ? [EventSchemaFromTransitionsFor<M, N>] extends [never]\n ? [EventSchemaFromMapFor<M, N>] extends [never]\n ? unknown\n : EventSchemaFromMapFor<M, N>\n : EventSchemaFromTransitionsFor<M, N>\n : unknown;\n\ntype StatePathsOfModel<M> = ModelStateMeta<M>['states'];\ntype FinalStatePathsOfModel<M> = ModelStateMeta<M>['finalStates'];\ntype TransitionMetaModel<M> = ModelStateMeta<M>['transitions'];\n\ntype EventNamesFromMap<M> = Exclude<EventMapKeys<M>, never>;\ntype EventNamesFromTransitions<M> = Exclude<TransitionMetaModel<M>, never> extends infer T\n ? T extends { events: infer E }\n ? E\n : never\n : never;\n\ntype CompletionStateCandidates<M> = FinalStatePathsOfModel<M> extends infer FinalPath\n ? FinalPath extends string\n ? ParentPath<FinalPath>\n : never\n : never;\n\nexport type StatePathsOf<M extends TypedModel<any, any, any, any, any, any, any, any>> =\n StatePathsOfModel<M>;\n\nexport type RelativeStatePathsOf<M extends TypedModel<any, any, any, any, any, any, any, any>> =\n RelativeFromAbsolute<StatePathsOf<M>>;\n\nexport type LeafStatesOf<M extends TypedModel<any, any, any, any, any, any, any, any>> =\n StatePathsOf<M> extends infer StatePath\n ? StatePath extends string\n ? HasStateDescendant<StatePath, StatePathsOf<M>> extends true\n ? never\n : StatePath\n : never\n : never;\n\ntype HasStateDescendant<StatePath extends string, Set extends string> =\n Set extends `${StatePath}/${string}` ? true : false;\n\nexport type AttributesOf<M extends TypedModel<any, any, any, any, any, any, any, any>> =\n ModelStateMeta<M> extends { attributes: infer A }\n ? A extends Record<string, unknown>\n ? A\n : {}\n : {};\n\nexport type AttributeKeysOf<M extends TypedModel<any, any, any, any, any, any, any, any>> =\n keyof AttributesOf<M> & string;\n\nexport type OperationsOf<M extends TypedModel<any, any, any, any, any, any, any, any>> =\n ModelStateMeta<M> extends { operations: infer O }\n ? O\n : ModelOperationMap<M>;\n\nexport type OperationKeysOf<M extends TypedModel<any, any, any, any, any, any, any, any>> =\n keyof OperationsOf<M> & string;\n\nexport type CallableOperationKeysOf<M extends TypedModel<any, any, any, any, any, any, any, any>> =\n OperationKeysOf<M>;\n\nexport type GuardOperationKeysOf<M extends TypedModel<any, any, any, any, any, any, any, any>> = {\n [K in OperationKeysOf<M>]:\n IsAny<ReturnType<Extract<OperationsOf<M>[K], (...args: any[]) => any>>> extends true\n ? never\n : ReturnType<Extract<OperationsOf<M>[K], (...args: any[]) => any>> extends boolean\n ? K\n : never;\n}[OperationKeysOf<M>];\n\nexport type FinalStatesOf<M extends TypedModel<any, any, any, any, any, any, any, any>> =\n FinalStatePathsOfModel<M>;\n\nexport type IsFinalState<\n M extends TypedModel<any, any, any, any, any, any, any, any>,\n Path extends string,\n> = Path extends FinalStatePathsOfModel<M> ? true : false;\n\nexport type CompletionStatePathsOf<M extends TypedModel<any, any, any, any, any, any, any, any>> =\n CompletionStateCandidates<M>;\n\nexport type DoneEventNamesOf<M extends TypedModel<any, any, any, any, any, any, any, any>> =\n CompletionStatePathsOf<M> extends infer CompletionPath\n ? CompletionPath extends string\n ? `done:${CompletionPath}`\n : never\n : never;\n\nexport type DoneEventOf<M extends TypedModel<any, any, any, any, any, any, any, any>> =\n DoneEventNamesOf<M> extends infer Name\n ? Name extends string\n ? Event<Name>\n : never\n : never;\n\nexport type CompletionEventsOf<M extends TypedModel<any, any, any, any, any, any, any, any>> = DoneEventOf<M>;\n\nexport type EventNamesFromState<\n M extends TypedModel<any, any, any, any, any, any, any, any>,\n StatePath extends string,\n> = TransitionMetaModel<M> extends infer T\n ? T extends { source: StatePath; events: infer E }\n ? E\n : never\n : never;\n\nexport type EventsForState<\n M extends TypedModel<any, any, any, any, any, any, any, any>,\n StatePath extends string,\n> = EventOfName<M, EventNamesFromState<M, StatePath>>;\n\nexport type EventNamesOf<M extends TypedModel<any, any, any, any, any, any, any, any>> =\n Exclude<EventNamesFromMap<M>, DoneEventNamesOf<M>>;\n\nexport type EventOfName<\n M extends TypedModel<any, any, any, any, any, any, any, any>,\n Name extends string,\n> = Name extends EventNamesOf<M>\n ? Event<Name, EventSchemaFor<M, Name>>\n : never;\n\nexport type DispatchEvent<Name extends string = string, Data = unknown> =\n Omit<Event<Name, Data>, 'data'> & {\n readonly data?: Data;\n };\n\nexport type DispatchEventOfName<\n M extends TypedModel<any, any, any, any, any, any, any, any>,\n Name extends string,\n> = Name extends EventNamesOf<M>\n ? EventOfName<M, Name> extends Event<Name, infer Data>\n ? DispatchEvent<Name, Data>\n : never\n : never;\n\nexport type DispatchEventsOf<\n M extends TypedModel<any, any, any, any, any, any, any, any>,\n> = DispatchEventOfName<M, EventNamesOf<M>>;\n\nexport type TargetsFromState<\n M extends TypedModel<any, any, any, any, any, any, any, any>,\n StatePath extends string,\n> = TransitionMetaModel<M> extends infer T\n ? T extends { source: StatePath; events: infer _; target: infer Target }\n ? Target extends string\n ? Target\n : never\n : never\n : never;\n\nexport type TargetsFromStateAndEvent<\n M extends TypedModel<any, any, any, any, any, any, any, any>,\n StatePath extends string,\n EventName extends string,\n> = TransitionMetaModel<M> extends infer T\n ? T extends { source: StatePath; events: infer E; target: infer Target }\n ? EventName extends E\n ? (Target extends string ? Target : never)\n : never\n : never\n : never;\n\nexport type SourcesForEvent<\n M extends TypedModel<any, any, any, any, any, any, any, any>,\n EventName extends string,\n> = TransitionMetaModel<M> extends infer T\n ? T extends { source: infer Source; events: infer E }\n ? EventName extends E\n ? Source\n : never\n : never\n : never;\n\nexport type CanTransition<\n M extends TypedModel<any, any, any, any, any, any, any, any>,\n StatePath extends string,\n TargetPath extends string,\n EventName extends string,\n> = TargetPath extends TargetsFromStateAndEvent<M, StatePath, EventName> ? true : false;\n\nexport type ChildrenOf<\n M extends TypedModel<any, any, any, any, any, any, any, any>,\n StatePath extends string,\n> = StatePathsOf<M> extends infer Candidate\n ? Candidate extends string\n ? ParentPath<Candidate> extends StatePath\n ? Candidate\n : never\n : never\n : never;\n\nexport type ParentOf<\n M extends TypedModel<any, any, any, any, any, any, any, any>,\n StatePath extends string,\n> = ParentPath<StatePath>;\n\nexport type DescendantsOf<\n M extends TypedModel<any, any, any, any, any, any, any, any>,\n StatePath extends string,\n> = StatePathsOf<M> extends infer Candidate\n ? Candidate extends `${StatePath}/${string}`\n ? Candidate\n : never\n : never;\n\nexport type AncestorsOf<\n M extends TypedModel<any, any, any, any, any, any, any, any>,\n StatePath extends string,\n> = StatePathsOf<M> extends infer Candidate\n ? Candidate extends string\n ? IsStatePathPrefix<Candidate, StatePath> extends true\n ? Candidate\n : never\n : never\n : never;\n\nexport type InitialStateOf<\n M extends TypedModel<any, any, any, any, any, any, any, any>,\n StatePath extends string,\n> = StatePath extends string ? Extract<InitialStateCandidates<M>[StatePath], string> : never;\n\ntype InitialStateCandidates<M extends TypedModel<any, any, any, any, any, any, any, any>> =\n ModelStateMeta<M>['initials'];\n\nexport type SnapshotOf<M extends TypedModel<any, any, any, any, any, any, any, any>> = {\n id: string;\n qualifiedName: string;\n state: StatePathsOf<M>;\n attributes: AttributesOf<M>;\n queueLen: number;\n events: EventSnapshotOf<M>[];\n};\n\ntype EventTargetForName<\n M extends TypedModel<any, any, any, any, any, any, any, any>,\n EventName extends string,\n> = TransitionMetaModel<M> extends infer T\n ? T extends { events: infer E; target: infer Target }\n ? EventName extends E\n ? Target\n : never\n : never\n : never;\n\nexport type EventSnapshotOf<M extends TypedModel<any, any, any, any, any, any, any, any>> = {\n [Name in EventNamesFromTransitions<M>]: {\n event: Name;\n target: EventTargetForName<M, Name>;\n guard: boolean;\n schema?: EventSchemaFor<M, Name>;\n };\n}[EventNamesFromTransitions<M>];\n\nexport type BehaviorCallbackFor<\n M extends TypedModel<any, any, any, any, any, any, any, any>,\n> = (ctx: Context, instance: M['__hsm_instance'] & Instance, event: EventOfName<M, EventNamesOf<M> & string>) => unknown;\n\ntype OperationSignature<\n M extends TypedModel<any, any, any, any, any, any, any, any>,\n K extends keyof OperationsOf<M> & string,\n> = Extract<OperationsOf<M>[K], (...args: any[]) => any>;\n\nexport type MachineInstanceFor<\n M extends TypedModel<any, any, any, any, any, any, any, Instance>,\n I extends Instance,\n> = M extends TypedModel<infer A, infer O, any, any, any, any, any, any>\n ? Omit<I, \"dispatch\" | \"state\" | \"takeSnapshot\" | \"get\" | \"set\" | \"call\"> & {\n __hsm_model: M;\n dispatch(event: DispatchEventsOf<M>): void;\n state(): StatePathsOf<M>;\n takeSnapshot(): SnapshotOf<M>;\n get<K extends keyof A & string>(name: K): A[K];\n get(name: string): unknown;\n set<K extends keyof A & string>(name: K, value: A[K]): void;\n set(name: string, value: unknown): void;\n call<K extends keyof O & string>(\n name: K,\n ...args: Parameters<Extract<O[K], (...args: any[]) => any>>\n ): ReturnType<Extract<O[K], (...args: any[]) => any>>;\n call(name: string, ...args: unknown[]): unknown;\n }\n : never;\n\ntype FlattenGroupMember<Member> =\n Member extends Group<infer Members>\n ? FlattenGroupMembers<Members>\n : [Member];\n\ntype FlattenGroupMembers<Members extends readonly unknown[]> =\n Members extends readonly [infer Head, ...infer Tail]\n ? [\n ...FlattenGroupMember<Head>,\n ...FlattenGroupMembers<Tail>,\n ]\n : [];\n\ntype GroupModelOf<Member> =\n Member extends { __hsm_model: infer Model }\n ? Model extends TypedModel<any, any, any, any, any, any, any, any>\n ? Model\n : never\n : never;\n\ntype GroupDispatchEventOf<Member> =\n GroupModelOf<Member> extends infer Model extends TypedModel<any, any, any, any, any, any, any, any>\n ? DispatchEventsOf<Model>\n : Member extends { dispatch(event: infer Event): void }\n ? Event\n : EventRecord;\n\ntype GroupAttributeKeysOf<Member> =\n GroupModelOf<Member> extends infer Model extends TypedModel<any, any, any, any, any, any, any, any>\n ? AttributeKeysOf<Model>\n : string;\n\ntype GroupAttributeValueOf<Member, Key extends string> =\n GroupModelOf<Member> extends infer Model extends TypedModel<any, any, any, any, any, any, any, any>\n ? Key extends AttributeKeysOf<Model>\n ? AttributesOf<Model>[Key]\n : never\n : unknown;\n\ntype SharedAttributeKeysOfFlattenedMembers<Members extends readonly unknown[]> =\n Members extends readonly [infer Head, ...infer Tail]\n ? GroupAttributeKeysOf<Head> & SharedAttributeKeysOfFlattenedMembers<Tail>\n : string;\n\ntype SharedAttributeKeysOfGroupMembers<Members extends readonly unknown[]> =\n SharedAttributeKeysOfFlattenedMembers<FlattenGroupMembers<Members>>;\n\ntype SharedAttributeValueOfFlattenedMembers<\n Members extends readonly unknown[],\n Key extends string,\n> =\n Members extends readonly [infer Head, ...infer Tail]\n ? GroupAttributeValueOf<Head, Key> & SharedAttributeValueOfFlattenedMembers<Tail, Key>\n : unknown;\n\ntype SharedAttributeValueOfGroupMembers<\n Members extends readonly unknown[],\n Key extends string,\n> = SharedAttributeValueOfFlattenedMembers<FlattenGroupMembers<Members>, Key>;\n\ntype FirstGroupMember<Members extends readonly unknown[]> =\n FlattenGroupMembers<Members> extends readonly [infer Head, ...infer _Tail]\n ? Head\n : never;\n\ntype GroupOperationKeysOf<Member> =\n GroupModelOf<Member> extends infer Model extends TypedModel<any, any, any, any, any, any, any, any>\n ? OperationKeysOf<Model>\n : string;\n\ntype GroupOperationSignatureOf<Member, Key extends string> =\n GroupModelOf<Member> extends infer Model extends TypedModel<any, any, any, any, any, any, any, any>\n ? Key extends OperationKeysOf<Model>\n ? OperationSignature<Model, Key>\n : (...args: any[]) => unknown\n : (...args: any[]) => unknown;\n\ntype GroupEventUnion<Members extends readonly unknown[]> =\n FlattenGroupMembers<Members>[number] extends infer Member\n ? Member extends unknown\n ? GroupDispatchEventOf<Member>\n : never\n : never;\n\ntype GroupOperationKeys<Members extends readonly unknown[]> =\n GroupOperationKeysOf<FirstGroupMember<Members>>;\n\ntype GroupOperationSignature<\n Members extends readonly unknown[],\n Key extends string,\n> = GroupOperationSignatureOf<FirstGroupMember<Members>, Key>;\n\ntype GroupSnapshotOfMember<Member> =\n GroupModelOf<Member> extends infer Model extends TypedModel<any, any, any, any, any, any, any, any>\n ? SnapshotOf<Model>\n : Member extends { takeSnapshot(): infer CurrentSnapshot }\n ? CurrentSnapshot\n : Snapshot;\n\ntype GroupSnapshotsOfFlattenedMembers<Members extends readonly unknown[]> =\n Members extends readonly [infer Head, ...infer Tail]\n ? [\n GroupSnapshotOfMember<Head>,\n ...GroupSnapshotsOfFlattenedMembers<Tail>,\n ]\n : [];\n\nexport type GroupSnapshotOf<Members extends readonly unknown[]> = Snapshot & {\n members: GroupSnapshotsOfFlattenedMembers<FlattenGroupMembers<Members>>;\n};\n\ntype BuilderWithSpec<Signature, Spec> = Signature & { readonly __hsmSpec: Spec };\n\ntype BehaviorArgument<EventType extends EventRecord = EventRecord> =\n ((ctx: Context, instance: Instance, evt: EventType) => unknown) | string;\n\nfunction attachSpec<Signature, Spec>(\n builder: Signature,\n spec: Spec,\n): BuilderWithSpec<Signature, Spec> {\n return Object.assign(builder as Signature, {\n __hsmSpec: spec,\n }) as BuilderWithSpec<Signature, Spec>;\n}\n\ntype InternalRuntime = {\n dispatch: (event: EventRecord) => void;\n state: () => string;\n context: () => ActiveContext;\n clock: ClockConfig;\n get: (name: string) => unknown;\n set: (name: string, value: unknown) => void;\n invoke: (name: string, ctx: Context, args: Array<unknown>) => unknown;\n call: (name: string, ...args: unknown[]) => unknown;\n restart: (data?: unknown) => void;\n takeSnapshot: () => Snapshot;\n onAfter: (bucket: keyof HSM[\"after\"], key: string, listener: () => void) => void;\n stop: () => void;\n readonly id: string;\n readonly model: any;\n readonly name: string;\n readonly queue: QueueShape;\n readonly processing: boolean;\n};\n\nexport type { Snapshot, Config, ClockConfig };\n\ntype InternalRuntimeMap = WeakMap<object, InternalRuntime>;\nconst runtimeByInstance: InternalRuntimeMap = new WeakMap();\n\nfunction bindRuntime(instance: object, runtime: InternalRuntime): void {\n runtimeByInstance.set(instance, runtime);\n}\n\nfunction runtimeFor(instance: unknown): InternalRuntime | undefined {\n if (!instance || typeof instance !== \"object\") {\n return undefined;\n }\n return runtimeByInstance.get(instance);\n}\n\n\n\nexport function join(...segments: string[]): string {\n\n var parts: string[] = []; // Stores the normalized path components (e.g., ['a', 'b'])\n var currentIsAbsolute = false; // Flag to track if the *resulting* path should be absolute\n\n // Loop through each input segment\n for (var i = 0; i < segments.length; i++) {\n var segment = segments[i];\n\n // Skip null, undefined, or empty segments.\n if (segment === null || segment === undefined || segment.length === 0) {\n continue;\n }\n\n // If the current segment starts with '/', it resets the path.\n // All previous parts are discarded, and the new path effectively becomes absolute from here.\n if (segment[0] === '/') {\n parts = []; // Reset parts array\n currentIsAbsolute = true;\n }\n\n var startIndex = 0;\n var currentPartEnd = 0;\n var part = '';\n // Iterate through the segment to extract components between slashes\n while (currentPartEnd < segment.length) {\n if (segment[currentPartEnd] === '/') {\n // If we found a component (i.e., not multiple slashes like // or a leading slash at start of segment)\n if (currentPartEnd > startIndex) {\n part = segment.substring(startIndex, currentPartEnd);\n\n // Process the extracted part\n if (part === '..') {\n // If absolute path and at root (parts is empty), '..' has no effect (e.g., /../ -> /)\n if (currentIsAbsolute && parts.length === 0) {\n // Do nothing\n }\n // If the last part pushed was not '..', we can pop it (e.g., /a/b/../ -> /a/)\n else if (parts.length > 0 && parts[parts.length - 1] !== '..') {\n parts.pop(); // Go up one directory\n }\n // Otherwise (parts is empty and relative, or last part was '..'), push '..'\n else {\n parts.push(part);\n }\n } else if (part !== '.') { // Ignore '.' (e.g., a/./b -> a/b)\n parts.push(part);\n }\n }\n startIndex = currentPartEnd + 1; // Move past the current separator\n }\n currentPartEnd++;\n }\n\n // Handle the last component of the segment (if any) after the loop finishes\n if (currentPartEnd > startIndex) {\n part = segment.substring(startIndex, currentPartEnd);\n // Process the last extracted part, same logic as above\n if (part === '..') {\n if (currentIsAbsolute && parts.length === 0) {\n // Do nothing\n } else if (parts.length > 0 && parts[parts.length - 1] !== '..') {\n parts.pop();\n } else {\n parts.push(part);\n }\n } else if (part !== '.') {\n parts.push(part);\n }\n }\n }\n\n // Join the processed parts into a single string\n var joinedPath = parts.join('/');\n\n // If the resulting path should be absolute, prepend '/'\n if (currentIsAbsolute) {\n joinedPath = '/' + joinedPath;\n }\n\n // Determine if the *final* path should have a trailing slash.\n // This is true if the *last original input segment* ended with a slash,\n // AND the resulting path is not just the root ('/').\n var hasTrailingSlash = false;\n if (segments.length > 0) {\n var lastInputSegment = segments[segments.length - 1];\n // Check if the last non-empty segment ends with a slash\n if (lastInputSegment && lastInputSegment.length > 0 && lastInputSegment[lastInputSegment.length - 1] === '/') {\n hasTrailingSlash = true;\n }\n }\n\n // Handle final path resolution:\n // 1. If path is empty (e.g., join('a', '..')), return '.' for relative, '/' for absolute.\n if (joinedPath.length === 0) {\n return currentIsAbsolute ? '/' : '.';\n }\n // 2. If it should have a trailing slash and isn't just '/', append it.\n else if (hasTrailingSlash && joinedPath !== '/') {\n return joinedPath + \"/\";\n }\n\n // 3. Otherwise, return the path as is.\n return joinedPath;\n}\n\nfunction slice(args: IArguments, start: number = 0): any[] {\n var result = [];\n for (var i = start; i < args.length; i++) {\n result.push(args[i]);\n }\n return result;\n}\n\n\n\nexport function dirname(path: string): string {\n // Handle null, undefined, or empty path strings\n if (path === undefined || path === null || path.length === 0) {\n return '.';\n }\n\n // Determine if the original path was absolute (starts with '/').\n // This helps distinguish e.g., '/foo' (dirname is '/') from 'foo' (dirname is '.').\n var originalPathWasAbsolute = (path[0] === '/');\n\n // --- Step 1: Trim trailing separators ---\n // Find the index of the last non-separator character.\n // This effectively removes trailing slashes, so 'a/b/c/' becomes 'a/b/c'.\n // If path is '/', '///', etc., 'i' will become -1.\n var i = path.length - 1;\n while (i >= 0 && path[i] === '/') {\n i--;\n }\n\n // 'p' is the path without trailing separators.\n // Example: If path was 'a/b/c/', p becomes 'a/b/c'.\n // Example: If path was '/', p becomes ''.\n var p = path.substring(0, i + 1);\n\n // --- Step 2: Handle cases where 'p' is empty after trimming ---\n // This means the original path was composed solely of separators (e.g., '/', '///')\n // or was initially an empty string.\n if (p.length === 0) {\n // If the original path was absolute (e.g., '/'), return '/'.\n // Otherwise (e.g., '' -> should be '.'), return '.'.\n return originalPathWasAbsolute ? '/' : '.';\n }\n\n // --- Step 3: Find the last separator in the (now trimmed) path 'p' ---\n var lastSeparatorIndex = p.lastIndexOf('/');\n\n // --- Step 4: Determine the result based on the last separator index ---\n\n // Case A: No separator found in 'p' (e.g., 'foo', or '/foo' where 'p' became 'foo').\n if (lastSeparatorIndex < 0) {\n // If the original path was absolute (e.g., '/foo'), its dirname is '/'.\n // Otherwise (e.g., 'foo'), its dirname is '.'.\n return originalPathWasAbsolute ? '/' : '.';\n }\n\n // Case B: A separator was found. Extract the part of 'p' before that separator.\n var result = \n (p.substring(0, lastSeparatorIndex));\n\n // Case C: The extracted 'result' is empty (e.g., original '/a', 'p' was '/a', lastSeparatorIndex was 0).\n // This means the last component was the only component after a root.\n if (result.length === 0) {\n // If the original path was absolute, the dirname is '/'.\n // (This correctly handles '/a' -> '/')\n return originalPathWasAbsolute ? '/' : '.';\n }\n\n // Otherwise, return the extracted directory path.\n return result;\n}\n\n\nexport function isAbsolute(path: string): boolean {\n var c = path.charAt(0);\n // Unix-style: \"/foo\"\n if (c === '/') return true;\n\n // Windows-style: \"C:\\foo\" or \"C:/foo\"\n return path.length > 2 && path.charAt(1) === ':' && path.charAt(2) === '/';\n}\n\n// #endregion\n\n// #region AbortController\n\n\n\n\n\nexport class Context {\n listeners: Array<() => void>;\n instances: Record<string, Instance>;\n done: boolean;\n\n constructor() {\n this.listeners = [];\n this.instances = {};\n this.done = false;\n }\n\n addEventListener(_type: \"done\", listener: () => void): void {\n this.listeners.push(listener);\n }\n\n removeEventListener(_type: \"done\", listener: () => void): void {\n var index = this.listeners.indexOf(listener);\n if (index !== -1) {\n this.listeners.splice(index, 1);\n }\n }\n}\n\n\n\n// #endregion\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n// Define special events\nexport const InitialEvent = {\n kind: kinds.CompletionEvent,\n qualifiedName: \"hsm_initial\",\n name: \"hsm_initial\"\n};\n\n// AnyEvent is not used in this optimized version\n// Wildcard events are not supported for performance reasons\n\n\nexport const FinalEvent = {\n name: 'hsm_final',\n kind: kinds.CompletionEvent\n};\n\n\nexport const ErrorEvent = {\n name: 'hsm_error',\n kind: kinds.ErrorEvent\n};\n\nexport const DefaultClock: Required<ClockConfig> = {\n setTimeout:\n typeof setTimeout === \"function\"\n ? ((callback: (...args: Array<unknown>) => void, timeout?: number, ...args: Array<unknown>) =>\n setTimeout(callback, timeout || 0, ...args)) as TimerFunction\n : function (_callback, _timeout, ..._args) {\n return 0 as unknown as TimerHandle;\n },\n clearTimeout: typeof clearTimeout === \"function\"\n ? ((id: TimerHandle | undefined) => {\n if (id !== undefined) {\n clearTimeout(id as unknown as number);\n }\n })\n : function () { },\n now: typeof Date !== \"undefined\" && typeof Date.now === \"function\" ? Date.now : function () {\n return 0;\n },\n};\n\n\nexport function event<Name extends string = string, Schema = unknown>(\n name: Name,\n schema?: Schema,\n): Event<Name, Schema> {\n return {\n kind: kinds.Event,\n name,\n schema,\n } as unknown as Event<Name, Schema>;\n}\n\n\nfunction apply(\n model: Model,\n stack: Array<AnyModelElement>,\n partials: ReadonlyArray<(model: Model, stack: Array<AnyModelElement>) => unknown>,\n): void {\n for (var i = 0; i < partials.length; i++) {\n var partial = partials[i];\n if (typeof partial === \"function\") {\n partial(model, stack);\n }\n }\n}\n\n\nfunction qualifyModelName(model: Model, name: string): string {\n if (isAbsolute(name)) {\n return isAncestor(model.qualifiedName, name) || model.qualifiedName === name\n ? name\n : join(model.qualifiedName, name.slice(1));\n }\n return join(model.qualifiedName, name);\n}\n\n\nfunction registerEvent(model: Model, event: EventRecord): EventRecord {\n if (!model.events) {\n model.events = {};\n }\n var existing = model.events[event.name];\n if (!existing) {\n model.events[event.name] = event;\n return event;\n }\n return existing;\n}\n\n\nfunction resolveOperation(model: Model, value: string): Expression {\n return function (ctx: Context, instance: Instance, event: EventRecord) {\n var runtime = runtimeFor(instance);\n if (!runtime) {\n return false;\n }\n var name = qualifyModelName(model, value);\n return !!runtime.invoke(name, ctx, [event]);\n };\n}\n\nfunction hasThen(value: unknown): value is Thenable {\n return (\n !!value &&\n typeof (value as Record<string, unknown>).then === 'function'\n );\n}\n\nfunction hasAddEventListener(value: unknown): value is DoneEventTarget {\n return (\n !!value &&\n typeof (value as Record<string, unknown>).addEventListener === 'function'\n );\n}\n\nfunction hasOn(value: unknown): value is OnEventTarget {\n return (\n !!value &&\n typeof (value as Record<string, unknown>).on === 'function'\n );\n}\n\nfunction toSignalLike(value: unknown): SignalLike | undefined {\n if (hasThen(value)) {\n return value as Thenable;\n }\n if (hasAddEventListener(value) || hasOn(value)) {\n return value as DoneEventTarget & OnEventTarget;\n }\n return undefined;\n}\n\nfunction coerceDuration(value: unknown): number {\n var numericValue = Number(value);\n return isNaN(numericValue) ? 0 : numericValue;\n}\n\nfunction coerceTimepoint(value: unknown): number {\n if (value instanceof Date) {\n return value.getTime();\n }\n return coerceDuration(value);\n}\n\nfunction withThenable<T>(value: T, callback: (value: any) => unknown): unknown {\n if (hasThen(value)) {\n return Promise.resolve(value).then(callback);\n }\n return callback(value);\n}\n\nfunction getState(model: Model, path: Path | undefined): State | undefined {\n if (!path) {\n return undefined;\n }\n var member = model.members[path];\n return isStateElement(member) ? member : undefined;\n}\n\nfunction getVertex(model: Model, path: Path | undefined): Vertex | undefined {\n if (!path) {\n return undefined;\n }\n var member = model.members[path];\n return isVertex(member) ? member : undefined;\n}\n\nfunction getTransition(model: Model, path: Path | undefined): Transition | undefined {\n if (!path) {\n return undefined;\n }\n var member = model.members[path];\n return isTransitionElement(member) ? member : undefined;\n}\n\nfunction getBehavior(model: Model, path: Path | undefined): Behavior | undefined {\n if (!path) {\n return undefined;\n }\n var member = model.members[path];\n return isBehaviorElement(member) ? member : undefined;\n}\n\nfunction getConstraint(model: Model, path: Path | undefined): Constraint | undefined {\n if (!path) {\n return undefined;\n }\n var member = model.members[path];\n return isConstraintElement(member) ? member : undefined;\n}\n\n\n// Helper functions\n\nexport function isAncestor(ancestor: string, descendant: string): boolean {\n // Simple cases\n if (ancestor === descendant) return false;\n if (ancestor === '/') return isAbsolute(descendant); // root is ancestor of all absolute paths\n return descendant.startsWith(ancestor + \"/\")\n}\n\n\nexport function lca(a: string, b: string): string {\n if (a === b) return dirname(a);\n if (!a) return b;\n if (!b) return a;\n if (dirname(a) === dirname(b)) return dirname(a);\n if (isAncestor(a, b)) return a;\n if (isAncestor(b, a)) return b;\n return lca(dirname(a), dirname(b));\n}\n\ntype AfterBucket = \"entered\" | \"exited\" | \"processed\" | \"dispatched\" | \"executed\";\n\nfunction isStateElement(element: AnyModelElement): element is State {\n return !!element && isKind(element.kind, kinds.State);\n}\n\nfunction isModelElement(element: AnyModelElement): element is Model {\n return !!element && isKind(element.kind, kinds.Model);\n}\n\nfunction isTransitionElement(element: AnyModelElement): element is Transition {\n return !!element && isKind(element.kind, kinds.Transition);\n}\n\nfunction isConstraintElement(element: AnyModelElement): element is Constraint {\n return !!element && isKind(element.kind, kinds.Constraint);\n}\n\nfunction isBehaviorElement(element: AnyModelElement): element is Behavior {\n return !!element && isKind(element.kind, kinds.Behavior);\n}\n\nfunction isVertex(element: AnyModelElement): element is Vertex {\n return !!element && isKind(element.kind, kinds.Vertex);\n}\n\nfunction isChoiceElement(element: AnyModelElement): element is Vertex {\n return !!element && isKind(element.kind, kinds.Choice);\n}\n\nfunction findState(stack: AnyModelElement[]): State | undefined {\n return find(stack, kinds.State) as State | undefined;\n}\n\nfunction findTransition(stack: AnyModelElement[]): Transition | undefined {\n return find(stack, kinds.Transition) as Transition | undefined;\n}\n\nfunction findModel(stack: AnyModelElement[]): Model | undefined {\n return find(stack, kinds.Model) as Model | undefined;\n}\n\nfunction findVertex(stack: AnyModelElement[]): Vertex | undefined {\n return find(stack, kinds.Vertex) as Vertex | undefined;\n}\n\n\n\nexport class Queue {\n front: EventRecord[] = [];\n back: Array<EventRecord | undefined> = [];\n backHead = 0;\n\n len(): number {\n return this.front.length + (this.back.length - this.backHead);\n }\n\n pop(): EventRecord | undefined {\n var event: EventRecord | undefined;\n if (this.front.length > 0) {\n event = this.front.pop() as Event | undefined; // O(1) for completion events\n } else if (this.backHead < this.back.length) {\n event = this.back[this.backHead];\n this.back[this.backHead] = undefined; // Help GC\n this.backHead++;\n\n // Reset the array when we've consumed all events to prevent unbounded growth\n if (this.backHead === this.back.length) {\n this.back = [];\n this.backHead = 0;\n }\n }\n return event;\n }\n\n push(...events: EventRecord[]): void {\n for (var i = 0; i < events.length; i++) {\n var event = events[i];\n if (isKind(event.kind, kinds.CompletionEvent)) {\n this.front.push(event);\n } else {\n this.back.push(event);\n }\n }\n }\n}\n\n\nfunction buildTransitionTable(model: Model): void {\n\n // For each state in the model\n for (var stateName in model.members) {\n var state = model.members[stateName];\n if (!isStateElement(state) && !isModelElement(state)) continue;\n\n // Initialize tables for this state\n model.transitionMap[stateName] = \n ({});\n\n // Collect all transitions accessible from this state by walking up hierarchy\n var transitionsByEvent: TransitionTable = {};\n var currentPath = \n(stateName);\n var depth = 0;\n\n while (currentPath) {\n var currentState = model.members[currentPath];\n if (currentState && (isStateElement(currentState) || isModelElement(currentState))) {\n var stateOrModel = currentState;\n // Process transitions at this level\n for (var i = 0; i < stateOrModel.transitions.length; i++) {\n var transitionName = stateOrModel.transitions[i];\n var transition = \n (model.members[transitionName]);\n\n if (isTransitionElement(transition) && transition.events) {\n // Process each event this transition handles\n for (var j = 0; j < transition.events.length; j++) {\n var transitionEventName = (transition.events[j]);\n\n // Skip wildcard events - not supported\n if (transitionEventName.indexOf('*') !== -1) {\n continue;\n }\n\n // Regular event - add to lookup table\n if (!transitionsByEvent[transitionEventName]) {\n transitionsByEvent[transitionEventName] = [];\n }\n transitionsByEvent[transitionEventName].push({\n transition,\n priority: depth,\n });\n }\n }\n }\n }\n\n // Move up to parent\n if (currentPath === '/' || !currentPath) break;\n var parentPath = dirname(currentPath);\n if (parentPath === currentPath) break; // Avoid infinite loop\n currentPath = parentPath;\n depth++;\n }\n\n // Sort transitions by priority (lower depth = higher priority)\n for (var eventName in transitionsByEvent) {\n var transitions = transitionsByEvent[eventName];\n transitions.sort(function (a, b) {\n return a.priority - b.priority;\n });\n\n // Extract just the transition objects\n model.transitionMap[stateName][eventName] = transitions.map(function (t) {\n return t.transition;\n });\n }\n }\n\n}\n\n\nfunction buildDeferredTable(model: Model): void {\n // For each state in the model\n for (var stateName in model.members) {\n var state = \n (model.members[stateName]);\n if (!isStateElement(state) && !isModelElement(state)) continue;\n model.deferredMap[stateName] = \n ({});\n var currentPath = \n (stateName);\n while (currentPath) {\n var currentState = \n (model.members[currentPath]);\n if (currentState && (isStateElement(currentState) || isModelElement(currentState))) {\n var stateOrModel = currentState;\n\n // Process deferred events at this level\n if (stateOrModel.deferred) {\n for (var i = 0; i < stateOrModel.deferred.length; i++) {\n var deferredEvent = stateOrModel.deferred[i];\n var transitions = model.transitionMap[stateName][deferredEvent];\n if (transitions && transitions.some(t => t.source === stateName)) {\n continue;\n }\n // Only support exact event names for O(1) lookup\n // Skip wildcard patterns for performance\n if (deferredEvent.indexOf('*') === -1) {\n model.deferredMap[stateName][deferredEvent] = true;\n }\n }\n }\n }\n\n // Move up to parent\n if (currentPath === '/' || !currentPath) break;\n var parentPath = dirname(currentPath);\n if (parentPath === currentPath) break; // Avoid infinite loop\n currentPath = parentPath;\n }\n }\n}\n\n\nvar EMPTY_PATH = {\n enter: [],\n exit: []\n};\n\n\ninterface Instance {\n _hsm: HSM | null;\n dispatch(event: EventRecord): void;\n state(): string;\n context(): Context;\n clock(): Required<ClockConfig>;\n get(name: string): unknown;\n set(name: string, value: unknown): void;\n call(name: string, ...args: unknown[]): unknown;\n restart(data?: unknown): void;\n takeSnapshot(): Snapshot;\n}\n\nclass InstanceImpl {\n dispatch(event: EventRecord): void {\n var runtime = runtimeFor(this);\n if (!runtime) {\n return;\n }\n runtime.dispatch(event);\n }\n\n state(): string {\n var runtime = runtimeFor(this);\n return runtime ? runtime.state() : \"\";\n }\n\n context(): Context {\n var runtime = runtimeFor(this);\n return runtime ? (runtime.context() as unknown as Context) : new Context();\n }\n\n clock(): Required<ClockConfig> {\n var runtime = runtimeFor(this);\n return runtime ? runtime.clock : (DefaultClock as Required<ClockConfig>);\n }\n\n get(name: string): unknown {\n var runtime = runtimeFor(this);\n return runtime ? runtime.get(name) : undefined;\n }\n\n set(name: string, value: unknown): void {\n var runtime = runtimeFor(this);\n if (runtime) {\n runtime.set(name, value);\n }\n }\n\n call(name: string, ...args: unknown[]): unknown {\n var runtime = runtimeFor(this);\n if (!runtime) {\n return undefined;\n }\n return runtime.call(name, ...args);\n }\n\n restart(data?: unknown): void {\n var runtime = runtimeFor(this);\n if (runtime) {\n runtime.restart(data);\n }\n }\n\n takeSnapshot(): Snapshot {\n var runtime = runtimeFor(this);\n return runtime\n ? runtime.takeSnapshot()\n : {\n id: \"\",\n qualifiedName: \"\",\n state: \"\",\n attributes: {},\n queueLen: 0,\n events: [],\n };\n }\n}\n\ntype InstanceConstructor = {\n new (): Instance;\n (this: Instance): void;\n prototype: Instance;\n};\n\nexport const Instance = (function (this: Instance) {\n if (this && typeof this === \"object\") {\n (this as Instance)._hsm = null;\n }\n}) as InstanceConstructor;\n\n(Instance.prototype as unknown as InstanceImpl) = InstanceImpl.prototype;\n\nclass HSM {\n static id = 0;\n\n private runtime: InternalRuntime;\n private instance: Instance;\n private ctx: Context;\n private model: Model;\n private currentState: Vertex;\n private queue: Queue;\n private active: Record<string, Active>;\n private processing: boolean;\n private id: string;\n private name: string;\n private attributes: Record<string, unknown>;\n private historyShallow: Record<string, string>;\n private historyDeep: Record<string, string>;\n private after: Record<AfterBucket, Record<string, Array<() => void>>>;\n private clock: {\n setTimeout: TimerFunction;\n clearTimeout: CancelFunction;\n now: () => number;\n };\n private startData: unknown;\n\n constructor(\n ctxOrInstance: Context | Instance,\n instanceOrModel: Model | Instance,\n maybeModelOrConfig: Model | Config | undefined,\n maybeConfig?: Config,\n ) {\n if (!(ctxOrInstance instanceof Context)) {\n maybeConfig = maybeModelOrConfig as Config | undefined;\n maybeModelOrConfig = instanceOrModel as Model;\n instanceOrModel = ctxOrInstance;\n ctxOrInstance = new Context();\n }\n\n const id = ((maybeConfig ? maybeConfig.id : \"\") || HSM.id++).toString();\n const name =\n (maybeConfig ? maybeConfig.name : \"\") || (maybeModelOrConfig as Model).qualifiedName;\n\n this.instance = instanceOrModel as Instance;\n this.ctx = ctxOrInstance as Context;\n this.model = maybeModelOrConfig as Model;\n this.currentState = this.model;\n this.queue = new Queue();\n this.active = {};\n this.processing = false;\n this.id = id;\n this.name = name;\n this.attributes = {};\n this.historyShallow = {};\n this.historyDeep = {};\n this.after = {\n entered: {},\n exited: {},\n processed: {},\n dispatched: {},\n executed: {},\n };\n this.clock = {\n setTimeout: maybeConfig?.clock?.setTimeout || DefaultClock.setTimeout,\n clearTimeout: maybeConfig?.clock?.clearTimeout || DefaultClock.clearTimeout,\n now: (maybeConfig?.clock?.now) || DefaultClock.now,\n };\n this.startData = maybeConfig ? maybeConfig.data : undefined;\n\n this.runtime = {\n dispatch: (event) => {\n this.dispatch(event);\n },\n state: () => {\n return this.state();\n },\n context: () => {\n return this.ctx as unknown as ActiveContext;\n },\n clock: this.clock,\n get: (name) => {\n return this.get(name);\n },\n set: (name, value) => {\n this.set(name, value);\n },\n invoke: (name, ctx, args) => {\n return this.invoke(name, ctx, args);\n },\n call: (name, ...args) => {\n return this.call(name, ...args);\n },\n restart: (data) => {\n this.restart(data);\n },\n takeSnapshot: () => {\n return this.takeSnapshot();\n },\n onAfter: (bucket, key, listener) => {\n this.onAfter(bucket, key, listener);\n },\n stop: () => {\n this.stop();\n },\n id: this.id,\n model: this.model,\n name: this.name,\n queue: this.queue,\n processing: this.processing,\n };\n }\n\n start(): this {\n this.processing = true;\n this.ctx.done = false;\n bindRuntime(this.instance, this.runtime);\n this.resetAttributes();\n\n var initialEvent = Object.create(InitialEvent);\n initialEvent.data = this.startData;\n var newState = this.enter(this.model, initialEvent, true);\n this.ctx.instances[this.id] = this.instance;\n this.currentState = newState;\n this.process();\n return this;\n }\n\n state(): string {\n return this.currentState ? this.currentState.qualifiedName : \"\";\n }\n\n private resetAttributes(): void {\n this.attributes = {};\n if (!this.model.attributes) {\n return;\n }\n for (var qualifiedName in this.model.attributes) {\n var attribute = this.model.attributes[qualifiedName];\n if (attribute && attribute.hasDefault) {\n this.attributes[qualifiedName] = attribute.defaultValue;\n }\n }\n }\n\n private notify(bucket: AfterBucket, key: string): void {\n var listeners = this.after[bucket][key];\n if (!listeners || listeners.length === 0) {\n return;\n }\n delete this.after[bucket][key];\n for (var i = 0; i < listeners.length; i++) {\n listeners[i]();\n }\n }\n\n onAfter(bucket: AfterBucket, key: string, listener: () => void): void {\n if (!this.after[bucket][key]) {\n this.after[bucket][key] = [];\n }\n this.after[bucket][key].push(listener);\n }\n\n private get(name: string): unknown {\n return this.attributes[qualifyModelName(this.model, name)];\n }\n\n private set(name: string, value: unknown): void {\n var qualifiedName = qualifyModelName(this.model, name);\n var hadValue = Object.prototype.hasOwnProperty.call(this.attributes, qualifiedName);\n var old = this.attributes[qualifiedName];\n this.attributes[qualifiedName] = value;\n if (hadValue && old === value) {\n return;\n }\n var event = {\n kind: kinds.ChangeEvent,\n name: qualifiedName,\n source: qualifiedName,\n data: {\n name: qualifiedName,\n old: old,\n new: value,\n },\n };\n this.dispatch(event);\n }\n\n private call(name: string, ...args: unknown[]): unknown {\n var argsList = args;\n var qualifiedName = qualifyModelName(this.model, name);\n var event = {\n kind: kinds.CallEvent,\n name: qualifiedName,\n source: qualifiedName,\n data: {\n name: qualifiedName,\n args: argsList,\n },\n };\n this.dispatch(event);\n return this.invoke(name, this.ctx, argsList);\n }\n\n private invoke(name: string, ctx: Context, args: Array<unknown>): unknown {\n var qualifiedName = qualifyModelName(this.model, name);\n var operation = this.model.operations && this.model.operations[qualifiedName];\n if (!operation) {\n throw new Error('missing operation \"' + qualifiedName + '\"');\n }\n var fn = operation.implementation;\n if (typeof fn !== \"function\") {\n throw new Error('invalid operation \"' + qualifiedName + '\"');\n }\n var candidates = [\n [ctx, this.instance, ...args],\n [ctx, ...args],\n [this.instance, ...args],\n args,\n ];\n for (var i = 0; i < candidates.length; i++) {\n var candidate = candidates[i] as Array<unknown>;\n if (\n fn.length === candidate.length ||\n (fn.length <= candidate.length && fn.length >= 0)\n ) {\n return fn.apply(this.instance, candidate);\n }\n }\n return fn.apply(this.instance, args as Array<unknown>);\n }\n\n restart(data?: unknown): void {\n this.stop();\n this.startData = data;\n this.ctx.done = false;\n this.currentState = this.model;\n this.start();\n }\n\n private takeSnapshot(): Snapshot {\n var events: Snapshot[\"events\"] = [];\n var currentStateName = this.currentState\n ? this.currentState.qualifiedName\n : this.model.qualifiedName;\n var transitionsByEvent: Record<string, Array<Transition>> =\n this.model.transitionMap[currentStateName] || {};\n for (var eventName in transitionsByEvent) {\n var transitionList = transitionsByEvent[eventName];\n for (var i = 0; i < transitionList.length; i++) {\n events.push({\n event: eventName,\n target: transitionList[i].target,\n guard: !!transitionList[i].guard,\n schema: this.model.events[eventName]\n ? this.model.events[eventName].schema\n : undefined,\n });\n }\n }\n return {\n id: this.id,\n qualifiedName: this.model.qualifiedName,\n state: currentStateName,\n attributes: Object.assign({}, this.attributes),\n queueLen: this.queue.len(),\n events: events,\n };\n }\n\n private recordHistory(stateName: string | undefined): void {\n if (!stateName) {\n return;\n }\n var child = stateName;\n var parent = dirname(child);\n while (parent && parent !== \".\" && parent !== \"/\") {\n var element = this.model.members[parent];\n if (element && isKind(element.kind, kinds.State)) {\n this.historyDeep[parent] = stateName;\n this.historyShallow[parent] = child;\n }\n if (parent === this.model.qualifiedName) {\n break;\n }\n child = parent;\n parent = dirname(parent);\n }\n }\n\n private followHistoryDefault(\n vertex: Vertex,\n event: EventRecord,\n ): Vertex | undefined {\n\t for (var i = 0; i < vertex.transitions.length; i++) {\n\t var transitionName = vertex.transitions[i];\n\t var transitionCandidate = getTransition(this.model, transitionName);\n\t if (!transitionCandidate) {\n\t continue;\n\t }\n\t if (transitionCandidate.guard) {\n\t var guard = getConstraint(this.model, transitionCandidate.guard);\n\t if (guard && !guard.expression(this.ctx, this.instance, event)) {\n\t continue;\n\t }\n\t }\n\t return this.transition(vertex, transitionCandidate, event);\n\t }\n\t return undefined;\n\t }\n\n dispatch(event: EventRecord): void {\n if (!event.kind) {\n event.kind = kinds.Event;\n }\n this.queue.push(event);\n this.notify(\"dispatched\", event.name);\n\n if (this.processing) {\n return;\n }\n if (\n this.currentState.qualifiedName === this.model.qualifiedName &&\n this.ctx.done\n ) {\n return;\n }\n this.processing = true;\n this.process();\n }\n\n private process(): void {\n var deferred = new Array(this.queue.len() + 1);\n var deferredCount = 0;\n var event = this.queue.pop();\n\n while (event) {\n var currentStateName = this.currentState.qualifiedName;\n var eventName = event.name;\n var deferredLookup = this.model.deferredMap[currentStateName];\n var isDeferred = deferredLookup && deferredLookup[eventName] === true;\n\n if (isDeferred) {\n deferred[deferredCount++] = event;\n event = this.queue.pop();\n continue;\n }\n\n var transitions = this.model.transitionMap[currentStateName][eventName];\n if (transitions && transitions.length > 0) {\n for (var i = 0; i < transitions.length; i++) {\n var transition = transitions[i];\n if (transition.guard) {\n var guard = getConstraint(this.model, transition.guard);\n if (guard) {\n try {\n var guardResult = guard.expression(\n this.ctx,\n this.instance,\n event,\n );\n if (!guardResult) {\n continue;\n }\n } catch (error) {\n this.dispatch(\n Object.create(ErrorEvent, {\n data: { value: error },\n }),\n );\n continue;\n }\n }\n }\n var nextState = this.transition(this.currentState, transition, event);\n if (nextState.qualifiedName !== this.currentState.qualifiedName) {\n this.currentState = nextState;\n for (var j = 0; j < deferredCount; j++) {\n this.queue.push(deferred[j]);\n }\n deferredCount = 0;\n }\n break;\n }\n }\n\n this.notify(\"processed\", event.name);\n event = this.queue.pop();\n }\n\n for (var i = 0; i < deferredCount; i++) {\n this.queue.push(deferred[i]);\n }\n\n this.processing = false;\n this.notify(\"processed\", \"__next__\");\n }\n\n private transition(\n current: Vertex,\n transition: Transition,\n event: EventRecord,\n ): Vertex {\n var path = transition.paths[current.qualifiedName];\n if (!path) {\n path = EMPTY_PATH;\n }\n for (var i = 0; i < path.exit.length; i++) {\n var exitingName = path.exit[i];\n var exiting = this.model.members[exitingName];\n if (exiting && isStateElement(exiting)) {\n this.exit(exiting, event);\n this.notify(\"exited\", exitingName);\n }\n }\n\n for (var i = 0; i < transition.effect.length; i++) {\n var effectName = transition.effect[i];\n var behavior = getBehavior(this.model, effectName);\n if (behavior) {\n this.execute(behavior, event);\n }\n }\n\n var enteredState: Vertex | undefined;\n for (var i = 0; i < path.enter.length; i++) {\n var enteringName = path.enter[i];\n var entering = getVertex(this.model, enteringName);\n if (entering) {\n var defaultEntry =\n entering.qualifiedName === transition.target &&\n transition.kind !== kinds.Self;\n enteredState = this.enter(entering, event, defaultEntry);\n }\n }\n\n var finalState: Vertex | undefined = enteredState || getVertex(this.model, transition.target);\n return finalState || current;\n }\n\n private enter(\n vertex: Vertex,\n event: EventRecord,\n defaultEntry: boolean,\n ): Vertex {\n if (isStateElement(vertex)) {\n var state: State = vertex;\n this.recordHistory(state.qualifiedName);\n\n for (var i = 0; i < state.entry.length; i++) {\n var entryName = state.entry[i];\n var behavior = getBehavior(this.model, entryName);\n if (behavior) {\n this.execute(behavior, event);\n }\n }\n this.notify(\"entered\", state.qualifiedName);\n\n for (var i = 0; i < state.activities.length; i++) {\n var activityName = state.activities[i];\n var behavior = getBehavior(this.model, activityName);\n if (behavior) {\n this.execute(behavior, event);\n }\n }\n\n if (defaultEntry && state.initial) {\n var initial = getVertex(this.model, state.initial);\n if (!initial) {\n return state;\n }\n var initialTransition = getTransition(\n this.model,\n initial.transitions[0],\n );\n if (initialTransition) {\n return this.transition(state, initialTransition, event);\n }\n }\n return state;\n }\n\n if (\n isKind(vertex.kind, kinds.Choice) ||\n isKind(vertex.kind, kinds.Junction)\n ) {\n var choiceVertex = vertex;\n var chosenTransition: Transition | undefined = undefined;\n for (var i = 0; i < choiceVertex.transitions.length; i++) {\n var transitionName = choiceVertex.transitions[i];\n var choiceTransition = getTransition(this.model, transitionName);\n if (!choiceTransition) {\n continue;\n }\n\n if (choiceTransition.guard) {\n var guard = getConstraint(this.model, choiceTransition.guard);\n if (guard && guard.expression(this.ctx, this.instance, event)) {\n chosenTransition = choiceTransition;\n break;\n }\n } else {\n chosenTransition = choiceTransition;\n break;\n }\n }\n\n if (chosenTransition) {\n return this.transition(choiceVertex, chosenTransition, event);\n }\n throw new Error(\"No transition found for choice vertex \" + choiceVertex.qualifiedName);\n }\n\n if (\n isKind(vertex.kind, kinds.ShallowHistory) ||\n isKind(vertex.kind, kinds.DeepHistory)\n ) {\n var parent = dirname(vertex.qualifiedName);\n var isShallowHistory = isKind(vertex.kind, kinds.ShallowHistory);\n var resolved = isShallowHistory\n ? this.historyShallow[parent]\n : this.historyDeep[parent];\n if (!resolved) {\n var historyResult = this.followHistoryDefault(vertex, event);\n if (historyResult) {\n return historyResult;\n }\n var parentState = getState(this.model, parent);\n if (parentState && parentState.initial) {\n var initialVertex = getVertex(this.model, parentState.initial);\n if (initialVertex && initialVertex.transitions.length > 0) {\n var initialTransition = getTransition(\n this.model,\n initialVertex.transitions[0],\n );\n if (initialTransition) {\n return this.transition(\n parentState,\n initialTransition,\n event,\n );\n }\n }\n }\n return vertex;\n }\n\n var enterPath: string[] = [];\n var currentPath = resolved;\n while (currentPath && currentPath !== parent && currentPath !== \".\") {\n enterPath.unshift(currentPath);\n currentPath = dirname(currentPath);\n }\n var currentVertex = vertex;\n for (var i = 0; i < enterPath.length; i++) {\n var entering = getVertex(this.model, enterPath[i]);\n if (!entering) {\n break;\n }\n currentVertex = this.enter(\n entering,\n event,\n isShallowHistory && i === enterPath.length - 1,\n );\n }\n return currentVertex;\n }\n\n if (isKind(vertex.kind, kinds.FinalState)) {\n this.notify(\"entered\", vertex.qualifiedName);\n if (dirname(vertex.qualifiedName) === this.model.qualifiedName) {\n this.stop();\n }\n return vertex;\n }\n return vertex;\n }\n\n private exit(state: State, event: EventRecord): void {\n for (var i = 0; i < state.activities.length; i++) {\n var activityName = state.activities[i];\n var activity = getBehavior(this.model, activityName);\n if (activity) {\n this.terminate(activity);\n }\n }\n\n for (var i = 0; i < state.exit.length; i++) {\n var exitName = state.exit[i];\n var behavior = getBehavior(this.model, exitName);\n if (behavior) {\n this.execute(behavior, event);\n }\n }\n }\n\n private execute(behavior: Behavior, event: EventRecord): void {\n var error = undefined;\n var operation = behavior.operation;\n var self = this;\n if (!operation && behavior.operationName) {\n operation = function (\n ctx: Context,\n instance: Instance,\n evt: EventRecord,\n ) {\n self.invoke(behavior.operationName, ctx, [evt]);\n };\n }\n if (!operation) {\n return;\n }\n if (isKind(behavior.kind, kinds.Concurrent)) {\n var controller = new Context();\n try {\n var asyncOperationPromise = Promise.resolve(\n operation(controller, this.instance, event),\n );\n this.active[behavior.qualifiedName] = {\n context: controller,\n promise: asyncOperationPromise.catch(function (error) {\n self.dispatch(\n Object.create(ErrorEvent, {\n data: { value: error },\n }),\n );\n }).then(function () {\n self.notify(\"executed\", behavior.qualifiedName);\n self.notify(\n \"executed\",\n behavior.Owner ? behavior.Owner() : dirname(behavior.qualifiedName),\n );\n }),\n };\n } catch (err) {\n error = err;\n }\n } else {\n try {\n operation(this.ctx, this.instance, event);\n this.notify(\"executed\", behavior.qualifiedName);\n this.notify(\"executed\", dirname(behavior.qualifiedName));\n } catch (err) {\n error = err;\n }\n }\n if (error) {\n this.dispatch(\n Object.create(ErrorEvent, {\n data: { value: error },\n }),\n );\n }\n }\n\n private terminate(activity: Behavior): void {\n var active = this.active[activity.qualifiedName];\n if (active) {\n active.context.done = true;\n for (var i = 0; i < active.context.listeners.length; i++) {\n active.context.listeners[i]();\n }\n delete this.active[activity.qualifiedName];\n }\n }\n\n stop(): void {\n this.processing = true;\n while (\n this.currentState &&\n this.currentState.qualifiedName !== this.model.qualifiedName\n ) {\n var currentState = getState(this.model, this.currentState.qualifiedName);\n if (!currentState) {\n break;\n }\n this.exit(currentState, FinalEvent);\n var parentState = getState(\n this.model,\n dirname(this.currentState.qualifiedName),\n );\n if (!parentState) {\n break;\n }\n this.currentState = parentState;\n }\n this.processing = false;\n this.ctx.done = true;\n for (var i = 0; i < this.ctx.listeners.length; i++) {\n this.ctx.listeners[i]();\n }\n delete this.ctx.instances[this.id];\n }\n}\n\nfunction find(\n stack: AnyModelElement[],\n ...kindsToMatch: Kind[]\n): AnyModelElement | undefined {\n for (var i = stack.length - 1; i >= 0; i--) {\n var element = stack[i];\n for (var j = 0; j < kindsToMatch.length; j++) {\n if (isKind(element.kind, kindsToMatch[j])) {\n return element;\n }\n }\n }\n return undefined;\n}\n\n\nexport function start<\n M extends TypedModel<\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n Instance\n >,\n ModelInstance extends NonNullable<M['__hsm_instance']> & Instance =\n NonNullable<M['__hsm_instance']> & Instance,\n>(\n instance: ModelInstance,\n model: M,\n maybeConfig?: Config,\n): MachineInstanceFor<M, ModelInstance>;\nexport function start<\n M extends TypedModel<\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n Instance\n >,\n ModelInstance extends NonNullable<M['__hsm_instance']> & Instance =\n NonNullable<M['__hsm_instance']> & Instance,\n>(\n ctx: Context,\n instance: ModelInstance,\n model: M,\n maybeConfig?: Config,\n): MachineInstanceFor<M, ModelInstance>;\nexport function start(\n ctxOrInstance: Context | Instance,\n instance: Model | Instance,\n model: Model | Config,\n maybeConfig?: Config,\n): MachineInstanceFor<\n TypedModel<any, any, any, any, any, any, any, Instance>,\n Instance\n> {\n var context = ctxOrInstance;\n var runtimeModel = model;\n var runtimeInstance = instance;\n if (!(context instanceof Context)) {\n maybeConfig = model as Config;\n runtimeModel = instance as Model;\n runtimeInstance = ctxOrInstance as Instance;\n context = new Context();\n }\n var sm = new HSM(\n context,\n runtimeInstance as Instance,\n runtimeModel as Model,\n maybeConfig,\n );\n sm.start();\n return runtimeInstance as MachineInstanceFor<\n TypedModel<any, any, any, any, any, any, any, Instance>,\n Instance\n >;\n}\n\n\nexport function stop(instance: Instance): void {\n var runtime = runtimeFor(instance);\n if (runtime) {\n runtime.stop();\n }\n}\n\n\n\nexport function state<\n Name extends string,\n const Parts extends readonly ModelElementSpec[] = readonly ModelElementSpec[],\n>(\n name: Name,\n ...partials: BuilderTuple<ValidateStateLocalSpecs<Parts>>\n) {\n return attachSpec(\n function (model: Model, stack: AnyModelElement[]): State {\n var namespace = \n (find(stack, kinds.State, kinds.Model));\n\n var qualifiedName = join(namespace.qualifiedName, name);\n \n var stateObj = {\n qualifiedName: qualifiedName,\n kind: kinds.State,\n transitions: [],\n entry: [],\n exit: [],\n activities: [],\n deferred: [],\n };\n\n model.members[stateObj.qualifiedName] = stateObj;\n stack.push(stateObj);\n apply(model, stack, partials);\n stack.pop();\n\n return stateObj;\n },\n {\n kind: 'state',\n name,\n parts: partials as unknown as Parts,\n } as StateSpec<Name, Parts>,\n );\n}\n\n\nexport function initial<\n const Clauses extends readonly TransitionBuilderClause[] = readonly TransitionBuilderClause[],\n>(\n ...partials: TransitionBuilderTuple<Clauses>\n): BuilderWithSpec<(model: Model, stack: AnyModelElement[]) => Transition | undefined, InitialSpec<Clauses>>;\nexport function initial<\n Name extends string,\n const Clauses extends readonly TransitionBuilderClause[] = readonly TransitionBuilderClause[],\n>(\n name: Name,\n ...partials: TransitionBuilderTuple<Clauses>\n): BuilderWithSpec<(model: Model, stack: AnyModelElement[]) => Transition | undefined, InitialSpec<Clauses>>;\nexport function initial(\n nameOrPartial: string | ((...args: unknown[]) => unknown),\n ...partials: Array<(model: Model, stack: AnyModelElement[]) => unknown>\n) {\n var name = '.initial';\n\n // If first argument is a string, it's the name of the initial pseudostate\n if (typeof nameOrPartial === 'string') {\n name = nameOrPartial;\n } else if (typeof nameOrPartial === 'function') {\n // If it's a partial function, add it to the beginning of partials\n partials = [nameOrPartial, ...partials];\n }\n\n return attachSpec(\n function (model: Model, stack: AnyModelElement[]) {\n var state = findState(stack);\n if (!state) {\n throw new Error(\"initial must be declared inside a state\");\n }\n\n var initialName = join(state.qualifiedName, name);\n var initialObj: Vertex = {\n qualifiedName: initialName,\n kind: kinds.Initial,\n transitions: [],\n };\n\n model.members[initialName] = initialObj;\n state.initial = initialName;\n\n // Add the initial event trigger\n var resolvedPartials = [source(initialObj.qualifiedName), on(InitialEvent), ...partials] as Array<\n BuilderWithSpec<\n (model: Model, stack: AnyModelElement[]) => unknown,\n TransitionBuilderClause\n >\n >;\n\n // Create the transition with all partials\n stack.push(initialObj);\n var transitionObj = transition(...resolvedPartials)(model, stack);\n stack.pop();\n\n return transitionObj;\n },\n {\n kind: 'initial',\n name,\n parts: partials,\n } as InitialSpec<any>,\n );\n}\n\nexport function transition<\n const Clauses extends readonly TransitionBuilderClause[] = readonly TransitionBuilderClause[],\n>(\n ...partials: TransitionBuilderTuple<Clauses>\n) {\n return attachSpec(\n function (\n model: Model,\n stack: AnyModelElement[],\n ): Transition {\n var vertex = findVertex(stack);\n if (!vertex) {\n throw new Error(\"transition must be declared inside a vertex\");\n }\n\n var name = 'transition_' + Object.keys(model.members).length;\n \n var transitionObj: Transition = {\n qualifiedName: join(vertex.qualifiedName, name),\n kind: kinds.Transition, // Will be updated later\n source: \".\",\n guard: '',\n effect: \n([]),\n events: \n([]),\n paths: \n ({}) as Record<Path, TransitionPath>,\n target: undefined,\n };\n\n model.members[transitionObj.qualifiedName] = transitionObj;\n stack.push(transitionObj);\n apply(model, stack, partials);\n stack.pop();\n\n // Default source to the current vertex if not explicitly set\n if (transitionObj.source == \".\" || !transitionObj.source) {\n transitionObj.source = vertex.qualifiedName;\n }\n var sourceElement = getVertex(model, transitionObj.source);\n if (!sourceElement) {\n throw new Error(\"invalid transition source \" + transitionObj.source);\n }\n sourceElement.transitions.push(transitionObj.qualifiedName);\n\n // Determine transition kind and compute paths after all elements are processed\n model.partials.push(function () {\n if (transitionObj.target === transitionObj.source) {\n transitionObj.kind = kinds.Self;\n } else if (!transitionObj.target) {\n transitionObj.kind = kinds.Internal;\n } else if (isAncestor(transitionObj.source, transitionObj.target)) {\n transitionObj.kind = kinds.Local;\n } else {\n transitionObj.kind = kinds.External;\n }\n\n // Compute paths\n var lcaPath = lca(transitionObj.source, transitionObj.target);\n var enter = \n ([]);\n if (transitionObj.kind === kinds.Self) {\n enter.push(sourceElement.qualifiedName);\n } else {\n var entering = transitionObj.target;\n while (entering && entering !== lcaPath && entering !== '/') {\n enter.unshift(entering);\n entering = dirname(entering);\n }\n }\n\n if (sourceElement.kind === kinds.Initial) {\n transitionObj.paths[dirname(sourceElement.qualifiedName)] = {\n enter: enter,\n exit: [sourceElement.qualifiedName]\n };\n return transitionObj;\n }\n\n // Add another partial to compute all other exit paths after all elements are defined\n model.partials.push(function () {\n if (transitionObj.kind === kinds.Internal) {\n // Internal transitions do not involve exiting/entering other states\n return;\n }\n for (var qualifiedName in model.members) {\n var element = getVertex(model, qualifiedName);\n if (!element) {\n continue;\n }\n if (\n transitionObj.source !== qualifiedName &&\n !isAncestor(transitionObj.source, qualifiedName)\n ) {\n continue;\n }\n var exit = \n ([]);\n var exiting = \n (element.qualifiedName);\n while (exiting !== lcaPath && exiting) {\n exit.push(exiting);\n exiting = dirname(exiting);\n if (exiting === '/') {\n break;\n }\n }\n transitionObj.paths[element.qualifiedName] = {\n enter: enter,\n exit: exit\n };\n }\n });\n });\n return transitionObj;\n },\n {\n kind: 'transition',\n parts: partials as unknown as Clauses,\n } as TransitionSpec<Clauses>\n );\n}\n\n\nexport function source<Name extends string>(\n name: Name,\n): BuilderWithSpec<(model: any, stack: any) => unknown, SourceClause<Name>> {\n return attachSpec(\n function (model: Model, stack: AnyModelElement[]) {\n var transition = findTransition(stack);\n if (!transition) {\n return undefined;\n }\n\n var resolvedName: string = name;\n if (!isAbsolute(resolvedName)) {\n var ancestor = findState(stack);\n if (ancestor) {\n resolvedName = join(ancestor.qualifiedName, resolvedName);\n }\n } else if (!isAncestor(model.qualifiedName, resolvedName)) {\n resolvedName = join(model.qualifiedName, resolvedName.slice(1));\n }\n\n transition.source = resolvedName;\n return transition;\n },\n {\n kind: 'source',\n name,\n } as SourceClause<Name>,\n );\n}\n\n\nexport function target<Name extends string>(\n name: Name,\n): BuilderWithSpec<(model: any, stack: any) => unknown, TargetClause<Name>> {\n return attachSpec(\n function (model: Model, stack: AnyModelElement[]) {\n var transition = findTransition(stack);\n if (!transition) {\n return undefined;\n }\n\n var resolvedName: string = name;\n if (!isAbsolute(resolvedName)) {\n // Look for the nearest namespace (state or model) in the stack for path resolution\n var ancestor = findState(stack) || findModel(stack);\n if (ancestor) {\n resolvedName = join(ancestor.qualifiedName, resolvedName);\n }\n } else if (!isAncestor(model.qualifiedName, resolvedName)) {\n resolvedName = join(model.qualifiedName, resolvedName.slice(1));\n }\n transition.target = resolvedName;\n return transition;\n },\n {\n kind: 'target',\n name,\n } as TargetClause<Name>,\n );\n}\n\n\nexport function on<Name extends string>(\n eventName: Name,\n): BuilderWithSpec<(model: any, stack: any) => unknown, EventClause<Name, unknown>>;\nexport function on<Name extends string, Schema = unknown>(\n eventRecord: Event<Name, Schema>,\n): BuilderWithSpec<(model: any, stack: any) => unknown, EventClause<Name, Schema>>;\nexport function on(\n eventOrRecord: string | Event<string, unknown>,\n): BuilderWithSpec<(model: any, stack: any) => unknown, EventClause<string, unknown>> {\n const event = eventOrRecord;\n return attachSpec(\n function (model: Model, stack: AnyModelElement[]) {\n var transition = findTransition(stack);\n if (!transition) {\n return undefined;\n }\n\n var eventName = typeof event === 'string' ? event : event.name;\n transition.events.push(eventName);\n if (typeof event !== 'string') {\n registerEvent(model, event);\n }\n return transition;\n },\n {\n kind: 'on',\n name: typeof eventOrRecord === 'string'\n ? eventOrRecord\n : eventOrRecord.name,\n schema:\n typeof eventOrRecord === 'string'\n ? undefined\n : eventOrRecord.schema,\n } as EventClause<string, unknown>,\n );\n}\n\n\nexport function onSet<Name extends string>(\n name: Name,\n): BuilderWithSpec<(model: any, stack: any) => unknown, OnSetClause<Name>> {\n return attachSpec(\n function (model: Model, stack: AnyModelElement[]) {\n var transition = findTransition(stack);\n if (!transition) {\n return undefined;\n }\n var qualifiedName = qualifyModelName(model, name);\n transition.events.push(qualifiedName);\n registerEvent(model, {\n kind: kinds.ChangeEvent,\n name: qualifiedName,\n source: qualifiedName\n });\n if (!model.attributes[qualifiedName]) {\n model.attributes[qualifiedName] = {\n name: name,\n qualifiedName: qualifiedName,\n hasDefault: false\n };\n }\n return transition;\n },\n {\n kind: 'onSet',\n name,\n } as OnSetClause<Name>,\n );\n}\n\n\nexport function onCall<Name extends string>(\n name: Name,\n): BuilderWithSpec<(model: any, stack: any) => unknown, OnCallClause<Name>> {\n return attachSpec(\n function (model: Model, stack: AnyModelElement[]) {\n var transition = findTransition(stack);\n if (!transition) {\n return undefined;\n }\n var qualifiedName = qualifyModelName(model, name);\n transition.events.push(qualifiedName);\n registerEvent(model, {\n kind: kinds.CallEvent,\n name: qualifiedName,\n source: qualifiedName\n });\n model.partials.push(function () {\n if (!model.operations[qualifiedName]) {\n throw new Error('missing operation \"' + qualifiedName + '\" for OnCall()');\n }\n });\n return transition;\n },\n {\n kind: 'onCall',\n name,\n } as OnCallClause<Name>,\n );\n}\n\n\nexport function when<Name extends string>(\n expr: Name,\n): BuilderWithSpec<(model: Model, stack: AnyModelElement[]) => unknown, WhenClause<Name>>;\nexport function when(\n expr:\n | string\n | ((\n ctx: Context,\n instance: Instance,\n evt: EventRecord,\n ) => unknown),\n) {\n if (typeof expr === 'string') {\n return onSet(expr);\n }\n return function (model: Model, stack: AnyModelElement[]) {\n var transition = findTransition(stack);\n if (!transition) {\n return undefined;\n }\n var eventName = join(transition.qualifiedName, 'when_' + Object.keys(model.members).length);\n var event = {\n kind: kinds.TimeEvent,\n name: eventName\n };\n transition.events.push(eventName);\n registerEvent(model, event);\n model.partials.push(function () {\n var source = getState(model, transition.source);\n if (!source) {\n return;\n }\n pushBehaviors(\n join(source.qualifiedName, 'activity_when_' + source.activities.length),\n kinds.Concurrent,\n source.activities,\n model,\n [function (ctx, instance, evt) {\n var signal = expr(ctx, instance, evt);\n var signalLike = toSignalLike(signal);\n if (!signalLike) {\n return;\n }\n return new Promise<void>(function (resolve) {\n var once = function () {\n if (!ctx.done) {\n instance.dispatch(event);\n }\n resolve();\n };\n if (hasThen(signalLike)) {\n signalLike.then(once);\n } else if (hasAddEventListener(signalLike)) {\n signalLike.addEventListener(\"done\", once);\n } else if (hasOn(signalLike)) {\n signalLike.on(\"ready\", once);\n signalLike.on(\"done\", once);\n }\n ctx.addEventListener('done', resolve);\n });\n }]\n );\n });\n };\n}\n\n\nfunction pushBehaviors(\n namePrefix: string,\n kind: Kind,\n namesList: string[],\n model: Model,\n operations: ReadonlyArray<BehaviorArgument>,\n) {\n for (var i = 0; i < operations.length; i++) {\n var operation = operations[i];\n var qualifiedName = namePrefix + '_' + namesList.length;\n var behavior = {\n qualifiedName: qualifiedName,\n kind: kind,\n operation: typeof operation === 'function' ? operation : null,\n operationName: typeof operation === 'string' ? qualifyModelName(model, operation) : undefined\n };\n model.members[qualifiedName] = behavior;\n namesList.push(qualifiedName);\n }\n}\n\n\nexport function entry<\n EventType extends EventRecord = EventRecord,\n const Operations extends readonly BehaviorArgument<EventType>[] = readonly BehaviorArgument<EventType>[],\n>(\n ...operations: Operations\n) {\n return attachSpec(\n function (model: Model, stack: AnyModelElement[]) {\n var state = findState(stack);\n if (!state) {\n return undefined;\n }\n pushBehaviors(join(state.qualifiedName, 'entry'), kinds.Sequential, state.entry, model, operations);\n return state;\n },\n {\n kind: 'entry',\n value: operations,\n } as EntrySpec<Operations>,\n );\n}\n\n\nexport function exit<\n EventType extends EventRecord = EventRecord,\n const Operations extends readonly BehaviorArgument<EventType>[] = readonly BehaviorArgument<EventType>[],\n>(\n ...operations: Operations\n) {\n return attachSpec(\n function (model: Model, stack: AnyModelElement[]) {\n var state = findState(stack);\n if (!state) {\n return undefined;\n }\n pushBehaviors(join(state.qualifiedName, 'exit'), kinds.Sequential, state.exit, model, operations);\n return state;\n },\n {\n kind: 'exit',\n value: operations,\n } as ExitSpec<Operations>,\n );\n}\n\n\nexport function activity<\n EventType extends EventRecord = EventRecord,\n const Operations extends readonly BehaviorArgument<EventType>[] = readonly BehaviorArgument<EventType>[],\n>(\n ...operations: Operations\n) {\n return attachSpec(\n function (model: Model, stack: AnyModelElement[]) {\n var state = findState(stack);\n if (!state) {\n return undefined;\n }\n pushBehaviors(join(state.qualifiedName, 'activity'), kinds.Concurrent, state.activities, model, operations);\n return state;\n },\n {\n kind: 'activity',\n value: operations,\n } as ActivitySpec<Operations>,\n );\n}\n\n\nexport function effect<const Operations extends readonly BehaviorArgument[]>(\n ...operations: Operations\n) {\n return attachSpec(\n function (model: Model, stack: AnyModelElement[]) {\n var transition = findTransition(stack);\n if (!transition) {\n return undefined;\n }\n pushBehaviors(join(transition.qualifiedName, 'effect'), kinds.Sequential, transition.effect, model, operations);\n return transition;\n },\n {\n kind: 'effect',\n value: operations,\n } as EffectClause<Operations>,\n );\n}\n\n\nexport function guard<Name extends string>(\n expression: Name,\n): BuilderWithSpec<\n (model: Model, stack: AnyModelElement[]) => unknown,\n GuardClause<Name>\n>;\nexport function guard<EventType extends EventRecord>(\n expression: (ctx: Context, instance: Instance, event: EventType) => boolean,\n): GuardBuilder<EventType>;\nexport function guard(\n expression: string | ((ctx: Context, instance: Instance, event: EventRecord) => boolean),\n) {\n return attachSpec(\n function (model: Model, stack: AnyModelElement[]) {\n var transition = findTransition(stack);\n if (!transition) {\n return undefined;\n }\n\n var name = join(transition.qualifiedName, 'guard');\n \n var constraint = {\n qualifiedName: name,\n kind: kinds.Constraint,\n expression:\n typeof expression === \"function\"\n ? (expression as Expression)\n : resolveOperation(model, expression as string),\n };\n\n model.members[name] = constraint;\n transition.guard = name;\n },\n {\n kind: 'guard',\n value: expression,\n } as GuardClause<string | ((ctx: Context, instance: Instance, event: EventRecord) => boolean)>,\n );\n}\n\n\nexport function attribute<Name extends string, Value = unknown>(\n name: Name,\n maybeDefault?: Value,\n): BuilderWithSpec<(model: Model) => unknown, AttributeSpec<Name, Value>> {\n var hasDefault = arguments.length > 1;\n return attachSpec(\n function (model: Model): unknown {\n var qualifiedName = qualifyModelName(model, name);\n model.attributes[qualifiedName] = {\n name: name,\n qualifiedName: qualifiedName,\n hasDefault: hasDefault,\n defaultValue: maybeDefault\n };\n return undefined;\n },\n {\n kind: 'attribute',\n name,\n value: maybeDefault as Value,\n } as AttributeSpec<Name, Value>,\n );\n}\n\n\nexport function operation<\n Name extends string,\n Fn extends Function,\n>(\n name: Name,\n implementation: Fn,\n): BuilderWithSpec<\n (model: Model) => unknown,\n OperationSpec<Name, Extract<Fn, (...args: any[]) => any>>\n> {\n return attachSpec(\n function (model: Model): unknown {\n var qualifiedName = qualifyModelName(model, name);\n model.operations[qualifiedName] = {\n name: name,\n qualifiedName: qualifiedName,\n implementation: implementation as Extract<Fn, (...args: any[]) => any>\n };\n return undefined;\n },\n {\n kind: 'operation',\n name,\n impl: implementation as Extract<Fn, (...args: any[]) => any>,\n } as OperationSpec<Name, Extract<Fn, (...args: any[]) => any>>,\n );\n}\n\n\nexport function after<Name extends string>(\n duration: Name,\n): BuilderWithSpec<(model: Model, stack: AnyModelElement[]) => unknown, AfterClause<Name>>;\nexport function after(\n duration: TimeExpression,\n): BuilderWithSpec<(model: Model, stack: AnyModelElement[]) => unknown, AfterClause<TimeExpression>>;\nexport function after(duration: string | TimeExpression) {\n return attachSpec(function (model: Model, stack: AnyModelElement[]) {\n var transition = findTransition(stack);\n if (!transition) {\n return undefined;\n }\n\n var eventName = join(transition.qualifiedName, 'after_' + Object.keys(model.members).length);\n \n var event = {\n name: eventName,\n kind: kinds.TimeEvent\n };\n\n transition.events.push(eventName);\n registerEvent(model, event);\n\n model.partials.push(function () {\n var source = getState(model, transition.source);\n if (!source) {\n return;\n }\n pushBehaviors(\n join(source.qualifiedName, 'activity_after_' + source.activities.length),\n kinds.Concurrent, // Activities can be concurrent/asynchronous\n source.activities,\n model,\n [\n function (ctx, instance, evt) {\n var runtime = runtimeFor(instance);\n if (!runtime) {\n return;\n }\n var delay = typeof duration === 'string'\n ? coerceDuration(instance.get(duration))\n : duration(ctx, instance, evt);\n return withThenable(delay, function (value) {\n if (ctx.done) {\n return;\n }\n var coerceDelay = coerceDuration(value);\n if (coerceDelay <= 0) {\n return;\n }\n return new Promise<void>(function (resolve) {\n var timeout = runtime.clock.setTimeout(function () {\n // Dispatch timer event asynchronously to avoid blocking the main thread\n instance.dispatch(event);\n resolve(); // Resolve the activity's promise after dispatch\n }, coerceDelay);\n\n ctx.addEventListener('done', function () {\n runtime.clock.clearTimeout(timeout);\n resolve(); // Resolve if aborted\n });\n });\n });\n }]\n );\n });\n }, {\n kind: 'after',\n value: duration,\n } as AfterClause<string | TimeExpression>);\n}\n\n\nexport function every<Name extends string>(\n duration: Name,\n): BuilderWithSpec<(model: Model, stack: AnyModelElement[]) => unknown, EveryClause<Name>>;\nexport function every(\n duration: TimeExpression,\n): BuilderWithSpec<(model: Model, stack: AnyModelElement[]) => unknown, EveryClause<TimeExpression>>;\nexport function every(duration: string | TimeExpression) {\n return attachSpec(function (model: Model, stack: AnyModelElement[]) {\n var transition = findTransition(stack);\n if (!transition) {\n return undefined;\n }\n\n var eventName = join(transition.qualifiedName, 'every_' + Object.keys(model.members).length);\n \n var event = {\n name: eventName,\n kind: kinds.TimeEvent\n };\n\n transition.events.push(eventName);\n registerEvent(model, event);\n\n model.partials.push(function () {\n var source = getState(model, transition.source);\n if (!source) {\n return;\n }\n pushBehaviors(\n join(source.qualifiedName, 'activity_every_' + source.activities.length),\n kinds.Concurrent, // Activities can be concurrent/asynchronous\n source.activities,\n model,\n [\n function (ctx, instance, evt) {\n var runtime = runtimeFor(instance);\n if (!runtime) {\n return;\n }\n var interval = typeof duration === 'string'\n ? coerceDuration(instance.get(duration))\n : duration(ctx, instance, evt);\n return withThenable(interval, function (value) {\n if (ctx.done) {\n return;\n }\n var coerceInterval = coerceDuration(value);\n if (coerceInterval <= 0) {\n return;\n }\n return new Promise<void>(function (resolve) {\n var timeout = runtime.clock.setTimeout(function tick() {\n if (ctx.done) {\n runtime.clock.clearTimeout(timeout);\n resolve();\n return;\n }\n instance.dispatch(event);\n timeout = runtime.clock.setTimeout(tick, coerceInterval);\n }, coerceInterval);\n ctx.addEventListener('done', function () {\n runtime.clock.clearTimeout(timeout);\n resolve(); // Resolve if aborted\n });\n });\n });\n }]\n );\n });\n }, {\n kind: 'every',\n value: duration,\n } as EveryClause<string | TimeExpression>);\n}\n\n\nexport function at<Name extends string>(\n timepoint: Name,\n): BuilderWithSpec<(model: Model, stack: AnyModelElement[]) => unknown, AtClause<Name>>;\nexport function at(\n timepoint:\n ((\n ctx: Context,\n instance: Instance,\n evt: EventRecord,\n ) => number | Date | Promise<number> | Promise<Date>),\n): BuilderWithSpec<(model: Model, stack: AnyModelElement[]) => unknown, AtClause<TimeExpression>>;\nexport function at(\n timepoint:\n | string\n | ((\n ctx: Context,\n instance: Instance,\n evt: EventRecord,\n ) => number | Date | Promise<number> | Promise<Date>),\n) {\n return attachSpec(function (model: Model, stack: AnyModelElement[]) {\n var transition = findTransition(stack);\n if (!transition) {\n return undefined;\n }\n var eventName = join(transition.qualifiedName, 'at_' + Object.keys(model.members).length);\n var event = {\n name: eventName,\n kind: kinds.TimeEvent\n };\n\n transition.events.push(eventName);\n registerEvent(model, event);\n\n model.partials.push(function () {\n var source = getState(model, transition.source);\n if (!source) {\n return;\n }\n pushBehaviors(\n join(source.qualifiedName, 'activity_at_' + source.activities.length),\n kinds.Concurrent,\n source.activities,\n model,\n [function (ctx, instance, evt) {\n var runtime = runtimeFor(instance);\n if (!runtime) {\n return;\n }\n var timepointValue = typeof timepoint === 'string'\n ? coerceTimepoint(instance.get(timepoint))\n : timepoint(ctx, instance, evt);\n return withThenable(timepointValue, function (value) {\n if (ctx.done) {\n return;\n }\n var deadline = coerceTimepoint(value);\n var delay = deadline - runtime.clock.now();\n if (delay <= 0) {\n instance.dispatch(event);\n return;\n }\n return new Promise<void>(function (resolve) {\n var timeout = runtime.clock.setTimeout(function () {\n instance.dispatch(event);\n resolve();\n }, delay);\n ctx.addEventListener('done', function () {\n runtime.clock.clearTimeout(timeout);\n resolve();\n });\n });\n });\n }]\n );\n });\n }, {\n kind: 'at',\n value: timepoint,\n } as AtClause<string | TimeExpression>);\n}\n\n\nexport function defer<\n const EventNames extends readonly string[],\n>(\n ...eventNames: EventNames\n): BuilderWithSpec<\n (model: Model, stack: AnyModelElement[]) => unknown,\n DeferSpec<EventNames>\n> {\n var names = eventNames;\n return attachSpec(\n function (model: Model, stack: AnyModelElement[]) {\n var state = findState(stack);\n if (!state) {\n return undefined;\n }\n\n // Add event names to the deferred array\n for (var i = 0; i < names.length; i++) {\n state.deferred.push(names[i]);\n }\n\n return state;\n },\n {\n kind: 'defer',\n eventNames,\n } as DeferSpec<EventNames>,\n );\n}\n\n\nexport function final<Name extends string>(\n name: Name,\n) {\n return attachSpec(\n function (model: Model, stack: AnyModelElement[]) {\n var parent = findState(stack);\n if (!parent) {\n return undefined;\n }\n\n var qualifiedName = join(parent.qualifiedName, name);\n \n var finalState = {\n qualifiedName: qualifiedName,\n kind: kinds.FinalState,\n entry: [],\n exit: [],\n activities: [],\n deferred: [],\n transitions: [],\n initial: undefined,\n };\n\n model.members[qualifiedName] = finalState;\n\n return finalState;\n },\n {\n kind: 'final',\n name,\n } as FinalSpec<Name>,\n );\n}\n\n\nexport function shallowHistory(\n elementOrName: string | ((...args: unknown[]) => unknown),\n) {\n var partials = slice(arguments, 1) as Array<\n (model: Model, stack: AnyModelElement[]) => unknown\n >;\n var name = '';\n if (typeof elementOrName === 'string') {\n name = elementOrName;\n } else if (typeof elementOrName === 'function') {\n partials.unshift(elementOrName);\n }\n return function (model: Model, stack: AnyModelElement[]) {\n var owner = findState(stack);\n if (!owner) {\n return undefined;\n }\n if (!name) {\n name = 'shallow_history_' + Object.keys(model.members).length;\n }\n var qualifiedName = join(owner.qualifiedName, name);\n var history = {\n qualifiedName: qualifiedName,\n kind: kinds.ShallowHistory,\n transitions: []\n };\n model.members[qualifiedName] = history;\n stack.push(history);\n apply(model, stack, partials);\n stack.pop();\n return history;\n };\n}\n\n\nexport function deepHistory(\n elementOrName: string | ((...args: unknown[]) => unknown),\n) {\n \n var partials = slice(arguments, 1) as Array<\n (model: Model, stack: AnyModelElement[]) => unknown\n >;\n var name = '';\n if (typeof elementOrName === 'string') {\n name = elementOrName;\n } else if (typeof elementOrName === 'function') {\n partials.unshift(elementOrName);\n }\n return function (model: Model, stack: AnyModelElement[]) {\n var owner = findState(stack);\n if (!owner) {\n return undefined;\n }\n if (!name) {\n name = 'deep_history_' + Object.keys(model.members).length;\n }\n var qualifiedName = join(owner.qualifiedName, name);\n var history = {\n qualifiedName: qualifiedName,\n kind: kinds.DeepHistory,\n transitions: []\n };\n model.members[qualifiedName] = history;\n stack.push(history);\n apply(model, stack, partials);\n stack.pop();\n return history;\n };\n}\n\n\nexport function choice(elementOrName: string | ((...args: unknown[]) => unknown)) {\n \n var partials = slice(arguments, 1);\n var name = '';\n\n // If first argument is a string, it's the name of the choice pseudostate\n if (typeof elementOrName === 'string') {\n name = elementOrName;\n } else if (typeof elementOrName === 'function') {\n // If it's a partial function, add it to the beginning of partials\n partials.unshift(elementOrName);\n }\n\n return function (model: Model, stack: AnyModelElement[]) {\n // Find the appropriate owner for this choice\n var owner = find(stack, kinds.Transition, kinds.State);\n if (!owner) {\n return undefined;\n }\n\n if (isTransitionElement(owner)) {\n var transition = owner;\n var source = transition.source;\n var ownerVertex = getVertex(model, source);\n if (!ownerVertex) {\n return undefined;\n }\n if (isKind(ownerVertex.kind, kinds.Pseudostate)) {\n owner = find(stack, kinds.State);\n } else if (isStateElement(ownerVertex)) {\n owner = ownerVertex;\n } else {\n return undefined;\n }\n }\n if (!owner || !isStateElement(owner)) {\n return undefined;\n }\n if (name === \"\") {\n name = \"choice_\" + Object.keys(model.members).length;\n }\n\n var qualifiedName = join(owner.qualifiedName, name);\n \n var choice = {\n qualifiedName: qualifiedName,\n kind: kinds.Choice,\n transitions: [],\n };\n model.members[qualifiedName] = choice;\n stack.push(choice);\n apply(model, stack, partials);\n stack.pop();\n\n return choice;\n };\n}\n\n\nexport function dispatchAll(ctx: Context, event: EventRecord): void {\n for (var id in ctx.instances) {\n var instance = ctx.instances[id];\n instance.dispatch(event);\n }\n}\n\n\nexport function define<\n RootName extends string,\n const Parts extends readonly ModelElementSpec[] = readonly ModelElementSpec[],\n>(\n name: RootName,\n ...partials: ValidatedModelElementBuilderTuple<Parts, Parts, Parts, `/${RootName}`>\n): TypedModelFromInfer<RootName, Parts>;\nexport function define<\n ModelSpec extends TypedModel<\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n Instance\n > = never,\n>(\n name: string,\n ...partials:\n [ModelSpec] extends [never]\n ? never\n : Array<(model: Model, stack: AnyModelElement[]) => void>\n): ModelSpec;\nexport function define(\n name: string,\n ...partials: Array<(model: Model, stack: AnyModelElement[]) => void>\n) {\n \n var model: Model = {\n qualifiedName: join('/', name),\n kind: kinds.Model,\n members: {} as Record<Path, AnyModelElement>,\n transitions: [] as string[],\n entry: [] as string[],\n exit: [] as string[],\n activities: [] as string[],\n deferred: [] as string[],\n initial: \"\",\n transitionMap: {} as Record<Path, Record<Path, any[]>>,\n deferredMap: {} as Record<Path, Record<string, boolean>>,\n events: {},\n attributes: {},\n operations: {},\n partials: [] as Array<(model: Model, stack: AnyModelElement[]) => void>,\n };\n model.members[model.qualifiedName] = model;\n registerEvent(model, InitialEvent);\n registerEvent(model, FinalEvent);\n registerEvent(model, ErrorEvent);\n var stack = [model];\n\n // Apply partials\n apply(model, stack, partials);\n\n // Process regular partials first\n while (model.partials.length > 0) {\n var currentPartials = model.partials.slice(); // Copy array\n model.partials = [];\n for (var i = 0; i < currentPartials.length; i++) {\n currentPartials[i](model, stack);\n }\n }\n\n // Build the optimized transition table\n buildTransitionTable(model);\n\n // Build the deferred event lookup table\n buildDeferredTable(model);\n\n return model;\n}\n\n\nexport function dispatchTo(\n ctx: Context,\n event: EventRecord,\n ...ids: string[]\n): void {\n if (!ids.length) {\n return dispatchAll(ctx, event);\n }\n for (var i = 0; i < ids.length; i++) {\n var instance = ctx.instances[ids[i]];\n if (instance) {\n instance.dispatch(event);\n }\n }\n}\n\nexport function get(\n ctxOrInstance: Context | Instance,\n maybeInstanceOrName: Instance | string,\n maybeName?: string,\n) {\n var instance = ctxOrInstance instanceof Context\n ? maybeInstanceOrName\n : ctxOrInstance;\n var name = ctxOrInstance instanceof Context\n ? maybeName\n : (maybeInstanceOrName as string);\n if (ctxOrInstance instanceof Context && typeof maybeName !== \"string\") {\n return undefined;\n }\n if (!name) {\n return undefined;\n }\n if (!instance) {\n return undefined;\n }\n var runtime = runtimeFor(instance);\n return runtime ? runtime.get(name) : undefined;\n}\n\nexport function set(\n ctxOrInstance: Context | Instance,\n maybeInstanceOrName: Instance | string,\n maybeNameOrValue: unknown,\n maybeValue?: unknown,\n) {\n var instance = ctxOrInstance instanceof Context\n ? maybeInstanceOrName\n : ctxOrInstance;\n var name = ctxOrInstance instanceof Context\n ? (maybeNameOrValue as string)\n : (maybeInstanceOrName as string);\n var value = ctxOrInstance instanceof Context ? maybeValue : maybeNameOrValue;\n if (!instance) {\n return;\n }\n var runtime = runtimeFor(instance);\n if (runtime) {\n runtime.set(name, value);\n }\n}\n\nexport function call(\n ctxOrInstance: Context | Instance,\n maybeInstanceOrName: Instance | string,\n maybeName: string,\n ...args: unknown[]\n) {\n var instance = ctxOrInstance instanceof Context\n ? maybeInstanceOrName\n : ctxOrInstance;\n var name = ctxOrInstance instanceof Context\n ? maybeName\n : (maybeInstanceOrName as string);\n if (!instance) {\n return undefined;\n }\n var callArgs = slice(arguments, ctxOrInstance instanceof Context ? 3 : 2);\n var runtime = runtimeFor(instance);\n if (runtime) {\n return runtime.call(name, ...callArgs);\n }\n}\n\nexport function restart(instance: Instance, data: unknown): void {\n var runtime = runtimeFor(instance);\n if (runtime) {\n runtime.restart(data);\n }\n}\n\nexport function takeSnapshot(ctxOrInstance: Context | Instance, maybeInstance?: Instance): Snapshot {\n var instance = ctxOrInstance instanceof Context ? maybeInstance : ctxOrInstance;\n var runtime = runtimeFor(instance);\n return runtime\n ? runtime.takeSnapshot()\n : {\n id: '',\n qualifiedName: '',\n state: '',\n attributes: {},\n queueLen: 0,\n events: []\n };\n}\n\nexport function afterProcess(\n ctx: Context,\n instance: Instance,\n maybeEvent?: EventRecord,\n): Promise<void> {\n return new Promise<void>(function (resolve) {\n var runtime = runtimeFor(instance);\n if (!runtime) {\n resolve();\n return;\n }\n if (maybeEvent) {\n runtime.onAfter('processed', maybeEvent.name, function () {\n resolve();\n });\n return;\n }\n if (!runtime.processing) {\n resolve();\n return;\n }\n runtime.onAfter('processed', '__next__', function () {\n resolve();\n });\n });\n}\n\nexport function afterDispatch(ctx: Context, instance: Instance, event: EventRecord): Promise<void> {\n return new Promise<void>(function (resolve) {\n var runtime = runtimeFor(instance);\n if (!runtime) {\n resolve();\n return;\n }\n runtime.onAfter('dispatched', event.name, function () {\n resolve();\n });\n });\n}\n\nexport function afterEntry(\n ctx: Context,\n instance: Instance,\n stateName: string,\n): Promise<void> {\n return new Promise<void>(function (resolve) {\n var runtime = runtimeFor(instance);\n if (!runtime) {\n resolve();\n return;\n }\n runtime.onAfter('entered', stateName, function () {\n resolve();\n });\n });\n}\n\nexport function afterExit(\n ctx: Context,\n instance: Instance,\n stateName: string,\n): Promise<void> {\n return new Promise<void>(function (resolve) {\n var runtime = runtimeFor(instance);\n if (!runtime) {\n resolve();\n return;\n }\n runtime.onAfter('exited', stateName, function () {\n resolve();\n });\n });\n}\n\nexport function afterExecuted(\n ctx: Context,\n instance: Instance,\n stateOrBehavior: string,\n): Promise<void> {\n return new Promise<void>(function (resolve) {\n var runtime = runtimeFor(instance);\n if (!runtime) {\n resolve();\n return;\n }\n runtime.onAfter('executed', stateOrBehavior, function () {\n resolve();\n });\n });\n}\n\nexport function id(instance) {\n var runtime = runtimeFor(instance);\n return runtime ? runtime.id : '';\n}\n\nexport function qualifiedName(instance) {\n var runtime = runtimeFor(instance);\n return runtime ? runtime.model.qualifiedName : '';\n}\n\nexport function name(instance) {\n var runtime = runtimeFor(instance);\n return runtime ? runtime.name : '';\n}\n\nexport function clock(instance) {\n if (instance instanceof Group) {\n return instance.clock();\n }\n var runtime = runtimeFor(instance);\n return runtime ? runtime.clock : DefaultClock;\n}\n\n\nexport class Group<Members extends readonly unknown[] = readonly Instance[]> {\n instances: Instance[] = [];\n readonly __hsm_group_members?: Members;\n\n constructor(...instances: unknown[]) {\n for (var i = 0; i < instances.length; i++) {\n var instance = instances[i];\n if (!instance) {\n continue;\n }\n if (instance instanceof Group) {\n for (var j = 0; j < instance.instances.length; j++) {\n this.instances.push(instance.instances[j]);\n }\n continue;\n }\n this.instances.push(instance as Instance);\n }\n }\n\n dispatch(event: GroupEventUnion<Members>): void {\n for (var i = 0; i < this.instances.length; i++) {\n this.instances[i].dispatch(event);\n }\n }\n\n set<K extends SharedAttributeKeysOfGroupMembers<Members>>(\n name: K,\n value: SharedAttributeValueOfGroupMembers<Members, K>,\n ): void {\n for (var i = 0; i < this.instances.length; i++) {\n this.instances[i].set(name, value);\n }\n }\n\n call<K extends GroupOperationKeys<Members>>(\n name: K,\n ...args: Parameters<GroupOperationSignature<Members, K>>\n ): ReturnType<GroupOperationSignature<Members, K>> {\n if (!this.instances.length) {\n return undefined as ReturnType<GroupOperationSignature<Members, K>>;\n }\n return this.instances[0].call(name, ...args) as ReturnType<GroupOperationSignature<Members, K>>;\n }\n\n stop(): void {\n for (var i = 0; i < this.instances.length; i++) {\n stop(this.instances[i]);\n }\n }\n\n restart(data?: unknown): void {\n for (var i = 0; i < this.instances.length; i++) {\n restart(this.instances[i], data);\n }\n }\n\n takeSnapshot(): GroupSnapshotOf<Members> {\n var members: Snapshot[] = [];\n var queueLen = 0;\n var events: Snapshot['events'] = [];\n var ids: string[] = [];\n var qualifiedNames: string[] = [];\n var states: string[] = [];\n for (var i = 0; i < this.instances.length; i++) {\n var snapshot = this.instances[i].takeSnapshot();\n members.push(snapshot);\n queueLen += snapshot.queueLen;\n ids.push(snapshot.id);\n qualifiedNames.push(snapshot.qualifiedName);\n states.push(snapshot.state);\n for (var j = 0; j < snapshot.events.length; j++) {\n events.push(snapshot.events[j]);\n }\n }\n return {\n id: ids.join(','),\n qualifiedName: qualifiedNames.join(','),\n state: states.join(' | '),\n attributes: {},\n queueLen,\n events,\n members: members as GroupSnapshotsOfFlattenedMembers<FlattenGroupMembers<Members>>,\n };\n }\n\n clock(): ClockConfig {\n return DefaultClock;\n }\n}\n\nexport function makeGroup<const Members extends readonly unknown[]>(\n ...instances: Members\n): Group<FlattenGroupMembers<Members>>;\nexport function makeGroup() {\n return new Group(...slice(arguments, 0)) as any;\n}\n\nexport const NullKind = kinds.Null;\nexport const ElementKind = kinds.Element;\nexport const PartialKind = kinds.Partial;\nexport const VertexKind = kinds.Vertex;\nexport const ConstraintKind = kinds.Constraint;\nexport const BehaviorKind = kinds.Behavior;\nexport const NamespaceKind = kinds.Namespace;\nexport const ConcurrentKind = kinds.Concurrent;\nexport const SequentialKind = kinds.Sequential;\nexport const StateMachineKind = kinds.StateMachine;\nexport const AttributeKind = kinds.Attribute;\nexport const StateKind = kinds.State;\nexport const ModelKind = kinds.Model;\nexport const TransitionKind = kinds.Transition;\nexport const InternalKind = kinds.Internal;\nexport const ExternalKind = kinds.External;\nexport const LocalKind = kinds.Local;\nexport const SelfKind = kinds.Self;\nexport const EventKind = kinds.Event;\nexport const CompletionEventKind = kinds.CompletionEvent;\nexport const ChangeEventKind = kinds.ChangeEvent;\nexport const ErrorEventKind = kinds.ErrorEvent;\nexport const TimeEventKind = kinds.TimeEvent;\nexport const CallEventKind = kinds.CallEvent;\nexport const PseudostateKind = kinds.Pseudostate;\nexport const InitialKind = kinds.Initial;\nexport const FinalStateKind = kinds.FinalState;\nexport const ChoiceKind = kinds.Choice;\nexport const JunctionKind = kinds.Junction;\nexport const DeepHistoryKind = kinds.DeepHistory;\nexport const ShallowHistoryKind = kinds.ShallowHistory;\nexport const Define = define;\nexport const State = state;\nexport const Final = final;\nexport const ShallowHistory = shallowHistory;\nexport const DeepHistory = deepHistory;\nexport const Choice = choice;\nexport const Transition = transition;\nexport const Initial = initial;\nexport const Event = event;\nexport const On = on;\nexport const OnCall = onCall;\nexport const OnSet = onSet;\nexport const When = when;\nexport const After = after;\nexport const Every = every;\nexport const At = at;\nexport const Target = target;\nexport const Source = source;\nexport const Entry = entry;\nexport const Exit = exit;\nexport const Activity = activity;\nexport const Effect = effect;\nexport const Guard = guard;\nexport const Defer = defer;\nexport const Attribute = attribute;\nexport const Operation = operation;\nexport const DispatchAll = dispatchAll;\nexport const DispatchTo = dispatchTo;\nexport const Get = get;\nexport const Set = set;\nexport const Call = call;\nexport const Restart = restart;\nexport const TakeSnapshot = takeSnapshot;\nexport const MakeGroup = makeGroup;\nexport const LCA = lca;\nexport const IsAncestor = isAncestor;\nexport const ID = id;\nexport const QualifiedName = qualifiedName;\nexport const Name = name;\nexport const Clock = clock;\nexport { apply, find };\n"],"mappings":"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","names":["start","id","name","event","event","state","transition","name","id","qualifiedName","attribute","operation","guard","initial","activity","error","exit","source","choice"]}
|
|
1
|
+
{"version":3,"sources":["../src/hsm.ts"],"sourcesContent":["import { kinds, makeKind, isKind, type Kind } from \"./kind.ts\";\nexport { kinds, makeKind, isKind, kinds as Kinds, makeKind as MakeKind, isKind as IsKind };\n\ntype Path = string;\ntype TimerHandle = ReturnType<typeof setTimeout>;\ntype TimerFunction = (\n callback: (...args: Array<unknown>) => void,\n timeout?: number,\n ...args: Array<unknown>\n) => TimerHandle;\ntype CancelFunction = (id: TimerHandle | undefined) => void;\ntype AnyModelElement = State | Transition | Behavior | Constraint | Vertex;\ntype TransitionTable = Record<Path, TransitionCandidate[]>;\ntype TransitionCandidate = {\n transition: Transition;\n priority: number;\n};\n\ntype EventRecord = {\n kind: Kind;\n name: string;\n data?: any;\n schema?: any;\n source?: string;\n target?: string;\n id?: string;\n qualifiedName?: string;\n};\n\ntype Element = {\n kind: Kind;\n qualifiedName: Path;\n id?: string;\n};\n\ntype Vertex = Element & {\n transitions: Path[];\n};\n\ntype State = Vertex & {\n entry: Path[];\n exit: Path[];\n activities: Path[];\n deferred: Path[];\n initial?: Path;\n};\n\ntype TransitionPath = {\n enter: Path[];\n exit: Path[];\n};\n\ntype AttributeDefinition = {\n name: string;\n qualifiedName: string;\n hasDefault: boolean;\n defaultValue?: any;\n};\n\ntype OperationDefinition = {\n name: string;\n qualifiedName: string;\n implementation: (...args: unknown[]) => unknown;\n};\n\ntype Model = State & {\n members: Record<Path, AnyModelElement>;\n transitionMap: Record<Path, Record<Path, any[]>>;\n deferredMap: Record<Path, Record<Path, boolean>>;\n events: Record<string, EventRecord>;\n attributes: Record<string, AttributeDefinition>;\n operations: Record<string, OperationDefinition>;\n partials: Array<(model: Model, stack: AnyModelElement[]) => void>;\n};\n\ntype Transition = Element & {\n guard: string;\n events: string[];\n effect: Path[];\n source: Path;\n target?: Path;\n paths: Record<Path, TransitionPath>;\n};\n\ntype Operation = (ctx: Context, instance: Instance, event: EventRecord) => unknown;\n\ntype Expression = (ctx: Context, instance: Instance, event: EventRecord) => boolean;\n\ntype TimeExpression = (\n ctx: Context,\n instance: Instance,\n event: EventRecord,\n) => number | Date | Promise<number> | Promise<Date>;\n\ntype GuardFunction = (ctx: Context, instance: Instance, event: EventRecord) => boolean;\ntype SignalCallback = () => void;\ntype Thenable = {\n then: (...args: Array<(...args: unknown[]) => unknown>) => unknown;\n};\ntype DoneEventTarget = {\n addEventListener: (event: string, listener: SignalCallback) => void;\n};\ntype OnEventTarget = {\n on: (event: string, listener: SignalCallback) => void;\n};\ntype SignalLike = Thenable | DoneEventTarget | OnEventTarget;\ntype Timepoint = number | Date;\ntype TimerValue = number;\n\ntype Behavior = Element & {\n operation: Operation | null;\n operationName?: string;\n Owner?: () => string;\n};\n\ntype Constraint = Element & {\n expression: Expression;\n};\n\ntype PartialElement<T extends Element = Element, M extends Model = Model> = (\n model: M,\n elements: Element[],\n) => T | void;\n\ntype Snapshot = {\n id: string;\n qualifiedName: string;\n state: string;\n attributes: Record<string, any>;\n queueLen: number;\n events: Array<{\n event: string;\n target?: string;\n guard: boolean;\n schema?: any;\n }>;\n};\n\ntype ActiveContext = {\n listeners: Array<() => void>;\n instances: Record<string, Instance>;\n done: boolean;\n};\n\ntype Active = {\n context: ActiveContext;\n promise: Promise<void>;\n};\n\ntype Config = {\n id?: string;\n name?: string;\n data?: any;\n clock?: {\n setTimeout?: TimerFunction;\n clearTimeout?: CancelFunction;\n now?: () => number;\n };\n queue?: QueueShape;\n};\ntype ClockConfig = {\n setTimeout: TimerFunction;\n clearTimeout: CancelFunction;\n now: () => number;\n};\n\ntype QueueShape = {\n push: (event: EventRecord) => void | unknown;\n pop: () => EventRecord | undefined | unknown;\n len: () => number | unknown;\n};\n\ntype StripLeadingSlash<S extends string> = S extends `/${infer Rest}` ? Rest : S;\ntype StripTrailingSlash<S extends string> = S extends `${infer Rest}/` ? Rest : S;\ntype PathParts<S extends string> =\n S extends ''\n ? []\n : S extends `${infer Head}/${infer Tail}`\n ? [Head, ...PathParts<Tail>]\n : [S];\n\ntype CompactPathParts<Parts extends readonly string[], Acc extends readonly string[] = []> =\n Parts extends readonly [infer Head extends string, ...infer Tail extends string[]]\n ? Head extends '.'\n ? CompactPathParts<Tail, Acc>\n : Head extends ''\n ? CompactPathParts<Tail, Acc>\n : Head extends '..'\n ? CompactPathParts<Tail, PopSegment<Acc>>\n : CompactPathParts<Tail, [...Acc, Head]>\n : Acc;\n\ntype JoinPathParts<Parts extends readonly string[]> =\n Parts extends []\n ? ''\n : Parts extends readonly [infer Head extends string]\n ? Head\n : Parts extends readonly [infer Head extends string, ...infer Tail extends string[]]\n ? `${Head}/${JoinPathParts<Tail>}`\n : string;\n\ntype NormalizePath<Raw extends string> =\n ToAbsolutePath<CompactPathParts<PathParts<Raw>>>;\n\ntype ToAbsolutePath<Parts extends readonly string[]> =\n Parts extends []\n ? '/'\n : `/${JoinPathParts<Parts>}`;\n\ntype PopSegment<Parts extends readonly string[]> =\n Parts extends readonly [...infer Rest extends string[], infer _Last]\n ? Rest\n : [];\n\ntype IsAbsolutePath<S extends string> = S extends `/${string}` ? true : false;\n\ntype ResolvePathExpression<Base extends string, Expr extends string> =\n IsAbsolutePath<Expr> extends true\n ? NormalizePath<Expr>\n : ToAbsolutePath<\n CompactPathParts<\n [\n ...PathParts<StripLeadingSlash<Base>>,\n ...PathParts<StripLeadingSlash<StripTrailingSlash<Expr>>>,\n ]\n >\n >;\n\ntype ResolveModelPathExpression<\n Owner extends string,\n ModelRoot extends string,\n Expr extends string,\n> =\n IsAbsolutePath<Expr> extends true\n ? IsPathUnderBase<NormalizePath<Expr>, ModelRoot> extends true\n ? NormalizePath<Expr>\n : ToAbsolutePath<\n CompactPathParts<\n [\n ...PathParts<StripLeadingSlash<ModelRoot>>,\n ...PathParts<StripLeadingSlash<StripTrailingSlash<Expr>>>,\n ]\n >\n >\n : ToAbsolutePath<\n CompactPathParts<\n [\n ...PathParts<StripLeadingSlash<Owner>>,\n ...PathParts<StripLeadingSlash<StripTrailingSlash<Expr>>>,\n ]\n >\n >;\n\ntype IsPathUnderBase<Path extends string, Base extends string> =\n Path extends Base\n | `${Base}/${string}`\n ? true\n : false;\n\ntype RelativeFromAbsolute<Path extends string> =\n Path extends `/${string}/${infer Rest}` ? Rest : never;\n\ntype ParentParts<Parts extends readonly string[]> =\n Parts extends readonly [...infer Prefix extends string[], infer _Last extends string]\n ? Prefix\n : [];\n\ntype ParentPath<Path extends string> =\n Path extends `/${infer Tail}`\n ? ToAbsolutePath<ParentParts<PathParts<Tail>>>\n : never;\n\ntype IsStatePathPrefix<Prefix extends string, Path extends string> =\n Path extends `${Prefix}/${string}` ? true : false;\n\nexport type Event<Name extends string = string, Data = unknown> = EventRecord & {\n readonly name: Name;\n readonly schema?: Data;\n};\n\nexport interface TypedModel<\n TAttributes extends Record<string, any> = Record<string, any>,\n TOperations extends Record<string, (...args: any[]) => any> = Record<string, (...args: any[]) => any>,\n TGuards extends Record<string, (...args: any[]) => any> = Record<string, (...args: any[]) => any>,\n TActivities extends Record<string, (...args: any[]) => any> = Record<string, (...args: any[]) => any>,\n TEvents = Event<string, unknown>,\n TEventGroups = unknown,\n TName extends string = string,\n TInstance extends Instance = Instance,\n> extends Model {\n readonly __hsm_attributes?: TAttributes;\n readonly __hsm_operations?: TOperations;\n readonly __hsm_guards?: TGuards;\n readonly __hsm_activities?: TActivities;\n readonly __hsm_events?: TEvents;\n readonly __hsm_eventGroups?: TEventGroups;\n readonly __hsm_name?: TName;\n readonly __hsm_instance?: TInstance;\n readonly __hsm_meta?: {\n name: unknown;\n states: unknown;\n finalStates: unknown;\n transitions: unknown;\n initials: unknown;\n attributes: unknown;\n operations: unknown;\n eventSchemas: unknown;\n };\n}\n\nexport type EventClause<Name extends string = string, Schema = unknown> = {\n kind: 'on';\n name: Name;\n schema?: Schema;\n};\nexport type OnSetClause<Name extends string = string> = { kind: 'onSet'; name: Name };\nexport type OnCallClause<Name extends string = string> = { kind: 'onCall'; name: Name };\nexport type WhenClause<Name extends string = string> = { kind: 'when'; name: Name };\nexport type WhenExprClause = { kind: 'whenExpr' };\nexport type SourceClause<Name extends string = string> = { kind: 'source'; name: Name };\nexport type TargetClause<Name extends string = string> = { kind: 'target'; name: Name };\nexport type GuardClause<Value = unknown> = { kind: 'guard'; value: Value };\nexport type EffectClause<Value = unknown> = { kind: 'effect'; value: Value };\nexport type AfterClause<Value = unknown> = { kind: 'after'; value: Value };\nexport type EveryClause<Value = unknown> = { kind: 'every'; value: Value };\nexport type AtClause<Value = unknown> = { kind: 'at'; value: Value };\n\nexport type TransitionSpec<Parts extends readonly TransitionBuilderClause[]> = {\n kind: 'transition';\n parts: Parts;\n};\n\nexport type StateSpec<\n Name extends string = string,\n Parts extends readonly unknown[] = readonly unknown[]\n> = {\n kind: 'state';\n name: Name;\n parts: Parts;\n};\n\nexport type InitialSpec<Parts extends readonly TransitionBuilderClause[] = readonly TransitionBuilderClause[]> = {\n kind: 'initial';\n name: string;\n parts: Parts;\n};\n\nexport type FinalSpec<Name extends string = string> = { kind: 'final'; name: Name };\nexport type ShallowHistorySpec<\n Name extends string = string,\n Parts extends readonly unknown[] = readonly unknown[]\n> = { kind: 'shallowHistory'; name: Name; parts: Parts };\nexport type DeepHistorySpec<\n Name extends string = string,\n Parts extends readonly unknown[] = readonly unknown[]\n> = { kind: 'deepHistory'; name: Name; parts: Parts };\nexport type ChoiceSpec<\n Name extends string = string,\n Parts extends readonly unknown[] = readonly unknown[]\n> = { kind: 'choice'; name: Name; parts: Parts };\nexport type EntrySpec<Operations = unknown> = { kind: 'entry'; value: Operations };\nexport type ExitSpec<Operations = unknown> = { kind: 'exit'; value: Operations };\nexport type ActivitySpec<Operations = unknown> = { kind: 'activity'; value: Operations };\nexport type DeferSpec<EventNames extends readonly string[] = readonly string[]> = {\n kind: 'defer';\n eventNames: EventNames;\n};\n\nexport type AttributeSpec<Name extends string = string, Value = unknown> = {\n kind: 'attribute';\n name: Name;\n value: Value;\n};\n\nexport type OperationSpec<\n Name extends string = string,\n Fn extends (...args: any[]) => any = (...args: any[]) => any,\n> = {\n kind: 'operation';\n name: Name;\n impl: Fn;\n};\n\nexport type ModelElementSpec =\n | TransitionSpec<readonly TransitionBuilderClause[]>\n | StateSpec<string, readonly unknown[]>\n | InitialSpec<readonly TransitionBuilderClause[]>\n | FinalSpec\n | ShallowHistorySpec<string, readonly unknown[]>\n | DeepHistorySpec<string, readonly unknown[]>\n | ChoiceSpec<string, readonly unknown[]>\n | EntrySpec\n | ExitSpec\n | ActivitySpec\n | AttributeSpec\n | OperationSpec\n | DeferSpec\n | { kind: 'unknown' };\n\nexport type TransitionBuilderClause =\n | EventClause\n | OnSetClause\n | OnCallClause\n | WhenClause\n | WhenExprClause\n | SourceClause\n | TargetClause\n | GuardClause\n | EffectClause\n | AfterClause\n | EveryClause\n | AtClause\n | { kind: 'unknownTransitionClause' };\n\ntype MetaFromBuilder<T> = T extends { __hsmSpec: infer Meta } ? Meta : never;\n\ntype ModelMetaOf<T> = T extends { __hsm_meta: infer M } ? M : never;\n\ntype BuilderTuple<Specs extends readonly unknown[]> = {\n [K in keyof Specs]: BuilderWithSpec<\n (model: Model, stack: AnyModelElement[]) => unknown,\n Specs[K]\n >;\n};\n\ntype GuardBuilder<EventType extends EventRecord = EventRecord> =\n BuilderWithSpec<\n (model: Model, stack: AnyModelElement[]) => unknown,\n GuardClause<unknown>\n > & {\n readonly __hsmTransitionEvent?: EventType;\n };\n\ntype EffectBuilder<EventType extends EventRecord = EventRecord> =\n BuilderWithSpec<\n (model: Model, stack: AnyModelElement[]) => unknown,\n EffectClause<unknown>\n > & {\n readonly __hsmTransitionEvent?: EventType;\n };\n\ntype TransitionBuilderTuple<Clauses extends readonly TransitionBuilderClause[]> = BuilderTuple<Clauses>;\n\ntype ModelElementBuilderTuple<Specs extends readonly ModelElementSpec[]> = BuilderTuple<Specs>;\ntype ScopeModelParts<\n LocalParts extends readonly unknown[],\n ModelParts extends readonly unknown[],\n> = readonly [...ModelParts, ...LocalParts];\n\ntype IsAny<T> = 0 extends (1 & T) ? true : false;\n\ntype AttributeKeysFromModelParts<Parts extends readonly unknown[]> =\n keyof ModelAttributeTypeMap<Parts> & string;\n\ntype DurationAttributeKeysFromModelParts<Parts extends readonly unknown[]> = {\n [K in AttributeKeysFromModelParts<Parts>]:\n IsAny<EventValueFromAttribute<Parts, K>> extends true\n ? K\n : [Extract<EventValueFromAttribute<Parts, K>, string | number>] extends [never]\n ? never\n : K;\n}[AttributeKeysFromModelParts<Parts>];\n\ntype TimepointAttributeKeysFromModelParts<Parts extends readonly unknown[]> = {\n [K in AttributeKeysFromModelParts<Parts>]:\n IsAny<EventValueFromAttribute<Parts, K>> extends true\n ? K\n : [Extract<EventValueFromAttribute<Parts, K>, string | number | Date>] extends [never]\n ? never\n : K;\n}[AttributeKeysFromModelParts<Parts>];\n\ntype OperationKeysFromModelParts<Parts extends readonly unknown[]> =\n keyof ModelOperationTypeMap<Parts> & string;\n\ntype GuardOperationKeysFromModelParts<Parts extends readonly unknown[]> = {\n [K in OperationKeysFromModelParts<Parts>]:\n IsAny<ReturnType<Extract<ModelOperationTypeMap<Parts>[K], (...args: any[]) => any>>> extends true\n ? never\n : ReturnType<Extract<ModelOperationTypeMap<Parts>[K], (...args: any[]) => any>> extends boolean\n ? K\n : never;\n}[OperationKeysFromModelParts<Parts>];\n\ntype InvalidString<Message extends string, Actual extends string> = Actual & {\n readonly __hsmTypeError: Message;\n};\n\ntype ValidateBehaviorArgument<\n Argument,\n ModelParts extends readonly unknown[],\n GuardOnly extends boolean = false,\n> =\n Argument extends string\n ? GuardOnly extends true\n ? Argument extends GuardOperationKeysFromModelParts<ModelParts>\n ? Argument\n : InvalidString<`Invalid guard operation: ${Argument}`, Argument>\n : Argument extends OperationKeysFromModelParts<ModelParts>\n ? Argument\n : InvalidString<`Invalid behavior operation: ${Argument}`, Argument>\n : Argument;\n\ntype ValidateBehaviorArguments<\n Arguments,\n ModelParts extends readonly unknown[],\n GuardOnly extends boolean = false,\n> =\n Arguments extends readonly [infer Head, ...infer Tail]\n ? readonly [\n ValidateBehaviorArgument<Head, ModelParts, GuardOnly>,\n ...ValidateBehaviorArguments<Tail, ModelParts, GuardOnly>,\n ]\n : readonly [];\n\ntype KnownEventNamesFromRootModelParts<\n RootModelParts extends readonly unknown[],\n RootPath extends string,\n> =\n keyof CollectModelParts<\n RootModelParts,\n RootPath,\n RootPath,\n RootModelParts\n >['eventSchemas'] & string;\n\ntype ValidateDeferredEventName<\n EventName extends string,\n RootModelParts extends readonly unknown[],\n RootPath extends string,\n> =\n string extends EventName\n ? EventName\n : EventName extends KnownEventNamesFromRootModelParts<RootModelParts, RootPath>\n ? EventName\n : InvalidString<`Invalid deferred event: ${EventName}`, EventName>;\n\ntype ValidateDeferredEventNames<\n EventNames extends readonly string[],\n RootModelParts extends readonly unknown[],\n RootPath extends string,\n> = {\n [K in keyof EventNames]:\n EventNames[K] extends string\n ? ValidateDeferredEventName<EventNames[K], RootModelParts, RootPath>\n : EventNames[K];\n};\n\ntype LocalKnownEventNamesFromParts<\n Parts extends readonly unknown[],\n> = keyof CollectModelParts<Parts, '/', '/', Parts>['eventSchemas'] & string;\n\ntype ValidateDeferredEventNameFromParts<\n EventName extends string,\n Parts extends readonly unknown[],\n> =\n string extends EventName\n ? EventName\n : EventName extends LocalKnownEventNamesFromParts<Parts>\n ? EventName\n : InvalidString<`Invalid deferred event: ${EventName}`, EventName>;\n\ntype ValidateDeferredEventNamesFromParts<\n EventNames extends readonly string[],\n Parts extends readonly unknown[],\n> = {\n [K in keyof EventNames]:\n EventNames[K] extends string\n ? ValidateDeferredEventNameFromParts<EventNames[K], Parts>\n : EventNames[K];\n};\n\ntype ValidateStateLocalSpec<\n Spec,\n RootParts extends readonly unknown[],\n> =\n Spec extends DeferSpec<infer EventNames>\n ? DeferSpec<ValidateDeferredEventNamesFromParts<EventNames, RootParts>>\n : Spec extends StateSpec<infer Name, infer Parts>\n ? StateSpec<Name, ValidateStateLocalSpecs<Parts, RootParts>>\n : Spec;\n\ntype ValidateStateLocalSpecs<\n Specs extends readonly unknown[],\n RootParts extends readonly unknown[] = Specs,\n> = {\n [K in keyof Specs]: ValidateStateLocalSpec<Specs[K], RootParts>;\n};\n\ntype ValidateTransitionClause<\n Clause,\n ScopedModelParts extends readonly unknown[],\n RootModelParts extends readonly unknown[],\n RootPath extends string,\n OwnerPath extends string,\n> =\n Clause extends OnSetClause<infer Name>\n ? Name extends AttributeKeysFromModelParts<ScopedModelParts>\n ? OnSetClause<Name>\n : OnSetClause<InvalidString<`Invalid onSet attribute: ${Name}`, Name>>\n : Clause extends WhenClause<infer Name>\n ? Name extends AttributeKeysFromModelParts<ScopedModelParts>\n ? WhenClause<Name>\n : WhenClause<InvalidString<`Invalid when attribute: ${Name}`, Name>>\n : Clause extends OnCallClause<infer Name>\n ? Name extends OperationKeysFromModelParts<ScopedModelParts>\n ? OnCallClause<Name>\n : OnCallClause<InvalidString<`Invalid onCall operation: ${Name}`, Name>>\n : Clause extends SourceClause<infer Name>\n ? ResolveModelPathExpression<OwnerPath, RootPath, Name> extends\n | RootPath\n | CollectModelParts<RootModelParts, RootPath, RootPath, RootModelParts>['states']\n ? SourceClause<Name>\n : SourceClause<InvalidString<`Invalid transition source path: ${Name}`, Name>>\n : Clause extends TargetClause<infer Name>\n ? ResolveModelPathExpression<OwnerPath, RootPath, Name> extends\n | RootPath\n | CollectModelParts<RootModelParts, RootPath, RootPath, RootModelParts>['states']\n ? TargetClause<Name>\n : TargetClause<InvalidString<`Invalid transition target path: ${Name}`, Name>>\n : Clause extends AfterClause<infer Value>\n ? Value extends string\n ? Value extends DurationAttributeKeysFromModelParts<ScopedModelParts>\n ? AfterClause<Value>\n : AfterClause<InvalidString<`Invalid after attribute: ${Value}`, Value>>\n : Clause\n : Clause extends EveryClause<infer Value>\n ? Value extends string\n ? Value extends DurationAttributeKeysFromModelParts<ScopedModelParts>\n ? EveryClause<Value>\n : EveryClause<InvalidString<`Invalid every attribute: ${Value}`, Value>>\n : Clause\n : Clause extends AtClause<infer Value>\n ? Value extends string\n ? Value extends TimepointAttributeKeysFromModelParts<ScopedModelParts>\n ? AtClause<Value>\n : AtClause<InvalidString<`Invalid at attribute: ${Value}`, Value>>\n : Clause\n : Clause extends GuardClause<infer Value>\n ? GuardClause<ValidateBehaviorArgument<Value, ScopedModelParts, true>>\n : Clause extends EffectClause<infer Value>\n ? EffectClause<ValidateBehaviorArguments<Value, ScopedModelParts>>\n : Clause;\n\ntype ValidateTransitionClauses<\n Clauses extends readonly unknown[],\n ScopedModelParts extends readonly unknown[],\n RootModelParts extends readonly unknown[],\n RootPath extends string,\n OwnerPath extends string,\n> = {\n [K in keyof Clauses]:\n ValidateTransitionClause<Clauses[K], ScopedModelParts, RootModelParts, RootPath, OwnerPath>;\n};\n\ntype ValidateModelSpec<\n Spec,\n ScopedModelParts extends readonly unknown[],\n RootModelParts extends readonly unknown[],\n RootPath extends string,\n OwnerPath extends string,\n> =\n Spec extends StateSpec<infer Name, infer Parts>\n ? StateSpec<\n Name,\n ValidateModelSpecs<\n Parts,\n ScopeModelParts<Parts, ScopedModelParts>,\n RootModelParts,\n RootPath,\n ResolvePathExpression<OwnerPath, Name>\n >\n >\n : Spec extends TransitionSpec<infer Clauses>\n ? TransitionSpec<\n ValidateTransitionClauses<Clauses, ScopedModelParts, RootModelParts, RootPath, OwnerPath>\n >\n : Spec extends InitialSpec<infer Clauses>\n ? InitialSpec<\n ValidateTransitionClauses<Clauses, ScopedModelParts, RootModelParts, RootPath, OwnerPath>\n >\n : Spec extends EntrySpec<infer Value>\n ? EntrySpec<ValidateBehaviorArguments<Value, ScopedModelParts>>\n : Spec extends ExitSpec<infer Value>\n ? ExitSpec<ValidateBehaviorArguments<Value, ScopedModelParts>>\n : Spec extends ActivitySpec<infer Value>\n ? ActivitySpec<ValidateBehaviorArguments<Value, ScopedModelParts>>\n : Spec extends DeferSpec<infer EventNames>\n ? DeferSpec<\n ValidateDeferredEventNames<\n EventNames,\n RootModelParts,\n RootPath\n >\n >\n : Spec;\n\ntype ValidateModelSpecs<\n Specs extends readonly unknown[],\n ScopedModelParts extends readonly unknown[] = Specs,\n RootModelParts extends readonly unknown[] = ScopedModelParts,\n RootPath extends string = '/',\n OwnerPath extends string = RootPath,\n> = {\n [K in keyof Specs]:\n ValidateModelSpec<Specs[K], ScopedModelParts, RootModelParts, RootPath, OwnerPath>;\n};\n\ntype ValidatedModelElementBuilderTuple<\n Specs extends readonly ModelElementSpec[],\n ScopedModelParts extends readonly ModelElementSpec[] = Specs,\n RootModelParts extends readonly ModelElementSpec[] = ScopedModelParts,\n RootPath extends string = '/',\n OwnerPath extends string = RootPath,\n> = BuilderTuple<\n ValidateModelSpecs<Specs, ScopedModelParts, RootModelParts, RootPath, OwnerPath>\n>;\n\ntype ModelAttributeMap<T> =\n T extends TypedModel<infer A, any, any, any, any, any, any, any>\n ? A\n : ModelMetaOf<T> extends { attributes: infer A }\n ? A extends Record<string, unknown>\n ? A\n : {}\n : {};\n\ntype ModelOperationMap<T> =\n T extends TypedModel<any, infer O, any, any, any, any, any, any>\n ? O\n : ModelMetaOf<T> extends { operations: infer O }\n ? O extends Record<string, (...args: any[]) => any>\n ? O\n : {}\n : {};\n\ntype ModelEventMap<T> =\n T extends TypedModel<any, any, any, any, infer E, any, any, any>\n ? EventMapFromUnion<E>\n : ModelMetaOf<T> extends { eventSchemas: infer E }\n ? E extends Record<string, unknown>\n ? E\n : {}\n : {};\n\ntype ModelStateMeta<T> =\n T extends { __hsm_meta: infer Meta }\n ? Meta extends {\n name: string;\n states: infer States;\n finalStates: infer Finals;\n transitions: infer Transitions;\n initials: infer Initials;\n attributes: infer Attributes;\n operations: infer Operations;\n eventSchemas: infer EventSchemas;\n }\n ? {\n name: string & Meta['name'];\n states: States & string;\n finalStates: Finals & string;\n transitions: Transitions;\n initials: Initials extends Record<string, string> ? Initials : Record<string, string>;\n attributes: Attributes extends Record<string, unknown> ? Attributes : Record<string, unknown>;\n operations: Operations extends Record<string, (...args: any[]) => any> ? Operations : Record<string, (...args: any[]) => any>;\n eventSchemas: EventSchemas extends Record<string, unknown> ? EventSchemas : Record<string, unknown>;\n }\n : never\n : TypedModelMetaFallback<T>;\n\ntype TypedModelMetaFallback<T> = {\n name: string;\n states: string;\n finalStates: string;\n transitions: string;\n initials: Record<string, string>;\n attributes: ModelAttributeMap<T>;\n operations: ModelOperationMap<T>;\n eventSchemas: ModelEventMap<T>;\n};\n\ntype TypedModelFromInfer<\n RootName extends string,\n Parts extends readonly unknown[],\n> = {\n [K in keyof Model & string]: Model[K];\n} & TypedModel<\n InferredAttributes<Parts>,\n InferredOperations<Parts>,\n any,\n any,\n InferredEventUnion<Parts>,\n any,\n RootName,\n Instance\n> & {\n readonly __hsm_meta: ModelStateMetaFromParts<`/${RootName}`, Parts>;\n};\n\ntype ModelAttributeTypeMap<Parts extends readonly unknown[]> =\n MergeMaps<AttributeFromParts<Parts>>;\n\ntype ModelOperationTypeMap<Parts extends readonly unknown[]> =\n NormalizeOpMap<MergeMaps<OperationFromParts<Parts>>>;\n\ntype InferredAttributes<Parts extends readonly unknown[]> =\n ModelAttributeTypeMap<Parts>;\n\ntype InferredOperations<Parts extends readonly unknown[]> =\n ModelOperationTypeMap<Parts>;\n\ntype InferredEventUnion<Parts extends readonly unknown[]> =\n EventUnionFromTransitions<\n CollectModelParts<Parts, '/', '/', Parts>['transitions']\n > |\n EventUnionFromMap<\n CollectModelParts<Parts, '/', '/', Parts>['eventSchemas']\n >;\n\ntype UnionToIntersection<T> =\n (T extends any ? (value: T) => void : never) extends (value: infer I) => void ? I : never;\n\ntype EventMapFromUnion<U> =\n UnionToIntersection<\n U extends Event<infer Name, infer Schema>\n ? { [K in Name]: Schema }\n : {}\n > extends infer M\n ? M extends Record<string, unknown>\n ? MergeMaps<M>\n : {}\n : {};\n\ntype MergeEventMaps<\n A extends Record<string, unknown>,\n B extends Record<string, unknown>,\n> = {\n [K in keyof A | keyof B]: K extends keyof B ? B[K] : K extends keyof A ? A[K] : never;\n};\n\ntype EventSpecMapToUnion<SchemaMap> = SchemaMap;\n\ntype MergeMaps<\n M extends Record<string, unknown>,\n> = {\n [K in keyof M]: M[K];\n};\n\ntype NormalizeOpMap<M extends Record<string, unknown>> = {\n [K in keyof M]: M[K] extends (...args: any[]) => any ? M[K] : never;\n};\n\ntype AttributeFromParts<Parts extends readonly unknown[]> =\n Parts extends readonly [infer H, ...infer T]\n ? H extends AttributeSpec<infer Name, infer Value>\n ? { [K in Name]: Value } & AttributeFromParts<T>\n : AttributeFromParts<T>\n : {};\n\ntype OperationFromParts<Parts extends readonly unknown[]> =\n Parts extends readonly [infer H, ...infer T]\n ? H extends OperationSpec<infer Name, infer Fn>\n ? { [K in Name]: Fn } & OperationFromParts<T>\n : OperationFromParts<T>\n : {};\n\ntype EventValueFromAttribute<Parts extends readonly unknown[], Name extends string> =\n Name extends keyof ModelAttributeTypeMap<Parts> & string\n ? ModelAttributeTypeMap<Parts>[Name]\n : unknown;\n\ntype EventArgsFromOperation<Parts extends readonly unknown[], Name extends string> =\n Name extends keyof ModelOperationTypeMap<Parts> & string\n ? Parameters<Extract<ModelOperationTypeMap<Parts>[Name], (...args: any[]) => any>>\n : unknown[];\n\ntype EventSchemasFromPartialsWithContext<\n Parts extends readonly unknown[],\n ModelParts extends readonly unknown[],\n> =\n Parts extends readonly [infer H, ...infer T]\n ? H extends EventClause<infer Name, infer Schema>\n ? { [K in Name]: Schema extends undefined ? unknown : Schema } &\n EventSchemasFromPartialsWithContext<T, ModelParts>\n : H extends OnSetClause<infer Name>\n ? {\n [K in `set:${Name}`]: {\n name: Name;\n old: EventValueFromAttribute<ModelParts, Name>;\n new: EventValueFromAttribute<ModelParts, Name>;\n };\n } & EventSchemasFromPartialsWithContext<T, ModelParts>\n : H extends OnCallClause<infer Name>\n ? {\n [K in `call:${Name}`]: {\n name: Name;\n args: EventArgsFromOperation<ModelParts, Name>;\n };\n } & EventSchemasFromPartialsWithContext<T, ModelParts>\n : H extends WhenClause<infer Name>\n ? {\n [K in `set:${Name}`]: {\n name: Name;\n old: EventValueFromAttribute<ModelParts, Name>;\n new: EventValueFromAttribute<ModelParts, Name>;\n };\n } & EventSchemasFromPartialsWithContext<T, ModelParts>\n : H extends TransitionSpec<infer Clauses>\n ? EventSchemasFromClausesWithContext<Clauses, ModelParts> &\n EventSchemasFromPartialsWithContext<T, ModelParts>\n : H extends StateSpec<infer _Name, infer S>\n ? EventSchemasFromPartialsWithContext<S, ModelParts> &\n EventSchemasFromPartialsWithContext<T, ModelParts>\n : EventSchemasFromPartialsWithContext<T, ModelParts>\n : {};\n\ntype EventSchemasFromPartials<Parts extends readonly unknown[]> =\n EventSchemasFromPartialsWithContext<Parts, Parts>;\n\ntype EventSchemasFromClausesWithContext<\n Clauses extends readonly unknown[],\n ModelParts extends readonly unknown[],\n> =\n Clauses extends readonly [infer H, ...infer T]\n ? H extends EventClause<infer Name, infer Schema>\n ? { [K in Name]: Schema extends undefined ? unknown : Schema } &\n EventSchemasFromClausesWithContext<T, ModelParts>\n : H extends OnSetClause<infer Name>\n ? {\n [K in `set:${Name}`]: {\n name: Name;\n old: EventValueFromAttribute<ModelParts, Name>;\n new: EventValueFromAttribute<ModelParts, Name>;\n };\n } & EventSchemasFromClausesWithContext<T, ModelParts>\n : H extends OnCallClause<infer Name>\n ? {\n [K in `call:${Name}`]: {\n name: Name;\n args: EventArgsFromOperation<ModelParts, Name>;\n };\n } & EventSchemasFromClausesWithContext<T, ModelParts>\n : H extends WhenClause<infer Name>\n ? {\n [K in `set:${Name}`]: {\n name: Name;\n old: EventValueFromAttribute<ModelParts, Name>;\n new: EventValueFromAttribute<ModelParts, Name>;\n };\n } & EventSchemasFromClausesWithContext<T, ModelParts>\n : EventSchemasFromClausesWithContext<T, ModelParts>\n : {};\n\ntype EventSchemasFromClauses<Clauses extends readonly unknown[]> =\n EventSchemasFromClausesWithContext<Clauses, Clauses>;\n\ntype TransitionRaw<Name extends string = string> = {\n owner: string;\n source: string;\n target: string | undefined;\n events: Name;\n schema: Record<string, unknown>;\n};\n\ntype TransitionFromClauses<\n Clauses extends readonly unknown[],\n Owner extends string = string,\n Source extends string = Owner,\n Target extends string | undefined = undefined,\n Events extends string = never,\n Schemas extends Record<string, unknown> = {},\n ModelParts extends readonly unknown[] = readonly unknown[],\n> = Clauses extends readonly [infer H, ...infer T]\n ? H extends SourceClause<infer Name>\n ? TransitionFromClauses<T, Owner, Name, Target, Events, Schemas, ModelParts>\n : H extends TargetClause<infer Name>\n ? TransitionFromClauses<T, Owner, Source, Name, Events, Schemas, ModelParts>\n : H extends EventClause<infer Name, infer Schema>\n ? TransitionFromClauses<\n T,\n Owner,\n Source,\n Target,\n Events | Name,\n MergeEventMaps<Schemas, { [K in Name]: Schema extends undefined ? unknown : Schema }>,\n ModelParts\n >\n : H extends OnSetClause<infer Name>\n ? TransitionFromClauses<\n T,\n Owner,\n Source,\n Target,\n Events | `set:${Name}`,\n MergeEventMaps<\n Schemas,\n {\n [K in `set:${Name}`]: {\n name: Name;\n old: EventValueFromAttribute<ModelParts, Name>;\n new: EventValueFromAttribute<ModelParts, Name>;\n };\n }\n >,\n ModelParts\n >\n : H extends OnCallClause<infer Name>\n ? TransitionFromClauses<\n T,\n Owner,\n Source,\n Target,\n Events | `call:${Name}`,\n MergeEventMaps<\n Schemas,\n {\n [K in `call:${Name}`]: {\n name: Name;\n args: EventArgsFromOperation<ModelParts, Name>;\n };\n }\n >,\n ModelParts\n >\n : H extends WhenClause<infer Name>\n ? TransitionFromClauses<\n T,\n Owner,\n Source,\n Target,\n Events | `set:${Name}`,\n MergeEventMaps<\n Schemas,\n {\n [K in `set:${Name}`]: {\n name: Name;\n old: EventValueFromAttribute<ModelParts, Name>;\n new: EventValueFromAttribute<ModelParts, Name>;\n };\n }\n >,\n ModelParts\n >\n : TransitionFromClauses<T, Owner, Source, Target, Events, Schemas, ModelParts>\n : {\n owner: Owner;\n source: Source;\n target: Target;\n events: Events;\n schema: Schemas;\n };\n\ntype CollectModelParts<\n Parts extends readonly unknown[],\n ParentPath extends string,\n ModelRoot extends string,\n AllParts extends readonly unknown[] = Parts,\n> = Parts extends readonly [infer H, ...infer T]\n ? MergeCollect<\n InferFromSpec<H, ParentPath, ModelRoot, AllParts>,\n CollectModelParts<T, ParentPath, ModelRoot, AllParts>\n >\n : {\n states: never;\n finalStates: never;\n transitions: never;\n initials: {};\n attributes: {};\n operations: {};\n eventSchemas: {};\n };\n\ntype InferFromSpec<\n Spec,\n ParentPath extends string,\n ModelRoot extends string,\n AllParts extends readonly unknown[],\n> = Spec extends StateSpec<infer Name, infer P>\n ? StateFromSpec<Name, P, ParentPath, ModelRoot, AllParts>\n : Spec extends FinalSpec<infer Name>\n ? FinalFromSpec<Name, ParentPath>\n : Spec extends TransitionSpec<infer Clauses>\n ? TransitionFromSpec<Clauses, ParentPath, ModelRoot, AllParts>\n : Spec extends InitialSpec<infer Clauses>\n ? InitialFromSpec<Clauses, ParentPath, ModelRoot, AllParts>\n : Spec extends AttributeSpec<infer Name, infer Value>\n ? { states: never; finalStates: never; transitions: never; initials: {}; attributes: { [K in Name]: Value }; operations: {}; eventSchemas: {} }\n : Spec extends OperationSpec<infer Name, infer Fn>\n ? { states: never; finalStates: never; transitions: never; initials: {}; attributes: {}; operations: { [K in Name]: Fn }; eventSchemas: {} }\n : Spec extends ShallowHistorySpec<infer Name, infer P>\n ? StateAliasFromPseudo<Name, P, ParentPath, ModelRoot, AllParts>\n : Spec extends DeepHistorySpec<infer Name, infer P>\n ? StateAliasFromPseudo<Name, P, ParentPath, ModelRoot, AllParts>\n : Spec extends ChoiceSpec<infer Name, infer P>\n ? StateAliasFromPseudo<Name, P, ParentPath, ModelRoot, AllParts>\n : { states: never; finalStates: never; transitions: never; initials: {}; attributes: {}; operations: {}; eventSchemas: {} };\n\ntype StateAliasFromPseudo<\n Name extends string,\n Parts extends readonly unknown[],\n ParentPath extends string,\n ModelRoot extends string,\n AllParts extends readonly unknown[],\n> = StateFromSpec<Name, Parts, ParentPath, ModelRoot, AllParts>;\n\ntype StateFromSpec<\n Name extends string,\n Parts extends readonly unknown[],\n ParentPath extends string,\n ModelRoot extends string,\n AllParts extends readonly unknown[],\n> = {\n states:\n | ResolvePathExpression<ParentPath, Name>\n | ChildTransitionsFromParts<\n Parts,\n ResolvePathExpression<ParentPath, Name>,\n ModelRoot,\n AllParts\n >['states'];\n finalStates: ChildTransitionsFromParts<\n Parts,\n ResolvePathExpression<ParentPath, Name>,\n ModelRoot,\n AllParts\n >['finalStates'];\n transitions: ChildTransitionsFromParts<\n Parts,\n ResolvePathExpression<ParentPath, Name>,\n ModelRoot,\n AllParts\n >['transitions'];\n initials: ChildTransitionsFromParts<\n Parts,\n ResolvePathExpression<ParentPath, Name>,\n ModelRoot,\n AllParts\n >['initials'];\n attributes: ChildTransitionsFromParts<\n Parts,\n ResolvePathExpression<ParentPath, Name>,\n ModelRoot,\n AllParts\n >['attributes'];\n operations: ChildTransitionsFromParts<\n Parts,\n ResolvePathExpression<ParentPath, Name>,\n ModelRoot,\n AllParts\n >['operations'];\n eventSchemas: ChildTransitionsFromParts<\n Parts,\n ResolvePathExpression<ParentPath, Name>,\n ModelRoot,\n AllParts\n >['eventSchemas'];\n};\n\ntype ChildTransitionsFromParts<\n Parts extends readonly unknown[],\n ParentPath extends string,\n ModelRoot extends string,\n AllParts extends readonly unknown[],\n> = CollectModelParts<Parts, ParentPath, ModelRoot, AllParts>;\n\ntype FinalFromSpec<Name extends string, ParentPath extends string> = {\n states: ResolvePathExpression<ParentPath, Name>;\n finalStates: ResolvePathExpression<ParentPath, Name>;\n transitions: never;\n initials: {};\n attributes: {};\n operations: {};\n eventSchemas: {};\n};\n\ntype EventSchemasFromChildrenWithContext<\n Parts extends readonly unknown[],\n AllParts extends readonly unknown[],\n> =\n Parts extends readonly [infer H, ...infer T]\n ? H extends StateSpec<any, infer ChildParts>\n ? EventSchemasFromPartialsWithContext<ChildParts, AllParts> &\n EventSchemasFromChildrenWithContext<T, AllParts>\n : H extends FinalSpec<any>\n ? EventSchemasFromChildrenWithContext<T, AllParts>\n : H extends InitialSpec<infer Clauses>\n ? EventSchemasFromClausesWithContext<Clauses, AllParts> &\n EventSchemasFromChildrenWithContext<T, AllParts>\n : H extends TransitionSpec<infer Clauses>\n ? EventSchemasFromClausesWithContext<Clauses, AllParts> &\n EventSchemasFromChildrenWithContext<T, AllParts>\n : EventSchemasFromChildrenWithContext<T, AllParts>\n : {};\n\ntype EventSchemasFromChildren<Parts extends readonly unknown[]> =\n EventSchemasFromChildrenWithContext<Parts, Parts>;\n\ntype TransitionFromSpec<\n Clauses extends readonly unknown[],\n OwnerPath extends string,\n ModelRoot extends string,\n ModelParts extends readonly unknown[],\n> = {\n states: never;\n finalStates: never;\n transitions: NormalizeTransition<\n TransitionFromClauses<Clauses, OwnerPath, OwnerPath, undefined, never, {}, ModelParts>,\n OwnerPath,\n ModelRoot\n >;\n attributes: {};\n operations: {};\n eventSchemas: EventSchemasFromClausesWithContext<Clauses, ModelParts>;\n initials: {};\n};\n\ntype InitialsFromClauses<\n Clauses extends readonly unknown[],\n OwnerPath extends string,\n ModelRoot extends string,\n> =\n NormalizeTransition<\n TransitionFromClauses<Clauses, OwnerPath, OwnerPath>,\n OwnerPath,\n ModelRoot\n >['target'] extends infer Target\n ? Target extends string\n ? { [K in OwnerPath]: Target }\n : {}\n : {};\n\ntype InitialFromSpec<\n Clauses extends readonly unknown[],\n OwnerPath extends string,\n ModelRoot extends string,\n ModelParts extends readonly unknown[],\n> = {\n states: never;\n finalStates: never;\n transitions: NormalizeTransition<\n TransitionFromClauses<Clauses, OwnerPath, OwnerPath, undefined, never, {}, ModelParts>,\n OwnerPath,\n ModelRoot\n >;\n initials: InitialsFromClauses<Clauses, OwnerPath, ModelRoot>;\n attributes: {};\n operations: {};\n eventSchemas: EventSchemasFromClausesWithContext<Clauses, ModelParts>;\n};\n\ntype NormalizeTransition<\n T extends {\n owner: string;\n source: string;\n target: string | undefined;\n events: string;\n schema: Record<string, unknown>;\n },\n Owner extends string,\n Root extends string,\n> = {\n source: ResolveModelPathExpression<Owner, Root, T['source']>;\n target: T['target'] extends string ? ResolveModelPathExpression<Owner, Root, T['target']> : undefined;\n events: T['events'];\n schema: T['schema'];\n};\n\ntype MergeCollect<A, B> = {\n states: A extends { states: infer AS } ? (B extends { states: infer BS } ? AS | BS : AS) : never;\n finalStates: A extends { finalStates: infer AF } ? (B extends { finalStates: infer BF } ? AF | BF : AF) : never;\n transitions: A extends { transitions: infer AT } ? (B extends { transitions: infer BT } ? AT | BT : AT) : never;\n initials: A extends { initials: infer AI } ? B extends { initials: infer BI } ? MergeEventMaps<AI & Record<string, string>, BI & Record<string, string>> : AI : never;\n attributes: A extends { attributes: infer AA } ? B extends { attributes: infer BA } ? MergeEventMaps<AA & Record<string, unknown>, BA & Record<string, unknown>> : AA : never;\n operations: A extends { operations: infer AO } ? B extends { operations: infer BO } ? MergeEventMaps<AO & Record<string, (...args: any[]) => any>, BO & Record<string, (...args: any[]) => any>> : AO : never;\n eventSchemas: A extends { eventSchemas: infer AE } ? B extends { eventSchemas: infer BE } ? MergeEventMaps<AE & Record<string, unknown>, BE & Record<string, unknown>> : AE : never;\n};\n\ntype ModelStateMetaFromParts<\n RootPath extends string,\n Parts extends readonly unknown[],\n> = {\n name: RootPath;\n states: (CollectModelParts<Parts, RootPath, RootPath, Parts>['states']) & string;\n finalStates: (CollectModelParts<Parts, RootPath, RootPath, Parts>['finalStates']) & string;\n transitions: CollectModelParts<Parts, RootPath, RootPath, Parts>['transitions'];\n initials: CollectModelParts<Parts, RootPath, RootPath, Parts>['initials'];\n attributes: InferredAttributes<Parts>;\n operations: InferredOperations<Parts>;\n eventSchemas: MergeEventMaps<\n EventSchemasFromPartialsWithContext<Parts, Parts>,\n EventSchemaFromTransitions<\n CollectModelParts<Parts, RootPath, RootPath, Parts>['transitions']\n >\n >;\n};\n\ntype EventSchemaFromTransitions<Transitions> =\n [Transitions] extends [never]\n ? {}\n : {\n [Name in TransitionEventNames<Transitions>]: EventSchemaForTransitionEvent<Transitions, Name>;\n };\n\ntype TransitionEventNames<Transitions> =\n Transitions extends { events: infer EventName }\n ? EventName & string\n : never;\n\ntype EventSchemaForTransitionEvent<Transitions, EventName extends string> =\n Transitions extends infer Transition\n ? Transition extends { events: infer E; schema: infer S }\n ? EventName extends E\n ? S extends Record<string, unknown>\n ? EventName extends keyof S\n ? S[EventName]\n : unknown\n : unknown\n : never\n : never\n : never;\n\ntype EventFromSchemaMap<SchemaMap extends Record<string, unknown>> = {\n [Name in keyof SchemaMap & string]: Event<Name, SchemaMap[Name]>\n}[keyof SchemaMap & string];\n\ntype EventNameFromUnion<U> =\n U extends Event<infer Name, any>\n ? Name\n : never;\n\ntype EventUnionFromMap<SchemaMap> =\n SchemaMap extends Record<string, unknown> ? EventFromSchemaMap<SchemaMap> : never;\n\ntype EventUnionFromTransitions<Transitions> =\n TransitionEventNames<Transitions> extends infer Name\n ? Name extends string\n ? Event<Name, EventSchemaForTransitionEvent<Transitions, Name>>\n : never\n : never;\n\ntype ModelTransitionEventsFromParts<Transitions> = EventUnionFromTransitions<Transitions>;\n\ntype ModelNameFromInstance<M extends TypedModel<any, any, any, any, any, any, any, Instance>> =\n M extends TypedModel<any, any, any, any, any, any, infer TName, any> ? TName : string;\n\ntype ModelEventSchemas<M> =\n ModelStateMeta<M> extends { eventSchemas: infer E }\n ? E extends Record<string, unknown>\n ? E\n : ModelEventMap<M>\n : ModelEventMap<M>;\n\ntype EventMapKeys<M> = keyof ModelEventSchemas<M> & string;\n\ntype EventSchemaFromMapFor<\n M,\n N extends string,\n> = ModelEventMap<M> extends infer E\n ? E extends Record<string, unknown>\n ? N extends keyof E\n ? E[N]\n : never\n : never\n : never;\n\ntype EventSchemaFromTransitionsFor<\n M,\n N extends string,\n> = EventSchemaForTransitionEvent<TransitionMetaModel<M>, N>;\n\ntype EventSchemaFor<M, N extends string> =\n N extends EventMapKeys<M>\n ? [EventSchemaFromTransitionsFor<M, N>] extends [never]\n ? [EventSchemaFromMapFor<M, N>] extends [never]\n ? unknown\n : EventSchemaFromMapFor<M, N>\n : EventSchemaFromTransitionsFor<M, N>\n : unknown;\n\ntype StatePathsOfModel<M> = ModelStateMeta<M>['states'];\ntype FinalStatePathsOfModel<M> = ModelStateMeta<M>['finalStates'];\ntype TransitionMetaModel<M> = ModelStateMeta<M>['transitions'];\n\ntype EventNamesFromMap<M> = Exclude<EventMapKeys<M>, never>;\ntype EventNamesFromTransitions<M> = Exclude<TransitionMetaModel<M>, never> extends infer T\n ? T extends { events: infer E }\n ? E\n : never\n : never;\n\ntype CompletionStateCandidates<M> = FinalStatePathsOfModel<M> extends infer FinalPath\n ? FinalPath extends string\n ? ParentPath<FinalPath>\n : never\n : never;\n\nexport type StatePathsOf<M extends TypedModel<any, any, any, any, any, any, any, any>> =\n StatePathsOfModel<M>;\n\nexport type RelativeStatePathsOf<M extends TypedModel<any, any, any, any, any, any, any, any>> =\n RelativeFromAbsolute<StatePathsOf<M>>;\n\nexport type LeafStatesOf<M extends TypedModel<any, any, any, any, any, any, any, any>> =\n StatePathsOf<M> extends infer StatePath\n ? StatePath extends string\n ? HasStateDescendant<StatePath, StatePathsOf<M>> extends true\n ? never\n : StatePath\n : never\n : never;\n\ntype HasStateDescendant<StatePath extends string, Set extends string> =\n Set extends `${StatePath}/${string}` ? true : false;\n\nexport type AttributesOf<M extends TypedModel<any, any, any, any, any, any, any, any>> =\n ModelStateMeta<M> extends { attributes: infer A }\n ? A extends Record<string, unknown>\n ? A\n : {}\n : {};\n\nexport type AttributeKeysOf<M extends TypedModel<any, any, any, any, any, any, any, any>> =\n keyof AttributesOf<M> & string;\n\nexport type OperationsOf<M extends TypedModel<any, any, any, any, any, any, any, any>> =\n ModelStateMeta<M> extends { operations: infer O }\n ? O\n : ModelOperationMap<M>;\n\nexport type OperationKeysOf<M extends TypedModel<any, any, any, any, any, any, any, any>> =\n keyof OperationsOf<M> & string;\n\nexport type CallableOperationKeysOf<M extends TypedModel<any, any, any, any, any, any, any, any>> =\n OperationKeysOf<M>;\n\nexport type GuardOperationKeysOf<M extends TypedModel<any, any, any, any, any, any, any, any>> = {\n [K in OperationKeysOf<M>]:\n IsAny<ReturnType<Extract<OperationsOf<M>[K], (...args: any[]) => any>>> extends true\n ? never\n : ReturnType<Extract<OperationsOf<M>[K], (...args: any[]) => any>> extends boolean\n ? K\n : never;\n}[OperationKeysOf<M>];\n\nexport type FinalStatesOf<M extends TypedModel<any, any, any, any, any, any, any, any>> =\n FinalStatePathsOfModel<M>;\n\nexport type IsFinalState<\n M extends TypedModel<any, any, any, any, any, any, any, any>,\n Path extends string,\n> = Path extends FinalStatePathsOfModel<M> ? true : false;\n\nexport type CompletionStatePathsOf<M extends TypedModel<any, any, any, any, any, any, any, any>> =\n CompletionStateCandidates<M>;\n\nexport type DoneEventNamesOf<M extends TypedModel<any, any, any, any, any, any, any, any>> =\n CompletionStatePathsOf<M> extends infer CompletionPath\n ? CompletionPath extends string\n ? `done:${CompletionPath}`\n : never\n : never;\n\nexport type DoneEventOf<M extends TypedModel<any, any, any, any, any, any, any, any>> =\n DoneEventNamesOf<M> extends infer Name\n ? Name extends string\n ? Event<Name>\n : never\n : never;\n\nexport type CompletionEventsOf<M extends TypedModel<any, any, any, any, any, any, any, any>> = DoneEventOf<M>;\n\nexport type EventNamesFromState<\n M extends TypedModel<any, any, any, any, any, any, any, any>,\n StatePath extends string,\n> = TransitionMetaModel<M> extends infer T\n ? T extends { source: StatePath; events: infer E }\n ? E\n : never\n : never;\n\nexport type EventsForState<\n M extends TypedModel<any, any, any, any, any, any, any, any>,\n StatePath extends string,\n> = EventOfName<M, EventNamesFromState<M, StatePath>>;\n\nexport type EventNamesOf<M extends TypedModel<any, any, any, any, any, any, any, any>> =\n Exclude<EventNamesFromMap<M>, DoneEventNamesOf<M>>;\n\nexport type EventOfName<\n M extends TypedModel<any, any, any, any, any, any, any, any>,\n Name extends string,\n> = Name extends EventNamesOf<M>\n ? Event<Name, EventSchemaFor<M, Name>>\n : never;\n\nexport type DispatchEvent<Name extends string = string, Data = unknown> =\n Omit<Event<Name, Data>, 'data'> & {\n readonly data?: Data;\n };\n\nexport type DispatchEventOfName<\n M extends TypedModel<any, any, any, any, any, any, any, any>,\n Name extends string,\n> = Name extends EventNamesOf<M>\n ? EventOfName<M, Name> extends Event<Name, infer Data>\n ? DispatchEvent<Name, Data>\n : never\n : never;\n\nexport type DispatchEventsOf<\n M extends TypedModel<any, any, any, any, any, any, any, any>,\n> = DispatchEventOfName<M, EventNamesOf<M>>;\n\nexport type TargetsFromState<\n M extends TypedModel<any, any, any, any, any, any, any, any>,\n StatePath extends string,\n> = TransitionMetaModel<M> extends infer T\n ? T extends { source: StatePath; events: infer _; target: infer Target }\n ? Target extends string\n ? Target\n : never\n : never\n : never;\n\nexport type TargetsFromStateAndEvent<\n M extends TypedModel<any, any, any, any, any, any, any, any>,\n StatePath extends string,\n EventName extends string,\n> = TransitionMetaModel<M> extends infer T\n ? T extends { source: StatePath; events: infer E; target: infer Target }\n ? EventName extends E\n ? (Target extends string ? Target : never)\n : never\n : never\n : never;\n\nexport type SourcesForEvent<\n M extends TypedModel<any, any, any, any, any, any, any, any>,\n EventName extends string,\n> = TransitionMetaModel<M> extends infer T\n ? T extends { source: infer Source; events: infer E }\n ? EventName extends E\n ? Source\n : never\n : never\n : never;\n\nexport type CanTransition<\n M extends TypedModel<any, any, any, any, any, any, any, any>,\n StatePath extends string,\n TargetPath extends string,\n EventName extends string,\n> = TargetPath extends TargetsFromStateAndEvent<M, StatePath, EventName> ? true : false;\n\nexport type ChildrenOf<\n M extends TypedModel<any, any, any, any, any, any, any, any>,\n StatePath extends string,\n> = StatePathsOf<M> extends infer Candidate\n ? Candidate extends string\n ? ParentPath<Candidate> extends StatePath\n ? Candidate\n : never\n : never\n : never;\n\nexport type ParentOf<\n M extends TypedModel<any, any, any, any, any, any, any, any>,\n StatePath extends string,\n> = ParentPath<StatePath>;\n\nexport type DescendantsOf<\n M extends TypedModel<any, any, any, any, any, any, any, any>,\n StatePath extends string,\n> = StatePathsOf<M> extends infer Candidate\n ? Candidate extends `${StatePath}/${string}`\n ? Candidate\n : never\n : never;\n\nexport type AncestorsOf<\n M extends TypedModel<any, any, any, any, any, any, any, any>,\n StatePath extends string,\n> = StatePathsOf<M> extends infer Candidate\n ? Candidate extends string\n ? IsStatePathPrefix<Candidate, StatePath> extends true\n ? Candidate\n : never\n : never\n : never;\n\nexport type InitialStateOf<\n M extends TypedModel<any, any, any, any, any, any, any, any>,\n StatePath extends string,\n> = StatePath extends string ? Extract<InitialStateCandidates<M>[StatePath], string> : never;\n\ntype InitialStateCandidates<M extends TypedModel<any, any, any, any, any, any, any, any>> =\n ModelStateMeta<M>['initials'];\n\nexport type SnapshotOf<M extends TypedModel<any, any, any, any, any, any, any, any>> = {\n id: string;\n qualifiedName: string;\n state: StatePathsOf<M>;\n attributes: AttributesOf<M>;\n queueLen: number;\n events: EventSnapshotOf<M>[];\n};\n\ntype EventTargetForName<\n M extends TypedModel<any, any, any, any, any, any, any, any>,\n EventName extends string,\n> = TransitionMetaModel<M> extends infer T\n ? T extends { events: infer E; target: infer Target }\n ? EventName extends E\n ? Target\n : never\n : never\n : never;\n\nexport type EventSnapshotOf<M extends TypedModel<any, any, any, any, any, any, any, any>> = {\n [Name in EventNamesFromTransitions<M>]: {\n event: Name;\n target: EventTargetForName<M, Name>;\n guard: boolean;\n schema?: EventSchemaFor<M, Name>;\n };\n}[EventNamesFromTransitions<M>];\n\nexport type BehaviorCallbackFor<\n M extends TypedModel<any, any, any, any, any, any, any, any>,\n> = (ctx: Context, instance: M['__hsm_instance'] & Instance, event: EventOfName<M, EventNamesOf<M> & string>) => unknown;\n\ntype OperationSignature<\n M extends TypedModel<any, any, any, any, any, any, any, any>,\n K extends keyof OperationsOf<M> & string,\n> = Extract<OperationsOf<M>[K], (...args: any[]) => any>;\n\nexport type MachineInstanceFor<\n M extends TypedModel<any, any, any, any, any, any, any, Instance>,\n I extends Instance,\n> = M extends TypedModel<infer A, infer O, any, any, any, any, any, any>\n ? Omit<I, \"dispatch\" | \"state\" | \"takeSnapshot\" | \"get\" | \"set\" | \"call\"> & {\n __hsm_model: M;\n dispatch(event: DispatchEventsOf<M>): void;\n state(): StatePathsOf<M>;\n takeSnapshot(): SnapshotOf<M>;\n get<K extends keyof A & string>(name: K): A[K];\n get(name: string): unknown;\n set<K extends keyof A & string>(name: K, value: A[K]): void;\n set(name: string, value: unknown): void;\n call<K extends keyof O & string>(\n name: K,\n ...args: Parameters<Extract<O[K], (...args: any[]) => any>>\n ): ReturnType<Extract<O[K], (...args: any[]) => any>>;\n call(name: string, ...args: unknown[]): unknown;\n }\n : never;\n\ntype FlattenGroupMember<Member> =\n Member extends Group<infer Members>\n ? FlattenGroupMembers<Members>\n : [Member];\n\ntype FlattenGroupMembers<Members extends readonly unknown[]> =\n Members extends readonly [infer Head, ...infer Tail]\n ? [\n ...FlattenGroupMember<Head>,\n ...FlattenGroupMembers<Tail>,\n ]\n : [];\n\ntype GroupModelOf<Member> =\n Member extends { __hsm_model: infer Model }\n ? Model extends TypedModel<any, any, any, any, any, any, any, any>\n ? Model\n : never\n : never;\n\ntype GroupDispatchEventOf<Member> =\n GroupModelOf<Member> extends infer Model extends TypedModel<any, any, any, any, any, any, any, any>\n ? DispatchEventsOf<Model>\n : Member extends { dispatch(event: infer Event): void }\n ? Event\n : EventRecord;\n\ntype GroupAttributeKeysOf<Member> =\n GroupModelOf<Member> extends infer Model extends TypedModel<any, any, any, any, any, any, any, any>\n ? AttributeKeysOf<Model>\n : string;\n\ntype GroupAttributeValueOf<Member, Key extends string> =\n GroupModelOf<Member> extends infer Model extends TypedModel<any, any, any, any, any, any, any, any>\n ? Key extends AttributeKeysOf<Model>\n ? AttributesOf<Model>[Key]\n : never\n : unknown;\n\ntype SharedAttributeKeysOfFlattenedMembers<Members extends readonly unknown[]> =\n Members extends readonly [infer Head, ...infer Tail]\n ? GroupAttributeKeysOf<Head> & SharedAttributeKeysOfFlattenedMembers<Tail>\n : string;\n\ntype SharedAttributeKeysOfGroupMembers<Members extends readonly unknown[]> =\n SharedAttributeKeysOfFlattenedMembers<FlattenGroupMembers<Members>>;\n\ntype SharedAttributeValueOfFlattenedMembers<\n Members extends readonly unknown[],\n Key extends string,\n> =\n Members extends readonly [infer Head, ...infer Tail]\n ? GroupAttributeValueOf<Head, Key> & SharedAttributeValueOfFlattenedMembers<Tail, Key>\n : unknown;\n\ntype SharedAttributeValueOfGroupMembers<\n Members extends readonly unknown[],\n Key extends string,\n> = SharedAttributeValueOfFlattenedMembers<FlattenGroupMembers<Members>, Key>;\n\ntype FirstGroupMember<Members extends readonly unknown[]> =\n FlattenGroupMembers<Members> extends readonly [infer Head, ...infer _Tail]\n ? Head\n : never;\n\ntype GroupOperationKeysOf<Member> =\n GroupModelOf<Member> extends infer Model extends TypedModel<any, any, any, any, any, any, any, any>\n ? OperationKeysOf<Model>\n : string;\n\ntype GroupOperationSignatureOf<Member, Key extends string> =\n GroupModelOf<Member> extends infer Model extends TypedModel<any, any, any, any, any, any, any, any>\n ? Key extends OperationKeysOf<Model>\n ? OperationSignature<Model, Key>\n : (...args: any[]) => unknown\n : (...args: any[]) => unknown;\n\ntype GroupEventUnion<Members extends readonly unknown[]> =\n FlattenGroupMembers<Members>[number] extends infer Member\n ? Member extends unknown\n ? GroupDispatchEventOf<Member>\n : never\n : never;\n\ntype GroupOperationKeys<Members extends readonly unknown[]> =\n GroupOperationKeysOf<FirstGroupMember<Members>>;\n\ntype GroupOperationSignature<\n Members extends readonly unknown[],\n Key extends string,\n> = GroupOperationSignatureOf<FirstGroupMember<Members>, Key>;\n\ntype GroupSnapshotOfMember<Member> =\n GroupModelOf<Member> extends infer Model extends TypedModel<any, any, any, any, any, any, any, any>\n ? SnapshotOf<Model>\n : Member extends { takeSnapshot(): infer CurrentSnapshot }\n ? CurrentSnapshot\n : Snapshot;\n\ntype GroupSnapshotsOfFlattenedMembers<Members extends readonly unknown[]> =\n Members extends readonly [infer Head, ...infer Tail]\n ? [\n GroupSnapshotOfMember<Head>,\n ...GroupSnapshotsOfFlattenedMembers<Tail>,\n ]\n : [];\n\nexport type GroupSnapshotOf<Members extends readonly unknown[]> = Snapshot & {\n members: GroupSnapshotsOfFlattenedMembers<FlattenGroupMembers<Members>>;\n};\n\ntype BuilderWithSpec<Signature, Spec> = Signature & { readonly __hsmSpec: Spec };\n\ntype BehaviorArgument<EventType extends EventRecord = EventRecord> =\n ((ctx: Context, instance: Instance, evt: EventType) => unknown) | string;\n\nfunction attachSpec<Signature, Spec>(\n builder: Signature,\n spec: Spec,\n): BuilderWithSpec<Signature, Spec> {\n return Object.assign(builder as Signature, {\n __hsmSpec: spec,\n }) as BuilderWithSpec<Signature, Spec>;\n}\n\ntype InternalRuntime = {\n dispatch: (event: EventRecord) => void;\n state: () => string;\n context: () => ActiveContext;\n clock: ClockConfig;\n get: (name: string) => unknown;\n set: (name: string, value: unknown) => void;\n invoke: (name: string, ctx: Context, args: Array<unknown>) => unknown;\n call: (name: string, ...args: unknown[]) => unknown;\n restart: (data?: unknown) => void;\n takeSnapshot: () => Snapshot;\n onAfter: (bucket: keyof HSM[\"after\"], key: string, listener: () => void) => void;\n stop: () => void;\n readonly id: string;\n readonly model: any;\n readonly name: string;\n readonly queue: QueueShape;\n readonly processing: boolean;\n};\n\nexport type { Snapshot, Config, ClockConfig };\n\ntype InternalRuntimeMap = WeakMap<object, InternalRuntime>;\nconst runtimeByInstance: InternalRuntimeMap = new WeakMap();\n\nfunction bindRuntime(instance: object, runtime: InternalRuntime): void {\n runtimeByInstance.set(instance, runtime);\n}\n\nfunction runtimeFor(instance: unknown): InternalRuntime | undefined {\n if (!instance || typeof instance !== \"object\") {\n return undefined;\n }\n return runtimeByInstance.get(instance);\n}\n\n\n\nexport function join(...segments: string[]): string {\n\n var parts: string[] = []; // Stores the normalized path components (e.g., ['a', 'b'])\n var currentIsAbsolute = false; // Flag to track if the *resulting* path should be absolute\n\n // Loop through each input segment\n for (var i = 0; i < segments.length; i++) {\n var segment = segments[i];\n\n // Skip null, undefined, or empty segments.\n if (segment === null || segment === undefined || segment.length === 0) {\n continue;\n }\n\n // If the current segment starts with '/', it resets the path.\n // All previous parts are discarded, and the new path effectively becomes absolute from here.\n if (segment[0] === '/') {\n parts = []; // Reset parts array\n currentIsAbsolute = true;\n }\n\n var startIndex = 0;\n var currentPartEnd = 0;\n var part = '';\n // Iterate through the segment to extract components between slashes\n while (currentPartEnd < segment.length) {\n if (segment[currentPartEnd] === '/') {\n // If we found a component (i.e., not multiple slashes like // or a leading slash at start of segment)\n if (currentPartEnd > startIndex) {\n part = segment.substring(startIndex, currentPartEnd);\n\n // Process the extracted part\n if (part === '..') {\n // If absolute path and at root (parts is empty), '..' has no effect (e.g., /../ -> /)\n if (currentIsAbsolute && parts.length === 0) {\n // Do nothing\n }\n // If the last part pushed was not '..', we can pop it (e.g., /a/b/../ -> /a/)\n else if (parts.length > 0 && parts[parts.length - 1] !== '..') {\n parts.pop(); // Go up one directory\n }\n // Otherwise (parts is empty and relative, or last part was '..'), push '..'\n else {\n parts.push(part);\n }\n } else if (part !== '.') { // Ignore '.' (e.g., a/./b -> a/b)\n parts.push(part);\n }\n }\n startIndex = currentPartEnd + 1; // Move past the current separator\n }\n currentPartEnd++;\n }\n\n // Handle the last component of the segment (if any) after the loop finishes\n if (currentPartEnd > startIndex) {\n part = segment.substring(startIndex, currentPartEnd);\n // Process the last extracted part, same logic as above\n if (part === '..') {\n if (currentIsAbsolute && parts.length === 0) {\n // Do nothing\n } else if (parts.length > 0 && parts[parts.length - 1] !== '..') {\n parts.pop();\n } else {\n parts.push(part);\n }\n } else if (part !== '.') {\n parts.push(part);\n }\n }\n }\n\n // Join the processed parts into a single string\n var joinedPath = parts.join('/');\n\n // If the resulting path should be absolute, prepend '/'\n if (currentIsAbsolute) {\n joinedPath = '/' + joinedPath;\n }\n\n // Determine if the *final* path should have a trailing slash.\n // This is true if the *last original input segment* ended with a slash,\n // AND the resulting path is not just the root ('/').\n var hasTrailingSlash = false;\n if (segments.length > 0) {\n var lastInputSegment = segments[segments.length - 1];\n // Check if the last non-empty segment ends with a slash\n if (lastInputSegment && lastInputSegment.length > 0 && lastInputSegment[lastInputSegment.length - 1] === '/') {\n hasTrailingSlash = true;\n }\n }\n\n // Handle final path resolution:\n // 1. If path is empty (e.g., join('a', '..')), return '.' for relative, '/' for absolute.\n if (joinedPath.length === 0) {\n return currentIsAbsolute ? '/' : '.';\n }\n // 2. If it should have a trailing slash and isn't just '/', append it.\n else if (hasTrailingSlash && joinedPath !== '/') {\n return joinedPath + \"/\";\n }\n\n // 3. Otherwise, return the path as is.\n return joinedPath;\n}\n\nfunction slice(args: IArguments, start: number = 0): any[] {\n var result = [];\n for (var i = start; i < args.length; i++) {\n result.push(args[i]);\n }\n return result;\n}\n\n\n\nexport function dirname(path: string): string {\n // Handle null, undefined, or empty path strings\n if (path === undefined || path === null || path.length === 0) {\n return '.';\n }\n\n // Determine if the original path was absolute (starts with '/').\n // This helps distinguish e.g., '/foo' (dirname is '/') from 'foo' (dirname is '.').\n var originalPathWasAbsolute = (path[0] === '/');\n\n // --- Step 1: Trim trailing separators ---\n // Find the index of the last non-separator character.\n // This effectively removes trailing slashes, so 'a/b/c/' becomes 'a/b/c'.\n // If path is '/', '///', etc., 'i' will become -1.\n var i = path.length - 1;\n while (i >= 0 && path[i] === '/') {\n i--;\n }\n\n // 'p' is the path without trailing separators.\n // Example: If path was 'a/b/c/', p becomes 'a/b/c'.\n // Example: If path was '/', p becomes ''.\n var p = path.substring(0, i + 1);\n\n // --- Step 2: Handle cases where 'p' is empty after trimming ---\n // This means the original path was composed solely of separators (e.g., '/', '///')\n // or was initially an empty string.\n if (p.length === 0) {\n // If the original path was absolute (e.g., '/'), return '/'.\n // Otherwise (e.g., '' -> should be '.'), return '.'.\n return originalPathWasAbsolute ? '/' : '.';\n }\n\n // --- Step 3: Find the last separator in the (now trimmed) path 'p' ---\n var lastSeparatorIndex = p.lastIndexOf('/');\n\n // --- Step 4: Determine the result based on the last separator index ---\n\n // Case A: No separator found in 'p' (e.g., 'foo', or '/foo' where 'p' became 'foo').\n if (lastSeparatorIndex < 0) {\n // If the original path was absolute (e.g., '/foo'), its dirname is '/'.\n // Otherwise (e.g., 'foo'), its dirname is '.'.\n return originalPathWasAbsolute ? '/' : '.';\n }\n\n // Case B: A separator was found. Extract the part of 'p' before that separator.\n var result =\n (p.substring(0, lastSeparatorIndex));\n\n // Case C: The extracted 'result' is empty (e.g., original '/a', 'p' was '/a', lastSeparatorIndex was 0).\n // This means the last component was the only component after a root.\n if (result.length === 0) {\n // If the original path was absolute, the dirname is '/'.\n // (This correctly handles '/a' -> '/')\n return originalPathWasAbsolute ? '/' : '.';\n }\n\n // Otherwise, return the extracted directory path.\n return result;\n}\n\n\nexport function isAbsolute(path: string): boolean {\n var c = path.charAt(0);\n // Unix-style: \"/foo\"\n if (c === '/') return true;\n\n // Windows-style: \"C:\\foo\" or \"C:/foo\"\n return path.length > 2 && path.charAt(1) === ':' && path.charAt(2) === '/';\n}\n\n// #endregion\n\n// #region AbortController\n\n\n\n\n\nexport class Context {\n listeners: Array<() => void>;\n instances: Record<string, Instance>;\n done: boolean;\n\n constructor() {\n this.listeners = [];\n this.instances = {};\n this.done = false;\n }\n\n addEventListener(_type: \"done\", listener: () => void): void {\n this.listeners.push(listener);\n }\n\n removeEventListener(_type: \"done\", listener: () => void): void {\n var index = this.listeners.indexOf(listener);\n if (index !== -1) {\n this.listeners.splice(index, 1);\n }\n }\n}\n\n\n\n// #endregion\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n// Define special events\nexport const InitialEvent = {\n kind: kinds.CompletionEvent,\n qualifiedName: \"hsm_initial\",\n name: \"hsm_initial\"\n};\n\n// AnyEvent is not used in this optimized version\n// Wildcard events are not supported for performance reasons\n\n\nexport const FinalEvent = {\n name: 'hsm_final',\n kind: kinds.CompletionEvent\n};\n\n\nexport const ErrorEvent = {\n name: 'hsm_error',\n kind: kinds.ErrorEvent\n};\n\nexport const DefaultClock: Required<ClockConfig> = {\n setTimeout:\n typeof setTimeout === \"function\"\n ? ((callback: (...args: Array<unknown>) => void, timeout?: number, ...args: Array<unknown>) =>\n setTimeout(callback, timeout || 0, ...args)) as TimerFunction\n : function (_callback, _timeout, ..._args) {\n return 0 as unknown as TimerHandle;\n },\n clearTimeout: typeof clearTimeout === \"function\"\n ? ((id: TimerHandle | undefined) => {\n if (id !== undefined) {\n clearTimeout(id as unknown as number);\n }\n })\n : function () { },\n now: typeof Date !== \"undefined\" && typeof Date.now === \"function\" ? Date.now : function () {\n return 0;\n },\n};\n\n\nexport function event<Name extends string = string, Schema = unknown>(\n name: Name,\n schema?: Schema,\n): Event<Name, Schema> {\n return {\n kind: kinds.Event,\n name,\n schema,\n } as unknown as Event<Name, Schema>;\n}\n\n\nfunction apply(\n model: Model,\n stack: Array<AnyModelElement>,\n partials: ReadonlyArray<(model: Model, stack: Array<AnyModelElement>) => unknown>,\n): void {\n for (var i = 0; i < partials.length; i++) {\n var partial = partials[i];\n if (typeof partial === \"function\") {\n partial(model, stack);\n }\n }\n}\n\n\nfunction qualifyModelName(model: Model, name: string): string {\n if (isAbsolute(name)) {\n return isAncestor(model.qualifiedName, name) || model.qualifiedName === name\n ? name\n : join(model.qualifiedName, name.slice(1));\n }\n return join(model.qualifiedName, name);\n}\n\n\nfunction registerEvent(model: Model, event: EventRecord): EventRecord {\n if (!model.events) {\n model.events = {};\n }\n var existing = model.events[event.name];\n if (!existing) {\n model.events[event.name] = event;\n return event;\n }\n return existing;\n}\n\n\nfunction resolveOperation(model: Model, value: string): Expression {\n return function (ctx: Context, instance: Instance, event: EventRecord) {\n var runtime = runtimeFor(instance);\n if (!runtime) {\n return false;\n }\n var name = qualifyModelName(model, value);\n return !!runtime.invoke(name, ctx, [event]);\n };\n}\n\nfunction hasThen(value: unknown): value is Thenable {\n return (\n !!value &&\n typeof (value as Record<string, unknown>).then === 'function'\n );\n}\n\nfunction hasAddEventListener(value: unknown): value is DoneEventTarget {\n return (\n !!value &&\n typeof (value as Record<string, unknown>).addEventListener === 'function'\n );\n}\n\nfunction hasOn(value: unknown): value is OnEventTarget {\n return (\n !!value &&\n typeof (value as Record<string, unknown>).on === 'function'\n );\n}\n\nfunction toSignalLike(value: unknown): SignalLike | undefined {\n if (hasThen(value)) {\n return value as Thenable;\n }\n if (hasAddEventListener(value) || hasOn(value)) {\n return value as DoneEventTarget & OnEventTarget;\n }\n return undefined;\n}\n\nfunction coerceDuration(value: unknown): number {\n var numericValue = Number(value);\n return isNaN(numericValue) ? 0 : numericValue;\n}\n\nfunction coerceTimepoint(value: unknown): number {\n if (value instanceof Date) {\n return value.getTime();\n }\n return coerceDuration(value);\n}\n\nfunction withThenable<T>(value: T, callback: (value: any) => unknown): unknown {\n if (hasThen(value)) {\n return Promise.resolve(value).then(callback);\n }\n return callback(value);\n}\n\nfunction getState(model: Model, path: Path | undefined): State | undefined {\n if (!path) {\n return undefined;\n }\n var member = model.members[path];\n return isStateElement(member) ? member : undefined;\n}\n\nfunction getVertex(model: Model, path: Path | undefined): Vertex | undefined {\n if (!path) {\n return undefined;\n }\n var member = model.members[path];\n return isVertex(member) ? member : undefined;\n}\n\nfunction getTransition(model: Model, path: Path | undefined): Transition | undefined {\n if (!path) {\n return undefined;\n }\n var member = model.members[path];\n return isTransitionElement(member) ? member : undefined;\n}\n\nfunction getBehavior(model: Model, path: Path | undefined): Behavior | undefined {\n if (!path) {\n return undefined;\n }\n var member = model.members[path];\n return isBehaviorElement(member) ? member : undefined;\n}\n\nfunction getConstraint(model: Model, path: Path | undefined): Constraint | undefined {\n if (!path) {\n return undefined;\n }\n var member = model.members[path];\n return isConstraintElement(member) ? member : undefined;\n}\n\n\n// Helper functions\n\nexport function isAncestor(ancestor: string, descendant: string): boolean {\n // Simple cases\n if (ancestor === descendant) return false;\n if (ancestor === '/') return isAbsolute(descendant); // root is ancestor of all absolute paths\n return descendant.startsWith(ancestor + \"/\")\n}\n\n\nexport function lca(a: string, b: string): string {\n if (a === b) return dirname(a);\n if (!a) return b;\n if (!b) return a;\n if (dirname(a) === dirname(b)) return dirname(a);\n if (isAncestor(a, b)) return a;\n if (isAncestor(b, a)) return b;\n return lca(dirname(a), dirname(b));\n}\n\ntype AfterBucket = \"entered\" | \"exited\" | \"processed\" | \"dispatched\" | \"executed\";\n\nfunction isStateElement(element: AnyModelElement): element is State {\n return !!element && isKind(element.kind, kinds.State);\n}\n\nfunction isModelElement(element: AnyModelElement): element is Model {\n return !!element && isKind(element.kind, kinds.Model);\n}\n\nfunction isTransitionElement(element: AnyModelElement): element is Transition {\n return !!element && isKind(element.kind, kinds.Transition);\n}\n\nfunction isConstraintElement(element: AnyModelElement): element is Constraint {\n return !!element && isKind(element.kind, kinds.Constraint);\n}\n\nfunction isBehaviorElement(element: AnyModelElement): element is Behavior {\n return !!element && isKind(element.kind, kinds.Behavior);\n}\n\nfunction isVertex(element: AnyModelElement): element is Vertex {\n return !!element && isKind(element.kind, kinds.Vertex);\n}\n\nfunction isChoiceElement(element: AnyModelElement): element is Vertex {\n return !!element && isKind(element.kind, kinds.Choice);\n}\n\nfunction findState(stack: AnyModelElement[]): State | undefined {\n return find(stack, kinds.State) as State | undefined;\n}\n\nfunction findTransition(stack: AnyModelElement[]): Transition | undefined {\n return find(stack, kinds.Transition) as Transition | undefined;\n}\n\nfunction findModel(stack: AnyModelElement[]): Model | undefined {\n return find(stack, kinds.Model) as Model | undefined;\n}\n\nfunction findVertex(stack: AnyModelElement[]): Vertex | undefined {\n return find(stack, kinds.Vertex) as Vertex | undefined;\n}\n\n\n\nexport class Queue {\n front: EventRecord[] = [];\n back: Array<EventRecord | undefined> = [];\n backHead = 0;\n private fifo?: QueueShape;\n\n constructor(fifo?: QueueShape) {\n this.fifo = fifo;\n }\n\n len(): number | unknown {\n if (this.fifo) {\n const lenOrError = this.fifo.len();\n return typeof lenOrError === \"number\" ? this.front.length + lenOrError : lenOrError;\n }\n return this.front.length + (this.back.length - this.backHead);\n }\n\n pop(): EventRecord | undefined | unknown {\n var event: EventRecord | undefined | unknown;\n if (this.front.length > 0) {\n event = this.front.pop() as Event | undefined; // O(1) for completion events\n } else if (this.fifo) {\n event = this.fifo.pop();\n } else if (this.backHead < this.back.length) {\n event = this.back[this.backHead];\n this.back[this.backHead] = undefined; // Help GC\n this.backHead++;\n\n // Reset the array when we've consumed all events to prevent unbounded growth\n if (this.backHead === this.back.length) {\n this.back = [];\n this.backHead = 0;\n }\n }\n return event;\n }\n\n push(event: EventRecord): void | unknown {\n if (isKind(event.kind, kinds.CompletionEvent)) {\n this.front.push(event);\n } else if (this.fifo) {\n return this.fifo.push(event);\n } else {\n this.back.push(event);\n }\n }\n}\n\nfunction isQueueError(value: unknown): boolean {\n if (value === undefined || value === null) {\n return false;\n }\n if (typeof value !== \"object\") {\n return true;\n }\n return !(\"name\" in value) || !(\"kind\" in value);\n}\n\n\nfunction buildTransitionTable(model: Model): void {\n\n // For each state in the model\n for (var stateName in model.members) {\n var state = model.members[stateName];\n if (!isStateElement(state) && !isModelElement(state)) continue;\n\n // Initialize tables for this state\n model.transitionMap[stateName] =\n ({});\n\n // Collect all transitions accessible from this state by walking up hierarchy\n var transitionsByEvent: TransitionTable = {};\n var currentPath =\n(stateName);\n var depth = 0;\n\n while (currentPath) {\n var currentState = model.members[currentPath];\n if (currentState && (isStateElement(currentState) || isModelElement(currentState))) {\n var stateOrModel = currentState;\n // Process transitions at this level\n for (var i = 0; i < stateOrModel.transitions.length; i++) {\n var transitionName = stateOrModel.transitions[i];\n var transition =\n (model.members[transitionName]);\n\n if (isTransitionElement(transition) && transition.events) {\n // Process each event this transition handles\n for (var j = 0; j < transition.events.length; j++) {\n var transitionEventName = (transition.events[j]);\n\n // Skip wildcard events - not supported\n if (transitionEventName.indexOf('*') !== -1) {\n continue;\n }\n\n // Regular event - add to lookup table\n if (!transitionsByEvent[transitionEventName]) {\n transitionsByEvent[transitionEventName] = [];\n }\n transitionsByEvent[transitionEventName].push({\n transition,\n priority: depth,\n });\n }\n }\n }\n }\n\n // Move up to parent\n if (currentPath === '/' || !currentPath) break;\n var parentPath = dirname(currentPath);\n if (parentPath === currentPath) break; // Avoid infinite loop\n currentPath = parentPath;\n depth++;\n }\n\n // Sort transitions by priority (lower depth = higher priority)\n for (var eventName in transitionsByEvent) {\n var transitions = transitionsByEvent[eventName];\n transitions.sort(function (a, b) {\n return a.priority - b.priority;\n });\n\n // Extract just the transition objects\n model.transitionMap[stateName][eventName] = transitions.map(function (t) {\n return t.transition;\n });\n }\n }\n\n}\n\n\nfunction buildDeferredTable(model: Model): void {\n // For each state in the model\n for (var stateName in model.members) {\n var state =\n (model.members[stateName]);\n if (!isStateElement(state) && !isModelElement(state)) continue;\n model.deferredMap[stateName] =\n ({});\n var currentPath =\n (stateName);\n while (currentPath) {\n var currentState =\n (model.members[currentPath]);\n if (currentState && (isStateElement(currentState) || isModelElement(currentState))) {\n var stateOrModel = currentState;\n\n // Process deferred events at this level\n if (stateOrModel.deferred) {\n for (var i = 0; i < stateOrModel.deferred.length; i++) {\n var deferredEvent = stateOrModel.deferred[i];\n var transitions = model.transitionMap[stateName][deferredEvent];\n if (transitions && transitions.some(t => t.source === stateName)) {\n continue;\n }\n // Only support exact event names for O(1) lookup\n // Skip wildcard patterns for performance\n if (deferredEvent.indexOf('*') === -1) {\n model.deferredMap[stateName][deferredEvent] = true;\n }\n }\n }\n }\n\n // Move up to parent\n if (currentPath === '/' || !currentPath) break;\n var parentPath = dirname(currentPath);\n if (parentPath === currentPath) break; // Avoid infinite loop\n currentPath = parentPath;\n }\n }\n}\n\n\nvar EMPTY_PATH = {\n enter: [],\n exit: []\n};\n\n\ninterface Instance {\n _hsm: HSM | null;\n dispatch(event: EventRecord): void;\n state(): string;\n context(): Context;\n clock(): Required<ClockConfig>;\n get(name: string): unknown;\n set(name: string, value: unknown): void;\n call(name: string, ...args: unknown[]): unknown;\n restart(data?: unknown): void;\n takeSnapshot(): Snapshot;\n}\n\nclass InstanceImpl {\n dispatch(event: EventRecord): void {\n var runtime = runtimeFor(this);\n if (!runtime) {\n return;\n }\n runtime.dispatch(event);\n }\n\n state(): string {\n var runtime = runtimeFor(this);\n return runtime ? runtime.state() : \"\";\n }\n\n context(): Context {\n var runtime = runtimeFor(this);\n return runtime ? (runtime.context() as unknown as Context) : new Context();\n }\n\n clock(): Required<ClockConfig> {\n var runtime = runtimeFor(this);\n return runtime ? runtime.clock : (DefaultClock as Required<ClockConfig>);\n }\n\n get(name: string): unknown {\n var runtime = runtimeFor(this);\n return runtime ? runtime.get(name) : undefined;\n }\n\n set(name: string, value: unknown): void {\n var runtime = runtimeFor(this);\n if (runtime) {\n runtime.set(name, value);\n }\n }\n\n call(name: string, ...args: unknown[]): unknown {\n var runtime = runtimeFor(this);\n if (!runtime) {\n return undefined;\n }\n return runtime.call(name, ...args);\n }\n\n restart(data?: unknown): void {\n var runtime = runtimeFor(this);\n if (runtime) {\n runtime.restart(data);\n }\n }\n\n takeSnapshot(): Snapshot {\n var runtime = runtimeFor(this);\n return runtime\n ? runtime.takeSnapshot()\n : {\n id: \"\",\n qualifiedName: \"\",\n state: \"\",\n attributes: {},\n queueLen: 0,\n events: [],\n };\n }\n}\n\ntype InstanceConstructor = {\n new (): Instance;\n (this: Instance): void;\n prototype: Instance;\n};\n\nexport const Instance = (function (this: Instance) {\n if (this && typeof this === \"object\") {\n (this as Instance)._hsm = null;\n }\n}) as InstanceConstructor;\n\n(Instance.prototype as unknown as InstanceImpl) = InstanceImpl.prototype;\n\nclass HSM {\n static id = 0;\n\n private runtime: InternalRuntime;\n private instance: Instance;\n private ctx: Context;\n private model: Model;\n private currentState: Vertex;\n private queue: Queue;\n private active: Record<string, Active>;\n private processing: boolean;\n private id: string;\n private name: string;\n private attributes: Record<string, unknown>;\n private historyShallow: Record<string, string>;\n private historyDeep: Record<string, string>;\n private after: Record<AfterBucket, Record<string, Array<() => void>>>;\n private clock: {\n setTimeout: TimerFunction;\n clearTimeout: CancelFunction;\n now: () => number;\n };\n private startData: unknown;\n\n constructor(\n ctxOrInstance: Context | Instance,\n instanceOrModel: Model | Instance,\n maybeModelOrConfig: Model | Config | undefined,\n maybeConfig?: Config,\n ) {\n if (!(ctxOrInstance instanceof Context)) {\n maybeConfig = maybeModelOrConfig as Config | undefined;\n maybeModelOrConfig = instanceOrModel as Model;\n instanceOrModel = ctxOrInstance;\n ctxOrInstance = new Context();\n }\n\n const id = ((maybeConfig ? maybeConfig.id : \"\") || HSM.id++).toString();\n const name =\n (maybeConfig ? maybeConfig.name : \"\") || (maybeModelOrConfig as Model).qualifiedName;\n\n this.instance = instanceOrModel as Instance;\n this.ctx = ctxOrInstance as Context;\n this.model = maybeModelOrConfig as Model;\n this.currentState = this.model;\n this.queue = new Queue(maybeConfig?.queue);\n this.active = {};\n this.processing = false;\n this.id = id;\n this.name = name;\n this.attributes = {};\n this.historyShallow = {};\n this.historyDeep = {};\n this.after = {\n entered: {},\n exited: {},\n processed: {},\n dispatched: {},\n executed: {},\n };\n this.clock = {\n setTimeout: maybeConfig?.clock?.setTimeout || DefaultClock.setTimeout,\n clearTimeout: maybeConfig?.clock?.clearTimeout || DefaultClock.clearTimeout,\n now: (maybeConfig?.clock?.now) || DefaultClock.now,\n };\n this.startData = maybeConfig ? maybeConfig.data : undefined;\n\n this.runtime = {\n dispatch: (event) => {\n this.dispatch(event);\n },\n state: () => {\n return this.state();\n },\n context: () => {\n return this.ctx as unknown as ActiveContext;\n },\n clock: this.clock,\n get: (name) => {\n return this.get(name);\n },\n set: (name, value) => {\n this.set(name, value);\n },\n invoke: (name, ctx, args) => {\n return this.invoke(name, ctx, args);\n },\n call: (name, ...args) => {\n return this.call(name, ...args);\n },\n restart: (data) => {\n this.restart(data);\n },\n takeSnapshot: () => {\n return this.takeSnapshot();\n },\n onAfter: (bucket, key, listener) => {\n this.onAfter(bucket, key, listener);\n },\n stop: () => {\n this.stop();\n },\n id: this.id,\n model: this.model,\n name: this.name,\n queue: this.queue,\n processing: this.processing,\n };\n }\n\n start(): this {\n this.processing = true;\n this.ctx.done = false;\n bindRuntime(this.instance, this.runtime);\n this.resetAttributes();\n\n var initialEvent = Object.create(InitialEvent);\n initialEvent.data = this.startData;\n var newState = this.enter(this.model, initialEvent, true);\n this.ctx.instances[this.id] = this.instance;\n this.currentState = newState;\n this.process();\n return this;\n }\n\n state(): string {\n return this.currentState ? this.currentState.qualifiedName : \"\";\n }\n\n private resetAttributes(): void {\n this.attributes = {};\n if (!this.model.attributes) {\n return;\n }\n for (var qualifiedName in this.model.attributes) {\n var attribute = this.model.attributes[qualifiedName];\n if (attribute && attribute.hasDefault) {\n this.attributes[qualifiedName] = attribute.defaultValue;\n }\n }\n }\n\n private notify(bucket: AfterBucket, key: string): void {\n var listeners = this.after[bucket][key];\n if (!listeners || listeners.length === 0) {\n return;\n }\n delete this.after[bucket][key];\n for (var i = 0; i < listeners.length; i++) {\n listeners[i]();\n }\n }\n\n onAfter(bucket: AfterBucket, key: string, listener: () => void): void {\n if (!this.after[bucket][key]) {\n this.after[bucket][key] = [];\n }\n this.after[bucket][key].push(listener);\n }\n\n private get(name: string): unknown {\n return this.attributes[qualifyModelName(this.model, name)];\n }\n\n private set(name: string, value: unknown): void {\n var qualifiedName = qualifyModelName(this.model, name);\n var hadValue = Object.prototype.hasOwnProperty.call(this.attributes, qualifiedName);\n var old = this.attributes[qualifiedName];\n this.attributes[qualifiedName] = value;\n if (hadValue && old === value) {\n return;\n }\n var event = {\n kind: kinds.ChangeEvent,\n name: qualifiedName,\n source: qualifiedName,\n data: {\n name: qualifiedName,\n old: old,\n new: value,\n },\n };\n this.dispatch(event);\n }\n\n private call(name: string, ...args: unknown[]): unknown {\n var argsList = args;\n var qualifiedName = qualifyModelName(this.model, name);\n var event = {\n kind: kinds.CallEvent,\n name: qualifiedName,\n source: qualifiedName,\n data: {\n name: qualifiedName,\n args: argsList,\n },\n };\n this.dispatch(event);\n return this.invoke(name, this.ctx, argsList);\n }\n\n private invoke(name: string, ctx: Context, args: Array<unknown>): unknown {\n var qualifiedName = qualifyModelName(this.model, name);\n var operation = this.model.operations && this.model.operations[qualifiedName];\n if (!operation) {\n throw new Error('missing operation \"' + qualifiedName + '\"');\n }\n var fn = operation.implementation;\n if (typeof fn !== \"function\") {\n throw new Error('invalid operation \"' + qualifiedName + '\"');\n }\n var candidates = [\n [ctx, this.instance, ...args],\n [ctx, ...args],\n [this.instance, ...args],\n args,\n ];\n for (var i = 0; i < candidates.length; i++) {\n var candidate = candidates[i] as Array<unknown>;\n if (\n fn.length === candidate.length ||\n (fn.length <= candidate.length && fn.length >= 0)\n ) {\n return fn.apply(this.instance, candidate);\n }\n }\n return fn.apply(this.instance, args as Array<unknown>);\n }\n\n restart(data?: unknown): void {\n this.stop();\n this.startData = data;\n this.ctx.done = false;\n this.currentState = this.model;\n this.start();\n }\n\n private takeSnapshot(): Snapshot {\n var events: Snapshot[\"events\"] = [];\n var currentStateName = this.currentState\n ? this.currentState.qualifiedName\n : this.model.qualifiedName;\n var transitionsByEvent: Record<string, Array<Transition>> =\n this.model.transitionMap[currentStateName] || {};\n for (var eventName in transitionsByEvent) {\n var transitionList = transitionsByEvent[eventName];\n for (var i = 0; i < transitionList.length; i++) {\n events.push({\n event: eventName,\n target: transitionList[i].target,\n guard: !!transitionList[i].guard,\n schema: this.model.events[eventName]\n ? this.model.events[eventName].schema\n : undefined,\n });\n }\n }\n return {\n id: this.id,\n qualifiedName: this.model.qualifiedName,\n state: currentStateName,\n attributes: Object.assign({}, this.attributes),\n queueLen: this.len(),\n events: events,\n };\n }\n\n private recordHistory(stateName: string | undefined): void {\n if (!stateName) {\n return;\n }\n var child = stateName;\n var parent = dirname(child);\n while (parent && parent !== \".\" && parent !== \"/\") {\n var element = this.model.members[parent];\n if (element && isKind(element.kind, kinds.State)) {\n this.historyDeep[parent] = stateName;\n this.historyShallow[parent] = child;\n }\n if (parent === this.model.qualifiedName) {\n break;\n }\n child = parent;\n parent = dirname(parent);\n }\n }\n\n private followHistoryDefault(\n vertex: Vertex,\n event: EventRecord,\n ): Vertex | undefined {\n\t for (var i = 0; i < vertex.transitions.length; i++) {\n\t var transitionName = vertex.transitions[i];\n\t var transitionCandidate = getTransition(this.model, transitionName);\n\t if (!transitionCandidate) {\n\t continue;\n\t }\n\t if (transitionCandidate.guard) {\n\t var guard = getConstraint(this.model, transitionCandidate.guard);\n\t if (guard && !guard.expression(this.ctx, this.instance, event)) {\n\t continue;\n\t }\n\t }\n\t return this.transition(vertex, transitionCandidate, event);\n\t }\n\t return undefined;\n\t }\n\n dispatch(event: EventRecord): void {\n if (!event.kind) {\n event.kind = kinds.Event;\n }\n this.push(event);\n this.notify(\"dispatched\", event.name);\n\n if (this.processing) {\n return;\n }\n if (\n this.currentState.qualifiedName === this.model.qualifiedName &&\n this.ctx.done\n ) {\n return;\n }\n this.processing = true;\n this.process();\n }\n\n private process(): void {\n var deferred = new Array(this.len() + 1);\n var deferredCount = 0;\n var event = this.pop();\n\n while (event) {\n var currentStateName = this.currentState.qualifiedName;\n var eventName = event.name;\n var deferredLookup = this.model.deferredMap[currentStateName];\n var isDeferred = deferredLookup && deferredLookup[eventName] === true;\n\n if (isDeferred) {\n deferred[deferredCount++] = event;\n event = this.pop();\n continue;\n }\n\n var transitions = this.model.transitionMap[currentStateName][eventName];\n if (transitions && transitions.length > 0) {\n for (var i = 0; i < transitions.length; i++) {\n var transition = transitions[i];\n if (transition.guard) {\n var guard = getConstraint(this.model, transition.guard);\n if (guard) {\n try {\n var guardResult = guard.expression(\n this.ctx,\n this.instance,\n event,\n );\n if (!guardResult) {\n continue;\n }\n } catch (error) {\n this.dispatch(\n Object.create(ErrorEvent, {\n data: { value: error },\n }),\n );\n continue;\n }\n }\n }\n var nextState = this.transition(this.currentState, transition, event);\n if (nextState.qualifiedName !== this.currentState.qualifiedName) {\n this.currentState = nextState;\n for (var j = 0; j < deferredCount; j++) {\n this.push(deferred[j]);\n }\n deferredCount = 0;\n }\n break;\n }\n }\n\n this.notify(\"processed\", event.name);\n event = this.pop();\n }\n\n for (var i = 0; i < deferredCount; i++) {\n this.push(deferred[i]);\n }\n\n this.processing = false;\n this.notify(\"processed\", \"__next__\");\n }\n\n private push(event: EventRecord): void {\n const error = this.queue.push(event);\n if (error && !isKind(event.kind, kinds.ErrorEvent)) {\n this.queue.push(Object.create(ErrorEvent, { data: { value: error } }));\n }\n }\n\n private pop(): EventRecord | undefined {\n while (true) {\n const eventOrError = this.queue.pop();\n if (!isQueueError(eventOrError)) {\n return eventOrError as EventRecord | undefined;\n }\n this.queue.push(Object.create(ErrorEvent, { data: { value: eventOrError } }));\n }\n }\n\n private len(): number {\n const lenOrError = this.queue.len();\n if (typeof lenOrError === \"number\") {\n return lenOrError;\n }\n if (lenOrError) {\n this.queue.push(Object.create(ErrorEvent, { data: { value: lenOrError } }));\n }\n return 0;\n }\n\n private transition(\n current: Vertex,\n transition: Transition,\n event: EventRecord,\n ): Vertex {\n var path = transition.paths[current.qualifiedName];\n if (!path) {\n path = EMPTY_PATH;\n }\n for (var i = 0; i < path.exit.length; i++) {\n var exitingName = path.exit[i];\n var exiting = this.model.members[exitingName];\n if (exiting && isStateElement(exiting)) {\n this.exit(exiting, event);\n this.notify(\"exited\", exitingName);\n }\n }\n\n for (var i = 0; i < transition.effect.length; i++) {\n var effectName = transition.effect[i];\n var behavior = getBehavior(this.model, effectName);\n if (behavior) {\n this.execute(behavior, event);\n }\n }\n\n var enteredState: Vertex | undefined;\n for (var i = 0; i < path.enter.length; i++) {\n var enteringName = path.enter[i];\n var entering = getVertex(this.model, enteringName);\n if (entering) {\n var defaultEntry =\n entering.qualifiedName === transition.target &&\n transition.kind !== kinds.Self;\n enteredState = this.enter(entering, event, defaultEntry);\n }\n }\n\n var finalState: Vertex | undefined = enteredState || getVertex(this.model, transition.target);\n return finalState || current;\n }\n\n private enter(\n vertex: Vertex,\n event: EventRecord,\n defaultEntry: boolean,\n ): Vertex {\n if (isStateElement(vertex)) {\n var state: State = vertex;\n this.recordHistory(state.qualifiedName);\n\n for (var i = 0; i < state.entry.length; i++) {\n var entryName = state.entry[i];\n var behavior = getBehavior(this.model, entryName);\n if (behavior) {\n this.execute(behavior, event);\n }\n }\n this.notify(\"entered\", state.qualifiedName);\n\n for (var i = 0; i < state.activities.length; i++) {\n var activityName = state.activities[i];\n var behavior = getBehavior(this.model, activityName);\n if (behavior) {\n this.execute(behavior, event);\n }\n }\n\n if (defaultEntry && state.initial) {\n var initial = getVertex(this.model, state.initial);\n if (!initial) {\n return state;\n }\n var initialTransition = getTransition(\n this.model,\n initial.transitions[0],\n );\n if (initialTransition) {\n return this.transition(state, initialTransition, event);\n }\n }\n return state;\n }\n\n if (\n isKind(vertex.kind, kinds.Choice) ||\n isKind(vertex.kind, kinds.Junction)\n ) {\n var choiceVertex = vertex;\n var chosenTransition: Transition | undefined = undefined;\n for (var i = 0; i < choiceVertex.transitions.length; i++) {\n var transitionName = choiceVertex.transitions[i];\n var choiceTransition = getTransition(this.model, transitionName);\n if (!choiceTransition) {\n continue;\n }\n\n if (choiceTransition.guard) {\n var guard = getConstraint(this.model, choiceTransition.guard);\n if (guard && guard.expression(this.ctx, this.instance, event)) {\n chosenTransition = choiceTransition;\n break;\n }\n } else {\n chosenTransition = choiceTransition;\n break;\n }\n }\n\n if (chosenTransition) {\n return this.transition(choiceVertex, chosenTransition, event);\n }\n throw new Error(\"No transition found for choice vertex \" + choiceVertex.qualifiedName);\n }\n\n if (\n isKind(vertex.kind, kinds.ShallowHistory) ||\n isKind(vertex.kind, kinds.DeepHistory)\n ) {\n var parent = dirname(vertex.qualifiedName);\n var isShallowHistory = isKind(vertex.kind, kinds.ShallowHistory);\n var resolved = isShallowHistory\n ? this.historyShallow[parent]\n : this.historyDeep[parent];\n if (!resolved) {\n var historyResult = this.followHistoryDefault(vertex, event);\n if (historyResult) {\n return historyResult;\n }\n var parentState = getState(this.model, parent);\n if (parentState && parentState.initial) {\n var initialVertex = getVertex(this.model, parentState.initial);\n if (initialVertex && initialVertex.transitions.length > 0) {\n var initialTransition = getTransition(\n this.model,\n initialVertex.transitions[0],\n );\n if (initialTransition) {\n return this.transition(\n parentState,\n initialTransition,\n event,\n );\n }\n }\n }\n return vertex;\n }\n\n var enterPath: string[] = [];\n var currentPath = resolved;\n while (currentPath && currentPath !== parent && currentPath !== \".\") {\n enterPath.unshift(currentPath);\n currentPath = dirname(currentPath);\n }\n var currentVertex = vertex;\n for (var i = 0; i < enterPath.length; i++) {\n var entering = getVertex(this.model, enterPath[i]);\n if (!entering) {\n break;\n }\n currentVertex = this.enter(\n entering,\n event,\n isShallowHistory && i === enterPath.length - 1,\n );\n }\n return currentVertex;\n }\n\n if (isKind(vertex.kind, kinds.FinalState)) {\n this.notify(\"entered\", vertex.qualifiedName);\n if (dirname(vertex.qualifiedName) === this.model.qualifiedName) {\n this.stop();\n }\n return vertex;\n }\n return vertex;\n }\n\n private exit(state: State, event: EventRecord): void {\n for (var i = 0; i < state.activities.length; i++) {\n var activityName = state.activities[i];\n var activity = getBehavior(this.model, activityName);\n if (activity) {\n this.terminate(activity);\n }\n }\n\n for (var i = 0; i < state.exit.length; i++) {\n var exitName = state.exit[i];\n var behavior = getBehavior(this.model, exitName);\n if (behavior) {\n this.execute(behavior, event);\n }\n }\n }\n\n private execute(behavior: Behavior, event: EventRecord): void {\n var error = undefined;\n var operation = behavior.operation;\n var self = this;\n if (!operation && behavior.operationName) {\n operation = function (\n ctx: Context,\n instance: Instance,\n evt: EventRecord,\n ) {\n self.invoke(behavior.operationName, ctx, [evt]);\n };\n }\n if (!operation) {\n return;\n }\n if (isKind(behavior.kind, kinds.Concurrent)) {\n var controller = new Context();\n try {\n var asyncOperationPromise = Promise.resolve(\n operation(controller, this.instance, event),\n );\n this.active[behavior.qualifiedName] = {\n context: controller,\n promise: asyncOperationPromise.catch(function (error) {\n self.dispatch(\n Object.create(ErrorEvent, {\n data: { value: error },\n }),\n );\n }).then(function () {\n self.notify(\"executed\", behavior.qualifiedName);\n self.notify(\n \"executed\",\n behavior.Owner ? behavior.Owner() : dirname(behavior.qualifiedName),\n );\n }),\n };\n } catch (err) {\n error = err;\n }\n } else {\n try {\n operation(this.ctx, this.instance, event);\n this.notify(\"executed\", behavior.qualifiedName);\n this.notify(\"executed\", dirname(behavior.qualifiedName));\n } catch (err) {\n error = err;\n }\n }\n if (error) {\n this.dispatch(\n Object.create(ErrorEvent, {\n data: { value: error },\n }),\n );\n }\n }\n\n private terminate(activity: Behavior): void {\n var active = this.active[activity.qualifiedName];\n if (active) {\n active.context.done = true;\n for (var i = 0; i < active.context.listeners.length; i++) {\n active.context.listeners[i]();\n }\n delete this.active[activity.qualifiedName];\n }\n }\n\n stop(): void {\n this.processing = true;\n while (\n this.currentState &&\n this.currentState.qualifiedName !== this.model.qualifiedName\n ) {\n var currentState = getState(this.model, this.currentState.qualifiedName);\n if (!currentState) {\n break;\n }\n this.exit(currentState, FinalEvent);\n var parentState = getState(\n this.model,\n dirname(this.currentState.qualifiedName),\n );\n if (!parentState) {\n break;\n }\n this.currentState = parentState;\n }\n this.processing = false;\n this.ctx.done = true;\n for (var i = 0; i < this.ctx.listeners.length; i++) {\n this.ctx.listeners[i]();\n }\n delete this.ctx.instances[this.id];\n }\n}\n\nfunction find(\n stack: AnyModelElement[],\n ...kindsToMatch: Kind[]\n): AnyModelElement | undefined {\n for (var i = stack.length - 1; i >= 0; i--) {\n var element = stack[i];\n for (var j = 0; j < kindsToMatch.length; j++) {\n if (isKind(element.kind, kindsToMatch[j])) {\n return element;\n }\n }\n }\n return undefined;\n}\n\n\nexport function start<\n M extends TypedModel<\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n Instance\n >,\n ModelInstance extends NonNullable<M['__hsm_instance']> & Instance =\n NonNullable<M['__hsm_instance']> & Instance,\n>(\n instance: ModelInstance,\n model: M,\n maybeConfig?: Config,\n): MachineInstanceFor<M, ModelInstance>;\nexport function start<\n M extends TypedModel<\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n Instance\n >,\n ModelInstance extends NonNullable<M['__hsm_instance']> & Instance =\n NonNullable<M['__hsm_instance']> & Instance,\n>(\n ctx: Context,\n instance: ModelInstance,\n model: M,\n maybeConfig?: Config,\n): MachineInstanceFor<M, ModelInstance>;\nexport function start(\n ctxOrInstance: Context | Instance,\n instance: Model | Instance,\n model: Model | Config,\n maybeConfig?: Config,\n): MachineInstanceFor<\n TypedModel<any, any, any, any, any, any, any, Instance>,\n Instance\n> {\n var context = ctxOrInstance;\n var runtimeModel = model;\n var runtimeInstance = instance;\n if (!(context instanceof Context)) {\n maybeConfig = model as Config;\n runtimeModel = instance as Model;\n runtimeInstance = ctxOrInstance as Instance;\n context = new Context();\n }\n var sm = new HSM(\n context,\n runtimeInstance as Instance,\n runtimeModel as Model,\n maybeConfig,\n );\n sm.start();\n return runtimeInstance as MachineInstanceFor<\n TypedModel<any, any, any, any, any, any, any, Instance>,\n Instance\n >;\n}\n\n\nexport function stop(instance: Instance): void {\n var runtime = runtimeFor(instance);\n if (runtime) {\n runtime.stop();\n }\n}\n\n\n\nexport function state<\n Name extends string,\n const Parts extends readonly ModelElementSpec[] = readonly ModelElementSpec[],\n>(\n name: Name,\n ...partials: BuilderTuple<ValidateStateLocalSpecs<Parts>>\n) {\n return attachSpec(\n function (model: Model, stack: AnyModelElement[]): State {\n var namespace =\n (find(stack, kinds.State, kinds.Model));\n\n var qualifiedName = join(namespace.qualifiedName, name);\n\n var stateObj = {\n qualifiedName: qualifiedName,\n kind: kinds.State,\n transitions: [],\n entry: [],\n exit: [],\n activities: [],\n deferred: [],\n };\n\n model.members[stateObj.qualifiedName] = stateObj;\n stack.push(stateObj);\n apply(model, stack, partials);\n stack.pop();\n\n return stateObj;\n },\n {\n kind: 'state',\n name,\n parts: partials as unknown as Parts,\n } as StateSpec<Name, Parts>,\n );\n}\n\n\nexport function initial<\n const Clauses extends readonly TransitionBuilderClause[] = readonly TransitionBuilderClause[],\n>(\n ...partials: TransitionBuilderTuple<Clauses>\n): BuilderWithSpec<(model: Model, stack: AnyModelElement[]) => Transition | undefined, InitialSpec<Clauses>>;\nexport function initial<\n Name extends string,\n const Clauses extends readonly TransitionBuilderClause[] = readonly TransitionBuilderClause[],\n>(\n name: Name,\n ...partials: TransitionBuilderTuple<Clauses>\n): BuilderWithSpec<(model: Model, stack: AnyModelElement[]) => Transition | undefined, InitialSpec<Clauses>>;\nexport function initial(\n nameOrPartial: string | ((...args: unknown[]) => unknown),\n ...partials: Array<(model: Model, stack: AnyModelElement[]) => unknown>\n) {\n var name = '.initial';\n\n // If first argument is a string, it's the name of the initial pseudostate\n if (typeof nameOrPartial === 'string') {\n name = nameOrPartial;\n } else if (typeof nameOrPartial === 'function') {\n // If it's a partial function, add it to the beginning of partials\n partials = [nameOrPartial, ...partials];\n }\n\n return attachSpec(\n function (model: Model, stack: AnyModelElement[]) {\n var state = findState(stack);\n if (!state) {\n throw new Error(\"initial must be declared inside a state\");\n }\n\n var initialName = join(state.qualifiedName, name);\n var initialObj: Vertex = {\n qualifiedName: initialName,\n kind: kinds.Initial,\n transitions: [],\n };\n\n model.members[initialName] = initialObj;\n state.initial = initialName;\n\n // Add the initial event trigger\n var resolvedPartials = [source(initialObj.qualifiedName), on(InitialEvent), ...partials] as Array<\n BuilderWithSpec<\n (model: Model, stack: AnyModelElement[]) => unknown,\n TransitionBuilderClause\n >\n >;\n\n // Create the transition with all partials\n stack.push(initialObj);\n var transitionObj = transition(...resolvedPartials)(model, stack);\n stack.pop();\n\n return transitionObj;\n },\n {\n kind: 'initial',\n name,\n parts: partials,\n } as InitialSpec<any>,\n );\n}\n\nexport function transition<\n const Clauses extends readonly TransitionBuilderClause[] = readonly TransitionBuilderClause[],\n>(\n ...partials: TransitionBuilderTuple<Clauses>\n) {\n return attachSpec(\n function (\n model: Model,\n stack: AnyModelElement[],\n ): Transition {\n var vertex = findVertex(stack);\n if (!vertex) {\n throw new Error(\"transition must be declared inside a vertex\");\n }\n\n var name = 'transition_' + Object.keys(model.members).length;\n\n var transitionObj: Transition = {\n qualifiedName: join(vertex.qualifiedName, name),\n kind: kinds.Transition, // Will be updated later\n source: \".\",\n guard: '',\n effect:\n([]),\n events:\n([]),\n paths:\n ({}) as Record<Path, TransitionPath>,\n target: undefined,\n };\n\n model.members[transitionObj.qualifiedName] = transitionObj;\n stack.push(transitionObj);\n apply(model, stack, partials);\n stack.pop();\n\n // Default source to the current vertex if not explicitly set\n if (transitionObj.source == \".\" || !transitionObj.source) {\n transitionObj.source = vertex.qualifiedName;\n }\n var sourceElement = getVertex(model, transitionObj.source);\n if (!sourceElement) {\n throw new Error(\"invalid transition source \" + transitionObj.source);\n }\n sourceElement.transitions.push(transitionObj.qualifiedName);\n\n // Determine transition kind and compute paths after all elements are processed\n model.partials.push(function () {\n if (transitionObj.target === transitionObj.source) {\n transitionObj.kind = kinds.Self;\n } else if (!transitionObj.target) {\n transitionObj.kind = kinds.Internal;\n } else if (isAncestor(transitionObj.source, transitionObj.target)) {\n transitionObj.kind = kinds.Local;\n } else {\n transitionObj.kind = kinds.External;\n }\n\n // Compute paths\n var lcaPath = lca(transitionObj.source, transitionObj.target);\n var enter =\n ([]);\n if (transitionObj.kind === kinds.Self) {\n enter.push(sourceElement.qualifiedName);\n } else {\n var entering = transitionObj.target;\n while (entering && entering !== lcaPath && entering !== '/') {\n enter.unshift(entering);\n entering = dirname(entering);\n }\n }\n\n if (sourceElement.kind === kinds.Initial) {\n transitionObj.paths[dirname(sourceElement.qualifiedName)] = {\n enter: enter,\n exit: [sourceElement.qualifiedName]\n };\n return transitionObj;\n }\n\n // Add another partial to compute all other exit paths after all elements are defined\n model.partials.push(function () {\n if (transitionObj.kind === kinds.Internal) {\n // Internal transitions do not involve exiting/entering other states\n return;\n }\n for (var qualifiedName in model.members) {\n var element = getVertex(model, qualifiedName);\n if (!element) {\n continue;\n }\n if (\n transitionObj.source !== qualifiedName &&\n !isAncestor(transitionObj.source, qualifiedName)\n ) {\n continue;\n }\n var exit =\n ([]);\n var exiting =\n (element.qualifiedName);\n while (exiting !== lcaPath && exiting) {\n exit.push(exiting);\n exiting = dirname(exiting);\n if (exiting === '/') {\n break;\n }\n }\n transitionObj.paths[element.qualifiedName] = {\n enter: enter,\n exit: exit\n };\n }\n });\n });\n return transitionObj;\n },\n {\n kind: 'transition',\n parts: partials as unknown as Clauses,\n } as TransitionSpec<Clauses>\n );\n}\n\n\nexport function source<Name extends string>(\n name: Name,\n): BuilderWithSpec<(model: any, stack: any) => unknown, SourceClause<Name>> {\n return attachSpec(\n function (model: Model, stack: AnyModelElement[]) {\n var transition = findTransition(stack);\n if (!transition) {\n return undefined;\n }\n\n var resolvedName: string = name;\n if (!isAbsolute(resolvedName)) {\n var ancestor = findState(stack);\n if (ancestor) {\n resolvedName = join(ancestor.qualifiedName, resolvedName);\n }\n } else if (!isAncestor(model.qualifiedName, resolvedName)) {\n resolvedName = join(model.qualifiedName, resolvedName.slice(1));\n }\n\n transition.source = resolvedName;\n return transition;\n },\n {\n kind: 'source',\n name,\n } as SourceClause<Name>,\n );\n}\n\n\nexport function target<Name extends string>(\n name: Name,\n): BuilderWithSpec<(model: any, stack: any) => unknown, TargetClause<Name>> {\n return attachSpec(\n function (model: Model, stack: AnyModelElement[]) {\n var transition = findTransition(stack);\n if (!transition) {\n return undefined;\n }\n\n var resolvedName: string = name;\n if (!isAbsolute(resolvedName)) {\n // Look for the nearest namespace (state or model) in the stack for path resolution\n var ancestor = findState(stack) || findModel(stack);\n if (ancestor) {\n resolvedName = join(ancestor.qualifiedName, resolvedName);\n }\n } else if (!isAncestor(model.qualifiedName, resolvedName)) {\n resolvedName = join(model.qualifiedName, resolvedName.slice(1));\n }\n transition.target = resolvedName;\n return transition;\n },\n {\n kind: 'target',\n name,\n } as TargetClause<Name>,\n );\n}\n\n\nexport function on<Name extends string>(\n eventName: Name,\n): BuilderWithSpec<(model: any, stack: any) => unknown, EventClause<Name, unknown>>;\nexport function on<Name extends string, Schema = unknown>(\n eventRecord: Event<Name, Schema>,\n): BuilderWithSpec<(model: any, stack: any) => unknown, EventClause<Name, Schema>>;\nexport function on(\n eventOrRecord: string | Event<string, unknown>,\n): BuilderWithSpec<(model: any, stack: any) => unknown, EventClause<string, unknown>> {\n const event = eventOrRecord;\n return attachSpec(\n function (model: Model, stack: AnyModelElement[]) {\n var transition = findTransition(stack);\n if (!transition) {\n return undefined;\n }\n\n var eventName = typeof event === 'string' ? event : event.name;\n transition.events.push(eventName);\n if (typeof event !== 'string') {\n registerEvent(model, event);\n }\n return transition;\n },\n {\n kind: 'on',\n name: typeof eventOrRecord === 'string'\n ? eventOrRecord\n : eventOrRecord.name,\n schema:\n typeof eventOrRecord === 'string'\n ? undefined\n : eventOrRecord.schema,\n } as EventClause<string, unknown>,\n );\n}\n\n\nexport function onSet<Name extends string>(\n name: Name,\n): BuilderWithSpec<(model: any, stack: any) => unknown, OnSetClause<Name>> {\n return attachSpec(\n function (model: Model, stack: AnyModelElement[]) {\n var transition = findTransition(stack);\n if (!transition) {\n return undefined;\n }\n var qualifiedName = qualifyModelName(model, name);\n transition.events.push(qualifiedName);\n registerEvent(model, {\n kind: kinds.ChangeEvent,\n name: qualifiedName,\n source: qualifiedName\n });\n if (!model.attributes[qualifiedName]) {\n model.attributes[qualifiedName] = {\n name: name,\n qualifiedName: qualifiedName,\n hasDefault: false\n };\n }\n return transition;\n },\n {\n kind: 'onSet',\n name,\n } as OnSetClause<Name>,\n );\n}\n\n\nexport function onCall<Name extends string>(\n name: Name,\n): BuilderWithSpec<(model: any, stack: any) => unknown, OnCallClause<Name>> {\n return attachSpec(\n function (model: Model, stack: AnyModelElement[]) {\n var transition = findTransition(stack);\n if (!transition) {\n return undefined;\n }\n var qualifiedName = qualifyModelName(model, name);\n transition.events.push(qualifiedName);\n registerEvent(model, {\n kind: kinds.CallEvent,\n name: qualifiedName,\n source: qualifiedName\n });\n model.partials.push(function () {\n if (!model.operations[qualifiedName]) {\n throw new Error('missing operation \"' + qualifiedName + '\" for OnCall()');\n }\n });\n return transition;\n },\n {\n kind: 'onCall',\n name,\n } as OnCallClause<Name>,\n );\n}\n\n\nexport function when<Name extends string>(\n expr: Name,\n): BuilderWithSpec<(model: Model, stack: AnyModelElement[]) => unknown, WhenClause<Name>>;\nexport function when(\n expr:\n | string\n | ((\n ctx: Context,\n instance: Instance,\n evt: EventRecord,\n ) => unknown),\n) {\n if (typeof expr === 'string') {\n return onSet(expr);\n }\n return function (model: Model, stack: AnyModelElement[]) {\n var transition = findTransition(stack);\n if (!transition) {\n return undefined;\n }\n var eventName = join(transition.qualifiedName, 'when_' + Object.keys(model.members).length);\n var event = {\n kind: kinds.TimeEvent,\n name: eventName\n };\n transition.events.push(eventName);\n registerEvent(model, event);\n model.partials.push(function () {\n var source = getState(model, transition.source);\n if (!source) {\n return;\n }\n pushBehaviors(\n join(source.qualifiedName, 'activity_when_' + source.activities.length),\n kinds.Concurrent,\n source.activities,\n model,\n [function (ctx, instance, evt) {\n var signal = expr(ctx, instance, evt);\n var signalLike = toSignalLike(signal);\n if (!signalLike) {\n return;\n }\n return new Promise<void>(function (resolve) {\n var once = function () {\n if (!ctx.done) {\n instance.dispatch(event);\n }\n resolve();\n };\n if (hasThen(signalLike)) {\n signalLike.then(once);\n } else if (hasAddEventListener(signalLike)) {\n signalLike.addEventListener(\"done\", once);\n } else if (hasOn(signalLike)) {\n signalLike.on(\"ready\", once);\n signalLike.on(\"done\", once);\n }\n ctx.addEventListener('done', resolve);\n });\n }]\n );\n });\n };\n}\n\n\nfunction pushBehaviors(\n namePrefix: string,\n kind: Kind,\n namesList: string[],\n model: Model,\n operations: ReadonlyArray<BehaviorArgument>,\n) {\n for (var i = 0; i < operations.length; i++) {\n var operation = operations[i];\n var qualifiedName = namePrefix + '_' + namesList.length;\n var behavior = {\n qualifiedName: qualifiedName,\n kind: kind,\n operation: typeof operation === 'function' ? operation : null,\n operationName: typeof operation === 'string' ? qualifyModelName(model, operation) : undefined\n };\n model.members[qualifiedName] = behavior;\n namesList.push(qualifiedName);\n }\n}\n\n\nexport function entry<\n EventType extends EventRecord = EventRecord,\n const Operations extends readonly BehaviorArgument<EventType>[] = readonly BehaviorArgument<EventType>[],\n>(\n ...operations: Operations\n) {\n return attachSpec(\n function (model: Model, stack: AnyModelElement[]) {\n var state = findState(stack);\n if (!state) {\n return undefined;\n }\n pushBehaviors(join(state.qualifiedName, 'entry'), kinds.Sequential, state.entry, model, operations);\n return state;\n },\n {\n kind: 'entry',\n value: operations,\n } as EntrySpec<Operations>,\n );\n}\n\n\nexport function exit<\n EventType extends EventRecord = EventRecord,\n const Operations extends readonly BehaviorArgument<EventType>[] = readonly BehaviorArgument<EventType>[],\n>(\n ...operations: Operations\n) {\n return attachSpec(\n function (model: Model, stack: AnyModelElement[]) {\n var state = findState(stack);\n if (!state) {\n return undefined;\n }\n pushBehaviors(join(state.qualifiedName, 'exit'), kinds.Sequential, state.exit, model, operations);\n return state;\n },\n {\n kind: 'exit',\n value: operations,\n } as ExitSpec<Operations>,\n );\n}\n\n\nexport function activity<\n EventType extends EventRecord = EventRecord,\n const Operations extends readonly BehaviorArgument<EventType>[] = readonly BehaviorArgument<EventType>[],\n>(\n ...operations: Operations\n) {\n return attachSpec(\n function (model: Model, stack: AnyModelElement[]) {\n var state = findState(stack);\n if (!state) {\n return undefined;\n }\n pushBehaviors(join(state.qualifiedName, 'activity'), kinds.Concurrent, state.activities, model, operations);\n return state;\n },\n {\n kind: 'activity',\n value: operations,\n } as ActivitySpec<Operations>,\n );\n}\n\n\nexport function effect<const Operations extends readonly BehaviorArgument[]>(\n ...operations: Operations\n) {\n return attachSpec(\n function (model: Model, stack: AnyModelElement[]) {\n var transition = findTransition(stack);\n if (!transition) {\n return undefined;\n }\n pushBehaviors(join(transition.qualifiedName, 'effect'), kinds.Sequential, transition.effect, model, operations);\n return transition;\n },\n {\n kind: 'effect',\n value: operations,\n } as EffectClause<Operations>,\n );\n}\n\n\nexport function guard<Name extends string>(\n expression: Name,\n): BuilderWithSpec<\n (model: Model, stack: AnyModelElement[]) => unknown,\n GuardClause<Name>\n>;\nexport function guard<EventType extends EventRecord>(\n expression: (ctx: Context, instance: Instance, event: EventType) => boolean,\n): GuardBuilder<EventType>;\nexport function guard(\n expression: string | ((ctx: Context, instance: Instance, event: EventRecord) => boolean),\n) {\n return attachSpec(\n function (model: Model, stack: AnyModelElement[]) {\n var transition = findTransition(stack);\n if (!transition) {\n return undefined;\n }\n\n var name = join(transition.qualifiedName, 'guard');\n\n var constraint = {\n qualifiedName: name,\n kind: kinds.Constraint,\n expression:\n typeof expression === \"function\"\n ? (expression as Expression)\n : resolveOperation(model, expression as string),\n };\n\n model.members[name] = constraint;\n transition.guard = name;\n },\n {\n kind: 'guard',\n value: expression,\n } as GuardClause<string | ((ctx: Context, instance: Instance, event: EventRecord) => boolean)>,\n );\n}\n\n\nexport function attribute<Name extends string, Value = unknown>(\n name: Name,\n maybeDefault?: Value,\n): BuilderWithSpec<(model: Model) => unknown, AttributeSpec<Name, Value>> {\n var hasDefault = arguments.length > 1;\n return attachSpec(\n function (model: Model): unknown {\n var qualifiedName = qualifyModelName(model, name);\n model.attributes[qualifiedName] = {\n name: name,\n qualifiedName: qualifiedName,\n hasDefault: hasDefault,\n defaultValue: maybeDefault\n };\n return undefined;\n },\n {\n kind: 'attribute',\n name,\n value: maybeDefault as Value,\n } as AttributeSpec<Name, Value>,\n );\n}\n\n\nexport function operation<\n Name extends string,\n Fn extends Function,\n>(\n name: Name,\n implementation: Fn,\n): BuilderWithSpec<\n (model: Model) => unknown,\n OperationSpec<Name, Extract<Fn, (...args: any[]) => any>>\n> {\n return attachSpec(\n function (model: Model): unknown {\n var qualifiedName = qualifyModelName(model, name);\n model.operations[qualifiedName] = {\n name: name,\n qualifiedName: qualifiedName,\n implementation: implementation as Extract<Fn, (...args: any[]) => any>\n };\n return undefined;\n },\n {\n kind: 'operation',\n name,\n impl: implementation as Extract<Fn, (...args: any[]) => any>,\n } as OperationSpec<Name, Extract<Fn, (...args: any[]) => any>>,\n );\n}\n\n\nexport function after<Name extends string>(\n duration: Name,\n): BuilderWithSpec<(model: Model, stack: AnyModelElement[]) => unknown, AfterClause<Name>>;\nexport function after(\n duration: TimeExpression,\n): BuilderWithSpec<(model: Model, stack: AnyModelElement[]) => unknown, AfterClause<TimeExpression>>;\nexport function after(duration: string | TimeExpression) {\n return attachSpec(function (model: Model, stack: AnyModelElement[]) {\n var transition = findTransition(stack);\n if (!transition) {\n return undefined;\n }\n\n var eventName = join(transition.qualifiedName, 'after_' + Object.keys(model.members).length);\n\n var event = {\n name: eventName,\n kind: kinds.TimeEvent\n };\n\n transition.events.push(eventName);\n registerEvent(model, event);\n\n model.partials.push(function () {\n var source = getState(model, transition.source);\n if (!source) {\n return;\n }\n pushBehaviors(\n join(source.qualifiedName, 'activity_after_' + source.activities.length),\n kinds.Concurrent, // Activities can be concurrent/asynchronous\n source.activities,\n model,\n [\n function (ctx, instance, evt) {\n var runtime = runtimeFor(instance);\n if (!runtime) {\n return;\n }\n var delay = typeof duration === 'string'\n ? coerceDuration(instance.get(duration))\n : duration(ctx, instance, evt);\n return withThenable(delay, function (value) {\n if (ctx.done) {\n return;\n }\n var coerceDelay = coerceDuration(value);\n if (coerceDelay <= 0) {\n return;\n }\n return new Promise<void>(function (resolve) {\n var timeout = runtime.clock.setTimeout(function () {\n // Dispatch timer event asynchronously to avoid blocking the main thread\n instance.dispatch(event);\n resolve(); // Resolve the activity's promise after dispatch\n }, coerceDelay);\n\n ctx.addEventListener('done', function () {\n runtime.clock.clearTimeout(timeout);\n resolve(); // Resolve if aborted\n });\n });\n });\n }]\n );\n });\n }, {\n kind: 'after',\n value: duration,\n } as AfterClause<string | TimeExpression>);\n}\n\n\nexport function every<Name extends string>(\n duration: Name,\n): BuilderWithSpec<(model: Model, stack: AnyModelElement[]) => unknown, EveryClause<Name>>;\nexport function every(\n duration: TimeExpression,\n): BuilderWithSpec<(model: Model, stack: AnyModelElement[]) => unknown, EveryClause<TimeExpression>>;\nexport function every(duration: string | TimeExpression) {\n return attachSpec(function (model: Model, stack: AnyModelElement[]) {\n var transition = findTransition(stack);\n if (!transition) {\n return undefined;\n }\n\n var eventName = join(transition.qualifiedName, 'every_' + Object.keys(model.members).length);\n\n var event = {\n name: eventName,\n kind: kinds.TimeEvent\n };\n\n transition.events.push(eventName);\n registerEvent(model, event);\n\n model.partials.push(function () {\n var source = getState(model, transition.source);\n if (!source) {\n return;\n }\n pushBehaviors(\n join(source.qualifiedName, 'activity_every_' + source.activities.length),\n kinds.Concurrent, // Activities can be concurrent/asynchronous\n source.activities,\n model,\n [\n function (ctx, instance, evt) {\n var runtime = runtimeFor(instance);\n if (!runtime) {\n return;\n }\n var interval = typeof duration === 'string'\n ? coerceDuration(instance.get(duration))\n : duration(ctx, instance, evt);\n return withThenable(interval, function (value) {\n if (ctx.done) {\n return;\n }\n var coerceInterval = coerceDuration(value);\n if (coerceInterval <= 0) {\n return;\n }\n return new Promise<void>(function (resolve) {\n var timeout = runtime.clock.setTimeout(function tick() {\n if (ctx.done) {\n runtime.clock.clearTimeout(timeout);\n resolve();\n return;\n }\n instance.dispatch(event);\n timeout = runtime.clock.setTimeout(tick, coerceInterval);\n }, coerceInterval);\n ctx.addEventListener('done', function () {\n runtime.clock.clearTimeout(timeout);\n resolve(); // Resolve if aborted\n });\n });\n });\n }]\n );\n });\n }, {\n kind: 'every',\n value: duration,\n } as EveryClause<string | TimeExpression>);\n}\n\n\nexport function at<Name extends string>(\n timepoint: Name,\n): BuilderWithSpec<(model: Model, stack: AnyModelElement[]) => unknown, AtClause<Name>>;\nexport function at(\n timepoint:\n ((\n ctx: Context,\n instance: Instance,\n evt: EventRecord,\n ) => number | Date | Promise<number> | Promise<Date>),\n): BuilderWithSpec<(model: Model, stack: AnyModelElement[]) => unknown, AtClause<TimeExpression>>;\nexport function at(\n timepoint:\n | string\n | ((\n ctx: Context,\n instance: Instance,\n evt: EventRecord,\n ) => number | Date | Promise<number> | Promise<Date>),\n) {\n return attachSpec(function (model: Model, stack: AnyModelElement[]) {\n var transition = findTransition(stack);\n if (!transition) {\n return undefined;\n }\n var eventName = join(transition.qualifiedName, 'at_' + Object.keys(model.members).length);\n var event = {\n name: eventName,\n kind: kinds.TimeEvent\n };\n\n transition.events.push(eventName);\n registerEvent(model, event);\n\n model.partials.push(function () {\n var source = getState(model, transition.source);\n if (!source) {\n return;\n }\n pushBehaviors(\n join(source.qualifiedName, 'activity_at_' + source.activities.length),\n kinds.Concurrent,\n source.activities,\n model,\n [function (ctx, instance, evt) {\n var runtime = runtimeFor(instance);\n if (!runtime) {\n return;\n }\n var timepointValue = typeof timepoint === 'string'\n ? coerceTimepoint(instance.get(timepoint))\n : timepoint(ctx, instance, evt);\n return withThenable(timepointValue, function (value) {\n if (ctx.done) {\n return;\n }\n var deadline = coerceTimepoint(value);\n var delay = deadline - runtime.clock.now();\n if (delay <= 0) {\n instance.dispatch(event);\n return;\n }\n return new Promise<void>(function (resolve) {\n var timeout = runtime.clock.setTimeout(function () {\n instance.dispatch(event);\n resolve();\n }, delay);\n ctx.addEventListener('done', function () {\n runtime.clock.clearTimeout(timeout);\n resolve();\n });\n });\n });\n }]\n );\n });\n }, {\n kind: 'at',\n value: timepoint,\n } as AtClause<string | TimeExpression>);\n}\n\n\nexport function defer<\n const EventNames extends readonly string[],\n>(\n ...eventNames: EventNames\n): BuilderWithSpec<\n (model: Model, stack: AnyModelElement[]) => unknown,\n DeferSpec<EventNames>\n> {\n var names = eventNames;\n return attachSpec(\n function (model: Model, stack: AnyModelElement[]) {\n var state = findState(stack);\n if (!state) {\n return undefined;\n }\n\n // Add event names to the deferred array\n for (var i = 0; i < names.length; i++) {\n state.deferred.push(names[i]);\n }\n\n return state;\n },\n {\n kind: 'defer',\n eventNames,\n } as DeferSpec<EventNames>,\n );\n}\n\n\nexport function final<Name extends string>(\n name: Name,\n) {\n return attachSpec(\n function (model: Model, stack: AnyModelElement[]) {\n var parent = findState(stack);\n if (!parent) {\n return undefined;\n }\n\n var qualifiedName = join(parent.qualifiedName, name);\n\n var finalState = {\n qualifiedName: qualifiedName,\n kind: kinds.FinalState,\n entry: [],\n exit: [],\n activities: [],\n deferred: [],\n transitions: [],\n initial: undefined,\n };\n\n model.members[qualifiedName] = finalState;\n\n return finalState;\n },\n {\n kind: 'final',\n name,\n } as FinalSpec<Name>,\n );\n}\n\n\nexport function shallowHistory(\n elementOrName: string | ((...args: unknown[]) => unknown),\n) {\n var partials = slice(arguments, 1) as Array<\n (model: Model, stack: AnyModelElement[]) => unknown\n >;\n var name = '';\n if (typeof elementOrName === 'string') {\n name = elementOrName;\n } else if (typeof elementOrName === 'function') {\n partials.unshift(elementOrName);\n }\n return function (model: Model, stack: AnyModelElement[]) {\n var owner = findState(stack);\n if (!owner) {\n return undefined;\n }\n if (!name) {\n name = 'shallow_history_' + Object.keys(model.members).length;\n }\n var qualifiedName = join(owner.qualifiedName, name);\n var history = {\n qualifiedName: qualifiedName,\n kind: kinds.ShallowHistory,\n transitions: []\n };\n model.members[qualifiedName] = history;\n stack.push(history);\n apply(model, stack, partials);\n stack.pop();\n return history;\n };\n}\n\n\nexport function deepHistory(\n elementOrName: string | ((...args: unknown[]) => unknown),\n) {\n\n var partials = slice(arguments, 1) as Array<\n (model: Model, stack: AnyModelElement[]) => unknown\n >;\n var name = '';\n if (typeof elementOrName === 'string') {\n name = elementOrName;\n } else if (typeof elementOrName === 'function') {\n partials.unshift(elementOrName);\n }\n return function (model: Model, stack: AnyModelElement[]) {\n var owner = findState(stack);\n if (!owner) {\n return undefined;\n }\n if (!name) {\n name = 'deep_history_' + Object.keys(model.members).length;\n }\n var qualifiedName = join(owner.qualifiedName, name);\n var history = {\n qualifiedName: qualifiedName,\n kind: kinds.DeepHistory,\n transitions: []\n };\n model.members[qualifiedName] = history;\n stack.push(history);\n apply(model, stack, partials);\n stack.pop();\n return history;\n };\n}\n\n\nexport function choice(elementOrName: string | ((...args: unknown[]) => unknown)) {\n\n var partials = slice(arguments, 1);\n var name = '';\n\n // If first argument is a string, it's the name of the choice pseudostate\n if (typeof elementOrName === 'string') {\n name = elementOrName;\n } else if (typeof elementOrName === 'function') {\n // If it's a partial function, add it to the beginning of partials\n partials.unshift(elementOrName);\n }\n\n return function (model: Model, stack: AnyModelElement[]) {\n // Find the appropriate owner for this choice\n var owner = find(stack, kinds.Transition, kinds.State);\n if (!owner) {\n return undefined;\n }\n\n if (isTransitionElement(owner)) {\n var transition = owner;\n var source = transition.source;\n var ownerVertex = getVertex(model, source);\n if (!ownerVertex) {\n return undefined;\n }\n if (isKind(ownerVertex.kind, kinds.Pseudostate)) {\n owner = find(stack, kinds.State);\n } else if (isStateElement(ownerVertex)) {\n owner = ownerVertex;\n } else {\n return undefined;\n }\n }\n if (!owner || !isStateElement(owner)) {\n return undefined;\n }\n if (name === \"\") {\n name = \"choice_\" + Object.keys(model.members).length;\n }\n\n var qualifiedName = join(owner.qualifiedName, name);\n\n var choice = {\n qualifiedName: qualifiedName,\n kind: kinds.Choice,\n transitions: [],\n };\n model.members[qualifiedName] = choice;\n stack.push(choice);\n apply(model, stack, partials);\n stack.pop();\n\n return choice;\n };\n}\n\n\nexport function dispatchAll(ctx: Context, event: EventRecord): void {\n for (var id in ctx.instances) {\n var instance = ctx.instances[id];\n instance.dispatch(event);\n }\n}\n\n\nexport function define<\n RootName extends string,\n const Parts extends readonly ModelElementSpec[] = readonly ModelElementSpec[],\n>(\n name: RootName,\n ...partials: ValidatedModelElementBuilderTuple<Parts, Parts, Parts, `/${RootName}`>\n): TypedModelFromInfer<RootName, Parts>;\nexport function define<\n ModelSpec extends TypedModel<\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n Instance\n > = never,\n>(\n name: string,\n ...partials:\n [ModelSpec] extends [never]\n ? never\n : Array<(model: Model, stack: AnyModelElement[]) => void>\n): ModelSpec;\nexport function define(\n name: string,\n ...partials: Array<(model: Model, stack: AnyModelElement[]) => void>\n) {\n\n var model: Model = {\n qualifiedName: join('/', name),\n kind: kinds.Model,\n members: {} as Record<Path, AnyModelElement>,\n transitions: [] as string[],\n entry: [] as string[],\n exit: [] as string[],\n activities: [] as string[],\n deferred: [] as string[],\n initial: \"\",\n transitionMap: {} as Record<Path, Record<Path, any[]>>,\n deferredMap: {} as Record<Path, Record<string, boolean>>,\n events: {},\n attributes: {},\n operations: {},\n partials: [] as Array<(model: Model, stack: AnyModelElement[]) => void>,\n };\n model.members[model.qualifiedName] = model;\n registerEvent(model, InitialEvent);\n registerEvent(model, FinalEvent);\n registerEvent(model, ErrorEvent);\n var stack = [model];\n\n // Apply partials\n apply(model, stack, partials);\n\n // Process regular partials first\n while (model.partials.length > 0) {\n var currentPartials = model.partials.slice(); // Copy array\n model.partials = [];\n for (var i = 0; i < currentPartials.length; i++) {\n currentPartials[i](model, stack);\n }\n }\n\n // Build the optimized transition table\n buildTransitionTable(model);\n\n // Build the deferred event lookup table\n buildDeferredTable(model);\n\n return model;\n}\n\n\nexport function dispatchTo(\n ctx: Context,\n event: EventRecord,\n ...ids: string[]\n): void {\n if (!ids.length) {\n return dispatchAll(ctx, event);\n }\n for (var i = 0; i < ids.length; i++) {\n var instance = ctx.instances[ids[i]];\n if (instance) {\n instance.dispatch(event);\n }\n }\n}\n\nexport function get(\n ctxOrInstance: Context | Instance,\n maybeInstanceOrName: Instance | string,\n maybeName?: string,\n) {\n var instance = ctxOrInstance instanceof Context\n ? maybeInstanceOrName\n : ctxOrInstance;\n var name = ctxOrInstance instanceof Context\n ? maybeName\n : (maybeInstanceOrName as string);\n if (ctxOrInstance instanceof Context && typeof maybeName !== \"string\") {\n return undefined;\n }\n if (!name) {\n return undefined;\n }\n if (!instance) {\n return undefined;\n }\n var runtime = runtimeFor(instance);\n return runtime ? runtime.get(name) : undefined;\n}\n\nexport function set(\n ctxOrInstance: Context | Instance,\n maybeInstanceOrName: Instance | string,\n maybeNameOrValue: unknown,\n maybeValue?: unknown,\n) {\n var instance = ctxOrInstance instanceof Context\n ? maybeInstanceOrName\n : ctxOrInstance;\n var name = ctxOrInstance instanceof Context\n ? (maybeNameOrValue as string)\n : (maybeInstanceOrName as string);\n var value = ctxOrInstance instanceof Context ? maybeValue : maybeNameOrValue;\n if (!instance) {\n return;\n }\n var runtime = runtimeFor(instance);\n if (runtime) {\n runtime.set(name, value);\n }\n}\n\nexport function call(\n ctxOrInstance: Context | Instance,\n maybeInstanceOrName: Instance | string,\n maybeName: string,\n ...args: unknown[]\n) {\n var instance = ctxOrInstance instanceof Context\n ? maybeInstanceOrName\n : ctxOrInstance;\n var name = ctxOrInstance instanceof Context\n ? maybeName\n : (maybeInstanceOrName as string);\n if (!instance) {\n return undefined;\n }\n var callArgs = slice(arguments, ctxOrInstance instanceof Context ? 3 : 2);\n var runtime = runtimeFor(instance);\n if (runtime) {\n return runtime.call(name, ...callArgs);\n }\n}\n\nexport function restart(instance: Instance, data: unknown): void {\n var runtime = runtimeFor(instance);\n if (runtime) {\n runtime.restart(data);\n }\n}\n\nexport function takeSnapshot(ctxOrInstance: Context | Instance, maybeInstance?: Instance): Snapshot {\n var instance = ctxOrInstance instanceof Context ? maybeInstance : ctxOrInstance;\n var runtime = runtimeFor(instance);\n return runtime\n ? runtime.takeSnapshot()\n : {\n id: '',\n qualifiedName: '',\n state: '',\n attributes: {},\n queueLen: 0,\n events: []\n };\n}\n\nexport function afterProcess(\n ctx: Context,\n instance: Instance,\n maybeEvent?: EventRecord,\n): Promise<void> {\n return new Promise<void>(function (resolve) {\n var runtime = runtimeFor(instance);\n if (!runtime) {\n resolve();\n return;\n }\n if (maybeEvent) {\n runtime.onAfter('processed', maybeEvent.name, function () {\n resolve();\n });\n return;\n }\n if (!runtime.processing) {\n resolve();\n return;\n }\n runtime.onAfter('processed', '__next__', function () {\n resolve();\n });\n });\n}\n\nexport function afterDispatch(ctx: Context, instance: Instance, event: EventRecord): Promise<void> {\n return new Promise<void>(function (resolve) {\n var runtime = runtimeFor(instance);\n if (!runtime) {\n resolve();\n return;\n }\n runtime.onAfter('dispatched', event.name, function () {\n resolve();\n });\n });\n}\n\nexport function afterEntry(\n ctx: Context,\n instance: Instance,\n stateName: string,\n): Promise<void> {\n return new Promise<void>(function (resolve) {\n var runtime = runtimeFor(instance);\n if (!runtime) {\n resolve();\n return;\n }\n runtime.onAfter('entered', stateName, function () {\n resolve();\n });\n });\n}\n\nexport function afterExit(\n ctx: Context,\n instance: Instance,\n stateName: string,\n): Promise<void> {\n return new Promise<void>(function (resolve) {\n var runtime = runtimeFor(instance);\n if (!runtime) {\n resolve();\n return;\n }\n runtime.onAfter('exited', stateName, function () {\n resolve();\n });\n });\n}\n\nexport function afterExecuted(\n ctx: Context,\n instance: Instance,\n stateOrBehavior: string,\n): Promise<void> {\n return new Promise<void>(function (resolve) {\n var runtime = runtimeFor(instance);\n if (!runtime) {\n resolve();\n return;\n }\n runtime.onAfter('executed', stateOrBehavior, function () {\n resolve();\n });\n });\n}\n\nexport function id(instance) {\n var runtime = runtimeFor(instance);\n return runtime ? runtime.id : '';\n}\n\nexport function qualifiedName(instance) {\n var runtime = runtimeFor(instance);\n return runtime ? runtime.model.qualifiedName : '';\n}\n\nexport function name(instance) {\n var runtime = runtimeFor(instance);\n return runtime ? runtime.name : '';\n}\n\nexport function clock(instance) {\n if (instance instanceof Group) {\n return instance.clock();\n }\n var runtime = runtimeFor(instance);\n return runtime ? runtime.clock : DefaultClock;\n}\n\n\nexport class Group<Members extends readonly unknown[] = readonly Instance[]> {\n instances: Instance[] = [];\n readonly __hsm_group_members?: Members;\n\n constructor(...instances: unknown[]) {\n for (var i = 0; i < instances.length; i++) {\n var instance = instances[i];\n if (!instance) {\n continue;\n }\n if (instance instanceof Group) {\n for (var j = 0; j < instance.instances.length; j++) {\n this.instances.push(instance.instances[j]);\n }\n continue;\n }\n this.instances.push(instance as Instance);\n }\n }\n\n dispatch(event: GroupEventUnion<Members>): void {\n for (var i = 0; i < this.instances.length; i++) {\n this.instances[i].dispatch(event);\n }\n }\n\n set<K extends SharedAttributeKeysOfGroupMembers<Members>>(\n name: K,\n value: SharedAttributeValueOfGroupMembers<Members, K>,\n ): void {\n for (var i = 0; i < this.instances.length; i++) {\n this.instances[i].set(name, value);\n }\n }\n\n call<K extends GroupOperationKeys<Members>>(\n name: K,\n ...args: Parameters<GroupOperationSignature<Members, K>>\n ): ReturnType<GroupOperationSignature<Members, K>> {\n if (!this.instances.length) {\n return undefined as ReturnType<GroupOperationSignature<Members, K>>;\n }\n return this.instances[0].call(name, ...args) as ReturnType<GroupOperationSignature<Members, K>>;\n }\n\n stop(): void {\n for (var i = 0; i < this.instances.length; i++) {\n stop(this.instances[i]);\n }\n }\n\n restart(data?: unknown): void {\n for (var i = 0; i < this.instances.length; i++) {\n restart(this.instances[i], data);\n }\n }\n\n takeSnapshot(): GroupSnapshotOf<Members> {\n var members: Snapshot[] = [];\n var queueLen = 0;\n var events: Snapshot['events'] = [];\n var ids: string[] = [];\n var qualifiedNames: string[] = [];\n var states: string[] = [];\n for (var i = 0; i < this.instances.length; i++) {\n var snapshot = this.instances[i].takeSnapshot();\n members.push(snapshot);\n queueLen += snapshot.queueLen;\n ids.push(snapshot.id);\n qualifiedNames.push(snapshot.qualifiedName);\n states.push(snapshot.state);\n for (var j = 0; j < snapshot.events.length; j++) {\n events.push(snapshot.events[j]);\n }\n }\n return {\n id: ids.join(','),\n qualifiedName: qualifiedNames.join(','),\n state: states.join(' | '),\n attributes: {},\n queueLen,\n events,\n members: members as GroupSnapshotsOfFlattenedMembers<FlattenGroupMembers<Members>>,\n };\n }\n\n clock(): ClockConfig {\n return DefaultClock;\n }\n}\n\nexport function makeGroup<const Members extends readonly unknown[]>(\n ...instances: Members\n): Group<FlattenGroupMembers<Members>>;\nexport function makeGroup() {\n return new Group(...slice(arguments, 0)) as any;\n}\n\nexport const NullKind = kinds.Null;\nexport const ElementKind = kinds.Element;\nexport const PartialKind = kinds.Partial;\nexport const VertexKind = kinds.Vertex;\nexport const ConstraintKind = kinds.Constraint;\nexport const BehaviorKind = kinds.Behavior;\nexport const NamespaceKind = kinds.Namespace;\nexport const ConcurrentKind = kinds.Concurrent;\nexport const SequentialKind = kinds.Sequential;\nexport const StateMachineKind = kinds.StateMachine;\nexport const AttributeKind = kinds.Attribute;\nexport const StateKind = kinds.State;\nexport const ModelKind = kinds.Model;\nexport const TransitionKind = kinds.Transition;\nexport const InternalKind = kinds.Internal;\nexport const ExternalKind = kinds.External;\nexport const LocalKind = kinds.Local;\nexport const SelfKind = kinds.Self;\nexport const EventKind = kinds.Event;\nexport const CompletionEventKind = kinds.CompletionEvent;\nexport const ChangeEventKind = kinds.ChangeEvent;\nexport const ErrorEventKind = kinds.ErrorEvent;\nexport const TimeEventKind = kinds.TimeEvent;\nexport const CallEventKind = kinds.CallEvent;\nexport const PseudostateKind = kinds.Pseudostate;\nexport const InitialKind = kinds.Initial;\nexport const FinalStateKind = kinds.FinalState;\nexport const ChoiceKind = kinds.Choice;\nexport const JunctionKind = kinds.Junction;\nexport const DeepHistoryKind = kinds.DeepHistory;\nexport const ShallowHistoryKind = kinds.ShallowHistory;\nexport const Define = define;\nexport const State = state;\nexport const Final = final;\nexport const ShallowHistory = shallowHistory;\nexport const DeepHistory = deepHistory;\nexport const Choice = choice;\nexport const Transition = transition;\nexport const Initial = initial;\nexport const Event = event;\nexport const On = on;\nexport const OnCall = onCall;\nexport const OnSet = onSet;\nexport const When = when;\nexport const After = after;\nexport const Every = every;\nexport const At = at;\nexport const Target = target;\nexport const Source = source;\nexport const Entry = entry;\nexport const Exit = exit;\nexport const Activity = activity;\nexport const Effect = effect;\nexport const Guard = guard;\nexport const Defer = defer;\nexport const Attribute = attribute;\nexport const Operation = operation;\nexport const DispatchAll = dispatchAll;\nexport const DispatchTo = dispatchTo;\nexport const Get = get;\nexport const Set = set;\nexport const Call = call;\nexport const Restart = restart;\nexport const TakeSnapshot = takeSnapshot;\nexport const MakeGroup = makeGroup;\nexport const LCA = lca;\nexport const IsAncestor = isAncestor;\nexport const ID = id;\nexport const QualifiedName = qualifiedName;\nexport const Name = name;\nexport const Clock = clock;\nexport { apply, find };\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;AA6uDA,SAAS,WACL,SACA,MACgC;AAChC,SAAO,OAAO,OAAO,SAAsB;AAAA,IACvC,WAAW;AAAA,EACf,CAAC;AACL;AAyBA,IAAM,oBAAwC,oBAAI,QAAQ;AAE1D,SAAS,YAAY,UAAkB,SAAgC;AACnE,oBAAkB,IAAI,UAAU,OAAO;AAC3C;AAEA,SAAS,WAAW,UAAgD;AAChE,MAAI,CAAC,YAAY,OAAO,aAAa,UAAU;AAC3C,WAAO;AAAA,EACX;AACA,SAAO,kBAAkB,IAAI,QAAQ;AACzC;AAIO,SAAS,QAAQ,UAA4B;AAEhD,MAAI,QAAkB,CAAC;AACvB,MAAI,oBAAoB;AAGxB,WAAS,IAAI,GAAG,IAAI,SAAS,QAAQ,KAAK;AACtC,QAAI,UAAU,SAAS,CAAC;AAGxB,QAAI,YAAY,QAAQ,YAAY,UAAa,QAAQ,WAAW,GAAG;AACnE;AAAA,IACJ;AAIA,QAAI,QAAQ,CAAC,MAAM,KAAK;AACpB,cAAQ,CAAC;AACT,0BAAoB;AAAA,IACxB;AAEA,QAAI,aAAa;AACjB,QAAI,iBAAiB;AACrB,QAAI,OAAO;AAEX,WAAO,iBAAiB,QAAQ,QAAQ;AACpC,UAAI,QAAQ,cAAc,MAAM,KAAK;AAEjC,YAAI,iBAAiB,YAAY;AAC7B,iBAAO,QAAQ,UAAU,YAAY,cAAc;AAGnD,cAAI,SAAS,MAAM;AAEf,gBAAI,qBAAqB,MAAM,WAAW,GAAG;AAAA,YAE7C,WAES,MAAM,SAAS,KAAK,MAAM,MAAM,SAAS,CAAC,MAAM,MAAM;AAC3D,oBAAM,IAAI;AAAA,YACd,OAEK;AACD,oBAAM,KAAK,IAAI;AAAA,YACnB;AAAA,UACJ,WAAW,SAAS,KAAK;AACrB,kBAAM,KAAK,IAAI;AAAA,UACnB;AAAA,QACJ;AACA,qBAAa,iBAAiB;AAAA,MAClC;AACA;AAAA,IACJ;AAGA,QAAI,iBAAiB,YAAY;AAC7B,aAAO,QAAQ,UAAU,YAAY,cAAc;AAEnD,UAAI,SAAS,MAAM;AACf,YAAI,qBAAqB,MAAM,WAAW,GAAG;AAAA,QAE7C,WAAW,MAAM,SAAS,KAAK,MAAM,MAAM,SAAS,CAAC,MAAM,MAAM;AAC7D,gBAAM,IAAI;AAAA,QACd,OAAO;AACH,gBAAM,KAAK,IAAI;AAAA,QACnB;AAAA,MACJ,WAAW,SAAS,KAAK;AACrB,cAAM,KAAK,IAAI;AAAA,MACnB;AAAA,IACJ;AAAA,EACJ;AAGA,MAAI,aAAa,MAAM,KAAK,GAAG;AAG/B,MAAI,mBAAmB;AACnB,iBAAa,MAAM;AAAA,EACvB;AAKA,MAAI,mBAAmB;AACvB,MAAI,SAAS,SAAS,GAAG;AACrB,QAAI,mBAAmB,SAAS,SAAS,SAAS,CAAC;AAEnD,QAAI,oBAAoB,iBAAiB,SAAS,KAAK,iBAAiB,iBAAiB,SAAS,CAAC,MAAM,KAAK;AAC1G,yBAAmB;AAAA,IACvB;AAAA,EACJ;AAIA,MAAI,WAAW,WAAW,GAAG;AACzB,WAAO,oBAAoB,MAAM;AAAA,EACrC,WAES,oBAAoB,eAAe,KAAK;AAC7C,WAAO,aAAa;AAAA,EACxB;AAGA,SAAO;AACX;AAEA,SAAS,MAAM,MAAkBA,SAAgB,GAAU;AACvD,MAAI,SAAS,CAAC;AACd,WAAS,IAAIA,QAAO,IAAI,KAAK,QAAQ,KAAK;AACtC,WAAO,KAAK,KAAK,CAAC,CAAC;AAAA,EACvB;AACA,SAAO;AACX;AAIO,SAAS,QAAQ,MAAsB;AAE1C,MAAI,SAAS,UAAa,SAAS,QAAQ,KAAK,WAAW,GAAG;AAC1D,WAAO;AAAA,EACX;AAIA,MAAI,0BAA2B,KAAK,CAAC,MAAM;AAM3C,MAAI,IAAI,KAAK,SAAS;AACtB,SAAO,KAAK,KAAK,KAAK,CAAC,MAAM,KAAK;AAC9B;AAAA,EACJ;AAKA,MAAI,IAAI,KAAK,UAAU,GAAG,IAAI,CAAC;AAK/B,MAAI,EAAE,WAAW,GAAG;AAGhB,WAAO,0BAA0B,MAAM;AAAA,EAC3C;AAGA,MAAI,qBAAqB,EAAE,YAAY,GAAG;AAK1C,MAAI,qBAAqB,GAAG;AAGxB,WAAO,0BAA0B,MAAM;AAAA,EAC3C;AAGA,MAAI,SACN,EAAE,UAAU,GAAG,kBAAkB;AAI/B,MAAI,OAAO,WAAW,GAAG;AAGrB,WAAO,0BAA0B,MAAM;AAAA,EAC3C;AAGA,SAAO;AACX;AAGO,SAAS,WAAW,MAAuB;AAC9C,MAAI,IAAI,KAAK,OAAO,CAAC;AAErB,MAAI,MAAM,IAAK,QAAO;AAGtB,SAAO,KAAK,SAAS,KAAK,KAAK,OAAO,CAAC,MAAM,OAAO,KAAK,OAAO,CAAC,MAAM;AAC3E;AAUO,IAAM,UAAN,MAAc;AAAA,EACjB;AAAA,EACA;AAAA,EACA;AAAA,EAEA,cAAc;AACV,SAAK,YAAY,CAAC;AAClB,SAAK,YAAY,CAAC;AAClB,SAAK,OAAO;AAAA,EAChB;AAAA,EAEA,iBAAiB,OAAe,UAA4B;AACxD,SAAK,UAAU,KAAK,QAAQ;AAAA,EAChC;AAAA,EAEA,oBAAoB,OAAe,UAA4B;AAC3D,QAAI,QAAQ,KAAK,UAAU,QAAQ,QAAQ;AAC3C,QAAI,UAAU,IAAI;AACd,WAAK,UAAU,OAAO,OAAO,CAAC;AAAA,IAClC;AAAA,EACJ;AACJ;AAyCO,IAAM,eAAe;AAAA,EACxB,MAAM,MAAM;AAAA,EACZ,eAAe;AAAA,EACf,MAAM;AACV;AAMO,IAAM,aAAa;AAAA,EACtB,MAAM;AAAA,EACN,MAAM,MAAM;AAChB;AAGO,IAAM,aAAa;AAAA,EACtB,MAAM;AAAA,EACN,MAAM,MAAM;AAChB;AAEO,IAAM,eAAsC;AAAA,EAC/C,YACI,OAAO,eAAe,cACf,CAAC,UAA6C,YAAqB,SAChE,WAAW,UAAU,WAAW,GAAG,GAAG,IAAI,KAC9C,SAAU,WAAW,aAAa,OAAO;AACrC,WAAO;AAAA,EACX;AAAA,EACV,cAAc,OAAO,iBAAiB,cAC/B,CAACC,QAAgC;AAC9B,QAAIA,QAAO,QAAW;AAClB,mBAAaA,GAAuB;AAAA,IACxC;AAAA,EACJ,KACA,WAAY;AAAA,EAAE;AAAA,EACpB,KAAK,OAAO,SAAS,eAAe,OAAO,KAAK,QAAQ,aAAa,KAAK,MAAM,WAAY;AACxF,WAAO;AAAA,EACX;AACJ;AAGO,SAAS,MACZC,OACA,QACmB;AACnB,SAAO;AAAA,IACH,MAAM,MAAM;AAAA,IACZ,MAAAA;AAAA,IACA;AAAA,EACJ;AACJ;AAGA,SAAS,MACL,OACA,OACA,UACI;AACJ,WAAS,IAAI,GAAG,IAAI,SAAS,QAAQ,KAAK;AACtC,QAAI,UAAU,SAAS,CAAC;AACxB,QAAI,OAAO,YAAY,YAAY;AAC/B,cAAQ,OAAO,KAAK;AAAA,IACxB;AAAA,EACJ;AACJ;AAGA,SAAS,iBAAiB,OAAcA,OAAsB;AAC1D,MAAI,WAAWA,KAAI,GAAG;AAClB,WAAO,WAAW,MAAM,eAAeA,KAAI,KAAK,MAAM,kBAAkBA,QAClEA,QACA,KAAK,MAAM,eAAeA,MAAK,MAAM,CAAC,CAAC;AAAA,EACjD;AACA,SAAO,KAAK,MAAM,eAAeA,KAAI;AACzC;AAGA,SAAS,cAAc,OAAcC,QAAiC;AAClE,MAAI,CAAC,MAAM,QAAQ;AACf,UAAM,SAAS,CAAC;AAAA,EACpB;AACA,MAAI,WAAW,MAAM,OAAOA,OAAM,IAAI;AACtC,MAAI,CAAC,UAAU;AACX,UAAM,OAAOA,OAAM,IAAI,IAAIA;AAC3B,WAAOA;AAAA,EACX;AACA,SAAO;AACX;AAGA,SAAS,iBAAiB,OAAc,OAA2B;AAC/D,SAAO,SAAU,KAAc,UAAoBA,QAAoB;AACnE,QAAI,UAAU,WAAW,QAAQ;AACjC,QAAI,CAAC,SAAS;AACV,aAAO;AAAA,IACX;AACA,QAAID,QAAO,iBAAiB,OAAO,KAAK;AACxC,WAAO,CAAC,CAAC,QAAQ,OAAOA,OAAM,KAAK,CAACC,MAAK,CAAC;AAAA,EAC9C;AACJ;AAEA,SAAS,QAAQ,OAAmC;AAChD,SACI,CAAC,CAAC,SACF,OAAQ,MAAkC,SAAS;AAE3D;AAEA,SAAS,oBAAoB,OAA0C;AACnE,SACI,CAAC,CAAC,SACF,OAAQ,MAAkC,qBAAqB;AAEvE;AAEA,SAAS,MAAM,OAAwC;AACnD,SACI,CAAC,CAAC,SACF,OAAQ,MAAkC,OAAO;AAEzD;AAEA,SAAS,aAAa,OAAwC;AAC1D,MAAI,QAAQ,KAAK,GAAG;AAChB,WAAO;AAAA,EACX;AACA,MAAI,oBAAoB,KAAK,KAAK,MAAM,KAAK,GAAG;AAC5C,WAAO;AAAA,EACX;AACA,SAAO;AACX;AAEA,SAAS,eAAe,OAAwB;AAC5C,MAAI,eAAe,OAAO,KAAK;AAC/B,SAAO,MAAM,YAAY,IAAI,IAAI;AACrC;AAEA,SAAS,gBAAgB,OAAwB;AAC7C,MAAI,iBAAiB,MAAM;AACvB,WAAO,MAAM,QAAQ;AAAA,EACzB;AACA,SAAO,eAAe,KAAK;AAC/B;AAEA,SAAS,aAAgB,OAAU,UAA4C;AAC3E,MAAI,QAAQ,KAAK,GAAG;AAChB,WAAO,QAAQ,QAAQ,KAAK,EAAE,KAAK,QAAQ;AAAA,EAC/C;AACA,SAAO,SAAS,KAAK;AACzB;AAEA,SAAS,SAAS,OAAc,MAA2C;AACvE,MAAI,CAAC,MAAM;AACP,WAAO;AAAA,EACX;AACA,MAAI,SAAS,MAAM,QAAQ,IAAI;AAC/B,SAAO,eAAe,MAAM,IAAI,SAAS;AAC7C;AAEA,SAAS,UAAU,OAAc,MAA4C;AACzE,MAAI,CAAC,MAAM;AACP,WAAO;AAAA,EACX;AACA,MAAI,SAAS,MAAM,QAAQ,IAAI;AAC/B,SAAO,SAAS,MAAM,IAAI,SAAS;AACvC;AAEA,SAAS,cAAc,OAAc,MAAgD;AACjF,MAAI,CAAC,MAAM;AACP,WAAO;AAAA,EACX;AACA,MAAI,SAAS,MAAM,QAAQ,IAAI;AAC/B,SAAO,oBAAoB,MAAM,IAAI,SAAS;AAClD;AAEA,SAAS,YAAY,OAAc,MAA8C;AAC7E,MAAI,CAAC,MAAM;AACP,WAAO;AAAA,EACX;AACA,MAAI,SAAS,MAAM,QAAQ,IAAI;AAC/B,SAAO,kBAAkB,MAAM,IAAI,SAAS;AAChD;AAEA,SAAS,cAAc,OAAc,MAAgD;AACjF,MAAI,CAAC,MAAM;AACP,WAAO;AAAA,EACX;AACA,MAAI,SAAS,MAAM,QAAQ,IAAI;AAC/B,SAAO,oBAAoB,MAAM,IAAI,SAAS;AAClD;AAKO,SAAS,WAAW,UAAkB,YAA6B;AAEtE,MAAI,aAAa,WAAY,QAAO;AACpC,MAAI,aAAa,IAAK,QAAO,WAAW,UAAU;AAClD,SAAO,WAAW,WAAW,WAAW,GAAG;AAC/C;AAGO,SAAS,IAAI,GAAW,GAAmB;AAC9C,MAAI,MAAM,EAAG,QAAO,QAAQ,CAAC;AAC7B,MAAI,CAAC,EAAG,QAAO;AACf,MAAI,CAAC,EAAG,QAAO;AACf,MAAI,QAAQ,CAAC,MAAM,QAAQ,CAAC,EAAG,QAAO,QAAQ,CAAC;AAC/C,MAAI,WAAW,GAAG,CAAC,EAAG,QAAO;AAC7B,MAAI,WAAW,GAAG,CAAC,EAAG,QAAO;AAC7B,SAAO,IAAI,QAAQ,CAAC,GAAG,QAAQ,CAAC,CAAC;AACrC;AAIA,SAAS,eAAe,SAA4C;AAChE,SAAO,CAAC,CAAC,WAAW,OAAO,QAAQ,MAAM,MAAM,KAAK;AACxD;AAEA,SAAS,eAAe,SAA4C;AAChE,SAAO,CAAC,CAAC,WAAW,OAAO,QAAQ,MAAM,MAAM,KAAK;AACxD;AAEA,SAAS,oBAAoB,SAAiD;AAC1E,SAAO,CAAC,CAAC,WAAW,OAAO,QAAQ,MAAM,MAAM,UAAU;AAC7D;AAEA,SAAS,oBAAoB,SAAiD;AAC1E,SAAO,CAAC,CAAC,WAAW,OAAO,QAAQ,MAAM,MAAM,UAAU;AAC7D;AAEA,SAAS,kBAAkB,SAA+C;AACtE,SAAO,CAAC,CAAC,WAAW,OAAO,QAAQ,MAAM,MAAM,QAAQ;AAC3D;AAEA,SAAS,SAAS,SAA6C;AAC3D,SAAO,CAAC,CAAC,WAAW,OAAO,QAAQ,MAAM,MAAM,MAAM;AACzD;AAMA,SAAS,UAAU,OAA6C;AAC5D,SAAO,KAAK,OAAO,MAAM,KAAK;AAClC;AAEA,SAAS,eAAe,OAAkD;AACtE,SAAO,KAAK,OAAO,MAAM,UAAU;AACvC;AAEA,SAAS,UAAU,OAA6C;AAC5D,SAAO,KAAK,OAAO,MAAM,KAAK;AAClC;AAEA,SAAS,WAAW,OAA8C;AAC9D,SAAO,KAAK,OAAO,MAAM,MAAM;AACnC;AAIO,IAAM,QAAN,MAAY;AAAA,EACf,QAAuB,CAAC;AAAA,EACxB,OAAuC,CAAC;AAAA,EACxC,WAAW;AAAA,EACH;AAAA,EAER,YAAY,MAAmB;AAC3B,SAAK,OAAO;AAAA,EAChB;AAAA,EAEA,MAAwB;AACpB,QAAI,KAAK,MAAM;AACX,YAAM,aAAa,KAAK,KAAK,IAAI;AACjC,aAAO,OAAO,eAAe,WAAW,KAAK,MAAM,SAAS,aAAa;AAAA,IAC7E;AACA,WAAO,KAAK,MAAM,UAAU,KAAK,KAAK,SAAS,KAAK;AAAA,EACxD;AAAA,EAEA,MAAyC;AACrC,QAAIC;AACJ,QAAI,KAAK,MAAM,SAAS,GAAG;AACvB,MAAAA,SAAQ,KAAK,MAAM,IAAI;AAAA,IAC3B,WAAW,KAAK,MAAM;AAClB,MAAAA,SAAQ,KAAK,KAAK,IAAI;AAAA,IAC1B,WAAW,KAAK,WAAW,KAAK,KAAK,QAAQ;AACzC,MAAAA,SAAQ,KAAK,KAAK,KAAK,QAAQ;AAC/B,WAAK,KAAK,KAAK,QAAQ,IAAI;AAC3B,WAAK;AAGL,UAAI,KAAK,aAAa,KAAK,KAAK,QAAQ;AACpC,aAAK,OAAO,CAAC;AACb,aAAK,WAAW;AAAA,MACpB;AAAA,IACJ;AACA,WAAOA;AAAA,EACX;AAAA,EAEA,KAAKA,QAAoC;AACrC,QAAI,OAAOA,OAAM,MAAM,MAAM,eAAe,GAAG;AAC3C,WAAK,MAAM,KAAKA,MAAK;AAAA,IACzB,WAAW,KAAK,MAAM;AAClB,aAAO,KAAK,KAAK,KAAKA,MAAK;AAAA,IAC/B,OAAO;AACH,WAAK,KAAK,KAAKA,MAAK;AAAA,IACxB;AAAA,EACJ;AACJ;AAEA,SAAS,aAAa,OAAyB;AAC3C,MAAI,UAAU,UAAa,UAAU,MAAM;AACvC,WAAO;AAAA,EACX;AACA,MAAI,OAAO,UAAU,UAAU;AAC3B,WAAO;AAAA,EACX;AACA,SAAO,EAAE,UAAU,UAAU,EAAE,UAAU;AAC7C;AAGA,SAAS,qBAAqB,OAAoB;AAG9C,WAAS,aAAa,MAAM,SAAS;AACjC,QAAIC,SAAQ,MAAM,QAAQ,SAAS;AACnC,QAAI,CAAC,eAAeA,MAAK,KAAK,CAAC,eAAeA,MAAK,EAAG;AAGtD,UAAM,cAAc,SAAS,IACnC,CAAC;AAGK,QAAI,qBAAsC,CAAC;AAC3C,QAAI,cACX;AACO,QAAI,QAAQ;AAEZ,WAAO,aAAa;AAChB,UAAI,eAAe,MAAM,QAAQ,WAAW;AAC5C,UAAI,iBAAiB,eAAe,YAAY,KAAK,eAAe,YAAY,IAAI;AAChF,YAAI,eAAe;AAEnB,iBAAS,IAAI,GAAG,IAAI,aAAa,YAAY,QAAQ,KAAK;AACtD,cAAI,iBAAiB,aAAa,YAAY,CAAC;AAC/C,cAAIC,cACtB,MAAM,QAAQ,cAAc;AAEV,cAAI,oBAAoBA,WAAU,KAAKA,YAAW,QAAQ;AAEtD,qBAAS,IAAI,GAAG,IAAIA,YAAW,OAAO,QAAQ,KAAK;AAC/C,kBAAI,sBAAuBA,YAAW,OAAO,CAAC;AAG9C,kBAAI,oBAAoB,QAAQ,GAAG,MAAM,IAAI;AACzC;AAAA,cACJ;AAGJ,kBAAI,CAAC,mBAAmB,mBAAmB,GAAG;AACtC,mCAAmB,mBAAmB,IAAI,CAAC;AAAA,cAC/C;AACA,iCAAmB,mBAAmB,EAAE,KAAK;AAAA,gBACzC,YAAAA;AAAA,gBACA,UAAU;AAAA,cACd,CAAC;AAAA,YACL;AAAA,UACJ;AAAA,QACJ;AAAA,MACJ;AAGA,UAAI,gBAAgB,OAAO,CAAC,YAAa;AACzC,UAAI,aAAa,QAAQ,WAAW;AACpC,UAAI,eAAe,YAAa;AAChC,oBAAc;AACd;AAAA,IACJ;AAGA,aAAS,aAAa,oBAAoB;AACtC,UAAI,cAAc,mBAAmB,SAAS;AAC9C,kBAAY,KAAK,SAAU,GAAG,GAAG;AAC7B,eAAO,EAAE,WAAW,EAAE;AAAA,MAC1B,CAAC;AAGD,YAAM,cAAc,SAAS,EAAE,SAAS,IAAI,YAAY,IAAI,SAAU,GAAG;AACrE,eAAO,EAAE;AAAA,MACb,CAAC;AAAA,IACL;AAAA,EACJ;AAEJ;AAGA,SAAS,mBAAmB,OAAoB;AAE5C,WAAS,aAAa,MAAM,SAAS;AACjC,QAAID,SACV,MAAM,QAAQ,SAAS;AACjB,QAAI,CAAC,eAAeA,MAAK,KAAK,CAAC,eAAeA,MAAK,EAAG;AACtD,UAAM,YAAY,SAAS,IACjC,CAAC;AACK,QAAI,cACV;AACM,WAAO,aAAa;AAChB,UAAI,eACd,MAAM,QAAQ,WAAW;AACf,UAAI,iBAAiB,eAAe,YAAY,KAAK,eAAe,YAAY,IAAI;AAChF,YAAI,eAAe;AAGnB,YAAI,aAAa,UAAU;AACvB,mBAAS,IAAI,GAAG,IAAI,aAAa,SAAS,QAAQ,KAAK;AACnD,gBAAI,gBAAgB,aAAa,SAAS,CAAC;AAC3C,gBAAI,cAAc,MAAM,cAAc,SAAS,EAAE,aAAa;AAC9D,gBAAI,eAAe,YAAY,KAAK,OAAK,EAAE,WAAW,SAAS,GAAG;AAC9D;AAAA,YACJ;AAGA,gBAAI,cAAc,QAAQ,GAAG,MAAM,IAAI;AACnC,oBAAM,YAAY,SAAS,EAAE,aAAa,IAAI;AAAA,YAClD;AAAA,UACJ;AAAA,QACJ;AAAA,MACJ;AAGA,UAAI,gBAAgB,OAAO,CAAC,YAAa;AACzC,UAAI,aAAa,QAAQ,WAAW;AACpC,UAAI,eAAe,YAAa;AAChC,oBAAc;AAAA,IAClB;AAAA,EACJ;AACJ;AAGA,IAAI,aAAa;AAAA,EACb,OAAO,CAAC;AAAA,EACR,MAAM,CAAC;AACX;AAgBA,IAAM,eAAN,MAAmB;AAAA,EACf,SAASD,QAA0B;AAC/B,QAAI,UAAU,WAAW,IAAI;AAC7B,QAAI,CAAC,SAAS;AACV;AAAA,IACJ;AACA,YAAQ,SAASA,MAAK;AAAA,EAC1B;AAAA,EAEA,QAAgB;AACZ,QAAI,UAAU,WAAW,IAAI;AAC7B,WAAO,UAAU,QAAQ,MAAM,IAAI;AAAA,EACvC;AAAA,EAEA,UAAmB;AACf,QAAI,UAAU,WAAW,IAAI;AAC7B,WAAO,UAAW,QAAQ,QAAQ,IAA2B,IAAI,QAAQ;AAAA,EAC7E;AAAA,EAEA,QAA+B;AAC3B,QAAI,UAAU,WAAW,IAAI;AAC7B,WAAO,UAAU,QAAQ,QAAS;AAAA,EACtC;AAAA,EAEA,IAAIG,OAAuB;AACvB,QAAI,UAAU,WAAW,IAAI;AAC7B,WAAO,UAAU,QAAQ,IAAIA,KAAI,IAAI;AAAA,EACzC;AAAA,EAEA,IAAIA,OAAc,OAAsB;AACpC,QAAI,UAAU,WAAW,IAAI;AAC7B,QAAI,SAAS;AACT,cAAQ,IAAIA,OAAM,KAAK;AAAA,IAC3B;AAAA,EACJ;AAAA,EAEA,KAAKA,UAAiB,MAA0B;AAC5C,QAAI,UAAU,WAAW,IAAI;AAC7B,QAAI,CAAC,SAAS;AACV,aAAO;AAAA,IACX;AACA,WAAO,QAAQ,KAAKA,OAAM,GAAG,IAAI;AAAA,EACrC;AAAA,EAEA,QAAQ,MAAsB;AAC1B,QAAI,UAAU,WAAW,IAAI;AAC7B,QAAI,SAAS;AACT,cAAQ,QAAQ,IAAI;AAAA,IACxB;AAAA,EACJ;AAAA,EAEA,eAAyB;AACrB,QAAI,UAAU,WAAW,IAAI;AAC7B,WAAO,UACD,QAAQ,aAAa,IACrB;AAAA,MACI,IAAI;AAAA,MACJ,eAAe;AAAA,MACf,OAAO;AAAA,MACP,YAAY,CAAC;AAAA,MACb,UAAU;AAAA,MACV,QAAQ,CAAC;AAAA,IACb;AAAA,EACV;AACJ;AAQO,IAAM,YAAY,WAA0B;AAC/C,MAAI,QAAQ,OAAO,SAAS,UAAU;AAClC,IAAC,KAAkB,OAAO;AAAA,EAC9B;AACJ;AAEC,SAAS,YAAwC,aAAa;AAE/D,IAAM,MAAN,MAAM,KAAI;AAAA,EACN,OAAO,KAAK;AAAA,EAEJ;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EAKA;AAAA,EAER,YACI,eACA,iBACA,oBACA,aACF;AACE,QAAI,EAAE,yBAAyB,UAAU;AACrC,oBAAc;AACd,2BAAqB;AACrB,wBAAkB;AAClB,sBAAgB,IAAI,QAAQ;AAAA,IAChC;AAEA,UAAMC,QAAO,cAAc,YAAY,KAAK,OAAO,KAAI,MAAM,SAAS;AACtE,UAAMD,SACD,cAAc,YAAY,OAAO,OAAQ,mBAA6B;AAE3E,SAAK,WAAW;AAChB,SAAK,MAAM;AACX,SAAK,QAAQ;AACb,SAAK,eAAe,KAAK;AACzB,SAAK,QAAQ,IAAI,MAAM,aAAa,KAAK;AACzC,SAAK,SAAS,CAAC;AACf,SAAK,aAAa;AAClB,SAAK,KAAKC;AACV,SAAK,OAAOD;AACZ,SAAK,aAAa,CAAC;AACnB,SAAK,iBAAiB,CAAC;AACvB,SAAK,cAAc,CAAC;AACpB,SAAK,QAAQ;AAAA,MACT,SAAS,CAAC;AAAA,MACV,QAAQ,CAAC;AAAA,MACT,WAAW,CAAC;AAAA,MACZ,YAAY,CAAC;AAAA,MACb,UAAU,CAAC;AAAA,IACf;AACA,SAAK,QAAQ;AAAA,MACT,YAAY,aAAa,OAAO,cAAc,aAAa;AAAA,MAC3D,cAAc,aAAa,OAAO,gBAAgB,aAAa;AAAA,MAC/D,KAAM,aAAa,OAAO,OAAQ,aAAa;AAAA,IACnD;AACA,SAAK,YAAY,cAAc,YAAY,OAAO;AAElD,SAAK,UAAU;AAAA,MACX,UAAU,CAACH,WAAU;AACjB,aAAK,SAASA,MAAK;AAAA,MACvB;AAAA,MACA,OAAO,MAAM;AACT,eAAO,KAAK,MAAM;AAAA,MACtB;AAAA,MACA,SAAS,MAAM;AACX,eAAO,KAAK;AAAA,MAChB;AAAA,MACA,OAAO,KAAK;AAAA,MACZ,KAAK,CAACG,UAAS;AACX,eAAO,KAAK,IAAIA,KAAI;AAAA,MACxB;AAAA,MACA,KAAK,CAACA,OAAM,UAAU;AAClB,aAAK,IAAIA,OAAM,KAAK;AAAA,MACxB;AAAA,MACA,QAAQ,CAACA,OAAM,KAAK,SAAS;AACzB,eAAO,KAAK,OAAOA,OAAM,KAAK,IAAI;AAAA,MACtC;AAAA,MACA,MAAM,CAACA,UAAS,SAAS;AACrB,eAAO,KAAK,KAAKA,OAAM,GAAG,IAAI;AAAA,MAClC;AAAA,MACA,SAAS,CAAC,SAAS;AACf,aAAK,QAAQ,IAAI;AAAA,MACrB;AAAA,MACA,cAAc,MAAM;AAChB,eAAO,KAAK,aAAa;AAAA,MAC7B;AAAA,MACA,SAAS,CAAC,QAAQ,KAAK,aAAa;AAChC,aAAK,QAAQ,QAAQ,KAAK,QAAQ;AAAA,MACtC;AAAA,MACA,MAAM,MAAM;AACR,aAAK,KAAK;AAAA,MACd;AAAA,MACA,IAAI,KAAK;AAAA,MACT,OAAO,KAAK;AAAA,MACZ,MAAM,KAAK;AAAA,MACX,OAAO,KAAK;AAAA,MACZ,YAAY,KAAK;AAAA,IACrB;AAAA,EACJ;AAAA,EAEA,QAAc;AACV,SAAK,aAAa;AAClB,SAAK,IAAI,OAAO;AAChB,gBAAY,KAAK,UAAU,KAAK,OAAO;AACvC,SAAK,gBAAgB;AAErB,QAAI,eAAe,OAAO,OAAO,YAAY;AAC7C,iBAAa,OAAO,KAAK;AACzB,QAAI,WAAW,KAAK,MAAM,KAAK,OAAO,cAAc,IAAI;AACxD,SAAK,IAAI,UAAU,KAAK,EAAE,IAAI,KAAK;AACnC,SAAK,eAAe;AACpB,SAAK,QAAQ;AACb,WAAO;AAAA,EACX;AAAA,EAEA,QAAgB;AACZ,WAAO,KAAK,eAAe,KAAK,aAAa,gBAAgB;AAAA,EACjE;AAAA,EAEQ,kBAAwB;AAC5B,SAAK,aAAa,CAAC;AACnB,QAAI,CAAC,KAAK,MAAM,YAAY;AACxB;AAAA,IACJ;AACA,aAASE,kBAAiB,KAAK,MAAM,YAAY;AAC7C,UAAIC,aAAY,KAAK,MAAM,WAAWD,cAAa;AACnD,UAAIC,cAAaA,WAAU,YAAY;AACnC,aAAK,WAAWD,cAAa,IAAIC,WAAU;AAAA,MAC/C;AAAA,IACJ;AAAA,EACJ;AAAA,EAEQ,OAAO,QAAqB,KAAmB;AACnD,QAAI,YAAY,KAAK,MAAM,MAAM,EAAE,GAAG;AACtC,QAAI,CAAC,aAAa,UAAU,WAAW,GAAG;AACtC;AAAA,IACJ;AACA,WAAO,KAAK,MAAM,MAAM,EAAE,GAAG;AAC7B,aAAS,IAAI,GAAG,IAAI,UAAU,QAAQ,KAAK;AACvC,gBAAU,CAAC,EAAE;AAAA,IACjB;AAAA,EACJ;AAAA,EAEA,QAAQ,QAAqB,KAAa,UAA4B;AAClE,QAAI,CAAC,KAAK,MAAM,MAAM,EAAE,GAAG,GAAG;AAC1B,WAAK,MAAM,MAAM,EAAE,GAAG,IAAI,CAAC;AAAA,IAC/B;AACA,SAAK,MAAM,MAAM,EAAE,GAAG,EAAE,KAAK,QAAQ;AAAA,EACzC;AAAA,EAEQ,IAAIH,OAAuB;AAC/B,WAAO,KAAK,WAAW,iBAAiB,KAAK,OAAOA,KAAI,CAAC;AAAA,EAC7D;AAAA,EAEQ,IAAIA,OAAc,OAAsB;AAC5C,QAAIE,iBAAgB,iBAAiB,KAAK,OAAOF,KAAI;AACrD,QAAI,WAAW,OAAO,UAAU,eAAe,KAAK,KAAK,YAAYE,cAAa;AAClF,QAAI,MAAM,KAAK,WAAWA,cAAa;AACvC,SAAK,WAAWA,cAAa,IAAI;AACjC,QAAI,YAAY,QAAQ,OAAO;AAC3B;AAAA,IACJ;AACA,QAAIL,SAAQ;AAAA,MACR,MAAM,MAAM;AAAA,MACZ,MAAMK;AAAA,MACN,QAAQA;AAAA,MACR,MAAM;AAAA,QACF,MAAMA;AAAA,QACN;AAAA,QACA,KAAK;AAAA,MACT;AAAA,IACJ;AACA,SAAK,SAASL,MAAK;AAAA,EACvB;AAAA,EAEQ,KAAKG,UAAiB,MAA0B;AACpD,QAAI,WAAW;AACf,QAAIE,iBAAgB,iBAAiB,KAAK,OAAOF,KAAI;AACrD,QAAIH,SAAQ;AAAA,MACR,MAAM,MAAM;AAAA,MACZ,MAAMK;AAAA,MACN,QAAQA;AAAA,MACR,MAAM;AAAA,QACF,MAAMA;AAAA,QACN,MAAM;AAAA,MACV;AAAA,IACJ;AACA,SAAK,SAASL,MAAK;AACnB,WAAO,KAAK,OAAOG,OAAM,KAAK,KAAK,QAAQ;AAAA,EAC/C;AAAA,EAEQ,OAAOA,OAAc,KAAc,MAA+B;AACtE,QAAIE,iBAAgB,iBAAiB,KAAK,OAAOF,KAAI;AACrD,QAAII,aAAY,KAAK,MAAM,cAAc,KAAK,MAAM,WAAWF,cAAa;AAC5E,QAAI,CAACE,YAAW;AACZ,YAAM,IAAI,MAAM,wBAAwBF,iBAAgB,GAAG;AAAA,IAC/D;AACA,QAAI,KAAKE,WAAU;AACnB,QAAI,OAAO,OAAO,YAAY;AAC1B,YAAM,IAAI,MAAM,wBAAwBF,iBAAgB,GAAG;AAAA,IAC/D;AACA,QAAI,aAAa;AAAA,MACb,CAAC,KAAK,KAAK,UAAU,GAAG,IAAI;AAAA,MAC5B,CAAC,KAAK,GAAG,IAAI;AAAA,MACb,CAAC,KAAK,UAAU,GAAG,IAAI;AAAA,MACvB;AAAA,IACJ;AACA,aAAS,IAAI,GAAG,IAAI,WAAW,QAAQ,KAAK;AACxC,UAAI,YAAY,WAAW,CAAC;AAC5B,UACI,GAAG,WAAW,UAAU,UACvB,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,GACjD;AACE,eAAO,GAAG,MAAM,KAAK,UAAU,SAAS;AAAA,MAC5C;AAAA,IACJ;AACA,WAAO,GAAG,MAAM,KAAK,UAAU,IAAsB;AAAA,EACzD;AAAA,EAEA,QAAQ,MAAsB;AAC1B,SAAK,KAAK;AACV,SAAK,YAAY;AACjB,SAAK,IAAI,OAAO;AAChB,SAAK,eAAe,KAAK;AACzB,SAAK,MAAM;AAAA,EACf;AAAA,EAEQ,eAAyB;AAC7B,QAAI,SAA6B,CAAC;AAClC,QAAI,mBAAmB,KAAK,eACtB,KAAK,aAAa,gBAClB,KAAK,MAAM;AACjB,QAAI,qBACA,KAAK,MAAM,cAAc,gBAAgB,KAAK,CAAC;AACnD,aAAS,aAAa,oBAAoB;AACtC,UAAI,iBAAiB,mBAAmB,SAAS;AACjD,eAAS,IAAI,GAAG,IAAI,eAAe,QAAQ,KAAK;AAC5C,eAAO,KAAK;AAAA,UACR,OAAO;AAAA,UACP,QAAQ,eAAe,CAAC,EAAE;AAAA,UAC1B,OAAO,CAAC,CAAC,eAAe,CAAC,EAAE;AAAA,UAC3B,QAAQ,KAAK,MAAM,OAAO,SAAS,IAC7B,KAAK,MAAM,OAAO,SAAS,EAAE,SAC7B;AAAA,QACV,CAAC;AAAA,MACL;AAAA,IACJ;AACA,WAAO;AAAA,MACH,IAAI,KAAK;AAAA,MACT,eAAe,KAAK,MAAM;AAAA,MAC1B,OAAO;AAAA,MACP,YAAY,OAAO,OAAO,CAAC,GAAG,KAAK,UAAU;AAAA,MAC7C,UAAU,KAAK,IAAI;AAAA,MACnB;AAAA,IACJ;AAAA,EACJ;AAAA,EAEQ,cAAc,WAAqC;AACvD,QAAI,CAAC,WAAW;AACZ;AAAA,IACJ;AACA,QAAI,QAAQ;AACZ,QAAI,SAAS,QAAQ,KAAK;AAC1B,WAAO,UAAU,WAAW,OAAO,WAAW,KAAK;AAC/C,UAAI,UAAU,KAAK,MAAM,QAAQ,MAAM;AACvC,UAAI,WAAW,OAAO,QAAQ,MAAM,MAAM,KAAK,GAAG;AAC9C,aAAK,YAAY,MAAM,IAAI;AAC3B,aAAK,eAAe,MAAM,IAAI;AAAA,MAClC;AACA,UAAI,WAAW,KAAK,MAAM,eAAe;AACrC;AAAA,MACJ;AACA,cAAQ;AACR,eAAS,QAAQ,MAAM;AAAA,IAC3B;AAAA,EACJ;AAAA,EAEQ,qBACJ,QACAL,QACkB;AACjB,aAAS,IAAI,GAAG,IAAI,OAAO,YAAY,QAAQ,KAAK;AAChD,UAAI,iBAAiB,OAAO,YAAY,CAAC;AACzC,UAAI,sBAAsB,cAAc,KAAK,OAAO,cAAc;AAClE,UAAI,CAAC,qBAAqB;AACtB;AAAA,MACJ;AACA,UAAI,oBAAoB,OAAO;AAC3B,YAAIQ,SAAQ,cAAc,KAAK,OAAO,oBAAoB,KAAK;AAC/D,YAAIA,UAAS,CAACA,OAAM,WAAW,KAAK,KAAK,KAAK,UAAUR,MAAK,GAAG;AAC5D;AAAA,QACJ;AAAA,MACJ;AACA,aAAO,KAAK,WAAW,QAAQ,qBAAqBA,MAAK;AAAA,IAC7D;AACA,WAAO;AAAA,EACX;AAAA,EAED,SAASA,QAA0B;AAC/B,QAAI,CAACA,OAAM,MAAM;AACb,MAAAA,OAAM,OAAO,MAAM;AAAA,IACvB;AACA,SAAK,KAAKA,MAAK;AACf,SAAK,OAAO,cAAcA,OAAM,IAAI;AAEpC,QAAI,KAAK,YAAY;AACjB;AAAA,IACJ;AACA,QACI,KAAK,aAAa,kBAAkB,KAAK,MAAM,iBAC/C,KAAK,IAAI,MACX;AACE;AAAA,IACJ;AACA,SAAK,aAAa;AAClB,SAAK,QAAQ;AAAA,EACjB;AAAA,EAEQ,UAAgB;AACpB,QAAI,WAAW,IAAI,MAAM,KAAK,IAAI,IAAI,CAAC;AACvC,QAAI,gBAAgB;AACpB,QAAIA,SAAQ,KAAK,IAAI;AAErB,WAAOA,QAAO;AACV,UAAI,mBAAmB,KAAK,aAAa;AACzC,UAAI,YAAYA,OAAM;AACtB,UAAI,iBAAiB,KAAK,MAAM,YAAY,gBAAgB;AAC5D,UAAI,aAAa,kBAAkB,eAAe,SAAS,MAAM;AAEjE,UAAI,YAAY;AACZ,iBAAS,eAAe,IAAIA;AAC5B,QAAAA,SAAQ,KAAK,IAAI;AACjB;AAAA,MACJ;AAEQ,UAAI,cAAc,KAAK,MAAM,cAAc,gBAAgB,EAAE,SAAS;AACtE,UAAI,eAAe,YAAY,SAAS,GAAG;AACvC,iBAAS,IAAI,GAAG,IAAI,YAAY,QAAQ,KAAK;AACzC,cAAIE,cAAa,YAAY,CAAC;AAC9B,cAAIA,YAAW,OAAO;AAClB,gBAAIM,SAAQ,cAAc,KAAK,OAAON,YAAW,KAAK;AACtD,gBAAIM,QAAO;AACP,kBAAI;AACA,oBAAI,cAAcA,OAAM;AAAA,kBACpB,KAAK;AAAA,kBACL,KAAK;AAAA,kBACbR;AAAA,gBACJ;AACA,oBAAI,CAAC,aAAa;AACd;AAAA,gBACJ;AAAA,cACJ,SAAS,OAAO;AACZ,qBAAK;AAAA,kBACD,OAAO,OAAO,YAAY;AAAA,oBACtB,MAAM,EAAE,OAAO,MAAM;AAAA,kBACzB,CAAC;AAAA,gBACL;AACA;AAAA,cACJ;AAAA,YACJ;AAAA,UACJ;AACA,cAAI,YAAY,KAAK,WAAW,KAAK,cAAcE,aAAYF,MAAK;AACpE,cAAI,UAAU,kBAAkB,KAAK,aAAa,eAAe;AAC7D,iBAAK,eAAe;AACpB,qBAAS,IAAI,GAAG,IAAI,eAAe,KAAK;AACpC,mBAAK,KAAK,SAAS,CAAC,CAAC;AAAA,YACzB;AACA,4BAAgB;AAAA,UACpB;AACA;AAAA,QACJ;AAAA,MACJ;AAEA,WAAK,OAAO,aAAaA,OAAM,IAAI;AACnC,MAAAA,SAAQ,KAAK,IAAI;AAAA,IACrB;AAEA,aAAS,IAAI,GAAG,IAAI,eAAe,KAAK;AACpC,WAAK,KAAK,SAAS,CAAC,CAAC;AAAA,IACzB;AAEA,SAAK,aAAa;AAClB,SAAK,OAAO,aAAa,UAAU;AAAA,EACvC;AAAA,EAEQ,KAAKA,QAA0B;AACnC,UAAM,QAAQ,KAAK,MAAM,KAAKA,MAAK;AACnC,QAAI,SAAS,CAAC,OAAOA,OAAM,MAAM,MAAM,UAAU,GAAG;AAChD,WAAK,MAAM,KAAK,OAAO,OAAO,YAAY,EAAE,MAAM,EAAE,OAAO,MAAM,EAAE,CAAC,CAAC;AAAA,IACzE;AAAA,EACJ;AAAA,EAEQ,MAA+B;AACnC,WAAO,MAAM;AACT,YAAM,eAAe,KAAK,MAAM,IAAI;AACpC,UAAI,CAAC,aAAa,YAAY,GAAG;AAC7B,eAAO;AAAA,MACX;AACA,WAAK,MAAM,KAAK,OAAO,OAAO,YAAY,EAAE,MAAM,EAAE,OAAO,aAAa,EAAE,CAAC,CAAC;AAAA,IAChF;AAAA,EACJ;AAAA,EAEQ,MAAc;AAClB,UAAM,aAAa,KAAK,MAAM,IAAI;AAClC,QAAI,OAAO,eAAe,UAAU;AAChC,aAAO;AAAA,IACX;AACA,QAAI,YAAY;AACZ,WAAK,MAAM,KAAK,OAAO,OAAO,YAAY,EAAE,MAAM,EAAE,OAAO,WAAW,EAAE,CAAC,CAAC;AAAA,IAC9E;AACA,WAAO;AAAA,EACX;AAAA,EAEQ,WACJ,SACAE,aACAF,QACM;AACN,QAAI,OAAOE,YAAW,MAAM,QAAQ,aAAa;AACjD,QAAI,CAAC,MAAM;AACP,aAAO;AAAA,IACX;AACA,aAAS,IAAI,GAAG,IAAI,KAAK,KAAK,QAAQ,KAAK;AACvC,UAAI,cAAc,KAAK,KAAK,CAAC;AAC7B,UAAI,UAAU,KAAK,MAAM,QAAQ,WAAW;AAC5C,UAAI,WAAW,eAAe,OAAO,GAAG;AACpC,aAAK,KAAK,SAASF,MAAK;AACxB,aAAK,OAAO,UAAU,WAAW;AAAA,MACrC;AAAA,IACJ;AAEA,aAAS,IAAI,GAAG,IAAIE,YAAW,OAAO,QAAQ,KAAK;AAC/C,UAAI,aAAaA,YAAW,OAAO,CAAC;AACpC,UAAI,WAAW,YAAY,KAAK,OAAO,UAAU;AACjD,UAAI,UAAU;AACV,aAAK,QAAQ,UAAUF,MAAK;AAAA,MAChC;AAAA,IACJ;AAEA,QAAI;AACJ,aAAS,IAAI,GAAG,IAAI,KAAK,MAAM,QAAQ,KAAK;AACxC,UAAI,eAAe,KAAK,MAAM,CAAC;AAC/B,UAAI,WAAW,UAAU,KAAK,OAAO,YAAY;AACjD,UAAI,UAAU;AACV,YAAI,eACA,SAAS,kBAAkBE,YAAW,UACtCA,YAAW,SAAS,MAAM;AAC9B,uBAAe,KAAK,MAAM,UAAUF,QAAO,YAAY;AAAA,MAC3D;AAAA,IACJ;AAEA,QAAI,aAAiC,gBAAgB,UAAU,KAAK,OAAOE,YAAW,MAAM;AAC5F,WAAO,cAAc;AAAA,EACzB;AAAA,EAEQ,MACJ,QACAF,QACA,cACM;AACN,QAAI,eAAe,MAAM,GAAG;AACxB,UAAIC,SAAe;AACnB,WAAK,cAAcA,OAAM,aAAa;AAEtC,eAAS,IAAI,GAAG,IAAIA,OAAM,MAAM,QAAQ,KAAK;AACzC,YAAI,YAAYA,OAAM,MAAM,CAAC;AAC7B,YAAI,WAAW,YAAY,KAAK,OAAO,SAAS;AAChD,YAAI,UAAU;AACV,eAAK,QAAQ,UAAUD,MAAK;AAAA,QAChC;AAAA,MACJ;AACA,WAAK,OAAO,WAAWC,OAAM,aAAa;AAE1C,eAAS,IAAI,GAAG,IAAIA,OAAM,WAAW,QAAQ,KAAK;AAC9C,YAAI,eAAeA,OAAM,WAAW,CAAC;AACrC,YAAI,WAAW,YAAY,KAAK,OAAO,YAAY;AACnD,YAAI,UAAU;AACV,eAAK,QAAQ,UAAUD,MAAK;AAAA,QAChC;AAAA,MACJ;AAEA,UAAI,gBAAgBC,OAAM,SAAS;AAC/B,YAAIQ,WAAU,UAAU,KAAK,OAAOR,OAAM,OAAO;AACjD,YAAI,CAACQ,UAAS;AACV,iBAAOR;AAAA,QACX;AACA,YAAI,oBAAoB;AAAA,UACpB,KAAK;AAAA,UACLQ,SAAQ,YAAY,CAAC;AAAA,QACzB;AACA,YAAI,mBAAmB;AACnB,iBAAO,KAAK,WAAWR,QAAO,mBAAmBD,MAAK;AAAA,QAC1D;AAAA,MACJ;AACA,aAAOC;AAAA,IACX;AAEA,QACI,OAAO,OAAO,MAAM,MAAM,MAAM,KAChC,OAAO,OAAO,MAAM,MAAM,QAAQ,GACpC;AACE,UAAI,eAAe;AACnB,UAAI,mBAA2C;AAC/C,eAAS,IAAI,GAAG,IAAI,aAAa,YAAY,QAAQ,KAAK;AACtD,YAAI,iBAAiB,aAAa,YAAY,CAAC;AAC/C,YAAI,mBAAmB,cAAc,KAAK,OAAO,cAAc;AAC/D,YAAI,CAAC,kBAAkB;AACnB;AAAA,QACJ;AAEA,YAAI,iBAAiB,OAAO;AACxB,cAAIO,SAAQ,cAAc,KAAK,OAAO,iBAAiB,KAAK;AAC5D,cAAIA,UAASA,OAAM,WAAW,KAAK,KAAK,KAAK,UAAUR,MAAK,GAAG;AAC3D,+BAAmB;AACnB;AAAA,UACJ;AAAA,QACJ,OAAO;AACH,6BAAmB;AACnB;AAAA,QACJ;AAAA,MACJ;AAEA,UAAI,kBAAkB;AAClB,eAAO,KAAK,WAAW,cAAc,kBAAkBA,MAAK;AAAA,MAChE;AACA,YAAM,IAAI,MAAM,2CAA2C,aAAa,aAAa;AAAA,IACzF;AAEA,QACI,OAAO,OAAO,MAAM,MAAM,cAAc,KACxC,OAAO,OAAO,MAAM,MAAM,WAAW,GACvC;AACE,UAAI,SAAS,QAAQ,OAAO,aAAa;AACzC,UAAI,mBAAmB,OAAO,OAAO,MAAM,MAAM,cAAc;AAC/D,UAAI,WAAW,mBACT,KAAK,eAAe,MAAM,IAC1B,KAAK,YAAY,MAAM;AAC7B,UAAI,CAAC,UAAU;AACX,YAAI,gBAAgB,KAAK,qBAAqB,QAAQA,MAAK;AAC3D,YAAI,eAAe;AACf,iBAAO;AAAA,QACX;AACA,YAAI,cAAc,SAAS,KAAK,OAAO,MAAM;AAC7C,YAAI,eAAe,YAAY,SAAS;AACxC,cAAI,gBAAgB,UAAU,KAAK,OAAO,YAAY,OAAO;AAC7D,cAAI,iBAAiB,cAAc,YAAY,SAAS,GAAG;AACvD,gBAAI,oBAAoB;AAAA,cACpB,KAAK;AAAA,cACL,cAAc,YAAY,CAAC;AAAA,YAC/B;AACA,gBAAI,mBAAmB;AACnB,qBAAO,KAAK;AAAA,gBACR;AAAA,gBACA;AAAA,gBACAA;AAAA,cACJ;AAAA,YACJ;AAAA,UACJ;AAAA,QACA;AACA,eAAO;AAAA,MACX;AAEA,UAAI,YAAsB,CAAC;AAC3B,UAAI,cAAc;AAClB,aAAO,eAAe,gBAAgB,UAAU,gBAAgB,KAAK;AACjE,kBAAU,QAAQ,WAAW;AAC7B,sBAAc,QAAQ,WAAW;AAAA,MACrC;AACA,UAAI,gBAAgB;AACpB,eAAS,IAAI,GAAG,IAAI,UAAU,QAAQ,KAAK;AACvC,YAAI,WAAW,UAAU,KAAK,OAAO,UAAU,CAAC,CAAC;AACjD,YAAI,CAAC,UAAU;AACX;AAAA,QACJ;AACA,wBAAgB,KAAK;AAAA,UACjB;AAAA,UACAA;AAAA,UACA,oBAAoB,MAAM,UAAU,SAAS;AAAA,QACjD;AAAA,MACJ;AACA,aAAO;AAAA,IACX;AAEA,QAAI,OAAO,OAAO,MAAM,MAAM,UAAU,GAAG;AACvC,WAAK,OAAO,WAAW,OAAO,aAAa;AAC3C,UAAI,QAAQ,OAAO,aAAa,MAAM,KAAK,MAAM,eAAe;AAC5D,aAAK,KAAK;AAAA,MACd;AACA,aAAO;AAAA,IACX;AACA,WAAO;AAAA,EACX;AAAA,EAEQ,KAAKC,QAAcD,QAA0B;AACjD,aAAS,IAAI,GAAG,IAAIC,OAAM,WAAW,QAAQ,KAAK;AAC9C,UAAI,eAAeA,OAAM,WAAW,CAAC;AACrC,UAAIS,YAAW,YAAY,KAAK,OAAO,YAAY;AACnD,UAAIA,WAAU;AACV,aAAK,UAAUA,SAAQ;AAAA,MAC3B;AAAA,IACJ;AAEA,aAAS,IAAI,GAAG,IAAIT,OAAM,KAAK,QAAQ,KAAK;AACxC,UAAI,WAAWA,OAAM,KAAK,CAAC;AAC3B,UAAI,WAAW,YAAY,KAAK,OAAO,QAAQ;AAC/C,UAAI,UAAU;AACV,aAAK,QAAQ,UAAUD,MAAK;AAAA,MAChC;AAAA,IACJ;AAAA,EACJ;AAAA,EAEQ,QAAQ,UAAoBA,QAA0B;AAC1D,QAAI,QAAQ;AACZ,QAAIO,aAAY,SAAS;AACzB,QAAI,OAAO;AACX,QAAI,CAACA,cAAa,SAAS,eAAe;AACtC,MAAAA,aAAY,SACR,KACA,UACA,KACF;AACE,aAAK,OAAO,SAAS,eAAe,KAAK,CAAC,GAAG,CAAC;AAAA,MAClD;AAAA,IACJ;AACA,QAAI,CAACA,YAAW;AACZ;AAAA,IACJ;AACA,QAAI,OAAO,SAAS,MAAM,MAAM,UAAU,GAAG;AACzC,UAAI,aAAa,IAAI,QAAQ;AAC7B,UAAI;AACA,YAAI,wBAAwB,QAAQ;AAAA,UAChCA,WAAU,YAAY,KAAK,UAAUP,MAAK;AAAA,QAC9C;AACA,aAAK,OAAO,SAAS,aAAa,IAAI;AAAA,UAClC,SAAS;AAAA,UACT,SAAS,sBAAsB,MAAM,SAAUW,QAAO;AAClD,iBAAK;AAAA,cACD,OAAO,OAAO,YAAY;AAAA,gBACtB,MAAM,EAAE,OAAOA,OAAM;AAAA,cACzB,CAAC;AAAA,YACL;AAAA,UACJ,CAAC,EAAE,KAAK,WAAY;AAChB,iBAAK,OAAO,YAAY,SAAS,aAAa;AAC9C,iBAAK;AAAA,cACD;AAAA,cACA,SAAS,QAAQ,SAAS,MAAM,IAAI,QAAQ,SAAS,aAAa;AAAA,YACtE;AAAA,UACJ,CAAC;AAAA,QACL;AAAA,MACJ,SAAS,KAAK;AACV,gBAAQ;AAAA,MACZ;AAAA,IACJ,OAAO;AACH,UAAI;AACA,QAAAJ,WAAU,KAAK,KAAK,KAAK,UAAUP,MAAK;AACxC,aAAK,OAAO,YAAY,SAAS,aAAa;AAC9C,aAAK,OAAO,YAAY,QAAQ,SAAS,aAAa,CAAC;AAAA,MAC3D,SAAS,KAAK;AACV,gBAAQ;AAAA,MACZ;AAAA,IACJ;AACA,QAAI,OAAO;AACP,WAAK;AAAA,QACD,OAAO,OAAO,YAAY;AAAA,UACtB,MAAM,EAAE,OAAO,MAAM;AAAA,QACzB,CAAC;AAAA,MACL;AAAA,IACJ;AAAA,EACJ;AAAA,EAEQ,UAAUU,WAA0B;AACxC,QAAI,SAAS,KAAK,OAAOA,UAAS,aAAa;AAC/C,QAAI,QAAQ;AACR,aAAO,QAAQ,OAAO;AACtB,eAAS,IAAI,GAAG,IAAI,OAAO,QAAQ,UAAU,QAAQ,KAAK;AACtD,eAAO,QAAQ,UAAU,CAAC,EAAE;AAAA,MAChC;AACA,aAAO,KAAK,OAAOA,UAAS,aAAa;AAAA,IAC7C;AAAA,EACJ;AAAA,EAEA,OAAa;AACT,SAAK,aAAa;AAClB,WACI,KAAK,gBACL,KAAK,aAAa,kBAAkB,KAAK,MAAM,eACjD;AACE,UAAI,eAAe,SAAS,KAAK,OAAO,KAAK,aAAa,aAAa;AACvE,UAAI,CAAC,cAAc;AACf;AAAA,MACJ;AACA,WAAK,KAAK,cAAc,UAAU;AAClC,UAAI,cAAc;AAAA,QACd,KAAK;AAAA,QACL,QAAQ,KAAK,aAAa,aAAa;AAAA,MAC3C;AACA,UAAI,CAAC,aAAa;AACd;AAAA,MACJ;AACA,WAAK,eAAe;AAAA,IACxB;AACA,SAAK,aAAa;AAClB,SAAK,IAAI,OAAO;AAChB,aAAS,IAAI,GAAG,IAAI,KAAK,IAAI,UAAU,QAAQ,KAAK;AAChD,WAAK,IAAI,UAAU,CAAC,EAAE;AAAA,IAC1B;AACA,WAAO,KAAK,IAAI,UAAU,KAAK,EAAE;AAAA,EACrC;AACJ;AAEA,SAAS,KACL,UACG,cACwB;AAC3B,WAAS,IAAI,MAAM,SAAS,GAAG,KAAK,GAAG,KAAK;AACxC,QAAI,UAAU,MAAM,CAAC;AACrB,aAAS,IAAI,GAAG,IAAI,aAAa,QAAQ,KAAK;AAC1C,UAAI,OAAO,QAAQ,MAAM,aAAa,CAAC,CAAC,GAAG;AACvC,eAAO;AAAA,MACX;AAAA,IACJ;AAAA,EACJ;AACA,SAAO;AACX;AAwCO,SAAS,MACZ,eACA,UACA,OACA,aAIF;AACE,MAAI,UAAU;AACd,MAAI,eAAe;AACnB,MAAI,kBAAkB;AACtB,MAAI,EAAE,mBAAmB,UAAU;AAC/B,kBAAc;AACd,mBAAe;AACf,sBAAkB;AAClB,cAAU,IAAI,QAAQ;AAAA,EAC1B;AACA,MAAI,KAAK,IAAI;AAAA,IACT;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACJ;AACA,KAAG,MAAM;AACT,SAAO;AAIX;AAGO,SAAS,KAAK,UAA0B;AAC3C,MAAI,UAAU,WAAW,QAAQ;AACjC,MAAI,SAAS;AACT,YAAQ,KAAK;AAAA,EACjB;AACJ;AAIO,SAAS,MAIZP,UACG,UACL;AACE,SAAO;AAAA,IACH,SAAU,OAAc,OAAiC;AACrD,UAAI,YACV,KAAK,OAAO,MAAM,OAAO,MAAM,KAAK;AAE9B,UAAIE,iBAAgB,KAAK,UAAU,eAAeF,KAAI;AAEtD,UAAI,WAAW;AAAA,QACX,eAAeE;AAAA,QACf,MAAM,MAAM;AAAA,QACZ,aAAa,CAAC;AAAA,QACd,OAAO,CAAC;AAAA,QACR,MAAM,CAAC;AAAA,QACP,YAAY,CAAC;AAAA,QACb,UAAU,CAAC;AAAA,MACf;AAEA,YAAM,QAAQ,SAAS,aAAa,IAAI;AACxC,YAAM,KAAK,QAAQ;AACnB,YAAM,OAAO,OAAO,QAAQ;AAC5B,YAAM,IAAI;AAEV,aAAO;AAAA,IACX;AAAA,IACA;AAAA,MACI,MAAM;AAAA,MACN,MAAAF;AAAA,MACA,OAAO;AAAA,IACX;AAAA,EACJ;AACJ;AAeO,SAAS,QACZ,kBACG,UACL;AACE,MAAIA,QAAO;AAGX,MAAI,OAAO,kBAAkB,UAAU;AACnC,IAAAA,QAAO;AAAA,EACX,WAAW,OAAO,kBAAkB,YAAY;AAE5C,eAAW,CAAC,eAAe,GAAG,QAAQ;AAAA,EAC1C;AAEA,SAAO;AAAA,IACH,SAAU,OAAc,OAA0B;AAC9C,UAAIF,SAAQ,UAAU,KAAK;AAC3B,UAAI,CAACA,QAAO;AACR,cAAM,IAAI,MAAM,yCAAyC;AAAA,MAC7D;AAEA,UAAI,cAAc,KAAKA,OAAM,eAAeE,KAAI;AAChD,UAAI,aAAqB;AAAA,QACrB,eAAe;AAAA,QACf,MAAM,MAAM;AAAA,QACZ,aAAa,CAAC;AAAA,MAClB;AAEA,YAAM,QAAQ,WAAW,IAAI;AAC7B,MAAAF,OAAM,UAAU;AAGhB,UAAI,mBAAmB,CAAC,OAAO,WAAW,aAAa,GAAG,GAAG,YAAY,GAAG,GAAG,QAAQ;AAQvF,YAAM,KAAK,UAAU;AACrB,UAAI,gBAAgB,WAAW,GAAG,gBAAgB,EAAE,OAAO,KAAK;AAChE,YAAM,IAAI;AAEV,aAAO;AAAA,IACX;AAAA,IACA;AAAA,MACI,MAAM;AAAA,MACN,MAAAE;AAAA,MACA,OAAO;AAAA,IACX;AAAA,EACJ;AACJ;AAEO,SAAS,cAGT,UACL;AACE,SAAO;AAAA,IACH,SACI,OACA,OACU;AACd,UAAI,SAAS,WAAW,KAAK;AAC7B,UAAI,CAAC,QAAQ;AACT,cAAM,IAAI,MAAM,6CAA6C;AAAA,MACjE;AAEA,UAAIA,QAAO,gBAAgB,OAAO,KAAK,MAAM,OAAO,EAAE;AAEtD,UAAI,gBAA4B;AAAA,QAC5B,eAAe,KAAK,OAAO,eAAeA,KAAI;AAAA,QAC9C,MAAM,MAAM;AAAA;AAAA,QACZ,QAAQ;AAAA,QACR,OAAO;AAAA,QACP,QACX,CAAC;AAAA,QACU,QACX,CAAC;AAAA,QACU,OACV,CAAC;AAAA,QACS,QAAQ;AAAA,MACZ;AAEA,YAAM,QAAQ,cAAc,aAAa,IAAI;AAC7C,YAAM,KAAK,aAAa;AACxB,YAAM,OAAO,OAAO,QAAQ;AAC5B,YAAM,IAAI;AAGV,UAAI,cAAc,UAAU,OAAO,CAAC,cAAc,QAAQ;AACtD,sBAAc,SAAS,OAAO;AAAA,MAClC;AACA,UAAI,gBAAgB,UAAU,OAAO,cAAc,MAAM;AACzD,UAAI,CAAC,eAAe;AAChB,cAAM,IAAI,MAAM,+BAA+B,cAAc,MAAM;AAAA,MACvE;AACA,oBAAc,YAAY,KAAK,cAAc,aAAa;AAG1D,YAAM,SAAS,KAAK,WAAY;AAC5B,YAAI,cAAc,WAAW,cAAc,QAAQ;AAC/C,wBAAc,OAAO,MAAM;AAAA,QAC/B,WAAW,CAAC,cAAc,QAAQ;AAC9B,wBAAc,OAAO,MAAM;AAAA,QAC/B,WAAW,WAAW,cAAc,QAAQ,cAAc,MAAM,GAAG;AAC/D,wBAAc,OAAO,MAAM;AAAA,QAC/B,OAAO;AACH,wBAAc,OAAO,MAAM;AAAA,QAC/B;AAGA,YAAI,UAAU,IAAI,cAAc,QAAQ,cAAc,MAAM;AAC5D,YAAI,QACd,CAAC;AACS,YAAI,cAAc,SAAS,MAAM,MAAM;AACnC,gBAAM,KAAK,cAAc,aAAa;AAAA,QAC1C,OAAO;AACH,cAAI,WAAW,cAAc;AAC7B,iBAAO,YAAY,aAAa,WAAW,aAAa,KAAK;AACzD,kBAAM,QAAQ,QAAQ;AACtB,uBAAW,QAAQ,QAAQ;AAAA,UAC/B;AAAA,QACJ;AAEA,YAAI,cAAc,SAAS,MAAM,SAAS;AACtC,wBAAc,MAAM,QAAQ,cAAc,aAAa,CAAC,IAAI;AAAA,YACxD;AAAA,YACA,MAAM,CAAC,cAAc,aAAa;AAAA,UACtC;AACA,iBAAO;AAAA,QACX;AAGA,cAAM,SAAS,KAAK,WAAY;AAC5B,cAAI,cAAc,SAAS,MAAM,UAAU;AAEvC;AAAA,UACJ;AACA,mBAASE,kBAAiB,MAAM,SAAS;AACrC,gBAAI,UAAU,UAAU,OAAOA,cAAa;AAC5C,gBAAI,CAAC,SAAS;AACV;AAAA,YACJ;AACA,gBACI,cAAc,WAAWA,kBACzB,CAAC,WAAW,cAAc,QAAQA,cAAa,GACjD;AACE;AAAA,YACJ;AACA,gBAAIO,QACtB,CAAC;AACiB,gBAAI,UACtB,QAAQ;AACU,mBAAO,YAAY,WAAW,SAAS;AACnC,cAAAA,MAAK,KAAK,OAAO;AACjB,wBAAU,QAAQ,OAAO;AACzB,kBAAI,YAAY,KAAK;AACjB;AAAA,cACJ;AAAA,YACJ;AACA,0BAAc,MAAM,QAAQ,aAAa,IAAI;AAAA,cACzC;AAAA,cACA,MAAMA;AAAA,YACV;AAAA,UACJ;AAAA,QACJ,CAAC;AAAA,MACL,CAAC;AACD,aAAO;AAAA,IACX;AAAA,IACA;AAAA,MACI,MAAM;AAAA,MACN,OAAO;AAAA,IACX;AAAA,EACA;AACJ;AAGO,SAAS,OACZT,OACwE;AACxE,SAAO;AAAA,IACH,SAAU,OAAc,OAA0B;AAC9C,UAAID,cAAa,eAAe,KAAK;AACrC,UAAI,CAACA,aAAY;AACb,eAAO;AAAA,MACX;AAEA,UAAI,eAAuBC;AAC3B,UAAI,CAAC,WAAW,YAAY,GAAG;AAC3B,YAAI,WAAW,UAAU,KAAK;AAC9B,YAAI,UAAU;AACV,yBAAe,KAAK,SAAS,eAAe,YAAY;AAAA,QAC5D;AAAA,MACJ,WAAW,CAAC,WAAW,MAAM,eAAe,YAAY,GAAG;AACvD,uBAAe,KAAK,MAAM,eAAe,aAAa,MAAM,CAAC,CAAC;AAAA,MAClE;AAEA,MAAAD,YAAW,SAAS;AACpB,aAAOA;AAAA,IACX;AAAA,IACA;AAAA,MACI,MAAM;AAAA,MACN,MAAAC;AAAA,IACJ;AAAA,EACJ;AACJ;AAGO,SAAS,OACZA,OACwE;AACxE,SAAO;AAAA,IACH,SAAU,OAAc,OAA0B;AAC9C,UAAID,cAAa,eAAe,KAAK;AACrC,UAAI,CAACA,aAAY;AACb,eAAO;AAAA,MACX;AAEA,UAAI,eAAuBC;AAC3B,UAAI,CAAC,WAAW,YAAY,GAAG;AAE3B,YAAI,WAAW,UAAU,KAAK,KAAK,UAAU,KAAK;AAClD,YAAI,UAAU;AACV,yBAAe,KAAK,SAAS,eAAe,YAAY;AAAA,QAC5D;AAAA,MACJ,WAAW,CAAC,WAAW,MAAM,eAAe,YAAY,GAAG;AACvD,uBAAe,KAAK,MAAM,eAAe,aAAa,MAAM,CAAC,CAAC;AAAA,MAClE;AACA,MAAAD,YAAW,SAAS;AACpB,aAAOA;AAAA,IACX;AAAA,IACA;AAAA,MACI,MAAM;AAAA,MACN,MAAAC;AAAA,IACJ;AAAA,EACJ;AACJ;AASO,SAAS,GACZ,eACkF;AAClF,QAAMH,SAAQ;AACd,SAAO;AAAA,IACH,SAAU,OAAc,OAA0B;AAC9C,UAAIE,cAAa,eAAe,KAAK;AACrC,UAAI,CAACA,aAAY;AACb,eAAO;AAAA,MACX;AAEA,UAAI,YAAY,OAAOF,WAAU,WAAWA,SAAQA,OAAM;AAC1D,MAAAE,YAAW,OAAO,KAAK,SAAS;AAChC,UAAI,OAAOF,WAAU,UAAU;AAC3B,sBAAc,OAAOA,MAAK;AAAA,MAC9B;AACA,aAAOE;AAAA,IACX;AAAA,IACA;AAAA,MACI,MAAM;AAAA,MACN,MAAM,OAAO,kBAAkB,WACzB,gBACA,cAAc;AAAA,MACpB,QACI,OAAO,kBAAkB,WACnB,SACA,cAAc;AAAA,IAC5B;AAAA,EACJ;AACJ;AAGO,SAAS,MACZC,OACuE;AACvE,SAAO;AAAA,IACH,SAAU,OAAc,OAA0B;AAC9C,UAAID,cAAa,eAAe,KAAK;AACrC,UAAI,CAACA,aAAY;AACb,eAAO;AAAA,MACX;AACA,UAAIG,iBAAgB,iBAAiB,OAAOF,KAAI;AAChD,MAAAD,YAAW,OAAO,KAAKG,cAAa;AACpC,oBAAc,OAAO;AAAA,QACjB,MAAM,MAAM;AAAA,QACZ,MAAMA;AAAA,QACN,QAAQA;AAAA,MACZ,CAAC;AACD,UAAI,CAAC,MAAM,WAAWA,cAAa,GAAG;AAClC,cAAM,WAAWA,cAAa,IAAI;AAAA,UAC9B,MAAMF;AAAA,UACN,eAAeE;AAAA,UACf,YAAY;AAAA,QAChB;AAAA,MACJ;AACA,aAAOH;AAAA,IACX;AAAA,IACA;AAAA,MACI,MAAM;AAAA,MACN,MAAAC;AAAA,IACJ;AAAA,EACJ;AACJ;AAGO,SAAS,OACZA,OACwE;AACxE,SAAO;AAAA,IACH,SAAU,OAAc,OAA0B;AAC9C,UAAID,cAAa,eAAe,KAAK;AACrC,UAAI,CAACA,aAAY;AACb,eAAO;AAAA,MACX;AACA,UAAIG,iBAAgB,iBAAiB,OAAOF,KAAI;AAChD,MAAAD,YAAW,OAAO,KAAKG,cAAa;AACpC,oBAAc,OAAO;AAAA,QACjB,MAAM,MAAM;AAAA,QACZ,MAAMA;AAAA,QACN,QAAQA;AAAA,MACZ,CAAC;AACD,YAAM,SAAS,KAAK,WAAY;AAC5B,YAAI,CAAC,MAAM,WAAWA,cAAa,GAAG;AAClC,gBAAM,IAAI,MAAM,wBAAwBA,iBAAgB,gBAAgB;AAAA,QAC5E;AAAA,MACJ,CAAC;AACD,aAAOH;AAAA,IACX;AAAA,IACA;AAAA,MACI,MAAM;AAAA,MACN,MAAAC;AAAA,IACJ;AAAA,EACJ;AACJ;AAMO,SAAS,KACZ,MAOF;AACE,MAAI,OAAO,SAAS,UAAU;AAC1B,WAAO,MAAM,IAAI;AAAA,EACrB;AACA,SAAO,SAAU,OAAc,OAA0B;AACrD,QAAID,cAAa,eAAe,KAAK;AACrC,QAAI,CAACA,aAAY;AACb,aAAO;AAAA,IACX;AACA,QAAI,YAAY,KAAKA,YAAW,eAAe,UAAU,OAAO,KAAK,MAAM,OAAO,EAAE,MAAM;AAC1F,QAAIF,SAAQ;AAAA,MACR,MAAM,MAAM;AAAA,MACZ,MAAM;AAAA,IACV;AACA,IAAAE,YAAW,OAAO,KAAK,SAAS;AAChC,kBAAc,OAAOF,MAAK;AAC1B,UAAM,SAAS,KAAK,WAAY;AAC5B,UAAIa,UAAS,SAAS,OAAOX,YAAW,MAAM;AAC9C,UAAI,CAACW,SAAQ;AACT;AAAA,MACJ;AACA;AAAA,QACI,KAAKA,QAAO,eAAe,mBAAmBA,QAAO,WAAW,MAAM;AAAA,QACtE,MAAM;AAAA,QACNA,QAAO;AAAA,QACP;AAAA,QACA,CAAC,SAAU,KAAK,UAAU,KAAK;AAC3B,cAAI,SAAS,KAAK,KAAK,UAAU,GAAG;AACpC,cAAI,aAAa,aAAa,MAAM;AACpC,cAAI,CAAC,YAAY;AACb;AAAA,UACJ;AACA,iBAAO,IAAI,QAAc,SAAU,SAAS;AACxC,gBAAI,OAAO,WAAY;AACnB,kBAAI,CAAC,IAAI,MAAM;AACX,yBAAS,SAASb,MAAK;AAAA,cAC3B;AACA,sBAAQ;AAAA,YACZ;AACA,gBAAI,QAAQ,UAAU,GAAG;AACrB,yBAAW,KAAK,IAAI;AAAA,YACxB,WAAW,oBAAoB,UAAU,GAAG;AACxC,yBAAW,iBAAiB,QAAQ,IAAI;AAAA,YAC5C,WAAW,MAAM,UAAU,GAAG;AAC1B,yBAAW,GAAG,SAAS,IAAI;AAC3B,yBAAW,GAAG,QAAQ,IAAI;AAAA,YAC9B;AACA,gBAAI,iBAAiB,QAAQ,OAAO;AAAA,UACxC,CAAC;AAAA,QACL,CAAC;AAAA,MACL;AAAA,IACJ,CAAC;AAAA,EACL;AACJ;AAGA,SAAS,cACL,YACA,MACA,WACA,OACA,YACF;AACE,WAAS,IAAI,GAAG,IAAI,WAAW,QAAQ,KAAK;AACxC,QAAIO,aAAY,WAAW,CAAC;AAC5B,QAAIF,iBAAgB,aAAa,MAAM,UAAU;AACjD,QAAI,WAAW;AAAA,MACX,eAAeA;AAAA,MACf;AAAA,MACA,WAAW,OAAOE,eAAc,aAAaA,aAAY;AAAA,MACzD,eAAe,OAAOA,eAAc,WAAW,iBAAiB,OAAOA,UAAS,IAAI;AAAA,IACxF;AACA,UAAM,QAAQF,cAAa,IAAI;AAC/B,cAAU,KAAKA,cAAa;AAAA,EAChC;AACJ;AAGO,SAAS,SAIT,YACL;AACE,SAAO;AAAA,IACH,SAAU,OAAc,OAA0B;AAC9C,UAAIJ,SAAQ,UAAU,KAAK;AAC3B,UAAI,CAACA,QAAO;AACR,eAAO;AAAA,MACX;AACA,oBAAc,KAAKA,OAAM,eAAe,OAAO,GAAG,MAAM,YAAYA,OAAM,OAAO,OAAO,UAAU;AAClG,aAAOA;AAAA,IACX;AAAA,IACA;AAAA,MACI,MAAM;AAAA,MACN,OAAO;AAAA,IACX;AAAA,EACJ;AACJ;AAGO,SAAS,QAIT,YACL;AACE,SAAO;AAAA,IACH,SAAU,OAAc,OAA0B;AAC9C,UAAIA,SAAQ,UAAU,KAAK;AAC3B,UAAI,CAACA,QAAO;AACR,eAAO;AAAA,MACX;AACA,oBAAc,KAAKA,OAAM,eAAe,MAAM,GAAG,MAAM,YAAYA,OAAM,MAAM,OAAO,UAAU;AAChG,aAAOA;AAAA,IACX;AAAA,IACA;AAAA,MACI,MAAM;AAAA,MACN,OAAO;AAAA,IACX;AAAA,EACJ;AACJ;AAGO,SAAS,YAIT,YACL;AACE,SAAO;AAAA,IACH,SAAU,OAAc,OAA0B;AAC9C,UAAIA,SAAQ,UAAU,KAAK;AAC3B,UAAI,CAACA,QAAO;AACR,eAAO;AAAA,MACX;AACA,oBAAc,KAAKA,OAAM,eAAe,UAAU,GAAG,MAAM,YAAYA,OAAM,YAAY,OAAO,UAAU;AAC1G,aAAOA;AAAA,IACX;AAAA,IACA;AAAA,MACI,MAAM;AAAA,MACN,OAAO;AAAA,IACX;AAAA,EACJ;AACJ;AAGO,SAAS,UACT,YACL;AACE,SAAO;AAAA,IACH,SAAU,OAAc,OAA0B;AAC9C,UAAIC,cAAa,eAAe,KAAK;AACrC,UAAI,CAACA,aAAY;AACb,eAAO;AAAA,MACX;AACA,oBAAc,KAAKA,YAAW,eAAe,QAAQ,GAAG,MAAM,YAAYA,YAAW,QAAQ,OAAO,UAAU;AAC9G,aAAOA;AAAA,IACX;AAAA,IACA;AAAA,MACI,MAAM;AAAA,MACN,OAAO;AAAA,IACX;AAAA,EACJ;AACJ;AAYO,SAAS,MACZ,YACF;AACE,SAAO;AAAA,IACH,SAAU,OAAc,OAA0B;AAC9C,UAAIA,cAAa,eAAe,KAAK;AACrC,UAAI,CAACA,aAAY;AACb,eAAO;AAAA,MACX;AAEA,UAAIC,QAAO,KAAKD,YAAW,eAAe,OAAO;AAEjD,UAAI,aAAa;AAAA,QACb,eAAeC;AAAA,QACf,MAAM,MAAM;AAAA,QACZ,YACI,OAAO,eAAe,aACf,aACD,iBAAiB,OAAO,UAAoB;AAAA,MAC1D;AAEA,YAAM,QAAQA,KAAI,IAAI;AACtB,MAAAD,YAAW,QAAQC;AAAA,IACvB;AAAA,IACA;AAAA,MACI,MAAM;AAAA,MACN,OAAO;AAAA,IACX;AAAA,EACJ;AACJ;AAGO,SAAS,UACZA,OACA,cACsE;AACtE,MAAI,aAAa,UAAU,SAAS;AACpC,SAAO;AAAA,IACH,SAAU,OAAuB;AAC7B,UAAIE,iBAAgB,iBAAiB,OAAOF,KAAI;AAChD,YAAM,WAAWE,cAAa,IAAI;AAAA,QAC9B,MAAMF;AAAA,QACN,eAAeE;AAAA,QACf;AAAA,QACA,cAAc;AAAA,MAClB;AACA,aAAO;AAAA,IACX;AAAA,IACA;AAAA,MACI,MAAM;AAAA,MACN,MAAAF;AAAA,MACA,OAAO;AAAA,IACX;AAAA,EACJ;AACJ;AAGO,SAAS,UAIZA,OACA,gBAIF;AACE,SAAO;AAAA,IACH,SAAU,OAAuB;AAC7B,UAAIE,iBAAgB,iBAAiB,OAAOF,KAAI;AAChD,YAAM,WAAWE,cAAa,IAAI;AAAA,QAC9B,MAAMF;AAAA,QACN,eAAeE;AAAA,QACf;AAAA,MACJ;AACA,aAAO;AAAA,IACX;AAAA,IACA;AAAA,MACI,MAAM;AAAA,MACN,MAAAF;AAAA,MACA,MAAM;AAAA,IACV;AAAA,EACJ;AACJ;AASO,SAAS,MAAM,UAAmC;AACrD,SAAO,WAAW,SAAU,OAAc,OAA0B;AAChE,QAAID,cAAa,eAAe,KAAK;AACrC,QAAI,CAACA,aAAY;AACb,aAAO;AAAA,IACX;AAEA,QAAI,YAAY,KAAKA,YAAW,eAAe,WAAW,OAAO,KAAK,MAAM,OAAO,EAAE,MAAM;AAE3F,QAAIF,SAAQ;AAAA,MACR,MAAM;AAAA,MACN,MAAM,MAAM;AAAA,IAChB;AAEA,IAAAE,YAAW,OAAO,KAAK,SAAS;AAChC,kBAAc,OAAOF,MAAK;AAE1B,UAAM,SAAS,KAAK,WAAY;AAC5B,UAAIa,UAAS,SAAS,OAAOX,YAAW,MAAM;AAC9C,UAAI,CAACW,SAAQ;AACT;AAAA,MACJ;AACA;AAAA,QACI,KAAKA,QAAO,eAAe,oBAAoBA,QAAO,WAAW,MAAM;AAAA,QACvE,MAAM;AAAA;AAAA,QACNA,QAAO;AAAA,QACP;AAAA,QACA;AAAA,UACI,SAAU,KAAK,UAAU,KAAK;AAC1B,gBAAI,UAAU,WAAW,QAAQ;AACjC,gBAAI,CAAC,SAAS;AACV;AAAA,YACJ;AACA,gBAAI,QAAQ,OAAO,aAAa,WAC1B,eAAe,SAAS,IAAI,QAAQ,CAAC,IACrC,SAAS,KAAK,UAAU,GAAG;AACjC,mBAAO,aAAa,OAAO,SAAU,OAAO;AACxC,kBAAI,IAAI,MAAM;AACV;AAAA,cACJ;AACA,kBAAI,cAAc,eAAe,KAAK;AACtC,kBAAI,eAAe,GAAG;AAClB;AAAA,cACJ;AACA,qBAAO,IAAI,QAAc,SAAU,SAAS;AACxC,oBAAI,UAAU,QAAQ,MAAM,WAAW,WAAY;AAE/C,2BAAS,SAASb,MAAK;AACvB,0BAAQ;AAAA,gBACZ,GAAG,WAAW;AAElB,oBAAI,iBAAiB,QAAQ,WAAY;AACrC,0BAAQ,MAAM,aAAa,OAAO;AAClC,0BAAQ;AAAA,gBACZ,CAAC;AAAA,cACD,CAAC;AAAA,YACL,CAAC;AAAA,UACL;AAAA,QAAC;AAAA,MACT;AAAA,IACJ,CAAC;AAAA,EACL,GAAG;AAAA,IACC,MAAM;AAAA,IACN,OAAO;AAAA,EACX,CAAyC;AAC7C;AASO,SAAS,MAAM,UAAmC;AACrD,SAAO,WAAW,SAAU,OAAc,OAA0B;AAChE,QAAIE,cAAa,eAAe,KAAK;AACrC,QAAI,CAACA,aAAY;AACb,aAAO;AAAA,IACX;AAEA,QAAI,YAAY,KAAKA,YAAW,eAAe,WAAW,OAAO,KAAK,MAAM,OAAO,EAAE,MAAM;AAE3F,QAAIF,SAAQ;AAAA,MACR,MAAM;AAAA,MACN,MAAM,MAAM;AAAA,IAChB;AAEA,IAAAE,YAAW,OAAO,KAAK,SAAS;AAChC,kBAAc,OAAOF,MAAK;AAE1B,UAAM,SAAS,KAAK,WAAY;AAC5B,UAAIa,UAAS,SAAS,OAAOX,YAAW,MAAM;AAC9C,UAAI,CAACW,SAAQ;AACT;AAAA,MACJ;AACA;AAAA,QACI,KAAKA,QAAO,eAAe,oBAAoBA,QAAO,WAAW,MAAM;AAAA,QACvE,MAAM;AAAA;AAAA,QACNA,QAAO;AAAA,QACP;AAAA,QACA;AAAA,UACI,SAAU,KAAK,UAAU,KAAK;AAC1B,gBAAI,UAAU,WAAW,QAAQ;AACjC,gBAAI,CAAC,SAAS;AACV;AAAA,YACJ;AACA,gBAAI,WAAW,OAAO,aAAa,WAC7B,eAAe,SAAS,IAAI,QAAQ,CAAC,IACrC,SAAS,KAAK,UAAU,GAAG;AACjC,mBAAO,aAAa,UAAU,SAAU,OAAO;AAC3C,kBAAI,IAAI,MAAM;AACV;AAAA,cACJ;AACA,kBAAI,iBAAiB,eAAe,KAAK;AACzC,kBAAI,kBAAkB,GAAG;AACrB;AAAA,cACJ;AACA,qBAAO,IAAI,QAAc,SAAU,SAAS;AACxC,oBAAI,UAAU,QAAQ,MAAM,WAAW,SAAS,OAAO;AACnD,sBAAI,IAAI,MAAM;AACV,4BAAQ,MAAM,aAAa,OAAO;AAClC,4BAAQ;AACR;AAAA,kBACJ;AACA,2BAAS,SAASb,MAAK;AACvB,4BAAU,QAAQ,MAAM,WAAW,MAAM,cAAc;AAAA,gBAC3D,GAAG,cAAc;AACjB,oBAAI,iBAAiB,QAAQ,WAAY;AACrC,0BAAQ,MAAM,aAAa,OAAO;AAClC,0BAAQ;AAAA,gBACZ,CAAC;AAAA,cACL,CAAC;AAAA,YACL,CAAC;AAAA,UACL;AAAA,QAAC;AAAA,MACT;AAAA,IACJ,CAAC;AAAA,EACL,GAAG;AAAA,IACC,MAAM;AAAA,IACN,OAAO;AAAA,EACX,CAAyC;AAC7C;AAcO,SAAS,GACZ,WAOF;AACE,SAAO,WAAW,SAAU,OAAc,OAA0B;AAChE,QAAIE,cAAa,eAAe,KAAK;AACrC,QAAI,CAACA,aAAY;AACb,aAAO;AAAA,IACX;AACA,QAAI,YAAY,KAAKA,YAAW,eAAe,QAAQ,OAAO,KAAK,MAAM,OAAO,EAAE,MAAM;AACxF,QAAIF,SAAQ;AAAA,MACR,MAAM;AAAA,MACN,MAAM,MAAM;AAAA,IAChB;AAEA,IAAAE,YAAW,OAAO,KAAK,SAAS;AAChC,kBAAc,OAAOF,MAAK;AAE1B,UAAM,SAAS,KAAK,WAAY;AAC5B,UAAIa,UAAS,SAAS,OAAOX,YAAW,MAAM;AAC9C,UAAI,CAACW,SAAQ;AACT;AAAA,MACJ;AACA;AAAA,QACI,KAAKA,QAAO,eAAe,iBAAiBA,QAAO,WAAW,MAAM;AAAA,QACpE,MAAM;AAAA,QACNA,QAAO;AAAA,QACP;AAAA,QACA,CAAC,SAAU,KAAK,UAAU,KAAK;AAC3B,cAAI,UAAU,WAAW,QAAQ;AACjC,cAAI,CAAC,SAAS;AACV;AAAA,UACJ;AACA,cAAI,iBAAiB,OAAO,cAAc,WACpC,gBAAgB,SAAS,IAAI,SAAS,CAAC,IACvC,UAAU,KAAK,UAAU,GAAG;AAClC,iBAAO,aAAa,gBAAgB,SAAU,OAAO;AACjD,gBAAI,IAAI,MAAM;AACV;AAAA,YACJ;AACA,gBAAI,WAAW,gBAAgB,KAAK;AACpC,gBAAI,QAAQ,WAAW,QAAQ,MAAM,IAAI;AACzC,gBAAI,SAAS,GAAG;AACZ,uBAAS,SAASb,MAAK;AACvB;AAAA,YACJ;AACA,mBAAO,IAAI,QAAc,SAAU,SAAS;AACxC,kBAAI,UAAU,QAAQ,MAAM,WAAW,WAAY;AAC/C,yBAAS,SAASA,MAAK;AACvB,wBAAQ;AAAA,cACZ,GAAG,KAAK;AACR,kBAAI,iBAAiB,QAAQ,WAAY;AACrC,wBAAQ,MAAM,aAAa,OAAO;AAClC,wBAAQ;AAAA,cACZ,CAAC;AAAA,YACL,CAAC;AAAA,UACL,CAAC;AAAA,QACL,CAAC;AAAA,MACL;AAAA,IACJ,CAAC;AAAA,EACL,GAAG;AAAA,IACC,MAAM;AAAA,IACN,OAAO;AAAA,EACX,CAAsC;AAC1C;AAGO,SAAS,SAGT,YAIL;AACE,MAAI,QAAQ;AACZ,SAAO;AAAA,IACH,SAAU,OAAc,OAA0B;AAC9C,UAAIC,SAAQ,UAAU,KAAK;AAC3B,UAAI,CAACA,QAAO;AACR,eAAO;AAAA,MACX;AAGA,eAAS,IAAI,GAAG,IAAI,MAAM,QAAQ,KAAK;AACnC,QAAAA,OAAM,SAAS,KAAK,MAAM,CAAC,CAAC;AAAA,MAChC;AAEA,aAAOA;AAAA,IACX;AAAA,IACA;AAAA,MACI,MAAM;AAAA,MACN;AAAA,IACJ;AAAA,EACJ;AACJ;AAGO,SAAS,MACZE,OACF;AACE,SAAO;AAAA,IACH,SAAU,OAAc,OAA0B;AAC9C,UAAI,SAAS,UAAU,KAAK;AAC5B,UAAI,CAAC,QAAQ;AACT,eAAO;AAAA,MACX;AAEA,UAAIE,iBAAgB,KAAK,OAAO,eAAeF,KAAI;AAEnD,UAAI,aAAa;AAAA,QACb,eAAeE;AAAA,QACf,MAAM,MAAM;AAAA,QACZ,OAAO,CAAC;AAAA,QACR,MAAM,CAAC;AAAA,QACP,YAAY,CAAC;AAAA,QACb,UAAU,CAAC;AAAA,QACX,aAAa,CAAC;AAAA,QACd,SAAS;AAAA,MACb;AAEA,YAAM,QAAQA,cAAa,IAAI;AAE/B,aAAO;AAAA,IACX;AAAA,IACA;AAAA,MACI,MAAM;AAAA,MACN,MAAAF;AAAA,IACJ;AAAA,EACJ;AACJ;AAGO,SAAS,eACZ,eACF;AACE,MAAI,WAAW,MAAM,WAAW,CAAC;AAGjC,MAAIA,QAAO;AACX,MAAI,OAAO,kBAAkB,UAAU;AACnC,IAAAA,QAAO;AAAA,EACX,WAAW,OAAO,kBAAkB,YAAY;AAC5C,aAAS,QAAQ,aAAa;AAAA,EAClC;AACA,SAAO,SAAU,OAAc,OAA0B;AACrD,QAAI,QAAQ,UAAU,KAAK;AAC3B,QAAI,CAAC,OAAO;AACR,aAAO;AAAA,IACX;AACA,QAAI,CAACA,OAAM;AACP,MAAAA,QAAO,qBAAqB,OAAO,KAAK,MAAM,OAAO,EAAE;AAAA,IAC3D;AACA,QAAIE,iBAAgB,KAAK,MAAM,eAAeF,KAAI;AAClD,QAAI,UAAU;AAAA,MACV,eAAeE;AAAA,MACf,MAAM,MAAM;AAAA,MACZ,aAAa,CAAC;AAAA,IAClB;AACA,UAAM,QAAQA,cAAa,IAAI;AAC/B,UAAM,KAAK,OAAO;AAClB,UAAM,OAAO,OAAO,QAAQ;AAC5B,UAAM,IAAI;AACV,WAAO;AAAA,EACX;AACJ;AAGO,SAAS,YACZ,eACF;AAEE,MAAI,WAAW,MAAM,WAAW,CAAC;AAGjC,MAAIF,QAAO;AACX,MAAI,OAAO,kBAAkB,UAAU;AACnC,IAAAA,QAAO;AAAA,EACX,WAAW,OAAO,kBAAkB,YAAY;AAC5C,aAAS,QAAQ,aAAa;AAAA,EAClC;AACA,SAAO,SAAU,OAAc,OAA0B;AACrD,QAAI,QAAQ,UAAU,KAAK;AAC3B,QAAI,CAAC,OAAO;AACR,aAAO;AAAA,IACX;AACA,QAAI,CAACA,OAAM;AACP,MAAAA,QAAO,kBAAkB,OAAO,KAAK,MAAM,OAAO,EAAE;AAAA,IACxD;AACA,QAAIE,iBAAgB,KAAK,MAAM,eAAeF,KAAI;AAClD,QAAI,UAAU;AAAA,MACV,eAAeE;AAAA,MACf,MAAM,MAAM;AAAA,MACZ,aAAa,CAAC;AAAA,IAClB;AACA,UAAM,QAAQA,cAAa,IAAI;AAC/B,UAAM,KAAK,OAAO;AAClB,UAAM,OAAO,OAAO,QAAQ;AAC5B,UAAM,IAAI;AACV,WAAO;AAAA,EACX;AACJ;AAGO,SAAS,OAAO,eAA2D;AAE9E,MAAI,WAAW,MAAM,WAAW,CAAC;AACjC,MAAIF,QAAO;AAGX,MAAI,OAAO,kBAAkB,UAAU;AACnC,IAAAA,QAAO;AAAA,EACX,WAAW,OAAO,kBAAkB,YAAY;AAE5C,aAAS,QAAQ,aAAa;AAAA,EAClC;AAEA,SAAO,SAAU,OAAc,OAA0B;AAErD,QAAI,QAAQ,KAAK,OAAO,MAAM,YAAY,MAAM,KAAK;AACrD,QAAI,CAAC,OAAO;AACR,aAAO;AAAA,IACX;AAEA,QAAI,oBAAoB,KAAK,GAAG;AAC5B,UAAID,cAAa;AACjB,UAAIW,UAASX,YAAW;AACxB,UAAI,cAAc,UAAU,OAAOW,OAAM;AACzC,UAAI,CAAC,aAAa;AACd,eAAO;AAAA,MACX;AACA,UAAI,OAAO,YAAY,MAAM,MAAM,WAAW,GAAG;AAC7C,gBAAQ,KAAK,OAAO,MAAM,KAAK;AAAA,MACnC,WAAW,eAAe,WAAW,GAAG;AACpC,gBAAQ;AAAA,MACZ,OAAO;AACH,eAAO;AAAA,MACX;AAAA,IACJ;AACA,QAAI,CAAC,SAAS,CAAC,eAAe,KAAK,GAAG;AAClC,aAAO;AAAA,IACX;AACA,QAAIV,UAAS,IAAI;AACb,MAAAA,QAAO,YAAY,OAAO,KAAK,MAAM,OAAO,EAAE;AAAA,IAClD;AAEA,QAAIE,iBAAgB,KAAK,MAAM,eAAeF,KAAI;AAElD,QAAIW,UAAS;AAAA,MACT,eAAeT;AAAA,MACf,MAAM,MAAM;AAAA,MACZ,aAAa,CAAC;AAAA,IAClB;AACA,UAAM,QAAQA,cAAa,IAAIS;AAC/B,UAAM,KAAKA,OAAM;AACjB,UAAM,OAAO,OAAO,QAAQ;AAC5B,UAAM,IAAI;AAEV,WAAOA;AAAA,EACX;AACJ;AAGO,SAAS,YAAY,KAAcd,QAA0B;AAChE,WAASI,OAAM,IAAI,WAAW;AAC1B,QAAI,WAAW,IAAI,UAAUA,GAAE;AAC/B,aAAS,SAASJ,MAAK;AAAA,EAC3B;AACJ;AA4BO,SAAS,OACZG,UACG,UACL;AAEE,MAAI,QAAe;AAAA,IACf,eAAe,KAAK,KAAKA,KAAI;AAAA,IAC7B,MAAM,MAAM;AAAA,IACZ,SAAS,CAAC;AAAA,IACV,aAAa,CAAC;AAAA,IACd,OAAO,CAAC;AAAA,IACR,MAAM,CAAC;AAAA,IACP,YAAY,CAAC;AAAA,IACb,UAAU,CAAC;AAAA,IACX,SAAS;AAAA,IACT,eAAe,CAAC;AAAA,IAChB,aAAa,CAAC;AAAA,IACd,QAAQ,CAAC;AAAA,IACT,YAAY,CAAC;AAAA,IACb,YAAY,CAAC;AAAA,IACb,UAAU,CAAC;AAAA,EACf;AACA,QAAM,QAAQ,MAAM,aAAa,IAAI;AACrC,gBAAc,OAAO,YAAY;AACjC,gBAAc,OAAO,UAAU;AAC/B,gBAAc,OAAO,UAAU;AAC/B,MAAI,QAAQ,CAAC,KAAK;AAGlB,QAAM,OAAO,OAAO,QAAQ;AAG5B,SAAO,MAAM,SAAS,SAAS,GAAG;AAC9B,QAAI,kBAAkB,MAAM,SAAS,MAAM;AAC3C,UAAM,WAAW,CAAC;AAClB,aAAS,IAAI,GAAG,IAAI,gBAAgB,QAAQ,KAAK;AAC7C,sBAAgB,CAAC,EAAE,OAAO,KAAK;AAAA,IACnC;AAAA,EACJ;AAGA,uBAAqB,KAAK;AAG1B,qBAAmB,KAAK;AAExB,SAAO;AACX;AAGO,SAAS,WACZ,KACAH,WACG,KACC;AACJ,MAAI,CAAC,IAAI,QAAQ;AACb,WAAO,YAAY,KAAKA,MAAK;AAAA,EACjC;AACA,WAAS,IAAI,GAAG,IAAI,IAAI,QAAQ,KAAK;AACjC,QAAI,WAAW,IAAI,UAAU,IAAI,CAAC,CAAC;AACnC,QAAI,UAAU;AACV,eAAS,SAASA,MAAK;AAAA,IAC3B;AAAA,EACJ;AACJ;AAEO,SAAS,IACZ,eACA,qBACA,WACF;AACE,MAAI,WAAW,yBAAyB,UAClC,sBACA;AACN,MAAIG,QAAO,yBAAyB,UAC9B,YACC;AACP,MAAI,yBAAyB,WAAW,OAAO,cAAc,UAAU;AACnE,WAAO;AAAA,EACX;AACA,MAAI,CAACA,OAAM;AACP,WAAO;AAAA,EACX;AACA,MAAI,CAAC,UAAU;AACX,WAAO;AAAA,EACX;AACA,MAAI,UAAU,WAAW,QAAQ;AACjC,SAAO,UAAU,QAAQ,IAAIA,KAAI,IAAI;AACzC;AAEO,SAAS,IACZ,eACA,qBACA,kBACA,YACF;AACE,MAAI,WAAW,yBAAyB,UAClC,sBACA;AACN,MAAIA,QAAO,yBAAyB,UAC7B,mBACA;AACP,MAAI,QAAQ,yBAAyB,UAAU,aAAa;AAC5D,MAAI,CAAC,UAAU;AACX;AAAA,EACJ;AACA,MAAI,UAAU,WAAW,QAAQ;AACjC,MAAI,SAAS;AACT,YAAQ,IAAIA,OAAM,KAAK;AAAA,EAC3B;AACJ;AAEO,SAAS,KACZ,eACA,qBACA,cACG,MACL;AACE,MAAI,WAAW,yBAAyB,UAClC,sBACA;AACN,MAAIA,QAAO,yBAAyB,UAC9B,YACC;AACP,MAAI,CAAC,UAAU;AACX,WAAO;AAAA,EACX;AACA,MAAI,WAAW,MAAM,WAAW,yBAAyB,UAAU,IAAI,CAAC;AACxE,MAAI,UAAU,WAAW,QAAQ;AACjC,MAAI,SAAS;AACT,WAAO,QAAQ,KAAKA,OAAM,GAAG,QAAQ;AAAA,EACzC;AACJ;AAEO,SAAS,QAAQ,UAAoB,MAAqB;AAC7D,MAAI,UAAU,WAAW,QAAQ;AACjC,MAAI,SAAS;AACT,YAAQ,QAAQ,IAAI;AAAA,EACxB;AACJ;AAEO,SAAS,aAAa,eAAmC,eAAoC;AAChG,MAAI,WAAW,yBAAyB,UAAU,gBAAgB;AAClE,MAAI,UAAU,WAAW,QAAQ;AACjC,SAAO,UACD,QAAQ,aAAa,IACrB;AAAA,IACE,IAAI;AAAA,IACJ,eAAe;AAAA,IACf,OAAO;AAAA,IACP,YAAY,CAAC;AAAA,IACb,UAAU;AAAA,IACV,QAAQ,CAAC;AAAA,EACb;AACR;AAEO,SAAS,aACZ,KACA,UACA,YACa;AACb,SAAO,IAAI,QAAc,SAAU,SAAS;AACxC,QAAI,UAAU,WAAW,QAAQ;AACjC,QAAI,CAAC,SAAS;AACV,cAAQ;AACR;AAAA,IACJ;AACA,QAAI,YAAY;AACZ,cAAQ,QAAQ,aAAa,WAAW,MAAM,WAAY;AACtD,gBAAQ;AAAA,MACZ,CAAC;AACD;AAAA,IACJ;AACA,QAAI,CAAC,QAAQ,YAAY;AACrB,cAAQ;AACR;AAAA,IACJ;AACA,YAAQ,QAAQ,aAAa,YAAY,WAAY;AACjD,cAAQ;AAAA,IACZ,CAAC;AAAA,EACL,CAAC;AACL;AAEO,SAAS,cAAc,KAAc,UAAoBH,QAAmC;AAC/F,SAAO,IAAI,QAAc,SAAU,SAAS;AACxC,QAAI,UAAU,WAAW,QAAQ;AACjC,QAAI,CAAC,SAAS;AACV,cAAQ;AACR;AAAA,IACJ;AACA,YAAQ,QAAQ,cAAcA,OAAM,MAAM,WAAY;AAClD,cAAQ;AAAA,IACZ,CAAC;AAAA,EACL,CAAC;AACL;AAEO,SAAS,WACZ,KACA,UACA,WACa;AACb,SAAO,IAAI,QAAc,SAAU,SAAS;AACxC,QAAI,UAAU,WAAW,QAAQ;AACjC,QAAI,CAAC,SAAS;AACV,cAAQ;AACR;AAAA,IACJ;AACA,YAAQ,QAAQ,WAAW,WAAW,WAAY;AAC9C,cAAQ;AAAA,IACZ,CAAC;AAAA,EACL,CAAC;AACL;AAEO,SAAS,UACZ,KACA,UACA,WACa;AACb,SAAO,IAAI,QAAc,SAAU,SAAS;AACxC,QAAI,UAAU,WAAW,QAAQ;AACjC,QAAI,CAAC,SAAS;AACV,cAAQ;AACR;AAAA,IACJ;AACA,YAAQ,QAAQ,UAAU,WAAW,WAAY;AAC7C,cAAQ;AAAA,IACZ,CAAC;AAAA,EACL,CAAC;AACL;AAEO,SAAS,cACZ,KACA,UACA,iBACa;AACb,SAAO,IAAI,QAAc,SAAU,SAAS;AACxC,QAAI,UAAU,WAAW,QAAQ;AACjC,QAAI,CAAC,SAAS;AACV,cAAQ;AACR;AAAA,IACJ;AACA,YAAQ,QAAQ,YAAY,iBAAiB,WAAY;AACrD,cAAQ;AAAA,IACZ,CAAC;AAAA,EACL,CAAC;AACL;AAEO,SAAS,GAAG,UAAU;AACzB,MAAI,UAAU,WAAW,QAAQ;AACjC,SAAO,UAAU,QAAQ,KAAK;AAClC;AAEO,SAAS,cAAc,UAAU;AACpC,MAAI,UAAU,WAAW,QAAQ;AACjC,SAAO,UAAU,QAAQ,MAAM,gBAAgB;AACnD;AAEO,SAAS,KAAK,UAAU;AAC3B,MAAI,UAAU,WAAW,QAAQ;AACjC,SAAO,UAAU,QAAQ,OAAO;AACpC;AAEO,SAAS,MAAM,UAAU;AAC5B,MAAI,oBAAoB,OAAO;AAC3B,WAAO,SAAS,MAAM;AAAA,EAC1B;AACA,MAAI,UAAU,WAAW,QAAQ;AACjC,SAAO,UAAU,QAAQ,QAAQ;AACrC;AAGO,IAAM,QAAN,MAAM,OAAgE;AAAA,EACzE,YAAwB,CAAC;AAAA,EAChB;AAAA,EAET,eAAe,WAAsB;AACjC,aAAS,IAAI,GAAG,IAAI,UAAU,QAAQ,KAAK;AACvC,UAAI,WAAW,UAAU,CAAC;AAC1B,UAAI,CAAC,UAAU;AACX;AAAA,MACJ;AACA,UAAI,oBAAoB,QAAO;AAC3B,iBAAS,IAAI,GAAG,IAAI,SAAS,UAAU,QAAQ,KAAK;AAChD,eAAK,UAAU,KAAK,SAAS,UAAU,CAAC,CAAC;AAAA,QAC7C;AACA;AAAA,MACJ;AACA,WAAK,UAAU,KAAK,QAAoB;AAAA,IAC5C;AAAA,EACJ;AAAA,EAEA,SAASA,QAAuC;AAC5C,aAAS,IAAI,GAAG,IAAI,KAAK,UAAU,QAAQ,KAAK;AAC5C,WAAK,UAAU,CAAC,EAAE,SAASA,MAAK;AAAA,IACpC;AAAA,EACJ;AAAA,EAEA,IACIG,OACA,OACI;AACJ,aAAS,IAAI,GAAG,IAAI,KAAK,UAAU,QAAQ,KAAK;AAC5C,WAAK,UAAU,CAAC,EAAE,IAAIA,OAAM,KAAK;AAAA,IACrC;AAAA,EACJ;AAAA,EAEA,KACIA,UACG,MAC4C;AAC/C,QAAI,CAAC,KAAK,UAAU,QAAQ;AACxB,aAAO;AAAA,IACX;AACA,WAAO,KAAK,UAAU,CAAC,EAAE,KAAKA,OAAM,GAAG,IAAI;AAAA,EAC/C;AAAA,EAEA,OAAa;AACT,aAAS,IAAI,GAAG,IAAI,KAAK,UAAU,QAAQ,KAAK;AAC5C,WAAK,KAAK,UAAU,CAAC,CAAC;AAAA,IAC1B;AAAA,EACJ;AAAA,EAEA,QAAQ,MAAsB;AAC1B,aAAS,IAAI,GAAG,IAAI,KAAK,UAAU,QAAQ,KAAK;AAC5C,cAAQ,KAAK,UAAU,CAAC,GAAG,IAAI;AAAA,IACnC;AAAA,EACJ;AAAA,EAEA,eAAyC;AACrC,QAAI,UAAsB,CAAC;AAC3B,QAAI,WAAW;AACf,QAAI,SAA6B,CAAC;AAClC,QAAI,MAAgB,CAAC;AACrB,QAAI,iBAA2B,CAAC;AAChC,QAAI,SAAmB,CAAC;AACxB,aAAS,IAAI,GAAG,IAAI,KAAK,UAAU,QAAQ,KAAK;AAC5C,UAAI,WAAW,KAAK,UAAU,CAAC,EAAE,aAAa;AAC9C,cAAQ,KAAK,QAAQ;AACrB,kBAAY,SAAS;AACrB,UAAI,KAAK,SAAS,EAAE;AACpB,qBAAe,KAAK,SAAS,aAAa;AAC1C,aAAO,KAAK,SAAS,KAAK;AAC1B,eAAS,IAAI,GAAG,IAAI,SAAS,OAAO,QAAQ,KAAK;AAC7C,eAAO,KAAK,SAAS,OAAO,CAAC,CAAC;AAAA,MAClC;AAAA,IACJ;AACA,WAAO;AAAA,MACH,IAAI,IAAI,KAAK,GAAG;AAAA,MAChB,eAAe,eAAe,KAAK,GAAG;AAAA,MACtC,OAAO,OAAO,KAAK,KAAK;AAAA,MACxB,YAAY,CAAC;AAAA,MACb;AAAA,MACA;AAAA,MACA;AAAA,IACJ;AAAA,EACJ;AAAA,EAEA,QAAqB;AACjB,WAAO;AAAA,EACX;AACJ;AAKO,SAAS,YAAY;AACxB,SAAO,IAAI,MAAM,GAAG,MAAM,WAAW,CAAC,CAAC;AAC3C;AAEO,IAAM,WAAW,MAAM;AACvB,IAAM,cAAc,MAAM;AAC1B,IAAM,cAAc,MAAM;AAC1B,IAAM,aAAa,MAAM;AACzB,IAAM,iBAAiB,MAAM;AAC7B,IAAM,eAAe,MAAM;AAC3B,IAAM,gBAAgB,MAAM;AAC5B,IAAM,iBAAiB,MAAM;AAC7B,IAAM,iBAAiB,MAAM;AAC7B,IAAM,mBAAmB,MAAM;AAC/B,IAAM,gBAAgB,MAAM;AAC5B,IAAM,YAAY,MAAM;AACxB,IAAM,YAAY,MAAM;AACxB,IAAM,iBAAiB,MAAM;AAC7B,IAAM,eAAe,MAAM;AAC3B,IAAM,eAAe,MAAM;AAC3B,IAAM,YAAY,MAAM;AACxB,IAAM,WAAW,MAAM;AACvB,IAAM,YAAY,MAAM;AACxB,IAAM,sBAAsB,MAAM;AAClC,IAAM,kBAAkB,MAAM;AAC9B,IAAM,iBAAiB,MAAM;AAC7B,IAAM,gBAAgB,MAAM;AAC5B,IAAM,gBAAgB,MAAM;AAC5B,IAAM,kBAAkB,MAAM;AAC9B,IAAM,cAAc,MAAM;AAC1B,IAAM,iBAAiB,MAAM;AAC7B,IAAM,aAAa,MAAM;AACzB,IAAM,eAAe,MAAM;AAC3B,IAAM,kBAAkB,MAAM;AAC9B,IAAM,qBAAqB,MAAM;AACjC,IAAM,SAAS;AACf,IAAM,QAAQ;AACd,IAAM,QAAQ;AACd,IAAM,iBAAiB;AACvB,IAAM,cAAc;AACpB,IAAM,SAAS;AACf,IAAM,aAAa;AACnB,IAAM,UAAU;AAChB,IAAM,QAAQ;AACd,IAAM,KAAK;AACX,IAAM,SAAS;AACf,IAAM,QAAQ;AACd,IAAM,OAAO;AACb,IAAM,QAAQ;AACd,IAAM,QAAQ;AACd,IAAM,KAAK;AACX,IAAM,SAAS;AACf,IAAM,SAAS;AACf,IAAM,QAAQ;AACd,IAAM,OAAO;AACb,IAAM,WAAW;AACjB,IAAM,SAAS;AACf,IAAM,QAAQ;AACd,IAAM,QAAQ;AACd,IAAM,YAAY;AAClB,IAAM,YAAY;AAClB,IAAM,cAAc;AACpB,IAAM,aAAa;AACnB,IAAM,MAAM;AACZ,IAAM,MAAM;AACZ,IAAM,OAAO;AACb,IAAM,UAAU;AAChB,IAAM,eAAe;AACrB,IAAM,YAAY;AAClB,IAAM,MAAM;AACZ,IAAM,aAAa;AACnB,IAAM,KAAK;AACX,IAAM,gBAAgB;AACtB,IAAM,OAAO;AACb,IAAM,QAAQ;","names":["start","id","name","event","event","state","transition","name","id","qualifiedName","attribute","operation","guard","initial","activity","error","exit","source","choice"]}
|