@pumped-fn/core-next 0.5.77 → 0.5.78

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.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["executorSymbol: unique symbol","metaSymbol: unique symbol","meta","factory: Core.DependentFn<T, unknown>","fulfilled: any[]","rejected: unknown[]","mapped: R[]","messages: Record<Code, string>","context: Omit<ErrorContext, \"resolutionStage\">","context: ErrorContext","meta","AccessorImpl","extension","flowMeta: {\n depth: Accessor.AccessorWithDefault<number>;\n flowName: Accessor.Accessor<string | undefined>;\n parentFlowName: Accessor.Accessor<string | undefined>;\n isParallel: Accessor.AccessorWithDefault<boolean>;\n journal: Accessor.Accessor<ReadonlyMap<string, unknown>>;\n}","name: string","version: string","input: StandardSchemaV1<I>","output: StandardSchemaV1<S>","metas: Meta.Meta[]","executor","extensions: Extension.Extension[]","parent?: FlowContext","meta","accessor","flow","input","promise","definition","resolveSnapshot!: (snapshot: Flow.ExecutionData | undefined) => void","preset","result","hasInput","hasOutput","def","flow: typeof flowImpl & {\n define: typeof define;\n execute: typeof execute;\n}","errors.getExecutorName","errors.createFactoryError","errors.createSystemError","extension","errors.buildDependencyChain","errors.createDependencyError","r: Record<string, unknown>","accessor","value: T | undefined","ou","flowApi","flow","provide","derive","factory: Core.DependentFn<T, unknown>","name: Meta.MetaFn<string>"],"sources":["../src/types.ts","../src/ssch.ts","../src/meta.ts","../src/executor.ts","../src/promises.ts","../src/errors.ts","../src/accessor.ts","../src/flow.ts","../src/scope.ts","../src/extension.ts","../src/helpers.ts","../src/multi.ts","../src/index.ts"],"sourcesContent":["import { type Promised } from \"./promises\";\n\nexport const executorSymbol: unique symbol = Symbol.for(\n \"@pumped-fn/core/executor\"\n);\nexport const metaSymbol: unique symbol = Symbol.for(\"@pumped-fn/core/meta\");\n\nexport interface StandardSchemaV1<Input = unknown, Output = Input> {\n readonly \"~standard\": StandardSchemaV1.Props<Input, Output>;\n}\n\nexport declare namespace StandardSchemaV1 {\n export interface Props<Input = unknown, Output = Input> {\n readonly version: 1;\n readonly vendor: string;\n readonly validate: (\n value: unknown\n ) => Result<Output> | Promise<Result<Output>>;\n readonly types?: Types<Input, Output> | undefined;\n }\n\n export type Result<Output> = SuccessResult<Output> | FailureResult;\n\n export interface SuccessResult<Output> {\n readonly value: Output;\n readonly issues?: undefined;\n }\n\n export interface FailureResult {\n readonly issues: ReadonlyArray<Issue>;\n }\n\n export interface Issue {\n readonly message: string;\n readonly path?: ReadonlyArray<PropertyKey | PathSegment> | undefined;\n }\n\n export interface PathSegment {\n readonly key: PropertyKey;\n }\n\n export interface Types<Input = unknown, Output = Input> {\n readonly input: Input;\n readonly output: Output;\n }\n\n export type InferInput<Schema extends StandardSchemaV1> = NonNullable<\n Schema[\"~standard\"][\"types\"]\n >[\"input\"];\n\n export type InferOutput<Schema extends StandardSchemaV1> = NonNullable<\n Schema[\"~standard\"][\"types\"]\n >[\"output\"];\n}\n\nexport class SchemaError extends Error {\n public readonly issues: ReadonlyArray<StandardSchemaV1.Issue>;\n\n constructor(issues: ReadonlyArray<StandardSchemaV1.Issue>) {\n super(issues[0].message);\n this.name = \"SchemaError\";\n this.issues = issues;\n }\n}\n\nexport interface ErrorContext {\n readonly executorName?: string;\n readonly resolutionStage:\n | \"dependency-resolution\"\n | \"factory-execution\"\n | \"post-processing\"\n | \"validation\";\n readonly dependencyChain: string[];\n readonly scopeId?: string;\n readonly timestamp: number;\n readonly additionalInfo?: Record<string, unknown>;\n}\n\nexport class ExecutorResolutionError extends Error {\n public readonly context: ErrorContext;\n public readonly code: string;\n public readonly category: \"USER_ERROR\" | \"SYSTEM_ERROR\" | \"VALIDATION_ERROR\";\n\n constructor(\n message: string,\n context: ErrorContext,\n code: string,\n category: \"USER_ERROR\" | \"SYSTEM_ERROR\" | \"VALIDATION_ERROR\" = \"USER_ERROR\",\n options?: { cause?: unknown }\n ) {\n super(message, options);\n this.name = \"ExecutorResolutionError\";\n this.context = context;\n this.code = code;\n this.category = category;\n }\n}\n\nexport class FactoryExecutionError extends ExecutorResolutionError {\n constructor(\n message: string,\n context: Omit<ErrorContext, \"resolutionStage\">,\n code: string,\n options?: { cause?: unknown }\n ) {\n super(\n message,\n { ...context, resolutionStage: \"factory-execution\" },\n code,\n \"USER_ERROR\",\n options\n );\n this.name = \"FactoryExecutionError\";\n }\n}\n\nexport class DependencyResolutionError extends ExecutorResolutionError {\n public readonly missingDependency?: string;\n\n constructor(\n message: string,\n context: Omit<ErrorContext, \"resolutionStage\">,\n code: string,\n missingDependency?: string,\n options?: { cause?: unknown }\n ) {\n super(\n message,\n { ...context, resolutionStage: \"dependency-resolution\" },\n code,\n \"USER_ERROR\",\n options\n );\n this.name = \"DependencyResolutionError\";\n this.missingDependency = missingDependency;\n }\n}\n\nexport declare namespace Meta {\n export interface MetaContainer {\n metas: Meta[] | undefined;\n }\n\n export interface Meta<V = unknown> {\n readonly [metaSymbol]: true;\n readonly key: string | symbol;\n readonly schema: StandardSchemaV1<V>;\n readonly value: V;\n }\n\n export interface MetaFn<V> {\n (value: V): Meta<V>;\n readonly key: string | symbol;\n partial: <D extends Partial<V>>(d: D) => D;\n some: (source: MetaContainer | Meta[] | undefined) => V[];\n find: (source: MetaContainer | Meta[] | undefined) => V | undefined;\n get: (source: MetaContainer | Meta[] | undefined) => V;\n }\n\n export interface DefaultMetaFn<V> extends MetaFn<V> {\n (value?: V): Meta<V>;\n defaultValue: V;\n }\n}\n\nexport declare namespace Core {\n export type Output<T> = T | Promise<T>;\n export type GeneratorOutput<Y, T> =\n | T\n | Promise<T>\n | Generator<Y, T>\n | AsyncGenerator<Y, T>;\n\n export type NoDependencyFn<T> = (scope: Controller) => Output<T>;\n export type DependentFn<T, D> = (\n dependencies: D,\n scope: Controller\n ) => Output<T>;\n\n export type NoDependencyGeneratorFn<Y, T> = (\n scope: Controller\n ) => GeneratorOutput<Y, T>;\n export type DependentGeneratorFn<Y, T, D> = (\n dependencies: D,\n scope: Controller\n ) => GeneratorOutput<Y, T>;\n export type RecordLike = Record<string, unknown>;\n export type UExecutor = BaseExecutor<unknown>;\n\n export type Cleanup = () => void | Promised<void>;\n\n export type Controller = {\n cleanup: (cleanup: Cleanup) => void;\n release: () => Promised<void>;\n reload: () => Promised<void>;\n scope: Scope;\n };\n\n export type Kind = \"main\" | \"reactive\" | \"lazy\" | \"static\";\n\n export interface BaseExecutor<T> extends Meta.MetaContainer {\n [executorSymbol]: Kind;\n factory: NoDependencyFn<T> | DependentFn<T, unknown> | undefined;\n dependencies:\n | undefined\n | UExecutor\n | Array<UExecutor>\n | Record<string, UExecutor>;\n }\n\n export interface Executor<T> extends BaseExecutor<T> {\n [executorSymbol]: \"main\";\n factory: NoDependencyFn<T> | DependentFn<T, unknown>;\n readonly lazy: Lazy<T>;\n readonly reactive: Reactive<T>;\n readonly static: Static<T>;\n }\n\n export interface Reactive<T> extends BaseExecutor<T> {\n [executorSymbol]: \"reactive\";\n factory: undefined;\n readonly executor: Executor<T>;\n }\n\n export interface Lazy<T> extends BaseExecutor<Accessor<T>> {\n [executorSymbol]: \"lazy\";\n factory: undefined;\n readonly executor: Executor<T>;\n }\n\n export interface Static<T> extends BaseExecutor<Accessor<T>> {\n [executorSymbol]: \"static\";\n factory: undefined;\n readonly executor: Executor<T>;\n }\n\n export type PendingState<T> = { kind: \"pending\"; promise: Promise<T> };\n export type ResolvedState<T> = {\n kind: \"resolved\";\n value: T;\n promised?: Promised<T>;\n };\n export type RejectedState = {\n kind: \"rejected\";\n error: unknown;\n context?: ErrorContext;\n enhancedError?: ExecutorResolutionError;\n };\n\n export type ResolveState<T> =\n | PendingState<T>\n | ResolvedState<T>\n | RejectedState;\n\n export interface Accessor<T> extends Meta.MetaContainer {\n lookup(): undefined | ResolveState<T>;\n\n get(): T;\n resolve(force?: boolean): Promised<T>;\n release(soft?: boolean): Promised<void>;\n update(updateFn: T | ((current: T) => T)): Promised<void>;\n set(value: T): Promised<void>;\n subscribe(callback: (value: T) => void): Cleanup;\n }\n\n export interface Preset<T> {\n [executorSymbol]: \"preset\";\n executor: Executor<T>;\n value: T | Executor<T>;\n }\n\n export type ExecutorProxy<T> = T extends object\n ? {\n [K in keyof T]: T[K] extends (...args: infer Args) => infer R\n ? Executor<(...args: Args) => R>\n : never;\n }\n : never;\n\n export type NestedProxy<T> = T extends object\n ? {\n [K in keyof T]: T[K] extends (...args: infer Args) => infer R\n ? Executor<(...args: Args) => R>\n : T[K] extends object\n ? NestedProxy<T[K]>\n : never;\n }\n : never;\n\n export type InferOutput<T> = T extends Executor<infer U> | Reactive<infer U>\n ? Awaited<U>\n : T extends Lazy<infer U> | Static<infer U>\n ? Accessor<Awaited<U>>\n : T extends\n | ReadonlyArray<Core.BaseExecutor<unknown>>\n | Record<string, Core.BaseExecutor<unknown>>\n ? { [K in keyof T]: InferOutput<T[K]> }\n : never;\n\n export type Event = \"resolve\" | \"update\" | \"release\";\n export type Replacer = Preset<unknown>;\n type EventCallbackResult = void | Replacer;\n\n export type ChangeCallback = (\n event: \"resolve\" | \"update\",\n executor: Executor<unknown>,\n resolved: unknown,\n scope: Scope\n ) => EventCallbackResult | Promised<EventCallbackResult>;\n\n export type ReleaseCallback = (\n event: \"release\",\n executor: Executor<unknown>,\n scope: Scope\n ) => void | Promised<void>;\n\n export type ErrorCallback<T = unknown> = (\n error:\n | ExecutorResolutionError\n | FactoryExecutionError\n | DependencyResolutionError,\n executor: Executor<T>,\n scope: Scope\n ) => void | Promised<void>;\n\n export type GlobalErrorCallback = (\n error:\n | ExecutorResolutionError\n | FactoryExecutionError\n | DependencyResolutionError,\n executor: Executor<unknown>,\n scope: Scope\n ) => void | Promised<void>;\n\n export type WrapContext = {\n operation: \"resolve\" | \"update\";\n executor: Executor<unknown>;\n scope: Scope;\n };\n\n export type SingleDependencyLike = Core.BaseExecutor<unknown>;\n\n export type MultiDependencyLike =\n | ReadonlyArray<Core.BaseExecutor<unknown>>\n | Record<string, Core.BaseExecutor<unknown>>;\n\n export type DependencyLike = SingleDependencyLike | MultiDependencyLike;\n export type Destructed<T extends DependencyLike> =\n T extends SingleDependencyLike\n ? T\n : {\n [K in keyof T]: T[K];\n };\n\n export interface Scope extends Meta.MetaContainer {\n accessor<T>(executor: Core.Executor<T>, eager?: boolean): Accessor<T>;\n entries(): [Core.Executor<unknown>, Core.Accessor<unknown>][];\n registeredExecutors(): Core.Executor<unknown>[];\n\n resolve<T>(executor: Core.Executor<T>, force?: boolean): Promised<T>;\n resolveAccessor<T>(executor: Core.Executor<T>): Promised<Accessor<T>>;\n\n update<T>(\n executor: Executor<T>,\n updateFn: T | ((current: T) => T)\n ): Promised<void>;\n set<T>(executor: Executor<T>, value: T): Promised<void>;\n\n release(executor: Executor<any>, soft?: boolean): Promised<void>;\n\n dispose(): Promised<void>;\n\n onUpdate<T>(\n executor: Executor<T>,\n callback: (accessor: Accessor<T>) => void\n ): Cleanup;\n\n onChange(cb: ChangeCallback): Cleanup;\n onRelease(cb: ReleaseCallback): Cleanup;\n onError<T>(executor: Executor<T>, callback: ErrorCallback<T>): Cleanup;\n onError(callback: GlobalErrorCallback): Cleanup;\n\n useExtension(extension: Extension.Extension): Cleanup;\n\n exec<S, I = undefined>(\n flow: Core.Executor<Flow.Handler<S, I>>,\n input?: I,\n options?: {\n extensions?: Extension.Extension[];\n initialContext?: Array<\n [Accessor.Accessor<any> | Accessor.AccessorWithDefault<any>, any]\n >;\n presets?: Preset<unknown>[];\n meta?: Meta.Meta[];\n details?: false;\n }\n ): Promised<S>;\n\n exec<S, I = undefined>(\n flow: Core.Executor<Flow.Handler<S, I>>,\n input: I | undefined,\n options: {\n extensions?: Extension.Extension[];\n initialContext?: Array<\n [Accessor.Accessor<any> | Accessor.AccessorWithDefault<any>, any]\n >;\n presets?: Preset<unknown>[];\n meta?: Meta.Meta[];\n details: true;\n }\n ): Promised<Flow.ExecutionDetails<S>>;\n }\n}\n\nexport class FlowError extends Error {\n public readonly code: string;\n public readonly data?: unknown;\n\n constructor(\n message: string,\n code: string,\n data?: unknown,\n options?: { cause?: unknown }\n ) {\n super(message);\n this.name = \"FlowError\";\n this.code = code;\n this.data = data;\n if (options?.cause) {\n this.cause = options.cause;\n }\n }\n}\n\nexport class FlowValidationError extends FlowError {\n public readonly issues: StandardSchemaV1.Issue[];\n\n constructor(\n message: string,\n issues: StandardSchemaV1.Issue[],\n options?: { cause?: unknown }\n ) {\n super(message, \"VALIDATION_ERROR\", { issues }, options);\n this.name = \"FlowValidationError\";\n this.issues = issues;\n }\n}\n\nexport namespace Flow {\n export type Definition<S, I> = {\n name: string;\n input: StandardSchemaV1<I>;\n output: StandardSchemaV1<S>;\n version?: string;\n } & Meta.MetaContainer;\n\n export interface Handler<S, I> {\n (ctx: Context, input: I): S | Promised<S>;\n def: Definition<S, I>;\n }\n\n export type UFlow = Core.Executor<Handler<any, any>>;\n\n export interface Flow<I, O> extends Core.Executor<Handler<O, I>> {\n definition: Definition<O, I>;\n }\n\n export type InferInput<F> = F extends\n | Handler<any, infer I>\n | Core.Executor<Handler<any, infer I>>\n | Flow<infer I, any>\n ? I\n : never;\n\n export type InferOutput<F> = F extends\n | Handler<infer S, any>\n | Core.Executor<Handler<infer S, any>>\n | Flow<any, infer O>\n ? S extends never ? O : S\n : never;\n\n export type FlowRouterNode = { [key: string]: UFlow | FlowRouterNode };\n\n export type PathsToFlows<T> = T extends UFlow\n ? \"\"\n : T extends object\n ? {\n [K in keyof T]: K extends string\n ? PathsToFlows<T[K]> extends infer P\n ? P extends \"\"\n ? K\n : P extends string\n ? `${K}.${P}`\n : never\n : never\n : never;\n }[keyof T]\n : never;\n\n export type GetFlowFromPath<T, P extends string> = P extends `${infer First}.${infer Rest}`\n ? First extends keyof T\n ? GetFlowFromPath<T[First], Rest>\n : never\n : P extends keyof T\n ? T[P]\n : never;\n\n export type InferInputFromPath<Router, Path extends string> = GetFlowFromPath<Router, Path> extends infer F\n ? F extends UFlow\n ? InferInput<F>\n : never\n : never;\n\n export type InferOutputFromPath<Router, Path extends string> = GetFlowFromPath<Router, Path> extends infer F\n ? F extends UFlow\n ? InferOutput<F>\n : never\n : never;\n\n export type FlowRouterExecutor<Router extends FlowRouterNode> = <P extends PathsToFlows<Router>>(\n path: P,\n input: InferInputFromPath<Router, P>\n ) => Promised<InferOutputFromPath<Router, P>>;\n\n export type FnExecutor<I, O> = (input: I) => O | Promised<O>;\n\n export type MultiFnExecutor<Args extends readonly unknown[], O> = (\n ...args: Args\n ) => O | Promised<O>;\n\n export type AnyFnExecutor<O = unknown> =\n | FnExecutor<any, O>\n | MultiFnExecutor<any[], O>;\n\n export type Opt = {};\n\n export type ParallelResult<T> = {\n results: T;\n stats: {\n total: number;\n succeeded: number;\n failed: number;\n };\n };\n\n export type ParallelSettledResult<T> = {\n results: PromiseSettledResult<T>[];\n stats: {\n total: number;\n succeeded: number;\n failed: number;\n };\n };\n\n export type ParallelExecutionOptions = {\n mode?: \"race\" | \"all\" | \"all-settled\";\n errorMapper?: (error: unknown, index: number) => any;\n onItemComplete?: (result: any, index: number) => void;\n };\n\n export type C = {\n readonly scope: Core.Scope;\n readonly metas: Meta.Meta[] | undefined;\n\n get<T>(accessor: Accessor.Accessor<T> | Accessor.AccessorWithDefault<T>): T;\n find<T>(accessor: Accessor.Accessor<T>): T | undefined;\n find<T>(accessor: Accessor.AccessorWithDefault<T>): T;\n set<T>(\n accessor: Accessor.Accessor<T> | Accessor.AccessorWithDefault<T>,\n value: T\n ): void;\n\n run<T>(key: string, fn: () => Promised<T> | T): Promised<T>;\n run<T, P extends readonly unknown[]>(\n key: string,\n fn: (...args: P) => Promised<T> | T,\n ...params: P\n ): Promised<T>;\n\n exec<F extends UFlow>(\n flow: F,\n input: InferInput<F>\n ): Promised<InferOutput<F>>;\n\n exec<F extends UFlow>(\n key: string,\n flow: F,\n input: InferInput<F>\n ): Promised<InferOutput<F>>;\n\n parallel<T extends readonly Promised<any>[]>(\n promises: [...T]\n ): Promised<\n ParallelResult<{\n [K in keyof T]: T[K] extends Promised<infer R> ? R : never;\n }>\n >;\n\n parallelSettled<T extends readonly Promised<any>[]>(\n promises: [...T]\n ): Promised<\n ParallelSettledResult<{\n [K in keyof T]: T[K] extends Promised<infer R> ? R : never;\n }>\n >;\n };\n\n export type Context = C;\n\n export type ExecutionData = {\n readonly context: {\n get<T>(accessor: Accessor.Accessor<T> | Accessor.AccessorWithDefault<T>): T;\n find<T>(accessor: Accessor.Accessor<T>): T | undefined;\n find<T>(accessor: Accessor.AccessorWithDefault<T>): T;\n };\n };\n\n export type ExecutionDetails<T> =\n | { success: true; result: T; ctx: ExecutionData }\n | { success: false; error: unknown; ctx: ExecutionData };\n}\n\nexport namespace Extension {\n export type Operation =\n | {\n kind: \"resolve\";\n executor: Core.Executor<unknown>;\n scope: Core.Scope;\n operation: \"resolve\" | \"update\";\n }\n | {\n kind: \"execute\";\n flow: Flow.UFlow;\n definition: Flow.Definition<any, any>;\n input: unknown;\n flowName: string | undefined;\n depth: number;\n isParallel: boolean;\n parentFlowName: string | undefined;\n }\n | {\n kind: \"journal\";\n key: string;\n flowName: string;\n depth: number;\n isReplay: boolean;\n context: Accessor.DataStore;\n params?: readonly unknown[];\n }\n | {\n kind: \"subflow\";\n flow: Flow.UFlow;\n definition: Flow.Definition<any, any>;\n input: unknown;\n journalKey: string | undefined;\n parentFlowName: string | undefined;\n depth: number;\n context: Accessor.DataStore;\n }\n | {\n kind: \"parallel\";\n mode: \"parallel\" | \"parallelSettled\";\n promiseCount: number;\n depth: number;\n parentFlowName: string | undefined;\n context: Accessor.DataStore;\n };\n\n export interface Extension {\n name: string;\n\n init?(scope: Core.Scope): void | Promise<void> | Promised<void>;\n\n wrap?<T>(\n context: Accessor.DataStore,\n next: () => Promised<T>,\n operation: Operation\n ): Promise<T> | Promised<T>;\n\n onError?(\n error:\n | ExecutorResolutionError\n | FactoryExecutionError\n | DependencyResolutionError,\n scope: Core.Scope\n ): void;\n\n dispose?(scope: Core.Scope): void | Promise<void> | Promised<void>;\n }\n}\n\nexport declare namespace Accessor {\n export interface DataStore {\n get(key: unknown): unknown;\n set(key: unknown, value: unknown): unknown | undefined;\n }\n\n export type AccessorSource = DataStore | Meta.MetaContainer | Meta.Meta[];\n\n interface BaseAccessor<T> {\n readonly key: symbol;\n readonly schema: StandardSchemaV1<T>;\n }\n\n export interface Accessor<T> extends BaseAccessor<T> {\n get(source: AccessorSource): T;\n find(source: AccessorSource): T | undefined;\n set(source: DataStore, value: T): void;\n preset(value: T): [symbol, T];\n }\n\n export interface AccessorWithDefault<T> extends BaseAccessor<T> {\n readonly defaultValue: T;\n get(source: AccessorSource): T;\n find(source: AccessorSource): T;\n set(source: DataStore, value: T): void;\n preset(value: T): [symbol, T];\n }\n}\n\nexport namespace Multi {\n export type Key = unknown;\n export type MultiExecutor<T, K> = Core.Executor<(k: K) => Core.Accessor<T>> &\n ((key: K) => Core.Executor<T>) & {\n release: (scope: Core.Scope) => Promised<void>;\n id: Meta.MetaFn<unknown>;\n };\n\n export type DependentFn<T, K, D> = (\n dependencies: D,\n key: K,\n scope: Core.Controller\n ) => Core.Output<T>;\n\n export type Option<K> = {\n keySchema: StandardSchemaV1<K>;\n keyTransform?: (key: K) => unknown;\n };\n\n export type DeriveOption<K, D> = Option<K> & {\n dependencies: D;\n };\n}\n","import { SchemaError, StandardSchemaV1 } from \"./types\";\n\nexport function validate<TSchema extends StandardSchemaV1>(\n schema: TSchema,\n data: unknown\n): Awaited<StandardSchemaV1.InferOutput<TSchema>> {\n const result = schema[\"~standard\"].validate(data);\n\n if (\"then\" in result) {\n throw new Error(\"validating async is not supported\");\n }\n\n if (result.issues) {\n throw new SchemaError(result.issues);\n }\n return result.value as Awaited<StandardSchemaV1.InferOutput<TSchema>>;\n}\n\n\nexport function custom<T>(): StandardSchemaV1<T, T> {\n return {\n \"~standard\": {\n vendor: \"pumped-fn\",\n version: 1,\n validate: (value) => {\n return { value: value as T };\n },\n },\n };\n}\n","import { validate } from \"./ssch\";\nimport { metaSymbol, StandardSchemaV1, type Meta } from \"./types\";\n\nclass MetaFunction<V> {\n public readonly key: symbol;\n public readonly schema: StandardSchemaV1<V>;\n public readonly [metaSymbol] = true;\n\n constructor(key: string | symbol, schema: StandardSchemaV1<V>) {\n this.key = typeof key === \"string\" ? Symbol(key) : key;\n this.schema = schema;\n }\n\n __call(value: V): Meta.Meta<V> {\n return {\n [metaSymbol]: true,\n key: this.key,\n schema: this.schema,\n value,\n } as Meta.Meta<V>;\n }\n\n partial<D extends Partial<V>>(d: D): D {\n return Object.assign({}, this.__call({} as V), d);\n }\n\n some(source: Meta.MetaContainer | Meta.Meta[] | undefined): V[] {\n return findValues(source, this as unknown as Meta.MetaFn<unknown>) as V[];\n }\n\n find(source: Meta.MetaContainer | Meta.Meta[] | undefined): V | undefined {\n return findValue(source, this as unknown as Meta.MetaFn<unknown>) as\n | V\n | undefined;\n }\n\n get(source: Meta.MetaContainer | Meta.Meta[] | undefined): V {\n const values = findValues(\n source,\n this as unknown as Meta.MetaFn<unknown>\n ) as V[];\n if (values.length === 0) {\n throw new Error(`Meta value with key ${String(this.key)} not found`);\n }\n return values[0];\n }\n}\n\nexport const meta = <V>(\n key: string | symbol,\n schema: StandardSchemaV1<V>\n): Meta.MetaFn<V> => {\n const metaFunc = new MetaFunction(key, schema);\n\n const fn = ((value: V) => metaFunc.__call(value)) as Meta.MetaFn<V>;\n\n Object.defineProperty(fn, \"key\", {\n value: metaFunc.key,\n writable: false,\n configurable: false,\n });\n Object.defineProperty(fn, metaSymbol, {\n value: true,\n writable: false,\n configurable: false,\n });\n fn.partial = metaFunc.partial.bind(metaFunc);\n fn.some = metaFunc.some.bind(metaFunc);\n fn.find = metaFunc.find.bind(metaFunc);\n fn.get = metaFunc.get.bind(metaFunc);\n\n return fn;\n};\n\nexport function getValue<V>(meta: Meta.Meta<V>): Awaited<V> {\n return validate(meta.schema, meta.value);\n}\n\nexport function findValues<V = unknown>(\n executor: Meta.MetaContainer | Meta.Meta[] | undefined,\n meta: Meta.MetaFn<V>\n): V[] {\n if (!executor) return [];\n\n const metas = Array.isArray(executor) ? executor : executor.metas ?? [];\n\n const maybeMeta = metas.filter((m) => m.key === meta.key);\n return maybeMeta.map((m) => getValue(m as Meta.Meta<V>));\n}\n\nexport function findValue<V>(\n executor: Meta.MetaContainer | Meta.Meta[] | undefined,\n meta: Meta.MetaFn<V>\n): V | undefined {\n const values = findValues(executor, meta);\n return values.at(0);\n}\n","import { Core, executorSymbol, Meta } from \"./types\";\nimport type { Escapable } from \"./helpers\";\n\nexport function createExecutor<T>(\n factory: Core.NoDependencyFn<T> | Core.DependentFn<T, unknown>,\n dependencies:\n | undefined\n | Core.UExecutor\n | ReadonlyArray<Core.UExecutor>\n | Record<string, Core.UExecutor>,\n metas: Meta.Meta[] | undefined\n): Core.Executor<T> {\n const executor = {\n [executorSymbol]: \"main\",\n factory: (_: unknown, controller: Core.Controller) => {\n if (dependencies === undefined) {\n const f = factory as Core.NoDependencyFn<T>;\n return f(controller);\n }\n\n const f = factory as Core.DependentFn<T, unknown>;\n return f(_, controller);\n },\n dependencies,\n metas: metas,\n } as unknown as Core.Executor<T>;\n\n const lazyExecutor = {\n [executorSymbol]: \"lazy\",\n dependencies: undefined,\n executor,\n factory: undefined,\n metas: metas,\n } satisfies Core.Lazy<T>;\n\n const reactiveExecutor = {\n [executorSymbol]: \"reactive\",\n executor,\n factory: undefined,\n dependencies: undefined,\n metas: metas,\n } satisfies Core.Reactive<T>;\n\n const staticExecutor = {\n [executorSymbol]: \"static\",\n dependencies: undefined,\n factory: undefined,\n metas: metas,\n executor,\n } satisfies Core.Static<T>;\n\n Object.defineProperties(executor, {\n lazy: {\n value: lazyExecutor,\n writable: false,\n configurable: false,\n enumerable: false,\n },\n reactive: {\n value: reactiveExecutor,\n writable: false,\n configurable: false,\n enumerable: false,\n },\n static: {\n value: staticExecutor,\n writable: false,\n configurable: false,\n enumerable: false,\n },\n });\n\n return executor;\n}\n\nexport function isLazyExecutor(\n executor: Core.BaseExecutor<unknown>\n): executor is Core.Lazy<unknown> {\n return executor[executorSymbol] === \"lazy\";\n}\n\nexport function isReactiveExecutor(\n executor: Core.BaseExecutor<unknown>\n): executor is Core.Reactive<unknown> {\n return executor[executorSymbol] === \"reactive\";\n}\n\nexport function isStaticExecutor(\n executor: Core.BaseExecutor<unknown>\n): executor is Core.Static<unknown> {\n return executor[executorSymbol] === \"static\";\n}\n\nexport function isMainExecutor(\n executor: unknown\n): executor is Core.Executor<unknown> {\n return isExecutor(executor) && executor[executorSymbol] === \"main\";\n}\n\nexport function isExecutor<T>(input: unknown): input is Core.BaseExecutor<T> {\n return typeof input === \"object\" && input !== null && executorSymbol in input;\n}\n\nexport function isPreset(input: unknown): input is Core.Preset<unknown> {\n return (\n typeof input === \"object\" &&\n input !== null &&\n executorSymbol in input &&\n (input as Core.Preset<unknown>)[executorSymbol] === \"preset\"\n );\n}\n\nexport function provide<T>(\n factory: Core.NoDependencyFn<T>,\n ...metas: Meta.Meta[]\n): Core.Executor<T> {\n return createExecutor(factory, undefined, metas);\n}\n\nexport function derive<T, D extends Core.DependencyLike>(\n pdependencies: { [K in keyof D]: D[K] },\n pfactory: Core.DependentFn<T, Core.InferOutput<D>>,\n ...metas: Meta.Meta[]\n): Core.Executor<T> {\n const factory: Core.DependentFn<T, unknown> = (deps, ctl) =>\n pfactory(deps as Core.InferOutput<D>, ctl);\n\n const dependencies = pdependencies as\n | Core.UExecutor\n | ReadonlyArray<Core.UExecutor>\n | Record<string, Core.UExecutor>;\n\n return createExecutor(factory, dependencies, metas);\n}\n\nexport function preset<T>(\n e: Core.Executor<T> | Escapable<T>,\n v: T | Core.Executor<T>\n): Core.Preset<T> {\n const executor = isExecutor(e) ? e : e.escape();\n\n return {\n [executorSymbol]: \"preset\",\n value: v,\n executor,\n };\n}\n\n","import type { Core, Flow } from \"./types\";\n\nexport class Promised<T> implements PromiseLike<T> {\n private executionDataPromise?: Promise<Flow.ExecutionData | undefined>;\n private promise: Promise<T>;\n\n constructor(\n promise: Promise<T> | Promised<T>,\n executionDataPromise?: Promise<Flow.ExecutionData | undefined>\n ) {\n this.promise = promise instanceof Promised ? promise.promise : promise;\n this.executionDataPromise = executionDataPromise;\n }\n\n static create<T>(\n promise: Promise<T> | Promised<T>,\n executionDataPromise?: Promise<Flow.ExecutionData | undefined>\n ): Promised<T> {\n return new Promised(promise, executionDataPromise);\n }\n\n map<U>(fn: (value: T) => U | Promise<U>): Promised<U> {\n return Promised.create(this.promise.then(fn),\n this.executionDataPromise);\n }\n\n switch<U>(fn: (value: T) => Promised<U>): Promised<U> {\n return Promised.create(this.promise.then(fn),\n this.executionDataPromise);\n }\n\n mapError(fn: (error: unknown) => unknown): Promised<T> {\n return Promised.create(this.promise.catch((error) => {\n throw fn(error);\n }),\n this.executionDataPromise);\n }\n\n switchError(fn: (error: unknown) => Promised<T>): Promised<T> {\n return Promised.create(this.promise.catch(fn),\n this.executionDataPromise);\n }\n\n then<TResult1 = T, TResult2 = never>(\n onfulfilled?: ((value: T) => TResult1 | PromiseLike<TResult1>) | null | undefined,\n onrejected?: ((reason: unknown) => TResult2 | PromiseLike<TResult2>) | null | undefined\n ): Promised<TResult1 | TResult2> {\n return Promised.create(this.promise.then(onfulfilled, onrejected),\n this.executionDataPromise);\n }\n\n catch<TResult = never>(\n onrejected?: ((reason: unknown) => TResult | PromiseLike<TResult>) | null | undefined\n ): Promised<T | TResult> {\n return Promised.create(this.promise.catch(onrejected),\n this.executionDataPromise);\n }\n\n finally(onfinally?: (() => void) | null | undefined): Promised<T> {\n return Promised.create(this.promise.finally(onfinally),\n this.executionDataPromise);\n }\n\n toPromise(): Promise<T> {\n return this.promise;\n }\n\n async ctx(): Promise<Flow.ExecutionData | undefined> {\n if (!this.executionDataPromise) {\n return undefined;\n }\n return this.executionDataPromise;\n }\n\n async inDetails(): Promise<Flow.ExecutionDetails<T>> {\n return Promised.try(async () => {\n const [result, ctx] = await Promise.all([\n this.promise,\n this.executionDataPromise,\n ]);\n\n if (!ctx) {\n throw new Error(\n \"Execution context not available. inDetails() can only be used on flows executed via flow.execute()\"\n );\n }\n\n return { success: true as const, result, ctx };\n }).catch(async (error) => {\n const ctx = await this.executionDataPromise;\n\n if (!ctx) {\n throw new Error(\n \"Execution context not available. inDetails() can only be used on flows executed via flow.execute()\"\n );\n }\n\n return { success: false as const, error, ctx };\n });\n }\n\n static all<T extends readonly unknown[] | []>(\n values: T\n ): Promised<{ [K in keyof T]: Awaited<T[K]> }> {\n const flowPromises = values as readonly (Promised<unknown> | unknown)[];\n const promises = flowPromises.map((v) =>\n v instanceof Promised ? v.toPromise() : Promise.resolve(v)\n );\n\n return Promised.create(Promise.all(promises) as Promise<any>);\n }\n\n static race<T extends readonly unknown[] | []>(\n values: T\n ): Promised<Awaited<T[number]>> {\n const flowPromises = values as readonly (Promised<unknown> | unknown)[];\n const promises = flowPromises.map((v) =>\n v instanceof Promised ? v.toPromise() : Promise.resolve(v)\n );\n\n return Promised.create(Promise.race(promises) as Promise<any>);\n }\n\n static allSettled<T extends readonly unknown[] | []>(\n values: T\n ): Promised<{ [K in keyof T]: PromiseSettledResult<Awaited<T[K]>> }> {\n const flowPromises = values as readonly (Promised<unknown> | unknown)[];\n const promises = flowPromises.map((v) =>\n v instanceof Promised ? v.toPromise() : Promise.resolve(v)\n );\n\n return Promised.create(Promise.allSettled(promises) as Promise<any>);\n }\n\n static try<T>(fn: () => T | Promise<T>): Promised<T> {\n const promise = new Promise<T>((resolve, reject) => {\n try {\n const result = fn();\n resolve(result);\n } catch (error) {\n reject(error);\n }\n });\n\n return Promised.create(promise);\n }\n\n private static extractResults<U>(\n value: readonly PromiseSettledResult<U>[] | { results: readonly PromiseSettledResult<U>[] }\n ): readonly PromiseSettledResult<U>[] {\n if (Array.isArray(value)) {\n return value;\n }\n return (value as { results: readonly PromiseSettledResult<U>[] }).results;\n }\n\n private mapResults<R>(\n fn: (results: readonly PromiseSettledResult<any>[]) => R\n ): Promised<R> {\n return this.map((value: any) => {\n const results = Promised.extractResults(value);\n return fn(results);\n });\n }\n\n fulfilled<U>(\n this: Promised<readonly PromiseSettledResult<U>[]> | Promised<{ results: readonly PromiseSettledResult<any>[] }>\n ): Promised<any[]> {\n return this.mapResults((results) =>\n results\n .filter((r: any): r is PromiseFulfilledResult<any> => r.status === \"fulfilled\")\n .map((r: any) => r.value)\n );\n }\n\n rejected<U>(\n this: Promised<readonly PromiseSettledResult<U>[]> | Promised<{ results: readonly PromiseSettledResult<any>[] }>\n ): Promised<unknown[]> {\n return this.mapResults((results) =>\n results\n .filter((r: any): r is PromiseRejectedResult => r.status === \"rejected\")\n .map((r: any) => r.reason)\n );\n }\n\n partition<U>(\n this: Promised<readonly PromiseSettledResult<U>[]> | Promised<{ results: readonly PromiseSettledResult<any>[] }>\n ): Promised<{ fulfilled: any[]; rejected: unknown[] }> {\n return this.mapResults((results) => {\n const fulfilled: any[] = [];\n const rejected: unknown[] = [];\n\n for (const result of results) {\n if (result.status === \"fulfilled\") {\n fulfilled.push(result.value);\n } else {\n rejected.push(result.reason);\n }\n }\n\n return { fulfilled, rejected };\n });\n }\n\n firstFulfilled<U>(\n this: Promised<readonly PromiseSettledResult<U>[]> | Promised<{ results: readonly PromiseSettledResult<any>[] }>\n ): Promised<any> {\n return this.mapResults((results) => {\n const found = results.find((r: any): r is PromiseFulfilledResult<any> => r.status === \"fulfilled\");\n return found?.value;\n });\n }\n\n firstRejected<U>(\n this: Promised<readonly PromiseSettledResult<U>[]> | Promised<{ results: readonly PromiseSettledResult<any>[] }>\n ): Promised<unknown | undefined> {\n return this.mapResults((results) => {\n const found = results.find((r: any): r is PromiseRejectedResult => r.status === \"rejected\");\n return found?.reason;\n });\n }\n\n findFulfilled<U>(\n this: Promised<readonly PromiseSettledResult<U>[]> | Promised<{ results: readonly PromiseSettledResult<any>[] }>,\n predicate: (value: any, index: number) => boolean\n ): Promised<any> {\n return this.mapResults((results) => {\n let fulfilledIndex = 0;\n\n for (const result of results) {\n if (result.status === \"fulfilled\") {\n if (predicate(result.value, fulfilledIndex)) {\n return result.value;\n }\n fulfilledIndex++;\n }\n }\n\n return undefined;\n });\n }\n\n mapFulfilled<U, R>(\n this: Promised<readonly PromiseSettledResult<U>[]> | Promised<{ results: readonly PromiseSettledResult<any>[] }>,\n fn: (value: any, index: number) => R\n ): Promised<R[]> {\n return this.mapResults((results) => {\n const mapped: R[] = [];\n let fulfilledIndex = 0;\n\n for (const result of results) {\n if (result.status === \"fulfilled\") {\n mapped.push(fn(result.value, fulfilledIndex));\n fulfilledIndex++;\n }\n }\n\n return mapped;\n });\n }\n\n assertAllFulfilled<U>(\n this: Promised<readonly PromiseSettledResult<U>[]> | Promised<{ results: readonly PromiseSettledResult<any>[] }>,\n errorMapper?: (reasons: unknown[], fulfilledCount: number, totalCount: number) => Error\n ): Promised<any[]> {\n return this.mapResults((results) => {\n const fulfilled: any[] = [];\n const rejected: unknown[] = [];\n\n for (const result of results) {\n if (result.status === \"fulfilled\") {\n fulfilled.push(result.value);\n } else {\n rejected.push(result.reason);\n }\n }\n\n if (rejected.length > 0) {\n const error = errorMapper\n ? errorMapper(rejected, fulfilled.length, results.length)\n : new Error(\n `${rejected.length} of ${results.length} operations failed: ${rejected.map((r: unknown) => String(r)).join(\", \")}`\n );\n throw error;\n }\n\n return fulfilled;\n });\n }\n}\n","import {\n type ErrorContext,\n type Meta,\n ExecutorResolutionError,\n FactoryExecutionError,\n DependencyResolutionError,\n} from \"./types\";\nimport { name } from \"./index\";\n\nexport const codes = {\n FACTORY_EXECUTION_FAILED: \"F001\",\n FACTORY_THREW_ERROR: \"F002\",\n FACTORY_RETURNED_INVALID_TYPE: \"F003\",\n FACTORY_ASYNC_ERROR: \"F004\",\n\n DEPENDENCY_NOT_FOUND: \"D001\",\n CIRCULAR_DEPENDENCY: \"D002\",\n DEPENDENCY_RESOLUTION_FAILED: \"D003\",\n INVALID_DEPENDENCY_TYPE: \"D004\",\n DEPENDENCY_CHAIN_TOO_DEEP: \"D005\",\n\n SCOPE_DISPOSED: \"S001\",\n EXECUTOR_NOT_RESOLVED: \"S002\",\n INVALID_SCOPE_STATE: \"S003\",\n SCOPE_CLEANUP_FAILED: \"S004\",\n UPDATE_CALLBACK_ON_DISPOSING_SCOPE: \"S006\",\n\n SCHEMA_VALIDATION_FAILED: \"V001\",\n META_VALIDATION_FAILED: \"V002\",\n INPUT_TYPE_MISMATCH: \"V003\",\n OUTPUT_TYPE_MISMATCH: \"V004\",\n ASYNC_VALIDATION_NOT_SUPPORTED: \"V005\",\n\n INTERNAL_RESOLUTION_ERROR: \"SYS001\",\n CACHE_CORRUPTION: \"SYS002\",\n MEMORY_LEAK_DETECTED: \"SYS003\",\n PLUGIN_SYSTEM_ERROR: \"SYS004\",\n\n INVALID_EXECUTOR_CONFIG: \"C001\",\n MALFORMED_DEPENDENCIES: \"C002\",\n INVALID_FACTORY_SIGNATURE: \"C003\",\n PRESET_APPLICATION_FAILED: \"C004\",\n\n FLOW_EXECUTION_FAILED: \"FL001\",\n FLOW_CONTEXT_MISSING: \"FL002\",\n FLOW_PLUGIN_ERROR: \"FL003\",\n FLOW_INPUT_VALIDATION_FAILED: \"FL004\",\n FLOW_OUTPUT_VALIDATION_FAILED: \"FL005\",\n} as const;\n\nexport type Code = (typeof codes)[keyof typeof codes];\n\nconst messages: Record<Code, string> = {\n [codes.FACTORY_EXECUTION_FAILED]:\n \"Factory function execution failed for executor '{executorName}'. {cause}\",\n [codes.FACTORY_THREW_ERROR]:\n \"Factory function threw an error in executor '{executorName}': {originalMessage}\",\n [codes.FACTORY_RETURNED_INVALID_TYPE]:\n \"Factory function returned invalid type. Expected {expectedType}, got {actualType}\",\n [codes.FACTORY_ASYNC_ERROR]:\n \"Async factory function failed with error: {originalMessage}\",\n\n [codes.DEPENDENCY_NOT_FOUND]:\n \"Dependency '{dependencyName}' could not be resolved in the current scope\",\n [codes.CIRCULAR_DEPENDENCY]:\n \"Circular dependency detected in chain: {dependencyChain}\",\n [codes.DEPENDENCY_RESOLUTION_FAILED]:\n \"Failed to resolve dependencies for executor '{executorName}': {cause}\",\n [codes.INVALID_DEPENDENCY_TYPE]:\n \"Invalid dependency type provided. Expected Executor, got {actualType}\",\n [codes.DEPENDENCY_CHAIN_TOO_DEEP]:\n \"Dependency resolution chain exceeded maximum depth of {maxDepth}\",\n\n [codes.SCOPE_DISPOSED]: \"Cannot perform operation on disposed scope\",\n [codes.EXECUTOR_NOT_RESOLVED]:\n \"Executor '{executorName}' is not resolved. Call resolve() first or check if resolution failed\",\n [codes.INVALID_SCOPE_STATE]:\n \"Scope is in invalid state for this operation: {currentState}\",\n [codes.SCOPE_CLEANUP_FAILED]: \"Scope cleanup failed: {cause}\",\n [codes.UPDATE_CALLBACK_ON_DISPOSING_SCOPE]:\n \"Cannot register update callback on a disposing scope\",\n\n [codes.SCHEMA_VALIDATION_FAILED]:\n \"Schema validation failed: {validationMessage}\",\n [codes.META_VALIDATION_FAILED]:\n \"Meta validation failed for key '{metaKey}': {validationMessage}\",\n [codes.INPUT_TYPE_MISMATCH]:\n \"Input type validation failed: {validationMessage}\",\n [codes.OUTPUT_TYPE_MISMATCH]:\n \"Output type validation failed: {validationMessage}\",\n [codes.ASYNC_VALIDATION_NOT_SUPPORTED]:\n \"Async validation is not currently supported\",\n\n [codes.INTERNAL_RESOLUTION_ERROR]:\n \"Internal error during executor resolution. This is likely a bug in Pumped Functions\",\n [codes.CACHE_CORRUPTION]:\n \"Executor cache corruption detected. Scope integrity compromised\",\n [codes.MEMORY_LEAK_DETECTED]:\n \"Potential memory leak detected in scope {scopeId}\",\n [codes.PLUGIN_SYSTEM_ERROR]: \"Plugin system error: {pluginName} - {cause}\",\n\n [codes.INVALID_EXECUTOR_CONFIG]:\n \"Invalid executor configuration: {configError}\",\n [codes.MALFORMED_DEPENDENCIES]:\n \"Malformed dependency structure: {dependencyError}\",\n [codes.INVALID_FACTORY_SIGNATURE]:\n \"Factory function has invalid signature. Expected (dependencies, controller) => value\",\n [codes.PRESET_APPLICATION_FAILED]: \"Failed to apply preset: {presetError}\",\n\n [codes.FLOW_EXECUTION_FAILED]: \"Flow execution failed: {flowName}\",\n [codes.FLOW_CONTEXT_MISSING]: \"Flow execution context is missing or invalid\",\n [codes.FLOW_PLUGIN_ERROR]: \"Flow plugin '{pluginName}' failed: {cause}\",\n [codes.FLOW_INPUT_VALIDATION_FAILED]:\n \"Flow input validation failed: {validationMessage}\",\n [codes.FLOW_OUTPUT_VALIDATION_FAILED]:\n \"Flow output validation failed: {validationMessage}\",\n};\n\nexport function formatMessage(\n code: Code,\n context: Record<string, unknown> = {}\n): string {\n let message = messages[code];\n\n for (const [key, value] of Object.entries(context)) {\n const placeholder = `{${key}}`;\n message = message.replaceAll(placeholder, String(value));\n }\n\n return message;\n}\n\nexport function createFactoryError(\n code: Code,\n executorName: string,\n dependencyChain: string[],\n originalError?: unknown,\n additionalContext: Record<string, unknown> = {}\n): FactoryExecutionError {\n const context: Omit<ErrorContext, \"resolutionStage\"> = {\n executorName,\n dependencyChain,\n timestamp: Date.now(),\n additionalInfo: additionalContext,\n };\n\n const messageContext = {\n executorName,\n originalMessage:\n originalError instanceof Error\n ? originalError.message\n : String(originalError),\n cause:\n originalError instanceof Error\n ? originalError.message\n : String(originalError),\n ...additionalContext,\n };\n\n const message = formatMessage(code, messageContext);\n\n return new FactoryExecutionError(message, context, code, {\n cause: originalError,\n });\n}\n\nexport function createDependencyError(\n code: Code,\n executorName: string,\n dependencyChain: string[],\n missingDependency?: string,\n originalError?: unknown,\n additionalContext: Record<string, unknown> = {}\n): DependencyResolutionError {\n const context: Omit<ErrorContext, \"resolutionStage\"> = {\n executorName,\n dependencyChain,\n timestamp: Date.now(),\n additionalInfo: additionalContext,\n };\n\n const messageContext = {\n executorName,\n dependencyName: missingDependency,\n dependencyChain: dependencyChain.join(\" -> \"),\n cause:\n originalError instanceof Error\n ? originalError.message\n : String(originalError),\n ...additionalContext,\n };\n\n const message = formatMessage(code, messageContext);\n\n return new DependencyResolutionError(\n message,\n context,\n code,\n missingDependency,\n {\n cause: originalError,\n }\n );\n}\n\nexport function createSystemError(\n code: Code,\n executorName: string,\n dependencyChain: string[],\n originalError?: unknown,\n additionalContext: Record<string, unknown> = {}\n): ExecutorResolutionError {\n const context: ErrorContext = {\n executorName,\n dependencyChain,\n resolutionStage: \"post-processing\",\n timestamp: Date.now(),\n additionalInfo: additionalContext,\n };\n\n const messageContext = {\n executorName,\n cause:\n originalError instanceof Error\n ? originalError.message\n : String(originalError),\n ...additionalContext,\n };\n\n const message = formatMessage(code, messageContext);\n\n return new ExecutorResolutionError(message, context, code, \"SYSTEM_ERROR\", {\n cause: originalError,\n });\n}\n\nexport function getExecutorName(executor: unknown): string {\n const executorName = name.find(executor as Meta.MetaContainer);\n if (executorName) return executorName;\n\n if (executor && typeof executor === \"object\" && \"factory\" in executor) {\n const factory = executor.factory as { name?: string } | undefined;\n if (factory?.name && factory.name !== \"factory\") {\n return factory.name;\n }\n }\n\n if (executor && typeof executor === \"object\") {\n const kind =\n (executor as Record<symbol, unknown>)[\n Symbol.for(\"@pumped-fn/core/executor\")\n ] ?? \"unknown\";\n return `${String(kind)}-executor-${Math.random()\n .toString(36)\n .substring(2, 11)}`;\n }\n\n return \"unknown-executor\";\n}\n\nexport function buildDependencyChain(executorStack: unknown[]): string[] {\n return executorStack.map(getExecutorName);\n}\n","import { validate } from \"./ssch\";\nimport type { Accessor, Meta, StandardSchemaV1 } from \"./types\";\n\nfunction isDataStore(\n source: Accessor.AccessorSource\n): source is Accessor.DataStore {\n return (\n \"get\" in source &&\n \"set\" in source &&\n typeof source.get === \"function\" &&\n typeof source.set === \"function\"\n );\n}\n\nfunction isMetaArray(source: Accessor.AccessorSource): source is Meta.Meta[] {\n return Array.isArray(source);\n}\n\nfunction extractFromSource<T>(\n source: Accessor.AccessorSource,\n key: symbol,\n schema: StandardSchemaV1<T>\n): T | undefined {\n if (isDataStore(source)) {\n const value = source.get(key);\n return value === undefined ? undefined : validate(schema, value);\n }\n\n if (isMetaArray(source)) {\n const meta = source.find((m) => m.key === key);\n return meta ? validate(schema, meta.value) : undefined;\n }\n\n const metas = source.metas ?? [];\n const meta = metas.find((m) => m.key === key);\n return meta ? validate(schema, meta.value) : undefined;\n}\n\nfunction validateAndSet<T>(\n source: Accessor.DataStore,\n key: symbol,\n schema: StandardSchemaV1<T>,\n value: T\n): void {\n if (!isDataStore(source)) {\n throw new Error(\"set() can only be used with DataStore\");\n }\n const validated = validate(schema, value);\n source.set(key, validated);\n}\n\nfunction validateAndPreset<T>(\n key: symbol,\n schema: StandardSchemaV1<T>,\n value: T\n): [symbol, T] {\n const validated = validate(schema, value);\n return [key, validated];\n}\n\nclass AccessorImpl<T> implements Accessor.Accessor<T> {\n public readonly key: symbol;\n public readonly schema: StandardSchemaV1<T>;\n\n constructor(key: string | symbol, schema: StandardSchemaV1<T>) {\n this.key = typeof key === \"string\" ? Symbol(key) : key;\n this.schema = schema;\n }\n\n get(source: Accessor.AccessorSource): T {\n const value = extractFromSource(source, this.key, this.schema);\n if (value === undefined) {\n throw new Error(`Value not found for key: ${this.key.toString()}`);\n }\n return value;\n }\n\n find(source: Accessor.AccessorSource): T | undefined {\n return extractFromSource(source, this.key, this.schema);\n }\n\n set(source: Accessor.DataStore, value: T): void {\n validateAndSet(source, this.key, this.schema, value);\n }\n\n preset(value: T): [symbol, T] {\n return validateAndPreset(this.key, this.schema, value);\n }\n}\n\nclass AccessorWithDefaultImpl<T> implements Accessor.AccessorWithDefault<T> {\n public readonly key: symbol;\n public readonly schema: StandardSchemaV1<T>;\n public readonly defaultValue: T;\n\n constructor(\n key: string | symbol,\n schema: StandardSchemaV1<T>,\n defaultValue: T\n ) {\n this.key = typeof key === \"string\" ? Symbol(key) : key;\n this.schema = schema;\n this.defaultValue = validate(schema, defaultValue);\n }\n\n get(source: Accessor.AccessorSource): T {\n const value = extractFromSource(source, this.key, this.schema);\n return value ?? this.defaultValue;\n }\n\n find(source: Accessor.AccessorSource): T {\n const value = extractFromSource(source, this.key, this.schema);\n return value ?? this.defaultValue;\n }\n\n set(source: Accessor.DataStore, value: T): void {\n validateAndSet(source, this.key, this.schema, value);\n }\n\n preset(value: T): [symbol, T] {\n return validateAndPreset(this.key, this.schema, value);\n }\n}\n\nexport function accessor<T>(\n key: string | symbol,\n schema: StandardSchemaV1<T>\n): Accessor.Accessor<T>;\n\nexport function accessor<T>(\n key: string | symbol,\n schema: StandardSchemaV1<T>,\n defaultValue: T\n): Accessor.AccessorWithDefault<T>;\n\nexport function accessor<T>(\n key: string | symbol,\n schema: StandardSchemaV1<T>,\n defaultValue?: T\n): Accessor.Accessor<T> | Accessor.AccessorWithDefault<T> {\n if (defaultValue !== undefined) {\n return new AccessorWithDefaultImpl(key, schema, defaultValue);\n }\n return new AccessorImpl(key, schema);\n}\n","import type { Core, Extension, Flow, Meta, StandardSchemaV1 } from \"./types\";\nimport { createExecutor, isExecutor } from \"./executor\";\nimport { createScope } from \"./scope\";\nimport { validate } from \"./ssch\";\nimport { accessor } from \"./accessor\";\nimport type { Accessor } from \"./types\";\nimport { custom } from \"./ssch\";\nimport { meta } from \"./meta\";\nimport { Promised } from \"./promises\";\n\nfunction isErrorEntry(\n entry: unknown\n): entry is { __error: true; error: unknown } {\n return typeof entry === \"object\" && entry !== null && \"__error\" in entry;\n}\n\nfunction wrapWithExtensions<T>(\n extensions: Extension.Extension[] | undefined,\n baseExecutor: () => Promised<T>,\n dataStore: Accessor.DataStore,\n operation: Extension.Operation\n): () => Promised<T> {\n if (!extensions || extensions.length === 0) {\n return baseExecutor;\n }\n let executor = baseExecutor;\n for (let i = extensions.length - 1; i >= 0; i--) {\n const extension = extensions[i];\n if (extension.wrap) {\n const current = executor;\n executor = () => {\n const result = extension.wrap!(dataStore, current, operation);\n return result instanceof Promised ? result : Promised.create(result);\n };\n }\n }\n return executor;\n}\n\nconst flowDefinitionMeta = meta<Flow.Definition<any, any>>(\n \"flow.definition\",\n custom<Flow.Definition<any, any>>()\n);\n\nexport const flowMeta: {\n depth: Accessor.AccessorWithDefault<number>;\n flowName: Accessor.Accessor<string | undefined>;\n parentFlowName: Accessor.Accessor<string | undefined>;\n isParallel: Accessor.AccessorWithDefault<boolean>;\n journal: Accessor.Accessor<ReadonlyMap<string, unknown>>;\n} = {\n depth: accessor(\"flow.depth\", custom<number>(), 0),\n flowName: accessor(\"flow.name\", custom<string | undefined>()),\n parentFlowName: accessor(\"flow.parentName\", custom<string | undefined>()),\n isParallel: accessor(\"flow.isParallel\", custom<boolean>(), false),\n journal: accessor(\"flow.journal\", custom<ReadonlyMap<string, unknown>>()),\n};\n\nclass FlowDefinition<S, I> {\n constructor(\n public readonly name: string,\n public readonly version: string,\n public readonly input: StandardSchemaV1<I>,\n public readonly output: StandardSchemaV1<S>,\n public readonly metas: Meta.Meta[] = []\n ) {}\n\n handler(\n handlerFn: (ctx: Flow.Context, input: I) => Promise<S> | S\n ): Flow.Flow<I, S>;\n\n handler<D extends Core.DependencyLike>(\n dependencies: D,\n handlerFn: (\n deps: Core.InferOutput<D>,\n ctx: Flow.Context,\n input: I\n ) => Promise<S> | S\n ): Flow.Flow<I, S>;\n\n handler<D extends Core.DependencyLike>(\n dependenciesOrHandler:\n | D\n | ((ctx: Flow.Context, input: I) => Promise<S> | S),\n handlerFn?: (\n deps: Core.InferOutput<D>,\n ctx: Flow.Context,\n input: I\n ) => Promise<S> | S\n ): Flow.Flow<I, S> {\n if (typeof dependenciesOrHandler === \"function\") {\n const noDepsHandler = dependenciesOrHandler;\n const executor = createExecutor(\n () => {\n const flowHandler = async (ctx: Flow.Context, input: I) => {\n return noDepsHandler(ctx, input);\n };\n return flowHandler as Flow.Handler<S, I>;\n },\n undefined,\n [...this.metas, flowDefinitionMeta(this)]\n ) as Flow.Flow<I, S>;\n executor.definition = this;\n return executor;\n }\n const dependencies = dependenciesOrHandler;\n const dependentHandler = handlerFn!;\n const executor = createExecutor(\n (deps: unknown) => {\n const flowHandler = async (ctx: Flow.Context, input: I) => {\n return dependentHandler(deps as Core.InferOutput<D>, ctx, input);\n };\n\n return flowHandler as Flow.Handler<S, I>;\n },\n dependencies,\n [...this.metas, flowDefinitionMeta(this)]\n ) as Flow.Flow<I, S>;\n executor.definition = this;\n return executor;\n }\n}\n\ntype DefineConfig<S, I> = {\n name: string;\n version?: string;\n input: StandardSchemaV1<I>;\n output: StandardSchemaV1<S>;\n meta?: Meta.Meta[];\n};\n\ntype FlowConfigWithHandler<S, I> = DefineConfig<S, I> & {\n handler: (ctx: Flow.Context, input: I) => Promise<S> | S;\n};\n\ntype FlowConfigWithDeps<S, I, D extends Core.DependencyLike> = DefineConfig<\n S,\n I\n> & {\n dependencies: D;\n handler: (\n deps: Core.InferOutput<D>,\n ctx: Flow.Context,\n input: I\n ) => Promise<S> | S;\n};\n\ntype FlowConfigInferred<S, I> = {\n name: string;\n version?: string;\n input?: StandardSchemaV1<I>;\n output?: StandardSchemaV1<S>;\n meta?: Meta.Meta[];\n handler: (ctx: Flow.Context, input: I) => Promise<S> | S;\n};\n\ntype FlowConfigInferredWithDeps<S, I, D extends Core.DependencyLike> = {\n name: string;\n version?: string;\n input?: StandardSchemaV1<I>;\n output?: StandardSchemaV1<S>;\n meta?: Meta.Meta[];\n dependencies: D;\n handler: (\n deps: Core.InferOutput<D>,\n ctx: Flow.Context,\n input: I\n ) => Promise<S> | S;\n};\n\nfunction define<S, I>(config: DefineConfig<S, I>): FlowDefinition<S, I> {\n return new FlowDefinition(\n config.name,\n config.version || \"1.0.0\",\n config.input,\n config.output,\n config.meta\n );\n}\n\nclass FlowContext implements Flow.Context {\n private contextData = new Map<unknown, unknown>();\n private journal: Map<string, unknown> | null = null;\n public readonly scope: Core.Scope;\n private reversedExtensions: Extension.Extension[];\n public readonly metas: Meta.Meta[] | undefined;\n\n constructor(\n scope: Core.Scope,\n private extensions: Extension.Extension[],\n meta?: Meta.Meta[],\n private parent?: FlowContext\n ) {\n this.scope = scope;\n this.reversedExtensions = [...extensions].reverse();\n this.metas = meta;\n }\n\n resolve<T>(executor: Core.Executor<T>): Promised<T> {\n return this.scope.resolve(executor);\n }\n\n accessor<T>(executor: Core.Executor<T>): Core.Accessor<T> {\n return this.scope.accessor(executor);\n }\n\n private wrapWithExtensions<T>(\n baseExecutor: () => Promised<T>,\n operation: Extension.Operation\n ): () => Promised<T> {\n let executor = baseExecutor;\n for (const extension of this.reversedExtensions) {\n if (extension.wrap) {\n const current = executor;\n executor = () => {\n const result = extension.wrap!(this, current, operation);\n return result instanceof Promised ? result : Promised.create(result);\n };\n }\n }\n return executor;\n }\n\n initializeExecutionContext(flowName: string, isParallel: boolean = false) {\n const currentDepth = this.parent ? this.parent.get(flowMeta.depth) + 1 : 0;\n const parentFlowName = this.parent\n ? this.parent.find(flowMeta.flowName)\n : undefined;\n\n this.set(flowMeta.depth, currentDepth);\n this.set(flowMeta.flowName, flowName);\n this.set(flowMeta.parentFlowName, parentFlowName);\n this.set(flowMeta.isParallel, isParallel);\n }\n\n get<T>(accessor: Accessor.Accessor<T> | Accessor.AccessorWithDefault<T>): T;\n get<T>(accessorOrKey: unknown): T | unknown {\n if (\n typeof accessorOrKey === \"object\" &&\n accessorOrKey !== null &&\n \"get\" in accessorOrKey\n ) {\n const accessor = accessorOrKey as\n | Accessor.Accessor<T>\n | Accessor.AccessorWithDefault<T>;\n return accessor.get(this);\n }\n const key = accessorOrKey;\n if (this.contextData.has(key)) {\n return this.contextData.get(key);\n }\n if (this.parent) {\n return (this.parent.get as (key: unknown) => unknown)(key);\n }\n return undefined;\n }\n\n find<T>(accessor: Accessor.Accessor<T>): T | undefined;\n find<T>(accessor: Accessor.AccessorWithDefault<T>): T;\n find<T>(\n accessor: Accessor.Accessor<T> | Accessor.AccessorWithDefault<T>\n ): T | undefined {\n return accessor.find(this);\n }\n\n set<T>(\n accessor: Accessor.Accessor<T> | Accessor.AccessorWithDefault<T>,\n value: T\n ): void;\n set<T>(accessorOrKey: unknown, value: unknown): void | unknown {\n if (\n typeof accessorOrKey === \"object\" &&\n accessorOrKey !== null &&\n \"set\" in accessorOrKey\n ) {\n const accessor = accessorOrKey as\n | Accessor.Accessor<T>\n | Accessor.AccessorWithDefault<T>;\n accessor.set(this, value as T);\n return;\n }\n const key = accessorOrKey;\n this.contextData.set(key, value);\n return value;\n }\n\n run<T>(key: string, fn: () => Promise<T> | T): Promised<T>;\n run<T, P extends readonly unknown[]>(\n key: string,\n fn: (...args: P) => Promise<T> | T,\n ...params: P\n ): Promised<T>;\n\n run<T, P extends readonly unknown[]>(\n key: string,\n fn: ((...args: P) => Promise<T> | T) | (() => Promise<T> | T),\n ...params: P\n ): Promised<T> {\n if (!this.journal) {\n this.journal = new Map();\n }\n\n const flowName = this.find(flowMeta.flowName) || \"unknown\";\n const depth = this.get(flowMeta.depth);\n const journalKey = `${flowName}:${depth}:${key}`;\n\n const promise = (async () => {\n const journal = this.journal!;\n const isReplay = journal.has(journalKey);\n\n const executeCore = (): Promised<T> => {\n if (isReplay) {\n const entry = journal.get(journalKey);\n if (isErrorEntry(entry)) {\n throw entry.error;\n }\n return Promised.create(Promise.resolve(entry as T));\n }\n\n return Promised.try(async () => {\n const result =\n params.length > 0\n ? await (fn as (...args: P) => Promise<T> | T)(...params)\n : await (fn as () => Promise<T> | T)();\n journal.set(journalKey, result);\n return result;\n }).catch((error) => {\n journal.set(journalKey, { __error: true, error });\n throw error;\n });\n };\n\n const executor = this.wrapWithExtensions(executeCore, {\n kind: \"journal\",\n key,\n flowName,\n depth,\n isReplay,\n context: this,\n params: params.length > 0 ? params : undefined,\n });\n\n return executor();\n })();\n\n return Promised.create(promise);\n }\n\n exec<F extends Flow.UFlow>(\n flow: F,\n input: Flow.InferInput<F>\n ): Promised<Flow.InferOutput<F>>;\n\n exec<F extends Flow.UFlow>(\n key: string,\n flow: F,\n input: Flow.InferInput<F>\n ): Promised<Flow.InferOutput<F>>;\n\n exec<F extends Flow.UFlow>(\n keyOrFlow: string | F,\n flowOrInput: F | Flow.InferInput<F>,\n inputOrUndefined?: Flow.InferInput<F>\n ): Promised<Flow.InferOutput<F>> {\n if (typeof keyOrFlow === \"string\") {\n if (!this.journal) {\n this.journal = new Map();\n }\n\n const key = keyOrFlow;\n const flow = flowOrInput as F;\n const input = inputOrUndefined as Flow.InferInput<F>;\n\n const parentFlowName = this.find(flowMeta.flowName);\n const depth = this.get(flowMeta.depth);\n const flowName = this.find(flowMeta.flowName) || \"unknown\";\n const journalKey = `${flowName}:${depth}:${key}`;\n\n const promise = (async () => {\n const journal = this.journal!;\n const executeCore = (): Promised<Flow.InferOutput<F>> => {\n if (journal.has(journalKey)) {\n const entry = journal.get(journalKey);\n if (isErrorEntry(entry)) {\n throw entry.error;\n }\n return Promised.create(Promise.resolve(entry as Flow.InferOutput<F>));\n }\n\n return Promised.try(async () => {\n const handler = await this.scope.resolve(flow);\n const definition = flowDefinitionMeta.find(flow);\n if (!definition) {\n throw new Error(\"Flow definition not found in executor metadata\");\n }\n\n const childContext = new FlowContext(\n this.scope,\n this.extensions,\n undefined,\n this\n );\n childContext.initializeExecutionContext(definition.name, false);\n\n const result = (await this.executeWithExtensions<\n Flow.InferOutput<F>\n >(\n async (ctx) =>\n handler(ctx, input) as Promise<Flow.InferOutput<F>>,\n childContext,\n flow,\n input\n )) as Flow.InferOutput<F>;\n\n journal.set(journalKey, result);\n return result;\n }).catch((error) => {\n journal.set(journalKey, { __error: true, error });\n throw error;\n });\n };\n\n const definition = flowDefinitionMeta.find(flow);\n if (!definition) {\n throw new Error(\"Flow definition not found in executor metadata\");\n }\n\n const executor = this.wrapWithExtensions(executeCore, {\n kind: \"subflow\",\n flow,\n definition,\n input,\n journalKey,\n parentFlowName,\n depth,\n context: this,\n });\n\n return executor();\n })();\n\n return Promised.create(promise);\n }\n\n const flow = keyOrFlow as F;\n const input = flowOrInput as Flow.InferInput<F>;\n\n const promise = (async () => {\n const parentFlowName = this.find(flowMeta.flowName);\n const depth = this.get(flowMeta.depth);\n\n const executeCore = (): Promised<Flow.InferOutput<F>> => {\n return this.scope.resolve(flow).map(async (handler) => {\n const definition = flowDefinitionMeta.find(flow);\n if (!definition) {\n throw new Error(\"Flow definition not found in executor metadata\");\n }\n\n const childContext = new FlowContext(this.scope, this.extensions, undefined, this);\n childContext.initializeExecutionContext(definition.name, false);\n\n return (await this.executeWithExtensions<Flow.InferOutput<F>>(\n async (ctx) => handler(ctx, input) as Promise<Flow.InferOutput<F>>,\n childContext,\n flow,\n input\n )) as Flow.InferOutput<F>;\n });\n };\n\n const definition = flowDefinitionMeta.find(flow);\n if (!definition) {\n throw new Error(\"Flow definition not found in executor metadata\");\n }\n\n const executor = this.wrapWithExtensions(executeCore, {\n kind: \"subflow\",\n flow,\n definition,\n input,\n journalKey: undefined,\n parentFlowName,\n depth,\n context: this,\n });\n\n return executor();\n })();\n\n return Promised.create(promise);\n }\n\n parallel<T extends readonly Promised<any>[]>(\n promises: [...T]\n ): Promised<\n Flow.ParallelResult<{\n [K in keyof T]: T[K] extends Promised<infer R> ? R : never;\n }>\n > {\n const parentFlowName = this.find(flowMeta.flowName);\n const depth = this.get(flowMeta.depth);\n\n const promise = (async () => {\n const executeCore = (): Promised<{\n results: Flow.ParallelResult<{\n [K in keyof T]: T[K] extends Promised<infer R> ? R : never;\n }>[\"results\"];\n stats: { total: number; succeeded: number; failed: number };\n }> => {\n return Promised.create(Promise.all(promises).then((results) => ({\n results: results as Flow.ParallelResult<{\n [K in keyof T]: T[K] extends Promised<infer R> ? R : never;\n }>[\"results\"],\n stats: {\n total: results.length,\n succeeded: results.length,\n failed: 0,\n },\n })));\n };\n\n const executor = this.wrapWithExtensions(executeCore, {\n kind: \"parallel\",\n mode: \"parallel\",\n promiseCount: promises.length,\n depth,\n parentFlowName,\n context: this,\n });\n\n return executor();\n })();\n\n return Promised.create(promise);\n }\n\n parallelSettled<T extends readonly Promised<any>[]>(\n promises: [...T]\n ): Promised<\n Flow.ParallelSettledResult<{\n [K in keyof T]: T[K] extends Promised<infer R> ? R : never;\n }>\n > {\n const parentFlowName = this.find(flowMeta.flowName);\n const depth = this.get(flowMeta.depth);\n\n const promise = (async () => {\n const executeCore = (): Promised<{\n results: PromiseSettledResult<any>[];\n stats: { total: number; succeeded: number; failed: number };\n }> => {\n return Promised.create(Promise.allSettled(promises).then((results) => {\n const succeeded = results.filter((r) => r.status === \"fulfilled\").length;\n const failed = results.filter((r) => r.status === \"rejected\").length;\n \n return {\n results: results as PromiseSettledResult<any>[],\n stats: {\n total: results.length,\n succeeded,\n failed,\n },\n };\n }));\n };\n\n const executor = this.wrapWithExtensions(executeCore, {\n kind: \"parallel\",\n mode: \"parallelSettled\",\n promiseCount: promises.length,\n depth,\n parentFlowName,\n context: this,\n });\n\n return executor();\n })();\n\n return Promised.create(promise);\n }\n\n private executeWithExtensions<T>(\n handler: (ctx: FlowContext) => Promise<T>,\n context: FlowContext,\n flow: Flow.UFlow,\n input: unknown\n ): Promised<T> {\n const executeCore = (): Promised<T> => Promised.create(handler(context));\n const definition = flowDefinitionMeta.find(flow);\n if (!definition) {\n throw new Error(\"Flow definition not found in executor metadata\");\n }\n\n const executor = context.wrapWithExtensions(executeCore, {\n kind: \"execute\",\n flow,\n definition,\n input,\n flowName: context.find(flowMeta.flowName),\n depth: context.get(flowMeta.depth),\n isParallel: context.get(flowMeta.isParallel),\n parentFlowName: context.find(flowMeta.parentFlowName),\n });\n\n return executor();\n }\n\n createSnapshot(): Flow.ExecutionData {\n const contextDataSnapshot = new Map(this.contextData);\n if (this.journal) {\n contextDataSnapshot.set(flowMeta.journal.key, new Map(this.journal));\n }\n\n const dataStore = {\n get: (key: unknown) => contextDataSnapshot.get(key),\n set: (_key: unknown, _value: unknown) => {\n throw new Error(\"Cannot set values on execution snapshot\");\n },\n };\n\n return {\n context: {\n get<T>(\n accessor: Accessor.Accessor<T> | Accessor.AccessorWithDefault<T>\n ): T {\n return accessor.get(dataStore);\n },\n find<T>(\n accessor: Accessor.Accessor<T> | Accessor.AccessorWithDefault<T>\n ): T | undefined {\n return accessor.find(dataStore);\n },\n },\n };\n }\n}\n\nfunction execute<S, I>(\n flow: Core.Executor<Flow.Handler<S, I>> | Flow.Flow<I, S>,\n input: I,\n options: {\n scope?: Core.Scope;\n extensions?: Extension.Extension[];\n initialContext?: Array<\n [Accessor.Accessor<any> | Accessor.AccessorWithDefault<any>, any]\n >;\n presets?: Core.Preset<unknown>[];\n scopeMeta?: Meta.Meta[];\n meta?: Meta.Meta[];\n details: true;\n }\n): Promised<Flow.ExecutionDetails<S>>;\n\nfunction execute<S, I>(\n flow: Core.Executor<Flow.Handler<S, I>> | Flow.Flow<I, S>,\n input: I,\n options?: {\n scope?: Core.Scope;\n extensions?: Extension.Extension[];\n initialContext?: Array<\n [Accessor.Accessor<any> | Accessor.AccessorWithDefault<any>, any]\n >;\n presets?: Core.Preset<unknown>[];\n scopeMeta?: Meta.Meta[];\n meta?: Meta.Meta[];\n details?: false;\n }\n): Promised<S>;\n\nfunction execute<S, I>(\n flow: Core.Executor<Flow.Handler<S, I>> | Flow.Flow<I, S>,\n input: I,\n options?: {\n scope?: Core.Scope;\n extensions?: Extension.Extension[];\n initialContext?: Array<\n [Accessor.Accessor<any> | Accessor.AccessorWithDefault<any>, any]\n >;\n presets?: Core.Preset<unknown>[];\n scopeMeta?: Meta.Meta[];\n meta?: Meta.Meta[];\n details?: boolean;\n }\n): Promised<S> | Promised<Flow.ExecutionDetails<S>> {\n const scope = options?.scope || createScope({ meta: options?.scopeMeta });\n const shouldDisposeScope = !options?.scope;\n\n let resolveSnapshot!: (snapshot: Flow.ExecutionData | undefined) => void;\n const snapshotPromise = new Promise<Flow.ExecutionData | undefined>(\n (resolve) => {\n resolveSnapshot = resolve;\n }\n );\n\n const promise = (async () => {\n if (options?.presets) {\n for (const preset of options.presets) {\n if (isExecutor(preset.value)) {\n await scope.set(preset.executor, await scope.resolve(preset.value as Core.Executor<unknown>));\n } else {\n await scope.set(preset.executor, preset.value);\n }\n }\n }\n\n const context = new FlowContext(scope, options?.extensions || [], options?.meta);\n\n try {\n if (options?.initialContext) {\n for (const [accessor, value] of options.initialContext) {\n accessor.set(context, value);\n }\n }\n\n const executeCore = (): Promised<S> => {\n return scope.resolve(flow).map(async (handler) => {\n const definition = flowDefinitionMeta.find(flow);\n if (!definition) {\n throw new Error(\"Flow definition not found in executor metadata\");\n }\n const validated = validate(definition.input, input);\n\n context.initializeExecutionContext(definition.name, false);\n\n const result = await handler(context, validated);\n\n validate(definition.output, result);\n\n return result;\n });\n };\n\n const definition = flowDefinitionMeta.find(flow);\n if (!definition) {\n throw new Error(\"Flow definition not found in executor metadata\");\n }\n\n const executor = wrapWithExtensions(\n options?.extensions,\n executeCore,\n context,\n {\n kind: \"execute\",\n flow,\n definition,\n input,\n flowName: definition.name || context.find(flowMeta.flowName),\n depth: context.get(flowMeta.depth),\n isParallel: context.get(flowMeta.isParallel),\n parentFlowName: context.find(flowMeta.parentFlowName),\n }\n );\n\n const result = await executor();\n resolveSnapshot(context.createSnapshot());\n return result;\n } catch (error) {\n resolveSnapshot(context.createSnapshot());\n throw error;\n } finally {\n if (shouldDisposeScope) {\n await scope.dispose();\n }\n }\n })();\n\n if (options?.details) {\n const detailsPromise = Promised.try(async (): Promise<Flow.ExecutionDetails<S>> => {\n const [result, ctx] = await Promise.all([promise, snapshotPromise]);\n if (!ctx) {\n throw new Error(\"Execution context not available\");\n }\n return { success: true as const, result, ctx };\n }).catch(async (error) => {\n const ctx = await snapshotPromise;\n if (!ctx) {\n throw new Error(\"Execution context not available\");\n }\n return { success: false as const, error, ctx };\n });\n\n return Promised.create(detailsPromise, snapshotPromise);\n }\n\n return Promised.create(promise, snapshotPromise);\n}\n\nfunction flowImpl<I, S>(\n handler: (ctx: Flow.Context, input: I) => Promise<S> | S\n): Flow.Flow<I, S>;\n\nfunction flowImpl<I extends void, S>(\n handler: (ctx?: Flow.Context) => Promise<S> | S\n): Flow.Flow<I, S>;\n\nfunction flowImpl<D extends Core.DependencyLike, I, S>(\n dependencies: D,\n handler: (\n deps: Core.InferOutput<D>,\n ctx: Flow.Context,\n input: I\n ) => Promise<S> | S\n): Flow.Flow<I, S>;\n\nfunction flowImpl<S, I>(\n config: FlowConfigWithHandler<S, I>\n): Flow.Flow<I, S>;\n\nfunction flowImpl<S, I, D extends Core.DependencyLike>(\n config: FlowConfigWithDeps<S, I, D>\n): Flow.Flow<I, S>;\n\nfunction flowImpl<S = unknown, I = unknown>(\n config: FlowConfigInferred<S, I>\n): Flow.Flow<I, S>;\n\nfunction flowImpl<\n S = unknown,\n I = unknown,\n D extends Core.DependencyLike = never\n>(\n config: FlowConfigInferredWithDeps<S, I, D>\n): Flow.Flow<I, S>;\n\nfunction flowImpl<S, I>(\n definition: DefineConfig<S, I>,\n handler: (ctx: Flow.Context, input: I) => Promise<S> | S\n): Flow.Flow<I, S>;\n\nfunction flowImpl<S, I, D extends Core.DependencyLike>(\n definition: DefineConfig<S, I>,\n dependencies: D,\n handler: (\n deps: Core.InferOutput<D>,\n ctx: Flow.Context,\n input: I\n ) => Promise<S> | S\n): Flow.Flow<I, S>;\n\nfunction flowImpl<S, I, D extends Core.DependencyLike>(\n dependencies: D,\n definition: DefineConfig<S, I>,\n handler: (\n deps: Core.InferOutput<D>,\n ctx: Flow.Context,\n input: I\n ) => Promise<S> | S\n): Flow.Flow<I, S>;\n\nfunction flowImpl<S, I>(definition: DefineConfig<S, I>): FlowDefinition<S, I>;\n\nfunction flowImpl<S, I, D extends Core.DependencyLike>(\n definitionOrConfigOrDepsOrHandler:\n | DefineConfig<S, I>\n | FlowConfigWithHandler<S, I>\n | FlowConfigWithDeps<S, I, D>\n | FlowConfigInferred<S, I>\n | FlowConfigInferredWithDeps<S, I, D>\n | D\n | ((ctx: Flow.Context, input: I) => Promise<S> | S)\n | ((ctx?: Flow.Context) => Promise<S> | S),\n dependenciesOrHandler?:\n | D\n | ((ctx: Flow.Context, input: I) => Promise<S> | S)\n | ((\n deps: Core.InferOutput<D>,\n ctx: Flow.Context,\n input: I\n ) => Promise<S> | S),\n handlerFn?: (\n deps: Core.InferOutput<D>,\n ctx: Flow.Context,\n input: I\n ) => Promise<S> | S\n): Flow.Flow<I, S> | FlowDefinition<S, I> {\n if (typeof definitionOrConfigOrDepsOrHandler === \"function\") {\n const handler = definitionOrConfigOrDepsOrHandler as (\n ctx: Flow.Context,\n input: I\n ) => Promise<S> | S;\n const def = define({\n name: \"anonymous\",\n version: \"1.0.0\",\n input: custom<I>(),\n output: custom<S>(),\n });\n return def.handler(handler);\n }\n\n const firstArg = definitionOrConfigOrDepsOrHandler as\n | DefineConfig<S, I>\n | FlowConfigWithHandler<S, I>\n | FlowConfigWithDeps<S, I, D>\n | FlowConfigInferred<S, I>\n | FlowConfigInferredWithDeps<S, I, D>\n | D;\n\n if (\n !(\"name\" in firstArg) &&\n dependenciesOrHandler &&\n typeof dependenciesOrHandler === \"object\" &&\n \"name\" in dependenciesOrHandler &&\n handlerFn\n ) {\n const dependencies = firstArg as D;\n const definition = dependenciesOrHandler as unknown as Partial<\n DefineConfig<S, I>\n > & { name: string };\n\n const hasInput = \"input\" in definition && definition.input !== undefined;\n const hasOutput =\n \"output\" in definition && definition.output !== undefined;\n\n const def = define({\n name: definition.name,\n version: definition.version,\n input: hasInput ? definition.input! : custom<I>(),\n output: hasOutput ? definition.output! : custom<S>(),\n meta: definition.meta,\n });\n\n return def.handler(dependencies, handlerFn);\n }\n\n if (typeof dependenciesOrHandler === \"function\" && !(\"name\" in firstArg)) {\n const dependencies = firstArg as D;\n const handler = dependenciesOrHandler as (\n deps: Core.InferOutput<D>,\n ctx: Flow.Context,\n input: I\n ) => Promise<S> | S;\n const def = define({\n name: \"anonymous\",\n version: \"1.0.0\",\n input: custom<I>(),\n output: custom<S>(),\n });\n return def.handler(dependencies, handler);\n }\n\n if (\"handler\" in firstArg) {\n const config = firstArg as\n | FlowConfigWithHandler<S, I>\n | FlowConfigWithDeps<S, I, D>\n | FlowConfigInferred<S, I>\n | FlowConfigInferredWithDeps<S, I, D>;\n\n const hasInput = \"input\" in config && config.input !== undefined;\n const hasOutput = \"output\" in config && config.output !== undefined;\n\n const def = define({\n name: config.name,\n version: config.version,\n input: hasInput ? config.input! : custom<I>(),\n output: hasOutput ? config.output! : custom<S>(),\n meta: config.meta,\n });\n\n if (\"dependencies\" in config) {\n const depsConfig = config as\n | FlowConfigWithDeps<S, I, D>\n | FlowConfigInferredWithDeps<S, I, D>;\n return def.handler(depsConfig.dependencies, depsConfig.handler);\n } else {\n const handlerConfig = config as\n | FlowConfigWithHandler<S, I>\n | FlowConfigInferred<S, I>;\n return def.handler(handlerConfig.handler);\n }\n }\n\n const definition = firstArg as\n | DefineConfig<S, I>\n | Partial<DefineConfig<S, I>>;\n\n const hasInput = \"input\" in definition && definition.input !== undefined;\n const hasOutput =\n \"output\" in definition && definition.output !== undefined;\n\n const def = define({\n name: definition.name || \"anonymous\",\n version: definition.version,\n input: hasInput ? definition.input! : custom<I>(),\n output: hasOutput ? definition.output! : custom<S>(),\n meta: definition.meta,\n });\n\n if (!dependenciesOrHandler) {\n return def;\n }\n\n if (typeof dependenciesOrHandler === \"function\") {\n return def.handler(\n dependenciesOrHandler as (ctx: Flow.Context, input: I) => Promise<S> | S\n );\n } else {\n return def.handler(dependenciesOrHandler as D, handlerFn!);\n }\n}\n\nexport const flow: typeof flowImpl & {\n define: typeof define;\n execute: typeof execute;\n} = Object.assign(flowImpl, {\n define: define,\n execute: execute,\n});\n","import {\n isLazyExecutor,\n isReactiveExecutor,\n isStaticExecutor,\n isMainExecutor,\n isExecutor,\n isPreset,\n} from \"./executor\";\nimport {\n type Accessor,\n Core,\n Extension,\n Meta,\n ExecutorResolutionError,\n FactoryExecutionError,\n DependencyResolutionError,\n ErrorContext,\n type Flow,\n} from \"./types\";\nimport { Promised } from \"./promises\";\nimport * as errors from \"./errors\";\nimport { flow as flowApi } from \"./flow\";\n\ntype CacheEntry = {\n accessor: Core.Accessor<unknown>;\n value?: Core.ResolveState<unknown>;\n};\n\ntype UE = Core.Executor<unknown>;\ntype OnUpdateFn = (accessor: Core.Accessor<unknown>) => void | Promise<void>;\n\ninterface ReplacerResult {\n factory: Core.NoDependencyFn<unknown> | Core.DependentFn<unknown, unknown>;\n dependencies:\n | undefined\n | Core.UExecutor\n | Core.UExecutor[]\n | Record<string, Core.UExecutor>;\n immediateValue?: unknown;\n}\n\nclass AccessorImpl implements Core.Accessor<unknown> {\n public metas: Meta.Meta[] | undefined;\n private scope: BaseScope;\n private requestor: UE;\n private currentPromise: Promise<unknown> | null = null;\n private currentPromised: Promised<unknown> | null = null;\n private cachedResolvedPromised: Promised<unknown> | null = null;\n public resolve: (force?: boolean) => Promised<unknown>;\n\n constructor(scope: BaseScope, requestor: UE, metas: Meta.Meta[] | undefined) {\n this.scope = scope;\n this.requestor = requestor;\n this.metas = metas;\n\n this.resolve = this.createResolveFunction();\n\n const existing = this.scope[\"cache\"].get(requestor);\n if (!existing || !existing.accessor) {\n this.scope[\"cache\"].set(requestor, {\n accessor: this,\n value: existing?.value,\n });\n }\n }\n\n private async resolveCore(): Promise<unknown> {\n const { factory, dependencies, immediateValue } =\n this.processReplacer();\n\n if (immediateValue !== undefined) {\n await new Promise<void>((resolve) => queueMicrotask(resolve));\n\n this.scope[\"cache\"].set(this.requestor, {\n accessor: this,\n value: {\n kind: \"resolved\",\n value: immediateValue,\n promised: Promised.create(Promise.resolve(immediateValue)),\n },\n });\n\n return immediateValue;\n }\n\n const controller = this.createController();\n\n const resolvedDependencies = await this.scope[\"~resolveDependencies\"](\n dependencies,\n this.requestor\n );\n\n const result = await this.executeFactory(\n factory,\n resolvedDependencies,\n controller\n );\n\n const processedResult = await this.processChangeEvents(result);\n\n this.scope[\"cache\"].set(this.requestor, {\n accessor: this,\n value: {\n kind: \"resolved\",\n value: processedResult,\n promised: Promised.create(Promise.resolve(processedResult)),\n },\n });\n\n this.scope[\"~removeFromResolutionChain\"](this.requestor);\n this.currentPromise = null;\n this.currentPromised = null;\n this.cachedResolvedPromised = null;\n\n return processedResult;\n }\n\n private async resolveWithErrorHandling(): Promise<unknown> {\n try {\n return await this.resolveCore();\n } catch (error) {\n const { enhancedError, errorContext, originalError } =\n this.enhanceResolutionError(error);\n\n this.scope[\"cache\"].set(this.requestor, {\n accessor: this,\n value: {\n kind: \"rejected\",\n error: originalError,\n context: errorContext,\n enhancedError: enhancedError,\n },\n });\n\n this.scope[\"~removeFromResolutionChain\"](this.requestor);\n this.scope[\"~triggerError\"](enhancedError, this.requestor);\n this.currentPromise = null;\n this.currentPromised = null;\n\n throw enhancedError;\n }\n }\n\n private createResolveFunction() {\n return (force: boolean = false): Promised<unknown> => {\n this.scope[\"~ensureNotDisposed\"]();\n\n const entry = this.scope[\"cache\"].get(this.requestor);\n const cached = entry?.value;\n\n if (cached && !force) {\n return this.handleCachedState(cached);\n }\n\n if (this.currentPromise && !force) {\n if (!this.currentPromised) {\n this.currentPromised = Promised.create(this.currentPromise);\n }\n return this.currentPromised;\n }\n\n this.scope[\"~addToResolutionChain\"](this.requestor, this.requestor);\n\n this.currentPromise = this.resolveWithErrorHandling();\n\n this.scope[\"cache\"].set(this.requestor, {\n accessor: this,\n value: { kind: \"pending\", promise: this.currentPromise },\n });\n\n this.currentPromised = Promised.create(this.currentPromise);\n return this.currentPromised;\n };\n }\n\n private handleCachedState(\n cached: Core.ResolveState<unknown>\n ): Promised<unknown> | never {\n if (cached.kind === \"resolved\") {\n if (cached.promised) {\n return cached.promised;\n }\n if (!this.cachedResolvedPromised) {\n this.cachedResolvedPromised = Promised.create(Promise.resolve(cached.value));\n }\n return this.cachedResolvedPromised;\n }\n\n if (cached.kind === \"rejected\") {\n throw cached.error;\n }\n\n if (!this.currentPromised) {\n this.currentPromised = Promised.create(cached.promise);\n }\n return this.currentPromised;\n }\n\n private processReplacer(): ReplacerResult {\n const replacer = this.scope[\"initialValues\"].find(\n (item) => item.executor === this.requestor\n );\n\n if (!replacer) {\n return {\n factory: this.requestor.factory!,\n dependencies: this.requestor.dependencies,\n };\n }\n\n const value = replacer.value;\n\n if (!isExecutor(value)) {\n return {\n factory: this.requestor.factory!,\n dependencies: this.requestor.dependencies,\n immediateValue: value,\n };\n }\n\n return {\n factory: value.factory!,\n dependencies: value.dependencies,\n };\n }\n\n private async executeFactory(\n factory: Core.NoDependencyFn<unknown> | Core.DependentFn<unknown, unknown>,\n resolvedDependencies: unknown,\n controller: Core.Controller\n ): Promise<unknown> {\n try {\n const factoryResult =\n factory.length >= 2\n ? (factory as Core.DependentFn<unknown, unknown>)(\n resolvedDependencies,\n controller\n )\n : (factory as Core.NoDependencyFn<unknown>)(controller);\n\n if (factoryResult instanceof Promise) {\n try {\n return await factoryResult;\n } catch (asyncError) {\n const executorName = errors.getExecutorName(this.requestor);\n const dependencyChain = [executorName];\n\n throw errors.createFactoryError(\n errors.codes.FACTORY_ASYNC_ERROR,\n executorName,\n dependencyChain,\n asyncError,\n {\n dependenciesResolved: resolvedDependencies !== undefined,\n factoryType: typeof factory,\n isAsyncFactory: true,\n }\n );\n }\n }\n\n return factoryResult;\n } catch (syncError) {\n const executorName = errors.getExecutorName(this.requestor);\n const dependencyChain = [executorName];\n\n throw errors.createFactoryError(\n errors.codes.FACTORY_THREW_ERROR,\n executorName,\n dependencyChain,\n syncError,\n {\n dependenciesResolved: resolvedDependencies !== undefined,\n factoryType: typeof factory,\n isAsyncFactory: false,\n }\n );\n }\n }\n\n private async processChangeEvents(result: unknown): Promise<unknown> {\n let currentValue = result;\n const events = this.scope[\"onEvents\"].change;\n\n for (const event of events) {\n const updated = await event(\n \"resolve\",\n this.requestor,\n currentValue,\n this.scope\n );\n\n if (updated !== undefined && updated.executor === this.requestor) {\n currentValue = updated.value;\n }\n }\n\n return currentValue;\n }\n\n private enhanceResolutionError(error: unknown): {\n enhancedError: ExecutorResolutionError;\n errorContext: ErrorContext;\n originalError: unknown;\n } {\n if (\n error &&\n typeof error === \"object\" &&\n \"context\" in error &&\n \"code\" in error &&\n error.context &&\n error.code\n ) {\n return {\n enhancedError: error as ExecutorResolutionError,\n errorContext: error.context as ErrorContext,\n originalError: error,\n };\n }\n\n const executorName = errors.getExecutorName(this.requestor);\n const dependencyChain = [executorName];\n\n const enhancedError = errors.createSystemError(\n errors.codes.INTERNAL_RESOLUTION_ERROR,\n executorName,\n dependencyChain,\n error,\n {\n errorType: error?.constructor?.name || \"UnknownError\",\n resolutionPhase: \"post-factory\",\n hasOriginalContext: false,\n }\n );\n\n return {\n enhancedError,\n errorContext: enhancedError.context,\n originalError: error,\n };\n }\n\n lookup(): undefined | Core.ResolveState<unknown> {\n this.scope[\"~ensureNotDisposed\"]();\n const cacheEntry = this.scope[\"cache\"].get(this.requestor);\n if (!cacheEntry) {\n return undefined;\n }\n return cacheEntry.value || undefined;\n }\n\n get(): unknown {\n this.scope[\"~ensureNotDisposed\"]();\n const cacheEntry = this.scope[\"cache\"].get(this.requestor)?.value;\n\n if (!cacheEntry || cacheEntry.kind === \"pending\") {\n throw new Error(\"Executor is not resolved\");\n }\n\n if (cacheEntry.kind === \"rejected\") {\n throw cacheEntry.enhancedError || cacheEntry.error;\n }\n\n return cacheEntry.value;\n }\n\n release(soft: boolean = false): Promised<void> {\n return this.scope.release(this.requestor, soft);\n }\n\n update(\n updateFn: unknown | ((current: unknown) => unknown)\n ): Promised<void> {\n return this.scope.update(this.requestor, updateFn);\n }\n\n set(value: unknown): Promised<void> {\n return this.scope.update(this.requestor, value);\n }\n\n subscribe(cb: (value: unknown) => void): Core.Cleanup {\n this.scope[\"~ensureNotDisposed\"]();\n return this.scope.onUpdate(this.requestor, cb);\n }\n\n private createController(): Core.Controller {\n return {\n cleanup: (cleanup: Core.Cleanup) => {\n const currentSet =\n this.scope[\"cleanups\"].get(this.requestor) ?? new Set();\n this.scope[\"cleanups\"].set(this.requestor, currentSet);\n currentSet.add(cleanup);\n },\n release: () => this.scope.release(this.requestor),\n reload: () => this.scope.resolve(this.requestor, true).map(() => undefined),\n scope: this.scope,\n };\n }\n}\n\nfunction getExecutor(e: Core.UExecutor): Core.Executor<unknown> {\n if (isLazyExecutor(e) || isReactiveExecutor(e) || isStaticExecutor(e)) {\n return e.executor;\n }\n\n return e as Core.Executor<unknown>;\n}\n\nclass BaseScope implements Core.Scope {\n protected disposed: boolean = false;\n protected cache: Map<UE, CacheEntry> = new Map();\n protected cleanups: Map<UE, Set<Core.Cleanup>> = new Map<\n UE,\n Set<Core.Cleanup>\n >();\n protected onUpdateCallbacks: Map<UE, Set<OnUpdateFn>> = new Map<\n UE,\n Set<OnUpdateFn>\n >();\n protected onUpdateExecutors: Map<UE, Set<UE>> = new Map<UE, Set<UE>>();\n protected onEvents: {\n readonly change: Set<Core.ChangeCallback>;\n readonly release: Set<Core.ReleaseCallback>;\n readonly error: Set<Core.GlobalErrorCallback>;\n } = {\n change: new Set<Core.ChangeCallback>(),\n release: new Set<Core.ReleaseCallback>(),\n error: new Set<Core.GlobalErrorCallback>(),\n } as const;\n protected onErrors: Map<UE, Set<Core.ErrorCallback<unknown>>> = new Map<\n UE,\n Set<Core.ErrorCallback<unknown>>\n >();\n private isDisposing = false;\n\n private resolutionChain: Map<UE, Set<UE>> = new Map();\n\n protected extensions: Extension.Extension[] = [];\n private reversedExtensions: Extension.Extension[] = [];\n protected registry: Core.Executor<unknown>[] = [];\n protected initialValues: Core.Preset<unknown>[] = [];\n public metas: Meta.Meta[] | undefined;\n\n private static readonly emptyDataStore: Accessor.DataStore = {\n get: () => undefined,\n set: () => undefined,\n };\n\n constructor(options?: ScopeOption) {\n if (options?.registry) {\n this.registry = [...options.registry];\n }\n\n if (options?.initialValues) {\n this.initialValues = options.initialValues;\n }\n\n if (options?.meta) {\n this.metas = options.meta;\n }\n\n if (options?.extensions) {\n for (const extension of options.extensions) {\n this.useExtension(extension);\n }\n }\n }\n\n protected \"~checkCircularDependency\"(\n executor: UE,\n resolvingExecutor: UE\n ): void {\n const currentChain = this.resolutionChain.get(resolvingExecutor);\n if (currentChain && currentChain.has(executor)) {\n const chainArray = Array.from(currentChain);\n const dependencyChain = errors.buildDependencyChain(chainArray);\n\n throw errors.createDependencyError(\n errors.codes.CIRCULAR_DEPENDENCY,\n errors.getExecutorName(executor),\n dependencyChain,\n errors.getExecutorName(executor),\n undefined,\n {\n circularPath:\n dependencyChain.join(\" -> \") +\n \" -> \" +\n errors.getExecutorName(executor),\n detectedAt: errors.getExecutorName(resolvingExecutor),\n }\n );\n }\n }\n\n protected \"~addToResolutionChain\"(executor: UE, resolvingExecutor: UE): void {\n const currentChain =\n this.resolutionChain.get(resolvingExecutor) || new Set();\n currentChain.add(executor);\n this.resolutionChain.set(resolvingExecutor, currentChain);\n }\n\n protected \"~removeFromResolutionChain\"(executor: UE): void {\n this.resolutionChain.delete(executor);\n }\n\n protected \"~propagateResolutionChain\"(\n fromExecutor: UE,\n toExecutor: UE\n ): void {\n const fromChain = this.resolutionChain.get(fromExecutor);\n if (fromChain) {\n const newChain = new Set(fromChain);\n newChain.add(fromExecutor);\n this.resolutionChain.set(toExecutor, newChain);\n }\n }\n\n protected async \"~triggerCleanup\"(e: UE): Promise<void> {\n const cs = this.cleanups.get(e);\n if (cs) {\n for (const c of Array.from(cs.values()).reverse()) {\n await c();\n }\n }\n }\n\n protected async \"~triggerUpdate\"(e: UE): Promise<void> {\n const ce = this.cache.get(e);\n if (!ce) {\n throw new Error(\"Executor is not yet resolved\");\n }\n\n const executors = this.onUpdateExecutors.get(e);\n if (executors) {\n for (const t of Array.from(executors.values())) {\n if (this.cleanups.has(t)) {\n this[\"~triggerCleanup\"](t);\n }\n\n const a = this.cache.get(t);\n await a!.accessor.resolve(true);\n\n if (this.onUpdateExecutors.has(t) || this.onUpdateCallbacks.has(t)) {\n await this[\"~triggerUpdate\"](t);\n }\n }\n }\n\n const callbacks = this.onUpdateCallbacks.get(e);\n if (callbacks) {\n for (const cb of Array.from(callbacks.values())) {\n await cb(ce.accessor);\n }\n }\n }\n\n protected async \"~triggerError\"(\n error:\n | ExecutorResolutionError\n | FactoryExecutionError\n | DependencyResolutionError,\n executor: UE\n ): Promise<void> {\n const executorCallbacks = this.onErrors.get(executor);\n if (executorCallbacks) {\n for (const callback of Array.from(executorCallbacks.values())) {\n try {\n await callback(error, executor, this);\n } catch (callbackError) {\n console.error(\"Error in error callback:\", callbackError);\n }\n }\n }\n\n for (const callback of Array.from(this.onEvents.error.values())) {\n try {\n await callback(error, executor, this);\n } catch (callbackError) {\n console.error(\"Error in global error callback:\", callbackError);\n }\n }\n\n for (const extension of this.extensions) {\n if (extension.onError) {\n try {\n extension.onError(error, this);\n } catch (extensionError) {\n console.error(\"Error in extension error handler:\", extensionError);\n }\n }\n }\n }\n\n protected async \"~resolveExecutor\"(\n ie: Core.UExecutor,\n ref: UE\n ): Promise<unknown> {\n const e = getExecutor(ie);\n\n this[\"~checkCircularDependency\"](e, ref);\n\n this[\"~propagateResolutionChain\"](ref, e);\n\n const a = this[\"~makeAccessor\"](e);\n\n if (isLazyExecutor(ie)) {\n return a;\n }\n\n if (isReactiveExecutor(ie)) {\n const c = this.onUpdateExecutors.get(ie.executor) ?? new Set();\n this.onUpdateExecutors.set(ie.executor, c);\n c.add(ref);\n }\n\n await a.resolve(false);\n if (isStaticExecutor(ie)) {\n return a;\n }\n\n return a.get();\n }\n\n protected async \"~resolveDependencies\"(\n ie:\n | undefined\n | Core.UExecutor\n | Core.UExecutor[]\n | Record<string, Core.UExecutor>,\n ref: UE\n ): Promise<undefined | unknown | unknown[] | Record<string, unknown>> {\n if (ie === undefined) {\n return undefined;\n }\n\n if (isExecutor(ie)) {\n return this[\"~resolveExecutor\"](ie, ref);\n }\n\n if (Array.isArray(ie)) {\n return await Promise.all(\n ie.map((item) => this[\"~resolveDependencies\"](item, ref))\n );\n }\n\n const keys = Object.keys(ie);\n const promises = keys.map((k) => this[\"~resolveDependencies\"](ie[k], ref));\n const values = await Promise.all(promises);\n\n const r: Record<string, unknown> = Object.create(null);\n keys.forEach((k, i) => {\n r[k] = values[i];\n });\n\n return r;\n }\n\n protected \"~ensureNotDisposed\"(): void {\n if (this.disposed) {\n throw new Error(\"Scope is disposed\");\n }\n }\n\n private wrapWithExtensions<T>(\n baseExecutor: () => Promised<T>,\n dataStore: Accessor.DataStore,\n operation: Extension.Operation\n ): () => Promised<T> {\n let executor = baseExecutor;\n for (const extension of this.reversedExtensions) {\n if (extension.wrap) {\n const current = executor;\n executor = () => {\n const result = extension.wrap!<T>(dataStore, current, operation);\n return result instanceof Promised ? result : Promised.create(result);\n };\n }\n }\n return executor;\n }\n\n protected \"~makeAccessor\"(e: Core.UExecutor): Core.Accessor<unknown> {\n let requestor =\n isLazyExecutor(e) || isReactiveExecutor(e) || isStaticExecutor(e)\n ? e.executor\n : (e as UE);\n\n const cachedAccessor = this.cache.get(requestor);\n if (cachedAccessor && cachedAccessor.accessor) {\n return cachedAccessor.accessor;\n }\n\n const accessor = new AccessorImpl(this, requestor, e.metas);\n return accessor;\n }\n\n accessor<T>(executor: Core.Executor<T>): Core.Accessor<T> {\n this[\"~ensureNotDisposed\"]();\n return this[\"~makeAccessor\"](executor) as Core.Accessor<T>;\n }\n\n entries(): Array<[UE, Core.Accessor<unknown>]> {\n return Array.from(this.cache.entries()).map(([executor, entry]) => {\n return [executor, entry.accessor];\n });\n }\n\n registeredExecutors(): Core.Executor<unknown>[] {\n this[\"~ensureNotDisposed\"]();\n return [...this.registry];\n }\n\n resolve<T>(\n executor: Core.Executor<T>,\n force: boolean = false\n ): Promised<T> {\n this[\"~ensureNotDisposed\"]();\n\n const coreResolve = (): Promised<T> => {\n const accessor = this[\"~makeAccessor\"](executor);\n return accessor.resolve(force).map(() => accessor.get() as T);\n };\n\n const resolver = this.wrapWithExtensions(\n coreResolve,\n BaseScope.emptyDataStore,\n {\n kind: \"resolve\",\n executor,\n scope: this,\n operation: \"resolve\",\n }\n );\n\n return resolver();\n }\n\n resolveAccessor<T>(\n executor: Core.Executor<T>,\n force: boolean = false\n ): Promised<Core.Accessor<T>> {\n this[\"~ensureNotDisposed\"]();\n const accessor = this[\"~makeAccessor\"](executor);\n return accessor.resolve(force).map(() => accessor as Core.Accessor<T>);\n }\n\n update<T>(\n e: Core.Executor<T>,\n u: T | ((current: T) => T)\n ): Promised<void> {\n if (this.isDisposing) {\n return Promised.create(Promise.resolve());\n }\n\n this[\"~ensureNotDisposed\"]();\n\n const coreUpdate = (): Promised<void> => {\n return Promised.create((async () => {\n this[\"~triggerCleanup\"](e);\n const accessor = this[\"~makeAccessor\"](e);\n \n let value: T | undefined;\n \n if (typeof u === \"function\") {\n const fn = u as (current: T) => T;\n value = fn(accessor.get() as T);\n } else {\n value = u;\n }\n \n const events = this.onEvents.change;\n for (const event of events) {\n const updated = await event(\"update\", e, value, this);\n if (updated !== undefined && e === updated.executor) {\n value = updated.value as T;\n }\n }\n\n this.cache.set(e, {\n accessor,\n value: {\n kind: \"resolved\",\n value,\n promised: Promised.create(Promise.resolve(value)),\n },\n });\n \n await this[\"~triggerUpdate\"](e);\n })());\n };\n\n const baseUpdater = (): Promised<T> => {\n return coreUpdate().map(() => this.accessor(e).get() as T);\n };\n\n const updater = this.wrapWithExtensions(baseUpdater, BaseScope.emptyDataStore, {\n kind: \"resolve\",\n operation: \"update\",\n executor: e,\n scope: this,\n });\n\n return updater().map(() => undefined);\n }\n\n set<T>(e: Core.Executor<T>, value: T): Promised<void> {\n return this.update(e, value);\n }\n\n release(e: Core.Executor<unknown>, s: boolean = false): Promised<void> {\n this[\"~ensureNotDisposed\"]();\n\n const coreRelease = async (): Promise<void> => {\n const ce = this.cache.get(e);\n if (!ce && !s) {\n throw new Error(\"Executor is not yet resolved\");\n }\n\n await this[\"~triggerCleanup\"](e);\n const events = this.onEvents.release;\n for (const event of events) {\n await event(\"release\", e, this);\n }\n\n const executors = this.onUpdateExecutors.get(e);\n if (executors) {\n for (const t of Array.from(executors.values())) {\n await this.release(t, true);\n }\n this.onUpdateExecutors.delete(e);\n }\n\n this.onUpdateCallbacks.delete(e);\n\n this.cache.delete(e);\n };\n\n return Promised.create(coreRelease());\n }\n\n dispose(): Promised<void> {\n this[\"~ensureNotDisposed\"]();\n this.isDisposing = true;\n\n return Promised.create((async () => {\n const extensionDisposeEvents = this.extensions.map(\n (ext) => ext.dispose?.(this) ?? Promise.resolve()\n );\n await Promise.all(extensionDisposeEvents);\n\n const currents = this.cache.keys();\n for (const current of currents) {\n await this.release(current, true);\n }\n\n this.disposed = true;\n this.cache.clear();\n this.cleanups.clear();\n this.onUpdateCallbacks.clear();\n this.onUpdateExecutors.clear();\n this.onEvents.change.clear();\n this.onEvents.release.clear();\n this.onEvents.error.clear();\n this.onErrors.clear();\n this.resolutionChain.clear();\n })());\n }\n\n onUpdate<T>(\n e: Core.Executor<T>,\n cb: (a: Core.Accessor<T>) => void | Promise<void>\n ): Core.Cleanup {\n this[\"~ensureNotDisposed\"]();\n if (this.isDisposing) {\n throw new Error(\"Cannot register update callback on a disposing scope\");\n }\n\n const ou = this.onUpdateCallbacks.get(e) ?? new Set();\n this.onUpdateCallbacks.set(e, ou);\n ou.add(cb as OnUpdateFn);\n\n return () => {\n this[\"~ensureNotDisposed\"]();\n\n const ou = this.onUpdateCallbacks.get(e);\n if (ou) {\n ou.delete(cb as OnUpdateFn);\n if (ou.size === 0) {\n this.onUpdateCallbacks.delete(e);\n }\n }\n };\n }\n\n onChange(callback: Core.ChangeCallback): Core.Cleanup {\n this[\"~ensureNotDisposed\"]();\n if (this.isDisposing) {\n throw new Error(\"Cannot register update callback on a disposing scope\");\n }\n\n this.onEvents[\"change\"].add(callback);\n return () => {\n this[\"~ensureNotDisposed\"]();\n this.onEvents[\"change\"].delete(callback);\n };\n }\n\n onRelease(cb: Core.ReleaseCallback): Core.Cleanup {\n this[\"~ensureNotDisposed\"]();\n if (this.isDisposing) {\n throw new Error(\"Cannot register update callback on a disposing scope\");\n }\n\n this.onEvents[\"release\"].add(cb);\n return () => {\n this[\"~ensureNotDisposed\"]();\n this.onEvents[\"release\"].delete(cb);\n };\n }\n\n onError<T>(\n executor: Core.Executor<T>,\n callback: Core.ErrorCallback<T>\n ): Core.Cleanup;\n onError(callback: Core.GlobalErrorCallback): Core.Cleanup;\n onError<T>(\n executorOrCallback: Core.Executor<T> | Core.GlobalErrorCallback,\n callback?: Core.ErrorCallback<T>\n ): Core.Cleanup {\n this[\"~ensureNotDisposed\"]();\n if (this.isDisposing) {\n throw new Error(\"Cannot register error callback on a disposing scope\");\n }\n\n if (typeof executorOrCallback === \"function\") {\n this.onEvents[\"error\"].add(executorOrCallback);\n return () => {\n this[\"~ensureNotDisposed\"]();\n this.onEvents[\"error\"].delete(executorOrCallback);\n };\n }\n\n if (callback) {\n const executor = executorOrCallback;\n const errorCallbacks = this.onErrors.get(executor) ?? new Set();\n this.onErrors.set(executor, errorCallbacks);\n errorCallbacks.add(callback as Core.ErrorCallback<unknown>);\n\n return () => {\n this[\"~ensureNotDisposed\"]();\n const callbacks = this.onErrors.get(executor);\n if (callbacks) {\n callbacks.delete(callback as Core.ErrorCallback<unknown>);\n if (callbacks.size === 0) {\n this.onErrors.delete(executor);\n }\n }\n };\n }\n\n throw new Error(\"Invalid arguments for onError\");\n }\n\n useExtension(extension: Extension.Extension): Core.Cleanup {\n this[\"~ensureNotDisposed\"]();\n if (this.isDisposing) {\n throw new Error(\"Cannot register extension on a disposing scope\");\n }\n\n this.extensions.push(extension);\n this.reversedExtensions.unshift(extension);\n extension.init?.(this);\n\n return () => {\n this[\"~ensureNotDisposed\"]();\n const idx = this.extensions.indexOf(extension);\n if (idx !== -1) {\n this.extensions.splice(idx, 1);\n this.reversedExtensions.splice(this.reversedExtensions.length - 1 - idx, 1);\n }\n };\n }\n\n use(extension: Extension.Extension): Core.Cleanup {\n return this.useExtension(extension);\n }\n\n exec<S, I = undefined>(\n flow: Core.Executor<Flow.Handler<S, I>>,\n input?: I,\n options?: {\n extensions?: Extension.Extension[];\n initialContext?: Array<\n [Accessor.Accessor<any> | Accessor.AccessorWithDefault<any>, any]\n >;\n presets?: Core.Preset<unknown>[];\n meta?: Meta.Meta[];\n details?: false;\n }\n ): Promised<S>;\n\n exec<S, I = undefined>(\n flow: Core.Executor<Flow.Handler<S, I>>,\n input: I | undefined,\n options: {\n extensions?: Extension.Extension[];\n initialContext?: Array<\n [Accessor.Accessor<any> | Accessor.AccessorWithDefault<any>, any]\n >;\n presets?: Core.Preset<unknown>[];\n meta?: Meta.Meta[];\n details: true;\n }\n ): Promised<Flow.ExecutionDetails<S>>;\n\n exec<S, I = undefined>(\n flow: Core.Executor<Flow.Handler<S, I>>,\n input?: I,\n options?: {\n extensions?: Extension.Extension[];\n initialContext?: Array<\n [Accessor.Accessor<any> | Accessor.AccessorWithDefault<any>, any]\n >;\n presets?: Core.Preset<unknown>[];\n meta?: Meta.Meta[];\n details?: boolean;\n }\n ): Promised<S> | Promised<Flow.ExecutionDetails<S>> {\n this[\"~ensureNotDisposed\"]();\n\n if (options?.details === true) {\n return flowApi.execute(flow, input as I, {\n scope: this,\n extensions: options.extensions,\n initialContext: options.initialContext,\n presets: options.presets,\n meta: options.meta,\n details: true,\n });\n }\n\n return flowApi.execute(flow, input as I, {\n scope: this,\n extensions: options?.extensions,\n initialContext: options?.initialContext,\n presets: options?.presets,\n meta: options?.meta,\n details: false,\n });\n }\n}\n\nexport type ScopeOption = {\n initialValues?: Core.Preset<unknown>[];\n registry?: Core.Executor<unknown>[];\n extensions?: Extension.Extension[];\n meta?: Meta.Meta[];\n};\n\nexport function createScope(): Core.Scope;\nexport function createScope(opt: ScopeOption): Core.Scope;\nexport function createScope(...presets: Core.Preset<unknown>[]): Core.Scope;\n\nexport function createScope(\n ...opt: [ScopeOption | undefined] | Core.Preset<unknown>[]\n): Core.Scope {\n if (opt.at(0) === undefined) {\n return new BaseScope();\n }\n\n if (opt.length === 1 && !isPreset(opt[0])) {\n return new BaseScope(opt[0]);\n }\n\n return new BaseScope({\n initialValues: opt as Core.Preset<unknown>[],\n });\n}\n","import { type Extension } from \"./types\";\n\nexport function extension<T extends Extension.Extension>(ext: T): T {\n return ext;\n}\n","import {\n isExecutor,\n isLazyExecutor,\n isReactiveExecutor,\n isStaticExecutor,\n} from \"./executor\";\nimport { Core } from \"./types\";\n\nexport async function resolves<\n T extends\n | Array<Core.Executor<unknown> | Escapable<unknown>>\n | Record<string, Core.Executor<unknown> | Escapable<unknown>>\n>(\n scope: Core.Scope,\n executors: { [K in keyof T]: T[K] }\n): Promise<{ [K in keyof T]: Core.InferOutput<T[K]> }> {\n const objectOutput = {};\n const arrayOutput = [];\n\n const isArray = Array.isArray(executors);\n\n for (const [index, executor] of Object.entries(executors)) {\n const target = !isExecutor(executor)\n ? executor.escape()\n : isLazyExecutor(executor) ||\n isReactiveExecutor(executor) ||\n isStaticExecutor(executor)\n ? executor.executor\n : (executor as Core.Executor<unknown>);\n\n const result = await scope.resolve(target);\n\n if (isArray) {\n arrayOutput.push(result);\n } else {\n Object.assign(objectOutput, { [index]: result });\n }\n }\n\n const result = isArray ? arrayOutput : objectOutput;\n return result as { [K in keyof T]: Core.InferOutput<T[K]> };\n}\n\nexport type Escapable<T> = {\n escape: () => Core.Executor<T>;\n};\n\n","import { createExecutor } from \"./executor\";\nimport { meta } from \"./meta\";\nimport { Promised } from \"./promises\";\nimport { custom, validate } from \"./ssch\";\nimport {\n type Core,\n type Meta,\n type Multi,\n type StandardSchemaV1,\n} from \"./types\";\n\nclass MultiExecutorImpl<T, K, PoolIdType = unknown> {\n private option: Multi.Option<K>;\n private poolId: Meta.MetaFn<PoolIdType>;\n private keyPool: Map<unknown, Core.Executor<T>>;\n private createNewExecutor: (key: K) => Core.Executor<T>;\n public id: Meta.MetaFn<PoolIdType>;\n\n constructor(\n option: Multi.Option<K>,\n poolId: Meta.MetaFn<PoolIdType>,\n keyPool: Map<unknown, Core.Executor<T>>,\n createNewExecutor: (key: K) => Core.Executor<T>\n ) {\n this.option = option;\n this.poolId = poolId;\n this.keyPool = keyPool;\n this.createNewExecutor = createNewExecutor;\n this.id = poolId;\n }\n\n processKey(key: K) {\n const validatedKey = validate(this.option.keySchema, key);\n const transformedKey = this.option.keyTransform\n ? this.option.keyTransform(validatedKey)\n : validatedKey;\n return { validatedKey, transformedKey };\n }\n\n newProvider(key: K): Core.Executor<T> {\n const { transformedKey } = this.processKey(key);\n const executor = this.createNewExecutor(key);\n this.keyPool.set(transformedKey, executor);\n return executor;\n }\n\n __call(key: K): Core.Executor<T> {\n const { transformedKey } = this.processKey(key);\n return this.keyPool.get(transformedKey) || this.newProvider(key);\n }\n\n providerFactory(ctl: Core.Controller) {\n return (key: K) => {\n const executor = this.__call(key);\n return ctl.scope.accessor(executor);\n };\n }\n\n release(scope: Core.Scope): Promised<void> {\n return Promised.create((async () => {\n const entries = scope.entries();\n for (const [executor] of entries) {\n const check = this.poolId.some\n ? this.poolId.some(executor)\n : this.poolId.find(executor);\n if (check && (Array.isArray(check) ? check.length > 0 : check)) {\n await scope.release(executor);\n }\n }\n })());\n }\n}\n\nfunction createValidatedExecutor<T, K>(\n option: Multi.Option<K>,\n key: K,\n createExecutorFn: (validatedKey: K) => Core.Executor<T>\n): Core.Executor<T> {\n const validatedKey = validate(option.keySchema, key);\n return createExecutorFn(validatedKey);\n}\n\nfunction createMultiExecutor<T, K, PoolIdType>(\n option: Multi.Option<K>,\n poolId: Meta.MetaFn<PoolIdType>,\n keyPool: Map<unknown, Core.Executor<T>>,\n createNewExecutor: (key: K) => Core.Executor<T>,\n providerMetas: Meta.Meta[]\n): Multi.MultiExecutor<T, K> {\n const impl = new MultiExecutorImpl<T, K, PoolIdType>(\n option,\n poolId,\n keyPool,\n createNewExecutor\n );\n\n const provider = createExecutor(\n (ctl: Core.Controller) => impl.providerFactory(ctl),\n undefined,\n providerMetas\n );\n\n const callableFn = (key: K) => impl.__call(key);\n const multiExecutor = Object.assign(callableFn, provider, {\n release: (scope: Core.Scope) => impl.release(scope),\n id: impl.id,\n }) as Multi.MultiExecutor<T, K>;\n\n return multiExecutor;\n}\n\nexport function provide<T, K>(\n option: Multi.Option<K>,\n valueFn: (key: K, controller: Core.Controller) => T | Promise<T>,\n ...metas: Meta.Meta[]\n): Multi.MultiExecutor<T, K> {\n const poolId = meta(Symbol(), custom<undefined>());\n const keyPool = new Map<unknown, Core.Executor<T>>();\n\n const createNewExecutor = (key: K) => {\n return createValidatedExecutor(option, key, (validatedKey) =>\n createExecutor(\n (ctl: Core.Controller) => valueFn(validatedKey, ctl),\n undefined,\n [poolId(undefined), ...metas]\n )\n );\n };\n\n return createMultiExecutor(option, poolId, keyPool, createNewExecutor, [\n poolId(undefined),\n ...metas,\n ]);\n}\n\nexport function derive<T, K, D extends Core.DependencyLike>(\n option: Multi.DeriveOption<K, { [K in keyof D]: D[K] }>,\n valueFn: Multi.DependentFn<T, K, Core.InferOutput<D>>,\n ...metas: Meta.Meta[]\n): Multi.MultiExecutor<T, K> {\n const poolId = meta(Symbol(), custom<void>());\n const keyPool = new Map<unknown, Core.Executor<T>>();\n\n const createNewExecutor = (key: K) => {\n return createValidatedExecutor(option, key, (validatedKey) => {\n const factory: Core.DependentFn<T, unknown> = (dependencies, ctl) =>\n valueFn(dependencies as Core.InferOutput<D>, validatedKey, ctl);\n\n const deps = option.dependencies as\n | Core.UExecutor\n | ReadonlyArray<Core.UExecutor>\n | Record<string, Core.UExecutor>;\n\n return createExecutor(factory, deps, metas);\n });\n };\n\n return createMultiExecutor(option, poolId, keyPool, createNewExecutor, metas);\n}\n","import type { Meta } from \"./types\";\nimport { meta } from \"./meta\";\nimport { custom } from \"./ssch\";\n\nexport * from \"./types\";\nexport type { Accessor } from \"./types\";\n\nexport {\n provide,\n derive,\n preset,\n isExecutor,\n isLazyExecutor,\n isMainExecutor,\n isPreset,\n isReactiveExecutor,\n isStaticExecutor,\n} from \"./executor\";\n\nexport { createScope, type ScopeOption } from \"./scope\";\nexport { meta, getValue, findValue, findValues } from \"./meta\";\nexport { accessor } from \"./accessor\";\n\nexport { flow, flowMeta } from \"./flow\";\nexport { Promised } from \"./promises\";\n\nexport { extension } from \"./extension\";\nexport { resolves } from \"./helpers\";\n\nexport { custom } from \"./ssch\";\nexport * as standardSchema from \"./ssch\";\n\nexport * as multi from \"./multi\";\nexport * as errors from \"./errors\";\n\nexport const name: Meta.MetaFn<string> = meta(\n \"pumped-fn/name\",\n custom<string>()\n);\n"],"mappings":";;;AAEA,MAAaA,iBAAgC,OAAO,IAClD,2BACD;AACD,MAAaC,aAA4B,OAAO,IAAI,uBAAuB;AAkD3E,IAAa,cAAb,cAAiC,MAAM;CACrC,AAAgB;CAEhB,YAAY,QAA+C;AACzD,QAAM,OAAO,GAAG,QAAQ;AACxB,OAAK,OAAO;AACZ,OAAK,SAAS;;;AAiBlB,IAAa,0BAAb,cAA6C,MAAM;CACjD,AAAgB;CAChB,AAAgB;CAChB,AAAgB;CAEhB,YACE,SACA,SACA,MACA,WAA+D,cAC/D,SACA;AACA,QAAM,SAAS,QAAQ;AACvB,OAAK,OAAO;AACZ,OAAK,UAAU;AACf,OAAK,OAAO;AACZ,OAAK,WAAW;;;AAIpB,IAAa,wBAAb,cAA2C,wBAAwB;CACjE,YACE,SACA,SACA,MACA,SACA;AACA,QACE,SACA;GAAE,GAAG;GAAS,iBAAiB;GAAqB,EACpD,MACA,cACA,QACD;AACD,OAAK,OAAO;;;AAIhB,IAAa,4BAAb,cAA+C,wBAAwB;CACrE,AAAgB;CAEhB,YACE,SACA,SACA,MACA,mBACA,SACA;AACA,QACE,SACA;GAAE,GAAG;GAAS,iBAAiB;GAAyB,EACxD,MACA,cACA,QACD;AACD,OAAK,OAAO;AACZ,OAAK,oBAAoB;;;AAwR7B,IAAa,YAAb,cAA+B,MAAM;CACnC,AAAgB;CAChB,AAAgB;CAEhB,YACE,SACA,MACA,MACA,SACA;AACA,QAAM,QAAQ;AACd,OAAK,OAAO;AACZ,OAAK,OAAO;AACZ,OAAK,OAAO;AACZ,MAAI,SAAS,MACX,MAAK,QAAQ,QAAQ;;;AAK3B,IAAa,sBAAb,cAAyC,UAAU;CACjD,AAAgB;CAEhB,YACE,SACA,QACA,SACA;AACA,QAAM,SAAS,oBAAoB,EAAE,QAAQ,EAAE,QAAQ;AACvD,OAAK,OAAO;AACZ,OAAK,SAAS;;;;;;;;;;AC1blB,SAAgB,SACd,QACA,MACgD;CAChD,MAAM,SAAS,OAAO,aAAa,SAAS,KAAK;AAEjD,KAAI,UAAU,OACZ,OAAM,IAAI,MAAM,oCAAoC;AAGtD,KAAI,OAAO,OACT,OAAM,IAAI,YAAY,OAAO,OAAO;AAEtC,QAAO,OAAO;;AAIhB,SAAgB,SAAoC;AAClD,QAAO,EACL,aAAa;EACX,QAAQ;EACR,SAAS;EACT,WAAW,UAAU;AACnB,UAAO,EAAS,OAAY;;EAE/B,EACF;;;;;ACzBH,IAAM,eAAN,MAAsB;CACpB,AAAgB;CAChB,AAAgB;CAChB,CAAiB,cAAc;CAE/B,YAAY,KAAsB,QAA6B;AAC7D,OAAK,MAAM,OAAO,QAAQ,WAAW,OAAO,IAAI,GAAG;AACnD,OAAK,SAAS;;CAGhB,OAAO,OAAwB;AAC7B,SAAO;IACJ,aAAa;GACd,KAAK,KAAK;GACV,QAAQ,KAAK;GACb;GACD;;CAGH,QAA8B,GAAS;AACrC,SAAO,OAAO,OAAO,EAAE,EAAE,KAAK,OAAO,EAAE,CAAM,EAAE,EAAE;;CAGnD,KAAK,QAA2D;AAC9D,SAAO,WAAW,QAAQ,KAAwC;;CAGpE,KAAK,QAAqE;AACxE,SAAO,UAAU,QAAQ,KAAwC;;CAKnE,IAAI,QAAyD;EAC3D,MAAM,SAAS,WACb,QACA,KACD;AACD,MAAI,OAAO,WAAW,EACpB,OAAM,IAAI,MAAM,uBAAuB,OAAO,KAAK,IAAI,CAAC,YAAY;AAEtE,SAAO,OAAO;;;AAIlB,MAAa,QACX,KACA,WACmB;CACnB,MAAM,WAAW,IAAI,aAAa,KAAK,OAAO;CAE9C,MAAM,OAAO,UAAa,SAAS,OAAO,MAAM;AAEhD,QAAO,eAAe,IAAI,OAAO;EAC/B,OAAO,SAAS;EAChB,UAAU;EACV,cAAc;EACf,CAAC;AACF,QAAO,eAAe,IAAI,YAAY;EACpC,OAAO;EACP,UAAU;EACV,cAAc;EACf,CAAC;AACF,IAAG,UAAU,SAAS,QAAQ,KAAK,SAAS;AAC5C,IAAG,OAAO,SAAS,KAAK,KAAK,SAAS;AACtC,IAAG,OAAO,SAAS,KAAK,KAAK,SAAS;AACtC,IAAG,MAAM,SAAS,IAAI,KAAK,SAAS;AAEpC,QAAO;;AAGT,SAAgB,SAAY,QAAgC;AAC1D,QAAO,SAASC,OAAK,QAAQA,OAAK,MAAM;;AAG1C,SAAgB,WACd,UACA,QACK;AACL,KAAI,CAAC,SAAU,QAAO,EAAE;AAKxB,SAHc,MAAM,QAAQ,SAAS,GAAG,WAAW,SAAS,SAAS,EAAE,EAE/C,QAAQ,MAAM,EAAE,QAAQA,OAAK,IAAI,CACxC,KAAK,MAAM,SAAS,EAAkB,CAAC;;AAG1D,SAAgB,UACd,UACA,QACe;AAEf,QADe,WAAW,UAAUA,OAAK,CAC3B,GAAG,EAAE;;;;;AC5FrB,SAAgB,eACd,SACA,cAKA,OACkB;CAClB,MAAM,WAAW;GACd,iBAAiB;EAClB,UAAU,GAAY,eAAgC;AACpD,OAAI,iBAAiB,OAEnB,QADU,QACD,WAAW;AAItB,UADU,QACD,GAAG,WAAW;;EAEzB;EACO;EACR;CAED,MAAM,eAAe;GAClB,iBAAiB;EAClB,cAAc;EACd;EACA,SAAS;EACF;EACR;CAED,MAAM,mBAAmB;GACtB,iBAAiB;EAClB;EACA,SAAS;EACT,cAAc;EACP;EACR;CAED,MAAM,iBAAiB;GACpB,iBAAiB;EAClB,cAAc;EACd,SAAS;EACF;EACP;EACD;AAED,QAAO,iBAAiB,UAAU;EAChC,MAAM;GACJ,OAAO;GACP,UAAU;GACV,cAAc;GACd,YAAY;GACb;EACD,UAAU;GACR,OAAO;GACP,UAAU;GACV,cAAc;GACd,YAAY;GACb;EACD,QAAQ;GACN,OAAO;GACP,UAAU;GACV,cAAc;GACd,YAAY;GACb;EACF,CAAC;AAEF,QAAO;;AAGT,SAAgB,eACd,UACgC;AAChC,QAAO,SAAS,oBAAoB;;AAGtC,SAAgB,mBACd,UACoC;AACpC,QAAO,SAAS,oBAAoB;;AAGtC,SAAgB,iBACd,UACkC;AAClC,QAAO,SAAS,oBAAoB;;AAGtC,SAAgB,eACd,UACoC;AACpC,QAAO,WAAW,SAAS,IAAI,SAAS,oBAAoB;;AAG9D,SAAgB,WAAc,OAA+C;AAC3E,QAAO,OAAO,UAAU,YAAY,UAAU,QAAQ,kBAAkB;;AAG1E,SAAgB,SAAS,OAA+C;AACtE,QACE,OAAO,UAAU,YACjB,UAAU,QACV,kBAAkB,SACjB,MAA+B,oBAAoB;;AAIxD,SAAgB,QACd,SACA,GAAG,OACe;AAClB,QAAO,eAAe,SAAS,QAAW,MAAM;;AAGlD,SAAgB,OACd,eACA,UACA,GAAG,OACe;CAClB,MAAMC,WAAyC,MAAM,QACnD,SAAS,MAA6B,IAAI;AAO5C,QAAO,eAAe,SALD,eAKwB,MAAM;;AAGrD,SAAgB,OACd,GACA,GACgB;CAChB,MAAM,WAAW,WAAW,EAAE,GAAG,IAAI,EAAE,QAAQ;AAE/C,QAAO;GACJ,iBAAiB;EAClB,OAAO;EACP;EACD;;;;;AC/IH,IAAa,WAAb,MAAa,SAAsC;CACjD,AAAQ;CACR,AAAQ;CAER,YACE,SACA,sBACA;AACA,OAAK,UAAU,mBAAmB,WAAW,QAAQ,UAAU;AAC/D,OAAK,uBAAuB;;CAG9B,OAAO,OACL,SACA,sBACa;AACb,SAAO,IAAI,SAAS,SAAS,qBAAqB;;CAGpD,IAAO,IAA+C;AACpD,SAAO,SAAS,OAAO,KAAK,QAAQ,KAAK,GAAG,EAC5C,KAAK,qBAAqB;;CAG5B,OAAU,IAA4C;AACpD,SAAO,SAAS,OAAO,KAAK,QAAQ,KAAK,GAAG,EAC5C,KAAK,qBAAqB;;CAG5B,SAAS,IAA8C;AACrD,SAAO,SAAS,OAAO,KAAK,QAAQ,OAAO,UAAU;AACnD,SAAM,GAAG,MAAM;IACf,EACF,KAAK,qBAAqB;;CAG5B,YAAY,IAAkD;AAC5D,SAAO,SAAS,OAAO,KAAK,QAAQ,MAAM,GAAG,EAC7C,KAAK,qBAAqB;;CAG5B,KACE,aACA,YAC+B;AAC/B,SAAO,SAAS,OAAO,KAAK,QAAQ,KAAK,aAAa,WAAW,EACjE,KAAK,qBAAqB;;CAG5B,MACE,YACuB;AACvB,SAAO,SAAS,OAAO,KAAK,QAAQ,MAAM,WAAW,EACrD,KAAK,qBAAqB;;CAG5B,QAAQ,WAA0D;AAChE,SAAO,SAAS,OAAO,KAAK,QAAQ,QAAQ,UAAU,EACtD,KAAK,qBAAqB;;CAG5B,YAAwB;AACtB,SAAO,KAAK;;CAGd,MAAM,MAA+C;AACnD,MAAI,CAAC,KAAK,qBACR;AAEF,SAAO,KAAK;;CAGd,MAAM,YAA+C;AACnD,SAAO,SAAS,IAAI,YAAY;GAC9B,MAAM,CAAC,QAAQ,OAAO,MAAM,QAAQ,IAAI,CACtC,KAAK,SACL,KAAK,qBACN,CAAC;AAEF,OAAI,CAAC,IACH,OAAM,IAAI,MACR,qGACD;AAGH,UAAO;IAAE,SAAS;IAAe;IAAQ;IAAK;IAC9C,CAAC,MAAM,OAAO,UAAU;GACxB,MAAM,MAAM,MAAM,KAAK;AAEvB,OAAI,CAAC,IACH,OAAM,IAAI,MACR,qGACD;AAGH,UAAO;IAAE,SAAS;IAAgB;IAAO;IAAK;IAC9C;;CAGJ,OAAO,IACL,QAC6C;EAE7C,MAAM,WADe,OACS,KAAK,MACjC,aAAa,WAAW,EAAE,WAAW,GAAG,QAAQ,QAAQ,EAAE,CAC3D;AAED,SAAO,SAAS,OAAO,QAAQ,IAAI,SAAS,CAAiB;;CAG/D,OAAO,KACL,QAC8B;EAE9B,MAAM,WADe,OACS,KAAK,MACjC,aAAa,WAAW,EAAE,WAAW,GAAG,QAAQ,QAAQ,EAAE,CAC3D;AAED,SAAO,SAAS,OAAO,QAAQ,KAAK,SAAS,CAAiB;;CAGhE,OAAO,WACL,QACmE;EAEnE,MAAM,WADe,OACS,KAAK,MACjC,aAAa,WAAW,EAAE,WAAW,GAAG,QAAQ,QAAQ,EAAE,CAC3D;AAED,SAAO,SAAS,OAAO,QAAQ,WAAW,SAAS,CAAiB;;CAGtE,OAAO,IAAO,IAAuC;EACnD,MAAM,UAAU,IAAI,SAAY,SAAS,WAAW;AAClD,OAAI;AAEF,YADe,IAAI,CACJ;YACR,OAAO;AACd,WAAO,MAAM;;IAEf;AAEF,SAAO,SAAS,OAAO,QAAQ;;CAGjC,OAAe,eACb,OACoC;AACpC,MAAI,MAAM,QAAQ,MAAM,CACtB,QAAO;AAET,SAAQ,MAA0D;;CAGpE,AAAQ,WACN,IACa;AACb,SAAO,KAAK,KAAK,UAAe;AAE9B,UAAO,GADS,SAAS,eAAe,MAAM,CAC5B;IAClB;;CAGJ,YAEmB;AACjB,SAAO,KAAK,YAAY,YACtB,QACG,QAAQ,MAA6C,EAAE,WAAW,YAAY,CAC9E,KAAK,MAAW,EAAE,MAAM,CAC5B;;CAGH,WAEuB;AACrB,SAAO,KAAK,YAAY,YACtB,QACG,QAAQ,MAAuC,EAAE,WAAW,WAAW,CACvE,KAAK,MAAW,EAAE,OAAO,CAC7B;;CAGH,YAEuD;AACrD,SAAO,KAAK,YAAY,YAAY;GAClC,MAAMC,YAAmB,EAAE;GAC3B,MAAMC,WAAsB,EAAE;AAE9B,QAAK,MAAM,UAAU,QACnB,KAAI,OAAO,WAAW,YACpB,WAAU,KAAK,OAAO,MAAM;OAE5B,UAAS,KAAK,OAAO,OAAO;AAIhC,UAAO;IAAE;IAAW;IAAU;IAC9B;;CAGJ,iBAEiB;AACf,SAAO,KAAK,YAAY,YAAY;AAElC,UADc,QAAQ,MAAM,MAA6C,EAAE,WAAW,YAAY,EACpF;IACd;;CAGJ,gBAEiC;AAC/B,SAAO,KAAK,YAAY,YAAY;AAElC,UADc,QAAQ,MAAM,MAAuC,EAAE,WAAW,WAAW,EAC7E;IACd;;CAGJ,cAEE,WACe;AACf,SAAO,KAAK,YAAY,YAAY;GAClC,IAAI,iBAAiB;AAErB,QAAK,MAAM,UAAU,QACnB,KAAI,OAAO,WAAW,aAAa;AACjC,QAAI,UAAU,OAAO,OAAO,eAAe,CACzC,QAAO,OAAO;AAEhB;;IAKJ;;CAGJ,aAEE,IACe;AACf,SAAO,KAAK,YAAY,YAAY;GAClC,MAAMC,SAAc,EAAE;GACtB,IAAI,iBAAiB;AAErB,QAAK,MAAM,UAAU,QACnB,KAAI,OAAO,WAAW,aAAa;AACjC,WAAO,KAAK,GAAG,OAAO,OAAO,eAAe,CAAC;AAC7C;;AAIJ,UAAO;IACP;;CAGJ,mBAEE,aACiB;AACjB,SAAO,KAAK,YAAY,YAAY;GAClC,MAAMF,YAAmB,EAAE;GAC3B,MAAMC,WAAsB,EAAE;AAE9B,QAAK,MAAM,UAAU,QACnB,KAAI,OAAO,WAAW,YACpB,WAAU,KAAK,OAAO,MAAM;OAE5B,UAAS,KAAK,OAAO,OAAO;AAIhC,OAAI,SAAS,SAAS,EAMpB,OALc,cACV,YAAY,UAAU,UAAU,QAAQ,QAAQ,OAAO,mBACvD,IAAI,MACF,GAAG,SAAS,OAAO,MAAM,QAAQ,OAAO,sBAAsB,SAAS,KAAK,MAAe,OAAO,EAAE,CAAC,CAAC,KAAK,KAAK,GACjH;AAIP,UAAO;IACP;;;;;;;;;;;;;;;ACtRN,MAAa,QAAQ;CACnB,0BAA0B;CAC1B,qBAAqB;CACrB,+BAA+B;CAC/B,qBAAqB;CAErB,sBAAsB;CACtB,qBAAqB;CACrB,8BAA8B;CAC9B,yBAAyB;CACzB,2BAA2B;CAE3B,gBAAgB;CAChB,uBAAuB;CACvB,qBAAqB;CACrB,sBAAsB;CACtB,oCAAoC;CAEpC,0BAA0B;CAC1B,wBAAwB;CACxB,qBAAqB;CACrB,sBAAsB;CACtB,gCAAgC;CAEhC,2BAA2B;CAC3B,kBAAkB;CAClB,sBAAsB;CACtB,qBAAqB;CAErB,yBAAyB;CACzB,wBAAwB;CACxB,2BAA2B;CAC3B,2BAA2B;CAE3B,uBAAuB;CACvB,sBAAsB;CACtB,mBAAmB;CACnB,8BAA8B;CAC9B,+BAA+B;CAChC;AAID,MAAME,WAAiC;EACpC,MAAM,2BACL;EACD,MAAM,sBACL;EACD,MAAM,gCACL;EACD,MAAM,sBACL;EAED,MAAM,uBACL;EACD,MAAM,sBACL;EACD,MAAM,+BACL;EACD,MAAM,0BACL;EACD,MAAM,4BACL;EAED,MAAM,iBAAiB;EACvB,MAAM,wBACL;EACD,MAAM,sBACL;EACD,MAAM,uBAAuB;EAC7B,MAAM,qCACL;EAED,MAAM,2BACL;EACD,MAAM,yBACL;EACD,MAAM,sBACL;EACD,MAAM,uBACL;EACD,MAAM,iCACL;EAED,MAAM,4BACL;EACD,MAAM,mBACL;EACD,MAAM,uBACL;EACD,MAAM,sBAAsB;EAE5B,MAAM,0BACL;EACD,MAAM,yBACL;EACD,MAAM,4BACL;EACD,MAAM,4BAA4B;EAElC,MAAM,wBAAwB;EAC9B,MAAM,uBAAuB;EAC7B,MAAM,oBAAoB;EAC1B,MAAM,+BACL;EACD,MAAM,gCACL;CACH;AAED,SAAgB,cACd,MACA,UAAmC,EAAE,EAC7B;CACR,IAAI,UAAU,SAAS;AAEvB,MAAK,MAAM,CAAC,KAAK,UAAU,OAAO,QAAQ,QAAQ,EAAE;EAClD,MAAM,cAAc,IAAI,IAAI;AAC5B,YAAU,QAAQ,WAAW,aAAa,OAAO,MAAM,CAAC;;AAG1D,QAAO;;AAGT,SAAgB,mBACd,MACA,cACA,iBACA,eACA,oBAA6C,EAAE,EACxB;CACvB,MAAMC,UAAiD;EACrD;EACA;EACA,WAAW,KAAK,KAAK;EACrB,gBAAgB;EACjB;AAiBD,QAAO,IAAI,sBAFK,cAAc,MAbP;EACrB;EACA,iBACE,yBAAyB,QACrB,cAAc,UACd,OAAO,cAAc;EAC3B,OACE,yBAAyB,QACrB,cAAc,UACd,OAAO,cAAc;EAC3B,GAAG;EACJ,CAEkD,EAET,SAAS,MAAM,EACvD,OAAO,eACR,CAAC;;AAGJ,SAAgB,sBACd,MACA,cACA,iBACA,mBACA,eACA,oBAA6C,EAAE,EACpB;CAC3B,MAAMA,UAAiD;EACrD;EACA;EACA,WAAW,KAAK,KAAK;EACrB,gBAAgB;EACjB;AAeD,QAAO,IAAI,0BAFK,cAAc,MAXP;EACrB;EACA,gBAAgB;EAChB,iBAAiB,gBAAgB,KAAK,OAAO;EAC7C,OACE,yBAAyB,QACrB,cAAc,UACd,OAAO,cAAc;EAC3B,GAAG;EACJ,CAEkD,EAIjD,SACA,MACA,mBACA,EACE,OAAO,eACR,CACF;;AAGH,SAAgB,kBACd,MACA,cACA,iBACA,eACA,oBAA6C,EAAE,EACtB;CACzB,MAAMC,UAAwB;EAC5B;EACA;EACA,iBAAiB;EACjB,WAAW,KAAK,KAAK;EACrB,gBAAgB;EACjB;AAaD,QAAO,IAAI,wBAFK,cAAc,MATP;EACrB;EACA,OACE,yBAAyB,QACrB,cAAc,UACd,OAAO,cAAc;EAC3B,GAAG;EACJ,CAEkD,EAEP,SAAS,MAAM,gBAAgB,EACzE,OAAO,eACR,CAAC;;AAGJ,SAAgB,gBAAgB,UAA2B;CACzD,MAAM,eAAe,KAAK,KAAK,SAA+B;AAC9D,KAAI,aAAc,QAAO;AAEzB,KAAI,YAAY,OAAO,aAAa,YAAY,aAAa,UAAU;EACrE,MAAM,UAAU,SAAS;AACzB,MAAI,SAAS,QAAQ,QAAQ,SAAS,UACpC,QAAO,QAAQ;;AAInB,KAAI,YAAY,OAAO,aAAa,UAAU;EAC5C,MAAM,OACH,SACC,OAAO,IAAI,2BAA2B,KACnC;AACP,SAAO,GAAG,OAAO,KAAK,CAAC,YAAY,KAAK,QAAQ,CAC7C,SAAS,GAAG,CACZ,UAAU,GAAG,GAAG;;AAGrB,QAAO;;AAGT,SAAgB,qBAAqB,eAAoC;AACvE,QAAO,cAAc,IAAI,gBAAgB;;;;;AClQ3C,SAAS,YACP,QAC8B;AAC9B,QACE,SAAS,UACT,SAAS,UACT,OAAO,OAAO,QAAQ,cACtB,OAAO,OAAO,QAAQ;;AAI1B,SAAS,YAAY,QAAwD;AAC3E,QAAO,MAAM,QAAQ,OAAO;;AAG9B,SAAS,kBACP,QACA,KACA,QACe;AACf,KAAI,YAAY,OAAO,EAAE;EACvB,MAAM,QAAQ,OAAO,IAAI,IAAI;AAC7B,SAAO,UAAU,SAAY,SAAY,SAAS,QAAQ,MAAM;;AAGlE,KAAI,YAAY,OAAO,EAAE;EACvB,MAAMC,SAAO,OAAO,MAAM,MAAM,EAAE,QAAQ,IAAI;AAC9C,SAAOA,SAAO,SAAS,QAAQA,OAAK,MAAM,GAAG;;CAI/C,MAAMA,UADQ,OAAO,SAAS,EAAE,EACb,MAAM,MAAM,EAAE,QAAQ,IAAI;AAC7C,QAAOA,SAAO,SAAS,QAAQA,OAAK,MAAM,GAAG;;AAG/C,SAAS,eACP,QACA,KACA,QACA,OACM;AACN,KAAI,CAAC,YAAY,OAAO,CACtB,OAAM,IAAI,MAAM,wCAAwC;CAE1D,MAAM,YAAY,SAAS,QAAQ,MAAM;AACzC,QAAO,IAAI,KAAK,UAAU;;AAG5B,SAAS,kBACP,KACA,QACA,OACa;AAEb,QAAO,CAAC,KADU,SAAS,QAAQ,MAAM,CAClB;;AAGzB,IAAMC,iBAAN,MAAsD;CACpD,AAAgB;CAChB,AAAgB;CAEhB,YAAY,KAAsB,QAA6B;AAC7D,OAAK,MAAM,OAAO,QAAQ,WAAW,OAAO,IAAI,GAAG;AACnD,OAAK,SAAS;;CAGhB,IAAI,QAAoC;EACtC,MAAM,QAAQ,kBAAkB,QAAQ,KAAK,KAAK,KAAK,OAAO;AAC9D,MAAI,UAAU,OACZ,OAAM,IAAI,MAAM,4BAA4B,KAAK,IAAI,UAAU,GAAG;AAEpE,SAAO;;CAGT,KAAK,QAAgD;AACnD,SAAO,kBAAkB,QAAQ,KAAK,KAAK,KAAK,OAAO;;CAGzD,IAAI,QAA4B,OAAgB;AAC9C,iBAAe,QAAQ,KAAK,KAAK,KAAK,QAAQ,MAAM;;CAGtD,OAAO,OAAuB;AAC5B,SAAO,kBAAkB,KAAK,KAAK,KAAK,QAAQ,MAAM;;;AAI1D,IAAM,0BAAN,MAA4E;CAC1E,AAAgB;CAChB,AAAgB;CAChB,AAAgB;CAEhB,YACE,KACA,QACA,cACA;AACA,OAAK,MAAM,OAAO,QAAQ,WAAW,OAAO,IAAI,GAAG;AACnD,OAAK,SAAS;AACd,OAAK,eAAe,SAAS,QAAQ,aAAa;;CAGpD,IAAI,QAAoC;AAEtC,SADc,kBAAkB,QAAQ,KAAK,KAAK,KAAK,OAAO,IAC9C,KAAK;;CAGvB,KAAK,QAAoC;AAEvC,SADc,kBAAkB,QAAQ,KAAK,KAAK,KAAK,OAAO,IAC9C,KAAK;;CAGvB,IAAI,QAA4B,OAAgB;AAC9C,iBAAe,QAAQ,KAAK,KAAK,KAAK,QAAQ,MAAM;;CAGtD,OAAO,OAAuB;AAC5B,SAAO,kBAAkB,KAAK,KAAK,KAAK,QAAQ,MAAM;;;AAe1D,SAAgB,SACd,KACA,QACA,cACwD;AACxD,KAAI,iBAAiB,OACnB,QAAO,IAAI,wBAAwB,KAAK,QAAQ,aAAa;AAE/D,QAAO,IAAIA,eAAa,KAAK,OAAO;;;;;ACrItC,SAAS,aACP,OAC4C;AAC5C,QAAO,OAAO,UAAU,YAAY,UAAU,QAAQ,aAAa;;AAGrE,SAAS,mBACP,YACA,cACA,WACA,WACmB;AACnB,KAAI,CAAC,cAAc,WAAW,WAAW,EACvC,QAAO;CAET,IAAI,WAAW;AACf,MAAK,IAAI,IAAI,WAAW,SAAS,GAAG,KAAK,GAAG,KAAK;EAC/C,MAAMC,cAAY,WAAW;AAC7B,MAAIA,YAAU,MAAM;GAClB,MAAM,UAAU;AAChB,oBAAiB;IACf,MAAM,SAASA,YAAU,KAAM,WAAW,SAAS,UAAU;AAC7D,WAAO,kBAAkB,WAAW,SAAS,SAAS,OAAO,OAAO;;;;AAI1E,QAAO;;AAGT,MAAM,qBAAqB,KACzB,mBACA,QAAmC,CACpC;AAED,MAAaC,WAMT;CACF,OAAO,SAAS,cAAc,QAAgB,EAAE,EAAE;CAClD,UAAU,SAAS,aAAa,QAA4B,CAAC;CAC7D,gBAAgB,SAAS,mBAAmB,QAA4B,CAAC;CACzE,YAAY,SAAS,mBAAmB,QAAiB,EAAE,MAAM;CACjE,SAAS,SAAS,gBAAgB,QAAsC,CAAC;CAC1E;AAED,IAAM,iBAAN,MAA2B;CACzB,YACE,AAAgBC,QAChB,AAAgBC,SAChB,AAAgBC,OAChB,AAAgBC,QAChB,AAAgBC,QAAqB,EAAE,EACvC;EALgB;EACA;EACA;EACA;EACA;;CAgBlB,QACE,uBAGA,WAKiB;AACjB,MAAI,OAAO,0BAA0B,YAAY;GAC/C,MAAM,gBAAgB;GACtB,MAAMC,aAAW,qBACT;IACJ,MAAM,cAAc,OAAO,KAAmB,UAAa;AACzD,YAAO,cAAc,KAAK,MAAM;;AAElC,WAAO;MAET,QACA,CAAC,GAAG,KAAK,OAAO,mBAAmB,KAAK,CAAC,CAC1C;AACD,cAAS,aAAa;AACtB,UAAOA;;EAET,MAAM,eAAe;EACrB,MAAM,mBAAmB;EACzB,MAAM,WAAW,gBACd,SAAkB;GACjB,MAAM,cAAc,OAAO,KAAmB,UAAa;AACzD,WAAO,iBAAiB,MAA6B,KAAK,MAAM;;AAGlE,UAAO;KAET,cACA,CAAC,GAAG,KAAK,OAAO,mBAAmB,KAAK,CAAC,CAC1C;AACD,WAAS,aAAa;AACtB,SAAO;;;AAmDX,SAAS,OAAa,QAAkD;AACtE,QAAO,IAAI,eACT,OAAO,MACP,OAAO,WAAW,SAClB,OAAO,OACP,OAAO,QACP,OAAO,KACR;;AAGH,IAAM,cAAN,MAAM,YAAoC;CACxC,AAAQ,8BAAc,IAAI,KAAuB;CACjD,AAAQ,UAAuC;CAC/C,AAAgB;CAChB,AAAQ;CACR,AAAgB;CAEhB,YACE,OACA,AAAQC,YACR,QACA,AAAQC,QACR;EAHQ;EAEA;AAER,OAAK,QAAQ;AACb,OAAK,qBAAqB,CAAC,GAAG,WAAW,CAAC,SAAS;AACnD,OAAK,QAAQC;;CAGf,QAAW,UAAyC;AAClD,SAAO,KAAK,MAAM,QAAQ,SAAS;;CAGrC,SAAY,UAA8C;AACxD,SAAO,KAAK,MAAM,SAAS,SAAS;;CAGtC,AAAQ,mBACN,cACA,WACmB;EACnB,IAAI,WAAW;AACf,OAAK,MAAMV,eAAa,KAAK,mBAC3B,KAAIA,YAAU,MAAM;GAClB,MAAM,UAAU;AAChB,oBAAiB;IACf,MAAM,SAASA,YAAU,KAAM,MAAM,SAAS,UAAU;AACxD,WAAO,kBAAkB,WAAW,SAAS,SAAS,OAAO,OAAO;;;AAI1E,SAAO;;CAGT,2BAA2B,UAAkB,aAAsB,OAAO;EACxE,MAAM,eAAe,KAAK,SAAS,KAAK,OAAO,IAAI,SAAS,MAAM,GAAG,IAAI;EACzE,MAAM,iBAAiB,KAAK,SACxB,KAAK,OAAO,KAAK,SAAS,SAAS,GACnC;AAEJ,OAAK,IAAI,SAAS,OAAO,aAAa;AACtC,OAAK,IAAI,SAAS,UAAU,SAAS;AACrC,OAAK,IAAI,SAAS,gBAAgB,eAAe;AACjD,OAAK,IAAI,SAAS,YAAY,WAAW;;CAI3C,IAAO,eAAqC;AAC1C,MACE,OAAO,kBAAkB,YACzB,kBAAkB,QAClB,SAAS,cAKT,QAHiB,cAGD,IAAI,KAAK;EAE3B,MAAM,MAAM;AACZ,MAAI,KAAK,YAAY,IAAI,IAAI,CAC3B,QAAO,KAAK,YAAY,IAAI,IAAI;AAElC,MAAI,KAAK,OACP,QAAQ,KAAK,OAAO,IAAkC,IAAI;;CAO9D,KACE,YACe;AACf,SAAOW,WAAS,KAAK,KAAK;;CAO5B,IAAO,eAAwB,OAAgC;AAC7D,MACE,OAAO,kBAAkB,YACzB,kBAAkB,QAClB,SAAS,eACT;AAIA,GAHiB,cAGR,IAAI,MAAM,MAAW;AAC9B;;EAEF,MAAM,MAAM;AACZ,OAAK,YAAY,IAAI,KAAK,MAAM;AAChC,SAAO;;CAUT,IACE,KACA,IACA,GAAG,QACU;AACb,MAAI,CAAC,KAAK,QACR,MAAK,0BAAU,IAAI,KAAK;EAG1B,MAAM,WAAW,KAAK,KAAK,SAAS,SAAS,IAAI;EACjD,MAAM,QAAQ,KAAK,IAAI,SAAS,MAAM;EACtC,MAAM,aAAa,GAAG,SAAS,GAAG,MAAM,GAAG;EAE3C,MAAM,WAAW,YAAY;GAC3B,MAAM,UAAU,KAAK;GACrB,MAAM,WAAW,QAAQ,IAAI,WAAW;GAExC,MAAM,oBAAiC;AACrC,QAAI,UAAU;KACZ,MAAM,QAAQ,QAAQ,IAAI,WAAW;AACrC,SAAI,aAAa,MAAM,CACrB,OAAM,MAAM;AAEd,YAAO,SAAS,OAAO,QAAQ,QAAQ,MAAW,CAAC;;AAGrD,WAAO,SAAS,IAAI,YAAY;KAC9B,MAAM,SACJ,OAAO,SAAS,IACZ,MAAO,GAAsC,GAAG,OAAO,GACvD,MAAO,IAA6B;AAC1C,aAAQ,IAAI,YAAY,OAAO;AAC/B,YAAO;MACP,CAAC,OAAO,UAAU;AAClB,aAAQ,IAAI,YAAY;MAAE,SAAS;MAAM;MAAO,CAAC;AACjD,WAAM;MACN;;AAaJ,UAViB,KAAK,mBAAmB,aAAa;IACpD,MAAM;IACN;IACA;IACA;IACA;IACA,SAAS;IACT,QAAQ,OAAO,SAAS,IAAI,SAAS;IACtC,CAAC,EAEe;MACf;AAEJ,SAAO,SAAS,OAAO,QAAQ;;CAcjC,KACE,WACA,aACA,kBAC+B;AAC/B,MAAI,OAAO,cAAc,UAAU;AACjC,OAAI,CAAC,KAAK,QACR,MAAK,0BAAU,IAAI,KAAK;GAG1B,MAAM,MAAM;GACZ,MAAMC,SAAO;GACb,MAAMC,UAAQ;GAEd,MAAM,iBAAiB,KAAK,KAAK,SAAS,SAAS;GACnD,MAAM,QAAQ,KAAK,IAAI,SAAS,MAAM;GAEtC,MAAM,aAAa,GADF,KAAK,KAAK,SAAS,SAAS,IAAI,UAClB,GAAG,MAAM,GAAG;GAE3C,MAAMC,aAAW,YAAY;IAC3B,MAAM,UAAU,KAAK;IACrB,MAAM,oBAAmD;AACvD,SAAI,QAAQ,IAAI,WAAW,EAAE;MAC3B,MAAM,QAAQ,QAAQ,IAAI,WAAW;AACrC,UAAI,aAAa,MAAM,CACrB,OAAM,MAAM;AAEd,aAAO,SAAS,OAAO,QAAQ,QAAQ,MAA6B,CAAC;;AAGvE,YAAO,SAAS,IAAI,YAAY;MAC9B,MAAM,UAAU,MAAM,KAAK,MAAM,QAAQF,OAAK;MAC9C,MAAMG,eAAa,mBAAmB,KAAKH,OAAK;AAChD,UAAI,CAACG,aACH,OAAM,IAAI,MAAM,iDAAiD;MAGnE,MAAM,eAAe,IAAI,YACvB,KAAK,OACL,KAAK,YACL,QACA,KACD;AACD,mBAAa,2BAA2BA,aAAW,MAAM,MAAM;MAE/D,MAAM,SAAU,MAAM,KAAK,sBAGzB,OAAO,QACL,QAAQ,KAAKF,QAAM,EACrB,cACAD,QACAC,QACD;AAED,cAAQ,IAAI,YAAY,OAAO;AAC/B,aAAO;OACP,CAAC,OAAO,UAAU;AAClB,cAAQ,IAAI,YAAY;OAAE,SAAS;OAAM;OAAO,CAAC;AACjD,YAAM;OACN;;IAGJ,MAAM,aAAa,mBAAmB,KAAKD,OAAK;AAChD,QAAI,CAAC,WACH,OAAM,IAAI,MAAM,iDAAiD;AAcnE,WAXiB,KAAK,mBAAmB,aAAa;KACpD,MAAM;KACN;KACA;KACA;KACA;KACA;KACA;KACA,SAAS;KACV,CAAC,EAEe;OACf;AAEJ,UAAO,SAAS,OAAOE,UAAQ;;EAGjC,MAAMF,SAAO;EACb,MAAM,QAAQ;EAEd,MAAM,WAAW,YAAY;GAC3B,MAAM,iBAAiB,KAAK,KAAK,SAAS,SAAS;GACnD,MAAM,QAAQ,KAAK,IAAI,SAAS,MAAM;GAEtC,MAAM,oBAAmD;AACvD,WAAO,KAAK,MAAM,QAAQA,OAAK,CAAC,IAAI,OAAO,YAAY;KACrD,MAAMG,eAAa,mBAAmB,KAAKH,OAAK;AAChD,SAAI,CAACG,aACH,OAAM,IAAI,MAAM,iDAAiD;KAGnE,MAAM,eAAe,IAAI,YAAY,KAAK,OAAO,KAAK,YAAY,QAAW,KAAK;AAClF,kBAAa,2BAA2BA,aAAW,MAAM,MAAM;AAE/D,YAAQ,MAAM,KAAK,sBACjB,OAAO,QAAQ,QAAQ,KAAK,MAAM,EAClC,cACAH,QACA,MACD;MACD;;GAGJ,MAAM,aAAa,mBAAmB,KAAKA,OAAK;AAChD,OAAI,CAAC,WACH,OAAM,IAAI,MAAM,iDAAiD;AAcnE,UAXiB,KAAK,mBAAmB,aAAa;IACpD,MAAM;IACN;IACA;IACA;IACA,YAAY;IACZ;IACA;IACA,SAAS;IACV,CAAC,EAEe;MACf;AAEJ,SAAO,SAAS,OAAO,QAAQ;;CAGjC,SACE,UAKA;EACA,MAAM,iBAAiB,KAAK,KAAK,SAAS,SAAS;EACnD,MAAM,QAAQ,KAAK,IAAI,SAAS,MAAM;EAEtC,MAAM,WAAW,YAAY;GAC3B,MAAM,oBAKA;AACJ,WAAO,SAAS,OAAO,QAAQ,IAAI,SAAS,CAAC,MAAM,aAAa;KACrD;KAGT,OAAO;MACL,OAAO,QAAQ;MACf,WAAW,QAAQ;MACnB,QAAQ;MACT;KACF,EAAE,CAAC;;AAYN,UATiB,KAAK,mBAAmB,aAAa;IACpD,MAAM;IACN,MAAM;IACN,cAAc,SAAS;IACvB;IACA;IACA,SAAS;IACV,CAAC,EAEe;MACf;AAEJ,SAAO,SAAS,OAAO,QAAQ;;CAGjC,gBACE,UAKA;EACA,MAAM,iBAAiB,KAAK,KAAK,SAAS,SAAS;EACnD,MAAM,QAAQ,KAAK,IAAI,SAAS,MAAM;EAEtC,MAAM,WAAW,YAAY;GAC3B,MAAM,oBAGA;AACJ,WAAO,SAAS,OAAO,QAAQ,WAAW,SAAS,CAAC,MAAM,YAAY;KACpE,MAAM,YAAY,QAAQ,QAAQ,MAAM,EAAE,WAAW,YAAY,CAAC;KAClE,MAAM,SAAS,QAAQ,QAAQ,MAAM,EAAE,WAAW,WAAW,CAAC;AAE9D,YAAO;MACI;MACT,OAAO;OACL,OAAO,QAAQ;OACf;OACA;OACD;MACF;MACD,CAAC;;AAYL,UATiB,KAAK,mBAAmB,aAAa;IACpD,MAAM;IACN,MAAM;IACN,cAAc,SAAS;IACvB;IACA;IACA,SAAS;IACV,CAAC,EAEe;MACf;AAEJ,SAAO,SAAS,OAAO,QAAQ;;CAGjC,AAAQ,sBACN,SACA,SACA,QACA,OACa;EACb,MAAM,oBAAiC,SAAS,OAAO,QAAQ,QAAQ,CAAC;EACxE,MAAM,aAAa,mBAAmB,KAAKA,OAAK;AAChD,MAAI,CAAC,WACH,OAAM,IAAI,MAAM,iDAAiD;AAcnE,SAXiB,QAAQ,mBAAmB,aAAa;GACvD,MAAM;GACN;GACA;GACA;GACA,UAAU,QAAQ,KAAK,SAAS,SAAS;GACzC,OAAO,QAAQ,IAAI,SAAS,MAAM;GAClC,YAAY,QAAQ,IAAI,SAAS,WAAW;GAC5C,gBAAgB,QAAQ,KAAK,SAAS,eAAe;GACtD,CAAC,EAEe;;CAGnB,iBAAqC;EACnC,MAAM,sBAAsB,IAAI,IAAI,KAAK,YAAY;AACrD,MAAI,KAAK,QACP,qBAAoB,IAAI,SAAS,QAAQ,KAAK,IAAI,IAAI,KAAK,QAAQ,CAAC;EAGtE,MAAM,YAAY;GAChB,MAAM,QAAiB,oBAAoB,IAAI,IAAI;GACnD,MAAM,MAAe,WAAoB;AACvC,UAAM,IAAI,MAAM,0CAA0C;;GAE7D;AAED,SAAO,EACL,SAAS;GACP,IACE,YACG;AACH,WAAOD,WAAS,IAAI,UAAU;;GAEhC,KACE,YACe;AACf,WAAOA,WAAS,KAAK,UAAU;;GAElC,EACF;;;AAoCL,SAAS,QACP,QACA,OACA,SAWkD;CAClD,MAAM,QAAQ,SAAS,SAAS,YAAY,EAAE,MAAM,SAAS,WAAW,CAAC;CACzE,MAAM,qBAAqB,CAAC,SAAS;CAErC,IAAIK;CACJ,MAAM,kBAAkB,IAAI,SACzB,YAAY;AACX,oBAAkB;GAErB;CAED,MAAM,WAAW,YAAY;AAC3B,MAAI,SAAS,QACX,MAAK,MAAMC,YAAU,QAAQ,QAC3B,KAAI,WAAWA,SAAO,MAAM,CAC1B,OAAM,MAAM,IAAIA,SAAO,UAAU,MAAM,MAAM,QAAQA,SAAO,MAAgC,CAAC;MAE7F,OAAM,MAAM,IAAIA,SAAO,UAAUA,SAAO,MAAM;EAKpD,MAAM,UAAU,IAAI,YAAY,OAAO,SAAS,cAAc,EAAE,EAAE,SAAS,KAAK;AAEhF,MAAI;AACF,OAAI,SAAS,eACX,MAAK,MAAM,CAACN,YAAU,UAAU,QAAQ,eACtC,YAAS,IAAI,SAAS,MAAM;GAIhC,MAAM,oBAAiC;AACrC,WAAO,MAAM,QAAQC,OAAK,CAAC,IAAI,OAAO,YAAY;KAChD,MAAMG,eAAa,mBAAmB,KAAKH,OAAK;AAChD,SAAI,CAACG,aACH,OAAM,IAAI,MAAM,iDAAiD;KAEnE,MAAM,YAAY,SAASA,aAAW,OAAO,MAAM;AAEnD,aAAQ,2BAA2BA,aAAW,MAAM,MAAM;KAE1D,MAAMG,WAAS,MAAM,QAAQ,SAAS,UAAU;AAEhD,cAASH,aAAW,QAAQG,SAAO;AAEnC,YAAOA;MACP;;GAGJ,MAAM,aAAa,mBAAmB,KAAKN,OAAK;AAChD,OAAI,CAAC,WACH,OAAM,IAAI,MAAM,iDAAiD;GAmBnE,MAAM,SAAS,MAhBE,mBACf,SAAS,YACT,aACA,SACA;IACE,MAAM;IACN;IACA;IACA;IACA,UAAU,WAAW,QAAQ,QAAQ,KAAK,SAAS,SAAS;IAC5D,OAAO,QAAQ,IAAI,SAAS,MAAM;IAClC,YAAY,QAAQ,IAAI,SAAS,WAAW;IAC5C,gBAAgB,QAAQ,KAAK,SAAS,eAAe;IACtD,CACF,EAE8B;AAC/B,mBAAgB,QAAQ,gBAAgB,CAAC;AACzC,UAAO;WACA,OAAO;AACd,mBAAgB,QAAQ,gBAAgB,CAAC;AACzC,SAAM;YACE;AACR,OAAI,mBACF,OAAM,MAAM,SAAS;;KAGvB;AAEJ,KAAI,SAAS,SAAS;EACpB,MAAM,iBAAiB,SAAS,IAAI,YAA+C;GACjF,MAAM,CAAC,QAAQ,OAAO,MAAM,QAAQ,IAAI,CAAC,SAAS,gBAAgB,CAAC;AACnE,OAAI,CAAC,IACH,OAAM,IAAI,MAAM,kCAAkC;AAEpD,UAAO;IAAE,SAAS;IAAe;IAAQ;IAAK;IAC9C,CAAC,MAAM,OAAO,UAAU;GACxB,MAAM,MAAM,MAAM;AAClB,OAAI,CAAC,IACH,OAAM,IAAI,MAAM,kCAAkC;AAEpD,UAAO;IAAE,SAAS;IAAgB;IAAO;IAAK;IAC9C;AAEF,SAAO,SAAS,OAAO,gBAAgB,gBAAgB;;AAGzD,QAAO,SAAS,OAAO,SAAS,gBAAgB;;AAmElD,SAAS,SACP,mCASA,uBAQA,WAKwC;AACxC,KAAI,OAAO,sCAAsC,YAAY;EAC3D,MAAM,UAAU;AAUhB,SANY,OAAO;GACjB,MAAM;GACN,SAAS;GACT,OAAO,QAAW;GAClB,QAAQ,QAAW;GACpB,CAAC,CACS,QAAQ,QAAQ;;CAG7B,MAAM,WAAW;AAQjB,KACE,EAAE,UAAU,aACZ,yBACA,OAAO,0BAA0B,YACjC,UAAU,yBACV,WACA;EACA,MAAM,eAAe;EACrB,MAAMG,eAAa;EAInB,MAAMI,aAAW,WAAWJ,gBAAcA,aAAW,UAAU;EAC/D,MAAMK,cACJ,YAAYL,gBAAcA,aAAW,WAAW;AAUlD,SARY,OAAO;GACjB,MAAMA,aAAW;GACjB,SAASA,aAAW;GACpB,OAAOI,aAAWJ,aAAW,QAAS,QAAW;GACjD,QAAQK,cAAYL,aAAW,SAAU,QAAW;GACpD,MAAMA,aAAW;GAClB,CAAC,CAES,QAAQ,cAAc,UAAU;;AAG7C,KAAI,OAAO,0BAA0B,cAAc,EAAE,UAAU,WAAW;EACxE,MAAM,eAAe;EACrB,MAAM,UAAU;AAWhB,SANY,OAAO;GACjB,MAAM;GACN,SAAS;GACT,OAAO,QAAW;GAClB,QAAQ,QAAW;GACpB,CAAC,CACS,QAAQ,cAAc,QAAQ;;AAG3C,KAAI,aAAa,UAAU;EACzB,MAAM,SAAS;EAMf,MAAMI,aAAW,WAAW,UAAU,OAAO,UAAU;EACvD,MAAMC,cAAY,YAAY,UAAU,OAAO,WAAW;EAE1D,MAAMC,QAAM,OAAO;GACjB,MAAM,OAAO;GACb,SAAS,OAAO;GAChB,OAAOF,aAAW,OAAO,QAAS,QAAW;GAC7C,QAAQC,cAAY,OAAO,SAAU,QAAW;GAChD,MAAM,OAAO;GACd,CAAC;AAEF,MAAI,kBAAkB,QAAQ;GAC5B,MAAM,aAAa;AAGnB,UAAOC,MAAI,QAAQ,WAAW,cAAc,WAAW,QAAQ;SAC1D;GACL,MAAM,gBAAgB;AAGtB,UAAOA,MAAI,QAAQ,cAAc,QAAQ;;;CAI7C,MAAM,aAAa;CAInB,MAAM,WAAW,WAAW,cAAc,WAAW,UAAU;CAC/D,MAAM,YACJ,YAAY,cAAc,WAAW,WAAW;CAElD,MAAM,MAAM,OAAO;EACjB,MAAM,WAAW,QAAQ;EACzB,SAAS,WAAW;EACpB,OAAO,WAAW,WAAW,QAAS,QAAW;EACjD,QAAQ,YAAY,WAAW,SAAU,QAAW;EACpD,MAAM,WAAW;EAClB,CAAC;AAEF,KAAI,CAAC,sBACH,QAAO;AAGT,KAAI,OAAO,0BAA0B,WACnC,QAAO,IAAI,QACT,sBACD;KAED,QAAO,IAAI,QAAQ,uBAA4B,UAAW;;AAI9D,MAAaC,OAGT,OAAO,OAAO,UAAU;CAClB;CACC;CACV,CAAC;;;;ACr8BF,IAAM,eAAN,MAAqD;CACnD,AAAO;CACP,AAAQ;CACR,AAAQ;CACR,AAAQ,iBAA0C;CAClD,AAAQ,kBAA4C;CACpD,AAAQ,yBAAmD;CAC3D,AAAO;CAEP,YAAY,OAAkB,WAAe,OAAgC;AAC3E,OAAK,QAAQ;AACb,OAAK,YAAY;AACjB,OAAK,QAAQ;AAEb,OAAK,UAAU,KAAK,uBAAuB;EAE3C,MAAM,WAAW,KAAK,MAAM,SAAS,IAAI,UAAU;AACnD,MAAI,CAAC,YAAY,CAAC,SAAS,SACzB,MAAK,MAAM,SAAS,IAAI,WAAW;GACjC,UAAU;GACV,OAAO,UAAU;GAClB,CAAC;;CAIN,MAAc,cAAgC;EAC5C,MAAM,EAAE,SAAS,cAAc,mBAC7B,KAAK,iBAAiB;AAExB,MAAI,mBAAmB,QAAW;AAChC,SAAM,IAAI,SAAe,YAAY,eAAe,QAAQ,CAAC;AAE7D,QAAK,MAAM,SAAS,IAAI,KAAK,WAAW;IACtC,UAAU;IACV,OAAO;KACL,MAAM;KACN,OAAO;KACP,UAAU,SAAS,OAAO,QAAQ,QAAQ,eAAe,CAAC;KAC3D;IACF,CAAC;AAEF,UAAO;;EAGT,MAAM,aAAa,KAAK,kBAAkB;EAE1C,MAAM,uBAAuB,MAAM,KAAK,MAAM,wBAC5C,cACA,KAAK,UACN;EAED,MAAM,SAAS,MAAM,KAAK,eACxB,SACA,sBACA,WACD;EAED,MAAM,kBAAkB,MAAM,KAAK,oBAAoB,OAAO;AAE9D,OAAK,MAAM,SAAS,IAAI,KAAK,WAAW;GACtC,UAAU;GACV,OAAO;IACL,MAAM;IACN,OAAO;IACP,UAAU,SAAS,OAAO,QAAQ,QAAQ,gBAAgB,CAAC;IAC5D;GACF,CAAC;AAEF,OAAK,MAAM,8BAA8B,KAAK,UAAU;AACxD,OAAK,iBAAiB;AACtB,OAAK,kBAAkB;AACvB,OAAK,yBAAyB;AAE9B,SAAO;;CAGT,MAAc,2BAA6C;AACzD,MAAI;AACF,UAAO,MAAM,KAAK,aAAa;WACxB,OAAO;GACd,MAAM,EAAE,eAAe,cAAc,kBACnC,KAAK,uBAAuB,MAAM;AAEpC,QAAK,MAAM,SAAS,IAAI,KAAK,WAAW;IACtC,UAAU;IACV,OAAO;KACL,MAAM;KACN,OAAO;KACP,SAAS;KACM;KAChB;IACF,CAAC;AAEF,QAAK,MAAM,8BAA8B,KAAK,UAAU;AACxD,QAAK,MAAM,iBAAiB,eAAe,KAAK,UAAU;AAC1D,QAAK,iBAAiB;AACtB,QAAK,kBAAkB;AAEvB,SAAM;;;CAIV,AAAQ,wBAAwB;AAC9B,UAAQ,QAAiB,UAA6B;AACpD,QAAK,MAAM,uBAAuB;GAGlC,MAAM,SADQ,KAAK,MAAM,SAAS,IAAI,KAAK,UAAU,EAC/B;AAEtB,OAAI,UAAU,CAAC,MACb,QAAO,KAAK,kBAAkB,OAAO;AAGvC,OAAI,KAAK,kBAAkB,CAAC,OAAO;AACjC,QAAI,CAAC,KAAK,gBACR,MAAK,kBAAkB,SAAS,OAAO,KAAK,eAAe;AAE7D,WAAO,KAAK;;AAGd,QAAK,MAAM,yBAAyB,KAAK,WAAW,KAAK,UAAU;AAEnE,QAAK,iBAAiB,KAAK,0BAA0B;AAErD,QAAK,MAAM,SAAS,IAAI,KAAK,WAAW;IACtC,UAAU;IACV,OAAO;KAAE,MAAM;KAAW,SAAS,KAAK;KAAgB;IACzD,CAAC;AAEF,QAAK,kBAAkB,SAAS,OAAO,KAAK,eAAe;AAC3D,UAAO,KAAK;;;CAIhB,AAAQ,kBACN,QAC2B;AAC3B,MAAI,OAAO,SAAS,YAAY;AAC9B,OAAI,OAAO,SACT,QAAO,OAAO;AAEhB,OAAI,CAAC,KAAK,uBACR,MAAK,yBAAyB,SAAS,OAAO,QAAQ,QAAQ,OAAO,MAAM,CAAC;AAE9E,UAAO,KAAK;;AAGd,MAAI,OAAO,SAAS,WAClB,OAAM,OAAO;AAGf,MAAI,CAAC,KAAK,gBACR,MAAK,kBAAkB,SAAS,OAAO,OAAO,QAAQ;AAExD,SAAO,KAAK;;CAGd,AAAQ,kBAAkC;EACxC,MAAM,WAAW,KAAK,MAAM,iBAAiB,MAC1C,SAAS,KAAK,aAAa,KAAK,UAClC;AAED,MAAI,CAAC,SACH,QAAO;GACL,SAAS,KAAK,UAAU;GACxB,cAAc,KAAK,UAAU;GAC9B;EAGH,MAAM,QAAQ,SAAS;AAEvB,MAAI,CAAC,WAAW,MAAM,CACpB,QAAO;GACL,SAAS,KAAK,UAAU;GACxB,cAAc,KAAK,UAAU;GAC7B,gBAAgB;GACjB;AAGH,SAAO;GACL,SAAS,MAAM;GACf,cAAc,MAAM;GACrB;;CAGH,MAAc,eACZ,SACA,sBACA,YACkB;AAClB,MAAI;GACF,MAAM,gBACJ,QAAQ,UAAU,IACb,QACC,sBACA,WACD,GACA,QAAyC,WAAW;AAE3D,OAAI,yBAAyB,QAC3B,KAAI;AACF,WAAO,MAAM;YACN,YAAY;IACnB,MAAM,eAAeC,gBAAuB,KAAK,UAAU;IAC3D,MAAM,kBAAkB,CAAC,aAAa;AAEtC,UAAMC,yBACS,qBACb,cACA,iBACA,YACA;KACE,sBAAsB,yBAAyB;KAC/C,aAAa,OAAO;KACpB,gBAAgB;KACjB,CACF;;AAIL,UAAO;WACA,WAAW;GAClB,MAAM,eAAeD,gBAAuB,KAAK,UAAU;GAC3D,MAAM,kBAAkB,CAAC,aAAa;AAEtC,SAAMC,yBACS,qBACb,cACA,iBACA,WACA;IACE,sBAAsB,yBAAyB;IAC/C,aAAa,OAAO;IACpB,gBAAgB;IACjB,CACF;;;CAIL,MAAc,oBAAoB,QAAmC;EACnE,IAAI,eAAe;EACnB,MAAM,SAAS,KAAK,MAAM,YAAY;AAEtC,OAAK,MAAM,SAAS,QAAQ;GAC1B,MAAM,UAAU,MAAM,MACpB,WACA,KAAK,WACL,cACA,KAAK,MACN;AAED,OAAI,YAAY,UAAa,QAAQ,aAAa,KAAK,UACrD,gBAAe,QAAQ;;AAI3B,SAAO;;CAGT,AAAQ,uBAAuB,OAI7B;AACA,MACE,SACA,OAAO,UAAU,YACjB,aAAa,SACb,UAAU,SACV,MAAM,WACN,MAAM,KAEN,QAAO;GACL,eAAe;GACf,cAAc,MAAM;GACpB,eAAe;GAChB;EAGH,MAAM,eAAeD,gBAAuB,KAAK,UAAU;EAC3D,MAAM,kBAAkB,CAAC,aAAa;EAEtC,MAAM,gBAAgBE,wBACP,2BACb,cACA,iBACA,OACA;GACE,WAAW,OAAO,aAAa,QAAQ;GACvC,iBAAiB;GACjB,oBAAoB;GACrB,CACF;AAED,SAAO;GACL;GACA,cAAc,cAAc;GAC5B,eAAe;GAChB;;CAGH,SAAiD;AAC/C,OAAK,MAAM,uBAAuB;EAClC,MAAM,aAAa,KAAK,MAAM,SAAS,IAAI,KAAK,UAAU;AAC1D,MAAI,CAAC,WACH;AAEF,SAAO,WAAW,SAAS;;CAG7B,MAAe;AACb,OAAK,MAAM,uBAAuB;EAClC,MAAM,aAAa,KAAK,MAAM,SAAS,IAAI,KAAK,UAAU,EAAE;AAE5D,MAAI,CAAC,cAAc,WAAW,SAAS,UACrC,OAAM,IAAI,MAAM,2BAA2B;AAG7C,MAAI,WAAW,SAAS,WACtB,OAAM,WAAW,iBAAiB,WAAW;AAG/C,SAAO,WAAW;;CAGpB,QAAQ,OAAgB,OAAuB;AAC7C,SAAO,KAAK,MAAM,QAAQ,KAAK,WAAW,KAAK;;CAGjD,OACE,UACgB;AAChB,SAAO,KAAK,MAAM,OAAO,KAAK,WAAW,SAAS;;CAGpD,IAAI,OAAgC;AAClC,SAAO,KAAK,MAAM,OAAO,KAAK,WAAW,MAAM;;CAGjD,UAAU,IAA4C;AACpD,OAAK,MAAM,uBAAuB;AAClC,SAAO,KAAK,MAAM,SAAS,KAAK,WAAW,GAAG;;CAGhD,AAAQ,mBAAoC;AAC1C,SAAO;GACL,UAAU,YAA0B;IAClC,MAAM,aACJ,KAAK,MAAM,YAAY,IAAI,KAAK,UAAU,oBAAI,IAAI,KAAK;AACzD,SAAK,MAAM,YAAY,IAAI,KAAK,WAAW,WAAW;AACtD,eAAW,IAAI,QAAQ;;GAEzB,eAAe,KAAK,MAAM,QAAQ,KAAK,UAAU;GACjD,cAAc,KAAK,MAAM,QAAQ,KAAK,WAAW,KAAK,CAAC,UAAU,OAAU;GAC3E,OAAO,KAAK;GACb;;;AAIL,SAAS,YAAY,GAA2C;AAC9D,KAAI,eAAe,EAAE,IAAI,mBAAmB,EAAE,IAAI,iBAAiB,EAAE,CACnE,QAAO,EAAE;AAGX,QAAO;;AAGT,IAAM,YAAN,MAAM,UAAgC;CACpC,AAAU,WAAoB;CAC9B,AAAU,wBAA6B,IAAI,KAAK;CAChD,AAAU,2BAAuC,IAAI,KAGlD;CACH,AAAU,oCAA8C,IAAI,KAGzD;CACH,AAAU,oCAAsC,IAAI,KAAkB;CACtE,AAAU,WAIN;EACF,wBAAQ,IAAI,KAA0B;EACtC,yBAAS,IAAI,KAA2B;EACxC,uBAAO,IAAI,KAA+B;EAC3C;CACD,AAAU,2BAAsD,IAAI,KAGjE;CACH,AAAQ,cAAc;CAEtB,AAAQ,kCAAoC,IAAI,KAAK;CAErD,AAAU,aAAoC,EAAE;CAChD,AAAQ,qBAA4C,EAAE;CACtD,AAAU,WAAqC,EAAE;CACjD,AAAU,gBAAwC,EAAE;CACpD,AAAO;CAEP,OAAwB,iBAAqC;EAC3D,WAAW;EACX,WAAW;EACZ;CAED,YAAY,SAAuB;AACjC,MAAI,SAAS,SACX,MAAK,WAAW,CAAC,GAAG,QAAQ,SAAS;AAGvC,MAAI,SAAS,cACX,MAAK,gBAAgB,QAAQ;AAG/B,MAAI,SAAS,KACX,MAAK,QAAQ,QAAQ;AAGvB,MAAI,SAAS,WACX,MAAK,MAAMC,eAAa,QAAQ,WAC9B,MAAK,aAAaA,YAAU;;CAKlC,AAAU,2BACR,UACA,mBACM;EACN,MAAM,eAAe,KAAK,gBAAgB,IAAI,kBAAkB;AAChE,MAAI,gBAAgB,aAAa,IAAI,SAAS,EAAE;GAC9C,MAAM,aAAa,MAAM,KAAK,aAAa;GAC3C,MAAM,kBAAkBC,qBAA4B,WAAW;AAE/D,SAAMC,4BACS,qBACbL,gBAAuB,SAAS,EAChC,iBACAA,gBAAuB,SAAS,EAChC,QACA;IACE,cACE,gBAAgB,KAAK,OAAO,GAC5B,SACAA,gBAAuB,SAAS;IAClC,YAAYA,gBAAuB,kBAAkB;IACtD,CACF;;;CAIL,AAAU,wBAAwB,UAAc,mBAA6B;EAC3E,MAAM,eACJ,KAAK,gBAAgB,IAAI,kBAAkB,oBAAI,IAAI,KAAK;AAC1D,eAAa,IAAI,SAAS;AAC1B,OAAK,gBAAgB,IAAI,mBAAmB,aAAa;;CAG3D,AAAU,6BAA6B,UAAoB;AACzD,OAAK,gBAAgB,OAAO,SAAS;;CAGvC,AAAU,4BACR,cACA,YACM;EACN,MAAM,YAAY,KAAK,gBAAgB,IAAI,aAAa;AACxD,MAAI,WAAW;GACb,MAAM,WAAW,IAAI,IAAI,UAAU;AACnC,YAAS,IAAI,aAAa;AAC1B,QAAK,gBAAgB,IAAI,YAAY,SAAS;;;CAIlD,MAAgB,kBAAkB,GAAsB;EACtD,MAAM,KAAK,KAAK,SAAS,IAAI,EAAE;AAC/B,MAAI,GACF,MAAK,MAAM,KAAK,MAAM,KAAK,GAAG,QAAQ,CAAC,CAAC,SAAS,CAC/C,OAAM,GAAG;;CAKf,MAAgB,iBAAiB,GAAsB;EACrD,MAAM,KAAK,KAAK,MAAM,IAAI,EAAE;AAC5B,MAAI,CAAC,GACH,OAAM,IAAI,MAAM,+BAA+B;EAGjD,MAAM,YAAY,KAAK,kBAAkB,IAAI,EAAE;AAC/C,MAAI,UACF,MAAK,MAAM,KAAK,MAAM,KAAK,UAAU,QAAQ,CAAC,EAAE;AAC9C,OAAI,KAAK,SAAS,IAAI,EAAE,CACtB,MAAK,mBAAmB,EAAE;AAI5B,SADU,KAAK,MAAM,IAAI,EAAE,CAClB,SAAS,QAAQ,KAAK;AAE/B,OAAI,KAAK,kBAAkB,IAAI,EAAE,IAAI,KAAK,kBAAkB,IAAI,EAAE,CAChE,OAAM,KAAK,kBAAkB,EAAE;;EAKrC,MAAM,YAAY,KAAK,kBAAkB,IAAI,EAAE;AAC/C,MAAI,UACF,MAAK,MAAM,MAAM,MAAM,KAAK,UAAU,QAAQ,CAAC,CAC7C,OAAM,GAAG,GAAG,SAAS;;CAK3B,MAAgB,gBACd,OAIA,UACe;EACf,MAAM,oBAAoB,KAAK,SAAS,IAAI,SAAS;AACrD,MAAI,kBACF,MAAK,MAAM,YAAY,MAAM,KAAK,kBAAkB,QAAQ,CAAC,CAC3D,KAAI;AACF,SAAM,SAAS,OAAO,UAAU,KAAK;WAC9B,eAAe;AACtB,WAAQ,MAAM,4BAA4B,cAAc;;AAK9D,OAAK,MAAM,YAAY,MAAM,KAAK,KAAK,SAAS,MAAM,QAAQ,CAAC,CAC7D,KAAI;AACF,SAAM,SAAS,OAAO,UAAU,KAAK;WAC9B,eAAe;AACtB,WAAQ,MAAM,mCAAmC,cAAc;;AAInE,OAAK,MAAMG,eAAa,KAAK,WAC3B,KAAIA,YAAU,QACZ,KAAI;AACF,eAAU,QAAQ,OAAO,KAAK;WACvB,gBAAgB;AACvB,WAAQ,MAAM,qCAAqC,eAAe;;;CAM1E,MAAgB,mBACd,IACA,KACkB;EAClB,MAAM,IAAI,YAAY,GAAG;AAEzB,OAAK,4BAA4B,GAAG,IAAI;AAExC,OAAK,6BAA6B,KAAK,EAAE;EAEzC,MAAM,IAAI,KAAK,iBAAiB,EAAE;AAElC,MAAI,eAAe,GAAG,CACpB,QAAO;AAGT,MAAI,mBAAmB,GAAG,EAAE;GAC1B,MAAM,IAAI,KAAK,kBAAkB,IAAI,GAAG,SAAS,oBAAI,IAAI,KAAK;AAC9D,QAAK,kBAAkB,IAAI,GAAG,UAAU,EAAE;AAC1C,KAAE,IAAI,IAAI;;AAGZ,QAAM,EAAE,QAAQ,MAAM;AACtB,MAAI,iBAAiB,GAAG,CACtB,QAAO;AAGT,SAAO,EAAE,KAAK;;CAGhB,MAAgB,uBACd,IAKA,KACoE;AACpE,MAAI,OAAO,OACT;AAGF,MAAI,WAAW,GAAG,CAChB,QAAO,KAAK,oBAAoB,IAAI,IAAI;AAG1C,MAAI,MAAM,QAAQ,GAAG,CACnB,QAAO,MAAM,QAAQ,IACnB,GAAG,KAAK,SAAS,KAAK,wBAAwB,MAAM,IAAI,CAAC,CAC1D;EAGH,MAAM,OAAO,OAAO,KAAK,GAAG;EAC5B,MAAM,WAAW,KAAK,KAAK,MAAM,KAAK,wBAAwB,GAAG,IAAI,IAAI,CAAC;EAC1E,MAAM,SAAS,MAAM,QAAQ,IAAI,SAAS;EAE1C,MAAMG,IAA6B,OAAO,OAAO,KAAK;AACtD,OAAK,SAAS,GAAG,MAAM;AACrB,KAAE,KAAK,OAAO;IACd;AAEF,SAAO;;CAGT,AAAU,uBAA6B;AACrC,MAAI,KAAK,SACP,OAAM,IAAI,MAAM,oBAAoB;;CAIxC,AAAQ,mBACN,cACA,WACA,WACmB;EACnB,IAAI,WAAW;AACf,OAAK,MAAMH,eAAa,KAAK,mBAC3B,KAAIA,YAAU,MAAM;GAClB,MAAM,UAAU;AAChB,oBAAiB;IACf,MAAM,SAASA,YAAU,KAAS,WAAW,SAAS,UAAU;AAChE,WAAO,kBAAkB,WAAW,SAAS,SAAS,OAAO,OAAO;;;AAI1E,SAAO;;CAGT,AAAU,gBAAgB,GAA2C;EACnE,IAAI,YACF,eAAe,EAAE,IAAI,mBAAmB,EAAE,IAAI,iBAAiB,EAAE,GAC7D,EAAE,WACD;EAEP,MAAM,iBAAiB,KAAK,MAAM,IAAI,UAAU;AAChD,MAAI,kBAAkB,eAAe,SACnC,QAAO,eAAe;AAIxB,SADiB,IAAI,aAAa,MAAM,WAAW,EAAE,MAAM;;CAI7D,SAAY,UAA8C;AACxD,OAAK,uBAAuB;AAC5B,SAAO,KAAK,iBAAiB,SAAS;;CAGxC,UAA+C;AAC7C,SAAO,MAAM,KAAK,KAAK,MAAM,SAAS,CAAC,CAAC,KAAK,CAAC,UAAU,WAAW;AACjE,UAAO,CAAC,UAAU,MAAM,SAAS;IACjC;;CAGJ,sBAAgD;AAC9C,OAAK,uBAAuB;AAC5B,SAAO,CAAC,GAAG,KAAK,SAAS;;CAG3B,QACE,UACA,QAAiB,OACJ;AACb,OAAK,uBAAuB;EAE5B,MAAM,oBAAiC;GACrC,MAAMI,aAAW,KAAK,iBAAiB,SAAS;AAChD,UAAOA,WAAS,QAAQ,MAAM,CAAC,UAAUA,WAAS,KAAK,CAAM;;AAc/D,SAXiB,KAAK,mBACpB,aACA,UAAU,gBACV;GACE,MAAM;GACN;GACA,OAAO;GACP,WAAW;GACZ,CACF,EAEgB;;CAGnB,gBACE,UACA,QAAiB,OACW;AAC5B,OAAK,uBAAuB;EAC5B,MAAMA,aAAW,KAAK,iBAAiB,SAAS;AAChD,SAAOA,WAAS,QAAQ,MAAM,CAAC,UAAUA,WAA6B;;CAGxE,OACE,GACA,GACgB;AAChB,MAAI,KAAK,YACP,QAAO,SAAS,OAAO,QAAQ,SAAS,CAAC;AAG3C,OAAK,uBAAuB;EAE5B,MAAM,mBAAmC;AACvC,UAAO,SAAS,QAAQ,YAAY;AAClC,SAAK,mBAAmB,EAAE;IAC1B,MAAMA,aAAW,KAAK,iBAAiB,EAAE;IAEzC,IAAIC;AAEJ,QAAI,OAAO,MAAM,WAEf,SADW,EACAD,WAAS,KAAK,CAAM;QAE/B,SAAQ;IAGV,MAAM,SAAS,KAAK,SAAS;AAC7B,SAAK,MAAM,SAAS,QAAQ;KAC1B,MAAM,UAAU,MAAM,MAAM,UAAU,GAAG,OAAO,KAAK;AACrD,SAAI,YAAY,UAAa,MAAM,QAAQ,SACzC,SAAQ,QAAQ;;AAIpB,SAAK,MAAM,IAAI,GAAG;KAChB;KACA,OAAO;MACL,MAAM;MACN;MACA,UAAU,SAAS,OAAO,QAAQ,QAAQ,MAAM,CAAC;MAClD;KACF,CAAC;AAEF,UAAM,KAAK,kBAAkB,EAAE;OAC7B,CAAC;;EAGP,MAAM,oBAAiC;AACrC,UAAO,YAAY,CAAC,UAAU,KAAK,SAAS,EAAE,CAAC,KAAK,CAAM;;AAU5D,SAPgB,KAAK,mBAAmB,aAAa,UAAU,gBAAgB;GAC7E,MAAM;GACN,WAAW;GACX,UAAU;GACV,OAAO;GACR,CAAC,EAEc,CAAC,UAAU,OAAU;;CAGvC,IAAO,GAAqB,OAA0B;AACpD,SAAO,KAAK,OAAO,GAAG,MAAM;;CAG9B,QAAQ,GAA2B,IAAa,OAAuB;AACrE,OAAK,uBAAuB;EAE5B,MAAM,cAAc,YAA2B;AAE7C,OAAI,CADO,KAAK,MAAM,IAAI,EAAE,IACjB,CAAC,EACV,OAAM,IAAI,MAAM,+BAA+B;AAGjD,SAAM,KAAK,mBAAmB,EAAE;GAChC,MAAM,SAAS,KAAK,SAAS;AAC7B,QAAK,MAAM,SAAS,OAClB,OAAM,MAAM,WAAW,GAAG,KAAK;GAGjC,MAAM,YAAY,KAAK,kBAAkB,IAAI,EAAE;AAC/C,OAAI,WAAW;AACb,SAAK,MAAM,KAAK,MAAM,KAAK,UAAU,QAAQ,CAAC,CAC5C,OAAM,KAAK,QAAQ,GAAG,KAAK;AAE7B,SAAK,kBAAkB,OAAO,EAAE;;AAGlC,QAAK,kBAAkB,OAAO,EAAE;AAEhC,QAAK,MAAM,OAAO,EAAE;;AAGtB,SAAO,SAAS,OAAO,aAAa,CAAC;;CAGvC,UAA0B;AACxB,OAAK,uBAAuB;AAC5B,OAAK,cAAc;AAEnB,SAAO,SAAS,QAAQ,YAAY;GAClC,MAAM,yBAAyB,KAAK,WAAW,KAC5C,QAAQ,IAAI,UAAU,KAAK,IAAI,QAAQ,SAAS,CAClD;AACD,SAAM,QAAQ,IAAI,uBAAuB;GAEzC,MAAM,WAAW,KAAK,MAAM,MAAM;AAClC,QAAK,MAAM,WAAW,SACpB,OAAM,KAAK,QAAQ,SAAS,KAAK;AAGnC,QAAK,WAAW;AAChB,QAAK,MAAM,OAAO;AAClB,QAAK,SAAS,OAAO;AACrB,QAAK,kBAAkB,OAAO;AAC9B,QAAK,kBAAkB,OAAO;AAC9B,QAAK,SAAS,OAAO,OAAO;AAC5B,QAAK,SAAS,QAAQ,OAAO;AAC7B,QAAK,SAAS,MAAM,OAAO;AAC3B,QAAK,SAAS,OAAO;AACrB,QAAK,gBAAgB,OAAO;MAC1B,CAAC;;CAGP,SACE,GACA,IACc;AACd,OAAK,uBAAuB;AAC5B,MAAI,KAAK,YACP,OAAM,IAAI,MAAM,uDAAuD;EAGzE,MAAM,KAAK,KAAK,kBAAkB,IAAI,EAAE,oBAAI,IAAI,KAAK;AACrD,OAAK,kBAAkB,IAAI,GAAG,GAAG;AACjC,KAAG,IAAI,GAAiB;AAExB,eAAa;AACX,QAAK,uBAAuB;GAE5B,MAAME,OAAK,KAAK,kBAAkB,IAAI,EAAE;AACxC,OAAIA,MAAI;AACN,SAAG,OAAO,GAAiB;AAC3B,QAAIA,KAAG,SAAS,EACd,MAAK,kBAAkB,OAAO,EAAE;;;;CAMxC,SAAS,UAA6C;AACpD,OAAK,uBAAuB;AAC5B,MAAI,KAAK,YACP,OAAM,IAAI,MAAM,uDAAuD;AAGzE,OAAK,SAAS,UAAU,IAAI,SAAS;AACrC,eAAa;AACX,QAAK,uBAAuB;AAC5B,QAAK,SAAS,UAAU,OAAO,SAAS;;;CAI5C,UAAU,IAAwC;AAChD,OAAK,uBAAuB;AAC5B,MAAI,KAAK,YACP,OAAM,IAAI,MAAM,uDAAuD;AAGzE,OAAK,SAAS,WAAW,IAAI,GAAG;AAChC,eAAa;AACX,QAAK,uBAAuB;AAC5B,QAAK,SAAS,WAAW,OAAO,GAAG;;;CASvC,QACE,oBACA,UACc;AACd,OAAK,uBAAuB;AAC5B,MAAI,KAAK,YACP,OAAM,IAAI,MAAM,sDAAsD;AAGxE,MAAI,OAAO,uBAAuB,YAAY;AAC5C,QAAK,SAAS,SAAS,IAAI,mBAAmB;AAC9C,gBAAa;AACX,SAAK,uBAAuB;AAC5B,SAAK,SAAS,SAAS,OAAO,mBAAmB;;;AAIrD,MAAI,UAAU;GACZ,MAAM,WAAW;GACjB,MAAM,iBAAiB,KAAK,SAAS,IAAI,SAAS,oBAAI,IAAI,KAAK;AAC/D,QAAK,SAAS,IAAI,UAAU,eAAe;AAC3C,kBAAe,IAAI,SAAwC;AAE3D,gBAAa;AACX,SAAK,uBAAuB;IAC5B,MAAM,YAAY,KAAK,SAAS,IAAI,SAAS;AAC7C,QAAI,WAAW;AACb,eAAU,OAAO,SAAwC;AACzD,SAAI,UAAU,SAAS,EACrB,MAAK,SAAS,OAAO,SAAS;;;;AAMtC,QAAM,IAAI,MAAM,gCAAgC;;CAGlD,aAAa,aAA8C;AACzD,OAAK,uBAAuB;AAC5B,MAAI,KAAK,YACP,OAAM,IAAI,MAAM,iDAAiD;AAGnE,OAAK,WAAW,KAAKN,YAAU;AAC/B,OAAK,mBAAmB,QAAQA,YAAU;AAC1C,cAAU,OAAO,KAAK;AAEtB,eAAa;AACX,QAAK,uBAAuB;GAC5B,MAAM,MAAM,KAAK,WAAW,QAAQA,YAAU;AAC9C,OAAI,QAAQ,IAAI;AACd,SAAK,WAAW,OAAO,KAAK,EAAE;AAC9B,SAAK,mBAAmB,OAAO,KAAK,mBAAmB,SAAS,IAAI,KAAK,EAAE;;;;CAKjF,IAAI,aAA8C;AAChD,SAAO,KAAK,aAAaA,YAAU;;CA+BrC,KACE,QACA,OACA,SASkD;AAClD,OAAK,uBAAuB;AAE5B,MAAI,SAAS,YAAY,KACvB,QAAOO,KAAQ,QAAQC,QAAM,OAAY;GACvC,OAAO;GACP,YAAY,QAAQ;GACpB,gBAAgB,QAAQ;GACxB,SAAS,QAAQ;GACjB,MAAM,QAAQ;GACd,SAAS;GACV,CAAC;AAGJ,SAAOD,KAAQ,QAAQC,QAAM,OAAY;GACvC,OAAO;GACP,YAAY,SAAS;GACrB,gBAAgB,SAAS;GACzB,SAAS,SAAS;GAClB,MAAM,SAAS;GACf,SAAS;GACV,CAAC;;;AAeN,SAAgB,YACd,GAAG,KACS;AACZ,KAAI,IAAI,GAAG,EAAE,KAAK,OAChB,QAAO,IAAI,WAAW;AAGxB,KAAI,IAAI,WAAW,KAAK,CAAC,SAAS,IAAI,GAAG,CACvC,QAAO,IAAI,UAAU,IAAI,GAAG;AAG9B,QAAO,IAAI,UAAU,EACnB,eAAe,KAChB,CAAC;;;;;ACljCJ,SAAgB,UAAyC,KAAW;AAClE,QAAO;;;;;ACKT,eAAsB,SAKpB,OACA,WACqD;CACrD,MAAM,eAAe,EAAE;CACvB,MAAM,cAAc,EAAE;CAEtB,MAAM,UAAU,MAAM,QAAQ,UAAU;AAExC,MAAK,MAAM,CAAC,OAAO,aAAa,OAAO,QAAQ,UAAU,EAAE;EACzD,MAAM,SAAS,CAAC,WAAW,SAAS,GAChC,SAAS,QAAQ,GACjB,eAAe,SAAS,IACxB,mBAAmB,SAAS,IAC5B,iBAAiB,SAAS,GAC1B,SAAS,WACR;EAEL,MAAM,SAAS,MAAM,MAAM,QAAQ,OAAO;AAE1C,MAAI,QACF,aAAY,KAAK,OAAO;MAExB,QAAO,OAAO,cAAc,GAAG,QAAQ,QAAQ,CAAC;;AAKpD,QADe,UAAU,cAAc;;;;;;;;;AC5BzC,IAAM,oBAAN,MAAoD;CAClD,AAAQ;CACR,AAAQ;CACR,AAAQ;CACR,AAAQ;CACR,AAAO;CAEP,YACE,QACA,QACA,SACA,mBACA;AACA,OAAK,SAAS;AACd,OAAK,SAAS;AACd,OAAK,UAAU;AACf,OAAK,oBAAoB;AACzB,OAAK,KAAK;;CAGZ,WAAW,KAAQ;EACjB,MAAM,eAAe,SAAS,KAAK,OAAO,WAAW,IAAI;AAIzD,SAAO;GAAE;GAAc,gBAHA,KAAK,OAAO,eAC/B,KAAK,OAAO,aAAa,aAAa,GACtC;GACmC;;CAGzC,YAAY,KAA0B;EACpC,MAAM,EAAE,mBAAmB,KAAK,WAAW,IAAI;EAC/C,MAAM,WAAW,KAAK,kBAAkB,IAAI;AAC5C,OAAK,QAAQ,IAAI,gBAAgB,SAAS;AAC1C,SAAO;;CAGT,OAAO,KAA0B;EAC/B,MAAM,EAAE,mBAAmB,KAAK,WAAW,IAAI;AAC/C,SAAO,KAAK,QAAQ,IAAI,eAAe,IAAI,KAAK,YAAY,IAAI;;CAGlE,gBAAgB,KAAsB;AACpC,UAAQ,QAAW;GACjB,MAAM,WAAW,KAAK,OAAO,IAAI;AACjC,UAAO,IAAI,MAAM,SAAS,SAAS;;;CAIvC,QAAQ,OAAmC;AACzC,SAAO,SAAS,QAAQ,YAAY;GAClC,MAAM,UAAU,MAAM,SAAS;AAC/B,QAAK,MAAM,CAAC,aAAa,SAAS;IAChC,MAAM,QAAQ,KAAK,OAAO,OACtB,KAAK,OAAO,KAAK,SAAS,GAC1B,KAAK,OAAO,KAAK,SAAS;AAC9B,QAAI,UAAU,MAAM,QAAQ,MAAM,GAAG,MAAM,SAAS,IAAI,OACtD,OAAM,MAAM,QAAQ,SAAS;;MAG/B,CAAC;;;AAIT,SAAS,wBACP,QACA,KACA,kBACkB;AAElB,QAAO,iBADc,SAAS,OAAO,WAAW,IAAI,CACf;;AAGvC,SAAS,oBACP,QACA,QACA,SACA,mBACA,eAC2B;CAC3B,MAAM,OAAO,IAAI,kBACf,QACA,QACA,SACA,kBACD;CAED,MAAM,WAAW,gBACd,QAAyB,KAAK,gBAAgB,IAAI,EACnD,QACA,cACD;CAED,MAAM,cAAc,QAAW,KAAK,OAAO,IAAI;AAM/C,QALsB,OAAO,OAAO,YAAY,UAAU;EACxD,UAAU,UAAsB,KAAK,QAAQ,MAAM;EACnD,IAAI,KAAK;EACV,CAAC;;AAKJ,SAAgBC,UACd,QACA,SACA,GAAG,OACwB;CAC3B,MAAM,SAAS,KAAK,QAAQ,EAAE,QAAmB,CAAC;CAClD,MAAM,0BAAU,IAAI,KAAgC;CAEpD,MAAM,qBAAqB,QAAW;AACpC,SAAO,wBAAwB,QAAQ,MAAM,iBAC3C,gBACG,QAAyB,QAAQ,cAAc,IAAI,EACpD,QACA,CAAC,OAAO,OAAU,EAAE,GAAG,MAAM,CAC9B,CACF;;AAGH,QAAO,oBAAoB,QAAQ,QAAQ,SAAS,mBAAmB,CACrE,OAAO,OAAU,EACjB,GAAG,MACJ,CAAC;;AAGJ,SAAgBC,SACd,QACA,SACA,GAAG,OACwB;CAC3B,MAAM,SAAS,KAAK,QAAQ,EAAE,QAAc,CAAC;CAC7C,MAAM,0BAAU,IAAI,KAAgC;CAEpD,MAAM,qBAAqB,QAAW;AACpC,SAAO,wBAAwB,QAAQ,MAAM,iBAAiB;GAC5D,MAAMC,WAAyC,cAAc,QAC3D,QAAQ,cAAqC,cAAc,IAAI;GAEjE,MAAM,OAAO,OAAO;AAKpB,UAAO,eAAe,SAAS,MAAM,MAAM;IAC3C;;AAGJ,QAAO,oBAAoB,QAAQ,QAAQ,SAAS,mBAAmB,MAAM;;;;;AC1H/E,MAAaC,OAA4B,KACvC,kBACA,QAAgB,CACjB"}
1
+ {"version":3,"file":"index.js","names":["executorSymbol: unique symbol","metaSymbol: unique symbol","meta","factory: Core.DependentFn<T, unknown>","fulfilled: any[]","rejected: unknown[]","mapped: R[]","messages: Record<Code, string>","context: Omit<ErrorContext, \"resolutionStage\">","context: ErrorContext","meta","AccessorImpl","extension","flowMeta: {\n depth: Accessor.AccessorWithDefault<number>;\n flowName: Accessor.Accessor<string | undefined>;\n parentFlowName: Accessor.Accessor<string | undefined>;\n isParallel: Accessor.AccessorWithDefault<boolean>;\n journal: Accessor.Accessor<ReadonlyMap<string, unknown>>;\n}","name: string","version: string","input: StandardSchemaV1<I>","output: StandardSchemaV1<S>","metas: Meta.Meta[]","executor","extensions: Extension.Extension[]","parent?: FlowContext","meta","accessor","flow","input","promise","definition","resolveSnapshot!: (snapshot: Flow.ExecutionData | undefined) => void","result","hasInput","hasOutput","def","flow: typeof flowImpl & {\n define: typeof define;\n execute: typeof execute;\n}","errors.getExecutorName","errors.createFactoryError","errors.createSystemError","extension","errors.buildDependencyChain","errors.createDependencyError","r: Record<string, unknown>","accessor","value: T | undefined","ou","flowApi","flow","provide","derive","factory: Core.DependentFn<T, unknown>","name: Meta.MetaFn<string>"],"sources":["../src/types.ts","../src/ssch.ts","../src/meta.ts","../src/executor.ts","../src/promises.ts","../src/errors.ts","../src/accessor.ts","../src/flow.ts","../src/scope.ts","../src/extension.ts","../src/helpers.ts","../src/multi.ts","../src/index.ts"],"sourcesContent":["import { type Promised } from \"./promises\";\n\nexport const executorSymbol: unique symbol = Symbol.for(\n \"@pumped-fn/core/executor\"\n);\nexport const metaSymbol: unique symbol = Symbol.for(\"@pumped-fn/core/meta\");\n\nexport interface StandardSchemaV1<Input = unknown, Output = Input> {\n readonly \"~standard\": StandardSchemaV1.Props<Input, Output>;\n}\n\nexport declare namespace StandardSchemaV1 {\n export interface Props<Input = unknown, Output = Input> {\n readonly version: 1;\n readonly vendor: string;\n readonly validate: (\n value: unknown\n ) => Result<Output> | Promise<Result<Output>>;\n readonly types?: Types<Input, Output> | undefined;\n }\n\n export type Result<Output> = SuccessResult<Output> | FailureResult;\n\n export interface SuccessResult<Output> {\n readonly value: Output;\n readonly issues?: undefined;\n }\n\n export interface FailureResult {\n readonly issues: ReadonlyArray<Issue>;\n }\n\n export interface Issue {\n readonly message: string;\n readonly path?: ReadonlyArray<PropertyKey | PathSegment> | undefined;\n }\n\n export interface PathSegment {\n readonly key: PropertyKey;\n }\n\n export interface Types<Input = unknown, Output = Input> {\n readonly input: Input;\n readonly output: Output;\n }\n\n export type InferInput<Schema extends StandardSchemaV1> = NonNullable<\n Schema[\"~standard\"][\"types\"]\n >[\"input\"];\n\n export type InferOutput<Schema extends StandardSchemaV1> = NonNullable<\n Schema[\"~standard\"][\"types\"]\n >[\"output\"];\n}\n\nexport class SchemaError extends Error {\n public readonly issues: ReadonlyArray<StandardSchemaV1.Issue>;\n\n constructor(issues: ReadonlyArray<StandardSchemaV1.Issue>) {\n super(issues[0].message);\n this.name = \"SchemaError\";\n this.issues = issues;\n }\n}\n\nexport interface ErrorContext {\n readonly executorName?: string;\n readonly resolutionStage:\n | \"dependency-resolution\"\n | \"factory-execution\"\n | \"post-processing\"\n | \"validation\";\n readonly dependencyChain: string[];\n readonly scopeId?: string;\n readonly timestamp: number;\n readonly additionalInfo?: Record<string, unknown>;\n}\n\nexport class ExecutorResolutionError extends Error {\n public readonly context: ErrorContext;\n public readonly code: string;\n public readonly category: \"USER_ERROR\" | \"SYSTEM_ERROR\" | \"VALIDATION_ERROR\";\n\n constructor(\n message: string,\n context: ErrorContext,\n code: string,\n category: \"USER_ERROR\" | \"SYSTEM_ERROR\" | \"VALIDATION_ERROR\" = \"USER_ERROR\",\n options?: { cause?: unknown }\n ) {\n super(message, options);\n this.name = \"ExecutorResolutionError\";\n this.context = context;\n this.code = code;\n this.category = category;\n }\n}\n\nexport class FactoryExecutionError extends ExecutorResolutionError {\n constructor(\n message: string,\n context: Omit<ErrorContext, \"resolutionStage\">,\n code: string,\n options?: { cause?: unknown }\n ) {\n super(\n message,\n { ...context, resolutionStage: \"factory-execution\" },\n code,\n \"USER_ERROR\",\n options\n );\n this.name = \"FactoryExecutionError\";\n }\n}\n\nexport class DependencyResolutionError extends ExecutorResolutionError {\n public readonly missingDependency?: string;\n\n constructor(\n message: string,\n context: Omit<ErrorContext, \"resolutionStage\">,\n code: string,\n missingDependency?: string,\n options?: { cause?: unknown }\n ) {\n super(\n message,\n { ...context, resolutionStage: \"dependency-resolution\" },\n code,\n \"USER_ERROR\",\n options\n );\n this.name = \"DependencyResolutionError\";\n this.missingDependency = missingDependency;\n }\n}\n\nexport declare namespace Meta {\n export interface MetaContainer {\n metas: Meta[] | undefined;\n }\n\n export interface Meta<V = unknown> {\n readonly [metaSymbol]: true;\n readonly key: string | symbol;\n readonly schema: StandardSchemaV1<V>;\n readonly value: V;\n }\n\n export interface MetaFn<V> {\n (value: V): Meta<V>;\n readonly key: string | symbol;\n partial: <D extends Partial<V>>(d: D) => D;\n some: (source: MetaContainer | Meta[] | undefined) => V[];\n find: (source: MetaContainer | Meta[] | undefined) => V | undefined;\n get: (source: MetaContainer | Meta[] | undefined) => V;\n }\n\n export interface DefaultMetaFn<V> extends MetaFn<V> {\n (value?: V): Meta<V>;\n defaultValue: V;\n }\n}\n\nexport declare namespace Core {\n export type Output<T> = T | Promise<T>;\n export type GeneratorOutput<Y, T> =\n | T\n | Promise<T>\n | Generator<Y, T>\n | AsyncGenerator<Y, T>;\n\n export type NoDependencyFn<T> = (scope: Controller) => Output<T>;\n export type DependentFn<T, D> = (\n dependencies: D,\n scope: Controller\n ) => Output<T>;\n\n export type NoDependencyGeneratorFn<Y, T> = (\n scope: Controller\n ) => GeneratorOutput<Y, T>;\n export type DependentGeneratorFn<Y, T, D> = (\n dependencies: D,\n scope: Controller\n ) => GeneratorOutput<Y, T>;\n export type RecordLike = Record<string, unknown>;\n export type UExecutor = BaseExecutor<unknown>;\n\n export type Cleanup = () => void | Promised<void>;\n\n export type Controller = {\n cleanup: (cleanup: Cleanup) => void;\n release: () => Promised<void>;\n reload: () => Promised<void>;\n scope: Scope;\n };\n\n export type Kind = \"main\" | \"reactive\" | \"lazy\" | \"static\";\n\n export interface BaseExecutor<T> extends Meta.MetaContainer {\n [executorSymbol]: Kind;\n factory: NoDependencyFn<T> | DependentFn<T, unknown> | undefined;\n dependencies:\n | undefined\n | UExecutor\n | Array<UExecutor>\n | Record<string, UExecutor>;\n }\n\n export interface Executor<T> extends BaseExecutor<T> {\n [executorSymbol]: \"main\";\n factory: NoDependencyFn<T> | DependentFn<T, unknown>;\n readonly lazy: Lazy<T>;\n readonly reactive: Reactive<T>;\n readonly static: Static<T>;\n }\n\n export interface Reactive<T> extends BaseExecutor<T> {\n [executorSymbol]: \"reactive\";\n factory: undefined;\n readonly executor: Executor<T>;\n }\n\n export interface Lazy<T> extends BaseExecutor<Accessor<T>> {\n [executorSymbol]: \"lazy\";\n factory: undefined;\n readonly executor: Executor<T>;\n }\n\n export interface Static<T> extends BaseExecutor<Accessor<T>> {\n [executorSymbol]: \"static\";\n factory: undefined;\n readonly executor: Executor<T>;\n }\n\n export type PendingState<T> = { kind: \"pending\"; promise: Promise<T> };\n export type ResolvedState<T> = {\n kind: \"resolved\";\n value: T;\n promised?: Promised<T>;\n };\n export type RejectedState = {\n kind: \"rejected\";\n error: unknown;\n context?: ErrorContext;\n enhancedError?: ExecutorResolutionError;\n };\n\n export type ResolveState<T> =\n | PendingState<T>\n | ResolvedState<T>\n | RejectedState;\n\n export interface Accessor<T> extends Meta.MetaContainer {\n lookup(): undefined | ResolveState<T>;\n\n get(): T;\n resolve(force?: boolean): Promised<T>;\n release(soft?: boolean): Promised<void>;\n update(updateFn: T | ((current: T) => T)): Promised<void>;\n set(value: T): Promised<void>;\n subscribe(callback: (value: T) => void): Cleanup;\n }\n\n export interface Preset<T> {\n [executorSymbol]: \"preset\";\n executor: Executor<T>;\n value: T | Executor<T>;\n }\n\n export type ExecutorProxy<T> = T extends object\n ? {\n [K in keyof T]: T[K] extends (...args: infer Args) => infer R\n ? Executor<(...args: Args) => R>\n : never;\n }\n : never;\n\n export type NestedProxy<T> = T extends object\n ? {\n [K in keyof T]: T[K] extends (...args: infer Args) => infer R\n ? Executor<(...args: Args) => R>\n : T[K] extends object\n ? NestedProxy<T[K]>\n : never;\n }\n : never;\n\n export type InferOutput<T> = T extends Executor<infer U> | Reactive<infer U>\n ? Awaited<U>\n : T extends Lazy<infer U> | Static<infer U>\n ? Accessor<Awaited<U>>\n : T extends\n | ReadonlyArray<Core.BaseExecutor<unknown>>\n | Record<string, Core.BaseExecutor<unknown>>\n ? { [K in keyof T]: InferOutput<T[K]> }\n : never;\n\n export type Event = \"resolve\" | \"update\" | \"release\";\n export type Replacer = Preset<unknown>;\n type EventCallbackResult = void | Replacer;\n\n export type ChangeCallback = (\n event: \"resolve\" | \"update\",\n executor: Executor<unknown>,\n resolved: unknown,\n scope: Scope\n ) => EventCallbackResult | Promised<EventCallbackResult>;\n\n export type ReleaseCallback = (\n event: \"release\",\n executor: Executor<unknown>,\n scope: Scope\n ) => void | Promised<void>;\n\n export type ErrorCallback<T = unknown> = (\n error:\n | ExecutorResolutionError\n | FactoryExecutionError\n | DependencyResolutionError,\n executor: Executor<T>,\n scope: Scope\n ) => void | Promised<void>;\n\n export type GlobalErrorCallback = (\n error:\n | ExecutorResolutionError\n | FactoryExecutionError\n | DependencyResolutionError,\n executor: Executor<unknown>,\n scope: Scope\n ) => void | Promised<void>;\n\n export type WrapContext = {\n operation: \"resolve\" | \"update\";\n executor: Executor<unknown>;\n scope: Scope;\n };\n\n export type SingleDependencyLike = Core.BaseExecutor<unknown>;\n\n export type MultiDependencyLike =\n | ReadonlyArray<Core.BaseExecutor<unknown>>\n | Record<string, Core.BaseExecutor<unknown>>;\n\n export type DependencyLike = SingleDependencyLike | MultiDependencyLike;\n export type Destructed<T extends DependencyLike> =\n T extends SingleDependencyLike\n ? T\n : {\n [K in keyof T]: T[K];\n };\n\n export interface Scope extends Meta.MetaContainer {\n accessor<T>(executor: Core.Executor<T>, eager?: boolean): Accessor<T>;\n entries(): [Core.Executor<unknown>, Core.Accessor<unknown>][];\n registeredExecutors(): Core.Executor<unknown>[];\n\n resolve<T>(executor: Core.Executor<T>, force?: boolean): Promised<T>;\n resolveAccessor<T>(executor: Core.Executor<T>): Promised<Accessor<T>>;\n\n update<T>(\n executor: Executor<T>,\n updateFn: T | ((current: T) => T)\n ): Promised<void>;\n set<T>(executor: Executor<T>, value: T): Promised<void>;\n\n release(executor: Executor<any>, soft?: boolean): Promised<void>;\n\n dispose(): Promised<void>;\n\n onUpdate<T>(\n executor: Executor<T>,\n callback: (accessor: Accessor<T>) => void\n ): Cleanup;\n\n onChange(cb: ChangeCallback): Cleanup;\n onRelease(cb: ReleaseCallback): Cleanup;\n onError<T>(executor: Executor<T>, callback: ErrorCallback<T>): Cleanup;\n onError(callback: GlobalErrorCallback): Cleanup;\n\n useExtension(extension: Extension.Extension): Cleanup;\n\n exec<S, I = undefined>(\n flow: Core.Executor<Flow.Handler<S, I>>,\n input?: I,\n options?: {\n extensions?: Extension.Extension[];\n initialContext?: Array<\n [Accessor.Accessor<any> | Accessor.AccessorWithDefault<any>, any]\n >;\n meta?: Meta.Meta[];\n details?: false;\n }\n ): Promised<S>;\n\n exec<S, I = undefined>(\n flow: Core.Executor<Flow.Handler<S, I>>,\n input: I | undefined,\n options: {\n extensions?: Extension.Extension[];\n initialContext?: Array<\n [Accessor.Accessor<any> | Accessor.AccessorWithDefault<any>, any]\n >;\n meta?: Meta.Meta[];\n details: true;\n }\n ): Promised<Flow.ExecutionDetails<S>>;\n }\n}\n\nexport class FlowError extends Error {\n public readonly code: string;\n public readonly data?: unknown;\n\n constructor(\n message: string,\n code: string,\n data?: unknown,\n options?: { cause?: unknown }\n ) {\n super(message);\n this.name = \"FlowError\";\n this.code = code;\n this.data = data;\n if (options?.cause) {\n this.cause = options.cause;\n }\n }\n}\n\nexport class FlowValidationError extends FlowError {\n public readonly issues: StandardSchemaV1.Issue[];\n\n constructor(\n message: string,\n issues: StandardSchemaV1.Issue[],\n options?: { cause?: unknown }\n ) {\n super(message, \"VALIDATION_ERROR\", { issues }, options);\n this.name = \"FlowValidationError\";\n this.issues = issues;\n }\n}\n\nexport namespace Flow {\n export type Definition<S, I> = {\n name: string;\n input: StandardSchemaV1<I>;\n output: StandardSchemaV1<S>;\n version?: string;\n } & Meta.MetaContainer;\n\n export interface Handler<S, I> {\n (ctx: Context, input: I): S | Promised<S>;\n def: Definition<S, I>;\n }\n\n export type UFlow = Core.Executor<Handler<any, any>>;\n\n export interface Flow<I, O> extends Core.Executor<Handler<O, I>> {\n definition: Definition<O, I>;\n }\n\n export type InferInput<F> = F extends\n | Handler<any, infer I>\n | Core.Executor<Handler<any, infer I>>\n | Flow<infer I, any>\n ? I\n : never;\n\n export type InferOutput<F> = F extends\n | Handler<infer S, any>\n | Core.Executor<Handler<infer S, any>>\n | Flow<any, infer O>\n ? S extends never ? O : S\n : never;\n\n export type FlowRouterNode = { [key: string]: UFlow | FlowRouterNode };\n\n export type PathsToFlows<T> = T extends UFlow\n ? \"\"\n : T extends object\n ? {\n [K in keyof T]: K extends string\n ? PathsToFlows<T[K]> extends infer P\n ? P extends \"\"\n ? K\n : P extends string\n ? `${K}.${P}`\n : never\n : never\n : never;\n }[keyof T]\n : never;\n\n export type GetFlowFromPath<T, P extends string> = P extends `${infer First}.${infer Rest}`\n ? First extends keyof T\n ? GetFlowFromPath<T[First], Rest>\n : never\n : P extends keyof T\n ? T[P]\n : never;\n\n export type InferInputFromPath<Router, Path extends string> = GetFlowFromPath<Router, Path> extends infer F\n ? F extends UFlow\n ? InferInput<F>\n : never\n : never;\n\n export type InferOutputFromPath<Router, Path extends string> = GetFlowFromPath<Router, Path> extends infer F\n ? F extends UFlow\n ? InferOutput<F>\n : never\n : never;\n\n export type FlowRouterExecutor<Router extends FlowRouterNode> = <P extends PathsToFlows<Router>>(\n path: P,\n input: InferInputFromPath<Router, P>\n ) => Promised<InferOutputFromPath<Router, P>>;\n\n export type FnExecutor<I, O> = (input: I) => O | Promised<O>;\n\n export type MultiFnExecutor<Args extends readonly unknown[], O> = (\n ...args: Args\n ) => O | Promised<O>;\n\n export type AnyFnExecutor<O = unknown> =\n | FnExecutor<any, O>\n | MultiFnExecutor<any[], O>;\n\n export type Opt = {};\n\n export type ParallelResult<T> = {\n results: T;\n stats: {\n total: number;\n succeeded: number;\n failed: number;\n };\n };\n\n export type ParallelSettledResult<T> = {\n results: PromiseSettledResult<T>[];\n stats: {\n total: number;\n succeeded: number;\n failed: number;\n };\n };\n\n export type ParallelExecutionOptions = {\n mode?: \"race\" | \"all\" | \"all-settled\";\n errorMapper?: (error: unknown, index: number) => any;\n onItemComplete?: (result: any, index: number) => void;\n };\n\n export type C = {\n readonly scope: Core.Scope;\n readonly metas: Meta.Meta[] | undefined;\n\n get<T>(accessor: Accessor.Accessor<T> | Accessor.AccessorWithDefault<T>): T;\n find<T>(accessor: Accessor.Accessor<T>): T | undefined;\n find<T>(accessor: Accessor.AccessorWithDefault<T>): T;\n set<T>(\n accessor: Accessor.Accessor<T> | Accessor.AccessorWithDefault<T>,\n value: T\n ): void;\n\n run<T>(key: string, fn: () => Promised<T> | T): Promised<T>;\n run<T, P extends readonly unknown[]>(\n key: string,\n fn: (...args: P) => Promised<T> | T,\n ...params: P\n ): Promised<T>;\n\n exec<F extends UFlow>(\n flow: F,\n input: InferInput<F>\n ): Promised<InferOutput<F>>;\n\n exec<F extends UFlow>(\n key: string,\n flow: F,\n input: InferInput<F>\n ): Promised<InferOutput<F>>;\n\n parallel<T extends readonly Promised<any>[]>(\n promises: [...T]\n ): Promised<\n ParallelResult<{\n [K in keyof T]: T[K] extends Promised<infer R> ? R : never;\n }>\n >;\n\n parallelSettled<T extends readonly Promised<any>[]>(\n promises: [...T]\n ): Promised<\n ParallelSettledResult<{\n [K in keyof T]: T[K] extends Promised<infer R> ? R : never;\n }>\n >;\n };\n\n export type Context = C;\n\n export type ExecutionData = {\n readonly context: {\n get<T>(accessor: Accessor.Accessor<T> | Accessor.AccessorWithDefault<T>): T;\n find<T>(accessor: Accessor.Accessor<T>): T | undefined;\n find<T>(accessor: Accessor.AccessorWithDefault<T>): T;\n };\n };\n\n export type ExecutionDetails<T> =\n | { success: true; result: T; ctx: ExecutionData }\n | { success: false; error: unknown; ctx: ExecutionData };\n}\n\nexport namespace Extension {\n export type Operation =\n | {\n kind: \"resolve\";\n executor: Core.Executor<unknown>;\n scope: Core.Scope;\n operation: \"resolve\" | \"update\";\n }\n | {\n kind: \"execute\";\n flow: Flow.UFlow;\n definition: Flow.Definition<any, any>;\n input: unknown;\n flowName: string | undefined;\n depth: number;\n isParallel: boolean;\n parentFlowName: string | undefined;\n }\n | {\n kind: \"journal\";\n key: string;\n flowName: string;\n depth: number;\n isReplay: boolean;\n context: Accessor.DataStore;\n params?: readonly unknown[];\n }\n | {\n kind: \"subflow\";\n flow: Flow.UFlow;\n definition: Flow.Definition<any, any>;\n input: unknown;\n journalKey: string | undefined;\n parentFlowName: string | undefined;\n depth: number;\n context: Accessor.DataStore;\n }\n | {\n kind: \"parallel\";\n mode: \"parallel\" | \"parallelSettled\";\n promiseCount: number;\n depth: number;\n parentFlowName: string | undefined;\n context: Accessor.DataStore;\n };\n\n export interface Extension {\n name: string;\n\n init?(scope: Core.Scope): void | Promise<void> | Promised<void>;\n\n wrap?<T>(\n context: Accessor.DataStore,\n next: () => Promised<T>,\n operation: Operation\n ): Promise<T> | Promised<T>;\n\n onError?(\n error:\n | ExecutorResolutionError\n | FactoryExecutionError\n | DependencyResolutionError,\n scope: Core.Scope\n ): void;\n\n dispose?(scope: Core.Scope): void | Promise<void> | Promised<void>;\n }\n}\n\nexport declare namespace Accessor {\n export interface DataStore {\n get(key: unknown): unknown;\n set(key: unknown, value: unknown): unknown | undefined;\n }\n\n export type AccessorSource = DataStore | Meta.MetaContainer | Meta.Meta[];\n\n interface BaseAccessor<T> {\n readonly key: symbol;\n readonly schema: StandardSchemaV1<T>;\n }\n\n export interface Accessor<T> extends BaseAccessor<T> {\n get(source: AccessorSource): T;\n find(source: AccessorSource): T | undefined;\n set(source: DataStore, value: T): void;\n preset(value: T): [symbol, T];\n }\n\n export interface AccessorWithDefault<T> extends BaseAccessor<T> {\n readonly defaultValue: T;\n get(source: AccessorSource): T;\n find(source: AccessorSource): T;\n set(source: DataStore, value: T): void;\n preset(value: T): [symbol, T];\n }\n}\n\nexport namespace Multi {\n export type Key = unknown;\n export type MultiExecutor<T, K> = Core.Executor<(k: K) => Core.Accessor<T>> &\n ((key: K) => Core.Executor<T>) & {\n release: (scope: Core.Scope) => Promised<void>;\n id: Meta.MetaFn<unknown>;\n };\n\n export type DependentFn<T, K, D> = (\n dependencies: D,\n key: K,\n scope: Core.Controller\n ) => Core.Output<T>;\n\n export type Option<K> = {\n keySchema: StandardSchemaV1<K>;\n keyTransform?: (key: K) => unknown;\n };\n\n export type DeriveOption<K, D> = Option<K> & {\n dependencies: D;\n };\n}\n","import { SchemaError, StandardSchemaV1 } from \"./types\";\n\nexport function validate<TSchema extends StandardSchemaV1>(\n schema: TSchema,\n data: unknown\n): Awaited<StandardSchemaV1.InferOutput<TSchema>> {\n const result = schema[\"~standard\"].validate(data);\n\n if (\"then\" in result) {\n throw new Error(\"validating async is not supported\");\n }\n\n if (result.issues) {\n throw new SchemaError(result.issues);\n }\n return result.value as Awaited<StandardSchemaV1.InferOutput<TSchema>>;\n}\n\n\nexport function custom<T>(): StandardSchemaV1<T, T> {\n return {\n \"~standard\": {\n vendor: \"pumped-fn\",\n version: 1,\n validate: (value) => {\n return { value: value as T };\n },\n },\n };\n}\n","import { validate } from \"./ssch\";\nimport { metaSymbol, StandardSchemaV1, type Meta } from \"./types\";\n\nclass MetaFunction<V> {\n public readonly key: symbol;\n public readonly schema: StandardSchemaV1<V>;\n public readonly [metaSymbol] = true;\n\n constructor(key: string | symbol, schema: StandardSchemaV1<V>) {\n this.key = typeof key === \"string\" ? Symbol(key) : key;\n this.schema = schema;\n }\n\n __call(value: V): Meta.Meta<V> {\n return {\n [metaSymbol]: true,\n key: this.key,\n schema: this.schema,\n value,\n } as Meta.Meta<V>;\n }\n\n partial<D extends Partial<V>>(d: D): D {\n return Object.assign({}, this.__call({} as V), d);\n }\n\n some(source: Meta.MetaContainer | Meta.Meta[] | undefined): V[] {\n return findValues(source, this as unknown as Meta.MetaFn<unknown>) as V[];\n }\n\n find(source: Meta.MetaContainer | Meta.Meta[] | undefined): V | undefined {\n return findValue(source, this as unknown as Meta.MetaFn<unknown>) as\n | V\n | undefined;\n }\n\n get(source: Meta.MetaContainer | Meta.Meta[] | undefined): V {\n const values = findValues(\n source,\n this as unknown as Meta.MetaFn<unknown>\n ) as V[];\n if (values.length === 0) {\n throw new Error(`Meta value with key ${String(this.key)} not found`);\n }\n return values[0];\n }\n}\n\nexport const meta = <V>(\n key: string | symbol,\n schema: StandardSchemaV1<V>\n): Meta.MetaFn<V> => {\n const metaFunc = new MetaFunction(key, schema);\n\n const fn = ((value: V) => metaFunc.__call(value)) as Meta.MetaFn<V>;\n\n Object.defineProperty(fn, \"key\", {\n value: metaFunc.key,\n writable: false,\n configurable: false,\n });\n Object.defineProperty(fn, metaSymbol, {\n value: true,\n writable: false,\n configurable: false,\n });\n fn.partial = metaFunc.partial.bind(metaFunc);\n fn.some = metaFunc.some.bind(metaFunc);\n fn.find = metaFunc.find.bind(metaFunc);\n fn.get = metaFunc.get.bind(metaFunc);\n\n return fn;\n};\n\nexport function getValue<V>(meta: Meta.Meta<V>): Awaited<V> {\n return validate(meta.schema, meta.value);\n}\n\nexport function findValues<V = unknown>(\n executor: Meta.MetaContainer | Meta.Meta[] | undefined,\n meta: Meta.MetaFn<V>\n): V[] {\n if (!executor) return [];\n\n const metas = Array.isArray(executor) ? executor : executor.metas ?? [];\n\n const maybeMeta = metas.filter((m) => m.key === meta.key);\n return maybeMeta.map((m) => getValue(m as Meta.Meta<V>));\n}\n\nexport function findValue<V>(\n executor: Meta.MetaContainer | Meta.Meta[] | undefined,\n meta: Meta.MetaFn<V>\n): V | undefined {\n const values = findValues(executor, meta);\n return values.at(0);\n}\n","import { Core, executorSymbol, Meta } from \"./types\";\nimport type { Escapable } from \"./helpers\";\n\nexport function createExecutor<T>(\n factory: Core.NoDependencyFn<T> | Core.DependentFn<T, unknown>,\n dependencies:\n | undefined\n | Core.UExecutor\n | ReadonlyArray<Core.UExecutor>\n | Record<string, Core.UExecutor>,\n metas: Meta.Meta[] | undefined\n): Core.Executor<T> {\n const executor = {\n [executorSymbol]: \"main\",\n factory: (_: unknown, controller: Core.Controller) => {\n if (dependencies === undefined) {\n const f = factory as Core.NoDependencyFn<T>;\n return f(controller);\n }\n\n const f = factory as Core.DependentFn<T, unknown>;\n return f(_, controller);\n },\n dependencies,\n metas: metas,\n } as unknown as Core.Executor<T>;\n\n const lazyExecutor = {\n [executorSymbol]: \"lazy\",\n dependencies: undefined,\n executor,\n factory: undefined,\n metas: metas,\n } satisfies Core.Lazy<T>;\n\n const reactiveExecutor = {\n [executorSymbol]: \"reactive\",\n executor,\n factory: undefined,\n dependencies: undefined,\n metas: metas,\n } satisfies Core.Reactive<T>;\n\n const staticExecutor = {\n [executorSymbol]: \"static\",\n dependencies: undefined,\n factory: undefined,\n metas: metas,\n executor,\n } satisfies Core.Static<T>;\n\n Object.defineProperties(executor, {\n lazy: {\n value: lazyExecutor,\n writable: false,\n configurable: false,\n enumerable: false,\n },\n reactive: {\n value: reactiveExecutor,\n writable: false,\n configurable: false,\n enumerable: false,\n },\n static: {\n value: staticExecutor,\n writable: false,\n configurable: false,\n enumerable: false,\n },\n });\n\n return executor;\n}\n\nexport function isLazyExecutor(\n executor: Core.BaseExecutor<unknown>\n): executor is Core.Lazy<unknown> {\n return executor[executorSymbol] === \"lazy\";\n}\n\nexport function isReactiveExecutor(\n executor: Core.BaseExecutor<unknown>\n): executor is Core.Reactive<unknown> {\n return executor[executorSymbol] === \"reactive\";\n}\n\nexport function isStaticExecutor(\n executor: Core.BaseExecutor<unknown>\n): executor is Core.Static<unknown> {\n return executor[executorSymbol] === \"static\";\n}\n\nexport function isMainExecutor(\n executor: unknown\n): executor is Core.Executor<unknown> {\n return isExecutor(executor) && executor[executorSymbol] === \"main\";\n}\n\nexport function isExecutor<T>(input: unknown): input is Core.BaseExecutor<T> {\n return typeof input === \"object\" && input !== null && executorSymbol in input;\n}\n\nexport function isPreset(input: unknown): input is Core.Preset<unknown> {\n return (\n typeof input === \"object\" &&\n input !== null &&\n executorSymbol in input &&\n (input as Core.Preset<unknown>)[executorSymbol] === \"preset\"\n );\n}\n\nexport function provide<T>(\n factory: Core.NoDependencyFn<T>,\n ...metas: Meta.Meta[]\n): Core.Executor<T> {\n return createExecutor(factory, undefined, metas);\n}\n\nexport function derive<T, D extends Core.DependencyLike>(\n pdependencies: { [K in keyof D]: D[K] },\n pfactory: Core.DependentFn<T, Core.InferOutput<D>>,\n ...metas: Meta.Meta[]\n): Core.Executor<T> {\n const factory: Core.DependentFn<T, unknown> = (deps, ctl) =>\n pfactory(deps as Core.InferOutput<D>, ctl);\n\n const dependencies = pdependencies as\n | Core.UExecutor\n | ReadonlyArray<Core.UExecutor>\n | Record<string, Core.UExecutor>;\n\n return createExecutor(factory, dependencies, metas);\n}\n\nexport function preset<T>(\n e: Core.Executor<T> | Escapable<T>,\n v: T | Core.Executor<T>\n): Core.Preset<T> {\n const executor = isExecutor(e) ? e : e.escape();\n\n return {\n [executorSymbol]: \"preset\",\n value: v,\n executor,\n };\n}\n\n","import type { Core, Flow } from \"./types\";\n\nexport class Promised<T> implements PromiseLike<T> {\n private executionDataPromise?: Promise<Flow.ExecutionData | undefined>;\n private promise: Promise<T>;\n\n constructor(\n promise: Promise<T> | Promised<T>,\n executionDataPromise?: Promise<Flow.ExecutionData | undefined>\n ) {\n this.promise = promise instanceof Promised ? promise.promise : promise;\n this.executionDataPromise = executionDataPromise;\n }\n\n static create<T>(\n promise: Promise<T> | Promised<T>,\n executionDataPromise?: Promise<Flow.ExecutionData | undefined>\n ): Promised<T> {\n return new Promised(promise, executionDataPromise);\n }\n\n map<U>(fn: (value: T) => U | Promise<U>): Promised<U> {\n return Promised.create(this.promise.then(fn),\n this.executionDataPromise);\n }\n\n switch<U>(fn: (value: T) => Promised<U>): Promised<U> {\n return Promised.create(this.promise.then(fn),\n this.executionDataPromise);\n }\n\n mapError(fn: (error: unknown) => unknown): Promised<T> {\n return Promised.create(this.promise.catch((error) => {\n throw fn(error);\n }),\n this.executionDataPromise);\n }\n\n switchError(fn: (error: unknown) => Promised<T>): Promised<T> {\n return Promised.create(this.promise.catch(fn),\n this.executionDataPromise);\n }\n\n then<TResult1 = T, TResult2 = never>(\n onfulfilled?: ((value: T) => TResult1 | PromiseLike<TResult1>) | null | undefined,\n onrejected?: ((reason: unknown) => TResult2 | PromiseLike<TResult2>) | null | undefined\n ): Promised<TResult1 | TResult2> {\n return Promised.create(this.promise.then(onfulfilled, onrejected),\n this.executionDataPromise);\n }\n\n catch<TResult = never>(\n onrejected?: ((reason: unknown) => TResult | PromiseLike<TResult>) | null | undefined\n ): Promised<T | TResult> {\n return Promised.create(this.promise.catch(onrejected),\n this.executionDataPromise);\n }\n\n finally(onfinally?: (() => void) | null | undefined): Promised<T> {\n return Promised.create(this.promise.finally(onfinally),\n this.executionDataPromise);\n }\n\n toPromise(): Promise<T> {\n return this.promise;\n }\n\n async ctx(): Promise<Flow.ExecutionData | undefined> {\n if (!this.executionDataPromise) {\n return undefined;\n }\n return this.executionDataPromise;\n }\n\n async inDetails(): Promise<Flow.ExecutionDetails<T>> {\n return Promised.try(async () => {\n const [result, ctx] = await Promise.all([\n this.promise,\n this.executionDataPromise,\n ]);\n\n if (!ctx) {\n throw new Error(\n \"Execution context not available. inDetails() can only be used on flows executed via flow.execute()\"\n );\n }\n\n return { success: true as const, result, ctx };\n }).catch(async (error) => {\n const ctx = await this.executionDataPromise;\n\n if (!ctx) {\n throw new Error(\n \"Execution context not available. inDetails() can only be used on flows executed via flow.execute()\"\n );\n }\n\n return { success: false as const, error, ctx };\n });\n }\n\n static all<T extends readonly unknown[] | []>(\n values: T\n ): Promised<{ [K in keyof T]: Awaited<T[K]> }> {\n const flowPromises = values as readonly (Promised<unknown> | unknown)[];\n const promises = flowPromises.map((v) =>\n v instanceof Promised ? v.toPromise() : Promise.resolve(v)\n );\n\n return Promised.create(Promise.all(promises) as Promise<any>);\n }\n\n static race<T extends readonly unknown[] | []>(\n values: T\n ): Promised<Awaited<T[number]>> {\n const flowPromises = values as readonly (Promised<unknown> | unknown)[];\n const promises = flowPromises.map((v) =>\n v instanceof Promised ? v.toPromise() : Promise.resolve(v)\n );\n\n return Promised.create(Promise.race(promises) as Promise<any>);\n }\n\n static allSettled<T extends readonly unknown[] | []>(\n values: T\n ): Promised<{ [K in keyof T]: PromiseSettledResult<Awaited<T[K]>> }> {\n const flowPromises = values as readonly (Promised<unknown> | unknown)[];\n const promises = flowPromises.map((v) =>\n v instanceof Promised ? v.toPromise() : Promise.resolve(v)\n );\n\n return Promised.create(Promise.allSettled(promises) as Promise<any>);\n }\n\n static try<T>(fn: () => T | Promise<T>): Promised<T> {\n const promise = new Promise<T>((resolve, reject) => {\n try {\n const result = fn();\n resolve(result);\n } catch (error) {\n reject(error);\n }\n });\n\n return Promised.create(promise);\n }\n\n private static extractResults<U>(\n value: readonly PromiseSettledResult<U>[] | { results: readonly PromiseSettledResult<U>[] }\n ): readonly PromiseSettledResult<U>[] {\n if (Array.isArray(value)) {\n return value;\n }\n return (value as { results: readonly PromiseSettledResult<U>[] }).results;\n }\n\n private mapResults<R>(\n fn: (results: readonly PromiseSettledResult<any>[]) => R\n ): Promised<R> {\n return this.map((value: any) => {\n const results = Promised.extractResults(value);\n return fn(results);\n });\n }\n\n fulfilled<U>(\n this: Promised<readonly PromiseSettledResult<U>[]> | Promised<{ results: readonly PromiseSettledResult<any>[] }>\n ): Promised<any[]> {\n return this.mapResults((results) =>\n results\n .filter((r: any): r is PromiseFulfilledResult<any> => r.status === \"fulfilled\")\n .map((r: any) => r.value)\n );\n }\n\n rejected<U>(\n this: Promised<readonly PromiseSettledResult<U>[]> | Promised<{ results: readonly PromiseSettledResult<any>[] }>\n ): Promised<unknown[]> {\n return this.mapResults((results) =>\n results\n .filter((r: any): r is PromiseRejectedResult => r.status === \"rejected\")\n .map((r: any) => r.reason)\n );\n }\n\n partition<U>(\n this: Promised<readonly PromiseSettledResult<U>[]> | Promised<{ results: readonly PromiseSettledResult<any>[] }>\n ): Promised<{ fulfilled: any[]; rejected: unknown[] }> {\n return this.mapResults((results) => {\n const fulfilled: any[] = [];\n const rejected: unknown[] = [];\n\n for (const result of results) {\n if (result.status === \"fulfilled\") {\n fulfilled.push(result.value);\n } else {\n rejected.push(result.reason);\n }\n }\n\n return { fulfilled, rejected };\n });\n }\n\n firstFulfilled<U>(\n this: Promised<readonly PromiseSettledResult<U>[]> | Promised<{ results: readonly PromiseSettledResult<any>[] }>\n ): Promised<any> {\n return this.mapResults((results) => {\n const found = results.find((r: any): r is PromiseFulfilledResult<any> => r.status === \"fulfilled\");\n return found?.value;\n });\n }\n\n firstRejected<U>(\n this: Promised<readonly PromiseSettledResult<U>[]> | Promised<{ results: readonly PromiseSettledResult<any>[] }>\n ): Promised<unknown | undefined> {\n return this.mapResults((results) => {\n const found = results.find((r: any): r is PromiseRejectedResult => r.status === \"rejected\");\n return found?.reason;\n });\n }\n\n findFulfilled<U>(\n this: Promised<readonly PromiseSettledResult<U>[]> | Promised<{ results: readonly PromiseSettledResult<any>[] }>,\n predicate: (value: any, index: number) => boolean\n ): Promised<any> {\n return this.mapResults((results) => {\n let fulfilledIndex = 0;\n\n for (const result of results) {\n if (result.status === \"fulfilled\") {\n if (predicate(result.value, fulfilledIndex)) {\n return result.value;\n }\n fulfilledIndex++;\n }\n }\n\n return undefined;\n });\n }\n\n mapFulfilled<U, R>(\n this: Promised<readonly PromiseSettledResult<U>[]> | Promised<{ results: readonly PromiseSettledResult<any>[] }>,\n fn: (value: any, index: number) => R\n ): Promised<R[]> {\n return this.mapResults((results) => {\n const mapped: R[] = [];\n let fulfilledIndex = 0;\n\n for (const result of results) {\n if (result.status === \"fulfilled\") {\n mapped.push(fn(result.value, fulfilledIndex));\n fulfilledIndex++;\n }\n }\n\n return mapped;\n });\n }\n\n assertAllFulfilled<U>(\n this: Promised<readonly PromiseSettledResult<U>[]> | Promised<{ results: readonly PromiseSettledResult<any>[] }>,\n errorMapper?: (reasons: unknown[], fulfilledCount: number, totalCount: number) => Error\n ): Promised<any[]> {\n return this.mapResults((results) => {\n const fulfilled: any[] = [];\n const rejected: unknown[] = [];\n\n for (const result of results) {\n if (result.status === \"fulfilled\") {\n fulfilled.push(result.value);\n } else {\n rejected.push(result.reason);\n }\n }\n\n if (rejected.length > 0) {\n const error = errorMapper\n ? errorMapper(rejected, fulfilled.length, results.length)\n : new Error(\n `${rejected.length} of ${results.length} operations failed: ${rejected.map((r: unknown) => String(r)).join(\", \")}`\n );\n throw error;\n }\n\n return fulfilled;\n });\n }\n}\n","import {\n type ErrorContext,\n type Meta,\n ExecutorResolutionError,\n FactoryExecutionError,\n DependencyResolutionError,\n} from \"./types\";\nimport { name } from \"./index\";\n\nexport const codes = {\n FACTORY_EXECUTION_FAILED: \"F001\",\n FACTORY_THREW_ERROR: \"F002\",\n FACTORY_RETURNED_INVALID_TYPE: \"F003\",\n FACTORY_ASYNC_ERROR: \"F004\",\n\n DEPENDENCY_NOT_FOUND: \"D001\",\n CIRCULAR_DEPENDENCY: \"D002\",\n DEPENDENCY_RESOLUTION_FAILED: \"D003\",\n INVALID_DEPENDENCY_TYPE: \"D004\",\n DEPENDENCY_CHAIN_TOO_DEEP: \"D005\",\n\n SCOPE_DISPOSED: \"S001\",\n EXECUTOR_NOT_RESOLVED: \"S002\",\n INVALID_SCOPE_STATE: \"S003\",\n SCOPE_CLEANUP_FAILED: \"S004\",\n UPDATE_CALLBACK_ON_DISPOSING_SCOPE: \"S006\",\n\n SCHEMA_VALIDATION_FAILED: \"V001\",\n META_VALIDATION_FAILED: \"V002\",\n INPUT_TYPE_MISMATCH: \"V003\",\n OUTPUT_TYPE_MISMATCH: \"V004\",\n ASYNC_VALIDATION_NOT_SUPPORTED: \"V005\",\n\n INTERNAL_RESOLUTION_ERROR: \"SYS001\",\n CACHE_CORRUPTION: \"SYS002\",\n MEMORY_LEAK_DETECTED: \"SYS003\",\n PLUGIN_SYSTEM_ERROR: \"SYS004\",\n\n INVALID_EXECUTOR_CONFIG: \"C001\",\n MALFORMED_DEPENDENCIES: \"C002\",\n INVALID_FACTORY_SIGNATURE: \"C003\",\n PRESET_APPLICATION_FAILED: \"C004\",\n\n FLOW_EXECUTION_FAILED: \"FL001\",\n FLOW_CONTEXT_MISSING: \"FL002\",\n FLOW_PLUGIN_ERROR: \"FL003\",\n FLOW_INPUT_VALIDATION_FAILED: \"FL004\",\n FLOW_OUTPUT_VALIDATION_FAILED: \"FL005\",\n} as const;\n\nexport type Code = (typeof codes)[keyof typeof codes];\n\nconst messages: Record<Code, string> = {\n [codes.FACTORY_EXECUTION_FAILED]:\n \"Factory function execution failed for executor '{executorName}'. {cause}\",\n [codes.FACTORY_THREW_ERROR]:\n \"Factory function threw an error in executor '{executorName}': {originalMessage}\",\n [codes.FACTORY_RETURNED_INVALID_TYPE]:\n \"Factory function returned invalid type. Expected {expectedType}, got {actualType}\",\n [codes.FACTORY_ASYNC_ERROR]:\n \"Async factory function failed with error: {originalMessage}\",\n\n [codes.DEPENDENCY_NOT_FOUND]:\n \"Dependency '{dependencyName}' could not be resolved in the current scope\",\n [codes.CIRCULAR_DEPENDENCY]:\n \"Circular dependency detected in chain: {dependencyChain}\",\n [codes.DEPENDENCY_RESOLUTION_FAILED]:\n \"Failed to resolve dependencies for executor '{executorName}': {cause}\",\n [codes.INVALID_DEPENDENCY_TYPE]:\n \"Invalid dependency type provided. Expected Executor, got {actualType}\",\n [codes.DEPENDENCY_CHAIN_TOO_DEEP]:\n \"Dependency resolution chain exceeded maximum depth of {maxDepth}\",\n\n [codes.SCOPE_DISPOSED]: \"Cannot perform operation on disposed scope\",\n [codes.EXECUTOR_NOT_RESOLVED]:\n \"Executor '{executorName}' is not resolved. Call resolve() first or check if resolution failed\",\n [codes.INVALID_SCOPE_STATE]:\n \"Scope is in invalid state for this operation: {currentState}\",\n [codes.SCOPE_CLEANUP_FAILED]: \"Scope cleanup failed: {cause}\",\n [codes.UPDATE_CALLBACK_ON_DISPOSING_SCOPE]:\n \"Cannot register update callback on a disposing scope\",\n\n [codes.SCHEMA_VALIDATION_FAILED]:\n \"Schema validation failed: {validationMessage}\",\n [codes.META_VALIDATION_FAILED]:\n \"Meta validation failed for key '{metaKey}': {validationMessage}\",\n [codes.INPUT_TYPE_MISMATCH]:\n \"Input type validation failed: {validationMessage}\",\n [codes.OUTPUT_TYPE_MISMATCH]:\n \"Output type validation failed: {validationMessage}\",\n [codes.ASYNC_VALIDATION_NOT_SUPPORTED]:\n \"Async validation is not currently supported\",\n\n [codes.INTERNAL_RESOLUTION_ERROR]:\n \"Internal error during executor resolution. This is likely a bug in Pumped Functions\",\n [codes.CACHE_CORRUPTION]:\n \"Executor cache corruption detected. Scope integrity compromised\",\n [codes.MEMORY_LEAK_DETECTED]:\n \"Potential memory leak detected in scope {scopeId}\",\n [codes.PLUGIN_SYSTEM_ERROR]: \"Plugin system error: {pluginName} - {cause}\",\n\n [codes.INVALID_EXECUTOR_CONFIG]:\n \"Invalid executor configuration: {configError}\",\n [codes.MALFORMED_DEPENDENCIES]:\n \"Malformed dependency structure: {dependencyError}\",\n [codes.INVALID_FACTORY_SIGNATURE]:\n \"Factory function has invalid signature. Expected (dependencies, controller) => value\",\n [codes.PRESET_APPLICATION_FAILED]: \"Failed to apply preset: {presetError}\",\n\n [codes.FLOW_EXECUTION_FAILED]: \"Flow execution failed: {flowName}\",\n [codes.FLOW_CONTEXT_MISSING]: \"Flow execution context is missing or invalid\",\n [codes.FLOW_PLUGIN_ERROR]: \"Flow plugin '{pluginName}' failed: {cause}\",\n [codes.FLOW_INPUT_VALIDATION_FAILED]:\n \"Flow input validation failed: {validationMessage}\",\n [codes.FLOW_OUTPUT_VALIDATION_FAILED]:\n \"Flow output validation failed: {validationMessage}\",\n};\n\nexport function formatMessage(\n code: Code,\n context: Record<string, unknown> = {}\n): string {\n let message = messages[code];\n\n for (const [key, value] of Object.entries(context)) {\n const placeholder = `{${key}}`;\n message = message.replaceAll(placeholder, String(value));\n }\n\n return message;\n}\n\nexport function createFactoryError(\n code: Code,\n executorName: string,\n dependencyChain: string[],\n originalError?: unknown,\n additionalContext: Record<string, unknown> = {}\n): FactoryExecutionError {\n const context: Omit<ErrorContext, \"resolutionStage\"> = {\n executorName,\n dependencyChain,\n timestamp: Date.now(),\n additionalInfo: additionalContext,\n };\n\n const messageContext = {\n executorName,\n originalMessage:\n originalError instanceof Error\n ? originalError.message\n : String(originalError),\n cause:\n originalError instanceof Error\n ? originalError.message\n : String(originalError),\n ...additionalContext,\n };\n\n const message = formatMessage(code, messageContext);\n\n return new FactoryExecutionError(message, context, code, {\n cause: originalError,\n });\n}\n\nexport function createDependencyError(\n code: Code,\n executorName: string,\n dependencyChain: string[],\n missingDependency?: string,\n originalError?: unknown,\n additionalContext: Record<string, unknown> = {}\n): DependencyResolutionError {\n const context: Omit<ErrorContext, \"resolutionStage\"> = {\n executorName,\n dependencyChain,\n timestamp: Date.now(),\n additionalInfo: additionalContext,\n };\n\n const messageContext = {\n executorName,\n dependencyName: missingDependency,\n dependencyChain: dependencyChain.join(\" -> \"),\n cause:\n originalError instanceof Error\n ? originalError.message\n : String(originalError),\n ...additionalContext,\n };\n\n const message = formatMessage(code, messageContext);\n\n return new DependencyResolutionError(\n message,\n context,\n code,\n missingDependency,\n {\n cause: originalError,\n }\n );\n}\n\nexport function createSystemError(\n code: Code,\n executorName: string,\n dependencyChain: string[],\n originalError?: unknown,\n additionalContext: Record<string, unknown> = {}\n): ExecutorResolutionError {\n const context: ErrorContext = {\n executorName,\n dependencyChain,\n resolutionStage: \"post-processing\",\n timestamp: Date.now(),\n additionalInfo: additionalContext,\n };\n\n const messageContext = {\n executorName,\n cause:\n originalError instanceof Error\n ? originalError.message\n : String(originalError),\n ...additionalContext,\n };\n\n const message = formatMessage(code, messageContext);\n\n return new ExecutorResolutionError(message, context, code, \"SYSTEM_ERROR\", {\n cause: originalError,\n });\n}\n\nexport function getExecutorName(executor: unknown): string {\n const executorName = name.find(executor as Meta.MetaContainer);\n if (executorName) return executorName;\n\n if (executor && typeof executor === \"object\" && \"factory\" in executor) {\n const factory = executor.factory as { name?: string } | undefined;\n if (factory?.name && factory.name !== \"factory\") {\n return factory.name;\n }\n }\n\n if (executor && typeof executor === \"object\") {\n const kind =\n (executor as Record<symbol, unknown>)[\n Symbol.for(\"@pumped-fn/core/executor\")\n ] ?? \"unknown\";\n return `${String(kind)}-executor-${Math.random()\n .toString(36)\n .substring(2, 11)}`;\n }\n\n return \"unknown-executor\";\n}\n\nexport function buildDependencyChain(executorStack: unknown[]): string[] {\n return executorStack.map(getExecutorName);\n}\n","import { validate } from \"./ssch\";\nimport type { Accessor, Meta, StandardSchemaV1 } from \"./types\";\n\nfunction isDataStore(\n source: Accessor.AccessorSource\n): source is Accessor.DataStore {\n return (\n \"get\" in source &&\n \"set\" in source &&\n typeof source.get === \"function\" &&\n typeof source.set === \"function\"\n );\n}\n\nfunction isMetaArray(source: Accessor.AccessorSource): source is Meta.Meta[] {\n return Array.isArray(source);\n}\n\nfunction extractFromSource<T>(\n source: Accessor.AccessorSource,\n key: symbol,\n schema: StandardSchemaV1<T>\n): T | undefined {\n if (isDataStore(source)) {\n const value = source.get(key);\n return value === undefined ? undefined : validate(schema, value);\n }\n\n if (isMetaArray(source)) {\n const meta = source.find((m) => m.key === key);\n return meta ? validate(schema, meta.value) : undefined;\n }\n\n const metas = source.metas ?? [];\n const meta = metas.find((m) => m.key === key);\n return meta ? validate(schema, meta.value) : undefined;\n}\n\nfunction validateAndSet<T>(\n source: Accessor.DataStore,\n key: symbol,\n schema: StandardSchemaV1<T>,\n value: T\n): void {\n if (!isDataStore(source)) {\n throw new Error(\"set() can only be used with DataStore\");\n }\n const validated = validate(schema, value);\n source.set(key, validated);\n}\n\nfunction validateAndPreset<T>(\n key: symbol,\n schema: StandardSchemaV1<T>,\n value: T\n): [symbol, T] {\n const validated = validate(schema, value);\n return [key, validated];\n}\n\nclass AccessorImpl<T> implements Accessor.Accessor<T> {\n public readonly key: symbol;\n public readonly schema: StandardSchemaV1<T>;\n\n constructor(key: string | symbol, schema: StandardSchemaV1<T>) {\n this.key = typeof key === \"string\" ? Symbol(key) : key;\n this.schema = schema;\n }\n\n get(source: Accessor.AccessorSource): T {\n const value = extractFromSource(source, this.key, this.schema);\n if (value === undefined) {\n throw new Error(`Value not found for key: ${this.key.toString()}`);\n }\n return value;\n }\n\n find(source: Accessor.AccessorSource): T | undefined {\n return extractFromSource(source, this.key, this.schema);\n }\n\n set(source: Accessor.DataStore, value: T): void {\n validateAndSet(source, this.key, this.schema, value);\n }\n\n preset(value: T): [symbol, T] {\n return validateAndPreset(this.key, this.schema, value);\n }\n}\n\nclass AccessorWithDefaultImpl<T> implements Accessor.AccessorWithDefault<T> {\n public readonly key: symbol;\n public readonly schema: StandardSchemaV1<T>;\n public readonly defaultValue: T;\n\n constructor(\n key: string | symbol,\n schema: StandardSchemaV1<T>,\n defaultValue: T\n ) {\n this.key = typeof key === \"string\" ? Symbol(key) : key;\n this.schema = schema;\n this.defaultValue = validate(schema, defaultValue);\n }\n\n get(source: Accessor.AccessorSource): T {\n const value = extractFromSource(source, this.key, this.schema);\n return value ?? this.defaultValue;\n }\n\n find(source: Accessor.AccessorSource): T {\n const value = extractFromSource(source, this.key, this.schema);\n return value ?? this.defaultValue;\n }\n\n set(source: Accessor.DataStore, value: T): void {\n validateAndSet(source, this.key, this.schema, value);\n }\n\n preset(value: T): [symbol, T] {\n return validateAndPreset(this.key, this.schema, value);\n }\n}\n\nexport function accessor<T>(\n key: string | symbol,\n schema: StandardSchemaV1<T>\n): Accessor.Accessor<T>;\n\nexport function accessor<T>(\n key: string | symbol,\n schema: StandardSchemaV1<T>,\n defaultValue: T\n): Accessor.AccessorWithDefault<T>;\n\nexport function accessor<T>(\n key: string | symbol,\n schema: StandardSchemaV1<T>,\n defaultValue?: T\n): Accessor.Accessor<T> | Accessor.AccessorWithDefault<T> {\n if (defaultValue !== undefined) {\n return new AccessorWithDefaultImpl(key, schema, defaultValue);\n }\n return new AccessorImpl(key, schema);\n}\n","import type { Core, Extension, Flow, Meta, StandardSchemaV1 } from \"./types\";\nimport { createExecutor, isExecutor } from \"./executor\";\nimport { createScope } from \"./scope\";\nimport { validate } from \"./ssch\";\nimport { accessor } from \"./accessor\";\nimport type { Accessor } from \"./types\";\nimport { custom } from \"./ssch\";\nimport { meta } from \"./meta\";\nimport { Promised } from \"./promises\";\n\nfunction isErrorEntry(\n entry: unknown\n): entry is { __error: true; error: unknown } {\n return typeof entry === \"object\" && entry !== null && \"__error\" in entry;\n}\n\nfunction wrapWithExtensions<T>(\n extensions: Extension.Extension[] | undefined,\n baseExecutor: () => Promised<T>,\n dataStore: Accessor.DataStore,\n operation: Extension.Operation\n): () => Promised<T> {\n if (!extensions || extensions.length === 0) {\n return baseExecutor;\n }\n let executor = baseExecutor;\n for (let i = extensions.length - 1; i >= 0; i--) {\n const extension = extensions[i];\n if (extension.wrap) {\n const current = executor;\n executor = () => {\n const result = extension.wrap!(dataStore, current, operation);\n return result instanceof Promised ? result : Promised.create(result);\n };\n }\n }\n return executor;\n}\n\nconst flowDefinitionMeta = meta<Flow.Definition<any, any>>(\n \"flow.definition\",\n custom<Flow.Definition<any, any>>()\n);\n\nexport const flowMeta: {\n depth: Accessor.AccessorWithDefault<number>;\n flowName: Accessor.Accessor<string | undefined>;\n parentFlowName: Accessor.Accessor<string | undefined>;\n isParallel: Accessor.AccessorWithDefault<boolean>;\n journal: Accessor.Accessor<ReadonlyMap<string, unknown>>;\n} = {\n depth: accessor(\"flow.depth\", custom<number>(), 0),\n flowName: accessor(\"flow.name\", custom<string | undefined>()),\n parentFlowName: accessor(\"flow.parentName\", custom<string | undefined>()),\n isParallel: accessor(\"flow.isParallel\", custom<boolean>(), false),\n journal: accessor(\"flow.journal\", custom<ReadonlyMap<string, unknown>>()),\n};\n\nclass FlowDefinition<S, I> {\n constructor(\n public readonly name: string,\n public readonly version: string,\n public readonly input: StandardSchemaV1<I>,\n public readonly output: StandardSchemaV1<S>,\n public readonly metas: Meta.Meta[] = []\n ) {}\n\n handler(\n handlerFn: (ctx: Flow.Context, input: I) => Promise<S> | S\n ): Flow.Flow<I, S>;\n\n handler<D extends Core.DependencyLike>(\n dependencies: D,\n handlerFn: (\n deps: Core.InferOutput<D>,\n ctx: Flow.Context,\n input: I\n ) => Promise<S> | S\n ): Flow.Flow<I, S>;\n\n handler<D extends Core.DependencyLike>(\n dependenciesOrHandler:\n | D\n | ((ctx: Flow.Context, input: I) => Promise<S> | S),\n handlerFn?: (\n deps: Core.InferOutput<D>,\n ctx: Flow.Context,\n input: I\n ) => Promise<S> | S\n ): Flow.Flow<I, S> {\n if (typeof dependenciesOrHandler === \"function\") {\n const noDepsHandler = dependenciesOrHandler;\n const executor = createExecutor(\n () => {\n const flowHandler = async (ctx: Flow.Context, input: I) => {\n return noDepsHandler(ctx, input);\n };\n return flowHandler as Flow.Handler<S, I>;\n },\n undefined,\n [...this.metas, flowDefinitionMeta(this)]\n ) as Flow.Flow<I, S>;\n executor.definition = this;\n return executor;\n }\n const dependencies = dependenciesOrHandler;\n const dependentHandler = handlerFn!;\n const executor = createExecutor(\n (deps: unknown) => {\n const flowHandler = async (ctx: Flow.Context, input: I) => {\n return dependentHandler(deps as Core.InferOutput<D>, ctx, input);\n };\n\n return flowHandler as Flow.Handler<S, I>;\n },\n dependencies,\n [...this.metas, flowDefinitionMeta(this)]\n ) as Flow.Flow<I, S>;\n executor.definition = this;\n return executor;\n }\n}\n\ntype DefineConfig<S, I> = {\n name: string;\n version?: string;\n input: StandardSchemaV1<I>;\n output: StandardSchemaV1<S>;\n meta?: Meta.Meta[];\n};\n\ntype FlowConfigWithHandler<S, I> = DefineConfig<S, I> & {\n handler: (ctx: Flow.Context, input: I) => Promise<S> | S;\n};\n\ntype FlowConfigWithDeps<S, I, D extends Core.DependencyLike> = DefineConfig<\n S,\n I\n> & {\n dependencies: D;\n handler: (\n deps: Core.InferOutput<D>,\n ctx: Flow.Context,\n input: I\n ) => Promise<S> | S;\n};\n\ntype FlowConfigInferred<S, I> = {\n name: string;\n version?: string;\n input?: StandardSchemaV1<I>;\n output?: StandardSchemaV1<S>;\n meta?: Meta.Meta[];\n handler: (ctx: Flow.Context, input: I) => Promise<S> | S;\n};\n\ntype FlowConfigInferredWithDeps<S, I, D extends Core.DependencyLike> = {\n name: string;\n version?: string;\n input?: StandardSchemaV1<I>;\n output?: StandardSchemaV1<S>;\n meta?: Meta.Meta[];\n dependencies: D;\n handler: (\n deps: Core.InferOutput<D>,\n ctx: Flow.Context,\n input: I\n ) => Promise<S> | S;\n};\n\nfunction define<S, I>(config: DefineConfig<S, I>): FlowDefinition<S, I> {\n return new FlowDefinition(\n config.name,\n config.version || \"1.0.0\",\n config.input,\n config.output,\n config.meta\n );\n}\n\nclass FlowContext implements Flow.Context {\n private contextData = new Map<unknown, unknown>();\n private journal: Map<string, unknown> | null = null;\n public readonly scope: Core.Scope;\n private reversedExtensions: Extension.Extension[];\n public readonly metas: Meta.Meta[] | undefined;\n\n constructor(\n scope: Core.Scope,\n private extensions: Extension.Extension[],\n meta?: Meta.Meta[],\n private parent?: FlowContext\n ) {\n this.scope = scope;\n this.reversedExtensions = [...extensions].reverse();\n this.metas = meta;\n }\n\n resolve<T>(executor: Core.Executor<T>): Promised<T> {\n return this.scope.resolve(executor);\n }\n\n accessor<T>(executor: Core.Executor<T>): Core.Accessor<T> {\n return this.scope.accessor(executor);\n }\n\n private wrapWithExtensions<T>(\n baseExecutor: () => Promised<T>,\n operation: Extension.Operation\n ): () => Promised<T> {\n let executor = baseExecutor;\n for (const extension of this.reversedExtensions) {\n if (extension.wrap) {\n const current = executor;\n executor = () => {\n const result = extension.wrap!(this, current, operation);\n return result instanceof Promised ? result : Promised.create(result);\n };\n }\n }\n return executor;\n }\n\n initializeExecutionContext(flowName: string, isParallel: boolean = false) {\n const currentDepth = this.parent ? this.parent.get(flowMeta.depth) + 1 : 0;\n const parentFlowName = this.parent\n ? this.parent.find(flowMeta.flowName)\n : undefined;\n\n this.set(flowMeta.depth, currentDepth);\n this.set(flowMeta.flowName, flowName);\n this.set(flowMeta.parentFlowName, parentFlowName);\n this.set(flowMeta.isParallel, isParallel);\n }\n\n get<T>(accessor: Accessor.Accessor<T> | Accessor.AccessorWithDefault<T>): T;\n get<T>(accessorOrKey: unknown): T | unknown {\n if (\n typeof accessorOrKey === \"object\" &&\n accessorOrKey !== null &&\n \"get\" in accessorOrKey\n ) {\n const accessor = accessorOrKey as\n | Accessor.Accessor<T>\n | Accessor.AccessorWithDefault<T>;\n return accessor.get(this);\n }\n const key = accessorOrKey;\n if (this.contextData.has(key)) {\n return this.contextData.get(key);\n }\n if (this.parent) {\n return (this.parent.get as (key: unknown) => unknown)(key);\n }\n return undefined;\n }\n\n find<T>(accessor: Accessor.Accessor<T>): T | undefined;\n find<T>(accessor: Accessor.AccessorWithDefault<T>): T;\n find<T>(\n accessor: Accessor.Accessor<T> | Accessor.AccessorWithDefault<T>\n ): T | undefined {\n return accessor.find(this);\n }\n\n set<T>(\n accessor: Accessor.Accessor<T> | Accessor.AccessorWithDefault<T>,\n value: T\n ): void;\n set<T>(accessorOrKey: unknown, value: unknown): void | unknown {\n if (\n typeof accessorOrKey === \"object\" &&\n accessorOrKey !== null &&\n \"set\" in accessorOrKey\n ) {\n const accessor = accessorOrKey as\n | Accessor.Accessor<T>\n | Accessor.AccessorWithDefault<T>;\n accessor.set(this, value as T);\n return;\n }\n const key = accessorOrKey;\n this.contextData.set(key, value);\n return value;\n }\n\n run<T>(key: string, fn: () => Promise<T> | T): Promised<T>;\n run<T, P extends readonly unknown[]>(\n key: string,\n fn: (...args: P) => Promise<T> | T,\n ...params: P\n ): Promised<T>;\n\n run<T, P extends readonly unknown[]>(\n key: string,\n fn: ((...args: P) => Promise<T> | T) | (() => Promise<T> | T),\n ...params: P\n ): Promised<T> {\n if (!this.journal) {\n this.journal = new Map();\n }\n\n const flowName = this.find(flowMeta.flowName) || \"unknown\";\n const depth = this.get(flowMeta.depth);\n const journalKey = `${flowName}:${depth}:${key}`;\n\n const promise = (async () => {\n const journal = this.journal!;\n const isReplay = journal.has(journalKey);\n\n const executeCore = (): Promised<T> => {\n if (isReplay) {\n const entry = journal.get(journalKey);\n if (isErrorEntry(entry)) {\n throw entry.error;\n }\n return Promised.create(Promise.resolve(entry as T));\n }\n\n return Promised.try(async () => {\n const result =\n params.length > 0\n ? await (fn as (...args: P) => Promise<T> | T)(...params)\n : await (fn as () => Promise<T> | T)();\n journal.set(journalKey, result);\n return result;\n }).catch((error) => {\n journal.set(journalKey, { __error: true, error });\n throw error;\n });\n };\n\n const executor = this.wrapWithExtensions(executeCore, {\n kind: \"journal\",\n key,\n flowName,\n depth,\n isReplay,\n context: this,\n params: params.length > 0 ? params : undefined,\n });\n\n return executor();\n })();\n\n return Promised.create(promise);\n }\n\n exec<F extends Flow.UFlow>(\n flow: F,\n input: Flow.InferInput<F>\n ): Promised<Flow.InferOutput<F>>;\n\n exec<F extends Flow.UFlow>(\n key: string,\n flow: F,\n input: Flow.InferInput<F>\n ): Promised<Flow.InferOutput<F>>;\n\n exec<F extends Flow.UFlow>(\n keyOrFlow: string | F,\n flowOrInput: F | Flow.InferInput<F>,\n inputOrUndefined?: Flow.InferInput<F>\n ): Promised<Flow.InferOutput<F>> {\n if (typeof keyOrFlow === \"string\") {\n if (!this.journal) {\n this.journal = new Map();\n }\n\n const key = keyOrFlow;\n const flow = flowOrInput as F;\n const input = inputOrUndefined as Flow.InferInput<F>;\n\n const parentFlowName = this.find(flowMeta.flowName);\n const depth = this.get(flowMeta.depth);\n const flowName = this.find(flowMeta.flowName) || \"unknown\";\n const journalKey = `${flowName}:${depth}:${key}`;\n\n const promise = (async () => {\n const journal = this.journal!;\n const executeCore = (): Promised<Flow.InferOutput<F>> => {\n if (journal.has(journalKey)) {\n const entry = journal.get(journalKey);\n if (isErrorEntry(entry)) {\n throw entry.error;\n }\n return Promised.create(Promise.resolve(entry as Flow.InferOutput<F>));\n }\n\n return Promised.try(async () => {\n const handler = await this.scope.resolve(flow);\n const definition = flowDefinitionMeta.find(flow);\n if (!definition) {\n throw new Error(\"Flow definition not found in executor metadata\");\n }\n\n const childContext = new FlowContext(\n this.scope,\n this.extensions,\n undefined,\n this\n );\n childContext.initializeExecutionContext(definition.name, false);\n\n const result = (await this.executeWithExtensions<\n Flow.InferOutput<F>\n >(\n async (ctx) =>\n handler(ctx, input) as Promise<Flow.InferOutput<F>>,\n childContext,\n flow,\n input\n )) as Flow.InferOutput<F>;\n\n journal.set(journalKey, result);\n return result;\n }).catch((error) => {\n journal.set(journalKey, { __error: true, error });\n throw error;\n });\n };\n\n const definition = flowDefinitionMeta.find(flow);\n if (!definition) {\n throw new Error(\"Flow definition not found in executor metadata\");\n }\n\n const executor = this.wrapWithExtensions(executeCore, {\n kind: \"subflow\",\n flow,\n definition,\n input,\n journalKey,\n parentFlowName,\n depth,\n context: this,\n });\n\n return executor();\n })();\n\n return Promised.create(promise);\n }\n\n const flow = keyOrFlow as F;\n const input = flowOrInput as Flow.InferInput<F>;\n\n const promise = (async () => {\n const parentFlowName = this.find(flowMeta.flowName);\n const depth = this.get(flowMeta.depth);\n\n const executeCore = (): Promised<Flow.InferOutput<F>> => {\n return this.scope.resolve(flow).map(async (handler) => {\n const definition = flowDefinitionMeta.find(flow);\n if (!definition) {\n throw new Error(\"Flow definition not found in executor metadata\");\n }\n\n const childContext = new FlowContext(this.scope, this.extensions, undefined, this);\n childContext.initializeExecutionContext(definition.name, false);\n\n return (await this.executeWithExtensions<Flow.InferOutput<F>>(\n async (ctx) => handler(ctx, input) as Promise<Flow.InferOutput<F>>,\n childContext,\n flow,\n input\n )) as Flow.InferOutput<F>;\n });\n };\n\n const definition = flowDefinitionMeta.find(flow);\n if (!definition) {\n throw new Error(\"Flow definition not found in executor metadata\");\n }\n\n const executor = this.wrapWithExtensions(executeCore, {\n kind: \"subflow\",\n flow,\n definition,\n input,\n journalKey: undefined,\n parentFlowName,\n depth,\n context: this,\n });\n\n return executor();\n })();\n\n return Promised.create(promise);\n }\n\n parallel<T extends readonly Promised<any>[]>(\n promises: [...T]\n ): Promised<\n Flow.ParallelResult<{\n [K in keyof T]: T[K] extends Promised<infer R> ? R : never;\n }>\n > {\n const parentFlowName = this.find(flowMeta.flowName);\n const depth = this.get(flowMeta.depth);\n\n const promise = (async () => {\n const executeCore = (): Promised<{\n results: Flow.ParallelResult<{\n [K in keyof T]: T[K] extends Promised<infer R> ? R : never;\n }>[\"results\"];\n stats: { total: number; succeeded: number; failed: number };\n }> => {\n return Promised.create(Promise.all(promises).then((results) => ({\n results: results as Flow.ParallelResult<{\n [K in keyof T]: T[K] extends Promised<infer R> ? R : never;\n }>[\"results\"],\n stats: {\n total: results.length,\n succeeded: results.length,\n failed: 0,\n },\n })));\n };\n\n const executor = this.wrapWithExtensions(executeCore, {\n kind: \"parallel\",\n mode: \"parallel\",\n promiseCount: promises.length,\n depth,\n parentFlowName,\n context: this,\n });\n\n return executor();\n })();\n\n return Promised.create(promise);\n }\n\n parallelSettled<T extends readonly Promised<any>[]>(\n promises: [...T]\n ): Promised<\n Flow.ParallelSettledResult<{\n [K in keyof T]: T[K] extends Promised<infer R> ? R : never;\n }>\n > {\n const parentFlowName = this.find(flowMeta.flowName);\n const depth = this.get(flowMeta.depth);\n\n const promise = (async () => {\n const executeCore = (): Promised<{\n results: PromiseSettledResult<any>[];\n stats: { total: number; succeeded: number; failed: number };\n }> => {\n return Promised.create(Promise.allSettled(promises).then((results) => {\n const succeeded = results.filter((r) => r.status === \"fulfilled\").length;\n const failed = results.filter((r) => r.status === \"rejected\").length;\n \n return {\n results: results as PromiseSettledResult<any>[],\n stats: {\n total: results.length,\n succeeded,\n failed,\n },\n };\n }));\n };\n\n const executor = this.wrapWithExtensions(executeCore, {\n kind: \"parallel\",\n mode: \"parallelSettled\",\n promiseCount: promises.length,\n depth,\n parentFlowName,\n context: this,\n });\n\n return executor();\n })();\n\n return Promised.create(promise);\n }\n\n private executeWithExtensions<T>(\n handler: (ctx: FlowContext) => Promise<T>,\n context: FlowContext,\n flow: Flow.UFlow,\n input: unknown\n ): Promised<T> {\n const executeCore = (): Promised<T> => Promised.create(handler(context));\n const definition = flowDefinitionMeta.find(flow);\n if (!definition) {\n throw new Error(\"Flow definition not found in executor metadata\");\n }\n\n const executor = context.wrapWithExtensions(executeCore, {\n kind: \"execute\",\n flow,\n definition,\n input,\n flowName: context.find(flowMeta.flowName),\n depth: context.get(flowMeta.depth),\n isParallel: context.get(flowMeta.isParallel),\n parentFlowName: context.find(flowMeta.parentFlowName),\n });\n\n return executor();\n }\n\n createSnapshot(): Flow.ExecutionData {\n const contextDataSnapshot = new Map(this.contextData);\n if (this.journal) {\n contextDataSnapshot.set(flowMeta.journal.key, new Map(this.journal));\n }\n\n const dataStore = {\n get: (key: unknown) => contextDataSnapshot.get(key),\n set: (_key: unknown, _value: unknown) => {\n throw new Error(\"Cannot set values on execution snapshot\");\n },\n };\n\n return {\n context: {\n get<T>(\n accessor: Accessor.Accessor<T> | Accessor.AccessorWithDefault<T>\n ): T {\n return accessor.get(dataStore);\n },\n find<T>(\n accessor: Accessor.Accessor<T> | Accessor.AccessorWithDefault<T>\n ): T | undefined {\n return accessor.find(dataStore);\n },\n },\n };\n }\n}\n\nfunction execute<S, I>(\n flow: Core.Executor<Flow.Handler<S, I>> | Flow.Flow<I, S>,\n input: I,\n options: {\n scope?: Core.Scope;\n extensions?: Extension.Extension[];\n initialContext?: Array<\n [Accessor.Accessor<any> | Accessor.AccessorWithDefault<any>, any]\n >;\n scopeMeta?: Meta.Meta[];\n meta?: Meta.Meta[];\n details: true;\n }\n): Promised<Flow.ExecutionDetails<S>>;\n\nfunction execute<S, I>(\n flow: Core.Executor<Flow.Handler<S, I>> | Flow.Flow<I, S>,\n input: I,\n options?: {\n scope?: Core.Scope;\n extensions?: Extension.Extension[];\n initialContext?: Array<\n [Accessor.Accessor<any> | Accessor.AccessorWithDefault<any>, any]\n >;\n scopeMeta?: Meta.Meta[];\n meta?: Meta.Meta[];\n details?: false;\n }\n): Promised<S>;\n\nfunction execute<S, I>(\n flow: Core.Executor<Flow.Handler<S, I>> | Flow.Flow<I, S>,\n input: I,\n options?: {\n scope?: Core.Scope;\n extensions?: Extension.Extension[];\n initialContext?: Array<\n [Accessor.Accessor<any> | Accessor.AccessorWithDefault<any>, any]\n >;\n scopeMeta?: Meta.Meta[];\n meta?: Meta.Meta[];\n details?: boolean;\n }\n): Promised<S> | Promised<Flow.ExecutionDetails<S>> {\n const scope = options?.scope || createScope({ meta: options?.scopeMeta });\n const shouldDisposeScope = !options?.scope;\n\n let resolveSnapshot!: (snapshot: Flow.ExecutionData | undefined) => void;\n const snapshotPromise = new Promise<Flow.ExecutionData | undefined>(\n (resolve) => {\n resolveSnapshot = resolve;\n }\n );\n\n const promise = (async () => {\n const context = new FlowContext(scope, options?.extensions || [], options?.meta);\n\n try {\n if (options?.initialContext) {\n for (const [accessor, value] of options.initialContext) {\n accessor.set(context, value);\n }\n }\n\n const executeCore = (): Promised<S> => {\n return scope.resolve(flow).map(async (handler) => {\n const definition = flowDefinitionMeta.find(flow);\n if (!definition) {\n throw new Error(\"Flow definition not found in executor metadata\");\n }\n const validated = validate(definition.input, input);\n\n context.initializeExecutionContext(definition.name, false);\n\n const result = await handler(context, validated);\n\n validate(definition.output, result);\n\n return result;\n });\n };\n\n const definition = flowDefinitionMeta.find(flow);\n if (!definition) {\n throw new Error(\"Flow definition not found in executor metadata\");\n }\n\n const executor = wrapWithExtensions(\n options?.extensions,\n executeCore,\n context,\n {\n kind: \"execute\",\n flow,\n definition,\n input,\n flowName: definition.name || context.find(flowMeta.flowName),\n depth: context.get(flowMeta.depth),\n isParallel: context.get(flowMeta.isParallel),\n parentFlowName: context.find(flowMeta.parentFlowName),\n }\n );\n\n const result = await executor();\n resolveSnapshot(context.createSnapshot());\n return result;\n } catch (error) {\n resolveSnapshot(context.createSnapshot());\n throw error;\n } finally {\n if (shouldDisposeScope) {\n await scope.dispose();\n }\n }\n })();\n\n if (options?.details) {\n const detailsPromise = Promised.try(async (): Promise<Flow.ExecutionDetails<S>> => {\n const [result, ctx] = await Promise.all([promise, snapshotPromise]);\n if (!ctx) {\n throw new Error(\"Execution context not available\");\n }\n return { success: true as const, result, ctx };\n }).catch(async (error) => {\n const ctx = await snapshotPromise;\n if (!ctx) {\n throw new Error(\"Execution context not available\");\n }\n return { success: false as const, error, ctx };\n });\n\n return Promised.create(detailsPromise, snapshotPromise);\n }\n\n return Promised.create(promise, snapshotPromise);\n}\n\nfunction flowImpl<I, S>(\n handler: (ctx: Flow.Context, input: I) => Promise<S> | S\n): Flow.Flow<I, S>;\n\nfunction flowImpl<I extends void, S>(\n handler: (ctx?: Flow.Context) => Promise<S> | S\n): Flow.Flow<I, S>;\n\nfunction flowImpl<D extends Core.DependencyLike, I, S>(\n dependencies: D,\n handler: (\n deps: Core.InferOutput<D>,\n ctx: Flow.Context,\n input: I\n ) => Promise<S> | S\n): Flow.Flow<I, S>;\n\nfunction flowImpl<S, I>(\n config: FlowConfigWithHandler<S, I>\n): Flow.Flow<I, S>;\n\nfunction flowImpl<S, I, D extends Core.DependencyLike>(\n config: FlowConfigWithDeps<S, I, D>\n): Flow.Flow<I, S>;\n\nfunction flowImpl<S = unknown, I = unknown>(\n config: FlowConfigInferred<S, I>\n): Flow.Flow<I, S>;\n\nfunction flowImpl<\n S = unknown,\n I = unknown,\n D extends Core.DependencyLike = never\n>(\n config: FlowConfigInferredWithDeps<S, I, D>\n): Flow.Flow<I, S>;\n\nfunction flowImpl<S, I>(\n definition: DefineConfig<S, I>,\n handler: (ctx: Flow.Context, input: I) => Promise<S> | S\n): Flow.Flow<I, S>;\n\nfunction flowImpl<S, I, D extends Core.DependencyLike>(\n definition: DefineConfig<S, I>,\n dependencies: D,\n handler: (\n deps: Core.InferOutput<D>,\n ctx: Flow.Context,\n input: I\n ) => Promise<S> | S\n): Flow.Flow<I, S>;\n\nfunction flowImpl<S, I, D extends Core.DependencyLike>(\n dependencies: D,\n definition: DefineConfig<S, I>,\n handler: (\n deps: Core.InferOutput<D>,\n ctx: Flow.Context,\n input: I\n ) => Promise<S> | S\n): Flow.Flow<I, S>;\n\nfunction flowImpl<S, I>(definition: DefineConfig<S, I>): FlowDefinition<S, I>;\n\nfunction flowImpl<S, I, D extends Core.DependencyLike>(\n definitionOrConfigOrDepsOrHandler:\n | DefineConfig<S, I>\n | FlowConfigWithHandler<S, I>\n | FlowConfigWithDeps<S, I, D>\n | FlowConfigInferred<S, I>\n | FlowConfigInferredWithDeps<S, I, D>\n | D\n | ((ctx: Flow.Context, input: I) => Promise<S> | S)\n | ((ctx?: Flow.Context) => Promise<S> | S),\n dependenciesOrHandler?:\n | D\n | ((ctx: Flow.Context, input: I) => Promise<S> | S)\n | ((\n deps: Core.InferOutput<D>,\n ctx: Flow.Context,\n input: I\n ) => Promise<S> | S),\n handlerFn?: (\n deps: Core.InferOutput<D>,\n ctx: Flow.Context,\n input: I\n ) => Promise<S> | S\n): Flow.Flow<I, S> | FlowDefinition<S, I> {\n if (typeof definitionOrConfigOrDepsOrHandler === \"function\") {\n const handler = definitionOrConfigOrDepsOrHandler as (\n ctx: Flow.Context,\n input: I\n ) => Promise<S> | S;\n const def = define({\n name: \"anonymous\",\n version: \"1.0.0\",\n input: custom<I>(),\n output: custom<S>(),\n });\n return def.handler(handler);\n }\n\n const firstArg = definitionOrConfigOrDepsOrHandler as\n | DefineConfig<S, I>\n | FlowConfigWithHandler<S, I>\n | FlowConfigWithDeps<S, I, D>\n | FlowConfigInferred<S, I>\n | FlowConfigInferredWithDeps<S, I, D>\n | D;\n\n if (\n !(\"name\" in firstArg) &&\n dependenciesOrHandler &&\n typeof dependenciesOrHandler === \"object\" &&\n \"name\" in dependenciesOrHandler &&\n handlerFn\n ) {\n const dependencies = firstArg as D;\n const definition = dependenciesOrHandler as unknown as Partial<\n DefineConfig<S, I>\n > & { name: string };\n\n const hasInput = \"input\" in definition && definition.input !== undefined;\n const hasOutput =\n \"output\" in definition && definition.output !== undefined;\n\n const def = define({\n name: definition.name,\n version: definition.version,\n input: hasInput ? definition.input! : custom<I>(),\n output: hasOutput ? definition.output! : custom<S>(),\n meta: definition.meta,\n });\n\n return def.handler(dependencies, handlerFn);\n }\n\n if (typeof dependenciesOrHandler === \"function\" && !(\"name\" in firstArg)) {\n const dependencies = firstArg as D;\n const handler = dependenciesOrHandler as (\n deps: Core.InferOutput<D>,\n ctx: Flow.Context,\n input: I\n ) => Promise<S> | S;\n const def = define({\n name: \"anonymous\",\n version: \"1.0.0\",\n input: custom<I>(),\n output: custom<S>(),\n });\n return def.handler(dependencies, handler);\n }\n\n if (\"handler\" in firstArg) {\n const config = firstArg as\n | FlowConfigWithHandler<S, I>\n | FlowConfigWithDeps<S, I, D>\n | FlowConfigInferred<S, I>\n | FlowConfigInferredWithDeps<S, I, D>;\n\n const hasInput = \"input\" in config && config.input !== undefined;\n const hasOutput = \"output\" in config && config.output !== undefined;\n\n const def = define({\n name: config.name,\n version: config.version,\n input: hasInput ? config.input! : custom<I>(),\n output: hasOutput ? config.output! : custom<S>(),\n meta: config.meta,\n });\n\n if (\"dependencies\" in config) {\n const depsConfig = config as\n | FlowConfigWithDeps<S, I, D>\n | FlowConfigInferredWithDeps<S, I, D>;\n return def.handler(depsConfig.dependencies, depsConfig.handler);\n } else {\n const handlerConfig = config as\n | FlowConfigWithHandler<S, I>\n | FlowConfigInferred<S, I>;\n return def.handler(handlerConfig.handler);\n }\n }\n\n const definition = firstArg as\n | DefineConfig<S, I>\n | Partial<DefineConfig<S, I>>;\n\n const hasInput = \"input\" in definition && definition.input !== undefined;\n const hasOutput =\n \"output\" in definition && definition.output !== undefined;\n\n const def = define({\n name: definition.name || \"anonymous\",\n version: definition.version,\n input: hasInput ? definition.input! : custom<I>(),\n output: hasOutput ? definition.output! : custom<S>(),\n meta: definition.meta,\n });\n\n if (!dependenciesOrHandler) {\n return def;\n }\n\n if (typeof dependenciesOrHandler === \"function\") {\n return def.handler(\n dependenciesOrHandler as (ctx: Flow.Context, input: I) => Promise<S> | S\n );\n } else {\n return def.handler(dependenciesOrHandler as D, handlerFn!);\n }\n}\n\nexport const flow: typeof flowImpl & {\n define: typeof define;\n execute: typeof execute;\n} = Object.assign(flowImpl, {\n define: define,\n execute: execute,\n});\n","import {\n isLazyExecutor,\n isReactiveExecutor,\n isStaticExecutor,\n isMainExecutor,\n isExecutor,\n isPreset,\n} from \"./executor\";\nimport {\n type Accessor,\n Core,\n Extension,\n Meta,\n ExecutorResolutionError,\n FactoryExecutionError,\n DependencyResolutionError,\n ErrorContext,\n type Flow,\n} from \"./types\";\nimport { Promised } from \"./promises\";\nimport * as errors from \"./errors\";\nimport { flow as flowApi } from \"./flow\";\n\ntype CacheEntry = {\n accessor: Core.Accessor<unknown>;\n value?: Core.ResolveState<unknown>;\n};\n\ntype UE = Core.Executor<unknown>;\ntype OnUpdateFn = (accessor: Core.Accessor<unknown>) => void | Promise<void>;\n\ninterface ReplacerResult {\n factory: Core.NoDependencyFn<unknown> | Core.DependentFn<unknown, unknown>;\n dependencies:\n | undefined\n | Core.UExecutor\n | Core.UExecutor[]\n | Record<string, Core.UExecutor>;\n immediateValue?: unknown;\n}\n\nclass AccessorImpl implements Core.Accessor<unknown> {\n public metas: Meta.Meta[] | undefined;\n private scope: BaseScope;\n private requestor: UE;\n private currentPromise: Promise<unknown> | null = null;\n private currentPromised: Promised<unknown> | null = null;\n private cachedResolvedPromised: Promised<unknown> | null = null;\n public resolve: (force?: boolean) => Promised<unknown>;\n\n constructor(scope: BaseScope, requestor: UE, metas: Meta.Meta[] | undefined) {\n this.scope = scope;\n this.requestor = requestor;\n this.metas = metas;\n\n this.resolve = this.createResolveFunction();\n\n const existing = this.scope[\"cache\"].get(requestor);\n if (!existing || !existing.accessor) {\n this.scope[\"cache\"].set(requestor, {\n accessor: this,\n value: existing?.value,\n });\n }\n }\n\n private async resolveCore(): Promise<unknown> {\n const { factory, dependencies, immediateValue } =\n this.processReplacer();\n\n if (immediateValue !== undefined) {\n await new Promise<void>((resolve) => queueMicrotask(resolve));\n\n this.scope[\"cache\"].set(this.requestor, {\n accessor: this,\n value: {\n kind: \"resolved\",\n value: immediateValue,\n promised: Promised.create(Promise.resolve(immediateValue)),\n },\n });\n\n return immediateValue;\n }\n\n const controller = this.createController();\n\n const resolvedDependencies = await this.scope[\"~resolveDependencies\"](\n dependencies,\n this.requestor\n );\n\n const result = await this.executeFactory(\n factory,\n resolvedDependencies,\n controller\n );\n\n const processedResult = await this.processChangeEvents(result);\n\n this.scope[\"cache\"].set(this.requestor, {\n accessor: this,\n value: {\n kind: \"resolved\",\n value: processedResult,\n promised: Promised.create(Promise.resolve(processedResult)),\n },\n });\n\n this.scope[\"~removeFromResolutionChain\"](this.requestor);\n this.currentPromise = null;\n this.currentPromised = null;\n this.cachedResolvedPromised = null;\n\n return processedResult;\n }\n\n private async resolveWithErrorHandling(): Promise<unknown> {\n try {\n return await this.resolveCore();\n } catch (error) {\n const { enhancedError, errorContext, originalError } =\n this.enhanceResolutionError(error);\n\n this.scope[\"cache\"].set(this.requestor, {\n accessor: this,\n value: {\n kind: \"rejected\",\n error: originalError,\n context: errorContext,\n enhancedError: enhancedError,\n },\n });\n\n this.scope[\"~removeFromResolutionChain\"](this.requestor);\n this.scope[\"~triggerError\"](enhancedError, this.requestor);\n this.currentPromise = null;\n this.currentPromised = null;\n\n throw enhancedError;\n }\n }\n\n private createResolveFunction() {\n return (force: boolean = false): Promised<unknown> => {\n this.scope[\"~ensureNotDisposed\"]();\n\n const entry = this.scope[\"cache\"].get(this.requestor);\n const cached = entry?.value;\n\n if (cached && !force) {\n return this.handleCachedState(cached);\n }\n\n if (this.currentPromise && !force) {\n if (!this.currentPromised) {\n this.currentPromised = Promised.create(this.currentPromise);\n }\n return this.currentPromised;\n }\n\n this.scope[\"~addToResolutionChain\"](this.requestor, this.requestor);\n\n this.currentPromise = this.resolveWithErrorHandling();\n\n this.scope[\"cache\"].set(this.requestor, {\n accessor: this,\n value: { kind: \"pending\", promise: this.currentPromise },\n });\n\n this.currentPromised = Promised.create(this.currentPromise);\n return this.currentPromised;\n };\n }\n\n private handleCachedState(\n cached: Core.ResolveState<unknown>\n ): Promised<unknown> | never {\n if (cached.kind === \"resolved\") {\n if (cached.promised) {\n return cached.promised;\n }\n if (!this.cachedResolvedPromised) {\n this.cachedResolvedPromised = Promised.create(Promise.resolve(cached.value));\n }\n return this.cachedResolvedPromised;\n }\n\n if (cached.kind === \"rejected\") {\n throw cached.error;\n }\n\n if (!this.currentPromised) {\n this.currentPromised = Promised.create(cached.promise);\n }\n return this.currentPromised;\n }\n\n private processReplacer(): ReplacerResult {\n const replacer = this.scope[\"initialValues\"].find(\n (item) => item.executor === this.requestor\n );\n\n if (!replacer) {\n return {\n factory: this.requestor.factory!,\n dependencies: this.requestor.dependencies,\n };\n }\n\n const value = replacer.value;\n\n if (!isExecutor(value)) {\n return {\n factory: this.requestor.factory!,\n dependencies: this.requestor.dependencies,\n immediateValue: value,\n };\n }\n\n return {\n factory: value.factory!,\n dependencies: value.dependencies,\n };\n }\n\n private async executeFactory(\n factory: Core.NoDependencyFn<unknown> | Core.DependentFn<unknown, unknown>,\n resolvedDependencies: unknown,\n controller: Core.Controller\n ): Promise<unknown> {\n try {\n const factoryResult =\n factory.length >= 2\n ? (factory as Core.DependentFn<unknown, unknown>)(\n resolvedDependencies,\n controller\n )\n : (factory as Core.NoDependencyFn<unknown>)(controller);\n\n if (factoryResult instanceof Promise) {\n try {\n return await factoryResult;\n } catch (asyncError) {\n const executorName = errors.getExecutorName(this.requestor);\n const dependencyChain = [executorName];\n\n throw errors.createFactoryError(\n errors.codes.FACTORY_ASYNC_ERROR,\n executorName,\n dependencyChain,\n asyncError,\n {\n dependenciesResolved: resolvedDependencies !== undefined,\n factoryType: typeof factory,\n isAsyncFactory: true,\n }\n );\n }\n }\n\n return factoryResult;\n } catch (syncError) {\n const executorName = errors.getExecutorName(this.requestor);\n const dependencyChain = [executorName];\n\n throw errors.createFactoryError(\n errors.codes.FACTORY_THREW_ERROR,\n executorName,\n dependencyChain,\n syncError,\n {\n dependenciesResolved: resolvedDependencies !== undefined,\n factoryType: typeof factory,\n isAsyncFactory: false,\n }\n );\n }\n }\n\n private async processChangeEvents(result: unknown): Promise<unknown> {\n let currentValue = result;\n const events = this.scope[\"onEvents\"].change;\n\n for (const event of events) {\n const updated = await event(\n \"resolve\",\n this.requestor,\n currentValue,\n this.scope\n );\n\n if (updated !== undefined && updated.executor === this.requestor) {\n currentValue = updated.value;\n }\n }\n\n return currentValue;\n }\n\n private enhanceResolutionError(error: unknown): {\n enhancedError: ExecutorResolutionError;\n errorContext: ErrorContext;\n originalError: unknown;\n } {\n if (\n error &&\n typeof error === \"object\" &&\n \"context\" in error &&\n \"code\" in error &&\n error.context &&\n error.code\n ) {\n return {\n enhancedError: error as ExecutorResolutionError,\n errorContext: error.context as ErrorContext,\n originalError: error,\n };\n }\n\n const executorName = errors.getExecutorName(this.requestor);\n const dependencyChain = [executorName];\n\n const enhancedError = errors.createSystemError(\n errors.codes.INTERNAL_RESOLUTION_ERROR,\n executorName,\n dependencyChain,\n error,\n {\n errorType: error?.constructor?.name || \"UnknownError\",\n resolutionPhase: \"post-factory\",\n hasOriginalContext: false,\n }\n );\n\n return {\n enhancedError,\n errorContext: enhancedError.context,\n originalError: error,\n };\n }\n\n lookup(): undefined | Core.ResolveState<unknown> {\n this.scope[\"~ensureNotDisposed\"]();\n const cacheEntry = this.scope[\"cache\"].get(this.requestor);\n if (!cacheEntry) {\n return undefined;\n }\n return cacheEntry.value || undefined;\n }\n\n get(): unknown {\n this.scope[\"~ensureNotDisposed\"]();\n const cacheEntry = this.scope[\"cache\"].get(this.requestor)?.value;\n\n if (!cacheEntry || cacheEntry.kind === \"pending\") {\n throw new Error(\"Executor is not resolved\");\n }\n\n if (cacheEntry.kind === \"rejected\") {\n throw cacheEntry.enhancedError || cacheEntry.error;\n }\n\n return cacheEntry.value;\n }\n\n release(soft: boolean = false): Promised<void> {\n return this.scope.release(this.requestor, soft);\n }\n\n update(\n updateFn: unknown | ((current: unknown) => unknown)\n ): Promised<void> {\n return this.scope.update(this.requestor, updateFn);\n }\n\n set(value: unknown): Promised<void> {\n return this.scope.update(this.requestor, value);\n }\n\n subscribe(cb: (value: unknown) => void): Core.Cleanup {\n this.scope[\"~ensureNotDisposed\"]();\n return this.scope.onUpdate(this.requestor, cb);\n }\n\n private createController(): Core.Controller {\n return {\n cleanup: (cleanup: Core.Cleanup) => {\n const currentSet =\n this.scope[\"cleanups\"].get(this.requestor) ?? new Set();\n this.scope[\"cleanups\"].set(this.requestor, currentSet);\n currentSet.add(cleanup);\n },\n release: () => this.scope.release(this.requestor),\n reload: () => this.scope.resolve(this.requestor, true).map(() => undefined),\n scope: this.scope,\n };\n }\n}\n\nfunction getExecutor(e: Core.UExecutor): Core.Executor<unknown> {\n if (isLazyExecutor(e) || isReactiveExecutor(e) || isStaticExecutor(e)) {\n return e.executor;\n }\n\n return e as Core.Executor<unknown>;\n}\n\nclass BaseScope implements Core.Scope {\n protected disposed: boolean = false;\n protected cache: Map<UE, CacheEntry> = new Map();\n protected cleanups: Map<UE, Set<Core.Cleanup>> = new Map<\n UE,\n Set<Core.Cleanup>\n >();\n protected onUpdateCallbacks: Map<UE, Set<OnUpdateFn>> = new Map<\n UE,\n Set<OnUpdateFn>\n >();\n protected onUpdateExecutors: Map<UE, Set<UE>> = new Map<UE, Set<UE>>();\n protected onEvents: {\n readonly change: Set<Core.ChangeCallback>;\n readonly release: Set<Core.ReleaseCallback>;\n readonly error: Set<Core.GlobalErrorCallback>;\n } = {\n change: new Set<Core.ChangeCallback>(),\n release: new Set<Core.ReleaseCallback>(),\n error: new Set<Core.GlobalErrorCallback>(),\n } as const;\n protected onErrors: Map<UE, Set<Core.ErrorCallback<unknown>>> = new Map<\n UE,\n Set<Core.ErrorCallback<unknown>>\n >();\n private isDisposing = false;\n\n private resolutionChain: Map<UE, Set<UE>> = new Map();\n\n protected extensions: Extension.Extension[] = [];\n private reversedExtensions: Extension.Extension[] = [];\n protected registry: Core.Executor<unknown>[] = [];\n protected initialValues: Core.Preset<unknown>[] = [];\n public metas: Meta.Meta[] | undefined;\n\n private static readonly emptyDataStore: Accessor.DataStore = {\n get: () => undefined,\n set: () => undefined,\n };\n\n constructor(options?: ScopeOption) {\n if (options?.registry) {\n this.registry = [...options.registry];\n }\n\n if (options?.initialValues) {\n this.initialValues = options.initialValues;\n }\n\n if (options?.meta) {\n this.metas = options.meta;\n }\n\n if (options?.extensions) {\n for (const extension of options.extensions) {\n this.useExtension(extension);\n }\n }\n }\n\n protected \"~checkCircularDependency\"(\n executor: UE,\n resolvingExecutor: UE\n ): void {\n const currentChain = this.resolutionChain.get(resolvingExecutor);\n if (currentChain && currentChain.has(executor)) {\n const chainArray = Array.from(currentChain);\n const dependencyChain = errors.buildDependencyChain(chainArray);\n\n throw errors.createDependencyError(\n errors.codes.CIRCULAR_DEPENDENCY,\n errors.getExecutorName(executor),\n dependencyChain,\n errors.getExecutorName(executor),\n undefined,\n {\n circularPath:\n dependencyChain.join(\" -> \") +\n \" -> \" +\n errors.getExecutorName(executor),\n detectedAt: errors.getExecutorName(resolvingExecutor),\n }\n );\n }\n }\n\n protected \"~addToResolutionChain\"(executor: UE, resolvingExecutor: UE): void {\n const currentChain =\n this.resolutionChain.get(resolvingExecutor) || new Set();\n currentChain.add(executor);\n this.resolutionChain.set(resolvingExecutor, currentChain);\n }\n\n protected \"~removeFromResolutionChain\"(executor: UE): void {\n this.resolutionChain.delete(executor);\n }\n\n protected \"~propagateResolutionChain\"(\n fromExecutor: UE,\n toExecutor: UE\n ): void {\n const fromChain = this.resolutionChain.get(fromExecutor);\n if (fromChain) {\n const newChain = new Set(fromChain);\n newChain.add(fromExecutor);\n this.resolutionChain.set(toExecutor, newChain);\n }\n }\n\n protected async \"~triggerCleanup\"(e: UE): Promise<void> {\n const cs = this.cleanups.get(e);\n if (cs) {\n for (const c of Array.from(cs.values()).reverse()) {\n await c();\n }\n }\n }\n\n protected async \"~triggerUpdate\"(e: UE): Promise<void> {\n const ce = this.cache.get(e);\n if (!ce) {\n throw new Error(\"Executor is not yet resolved\");\n }\n\n const executors = this.onUpdateExecutors.get(e);\n if (executors) {\n for (const t of Array.from(executors.values())) {\n if (this.cleanups.has(t)) {\n this[\"~triggerCleanup\"](t);\n }\n\n const a = this.cache.get(t);\n await a!.accessor.resolve(true);\n\n if (this.onUpdateExecutors.has(t) || this.onUpdateCallbacks.has(t)) {\n await this[\"~triggerUpdate\"](t);\n }\n }\n }\n\n const callbacks = this.onUpdateCallbacks.get(e);\n if (callbacks) {\n for (const cb of Array.from(callbacks.values())) {\n await cb(ce.accessor);\n }\n }\n }\n\n protected async \"~triggerError\"(\n error:\n | ExecutorResolutionError\n | FactoryExecutionError\n | DependencyResolutionError,\n executor: UE\n ): Promise<void> {\n const executorCallbacks = this.onErrors.get(executor);\n if (executorCallbacks) {\n for (const callback of Array.from(executorCallbacks.values())) {\n try {\n await callback(error, executor, this);\n } catch (callbackError) {\n console.error(\"Error in error callback:\", callbackError);\n }\n }\n }\n\n for (const callback of Array.from(this.onEvents.error.values())) {\n try {\n await callback(error, executor, this);\n } catch (callbackError) {\n console.error(\"Error in global error callback:\", callbackError);\n }\n }\n\n for (const extension of this.extensions) {\n if (extension.onError) {\n try {\n extension.onError(error, this);\n } catch (extensionError) {\n console.error(\"Error in extension error handler:\", extensionError);\n }\n }\n }\n }\n\n protected async \"~resolveExecutor\"(\n ie: Core.UExecutor,\n ref: UE\n ): Promise<unknown> {\n const e = getExecutor(ie);\n\n this[\"~checkCircularDependency\"](e, ref);\n\n this[\"~propagateResolutionChain\"](ref, e);\n\n const a = this[\"~makeAccessor\"](e);\n\n if (isLazyExecutor(ie)) {\n return a;\n }\n\n if (isReactiveExecutor(ie)) {\n const c = this.onUpdateExecutors.get(ie.executor) ?? new Set();\n this.onUpdateExecutors.set(ie.executor, c);\n c.add(ref);\n }\n\n await a.resolve(false);\n if (isStaticExecutor(ie)) {\n return a;\n }\n\n return a.get();\n }\n\n protected async \"~resolveDependencies\"(\n ie:\n | undefined\n | Core.UExecutor\n | Core.UExecutor[]\n | Record<string, Core.UExecutor>,\n ref: UE\n ): Promise<undefined | unknown | unknown[] | Record<string, unknown>> {\n if (ie === undefined) {\n return undefined;\n }\n\n if (isExecutor(ie)) {\n return this[\"~resolveExecutor\"](ie, ref);\n }\n\n if (Array.isArray(ie)) {\n return await Promise.all(\n ie.map((item) => this[\"~resolveDependencies\"](item, ref))\n );\n }\n\n const keys = Object.keys(ie);\n const promises = keys.map((k) => this[\"~resolveDependencies\"](ie[k], ref));\n const values = await Promise.all(promises);\n\n const r: Record<string, unknown> = Object.create(null);\n keys.forEach((k, i) => {\n r[k] = values[i];\n });\n\n return r;\n }\n\n protected \"~ensureNotDisposed\"(): void {\n if (this.disposed) {\n throw new Error(\"Scope is disposed\");\n }\n }\n\n private wrapWithExtensions<T>(\n baseExecutor: () => Promised<T>,\n dataStore: Accessor.DataStore,\n operation: Extension.Operation\n ): () => Promised<T> {\n let executor = baseExecutor;\n for (const extension of this.reversedExtensions) {\n if (extension.wrap) {\n const current = executor;\n executor = () => {\n const result = extension.wrap!<T>(dataStore, current, operation);\n return result instanceof Promised ? result : Promised.create(result);\n };\n }\n }\n return executor;\n }\n\n protected \"~makeAccessor\"(e: Core.UExecutor): Core.Accessor<unknown> {\n let requestor =\n isLazyExecutor(e) || isReactiveExecutor(e) || isStaticExecutor(e)\n ? e.executor\n : (e as UE);\n\n const cachedAccessor = this.cache.get(requestor);\n if (cachedAccessor && cachedAccessor.accessor) {\n return cachedAccessor.accessor;\n }\n\n const accessor = new AccessorImpl(this, requestor, e.metas);\n return accessor;\n }\n\n accessor<T>(executor: Core.Executor<T>): Core.Accessor<T> {\n this[\"~ensureNotDisposed\"]();\n return this[\"~makeAccessor\"](executor) as Core.Accessor<T>;\n }\n\n entries(): Array<[UE, Core.Accessor<unknown>]> {\n return Array.from(this.cache.entries()).map(([executor, entry]) => {\n return [executor, entry.accessor];\n });\n }\n\n registeredExecutors(): Core.Executor<unknown>[] {\n this[\"~ensureNotDisposed\"]();\n return [...this.registry];\n }\n\n resolve<T>(\n executor: Core.Executor<T>,\n force: boolean = false\n ): Promised<T> {\n this[\"~ensureNotDisposed\"]();\n\n const coreResolve = (): Promised<T> => {\n const accessor = this[\"~makeAccessor\"](executor);\n return accessor.resolve(force).map(() => accessor.get() as T);\n };\n\n const resolver = this.wrapWithExtensions(\n coreResolve,\n BaseScope.emptyDataStore,\n {\n kind: \"resolve\",\n executor,\n scope: this,\n operation: \"resolve\",\n }\n );\n\n return resolver();\n }\n\n resolveAccessor<T>(\n executor: Core.Executor<T>,\n force: boolean = false\n ): Promised<Core.Accessor<T>> {\n this[\"~ensureNotDisposed\"]();\n const accessor = this[\"~makeAccessor\"](executor);\n return accessor.resolve(force).map(() => accessor as Core.Accessor<T>);\n }\n\n update<T>(\n e: Core.Executor<T>,\n u: T | ((current: T) => T)\n ): Promised<void> {\n if (this.isDisposing) {\n return Promised.create(Promise.resolve());\n }\n\n this[\"~ensureNotDisposed\"]();\n\n const coreUpdate = (): Promised<void> => {\n return Promised.create((async () => {\n this[\"~triggerCleanup\"](e);\n const accessor = this[\"~makeAccessor\"](e);\n \n let value: T | undefined;\n \n if (typeof u === \"function\") {\n const fn = u as (current: T) => T;\n value = fn(accessor.get() as T);\n } else {\n value = u;\n }\n \n const events = this.onEvents.change;\n for (const event of events) {\n const updated = await event(\"update\", e, value, this);\n if (updated !== undefined && e === updated.executor) {\n value = updated.value as T;\n }\n }\n\n this.cache.set(e, {\n accessor,\n value: {\n kind: \"resolved\",\n value,\n promised: Promised.create(Promise.resolve(value)),\n },\n });\n \n await this[\"~triggerUpdate\"](e);\n })());\n };\n\n const baseUpdater = (): Promised<T> => {\n return coreUpdate().map(() => this.accessor(e).get() as T);\n };\n\n const updater = this.wrapWithExtensions(baseUpdater, BaseScope.emptyDataStore, {\n kind: \"resolve\",\n operation: \"update\",\n executor: e,\n scope: this,\n });\n\n return updater().map(() => undefined);\n }\n\n set<T>(e: Core.Executor<T>, value: T): Promised<void> {\n return this.update(e, value);\n }\n\n release(e: Core.Executor<unknown>, s: boolean = false): Promised<void> {\n this[\"~ensureNotDisposed\"]();\n\n const coreRelease = async (): Promise<void> => {\n const ce = this.cache.get(e);\n if (!ce && !s) {\n throw new Error(\"Executor is not yet resolved\");\n }\n\n await this[\"~triggerCleanup\"](e);\n const events = this.onEvents.release;\n for (const event of events) {\n await event(\"release\", e, this);\n }\n\n const executors = this.onUpdateExecutors.get(e);\n if (executors) {\n for (const t of Array.from(executors.values())) {\n await this.release(t, true);\n }\n this.onUpdateExecutors.delete(e);\n }\n\n this.onUpdateCallbacks.delete(e);\n\n this.cache.delete(e);\n };\n\n return Promised.create(coreRelease());\n }\n\n dispose(): Promised<void> {\n this[\"~ensureNotDisposed\"]();\n this.isDisposing = true;\n\n return Promised.create((async () => {\n const extensionDisposeEvents = this.extensions.map(\n (ext) => ext.dispose?.(this) ?? Promise.resolve()\n );\n await Promise.all(extensionDisposeEvents);\n\n const currents = this.cache.keys();\n for (const current of currents) {\n await this.release(current, true);\n }\n\n this.disposed = true;\n this.cache.clear();\n this.cleanups.clear();\n this.onUpdateCallbacks.clear();\n this.onUpdateExecutors.clear();\n this.onEvents.change.clear();\n this.onEvents.release.clear();\n this.onEvents.error.clear();\n this.onErrors.clear();\n this.resolutionChain.clear();\n })());\n }\n\n onUpdate<T>(\n e: Core.Executor<T>,\n cb: (a: Core.Accessor<T>) => void | Promise<void>\n ): Core.Cleanup {\n this[\"~ensureNotDisposed\"]();\n if (this.isDisposing) {\n throw new Error(\"Cannot register update callback on a disposing scope\");\n }\n\n const ou = this.onUpdateCallbacks.get(e) ?? new Set();\n this.onUpdateCallbacks.set(e, ou);\n ou.add(cb as OnUpdateFn);\n\n return () => {\n this[\"~ensureNotDisposed\"]();\n\n const ou = this.onUpdateCallbacks.get(e);\n if (ou) {\n ou.delete(cb as OnUpdateFn);\n if (ou.size === 0) {\n this.onUpdateCallbacks.delete(e);\n }\n }\n };\n }\n\n onChange(callback: Core.ChangeCallback): Core.Cleanup {\n this[\"~ensureNotDisposed\"]();\n if (this.isDisposing) {\n throw new Error(\"Cannot register update callback on a disposing scope\");\n }\n\n this.onEvents[\"change\"].add(callback);\n return () => {\n this[\"~ensureNotDisposed\"]();\n this.onEvents[\"change\"].delete(callback);\n };\n }\n\n onRelease(cb: Core.ReleaseCallback): Core.Cleanup {\n this[\"~ensureNotDisposed\"]();\n if (this.isDisposing) {\n throw new Error(\"Cannot register update callback on a disposing scope\");\n }\n\n this.onEvents[\"release\"].add(cb);\n return () => {\n this[\"~ensureNotDisposed\"]();\n this.onEvents[\"release\"].delete(cb);\n };\n }\n\n onError<T>(\n executor: Core.Executor<T>,\n callback: Core.ErrorCallback<T>\n ): Core.Cleanup;\n onError(callback: Core.GlobalErrorCallback): Core.Cleanup;\n onError<T>(\n executorOrCallback: Core.Executor<T> | Core.GlobalErrorCallback,\n callback?: Core.ErrorCallback<T>\n ): Core.Cleanup {\n this[\"~ensureNotDisposed\"]();\n if (this.isDisposing) {\n throw new Error(\"Cannot register error callback on a disposing scope\");\n }\n\n if (typeof executorOrCallback === \"function\") {\n this.onEvents[\"error\"].add(executorOrCallback);\n return () => {\n this[\"~ensureNotDisposed\"]();\n this.onEvents[\"error\"].delete(executorOrCallback);\n };\n }\n\n if (callback) {\n const executor = executorOrCallback;\n const errorCallbacks = this.onErrors.get(executor) ?? new Set();\n this.onErrors.set(executor, errorCallbacks);\n errorCallbacks.add(callback as Core.ErrorCallback<unknown>);\n\n return () => {\n this[\"~ensureNotDisposed\"]();\n const callbacks = this.onErrors.get(executor);\n if (callbacks) {\n callbacks.delete(callback as Core.ErrorCallback<unknown>);\n if (callbacks.size === 0) {\n this.onErrors.delete(executor);\n }\n }\n };\n }\n\n throw new Error(\"Invalid arguments for onError\");\n }\n\n useExtension(extension: Extension.Extension): Core.Cleanup {\n this[\"~ensureNotDisposed\"]();\n if (this.isDisposing) {\n throw new Error(\"Cannot register extension on a disposing scope\");\n }\n\n this.extensions.push(extension);\n this.reversedExtensions.unshift(extension);\n extension.init?.(this);\n\n return () => {\n this[\"~ensureNotDisposed\"]();\n const idx = this.extensions.indexOf(extension);\n if (idx !== -1) {\n this.extensions.splice(idx, 1);\n this.reversedExtensions.splice(this.reversedExtensions.length - 1 - idx, 1);\n }\n };\n }\n\n use(extension: Extension.Extension): Core.Cleanup {\n return this.useExtension(extension);\n }\n\n exec<S, I = undefined>(\n flow: Core.Executor<Flow.Handler<S, I>>,\n input?: I,\n options?: {\n extensions?: Extension.Extension[];\n initialContext?: Array<\n [Accessor.Accessor<any> | Accessor.AccessorWithDefault<any>, any]\n >;\n presets?: Core.Preset<unknown>[];\n meta?: Meta.Meta[];\n details?: false;\n }\n ): Promised<S>;\n\n exec<S, I = undefined>(\n flow: Core.Executor<Flow.Handler<S, I>>,\n input: I | undefined,\n options: {\n extensions?: Extension.Extension[];\n initialContext?: Array<\n [Accessor.Accessor<any> | Accessor.AccessorWithDefault<any>, any]\n >;\n presets?: Core.Preset<unknown>[];\n meta?: Meta.Meta[];\n details: true;\n }\n ): Promised<Flow.ExecutionDetails<S>>;\n\n exec<S, I = undefined>(\n flow: Core.Executor<Flow.Handler<S, I>>,\n input?: I,\n options?: {\n extensions?: Extension.Extension[];\n initialContext?: Array<\n [Accessor.Accessor<any> | Accessor.AccessorWithDefault<any>, any]\n >;\n presets?: Core.Preset<unknown>[];\n meta?: Meta.Meta[];\n details?: boolean;\n }\n ): Promised<S> | Promised<Flow.ExecutionDetails<S>> {\n this[\"~ensureNotDisposed\"]();\n\n if (options?.details === true) {\n return flowApi.execute(flow, input as I, {\n scope: this,\n extensions: options.extensions,\n initialContext: options.initialContext,\n meta: options.meta,\n details: true,\n });\n }\n\n return flowApi.execute(flow, input as I, {\n scope: this,\n extensions: options?.extensions,\n initialContext: options?.initialContext,\n meta: options?.meta,\n details: false,\n });\n }\n}\n\nexport type ScopeOption = {\n initialValues?: Core.Preset<unknown>[];\n registry?: Core.Executor<unknown>[];\n extensions?: Extension.Extension[];\n meta?: Meta.Meta[];\n};\n\nexport function createScope(): Core.Scope;\nexport function createScope(opt: ScopeOption): Core.Scope;\nexport function createScope(...presets: Core.Preset<unknown>[]): Core.Scope;\n\nexport function createScope(\n ...opt: [ScopeOption | undefined] | Core.Preset<unknown>[]\n): Core.Scope {\n if (opt.at(0) === undefined) {\n return new BaseScope();\n }\n\n if (opt.length === 1 && !isPreset(opt[0])) {\n return new BaseScope(opt[0]);\n }\n\n return new BaseScope({\n initialValues: opt as Core.Preset<unknown>[],\n });\n}\n","import { type Extension } from \"./types\";\n\nexport function extension<T extends Extension.Extension>(ext: T): T {\n return ext;\n}\n","import {\n isExecutor,\n isLazyExecutor,\n isReactiveExecutor,\n isStaticExecutor,\n} from \"./executor\";\nimport { Core } from \"./types\";\n\nexport async function resolves<\n T extends\n | Array<Core.Executor<unknown> | Escapable<unknown>>\n | Record<string, Core.Executor<unknown> | Escapable<unknown>>\n>(\n scope: Core.Scope,\n executors: { [K in keyof T]: T[K] }\n): Promise<{ [K in keyof T]: Core.InferOutput<T[K]> }> {\n const objectOutput = {};\n const arrayOutput = [];\n\n const isArray = Array.isArray(executors);\n\n for (const [index, executor] of Object.entries(executors)) {\n const target = !isExecutor(executor)\n ? executor.escape()\n : isLazyExecutor(executor) ||\n isReactiveExecutor(executor) ||\n isStaticExecutor(executor)\n ? executor.executor\n : (executor as Core.Executor<unknown>);\n\n const result = await scope.resolve(target);\n\n if (isArray) {\n arrayOutput.push(result);\n } else {\n Object.assign(objectOutput, { [index]: result });\n }\n }\n\n const result = isArray ? arrayOutput : objectOutput;\n return result as { [K in keyof T]: Core.InferOutput<T[K]> };\n}\n\nexport type Escapable<T> = {\n escape: () => Core.Executor<T>;\n};\n\n","import { createExecutor } from \"./executor\";\nimport { meta } from \"./meta\";\nimport { Promised } from \"./promises\";\nimport { custom, validate } from \"./ssch\";\nimport {\n type Core,\n type Meta,\n type Multi,\n type StandardSchemaV1,\n} from \"./types\";\n\nclass MultiExecutorImpl<T, K, PoolIdType = unknown> {\n private option: Multi.Option<K>;\n private poolId: Meta.MetaFn<PoolIdType>;\n private keyPool: Map<unknown, Core.Executor<T>>;\n private createNewExecutor: (key: K) => Core.Executor<T>;\n public id: Meta.MetaFn<PoolIdType>;\n\n constructor(\n option: Multi.Option<K>,\n poolId: Meta.MetaFn<PoolIdType>,\n keyPool: Map<unknown, Core.Executor<T>>,\n createNewExecutor: (key: K) => Core.Executor<T>\n ) {\n this.option = option;\n this.poolId = poolId;\n this.keyPool = keyPool;\n this.createNewExecutor = createNewExecutor;\n this.id = poolId;\n }\n\n processKey(key: K) {\n const validatedKey = validate(this.option.keySchema, key);\n const transformedKey = this.option.keyTransform\n ? this.option.keyTransform(validatedKey)\n : validatedKey;\n return { validatedKey, transformedKey };\n }\n\n newProvider(key: K): Core.Executor<T> {\n const { transformedKey } = this.processKey(key);\n const executor = this.createNewExecutor(key);\n this.keyPool.set(transformedKey, executor);\n return executor;\n }\n\n __call(key: K): Core.Executor<T> {\n const { transformedKey } = this.processKey(key);\n return this.keyPool.get(transformedKey) || this.newProvider(key);\n }\n\n providerFactory(ctl: Core.Controller) {\n return (key: K) => {\n const executor = this.__call(key);\n return ctl.scope.accessor(executor);\n };\n }\n\n release(scope: Core.Scope): Promised<void> {\n return Promised.create((async () => {\n const entries = scope.entries();\n for (const [executor] of entries) {\n const check = this.poolId.some\n ? this.poolId.some(executor)\n : this.poolId.find(executor);\n if (check && (Array.isArray(check) ? check.length > 0 : check)) {\n await scope.release(executor);\n }\n }\n })());\n }\n}\n\nfunction createValidatedExecutor<T, K>(\n option: Multi.Option<K>,\n key: K,\n createExecutorFn: (validatedKey: K) => Core.Executor<T>\n): Core.Executor<T> {\n const validatedKey = validate(option.keySchema, key);\n return createExecutorFn(validatedKey);\n}\n\nfunction createMultiExecutor<T, K, PoolIdType>(\n option: Multi.Option<K>,\n poolId: Meta.MetaFn<PoolIdType>,\n keyPool: Map<unknown, Core.Executor<T>>,\n createNewExecutor: (key: K) => Core.Executor<T>,\n providerMetas: Meta.Meta[]\n): Multi.MultiExecutor<T, K> {\n const impl = new MultiExecutorImpl<T, K, PoolIdType>(\n option,\n poolId,\n keyPool,\n createNewExecutor\n );\n\n const provider = createExecutor(\n (ctl: Core.Controller) => impl.providerFactory(ctl),\n undefined,\n providerMetas\n );\n\n const callableFn = (key: K) => impl.__call(key);\n const multiExecutor = Object.assign(callableFn, provider, {\n release: (scope: Core.Scope) => impl.release(scope),\n id: impl.id,\n }) as Multi.MultiExecutor<T, K>;\n\n return multiExecutor;\n}\n\nexport function provide<T, K>(\n option: Multi.Option<K>,\n valueFn: (key: K, controller: Core.Controller) => T | Promise<T>,\n ...metas: Meta.Meta[]\n): Multi.MultiExecutor<T, K> {\n const poolId = meta(Symbol(), custom<undefined>());\n const keyPool = new Map<unknown, Core.Executor<T>>();\n\n const createNewExecutor = (key: K) => {\n return createValidatedExecutor(option, key, (validatedKey) =>\n createExecutor(\n (ctl: Core.Controller) => valueFn(validatedKey, ctl),\n undefined,\n [poolId(undefined), ...metas]\n )\n );\n };\n\n return createMultiExecutor(option, poolId, keyPool, createNewExecutor, [\n poolId(undefined),\n ...metas,\n ]);\n}\n\nexport function derive<T, K, D extends Core.DependencyLike>(\n option: Multi.DeriveOption<K, { [K in keyof D]: D[K] }>,\n valueFn: Multi.DependentFn<T, K, Core.InferOutput<D>>,\n ...metas: Meta.Meta[]\n): Multi.MultiExecutor<T, K> {\n const poolId = meta(Symbol(), custom<void>());\n const keyPool = new Map<unknown, Core.Executor<T>>();\n\n const createNewExecutor = (key: K) => {\n return createValidatedExecutor(option, key, (validatedKey) => {\n const factory: Core.DependentFn<T, unknown> = (dependencies, ctl) =>\n valueFn(dependencies as Core.InferOutput<D>, validatedKey, ctl);\n\n const deps = option.dependencies as\n | Core.UExecutor\n | ReadonlyArray<Core.UExecutor>\n | Record<string, Core.UExecutor>;\n\n return createExecutor(factory, deps, metas);\n });\n };\n\n return createMultiExecutor(option, poolId, keyPool, createNewExecutor, metas);\n}\n","import type { Meta } from \"./types\";\nimport { meta } from \"./meta\";\nimport { custom } from \"./ssch\";\n\nexport * from \"./types\";\nexport type { Accessor } from \"./types\";\n\nexport {\n provide,\n derive,\n preset,\n isExecutor,\n isLazyExecutor,\n isMainExecutor,\n isPreset,\n isReactiveExecutor,\n isStaticExecutor,\n} from \"./executor\";\n\nexport { createScope, type ScopeOption } from \"./scope\";\nexport { meta, getValue, findValue, findValues } from \"./meta\";\nexport { accessor } from \"./accessor\";\n\nexport { flow, flowMeta } from \"./flow\";\nexport { Promised } from \"./promises\";\n\nexport { extension } from \"./extension\";\nexport { resolves } from \"./helpers\";\n\nexport { custom } from \"./ssch\";\nexport * as standardSchema from \"./ssch\";\n\nexport * as multi from \"./multi\";\nexport * as errors from \"./errors\";\n\nexport const name: Meta.MetaFn<string> = meta(\n \"pumped-fn/name\",\n custom<string>()\n);\n"],"mappings":"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"}