@bluelibs/runner 5.2.1 → 5.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +54 -1
- package/dist/browser/index.cjs +149 -59
- package/dist/browser/index.cjs.map +1 -1
- package/dist/browser/index.mjs +149 -60
- package/dist/browser/index.mjs.map +1 -1
- package/dist/edge/index.cjs +149 -59
- package/dist/edge/index.cjs.map +1 -1
- package/dist/edge/index.mjs +149 -60
- package/dist/edge/index.mjs.map +1 -1
- package/dist/node/node.cjs +383 -201
- package/dist/node/node.cjs.map +1 -1
- package/dist/node/node.mjs +382 -202
- package/dist/node/node.mjs.map +1 -1
- package/dist/types/definers/builders/error/fluent-builder.interface.d.ts +6 -0
- package/dist/types/definers/builders/error/index.d.ts +10 -1
- package/dist/types/definers/builders/error/types.d.ts +2 -0
- package/dist/types/definers/defineError.d.ts +5 -3
- package/dist/types/defs.d.ts +1 -0
- package/dist/types/globals/resources/tunnel/protocol.d.ts +3 -0
- package/dist/types/models/Store.d.ts +5 -3
- package/dist/types/models/StoreRegistry.d.ts +5 -3
- package/dist/types/node/durable/core/DurableResource.d.ts +23 -9
- package/dist/types/node/durable/core/DurableService.d.ts +15 -9
- package/dist/types/node/durable/core/interfaces/service.d.ts +27 -19
- package/dist/types/node/durable/core/interfaces/store.d.ts +1 -1
- package/dist/types/node/durable/core/managers/ExecutionManager.d.ts +34 -4
- package/dist/types/node/durable/core/managers/ScheduleManager.d.ts +5 -3
- package/dist/types/node/durable/core/managers/TaskRegistry.d.ts +5 -5
- package/dist/types/node/durable/core/managers/WaitManager.d.ts +1 -1
- package/dist/types/node/durable/index.d.ts +1 -0
- package/dist/types/node/durable/tags/durableWorkflow.tag.d.ts +14 -0
- package/dist/types/public.d.ts +4 -1
- package/dist/types/testing.d.ts +0 -1
- package/dist/types/types/error.d.ts +22 -1
- package/dist/types/types/resource.d.ts +2 -4
- package/dist/types/types/symbols.d.ts +2 -2
- package/dist/types/types/tagged.d.ts +18 -0
- package/dist/universal/index.cjs +149 -59
- package/dist/universal/index.cjs.map +1 -1
- package/dist/universal/index.mjs +149 -60
- package/dist/universal/index.mjs.map +1 -1
- package/package.json +1 -1
- package/readmes/AI.md +25 -9
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/serializer/regexp-validator.ts","../../src/types/symbols.ts","../../src/tools/getCallerFile.ts","../../src/defs.ts","../../src/types/event.ts","../../src/types/runner.ts","../../src/types/contracts.ts","../../src/types/storeTypes.ts","../../src/definers/tools.ts","../../src/tools/throws.ts","../../src/definers/defineTask.ts","../../src/definers/defineHook.ts","../../src/errors.ts","../../src/definers/defineError.ts","../../src/definers/builders/error/utils.ts","../../src/definers/builders/error/fluent-builder.ts","../../src/definers/builders/error/index.ts","../../src/platform/adapters/node-als.ts","../../src/platform/adapters/node.ts","../../src/platform/adapters/browser.ts","../../src/platform/adapters/edge.ts","../../src/platform/adapters/universal-generic.ts","../../src/platform/adapters/universal.ts","../../src/platform/factory.ts","../../src/platform/index.ts","../../src/definers/resourceFork.ts","../../src/definers/defineResource.ts","../../src/definers/defineEvent.ts","../../src/definers/middlewareConfig.ts","../../src/definers/defineTaskMiddleware.ts","../../src/definers/defineResourceMiddleware.ts","../../src/definers/defineOverride.ts","../../src/definers/defineTag.ts","../../src/globals/middleware/requireContext.middleware.ts","../../src/serializer/types.ts","../../src/serializer/binary-builtins.ts","../../src/serializer/error-url-builtins.ts","../../src/serializer/special-values.ts","../../src/serializer/builtins.ts","../../src/serializer/type-registry.ts","../../src/serializer/validation.ts","../../src/serializer/serialize-utils.ts","../../src/serializer/graph-serializer.ts","../../src/serializer/tree-serializer.ts","../../src/serializer/deserializer.ts","../../src/serializer/option-normalizers.ts","../../src/serializer/Serializer.ts","../../src/definers/defineAsyncContext.ts","../../src/globals/resources/debug/debug.tag.ts","../../src/globals/resources/tunnel/tunnel.tag.ts","../../src/globals/resources/tunnel/tunnel.policy.tag.ts","../../src/globals/globalTags.ts","../../src/globals/globalEvents.ts","../../src/models/ExecutionJournal.ts","../../src/globals/middleware/cache.middleware.ts","../../src/globals/middleware/circuitBreaker.middleware.ts","../../src/models/event/types.ts","../../src/models/event/ListenerRegistry.ts","../../src/models/event/InterceptorPipeline.ts","../../src/models/event/EmissionExecutor.ts","../../src/models/event/CycleContext.ts","../../src/models/EventManager.ts","../../src/models/Semaphore.ts","../../src/globals/middleware/concurrency.middleware.ts","../../src/globals/middleware/rateLimit.middleware.ts","../../src/globals/middleware/temporal.middleware.ts","../../src/models/Queue.ts","../../src/globals/resources/queue.resource.ts","../../src/globals/resources/tunnel/protocol.ts","../../src/globals/resources/tunnel/error-utils.ts","../../src/http-fetch-tunnel.resource.ts","../../src/tunnels/buildUniversalManifest.ts","../../src/http-client.ts","../../src/globals/resources/httpClientFactory.resource.ts","../../src/globals/globalResources.ts","../../src/globals/middleware/timeout.middleware.ts","../../src/globals/middleware/retry.middleware.ts","../../src/globals/middleware/fallback.middleware.ts","../../src/globals/globalMiddleware.ts","../../src/globals/resources/debug/types.ts","../../src/globals/debug.ts","../../src/models/TaskRunner.ts","../../src/models/ResourceInitializer.ts","../../src/models/utils/safeStringify.ts","../../src/models/LogPrinter.ts","../../src/models/Logger.ts","../../src/models/DependencyProcessor.ts","../../src/models/utils/findCircularDependencies.ts","../../src/models/StoreValidator.ts","../../src/models/StoreRegistry.ts","../../src/models/OverrideManager.ts","../../src/globals/middleware/tunnel.middleware.ts","../../src/models/middleware/InterceptorRegistry.ts","../../src/models/middleware/MiddlewareResolver.ts","../../src/models/middleware/ValidationHelper.ts","../../src/models/middleware/TaskMiddlewareComposer.ts","../../src/models/middleware/ResourceMiddlewareComposer.ts","../../src/models/MiddlewareManager.ts","../../src/tools/detectRunnerMode.ts","../../src/models/Store.ts","../../src/globals/resources/debug/debugConfig.resource.ts","../../src/globals/resources/debug/utils.ts","../../src/globals/resources/debug/globalEvent.hook.ts","../../src/globals/resources/debug/executionTracker.middleware.ts","../../src/globals/resources/debug/middleware.hook.ts","../../src/globals/resources/debug/hook.hook.ts","../../src/globals/resources/debug/debug.resource.ts","../../src/processHooks.ts","../../src/models/UnhandledError.ts","../../src/models/RunResult.ts","../../src/run.ts","../../src/globals/tunnels/index.ts","../../src/testing.ts","../../src/definers/builders/resource/utils.ts","../../src/definers/builders/resource/fluent-builder.ts","../../src/definers/builders/resource/index.ts","../../src/definers/builders/task/utils.ts","../../src/definers/builders/task/fluent-builder.ts","../../src/definers/builders/task/phantom-builder.ts","../../src/definers/builders/task/index.ts","../../src/definers/builders/event/utils.ts","../../src/definers/builders/event/fluent-builder.ts","../../src/definers/builders/event/index.ts","../../src/definers/builders/hook/utils.ts","../../src/definers/builders/hook/fluent-builder.ts","../../src/definers/builders/hook/index.ts","../../src/definers/builders/middleware/utils.ts","../../src/definers/builders/middleware/task.ts","../../src/definers/builders/middleware/resource.ts","../../src/definers/builders/middleware/index.ts","../../src/definers/builders/tag/utils.ts","../../src/definers/builders/tag/fluent-builder.ts","../../src/definers/builders/tag/index.ts","../../src/definers/builders/asyncContext/utils.ts","../../src/definers/builders/asyncContext/fluent-builder.ts","../../src/definers/builders/asyncContext/index.ts","../../src/definers/builders/override/hook.ts","../../src/definers/builders/override/resource.ts","../../src/definers/builders/override/resource-middleware.ts","../../src/definers/builders/override/task.ts","../../src/definers/builders/override/task-middleware.ts","../../src/definers/builders/override/index.ts","../../src/public.ts"],"names":["stack","RunnerMode","HookDependencyState","id","error","store","deps","mapRegisterItems","task","SymbolPolicy","SymbolPolicyErrorMessage","tag","serializedPayload","shouldExcludeCurrentType","hasOwn","serializer","cacheFactoryTask","journal","journalKeys","event","r","platform","hook","resource","override","next","remotePayload","globalMiddlewares","i","debugConfig","debug","clone","e","a","mergeArray","mergeDependencies","createContext"],"mappings":"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","file":"index.mjs","sourcesContent":["/**\n * RegExp pattern safety validation for ReDoS protection.\n * Extracted from Serializer.ts as a standalone module.\n */\n\nexport interface RegExpPayload {\n pattern: string;\n flags: string;\n}\n\nexport interface RegExpValidatorOptions {\n maxPatternLength: number;\n allowUnsafe: boolean;\n}\n\n/**\n * Check if a character is a quantifier at the given position.\n */\nexport const isQuantifierAt = (pattern: string, index: number): boolean => {\n if (index >= pattern.length) {\n return false;\n }\n const char = pattern[index];\n if (char === \"*\" || char === \"+\" || char === \"?\") {\n return true;\n }\n if (char === \"{\") {\n return isBoundedQuantifier(pattern, index);\n }\n return false;\n};\n\n/**\n * Check if a character represents a quantifier (*, +, ?, {n,m}).\n */\nexport const isQuantifierChar = (\n char: string,\n pattern: string,\n index: number,\n): boolean => {\n if (char === \"*\" || char === \"+\") {\n return true;\n }\n if (char === \"?\") {\n if (index > 0 && pattern[index - 1] === \"(\") {\n return false;\n }\n return true;\n }\n if (char === \"{\") {\n return isBoundedQuantifier(pattern, index);\n }\n return false;\n};\n\n/**\n * Check if the pattern contains a bounded quantifier at the given position.\n */\nexport const isBoundedQuantifier = (\n pattern: string,\n index: number,\n): boolean => {\n let sawDigit = false;\n let sawComma = false;\n\n for (let i = index + 1; i < pattern.length; i += 1) {\n const char = pattern[i];\n if (char >= \"0\" && char <= \"9\") {\n sawDigit = true;\n continue;\n }\n if (char === \",\" && !sawComma) {\n sawComma = true;\n continue;\n }\n if (char === \"}\") {\n return sawDigit;\n }\n return false;\n }\n return false;\n};\n\n/**\n * Check if a RegExp pattern is safe from ReDoS attacks.\n * Detects nested quantifiers which are a common ReDoS vector.\n */\nexport const isRegExpPatternSafe = (pattern: string): boolean => {\n const groupStack: Array<{ hasQuantifier: boolean }> = [];\n let escaped = false;\n let inCharClass = false;\n\n for (let index = 0; index < pattern.length; index += 1) {\n const char = pattern[index];\n if (escaped) {\n escaped = false;\n continue;\n }\n if (char === \"\\\\\") {\n escaped = true;\n continue;\n }\n if (inCharClass) {\n if (char === \"]\") {\n inCharClass = false;\n }\n continue;\n }\n if (char === \"[\") {\n inCharClass = true;\n continue;\n }\n if (char === \"(\") {\n groupStack.push({ hasQuantifier: false });\n if (pattern[index + 1] === \"?\") {\n index += 1;\n }\n continue;\n }\n if (char === \")\") {\n const group = groupStack.pop();\n if (group?.hasQuantifier && isQuantifierAt(pattern, index + 1)) {\n return false;\n }\n if (group?.hasQuantifier && groupStack.length > 0) {\n groupStack[groupStack.length - 1].hasQuantifier = true;\n }\n continue;\n }\n if (isQuantifierChar(char, pattern, index)) {\n if (groupStack.length > 0) {\n groupStack[groupStack.length - 1].hasQuantifier = true;\n }\n }\n }\n\n return true;\n};\n\n/**\n * Validate and extract a RegExp payload from unknown data.\n * Enforces pattern length limits and optional safety checks.\n */\nexport const assertRegExpPayload = (\n value: unknown,\n options: RegExpValidatorOptions,\n): RegExpPayload => {\n if (!value || typeof value !== \"object\") {\n throw new Error(\"Invalid RegExp payload\");\n }\n const record = value as Record<string, unknown>;\n if (typeof record.pattern !== \"string\" || typeof record.flags !== \"string\") {\n throw new Error(\"Invalid RegExp payload\");\n }\n if (record.pattern.length > options.maxPatternLength) {\n throw new Error(\n `RegExp pattern exceeds limit (${options.maxPatternLength})`,\n );\n }\n if (!options.allowUnsafe && !isRegExpPatternSafe(record.pattern)) {\n throw new Error(\"Unsafe RegExp pattern\");\n }\n return { pattern: record.pattern, flags: record.flags };\n};\n","/**\n * Internal brand symbols used to tag created objects at runtime and help with\n * type‑narrowing. Prefer the `isTask`/`isResource`/`isEvent`/`isMiddleware`\n * helpers instead of touching these directly.\n * @internal\n */\nexport const symbolTask: unique symbol = Symbol.for(\"runner.task\");\n/** Marks a task as a phantom task (no-op run; meant to be tunneled/routed). */\nexport const symbolPhantomTask: unique symbol = Symbol.for(\n \"runner.task.phantom\",\n);\nexport const symbolResource: unique symbol = Symbol.for(\"runner.resource\");\n/** @internal Marks forked resources and records fork provenance */\nexport const symbolResourceForkedFrom: unique symbol = Symbol.for(\n \"runner.resourceForkedFrom\",\n);\nexport const symbolResourceWithConfig: unique symbol = Symbol.for(\n \"runner.resourceWithConfig\",\n);\nexport const symbolEvent: unique symbol = Symbol.for(\"runner.event\");\n/** @internal Marks an error helper definition */\nexport const symbolError: unique symbol = Symbol.for(\"runner.error\");\nexport const symbolMiddleware: unique symbol = Symbol.for(\"runner.middleware\");\n/** New brands for separated middleware kinds */\nexport const symbolTaskMiddleware: unique symbol = Symbol.for(\n \"runner.taskMiddleware\",\n);\nexport const symbolResourceMiddleware: unique symbol = Symbol.for(\n \"runner.resourceMiddleware\",\n);\nexport const symbolMiddlewareConfigured: unique symbol = Symbol.for(\n \"runner.middlewareConfigured\",\n);\n/** Records which tunnel resource owns the task patching (exclusivity). */\nexport const symbolTunneledBy: unique symbol = Symbol.for(\"runner.tunneledBy\");\n/** @internal Marks hook definitions (event listeners without middleware) */\nexport const symbolHook: unique symbol = Symbol.for(\"runner.hook\");\n// export const symbolMiddlewareEverywhereTasks: unique symbol = Symbol.for(\n// \"runner.middlewareGlobalTasks\",\n// );\n// export const symbolMiddlewareEverywhereResources: unique symbol = Symbol.for(\n// \"runner.middlewareGlobalResources\",\n// );\n/** @internal Marks a tag definition */\nexport const symbolTag: unique symbol = Symbol.for(\"runner.tag\");\nexport const symbolTagConfigured: unique symbol = Symbol.for(\n \"runner.tagConfigured\",\n);\n\n/** @internal Marks an optional dependency wrapper */\nexport const symbolOptionalDependency: unique symbol = Symbol.for(\n \"runner.optionalDependency\",\n);\n\n/** @internal Path to aid anonymous id generation and error messages */\nexport const symbolFilePath: unique symbol = Symbol.for(\"runner.filePath\");\n\n/** @internal Marks an async context definition */\nexport const symbolAsyncContext: unique symbol = Symbol.for(\n \"runner.asyncContext\",\n);\n","/**\n * Inline node detection to avoid circular dependency with platform module.\n * This is necessary because getCallerFile() is called during error module\n * initialization, before the platform module is fully loaded.\n */\nfunction isNodeInline(): boolean {\n return (\n typeof process !== \"undefined\" &&\n typeof (process as NodeJS.Process)?.versions?.node === \"string\"\n );\n}\n\nexport function getCallerFile(): string {\n const originalPrepare = Error.prepareStackTrace;\n try {\n // Prefer robust Node path with structured stack frames\n if (isNodeInline()) {\n const err = new Error();\n Error.prepareStackTrace = (_err, stack) => stack;\n const stack = err.stack as unknown as Array<{\n getFileName?: () => string | null;\n }>;\n\n // Best-effort: skip current (this fn) and its caller, then read next frame\n stack.shift();\n stack.shift();\n const candidate = stack.shift();\n const file = candidate?.getFileName?.();\n // In Node, V8 always provides a filename for this frame; keep branchless for coverage\n return file!;\n }\n\n // Browser/edge fallback: do not attempt fragile parsing; keep deterministic\n return \"unknown\";\n } finally {\n Error.prepareStackTrace = originalPrepare;\n }\n}\n","/**\n * Core public TypeScript types for BlueLibs Runner.\n *\n * This file contains the strongly-typed contract for tasks, resources, events\n * and middleware. It mirrors the mental model described in the README:\n * - Tasks are functions\n * - Resources are singletons (with init/dispose hooks)\n * - Hooks are event listeners without middleware\n * - Events are simple, strongly-typed emissions\n * - Middleware can target both tasks and resources (taskMiddleware, resourceMiddleware)\n *\n * DX goals:\n * - Crystal‑clear generics and helper types that infer dependency shapes\n * - Friendly JSDoc you can hover in editors to understand usage instantly\n * - Safe overrides and strong typing around config and register mechanics\n */\nexport * from \"./types/utilities\";\nexport * from \"./types/symbols\";\nexport * from \"./types/tag\";\nexport * from \"./types/hook\";\nexport * from \"./types/resource\";\nexport * from \"./types/event\";\nexport * from \"./types/task\";\nexport * from \"./types/taskMiddleware\";\nexport * from \"./types/resourceMiddleware\";\nexport * from \"./types/meta\";\nexport * from \"./types/runner\";\nexport * from \"./types/asyncContext\";\nexport * from \"./types/error\";\nexport * from \"./types/contracts\";\nexport * from \"./types/inputFile\";\n\n// Useful other types that are kind-of spread out.\nexport type { ICacheInstance } from \"./globals/middleware/cache.middleware\";\nexport * from \"./types/storeTypes\";\n","import { IOptionalDependency, IValidationSchema } from \"./utilities\";\nimport { TagType } from \"./tag\";\nimport { IEventMeta } from \"./meta\";\nimport { CommonPayload, symbolEvent, symbolFilePath } from \"./utilities\";\n\nexport type EventHandlerType<T = any> = (\n event: IEventEmission<T>,\n) => any | Promise<any>;\n\n// Helper to keep tuple inference intact for multi-event hooks\nexport function onAnyOf<T extends readonly IEventDefinition<any>[]>(\n ...defs: T\n): T {\n return defs;\n}\n\n/**\n * Runtime guard that checks if an emission belongs to one of the given event defs.\n * Narrows payload type to the intersection of the provided events' payloads.\n */\nexport function isOneOf<TDefs extends readonly IEventDefinition<any>[]>(\n emission: IEventEmission<any>,\n defs: TDefs,\n): emission is IEventEmission<CommonPayload<TDefs>> {\n return defs.some((d) => d.id === emission.id);\n}\n\nexport interface IEventDefinition<TPayload = void> {\n id: string;\n meta?: IEventMeta;\n /**\n * Optional validation schema for runtime payload validation.\n * When provided, event payload will be validated when emitted.\n */\n payloadSchema?: IValidationSchema<TPayload>;\n tags?: TagType[];\n /**\n * If true, listeners with the same priority run concurrently within a batch.\n * Batches (grouped by order) still execute sequentially in priority order.\n */\n parallel?: boolean;\n}\n\n/**\n * The definioten of the event.\n * This is different from the event emission.\n */\nexport interface IEvent<TPayload = any> extends IEventDefinition<TPayload> {\n id: string;\n /**\n * We use this event to discriminate between resources with just 'id' and 'events' as they collide. This is a workaround, should be redone using classes and instanceof.\n */\n [symbolEvent]: true;\n [symbolFilePath]: string;\n /** Return an optional dependency wrapper for this event. */\n optional: () => IOptionalDependency<IEvent<TPayload>>;\n tags: TagType[];\n}\n\n/**\n * This represents the object that is passed to event handlers\n */\nexport interface IEventEmission<TPayload = any> {\n /**\n * The ID of the event. This is the same as the event's ID.\n * This is useful for global event listeners.\n */\n id: string;\n /**\n * The data that the event carries. It can be anything.\n */\n data: TPayload;\n /**\n * The timestamp when the event was created.\n */\n timestamp: Date;\n /**\n * The source of the event. This can be useful for debugging.\n */\n source: string;\n /**\n * Metadata associated with the event definition.\n */\n meta: IEventMeta;\n /**\n * Stops propagation to remaining event listeners.\n */\n stopPropagation(): void;\n /**\n * Returns true if propagation has been stopped.\n */\n isPropagationStopped(): boolean;\n /**\n * The tags that the event carries.\n */\n tags: TagType[];\n}\n","import { DebugFriendlyConfig } from \"../globals/resources/debug\";\nimport { LogLevels, PrintStrategy } from \"../models/Logger\";\nimport { OnUnhandledError } from \"../models/UnhandledError\";\n\nexport type RunOptions = {\n /**\n * Defaults to undefined. If true, we introduce logging to the console.\n */\n debug?: DebugFriendlyConfig;\n /**\n * Configure logging settings.\n */\n logs?: {\n /**\n * Defaults to info. Use null to disable logging.\n */\n printThreshold?: null | LogLevels;\n /**\n * Defaults to PRETTY. How to print the logs.\n */\n printStrategy?: PrintStrategy;\n /**\n * Defaults to false. If true, we buffer logs until the root resource is ready.\n * This provides you with the chance to see the logs before the root resource is ready.\n */\n bufferLogs?: boolean;\n };\n /**\n * When true (default), installs a central error boundary that catches uncaught errors\n * from process-level events and routes them to `onUnhandledError`.\n */\n errorBoundary?: boolean;\n /**\n * When true (default), installs SIGINT/SIGTERM handlers that call dispose() on the root allowing for graceful shutdown.\n */\n shutdownHooks?: boolean;\n /**\n * Custom handler for any unhandled error caught by Runner. Defaults to logging via the created logger.\n */\n onUnhandledError?: OnUnhandledError;\n /**\n * Defaults to false.\n *\n * Dry run mode. When true, the runner will setup the system, ensure there are no errors, but will not start the system.\n * Your resources will not be initialized, and no events will be emitted. This is useful for testing and debugging.\n *\n * Note: this cannot catch init() errors that happen within resources.\n */\n dryRun?: boolean;\n /**\n * Defaults to true.\n * When set, forces runtime cycle detection for event emissions. Disable if you're sure\n * you don't have event deadlocks to improve event emission performance.\n */\n runtimeEventCycleDetection?: boolean;\n /**\n * Specify in which mode to run \"dev\", \"prod\" or \"test\".\n * If inside Node this is automatically detected from the NODE_ENV environment variable if not provided.\n */\n mode?: RunnerMode;\n};\n\n/**\n * The mode in which the runner is operating\n */\nexport enum RunnerMode {\n TEST = \"test\",\n DEV = \"dev\",\n PROD = \"prod\",\n}\n","// Solution to enforce input,output contracts from 'tags' and 'middleware'\n\nimport { TagType } from \"./tag\";\nimport type { UnionToIntersection } from \"./utilities\";\n\n// A unique symbol key used both for typing and runtime branding\nexport const CONTRACT: unique symbol = Symbol.for(\"runner.contract\");\nexport type CONTRACT = typeof CONTRACT;\n\n// Generic base for anything that carries input/output contracts\nexport interface IContractable<TConfig = any, TInput = void, TOutput = void> {\n readonly __containsContract: true;\n // Required brand so TS can always infer the generics\n readonly [CONTRACT]: {\n config: TConfig;\n input: TInput;\n output: TOutput;\n };\n}\n\n// Helpers\nexport type NonVoid<T> = [T] extends [void] ? never : T;\nexport type IsTuple<T extends readonly unknown[]> = number extends T[\"length\"]\n ? false\n : true;\nexport type Simplify<T> = { [K in keyof T]: T[K] } & {};\nexport type IsUnknown<T> = unknown extends T\n ? [T] extends [unknown]\n ? true\n : false\n : false;\nexport type UnknownToNever<T> = IsUnknown<T> extends true ? never : T;\n\n// Generic extractors from any IContractable via the CONTRACT brand\nexport type ExtractContractOf<T, Kind extends \"input\" | \"output\"> =\n T extends IContractable<any, infer I, infer O>\n ? UnknownToNever<Kind extends \"input\" ? NonVoid<I> : NonVoid<O>>\n : never;\n\n// Filter that preserves tuple shape; array -> Array<Union>\nexport type FilterContractsKind<\n TItems extends readonly unknown[],\n Kind extends \"input\" | \"output\",\n Acc extends readonly unknown[] = [],\n> = TItems extends readonly [infer H, ...infer R]\n ? ExtractContractOf<H, Kind> extends never\n ? FilterContractsKind<R, Kind, Acc>\n : FilterContractsKind<R, Kind, [...Acc, ExtractContractOf<H, Kind>]>\n : Acc;\n\nexport type ExtractContractsFromCollection<\n TItems extends readonly unknown[],\n Kind extends \"input\" | \"output\",\n> =\n IsTuple<TItems> extends true\n ? FilterContractsKind<TItems, Kind>\n : Array<ExtractContractOf<TItems[number], Kind>>;\n\n// Public API you asked for\nexport type ExtractInputTypeFromContracts<TItems extends readonly unknown[]> =\n ExtractContractsFromCollection<TItems, \"input\">;\n\nexport type ExtractOutputTypeFromContracts<TItems extends readonly unknown[]> =\n ExtractContractsFromCollection<TItems, \"output\">;\n\n// Unions and intersections\nexport type ContractsUnionInputs<TItems extends readonly unknown[]> =\n ExtractInputTypeFromContracts<TItems> extends readonly (infer U)[]\n ? U\n : never;\n\nexport type ContractsUnionOutputs<TItems extends readonly unknown[]> =\n ExtractOutputTypeFromContracts<TItems> extends readonly (infer U)[]\n ? U\n : never;\n\nexport type ContractsIntersectionInputs<TItems extends readonly unknown[]> =\n UnionToIntersection<ContractsUnionInputs<TItems>>;\n\nexport type ContractsIntersectionOutputs<TItems extends readonly unknown[]> =\n UnionToIntersection<ContractsUnionOutputs<TItems>>;\n\n// Booleans\nexport type HasInputContracts<TItems extends readonly unknown[]> = [\n ContractsUnionInputs<TItems>,\n] extends [never]\n ? false\n : true;\n\nexport type HasOutputContracts<TItems extends readonly unknown[]> = [\n ContractsUnionOutputs<TItems>,\n] extends [never]\n ? false\n : true;\n\n// Collision detection helpers for intersections\nexport type IsNever<T> = [T] extends [never] ? true : false;\nexport type KeysWithNever<T> = T extends object\n ? { [K in keyof T]-?: [T[K]] extends [never] ? K : never }[keyof T]\n : never;\nexport type HasNeverProperty<T> = KeysWithNever<T> extends never ? false : true;\n// \"Impossible\" means either overall never or an object with any `never` property\nexport type IsImpossibleIntersection<T> =\n IsNever<T> extends true\n ? true\n : HasNeverProperty<T> extends true\n ? true\n : false;\n\n// Error shapes\nexport type InputContractViolationError<\n TItems extends readonly unknown[],\n TActual,\n> = {\n message: \"Value does not satisfy all input contracts\";\n expected: Simplify<ContractsIntersectionInputs<TItems>>;\n received: TActual;\n};\n\nexport type OutputContractViolationError<\n TItems extends readonly unknown[],\n TActual,\n> = {\n message: \"Value does not satisfy all output contracts\";\n expected: Simplify<ContractsIntersectionOutputs<TItems>>;\n received: TActual;\n};\n\n// Enforcement helpers (Promise-aware)\nexport type EnsureInputSatisfiesContracts<\n TItems extends readonly unknown[],\n TValue,\n> = [ContractsUnionInputs<TItems>] extends [never]\n ? TValue\n : TValue extends Promise<infer U>\n ? Promise<\n U extends ContractsIntersectionInputs<TItems>\n ? U\n : InputContractViolationError<TItems, U>\n >\n : TValue extends ContractsIntersectionInputs<TItems>\n ? TValue\n : InputContractViolationError<TItems, TValue>;\n\nexport type EnsureOutputSatisfiesContracts<\n TItems extends readonly unknown[],\n TResponse,\n> = [ContractsUnionOutputs<TItems>] extends [never]\n ? TResponse\n : TResponse extends Promise<infer U>\n ? Promise<\n U extends ContractsIntersectionOutputs<TItems>\n ? U\n : OutputContractViolationError<TItems, U>\n >\n : TResponse extends ContractsIntersectionOutputs<TItems>\n ? TResponse\n : OutputContractViolationError<TItems, TResponse>;\n\n// Inferred-input API\n// - No input contracts -> void (so the arg can be omitted)\n// - Compatible contracts -> intersection\n// - Collision -> surfaces InputContractViolationError with helpful expected\nexport type InferInputOrViolationFromContracts<\n TItems extends readonly unknown[],\n> =\n HasInputContracts<TItems> extends false\n ? void\n : ContractsIntersectionInputs<TItems> extends infer I\n ? IsImpossibleIntersection<I> extends true\n ? InputContractViolationError<\n TItems,\n Simplify<I extends never ? never : I>\n >\n : Simplify<I>\n : never;\n\n// Optional-arg tuple helper for nicer ergonomics\nexport type InputArg<TItems extends readonly unknown[]> = [\n InferInputOrViolationFromContracts<TItems>,\n] extends [void]\n ? []\n : [InferInputOrViolationFromContracts<TItems>];\n\n// Optional: guard to surface collisions at the tags argument position\nexport type InputCollisionGuard<TItems extends readonly unknown[]> =\n IsImpossibleIntersection<ContractsIntersectionInputs<TItems>> extends true\n ? InputContractViolationError<\n TItems,\n Simplify<ContractsIntersectionInputs<TItems>>\n >\n : unknown;\n\n// Mirrored inferred-output helper\nexport type InferOutputOrViolationFromContracts<\n TItems extends readonly unknown[],\n> =\n HasOutputContracts<TItems> extends false\n ? unknown\n : ContractsIntersectionOutputs<TItems> extends infer O\n ? IsImpossibleIntersection<O> extends true\n ? OutputContractViolationError<\n TItems,\n Simplify<O extends never ? never : O>\n >\n : Simplify<O>\n : never;\n\n// Back-compat aliases with your original API\n/** @deprecated Use ExtractOutputTypeFromContracts instead */\nexport type ExtractTagsWithNonVoidReturnTypeFromTags<TTags extends TagType[]> =\n ExtractOutputTypeFromContracts<TTags>;\n\n/** @deprecated Use EnsureOutputSatisfiesContracts instead */\nexport type EnsureResponseSatisfiesContracts<\n TTags extends TagType[],\n TResponse,\n> = EnsureOutputSatisfiesContracts<TTags, TResponse>;\n","import {\n DependencyMapType,\n DependencyValuesType,\n ResourceDependencyValuesType,\n} from \"./utilities\";\nimport { IResource } from \"./resource\";\nimport { ITask } from \"./task\";\nimport { IHook } from \"./hook\";\nimport { ITaskMiddleware } from \"./taskMiddleware\";\nimport { IResourceMiddleware } from \"./resourceMiddleware\";\nimport { IEvent } from \"./event\";\nimport { IEventDefinition } from \"./event\";\nimport { TaskLocalInterceptor } from \"./utilities\";\n\nexport enum HookDependencyState {\n Pending = \"pending\",\n Computing = \"computing\",\n Ready = \"ready\",\n}\n\nexport type ResourceStoreElementType<\n C = any,\n V extends Promise<any> = any,\n D extends DependencyMapType = {},\n TContext = any,\n> = {\n resource: IResource<C, V, D, TContext>;\n computedDependencies?: ResourceDependencyValuesType<D>;\n config: C;\n value: V;\n context: TContext;\n isInitialized?: boolean;\n};\n\nexport type TaskStoreElementType<\n Input = any,\n Output extends Promise<any> = any,\n D extends DependencyMapType = any,\n> = {\n task: ITask<Input, Output, D>;\n computedDependencies: DependencyValuesType<D>;\n isInitialized: boolean;\n interceptors?: Array<TaskLocalInterceptor<any, any>>;\n};\n\nexport type HookStoreElementType<\n D extends DependencyMapType = any,\n TOn extends \"*\" | IEventDefinition = any,\n> = {\n hook: IHook<D, TOn>;\n computedDependencies: DependencyValuesType<D>;\n dependencyState: HookDependencyState;\n};\n\nexport type TaskMiddlewareStoreElementType<\n TDeps extends DependencyMapType = any,\n> = {\n middleware: ITaskMiddleware<any, any, any, TDeps>;\n computedDependencies: DependencyValuesType<TDeps>;\n isInitialized: boolean;\n};\n\nexport type ResourceMiddlewareStoreElementType<\n TDeps extends DependencyMapType = any,\n> = {\n middleware: IResourceMiddleware<any, any, any, TDeps>;\n computedDependencies: DependencyValuesType<TDeps>;\n isInitialized: boolean;\n};\n\nexport type EventStoreElementType = {\n event: IEvent<any>;\n};\n","/**\n * Type guard and utility functions for checking definition types.\n */\nimport {\n ITask,\n IResource,\n IResourceWithConfig,\n ITaskMiddleware,\n IResourceMiddleware,\n IEvent,\n symbolEvent,\n symbolTask,\n symbolPhantomTask,\n symbolHook,\n symbolResourceWithConfig,\n symbolResource,\n symbolTaskMiddleware,\n symbolResourceMiddleware,\n IHook,\n IOptionalDependency,\n symbolOptionalDependency,\n symbolTag,\n ITag,\n IPhantomTask,\n} from \"../defs\";\nimport { IErrorHelper } from \"../types/error\";\nimport { symbolAsyncContext, symbolError } from \"../types/symbols\";\nimport type { IAsyncContext } from \"../types/asyncContext\";\n\n/**\n * Type guard: checks if a definition is a Task.\n * @param definition - Any value to test.\n * @returns True when `definition` is a branded Task.\n */\nexport function isTask(definition: any): definition is ITask {\n return definition && definition[symbolTask];\n}\n\n/** Type guard: checks if a definition is a Phantom Task. */\nexport function isPhantomTask(definition: any): definition is IPhantomTask {\n return (\n definition &&\n definition[symbolTask] &&\n Boolean(definition[symbolPhantomTask])\n );\n}\n\n/**\n * Type guard: checks if a definition is a Resource.\n * @param definition - Any value to test.\n * @returns True when `definition` is a branded Resource.\n */\nexport function isResource(definition: any): definition is IResource {\n return definition && definition[symbolResource];\n}\n\n/**\n * Type guard: checks if a definition is a Resource that carries config via `.with()`.\n * @param definition - Any value to test.\n * @returns True when `definition` is a branded ResourceWithConfig.\n */\nexport function isResourceWithConfig(\n definition: any,\n): definition is IResourceWithConfig {\n return definition && definition[symbolResourceWithConfig];\n}\n\n/**\n * Type guard: checks if a definition is an Event.\n * @param definition - Any value to test.\n * @returns True when `definition` is a branded Event.\n */\nexport function isEvent(definition: any): definition is IEvent {\n return definition && definition[symbolEvent];\n}\n\n/** Type guard: checks if a definition is a Hook. */\nexport function isHook(definition: any): definition is IHook {\n return definition && definition[symbolHook];\n}\n\n/**\n * Type guard: checks if a definition is a Middleware.\n * @param definition - Any value to test.\n * @returns True when `definition` is a branded Middleware.\n */\nexport function isTaskMiddleware(\n definition: any,\n): definition is ITaskMiddleware {\n return definition && definition[symbolTaskMiddleware];\n}\n\nexport function isResourceMiddleware(\n definition: any,\n): definition is IResourceMiddleware {\n return definition && definition[symbolResourceMiddleware];\n}\n\n/**\n * Type guard: checks if a definition is a Tag.\n * @param definition - Any value to test.\n * @returns True when `definition` is a branded Tag.\n */\nexport function isTag(definition: any): definition is ITag {\n return definition && definition[symbolTag];\n}\n\n/** Type guard: checks if a definition is an Optional Dependency wrapper. */\nexport function isOptional(\n definition: any,\n): definition is IOptionalDependency<any> {\n return definition && definition[symbolOptionalDependency];\n}\n\n/** Type guard: checks if a definition is an Error helper. */\nexport function isError(definition: any): definition is IErrorHelper<any> {\n return Boolean(definition && definition[symbolError]);\n}\n\n/** Type guard: checks if a definition is an Async Context. */\nexport function isAsyncContext(\n definition: any,\n): definition is IAsyncContext<any> {\n return Boolean(definition && definition[symbolAsyncContext]);\n}\n","import type { ThrowsList } from \"../types/error\";\nimport { isError } from \"../definers/tools\";\n\ntype ThrowOwner = {\n kind: \"task\" | \"resource\";\n id: string;\n};\n\nfunction invalidThrowsEntryError(owner: ThrowOwner, item: unknown): Error {\n const got =\n item === null\n ? \"null\"\n : Array.isArray(item)\n ? \"array\"\n : typeof item === \"object\"\n ? \"object\"\n : typeof item;\n return new Error(\n `Invalid throws entry for ${owner.kind} ${owner.id}: expected error id string or Error helper, got ${got}`,\n );\n}\n\nfunction toErrorIdList(owner: ThrowOwner, list: ThrowsList): readonly string[] {\n const ids: string[] = [];\n const seen = new Set<string>();\n\n for (const item of list) {\n let id: string;\n if (typeof item === \"string\") {\n if (item.trim().length === 0) {\n throw invalidThrowsEntryError(owner, item);\n }\n id = item;\n } else if (isError(item)) {\n id = item.id;\n if (typeof id !== \"string\" || id.trim().length === 0) {\n throw invalidThrowsEntryError(owner, item);\n }\n } else {\n throw invalidThrowsEntryError(owner, item);\n }\n\n if (seen.has(id)) continue;\n seen.add(id);\n ids.push(id);\n }\n\n return ids;\n}\n\nexport function normalizeThrows(\n owner: ThrowOwner,\n throwsList: ThrowsList | undefined,\n): readonly string[] | undefined {\n if (throwsList === undefined) return undefined;\n return toErrorIdList(owner, throwsList);\n}\n","import type {\n ITask,\n ITaskDefinition,\n DependencyMapType,\n ITaskMeta,\n TagType,\n IOptionalDependency,\n TaskMiddlewareAttachmentType,\n IPhantomTask,\n} from \"../types/task\";\nimport {\n symbolTask,\n symbolFilePath,\n symbolOptionalDependency,\n symbolPhantomTask,\n} from \"../types/symbols\";\nimport { getCallerFile } from \"../tools/getCallerFile\";\nimport { normalizeThrows } from \"../tools/throws\";\n\n/**\n * Define a task.\n * Generates a strongly-typed task object with id, dependencies,\n * middleware, and metadata.\n *\n * @typeParam Input - Input type accepted by the task's `run` function.\n * @typeParam Output - Promise type returned by the `run` function.\n * @typeParam Deps - Dependency map type this task requires.\n * @typeParam TOn - Event type or \"*\" this task listens to.\n * @typeParam TMeta - Arbitrary metadata type carried by the task.\n * @param taskConfig - The task definition config.\n * @returns A branded task definition usable by the runner.\n */\nexport function defineTask<\n Input = undefined,\n Output extends Promise<any> = any,\n Deps extends DependencyMapType = any,\n TMeta extends ITaskMeta = any,\n TTags extends TagType[] = TagType[],\n TMiddleware extends TaskMiddlewareAttachmentType[] =\n TaskMiddlewareAttachmentType[],\n>(\n taskConfig: ITaskDefinition<Input, Output, Deps, TMeta, TTags, TMiddleware>,\n): ITask<Input, Output, Deps, TMeta, TTags, TMiddleware> {\n const filePath = getCallerFile();\n const id = taskConfig.id;\n return {\n [symbolTask]: true,\n [symbolFilePath]: filePath,\n id,\n dependencies: taskConfig.dependencies || ({} as Deps),\n middleware: taskConfig.middleware || ([] as unknown as TMiddleware),\n run: taskConfig.run,\n inputSchema: taskConfig.inputSchema,\n resultSchema: taskConfig.resultSchema,\n meta: taskConfig.meta || ({} as TMeta),\n tags: taskConfig.tags || ([] as unknown as TTags),\n throws: normalizeThrows({ kind: \"task\", id }, taskConfig.throws),\n // autorun,\n optional() {\n return {\n inner: this,\n [symbolOptionalDependency]: true,\n } as IOptionalDependency<\n ITask<Input, Output, Deps, TMeta, TTags, TMiddleware>\n >;\n },\n };\n}\n\ndefineTask.phantom = <Input = undefined, Output extends Promise<any> = any>(\n taskConfig: Omit<ITaskDefinition<Input, Output, any, any, any, any>, \"run\">,\n) => {\n const taskDef = defineTask({\n ...taskConfig,\n run: async (_input: any): Promise<any> => {\n return undefined;\n },\n });\n\n taskDef[symbolPhantomTask] = true;\n\n return taskDef as IPhantomTask<Input, Output, any, any, any, any>;\n};\n","import {\n DependencyMapType,\n IEventDefinition,\n ITaskMeta,\n IHook,\n IHookDefinition,\n symbolHook,\n symbolFilePath,\n} from \"../defs\";\nimport { getCallerFile } from \"../tools/getCallerFile\";\n\n/**\n * Define a hook (event listeners).\n * Same shape as task with mandatory `on` and without `middleware`.\n */\nexport function defineHook<\n D extends DependencyMapType = any,\n TOn extends \"*\" | IEventDefinition<any> | readonly IEventDefinition<any>[] =\n any,\n TMeta extends ITaskMeta = any,\n>(hookDef: IHookDefinition<D, TOn, TMeta>): IHook<D, TOn, TMeta> {\n const filePath = getCallerFile();\n return {\n [symbolHook]: true,\n [symbolFilePath]: filePath,\n id: hookDef.id,\n dependencies: hookDef.dependencies || ({} as D),\n on: hookDef.on,\n order: hookDef.order,\n run: hookDef.run,\n meta: hookDef.meta || ({} as TMeta),\n tags: hookDef.tags || [],\n } as IHook<D, TOn, TMeta>;\n}\n","import { error } from \"./definers/builders/error\";\nimport type { DefaultErrorType } from \"./types/error\";\nimport { detectEnvironment } from \"./platform\";\n\n// Duplicate registration\nexport const duplicateRegistrationError = error<\n { type: string; id: string } & DefaultErrorType\n>(\"runner.errors.duplicateRegistration\")\n .format(\n ({ type, id }) =>\n `${type} \"${id.toString()}\" already registered. You might have used the same 'id' in two different components or you may have registered the same element twice.`,\n )\n .build();\n\n// Dependency not found\nexport const dependencyNotFoundError = error<\n { key: string } & DefaultErrorType\n>(\"runner.errors.dependencyNotFound\")\n .format(\n ({ key }) =>\n `Dependency ${key.toString()} not found. Did you forget to register it through a resource?`,\n )\n .build();\n\n// Unknown item type\nexport const unknownItemTypeError = error<{ item: unknown } & DefaultErrorType>(\n \"runner.errors.unknownItemType\",\n)\n .format(\n ({ item }) =>\n `Unknown item type: ${String(\n item,\n )}. Please ensure you are not using different versions of '@bluelibs/runner'`,\n )\n .build();\n\n// Context error\nexport const contextError = error<{ details?: string } & DefaultErrorType>(\n \"runner.errors.context\",\n)\n .format(({ details }) => details ?? \"Context error\")\n .build();\n\n// Circular dependencies\nexport const circularDependenciesError = error<\n { cycles: string[] } & DefaultErrorType\n>(\"runner.errors.circularDependencies\")\n .format(({ cycles }) => {\n const cycleDetails = cycles.map((cycle) => ` • ${cycle}`).join(\"\\n\");\n const hasMiddleware = cycles.some((cycle) => cycle.includes(\"middleware\"));\n\n let guidance = \"\\n\\nTo resolve circular dependencies:\";\n guidance +=\n \"\\n • Consider refactoring to reduce coupling between components\";\n guidance += \"\\n • Extract shared dependencies into separate resources\";\n\n if (hasMiddleware) {\n guidance +=\n \"\\n • For middleware: you can filter out tasks/resources using everywhere(fn)\";\n guidance +=\n \"\\n • Consider using events for communication instead of direct dependencies\";\n }\n\n return `Circular dependencies detected:\\n${cycleDetails}${guidance}`;\n })\n .build();\n\n// Event not found\nexport const eventNotFoundError = error<{ id: string } & DefaultErrorType>(\n \"runner.errors.eventNotFound\",\n)\n .format(\n ({ id }) =>\n `Event \"${id.toString()}\" not found. Did you forget to register it?`,\n )\n .build();\n\n// Resource not found\nexport const resourceNotFoundError = error<{ id: string } & DefaultErrorType>(\n \"runner.errors.resourceNotFound\",\n)\n .format(\n ({ id }) =>\n `Resource \"${id.toString()}\" not found. Did you forget to register it or are you using the correct id?`,\n )\n .build();\n\n// Middleware not registered\nexport const middlewareNotRegisteredError = error<\n {\n type: \"task\" | \"resource\";\n source: string;\n middlewareId: string;\n } & DefaultErrorType\n>(\"runner.errors.middlewareNotRegistered\")\n .format(\n ({ type, source, middlewareId }) =>\n `Middleware inside ${type} \"${source}\" depends on \"${middlewareId}\" but it's not registered. Did you forget to register it?`,\n )\n .build();\n\n// Tag not found\nexport const tagNotFoundError = error<{ id: string } & DefaultErrorType>(\n \"runner.errors.tagNotFound\",\n)\n .format(\n ({ id }) =>\n `Tag \"${id}\" not registered. Did you forget to register it inside a resource?`,\n )\n .build();\n\n// Locked\nexport const lockedError = error<{ what: string } & DefaultErrorType>(\n \"runner.errors.locked\",\n)\n .format(\n ({ what }) => `Cannot modify the ${what.toString()} when it is locked.`,\n )\n .build();\n\n// Store already initialized\nexport const storeAlreadyInitializedError = error<DefaultErrorType>(\n \"runner.errors.storeAlreadyInitialized\",\n)\n .format(() => \"Store already initialized. Cannot reinitialize.\")\n .build();\n\n// Validation error\nexport const validationError = error<\n {\n subject: string;\n id: string;\n originalError: string | Error;\n } & DefaultErrorType\n>(\"runner.errors.validation\")\n .format(({ subject, id, originalError }) => {\n const errorMessage =\n originalError instanceof Error\n ? originalError.message\n : String(originalError);\n return `${subject} validation failed for ${id.toString()}: ${errorMessage}`;\n })\n .build();\n\n// Event cycle (runtime)\nexport const eventCycleError = error<\n { path: Array<{ id: string; source: string }> } & DefaultErrorType\n>(\"runner.errors.eventCycle\")\n .format(({ path }) => {\n const chain = path.map((p) => `${p.id}←${p.source}`).join(\" -> \");\n return `Event emission cycle detected:\\n ${chain}\\n\\nBreak the cycle by changing hook logic (avoid mutual emits) or gate with conditions/tags.`;\n })\n .build();\n\n// Event emission cycles (compile-time/dry-run)\nexport const eventEmissionCycleError = error<\n { cycles: string[] } & DefaultErrorType\n>(\"runner.errors.eventEmissionCycle\")\n .format(({ cycles }) => {\n const list = cycles.map((c) => ` • ${c}`).join(\"\\n\");\n return `Event emission cycles detected between hooks and events:\\n${list}\\n\\nThis was detected at compile time (dry-run). Break the cycle by avoiding mutual emits between hooks or scoping hooks using tags.`;\n })\n .build();\n\n// Platform unsupported function\nexport const platformUnsupportedFunctionError = error<\n { functionName: string } & DefaultErrorType\n>(\"runner.errors.platformUnsupportedFunction\")\n .format(\n ({ functionName }) =>\n `Platform function not supported in this environment: ${functionName}. Detected platform: ${detectEnvironment()}.`,\n )\n .build();\n\n// Cancellation error (maps to HTTP 499 in exposure)\nexport const cancellationError = error<{ reason?: string } & DefaultErrorType>(\n \"runner.errors.cancellation\",\n)\n .format(({ reason }) => reason || \"Operation cancelled\")\n .build();\n\n// Tunnel ownership conflict (exclusive owner per task)\nexport const tunnelOwnershipConflictError = error<\n {\n taskId: string;\n currentOwnerId: string;\n attemptedOwnerId: string;\n } & DefaultErrorType\n>(\"runner.errors.tunnelOwnershipConflict\")\n .format(\n ({ taskId, currentOwnerId, attemptedOwnerId }) =>\n `Task \"${taskId}\" is already tunneled by resource \"${currentOwnerId}\". Resource \"${attemptedOwnerId}\" cannot tunnel it again. Ensure each task is owned by a single tunnel client.`,\n )\n .build();\n\n// Phantom task executed without a matching tunnel route\nexport const phantomTaskNotRoutedError = error<\n { taskId: string } & DefaultErrorType\n>(\"runner.errors.phantomTaskNotRouted\")\n .format(\n ({ taskId }) =>\n `Phantom task \"${taskId}\" is not routed through any tunnel. Ensure a tunnel client selects this task id (or avoid calling the phantom task directly).`,\n )\n .build();\n\n// Task not registered in Store (internal invariant)\nexport const taskNotRegisteredError = error<\n { taskId: string } & DefaultErrorType\n>(\"runner.errors.taskNotRegistered\")\n .format(\n ({ taskId }) =>\n `Task \"${taskId}\" is not registered in the Store. This is an internal error—ensure the task is registered before execution.`,\n )\n .build();\n\n/** Builder types that require validation before build() */\nexport type BuilderType = \"hook\" | \"task-middleware\" | \"resource-middleware\";\n\n// Builder incomplete (missing required fields)\nexport const builderIncompleteError = error<\n {\n type: BuilderType;\n builderId: string;\n missingFields: string[];\n } & DefaultErrorType\n>(\"runner.errors.builderIncomplete\")\n .format(({ type, builderId, missingFields }) => {\n const typeLabel =\n type === \"hook\"\n ? \"Hook\"\n : type === \"task-middleware\"\n ? \"Task middleware\"\n : \"Resource middleware\";\n return `${typeLabel} \"${builderId}\" is incomplete. Missing required: ${missingFields.join(\", \")}. Call ${missingFields.map((f) => `.${f}()`).join(\" and \")} before .build().`;\n })\n .build();\n\nexport function isCancellationError(err: unknown): boolean {\n return cancellationError.is(err);\n}\n\n// Backward-compatible namespace export for external imports (index.ts already re-exports * as Errors from here)\nexport type { IErrorHelper } from \"./types/error\";\n","import {\n DefaultErrorType,\n IErrorDefinition,\n IErrorHelper,\n IErrorDefinitionFinal,\n} from \"../types/error\";\nimport {\n symbolError,\n symbolFilePath,\n symbolOptionalDependency,\n} from \"../types/symbols\";\nimport { getCallerFile } from \"../tools/getCallerFile\";\n\nclass RunnerError<\n TData extends DefaultErrorType = DefaultErrorType,\n> extends Error {\n public readonly data!: TData;\n constructor(\n public readonly id: string,\n message: string,\n data: TData,\n ) {\n super(message);\n this.data = data;\n this.name = id;\n }\n}\n\nexport class ErrorHelper<\n TData extends DefaultErrorType = DefaultErrorType,\n> implements IErrorHelper<TData> {\n [symbolError] = true as const;\n [symbolFilePath]: string;\n constructor(\n private readonly definition: IErrorDefinitionFinal<TData>,\n filePath: string,\n ) {\n this[symbolFilePath] = filePath;\n }\n get id(): string {\n return this.definition.id;\n }\n throw(data: TData): never {\n const parsed = this.definition.dataSchema\n ? this.definition.dataSchema.parse(data)\n : data;\n\n const message = this.definition.format(parsed);\n throw new RunnerError(this.definition.id, message, parsed);\n }\n is(error: unknown): error is RunnerError<TData> {\n return error instanceof RunnerError && error.name === this.definition.id;\n }\n optional() {\n return {\n inner: this as unknown as IErrorHelper<TData>,\n [symbolOptionalDependency]: true,\n } as const;\n }\n}\n\n/**\n * Create a new error that is going to be used\n * @param definition\n * @returns\n */\nexport function defineError<TData extends DefaultErrorType = DefaultErrorType>(\n definition: IErrorDefinition<TData>,\n filePath?: string,\n) {\n if (!definition.format) {\n definition.format = (data) => `${JSON.stringify(data)}`;\n }\n\n const resolvedFilePath = filePath ?? getCallerFile();\n\n return new ErrorHelper<TData>(\n definition as IErrorDefinitionFinal<TData>,\n resolvedFilePath,\n );\n}\n","import type { DefaultErrorType } from \"../../../defs\";\nimport type { BuilderState } from \"./types\";\n\n/**\n * Clones and patches the builder state immutably.\n */\nexport function clone<TData extends DefaultErrorType>(\n s: BuilderState<TData>,\n patch: Partial<BuilderState<TData>>,\n): BuilderState<TData> {\n return Object.freeze({\n ...s,\n ...patch,\n });\n}\n","import type { DefaultErrorType, IErrorMeta } from \"../../../defs\";\nimport { defineError } from \"../../defineError\";\nimport type { ErrorFluentBuilder } from \"./fluent-builder.interface\";\nimport type { BuilderState } from \"./types\";\nimport { clone } from \"./utils\";\n\n/**\n * Creates an ErrorFluentBuilder from the given state.\n */\nexport function makeErrorBuilder<TData extends DefaultErrorType>(\n state: BuilderState<TData>,\n): ErrorFluentBuilder<TData> {\n const builder: ErrorFluentBuilder<TData> = {\n id: state.id,\n\n serialize(fn) {\n const next = clone(state, { serialize: fn });\n return makeErrorBuilder(next);\n },\n\n parse(fn) {\n const next = clone(state, { parse: fn });\n return makeErrorBuilder(next);\n },\n\n dataSchema(schema) {\n const next = clone(state, { dataSchema: schema });\n return makeErrorBuilder(next);\n },\n\n format(fn: (data: TData) => string) {\n const next = clone(state, { format: fn });\n return makeErrorBuilder(next);\n },\n\n meta<TNewMeta extends IErrorMeta>(m: TNewMeta) {\n const next = clone(state, { meta: m });\n return makeErrorBuilder(next);\n },\n\n build() {\n return defineError<TData>(\n {\n id: state.id,\n serialize: state.serialize,\n parse: state.parse,\n dataSchema: state.dataSchema,\n format: state.format,\n meta: state.meta,\n },\n state.filePath,\n );\n },\n };\n\n return builder;\n}\n","import type { DefaultErrorType, IErrorMeta } from \"../../../defs\";\nimport { getCallerFile } from \"../../../tools/getCallerFile\";\nimport { makeErrorBuilder } from \"./fluent-builder\";\nimport type { ErrorFluentBuilder } from \"./fluent-builder.interface\";\nimport type { BuilderState } from \"./types\";\n\nexport * from \"./fluent-builder.interface\";\nexport * from \"./fluent-builder\";\nexport * from \"./types\";\nexport * from \"./utils\";\n\n/**\n * Entry point for creating an error builder.\n */\nexport function errorBuilder<TData extends DefaultErrorType = DefaultErrorType>(\n id: string,\n): ErrorFluentBuilder<TData> {\n const filePath = getCallerFile();\n const initial: BuilderState<TData> = Object.freeze({\n id,\n filePath,\n serialize: undefined,\n parse: undefined,\n dataSchema: undefined,\n meta: {} as IErrorMeta,\n });\n\n return makeErrorBuilder(initial);\n}\n\nexport const error = errorBuilder;\n","// Isolated loader for Node's AsyncLocalStorage to avoid leaking node: imports into non-node builds\nexport async function loadAsyncLocalStorageClass() {\n // Use require for Jest/Node compatibility - this file is Node-specific anyway\n\n const mod = require(\"node:async_hooks\") as typeof import(\"node:async_hooks\");\n return mod.AsyncLocalStorage;\n}\n","import type { IAsyncLocalStorage, IPlatformAdapter } from \"../types\";\n// no platformUnsupportedFunctionError used here; node has platform support\nimport { loadAsyncLocalStorageClass } from \"./node-als\";\n\nexport class NodePlatformAdapter implements IPlatformAdapter {\n readonly id = \"node\" as const;\n private alsClass: (new <T>() => IAsyncLocalStorage<T>) | undefined;\n\n async init() {\n this.alsClass = (await loadAsyncLocalStorageClass()) as new <\n T,\n >() => IAsyncLocalStorage<T>;\n }\n\n onUncaughtException(handler: (error: Error) => void) {\n const h = (error: Error) => handler(error);\n process.on(\"uncaughtException\", h);\n return () => process.off(\"uncaughtException\", h);\n }\n\n onUnhandledRejection(handler: (reason: unknown) => void) {\n const h = (reason: unknown) => handler(reason);\n process.on(\"unhandledRejection\", h);\n return () => process.off(\"unhandledRejection\", h);\n }\n\n onShutdownSignal(handler: () => void) {\n process.on(\"SIGINT\", handler);\n process.on(\"SIGTERM\", handler);\n return () => {\n process.off(\"SIGINT\", handler);\n process.off(\"SIGTERM\", handler);\n };\n }\n\n exit(code: number) {\n process.exit(code);\n }\n\n getEnv(key: string) {\n return process.env[key];\n }\n\n hasAsyncLocalStorage() {\n return true;\n }\n\n createAsyncLocalStorage<T>(): IAsyncLocalStorage<T> {\n let instance: IAsyncLocalStorage<T> | undefined;\n const ensure = (): IAsyncLocalStorage<T> => {\n if (!this.alsClass) {\n // Lazy-hydrate when init() wasn't awaited.\n let als: (new <U>() => IAsyncLocalStorage<U>) | undefined;\n const forceNoop =\n typeof process !== \"undefined\" &&\n !!process.env?.RUNNER_FORCE_NOOP_ALS;\n if (!forceNoop) {\n try {\n const mod = require(\"async_hooks\");\n als = mod?.AsyncLocalStorage;\n } catch (_) {\n als = undefined;\n }\n }\n\n this.alsClass =\n als ||\n (class NoopAsyncLocalStorage<U> implements IAsyncLocalStorage<U> {\n getStore(): U | undefined {\n return undefined;\n }\n run<V>(_store: U, callback: () => V): V {\n return callback();\n }\n } as new <U>() => IAsyncLocalStorage<U>);\n }\n return (instance ??= new this.alsClass!());\n };\n return {\n getStore: () => ensure().getStore(),\n run: (store: T, callback: () => any) => ensure().run(store, callback),\n };\n }\n\n setTimeout = globalThis.setTimeout;\n clearTimeout = globalThis.clearTimeout;\n}\n","import type {\n IAsyncLocalStorage,\n IPlatformAdapter,\n PlatformId,\n} from \"../types\";\nimport { platformUnsupportedFunctionError } from \"../../errors\";\n\n/**\n * Interface representing a browser-like event target with optional event methods.\n * These are optional because they may not exist in all environments (e.g., Node.js).\n */\ninterface BrowserEventTarget {\n addEventListener?(type: string, listener: EventListener): void;\n removeEventListener?(type: string, listener: EventListener): void;\n}\n\n/**\n * Interface representing a browser document with visibility state.\n */\ninterface BrowserDocument {\n visibilityState?: \"visible\" | \"hidden\" | \"prerender\";\n}\n\n/**\n * Interface for browser global scope with window, document, and env access.\n */\ninterface BrowserGlobalScope extends BrowserEventTarget {\n window?: BrowserEventTarget;\n document?: BrowserDocument;\n __ENV__?: Record<string, string>;\n env?: Record<string, string>;\n}\n\nexport class BrowserPlatformAdapter implements IPlatformAdapter {\n readonly id: PlatformId = \"browser\";\n async init() {}\n\n onUncaughtException(handler: (error: Error) => void) {\n const g = globalThis as unknown as BrowserGlobalScope;\n const target: BrowserEventTarget = g.window ?? g;\n const h: EventListener = (e) => {\n // Pass through the error property if it exists, otherwise the raw event\n // Runtime may receive non-Error values from browser events\n const errorEvent = e as ErrorEvent;\n handler((errorEvent?.error ?? e) as Error);\n };\n target.addEventListener?.(\"error\", h);\n return () => target.removeEventListener?.(\"error\", h);\n }\n\n onUnhandledRejection(handler: (reason: unknown) => void) {\n const g = globalThis as unknown as BrowserGlobalScope;\n const target: BrowserEventTarget = g.window ?? g;\n const wrap: EventListener = (e) =>\n handler((e as PromiseRejectionEvent)?.reason ?? e);\n target.addEventListener?.(\"unhandledrejection\", wrap);\n return () => target.removeEventListener?.(\"unhandledrejection\", wrap);\n }\n\n onShutdownSignal(handler: () => void) {\n const g = globalThis as unknown as BrowserGlobalScope;\n const win: BrowserEventTarget = g.window ?? g;\n const handlers: { before?: EventListener; visibility?: EventListener } = {};\n\n handlers.before = () => handler();\n win.addEventListener?.(\"beforeunload\", handlers.before);\n\n const doc = g.document;\n if (doc && typeof win.addEventListener === \"function\") {\n handlers.visibility = () => {\n if (doc.visibilityState === \"hidden\") handler();\n };\n win.addEventListener?.(\"visibilitychange\", handlers.visibility);\n }\n\n return () => {\n if (handlers.before)\n win.removeEventListener?.(\"beforeunload\", handlers.before);\n if (handlers.visibility)\n win.removeEventListener?.(\"visibilitychange\", handlers.visibility);\n };\n }\n\n exit() {\n platformUnsupportedFunctionError.throw({ functionName: \"exit\" });\n }\n\n getEnv(key: string) {\n const g = globalThis as unknown as BrowserGlobalScope;\n if (g.__ENV__ && typeof g.__ENV__ === \"object\") return g.__ENV__[key];\n if (\n typeof process !== \"undefined\" &&\n (process as unknown as { env: Record<string, string> }).env\n )\n return (process as unknown as { env: Record<string, string> }).env[key];\n if (g.env && typeof g.env === \"object\") return g.env[key];\n return undefined;\n }\n\n hasAsyncLocalStorage() {\n return false;\n }\n\n createAsyncLocalStorage<T>(): IAsyncLocalStorage<T> {\n // Return a wrapper that throws on use; creation itself shouldn't crash callers\n const throwUnsupported = (): never => {\n platformUnsupportedFunctionError.throw({\n functionName: \"createAsyncLocalStorage\",\n });\n // TypeScript knows this is unreachable but we need to satisfy the return type\n /* istanbul ignore next -- unreachable: throw() always throws */\n throw new Error(\"Unreachable\");\n };\n\n return {\n getStore: (): T | undefined => throwUnsupported(),\n run: <R>(_store: T, _callback: () => R): R => throwUnsupported(),\n };\n }\n\n setTimeout = globalThis.setTimeout;\n clearTimeout = globalThis.clearTimeout;\n}\n","import { BrowserPlatformAdapter } from \"./browser\";\n\n// Edge runtimes (workers) are closer to browser: no process, no window/document guarantees.\nexport class EdgePlatformAdapter extends BrowserPlatformAdapter {\n readonly id = \"edge\" as const;\n onShutdownSignal(_handler: () => void) {\n // No reliable shutdown signal in workers; return no-op disposer\n return () => {};\n }\n}\n","import type { IAsyncLocalStorage, IPlatformAdapter } from \"../types\";\nimport { platformUnsupportedFunctionError } from \"../../errors\";\n\n// A generic, non-detecting adapter that uses globalThis listeners and no Node APIs.\nexport class GenericUniversalPlatformAdapter implements IPlatformAdapter {\n readonly id = \"universal\" as const;\n async init() {}\n\n onUncaughtException(handler: (error: any) => void) {\n const tgt = globalThis as unknown as Record<string, any>;\n if (tgt.addEventListener) {\n const h = (e: any) => handler(e?.error ?? e);\n tgt.addEventListener(\"error\", h);\n return () => tgt.removeEventListener?.(\"error\", h);\n }\n return () => {};\n }\n\n onUnhandledRejection(handler: (reason: any) => void) {\n const tgt = globalThis as unknown as Record<string, any>;\n if (tgt.addEventListener) {\n const wrap = (e: any) => handler(e?.reason ?? e);\n tgt.addEventListener(\"unhandledrejection\", wrap);\n return () => tgt.removeEventListener?.(\"unhandledrejection\", wrap);\n }\n return () => {};\n }\n\n onShutdownSignal(handler: () => void) {\n const tgt = globalThis as unknown as Record<string, any>;\n if (tgt.addEventListener) {\n const handlers: { before?: any; visibility?: any } = {};\n handlers.before = (_e?: any) => handler();\n tgt.addEventListener(\"beforeunload\", handlers.before);\n\n const doc = (globalThis as unknown as Record<string, any>).document;\n if (doc) {\n handlers.visibility = () => {\n if (doc.visibilityState === \"hidden\") handler();\n };\n tgt.addEventListener?.(\"visibilitychange\", handlers.visibility);\n }\n\n return () => {\n tgt.removeEventListener?.(\"beforeunload\", handlers.before);\n if (handlers.visibility)\n tgt.removeEventListener?.(\"visibilitychange\", handlers.visibility);\n };\n }\n return () => {};\n }\n\n exit(): void {\n platformUnsupportedFunctionError.throw({ functionName: \"exit\" });\n }\n\n getEnv(key: string): string | undefined {\n const g = globalThis as unknown as Record<string, any>;\n if (g.__ENV__ && typeof g.__ENV__ === \"object\") return g.__ENV__[key];\n if (\n typeof process !== \"undefined\" &&\n (process as unknown as { env: Record<string, string> }).env\n )\n return (process as unknown as { env: Record<string, string> }).env[key];\n if (g.env && typeof g.env === \"object\") return g.env[key];\n return undefined;\n }\n\n hasAsyncLocalStorage(): boolean {\n return false;\n }\n\n createAsyncLocalStorage<T>(): IAsyncLocalStorage<T> {\n // Construct without throw; error only when used\n return {\n getStore: (): any => {\n platformUnsupportedFunctionError.throw({\n functionName: \"createAsyncLocalStorage\",\n });\n },\n run: (_store: any, _callback: () => any): any => {\n platformUnsupportedFunctionError.throw({\n functionName: \"createAsyncLocalStorage\",\n });\n },\n };\n }\n\n setTimeout = globalThis.setTimeout;\n clearTimeout = globalThis.clearTimeout;\n}\n","import type { IPlatformAdapter, PlatformId } from \"../types\";\nimport { BrowserPlatformAdapter } from \"./browser\";\nimport { EdgePlatformAdapter } from \"./edge\";\nimport { NodePlatformAdapter } from \"./node\";\nimport { GenericUniversalPlatformAdapter } from \"./universal-generic\";\n\nexport function detectEnvironment(): PlatformId {\n if (typeof window !== \"undefined\" && typeof document !== \"undefined\") {\n return \"browser\";\n }\n\n const global = globalThis as unknown as {\n process?: { versions?: { node?: string; bun?: string } };\n Deno?: unknown;\n Bun?: unknown;\n importScripts?: unknown;\n WorkerGlobalScope?: new () => any;\n document?: unknown;\n addEventListener?: unknown;\n };\n\n if (global.process?.versions?.node) {\n return \"node\";\n }\n\n if (typeof global.Deno !== \"undefined\") {\n return \"universal\";\n }\n\n if (typeof global.Bun !== \"undefined\" || global.process?.versions?.bun) {\n return \"universal\";\n }\n\n // Heuristics for WebWorker-like environments\n if (\n typeof global.importScripts === \"function\" &&\n typeof window === \"undefined\"\n ) {\n return \"edge\";\n }\n\n if (\n typeof global.WorkerGlobalScope !== \"undefined\" &&\n typeof self !== \"undefined\" &&\n self instanceof global.WorkerGlobalScope\n ) {\n return \"edge\";\n }\n\n return \"universal\";\n}\n\nexport class UniversalPlatformAdapter implements IPlatformAdapter {\n readonly id: PlatformId = \"universal\";\n private inner: IPlatformAdapter | null = null;\n\n async init() {\n this.ensureInner();\n await this.inner!.init();\n }\n\n private ensureInner() {\n if (this.inner) return;\n\n const kind = detectEnvironment();\n const global = globalThis as unknown as {\n document?: unknown;\n addEventListener?: unknown;\n };\n\n if (\n typeof global.document !== \"undefined\" ||\n typeof global.addEventListener === \"function\"\n ) {\n this.inner = new BrowserPlatformAdapter();\n } else {\n switch (kind) {\n case \"node\":\n this.inner = new NodePlatformAdapter();\n break;\n case \"edge\":\n this.inner = new EdgePlatformAdapter();\n break;\n default:\n // Covers \"browser\" (unreachable - would hit first if), \"universal\", and future cases\n this.inner = new GenericUniversalPlatformAdapter();\n }\n }\n }\n\n private get() {\n this.ensureInner();\n return this.inner!;\n }\n\n onUncaughtException(handler: (error: Error) => void) {\n return this.get().onUncaughtException(handler);\n }\n onUnhandledRejection(handler: (reason: unknown) => void) {\n return this.get().onUnhandledRejection(handler);\n }\n onShutdownSignal(handler: () => void) {\n return this.get().onShutdownSignal(handler);\n }\n exit(code: number) {\n return this.get().exit(code);\n }\n getEnv(key: string) {\n return this.get().getEnv(key);\n }\n hasAsyncLocalStorage() {\n return this.get().hasAsyncLocalStorage();\n }\n createAsyncLocalStorage<T>() {\n return this.get().createAsyncLocalStorage<T>();\n }\n setTimeout = globalThis.setTimeout;\n clearTimeout = globalThis.clearTimeout;\n}\n","import type { IPlatformAdapter } from \"./types\";\nimport { NodePlatformAdapter } from \"./adapters/node\";\nimport { BrowserPlatformAdapter } from \"./adapters/browser\";\nimport { EdgePlatformAdapter } from \"./adapters/edge\";\nimport { UniversalPlatformAdapter } from \"./adapters/universal\";\n\ndeclare const __TARGET__: string | undefined;\n\nexport function createPlatformAdapter(): IPlatformAdapter {\n if (typeof __TARGET__ !== \"undefined\") {\n switch (__TARGET__) {\n case \"node\":\n return new NodePlatformAdapter();\n case \"browser\":\n return new BrowserPlatformAdapter();\n case \"edge\":\n return new EdgePlatformAdapter();\n }\n }\n return new UniversalPlatformAdapter();\n}\n","import type {\n IPlatformAdapter,\n IAsyncLocalStorage,\n PlatformId,\n PlatformSetTimeout,\n PlatformClearTimeout,\n} from \"./types\";\nimport { createPlatformAdapter } from \"./factory\";\nimport { detectEnvironment } from \"./adapters/universal\";\nimport { NodePlatformAdapter } from \"./adapters/node\";\nimport { BrowserPlatformAdapter } from \"./adapters/browser\";\nimport { EdgePlatformAdapter } from \"./adapters/edge\";\nimport { UniversalPlatformAdapter } from \"./adapters/universal\";\nimport { GenericUniversalPlatformAdapter } from \"./adapters/universal-generic\";\n\ndeclare const __TARGET__: string | undefined;\n\n// Keep legacy names but delegate to new adapters\nlet platformInstance: IPlatformAdapter | null = null;\nlet detectedEnvironment: PlatformId | null = null;\n\nexport { detectEnvironment };\n\nexport function getPlatform(): IPlatformAdapter {\n if (!platformInstance) {\n platformInstance = createPlatformAdapter();\n detectedEnvironment = platformInstance.id;\n }\n return platformInstance;\n}\n\nexport function setPlatform(adapter: IPlatformAdapter): void {\n platformInstance = adapter;\n detectedEnvironment = adapter.id;\n}\n\nexport function resetPlatform(): void {\n platformInstance = null;\n detectedEnvironment = null;\n}\n\nexport function getDetectedEnvironment(): PlatformId {\n if (detectedEnvironment) return detectedEnvironment;\n // Prefer build-time target when available (node/browser/edge bundles)\n if (typeof __TARGET__ !== \"undefined\" && __TARGET__ !== \"universal\") {\n detectedEnvironment = __TARGET__ as PlatformId;\n return detectedEnvironment;\n }\n // For undefined or explicit universal target, use runtime detection\n detectedEnvironment = detectEnvironment();\n return detectedEnvironment;\n}\n\nexport function isNode(): boolean {\n if (typeof __TARGET__ !== \"undefined\" && __TARGET__ !== \"universal\") {\n return __TARGET__ === \"node\";\n }\n // Use fresh runtime detection to allow tests to mutate globals within a single run\n return detectEnvironment() === \"node\";\n}\n\nexport function isBrowser(): boolean {\n if (typeof __TARGET__ !== \"undefined\" && __TARGET__ !== \"universal\") {\n return __TARGET__ === \"browser\";\n }\n // Use fresh runtime detection to allow tests to mutate globals within a single run\n return detectEnvironment() === \"browser\";\n}\n\nexport function isUniversal(): boolean {\n if (typeof __TARGET__ !== \"undefined\" && __TARGET__ !== \"universal\") {\n return __TARGET__ === \"universal\";\n }\n // Use fresh runtime detection to allow tests to mutate globals within a single run\n return detectEnvironment() === \"universal\";\n}\n\nexport type {\n IPlatformAdapter,\n IAsyncLocalStorage,\n PlatformId,\n PlatformSetTimeout,\n PlatformClearTimeout,\n} from \"./types\";\n\n// Backwards-compat adapter preserving old constructor(env) signature used in tests\nexport class PlatformAdapter implements IPlatformAdapter {\n private inner: IPlatformAdapter;\n readonly env: PlatformId;\n readonly id: PlatformId;\n readonly setTimeout: PlatformSetTimeout;\n readonly clearTimeout: PlatformClearTimeout;\n\n constructor(env?: PlatformId) {\n const kind = env ?? detectEnvironment();\n this.env = kind as PlatformId;\n switch (kind) {\n case \"node\":\n this.inner = new NodePlatformAdapter();\n break;\n case \"browser\":\n this.inner = new BrowserPlatformAdapter();\n break;\n case \"edge\":\n this.inner = new EdgePlatformAdapter();\n break;\n case \"universal\":\n // Force generic, non-detecting behavior expected by tests\n this.inner = new GenericUniversalPlatformAdapter();\n break;\n default:\n this.inner = new UniversalPlatformAdapter();\n }\n this.id = this.inner.id;\n this.setTimeout = this.inner.setTimeout;\n this.clearTimeout = this.inner.clearTimeout;\n }\n\n async init() {\n return this.inner.init();\n }\n onUncaughtException(handler: (error: any) => void) {\n return this.inner.onUncaughtException(handler);\n }\n onUnhandledRejection(handler: (reason: any) => void) {\n return this.inner.onUnhandledRejection(handler);\n }\n onShutdownSignal(handler: () => void) {\n return this.inner.onShutdownSignal(handler);\n }\n exit(code: number) {\n return this.inner.exit(code);\n }\n getEnv(key: string) {\n return this.inner.getEnv(key);\n }\n hasAsyncLocalStorage() {\n return this.inner.hasAsyncLocalStorage();\n }\n createAsyncLocalStorage<T>(): IAsyncLocalStorage<T> {\n return this.inner.createAsyncLocalStorage<T>();\n }\n}\n","import type {\n DependencyMapType,\n IResource,\n RegisterableItems,\n ResourceForkOptions,\n} from \"../types/resource\";\nimport { isOptional, isResource, isResourceWithConfig } from \"./tools\";\n\ntype AnyResource = IResource<any, any, any, any, any, any, any>;\n\nexport type ResourceRegisterList =\n | Array<RegisterableItems>\n | ((config: any) => Array<RegisterableItems>)\n | undefined;\n\nfunction resolveReId(\n forkId: string,\n options: ResourceForkOptions | undefined,\n): (id: string) => string {\n const fallback = (id: string) => `${forkId}.${id}`;\n const reId = options?.reId ?? fallback;\n return (id: string) => {\n const next = reId(id);\n if (typeof next !== \"string\" || next.length === 0) {\n throw new Error(`fork(reId) must return a non-empty string for \"${id}\"`);\n }\n return next;\n };\n}\n\ntype DependenciesList<TConfig, TDeps extends DependencyMapType> =\n | TDeps\n | ((config: TConfig) => TDeps)\n | undefined;\n\nfunction remapResourceDependenciesInObject<TDeps extends DependencyMapType>(\n deps: TDeps,\n options: {\n getForkedResourceByBaseId: (id: string) => IResource | undefined;\n },\n): TDeps {\n const remapObject = (deps: TDeps): TDeps => {\n const out: Record<string, unknown> = { ...deps };\n for (const [key, value] of Object.entries(deps)) {\n if (isOptional(value)) {\n const inner = value.inner;\n if (isResource(inner)) {\n const forked = options.getForkedResourceByBaseId(inner.id);\n if (forked) {\n out[key] = { ...value, inner: forked };\n }\n }\n continue;\n }\n\n if (isResource(value)) {\n const forked = options.getForkedResourceByBaseId(value.id);\n if (forked) {\n out[key] = forked;\n }\n }\n }\n return out as TDeps;\n };\n\n return remapObject(deps);\n}\n\nfunction toResourceOnlyRegisterItems(\n items: Array<RegisterableItems>,\n): Array<\n | { kind: \"resource\"; resource: AnyResource }\n | { kind: \"withConfig\"; resource: AnyResource; config: unknown }\n> {\n const out: Array<\n | { kind: \"resource\"; resource: AnyResource }\n | { kind: \"withConfig\"; resource: AnyResource; config: unknown }\n > = [];\n for (const item of items) {\n if (isResourceWithConfig(item)) {\n out.push({\n kind: \"withConfig\",\n resource: item.resource,\n config: item.config,\n });\n continue;\n }\n if (isResource(item)) {\n out.push({ kind: \"resource\", resource: item });\n continue;\n }\n }\n return out;\n}\n\nfunction createDeepForkContext(\n forkId: string,\n options: ResourceForkOptions | undefined,\n) {\n const reId = resolveReId(forkId, options);\n const forkedResourceByBaseId = new Map<string, AnyResource>();\n\n const ensureForked = (base: AnyResource): AnyResource => {\n const cached = forkedResourceByBaseId.get(base.id);\n if (cached) return cached;\n\n // Create the fork without any register changes, then patch register+deps\n // using the shared deep-fork context (so sibling dependencies can be remapped).\n const forked = base.fork(reId(base.id), { register: \"drop\" });\n forkedResourceByBaseId.set(base.id, forked);\n\n const baseRegister = base.register;\n\n const ensureForkedForRegisterConfig = (config: any) => {\n const items =\n typeof baseRegister === \"function\"\n ? baseRegister(config)\n : baseRegister;\n for (const candidate of toResourceOnlyRegisterItems(items)) {\n ensureForked(candidate.resource);\n }\n return items;\n };\n\n const mapRegisterItems = (items: Array<RegisterableItems>) => {\n const resourceItems = toResourceOnlyRegisterItems(items);\n const out: Array<RegisterableItems> = [];\n for (const candidate of resourceItems) {\n if (candidate.kind === \"resource\") {\n out.push(ensureForked(candidate.resource));\n continue;\n }\n out.push(ensureForked(candidate.resource).with(candidate.config));\n }\n return out;\n };\n\n forked.register =\n typeof baseRegister === \"function\"\n ? (config: any) => {\n const items = ensureForkedForRegisterConfig(config);\n return mapRegisterItems(items);\n }\n : (() => {\n ensureForkedForRegisterConfig(undefined);\n return mapRegisterItems(baseRegister);\n })();\n\n const baseDependencies = base.dependencies;\n const remapDepsObject = (deps: DependencyMapType) =>\n remapResourceDependenciesInObject(deps, {\n getForkedResourceByBaseId: (id) => forkedResourceByBaseId.get(id),\n });\n\n if (!baseDependencies) {\n forked.dependencies = baseDependencies;\n } else {\n // Always expose dependencies as a function in deep mode so remapping is order-independent\n // (and so config-dependent register lists can influence what gets remapped).\n forked.dependencies = (config: any) => {\n ensureForkedForRegisterConfig(config);\n const deps =\n typeof baseDependencies === \"function\"\n ? baseDependencies(config)\n : baseDependencies;\n return remapDepsObject(deps);\n };\n }\n\n return forked;\n };\n\n const ensureForkedForRegisterItems = (items: Array<RegisterableItems>) => {\n for (const candidate of toResourceOnlyRegisterItems(items)) {\n ensureForked(candidate.resource);\n }\n };\n\n const mapRegisterItems = (items: Array<RegisterableItems>) => {\n ensureForkedForRegisterItems(items);\n const resourceItems = toResourceOnlyRegisterItems(items);\n const out: Array<RegisterableItems> = [];\n for (const candidate of resourceItems) {\n if (candidate.kind === \"resource\") {\n out.push(ensureForked(candidate.resource));\n continue;\n }\n out.push(ensureForked(candidate.resource).with(candidate.config));\n }\n return out;\n };\n\n const remapDependencies = <TConfig, TDeps extends DependencyMapType>(\n dependencies: DependenciesList<TConfig, TDeps>,\n ): DependenciesList<TConfig, TDeps> => {\n if (!dependencies) return dependencies;\n\n const remapObj = (deps: TDeps) =>\n remapResourceDependenciesInObject(deps, {\n getForkedResourceByBaseId: (id) => forkedResourceByBaseId.get(id),\n });\n\n if (typeof dependencies === \"function\") {\n return (config: TConfig) => remapObj(dependencies(config));\n }\n return remapObj(dependencies);\n };\n\n return {\n reId,\n ensureForkedForRegisterItems,\n mapRegisterItems,\n remapDependencies,\n getForkedResourceByBaseId: (id: string) => forkedResourceByBaseId.get(id),\n };\n}\n\nexport function resolveForkedRegisterAndDependencies<\n TConfig,\n TDeps extends DependencyMapType,\n>(params: {\n register: ResourceRegisterList;\n dependencies: DependenciesList<TConfig, TDeps>;\n forkId: string;\n options: ResourceForkOptions | undefined;\n}): {\n register: ResourceRegisterList;\n dependencies: DependenciesList<TConfig, TDeps>;\n} {\n const { register, dependencies, forkId, options } = params;\n\n const mode = options?.register ?? \"keep\";\n if (mode === \"drop\") {\n return { register: [], dependencies };\n }\n if (mode !== \"deep\") {\n return { register, dependencies };\n }\n if (!register) {\n return { register, dependencies };\n }\n\n const ctx = createDeepForkContext(forkId, options);\n\n if (typeof register === \"function\") {\n return {\n register: (config: TConfig) => {\n const baseItems = register(config);\n return ctx.mapRegisterItems(baseItems);\n },\n dependencies: dependencies\n ? (config: TConfig) => {\n const baseItems = register(config);\n ctx.ensureForkedForRegisterItems(baseItems);\n\n const baseDeps =\n typeof dependencies === \"function\"\n ? dependencies(config)\n : dependencies;\n return remapResourceDependenciesInObject(baseDeps, {\n getForkedResourceByBaseId: ctx.getForkedResourceByBaseId,\n }) as unknown as TDeps;\n }\n : dependencies,\n };\n }\n\n ctx.ensureForkedForRegisterItems(register);\n return {\n register: ctx.mapRegisterItems(register),\n dependencies: ctx.remapDependencies(dependencies),\n };\n}\n","import type {\n IResource,\n IResourceDefinition,\n DependencyMapType,\n IResourceMeta,\n TagType,\n IOptionalDependency,\n ResourceMiddlewareAttachmentType,\n IResourceWithConfig,\n ResourceForkOptions,\n} from \"../types/resource\";\nimport {\n symbolResource,\n symbolFilePath,\n symbolOptionalDependency,\n symbolResourceWithConfig,\n symbolResourceForkedFrom,\n} from \"../types/symbols\";\nimport { validationError } from \"../errors\";\nimport { getCallerFile } from \"../tools/getCallerFile\";\nimport { normalizeThrows } from \"../tools/throws\";\nimport { resolveForkedRegisterAndDependencies } from \"./resourceFork\";\n\nexport function defineResource<\n TConfig = void,\n TValue extends Promise<any> = Promise<any>,\n TDeps extends DependencyMapType = {},\n TPrivate = any,\n TMeta extends IResourceMeta = any,\n TTags extends TagType[] = TagType[],\n TMiddleware extends ResourceMiddlewareAttachmentType[] =\n ResourceMiddlewareAttachmentType[],\n>(\n constConfig: IResourceDefinition<\n TConfig,\n TValue,\n TDeps,\n TPrivate,\n any,\n any,\n TMeta,\n TTags,\n TMiddleware\n >,\n): IResource<TConfig, TValue, TDeps, TPrivate, TMeta, TTags, TMiddleware> {\n /**\n * Define a resource.\n * Produces a strongly-typed resource with id, registration hooks,\n * and optional config schema.\n *\n * - If `id` is omitted, an anonymous, file-based id is generated (resource or index flavored).\n * - Provides `.with(config)` for config-bound registration with optional runtime validation.\n *\n * @typeParam TConfig - Configuration type accepted by the resource.\n * @typeParam TValue - Promise type resolved by the resource `init`.\n * @typeParam TDeps - Dependency map type this resource requires.\n * @typeParam TPrivate - Private context type exposed to middleware during init.\n * @typeParam TMeta - Arbitrary metadata type carried by the resource.\n * @param constConfig - The resource definition config.\n * @returns A branded resource definition usable by the runner.\n */\n const filePath: string = constConfig[symbolFilePath] || getCallerFile();\n const id = constConfig.id;\n\n return {\n [symbolResource]: true,\n [symbolFilePath]: filePath,\n id,\n dependencies: constConfig.dependencies,\n dispose: constConfig.dispose,\n register: constConfig.register || [],\n overrides: constConfig.overrides || [],\n init: constConfig.init,\n context: constConfig.context,\n configSchema: constConfig.configSchema,\n resultSchema: constConfig.resultSchema,\n tags: constConfig.tags || ([] as unknown as TTags),\n throws: normalizeThrows({ kind: \"resource\", id }, constConfig.throws),\n with: function (config: TConfig) {\n // Validate config with schema if provided (fail fast)\n if (constConfig.configSchema) {\n try {\n config = constConfig.configSchema.parse(config);\n } catch (error) {\n validationError.throw({\n subject: \"Resource config\",\n id,\n originalError:\n error instanceof Error ? error : new Error(String(error)),\n });\n }\n }\n\n return {\n [symbolResourceWithConfig]: true,\n id: this.id,\n resource: this,\n config,\n } satisfies IResourceWithConfig<\n TConfig,\n TValue,\n TDeps,\n TPrivate,\n TMeta,\n TTags,\n TMiddleware\n >;\n },\n\n meta: (constConfig.meta || {}) as TMeta,\n middleware: constConfig.middleware || ([] as unknown as TMiddleware),\n optional() {\n return {\n inner: this,\n [symbolOptionalDependency]: true,\n } as IOptionalDependency<\n IResource<TConfig, TValue, TDeps, TPrivate, TMeta, TTags, TMiddleware>\n >;\n },\n fork(newId: string, options?: ResourceForkOptions) {\n const forkedParts = resolveForkedRegisterAndDependencies({\n register: constConfig.register,\n dependencies: constConfig.dependencies,\n forkId: newId,\n options,\n });\n const forked = defineResource({\n ...constConfig,\n id: newId,\n register: forkedParts.register,\n dependencies: forkedParts.dependencies,\n [symbolFilePath]: filePath,\n });\n forked[symbolResourceForkedFrom] = {\n fromId: id,\n forkedAtFilePath: getCallerFile(),\n };\n return forked;\n },\n };\n}\n","import {\n IEvent,\n IEventDefinition,\n symbolEvent,\n symbolFilePath,\n symbolOptionalDependency,\n IOptionalDependency,\n} from \"../defs\";\nimport { getCallerFile } from \"../tools/getCallerFile\";\n\nexport function defineEvent<TPayload = void>(\n config: IEventDefinition<TPayload>,\n): IEvent<TPayload> {\n const callerFilePath = getCallerFile();\n const eventConfig = config;\n return {\n ...eventConfig,\n id: eventConfig.id,\n [symbolFilePath]: callerFilePath,\n [symbolEvent]: true, // This is a workaround\n tags: eventConfig.tags || [],\n parallel: eventConfig.parallel,\n optional() {\n return {\n inner: this,\n [symbolOptionalDependency]: true,\n } as IOptionalDependency<IEvent<TPayload>>;\n },\n };\n}\n","export function mergeMiddlewareConfig<TConfig>(\n base: TConfig,\n next: TConfig,\n): TConfig {\n const baseIsPlainObject =\n !!base && typeof base === \"object\" && !Array.isArray(base);\n const nextIsPlainObject =\n !!next && typeof next === \"object\" && !Array.isArray(next);\n\n // Preserve identity for config objects when the base config is empty.\n // This enables patterns like \"share resources for the same config object\"\n // (eg: concurrency semaphores) without relying on callers to reuse the same\n // configured middleware instance.\n if (\n baseIsPlainObject &&\n nextIsPlainObject &&\n Object.keys(base).length === 0\n ) {\n return next;\n }\n\n if (baseIsPlainObject && nextIsPlainObject) {\n return {\n ...(base as unknown as Record<string, unknown>),\n ...(next as unknown as Record<string, unknown>),\n } as TConfig;\n }\n\n return next;\n}\n","import type {\n ITaskMiddleware,\n ITaskMiddlewareDefinition,\n DependencyMapType,\n ITaskMiddlewareConfigured,\n} from \"../types/taskMiddleware\";\nimport {\n symbolTaskMiddleware,\n symbolFilePath,\n symbolMiddlewareConfigured,\n} from \"../types/symbols\";\nimport { validationError } from \"../errors\";\nimport { getCallerFile } from \"../tools/getCallerFile\";\nimport { mergeMiddlewareConfig } from \"./middlewareConfig\";\n\nexport function defineTaskMiddleware<\n TConfig = any,\n TEnforceInputContract = void,\n TEnforceOutputContract = void,\n TDependencies extends DependencyMapType = any,\n>(\n middlewareDef: ITaskMiddlewareDefinition<\n TConfig,\n TEnforceInputContract,\n TEnforceOutputContract,\n TDependencies\n >,\n): ITaskMiddleware<\n TConfig,\n TEnforceInputContract,\n TEnforceOutputContract,\n TDependencies\n> {\n const filePath = getCallerFile();\n const base = {\n [symbolFilePath]: filePath,\n [symbolTaskMiddleware]: true,\n config: {} as TConfig,\n configSchema: middlewareDef.configSchema,\n ...middlewareDef,\n dependencies: middlewareDef.dependencies || ({} as TDependencies),\n } as ITaskMiddleware<\n TConfig,\n TEnforceInputContract,\n TEnforceOutputContract,\n TDependencies\n >;\n\n const wrap = (\n obj: ITaskMiddleware<\n TConfig,\n TEnforceInputContract,\n TEnforceOutputContract,\n TDependencies\n > & {\n [symbolMiddlewareConfigured]?: true;\n },\n ): ITaskMiddleware<\n TConfig,\n TEnforceInputContract,\n TEnforceOutputContract,\n TDependencies\n > => {\n return {\n ...obj,\n with: (config: TConfig) => {\n if (obj.configSchema) {\n try {\n config = obj.configSchema.parse(config);\n } catch (error) {\n validationError.throw({\n subject: \"Middleware config\",\n id: obj.id,\n originalError:\n error instanceof Error ? error : new Error(String(error)),\n });\n }\n }\n return wrap({\n ...obj,\n [symbolMiddlewareConfigured]: true,\n config: mergeMiddlewareConfig(obj.config as TConfig, config),\n } satisfies ITaskMiddlewareConfigured<\n TConfig,\n TEnforceInputContract,\n TEnforceOutputContract,\n TDependencies\n >);\n },\n } as ITaskMiddleware<\n TConfig,\n TEnforceInputContract,\n TEnforceOutputContract,\n TDependencies\n >;\n };\n\n return wrap(base);\n}\n","import {\n IResourceMiddleware,\n IResourceMiddlewareDefinition,\n DependencyMapType,\n symbolFilePath,\n symbolResourceMiddleware,\n symbolMiddlewareConfigured,\n IResourceMiddlewareConfigured,\n} from \"../defs\";\nimport { validationError } from \"../errors\";\nimport { getCallerFile } from \"../tools/getCallerFile\";\nimport { mergeMiddlewareConfig } from \"./middlewareConfig\";\n\nexport function defineResourceMiddleware<\n TConfig = any,\n TEnforceInputContract = void,\n TEnforceOutputContract = void,\n TDependencies extends DependencyMapType = any,\n>(\n middlewareDef: IResourceMiddlewareDefinition<\n TConfig,\n TEnforceInputContract,\n TEnforceOutputContract,\n TDependencies\n >,\n): IResourceMiddleware<\n TConfig,\n TEnforceInputContract,\n TEnforceOutputContract,\n TDependencies\n> {\n const filePath = getCallerFile();\n const base = {\n [symbolFilePath]: filePath,\n [symbolResourceMiddleware]: true,\n config: {} as TConfig,\n configSchema: middlewareDef.configSchema,\n ...middlewareDef,\n dependencies: middlewareDef.dependencies || ({} as TDependencies),\n } as IResourceMiddleware<\n TConfig,\n TEnforceInputContract,\n TEnforceOutputContract,\n TDependencies\n >;\n\n const wrap = (\n obj: IResourceMiddleware<\n TConfig,\n TEnforceInputContract,\n TEnforceOutputContract,\n TDependencies\n > & {\n [symbolMiddlewareConfigured]?: true;\n },\n ): IResourceMiddleware<\n TConfig,\n TEnforceInputContract,\n TEnforceOutputContract,\n TDependencies\n > => {\n return {\n ...obj,\n with: (config: TConfig) => {\n if (obj.configSchema) {\n try {\n config = obj.configSchema.parse(config);\n } catch (error) {\n validationError.throw({\n subject: \"Middleware config\",\n id: obj.id,\n originalError: error as Error,\n });\n }\n }\n return wrap({\n ...obj,\n [symbolMiddlewareConfigured]: true,\n config: mergeMiddlewareConfig(obj.config as TConfig, config),\n } satisfies IResourceMiddlewareConfigured<\n TConfig,\n TEnforceInputContract,\n TEnforceOutputContract,\n TDependencies\n >);\n },\n } as IResourceMiddleware<\n TConfig,\n TEnforceInputContract,\n TEnforceOutputContract,\n TDependencies\n >;\n };\n\n return wrap(base);\n}\n","import {\n ITask,\n IResource,\n ITaskMiddleware,\n IResourceMiddleware,\n IHook,\n} from \"../defs\";\n\n/**\n * Override helper that preserves the original `id` and returns the same type.\n * You can override any property except `id`. The override is shallow-merged over the base.\n *\n * @param base - The base definition to override.\n * @param patch - Properties to override (except `id`).\n * @returns A definition of the same kind with overrides applied.\n */\ntype OverridePatch<TBase> = Readonly<\n TBase extends IHook<any, any, any>\n ? Omit<Partial<TBase>, \"id\" | \"on\">\n : Omit<Partial<TBase>, \"id\">\n>;\n\nexport function defineOverride<\n TBase extends\n | ITask<any, any, any, any, any, any>\n | IResource<any, any, any, any, any, any, any>\n | ITaskMiddleware<any, any, any, any>\n | IResourceMiddleware<any, any, any, any>\n | IHook<any, any, any>,\n>(base: TBase, patch: OverridePatch<TBase>): TBase {\n const overridden = {\n ...base,\n ...patch,\n id: base.id,\n } as TBase;\n\n // Hooks should preserve the event binding identity as well.\n if (\"on\" in base && base.on !== undefined) {\n (overridden as unknown as IHook<any, any, any>).on = (\n base as IHook<any, any, any>\n ).on;\n }\n\n return overridden;\n}\n","import {\n ITag,\n ITagDefinition,\n ITaggable,\n TagType,\n ITagConfigured,\n symbolTag,\n symbolFilePath,\n symbolTagConfigured,\n} from \"../defs\";\nimport { validationError } from \"../errors\";\nimport { getCallerFile } from \"../tools/getCallerFile\";\n\n/**\n * Create a tag definition.\n * - `.with(config)` to create configured instances\n * - `.extract(tags)` to extract this tag from a list of tags or a taggable's meta\n *\n * @typeParam TConfig - Configuration type carried by configured tags.\n * @typeParam TEnforceContract - Optional helper type to enforce a contract when tags are used.\n * @param definition - The tag definition (id).\n * @returns A tag object with helpers to configure and extract.\n */\nexport function defineTag<\n TConfig = void,\n TEnforceInputContract = void,\n TEnforceOutputContract = void,\n>(\n definition: ITagDefinition<\n TConfig,\n TEnforceInputContract,\n TEnforceOutputContract\n >,\n): ITag<TConfig, TEnforceInputContract, TEnforceOutputContract> {\n const id = definition.id;\n const filePath = getCallerFile();\n const foundation = {\n id,\n meta: definition.meta,\n config: definition.config,\n configSchema: definition.configSchema,\n } as ITag<TConfig, TEnforceInputContract, TEnforceOutputContract>;\n\n return {\n ...foundation,\n [symbolTag]: true,\n [symbolFilePath]: filePath,\n /**\n * Specify custom config for this tag which extends the default one if exists\n * @param tagConfig\n * @returns\n */\n with(tagConfig: TConfig) {\n if (definition.configSchema) {\n try {\n tagConfig = definition.configSchema.parse(tagConfig);\n } catch (error) {\n validationError.throw({\n subject: \"Tag config\",\n id: this.id,\n originalError: error as Error,\n });\n }\n }\n let config: TConfig;\n if (typeof tagConfig === \"object\") {\n if (typeof foundation.config === \"object\") {\n config = {\n ...foundation.config,\n ...tagConfig,\n };\n } else {\n config = tagConfig;\n }\n } else {\n config = tagConfig;\n }\n return {\n ...foundation,\n [symbolTagConfigured]: true,\n config,\n } as ITagConfigured<\n TConfig,\n TEnforceInputContract,\n TEnforceOutputContract\n >;\n },\n /**\n * Checks if the tag exists in a taggable or a list of tags.\n * @param target\n * @returns\n */\n exists(target: ITaggable | TagType[]): boolean {\n let currentTags: TagType[] = [];\n if (Array.isArray(target)) {\n currentTags = target;\n } else {\n currentTags = target.tags;\n }\n\n for (const candidate of currentTags) {\n if (candidate.id === id) {\n return true;\n }\n }\n\n return false;\n },\n /**\n * Function which serves 2 purposes, verifying if the task exists, and retrieving its config\n * @param target\n * @returns\n */\n extract(target: ITaggable | TagType[]): TConfig | undefined {\n let currentTags: TagType[] = [];\n if (Array.isArray(target)) {\n currentTags = target;\n } else {\n currentTags = target.tags || [];\n }\n\n for (const candidate of currentTags) {\n if (candidate.id === id) {\n return candidate.config as TConfig;\n }\n }\n\n return;\n },\n } satisfies ITag<TConfig, TEnforceInputContract, TEnforceOutputContract>;\n}\n","import type { IAsyncContext } from \"../../definers/defineAsyncContext\";\nimport { defineTaskMiddleware } from \"../../define\";\n\nexport interface RequireContextMiddlewareConfig {\n context: IAsyncContext<any>;\n}\n\nexport const requireContextTaskMiddleware = defineTaskMiddleware({\n id: \"globals.middleware.requireContext\",\n async run({ task, next }, _deps, config: RequireContextMiddlewareConfig) {\n if (!config.context) {\n throw new Error(\n \"Context not available. Did you forget to pass 'context' to the middleware?\",\n );\n }\n\n // This will throw if the context is not available\n const _ctx = config.context.use();\n\n return next(task?.input);\n },\n});\n","/**\n * Type definitions for the Serializer class\n */\n\n/**\n * Definition for a custom type that can be serialized/deserialized\n */\nexport interface TypeDefinition<TInstance = unknown, TSerialized = unknown> {\n /** Unique identifier for the type */\n id: string;\n /** Predicate function to check if an object matches this type */\n is: (obj: unknown) => obj is TInstance;\n /** Function to serialize the object */\n serialize: (obj: TInstance) => TSerialized;\n /** Function to deserialize the data back to the original object */\n deserialize: (data: TSerialized) => TInstance;\n /** Optional factory used to create a placeholder during deserialization */\n create?: () => TInstance;\n /** Serialization strategy: 'value' (inline, no identity) or 'ref' (graph node, identity preserved). Default: 'ref' */\n strategy?: \"value\" | \"ref\";\n}\n\n/** Reference to another object in the serialization */\nexport interface ObjectReference {\n /** Reference to object ID */\n __ref: string;\n}\n\n/**\n * Discriminated union describing the serialized graph payload.\n * Each node captures either an array, plain object, or typed payload.\n */\nexport type SerializedNode =\n | { kind: \"array\"; value: SerializedValue[] }\n | { kind: \"object\"; value: Record<string, SerializedValue> }\n | { kind: \"type\"; type: string; value: SerializedValue };\n\n/**\n * Serialization context for tracking object references\n */\nexport interface SerializationContext {\n /** Map of objects to their IDs */\n objectIds: WeakMap<object, string>;\n /** Counter for generating unique IDs */\n idCounter: number;\n /** Number of graph nodes recorded */\n nodeCount: number;\n /** Nodes collected during serialization (id -> serialized node) */\n nodes: Record<string, SerializedNode>;\n}\n\n/**\n * Deserialization context used when materialising a graph payload.\n */\nexport interface DeserializationContext {\n nodes: Record<string, SerializedNode>;\n resolved: Map<string, unknown>;\n resolving: Set<string>;\n /**\n * Tracks reference ids that were requested while still being resolved.\n * Used to detect circular references that rely on placeholders.\n */\n resolvingRefs: Set<string>;\n}\n\n/**\n * Union type for serialized values\n */\nexport type JsonPrimitive = string | number | boolean | null;\nexport type JsonValue =\n | JsonPrimitive\n | JsonValue[]\n | { [key: string]: JsonValue };\n\nexport interface SerializedTypeRecord {\n __type: string;\n value: SerializedValue;\n}\nexport type SerializedValue =\n | JsonPrimitive\n | ObjectReference\n | SerializedTypeRecord\n | SerializedValue[]\n | { [key: string]: SerializedValue };\n\n/**\n * Envelope saved to disk/wire when serialising a graph payload.\n */\nexport interface SerializedGraph {\n __graph: true;\n version: number;\n root: SerializedValue;\n nodes: Record<string, SerializedNode>;\n}\n\nexport enum SymbolPolicy {\n AllowAll = \"AllowAll\",\n WellKnownOnly = \"WellKnownOnly\",\n Disabled = \"Disabled\",\n}\n\nexport enum SymbolPolicyErrorMessage {\n GlobalSymbolsNotAllowed = \"Global symbols are not allowed\",\n SymbolsNotAllowed = \"Symbols are not allowed\",\n UnsupportedSymbolPolicy = \"Unsupported symbol policy\",\n}\n\n/**\n * Main serializer options\n */\nexport interface SerializerOptions {\n /** Whether to pretty-print JSON (for debugging) */\n pretty?: boolean;\n /** Maximum recursion depth allowed during serialize/deserialize */\n maxDepth?: number;\n /** Restrict deserialization to this list of type IDs */\n allowedTypes?: readonly string[];\n /** Controls which Symbol payloads may be deserialized */\n symbolPolicy?: SymbolPolicy;\n /** Maximum accepted RegExp pattern length during deserialization */\n maxRegExpPatternLength?: number;\n /** Allow RegExp patterns that fail the safety heuristic */\n allowUnsafeRegExp?: boolean;\n}\n\n/**\n * Minimal serializer contract used across transports and persistence.\n * Implementations must be able to round-trip JSON-compatible payloads and\n * should support custom value types via `addType`.\n */\nexport interface SerializerLike {\n stringify(value: unknown): string;\n parse<T = unknown>(text: string): T;\n addType?<TJson = unknown, TInstance = unknown>(\n name: string,\n factory: (json: TJson) => TInstance,\n ): void;\n}\n","import type { TypeDefinition } from \"./types\";\n\nconst INVALID_PAYLOAD_MESSAGE_PREFIX = \"Invalid\";\n\ntype TypedArrayTypeId =\n | \"Int8Array\"\n | \"Uint8Array\"\n | \"Uint8ClampedArray\"\n | \"Int16Array\"\n | \"Uint16Array\"\n | \"Int32Array\"\n | \"Uint32Array\"\n | \"Float32Array\"\n | \"Float64Array\"\n | \"BigInt64Array\"\n | \"BigUint64Array\";\n\nconst typedArrayTypeIds: TypedArrayTypeId[] = [\n \"Int8Array\",\n \"Uint8Array\",\n \"Uint8ClampedArray\",\n \"Int16Array\",\n \"Uint16Array\",\n \"Int32Array\",\n \"Uint32Array\",\n \"Float32Array\",\n \"Float64Array\",\n \"BigInt64Array\",\n \"BigUint64Array\",\n];\n\ninterface RuntimeTypedArrayConstructor {\n readonly BYTES_PER_ELEMENT: number;\n new (buffer: ArrayBufferLike): ArrayBufferView;\n}\n\ninterface RuntimeBufferConstructor {\n from(data: readonly number[]): Uint8Array;\n isBuffer(value: unknown): boolean;\n}\n\nconst getTypedArrayConstructor = (\n typeId: TypedArrayTypeId,\n): RuntimeTypedArrayConstructor | null => {\n const value = (globalThis as Record<string, unknown>)[typeId];\n if (typeof value !== \"function\") {\n return null;\n }\n return value as unknown as RuntimeTypedArrayConstructor;\n};\n\nconst getRuntimeBufferConstructor = (): RuntimeBufferConstructor | null => {\n const value = (globalThis as Record<string, unknown>).Buffer;\n if (typeof value !== \"function\") {\n return null;\n }\n\n const valueRecord = value as unknown as Record<string, unknown>;\n if (\n typeof valueRecord.from !== \"function\" ||\n typeof valueRecord.isBuffer !== \"function\"\n ) {\n return null;\n }\n\n return value as unknown as RuntimeBufferConstructor;\n};\n\nconst isNodeBuffer = (value: unknown): boolean => {\n const runtimeBufferConstructor = getRuntimeBufferConstructor();\n if (!runtimeBufferConstructor) {\n return false;\n }\n return runtimeBufferConstructor.isBuffer(value);\n};\n\nconst assertBytePayload = (\n payload: unknown,\n typeId: string,\n): readonly number[] => {\n if (!Array.isArray(payload)) {\n throw new Error(`${INVALID_PAYLOAD_MESSAGE_PREFIX} ${typeId} payload`);\n }\n\n const bytes: number[] = new Array(payload.length);\n for (let index = 0; index < payload.length; index += 1) {\n const byteValue = payload[index];\n if (\n typeof byteValue !== \"number\" ||\n !Number.isInteger(byteValue) ||\n byteValue < 0 ||\n byteValue > 255\n ) {\n throw new Error(`${INVALID_PAYLOAD_MESSAGE_PREFIX} ${typeId} payload`);\n }\n bytes[index] = byteValue;\n }\n return bytes;\n};\n\nconst toBytePayload = (value: ArrayBufferView): readonly number[] =>\n Array.from(new Uint8Array(value.buffer, value.byteOffset, value.byteLength));\n\nconst bytesToArrayBuffer = (payload: unknown, typeId: string): ArrayBuffer => {\n const bytes = assertBytePayload(payload, typeId);\n return Uint8Array.from(bytes).buffer;\n};\n\nconst deserializeTypedArray = (\n typeId: TypedArrayTypeId,\n payload: unknown,\n): ArrayBufferView => {\n const typedArrayConstructor = getTypedArrayConstructor(typeId);\n if (!typedArrayConstructor) {\n throw new Error(`${typeId} is not available in this runtime`);\n }\n\n const bytes = assertBytePayload(payload, typeId);\n const bytesPerElement = typedArrayConstructor.BYTES_PER_ELEMENT;\n if (bytes.length % bytesPerElement !== 0) {\n throw new Error(`${INVALID_PAYLOAD_MESSAGE_PREFIX} ${typeId} payload`);\n }\n\n const arrayBuffer = Uint8Array.from(bytes).buffer;\n return new typedArrayConstructor(arrayBuffer);\n};\n\nconst createTypedArrayType = (\n typeId: TypedArrayTypeId,\n): TypeDefinition<ArrayBufferView, readonly number[]> => ({\n id: typeId,\n is: (value: unknown): value is ArrayBufferView => {\n const typedArrayConstructor = getTypedArrayConstructor(typeId);\n if (!typedArrayConstructor) {\n return false;\n }\n if (!(value instanceof typedArrayConstructor)) {\n return false;\n }\n if (typeId === \"Uint8Array\" && isNodeBuffer(value)) {\n return false;\n }\n return true;\n },\n serialize: (value: ArrayBufferView): readonly number[] =>\n toBytePayload(value),\n deserialize: (payload: readonly number[]) =>\n deserializeTypedArray(typeId, payload),\n strategy: \"value\",\n});\n\nexport const ArrayBufferType: TypeDefinition<ArrayBuffer, readonly number[]> = {\n id: \"ArrayBuffer\",\n is: (value: unknown): value is ArrayBuffer => value instanceof ArrayBuffer,\n serialize: (value: ArrayBuffer): readonly number[] =>\n Array.from(new Uint8Array(value)),\n deserialize: (payload: readonly number[]): ArrayBuffer =>\n bytesToArrayBuffer(payload, \"ArrayBuffer\"),\n strategy: \"value\",\n};\n\nexport const DataViewType: TypeDefinition<DataView, readonly number[]> = {\n id: \"DataView\",\n is: (value: unknown): value is DataView => value instanceof DataView,\n serialize: (value: DataView): readonly number[] => toBytePayload(value),\n deserialize: (payload: readonly number[]): DataView =>\n new DataView(bytesToArrayBuffer(payload, \"DataView\")),\n strategy: \"value\",\n};\n\nexport const BufferType: TypeDefinition<Uint8Array, readonly number[]> = {\n id: \"Buffer\",\n is: (value: unknown): value is Uint8Array => isNodeBuffer(value),\n serialize: (value: Uint8Array): readonly number[] => toBytePayload(value),\n deserialize: (payload: readonly number[]): Uint8Array => {\n const bytes = assertBytePayload(payload, \"Buffer\");\n const runtimeBufferConstructor = getRuntimeBufferConstructor();\n if (runtimeBufferConstructor) {\n return runtimeBufferConstructor.from(bytes);\n }\n return Uint8Array.from(bytes);\n },\n strategy: \"value\",\n};\n\nconst typedArrayTypes = typedArrayTypeIds.map(\n (typeId) => createTypedArrayType(typeId) as TypeDefinition<unknown, unknown>,\n);\n\nexport const binaryBuiltInTypes: Array<TypeDefinition<unknown, unknown>> = [\n ArrayBufferType as TypeDefinition<unknown, unknown>,\n DataViewType as TypeDefinition<unknown, unknown>,\n BufferType as TypeDefinition<unknown, unknown>,\n ...typedArrayTypes,\n];\n","import type { TypeDefinition } from \"./types\";\n\nconst hasOwn = Object.prototype.hasOwnProperty;\nconst errorReservedPropertyNames = new Set([\n \"name\",\n \"message\",\n \"stack\",\n \"cause\",\n]);\n\ninterface RuntimeUrlConstructor {\n new (url: string, base?: string | URL): URL;\n}\n\ninterface RuntimeUrlSearchParamsConstructor {\n new (\n init?:\n | string\n | readonly (readonly [string, string])[]\n | Record<string, string>\n | URLSearchParams,\n ): URLSearchParams;\n}\n\ninterface ErrorWithCause extends Error {\n cause?: unknown;\n}\n\ninterface SerializedErrorPayload {\n name: string;\n message: string;\n stack?: string;\n cause?: unknown;\n customFields: Record<string, unknown>;\n}\n\ninterface ParsedErrorPayload {\n name: string;\n message: string;\n stack?: string;\n hasCause: boolean;\n cause: unknown;\n customFields: Record<string, unknown>;\n}\n\nconst isRecord = (value: unknown): value is Record<string, unknown> =>\n typeof value === \"object\" && value !== null && !Array.isArray(value);\n\nconst isUnsafePropertyName = (propertyName: string): boolean =>\n propertyName === \"__proto__\" ||\n propertyName === \"constructor\" ||\n propertyName === \"prototype\";\n\nconst collectErrorCustomFields = (error: Error): Record<string, unknown> => {\n const customFields: Record<string, unknown> = {};\n for (const propertyName of Object.getOwnPropertyNames(error)) {\n if (errorReservedPropertyNames.has(propertyName)) {\n continue;\n }\n if (isUnsafePropertyName(propertyName)) {\n continue;\n }\n\n const descriptor = Object.getOwnPropertyDescriptor(error, propertyName);\n if (!descriptor || !(\"value\" in descriptor)) {\n continue;\n }\n\n customFields[propertyName] = descriptor.value;\n }\n return customFields;\n};\n\nconst assertSerializedErrorPayload = (value: unknown): ParsedErrorPayload => {\n if (!isRecord(value)) {\n throw new Error(\"Invalid Error payload\");\n }\n\n const { name, message, stack, customFields } = value;\n if (typeof name !== \"string\" || typeof message !== \"string\") {\n throw new Error(\"Invalid Error payload\");\n }\n if (stack !== undefined && typeof stack !== \"string\") {\n throw new Error(\"Invalid Error payload\");\n }\n if (customFields !== undefined && !isRecord(customFields)) {\n throw new Error(\"Invalid Error payload\");\n }\n\n const normalizedCustomFields: Record<string, unknown> = {};\n const customFieldEntries = Object.entries(customFields ?? {});\n for (const [propertyName, propertyValue] of customFieldEntries) {\n if (isUnsafePropertyName(propertyName)) {\n continue;\n }\n normalizedCustomFields[propertyName] = propertyValue;\n }\n\n return {\n name,\n message,\n stack,\n hasCause: hasOwn.call(value, \"cause\"),\n cause: value.cause,\n customFields: normalizedCustomFields,\n };\n};\n\nconst getUrlConstructor = (): RuntimeUrlConstructor | null => {\n const value = (globalThis as Record<string, unknown>).URL;\n if (typeof value !== \"function\") {\n return null;\n }\n return value as unknown as RuntimeUrlConstructor;\n};\n\nconst getUrlSearchParamsConstructor =\n (): RuntimeUrlSearchParamsConstructor | null => {\n const value = (globalThis as Record<string, unknown>).URLSearchParams;\n if (typeof value !== \"function\") {\n return null;\n }\n return value as unknown as RuntimeUrlSearchParamsConstructor;\n };\n\nexport const ErrorType: TypeDefinition<Error, SerializedErrorPayload> = {\n id: \"Error\",\n is: (value: unknown): value is Error => value instanceof Error,\n serialize: (error: Error): SerializedErrorPayload => {\n const serializedErrorPayload: SerializedErrorPayload = {\n name: error.name,\n message: error.message,\n customFields: collectErrorCustomFields(error),\n };\n if (typeof error.stack === \"string\") {\n serializedErrorPayload.stack = error.stack;\n }\n if (hasOwn.call(error, \"cause\")) {\n serializedErrorPayload.cause = (error as ErrorWithCause).cause;\n }\n return serializedErrorPayload;\n },\n deserialize: (payload: SerializedErrorPayload): Error => {\n const { name, message, stack, hasCause, cause, customFields } =\n assertSerializedErrorPayload(payload);\n\n const restoredError = new Error(message);\n restoredError.name = name;\n if (stack !== undefined) {\n Object.defineProperty(restoredError, \"stack\", {\n value: stack,\n writable: true,\n configurable: true,\n enumerable: false,\n });\n }\n if (hasCause) {\n Object.defineProperty(restoredError, \"cause\", {\n value: cause,\n writable: true,\n configurable: true,\n enumerable: false,\n });\n }\n\n for (const [propertyName, propertyValue] of Object.entries(customFields)) {\n if (errorReservedPropertyNames.has(propertyName)) {\n continue;\n }\n (restoredError as unknown as Record<string, unknown>)[propertyName] =\n propertyValue;\n }\n\n return restoredError;\n },\n};\n\nexport const URLType: TypeDefinition<URL, string> = {\n id: \"URL\",\n is: (value: unknown): value is URL => {\n const runtimeUrlConstructor = getUrlConstructor();\n if (!runtimeUrlConstructor) {\n return false;\n }\n return value instanceof runtimeUrlConstructor;\n },\n serialize: (value: URL): string => value.href,\n deserialize: (payload: string): URL => {\n if (typeof payload !== \"string\") {\n throw new Error(\"Invalid URL payload\");\n }\n const runtimeUrlConstructor = getUrlConstructor();\n if (!runtimeUrlConstructor) {\n throw new Error(\"URL is not available in this runtime\");\n }\n return new runtimeUrlConstructor(payload);\n },\n strategy: \"value\",\n};\n\nexport const URLSearchParamsType: TypeDefinition<URLSearchParams, string> = {\n id: \"URLSearchParams\",\n is: (value: unknown): value is URLSearchParams => {\n const runtimeUrlSearchParamsConstructor = getUrlSearchParamsConstructor();\n if (!runtimeUrlSearchParamsConstructor) {\n return false;\n }\n return value instanceof runtimeUrlSearchParamsConstructor;\n },\n serialize: (value: URLSearchParams): string => value.toString(),\n deserialize: (payload: string): URLSearchParams => {\n if (typeof payload !== \"string\") {\n throw new Error(\"Invalid URLSearchParams payload\");\n }\n const runtimeUrlSearchParamsConstructor = getUrlSearchParamsConstructor();\n if (!runtimeUrlSearchParamsConstructor) {\n throw new Error(\"URLSearchParams is not available in this runtime\");\n }\n return new runtimeUrlSearchParamsConstructor(payload);\n },\n strategy: \"value\",\n};\n\nexport const errorAndUrlBuiltInTypes: Array<TypeDefinition<unknown, unknown>> =\n [\n ErrorType as TypeDefinition<unknown, unknown>,\n URLType as TypeDefinition<unknown, unknown>,\n URLSearchParamsType as TypeDefinition<unknown, unknown>,\n ];\n","import type { SerializedValue } from \"./types\";\n\nexport enum SpecialTypeId {\n Undefined = \"Undefined\",\n NonFiniteNumber = \"NonFiniteNumber\",\n BigInt = \"BigInt\",\n Symbol = \"Symbol\",\n}\n\nexport enum NonFiniteNumberTag {\n NaN = \"NaN\",\n Infinity = \"Infinity\",\n NegativeInfinity = \"-Infinity\",\n}\n\nexport const serializeUndefined = (): SerializedValue => ({\n __type: SpecialTypeId.Undefined,\n value: null,\n});\n\nexport type BigIntPayload = string;\n\nexport const serializeBigIntPayload = (value: bigint): BigIntPayload =>\n value.toString(10);\n\nexport const assertBigIntPayload = (value: unknown): BigIntPayload => {\n if (typeof value === \"string\") {\n return value;\n }\n throw new Error(\"Invalid bigint payload\");\n};\n\nexport const serializeBigInt = (value: bigint): SerializedValue => ({\n __type: SpecialTypeId.BigInt,\n value: serializeBigIntPayload(value),\n});\n\nexport const getNonFiniteNumberTag = (\n value: number,\n): NonFiniteNumberTag | null => {\n if (Number.isNaN(value)) {\n return NonFiniteNumberTag.NaN;\n }\n if (value === Number.POSITIVE_INFINITY) {\n return NonFiniteNumberTag.Infinity;\n }\n if (value === Number.NEGATIVE_INFINITY) {\n return NonFiniteNumberTag.NegativeInfinity;\n }\n return null;\n};\n\nexport const serializeNonFiniteNumber = (value: number): SerializedValue => {\n const tag = getNonFiniteNumberTag(value);\n if (!tag) {\n throw new Error(\"Expected non-finite number\");\n }\n return {\n __type: SpecialTypeId.NonFiniteNumber,\n value: tag,\n };\n};\n\nexport const assertNonFiniteNumberTag = (\n value: unknown,\n): NonFiniteNumberTag => {\n if (\n value === NonFiniteNumberTag.NaN ||\n value === NonFiniteNumberTag.Infinity ||\n value === NonFiniteNumberTag.NegativeInfinity\n ) {\n return value;\n }\n throw new Error(\"Invalid non-finite number payload\");\n};\n","/**\n * Built-in type definitions for common JavaScript objects\n */\n\nimport type { TypeDefinition } from \"./types\";\nimport { binaryBuiltInTypes } from \"./binary-builtins\";\nimport { errorAndUrlBuiltInTypes } from \"./error-url-builtins\";\nimport {\n assertBigIntPayload,\n assertNonFiniteNumberTag,\n BigIntPayload,\n NonFiniteNumberTag,\n SpecialTypeId,\n getNonFiniteNumberTag,\n serializeBigIntPayload,\n} from \"./special-values\";\n\nexport enum SymbolPayloadKind {\n For = \"For\",\n WellKnown = \"WellKnown\",\n}\n\nconst WELL_KNOWN_SYMBOL_KEYS = [\n \"asyncIterator\",\n \"hasInstance\",\n \"isConcatSpreadable\",\n \"iterator\",\n \"match\",\n \"matchAll\",\n // Widely used (ex: RxJS), not part of the standard well-known list.\n // We only support it when the runtime defines Symbol.observable.\n \"observable\",\n \"replace\",\n \"search\",\n \"species\",\n \"split\",\n \"toPrimitive\",\n \"toStringTag\",\n \"unscopables\",\n] as const;\n\ntype WellKnownSymbolKey = (typeof WELL_KNOWN_SYMBOL_KEYS)[number];\n\nexport type SerializedSymbolPayload =\n | { kind: SymbolPayloadKind.For; key: string }\n | { kind: SymbolPayloadKind.WellKnown; key: WellKnownSymbolKey };\n\nconst getWellKnownSymbolKey = (value: symbol): WellKnownSymbolKey | null => {\n for (const key of WELL_KNOWN_SYMBOL_KEYS) {\n const sym = (Symbol as unknown as Record<WellKnownSymbolKey, unknown>)[key];\n if (typeof sym === \"symbol\" && sym === value) {\n return key;\n }\n }\n return null;\n};\n\nexport const assertSymbolPayload = (\n payload: unknown,\n): SerializedSymbolPayload => {\n if (!payload || typeof payload !== \"object\") {\n throw new Error(\"Invalid symbol payload\");\n }\n const rec = payload as Record<string, unknown>;\n if (rec.kind === SymbolPayloadKind.For) {\n if (typeof rec.key !== \"string\") {\n throw new Error(\"Invalid symbol payload\");\n }\n return { kind: SymbolPayloadKind.For, key: rec.key };\n }\n if (rec.kind === SymbolPayloadKind.WellKnown) {\n if (typeof rec.key !== \"string\") {\n throw new Error(\"Invalid symbol payload\");\n }\n if (\n (WELL_KNOWN_SYMBOL_KEYS as readonly string[]).includes(rec.key) === false\n ) {\n throw new Error(\"Invalid symbol payload\");\n }\n return {\n kind: SymbolPayloadKind.WellKnown,\n key: rec.key as WellKnownSymbolKey,\n };\n }\n throw new Error(\"Invalid symbol payload\");\n};\n\n/**\n * Built-in type handler for Date objects\n */\nexport const DateType: TypeDefinition<Date, string> = {\n id: \"Date\",\n is: (obj: unknown): obj is Date => obj instanceof Date,\n serialize: (date: Date) => date.toISOString(),\n deserialize: (isoString: string) => new Date(isoString),\n create: () => new Date(0),\n strategy: \"value\",\n};\n\n/**\n * Built-in type handler for RegExp objects\n */\nexport const RegExpType: TypeDefinition<\n RegExp,\n { pattern: string; flags: string }\n> = {\n id: \"RegExp\",\n is: (obj: unknown): obj is RegExp => obj instanceof RegExp,\n serialize: (regex: RegExp) => ({\n pattern: regex.source,\n flags: regex.flags,\n }),\n deserialize: (data: { pattern: string; flags: string }) =>\n new RegExp(data.pattern, data.flags),\n strategy: \"value\",\n};\n\n/**\n * Built-in type handler for Map objects\n */\nexport const MapType: TypeDefinition<\n Map<unknown, unknown>,\n Array<[unknown, unknown]>\n> = {\n id: \"Map\",\n is: (obj: unknown): obj is Map<unknown, unknown> => obj instanceof Map,\n serialize: (map: Map<unknown, unknown>) => Array.from(map.entries()),\n deserialize: (entries: Array<readonly [unknown, unknown]>) =>\n new Map(entries),\n create: () => new Map<unknown, unknown>(),\n};\n\n/**\n * Built-in type handler for Set objects\n */\nexport const SetType: TypeDefinition<Set<unknown>, unknown[]> = {\n id: \"Set\",\n is: (obj: unknown): obj is Set<unknown> => obj instanceof Set,\n serialize: (set: Set<unknown>) => Array.from(set.values()),\n deserialize: (values: unknown[]) => new Set(values),\n create: () => new Set<unknown>(),\n};\n\nexport const UndefinedType: TypeDefinition<undefined, null> = {\n id: SpecialTypeId.Undefined,\n is: (obj: unknown): obj is undefined => typeof obj === \"undefined\",\n serialize: () => null,\n deserialize: () => undefined,\n strategy: \"value\",\n};\n\nexport const NonFiniteNumberType: TypeDefinition<number, NonFiniteNumberTag> = {\n id: SpecialTypeId.NonFiniteNumber,\n is: (obj: unknown): obj is number =>\n typeof obj === \"number\" && !Number.isFinite(obj),\n serialize: (value: number) => {\n const tag = getNonFiniteNumberTag(value);\n if (!tag) {\n throw new Error(\"Expected non-finite number\");\n }\n return tag;\n },\n deserialize: (payload: NonFiniteNumberTag) => {\n const tag = assertNonFiniteNumberTag(payload);\n switch (tag) {\n case NonFiniteNumberTag.NaN:\n return Number.NaN;\n case NonFiniteNumberTag.Infinity:\n return Number.POSITIVE_INFINITY;\n case NonFiniteNumberTag.NegativeInfinity:\n return Number.NEGATIVE_INFINITY;\n }\n },\n strategy: \"value\",\n};\n\nexport const BigIntType: TypeDefinition<bigint, BigIntPayload> = {\n id: SpecialTypeId.BigInt,\n is: (obj: unknown): obj is bigint => typeof obj === \"bigint\",\n serialize: (value: bigint) => serializeBigIntPayload(value),\n deserialize: (value: BigIntPayload) => BigInt(assertBigIntPayload(value)),\n strategy: \"value\",\n};\n\nexport const SymbolType: TypeDefinition<symbol, SerializedSymbolPayload> = {\n id: SpecialTypeId.Symbol,\n is: (obj: unknown): obj is symbol => typeof obj === \"symbol\",\n serialize: (value: symbol) => {\n const forKey = Symbol.keyFor(value);\n if (typeof forKey === \"string\") {\n return { kind: SymbolPayloadKind.For, key: forKey };\n }\n const wellKnownKey = getWellKnownSymbolKey(value);\n if (wellKnownKey) {\n return { kind: SymbolPayloadKind.WellKnown, key: wellKnownKey };\n }\n throw new TypeError(\n \"Cannot serialize unique symbols; use Symbol.for(key) or a well-known symbol like Symbol.iterator\",\n );\n },\n deserialize: (payload: SerializedSymbolPayload) => {\n const parsed = assertSymbolPayload(payload);\n if (parsed.kind === SymbolPayloadKind.For) {\n return Symbol.for(parsed.key);\n }\n const value = (Symbol as unknown as Record<WellKnownSymbolKey, unknown>)[\n parsed.key\n ];\n if (typeof value !== \"symbol\") {\n throw new Error(`Unsupported well-known symbol \"${parsed.key}\"`);\n }\n return value;\n },\n strategy: \"value\",\n};\n\n/**\n * Array of all built-in type definitions\n */\nexport const builtInTypes: Array<TypeDefinition<unknown, unknown>> = [\n DateType as TypeDefinition<unknown, unknown>,\n RegExpType as TypeDefinition<unknown, unknown>,\n MapType as TypeDefinition<unknown, unknown>,\n SetType as TypeDefinition<unknown, unknown>,\n UndefinedType as TypeDefinition<unknown, unknown>,\n NonFiniteNumberType as TypeDefinition<unknown, unknown>,\n BigIntType as TypeDefinition<unknown, unknown>,\n SymbolType as TypeDefinition<unknown, unknown>,\n ...errorAndUrlBuiltInTypes,\n ...binaryBuiltInTypes,\n];\n","/**\n * Type registry for managing custom serialization types.\n * Extracted from Serializer.ts as a standalone module.\n */\n\nimport type { TypeDefinition } from \"./types\";\nimport { SymbolPolicy, SymbolPolicyErrorMessage } from \"./types\";\nimport {\n assertSymbolPayload,\n builtInTypes,\n SymbolPayloadKind,\n type SerializedSymbolPayload,\n} from \"./builtins\";\nimport {\n assertRegExpPayload,\n type RegExpValidatorOptions,\n} from \"./regexp-validator\";\nimport { SpecialTypeId } from \"./special-values\";\n\nexport interface TypeRegistryOptions {\n allowedTypes: ReadonlySet<string> | null;\n regExpValidator: RegExpValidatorOptions;\n symbolPolicy: SymbolPolicy;\n}\n\n/**\n * Registry for managing custom type definitions.\n */\nexport class TypeRegistry {\n private readonly typeRegistry = new Map<\n string,\n TypeDefinition<unknown, unknown>\n >();\n private readonly typeMap = new Map<\n string,\n TypeDefinition<unknown, unknown>\n >();\n private typeList: TypeDefinition<unknown, unknown>[] = [];\n\n private readonly allowedTypes: ReadonlySet<string> | null;\n private readonly regExpOptions: RegExpValidatorOptions;\n private readonly symbolPolicy: SymbolPolicy;\n\n constructor(options: TypeRegistryOptions) {\n this.allowedTypes = options.allowedTypes;\n this.regExpOptions = options.regExpValidator;\n this.symbolPolicy = options.symbolPolicy;\n this.assertSymbolPolicyValue(this.symbolPolicy);\n this.registerBuiltInTypes();\n this.refreshTypeCache();\n }\n\n /**\n * Get the list of registered types for iteration.\n */\n getTypeList(): readonly TypeDefinition<unknown, unknown>[] {\n return this.typeList;\n }\n\n /**\n * @internal - Map-like get() for test compatibility.\n */\n get(typeId: string): TypeDefinition<unknown, unknown> | undefined {\n return this.typeMap.get(typeId);\n }\n\n /**\n * Register a custom type definition.\n */\n addType<TInstance, TSerialized>(\n typeDef: TypeDefinition<TInstance, TSerialized>,\n ): void;\n addType<TJson = unknown, TInstance = unknown>(\n name: string,\n factory: (json: TJson) => TInstance,\n ): void;\n addType<TInstance, TSerialized>(\n arg1: string | TypeDefinition<TInstance, TSerialized>,\n arg2?: (json: unknown) => unknown,\n ): void {\n if (typeof arg1 === \"string\") {\n const name = arg1;\n const factory = arg2;\n if (!factory) {\n throw new Error(`addType(\"${name}\", factory) requires a factory`);\n }\n\n type ValueTypeInstance = { typeName(): string; toJSONValue(): unknown };\n const isValueTypeInstance = (obj: unknown): obj is ValueTypeInstance => {\n if (!obj || typeof obj !== \"object\") return false;\n const rec = obj as Record<string, unknown>;\n return (\n typeof rec.typeName === \"function\" &&\n typeof rec.toJSONValue === \"function\"\n );\n };\n\n this.addType({\n id: name,\n is: (obj: unknown): obj is ValueTypeInstance =>\n isValueTypeInstance(obj) && obj.typeName() === name,\n serialize: (obj: ValueTypeInstance) => obj.toJSONValue(),\n deserialize: (data: unknown) => factory(data) as ValueTypeInstance,\n strategy: \"value\",\n });\n return;\n }\n\n const typeDef = arg1;\n if (!typeDef || !typeDef.id) {\n throw new Error(\"Invalid type definition: id is required\");\n }\n if (!typeDef.serialize || !typeDef.deserialize) {\n throw new Error(\n \"Invalid type definition: serialize and deserialize are required\",\n );\n }\n if (this.typeRegistry.has(typeDef.id)) {\n throw new Error(`Type with id \"${typeDef.id}\" already exists`);\n }\n\n this.typeRegistry.set(\n typeDef.id,\n typeDef as TypeDefinition<unknown, unknown>,\n );\n this.refreshTypeCache();\n }\n\n /**\n * Find a type definition that matches the given value.\n */\n findTypeDefinition(\n value: unknown,\n excludedTypeIds: readonly string[],\n ): TypeDefinition<unknown, unknown> | undefined {\n for (const typeDef of this.typeList) {\n if (excludedTypeIds.includes(typeDef.id)) {\n continue;\n }\n try {\n if (typeDef.is(value)) {\n return typeDef;\n }\n } catch {\n // Type guard threw an error; skip this type definition\n continue;\n }\n }\n return undefined;\n }\n\n /**\n * Get a type definition by ID with allowed types enforcement.\n */\n getTypeDefinition(typeId: string): TypeDefinition<unknown, unknown> {\n if (this.allowedTypes && !this.allowedTypes.has(typeId)) {\n throw new Error(`Type \"${typeId}\" is not allowed`);\n }\n const typeDef = this.typeMap.get(typeId);\n if (!typeDef) {\n throw new Error(`Unknown type: ${typeId}`);\n }\n return typeDef;\n }\n\n /**\n * Deserialize typed data with special handling for RegExp.\n */\n deserializeType(\n typeDef: TypeDefinition<unknown, unknown>,\n typeId: string,\n data: unknown,\n ): unknown {\n if (typeId === SpecialTypeId.Symbol) {\n const payload = assertSymbolPayload(data);\n this.assertSymbolPolicy(payload);\n return typeDef.deserialize(payload);\n }\n if (typeId === \"RegExp\") {\n const payload = assertRegExpPayload(data, this.regExpOptions);\n return typeDef.deserialize(payload);\n }\n return typeDef.deserialize(data);\n }\n\n /**\n * Check if a type's serialized payload matches the type itself.\n * Used to prevent recursive type application.\n */\n shouldExcludeTypeFromPayload(\n typeDef: TypeDefinition<unknown, unknown>,\n serializedPayload: unknown,\n ): boolean {\n try {\n return typeDef.is(serializedPayload);\n } catch {\n return false;\n }\n }\n\n private registerBuiltInTypes(): void {\n for (const typeDef of builtInTypes) {\n this.typeRegistry.set(typeDef.id, typeDef);\n }\n }\n\n private refreshTypeCache(): void {\n this.typeMap.clear();\n const list: TypeDefinition<unknown, unknown>[] = [];\n for (const typeDef of this.typeRegistry.values()) {\n this.typeMap.set(typeDef.id, typeDef);\n list.push(typeDef);\n }\n this.typeList = list;\n }\n\n private assertSymbolPolicyValue(policy: SymbolPolicy): void {\n if (!Object.values(SymbolPolicy).includes(policy)) {\n throw new Error(SymbolPolicyErrorMessage.UnsupportedSymbolPolicy);\n }\n }\n\n private assertSymbolPolicy(payload: SerializedSymbolPayload): void {\n switch (this.symbolPolicy) {\n case SymbolPolicy.AllowAll:\n return;\n case SymbolPolicy.WellKnownOnly:\n if (payload.kind === SymbolPayloadKind.For) {\n throw new Error(SymbolPolicyErrorMessage.GlobalSymbolsNotAllowed);\n }\n return;\n case SymbolPolicy.Disabled:\n throw new Error(SymbolPolicyErrorMessage.SymbolsNotAllowed);\n }\n }\n}\n","/**\n * Validation helpers and type guards for serialization.\n * Extracted from Serializer.ts as a standalone module.\n */\n\nimport type { ObjectReference, SerializedGraph, SerializedNode } from \"./types\";\n\n/** Default keys to block for prototype pollution protection */\nexport const DEFAULT_UNSAFE_KEYS = new Set([\n \"__proto__\",\n \"constructor\",\n \"prototype\",\n]);\n\n/**\n * Check if a key is unsafe (can lead to prototype pollution).\n */\nexport const isUnsafeKey = (\n key: string,\n unsafeKeys: ReadonlySet<string> = DEFAULT_UNSAFE_KEYS,\n): boolean => {\n return unsafeKeys.has(key);\n};\n\n/**\n * Check if a value is an object reference (has __ref property).\n */\nexport const isObjectReference = (value: unknown): value is ObjectReference => {\n return Boolean(\n value &&\n typeof value === \"object\" &&\n value !== null &&\n \"__ref\" in value &&\n typeof (value as Record<\"__ref\", unknown>).__ref === \"string\",\n );\n};\n\n/**\n * Check if a value is a serialized graph payload.\n */\nexport const isGraphPayload = (value: unknown): value is SerializedGraph => {\n if (!value || typeof value !== \"object\") {\n return false;\n }\n\n const record = value as Record<string, unknown>;\n\n if (record.__graph !== true) {\n return false;\n }\n\n if (typeof record.root === \"undefined\") {\n return false;\n }\n\n const nodes = record.nodes;\n if (typeof nodes !== \"object\" || nodes === null) {\n return false;\n }\n\n return true;\n};\n\n/**\n * Check if a value is a serialized type record ({ __type, value }).\n */\nexport const isSerializedTypeRecord = (\n value: unknown,\n): value is { __type: string; value: unknown } => {\n if (!value || typeof value !== \"object\") {\n return false;\n }\n\n const record = value as Record<string, unknown>;\n return (\n typeof record.__type === \"string\" &&\n Object.prototype.hasOwnProperty.call(record, \"value\")\n );\n};\n\n/**\n * Convert nodes object to a safe record with null prototype.\n */\nexport const toNodeRecord = (\n nodes: Record<string, SerializedNode>,\n unsafeKeys: ReadonlySet<string> = DEFAULT_UNSAFE_KEYS,\n): Record<string, SerializedNode> => {\n if (!nodes || typeof nodes !== \"object\") {\n return Object.create(null);\n }\n const record: Record<string, SerializedNode> = Object.create(null);\n for (const key in nodes) {\n if (!Object.prototype.hasOwnProperty.call(nodes, key)) {\n continue;\n }\n if (isUnsafeKey(key, unsafeKeys)) {\n continue;\n }\n record[key] = nodes[key];\n }\n return record;\n};\n\n/**\n * Assert that recursion depth is within limits.\n */\nexport const assertDepth = (depth: number, maxDepth: number): void => {\n if (depth > maxDepth) {\n throw new Error(`Maximum depth exceeded (${maxDepth})`);\n }\n};\n","import type { TypeDefinition } from \"./types\";\nimport type { SerializedTypeRecord, SerializedValue } from \"./types\";\nimport type { TypeRegistry } from \"./type-registry\";\nimport { isUnsafeKey } from \"./validation\";\n\nexport const serializeArrayItems = <TSerializedValue>(\n source: readonly unknown[],\n serializeNested: (value: unknown) => TSerializedValue,\n): TSerializedValue[] => {\n const length = source.length;\n const items: TSerializedValue[] = new Array(length);\n for (let index = 0; index < length; index += 1) {\n items[index] = serializeNested(source[index]);\n }\n return items;\n};\n\nexport const serializeRecordEntries = <TSerializedValue>(\n source: Record<string, unknown>,\n unsafeKeys: ReadonlySet<string>,\n serializeNested: (value: unknown) => TSerializedValue,\n): Record<string, TSerializedValue> => {\n const record: Record<string, TSerializedValue> = {};\n for (const key in source) {\n if (!Object.prototype.hasOwnProperty.call(source, key)) {\n continue;\n }\n if (isUnsafeKey(key, unsafeKeys)) {\n continue;\n }\n record[key] = serializeNested(source[key]);\n }\n return record;\n};\n\nexport function serializeTypeRecord(\n typeDef: TypeDefinition<unknown, unknown>,\n value: unknown,\n excludedTypeIds: string[],\n serializeNested: (value: unknown) => SerializedValue,\n): SerializedTypeRecord;\n\nexport function serializeTypeRecord<TSerializedValue>(\n typeDef: TypeDefinition<unknown, unknown>,\n value: unknown,\n excludedTypeIds: string[],\n serializeNested: (value: unknown) => TSerializedValue,\n): { __type: string; value: TSerializedValue };\n\nexport function serializeTypeRecord<TSerializedValue>(\n typeDef: TypeDefinition<unknown, unknown>,\n value: unknown,\n excludedTypeIds: string[],\n serializeNested: (value: unknown) => TSerializedValue,\n): { __type: string; value: TSerializedValue } {\n excludedTypeIds.push(typeDef.id);\n try {\n const serializedPayload = typeDef.serialize(value);\n return {\n __type: typeDef.id,\n value: serializeNested(serializedPayload),\n };\n } finally {\n excludedTypeIds.pop();\n }\n}\n\nexport function serializeSymbolValue(\n value: symbol,\n excludedTypeIds: string[],\n typeRegistry: TypeRegistry,\n serializeNested: (value: unknown) => SerializedValue,\n): SerializedValue;\n\nexport function serializeSymbolValue<TSerializedValue>(\n value: symbol,\n excludedTypeIds: string[],\n typeRegistry: TypeRegistry,\n serializeNested: (value: unknown) => TSerializedValue,\n): { __type: string; value: TSerializedValue };\n\nexport function serializeSymbolValue<TSerializedValue>(\n value: symbol,\n excludedTypeIds: string[],\n typeRegistry: TypeRegistry,\n serializeNested: (value: unknown) => TSerializedValue,\n): { __type: string; value: TSerializedValue } {\n const typeDef = typeRegistry.findTypeDefinition(value, excludedTypeIds);\n if (!typeDef) {\n throw new TypeError('Cannot serialize value of type \"symbol\"');\n }\n return serializeTypeRecord(typeDef, value, excludedTypeIds, serializeNested);\n}\n","/**\n * Graph-mode serialization with circular reference handling.\n * Extracted from Serializer.ts as a standalone module.\n */\n\nimport type {\n SerializedValue,\n SerializationContext,\n SerializedNode,\n} from \"./types\";\nimport { assertDepth } from \"./validation\";\nimport type { TypeRegistry } from \"./type-registry\";\nimport {\n serializeBigInt,\n serializeNonFiniteNumber,\n serializeUndefined,\n} from \"./special-values\";\nimport {\n serializeArrayItems,\n serializeRecordEntries,\n serializeSymbolValue,\n} from \"./serialize-utils\";\n\nexport interface SerializeState {\n serializingValueTypes: WeakSet<object>;\n excludedTypeIds: string[];\n}\n\nexport interface GraphSerializerOptions {\n maxDepth: number;\n unsafeKeys: ReadonlySet<string>;\n typeRegistry: TypeRegistry;\n}\n\n/**\n * Create a unique object ID for the serialization context.\n */\nexport const createObjectId = (context: SerializationContext): string => {\n context.idCounter += 1;\n return `obj_${context.idCounter}`;\n};\n\n/**\n * Store a node in the serialization context.\n */\nexport const storeNode = (\n context: SerializationContext,\n id: string,\n node: SerializedNode,\n): void => {\n context.nodes[id] = node;\n context.nodeCount += 1;\n};\n\n/**\n * Serialize a value in graph mode with reference tracking.\n */\nexport const serializeValue = (\n value: unknown,\n context: SerializationContext,\n state: SerializeState,\n depth: number,\n options: GraphSerializerOptions,\n): SerializedValue => {\n assertDepth(depth, options.maxDepth);\n if (value === null) {\n return null;\n }\n\n if (typeof value === \"undefined\") {\n return serializeUndefined();\n }\n\n const valueType = typeof value;\n\n if (valueType !== \"object\") {\n if (valueType === \"number\") {\n const numericValue = value as number;\n if (!Number.isFinite(numericValue)) {\n return serializeNonFiniteNumber(numericValue);\n }\n return numericValue;\n }\n\n if (valueType === \"bigint\") {\n return serializeBigInt(value as bigint);\n }\n\n // Functions are intentionally non-serializable (code execution risk + non-portable).\n if (valueType === \"function\") {\n throw new TypeError(`Cannot serialize value of type \"${valueType}\"`);\n }\n\n // Symbols are non-JSON primitives; the registry provides safe encodings (Symbol.for + well-known).\n if (valueType === \"symbol\") {\n return serializeSymbolValue(\n value as symbol,\n state.excludedTypeIds,\n options.typeRegistry,\n (nested) => serializeValue(nested, context, state, depth + 1, options),\n );\n }\n\n return value as SerializedValue;\n }\n\n const objectValue = value as object;\n\n const existingId = context.objectIds.get(objectValue);\n if (existingId) {\n return { __ref: existingId };\n }\n\n // Allow value-strategy types to serialize inline without identity tracking.\n const shouldCheckTypes =\n !Array.isArray(objectValue) &&\n !state.serializingValueTypes.has(objectValue);\n\n if (shouldCheckTypes) {\n const typeDef = options.typeRegistry.findTypeDefinition(\n objectValue,\n state.excludedTypeIds,\n );\n if (typeDef) {\n if (typeDef.strategy === \"value\") {\n state.serializingValueTypes.add(objectValue);\n const serializedPayload = typeDef.serialize(objectValue);\n const shouldExcludeCurrentType =\n options.typeRegistry.shouldExcludeTypeFromPayload(\n typeDef,\n serializedPayload,\n );\n if (shouldExcludeCurrentType) {\n state.excludedTypeIds.push(typeDef.id);\n }\n try {\n const payload = serializeValue(\n serializedPayload,\n context,\n state,\n depth + 1,\n options,\n );\n // Value types are serialized inline and do not preserve identity\n // This produces stable JSON output for value-like types (ex: Date)\n return {\n __type: typeDef.id,\n value: payload,\n } as SerializedValue;\n } finally {\n state.serializingValueTypes.delete(objectValue);\n if (shouldExcludeCurrentType) {\n state.excludedTypeIds.pop();\n }\n }\n }\n\n const objectIdForType = createObjectId(context);\n context.objectIds.set(objectValue, objectIdForType);\n\n const serializedPayload = typeDef.serialize(objectValue);\n const shouldExcludeCurrentType =\n options.typeRegistry.shouldExcludeTypeFromPayload(\n typeDef,\n serializedPayload,\n );\n if (shouldExcludeCurrentType) {\n state.excludedTypeIds.push(typeDef.id);\n }\n try {\n const payload = serializeValue(\n serializedPayload,\n context,\n state,\n depth + 1,\n options,\n );\n\n storeNode(context, objectIdForType, {\n kind: \"type\",\n type: typeDef.id,\n value: payload,\n });\n return { __ref: objectIdForType };\n } finally {\n if (shouldExcludeCurrentType) {\n state.excludedTypeIds.pop();\n }\n }\n }\n }\n\n const objectId = createObjectId(context);\n context.objectIds.set(objectValue, objectId);\n\n if (Array.isArray(objectValue)) {\n const items = serializeArrayItems(objectValue, (nested) =>\n serializeValue(nested, context, state, depth + 1, options),\n );\n storeNode(context, objectId, { kind: \"array\", value: items });\n return { __ref: objectId };\n }\n\n const record = serializeRecordEntries(\n objectValue as Record<string, unknown>,\n options.unsafeKeys,\n (nested) => serializeValue(nested, context, state, depth + 1, options),\n );\n\n storeNode(context, objectId, { kind: \"object\", value: record });\n return { __ref: objectId };\n};\n","/**\n * Tree-mode serialization without circular reference support.\n * Used by stringify() for simple JSON-compatible output.\n * Extracted from Serializer.ts as a standalone module.\n */\n\nimport { assertDepth } from \"./validation\";\nimport type { TypeRegistry } from \"./type-registry\";\nimport {\n serializeBigInt,\n serializeNonFiniteNumber,\n serializeUndefined,\n} from \"./special-values\";\nimport {\n serializeArrayItems,\n serializeRecordEntries,\n serializeSymbolValue,\n} from \"./serialize-utils\";\n\nexport interface TreeSerializeContext {\n stack: WeakSet<object>;\n serializingValueTypes: WeakSet<object>;\n excludedTypeIds: string[];\n}\n\nexport interface TreeSerializerOptions {\n maxDepth: number;\n unsafeKeys: ReadonlySet<string>;\n typeRegistry: TypeRegistry;\n}\n\n/**\n * Serialize a value in tree mode (throws on circular references).\n */\nexport const serializeTreeValue = (\n value: unknown,\n context: TreeSerializeContext,\n depth: number,\n options: TreeSerializerOptions,\n): unknown => {\n assertDepth(depth, options.maxDepth);\n if (value === null) {\n return null;\n }\n\n if (typeof value === \"undefined\") {\n return serializeUndefined();\n }\n\n const valueType = typeof value;\n\n if (valueType !== \"object\") {\n if (valueType === \"number\") {\n const numericValue = value as number;\n if (!Number.isFinite(numericValue)) {\n return serializeNonFiniteNumber(numericValue);\n }\n return numericValue;\n }\n\n if (valueType === \"bigint\") {\n return serializeBigInt(value as bigint);\n }\n\n // Functions are intentionally non-serializable (code execution risk + non-portable).\n if (valueType === \"function\") {\n throw new TypeError(`Cannot serialize value of type \"${valueType}\"`);\n }\n\n // Symbols are non-JSON primitives; the registry provides safe encodings (Symbol.for + well-known).\n if (valueType === \"symbol\") {\n return serializeSymbolValue(\n value as symbol,\n context.excludedTypeIds,\n options.typeRegistry,\n (nested) => serializeTreeValue(nested, context, depth + 1, options),\n );\n }\n\n return value;\n }\n\n const objectValue = value as object;\n\n if (context.stack.has(objectValue)) {\n throw new TypeError(\"Cannot serialize circular structure in tree mode\");\n }\n\n const shouldCheckTypes =\n !Array.isArray(objectValue) &&\n !context.serializingValueTypes.has(objectValue);\n\n if (shouldCheckTypes) {\n const typeDef = options.typeRegistry.findTypeDefinition(\n objectValue,\n context.excludedTypeIds,\n );\n if (typeDef) {\n context.serializingValueTypes.add(objectValue);\n const serializedPayload = typeDef.serialize(objectValue);\n const shouldExcludeCurrentType =\n options.typeRegistry.shouldExcludeTypeFromPayload(\n typeDef,\n serializedPayload,\n );\n try {\n if (shouldExcludeCurrentType) {\n context.excludedTypeIds.push(typeDef.id);\n }\n const payload = serializeTreeValue(\n serializedPayload,\n context,\n depth + 1,\n options,\n );\n return {\n __type: typeDef.id,\n value: payload,\n };\n } finally {\n if (shouldExcludeCurrentType) {\n context.excludedTypeIds.pop();\n }\n context.serializingValueTypes.delete(objectValue);\n }\n }\n }\n\n context.stack.add(objectValue);\n\n try {\n if (Array.isArray(objectValue)) {\n return serializeArrayItems(objectValue, (nested) =>\n serializeTreeValue(nested, context, depth + 1, options),\n );\n }\n\n return serializeRecordEntries(\n objectValue as Record<string, unknown>,\n options.unsafeKeys,\n (nested) => serializeTreeValue(nested, context, depth + 1, options),\n );\n } finally {\n context.stack.delete(objectValue);\n }\n};\n","/**\n * Deserialization logic for graph and legacy payloads.\n * Extracted from Serializer.ts as a standalone module.\n */\n\nimport type { SerializedValue, DeserializationContext } from \"./types\";\nimport {\n isObjectReference,\n isSerializedTypeRecord,\n isUnsafeKey,\n assertDepth,\n} from \"./validation\";\nimport type { TypeRegistry } from \"./type-registry\";\n\nconst hasOwn = Object.prototype.hasOwnProperty;\n\nexport interface DeserializerOptions {\n maxDepth: number;\n unsafeKeys: ReadonlySet<string>;\n typeRegistry: TypeRegistry;\n}\n\nconst copyOwnProperties = (\n target: object,\n source: object,\n unsafeKeys: ReadonlySet<string>,\n): void => {\n const descriptors = Object.getOwnPropertyDescriptors(source);\n for (const key of Object.keys(descriptors)) {\n if (isUnsafeKey(key, unsafeKeys)) {\n continue;\n }\n Object.defineProperty(target, key, descriptors[key]);\n }\n\n const symbols = Object.getOwnPropertySymbols(source);\n for (const symbol of symbols) {\n const descriptor = Object.getOwnPropertyDescriptor(source, symbol);\n if (!descriptor) {\n continue;\n }\n Object.defineProperty(target, symbol, descriptor);\n }\n};\n\nconst mergeTypePlaceholderWithoutFactory = (\n placeholder: unknown,\n result: unknown,\n unsafeKeys: ReadonlySet<string>,\n hasCircularReference: boolean,\n): unknown => {\n if (placeholder === result) {\n return result;\n }\n\n if (result === null || typeof result !== \"object\") {\n if (hasCircularReference) {\n throw new Error(\n \"Cannot preserve circular references for a type without create() that deserializes to a non-object value\",\n );\n }\n return result;\n }\n\n // Arrays and objects with internal slots cannot be reconstructed by mutating\n // a plain placeholder object. Require create() in those cases if identity is needed.\n if (\n Array.isArray(result) ||\n result instanceof Map ||\n result instanceof Set ||\n result instanceof Date ||\n result instanceof RegExp\n ) {\n if (hasCircularReference) {\n throw new Error(\n \"Cannot preserve circular references for a type without create(); provide create() for identity-safe placeholders\",\n );\n }\n return result;\n }\n\n const target = placeholder as object;\n const source = result as object;\n\n const sourcePrototype = Object.getPrototypeOf(source);\n if (Object.getPrototypeOf(target) !== sourcePrototype) {\n Object.setPrototypeOf(target, sourcePrototype);\n }\n\n copyOwnProperties(target, source, unsafeKeys);\n return target;\n};\n\n/**\n * Deserialize a value from its serialized representation.\n */\nexport const deserializeValue = (\n value: SerializedValue,\n context: DeserializationContext,\n depth: number,\n options: DeserializerOptions,\n): unknown => {\n assertDepth(depth, options.maxDepth);\n if (value === null || typeof value !== \"object\") {\n return value;\n }\n\n if (Array.isArray(value)) {\n const length = value.length;\n const result: unknown[] = new Array(length);\n for (let index = 0; index < length; index += 1) {\n result[index] = deserializeValue(\n value[index],\n context,\n depth + 1,\n options,\n );\n }\n return result;\n }\n\n if (isObjectReference(value)) {\n return resolveReference(value.__ref, context, depth + 1, options);\n }\n\n if (isSerializedTypeRecord(value)) {\n const typeDef = options.typeRegistry.getTypeDefinition(value.__type);\n const data = deserializeValue(\n value.value as SerializedValue,\n context,\n depth + 1,\n options,\n );\n return options.typeRegistry.deserializeType(typeDef, value.__type, data);\n }\n\n const obj: Record<string, unknown> = {};\n const source = value as Record<string, SerializedValue>;\n for (const key in source) {\n if (!hasOwn.call(source, key)) {\n continue;\n }\n if (isUnsafeKey(key, options.unsafeKeys)) {\n continue;\n }\n obj[key] = deserializeValue(source[key], context, depth + 1, options);\n }\n return obj;\n};\n\n/**\n * Resolve a reference ID to its deserialized value.\n */\nexport const resolveReference = (\n id: string,\n context: DeserializationContext,\n depth: number,\n options: DeserializerOptions,\n): unknown => {\n assertDepth(depth, options.maxDepth);\n if (isUnsafeKey(id, options.unsafeKeys)) {\n throw new Error(`Unresolved reference id \"${id}\"`);\n }\n if (context.resolved.has(id)) {\n if (context.resolving.has(id)) {\n context.resolvingRefs.add(id);\n }\n return context.resolved.get(id);\n }\n\n const node = context.nodes[id];\n if (!node) {\n throw new Error(`Unresolved reference id \"${id}\"`);\n }\n\n switch (node.kind) {\n case \"array\": {\n const values = node.value;\n const arr: unknown[] = new Array(values.length);\n context.resolved.set(id, arr);\n for (let index = 0; index < values.length; index += 1) {\n arr[index] = deserializeValue(\n values[index],\n context,\n depth + 1,\n options,\n );\n }\n return arr;\n }\n\n case \"object\": {\n const target: Record<string, unknown> = {};\n context.resolved.set(id, target);\n const source = node.value;\n for (const key in source) {\n if (!hasOwn.call(source, key)) {\n continue;\n }\n if (isUnsafeKey(key, options.unsafeKeys)) {\n continue;\n }\n target[key] = deserializeValue(\n source[key],\n context,\n depth + 1,\n options,\n );\n }\n return target;\n }\n\n case \"type\": {\n const typeDef = options.typeRegistry.getTypeDefinition(node.type);\n\n const createdPlaceholder =\n typeof typeDef.create === \"function\" ? typeDef.create() : undefined;\n const hasFactory =\n createdPlaceholder !== undefined && createdPlaceholder !== null;\n const placeholder: unknown = hasFactory\n ? createdPlaceholder\n : Object.create(null);\n context.resolved.set(id, placeholder);\n context.resolving.add(id);\n\n const deserializedPayload = deserializeValue(\n node.value,\n context,\n depth + 1,\n options,\n );\n const result = options.typeRegistry.deserializeType(\n typeDef,\n node.type,\n deserializedPayload,\n );\n const finalResult = hasFactory\n ? mergePlaceholder(placeholder, result, options.unsafeKeys)\n : mergeTypePlaceholderWithoutFactory(\n placeholder,\n result,\n options.unsafeKeys,\n context.resolvingRefs.has(id),\n );\n\n context.resolved.set(id, finalResult);\n context.resolving.delete(id);\n return finalResult;\n }\n\n default: {\n throw new Error(\"Unsupported node kind\");\n }\n }\n};\n\n/**\n * Merge a placeholder with the final result for identity preservation.\n */\nexport const mergePlaceholder = (\n placeholder: unknown,\n result: unknown,\n unsafeKeys: ReadonlySet<string>,\n): unknown => {\n if (placeholder === result) {\n return result;\n }\n\n if (placeholder instanceof Map && result instanceof Map) {\n placeholder.clear();\n for (const [key, value] of result.entries()) {\n placeholder.set(key, value);\n }\n return placeholder;\n }\n\n if (placeholder instanceof Set && result instanceof Set) {\n placeholder.clear();\n result.forEach((value) => placeholder.add(value));\n return placeholder;\n }\n\n if (placeholder instanceof Date && result instanceof Date) {\n placeholder.setTime(result.getTime());\n return placeholder;\n }\n\n if (\n placeholder !== null &&\n typeof placeholder === \"object\" &&\n result !== null &&\n typeof result === \"object\"\n ) {\n const target = placeholder as Record<string, unknown>;\n const source = result as Record<string, unknown>;\n for (const key in source) {\n if (!hasOwn.call(source, key)) {\n continue;\n }\n if (isUnsafeKey(key, unsafeKeys)) {\n continue;\n }\n target[key] = source[key];\n }\n return placeholder;\n }\n\n return result;\n};\n\n/**\n * Deserialize legacy tree-format payloads (pre-graph format).\n */\nexport const deserializeLegacy = (\n value: unknown,\n depth: number,\n options: DeserializerOptions,\n): unknown => {\n assertDepth(depth, options.maxDepth);\n if (value === null || typeof value !== \"object\") {\n return value;\n }\n\n if (Array.isArray(value)) {\n const length = value.length;\n const result: unknown[] = new Array(length);\n for (let index = 0; index < length; index += 1) {\n result[index] = deserializeLegacy(value[index], depth + 1, options);\n }\n return result;\n }\n\n if (isSerializedTypeRecord(value)) {\n const typeDef = options.typeRegistry.getTypeDefinition(value.__type);\n const data = deserializeLegacy(value.value, depth + 1, options);\n return options.typeRegistry.deserializeType(typeDef, value.__type, data);\n }\n\n const obj: Record<string, unknown> = {};\n const source = value as Record<string, unknown>;\n for (const key in source) {\n if (!hasOwn.call(source, key)) {\n continue;\n }\n if (isUnsafeKey(key, options.unsafeKeys)) {\n continue;\n }\n obj[key] = deserializeLegacy(source[key], depth + 1, options);\n }\n return obj;\n};\n","export const normalizeMaxDepth = (\n value: number | undefined,\n fallback: number,\n): number => {\n if (value === Number.POSITIVE_INFINITY) {\n return Number.POSITIVE_INFINITY;\n }\n if (typeof value === \"number\" && Number.isFinite(value) && value >= 0) {\n return Math.floor(value);\n }\n return fallback;\n};\n\nexport const normalizeMaxRegExpPatternLength = (\n value: number | undefined,\n fallback: number,\n): number => {\n if (value === Number.POSITIVE_INFINITY) {\n return Number.POSITIVE_INFINITY;\n }\n if (typeof value === \"number\" && Number.isFinite(value) && value > 0) {\n return Math.floor(value);\n }\n return fallback;\n};\n","/**\n * Graph-aware serializer/deserializer with circular reference\n * handling and pluggable type support.\n *\n * Internal protocol reference: `readmes/SERIALIZER_PROTOCOL.md`.\n */\n\nimport type {\n TypeDefinition,\n SerializationContext,\n SerializerOptions,\n SerializedGraph,\n DeserializationContext,\n SerializedValue,\n SerializedNode,\n} from \"./types\";\nimport { SymbolPolicy } from \"./types\";\nimport { TypeRegistry } from \"./type-registry\";\nimport {\n isGraphPayload,\n toNodeRecord,\n isObjectReference,\n isSerializedTypeRecord,\n DEFAULT_UNSAFE_KEYS,\n} from \"./validation\";\nimport { serializeValue, type SerializeState } from \"./graph-serializer\";\nimport { serializeTreeValue } from \"./tree-serializer\";\nimport {\n deserializeValue as deserializeValueFn,\n deserializeLegacy,\n resolveReference as resolveReferenceFn,\n mergePlaceholder as mergePlaceholderFn,\n} from \"./deserializer\";\nimport {\n normalizeMaxDepth,\n normalizeMaxRegExpPatternLength,\n} from \"./option-normalizers\";\n\nconst GRAPH_VERSION = 1;\nconst DEFAULT_MAX_DEPTH = 1000;\nconst DEFAULT_MAX_REGEXP_PATTERN_LENGTH = 1024;\n\nexport class Serializer {\n /** Type registry for managing custom types */\n private readonly typeRegistry: TypeRegistry;\n\n private readonly runtimeOptions: {\n maxDepth: number;\n unsafeKeys: ReadonlySet<string>;\n typeRegistry: TypeRegistry;\n };\n\n /** JSON indentation width when pretty printing is enabled */\n private readonly indent: number | undefined;\n /** Maximum recursion depth allowed */\n private readonly maxDepth: number;\n /** Maximum allowed RegExp pattern length during deserialization */\n private readonly maxRegExpPatternLength: number;\n /** Allow RegExp patterns that fail the safety heuristic */\n private readonly allowUnsafeRegExp: boolean;\n /** Disallowed keys that can lead to prototype pollution */\n private readonly unsafeKeys: ReadonlySet<string>;\n\n constructor(options: SerializerOptions = {}) {\n this.indent = options.pretty ? 2 : undefined;\n this.maxDepth = normalizeMaxDepth(options.maxDepth, DEFAULT_MAX_DEPTH);\n this.maxRegExpPatternLength = normalizeMaxRegExpPatternLength(\n options.maxRegExpPatternLength,\n DEFAULT_MAX_REGEXP_PATTERN_LENGTH,\n );\n this.allowUnsafeRegExp = options.allowUnsafeRegExp ?? false;\n this.unsafeKeys = DEFAULT_UNSAFE_KEYS;\n\n this.typeRegistry = new TypeRegistry({\n allowedTypes: options.allowedTypes ? new Set(options.allowedTypes) : null,\n regExpValidator: {\n maxPatternLength: this.maxRegExpPatternLength,\n allowUnsafe: this.allowUnsafeRegExp,\n },\n symbolPolicy: options.symbolPolicy ?? SymbolPolicy.AllowAll,\n });\n\n this.runtimeOptions = {\n maxDepth: this.maxDepth,\n unsafeKeys: this.unsafeKeys,\n typeRegistry: this.typeRegistry,\n };\n }\n\n /**\n * Alias of `serialize()` to match the historical tunnel serializer surface.\n */\n public stringify<T>(value: T): string {\n const root = serializeTreeValue(\n value,\n {\n stack: new WeakSet(),\n serializingValueTypes: new WeakSet(),\n excludedTypeIds: [],\n },\n 0,\n this.runtimeOptions,\n );\n return this.jsonStringify(root);\n }\n\n /**\n * Alias of `deserialize()` to match the historical tunnel serializer surface.\n */\n public parse<T = unknown>(payload: string): T {\n return this.deserialize<T>(payload);\n }\n\n /**\n * Serialize an arbitrary value into a JSON string.\n */\n public serialize<T>(value: T, context?: SerializationContext): string {\n const ctx: SerializationContext = context ?? {\n objectIds: new WeakMap(),\n idCounter: 0,\n nodeCount: 0,\n nodes: Object.create(null),\n };\n\n const state: SerializeState = {\n serializingValueTypes: new WeakSet(),\n excludedTypeIds: [],\n };\n\n const root = serializeValue(value, ctx, state, 0, this.runtimeOptions);\n if (ctx.nodeCount === 0 && !isObjectReference(root)) {\n return this.jsonStringify(root);\n }\n\n const graph: SerializedGraph = {\n __graph: true,\n version: GRAPH_VERSION,\n root,\n nodes: ctx.nodes,\n };\n\n return this.jsonStringify(graph);\n }\n\n /**\n * Deserialize a JSON string back to its original value.\n */\n public deserialize<T = unknown>(payload: string): T {\n const parsed = JSON.parse(payload);\n\n if (!isGraphPayload(parsed)) {\n return deserializeLegacy(parsed, 0, this.runtimeOptions) as T;\n }\n\n const context: DeserializationContext = {\n nodes: toNodeRecord(parsed.nodes, this.unsafeKeys),\n resolved: new Map(),\n resolving: new Set(),\n resolvingRefs: new Set(),\n };\n\n return deserializeValueFn(\n parsed.root,\n context,\n 0,\n this.runtimeOptions,\n ) as T;\n }\n\n /**\n * Register a custom type for serialization/deserialization.\n */\n public addType<TInstance, TSerialized>(\n typeDef: TypeDefinition<TInstance, TSerialized>,\n ): void;\n public addType<TJson = unknown, TInstance = unknown>(\n name: string,\n factory: (json: TJson) => TInstance,\n ): void;\n public addType<TInstance, TSerialized>(\n arg1: string | TypeDefinition<TInstance, TSerialized>,\n arg2?: (json: unknown) => unknown,\n ): void {\n if (typeof arg1 === \"string\") {\n this.typeRegistry.addType(arg1, arg2!);\n } else {\n this.typeRegistry.addType(arg1);\n }\n }\n\n /**\n * @internal - Exposed for testing RegExp safety validation\n */\n public readonly isRegExpPatternSafe = (pattern: string): boolean => {\n // Re-export from regexp-validator for backwards compatibility\n const { isRegExpPatternSafe: check } = require(\"./regexp-validator\");\n return check(pattern);\n };\n\n /**\n * @internal - Exposed for testing quantifier detection\n */\n public readonly isQuantifierAt = (\n pattern: string,\n index: number,\n ): boolean => {\n const { isQuantifierAt: check } = require(\"./regexp-validator\");\n return check(pattern, index);\n };\n\n /**\n * @internal - Exposed for testing quantifier character detection\n */\n public readonly isQuantifierChar = (\n char: string,\n pattern: string,\n index: number,\n ): boolean => {\n const { isQuantifierChar: check } = require(\"./regexp-validator\");\n return check(char, pattern, index);\n };\n\n /**\n * @internal - Exposed for testing bounded quantifier detection\n */\n public readonly isBoundedQuantifier = (\n pattern: string,\n index: number,\n ): boolean => {\n const { isBoundedQuantifier: check } = require(\"./regexp-validator\");\n return check(pattern, index);\n };\n\n /**\n * @internal - Exposed for test compatibility\n */\n public toNodeRecord(\n nodes: Record<string, SerializedNode>,\n ): Record<string, SerializedNode> {\n return toNodeRecord(nodes, this.unsafeKeys);\n }\n\n /**\n * @internal - Exposed for test compatibility\n */\n public deserializeValue(\n value: SerializedValue,\n context: DeserializationContext,\n depth: number = 0,\n ): unknown {\n return deserializeValueFn(value, context, depth, this.runtimeOptions);\n }\n\n /**\n * @internal - Exposed for test compatibility\n */\n public resolveReference(\n id: string,\n context: DeserializationContext,\n depth: number = 0,\n ): unknown {\n return resolveReferenceFn(id, context, depth, this.runtimeOptions);\n }\n\n /**\n * @internal - Exposed for test compatibility\n */\n public mergePlaceholder(placeholder: unknown, result: unknown): unknown {\n return mergePlaceholderFn(placeholder, result, this.unsafeKeys);\n }\n\n /**\n * @internal - Exposed for test compatibility\n */\n public isSerializedTypeRecord(\n value: unknown,\n ): value is { __type: string; value: unknown } {\n return isSerializedTypeRecord(value);\n }\n\n private jsonStringify(value: unknown): string {\n const type = typeof value;\n if (type === \"bigint\" || type === \"symbol\" || type === \"function\") {\n throw new TypeError(`Cannot stringify value of type \"${type}\"`);\n }\n return JSON.stringify(value ?? null, null, this.indent);\n }\n}\n","/* istanbul ignore file */\nimport { getPlatform } from \"../platform\";\nimport { ITaskMiddlewareConfigured } from \"../defs\";\nimport { requireContextTaskMiddleware } from \"../globals/middleware/requireContext.middleware\";\nimport { contextError, platformUnsupportedFunctionError } from \"../errors\";\nimport { IAsyncContext, IAsyncContextDefinition } from \"../types/asyncContext\";\nimport { Serializer } from \"../serializer\";\nimport {\n symbolAsyncContext,\n symbolFilePath,\n symbolOptionalDependency,\n} from \"../types/symbols\";\nimport { getCallerFile } from \"../tools/getCallerFile\";\n\nexport { contextError as ContextError };\n\n// The internal storage maps Context identifiers (symbols) to their values\nconst platform = getPlatform();\nexport const storage = platform.createAsyncLocalStorage<Map<string, unknown>>();\n\n/** Returns the currently active store or undefined. */\n/* istanbul ignore next */\nexport function getCurrentStore(): Map<string, unknown> | undefined {\n return storage.getStore();\n}\n/**\n * Create a new typed Context. The result contains helpers similar to React's\n * Context API but adapted for async usage in Runner.\n */\nexport function defineAsyncContext<T>(\n def: IAsyncContextDefinition<T>,\n filePath?: string,\n): IAsyncContext<T> {\n if (!platform.hasAsyncLocalStorage()) {\n platformUnsupportedFunctionError.throw({\n functionName: `createAsyncLocalStorage: Cannot create context ${def.id}: no async storage available in this environment`,\n });\n }\n\n const ctxId = def.id;\n const resolvedFilePath = filePath ?? getCallerFile();\n\n /* istanbul ignore next */\n const use = (): T => {\n const store = getCurrentStore();\n if (!store || !store.has(ctxId)) {\n contextError.throw({\n details: `Context not available for symbol ${ctxId.toString()}`,\n });\n }\n const s = store!;\n return s.get(ctxId) as T;\n };\n\n const provide = <R>(value: T, fn: () => Promise<R> | R): Promise<R> | R => {\n const currentStore = getCurrentStore();\n const map = currentStore\n ? new Map(currentStore)\n : new Map<string, unknown>();\n\n map.set(ctxId, value);\n\n // storage.run expects () => R, our fn is () => Promise<R> | R which is compatible\n return storage.run(map, fn as () => R);\n };\n\n const serializer = new Serializer();\n\n const api = {\n id: ctxId,\n [symbolAsyncContext]: true as const,\n [symbolFilePath]: resolvedFilePath,\n use,\n /* istanbul ignore next */\n provide(value: T, fn: () => Promise<any> | any) {\n // Validate provided context if schema exists\n const validated = def.configSchema\n ? def.configSchema.parse(value)\n : value;\n return provide(validated, fn);\n },\n require(): ITaskMiddlewareConfigured {\n return requireContextTaskMiddleware.with({\n context: api as IAsyncContext<T>,\n });\n },\n /* istanbul ignore next */\n serialize: def.serialize || ((data: T) => serializer.stringify(data)),\n /* istanbul ignore next */\n parse: def.parse || ((data: string) => serializer.parse(data)),\n optional() {\n return {\n inner: api as IAsyncContext<T>,\n [symbolOptionalDependency]: true,\n } as const;\n },\n };\n\n return api;\n}\n\nexport type { IAsyncContext } from \"../types/asyncContext\";\n\n/** Convenience creator allowing optional name. Used by tests and legacy API. */\n/** @deprecated Use defineAsyncContext instead */\n/* istanbul ignore next */\nexport function createContext<T>(name?: string): IAsyncContext<T> {\n const id =\n name ?? `context.${Math.random().toString(36).slice(2)}.${Date.now()}`;\n return defineAsyncContext<T>({ id });\n}\n","import { defineTag } from \"../../../define\";\nimport { DebugFriendlyConfig } from \"./types\";\n\nexport const debugTag = defineTag<DebugFriendlyConfig>({\n id: \"globals.tags.debug\",\n meta: {\n title: \"Debug\",\n description:\n \"Debug-specific tags. Used for filtering out noise when you're focusing on your application.\",\n },\n});\n","import { defineTag } from \"../../../define\";\nimport type { TunnelRunner } from \"./types\";\n\n// Marks a resource as a tunnel and enforces its value to satisfy TunnelRunner.\nexport const tunnelTag = defineTag<void, void, TunnelRunner>({\n id: \"globals.tags.tunnel\",\n meta: {\n title: \"Tunnel\",\n description:\n \"Marks a resource that exposes a runner to tunnel selected tasks (override task run() with resource.run(taskId, input)).\",\n },\n});\n","import { defineTag } from \"../../../define\";\nimport type { ITaskMiddleware } from \"../../../defs\";\n\nexport type TunnelPolicySide = \"client\" | \"server\";\n\nexport type TunnelMiddlewareId = string | ITaskMiddleware<any, any, any, any>;\n\nexport interface TunnelTaskMiddlewareSidePolicy {\n /**\n * Middleware ids/definitions allowed to run on this side when the task is tunneled.\n * If omitted, defaults to allowing none (caller-side middleware is skipped by default).\n */\n middlewareAllowList?: TunnelMiddlewareId[];\n}\n\nexport type TunnelTaskMiddlewarePolicySideConfig =\n | TunnelTaskMiddlewareSidePolicy\n | TunnelMiddlewareId[];\n\nexport interface TunnelTaskMiddlewarePolicyConfig {\n /**\n * Preferred configuration shape: explicit per-side allowlist.\n */\n client?: TunnelTaskMiddlewarePolicySideConfig;\n server?: TunnelTaskMiddlewarePolicySideConfig;\n\n /**\n * Backwards-compatible configuration shape (previous): grouped allowlists.\n */\n middlewareAllowList?: {\n client?: TunnelMiddlewareId[];\n server?: TunnelMiddlewareId[];\n };\n}\n\nexport const tunnelPolicyTag = defineTag<TunnelTaskMiddlewarePolicyConfig>({\n id: \"globals.tags.tunnel.middlewarePolicy\",\n meta: {\n title: \"Tunnel Middleware Policy\",\n description:\n \"Controls which middlewares run on caller vs executor when a task is tunneled (whitelist).\",\n },\n});\n","import { defineTag } from \"../define\";\nimport { debugTag } from \"./resources/debug/debug.tag\";\nimport { tunnelTag } from \"./resources/tunnel/tunnel.tag\";\nimport { tunnelPolicyTag } from \"./resources/tunnel/tunnel.policy.tag\";\n\nexport const globalTags = {\n system: defineTag<{\n metadata?: Record<string, any>;\n }>({\n id: \"globals.tags.system\",\n meta: {\n title: \"System\",\n description:\n \"System-wide tags. Used for filtering out noise when you're focusing on your application.\",\n },\n }),\n excludeFromGlobalHooks: defineTag<{\n metadata?: Record<string, any>;\n }>({\n id: \"globals.tags.excludeFromGlobalHooks\",\n meta: {\n title: \"Exclude Event From Global Hooks\",\n description:\n \"Marks events that should not be dispatched to global hooks (on: '*').\",\n },\n }),\n debug: debugTag,\n tunnel: tunnelTag,\n tunnelPolicy: tunnelPolicyTag,\n authValidator: defineTag({\n id: \"globals.tags.authValidator\",\n meta: {\n title: \"Auth Validator\",\n description:\n \"Marks tasks that validate HTTP requests for tunnel authentication.\",\n },\n }),\n};\n","import { defineEvent } from \"../define\";\nimport { IEvent } from \"../defs\";\nimport { globalTags } from \"./globalTags\";\n\nconst _systemTag = globalTags.system;\n\nexport const globalEvents = {\n // Minimal core events retained if any (custom events can still be defined by users)\n /**\n * Emitted when the system is fully initialized and ready for work.\n */\n ready: defineEvent({\n id: \"globals.events.ready\",\n meta: {\n title: \"System Ready\",\n description:\n \"Emitted when the system has completed boot and is ready for listeners to start work.\" +\n \"This runs right before returning value for run().\",\n },\n }),\n} as const;\n\nexport const globalEventsArray: IEvent<any>[] = [globalEvents.ready];\n","import {\n ExecutionJournal,\n JournalKey,\n JournalSetOptions,\n} from \"../types/executionJournal\";\n\n/**\n * Implementation of ExecutionJournal.\n * Created per task execution and passed through the middleware chain.\n */\nexport class ExecutionJournalImpl implements ExecutionJournal {\n private readonly store = new Map<string, unknown>();\n\n /**\n * Store a value in the journal.\n * Throws an error if the key already exists unless { override: true } is passed.\n */\n set<T>(key: JournalKey<T>, value: T, options?: JournalSetOptions): void {\n if (this.store.has(key.id) && !options?.override) {\n throw new Error(\n `Journal key \"${key.id}\" already exists. Use { override: true } to overwrite.`,\n );\n }\n this.store.set(key.id, value);\n }\n\n get<T>(key: JournalKey<T>): T | undefined {\n return this.store.get(key.id) as T | undefined;\n }\n\n has<T>(key: JournalKey<T>): boolean {\n return this.store.has(key.id);\n }\n}\n\n/**\n * Creates a typed journal key for use with ExecutionJournal.\n *\n * @example\n * ```typescript\n * const abortController = journal.createKey<AbortController>(\"timeout.abortController\");\n * journal.set(abortController, new AbortController());\n * const ctrl = journal.get(abortController); // AbortController | undefined\n * ```\n */\nfunction createKey<T>(id: string): JournalKey<T> {\n return { id } as JournalKey<T>;\n}\n\nexport const journal = {\n createKey,\n /**\n * Creates a new empty ExecutionJournal.\n * Useful when you need to pass a specific journal instance to `runTask` or nested calls.\n */\n create: (): ExecutionJournal => new ExecutionJournalImpl(),\n};\n","import { defineTaskMiddleware } from \"../../definers/defineTaskMiddleware\";\nimport { defineResource } from \"../../definers/defineResource\";\nimport { defineTask } from \"../../definers/defineTask\";\nimport { LRUCache } from \"lru-cache\";\nimport { journal as journalHelper } from \"../../models/ExecutionJournal\";\n\nexport interface ICacheInstance {\n set(key: string, value: any): void;\n get(key: string): any;\n clear(): void;\n /** Optional presence check to disambiguate cached undefined values */\n has?(key: string): boolean;\n}\n\n// Default cache factory task that can be overridden\nexport const cacheFactoryTask = defineTask({\n id: \"globals.tasks.cacheFactory\",\n run: async (\n options: LRUCache.Options<any, any, any>,\n ): Promise<ICacheInstance> => {\n return new LRUCache(options);\n },\n});\n\nexport interface CacheResourceConfig {\n defaultOptions?: any;\n}\n\ntype CacheMiddlewareConfig = {\n keyBuilder?: (taskId: string, input: any) => string;\n} & any;\n\n/**\n * Journal keys exposed by the cache middleware.\n * Use these to access shared state from downstream middleware or tasks.\n */\nexport const journalKeys = {\n /** Whether the result was served from cache (true) or freshly computed (false) */\n hit: journalHelper.createKey<boolean>(\"globals.middleware.cache.hit\"),\n} as const;\n\nexport const cacheResource = defineResource({\n id: \"globals.resources.cache\",\n register: [cacheFactoryTask],\n dependencies: {\n cacheFactoryTask,\n },\n init: async (config: CacheResourceConfig, { cacheFactoryTask }) => {\n return {\n map: new Map<string, ICacheInstance>(),\n cacheFactoryTask,\n defaultOptions: {\n ttl: 10 * 1000,\n max: 100, // Maximum number of items in cache\n ttlAutopurge: true, // Automatically purge expired items\n ...config.defaultOptions,\n },\n };\n },\n dispose: async (cache) => {\n for (const cacheInstance of cache.map.values()) {\n await cacheInstance.clear();\n }\n },\n});\n\nconst defaultKeyBuilder = (taskId: string, input: any) =>\n `${taskId}-${JSON.stringify(input)}`;\n\nexport const cacheMiddleware = defineTaskMiddleware({\n id: \"globals.middleware.cache\",\n dependencies: { cache: cacheResource },\n async run({ task, next, journal }, deps, config: CacheMiddlewareConfig) {\n const { cache } = deps;\n config = {\n keyBuilder: defaultKeyBuilder,\n ttl: 10 * 1000,\n max: 100, // Maximum number of items in cache\n ttlAutopurge: true, // Automatically purge expired items\n ...config,\n };\n\n const taskId = task!.definition.id;\n let cacheHolderForTask = cache.map.get(taskId)!;\n if (!cacheHolderForTask) {\n // Extract only LRUCache options, excluding keyBuilder\n const { keyBuilder, ...lruOptions } = config;\n const cacheOptions = {\n ...cache.defaultOptions,\n ...lruOptions,\n };\n\n // Use the factory task to create the cache instance\n cacheHolderForTask = await cache.cacheFactoryTask(cacheOptions);\n\n cache.map.set(taskId, cacheHolderForTask);\n }\n\n const key = config.keyBuilder!(taskId, task!.input);\n\n const cachedValue = await cacheHolderForTask.get(key);\n const hasCachedEntry =\n typeof cacheHolderForTask.has === \"function\"\n ? cacheHolderForTask.has(key)\n : cachedValue !== undefined;\n\n if (hasCachedEntry) {\n journal.set(journalKeys.hit, true, { override: true });\n return cachedValue;\n }\n\n journal.set(journalKeys.hit, false, { override: true });\n const result = await next(task!.input);\n\n await cacheHolderForTask.set(key, result);\n\n return result;\n },\n});\n","import { defineTaskMiddleware, defineResource } from \"../../define\";\nimport { journal as journalHelper } from \"../../models/ExecutionJournal\";\nimport { globalTags } from \"../globalTags\";\n\n/**\n * States of the Circuit Breaker\n */\nexport enum CircuitBreakerState {\n CLOSED = \"CLOSED\",\n OPEN = \"OPEN\",\n HALF_OPEN = \"HALF_OPEN\",\n}\n\n/**\n * Configuration for the Circuit Breaker middleware\n */\nexport interface CircuitBreakerMiddlewareConfig {\n /**\n * Number of failures before tripping the circuit\n * @default 5\n */\n failureThreshold?: number;\n /**\n * Time in milliseconds before transitioning from OPEN to HALF_OPEN\n * @default 30000 (30 seconds)\n */\n resetTimeout?: number;\n}\n\n/**\n * Error thrown when the circuit is OPEN\n */\nexport class CircuitBreakerOpenError extends Error {\n constructor(message: string) {\n super(message);\n this.name = \"CircuitBreakerOpenError\";\n }\n}\n\nexport interface CircuitBreakerStatus {\n state: CircuitBreakerState;\n failures: number;\n lastFailureTime: number;\n}\n\n/**\n * Journal keys exposed by the circuit breaker middleware.\n * Use these to access shared state from downstream middleware or tasks.\n */\nexport const journalKeys = {\n /** Current state of the circuit breaker (CLOSED, OPEN, or HALF_OPEN) */\n state: journalHelper.createKey<CircuitBreakerState>(\n \"globals.middleware.circuitBreaker.state\",\n ),\n /** Current failure count */\n failures: journalHelper.createKey<number>(\n \"globals.middleware.circuitBreaker.failures\",\n ),\n} as const;\n\nexport const circuitBreakerResource = defineResource({\n id: \"globals.resources.circuitBreaker\",\n tags: [globalTags.system],\n init: async () => {\n return {\n statusMap: new Map<string, CircuitBreakerStatus>(),\n };\n },\n});\n\nexport const circuitBreakerMiddleware = defineTaskMiddleware({\n id: \"globals.middleware.circuitBreaker\",\n dependencies: { state: circuitBreakerResource },\n async run(\n { task, next, journal },\n { state },\n config: CircuitBreakerMiddlewareConfig,\n ) {\n const taskId = task!.definition.id;\n const failureThreshold = config.failureThreshold ?? 5;\n const resetTimeout = config.resetTimeout ?? 30000;\n\n const { statusMap } = state;\n\n let status = statusMap.get(taskId);\n if (!status) {\n status = {\n state: CircuitBreakerState.CLOSED,\n failures: 0,\n lastFailureTime: 0,\n };\n statusMap.set(taskId, status);\n }\n\n const now = Date.now();\n\n // Handle OPEN state transition to HALF_OPEN\n if (status.state === CircuitBreakerState.OPEN) {\n if (now - status.lastFailureTime >= resetTimeout) {\n status.state = CircuitBreakerState.HALF_OPEN;\n } else {\n // Set journal values before throwing\n journal.set(journalKeys.state, status.state, { override: true });\n journal.set(journalKeys.failures, status.failures, { override: true });\n throw new CircuitBreakerOpenError(\n `Circuit is OPEN for task \"${taskId}\"`,\n );\n }\n }\n\n // Set journal values before executing\n journal.set(journalKeys.state, status.state, { override: true });\n journal.set(journalKeys.failures, status.failures, { override: true });\n\n try {\n const result = await next(task!.input);\n\n // If successful, we reset the failures counter\n if (\n status.state === CircuitBreakerState.HALF_OPEN ||\n status.state === CircuitBreakerState.CLOSED\n ) {\n status.failures = 0;\n }\n\n if (status.state === CircuitBreakerState.HALF_OPEN) {\n status.state = CircuitBreakerState.CLOSED;\n }\n\n return result;\n } catch (error) {\n status.failures++;\n status.lastFailureTime = Date.now();\n\n if (\n status.state === CircuitBreakerState.CLOSED &&\n status.failures >= failureThreshold\n ) {\n status.state = CircuitBreakerState.OPEN;\n } else if (status.state === CircuitBreakerState.HALF_OPEN) {\n status.state = CircuitBreakerState.OPEN;\n }\n\n throw error;\n }\n },\n});\n","import {\n DependencyValuesType,\n EventHandlerType,\n IEventEmission,\n} from \"../../defs\";\nimport { IHook } from \"../../types/hook\";\n\n/**\n * Default options for event handlers.\n */\nexport const HandlerOptionsDefaults = { order: 0 };\n\n/**\n * Internal storage structure for event listeners.\n */\nexport interface IListenerStorage {\n order: number;\n filter?: (event: IEventEmission<any>) => boolean;\n handler: EventHandlerType;\n /** Optional listener id (from IEventHandlerOptions.id) */\n id?: string;\n /** True when this listener originates from addGlobalListener(). */\n isGlobal: boolean;\n}\n\n/**\n * Options for configuring event listeners.\n */\nexport interface IEventHandlerOptions<T = any> {\n order?: number;\n filter?: (event: IEventEmission<T>) => boolean;\n /**\n * Represents the listener ID. Use this to avoid a listener calling itself.\n */\n id?: string;\n}\n\n/**\n * Interceptor for event emissions.\n */\nexport type EventEmissionInterceptor = (\n next: (event: IEventEmission<any>) => Promise<void>,\n event: IEventEmission<any>,\n) => Promise<void>;\n\n/**\n * Interceptor for hook execution.\n */\nexport type HookExecutionInterceptor = (\n next: (hook: IHook<any, any>, event: IEventEmission<any>) => Promise<any>,\n hook: IHook<any, any>,\n event: IEventEmission<any>,\n) => Promise<any>;\n\n/**\n * Shared contract for cycle-aware hook execution.\n */\nexport type HookExecutor = (\n hook: IHook<any, any>,\n event: IEventEmission<any>,\n computedDependencies: DependencyValuesType<any>,\n) => Promise<any>;\n\n/**\n * Utility shape representing an emission frame used for cycle detection.\n */\nexport interface IEmissionFrame {\n id: string;\n source: string;\n}\n","import { IEvent } from \"../../defs\";\nimport { globalTags } from \"../../globals/globalTags\";\nimport { HandlerOptionsDefaults, IListenerStorage } from \"./types\";\n\ntype IsExcludedFromGlobal = (event: IEvent<any>) => boolean;\n\n/**\n * Manages event-specific and global listener collections plus caching.\n * Keeps ordering invariant using binary insertion.\n */\nexport class ListenerRegistry {\n readonly listeners: Map<string, IListenerStorage[]> = new Map();\n readonly globalListeners: IListenerStorage[] = [];\n\n readonly cachedMergedListeners: Map<string, IListenerStorage[]> = new Map();\n private _globalListenersCacheValid = true;\n\n private readonly isExcludedFromGlobal: IsExcludedFromGlobal;\n\n constructor(isExcludedFromGlobal?: IsExcludedFromGlobal) {\n this.isExcludedFromGlobal =\n isExcludedFromGlobal ??\n ((event) => globalTags.excludeFromGlobalHooks.exists(event));\n }\n\n get globalListenersCacheValid() {\n return this._globalListenersCacheValid;\n }\n\n addListener(eventId: string, newListener: IListenerStorage): void {\n const listeners = this.listeners.get(eventId);\n if (listeners) {\n this.insertListener(listeners, newListener);\n } else {\n this.listeners.set(eventId, [newListener]);\n }\n this.invalidateCache(eventId);\n }\n\n addGlobalListener(newListener: IListenerStorage): void {\n this.insertListener(this.globalListeners, newListener);\n this.invalidateCache();\n }\n\n getListenersForEmit(eventDefinition: IEvent<any>): IListenerStorage[] {\n const excludeGlobal = this.isExcludedFromGlobal(eventDefinition);\n if (excludeGlobal) {\n return (this.listeners.get(eventDefinition.id) || []).slice();\n }\n return this.getCachedMergedListeners(eventDefinition.id);\n }\n\n hasListeners(eventDefinition: IEvent<any>): boolean {\n const eventListeners = this.listeners.get(eventDefinition.id) || [];\n\n if (eventListeners.length > 0) {\n return true;\n }\n\n if (this.globalListeners.length === 0) {\n return false;\n }\n\n return !this.isExcludedFromGlobal(eventDefinition);\n }\n\n /**\n * Cached merge between event-specific and global listeners.\n * Exposed for backward compatibility with existing tests.\n */\n clear(): void {\n this.listeners.clear();\n this.globalListeners.length = 0;\n this.cachedMergedListeners.clear();\n this._globalListenersCacheValid = true;\n }\n\n getCachedMergedListeners(eventId: string): IListenerStorage[] {\n if (!this._globalListenersCacheValid) {\n this.cachedMergedListeners.clear();\n this._globalListenersCacheValid = true;\n }\n\n let cached = this.cachedMergedListeners.get(eventId);\n if (!cached) {\n const eventListeners = this.listeners.get(eventId) || [];\n if (eventListeners.length === 0 && this.globalListeners.length === 0) {\n cached = [];\n } else if (eventListeners.length === 0) {\n cached = this.globalListeners.slice();\n } else if (this.globalListeners.length === 0) {\n cached = eventListeners.slice();\n } else {\n cached = this.mergeSortedListeners(\n eventListeners,\n this.globalListeners,\n );\n }\n this.cachedMergedListeners.set(eventId, cached);\n }\n // Return a shallow copy to ensure snapshot isolation.\n return cached.slice();\n }\n\n private invalidateCache(eventId?: string): void {\n if (eventId) {\n this.cachedMergedListeners.delete(eventId);\n } else {\n this._globalListenersCacheValid = false;\n }\n }\n\n private mergeSortedListeners(\n a: IListenerStorage[],\n b: IListenerStorage[],\n ): IListenerStorage[] {\n const result: IListenerStorage[] = [];\n let i = 0;\n let j = 0;\n\n while (i < a.length && j < b.length) {\n if (a[i].order <= b[j].order) {\n result.push(a[i++]);\n } else {\n result.push(b[j++]);\n }\n }\n\n while (i < a.length) result.push(a[i++]);\n while (j < b.length) result.push(b[j++]);\n\n return result;\n }\n\n private insertListener(\n listeners: IListenerStorage[],\n newListener: IListenerStorage,\n ): void {\n let low = 0;\n let high = listeners.length;\n while (low < high) {\n const mid = (low + high) >>> 1;\n if (listeners[mid].order < newListener.order) {\n low = mid + 1;\n } else {\n high = mid;\n }\n }\n listeners.splice(low, 0, newListener);\n }\n}\n\nexport function createListener(\n newListener: Partial<IListenerStorage>,\n): IListenerStorage {\n return {\n handler: newListener.handler!,\n order: newListener.order ?? HandlerOptionsDefaults.order,\n filter: newListener.filter,\n id: newListener.id,\n isGlobal: newListener.isGlobal ?? false,\n };\n}\n","/**\n * Utility to compose an array of interceptors into a single function.\n * Last-added interceptor executes first (LIFO).\n */\nexport function composeInterceptors<TArgs extends any[], TResult>(\n interceptors: Array<\n (\n next: (...args: TArgs) => Promise<TResult>,\n ...args: TArgs\n ) => Promise<TResult>\n >,\n base: (...args: TArgs) => Promise<TResult>,\n): (...args: TArgs) => Promise<TResult> {\n return interceptors\n .slice()\n .reverse()\n .reduce(\n (next, interceptor) =>\n (...args: TArgs) =>\n interceptor(next, ...args),\n base,\n );\n}\n","import { IEventEmission } from \"../../defs\";\nimport { IListenerStorage } from \"./types\";\n\n/**\n * Error type with optional listener metadata attached.\n */\ninterface ListenerError extends Error {\n listenerId?: string;\n listenerOrder?: number;\n}\n\n/**\n * Aggregate error containing multiple listener errors.\n */\ninterface ListenerAggregateError extends Error {\n errors: ListenerError[];\n}\n\ninterface ExecuteOptions {\n listeners: IListenerStorage[];\n event: IEventEmission<any>;\n isPropagationStopped: () => boolean;\n}\n\nexport async function executeSequentially({\n listeners,\n event,\n isPropagationStopped,\n}: ExecuteOptions): Promise<void> {\n for (const listener of listeners) {\n if (isPropagationStopped()) {\n break;\n }\n\n if (shouldExecuteListener(listener, event)) {\n await listener.handler(event);\n }\n }\n}\n\nexport async function executeInParallel({\n listeners,\n event,\n}: Omit<ExecuteOptions, \"isPropagationStopped\">): Promise<void> {\n if (listeners.length === 0 || event.isPropagationStopped()) {\n return;\n }\n\n let currentOrder = listeners[0].order;\n let currentBatch: typeof listeners = [];\n\n const executeBatch = async (batch: typeof listeners) => {\n const results = await Promise.allSettled(\n batch.map(async (listener) => {\n if (shouldExecuteListener(listener, event)) {\n await listener.handler(event);\n }\n }),\n );\n\n const errors = results\n .map((result, index) => ({ result, listener: batch[index] }))\n .filter(\n (\n r,\n ): r is { result: PromiseRejectedResult; listener: IListenerStorage } =>\n r.result.status === \"rejected\",\n )\n .map(({ result, listener }) => {\n const reason = result.reason;\n const errObj: ListenerError =\n reason && typeof reason === \"object\"\n ? (reason as ListenerError)\n : new Error(String(reason));\n\n if (errObj.listenerId === undefined) {\n errObj.listenerId = listener.id;\n }\n if (errObj.listenerOrder === undefined) {\n errObj.listenerOrder = listener.order;\n }\n\n return errObj;\n });\n\n if (errors.length > 0) {\n if (errors.length === 1) {\n throw errors[0];\n }\n const aggregateError: ListenerAggregateError = Object.assign(\n new Error(`${errors.length} listeners failed in parallel batch`),\n { errors, name: \"AggregateError\" },\n );\n throw aggregateError;\n }\n };\n\n for (const listener of listeners) {\n if (listener.order !== currentOrder) {\n await executeBatch(currentBatch);\n currentBatch = [];\n currentOrder = listener.order;\n\n if (event.isPropagationStopped()) {\n break;\n }\n }\n currentBatch.push(listener);\n }\n\n if (currentBatch.length > 0 && !event.isPropagationStopped()) {\n await executeBatch(currentBatch);\n }\n}\n\nexport function shouldExecuteListener(\n listener: IListenerStorage,\n event: IEventEmission<any>,\n): boolean {\n if (listener.id && listener.id === event.source) {\n return false;\n }\n return !listener.filter || listener.filter(event);\n}\n","import { eventCycleError } from \"../../errors\";\nimport { getPlatform, IAsyncLocalStorage } from \"../../platform\";\nimport { IEmissionFrame } from \"./types\";\n\nexport class CycleContext {\n private readonly emissionStack: IAsyncLocalStorage<IEmissionFrame[]> | null;\n private readonly currentHookIdContext: IAsyncLocalStorage<string> | null;\n readonly isEnabled: boolean;\n\n constructor(runtimeEventCycleDetection: boolean) {\n const platform = getPlatform();\n if (platform.hasAsyncLocalStorage() && runtimeEventCycleDetection) {\n this.emissionStack = platform.createAsyncLocalStorage<IEmissionFrame[]>();\n this.currentHookIdContext = platform.createAsyncLocalStorage<string>();\n this.isEnabled = true;\n } else {\n this.emissionStack = null;\n this.currentHookIdContext = null;\n this.isEnabled = false;\n }\n }\n\n runEmission<TResult>(\n frame: IEmissionFrame,\n source: string,\n processEmission: () => Promise<TResult>,\n ): Promise<TResult> {\n if (!this.isEnabled || !this.emissionStack || !this.currentHookIdContext) {\n return processEmission();\n }\n\n const currentStack = this.emissionStack.getStore();\n if (currentStack) {\n const cycleStart = currentStack.findIndex(\n (f: { id: string; source: string }) => f.id === frame.id,\n );\n if (cycleStart !== -1) {\n const top = currentStack[currentStack.length - 1];\n const currentHookId = this.currentHookIdContext.getStore();\n\n // Allow re-emission of the same event by the same hook (\"idempotent re-emit\"),\n // BUT ONLY IF the source is changing (e.g. initial->hook).\n // If the source is unchanged (hook->hook), it means the hook triggered itself, which is an infinite loop.\n const isSafeReEmit =\n top.id === frame.id &&\n currentHookId &&\n currentHookId === source &&\n top.source !== source;\n\n if (!isSafeReEmit) {\n eventCycleError.throw({\n path: [...currentStack.slice(cycleStart), frame],\n });\n }\n }\n }\n\n const nextStack = currentStack ? [...currentStack, frame] : [frame];\n return this.emissionStack.run(nextStack, processEmission);\n }\n\n runHook<T>(hookId: string, execute: () => Promise<T>): Promise<T> {\n if (!this.isEnabled || !this.currentHookIdContext) {\n return execute();\n }\n return this.currentHookIdContext.run(hookId, execute);\n }\n}\n","import {\n DependencyValuesType,\n EventHandlerType,\n IEvent,\n IEventEmission,\n} from \"../defs\";\nimport { lockedError, validationError } from \"../errors\";\nimport { IHook } from \"../types/hook\";\nimport {\n EventEmissionInterceptor,\n HandlerOptionsDefaults,\n HookExecutionInterceptor,\n IEventHandlerOptions,\n IListenerStorage,\n} from \"./event/types\";\nimport { ListenerRegistry, createListener } from \"./event/ListenerRegistry\";\nimport { composeInterceptors } from \"./event/InterceptorPipeline\";\nimport {\n executeInParallel,\n executeSequentially,\n} from \"./event/EmissionExecutor\";\nimport { CycleContext } from \"./event/CycleContext\";\n\n/**\n * EventManager handles event emission, listener registration, and event processing.\n * It supports both specific event listeners and global listeners that handle all events.\n * Listeners are processed in order based on their priority.\n */\nexport class EventManager {\n // Core storage for event listeners (kept for backward-compatibility with tests)\n private listeners: Map<string, IListenerStorage[]>;\n private globalListeners: IListenerStorage[];\n private cachedMergedListeners: Map<string, IListenerStorage[]>;\n\n // Interceptors storage (tests access these directly)\n private emissionInterceptors: EventEmissionInterceptor[] = [];\n private hookInterceptors: HookExecutionInterceptor[] = [];\n\n private readonly registry: ListenerRegistry;\n private readonly cycleContext: CycleContext;\n\n // Locking mechanism to prevent modifications after initialization\n #isLocked = false;\n\n // Feature flags\n private readonly runtimeEventCycleDetection: boolean;\n\n constructor(options?: { runtimeEventCycleDetection?: boolean }) {\n this.runtimeEventCycleDetection =\n options?.runtimeEventCycleDetection ?? true;\n this.registry = new ListenerRegistry();\n this.cycleContext = new CycleContext(this.runtimeEventCycleDetection);\n\n // expose registry collections for backward-compatibility (tests reach into these)\n this.listeners = this.registry.listeners;\n this.globalListeners = this.registry.globalListeners;\n this.cachedMergedListeners = this.registry.cachedMergedListeners;\n }\n\n // ==================== PUBLIC API ====================\n\n /**\n * Gets the current lock status of the EventManager\n */\n get isLocked() {\n return this.#isLocked;\n }\n\n /**\n * Locks the EventManager, preventing any further modifications to listeners\n */\n lock() {\n this.#isLocked = true;\n }\n\n /**\n * Emits an event to all registered listeners for that event type.\n * Listeners are processed in order of priority and can stop event propagation.\n *\n * @param eventDefinition - The event definition to emit\n * @param data - The event payload data\n * @param source - The source identifier of the event emitter\n */\n async emit<TInput>(\n eventDefinition: IEvent<TInput>,\n data: TInput,\n source: string,\n ): Promise<void> {\n await this.emitAndReturnEmission({ eventDefinition, data, source });\n }\n\n /**\n * Emits an event and returns the final payload.\n * The payload is taken from the deepest emission object that reached either:\n * - the base listener executor, or\n * - an interceptor that short-circuited the emission.\n *\n * This enables tunnel transports to return the final payload after local and/or remote delivery.\n */\n async emitWithResult<TInput>(\n eventDefinition: IEvent<TInput>,\n data: TInput,\n source: string,\n ): Promise<TInput> {\n const emission = await this.emitAndReturnEmission({\n eventDefinition,\n data,\n source,\n });\n return emission.data as TInput;\n }\n\n private async emitAndReturnEmission<TInput>(params: {\n eventDefinition: IEvent<TInput>;\n data: TInput;\n source: string;\n }): Promise<IEventEmission<TInput>> {\n const { eventDefinition, source } = params;\n let { data } = params;\n\n // Validate payload with schema if provided\n if (eventDefinition.payloadSchema) {\n try {\n data = eventDefinition.payloadSchema.parse(data);\n } catch (error) {\n validationError.throw({\n subject: \"Event payload\",\n id: eventDefinition.id,\n originalError:\n error instanceof Error ? error : new Error(String(error)),\n });\n }\n }\n\n const frame = { id: eventDefinition.id, source };\n const processEmission = async (): Promise<IEventEmission<TInput>> => {\n const allListeners = this.registry.getListenersForEmit(eventDefinition);\n\n let propagationStopped = false;\n\n const event: IEventEmission<TInput> = {\n id: eventDefinition.id,\n data,\n timestamp: new Date(),\n source,\n meta: { ...(eventDefinition.meta || {}) },\n stopPropagation: () => {\n propagationStopped = true;\n },\n isPropagationStopped: () => propagationStopped,\n tags: [...eventDefinition.tags],\n };\n\n // Create the base emission function\n const baseEmit = async (\n eventToEmit: IEventEmission<any>,\n ): Promise<void> => {\n if (allListeners.length === 0) {\n return;\n }\n\n if (eventDefinition.parallel) {\n await executeInParallel({\n listeners: allListeners,\n event: eventToEmit,\n });\n } else {\n await executeSequentially({\n listeners: allListeners,\n event: eventToEmit,\n isPropagationStopped: () => propagationStopped,\n });\n }\n };\n\n // Interceptors can replace the event object and/or short-circuit emission.\n // Track the deepest event object that was reached to extract the final payload.\n let deepestEvent: IEventEmission<any> = event as IEventEmission<any>;\n\n const runInterceptor = async (\n index: number,\n eventToEmit: IEventEmission<any>,\n ): Promise<void> => {\n deepestEvent = eventToEmit;\n const interceptor = this.emissionInterceptors[index];\n if (!interceptor) {\n return baseEmit(eventToEmit);\n }\n return interceptor((nextEvent) => {\n this.assertPropagationMethodsUnchanged(\n eventDefinition.id,\n eventToEmit,\n nextEvent,\n );\n return runInterceptor(index + 1, nextEvent);\n }, eventToEmit);\n };\n\n await runInterceptor(0, event as IEventEmission<any>);\n return deepestEvent as IEventEmission<TInput>;\n };\n\n return await this.cycleContext.runEmission(frame, source, processEmission);\n }\n\n /**\n * Registers an event listener for specific event(s).\n * Listeners are ordered by priority and executed in ascending order.\n *\n * @param event - The event definition(s) to listen for\n * @param handler - The callback function to handle the event\n * @param options - Configuration options for the listener\n */\n addListener<T>(\n event: IEvent<T> | Array<IEvent<T>>,\n handler: EventHandlerType<T>,\n options: IEventHandlerOptions<T> = HandlerOptionsDefaults,\n ): void {\n this.checkLock();\n const newListener = createListener({\n handler,\n order: options.order,\n filter: options.filter,\n id: options.id,\n isGlobal: false,\n });\n\n if (Array.isArray(event)) {\n event.forEach((id) => this.addListener(id, handler, options));\n } else {\n const eventId = event.id;\n this.registry.addListener(eventId, newListener);\n }\n }\n\n /**\n * Registers a global event listener that handles all events.\n * Global listeners are mixed with specific listeners and ordered by priority.\n *\n * @param handler - The callback function to handle events\n * @param options - Configuration options for the listener\n */\n addGlobalListener(\n handler: EventHandlerType,\n options: IEventHandlerOptions = HandlerOptionsDefaults,\n ): void {\n this.checkLock();\n const newListener = createListener({\n handler,\n order: options.order,\n filter: options.filter,\n id: options.id,\n isGlobal: true,\n });\n this.registry.addGlobalListener(newListener);\n }\n\n /**\n * Checks if there are any listeners registered for the given event\n *\n * @param eventDefinition - The event definition to check\n * @returns true if listeners exist, false otherwise\n */\n hasListeners<T>(eventDefinition: IEvent<T>): boolean {\n return this.registry.hasListeners(eventDefinition);\n }\n\n /**\n * Adds an interceptor for all event emissions\n * Interceptors are executed in the order they are added, with the ability to\n * modify, log, or prevent event emissions\n *\n * @param interceptor - The interceptor function to add\n */\n intercept(interceptor: EventEmissionInterceptor): void {\n this.checkLock();\n this.emissionInterceptors.push(interceptor);\n }\n\n /**\n * Adds an interceptor for hook execution\n * Interceptors are executed in the order they are added, with the ability to\n * modify, log, or prevent hook execution\n *\n * @param interceptor - The interceptor function to add\n */\n interceptHook(interceptor: HookExecutionInterceptor): void {\n this.checkLock();\n this.hookInterceptors.push(interceptor);\n }\n\n /**\n * Executes a hook with all registered hook interceptors applied\n * This method should be used by TaskRunner when executing hooks\n *\n * @param hook - The hook to execute\n * @param event - The event that triggered the hook\n * @param computedDependencies - The computed dependencies for the hook\n * @returns Promise resolving to the hook execution result\n */\n async executeHookWithInterceptors(\n hook: IHook<any, any>,\n event: IEventEmission<any>,\n computedDependencies: DependencyValuesType<any>,\n ): Promise<any> {\n const baseExecute = async (\n hookToExecute: IHook<any, any>,\n eventForHook: IEventEmission<any>,\n ): Promise<any> => {\n return hookToExecute.run(eventForHook, computedDependencies);\n };\n\n const executeWithInterceptors = composeInterceptors(\n this.hookInterceptors,\n baseExecute,\n );\n\n // Execute the hook with interceptors within current hook context\n return this.cycleContext.isEnabled\n ? await this.cycleContext.runHook(hook.id, () =>\n executeWithInterceptors(hook, event),\n )\n : await executeWithInterceptors(hook, event);\n }\n\n // ==================== PRIVATE METHODS ====================\n\n /**\n * Throws an error if the EventManager is locked\n */\n private checkLock() {\n if (this.#isLocked) {\n lockedError.throw({ what: \"EventManager\" });\n }\n }\n\n private assertPropagationMethodsUnchanged(\n eventId: string,\n currentEvent: IEventEmission<any>,\n nextEvent: IEventEmission<any>,\n ): void {\n if (\n nextEvent.stopPropagation !== currentEvent.stopPropagation ||\n nextEvent.isPropagationStopped !== currentEvent.isPropagationStopped\n ) {\n validationError.throw({\n subject: \"Event interceptor\",\n id: eventId,\n originalError: new Error(\n \"Interceptors cannot override stopPropagation/isPropagationStopped\",\n ),\n });\n }\n }\n\n /**\n * Disposes the EventManager, releasing all listeners and interceptors.\n */\n dispose(): void {\n this.registry.clear();\n this.emissionInterceptors.length = 0;\n this.hookInterceptors.length = 0;\n }\n\n /**\n * Retrieves cached merged listeners for an event, or creates them if not cached.\n * Kept for backward compatibility (tests spy on this).\n */\n private getCachedMergedListeners(eventId: string): IListenerStorage[] {\n return this.registry.getCachedMergedListeners(eventId);\n }\n}\n\n// Re-export public types for compatibility\nexport type { IEventHandlerOptions };\nexport type { EventEmissionInterceptor, HookExecutionInterceptor };\n","import { EventManager } from \"./EventManager\";\nimport { defineEvent } from \"../definers/defineEvent\";\nimport { IEventDefinition, IEventEmission } from \"../defs\";\n\nexport type SemaphoreEventType =\n | \"queued\"\n | \"acquired\"\n | \"released\"\n | \"timeout\"\n | \"aborted\"\n | \"disposed\";\n\n// Event definitions for Semaphore\nconst SemaphoreEvents = {\n queued: defineEvent<SemaphoreEvent>({ id: \"semaphore.queued\" }),\n acquired: defineEvent<SemaphoreEvent>({ id: \"semaphore.acquired\" }),\n released: defineEvent<SemaphoreEvent>({ id: \"semaphore.released\" }),\n timeout: defineEvent<SemaphoreEvent>({ id: \"semaphore.timeout\" }),\n aborted: defineEvent<SemaphoreEvent>({ id: \"semaphore.aborted\" }),\n disposed: defineEvent<SemaphoreEvent>({ id: \"semaphore.disposed\" }),\n} as const satisfies Record<\n SemaphoreEventType,\n IEventDefinition<SemaphoreEvent>\n>;\n\nexport type SemaphoreEvent = {\n type: SemaphoreEventType;\n permits: number;\n waiting: number;\n maxPermits: number;\n disposed: boolean;\n};\n\ninterface WaitingOperation {\n resolve: () => void;\n reject: (error: Error) => void;\n timeout?: NodeJS.Timeout;\n abortController?: AbortController;\n node?: WaitingNode;\n onPermit?: () => void;\n}\n\ninterface WaitingNode {\n op: WaitingOperation;\n next: WaitingNode | null;\n prev: WaitingNode | null;\n}\n\n/**\n * A semaphore that limits the number of concurrent operations.\n * Used to prevent connection pool exhaustion by limiting concurrent\n * database operations to the pool size.\n */\nexport class Semaphore {\n private permits: number;\n private waitingHead: WaitingNode | null = null;\n private waitingTail: WaitingNode | null = null;\n private waitingCount = 0;\n private disposed = false;\n private readonly maxPermits: number;\n private readonly eventManager = new EventManager();\n private listenerId = 0;\n private activeListeners = new Set<number>();\n\n constructor(maxPermits: number) {\n if (maxPermits <= 0) {\n throw new Error(\"maxPermits must be greater than 0\");\n }\n this.permits = maxPermits;\n this.maxPermits = maxPermits;\n }\n\n /**\n * Acquire a permit. If no permits are available, waits until one becomes available.\n */\n async acquire(options?: {\n timeout?: number;\n signal?: AbortSignal;\n }): Promise<void> {\n if (this.disposed) {\n throw new Error(\"Semaphore has been disposed\");\n }\n\n if (options?.signal?.aborted) {\n throw new Error(\"Operation was aborted\");\n }\n\n if (this.permits > 0) {\n this.permits--;\n this.emit(\"acquired\");\n return;\n }\n\n // No permits available, wait in queue\n return new Promise<void>((resolve, reject) => {\n const operation: WaitingOperation = {\n resolve,\n reject,\n onPermit: () => this.emit(\"acquired\"),\n };\n\n // Set up timeout if provided\n if (options?.timeout && options.timeout > 0) {\n operation.timeout = setTimeout(() => {\n this.removeFromQueue(operation);\n this.emit(\"timeout\");\n reject(\n new Error(`Semaphore acquire timeout after ${options.timeout}ms`),\n );\n }, options.timeout);\n }\n\n // Set up abort signal if provided\n if (options?.signal) {\n const abortHandler = () => {\n this.removeFromQueue(operation);\n this.emit(\"aborted\");\n reject(new Error(\"Operation was aborted\"));\n };\n options.signal.addEventListener(\"abort\", abortHandler, { once: true });\n\n // Clean up the abort listener when operation completes\n const originalResolve = operation.resolve;\n const originalReject = operation.reject;\n\n operation.resolve = () => {\n options.signal!.removeEventListener(\"abort\", abortHandler);\n originalResolve();\n };\n\n operation.reject = (error: Error) => {\n options.signal!.removeEventListener(\"abort\", abortHandler);\n originalReject(error);\n };\n }\n\n this.enqueue(operation);\n this.emit(\"queued\");\n });\n }\n\n /**\n * Release a permit, allowing waiting operations to proceed.\n */\n release(): void {\n if (this.disposed) {\n return;\n }\n\n const nextOperation = this.dequeue();\n if (nextOperation) {\n // Give permit directly to next waiting operation\n\n // Clear timeout if it exists\n if (nextOperation.timeout) {\n clearTimeout(nextOperation.timeout);\n }\n\n nextOperation.onPermit?.();\n nextOperation.resolve();\n } else {\n // No one waiting, increment available permits (but don't exceed max)\n this.permits = Math.min(this.permits + 1, this.maxPermits);\n }\n\n this.emit(\"released\");\n }\n\n private removeFromQueue(operation: WaitingOperation): void {\n const node = operation.node;\n if (!node) return;\n\n if (node.prev) {\n node.prev.next = node.next;\n } else {\n this.waitingHead = node.next;\n }\n\n if (node.next) {\n node.next.prev = node.prev;\n } else {\n this.waitingTail = node.prev;\n }\n\n operation.node = undefined;\n this.waitingCount = Math.max(0, this.waitingCount - 1);\n\n // Clear timeout if it exists\n if (operation.timeout) {\n clearTimeout(operation.timeout);\n }\n }\n\n /**\n * Execute a function with a permit, automatically releasing it afterwards.\n */\n async withPermit<T>(\n fn: () => Promise<T>,\n options?: { timeout?: number; signal?: AbortSignal },\n ): Promise<T> {\n await this.acquire(options);\n try {\n return await fn();\n } finally {\n this.release();\n }\n }\n\n /**\n * Dispose the semaphore, rejecting all waiting operations and preventing new ones.\n */\n dispose(): void {\n if (this.disposed) {\n return;\n }\n\n this.disposed = true;\n\n // Reject all waiting operations\n while (this.waitingHead) {\n const operation = this.dequeue()!;\n\n // Clear timeout if it exists\n if (operation.timeout) {\n clearTimeout(operation.timeout);\n }\n\n operation.reject(new Error(\"Semaphore has been disposed\"));\n }\n\n this.emit(\"disposed\");\n this.eventManager.dispose();\n }\n\n /**\n * Get current number of available permits (for debugging)\n */\n getAvailablePermits(): number {\n return this.permits;\n }\n\n /**\n * Get current number of waiting operations (for debugging)\n */\n getWaitingCount(): number {\n return this.waitingCount;\n }\n\n /**\n * Get maximum number of permits\n */\n getMaxPermits(): number {\n return this.maxPermits;\n }\n\n /**\n * Check if the semaphore has been disposed\n */\n isDisposed(): boolean {\n return this.disposed;\n }\n\n /**\n * Get metrics about the current state of the semaphore\n */\n getMetrics(): {\n availablePermits: number;\n waitingCount: number;\n maxPermits: number;\n utilization: number;\n disposed: boolean;\n } {\n return {\n availablePermits: this.permits,\n waitingCount: this.waitingCount,\n maxPermits: this.maxPermits,\n utilization: (this.maxPermits - this.permits) / this.maxPermits,\n disposed: this.disposed,\n };\n }\n\n on(\n type: SemaphoreEventType,\n handler: (event: SemaphoreEvent) => any,\n ): () => void {\n const id = ++this.listenerId;\n this.activeListeners.add(id);\n const eventDef = SemaphoreEvents[type];\n\n this.eventManager.addListener(\n eventDef,\n (emission: IEventEmission<SemaphoreEvent>) => {\n if (this.activeListeners.has(id)) {\n handler(emission.data);\n }\n },\n {\n id: `semaphore-listener-${id}`,\n filter: () => this.activeListeners.has(id),\n },\n );\n\n return () => {\n this.activeListeners.delete(id);\n };\n }\n\n once(\n type: SemaphoreEventType,\n handler: (event: SemaphoreEvent) => any,\n ): () => void {\n const id = ++this.listenerId;\n this.activeListeners.add(id);\n const eventDef = SemaphoreEvents[type];\n\n this.eventManager.addListener(\n eventDef,\n (emission: IEventEmission<SemaphoreEvent>) => {\n if (this.activeListeners.has(id)) {\n this.activeListeners.delete(id);\n handler(emission.data);\n }\n },\n {\n id: `semaphore-listener-once-${id}`,\n filter: () => this.activeListeners.has(id),\n },\n );\n\n return () => {\n this.activeListeners.delete(id);\n };\n }\n\n private enqueue(operation: WaitingOperation): void {\n const node: WaitingNode = {\n op: operation,\n next: null,\n prev: this.waitingTail,\n };\n\n if (this.waitingTail) {\n this.waitingTail.next = node;\n } else {\n this.waitingHead = node;\n }\n\n this.waitingTail = node;\n operation.node = node;\n this.waitingCount++;\n }\n\n private dequeue(): WaitingOperation | null {\n const node = this.waitingHead;\n if (!node) return null;\n\n const next = node.next;\n if (next) {\n next.prev = null;\n } else {\n this.waitingTail = null;\n }\n\n this.waitingHead = next;\n node.next = null;\n node.prev = null;\n node.op.node = undefined;\n this.waitingCount = Math.max(0, this.waitingCount - 1);\n\n return node.op;\n }\n\n private emit(type: SemaphoreEventType): void {\n const eventDef = SemaphoreEvents[type];\n // Fire-and-forget to maintain synchronous behavior, but always catch to avoid\n // process-level unhandledRejection if a lifecycle listener throws.\n void this.eventManager\n .emit(eventDef, this.buildEvent(type), \"semaphore\")\n .catch(() => {});\n }\n\n private buildEvent(type: SemaphoreEventType): SemaphoreEvent {\n return {\n type,\n permits: this.permits,\n waiting: this.waitingCount,\n maxPermits: this.maxPermits,\n disposed: this.disposed,\n };\n }\n}\n","import { defineTaskMiddleware, defineResource } from \"../../define\";\nimport { Semaphore } from \"../../models/Semaphore\";\nimport { globalTags } from \"../globalTags\";\n\nexport interface ConcurrencyMiddlewareConfig {\n /**\n * Maximum number of concurrent executions.\n * If provided, a Semaphore will be created and shared for this config object.\n */\n limit?: number;\n\n /**\n * Optional key to identify a shared semaphore.\n * If provided, the semaphore will be shared across all tasks using the same key.\n */\n key?: string;\n\n /**\n * An existing Semaphore instance to use.\n */\n semaphore?: Semaphore;\n}\n\nexport interface ConcurrencyState {\n semaphoresByConfig: WeakMap<ConcurrencyMiddlewareConfig, Semaphore>;\n semaphoresByKey: Map<string, { semaphore: Semaphore; limit: number }>;\n}\n\nexport const concurrencyResource = defineResource({\n id: \"globals.resources.concurrency\",\n tags: [globalTags.system],\n init: async () => ({\n semaphoresByConfig: new WeakMap<ConcurrencyMiddlewareConfig, Semaphore>(),\n semaphoresByKey: new Map<string, { semaphore: Semaphore; limit: number }>(),\n }),\n});\n\n/**\n * Middleware that limits concurrency of task executions using a Semaphore.\n */\nexport const concurrencyTaskMiddleware = defineTaskMiddleware({\n id: \"globals.middleware.concurrency\",\n dependencies: { state: concurrencyResource },\n async run({ task, next }, { state }, config: ConcurrencyMiddlewareConfig) {\n let semaphore = config.semaphore;\n\n if (!semaphore && config.limit !== undefined) {\n if (config.key !== undefined) {\n const existing = state.semaphoresByKey.get(config.key);\n if (existing) {\n if (existing.limit !== config.limit) {\n throw new Error(\n `Concurrency middleware key \"${config.key}\" is already registered with limit ${existing.limit}, but got ${config.limit}`,\n );\n }\n semaphore = existing.semaphore;\n } else {\n semaphore = new Semaphore(config.limit);\n state.semaphoresByKey.set(config.key, {\n semaphore,\n limit: config.limit,\n });\n }\n } else {\n semaphore = state.semaphoresByConfig.get(config);\n if (!semaphore) {\n semaphore = new Semaphore(config.limit);\n state.semaphoresByConfig.set(config, semaphore);\n }\n }\n }\n\n if (!semaphore) {\n // If no limit or semaphore is provided, just proceed\n return next(task?.input);\n }\n\n return semaphore.withPermit(() => next(task?.input));\n },\n});\n","import { defineResource, defineTaskMiddleware } from \"../../define\";\nimport { journal as journalHelper } from \"../../models/ExecutionJournal\";\nimport { globalTags } from \"../globalTags\";\n\nexport interface RateLimitMiddlewareConfig {\n /**\n * Time window in milliseconds\n */\n windowMs: number;\n /**\n * Maximum number of requests within the window\n */\n max: number;\n}\n\nfunction assertRateLimitMiddlewareConfig(\n config: unknown,\n): asserts config is RateLimitMiddlewareConfig {\n if (!config || typeof config !== \"object\") {\n throw new TypeError(\n \"rateLimitTaskMiddleware requires .with({ windowMs, max }) configuration.\",\n );\n }\n\n const maybe = config as Partial<RateLimitMiddlewareConfig>;\n if (maybe.windowMs === undefined || maybe.max === undefined) {\n throw new TypeError(\n \"rateLimitTaskMiddleware requires .with({ windowMs, max }) configuration.\",\n );\n }\n\n if (!Number.isFinite(maybe.windowMs) || (maybe.windowMs as number) <= 0) {\n throw new TypeError(\n \"rateLimitTaskMiddleware requires a positive number for config.windowMs.\",\n );\n }\n\n if (!Number.isFinite(maybe.max) || (maybe.max as number) <= 0) {\n throw new TypeError(\n \"rateLimitTaskMiddleware requires a positive number for config.max.\",\n );\n }\n}\n\nconst rateLimitConfigSchema = {\n parse: (config: unknown) => {\n assertRateLimitMiddlewareConfig(config);\n return config;\n },\n};\n\n/**\n * Custom error class for rate limit errors.\n */\nexport class RateLimitError extends Error {\n constructor(message: string) {\n super(message);\n this.name = \"RateLimitError\";\n }\n}\n\nexport interface RateLimitState {\n count: number;\n resetTime: number;\n}\n\n/**\n * Journal keys exposed by the rate limit middleware.\n * Use these to access shared state from downstream middleware or tasks.\n */\nexport const journalKeys = {\n /** Number of remaining requests in the current window */\n remaining: journalHelper.createKey<number>(\n \"globals.middleware.rateLimit.remaining\",\n ),\n /** Timestamp when the current window resets */\n resetTime: journalHelper.createKey<number>(\n \"globals.middleware.rateLimit.resetTime\",\n ),\n /** Maximum requests allowed per window */\n limit: journalHelper.createKey<number>(\"globals.middleware.rateLimit.limit\"),\n} as const;\n\nexport const rateLimitResource = defineResource({\n id: \"globals.resources.rateLimit\",\n tags: [globalTags.system],\n init: async () => {\n return {\n states: new WeakMap<RateLimitMiddlewareConfig, RateLimitState>(),\n };\n },\n});\n\n/**\n * Rate limit middleware: limits the number of executions within a fixed time window.\n */\nexport const rateLimitTaskMiddleware = defineTaskMiddleware({\n id: \"globals.middleware.rateLimit\",\n configSchema: rateLimitConfigSchema,\n dependencies: { state: rateLimitResource },\n async run(\n { task, next, journal },\n { state },\n config: RateLimitMiddlewareConfig,\n ) {\n assertRateLimitMiddlewareConfig(config);\n\n const { states } = state;\n let limitState = states.get(config);\n const now = Date.now();\n\n if (!limitState || now > limitState.resetTime) {\n limitState = {\n count: 0,\n resetTime: now + config.windowMs,\n };\n states.set(config, limitState);\n }\n\n // Set journal values before checking limits\n const remaining = Math.max(0, config.max - limitState.count);\n journal.set(journalKeys.remaining, remaining, { override: true });\n journal.set(journalKeys.resetTime, limitState.resetTime, {\n override: true,\n });\n journal.set(journalKeys.limit, config.max, { override: true });\n\n if (limitState.count >= config.max) {\n throw new RateLimitError(\n `Rate limit exceeded. Try again after ${new Date(\n limitState.resetTime,\n ).toISOString()}`,\n );\n }\n\n limitState.count++;\n // Update remaining after incrementing count\n journal.set(journalKeys.remaining, config.max - limitState.count, {\n override: true,\n });\n return await next(task.input);\n },\n});\n","import { defineTaskMiddleware, defineResource } from \"../../define\";\nimport { globalTags } from \"../globalTags\";\n\nexport interface TemporalMiddlewareConfig {\n ms: number;\n}\n\nexport interface DebounceState {\n timeoutId?: NodeJS.Timeout;\n latestInput?: any;\n resolveList: ((value: any) => void)[];\n rejectList: ((error: any) => void)[];\n}\n\nexport interface ThrottleState {\n lastExecution: number;\n timeoutId?: NodeJS.Timeout;\n latestInput?: any;\n resolveList: ((value: any) => void)[];\n rejectList: ((error: any) => void)[];\n currentPromise?: Promise<any>;\n}\n\nexport const temporalResource = defineResource({\n id: \"globals.resources.temporal\",\n tags: [globalTags.system],\n init: async () => {\n return {\n debounceStates: new WeakMap<TemporalMiddlewareConfig, DebounceState>(),\n throttleStates: new WeakMap<TemporalMiddlewareConfig, ThrottleState>(),\n };\n },\n});\n\n/**\n * Debounce middleware: delays execution until `ms` has passed since the last call.\n * If multiple calls occur within the window, only the last one is executed,\n * and all callers receive the same result.\n */\nexport const debounceTaskMiddleware = defineTaskMiddleware({\n id: \"globals.middleware.debounce\",\n dependencies: { state: temporalResource },\n async run({ task, next }, { state }, config: TemporalMiddlewareConfig) {\n const { debounceStates } = state;\n let debounceState = debounceStates.get(config);\n if (!debounceState) {\n debounceState = {\n resolveList: [],\n rejectList: [],\n };\n debounceStates.set(config, debounceState);\n }\n\n debounceState.latestInput = task.input;\n\n if (debounceState.timeoutId) {\n clearTimeout(debounceState.timeoutId);\n }\n\n const promise = new Promise((resolve, reject) => {\n debounceState!.resolveList.push(resolve);\n debounceState!.rejectList.push(reject);\n });\n\n debounceState.timeoutId = setTimeout(async () => {\n const { resolveList, rejectList, latestInput } = debounceState!;\n debounceState!.timeoutId = undefined;\n debounceState!.resolveList = [];\n debounceState!.rejectList = [];\n debounceState!.latestInput = undefined;\n\n try {\n const result = await next(latestInput);\n resolveList.forEach((resolve) => resolve(result));\n } catch (error) {\n rejectList.forEach((reject) => reject(error));\n }\n }, config.ms);\n\n return promise;\n },\n});\n\n/**\n * Throttle middleware: ensures execution at most once every `ms`.\n * If calls occur within the window, the last one is scheduled for the end of the window.\n */\nexport const throttleTaskMiddleware = defineTaskMiddleware({\n id: \"globals.middleware.throttle\",\n dependencies: { state: temporalResource },\n async run({ task, next }, { state }, config: TemporalMiddlewareConfig) {\n const { throttleStates } = state;\n let throttleState = throttleStates.get(config);\n if (!throttleState) {\n throttleState = {\n lastExecution: 0,\n resolveList: [],\n rejectList: [],\n };\n throttleStates.set(config, throttleState);\n }\n\n const now = Date.now();\n const remaining = config.ms - (now - throttleState.lastExecution);\n\n if (remaining <= 0) {\n let pendingResolves: Array<(value: any) => void> = [];\n let pendingRejects: Array<(error: any) => void> = [];\n\n if (throttleState.timeoutId) {\n // This can happen if a scheduled timeout from the previous window is\n // still pending (eg: event-loop stalls). Cancel it and settle its callers\n // using the immediate execution result.\n pendingResolves = throttleState.resolveList;\n pendingRejects = throttleState.rejectList;\n\n clearTimeout(throttleState.timeoutId);\n throttleState.timeoutId = undefined;\n throttleState.resolveList = [];\n throttleState.rejectList = [];\n throttleState.currentPromise = undefined;\n throttleState.latestInput = undefined;\n }\n throttleState.lastExecution = now;\n try {\n const result = await next(task.input);\n pendingResolves.forEach((resolve) => resolve(result));\n return result;\n } catch (error) {\n pendingRejects.forEach((reject) => reject(error));\n throw error;\n }\n } else {\n throttleState.latestInput = task.input;\n if (!throttleState.timeoutId) {\n throttleState.currentPromise = new Promise((resolve, reject) => {\n throttleState!.resolveList.push(resolve);\n throttleState!.rejectList.push(reject);\n });\n\n throttleState.timeoutId = setTimeout(async () => {\n const { resolveList, rejectList, latestInput } = throttleState!;\n throttleState!.timeoutId = undefined;\n throttleState!.lastExecution = Date.now();\n throttleState!.resolveList = [];\n throttleState!.rejectList = [];\n throttleState!.currentPromise = undefined;\n\n try {\n const result = await next(latestInput);\n resolveList.forEach((resolve) => resolve(result));\n } catch (error) {\n rejectList.forEach((reject) => reject(error));\n }\n }, remaining);\n } else {\n // Update input for the scheduled execution\n throttleState.latestInput = task.input;\n return new Promise((resolve, reject) => {\n throttleState!.resolveList.push(resolve);\n throttleState!.rejectList.push(reject);\n });\n }\n return throttleState.currentPromise;\n }\n },\n});\n","import { getPlatform } from \"../platform\";\nimport { EventManager } from \"./EventManager\";\nimport { defineEvent } from \"../definers/defineEvent\";\nimport { IEventDefinition, IEventEmission } from \"../defs\";\n\nexport type QueueEventType =\n | \"enqueue\"\n | \"start\"\n | \"finish\"\n | \"error\"\n | \"cancel\"\n | \"disposed\";\n\n// Event definitions for Queue\nconst QueueEvents = {\n enqueue: defineEvent<QueueEvent>({ id: \"queue.enqueue\" }),\n start: defineEvent<QueueEvent>({ id: \"queue.start\" }),\n finish: defineEvent<QueueEvent>({ id: \"queue.finish\" }),\n error: defineEvent<QueueEvent>({ id: \"queue.error\" }),\n cancel: defineEvent<QueueEvent>({ id: \"queue.cancel\" }),\n disposed: defineEvent<QueueEvent>({ id: \"queue.disposed\" }),\n} as const satisfies Record<QueueEventType, IEventDefinition<QueueEvent>>;\n\nexport type QueueEvent = {\n type: QueueEventType;\n taskId: number;\n disposed: boolean;\n error?: Error;\n};\n\n/**\n * Cooperative task queue.\n * • Tasks run one‑after‑another (FIFO ordering).\n * • Dead‑lock detection prevents nesting.\n * • dispose() drains or cancels outstanding tasks, then rejects new ones.\n */\nexport class Queue {\n private tail: Promise<unknown> = Promise.resolve();\n private disposed = false;\n private abortController = new AbortController();\n private readonly eventManager = new EventManager();\n private nextTaskId = 1;\n private listenerId = 0;\n private activeListeners = new Set<number>();\n\n // true while inside a queued task → helps detect \"queue in queue\"\n private readonly executionContext =\n getPlatform().createAsyncLocalStorage<boolean>();\n\n private readonly hasAsyncLocalStorage = getPlatform().hasAsyncLocalStorage();\n\n /**\n * Schedule an asynchronous task.\n * @param task – receives an AbortSignal so it can cancel early if desired.\n */\n public run<T>(task: (signal: AbortSignal) => Promise<T>): Promise<T> {\n // 1. refuse new work if we've disposed\n if (this.disposed) {\n return Promise.reject(new Error(\"Queue has been disposed\"));\n }\n\n // 2. detect dead‑locks (a queued task adding another queued task)\n if (this.hasAsyncLocalStorage && this.executionContext.getStore()) {\n return Promise.reject(\n new Error(\n \"Dead‑lock detected: a queued task attempted to queue another task\",\n ),\n );\n }\n\n const { signal } = this.abortController;\n const taskId = this.nextTaskId++;\n this.emit(\"enqueue\", taskId);\n\n // 3. chain task after the current tail\n const result = this.tail.then(() => {\n this.emit(\"start\", taskId);\n return this.hasAsyncLocalStorage\n ? this.executionContext.run(true, () => task(signal))\n : task(signal);\n });\n\n // 4. preserve the chain even if the task rejects (swallow internally)\n this.tail = result\n .then((value) => {\n this.emit(\"finish\", taskId);\n return value;\n })\n .catch((error) => {\n this.emit(\"error\", taskId, error as Error);\n });\n\n return result;\n }\n\n /**\n * Disposes the queue.\n * @param options.cancel – if true, broadcasts AbortSignal to running task.\n * default: false (waits for tasks to finish).\n */\n public async dispose(options: { cancel?: boolean } = {}): Promise<void> {\n if (this.disposed) return;\n\n this.disposed = true;\n this.emit(\"disposed\", 0);\n\n if (options.cancel) {\n this.abortController.abort(); // notify cooperative tasks\n this.emit(\"cancel\", 0);\n }\n\n // wait for everything already chained to settle\n await this.tail.catch(() => {});\n\n this.eventManager.dispose();\n }\n\n on(type: QueueEventType, handler: (event: QueueEvent) => any): () => void {\n const id = ++this.listenerId;\n this.activeListeners.add(id);\n const eventDef = QueueEvents[type];\n\n this.eventManager.addListener(\n eventDef,\n (emission: IEventEmission<QueueEvent>) => {\n if (this.activeListeners.has(id)) {\n handler(emission.data);\n }\n },\n {\n id: `queue-listener-${id}`,\n filter: () => this.activeListeners.has(id),\n },\n );\n\n return () => {\n this.activeListeners.delete(id);\n };\n }\n\n once(type: QueueEventType, handler: (event: QueueEvent) => any): () => void {\n const id = ++this.listenerId;\n this.activeListeners.add(id);\n const eventDef = QueueEvents[type];\n\n this.eventManager.addListener(\n eventDef,\n (emission: IEventEmission<QueueEvent>) => {\n if (this.activeListeners.has(id)) {\n this.activeListeners.delete(id);\n handler(emission.data);\n }\n },\n {\n id: `queue-listener-once-${id}`,\n filter: () => this.activeListeners.has(id),\n },\n );\n\n return () => {\n this.activeListeners.delete(id);\n };\n }\n\n private emit(type: QueueEventType, taskId: number, error?: Error): void {\n const eventDef = QueueEvents[type];\n // Fire-and-forget to maintain synchronous behavior, but always catch to avoid\n // process-level unhandledRejection if a lifecycle listener throws.\n void this.eventManager\n .emit(\n eventDef,\n {\n type,\n taskId,\n disposed: this.disposed,\n error,\n },\n \"queue\",\n )\n .catch(() => {});\n }\n}\n","import { defineResource } from \"../../define\";\nimport { Queue } from \"../../models/Queue\";\n\nexport const queueResource = defineResource({\n id: \"globals.resources.queue\",\n context: () => ({\n map: new Map<string, Queue>(),\n }),\n init: async (_, _deps, context) => {\n const map = context.map;\n\n return {\n map,\n run: <T>(\n id: string,\n task: (signal: AbortSignal) => Promise<T>,\n ): Promise<T> => {\n if (!map.has(id)) {\n map.set(id, new Queue());\n }\n\n return map.get(id)!.run(task);\n },\n };\n },\n dispose: async (_value, _, _deps, context) => {\n context.map.forEach((queue) => queue.dispose());\n },\n meta: {\n title: \"Queue Map\",\n description:\n \"A global map that can be used to store and retrieve queues. You can run exclusive tasks based on using an id. queue.run(id, task) will run the task in the queue with the given id. If the queue does not exist, it will be created.\",\n },\n});\n","import type { ITask, IEventEmission } from \"../../../defs\";\n\nexport interface ProtocolErrorShape {\n code: string;\n message: string;\n details?: unknown;\n // Optional app error identity and payload (when server sends typed errors)\n id?: string;\n data?: unknown;\n}\n\nexport interface ProtocolEnvelope<T = unknown> {\n ok: boolean;\n result?: T;\n error?: ProtocolErrorShape;\n meta?: { protocolVersion?: string; traceId?: string; taskVersion?: string };\n}\n\nexport interface TaskRequest {\n id: string;\n input?: unknown;\n plan?: unknown; // ExecutionPlan will plug here in Task 2\n context?: Record<string, unknown>;\n traceId?: string;\n}\n\nexport interface EventRequest {\n id: string;\n payload?: unknown;\n returnPayload?: boolean;\n context?: Record<string, unknown>;\n traceId?: string;\n}\n\nexport class TunnelError extends Error {\n public readonly code: string;\n public readonly details?: unknown;\n public readonly id?: string;\n public readonly data?: unknown;\n\n constructor(\n code: string,\n message: string,\n details?: unknown,\n extras?: { id?: string; data?: unknown },\n ) {\n super(message);\n this.name = \"TunnelError\";\n this.code = code;\n this.details = details;\n this.id = extras?.id;\n this.data = extras?.data;\n }\n}\n\nexport function toTunnelError(\n input: unknown,\n fallbackMessage?: string,\n): TunnelError {\n if (input instanceof Error) {\n return new TunnelError(\"UNKNOWN\", input.message);\n }\n if (\n input &&\n typeof input === \"object\" &&\n \"code\" in input &&\n \"message\" in input\n ) {\n const typed = input as { code: unknown; message: unknown };\n if (typeof typed.message === \"string\" && typeof typed.code === \"string\") {\n const pe = input as ProtocolErrorShape;\n const msg = pe.message || fallbackMessage || \"Tunnel error\";\n return new TunnelError(pe.code, msg, pe.details, {\n id: pe.id,\n data: pe.data,\n });\n }\n }\n\n if (input && typeof input === \"object\" && \"message\" in input) {\n const typed = input as { message: unknown };\n if (typeof typed.message === \"string\") {\n return new TunnelError(\"UNKNOWN\", typed.message);\n }\n }\n\n return new TunnelError(\n \"UNKNOWN\",\n (typeof input === \"string\" && input) || fallbackMessage || \"Tunnel error\",\n );\n}\n\nexport function assertOkEnvelope<T>(\n envelope: ProtocolEnvelope<T> | undefined,\n opts?: { fallbackMessage?: string },\n): T {\n if (!envelope || typeof envelope !== \"object\") {\n throw new TunnelError(\n \"INVALID_RESPONSE\",\n opts?.fallbackMessage || \"Invalid or empty response\",\n );\n }\n if (envelope.ok) {\n return envelope.result as T;\n }\n if (envelope.error) {\n return ((): never => {\n throw toTunnelError(envelope.error, opts?.fallbackMessage);\n })();\n }\n throw new TunnelError(\"UNKNOWN\", opts?.fallbackMessage || \"Tunnel error\");\n}\n\nexport async function runViaTunnel(\n runner: (\n task: ITask<any, any, any, any, any, any>,\n input?: unknown,\n ) => Promise<unknown>,\n task: ITask<any, any, any, any, any, any>,\n input?: unknown,\n): Promise<unknown> {\n return runner(task, input);\n}\n\nexport async function emitViaTunnel(\n runner: (emission: IEventEmission<any>) => Promise<unknown>,\n emission: IEventEmission<any>,\n): Promise<void> {\n await runner(emission);\n}\n","export function normalizeError(input: unknown): Error {\n return input instanceof Error ? input : new Error(String(input));\n}\n","import {\n assertOkEnvelope,\n ProtocolEnvelope,\n TunnelError,\n} from \"./globals/resources/tunnel/protocol\";\nimport type { SerializerLike } from \"./serializer\";\nimport type {\n ExposureFetchConfig,\n ExposureFetchClient,\n} from \"./globals/resources/tunnel/types\";\nexport { normalizeError } from \"./globals/resources/tunnel/error-utils\";\nexport type {\n ExposureFetchAuthConfig,\n ExposureFetchConfig,\n ExposureFetchClient,\n} from \"./globals/resources/tunnel/types\";\n\n// normalizeError is re-exported from error-utils for public API\n\nasync function postSerialized<T = any>(options: {\n fetch: typeof fetch;\n url: string;\n body: unknown;\n headers: Record<string, string>;\n timeoutMs?: number;\n serializer: SerializerLike;\n onRequest?: (ctx: {\n url: string;\n headers: Record<string, string>;\n }) => void | Promise<void>;\n contextHeaderText?: string;\n}): Promise<T> {\n const {\n fetch: fetchFn,\n url,\n body,\n headers,\n timeoutMs,\n serializer,\n onRequest,\n contextHeaderText,\n } = options;\n const controller =\n timeoutMs && timeoutMs > 0 ? new AbortController() : undefined;\n let timeout: ReturnType<typeof setTimeout> | undefined;\n try {\n if (controller) {\n timeout = setTimeout(() => controller.abort(), timeoutMs);\n }\n const reqHeaders = {\n \"content-type\": \"application/json; charset=utf-8\",\n ...headers,\n } as Record<string, string>;\n if (contextHeaderText) reqHeaders[\"x-runner-context\"] = contextHeaderText;\n if (onRequest) await onRequest({ url, headers: reqHeaders });\n const res = await fetchFn(url, {\n method: \"POST\",\n headers: reqHeaders,\n body: serializer.stringify(body),\n signal: controller?.signal,\n });\n\n const text = await res.text();\n const json = text ? serializer.parse<T>(text) : (undefined as unknown as T);\n return json;\n } finally {\n if (timeout) clearTimeout(timeout);\n }\n}\n\n/**\n * This functions communicates with the exposure server over HTTP.\n * It uses the @readmes/TUNNEL_HTTP_POLICY.md strategy.\n *\n * @param cfg\n * @returns\n */\nexport function createExposureFetch(\n cfg: ExposureFetchConfig,\n): ExposureFetchClient {\n const baseUrl = cfg?.baseUrl?.replace(/\\/$/, \"\");\n if (!baseUrl) throw new Error(\"createExposureFetch requires baseUrl\");\n\n const headerName = (cfg?.auth?.header ?? \"x-runner-token\").toLowerCase();\n const buildHeaders = () => {\n const headers: Record<string, string> = {};\n if (cfg?.auth?.token) headers[headerName] = cfg.auth.token;\n return headers;\n };\n\n const fetchImpl = cfg.fetchImpl ?? (globalThis.fetch as typeof fetch);\n if (typeof fetchImpl !== \"function\") {\n throw new Error(\n \"global fetch is not available; provide fetchImpl in config\",\n );\n }\n\n const buildContextHeader = () => {\n if (!cfg.contexts || cfg.contexts.length === 0) return undefined;\n const map: Record<string, string> = {};\n for (const ctx of cfg.contexts) {\n try {\n const v = ctx.use();\n map[ctx.id] = ctx.serialize(v);\n } catch {\n // context absent; ignore\n }\n }\n const keys = Object.keys(map);\n if (keys.length === 0) return undefined;\n return cfg.serializer.stringify(map);\n };\n\n return {\n async task<I, O>(id: string, input?: I): Promise<O> {\n const url = `${baseUrl}/task/${encodeURIComponent(id)}`;\n const r: ProtocolEnvelope<O> = await postSerialized({\n fetch: fetchImpl,\n url,\n body: { input },\n headers: buildHeaders(),\n timeoutMs: cfg?.timeoutMs,\n serializer: cfg.serializer,\n onRequest: cfg?.onRequest,\n contextHeaderText: buildContextHeader(),\n });\n try {\n return assertOkEnvelope<O>(r, { fallbackMessage: \"Tunnel task error\" });\n } catch (e) {\n // Optionally rethrow typed errors if registry present\n const te = e as { id?: unknown; data?: unknown };\n if (cfg.errorRegistry && te.id && te.data) {\n const helper = cfg.errorRegistry.get(String(te.id));\n if (helper) helper.throw(te.data);\n }\n throw e;\n }\n },\n async event<P>(id: string, payload?: P): Promise<void> {\n const url = `${baseUrl}/event/${encodeURIComponent(id)}`;\n const r: ProtocolEnvelope<void> = await postSerialized({\n fetch: fetchImpl,\n url,\n body: { payload },\n headers: buildHeaders(),\n timeoutMs: cfg?.timeoutMs,\n serializer: cfg.serializer,\n onRequest: cfg?.onRequest,\n contextHeaderText: buildContextHeader(),\n });\n try {\n assertOkEnvelope<void>(r, { fallbackMessage: \"Tunnel event error\" });\n } catch (e) {\n const te = e as { id?: unknown; data?: unknown };\n if (cfg.errorRegistry && te.id && te.data) {\n const helper = cfg.errorRegistry.get(String(te.id));\n if (helper) helper.throw(te.data);\n }\n throw e;\n }\n },\n async eventWithResult<P>(id: string, payload?: P): Promise<P> {\n const url = `${baseUrl}/event/${encodeURIComponent(id)}`;\n const r: ProtocolEnvelope<P> = await postSerialized({\n fetch: fetchImpl,\n url,\n body: { payload, returnPayload: true },\n headers: buildHeaders(),\n timeoutMs: cfg?.timeoutMs,\n serializer: cfg.serializer,\n onRequest: cfg?.onRequest,\n contextHeaderText: buildContextHeader(),\n });\n if (r && typeof r === \"object\" && r.ok && !(\"result\" in r)) {\n throw new TunnelError(\n \"INVALID_RESPONSE\",\n \"Tunnel event returnPayload requested but server did not include result. Upgrade the exposure server.\",\n );\n }\n try {\n return assertOkEnvelope<P>(r, {\n fallbackMessage: \"Tunnel event error\",\n });\n } catch (e) {\n const te = e as { id?: unknown; data?: unknown };\n if (cfg.errorRegistry && te.id && te.data) {\n const helper = cfg.errorRegistry.get(String(te.id));\n if (helper) helper.throw(te.data);\n }\n throw e;\n }\n },\n } satisfies ExposureFetchClient;\n}\n","import type { Readable } from \"stream\";\nimport type { InputFileMeta, RunnerFileSentinel } from \"../types/inputFile\";\n\nexport interface NodeCollectedFile {\n id: string;\n meta: InputFileMeta;\n source:\n | { type: \"buffer\"; buffer: Buffer }\n | { type: \"stream\"; stream: Readable };\n}\n\nexport interface WebCollectedFile {\n id: string;\n meta: InputFileMeta;\n blob: Blob;\n}\n\nexport interface BuiltUniversalManifest<T = unknown> {\n input: T; // cloned input with sidecars removed\n nodeFiles: NodeCollectedFile[];\n webFiles: WebCollectedFile[];\n}\n\ntype AnyObj = Record<string, unknown>;\n\n/** Internal representation of a file value with platform-specific data */\ninterface InternalFileValue extends RunnerFileSentinel {\n _node?: { buffer?: Buffer; stream?: Readable };\n _web?: { blob?: Blob };\n}\n\nexport function buildUniversalManifest<T = unknown>(\n input: T,\n): BuiltUniversalManifest<T> {\n const nodeFiles: NodeCollectedFile[] = [];\n const webFiles: WebCollectedFile[] = [];\n\n function visit(value: unknown): unknown {\n if (!value || typeof value !== \"object\") return value;\n\n if (\n (value as RunnerFileSentinel).$runnerFile === \"File\" &&\n typeof (value as RunnerFileSentinel).id === \"string\"\n ) {\n const v = value as InternalFileValue;\n const id: string = v.id;\n const meta: InputFileMeta = v.meta;\n const node = v._node;\n const web = v._web;\n\n if (node?.buffer) {\n nodeFiles.push({\n id,\n meta,\n source: { type: \"buffer\", buffer: node.buffer },\n });\n } else if (node?.stream) {\n nodeFiles.push({\n id,\n meta,\n source: { type: \"stream\", stream: node.stream },\n });\n } else if (web?.blob) {\n webFiles.push({ id, meta, blob: web.blob });\n }\n\n const copy: AnyObj = { $runnerFile: \"File\", id, meta };\n return copy;\n }\n\n if (Array.isArray(value)) {\n return value.map((x) => visit(x));\n }\n\n const out: AnyObj = {};\n for (const k of Object.keys(value)) {\n out[k] = visit((value as AnyObj)[k]);\n }\n return out;\n }\n\n const cloned = visit(input);\n return {\n input: cloned as T,\n nodeFiles,\n webFiles,\n } as BuiltUniversalManifest<T>;\n}\n","import type { SerializerLike } from \"./serializer\";\nimport type { ProtocolEnvelope } from \"./globals/resources/tunnel/protocol\";\nimport { assertOkEnvelope } from \"./globals/resources/tunnel/protocol\";\nimport { createExposureFetch } from \"./http-fetch-tunnel.resource\";\nimport { buildUniversalManifest } from \"./tunnels/buildUniversalManifest\";\nimport type { IAsyncContext } from \"./types/asyncContext\";\nimport type { IErrorHelper } from \"./types/error\";\n\nexport interface HttpClientAuth {\n header?: string;\n token: string;\n}\n\nexport interface HttpClientConfig {\n baseUrl: string;\n auth?: HttpClientAuth;\n timeoutMs?: number;\n fetchImpl?: typeof fetch;\n serializer: SerializerLike;\n onRequest?: (ctx: {\n url: string;\n headers: Record<string, string>;\n }) => void | Promise<void>;\n contexts?: Array<IAsyncContext<unknown>>;\n errorRegistry?: Map<string, IErrorHelper<any>>;\n}\n\nexport interface HttpClient {\n task<I = unknown, O = unknown>(id: string, input?: I): Promise<O>;\n event<P = unknown>(id: string, payload?: P): Promise<void>;\n eventWithResult?<P = unknown>(id: string, payload?: P): Promise<P>;\n}\n\nfunction toHeaders(auth?: HttpClientAuth): Record<string, string> {\n const headers: Record<string, string> = {};\n if (auth?.token)\n headers[(auth.header ?? \"x-runner-token\").toLowerCase()] = auth.token;\n return headers;\n}\n\nexport function createHttpClient(cfg: HttpClientConfig): HttpClient {\n const baseUrl = cfg.baseUrl.replace(/\\/$/, \"\");\n if (!baseUrl) throw new Error(\"createHttpClient requires baseUrl\");\n\n const isNodeReadable = (\n value: unknown,\n ): value is { pipe: (...args: unknown[]) => unknown } =>\n !!value && typeof (value as { pipe?: unknown }).pipe === \"function\";\n\n const fetchClient = createExposureFetch({\n baseUrl,\n auth: cfg.auth,\n timeoutMs: cfg.timeoutMs,\n fetchImpl: cfg.fetchImpl,\n serializer: cfg.serializer,\n onRequest: cfg.onRequest,\n contexts: cfg.contexts,\n errorRegistry: cfg.errorRegistry,\n });\n\n async function postMultipartBrowser(\n url: string,\n manifestText: string,\n files: ReturnType<typeof buildUniversalManifest>[\"webFiles\"],\n ) {\n const fd = new FormData();\n fd.append(\"__manifest\", manifestText);\n for (const f of files) {\n const filename = f.meta?.name ?? \"upload\";\n fd.append(`file:${f.id}`, f.blob as unknown as Blob, filename);\n }\n const headers = toHeaders(cfg.auth);\n if (cfg.contexts && cfg.contexts.length > 0) {\n const map: Record<string, string> = {};\n for (const ctx of cfg.contexts) {\n try {\n const v = ctx.use();\n map[ctx.id] = ctx.serialize(v);\n } catch {}\n }\n if (Object.keys(map).length > 0) {\n headers[\"x-runner-context\"] = cfg.serializer.stringify(map);\n }\n }\n if (cfg.onRequest) await cfg.onRequest({ url, headers });\n const fetchImpl = cfg.fetchImpl ?? (globalThis.fetch as typeof fetch);\n const res = await fetchImpl(url, { method: \"POST\", body: fd, headers });\n const text = await res.text();\n const json = text ? cfg.serializer.parse(text) : undefined;\n return json as ProtocolEnvelope<any>;\n }\n\n return {\n async task<I, O>(id: string, input?: I): Promise<O> {\n const url = `${baseUrl}/task/${encodeURIComponent(id)}`;\n\n // Guard: raw Node Readable-like inputs are not supported in universal client\n if (isNodeReadable(input)) {\n throw new Error(\n \"createHttpClient (universal) cannot send a Node stream. Use @bluelibs/runner/node createHttpSmartClient or createHttpMixedClient for duplex/streaming.\",\n );\n }\n\n // Multipart path: browser files only (FormData). Node files are not supported here.\n const manifest = buildUniversalManifest(input);\n if (manifest.webFiles.length > 0) {\n const manifestText = cfg.serializer.stringify({\n input: manifest.input,\n });\n const r = await postMultipartBrowser(\n url,\n manifestText,\n manifest.webFiles,\n );\n try {\n return assertOkEnvelope<O>(r as ProtocolEnvelope<O>, {\n fallbackMessage: \"Tunnel task error\",\n });\n } catch (e) {\n const te = e as { id?: unknown; data?: unknown };\n if (cfg.errorRegistry && te.id && te.data) {\n const helper = cfg.errorRegistry.get(String(te.id));\n if (helper) helper.throw(te.data);\n }\n throw e;\n }\n }\n\n // If Node files were detected, instruct user to use Node clients\n if (manifest.nodeFiles.length > 0) {\n throw new Error(\n \"createHttpClient (universal) detected Node file input. Use @bluelibs/runner/node createHttpSmartClient or createHttpMixedClient for Node streaming/multipart.\",\n );\n }\n\n // JSON fallback\n try {\n return await fetchClient.task<I, O>(id, input as I);\n } catch (e) {\n const te = e as { id?: unknown; data?: unknown };\n if (cfg.errorRegistry && te.id && te.data) {\n const helper = cfg.errorRegistry.get(String(te.id));\n if (helper) helper.throw(te.data);\n }\n throw e;\n }\n },\n\n async event<P>(id: string, payload?: P): Promise<void> {\n try {\n return await fetchClient.event<P>(id, payload);\n } catch (e) {\n const te = e as { id?: unknown; data?: unknown };\n if (cfg.errorRegistry && te.id && te.data) {\n const helper = cfg.errorRegistry.get(String(te.id));\n if (helper) helper.throw(te.data);\n }\n throw e;\n }\n },\n\n async eventWithResult<P>(id: string, payload?: P): Promise<P> {\n try {\n if (!fetchClient.eventWithResult) {\n throw new Error(\n \"createHttpClient: eventWithResult not available on underlying tunnel client.\",\n );\n }\n return await fetchClient.eventWithResult<P>(id, payload);\n } catch (e) {\n const te = e as { id?: unknown; data?: unknown };\n if (cfg.errorRegistry && te.id && te.data) {\n const helper = cfg.errorRegistry.get(String(te.id));\n if (helper) helper.throw(te.data);\n }\n throw e;\n }\n },\n };\n}\n","import { defineResource } from \"../../define\";\nimport { createHttpClient, type HttpClient } from \"../../http-client\";\nimport type { HttpClientConfig } from \"../../http-client\";\nimport { serializer, store } from \"../globalResources\";\nimport type { IErrorHelper } from \"../../types/error\";\nimport type { IAsyncContext } from \"../../types/asyncContext\";\n\n/**\n * Factory for creating HTTP clients with automatic injection of:\n * - serializer\n * - error registry (from Store)\n * - async contexts (from Store)\n *\n * Note: Node streaming clients are exposed via the Node entry only\n * (see createHttpSmartClient/createHttpMixedClient in `@bluelibs/runner/node`).\n * Keeping this universal factory browser-safe avoids dynamic imports.\n */\n\n// Types for httpClientFactory\nexport interface HttpClientFactoryConfig {\n baseUrl: string;\n auth?: HttpClientConfig[\"auth\"];\n timeoutMs?: number;\n fetchImpl?: typeof fetch;\n onRequest?: HttpClientConfig[\"onRequest\"];\n}\n\nexport type HttpClientFactory = (config: HttpClientFactoryConfig) => HttpClient;\n\nexport const httpClientFactory = defineResource({\n id: \"globals.resources.httpClientFactory\",\n meta: {\n title: \"HTTP Client Factory\",\n description:\n \"Factory for creating HTTP clients with automatic injection of serializer, error registry, and async contexts from the store.\",\n },\n // Use it as a function to avoid circular dependencies, and undefined\n dependencies: () => ({\n serializer: serializer,\n store: store,\n }),\n init: async (_, { serializer, store }) => {\n // Build error registry from store.errors\n const errorRegistry = new Map<string, IErrorHelper<any>>();\n for (const [id, helper] of store.errors) {\n errorRegistry.set(id, helper);\n }\n\n // Collect contexts from store.asyncContexts\n const contexts = Array.from(\n store.asyncContexts.values(),\n ) as unknown as IAsyncContext<any>[];\n\n const create: HttpClientFactory = (config: HttpClientFactoryConfig) =>\n createHttpClient({\n ...config,\n serializer,\n errorRegistry,\n contexts,\n });\n\n return create;\n },\n});\n\nexport type { HttpClient };\n","import { defineResource } from \"../define\";\nimport { EventManager } from \"../models/EventManager\";\nimport { Logger } from \"../models/Logger\";\nimport { Store } from \"../models/Store\";\nimport { TaskRunner } from \"../models/TaskRunner\";\nimport { cacheResource } from \"./middleware/cache.middleware\";\nimport { circuitBreakerResource } from \"./middleware/circuitBreaker.middleware\";\nimport { concurrencyResource } from \"./middleware/concurrency.middleware\";\nimport { rateLimitResource } from \"./middleware/rateLimit.middleware\";\nimport { temporalResource } from \"./middleware/temporal.middleware\";\nimport { queueResource } from \"./resources/queue.resource\";\nimport { globalTags } from \"./globalTags\";\nimport { MiddlewareManager } from \"../models/MiddlewareManager\";\nimport type { SerializerLike as Serializer } from \"../serializer\";\nimport { httpClientFactory } from \"./resources/httpClientFactory.resource\";\n\nconst systemTag = globalTags.system;\n\nexport const store = defineResource<void, Promise<Store>>({\n id: \"globals.resources.store\",\n meta: {\n title: \"Store\",\n description:\n \"A global store that can be used to store and retrieve tasks, resources, events and middleware\",\n },\n tags: [systemTag],\n});\n\nexport const serializer = defineResource<void, Promise<Serializer>>({\n id: \"globals.resources.serializer\",\n meta: {\n title: \"Serializer\",\n description:\n \"Serializes and deserializes data. Supports stringify/parse and custom type registration via addType.\",\n },\n tags: [systemTag],\n});\n\nexport const globalResources = {\n store,\n middlewareManager: defineResource<void, Promise<MiddlewareManager>>({\n id: \"globals.resources.middlewareManager\",\n meta: {\n title: \"Middleware Manager\",\n description: \"Manages all middleware and middleware interceptors.\",\n },\n tags: [systemTag],\n }),\n eventManager: defineResource<void, Promise<EventManager>>({\n id: \"globals.resources.eventManager\",\n meta: {\n title: \"Event Manager\",\n description:\n \"Manages all events and event listeners. This is meant to be used internally for most use-cases.\",\n },\n tags: [systemTag],\n dispose: async (eventManager) => {\n eventManager.dispose();\n },\n }),\n taskRunner: defineResource<void, Promise<TaskRunner>>({\n id: \"globals.resources.taskRunner\",\n meta: {\n title: \"Task Runner\",\n description:\n \"Manages the execution of tasks and task dependencies. This is meant to be used internally for most use-cases.\",\n },\n tags: [systemTag],\n }),\n logger: defineResource<void, Promise<Logger>>({\n id: \"globals.resources.logger\",\n meta: {\n // We skip system tag for logger because it's part of the utility toolkit.\n title: \"Logger\",\n description:\n \"Logs all events and errors. This is meant to be used internally for most use-cases. Emits a globals.log event for each log.\",\n },\n tags: [systemTag],\n }),\n serializer,\n cache: cacheResource,\n queue: queueResource,\n httpClientFactory: httpClientFactory,\n\n // Middleware State Resources\n rateLimit: rateLimitResource,\n circuitBreaker: circuitBreakerResource,\n temporal: temporalResource,\n concurrency: concurrencyResource,\n} as const;\n","import { defineTaskMiddleware, defineResourceMiddleware } from \"../../define\";\nimport { journal } from \"../../models/ExecutionJournal\";\n\nenum AbortSignalEventType {\n Abort = \"abort\",\n}\n\nexport interface TimeoutMiddlewareConfig {\n /**\n * Maximum time in milliseconds before the wrapped operation is aborted\n * and a timeout error is thrown. Defaults to 5000ms.\n */\n ttl: number;\n}\n\n/**\n * Custom error class for timeout errors.\n * Using a class allows proper instanceof checks.\n */\nexport class TimeoutError extends Error {\n constructor(message: string) {\n super(message);\n this.name = \"TimeoutError\";\n }\n}\n\n/**\n * Journal keys exposed by the timeout middleware.\n * Use these to access shared state from downstream middleware or tasks.\n */\nexport const journalKeys = {\n /** The AbortController created by the timeout middleware */\n abortController: journal.createKey<AbortController>(\n \"globals.middleware.timeout.abortController\",\n ),\n} as const;\n\nexport const timeoutTaskMiddleware = defineTaskMiddleware({\n id: \"globals.middleware.timeout.task\",\n async run({ task, next, journal }, _deps, config: TimeoutMiddlewareConfig) {\n const input = task?.input;\n\n const ttl = Math.max(0, config.ttl);\n const message = `Operation timed out after ${ttl}ms`;\n const timeoutError = new TimeoutError(message);\n\n // Fast-path: immediate timeout\n if (ttl === 0) {\n throw timeoutError;\n }\n\n const controller = new AbortController();\n\n // Expose controller for downstream middleware/tasks\n journal.set(journalKeys.abortController, controller);\n\n return await new Promise((resolve, reject) => {\n let settled = false;\n\n const abortHandler = () => settle(\"reject\", timeoutError);\n\n const settle = (kind: \"resolve\" | \"reject\", value?: unknown) => {\n if (settled) return;\n settled = true;\n clearTimeout(timeoutId);\n controller.signal.removeEventListener(\n AbortSignalEventType.Abort,\n abortHandler,\n );\n if (kind === \"resolve\") {\n resolve(value);\n } else {\n reject(value);\n }\n };\n\n const timeoutId = setTimeout(() => {\n controller.abort();\n settle(\"reject\", timeoutError);\n }, ttl);\n\n controller.signal.addEventListener(\n AbortSignalEventType.Abort,\n abortHandler,\n );\n\n const finish = (cb: () => Promise<unknown>) => {\n cb().then(\n (result) => settle(\"resolve\", result),\n (error) => settle(\"reject\", error),\n );\n };\n\n finish(() => next(input as unknown));\n });\n },\n});\n\nexport const timeoutResourceMiddleware = defineResourceMiddleware({\n id: \"globals.middleware.timeout.resource\",\n async run({ resource, next }, _deps, config: TimeoutMiddlewareConfig) {\n const input = resource?.config;\n const ttl = Math.max(0, config.ttl);\n const message = `Operation timed out after ${ttl}ms`;\n const timeoutError = new TimeoutError(message);\n if (ttl === 0) {\n throw timeoutError;\n }\n const controller = new AbortController();\n return await new Promise((resolve, reject) => {\n let settled = false;\n\n const abortHandler = () => settle(\"reject\", timeoutError);\n\n const settle = (kind: \"resolve\" | \"reject\", value?: unknown) => {\n if (settled) return;\n settled = true;\n clearTimeout(timeoutId);\n controller.signal.removeEventListener(\n AbortSignalEventType.Abort,\n abortHandler,\n );\n if (kind === \"resolve\") {\n resolve(value);\n } else {\n reject(value);\n }\n };\n\n const timeoutId = setTimeout(() => {\n controller.abort();\n settle(\"reject\", timeoutError);\n }, ttl);\n\n controller.signal.addEventListener(\n AbortSignalEventType.Abort,\n abortHandler,\n );\n\n const finish = (cb: () => Promise<unknown>) => {\n cb().then(\n (result) => settle(\"resolve\", result),\n (error) => settle(\"reject\", error),\n );\n };\n\n finish(() => next(input as unknown));\n });\n },\n});\n","import { defineTaskMiddleware, defineResourceMiddleware } from \"../../define\";\nimport { journal as journalHelper } from \"../../models/ExecutionJournal\";\nimport { journalKeys as timeoutJournalKeys } from \"./timeout.middleware\";\n\n/**\n * Configuration options for the retry middleware\n */\nexport interface RetryMiddlewareConfig {\n /**\n * Maximum number of retry attempts (default: 3)\n */\n retries?: number;\n /**\n * Callback to determine if retry should stop based on error\n * @default () => false (retry all errors)\n */\n stopRetryIf?: (error: Error) => boolean;\n /**\n * Custom delay strategy function\n * @default Exponential backoff starting at 100ms\n */\n delayStrategy?: (attempt: number, error: Error) => number;\n}\n\n/**\n * Journal keys exposed by the retry middleware.\n * Use these to access shared state from downstream middleware or tasks.\n */\nexport const journalKeys = {\n /** Current retry attempt number (0 = first attempt, 1 = first retry, etc.) */\n attempt: journalHelper.createKey<number>(\"globals.middleware.retry.attempt\"),\n /** The last error that caused a retry */\n lastError: journalHelper.createKey<Error>(\n \"globals.middleware.retry.lastError\",\n ),\n} as const;\n\nexport const retryTaskMiddleware = defineTaskMiddleware({\n id: \"globals.middleware.retry.task\",\n async run({ task, next, journal }, _deps, config: RetryMiddlewareConfig) {\n const input = task?.input;\n let attempts = 0;\n\n // Set defaults for required parameters\n const maxRetries = config.retries ?? 3;\n const shouldStop = config.stopRetryIf ?? (() => false);\n\n // Set initial attempt count\n journal.set(journalKeys.attempt, attempts, { override: true });\n\n while (true) {\n try {\n return await next(input);\n } catch (error) {\n const err = error as Error;\n\n // Check if timeout middleware has set an abort controller (fetch dynamically)\n const abortController = journal.get(timeoutJournalKeys.abortController);\n\n // Don't retry if the operation was aborted (timeout triggered)\n if (abortController?.signal.aborted) {\n throw error;\n }\n\n if (shouldStop(err) || attempts >= maxRetries) {\n throw error;\n }\n\n // Calculate delay using custom strategy or default exponential backoff\n const delay = config.delayStrategy\n ? config.delayStrategy(attempts, err)\n : 100 * Math.pow(2, attempts);\n\n if (delay > 0) {\n await new Promise((resolve) => setTimeout(resolve, delay));\n }\n\n attempts++;\n // Update journal with current attempt and last error\n journal.set(journalKeys.attempt, attempts, { override: true });\n journal.set(journalKeys.lastError, err, { override: true });\n }\n }\n },\n});\n\nexport const retryResourceMiddleware = defineResourceMiddleware({\n id: \"globals.middleware.retry.resource\",\n async run({ resource, next }, _deps, config: RetryMiddlewareConfig) {\n const input = resource?.config;\n let attempts = 0;\n const maxRetries = config.retries ?? 3;\n const shouldStop = config.stopRetryIf ?? (() => false);\n while (true) {\n try {\n return await next(input);\n } catch (error) {\n const err = error as Error;\n if (shouldStop(err) || attempts >= maxRetries) {\n throw error;\n }\n const delay = config.delayStrategy\n ? config.delayStrategy(attempts, err)\n : 100 * Math.pow(2, attempts);\n if (delay > 0) {\n await new Promise((resolve) => setTimeout(resolve, delay));\n }\n attempts++;\n }\n }\n },\n});\n","import { defineTaskMiddleware, isTask } from \"../../define\";\nimport { journal as journalHelper } from \"../../models/ExecutionJournal\";\nimport { globalResources } from \"../globalResources\";\n\nexport interface FallbackMiddlewareConfig {\n /**\n * The fallback to use if the task fails.\n * Can be a value, a function that returns a value (or promise), or another task.\n */\n fallback: any;\n}\n\n/**\n * Journal keys exposed by the fallback middleware.\n * Use these to access shared state from downstream middleware or tasks.\n */\nexport const journalKeys = {\n /** Whether the fallback path was taken (true) or primary succeeded (false) */\n active: journalHelper.createKey<boolean>(\n \"globals.middleware.fallback.active\",\n ),\n /** The error that triggered the fallback (only set when active is true) */\n error: journalHelper.createKey<Error>(\"globals.middleware.fallback.error\"),\n} as const;\n\n/**\n * Fallback middleware: provides a backup value or execution if the main task fails.\n */\nexport const fallbackTaskMiddleware = defineTaskMiddleware({\n id: \"globals.middleware.fallback\",\n dependencies: {\n taskRunner: globalResources.taskRunner,\n },\n async run(\n { task, next, journal },\n { taskRunner },\n config: FallbackMiddlewareConfig,\n ) {\n // Set default: fallback not active\n journal.set(journalKeys.active, false, { override: true });\n\n try {\n return await next(task.input);\n } catch (error) {\n const { fallback } = config;\n\n // Mark fallback as active and record the error\n journal.set(journalKeys.active, true, { override: true });\n journal.set(journalKeys.error, error as Error, { override: true });\n\n if (isTask(fallback)) {\n // If it's a task, run it with the same input using the taskRunner\n return await taskRunner.run(fallback, task.input);\n }\n\n if (typeof fallback === \"function\") {\n // If it's a function, call it with the error and task input\n return await fallback(error, task.input);\n }\n\n // Otherwise, return the fallback value directly\n return fallback;\n }\n },\n});\n","import {\n cacheMiddleware,\n journalKeys as cacheJournalKeys,\n} from \"./middleware/cache.middleware\";\nimport { concurrencyTaskMiddleware } from \"./middleware/concurrency.middleware\";\nimport {\n circuitBreakerMiddleware,\n journalKeys as circuitBreakerJournalKeys,\n} from \"./middleware/circuitBreaker.middleware\";\nimport { requireContextTaskMiddleware } from \"./middleware/requireContext.middleware\";\nimport {\n retryTaskMiddleware,\n retryResourceMiddleware,\n journalKeys as retryJournalKeys,\n} from \"./middleware/retry.middleware\";\nimport {\n timeoutTaskMiddleware,\n timeoutResourceMiddleware,\n journalKeys as timeoutJournalKeys,\n} from \"./middleware/timeout.middleware\";\nimport {\n debounceTaskMiddleware,\n throttleTaskMiddleware,\n} from \"./middleware/temporal.middleware\";\nimport {\n fallbackTaskMiddleware,\n journalKeys as fallbackJournalKeys,\n} from \"./middleware/fallback.middleware\";\nimport {\n rateLimitTaskMiddleware,\n journalKeys as rateLimitJournalKeys,\n} from \"./middleware/rateLimit.middleware\";\n\n/**\n * Global middlewares\n */\nexport const globalMiddlewares = {\n requireContext: requireContextTaskMiddleware,\n task: {\n requireContext: requireContextTaskMiddleware,\n cache: Object.assign(cacheMiddleware, {\n journalKeys: cacheJournalKeys,\n }),\n concurrency: concurrencyTaskMiddleware,\n debounce: debounceTaskMiddleware,\n throttle: throttleTaskMiddleware,\n fallback: Object.assign(fallbackTaskMiddleware, {\n journalKeys: fallbackJournalKeys,\n }),\n rateLimit: Object.assign(rateLimitTaskMiddleware, {\n journalKeys: rateLimitJournalKeys,\n }),\n // common with resources\n retry: Object.assign(retryTaskMiddleware, {\n journalKeys: retryJournalKeys,\n }),\n timeout: Object.assign(timeoutTaskMiddleware, {\n journalKeys: timeoutJournalKeys,\n }),\n circuitBreaker: Object.assign(circuitBreakerMiddleware, {\n journalKeys: circuitBreakerJournalKeys,\n }),\n },\n resource: {\n retry: retryResourceMiddleware,\n timeout: timeoutResourceMiddleware,\n },\n};\n","import { ITaggable } from \"../../../defs\";\nimport { debugTag } from \"./debug.tag\";\n\nexport type DebugConfig = {\n logResourceConfig: boolean;\n logResourceValue: boolean;\n logResourceBeforeRun: boolean;\n logResourceAfterRun: boolean;\n logTaskBeforeRun: boolean;\n logTaskInput: boolean;\n logTaskOutput: boolean;\n logTaskAfterRun: boolean;\n logMiddlewareBeforeRun: boolean;\n logMiddlewareAfterRun: boolean;\n logEventEmissionOnRun: boolean;\n logEventEmissionInput: boolean;\n logHookTriggered: boolean;\n logHookCompleted: boolean;\n};\n\nexport const allFalse: DebugConfig = Object.freeze({\n logResourceBeforeRun: false,\n logResourceAfterRun: false,\n logMiddlewareBeforeRun: false,\n logMiddlewareAfterRun: false,\n logTaskBeforeRun: false,\n logTaskAfterRun: false,\n logTaskInput: false,\n logTaskOutput: false,\n logResourceConfig: false,\n logResourceValue: false,\n logHookTriggered: false,\n logHookCompleted: false,\n logEventEmissionOnRun: false,\n logEventEmissionInput: false,\n});\n\nexport const levelNormal: DebugConfig = Object.freeze({\n ...allFalse,\n logTaskAfterRun: true,\n logTaskBeforeRun: true,\n logResourceBeforeRun: true,\n logResourceAfterRun: true,\n logMiddlewareBeforeRun: true,\n logMiddlewareAfterRun: true,\n logHookTriggered: true,\n logHookCompleted: true,\n logEventEmissionOnRun: true,\n});\n\nObject.freeze(levelNormal);\n\nexport const levelVerbose: DebugConfig = Object.freeze({\n ...levelNormal,\n logTaskInput: true,\n logTaskOutput: true,\n logResourceConfig: true,\n logResourceValue: true,\n logHookTriggered: true,\n logHookCompleted: true,\n});\n\nObject.freeze(levelVerbose);\n\n/**\n * If you choose to specify your own config, all values will be set to false by default and extended by your config.\n */\nexport type DebugFriendlyConfig = \"normal\" | \"verbose\" | Partial<DebugConfig>;\n\nfunction formatConfig(config: DebugFriendlyConfig): DebugConfig {\n if (config === \"normal\") {\n return { ...levelNormal };\n }\n if (config === \"verbose\") {\n return { ...levelVerbose };\n }\n return { ...allFalse, ...config };\n}\n\nexport const getConfig = (\n config: DebugFriendlyConfig,\n taggable?: ITaggable,\n): DebugConfig => {\n if (!taggable) {\n return formatConfig(config);\n }\n const debugTagConfig = debugTag.extract(taggable);\n\n if (debugTagConfig) {\n const debugTagConfigFormatted = formatConfig(debugTagConfig);\n return { ...formatConfig(config), ...debugTagConfigFormatted };\n }\n\n return formatConfig(config);\n};\n","import { levelNormal, levelVerbose } from \"./resources/debug/types\";\n\nexport const debugLevels = {\n normal: levelNormal,\n verbose: levelVerbose,\n};\n\nexport const debug = {\n levels: debugLevels,\n};\n","import { DependencyMapType, ITask } from \"../defs\";\nimport { EventManager } from \"./EventManager\";\nimport { Store } from \"./Store\";\nimport { Logger } from \"./Logger\";\nimport { MiddlewareManager } from \"./MiddlewareManager\";\nimport type { ExecutionJournal } from \"../types/executionJournal\";\nimport type { TaskCallOptions } from \"../types/utilities\";\n\nexport class TaskRunner {\n protected readonly runnerStore = new Map<\n string | symbol,\n (input: any, journal?: ExecutionJournal) => Promise<any>\n >();\n\n constructor(\n protected readonly store: Store,\n protected readonly eventManager: EventManager,\n protected readonly logger: Logger,\n ) {\n // Use the same MiddlewareManager instance from the Store so that\n // any interceptors registered via resources (like debug) affect task runs.\n this.middlewareManager = this.store.getMiddlewareManager();\n }\n\n private readonly middlewareManager: MiddlewareManager;\n\n /**\n * Begins the execution of a task. These are registered tasks and all sanity checks have been performed at this stage to ensure consistency of the object.\n * This function can throw only if any of the event listeners or run function throws\n * @param task the task to be run\n * @param input the input to be passed to the task\n * @param options optional call options including journal for forwarding\n */\n public async run<\n TInput,\n TOutput extends Promise<any>,\n TDeps extends DependencyMapType,\n >(\n task: ITask<TInput, TOutput, TDeps>,\n input?: TInput,\n options?: TaskCallOptions,\n ): Promise<TOutput | undefined> {\n let runner = this.runnerStore.get(task.id);\n if (!runner) {\n runner = this.createRunnerWithMiddleware<TInput, TOutput, TDeps>(task);\n\n this.runnerStore.set(task.id, runner);\n }\n\n try {\n // Pass journal if provided; composer will use it or create new\n return await runner(input, options?.journal);\n } catch (error) {\n try {\n await this.store.onUnhandledError({\n error,\n kind: \"task\",\n source: task.id,\n });\n } catch (_) {}\n throw error;\n }\n }\n\n /**\n * Creates the function with the chain of middleware.\n * @param task\n * @returns\n */\n protected createRunnerWithMiddleware<\n TInput,\n TOutput extends Promise<any>,\n TDeps extends DependencyMapType,\n >(task: ITask<TInput, TOutput, TDeps>) {\n return this.middlewareManager.composeTaskRunner(task);\n }\n}\n","import {\n DependencyMapType,\n IResource,\n ResourceDependencyValuesType,\n} from \"../defs\";\nimport { EventManager } from \"./EventManager\";\nimport { Store } from \"./Store\";\nimport { Logger } from \"./Logger\";\nimport type { MiddlewareManager } from \"./MiddlewareManager\";\n\nexport class ResourceInitializer {\n constructor(\n protected readonly store: Store,\n protected readonly eventManager: EventManager,\n protected readonly logger: Logger,\n ) {\n this.middlewareManager = this.store.getMiddlewareManager();\n }\n\n private readonly middlewareManager: MiddlewareManager;\n\n /**\n * Begins the execution of a task. These are registered tasks and all sanity checks have been performed at this stage to ensure consistency of the object.\n * This function can throw only if any of the event listeners or run function throws\n */\n public async initializeResource<\n TConfig = null,\n TValue extends Promise<any> = Promise<any>,\n TDeps extends DependencyMapType = {},\n TContext = any,\n >(\n resource: IResource<TConfig, TValue, TDeps>,\n config: TConfig,\n dependencies: ResourceDependencyValuesType<TDeps>,\n ): Promise<{ value: TValue | undefined; context: TContext }> {\n const context = resource.context ? resource.context() : ({} as TContext);\n\n const value = await this.initWithMiddleware(\n resource,\n config,\n dependencies,\n context,\n );\n\n return { value, context };\n }\n\n // Lifecycle emissions removed\n\n public async initWithMiddleware<\n C,\n V extends Promise<any>,\n D extends DependencyMapType,\n TContext,\n >(\n resource: IResource<C, V, D, TContext>,\n config: C,\n dependencies: ResourceDependencyValuesType<D>,\n context: TContext,\n ) {\n return this.middlewareManager.runResourceInit(\n resource,\n config,\n dependencies,\n context,\n );\n }\n}\n","export function safeStringify(\n value: unknown,\n space?: number,\n options?: { maxDepth?: number },\n): string {\n const seen = new WeakSet<object>();\n const holderDepth = new WeakMap<object, number>();\n\n const maxDepth =\n typeof options?.maxDepth === \"number\" ? options.maxDepth : Infinity;\n\n const replacer = function (this: unknown, _key: string, val: unknown) {\n // Normalize functions to a readable placeholder\n if (typeof val === \"function\") {\n return \"function()\";\n }\n\n // Normalize BigInt safely\n if (typeof val === \"bigint\") {\n return val.toString();\n }\n\n // Compute the depth of the current value based on its holder (this)\n const holderObject = Object(this);\n const parentDepth = holderDepth.get(holderObject as object) || 0;\n const currentDepth = parentDepth + 1;\n\n if (typeof val === \"object\" && val !== null) {\n if (seen.has(val)) return \"[Circular]\";\n\n // Apply depth limiting beyond the configured depth\n if (currentDepth > maxDepth) {\n return Array.isArray(val) ? \"[Array]\" : \"[Object]\";\n }\n\n seen.add(val);\n holderDepth.set(val, currentDepth);\n }\n return val;\n } as (this: unknown, key: string, value: unknown) => unknown;\n\n try {\n // JSON.stringify's replacer type is complex (overloaded). Our replacer satisfies\n // the (key: string, value: unknown) => unknown signature used at runtime.\n return JSON.stringify(\n value,\n replacer as (key: string, value: unknown) => unknown,\n space,\n );\n } catch {\n try {\n return String(value);\n } catch {\n return \"[Unserializable]\";\n }\n }\n}\n","import { safeStringify } from \"./utils/safeStringify\";\n\nconst ansiRegex =\n /[\u001b][[()#;?]*(?:[0-9]{1,4}(?:;[0-9]{0,4})*)?[0-9A-ORZcf-nqry=><]/g;\nfunction stripAnsi(str: string): string {\n return str.replace(ansiRegex, \"\");\n}\n\nexport type PrintStrategy = \"pretty\" | \"plain\" | \"json\" | \"json_pretty\";\n\nexport type LogLevels =\n | \"trace\"\n | \"debug\"\n | \"info\"\n | \"warn\"\n | \"error\"\n | \"critical\";\n\nexport interface PrintableLog {\n level: LogLevels;\n source?: string;\n message: any;\n timestamp: Date;\n error?: {\n name: string;\n message: string;\n stack?: string;\n };\n data?: Record<string, any>;\n context?: Record<string, any>;\n}\n\nexport type ColorTheme = {\n trace: string;\n debug: string;\n info: string;\n warn: string;\n error: string;\n critical: string;\n reset: string;\n bold: string;\n dim: string;\n blue: string;\n cyan: string;\n gray: string;\n};\n\nconst COLORS: Readonly<ColorTheme> = {\n trace: \"\\x1b[90m\",\n debug: \"\\x1b[36m\",\n info: \"\\x1b[32m\",\n warn: \"\\x1b[33m\",\n error: \"\\x1b[31m\",\n critical: \"\\x1b[35m\",\n reset: \"\\x1b[0m\",\n bold: \"\\x1b[1m\",\n dim: \"\\x1b[2m\",\n blue: \"\\x1b[34m\",\n cyan: \"\\x1b[36m\",\n gray: \"\\x1b[90m\",\n} as const;\n\nconst ICONS = {\n trace: \"○\",\n debug: \"◆\",\n info: \"●\",\n warn: \"▲\",\n error: \"✕\",\n critical: \"█\",\n} as const;\n\nexport class LogPrinter {\n private strategy: PrintStrategy;\n private colors: ColorTheme;\n\n constructor(options: {\n strategy: PrintStrategy;\n useColors: boolean;\n colorTheme?: Partial<ColorTheme>;\n }) {\n this.strategy = options.strategy;\n if (options.strategy === \"plain\") {\n this.colors = LogPrinter.NO_COLORS;\n } else {\n const base =\n options.useColors || options.colorTheme ? COLORS : LogPrinter.NO_COLORS;\n this.colors = { ...base, ...(options.colorTheme || {}) };\n }\n }\n\n public print(log: PrintableLog): void {\n if (this.strategy === \"json\") {\n LogPrinter.writers.log(safeStringify(this.normalizeForJson(log)));\n return;\n }\n\n if (this.strategy === \"json_pretty\") {\n LogPrinter.writers.log(safeStringify(this.normalizeForJson(log), 2));\n return;\n }\n\n // Pretty, multi-line output\n const { level, source, message, timestamp, error, data, context } = log;\n\n const timePart = this.formatTime(timestamp);\n const levelPart = this.formatLevel(level);\n const sourcePart = this.formatSource(source);\n\n const headerLine = [timePart, levelPart, sourcePart]\n .filter(Boolean)\n .join(\" \");\n\n const messageString = this.formatMessage(message);\n const messageLines = messageString.split(\"\\n\");\n\n const output: string[] = [headerLine];\n\n const timePartLength = stripAnsi(timePart).length;\n const levelPartLength = stripAnsi(levelPart).length;\n // Indentation is length of time + space + level + space\n const indentation = \" \".repeat(timePartLength + 1 + levelPartLength + 1);\n\n if (message) {\n output.push(...messageLines.map((line) => `${indentation}${line}`));\n }\n\n const errorLines = this.formatError(error);\n const dataLines = this.formatData(data);\n const contextLines = this.formatContext(context);\n\n const detailsExist =\n errorLines.length > 0 || dataLines.length > 0 || contextLines.length > 0;\n\n if (detailsExist) {\n output.push(\"\"); // Add a space before details\n }\n\n output.push(...errorLines, ...dataLines, ...contextLines);\n\n if (detailsExist) {\n output.push(\"\"); // Add a space after for readability\n }\n\n const writer = this.pickWriter(level);\n output.forEach((line) => writer(line));\n // New line for readability especially in console\n writer(\"\");\n }\n\n private pickWriter(level: LogLevels) {\n const toError =\n level === \"warn\" || level === \"error\" || level === \"critical\";\n if (toError && typeof LogPrinter.writers.error === \"function\") {\n return (msg: any) => LogPrinter.writers.error!(msg);\n }\n return (msg: any) => LogPrinter.writers.log(msg);\n }\n\n private formatTime(timestamp: Date): string {\n const time = timestamp.toISOString().slice(11, 19);\n const ms = timestamp.getMilliseconds().toString().padStart(3, \"0\");\n return `${this.colors.gray}${time}.${ms}${this.colors.reset}`;\n }\n\n private formatLevel(level: string): string {\n const color = this.colors[level as keyof typeof COLORS] || this.colors.info;\n const icon = ICONS[level as keyof typeof ICONS] || \"●\";\n const label = level.toUpperCase().padEnd(7);\n return `${color}${icon} ${this.colors.bold}${label}${this.colors.reset}`;\n }\n\n private formatSource(source?: string): string {\n if (!source) return \"\";\n return `${this.colors.cyan}${source}${this.colors.reset}`;\n }\n\n private formatMessage(message: any): string {\n if (typeof message === \"object\" && message !== null) {\n return safeStringify(message, 2);\n }\n return String(message);\n }\n\n private formatError(\n error: PrintableLog[\"error\"],\n indentation = \" \",\n ): string[] {\n if (!error) return [];\n const lines: string[] = [];\n lines.push(\n `${indentation}${this.colors.gray}╰─${this.colors.reset} ${this.colors.error}Error: ${error.name}: ${error.message}${this.colors.reset}`,\n );\n if (error.stack) {\n const frames = error.stack.split(\"\\n\").slice(1); // slice(1) to skip the error message line\n frames.forEach((frame) => {\n const cleaned = frame.trim().replace(/^at /, \"\");\n lines.push(\n `${indentation} ${this.colors.gray}↳${this.colors.reset} ${this.colors.dim}${cleaned}${this.colors.reset}`,\n );\n });\n }\n return lines;\n }\n\n private formatData(data?: Record<string, any>, indentation = \" \"): string[] {\n if (!data || Object.keys(data).length === 0) return [];\n const lines: string[] = [];\n const formatted = safeStringify(data, 2, { maxDepth: 3 }).split(\"\\n\");\n lines.push(\n `${indentation}${this.colors.gray}╰─${this.colors.reset} ${this.colors.cyan}Data:${this.colors.reset}`,\n );\n formatted.forEach((line) => {\n // Keep data lines non-padded to save horizontal space\n lines.push(`${indentation}${this.colors.dim}${line}${this.colors.reset}`);\n });\n return lines;\n }\n\n private formatContext(\n context?: Record<string, any>,\n indentation = \" \",\n ): string[] {\n if (!context) return [];\n const { source: _source, ...filtered } = context;\n if (Object.keys(filtered).length === 0) return [];\n const lines: string[] = [];\n const formatted = safeStringify(filtered, 2, { maxDepth: 3 }).split(\"\\n\");\n lines.push(\n `${indentation}${this.colors.gray}╰─${this.colors.reset} ${this.colors.blue}Context:${this.colors.reset}`,\n );\n formatted.forEach((line) => {\n // Keep context lines non-padded to save horizontal space\n lines.push(`${indentation}${this.colors.dim}${line}${this.colors.reset}`);\n });\n return lines;\n }\n\n private normalizeForJson(log: PrintableLog): PrintableLog {\n const normalized = { ...log };\n if (typeof log.message === \"object\") {\n const text = safeStringify(log.message);\n try {\n normalized.message = JSON.parse(text);\n } catch {\n normalized.message = text;\n }\n }\n return normalized;\n }\n\n private static NO_COLORS: ColorTheme = {\n trace: \"\",\n debug: \"\",\n info: \"\",\n warn: \"\",\n error: \"\",\n critical: \"\",\n reset: \"\",\n bold: \"\",\n dim: \"\",\n blue: \"\",\n cyan: \"\",\n gray: \"\",\n } as const;\n\n private static readonly DEFAULT_WRITERS = {\n log: (msg: any) => {\n if (typeof console !== \"undefined\" && typeof console.log === \"function\") {\n console.log(msg);\n }\n },\n error: (msg: any) => {\n if (\n typeof console !== \"undefined\" &&\n typeof console.error === \"function\"\n ) {\n console.error(msg);\n }\n },\n };\n\n private static writers: {\n log: (msg: any) => void;\n error?: (msg: any) => void;\n } = { ...LogPrinter.DEFAULT_WRITERS };\n\n public static setWriters(\n writers: Partial<{ log: (msg: any) => void; error?: (msg: any) => void }>,\n ) {\n LogPrinter.writers = { ...LogPrinter.writers, ...writers };\n }\n\n public static resetWriters() {\n LogPrinter.writers = { ...LogPrinter.DEFAULT_WRITERS };\n }\n}\n","import { LogPrinter, PrintStrategy as PrinterStrategy } from \"./LogPrinter\";\n\nexport type LogLevels =\n | \"trace\"\n | \"debug\"\n | \"info\"\n | \"warn\"\n | \"error\"\n | \"critical\";\n\nexport interface ILogInfo {\n source?: string;\n error?: unknown | Error;\n data?: Record<string, any>;\n context?: Record<string, any>;\n [key: string]: any;\n}\n\nexport interface ILog {\n level: LogLevels;\n source?: string;\n message: any;\n timestamp: Date;\n error?: {\n name: string;\n message: string;\n stack?: string;\n };\n data?: Record<string, any>;\n context?: Record<string, any>;\n}\n\nexport type PrintStrategy = PrinterStrategy;\nexport class Logger {\n private printThreshold: null | LogLevels = \"info\";\n private printStrategy: PrintStrategy = \"pretty\";\n private bufferLogs: boolean = false;\n private buffer: ILog[] = [];\n private boundContext: Record<string, any> = {};\n private isLocked: boolean = false;\n private useColors: boolean = true;\n private printer: LogPrinter;\n private source?: string;\n // Points to the top-level logger so child loggers share buffering, listeners, and printing.\n private rootLogger?: Logger;\n public localListeners: Array<(log: ILog) => void | Promise<void>> = [];\n\n public static Severity = {\n trace: 0,\n debug: 1,\n info: 2,\n warn: 3,\n error: 4,\n critical: 5,\n };\n\n constructor(\n options: {\n printThreshold: null | LogLevels;\n printStrategy: PrintStrategy;\n bufferLogs: boolean;\n useColors?: boolean;\n },\n boundContext: Record<string, any> = {},\n source?: string,\n printer?: LogPrinter,\n ) {\n this.boundContext = { ...boundContext };\n this.printThreshold = options.printThreshold;\n this.printStrategy = options.printStrategy;\n this.bufferLogs = options.bufferLogs;\n this.useColors =\n typeof options.useColors === \"boolean\"\n ? options.useColors\n : this.detectColorSupport();\n\n this.source = source;\n\n this.printer = printer\n ? printer\n : new LogPrinter({\n strategy: this.printStrategy,\n useColors: this.useColors,\n });\n }\n\n private detectColorSupport(): boolean {\n // Respect NO_COLOR convention\n\n const noColor = typeof process !== \"undefined\" && !!process.env.NO_COLOR;\n if (noColor) return false;\n\n const isTty =\n typeof process !== \"undefined\" &&\n !!process.stdout &&\n !!process.stdout.isTTY;\n return isTty;\n }\n\n /**\n * Creates a new logger instance with additional bound context\n */\n public with({\n source,\n additionalContext: context,\n }: {\n source?: string;\n additionalContext?: Record<string, any>;\n }): Logger {\n const child = new Logger(\n {\n printThreshold: this.printThreshold,\n printStrategy: this.printStrategy,\n bufferLogs: this.bufferLogs,\n useColors: this.useColors,\n },\n { ...this.boundContext, ...context },\n source,\n this.printer,\n );\n // Ensure child logger delegates buffering, listeners and printing to root\n child.rootLogger = this.rootLogger ?? this;\n return child;\n }\n\n /**\n * Core logging method with structured LogInfo\n */\n public async log(\n level: LogLevels,\n message: any,\n logInfo: ILogInfo = {},\n ): Promise<void> {\n const { source, error, data, ...context } = logInfo;\n\n const log: ILog = {\n level,\n message,\n source: source || this.source,\n timestamp: new Date(),\n error: error ? this.extractErrorInfo(error) : undefined,\n data: data || undefined,\n context: { ...this.boundContext, ...context },\n };\n\n const root = this.rootLogger ?? this;\n\n if (root.bufferLogs) {\n root.buffer.push(log);\n return;\n }\n\n await root.triggerLogListeners(log);\n\n if (root.canPrint(level)) {\n root.printer.print(log);\n }\n }\n\n private extractErrorInfo(error: Error | unknown): {\n name: string;\n message: string;\n stack?: string;\n } {\n if (error instanceof Error) {\n return {\n name: error.name,\n message: error.message,\n stack: error.stack,\n };\n }\n\n return {\n name: \"UnknownError\",\n message: String(error),\n };\n }\n\n public async info(message: any, logInfo?: ILogInfo) {\n await this.log(\"info\", message, logInfo);\n }\n\n public async error(message: any, logInfo?: ILogInfo) {\n await this.log(\"error\", message, logInfo);\n }\n\n public async warn(message: any, logInfo?: ILogInfo) {\n await this.log(\"warn\", message, logInfo);\n }\n\n public async debug(message: any, logInfo?: ILogInfo) {\n await this.log(\"debug\", message, logInfo);\n }\n\n public async trace(message: any, logInfo?: ILogInfo) {\n await this.log(\"trace\", message, logInfo);\n }\n\n public async critical(message: any, logInfo?: ILogInfo) {\n await this.log(\"critical\", message, logInfo);\n }\n\n /**\n * Direct print for tests and advanced scenarios. Delegates to LogPrinter.\n */\n public print(log: ILog) {\n this.printer.print(log);\n }\n\n /**\n * @param listener - A listener that will be triggered for every log.\n */\n public onLog(listener: (log: ILog) => any) {\n if (this.rootLogger && this.rootLogger !== this) {\n this.rootLogger.onLog(listener);\n } else {\n this.localListeners.push(listener);\n }\n }\n\n /**\n * Marks the logger as ready.\n * This is used to trigger the local listeners and print the buffered logs (if they exists)\n * @returns A promise that resolves when the logger is ready.\n */\n public async lock() {\n const root = this.rootLogger ?? this;\n if (root.isLocked) {\n return;\n }\n\n if (root.bufferLogs) {\n for (const log of root.buffer) {\n await root.triggerLogListeners(log);\n }\n for (const log of root.buffer) {\n if (root.canPrint(log.level)) {\n root.printer.print(log);\n }\n }\n }\n root.bufferLogs = false;\n root.buffer = [];\n root.isLocked = true;\n }\n\n private canPrint(level: LogLevels) {\n if (this.printThreshold === null) {\n return false;\n }\n\n return (\n this.printThreshold &&\n Logger.Severity[level] >= Logger.Severity[this.printThreshold]\n );\n }\n\n private async triggerLogListeners(log: ILog) {\n if (this.rootLogger && this.rootLogger !== this) {\n await this.rootLogger.triggerLogListeners(log);\n }\n\n for (const listener of this.localListeners) {\n try {\n await listener(log);\n } catch (error) {\n this.print({\n level: \"error\",\n message: \"Error in log listener\",\n timestamp: new Date(),\n error: {\n name: \"ListenerError\",\n message: error instanceof Error ? error.message : String(error),\n },\n });\n // We're not breaking the app due to logListener errors.\n continue;\n }\n }\n }\n}\n","import {\n DependencyMapType,\n DependencyValuesType,\n ITask,\n IResource,\n IEvent,\n IEventEmission,\n TaskLocalInterceptor,\n ResourceDependencyValuesType,\n TaskDependencyWithIntercept,\n TaskCallOptions,\n} from \"../defs\";\nimport { Store } from \"./Store\";\nimport {\n ResourceStoreElementType,\n TaskStoreElementType,\n HookDependencyState,\n} from \"../types/storeTypes\";\nimport * as utils from \"../define\";\nimport { EventManager } from \"./EventManager\";\nimport { ResourceInitializer } from \"./ResourceInitializer\";\nimport { TaskRunner } from \"./TaskRunner\";\nimport {\n dependencyNotFoundError,\n eventNotFoundError,\n unknownItemTypeError,\n} from \"../errors\";\nimport { Logger } from \"./Logger\";\n\n/**\n * Resolves and caches computed dependencies for store items (resources, tasks, middleware, hooks).\n */\nexport class DependencyProcessor {\n protected readonly resourceInitializer: ResourceInitializer;\n protected readonly logger!: Logger;\n constructor(\n protected readonly store: Store,\n protected readonly eventManager: EventManager,\n protected readonly taskRunner: TaskRunner,\n logger: Logger,\n ) {\n this.logger = logger.with({ source: \"dependencyProcessor\" });\n this.resourceInitializer = new ResourceInitializer(\n store,\n eventManager,\n logger,\n );\n }\n\n /**\n * Computes and caches dependencies for all registered store items.\n */\n async computeAllDependencies() {\n for (const middleware of this.store.resourceMiddlewares.values()) {\n const computedDependencies = await this.extractDependencies(\n middleware.middleware.dependencies,\n middleware.middleware.id,\n );\n\n middleware.computedDependencies = computedDependencies;\n middleware.isInitialized = true;\n }\n\n for (const middleware of this.store.taskMiddlewares.values()) {\n const computedDependencies = await this.extractDependencies(\n middleware.middleware.dependencies,\n middleware.middleware.id,\n );\n\n middleware.computedDependencies = computedDependencies;\n middleware.isInitialized = true;\n }\n\n // Compute hook dependencies before traversing resource/task dependencies.\n // Resource/task dependency extraction can initialize resources that emit\n // events; hooks must be dependency-ready before that happens.\n for (const hookStoreElement of this.store.hooks.values()) {\n const hook = hookStoreElement.hook;\n const deps = hook.dependencies as DependencyMapType;\n hookStoreElement.dependencyState = HookDependencyState.Computing;\n hookStoreElement.computedDependencies = await this.extractDependencies(\n deps,\n hook.id,\n );\n hookStoreElement.dependencyState = HookDependencyState.Ready;\n }\n\n for (const resource of this.store.resources.values()) {\n await this.processResourceDependencies(resource);\n }\n\n for (const task of this.store.tasks.values()) {\n await this.computeTaskDependencies(task);\n }\n\n // leftovers that were registered but not depended upon, except root\n // they should still be initialized as they might extend other\n await this.initializeUninitializedResources();\n }\n\n private async computeTaskDependencies(\n task: TaskStoreElementType<any, any, any>,\n ) {\n if (task.isInitialized) {\n return;\n }\n\n const deps = task.task.dependencies as DependencyMapType;\n task.computedDependencies = await this.extractDependencies(\n deps,\n task.task.id,\n );\n // Mark task as initialized so subsequent injections don't recompute using\n // a potentially lazy dependencies() function and lose computed values.\n task.isInitialized = true;\n }\n\n // Initialize non-root resources that are registered but not depended upon (side effects/disposers).\n public async initializeUninitializedResources() {\n for (const resource of this.store.resources.values()) {\n if (\n resource.isInitialized === false &&\n // The root is the last one to be initialized and is done in a separate process.\n resource.resource.id !== this.store.root.resource.id\n ) {\n try {\n await this.processResourceDependencies(resource);\n const { value, context } =\n await this.resourceInitializer.initializeResource(\n resource.resource,\n resource.config,\n resource.computedDependencies!,\n );\n resource.context = context;\n resource.value = value;\n resource.isInitialized = true;\n this.store.recordResourceInitialized(resource.resource.id);\n } catch (error: unknown) {\n this.rethrowResourceInitError(resource.resource.id, error);\n }\n }\n }\n }\n\n private rethrowResourceInitError(resourceId: string, error: unknown): never {\n const prefix = `Resource \"${resourceId}\" initialization failed`;\n if (error instanceof Error) {\n if (!error.message.includes(resourceId)) {\n error.message = `${prefix}: ${error.message}`;\n }\n if (!Object.prototype.hasOwnProperty.call(error, \"resourceId\")) {\n Object.defineProperty(error, \"resourceId\", {\n value: resourceId,\n configurable: true,\n });\n }\n if (!Object.prototype.hasOwnProperty.call(error, \"cause\")) {\n Object.defineProperty(error, \"cause\", {\n value: { resourceId },\n configurable: true,\n });\n }\n throw error;\n }\n\n throw new Error(`${prefix}: ${String(error)}`);\n }\n\n /**\n * Computes and caches dependencies for a resource (if not already computed).\n */\n protected async processResourceDependencies<TD extends DependencyMapType>(\n resource: ResourceStoreElementType<any, any, TD>,\n ) {\n if (Object.keys(resource.computedDependencies || {}).length > 0) {\n return;\n }\n\n const deps = (resource.resource.dependencies || ({} as TD)) as TD;\n const extracted = await this.extractDependencies(\n deps,\n resource.resource.id,\n );\n\n resource.computedDependencies = this.wrapResourceDependencies<TD>(\n deps,\n extracted,\n );\n // resource.isInitialized = true;\n }\n\n private wrapResourceDependencies<TD extends DependencyMapType>(\n deps: TD,\n extracted: DependencyValuesType<TD>,\n ): ResourceDependencyValuesType<TD> {\n const wrapped: Record<string, unknown> = {};\n for (const key of Object.keys(deps) as Array<keyof TD>) {\n const original = deps[key];\n const value = (extracted as Record<string, unknown>)[key as string];\n if (utils.isOptional(original)) {\n const inner = (original as { inner: unknown }).inner;\n if (utils.isTask(inner)) {\n wrapped[key as string] = value\n ? this.makeTaskWithIntercept(inner)\n : undefined;\n } else {\n wrapped[key as string] = value as unknown;\n }\n continue;\n }\n if (utils.isTask(original)) {\n wrapped[key as string] = this.makeTaskWithIntercept(original);\n } else {\n wrapped[key as string] = value as unknown;\n }\n }\n return wrapped as unknown as ResourceDependencyValuesType<TD>;\n }\n\n private makeTaskWithIntercept<\n I,\n O extends Promise<any>,\n D extends DependencyMapType,\n >(original: ITask<I, O, D>): TaskDependencyWithIntercept<I, O> {\n const taskId = original.id;\n const fn: (input: I, options?: TaskCallOptions) => O = (input, options) => {\n const storeTask = this.store.tasks.get(taskId)!;\n const effective: ITask<I, O, D> = storeTask.task;\n\n return this.taskRunner.run(effective, input, options) as O;\n };\n return Object.assign(fn, {\n intercept: (middleware: TaskLocalInterceptor<I, O>) => {\n this.store.checkLock();\n const storeTask = this.store.tasks.get(taskId)!;\n\n if (!storeTask.interceptors) storeTask.interceptors = [];\n storeTask.interceptors.push(middleware);\n },\n }) as unknown as TaskDependencyWithIntercept<I, O>;\n }\n\n public async initializeRoot() {\n const rootResource = this.store.root;\n\n const { value, context } =\n await this.resourceInitializer.initializeResource(\n rootResource.resource,\n rootResource.config,\n // They are already computed\n rootResource.computedDependencies!,\n );\n\n rootResource.context = context;\n rootResource.value = value;\n rootResource.isInitialized = true;\n this.store.recordResourceInitialized(rootResource.resource.id);\n }\n\n /**\n * Attaches listeners for all hooks. Must run before emitting events.\n */\n public attachListeners() {\n // Attach listeners for dedicated hooks map\n for (const hookStoreElement of this.store.hooks.values()) {\n const hook = hookStoreElement.hook;\n if (hook.on) {\n const eventDefinition = hook.on;\n\n const handler = async (receivedEvent: IEventEmission<any>) => {\n if (receivedEvent.source === hook.id) {\n return;\n }\n if (hookStoreElement.dependencyState !== HookDependencyState.Ready) {\n return;\n }\n return this.eventManager.executeHookWithInterceptors(\n hook,\n receivedEvent,\n hookStoreElement.computedDependencies,\n );\n };\n\n const order = hook.order ?? 0;\n\n if (eventDefinition === \"*\") {\n this.eventManager.addGlobalListener(handler, { order });\n } else if (Array.isArray(eventDefinition)) {\n for (const e of eventDefinition) {\n if (this.store.events.get(e.id) === undefined) {\n eventNotFoundError.throw({ id: e.id });\n }\n }\n this.eventManager.addListener(\n eventDefinition as unknown as IEvent[],\n handler,\n {\n order,\n },\n );\n } else {\n if (this.store.events.get(eventDefinition.id) === undefined) {\n eventNotFoundError.throw({ id: eventDefinition.id });\n }\n this.eventManager.addListener(\n eventDefinition as unknown as IEvent,\n handler,\n {\n order,\n },\n );\n }\n }\n }\n }\n\n async extractDependencies<T extends DependencyMapType>(\n map: T,\n source: string,\n ): Promise<DependencyValuesType<T>> {\n const object = {} as DependencyValuesType<T>;\n\n for (const key in map) {\n try {\n object[key] = await this.extractDependency(map[key], source);\n // Special handling, a little bit of magic and memory sacrifice for the sake of observability.\n // Maybe later we can allow this to be opt-in to save 'memory' in the case of large tasks?\n const val = object[key] as unknown;\n if (val instanceof Logger) {\n (object as Record<string, unknown>)[key] = val.with({ source });\n }\n } catch (e) {\n const errorMessage = String(e);\n this.logger.error(\n `Failed to extract dependency from source: ${source} -> ${key} with error: ${errorMessage}`,\n );\n\n throw e;\n }\n }\n this.logger.trace(`Finished computing dependencies for source: ${source}`);\n\n return object;\n }\n\n async extractDependency(object: any, source: string) {\n this.logger.trace(`Extracting dependency -> ${source} -> ${object?.id}`);\n if (utils.isOptional(object)) {\n const inner = object.inner;\n if (utils.isResource(inner)) {\n const exists = this.store.resources.get(inner.id) !== undefined;\n return exists ? this.extractResourceDependency(inner) : undefined;\n } else if (utils.isTask(inner)) {\n const exists = this.store.tasks.get(inner.id) !== undefined;\n return exists ? this.extractTaskDependency(inner) : undefined;\n } else if (utils.isEvent(inner)) {\n const exists = this.store.events.get(inner.id) !== undefined;\n return exists ? this.extractEventDependency(inner, source) : undefined;\n } else if (utils.isError(inner)) {\n const exists = this.store.errors.get(inner.id) !== undefined;\n return exists ? inner : undefined;\n } else if (utils.isAsyncContext(inner)) {\n const exists = this.store.asyncContexts.get(inner.id) !== undefined;\n return exists ? inner : undefined;\n }\n unknownItemTypeError.throw({ item: inner });\n }\n if (utils.isResource(object)) {\n return this.extractResourceDependency(object);\n } else if (utils.isTask(object)) {\n return this.extractTaskDependency(object);\n } else if (utils.isEvent(object)) {\n return this.extractEventDependency(object, source);\n } else if (utils.isError(object)) {\n if (this.store.errors.get(object.id) === undefined) {\n dependencyNotFoundError.throw({ key: `Error ${object.id}` });\n }\n // For error helpers, the dependency value is the helper itself\n return object;\n } else if (utils.isAsyncContext(object)) {\n if (this.store.asyncContexts.get(object.id) === undefined) {\n dependencyNotFoundError.throw({ key: `AsyncContext ${object.id}` });\n }\n return object;\n } else {\n unknownItemTypeError.throw({ item: object });\n }\n }\n\n /**\n * Converts the event into a running functions with real inputs\n * @param object\n * @returns\n */\n extractEventDependency(object: IEvent<any>, source: string) {\n return async (input: any) => {\n return this.eventManager.emit(object, input, source);\n };\n }\n\n async extractTaskDependency(object: ITask<any, any, {}>) {\n const storeTask = this.store.tasks.get(object.id);\n if (storeTask === undefined) {\n dependencyNotFoundError.throw({ key: `Task ${object.id}` });\n }\n\n const st = storeTask!;\n if (!st.isInitialized) {\n // it's sanitised\n const dependencies = st.task.dependencies as DependencyMapType;\n\n st.computedDependencies = await this.extractDependencies(\n dependencies,\n st.task.id,\n );\n st.isInitialized = true;\n }\n\n return (input: unknown, options?: TaskCallOptions) => {\n return this.taskRunner.run(st.task, input, options);\n };\n }\n\n async extractResourceDependency(object: IResource<any, any, any>) {\n // check if it exists in the store with the value\n const storeResource = this.store.resources.get(object.id);\n if (storeResource === undefined) {\n dependencyNotFoundError.throw({ key: `Resource ${object.id}` });\n }\n\n const sr = storeResource!;\n const { resource, config } = sr;\n\n if (!sr.isInitialized) {\n const depMap = (resource.dependencies || {}) as DependencyMapType;\n\n let wrapped =\n sr.computedDependencies as ResourceDependencyValuesType<any>;\n\n // If not already computed, compute and cache it!\n if (!wrapped || Object.keys(wrapped).length === 0) {\n const raw = await this.extractDependencies(depMap, resource.id);\n wrapped = this.wrapResourceDependencies(depMap, raw);\n sr.computedDependencies = wrapped;\n }\n\n try {\n const { value, context } =\n await this.resourceInitializer.initializeResource(\n resource,\n config,\n wrapped,\n );\n\n sr.context = context;\n sr.value = value;\n\n // we need to initialize the resource\n sr.isInitialized = true;\n this.store.recordResourceInitialized(resource.id);\n } catch (error: unknown) {\n this.rethrowResourceInitError(resource.id, error);\n }\n }\n\n return sr.value;\n }\n}\n","/**\n * A node that has dependencies.\n */\nexport interface IDependentNode {\n id: string;\n dependencies: Record<string, IDependentNode>;\n}\n\ninterface FindCircularDependenciesResult {\n cycles: string[];\n missingDependencies: Array<{ nodeId: string; dependencyId: string }>;\n}\n\nexport function findCircularDependencies(\n nodes: IDependentNode[],\n): FindCircularDependenciesResult {\n const result: FindCircularDependenciesResult = {\n cycles: [],\n missingDependencies: [],\n };\n const visited: Set<string> = new Set();\n const stack: Set<string> = new Set();\n const path: string[] = [];\n\n function dfs(node: IDependentNode): void {\n if (stack.has(node.id)) {\n const cycleStartIndex = path.indexOf(node.id);\n const cycle = path.slice(cycleStartIndex).concat(node.id).join(\" -> \");\n result.cycles.push(cycle);\n return;\n }\n\n if (visited.has(node.id)) return;\n\n visited.add(node.id);\n stack.add(node.id);\n path.push(node.id);\n\n for (const [depKey, dependentNode] of Object.entries(node.dependencies)) {\n if (!dependentNode) {\n result.missingDependencies.push({\n nodeId: node.id,\n dependencyId: depKey,\n });\n continue;\n }\n dfs(dependentNode);\n }\n\n stack.delete(node.id);\n path.pop();\n }\n\n for (const node of nodes) {\n if (!visited.has(node.id)) {\n dfs(node);\n }\n }\n\n result.cycles = Array.from(new Set(result.cycles)); // Remove duplicate cycles\n return result;\n}\n","import {\n duplicateRegistrationError,\n middlewareNotRegisteredError,\n tagNotFoundError,\n} from \"../errors\";\nimport { ITaggable } from \"../defs\";\nimport { StoreRegistry } from \"./StoreRegistry\";\n\nexport class StoreValidator {\n constructor(private registry: StoreRegistry) {}\n\n checkIfIDExists(id: string): void | never {\n if (this.registry.tasks.has(id)) {\n duplicateRegistrationError.throw({ type: \"Task\", id });\n }\n if (this.registry.resources.has(id)) {\n duplicateRegistrationError.throw({ type: \"Resource\", id });\n }\n if (this.registry.events.has(id)) {\n duplicateRegistrationError.throw({ type: \"Event\", id });\n }\n if (this.registry.errors.has(id)) {\n duplicateRegistrationError.throw({ type: \"Error\", id });\n }\n if (this.registry.asyncContexts.has(id)) {\n duplicateRegistrationError.throw({ type: \"AsyncContext\", id });\n }\n if (this.registry.taskMiddlewares.has(id)) {\n duplicateRegistrationError.throw({ type: \"Middleware\", id });\n }\n if (this.registry.resourceMiddlewares.has(id)) {\n duplicateRegistrationError.throw({ type: \"Middleware\", id });\n }\n if (this.registry.tags.has(id)) {\n duplicateRegistrationError.throw({ type: \"Tag\", id });\n }\n if (this.registry.hooks.has(id)) {\n duplicateRegistrationError.throw({ type: \"Hook\", id });\n }\n }\n\n runSanityChecks() {\n for (const task of this.registry.tasks.values()) {\n const middlewares = task.task.middleware;\n middlewares.forEach((middlewareAttachment) => {\n if (!this.registry.taskMiddlewares.has(middlewareAttachment.id)) {\n middlewareNotRegisteredError.throw({\n type: \"task\",\n source: task.task.id,\n middlewareId: middlewareAttachment.id,\n });\n }\n });\n }\n\n for (const resource of this.registry.resources.values()) {\n const middlewares = resource.resource.middleware;\n middlewares.forEach((middlewareAttachment) => {\n if (!this.registry.resourceMiddlewares.has(middlewareAttachment.id)) {\n middlewareNotRegisteredError.throw({\n type: \"resource\",\n source: resource.resource.id,\n middlewareId: middlewareAttachment.id,\n });\n }\n });\n }\n\n this.ensureAllTagsUsedAreRegistered();\n }\n\n ensureAllTagsUsedAreRegistered() {\n const taggables: ITaggable[] = [\n ...Array.from(this.registry.tasks.values()).map((x) => x.task),\n ...Array.from(this.registry.resources.values()).map((x) => x.resource),\n ...Array.from(this.registry.events.values()).map((x) => x.event),\n ...Array.from(this.registry.taskMiddlewares.values()).map(\n (x) => x.middleware,\n ),\n ...Array.from(this.registry.resourceMiddlewares.values()).map(\n (x) => x.middleware,\n ),\n ...Array.from(this.registry.hooks.values()).map((x) => x.hook),\n ];\n\n for (const taggable of taggables) {\n const tags = taggable.tags;\n if (tags) {\n for (const tag of tags) {\n if (!this.registry.tags.has(tag.id)) {\n tagNotFoundError.throw({ id: tag.id });\n }\n }\n }\n }\n }\n}\n","import {\n IResource,\n ITask,\n IResourceWithConfig,\n RegisterableItems,\n ITaskMiddleware,\n IResourceMiddleware,\n IEvent,\n ITag,\n IHook,\n} from \"../defs\";\nimport * as utils from \"../define\";\nimport { unknownItemTypeError } from \"../errors\";\nimport {\n TaskStoreElementType,\n TaskMiddlewareStoreElementType,\n ResourceMiddlewareStoreElementType,\n ResourceStoreElementType,\n EventStoreElementType,\n HookStoreElementType,\n} from \"../defs\";\nimport { StoreValidator } from \"./StoreValidator\";\nimport { Store } from \"./Store\";\nimport { IDependentNode } from \"./utils/findCircularDependencies\";\nimport { IErrorHelper } from \"../types/error\";\nimport type { IAsyncContext } from \"../types/asyncContext\";\nimport { HookDependencyState } from \"../types/storeTypes\";\n\ntype StoringMode = \"normal\" | \"override\";\nexport class StoreRegistry {\n public tasks: Map<string, TaskStoreElementType> = new Map();\n public resources: Map<string, ResourceStoreElementType> = new Map();\n public events: Map<string, EventStoreElementType> = new Map();\n public taskMiddlewares: Map<string, TaskMiddlewareStoreElementType> =\n new Map();\n public resourceMiddlewares: Map<string, ResourceMiddlewareStoreElementType> =\n new Map();\n public hooks: Map<string, HookStoreElementType> = new Map();\n public tags: Map<string, ITag> = new Map();\n public asyncContexts: Map<string, IAsyncContext<any>> = new Map();\n public errors: Map<string, IErrorHelper<any>> = new Map();\n\n private validator: StoreValidator;\n\n constructor(protected readonly store: Store) {\n this.validator = new StoreValidator(this);\n }\n\n getValidator(): StoreValidator {\n return this.validator;\n }\n\n storeGenericItem<_C>(item: RegisterableItems) {\n if (utils.isTask(item)) {\n this.storeTask<_C>(item);\n } else if (utils.isError(item)) {\n this.storeError<_C>(item as IErrorHelper<any>);\n } else if (utils.isHook && utils.isHook(item)) {\n this.storeHook<_C>(item as IHook);\n } else if (utils.isResource(item)) {\n this.storeResource<_C>(item);\n } else if (utils.isEvent(item)) {\n this.storeEvent<_C>(item);\n } else if (utils.isAsyncContext(item)) {\n this.storeAsyncContext<_C>(item as IAsyncContext<any>);\n } else if (utils.isTaskMiddleware(item)) {\n this.storeTaskMiddleware<_C>(item as ITaskMiddleware<any>);\n } else if (utils.isResourceMiddleware(item)) {\n this.storeResourceMiddleware<_C>(item as IResourceMiddleware<any>);\n } else if (utils.isResourceWithConfig(item)) {\n this.storeResourceWithConfig<_C>(item);\n } else if (utils.isTag(item)) {\n this.storeTag(item);\n } else {\n unknownItemTypeError.throw({ item });\n }\n }\n\n storeError<_C>(item: IErrorHelper<any>) {\n this.validator.checkIfIDExists(item.id);\n this.errors.set(item.id, item);\n }\n\n storeAsyncContext<_C>(item: IAsyncContext<any>) {\n this.validator.checkIfIDExists(item.id);\n this.asyncContexts.set(item.id, item);\n }\n\n storeTag(item: ITag<any, any, any>) {\n this.validator.checkIfIDExists(item.id);\n this.tags.set(item.id, item);\n }\n\n storeHook<_C>(item: IHook<any, any>, overrideMode: StoringMode = \"normal\") {\n overrideMode === \"normal\" && this.validator.checkIfIDExists(item.id);\n\n const hook = this.getFreshValue(item, this.hooks, \"hook\", overrideMode);\n\n // store separately\n this.hooks.set(hook.id, {\n hook,\n computedDependencies: {},\n dependencyState: HookDependencyState.Pending,\n });\n }\n\n storeTaskMiddleware<_C>(\n item: ITaskMiddleware<any>,\n storingMode: StoringMode = \"normal\",\n ) {\n storingMode === \"normal\" && this.validator.checkIfIDExists(item.id);\n\n const middleware = this.getFreshValue(\n item,\n this.taskMiddlewares,\n \"middleware\",\n storingMode,\n );\n\n this.taskMiddlewares.set(item.id, {\n middleware,\n computedDependencies: {},\n isInitialized: false,\n });\n }\n\n storeResourceMiddleware<_C>(\n item: IResourceMiddleware<any>,\n overrideMode: StoringMode = \"normal\",\n ) {\n overrideMode === \"normal\" && this.validator.checkIfIDExists(item.id);\n const middleware = this.getFreshValue(\n item,\n this.resourceMiddlewares,\n \"middleware\",\n overrideMode,\n );\n\n this.resourceMiddlewares.set(item.id, {\n middleware,\n computedDependencies: {},\n isInitialized: false,\n });\n }\n\n storeEvent<_C>(item: IEvent<void>) {\n this.validator.checkIfIDExists(item.id);\n this.events.set(item.id, { event: item });\n }\n\n storeResourceWithConfig<_C>(\n item: IResourceWithConfig<any, any, any>,\n storingMode: StoringMode = \"normal\",\n ) {\n storingMode === \"normal\" &&\n this.validator.checkIfIDExists(item.resource.id);\n\n const prepared = this.getFreshValue(\n item.resource,\n this.resources,\n \"resource\",\n storingMode,\n item.config,\n );\n\n this.resources.set(prepared.id, {\n resource: prepared,\n config: item.config,\n value: undefined,\n isInitialized: false,\n context: undefined,\n });\n\n this.computeRegistrationDeeply(prepared, item.config);\n return prepared;\n }\n\n computeRegistrationDeeply<_C>(element: IResource<_C>, config?: _C) {\n let items =\n typeof element.register === \"function\"\n ? element.register(config as _C)\n : element.register;\n\n if (!items) {\n items = [];\n }\n\n element.register = items;\n\n for (const item of items) {\n // will call registration if it detects another resource.\n this.storeGenericItem<_C>(item);\n }\n }\n\n storeResource<_C>(\n item: IResource<any, any, any>,\n overrideMode: StoringMode = \"normal\",\n ) {\n overrideMode === \"normal\" && this.validator.checkIfIDExists(item.id);\n\n const prepared = this.getFreshValue(\n item,\n this.resources,\n \"resource\",\n overrideMode,\n );\n\n this.resources.set(prepared.id, {\n resource: prepared,\n config: {},\n value: undefined,\n isInitialized: false,\n context: undefined,\n });\n\n this.computeRegistrationDeeply(prepared, {});\n return prepared;\n }\n\n storeTask<_C>(\n item: ITask<any, any, {}>,\n storingMode: StoringMode = \"normal\",\n ) {\n storingMode === \"normal\" && this.validator.checkIfIDExists(item.id);\n\n const task = this.getFreshValue(item, this.tasks, \"task\", storingMode);\n\n this.tasks.set(task.id, {\n task,\n computedDependencies: {},\n isInitialized: false,\n });\n }\n\n // Feels like a dependencyProcessor task?\n getDependentNodes() {\n const depenedants: IDependentNode[] = [];\n\n // First, create all nodes\n const nodeMap = new Map<string, IDependentNode>();\n\n // Create nodes for tasks\n this.setupBlankNodes(nodeMap, depenedants);\n\n // Now, populate dependencies with references to actual nodes\n for (const task of this.tasks.values()) {\n const node = nodeMap.get(task.task.id)!;\n\n // Add task dependencies\n if (task.task.dependencies) {\n for (const [depKey, depItem] of Object.entries(\n task.task.dependencies,\n )) {\n const candidate = utils.isOptional(depItem) ? depItem.inner : depItem;\n const depNode = nodeMap.get(candidate.id);\n if (depNode) {\n node.dependencies[depKey] = depNode;\n }\n }\n }\n\n // Add local middleware dependencies for tasks (hooks have no middleware)\n const t = task.task;\n for (const middleware of t.middleware) {\n const middlewareNode = nodeMap.get(middleware.id);\n if (middlewareNode) {\n node.dependencies[middleware.id] = middlewareNode;\n }\n }\n }\n\n // Populate task middleware dependencies\n for (const storeTaskMiddleware of this.taskMiddlewares.values()) {\n const node = nodeMap.get(storeTaskMiddleware.middleware.id)!;\n const { middleware } = storeTaskMiddleware;\n\n if (middleware.dependencies) {\n for (const [depKey, depItem] of Object.entries(\n middleware.dependencies,\n )) {\n const candidate = utils.isOptional(depItem) ? depItem.inner : depItem;\n\n const depNode = nodeMap.get(candidate.id);\n if (depNode) {\n node.dependencies[depKey] = depNode;\n }\n }\n }\n\n if (middleware.everywhere) {\n const filter =\n typeof middleware.everywhere === \"function\"\n ? middleware.everywhere\n : () => true;\n\n for (const task of this.tasks.values()) {\n if (filter(task.task)) {\n const taskNode = nodeMap.get(task.task.id)!;\n // node.dependencies[task.task.id] = taskNode;\n taskNode.dependencies[`__middleware.${middleware.id}`] = node;\n }\n }\n }\n }\n\n // Populate resource middleware dependencies\n for (const storeResourceMiddleware of this.resourceMiddlewares.values()) {\n const node = nodeMap.get(storeResourceMiddleware.middleware.id)!;\n const { middleware } = storeResourceMiddleware;\n if (middleware.dependencies) {\n for (const [depKey, depItem] of Object.entries(\n middleware.dependencies,\n )) {\n const candidate = utils.isOptional(depItem) ? depItem.inner : depItem;\n\n const depNode = nodeMap.get(candidate.id);\n if (depNode) {\n node.dependencies[depKey] = depNode;\n }\n }\n }\n\n if (middleware.everywhere) {\n const filter =\n typeof middleware.everywhere === \"function\"\n ? middleware.everywhere\n : () => true;\n\n for (const resource of this.resources.values()) {\n if (filter(resource.resource)) {\n const resourceNode = nodeMap.get(resource.resource.id)!;\n // node.dependencies[resource.resource.id] = resourceNode;\n resourceNode.dependencies[`__middleware.${middleware.id}`] = node;\n }\n }\n }\n }\n\n // Populate resource dependencies\n for (const resource of this.resources.values()) {\n const node = nodeMap.get(resource.resource.id)!;\n\n // Add resource dependencies\n if (resource.resource.dependencies) {\n for (const [depKey, depItem] of Object.entries(\n resource.resource.dependencies,\n )) {\n const candidate = utils.isOptional(depItem) ? depItem.inner : depItem;\n\n const depNode = nodeMap.get(candidate.id);\n if (depNode) {\n node.dependencies[depKey] = depNode;\n }\n }\n }\n\n // Add local middleware dependencies\n for (const middleware of resource.resource.middleware) {\n const middlewareNode = nodeMap.get(middleware.id);\n if (middlewareNode) {\n node.dependencies[middleware.id] = middlewareNode;\n }\n }\n }\n\n for (const hook of this.hooks.values()) {\n const node = nodeMap.get(hook.hook.id)!;\n if (hook.hook.dependencies) {\n for (const [depKey, depItem] of Object.entries(\n hook.hook.dependencies,\n )) {\n const candidate = utils.isOptional(depItem) ? depItem.inner : depItem;\n const depNode = nodeMap.get(candidate.id);\n\n if (depNode) {\n node.dependencies[depKey] = depNode;\n }\n }\n }\n }\n\n return depenedants;\n }\n\n /**\n * Builds a directed graph of event emissions based on hooks listening to events\n * and their dependencies on events (emission capability). Ignores wildcard hooks by default.\n */\n buildEventEmissionGraph() {\n const nodes = new Map<string, IDependentNode>();\n\n // Create nodes for all events\n for (const e of this.events.values()) {\n nodes.set(e.event.id, { id: e.event.id, dependencies: {} });\n }\n\n // For each hook, if it listens to concrete event(s) and depends on events, add edges listenedEvent -> depEvent\n for (const h of this.hooks.values()) {\n const listened: string[] = [];\n const on = h.hook.on;\n if (on === \"*\") continue; // avoid over-reporting for global hooks\n if (Array.isArray(on))\n listened.push(...(on as IEvent[]).map((e: IEvent) => e.id));\n else listened.push((on as IEvent).id);\n\n // Collect event dependencies from the hook\n const depEvents: string[] = [];\n const deps = h.hook.dependencies;\n if (deps) {\n for (const value of Object.values(deps)) {\n // For optional wrappers, extract the inner value\n const candidate: { id?: string } = utils.isOptional(value)\n ? (value as { inner: { id?: string } }).inner\n : (value as { id?: string });\n if (candidate && utils.isEvent(candidate)) {\n depEvents.push(candidate.id);\n }\n }\n }\n\n // Add edges\n for (const srcId of listened) {\n const srcNode = nodes.get(srcId);\n if (!srcNode) continue; // skip unknown/unregistered events\n for (const dstId of depEvents) {\n if (srcId === dstId) continue; // ignore trivial self edge\n const dstNode = nodes.get(dstId);\n if (dstNode) {\n srcNode.dependencies[dstId] = dstNode;\n }\n }\n }\n }\n\n return Array.from(nodes.values());\n }\n\n private setupBlankNodes(\n nodeMap: Map<string, IDependentNode>,\n depenedants: IDependentNode[],\n ) {\n for (const task of this.tasks.values()) {\n const node: IDependentNode = {\n id: task.task.id,\n dependencies: {},\n };\n nodeMap.set(task.task.id, node);\n depenedants.push(node);\n }\n\n for (const middleware of this.taskMiddlewares.values()) {\n const node: IDependentNode = {\n id: middleware.middleware.id,\n dependencies: {},\n };\n nodeMap.set(middleware.middleware.id, node);\n depenedants.push(node);\n }\n\n for (const middleware of this.resourceMiddlewares.values()) {\n const node: IDependentNode = {\n id: middleware.middleware.id,\n dependencies: {},\n };\n nodeMap.set(middleware.middleware.id, node);\n depenedants.push(node);\n }\n\n // Create nodes for resources\n for (const resource of this.resources.values()) {\n const node: IDependentNode = {\n id: resource.resource.id,\n dependencies: {},\n };\n nodeMap.set(resource.resource.id, node);\n depenedants.push(node);\n }\n\n for (const hook of this.hooks.values()) {\n const node: IDependentNode = {\n id: hook.hook.id,\n dependencies: {},\n };\n nodeMap.set(hook.hook.id, node);\n depenedants.push(node);\n }\n }\n\n getTasksWithTag(tag: string | ITag) {\n const tagId = typeof tag === \"string\" ? tag : tag.id;\n\n return Array.from(this.tasks.values())\n .filter((x) => {\n return x.task.tags.some((t) => t.id === tagId);\n })\n .map((x) => x.task);\n }\n\n getResourcesWithTag(tag: string | ITag) {\n const tagId = typeof tag === \"string\" ? tag : tag.id;\n\n return Array.from(this.resources.values())\n .filter((x) => {\n return x.resource.tags.some((t) => t.id === tagId);\n })\n .map((x) => x.resource);\n }\n\n /**\n * Used to fetch the value cloned, and if we're dealing with an override, we need to extend the previous value.\n */\n private getFreshValue<\n T extends { id: string; dependencies?: any; config?: any },\n MapType,\n >(\n item: T,\n collection: Map<string, MapType>,\n key: keyof MapType,\n overrideMode: StoringMode,\n config?: any, // If provided config, takes precedence over config in item.\n ): T {\n let currentItem: T;\n if (overrideMode === \"override\") {\n const existing = collection.get(item.id)![key];\n currentItem = { ...existing, ...item };\n } else {\n currentItem = { ...item };\n }\n\n currentItem.dependencies =\n typeof currentItem.dependencies === \"function\"\n ? currentItem.dependencies(config || currentItem.config)\n : currentItem.dependencies;\n\n return currentItem;\n }\n}\n","import {\n IResource,\n ITaskMiddleware,\n IResourceMiddleware,\n ITask,\n IResourceWithConfig,\n RegisterableItems,\n IHook,\n} from \"../defs\";\nimport * as utils from \"../define\";\nimport { dependencyNotFoundError } from \"../errors\";\nimport { StoreRegistry } from \"./StoreRegistry\";\n\nexport class OverrideManager {\n public overrides: Map<\n string,\n | IResource\n | ITaskMiddleware\n | IResourceMiddleware\n | ITask\n | IResourceWithConfig\n | IHook\n > = new Map();\n\n public overrideRequests: Set<{\n source: string;\n override: RegisterableItems;\n }> = new Set();\n\n constructor(private readonly registry: StoreRegistry) {}\n\n storeOverridesDeeply<C>(element: IResource<C, any, any>) {\n element.overrides.forEach((override) => {\n if (!override) {\n return;\n }\n\n if (utils.isResource(override)) {\n this.storeOverridesDeeply(override);\n }\n\n let id: string;\n if (utils.isResourceWithConfig(override)) {\n this.storeOverridesDeeply(override.resource);\n id = override.resource.id;\n } else {\n id = override.id;\n }\n\n this.overrideRequests.add({ source: element.id, override });\n this.overrides.set(id, override);\n });\n }\n\n processOverrides() {\n // If we are trying to use override on something that wasn't previously registered, we throw an error.\n for (const override of this.overrides.values()) {\n let hasAnyItem = false;\n if (utils.isTask(override)) {\n hasAnyItem = this.registry.tasks.has(override.id);\n } else if (utils.isResource(override)) {\n hasAnyItem = this.registry.resources.has(override.id);\n } else if (utils.isTaskMiddleware(override)) {\n hasAnyItem = this.registry.taskMiddlewares.has(override.id);\n } else if (utils.isResourceMiddleware(override)) {\n hasAnyItem = this.registry.resourceMiddlewares.has(override.id);\n } else if (utils.isResourceWithConfig(override)) {\n hasAnyItem = this.registry.resources.has(override.resource.id);\n } else if (utils.isHook(override)) {\n hasAnyItem = this.registry.hooks.has(override.id);\n }\n\n if (!hasAnyItem) {\n const id = utils.isResourceWithConfig(override)\n ? override.resource.id\n : override.id;\n\n dependencyNotFoundError.throw({ key: id });\n }\n }\n\n for (const override of this.overrides.values()) {\n if (utils.isTask(override)) {\n this.registry.storeTask(override, \"override\");\n } else if (utils.isResource(override)) {\n this.registry.storeResource(override, \"override\");\n } else if (utils.isTaskMiddleware(override)) {\n this.registry.storeTaskMiddleware(override, \"override\");\n } else if (utils.isResourceMiddleware(override)) {\n this.registry.storeResourceMiddleware(override, \"override\");\n } else if (utils.isResourceWithConfig(override)) {\n this.registry.storeResourceWithConfig(override, \"override\");\n } else if (utils.isHook(override)) {\n this.registry.storeHook(override, \"override\");\n }\n }\n }\n}\n","import { defineResourceMiddleware } from \"../../define\";\nimport { globalTags } from \"../globalTags\";\nimport { globalResources } from \"../globalResources\";\nimport type { Store } from \"../../models/Store\";\nimport type {\n ITask,\n IEvent,\n IEventEmission,\n DependencyMapType,\n} from \"../../defs\";\nimport type {\n TunnelRunner,\n TunnelTaskSelector,\n TunnelEventSelector,\n} from \"../resources/tunnel/types\";\nimport { symbolTunneledBy } from \"../../types/symbols\";\nimport { tunnelOwnershipConflictError } from \"../../errors\";\n\nexport const tunnelResourceMiddleware = defineResourceMiddleware<\n void,\n DependencyMapType,\n TunnelRunner,\n DependencyMapType\n>({\n id: \"globals.middleware.resource.tunnel\",\n dependencies: {\n store: globalResources.store,\n eventManager: globalResources.eventManager,\n },\n // Only applies to resources tagged with globals.tags.tunnel\n everywhere: (resource) => globalTags.tunnel.exists(resource),\n run: async ({ resource, next }, { store, eventManager }) => {\n // Initialize the resource and get its value (tunnel runner)\n const value = await next(resource.config);\n\n const mode = value.mode || \"none\";\n const delivery = value.eventDeliveryMode || \"mirror\";\n // Cast store to Store type for helper functions\n const typedStore = store as unknown as Store;\n const tasks = value.tasks ? resolveTasks(typedStore, value.tasks) : [];\n const events = value.events\n ? resolveEvents(\n typedStore,\n value.events as unknown as TunnelEventSelector,\n )\n : [];\n\n if (mode === \"client\" || mode === \"both\") {\n if (tasks.length > 0 && typeof value.run !== \"function\") {\n throw new Error(\n \"Tunnel resource value must implement run(task, input) when tasks[] is configured.\",\n );\n }\n if (events.length > 0 && typeof value.emit !== \"function\") {\n throw new Error(\n \"Tunnel resource value must implement emit(event, payload) when events[] is configured.\",\n );\n }\n }\n\n // If there is no mode, or we are server, we don't override anything\n // We are executing, the override happens on the client.\n if (mode === \"none\" || mode === \"server\") {\n // Do not patch in these modes, but preserve and return the runner value\n return value;\n }\n\n // Override selected tasks' run() to delegate to tunnel runner (reversible)\n for (const t of tasks) {\n const st = typedStore.tasks.get(t.id)!;\n // Enforce single-owner policy: a task can be tunneled by only one resource\n const currentOwner = (st.task as any)[symbolTunneledBy];\n const resourceId = resource.definition.id;\n if (currentOwner && currentOwner !== resourceId) {\n tunnelOwnershipConflictError.throw({\n taskId: t.id,\n currentOwnerId: currentOwner,\n attemptedOwnerId: resourceId,\n });\n }\n\n st.task = {\n ...st.task,\n run: (async (input: unknown) => {\n return value.run!(t as unknown as ITask, input);\n }) as unknown as ITask[\"run\"],\n isTunneled: true,\n [symbolTunneledBy]: resourceId,\n } as any;\n }\n\n if (events.length > 0) {\n const selectedEventIds = new Set(events.map((e) => e.id));\n // Install a global emission interceptor for selected events\n // Install an emission interceptor for this tunnel instance as well\n eventManager.intercept(\n async (\n next: (emission: IEventEmission<any>) => Promise<void>,\n emission: IEventEmission<any>,\n ) => {\n if (!selectedEventIds.has(emission.id)) {\n return next(emission);\n }\n\n if (delivery === \"local-only\") {\n return next(emission);\n }\n\n if (delivery === \"remote-only\") {\n // Forward remotely only; skip local listeners\n const remotePayload = await value.emit!(emission);\n if (remotePayload !== undefined) emission.data = remotePayload;\n return;\n }\n\n if (delivery === \"remote-first\") {\n try {\n const remotePayload = await value.emit!(emission);\n if (remotePayload !== undefined) emission.data = remotePayload;\n } catch (_) {\n // Remote failed; fall back to local\n return next(emission);\n }\n // Remote succeeded; skip local\n return;\n }\n\n // mirror (default): local then remote; propagate remote failure\n await next(emission);\n const remotePayload = await value.emit!(emission);\n if (remotePayload !== undefined) emission.data = remotePayload;\n return;\n },\n );\n }\n\n return value;\n },\n tags: [globalTags.system],\n});\n\n// Helper function to resolve tasks from the store\nfunction resolveTasks(store: Store, selector: TunnelTaskSelector): ITask[] {\n const out: ITask[] = [];\n\n if (typeof selector === \"function\") {\n for (const t of store.tasks.values()) {\n if (selector(t.task)) {\n out.push(t.task);\n }\n }\n return out;\n }\n\n for (const item of selector) {\n if (typeof item === \"string\") {\n const st = store.tasks.get(item);\n if (!st)\n throw new Error(\n `Task ${item} not found while trying to resolve tasks for tunnel.`,\n );\n out.push(st.task);\n } else if (item && typeof item === \"object\") {\n // Assume it's a task definition\n const st = store.tasks.get(item.id);\n if (!st)\n throw new Error(\n `Task ${item} not found while trying to resolve tasks for tunnel.`,\n );\n\n out.push(st.task);\n }\n }\n\n return out;\n}\n\n// Helper function to resolve events from the store\nfunction resolveEvents(store: Store, selector: TunnelEventSelector): IEvent[] {\n const out: IEvent[] = [];\n\n if (typeof selector === \"function\") {\n for (const e of store.events.values()) {\n if (selector(e.event)) {\n out.push(e.event);\n }\n }\n return out;\n }\n\n for (const item of selector) {\n let st;\n if (typeof item === \"string\") {\n st = store.events.get(item);\n } else if (item && typeof item === \"object\") {\n st = store.events.get(item.id);\n }\n\n if (!st)\n throw new Error(\n `Event ${item} not found while trying to resolve events for tunnel.`,\n );\n out.push(st.event);\n }\n\n return out;\n}\n","import { lockedError } from \"../../errors\";\nimport {\n TaskMiddlewareInterceptor,\n ResourceMiddlewareInterceptor,\n} from \"./types\";\n\n/**\n * Centralized registry for all interceptor types.\n * Manages storage and retrieval of global and per-middleware interceptors.\n */\nexport class InterceptorRegistry {\n private taskInterceptors: TaskMiddlewareInterceptor[] = [];\n private resourceInterceptors: ResourceMiddlewareInterceptor[] = [];\n private perTaskMiddleware: Map<string, TaskMiddlewareInterceptor[]> =\n new Map();\n private perResourceMiddleware: Map<string, ResourceMiddlewareInterceptor[]> =\n new Map();\n\n #isLocked = false;\n\n /**\n * Gets the current lock status\n */\n get isLocked(): boolean {\n return this.#isLocked;\n }\n\n /**\n * Locks the registry, preventing any further modifications\n */\n lock(): void {\n this.#isLocked = true;\n }\n\n /**\n * Throws an error if the registry is locked\n */\n private checkLock(): void {\n if (this.#isLocked) {\n lockedError.throw({ what: \"MiddlewareManager\" });\n }\n }\n\n /**\n * Adds a global task interceptor\n */\n addGlobalTaskInterceptor(interceptor: TaskMiddlewareInterceptor): void {\n this.checkLock();\n this.taskInterceptors.push(interceptor);\n }\n\n /**\n * Adds a global resource interceptor\n */\n addGlobalResourceInterceptor(\n interceptor: ResourceMiddlewareInterceptor,\n ): void {\n this.checkLock();\n this.resourceInterceptors.push(interceptor);\n }\n\n /**\n * Adds an interceptor for a specific task middleware instance\n */\n addTaskMiddlewareInterceptor(\n middlewareId: string,\n interceptor: TaskMiddlewareInterceptor,\n ): void {\n this.checkLock();\n if (!this.perTaskMiddleware.has(middlewareId)) {\n this.perTaskMiddleware.set(middlewareId, []);\n }\n this.perTaskMiddleware.get(middlewareId)!.push(interceptor);\n }\n\n /**\n * Adds an interceptor for a specific resource middleware instance\n */\n addResourceMiddlewareInterceptor(\n middlewareId: string,\n interceptor: ResourceMiddlewareInterceptor,\n ): void {\n this.checkLock();\n if (!this.perResourceMiddleware.has(middlewareId)) {\n this.perResourceMiddleware.set(middlewareId, []);\n }\n this.perResourceMiddleware.get(middlewareId)!.push(interceptor);\n }\n\n /**\n * Gets all global task interceptors\n */\n getGlobalTaskInterceptors(): readonly TaskMiddlewareInterceptor[] {\n return Object.freeze([...this.taskInterceptors]);\n }\n\n /**\n * Gets all global resource interceptors\n */\n getGlobalResourceInterceptors(): readonly ResourceMiddlewareInterceptor[] {\n return Object.freeze([...this.resourceInterceptors]);\n }\n\n /**\n * Gets interceptors for a specific task middleware\n */\n getTaskMiddlewareInterceptors(\n middlewareId: string,\n ): readonly TaskMiddlewareInterceptor[] {\n const interceptors = this.perTaskMiddleware.get(middlewareId) ?? [];\n return Object.freeze([...interceptors]);\n }\n\n /**\n * Gets interceptors for a specific resource middleware\n */\n getResourceMiddlewareInterceptors(\n middlewareId: string,\n ): readonly ResourceMiddlewareInterceptor[] {\n const interceptors = this.perResourceMiddleware.get(middlewareId) ?? [];\n return Object.freeze([...interceptors]);\n }\n}\n","import {\n ITask,\n IResource,\n ITaskMiddleware,\n IResourceMiddleware,\n} from \"../../defs\";\nimport { Store } from \"../Store\";\nimport { globalTags } from \"../../globals/globalTags\";\nimport { taskNotRegisteredError } from \"../../errors\";\nimport type {\n TunnelMiddlewareId,\n TunnelTaskMiddlewarePolicyConfig,\n} from \"../../globals/resources/tunnel/tunnel.policy.tag\";\n\n/**\n * Resolves which middlewares should be applied to tasks and resources.\n * Handles global \"everywhere\" middlewares, local middlewares, and tunnel policies.\n */\nexport class MiddlewareResolver {\n constructor(private readonly store: Store) {}\n\n /**\n * Gets all applicable middlewares for a task (global + local, deduplicated)\n */\n getApplicableTaskMiddlewares(task: ITask<any, any, any>): ITaskMiddleware[] {\n const local = task.middleware;\n const globalMiddlewares = this.getEverywhereTaskMiddlewares(task);\n const localIds = new Set(local.map((m) => m.id));\n\n const globalFiltered = globalMiddlewares.filter((m) => !localIds.has(m.id));\n\n // Global middlewares run FIRST, then local ones.\n // This allows global \"everywhere\" policies (like logging, tracing) to wrap business-specific local middleware.\n return [...globalFiltered, ...local];\n }\n\n /**\n * Gets all applicable middlewares for a resource (global + local, deduplicated)\n */\n getApplicableResourceMiddlewares(\n resource: IResource<any, any, any, any>,\n ): IResourceMiddleware[] {\n const local = resource.middleware;\n const globalMiddlewares = this.getEverywhereResourceMiddlewares(resource);\n const localIds = new Set(local.map((m) => m.id));\n\n const globalFiltered = globalMiddlewares.filter((m) => !localIds.has(m.id));\n\n return [...globalFiltered, ...local];\n }\n\n /**\n * For tunneled tasks, controls caller-side task middleware execution.\n * Caller-side middleware is skipped by default and can be re-enabled via allowlist.\n */\n applyTunnelPolicyFilter(\n task: ITask<any, any, any>,\n middlewares: ITaskMiddleware[],\n ): ITaskMiddleware[] {\n const entry = this.store.tasks.get(task.id);\n if (!entry) {\n return taskNotRegisteredError.throw({ taskId: task.id });\n }\n const tDef = entry.task;\n const isLocallyTunneled = tDef.isTunneled;\n\n if (!isLocallyTunneled) {\n return middlewares;\n }\n\n // Tunneled tasks skip caller-side middleware by default.\n // Only explicitly allowlisted middleware runs locally.\n if (!globalTags.tunnelPolicy.exists(tDef)) {\n return [];\n }\n\n // Use the Store definition to avoid relying on object-identity.\n // Consumers can pass a different task object with the same id.\n const cfg = globalTags.tunnelPolicy.extract(tDef) as\n | TunnelTaskMiddlewarePolicyConfig\n | undefined;\n const clientAllowList = getClientMiddlewareAllowList(cfg);\n\n if (!Array.isArray(clientAllowList)) {\n return [];\n }\n\n const toId = (x: string | { id: string }) =>\n typeof x === \"string\" ? x : x?.id;\n const allowed = new Set(\n clientAllowList.map(toId).filter((id): id is string => !!id),\n );\n\n return middlewares.filter((m) => allowed.has(m.id));\n }\n\n /**\n * Gets all \"everywhere\" middlewares that apply to the given task\n */\n public getEverywhereTaskMiddlewares(\n task: ITask<any, any, any>,\n ): ITaskMiddleware[] {\n return Array.from(this.store.taskMiddlewares.values())\n .filter((x) => Boolean(x.middleware.everywhere))\n .filter((x) => {\n if (typeof x.middleware.everywhere === \"function\") {\n return x.middleware.everywhere(task);\n }\n return true;\n })\n .map((x) => x.middleware);\n }\n\n /**\n * Gets all \"everywhere\" middlewares that apply to the given resource\n */\n public getEverywhereResourceMiddlewares(\n resource: IResource<any, any, any, any>,\n ): IResourceMiddleware[] {\n return Array.from(this.store.resourceMiddlewares.values())\n .filter((x) => Boolean(x.middleware.everywhere))\n .filter((x) => {\n if (typeof x.middleware.everywhere === \"function\") {\n return x.middleware.everywhere(resource);\n }\n return true;\n })\n .map((x) => x.middleware);\n }\n}\n\nfunction getClientMiddlewareAllowList(\n cfg: TunnelTaskMiddlewarePolicyConfig | undefined,\n): TunnelMiddlewareId[] | undefined {\n if (!cfg) {\n return;\n }\n\n const preferred = cfg.client;\n if (Array.isArray(preferred)) {\n return preferred;\n }\n if (preferred && typeof preferred === \"object\") {\n const allowList = preferred.middlewareAllowList;\n if (Array.isArray(allowList)) return allowList;\n }\n\n const grouped = cfg.middlewareAllowList?.client;\n if (Array.isArray(grouped)) {\n return grouped;\n }\n\n return;\n}\n","import { validationError } from \"../../errors\";\n\n/**\n * Centralized validation logic for inputs and results across tasks and resources.\n * Provides consistent error handling and messaging.\n */\nexport class ValidationHelper {\n /**\n * Validates input using the provided schema\n * @throws ValidationError if validation fails\n */\n static validateInput<T>(\n value: any,\n schema: { parse: (v: any) => T } | undefined,\n id: string,\n type: \"Task\" | \"Resource\",\n ): T {\n if (!schema) return value;\n\n try {\n return schema.parse(value);\n } catch (error) {\n return validationError.throw({\n subject: `${type} input`,\n id,\n originalError:\n error instanceof Error ? error : new Error(String(error)),\n });\n }\n }\n\n /**\n * Validates result using the provided schema\n * @throws ValidationError if validation fails\n */\n static validateResult<T>(\n value: any,\n schema: { parse: (v: any) => T } | undefined,\n id: string,\n type: \"Task\" | \"Resource\",\n ): T {\n if (!schema) return value;\n\n try {\n return schema.parse(value);\n } catch (error) {\n return validationError.throw({\n subject: `${type} result`,\n id,\n originalError:\n error instanceof Error ? error : new Error(String(error)),\n });\n }\n }\n}\n","import { ITask, DependencyMapType } from \"../../defs\";\nimport { Store } from \"../Store\";\nimport { InterceptorRegistry } from \"./InterceptorRegistry\";\nimport { MiddlewareResolver } from \"./MiddlewareResolver\";\nimport { ValidationHelper } from \"./ValidationHelper\";\nimport { TaskStoreElementType } from \"../../types/storeTypes\";\nimport { ITaskMiddlewareExecutionInput } from \"../../types/taskMiddleware\";\nimport { ExecutionJournalImpl } from \"../ExecutionJournal\";\nimport type { ExecutionJournal } from \"../../types/executionJournal\";\n\n/**\n * Composes task execution chains with validation, interceptors, and middlewares.\n * Builds the onion-style wrapping of task runners.\n */\nexport class TaskMiddlewareComposer {\n constructor(\n private readonly store: Store,\n private readonly interceptorRegistry: InterceptorRegistry,\n private readonly middlewareResolver: MiddlewareResolver,\n ) {}\n\n /**\n * Composes a complete task runner with all middleware and interceptors applied\n */\n compose<\n TInput,\n TOutput extends Promise<any>,\n TDeps extends DependencyMapType,\n >(\n task: ITask<TInput, TOutput, TDeps>,\n ): (\n input: TInput,\n parentJournal?: ExecutionJournal,\n ) => Promise<Awaited<TOutput>> {\n const storeTask = this.store.tasks.get(task.id)!;\n\n // Determine the effective task definition for this execution.\n // When tunneled, the Store task definition carries tunnel overrides and metadata.\n const runnerTask = this.resolveTaskDefinition(task, storeTask.task);\n\n // 1. Base runner with validation (receives input + journal)\n let runner = this.createBaseRunner(runnerTask, storeTask);\n\n // 2. Apply local task interceptors\n runner = this.applyLocalInterceptors(runner, storeTask);\n\n // 3. Apply middleware layers\n runner = this.applyMiddlewares(runner, runnerTask);\n\n // 4. Apply global task interceptors (outermost).\n // This ensures they still run even if a middleware short-circuits (eg. caching).\n runner = this.applyGlobalInterceptors(runner, runnerTask);\n\n // 5. Outer wrapper: use provided journal or create new one\n const journaledRunner = runner;\n return ((input: TInput, parentJournal?: ExecutionJournal) => {\n const journal = parentJournal ?? new ExecutionJournalImpl();\n return journaledRunner(input, journal);\n }) as (\n input: TInput,\n parentJournal?: ExecutionJournal,\n ) => Promise<Awaited<TOutput>>;\n }\n\n /**\n * Creates the base task runner with input/result validation\n */\n private createBaseRunner<\n TInput,\n TOutput extends Promise<any>,\n TDeps extends DependencyMapType,\n >(\n task: ITask<TInput, TOutput, TDeps>,\n storeTask: TaskStoreElementType,\n ): (input: TInput, journal: ExecutionJournal) => TOutput {\n return (async (input: TInput, journal: ExecutionJournal) => {\n const validatedInput = ValidationHelper.validateInput(\n input,\n task.inputSchema,\n task.id,\n \"Task\",\n );\n\n const rawResult = await task.run(\n validatedInput,\n storeTask.computedDependencies,\n { journal },\n );\n\n return ValidationHelper.validateResult(\n rawResult,\n task.resultSchema,\n task.id,\n \"Task\",\n );\n }) as unknown as (input: TInput, journal: ExecutionJournal) => TOutput;\n }\n\n /**\n * Determines which task definition to use for execution\n * Prefers store definition when task is tunneled (tunnel overrides apply)\n */\n private resolveTaskDefinition<T extends ITask<any, any, any>>(\n task: T,\n storeTask: T,\n ): T {\n const isLocallyTunneled = task.isTunneled || storeTask.isTunneled;\n return isLocallyTunneled ? storeTask : task;\n }\n\n /**\n * Applies local per-task interceptors (closest to the task)\n */\n private applyLocalInterceptors<TInput, TOutput extends Promise<any>>(\n runner: (input: TInput, journal: ExecutionJournal) => TOutput,\n storeTask: TaskStoreElementType,\n ): (input: TInput, journal: ExecutionJournal) => TOutput {\n if (!storeTask.interceptors || storeTask.interceptors.length === 0) {\n return runner;\n }\n\n let wrapped = runner;\n for (let i = storeTask.interceptors.length - 1; i >= 0; i--) {\n const interceptor = storeTask.interceptors[i];\n const nextFunction = wrapped;\n wrapped = (async (input: TInput, journal: ExecutionJournal) =>\n interceptor((inp) => nextFunction(inp, journal), input)) as unknown as (\n input: TInput,\n journal: ExecutionJournal,\n ) => TOutput;\n }\n\n return wrapped;\n }\n\n /**\n * Applies global task middleware interceptors\n */\n private applyGlobalInterceptors<TInput, TOutput extends Promise<any>>(\n runner: (input: TInput, journal: ExecutionJournal) => TOutput,\n task: ITask<TInput, TOutput, any>,\n ): (input: TInput, journal: ExecutionJournal) => TOutput {\n const interceptors = this.interceptorRegistry.getGlobalTaskInterceptors();\n if (interceptors.length === 0) {\n return runner;\n }\n\n const createExecutionInput = (\n input: any,\n nextFunc: (inp: any) => Promise<any>,\n journal: ExecutionJournal,\n ): ITaskMiddlewareExecutionInput<any> => ({\n task: {\n definition: task,\n input: input,\n },\n next: nextFunc,\n journal,\n });\n\n let currentNext = runner;\n\n for (let i = interceptors.length - 1; i >= 0; i--) {\n const interceptor = interceptors[i];\n const nextFunction = currentNext;\n\n currentNext = (async (input: TInput, journal: ExecutionJournal) => {\n const wrappedNextForInterceptor = (inp: TInput) =>\n nextFunction(inp, journal) as any;\n const executionInput = createExecutionInput(\n input,\n wrappedNextForInterceptor,\n journal,\n );\n const wrappedNext = (\n i: ITaskMiddlewareExecutionInput<TInput, Awaited<TOutput>>,\n ): Promise<Awaited<TOutput>> => {\n return nextFunction(i.task.input, journal) as any;\n };\n return (interceptor as any)(wrappedNext, executionInput);\n }) as unknown as (input: TInput, journal: ExecutionJournal) => TOutput;\n }\n\n return currentNext;\n }\n\n /**\n * Applies task middleware layers (global first, then local)\n */\n private applyMiddlewares<\n TInput,\n TOutput extends Promise<any>,\n TDeps extends DependencyMapType,\n >(\n runner: (input: TInput, journal: ExecutionJournal) => TOutput,\n task: ITask<TInput, TOutput, TDeps>,\n ): (input: TInput, journal: ExecutionJournal) => TOutput {\n let middlewares =\n this.middlewareResolver.getApplicableTaskMiddlewares(task);\n\n // Apply tunnel policy filter if needed\n middlewares = this.middlewareResolver.applyTunnelPolicyFilter(\n task,\n middlewares,\n );\n\n if (middlewares.length === 0) {\n return runner;\n }\n\n let next = runner;\n\n // Layer middlewares (global first, then local), closest to the task runs last\n for (let i = middlewares.length - 1; i >= 0; i--) {\n const middleware = middlewares[i];\n const storeMiddleware = this.store.taskMiddlewares.get(middleware.id)!;\n const nextFunction = next;\n\n // Create base middleware runner (captures journal from closure)\n const baseMiddlewareRunner = async (\n input: any,\n journal: ExecutionJournal,\n ) => {\n return storeMiddleware.middleware.run(\n {\n task: {\n definition: task,\n input,\n },\n next: (...args: [TInput?]) =>\n nextFunction(\n args.length > 0 ? (args[0] as TInput) : input,\n journal,\n ),\n journal,\n },\n storeMiddleware.computedDependencies,\n middleware.config,\n );\n };\n\n // Get and apply per-middleware interceptors\n const middlewareInterceptors =\n this.interceptorRegistry.getTaskMiddlewareInterceptors(middleware.id);\n\n next = this.wrapWithInterceptors<TInput, TOutput>(\n baseMiddlewareRunner as any,\n middlewareInterceptors,\n task,\n );\n }\n\n return next;\n }\n\n /**\n * Wraps a middleware runner with its specific interceptors in onion style\n */\n private wrapWithInterceptors<TInput, TOutput extends Promise<any>>(\n middlewareRunner: (input: TInput, journal: ExecutionJournal) => TOutput,\n interceptors: readonly any[],\n task: ITask<TInput, TOutput, any>,\n ): (input: TInput, journal: ExecutionJournal) => TOutput {\n if (interceptors.length === 0) {\n return middlewareRunner;\n }\n\n const reversedInterceptors = [...interceptors].reverse();\n let wrapped = middlewareRunner;\n\n for (let i = reversedInterceptors.length - 1; i >= 0; i--) {\n const interceptor = reversedInterceptors[i];\n const nextFunction = wrapped;\n\n wrapped = (async (input: TInput, journal: ExecutionJournal) => {\n const executionInput: ITaskMiddlewareExecutionInput<\n TInput,\n Awaited<TOutput>\n > = {\n task: {\n definition: task,\n input: input,\n },\n next: (...args: [TInput?]) =>\n nextFunction(\n args.length > 0 ? (args[0] as TInput) : input,\n journal,\n ),\n journal,\n };\n\n const wrappedNext = (\n i: ITaskMiddlewareExecutionInput<TInput, Awaited<TOutput>>,\n ): Promise<Awaited<TOutput>> => {\n return nextFunction(i.task.input, journal) as any;\n };\n\n return interceptor(wrappedNext, executionInput);\n }) as unknown as (input: TInput, journal: ExecutionJournal) => TOutput;\n }\n\n return wrapped;\n }\n}\n","import { IResource, DependencyMapType } from \"../../defs\";\nimport { Store } from \"../Store\";\nimport { InterceptorRegistry } from \"./InterceptorRegistry\";\nimport { MiddlewareResolver } from \"./MiddlewareResolver\";\nimport { ValidationHelper } from \"./ValidationHelper\";\nimport { IResourceMiddlewareExecutionInput } from \"../../types/resourceMiddleware\";\n\n/**\n * Composes resource initialization chains with validation, interceptors, and middlewares.\n * Builds the onion-style wrapping of resource init functions.\n */\nexport class ResourceMiddlewareComposer {\n constructor(\n private readonly store: Store,\n private readonly interceptorRegistry: InterceptorRegistry,\n private readonly middlewareResolver: MiddlewareResolver,\n ) {}\n\n /**\n * Runs resource initialization with all middleware and interceptors applied\n */\n async runInit<\n TConfig,\n TValue extends Promise<any>,\n TDeps extends DependencyMapType,\n TContext,\n >(\n resource: IResource<TConfig, TValue, TDeps, TContext>,\n config: TConfig,\n dependencies: any,\n context: TContext,\n ): Promise<TValue | undefined> {\n // 1. Base init runner with validation\n let runner = this.createBaseInitRunner<TConfig, TValue, TDeps, TContext>(\n resource,\n dependencies,\n context,\n );\n\n // 2. Apply middlewares\n runner = this.applyMiddlewares<TConfig, TValue>(runner, resource);\n\n // 3. Apply global resource interceptors\n runner = this.applyGlobalInterceptors<TConfig, TValue>(runner, resource);\n\n return runner(config);\n }\n\n /**\n * Creates the base resource init runner with result validation\n */\n private createBaseInitRunner<\n TConfig,\n TValue extends Promise<any>,\n TDeps extends DependencyMapType,\n TContext,\n >(\n resource: IResource<TConfig, TValue, TDeps, TContext>,\n dependencies: any,\n context: TContext,\n ): (config: TConfig) => TValue {\n return (async (config: TConfig) => {\n if (!resource.init) {\n return undefined as unknown as TValue;\n }\n\n const rawValue = await resource.init(config, dependencies, context);\n\n return ValidationHelper.validateResult(\n rawValue,\n resource.resultSchema,\n resource.id,\n \"Resource\",\n ) as unknown as Awaited<TValue>;\n }) as unknown as (config: TConfig) => TValue;\n }\n\n /**\n * Applies resource middleware layers\n */\n private applyMiddlewares<TConfig, TValue extends Promise<any>>(\n runner: (config: TConfig) => TValue,\n resource: IResource<TConfig, TValue, any, any>,\n ): (config: TConfig) => TValue {\n const middlewares =\n this.middlewareResolver.getApplicableResourceMiddlewares(resource);\n\n if (middlewares.length === 0) {\n return runner;\n }\n\n let next = runner;\n\n for (let i = middlewares.length - 1; i >= 0; i--) {\n const middleware = middlewares[i];\n const storeMiddleware = this.store.resourceMiddlewares.get(\n middleware.id,\n )!;\n const nextFunction = next;\n\n // Create base middleware runner with error handling\n const baseMiddlewareRunner = async (cfg: any) => {\n try {\n return await storeMiddleware.middleware.run(\n {\n resource: {\n definition: resource,\n config: cfg,\n },\n next: (...args: [TConfig?]) =>\n nextFunction((args.length > 0 ? args[0] : cfg) as TConfig),\n },\n storeMiddleware.computedDependencies,\n middleware.config,\n );\n } catch (error: unknown) {\n try {\n await this.store.onUnhandledError({\n error,\n kind: \"resourceInit\",\n source: resource.id,\n });\n } catch (_) {\n // Ignore errors from error handler\n }\n throw error;\n }\n };\n\n // Get and apply per-middleware interceptors\n const middlewareInterceptors =\n this.interceptorRegistry.getResourceMiddlewareInterceptors(\n middleware.id,\n );\n\n next = this.wrapWithInterceptors<TConfig, TValue>(\n baseMiddlewareRunner as any,\n middlewareInterceptors,\n resource,\n );\n }\n\n return next;\n }\n\n /**\n * Applies global resource middleware interceptors\n */\n private applyGlobalInterceptors<TConfig, TValue extends Promise<any>>(\n runner: (config: TConfig) => TValue,\n resource: IResource<TConfig, TValue, any, any>,\n ): (config: TConfig) => TValue {\n const interceptors =\n this.interceptorRegistry.getGlobalResourceInterceptors();\n\n if (interceptors.length === 0) {\n return runner;\n }\n\n const createExecutionInput = (\n config: any,\n nextFunc: any,\n ): IResourceMiddlewareExecutionInput<any> => ({\n resource: {\n definition: resource,\n config: config,\n },\n next: nextFunc,\n });\n\n let currentNext = runner;\n\n for (let i = interceptors.length - 1; i >= 0; i--) {\n const interceptor = interceptors[i];\n const nextFunction = currentNext;\n\n currentNext = (async (cfg: TConfig) => {\n const executionInput = createExecutionInput(cfg, nextFunction);\n const wrappedNext = (\n input: IResourceMiddlewareExecutionInput<TConfig, Awaited<TValue>>,\n ): Promise<Awaited<TValue>> => {\n return nextFunction(input.resource.config) as any;\n };\n return (interceptor as any)(wrappedNext, executionInput);\n }) as unknown as (config: TConfig) => TValue;\n }\n\n return currentNext;\n }\n\n /**\n * Wraps a middleware runner with its specific interceptors in onion style\n */\n private wrapWithInterceptors<TConfig, TValue extends Promise<any>>(\n middlewareRunner: (config: TConfig) => TValue,\n interceptors: readonly any[],\n resource: IResource<TConfig, TValue, any, any>,\n ): (config: TConfig) => TValue {\n if (interceptors.length === 0) {\n return middlewareRunner;\n }\n\n const reversedInterceptors = [...interceptors].reverse();\n let wrapped = middlewareRunner;\n\n for (let i = reversedInterceptors.length - 1; i >= 0; i--) {\n const interceptor = reversedInterceptors[i];\n const nextFunction = wrapped;\n\n wrapped = (async (config: TConfig) => {\n const executionInput: IResourceMiddlewareExecutionInput<\n TConfig,\n Awaited<TValue>\n > = {\n resource: {\n definition: resource,\n config: config,\n },\n next: nextFunction as any,\n };\n\n const wrappedNext = (\n input: IResourceMiddlewareExecutionInput<TConfig, Awaited<TValue>>,\n ): Promise<Awaited<TValue>> => {\n return nextFunction(input.resource.config) as any;\n };\n\n return (interceptor as any)(wrappedNext, executionInput);\n }) as unknown as (config: TConfig) => TValue;\n }\n\n return wrapped;\n }\n}\n","import { DependencyMapType, ITask, IResource } from \"../defs\";\nimport { Store } from \"./Store\";\nimport { ITaskMiddleware, IResourceMiddleware } from \"../defs\";\nimport { isResourceMiddleware, isTaskMiddleware } from \"../define\";\nimport { InterceptorRegistry } from \"./middleware/InterceptorRegistry\";\nimport { MiddlewareResolver } from \"./middleware/MiddlewareResolver\";\nimport { TaskMiddlewareComposer } from \"./middleware/TaskMiddlewareComposer\";\nimport { ResourceMiddlewareComposer } from \"./middleware/ResourceMiddlewareComposer\";\nimport {\n TaskMiddlewareInterceptor,\n ResourceMiddlewareInterceptor,\n} from \"./middleware/types\";\n\n// Re-export types for backwards compatibility\nexport type { TaskMiddlewareInterceptor, ResourceMiddlewareInterceptor };\n\n/**\n * Centralizes middleware composition and execution for both tasks and resources.\n * Keeps observability emissions and unhandled error routing consistent.\n *\n * This is a facade that delegates to specialized composer classes for maintainability.\n */\nexport class MiddlewareManager {\n private readonly interceptorRegistry: InterceptorRegistry;\n private readonly middlewareResolver: MiddlewareResolver;\n private readonly taskComposer: TaskMiddlewareComposer;\n private readonly resourceComposer: ResourceMiddlewareComposer;\n\n constructor(\n protected readonly store: Store,\n _eventManager: unknown,\n _logger: unknown,\n ) {\n this.interceptorRegistry = new InterceptorRegistry();\n this.middlewareResolver = new MiddlewareResolver(store);\n this.taskComposer = new TaskMiddlewareComposer(\n store,\n this.interceptorRegistry,\n this.middlewareResolver,\n );\n this.resourceComposer = new ResourceMiddlewareComposer(\n store,\n this.interceptorRegistry,\n this.middlewareResolver,\n );\n }\n\n /**\n * @internal\n */\n public get taskMiddlewareInterceptors() {\n return this.interceptorRegistry.getGlobalTaskInterceptors();\n }\n\n /**\n * @internal\n */\n public get resourceMiddlewareInterceptors() {\n return this.interceptorRegistry.getGlobalResourceInterceptors();\n }\n\n /**\n * Gets the current lock status of the MiddlewareManager\n */\n get isLocked(): boolean {\n return this.interceptorRegistry.isLocked;\n }\n\n /**\n * Locks the MiddlewareManager, preventing any further modifications to interceptors\n */\n lock(): void {\n this.interceptorRegistry.lock();\n }\n\n /**\n * Adds an interceptor for task or resource middleware execution\n * Interceptors are executed in the order they are added, with the ability to\n * modify, log, or prevent middleware execution\n *\n * @param kind - The type of middleware to intercept (\"task\" or \"resource\")\n * @param interceptor - The interceptor function to add\n */\n intercept(kind: \"task\", interceptor: TaskMiddlewareInterceptor): void;\n intercept(kind: \"resource\", interceptor: ResourceMiddlewareInterceptor): void;\n intercept(\n kind: \"task\" | \"resource\",\n interceptor: TaskMiddlewareInterceptor | ResourceMiddlewareInterceptor,\n ): void {\n if (kind === \"task\") {\n this.interceptorRegistry.addGlobalTaskInterceptor(\n interceptor as TaskMiddlewareInterceptor,\n );\n } else {\n this.interceptorRegistry.addGlobalResourceInterceptor(\n interceptor as ResourceMiddlewareInterceptor,\n );\n }\n }\n\n /**\n * Adds an interceptor for a specific middleware instance with better type safety\n * This method automatically determines the type and provides type-safe access\n *\n * @param middleware - The middleware instance to intercept\n * @param interceptor - The interceptor function with proper typing\n */\n interceptMiddleware(\n middleware: ITaskMiddleware<any, any, any, any>,\n interceptor: TaskMiddlewareInterceptor,\n ): void;\n interceptMiddleware(\n middleware: IResourceMiddleware<any, any, any, any>,\n interceptor: ResourceMiddlewareInterceptor,\n ): void;\n interceptMiddleware(\n middleware:\n | ITaskMiddleware<any, any, any, any>\n | IResourceMiddleware<any, any, any, any>,\n interceptor: TaskMiddlewareInterceptor | ResourceMiddlewareInterceptor,\n ): void {\n if (isTaskMiddleware(middleware)) {\n this.interceptorRegistry.addTaskMiddlewareInterceptor(\n middleware.id,\n interceptor as TaskMiddlewareInterceptor,\n );\n } else if (isResourceMiddleware(middleware)) {\n this.interceptorRegistry.addResourceMiddlewareInterceptor(\n middleware.id,\n interceptor as ResourceMiddlewareInterceptor,\n );\n } else {\n throw new Error(\"Unknown middleware type\");\n }\n }\n\n /**\n * Compose a runner for a task with its local interceptors and applicable middlewares.\n * Returns a function that accepts the task input and resolves to the task output.\n */\n public composeTaskRunner<\n TInput,\n TOutput extends Promise<any>,\n TDeps extends DependencyMapType,\n >(task: ITask<TInput, TOutput, TDeps>) {\n return this.taskComposer.compose(task);\n }\n\n /**\n * Run a resource init wrapped with its applicable middlewares.\n */\n public async runResourceInit<\n C,\n V extends Promise<any>,\n D extends DependencyMapType,\n TContext,\n >(\n resource: IResource<C, V, D, TContext>,\n config: C,\n dependencies: any,\n context: TContext,\n ): Promise<V | undefined> {\n return this.resourceComposer.runInit(\n resource,\n config,\n dependencies,\n context,\n );\n }\n\n /**\n * Gets all \"everywhere\" middlewares that apply to the given task\n * @deprecated Internal method exposed for testing - may be removed in future versions\n */\n getEverywhereMiddlewareForTasks(\n task: ITask<any, any, any>,\n ): ITaskMiddleware[] {\n return this.middlewareResolver.getEverywhereTaskMiddlewares(task);\n }\n\n /**\n * Gets all \"everywhere\" middlewares that apply to the given resource\n * @deprecated Internal method exposed for testing - may be removed in future versions\n */\n getEverywhereMiddlewareForResources(\n resource: IResource<any, any, any, any>,\n ): IResourceMiddleware[] {\n return this.middlewareResolver.getEverywhereResourceMiddlewares(resource);\n }\n}\n","import { RunnerMode } from \"../types/runner\";\nimport { getPlatform } from \"../platform\";\n\n/**\n * Detects the runner mode based on environment variables.\n * If no mode is explicitly provided, it will auto-detect from NODE_ENV.\n *\n * @param explicitMode - Optional mode to use if provided (takes precedence over environment)\n * @returns The detected runner mode\n */\nexport function detectRunnerMode(explicitMode?: RunnerMode): RunnerMode {\n if (explicitMode !== undefined) {\n return explicitMode;\n }\n\n // Auto-detect mode from environment when not specified using platform adapter\n const env = getPlatform().getEnv(\"NODE_ENV\");\n switch (env) {\n case \"test\":\n return RunnerMode.TEST;\n case \"production\":\n return RunnerMode.PROD;\n case \"development\":\n default:\n return RunnerMode.DEV;\n }\n}\n","import {\n IResource,\n RegisterableItems,\n ITag,\n ITaskMiddleware,\n IResourceMiddleware,\n DependencyMapType,\n} from \"../defs\";\nimport { findCircularDependencies } from \"./utils/findCircularDependencies\";\nimport { globalEventsArray } from \"../globals/globalEvents\";\nimport {\n circularDependenciesError,\n storeAlreadyInitializedError,\n eventEmissionCycleError,\n} from \"../errors\";\nimport { EventManager } from \"./EventManager\";\nimport { Logger } from \"./Logger\";\nimport { StoreRegistry } from \"./StoreRegistry\";\nimport { OverrideManager } from \"./OverrideManager\";\nimport { StoreValidator } from \"./StoreValidator\";\nimport {\n ResourceStoreElementType,\n TaskStoreElementType,\n EventStoreElementType,\n} from \"../types/storeTypes\";\nimport { TaskRunner } from \"./TaskRunner\";\nimport { globalResources } from \"../globals/globalResources\";\nimport { requireContextTaskMiddleware } from \"../globals/middleware/requireContext.middleware\";\nimport {\n retryTaskMiddleware,\n retryResourceMiddleware,\n} from \"../globals/middleware/retry.middleware\";\nimport {\n timeoutTaskMiddleware,\n timeoutResourceMiddleware,\n} from \"../globals/middleware/timeout.middleware\";\nimport {\n concurrencyTaskMiddleware,\n concurrencyResource,\n} from \"../globals/middleware/concurrency.middleware\";\nimport {\n debounceTaskMiddleware,\n throttleTaskMiddleware,\n temporalResource,\n} from \"../globals/middleware/temporal.middleware\";\nimport { fallbackTaskMiddleware } from \"../globals/middleware/fallback.middleware\";\nimport {\n rateLimitTaskMiddleware,\n rateLimitResource,\n} from \"../globals/middleware/rateLimit.middleware\";\nimport {\n circuitBreakerMiddleware,\n circuitBreakerResource,\n} from \"../globals/middleware/circuitBreaker.middleware\";\nimport { tunnelResourceMiddleware } from \"../globals/middleware/tunnel.middleware\";\nimport { OnUnhandledError } from \"./UnhandledError\";\nimport { globalTags } from \"../globals/globalTags\";\nimport { MiddlewareManager } from \"./MiddlewareManager\";\nimport { RunnerMode } from \"../types/runner\";\nimport { detectRunnerMode } from \"../tools/detectRunnerMode\";\nimport { Serializer } from \"../serializer\";\nimport { isOptional, isResource } from \"../define\";\n\n// Re-export types for backward compatibility\nexport type {\n ResourceStoreElementType,\n TaskStoreElementType,\n EventStoreElementType,\n};\n\n/**\n * Store class which is used to store all the resources, tasks, middleware and events.\n */\nexport class Store {\n root!: ResourceStoreElementType;\n private registry: StoreRegistry;\n private overrideManager: OverrideManager;\n private validator: StoreValidator;\n private taskRunner?: TaskRunner;\n private middlewareManager!: MiddlewareManager;\n private readonly initializedResourceIds: string[] = [];\n\n #isLocked = false;\n #isInitialized = false;\n public mode: RunnerMode;\n\n constructor(\n protected readonly eventManager: EventManager,\n protected readonly logger: Logger,\n public readonly onUnhandledError: OnUnhandledError,\n mode?: RunnerMode,\n ) {\n this.registry = new StoreRegistry(this);\n this.validator = this.registry.getValidator();\n this.overrideManager = new OverrideManager(this.registry);\n this.middlewareManager = new MiddlewareManager(this, eventManager, logger);\n\n this.mode = detectRunnerMode(mode);\n }\n\n // Delegate properties to registry\n get tasks() {\n return this.registry.tasks;\n }\n get hooks() {\n return this.registry.hooks;\n }\n get resources() {\n return this.registry.resources;\n }\n get events() {\n return this.registry.events;\n }\n get errors() {\n return this.registry.errors;\n }\n get asyncContexts() {\n return this.registry.asyncContexts;\n }\n get taskMiddlewares() {\n return this.registry.taskMiddlewares;\n }\n get resourceMiddlewares() {\n return this.registry.resourceMiddlewares;\n }\n get tags() {\n return this.registry.tags;\n }\n get overrides() {\n return this.overrideManager.overrides;\n }\n get overrideRequests() {\n return this.overrideManager.overrideRequests;\n }\n\n // Expose the shared MiddlewareManager instance so other components (like TaskRunner)\n // can compose runners using the same interceptor configuration.\n public getMiddlewareManager(): MiddlewareManager {\n return this.middlewareManager;\n }\n\n get isLocked() {\n return this.#isLocked;\n }\n\n lock() {\n this.#isLocked = true;\n }\n\n checkLock() {\n if (this.#isLocked) {\n throw new Error(\"Cannot modify the Store when it is locked.\");\n }\n }\n\n private registerGlobalComponents() {\n if (!this.taskRunner) {\n throw new Error(\n \"TaskRunner is not set. Call store.setTaskRunner() before initializeStore().\",\n );\n }\n\n const builtInResourcesMap = new Map<\n IResource<any, any, any, any, any>,\n unknown\n >();\n builtInResourcesMap.set(globalResources.store, this);\n builtInResourcesMap.set(globalResources.eventManager, this.eventManager);\n builtInResourcesMap.set(globalResources.logger, this.logger);\n builtInResourcesMap.set(globalResources.taskRunner, this.taskRunner);\n builtInResourcesMap.set(globalResources.serializer, new Serializer());\n builtInResourcesMap.set(\n globalResources.middlewareManager,\n this.middlewareManager,\n );\n\n this.registry.storeGenericItem(globalResources.queue);\n this.registry.storeGenericItem(globalResources.httpClientFactory);\n\n for (const [resource, value] of builtInResourcesMap.entries()) {\n this.registry.storeGenericItem(resource);\n const entry = this.resources.get(resource.id);\n if (entry) {\n entry.value = value;\n entry.isInitialized = true;\n this.recordResourceInitialized(resource.id);\n }\n }\n\n // Register global tags\n Object.values(globalTags).forEach((tag) => {\n this.registry.storeTag(tag);\n });\n\n // Register global events\n globalEventsArray.forEach((event) => {\n this.registry.storeEvent(event);\n });\n\n // Register built-in middlewares\n // Built-in middlewares currently target tasks only; adjust as needed per kind\n const builtInTaskMiddlewares = [\n requireContextTaskMiddleware,\n retryTaskMiddleware,\n timeoutTaskMiddleware,\n concurrencyTaskMiddleware,\n debounceTaskMiddleware,\n throttleTaskMiddleware,\n fallbackTaskMiddleware,\n rateLimitTaskMiddleware,\n circuitBreakerMiddleware,\n ];\n builtInTaskMiddlewares.forEach((middleware) => {\n this.registry.taskMiddlewares.set(middleware.id, {\n middleware: middleware as unknown as ITaskMiddleware<any>,\n computedDependencies: {},\n isInitialized: false,\n });\n });\n\n const builtInResourceMiddlewares = [\n retryResourceMiddleware,\n timeoutResourceMiddleware,\n tunnelResourceMiddleware,\n ];\n builtInResourceMiddlewares.forEach((middleware) => {\n this.registry.resourceMiddlewares.set(middleware.id, {\n middleware: middleware as unknown as IResourceMiddleware<any>,\n computedDependencies: {},\n isInitialized: false,\n });\n });\n\n // Register built-in resources that support the middlewares\n this.registry.storeGenericItem(rateLimitResource);\n this.registry.storeGenericItem(circuitBreakerResource);\n this.registry.storeGenericItem(temporalResource);\n this.registry.storeGenericItem(concurrencyResource);\n }\n\n public setTaskRunner(taskRunner: TaskRunner) {\n this.taskRunner = taskRunner;\n }\n\n private setupRootResource(rootDefinition: IResource<any>, config: any) {\n // Clone the root definition so per-run dependency/register resolution\n // never mutates the reusable user definition object.\n const root: IResource<any> = {\n ...rootDefinition,\n dependencies:\n typeof rootDefinition.dependencies === \"function\"\n ? rootDefinition.dependencies(config)\n : rootDefinition.dependencies,\n };\n\n this.root = {\n resource: root,\n computedDependencies: {},\n config,\n value: undefined,\n isInitialized: false,\n context: {},\n };\n\n this.registry.computeRegistrationDeeply(root, config);\n this.registry.resources.set(root.id, this.root);\n }\n\n public validateDependencyGraph() {\n // We verify that there isn't any circular dependencies before we begin computing the dependencies\n const dependentNodes = this.registry.getDependentNodes();\n const circularDependencies = findCircularDependencies(dependentNodes);\n if (circularDependencies.cycles.length > 0) {\n circularDependenciesError.throw({ cycles: circularDependencies.cycles });\n }\n }\n\n public validateEventEmissionGraph() {\n const eventNodes = this.registry.buildEventEmissionGraph();\n const circular = findCircularDependencies(eventNodes);\n if (circular.cycles.length > 0) {\n eventEmissionCycleError.throw({ cycles: circular.cycles });\n }\n }\n\n public initializeStore(\n root: IResource<any, any, any, any, any>,\n config: any,\n ) {\n if (this.#isInitialized) {\n storeAlreadyInitializedError.throw({});\n }\n\n this.registerGlobalComponents();\n this.setupRootResource(root, config);\n this.validator.runSanityChecks();\n\n for (const resource of this.resources.values()) {\n this.overrideManager.storeOverridesDeeply(resource.resource);\n }\n\n this.#isInitialized = true;\n }\n\n public async dispose() {\n for (const resource of this.getResourcesInDisposeOrder()) {\n if (resource.isInitialized && resource.resource.dispose) {\n await resource.resource.dispose(\n resource.value,\n resource.config,\n resource.computedDependencies as unknown as DependencyMapType,\n resource.context,\n );\n }\n }\n }\n\n public recordResourceInitialized(resourceId: string) {\n if (\n this.initializedResourceIds[this.initializedResourceIds.length - 1] ===\n resourceId\n ) {\n return;\n }\n if (this.initializedResourceIds.includes(resourceId)) {\n return;\n }\n this.initializedResourceIds.push(resourceId);\n }\n\n private getResourcesInDisposeOrder(): ResourceStoreElementType[] {\n const initializedResources = Array.from(this.resources.values()).filter(\n (r) => r.isInitialized,\n );\n\n // Fast path: if the store tracked a complete init order, reverse it for disposal.\n // This is correct because initialization happens dependency-first, so dependents\n // always appear after their dependencies in the init sequence.\n const initOrderHasAllInitialized =\n this.initializedResourceIds.length === initializedResources.length &&\n initializedResources.every((r) =>\n this.initializedResourceIds.includes(r.resource.id),\n );\n if (initOrderHasAllInitialized) {\n const byId = new Map(\n initializedResources.map((r) => [r.resource.id, r] as const),\n );\n return this.initializedResourceIds\n .slice()\n .reverse()\n .map((id) => byId.get(id))\n .filter((r): r is ResourceStoreElementType => Boolean(r));\n }\n\n // Dispose order should be dependents-first (reverse init order).\n // We derive it from the resource dependency graph to make it stable\n // regardless of registration/insertion order.\n const visitState = new Map<string, \"visiting\" | \"visited\">();\n const initOrder: ResourceStoreElementType[] = [];\n let cycleDetected = false;\n\n const getDependencyIds = (resource: ResourceStoreElementType): string[] => {\n const raw = resource.resource.dependencies;\n if (!raw) return [];\n const deps = raw as unknown;\n if (!deps || typeof deps !== \"object\") return [];\n\n const out: string[] = [];\n const collect = (value: unknown): void => {\n if (isOptional(value)) {\n collect((value as { inner: unknown }).inner);\n return;\n }\n if (isResource(value)) {\n out.push(value.id);\n }\n };\n\n Object.values(deps as Record<string, unknown>).forEach(collect);\n return out;\n };\n\n const visit = (resourceId: string): void => {\n const state = visitState.get(resourceId);\n if (state === \"visited\") return;\n if (state === \"visiting\") {\n cycleDetected = true;\n return;\n }\n\n const resource = this.resources.get(resourceId);\n if (!resource) return;\n\n visitState.set(resourceId, \"visiting\");\n getDependencyIds(resource).forEach(visit);\n visitState.set(resourceId, \"visited\");\n initOrder.push(resource);\n };\n\n initializedResources.forEach((r) => visit(r.resource.id));\n\n // If a cycle sneaks in despite validation (or disposal is called on a\n // partially-initialized store), fall back to insertion order LIFO.\n if (cycleDetected) {\n return initializedResources.slice().reverse();\n }\n\n return initOrder.reverse();\n }\n\n /**\n * Internal, avoid using this method directly.\n */\n public processOverrides() {\n this.overrideManager.processOverrides();\n }\n\n /**\n * Internal, avoid using this method directly.\n * @param item\n * @returns\n */\n public storeGenericItem<C>(item: RegisterableItems) {\n return this.registry.storeGenericItem<C>(item);\n }\n\n /**\n * Returns all tasks with the given tag.\n * @param tag - The tag to filter by.\n * @returns The tasks with the given tag.\n */\n public getTasksWithTag(tag: string | ITag<any, any, any>) {\n return this.registry.getTasksWithTag(tag);\n }\n\n /**\n * Returns all resources with the given tag.\n * @param tag - The tag to filter by.\n * @returns The resources with the given tag.\n */\n public getResourcesWithTag(tag: string | ITag<any, any, any>) {\n return this.registry.getResourcesWithTag(tag);\n }\n}\n","import { defineResource } from \"../../../define\";\nimport { DebugFriendlyConfig, getConfig } from \"./types\";\nimport { globalTags } from \"../../../globals/globalTags\";\n\nexport const debugConfig = defineResource({\n id: \"globals.debug.resources.config\",\n meta: {\n title: \"Debug Config\",\n description: \"Debug config. This is used to debug the system.\",\n },\n tags: [globalTags.system],\n init: async (config: DebugFriendlyConfig) => {\n const myConfig = { ...getConfig(config) };\n\n Object.freeze(myConfig);\n return myConfig;\n },\n});\n","import { ITaggable } from \"../../../defs\";\nimport { globalTags } from \"../../globalTags\";\n\nexport const hasSystemTag = (definition: ITaggable) => {\n const maybeTags = definition.tags;\n if (!Array.isArray(maybeTags)) {\n return false;\n }\n return globalTags.system.exists(definition);\n};\n","import { defineHook } from \"../../../define\";\nimport { globalResources } from \"../../globalResources\";\nimport { globalTags } from \"../../globalTags\";\nimport { hasSystemTag } from \"./utils\";\nimport { debugConfig } from \"./debugConfig.resource\";\nimport { getConfig } from \"./types\";\n\nexport const globalEventListener = defineHook({\n id: \"globals.debug.hooks.onAnyEvent\",\n on: \"*\",\n dependencies: {\n logger: globalResources.logger,\n debugConfig,\n },\n run: async (event, { logger, debugConfig }) => {\n if (hasSystemTag(event)) {\n return;\n }\n\n debugConfig = getConfig(debugConfig, event!);\n if (debugConfig.logEventEmissionOnRun) {\n const message = `Event ${String(event!.id)} emitted`;\n await logger.info(message, {\n source: \"globals.debug.hooks.onAnyEvent\",\n data: debugConfig.logEventEmissionInput\n ? { data: event!.data }\n : undefined,\n });\n }\n },\n meta: {\n title: \"Non-system Event Logger\",\n description: \"Logs all non-system events.\",\n },\n tags: [globalTags.system],\n});\n","import {\n defineTaskMiddleware,\n defineResourceMiddleware,\n} from \"../../../define\";\nimport { debugConfig } from \"./debugConfig.resource\";\nimport { globalResources } from \"../../globalResources\";\nimport { globalTags } from \"../../globalTags\";\nimport { getConfig } from \"./types\";\n\nexport const tasksTrackerMiddleware = defineTaskMiddleware({\n id: \"globals.debug.middleware.task.executionTracker\",\n everywhere: (task) => !globalTags.system.exists(task),\n dependencies: {\n logger: globalResources.logger,\n debugConfig,\n store: globalResources.store,\n },\n run: async ({ task, next }, { logger, debugConfig, store: _store }) => {\n const start = Date.now();\n logger = logger.with({\n source: tasksTrackerMiddleware.id,\n });\n\n debugConfig = getConfig(debugConfig, task?.definition);\n const taskStartMessage = `Task ${task!.definition.id} is running...`;\n const shouldShowData = debugConfig.logTaskInput && task!.input;\n await logger.info(taskStartMessage, {\n data: shouldShowData ? { input: task!.input } : undefined,\n });\n\n const result = await next(task!.input);\n const duration = Date.now() - start;\n const taskCompleteMessage = `Task ${\n task!.definition.id\n } completed in ${duration}ms`;\n const shouldShowResult = debugConfig.logTaskOutput && result;\n await logger.info(taskCompleteMessage, {\n data: shouldShowResult ? { result } : undefined,\n });\n return result;\n },\n meta: {\n title: \"Execution Tracker\",\n description: \"Tracks the execution of tasks and resources.\",\n },\n tags: [globalTags.system],\n});\n\nexport const resourcesTrackerMiddleware = defineResourceMiddleware({\n id: \"globals.debug.middleware.resource.executionTracker\",\n dependencies: {\n logger: globalResources.logger,\n debugConfig,\n store: globalResources.store,\n },\n everywhere: (resource) => !globalTags.system.exists(resource),\n run: async ({ resource, next }, { logger, debugConfig, store: _store }) => {\n const start = Date.now();\n logger = logger.with({\n source: resourcesTrackerMiddleware.id,\n });\n debugConfig = getConfig(debugConfig, resource?.definition);\n const resourceStartMessage = `Resource ${\n resource!.definition.id\n } is initializing...`;\n\n const isConfigEmpty = Object.keys(resource!.config || {}).length === 0;\n const shouldShowConfig = debugConfig.logResourceConfig && !isConfigEmpty;\n\n await logger.info(resourceStartMessage, {\n data: shouldShowConfig ? { config: resource!.config } : undefined,\n });\n\n const result = await next(resource!.config);\n const duration = Date.now() - start;\n const resourceCompleteMessage = `Resource ${String(\n resource!.definition.id,\n )} initialized in ${duration}ms`;\n const shouldShowResult =\n debugConfig.logResourceValue && result !== undefined;\n\n await logger.info(resourceCompleteMessage, {\n data: shouldShowResult ? { result } : undefined,\n });\n return result;\n },\n meta: {\n title: \"Execution Tracker\",\n description: \"Tracks the execution of tasks and resources.\",\n },\n tags: [globalTags.system],\n});\n","import { defineResource } from \"../../../define\";\nimport { globalResources } from \"../../globalResources\";\nimport { globalTags } from \"../../globalTags\";\nimport { getConfig } from \"./types\";\nimport { debugConfig } from \"./debugConfig.resource\";\nimport { hasSystemTag } from \"./utils\";\nimport { ITaskMiddlewareExecutionInput } from \"../../../types/taskMiddleware\";\nimport { IResourceMiddlewareExecutionInput } from \"../../../types/resourceMiddleware\";\n\nconst id = \"globals.debug.resources.middlewareInterceptor\";\nexport const middlewareInterceptorResource = defineResource({\n id,\n meta: {\n title: \"Middleware Interceptor\",\n description:\n \"Intercepts task and resource middleware, skipping system-tagged entities.\",\n },\n tags: [globalTags.system],\n dependencies: {\n logger: globalResources.logger,\n debugConfig,\n middlewareManager: globalResources.middlewareManager,\n },\n init: async (event, deps) => {\n const { logger, debugConfig, middlewareManager } = deps;\n\n // Task middleware interceptor\n middlewareManager.intercept(\n \"task\",\n async (\n next: (input: ITaskMiddlewareExecutionInput<any>) => Promise<any>,\n input: ITaskMiddlewareExecutionInput<any>,\n ) => {\n const taskDef = input.task.definition;\n if (!hasSystemTag(taskDef)) {\n const cfg = getConfig(debugConfig, event!);\n if (cfg.logMiddlewareBeforeRun) {\n const msg = `Middleware triggered for task ${String(taskDef.id)}`;\n await logger.info(msg, {\n source: id,\n });\n }\n }\n\n const result = await next(input);\n\n if (!hasSystemTag(taskDef)) {\n const cfg = getConfig(debugConfig, event!);\n if (cfg.logMiddlewareAfterRun) {\n const msg = `Middleware completed for task ${String(taskDef.id)}`;\n await logger.info(msg, {\n source: id,\n });\n }\n }\n\n return result;\n },\n );\n\n // Resource middleware interceptor\n middlewareManager.intercept(\n \"resource\",\n async (\n next: (input: IResourceMiddlewareExecutionInput<any>) => Promise<any>,\n input: IResourceMiddlewareExecutionInput<any>,\n ) => {\n const resourceDef = input.resource.definition;\n if (!hasSystemTag(resourceDef)) {\n const cfg = getConfig(debugConfig, event!);\n if (cfg.logMiddlewareBeforeRun) {\n const msg = `Middleware triggered for resource ${String(\n resourceDef.id,\n )}`;\n await logger.info(msg, {\n source: id,\n });\n }\n }\n\n const result = await next(input);\n\n if (!hasSystemTag(resourceDef)) {\n const cfg = getConfig(debugConfig, event!);\n if (cfg.logMiddlewareAfterRun) {\n const msg = `Middleware completed for resource ${String(\n resourceDef.id,\n )}`;\n await logger.info(msg, {\n source: id,\n });\n }\n }\n\n return result;\n },\n );\n },\n});\n","import { defineResource } from \"../../../define\";\nimport { globalResources } from \"../../globalResources\";\nimport { globalTags } from \"../../globalTags\";\nimport { hasSystemTag } from \"./utils\";\nimport { debugConfig } from \"./debugConfig.resource\";\nimport { getConfig } from \"./types\";\n\nexport const hookInterceptorResource = defineResource({\n id: \"globals.debug.resources.hookInterceptor\",\n meta: {\n title: \"Hook Interceptor\",\n description:\n \"Intercepts hooks for debug logging, skipping system-tagged hooks.\",\n },\n tags: [globalTags.system],\n dependencies: {\n logger: globalResources.logger,\n debugConfig,\n eventManager: globalResources.eventManager,\n },\n init: async (_event, deps) => {\n deps.eventManager.interceptHook(async (next, hook, event) => {\n const { logger, debugConfig } = deps;\n\n // Skip logging for system-tagged observability events\n if (hasSystemTag(hook)) {\n return await next(hook, event);\n }\n\n const resolved = getConfig(debugConfig, event!);\n if (resolved.logHookTriggered) {\n const hookId = hook.id;\n const logString = `Hook triggered for ${String(hookId)}`;\n await logger.info(logString, {\n source: \"globals.debug.resources.hookInterceptor\",\n });\n }\n\n await next(hook, event);\n\n if (resolved.logHookCompleted) {\n const hookId = hook.id;\n const logString = `Hook completed for ${String(hookId)}`;\n await logger.info(logString, {\n source: \"globals.debug.resources.hookInterceptor\",\n });\n }\n });\n },\n});\n","import { defineResource } from \"../../../define\";\nimport { debugConfig } from \"./debugConfig.resource\";\nimport { DebugFriendlyConfig } from \"./types\";\nimport { globalEventListener } from \"./globalEvent.hook\";\nimport {\n tasksTrackerMiddleware,\n resourcesTrackerMiddleware,\n} from \"./executionTracker.middleware\";\nimport { globalTags } from \"../../globalTags\";\nimport { middlewareInterceptorResource } from \"./middleware.hook\";\nimport { hookInterceptorResource } from \"./hook.hook\";\n\nexport const debugResource = defineResource({\n id: \"globals.resources.debug\",\n register: (config: DebugFriendlyConfig) => {\n return [\n debugConfig.with(config),\n globalEventListener,\n middlewareInterceptorResource,\n hookInterceptorResource,\n tasksTrackerMiddleware,\n resourcesTrackerMiddleware,\n ];\n },\n meta: {\n title: \"Debug\",\n description: \"Debug resource. This is used to debug the system.\",\n },\n tags: [globalTags.system],\n});\n","import { getPlatform } from \"./platform\";\n\nconst platform = getPlatform();\n\n// Global registry of active error handlers for process-level safety nets\nconst activeErrorHandlers = new Set<\n (\n error: unknown,\n source: \"uncaughtException\" | \"unhandledRejection\",\n ) => void | Promise<void>\n>();\nlet processSafetyNetsInstalled = false;\n\nfunction installGlobalProcessSafetyNetsOnce() {\n if (processSafetyNetsInstalled) return;\n processSafetyNetsInstalled = true;\n const onUncaughtException = async (err: any) => {\n for (const handler of activeErrorHandlers) {\n try {\n await handler(err, \"uncaughtException\");\n } catch (_) {}\n }\n };\n const onUnhandledRejection = async (reason: any) => {\n for (const handler of activeErrorHandlers) {\n try {\n await handler(reason, \"unhandledRejection\");\n } catch (_) {}\n }\n };\n platform.onUncaughtException(onUncaughtException);\n platform.onUnhandledRejection(onUnhandledRejection);\n}\n\nexport function registerProcessLevelSafetyNets(\n handler: (\n error: unknown,\n source: \"uncaughtException\" | \"unhandledRejection\",\n ) => void | Promise<void>,\n) {\n installGlobalProcessSafetyNetsOnce();\n activeErrorHandlers.add(handler);\n return () => {\n activeErrorHandlers.delete(handler);\n };\n}\n\n// Global shutdown registry: one listener per signal, dispatching to active disposers\nconst activeDisposers = new Set<() => Promise<void>>();\nlet shutdownHooksInstalled = false;\n\nfunction installGlobalShutdownHooksOnce() {\n if (shutdownHooksInstalled) return;\n shutdownHooksInstalled = true;\n const handler = async () => {\n try {\n const disposers = Array.from(activeDisposers);\n for (const d of disposers) {\n try {\n await d();\n } catch {}\n activeDisposers.delete(d);\n }\n } finally {\n platform.exit(0);\n }\n };\n platform.onShutdownSignal(handler);\n}\n\nexport function registerShutdownHook(disposeOnce: () => Promise<void>) {\n installGlobalShutdownHooksOnce();\n activeDisposers.add(disposeOnce);\n return () => {\n activeDisposers.delete(disposeOnce);\n };\n}\n","import { Logger } from \"./Logger\";\n\nexport type UnhandledErrorKind =\n | \"process\"\n | \"task\"\n | \"middleware\"\n | \"resourceInit\"\n | \"hook\"\n | \"run\";\n\nexport interface OnUnhandledErrorInfo {\n error: unknown;\n kind?: UnhandledErrorKind;\n source?: string;\n}\n\nexport type OnUnhandledError = (\n info: OnUnhandledErrorInfo,\n) => void | Promise<void>;\n\nexport function createDefaultUnhandledError(logger: Logger): OnUnhandledError {\n return async ({ error, kind, source }: OnUnhandledErrorInfo) => {\n const normalizedError =\n error instanceof Error ? error : new Error(String(error));\n\n await logger.error(`${normalizedError.toString()}`, {\n source,\n error: normalizedError,\n data: {\n kind,\n },\n });\n };\n}\n\nexport function bindProcessErrorHandler(\n handler: OnUnhandledError,\n): (\n error: unknown,\n source: \"uncaughtException\" | \"unhandledRejection\",\n) => void | Promise<void> {\n return async (error, source) => {\n try {\n await handler({ error, kind: \"process\", source });\n } catch {}\n };\n}\n\nexport async function safeReportUnhandledError(\n handler: OnUnhandledError,\n info: OnUnhandledErrorInfo,\n): Promise<void> {\n try {\n await handler(info);\n } catch {}\n}\n","import { DependencyMapType, IEvent, ITask } from \"../defs\";\nimport { IResource } from \"../defs\";\n// For RunResult convenience API, preserve the original simple messages\nimport { EventManager } from \"./EventManager\";\nimport { Logger } from \"./Logger\";\nimport { Store } from \"./Store\";\nimport { TaskRunner } from \"./TaskRunner\";\n\nexport class RunResult<V> {\n constructor(\n public readonly value: V,\n public readonly logger: Logger,\n public readonly store: Store,\n private readonly eventManager: EventManager,\n private readonly taskRunner: TaskRunner,\n private readonly disposeFn: () => Promise<void>,\n ) {}\n\n /**\n * Run a task within the context of the run result.\n * @param task - The task to run.\n * @param args - The arguments to pass to the task.\n * @returns The result of the task.\n */\n public runTask = <\n I = undefined,\n O extends Promise<any> = any,\n D extends DependencyMapType = any,\n >(\n task: ITask<I, O, D> | string,\n ...args: I extends undefined | void ? [] : [I]\n ) => {\n if (typeof task === \"string\") {\n const taskId = task;\n if (!this.store.tasks.has(taskId)) {\n throw new Error(`Task \"${taskId}\" not found.`);\n }\n task = this.store.tasks.get(taskId)!.task;\n }\n\n return this.taskRunner.run(task, ...args);\n };\n\n /**\n * Emit an event within the context of the run result.\n * @param event - The event to emit.\n * @param payload - The payload to emit.\n */\n public emitEvent = <P>(\n event: IEvent<P> | string,\n payload?: P extends undefined | void ? undefined : P,\n ) => {\n if (typeof event === \"string\") {\n const eventId = event;\n if (!this.store.events.has(eventId)) {\n throw new Error(`Event \"${eventId}\" not found.`);\n }\n event = this.store.events.get(eventId)!.event;\n }\n return this.eventManager.emit(event, payload, \"outside\");\n };\n\n /**\n * Get the value of a resource from the run result.\n * @param resource - The resource to get the value of.\n * @returns The value of the resource.\n */\n public getResourceValue = <Output extends Promise<any>>(\n resource: string | IResource<any, Output, any, any, any>,\n ): Output extends Promise<infer U> ? U : Output => {\n const resourceId = typeof resource === \"string\" ? resource : resource.id;\n if (!this.store.resources.has(resourceId)) {\n throw new Error(`Resource \"${resourceId}\" not found.`);\n }\n\n return this.store.resources.get(resourceId)!.value;\n };\n\n /**\n * Get the config of a resource from the run result.\n * @param resource - The resource to get the config of.\n * @returns The config passed for the resource.\n */\n public getResourceConfig = <Config>(\n resource: string | IResource<Config, any, any, any, any>,\n ): Config => {\n const resourceId = typeof resource === \"string\" ? resource : resource.id;\n if (!this.store.resources.has(resourceId)) {\n throw new Error(`Resource \"${resourceId}\" not found.`);\n }\n\n return this.store.resources.get(resourceId)!.config;\n };\n\n public dispose = () => {\n return this.disposeFn();\n };\n}\n","import { TaskRunner } from \"./models/TaskRunner\";\nimport { IResource, IResourceWithConfig } from \"./defs\";\nimport { DependencyProcessor } from \"./models/DependencyProcessor\";\nimport { EventManager } from \"./models/EventManager\";\nimport { globalEvents } from \"./globals/globalEvents\";\nimport { Store } from \"./models/Store\";\nimport { Logger } from \"./models/Logger\";\nimport { isResourceWithConfig } from \"./define\";\nimport { debugResource } from \"./globals/resources/debug\";\nimport {\n registerProcessLevelSafetyNets,\n registerShutdownHook,\n} from \"./processHooks\";\nimport {\n OnUnhandledError,\n createDefaultUnhandledError,\n bindProcessErrorHandler,\n} from \"./models/UnhandledError\";\nimport { RunResult } from \"./models/RunResult\";\nimport { RunOptions } from \"./types/runner\";\nimport { getPlatform } from \"./platform\";\n\n/**\n * This is the central function that kicks off you runner. You can run as many resources as you want in a single process, they will run in complete isolation.\n *\n * @param resourceOrResourceWithConfig - The resource or resource with config to run.\n * @param options - The options for the run.\n * @returns A promise that resolves to the result of the run.\n */\nexport async function run<C, V extends Promise<any>>(\n resourceOrResourceWithConfig:\n | IResourceWithConfig<C, V>\n | IResource<void, V, any, any> // For void configs\n | IResource<{ [K in any]?: any }, V, any, any>, // For optional config\n options?: RunOptions,\n): Promise<RunResult<V extends Promise<infer U> ? U : V>> {\n // Import all necessary elements based on platform.\n await getPlatform().init();\n const {\n debug = undefined,\n logs = {},\n errorBoundary = true,\n shutdownHooks = true,\n dryRun = false,\n onUnhandledError: onUnhandledErrorOpt,\n runtimeEventCycleDetection = true,\n } = options || {};\n\n const {\n printThreshold = getPlatform().getEnv(\"NODE_ENV\") === \"test\"\n ? null\n : \"info\",\n printStrategy = \"pretty\",\n bufferLogs = false,\n } = logs;\n\n const eventManager = new EventManager({\n runtimeEventCycleDetection,\n });\n\n const { resource, config } = extractResourceAndConfig(\n resourceOrResourceWithConfig,\n );\n\n // ensure for logger, that it can be used only after: computeAllDependencies() has executed\n const logger = new Logger({\n printThreshold,\n printStrategy,\n bufferLogs,\n });\n\n const onUnhandledError: OnUnhandledError =\n onUnhandledErrorOpt || createDefaultUnhandledError(logger);\n\n const store = new Store(eventManager, logger, onUnhandledError);\n const taskRunner = new TaskRunner(store, eventManager, logger);\n store.setTaskRunner(taskRunner);\n\n // Register this run's event manager for global process error safety nets\n let unhookProcessSafetyNets: (() => void) | undefined;\n if (errorBoundary) {\n unhookProcessSafetyNets = registerProcessLevelSafetyNets(\n bindProcessErrorHandler(onUnhandledError),\n );\n }\n\n const processor = new DependencyProcessor(\n store,\n eventManager,\n taskRunner,\n logger,\n );\n\n // We may install shutdown hooks; capture unhook function to remove them on dispose\n let unhookShutdown: (() => void) | undefined;\n\n // Helper dispose that always unhooks process listeners first\n const disposeAll = async () => {\n try {\n if (unhookProcessSafetyNets) {\n unhookProcessSafetyNets();\n unhookProcessSafetyNets = undefined;\n }\n if (unhookShutdown) {\n unhookShutdown();\n unhookShutdown = undefined;\n }\n } finally {\n await store.dispose();\n }\n };\n\n try {\n if (debug) {\n store.storeGenericItem(debugResource.with(debug));\n }\n\n // In the registration phase we register deeply all the resources, tasks, middleware and events\n store.initializeStore(resource, config);\n\n // the overrides that were registered now will override the other registered resources\n await store.processOverrides();\n\n store.validateDependencyGraph();\n // Compile-time event emission cycle detection (cheap, graph-based)\n store.validateEventEmissionGraph();\n\n const boundedLogger = logger.with({ source: \"run\" });\n if (dryRun) {\n await boundedLogger.debug(\"Dry run mode. Skipping initialization...\");\n return new RunResult(\n store.root.value,\n logger,\n store,\n eventManager,\n taskRunner,\n disposeAll,\n );\n }\n\n // Beginning initialization\n await boundedLogger.debug(\"Events stored. Attaching listeners...\");\n await processor.attachListeners();\n await boundedLogger.debug(\"Listeners attached. Computing dependencies...\");\n await processor.computeAllDependencies();\n // After this stage, logger print policy could have been set.\n await boundedLogger.debug(\n \"Dependencies computed. Proceeding with initialization...\",\n );\n\n // Now we can safely compute dependencies without being afraid of an infinite loop.\n // The hooking part is done here.\n\n // Now we can initialise the root resource\n await processor.initializeRoot();\n\n // disallow manipulation or attaching more\n store.lock();\n eventManager.lock();\n await logger.lock();\n\n await eventManager.emit(globalEvents.ready, undefined, \"run\");\n\n await boundedLogger.info(\"Runner online. Awaiting tasks and events.\");\n\n if (shutdownHooks) {\n unhookShutdown = registerShutdownHook(() => store.dispose());\n }\n\n return new RunResult(\n store.root.value,\n logger,\n store,\n eventManager,\n taskRunner,\n disposeAll,\n );\n } catch (err) {\n // Rollback initialized resources\n await disposeAll();\n throw err;\n }\n}\n\n// process hooks moved to processHooks.ts for clarity\n\nfunction extractResourceAndConfig<C, V extends Promise<any>>(\n resourceOrResourceWithConfig:\n | IResourceWithConfig<C, V>\n | IResource<void, V, any, any> // For void configs\n | IResource<{ [K in any]?: any }, V, any, any>, // For optional config\n) {\n let resource: IResource<any, any, any, any>;\n let config: any;\n if (isResourceWithConfig(resourceOrResourceWithConfig)) {\n resource = resourceOrResourceWithConfig.resource;\n config = resourceOrResourceWithConfig.config;\n } else {\n resource = resourceOrResourceWithConfig as IResource<any, any, any, any>;\n config = undefined;\n }\n return { resource, config };\n}\n","import type { SerializerLike } from \"../../serializer\";\nimport { createExposureFetch } from \"../../http-fetch-tunnel.resource\";\nimport type { ExposureFetchClient } from \"../../http-fetch-tunnel.resource\";\n\nexport interface HttpClientAuthConfig {\n header?: string; // default: x-runner-token\n token: string;\n}\n\nexport interface HttpCreateClientConfig {\n url: string; // ex: http://localhost:7070/__runner\n auth?: HttpClientAuthConfig;\n timeoutMs?: number;\n fetchImpl?: typeof fetch;\n serializer: SerializerLike;\n onRequest?: (ctx: {\n url: string;\n headers: Record<string, string>;\n }) => void | Promise<void>;\n}\n\nconst http = Object.freeze({\n createClient(cfg: HttpCreateClientConfig): ExposureFetchClient {\n const { url, ...rest } = cfg;\n return createExposureFetch({ baseUrl: url, ...rest });\n },\n});\n\nexport const tunnels = Object.freeze({\n http,\n});\n\nexport type { ExposureFetchClient };\n","import { defineResource } from \"./define\";\nimport { globalResources } from \"./globals/globalResources\";\nimport {\n IResource,\n IResourceWithConfig,\n ITaskMiddleware,\n IResourceMiddleware,\n ITask,\n RegisterableItems,\n DependencyMapType,\n} from \"./defs\";\nimport { EventManager, Logger, Store, TaskRunner } from \"./models\";\n\nlet testResourceCounter = 0;\n\nexport interface TestFacade {\n runTask: <I, O extends Promise<any>, D extends DependencyMapType>(\n task: ITask<I, O, D>,\n ...args: I extends undefined ? [] : [I]\n ) => Promise<Awaited<O> | undefined>;\n getResource: (id: string) => unknown;\n taskRunner: TaskRunner;\n store: Store;\n logger: Logger;\n eventManager: EventManager;\n}\n\n/**\n * Helper to create a minimal test harness resource that wraps a root app (or any registerable)\n * and exposes convenient testing utilities while running the full ecosystem\n * (registration, overrides, middleware, events) without modifying the core API.\n * @deprecated Use `run` instead with your testResource, as it provides the necessary toolkit.\n */\nexport function createTestResource(\n root: RegisterableItems,\n options?: {\n overrides?: Array<\n | IResource\n | ITask\n | ITaskMiddleware\n | IResourceMiddleware\n | IResourceWithConfig\n >;\n },\n): IResource<void, Promise<TestFacade>> {\n return defineResource({\n id: `testing.${root.id}.${++testResourceCounter}`,\n register: [root],\n overrides: options?.overrides || [],\n dependencies: {\n taskRunner: globalResources.taskRunner,\n store: globalResources.store,\n logger: globalResources.logger,\n eventManager: globalResources.eventManager,\n },\n async init(_, deps) {\n return buildTestFacade(deps);\n },\n });\n}\n\nfunction buildTestFacade(deps: {\n taskRunner: TaskRunner;\n store: Store;\n logger: Logger;\n eventManager: EventManager;\n}): TestFacade {\n return {\n // Run a task within the fully initialized ecosystem\n runTask: <I, O extends Promise<any>, D extends DependencyMapType>(\n task: ITask<I, O, D>,\n ...args: I extends undefined ? [] : [I]\n ): Promise<Awaited<O> | undefined> =>\n deps.taskRunner.run(task, ...args) as Promise<Awaited<O> | undefined>,\n // Access a resource value by id (string or symbol)\n getResource: (id: string) => deps.store.resources.get(id)?.value,\n // Expose internals when needed in tests (not recommended for app usage)\n taskRunner: deps.taskRunner,\n store: deps.store,\n logger: deps.logger,\n eventManager: deps.eventManager,\n };\n}\n","import type {\n DependencyMapType,\n IResourceMeta,\n RegisterableItems,\n ResourceMiddlewareAttachmentType,\n TagType,\n} from \"../../../defs\";\nimport type { BuilderState, RegisterInput, RegisterState } from \"./types\";\n\n/**\n * Clones and patches the builder state immutably.\n */\nexport function clone<\n TConfig,\n TValue extends Promise<any>,\n TDeps extends DependencyMapType,\n TContext,\n TMeta extends IResourceMeta,\n TTags extends TagType[],\n TMiddleware extends ResourceMiddlewareAttachmentType[],\n TNextConfig = TConfig,\n TNextValue extends Promise<any> = TValue,\n TNextDeps extends DependencyMapType = TDeps,\n TNextContext = TContext,\n TNextMeta extends IResourceMeta = TMeta,\n TNextTags extends TagType[] = TTags,\n TNextMiddleware extends ResourceMiddlewareAttachmentType[] = TMiddleware,\n>(\n s: BuilderState<TConfig, TValue, TDeps, TContext, TMeta, TTags, TMiddleware>,\n patch: Partial<\n BuilderState<\n TNextConfig,\n TNextValue,\n TNextDeps,\n TNextContext,\n TNextMeta,\n TNextTags,\n TNextMiddleware\n >\n >,\n): BuilderState<\n TNextConfig,\n TNextValue,\n TNextDeps,\n TNextContext,\n TNextMeta,\n TNextTags,\n TNextMiddleware\n> {\n return Object.freeze({\n // We reuse the frozen state while widening generics, hence the temporary cast.\n ...(s as unknown as BuilderState<\n TNextConfig,\n TNextValue,\n TNextDeps,\n TNextContext,\n TNextMeta,\n TNextTags,\n TNextMiddleware\n >),\n ...patch,\n }) as BuilderState<\n TNextConfig,\n TNextValue,\n TNextDeps,\n TNextContext,\n TNextMeta,\n TNextTags,\n TNextMiddleware\n >;\n}\n\n/**\n * Normalizes register items to an array.\n */\nexport function toRegisterArray(\n items: RegisterableItems | Array<RegisterableItems>,\n) {\n return Array.isArray(items) ? [...items] : [items];\n}\n\n/**\n * Wraps a register function to always return an array.\n */\nexport function normalizeRegisterFunction<TConfig>(\n fn: (config: TConfig) => RegisterableItems | Array<RegisterableItems>,\n) {\n return (config: TConfig) => toRegisterArray(fn(config));\n}\n\n/**\n * Merges register state handling all combinations of arrays and functions.\n */\nexport function mergeRegister<TConfig>(\n existing: RegisterState<TConfig>,\n addition: RegisterInput<TConfig>,\n override: boolean,\n): RegisterState<TConfig> {\n const isFunctionAddition = typeof addition === \"function\";\n const normalizedAddition = isFunctionAddition\n ? normalizeRegisterFunction(\n addition as (\n config: TConfig,\n ) => RegisterableItems | Array<RegisterableItems>,\n )\n : toRegisterArray(addition as RegisterableItems | Array<RegisterableItems>);\n\n if (override || !existing) {\n return isFunctionAddition\n ? (normalizedAddition as (config: TConfig) => Array<RegisterableItems>)\n : (normalizedAddition as Array<RegisterableItems>);\n }\n\n if (typeof existing === \"function\") {\n if (isFunctionAddition) {\n const additionFn = normalizedAddition as (\n config: TConfig,\n ) => Array<RegisterableItems>;\n return (config: TConfig) => [...existing(config), ...additionFn(config)];\n }\n const additionArray = normalizedAddition as Array<RegisterableItems>;\n return (config: TConfig) => [...existing(config), ...additionArray];\n }\n\n const existingArray = existing as Array<RegisterableItems>;\n if (isFunctionAddition) {\n const additionFn = normalizedAddition as (\n config: TConfig,\n ) => Array<RegisterableItems>;\n return (config: TConfig) => [...existingArray, ...additionFn(config)];\n }\n\n return [\n ...existingArray,\n ...(normalizedAddition as Array<RegisterableItems>),\n ];\n}\n\n/**\n * Generic array merge with override support.\n */\nexport function mergeArray<T>(\n existing: ReadonlyArray<T> | undefined,\n addition: ReadonlyArray<T>,\n override: boolean,\n): T[] {\n const toArray = [...addition];\n if (override || !existing) {\n return toArray as T[];\n }\n return [...existing, ...toArray] as T[];\n}\n\n/**\n * Merges dependencies handling all combinations of objects and functions.\n */\nexport function mergeDependencies<\n TConfig,\n TExisting extends DependencyMapType,\n TNew extends DependencyMapType,\n>(\n existing: TExisting | ((config: TConfig) => TExisting) | undefined,\n addition: TNew | ((config: TConfig) => TNew),\n override: boolean,\n): (TExisting & TNew) | ((config: TConfig) => TExisting & TNew) {\n const isFnExisting = typeof existing === \"function\";\n const isFnAddition = typeof addition === \"function\";\n\n type Result = (TExisting & TNew) | ((config: TConfig) => TExisting & TNew);\n\n if (override || !existing) {\n return addition as unknown as Result;\n }\n\n if (isFnExisting && isFnAddition) {\n const e = existing as (config: TConfig) => TExisting;\n const a = addition as (config: TConfig) => TNew;\n return ((config: TConfig) => ({\n ...e(config),\n ...a(config),\n })) as Result;\n }\n if (isFnExisting && !isFnAddition) {\n const e = existing as (config: TConfig) => TExisting;\n const a = addition as TNew;\n return ((config: TConfig) => ({\n ...e(config),\n ...a,\n })) as Result;\n }\n if (!isFnExisting && isFnAddition) {\n const e = existing as TExisting;\n const a = addition as (config: TConfig) => TNew;\n return ((config: TConfig) => ({\n ...e,\n ...a(config),\n })) as Result;\n }\n const e = existing as TExisting;\n const a = addition as TNew;\n return { ...e, ...a } as Result;\n}\n","import type {\n DependencyMapType,\n IResourceDefinition,\n IResourceMeta,\n IValidationSchema,\n OverridableElements,\n ResourceInitFn,\n ResourceMiddlewareAttachmentType,\n TagType,\n} from \"../../../defs\";\nimport { symbolFilePath } from \"../../../defs\";\nimport type { ThrowsList } from \"../../../types/error\";\nimport { defineResource } from \"../../defineResource\";\nimport type { ResourceFluentBuilder } from \"./fluent-builder.interface\";\nimport type { BuilderState, ResolveConfig } from \"./types\";\nimport { clone, mergeArray, mergeDependencies, mergeRegister } from \"./utils\";\n\n/**\n * Creates a ResourceFluentBuilder from the given state.\n * Each builder method returns a new builder with updated state.\n */\nexport function makeResourceBuilder<\n TConfig,\n TValue extends Promise<any>,\n TDeps extends DependencyMapType,\n TContext,\n TMeta extends IResourceMeta,\n TTags extends TagType[],\n TMiddleware extends ResourceMiddlewareAttachmentType[],\n>(\n state: BuilderState<\n TConfig,\n TValue,\n TDeps,\n TContext,\n TMeta,\n TTags,\n TMiddleware\n >,\n): ResourceFluentBuilder<\n TConfig,\n TValue,\n TDeps,\n TContext,\n TMeta,\n TTags,\n TMiddleware\n> {\n const builder: ResourceFluentBuilder<\n TConfig,\n TValue,\n TDeps,\n TContext,\n TMeta,\n TTags,\n TMiddleware\n > = {\n id: state.id,\n dependencies<\n TNewDeps extends DependencyMapType,\n TIsOverride extends boolean = false,\n >(\n deps: TNewDeps | ((config: TConfig) => TNewDeps),\n options?: { override?: TIsOverride },\n ) {\n const override = options?.override ?? false;\n const next = clone<\n TConfig,\n TValue,\n TDeps,\n TContext,\n TMeta,\n TTags,\n TMiddleware,\n TConfig,\n TValue,\n TIsOverride extends true ? TNewDeps : TDeps & TNewDeps,\n TContext,\n TMeta,\n TTags,\n TMiddleware\n >(state, {\n dependencies: mergeDependencies(\n state.dependencies,\n deps,\n override,\n ) as unknown as TIsOverride extends true ? TNewDeps : TDeps & TNewDeps,\n });\n\n return makeResourceBuilder(next);\n },\n register(items, options) {\n const override = options?.override ?? false;\n const next = clone(state, {\n register: mergeRegister(state.register, items, override),\n });\n return makeResourceBuilder(next);\n },\n middleware<TNewMw extends ResourceMiddlewareAttachmentType[]>(\n mw: TNewMw,\n options?: { override?: boolean },\n ) {\n const override = options?.override ?? false;\n const next = clone<\n TConfig,\n TValue,\n TDeps,\n TContext,\n TMeta,\n TTags,\n TMiddleware,\n TConfig,\n TValue,\n TDeps,\n TContext,\n TMeta,\n TTags,\n TNewMw\n >(state, {\n middleware: mergeArray(state.middleware, mw, override) as TNewMw,\n });\n return makeResourceBuilder(next);\n },\n tags<TNewTags extends TagType[]>(\n tags: TNewTags,\n options?: { override?: boolean },\n ) {\n const override = options?.override ?? false;\n const next = clone<\n TConfig,\n TValue,\n TDeps,\n TContext,\n TMeta,\n TTags,\n TMiddleware,\n TConfig,\n TValue,\n TDeps,\n TContext,\n TMeta,\n [...TTags, ...TNewTags],\n TMiddleware\n >(state, {\n tags: mergeArray(state.tags, tags, override) as unknown as [\n ...TTags,\n ...TNewTags,\n ],\n });\n return makeResourceBuilder(next);\n },\n context<TNewCtx>(factory: () => TNewCtx) {\n const next = clone<\n TConfig,\n TValue,\n TDeps,\n TContext,\n TMeta,\n TTags,\n TMiddleware,\n TConfig,\n TValue,\n TDeps,\n TNewCtx,\n TMeta,\n TTags,\n TMiddleware\n >(state, { context: factory });\n return makeResourceBuilder<\n TConfig,\n TValue,\n TDeps,\n TNewCtx,\n TMeta,\n TTags,\n TMiddleware\n >(next);\n },\n configSchema<TNewConfig>(schema: IValidationSchema<TNewConfig>) {\n const next = clone<\n TConfig,\n TValue,\n TDeps,\n TContext,\n TMeta,\n TTags,\n TMiddleware,\n TNewConfig,\n TValue,\n TDeps,\n TContext,\n TMeta,\n TTags,\n TMiddleware\n >(state, { configSchema: schema });\n return makeResourceBuilder<\n TNewConfig,\n TValue,\n TDeps,\n TContext,\n TMeta,\n TTags,\n TMiddleware\n >(next);\n },\n resultSchema<TResolved>(schema: IValidationSchema<TResolved>) {\n const next = clone<\n TConfig,\n TValue,\n TDeps,\n TContext,\n TMeta,\n TTags,\n TMiddleware,\n TConfig,\n Promise<TResolved>,\n TDeps,\n TContext,\n TMeta,\n TTags,\n TMiddleware\n >(state, { resultSchema: schema });\n return makeResourceBuilder<\n TConfig,\n Promise<TResolved>,\n TDeps,\n TContext,\n TMeta,\n TTags,\n TMiddleware\n >(next);\n },\n init<TNewConfig = TConfig, TNewValue extends Promise<any> = TValue>(\n fn: ResourceInitFn<\n ResolveConfig<TConfig, TNewConfig>,\n TNewValue,\n TDeps,\n TContext,\n TMeta,\n TTags,\n TMiddleware\n >,\n ) {\n const next = clone<\n TConfig,\n TValue,\n TDeps,\n TContext,\n TMeta,\n TTags,\n TMiddleware,\n ResolveConfig<TConfig, TNewConfig>,\n TNewValue,\n TDeps,\n TContext,\n TMeta,\n TTags,\n TMiddleware\n >(state, { init: fn });\n return makeResourceBuilder<\n ResolveConfig<TConfig, TNewConfig>,\n TNewValue,\n TDeps,\n TContext,\n TMeta,\n TTags,\n TMiddleware\n >(next);\n },\n dispose(\n fn: NonNullable<\n IResourceDefinition<\n TConfig,\n TValue,\n TDeps,\n TContext,\n any,\n any,\n TMeta,\n TTags,\n TMiddleware\n >[\"dispose\"]\n >,\n ) {\n const next = clone(state, { dispose: fn });\n return makeResourceBuilder<\n TConfig,\n TValue,\n TDeps,\n TContext,\n TMeta,\n TTags,\n TMiddleware\n >(next);\n },\n meta<TNewMeta extends IResourceMeta>(m: TNewMeta) {\n const next = clone<\n TConfig,\n TValue,\n TDeps,\n TContext,\n TMeta,\n TTags,\n TMiddleware,\n TConfig,\n TValue,\n TDeps,\n TContext,\n TNewMeta,\n TTags,\n TMiddleware\n >(state, { meta: m });\n return makeResourceBuilder<\n TConfig,\n TValue,\n TDeps,\n TContext,\n TNewMeta,\n TTags,\n TMiddleware\n >(next);\n },\n overrides(o: Array<OverridableElements>, options?: { override?: boolean }) {\n const override = options?.override ?? false;\n const next = clone(state, {\n overrides: mergeArray(state.overrides, o, override),\n });\n return makeResourceBuilder<\n TConfig,\n TValue,\n TDeps,\n TContext,\n TMeta,\n TTags,\n TMiddleware\n >(next);\n },\n throws(list: ThrowsList) {\n const next = clone(state, { throws: list });\n return makeResourceBuilder<\n TConfig,\n TValue,\n TDeps,\n TContext,\n TMeta,\n TTags,\n TMiddleware\n >(next);\n },\n build() {\n const definition: IResourceDefinition<\n TConfig,\n TValue,\n TDeps,\n TContext,\n any,\n any,\n TMeta,\n TTags,\n TMiddleware\n > = {\n id: state.id,\n dependencies: state.dependencies,\n register: state.register,\n middleware: state.middleware,\n tags: state.tags,\n context: state.context,\n init: state.init,\n dispose: state.dispose,\n configSchema: state.configSchema,\n resultSchema: state.resultSchema,\n meta: state.meta,\n overrides: state.overrides,\n throws: state.throws,\n };\n const resource = defineResource(definition);\n (resource as { [symbolFilePath]?: string })[symbolFilePath] =\n state.filePath;\n return resource;\n },\n };\n return builder;\n}\n","import type {\n IResourceMeta,\n ResourceMiddlewareAttachmentType,\n TagType,\n} from \"../../../defs\";\nimport { getCallerFile } from \"../../../tools/getCallerFile\";\nimport type { ResourceFluentBuilder } from \"./fluent-builder.interface\";\nimport { makeResourceBuilder } from \"./fluent-builder\";\nimport type { BuilderState } from \"./types\";\n\n// Re-export the interface for external consumers\nexport type { ResourceFluentBuilder } from \"./fluent-builder.interface\";\nexport * from \"./types\";\n\n/**\n * Creates a new resource builder with the given id.\n * Overload allows callers to seed the config type at the entry point for convenience.\n */\nexport function resourceBuilder<TConfig = void>(\n id: string,\n): ResourceFluentBuilder<\n TConfig,\n Promise<any>,\n {},\n any,\n IResourceMeta,\n TagType[],\n ResourceMiddlewareAttachmentType[]\n>;\n\nexport function resourceBuilder(\n id: string,\n): ResourceFluentBuilder<\n void,\n Promise<any>,\n {},\n any,\n IResourceMeta,\n TagType[],\n ResourceMiddlewareAttachmentType[]\n> {\n const filePath = getCallerFile();\n const initial: BuilderState<\n void,\n Promise<any>,\n {},\n any,\n IResourceMeta,\n TagType[],\n ResourceMiddlewareAttachmentType[]\n > = Object.freeze({\n id,\n filePath,\n dependencies: undefined,\n register: undefined,\n middleware: [],\n tags: [],\n context: undefined,\n init: undefined,\n dispose: undefined,\n configSchema: undefined,\n resultSchema: undefined,\n meta: undefined,\n overrides: undefined,\n });\n return makeResourceBuilder(initial);\n}\n\n/**\n * Alias for resourceBuilder - common shorthand.\n */\nexport const resource = resourceBuilder;\n","import type {\n DependencyMapType,\n ITaskMeta,\n TagType,\n TaskMiddlewareAttachmentType,\n} from \"../../../defs\";\nimport type { BuilderState } from \"./types\";\n\n/**\n * Clones and patches the builder state immutably.\n */\nexport function clone<\n TInput,\n TOutput,\n TDeps extends DependencyMapType,\n TMeta extends ITaskMeta,\n TTags extends TagType[],\n TMiddleware extends TaskMiddlewareAttachmentType[],\n TNextInput = TInput,\n TNextOutput = TOutput,\n TNextDeps extends DependencyMapType = TDeps,\n TNextMeta extends ITaskMeta = TMeta,\n TNextTags extends TagType[] = TTags,\n TNextMiddleware extends TaskMiddlewareAttachmentType[] = TMiddleware,\n>(\n s: BuilderState<TInput, TOutput, TDeps, TMeta, TTags, TMiddleware>,\n patch: Partial<\n BuilderState<\n TNextInput,\n TNextOutput,\n TNextDeps,\n TNextMeta,\n TNextTags,\n TNextMiddleware\n >\n >,\n): BuilderState<\n TNextInput,\n TNextOutput,\n TNextDeps,\n TNextMeta,\n TNextTags,\n TNextMiddleware\n> {\n type NextState = BuilderState<\n TNextInput,\n TNextOutput,\n TNextDeps,\n TNextMeta,\n TNextTags,\n TNextMiddleware\n >;\n return Object.freeze({\n ...(s as unknown as NextState),\n ...patch,\n }) as NextState;\n}\n\n/**\n * Generic array merge with override support.\n */\nexport function mergeArray<T>(\n existing: ReadonlyArray<T> | undefined,\n addition: ReadonlyArray<T>,\n override: boolean,\n): T[] {\n const toArray = [...addition];\n if (override || !existing) {\n return toArray;\n }\n return [...existing, ...toArray];\n}\n\n/**\n * Merges dependencies handling all combinations of objects and functions.\n */\nexport function mergeDependencies<\n TExisting extends DependencyMapType,\n TNew extends DependencyMapType,\n>(\n existing: TExisting | (() => TExisting) | undefined,\n addition: TNew | (() => TNew),\n override: boolean,\n): (TExisting & TNew) | (() => TExisting & TNew) {\n const isFnExisting = typeof existing === \"function\";\n const isFnAddition = typeof addition === \"function\";\n\n type Result = (TExisting & TNew) | (() => TExisting & TNew);\n\n if (override || !existing) {\n return addition as unknown as Result;\n }\n\n if (isFnExisting && isFnAddition) {\n const e = existing as () => TExisting;\n const a = addition as () => TNew;\n return (() => ({\n ...e(),\n ...a(),\n })) as Result;\n }\n if (isFnExisting && !isFnAddition) {\n const e = existing as () => TExisting;\n const a = addition as TNew;\n return (() => ({\n ...e(),\n ...a,\n })) as Result;\n }\n if (!isFnExisting && isFnAddition) {\n const e = existing as TExisting;\n const a = addition as () => TNew;\n return (() => ({\n ...e,\n ...a(),\n })) as Result;\n }\n const e = existing as TExisting;\n const a = addition as TNew;\n return { ...e, ...a } as Result;\n}\n","import type {\n DependencyMapType,\n DependencyValuesType,\n ITaskDefinition,\n ITaskMeta,\n IValidationSchema,\n TagType,\n TaskMiddlewareAttachmentType,\n} from \"../../../defs\";\nimport { symbolFilePath } from \"../../../defs\";\nimport type { ThrowsList } from \"../../../types/error\";\nimport { defineTask } from \"../../defineTask\";\nimport type { TaskFluentBuilder } from \"./fluent-builder.interface\";\nimport type { BuilderState, ResolveInput } from \"./types\";\nimport { clone, mergeArray, mergeDependencies } from \"./utils\";\n\n/**\n * Creates a TaskFluentBuilder from the given state.\n * Each builder method returns a new builder with updated state.\n */\nexport function makeTaskBuilder<\n TInput,\n TOutput extends Promise<any>,\n TDeps extends DependencyMapType,\n TMeta extends ITaskMeta,\n TTags extends TagType[],\n TMiddleware extends TaskMiddlewareAttachmentType[],\n>(\n state: BuilderState<TInput, TOutput, TDeps, TMeta, TTags, TMiddleware>,\n): TaskFluentBuilder<TInput, TOutput, TDeps, TMeta, TTags, TMiddleware> {\n const builder: TaskFluentBuilder<\n TInput,\n TOutput,\n TDeps,\n TMeta,\n TTags,\n TMiddleware\n > = {\n id: state.id,\n dependencies<TNewDeps extends DependencyMapType>(\n deps: TNewDeps | (() => TNewDeps),\n options?: { override?: boolean },\n ) {\n const override = options?.override ?? false;\n const nextDependencies = mergeDependencies<TDeps, TNewDeps>(\n state.dependencies as TDeps | (() => TDeps),\n deps,\n override,\n );\n\n const next = clone<\n TInput,\n TOutput,\n TDeps,\n TMeta,\n TTags,\n TMiddleware,\n TInput,\n TOutput,\n TDeps & TNewDeps,\n TMeta,\n TTags,\n TMiddleware\n >(state, {\n dependencies: nextDependencies as unknown as TDeps & TNewDeps,\n });\n\n return makeTaskBuilder(next);\n },\n\n middleware<TNewMw extends TaskMiddlewareAttachmentType[]>(\n mw: TNewMw,\n options?: { override?: boolean },\n ) {\n const override = options?.override ?? false;\n const next = clone<\n TInput,\n TOutput,\n TDeps,\n TMeta,\n TTags,\n TMiddleware,\n TInput,\n TOutput,\n TDeps,\n TMeta,\n TTags,\n TNewMw\n >(state, {\n middleware: mergeArray(state.middleware, mw, override) as TNewMw,\n });\n return makeTaskBuilder(next);\n },\n\n tags<TNewTags extends TagType[]>(\n t: TNewTags,\n options?: { override?: boolean },\n ) {\n const override = options?.override ?? false;\n const next = clone<\n TInput,\n TOutput,\n TDeps,\n TMeta,\n TTags,\n TMiddleware,\n TInput,\n TOutput,\n TDeps,\n TMeta,\n [...TTags, ...TNewTags],\n TMiddleware\n >(state, {\n tags: mergeArray(state.tags, t, override) as [...TTags, ...TNewTags],\n });\n return makeTaskBuilder(next);\n },\n\n inputSchema<TNewInput>(schema: IValidationSchema<TNewInput>) {\n const next = clone<\n TInput,\n TOutput,\n TDeps,\n TMeta,\n TTags,\n TMiddleware,\n TNewInput,\n TOutput,\n TDeps,\n TMeta,\n TTags,\n TMiddleware\n >(state, { inputSchema: schema });\n return makeTaskBuilder<\n TNewInput,\n TOutput,\n TDeps,\n TMeta,\n TTags,\n TMiddleware\n >(next);\n },\n\n resultSchema<TResolved>(schema: IValidationSchema<TResolved>) {\n const next = clone<\n TInput,\n TOutput,\n TDeps,\n TMeta,\n TTags,\n TMiddleware,\n TInput,\n Promise<TResolved>,\n TDeps,\n TMeta,\n TTags,\n TMiddleware\n >(state, { resultSchema: schema });\n return makeTaskBuilder<\n TInput,\n Promise<TResolved>,\n TDeps,\n TMeta,\n TTags,\n TMiddleware\n >(next);\n },\n\n run<TNewInput = TInput, TNewOutput extends Promise<any> = TOutput>(\n fn: NonNullable<\n ITaskDefinition<\n ResolveInput<TInput, TNewInput>,\n TNewOutput,\n TDeps,\n TMeta,\n TTags,\n TMiddleware\n >[\"run\"]\n >,\n ) {\n const wrapped = (input: unknown, deps: unknown) =>\n fn(\n input as ResolveInput<TInput, TNewInput>,\n deps as unknown as DependencyValuesType<TDeps>, // Dependencies are injected at runtime\n );\n\n const next = clone<\n TInput,\n TOutput,\n TDeps,\n TMeta,\n TTags,\n TMiddleware,\n ResolveInput<TInput, TNewInput>,\n TNewOutput,\n TDeps,\n TMeta,\n TTags,\n TMiddleware\n >(state, { run: wrapped });\n return makeTaskBuilder<\n ResolveInput<TInput, TNewInput>,\n TNewOutput,\n TDeps,\n TMeta,\n TTags,\n TMiddleware\n >(next);\n },\n\n meta<TNewMeta extends ITaskMeta>(m: TNewMeta) {\n const next = clone<\n TInput,\n TOutput,\n TDeps,\n TMeta,\n TTags,\n TMiddleware,\n TInput,\n TOutput,\n TDeps,\n TNewMeta,\n TTags,\n TMiddleware\n >(state, { meta: m });\n return makeTaskBuilder<\n TInput,\n TOutput,\n TDeps,\n TNewMeta,\n TTags,\n TMiddleware\n >(next);\n },\n\n throws(list: ThrowsList) {\n const next = clone(state, { throws: list });\n return makeTaskBuilder<TInput, TOutput, TDeps, TMeta, TTags, TMiddleware>(\n next,\n );\n },\n\n build() {\n const definition: ITaskDefinition<\n TInput,\n TOutput,\n TDeps,\n TMeta,\n TTags,\n TMiddleware\n > = {\n id: state.id,\n dependencies: state.dependencies,\n middleware: state.middleware,\n inputSchema: state.inputSchema,\n resultSchema: state.resultSchema,\n throws: state.throws,\n run: state.run as NonNullable<\n ITaskDefinition<\n TInput,\n TOutput,\n TDeps,\n TMeta,\n TTags,\n TMiddleware\n >[\"run\"]\n >,\n tags: state.tags,\n meta: state.meta,\n };\n\n const task = defineTask(definition);\n (task as { [symbolFilePath]?: string })[symbolFilePath] = state.filePath;\n return task;\n },\n };\n return builder;\n}\n","import type {\n DependencyMapType,\n IPhantomTask,\n ITaskMeta,\n IValidationSchema,\n TagType,\n TaskMiddlewareAttachmentType,\n} from \"../../../defs\";\nimport { symbolFilePath } from \"../../../defs\";\nimport type { ThrowsList } from \"../../../types/error\";\nimport { defineTask } from \"../../defineTask\";\nimport type { PhantomTaskFluentBuilder } from \"./phantom-builder.interface\";\nimport type { PhantomBuilderState } from \"./types\";\nimport { clone, mergeArray, mergeDependencies } from \"./utils\";\n\n/**\n * Creates a PhantomTaskFluentBuilder from the given state.\n * Each builder method returns a new builder with updated state.\n */\nexport function makePhantomTaskBuilder<\n TInput,\n TResolved,\n TDeps extends DependencyMapType,\n TMeta extends ITaskMeta,\n TTags extends TagType[],\n TMiddleware extends TaskMiddlewareAttachmentType[],\n>(\n state: PhantomBuilderState<\n TInput,\n TResolved,\n TDeps,\n TMeta,\n TTags,\n TMiddleware\n >,\n): PhantomTaskFluentBuilder<\n TInput,\n TResolved,\n TDeps,\n TMeta,\n TTags,\n TMiddleware\n> {\n const builder: PhantomTaskFluentBuilder<\n TInput,\n TResolved,\n TDeps,\n TMeta,\n TTags,\n TMiddleware\n > = {\n id: state.id,\n dependencies<TNewDeps extends DependencyMapType>(\n deps: TNewDeps | (() => TNewDeps),\n options?: { override?: boolean },\n ) {\n const override = options?.override ?? false;\n const nextDependencies = mergeDependencies<TDeps, TNewDeps>(\n state.dependencies as TDeps | (() => TDeps),\n deps,\n override,\n );\n\n const next = clone<\n TInput,\n TResolved,\n TDeps,\n TMeta,\n TTags,\n TMiddleware,\n TInput,\n TResolved,\n TDeps & TNewDeps,\n TMeta,\n TTags,\n TMiddleware\n >(state as unknown as PhantomBuilderState<any, any, any, any, any, any>, {\n dependencies: nextDependencies as unknown as TDeps & TNewDeps,\n });\n\n if (override) {\n return makePhantomTaskBuilder<\n TInput,\n TResolved,\n TNewDeps,\n TMeta,\n TTags,\n TMiddleware\n >(\n next as unknown as PhantomBuilderState<\n TInput,\n TResolved,\n TNewDeps,\n TMeta,\n TTags,\n TMiddleware\n >,\n );\n }\n return makePhantomTaskBuilder<\n TInput,\n TResolved,\n TDeps & TNewDeps,\n TMeta,\n TTags,\n TMiddleware\n >(next);\n },\n\n middleware<TNewMw extends TaskMiddlewareAttachmentType[]>(\n mw: TNewMw,\n options?: { override?: boolean },\n ) {\n const override = options?.override ?? false;\n const next = clone<\n TInput,\n TResolved,\n TDeps,\n TMeta,\n TTags,\n TMiddleware,\n TInput,\n TResolved,\n TDeps,\n TMeta,\n TTags,\n TNewMw\n >(state as unknown as PhantomBuilderState<any, any, any, any, any, any>, {\n middleware: mergeArray(state.middleware, mw, override) as TNewMw,\n });\n return makePhantomTaskBuilder<\n TInput,\n TResolved,\n TDeps,\n TMeta,\n TTags,\n TNewMw\n >(next);\n },\n\n tags<TNewTags extends TagType[]>(\n t: TNewTags,\n options?: { override?: boolean },\n ) {\n const override = options?.override ?? false;\n const next = clone<\n TInput,\n TResolved,\n TDeps,\n TMeta,\n TTags,\n TMiddleware,\n TInput,\n TResolved,\n TDeps,\n TMeta,\n [...TTags, ...TNewTags],\n TMiddleware\n >(state as unknown as PhantomBuilderState<any, any, any, any, any, any>, {\n tags: mergeArray(state.tags, t, override) as [...TTags, ...TNewTags],\n });\n return makePhantomTaskBuilder(\n next,\n ) as unknown as PhantomTaskFluentBuilder<\n TInput,\n TResolved,\n TDeps,\n TMeta,\n [...TTags, ...TNewTags],\n TMiddleware\n >;\n },\n\n inputSchema<TNewInput>(schema: IValidationSchema<TNewInput>) {\n const next = clone<\n TInput,\n TResolved,\n TDeps,\n TMeta,\n TTags,\n TMiddleware,\n TNewInput,\n TResolved,\n TDeps,\n TMeta,\n TTags,\n TMiddleware\n >(state as unknown as PhantomBuilderState<any, any, any, any, any, any>, {\n inputSchema: schema,\n });\n return makePhantomTaskBuilder<\n TNewInput,\n TResolved,\n TDeps,\n TMeta,\n TTags,\n TMiddleware\n >(next);\n },\n\n resultSchema<TNewResolved>(schema: IValidationSchema<TNewResolved>) {\n const next = clone<\n TInput,\n TResolved,\n TDeps,\n TMeta,\n TTags,\n TMiddleware,\n TInput,\n TNewResolved,\n TDeps,\n TMeta,\n TTags,\n TMiddleware\n >(state as unknown as PhantomBuilderState<any, any, any, any, any, any>, {\n resultSchema: schema,\n });\n return makePhantomTaskBuilder<\n TInput,\n TNewResolved,\n TDeps,\n TMeta,\n TTags,\n TMiddleware\n >(next);\n },\n\n meta<TNewMeta extends ITaskMeta>(m: TNewMeta) {\n const next = clone<\n TInput,\n TResolved,\n TDeps,\n TMeta,\n TTags,\n TMiddleware,\n TInput,\n TResolved,\n TDeps,\n TNewMeta,\n TTags,\n TMiddleware\n >(state as unknown as PhantomBuilderState<any, any, any, any, any, any>, {\n meta: m,\n });\n return makePhantomTaskBuilder<\n TInput,\n TResolved,\n TDeps,\n TNewMeta,\n TTags,\n TMiddleware\n >(next);\n },\n\n throws(list: ThrowsList) {\n const next = clone(\n state as unknown as PhantomBuilderState<any, any, any, any, any, any>,\n { throws: list },\n );\n return makePhantomTaskBuilder<\n TInput,\n TResolved,\n TDeps,\n TMeta,\n TTags,\n TMiddleware\n >(next);\n },\n\n build() {\n const built = defineTask.phantom({\n id: state.id,\n dependencies: state.dependencies,\n middleware: state.middleware,\n inputSchema: state.inputSchema,\n resultSchema: state.resultSchema,\n throws: state.throws,\n meta: state.meta,\n tags: state.tags,\n });\n\n (built as { [symbolFilePath]?: string })[symbolFilePath] = state.filePath;\n return built as IPhantomTask<\n TInput,\n TResolved,\n TDeps,\n TMeta,\n TTags,\n TMiddleware\n >;\n },\n };\n return builder;\n}\n","import type {\n ITaskMeta,\n TagType,\n TaskMiddlewareAttachmentType,\n} from \"../../../defs\";\nimport { getCallerFile } from \"../../../tools/getCallerFile\";\nimport { makeTaskBuilder } from \"./fluent-builder\";\nimport type { TaskFluentBuilder } from \"./fluent-builder.interface\";\nimport { makePhantomTaskBuilder } from \"./phantom-builder\";\nimport type { PhantomTaskFluentBuilder } from \"./phantom-builder.interface\";\nimport type { BuilderState, PhantomBuilderState } from \"./types\";\n\nexport * from \"./fluent-builder.interface\";\nexport * from \"./fluent-builder\";\nexport * from \"./phantom-builder.interface\";\nexport * from \"./phantom-builder\";\nexport * from \"./types\";\n\n/**\n * Entry point for creating a task builder.\n */\nexport function taskBuilder(\n id: string,\n): TaskFluentBuilder<\n undefined,\n Promise<any>,\n {},\n ITaskMeta,\n TagType[],\n TaskMiddlewareAttachmentType[]\n> {\n const filePath = getCallerFile();\n const initial: BuilderState<\n undefined,\n Promise<any>,\n {},\n ITaskMeta,\n TagType[],\n TaskMiddlewareAttachmentType[]\n > = Object.freeze({\n id,\n filePath,\n dependencies: {} as {},\n middleware: [] as TaskMiddlewareAttachmentType[],\n meta: {} as ITaskMeta,\n tags: [] as TagType[],\n });\n\n return makeTaskBuilder(initial);\n}\n\n/**\n * Entry point for creating a phantom task builder.\n */\nexport function phantomTaskBuilder<TInput = undefined, TResolved = any>(\n id: string,\n): PhantomTaskFluentBuilder<\n TInput,\n TResolved,\n {},\n ITaskMeta,\n TagType[],\n TaskMiddlewareAttachmentType[]\n> {\n const filePath = getCallerFile();\n const initial: PhantomBuilderState<\n TInput,\n TResolved,\n {},\n ITaskMeta,\n TagType[],\n TaskMiddlewareAttachmentType[]\n > = Object.freeze({\n id,\n filePath,\n dependencies: {} as {},\n middleware: [] as TaskMiddlewareAttachmentType[],\n meta: {} as ITaskMeta,\n tags: [] as TagType[],\n });\n\n return makePhantomTaskBuilder(initial);\n}\n\nexport interface TaskBuilderWithPhantom {\n (\n id: string,\n ): TaskFluentBuilder<\n undefined,\n Promise<any>,\n {},\n ITaskMeta,\n TagType[],\n TaskMiddlewareAttachmentType[]\n >;\n phantom: typeof phantomTaskBuilder;\n}\n\nexport const task: TaskBuilderWithPhantom = Object.assign(taskBuilder, {\n phantom: phantomTaskBuilder,\n});\n","import type { BuilderState } from \"./types\";\n\n/**\n * Clones and patches the builder state immutably.\n */\nexport function clone<TPayload>(\n s: BuilderState<TPayload>,\n patch: Partial<BuilderState<TPayload>>,\n): BuilderState<TPayload> {\n return Object.freeze({\n ...s,\n ...patch,\n });\n}\n\n/**\n * Generic array merge with override support.\n */\nexport function mergeArray<T>(\n existing: ReadonlyArray<T> | undefined,\n addition: ReadonlyArray<T>,\n override: boolean,\n): T[] {\n const toArray = [...addition];\n if (override || !existing) {\n return toArray;\n }\n return [...existing, ...toArray];\n}\n","import type {\n IEventDefinition,\n IEventMeta,\n IValidationSchema,\n TagType,\n} from \"../../../defs\";\nimport { symbolFilePath } from \"../../../defs\";\nimport { defineEvent } from \"../../defineEvent\";\nimport type { EventFluentBuilder } from \"./fluent-builder.interface\";\nimport type { BuilderState } from \"./types\";\nimport { clone, mergeArray } from \"./utils\";\n\n/**\n * Creates an EventFluentBuilder from the given state.\n * Each builder method returns a new builder with updated state.\n */\nexport function makeEventBuilder<TPayload>(\n state: BuilderState<TPayload>,\n): EventFluentBuilder<TPayload> {\n const builder: EventFluentBuilder<TPayload> = {\n id: state.id,\n\n payloadSchema<TNew>(schema: IValidationSchema<TNew>) {\n // Cast state to target type for widening, then assign the schema\n const next = clone(state as unknown as BuilderState<TNew>, {\n payloadSchema: schema,\n });\n return makeEventBuilder<TNew>(next);\n },\n\n tags<TNewTags extends TagType[]>(\n t: TNewTags,\n options?: { override?: boolean },\n ) {\n const override = options?.override ?? false;\n const next = clone(state, {\n tags: mergeArray(state.tags, t, override) as TagType[],\n });\n return makeEventBuilder<TPayload>(next);\n },\n\n meta<TNewMeta extends IEventMeta>(m: TNewMeta) {\n const next = clone(state, { meta: m as IEventMeta });\n return makeEventBuilder<TPayload>(next);\n },\n\n parallel(enabled = true) {\n const next = clone(state, { parallel: enabled });\n return makeEventBuilder<TPayload>(next);\n },\n\n build() {\n const event = defineEvent({\n ...(state as unknown as IEventDefinition<TPayload>),\n });\n (event as { [symbolFilePath]?: string })[symbolFilePath] = state.filePath;\n return event;\n },\n };\n\n return builder;\n}\n","import type { TagType } from \"../../../defs\";\nimport { getCallerFile } from \"../../../tools/getCallerFile\";\nimport { makeEventBuilder } from \"./fluent-builder\";\nimport type { EventFluentBuilder } from \"./fluent-builder.interface\";\nimport type { BuilderState } from \"./types\";\n\nexport * from \"./fluent-builder.interface\";\nexport * from \"./fluent-builder\";\nexport * from \"./types\";\nexport * from \"./utils\";\n\n/**\n * Entry point for creating an event builder.\n */\nexport function eventBuilder<TPayload = void>(\n id: string,\n): EventFluentBuilder<TPayload> {\n const filePath = getCallerFile();\n const initial: BuilderState<TPayload> = Object.freeze({\n id,\n filePath,\n meta: {} as BuilderState<TPayload>[\"meta\"],\n payloadSchema: undefined,\n tags: [] as TagType[],\n parallel: undefined,\n });\n\n return makeEventBuilder(initial);\n}\n\nexport const event = eventBuilder;\n","import type {\n DependencyMapType,\n IEventDefinition,\n ITaskMeta,\n} from \"../../../defs\";\nimport type { BuilderState } from \"./types\";\n\n/**\n * Clones and patches the builder state immutably.\n */\nexport function clone<\n TDeps extends DependencyMapType,\n TOn extends\n | \"*\"\n | IEventDefinition<any>\n | readonly IEventDefinition<any>[]\n | undefined,\n TMeta extends ITaskMeta,\n TNextDeps extends DependencyMapType = TDeps,\n TNextOn extends\n | \"*\"\n | IEventDefinition<any>\n | readonly IEventDefinition<any>[]\n | undefined = TOn,\n TNextMeta extends ITaskMeta = TMeta,\n>(\n s: BuilderState<TDeps, TOn, TMeta>,\n patch: Partial<BuilderState<TNextDeps, TNextOn, TNextMeta>>,\n): BuilderState<TNextDeps, TNextOn, TNextMeta> {\n type NextState = BuilderState<TNextDeps, TNextOn, TNextMeta>;\n return Object.freeze({\n ...(s as unknown as NextState),\n ...patch,\n }) as NextState;\n}\n\n/**\n * Generic array merge with override support.\n */\nexport function mergeArray<T>(\n existing: ReadonlyArray<T> | undefined,\n addition: ReadonlyArray<T>,\n override: boolean,\n): T[] {\n const toArray = [...addition];\n if (override || !existing) {\n return toArray;\n }\n return [...existing, ...toArray];\n}\n\n/**\n * Merges dependencies handling all combinations of objects and functions.\n */\nexport function mergeDependencies<\n TExisting extends DependencyMapType,\n TNew extends DependencyMapType,\n>(\n existing: TExisting | (() => TExisting) | undefined,\n addition: TNew | (() => TNew),\n override: boolean,\n): (TExisting & TNew) | (() => TExisting & TNew) {\n const isFnExisting = typeof existing === \"function\";\n const isFnAddition = typeof addition === \"function\";\n\n type Result = (TExisting & TNew) | (() => TExisting & TNew);\n\n if (override || !existing) {\n return addition as unknown as Result;\n }\n\n if (isFnExisting && isFnAddition) {\n const e = existing as () => TExisting;\n const a = addition as () => TNew;\n return (() => ({\n ...e(),\n ...a(),\n })) as Result;\n }\n if (isFnExisting && !isFnAddition) {\n const e = existing as () => TExisting;\n const a = addition as TNew;\n return (() => ({\n ...e(),\n ...a,\n })) as Result;\n }\n if (!isFnExisting && isFnAddition) {\n const e = existing as TExisting;\n const a = addition as () => TNew;\n return (() => ({\n ...e,\n ...a(),\n })) as Result;\n }\n const e = existing as TExisting;\n const a = addition as TNew;\n return { ...e, ...a } as Result;\n}\n","import type {\n DependencyMapType,\n IEventDefinition,\n IHook,\n IHookDefinition,\n ITaskMeta,\n TagType,\n} from \"../../../defs\";\nimport { symbolFilePath } from \"../../../defs\";\nimport { builderIncompleteError } from \"../../../errors\";\nimport { defineHook } from \"../../defineHook\";\nimport type { HookFluentBuilder } from \"./fluent-builder.interface\";\nimport type { BuilderState } from \"./types\";\nimport { clone, mergeArray, mergeDependencies } from \"./utils\";\n\n/**\n * Creates a HookFluentBuilder from the given state.\n * Each builder method returns a new builder with updated state.\n */\nexport function makeHookBuilder<\n TDeps extends DependencyMapType,\n TOn extends\n | \"*\"\n | IEventDefinition<any>\n | readonly IEventDefinition<any>[]\n | undefined,\n TMeta extends ITaskMeta,\n>(\n state: BuilderState<TDeps, TOn, TMeta>,\n): HookFluentBuilder<TDeps, TOn, TMeta> {\n const builder: HookFluentBuilder<TDeps, TOn, TMeta> = {\n id: state.id,\n\n on<\n TNewOn extends\n | \"*\"\n | IEventDefinition<any>\n | readonly IEventDefinition<any>[],\n >(on: TNewOn) {\n const next = clone<TDeps, TOn, TMeta, TDeps, TNewOn, TMeta>(state, {\n on: on as TNewOn,\n });\n return makeHookBuilder<TDeps, TNewOn, TMeta>(next);\n },\n\n order(order: number) {\n const next = clone(state, { order });\n return makeHookBuilder<TDeps, TOn, TMeta>(next);\n },\n\n dependencies<TNewDeps extends DependencyMapType>(\n deps: TNewDeps | (() => TNewDeps),\n options?: { override?: boolean },\n ) {\n const override = options?.override ?? false;\n const nextDependencies = mergeDependencies<TDeps, TNewDeps>(\n state.dependencies as TDeps | (() => TDeps),\n deps,\n override,\n );\n\n const next = clone<TDeps, TOn, TMeta, TDeps & TNewDeps, TOn, TMeta>(\n state as BuilderState<TDeps, TOn, TMeta>,\n {\n dependencies: nextDependencies as unknown as TDeps & TNewDeps,\n },\n );\n\n if (override) {\n return makeHookBuilder<TNewDeps, TOn, TMeta>(\n next as unknown as BuilderState<TNewDeps, TOn, TMeta>,\n );\n }\n return makeHookBuilder<TDeps & TNewDeps, TOn, TMeta>(next);\n },\n\n tags<TNewTags extends TagType[]>(\n t: TNewTags,\n options?: { override?: boolean },\n ) {\n const override = options?.override ?? false;\n const next = clone(state, {\n tags: mergeArray(state.tags, t, override) as TagType[],\n });\n return makeHookBuilder<TDeps, TOn, TMeta>(next);\n },\n\n meta<TNewMeta extends ITaskMeta>(m: TNewMeta) {\n const next = clone<TDeps, TOn, TMeta, TDeps, TOn, TNewMeta>(\n state as BuilderState<TDeps, TOn, TMeta>,\n {\n meta: m as TNewMeta,\n },\n );\n return makeHookBuilder<TDeps, TOn, TNewMeta>(next);\n },\n\n run(fn) {\n const next = clone(state, { run: fn as NonNullable<typeof state.run> });\n return makeHookBuilder<TDeps, TOn, TMeta>(next);\n },\n\n build() {\n // Fail-fast: validate required fields before creating hook\n const missingFields: string[] = [];\n if (state.on === undefined) {\n missingFields.push(\"on\");\n }\n if (state.run === undefined) {\n missingFields.push(\"run\");\n }\n if (missingFields.length > 0) {\n builderIncompleteError.throw({\n type: \"hook\",\n builderId: state.id,\n missingFields,\n message: `Hook \"${state.id}\" is incomplete`,\n });\n }\n\n const hook = defineHook({\n ...(state as unknown as IHookDefinition<TDeps, any, TMeta>),\n });\n (hook as { [symbolFilePath]?: string })[symbolFilePath] = state.filePath;\n // Runtime validation guarantees TOn is valid\n return hook as IHook<TDeps, any, TMeta>;\n },\n };\n\n return builder;\n}\n","import type { ITaskMeta, TagType } from \"../../../defs\";\nimport { getCallerFile } from \"../../../tools/getCallerFile\";\nimport { makeHookBuilder } from \"./fluent-builder\";\nimport type { HookFluentBuilder } from \"./fluent-builder.interface\";\nimport type { BuilderState } from \"./types\";\n\nexport * from \"./fluent-builder.interface\";\nexport * from \"./fluent-builder\";\nexport * from \"./types\";\nexport * from \"./utils\";\n\n/**\n * Entry point for creating a hook builder.\n * Requires calling .on() and .run() before .build().\n */\nexport function hookBuilder(\n id: string,\n): HookFluentBuilder<{}, undefined, ITaskMeta> {\n const filePath = getCallerFile();\n const initial: BuilderState<{}, undefined, ITaskMeta> = Object.freeze({\n id,\n filePath,\n dependencies: {} as {},\n on: undefined,\n order: 0,\n meta: {} as ITaskMeta,\n run: undefined,\n tags: [] as TagType[],\n });\n\n return makeHookBuilder(initial);\n}\n\nexport const hook = hookBuilder;\n","import type { DependencyMapType } from \"../../../defs\";\nimport type { TaskMwState, ResMwState } from \"./types\";\n\n/**\n * Clones and patches the Task middleware state immutably.\n */\nexport function cloneTask<C, In, Out, D extends DependencyMapType>(\n s: TaskMwState<C, In, Out, D>,\n patch: Partial<TaskMwState<C, In, Out, D>>,\n): TaskMwState<C, In, Out, D> {\n return Object.freeze({\n ...s,\n ...patch,\n });\n}\n\n/**\n * Clones and patches the Resource middleware state immutably.\n */\nexport function cloneRes<C, In, Out, D extends DependencyMapType>(\n s: ResMwState<C, In, Out, D>,\n patch: Partial<ResMwState<C, In, Out, D>>,\n): ResMwState<C, In, Out, D> {\n return Object.freeze({\n ...s,\n ...patch,\n });\n}\n\n/**\n * Generic array merge with override support.\n */\nexport function mergeArray<T>(\n existing: ReadonlyArray<T> | undefined,\n addition: ReadonlyArray<T>,\n override: boolean,\n): T[] {\n const toArray = [...addition];\n if (override || !existing) {\n return toArray;\n }\n return [...existing, ...toArray];\n}\n\n/**\n * Merges dependencies handling all combinations of objects and functions.\n */\nexport function mergeDependencies<\n C,\n TExisting extends DependencyMapType,\n TNew extends DependencyMapType,\n>(\n existing: TExisting | ((config: C) => TExisting) | undefined,\n addition: TNew | ((config: C) => TNew),\n override: boolean,\n): (TExisting & TNew) | ((config: C) => TExisting & TNew) {\n const isFnExisting = typeof existing === \"function\";\n const isFnAddition = typeof addition === \"function\";\n\n type Result = (TExisting & TNew) | ((config: C) => TExisting & TNew);\n\n if (override || !existing) {\n return addition as unknown as Result;\n }\n\n if (isFnExisting && isFnAddition) {\n const e = existing as (config: C) => TExisting;\n const a = addition as (config: C) => TNew;\n return ((config: C) => ({\n ...e(config),\n ...a(config),\n })) as Result;\n }\n if (isFnExisting && !isFnAddition) {\n const e = existing as (config: C) => TExisting;\n const a = addition as TNew;\n return ((config: C) => ({\n ...e(config),\n ...a,\n })) as Result;\n }\n if (!isFnExisting && isFnAddition) {\n const e = existing as TExisting;\n const a = addition as (config: C) => TNew;\n return ((config: C) => ({\n ...e,\n ...a(config),\n })) as Result;\n }\n const e = existing as TExisting;\n const a = addition as TNew;\n return { ...e, ...a } as Result;\n}\n","import type {\n DependencyMapType,\n ITaskMiddlewareDefinition,\n IValidationSchema,\n IMiddlewareMeta,\n TagType,\n} from \"../../../defs\";\nimport { symbolFilePath } from \"../../../defs\";\nimport { builderIncompleteError } from \"../../../errors\";\nimport { defineTaskMiddleware } from \"../../defineTaskMiddleware\";\nimport type { TaskMiddlewareFluentBuilder } from \"./task.interface\";\nimport type { TaskMwState } from \"./types\";\nimport { cloneTask, mergeArray, mergeDependencies } from \"./utils\";\n\n/**\n * Creates a TaskMiddlewareFluentBuilder from the given state.\n */\nexport function makeTaskMiddlewareBuilder<\n C,\n In,\n Out,\n D extends DependencyMapType,\n>(\n state: TaskMwState<C, In, Out, D>,\n): TaskMiddlewareFluentBuilder<C, In, Out, D> {\n const builder: TaskMiddlewareFluentBuilder<C, In, Out, D> = {\n id: state.id,\n\n dependencies<TNewDeps extends DependencyMapType>(\n deps: TNewDeps | ((config: C) => TNewDeps),\n options?: { override?: boolean },\n ) {\n const override = options?.override ?? false;\n const nextDependencies = mergeDependencies<C, D, TNewDeps>(\n state.dependencies as D | ((config: C) => D),\n deps,\n override,\n );\n\n const next = cloneTask<C, In, Out, D & TNewDeps>(\n state as unknown as TaskMwState<C, In, Out, D & TNewDeps>,\n {\n dependencies: nextDependencies as unknown as D & TNewDeps,\n },\n );\n\n if (override) {\n return makeTaskMiddlewareBuilder<C, In, Out, TNewDeps>(\n next as unknown as TaskMwState<C, In, Out, TNewDeps>,\n );\n }\n return makeTaskMiddlewareBuilder<C, In, Out, D & TNewDeps>(next);\n },\n\n configSchema<TNew>(schema: IValidationSchema<TNew>) {\n const next = cloneTask<TNew, In, Out, D>(\n state as unknown as TaskMwState<TNew, In, Out, D>,\n {\n configSchema: schema as unknown as TaskMwState<\n TNew,\n In,\n Out,\n D\n >[\"configSchema\"],\n },\n );\n return makeTaskMiddlewareBuilder<TNew, In, Out, D>(next);\n },\n\n run(fn) {\n const next = cloneTask(state, { run: fn as typeof state.run });\n return makeTaskMiddlewareBuilder<C, In, Out, D>(next);\n },\n\n meta<TNewMeta extends IMiddlewareMeta>(m: TNewMeta) {\n const next = cloneTask(state, { meta: m as IMiddlewareMeta });\n return makeTaskMiddlewareBuilder<C, In, Out, D>(next);\n },\n\n tags<TNewTags extends TagType[]>(\n t: TNewTags,\n options?: { override?: boolean },\n ) {\n const override = options?.override ?? false;\n const next = cloneTask(state, {\n tags: mergeArray(state.tags, t, override) as TagType[],\n });\n return makeTaskMiddlewareBuilder<C, In, Out, D>(next);\n },\n\n everywhere(flag) {\n const next = cloneTask(state, { everywhere: flag });\n return makeTaskMiddlewareBuilder<C, In, Out, D>(next);\n },\n\n build() {\n // Fail-fast: validate required fields before creating middleware\n if (state.run === undefined) {\n builderIncompleteError.throw({\n type: \"task-middleware\",\n builderId: state.id,\n missingFields: [\"run\"],\n message: `Task middleware \"${state.id}\" is incomplete`,\n });\n }\n\n const middleware = defineTaskMiddleware({\n ...(state as unknown as ITaskMiddlewareDefinition<C, In, Out, D>),\n });\n (middleware as { [symbolFilePath]?: string })[symbolFilePath] =\n state.filePath;\n return middleware;\n },\n };\n\n return builder;\n}\n","import type {\n DependencyMapType,\n IResourceMiddlewareDefinition,\n IValidationSchema,\n IMiddlewareMeta,\n TagType,\n} from \"../../../defs\";\nimport { symbolFilePath } from \"../../../defs\";\nimport { builderIncompleteError } from \"../../../errors\";\nimport { defineResourceMiddleware } from \"../../defineResourceMiddleware\";\nimport type { ResourceMiddlewareFluentBuilder } from \"./resource.interface\";\nimport type { ResMwState } from \"./types\";\nimport { cloneRes, mergeArray, mergeDependencies } from \"./utils\";\n\n/**\n * Creates a ResourceMiddlewareFluentBuilder from the given state.\n */\nexport function makeResourceMiddlewareBuilder<\n C,\n In,\n Out,\n D extends DependencyMapType,\n>(\n state: ResMwState<C, In, Out, D>,\n): ResourceMiddlewareFluentBuilder<C, In, Out, D> {\n const builder: ResourceMiddlewareFluentBuilder<C, In, Out, D> = {\n id: state.id,\n\n dependencies<TNewDeps extends DependencyMapType>(\n deps: TNewDeps | ((config: C) => TNewDeps),\n options?: { override?: boolean },\n ) {\n const override = options?.override ?? false;\n const nextDependencies = mergeDependencies<C, D, TNewDeps>(\n state.dependencies as D | ((config: C) => D),\n deps,\n override,\n );\n\n const next = cloneRes<C, In, Out, D & TNewDeps>(\n state as unknown as ResMwState<C, In, Out, D & TNewDeps>,\n {\n dependencies: nextDependencies as unknown as D & TNewDeps,\n },\n );\n\n if (override) {\n return makeResourceMiddlewareBuilder<C, In, Out, TNewDeps>(\n next as unknown as ResMwState<C, In, Out, TNewDeps>,\n );\n }\n return makeResourceMiddlewareBuilder<C, In, Out, D & TNewDeps>(next);\n },\n\n configSchema<TNew>(schema: IValidationSchema<TNew>) {\n const next = cloneRes<TNew, In, Out, D>(\n state as unknown as ResMwState<TNew, In, Out, D>,\n {\n configSchema: schema as unknown as ResMwState<\n TNew,\n In,\n Out,\n D\n >[\"configSchema\"],\n },\n );\n return makeResourceMiddlewareBuilder<TNew, In, Out, D>(next);\n },\n\n run(fn) {\n const next = cloneRes(state, { run: fn as typeof state.run });\n return makeResourceMiddlewareBuilder<C, In, Out, D>(next);\n },\n\n meta<TNewMeta extends IMiddlewareMeta>(m: TNewMeta) {\n const next = cloneRes(state, { meta: m as IMiddlewareMeta });\n return makeResourceMiddlewareBuilder<C, In, Out, D>(next);\n },\n\n tags<TNewTags extends TagType[]>(\n t: TNewTags,\n options?: { override?: boolean },\n ) {\n const override = options?.override ?? false;\n const next = cloneRes(state, {\n tags: mergeArray(state.tags, t, override) as TagType[],\n });\n return makeResourceMiddlewareBuilder<C, In, Out, D>(next);\n },\n\n everywhere(flag) {\n const next = cloneRes(state, { everywhere: flag });\n return makeResourceMiddlewareBuilder<C, In, Out, D>(next);\n },\n\n build() {\n // Fail-fast: validate required fields before creating middleware\n if (state.run === undefined) {\n builderIncompleteError.throw({\n type: \"resource-middleware\",\n builderId: state.id,\n missingFields: [\"run\"],\n message: `Resource middleware \"${state.id}\" is incomplete`,\n });\n }\n\n const middleware = defineResourceMiddleware({\n ...(state as unknown as IResourceMiddlewareDefinition<C, In, Out, D>),\n });\n (middleware as { [symbolFilePath]?: string })[symbolFilePath] =\n state.filePath;\n return middleware;\n },\n };\n\n return builder;\n}\n","import type {\n DependencyMapType,\n IMiddlewareMeta,\n TagType,\n} from \"../../../defs\";\nimport { getCallerFile } from \"../../../tools/getCallerFile\";\nimport { makeTaskMiddlewareBuilder } from \"./task\";\nimport type { TaskMiddlewareFluentBuilder } from \"./task.interface\";\nimport { makeResourceMiddlewareBuilder } from \"./resource\";\nimport type { ResourceMiddlewareFluentBuilder } from \"./resource.interface\";\nimport type { TaskMwState, ResMwState } from \"./types\";\n\nexport * from \"./task.interface\";\nexport * from \"./resource.interface\";\nexport * from \"./task\";\nexport * from \"./resource\";\nexport * from \"./types\";\nexport * from \"./utils\";\n\n/**\n * Entry point for creating a task middleware builder.\n */\nexport function taskMiddlewareBuilder<\n C = void,\n In = void,\n Out = void,\n D extends DependencyMapType = {},\n>(id: string): TaskMiddlewareFluentBuilder<C, In, Out, D> {\n const filePath = getCallerFile();\n const initial: TaskMwState<C, In, Out, D> = Object.freeze({\n id,\n filePath,\n dependencies: {} as D,\n configSchema: undefined as unknown as TaskMwState<\n C,\n In,\n Out,\n D\n >[\"configSchema\"],\n run: undefined as unknown as TaskMwState<C, In, Out, D>[\"run\"],\n meta: {} as IMiddlewareMeta,\n tags: [] as TagType[],\n everywhere: undefined as unknown as TaskMwState<\n C,\n In,\n Out,\n D\n >[\"everywhere\"],\n });\n\n return makeTaskMiddlewareBuilder(initial);\n}\n\n/**\n * Entry point for creating a resource middleware builder.\n */\nexport function resourceMiddlewareBuilder<\n C = void,\n In = void,\n Out = void,\n D extends DependencyMapType = {},\n>(id: string): ResourceMiddlewareFluentBuilder<C, In, Out, D> {\n const filePath = getCallerFile();\n const initial: ResMwState<C, In, Out, D> = Object.freeze({\n id,\n filePath,\n dependencies: {} as D,\n configSchema: undefined as unknown as ResMwState<\n C,\n In,\n Out,\n D\n >[\"configSchema\"],\n run: undefined as unknown as ResMwState<C, In, Out, D>[\"run\"],\n meta: {} as IMiddlewareMeta,\n tags: [] as TagType[],\n everywhere: undefined as unknown as ResMwState<C, In, Out, D>[\"everywhere\"],\n });\n\n return makeResourceMiddlewareBuilder(initial);\n}\n\nexport const taskMiddleware = taskMiddlewareBuilder;\nexport const resourceMiddleware = resourceMiddlewareBuilder;\n","import type { BuilderState } from \"./types\";\n\n/**\n * Clones and patches the builder state immutably.\n */\nexport function clone<TConfig, TEnforceIn, TEnforceOut, TNextConfig = TConfig>(\n s: BuilderState<TConfig, TEnforceIn, TEnforceOut>,\n patch: Partial<BuilderState<TNextConfig, TEnforceIn, TEnforceOut>>,\n): BuilderState<TNextConfig, TEnforceIn, TEnforceOut> {\n return Object.freeze({\n ...(s as unknown as BuilderState<TNextConfig, TEnforceIn, TEnforceOut>),\n ...patch,\n });\n}\n","import type { ITagMeta, IValidationSchema } from \"../../../defs\";\nimport { symbolFilePath } from \"../../../defs\";\nimport { defineTag } from \"../../defineTag\";\nimport type { TagFluentBuilder } from \"./fluent-builder.interface\";\nimport type { BuilderState } from \"./types\";\nimport { clone } from \"./utils\";\n\n/**\n * Creates a TagFluentBuilder from the given state.\n */\nexport function makeTagBuilder<TConfig, TEnforceIn, TEnforceOut>(\n state: BuilderState<TConfig, TEnforceIn, TEnforceOut>,\n): TagFluentBuilder<TConfig, TEnforceIn, TEnforceOut> {\n const builder: TagFluentBuilder<TConfig, TEnforceIn, TEnforceOut> = {\n id: state.id,\n\n meta(m: ITagMeta) {\n const next = clone(state, { meta: m });\n return makeTagBuilder(next);\n },\n\n configSchema<TNewConfig>(schema: IValidationSchema<TNewConfig>) {\n const next = clone(state, {\n configSchema: schema,\n }) as unknown as BuilderState<TNewConfig, TEnforceIn, TEnforceOut>;\n return makeTagBuilder(next);\n },\n\n config<TNewConfig>(config: TNewConfig) {\n const next = clone(state, { config }) as unknown as BuilderState<\n TNewConfig,\n TEnforceIn,\n TEnforceOut\n >;\n return makeTagBuilder(next);\n },\n\n build() {\n const tag = defineTag<TConfig, TEnforceIn, TEnforceOut>({\n id: state.id,\n meta: state.meta,\n configSchema: state.configSchema as IValidationSchema<TConfig>,\n config: state.config as TConfig,\n });\n (tag as { [symbolFilePath]?: string })[symbolFilePath] = state.filePath;\n return tag;\n },\n };\n\n return builder;\n}\n","import { getCallerFile } from \"../../../tools/getCallerFile\";\nimport { makeTagBuilder } from \"./fluent-builder\";\nimport type { TagFluentBuilder } from \"./fluent-builder.interface\";\nimport type { BuilderState } from \"./types\";\n\nexport * from \"./fluent-builder.interface\";\nexport * from \"./fluent-builder\";\nexport * from \"./types\";\nexport * from \"./utils\";\n\n/**\n * Entry point for creating a tag builder.\n */\nexport function tagBuilder<\n TConfig = void,\n TEnforceIn = void,\n TEnforceOut = void,\n>(id: string): TagFluentBuilder<TConfig, TEnforceIn, TEnforceOut> {\n const filePath = getCallerFile();\n const initial: BuilderState<TConfig, TEnforceIn, TEnforceOut> = Object.freeze(\n {\n id,\n filePath,\n meta: {} as BuilderState<TConfig, TEnforceIn, TEnforceOut>[\"meta\"],\n configSchema: undefined as BuilderState<\n TConfig,\n TEnforceIn,\n TEnforceOut\n >[\"configSchema\"],\n config: undefined as BuilderState<\n TConfig,\n TEnforceIn,\n TEnforceOut\n >[\"config\"],\n },\n );\n\n return makeTagBuilder(initial);\n}\n\nexport const tag = tagBuilder;\n","import type { BuilderState } from \"./types\";\n\n/**\n * Clones and patches the builder state immutably.\n */\nexport function clone<T>(\n s: BuilderState<T>,\n patch: Partial<BuilderState<T>>,\n): BuilderState<T> {\n return Object.freeze({\n ...s,\n ...patch,\n });\n}\n","import type { IAsyncContextDefinition, IAsyncContextMeta } from \"../../../defs\";\nimport { defineAsyncContext } from \"../../defineAsyncContext\";\nimport type { AsyncContextFluentBuilder } from \"./fluent-builder.interface\";\nimport type { BuilderState } from \"./types\";\nimport { clone } from \"./utils\";\n\n/**\n * Creates an AsyncContextFluentBuilder from the given state.\n */\nexport function makeAsyncContextBuilder<T>(\n state: BuilderState<T>,\n): AsyncContextFluentBuilder<T> {\n const builder: AsyncContextFluentBuilder<T> = {\n id: state.id,\n\n serialize(fn) {\n const next = clone(state, { serialize: fn });\n return makeAsyncContextBuilder(next);\n },\n\n parse(fn) {\n const next = clone(state, { parse: fn });\n return makeAsyncContextBuilder(next);\n },\n\n configSchema(schema) {\n const next = clone(state, { configSchema: schema });\n return makeAsyncContextBuilder(next);\n },\n\n meta<TNewMeta extends IAsyncContextMeta>(m: TNewMeta) {\n const next = clone(state, { meta: m });\n return makeAsyncContextBuilder(next);\n },\n\n build() {\n const def: IAsyncContextDefinition<T> = {\n id: state.id,\n serialize: state.serialize,\n parse: state.parse,\n configSchema: state.configSchema,\n meta: state.meta,\n };\n return defineAsyncContext<T>(def, state.filePath);\n },\n };\n\n return builder;\n}\n","import type { IAsyncContextMeta } from \"../../../defs\";\nimport { getCallerFile } from \"../../../tools/getCallerFile\";\nimport { makeAsyncContextBuilder } from \"./fluent-builder\";\nimport type { AsyncContextFluentBuilder } from \"./fluent-builder.interface\";\nimport type { BuilderState } from \"./types\";\n\nexport * from \"./fluent-builder.interface\";\nexport * from \"./fluent-builder\";\nexport * from \"./types\";\nexport * from \"./utils\";\n\n/**\n * Entry point for creating an async context builder.\n */\nexport function asyncContextBuilder<T = unknown>(\n id: string,\n): AsyncContextFluentBuilder<T> {\n const filePath = getCallerFile();\n const initial: BuilderState<T> = Object.freeze({\n id,\n filePath,\n serialize: undefined,\n parse: undefined,\n configSchema: undefined,\n meta: {} as IAsyncContextMeta,\n });\n\n return makeAsyncContextBuilder(initial);\n}\n\nexport const asyncContext = asyncContextBuilder;\n","import type {\n DependencyMapType,\n IEventDefinition,\n IHook,\n IHookDefinition,\n ITaskMeta,\n TagType,\n} from \"../../../defs\";\nimport { defineOverride } from \"../../defineOverride\";\nimport { mergeArray, mergeDependencies } from \"../hook/utils\";\n\nexport type HookOn =\n | \"*\"\n | IEventDefinition<any>\n | readonly IEventDefinition<any>[];\n\nexport interface HookOverrideBuilder<\n TDeps extends DependencyMapType,\n TOn extends HookOn,\n TMeta extends ITaskMeta,\n> {\n id: string;\n order(order: number): HookOverrideBuilder<TDeps, TOn, TMeta>;\n dependencies<\n TNewDeps extends DependencyMapType,\n TIsOverride extends boolean = false,\n >(\n deps: TNewDeps | (() => TNewDeps),\n options?: { override?: TIsOverride },\n ): HookOverrideBuilder<\n TIsOverride extends true ? TNewDeps : TDeps & TNewDeps,\n TOn,\n TMeta\n >;\n tags<TNewTags extends TagType[]>(\n t: TNewTags,\n options?: { override?: boolean },\n ): HookOverrideBuilder<TDeps, TOn, TMeta>;\n meta<TNewMeta extends ITaskMeta>(\n m: TNewMeta,\n ): HookOverrideBuilder<TDeps, TOn, TNewMeta>;\n run(\n fn: IHookDefinition<TDeps, TOn, TMeta>[\"run\"],\n ): HookOverrideBuilder<TDeps, TOn, TMeta>;\n build(): IHook<TDeps, TOn, TMeta>;\n}\n\ntype HookOverrideState<\n TDeps extends DependencyMapType,\n TOn extends HookOn,\n TMeta extends ITaskMeta,\n> = Readonly<IHookDefinition<TDeps, TOn, TMeta>>;\n\ntype AnyHook = IHook<any, any, any>;\n\nfunction cloneHookState<\n TDeps extends DependencyMapType,\n TOn extends HookOn,\n TMeta extends ITaskMeta,\n TNextDeps extends DependencyMapType = TDeps,\n TNextOn extends HookOn = TOn,\n TNextMeta extends ITaskMeta = TMeta,\n>(\n state: HookOverrideState<TDeps, TOn, TMeta>,\n patch: Partial<HookOverrideState<TNextDeps, TNextOn, TNextMeta>>,\n): HookOverrideState<TNextDeps, TNextOn, TNextMeta> {\n return Object.freeze({\n ...(state as unknown as HookOverrideState<TNextDeps, TNextOn, TNextMeta>),\n ...patch,\n });\n}\n\nfunction makeHookOverrideBuilder<\n TDeps extends DependencyMapType,\n TOn extends HookOn,\n TMeta extends ITaskMeta,\n>(\n base: AnyHook,\n state: HookOverrideState<TDeps, TOn, TMeta>,\n): HookOverrideBuilder<TDeps, TOn, TMeta> {\n const builder: HookOverrideBuilder<TDeps, TOn, TMeta> = {\n id: state.id,\n\n order(order: number) {\n const next = cloneHookState(state, { order });\n return makeHookOverrideBuilder(base, next);\n },\n\n dependencies<\n TNewDeps extends DependencyMapType,\n TIsOverride extends boolean = false,\n >(deps: TNewDeps | (() => TNewDeps), options?: { override?: TIsOverride }) {\n type NextDeps = TIsOverride extends true ? TNewDeps : TDeps & TNewDeps;\n const override = options?.override ?? false;\n const nextDependencies = mergeDependencies<TDeps, TNewDeps>(\n state.dependencies as TDeps | (() => TDeps),\n deps,\n override,\n );\n\n const next = cloneHookState<TDeps, TOn, TMeta, NextDeps>(state, {\n dependencies: nextDependencies as unknown as NextDeps,\n });\n\n return makeHookOverrideBuilder<NextDeps, TOn, TMeta>(base, next);\n },\n\n tags<TNewTags extends TagType[]>(\n t: TNewTags,\n options?: { override?: boolean },\n ) {\n const override = options?.override ?? false;\n const next = cloneHookState(state, {\n tags: mergeArray(state.tags, t, override) as TagType[],\n });\n return makeHookOverrideBuilder(base, next);\n },\n\n meta<TNewMeta extends ITaskMeta>(m: TNewMeta) {\n const next = cloneHookState<TDeps, TOn, TMeta, TDeps, TOn, TNewMeta>(\n state as HookOverrideState<TDeps, TOn, TMeta>,\n {\n meta: m,\n },\n );\n return makeHookOverrideBuilder<TDeps, TOn, TNewMeta>(base, next);\n },\n\n run(fn) {\n const next = cloneHookState(state, { run: fn });\n return makeHookOverrideBuilder(base, next);\n },\n\n build() {\n const { id: _id, on: _on, ...patch } = state;\n return defineOverride<IHook<TDeps, TOn, TMeta>>(base, { ...patch });\n },\n };\n\n return builder;\n}\n\nexport function hookOverrideBuilder<\n TDeps extends DependencyMapType,\n TOn extends HookOn,\n TMeta extends ITaskMeta,\n>(base: IHook<TDeps, TOn, TMeta>): HookOverrideBuilder<TDeps, TOn, TMeta> {\n const initial: HookOverrideState<TDeps, TOn, TMeta> = Object.freeze({\n id: base.id,\n dependencies: base.dependencies,\n on: base.on,\n order: base.order,\n meta: base.meta,\n run: base.run,\n tags: base.tags,\n });\n\n return makeHookOverrideBuilder(base, initial);\n}\n","import type {\n DependencyMapType,\n IResource,\n IResourceDefinition,\n IResourceMeta,\n IValidationSchema,\n OverridableElements,\n ResourceInitFn,\n ResourceMiddlewareAttachmentType,\n TagType,\n} from \"../../../defs\";\nimport type { ThrowsList } from \"../../../types/error\";\nimport { normalizeThrows } from \"../../../tools/throws\";\nimport { defineOverride } from \"../../defineOverride\";\nimport type { ResourceFluentBuilder } from \"../resource/fluent-builder.interface\";\nimport type { ResolveConfig } from \"../resource/types\";\nimport {\n mergeArray,\n mergeDependencies,\n mergeRegister,\n} from \"../resource/utils\";\n\ntype AnyResource = IResource<any, any, any, any, any, any, any>;\n\ntype ResourceOverrideState<\n TConfig,\n TValue extends Promise<any>,\n TDeps extends DependencyMapType,\n TContext,\n TMeta extends IResourceMeta,\n TTags extends TagType[],\n TMiddleware extends ResourceMiddlewareAttachmentType[],\n> = Readonly<\n IResourceDefinition<\n TConfig,\n TValue,\n TDeps,\n TContext,\n any,\n any,\n TMeta,\n TTags,\n TMiddleware\n >\n>;\n\nfunction cloneResourceState<\n TConfig,\n TValue extends Promise<any>,\n TDeps extends DependencyMapType,\n TContext,\n TMeta extends IResourceMeta,\n TTags extends TagType[],\n TMiddleware extends ResourceMiddlewareAttachmentType[],\n TNextConfig = TConfig,\n TNextValue extends Promise<any> = TValue,\n TNextDeps extends DependencyMapType = TDeps,\n TNextContext = TContext,\n TNextMeta extends IResourceMeta = TMeta,\n TNextTags extends TagType[] = TTags,\n TNextMiddleware extends ResourceMiddlewareAttachmentType[] = TMiddleware,\n>(\n state: ResourceOverrideState<\n TConfig,\n TValue,\n TDeps,\n TContext,\n TMeta,\n TTags,\n TMiddleware\n >,\n patch: Partial<\n ResourceOverrideState<\n TNextConfig,\n TNextValue,\n TNextDeps,\n TNextContext,\n TNextMeta,\n TNextTags,\n TNextMiddleware\n >\n >,\n): ResourceOverrideState<\n TNextConfig,\n TNextValue,\n TNextDeps,\n TNextContext,\n TNextMeta,\n TNextTags,\n TNextMiddleware\n> {\n return Object.freeze({\n ...(state as unknown as ResourceOverrideState<\n TNextConfig,\n TNextValue,\n TNextDeps,\n TNextContext,\n TNextMeta,\n TNextTags,\n TNextMiddleware\n >),\n ...patch,\n });\n}\n\nfunction makeResourceOverrideBuilder<\n TConfig,\n TValue extends Promise<any>,\n TDeps extends DependencyMapType,\n TContext,\n TMeta extends IResourceMeta,\n TTags extends TagType[],\n TMiddleware extends ResourceMiddlewareAttachmentType[],\n>(\n base: AnyResource,\n state: ResourceOverrideState<\n TConfig,\n TValue,\n TDeps,\n TContext,\n TMeta,\n TTags,\n TMiddleware\n >,\n): ResourceFluentBuilder<\n TConfig,\n TValue,\n TDeps,\n TContext,\n TMeta,\n TTags,\n TMiddleware\n> {\n const builder: ResourceFluentBuilder<\n TConfig,\n TValue,\n TDeps,\n TContext,\n TMeta,\n TTags,\n TMiddleware\n > = {\n id: state.id,\n dependencies<\n TNewDeps extends DependencyMapType,\n TIsOverride extends boolean = false,\n >(\n deps: TNewDeps | ((config: TConfig) => TNewDeps),\n options?: { override?: TIsOverride },\n ) {\n const override = options?.override ?? false;\n const next = cloneResourceState<\n TConfig,\n TValue,\n TDeps,\n TContext,\n TMeta,\n TTags,\n TMiddleware,\n TConfig,\n TValue,\n TIsOverride extends true ? TNewDeps : TDeps & TNewDeps,\n TContext,\n TMeta,\n TTags,\n TMiddleware\n >(state, {\n dependencies: mergeDependencies(\n state.dependencies,\n deps,\n override,\n ) as unknown as TIsOverride extends true ? TNewDeps : TDeps & TNewDeps,\n });\n\n return makeResourceOverrideBuilder(base, next);\n },\n register(items, options) {\n const override = options?.override ?? false;\n const next = cloneResourceState(state, {\n register: mergeRegister(state.register, items, override),\n });\n return makeResourceOverrideBuilder(base, next);\n },\n middleware<TNewMw extends ResourceMiddlewareAttachmentType[]>(\n mw: TNewMw,\n options?: { override?: boolean },\n ) {\n const override = options?.override ?? false;\n const next = cloneResourceState<\n TConfig,\n TValue,\n TDeps,\n TContext,\n TMeta,\n TTags,\n TMiddleware,\n TConfig,\n TValue,\n TDeps,\n TContext,\n TMeta,\n TTags,\n TNewMw\n >(state, {\n middleware: mergeArray(state.middleware, mw, override) as TNewMw,\n });\n return makeResourceOverrideBuilder(base, next);\n },\n tags<TNewTags extends TagType[]>(\n tags: TNewTags,\n options?: { override?: boolean },\n ) {\n const override = options?.override ?? false;\n const next = cloneResourceState<\n TConfig,\n TValue,\n TDeps,\n TContext,\n TMeta,\n TTags,\n TMiddleware,\n TConfig,\n TValue,\n TDeps,\n TContext,\n TMeta,\n [...TTags, ...TNewTags],\n TMiddleware\n >(state, {\n tags: mergeArray(state.tags, tags, override) as unknown as [\n ...TTags,\n ...TNewTags,\n ],\n });\n return makeResourceOverrideBuilder(base, next);\n },\n context<TNewCtx>(factory: () => TNewCtx) {\n const next = cloneResourceState<\n TConfig,\n TValue,\n TDeps,\n TContext,\n TMeta,\n TTags,\n TMiddleware,\n TConfig,\n TValue,\n TDeps,\n TNewCtx,\n TMeta,\n TTags,\n TMiddleware\n >(state, { context: factory });\n return makeResourceOverrideBuilder<\n TConfig,\n TValue,\n TDeps,\n TNewCtx,\n TMeta,\n TTags,\n TMiddleware\n >(base, next);\n },\n configSchema<TNewConfig>(schema: IValidationSchema<TNewConfig>) {\n const next = cloneResourceState<\n TConfig,\n TValue,\n TDeps,\n TContext,\n TMeta,\n TTags,\n TMiddleware,\n TNewConfig,\n TValue,\n TDeps,\n TContext,\n TMeta,\n TTags,\n TMiddleware\n >(state, { configSchema: schema });\n return makeResourceOverrideBuilder<\n TNewConfig,\n TValue,\n TDeps,\n TContext,\n TMeta,\n TTags,\n TMiddleware\n >(base, next);\n },\n resultSchema<TResolved>(schema: IValidationSchema<TResolved>) {\n const next = cloneResourceState<\n TConfig,\n TValue,\n TDeps,\n TContext,\n TMeta,\n TTags,\n TMiddleware,\n TConfig,\n Promise<TResolved>,\n TDeps,\n TContext,\n TMeta,\n TTags,\n TMiddleware\n >(state, { resultSchema: schema });\n return makeResourceOverrideBuilder<\n TConfig,\n Promise<TResolved>,\n TDeps,\n TContext,\n TMeta,\n TTags,\n TMiddleware\n >(base, next);\n },\n init<TNewConfig = TConfig, TNewValue extends Promise<any> = TValue>(\n fn: ResourceInitFn<\n ResolveConfig<TConfig, TNewConfig>,\n TNewValue,\n TDeps,\n TContext,\n TMeta,\n TTags,\n TMiddleware\n >,\n ) {\n const next = cloneResourceState<\n TConfig,\n TValue,\n TDeps,\n TContext,\n TMeta,\n TTags,\n TMiddleware,\n ResolveConfig<TConfig, TNewConfig>,\n TNewValue,\n TDeps,\n TContext,\n TMeta,\n TTags,\n TMiddleware\n >(state, { init: fn });\n return makeResourceOverrideBuilder<\n ResolveConfig<TConfig, TNewConfig>,\n TNewValue,\n TDeps,\n TContext,\n TMeta,\n TTags,\n TMiddleware\n >(base, next);\n },\n dispose(\n fn: NonNullable<\n IResourceDefinition<\n TConfig,\n TValue,\n TDeps,\n TContext,\n any,\n any,\n TMeta,\n TTags,\n TMiddleware\n >[\"dispose\"]\n >,\n ) {\n const next = cloneResourceState(state, { dispose: fn });\n return makeResourceOverrideBuilder<\n TConfig,\n TValue,\n TDeps,\n TContext,\n TMeta,\n TTags,\n TMiddleware\n >(base, next);\n },\n meta<TNewMeta extends IResourceMeta>(m: TNewMeta) {\n const next = cloneResourceState<\n TConfig,\n TValue,\n TDeps,\n TContext,\n TMeta,\n TTags,\n TMiddleware,\n TConfig,\n TValue,\n TDeps,\n TContext,\n TNewMeta,\n TTags,\n TMiddleware\n >(state, { meta: m });\n return makeResourceOverrideBuilder<\n TConfig,\n TValue,\n TDeps,\n TContext,\n TNewMeta,\n TTags,\n TMiddleware\n >(base, next);\n },\n overrides(o: Array<OverridableElements>, options?: { override?: boolean }) {\n const override = options?.override ?? false;\n const next = cloneResourceState(state, {\n overrides: mergeArray(state.overrides, o, override),\n });\n return makeResourceOverrideBuilder<\n TConfig,\n TValue,\n TDeps,\n TContext,\n TMeta,\n TTags,\n TMiddleware\n >(base, next);\n },\n throws(list: ThrowsList) {\n const next = cloneResourceState(state, { throws: list });\n return makeResourceOverrideBuilder<\n TConfig,\n TValue,\n TDeps,\n TContext,\n TMeta,\n TTags,\n TMiddleware\n >(base, next);\n },\n build() {\n const normalizedThrows = normalizeThrows(\n { kind: \"resource\", id: state.id },\n state.throws,\n );\n const { id: _id, ...patch } = state;\n return defineOverride<\n IResource<TConfig, TValue, TDeps, TContext, TMeta, TTags, TMiddleware>\n >(base, { ...patch, throws: normalizedThrows });\n },\n };\n return builder;\n}\n\nexport function resourceOverrideBuilder<\n TConfig,\n TValue extends Promise<any>,\n TDeps extends DependencyMapType,\n TContext,\n TMeta extends IResourceMeta,\n TTags extends TagType[],\n TMiddleware extends ResourceMiddlewareAttachmentType[],\n>(\n base: IResource<TConfig, TValue, TDeps, TContext, TMeta, TTags, TMiddleware>,\n): ResourceFluentBuilder<\n TConfig,\n TValue,\n TDeps,\n TContext,\n TMeta,\n TTags,\n TMiddleware\n> {\n const initial: ResourceOverrideState<\n TConfig,\n TValue,\n TDeps,\n TContext,\n TMeta,\n TTags,\n TMiddleware\n > = Object.freeze({\n id: base.id,\n dependencies: base.dependencies,\n register: base.register,\n middleware: base.middleware,\n tags: base.tags,\n context: base.context,\n init: base.init,\n dispose: base.dispose,\n configSchema: base.configSchema,\n resultSchema: base.resultSchema,\n meta: base.meta,\n overrides: base.overrides,\n throws: base.throws,\n });\n\n return makeResourceOverrideBuilder(base, initial);\n}\n","import type {\n DependencyMapType,\n IMiddlewareMeta,\n IResourceMiddleware,\n IResourceMiddlewareDefinition,\n IValidationSchema,\n TagType,\n} from \"../../../defs\";\nimport { defineOverride } from \"../../defineOverride\";\nimport type { ResourceMiddlewareFluentBuilder } from \"../middleware/resource.interface\";\nimport { mergeArray, mergeDependencies } from \"../middleware/utils\";\n\ntype AnyResourceMiddleware = IResourceMiddleware<any, any, any, any>;\n\ntype ResourceMiddlewareOverrideState<\n C,\n In,\n Out,\n D extends DependencyMapType,\n> = Readonly<IResourceMiddlewareDefinition<C, In, Out, D>>;\n\nfunction cloneResourceMiddlewareState<\n C,\n In,\n Out,\n D extends DependencyMapType,\n TNextConfig = C,\n TNextIn = In,\n TNextOut = Out,\n TNextDeps extends DependencyMapType = D,\n>(\n state: ResourceMiddlewareOverrideState<C, In, Out, D>,\n patch: Partial<\n ResourceMiddlewareOverrideState<TNextConfig, TNextIn, TNextOut, TNextDeps>\n >,\n): ResourceMiddlewareOverrideState<TNextConfig, TNextIn, TNextOut, TNextDeps> {\n return Object.freeze({\n ...(state as unknown as ResourceMiddlewareOverrideState<\n TNextConfig,\n TNextIn,\n TNextOut,\n TNextDeps\n >),\n ...patch,\n });\n}\n\nfunction makeResourceMiddlewareOverrideBuilder<\n C,\n In,\n Out,\n D extends DependencyMapType,\n>(\n base: AnyResourceMiddleware,\n state: ResourceMiddlewareOverrideState<C, In, Out, D>,\n): ResourceMiddlewareFluentBuilder<C, In, Out, D> {\n const builder: ResourceMiddlewareFluentBuilder<C, In, Out, D> = {\n id: state.id,\n\n dependencies<TNewDeps extends DependencyMapType>(\n deps: TNewDeps | ((config: C) => TNewDeps),\n options?: { override?: boolean },\n ) {\n const override = options?.override ?? false;\n const nextDependencies = mergeDependencies<C, D, TNewDeps>(\n state.dependencies as D | ((config: C) => D),\n deps,\n override,\n );\n\n const next = cloneResourceMiddlewareState<C, In, Out, D & TNewDeps>(\n state as unknown as ResourceMiddlewareOverrideState<\n C,\n In,\n Out,\n D & TNewDeps\n >,\n {\n dependencies: nextDependencies as unknown as D & TNewDeps,\n },\n );\n\n if (override) {\n return makeResourceMiddlewareOverrideBuilder<C, In, Out, TNewDeps>(\n base,\n next as ResourceMiddlewareOverrideState<C, In, Out, TNewDeps>,\n );\n }\n return makeResourceMiddlewareOverrideBuilder<C, In, Out, D & TNewDeps>(\n base,\n next,\n );\n },\n\n configSchema<TNew>(schema: IValidationSchema<TNew>) {\n const next = cloneResourceMiddlewareState<TNew, In, Out, D>(\n state as unknown as ResourceMiddlewareOverrideState<TNew, In, Out, D>,\n { configSchema: schema },\n );\n return makeResourceMiddlewareOverrideBuilder<TNew, In, Out, D>(\n base,\n next,\n );\n },\n\n run(fn) {\n const next = cloneResourceMiddlewareState(state, { run: fn });\n return makeResourceMiddlewareOverrideBuilder(base, next);\n },\n\n meta<TNewMeta extends IMiddlewareMeta>(m: TNewMeta) {\n const next = cloneResourceMiddlewareState(state, { meta: m });\n return makeResourceMiddlewareOverrideBuilder(base, next);\n },\n\n tags<TNewTags extends TagType[]>(\n t: TNewTags,\n options?: { override?: boolean },\n ) {\n const override = options?.override ?? false;\n const next = cloneResourceMiddlewareState(state, {\n tags: mergeArray(state.tags, t, override) as TagType[],\n });\n return makeResourceMiddlewareOverrideBuilder(base, next);\n },\n\n everywhere(flag) {\n const next = cloneResourceMiddlewareState(state, { everywhere: flag });\n return makeResourceMiddlewareOverrideBuilder(base, next);\n },\n\n build() {\n const { id: _id, ...patch } = state;\n return defineOverride<IResourceMiddleware<C, In, Out, D>>(base, {\n ...patch,\n });\n },\n };\n\n return builder;\n}\n\nexport function resourceMiddlewareOverrideBuilder<\n C,\n In,\n Out,\n D extends DependencyMapType,\n>(\n base: IResourceMiddleware<C, In, Out, D>,\n): ResourceMiddlewareFluentBuilder<C, In, Out, D> {\n const initial: ResourceMiddlewareOverrideState<C, In, Out, D> = Object.freeze(\n {\n id: base.id,\n dependencies: base.dependencies,\n configSchema: base.configSchema,\n run: base.run,\n meta: base.meta,\n tags: base.tags,\n everywhere: base.everywhere,\n },\n );\n\n return makeResourceMiddlewareOverrideBuilder(base, initial);\n}\n","import type {\n DependencyMapType,\n DependencyValuesType,\n ITask,\n ITaskDefinition,\n ITaskMeta,\n IValidationSchema,\n TagType,\n TaskMiddlewareAttachmentType,\n} from \"../../../defs\";\nimport type { ThrowsList } from \"../../../types/error\";\nimport { normalizeThrows } from \"../../../tools/throws\";\nimport { defineOverride } from \"../../defineOverride\";\nimport type { TaskFluentBuilder } from \"../task/fluent-builder.interface\";\nimport type { ResolveInput } from \"../task/types\";\nimport { mergeArray, mergeDependencies } from \"../task/utils\";\n\ntype AnyTask = ITask<any, any, any, any, any, any>;\n\ntype TaskOverrideState<\n TInput,\n TOutput extends Promise<any>,\n TDeps extends DependencyMapType,\n TMeta extends ITaskMeta,\n TTags extends TagType[],\n TMiddleware extends TaskMiddlewareAttachmentType[],\n> = Readonly<\n ITaskDefinition<TInput, TOutput, TDeps, TMeta, TTags, TMiddleware>\n>;\n\nfunction cloneTaskState<\n TInput,\n TOutput extends Promise<any>,\n TDeps extends DependencyMapType,\n TMeta extends ITaskMeta,\n TTags extends TagType[],\n TMiddleware extends TaskMiddlewareAttachmentType[],\n TNextInput = TInput,\n TNextOutput extends Promise<any> = TOutput,\n TNextDeps extends DependencyMapType = TDeps,\n TNextMeta extends ITaskMeta = TMeta,\n TNextTags extends TagType[] = TTags,\n TNextMiddleware extends TaskMiddlewareAttachmentType[] = TMiddleware,\n>(\n state: TaskOverrideState<TInput, TOutput, TDeps, TMeta, TTags, TMiddleware>,\n patch: Partial<\n TaskOverrideState<\n TNextInput,\n TNextOutput,\n TNextDeps,\n TNextMeta,\n TNextTags,\n TNextMiddleware\n >\n >,\n): TaskOverrideState<\n TNextInput,\n TNextOutput,\n TNextDeps,\n TNextMeta,\n TNextTags,\n TNextMiddleware\n> {\n return Object.freeze({\n ...(state as unknown as TaskOverrideState<\n TNextInput,\n TNextOutput,\n TNextDeps,\n TNextMeta,\n TNextTags,\n TNextMiddleware\n >),\n ...patch,\n });\n}\n\nfunction makeTaskOverrideBuilder<\n TInput,\n TOutput extends Promise<any>,\n TDeps extends DependencyMapType,\n TMeta extends ITaskMeta,\n TTags extends TagType[],\n TMiddleware extends TaskMiddlewareAttachmentType[],\n>(\n base: AnyTask,\n state: TaskOverrideState<TInput, TOutput, TDeps, TMeta, TTags, TMiddleware>,\n): TaskFluentBuilder<TInput, TOutput, TDeps, TMeta, TTags, TMiddleware> {\n const builder: TaskFluentBuilder<\n TInput,\n TOutput,\n TDeps,\n TMeta,\n TTags,\n TMiddleware\n > = {\n id: state.id,\n dependencies<TNewDeps extends DependencyMapType>(\n deps: TNewDeps | (() => TNewDeps),\n options?: { override?: boolean },\n ) {\n const override = options?.override ?? false;\n const nextDependencies = mergeDependencies<TDeps, TNewDeps>(\n state.dependencies as TDeps | (() => TDeps),\n deps,\n override,\n );\n\n const next = cloneTaskState<\n TInput,\n TOutput,\n TDeps,\n TMeta,\n TTags,\n TMiddleware,\n TInput,\n TOutput,\n TDeps & TNewDeps,\n TMeta,\n TTags,\n TMiddleware\n >(state, {\n dependencies: nextDependencies as unknown as TDeps & TNewDeps,\n });\n\n return makeTaskOverrideBuilder(base, next);\n },\n\n middleware<TNewMw extends TaskMiddlewareAttachmentType[]>(\n mw: TNewMw,\n options?: { override?: boolean },\n ) {\n const override = options?.override ?? false;\n const next = cloneTaskState<\n TInput,\n TOutput,\n TDeps,\n TMeta,\n TTags,\n TMiddleware,\n TInput,\n TOutput,\n TDeps,\n TMeta,\n TTags,\n TNewMw\n >(state, {\n middleware: mergeArray(state.middleware, mw, override) as TNewMw,\n });\n return makeTaskOverrideBuilder(base, next);\n },\n\n tags<TNewTags extends TagType[]>(\n t: TNewTags,\n options?: { override?: boolean },\n ) {\n const override = options?.override ?? false;\n const next = cloneTaskState<\n TInput,\n TOutput,\n TDeps,\n TMeta,\n TTags,\n TMiddleware,\n TInput,\n TOutput,\n TDeps,\n TMeta,\n [...TTags, ...TNewTags],\n TMiddleware\n >(state, {\n tags: mergeArray(state.tags, t, override) as [...TTags, ...TNewTags],\n });\n return makeTaskOverrideBuilder(base, next);\n },\n\n inputSchema<TNewInput>(schema: IValidationSchema<TNewInput>) {\n const next = cloneTaskState<\n TInput,\n TOutput,\n TDeps,\n TMeta,\n TTags,\n TMiddleware,\n TNewInput,\n TOutput,\n TDeps,\n TMeta,\n TTags,\n TMiddleware\n >(state, { inputSchema: schema });\n return makeTaskOverrideBuilder<\n TNewInput,\n TOutput,\n TDeps,\n TMeta,\n TTags,\n TMiddleware\n >(base, next);\n },\n\n resultSchema<TResolved>(schema: IValidationSchema<TResolved>) {\n const next = cloneTaskState<\n TInput,\n TOutput,\n TDeps,\n TMeta,\n TTags,\n TMiddleware,\n TInput,\n Promise<TResolved>,\n TDeps,\n TMeta,\n TTags,\n TMiddleware\n >(state, { resultSchema: schema });\n return makeTaskOverrideBuilder<\n TInput,\n Promise<TResolved>,\n TDeps,\n TMeta,\n TTags,\n TMiddleware\n >(base, next);\n },\n\n run<TNewInput = TInput, TNewOutput extends Promise<any> = TOutput>(\n fn: NonNullable<\n ITaskDefinition<\n ResolveInput<TInput, TNewInput>,\n TNewOutput,\n TDeps,\n TMeta,\n TTags,\n TMiddleware\n >[\"run\"]\n >,\n ) {\n const wrapped = (input: unknown, deps: unknown) =>\n fn(\n input as ResolveInput<TInput, TNewInput>,\n deps as unknown as DependencyValuesType<TDeps>,\n );\n\n const next = cloneTaskState<\n TInput,\n TOutput,\n TDeps,\n TMeta,\n TTags,\n TMiddleware,\n ResolveInput<TInput, TNewInput>,\n TNewOutput,\n TDeps,\n TMeta,\n TTags,\n TMiddleware\n >(state, { run: wrapped });\n return makeTaskOverrideBuilder<\n ResolveInput<TInput, TNewInput>,\n TNewOutput,\n TDeps,\n TMeta,\n TTags,\n TMiddleware\n >(base, next);\n },\n\n meta<TNewMeta extends ITaskMeta>(m: TNewMeta) {\n const next = cloneTaskState<\n TInput,\n TOutput,\n TDeps,\n TMeta,\n TTags,\n TMiddleware,\n TInput,\n TOutput,\n TDeps,\n TNewMeta,\n TTags,\n TMiddleware\n >(state, { meta: m });\n return makeTaskOverrideBuilder<\n TInput,\n TOutput,\n TDeps,\n TNewMeta,\n TTags,\n TMiddleware\n >(base, next);\n },\n\n throws(list: ThrowsList) {\n const next = cloneTaskState(state, { throws: list });\n return makeTaskOverrideBuilder<\n TInput,\n TOutput,\n TDeps,\n TMeta,\n TTags,\n TMiddleware\n >(base, next);\n },\n\n build() {\n const normalizedThrows = normalizeThrows(\n { kind: \"task\", id: state.id },\n state.throws,\n );\n const { id: _id, ...patch } = state;\n return defineOverride<\n ITask<TInput, TOutput, TDeps, TMeta, TTags, TMiddleware>\n >(base, { ...patch, throws: normalizedThrows });\n },\n };\n\n return builder;\n}\n\nexport function taskOverrideBuilder<\n TInput,\n TOutput extends Promise<any>,\n TDeps extends DependencyMapType,\n TMeta extends ITaskMeta,\n TTags extends TagType[],\n TMiddleware extends TaskMiddlewareAttachmentType[],\n>(\n base: ITask<TInput, TOutput, TDeps, TMeta, TTags, TMiddleware>,\n): TaskFluentBuilder<TInput, TOutput, TDeps, TMeta, TTags, TMiddleware> {\n const initial: TaskOverrideState<\n TInput,\n TOutput,\n TDeps,\n TMeta,\n TTags,\n TMiddleware\n > = Object.freeze({\n id: base.id,\n dependencies: base.dependencies,\n middleware: base.middleware,\n inputSchema: base.inputSchema,\n resultSchema: base.resultSchema,\n throws: base.throws,\n run: base.run,\n tags: base.tags,\n meta: base.meta,\n });\n\n return makeTaskOverrideBuilder(base, initial);\n}\n","import type {\n DependencyMapType,\n IMiddlewareMeta,\n ITaskMiddleware,\n ITaskMiddlewareDefinition,\n IValidationSchema,\n TagType,\n} from \"../../../defs\";\nimport { defineOverride } from \"../../defineOverride\";\nimport type { TaskMiddlewareFluentBuilder } from \"../middleware/task.interface\";\nimport { mergeArray, mergeDependencies } from \"../middleware/utils\";\n\ntype AnyTaskMiddleware = ITaskMiddleware<any, any, any, any>;\n\ntype TaskMiddlewareOverrideState<\n C,\n In,\n Out,\n D extends DependencyMapType,\n> = Readonly<ITaskMiddlewareDefinition<C, In, Out, D>>;\n\nfunction cloneTaskMiddlewareState<\n C,\n In,\n Out,\n D extends DependencyMapType,\n TNextConfig = C,\n TNextIn = In,\n TNextOut = Out,\n TNextDeps extends DependencyMapType = D,\n>(\n state: TaskMiddlewareOverrideState<C, In, Out, D>,\n patch: Partial<\n TaskMiddlewareOverrideState<TNextConfig, TNextIn, TNextOut, TNextDeps>\n >,\n): TaskMiddlewareOverrideState<TNextConfig, TNextIn, TNextOut, TNextDeps> {\n return Object.freeze({\n ...(state as unknown as TaskMiddlewareOverrideState<\n TNextConfig,\n TNextIn,\n TNextOut,\n TNextDeps\n >),\n ...patch,\n });\n}\n\nfunction makeTaskMiddlewareOverrideBuilder<\n C,\n In,\n Out,\n D extends DependencyMapType,\n>(\n base: AnyTaskMiddleware,\n state: TaskMiddlewareOverrideState<C, In, Out, D>,\n): TaskMiddlewareFluentBuilder<C, In, Out, D> {\n const builder: TaskMiddlewareFluentBuilder<C, In, Out, D> = {\n id: state.id,\n\n dependencies<TNewDeps extends DependencyMapType>(\n deps: TNewDeps | ((config: C) => TNewDeps),\n options?: { override?: boolean },\n ) {\n const override = options?.override ?? false;\n const nextDependencies = mergeDependencies<C, D, TNewDeps>(\n state.dependencies as D | ((config: C) => D),\n deps,\n override,\n );\n\n const next = cloneTaskMiddlewareState<C, In, Out, D & TNewDeps>(\n state as unknown as TaskMiddlewareOverrideState<\n C,\n In,\n Out,\n D & TNewDeps\n >,\n {\n dependencies: nextDependencies as unknown as D & TNewDeps,\n },\n );\n\n if (override) {\n return makeTaskMiddlewareOverrideBuilder<C, In, Out, TNewDeps>(\n base,\n next as TaskMiddlewareOverrideState<C, In, Out, TNewDeps>,\n );\n }\n return makeTaskMiddlewareOverrideBuilder<C, In, Out, D & TNewDeps>(\n base,\n next,\n );\n },\n\n configSchema<TNew>(schema: IValidationSchema<TNew>) {\n const next = cloneTaskMiddlewareState<TNew, In, Out, D>(\n state as unknown as TaskMiddlewareOverrideState<TNew, In, Out, D>,\n { configSchema: schema },\n );\n return makeTaskMiddlewareOverrideBuilder<TNew, In, Out, D>(base, next);\n },\n\n run(fn) {\n const next = cloneTaskMiddlewareState(state, { run: fn });\n return makeTaskMiddlewareOverrideBuilder(base, next);\n },\n\n meta<TNewMeta extends IMiddlewareMeta>(m: TNewMeta) {\n const next = cloneTaskMiddlewareState(state, { meta: m });\n return makeTaskMiddlewareOverrideBuilder(base, next);\n },\n\n tags<TNewTags extends TagType[]>(\n t: TNewTags,\n options?: { override?: boolean },\n ) {\n const override = options?.override ?? false;\n const next = cloneTaskMiddlewareState(state, {\n tags: mergeArray(state.tags, t, override) as TagType[],\n });\n return makeTaskMiddlewareOverrideBuilder(base, next);\n },\n\n everywhere(flag) {\n const next = cloneTaskMiddlewareState(state, { everywhere: flag });\n return makeTaskMiddlewareOverrideBuilder(base, next);\n },\n\n build() {\n const { id: _id, ...patch } = state;\n return defineOverride<ITaskMiddleware<C, In, Out, D>>(base, { ...patch });\n },\n };\n\n return builder;\n}\n\nexport function taskMiddlewareOverrideBuilder<\n C,\n In,\n Out,\n D extends DependencyMapType,\n>(\n base: ITaskMiddleware<C, In, Out, D>,\n): TaskMiddlewareFluentBuilder<C, In, Out, D> {\n const initial: TaskMiddlewareOverrideState<C, In, Out, D> = Object.freeze({\n id: base.id,\n dependencies: base.dependencies,\n configSchema: base.configSchema,\n run: base.run,\n meta: base.meta,\n tags: base.tags,\n everywhere: base.everywhere,\n });\n\n return makeTaskMiddlewareOverrideBuilder(base, initial);\n}\n","import type {\n DependencyMapType,\n IHook,\n IResource,\n IResourceMeta,\n IResourceMiddleware,\n ITask,\n ITaskMeta,\n ITaskMiddleware,\n ResourceMiddlewareAttachmentType,\n TagType,\n TaskMiddlewareAttachmentType,\n} from \"../../../defs\";\nimport {\n isHook,\n isResource,\n isResourceMiddleware,\n isTask,\n isTaskMiddleware,\n} from \"../../tools\";\nimport type { ResourceFluentBuilder } from \"../resource/fluent-builder.interface\";\nimport type { TaskFluentBuilder } from \"../task/fluent-builder.interface\";\nimport type { ResourceMiddlewareFluentBuilder } from \"../middleware/resource.interface\";\nimport type { TaskMiddlewareFluentBuilder } from \"../middleware/task.interface\";\nimport type { HookOn, HookOverrideBuilder } from \"./hook\";\nimport { hookOverrideBuilder } from \"./hook\";\nimport { resourceOverrideBuilder } from \"./resource\";\nimport { resourceMiddlewareOverrideBuilder } from \"./resource-middleware\";\nimport { taskOverrideBuilder } from \"./task\";\nimport { taskMiddlewareOverrideBuilder } from \"./task-middleware\";\n\nenum OverrideBuilderErrorMessage {\n UnsupportedBase = \"r.override() supports tasks, resources, hooks, and middleware only.\",\n}\n\ntype OverrideBuilderBase =\n | ITask<any, any, any, any, any, any>\n | IResource<any, any, any, any, any, any, any>\n | IHook<any, any, any>\n | ITaskMiddleware<any, any, any, any>\n | IResourceMiddleware<any, any, any, any>;\n\nexport function override<\n TInput,\n TOutput extends Promise<any>,\n TDeps extends DependencyMapType,\n TMeta extends ITaskMeta,\n TTags extends TagType[],\n TMiddleware extends TaskMiddlewareAttachmentType[],\n>(\n base: ITask<TInput, TOutput, TDeps, TMeta, TTags, TMiddleware>,\n): TaskFluentBuilder<TInput, TOutput, TDeps, TMeta, TTags, TMiddleware>;\nexport function override<\n TConfig,\n TValue extends Promise<any>,\n TDeps extends DependencyMapType,\n TContext,\n TMeta extends IResourceMeta,\n TTags extends TagType[],\n TMiddleware extends ResourceMiddlewareAttachmentType[],\n>(\n base: IResource<TConfig, TValue, TDeps, TContext, TMeta, TTags, TMiddleware>,\n): ResourceFluentBuilder<\n TConfig,\n TValue,\n TDeps,\n TContext,\n TMeta,\n TTags,\n TMiddleware\n>;\nexport function override<\n TDeps extends DependencyMapType,\n TOn extends HookOn,\n TMeta extends ITaskMeta,\n>(base: IHook<TDeps, TOn, TMeta>): HookOverrideBuilder<TDeps, TOn, TMeta>;\nexport function override<C, In, Out, D extends DependencyMapType>(\n base: ITaskMiddleware<C, In, Out, D>,\n): TaskMiddlewareFluentBuilder<C, In, Out, D>;\nexport function override<C, In, Out, D extends DependencyMapType>(\n base: IResourceMiddleware<C, In, Out, D>,\n): ResourceMiddlewareFluentBuilder<C, In, Out, D>;\nexport function override(base: OverrideBuilderBase) {\n if (isTask(base)) {\n return taskOverrideBuilder(base);\n }\n if (isResource(base)) {\n return resourceOverrideBuilder(base);\n }\n if (isHook(base)) {\n return hookOverrideBuilder(base);\n }\n if (isTaskMiddleware(base)) {\n return taskMiddlewareOverrideBuilder(base);\n }\n if (isResourceMiddleware(base)) {\n return resourceMiddlewareOverrideBuilder(base);\n }\n throw new Error(OverrideBuilderErrorMessage.UnsupportedBase);\n}\n","import {\n defineTask,\n defineResource,\n defineEvent,\n defineTaskMiddleware,\n defineResourceMiddleware,\n defineTag,\n defineOverride,\n defineHook,\n} from \"./define\";\nimport {\n defineAsyncContext,\n createContext as oldCreateContext,\n} from \"./definers/defineAsyncContext\";\nimport { globalEvents } from \"./globals/globalEvents\";\nimport { globalResources } from \"./globals/globalResources\";\nimport { globalMiddlewares } from \"./globals/globalMiddleware\";\nimport { globalTags } from \"./globals/globalTags\";\nimport { debug } from \"./globals/debug\";\nimport { run } from \"./run\";\nimport { tunnels } from \"./globals/tunnels\";\nimport { createTestResource } from \"./testing\";\nimport { resource as resourceFn } from \"./definers/builders/resource\";\nimport { task as taskFn } from \"./definers/builders/task\";\nimport { event as eventFn } from \"./definers/builders/event\";\nimport { hook as hookFn } from \"./definers/builders/hook\";\nimport {\n taskMiddleware as taskMiddlewareFn,\n resourceMiddleware as resourceMiddlewareFn,\n} from \"./definers/builders/middleware\";\nimport { tag as tagFn } from \"./definers/builders/tag\";\nimport { error as errorFn } from \"./definers/builders/error\";\nimport { asyncContext as asyncContextFn } from \"./definers/builders/asyncContext\";\nimport { override as overrideBuilder } from \"./definers/builders/override\";\n\nconst globals = {\n events: globalEvents,\n resources: globalResources,\n middleware: globalMiddlewares,\n tags: globalTags,\n tunnels,\n debug,\n};\n\nexport { globals };\nexport {\n defineTask as task,\n defineResource as resource,\n defineEvent as event,\n defineTaskMiddleware as taskMiddleware,\n defineResourceMiddleware as resourceMiddleware,\n defineAsyncContext as asyncContext,\n defineTag as tag,\n defineOverride as override,\n defineHook as hook,\n run,\n createTestResource,\n};\n\n// Legacy alias accepted in tests; with optional id support\nconst createContext = oldCreateContext;\nexport { createContext };\n\n// Expose only a single namespace `r` that contains all builder entry points\nexport const r = Object.freeze({\n resource: resourceFn,\n task: taskFn,\n event: eventFn,\n hook: hookFn,\n tag: tagFn,\n override: overrideBuilder,\n asyncContext: asyncContextFn,\n error: errorFn,\n middleware: Object.freeze({\n task: taskMiddlewareFn,\n resource: resourceMiddlewareFn,\n }),\n});\n\nexport * as definitions from \"./defs\";\nexport * from \"./models\";\nexport * from \"./globals/types\";\nexport * as Errors from \"./errors\";\nexport { PlatformAdapter, setPlatform } from \"./platform\";\n\n// HTTP and tunnel functionality\nexport * from \"./http-client\";\nexport * from \"./http-fetch-tunnel.resource\";\n\nexport {\n Serializer,\n SymbolPolicy,\n SymbolPolicyErrorMessage,\n} from \"./serializer\";\n\n// ExecutionJournal for per-execution state sharing\nexport { journal } from \"./models/ExecutionJournal\";\n"]}
|
|
1
|
+
{"version":3,"sources":["../../src/serializer/regexp-validator.ts","../../src/types/symbols.ts","../../src/tools/getCallerFile.ts","../../src/defs.ts","../../src/types/event.ts","../../src/types/runner.ts","../../src/types/contracts.ts","../../src/types/storeTypes.ts","../../src/definers/tools.ts","../../src/tools/throws.ts","../../src/definers/defineTask.ts","../../src/definers/defineHook.ts","../../src/errors.ts","../../src/definers/defineError.ts","../../src/definers/builders/error/utils.ts","../../src/definers/builders/error/fluent-builder.ts","../../src/definers/builders/error/index.ts","../../src/platform/adapters/node-als.ts","../../src/platform/adapters/node.ts","../../src/platform/adapters/browser.ts","../../src/platform/adapters/edge.ts","../../src/platform/adapters/universal-generic.ts","../../src/platform/adapters/universal.ts","../../src/platform/factory.ts","../../src/platform/index.ts","../../src/definers/resourceFork.ts","../../src/definers/defineResource.ts","../../src/definers/defineEvent.ts","../../src/definers/middlewareConfig.ts","../../src/definers/defineTaskMiddleware.ts","../../src/definers/defineResourceMiddleware.ts","../../src/definers/defineOverride.ts","../../src/definers/defineTag.ts","../../src/globals/middleware/requireContext.middleware.ts","../../src/serializer/types.ts","../../src/serializer/binary-builtins.ts","../../src/serializer/error-url-builtins.ts","../../src/serializer/special-values.ts","../../src/serializer/builtins.ts","../../src/serializer/type-registry.ts","../../src/serializer/validation.ts","../../src/serializer/serialize-utils.ts","../../src/serializer/graph-serializer.ts","../../src/serializer/tree-serializer.ts","../../src/serializer/deserializer.ts","../../src/serializer/option-normalizers.ts","../../src/serializer/Serializer.ts","../../src/definers/defineAsyncContext.ts","../../src/globals/resources/debug/debug.tag.ts","../../src/globals/resources/tunnel/tunnel.tag.ts","../../src/globals/resources/tunnel/tunnel.policy.tag.ts","../../src/globals/globalTags.ts","../../src/globals/globalEvents.ts","../../src/models/ExecutionJournal.ts","../../src/globals/middleware/cache.middleware.ts","../../src/globals/middleware/circuitBreaker.middleware.ts","../../src/models/event/types.ts","../../src/models/event/ListenerRegistry.ts","../../src/models/event/InterceptorPipeline.ts","../../src/models/event/EmissionExecutor.ts","../../src/models/event/CycleContext.ts","../../src/models/EventManager.ts","../../src/models/Semaphore.ts","../../src/globals/middleware/concurrency.middleware.ts","../../src/globals/middleware/rateLimit.middleware.ts","../../src/globals/middleware/temporal.middleware.ts","../../src/models/Queue.ts","../../src/globals/resources/queue.resource.ts","../../src/globals/resources/tunnel/protocol.ts","../../src/globals/resources/tunnel/error-utils.ts","../../src/http-fetch-tunnel.resource.ts","../../src/tunnels/buildUniversalManifest.ts","../../src/http-client.ts","../../src/globals/resources/httpClientFactory.resource.ts","../../src/globals/globalResources.ts","../../src/globals/middleware/timeout.middleware.ts","../../src/globals/middleware/retry.middleware.ts","../../src/globals/middleware/fallback.middleware.ts","../../src/globals/globalMiddleware.ts","../../src/globals/resources/debug/types.ts","../../src/globals/debug.ts","../../src/models/TaskRunner.ts","../../src/models/ResourceInitializer.ts","../../src/models/utils/safeStringify.ts","../../src/models/LogPrinter.ts","../../src/models/Logger.ts","../../src/models/DependencyProcessor.ts","../../src/models/utils/findCircularDependencies.ts","../../src/models/StoreValidator.ts","../../src/models/StoreRegistry.ts","../../src/models/OverrideManager.ts","../../src/globals/middleware/tunnel.middleware.ts","../../src/models/middleware/InterceptorRegistry.ts","../../src/models/middleware/MiddlewareResolver.ts","../../src/models/middleware/ValidationHelper.ts","../../src/models/middleware/TaskMiddlewareComposer.ts","../../src/models/middleware/ResourceMiddlewareComposer.ts","../../src/models/MiddlewareManager.ts","../../src/tools/detectRunnerMode.ts","../../src/models/Store.ts","../../src/globals/resources/debug/debugConfig.resource.ts","../../src/globals/resources/debug/utils.ts","../../src/globals/resources/debug/globalEvent.hook.ts","../../src/globals/resources/debug/executionTracker.middleware.ts","../../src/globals/resources/debug/middleware.hook.ts","../../src/globals/resources/debug/hook.hook.ts","../../src/globals/resources/debug/debug.resource.ts","../../src/processHooks.ts","../../src/models/UnhandledError.ts","../../src/models/RunResult.ts","../../src/run.ts","../../src/globals/tunnels/index.ts","../../src/testing.ts","../../src/definers/builders/resource/utils.ts","../../src/definers/builders/resource/fluent-builder.ts","../../src/definers/builders/resource/index.ts","../../src/definers/builders/task/utils.ts","../../src/definers/builders/task/fluent-builder.ts","../../src/definers/builders/task/phantom-builder.ts","../../src/definers/builders/task/index.ts","../../src/definers/builders/event/utils.ts","../../src/definers/builders/event/fluent-builder.ts","../../src/definers/builders/event/index.ts","../../src/definers/builders/hook/utils.ts","../../src/definers/builders/hook/fluent-builder.ts","../../src/definers/builders/hook/index.ts","../../src/definers/builders/middleware/utils.ts","../../src/definers/builders/middleware/task.ts","../../src/definers/builders/middleware/resource.ts","../../src/definers/builders/middleware/index.ts","../../src/definers/builders/tag/utils.ts","../../src/definers/builders/tag/fluent-builder.ts","../../src/definers/builders/tag/index.ts","../../src/definers/builders/asyncContext/utils.ts","../../src/definers/builders/asyncContext/fluent-builder.ts","../../src/definers/builders/asyncContext/index.ts","../../src/definers/builders/override/hook.ts","../../src/definers/builders/override/resource.ts","../../src/definers/builders/override/resource-middleware.ts","../../src/definers/builders/override/task.ts","../../src/definers/builders/override/task-middleware.ts","../../src/definers/builders/override/index.ts","../../src/public.ts"],"names":["stack","RunnerMode","HookDependencyState","id","error","isValidHttpCode","assertHttpCode","store","deps","mapRegisterItems","task","SymbolPolicy","SymbolPolicyErrorMessage","tag","serializedPayload","shouldExcludeCurrentType","hasOwn","serializer","cacheFactoryTask","journal","journalKeys","event","r","platform","hook","resource","override","next","remotePayload","globalMiddlewares","i","debugConfig","debug","clone","e","a","mergeArray","mergeDependencies","createContext"],"mappings":"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","file":"index.mjs","sourcesContent":["/**\n * RegExp pattern safety validation for ReDoS protection.\n * Extracted from Serializer.ts as a standalone module.\n */\n\nexport interface RegExpPayload {\n pattern: string;\n flags: string;\n}\n\nexport interface RegExpValidatorOptions {\n maxPatternLength: number;\n allowUnsafe: boolean;\n}\n\n/**\n * Check if a character is a quantifier at the given position.\n */\nexport const isQuantifierAt = (pattern: string, index: number): boolean => {\n if (index >= pattern.length) {\n return false;\n }\n const char = pattern[index];\n if (char === \"*\" || char === \"+\" || char === \"?\") {\n return true;\n }\n if (char === \"{\") {\n return isBoundedQuantifier(pattern, index);\n }\n return false;\n};\n\n/**\n * Check if a character represents a quantifier (*, +, ?, {n,m}).\n */\nexport const isQuantifierChar = (\n char: string,\n pattern: string,\n index: number,\n): boolean => {\n if (char === \"*\" || char === \"+\") {\n return true;\n }\n if (char === \"?\") {\n if (index > 0 && pattern[index - 1] === \"(\") {\n return false;\n }\n return true;\n }\n if (char === \"{\") {\n return isBoundedQuantifier(pattern, index);\n }\n return false;\n};\n\n/**\n * Check if the pattern contains a bounded quantifier at the given position.\n */\nexport const isBoundedQuantifier = (\n pattern: string,\n index: number,\n): boolean => {\n let sawDigit = false;\n let sawComma = false;\n\n for (let i = index + 1; i < pattern.length; i += 1) {\n const char = pattern[i];\n if (char >= \"0\" && char <= \"9\") {\n sawDigit = true;\n continue;\n }\n if (char === \",\" && !sawComma) {\n sawComma = true;\n continue;\n }\n if (char === \"}\") {\n return sawDigit;\n }\n return false;\n }\n return false;\n};\n\n/**\n * Check if a RegExp pattern is safe from ReDoS attacks.\n * Detects nested quantifiers which are a common ReDoS vector.\n */\nexport const isRegExpPatternSafe = (pattern: string): boolean => {\n const groupStack: Array<{ hasQuantifier: boolean }> = [];\n let escaped = false;\n let inCharClass = false;\n\n for (let index = 0; index < pattern.length; index += 1) {\n const char = pattern[index];\n if (escaped) {\n escaped = false;\n continue;\n }\n if (char === \"\\\\\") {\n escaped = true;\n continue;\n }\n if (inCharClass) {\n if (char === \"]\") {\n inCharClass = false;\n }\n continue;\n }\n if (char === \"[\") {\n inCharClass = true;\n continue;\n }\n if (char === \"(\") {\n groupStack.push({ hasQuantifier: false });\n if (pattern[index + 1] === \"?\") {\n index += 1;\n }\n continue;\n }\n if (char === \")\") {\n const group = groupStack.pop();\n if (group?.hasQuantifier && isQuantifierAt(pattern, index + 1)) {\n return false;\n }\n if (group?.hasQuantifier && groupStack.length > 0) {\n groupStack[groupStack.length - 1].hasQuantifier = true;\n }\n continue;\n }\n if (isQuantifierChar(char, pattern, index)) {\n if (groupStack.length > 0) {\n groupStack[groupStack.length - 1].hasQuantifier = true;\n }\n }\n }\n\n return true;\n};\n\n/**\n * Validate and extract a RegExp payload from unknown data.\n * Enforces pattern length limits and optional safety checks.\n */\nexport const assertRegExpPayload = (\n value: unknown,\n options: RegExpValidatorOptions,\n): RegExpPayload => {\n if (!value || typeof value !== \"object\") {\n throw new Error(\"Invalid RegExp payload\");\n }\n const record = value as Record<string, unknown>;\n if (typeof record.pattern !== \"string\" || typeof record.flags !== \"string\") {\n throw new Error(\"Invalid RegExp payload\");\n }\n if (record.pattern.length > options.maxPatternLength) {\n throw new Error(\n `RegExp pattern exceeds limit (${options.maxPatternLength})`,\n );\n }\n if (!options.allowUnsafe && !isRegExpPatternSafe(record.pattern)) {\n throw new Error(\"Unsafe RegExp pattern\");\n }\n return { pattern: record.pattern, flags: record.flags };\n};\n","/**\n * Internal brand symbols used to tag created objects at runtime and help with\n * type‑narrowing. Prefer the `isTask`/`isResource`/`isEvent`/`isMiddleware`\n * helpers instead of touching these directly.\n * @internal\n */\nexport const symbolTask: unique symbol = Symbol.for(\"runner.task\");\n/** Marks a task as a phantom task (no-op run; meant to be tunneled/routed). */\nexport const symbolPhantomTask: unique symbol = Symbol.for(\n \"runner.task.phantom\",\n);\nexport const symbolResource: unique symbol = Symbol.for(\"runner.resource\");\n/** @internal Generic fork provenance metadata for definitions that support `.fork()` */\nexport const symbolForkedFrom: unique symbol = Symbol.for(\"runner.forkedFrom\");\nexport const symbolResourceWithConfig: unique symbol = Symbol.for(\n \"runner.resourceWithConfig\",\n);\nexport const symbolEvent: unique symbol = Symbol.for(\"runner.event\");\n/** @internal Marks an error helper definition */\nexport const symbolError: unique symbol = Symbol.for(\"runner.error\");\nexport const symbolMiddleware: unique symbol = Symbol.for(\"runner.middleware\");\n/** New brands for separated middleware kinds */\nexport const symbolTaskMiddleware: unique symbol = Symbol.for(\n \"runner.taskMiddleware\",\n);\nexport const symbolResourceMiddleware: unique symbol = Symbol.for(\n \"runner.resourceMiddleware\",\n);\nexport const symbolMiddlewareConfigured: unique symbol = Symbol.for(\n \"runner.middlewareConfigured\",\n);\n/** Records which tunnel resource owns the task patching (exclusivity). */\nexport const symbolTunneledBy: unique symbol = Symbol.for(\"runner.tunneledBy\");\n/** @internal Marks hook definitions (event listeners without middleware) */\nexport const symbolHook: unique symbol = Symbol.for(\"runner.hook\");\n// export const symbolMiddlewareEverywhereTasks: unique symbol = Symbol.for(\n// \"runner.middlewareGlobalTasks\",\n// );\n// export const symbolMiddlewareEverywhereResources: unique symbol = Symbol.for(\n// \"runner.middlewareGlobalResources\",\n// );\n/** @internal Marks a tag definition */\nexport const symbolTag: unique symbol = Symbol.for(\"runner.tag\");\nexport const symbolTagConfigured: unique symbol = Symbol.for(\n \"runner.tagConfigured\",\n);\n\n/** @internal Marks an optional dependency wrapper */\nexport const symbolOptionalDependency: unique symbol = Symbol.for(\n \"runner.optionalDependency\",\n);\n\n/** @internal Path to aid anonymous id generation and error messages */\nexport const symbolFilePath: unique symbol = Symbol.for(\"runner.filePath\");\n\n/** @internal Marks an async context definition */\nexport const symbolAsyncContext: unique symbol = Symbol.for(\n \"runner.asyncContext\",\n);\n","/**\n * Inline node detection to avoid circular dependency with platform module.\n * This is necessary because getCallerFile() is called during error module\n * initialization, before the platform module is fully loaded.\n */\nfunction isNodeInline(): boolean {\n return (\n typeof process !== \"undefined\" &&\n typeof (process as NodeJS.Process)?.versions?.node === \"string\"\n );\n}\n\nexport function getCallerFile(): string {\n const originalPrepare = Error.prepareStackTrace;\n try {\n // Prefer robust Node path with structured stack frames\n if (isNodeInline()) {\n const err = new Error();\n Error.prepareStackTrace = (_err, stack) => stack;\n const stack = err.stack as unknown as Array<{\n getFileName?: () => string | null;\n }>;\n\n // Best-effort: skip current (this fn) and its caller, then read next frame\n stack.shift();\n stack.shift();\n const candidate = stack.shift();\n const file = candidate?.getFileName?.();\n // In Node, V8 always provides a filename for this frame; keep branchless for coverage\n return file!;\n }\n\n // Browser/edge fallback: do not attempt fragile parsing; keep deterministic\n return \"unknown\";\n } finally {\n Error.prepareStackTrace = originalPrepare;\n }\n}\n","/**\n * Core public TypeScript types for BlueLibs Runner.\n *\n * This file contains the strongly-typed contract for tasks, resources, events\n * and middleware. It mirrors the mental model described in the README:\n * - Tasks are functions\n * - Resources are singletons (with init/dispose hooks)\n * - Hooks are event listeners without middleware\n * - Events are simple, strongly-typed emissions\n * - Middleware can target both tasks and resources (taskMiddleware, resourceMiddleware)\n *\n * DX goals:\n * - Crystal‑clear generics and helper types that infer dependency shapes\n * - Friendly JSDoc you can hover in editors to understand usage instantly\n * - Safe overrides and strong typing around config and register mechanics\n */\nexport * from \"./types/utilities\";\nexport * from \"./types/symbols\";\nexport * from \"./types/tag\";\nexport * from \"./types/hook\";\nexport * from \"./types/resource\";\nexport * from \"./types/event\";\nexport * from \"./types/task\";\nexport * from \"./types/taskMiddleware\";\nexport * from \"./types/resourceMiddleware\";\nexport * from \"./types/meta\";\nexport * from \"./types/runner\";\nexport * from \"./types/asyncContext\";\nexport * from \"./types/error\";\nexport * from \"./types/contracts\";\nexport * from \"./types/tagged\";\nexport * from \"./types/inputFile\";\n\n// Useful other types that are kind-of spread out.\nexport type { ICacheInstance } from \"./globals/middleware/cache.middleware\";\nexport * from \"./types/storeTypes\";\n","import { IOptionalDependency, IValidationSchema } from \"./utilities\";\nimport { TagType } from \"./tag\";\nimport { IEventMeta } from \"./meta\";\nimport { CommonPayload, symbolEvent, symbolFilePath } from \"./utilities\";\n\nexport type EventHandlerType<T = any> = (\n event: IEventEmission<T>,\n) => any | Promise<any>;\n\n// Helper to keep tuple inference intact for multi-event hooks\nexport function onAnyOf<T extends readonly IEventDefinition<any>[]>(\n ...defs: T\n): T {\n return defs;\n}\n\n/**\n * Runtime guard that checks if an emission belongs to one of the given event defs.\n * Narrows payload type to the intersection of the provided events' payloads.\n */\nexport function isOneOf<TDefs extends readonly IEventDefinition<any>[]>(\n emission: IEventEmission<any>,\n defs: TDefs,\n): emission is IEventEmission<CommonPayload<TDefs>> {\n return defs.some((d) => d.id === emission.id);\n}\n\nexport interface IEventDefinition<TPayload = void> {\n id: string;\n meta?: IEventMeta;\n /**\n * Optional validation schema for runtime payload validation.\n * When provided, event payload will be validated when emitted.\n */\n payloadSchema?: IValidationSchema<TPayload>;\n tags?: TagType[];\n /**\n * If true, listeners with the same priority run concurrently within a batch.\n * Batches (grouped by order) still execute sequentially in priority order.\n */\n parallel?: boolean;\n}\n\n/**\n * The definioten of the event.\n * This is different from the event emission.\n */\nexport interface IEvent<TPayload = any> extends IEventDefinition<TPayload> {\n id: string;\n /**\n * We use this event to discriminate between resources with just 'id' and 'events' as they collide. This is a workaround, should be redone using classes and instanceof.\n */\n [symbolEvent]: true;\n [symbolFilePath]: string;\n /** Return an optional dependency wrapper for this event. */\n optional: () => IOptionalDependency<IEvent<TPayload>>;\n tags: TagType[];\n}\n\n/**\n * This represents the object that is passed to event handlers\n */\nexport interface IEventEmission<TPayload = any> {\n /**\n * The ID of the event. This is the same as the event's ID.\n * This is useful for global event listeners.\n */\n id: string;\n /**\n * The data that the event carries. It can be anything.\n */\n data: TPayload;\n /**\n * The timestamp when the event was created.\n */\n timestamp: Date;\n /**\n * The source of the event. This can be useful for debugging.\n */\n source: string;\n /**\n * Metadata associated with the event definition.\n */\n meta: IEventMeta;\n /**\n * Stops propagation to remaining event listeners.\n */\n stopPropagation(): void;\n /**\n * Returns true if propagation has been stopped.\n */\n isPropagationStopped(): boolean;\n /**\n * The tags that the event carries.\n */\n tags: TagType[];\n}\n","import { DebugFriendlyConfig } from \"../globals/resources/debug\";\nimport { LogLevels, PrintStrategy } from \"../models/Logger\";\nimport { OnUnhandledError } from \"../models/UnhandledError\";\n\nexport type RunOptions = {\n /**\n * Defaults to undefined. If true, we introduce logging to the console.\n */\n debug?: DebugFriendlyConfig;\n /**\n * Configure logging settings.\n */\n logs?: {\n /**\n * Defaults to info. Use null to disable logging.\n */\n printThreshold?: null | LogLevels;\n /**\n * Defaults to PRETTY. How to print the logs.\n */\n printStrategy?: PrintStrategy;\n /**\n * Defaults to false. If true, we buffer logs until the root resource is ready.\n * This provides you with the chance to see the logs before the root resource is ready.\n */\n bufferLogs?: boolean;\n };\n /**\n * When true (default), installs a central error boundary that catches uncaught errors\n * from process-level events and routes them to `onUnhandledError`.\n */\n errorBoundary?: boolean;\n /**\n * When true (default), installs SIGINT/SIGTERM handlers that call dispose() on the root allowing for graceful shutdown.\n */\n shutdownHooks?: boolean;\n /**\n * Custom handler for any unhandled error caught by Runner. Defaults to logging via the created logger.\n */\n onUnhandledError?: OnUnhandledError;\n /**\n * Defaults to false.\n *\n * Dry run mode. When true, the runner will setup the system, ensure there are no errors, but will not start the system.\n * Your resources will not be initialized, and no events will be emitted. This is useful for testing and debugging.\n *\n * Note: this cannot catch init() errors that happen within resources.\n */\n dryRun?: boolean;\n /**\n * Defaults to true.\n * When set, forces runtime cycle detection for event emissions. Disable if you're sure\n * you don't have event deadlocks to improve event emission performance.\n */\n runtimeEventCycleDetection?: boolean;\n /**\n * Specify in which mode to run \"dev\", \"prod\" or \"test\".\n * If inside Node this is automatically detected from the NODE_ENV environment variable if not provided.\n */\n mode?: RunnerMode;\n};\n\n/**\n * The mode in which the runner is operating\n */\nexport enum RunnerMode {\n TEST = \"test\",\n DEV = \"dev\",\n PROD = \"prod\",\n}\n","// Solution to enforce input,output contracts from 'tags' and 'middleware'\n\nimport { TagType } from \"./tag\";\nimport type { UnionToIntersection } from \"./utilities\";\n\n// A unique symbol key used both for typing and runtime branding\nexport const CONTRACT: unique symbol = Symbol.for(\"runner.contract\");\nexport type CONTRACT = typeof CONTRACT;\n\n// Generic base for anything that carries input/output contracts\nexport interface IContractable<TConfig = any, TInput = void, TOutput = void> {\n readonly __containsContract: true;\n // Required brand so TS can always infer the generics\n readonly [CONTRACT]: {\n config: TConfig;\n input: TInput;\n output: TOutput;\n };\n}\n\n// Helpers\nexport type NonVoid<T> = [T] extends [void] ? never : T;\nexport type IsTuple<T extends readonly unknown[]> = number extends T[\"length\"]\n ? false\n : true;\nexport type Simplify<T> = { [K in keyof T]: T[K] } & {};\nexport type IsUnknown<T> = unknown extends T\n ? [T] extends [unknown]\n ? true\n : false\n : false;\nexport type UnknownToNever<T> = IsUnknown<T> extends true ? never : T;\n\n// Generic extractors from any IContractable via the CONTRACT brand\nexport type ExtractContractOf<T, Kind extends \"input\" | \"output\"> =\n T extends IContractable<any, infer I, infer O>\n ? UnknownToNever<Kind extends \"input\" ? NonVoid<I> : NonVoid<O>>\n : never;\n\n// Filter that preserves tuple shape; array -> Array<Union>\nexport type FilterContractsKind<\n TItems extends readonly unknown[],\n Kind extends \"input\" | \"output\",\n Acc extends readonly unknown[] = [],\n> = TItems extends readonly [infer H, ...infer R]\n ? ExtractContractOf<H, Kind> extends never\n ? FilterContractsKind<R, Kind, Acc>\n : FilterContractsKind<R, Kind, [...Acc, ExtractContractOf<H, Kind>]>\n : Acc;\n\nexport type ExtractContractsFromCollection<\n TItems extends readonly unknown[],\n Kind extends \"input\" | \"output\",\n> =\n IsTuple<TItems> extends true\n ? FilterContractsKind<TItems, Kind>\n : Array<ExtractContractOf<TItems[number], Kind>>;\n\n// Public API you asked for\nexport type ExtractInputTypeFromContracts<TItems extends readonly unknown[]> =\n ExtractContractsFromCollection<TItems, \"input\">;\n\nexport type ExtractOutputTypeFromContracts<TItems extends readonly unknown[]> =\n ExtractContractsFromCollection<TItems, \"output\">;\n\n// Unions and intersections\nexport type ContractsUnionInputs<TItems extends readonly unknown[]> =\n ExtractInputTypeFromContracts<TItems> extends readonly (infer U)[]\n ? U\n : never;\n\nexport type ContractsUnionOutputs<TItems extends readonly unknown[]> =\n ExtractOutputTypeFromContracts<TItems> extends readonly (infer U)[]\n ? U\n : never;\n\nexport type ContractsIntersectionInputs<TItems extends readonly unknown[]> =\n UnionToIntersection<ContractsUnionInputs<TItems>>;\n\nexport type ContractsIntersectionOutputs<TItems extends readonly unknown[]> =\n UnionToIntersection<ContractsUnionOutputs<TItems>>;\n\n// Booleans\nexport type HasInputContracts<TItems extends readonly unknown[]> = [\n ContractsUnionInputs<TItems>,\n] extends [never]\n ? false\n : true;\n\nexport type HasOutputContracts<TItems extends readonly unknown[]> = [\n ContractsUnionOutputs<TItems>,\n] extends [never]\n ? false\n : true;\n\n// Collision detection helpers for intersections\nexport type IsNever<T> = [T] extends [never] ? true : false;\nexport type KeysWithNever<T> = T extends object\n ? { [K in keyof T]-?: [T[K]] extends [never] ? K : never }[keyof T]\n : never;\nexport type HasNeverProperty<T> = KeysWithNever<T> extends never ? false : true;\n// \"Impossible\" means either overall never or an object with any `never` property\nexport type IsImpossibleIntersection<T> =\n IsNever<T> extends true\n ? true\n : HasNeverProperty<T> extends true\n ? true\n : false;\n\n// Error shapes\nexport type InputContractViolationError<\n TItems extends readonly unknown[],\n TActual,\n> = {\n message: \"Value does not satisfy all input contracts\";\n expected: Simplify<ContractsIntersectionInputs<TItems>>;\n received: TActual;\n};\n\nexport type OutputContractViolationError<\n TItems extends readonly unknown[],\n TActual,\n> = {\n message: \"Value does not satisfy all output contracts\";\n expected: Simplify<ContractsIntersectionOutputs<TItems>>;\n received: TActual;\n};\n\n// Enforcement helpers (Promise-aware)\nexport type EnsureInputSatisfiesContracts<\n TItems extends readonly unknown[],\n TValue,\n> = [ContractsUnionInputs<TItems>] extends [never]\n ? TValue\n : TValue extends Promise<infer U>\n ? Promise<\n U extends ContractsIntersectionInputs<TItems>\n ? U\n : InputContractViolationError<TItems, U>\n >\n : TValue extends ContractsIntersectionInputs<TItems>\n ? TValue\n : InputContractViolationError<TItems, TValue>;\n\nexport type EnsureOutputSatisfiesContracts<\n TItems extends readonly unknown[],\n TResponse,\n> = [ContractsUnionOutputs<TItems>] extends [never]\n ? TResponse\n : TResponse extends Promise<infer U>\n ? Promise<\n U extends ContractsIntersectionOutputs<TItems>\n ? U\n : OutputContractViolationError<TItems, U>\n >\n : TResponse extends ContractsIntersectionOutputs<TItems>\n ? TResponse\n : OutputContractViolationError<TItems, TResponse>;\n\n// Inferred-input API\n// - No input contracts -> void (so the arg can be omitted)\n// - Compatible contracts -> intersection\n// - Collision -> surfaces InputContractViolationError with helpful expected\nexport type InferInputOrViolationFromContracts<\n TItems extends readonly unknown[],\n> =\n HasInputContracts<TItems> extends false\n ? void\n : ContractsIntersectionInputs<TItems> extends infer I\n ? IsImpossibleIntersection<I> extends true\n ? InputContractViolationError<\n TItems,\n Simplify<I extends never ? never : I>\n >\n : Simplify<I>\n : never;\n\n// Optional-arg tuple helper for nicer ergonomics\nexport type InputArg<TItems extends readonly unknown[]> = [\n InferInputOrViolationFromContracts<TItems>,\n] extends [void]\n ? []\n : [InferInputOrViolationFromContracts<TItems>];\n\n// Optional: guard to surface collisions at the tags argument position\nexport type InputCollisionGuard<TItems extends readonly unknown[]> =\n IsImpossibleIntersection<ContractsIntersectionInputs<TItems>> extends true\n ? InputContractViolationError<\n TItems,\n Simplify<ContractsIntersectionInputs<TItems>>\n >\n : unknown;\n\n// Mirrored inferred-output helper\nexport type InferOutputOrViolationFromContracts<\n TItems extends readonly unknown[],\n> =\n HasOutputContracts<TItems> extends false\n ? unknown\n : ContractsIntersectionOutputs<TItems> extends infer O\n ? IsImpossibleIntersection<O> extends true\n ? OutputContractViolationError<\n TItems,\n Simplify<O extends never ? never : O>\n >\n : Simplify<O>\n : never;\n\n// Back-compat aliases with your original API\n/** @deprecated Use ExtractOutputTypeFromContracts instead */\nexport type ExtractTagsWithNonVoidReturnTypeFromTags<TTags extends TagType[]> =\n ExtractOutputTypeFromContracts<TTags>;\n\n/** @deprecated Use EnsureOutputSatisfiesContracts instead */\nexport type EnsureResponseSatisfiesContracts<\n TTags extends TagType[],\n TResponse,\n> = EnsureOutputSatisfiesContracts<TTags, TResponse>;\n","import {\n DependencyMapType,\n DependencyValuesType,\n ResourceDependencyValuesType,\n} from \"./utilities\";\nimport { IResource } from \"./resource\";\nimport { ITask } from \"./task\";\nimport { IHook } from \"./hook\";\nimport { ITaskMiddleware } from \"./taskMiddleware\";\nimport { IResourceMiddleware } from \"./resourceMiddleware\";\nimport { IEvent } from \"./event\";\nimport { IEventDefinition } from \"./event\";\nimport { TaskLocalInterceptor } from \"./utilities\";\n\nexport enum HookDependencyState {\n Pending = \"pending\",\n Computing = \"computing\",\n Ready = \"ready\",\n}\n\nexport type ResourceStoreElementType<\n C = any,\n V extends Promise<any> = any,\n D extends DependencyMapType = {},\n TContext = any,\n> = {\n resource: IResource<C, V, D, TContext>;\n computedDependencies?: ResourceDependencyValuesType<D>;\n config: C;\n value: V;\n context: TContext;\n isInitialized?: boolean;\n};\n\nexport type TaskStoreElementType<\n Input = any,\n Output extends Promise<any> = any,\n D extends DependencyMapType = any,\n> = {\n task: ITask<Input, Output, D>;\n computedDependencies: DependencyValuesType<D>;\n isInitialized: boolean;\n interceptors?: Array<TaskLocalInterceptor<any, any>>;\n};\n\nexport type HookStoreElementType<\n D extends DependencyMapType = any,\n TOn extends \"*\" | IEventDefinition = any,\n> = {\n hook: IHook<D, TOn>;\n computedDependencies: DependencyValuesType<D>;\n dependencyState: HookDependencyState;\n};\n\nexport type TaskMiddlewareStoreElementType<\n TDeps extends DependencyMapType = any,\n> = {\n middleware: ITaskMiddleware<any, any, any, TDeps>;\n computedDependencies: DependencyValuesType<TDeps>;\n isInitialized: boolean;\n};\n\nexport type ResourceMiddlewareStoreElementType<\n TDeps extends DependencyMapType = any,\n> = {\n middleware: IResourceMiddleware<any, any, any, TDeps>;\n computedDependencies: DependencyValuesType<TDeps>;\n isInitialized: boolean;\n};\n\nexport type EventStoreElementType = {\n event: IEvent<any>;\n};\n","/**\n * Type guard and utility functions for checking definition types.\n */\nimport {\n ITask,\n IResource,\n IResourceWithConfig,\n ITaskMiddleware,\n IResourceMiddleware,\n IEvent,\n symbolEvent,\n symbolTask,\n symbolPhantomTask,\n symbolHook,\n symbolResourceWithConfig,\n symbolResource,\n symbolTaskMiddleware,\n symbolResourceMiddleware,\n IHook,\n IOptionalDependency,\n symbolOptionalDependency,\n symbolTag,\n ITag,\n IPhantomTask,\n} from \"../defs\";\nimport { IErrorHelper } from \"../types/error\";\nimport { symbolAsyncContext, symbolError } from \"../types/symbols\";\nimport type { IAsyncContext } from \"../types/asyncContext\";\n\n/**\n * Type guard: checks if a definition is a Task.\n * @param definition - Any value to test.\n * @returns True when `definition` is a branded Task.\n */\nexport function isTask(definition: any): definition is ITask {\n return definition && definition[symbolTask];\n}\n\n/** Type guard: checks if a definition is a Phantom Task. */\nexport function isPhantomTask(definition: any): definition is IPhantomTask {\n return (\n definition &&\n definition[symbolTask] &&\n Boolean(definition[symbolPhantomTask])\n );\n}\n\n/**\n * Type guard: checks if a definition is a Resource.\n * @param definition - Any value to test.\n * @returns True when `definition` is a branded Resource.\n */\nexport function isResource(definition: any): definition is IResource {\n return definition && definition[symbolResource];\n}\n\n/**\n * Type guard: checks if a definition is a Resource that carries config via `.with()`.\n * @param definition - Any value to test.\n * @returns True when `definition` is a branded ResourceWithConfig.\n */\nexport function isResourceWithConfig(\n definition: any,\n): definition is IResourceWithConfig {\n return definition && definition[symbolResourceWithConfig];\n}\n\n/**\n * Type guard: checks if a definition is an Event.\n * @param definition - Any value to test.\n * @returns True when `definition` is a branded Event.\n */\nexport function isEvent(definition: any): definition is IEvent {\n return definition && definition[symbolEvent];\n}\n\n/** Type guard: checks if a definition is a Hook. */\nexport function isHook(definition: any): definition is IHook {\n return definition && definition[symbolHook];\n}\n\n/**\n * Type guard: checks if a definition is a Middleware.\n * @param definition - Any value to test.\n * @returns True when `definition` is a branded Middleware.\n */\nexport function isTaskMiddleware(\n definition: any,\n): definition is ITaskMiddleware {\n return definition && definition[symbolTaskMiddleware];\n}\n\nexport function isResourceMiddleware(\n definition: any,\n): definition is IResourceMiddleware {\n return definition && definition[symbolResourceMiddleware];\n}\n\n/**\n * Type guard: checks if a definition is a Tag.\n * @param definition - Any value to test.\n * @returns True when `definition` is a branded Tag.\n */\nexport function isTag(definition: any): definition is ITag {\n return definition && definition[symbolTag];\n}\n\n/** Type guard: checks if a definition is an Optional Dependency wrapper. */\nexport function isOptional(\n definition: any,\n): definition is IOptionalDependency<any> {\n return definition && definition[symbolOptionalDependency];\n}\n\n/** Type guard: checks if a definition is an Error helper. */\nexport function isError(definition: any): definition is IErrorHelper<any> {\n return Boolean(definition && definition[symbolError]);\n}\n\n/** Type guard: checks if a definition is an Async Context. */\nexport function isAsyncContext(\n definition: any,\n): definition is IAsyncContext<any> {\n return Boolean(definition && definition[symbolAsyncContext]);\n}\n","import type { ThrowsList } from \"../types/error\";\nimport { isError } from \"../definers/tools\";\n\ntype ThrowOwner = {\n kind: \"task\" | \"resource\";\n id: string;\n};\n\nfunction invalidThrowsEntryError(owner: ThrowOwner, item: unknown): Error {\n const got =\n item === null\n ? \"null\"\n : Array.isArray(item)\n ? \"array\"\n : typeof item === \"object\"\n ? \"object\"\n : typeof item;\n return new Error(\n `Invalid throws entry for ${owner.kind} ${owner.id}: expected error id string or Error helper, got ${got}`,\n );\n}\n\nfunction toErrorIdList(owner: ThrowOwner, list: ThrowsList): readonly string[] {\n const ids: string[] = [];\n const seen = new Set<string>();\n\n for (const item of list) {\n let id: string;\n if (typeof item === \"string\") {\n if (item.trim().length === 0) {\n throw invalidThrowsEntryError(owner, item);\n }\n id = item;\n } else if (isError(item)) {\n id = item.id;\n if (typeof id !== \"string\" || id.trim().length === 0) {\n throw invalidThrowsEntryError(owner, item);\n }\n } else {\n throw invalidThrowsEntryError(owner, item);\n }\n\n if (seen.has(id)) continue;\n seen.add(id);\n ids.push(id);\n }\n\n return ids;\n}\n\nexport function normalizeThrows(\n owner: ThrowOwner,\n throwsList: ThrowsList | undefined,\n): readonly string[] | undefined {\n if (throwsList === undefined) return undefined;\n return toErrorIdList(owner, throwsList);\n}\n","import type {\n ITask,\n ITaskDefinition,\n DependencyMapType,\n ITaskMeta,\n TagType,\n IOptionalDependency,\n TaskMiddlewareAttachmentType,\n IPhantomTask,\n} from \"../types/task\";\nimport {\n symbolTask,\n symbolFilePath,\n symbolOptionalDependency,\n symbolPhantomTask,\n} from \"../types/symbols\";\nimport { getCallerFile } from \"../tools/getCallerFile\";\nimport { normalizeThrows } from \"../tools/throws\";\n\n/**\n * Define a task.\n * Generates a strongly-typed task object with id, dependencies,\n * middleware, and metadata.\n *\n * @typeParam Input - Input type accepted by the task's `run` function.\n * @typeParam Output - Promise type returned by the `run` function.\n * @typeParam Deps - Dependency map type this task requires.\n * @typeParam TOn - Event type or \"*\" this task listens to.\n * @typeParam TMeta - Arbitrary metadata type carried by the task.\n * @param taskConfig - The task definition config.\n * @returns A branded task definition usable by the runner.\n */\nexport function defineTask<\n Input = undefined,\n Output extends Promise<any> = any,\n Deps extends DependencyMapType = any,\n TMeta extends ITaskMeta = any,\n TTags extends TagType[] = TagType[],\n TMiddleware extends TaskMiddlewareAttachmentType[] =\n TaskMiddlewareAttachmentType[],\n>(\n taskConfig: ITaskDefinition<Input, Output, Deps, TMeta, TTags, TMiddleware>,\n): ITask<Input, Output, Deps, TMeta, TTags, TMiddleware> {\n const filePath = getCallerFile();\n const id = taskConfig.id;\n return {\n [symbolTask]: true,\n [symbolFilePath]: filePath,\n id,\n dependencies: taskConfig.dependencies || ({} as Deps),\n middleware: taskConfig.middleware || ([] as unknown as TMiddleware),\n run: taskConfig.run,\n inputSchema: taskConfig.inputSchema,\n resultSchema: taskConfig.resultSchema,\n meta: taskConfig.meta || ({} as TMeta),\n tags: taskConfig.tags || ([] as unknown as TTags),\n throws: normalizeThrows({ kind: \"task\", id }, taskConfig.throws),\n // autorun,\n optional() {\n return {\n inner: this,\n [symbolOptionalDependency]: true,\n } as IOptionalDependency<\n ITask<Input, Output, Deps, TMeta, TTags, TMiddleware>\n >;\n },\n };\n}\n\ndefineTask.phantom = <Input = undefined, Output extends Promise<any> = any>(\n taskConfig: Omit<ITaskDefinition<Input, Output, any, any, any, any>, \"run\">,\n) => {\n const taskDef = defineTask({\n ...taskConfig,\n run: async (_input: any): Promise<any> => {\n return undefined;\n },\n });\n\n taskDef[symbolPhantomTask] = true;\n\n return taskDef as IPhantomTask<Input, Output, any, any, any, any>;\n};\n","import {\n DependencyMapType,\n IEventDefinition,\n ITaskMeta,\n IHook,\n IHookDefinition,\n symbolHook,\n symbolFilePath,\n} from \"../defs\";\nimport { getCallerFile } from \"../tools/getCallerFile\";\n\n/**\n * Define a hook (event listeners).\n * Same shape as task with mandatory `on` and without `middleware`.\n */\nexport function defineHook<\n D extends DependencyMapType = any,\n TOn extends \"*\" | IEventDefinition<any> | readonly IEventDefinition<any>[] =\n any,\n TMeta extends ITaskMeta = any,\n>(hookDef: IHookDefinition<D, TOn, TMeta>): IHook<D, TOn, TMeta> {\n const filePath = getCallerFile();\n return {\n [symbolHook]: true,\n [symbolFilePath]: filePath,\n id: hookDef.id,\n dependencies: hookDef.dependencies || ({} as D),\n on: hookDef.on,\n order: hookDef.order,\n run: hookDef.run,\n meta: hookDef.meta || ({} as TMeta),\n tags: hookDef.tags || [],\n } as IHook<D, TOn, TMeta>;\n}\n","import { error } from \"./definers/builders/error\";\nimport type { DefaultErrorType } from \"./types/error\";\nimport { detectEnvironment } from \"./platform\";\n\n// Duplicate registration\nexport const duplicateRegistrationError = error<\n { type: string; id: string } & DefaultErrorType\n>(\"runner.errors.duplicateRegistration\")\n .format(\n ({ type, id }) =>\n `${type} \"${id.toString()}\" already registered. You might have used the same 'id' in two different components or you may have registered the same element twice.`,\n )\n .remediation(\n ({ type }) =>\n `Ensure each ${type} has a unique id. If you need the same definition in multiple places, use .fork() to create a copy with a new id.`,\n )\n .build();\n\n// Dependency not found\nexport const dependencyNotFoundError = error<\n { key: string } & DefaultErrorType\n>(\"runner.errors.dependencyNotFound\")\n .format(\n ({ key }) =>\n `Dependency ${key.toString()} not found. Did you forget to register it through a resource?`,\n )\n .remediation(\n ({ key }) =>\n `Register the dependency \"${key.toString()}\" in a parent resource using .register([${key.toString()}]). If the dependency is optional, use .optional() when declaring it.`,\n )\n .build();\n\n// Unknown item type\nexport const unknownItemTypeError = error<{ item: unknown } & DefaultErrorType>(\n \"runner.errors.unknownItemType\",\n)\n .format(\n ({ item }) =>\n `Unknown item type: ${String(\n item,\n )}. Please ensure you are not using different versions of '@bluelibs/runner'`,\n )\n .remediation(\n \"Check that all packages depend on the same version of '@bluelibs/runner'. Run 'npm ls @bluelibs/runner' to detect duplicates.\",\n )\n .build();\n\n// Context error\nexport const contextError = error<{ details?: string } & DefaultErrorType>(\n \"runner.errors.context\",\n)\n .format(({ details }) => details ?? \"Context error\")\n .remediation(\n \"Verify the async context is registered in a parent resource and that .provide() was called before .use(). If the context is optional, use .optional() when declaring the dependency.\",\n )\n .build();\n\n// Circular dependencies\nexport const circularDependenciesError = error<\n { cycles: string[] } & DefaultErrorType\n>(\"runner.errors.circularDependencies\")\n .format(({ cycles }) => {\n const cycleDetails = cycles.map((cycle) => ` • ${cycle}`).join(\"\\n\");\n const hasMiddleware = cycles.some((cycle) => cycle.includes(\"middleware\"));\n\n let guidance = \"\\n\\nTo resolve circular dependencies:\";\n guidance +=\n \"\\n • Consider refactoring to reduce coupling between components\";\n guidance += \"\\n • Extract shared dependencies into separate resources\";\n\n if (hasMiddleware) {\n guidance +=\n \"\\n • For middleware: you can filter out tasks/resources using everywhere(fn)\";\n guidance +=\n \"\\n • Consider using events for communication instead of direct dependencies\";\n }\n\n return `Circular dependencies detected:\\n${cycleDetails}${guidance}`;\n })\n .remediation(\n \"Break the cycle by extracting shared state into a new resource that both sides depend on, or use events for indirect communication.\",\n )\n .build();\n\n// Event not found\nexport const eventNotFoundError = error<{ id: string } & DefaultErrorType>(\n \"runner.errors.eventNotFound\",\n)\n .format(\n ({ id }) =>\n `Event \"${id.toString()}\" not found. Did you forget to register it?`,\n )\n .remediation(\n ({ id }) =>\n `Add the event \"${id.toString()}\" to a parent resource via .register([yourEvent]). Ensure the event definition is built with r.event(\"${id.toString()}\").build().`,\n )\n .build();\n\n// Resource not found\nexport const resourceNotFoundError = error<{ id: string } & DefaultErrorType>(\n \"runner.errors.resourceNotFound\",\n)\n .format(\n ({ id }) =>\n `Resource \"${id.toString()}\" not found. Did you forget to register it or are you using the correct id?`,\n )\n .remediation(\n ({ id }) =>\n `Register the resource \"${id.toString()}\" in a parent resource via .register([yourResource]). Verify the id string matches exactly (ids are case-sensitive).`,\n )\n .build();\n\n// Middleware not registered\nexport const middlewareNotRegisteredError = error<\n {\n type: \"task\" | \"resource\";\n source: string;\n middlewareId: string;\n } & DefaultErrorType\n>(\"runner.errors.middlewareNotRegistered\")\n .format(\n ({ type, source, middlewareId }) =>\n `Middleware inside ${type} \"${source}\" depends on \"${middlewareId}\" but it's not registered. Did you forget to register it?`,\n )\n .remediation(\n ({ middlewareId }) =>\n `Register the middleware \"${middlewareId}\" alongside its consumer in a parent resource via .register([yourMiddleware]).`,\n )\n .build();\n\n// Tag not found\nexport const tagNotFoundError = error<{ id: string } & DefaultErrorType>(\n \"runner.errors.tagNotFound\",\n)\n .format(\n ({ id }) =>\n `Tag \"${id}\" not registered. Did you forget to register it inside a resource?`,\n )\n .remediation(\n ({ id }) =>\n `Register the tag \"${id}\" in a parent resource via .register([yourTag]). Tags must be registered before they can be queried.`,\n )\n .build();\n\n// Locked\nexport const lockedError = error<{ what: string } & DefaultErrorType>(\n \"runner.errors.locked\",\n)\n .format(\n ({ what }) => `Cannot modify the ${what.toString()} when it is locked.`,\n )\n .remediation(\n ({ what }) =>\n `The ${what.toString()} is locked after initialization. Perform all modifications before calling run().`,\n )\n .build();\n\n// Store already initialized\nexport const storeAlreadyInitializedError = error<DefaultErrorType>(\n \"runner.errors.storeAlreadyInitialized\",\n)\n .format(() => \"Store already initialized. Cannot reinitialize.\")\n .remediation(\n \"Do not call run() more than once on the same resource tree. Create a fresh resource if you need a separate runtime.\",\n )\n .build();\n\n// Validation error\nexport const validationError = error<\n {\n subject: string;\n id: string;\n originalError: string | Error;\n } & DefaultErrorType\n>(\"runner.errors.validation\")\n .format(({ subject, id, originalError }) => {\n const errorMessage =\n originalError instanceof Error\n ? originalError.message\n : String(originalError);\n return `${subject} validation failed for ${id.toString()}: ${errorMessage}`;\n })\n .remediation(({ subject, id }) => {\n const lower = subject.toLowerCase();\n const schemaHint = lower.includes(\"input\")\n ? \"inputSchema\"\n : lower.includes(\"config\")\n ? \"configSchema\"\n : lower.includes(\"result\")\n ? \"resultSchema\"\n : \"schema\";\n return `Check the ${subject} passed to \"${id.toString()}\". Ensure it matches the schema defined via .${schemaHint}().`;\n })\n .build();\n\n// Event cycle (runtime)\nexport const eventCycleError = error<\n { path: Array<{ id: string; source: string }> } & DefaultErrorType\n>(\"runner.errors.eventCycle\")\n .format(({ path }) => {\n const chain = path.map((p) => `${p.id}←${p.source}`).join(\" -> \");\n return `Event emission cycle detected:\\n ${chain}\\n\\nBreak the cycle by changing hook logic (avoid mutual emits) or gate with conditions/tags.`;\n })\n .remediation(\n \"Refactor hooks to avoid circular event emissions. Use conditional guards, split events into finer-grained signals, or introduce an intermediate task to break the cycle.\",\n )\n .build();\n\n// Event emission cycles (compile-time/dry-run)\nexport const eventEmissionCycleError = error<\n { cycles: string[] } & DefaultErrorType\n>(\"runner.errors.eventEmissionCycle\")\n .format(({ cycles }) => {\n const list = cycles.map((c) => ` • ${c}`).join(\"\\n\");\n return `Event emission cycles detected between hooks and events:\\n${list}\\n\\nThis was detected at compile time (dry-run). Break the cycle by avoiding mutual emits between hooks or scoping hooks using tags.`;\n })\n .remediation(\n \"Redesign the event/hook graph so no hook emits an event that eventually triggers itself. Use tags or conditional logic to prevent re-entrant emissions.\",\n )\n .build();\n\n// Platform unsupported function\nexport const platformUnsupportedFunctionError = error<\n { functionName: string } & DefaultErrorType\n>(\"runner.errors.platformUnsupportedFunction\")\n .format(\n ({ functionName }) =>\n `Platform function not supported in this environment: ${functionName}. Detected platform: ${detectEnvironment()}.`,\n )\n .remediation(\n ({ functionName }) =>\n `The function \"${functionName}\" requires a Node.js environment. If running in a browser or edge runtime, use a platform-compatible alternative or guard the call with a platform check.`,\n )\n .build();\n\n// Cancellation error (maps to HTTP 499 in exposure)\nexport const cancellationError = error<{ reason?: string } & DefaultErrorType>(\n \"runner.errors.cancellation\",\n)\n .format(({ reason }) => reason || \"Operation cancelled\")\n .remediation(\n \"The operation was cancelled, typically via an AbortController signal. If this is unexpected, check timeout middleware settings or ensure the caller is not aborting prematurely.\",\n )\n .build();\n\n// Tunnel ownership conflict (exclusive owner per task)\nexport const tunnelOwnershipConflictError = error<\n {\n taskId: string;\n currentOwnerId: string;\n attemptedOwnerId: string;\n } & DefaultErrorType\n>(\"runner.errors.tunnelOwnershipConflict\")\n .format(\n ({ taskId, currentOwnerId, attemptedOwnerId }) =>\n `Task \"${taskId}\" is already tunneled by resource \"${currentOwnerId}\". Resource \"${attemptedOwnerId}\" cannot tunnel it again. Ensure each task is owned by a single tunnel client.`,\n )\n .remediation(\n ({ taskId }) =>\n `Each task can only be tunneled by one client. Remove the duplicate tunnel registration for \"${taskId}\" or split the task into separate definitions with distinct ids.`,\n )\n .build();\n\n// Phantom task executed without a matching tunnel route\nexport const phantomTaskNotRoutedError = error<\n { taskId: string } & DefaultErrorType\n>(\"runner.errors.phantomTaskNotRouted\")\n .format(\n ({ taskId }) =>\n `Phantom task \"${taskId}\" is not routed through any tunnel. Ensure a tunnel client selects this task id (or avoid calling the phantom task directly).`,\n )\n .remediation(\n ({ taskId }) =>\n `Configure a tunnel client resource to select \"${taskId}\" so it routes to a remote server. Phantom tasks cannot be executed locally — they only serve as local proxies for remote tasks.`,\n )\n .build();\n\n// Task not registered in Store (internal invariant)\nexport const taskNotRegisteredError = error<\n { taskId: string } & DefaultErrorType\n>(\"runner.errors.taskNotRegistered\")\n .format(\n ({ taskId }) =>\n `Task \"${taskId}\" is not registered in the Store. This is an internal error—ensure the task is registered before execution.`,\n )\n .remediation(\n ({ taskId }) =>\n `Register the task \"${taskId}\" in a parent resource via .register([yourTask]) before calling run(). If this error persists, it may indicate an internal framework bug.`,\n )\n .build();\n\n/** Builder types that require validation before build() */\nexport type BuilderType = \"hook\" | \"task-middleware\" | \"resource-middleware\";\n\n// Builder incomplete (missing required fields)\nexport const builderIncompleteError = error<\n {\n type: BuilderType;\n builderId: string;\n missingFields: string[];\n } & DefaultErrorType\n>(\"runner.errors.builderIncomplete\")\n .format(({ type, builderId, missingFields }) => {\n const typeLabel =\n type === \"hook\"\n ? \"Hook\"\n : type === \"task-middleware\"\n ? \"Task middleware\"\n : \"Resource middleware\";\n return `${typeLabel} \"${builderId}\" is incomplete. Missing required: ${missingFields.join(\", \")}. Call ${missingFields.map((f) => `.${f}()`).join(\" and \")} before .build().`;\n })\n .remediation(\n ({ missingFields }) =>\n `Add the missing builder steps: ${missingFields.map((f) => `.${f}()`).join(\", \")} before calling .build().`,\n )\n .build();\n\nexport function isCancellationError(err: unknown): boolean {\n return cancellationError.is(err);\n}\n\n// Backward-compatible namespace export for external imports (index.ts already re-exports * as Errors from here)\nexport type { IErrorHelper } from \"./types/error\";\n","import {\n DefaultErrorType,\n IErrorDefinition,\n IErrorHelper,\n IErrorDefinitionFinal,\n} from \"../types/error\";\nimport {\n symbolError,\n symbolFilePath,\n symbolOptionalDependency,\n} from \"../types/symbols\";\nimport { getCallerFile } from \"../tools/getCallerFile\";\n\nconst isValidHttpCode = (value: number): boolean =>\n Number.isInteger(value) && value >= 100 && value <= 599;\n\nconst assertHttpCode = (value: number): void => {\n if (!isValidHttpCode(value)) {\n throw new Error(\n `Error httpCode must be an integer between 100 and 599. Received: ${value}`,\n );\n }\n};\n\nexport class RunnerError<\n TData extends DefaultErrorType = DefaultErrorType,\n> extends Error {\n public readonly data!: TData;\n public readonly httpCode?: number;\n public readonly remediation?: string;\n constructor(\n public readonly id: string,\n message: string,\n data: TData,\n httpCode?: number,\n remediation?: string,\n ) {\n super(\n remediation !== undefined\n ? `${message}\\n\\nRemediation: ${remediation}`\n : message,\n );\n this.data = data;\n this.name = id;\n this.httpCode = httpCode;\n this.remediation = remediation;\n }\n}\n\nexport class ErrorHelper<\n TData extends DefaultErrorType = DefaultErrorType,\n> implements IErrorHelper<TData> {\n [symbolError] = true as const;\n [symbolFilePath]: string;\n constructor(\n private readonly definition: IErrorDefinitionFinal<TData>,\n filePath: string,\n ) {\n this[symbolFilePath] = filePath;\n }\n get id(): string {\n return this.definition.id;\n }\n get httpCode(): number | undefined {\n return this.definition.httpCode;\n }\n throw(data: TData): never {\n const parsed = this.definition.dataSchema\n ? this.definition.dataSchema.parse(data)\n : data;\n\n const message = this.definition.format(parsed);\n const remediation =\n typeof this.definition.remediation === \"function\"\n ? this.definition.remediation(parsed)\n : this.definition.remediation;\n throw new RunnerError(\n this.definition.id,\n message,\n parsed,\n this.definition.httpCode,\n remediation,\n );\n }\n is(error: unknown): error is RunnerError<TData> {\n return error instanceof RunnerError && error.name === this.definition.id;\n }\n optional() {\n return {\n inner: this as unknown as IErrorHelper<TData>,\n [symbolOptionalDependency]: true,\n } as const;\n }\n}\n\n/**\n * Create a new error that is going to be used\n * @param definition\n * @returns\n */\nexport function defineError<TData extends DefaultErrorType = DefaultErrorType>(\n definition: IErrorDefinition<TData>,\n filePath?: string,\n) {\n if (definition.httpCode !== undefined) {\n assertHttpCode(definition.httpCode);\n }\n\n if (!definition.format) {\n definition.format = (data) => `${JSON.stringify(data)}`;\n }\n\n const resolvedFilePath = filePath ?? getCallerFile();\n\n return new ErrorHelper<TData>(\n definition as IErrorDefinitionFinal<TData>,\n resolvedFilePath,\n );\n}\n","import type { DefaultErrorType } from \"../../../defs\";\nimport type { BuilderState } from \"./types\";\n\n/**\n * Clones and patches the builder state immutably.\n */\nexport function clone<TData extends DefaultErrorType>(\n s: BuilderState<TData>,\n patch: Partial<BuilderState<TData>>,\n): BuilderState<TData> {\n return Object.freeze({\n ...s,\n ...patch,\n });\n}\n","import type { DefaultErrorType, IErrorMeta } from \"../../../defs\";\nimport { defineError } from \"../../defineError\";\nimport type { ErrorFluentBuilder } from \"./fluent-builder.interface\";\nimport type { BuilderState } from \"./types\";\nimport { clone } from \"./utils\";\n\nconst isValidHttpCode = (value: number): boolean =>\n Number.isInteger(value) && value >= 100 && value <= 599;\n\nconst assertHttpCode = (value: number): void => {\n if (!isValidHttpCode(value)) {\n throw new Error(\n `Error httpCode must be an integer between 100 and 599. Received: ${value}`,\n );\n }\n};\n\n/**\n * Creates an ErrorFluentBuilder from the given state.\n */\nexport function makeErrorBuilder<TData extends DefaultErrorType>(\n state: BuilderState<TData>,\n): ErrorFluentBuilder<TData> {\n const builder: ErrorFluentBuilder<TData> = {\n id: state.id,\n\n httpCode(code: number) {\n assertHttpCode(code);\n const next = clone(state, { httpCode: code });\n return makeErrorBuilder(next);\n },\n\n serialize(fn) {\n const next = clone(state, { serialize: fn });\n return makeErrorBuilder(next);\n },\n\n parse(fn) {\n const next = clone(state, { parse: fn });\n return makeErrorBuilder(next);\n },\n\n dataSchema(schema) {\n const next = clone(state, { dataSchema: schema });\n return makeErrorBuilder(next);\n },\n\n format(fn: (data: TData) => string) {\n const next = clone(state, { format: fn });\n return makeErrorBuilder(next);\n },\n\n remediation(advice: string | ((data: TData) => string)) {\n const next = clone(state, { remediation: advice });\n return makeErrorBuilder(next);\n },\n\n meta<TNewMeta extends IErrorMeta>(m: TNewMeta) {\n const next = clone(state, { meta: m });\n return makeErrorBuilder(next);\n },\n\n build() {\n return defineError<TData>(\n {\n id: state.id,\n httpCode: state.httpCode,\n serialize: state.serialize,\n parse: state.parse,\n dataSchema: state.dataSchema,\n format: state.format,\n remediation: state.remediation,\n meta: state.meta,\n },\n state.filePath,\n );\n },\n };\n\n return builder;\n}\n","import type { DefaultErrorType, IErrorMeta } from \"../../../defs\";\nimport { getCallerFile } from \"../../../tools/getCallerFile\";\nimport { makeErrorBuilder } from \"./fluent-builder\";\nimport type { ErrorFluentBuilder } from \"./fluent-builder.interface\";\nimport type { BuilderState } from \"./types\";\nimport { RunnerError } from \"../../defineError\";\n\nexport * from \"./fluent-builder.interface\";\nexport * from \"./fluent-builder\";\nexport * from \"./types\";\nexport * from \"./utils\";\n\n/**\n * Entry point for creating an error builder.\n */\nexport function errorBuilder<TData extends DefaultErrorType = DefaultErrorType>(\n id: string,\n): ErrorFluentBuilder<TData> {\n const filePath = getCallerFile();\n const initial: BuilderState<TData> = Object.freeze({\n id,\n filePath,\n httpCode: undefined,\n serialize: undefined,\n parse: undefined,\n dataSchema: undefined,\n meta: {} as IErrorMeta,\n });\n\n return makeErrorBuilder(initial);\n}\n\n/**\n * Check if an error is any Runner error (not just a specific one).\n * @param error - The error to check\n * @returns true if the error is a RunnerError instance\n */\nfunction isRunnerError(error: unknown): error is RunnerError {\n return error instanceof RunnerError;\n}\n\nexport const error = Object.assign(errorBuilder, {\n is: isRunnerError,\n});\n","// Isolated loader for Node's AsyncLocalStorage to avoid leaking node: imports into non-node builds\nexport async function loadAsyncLocalStorageClass() {\n // Use require for Jest/Node compatibility - this file is Node-specific anyway\n\n const mod = require(\"node:async_hooks\") as typeof import(\"node:async_hooks\");\n return mod.AsyncLocalStorage;\n}\n","import type { IAsyncLocalStorage, IPlatformAdapter } from \"../types\";\n// no platformUnsupportedFunctionError used here; node has platform support\nimport { loadAsyncLocalStorageClass } from \"./node-als\";\n\nexport class NodePlatformAdapter implements IPlatformAdapter {\n readonly id = \"node\" as const;\n private alsClass: (new <T>() => IAsyncLocalStorage<T>) | undefined;\n\n async init() {\n this.alsClass = (await loadAsyncLocalStorageClass()) as new <\n T,\n >() => IAsyncLocalStorage<T>;\n }\n\n onUncaughtException(handler: (error: Error) => void) {\n const h = (error: Error) => handler(error);\n process.on(\"uncaughtException\", h);\n return () => process.off(\"uncaughtException\", h);\n }\n\n onUnhandledRejection(handler: (reason: unknown) => void) {\n const h = (reason: unknown) => handler(reason);\n process.on(\"unhandledRejection\", h);\n return () => process.off(\"unhandledRejection\", h);\n }\n\n onShutdownSignal(handler: () => void) {\n process.on(\"SIGINT\", handler);\n process.on(\"SIGTERM\", handler);\n return () => {\n process.off(\"SIGINT\", handler);\n process.off(\"SIGTERM\", handler);\n };\n }\n\n exit(code: number) {\n process.exit(code);\n }\n\n getEnv(key: string) {\n return process.env[key];\n }\n\n hasAsyncLocalStorage() {\n return true;\n }\n\n createAsyncLocalStorage<T>(): IAsyncLocalStorage<T> {\n let instance: IAsyncLocalStorage<T> | undefined;\n const ensure = (): IAsyncLocalStorage<T> => {\n if (!this.alsClass) {\n // Lazy-hydrate when init() wasn't awaited.\n let als: (new <U>() => IAsyncLocalStorage<U>) | undefined;\n const forceNoop =\n typeof process !== \"undefined\" &&\n !!process.env?.RUNNER_FORCE_NOOP_ALS;\n if (!forceNoop) {\n try {\n const mod = require(\"async_hooks\");\n als = mod?.AsyncLocalStorage;\n } catch (_) {\n als = undefined;\n }\n }\n\n this.alsClass =\n als ||\n (class NoopAsyncLocalStorage<U> implements IAsyncLocalStorage<U> {\n getStore(): U | undefined {\n return undefined;\n }\n run<V>(_store: U, callback: () => V): V {\n return callback();\n }\n } as new <U>() => IAsyncLocalStorage<U>);\n }\n return (instance ??= new this.alsClass!());\n };\n return {\n getStore: () => ensure().getStore(),\n run: (store: T, callback: () => any) => ensure().run(store, callback),\n };\n }\n\n setTimeout = globalThis.setTimeout;\n clearTimeout = globalThis.clearTimeout;\n}\n","import type {\n IAsyncLocalStorage,\n IPlatformAdapter,\n PlatformId,\n} from \"../types\";\nimport { platformUnsupportedFunctionError } from \"../../errors\";\n\n/**\n * Interface representing a browser-like event target with optional event methods.\n * These are optional because they may not exist in all environments (e.g., Node.js).\n */\ninterface BrowserEventTarget {\n addEventListener?(type: string, listener: EventListener): void;\n removeEventListener?(type: string, listener: EventListener): void;\n}\n\n/**\n * Interface representing a browser document with visibility state.\n */\ninterface BrowserDocument {\n visibilityState?: \"visible\" | \"hidden\" | \"prerender\";\n}\n\n/**\n * Interface for browser global scope with window, document, and env access.\n */\ninterface BrowserGlobalScope extends BrowserEventTarget {\n window?: BrowserEventTarget;\n document?: BrowserDocument;\n __ENV__?: Record<string, string>;\n env?: Record<string, string>;\n}\n\nexport class BrowserPlatformAdapter implements IPlatformAdapter {\n readonly id: PlatformId = \"browser\";\n async init() {}\n\n onUncaughtException(handler: (error: Error) => void) {\n const g = globalThis as unknown as BrowserGlobalScope;\n const target: BrowserEventTarget = g.window ?? g;\n const h: EventListener = (e) => {\n // Pass through the error property if it exists, otherwise the raw event\n // Runtime may receive non-Error values from browser events\n const errorEvent = e as ErrorEvent;\n handler((errorEvent?.error ?? e) as Error);\n };\n target.addEventListener?.(\"error\", h);\n return () => target.removeEventListener?.(\"error\", h);\n }\n\n onUnhandledRejection(handler: (reason: unknown) => void) {\n const g = globalThis as unknown as BrowserGlobalScope;\n const target: BrowserEventTarget = g.window ?? g;\n const wrap: EventListener = (e) =>\n handler((e as PromiseRejectionEvent)?.reason ?? e);\n target.addEventListener?.(\"unhandledrejection\", wrap);\n return () => target.removeEventListener?.(\"unhandledrejection\", wrap);\n }\n\n onShutdownSignal(handler: () => void) {\n const g = globalThis as unknown as BrowserGlobalScope;\n const win: BrowserEventTarget = g.window ?? g;\n const handlers: { before?: EventListener; visibility?: EventListener } = {};\n\n handlers.before = () => handler();\n win.addEventListener?.(\"beforeunload\", handlers.before);\n\n const doc = g.document;\n if (doc && typeof win.addEventListener === \"function\") {\n handlers.visibility = () => {\n if (doc.visibilityState === \"hidden\") handler();\n };\n win.addEventListener?.(\"visibilitychange\", handlers.visibility);\n }\n\n return () => {\n if (handlers.before)\n win.removeEventListener?.(\"beforeunload\", handlers.before);\n if (handlers.visibility)\n win.removeEventListener?.(\"visibilitychange\", handlers.visibility);\n };\n }\n\n exit() {\n platformUnsupportedFunctionError.throw({ functionName: \"exit\" });\n }\n\n getEnv(key: string) {\n const g = globalThis as unknown as BrowserGlobalScope;\n if (g.__ENV__ && typeof g.__ENV__ === \"object\") return g.__ENV__[key];\n if (\n typeof process !== \"undefined\" &&\n (process as unknown as { env: Record<string, string> }).env\n )\n return (process as unknown as { env: Record<string, string> }).env[key];\n if (g.env && typeof g.env === \"object\") return g.env[key];\n return undefined;\n }\n\n hasAsyncLocalStorage() {\n return false;\n }\n\n createAsyncLocalStorage<T>(): IAsyncLocalStorage<T> {\n // Return a wrapper that throws on use; creation itself shouldn't crash callers\n const throwUnsupported = (): never => {\n platformUnsupportedFunctionError.throw({\n functionName: \"createAsyncLocalStorage\",\n });\n // TypeScript knows this is unreachable but we need to satisfy the return type\n /* istanbul ignore next -- unreachable: throw() always throws */\n throw new Error(\"Unreachable\");\n };\n\n return {\n getStore: (): T | undefined => throwUnsupported(),\n run: <R>(_store: T, _callback: () => R): R => throwUnsupported(),\n };\n }\n\n setTimeout = globalThis.setTimeout;\n clearTimeout = globalThis.clearTimeout;\n}\n","import { BrowserPlatformAdapter } from \"./browser\";\n\n// Edge runtimes (workers) are closer to browser: no process, no window/document guarantees.\nexport class EdgePlatformAdapter extends BrowserPlatformAdapter {\n readonly id = \"edge\" as const;\n onShutdownSignal(_handler: () => void) {\n // No reliable shutdown signal in workers; return no-op disposer\n return () => {};\n }\n}\n","import type { IAsyncLocalStorage, IPlatformAdapter } from \"../types\";\nimport { platformUnsupportedFunctionError } from \"../../errors\";\n\n// A generic, non-detecting adapter that uses globalThis listeners and no Node APIs.\nexport class GenericUniversalPlatformAdapter implements IPlatformAdapter {\n readonly id = \"universal\" as const;\n async init() {}\n\n onUncaughtException(handler: (error: any) => void) {\n const tgt = globalThis as unknown as Record<string, any>;\n if (tgt.addEventListener) {\n const h = (e: any) => handler(e?.error ?? e);\n tgt.addEventListener(\"error\", h);\n return () => tgt.removeEventListener?.(\"error\", h);\n }\n return () => {};\n }\n\n onUnhandledRejection(handler: (reason: any) => void) {\n const tgt = globalThis as unknown as Record<string, any>;\n if (tgt.addEventListener) {\n const wrap = (e: any) => handler(e?.reason ?? e);\n tgt.addEventListener(\"unhandledrejection\", wrap);\n return () => tgt.removeEventListener?.(\"unhandledrejection\", wrap);\n }\n return () => {};\n }\n\n onShutdownSignal(handler: () => void) {\n const tgt = globalThis as unknown as Record<string, any>;\n if (tgt.addEventListener) {\n const handlers: { before?: any; visibility?: any } = {};\n handlers.before = (_e?: any) => handler();\n tgt.addEventListener(\"beforeunload\", handlers.before);\n\n const doc = (globalThis as unknown as Record<string, any>).document;\n if (doc) {\n handlers.visibility = () => {\n if (doc.visibilityState === \"hidden\") handler();\n };\n tgt.addEventListener?.(\"visibilitychange\", handlers.visibility);\n }\n\n return () => {\n tgt.removeEventListener?.(\"beforeunload\", handlers.before);\n if (handlers.visibility)\n tgt.removeEventListener?.(\"visibilitychange\", handlers.visibility);\n };\n }\n return () => {};\n }\n\n exit(): void {\n platformUnsupportedFunctionError.throw({ functionName: \"exit\" });\n }\n\n getEnv(key: string): string | undefined {\n const g = globalThis as unknown as Record<string, any>;\n if (g.__ENV__ && typeof g.__ENV__ === \"object\") return g.__ENV__[key];\n if (\n typeof process !== \"undefined\" &&\n (process as unknown as { env: Record<string, string> }).env\n )\n return (process as unknown as { env: Record<string, string> }).env[key];\n if (g.env && typeof g.env === \"object\") return g.env[key];\n return undefined;\n }\n\n hasAsyncLocalStorage(): boolean {\n return false;\n }\n\n createAsyncLocalStorage<T>(): IAsyncLocalStorage<T> {\n // Construct without throw; error only when used\n return {\n getStore: (): any => {\n platformUnsupportedFunctionError.throw({\n functionName: \"createAsyncLocalStorage\",\n });\n },\n run: (_store: any, _callback: () => any): any => {\n platformUnsupportedFunctionError.throw({\n functionName: \"createAsyncLocalStorage\",\n });\n },\n };\n }\n\n setTimeout = globalThis.setTimeout;\n clearTimeout = globalThis.clearTimeout;\n}\n","import type { IPlatformAdapter, PlatformId } from \"../types\";\nimport { BrowserPlatformAdapter } from \"./browser\";\nimport { EdgePlatformAdapter } from \"./edge\";\nimport { NodePlatformAdapter } from \"./node\";\nimport { GenericUniversalPlatformAdapter } from \"./universal-generic\";\n\nexport function detectEnvironment(): PlatformId {\n if (typeof window !== \"undefined\" && typeof document !== \"undefined\") {\n return \"browser\";\n }\n\n const global = globalThis as unknown as {\n process?: { versions?: { node?: string; bun?: string } };\n Deno?: unknown;\n Bun?: unknown;\n importScripts?: unknown;\n WorkerGlobalScope?: new () => any;\n document?: unknown;\n addEventListener?: unknown;\n };\n\n if (global.process?.versions?.node) {\n return \"node\";\n }\n\n if (typeof global.Deno !== \"undefined\") {\n return \"universal\";\n }\n\n if (typeof global.Bun !== \"undefined\" || global.process?.versions?.bun) {\n return \"universal\";\n }\n\n // Heuristics for WebWorker-like environments\n if (\n typeof global.importScripts === \"function\" &&\n typeof window === \"undefined\"\n ) {\n return \"edge\";\n }\n\n if (\n typeof global.WorkerGlobalScope !== \"undefined\" &&\n typeof self !== \"undefined\" &&\n self instanceof global.WorkerGlobalScope\n ) {\n return \"edge\";\n }\n\n return \"universal\";\n}\n\nexport class UniversalPlatformAdapter implements IPlatformAdapter {\n readonly id: PlatformId = \"universal\";\n private inner: IPlatformAdapter | null = null;\n\n async init() {\n this.ensureInner();\n await this.inner!.init();\n }\n\n private ensureInner() {\n if (this.inner) return;\n\n const kind = detectEnvironment();\n const global = globalThis as unknown as {\n document?: unknown;\n addEventListener?: unknown;\n };\n\n if (\n typeof global.document !== \"undefined\" ||\n typeof global.addEventListener === \"function\"\n ) {\n this.inner = new BrowserPlatformAdapter();\n } else {\n switch (kind) {\n case \"node\":\n this.inner = new NodePlatformAdapter();\n break;\n case \"edge\":\n this.inner = new EdgePlatformAdapter();\n break;\n default:\n // Covers \"browser\" (unreachable - would hit first if), \"universal\", and future cases\n this.inner = new GenericUniversalPlatformAdapter();\n }\n }\n }\n\n private get() {\n this.ensureInner();\n return this.inner!;\n }\n\n onUncaughtException(handler: (error: Error) => void) {\n return this.get().onUncaughtException(handler);\n }\n onUnhandledRejection(handler: (reason: unknown) => void) {\n return this.get().onUnhandledRejection(handler);\n }\n onShutdownSignal(handler: () => void) {\n return this.get().onShutdownSignal(handler);\n }\n exit(code: number) {\n return this.get().exit(code);\n }\n getEnv(key: string) {\n return this.get().getEnv(key);\n }\n hasAsyncLocalStorage() {\n return this.get().hasAsyncLocalStorage();\n }\n createAsyncLocalStorage<T>() {\n return this.get().createAsyncLocalStorage<T>();\n }\n setTimeout = globalThis.setTimeout;\n clearTimeout = globalThis.clearTimeout;\n}\n","import type { IPlatformAdapter } from \"./types\";\nimport { NodePlatformAdapter } from \"./adapters/node\";\nimport { BrowserPlatformAdapter } from \"./adapters/browser\";\nimport { EdgePlatformAdapter } from \"./adapters/edge\";\nimport { UniversalPlatformAdapter } from \"./adapters/universal\";\n\ndeclare const __TARGET__: string | undefined;\n\nexport function createPlatformAdapter(): IPlatformAdapter {\n if (typeof __TARGET__ !== \"undefined\") {\n switch (__TARGET__) {\n case \"node\":\n return new NodePlatformAdapter();\n case \"browser\":\n return new BrowserPlatformAdapter();\n case \"edge\":\n return new EdgePlatformAdapter();\n }\n }\n return new UniversalPlatformAdapter();\n}\n","import type {\n IPlatformAdapter,\n IAsyncLocalStorage,\n PlatformId,\n PlatformSetTimeout,\n PlatformClearTimeout,\n} from \"./types\";\nimport { createPlatformAdapter } from \"./factory\";\nimport { detectEnvironment } from \"./adapters/universal\";\nimport { NodePlatformAdapter } from \"./adapters/node\";\nimport { BrowserPlatformAdapter } from \"./adapters/browser\";\nimport { EdgePlatformAdapter } from \"./adapters/edge\";\nimport { UniversalPlatformAdapter } from \"./adapters/universal\";\nimport { GenericUniversalPlatformAdapter } from \"./adapters/universal-generic\";\n\ndeclare const __TARGET__: string | undefined;\n\n// Keep legacy names but delegate to new adapters\nlet platformInstance: IPlatformAdapter | null = null;\nlet detectedEnvironment: PlatformId | null = null;\n\nexport { detectEnvironment };\n\nexport function getPlatform(): IPlatformAdapter {\n if (!platformInstance) {\n platformInstance = createPlatformAdapter();\n detectedEnvironment = platformInstance.id;\n }\n return platformInstance;\n}\n\nexport function setPlatform(adapter: IPlatformAdapter): void {\n platformInstance = adapter;\n detectedEnvironment = adapter.id;\n}\n\nexport function resetPlatform(): void {\n platformInstance = null;\n detectedEnvironment = null;\n}\n\nexport function getDetectedEnvironment(): PlatformId {\n if (detectedEnvironment) return detectedEnvironment;\n // Prefer build-time target when available (node/browser/edge bundles)\n if (typeof __TARGET__ !== \"undefined\" && __TARGET__ !== \"universal\") {\n detectedEnvironment = __TARGET__ as PlatformId;\n return detectedEnvironment;\n }\n // For undefined or explicit universal target, use runtime detection\n detectedEnvironment = detectEnvironment();\n return detectedEnvironment;\n}\n\nexport function isNode(): boolean {\n if (typeof __TARGET__ !== \"undefined\" && __TARGET__ !== \"universal\") {\n return __TARGET__ === \"node\";\n }\n // Use fresh runtime detection to allow tests to mutate globals within a single run\n return detectEnvironment() === \"node\";\n}\n\nexport function isBrowser(): boolean {\n if (typeof __TARGET__ !== \"undefined\" && __TARGET__ !== \"universal\") {\n return __TARGET__ === \"browser\";\n }\n // Use fresh runtime detection to allow tests to mutate globals within a single run\n return detectEnvironment() === \"browser\";\n}\n\nexport function isUniversal(): boolean {\n if (typeof __TARGET__ !== \"undefined\" && __TARGET__ !== \"universal\") {\n return __TARGET__ === \"universal\";\n }\n // Use fresh runtime detection to allow tests to mutate globals within a single run\n return detectEnvironment() === \"universal\";\n}\n\nexport type {\n IPlatformAdapter,\n IAsyncLocalStorage,\n PlatformId,\n PlatformSetTimeout,\n PlatformClearTimeout,\n} from \"./types\";\n\n// Backwards-compat adapter preserving old constructor(env) signature used in tests\nexport class PlatformAdapter implements IPlatformAdapter {\n private inner: IPlatformAdapter;\n readonly env: PlatformId;\n readonly id: PlatformId;\n readonly setTimeout: PlatformSetTimeout;\n readonly clearTimeout: PlatformClearTimeout;\n\n constructor(env?: PlatformId) {\n const kind = env ?? detectEnvironment();\n this.env = kind as PlatformId;\n switch (kind) {\n case \"node\":\n this.inner = new NodePlatformAdapter();\n break;\n case \"browser\":\n this.inner = new BrowserPlatformAdapter();\n break;\n case \"edge\":\n this.inner = new EdgePlatformAdapter();\n break;\n case \"universal\":\n // Force generic, non-detecting behavior expected by tests\n this.inner = new GenericUniversalPlatformAdapter();\n break;\n default:\n this.inner = new UniversalPlatformAdapter();\n }\n this.id = this.inner.id;\n this.setTimeout = this.inner.setTimeout;\n this.clearTimeout = this.inner.clearTimeout;\n }\n\n async init() {\n return this.inner.init();\n }\n onUncaughtException(handler: (error: any) => void) {\n return this.inner.onUncaughtException(handler);\n }\n onUnhandledRejection(handler: (reason: any) => void) {\n return this.inner.onUnhandledRejection(handler);\n }\n onShutdownSignal(handler: () => void) {\n return this.inner.onShutdownSignal(handler);\n }\n exit(code: number) {\n return this.inner.exit(code);\n }\n getEnv(key: string) {\n return this.inner.getEnv(key);\n }\n hasAsyncLocalStorage() {\n return this.inner.hasAsyncLocalStorage();\n }\n createAsyncLocalStorage<T>(): IAsyncLocalStorage<T> {\n return this.inner.createAsyncLocalStorage<T>();\n }\n}\n","import type {\n DependencyMapType,\n IResource,\n RegisterableItems,\n ResourceForkOptions,\n} from \"../types/resource\";\nimport { isOptional, isResource, isResourceWithConfig } from \"./tools\";\n\ntype AnyResource = IResource<any, any, any, any, any, any, any>;\n\nexport type ResourceRegisterList =\n | Array<RegisterableItems>\n | ((config: any) => Array<RegisterableItems>)\n | undefined;\n\nfunction resolveReId(\n forkId: string,\n options: ResourceForkOptions | undefined,\n): (id: string) => string {\n const fallback = (id: string) => `${forkId}.${id}`;\n const reId = options?.reId ?? fallback;\n return (id: string) => {\n const next = reId(id);\n if (typeof next !== \"string\" || next.length === 0) {\n throw new Error(`fork(reId) must return a non-empty string for \"${id}\"`);\n }\n return next;\n };\n}\n\ntype DependenciesList<TConfig, TDeps extends DependencyMapType> =\n | TDeps\n | ((config: TConfig) => TDeps)\n | undefined;\n\nfunction remapResourceDependenciesInObject<TDeps extends DependencyMapType>(\n deps: TDeps,\n options: {\n getForkedResourceByBaseId: (id: string) => IResource | undefined;\n },\n): TDeps {\n const remapObject = (deps: TDeps): TDeps => {\n const out: Record<string, unknown> = { ...deps };\n for (const [key, value] of Object.entries(deps)) {\n if (isOptional(value)) {\n const inner = value.inner;\n if (isResource(inner)) {\n const forked = options.getForkedResourceByBaseId(inner.id);\n if (forked) {\n out[key] = { ...value, inner: forked };\n }\n }\n continue;\n }\n\n if (isResource(value)) {\n const forked = options.getForkedResourceByBaseId(value.id);\n if (forked) {\n out[key] = forked;\n }\n }\n }\n return out as TDeps;\n };\n\n return remapObject(deps);\n}\n\nfunction toResourceOnlyRegisterItems(\n items: Array<RegisterableItems>,\n): Array<\n | { kind: \"resource\"; resource: AnyResource }\n | { kind: \"withConfig\"; resource: AnyResource; config: unknown }\n> {\n const out: Array<\n | { kind: \"resource\"; resource: AnyResource }\n | { kind: \"withConfig\"; resource: AnyResource; config: unknown }\n > = [];\n for (const item of items) {\n if (isResourceWithConfig(item)) {\n out.push({\n kind: \"withConfig\",\n resource: item.resource,\n config: item.config,\n });\n continue;\n }\n if (isResource(item)) {\n out.push({ kind: \"resource\", resource: item });\n continue;\n }\n }\n return out;\n}\n\nfunction createDeepForkContext(\n forkId: string,\n options: ResourceForkOptions | undefined,\n) {\n const reId = resolveReId(forkId, options);\n const forkedResourceByBaseId = new Map<string, AnyResource>();\n\n const ensureForked = (base: AnyResource): AnyResource => {\n const cached = forkedResourceByBaseId.get(base.id);\n if (cached) return cached;\n\n // Create the fork without any register changes, then patch register+deps\n // using the shared deep-fork context (so sibling dependencies can be remapped).\n const forked = base.fork(reId(base.id), { register: \"drop\" });\n forkedResourceByBaseId.set(base.id, forked);\n\n const baseRegister = base.register;\n\n const ensureForkedForRegisterConfig = (config: any) => {\n const items =\n typeof baseRegister === \"function\"\n ? baseRegister(config)\n : baseRegister;\n for (const candidate of toResourceOnlyRegisterItems(items)) {\n ensureForked(candidate.resource);\n }\n return items;\n };\n\n const mapRegisterItems = (items: Array<RegisterableItems>) => {\n const resourceItems = toResourceOnlyRegisterItems(items);\n const out: Array<RegisterableItems> = [];\n for (const candidate of resourceItems) {\n if (candidate.kind === \"resource\") {\n out.push(ensureForked(candidate.resource));\n continue;\n }\n out.push(ensureForked(candidate.resource).with(candidate.config));\n }\n return out;\n };\n\n forked.register =\n typeof baseRegister === \"function\"\n ? (config: any) => {\n const items = ensureForkedForRegisterConfig(config);\n return mapRegisterItems(items);\n }\n : (() => {\n ensureForkedForRegisterConfig(undefined);\n return mapRegisterItems(baseRegister);\n })();\n\n const baseDependencies = base.dependencies;\n const remapDepsObject = (deps: DependencyMapType) =>\n remapResourceDependenciesInObject(deps, {\n getForkedResourceByBaseId: (id) => forkedResourceByBaseId.get(id),\n });\n\n if (!baseDependencies) {\n forked.dependencies = baseDependencies;\n } else {\n // Always expose dependencies as a function in deep mode so remapping is order-independent\n // (and so config-dependent register lists can influence what gets remapped).\n forked.dependencies = (config: any) => {\n ensureForkedForRegisterConfig(config);\n const deps =\n typeof baseDependencies === \"function\"\n ? baseDependencies(config)\n : baseDependencies;\n return remapDepsObject(deps);\n };\n }\n\n return forked;\n };\n\n const ensureForkedForRegisterItems = (items: Array<RegisterableItems>) => {\n for (const candidate of toResourceOnlyRegisterItems(items)) {\n ensureForked(candidate.resource);\n }\n };\n\n const mapRegisterItems = (items: Array<RegisterableItems>) => {\n ensureForkedForRegisterItems(items);\n const resourceItems = toResourceOnlyRegisterItems(items);\n const out: Array<RegisterableItems> = [];\n for (const candidate of resourceItems) {\n if (candidate.kind === \"resource\") {\n out.push(ensureForked(candidate.resource));\n continue;\n }\n out.push(ensureForked(candidate.resource).with(candidate.config));\n }\n return out;\n };\n\n const remapDependencies = <TConfig, TDeps extends DependencyMapType>(\n dependencies: DependenciesList<TConfig, TDeps>,\n ): DependenciesList<TConfig, TDeps> => {\n if (!dependencies) return dependencies;\n\n const remapObj = (deps: TDeps) =>\n remapResourceDependenciesInObject(deps, {\n getForkedResourceByBaseId: (id) => forkedResourceByBaseId.get(id),\n });\n\n if (typeof dependencies === \"function\") {\n return (config: TConfig) => remapObj(dependencies(config));\n }\n return remapObj(dependencies);\n };\n\n return {\n reId,\n ensureForkedForRegisterItems,\n mapRegisterItems,\n remapDependencies,\n getForkedResourceByBaseId: (id: string) => forkedResourceByBaseId.get(id),\n };\n}\n\nexport function resolveForkedRegisterAndDependencies<\n TConfig,\n TDeps extends DependencyMapType,\n>(params: {\n register: ResourceRegisterList;\n dependencies: DependenciesList<TConfig, TDeps>;\n forkId: string;\n options: ResourceForkOptions | undefined;\n}): {\n register: ResourceRegisterList;\n dependencies: DependenciesList<TConfig, TDeps>;\n} {\n const { register, dependencies, forkId, options } = params;\n\n const mode = options?.register ?? \"keep\";\n if (mode === \"drop\") {\n return { register: [], dependencies };\n }\n if (mode !== \"deep\") {\n return { register, dependencies };\n }\n if (!register) {\n return { register, dependencies };\n }\n\n const ctx = createDeepForkContext(forkId, options);\n\n if (typeof register === \"function\") {\n return {\n register: (config: TConfig) => {\n const baseItems = register(config);\n return ctx.mapRegisterItems(baseItems);\n },\n dependencies: dependencies\n ? (config: TConfig) => {\n const baseItems = register(config);\n ctx.ensureForkedForRegisterItems(baseItems);\n\n const baseDeps =\n typeof dependencies === \"function\"\n ? dependencies(config)\n : dependencies;\n return remapResourceDependenciesInObject(baseDeps, {\n getForkedResourceByBaseId: ctx.getForkedResourceByBaseId,\n }) as unknown as TDeps;\n }\n : dependencies,\n };\n }\n\n ctx.ensureForkedForRegisterItems(register);\n return {\n register: ctx.mapRegisterItems(register),\n dependencies: ctx.remapDependencies(dependencies),\n };\n}\n","import type {\n IResource,\n IResourceDefinition,\n DependencyMapType,\n IResourceMeta,\n TagType,\n IOptionalDependency,\n ResourceMiddlewareAttachmentType,\n IResourceWithConfig,\n ResourceForkOptions,\n} from \"../types/resource\";\nimport {\n symbolForkedFrom,\n symbolResource,\n symbolFilePath,\n symbolOptionalDependency,\n symbolResourceWithConfig,\n} from \"../types/symbols\";\nimport { validationError } from \"../errors\";\nimport { getCallerFile } from \"../tools/getCallerFile\";\nimport { normalizeThrows } from \"../tools/throws\";\nimport { resolveForkedRegisterAndDependencies } from \"./resourceFork\";\n\nexport function defineResource<\n TConfig = void,\n TValue extends Promise<any> = Promise<any>,\n TDeps extends DependencyMapType = {},\n TPrivate = any,\n TMeta extends IResourceMeta = any,\n TTags extends TagType[] = TagType[],\n TMiddleware extends ResourceMiddlewareAttachmentType[] =\n ResourceMiddlewareAttachmentType[],\n>(\n constConfig: IResourceDefinition<\n TConfig,\n TValue,\n TDeps,\n TPrivate,\n any,\n any,\n TMeta,\n TTags,\n TMiddleware\n >,\n): IResource<TConfig, TValue, TDeps, TPrivate, TMeta, TTags, TMiddleware> {\n /**\n * Define a resource.\n * Produces a strongly-typed resource with id, registration hooks,\n * and optional config schema.\n *\n * - If `id` is omitted, an anonymous, file-based id is generated (resource or index flavored).\n * - Provides `.with(config)` for config-bound registration with optional runtime validation.\n *\n * @typeParam TConfig - Configuration type accepted by the resource.\n * @typeParam TValue - Promise type resolved by the resource `init`.\n * @typeParam TDeps - Dependency map type this resource requires.\n * @typeParam TPrivate - Private context type exposed to middleware during init.\n * @typeParam TMeta - Arbitrary metadata type carried by the resource.\n * @param constConfig - The resource definition config.\n * @returns A branded resource definition usable by the runner.\n */\n const filePath: string = constConfig[symbolFilePath] || getCallerFile();\n const id = constConfig.id;\n\n return {\n [symbolResource]: true,\n [symbolFilePath]: filePath,\n id,\n dependencies: constConfig.dependencies,\n dispose: constConfig.dispose,\n register: constConfig.register || [],\n overrides: constConfig.overrides || [],\n init: constConfig.init,\n context: constConfig.context,\n configSchema: constConfig.configSchema,\n resultSchema: constConfig.resultSchema,\n tags: constConfig.tags || ([] as unknown as TTags),\n throws: normalizeThrows({ kind: \"resource\", id }, constConfig.throws),\n with: function (config: TConfig) {\n // Validate config with schema if provided (fail fast)\n if (constConfig.configSchema) {\n try {\n config = constConfig.configSchema.parse(config);\n } catch (error) {\n validationError.throw({\n subject: \"Resource config\",\n id,\n originalError:\n error instanceof Error ? error : new Error(String(error)),\n });\n }\n }\n\n return {\n [symbolResourceWithConfig]: true,\n id: this.id,\n resource: this,\n config,\n } satisfies IResourceWithConfig<\n TConfig,\n TValue,\n TDeps,\n TPrivate,\n TMeta,\n TTags,\n TMiddleware\n >;\n },\n\n meta: (constConfig.meta || {}) as TMeta,\n middleware: constConfig.middleware || ([] as unknown as TMiddleware),\n optional() {\n return {\n inner: this,\n [symbolOptionalDependency]: true,\n } as IOptionalDependency<\n IResource<TConfig, TValue, TDeps, TPrivate, TMeta, TTags, TMiddleware>\n >;\n },\n fork(newId: string, options?: ResourceForkOptions) {\n const forkCallerFilePath = getCallerFile();\n const forkedParts = resolveForkedRegisterAndDependencies({\n register: constConfig.register,\n dependencies: constConfig.dependencies,\n forkId: newId,\n options,\n });\n const forked = defineResource({\n ...constConfig,\n id: newId,\n register: forkedParts.register,\n dependencies: forkedParts.dependencies,\n [symbolFilePath]: forkCallerFilePath,\n });\n forked[symbolForkedFrom] = {\n fromId: id,\n };\n return forked;\n },\n };\n}\n","import {\n IEvent,\n IEventDefinition,\n symbolEvent,\n symbolFilePath,\n symbolOptionalDependency,\n IOptionalDependency,\n} from \"../defs\";\nimport { getCallerFile } from \"../tools/getCallerFile\";\n\nexport function defineEvent<TPayload = void>(\n config: IEventDefinition<TPayload>,\n): IEvent<TPayload> {\n const callerFilePath = getCallerFile();\n const eventConfig = config;\n return {\n ...eventConfig,\n id: eventConfig.id,\n [symbolFilePath]: callerFilePath,\n [symbolEvent]: true, // This is a workaround\n tags: eventConfig.tags || [],\n parallel: eventConfig.parallel,\n optional() {\n return {\n inner: this,\n [symbolOptionalDependency]: true,\n } as IOptionalDependency<IEvent<TPayload>>;\n },\n };\n}\n","export function mergeMiddlewareConfig<TConfig>(\n base: TConfig,\n next: TConfig,\n): TConfig {\n const baseIsPlainObject =\n !!base && typeof base === \"object\" && !Array.isArray(base);\n const nextIsPlainObject =\n !!next && typeof next === \"object\" && !Array.isArray(next);\n\n // Preserve identity for config objects when the base config is empty.\n // This enables patterns like \"share resources for the same config object\"\n // (eg: concurrency semaphores) without relying on callers to reuse the same\n // configured middleware instance.\n if (\n baseIsPlainObject &&\n nextIsPlainObject &&\n Object.keys(base).length === 0\n ) {\n return next;\n }\n\n if (baseIsPlainObject && nextIsPlainObject) {\n return {\n ...(base as unknown as Record<string, unknown>),\n ...(next as unknown as Record<string, unknown>),\n } as TConfig;\n }\n\n return next;\n}\n","import type {\n ITaskMiddleware,\n ITaskMiddlewareDefinition,\n DependencyMapType,\n ITaskMiddlewareConfigured,\n} from \"../types/taskMiddleware\";\nimport {\n symbolTaskMiddleware,\n symbolFilePath,\n symbolMiddlewareConfigured,\n} from \"../types/symbols\";\nimport { validationError } from \"../errors\";\nimport { getCallerFile } from \"../tools/getCallerFile\";\nimport { mergeMiddlewareConfig } from \"./middlewareConfig\";\n\nexport function defineTaskMiddleware<\n TConfig = any,\n TEnforceInputContract = void,\n TEnforceOutputContract = void,\n TDependencies extends DependencyMapType = any,\n>(\n middlewareDef: ITaskMiddlewareDefinition<\n TConfig,\n TEnforceInputContract,\n TEnforceOutputContract,\n TDependencies\n >,\n): ITaskMiddleware<\n TConfig,\n TEnforceInputContract,\n TEnforceOutputContract,\n TDependencies\n> {\n const filePath = getCallerFile();\n const base = {\n [symbolFilePath]: filePath,\n [symbolTaskMiddleware]: true,\n config: {} as TConfig,\n configSchema: middlewareDef.configSchema,\n ...middlewareDef,\n dependencies: middlewareDef.dependencies || ({} as TDependencies),\n } as ITaskMiddleware<\n TConfig,\n TEnforceInputContract,\n TEnforceOutputContract,\n TDependencies\n >;\n\n const wrap = (\n obj: ITaskMiddleware<\n TConfig,\n TEnforceInputContract,\n TEnforceOutputContract,\n TDependencies\n > & {\n [symbolMiddlewareConfigured]?: true;\n },\n ): ITaskMiddleware<\n TConfig,\n TEnforceInputContract,\n TEnforceOutputContract,\n TDependencies\n > => {\n return {\n ...obj,\n with: (config: TConfig) => {\n if (obj.configSchema) {\n try {\n config = obj.configSchema.parse(config);\n } catch (error) {\n validationError.throw({\n subject: \"Middleware config\",\n id: obj.id,\n originalError:\n error instanceof Error ? error : new Error(String(error)),\n });\n }\n }\n return wrap({\n ...obj,\n [symbolMiddlewareConfigured]: true,\n config: mergeMiddlewareConfig(obj.config as TConfig, config),\n } satisfies ITaskMiddlewareConfigured<\n TConfig,\n TEnforceInputContract,\n TEnforceOutputContract,\n TDependencies\n >);\n },\n } as ITaskMiddleware<\n TConfig,\n TEnforceInputContract,\n TEnforceOutputContract,\n TDependencies\n >;\n };\n\n return wrap(base);\n}\n","import {\n IResourceMiddleware,\n IResourceMiddlewareDefinition,\n DependencyMapType,\n symbolFilePath,\n symbolResourceMiddleware,\n symbolMiddlewareConfigured,\n IResourceMiddlewareConfigured,\n} from \"../defs\";\nimport { validationError } from \"../errors\";\nimport { getCallerFile } from \"../tools/getCallerFile\";\nimport { mergeMiddlewareConfig } from \"./middlewareConfig\";\n\nexport function defineResourceMiddleware<\n TConfig = any,\n TEnforceInputContract = void,\n TEnforceOutputContract = void,\n TDependencies extends DependencyMapType = any,\n>(\n middlewareDef: IResourceMiddlewareDefinition<\n TConfig,\n TEnforceInputContract,\n TEnforceOutputContract,\n TDependencies\n >,\n): IResourceMiddleware<\n TConfig,\n TEnforceInputContract,\n TEnforceOutputContract,\n TDependencies\n> {\n const filePath = getCallerFile();\n const base = {\n [symbolFilePath]: filePath,\n [symbolResourceMiddleware]: true,\n config: {} as TConfig,\n configSchema: middlewareDef.configSchema,\n ...middlewareDef,\n dependencies: middlewareDef.dependencies || ({} as TDependencies),\n } as IResourceMiddleware<\n TConfig,\n TEnforceInputContract,\n TEnforceOutputContract,\n TDependencies\n >;\n\n const wrap = (\n obj: IResourceMiddleware<\n TConfig,\n TEnforceInputContract,\n TEnforceOutputContract,\n TDependencies\n > & {\n [symbolMiddlewareConfigured]?: true;\n },\n ): IResourceMiddleware<\n TConfig,\n TEnforceInputContract,\n TEnforceOutputContract,\n TDependencies\n > => {\n return {\n ...obj,\n with: (config: TConfig) => {\n if (obj.configSchema) {\n try {\n config = obj.configSchema.parse(config);\n } catch (error) {\n validationError.throw({\n subject: \"Middleware config\",\n id: obj.id,\n originalError: error as Error,\n });\n }\n }\n return wrap({\n ...obj,\n [symbolMiddlewareConfigured]: true,\n config: mergeMiddlewareConfig(obj.config as TConfig, config),\n } satisfies IResourceMiddlewareConfigured<\n TConfig,\n TEnforceInputContract,\n TEnforceOutputContract,\n TDependencies\n >);\n },\n } as IResourceMiddleware<\n TConfig,\n TEnforceInputContract,\n TEnforceOutputContract,\n TDependencies\n >;\n };\n\n return wrap(base);\n}\n","import {\n ITask,\n IResource,\n ITaskMiddleware,\n IResourceMiddleware,\n IHook,\n} from \"../defs\";\n\n/**\n * Override helper that preserves the original `id` and returns the same type.\n * You can override any property except `id`. The override is shallow-merged over the base.\n *\n * @param base - The base definition to override.\n * @param patch - Properties to override (except `id`).\n * @returns A definition of the same kind with overrides applied.\n */\ntype OverridePatch<TBase> = Readonly<\n TBase extends IHook<any, any, any>\n ? Omit<Partial<TBase>, \"id\" | \"on\">\n : Omit<Partial<TBase>, \"id\">\n>;\n\nexport function defineOverride<\n TBase extends\n | ITask<any, any, any, any, any, any>\n | IResource<any, any, any, any, any, any, any>\n | ITaskMiddleware<any, any, any, any>\n | IResourceMiddleware<any, any, any, any>\n | IHook<any, any, any>,\n>(base: TBase, patch: OverridePatch<TBase>): TBase {\n const overridden = {\n ...base,\n ...patch,\n id: base.id,\n } as TBase;\n\n // Hooks should preserve the event binding identity as well.\n if (\"on\" in base && base.on !== undefined) {\n (overridden as unknown as IHook<any, any, any>).on = (\n base as IHook<any, any, any>\n ).on;\n }\n\n return overridden;\n}\n","import {\n ITag,\n ITagDefinition,\n ITaggable,\n TagType,\n ITagConfigured,\n symbolTag,\n symbolFilePath,\n symbolTagConfigured,\n} from \"../defs\";\nimport { validationError } from \"../errors\";\nimport { getCallerFile } from \"../tools/getCallerFile\";\n\n/**\n * Create a tag definition.\n * - `.with(config)` to create configured instances\n * - `.extract(tags)` to extract this tag from a list of tags or a taggable's meta\n *\n * @typeParam TConfig - Configuration type carried by configured tags.\n * @typeParam TEnforceContract - Optional helper type to enforce a contract when tags are used.\n * @param definition - The tag definition (id).\n * @returns A tag object with helpers to configure and extract.\n */\nexport function defineTag<\n TConfig = void,\n TEnforceInputContract = void,\n TEnforceOutputContract = void,\n>(\n definition: ITagDefinition<\n TConfig,\n TEnforceInputContract,\n TEnforceOutputContract\n >,\n): ITag<TConfig, TEnforceInputContract, TEnforceOutputContract> {\n const id = definition.id;\n const filePath = getCallerFile();\n const foundation = {\n id,\n meta: definition.meta,\n config: definition.config,\n configSchema: definition.configSchema,\n } as ITag<TConfig, TEnforceInputContract, TEnforceOutputContract>;\n\n return {\n ...foundation,\n [symbolTag]: true,\n [symbolFilePath]: filePath,\n /**\n * Specify custom config for this tag which extends the default one if exists\n * @param tagConfig\n * @returns\n */\n with(tagConfig: TConfig) {\n if (definition.configSchema) {\n try {\n tagConfig = definition.configSchema.parse(tagConfig);\n } catch (error) {\n validationError.throw({\n subject: \"Tag config\",\n id: this.id,\n originalError: error as Error,\n });\n }\n }\n let config: TConfig;\n if (typeof tagConfig === \"object\") {\n if (typeof foundation.config === \"object\") {\n config = {\n ...foundation.config,\n ...tagConfig,\n };\n } else {\n config = tagConfig;\n }\n } else {\n config = tagConfig;\n }\n return {\n ...foundation,\n [symbolTagConfigured]: true,\n config,\n } as ITagConfigured<\n TConfig,\n TEnforceInputContract,\n TEnforceOutputContract\n >;\n },\n /**\n * Checks if the tag exists in a taggable or a list of tags.\n * @param target\n * @returns\n */\n exists(target: ITaggable | TagType[]): boolean {\n let currentTags: TagType[] = [];\n if (Array.isArray(target)) {\n currentTags = target;\n } else {\n currentTags = target.tags;\n }\n\n for (const candidate of currentTags) {\n if (candidate.id === id) {\n return true;\n }\n }\n\n return false;\n },\n /**\n * Function which serves 2 purposes, verifying if the task exists, and retrieving its config\n * @param target\n * @returns\n */\n extract(target: ITaggable | TagType[]): TConfig | undefined {\n let currentTags: TagType[] = [];\n if (Array.isArray(target)) {\n currentTags = target;\n } else {\n currentTags = target.tags || [];\n }\n\n for (const candidate of currentTags) {\n if (candidate.id === id) {\n return candidate.config as TConfig;\n }\n }\n\n return;\n },\n } satisfies ITag<TConfig, TEnforceInputContract, TEnforceOutputContract>;\n}\n","import type { IAsyncContext } from \"../../definers/defineAsyncContext\";\nimport { defineTaskMiddleware } from \"../../define\";\n\nexport interface RequireContextMiddlewareConfig {\n context: IAsyncContext<any>;\n}\n\nexport const requireContextTaskMiddleware = defineTaskMiddleware({\n id: \"globals.middleware.task.requireContext\",\n async run({ task, next }, _deps, config: RequireContextMiddlewareConfig) {\n if (!config.context) {\n throw new Error(\n \"Context not available. Did you forget to pass 'context' to the middleware?\",\n );\n }\n\n // This will throw if the context is not available\n const _ctx = config.context.use();\n\n return next(task?.input);\n },\n});\n","/**\n * Type definitions for the Serializer class\n */\n\n/**\n * Definition for a custom type that can be serialized/deserialized\n */\nexport interface TypeDefinition<TInstance = unknown, TSerialized = unknown> {\n /** Unique identifier for the type */\n id: string;\n /** Predicate function to check if an object matches this type */\n is: (obj: unknown) => obj is TInstance;\n /** Function to serialize the object */\n serialize: (obj: TInstance) => TSerialized;\n /** Function to deserialize the data back to the original object */\n deserialize: (data: TSerialized) => TInstance;\n /** Optional factory used to create a placeholder during deserialization */\n create?: () => TInstance;\n /** Serialization strategy: 'value' (inline, no identity) or 'ref' (graph node, identity preserved). Default: 'ref' */\n strategy?: \"value\" | \"ref\";\n}\n\n/** Reference to another object in the serialization */\nexport interface ObjectReference {\n /** Reference to object ID */\n __ref: string;\n}\n\n/**\n * Discriminated union describing the serialized graph payload.\n * Each node captures either an array, plain object, or typed payload.\n */\nexport type SerializedNode =\n | { kind: \"array\"; value: SerializedValue[] }\n | { kind: \"object\"; value: Record<string, SerializedValue> }\n | { kind: \"type\"; type: string; value: SerializedValue };\n\n/**\n * Serialization context for tracking object references\n */\nexport interface SerializationContext {\n /** Map of objects to their IDs */\n objectIds: WeakMap<object, string>;\n /** Counter for generating unique IDs */\n idCounter: number;\n /** Number of graph nodes recorded */\n nodeCount: number;\n /** Nodes collected during serialization (id -> serialized node) */\n nodes: Record<string, SerializedNode>;\n}\n\n/**\n * Deserialization context used when materialising a graph payload.\n */\nexport interface DeserializationContext {\n nodes: Record<string, SerializedNode>;\n resolved: Map<string, unknown>;\n resolving: Set<string>;\n /**\n * Tracks reference ids that were requested while still being resolved.\n * Used to detect circular references that rely on placeholders.\n */\n resolvingRefs: Set<string>;\n}\n\n/**\n * Union type for serialized values\n */\nexport type JsonPrimitive = string | number | boolean | null;\nexport type JsonValue =\n | JsonPrimitive\n | JsonValue[]\n | { [key: string]: JsonValue };\n\nexport interface SerializedTypeRecord {\n __type: string;\n value: SerializedValue;\n}\nexport type SerializedValue =\n | JsonPrimitive\n | ObjectReference\n | SerializedTypeRecord\n | SerializedValue[]\n | { [key: string]: SerializedValue };\n\n/**\n * Envelope saved to disk/wire when serialising a graph payload.\n */\nexport interface SerializedGraph {\n __graph: true;\n version: number;\n root: SerializedValue;\n nodes: Record<string, SerializedNode>;\n}\n\nexport enum SymbolPolicy {\n AllowAll = \"AllowAll\",\n WellKnownOnly = \"WellKnownOnly\",\n Disabled = \"Disabled\",\n}\n\nexport enum SymbolPolicyErrorMessage {\n GlobalSymbolsNotAllowed = \"Global symbols are not allowed\",\n SymbolsNotAllowed = \"Symbols are not allowed\",\n UnsupportedSymbolPolicy = \"Unsupported symbol policy\",\n}\n\n/**\n * Main serializer options\n */\nexport interface SerializerOptions {\n /** Whether to pretty-print JSON (for debugging) */\n pretty?: boolean;\n /** Maximum recursion depth allowed during serialize/deserialize */\n maxDepth?: number;\n /** Restrict deserialization to this list of type IDs */\n allowedTypes?: readonly string[];\n /** Controls which Symbol payloads may be deserialized */\n symbolPolicy?: SymbolPolicy;\n /** Maximum accepted RegExp pattern length during deserialization */\n maxRegExpPatternLength?: number;\n /** Allow RegExp patterns that fail the safety heuristic */\n allowUnsafeRegExp?: boolean;\n}\n\n/**\n * Minimal serializer contract used across transports and persistence.\n * Implementations must be able to round-trip JSON-compatible payloads and\n * should support custom value types via `addType`.\n */\nexport interface SerializerLike {\n stringify(value: unknown): string;\n parse<T = unknown>(text: string): T;\n addType?<TJson = unknown, TInstance = unknown>(\n name: string,\n factory: (json: TJson) => TInstance,\n ): void;\n}\n","import type { TypeDefinition } from \"./types\";\n\nconst INVALID_PAYLOAD_MESSAGE_PREFIX = \"Invalid\";\n\ntype TypedArrayTypeId =\n | \"Int8Array\"\n | \"Uint8Array\"\n | \"Uint8ClampedArray\"\n | \"Int16Array\"\n | \"Uint16Array\"\n | \"Int32Array\"\n | \"Uint32Array\"\n | \"Float32Array\"\n | \"Float64Array\"\n | \"BigInt64Array\"\n | \"BigUint64Array\";\n\nconst typedArrayTypeIds: TypedArrayTypeId[] = [\n \"Int8Array\",\n \"Uint8Array\",\n \"Uint8ClampedArray\",\n \"Int16Array\",\n \"Uint16Array\",\n \"Int32Array\",\n \"Uint32Array\",\n \"Float32Array\",\n \"Float64Array\",\n \"BigInt64Array\",\n \"BigUint64Array\",\n];\n\ninterface RuntimeTypedArrayConstructor {\n readonly BYTES_PER_ELEMENT: number;\n new (buffer: ArrayBufferLike): ArrayBufferView;\n}\n\ninterface RuntimeBufferConstructor {\n from(data: readonly number[]): Uint8Array;\n isBuffer(value: unknown): boolean;\n}\n\nconst getTypedArrayConstructor = (\n typeId: TypedArrayTypeId,\n): RuntimeTypedArrayConstructor | null => {\n const value = (globalThis as Record<string, unknown>)[typeId];\n if (typeof value !== \"function\") {\n return null;\n }\n return value as unknown as RuntimeTypedArrayConstructor;\n};\n\nconst getRuntimeBufferConstructor = (): RuntimeBufferConstructor | null => {\n const value = (globalThis as Record<string, unknown>).Buffer;\n if (typeof value !== \"function\") {\n return null;\n }\n\n const valueRecord = value as unknown as Record<string, unknown>;\n if (\n typeof valueRecord.from !== \"function\" ||\n typeof valueRecord.isBuffer !== \"function\"\n ) {\n return null;\n }\n\n return value as unknown as RuntimeBufferConstructor;\n};\n\nconst isNodeBuffer = (value: unknown): boolean => {\n const runtimeBufferConstructor = getRuntimeBufferConstructor();\n if (!runtimeBufferConstructor) {\n return false;\n }\n return runtimeBufferConstructor.isBuffer(value);\n};\n\nconst assertBytePayload = (\n payload: unknown,\n typeId: string,\n): readonly number[] => {\n if (!Array.isArray(payload)) {\n throw new Error(`${INVALID_PAYLOAD_MESSAGE_PREFIX} ${typeId} payload`);\n }\n\n const bytes: number[] = new Array(payload.length);\n for (let index = 0; index < payload.length; index += 1) {\n const byteValue = payload[index];\n if (\n typeof byteValue !== \"number\" ||\n !Number.isInteger(byteValue) ||\n byteValue < 0 ||\n byteValue > 255\n ) {\n throw new Error(`${INVALID_PAYLOAD_MESSAGE_PREFIX} ${typeId} payload`);\n }\n bytes[index] = byteValue;\n }\n return bytes;\n};\n\nconst toBytePayload = (value: ArrayBufferView): readonly number[] =>\n Array.from(new Uint8Array(value.buffer, value.byteOffset, value.byteLength));\n\nconst bytesToArrayBuffer = (payload: unknown, typeId: string): ArrayBuffer => {\n const bytes = assertBytePayload(payload, typeId);\n return Uint8Array.from(bytes).buffer;\n};\n\nconst deserializeTypedArray = (\n typeId: TypedArrayTypeId,\n payload: unknown,\n): ArrayBufferView => {\n const typedArrayConstructor = getTypedArrayConstructor(typeId);\n if (!typedArrayConstructor) {\n throw new Error(`${typeId} is not available in this runtime`);\n }\n\n const bytes = assertBytePayload(payload, typeId);\n const bytesPerElement = typedArrayConstructor.BYTES_PER_ELEMENT;\n if (bytes.length % bytesPerElement !== 0) {\n throw new Error(`${INVALID_PAYLOAD_MESSAGE_PREFIX} ${typeId} payload`);\n }\n\n const arrayBuffer = Uint8Array.from(bytes).buffer;\n return new typedArrayConstructor(arrayBuffer);\n};\n\nconst createTypedArrayType = (\n typeId: TypedArrayTypeId,\n): TypeDefinition<ArrayBufferView, readonly number[]> => ({\n id: typeId,\n is: (value: unknown): value is ArrayBufferView => {\n const typedArrayConstructor = getTypedArrayConstructor(typeId);\n if (!typedArrayConstructor) {\n return false;\n }\n if (!(value instanceof typedArrayConstructor)) {\n return false;\n }\n if (typeId === \"Uint8Array\" && isNodeBuffer(value)) {\n return false;\n }\n return true;\n },\n serialize: (value: ArrayBufferView): readonly number[] =>\n toBytePayload(value),\n deserialize: (payload: readonly number[]) =>\n deserializeTypedArray(typeId, payload),\n strategy: \"value\",\n});\n\nexport const ArrayBufferType: TypeDefinition<ArrayBuffer, readonly number[]> = {\n id: \"ArrayBuffer\",\n is: (value: unknown): value is ArrayBuffer => value instanceof ArrayBuffer,\n serialize: (value: ArrayBuffer): readonly number[] =>\n Array.from(new Uint8Array(value)),\n deserialize: (payload: readonly number[]): ArrayBuffer =>\n bytesToArrayBuffer(payload, \"ArrayBuffer\"),\n strategy: \"value\",\n};\n\nexport const DataViewType: TypeDefinition<DataView, readonly number[]> = {\n id: \"DataView\",\n is: (value: unknown): value is DataView => value instanceof DataView,\n serialize: (value: DataView): readonly number[] => toBytePayload(value),\n deserialize: (payload: readonly number[]): DataView =>\n new DataView(bytesToArrayBuffer(payload, \"DataView\")),\n strategy: \"value\",\n};\n\nexport const BufferType: TypeDefinition<Uint8Array, readonly number[]> = {\n id: \"Buffer\",\n is: (value: unknown): value is Uint8Array => isNodeBuffer(value),\n serialize: (value: Uint8Array): readonly number[] => toBytePayload(value),\n deserialize: (payload: readonly number[]): Uint8Array => {\n const bytes = assertBytePayload(payload, \"Buffer\");\n const runtimeBufferConstructor = getRuntimeBufferConstructor();\n if (runtimeBufferConstructor) {\n return runtimeBufferConstructor.from(bytes);\n }\n return Uint8Array.from(bytes);\n },\n strategy: \"value\",\n};\n\nconst typedArrayTypes = typedArrayTypeIds.map(\n (typeId) => createTypedArrayType(typeId) as TypeDefinition<unknown, unknown>,\n);\n\nexport const binaryBuiltInTypes: Array<TypeDefinition<unknown, unknown>> = [\n ArrayBufferType as TypeDefinition<unknown, unknown>,\n DataViewType as TypeDefinition<unknown, unknown>,\n BufferType as TypeDefinition<unknown, unknown>,\n ...typedArrayTypes,\n];\n","import type { TypeDefinition } from \"./types\";\n\nconst hasOwn = Object.prototype.hasOwnProperty;\nconst errorReservedPropertyNames = new Set([\n \"name\",\n \"message\",\n \"stack\",\n \"cause\",\n]);\n\ninterface RuntimeUrlConstructor {\n new (url: string, base?: string | URL): URL;\n}\n\ninterface RuntimeUrlSearchParamsConstructor {\n new (\n init?:\n | string\n | readonly (readonly [string, string])[]\n | Record<string, string>\n | URLSearchParams,\n ): URLSearchParams;\n}\n\ninterface ErrorWithCause extends Error {\n cause?: unknown;\n}\n\ninterface SerializedErrorPayload {\n name: string;\n message: string;\n stack?: string;\n cause?: unknown;\n customFields: Record<string, unknown>;\n}\n\ninterface ParsedErrorPayload {\n name: string;\n message: string;\n stack?: string;\n hasCause: boolean;\n cause: unknown;\n customFields: Record<string, unknown>;\n}\n\nconst isRecord = (value: unknown): value is Record<string, unknown> =>\n typeof value === \"object\" && value !== null && !Array.isArray(value);\n\nconst isUnsafePropertyName = (propertyName: string): boolean =>\n propertyName === \"__proto__\" ||\n propertyName === \"constructor\" ||\n propertyName === \"prototype\";\n\nconst collectErrorCustomFields = (error: Error): Record<string, unknown> => {\n const customFields: Record<string, unknown> = {};\n for (const propertyName of Object.getOwnPropertyNames(error)) {\n if (errorReservedPropertyNames.has(propertyName)) {\n continue;\n }\n if (isUnsafePropertyName(propertyName)) {\n continue;\n }\n\n const descriptor = Object.getOwnPropertyDescriptor(error, propertyName);\n if (!descriptor || !(\"value\" in descriptor)) {\n continue;\n }\n\n customFields[propertyName] = descriptor.value;\n }\n return customFields;\n};\n\nconst assertSerializedErrorPayload = (value: unknown): ParsedErrorPayload => {\n if (!isRecord(value)) {\n throw new Error(\"Invalid Error payload\");\n }\n\n const { name, message, stack, customFields } = value;\n if (typeof name !== \"string\" || typeof message !== \"string\") {\n throw new Error(\"Invalid Error payload\");\n }\n if (stack !== undefined && typeof stack !== \"string\") {\n throw new Error(\"Invalid Error payload\");\n }\n if (customFields !== undefined && !isRecord(customFields)) {\n throw new Error(\"Invalid Error payload\");\n }\n\n const normalizedCustomFields: Record<string, unknown> = {};\n const customFieldEntries = Object.entries(customFields ?? {});\n for (const [propertyName, propertyValue] of customFieldEntries) {\n if (isUnsafePropertyName(propertyName)) {\n continue;\n }\n normalizedCustomFields[propertyName] = propertyValue;\n }\n\n return {\n name,\n message,\n stack,\n hasCause: hasOwn.call(value, \"cause\"),\n cause: value.cause,\n customFields: normalizedCustomFields,\n };\n};\n\nconst getUrlConstructor = (): RuntimeUrlConstructor | null => {\n const value = (globalThis as Record<string, unknown>).URL;\n if (typeof value !== \"function\") {\n return null;\n }\n return value as unknown as RuntimeUrlConstructor;\n};\n\nconst getUrlSearchParamsConstructor =\n (): RuntimeUrlSearchParamsConstructor | null => {\n const value = (globalThis as Record<string, unknown>).URLSearchParams;\n if (typeof value !== \"function\") {\n return null;\n }\n return value as unknown as RuntimeUrlSearchParamsConstructor;\n };\n\nexport const ErrorType: TypeDefinition<Error, SerializedErrorPayload> = {\n id: \"Error\",\n is: (value: unknown): value is Error => value instanceof Error,\n serialize: (error: Error): SerializedErrorPayload => {\n const serializedErrorPayload: SerializedErrorPayload = {\n name: error.name,\n message: error.message,\n customFields: collectErrorCustomFields(error),\n };\n if (typeof error.stack === \"string\") {\n serializedErrorPayload.stack = error.stack;\n }\n if (hasOwn.call(error, \"cause\")) {\n serializedErrorPayload.cause = (error as ErrorWithCause).cause;\n }\n return serializedErrorPayload;\n },\n deserialize: (payload: SerializedErrorPayload): Error => {\n const { name, message, stack, hasCause, cause, customFields } =\n assertSerializedErrorPayload(payload);\n\n const restoredError = new Error(message);\n restoredError.name = name;\n if (stack !== undefined) {\n Object.defineProperty(restoredError, \"stack\", {\n value: stack,\n writable: true,\n configurable: true,\n enumerable: false,\n });\n }\n if (hasCause) {\n Object.defineProperty(restoredError, \"cause\", {\n value: cause,\n writable: true,\n configurable: true,\n enumerable: false,\n });\n }\n\n for (const [propertyName, propertyValue] of Object.entries(customFields)) {\n if (errorReservedPropertyNames.has(propertyName)) {\n continue;\n }\n (restoredError as unknown as Record<string, unknown>)[propertyName] =\n propertyValue;\n }\n\n return restoredError;\n },\n};\n\nexport const URLType: TypeDefinition<URL, string> = {\n id: \"URL\",\n is: (value: unknown): value is URL => {\n const runtimeUrlConstructor = getUrlConstructor();\n if (!runtimeUrlConstructor) {\n return false;\n }\n return value instanceof runtimeUrlConstructor;\n },\n serialize: (value: URL): string => value.href,\n deserialize: (payload: string): URL => {\n if (typeof payload !== \"string\") {\n throw new Error(\"Invalid URL payload\");\n }\n const runtimeUrlConstructor = getUrlConstructor();\n if (!runtimeUrlConstructor) {\n throw new Error(\"URL is not available in this runtime\");\n }\n return new runtimeUrlConstructor(payload);\n },\n strategy: \"value\",\n};\n\nexport const URLSearchParamsType: TypeDefinition<URLSearchParams, string> = {\n id: \"URLSearchParams\",\n is: (value: unknown): value is URLSearchParams => {\n const runtimeUrlSearchParamsConstructor = getUrlSearchParamsConstructor();\n if (!runtimeUrlSearchParamsConstructor) {\n return false;\n }\n return value instanceof runtimeUrlSearchParamsConstructor;\n },\n serialize: (value: URLSearchParams): string => value.toString(),\n deserialize: (payload: string): URLSearchParams => {\n if (typeof payload !== \"string\") {\n throw new Error(\"Invalid URLSearchParams payload\");\n }\n const runtimeUrlSearchParamsConstructor = getUrlSearchParamsConstructor();\n if (!runtimeUrlSearchParamsConstructor) {\n throw new Error(\"URLSearchParams is not available in this runtime\");\n }\n return new runtimeUrlSearchParamsConstructor(payload);\n },\n strategy: \"value\",\n};\n\nexport const errorAndUrlBuiltInTypes: Array<TypeDefinition<unknown, unknown>> =\n [\n ErrorType as TypeDefinition<unknown, unknown>,\n URLType as TypeDefinition<unknown, unknown>,\n URLSearchParamsType as TypeDefinition<unknown, unknown>,\n ];\n","import type { SerializedValue } from \"./types\";\n\nexport enum SpecialTypeId {\n Undefined = \"Undefined\",\n NonFiniteNumber = \"NonFiniteNumber\",\n BigInt = \"BigInt\",\n Symbol = \"Symbol\",\n}\n\nexport enum NonFiniteNumberTag {\n NaN = \"NaN\",\n Infinity = \"Infinity\",\n NegativeInfinity = \"-Infinity\",\n}\n\nexport const serializeUndefined = (): SerializedValue => ({\n __type: SpecialTypeId.Undefined,\n value: null,\n});\n\nexport type BigIntPayload = string;\n\nexport const serializeBigIntPayload = (value: bigint): BigIntPayload =>\n value.toString(10);\n\nexport const assertBigIntPayload = (value: unknown): BigIntPayload => {\n if (typeof value === \"string\") {\n return value;\n }\n throw new Error(\"Invalid bigint payload\");\n};\n\nexport const serializeBigInt = (value: bigint): SerializedValue => ({\n __type: SpecialTypeId.BigInt,\n value: serializeBigIntPayload(value),\n});\n\nexport const getNonFiniteNumberTag = (\n value: number,\n): NonFiniteNumberTag | null => {\n if (Number.isNaN(value)) {\n return NonFiniteNumberTag.NaN;\n }\n if (value === Number.POSITIVE_INFINITY) {\n return NonFiniteNumberTag.Infinity;\n }\n if (value === Number.NEGATIVE_INFINITY) {\n return NonFiniteNumberTag.NegativeInfinity;\n }\n return null;\n};\n\nexport const serializeNonFiniteNumber = (value: number): SerializedValue => {\n const tag = getNonFiniteNumberTag(value);\n if (!tag) {\n throw new Error(\"Expected non-finite number\");\n }\n return {\n __type: SpecialTypeId.NonFiniteNumber,\n value: tag,\n };\n};\n\nexport const assertNonFiniteNumberTag = (\n value: unknown,\n): NonFiniteNumberTag => {\n if (\n value === NonFiniteNumberTag.NaN ||\n value === NonFiniteNumberTag.Infinity ||\n value === NonFiniteNumberTag.NegativeInfinity\n ) {\n return value;\n }\n throw new Error(\"Invalid non-finite number payload\");\n};\n","/**\n * Built-in type definitions for common JavaScript objects\n */\n\nimport type { TypeDefinition } from \"./types\";\nimport { binaryBuiltInTypes } from \"./binary-builtins\";\nimport { errorAndUrlBuiltInTypes } from \"./error-url-builtins\";\nimport {\n assertBigIntPayload,\n assertNonFiniteNumberTag,\n BigIntPayload,\n NonFiniteNumberTag,\n SpecialTypeId,\n getNonFiniteNumberTag,\n serializeBigIntPayload,\n} from \"./special-values\";\n\nexport enum SymbolPayloadKind {\n For = \"For\",\n WellKnown = \"WellKnown\",\n}\n\nconst WELL_KNOWN_SYMBOL_KEYS = [\n \"asyncIterator\",\n \"hasInstance\",\n \"isConcatSpreadable\",\n \"iterator\",\n \"match\",\n \"matchAll\",\n // Widely used (ex: RxJS), not part of the standard well-known list.\n // We only support it when the runtime defines Symbol.observable.\n \"observable\",\n \"replace\",\n \"search\",\n \"species\",\n \"split\",\n \"toPrimitive\",\n \"toStringTag\",\n \"unscopables\",\n] as const;\n\ntype WellKnownSymbolKey = (typeof WELL_KNOWN_SYMBOL_KEYS)[number];\n\nexport type SerializedSymbolPayload =\n | { kind: SymbolPayloadKind.For; key: string }\n | { kind: SymbolPayloadKind.WellKnown; key: WellKnownSymbolKey };\n\nconst getWellKnownSymbolKey = (value: symbol): WellKnownSymbolKey | null => {\n for (const key of WELL_KNOWN_SYMBOL_KEYS) {\n const sym = (Symbol as unknown as Record<WellKnownSymbolKey, unknown>)[key];\n if (typeof sym === \"symbol\" && sym === value) {\n return key;\n }\n }\n return null;\n};\n\nexport const assertSymbolPayload = (\n payload: unknown,\n): SerializedSymbolPayload => {\n if (!payload || typeof payload !== \"object\") {\n throw new Error(\"Invalid symbol payload\");\n }\n const rec = payload as Record<string, unknown>;\n if (rec.kind === SymbolPayloadKind.For) {\n if (typeof rec.key !== \"string\") {\n throw new Error(\"Invalid symbol payload\");\n }\n return { kind: SymbolPayloadKind.For, key: rec.key };\n }\n if (rec.kind === SymbolPayloadKind.WellKnown) {\n if (typeof rec.key !== \"string\") {\n throw new Error(\"Invalid symbol payload\");\n }\n if (\n (WELL_KNOWN_SYMBOL_KEYS as readonly string[]).includes(rec.key) === false\n ) {\n throw new Error(\"Invalid symbol payload\");\n }\n return {\n kind: SymbolPayloadKind.WellKnown,\n key: rec.key as WellKnownSymbolKey,\n };\n }\n throw new Error(\"Invalid symbol payload\");\n};\n\n/**\n * Built-in type handler for Date objects\n */\nexport const DateType: TypeDefinition<Date, string> = {\n id: \"Date\",\n is: (obj: unknown): obj is Date => obj instanceof Date,\n serialize: (date: Date) => date.toISOString(),\n deserialize: (isoString: string) => new Date(isoString),\n create: () => new Date(0),\n strategy: \"value\",\n};\n\n/**\n * Built-in type handler for RegExp objects\n */\nexport const RegExpType: TypeDefinition<\n RegExp,\n { pattern: string; flags: string }\n> = {\n id: \"RegExp\",\n is: (obj: unknown): obj is RegExp => obj instanceof RegExp,\n serialize: (regex: RegExp) => ({\n pattern: regex.source,\n flags: regex.flags,\n }),\n deserialize: (data: { pattern: string; flags: string }) =>\n new RegExp(data.pattern, data.flags),\n strategy: \"value\",\n};\n\n/**\n * Built-in type handler for Map objects\n */\nexport const MapType: TypeDefinition<\n Map<unknown, unknown>,\n Array<[unknown, unknown]>\n> = {\n id: \"Map\",\n is: (obj: unknown): obj is Map<unknown, unknown> => obj instanceof Map,\n serialize: (map: Map<unknown, unknown>) => Array.from(map.entries()),\n deserialize: (entries: Array<readonly [unknown, unknown]>) =>\n new Map(entries),\n create: () => new Map<unknown, unknown>(),\n};\n\n/**\n * Built-in type handler for Set objects\n */\nexport const SetType: TypeDefinition<Set<unknown>, unknown[]> = {\n id: \"Set\",\n is: (obj: unknown): obj is Set<unknown> => obj instanceof Set,\n serialize: (set: Set<unknown>) => Array.from(set.values()),\n deserialize: (values: unknown[]) => new Set(values),\n create: () => new Set<unknown>(),\n};\n\nexport const UndefinedType: TypeDefinition<undefined, null> = {\n id: SpecialTypeId.Undefined,\n is: (obj: unknown): obj is undefined => typeof obj === \"undefined\",\n serialize: () => null,\n deserialize: () => undefined,\n strategy: \"value\",\n};\n\nexport const NonFiniteNumberType: TypeDefinition<number, NonFiniteNumberTag> = {\n id: SpecialTypeId.NonFiniteNumber,\n is: (obj: unknown): obj is number =>\n typeof obj === \"number\" && !Number.isFinite(obj),\n serialize: (value: number) => {\n const tag = getNonFiniteNumberTag(value);\n if (!tag) {\n throw new Error(\"Expected non-finite number\");\n }\n return tag;\n },\n deserialize: (payload: NonFiniteNumberTag) => {\n const tag = assertNonFiniteNumberTag(payload);\n switch (tag) {\n case NonFiniteNumberTag.NaN:\n return Number.NaN;\n case NonFiniteNumberTag.Infinity:\n return Number.POSITIVE_INFINITY;\n case NonFiniteNumberTag.NegativeInfinity:\n return Number.NEGATIVE_INFINITY;\n }\n },\n strategy: \"value\",\n};\n\nexport const BigIntType: TypeDefinition<bigint, BigIntPayload> = {\n id: SpecialTypeId.BigInt,\n is: (obj: unknown): obj is bigint => typeof obj === \"bigint\",\n serialize: (value: bigint) => serializeBigIntPayload(value),\n deserialize: (value: BigIntPayload) => BigInt(assertBigIntPayload(value)),\n strategy: \"value\",\n};\n\nexport const SymbolType: TypeDefinition<symbol, SerializedSymbolPayload> = {\n id: SpecialTypeId.Symbol,\n is: (obj: unknown): obj is symbol => typeof obj === \"symbol\",\n serialize: (value: symbol) => {\n const forKey = Symbol.keyFor(value);\n if (typeof forKey === \"string\") {\n return { kind: SymbolPayloadKind.For, key: forKey };\n }\n const wellKnownKey = getWellKnownSymbolKey(value);\n if (wellKnownKey) {\n return { kind: SymbolPayloadKind.WellKnown, key: wellKnownKey };\n }\n throw new TypeError(\n \"Cannot serialize unique symbols; use Symbol.for(key) or a well-known symbol like Symbol.iterator\",\n );\n },\n deserialize: (payload: SerializedSymbolPayload) => {\n const parsed = assertSymbolPayload(payload);\n if (parsed.kind === SymbolPayloadKind.For) {\n return Symbol.for(parsed.key);\n }\n const value = (Symbol as unknown as Record<WellKnownSymbolKey, unknown>)[\n parsed.key\n ];\n if (typeof value !== \"symbol\") {\n throw new Error(`Unsupported well-known symbol \"${parsed.key}\"`);\n }\n return value;\n },\n strategy: \"value\",\n};\n\n/**\n * Array of all built-in type definitions\n */\nexport const builtInTypes: Array<TypeDefinition<unknown, unknown>> = [\n DateType as TypeDefinition<unknown, unknown>,\n RegExpType as TypeDefinition<unknown, unknown>,\n MapType as TypeDefinition<unknown, unknown>,\n SetType as TypeDefinition<unknown, unknown>,\n UndefinedType as TypeDefinition<unknown, unknown>,\n NonFiniteNumberType as TypeDefinition<unknown, unknown>,\n BigIntType as TypeDefinition<unknown, unknown>,\n SymbolType as TypeDefinition<unknown, unknown>,\n ...errorAndUrlBuiltInTypes,\n ...binaryBuiltInTypes,\n];\n","/**\n * Type registry for managing custom serialization types.\n * Extracted from Serializer.ts as a standalone module.\n */\n\nimport type { TypeDefinition } from \"./types\";\nimport { SymbolPolicy, SymbolPolicyErrorMessage } from \"./types\";\nimport {\n assertSymbolPayload,\n builtInTypes,\n SymbolPayloadKind,\n type SerializedSymbolPayload,\n} from \"./builtins\";\nimport {\n assertRegExpPayload,\n type RegExpValidatorOptions,\n} from \"./regexp-validator\";\nimport { SpecialTypeId } from \"./special-values\";\n\nexport interface TypeRegistryOptions {\n allowedTypes: ReadonlySet<string> | null;\n regExpValidator: RegExpValidatorOptions;\n symbolPolicy: SymbolPolicy;\n}\n\n/**\n * Registry for managing custom type definitions.\n */\nexport class TypeRegistry {\n private readonly typeRegistry = new Map<\n string,\n TypeDefinition<unknown, unknown>\n >();\n private readonly typeMap = new Map<\n string,\n TypeDefinition<unknown, unknown>\n >();\n private typeList: TypeDefinition<unknown, unknown>[] = [];\n\n private readonly allowedTypes: ReadonlySet<string> | null;\n private readonly regExpOptions: RegExpValidatorOptions;\n private readonly symbolPolicy: SymbolPolicy;\n\n constructor(options: TypeRegistryOptions) {\n this.allowedTypes = options.allowedTypes;\n this.regExpOptions = options.regExpValidator;\n this.symbolPolicy = options.symbolPolicy;\n this.assertSymbolPolicyValue(this.symbolPolicy);\n this.registerBuiltInTypes();\n this.refreshTypeCache();\n }\n\n /**\n * Get the list of registered types for iteration.\n */\n getTypeList(): readonly TypeDefinition<unknown, unknown>[] {\n return this.typeList;\n }\n\n /**\n * @internal - Map-like get() for test compatibility.\n */\n get(typeId: string): TypeDefinition<unknown, unknown> | undefined {\n return this.typeMap.get(typeId);\n }\n\n /**\n * Register a custom type definition.\n */\n addType<TInstance, TSerialized>(\n typeDef: TypeDefinition<TInstance, TSerialized>,\n ): void;\n addType<TJson = unknown, TInstance = unknown>(\n name: string,\n factory: (json: TJson) => TInstance,\n ): void;\n addType<TInstance, TSerialized>(\n arg1: string | TypeDefinition<TInstance, TSerialized>,\n arg2?: (json: unknown) => unknown,\n ): void {\n if (typeof arg1 === \"string\") {\n const name = arg1;\n const factory = arg2;\n if (!factory) {\n throw new Error(`addType(\"${name}\", factory) requires a factory`);\n }\n\n type ValueTypeInstance = { typeName(): string; toJSONValue(): unknown };\n const isValueTypeInstance = (obj: unknown): obj is ValueTypeInstance => {\n if (!obj || typeof obj !== \"object\") return false;\n const rec = obj as Record<string, unknown>;\n return (\n typeof rec.typeName === \"function\" &&\n typeof rec.toJSONValue === \"function\"\n );\n };\n\n this.addType({\n id: name,\n is: (obj: unknown): obj is ValueTypeInstance =>\n isValueTypeInstance(obj) && obj.typeName() === name,\n serialize: (obj: ValueTypeInstance) => obj.toJSONValue(),\n deserialize: (data: unknown) => factory(data) as ValueTypeInstance,\n strategy: \"value\",\n });\n return;\n }\n\n const typeDef = arg1;\n if (!typeDef || !typeDef.id) {\n throw new Error(\"Invalid type definition: id is required\");\n }\n if (!typeDef.serialize || !typeDef.deserialize) {\n throw new Error(\n \"Invalid type definition: serialize and deserialize are required\",\n );\n }\n if (this.typeRegistry.has(typeDef.id)) {\n throw new Error(`Type with id \"${typeDef.id}\" already exists`);\n }\n\n this.typeRegistry.set(\n typeDef.id,\n typeDef as TypeDefinition<unknown, unknown>,\n );\n this.refreshTypeCache();\n }\n\n /**\n * Find a type definition that matches the given value.\n */\n findTypeDefinition(\n value: unknown,\n excludedTypeIds: readonly string[],\n ): TypeDefinition<unknown, unknown> | undefined {\n for (const typeDef of this.typeList) {\n if (excludedTypeIds.includes(typeDef.id)) {\n continue;\n }\n try {\n if (typeDef.is(value)) {\n return typeDef;\n }\n } catch {\n // Type guard threw an error; skip this type definition\n continue;\n }\n }\n return undefined;\n }\n\n /**\n * Get a type definition by ID with allowed types enforcement.\n */\n getTypeDefinition(typeId: string): TypeDefinition<unknown, unknown> {\n if (this.allowedTypes && !this.allowedTypes.has(typeId)) {\n throw new Error(`Type \"${typeId}\" is not allowed`);\n }\n const typeDef = this.typeMap.get(typeId);\n if (!typeDef) {\n throw new Error(`Unknown type: ${typeId}`);\n }\n return typeDef;\n }\n\n /**\n * Deserialize typed data with special handling for RegExp.\n */\n deserializeType(\n typeDef: TypeDefinition<unknown, unknown>,\n typeId: string,\n data: unknown,\n ): unknown {\n if (typeId === SpecialTypeId.Symbol) {\n const payload = assertSymbolPayload(data);\n this.assertSymbolPolicy(payload);\n return typeDef.deserialize(payload);\n }\n if (typeId === \"RegExp\") {\n const payload = assertRegExpPayload(data, this.regExpOptions);\n return typeDef.deserialize(payload);\n }\n return typeDef.deserialize(data);\n }\n\n /**\n * Check if a type's serialized payload matches the type itself.\n * Used to prevent recursive type application.\n */\n shouldExcludeTypeFromPayload(\n typeDef: TypeDefinition<unknown, unknown>,\n serializedPayload: unknown,\n ): boolean {\n try {\n return typeDef.is(serializedPayload);\n } catch {\n return false;\n }\n }\n\n private registerBuiltInTypes(): void {\n for (const typeDef of builtInTypes) {\n this.typeRegistry.set(typeDef.id, typeDef);\n }\n }\n\n private refreshTypeCache(): void {\n this.typeMap.clear();\n const list: TypeDefinition<unknown, unknown>[] = [];\n for (const typeDef of this.typeRegistry.values()) {\n this.typeMap.set(typeDef.id, typeDef);\n list.push(typeDef);\n }\n this.typeList = list;\n }\n\n private assertSymbolPolicyValue(policy: SymbolPolicy): void {\n if (!Object.values(SymbolPolicy).includes(policy)) {\n throw new Error(SymbolPolicyErrorMessage.UnsupportedSymbolPolicy);\n }\n }\n\n private assertSymbolPolicy(payload: SerializedSymbolPayload): void {\n switch (this.symbolPolicy) {\n case SymbolPolicy.AllowAll:\n return;\n case SymbolPolicy.WellKnownOnly:\n if (payload.kind === SymbolPayloadKind.For) {\n throw new Error(SymbolPolicyErrorMessage.GlobalSymbolsNotAllowed);\n }\n return;\n case SymbolPolicy.Disabled:\n throw new Error(SymbolPolicyErrorMessage.SymbolsNotAllowed);\n }\n }\n}\n","/**\n * Validation helpers and type guards for serialization.\n * Extracted from Serializer.ts as a standalone module.\n */\n\nimport type { ObjectReference, SerializedGraph, SerializedNode } from \"./types\";\n\n/** Default keys to block for prototype pollution protection */\nexport const DEFAULT_UNSAFE_KEYS = new Set([\n \"__proto__\",\n \"constructor\",\n \"prototype\",\n]);\n\n/**\n * Check if a key is unsafe (can lead to prototype pollution).\n */\nexport const isUnsafeKey = (\n key: string,\n unsafeKeys: ReadonlySet<string> = DEFAULT_UNSAFE_KEYS,\n): boolean => {\n return unsafeKeys.has(key);\n};\n\n/**\n * Check if a value is an object reference (has __ref property).\n */\nexport const isObjectReference = (value: unknown): value is ObjectReference => {\n return Boolean(\n value &&\n typeof value === \"object\" &&\n value !== null &&\n \"__ref\" in value &&\n typeof (value as Record<\"__ref\", unknown>).__ref === \"string\",\n );\n};\n\n/**\n * Check if a value is a serialized graph payload.\n */\nexport const isGraphPayload = (value: unknown): value is SerializedGraph => {\n if (!value || typeof value !== \"object\") {\n return false;\n }\n\n const record = value as Record<string, unknown>;\n\n if (record.__graph !== true) {\n return false;\n }\n\n if (typeof record.root === \"undefined\") {\n return false;\n }\n\n const nodes = record.nodes;\n if (typeof nodes !== \"object\" || nodes === null) {\n return false;\n }\n\n return true;\n};\n\n/**\n * Check if a value is a serialized type record ({ __type, value }).\n */\nexport const isSerializedTypeRecord = (\n value: unknown,\n): value is { __type: string; value: unknown } => {\n if (!value || typeof value !== \"object\") {\n return false;\n }\n\n const record = value as Record<string, unknown>;\n return (\n typeof record.__type === \"string\" &&\n Object.prototype.hasOwnProperty.call(record, \"value\")\n );\n};\n\n/**\n * Convert nodes object to a safe record with null prototype.\n */\nexport const toNodeRecord = (\n nodes: Record<string, SerializedNode>,\n unsafeKeys: ReadonlySet<string> = DEFAULT_UNSAFE_KEYS,\n): Record<string, SerializedNode> => {\n if (!nodes || typeof nodes !== \"object\") {\n return Object.create(null);\n }\n const record: Record<string, SerializedNode> = Object.create(null);\n for (const key in nodes) {\n if (!Object.prototype.hasOwnProperty.call(nodes, key)) {\n continue;\n }\n if (isUnsafeKey(key, unsafeKeys)) {\n continue;\n }\n record[key] = nodes[key];\n }\n return record;\n};\n\n/**\n * Assert that recursion depth is within limits.\n */\nexport const assertDepth = (depth: number, maxDepth: number): void => {\n if (depth > maxDepth) {\n throw new Error(`Maximum depth exceeded (${maxDepth})`);\n }\n};\n","import type { TypeDefinition } from \"./types\";\nimport type { SerializedTypeRecord, SerializedValue } from \"./types\";\nimport type { TypeRegistry } from \"./type-registry\";\nimport { isUnsafeKey } from \"./validation\";\n\nexport const serializeArrayItems = <TSerializedValue>(\n source: readonly unknown[],\n serializeNested: (value: unknown) => TSerializedValue,\n): TSerializedValue[] => {\n const length = source.length;\n const items: TSerializedValue[] = new Array(length);\n for (let index = 0; index < length; index += 1) {\n items[index] = serializeNested(source[index]);\n }\n return items;\n};\n\nexport const serializeRecordEntries = <TSerializedValue>(\n source: Record<string, unknown>,\n unsafeKeys: ReadonlySet<string>,\n serializeNested: (value: unknown) => TSerializedValue,\n): Record<string, TSerializedValue> => {\n const record: Record<string, TSerializedValue> = {};\n for (const key in source) {\n if (!Object.prototype.hasOwnProperty.call(source, key)) {\n continue;\n }\n if (isUnsafeKey(key, unsafeKeys)) {\n continue;\n }\n record[key] = serializeNested(source[key]);\n }\n return record;\n};\n\nexport function serializeTypeRecord(\n typeDef: TypeDefinition<unknown, unknown>,\n value: unknown,\n excludedTypeIds: string[],\n serializeNested: (value: unknown) => SerializedValue,\n): SerializedTypeRecord;\n\nexport function serializeTypeRecord<TSerializedValue>(\n typeDef: TypeDefinition<unknown, unknown>,\n value: unknown,\n excludedTypeIds: string[],\n serializeNested: (value: unknown) => TSerializedValue,\n): { __type: string; value: TSerializedValue };\n\nexport function serializeTypeRecord<TSerializedValue>(\n typeDef: TypeDefinition<unknown, unknown>,\n value: unknown,\n excludedTypeIds: string[],\n serializeNested: (value: unknown) => TSerializedValue,\n): { __type: string; value: TSerializedValue } {\n excludedTypeIds.push(typeDef.id);\n try {\n const serializedPayload = typeDef.serialize(value);\n return {\n __type: typeDef.id,\n value: serializeNested(serializedPayload),\n };\n } finally {\n excludedTypeIds.pop();\n }\n}\n\nexport function serializeSymbolValue(\n value: symbol,\n excludedTypeIds: string[],\n typeRegistry: TypeRegistry,\n serializeNested: (value: unknown) => SerializedValue,\n): SerializedValue;\n\nexport function serializeSymbolValue<TSerializedValue>(\n value: symbol,\n excludedTypeIds: string[],\n typeRegistry: TypeRegistry,\n serializeNested: (value: unknown) => TSerializedValue,\n): { __type: string; value: TSerializedValue };\n\nexport function serializeSymbolValue<TSerializedValue>(\n value: symbol,\n excludedTypeIds: string[],\n typeRegistry: TypeRegistry,\n serializeNested: (value: unknown) => TSerializedValue,\n): { __type: string; value: TSerializedValue } {\n const typeDef = typeRegistry.findTypeDefinition(value, excludedTypeIds);\n if (!typeDef) {\n throw new TypeError('Cannot serialize value of type \"symbol\"');\n }\n return serializeTypeRecord(typeDef, value, excludedTypeIds, serializeNested);\n}\n","/**\n * Graph-mode serialization with circular reference handling.\n * Extracted from Serializer.ts as a standalone module.\n */\n\nimport type {\n SerializedValue,\n SerializationContext,\n SerializedNode,\n} from \"./types\";\nimport { assertDepth } from \"./validation\";\nimport type { TypeRegistry } from \"./type-registry\";\nimport {\n serializeBigInt,\n serializeNonFiniteNumber,\n serializeUndefined,\n} from \"./special-values\";\nimport {\n serializeArrayItems,\n serializeRecordEntries,\n serializeSymbolValue,\n} from \"./serialize-utils\";\n\nexport interface SerializeState {\n serializingValueTypes: WeakSet<object>;\n excludedTypeIds: string[];\n}\n\nexport interface GraphSerializerOptions {\n maxDepth: number;\n unsafeKeys: ReadonlySet<string>;\n typeRegistry: TypeRegistry;\n}\n\n/**\n * Create a unique object ID for the serialization context.\n */\nexport const createObjectId = (context: SerializationContext): string => {\n context.idCounter += 1;\n return `obj_${context.idCounter}`;\n};\n\n/**\n * Store a node in the serialization context.\n */\nexport const storeNode = (\n context: SerializationContext,\n id: string,\n node: SerializedNode,\n): void => {\n context.nodes[id] = node;\n context.nodeCount += 1;\n};\n\n/**\n * Serialize a value in graph mode with reference tracking.\n */\nexport const serializeValue = (\n value: unknown,\n context: SerializationContext,\n state: SerializeState,\n depth: number,\n options: GraphSerializerOptions,\n): SerializedValue => {\n assertDepth(depth, options.maxDepth);\n if (value === null) {\n return null;\n }\n\n if (typeof value === \"undefined\") {\n return serializeUndefined();\n }\n\n const valueType = typeof value;\n\n if (valueType !== \"object\") {\n if (valueType === \"number\") {\n const numericValue = value as number;\n if (!Number.isFinite(numericValue)) {\n return serializeNonFiniteNumber(numericValue);\n }\n return numericValue;\n }\n\n if (valueType === \"bigint\") {\n return serializeBigInt(value as bigint);\n }\n\n // Functions are intentionally non-serializable (code execution risk + non-portable).\n if (valueType === \"function\") {\n throw new TypeError(`Cannot serialize value of type \"${valueType}\"`);\n }\n\n // Symbols are non-JSON primitives; the registry provides safe encodings (Symbol.for + well-known).\n if (valueType === \"symbol\") {\n return serializeSymbolValue(\n value as symbol,\n state.excludedTypeIds,\n options.typeRegistry,\n (nested) => serializeValue(nested, context, state, depth + 1, options),\n );\n }\n\n return value as SerializedValue;\n }\n\n const objectValue = value as object;\n\n const existingId = context.objectIds.get(objectValue);\n if (existingId) {\n return { __ref: existingId };\n }\n\n // Allow value-strategy types to serialize inline without identity tracking.\n const shouldCheckTypes =\n !Array.isArray(objectValue) &&\n !state.serializingValueTypes.has(objectValue);\n\n if (shouldCheckTypes) {\n const typeDef = options.typeRegistry.findTypeDefinition(\n objectValue,\n state.excludedTypeIds,\n );\n if (typeDef) {\n if (typeDef.strategy === \"value\") {\n state.serializingValueTypes.add(objectValue);\n const serializedPayload = typeDef.serialize(objectValue);\n const shouldExcludeCurrentType =\n options.typeRegistry.shouldExcludeTypeFromPayload(\n typeDef,\n serializedPayload,\n );\n if (shouldExcludeCurrentType) {\n state.excludedTypeIds.push(typeDef.id);\n }\n try {\n const payload = serializeValue(\n serializedPayload,\n context,\n state,\n depth + 1,\n options,\n );\n // Value types are serialized inline and do not preserve identity\n // This produces stable JSON output for value-like types (ex: Date)\n return {\n __type: typeDef.id,\n value: payload,\n } as SerializedValue;\n } finally {\n state.serializingValueTypes.delete(objectValue);\n if (shouldExcludeCurrentType) {\n state.excludedTypeIds.pop();\n }\n }\n }\n\n const objectIdForType = createObjectId(context);\n context.objectIds.set(objectValue, objectIdForType);\n\n const serializedPayload = typeDef.serialize(objectValue);\n const shouldExcludeCurrentType =\n options.typeRegistry.shouldExcludeTypeFromPayload(\n typeDef,\n serializedPayload,\n );\n if (shouldExcludeCurrentType) {\n state.excludedTypeIds.push(typeDef.id);\n }\n try {\n const payload = serializeValue(\n serializedPayload,\n context,\n state,\n depth + 1,\n options,\n );\n\n storeNode(context, objectIdForType, {\n kind: \"type\",\n type: typeDef.id,\n value: payload,\n });\n return { __ref: objectIdForType };\n } finally {\n if (shouldExcludeCurrentType) {\n state.excludedTypeIds.pop();\n }\n }\n }\n }\n\n const objectId = createObjectId(context);\n context.objectIds.set(objectValue, objectId);\n\n if (Array.isArray(objectValue)) {\n const items = serializeArrayItems(objectValue, (nested) =>\n serializeValue(nested, context, state, depth + 1, options),\n );\n storeNode(context, objectId, { kind: \"array\", value: items });\n return { __ref: objectId };\n }\n\n const record = serializeRecordEntries(\n objectValue as Record<string, unknown>,\n options.unsafeKeys,\n (nested) => serializeValue(nested, context, state, depth + 1, options),\n );\n\n storeNode(context, objectId, { kind: \"object\", value: record });\n return { __ref: objectId };\n};\n","/**\n * Tree-mode serialization without circular reference support.\n * Used by stringify() for simple JSON-compatible output.\n * Extracted from Serializer.ts as a standalone module.\n */\n\nimport { assertDepth } from \"./validation\";\nimport type { TypeRegistry } from \"./type-registry\";\nimport {\n serializeBigInt,\n serializeNonFiniteNumber,\n serializeUndefined,\n} from \"./special-values\";\nimport {\n serializeArrayItems,\n serializeRecordEntries,\n serializeSymbolValue,\n} from \"./serialize-utils\";\n\nexport interface TreeSerializeContext {\n stack: WeakSet<object>;\n serializingValueTypes: WeakSet<object>;\n excludedTypeIds: string[];\n}\n\nexport interface TreeSerializerOptions {\n maxDepth: number;\n unsafeKeys: ReadonlySet<string>;\n typeRegistry: TypeRegistry;\n}\n\n/**\n * Serialize a value in tree mode (throws on circular references).\n */\nexport const serializeTreeValue = (\n value: unknown,\n context: TreeSerializeContext,\n depth: number,\n options: TreeSerializerOptions,\n): unknown => {\n assertDepth(depth, options.maxDepth);\n if (value === null) {\n return null;\n }\n\n if (typeof value === \"undefined\") {\n return serializeUndefined();\n }\n\n const valueType = typeof value;\n\n if (valueType !== \"object\") {\n if (valueType === \"number\") {\n const numericValue = value as number;\n if (!Number.isFinite(numericValue)) {\n return serializeNonFiniteNumber(numericValue);\n }\n return numericValue;\n }\n\n if (valueType === \"bigint\") {\n return serializeBigInt(value as bigint);\n }\n\n // Functions are intentionally non-serializable (code execution risk + non-portable).\n if (valueType === \"function\") {\n throw new TypeError(`Cannot serialize value of type \"${valueType}\"`);\n }\n\n // Symbols are non-JSON primitives; the registry provides safe encodings (Symbol.for + well-known).\n if (valueType === \"symbol\") {\n return serializeSymbolValue(\n value as symbol,\n context.excludedTypeIds,\n options.typeRegistry,\n (nested) => serializeTreeValue(nested, context, depth + 1, options),\n );\n }\n\n return value;\n }\n\n const objectValue = value as object;\n\n if (context.stack.has(objectValue)) {\n throw new TypeError(\"Cannot serialize circular structure in tree mode\");\n }\n\n const shouldCheckTypes =\n !Array.isArray(objectValue) &&\n !context.serializingValueTypes.has(objectValue);\n\n if (shouldCheckTypes) {\n const typeDef = options.typeRegistry.findTypeDefinition(\n objectValue,\n context.excludedTypeIds,\n );\n if (typeDef) {\n context.serializingValueTypes.add(objectValue);\n const serializedPayload = typeDef.serialize(objectValue);\n const shouldExcludeCurrentType =\n options.typeRegistry.shouldExcludeTypeFromPayload(\n typeDef,\n serializedPayload,\n );\n try {\n if (shouldExcludeCurrentType) {\n context.excludedTypeIds.push(typeDef.id);\n }\n const payload = serializeTreeValue(\n serializedPayload,\n context,\n depth + 1,\n options,\n );\n return {\n __type: typeDef.id,\n value: payload,\n };\n } finally {\n if (shouldExcludeCurrentType) {\n context.excludedTypeIds.pop();\n }\n context.serializingValueTypes.delete(objectValue);\n }\n }\n }\n\n context.stack.add(objectValue);\n\n try {\n if (Array.isArray(objectValue)) {\n return serializeArrayItems(objectValue, (nested) =>\n serializeTreeValue(nested, context, depth + 1, options),\n );\n }\n\n return serializeRecordEntries(\n objectValue as Record<string, unknown>,\n options.unsafeKeys,\n (nested) => serializeTreeValue(nested, context, depth + 1, options),\n );\n } finally {\n context.stack.delete(objectValue);\n }\n};\n","/**\n * Deserialization logic for graph and legacy payloads.\n * Extracted from Serializer.ts as a standalone module.\n */\n\nimport type { SerializedValue, DeserializationContext } from \"./types\";\nimport {\n isObjectReference,\n isSerializedTypeRecord,\n isUnsafeKey,\n assertDepth,\n} from \"./validation\";\nimport type { TypeRegistry } from \"./type-registry\";\n\nconst hasOwn = Object.prototype.hasOwnProperty;\n\nexport interface DeserializerOptions {\n maxDepth: number;\n unsafeKeys: ReadonlySet<string>;\n typeRegistry: TypeRegistry;\n}\n\nconst copyOwnProperties = (\n target: object,\n source: object,\n unsafeKeys: ReadonlySet<string>,\n): void => {\n const descriptors = Object.getOwnPropertyDescriptors(source);\n for (const key of Object.keys(descriptors)) {\n if (isUnsafeKey(key, unsafeKeys)) {\n continue;\n }\n Object.defineProperty(target, key, descriptors[key]);\n }\n\n const symbols = Object.getOwnPropertySymbols(source);\n for (const symbol of symbols) {\n const descriptor = Object.getOwnPropertyDescriptor(source, symbol);\n if (!descriptor) {\n continue;\n }\n Object.defineProperty(target, symbol, descriptor);\n }\n};\n\nconst mergeTypePlaceholderWithoutFactory = (\n placeholder: unknown,\n result: unknown,\n unsafeKeys: ReadonlySet<string>,\n hasCircularReference: boolean,\n): unknown => {\n if (placeholder === result) {\n return result;\n }\n\n if (result === null || typeof result !== \"object\") {\n if (hasCircularReference) {\n throw new Error(\n \"Cannot preserve circular references for a type without create() that deserializes to a non-object value\",\n );\n }\n return result;\n }\n\n // Arrays and objects with internal slots cannot be reconstructed by mutating\n // a plain placeholder object. Require create() in those cases if identity is needed.\n if (\n Array.isArray(result) ||\n result instanceof Map ||\n result instanceof Set ||\n result instanceof Date ||\n result instanceof RegExp\n ) {\n if (hasCircularReference) {\n throw new Error(\n \"Cannot preserve circular references for a type without create(); provide create() for identity-safe placeholders\",\n );\n }\n return result;\n }\n\n const target = placeholder as object;\n const source = result as object;\n\n const sourcePrototype = Object.getPrototypeOf(source);\n if (Object.getPrototypeOf(target) !== sourcePrototype) {\n Object.setPrototypeOf(target, sourcePrototype);\n }\n\n copyOwnProperties(target, source, unsafeKeys);\n return target;\n};\n\n/**\n * Deserialize a value from its serialized representation.\n */\nexport const deserializeValue = (\n value: SerializedValue,\n context: DeserializationContext,\n depth: number,\n options: DeserializerOptions,\n): unknown => {\n assertDepth(depth, options.maxDepth);\n if (value === null || typeof value !== \"object\") {\n return value;\n }\n\n if (Array.isArray(value)) {\n const length = value.length;\n const result: unknown[] = new Array(length);\n for (let index = 0; index < length; index += 1) {\n result[index] = deserializeValue(\n value[index],\n context,\n depth + 1,\n options,\n );\n }\n return result;\n }\n\n if (isObjectReference(value)) {\n return resolveReference(value.__ref, context, depth + 1, options);\n }\n\n if (isSerializedTypeRecord(value)) {\n const typeDef = options.typeRegistry.getTypeDefinition(value.__type);\n const data = deserializeValue(\n value.value as SerializedValue,\n context,\n depth + 1,\n options,\n );\n return options.typeRegistry.deserializeType(typeDef, value.__type, data);\n }\n\n const obj: Record<string, unknown> = {};\n const source = value as Record<string, SerializedValue>;\n for (const key in source) {\n if (!hasOwn.call(source, key)) {\n continue;\n }\n if (isUnsafeKey(key, options.unsafeKeys)) {\n continue;\n }\n obj[key] = deserializeValue(source[key], context, depth + 1, options);\n }\n return obj;\n};\n\n/**\n * Resolve a reference ID to its deserialized value.\n */\nexport const resolveReference = (\n id: string,\n context: DeserializationContext,\n depth: number,\n options: DeserializerOptions,\n): unknown => {\n assertDepth(depth, options.maxDepth);\n if (isUnsafeKey(id, options.unsafeKeys)) {\n throw new Error(`Unresolved reference id \"${id}\"`);\n }\n if (context.resolved.has(id)) {\n if (context.resolving.has(id)) {\n context.resolvingRefs.add(id);\n }\n return context.resolved.get(id);\n }\n\n const node = context.nodes[id];\n if (!node) {\n throw new Error(`Unresolved reference id \"${id}\"`);\n }\n\n switch (node.kind) {\n case \"array\": {\n const values = node.value;\n const arr: unknown[] = new Array(values.length);\n context.resolved.set(id, arr);\n for (let index = 0; index < values.length; index += 1) {\n arr[index] = deserializeValue(\n values[index],\n context,\n depth + 1,\n options,\n );\n }\n return arr;\n }\n\n case \"object\": {\n const target: Record<string, unknown> = {};\n context.resolved.set(id, target);\n const source = node.value;\n for (const key in source) {\n if (!hasOwn.call(source, key)) {\n continue;\n }\n if (isUnsafeKey(key, options.unsafeKeys)) {\n continue;\n }\n target[key] = deserializeValue(\n source[key],\n context,\n depth + 1,\n options,\n );\n }\n return target;\n }\n\n case \"type\": {\n const typeDef = options.typeRegistry.getTypeDefinition(node.type);\n\n const createdPlaceholder =\n typeof typeDef.create === \"function\" ? typeDef.create() : undefined;\n const hasFactory =\n createdPlaceholder !== undefined && createdPlaceholder !== null;\n const placeholder: unknown = hasFactory\n ? createdPlaceholder\n : Object.create(null);\n context.resolved.set(id, placeholder);\n context.resolving.add(id);\n\n const deserializedPayload = deserializeValue(\n node.value,\n context,\n depth + 1,\n options,\n );\n const result = options.typeRegistry.deserializeType(\n typeDef,\n node.type,\n deserializedPayload,\n );\n const finalResult = hasFactory\n ? mergePlaceholder(placeholder, result, options.unsafeKeys)\n : mergeTypePlaceholderWithoutFactory(\n placeholder,\n result,\n options.unsafeKeys,\n context.resolvingRefs.has(id),\n );\n\n context.resolved.set(id, finalResult);\n context.resolving.delete(id);\n return finalResult;\n }\n\n default: {\n throw new Error(\"Unsupported node kind\");\n }\n }\n};\n\n/**\n * Merge a placeholder with the final result for identity preservation.\n */\nexport const mergePlaceholder = (\n placeholder: unknown,\n result: unknown,\n unsafeKeys: ReadonlySet<string>,\n): unknown => {\n if (placeholder === result) {\n return result;\n }\n\n if (placeholder instanceof Map && result instanceof Map) {\n placeholder.clear();\n for (const [key, value] of result.entries()) {\n placeholder.set(key, value);\n }\n return placeholder;\n }\n\n if (placeholder instanceof Set && result instanceof Set) {\n placeholder.clear();\n result.forEach((value) => placeholder.add(value));\n return placeholder;\n }\n\n if (placeholder instanceof Date && result instanceof Date) {\n placeholder.setTime(result.getTime());\n return placeholder;\n }\n\n if (\n placeholder !== null &&\n typeof placeholder === \"object\" &&\n result !== null &&\n typeof result === \"object\"\n ) {\n const target = placeholder as Record<string, unknown>;\n const source = result as Record<string, unknown>;\n for (const key in source) {\n if (!hasOwn.call(source, key)) {\n continue;\n }\n if (isUnsafeKey(key, unsafeKeys)) {\n continue;\n }\n target[key] = source[key];\n }\n return placeholder;\n }\n\n return result;\n};\n\n/**\n * Deserialize legacy tree-format payloads (pre-graph format).\n */\nexport const deserializeLegacy = (\n value: unknown,\n depth: number,\n options: DeserializerOptions,\n): unknown => {\n assertDepth(depth, options.maxDepth);\n if (value === null || typeof value !== \"object\") {\n return value;\n }\n\n if (Array.isArray(value)) {\n const length = value.length;\n const result: unknown[] = new Array(length);\n for (let index = 0; index < length; index += 1) {\n result[index] = deserializeLegacy(value[index], depth + 1, options);\n }\n return result;\n }\n\n if (isSerializedTypeRecord(value)) {\n const typeDef = options.typeRegistry.getTypeDefinition(value.__type);\n const data = deserializeLegacy(value.value, depth + 1, options);\n return options.typeRegistry.deserializeType(typeDef, value.__type, data);\n }\n\n const obj: Record<string, unknown> = {};\n const source = value as Record<string, unknown>;\n for (const key in source) {\n if (!hasOwn.call(source, key)) {\n continue;\n }\n if (isUnsafeKey(key, options.unsafeKeys)) {\n continue;\n }\n obj[key] = deserializeLegacy(source[key], depth + 1, options);\n }\n return obj;\n};\n","export const normalizeMaxDepth = (\n value: number | undefined,\n fallback: number,\n): number => {\n if (value === Number.POSITIVE_INFINITY) {\n return Number.POSITIVE_INFINITY;\n }\n if (typeof value === \"number\" && Number.isFinite(value) && value >= 0) {\n return Math.floor(value);\n }\n return fallback;\n};\n\nexport const normalizeMaxRegExpPatternLength = (\n value: number | undefined,\n fallback: number,\n): number => {\n if (value === Number.POSITIVE_INFINITY) {\n return Number.POSITIVE_INFINITY;\n }\n if (typeof value === \"number\" && Number.isFinite(value) && value > 0) {\n return Math.floor(value);\n }\n return fallback;\n};\n","/**\n * Graph-aware serializer/deserializer with circular reference\n * handling and pluggable type support.\n *\n * Internal protocol reference: `readmes/SERIALIZER_PROTOCOL.md`.\n */\n\nimport type {\n TypeDefinition,\n SerializationContext,\n SerializerOptions,\n SerializedGraph,\n DeserializationContext,\n SerializedValue,\n SerializedNode,\n} from \"./types\";\nimport { SymbolPolicy } from \"./types\";\nimport { TypeRegistry } from \"./type-registry\";\nimport {\n isGraphPayload,\n toNodeRecord,\n isObjectReference,\n isSerializedTypeRecord,\n DEFAULT_UNSAFE_KEYS,\n} from \"./validation\";\nimport { serializeValue, type SerializeState } from \"./graph-serializer\";\nimport { serializeTreeValue } from \"./tree-serializer\";\nimport {\n deserializeValue as deserializeValueFn,\n deserializeLegacy,\n resolveReference as resolveReferenceFn,\n mergePlaceholder as mergePlaceholderFn,\n} from \"./deserializer\";\nimport {\n normalizeMaxDepth,\n normalizeMaxRegExpPatternLength,\n} from \"./option-normalizers\";\n\nconst GRAPH_VERSION = 1;\nconst DEFAULT_MAX_DEPTH = 1000;\nconst DEFAULT_MAX_REGEXP_PATTERN_LENGTH = 1024;\n\nexport class Serializer {\n /** Type registry for managing custom types */\n private readonly typeRegistry: TypeRegistry;\n\n private readonly runtimeOptions: {\n maxDepth: number;\n unsafeKeys: ReadonlySet<string>;\n typeRegistry: TypeRegistry;\n };\n\n /** JSON indentation width when pretty printing is enabled */\n private readonly indent: number | undefined;\n /** Maximum recursion depth allowed */\n private readonly maxDepth: number;\n /** Maximum allowed RegExp pattern length during deserialization */\n private readonly maxRegExpPatternLength: number;\n /** Allow RegExp patterns that fail the safety heuristic */\n private readonly allowUnsafeRegExp: boolean;\n /** Disallowed keys that can lead to prototype pollution */\n private readonly unsafeKeys: ReadonlySet<string>;\n\n constructor(options: SerializerOptions = {}) {\n this.indent = options.pretty ? 2 : undefined;\n this.maxDepth = normalizeMaxDepth(options.maxDepth, DEFAULT_MAX_DEPTH);\n this.maxRegExpPatternLength = normalizeMaxRegExpPatternLength(\n options.maxRegExpPatternLength,\n DEFAULT_MAX_REGEXP_PATTERN_LENGTH,\n );\n this.allowUnsafeRegExp = options.allowUnsafeRegExp ?? false;\n this.unsafeKeys = DEFAULT_UNSAFE_KEYS;\n\n this.typeRegistry = new TypeRegistry({\n allowedTypes: options.allowedTypes ? new Set(options.allowedTypes) : null,\n regExpValidator: {\n maxPatternLength: this.maxRegExpPatternLength,\n allowUnsafe: this.allowUnsafeRegExp,\n },\n symbolPolicy: options.symbolPolicy ?? SymbolPolicy.AllowAll,\n });\n\n this.runtimeOptions = {\n maxDepth: this.maxDepth,\n unsafeKeys: this.unsafeKeys,\n typeRegistry: this.typeRegistry,\n };\n }\n\n /**\n * Alias of `serialize()` to match the historical tunnel serializer surface.\n */\n public stringify<T>(value: T): string {\n const root = serializeTreeValue(\n value,\n {\n stack: new WeakSet(),\n serializingValueTypes: new WeakSet(),\n excludedTypeIds: [],\n },\n 0,\n this.runtimeOptions,\n );\n return this.jsonStringify(root);\n }\n\n /**\n * Alias of `deserialize()` to match the historical tunnel serializer surface.\n */\n public parse<T = unknown>(payload: string): T {\n return this.deserialize<T>(payload);\n }\n\n /**\n * Serialize an arbitrary value into a JSON string.\n */\n public serialize<T>(value: T, context?: SerializationContext): string {\n const ctx: SerializationContext = context ?? {\n objectIds: new WeakMap(),\n idCounter: 0,\n nodeCount: 0,\n nodes: Object.create(null),\n };\n\n const state: SerializeState = {\n serializingValueTypes: new WeakSet(),\n excludedTypeIds: [],\n };\n\n const root = serializeValue(value, ctx, state, 0, this.runtimeOptions);\n if (ctx.nodeCount === 0 && !isObjectReference(root)) {\n return this.jsonStringify(root);\n }\n\n const graph: SerializedGraph = {\n __graph: true,\n version: GRAPH_VERSION,\n root,\n nodes: ctx.nodes,\n };\n\n return this.jsonStringify(graph);\n }\n\n /**\n * Deserialize a JSON string back to its original value.\n */\n public deserialize<T = unknown>(payload: string): T {\n const parsed = JSON.parse(payload);\n\n if (!isGraphPayload(parsed)) {\n return deserializeLegacy(parsed, 0, this.runtimeOptions) as T;\n }\n\n const context: DeserializationContext = {\n nodes: toNodeRecord(parsed.nodes, this.unsafeKeys),\n resolved: new Map(),\n resolving: new Set(),\n resolvingRefs: new Set(),\n };\n\n return deserializeValueFn(\n parsed.root,\n context,\n 0,\n this.runtimeOptions,\n ) as T;\n }\n\n /**\n * Register a custom type for serialization/deserialization.\n */\n public addType<TInstance, TSerialized>(\n typeDef: TypeDefinition<TInstance, TSerialized>,\n ): void;\n public addType<TJson = unknown, TInstance = unknown>(\n name: string,\n factory: (json: TJson) => TInstance,\n ): void;\n public addType<TInstance, TSerialized>(\n arg1: string | TypeDefinition<TInstance, TSerialized>,\n arg2?: (json: unknown) => unknown,\n ): void {\n if (typeof arg1 === \"string\") {\n this.typeRegistry.addType(arg1, arg2!);\n } else {\n this.typeRegistry.addType(arg1);\n }\n }\n\n /**\n * @internal - Exposed for testing RegExp safety validation\n */\n public readonly isRegExpPatternSafe = (pattern: string): boolean => {\n // Re-export from regexp-validator for backwards compatibility\n const { isRegExpPatternSafe: check } = require(\"./regexp-validator\");\n return check(pattern);\n };\n\n /**\n * @internal - Exposed for testing quantifier detection\n */\n public readonly isQuantifierAt = (\n pattern: string,\n index: number,\n ): boolean => {\n const { isQuantifierAt: check } = require(\"./regexp-validator\");\n return check(pattern, index);\n };\n\n /**\n * @internal - Exposed for testing quantifier character detection\n */\n public readonly isQuantifierChar = (\n char: string,\n pattern: string,\n index: number,\n ): boolean => {\n const { isQuantifierChar: check } = require(\"./regexp-validator\");\n return check(char, pattern, index);\n };\n\n /**\n * @internal - Exposed for testing bounded quantifier detection\n */\n public readonly isBoundedQuantifier = (\n pattern: string,\n index: number,\n ): boolean => {\n const { isBoundedQuantifier: check } = require(\"./regexp-validator\");\n return check(pattern, index);\n };\n\n /**\n * @internal - Exposed for test compatibility\n */\n public toNodeRecord(\n nodes: Record<string, SerializedNode>,\n ): Record<string, SerializedNode> {\n return toNodeRecord(nodes, this.unsafeKeys);\n }\n\n /**\n * @internal - Exposed for test compatibility\n */\n public deserializeValue(\n value: SerializedValue,\n context: DeserializationContext,\n depth: number = 0,\n ): unknown {\n return deserializeValueFn(value, context, depth, this.runtimeOptions);\n }\n\n /**\n * @internal - Exposed for test compatibility\n */\n public resolveReference(\n id: string,\n context: DeserializationContext,\n depth: number = 0,\n ): unknown {\n return resolveReferenceFn(id, context, depth, this.runtimeOptions);\n }\n\n /**\n * @internal - Exposed for test compatibility\n */\n public mergePlaceholder(placeholder: unknown, result: unknown): unknown {\n return mergePlaceholderFn(placeholder, result, this.unsafeKeys);\n }\n\n /**\n * @internal - Exposed for test compatibility\n */\n public isSerializedTypeRecord(\n value: unknown,\n ): value is { __type: string; value: unknown } {\n return isSerializedTypeRecord(value);\n }\n\n private jsonStringify(value: unknown): string {\n const type = typeof value;\n if (type === \"bigint\" || type === \"symbol\" || type === \"function\") {\n throw new TypeError(`Cannot stringify value of type \"${type}\"`);\n }\n return JSON.stringify(value ?? null, null, this.indent);\n }\n}\n","/* istanbul ignore file */\nimport { getPlatform } from \"../platform\";\nimport { ITaskMiddlewareConfigured } from \"../defs\";\nimport { requireContextTaskMiddleware } from \"../globals/middleware/requireContext.middleware\";\nimport { contextError, platformUnsupportedFunctionError } from \"../errors\";\nimport { IAsyncContext, IAsyncContextDefinition } from \"../types/asyncContext\";\nimport { Serializer } from \"../serializer\";\nimport {\n symbolAsyncContext,\n symbolFilePath,\n symbolOptionalDependency,\n} from \"../types/symbols\";\nimport { getCallerFile } from \"../tools/getCallerFile\";\n\nexport { contextError as ContextError };\n\n// The internal storage maps Context identifiers (symbols) to their values\nconst platform = getPlatform();\nexport const storage = platform.createAsyncLocalStorage<Map<string, unknown>>();\n\n/** Returns the currently active store or undefined. */\n/* istanbul ignore next */\nexport function getCurrentStore(): Map<string, unknown> | undefined {\n return storage.getStore();\n}\n/**\n * Create a new typed Context. The result contains helpers similar to React's\n * Context API but adapted for async usage in Runner.\n */\nexport function defineAsyncContext<T>(\n def: IAsyncContextDefinition<T>,\n filePath?: string,\n): IAsyncContext<T> {\n if (!platform.hasAsyncLocalStorage()) {\n platformUnsupportedFunctionError.throw({\n functionName: `createAsyncLocalStorage: Cannot create context ${def.id}: no async storage available in this environment`,\n });\n }\n\n const ctxId = def.id;\n const resolvedFilePath = filePath ?? getCallerFile();\n\n /* istanbul ignore next */\n const use = (): T => {\n const store = getCurrentStore();\n if (!store || !store.has(ctxId)) {\n contextError.throw({\n details: `Context not available for symbol ${ctxId.toString()}`,\n });\n }\n const s = store!;\n return s.get(ctxId) as T;\n };\n\n const provide = <R>(value: T, fn: () => Promise<R> | R): Promise<R> | R => {\n const currentStore = getCurrentStore();\n const map = currentStore\n ? new Map(currentStore)\n : new Map<string, unknown>();\n\n map.set(ctxId, value);\n\n // storage.run expects () => R, our fn is () => Promise<R> | R which is compatible\n return storage.run(map, fn as () => R);\n };\n\n const serializer = new Serializer();\n\n const api = {\n id: ctxId,\n [symbolAsyncContext]: true as const,\n [symbolFilePath]: resolvedFilePath,\n use,\n /* istanbul ignore next */\n provide(value: T, fn: () => Promise<any> | any) {\n // Validate provided context if schema exists\n const validated = def.configSchema\n ? def.configSchema.parse(value)\n : value;\n return provide(validated, fn);\n },\n require(): ITaskMiddlewareConfigured {\n return requireContextTaskMiddleware.with({\n context: api as IAsyncContext<T>,\n });\n },\n /* istanbul ignore next */\n serialize: def.serialize || ((data: T) => serializer.stringify(data)),\n /* istanbul ignore next */\n parse: def.parse || ((data: string) => serializer.parse(data)),\n optional() {\n return {\n inner: api as IAsyncContext<T>,\n [symbolOptionalDependency]: true,\n } as const;\n },\n };\n\n return api;\n}\n\nexport type { IAsyncContext } from \"../types/asyncContext\";\n\n/** Convenience creator allowing optional name. Used by tests and legacy API. */\n/** @deprecated Use defineAsyncContext instead */\n/* istanbul ignore next */\nexport function createContext<T>(name?: string): IAsyncContext<T> {\n const id =\n name ?? `context.${Math.random().toString(36).slice(2)}.${Date.now()}`;\n return defineAsyncContext<T>({ id });\n}\n","import { defineTag } from \"../../../define\";\nimport { DebugFriendlyConfig } from \"./types\";\n\nexport const debugTag = defineTag<DebugFriendlyConfig>({\n id: \"globals.tags.debug\",\n meta: {\n title: \"Debug\",\n description:\n \"Debug-specific tags. Used for filtering out noise when you're focusing on your application.\",\n },\n});\n","import { defineTag } from \"../../../define\";\nimport type { TunnelRunner } from \"./types\";\n\n// Marks a resource as a tunnel and enforces its value to satisfy TunnelRunner.\nexport const tunnelTag = defineTag<void, void, TunnelRunner>({\n id: \"globals.tags.tunnel\",\n meta: {\n title: \"Tunnel\",\n description:\n \"Marks a resource that exposes a runner to tunnel selected tasks (override task run() with resource.run(taskId, input)).\",\n },\n});\n","import { defineTag } from \"../../../define\";\nimport type { ITaskMiddleware } from \"../../../defs\";\n\nexport type TunnelPolicySide = \"client\" | \"server\";\n\nexport type TunnelMiddlewareId = string | ITaskMiddleware<any, any, any, any>;\n\nexport interface TunnelTaskMiddlewareSidePolicy {\n /**\n * Middleware ids/definitions allowed to run on this side when the task is tunneled.\n * If omitted, defaults to allowing none (caller-side middleware is skipped by default).\n */\n middlewareAllowList?: TunnelMiddlewareId[];\n}\n\nexport type TunnelTaskMiddlewarePolicySideConfig =\n | TunnelTaskMiddlewareSidePolicy\n | TunnelMiddlewareId[];\n\nexport interface TunnelTaskMiddlewarePolicyConfig {\n /**\n * Preferred configuration shape: explicit per-side allowlist.\n */\n client?: TunnelTaskMiddlewarePolicySideConfig;\n server?: TunnelTaskMiddlewarePolicySideConfig;\n\n /**\n * Backwards-compatible configuration shape (previous): grouped allowlists.\n */\n middlewareAllowList?: {\n client?: TunnelMiddlewareId[];\n server?: TunnelMiddlewareId[];\n };\n}\n\nexport const tunnelPolicyTag = defineTag<TunnelTaskMiddlewarePolicyConfig>({\n id: \"globals.tags.tunnel.middlewarePolicy\",\n meta: {\n title: \"Tunnel Middleware Policy\",\n description:\n \"Controls which middlewares run on caller vs executor when a task is tunneled (whitelist).\",\n },\n});\n","import { defineTag } from \"../define\";\nimport { debugTag } from \"./resources/debug/debug.tag\";\nimport { tunnelTag } from \"./resources/tunnel/tunnel.tag\";\nimport { tunnelPolicyTag } from \"./resources/tunnel/tunnel.policy.tag\";\n\nexport const globalTags = {\n system: defineTag<{\n metadata?: Record<string, any>;\n }>({\n id: \"globals.tags.system\",\n meta: {\n title: \"System\",\n description:\n \"System-wide tags. Used for filtering out noise when you're focusing on your application.\",\n },\n }),\n excludeFromGlobalHooks: defineTag<{\n metadata?: Record<string, any>;\n }>({\n id: \"globals.tags.excludeFromGlobalHooks\",\n meta: {\n title: \"Exclude Event From Global Hooks\",\n description:\n \"Marks events that should not be dispatched to global hooks (on: '*').\",\n },\n }),\n debug: debugTag,\n tunnel: tunnelTag,\n tunnelPolicy: tunnelPolicyTag,\n authValidator: defineTag({\n id: \"globals.tags.authValidator\",\n meta: {\n title: \"Auth Validator\",\n description:\n \"Marks tasks that validate HTTP requests for tunnel authentication.\",\n },\n }),\n};\n","import { defineEvent } from \"../define\";\nimport { IEvent } from \"../defs\";\nimport { globalTags } from \"./globalTags\";\n\nconst _systemTag = globalTags.system;\n\nexport const globalEvents = {\n // Minimal core events retained if any (custom events can still be defined by users)\n /**\n * Emitted when the system is fully initialized and ready for work.\n */\n ready: defineEvent({\n id: \"globals.events.ready\",\n meta: {\n title: \"System Ready\",\n description:\n \"Emitted when the system has completed boot and is ready for listeners to start work.\" +\n \"This runs right before returning value for run().\",\n },\n }),\n} as const;\n\nexport const globalEventsArray: IEvent<any>[] = [globalEvents.ready];\n","import {\n ExecutionJournal,\n JournalKey,\n JournalSetOptions,\n} from \"../types/executionJournal\";\n\n/**\n * Implementation of ExecutionJournal.\n * Created per task execution and passed through the middleware chain.\n */\nexport class ExecutionJournalImpl implements ExecutionJournal {\n private readonly store = new Map<string, unknown>();\n\n /**\n * Store a value in the journal.\n * Throws an error if the key already exists unless { override: true } is passed.\n */\n set<T>(key: JournalKey<T>, value: T, options?: JournalSetOptions): void {\n if (this.store.has(key.id) && !options?.override) {\n throw new Error(\n `Journal key \"${key.id}\" already exists. Use { override: true } to overwrite.`,\n );\n }\n this.store.set(key.id, value);\n }\n\n get<T>(key: JournalKey<T>): T | undefined {\n return this.store.get(key.id) as T | undefined;\n }\n\n has<T>(key: JournalKey<T>): boolean {\n return this.store.has(key.id);\n }\n}\n\n/**\n * Creates a typed journal key for use with ExecutionJournal.\n *\n * @example\n * ```typescript\n * const abortController = journal.createKey<AbortController>(\"timeout.abortController\");\n * journal.set(abortController, new AbortController());\n * const ctrl = journal.get(abortController); // AbortController | undefined\n * ```\n */\nfunction createKey<T>(id: string): JournalKey<T> {\n return { id } as JournalKey<T>;\n}\n\nexport const journal = {\n createKey,\n /**\n * Creates a new empty ExecutionJournal.\n * Useful when you need to pass a specific journal instance to `runTask` or nested calls.\n */\n create: (): ExecutionJournal => new ExecutionJournalImpl(),\n};\n","import { defineTaskMiddleware } from \"../../definers/defineTaskMiddleware\";\nimport { defineResource } from \"../../definers/defineResource\";\nimport { defineTask } from \"../../definers/defineTask\";\nimport { LRUCache } from \"lru-cache\";\nimport { journal as journalHelper } from \"../../models/ExecutionJournal\";\n\nexport interface ICacheInstance {\n set(key: string, value: any): void;\n get(key: string): any;\n clear(): void;\n /** Optional presence check to disambiguate cached undefined values */\n has?(key: string): boolean;\n}\n\n// Default cache factory task that can be overridden\nexport const cacheFactoryTask = defineTask({\n id: \"globals.tasks.cacheFactory\",\n run: async (\n options: LRUCache.Options<any, any, any>,\n ): Promise<ICacheInstance> => {\n return new LRUCache(options);\n },\n});\n\nexport interface CacheResourceConfig {\n defaultOptions?: any;\n}\n\ntype CacheMiddlewareConfig = {\n keyBuilder?: (taskId: string, input: any) => string;\n} & any;\n\n/**\n * Journal keys exposed by the cache middleware.\n * Use these to access shared state from downstream middleware or tasks.\n */\nexport const journalKeys = {\n /** Whether the result was served from cache (true) or freshly computed (false) */\n hit: journalHelper.createKey<boolean>(\"globals.middleware.task.cache.hit\"),\n} as const;\n\nexport const cacheResource = defineResource({\n id: \"globals.resources.cache\",\n register: [cacheFactoryTask],\n dependencies: {\n cacheFactoryTask,\n },\n init: async (config: CacheResourceConfig, { cacheFactoryTask }) => {\n return {\n map: new Map<string, ICacheInstance>(),\n cacheFactoryTask,\n defaultOptions: {\n ttl: 10 * 1000,\n max: 100, // Maximum number of items in cache\n ttlAutopurge: true, // Automatically purge expired items\n ...config.defaultOptions,\n },\n };\n },\n dispose: async (cache) => {\n for (const cacheInstance of cache.map.values()) {\n await cacheInstance.clear();\n }\n },\n});\n\nconst defaultKeyBuilder = (taskId: string, input: any) =>\n `${taskId}-${JSON.stringify(input)}`;\n\nexport const cacheMiddleware = defineTaskMiddleware({\n id: \"globals.middleware.task.cache\",\n dependencies: { cache: cacheResource },\n async run({ task, next, journal }, deps, config: CacheMiddlewareConfig) {\n const { cache } = deps;\n config = {\n keyBuilder: defaultKeyBuilder,\n ttl: 10 * 1000,\n max: 100, // Maximum number of items in cache\n ttlAutopurge: true, // Automatically purge expired items\n ...config,\n };\n\n const taskId = task!.definition.id;\n let cacheHolderForTask = cache.map.get(taskId)!;\n if (!cacheHolderForTask) {\n // Extract only LRUCache options, excluding keyBuilder\n const { keyBuilder, ...lruOptions } = config;\n const cacheOptions = {\n ...cache.defaultOptions,\n ...lruOptions,\n };\n\n // Use the factory task to create the cache instance\n cacheHolderForTask = await cache.cacheFactoryTask(cacheOptions);\n\n cache.map.set(taskId, cacheHolderForTask);\n }\n\n const key = config.keyBuilder!(taskId, task!.input);\n\n const cachedValue = await cacheHolderForTask.get(key);\n const hasCachedEntry =\n typeof cacheHolderForTask.has === \"function\"\n ? cacheHolderForTask.has(key)\n : cachedValue !== undefined;\n\n if (hasCachedEntry) {\n journal.set(journalKeys.hit, true, { override: true });\n return cachedValue;\n }\n\n journal.set(journalKeys.hit, false, { override: true });\n const result = await next(task!.input);\n\n await cacheHolderForTask.set(key, result);\n\n return result;\n },\n});\n","import { defineTaskMiddleware, defineResource } from \"../../define\";\nimport { journal as journalHelper } from \"../../models/ExecutionJournal\";\nimport { globalTags } from \"../globalTags\";\n\n/**\n * States of the Circuit Breaker\n */\nexport enum CircuitBreakerState {\n CLOSED = \"CLOSED\",\n OPEN = \"OPEN\",\n HALF_OPEN = \"HALF_OPEN\",\n}\n\n/**\n * Configuration for the Circuit Breaker middleware\n */\nexport interface CircuitBreakerMiddlewareConfig {\n /**\n * Number of failures before tripping the circuit\n * @default 5\n */\n failureThreshold?: number;\n /**\n * Time in milliseconds before transitioning from OPEN to HALF_OPEN\n * @default 30000 (30 seconds)\n */\n resetTimeout?: number;\n}\n\n/**\n * Error thrown when the circuit is OPEN\n */\nexport class CircuitBreakerOpenError extends Error {\n constructor(message: string) {\n super(message);\n this.name = \"CircuitBreakerOpenError\";\n }\n}\n\nexport interface CircuitBreakerStatus {\n state: CircuitBreakerState;\n failures: number;\n lastFailureTime: number;\n}\n\n/**\n * Journal keys exposed by the circuit breaker middleware.\n * Use these to access shared state from downstream middleware or tasks.\n */\nexport const journalKeys = {\n /** Current state of the circuit breaker (CLOSED, OPEN, or HALF_OPEN) */\n state: journalHelper.createKey<CircuitBreakerState>(\n \"globals.middleware.task.circuitBreaker.state\",\n ),\n /** Current failure count */\n failures: journalHelper.createKey<number>(\n \"globals.middleware.task.circuitBreaker.failures\",\n ),\n} as const;\n\nexport const circuitBreakerResource = defineResource({\n id: \"globals.resources.circuitBreaker\",\n tags: [globalTags.system],\n init: async () => {\n return {\n statusMap: new Map<string, CircuitBreakerStatus>(),\n };\n },\n});\n\nexport const circuitBreakerMiddleware = defineTaskMiddleware({\n id: \"globals.middleware.task.circuitBreaker\",\n dependencies: { state: circuitBreakerResource },\n async run(\n { task, next, journal },\n { state },\n config: CircuitBreakerMiddlewareConfig,\n ) {\n const taskId = task!.definition.id;\n const failureThreshold = config.failureThreshold ?? 5;\n const resetTimeout = config.resetTimeout ?? 30000;\n\n const { statusMap } = state;\n\n let status = statusMap.get(taskId);\n if (!status) {\n status = {\n state: CircuitBreakerState.CLOSED,\n failures: 0,\n lastFailureTime: 0,\n };\n statusMap.set(taskId, status);\n }\n\n const now = Date.now();\n\n // Handle OPEN state transition to HALF_OPEN\n if (status.state === CircuitBreakerState.OPEN) {\n if (now - status.lastFailureTime >= resetTimeout) {\n status.state = CircuitBreakerState.HALF_OPEN;\n } else {\n // Set journal values before throwing\n journal.set(journalKeys.state, status.state, { override: true });\n journal.set(journalKeys.failures, status.failures, { override: true });\n throw new CircuitBreakerOpenError(\n `Circuit is OPEN for task \"${taskId}\"`,\n );\n }\n }\n\n // Set journal values before executing\n journal.set(journalKeys.state, status.state, { override: true });\n journal.set(journalKeys.failures, status.failures, { override: true });\n\n try {\n const result = await next(task!.input);\n\n // If successful, we reset the failures counter\n if (\n status.state === CircuitBreakerState.HALF_OPEN ||\n status.state === CircuitBreakerState.CLOSED\n ) {\n status.failures = 0;\n }\n\n if (status.state === CircuitBreakerState.HALF_OPEN) {\n status.state = CircuitBreakerState.CLOSED;\n }\n\n return result;\n } catch (error) {\n status.failures++;\n status.lastFailureTime = Date.now();\n\n if (\n status.state === CircuitBreakerState.CLOSED &&\n status.failures >= failureThreshold\n ) {\n status.state = CircuitBreakerState.OPEN;\n } else if (status.state === CircuitBreakerState.HALF_OPEN) {\n status.state = CircuitBreakerState.OPEN;\n }\n\n throw error;\n }\n },\n});\n","import {\n DependencyValuesType,\n EventHandlerType,\n IEventEmission,\n} from \"../../defs\";\nimport { IHook } from \"../../types/hook\";\n\n/**\n * Default options for event handlers.\n */\nexport const HandlerOptionsDefaults = { order: 0 };\n\n/**\n * Internal storage structure for event listeners.\n */\nexport interface IListenerStorage {\n order: number;\n filter?: (event: IEventEmission<any>) => boolean;\n handler: EventHandlerType;\n /** Optional listener id (from IEventHandlerOptions.id) */\n id?: string;\n /** True when this listener originates from addGlobalListener(). */\n isGlobal: boolean;\n}\n\n/**\n * Options for configuring event listeners.\n */\nexport interface IEventHandlerOptions<T = any> {\n order?: number;\n filter?: (event: IEventEmission<T>) => boolean;\n /**\n * Represents the listener ID. Use this to avoid a listener calling itself.\n */\n id?: string;\n}\n\n/**\n * Interceptor for event emissions.\n */\nexport type EventEmissionInterceptor = (\n next: (event: IEventEmission<any>) => Promise<void>,\n event: IEventEmission<any>,\n) => Promise<void>;\n\n/**\n * Interceptor for hook execution.\n */\nexport type HookExecutionInterceptor = (\n next: (hook: IHook<any, any>, event: IEventEmission<any>) => Promise<any>,\n hook: IHook<any, any>,\n event: IEventEmission<any>,\n) => Promise<any>;\n\n/**\n * Shared contract for cycle-aware hook execution.\n */\nexport type HookExecutor = (\n hook: IHook<any, any>,\n event: IEventEmission<any>,\n computedDependencies: DependencyValuesType<any>,\n) => Promise<any>;\n\n/**\n * Utility shape representing an emission frame used for cycle detection.\n */\nexport interface IEmissionFrame {\n id: string;\n source: string;\n}\n","import { IEvent } from \"../../defs\";\nimport { globalTags } from \"../../globals/globalTags\";\nimport { HandlerOptionsDefaults, IListenerStorage } from \"./types\";\n\ntype IsExcludedFromGlobal = (event: IEvent<any>) => boolean;\n\n/**\n * Manages event-specific and global listener collections plus caching.\n * Keeps ordering invariant using binary insertion.\n */\nexport class ListenerRegistry {\n readonly listeners: Map<string, IListenerStorage[]> = new Map();\n readonly globalListeners: IListenerStorage[] = [];\n\n readonly cachedMergedListeners: Map<string, IListenerStorage[]> = new Map();\n private _globalListenersCacheValid = true;\n\n private readonly isExcludedFromGlobal: IsExcludedFromGlobal;\n\n constructor(isExcludedFromGlobal?: IsExcludedFromGlobal) {\n this.isExcludedFromGlobal =\n isExcludedFromGlobal ??\n ((event) => globalTags.excludeFromGlobalHooks.exists(event));\n }\n\n get globalListenersCacheValid() {\n return this._globalListenersCacheValid;\n }\n\n addListener(eventId: string, newListener: IListenerStorage): void {\n const listeners = this.listeners.get(eventId);\n if (listeners) {\n this.insertListener(listeners, newListener);\n } else {\n this.listeners.set(eventId, [newListener]);\n }\n this.invalidateCache(eventId);\n }\n\n addGlobalListener(newListener: IListenerStorage): void {\n this.insertListener(this.globalListeners, newListener);\n this.invalidateCache();\n }\n\n getListenersForEmit(eventDefinition: IEvent<any>): IListenerStorage[] {\n const excludeGlobal = this.isExcludedFromGlobal(eventDefinition);\n if (excludeGlobal) {\n return (this.listeners.get(eventDefinition.id) || []).slice();\n }\n return this.getCachedMergedListeners(eventDefinition.id);\n }\n\n hasListeners(eventDefinition: IEvent<any>): boolean {\n const eventListeners = this.listeners.get(eventDefinition.id) || [];\n\n if (eventListeners.length > 0) {\n return true;\n }\n\n if (this.globalListeners.length === 0) {\n return false;\n }\n\n return !this.isExcludedFromGlobal(eventDefinition);\n }\n\n /**\n * Cached merge between event-specific and global listeners.\n * Exposed for backward compatibility with existing tests.\n */\n clear(): void {\n this.listeners.clear();\n this.globalListeners.length = 0;\n this.cachedMergedListeners.clear();\n this._globalListenersCacheValid = true;\n }\n\n getCachedMergedListeners(eventId: string): IListenerStorage[] {\n if (!this._globalListenersCacheValid) {\n this.cachedMergedListeners.clear();\n this._globalListenersCacheValid = true;\n }\n\n let cached = this.cachedMergedListeners.get(eventId);\n if (!cached) {\n const eventListeners = this.listeners.get(eventId) || [];\n if (eventListeners.length === 0 && this.globalListeners.length === 0) {\n cached = [];\n } else if (eventListeners.length === 0) {\n cached = this.globalListeners.slice();\n } else if (this.globalListeners.length === 0) {\n cached = eventListeners.slice();\n } else {\n cached = this.mergeSortedListeners(\n eventListeners,\n this.globalListeners,\n );\n }\n this.cachedMergedListeners.set(eventId, cached);\n }\n // Return a shallow copy to ensure snapshot isolation.\n return cached.slice();\n }\n\n private invalidateCache(eventId?: string): void {\n if (eventId) {\n this.cachedMergedListeners.delete(eventId);\n } else {\n this._globalListenersCacheValid = false;\n }\n }\n\n private mergeSortedListeners(\n a: IListenerStorage[],\n b: IListenerStorage[],\n ): IListenerStorage[] {\n const result: IListenerStorage[] = [];\n let i = 0;\n let j = 0;\n\n while (i < a.length && j < b.length) {\n if (a[i].order <= b[j].order) {\n result.push(a[i++]);\n } else {\n result.push(b[j++]);\n }\n }\n\n while (i < a.length) result.push(a[i++]);\n while (j < b.length) result.push(b[j++]);\n\n return result;\n }\n\n private insertListener(\n listeners: IListenerStorage[],\n newListener: IListenerStorage,\n ): void {\n let low = 0;\n let high = listeners.length;\n while (low < high) {\n const mid = (low + high) >>> 1;\n if (listeners[mid].order < newListener.order) {\n low = mid + 1;\n } else {\n high = mid;\n }\n }\n listeners.splice(low, 0, newListener);\n }\n}\n\nexport function createListener(\n newListener: Partial<IListenerStorage>,\n): IListenerStorage {\n return {\n handler: newListener.handler!,\n order: newListener.order ?? HandlerOptionsDefaults.order,\n filter: newListener.filter,\n id: newListener.id,\n isGlobal: newListener.isGlobal ?? false,\n };\n}\n","/**\n * Utility to compose an array of interceptors into a single function.\n * Last-added interceptor executes first (LIFO).\n */\nexport function composeInterceptors<TArgs extends any[], TResult>(\n interceptors: Array<\n (\n next: (...args: TArgs) => Promise<TResult>,\n ...args: TArgs\n ) => Promise<TResult>\n >,\n base: (...args: TArgs) => Promise<TResult>,\n): (...args: TArgs) => Promise<TResult> {\n return interceptors\n .slice()\n .reverse()\n .reduce(\n (next, interceptor) =>\n (...args: TArgs) =>\n interceptor(next, ...args),\n base,\n );\n}\n","import { IEventEmission } from \"../../defs\";\nimport { IListenerStorage } from \"./types\";\n\n/**\n * Error type with optional listener metadata attached.\n */\ninterface ListenerError extends Error {\n listenerId?: string;\n listenerOrder?: number;\n}\n\n/**\n * Aggregate error containing multiple listener errors.\n */\ninterface ListenerAggregateError extends Error {\n errors: ListenerError[];\n}\n\ninterface ExecuteOptions {\n listeners: IListenerStorage[];\n event: IEventEmission<any>;\n isPropagationStopped: () => boolean;\n}\n\nexport async function executeSequentially({\n listeners,\n event,\n isPropagationStopped,\n}: ExecuteOptions): Promise<void> {\n for (const listener of listeners) {\n if (isPropagationStopped()) {\n break;\n }\n\n if (shouldExecuteListener(listener, event)) {\n await listener.handler(event);\n }\n }\n}\n\nexport async function executeInParallel({\n listeners,\n event,\n}: Omit<ExecuteOptions, \"isPropagationStopped\">): Promise<void> {\n if (listeners.length === 0 || event.isPropagationStopped()) {\n return;\n }\n\n let currentOrder = listeners[0].order;\n let currentBatch: typeof listeners = [];\n\n const executeBatch = async (batch: typeof listeners) => {\n const results = await Promise.allSettled(\n batch.map(async (listener) => {\n if (shouldExecuteListener(listener, event)) {\n await listener.handler(event);\n }\n }),\n );\n\n const errors = results\n .map((result, index) => ({ result, listener: batch[index] }))\n .filter(\n (\n r,\n ): r is { result: PromiseRejectedResult; listener: IListenerStorage } =>\n r.result.status === \"rejected\",\n )\n .map(({ result, listener }) => {\n const reason = result.reason;\n const errObj: ListenerError =\n reason && typeof reason === \"object\"\n ? (reason as ListenerError)\n : new Error(String(reason));\n\n if (errObj.listenerId === undefined) {\n errObj.listenerId = listener.id;\n }\n if (errObj.listenerOrder === undefined) {\n errObj.listenerOrder = listener.order;\n }\n\n return errObj;\n });\n\n if (errors.length > 0) {\n if (errors.length === 1) {\n throw errors[0];\n }\n const aggregateError: ListenerAggregateError = Object.assign(\n new Error(`${errors.length} listeners failed in parallel batch`),\n { errors, name: \"AggregateError\" },\n );\n throw aggregateError;\n }\n };\n\n for (const listener of listeners) {\n if (listener.order !== currentOrder) {\n await executeBatch(currentBatch);\n currentBatch = [];\n currentOrder = listener.order;\n\n if (event.isPropagationStopped()) {\n break;\n }\n }\n currentBatch.push(listener);\n }\n\n if (currentBatch.length > 0 && !event.isPropagationStopped()) {\n await executeBatch(currentBatch);\n }\n}\n\nexport function shouldExecuteListener(\n listener: IListenerStorage,\n event: IEventEmission<any>,\n): boolean {\n if (listener.id && listener.id === event.source) {\n return false;\n }\n return !listener.filter || listener.filter(event);\n}\n","import { eventCycleError } from \"../../errors\";\nimport { getPlatform, IAsyncLocalStorage } from \"../../platform\";\nimport { IEmissionFrame } from \"./types\";\n\nexport class CycleContext {\n private readonly emissionStack: IAsyncLocalStorage<IEmissionFrame[]> | null;\n private readonly currentHookIdContext: IAsyncLocalStorage<string> | null;\n readonly isEnabled: boolean;\n\n constructor(runtimeEventCycleDetection: boolean) {\n const platform = getPlatform();\n if (platform.hasAsyncLocalStorage() && runtimeEventCycleDetection) {\n this.emissionStack = platform.createAsyncLocalStorage<IEmissionFrame[]>();\n this.currentHookIdContext = platform.createAsyncLocalStorage<string>();\n this.isEnabled = true;\n } else {\n this.emissionStack = null;\n this.currentHookIdContext = null;\n this.isEnabled = false;\n }\n }\n\n runEmission<TResult>(\n frame: IEmissionFrame,\n source: string,\n processEmission: () => Promise<TResult>,\n ): Promise<TResult> {\n if (!this.isEnabled || !this.emissionStack || !this.currentHookIdContext) {\n return processEmission();\n }\n\n const currentStack = this.emissionStack.getStore();\n if (currentStack) {\n const cycleStart = currentStack.findIndex(\n (f: { id: string; source: string }) => f.id === frame.id,\n );\n if (cycleStart !== -1) {\n const top = currentStack[currentStack.length - 1];\n const currentHookId = this.currentHookIdContext.getStore();\n\n // Allow re-emission of the same event by the same hook (\"idempotent re-emit\"),\n // BUT ONLY IF the source is changing (e.g. initial->hook).\n // If the source is unchanged (hook->hook), it means the hook triggered itself, which is an infinite loop.\n const isSafeReEmit =\n top.id === frame.id &&\n currentHookId &&\n currentHookId === source &&\n top.source !== source;\n\n if (!isSafeReEmit) {\n eventCycleError.throw({\n path: [...currentStack.slice(cycleStart), frame],\n });\n }\n }\n }\n\n const nextStack = currentStack ? [...currentStack, frame] : [frame];\n return this.emissionStack.run(nextStack, processEmission);\n }\n\n runHook<T>(hookId: string, execute: () => Promise<T>): Promise<T> {\n if (!this.isEnabled || !this.currentHookIdContext) {\n return execute();\n }\n return this.currentHookIdContext.run(hookId, execute);\n }\n}\n","import {\n DependencyValuesType,\n EventHandlerType,\n IEvent,\n IEventEmission,\n} from \"../defs\";\nimport { lockedError, validationError } from \"../errors\";\nimport { IHook } from \"../types/hook\";\nimport {\n EventEmissionInterceptor,\n HandlerOptionsDefaults,\n HookExecutionInterceptor,\n IEventHandlerOptions,\n IListenerStorage,\n} from \"./event/types\";\nimport { ListenerRegistry, createListener } from \"./event/ListenerRegistry\";\nimport { composeInterceptors } from \"./event/InterceptorPipeline\";\nimport {\n executeInParallel,\n executeSequentially,\n} from \"./event/EmissionExecutor\";\nimport { CycleContext } from \"./event/CycleContext\";\n\n/**\n * EventManager handles event emission, listener registration, and event processing.\n * It supports both specific event listeners and global listeners that handle all events.\n * Listeners are processed in order based on their priority.\n */\nexport class EventManager {\n // Core storage for event listeners (kept for backward-compatibility with tests)\n private listeners: Map<string, IListenerStorage[]>;\n private globalListeners: IListenerStorage[];\n private cachedMergedListeners: Map<string, IListenerStorage[]>;\n\n // Interceptors storage (tests access these directly)\n private emissionInterceptors: EventEmissionInterceptor[] = [];\n private hookInterceptors: HookExecutionInterceptor[] = [];\n\n private readonly registry: ListenerRegistry;\n private readonly cycleContext: CycleContext;\n\n // Locking mechanism to prevent modifications after initialization\n #isLocked = false;\n\n // Feature flags\n private readonly runtimeEventCycleDetection: boolean;\n\n constructor(options?: { runtimeEventCycleDetection?: boolean }) {\n this.runtimeEventCycleDetection =\n options?.runtimeEventCycleDetection ?? true;\n this.registry = new ListenerRegistry();\n this.cycleContext = new CycleContext(this.runtimeEventCycleDetection);\n\n // expose registry collections for backward-compatibility (tests reach into these)\n this.listeners = this.registry.listeners;\n this.globalListeners = this.registry.globalListeners;\n this.cachedMergedListeners = this.registry.cachedMergedListeners;\n }\n\n // ==================== PUBLIC API ====================\n\n /**\n * Gets the current lock status of the EventManager\n */\n get isLocked() {\n return this.#isLocked;\n }\n\n /**\n * Locks the EventManager, preventing any further modifications to listeners\n */\n lock() {\n this.#isLocked = true;\n }\n\n /**\n * Emits an event to all registered listeners for that event type.\n * Listeners are processed in order of priority and can stop event propagation.\n *\n * @param eventDefinition - The event definition to emit\n * @param data - The event payload data\n * @param source - The source identifier of the event emitter\n */\n async emit<TInput>(\n eventDefinition: IEvent<TInput>,\n data: TInput,\n source: string,\n ): Promise<void> {\n await this.emitAndReturnEmission({ eventDefinition, data, source });\n }\n\n /**\n * Emits an event and returns the final payload.\n * The payload is taken from the deepest emission object that reached either:\n * - the base listener executor, or\n * - an interceptor that short-circuited the emission.\n *\n * This enables tunnel transports to return the final payload after local and/or remote delivery.\n */\n async emitWithResult<TInput>(\n eventDefinition: IEvent<TInput>,\n data: TInput,\n source: string,\n ): Promise<TInput> {\n const emission = await this.emitAndReturnEmission({\n eventDefinition,\n data,\n source,\n });\n return emission.data as TInput;\n }\n\n private async emitAndReturnEmission<TInput>(params: {\n eventDefinition: IEvent<TInput>;\n data: TInput;\n source: string;\n }): Promise<IEventEmission<TInput>> {\n const { eventDefinition, source } = params;\n let { data } = params;\n\n // Validate payload with schema if provided\n if (eventDefinition.payloadSchema) {\n try {\n data = eventDefinition.payloadSchema.parse(data);\n } catch (error) {\n validationError.throw({\n subject: \"Event payload\",\n id: eventDefinition.id,\n originalError:\n error instanceof Error ? error : new Error(String(error)),\n });\n }\n }\n\n const frame = { id: eventDefinition.id, source };\n const processEmission = async (): Promise<IEventEmission<TInput>> => {\n const allListeners = this.registry.getListenersForEmit(eventDefinition);\n\n let propagationStopped = false;\n\n const event: IEventEmission<TInput> = {\n id: eventDefinition.id,\n data,\n timestamp: new Date(),\n source,\n meta: { ...(eventDefinition.meta || {}) },\n stopPropagation: () => {\n propagationStopped = true;\n },\n isPropagationStopped: () => propagationStopped,\n tags: [...eventDefinition.tags],\n };\n\n // Create the base emission function\n const baseEmit = async (\n eventToEmit: IEventEmission<any>,\n ): Promise<void> => {\n if (allListeners.length === 0) {\n return;\n }\n\n if (eventDefinition.parallel) {\n await executeInParallel({\n listeners: allListeners,\n event: eventToEmit,\n });\n } else {\n await executeSequentially({\n listeners: allListeners,\n event: eventToEmit,\n isPropagationStopped: () => propagationStopped,\n });\n }\n };\n\n // Interceptors can replace the event object and/or short-circuit emission.\n // Track the deepest event object that was reached to extract the final payload.\n let deepestEvent: IEventEmission<any> = event as IEventEmission<any>;\n\n const runInterceptor = async (\n index: number,\n eventToEmit: IEventEmission<any>,\n ): Promise<void> => {\n deepestEvent = eventToEmit;\n const interceptor = this.emissionInterceptors[index];\n if (!interceptor) {\n return baseEmit(eventToEmit);\n }\n return interceptor((nextEvent) => {\n this.assertPropagationMethodsUnchanged(\n eventDefinition.id,\n eventToEmit,\n nextEvent,\n );\n return runInterceptor(index + 1, nextEvent);\n }, eventToEmit);\n };\n\n await runInterceptor(0, event as IEventEmission<any>);\n return deepestEvent as IEventEmission<TInput>;\n };\n\n return await this.cycleContext.runEmission(frame, source, processEmission);\n }\n\n /**\n * Registers an event listener for specific event(s).\n * Listeners are ordered by priority and executed in ascending order.\n *\n * @param event - The event definition(s) to listen for\n * @param handler - The callback function to handle the event\n * @param options - Configuration options for the listener\n */\n addListener<T>(\n event: IEvent<T> | Array<IEvent<T>>,\n handler: EventHandlerType<T>,\n options: IEventHandlerOptions<T> = HandlerOptionsDefaults,\n ): void {\n this.checkLock();\n const newListener = createListener({\n handler,\n order: options.order,\n filter: options.filter,\n id: options.id,\n isGlobal: false,\n });\n\n if (Array.isArray(event)) {\n event.forEach((id) => this.addListener(id, handler, options));\n } else {\n const eventId = event.id;\n this.registry.addListener(eventId, newListener);\n }\n }\n\n /**\n * Registers a global event listener that handles all events.\n * Global listeners are mixed with specific listeners and ordered by priority.\n *\n * @param handler - The callback function to handle events\n * @param options - Configuration options for the listener\n */\n addGlobalListener(\n handler: EventHandlerType,\n options: IEventHandlerOptions = HandlerOptionsDefaults,\n ): void {\n this.checkLock();\n const newListener = createListener({\n handler,\n order: options.order,\n filter: options.filter,\n id: options.id,\n isGlobal: true,\n });\n this.registry.addGlobalListener(newListener);\n }\n\n /**\n * Checks if there are any listeners registered for the given event\n *\n * @param eventDefinition - The event definition to check\n * @returns true if listeners exist, false otherwise\n */\n hasListeners<T>(eventDefinition: IEvent<T>): boolean {\n return this.registry.hasListeners(eventDefinition);\n }\n\n /**\n * Adds an interceptor for all event emissions\n * Interceptors are executed in the order they are added, with the ability to\n * modify, log, or prevent event emissions\n *\n * @param interceptor - The interceptor function to add\n */\n intercept(interceptor: EventEmissionInterceptor): void {\n this.checkLock();\n this.emissionInterceptors.push(interceptor);\n }\n\n /**\n * Adds an interceptor for hook execution\n * Interceptors are executed in the order they are added, with the ability to\n * modify, log, or prevent hook execution\n *\n * @param interceptor - The interceptor function to add\n */\n interceptHook(interceptor: HookExecutionInterceptor): void {\n this.checkLock();\n this.hookInterceptors.push(interceptor);\n }\n\n /**\n * Executes a hook with all registered hook interceptors applied\n * This method should be used by TaskRunner when executing hooks\n *\n * @param hook - The hook to execute\n * @param event - The event that triggered the hook\n * @param computedDependencies - The computed dependencies for the hook\n * @returns Promise resolving to the hook execution result\n */\n async executeHookWithInterceptors(\n hook: IHook<any, any>,\n event: IEventEmission<any>,\n computedDependencies: DependencyValuesType<any>,\n ): Promise<any> {\n const baseExecute = async (\n hookToExecute: IHook<any, any>,\n eventForHook: IEventEmission<any>,\n ): Promise<any> => {\n return hookToExecute.run(eventForHook, computedDependencies);\n };\n\n const executeWithInterceptors = composeInterceptors(\n this.hookInterceptors,\n baseExecute,\n );\n\n // Execute the hook with interceptors within current hook context\n return this.cycleContext.isEnabled\n ? await this.cycleContext.runHook(hook.id, () =>\n executeWithInterceptors(hook, event),\n )\n : await executeWithInterceptors(hook, event);\n }\n\n // ==================== PRIVATE METHODS ====================\n\n /**\n * Throws an error if the EventManager is locked\n */\n private checkLock() {\n if (this.#isLocked) {\n lockedError.throw({ what: \"EventManager\" });\n }\n }\n\n private assertPropagationMethodsUnchanged(\n eventId: string,\n currentEvent: IEventEmission<any>,\n nextEvent: IEventEmission<any>,\n ): void {\n if (\n nextEvent.stopPropagation !== currentEvent.stopPropagation ||\n nextEvent.isPropagationStopped !== currentEvent.isPropagationStopped\n ) {\n validationError.throw({\n subject: \"Event interceptor\",\n id: eventId,\n originalError: new Error(\n \"Interceptors cannot override stopPropagation/isPropagationStopped\",\n ),\n });\n }\n }\n\n /**\n * Disposes the EventManager, releasing all listeners and interceptors.\n */\n dispose(): void {\n this.registry.clear();\n this.emissionInterceptors.length = 0;\n this.hookInterceptors.length = 0;\n }\n\n /**\n * Retrieves cached merged listeners for an event, or creates them if not cached.\n * Kept for backward compatibility (tests spy on this).\n */\n private getCachedMergedListeners(eventId: string): IListenerStorage[] {\n return this.registry.getCachedMergedListeners(eventId);\n }\n}\n\n// Re-export public types for compatibility\nexport type { IEventHandlerOptions };\nexport type { EventEmissionInterceptor, HookExecutionInterceptor };\n","import { EventManager } from \"./EventManager\";\nimport { defineEvent } from \"../definers/defineEvent\";\nimport { IEventDefinition, IEventEmission } from \"../defs\";\n\nexport type SemaphoreEventType =\n | \"queued\"\n | \"acquired\"\n | \"released\"\n | \"timeout\"\n | \"aborted\"\n | \"disposed\";\n\n// Event definitions for Semaphore\nconst SemaphoreEvents = {\n queued: defineEvent<SemaphoreEvent>({ id: \"semaphore.events.queued\" }),\n acquired: defineEvent<SemaphoreEvent>({ id: \"semaphore.events.acquired\" }),\n released: defineEvent<SemaphoreEvent>({ id: \"semaphore.events.released\" }),\n timeout: defineEvent<SemaphoreEvent>({ id: \"semaphore.events.timeout\" }),\n aborted: defineEvent<SemaphoreEvent>({ id: \"semaphore.events.aborted\" }),\n disposed: defineEvent<SemaphoreEvent>({ id: \"semaphore.events.disposed\" }),\n} as const satisfies Record<\n SemaphoreEventType,\n IEventDefinition<SemaphoreEvent>\n>;\n\nexport type SemaphoreEvent = {\n type: SemaphoreEventType;\n permits: number;\n waiting: number;\n maxPermits: number;\n disposed: boolean;\n};\n\ninterface WaitingOperation {\n resolve: () => void;\n reject: (error: Error) => void;\n timeout?: NodeJS.Timeout;\n abortController?: AbortController;\n node?: WaitingNode;\n onPermit?: () => void;\n}\n\ninterface WaitingNode {\n op: WaitingOperation;\n next: WaitingNode | null;\n prev: WaitingNode | null;\n}\n\n/**\n * A semaphore that limits the number of concurrent operations.\n * Used to prevent connection pool exhaustion by limiting concurrent\n * database operations to the pool size.\n */\nexport class Semaphore {\n private permits: number;\n private waitingHead: WaitingNode | null = null;\n private waitingTail: WaitingNode | null = null;\n private waitingCount = 0;\n private disposed = false;\n private readonly maxPermits: number;\n private readonly eventManager = new EventManager();\n private listenerId = 0;\n private activeListeners = new Set<number>();\n\n constructor(maxPermits: number) {\n if (maxPermits <= 0) {\n throw new Error(\"maxPermits must be greater than 0\");\n }\n this.permits = maxPermits;\n this.maxPermits = maxPermits;\n }\n\n /**\n * Acquire a permit. If no permits are available, waits until one becomes available.\n */\n async acquire(options?: {\n timeout?: number;\n signal?: AbortSignal;\n }): Promise<void> {\n if (this.disposed) {\n throw new Error(\"Semaphore has been disposed\");\n }\n\n if (options?.signal?.aborted) {\n throw new Error(\"Operation was aborted\");\n }\n\n if (this.permits > 0) {\n this.permits--;\n this.emit(\"acquired\");\n return;\n }\n\n // No permits available, wait in queue\n return new Promise<void>((resolve, reject) => {\n const operation: WaitingOperation = {\n resolve,\n reject,\n onPermit: () => this.emit(\"acquired\"),\n };\n\n // Set up timeout if provided\n if (options?.timeout && options.timeout > 0) {\n operation.timeout = setTimeout(() => {\n this.removeFromQueue(operation);\n this.emit(\"timeout\");\n reject(\n new Error(`Semaphore acquire timeout after ${options.timeout}ms`),\n );\n }, options.timeout);\n }\n\n // Set up abort signal if provided\n if (options?.signal) {\n const abortHandler = () => {\n this.removeFromQueue(operation);\n this.emit(\"aborted\");\n reject(new Error(\"Operation was aborted\"));\n };\n options.signal.addEventListener(\"abort\", abortHandler, { once: true });\n\n // Clean up the abort listener when operation completes\n const originalResolve = operation.resolve;\n const originalReject = operation.reject;\n\n operation.resolve = () => {\n options.signal!.removeEventListener(\"abort\", abortHandler);\n originalResolve();\n };\n\n operation.reject = (error: Error) => {\n options.signal!.removeEventListener(\"abort\", abortHandler);\n originalReject(error);\n };\n }\n\n this.enqueue(operation);\n this.emit(\"queued\");\n });\n }\n\n /**\n * Release a permit, allowing waiting operations to proceed.\n */\n release(): void {\n if (this.disposed) {\n return;\n }\n\n const nextOperation = this.dequeue();\n if (nextOperation) {\n // Give permit directly to next waiting operation\n\n // Clear timeout if it exists\n if (nextOperation.timeout) {\n clearTimeout(nextOperation.timeout);\n }\n\n nextOperation.onPermit?.();\n nextOperation.resolve();\n } else {\n // No one waiting, increment available permits (but don't exceed max)\n this.permits = Math.min(this.permits + 1, this.maxPermits);\n }\n\n this.emit(\"released\");\n }\n\n private removeFromQueue(operation: WaitingOperation): void {\n const node = operation.node;\n if (!node) return;\n\n if (node.prev) {\n node.prev.next = node.next;\n } else {\n this.waitingHead = node.next;\n }\n\n if (node.next) {\n node.next.prev = node.prev;\n } else {\n this.waitingTail = node.prev;\n }\n\n operation.node = undefined;\n this.waitingCount = Math.max(0, this.waitingCount - 1);\n\n // Clear timeout if it exists\n if (operation.timeout) {\n clearTimeout(operation.timeout);\n }\n }\n\n /**\n * Execute a function with a permit, automatically releasing it afterwards.\n */\n async withPermit<T>(\n fn: () => Promise<T>,\n options?: { timeout?: number; signal?: AbortSignal },\n ): Promise<T> {\n await this.acquire(options);\n try {\n return await fn();\n } finally {\n this.release();\n }\n }\n\n /**\n * Dispose the semaphore, rejecting all waiting operations and preventing new ones.\n */\n dispose(): void {\n if (this.disposed) {\n return;\n }\n\n this.disposed = true;\n\n // Reject all waiting operations\n while (this.waitingHead) {\n const operation = this.dequeue()!;\n\n // Clear timeout if it exists\n if (operation.timeout) {\n clearTimeout(operation.timeout);\n }\n\n operation.reject(new Error(\"Semaphore has been disposed\"));\n }\n\n this.emit(\"disposed\");\n this.eventManager.dispose();\n }\n\n /**\n * Get current number of available permits (for debugging)\n */\n getAvailablePermits(): number {\n return this.permits;\n }\n\n /**\n * Get current number of waiting operations (for debugging)\n */\n getWaitingCount(): number {\n return this.waitingCount;\n }\n\n /**\n * Get maximum number of permits\n */\n getMaxPermits(): number {\n return this.maxPermits;\n }\n\n /**\n * Check if the semaphore has been disposed\n */\n isDisposed(): boolean {\n return this.disposed;\n }\n\n /**\n * Get metrics about the current state of the semaphore\n */\n getMetrics(): {\n availablePermits: number;\n waitingCount: number;\n maxPermits: number;\n utilization: number;\n disposed: boolean;\n } {\n return {\n availablePermits: this.permits,\n waitingCount: this.waitingCount,\n maxPermits: this.maxPermits,\n utilization: (this.maxPermits - this.permits) / this.maxPermits,\n disposed: this.disposed,\n };\n }\n\n on(\n type: SemaphoreEventType,\n handler: (event: SemaphoreEvent) => any,\n ): () => void {\n const id = ++this.listenerId;\n this.activeListeners.add(id);\n const eventDef = SemaphoreEvents[type];\n\n this.eventManager.addListener(\n eventDef,\n (emission: IEventEmission<SemaphoreEvent>) => {\n if (this.activeListeners.has(id)) {\n handler(emission.data);\n }\n },\n {\n id: `semaphore-listener-${id}`,\n filter: () => this.activeListeners.has(id),\n },\n );\n\n return () => {\n this.activeListeners.delete(id);\n };\n }\n\n once(\n type: SemaphoreEventType,\n handler: (event: SemaphoreEvent) => any,\n ): () => void {\n const id = ++this.listenerId;\n this.activeListeners.add(id);\n const eventDef = SemaphoreEvents[type];\n\n this.eventManager.addListener(\n eventDef,\n (emission: IEventEmission<SemaphoreEvent>) => {\n if (this.activeListeners.has(id)) {\n this.activeListeners.delete(id);\n handler(emission.data);\n }\n },\n {\n id: `semaphore-listener-once-${id}`,\n filter: () => this.activeListeners.has(id),\n },\n );\n\n return () => {\n this.activeListeners.delete(id);\n };\n }\n\n private enqueue(operation: WaitingOperation): void {\n const node: WaitingNode = {\n op: operation,\n next: null,\n prev: this.waitingTail,\n };\n\n if (this.waitingTail) {\n this.waitingTail.next = node;\n } else {\n this.waitingHead = node;\n }\n\n this.waitingTail = node;\n operation.node = node;\n this.waitingCount++;\n }\n\n private dequeue(): WaitingOperation | null {\n const node = this.waitingHead;\n if (!node) return null;\n\n const next = node.next;\n if (next) {\n next.prev = null;\n } else {\n this.waitingTail = null;\n }\n\n this.waitingHead = next;\n node.next = null;\n node.prev = null;\n node.op.node = undefined;\n this.waitingCount = Math.max(0, this.waitingCount - 1);\n\n return node.op;\n }\n\n private emit(type: SemaphoreEventType): void {\n const eventDef = SemaphoreEvents[type];\n // Fire-and-forget to maintain synchronous behavior, but always catch to avoid\n // process-level unhandledRejection if a lifecycle listener throws.\n void this.eventManager\n .emit(eventDef, this.buildEvent(type), \"semaphore\")\n .catch(() => {});\n }\n\n private buildEvent(type: SemaphoreEventType): SemaphoreEvent {\n return {\n type,\n permits: this.permits,\n waiting: this.waitingCount,\n maxPermits: this.maxPermits,\n disposed: this.disposed,\n };\n }\n}\n","import { defineTaskMiddleware, defineResource } from \"../../define\";\nimport { Semaphore } from \"../../models/Semaphore\";\nimport { globalTags } from \"../globalTags\";\n\nexport interface ConcurrencyMiddlewareConfig {\n /**\n * Maximum number of concurrent executions.\n * If provided, a Semaphore will be created and shared for this config object.\n */\n limit?: number;\n\n /**\n * Optional key to identify a shared semaphore.\n * If provided, the semaphore will be shared across all tasks using the same key.\n */\n key?: string;\n\n /**\n * An existing Semaphore instance to use.\n */\n semaphore?: Semaphore;\n}\n\nexport interface ConcurrencyState {\n semaphoresByConfig: WeakMap<ConcurrencyMiddlewareConfig, Semaphore>;\n semaphoresByKey: Map<string, { semaphore: Semaphore; limit: number }>;\n}\n\nexport const concurrencyResource = defineResource({\n id: \"globals.resources.concurrency\",\n tags: [globalTags.system],\n init: async () => ({\n semaphoresByConfig: new WeakMap<ConcurrencyMiddlewareConfig, Semaphore>(),\n semaphoresByKey: new Map<string, { semaphore: Semaphore; limit: number }>(),\n }),\n});\n\n/**\n * Middleware that limits concurrency of task executions using a Semaphore.\n */\nexport const concurrencyTaskMiddleware = defineTaskMiddleware({\n id: \"globals.middleware.task.concurrency\",\n dependencies: { state: concurrencyResource },\n async run({ task, next }, { state }, config: ConcurrencyMiddlewareConfig) {\n let semaphore = config.semaphore;\n\n if (!semaphore && config.limit !== undefined) {\n if (config.key !== undefined) {\n const existing = state.semaphoresByKey.get(config.key);\n if (existing) {\n if (existing.limit !== config.limit) {\n throw new Error(\n `Concurrency middleware key \"${config.key}\" is already registered with limit ${existing.limit}, but got ${config.limit}`,\n );\n }\n semaphore = existing.semaphore;\n } else {\n semaphore = new Semaphore(config.limit);\n state.semaphoresByKey.set(config.key, {\n semaphore,\n limit: config.limit,\n });\n }\n } else {\n semaphore = state.semaphoresByConfig.get(config);\n if (!semaphore) {\n semaphore = new Semaphore(config.limit);\n state.semaphoresByConfig.set(config, semaphore);\n }\n }\n }\n\n if (!semaphore) {\n // If no limit or semaphore is provided, just proceed\n return next(task?.input);\n }\n\n return semaphore.withPermit(() => next(task?.input));\n },\n});\n","import { defineResource, defineTaskMiddleware } from \"../../define\";\nimport { journal as journalHelper } from \"../../models/ExecutionJournal\";\nimport { globalTags } from \"../globalTags\";\n\nexport interface RateLimitMiddlewareConfig {\n /**\n * Time window in milliseconds\n */\n windowMs: number;\n /**\n * Maximum number of requests within the window\n */\n max: number;\n}\n\nfunction assertRateLimitMiddlewareConfig(\n config: unknown,\n): asserts config is RateLimitMiddlewareConfig {\n if (!config || typeof config !== \"object\") {\n throw new TypeError(\n \"rateLimitTaskMiddleware requires .with({ windowMs, max }) configuration.\",\n );\n }\n\n const maybe = config as Partial<RateLimitMiddlewareConfig>;\n if (maybe.windowMs === undefined || maybe.max === undefined) {\n throw new TypeError(\n \"rateLimitTaskMiddleware requires .with({ windowMs, max }) configuration.\",\n );\n }\n\n if (!Number.isFinite(maybe.windowMs) || (maybe.windowMs as number) <= 0) {\n throw new TypeError(\n \"rateLimitTaskMiddleware requires a positive number for config.windowMs.\",\n );\n }\n\n if (!Number.isFinite(maybe.max) || (maybe.max as number) <= 0) {\n throw new TypeError(\n \"rateLimitTaskMiddleware requires a positive number for config.max.\",\n );\n }\n}\n\nconst rateLimitConfigSchema = {\n parse: (config: unknown) => {\n assertRateLimitMiddlewareConfig(config);\n return config;\n },\n};\n\n/**\n * Custom error class for rate limit errors.\n */\nexport class RateLimitError extends Error {\n constructor(message: string) {\n super(message);\n this.name = \"RateLimitError\";\n }\n}\n\nexport interface RateLimitState {\n count: number;\n resetTime: number;\n}\n\n/**\n * Journal keys exposed by the rate limit middleware.\n * Use these to access shared state from downstream middleware or tasks.\n */\nexport const journalKeys = {\n /** Number of remaining requests in the current window */\n remaining: journalHelper.createKey<number>(\n \"globals.middleware.task.rateLimit.remaining\",\n ),\n /** Timestamp when the current window resets */\n resetTime: journalHelper.createKey<number>(\n \"globals.middleware.task.rateLimit.resetTime\",\n ),\n /** Maximum requests allowed per window */\n limit: journalHelper.createKey<number>(\n \"globals.middleware.task.rateLimit.limit\",\n ),\n} as const;\n\nexport const rateLimitResource = defineResource({\n id: \"globals.resources.rateLimit\",\n tags: [globalTags.system],\n init: async () => {\n return {\n states: new WeakMap<RateLimitMiddlewareConfig, RateLimitState>(),\n };\n },\n});\n\n/**\n * Rate limit middleware: limits the number of executions within a fixed time window.\n */\nexport const rateLimitTaskMiddleware = defineTaskMiddleware({\n id: \"globals.middleware.task.rateLimit\",\n configSchema: rateLimitConfigSchema,\n dependencies: { state: rateLimitResource },\n async run(\n { task, next, journal },\n { state },\n config: RateLimitMiddlewareConfig,\n ) {\n assertRateLimitMiddlewareConfig(config);\n\n const { states } = state;\n let limitState = states.get(config);\n const now = Date.now();\n\n if (!limitState || now > limitState.resetTime) {\n limitState = {\n count: 0,\n resetTime: now + config.windowMs,\n };\n states.set(config, limitState);\n }\n\n // Set journal values before checking limits\n const remaining = Math.max(0, config.max - limitState.count);\n journal.set(journalKeys.remaining, remaining, { override: true });\n journal.set(journalKeys.resetTime, limitState.resetTime, {\n override: true,\n });\n journal.set(journalKeys.limit, config.max, { override: true });\n\n if (limitState.count >= config.max) {\n throw new RateLimitError(\n `Rate limit exceeded. Try again after ${new Date(\n limitState.resetTime,\n ).toISOString()}`,\n );\n }\n\n limitState.count++;\n // Update remaining after incrementing count\n journal.set(journalKeys.remaining, config.max - limitState.count, {\n override: true,\n });\n return await next(task.input);\n },\n});\n","import { defineTaskMiddleware, defineResource } from \"../../define\";\nimport { globalTags } from \"../globalTags\";\n\nexport interface TemporalMiddlewareConfig {\n ms: number;\n}\n\nexport interface DebounceState {\n timeoutId?: NodeJS.Timeout;\n latestInput?: any;\n resolveList: ((value: any) => void)[];\n rejectList: ((error: any) => void)[];\n}\n\nexport interface ThrottleState {\n lastExecution: number;\n timeoutId?: NodeJS.Timeout;\n latestInput?: any;\n resolveList: ((value: any) => void)[];\n rejectList: ((error: any) => void)[];\n currentPromise?: Promise<any>;\n}\n\nexport const temporalResource = defineResource({\n id: \"globals.resources.temporal\",\n tags: [globalTags.system],\n init: async () => {\n return {\n debounceStates: new WeakMap<TemporalMiddlewareConfig, DebounceState>(),\n throttleStates: new WeakMap<TemporalMiddlewareConfig, ThrottleState>(),\n };\n },\n});\n\n/**\n * Debounce middleware: delays execution until `ms` has passed since the last call.\n * If multiple calls occur within the window, only the last one is executed,\n * and all callers receive the same result.\n */\nexport const debounceTaskMiddleware = defineTaskMiddleware({\n id: \"globals.middleware.task.debounce\",\n dependencies: { state: temporalResource },\n async run({ task, next }, { state }, config: TemporalMiddlewareConfig) {\n const { debounceStates } = state;\n let debounceState = debounceStates.get(config);\n if (!debounceState) {\n debounceState = {\n resolveList: [],\n rejectList: [],\n };\n debounceStates.set(config, debounceState);\n }\n\n debounceState.latestInput = task.input;\n\n if (debounceState.timeoutId) {\n clearTimeout(debounceState.timeoutId);\n }\n\n const promise = new Promise((resolve, reject) => {\n debounceState!.resolveList.push(resolve);\n debounceState!.rejectList.push(reject);\n });\n\n debounceState.timeoutId = setTimeout(async () => {\n const { resolveList, rejectList, latestInput } = debounceState!;\n debounceState!.timeoutId = undefined;\n debounceState!.resolveList = [];\n debounceState!.rejectList = [];\n debounceState!.latestInput = undefined;\n\n try {\n const result = await next(latestInput);\n resolveList.forEach((resolve) => resolve(result));\n } catch (error) {\n rejectList.forEach((reject) => reject(error));\n }\n }, config.ms);\n\n return promise;\n },\n});\n\n/**\n * Throttle middleware: ensures execution at most once every `ms`.\n * If calls occur within the window, the last one is scheduled for the end of the window.\n */\nexport const throttleTaskMiddleware = defineTaskMiddleware({\n id: \"globals.middleware.task.throttle\",\n dependencies: { state: temporalResource },\n async run({ task, next }, { state }, config: TemporalMiddlewareConfig) {\n const { throttleStates } = state;\n let throttleState = throttleStates.get(config);\n if (!throttleState) {\n throttleState = {\n lastExecution: 0,\n resolveList: [],\n rejectList: [],\n };\n throttleStates.set(config, throttleState);\n }\n\n const now = Date.now();\n const remaining = config.ms - (now - throttleState.lastExecution);\n\n if (remaining <= 0) {\n let pendingResolves: Array<(value: any) => void> = [];\n let pendingRejects: Array<(error: any) => void> = [];\n\n if (throttleState.timeoutId) {\n // This can happen if a scheduled timeout from the previous window is\n // still pending (eg: event-loop stalls). Cancel it and settle its callers\n // using the immediate execution result.\n pendingResolves = throttleState.resolveList;\n pendingRejects = throttleState.rejectList;\n\n clearTimeout(throttleState.timeoutId);\n throttleState.timeoutId = undefined;\n throttleState.resolveList = [];\n throttleState.rejectList = [];\n throttleState.currentPromise = undefined;\n throttleState.latestInput = undefined;\n }\n throttleState.lastExecution = now;\n try {\n const result = await next(task.input);\n pendingResolves.forEach((resolve) => resolve(result));\n return result;\n } catch (error) {\n pendingRejects.forEach((reject) => reject(error));\n throw error;\n }\n } else {\n throttleState.latestInput = task.input;\n if (!throttleState.timeoutId) {\n throttleState.currentPromise = new Promise((resolve, reject) => {\n throttleState!.resolveList.push(resolve);\n throttleState!.rejectList.push(reject);\n });\n\n throttleState.timeoutId = setTimeout(async () => {\n const { resolveList, rejectList, latestInput } = throttleState!;\n throttleState!.timeoutId = undefined;\n throttleState!.lastExecution = Date.now();\n throttleState!.resolveList = [];\n throttleState!.rejectList = [];\n throttleState!.currentPromise = undefined;\n\n try {\n const result = await next(latestInput);\n resolveList.forEach((resolve) => resolve(result));\n } catch (error) {\n rejectList.forEach((reject) => reject(error));\n }\n }, remaining);\n } else {\n // Update input for the scheduled execution\n throttleState.latestInput = task.input;\n return new Promise((resolve, reject) => {\n throttleState!.resolveList.push(resolve);\n throttleState!.rejectList.push(reject);\n });\n }\n return throttleState.currentPromise;\n }\n },\n});\n","import { getPlatform } from \"../platform\";\nimport { EventManager } from \"./EventManager\";\nimport { defineEvent } from \"../definers/defineEvent\";\nimport { IEventDefinition, IEventEmission } from \"../defs\";\n\nexport type QueueEventType =\n | \"enqueue\"\n | \"start\"\n | \"finish\"\n | \"error\"\n | \"cancel\"\n | \"disposed\";\n\n// Event definitions for Queue\nconst QueueEvents = {\n enqueue: defineEvent<QueueEvent>({ id: \"queue.events.enqueue\" }),\n start: defineEvent<QueueEvent>({ id: \"queue.events.start\" }),\n finish: defineEvent<QueueEvent>({ id: \"queue.events.finish\" }),\n error: defineEvent<QueueEvent>({ id: \"queue.events.error\" }),\n cancel: defineEvent<QueueEvent>({ id: \"queue.events.cancel\" }),\n disposed: defineEvent<QueueEvent>({ id: \"queue.events.disposed\" }),\n} as const satisfies Record<QueueEventType, IEventDefinition<QueueEvent>>;\n\nexport type QueueEvent = {\n type: QueueEventType;\n taskId: number;\n disposed: boolean;\n error?: Error;\n};\n\n/**\n * Cooperative task queue.\n * • Tasks run one‑after‑another (FIFO ordering).\n * • Dead‑lock detection prevents nesting.\n * • dispose() drains or cancels outstanding tasks, then rejects new ones.\n */\nexport class Queue {\n private tail: Promise<unknown> = Promise.resolve();\n private disposed = false;\n private abortController = new AbortController();\n private readonly eventManager = new EventManager();\n private nextTaskId = 1;\n private listenerId = 0;\n private activeListeners = new Set<number>();\n\n // true while inside a queued task → helps detect \"queue in queue\"\n private readonly executionContext =\n getPlatform().createAsyncLocalStorage<boolean>();\n\n private readonly hasAsyncLocalStorage = getPlatform().hasAsyncLocalStorage();\n\n /**\n * Schedule an asynchronous task.\n * @param task – receives an AbortSignal so it can cancel early if desired.\n */\n public run<T>(task: (signal: AbortSignal) => Promise<T>): Promise<T> {\n // 1. refuse new work if we've disposed\n if (this.disposed) {\n return Promise.reject(new Error(\"Queue has been disposed\"));\n }\n\n // 2. detect dead‑locks (a queued task adding another queued task)\n if (this.hasAsyncLocalStorage && this.executionContext.getStore()) {\n return Promise.reject(\n new Error(\n \"Dead‑lock detected: a queued task attempted to queue another task\",\n ),\n );\n }\n\n const { signal } = this.abortController;\n const taskId = this.nextTaskId++;\n this.emit(\"enqueue\", taskId);\n\n // 3. chain task after the current tail\n const result = this.tail.then(() => {\n this.emit(\"start\", taskId);\n return this.hasAsyncLocalStorage\n ? this.executionContext.run(true, () => task(signal))\n : task(signal);\n });\n\n // 4. preserve the chain even if the task rejects (swallow internally)\n this.tail = result\n .then((value) => {\n this.emit(\"finish\", taskId);\n return value;\n })\n .catch((error) => {\n this.emit(\"error\", taskId, error as Error);\n });\n\n return result;\n }\n\n /**\n * Disposes the queue.\n * @param options.cancel – if true, broadcasts AbortSignal to running task.\n * default: false (waits for tasks to finish).\n */\n public async dispose(options: { cancel?: boolean } = {}): Promise<void> {\n if (this.disposed) return;\n\n this.disposed = true;\n this.emit(\"disposed\", 0);\n\n if (options.cancel) {\n this.abortController.abort(); // notify cooperative tasks\n this.emit(\"cancel\", 0);\n }\n\n // wait for everything already chained to settle\n await this.tail.catch(() => {});\n\n this.eventManager.dispose();\n }\n\n on(type: QueueEventType, handler: (event: QueueEvent) => any): () => void {\n const id = ++this.listenerId;\n this.activeListeners.add(id);\n const eventDef = QueueEvents[type];\n\n this.eventManager.addListener(\n eventDef,\n (emission: IEventEmission<QueueEvent>) => {\n if (this.activeListeners.has(id)) {\n handler(emission.data);\n }\n },\n {\n id: `queue-listener-${id}`,\n filter: () => this.activeListeners.has(id),\n },\n );\n\n return () => {\n this.activeListeners.delete(id);\n };\n }\n\n once(type: QueueEventType, handler: (event: QueueEvent) => any): () => void {\n const id = ++this.listenerId;\n this.activeListeners.add(id);\n const eventDef = QueueEvents[type];\n\n this.eventManager.addListener(\n eventDef,\n (emission: IEventEmission<QueueEvent>) => {\n if (this.activeListeners.has(id)) {\n this.activeListeners.delete(id);\n handler(emission.data);\n }\n },\n {\n id: `queue-listener-once-${id}`,\n filter: () => this.activeListeners.has(id),\n },\n );\n\n return () => {\n this.activeListeners.delete(id);\n };\n }\n\n private emit(type: QueueEventType, taskId: number, error?: Error): void {\n const eventDef = QueueEvents[type];\n // Fire-and-forget to maintain synchronous behavior, but always catch to avoid\n // process-level unhandledRejection if a lifecycle listener throws.\n void this.eventManager\n .emit(\n eventDef,\n {\n type,\n taskId,\n disposed: this.disposed,\n error,\n },\n \"queue\",\n )\n .catch(() => {});\n }\n}\n","import { defineResource } from \"../../define\";\nimport { Queue } from \"../../models/Queue\";\n\nexport const queueResource = defineResource({\n id: \"globals.resources.queue\",\n context: () => ({\n map: new Map<string, Queue>(),\n }),\n init: async (_, _deps, context) => {\n const map = context.map;\n\n return {\n map,\n run: <T>(\n id: string,\n task: (signal: AbortSignal) => Promise<T>,\n ): Promise<T> => {\n if (!map.has(id)) {\n map.set(id, new Queue());\n }\n\n return map.get(id)!.run(task);\n },\n };\n },\n dispose: async (_value, _, _deps, context) => {\n context.map.forEach((queue) => queue.dispose());\n },\n meta: {\n title: \"Queue Map\",\n description:\n \"A global map that can be used to store and retrieve queues. You can run exclusive tasks based on using an id. queue.run(id, task) will run the task in the queue with the given id. If the queue does not exist, it will be created.\",\n },\n});\n","import type { ITask, IEventEmission } from \"../../../defs\";\n\nexport interface ProtocolErrorShape {\n code: string;\n message: string;\n details?: unknown;\n httpCode?: number;\n // Optional app error identity and payload (when server sends typed errors)\n id?: string;\n data?: unknown;\n}\n\nexport interface ProtocolEnvelope<T = unknown> {\n ok: boolean;\n result?: T;\n error?: ProtocolErrorShape;\n meta?: { protocolVersion?: string; traceId?: string; taskVersion?: string };\n}\n\nexport interface TaskRequest {\n id: string;\n input?: unknown;\n plan?: unknown; // ExecutionPlan will plug here in Task 2\n context?: Record<string, unknown>;\n traceId?: string;\n}\n\nexport interface EventRequest {\n id: string;\n payload?: unknown;\n returnPayload?: boolean;\n context?: Record<string, unknown>;\n traceId?: string;\n}\n\nexport class TunnelError extends Error {\n public readonly code: string;\n public readonly details?: unknown;\n public readonly httpCode?: number;\n public readonly id?: string;\n public readonly data?: unknown;\n\n constructor(\n code: string,\n message: string,\n details?: unknown,\n extras?: { id?: string; data?: unknown; httpCode?: number },\n ) {\n super(message);\n this.name = \"TunnelError\";\n this.code = code;\n this.details = details;\n this.httpCode = extras?.httpCode;\n this.id = extras?.id;\n this.data = extras?.data;\n }\n}\n\nexport function toTunnelError(\n input: unknown,\n fallbackMessage?: string,\n): TunnelError {\n if (input instanceof Error) {\n return new TunnelError(\"UNKNOWN\", input.message);\n }\n if (\n input &&\n typeof input === \"object\" &&\n \"code\" in input &&\n \"message\" in input\n ) {\n const typed = input as { code: unknown; message: unknown };\n if (typeof typed.message === \"string\" && typeof typed.code === \"string\") {\n const pe = input as ProtocolErrorShape;\n const msg = pe.message || fallbackMessage || \"Tunnel error\";\n return new TunnelError(pe.code, msg, pe.details, {\n httpCode: pe.httpCode,\n id: pe.id,\n data: pe.data,\n });\n }\n }\n\n if (input && typeof input === \"object\" && \"message\" in input) {\n const typed = input as { message: unknown };\n if (typeof typed.message === \"string\") {\n return new TunnelError(\"UNKNOWN\", typed.message);\n }\n }\n\n return new TunnelError(\n \"UNKNOWN\",\n (typeof input === \"string\" && input) || fallbackMessage || \"Tunnel error\",\n );\n}\n\nexport function assertOkEnvelope<T>(\n envelope: ProtocolEnvelope<T> | undefined,\n opts?: { fallbackMessage?: string },\n): T {\n if (!envelope || typeof envelope !== \"object\") {\n throw new TunnelError(\n \"INVALID_RESPONSE\",\n opts?.fallbackMessage || \"Invalid or empty response\",\n );\n }\n if (envelope.ok) {\n return envelope.result as T;\n }\n if (envelope.error) {\n return ((): never => {\n throw toTunnelError(envelope.error, opts?.fallbackMessage);\n })();\n }\n throw new TunnelError(\"UNKNOWN\", opts?.fallbackMessage || \"Tunnel error\");\n}\n\nexport async function runViaTunnel(\n runner: (\n task: ITask<any, any, any, any, any, any>,\n input?: unknown,\n ) => Promise<unknown>,\n task: ITask<any, any, any, any, any, any>,\n input?: unknown,\n): Promise<unknown> {\n return runner(task, input);\n}\n\nexport async function emitViaTunnel(\n runner: (emission: IEventEmission<any>) => Promise<unknown>,\n emission: IEventEmission<any>,\n): Promise<void> {\n await runner(emission);\n}\n","export function normalizeError(input: unknown): Error {\n return input instanceof Error ? input : new Error(String(input));\n}\n","import {\n assertOkEnvelope,\n ProtocolEnvelope,\n TunnelError,\n} from \"./globals/resources/tunnel/protocol\";\nimport type { SerializerLike } from \"./serializer\";\nimport type {\n ExposureFetchConfig,\n ExposureFetchClient,\n} from \"./globals/resources/tunnel/types\";\nexport { normalizeError } from \"./globals/resources/tunnel/error-utils\";\nexport type {\n ExposureFetchAuthConfig,\n ExposureFetchConfig,\n ExposureFetchClient,\n} from \"./globals/resources/tunnel/types\";\n\n// normalizeError is re-exported from error-utils for public API\n\nasync function postSerialized<T = any>(options: {\n fetch: typeof fetch;\n url: string;\n body: unknown;\n headers: Record<string, string>;\n timeoutMs?: number;\n serializer: SerializerLike;\n onRequest?: (ctx: {\n url: string;\n headers: Record<string, string>;\n }) => void | Promise<void>;\n contextHeaderText?: string;\n}): Promise<T> {\n const {\n fetch: fetchFn,\n url,\n body,\n headers,\n timeoutMs,\n serializer,\n onRequest,\n contextHeaderText,\n } = options;\n const controller =\n timeoutMs && timeoutMs > 0 ? new AbortController() : undefined;\n let timeout: ReturnType<typeof setTimeout> | undefined;\n try {\n if (controller) {\n timeout = setTimeout(() => controller.abort(), timeoutMs);\n }\n const reqHeaders = {\n \"content-type\": \"application/json; charset=utf-8\",\n ...headers,\n } as Record<string, string>;\n if (contextHeaderText) reqHeaders[\"x-runner-context\"] = contextHeaderText;\n if (onRequest) await onRequest({ url, headers: reqHeaders });\n const res = await fetchFn(url, {\n method: \"POST\",\n headers: reqHeaders,\n body: serializer.stringify(body),\n signal: controller?.signal,\n });\n\n const text = await res.text();\n const json = text ? serializer.parse<T>(text) : (undefined as unknown as T);\n return json;\n } finally {\n if (timeout) clearTimeout(timeout);\n }\n}\n\n/**\n * This functions communicates with the exposure server over HTTP.\n * It uses the @readmes/TUNNEL_HTTP_POLICY.md strategy.\n *\n * @param cfg\n * @returns\n */\nexport function createExposureFetch(\n cfg: ExposureFetchConfig,\n): ExposureFetchClient {\n const baseUrl = cfg?.baseUrl?.replace(/\\/$/, \"\");\n if (!baseUrl) throw new Error(\"createExposureFetch requires baseUrl\");\n\n const headerName = (cfg?.auth?.header ?? \"x-runner-token\").toLowerCase();\n const buildHeaders = () => {\n const headers: Record<string, string> = {};\n if (cfg?.auth?.token) headers[headerName] = cfg.auth.token;\n return headers;\n };\n\n const fetchImpl = cfg.fetchImpl ?? (globalThis.fetch as typeof fetch);\n if (typeof fetchImpl !== \"function\") {\n throw new Error(\n \"global fetch is not available; provide fetchImpl in config\",\n );\n }\n\n const buildContextHeader = () => {\n if (!cfg.contexts || cfg.contexts.length === 0) return undefined;\n const map: Record<string, string> = {};\n for (const ctx of cfg.contexts) {\n try {\n const v = ctx.use();\n map[ctx.id] = ctx.serialize(v);\n } catch {\n // context absent; ignore\n }\n }\n const keys = Object.keys(map);\n if (keys.length === 0) return undefined;\n return cfg.serializer.stringify(map);\n };\n\n return {\n async task<I, O>(id: string, input?: I): Promise<O> {\n const url = `${baseUrl}/task/${encodeURIComponent(id)}`;\n const r: ProtocolEnvelope<O> = await postSerialized({\n fetch: fetchImpl,\n url,\n body: { input },\n headers: buildHeaders(),\n timeoutMs: cfg?.timeoutMs,\n serializer: cfg.serializer,\n onRequest: cfg?.onRequest,\n contextHeaderText: buildContextHeader(),\n });\n try {\n return assertOkEnvelope<O>(r, { fallbackMessage: \"Tunnel task error\" });\n } catch (e) {\n // Optionally rethrow typed errors if registry present\n const te = e as { id?: unknown; data?: unknown };\n if (cfg.errorRegistry && te.id && te.data) {\n const helper = cfg.errorRegistry.get(String(te.id));\n if (helper) helper.throw(te.data);\n }\n throw e;\n }\n },\n async event<P>(id: string, payload?: P): Promise<void> {\n const url = `${baseUrl}/event/${encodeURIComponent(id)}`;\n const r: ProtocolEnvelope<void> = await postSerialized({\n fetch: fetchImpl,\n url,\n body: { payload },\n headers: buildHeaders(),\n timeoutMs: cfg?.timeoutMs,\n serializer: cfg.serializer,\n onRequest: cfg?.onRequest,\n contextHeaderText: buildContextHeader(),\n });\n try {\n assertOkEnvelope<void>(r, { fallbackMessage: \"Tunnel event error\" });\n } catch (e) {\n const te = e as { id?: unknown; data?: unknown };\n if (cfg.errorRegistry && te.id && te.data) {\n const helper = cfg.errorRegistry.get(String(te.id));\n if (helper) helper.throw(te.data);\n }\n throw e;\n }\n },\n async eventWithResult<P>(id: string, payload?: P): Promise<P> {\n const url = `${baseUrl}/event/${encodeURIComponent(id)}`;\n const r: ProtocolEnvelope<P> = await postSerialized({\n fetch: fetchImpl,\n url,\n body: { payload, returnPayload: true },\n headers: buildHeaders(),\n timeoutMs: cfg?.timeoutMs,\n serializer: cfg.serializer,\n onRequest: cfg?.onRequest,\n contextHeaderText: buildContextHeader(),\n });\n if (r && typeof r === \"object\" && r.ok && !(\"result\" in r)) {\n throw new TunnelError(\n \"INVALID_RESPONSE\",\n \"Tunnel event returnPayload requested but server did not include result. Upgrade the exposure server.\",\n );\n }\n try {\n return assertOkEnvelope<P>(r, {\n fallbackMessage: \"Tunnel event error\",\n });\n } catch (e) {\n const te = e as { id?: unknown; data?: unknown };\n if (cfg.errorRegistry && te.id && te.data) {\n const helper = cfg.errorRegistry.get(String(te.id));\n if (helper) helper.throw(te.data);\n }\n throw e;\n }\n },\n } satisfies ExposureFetchClient;\n}\n","import type { Readable } from \"stream\";\nimport type { InputFileMeta, RunnerFileSentinel } from \"../types/inputFile\";\n\nexport interface NodeCollectedFile {\n id: string;\n meta: InputFileMeta;\n source:\n | { type: \"buffer\"; buffer: Buffer }\n | { type: \"stream\"; stream: Readable };\n}\n\nexport interface WebCollectedFile {\n id: string;\n meta: InputFileMeta;\n blob: Blob;\n}\n\nexport interface BuiltUniversalManifest<T = unknown> {\n input: T; // cloned input with sidecars removed\n nodeFiles: NodeCollectedFile[];\n webFiles: WebCollectedFile[];\n}\n\ntype AnyObj = Record<string, unknown>;\n\n/** Internal representation of a file value with platform-specific data */\ninterface InternalFileValue extends RunnerFileSentinel {\n _node?: { buffer?: Buffer; stream?: Readable };\n _web?: { blob?: Blob };\n}\n\nexport function buildUniversalManifest<T = unknown>(\n input: T,\n): BuiltUniversalManifest<T> {\n const nodeFiles: NodeCollectedFile[] = [];\n const webFiles: WebCollectedFile[] = [];\n\n function visit(value: unknown): unknown {\n if (!value || typeof value !== \"object\") return value;\n\n if (\n (value as RunnerFileSentinel).$runnerFile === \"File\" &&\n typeof (value as RunnerFileSentinel).id === \"string\"\n ) {\n const v = value as InternalFileValue;\n const id: string = v.id;\n const meta: InputFileMeta = v.meta;\n const node = v._node;\n const web = v._web;\n\n if (node?.buffer) {\n nodeFiles.push({\n id,\n meta,\n source: { type: \"buffer\", buffer: node.buffer },\n });\n } else if (node?.stream) {\n nodeFiles.push({\n id,\n meta,\n source: { type: \"stream\", stream: node.stream },\n });\n } else if (web?.blob) {\n webFiles.push({ id, meta, blob: web.blob });\n }\n\n const copy: AnyObj = { $runnerFile: \"File\", id, meta };\n return copy;\n }\n\n if (Array.isArray(value)) {\n return value.map((x) => visit(x));\n }\n\n const out: AnyObj = {};\n for (const k of Object.keys(value)) {\n out[k] = visit((value as AnyObj)[k]);\n }\n return out;\n }\n\n const cloned = visit(input);\n return {\n input: cloned as T,\n nodeFiles,\n webFiles,\n } as BuiltUniversalManifest<T>;\n}\n","import type { SerializerLike } from \"./serializer\";\nimport type { ProtocolEnvelope } from \"./globals/resources/tunnel/protocol\";\nimport { assertOkEnvelope } from \"./globals/resources/tunnel/protocol\";\nimport { createExposureFetch } from \"./http-fetch-tunnel.resource\";\nimport { buildUniversalManifest } from \"./tunnels/buildUniversalManifest\";\nimport type { IAsyncContext } from \"./types/asyncContext\";\nimport type { IErrorHelper } from \"./types/error\";\n\nexport interface HttpClientAuth {\n header?: string;\n token: string;\n}\n\nexport interface HttpClientConfig {\n baseUrl: string;\n auth?: HttpClientAuth;\n timeoutMs?: number;\n fetchImpl?: typeof fetch;\n serializer: SerializerLike;\n onRequest?: (ctx: {\n url: string;\n headers: Record<string, string>;\n }) => void | Promise<void>;\n contexts?: Array<IAsyncContext<unknown>>;\n errorRegistry?: Map<string, IErrorHelper<any>>;\n}\n\nexport interface HttpClient {\n task<I = unknown, O = unknown>(id: string, input?: I): Promise<O>;\n event<P = unknown>(id: string, payload?: P): Promise<void>;\n eventWithResult?<P = unknown>(id: string, payload?: P): Promise<P>;\n}\n\nfunction toHeaders(auth?: HttpClientAuth): Record<string, string> {\n const headers: Record<string, string> = {};\n if (auth?.token)\n headers[(auth.header ?? \"x-runner-token\").toLowerCase()] = auth.token;\n return headers;\n}\n\nexport function createHttpClient(cfg: HttpClientConfig): HttpClient {\n const baseUrl = cfg.baseUrl.replace(/\\/$/, \"\");\n if (!baseUrl) throw new Error(\"createHttpClient requires baseUrl\");\n\n const isNodeReadable = (\n value: unknown,\n ): value is { pipe: (...args: unknown[]) => unknown } =>\n !!value && typeof (value as { pipe?: unknown }).pipe === \"function\";\n\n const fetchClient = createExposureFetch({\n baseUrl,\n auth: cfg.auth,\n timeoutMs: cfg.timeoutMs,\n fetchImpl: cfg.fetchImpl,\n serializer: cfg.serializer,\n onRequest: cfg.onRequest,\n contexts: cfg.contexts,\n errorRegistry: cfg.errorRegistry,\n });\n\n async function postMultipartBrowser(\n url: string,\n manifestText: string,\n files: ReturnType<typeof buildUniversalManifest>[\"webFiles\"],\n ) {\n const fd = new FormData();\n fd.append(\"__manifest\", manifestText);\n for (const f of files) {\n const filename = f.meta?.name ?? \"upload\";\n fd.append(`file:${f.id}`, f.blob as unknown as Blob, filename);\n }\n const headers = toHeaders(cfg.auth);\n if (cfg.contexts && cfg.contexts.length > 0) {\n const map: Record<string, string> = {};\n for (const ctx of cfg.contexts) {\n try {\n const v = ctx.use();\n map[ctx.id] = ctx.serialize(v);\n } catch {}\n }\n if (Object.keys(map).length > 0) {\n headers[\"x-runner-context\"] = cfg.serializer.stringify(map);\n }\n }\n if (cfg.onRequest) await cfg.onRequest({ url, headers });\n const fetchImpl = cfg.fetchImpl ?? (globalThis.fetch as typeof fetch);\n const res = await fetchImpl(url, { method: \"POST\", body: fd, headers });\n const text = await res.text();\n const json = text ? cfg.serializer.parse(text) : undefined;\n return json as ProtocolEnvelope<any>;\n }\n\n return {\n async task<I, O>(id: string, input?: I): Promise<O> {\n const url = `${baseUrl}/task/${encodeURIComponent(id)}`;\n\n // Guard: raw Node Readable-like inputs are not supported in universal client\n if (isNodeReadable(input)) {\n throw new Error(\n \"createHttpClient (universal) cannot send a Node stream. Use @bluelibs/runner/node createHttpSmartClient or createHttpMixedClient for duplex/streaming.\",\n );\n }\n\n // Multipart path: browser files only (FormData). Node files are not supported here.\n const manifest = buildUniversalManifest(input);\n if (manifest.webFiles.length > 0) {\n const manifestText = cfg.serializer.stringify({\n input: manifest.input,\n });\n const r = await postMultipartBrowser(\n url,\n manifestText,\n manifest.webFiles,\n );\n try {\n return assertOkEnvelope<O>(r as ProtocolEnvelope<O>, {\n fallbackMessage: \"Tunnel task error\",\n });\n } catch (e) {\n const te = e as { id?: unknown; data?: unknown };\n if (cfg.errorRegistry && te.id && te.data) {\n const helper = cfg.errorRegistry.get(String(te.id));\n if (helper) helper.throw(te.data);\n }\n throw e;\n }\n }\n\n // If Node files were detected, instruct user to use Node clients\n if (manifest.nodeFiles.length > 0) {\n throw new Error(\n \"createHttpClient (universal) detected Node file input. Use @bluelibs/runner/node createHttpSmartClient or createHttpMixedClient for Node streaming/multipart.\",\n );\n }\n\n // JSON fallback\n try {\n return await fetchClient.task<I, O>(id, input as I);\n } catch (e) {\n const te = e as { id?: unknown; data?: unknown };\n if (cfg.errorRegistry && te.id && te.data) {\n const helper = cfg.errorRegistry.get(String(te.id));\n if (helper) helper.throw(te.data);\n }\n throw e;\n }\n },\n\n async event<P>(id: string, payload?: P): Promise<void> {\n try {\n return await fetchClient.event<P>(id, payload);\n } catch (e) {\n const te = e as { id?: unknown; data?: unknown };\n if (cfg.errorRegistry && te.id && te.data) {\n const helper = cfg.errorRegistry.get(String(te.id));\n if (helper) helper.throw(te.data);\n }\n throw e;\n }\n },\n\n async eventWithResult<P>(id: string, payload?: P): Promise<P> {\n try {\n if (!fetchClient.eventWithResult) {\n throw new Error(\n \"createHttpClient: eventWithResult not available on underlying tunnel client.\",\n );\n }\n return await fetchClient.eventWithResult<P>(id, payload);\n } catch (e) {\n const te = e as { id?: unknown; data?: unknown };\n if (cfg.errorRegistry && te.id && te.data) {\n const helper = cfg.errorRegistry.get(String(te.id));\n if (helper) helper.throw(te.data);\n }\n throw e;\n }\n },\n };\n}\n","import { defineResource } from \"../../define\";\nimport { createHttpClient, type HttpClient } from \"../../http-client\";\nimport type { HttpClientConfig } from \"../../http-client\";\nimport { serializer, store } from \"../globalResources\";\nimport type { IErrorHelper } from \"../../types/error\";\nimport type { IAsyncContext } from \"../../types/asyncContext\";\n\n/**\n * Factory for creating HTTP clients with automatic injection of:\n * - serializer\n * - error registry (from Store)\n * - async contexts (from Store)\n *\n * Note: Node streaming clients are exposed via the Node entry only\n * (see createHttpSmartClient/createHttpMixedClient in `@bluelibs/runner/node`).\n * Keeping this universal factory browser-safe avoids dynamic imports.\n */\n\n// Types for httpClientFactory\nexport interface HttpClientFactoryConfig {\n baseUrl: string;\n auth?: HttpClientConfig[\"auth\"];\n timeoutMs?: number;\n fetchImpl?: typeof fetch;\n onRequest?: HttpClientConfig[\"onRequest\"];\n}\n\nexport type HttpClientFactory = (config: HttpClientFactoryConfig) => HttpClient;\n\nexport const httpClientFactory = defineResource({\n id: \"globals.resources.httpClientFactory\",\n meta: {\n title: \"HTTP Client Factory\",\n description:\n \"Factory for creating HTTP clients with automatic injection of serializer, error registry, and async contexts from the store.\",\n },\n // Use it as a function to avoid circular dependencies, and undefined\n dependencies: () => ({\n serializer: serializer,\n store: store,\n }),\n init: async (_, { serializer, store }) => {\n // Build error registry from store.errors\n const errorRegistry = new Map<string, IErrorHelper<any>>();\n for (const [id, helper] of store.errors) {\n errorRegistry.set(id, helper);\n }\n\n // Collect contexts from store.asyncContexts\n const contexts = Array.from(\n store.asyncContexts.values(),\n ) as unknown as IAsyncContext<any>[];\n\n const create: HttpClientFactory = (config: HttpClientFactoryConfig) =>\n createHttpClient({\n ...config,\n serializer,\n errorRegistry,\n contexts,\n });\n\n return create;\n },\n});\n\nexport type { HttpClient };\n","import { defineResource } from \"../define\";\nimport { EventManager } from \"../models/EventManager\";\nimport { Logger } from \"../models/Logger\";\nimport { Store } from \"../models/Store\";\nimport { TaskRunner } from \"../models/TaskRunner\";\nimport { cacheResource } from \"./middleware/cache.middleware\";\nimport { circuitBreakerResource } from \"./middleware/circuitBreaker.middleware\";\nimport { concurrencyResource } from \"./middleware/concurrency.middleware\";\nimport { rateLimitResource } from \"./middleware/rateLimit.middleware\";\nimport { temporalResource } from \"./middleware/temporal.middleware\";\nimport { queueResource } from \"./resources/queue.resource\";\nimport { globalTags } from \"./globalTags\";\nimport { MiddlewareManager } from \"../models/MiddlewareManager\";\nimport type { SerializerLike as Serializer } from \"../serializer\";\nimport { httpClientFactory } from \"./resources/httpClientFactory.resource\";\n\nconst systemTag = globalTags.system;\n\nexport const store = defineResource<void, Promise<Store>>({\n id: \"globals.resources.store\",\n meta: {\n title: \"Store\",\n description:\n \"A global store that can be used to store and retrieve tasks, resources, events and middleware\",\n },\n tags: [systemTag],\n});\n\nexport const serializer = defineResource<void, Promise<Serializer>>({\n id: \"globals.resources.serializer\",\n meta: {\n title: \"Serializer\",\n description:\n \"Serializes and deserializes data. Supports stringify/parse and custom type registration via addType.\",\n },\n tags: [systemTag],\n});\n\nexport const globalResources = {\n store,\n middlewareManager: defineResource<void, Promise<MiddlewareManager>>({\n id: \"globals.resources.middlewareManager\",\n meta: {\n title: \"Middleware Manager\",\n description: \"Manages all middleware and middleware interceptors.\",\n },\n tags: [systemTag],\n }),\n eventManager: defineResource<void, Promise<EventManager>>({\n id: \"globals.resources.eventManager\",\n meta: {\n title: \"Event Manager\",\n description:\n \"Manages all events and event listeners. This is meant to be used internally for most use-cases.\",\n },\n tags: [systemTag],\n dispose: async (eventManager) => {\n eventManager.dispose();\n },\n }),\n taskRunner: defineResource<void, Promise<TaskRunner>>({\n id: \"globals.resources.taskRunner\",\n meta: {\n title: \"Task Runner\",\n description:\n \"Manages the execution of tasks and task dependencies. This is meant to be used internally for most use-cases.\",\n },\n tags: [systemTag],\n }),\n logger: defineResource<void, Promise<Logger>>({\n id: \"globals.resources.logger\",\n meta: {\n // We skip system tag for logger because it's part of the utility toolkit.\n title: \"Logger\",\n description:\n \"Logs all events and errors. This is meant to be used internally for most use-cases. Emits a globals.log event for each log.\",\n },\n tags: [systemTag],\n }),\n serializer,\n cache: cacheResource,\n queue: queueResource,\n httpClientFactory: httpClientFactory,\n\n // Middleware State Resources\n rateLimit: rateLimitResource,\n circuitBreaker: circuitBreakerResource,\n temporal: temporalResource,\n concurrency: concurrencyResource,\n} as const;\n","import { defineTaskMiddleware, defineResourceMiddleware } from \"../../define\";\nimport { journal } from \"../../models/ExecutionJournal\";\n\nenum AbortSignalEventType {\n Abort = \"abort\",\n}\n\nexport interface TimeoutMiddlewareConfig {\n /**\n * Maximum time in milliseconds before the wrapped operation is aborted\n * and a timeout error is thrown. Defaults to 5000ms.\n */\n ttl: number;\n}\n\n/**\n * Custom error class for timeout errors.\n * Using a class allows proper instanceof checks.\n */\nexport class TimeoutError extends Error {\n constructor(message: string) {\n super(message);\n this.name = \"TimeoutError\";\n }\n}\n\n/**\n * Journal keys exposed by the timeout middleware.\n * Use these to access shared state from downstream middleware or tasks.\n */\nexport const journalKeys = {\n /** The AbortController created by the timeout middleware */\n abortController: journal.createKey<AbortController>(\n \"globals.middleware.timeout.abortController\",\n ),\n} as const;\n\nexport const timeoutTaskMiddleware = defineTaskMiddleware({\n id: \"globals.middleware.timeout.task\",\n async run({ task, next, journal }, _deps, config: TimeoutMiddlewareConfig) {\n const input = task?.input;\n\n const ttl = Math.max(0, config.ttl);\n const message = `Operation timed out after ${ttl}ms`;\n const timeoutError = new TimeoutError(message);\n\n // Fast-path: immediate timeout\n if (ttl === 0) {\n throw timeoutError;\n }\n\n const controller = new AbortController();\n\n // Expose controller for downstream middleware/tasks\n journal.set(journalKeys.abortController, controller);\n\n return await new Promise((resolve, reject) => {\n let settled = false;\n\n const abortHandler = () => settle(\"reject\", timeoutError);\n\n const settle = (kind: \"resolve\" | \"reject\", value?: unknown) => {\n if (settled) return;\n settled = true;\n clearTimeout(timeoutId);\n controller.signal.removeEventListener(\n AbortSignalEventType.Abort,\n abortHandler,\n );\n if (kind === \"resolve\") {\n resolve(value);\n } else {\n reject(value);\n }\n };\n\n const timeoutId = setTimeout(() => {\n controller.abort();\n settle(\"reject\", timeoutError);\n }, ttl);\n\n controller.signal.addEventListener(\n AbortSignalEventType.Abort,\n abortHandler,\n );\n\n const finish = (cb: () => Promise<unknown>) => {\n cb().then(\n (result) => settle(\"resolve\", result),\n (error) => settle(\"reject\", error),\n );\n };\n\n finish(() => next(input as unknown));\n });\n },\n});\n\nexport const timeoutResourceMiddleware = defineResourceMiddleware({\n id: \"globals.middleware.timeout.resource\",\n async run({ resource, next }, _deps, config: TimeoutMiddlewareConfig) {\n const input = resource?.config;\n const ttl = Math.max(0, config.ttl);\n const message = `Operation timed out after ${ttl}ms`;\n const timeoutError = new TimeoutError(message);\n if (ttl === 0) {\n throw timeoutError;\n }\n const controller = new AbortController();\n return await new Promise((resolve, reject) => {\n let settled = false;\n\n const abortHandler = () => settle(\"reject\", timeoutError);\n\n const settle = (kind: \"resolve\" | \"reject\", value?: unknown) => {\n if (settled) return;\n settled = true;\n clearTimeout(timeoutId);\n controller.signal.removeEventListener(\n AbortSignalEventType.Abort,\n abortHandler,\n );\n if (kind === \"resolve\") {\n resolve(value);\n } else {\n reject(value);\n }\n };\n\n const timeoutId = setTimeout(() => {\n controller.abort();\n settle(\"reject\", timeoutError);\n }, ttl);\n\n controller.signal.addEventListener(\n AbortSignalEventType.Abort,\n abortHandler,\n );\n\n const finish = (cb: () => Promise<unknown>) => {\n cb().then(\n (result) => settle(\"resolve\", result),\n (error) => settle(\"reject\", error),\n );\n };\n\n finish(() => next(input as unknown));\n });\n },\n});\n","import { defineTaskMiddleware, defineResourceMiddleware } from \"../../define\";\nimport { journal as journalHelper } from \"../../models/ExecutionJournal\";\nimport { journalKeys as timeoutJournalKeys } from \"./timeout.middleware\";\n\n/**\n * Configuration options for the retry middleware\n */\nexport interface RetryMiddlewareConfig {\n /**\n * Maximum number of retry attempts (default: 3)\n */\n retries?: number;\n /**\n * Callback to determine if retry should stop based on error\n * @default () => false (retry all errors)\n */\n stopRetryIf?: (error: Error) => boolean;\n /**\n * Custom delay strategy function\n * @default Exponential backoff starting at 100ms\n */\n delayStrategy?: (attempt: number, error: Error) => number;\n}\n\n/**\n * Journal keys exposed by the retry middleware.\n * Use these to access shared state from downstream middleware or tasks.\n */\nexport const journalKeys = {\n /** Current retry attempt number (0 = first attempt, 1 = first retry, etc.) */\n attempt: journalHelper.createKey<number>(\"globals.middleware.retry.attempt\"),\n /** The last error that caused a retry */\n lastError: journalHelper.createKey<Error>(\n \"globals.middleware.retry.lastError\",\n ),\n} as const;\n\nexport const retryTaskMiddleware = defineTaskMiddleware({\n id: \"globals.middleware.retry.task\",\n async run({ task, next, journal }, _deps, config: RetryMiddlewareConfig) {\n const input = task?.input;\n let attempts = 0;\n\n // Set defaults for required parameters\n const maxRetries = config.retries ?? 3;\n const shouldStop = config.stopRetryIf ?? (() => false);\n\n // Set initial attempt count\n journal.set(journalKeys.attempt, attempts, { override: true });\n\n while (true) {\n try {\n return await next(input);\n } catch (error) {\n const err = error as Error;\n\n // Check if timeout middleware has set an abort controller (fetch dynamically)\n const abortController = journal.get(timeoutJournalKeys.abortController);\n\n // Don't retry if the operation was aborted (timeout triggered)\n if (abortController?.signal.aborted) {\n throw error;\n }\n\n if (shouldStop(err) || attempts >= maxRetries) {\n throw error;\n }\n\n // Calculate delay using custom strategy or default exponential backoff\n const delay = config.delayStrategy\n ? config.delayStrategy(attempts, err)\n : 100 * Math.pow(2, attempts);\n\n if (delay > 0) {\n await new Promise((resolve) => setTimeout(resolve, delay));\n }\n\n attempts++;\n // Update journal with current attempt and last error\n journal.set(journalKeys.attempt, attempts, { override: true });\n journal.set(journalKeys.lastError, err, { override: true });\n }\n }\n },\n});\n\nexport const retryResourceMiddleware = defineResourceMiddleware({\n id: \"globals.middleware.retry.resource\",\n async run({ resource, next }, _deps, config: RetryMiddlewareConfig) {\n const input = resource?.config;\n let attempts = 0;\n const maxRetries = config.retries ?? 3;\n const shouldStop = config.stopRetryIf ?? (() => false);\n while (true) {\n try {\n return await next(input);\n } catch (error) {\n const err = error as Error;\n if (shouldStop(err) || attempts >= maxRetries) {\n throw error;\n }\n const delay = config.delayStrategy\n ? config.delayStrategy(attempts, err)\n : 100 * Math.pow(2, attempts);\n if (delay > 0) {\n await new Promise((resolve) => setTimeout(resolve, delay));\n }\n attempts++;\n }\n }\n },\n});\n","import { defineTaskMiddleware, isTask } from \"../../define\";\nimport { journal as journalHelper } from \"../../models/ExecutionJournal\";\nimport { globalResources } from \"../globalResources\";\n\nexport interface FallbackMiddlewareConfig {\n /**\n * The fallback to use if the task fails.\n * Can be a value, a function that returns a value (or promise), or another task.\n */\n fallback: any;\n}\n\n/**\n * Journal keys exposed by the fallback middleware.\n * Use these to access shared state from downstream middleware or tasks.\n */\nexport const journalKeys = {\n /** Whether the fallback path was taken (true) or primary succeeded (false) */\n active: journalHelper.createKey<boolean>(\n \"globals.middleware.task.fallback.active\",\n ),\n /** The error that triggered the fallback (only set when active is true) */\n error: journalHelper.createKey<Error>(\n \"globals.middleware.task.fallback.error\",\n ),\n} as const;\n\n/**\n * Fallback middleware: provides a backup value or execution if the main task fails.\n */\nexport const fallbackTaskMiddleware = defineTaskMiddleware({\n id: \"globals.middleware.task.fallback\",\n dependencies: {\n taskRunner: globalResources.taskRunner,\n },\n async run(\n { task, next, journal },\n { taskRunner },\n config: FallbackMiddlewareConfig,\n ) {\n // Set default: fallback not active\n journal.set(journalKeys.active, false, { override: true });\n\n try {\n return await next(task.input);\n } catch (error) {\n const { fallback } = config;\n\n // Mark fallback as active and record the error\n journal.set(journalKeys.active, true, { override: true });\n journal.set(journalKeys.error, error as Error, { override: true });\n\n if (isTask(fallback)) {\n // If it's a task, run it with the same input using the taskRunner\n return await taskRunner.run(fallback, task.input);\n }\n\n if (typeof fallback === \"function\") {\n // If it's a function, call it with the error and task input\n return await fallback(error, task.input);\n }\n\n // Otherwise, return the fallback value directly\n return fallback;\n }\n },\n});\n","import {\n cacheMiddleware,\n journalKeys as cacheJournalKeys,\n} from \"./middleware/cache.middleware\";\nimport { concurrencyTaskMiddleware } from \"./middleware/concurrency.middleware\";\nimport {\n circuitBreakerMiddleware,\n journalKeys as circuitBreakerJournalKeys,\n} from \"./middleware/circuitBreaker.middleware\";\nimport { requireContextTaskMiddleware } from \"./middleware/requireContext.middleware\";\nimport {\n retryTaskMiddleware,\n retryResourceMiddleware,\n journalKeys as retryJournalKeys,\n} from \"./middleware/retry.middleware\";\nimport {\n timeoutTaskMiddleware,\n timeoutResourceMiddleware,\n journalKeys as timeoutJournalKeys,\n} from \"./middleware/timeout.middleware\";\nimport {\n debounceTaskMiddleware,\n throttleTaskMiddleware,\n} from \"./middleware/temporal.middleware\";\nimport {\n fallbackTaskMiddleware,\n journalKeys as fallbackJournalKeys,\n} from \"./middleware/fallback.middleware\";\nimport {\n rateLimitTaskMiddleware,\n journalKeys as rateLimitJournalKeys,\n} from \"./middleware/rateLimit.middleware\";\n\n/**\n * Global middlewares\n */\nexport const globalMiddlewares = {\n requireContext: requireContextTaskMiddleware,\n task: {\n requireContext: requireContextTaskMiddleware,\n cache: Object.assign(cacheMiddleware, {\n journalKeys: cacheJournalKeys,\n }),\n concurrency: concurrencyTaskMiddleware,\n debounce: debounceTaskMiddleware,\n throttle: throttleTaskMiddleware,\n fallback: Object.assign(fallbackTaskMiddleware, {\n journalKeys: fallbackJournalKeys,\n }),\n rateLimit: Object.assign(rateLimitTaskMiddleware, {\n journalKeys: rateLimitJournalKeys,\n }),\n // common with resources\n retry: Object.assign(retryTaskMiddleware, {\n journalKeys: retryJournalKeys,\n }),\n timeout: Object.assign(timeoutTaskMiddleware, {\n journalKeys: timeoutJournalKeys,\n }),\n circuitBreaker: Object.assign(circuitBreakerMiddleware, {\n journalKeys: circuitBreakerJournalKeys,\n }),\n },\n resource: {\n retry: retryResourceMiddleware,\n timeout: timeoutResourceMiddleware,\n },\n};\n","import { ITaggable } from \"../../../defs\";\nimport { debugTag } from \"./debug.tag\";\n\nexport type DebugConfig = {\n logResourceConfig: boolean;\n logResourceValue: boolean;\n logResourceBeforeRun: boolean;\n logResourceAfterRun: boolean;\n logTaskBeforeRun: boolean;\n logTaskInput: boolean;\n logTaskOutput: boolean;\n logTaskAfterRun: boolean;\n logMiddlewareBeforeRun: boolean;\n logMiddlewareAfterRun: boolean;\n logEventEmissionOnRun: boolean;\n logEventEmissionInput: boolean;\n logHookTriggered: boolean;\n logHookCompleted: boolean;\n};\n\nexport const allFalse: DebugConfig = Object.freeze({\n logResourceBeforeRun: false,\n logResourceAfterRun: false,\n logMiddlewareBeforeRun: false,\n logMiddlewareAfterRun: false,\n logTaskBeforeRun: false,\n logTaskAfterRun: false,\n logTaskInput: false,\n logTaskOutput: false,\n logResourceConfig: false,\n logResourceValue: false,\n logHookTriggered: false,\n logHookCompleted: false,\n logEventEmissionOnRun: false,\n logEventEmissionInput: false,\n});\n\nexport const levelNormal: DebugConfig = Object.freeze({\n ...allFalse,\n logTaskAfterRun: true,\n logTaskBeforeRun: true,\n logResourceBeforeRun: true,\n logResourceAfterRun: true,\n logMiddlewareBeforeRun: true,\n logMiddlewareAfterRun: true,\n logHookTriggered: true,\n logHookCompleted: true,\n logEventEmissionOnRun: true,\n});\n\nObject.freeze(levelNormal);\n\nexport const levelVerbose: DebugConfig = Object.freeze({\n ...levelNormal,\n logTaskInput: true,\n logTaskOutput: true,\n logResourceConfig: true,\n logResourceValue: true,\n logHookTriggered: true,\n logHookCompleted: true,\n});\n\nObject.freeze(levelVerbose);\n\n/**\n * If you choose to specify your own config, all values will be set to false by default and extended by your config.\n */\nexport type DebugFriendlyConfig = \"normal\" | \"verbose\" | Partial<DebugConfig>;\n\nfunction formatConfig(config: DebugFriendlyConfig): DebugConfig {\n if (config === \"normal\") {\n return { ...levelNormal };\n }\n if (config === \"verbose\") {\n return { ...levelVerbose };\n }\n return { ...allFalse, ...config };\n}\n\nexport const getConfig = (\n config: DebugFriendlyConfig,\n taggable?: ITaggable,\n): DebugConfig => {\n if (!taggable) {\n return formatConfig(config);\n }\n const debugTagConfig = debugTag.extract(taggable);\n\n if (debugTagConfig) {\n const debugTagConfigFormatted = formatConfig(debugTagConfig);\n return { ...formatConfig(config), ...debugTagConfigFormatted };\n }\n\n return formatConfig(config);\n};\n","import { levelNormal, levelVerbose } from \"./resources/debug/types\";\n\nexport const debugLevels = {\n normal: levelNormal,\n verbose: levelVerbose,\n};\n\nexport const debug = {\n levels: debugLevels,\n};\n","import { DependencyMapType, ITask } from \"../defs\";\nimport { EventManager } from \"./EventManager\";\nimport { Store } from \"./Store\";\nimport { Logger } from \"./Logger\";\nimport { MiddlewareManager } from \"./MiddlewareManager\";\nimport type { ExecutionJournal } from \"../types/executionJournal\";\nimport type { TaskCallOptions } from \"../types/utilities\";\n\nexport class TaskRunner {\n protected readonly runnerStore = new Map<\n string | symbol,\n (input: any, journal?: ExecutionJournal) => Promise<any>\n >();\n\n constructor(\n protected readonly store: Store,\n protected readonly eventManager: EventManager,\n protected readonly logger: Logger,\n ) {\n // Use the same MiddlewareManager instance from the Store so that\n // any interceptors registered via resources (like debug) affect task runs.\n this.middlewareManager = this.store.getMiddlewareManager();\n }\n\n private readonly middlewareManager: MiddlewareManager;\n\n /**\n * Begins the execution of a task. These are registered tasks and all sanity checks have been performed at this stage to ensure consistency of the object.\n * This function can throw only if any of the event listeners or run function throws\n * @param task the task to be run\n * @param input the input to be passed to the task\n * @param options optional call options including journal for forwarding\n */\n public async run<\n TInput,\n TOutput extends Promise<any>,\n TDeps extends DependencyMapType,\n >(\n task: ITask<TInput, TOutput, TDeps>,\n input?: TInput,\n options?: TaskCallOptions,\n ): Promise<TOutput | undefined> {\n let runner = this.runnerStore.get(task.id);\n if (!runner) {\n runner = this.createRunnerWithMiddleware<TInput, TOutput, TDeps>(task);\n\n this.runnerStore.set(task.id, runner);\n }\n\n try {\n // Pass journal if provided; composer will use it or create new\n return await runner(input, options?.journal);\n } catch (error) {\n try {\n await this.store.onUnhandledError({\n error,\n kind: \"task\",\n source: task.id,\n });\n } catch (_) {}\n throw error;\n }\n }\n\n /**\n * Creates the function with the chain of middleware.\n * @param task\n * @returns\n */\n protected createRunnerWithMiddleware<\n TInput,\n TOutput extends Promise<any>,\n TDeps extends DependencyMapType,\n >(task: ITask<TInput, TOutput, TDeps>) {\n return this.middlewareManager.composeTaskRunner(task);\n }\n}\n","import {\n DependencyMapType,\n IResource,\n ResourceDependencyValuesType,\n} from \"../defs\";\nimport { EventManager } from \"./EventManager\";\nimport { Store } from \"./Store\";\nimport { Logger } from \"./Logger\";\nimport type { MiddlewareManager } from \"./MiddlewareManager\";\n\nexport class ResourceInitializer {\n constructor(\n protected readonly store: Store,\n protected readonly eventManager: EventManager,\n protected readonly logger: Logger,\n ) {\n this.middlewareManager = this.store.getMiddlewareManager();\n }\n\n private readonly middlewareManager: MiddlewareManager;\n\n /**\n * Begins the execution of a task. These are registered tasks and all sanity checks have been performed at this stage to ensure consistency of the object.\n * This function can throw only if any of the event listeners or run function throws\n */\n public async initializeResource<\n TConfig = null,\n TValue extends Promise<any> = Promise<any>,\n TDeps extends DependencyMapType = {},\n TContext = any,\n >(\n resource: IResource<TConfig, TValue, TDeps>,\n config: TConfig,\n dependencies: ResourceDependencyValuesType<TDeps>,\n ): Promise<{ value: TValue | undefined; context: TContext }> {\n const context = resource.context ? resource.context() : ({} as TContext);\n\n const value = await this.initWithMiddleware(\n resource,\n config,\n dependencies,\n context,\n );\n\n return { value, context };\n }\n\n // Lifecycle emissions removed\n\n public async initWithMiddleware<\n C,\n V extends Promise<any>,\n D extends DependencyMapType,\n TContext,\n >(\n resource: IResource<C, V, D, TContext>,\n config: C,\n dependencies: ResourceDependencyValuesType<D>,\n context: TContext,\n ) {\n return this.middlewareManager.runResourceInit(\n resource,\n config,\n dependencies,\n context,\n );\n }\n}\n","export function safeStringify(\n value: unknown,\n space?: number,\n options?: { maxDepth?: number },\n): string {\n const seen = new WeakSet<object>();\n const holderDepth = new WeakMap<object, number>();\n\n const maxDepth =\n typeof options?.maxDepth === \"number\" ? options.maxDepth : Infinity;\n\n const replacer = function (this: unknown, _key: string, val: unknown) {\n // Normalize functions to a readable placeholder\n if (typeof val === \"function\") {\n return \"function()\";\n }\n\n // Normalize BigInt safely\n if (typeof val === \"bigint\") {\n return val.toString();\n }\n\n // Compute the depth of the current value based on its holder (this)\n const holderObject = Object(this);\n const parentDepth = holderDepth.get(holderObject as object) || 0;\n const currentDepth = parentDepth + 1;\n\n if (typeof val === \"object\" && val !== null) {\n if (seen.has(val)) return \"[Circular]\";\n\n // Apply depth limiting beyond the configured depth\n if (currentDepth > maxDepth) {\n return Array.isArray(val) ? \"[Array]\" : \"[Object]\";\n }\n\n seen.add(val);\n holderDepth.set(val, currentDepth);\n }\n return val;\n } as (this: unknown, key: string, value: unknown) => unknown;\n\n try {\n // JSON.stringify's replacer type is complex (overloaded). Our replacer satisfies\n // the (key: string, value: unknown) => unknown signature used at runtime.\n return JSON.stringify(\n value,\n replacer as (key: string, value: unknown) => unknown,\n space,\n );\n } catch {\n try {\n return String(value);\n } catch {\n return \"[Unserializable]\";\n }\n }\n}\n","import { safeStringify } from \"./utils/safeStringify\";\n\nconst ansiRegex =\n /[\u001b][[()#;?]*(?:[0-9]{1,4}(?:;[0-9]{0,4})*)?[0-9A-ORZcf-nqry=><]/g;\nfunction stripAnsi(str: string): string {\n return str.replace(ansiRegex, \"\");\n}\n\nexport type PrintStrategy = \"pretty\" | \"plain\" | \"json\" | \"json_pretty\";\n\nexport type LogLevels =\n | \"trace\"\n | \"debug\"\n | \"info\"\n | \"warn\"\n | \"error\"\n | \"critical\";\n\nexport interface PrintableLog {\n level: LogLevels;\n source?: string;\n message: any;\n timestamp: Date;\n error?: {\n name: string;\n message: string;\n stack?: string;\n };\n data?: Record<string, any>;\n context?: Record<string, any>;\n}\n\nexport type ColorTheme = {\n trace: string;\n debug: string;\n info: string;\n warn: string;\n error: string;\n critical: string;\n reset: string;\n bold: string;\n dim: string;\n blue: string;\n cyan: string;\n gray: string;\n};\n\nconst COLORS: Readonly<ColorTheme> = {\n trace: \"\\x1b[90m\",\n debug: \"\\x1b[36m\",\n info: \"\\x1b[32m\",\n warn: \"\\x1b[33m\",\n error: \"\\x1b[31m\",\n critical: \"\\x1b[35m\",\n reset: \"\\x1b[0m\",\n bold: \"\\x1b[1m\",\n dim: \"\\x1b[2m\",\n blue: \"\\x1b[34m\",\n cyan: \"\\x1b[36m\",\n gray: \"\\x1b[90m\",\n} as const;\n\nconst ICONS = {\n trace: \"○\",\n debug: \"◆\",\n info: \"●\",\n warn: \"▲\",\n error: \"✕\",\n critical: \"█\",\n} as const;\n\nexport class LogPrinter {\n private strategy: PrintStrategy;\n private colors: ColorTheme;\n\n constructor(options: {\n strategy: PrintStrategy;\n useColors: boolean;\n colorTheme?: Partial<ColorTheme>;\n }) {\n this.strategy = options.strategy;\n if (options.strategy === \"plain\") {\n this.colors = LogPrinter.NO_COLORS;\n } else {\n const base =\n options.useColors || options.colorTheme ? COLORS : LogPrinter.NO_COLORS;\n this.colors = { ...base, ...(options.colorTheme || {}) };\n }\n }\n\n public print(log: PrintableLog): void {\n if (this.strategy === \"json\") {\n LogPrinter.writers.log(safeStringify(this.normalizeForJson(log)));\n return;\n }\n\n if (this.strategy === \"json_pretty\") {\n LogPrinter.writers.log(safeStringify(this.normalizeForJson(log), 2));\n return;\n }\n\n // Pretty, multi-line output\n const { level, source, message, timestamp, error, data, context } = log;\n\n const timePart = this.formatTime(timestamp);\n const levelPart = this.formatLevel(level);\n const sourcePart = this.formatSource(source);\n\n const headerLine = [timePart, levelPart, sourcePart]\n .filter(Boolean)\n .join(\" \");\n\n const messageString = this.formatMessage(message);\n const messageLines = messageString.split(\"\\n\");\n\n const output: string[] = [headerLine];\n\n const timePartLength = stripAnsi(timePart).length;\n const levelPartLength = stripAnsi(levelPart).length;\n // Indentation is length of time + space + level + space\n const indentation = \" \".repeat(timePartLength + 1 + levelPartLength + 1);\n\n if (message) {\n output.push(...messageLines.map((line) => `${indentation}${line}`));\n }\n\n const errorLines = this.formatError(error);\n const dataLines = this.formatData(data);\n const contextLines = this.formatContext(context);\n\n const detailsExist =\n errorLines.length > 0 || dataLines.length > 0 || contextLines.length > 0;\n\n if (detailsExist) {\n output.push(\"\"); // Add a space before details\n }\n\n output.push(...errorLines, ...dataLines, ...contextLines);\n\n if (detailsExist) {\n output.push(\"\"); // Add a space after for readability\n }\n\n const writer = this.pickWriter(level);\n output.forEach((line) => writer(line));\n // New line for readability especially in console\n writer(\"\");\n }\n\n private pickWriter(level: LogLevels) {\n const toError =\n level === \"warn\" || level === \"error\" || level === \"critical\";\n if (toError && typeof LogPrinter.writers.error === \"function\") {\n return (msg: any) => LogPrinter.writers.error!(msg);\n }\n return (msg: any) => LogPrinter.writers.log(msg);\n }\n\n private formatTime(timestamp: Date): string {\n const time = timestamp.toISOString().slice(11, 19);\n const ms = timestamp.getMilliseconds().toString().padStart(3, \"0\");\n return `${this.colors.gray}${time}.${ms}${this.colors.reset}`;\n }\n\n private formatLevel(level: string): string {\n const color = this.colors[level as keyof typeof COLORS] || this.colors.info;\n const icon = ICONS[level as keyof typeof ICONS] || \"●\";\n const label = level.toUpperCase().padEnd(7);\n return `${color}${icon} ${this.colors.bold}${label}${this.colors.reset}`;\n }\n\n private formatSource(source?: string): string {\n if (!source) return \"\";\n return `${this.colors.cyan}${source}${this.colors.reset}`;\n }\n\n private formatMessage(message: any): string {\n if (typeof message === \"object\" && message !== null) {\n return safeStringify(message, 2);\n }\n return String(message);\n }\n\n private formatError(\n error: PrintableLog[\"error\"],\n indentation = \" \",\n ): string[] {\n if (!error) return [];\n const lines: string[] = [];\n lines.push(\n `${indentation}${this.colors.gray}╰─${this.colors.reset} ${this.colors.error}Error: ${error.name}: ${error.message}${this.colors.reset}`,\n );\n if (error.stack) {\n const frames = error.stack.split(\"\\n\").slice(1); // slice(1) to skip the error message line\n frames.forEach((frame) => {\n const cleaned = frame.trim().replace(/^at /, \"\");\n lines.push(\n `${indentation} ${this.colors.gray}↳${this.colors.reset} ${this.colors.dim}${cleaned}${this.colors.reset}`,\n );\n });\n }\n return lines;\n }\n\n private formatData(data?: Record<string, any>, indentation = \" \"): string[] {\n if (!data || Object.keys(data).length === 0) return [];\n const lines: string[] = [];\n const formatted = safeStringify(data, 2, { maxDepth: 3 }).split(\"\\n\");\n lines.push(\n `${indentation}${this.colors.gray}╰─${this.colors.reset} ${this.colors.cyan}Data:${this.colors.reset}`,\n );\n formatted.forEach((line) => {\n // Keep data lines non-padded to save horizontal space\n lines.push(`${indentation}${this.colors.dim}${line}${this.colors.reset}`);\n });\n return lines;\n }\n\n private formatContext(\n context?: Record<string, any>,\n indentation = \" \",\n ): string[] {\n if (!context) return [];\n const { source: _source, ...filtered } = context;\n if (Object.keys(filtered).length === 0) return [];\n const lines: string[] = [];\n const formatted = safeStringify(filtered, 2, { maxDepth: 3 }).split(\"\\n\");\n lines.push(\n `${indentation}${this.colors.gray}╰─${this.colors.reset} ${this.colors.blue}Context:${this.colors.reset}`,\n );\n formatted.forEach((line) => {\n // Keep context lines non-padded to save horizontal space\n lines.push(`${indentation}${this.colors.dim}${line}${this.colors.reset}`);\n });\n return lines;\n }\n\n private normalizeForJson(log: PrintableLog): PrintableLog {\n const normalized = { ...log };\n if (typeof log.message === \"object\") {\n const text = safeStringify(log.message);\n try {\n normalized.message = JSON.parse(text);\n } catch {\n normalized.message = text;\n }\n }\n return normalized;\n }\n\n private static NO_COLORS: ColorTheme = {\n trace: \"\",\n debug: \"\",\n info: \"\",\n warn: \"\",\n error: \"\",\n critical: \"\",\n reset: \"\",\n bold: \"\",\n dim: \"\",\n blue: \"\",\n cyan: \"\",\n gray: \"\",\n } as const;\n\n private static readonly DEFAULT_WRITERS = {\n log: (msg: any) => {\n if (typeof console !== \"undefined\" && typeof console.log === \"function\") {\n console.log(msg);\n }\n },\n error: (msg: any) => {\n if (\n typeof console !== \"undefined\" &&\n typeof console.error === \"function\"\n ) {\n console.error(msg);\n }\n },\n };\n\n private static writers: {\n log: (msg: any) => void;\n error?: (msg: any) => void;\n } = { ...LogPrinter.DEFAULT_WRITERS };\n\n public static setWriters(\n writers: Partial<{ log: (msg: any) => void; error?: (msg: any) => void }>,\n ) {\n LogPrinter.writers = { ...LogPrinter.writers, ...writers };\n }\n\n public static resetWriters() {\n LogPrinter.writers = { ...LogPrinter.DEFAULT_WRITERS };\n }\n}\n","import { LogPrinter, PrintStrategy as PrinterStrategy } from \"./LogPrinter\";\n\nexport type LogLevels =\n | \"trace\"\n | \"debug\"\n | \"info\"\n | \"warn\"\n | \"error\"\n | \"critical\";\n\nexport interface ILogInfo {\n source?: string;\n error?: unknown | Error;\n data?: Record<string, any>;\n context?: Record<string, any>;\n [key: string]: any;\n}\n\nexport interface ILog {\n level: LogLevels;\n source?: string;\n message: any;\n timestamp: Date;\n error?: {\n name: string;\n message: string;\n stack?: string;\n };\n data?: Record<string, any>;\n context?: Record<string, any>;\n}\n\nexport type PrintStrategy = PrinterStrategy;\nexport class Logger {\n private printThreshold: null | LogLevels = \"info\";\n private printStrategy: PrintStrategy = \"pretty\";\n private bufferLogs: boolean = false;\n private buffer: ILog[] = [];\n private boundContext: Record<string, any> = {};\n private isLocked: boolean = false;\n private useColors: boolean = true;\n private printer: LogPrinter;\n private source?: string;\n // Points to the top-level logger so child loggers share buffering, listeners, and printing.\n private rootLogger?: Logger;\n public localListeners: Array<(log: ILog) => void | Promise<void>> = [];\n\n public static Severity = {\n trace: 0,\n debug: 1,\n info: 2,\n warn: 3,\n error: 4,\n critical: 5,\n };\n\n constructor(\n options: {\n printThreshold: null | LogLevels;\n printStrategy: PrintStrategy;\n bufferLogs: boolean;\n useColors?: boolean;\n },\n boundContext: Record<string, any> = {},\n source?: string,\n printer?: LogPrinter,\n ) {\n this.boundContext = { ...boundContext };\n this.printThreshold = options.printThreshold;\n this.printStrategy = options.printStrategy;\n this.bufferLogs = options.bufferLogs;\n this.useColors =\n typeof options.useColors === \"boolean\"\n ? options.useColors\n : this.detectColorSupport();\n\n this.source = source;\n\n this.printer = printer\n ? printer\n : new LogPrinter({\n strategy: this.printStrategy,\n useColors: this.useColors,\n });\n }\n\n private detectColorSupport(): boolean {\n // Respect NO_COLOR convention\n\n const noColor = typeof process !== \"undefined\" && !!process.env.NO_COLOR;\n if (noColor) return false;\n\n const isTty =\n typeof process !== \"undefined\" &&\n !!process.stdout &&\n !!process.stdout.isTTY;\n return isTty;\n }\n\n /**\n * Creates a new logger instance with additional bound context\n */\n public with({\n source,\n additionalContext: context,\n }: {\n source?: string;\n additionalContext?: Record<string, any>;\n }): Logger {\n const child = new Logger(\n {\n printThreshold: this.printThreshold,\n printStrategy: this.printStrategy,\n bufferLogs: this.bufferLogs,\n useColors: this.useColors,\n },\n { ...this.boundContext, ...context },\n source,\n this.printer,\n );\n // Ensure child logger delegates buffering, listeners and printing to root\n child.rootLogger = this.rootLogger ?? this;\n return child;\n }\n\n /**\n * Core logging method with structured LogInfo\n */\n public async log(\n level: LogLevels,\n message: any,\n logInfo: ILogInfo = {},\n ): Promise<void> {\n const { source, error, data, ...context } = logInfo;\n\n const log: ILog = {\n level,\n message,\n source: source || this.source,\n timestamp: new Date(),\n error: error ? this.extractErrorInfo(error) : undefined,\n data: data || undefined,\n context: { ...this.boundContext, ...context },\n };\n\n const root = this.rootLogger ?? this;\n\n if (root.bufferLogs) {\n root.buffer.push(log);\n return;\n }\n\n await root.triggerLogListeners(log);\n\n if (root.canPrint(level)) {\n root.printer.print(log);\n }\n }\n\n private extractErrorInfo(error: Error | unknown): {\n name: string;\n message: string;\n stack?: string;\n } {\n if (error instanceof Error) {\n return {\n name: error.name,\n message: error.message,\n stack: error.stack,\n };\n }\n\n return {\n name: \"UnknownError\",\n message: String(error),\n };\n }\n\n public async info(message: any, logInfo?: ILogInfo) {\n await this.log(\"info\", message, logInfo);\n }\n\n public async error(message: any, logInfo?: ILogInfo) {\n await this.log(\"error\", message, logInfo);\n }\n\n public async warn(message: any, logInfo?: ILogInfo) {\n await this.log(\"warn\", message, logInfo);\n }\n\n public async debug(message: any, logInfo?: ILogInfo) {\n await this.log(\"debug\", message, logInfo);\n }\n\n public async trace(message: any, logInfo?: ILogInfo) {\n await this.log(\"trace\", message, logInfo);\n }\n\n public async critical(message: any, logInfo?: ILogInfo) {\n await this.log(\"critical\", message, logInfo);\n }\n\n /**\n * Direct print for tests and advanced scenarios. Delegates to LogPrinter.\n */\n public print(log: ILog) {\n this.printer.print(log);\n }\n\n /**\n * @param listener - A listener that will be triggered for every log.\n */\n public onLog(listener: (log: ILog) => any) {\n if (this.rootLogger && this.rootLogger !== this) {\n this.rootLogger.onLog(listener);\n } else {\n this.localListeners.push(listener);\n }\n }\n\n /**\n * Marks the logger as ready.\n * This is used to trigger the local listeners and print the buffered logs (if they exists)\n * @returns A promise that resolves when the logger is ready.\n */\n public async lock() {\n const root = this.rootLogger ?? this;\n if (root.isLocked) {\n return;\n }\n\n if (root.bufferLogs) {\n for (const log of root.buffer) {\n await root.triggerLogListeners(log);\n }\n for (const log of root.buffer) {\n if (root.canPrint(log.level)) {\n root.printer.print(log);\n }\n }\n }\n root.bufferLogs = false;\n root.buffer = [];\n root.isLocked = true;\n }\n\n private canPrint(level: LogLevels) {\n if (this.printThreshold === null) {\n return false;\n }\n\n return (\n this.printThreshold &&\n Logger.Severity[level] >= Logger.Severity[this.printThreshold]\n );\n }\n\n private async triggerLogListeners(log: ILog) {\n if (this.rootLogger && this.rootLogger !== this) {\n await this.rootLogger.triggerLogListeners(log);\n }\n\n for (const listener of this.localListeners) {\n try {\n await listener(log);\n } catch (error) {\n this.print({\n level: \"error\",\n message: \"Error in log listener\",\n timestamp: new Date(),\n error: {\n name: \"ListenerError\",\n message: error instanceof Error ? error.message : String(error),\n },\n });\n // We're not breaking the app due to logListener errors.\n continue;\n }\n }\n }\n}\n","import {\n DependencyMapType,\n DependencyValuesType,\n ITask,\n IResource,\n IEvent,\n IEventEmission,\n TaskLocalInterceptor,\n ResourceDependencyValuesType,\n TaskDependencyWithIntercept,\n TaskCallOptions,\n} from \"../defs\";\nimport { Store } from \"./Store\";\nimport {\n ResourceStoreElementType,\n TaskStoreElementType,\n HookDependencyState,\n} from \"../types/storeTypes\";\nimport * as utils from \"../define\";\nimport { EventManager } from \"./EventManager\";\nimport { ResourceInitializer } from \"./ResourceInitializer\";\nimport { TaskRunner } from \"./TaskRunner\";\nimport {\n dependencyNotFoundError,\n eventNotFoundError,\n unknownItemTypeError,\n} from \"../errors\";\nimport { Logger } from \"./Logger\";\n\n/**\n * Resolves and caches computed dependencies for store items (resources, tasks, middleware, hooks).\n */\nexport class DependencyProcessor {\n protected readonly resourceInitializer: ResourceInitializer;\n protected readonly logger!: Logger;\n constructor(\n protected readonly store: Store,\n protected readonly eventManager: EventManager,\n protected readonly taskRunner: TaskRunner,\n logger: Logger,\n ) {\n this.logger = logger.with({ source: \"dependencyProcessor\" });\n this.resourceInitializer = new ResourceInitializer(\n store,\n eventManager,\n logger,\n );\n }\n\n /**\n * Computes and caches dependencies for all registered store items.\n */\n async computeAllDependencies() {\n for (const middleware of this.store.resourceMiddlewares.values()) {\n const computedDependencies = await this.extractDependencies(\n middleware.middleware.dependencies,\n middleware.middleware.id,\n );\n\n middleware.computedDependencies = computedDependencies;\n middleware.isInitialized = true;\n }\n\n for (const middleware of this.store.taskMiddlewares.values()) {\n const computedDependencies = await this.extractDependencies(\n middleware.middleware.dependencies,\n middleware.middleware.id,\n );\n\n middleware.computedDependencies = computedDependencies;\n middleware.isInitialized = true;\n }\n\n // Compute hook dependencies before traversing resource/task dependencies.\n // Resource/task dependency extraction can initialize resources that emit\n // events; hooks must be dependency-ready before that happens.\n for (const hookStoreElement of this.store.hooks.values()) {\n const hook = hookStoreElement.hook;\n const deps = hook.dependencies as DependencyMapType;\n hookStoreElement.dependencyState = HookDependencyState.Computing;\n hookStoreElement.computedDependencies = await this.extractDependencies(\n deps,\n hook.id,\n );\n hookStoreElement.dependencyState = HookDependencyState.Ready;\n }\n\n for (const resource of this.store.resources.values()) {\n await this.processResourceDependencies(resource);\n }\n\n for (const task of this.store.tasks.values()) {\n await this.computeTaskDependencies(task);\n }\n\n // leftovers that were registered but not depended upon, except root\n // they should still be initialized as they might extend other\n await this.initializeUninitializedResources();\n }\n\n private async computeTaskDependencies(\n task: TaskStoreElementType<any, any, any>,\n ) {\n if (task.isInitialized) {\n return;\n }\n\n const deps = task.task.dependencies as DependencyMapType;\n task.computedDependencies = await this.extractDependencies(\n deps,\n task.task.id,\n );\n // Mark task as initialized so subsequent injections don't recompute using\n // a potentially lazy dependencies() function and lose computed values.\n task.isInitialized = true;\n }\n\n // Initialize non-root resources that are registered but not depended upon (side effects/disposers).\n public async initializeUninitializedResources() {\n for (const resource of this.store.resources.values()) {\n if (\n resource.isInitialized === false &&\n // The root is the last one to be initialized and is done in a separate process.\n resource.resource.id !== this.store.root.resource.id\n ) {\n try {\n await this.processResourceDependencies(resource);\n const { value, context } =\n await this.resourceInitializer.initializeResource(\n resource.resource,\n resource.config,\n resource.computedDependencies!,\n );\n resource.context = context;\n resource.value = value;\n resource.isInitialized = true;\n this.store.recordResourceInitialized(resource.resource.id);\n } catch (error: unknown) {\n this.rethrowResourceInitError(resource.resource.id, error);\n }\n }\n }\n }\n\n private rethrowResourceInitError(resourceId: string, error: unknown): never {\n const prefix = `Resource \"${resourceId}\" initialization failed`;\n if (error instanceof Error) {\n if (!error.message.includes(resourceId)) {\n error.message = `${prefix}: ${error.message}`;\n }\n if (!Object.prototype.hasOwnProperty.call(error, \"resourceId\")) {\n Object.defineProperty(error, \"resourceId\", {\n value: resourceId,\n configurable: true,\n });\n }\n if (!Object.prototype.hasOwnProperty.call(error, \"cause\")) {\n Object.defineProperty(error, \"cause\", {\n value: { resourceId },\n configurable: true,\n });\n }\n throw error;\n }\n\n throw new Error(`${prefix}: ${String(error)}`);\n }\n\n /**\n * Computes and caches dependencies for a resource (if not already computed).\n */\n protected async processResourceDependencies<TD extends DependencyMapType>(\n resource: ResourceStoreElementType<any, any, TD>,\n ) {\n if (Object.keys(resource.computedDependencies || {}).length > 0) {\n return;\n }\n\n const deps = (resource.resource.dependencies || ({} as TD)) as TD;\n const extracted = await this.extractDependencies(\n deps,\n resource.resource.id,\n );\n\n resource.computedDependencies = this.wrapResourceDependencies<TD>(\n deps,\n extracted,\n );\n // resource.isInitialized = true;\n }\n\n private wrapResourceDependencies<TD extends DependencyMapType>(\n deps: TD,\n extracted: DependencyValuesType<TD>,\n ): ResourceDependencyValuesType<TD> {\n const wrapped: Record<string, unknown> = {};\n for (const key of Object.keys(deps) as Array<keyof TD>) {\n const original = deps[key];\n const value = (extracted as Record<string, unknown>)[key as string];\n if (utils.isOptional(original)) {\n const inner = (original as { inner: unknown }).inner;\n if (utils.isTask(inner)) {\n wrapped[key as string] = value\n ? this.makeTaskWithIntercept(inner)\n : undefined;\n } else {\n wrapped[key as string] = value as unknown;\n }\n continue;\n }\n if (utils.isTask(original)) {\n wrapped[key as string] = this.makeTaskWithIntercept(original);\n } else {\n wrapped[key as string] = value as unknown;\n }\n }\n return wrapped as unknown as ResourceDependencyValuesType<TD>;\n }\n\n private makeTaskWithIntercept<\n I,\n O extends Promise<any>,\n D extends DependencyMapType,\n >(original: ITask<I, O, D>): TaskDependencyWithIntercept<I, O> {\n const taskId = original.id;\n const fn: (input: I, options?: TaskCallOptions) => O = (input, options) => {\n const storeTask = this.store.tasks.get(taskId)!;\n const effective: ITask<I, O, D> = storeTask.task;\n\n return this.taskRunner.run(effective, input, options) as O;\n };\n return Object.assign(fn, {\n intercept: (middleware: TaskLocalInterceptor<I, O>) => {\n this.store.checkLock();\n const storeTask = this.store.tasks.get(taskId)!;\n\n if (!storeTask.interceptors) storeTask.interceptors = [];\n storeTask.interceptors.push(middleware);\n },\n }) as unknown as TaskDependencyWithIntercept<I, O>;\n }\n\n public async initializeRoot() {\n const rootResource = this.store.root;\n\n const { value, context } =\n await this.resourceInitializer.initializeResource(\n rootResource.resource,\n rootResource.config,\n // They are already computed\n rootResource.computedDependencies!,\n );\n\n rootResource.context = context;\n rootResource.value = value;\n rootResource.isInitialized = true;\n this.store.recordResourceInitialized(rootResource.resource.id);\n }\n\n /**\n * Attaches listeners for all hooks. Must run before emitting events.\n */\n public attachListeners() {\n // Attach listeners for dedicated hooks map\n for (const hookStoreElement of this.store.hooks.values()) {\n const hook = hookStoreElement.hook;\n if (hook.on) {\n const eventDefinition = hook.on;\n\n const handler = async (receivedEvent: IEventEmission<any>) => {\n if (receivedEvent.source === hook.id) {\n return;\n }\n if (hookStoreElement.dependencyState !== HookDependencyState.Ready) {\n return;\n }\n return this.eventManager.executeHookWithInterceptors(\n hook,\n receivedEvent,\n hookStoreElement.computedDependencies,\n );\n };\n\n const order = hook.order ?? 0;\n\n if (eventDefinition === \"*\") {\n this.eventManager.addGlobalListener(handler, { order });\n } else if (Array.isArray(eventDefinition)) {\n for (const e of eventDefinition) {\n if (this.store.events.get(e.id) === undefined) {\n eventNotFoundError.throw({ id: e.id });\n }\n }\n this.eventManager.addListener(\n eventDefinition as unknown as IEvent[],\n handler,\n {\n order,\n },\n );\n } else {\n if (this.store.events.get(eventDefinition.id) === undefined) {\n eventNotFoundError.throw({ id: eventDefinition.id });\n }\n this.eventManager.addListener(\n eventDefinition as unknown as IEvent,\n handler,\n {\n order,\n },\n );\n }\n }\n }\n }\n\n async extractDependencies<T extends DependencyMapType>(\n map: T,\n source: string,\n ): Promise<DependencyValuesType<T>> {\n const object = {} as DependencyValuesType<T>;\n\n for (const key in map) {\n try {\n object[key] = await this.extractDependency(map[key], source);\n // Special handling, a little bit of magic and memory sacrifice for the sake of observability.\n // Maybe later we can allow this to be opt-in to save 'memory' in the case of large tasks?\n const val = object[key] as unknown;\n if (val instanceof Logger) {\n (object as Record<string, unknown>)[key] = val.with({ source });\n }\n } catch (e) {\n const errorMessage = String(e);\n this.logger.error(\n `Failed to extract dependency from source: ${source} -> ${key} with error: ${errorMessage}`,\n );\n\n throw e;\n }\n }\n this.logger.trace(`Finished computing dependencies for source: ${source}`);\n\n return object;\n }\n\n async extractDependency(object: any, source: string) {\n this.logger.trace(`Extracting dependency -> ${source} -> ${object?.id}`);\n if (utils.isOptional(object)) {\n const inner = object.inner;\n if (utils.isResource(inner)) {\n const exists = this.store.resources.get(inner.id) !== undefined;\n return exists ? this.extractResourceDependency(inner) : undefined;\n } else if (utils.isTask(inner)) {\n const exists = this.store.tasks.get(inner.id) !== undefined;\n return exists ? this.extractTaskDependency(inner) : undefined;\n } else if (utils.isEvent(inner)) {\n const exists = this.store.events.get(inner.id) !== undefined;\n return exists ? this.extractEventDependency(inner, source) : undefined;\n } else if (utils.isError(inner)) {\n const exists = this.store.errors.get(inner.id) !== undefined;\n return exists ? inner : undefined;\n } else if (utils.isAsyncContext(inner)) {\n const exists = this.store.asyncContexts.get(inner.id) !== undefined;\n return exists ? inner : undefined;\n }\n unknownItemTypeError.throw({ item: inner });\n }\n if (utils.isResource(object)) {\n return this.extractResourceDependency(object);\n } else if (utils.isTask(object)) {\n return this.extractTaskDependency(object);\n } else if (utils.isEvent(object)) {\n return this.extractEventDependency(object, source);\n } else if (utils.isError(object)) {\n if (this.store.errors.get(object.id) === undefined) {\n dependencyNotFoundError.throw({ key: `Error ${object.id}` });\n }\n // For error helpers, the dependency value is the helper itself\n return object;\n } else if (utils.isAsyncContext(object)) {\n if (this.store.asyncContexts.get(object.id) === undefined) {\n dependencyNotFoundError.throw({ key: `AsyncContext ${object.id}` });\n }\n return object;\n } else {\n unknownItemTypeError.throw({ item: object });\n }\n }\n\n /**\n * Converts the event into a running functions with real inputs\n * @param object\n * @returns\n */\n extractEventDependency(object: IEvent<any>, source: string) {\n return async (input: any) => {\n return this.eventManager.emit(object, input, source);\n };\n }\n\n async extractTaskDependency(object: ITask<any, any, {}>) {\n const storeTask = this.store.tasks.get(object.id);\n if (storeTask === undefined) {\n dependencyNotFoundError.throw({ key: `Task ${object.id}` });\n }\n\n const st = storeTask!;\n if (!st.isInitialized) {\n // it's sanitised\n const dependencies = st.task.dependencies as DependencyMapType;\n\n st.computedDependencies = await this.extractDependencies(\n dependencies,\n st.task.id,\n );\n st.isInitialized = true;\n }\n\n return (input: unknown, options?: TaskCallOptions) => {\n return this.taskRunner.run(st.task, input, options);\n };\n }\n\n async extractResourceDependency(object: IResource<any, any, any>) {\n // check if it exists in the store with the value\n const storeResource = this.store.resources.get(object.id);\n if (storeResource === undefined) {\n dependencyNotFoundError.throw({ key: `Resource ${object.id}` });\n }\n\n const sr = storeResource!;\n const { resource, config } = sr;\n\n if (!sr.isInitialized) {\n const depMap = (resource.dependencies || {}) as DependencyMapType;\n\n let wrapped =\n sr.computedDependencies as ResourceDependencyValuesType<any>;\n\n // If not already computed, compute and cache it!\n if (!wrapped || Object.keys(wrapped).length === 0) {\n const raw = await this.extractDependencies(depMap, resource.id);\n wrapped = this.wrapResourceDependencies(depMap, raw);\n sr.computedDependencies = wrapped;\n }\n\n try {\n const { value, context } =\n await this.resourceInitializer.initializeResource(\n resource,\n config,\n wrapped,\n );\n\n sr.context = context;\n sr.value = value;\n\n // we need to initialize the resource\n sr.isInitialized = true;\n this.store.recordResourceInitialized(resource.id);\n } catch (error: unknown) {\n this.rethrowResourceInitError(resource.id, error);\n }\n }\n\n return sr.value;\n }\n}\n","/**\n * A node that has dependencies.\n */\nexport interface IDependentNode {\n id: string;\n dependencies: Record<string, IDependentNode>;\n}\n\ninterface FindCircularDependenciesResult {\n cycles: string[];\n missingDependencies: Array<{ nodeId: string; dependencyId: string }>;\n}\n\nexport function findCircularDependencies(\n nodes: IDependentNode[],\n): FindCircularDependenciesResult {\n const result: FindCircularDependenciesResult = {\n cycles: [],\n missingDependencies: [],\n };\n const visited: Set<string> = new Set();\n const stack: Set<string> = new Set();\n const path: string[] = [];\n\n function dfs(node: IDependentNode): void {\n if (stack.has(node.id)) {\n const cycleStartIndex = path.indexOf(node.id);\n const cycle = path.slice(cycleStartIndex).concat(node.id).join(\" -> \");\n result.cycles.push(cycle);\n return;\n }\n\n if (visited.has(node.id)) return;\n\n visited.add(node.id);\n stack.add(node.id);\n path.push(node.id);\n\n for (const [depKey, dependentNode] of Object.entries(node.dependencies)) {\n if (!dependentNode) {\n result.missingDependencies.push({\n nodeId: node.id,\n dependencyId: depKey,\n });\n continue;\n }\n dfs(dependentNode);\n }\n\n stack.delete(node.id);\n path.pop();\n }\n\n for (const node of nodes) {\n if (!visited.has(node.id)) {\n dfs(node);\n }\n }\n\n result.cycles = Array.from(new Set(result.cycles)); // Remove duplicate cycles\n return result;\n}\n","import {\n duplicateRegistrationError,\n middlewareNotRegisteredError,\n tagNotFoundError,\n} from \"../errors\";\nimport { ITaggable } from \"../defs\";\nimport { StoreRegistry } from \"./StoreRegistry\";\n\nexport class StoreValidator {\n constructor(private registry: StoreRegistry) {}\n\n checkIfIDExists(id: string): void | never {\n if (this.registry.tasks.has(id)) {\n duplicateRegistrationError.throw({ type: \"Task\", id });\n }\n if (this.registry.resources.has(id)) {\n duplicateRegistrationError.throw({ type: \"Resource\", id });\n }\n if (this.registry.events.has(id)) {\n duplicateRegistrationError.throw({ type: \"Event\", id });\n }\n if (this.registry.errors.has(id)) {\n duplicateRegistrationError.throw({ type: \"Error\", id });\n }\n if (this.registry.asyncContexts.has(id)) {\n duplicateRegistrationError.throw({ type: \"AsyncContext\", id });\n }\n if (this.registry.taskMiddlewares.has(id)) {\n duplicateRegistrationError.throw({ type: \"Middleware\", id });\n }\n if (this.registry.resourceMiddlewares.has(id)) {\n duplicateRegistrationError.throw({ type: \"Middleware\", id });\n }\n if (this.registry.tags.has(id)) {\n duplicateRegistrationError.throw({ type: \"Tag\", id });\n }\n if (this.registry.hooks.has(id)) {\n duplicateRegistrationError.throw({ type: \"Hook\", id });\n }\n }\n\n runSanityChecks() {\n for (const task of this.registry.tasks.values()) {\n const middlewares = task.task.middleware;\n middlewares.forEach((middlewareAttachment) => {\n if (!this.registry.taskMiddlewares.has(middlewareAttachment.id)) {\n middlewareNotRegisteredError.throw({\n type: \"task\",\n source: task.task.id,\n middlewareId: middlewareAttachment.id,\n });\n }\n });\n }\n\n for (const resource of this.registry.resources.values()) {\n const middlewares = resource.resource.middleware;\n middlewares.forEach((middlewareAttachment) => {\n if (!this.registry.resourceMiddlewares.has(middlewareAttachment.id)) {\n middlewareNotRegisteredError.throw({\n type: \"resource\",\n source: resource.resource.id,\n middlewareId: middlewareAttachment.id,\n });\n }\n });\n }\n\n this.ensureAllTagsUsedAreRegistered();\n }\n\n ensureAllTagsUsedAreRegistered() {\n const taggables: ITaggable[] = [\n ...Array.from(this.registry.tasks.values()).map((x) => x.task),\n ...Array.from(this.registry.resources.values()).map((x) => x.resource),\n ...Array.from(this.registry.events.values()).map((x) => x.event),\n ...Array.from(this.registry.taskMiddlewares.values()).map(\n (x) => x.middleware,\n ),\n ...Array.from(this.registry.resourceMiddlewares.values()).map(\n (x) => x.middleware,\n ),\n ...Array.from(this.registry.hooks.values()).map((x) => x.hook),\n ];\n\n for (const taggable of taggables) {\n const tags = taggable.tags;\n if (tags) {\n for (const tag of tags) {\n if (!this.registry.tags.has(tag.id)) {\n tagNotFoundError.throw({ id: tag.id });\n }\n }\n }\n }\n }\n}\n","import {\n IResource,\n ITask,\n AnyTask,\n IResourceWithConfig,\n RegisterableItems,\n ITaskMiddleware,\n IResourceMiddleware,\n IEvent,\n ITag,\n IHook,\n TaggedTask,\n TaggedResource,\n AnyResource,\n} from \"../defs\";\nimport * as utils from \"../define\";\nimport { unknownItemTypeError } from \"../errors\";\nimport {\n TaskStoreElementType,\n TaskMiddlewareStoreElementType,\n ResourceMiddlewareStoreElementType,\n ResourceStoreElementType,\n EventStoreElementType,\n HookStoreElementType,\n} from \"../defs\";\nimport { StoreValidator } from \"./StoreValidator\";\nimport { Store } from \"./Store\";\nimport { IDependentNode } from \"./utils/findCircularDependencies\";\nimport { IErrorHelper } from \"../types/error\";\nimport type { IAsyncContext } from \"../types/asyncContext\";\nimport { HookDependencyState } from \"../types/storeTypes\";\n\ntype StoringMode = \"normal\" | \"override\";\nexport class StoreRegistry {\n public tasks: Map<string, TaskStoreElementType> = new Map();\n public resources: Map<string, ResourceStoreElementType> = new Map();\n public events: Map<string, EventStoreElementType> = new Map();\n public taskMiddlewares: Map<string, TaskMiddlewareStoreElementType> =\n new Map();\n public resourceMiddlewares: Map<string, ResourceMiddlewareStoreElementType> =\n new Map();\n public hooks: Map<string, HookStoreElementType> = new Map();\n public tags: Map<string, ITag> = new Map();\n public asyncContexts: Map<string, IAsyncContext<any>> = new Map();\n public errors: Map<string, IErrorHelper<any>> = new Map();\n\n private validator: StoreValidator;\n\n constructor(protected readonly store: Store) {\n this.validator = new StoreValidator(this);\n }\n\n getValidator(): StoreValidator {\n return this.validator;\n }\n\n storeGenericItem<_C>(item: RegisterableItems) {\n if (utils.isTask(item)) {\n this.storeTask<_C>(item);\n } else if (utils.isError(item)) {\n this.storeError<_C>(item as IErrorHelper<any>);\n } else if (utils.isHook && utils.isHook(item)) {\n this.storeHook<_C>(item as IHook);\n } else if (utils.isResource(item)) {\n this.storeResource<_C>(item);\n } else if (utils.isEvent(item)) {\n this.storeEvent<_C>(item);\n } else if (utils.isAsyncContext(item)) {\n this.storeAsyncContext<_C>(item as IAsyncContext<any>);\n } else if (utils.isTaskMiddleware(item)) {\n this.storeTaskMiddleware<_C>(item as ITaskMiddleware<any>);\n } else if (utils.isResourceMiddleware(item)) {\n this.storeResourceMiddleware<_C>(item as IResourceMiddleware<any>);\n } else if (utils.isResourceWithConfig(item)) {\n this.storeResourceWithConfig<_C>(item);\n } else if (utils.isTag(item)) {\n this.storeTag(item);\n } else {\n unknownItemTypeError.throw({ item });\n }\n }\n\n storeError<_C>(item: IErrorHelper<any>) {\n this.validator.checkIfIDExists(item.id);\n this.errors.set(item.id, item);\n }\n\n storeAsyncContext<_C>(item: IAsyncContext<any>) {\n this.validator.checkIfIDExists(item.id);\n this.asyncContexts.set(item.id, item);\n }\n\n storeTag(item: ITag<any, any, any>) {\n this.validator.checkIfIDExists(item.id);\n this.tags.set(item.id, item);\n }\n\n storeHook<_C>(item: IHook<any, any>, overrideMode: StoringMode = \"normal\") {\n overrideMode === \"normal\" && this.validator.checkIfIDExists(item.id);\n\n const hook = this.getFreshValue(item, this.hooks, \"hook\", overrideMode);\n\n // store separately\n this.hooks.set(hook.id, {\n hook,\n computedDependencies: {},\n dependencyState: HookDependencyState.Pending,\n });\n }\n\n storeTaskMiddleware<_C>(\n item: ITaskMiddleware<any>,\n storingMode: StoringMode = \"normal\",\n ) {\n storingMode === \"normal\" && this.validator.checkIfIDExists(item.id);\n\n const middleware = this.getFreshValue(\n item,\n this.taskMiddlewares,\n \"middleware\",\n storingMode,\n );\n\n this.taskMiddlewares.set(item.id, {\n middleware,\n computedDependencies: {},\n isInitialized: false,\n });\n }\n\n storeResourceMiddleware<_C>(\n item: IResourceMiddleware<any>,\n overrideMode: StoringMode = \"normal\",\n ) {\n overrideMode === \"normal\" && this.validator.checkIfIDExists(item.id);\n const middleware = this.getFreshValue(\n item,\n this.resourceMiddlewares,\n \"middleware\",\n overrideMode,\n );\n\n this.resourceMiddlewares.set(item.id, {\n middleware,\n computedDependencies: {},\n isInitialized: false,\n });\n }\n\n storeEvent<_C>(item: IEvent<void>) {\n this.validator.checkIfIDExists(item.id);\n this.events.set(item.id, { event: item });\n }\n\n storeResourceWithConfig<_C>(\n item: IResourceWithConfig<any, any, any>,\n storingMode: StoringMode = \"normal\",\n ) {\n storingMode === \"normal\" &&\n this.validator.checkIfIDExists(item.resource.id);\n\n const prepared = this.getFreshValue(\n item.resource,\n this.resources,\n \"resource\",\n storingMode,\n item.config,\n );\n\n this.resources.set(prepared.id, {\n resource: prepared,\n config: item.config,\n value: undefined,\n isInitialized: false,\n context: undefined,\n });\n\n this.computeRegistrationDeeply(prepared, item.config);\n return prepared;\n }\n\n computeRegistrationDeeply<_C>(element: IResource<_C>, config?: _C) {\n let items =\n typeof element.register === \"function\"\n ? element.register(config as _C)\n : element.register;\n\n if (!items) {\n items = [];\n }\n\n element.register = items;\n\n for (const item of items) {\n // will call registration if it detects another resource.\n this.storeGenericItem<_C>(item);\n }\n }\n\n storeResource<_C>(\n item: IResource<any, any, any>,\n overrideMode: StoringMode = \"normal\",\n ) {\n overrideMode === \"normal\" && this.validator.checkIfIDExists(item.id);\n\n const prepared = this.getFreshValue(\n item,\n this.resources,\n \"resource\",\n overrideMode,\n );\n\n this.resources.set(prepared.id, {\n resource: prepared,\n config: {},\n value: undefined,\n isInitialized: false,\n context: undefined,\n });\n\n this.computeRegistrationDeeply(prepared, {});\n return prepared;\n }\n\n storeTask<_C>(\n item: ITask<any, any, {}>,\n storingMode: StoringMode = \"normal\",\n ) {\n storingMode === \"normal\" && this.validator.checkIfIDExists(item.id);\n\n const task = this.getFreshValue(item, this.tasks, \"task\", storingMode);\n\n this.tasks.set(task.id, {\n task,\n computedDependencies: {},\n isInitialized: false,\n });\n }\n\n // Feels like a dependencyProcessor task?\n getDependentNodes() {\n const depenedants: IDependentNode[] = [];\n\n // First, create all nodes\n const nodeMap = new Map<string, IDependentNode>();\n\n // Create nodes for tasks\n this.setupBlankNodes(nodeMap, depenedants);\n\n // Now, populate dependencies with references to actual nodes\n for (const task of this.tasks.values()) {\n const node = nodeMap.get(task.task.id)!;\n\n // Add task dependencies\n if (task.task.dependencies) {\n for (const [depKey, depItem] of Object.entries(\n task.task.dependencies,\n )) {\n const candidate = utils.isOptional(depItem) ? depItem.inner : depItem;\n const depNode = nodeMap.get(candidate.id);\n if (depNode) {\n node.dependencies[depKey] = depNode;\n }\n }\n }\n\n // Add local middleware dependencies for tasks (hooks have no middleware)\n const t = task.task;\n for (const middleware of t.middleware) {\n const middlewareNode = nodeMap.get(middleware.id);\n if (middlewareNode) {\n node.dependencies[middleware.id] = middlewareNode;\n }\n }\n }\n\n // Populate task middleware dependencies\n for (const storeTaskMiddleware of this.taskMiddlewares.values()) {\n const node = nodeMap.get(storeTaskMiddleware.middleware.id)!;\n const { middleware } = storeTaskMiddleware;\n\n if (middleware.dependencies) {\n for (const [depKey, depItem] of Object.entries(\n middleware.dependencies,\n )) {\n const candidate = utils.isOptional(depItem) ? depItem.inner : depItem;\n\n const depNode = nodeMap.get(candidate.id);\n if (depNode) {\n node.dependencies[depKey] = depNode;\n }\n }\n }\n\n if (middleware.everywhere) {\n const filter =\n typeof middleware.everywhere === \"function\"\n ? middleware.everywhere\n : () => true;\n\n for (const task of this.tasks.values()) {\n if (filter(task.task)) {\n const taskNode = nodeMap.get(task.task.id)!;\n // node.dependencies[task.task.id] = taskNode;\n taskNode.dependencies[`__middleware.${middleware.id}`] = node;\n }\n }\n }\n }\n\n // Populate resource middleware dependencies\n for (const storeResourceMiddleware of this.resourceMiddlewares.values()) {\n const node = nodeMap.get(storeResourceMiddleware.middleware.id)!;\n const { middleware } = storeResourceMiddleware;\n if (middleware.dependencies) {\n for (const [depKey, depItem] of Object.entries(\n middleware.dependencies,\n )) {\n const candidate = utils.isOptional(depItem) ? depItem.inner : depItem;\n\n const depNode = nodeMap.get(candidate.id);\n if (depNode) {\n node.dependencies[depKey] = depNode;\n }\n }\n }\n\n if (middleware.everywhere) {\n const filter =\n typeof middleware.everywhere === \"function\"\n ? middleware.everywhere\n : () => true;\n\n for (const resource of this.resources.values()) {\n if (filter(resource.resource)) {\n const resourceNode = nodeMap.get(resource.resource.id)!;\n // node.dependencies[resource.resource.id] = resourceNode;\n resourceNode.dependencies[`__middleware.${middleware.id}`] = node;\n }\n }\n }\n }\n\n // Populate resource dependencies\n for (const resource of this.resources.values()) {\n const node = nodeMap.get(resource.resource.id)!;\n\n // Add resource dependencies\n if (resource.resource.dependencies) {\n for (const [depKey, depItem] of Object.entries(\n resource.resource.dependencies,\n )) {\n const candidate = utils.isOptional(depItem) ? depItem.inner : depItem;\n\n const depNode = nodeMap.get(candidate.id);\n if (depNode) {\n node.dependencies[depKey] = depNode;\n }\n }\n }\n\n // Add local middleware dependencies\n for (const middleware of resource.resource.middleware) {\n const middlewareNode = nodeMap.get(middleware.id);\n if (middlewareNode) {\n node.dependencies[middleware.id] = middlewareNode;\n }\n }\n }\n\n for (const hook of this.hooks.values()) {\n const node = nodeMap.get(hook.hook.id)!;\n if (hook.hook.dependencies) {\n for (const [depKey, depItem] of Object.entries(\n hook.hook.dependencies,\n )) {\n const candidate = utils.isOptional(depItem) ? depItem.inner : depItem;\n const depNode = nodeMap.get(candidate.id);\n\n if (depNode) {\n node.dependencies[depKey] = depNode;\n }\n }\n }\n }\n\n return depenedants;\n }\n\n /**\n * Builds a directed graph of event emissions based on hooks listening to events\n * and their dependencies on events (emission capability). Ignores wildcard hooks by default.\n */\n buildEventEmissionGraph() {\n const nodes = new Map<string, IDependentNode>();\n\n // Create nodes for all events\n for (const e of this.events.values()) {\n nodes.set(e.event.id, { id: e.event.id, dependencies: {} });\n }\n\n // For each hook, if it listens to concrete event(s) and depends on events, add edges listenedEvent -> depEvent\n for (const h of this.hooks.values()) {\n const listened: string[] = [];\n const on = h.hook.on;\n if (on === \"*\") continue; // avoid over-reporting for global hooks\n if (Array.isArray(on))\n listened.push(...(on as IEvent[]).map((e: IEvent) => e.id));\n else listened.push((on as IEvent).id);\n\n // Collect event dependencies from the hook\n const depEvents: string[] = [];\n const deps = h.hook.dependencies;\n if (deps) {\n for (const value of Object.values(deps)) {\n // For optional wrappers, extract the inner value\n const candidate: { id?: string } = utils.isOptional(value)\n ? (value as { inner: { id?: string } }).inner\n : (value as { id?: string });\n if (candidate && utils.isEvent(candidate)) {\n depEvents.push(candidate.id);\n }\n }\n }\n\n // Add edges\n for (const srcId of listened) {\n const srcNode = nodes.get(srcId);\n if (!srcNode) continue; // skip unknown/unregistered events\n for (const dstId of depEvents) {\n if (srcId === dstId) continue; // ignore trivial self edge\n const dstNode = nodes.get(dstId);\n if (dstNode) {\n srcNode.dependencies[dstId] = dstNode;\n }\n }\n }\n }\n\n return Array.from(nodes.values());\n }\n\n private setupBlankNodes(\n nodeMap: Map<string, IDependentNode>,\n depenedants: IDependentNode[],\n ) {\n for (const task of this.tasks.values()) {\n const node: IDependentNode = {\n id: task.task.id,\n dependencies: {},\n };\n nodeMap.set(task.task.id, node);\n depenedants.push(node);\n }\n\n for (const middleware of this.taskMiddlewares.values()) {\n const node: IDependentNode = {\n id: middleware.middleware.id,\n dependencies: {},\n };\n nodeMap.set(middleware.middleware.id, node);\n depenedants.push(node);\n }\n\n for (const middleware of this.resourceMiddlewares.values()) {\n const node: IDependentNode = {\n id: middleware.middleware.id,\n dependencies: {},\n };\n nodeMap.set(middleware.middleware.id, node);\n depenedants.push(node);\n }\n\n // Create nodes for resources\n for (const resource of this.resources.values()) {\n const node: IDependentNode = {\n id: resource.resource.id,\n dependencies: {},\n };\n nodeMap.set(resource.resource.id, node);\n depenedants.push(node);\n }\n\n for (const hook of this.hooks.values()) {\n const node: IDependentNode = {\n id: hook.hook.id,\n dependencies: {},\n };\n nodeMap.set(hook.hook.id, node);\n depenedants.push(node);\n }\n }\n\n getTasksWithTag<TTag extends ITag<any, any, any>>(\n tag: TTag,\n ): TaggedTask<TTag>[];\n getTasksWithTag(tag: string): AnyTask[];\n getTasksWithTag(tag: string | ITag<any, any, any>): AnyTask[] {\n const tagId = typeof tag === \"string\" ? tag : tag.id;\n\n return Array.from(this.tasks.values())\n .filter((x) => {\n return x.task.tags.some((t) => t.id === tagId);\n })\n .map((x) => x.task);\n }\n\n getResourcesWithTag<TTag extends ITag<any, any, any>>(\n tag: TTag,\n ): TaggedResource<TTag>[];\n getResourcesWithTag(tag: string): AnyResource[];\n getResourcesWithTag(tag: string | ITag<any, any, any>): AnyResource[] {\n const tagId = typeof tag === \"string\" ? tag : tag.id;\n\n return Array.from(this.resources.values())\n .filter((x) => {\n return x.resource.tags.some((t) => t.id === tagId);\n })\n .map((x) => x.resource);\n }\n\n /**\n * Used to fetch the value cloned, and if we're dealing with an override, we need to extend the previous value.\n */\n private getFreshValue<\n T extends { id: string; dependencies?: any; config?: any },\n MapType,\n >(\n item: T,\n collection: Map<string, MapType>,\n key: keyof MapType,\n overrideMode: StoringMode,\n config?: any, // If provided config, takes precedence over config in item.\n ): T {\n let currentItem: T;\n if (overrideMode === \"override\") {\n const existing = collection.get(item.id)![key];\n currentItem = { ...existing, ...item };\n } else {\n currentItem = { ...item };\n }\n\n currentItem.dependencies =\n typeof currentItem.dependencies === \"function\"\n ? currentItem.dependencies(config || currentItem.config)\n : currentItem.dependencies;\n\n return currentItem;\n }\n}\n","import {\n IResource,\n ITaskMiddleware,\n IResourceMiddleware,\n ITask,\n IResourceWithConfig,\n RegisterableItems,\n IHook,\n} from \"../defs\";\nimport * as utils from \"../define\";\nimport { dependencyNotFoundError } from \"../errors\";\nimport { StoreRegistry } from \"./StoreRegistry\";\n\nexport class OverrideManager {\n public overrides: Map<\n string,\n | IResource\n | ITaskMiddleware\n | IResourceMiddleware\n | ITask\n | IResourceWithConfig\n | IHook\n > = new Map();\n\n public overrideRequests: Set<{\n source: string;\n override: RegisterableItems;\n }> = new Set();\n\n constructor(private readonly registry: StoreRegistry) {}\n\n storeOverridesDeeply<C>(element: IResource<C, any, any>) {\n element.overrides.forEach((override) => {\n if (!override) {\n return;\n }\n\n if (utils.isResource(override)) {\n this.storeOverridesDeeply(override);\n }\n\n let id: string;\n if (utils.isResourceWithConfig(override)) {\n this.storeOverridesDeeply(override.resource);\n id = override.resource.id;\n } else {\n id = override.id;\n }\n\n this.overrideRequests.add({ source: element.id, override });\n this.overrides.set(id, override);\n });\n }\n\n processOverrides() {\n // If we are trying to use override on something that wasn't previously registered, we throw an error.\n for (const override of this.overrides.values()) {\n let hasAnyItem = false;\n if (utils.isTask(override)) {\n hasAnyItem = this.registry.tasks.has(override.id);\n } else if (utils.isResource(override)) {\n hasAnyItem = this.registry.resources.has(override.id);\n } else if (utils.isTaskMiddleware(override)) {\n hasAnyItem = this.registry.taskMiddlewares.has(override.id);\n } else if (utils.isResourceMiddleware(override)) {\n hasAnyItem = this.registry.resourceMiddlewares.has(override.id);\n } else if (utils.isResourceWithConfig(override)) {\n hasAnyItem = this.registry.resources.has(override.resource.id);\n } else if (utils.isHook(override)) {\n hasAnyItem = this.registry.hooks.has(override.id);\n }\n\n if (!hasAnyItem) {\n const id = utils.isResourceWithConfig(override)\n ? override.resource.id\n : override.id;\n\n dependencyNotFoundError.throw({ key: id });\n }\n }\n\n for (const override of this.overrides.values()) {\n if (utils.isTask(override)) {\n this.registry.storeTask(override, \"override\");\n } else if (utils.isResource(override)) {\n this.registry.storeResource(override, \"override\");\n } else if (utils.isTaskMiddleware(override)) {\n this.registry.storeTaskMiddleware(override, \"override\");\n } else if (utils.isResourceMiddleware(override)) {\n this.registry.storeResourceMiddleware(override, \"override\");\n } else if (utils.isResourceWithConfig(override)) {\n this.registry.storeResourceWithConfig(override, \"override\");\n } else if (utils.isHook(override)) {\n this.registry.storeHook(override, \"override\");\n }\n }\n }\n}\n","import { defineResourceMiddleware } from \"../../define\";\nimport { globalTags } from \"../globalTags\";\nimport { globalResources } from \"../globalResources\";\nimport type { Store } from \"../../models/Store\";\nimport type {\n ITask,\n IEvent,\n IEventEmission,\n DependencyMapType,\n} from \"../../defs\";\nimport type {\n TunnelRunner,\n TunnelTaskSelector,\n TunnelEventSelector,\n} from \"../resources/tunnel/types\";\nimport { symbolTunneledBy } from \"../../types/symbols\";\nimport { tunnelOwnershipConflictError } from \"../../errors\";\n\nexport const tunnelResourceMiddleware = defineResourceMiddleware<\n void,\n DependencyMapType,\n TunnelRunner,\n DependencyMapType\n>({\n id: \"globals.middleware.resource.tunnel\",\n dependencies: {\n store: globalResources.store,\n eventManager: globalResources.eventManager,\n },\n // Only applies to resources tagged with globals.tags.tunnel\n everywhere: (resource) => globalTags.tunnel.exists(resource),\n run: async ({ resource, next }, { store, eventManager }) => {\n // Initialize the resource and get its value (tunnel runner)\n const value = await next(resource.config);\n\n const mode = value.mode || \"none\";\n const delivery = value.eventDeliveryMode || \"mirror\";\n // Cast store to Store type for helper functions\n const typedStore = store as unknown as Store;\n const tasks = value.tasks ? resolveTasks(typedStore, value.tasks) : [];\n const events = value.events\n ? resolveEvents(\n typedStore,\n value.events as unknown as TunnelEventSelector,\n )\n : [];\n\n if (mode === \"client\" || mode === \"both\") {\n if (tasks.length > 0 && typeof value.run !== \"function\") {\n throw new Error(\n \"Tunnel resource value must implement run(task, input) when tasks[] is configured.\",\n );\n }\n if (events.length > 0 && typeof value.emit !== \"function\") {\n throw new Error(\n \"Tunnel resource value must implement emit(event, payload) when events[] is configured.\",\n );\n }\n }\n\n // If there is no mode, or we are server, we don't override anything\n // We are executing, the override happens on the client.\n if (mode === \"none\" || mode === \"server\") {\n // Do not patch in these modes, but preserve and return the runner value\n return value;\n }\n\n // Override selected tasks' run() to delegate to tunnel runner (reversible)\n for (const t of tasks) {\n const st = typedStore.tasks.get(t.id)!;\n // Enforce single-owner policy: a task can be tunneled by only one resource\n const currentOwner = (st.task as any)[symbolTunneledBy];\n const resourceId = resource.definition.id;\n if (currentOwner && currentOwner !== resourceId) {\n tunnelOwnershipConflictError.throw({\n taskId: t.id,\n currentOwnerId: currentOwner,\n attemptedOwnerId: resourceId,\n });\n }\n\n st.task = {\n ...st.task,\n run: (async (input: unknown) => {\n return value.run!(t as unknown as ITask, input);\n }) as unknown as ITask[\"run\"],\n isTunneled: true,\n [symbolTunneledBy]: resourceId,\n } as any;\n }\n\n if (events.length > 0) {\n const selectedEventIds = new Set(events.map((e) => e.id));\n // Install a global emission interceptor for selected events\n // Install an emission interceptor for this tunnel instance as well\n eventManager.intercept(\n async (\n next: (emission: IEventEmission<any>) => Promise<void>,\n emission: IEventEmission<any>,\n ) => {\n if (!selectedEventIds.has(emission.id)) {\n return next(emission);\n }\n\n if (delivery === \"local-only\") {\n return next(emission);\n }\n\n if (delivery === \"remote-only\") {\n // Forward remotely only; skip local listeners\n const remotePayload = await value.emit!(emission);\n if (remotePayload !== undefined) emission.data = remotePayload;\n return;\n }\n\n if (delivery === \"remote-first\") {\n try {\n const remotePayload = await value.emit!(emission);\n if (remotePayload !== undefined) emission.data = remotePayload;\n } catch (_) {\n // Remote failed; fall back to local\n return next(emission);\n }\n // Remote succeeded; skip local\n return;\n }\n\n // mirror (default): local then remote; propagate remote failure\n await next(emission);\n const remotePayload = await value.emit!(emission);\n if (remotePayload !== undefined) emission.data = remotePayload;\n return;\n },\n );\n }\n\n return value;\n },\n tags: [globalTags.system],\n});\n\n// Helper function to resolve tasks from the store\nfunction resolveTasks(store: Store, selector: TunnelTaskSelector): ITask[] {\n const out: ITask[] = [];\n\n if (typeof selector === \"function\") {\n for (const t of store.tasks.values()) {\n if (selector(t.task)) {\n out.push(t.task);\n }\n }\n return out;\n }\n\n for (const item of selector) {\n if (typeof item === \"string\") {\n const st = store.tasks.get(item);\n if (!st)\n throw new Error(\n `Task ${item} not found while trying to resolve tasks for tunnel.`,\n );\n out.push(st.task);\n } else if (item && typeof item === \"object\") {\n // Assume it's a task definition\n const st = store.tasks.get(item.id);\n if (!st)\n throw new Error(\n `Task ${item} not found while trying to resolve tasks for tunnel.`,\n );\n\n out.push(st.task);\n }\n }\n\n return out;\n}\n\n// Helper function to resolve events from the store\nfunction resolveEvents(store: Store, selector: TunnelEventSelector): IEvent[] {\n const out: IEvent[] = [];\n\n if (typeof selector === \"function\") {\n for (const e of store.events.values()) {\n if (selector(e.event)) {\n out.push(e.event);\n }\n }\n return out;\n }\n\n for (const item of selector) {\n let st;\n if (typeof item === \"string\") {\n st = store.events.get(item);\n } else if (item && typeof item === \"object\") {\n st = store.events.get(item.id);\n }\n\n if (!st)\n throw new Error(\n `Event ${item} not found while trying to resolve events for tunnel.`,\n );\n out.push(st.event);\n }\n\n return out;\n}\n","import { lockedError } from \"../../errors\";\nimport {\n TaskMiddlewareInterceptor,\n ResourceMiddlewareInterceptor,\n} from \"./types\";\n\n/**\n * Centralized registry for all interceptor types.\n * Manages storage and retrieval of global and per-middleware interceptors.\n */\nexport class InterceptorRegistry {\n private taskInterceptors: TaskMiddlewareInterceptor[] = [];\n private resourceInterceptors: ResourceMiddlewareInterceptor[] = [];\n private perTaskMiddleware: Map<string, TaskMiddlewareInterceptor[]> =\n new Map();\n private perResourceMiddleware: Map<string, ResourceMiddlewareInterceptor[]> =\n new Map();\n\n #isLocked = false;\n\n /**\n * Gets the current lock status\n */\n get isLocked(): boolean {\n return this.#isLocked;\n }\n\n /**\n * Locks the registry, preventing any further modifications\n */\n lock(): void {\n this.#isLocked = true;\n }\n\n /**\n * Throws an error if the registry is locked\n */\n private checkLock(): void {\n if (this.#isLocked) {\n lockedError.throw({ what: \"MiddlewareManager\" });\n }\n }\n\n /**\n * Adds a global task interceptor\n */\n addGlobalTaskInterceptor(interceptor: TaskMiddlewareInterceptor): void {\n this.checkLock();\n this.taskInterceptors.push(interceptor);\n }\n\n /**\n * Adds a global resource interceptor\n */\n addGlobalResourceInterceptor(\n interceptor: ResourceMiddlewareInterceptor,\n ): void {\n this.checkLock();\n this.resourceInterceptors.push(interceptor);\n }\n\n /**\n * Adds an interceptor for a specific task middleware instance\n */\n addTaskMiddlewareInterceptor(\n middlewareId: string,\n interceptor: TaskMiddlewareInterceptor,\n ): void {\n this.checkLock();\n if (!this.perTaskMiddleware.has(middlewareId)) {\n this.perTaskMiddleware.set(middlewareId, []);\n }\n this.perTaskMiddleware.get(middlewareId)!.push(interceptor);\n }\n\n /**\n * Adds an interceptor for a specific resource middleware instance\n */\n addResourceMiddlewareInterceptor(\n middlewareId: string,\n interceptor: ResourceMiddlewareInterceptor,\n ): void {\n this.checkLock();\n if (!this.perResourceMiddleware.has(middlewareId)) {\n this.perResourceMiddleware.set(middlewareId, []);\n }\n this.perResourceMiddleware.get(middlewareId)!.push(interceptor);\n }\n\n /**\n * Gets all global task interceptors\n */\n getGlobalTaskInterceptors(): readonly TaskMiddlewareInterceptor[] {\n return Object.freeze([...this.taskInterceptors]);\n }\n\n /**\n * Gets all global resource interceptors\n */\n getGlobalResourceInterceptors(): readonly ResourceMiddlewareInterceptor[] {\n return Object.freeze([...this.resourceInterceptors]);\n }\n\n /**\n * Gets interceptors for a specific task middleware\n */\n getTaskMiddlewareInterceptors(\n middlewareId: string,\n ): readonly TaskMiddlewareInterceptor[] {\n const interceptors = this.perTaskMiddleware.get(middlewareId) ?? [];\n return Object.freeze([...interceptors]);\n }\n\n /**\n * Gets interceptors for a specific resource middleware\n */\n getResourceMiddlewareInterceptors(\n middlewareId: string,\n ): readonly ResourceMiddlewareInterceptor[] {\n const interceptors = this.perResourceMiddleware.get(middlewareId) ?? [];\n return Object.freeze([...interceptors]);\n }\n}\n","import {\n ITask,\n IResource,\n ITaskMiddleware,\n IResourceMiddleware,\n} from \"../../defs\";\nimport { Store } from \"../Store\";\nimport { globalTags } from \"../../globals/globalTags\";\nimport { taskNotRegisteredError } from \"../../errors\";\nimport type {\n TunnelMiddlewareId,\n TunnelTaskMiddlewarePolicyConfig,\n} from \"../../globals/resources/tunnel/tunnel.policy.tag\";\n\n/**\n * Resolves which middlewares should be applied to tasks and resources.\n * Handles global \"everywhere\" middlewares, local middlewares, and tunnel policies.\n */\nexport class MiddlewareResolver {\n constructor(private readonly store: Store) {}\n\n /**\n * Gets all applicable middlewares for a task (global + local, deduplicated)\n */\n getApplicableTaskMiddlewares(task: ITask<any, any, any>): ITaskMiddleware[] {\n const local = task.middleware;\n const globalMiddlewares = this.getEverywhereTaskMiddlewares(task);\n const localIds = new Set(local.map((m) => m.id));\n\n const globalFiltered = globalMiddlewares.filter((m) => !localIds.has(m.id));\n\n // Global middlewares run FIRST, then local ones.\n // This allows global \"everywhere\" policies (like logging, tracing) to wrap business-specific local middleware.\n return [...globalFiltered, ...local];\n }\n\n /**\n * Gets all applicable middlewares for a resource (global + local, deduplicated)\n */\n getApplicableResourceMiddlewares(\n resource: IResource<any, any, any, any>,\n ): IResourceMiddleware[] {\n const local = resource.middleware;\n const globalMiddlewares = this.getEverywhereResourceMiddlewares(resource);\n const localIds = new Set(local.map((m) => m.id));\n\n const globalFiltered = globalMiddlewares.filter((m) => !localIds.has(m.id));\n\n return [...globalFiltered, ...local];\n }\n\n /**\n * For tunneled tasks, controls caller-side task middleware execution.\n * Caller-side middleware is skipped by default and can be re-enabled via allowlist.\n */\n applyTunnelPolicyFilter(\n task: ITask<any, any, any>,\n middlewares: ITaskMiddleware[],\n ): ITaskMiddleware[] {\n const entry = this.store.tasks.get(task.id);\n if (!entry) {\n return taskNotRegisteredError.throw({ taskId: task.id });\n }\n const tDef = entry.task;\n const isLocallyTunneled = tDef.isTunneled;\n\n if (!isLocallyTunneled) {\n return middlewares;\n }\n\n // Tunneled tasks skip caller-side middleware by default.\n // Only explicitly allowlisted middleware runs locally.\n if (!globalTags.tunnelPolicy.exists(tDef)) {\n return [];\n }\n\n // Use the Store definition to avoid relying on object-identity.\n // Consumers can pass a different task object with the same id.\n const cfg = globalTags.tunnelPolicy.extract(tDef) as\n | TunnelTaskMiddlewarePolicyConfig\n | undefined;\n const clientAllowList = getClientMiddlewareAllowList(cfg);\n\n if (!Array.isArray(clientAllowList)) {\n return [];\n }\n\n const toId = (x: string | { id: string }) =>\n typeof x === \"string\" ? x : x?.id;\n const allowed = new Set(\n clientAllowList.map(toId).filter((id): id is string => !!id),\n );\n\n return middlewares.filter((m) => allowed.has(m.id));\n }\n\n /**\n * Gets all \"everywhere\" middlewares that apply to the given task\n */\n public getEverywhereTaskMiddlewares(\n task: ITask<any, any, any>,\n ): ITaskMiddleware[] {\n return Array.from(this.store.taskMiddlewares.values())\n .filter((x) => Boolean(x.middleware.everywhere))\n .filter((x) => {\n if (typeof x.middleware.everywhere === \"function\") {\n return x.middleware.everywhere(task);\n }\n return true;\n })\n .map((x) => x.middleware);\n }\n\n /**\n * Gets all \"everywhere\" middlewares that apply to the given resource\n */\n public getEverywhereResourceMiddlewares(\n resource: IResource<any, any, any, any>,\n ): IResourceMiddleware[] {\n return Array.from(this.store.resourceMiddlewares.values())\n .filter((x) => Boolean(x.middleware.everywhere))\n .filter((x) => {\n if (typeof x.middleware.everywhere === \"function\") {\n return x.middleware.everywhere(resource);\n }\n return true;\n })\n .map((x) => x.middleware);\n }\n}\n\nfunction getClientMiddlewareAllowList(\n cfg: TunnelTaskMiddlewarePolicyConfig | undefined,\n): TunnelMiddlewareId[] | undefined {\n if (!cfg) {\n return;\n }\n\n const preferred = cfg.client;\n if (Array.isArray(preferred)) {\n return preferred;\n }\n if (preferred && typeof preferred === \"object\") {\n const allowList = preferred.middlewareAllowList;\n if (Array.isArray(allowList)) return allowList;\n }\n\n const grouped = cfg.middlewareAllowList?.client;\n if (Array.isArray(grouped)) {\n return grouped;\n }\n\n return;\n}\n","import { validationError } from \"../../errors\";\n\n/**\n * Centralized validation logic for inputs and results across tasks and resources.\n * Provides consistent error handling and messaging.\n */\nexport class ValidationHelper {\n /**\n * Validates input using the provided schema\n * @throws ValidationError if validation fails\n */\n static validateInput<T>(\n value: any,\n schema: { parse: (v: any) => T } | undefined,\n id: string,\n type: \"Task\" | \"Resource\",\n ): T {\n if (!schema) return value;\n\n try {\n return schema.parse(value);\n } catch (error) {\n return validationError.throw({\n subject: `${type} input`,\n id,\n originalError:\n error instanceof Error ? error : new Error(String(error)),\n });\n }\n }\n\n /**\n * Validates result using the provided schema\n * @throws ValidationError if validation fails\n */\n static validateResult<T>(\n value: any,\n schema: { parse: (v: any) => T } | undefined,\n id: string,\n type: \"Task\" | \"Resource\",\n ): T {\n if (!schema) return value;\n\n try {\n return schema.parse(value);\n } catch (error) {\n return validationError.throw({\n subject: `${type} result`,\n id,\n originalError:\n error instanceof Error ? error : new Error(String(error)),\n });\n }\n }\n}\n","import { ITask, DependencyMapType } from \"../../defs\";\nimport { Store } from \"../Store\";\nimport { InterceptorRegistry } from \"./InterceptorRegistry\";\nimport { MiddlewareResolver } from \"./MiddlewareResolver\";\nimport { ValidationHelper } from \"./ValidationHelper\";\nimport { TaskStoreElementType } from \"../../types/storeTypes\";\nimport { ITaskMiddlewareExecutionInput } from \"../../types/taskMiddleware\";\nimport { ExecutionJournalImpl } from \"../ExecutionJournal\";\nimport type { ExecutionJournal } from \"../../types/executionJournal\";\n\n/**\n * Composes task execution chains with validation, interceptors, and middlewares.\n * Builds the onion-style wrapping of task runners.\n */\nexport class TaskMiddlewareComposer {\n constructor(\n private readonly store: Store,\n private readonly interceptorRegistry: InterceptorRegistry,\n private readonly middlewareResolver: MiddlewareResolver,\n ) {}\n\n /**\n * Composes a complete task runner with all middleware and interceptors applied\n */\n compose<\n TInput,\n TOutput extends Promise<any>,\n TDeps extends DependencyMapType,\n >(\n task: ITask<TInput, TOutput, TDeps>,\n ): (\n input: TInput,\n parentJournal?: ExecutionJournal,\n ) => Promise<Awaited<TOutput>> {\n const storeTask = this.store.tasks.get(task.id)!;\n\n // Determine the effective task definition for this execution.\n // When tunneled, the Store task definition carries tunnel overrides and metadata.\n const runnerTask = this.resolveTaskDefinition(task, storeTask.task);\n\n // 1. Base runner with validation (receives input + journal)\n let runner = this.createBaseRunner(runnerTask, storeTask);\n\n // 2. Apply local task interceptors\n runner = this.applyLocalInterceptors(runner, storeTask);\n\n // 3. Apply middleware layers\n runner = this.applyMiddlewares(runner, runnerTask);\n\n // 4. Apply global task interceptors (outermost).\n // This ensures they still run even if a middleware short-circuits (eg. caching).\n runner = this.applyGlobalInterceptors(runner, runnerTask);\n\n // 5. Outer wrapper: use provided journal or create new one\n const journaledRunner = runner;\n return ((input: TInput, parentJournal?: ExecutionJournal) => {\n const journal = parentJournal ?? new ExecutionJournalImpl();\n return journaledRunner(input, journal);\n }) as (\n input: TInput,\n parentJournal?: ExecutionJournal,\n ) => Promise<Awaited<TOutput>>;\n }\n\n /**\n * Creates the base task runner with input/result validation\n */\n private createBaseRunner<\n TInput,\n TOutput extends Promise<any>,\n TDeps extends DependencyMapType,\n >(\n task: ITask<TInput, TOutput, TDeps>,\n storeTask: TaskStoreElementType,\n ): (input: TInput, journal: ExecutionJournal) => TOutput {\n return (async (input: TInput, journal: ExecutionJournal) => {\n const validatedInput = ValidationHelper.validateInput(\n input,\n task.inputSchema,\n task.id,\n \"Task\",\n );\n\n const rawResult = await task.run(\n validatedInput,\n storeTask.computedDependencies,\n { journal },\n );\n\n return ValidationHelper.validateResult(\n rawResult,\n task.resultSchema,\n task.id,\n \"Task\",\n );\n }) as unknown as (input: TInput, journal: ExecutionJournal) => TOutput;\n }\n\n /**\n * Determines which task definition to use for execution\n * Prefers store definition when task is tunneled (tunnel overrides apply)\n */\n private resolveTaskDefinition<T extends ITask<any, any, any>>(\n task: T,\n storeTask: T,\n ): T {\n const isLocallyTunneled = task.isTunneled || storeTask.isTunneled;\n return isLocallyTunneled ? storeTask : task;\n }\n\n /**\n * Applies local per-task interceptors (closest to the task)\n */\n private applyLocalInterceptors<TInput, TOutput extends Promise<any>>(\n runner: (input: TInput, journal: ExecutionJournal) => TOutput,\n storeTask: TaskStoreElementType,\n ): (input: TInput, journal: ExecutionJournal) => TOutput {\n if (!storeTask.interceptors || storeTask.interceptors.length === 0) {\n return runner;\n }\n\n let wrapped = runner;\n for (let i = storeTask.interceptors.length - 1; i >= 0; i--) {\n const interceptor = storeTask.interceptors[i];\n const nextFunction = wrapped;\n wrapped = (async (input: TInput, journal: ExecutionJournal) =>\n interceptor((inp) => nextFunction(inp, journal), input)) as unknown as (\n input: TInput,\n journal: ExecutionJournal,\n ) => TOutput;\n }\n\n return wrapped;\n }\n\n /**\n * Applies global task middleware interceptors\n */\n private applyGlobalInterceptors<TInput, TOutput extends Promise<any>>(\n runner: (input: TInput, journal: ExecutionJournal) => TOutput,\n task: ITask<TInput, TOutput, any>,\n ): (input: TInput, journal: ExecutionJournal) => TOutput {\n const interceptors = this.interceptorRegistry.getGlobalTaskInterceptors();\n if (interceptors.length === 0) {\n return runner;\n }\n\n const createExecutionInput = (\n input: any,\n nextFunc: (inp: any) => Promise<any>,\n journal: ExecutionJournal,\n ): ITaskMiddlewareExecutionInput<any> => ({\n task: {\n definition: task,\n input: input,\n },\n next: nextFunc,\n journal,\n });\n\n let currentNext = runner;\n\n for (let i = interceptors.length - 1; i >= 0; i--) {\n const interceptor = interceptors[i];\n const nextFunction = currentNext;\n\n currentNext = (async (input: TInput, journal: ExecutionJournal) => {\n const wrappedNextForInterceptor = (inp: TInput) =>\n nextFunction(inp, journal) as any;\n const executionInput = createExecutionInput(\n input,\n wrappedNextForInterceptor,\n journal,\n );\n const wrappedNext = (\n i: ITaskMiddlewareExecutionInput<TInput, Awaited<TOutput>>,\n ): Promise<Awaited<TOutput>> => {\n return nextFunction(i.task.input, journal) as any;\n };\n return (interceptor as any)(wrappedNext, executionInput);\n }) as unknown as (input: TInput, journal: ExecutionJournal) => TOutput;\n }\n\n return currentNext;\n }\n\n /**\n * Applies task middleware layers (global first, then local)\n */\n private applyMiddlewares<\n TInput,\n TOutput extends Promise<any>,\n TDeps extends DependencyMapType,\n >(\n runner: (input: TInput, journal: ExecutionJournal) => TOutput,\n task: ITask<TInput, TOutput, TDeps>,\n ): (input: TInput, journal: ExecutionJournal) => TOutput {\n let middlewares =\n this.middlewareResolver.getApplicableTaskMiddlewares(task);\n\n // Apply tunnel policy filter if needed\n middlewares = this.middlewareResolver.applyTunnelPolicyFilter(\n task,\n middlewares,\n );\n\n if (middlewares.length === 0) {\n return runner;\n }\n\n let next = runner;\n\n // Layer middlewares (global first, then local), closest to the task runs last\n for (let i = middlewares.length - 1; i >= 0; i--) {\n const middleware = middlewares[i];\n const storeMiddleware = this.store.taskMiddlewares.get(middleware.id)!;\n const nextFunction = next;\n\n // Create base middleware runner (captures journal from closure)\n const baseMiddlewareRunner = async (\n input: any,\n journal: ExecutionJournal,\n ) => {\n return storeMiddleware.middleware.run(\n {\n task: {\n definition: task,\n input,\n },\n next: (...args: [TInput?]) =>\n nextFunction(\n args.length > 0 ? (args[0] as TInput) : input,\n journal,\n ),\n journal,\n },\n storeMiddleware.computedDependencies,\n middleware.config,\n );\n };\n\n // Get and apply per-middleware interceptors\n const middlewareInterceptors =\n this.interceptorRegistry.getTaskMiddlewareInterceptors(middleware.id);\n\n next = this.wrapWithInterceptors<TInput, TOutput>(\n baseMiddlewareRunner as any,\n middlewareInterceptors,\n task,\n );\n }\n\n return next;\n }\n\n /**\n * Wraps a middleware runner with its specific interceptors in onion style\n */\n private wrapWithInterceptors<TInput, TOutput extends Promise<any>>(\n middlewareRunner: (input: TInput, journal: ExecutionJournal) => TOutput,\n interceptors: readonly any[],\n task: ITask<TInput, TOutput, any>,\n ): (input: TInput, journal: ExecutionJournal) => TOutput {\n if (interceptors.length === 0) {\n return middlewareRunner;\n }\n\n const reversedInterceptors = [...interceptors].reverse();\n let wrapped = middlewareRunner;\n\n for (let i = reversedInterceptors.length - 1; i >= 0; i--) {\n const interceptor = reversedInterceptors[i];\n const nextFunction = wrapped;\n\n wrapped = (async (input: TInput, journal: ExecutionJournal) => {\n const executionInput: ITaskMiddlewareExecutionInput<\n TInput,\n Awaited<TOutput>\n > = {\n task: {\n definition: task,\n input: input,\n },\n next: (...args: [TInput?]) =>\n nextFunction(\n args.length > 0 ? (args[0] as TInput) : input,\n journal,\n ),\n journal,\n };\n\n const wrappedNext = (\n i: ITaskMiddlewareExecutionInput<TInput, Awaited<TOutput>>,\n ): Promise<Awaited<TOutput>> => {\n return nextFunction(i.task.input, journal) as any;\n };\n\n return interceptor(wrappedNext, executionInput);\n }) as unknown as (input: TInput, journal: ExecutionJournal) => TOutput;\n }\n\n return wrapped;\n }\n}\n","import { IResource, DependencyMapType } from \"../../defs\";\nimport { Store } from \"../Store\";\nimport { InterceptorRegistry } from \"./InterceptorRegistry\";\nimport { MiddlewareResolver } from \"./MiddlewareResolver\";\nimport { ValidationHelper } from \"./ValidationHelper\";\nimport { IResourceMiddlewareExecutionInput } from \"../../types/resourceMiddleware\";\n\n/**\n * Composes resource initialization chains with validation, interceptors, and middlewares.\n * Builds the onion-style wrapping of resource init functions.\n */\nexport class ResourceMiddlewareComposer {\n constructor(\n private readonly store: Store,\n private readonly interceptorRegistry: InterceptorRegistry,\n private readonly middlewareResolver: MiddlewareResolver,\n ) {}\n\n /**\n * Runs resource initialization with all middleware and interceptors applied\n */\n async runInit<\n TConfig,\n TValue extends Promise<any>,\n TDeps extends DependencyMapType,\n TContext,\n >(\n resource: IResource<TConfig, TValue, TDeps, TContext>,\n config: TConfig,\n dependencies: any,\n context: TContext,\n ): Promise<TValue | undefined> {\n // 1. Base init runner with validation\n let runner = this.createBaseInitRunner<TConfig, TValue, TDeps, TContext>(\n resource,\n dependencies,\n context,\n );\n\n // 2. Apply middlewares\n runner = this.applyMiddlewares<TConfig, TValue>(runner, resource);\n\n // 3. Apply global resource interceptors\n runner = this.applyGlobalInterceptors<TConfig, TValue>(runner, resource);\n\n return runner(config);\n }\n\n /**\n * Creates the base resource init runner with result validation\n */\n private createBaseInitRunner<\n TConfig,\n TValue extends Promise<any>,\n TDeps extends DependencyMapType,\n TContext,\n >(\n resource: IResource<TConfig, TValue, TDeps, TContext>,\n dependencies: any,\n context: TContext,\n ): (config: TConfig) => TValue {\n return (async (config: TConfig) => {\n if (!resource.init) {\n return undefined as unknown as TValue;\n }\n\n const rawValue = await resource.init(config, dependencies, context);\n\n return ValidationHelper.validateResult(\n rawValue,\n resource.resultSchema,\n resource.id,\n \"Resource\",\n ) as unknown as Awaited<TValue>;\n }) as unknown as (config: TConfig) => TValue;\n }\n\n /**\n * Applies resource middleware layers\n */\n private applyMiddlewares<TConfig, TValue extends Promise<any>>(\n runner: (config: TConfig) => TValue,\n resource: IResource<TConfig, TValue, any, any>,\n ): (config: TConfig) => TValue {\n const middlewares =\n this.middlewareResolver.getApplicableResourceMiddlewares(resource);\n\n if (middlewares.length === 0) {\n return runner;\n }\n\n let next = runner;\n\n for (let i = middlewares.length - 1; i >= 0; i--) {\n const middleware = middlewares[i];\n const storeMiddleware = this.store.resourceMiddlewares.get(\n middleware.id,\n )!;\n const nextFunction = next;\n\n // Create base middleware runner with error handling\n const baseMiddlewareRunner = async (cfg: any) => {\n try {\n return await storeMiddleware.middleware.run(\n {\n resource: {\n definition: resource,\n config: cfg,\n },\n next: (...args: [TConfig?]) =>\n nextFunction((args.length > 0 ? args[0] : cfg) as TConfig),\n },\n storeMiddleware.computedDependencies,\n middleware.config,\n );\n } catch (error: unknown) {\n try {\n await this.store.onUnhandledError({\n error,\n kind: \"resourceInit\",\n source: resource.id,\n });\n } catch (_) {\n // Ignore errors from error handler\n }\n throw error;\n }\n };\n\n // Get and apply per-middleware interceptors\n const middlewareInterceptors =\n this.interceptorRegistry.getResourceMiddlewareInterceptors(\n middleware.id,\n );\n\n next = this.wrapWithInterceptors<TConfig, TValue>(\n baseMiddlewareRunner as any,\n middlewareInterceptors,\n resource,\n );\n }\n\n return next;\n }\n\n /**\n * Applies global resource middleware interceptors\n */\n private applyGlobalInterceptors<TConfig, TValue extends Promise<any>>(\n runner: (config: TConfig) => TValue,\n resource: IResource<TConfig, TValue, any, any>,\n ): (config: TConfig) => TValue {\n const interceptors =\n this.interceptorRegistry.getGlobalResourceInterceptors();\n\n if (interceptors.length === 0) {\n return runner;\n }\n\n const createExecutionInput = (\n config: any,\n nextFunc: any,\n ): IResourceMiddlewareExecutionInput<any> => ({\n resource: {\n definition: resource,\n config: config,\n },\n next: nextFunc,\n });\n\n let currentNext = runner;\n\n for (let i = interceptors.length - 1; i >= 0; i--) {\n const interceptor = interceptors[i];\n const nextFunction = currentNext;\n\n currentNext = (async (cfg: TConfig) => {\n const executionInput = createExecutionInput(cfg, nextFunction);\n const wrappedNext = (\n input: IResourceMiddlewareExecutionInput<TConfig, Awaited<TValue>>,\n ): Promise<Awaited<TValue>> => {\n return nextFunction(input.resource.config) as any;\n };\n return (interceptor as any)(wrappedNext, executionInput);\n }) as unknown as (config: TConfig) => TValue;\n }\n\n return currentNext;\n }\n\n /**\n * Wraps a middleware runner with its specific interceptors in onion style\n */\n private wrapWithInterceptors<TConfig, TValue extends Promise<any>>(\n middlewareRunner: (config: TConfig) => TValue,\n interceptors: readonly any[],\n resource: IResource<TConfig, TValue, any, any>,\n ): (config: TConfig) => TValue {\n if (interceptors.length === 0) {\n return middlewareRunner;\n }\n\n const reversedInterceptors = [...interceptors].reverse();\n let wrapped = middlewareRunner;\n\n for (let i = reversedInterceptors.length - 1; i >= 0; i--) {\n const interceptor = reversedInterceptors[i];\n const nextFunction = wrapped;\n\n wrapped = (async (config: TConfig) => {\n const executionInput: IResourceMiddlewareExecutionInput<\n TConfig,\n Awaited<TValue>\n > = {\n resource: {\n definition: resource,\n config: config,\n },\n next: nextFunction as any,\n };\n\n const wrappedNext = (\n input: IResourceMiddlewareExecutionInput<TConfig, Awaited<TValue>>,\n ): Promise<Awaited<TValue>> => {\n return nextFunction(input.resource.config) as any;\n };\n\n return (interceptor as any)(wrappedNext, executionInput);\n }) as unknown as (config: TConfig) => TValue;\n }\n\n return wrapped;\n }\n}\n","import { DependencyMapType, ITask, IResource } from \"../defs\";\nimport { Store } from \"./Store\";\nimport { ITaskMiddleware, IResourceMiddleware } from \"../defs\";\nimport { isResourceMiddleware, isTaskMiddleware } from \"../define\";\nimport { InterceptorRegistry } from \"./middleware/InterceptorRegistry\";\nimport { MiddlewareResolver } from \"./middleware/MiddlewareResolver\";\nimport { TaskMiddlewareComposer } from \"./middleware/TaskMiddlewareComposer\";\nimport { ResourceMiddlewareComposer } from \"./middleware/ResourceMiddlewareComposer\";\nimport {\n TaskMiddlewareInterceptor,\n ResourceMiddlewareInterceptor,\n} from \"./middleware/types\";\n\n// Re-export types for backwards compatibility\nexport type { TaskMiddlewareInterceptor, ResourceMiddlewareInterceptor };\n\n/**\n * Centralizes middleware composition and execution for both tasks and resources.\n * Keeps observability emissions and unhandled error routing consistent.\n *\n * This is a facade that delegates to specialized composer classes for maintainability.\n */\nexport class MiddlewareManager {\n private readonly interceptorRegistry: InterceptorRegistry;\n private readonly middlewareResolver: MiddlewareResolver;\n private readonly taskComposer: TaskMiddlewareComposer;\n private readonly resourceComposer: ResourceMiddlewareComposer;\n\n constructor(\n protected readonly store: Store,\n _eventManager: unknown,\n _logger: unknown,\n ) {\n this.interceptorRegistry = new InterceptorRegistry();\n this.middlewareResolver = new MiddlewareResolver(store);\n this.taskComposer = new TaskMiddlewareComposer(\n store,\n this.interceptorRegistry,\n this.middlewareResolver,\n );\n this.resourceComposer = new ResourceMiddlewareComposer(\n store,\n this.interceptorRegistry,\n this.middlewareResolver,\n );\n }\n\n /**\n * @internal\n */\n public get taskMiddlewareInterceptors() {\n return this.interceptorRegistry.getGlobalTaskInterceptors();\n }\n\n /**\n * @internal\n */\n public get resourceMiddlewareInterceptors() {\n return this.interceptorRegistry.getGlobalResourceInterceptors();\n }\n\n /**\n * Gets the current lock status of the MiddlewareManager\n */\n get isLocked(): boolean {\n return this.interceptorRegistry.isLocked;\n }\n\n /**\n * Locks the MiddlewareManager, preventing any further modifications to interceptors\n */\n lock(): void {\n this.interceptorRegistry.lock();\n }\n\n /**\n * Adds an interceptor for task or resource middleware execution\n * Interceptors are executed in the order they are added, with the ability to\n * modify, log, or prevent middleware execution\n *\n * @param kind - The type of middleware to intercept (\"task\" or \"resource\")\n * @param interceptor - The interceptor function to add\n */\n intercept(kind: \"task\", interceptor: TaskMiddlewareInterceptor): void;\n intercept(kind: \"resource\", interceptor: ResourceMiddlewareInterceptor): void;\n intercept(\n kind: \"task\" | \"resource\",\n interceptor: TaskMiddlewareInterceptor | ResourceMiddlewareInterceptor,\n ): void {\n if (kind === \"task\") {\n this.interceptorRegistry.addGlobalTaskInterceptor(\n interceptor as TaskMiddlewareInterceptor,\n );\n } else {\n this.interceptorRegistry.addGlobalResourceInterceptor(\n interceptor as ResourceMiddlewareInterceptor,\n );\n }\n }\n\n /**\n * Adds an interceptor for a specific middleware instance with better type safety\n * This method automatically determines the type and provides type-safe access\n *\n * @param middleware - The middleware instance to intercept\n * @param interceptor - The interceptor function with proper typing\n */\n interceptMiddleware(\n middleware: ITaskMiddleware<any, any, any, any>,\n interceptor: TaskMiddlewareInterceptor,\n ): void;\n interceptMiddleware(\n middleware: IResourceMiddleware<any, any, any, any>,\n interceptor: ResourceMiddlewareInterceptor,\n ): void;\n interceptMiddleware(\n middleware:\n | ITaskMiddleware<any, any, any, any>\n | IResourceMiddleware<any, any, any, any>,\n interceptor: TaskMiddlewareInterceptor | ResourceMiddlewareInterceptor,\n ): void {\n if (isTaskMiddleware(middleware)) {\n this.interceptorRegistry.addTaskMiddlewareInterceptor(\n middleware.id,\n interceptor as TaskMiddlewareInterceptor,\n );\n } else if (isResourceMiddleware(middleware)) {\n this.interceptorRegistry.addResourceMiddlewareInterceptor(\n middleware.id,\n interceptor as ResourceMiddlewareInterceptor,\n );\n } else {\n throw new Error(\"Unknown middleware type\");\n }\n }\n\n /**\n * Compose a runner for a task with its local interceptors and applicable middlewares.\n * Returns a function that accepts the task input and resolves to the task output.\n */\n public composeTaskRunner<\n TInput,\n TOutput extends Promise<any>,\n TDeps extends DependencyMapType,\n >(task: ITask<TInput, TOutput, TDeps>) {\n return this.taskComposer.compose(task);\n }\n\n /**\n * Run a resource init wrapped with its applicable middlewares.\n */\n public async runResourceInit<\n C,\n V extends Promise<any>,\n D extends DependencyMapType,\n TContext,\n >(\n resource: IResource<C, V, D, TContext>,\n config: C,\n dependencies: any,\n context: TContext,\n ): Promise<V | undefined> {\n return this.resourceComposer.runInit(\n resource,\n config,\n dependencies,\n context,\n );\n }\n\n /**\n * Gets all \"everywhere\" middlewares that apply to the given task\n * @deprecated Internal method exposed for testing - may be removed in future versions\n */\n getEverywhereMiddlewareForTasks(\n task: ITask<any, any, any>,\n ): ITaskMiddleware[] {\n return this.middlewareResolver.getEverywhereTaskMiddlewares(task);\n }\n\n /**\n * Gets all \"everywhere\" middlewares that apply to the given resource\n * @deprecated Internal method exposed for testing - may be removed in future versions\n */\n getEverywhereMiddlewareForResources(\n resource: IResource<any, any, any, any>,\n ): IResourceMiddleware[] {\n return this.middlewareResolver.getEverywhereResourceMiddlewares(resource);\n }\n}\n","import { RunnerMode } from \"../types/runner\";\nimport { getPlatform } from \"../platform\";\n\n/**\n * Detects the runner mode based on environment variables.\n * If no mode is explicitly provided, it will auto-detect from NODE_ENV.\n *\n * @param explicitMode - Optional mode to use if provided (takes precedence over environment)\n * @returns The detected runner mode\n */\nexport function detectRunnerMode(explicitMode?: RunnerMode): RunnerMode {\n if (explicitMode !== undefined) {\n return explicitMode;\n }\n\n // Auto-detect mode from environment when not specified using platform adapter\n const env = getPlatform().getEnv(\"NODE_ENV\");\n switch (env) {\n case \"test\":\n return RunnerMode.TEST;\n case \"production\":\n return RunnerMode.PROD;\n case \"development\":\n default:\n return RunnerMode.DEV;\n }\n}\n","import {\n IResource,\n RegisterableItems,\n ITag,\n AnyTask,\n ITaskMiddleware,\n IResourceMiddleware,\n DependencyMapType,\n TaggedTask,\n TaggedResource,\n AnyResource,\n} from \"../defs\";\nimport { findCircularDependencies } from \"./utils/findCircularDependencies\";\nimport { globalEventsArray } from \"../globals/globalEvents\";\nimport {\n circularDependenciesError,\n storeAlreadyInitializedError,\n eventEmissionCycleError,\n} from \"../errors\";\nimport { EventManager } from \"./EventManager\";\nimport { Logger } from \"./Logger\";\nimport { StoreRegistry } from \"./StoreRegistry\";\nimport { OverrideManager } from \"./OverrideManager\";\nimport { StoreValidator } from \"./StoreValidator\";\nimport {\n ResourceStoreElementType,\n TaskStoreElementType,\n EventStoreElementType,\n} from \"../types/storeTypes\";\nimport { TaskRunner } from \"./TaskRunner\";\nimport { globalResources } from \"../globals/globalResources\";\nimport { requireContextTaskMiddleware } from \"../globals/middleware/requireContext.middleware\";\nimport {\n retryTaskMiddleware,\n retryResourceMiddleware,\n} from \"../globals/middleware/retry.middleware\";\nimport {\n timeoutTaskMiddleware,\n timeoutResourceMiddleware,\n} from \"../globals/middleware/timeout.middleware\";\nimport {\n concurrencyTaskMiddleware,\n concurrencyResource,\n} from \"../globals/middleware/concurrency.middleware\";\nimport {\n debounceTaskMiddleware,\n throttleTaskMiddleware,\n temporalResource,\n} from \"../globals/middleware/temporal.middleware\";\nimport { fallbackTaskMiddleware } from \"../globals/middleware/fallback.middleware\";\nimport {\n rateLimitTaskMiddleware,\n rateLimitResource,\n} from \"../globals/middleware/rateLimit.middleware\";\nimport {\n circuitBreakerMiddleware,\n circuitBreakerResource,\n} from \"../globals/middleware/circuitBreaker.middleware\";\nimport { tunnelResourceMiddleware } from \"../globals/middleware/tunnel.middleware\";\nimport { OnUnhandledError } from \"./UnhandledError\";\nimport { globalTags } from \"../globals/globalTags\";\nimport { MiddlewareManager } from \"./MiddlewareManager\";\nimport { RunnerMode } from \"../types/runner\";\nimport { detectRunnerMode } from \"../tools/detectRunnerMode\";\nimport { Serializer } from \"../serializer\";\nimport { isOptional, isResource } from \"../define\";\n\n// Re-export types for backward compatibility\nexport type {\n ResourceStoreElementType,\n TaskStoreElementType,\n EventStoreElementType,\n};\n\n/**\n * Store class which is used to store all the resources, tasks, middleware and events.\n */\nexport class Store {\n root!: ResourceStoreElementType;\n private registry: StoreRegistry;\n private overrideManager: OverrideManager;\n private validator: StoreValidator;\n private taskRunner?: TaskRunner;\n private middlewareManager!: MiddlewareManager;\n private readonly initializedResourceIds: string[] = [];\n\n #isLocked = false;\n #isInitialized = false;\n public mode: RunnerMode;\n\n constructor(\n protected readonly eventManager: EventManager,\n protected readonly logger: Logger,\n public readonly onUnhandledError: OnUnhandledError,\n mode?: RunnerMode,\n ) {\n this.registry = new StoreRegistry(this);\n this.validator = this.registry.getValidator();\n this.overrideManager = new OverrideManager(this.registry);\n this.middlewareManager = new MiddlewareManager(this, eventManager, logger);\n\n this.mode = detectRunnerMode(mode);\n }\n\n // Delegate properties to registry\n get tasks() {\n return this.registry.tasks;\n }\n get hooks() {\n return this.registry.hooks;\n }\n get resources() {\n return this.registry.resources;\n }\n get events() {\n return this.registry.events;\n }\n get errors() {\n return this.registry.errors;\n }\n get asyncContexts() {\n return this.registry.asyncContexts;\n }\n get taskMiddlewares() {\n return this.registry.taskMiddlewares;\n }\n get resourceMiddlewares() {\n return this.registry.resourceMiddlewares;\n }\n get tags() {\n return this.registry.tags;\n }\n get overrides() {\n return this.overrideManager.overrides;\n }\n get overrideRequests() {\n return this.overrideManager.overrideRequests;\n }\n\n // Expose the shared MiddlewareManager instance so other components (like TaskRunner)\n // can compose runners using the same interceptor configuration.\n public getMiddlewareManager(): MiddlewareManager {\n return this.middlewareManager;\n }\n\n get isLocked() {\n return this.#isLocked;\n }\n\n lock() {\n this.#isLocked = true;\n }\n\n checkLock() {\n if (this.#isLocked) {\n throw new Error(\"Cannot modify the Store when it is locked.\");\n }\n }\n\n private registerGlobalComponents() {\n if (!this.taskRunner) {\n throw new Error(\n \"TaskRunner is not set. Call store.setTaskRunner() before initializeStore().\",\n );\n }\n\n const builtInResourcesMap = new Map<\n IResource<any, any, any, any, any>,\n unknown\n >();\n builtInResourcesMap.set(globalResources.store, this);\n builtInResourcesMap.set(globalResources.eventManager, this.eventManager);\n builtInResourcesMap.set(globalResources.logger, this.logger);\n builtInResourcesMap.set(globalResources.taskRunner, this.taskRunner);\n builtInResourcesMap.set(globalResources.serializer, new Serializer());\n builtInResourcesMap.set(\n globalResources.middlewareManager,\n this.middlewareManager,\n );\n\n this.registry.storeGenericItem(globalResources.queue);\n this.registry.storeGenericItem(globalResources.httpClientFactory);\n\n for (const [resource, value] of builtInResourcesMap.entries()) {\n this.registry.storeGenericItem(resource);\n const entry = this.resources.get(resource.id);\n if (entry) {\n entry.value = value;\n entry.isInitialized = true;\n this.recordResourceInitialized(resource.id);\n }\n }\n\n // Register global tags\n Object.values(globalTags).forEach((tag) => {\n this.registry.storeTag(tag);\n });\n\n // Register global events\n globalEventsArray.forEach((event) => {\n this.registry.storeEvent(event);\n });\n\n // Register built-in middlewares\n // Built-in middlewares currently target tasks only; adjust as needed per kind\n const builtInTaskMiddlewares = [\n requireContextTaskMiddleware,\n retryTaskMiddleware,\n timeoutTaskMiddleware,\n concurrencyTaskMiddleware,\n debounceTaskMiddleware,\n throttleTaskMiddleware,\n fallbackTaskMiddleware,\n rateLimitTaskMiddleware,\n circuitBreakerMiddleware,\n ];\n builtInTaskMiddlewares.forEach((middleware) => {\n this.registry.taskMiddlewares.set(middleware.id, {\n middleware: middleware as unknown as ITaskMiddleware<any>,\n computedDependencies: {},\n isInitialized: false,\n });\n });\n\n const builtInResourceMiddlewares = [\n retryResourceMiddleware,\n timeoutResourceMiddleware,\n tunnelResourceMiddleware,\n ];\n builtInResourceMiddlewares.forEach((middleware) => {\n this.registry.resourceMiddlewares.set(middleware.id, {\n middleware: middleware as unknown as IResourceMiddleware<any>,\n computedDependencies: {},\n isInitialized: false,\n });\n });\n\n // Register built-in resources that support the middlewares\n this.registry.storeGenericItem(rateLimitResource);\n this.registry.storeGenericItem(circuitBreakerResource);\n this.registry.storeGenericItem(temporalResource);\n this.registry.storeGenericItem(concurrencyResource);\n }\n\n public setTaskRunner(taskRunner: TaskRunner) {\n this.taskRunner = taskRunner;\n }\n\n private setupRootResource(rootDefinition: IResource<any>, config: any) {\n // Clone the root definition so per-run dependency/register resolution\n // never mutates the reusable user definition object.\n const root: IResource<any> = {\n ...rootDefinition,\n dependencies:\n typeof rootDefinition.dependencies === \"function\"\n ? rootDefinition.dependencies(config)\n : rootDefinition.dependencies,\n };\n\n this.root = {\n resource: root,\n computedDependencies: {},\n config,\n value: undefined,\n isInitialized: false,\n context: {},\n };\n\n this.registry.computeRegistrationDeeply(root, config);\n this.registry.resources.set(root.id, this.root);\n }\n\n public validateDependencyGraph() {\n // We verify that there isn't any circular dependencies before we begin computing the dependencies\n const dependentNodes = this.registry.getDependentNodes();\n const circularDependencies = findCircularDependencies(dependentNodes);\n if (circularDependencies.cycles.length > 0) {\n circularDependenciesError.throw({ cycles: circularDependencies.cycles });\n }\n }\n\n public validateEventEmissionGraph() {\n const eventNodes = this.registry.buildEventEmissionGraph();\n const circular = findCircularDependencies(eventNodes);\n if (circular.cycles.length > 0) {\n eventEmissionCycleError.throw({ cycles: circular.cycles });\n }\n }\n\n public initializeStore(\n root: IResource<any, any, any, any, any>,\n config: any,\n ) {\n if (this.#isInitialized) {\n storeAlreadyInitializedError.throw({});\n }\n\n this.registerGlobalComponents();\n this.setupRootResource(root, config);\n this.validator.runSanityChecks();\n\n for (const resource of this.resources.values()) {\n this.overrideManager.storeOverridesDeeply(resource.resource);\n }\n\n this.#isInitialized = true;\n }\n\n public async dispose() {\n for (const resource of this.getResourcesInDisposeOrder()) {\n if (resource.isInitialized && resource.resource.dispose) {\n await resource.resource.dispose(\n resource.value,\n resource.config,\n resource.computedDependencies as unknown as DependencyMapType,\n resource.context,\n );\n }\n }\n }\n\n public recordResourceInitialized(resourceId: string) {\n if (\n this.initializedResourceIds[this.initializedResourceIds.length - 1] ===\n resourceId\n ) {\n return;\n }\n if (this.initializedResourceIds.includes(resourceId)) {\n return;\n }\n this.initializedResourceIds.push(resourceId);\n }\n\n private getResourcesInDisposeOrder(): ResourceStoreElementType[] {\n const initializedResources = Array.from(this.resources.values()).filter(\n (r) => r.isInitialized,\n );\n\n // Fast path: if the store tracked a complete init order, reverse it for disposal.\n // This is correct because initialization happens dependency-first, so dependents\n // always appear after their dependencies in the init sequence.\n const initOrderHasAllInitialized =\n this.initializedResourceIds.length === initializedResources.length &&\n initializedResources.every((r) =>\n this.initializedResourceIds.includes(r.resource.id),\n );\n if (initOrderHasAllInitialized) {\n const byId = new Map(\n initializedResources.map((r) => [r.resource.id, r] as const),\n );\n return this.initializedResourceIds\n .slice()\n .reverse()\n .map((id) => byId.get(id))\n .filter((r): r is ResourceStoreElementType => Boolean(r));\n }\n\n // Dispose order should be dependents-first (reverse init order).\n // We derive it from the resource dependency graph to make it stable\n // regardless of registration/insertion order.\n const visitState = new Map<string, \"visiting\" | \"visited\">();\n const initOrder: ResourceStoreElementType[] = [];\n let cycleDetected = false;\n\n const getDependencyIds = (resource: ResourceStoreElementType): string[] => {\n const raw = resource.resource.dependencies;\n if (!raw) return [];\n const deps = raw as unknown;\n if (!deps || typeof deps !== \"object\") return [];\n\n const out: string[] = [];\n const collect = (value: unknown): void => {\n if (isOptional(value)) {\n collect((value as { inner: unknown }).inner);\n return;\n }\n if (isResource(value)) {\n out.push(value.id);\n }\n };\n\n Object.values(deps as Record<string, unknown>).forEach(collect);\n return out;\n };\n\n const visit = (resourceId: string): void => {\n const state = visitState.get(resourceId);\n if (state === \"visited\") return;\n if (state === \"visiting\") {\n cycleDetected = true;\n return;\n }\n\n const resource = this.resources.get(resourceId);\n if (!resource) return;\n\n visitState.set(resourceId, \"visiting\");\n getDependencyIds(resource).forEach(visit);\n visitState.set(resourceId, \"visited\");\n initOrder.push(resource);\n };\n\n initializedResources.forEach((r) => visit(r.resource.id));\n\n // If a cycle sneaks in despite validation (or disposal is called on a\n // partially-initialized store), fall back to insertion order LIFO.\n if (cycleDetected) {\n return initializedResources.slice().reverse();\n }\n\n return initOrder.reverse();\n }\n\n /**\n * Internal, avoid using this method directly.\n */\n public processOverrides() {\n this.overrideManager.processOverrides();\n }\n\n /**\n * Internal, avoid using this method directly.\n * @param item\n * @returns\n */\n public storeGenericItem<C>(item: RegisterableItems) {\n return this.registry.storeGenericItem<C>(item);\n }\n\n /**\n * Returns all tasks with the given tag.\n * @param tag - The tag to filter by.\n * @returns The tasks with the given tag.\n */\n public getTasksWithTag<TTag extends ITag<any, any, any>>(\n tag: TTag,\n ): TaggedTask<TTag>[];\n public getTasksWithTag(tag: string): AnyTask[];\n public getTasksWithTag(tag: string | ITag<any, any, any>): AnyTask[] {\n return typeof tag === \"string\"\n ? this.registry.getTasksWithTag(tag)\n : this.registry.getTasksWithTag(tag);\n }\n\n /**\n * Returns all resources with the given tag.\n * @param tag - The tag to filter by.\n * @returns The resources with the given tag.\n */\n public getResourcesWithTag<TTag extends ITag<any, any, any>>(\n tag: TTag,\n ): TaggedResource<TTag>[];\n public getResourcesWithTag(tag: string): AnyResource[];\n public getResourcesWithTag(tag: string | ITag<any, any, any>): AnyResource[] {\n return typeof tag === \"string\"\n ? this.registry.getResourcesWithTag(tag)\n : this.registry.getResourcesWithTag(tag);\n }\n}\n","import { defineResource } from \"../../../define\";\nimport { DebugFriendlyConfig, getConfig } from \"./types\";\nimport { globalTags } from \"../../../globals/globalTags\";\n\nexport const debugConfig = defineResource({\n id: \"globals.debug.resources.config\",\n meta: {\n title: \"Debug Config\",\n description: \"Debug config. This is used to debug the system.\",\n },\n tags: [globalTags.system],\n init: async (config: DebugFriendlyConfig) => {\n const myConfig = { ...getConfig(config) };\n\n Object.freeze(myConfig);\n return myConfig;\n },\n});\n","import { ITaggable } from \"../../../defs\";\nimport { globalTags } from \"../../globalTags\";\n\nexport const hasSystemTag = (definition: ITaggable) => {\n const maybeTags = definition.tags;\n if (!Array.isArray(maybeTags)) {\n return false;\n }\n return globalTags.system.exists(definition);\n};\n","import { defineHook } from \"../../../define\";\nimport { globalResources } from \"../../globalResources\";\nimport { globalTags } from \"../../globalTags\";\nimport { hasSystemTag } from \"./utils\";\nimport { debugConfig } from \"./debugConfig.resource\";\nimport { getConfig } from \"./types\";\n\nexport const globalEventListener = defineHook({\n id: \"globals.debug.hooks.onAnyEvent\",\n on: \"*\",\n dependencies: {\n logger: globalResources.logger,\n debugConfig,\n },\n run: async (event, { logger, debugConfig }) => {\n if (hasSystemTag(event)) {\n return;\n }\n\n debugConfig = getConfig(debugConfig, event!);\n if (debugConfig.logEventEmissionOnRun) {\n const message = `Event ${String(event!.id)} emitted`;\n await logger.info(message, {\n source: \"globals.debug.hooks.onAnyEvent\",\n data: debugConfig.logEventEmissionInput\n ? { data: event!.data }\n : undefined,\n });\n }\n },\n meta: {\n title: \"Non-system Event Logger\",\n description: \"Logs all non-system events.\",\n },\n tags: [globalTags.system],\n});\n","import {\n defineTaskMiddleware,\n defineResourceMiddleware,\n} from \"../../../define\";\nimport { debugConfig } from \"./debugConfig.resource\";\nimport { globalResources } from \"../../globalResources\";\nimport { globalTags } from \"../../globalTags\";\nimport { getConfig } from \"./types\";\n\nexport const tasksTrackerMiddleware = defineTaskMiddleware({\n id: \"globals.debug.middleware.task.executionTracker\",\n everywhere: (task) => !globalTags.system.exists(task),\n dependencies: {\n logger: globalResources.logger,\n debugConfig,\n store: globalResources.store,\n },\n run: async ({ task, next }, { logger, debugConfig, store: _store }) => {\n const start = Date.now();\n logger = logger.with({\n source: tasksTrackerMiddleware.id,\n });\n\n debugConfig = getConfig(debugConfig, task?.definition);\n const taskStartMessage = `Task ${task!.definition.id} is running...`;\n const shouldShowData = debugConfig.logTaskInput && task!.input;\n await logger.info(taskStartMessage, {\n data: shouldShowData ? { input: task!.input } : undefined,\n });\n\n const result = await next(task!.input);\n const duration = Date.now() - start;\n const taskCompleteMessage = `Task ${\n task!.definition.id\n } completed in ${duration}ms`;\n const shouldShowResult = debugConfig.logTaskOutput && result;\n await logger.info(taskCompleteMessage, {\n data: shouldShowResult ? { result } : undefined,\n });\n return result;\n },\n meta: {\n title: \"Execution Tracker\",\n description: \"Tracks the execution of tasks and resources.\",\n },\n tags: [globalTags.system],\n});\n\nexport const resourcesTrackerMiddleware = defineResourceMiddleware({\n id: \"globals.debug.middleware.resource.executionTracker\",\n dependencies: {\n logger: globalResources.logger,\n debugConfig,\n store: globalResources.store,\n },\n everywhere: (resource) => !globalTags.system.exists(resource),\n run: async ({ resource, next }, { logger, debugConfig, store: _store }) => {\n const start = Date.now();\n logger = logger.with({\n source: resourcesTrackerMiddleware.id,\n });\n debugConfig = getConfig(debugConfig, resource?.definition);\n const resourceStartMessage = `Resource ${\n resource!.definition.id\n } is initializing...`;\n\n const isConfigEmpty = Object.keys(resource!.config || {}).length === 0;\n const shouldShowConfig = debugConfig.logResourceConfig && !isConfigEmpty;\n\n await logger.info(resourceStartMessage, {\n data: shouldShowConfig ? { config: resource!.config } : undefined,\n });\n\n const result = await next(resource!.config);\n const duration = Date.now() - start;\n const resourceCompleteMessage = `Resource ${String(\n resource!.definition.id,\n )} initialized in ${duration}ms`;\n const shouldShowResult =\n debugConfig.logResourceValue && result !== undefined;\n\n await logger.info(resourceCompleteMessage, {\n data: shouldShowResult ? { result } : undefined,\n });\n return result;\n },\n meta: {\n title: \"Execution Tracker\",\n description: \"Tracks the execution of tasks and resources.\",\n },\n tags: [globalTags.system],\n});\n","import { defineResource } from \"../../../define\";\nimport { globalResources } from \"../../globalResources\";\nimport { globalTags } from \"../../globalTags\";\nimport { getConfig } from \"./types\";\nimport { debugConfig } from \"./debugConfig.resource\";\nimport { hasSystemTag } from \"./utils\";\nimport { ITaskMiddlewareExecutionInput } from \"../../../types/taskMiddleware\";\nimport { IResourceMiddlewareExecutionInput } from \"../../../types/resourceMiddleware\";\n\nconst id = \"globals.debug.resources.middlewareInterceptor\";\nexport const middlewareInterceptorResource = defineResource({\n id,\n meta: {\n title: \"Middleware Interceptor\",\n description:\n \"Intercepts task and resource middleware, skipping system-tagged entities.\",\n },\n tags: [globalTags.system],\n dependencies: {\n logger: globalResources.logger,\n debugConfig,\n middlewareManager: globalResources.middlewareManager,\n },\n init: async (event, deps) => {\n const { logger, debugConfig, middlewareManager } = deps;\n\n // Task middleware interceptor\n middlewareManager.intercept(\n \"task\",\n async (\n next: (input: ITaskMiddlewareExecutionInput<any>) => Promise<any>,\n input: ITaskMiddlewareExecutionInput<any>,\n ) => {\n const taskDef = input.task.definition;\n if (!hasSystemTag(taskDef)) {\n const cfg = getConfig(debugConfig, event!);\n if (cfg.logMiddlewareBeforeRun) {\n const msg = `Middleware triggered for task ${String(taskDef.id)}`;\n await logger.info(msg, {\n source: id,\n });\n }\n }\n\n const result = await next(input);\n\n if (!hasSystemTag(taskDef)) {\n const cfg = getConfig(debugConfig, event!);\n if (cfg.logMiddlewareAfterRun) {\n const msg = `Middleware completed for task ${String(taskDef.id)}`;\n await logger.info(msg, {\n source: id,\n });\n }\n }\n\n return result;\n },\n );\n\n // Resource middleware interceptor\n middlewareManager.intercept(\n \"resource\",\n async (\n next: (input: IResourceMiddlewareExecutionInput<any>) => Promise<any>,\n input: IResourceMiddlewareExecutionInput<any>,\n ) => {\n const resourceDef = input.resource.definition;\n if (!hasSystemTag(resourceDef)) {\n const cfg = getConfig(debugConfig, event!);\n if (cfg.logMiddlewareBeforeRun) {\n const msg = `Middleware triggered for resource ${String(\n resourceDef.id,\n )}`;\n await logger.info(msg, {\n source: id,\n });\n }\n }\n\n const result = await next(input);\n\n if (!hasSystemTag(resourceDef)) {\n const cfg = getConfig(debugConfig, event!);\n if (cfg.logMiddlewareAfterRun) {\n const msg = `Middleware completed for resource ${String(\n resourceDef.id,\n )}`;\n await logger.info(msg, {\n source: id,\n });\n }\n }\n\n return result;\n },\n );\n },\n});\n","import { defineResource } from \"../../../define\";\nimport { globalResources } from \"../../globalResources\";\nimport { globalTags } from \"../../globalTags\";\nimport { hasSystemTag } from \"./utils\";\nimport { debugConfig } from \"./debugConfig.resource\";\nimport { getConfig } from \"./types\";\n\nexport const hookInterceptorResource = defineResource({\n id: \"globals.debug.resources.hookInterceptor\",\n meta: {\n title: \"Hook Interceptor\",\n description:\n \"Intercepts hooks for debug logging, skipping system-tagged hooks.\",\n },\n tags: [globalTags.system],\n dependencies: {\n logger: globalResources.logger,\n debugConfig,\n eventManager: globalResources.eventManager,\n },\n init: async (_event, deps) => {\n deps.eventManager.interceptHook(async (next, hook, event) => {\n const { logger, debugConfig } = deps;\n\n // Skip logging for system-tagged observability events\n if (hasSystemTag(hook)) {\n return await next(hook, event);\n }\n\n const resolved = getConfig(debugConfig, event!);\n if (resolved.logHookTriggered) {\n const hookId = hook.id;\n const logString = `Hook triggered for ${String(hookId)}`;\n await logger.info(logString, {\n source: \"globals.debug.resources.hookInterceptor\",\n });\n }\n\n await next(hook, event);\n\n if (resolved.logHookCompleted) {\n const hookId = hook.id;\n const logString = `Hook completed for ${String(hookId)}`;\n await logger.info(logString, {\n source: \"globals.debug.resources.hookInterceptor\",\n });\n }\n });\n },\n});\n","import { defineResource } from \"../../../define\";\nimport { debugConfig } from \"./debugConfig.resource\";\nimport { DebugFriendlyConfig } from \"./types\";\nimport { globalEventListener } from \"./globalEvent.hook\";\nimport {\n tasksTrackerMiddleware,\n resourcesTrackerMiddleware,\n} from \"./executionTracker.middleware\";\nimport { globalTags } from \"../../globalTags\";\nimport { middlewareInterceptorResource } from \"./middleware.hook\";\nimport { hookInterceptorResource } from \"./hook.hook\";\n\nexport const debugResource = defineResource({\n id: \"globals.resources.debug\",\n register: (config: DebugFriendlyConfig) => {\n return [\n debugConfig.with(config),\n globalEventListener,\n middlewareInterceptorResource,\n hookInterceptorResource,\n tasksTrackerMiddleware,\n resourcesTrackerMiddleware,\n ];\n },\n meta: {\n title: \"Debug\",\n description: \"Debug resource. This is used to debug the system.\",\n },\n tags: [globalTags.system],\n});\n","import { getPlatform } from \"./platform\";\n\nconst platform = getPlatform();\n\n// Global registry of active error handlers for process-level safety nets\nconst activeErrorHandlers = new Set<\n (\n error: unknown,\n source: \"uncaughtException\" | \"unhandledRejection\",\n ) => void | Promise<void>\n>();\nlet processSafetyNetsInstalled = false;\n\nfunction installGlobalProcessSafetyNetsOnce() {\n if (processSafetyNetsInstalled) return;\n processSafetyNetsInstalled = true;\n const onUncaughtException = async (err: any) => {\n for (const handler of activeErrorHandlers) {\n try {\n await handler(err, \"uncaughtException\");\n } catch (_) {}\n }\n };\n const onUnhandledRejection = async (reason: any) => {\n for (const handler of activeErrorHandlers) {\n try {\n await handler(reason, \"unhandledRejection\");\n } catch (_) {}\n }\n };\n platform.onUncaughtException(onUncaughtException);\n platform.onUnhandledRejection(onUnhandledRejection);\n}\n\nexport function registerProcessLevelSafetyNets(\n handler: (\n error: unknown,\n source: \"uncaughtException\" | \"unhandledRejection\",\n ) => void | Promise<void>,\n) {\n installGlobalProcessSafetyNetsOnce();\n activeErrorHandlers.add(handler);\n return () => {\n activeErrorHandlers.delete(handler);\n };\n}\n\n// Global shutdown registry: one listener per signal, dispatching to active disposers\nconst activeDisposers = new Set<() => Promise<void>>();\nlet shutdownHooksInstalled = false;\n\nfunction installGlobalShutdownHooksOnce() {\n if (shutdownHooksInstalled) return;\n shutdownHooksInstalled = true;\n const handler = async () => {\n try {\n const disposers = Array.from(activeDisposers);\n for (const d of disposers) {\n try {\n await d();\n } catch {}\n activeDisposers.delete(d);\n }\n } finally {\n platform.exit(0);\n }\n };\n platform.onShutdownSignal(handler);\n}\n\nexport function registerShutdownHook(disposeOnce: () => Promise<void>) {\n installGlobalShutdownHooksOnce();\n activeDisposers.add(disposeOnce);\n return () => {\n activeDisposers.delete(disposeOnce);\n };\n}\n","import { Logger } from \"./Logger\";\n\nexport type UnhandledErrorKind =\n | \"process\"\n | \"task\"\n | \"middleware\"\n | \"resourceInit\"\n | \"hook\"\n | \"run\";\n\nexport interface OnUnhandledErrorInfo {\n error: unknown;\n kind?: UnhandledErrorKind;\n source?: string;\n}\n\nexport type OnUnhandledError = (\n info: OnUnhandledErrorInfo,\n) => void | Promise<void>;\n\nexport function createDefaultUnhandledError(logger: Logger): OnUnhandledError {\n return async ({ error, kind, source }: OnUnhandledErrorInfo) => {\n const normalizedError =\n error instanceof Error ? error : new Error(String(error));\n\n await logger.error(`${normalizedError.toString()}`, {\n source,\n error: normalizedError,\n data: {\n kind,\n },\n });\n };\n}\n\nexport function bindProcessErrorHandler(\n handler: OnUnhandledError,\n): (\n error: unknown,\n source: \"uncaughtException\" | \"unhandledRejection\",\n) => void | Promise<void> {\n return async (error, source) => {\n try {\n await handler({ error, kind: \"process\", source });\n } catch {}\n };\n}\n\nexport async function safeReportUnhandledError(\n handler: OnUnhandledError,\n info: OnUnhandledErrorInfo,\n): Promise<void> {\n try {\n await handler(info);\n } catch {}\n}\n","import { DependencyMapType, IEvent, ITask } from \"../defs\";\nimport { IResource } from \"../defs\";\n// For RunResult convenience API, preserve the original simple messages\nimport { EventManager } from \"./EventManager\";\nimport { Logger } from \"./Logger\";\nimport { Store } from \"./Store\";\nimport { TaskRunner } from \"./TaskRunner\";\n\nexport class RunResult<V> {\n constructor(\n public readonly value: V,\n public readonly logger: Logger,\n public readonly store: Store,\n private readonly eventManager: EventManager,\n private readonly taskRunner: TaskRunner,\n private readonly disposeFn: () => Promise<void>,\n ) {}\n\n /**\n * Run a task within the context of the run result.\n * @param task - The task to run.\n * @param args - The arguments to pass to the task.\n * @returns The result of the task.\n */\n public runTask = <\n I = undefined,\n O extends Promise<any> = any,\n D extends DependencyMapType = any,\n >(\n task: ITask<I, O, D> | string,\n ...args: I extends undefined | void ? [] : [I]\n ) => {\n if (typeof task === \"string\") {\n const taskId = task;\n if (!this.store.tasks.has(taskId)) {\n throw new Error(`Task \"${taskId}\" not found.`);\n }\n task = this.store.tasks.get(taskId)!.task;\n }\n\n return this.taskRunner.run(task, ...args);\n };\n\n /**\n * Emit an event within the context of the run result.\n * @param event - The event to emit.\n * @param payload - The payload to emit.\n */\n public emitEvent = <P>(\n event: IEvent<P> | string,\n payload?: P extends undefined | void ? undefined : P,\n ) => {\n if (typeof event === \"string\") {\n const eventId = event;\n if (!this.store.events.has(eventId)) {\n throw new Error(`Event \"${eventId}\" not found.`);\n }\n event = this.store.events.get(eventId)!.event;\n }\n return this.eventManager.emit(event, payload, \"outside\");\n };\n\n /**\n * Get the value of a resource from the run result.\n * @param resource - The resource to get the value of.\n * @returns The value of the resource.\n */\n public getResourceValue = <Output extends Promise<any>>(\n resource: string | IResource<any, Output, any, any, any>,\n ): Output extends Promise<infer U> ? U : Output => {\n const resourceId = typeof resource === \"string\" ? resource : resource.id;\n if (!this.store.resources.has(resourceId)) {\n throw new Error(`Resource \"${resourceId}\" not found.`);\n }\n\n return this.store.resources.get(resourceId)!.value;\n };\n\n /**\n * Get the config of a resource from the run result.\n * @param resource - The resource to get the config of.\n * @returns The config passed for the resource.\n */\n public getResourceConfig = <Config>(\n resource: string | IResource<Config, any, any, any, any>,\n ): Config => {\n const resourceId = typeof resource === \"string\" ? resource : resource.id;\n if (!this.store.resources.has(resourceId)) {\n throw new Error(`Resource \"${resourceId}\" not found.`);\n }\n\n return this.store.resources.get(resourceId)!.config;\n };\n\n public dispose = () => {\n return this.disposeFn();\n };\n}\n","import { TaskRunner } from \"./models/TaskRunner\";\nimport { IResource, IResourceWithConfig } from \"./defs\";\nimport { DependencyProcessor } from \"./models/DependencyProcessor\";\nimport { EventManager } from \"./models/EventManager\";\nimport { globalEvents } from \"./globals/globalEvents\";\nimport { Store } from \"./models/Store\";\nimport { Logger } from \"./models/Logger\";\nimport { isResourceWithConfig } from \"./define\";\nimport { debugResource } from \"./globals/resources/debug\";\nimport {\n registerProcessLevelSafetyNets,\n registerShutdownHook,\n} from \"./processHooks\";\nimport {\n OnUnhandledError,\n createDefaultUnhandledError,\n bindProcessErrorHandler,\n} from \"./models/UnhandledError\";\nimport { RunResult } from \"./models/RunResult\";\nimport { RunOptions } from \"./types/runner\";\nimport { getPlatform } from \"./platform\";\n\n/**\n * This is the central function that kicks off you runner. You can run as many resources as you want in a single process, they will run in complete isolation.\n *\n * @param resourceOrResourceWithConfig - The resource or resource with config to run.\n * @param options - The options for the run.\n * @returns A promise that resolves to the result of the run.\n */\nexport async function run<C, V extends Promise<any>>(\n resourceOrResourceWithConfig:\n | IResourceWithConfig<C, V>\n | IResource<void, V, any, any> // For void configs\n | IResource<{ [K in any]?: any }, V, any, any>, // For optional config\n options?: RunOptions,\n): Promise<RunResult<V extends Promise<infer U> ? U : V>> {\n // Import all necessary elements based on platform.\n await getPlatform().init();\n const {\n debug = undefined,\n logs = {},\n errorBoundary = true,\n shutdownHooks = true,\n dryRun = false,\n onUnhandledError: onUnhandledErrorOpt,\n runtimeEventCycleDetection = true,\n } = options || {};\n\n const {\n printThreshold = getPlatform().getEnv(\"NODE_ENV\") === \"test\"\n ? null\n : \"info\",\n printStrategy = \"pretty\",\n bufferLogs = false,\n } = logs;\n\n const eventManager = new EventManager({\n runtimeEventCycleDetection,\n });\n\n const { resource, config } = extractResourceAndConfig(\n resourceOrResourceWithConfig,\n );\n\n // ensure for logger, that it can be used only after: computeAllDependencies() has executed\n const logger = new Logger({\n printThreshold,\n printStrategy,\n bufferLogs,\n });\n\n const onUnhandledError: OnUnhandledError =\n onUnhandledErrorOpt || createDefaultUnhandledError(logger);\n\n const store = new Store(eventManager, logger, onUnhandledError);\n const taskRunner = new TaskRunner(store, eventManager, logger);\n store.setTaskRunner(taskRunner);\n\n // Register this run's event manager for global process error safety nets\n let unhookProcessSafetyNets: (() => void) | undefined;\n if (errorBoundary) {\n unhookProcessSafetyNets = registerProcessLevelSafetyNets(\n bindProcessErrorHandler(onUnhandledError),\n );\n }\n\n const processor = new DependencyProcessor(\n store,\n eventManager,\n taskRunner,\n logger,\n );\n\n // We may install shutdown hooks; capture unhook function to remove them on dispose\n let unhookShutdown: (() => void) | undefined;\n\n // Helper dispose that always unhooks process listeners first\n const disposeAll = async () => {\n try {\n if (unhookProcessSafetyNets) {\n unhookProcessSafetyNets();\n unhookProcessSafetyNets = undefined;\n }\n if (unhookShutdown) {\n unhookShutdown();\n unhookShutdown = undefined;\n }\n } finally {\n await store.dispose();\n }\n };\n\n try {\n if (debug) {\n store.storeGenericItem(debugResource.with(debug));\n }\n\n // In the registration phase we register deeply all the resources, tasks, middleware and events\n store.initializeStore(resource, config);\n\n // the overrides that were registered now will override the other registered resources\n await store.processOverrides();\n\n store.validateDependencyGraph();\n // Compile-time event emission cycle detection (cheap, graph-based)\n store.validateEventEmissionGraph();\n\n const boundedLogger = logger.with({ source: \"run\" });\n if (dryRun) {\n await boundedLogger.debug(\"Dry run mode. Skipping initialization...\");\n return new RunResult(\n store.root.value,\n logger,\n store,\n eventManager,\n taskRunner,\n disposeAll,\n );\n }\n\n // Beginning initialization\n await boundedLogger.debug(\"Events stored. Attaching listeners...\");\n await processor.attachListeners();\n await boundedLogger.debug(\"Listeners attached. Computing dependencies...\");\n await processor.computeAllDependencies();\n // After this stage, logger print policy could have been set.\n await boundedLogger.debug(\n \"Dependencies computed. Proceeding with initialization...\",\n );\n\n // Now we can safely compute dependencies without being afraid of an infinite loop.\n // The hooking part is done here.\n\n // Now we can initialise the root resource\n await processor.initializeRoot();\n\n // disallow manipulation or attaching more\n store.lock();\n eventManager.lock();\n await logger.lock();\n\n await eventManager.emit(globalEvents.ready, undefined, \"run\");\n\n await boundedLogger.info(\"Runner online. Awaiting tasks and events.\");\n\n if (shutdownHooks) {\n unhookShutdown = registerShutdownHook(() => store.dispose());\n }\n\n return new RunResult(\n store.root.value,\n logger,\n store,\n eventManager,\n taskRunner,\n disposeAll,\n );\n } catch (err) {\n // Rollback initialized resources\n await disposeAll();\n throw err;\n }\n}\n\n// process hooks moved to processHooks.ts for clarity\n\nfunction extractResourceAndConfig<C, V extends Promise<any>>(\n resourceOrResourceWithConfig:\n | IResourceWithConfig<C, V>\n | IResource<void, V, any, any> // For void configs\n | IResource<{ [K in any]?: any }, V, any, any>, // For optional config\n) {\n let resource: IResource<any, any, any, any>;\n let config: any;\n if (isResourceWithConfig(resourceOrResourceWithConfig)) {\n resource = resourceOrResourceWithConfig.resource;\n config = resourceOrResourceWithConfig.config;\n } else {\n resource = resourceOrResourceWithConfig as IResource<any, any, any, any>;\n config = undefined;\n }\n return { resource, config };\n}\n","import type { SerializerLike } from \"../../serializer\";\nimport { createExposureFetch } from \"../../http-fetch-tunnel.resource\";\nimport type { ExposureFetchClient } from \"../../http-fetch-tunnel.resource\";\n\nexport interface HttpClientAuthConfig {\n header?: string; // default: x-runner-token\n token: string;\n}\n\nexport interface HttpCreateClientConfig {\n url: string; // ex: http://localhost:7070/__runner\n auth?: HttpClientAuthConfig;\n timeoutMs?: number;\n fetchImpl?: typeof fetch;\n serializer: SerializerLike;\n onRequest?: (ctx: {\n url: string;\n headers: Record<string, string>;\n }) => void | Promise<void>;\n}\n\nconst http = Object.freeze({\n createClient(cfg: HttpCreateClientConfig): ExposureFetchClient {\n const { url, ...rest } = cfg;\n return createExposureFetch({ baseUrl: url, ...rest });\n },\n});\n\nexport const tunnels = Object.freeze({\n http,\n});\n\nexport type { ExposureFetchClient };\n","import { defineResource } from \"./define\";\nimport { globalResources } from \"./globals/globalResources\";\nimport {\n IResource,\n IResourceWithConfig,\n ITaskMiddleware,\n IResourceMiddleware,\n ITask,\n RegisterableItems,\n DependencyMapType,\n} from \"./defs\";\nimport { EventManager, Logger, Store, TaskRunner } from \"./models\";\n\nlet testResourceCounter = 0;\n\nexport interface TestFacade {\n runTask: <I, O extends Promise<any>, D extends DependencyMapType>(\n task: ITask<I, O, D>,\n ...args: I extends undefined ? [] : [I]\n ) => Promise<Awaited<O> | undefined>;\n getResource: (id: string) => unknown;\n taskRunner: TaskRunner;\n store: Store;\n logger: Logger;\n eventManager: EventManager;\n}\n\n/**\n * Helper to create a minimal test harness resource that wraps a root app (or any registerable)\n * and exposes convenient testing utilities while running the full ecosystem\n * (registration, overrides, middleware, events) without modifying the core API.\n */\nexport function createTestResource(\n root: RegisterableItems,\n options?: {\n overrides?: Array<\n | IResource\n | ITask\n | ITaskMiddleware\n | IResourceMiddleware\n | IResourceWithConfig\n >;\n },\n): IResource<void, Promise<TestFacade>> {\n return defineResource({\n id: `testing.${root.id}.${++testResourceCounter}`,\n register: [root],\n overrides: options?.overrides || [],\n dependencies: {\n taskRunner: globalResources.taskRunner,\n store: globalResources.store,\n logger: globalResources.logger,\n eventManager: globalResources.eventManager,\n },\n async init(_, deps) {\n return buildTestFacade(deps);\n },\n });\n}\n\nfunction buildTestFacade(deps: {\n taskRunner: TaskRunner;\n store: Store;\n logger: Logger;\n eventManager: EventManager;\n}): TestFacade {\n return {\n // Run a task within the fully initialized ecosystem\n runTask: <I, O extends Promise<any>, D extends DependencyMapType>(\n task: ITask<I, O, D>,\n ...args: I extends undefined ? [] : [I]\n ): Promise<Awaited<O> | undefined> =>\n deps.taskRunner.run(task, ...args) as Promise<Awaited<O> | undefined>,\n // Access a resource value by id (string or symbol)\n getResource: (id: string) => deps.store.resources.get(id)?.value,\n // Expose internals when needed in tests (not recommended for app usage)\n taskRunner: deps.taskRunner,\n store: deps.store,\n logger: deps.logger,\n eventManager: deps.eventManager,\n };\n}\n","import type {\n DependencyMapType,\n IResourceMeta,\n RegisterableItems,\n ResourceMiddlewareAttachmentType,\n TagType,\n} from \"../../../defs\";\nimport type { BuilderState, RegisterInput, RegisterState } from \"./types\";\n\n/**\n * Clones and patches the builder state immutably.\n */\nexport function clone<\n TConfig,\n TValue extends Promise<any>,\n TDeps extends DependencyMapType,\n TContext,\n TMeta extends IResourceMeta,\n TTags extends TagType[],\n TMiddleware extends ResourceMiddlewareAttachmentType[],\n TNextConfig = TConfig,\n TNextValue extends Promise<any> = TValue,\n TNextDeps extends DependencyMapType = TDeps,\n TNextContext = TContext,\n TNextMeta extends IResourceMeta = TMeta,\n TNextTags extends TagType[] = TTags,\n TNextMiddleware extends ResourceMiddlewareAttachmentType[] = TMiddleware,\n>(\n s: BuilderState<TConfig, TValue, TDeps, TContext, TMeta, TTags, TMiddleware>,\n patch: Partial<\n BuilderState<\n TNextConfig,\n TNextValue,\n TNextDeps,\n TNextContext,\n TNextMeta,\n TNextTags,\n TNextMiddleware\n >\n >,\n): BuilderState<\n TNextConfig,\n TNextValue,\n TNextDeps,\n TNextContext,\n TNextMeta,\n TNextTags,\n TNextMiddleware\n> {\n return Object.freeze({\n // We reuse the frozen state while widening generics, hence the temporary cast.\n ...(s as unknown as BuilderState<\n TNextConfig,\n TNextValue,\n TNextDeps,\n TNextContext,\n TNextMeta,\n TNextTags,\n TNextMiddleware\n >),\n ...patch,\n }) as BuilderState<\n TNextConfig,\n TNextValue,\n TNextDeps,\n TNextContext,\n TNextMeta,\n TNextTags,\n TNextMiddleware\n >;\n}\n\n/**\n * Normalizes register items to an array.\n */\nexport function toRegisterArray(\n items: RegisterableItems | Array<RegisterableItems>,\n) {\n return Array.isArray(items) ? [...items] : [items];\n}\n\n/**\n * Wraps a register function to always return an array.\n */\nexport function normalizeRegisterFunction<TConfig>(\n fn: (config: TConfig) => RegisterableItems | Array<RegisterableItems>,\n) {\n return (config: TConfig) => toRegisterArray(fn(config));\n}\n\n/**\n * Merges register state handling all combinations of arrays and functions.\n */\nexport function mergeRegister<TConfig>(\n existing: RegisterState<TConfig>,\n addition: RegisterInput<TConfig>,\n override: boolean,\n): RegisterState<TConfig> {\n const isFunctionAddition = typeof addition === \"function\";\n const normalizedAddition = isFunctionAddition\n ? normalizeRegisterFunction(\n addition as (\n config: TConfig,\n ) => RegisterableItems | Array<RegisterableItems>,\n )\n : toRegisterArray(addition as RegisterableItems | Array<RegisterableItems>);\n\n if (override || !existing) {\n return isFunctionAddition\n ? (normalizedAddition as (config: TConfig) => Array<RegisterableItems>)\n : (normalizedAddition as Array<RegisterableItems>);\n }\n\n if (typeof existing === \"function\") {\n if (isFunctionAddition) {\n const additionFn = normalizedAddition as (\n config: TConfig,\n ) => Array<RegisterableItems>;\n return (config: TConfig) => [...existing(config), ...additionFn(config)];\n }\n const additionArray = normalizedAddition as Array<RegisterableItems>;\n return (config: TConfig) => [...existing(config), ...additionArray];\n }\n\n const existingArray = existing as Array<RegisterableItems>;\n if (isFunctionAddition) {\n const additionFn = normalizedAddition as (\n config: TConfig,\n ) => Array<RegisterableItems>;\n return (config: TConfig) => [...existingArray, ...additionFn(config)];\n }\n\n return [\n ...existingArray,\n ...(normalizedAddition as Array<RegisterableItems>),\n ];\n}\n\n/**\n * Generic array merge with override support.\n */\nexport function mergeArray<T>(\n existing: ReadonlyArray<T> | undefined,\n addition: ReadonlyArray<T>,\n override: boolean,\n): T[] {\n const toArray = [...addition];\n if (override || !existing) {\n return toArray as T[];\n }\n return [...existing, ...toArray] as T[];\n}\n\n/**\n * Merges dependencies handling all combinations of objects and functions.\n */\nexport function mergeDependencies<\n TConfig,\n TExisting extends DependencyMapType,\n TNew extends DependencyMapType,\n>(\n existing: TExisting | ((config: TConfig) => TExisting) | undefined,\n addition: TNew | ((config: TConfig) => TNew),\n override: boolean,\n): (TExisting & TNew) | ((config: TConfig) => TExisting & TNew) {\n const isFnExisting = typeof existing === \"function\";\n const isFnAddition = typeof addition === \"function\";\n\n type Result = (TExisting & TNew) | ((config: TConfig) => TExisting & TNew);\n\n if (override || !existing) {\n return addition as unknown as Result;\n }\n\n if (isFnExisting && isFnAddition) {\n const e = existing as (config: TConfig) => TExisting;\n const a = addition as (config: TConfig) => TNew;\n return ((config: TConfig) => ({\n ...e(config),\n ...a(config),\n })) as Result;\n }\n if (isFnExisting && !isFnAddition) {\n const e = existing as (config: TConfig) => TExisting;\n const a = addition as TNew;\n return ((config: TConfig) => ({\n ...e(config),\n ...a,\n })) as Result;\n }\n if (!isFnExisting && isFnAddition) {\n const e = existing as TExisting;\n const a = addition as (config: TConfig) => TNew;\n return ((config: TConfig) => ({\n ...e,\n ...a(config),\n })) as Result;\n }\n const e = existing as TExisting;\n const a = addition as TNew;\n return { ...e, ...a } as Result;\n}\n","import type {\n DependencyMapType,\n IResourceDefinition,\n IResourceMeta,\n IValidationSchema,\n OverridableElements,\n ResourceInitFn,\n ResourceMiddlewareAttachmentType,\n TagType,\n} from \"../../../defs\";\nimport { symbolFilePath } from \"../../../defs\";\nimport type { ThrowsList } from \"../../../types/error\";\nimport { defineResource } from \"../../defineResource\";\nimport type { ResourceFluentBuilder } from \"./fluent-builder.interface\";\nimport type { BuilderState, ResolveConfig } from \"./types\";\nimport { clone, mergeArray, mergeDependencies, mergeRegister } from \"./utils\";\n\n/**\n * Creates a ResourceFluentBuilder from the given state.\n * Each builder method returns a new builder with updated state.\n */\nexport function makeResourceBuilder<\n TConfig,\n TValue extends Promise<any>,\n TDeps extends DependencyMapType,\n TContext,\n TMeta extends IResourceMeta,\n TTags extends TagType[],\n TMiddleware extends ResourceMiddlewareAttachmentType[],\n>(\n state: BuilderState<\n TConfig,\n TValue,\n TDeps,\n TContext,\n TMeta,\n TTags,\n TMiddleware\n >,\n): ResourceFluentBuilder<\n TConfig,\n TValue,\n TDeps,\n TContext,\n TMeta,\n TTags,\n TMiddleware\n> {\n const builder: ResourceFluentBuilder<\n TConfig,\n TValue,\n TDeps,\n TContext,\n TMeta,\n TTags,\n TMiddleware\n > = {\n id: state.id,\n dependencies<\n TNewDeps extends DependencyMapType,\n TIsOverride extends boolean = false,\n >(\n deps: TNewDeps | ((config: TConfig) => TNewDeps),\n options?: { override?: TIsOverride },\n ) {\n const override = options?.override ?? false;\n const next = clone<\n TConfig,\n TValue,\n TDeps,\n TContext,\n TMeta,\n TTags,\n TMiddleware,\n TConfig,\n TValue,\n TIsOverride extends true ? TNewDeps : TDeps & TNewDeps,\n TContext,\n TMeta,\n TTags,\n TMiddleware\n >(state, {\n dependencies: mergeDependencies(\n state.dependencies,\n deps,\n override,\n ) as unknown as TIsOverride extends true ? TNewDeps : TDeps & TNewDeps,\n });\n\n return makeResourceBuilder(next);\n },\n register(items, options) {\n const override = options?.override ?? false;\n const next = clone(state, {\n register: mergeRegister(state.register, items, override),\n });\n return makeResourceBuilder(next);\n },\n middleware<TNewMw extends ResourceMiddlewareAttachmentType[]>(\n mw: TNewMw,\n options?: { override?: boolean },\n ) {\n const override = options?.override ?? false;\n const next = clone<\n TConfig,\n TValue,\n TDeps,\n TContext,\n TMeta,\n TTags,\n TMiddleware,\n TConfig,\n TValue,\n TDeps,\n TContext,\n TMeta,\n TTags,\n TNewMw\n >(state, {\n middleware: mergeArray(state.middleware, mw, override) as TNewMw,\n });\n return makeResourceBuilder(next);\n },\n tags<TNewTags extends TagType[]>(\n tags: TNewTags,\n options?: { override?: boolean },\n ) {\n const override = options?.override ?? false;\n const next = clone<\n TConfig,\n TValue,\n TDeps,\n TContext,\n TMeta,\n TTags,\n TMiddleware,\n TConfig,\n TValue,\n TDeps,\n TContext,\n TMeta,\n [...TTags, ...TNewTags],\n TMiddleware\n >(state, {\n tags: mergeArray(state.tags, tags, override) as unknown as [\n ...TTags,\n ...TNewTags,\n ],\n });\n return makeResourceBuilder(next);\n },\n context<TNewCtx>(factory: () => TNewCtx) {\n const next = clone<\n TConfig,\n TValue,\n TDeps,\n TContext,\n TMeta,\n TTags,\n TMiddleware,\n TConfig,\n TValue,\n TDeps,\n TNewCtx,\n TMeta,\n TTags,\n TMiddleware\n >(state, { context: factory });\n return makeResourceBuilder<\n TConfig,\n TValue,\n TDeps,\n TNewCtx,\n TMeta,\n TTags,\n TMiddleware\n >(next);\n },\n configSchema<TNewConfig>(schema: IValidationSchema<TNewConfig>) {\n const next = clone<\n TConfig,\n TValue,\n TDeps,\n TContext,\n TMeta,\n TTags,\n TMiddleware,\n TNewConfig,\n TValue,\n TDeps,\n TContext,\n TMeta,\n TTags,\n TMiddleware\n >(state, { configSchema: schema });\n return makeResourceBuilder<\n TNewConfig,\n TValue,\n TDeps,\n TContext,\n TMeta,\n TTags,\n TMiddleware\n >(next);\n },\n resultSchema<TResolved>(schema: IValidationSchema<TResolved>) {\n const next = clone<\n TConfig,\n TValue,\n TDeps,\n TContext,\n TMeta,\n TTags,\n TMiddleware,\n TConfig,\n Promise<TResolved>,\n TDeps,\n TContext,\n TMeta,\n TTags,\n TMiddleware\n >(state, { resultSchema: schema });\n return makeResourceBuilder<\n TConfig,\n Promise<TResolved>,\n TDeps,\n TContext,\n TMeta,\n TTags,\n TMiddleware\n >(next);\n },\n init<TNewConfig = TConfig, TNewValue extends Promise<any> = TValue>(\n fn: ResourceInitFn<\n ResolveConfig<TConfig, TNewConfig>,\n TNewValue,\n TDeps,\n TContext,\n TMeta,\n TTags,\n TMiddleware\n >,\n ) {\n const next = clone<\n TConfig,\n TValue,\n TDeps,\n TContext,\n TMeta,\n TTags,\n TMiddleware,\n ResolveConfig<TConfig, TNewConfig>,\n TNewValue,\n TDeps,\n TContext,\n TMeta,\n TTags,\n TMiddleware\n >(state, { init: fn });\n return makeResourceBuilder<\n ResolveConfig<TConfig, TNewConfig>,\n TNewValue,\n TDeps,\n TContext,\n TMeta,\n TTags,\n TMiddleware\n >(next);\n },\n dispose(\n fn: NonNullable<\n IResourceDefinition<\n TConfig,\n TValue,\n TDeps,\n TContext,\n any,\n any,\n TMeta,\n TTags,\n TMiddleware\n >[\"dispose\"]\n >,\n ) {\n const next = clone(state, { dispose: fn });\n return makeResourceBuilder<\n TConfig,\n TValue,\n TDeps,\n TContext,\n TMeta,\n TTags,\n TMiddleware\n >(next);\n },\n meta<TNewMeta extends IResourceMeta>(m: TNewMeta) {\n const next = clone<\n TConfig,\n TValue,\n TDeps,\n TContext,\n TMeta,\n TTags,\n TMiddleware,\n TConfig,\n TValue,\n TDeps,\n TContext,\n TNewMeta,\n TTags,\n TMiddleware\n >(state, { meta: m });\n return makeResourceBuilder<\n TConfig,\n TValue,\n TDeps,\n TContext,\n TNewMeta,\n TTags,\n TMiddleware\n >(next);\n },\n overrides(o: Array<OverridableElements>, options?: { override?: boolean }) {\n const override = options?.override ?? false;\n const next = clone(state, {\n overrides: mergeArray(state.overrides, o, override),\n });\n return makeResourceBuilder<\n TConfig,\n TValue,\n TDeps,\n TContext,\n TMeta,\n TTags,\n TMiddleware\n >(next);\n },\n throws(list: ThrowsList) {\n const next = clone(state, { throws: list });\n return makeResourceBuilder<\n TConfig,\n TValue,\n TDeps,\n TContext,\n TMeta,\n TTags,\n TMiddleware\n >(next);\n },\n build() {\n const definition: IResourceDefinition<\n TConfig,\n TValue,\n TDeps,\n TContext,\n any,\n any,\n TMeta,\n TTags,\n TMiddleware\n > = {\n id: state.id,\n dependencies: state.dependencies,\n register: state.register,\n middleware: state.middleware,\n tags: state.tags,\n context: state.context,\n init: state.init,\n dispose: state.dispose,\n configSchema: state.configSchema,\n resultSchema: state.resultSchema,\n meta: state.meta,\n overrides: state.overrides,\n throws: state.throws,\n };\n const resource = defineResource(definition);\n (resource as { [symbolFilePath]?: string })[symbolFilePath] =\n state.filePath;\n return resource;\n },\n };\n return builder;\n}\n","import type {\n IResourceMeta,\n ResourceMiddlewareAttachmentType,\n TagType,\n} from \"../../../defs\";\nimport { getCallerFile } from \"../../../tools/getCallerFile\";\nimport type { ResourceFluentBuilder } from \"./fluent-builder.interface\";\nimport { makeResourceBuilder } from \"./fluent-builder\";\nimport type { BuilderState } from \"./types\";\n\n// Re-export the interface for external consumers\nexport type { ResourceFluentBuilder } from \"./fluent-builder.interface\";\nexport * from \"./types\";\n\n/**\n * Creates a new resource builder with the given id.\n * Overload allows callers to seed the config type at the entry point for convenience.\n */\nexport function resourceBuilder<TConfig = void>(\n id: string,\n): ResourceFluentBuilder<\n TConfig,\n Promise<any>,\n {},\n any,\n IResourceMeta,\n TagType[],\n ResourceMiddlewareAttachmentType[]\n>;\n\nexport function resourceBuilder(\n id: string,\n): ResourceFluentBuilder<\n void,\n Promise<any>,\n {},\n any,\n IResourceMeta,\n TagType[],\n ResourceMiddlewareAttachmentType[]\n> {\n const filePath = getCallerFile();\n const initial: BuilderState<\n void,\n Promise<any>,\n {},\n any,\n IResourceMeta,\n TagType[],\n ResourceMiddlewareAttachmentType[]\n > = Object.freeze({\n id,\n filePath,\n dependencies: undefined,\n register: undefined,\n middleware: [],\n tags: [],\n context: undefined,\n init: undefined,\n dispose: undefined,\n configSchema: undefined,\n resultSchema: undefined,\n meta: undefined,\n overrides: undefined,\n });\n return makeResourceBuilder(initial);\n}\n\n/**\n * Alias for resourceBuilder - common shorthand.\n */\nexport const resource = resourceBuilder;\n","import type {\n DependencyMapType,\n ITaskMeta,\n TagType,\n TaskMiddlewareAttachmentType,\n} from \"../../../defs\";\nimport type { BuilderState } from \"./types\";\n\n/**\n * Clones and patches the builder state immutably.\n */\nexport function clone<\n TInput,\n TOutput,\n TDeps extends DependencyMapType,\n TMeta extends ITaskMeta,\n TTags extends TagType[],\n TMiddleware extends TaskMiddlewareAttachmentType[],\n TNextInput = TInput,\n TNextOutput = TOutput,\n TNextDeps extends DependencyMapType = TDeps,\n TNextMeta extends ITaskMeta = TMeta,\n TNextTags extends TagType[] = TTags,\n TNextMiddleware extends TaskMiddlewareAttachmentType[] = TMiddleware,\n>(\n s: BuilderState<TInput, TOutput, TDeps, TMeta, TTags, TMiddleware>,\n patch: Partial<\n BuilderState<\n TNextInput,\n TNextOutput,\n TNextDeps,\n TNextMeta,\n TNextTags,\n TNextMiddleware\n >\n >,\n): BuilderState<\n TNextInput,\n TNextOutput,\n TNextDeps,\n TNextMeta,\n TNextTags,\n TNextMiddleware\n> {\n type NextState = BuilderState<\n TNextInput,\n TNextOutput,\n TNextDeps,\n TNextMeta,\n TNextTags,\n TNextMiddleware\n >;\n return Object.freeze({\n ...(s as unknown as NextState),\n ...patch,\n }) as NextState;\n}\n\n/**\n * Generic array merge with override support.\n */\nexport function mergeArray<T>(\n existing: ReadonlyArray<T> | undefined,\n addition: ReadonlyArray<T>,\n override: boolean,\n): T[] {\n const toArray = [...addition];\n if (override || !existing) {\n return toArray;\n }\n return [...existing, ...toArray];\n}\n\n/**\n * Merges dependencies handling all combinations of objects and functions.\n */\nexport function mergeDependencies<\n TExisting extends DependencyMapType,\n TNew extends DependencyMapType,\n>(\n existing: TExisting | (() => TExisting) | undefined,\n addition: TNew | (() => TNew),\n override: boolean,\n): (TExisting & TNew) | (() => TExisting & TNew) {\n const isFnExisting = typeof existing === \"function\";\n const isFnAddition = typeof addition === \"function\";\n\n type Result = (TExisting & TNew) | (() => TExisting & TNew);\n\n if (override || !existing) {\n return addition as unknown as Result;\n }\n\n if (isFnExisting && isFnAddition) {\n const e = existing as () => TExisting;\n const a = addition as () => TNew;\n return (() => ({\n ...e(),\n ...a(),\n })) as Result;\n }\n if (isFnExisting && !isFnAddition) {\n const e = existing as () => TExisting;\n const a = addition as TNew;\n return (() => ({\n ...e(),\n ...a,\n })) as Result;\n }\n if (!isFnExisting && isFnAddition) {\n const e = existing as TExisting;\n const a = addition as () => TNew;\n return (() => ({\n ...e,\n ...a(),\n })) as Result;\n }\n const e = existing as TExisting;\n const a = addition as TNew;\n return { ...e, ...a } as Result;\n}\n","import type {\n DependencyMapType,\n DependencyValuesType,\n ITaskDefinition,\n ITaskMeta,\n IValidationSchema,\n TagType,\n TaskMiddlewareAttachmentType,\n} from \"../../../defs\";\nimport { symbolFilePath } from \"../../../defs\";\nimport type { ThrowsList } from \"../../../types/error\";\nimport { defineTask } from \"../../defineTask\";\nimport type { TaskFluentBuilder } from \"./fluent-builder.interface\";\nimport type { BuilderState, ResolveInput } from \"./types\";\nimport { clone, mergeArray, mergeDependencies } from \"./utils\";\n\n/**\n * Creates a TaskFluentBuilder from the given state.\n * Each builder method returns a new builder with updated state.\n */\nexport function makeTaskBuilder<\n TInput,\n TOutput extends Promise<any>,\n TDeps extends DependencyMapType,\n TMeta extends ITaskMeta,\n TTags extends TagType[],\n TMiddleware extends TaskMiddlewareAttachmentType[],\n>(\n state: BuilderState<TInput, TOutput, TDeps, TMeta, TTags, TMiddleware>,\n): TaskFluentBuilder<TInput, TOutput, TDeps, TMeta, TTags, TMiddleware> {\n const builder: TaskFluentBuilder<\n TInput,\n TOutput,\n TDeps,\n TMeta,\n TTags,\n TMiddleware\n > = {\n id: state.id,\n dependencies<TNewDeps extends DependencyMapType>(\n deps: TNewDeps | (() => TNewDeps),\n options?: { override?: boolean },\n ) {\n const override = options?.override ?? false;\n const nextDependencies = mergeDependencies<TDeps, TNewDeps>(\n state.dependencies as TDeps | (() => TDeps),\n deps,\n override,\n );\n\n const next = clone<\n TInput,\n TOutput,\n TDeps,\n TMeta,\n TTags,\n TMiddleware,\n TInput,\n TOutput,\n TDeps & TNewDeps,\n TMeta,\n TTags,\n TMiddleware\n >(state, {\n dependencies: nextDependencies as unknown as TDeps & TNewDeps,\n });\n\n return makeTaskBuilder(next);\n },\n\n middleware<TNewMw extends TaskMiddlewareAttachmentType[]>(\n mw: TNewMw,\n options?: { override?: boolean },\n ) {\n const override = options?.override ?? false;\n const next = clone<\n TInput,\n TOutput,\n TDeps,\n TMeta,\n TTags,\n TMiddleware,\n TInput,\n TOutput,\n TDeps,\n TMeta,\n TTags,\n TNewMw\n >(state, {\n middleware: mergeArray(state.middleware, mw, override) as TNewMw,\n });\n return makeTaskBuilder(next);\n },\n\n tags<TNewTags extends TagType[]>(\n t: TNewTags,\n options?: { override?: boolean },\n ) {\n const override = options?.override ?? false;\n const next = clone<\n TInput,\n TOutput,\n TDeps,\n TMeta,\n TTags,\n TMiddleware,\n TInput,\n TOutput,\n TDeps,\n TMeta,\n [...TTags, ...TNewTags],\n TMiddleware\n >(state, {\n tags: mergeArray(state.tags, t, override) as [...TTags, ...TNewTags],\n });\n return makeTaskBuilder(next);\n },\n\n inputSchema<TNewInput>(schema: IValidationSchema<TNewInput>) {\n const next = clone<\n TInput,\n TOutput,\n TDeps,\n TMeta,\n TTags,\n TMiddleware,\n TNewInput,\n TOutput,\n TDeps,\n TMeta,\n TTags,\n TMiddleware\n >(state, { inputSchema: schema });\n return makeTaskBuilder<\n TNewInput,\n TOutput,\n TDeps,\n TMeta,\n TTags,\n TMiddleware\n >(next);\n },\n\n resultSchema<TResolved>(schema: IValidationSchema<TResolved>) {\n const next = clone<\n TInput,\n TOutput,\n TDeps,\n TMeta,\n TTags,\n TMiddleware,\n TInput,\n Promise<TResolved>,\n TDeps,\n TMeta,\n TTags,\n TMiddleware\n >(state, { resultSchema: schema });\n return makeTaskBuilder<\n TInput,\n Promise<TResolved>,\n TDeps,\n TMeta,\n TTags,\n TMiddleware\n >(next);\n },\n\n run<TNewInput = TInput, TNewOutput extends Promise<any> = TOutput>(\n fn: NonNullable<\n ITaskDefinition<\n ResolveInput<TInput, TNewInput>,\n TNewOutput,\n TDeps,\n TMeta,\n TTags,\n TMiddleware\n >[\"run\"]\n >,\n ) {\n const wrapped = (input: unknown, deps: unknown) =>\n fn(\n input as ResolveInput<TInput, TNewInput>,\n deps as unknown as DependencyValuesType<TDeps>, // Dependencies are injected at runtime\n );\n\n const next = clone<\n TInput,\n TOutput,\n TDeps,\n TMeta,\n TTags,\n TMiddleware,\n ResolveInput<TInput, TNewInput>,\n TNewOutput,\n TDeps,\n TMeta,\n TTags,\n TMiddleware\n >(state, { run: wrapped });\n return makeTaskBuilder<\n ResolveInput<TInput, TNewInput>,\n TNewOutput,\n TDeps,\n TMeta,\n TTags,\n TMiddleware\n >(next);\n },\n\n meta<TNewMeta extends ITaskMeta>(m: TNewMeta) {\n const next = clone<\n TInput,\n TOutput,\n TDeps,\n TMeta,\n TTags,\n TMiddleware,\n TInput,\n TOutput,\n TDeps,\n TNewMeta,\n TTags,\n TMiddleware\n >(state, { meta: m });\n return makeTaskBuilder<\n TInput,\n TOutput,\n TDeps,\n TNewMeta,\n TTags,\n TMiddleware\n >(next);\n },\n\n throws(list: ThrowsList) {\n const next = clone(state, { throws: list });\n return makeTaskBuilder<TInput, TOutput, TDeps, TMeta, TTags, TMiddleware>(\n next,\n );\n },\n\n build() {\n const definition: ITaskDefinition<\n TInput,\n TOutput,\n TDeps,\n TMeta,\n TTags,\n TMiddleware\n > = {\n id: state.id,\n dependencies: state.dependencies,\n middleware: state.middleware,\n inputSchema: state.inputSchema,\n resultSchema: state.resultSchema,\n throws: state.throws,\n run: state.run as NonNullable<\n ITaskDefinition<\n TInput,\n TOutput,\n TDeps,\n TMeta,\n TTags,\n TMiddleware\n >[\"run\"]\n >,\n tags: state.tags,\n meta: state.meta,\n };\n\n const task = defineTask(definition);\n (task as { [symbolFilePath]?: string })[symbolFilePath] = state.filePath;\n return task;\n },\n };\n return builder;\n}\n","import type {\n DependencyMapType,\n IPhantomTask,\n ITaskMeta,\n IValidationSchema,\n TagType,\n TaskMiddlewareAttachmentType,\n} from \"../../../defs\";\nimport { symbolFilePath } from \"../../../defs\";\nimport type { ThrowsList } from \"../../../types/error\";\nimport { defineTask } from \"../../defineTask\";\nimport type { PhantomTaskFluentBuilder } from \"./phantom-builder.interface\";\nimport type { PhantomBuilderState } from \"./types\";\nimport { clone, mergeArray, mergeDependencies } from \"./utils\";\n\n/**\n * Creates a PhantomTaskFluentBuilder from the given state.\n * Each builder method returns a new builder with updated state.\n */\nexport function makePhantomTaskBuilder<\n TInput,\n TResolved,\n TDeps extends DependencyMapType,\n TMeta extends ITaskMeta,\n TTags extends TagType[],\n TMiddleware extends TaskMiddlewareAttachmentType[],\n>(\n state: PhantomBuilderState<\n TInput,\n TResolved,\n TDeps,\n TMeta,\n TTags,\n TMiddleware\n >,\n): PhantomTaskFluentBuilder<\n TInput,\n TResolved,\n TDeps,\n TMeta,\n TTags,\n TMiddleware\n> {\n const builder: PhantomTaskFluentBuilder<\n TInput,\n TResolved,\n TDeps,\n TMeta,\n TTags,\n TMiddleware\n > = {\n id: state.id,\n dependencies<TNewDeps extends DependencyMapType>(\n deps: TNewDeps | (() => TNewDeps),\n options?: { override?: boolean },\n ) {\n const override = options?.override ?? false;\n const nextDependencies = mergeDependencies<TDeps, TNewDeps>(\n state.dependencies as TDeps | (() => TDeps),\n deps,\n override,\n );\n\n const next = clone<\n TInput,\n TResolved,\n TDeps,\n TMeta,\n TTags,\n TMiddleware,\n TInput,\n TResolved,\n TDeps & TNewDeps,\n TMeta,\n TTags,\n TMiddleware\n >(state as unknown as PhantomBuilderState<any, any, any, any, any, any>, {\n dependencies: nextDependencies as unknown as TDeps & TNewDeps,\n });\n\n if (override) {\n return makePhantomTaskBuilder<\n TInput,\n TResolved,\n TNewDeps,\n TMeta,\n TTags,\n TMiddleware\n >(\n next as unknown as PhantomBuilderState<\n TInput,\n TResolved,\n TNewDeps,\n TMeta,\n TTags,\n TMiddleware\n >,\n );\n }\n return makePhantomTaskBuilder<\n TInput,\n TResolved,\n TDeps & TNewDeps,\n TMeta,\n TTags,\n TMiddleware\n >(next);\n },\n\n middleware<TNewMw extends TaskMiddlewareAttachmentType[]>(\n mw: TNewMw,\n options?: { override?: boolean },\n ) {\n const override = options?.override ?? false;\n const next = clone<\n TInput,\n TResolved,\n TDeps,\n TMeta,\n TTags,\n TMiddleware,\n TInput,\n TResolved,\n TDeps,\n TMeta,\n TTags,\n TNewMw\n >(state as unknown as PhantomBuilderState<any, any, any, any, any, any>, {\n middleware: mergeArray(state.middleware, mw, override) as TNewMw,\n });\n return makePhantomTaskBuilder<\n TInput,\n TResolved,\n TDeps,\n TMeta,\n TTags,\n TNewMw\n >(next);\n },\n\n tags<TNewTags extends TagType[]>(\n t: TNewTags,\n options?: { override?: boolean },\n ) {\n const override = options?.override ?? false;\n const next = clone<\n TInput,\n TResolved,\n TDeps,\n TMeta,\n TTags,\n TMiddleware,\n TInput,\n TResolved,\n TDeps,\n TMeta,\n [...TTags, ...TNewTags],\n TMiddleware\n >(state as unknown as PhantomBuilderState<any, any, any, any, any, any>, {\n tags: mergeArray(state.tags, t, override) as [...TTags, ...TNewTags],\n });\n return makePhantomTaskBuilder(\n next,\n ) as unknown as PhantomTaskFluentBuilder<\n TInput,\n TResolved,\n TDeps,\n TMeta,\n [...TTags, ...TNewTags],\n TMiddleware\n >;\n },\n\n inputSchema<TNewInput>(schema: IValidationSchema<TNewInput>) {\n const next = clone<\n TInput,\n TResolved,\n TDeps,\n TMeta,\n TTags,\n TMiddleware,\n TNewInput,\n TResolved,\n TDeps,\n TMeta,\n TTags,\n TMiddleware\n >(state as unknown as PhantomBuilderState<any, any, any, any, any, any>, {\n inputSchema: schema,\n });\n return makePhantomTaskBuilder<\n TNewInput,\n TResolved,\n TDeps,\n TMeta,\n TTags,\n TMiddleware\n >(next);\n },\n\n resultSchema<TNewResolved>(schema: IValidationSchema<TNewResolved>) {\n const next = clone<\n TInput,\n TResolved,\n TDeps,\n TMeta,\n TTags,\n TMiddleware,\n TInput,\n TNewResolved,\n TDeps,\n TMeta,\n TTags,\n TMiddleware\n >(state as unknown as PhantomBuilderState<any, any, any, any, any, any>, {\n resultSchema: schema,\n });\n return makePhantomTaskBuilder<\n TInput,\n TNewResolved,\n TDeps,\n TMeta,\n TTags,\n TMiddleware\n >(next);\n },\n\n meta<TNewMeta extends ITaskMeta>(m: TNewMeta) {\n const next = clone<\n TInput,\n TResolved,\n TDeps,\n TMeta,\n TTags,\n TMiddleware,\n TInput,\n TResolved,\n TDeps,\n TNewMeta,\n TTags,\n TMiddleware\n >(state as unknown as PhantomBuilderState<any, any, any, any, any, any>, {\n meta: m,\n });\n return makePhantomTaskBuilder<\n TInput,\n TResolved,\n TDeps,\n TNewMeta,\n TTags,\n TMiddleware\n >(next);\n },\n\n throws(list: ThrowsList) {\n const next = clone(\n state as unknown as PhantomBuilderState<any, any, any, any, any, any>,\n { throws: list },\n );\n return makePhantomTaskBuilder<\n TInput,\n TResolved,\n TDeps,\n TMeta,\n TTags,\n TMiddleware\n >(next);\n },\n\n build() {\n const built = defineTask.phantom({\n id: state.id,\n dependencies: state.dependencies,\n middleware: state.middleware,\n inputSchema: state.inputSchema,\n resultSchema: state.resultSchema,\n throws: state.throws,\n meta: state.meta,\n tags: state.tags,\n });\n\n (built as { [symbolFilePath]?: string })[symbolFilePath] = state.filePath;\n return built as IPhantomTask<\n TInput,\n TResolved,\n TDeps,\n TMeta,\n TTags,\n TMiddleware\n >;\n },\n };\n return builder;\n}\n","import type {\n ITaskMeta,\n TagType,\n TaskMiddlewareAttachmentType,\n} from \"../../../defs\";\nimport { getCallerFile } from \"../../../tools/getCallerFile\";\nimport { makeTaskBuilder } from \"./fluent-builder\";\nimport type { TaskFluentBuilder } from \"./fluent-builder.interface\";\nimport { makePhantomTaskBuilder } from \"./phantom-builder\";\nimport type { PhantomTaskFluentBuilder } from \"./phantom-builder.interface\";\nimport type { BuilderState, PhantomBuilderState } from \"./types\";\n\nexport * from \"./fluent-builder.interface\";\nexport * from \"./fluent-builder\";\nexport * from \"./phantom-builder.interface\";\nexport * from \"./phantom-builder\";\nexport * from \"./types\";\n\n/**\n * Entry point for creating a task builder.\n */\nexport function taskBuilder(\n id: string,\n): TaskFluentBuilder<\n undefined,\n Promise<any>,\n {},\n ITaskMeta,\n TagType[],\n TaskMiddlewareAttachmentType[]\n> {\n const filePath = getCallerFile();\n const initial: BuilderState<\n undefined,\n Promise<any>,\n {},\n ITaskMeta,\n TagType[],\n TaskMiddlewareAttachmentType[]\n > = Object.freeze({\n id,\n filePath,\n dependencies: {} as {},\n middleware: [] as TaskMiddlewareAttachmentType[],\n meta: {} as ITaskMeta,\n tags: [] as TagType[],\n });\n\n return makeTaskBuilder(initial);\n}\n\n/**\n * Entry point for creating a phantom task builder.\n */\nexport function phantomTaskBuilder<TInput = undefined, TResolved = any>(\n id: string,\n): PhantomTaskFluentBuilder<\n TInput,\n TResolved,\n {},\n ITaskMeta,\n TagType[],\n TaskMiddlewareAttachmentType[]\n> {\n const filePath = getCallerFile();\n const initial: PhantomBuilderState<\n TInput,\n TResolved,\n {},\n ITaskMeta,\n TagType[],\n TaskMiddlewareAttachmentType[]\n > = Object.freeze({\n id,\n filePath,\n dependencies: {} as {},\n middleware: [] as TaskMiddlewareAttachmentType[],\n meta: {} as ITaskMeta,\n tags: [] as TagType[],\n });\n\n return makePhantomTaskBuilder(initial);\n}\n\nexport interface TaskBuilderWithPhantom {\n (\n id: string,\n ): TaskFluentBuilder<\n undefined,\n Promise<any>,\n {},\n ITaskMeta,\n TagType[],\n TaskMiddlewareAttachmentType[]\n >;\n phantom: typeof phantomTaskBuilder;\n}\n\nexport const task: TaskBuilderWithPhantom = Object.assign(taskBuilder, {\n phantom: phantomTaskBuilder,\n});\n","import type { BuilderState } from \"./types\";\n\n/**\n * Clones and patches the builder state immutably.\n */\nexport function clone<TPayload>(\n s: BuilderState<TPayload>,\n patch: Partial<BuilderState<TPayload>>,\n): BuilderState<TPayload> {\n return Object.freeze({\n ...s,\n ...patch,\n });\n}\n\n/**\n * Generic array merge with override support.\n */\nexport function mergeArray<T>(\n existing: ReadonlyArray<T> | undefined,\n addition: ReadonlyArray<T>,\n override: boolean,\n): T[] {\n const toArray = [...addition];\n if (override || !existing) {\n return toArray;\n }\n return [...existing, ...toArray];\n}\n","import type {\n IEventDefinition,\n IEventMeta,\n IValidationSchema,\n TagType,\n} from \"../../../defs\";\nimport { symbolFilePath } from \"../../../defs\";\nimport { defineEvent } from \"../../defineEvent\";\nimport type { EventFluentBuilder } from \"./fluent-builder.interface\";\nimport type { BuilderState } from \"./types\";\nimport { clone, mergeArray } from \"./utils\";\n\n/**\n * Creates an EventFluentBuilder from the given state.\n * Each builder method returns a new builder with updated state.\n */\nexport function makeEventBuilder<TPayload>(\n state: BuilderState<TPayload>,\n): EventFluentBuilder<TPayload> {\n const builder: EventFluentBuilder<TPayload> = {\n id: state.id,\n\n payloadSchema<TNew>(schema: IValidationSchema<TNew>) {\n // Cast state to target type for widening, then assign the schema\n const next = clone(state as unknown as BuilderState<TNew>, {\n payloadSchema: schema,\n });\n return makeEventBuilder<TNew>(next);\n },\n\n tags<TNewTags extends TagType[]>(\n t: TNewTags,\n options?: { override?: boolean },\n ) {\n const override = options?.override ?? false;\n const next = clone(state, {\n tags: mergeArray(state.tags, t, override) as TagType[],\n });\n return makeEventBuilder<TPayload>(next);\n },\n\n meta<TNewMeta extends IEventMeta>(m: TNewMeta) {\n const next = clone(state, { meta: m as IEventMeta });\n return makeEventBuilder<TPayload>(next);\n },\n\n parallel(enabled = true) {\n const next = clone(state, { parallel: enabled });\n return makeEventBuilder<TPayload>(next);\n },\n\n build() {\n const event = defineEvent({\n ...(state as unknown as IEventDefinition<TPayload>),\n });\n (event as { [symbolFilePath]?: string })[symbolFilePath] = state.filePath;\n return event;\n },\n };\n\n return builder;\n}\n","import type { TagType } from \"../../../defs\";\nimport { getCallerFile } from \"../../../tools/getCallerFile\";\nimport { makeEventBuilder } from \"./fluent-builder\";\nimport type { EventFluentBuilder } from \"./fluent-builder.interface\";\nimport type { BuilderState } from \"./types\";\n\nexport * from \"./fluent-builder.interface\";\nexport * from \"./fluent-builder\";\nexport * from \"./types\";\nexport * from \"./utils\";\n\n/**\n * Entry point for creating an event builder.\n */\nexport function eventBuilder<TPayload = void>(\n id: string,\n): EventFluentBuilder<TPayload> {\n const filePath = getCallerFile();\n const initial: BuilderState<TPayload> = Object.freeze({\n id,\n filePath,\n meta: {} as BuilderState<TPayload>[\"meta\"],\n payloadSchema: undefined,\n tags: [] as TagType[],\n parallel: undefined,\n });\n\n return makeEventBuilder(initial);\n}\n\nexport const event = eventBuilder;\n","import type {\n DependencyMapType,\n IEventDefinition,\n ITaskMeta,\n} from \"../../../defs\";\nimport type { BuilderState } from \"./types\";\n\n/**\n * Clones and patches the builder state immutably.\n */\nexport function clone<\n TDeps extends DependencyMapType,\n TOn extends\n | \"*\"\n | IEventDefinition<any>\n | readonly IEventDefinition<any>[]\n | undefined,\n TMeta extends ITaskMeta,\n TNextDeps extends DependencyMapType = TDeps,\n TNextOn extends\n | \"*\"\n | IEventDefinition<any>\n | readonly IEventDefinition<any>[]\n | undefined = TOn,\n TNextMeta extends ITaskMeta = TMeta,\n>(\n s: BuilderState<TDeps, TOn, TMeta>,\n patch: Partial<BuilderState<TNextDeps, TNextOn, TNextMeta>>,\n): BuilderState<TNextDeps, TNextOn, TNextMeta> {\n type NextState = BuilderState<TNextDeps, TNextOn, TNextMeta>;\n return Object.freeze({\n ...(s as unknown as NextState),\n ...patch,\n }) as NextState;\n}\n\n/**\n * Generic array merge with override support.\n */\nexport function mergeArray<T>(\n existing: ReadonlyArray<T> | undefined,\n addition: ReadonlyArray<T>,\n override: boolean,\n): T[] {\n const toArray = [...addition];\n if (override || !existing) {\n return toArray;\n }\n return [...existing, ...toArray];\n}\n\n/**\n * Merges dependencies handling all combinations of objects and functions.\n */\nexport function mergeDependencies<\n TExisting extends DependencyMapType,\n TNew extends DependencyMapType,\n>(\n existing: TExisting | (() => TExisting) | undefined,\n addition: TNew | (() => TNew),\n override: boolean,\n): (TExisting & TNew) | (() => TExisting & TNew) {\n const isFnExisting = typeof existing === \"function\";\n const isFnAddition = typeof addition === \"function\";\n\n type Result = (TExisting & TNew) | (() => TExisting & TNew);\n\n if (override || !existing) {\n return addition as unknown as Result;\n }\n\n if (isFnExisting && isFnAddition) {\n const e = existing as () => TExisting;\n const a = addition as () => TNew;\n return (() => ({\n ...e(),\n ...a(),\n })) as Result;\n }\n if (isFnExisting && !isFnAddition) {\n const e = existing as () => TExisting;\n const a = addition as TNew;\n return (() => ({\n ...e(),\n ...a,\n })) as Result;\n }\n if (!isFnExisting && isFnAddition) {\n const e = existing as TExisting;\n const a = addition as () => TNew;\n return (() => ({\n ...e,\n ...a(),\n })) as Result;\n }\n const e = existing as TExisting;\n const a = addition as TNew;\n return { ...e, ...a } as Result;\n}\n","import type {\n DependencyMapType,\n IEventDefinition,\n IHook,\n IHookDefinition,\n ITaskMeta,\n TagType,\n} from \"../../../defs\";\nimport { symbolFilePath } from \"../../../defs\";\nimport { builderIncompleteError } from \"../../../errors\";\nimport { defineHook } from \"../../defineHook\";\nimport type { HookFluentBuilder } from \"./fluent-builder.interface\";\nimport type { BuilderState } from \"./types\";\nimport { clone, mergeArray, mergeDependencies } from \"./utils\";\n\n/**\n * Creates a HookFluentBuilder from the given state.\n * Each builder method returns a new builder with updated state.\n */\nexport function makeHookBuilder<\n TDeps extends DependencyMapType,\n TOn extends\n | \"*\"\n | IEventDefinition<any>\n | readonly IEventDefinition<any>[]\n | undefined,\n TMeta extends ITaskMeta,\n>(\n state: BuilderState<TDeps, TOn, TMeta>,\n): HookFluentBuilder<TDeps, TOn, TMeta> {\n const builder: HookFluentBuilder<TDeps, TOn, TMeta> = {\n id: state.id,\n\n on<\n TNewOn extends\n | \"*\"\n | IEventDefinition<any>\n | readonly IEventDefinition<any>[],\n >(on: TNewOn) {\n const next = clone<TDeps, TOn, TMeta, TDeps, TNewOn, TMeta>(state, {\n on: on as TNewOn,\n });\n return makeHookBuilder<TDeps, TNewOn, TMeta>(next);\n },\n\n order(order: number) {\n const next = clone(state, { order });\n return makeHookBuilder<TDeps, TOn, TMeta>(next);\n },\n\n dependencies<TNewDeps extends DependencyMapType>(\n deps: TNewDeps | (() => TNewDeps),\n options?: { override?: boolean },\n ) {\n const override = options?.override ?? false;\n const nextDependencies = mergeDependencies<TDeps, TNewDeps>(\n state.dependencies as TDeps | (() => TDeps),\n deps,\n override,\n );\n\n const next = clone<TDeps, TOn, TMeta, TDeps & TNewDeps, TOn, TMeta>(\n state as BuilderState<TDeps, TOn, TMeta>,\n {\n dependencies: nextDependencies as unknown as TDeps & TNewDeps,\n },\n );\n\n if (override) {\n return makeHookBuilder<TNewDeps, TOn, TMeta>(\n next as unknown as BuilderState<TNewDeps, TOn, TMeta>,\n );\n }\n return makeHookBuilder<TDeps & TNewDeps, TOn, TMeta>(next);\n },\n\n tags<TNewTags extends TagType[]>(\n t: TNewTags,\n options?: { override?: boolean },\n ) {\n const override = options?.override ?? false;\n const next = clone(state, {\n tags: mergeArray(state.tags, t, override) as TagType[],\n });\n return makeHookBuilder<TDeps, TOn, TMeta>(next);\n },\n\n meta<TNewMeta extends ITaskMeta>(m: TNewMeta) {\n const next = clone<TDeps, TOn, TMeta, TDeps, TOn, TNewMeta>(\n state as BuilderState<TDeps, TOn, TMeta>,\n {\n meta: m as TNewMeta,\n },\n );\n return makeHookBuilder<TDeps, TOn, TNewMeta>(next);\n },\n\n run(fn) {\n const next = clone(state, { run: fn as NonNullable<typeof state.run> });\n return makeHookBuilder<TDeps, TOn, TMeta>(next);\n },\n\n build() {\n // Fail-fast: validate required fields before creating hook\n const missingFields: string[] = [];\n if (state.on === undefined) {\n missingFields.push(\"on\");\n }\n if (state.run === undefined) {\n missingFields.push(\"run\");\n }\n if (missingFields.length > 0) {\n builderIncompleteError.throw({\n type: \"hook\",\n builderId: state.id,\n missingFields,\n message: `Hook \"${state.id}\" is incomplete`,\n });\n }\n\n const hook = defineHook({\n ...(state as unknown as IHookDefinition<TDeps, any, TMeta>),\n });\n (hook as { [symbolFilePath]?: string })[symbolFilePath] = state.filePath;\n // Runtime validation guarantees TOn is valid\n return hook as IHook<TDeps, any, TMeta>;\n },\n };\n\n return builder;\n}\n","import type { ITaskMeta, TagType } from \"../../../defs\";\nimport { getCallerFile } from \"../../../tools/getCallerFile\";\nimport { makeHookBuilder } from \"./fluent-builder\";\nimport type { HookFluentBuilder } from \"./fluent-builder.interface\";\nimport type { BuilderState } from \"./types\";\n\nexport * from \"./fluent-builder.interface\";\nexport * from \"./fluent-builder\";\nexport * from \"./types\";\nexport * from \"./utils\";\n\n/**\n * Entry point for creating a hook builder.\n * Requires calling .on() and .run() before .build().\n */\nexport function hookBuilder(\n id: string,\n): HookFluentBuilder<{}, undefined, ITaskMeta> {\n const filePath = getCallerFile();\n const initial: BuilderState<{}, undefined, ITaskMeta> = Object.freeze({\n id,\n filePath,\n dependencies: {} as {},\n on: undefined,\n order: 0,\n meta: {} as ITaskMeta,\n run: undefined,\n tags: [] as TagType[],\n });\n\n return makeHookBuilder(initial);\n}\n\nexport const hook = hookBuilder;\n","import type { DependencyMapType } from \"../../../defs\";\nimport type { TaskMwState, ResMwState } from \"./types\";\n\n/**\n * Clones and patches the Task middleware state immutably.\n */\nexport function cloneTask<C, In, Out, D extends DependencyMapType>(\n s: TaskMwState<C, In, Out, D>,\n patch: Partial<TaskMwState<C, In, Out, D>>,\n): TaskMwState<C, In, Out, D> {\n return Object.freeze({\n ...s,\n ...patch,\n });\n}\n\n/**\n * Clones and patches the Resource middleware state immutably.\n */\nexport function cloneRes<C, In, Out, D extends DependencyMapType>(\n s: ResMwState<C, In, Out, D>,\n patch: Partial<ResMwState<C, In, Out, D>>,\n): ResMwState<C, In, Out, D> {\n return Object.freeze({\n ...s,\n ...patch,\n });\n}\n\n/**\n * Generic array merge with override support.\n */\nexport function mergeArray<T>(\n existing: ReadonlyArray<T> | undefined,\n addition: ReadonlyArray<T>,\n override: boolean,\n): T[] {\n const toArray = [...addition];\n if (override || !existing) {\n return toArray;\n }\n return [...existing, ...toArray];\n}\n\n/**\n * Merges dependencies handling all combinations of objects and functions.\n */\nexport function mergeDependencies<\n C,\n TExisting extends DependencyMapType,\n TNew extends DependencyMapType,\n>(\n existing: TExisting | ((config: C) => TExisting) | undefined,\n addition: TNew | ((config: C) => TNew),\n override: boolean,\n): (TExisting & TNew) | ((config: C) => TExisting & TNew) {\n const isFnExisting = typeof existing === \"function\";\n const isFnAddition = typeof addition === \"function\";\n\n type Result = (TExisting & TNew) | ((config: C) => TExisting & TNew);\n\n if (override || !existing) {\n return addition as unknown as Result;\n }\n\n if (isFnExisting && isFnAddition) {\n const e = existing as (config: C) => TExisting;\n const a = addition as (config: C) => TNew;\n return ((config: C) => ({\n ...e(config),\n ...a(config),\n })) as Result;\n }\n if (isFnExisting && !isFnAddition) {\n const e = existing as (config: C) => TExisting;\n const a = addition as TNew;\n return ((config: C) => ({\n ...e(config),\n ...a,\n })) as Result;\n }\n if (!isFnExisting && isFnAddition) {\n const e = existing as TExisting;\n const a = addition as (config: C) => TNew;\n return ((config: C) => ({\n ...e,\n ...a(config),\n })) as Result;\n }\n const e = existing as TExisting;\n const a = addition as TNew;\n return { ...e, ...a } as Result;\n}\n","import type {\n DependencyMapType,\n ITaskMiddlewareDefinition,\n IValidationSchema,\n IMiddlewareMeta,\n TagType,\n} from \"../../../defs\";\nimport { symbolFilePath } from \"../../../defs\";\nimport { builderIncompleteError } from \"../../../errors\";\nimport { defineTaskMiddleware } from \"../../defineTaskMiddleware\";\nimport type { TaskMiddlewareFluentBuilder } from \"./task.interface\";\nimport type { TaskMwState } from \"./types\";\nimport { cloneTask, mergeArray, mergeDependencies } from \"./utils\";\n\n/**\n * Creates a TaskMiddlewareFluentBuilder from the given state.\n */\nexport function makeTaskMiddlewareBuilder<\n C,\n In,\n Out,\n D extends DependencyMapType,\n>(\n state: TaskMwState<C, In, Out, D>,\n): TaskMiddlewareFluentBuilder<C, In, Out, D> {\n const builder: TaskMiddlewareFluentBuilder<C, In, Out, D> = {\n id: state.id,\n\n dependencies<TNewDeps extends DependencyMapType>(\n deps: TNewDeps | ((config: C) => TNewDeps),\n options?: { override?: boolean },\n ) {\n const override = options?.override ?? false;\n const nextDependencies = mergeDependencies<C, D, TNewDeps>(\n state.dependencies as D | ((config: C) => D),\n deps,\n override,\n );\n\n const next = cloneTask<C, In, Out, D & TNewDeps>(\n state as unknown as TaskMwState<C, In, Out, D & TNewDeps>,\n {\n dependencies: nextDependencies as unknown as D & TNewDeps,\n },\n );\n\n if (override) {\n return makeTaskMiddlewareBuilder<C, In, Out, TNewDeps>(\n next as unknown as TaskMwState<C, In, Out, TNewDeps>,\n );\n }\n return makeTaskMiddlewareBuilder<C, In, Out, D & TNewDeps>(next);\n },\n\n configSchema<TNew>(schema: IValidationSchema<TNew>) {\n const next = cloneTask<TNew, In, Out, D>(\n state as unknown as TaskMwState<TNew, In, Out, D>,\n {\n configSchema: schema as unknown as TaskMwState<\n TNew,\n In,\n Out,\n D\n >[\"configSchema\"],\n },\n );\n return makeTaskMiddlewareBuilder<TNew, In, Out, D>(next);\n },\n\n run(fn) {\n const next = cloneTask(state, { run: fn as typeof state.run });\n return makeTaskMiddlewareBuilder<C, In, Out, D>(next);\n },\n\n meta<TNewMeta extends IMiddlewareMeta>(m: TNewMeta) {\n const next = cloneTask(state, { meta: m as IMiddlewareMeta });\n return makeTaskMiddlewareBuilder<C, In, Out, D>(next);\n },\n\n tags<TNewTags extends TagType[]>(\n t: TNewTags,\n options?: { override?: boolean },\n ) {\n const override = options?.override ?? false;\n const next = cloneTask(state, {\n tags: mergeArray(state.tags, t, override) as TagType[],\n });\n return makeTaskMiddlewareBuilder<C, In, Out, D>(next);\n },\n\n everywhere(flag) {\n const next = cloneTask(state, { everywhere: flag });\n return makeTaskMiddlewareBuilder<C, In, Out, D>(next);\n },\n\n build() {\n // Fail-fast: validate required fields before creating middleware\n if (state.run === undefined) {\n builderIncompleteError.throw({\n type: \"task-middleware\",\n builderId: state.id,\n missingFields: [\"run\"],\n message: `Task middleware \"${state.id}\" is incomplete`,\n });\n }\n\n const middleware = defineTaskMiddleware({\n ...(state as unknown as ITaskMiddlewareDefinition<C, In, Out, D>),\n });\n (middleware as { [symbolFilePath]?: string })[symbolFilePath] =\n state.filePath;\n return middleware;\n },\n };\n\n return builder;\n}\n","import type {\n DependencyMapType,\n IResourceMiddlewareDefinition,\n IValidationSchema,\n IMiddlewareMeta,\n TagType,\n} from \"../../../defs\";\nimport { symbolFilePath } from \"../../../defs\";\nimport { builderIncompleteError } from \"../../../errors\";\nimport { defineResourceMiddleware } from \"../../defineResourceMiddleware\";\nimport type { ResourceMiddlewareFluentBuilder } from \"./resource.interface\";\nimport type { ResMwState } from \"./types\";\nimport { cloneRes, mergeArray, mergeDependencies } from \"./utils\";\n\n/**\n * Creates a ResourceMiddlewareFluentBuilder from the given state.\n */\nexport function makeResourceMiddlewareBuilder<\n C,\n In,\n Out,\n D extends DependencyMapType,\n>(\n state: ResMwState<C, In, Out, D>,\n): ResourceMiddlewareFluentBuilder<C, In, Out, D> {\n const builder: ResourceMiddlewareFluentBuilder<C, In, Out, D> = {\n id: state.id,\n\n dependencies<TNewDeps extends DependencyMapType>(\n deps: TNewDeps | ((config: C) => TNewDeps),\n options?: { override?: boolean },\n ) {\n const override = options?.override ?? false;\n const nextDependencies = mergeDependencies<C, D, TNewDeps>(\n state.dependencies as D | ((config: C) => D),\n deps,\n override,\n );\n\n const next = cloneRes<C, In, Out, D & TNewDeps>(\n state as unknown as ResMwState<C, In, Out, D & TNewDeps>,\n {\n dependencies: nextDependencies as unknown as D & TNewDeps,\n },\n );\n\n if (override) {\n return makeResourceMiddlewareBuilder<C, In, Out, TNewDeps>(\n next as unknown as ResMwState<C, In, Out, TNewDeps>,\n );\n }\n return makeResourceMiddlewareBuilder<C, In, Out, D & TNewDeps>(next);\n },\n\n configSchema<TNew>(schema: IValidationSchema<TNew>) {\n const next = cloneRes<TNew, In, Out, D>(\n state as unknown as ResMwState<TNew, In, Out, D>,\n {\n configSchema: schema as unknown as ResMwState<\n TNew,\n In,\n Out,\n D\n >[\"configSchema\"],\n },\n );\n return makeResourceMiddlewareBuilder<TNew, In, Out, D>(next);\n },\n\n run(fn) {\n const next = cloneRes(state, { run: fn as typeof state.run });\n return makeResourceMiddlewareBuilder<C, In, Out, D>(next);\n },\n\n meta<TNewMeta extends IMiddlewareMeta>(m: TNewMeta) {\n const next = cloneRes(state, { meta: m as IMiddlewareMeta });\n return makeResourceMiddlewareBuilder<C, In, Out, D>(next);\n },\n\n tags<TNewTags extends TagType[]>(\n t: TNewTags,\n options?: { override?: boolean },\n ) {\n const override = options?.override ?? false;\n const next = cloneRes(state, {\n tags: mergeArray(state.tags, t, override) as TagType[],\n });\n return makeResourceMiddlewareBuilder<C, In, Out, D>(next);\n },\n\n everywhere(flag) {\n const next = cloneRes(state, { everywhere: flag });\n return makeResourceMiddlewareBuilder<C, In, Out, D>(next);\n },\n\n build() {\n // Fail-fast: validate required fields before creating middleware\n if (state.run === undefined) {\n builderIncompleteError.throw({\n type: \"resource-middleware\",\n builderId: state.id,\n missingFields: [\"run\"],\n message: `Resource middleware \"${state.id}\" is incomplete`,\n });\n }\n\n const middleware = defineResourceMiddleware({\n ...(state as unknown as IResourceMiddlewareDefinition<C, In, Out, D>),\n });\n (middleware as { [symbolFilePath]?: string })[symbolFilePath] =\n state.filePath;\n return middleware;\n },\n };\n\n return builder;\n}\n","import type {\n DependencyMapType,\n IMiddlewareMeta,\n TagType,\n} from \"../../../defs\";\nimport { getCallerFile } from \"../../../tools/getCallerFile\";\nimport { makeTaskMiddlewareBuilder } from \"./task\";\nimport type { TaskMiddlewareFluentBuilder } from \"./task.interface\";\nimport { makeResourceMiddlewareBuilder } from \"./resource\";\nimport type { ResourceMiddlewareFluentBuilder } from \"./resource.interface\";\nimport type { TaskMwState, ResMwState } from \"./types\";\n\nexport * from \"./task.interface\";\nexport * from \"./resource.interface\";\nexport * from \"./task\";\nexport * from \"./resource\";\nexport * from \"./types\";\nexport * from \"./utils\";\n\n/**\n * Entry point for creating a task middleware builder.\n */\nexport function taskMiddlewareBuilder<\n C = void,\n In = void,\n Out = void,\n D extends DependencyMapType = {},\n>(id: string): TaskMiddlewareFluentBuilder<C, In, Out, D> {\n const filePath = getCallerFile();\n const initial: TaskMwState<C, In, Out, D> = Object.freeze({\n id,\n filePath,\n dependencies: {} as D,\n configSchema: undefined as unknown as TaskMwState<\n C,\n In,\n Out,\n D\n >[\"configSchema\"],\n run: undefined as unknown as TaskMwState<C, In, Out, D>[\"run\"],\n meta: {} as IMiddlewareMeta,\n tags: [] as TagType[],\n everywhere: undefined as unknown as TaskMwState<\n C,\n In,\n Out,\n D\n >[\"everywhere\"],\n });\n\n return makeTaskMiddlewareBuilder(initial);\n}\n\n/**\n * Entry point for creating a resource middleware builder.\n */\nexport function resourceMiddlewareBuilder<\n C = void,\n In = void,\n Out = void,\n D extends DependencyMapType = {},\n>(id: string): ResourceMiddlewareFluentBuilder<C, In, Out, D> {\n const filePath = getCallerFile();\n const initial: ResMwState<C, In, Out, D> = Object.freeze({\n id,\n filePath,\n dependencies: {} as D,\n configSchema: undefined as unknown as ResMwState<\n C,\n In,\n Out,\n D\n >[\"configSchema\"],\n run: undefined as unknown as ResMwState<C, In, Out, D>[\"run\"],\n meta: {} as IMiddlewareMeta,\n tags: [] as TagType[],\n everywhere: undefined as unknown as ResMwState<C, In, Out, D>[\"everywhere\"],\n });\n\n return makeResourceMiddlewareBuilder(initial);\n}\n\nexport const taskMiddleware = taskMiddlewareBuilder;\nexport const resourceMiddleware = resourceMiddlewareBuilder;\n","import type { BuilderState } from \"./types\";\n\n/**\n * Clones and patches the builder state immutably.\n */\nexport function clone<TConfig, TEnforceIn, TEnforceOut, TNextConfig = TConfig>(\n s: BuilderState<TConfig, TEnforceIn, TEnforceOut>,\n patch: Partial<BuilderState<TNextConfig, TEnforceIn, TEnforceOut>>,\n): BuilderState<TNextConfig, TEnforceIn, TEnforceOut> {\n return Object.freeze({\n ...(s as unknown as BuilderState<TNextConfig, TEnforceIn, TEnforceOut>),\n ...patch,\n });\n}\n","import type { ITagMeta, IValidationSchema } from \"../../../defs\";\nimport { symbolFilePath } from \"../../../defs\";\nimport { defineTag } from \"../../defineTag\";\nimport type { TagFluentBuilder } from \"./fluent-builder.interface\";\nimport type { BuilderState } from \"./types\";\nimport { clone } from \"./utils\";\n\n/**\n * Creates a TagFluentBuilder from the given state.\n */\nexport function makeTagBuilder<TConfig, TEnforceIn, TEnforceOut>(\n state: BuilderState<TConfig, TEnforceIn, TEnforceOut>,\n): TagFluentBuilder<TConfig, TEnforceIn, TEnforceOut> {\n const builder: TagFluentBuilder<TConfig, TEnforceIn, TEnforceOut> = {\n id: state.id,\n\n meta(m: ITagMeta) {\n const next = clone(state, { meta: m });\n return makeTagBuilder(next);\n },\n\n configSchema<TNewConfig>(schema: IValidationSchema<TNewConfig>) {\n const next = clone(state, {\n configSchema: schema,\n }) as unknown as BuilderState<TNewConfig, TEnforceIn, TEnforceOut>;\n return makeTagBuilder(next);\n },\n\n config<TNewConfig>(config: TNewConfig) {\n const next = clone(state, { config }) as unknown as BuilderState<\n TNewConfig,\n TEnforceIn,\n TEnforceOut\n >;\n return makeTagBuilder(next);\n },\n\n build() {\n const tag = defineTag<TConfig, TEnforceIn, TEnforceOut>({\n id: state.id,\n meta: state.meta,\n configSchema: state.configSchema as IValidationSchema<TConfig>,\n config: state.config as TConfig,\n });\n (tag as { [symbolFilePath]?: string })[symbolFilePath] = state.filePath;\n return tag;\n },\n };\n\n return builder;\n}\n","import { getCallerFile } from \"../../../tools/getCallerFile\";\nimport { makeTagBuilder } from \"./fluent-builder\";\nimport type { TagFluentBuilder } from \"./fluent-builder.interface\";\nimport type { BuilderState } from \"./types\";\n\nexport * from \"./fluent-builder.interface\";\nexport * from \"./fluent-builder\";\nexport * from \"./types\";\nexport * from \"./utils\";\n\n/**\n * Entry point for creating a tag builder.\n */\nexport function tagBuilder<\n TConfig = void,\n TEnforceIn = void,\n TEnforceOut = void,\n>(id: string): TagFluentBuilder<TConfig, TEnforceIn, TEnforceOut> {\n const filePath = getCallerFile();\n const initial: BuilderState<TConfig, TEnforceIn, TEnforceOut> = Object.freeze(\n {\n id,\n filePath,\n meta: {} as BuilderState<TConfig, TEnforceIn, TEnforceOut>[\"meta\"],\n configSchema: undefined as BuilderState<\n TConfig,\n TEnforceIn,\n TEnforceOut\n >[\"configSchema\"],\n config: undefined as BuilderState<\n TConfig,\n TEnforceIn,\n TEnforceOut\n >[\"config\"],\n },\n );\n\n return makeTagBuilder(initial);\n}\n\nexport const tag = tagBuilder;\n","import type { BuilderState } from \"./types\";\n\n/**\n * Clones and patches the builder state immutably.\n */\nexport function clone<T>(\n s: BuilderState<T>,\n patch: Partial<BuilderState<T>>,\n): BuilderState<T> {\n return Object.freeze({\n ...s,\n ...patch,\n });\n}\n","import type { IAsyncContextDefinition, IAsyncContextMeta } from \"../../../defs\";\nimport { defineAsyncContext } from \"../../defineAsyncContext\";\nimport type { AsyncContextFluentBuilder } from \"./fluent-builder.interface\";\nimport type { BuilderState } from \"./types\";\nimport { clone } from \"./utils\";\n\n/**\n * Creates an AsyncContextFluentBuilder from the given state.\n */\nexport function makeAsyncContextBuilder<T>(\n state: BuilderState<T>,\n): AsyncContextFluentBuilder<T> {\n const builder: AsyncContextFluentBuilder<T> = {\n id: state.id,\n\n serialize(fn) {\n const next = clone(state, { serialize: fn });\n return makeAsyncContextBuilder(next);\n },\n\n parse(fn) {\n const next = clone(state, { parse: fn });\n return makeAsyncContextBuilder(next);\n },\n\n configSchema(schema) {\n const next = clone(state, { configSchema: schema });\n return makeAsyncContextBuilder(next);\n },\n\n meta<TNewMeta extends IAsyncContextMeta>(m: TNewMeta) {\n const next = clone(state, { meta: m });\n return makeAsyncContextBuilder(next);\n },\n\n build() {\n const def: IAsyncContextDefinition<T> = {\n id: state.id,\n serialize: state.serialize,\n parse: state.parse,\n configSchema: state.configSchema,\n meta: state.meta,\n };\n return defineAsyncContext<T>(def, state.filePath);\n },\n };\n\n return builder;\n}\n","import type { IAsyncContextMeta } from \"../../../defs\";\nimport { getCallerFile } from \"../../../tools/getCallerFile\";\nimport { makeAsyncContextBuilder } from \"./fluent-builder\";\nimport type { AsyncContextFluentBuilder } from \"./fluent-builder.interface\";\nimport type { BuilderState } from \"./types\";\n\nexport * from \"./fluent-builder.interface\";\nexport * from \"./fluent-builder\";\nexport * from \"./types\";\nexport * from \"./utils\";\n\n/**\n * Entry point for creating an async context builder.\n */\nexport function asyncContextBuilder<T = unknown>(\n id: string,\n): AsyncContextFluentBuilder<T> {\n const filePath = getCallerFile();\n const initial: BuilderState<T> = Object.freeze({\n id,\n filePath,\n serialize: undefined,\n parse: undefined,\n configSchema: undefined,\n meta: {} as IAsyncContextMeta,\n });\n\n return makeAsyncContextBuilder(initial);\n}\n\nexport const asyncContext = asyncContextBuilder;\n","import type {\n DependencyMapType,\n IEventDefinition,\n IHook,\n IHookDefinition,\n ITaskMeta,\n TagType,\n} from \"../../../defs\";\nimport { defineOverride } from \"../../defineOverride\";\nimport { mergeArray, mergeDependencies } from \"../hook/utils\";\n\nexport type HookOn =\n | \"*\"\n | IEventDefinition<any>\n | readonly IEventDefinition<any>[];\n\nexport interface HookOverrideBuilder<\n TDeps extends DependencyMapType,\n TOn extends HookOn,\n TMeta extends ITaskMeta,\n> {\n id: string;\n order(order: number): HookOverrideBuilder<TDeps, TOn, TMeta>;\n dependencies<\n TNewDeps extends DependencyMapType,\n TIsOverride extends boolean = false,\n >(\n deps: TNewDeps | (() => TNewDeps),\n options?: { override?: TIsOverride },\n ): HookOverrideBuilder<\n TIsOverride extends true ? TNewDeps : TDeps & TNewDeps,\n TOn,\n TMeta\n >;\n tags<TNewTags extends TagType[]>(\n t: TNewTags,\n options?: { override?: boolean },\n ): HookOverrideBuilder<TDeps, TOn, TMeta>;\n meta<TNewMeta extends ITaskMeta>(\n m: TNewMeta,\n ): HookOverrideBuilder<TDeps, TOn, TNewMeta>;\n run(\n fn: IHookDefinition<TDeps, TOn, TMeta>[\"run\"],\n ): HookOverrideBuilder<TDeps, TOn, TMeta>;\n build(): IHook<TDeps, TOn, TMeta>;\n}\n\ntype HookOverrideState<\n TDeps extends DependencyMapType,\n TOn extends HookOn,\n TMeta extends ITaskMeta,\n> = Readonly<IHookDefinition<TDeps, TOn, TMeta>>;\n\ntype AnyHook = IHook<any, any, any>;\n\nfunction cloneHookState<\n TDeps extends DependencyMapType,\n TOn extends HookOn,\n TMeta extends ITaskMeta,\n TNextDeps extends DependencyMapType = TDeps,\n TNextOn extends HookOn = TOn,\n TNextMeta extends ITaskMeta = TMeta,\n>(\n state: HookOverrideState<TDeps, TOn, TMeta>,\n patch: Partial<HookOverrideState<TNextDeps, TNextOn, TNextMeta>>,\n): HookOverrideState<TNextDeps, TNextOn, TNextMeta> {\n return Object.freeze({\n ...(state as unknown as HookOverrideState<TNextDeps, TNextOn, TNextMeta>),\n ...patch,\n });\n}\n\nfunction makeHookOverrideBuilder<\n TDeps extends DependencyMapType,\n TOn extends HookOn,\n TMeta extends ITaskMeta,\n>(\n base: AnyHook,\n state: HookOverrideState<TDeps, TOn, TMeta>,\n): HookOverrideBuilder<TDeps, TOn, TMeta> {\n const builder: HookOverrideBuilder<TDeps, TOn, TMeta> = {\n id: state.id,\n\n order(order: number) {\n const next = cloneHookState(state, { order });\n return makeHookOverrideBuilder(base, next);\n },\n\n dependencies<\n TNewDeps extends DependencyMapType,\n TIsOverride extends boolean = false,\n >(deps: TNewDeps | (() => TNewDeps), options?: { override?: TIsOverride }) {\n type NextDeps = TIsOverride extends true ? TNewDeps : TDeps & TNewDeps;\n const override = options?.override ?? false;\n const nextDependencies = mergeDependencies<TDeps, TNewDeps>(\n state.dependencies as TDeps | (() => TDeps),\n deps,\n override,\n );\n\n const next = cloneHookState<TDeps, TOn, TMeta, NextDeps>(state, {\n dependencies: nextDependencies as unknown as NextDeps,\n });\n\n return makeHookOverrideBuilder<NextDeps, TOn, TMeta>(base, next);\n },\n\n tags<TNewTags extends TagType[]>(\n t: TNewTags,\n options?: { override?: boolean },\n ) {\n const override = options?.override ?? false;\n const next = cloneHookState(state, {\n tags: mergeArray(state.tags, t, override) as TagType[],\n });\n return makeHookOverrideBuilder(base, next);\n },\n\n meta<TNewMeta extends ITaskMeta>(m: TNewMeta) {\n const next = cloneHookState<TDeps, TOn, TMeta, TDeps, TOn, TNewMeta>(\n state as HookOverrideState<TDeps, TOn, TMeta>,\n {\n meta: m,\n },\n );\n return makeHookOverrideBuilder<TDeps, TOn, TNewMeta>(base, next);\n },\n\n run(fn) {\n const next = cloneHookState(state, { run: fn });\n return makeHookOverrideBuilder(base, next);\n },\n\n build() {\n const { id: _id, on: _on, ...patch } = state;\n return defineOverride<IHook<TDeps, TOn, TMeta>>(base, { ...patch });\n },\n };\n\n return builder;\n}\n\nexport function hookOverrideBuilder<\n TDeps extends DependencyMapType,\n TOn extends HookOn,\n TMeta extends ITaskMeta,\n>(base: IHook<TDeps, TOn, TMeta>): HookOverrideBuilder<TDeps, TOn, TMeta> {\n const initial: HookOverrideState<TDeps, TOn, TMeta> = Object.freeze({\n id: base.id,\n dependencies: base.dependencies,\n on: base.on,\n order: base.order,\n meta: base.meta,\n run: base.run,\n tags: base.tags,\n });\n\n return makeHookOverrideBuilder(base, initial);\n}\n","import type {\n DependencyMapType,\n IResource,\n IResourceDefinition,\n IResourceMeta,\n IValidationSchema,\n OverridableElements,\n ResourceInitFn,\n ResourceMiddlewareAttachmentType,\n TagType,\n} from \"../../../defs\";\nimport type { ThrowsList } from \"../../../types/error\";\nimport { normalizeThrows } from \"../../../tools/throws\";\nimport { defineOverride } from \"../../defineOverride\";\nimport type { ResourceFluentBuilder } from \"../resource/fluent-builder.interface\";\nimport type { ResolveConfig } from \"../resource/types\";\nimport {\n mergeArray,\n mergeDependencies,\n mergeRegister,\n} from \"../resource/utils\";\n\ntype AnyResource = IResource<any, any, any, any, any, any, any>;\n\ntype ResourceOverrideState<\n TConfig,\n TValue extends Promise<any>,\n TDeps extends DependencyMapType,\n TContext,\n TMeta extends IResourceMeta,\n TTags extends TagType[],\n TMiddleware extends ResourceMiddlewareAttachmentType[],\n> = Readonly<\n IResourceDefinition<\n TConfig,\n TValue,\n TDeps,\n TContext,\n any,\n any,\n TMeta,\n TTags,\n TMiddleware\n >\n>;\n\nfunction cloneResourceState<\n TConfig,\n TValue extends Promise<any>,\n TDeps extends DependencyMapType,\n TContext,\n TMeta extends IResourceMeta,\n TTags extends TagType[],\n TMiddleware extends ResourceMiddlewareAttachmentType[],\n TNextConfig = TConfig,\n TNextValue extends Promise<any> = TValue,\n TNextDeps extends DependencyMapType = TDeps,\n TNextContext = TContext,\n TNextMeta extends IResourceMeta = TMeta,\n TNextTags extends TagType[] = TTags,\n TNextMiddleware extends ResourceMiddlewareAttachmentType[] = TMiddleware,\n>(\n state: ResourceOverrideState<\n TConfig,\n TValue,\n TDeps,\n TContext,\n TMeta,\n TTags,\n TMiddleware\n >,\n patch: Partial<\n ResourceOverrideState<\n TNextConfig,\n TNextValue,\n TNextDeps,\n TNextContext,\n TNextMeta,\n TNextTags,\n TNextMiddleware\n >\n >,\n): ResourceOverrideState<\n TNextConfig,\n TNextValue,\n TNextDeps,\n TNextContext,\n TNextMeta,\n TNextTags,\n TNextMiddleware\n> {\n return Object.freeze({\n ...(state as unknown as ResourceOverrideState<\n TNextConfig,\n TNextValue,\n TNextDeps,\n TNextContext,\n TNextMeta,\n TNextTags,\n TNextMiddleware\n >),\n ...patch,\n });\n}\n\nfunction makeResourceOverrideBuilder<\n TConfig,\n TValue extends Promise<any>,\n TDeps extends DependencyMapType,\n TContext,\n TMeta extends IResourceMeta,\n TTags extends TagType[],\n TMiddleware extends ResourceMiddlewareAttachmentType[],\n>(\n base: AnyResource,\n state: ResourceOverrideState<\n TConfig,\n TValue,\n TDeps,\n TContext,\n TMeta,\n TTags,\n TMiddleware\n >,\n): ResourceFluentBuilder<\n TConfig,\n TValue,\n TDeps,\n TContext,\n TMeta,\n TTags,\n TMiddleware\n> {\n const builder: ResourceFluentBuilder<\n TConfig,\n TValue,\n TDeps,\n TContext,\n TMeta,\n TTags,\n TMiddleware\n > = {\n id: state.id,\n dependencies<\n TNewDeps extends DependencyMapType,\n TIsOverride extends boolean = false,\n >(\n deps: TNewDeps | ((config: TConfig) => TNewDeps),\n options?: { override?: TIsOverride },\n ) {\n const override = options?.override ?? false;\n const next = cloneResourceState<\n TConfig,\n TValue,\n TDeps,\n TContext,\n TMeta,\n TTags,\n TMiddleware,\n TConfig,\n TValue,\n TIsOverride extends true ? TNewDeps : TDeps & TNewDeps,\n TContext,\n TMeta,\n TTags,\n TMiddleware\n >(state, {\n dependencies: mergeDependencies(\n state.dependencies,\n deps,\n override,\n ) as unknown as TIsOverride extends true ? TNewDeps : TDeps & TNewDeps,\n });\n\n return makeResourceOverrideBuilder(base, next);\n },\n register(items, options) {\n const override = options?.override ?? false;\n const next = cloneResourceState(state, {\n register: mergeRegister(state.register, items, override),\n });\n return makeResourceOverrideBuilder(base, next);\n },\n middleware<TNewMw extends ResourceMiddlewareAttachmentType[]>(\n mw: TNewMw,\n options?: { override?: boolean },\n ) {\n const override = options?.override ?? false;\n const next = cloneResourceState<\n TConfig,\n TValue,\n TDeps,\n TContext,\n TMeta,\n TTags,\n TMiddleware,\n TConfig,\n TValue,\n TDeps,\n TContext,\n TMeta,\n TTags,\n TNewMw\n >(state, {\n middleware: mergeArray(state.middleware, mw, override) as TNewMw,\n });\n return makeResourceOverrideBuilder(base, next);\n },\n tags<TNewTags extends TagType[]>(\n tags: TNewTags,\n options?: { override?: boolean },\n ) {\n const override = options?.override ?? false;\n const next = cloneResourceState<\n TConfig,\n TValue,\n TDeps,\n TContext,\n TMeta,\n TTags,\n TMiddleware,\n TConfig,\n TValue,\n TDeps,\n TContext,\n TMeta,\n [...TTags, ...TNewTags],\n TMiddleware\n >(state, {\n tags: mergeArray(state.tags, tags, override) as unknown as [\n ...TTags,\n ...TNewTags,\n ],\n });\n return makeResourceOverrideBuilder(base, next);\n },\n context<TNewCtx>(factory: () => TNewCtx) {\n const next = cloneResourceState<\n TConfig,\n TValue,\n TDeps,\n TContext,\n TMeta,\n TTags,\n TMiddleware,\n TConfig,\n TValue,\n TDeps,\n TNewCtx,\n TMeta,\n TTags,\n TMiddleware\n >(state, { context: factory });\n return makeResourceOverrideBuilder<\n TConfig,\n TValue,\n TDeps,\n TNewCtx,\n TMeta,\n TTags,\n TMiddleware\n >(base, next);\n },\n configSchema<TNewConfig>(schema: IValidationSchema<TNewConfig>) {\n const next = cloneResourceState<\n TConfig,\n TValue,\n TDeps,\n TContext,\n TMeta,\n TTags,\n TMiddleware,\n TNewConfig,\n TValue,\n TDeps,\n TContext,\n TMeta,\n TTags,\n TMiddleware\n >(state, { configSchema: schema });\n return makeResourceOverrideBuilder<\n TNewConfig,\n TValue,\n TDeps,\n TContext,\n TMeta,\n TTags,\n TMiddleware\n >(base, next);\n },\n resultSchema<TResolved>(schema: IValidationSchema<TResolved>) {\n const next = cloneResourceState<\n TConfig,\n TValue,\n TDeps,\n TContext,\n TMeta,\n TTags,\n TMiddleware,\n TConfig,\n Promise<TResolved>,\n TDeps,\n TContext,\n TMeta,\n TTags,\n TMiddleware\n >(state, { resultSchema: schema });\n return makeResourceOverrideBuilder<\n TConfig,\n Promise<TResolved>,\n TDeps,\n TContext,\n TMeta,\n TTags,\n TMiddleware\n >(base, next);\n },\n init<TNewConfig = TConfig, TNewValue extends Promise<any> = TValue>(\n fn: ResourceInitFn<\n ResolveConfig<TConfig, TNewConfig>,\n TNewValue,\n TDeps,\n TContext,\n TMeta,\n TTags,\n TMiddleware\n >,\n ) {\n const next = cloneResourceState<\n TConfig,\n TValue,\n TDeps,\n TContext,\n TMeta,\n TTags,\n TMiddleware,\n ResolveConfig<TConfig, TNewConfig>,\n TNewValue,\n TDeps,\n TContext,\n TMeta,\n TTags,\n TMiddleware\n >(state, { init: fn });\n return makeResourceOverrideBuilder<\n ResolveConfig<TConfig, TNewConfig>,\n TNewValue,\n TDeps,\n TContext,\n TMeta,\n TTags,\n TMiddleware\n >(base, next);\n },\n dispose(\n fn: NonNullable<\n IResourceDefinition<\n TConfig,\n TValue,\n TDeps,\n TContext,\n any,\n any,\n TMeta,\n TTags,\n TMiddleware\n >[\"dispose\"]\n >,\n ) {\n const next = cloneResourceState(state, { dispose: fn });\n return makeResourceOverrideBuilder<\n TConfig,\n TValue,\n TDeps,\n TContext,\n TMeta,\n TTags,\n TMiddleware\n >(base, next);\n },\n meta<TNewMeta extends IResourceMeta>(m: TNewMeta) {\n const next = cloneResourceState<\n TConfig,\n TValue,\n TDeps,\n TContext,\n TMeta,\n TTags,\n TMiddleware,\n TConfig,\n TValue,\n TDeps,\n TContext,\n TNewMeta,\n TTags,\n TMiddleware\n >(state, { meta: m });\n return makeResourceOverrideBuilder<\n TConfig,\n TValue,\n TDeps,\n TContext,\n TNewMeta,\n TTags,\n TMiddleware\n >(base, next);\n },\n overrides(o: Array<OverridableElements>, options?: { override?: boolean }) {\n const override = options?.override ?? false;\n const next = cloneResourceState(state, {\n overrides: mergeArray(state.overrides, o, override),\n });\n return makeResourceOverrideBuilder<\n TConfig,\n TValue,\n TDeps,\n TContext,\n TMeta,\n TTags,\n TMiddleware\n >(base, next);\n },\n throws(list: ThrowsList) {\n const next = cloneResourceState(state, { throws: list });\n return makeResourceOverrideBuilder<\n TConfig,\n TValue,\n TDeps,\n TContext,\n TMeta,\n TTags,\n TMiddleware\n >(base, next);\n },\n build() {\n const normalizedThrows = normalizeThrows(\n { kind: \"resource\", id: state.id },\n state.throws,\n );\n const { id: _id, ...patch } = state;\n return defineOverride<\n IResource<TConfig, TValue, TDeps, TContext, TMeta, TTags, TMiddleware>\n >(base, { ...patch, throws: normalizedThrows });\n },\n };\n return builder;\n}\n\nexport function resourceOverrideBuilder<\n TConfig,\n TValue extends Promise<any>,\n TDeps extends DependencyMapType,\n TContext,\n TMeta extends IResourceMeta,\n TTags extends TagType[],\n TMiddleware extends ResourceMiddlewareAttachmentType[],\n>(\n base: IResource<TConfig, TValue, TDeps, TContext, TMeta, TTags, TMiddleware>,\n): ResourceFluentBuilder<\n TConfig,\n TValue,\n TDeps,\n TContext,\n TMeta,\n TTags,\n TMiddleware\n> {\n const initial: ResourceOverrideState<\n TConfig,\n TValue,\n TDeps,\n TContext,\n TMeta,\n TTags,\n TMiddleware\n > = Object.freeze({\n id: base.id,\n dependencies: base.dependencies,\n register: base.register,\n middleware: base.middleware,\n tags: base.tags,\n context: base.context,\n init: base.init,\n dispose: base.dispose,\n configSchema: base.configSchema,\n resultSchema: base.resultSchema,\n meta: base.meta,\n overrides: base.overrides,\n throws: base.throws,\n });\n\n return makeResourceOverrideBuilder(base, initial);\n}\n","import type {\n DependencyMapType,\n IMiddlewareMeta,\n IResourceMiddleware,\n IResourceMiddlewareDefinition,\n IValidationSchema,\n TagType,\n} from \"../../../defs\";\nimport { defineOverride } from \"../../defineOverride\";\nimport type { ResourceMiddlewareFluentBuilder } from \"../middleware/resource.interface\";\nimport { mergeArray, mergeDependencies } from \"../middleware/utils\";\n\ntype AnyResourceMiddleware = IResourceMiddleware<any, any, any, any>;\n\ntype ResourceMiddlewareOverrideState<\n C,\n In,\n Out,\n D extends DependencyMapType,\n> = Readonly<IResourceMiddlewareDefinition<C, In, Out, D>>;\n\nfunction cloneResourceMiddlewareState<\n C,\n In,\n Out,\n D extends DependencyMapType,\n TNextConfig = C,\n TNextIn = In,\n TNextOut = Out,\n TNextDeps extends DependencyMapType = D,\n>(\n state: ResourceMiddlewareOverrideState<C, In, Out, D>,\n patch: Partial<\n ResourceMiddlewareOverrideState<TNextConfig, TNextIn, TNextOut, TNextDeps>\n >,\n): ResourceMiddlewareOverrideState<TNextConfig, TNextIn, TNextOut, TNextDeps> {\n return Object.freeze({\n ...(state as unknown as ResourceMiddlewareOverrideState<\n TNextConfig,\n TNextIn,\n TNextOut,\n TNextDeps\n >),\n ...patch,\n });\n}\n\nfunction makeResourceMiddlewareOverrideBuilder<\n C,\n In,\n Out,\n D extends DependencyMapType,\n>(\n base: AnyResourceMiddleware,\n state: ResourceMiddlewareOverrideState<C, In, Out, D>,\n): ResourceMiddlewareFluentBuilder<C, In, Out, D> {\n const builder: ResourceMiddlewareFluentBuilder<C, In, Out, D> = {\n id: state.id,\n\n dependencies<TNewDeps extends DependencyMapType>(\n deps: TNewDeps | ((config: C) => TNewDeps),\n options?: { override?: boolean },\n ) {\n const override = options?.override ?? false;\n const nextDependencies = mergeDependencies<C, D, TNewDeps>(\n state.dependencies as D | ((config: C) => D),\n deps,\n override,\n );\n\n const next = cloneResourceMiddlewareState<C, In, Out, D & TNewDeps>(\n state as unknown as ResourceMiddlewareOverrideState<\n C,\n In,\n Out,\n D & TNewDeps\n >,\n {\n dependencies: nextDependencies as unknown as D & TNewDeps,\n },\n );\n\n if (override) {\n return makeResourceMiddlewareOverrideBuilder<C, In, Out, TNewDeps>(\n base,\n next as ResourceMiddlewareOverrideState<C, In, Out, TNewDeps>,\n );\n }\n return makeResourceMiddlewareOverrideBuilder<C, In, Out, D & TNewDeps>(\n base,\n next,\n );\n },\n\n configSchema<TNew>(schema: IValidationSchema<TNew>) {\n const next = cloneResourceMiddlewareState<TNew, In, Out, D>(\n state as unknown as ResourceMiddlewareOverrideState<TNew, In, Out, D>,\n { configSchema: schema },\n );\n return makeResourceMiddlewareOverrideBuilder<TNew, In, Out, D>(\n base,\n next,\n );\n },\n\n run(fn) {\n const next = cloneResourceMiddlewareState(state, { run: fn });\n return makeResourceMiddlewareOverrideBuilder(base, next);\n },\n\n meta<TNewMeta extends IMiddlewareMeta>(m: TNewMeta) {\n const next = cloneResourceMiddlewareState(state, { meta: m });\n return makeResourceMiddlewareOverrideBuilder(base, next);\n },\n\n tags<TNewTags extends TagType[]>(\n t: TNewTags,\n options?: { override?: boolean },\n ) {\n const override = options?.override ?? false;\n const next = cloneResourceMiddlewareState(state, {\n tags: mergeArray(state.tags, t, override) as TagType[],\n });\n return makeResourceMiddlewareOverrideBuilder(base, next);\n },\n\n everywhere(flag) {\n const next = cloneResourceMiddlewareState(state, { everywhere: flag });\n return makeResourceMiddlewareOverrideBuilder(base, next);\n },\n\n build() {\n const { id: _id, ...patch } = state;\n return defineOverride<IResourceMiddleware<C, In, Out, D>>(base, {\n ...patch,\n });\n },\n };\n\n return builder;\n}\n\nexport function resourceMiddlewareOverrideBuilder<\n C,\n In,\n Out,\n D extends DependencyMapType,\n>(\n base: IResourceMiddleware<C, In, Out, D>,\n): ResourceMiddlewareFluentBuilder<C, In, Out, D> {\n const initial: ResourceMiddlewareOverrideState<C, In, Out, D> = Object.freeze(\n {\n id: base.id,\n dependencies: base.dependencies,\n configSchema: base.configSchema,\n run: base.run,\n meta: base.meta,\n tags: base.tags,\n everywhere: base.everywhere,\n },\n );\n\n return makeResourceMiddlewareOverrideBuilder(base, initial);\n}\n","import type {\n DependencyMapType,\n DependencyValuesType,\n ITask,\n ITaskDefinition,\n ITaskMeta,\n IValidationSchema,\n TagType,\n TaskMiddlewareAttachmentType,\n} from \"../../../defs\";\nimport type { ThrowsList } from \"../../../types/error\";\nimport { normalizeThrows } from \"../../../tools/throws\";\nimport { defineOverride } from \"../../defineOverride\";\nimport type { TaskFluentBuilder } from \"../task/fluent-builder.interface\";\nimport type { ResolveInput } from \"../task/types\";\nimport { mergeArray, mergeDependencies } from \"../task/utils\";\n\ntype AnyTask = ITask<any, any, any, any, any, any>;\n\ntype TaskOverrideState<\n TInput,\n TOutput extends Promise<any>,\n TDeps extends DependencyMapType,\n TMeta extends ITaskMeta,\n TTags extends TagType[],\n TMiddleware extends TaskMiddlewareAttachmentType[],\n> = Readonly<\n ITaskDefinition<TInput, TOutput, TDeps, TMeta, TTags, TMiddleware>\n>;\n\nfunction cloneTaskState<\n TInput,\n TOutput extends Promise<any>,\n TDeps extends DependencyMapType,\n TMeta extends ITaskMeta,\n TTags extends TagType[],\n TMiddleware extends TaskMiddlewareAttachmentType[],\n TNextInput = TInput,\n TNextOutput extends Promise<any> = TOutput,\n TNextDeps extends DependencyMapType = TDeps,\n TNextMeta extends ITaskMeta = TMeta,\n TNextTags extends TagType[] = TTags,\n TNextMiddleware extends TaskMiddlewareAttachmentType[] = TMiddleware,\n>(\n state: TaskOverrideState<TInput, TOutput, TDeps, TMeta, TTags, TMiddleware>,\n patch: Partial<\n TaskOverrideState<\n TNextInput,\n TNextOutput,\n TNextDeps,\n TNextMeta,\n TNextTags,\n TNextMiddleware\n >\n >,\n): TaskOverrideState<\n TNextInput,\n TNextOutput,\n TNextDeps,\n TNextMeta,\n TNextTags,\n TNextMiddleware\n> {\n return Object.freeze({\n ...(state as unknown as TaskOverrideState<\n TNextInput,\n TNextOutput,\n TNextDeps,\n TNextMeta,\n TNextTags,\n TNextMiddleware\n >),\n ...patch,\n });\n}\n\nfunction makeTaskOverrideBuilder<\n TInput,\n TOutput extends Promise<any>,\n TDeps extends DependencyMapType,\n TMeta extends ITaskMeta,\n TTags extends TagType[],\n TMiddleware extends TaskMiddlewareAttachmentType[],\n>(\n base: AnyTask,\n state: TaskOverrideState<TInput, TOutput, TDeps, TMeta, TTags, TMiddleware>,\n): TaskFluentBuilder<TInput, TOutput, TDeps, TMeta, TTags, TMiddleware> {\n const builder: TaskFluentBuilder<\n TInput,\n TOutput,\n TDeps,\n TMeta,\n TTags,\n TMiddleware\n > = {\n id: state.id,\n dependencies<TNewDeps extends DependencyMapType>(\n deps: TNewDeps | (() => TNewDeps),\n options?: { override?: boolean },\n ) {\n const override = options?.override ?? false;\n const nextDependencies = mergeDependencies<TDeps, TNewDeps>(\n state.dependencies as TDeps | (() => TDeps),\n deps,\n override,\n );\n\n const next = cloneTaskState<\n TInput,\n TOutput,\n TDeps,\n TMeta,\n TTags,\n TMiddleware,\n TInput,\n TOutput,\n TDeps & TNewDeps,\n TMeta,\n TTags,\n TMiddleware\n >(state, {\n dependencies: nextDependencies as unknown as TDeps & TNewDeps,\n });\n\n return makeTaskOverrideBuilder(base, next);\n },\n\n middleware<TNewMw extends TaskMiddlewareAttachmentType[]>(\n mw: TNewMw,\n options?: { override?: boolean },\n ) {\n const override = options?.override ?? false;\n const next = cloneTaskState<\n TInput,\n TOutput,\n TDeps,\n TMeta,\n TTags,\n TMiddleware,\n TInput,\n TOutput,\n TDeps,\n TMeta,\n TTags,\n TNewMw\n >(state, {\n middleware: mergeArray(state.middleware, mw, override) as TNewMw,\n });\n return makeTaskOverrideBuilder(base, next);\n },\n\n tags<TNewTags extends TagType[]>(\n t: TNewTags,\n options?: { override?: boolean },\n ) {\n const override = options?.override ?? false;\n const next = cloneTaskState<\n TInput,\n TOutput,\n TDeps,\n TMeta,\n TTags,\n TMiddleware,\n TInput,\n TOutput,\n TDeps,\n TMeta,\n [...TTags, ...TNewTags],\n TMiddleware\n >(state, {\n tags: mergeArray(state.tags, t, override) as [...TTags, ...TNewTags],\n });\n return makeTaskOverrideBuilder(base, next);\n },\n\n inputSchema<TNewInput>(schema: IValidationSchema<TNewInput>) {\n const next = cloneTaskState<\n TInput,\n TOutput,\n TDeps,\n TMeta,\n TTags,\n TMiddleware,\n TNewInput,\n TOutput,\n TDeps,\n TMeta,\n TTags,\n TMiddleware\n >(state, { inputSchema: schema });\n return makeTaskOverrideBuilder<\n TNewInput,\n TOutput,\n TDeps,\n TMeta,\n TTags,\n TMiddleware\n >(base, next);\n },\n\n resultSchema<TResolved>(schema: IValidationSchema<TResolved>) {\n const next = cloneTaskState<\n TInput,\n TOutput,\n TDeps,\n TMeta,\n TTags,\n TMiddleware,\n TInput,\n Promise<TResolved>,\n TDeps,\n TMeta,\n TTags,\n TMiddleware\n >(state, { resultSchema: schema });\n return makeTaskOverrideBuilder<\n TInput,\n Promise<TResolved>,\n TDeps,\n TMeta,\n TTags,\n TMiddleware\n >(base, next);\n },\n\n run<TNewInput = TInput, TNewOutput extends Promise<any> = TOutput>(\n fn: NonNullable<\n ITaskDefinition<\n ResolveInput<TInput, TNewInput>,\n TNewOutput,\n TDeps,\n TMeta,\n TTags,\n TMiddleware\n >[\"run\"]\n >,\n ) {\n const wrapped = (input: unknown, deps: unknown) =>\n fn(\n input as ResolveInput<TInput, TNewInput>,\n deps as unknown as DependencyValuesType<TDeps>,\n );\n\n const next = cloneTaskState<\n TInput,\n TOutput,\n TDeps,\n TMeta,\n TTags,\n TMiddleware,\n ResolveInput<TInput, TNewInput>,\n TNewOutput,\n TDeps,\n TMeta,\n TTags,\n TMiddleware\n >(state, { run: wrapped });\n return makeTaskOverrideBuilder<\n ResolveInput<TInput, TNewInput>,\n TNewOutput,\n TDeps,\n TMeta,\n TTags,\n TMiddleware\n >(base, next);\n },\n\n meta<TNewMeta extends ITaskMeta>(m: TNewMeta) {\n const next = cloneTaskState<\n TInput,\n TOutput,\n TDeps,\n TMeta,\n TTags,\n TMiddleware,\n TInput,\n TOutput,\n TDeps,\n TNewMeta,\n TTags,\n TMiddleware\n >(state, { meta: m });\n return makeTaskOverrideBuilder<\n TInput,\n TOutput,\n TDeps,\n TNewMeta,\n TTags,\n TMiddleware\n >(base, next);\n },\n\n throws(list: ThrowsList) {\n const next = cloneTaskState(state, { throws: list });\n return makeTaskOverrideBuilder<\n TInput,\n TOutput,\n TDeps,\n TMeta,\n TTags,\n TMiddleware\n >(base, next);\n },\n\n build() {\n const normalizedThrows = normalizeThrows(\n { kind: \"task\", id: state.id },\n state.throws,\n );\n const { id: _id, ...patch } = state;\n return defineOverride<\n ITask<TInput, TOutput, TDeps, TMeta, TTags, TMiddleware>\n >(base, { ...patch, throws: normalizedThrows });\n },\n };\n\n return builder;\n}\n\nexport function taskOverrideBuilder<\n TInput,\n TOutput extends Promise<any>,\n TDeps extends DependencyMapType,\n TMeta extends ITaskMeta,\n TTags extends TagType[],\n TMiddleware extends TaskMiddlewareAttachmentType[],\n>(\n base: ITask<TInput, TOutput, TDeps, TMeta, TTags, TMiddleware>,\n): TaskFluentBuilder<TInput, TOutput, TDeps, TMeta, TTags, TMiddleware> {\n const initial: TaskOverrideState<\n TInput,\n TOutput,\n TDeps,\n TMeta,\n TTags,\n TMiddleware\n > = Object.freeze({\n id: base.id,\n dependencies: base.dependencies,\n middleware: base.middleware,\n inputSchema: base.inputSchema,\n resultSchema: base.resultSchema,\n throws: base.throws,\n run: base.run,\n tags: base.tags,\n meta: base.meta,\n });\n\n return makeTaskOverrideBuilder(base, initial);\n}\n","import type {\n DependencyMapType,\n IMiddlewareMeta,\n ITaskMiddleware,\n ITaskMiddlewareDefinition,\n IValidationSchema,\n TagType,\n} from \"../../../defs\";\nimport { defineOverride } from \"../../defineOverride\";\nimport type { TaskMiddlewareFluentBuilder } from \"../middleware/task.interface\";\nimport { mergeArray, mergeDependencies } from \"../middleware/utils\";\n\ntype AnyTaskMiddleware = ITaskMiddleware<any, any, any, any>;\n\ntype TaskMiddlewareOverrideState<\n C,\n In,\n Out,\n D extends DependencyMapType,\n> = Readonly<ITaskMiddlewareDefinition<C, In, Out, D>>;\n\nfunction cloneTaskMiddlewareState<\n C,\n In,\n Out,\n D extends DependencyMapType,\n TNextConfig = C,\n TNextIn = In,\n TNextOut = Out,\n TNextDeps extends DependencyMapType = D,\n>(\n state: TaskMiddlewareOverrideState<C, In, Out, D>,\n patch: Partial<\n TaskMiddlewareOverrideState<TNextConfig, TNextIn, TNextOut, TNextDeps>\n >,\n): TaskMiddlewareOverrideState<TNextConfig, TNextIn, TNextOut, TNextDeps> {\n return Object.freeze({\n ...(state as unknown as TaskMiddlewareOverrideState<\n TNextConfig,\n TNextIn,\n TNextOut,\n TNextDeps\n >),\n ...patch,\n });\n}\n\nfunction makeTaskMiddlewareOverrideBuilder<\n C,\n In,\n Out,\n D extends DependencyMapType,\n>(\n base: AnyTaskMiddleware,\n state: TaskMiddlewareOverrideState<C, In, Out, D>,\n): TaskMiddlewareFluentBuilder<C, In, Out, D> {\n const builder: TaskMiddlewareFluentBuilder<C, In, Out, D> = {\n id: state.id,\n\n dependencies<TNewDeps extends DependencyMapType>(\n deps: TNewDeps | ((config: C) => TNewDeps),\n options?: { override?: boolean },\n ) {\n const override = options?.override ?? false;\n const nextDependencies = mergeDependencies<C, D, TNewDeps>(\n state.dependencies as D | ((config: C) => D),\n deps,\n override,\n );\n\n const next = cloneTaskMiddlewareState<C, In, Out, D & TNewDeps>(\n state as unknown as TaskMiddlewareOverrideState<\n C,\n In,\n Out,\n D & TNewDeps\n >,\n {\n dependencies: nextDependencies as unknown as D & TNewDeps,\n },\n );\n\n if (override) {\n return makeTaskMiddlewareOverrideBuilder<C, In, Out, TNewDeps>(\n base,\n next as TaskMiddlewareOverrideState<C, In, Out, TNewDeps>,\n );\n }\n return makeTaskMiddlewareOverrideBuilder<C, In, Out, D & TNewDeps>(\n base,\n next,\n );\n },\n\n configSchema<TNew>(schema: IValidationSchema<TNew>) {\n const next = cloneTaskMiddlewareState<TNew, In, Out, D>(\n state as unknown as TaskMiddlewareOverrideState<TNew, In, Out, D>,\n { configSchema: schema },\n );\n return makeTaskMiddlewareOverrideBuilder<TNew, In, Out, D>(base, next);\n },\n\n run(fn) {\n const next = cloneTaskMiddlewareState(state, { run: fn });\n return makeTaskMiddlewareOverrideBuilder(base, next);\n },\n\n meta<TNewMeta extends IMiddlewareMeta>(m: TNewMeta) {\n const next = cloneTaskMiddlewareState(state, { meta: m });\n return makeTaskMiddlewareOverrideBuilder(base, next);\n },\n\n tags<TNewTags extends TagType[]>(\n t: TNewTags,\n options?: { override?: boolean },\n ) {\n const override = options?.override ?? false;\n const next = cloneTaskMiddlewareState(state, {\n tags: mergeArray(state.tags, t, override) as TagType[],\n });\n return makeTaskMiddlewareOverrideBuilder(base, next);\n },\n\n everywhere(flag) {\n const next = cloneTaskMiddlewareState(state, { everywhere: flag });\n return makeTaskMiddlewareOverrideBuilder(base, next);\n },\n\n build() {\n const { id: _id, ...patch } = state;\n return defineOverride<ITaskMiddleware<C, In, Out, D>>(base, { ...patch });\n },\n };\n\n return builder;\n}\n\nexport function taskMiddlewareOverrideBuilder<\n C,\n In,\n Out,\n D extends DependencyMapType,\n>(\n base: ITaskMiddleware<C, In, Out, D>,\n): TaskMiddlewareFluentBuilder<C, In, Out, D> {\n const initial: TaskMiddlewareOverrideState<C, In, Out, D> = Object.freeze({\n id: base.id,\n dependencies: base.dependencies,\n configSchema: base.configSchema,\n run: base.run,\n meta: base.meta,\n tags: base.tags,\n everywhere: base.everywhere,\n });\n\n return makeTaskMiddlewareOverrideBuilder(base, initial);\n}\n","import type {\n DependencyMapType,\n IHook,\n IResource,\n IResourceMeta,\n IResourceMiddleware,\n ITask,\n ITaskMeta,\n ITaskMiddleware,\n ResourceMiddlewareAttachmentType,\n TagType,\n TaskMiddlewareAttachmentType,\n} from \"../../../defs\";\nimport {\n isHook,\n isResource,\n isResourceMiddleware,\n isTask,\n isTaskMiddleware,\n} from \"../../tools\";\nimport type { ResourceFluentBuilder } from \"../resource/fluent-builder.interface\";\nimport type { TaskFluentBuilder } from \"../task/fluent-builder.interface\";\nimport type { ResourceMiddlewareFluentBuilder } from \"../middleware/resource.interface\";\nimport type { TaskMiddlewareFluentBuilder } from \"../middleware/task.interface\";\nimport type { HookOn, HookOverrideBuilder } from \"./hook\";\nimport { hookOverrideBuilder } from \"./hook\";\nimport { resourceOverrideBuilder } from \"./resource\";\nimport { resourceMiddlewareOverrideBuilder } from \"./resource-middleware\";\nimport { taskOverrideBuilder } from \"./task\";\nimport { taskMiddlewareOverrideBuilder } from \"./task-middleware\";\n\nenum OverrideBuilderErrorMessage {\n UnsupportedBase = \"r.override() supports tasks, resources, hooks, and middleware only.\",\n}\n\ntype OverrideBuilderBase =\n | ITask<any, any, any, any, any, any>\n | IResource<any, any, any, any, any, any, any>\n | IHook<any, any, any>\n | ITaskMiddleware<any, any, any, any>\n | IResourceMiddleware<any, any, any, any>;\n\nexport function override<\n TInput,\n TOutput extends Promise<any>,\n TDeps extends DependencyMapType,\n TMeta extends ITaskMeta,\n TTags extends TagType[],\n TMiddleware extends TaskMiddlewareAttachmentType[],\n>(\n base: ITask<TInput, TOutput, TDeps, TMeta, TTags, TMiddleware>,\n): TaskFluentBuilder<TInput, TOutput, TDeps, TMeta, TTags, TMiddleware>;\nexport function override<\n TConfig,\n TValue extends Promise<any>,\n TDeps extends DependencyMapType,\n TContext,\n TMeta extends IResourceMeta,\n TTags extends TagType[],\n TMiddleware extends ResourceMiddlewareAttachmentType[],\n>(\n base: IResource<TConfig, TValue, TDeps, TContext, TMeta, TTags, TMiddleware>,\n): ResourceFluentBuilder<\n TConfig,\n TValue,\n TDeps,\n TContext,\n TMeta,\n TTags,\n TMiddleware\n>;\nexport function override<\n TDeps extends DependencyMapType,\n TOn extends HookOn,\n TMeta extends ITaskMeta,\n>(base: IHook<TDeps, TOn, TMeta>): HookOverrideBuilder<TDeps, TOn, TMeta>;\nexport function override<C, In, Out, D extends DependencyMapType>(\n base: ITaskMiddleware<C, In, Out, D>,\n): TaskMiddlewareFluentBuilder<C, In, Out, D>;\nexport function override<C, In, Out, D extends DependencyMapType>(\n base: IResourceMiddleware<C, In, Out, D>,\n): ResourceMiddlewareFluentBuilder<C, In, Out, D>;\nexport function override(base: OverrideBuilderBase) {\n if (isTask(base)) {\n return taskOverrideBuilder(base);\n }\n if (isResource(base)) {\n return resourceOverrideBuilder(base);\n }\n if (isHook(base)) {\n return hookOverrideBuilder(base);\n }\n if (isTaskMiddleware(base)) {\n return taskMiddlewareOverrideBuilder(base);\n }\n if (isResourceMiddleware(base)) {\n return resourceMiddlewareOverrideBuilder(base);\n }\n throw new Error(OverrideBuilderErrorMessage.UnsupportedBase);\n}\n","import {\n defineTask,\n defineResource,\n defineEvent,\n defineTaskMiddleware,\n defineResourceMiddleware,\n defineTag,\n defineOverride,\n defineHook,\n} from \"./define\";\nimport {\n defineAsyncContext,\n createContext as oldCreateContext,\n} from \"./definers/defineAsyncContext\";\nimport { globalEvents } from \"./globals/globalEvents\";\nimport { globalResources } from \"./globals/globalResources\";\nimport { globalMiddlewares } from \"./globals/globalMiddleware\";\nimport { globalTags } from \"./globals/globalTags\";\nimport { debug } from \"./globals/debug\";\nimport { run } from \"./run\";\nimport { tunnels } from \"./globals/tunnels\";\nimport { createTestResource } from \"./testing\";\nimport { resource as resourceFn } from \"./definers/builders/resource\";\nimport { task as taskFn } from \"./definers/builders/task\";\nimport { event as eventFn } from \"./definers/builders/event\";\nimport { hook as hookFn } from \"./definers/builders/hook\";\nimport {\n taskMiddleware as taskMiddlewareFn,\n resourceMiddleware as resourceMiddlewareFn,\n} from \"./definers/builders/middleware\";\nimport { tag as tagFn } from \"./definers/builders/tag\";\nimport { error as errorFn } from \"./definers/builders/error\";\nimport { asyncContext as asyncContextFn } from \"./definers/builders/asyncContext\";\nimport { override as overrideBuilder } from \"./definers/builders/override\";\n\nconst globals = {\n events: globalEvents,\n resources: globalResources,\n middleware: globalMiddlewares,\n tags: globalTags,\n tunnels,\n debug,\n};\n\nexport { globals };\nexport {\n defineTask as task,\n defineResource as resource,\n defineEvent as event,\n defineTaskMiddleware as taskMiddleware,\n defineResourceMiddleware as resourceMiddleware,\n defineAsyncContext as asyncContext,\n defineTag as tag,\n defineOverride as override,\n defineHook as hook,\n run,\n createTestResource,\n};\n\n// Legacy alias accepted in tests; with optional id support\nconst createContext = oldCreateContext;\nexport { createContext };\n\n// Expose only a single namespace `r` that contains all builder entry points\nexport const r = Object.freeze({\n resource: resourceFn,\n task: taskFn,\n event: eventFn,\n hook: hookFn,\n tag: tagFn,\n override: overrideBuilder,\n asyncContext: asyncContextFn,\n error: errorFn,\n middleware: Object.freeze({\n task: taskMiddlewareFn,\n resource: resourceMiddlewareFn,\n }),\n});\n\nexport * as definitions from \"./defs\";\nexport * from \"./models\";\nexport * from \"./globals/types\";\nexport * as Errors from \"./errors\";\nexport { PlatformAdapter, setPlatform } from \"./platform\";\nexport { RunnerError } from \"./definers/defineError\";\n\n// HTTP and tunnel functionality\nexport * from \"./http-client\";\nexport * from \"./http-fetch-tunnel.resource\";\n\nexport {\n Serializer,\n SymbolPolicy,\n SymbolPolicyErrorMessage,\n} from \"./serializer\";\n\n// ExecutionJournal for per-execution state sharing\nexport { journal } from \"./models/ExecutionJournal\";\n"]}
|