@bluelibs/runner 5.3.0 → 5.5.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 +23 -22
- package/dist/browser/index.cjs +6159 -3049
- package/dist/browser/index.cjs.map +1 -1
- package/dist/browser/index.mjs +6157 -3046
- package/dist/browser/index.mjs.map +1 -1
- package/dist/edge/index.cjs +6159 -3049
- package/dist/edge/index.cjs.map +1 -1
- package/dist/edge/index.mjs +6157 -3046
- package/dist/edge/index.mjs.map +1 -1
- package/dist/node/node.cjs +10843 -10814
- package/dist/node/node.cjs.map +1 -1
- package/dist/node/node.mjs +10801 -10770
- package/dist/node/node.mjs.map +1 -1
- package/dist/types/definers/builders/asyncContext/fluent-builder.interface.d.ts +4 -0
- package/dist/types/definers/builders/error/fluent-builder.interface.d.ts +8 -1
- package/dist/types/definers/builders/error/index.d.ts +1 -0
- package/dist/types/definers/builders/error/types.d.ts +2 -1
- package/dist/types/definers/builders/error/utils.d.ts +1 -0
- package/dist/types/definers/builders/event/fluent-builder.interface.d.ts +10 -0
- package/dist/types/definers/builders/event/utils.d.ts +1 -4
- package/dist/types/definers/builders/hook/fluent-builder.interface.d.ts +3 -0
- package/dist/types/definers/builders/hook/types.d.ts +3 -0
- package/dist/types/definers/builders/hook/utils.d.ts +1 -4
- package/dist/types/definers/builders/middleware/index.d.ts +4 -2
- package/dist/types/definers/builders/middleware/resource.interface.d.ts +7 -0
- package/dist/types/definers/builders/middleware/task.interface.d.ts +7 -0
- package/dist/types/definers/builders/middleware/types.d.ts +22 -3
- package/dist/types/definers/builders/middleware/utils.d.ts +3 -4
- package/dist/types/definers/builders/override/hook.d.ts +3 -0
- package/dist/types/definers/builders/override/index.d.ts +5 -0
- package/dist/types/definers/builders/resource/fluent-builder.interface.d.ts +15 -0
- package/dist/types/definers/builders/resource/index.d.ts +0 -1
- package/dist/types/definers/builders/resource/types.d.ts +1 -0
- package/dist/types/definers/builders/resource/utils.d.ts +1 -4
- package/dist/types/definers/builders/shared/mergeUtils.d.ts +5 -0
- package/dist/types/definers/builders/tag/fluent-builder.interface.d.ts +4 -0
- package/dist/types/definers/builders/tag/utils.d.ts +1 -0
- package/dist/types/definers/builders/task/fluent-builder.interface.d.ts +4 -0
- package/dist/types/definers/builders/task/index.d.ts +2 -2
- package/dist/types/definers/builders/task/utils.d.ts +1 -4
- package/dist/types/definers/builders/utils.d.ts +7 -2
- package/dist/types/definers/defineError.d.ts +12 -2
- package/dist/types/definers/resourceFork.d.ts +3 -1
- package/dist/types/definers/tools.d.ts +12 -12
- package/dist/types/errors/domain-error-ids.d.ts +44 -0
- package/dist/types/errors/domain-runtime.errors.d.ts +136 -0
- package/dist/types/errors/foundation.errors.d.ts +125 -0
- package/dist/types/errors/generic.errors.d.ts +1 -0
- package/dist/types/errors/model-runtime.errors.d.ts +20 -0
- package/dist/types/errors.d.ts +5 -74
- package/dist/types/globals/cron/cron-parser.d.ts +4 -0
- package/dist/types/globals/cron/cron.errors.d.ts +8 -0
- package/dist/types/globals/cron/cron.resource.d.ts +12 -0
- package/dist/types/globals/cron/cron.tag.d.ts +2 -0
- package/dist/types/globals/cron/types.d.ts +25 -0
- package/dist/types/globals/globalMiddleware.d.ts +87 -13
- package/dist/types/globals/globalResources.d.ts +110 -24
- package/dist/types/globals/globalTags.d.ts +10 -2
- package/dist/types/globals/middleware/cache.middleware.d.ts +173 -13
- package/dist/types/globals/middleware/circuitBreaker.middleware.d.ts +5 -1
- package/dist/types/globals/middleware/concurrency.middleware.d.ts +3 -0
- package/dist/types/globals/middleware/fallback.middleware.d.ts +8 -1
- package/dist/types/globals/middleware/rateLimit.middleware.d.ts +4 -1
- package/dist/types/globals/middleware/retry.middleware.d.ts +5 -0
- package/dist/types/globals/middleware/temporal.middleware.d.ts +19 -19
- package/dist/types/globals/middleware/timeout.middleware.d.ts +4 -1
- package/dist/types/globals/resources/eventManager.resource.d.ts +2 -0
- package/dist/types/globals/resources/logger.resource.d.ts +2 -0
- package/dist/types/globals/resources/middlewareManager.resource.d.ts +2 -0
- package/dist/types/globals/resources/queue.resource.d.ts +2 -0
- package/dist/types/globals/resources/runtime.resource.d.ts +2 -0
- package/dist/types/globals/resources/serializer.resource.d.ts +2 -0
- package/dist/types/globals/resources/store.resource.d.ts +2 -0
- package/dist/types/globals/resources/taskRunner.resource.d.ts +2 -0
- package/dist/types/globals/resources/tunnel/plan.d.ts +6 -3
- package/dist/types/globals/resources/tunnel/tunnel.policy.tag.d.ts +2 -0
- package/dist/types/globals/resources/tunnel/types.d.ts +7 -2
- package/dist/types/globals/types.d.ts +6 -1
- package/dist/types/models/BuiltinsRegistry.d.ts +2 -0
- package/dist/types/models/DependencyProcessor.d.ts +27 -6
- package/dist/types/models/EventManager.d.ts +9 -9
- package/dist/types/models/LogPrinter.d.ts +5 -5
- package/dist/types/models/Logger.d.ts +16 -16
- package/dist/types/models/MiddlewareManager.d.ts +20 -2
- package/dist/types/models/OverrideManager.d.ts +4 -1
- package/dist/types/models/Queue.d.ts +2 -0
- package/dist/types/models/RunResult.d.ts +290 -26
- package/dist/types/models/Store.d.ts +29 -12
- package/dist/types/models/StoreRegistry.d.ts +16 -13
- package/dist/types/models/StoreValidator.d.ts +2 -0
- package/dist/types/models/TaskRunner.d.ts +3 -1
- package/dist/types/models/VisibilityTracker.d.ts +75 -0
- package/dist/types/models/dependency-processor/DependencyExtractor.d.ts +23 -0
- package/dist/types/models/dependency-processor/HookEventBuffer.d.ts +15 -0
- package/dist/types/models/dependency-processor/ResourceScheduler.d.ts +10 -0
- package/dist/types/models/event/EmissionExecutor.d.ts +5 -4
- package/dist/types/models/event/ListenerRegistry.d.ts +2 -0
- package/dist/types/models/index.d.ts +1 -3
- package/dist/types/models/middleware/InterceptorRegistry.d.ts +13 -4
- package/dist/types/models/middleware/ResourceMiddlewareComposer.d.ts +3 -2
- package/dist/types/models/middleware/ValidationHelper.d.ts +3 -6
- package/dist/types/models/utils/buildDependencyGraph.d.ts +12 -0
- package/dist/types/models/utils/dependencyStrategies.d.ts +15 -0
- package/dist/types/models/utils/disposeOrder.d.ts +11 -0
- package/dist/types/models/utils/resourceDependencyIds.d.ts +1 -0
- package/dist/types/node/durable/bus/MemoryEventBus.d.ts +10 -1
- package/dist/types/node/durable/bus/NoopEventBus.d.ts +1 -1
- package/dist/types/node/durable/bus/RedisEventBus.d.ts +8 -2
- package/dist/types/node/durable/core/CronParser.d.ts +2 -13
- package/dist/types/node/durable/core/DurableResource.d.ts +15 -32
- package/dist/types/node/durable/core/DurableService.d.ts +1 -0
- package/dist/types/node/durable/core/DurableWorker.d.ts +4 -2
- package/dist/types/node/durable/core/createRunnerDurableRuntime.d.ts +2 -0
- package/dist/types/node/durable/core/interfaces/bus.d.ts +1 -1
- package/dist/types/node/durable/core/interfaces/resource.d.ts +61 -0
- package/dist/types/node/durable/core/interfaces/service.d.ts +2 -0
- package/dist/types/node/durable/core/interfaces/store.d.ts +5 -0
- package/dist/types/node/durable/core/managers/ExecutionManager.d.ts +1 -0
- package/dist/types/node/durable/core/managers/PollingManager.d.ts +3 -1
- package/dist/types/node/durable/core/resource.d.ts +6 -5
- package/dist/types/node/durable/core/utils.d.ts +11 -1
- package/dist/types/node/durable/queue/RabbitMQQueue.d.ts +4 -0
- package/dist/types/node/durable/resources/memoryDurableResource.d.ts +7 -5
- package/dist/types/node/durable/resources/redisDurableResource.d.ts +7 -5
- package/dist/types/node/durable/store/MemoryStore.d.ts +2 -0
- package/dist/types/node/durable/store/RedisStore.d.ts +1 -0
- package/dist/types/node/durable/tags/durableWorkflow.tag.d.ts +6 -1
- package/dist/types/node/exposure/allowList.d.ts +2 -1
- package/dist/types/node/exposure/handlers/contextWrapper.d.ts +6 -2
- package/dist/types/node/exposure/handlers/errorHandlers.d.ts +1 -0
- package/dist/types/node/exposure/handlers/eventHandler.d.ts +1 -0
- package/dist/types/node/exposure/handlers/taskHandler.d.ts +3 -1
- package/dist/types/node/exposure/logging.d.ts +1 -0
- package/dist/types/node/exposure/requestContext.d.ts +1 -1
- package/dist/types/node/exposure/requestHandlers.d.ts +3 -1
- package/dist/types/node/exposure/requestIdentity.d.ts +3 -0
- package/dist/types/node/exposure/resource.d.ts +7 -7
- package/dist/types/node/exposure/resourceTypes.d.ts +6 -0
- package/dist/types/node/exposure/serverLifecycle.d.ts +2 -0
- package/dist/types/node/http/http-mixed-client.factory.resource.d.ts +1 -1
- package/dist/types/node/http/http-smart-client.factory.resource.d.ts +1 -1
- package/dist/types/node/node.d.ts +1 -184
- package/dist/types/node/tunnel/allowlist.d.ts +10 -1
- package/dist/types/platform/adapters/browser.d.ts +1 -1
- package/dist/types/platform/adapters/edge.d.ts +17 -0
- package/dist/types/platform/adapters/node-als.d.ts +1 -1
- package/dist/types/platform/adapters/node.d.ts +1 -1
- package/dist/types/platform/adapters/universal-generic.d.ts +5 -2
- package/dist/types/platform/adapters/universal.d.ts +1 -1
- package/dist/types/platform/index.d.ts +3 -2
- package/dist/types/platform/types.d.ts +8 -2
- package/dist/types/public.d.ts +376 -20
- package/dist/types/run.d.ts +17 -1
- package/dist/types/serializer/Serializer.d.ts +1 -41
- package/dist/types/serializer/errors.d.ts +8 -0
- package/dist/types/serializer/marker-key-escapes.d.ts +2 -0
- package/dist/types/serializer/serialize-utils.d.ts +1 -1
- package/dist/types/serializer/type-registry.d.ts +0 -1
- package/dist/types/serializer/types.d.ts +7 -6
- package/dist/types/testing.d.ts +1 -0
- package/dist/types/tools/LockableMap.d.ts +20 -0
- package/dist/types/tools/getAllThrows.d.ts +13 -0
- package/dist/types/tools/throws.d.ts +1 -1
- package/dist/types/types/error.d.ts +25 -2
- package/dist/types/types/event.d.ts +35 -0
- package/dist/types/types/hook.d.ts +8 -0
- package/dist/types/types/resource.d.ts +13 -1
- package/dist/types/types/resourceMiddleware.d.ts +8 -0
- package/dist/types/types/runner.d.ts +56 -0
- package/dist/types/types/storeTypes.d.ts +5 -1
- package/dist/types/types/symbols.d.ts +1 -1
- package/dist/types/types/tag.d.ts +1 -0
- package/dist/types/types/tagged.d.ts +2 -2
- package/dist/types/types/task.d.ts +3 -3
- package/dist/types/types/taskMiddleware.d.ts +8 -0
- package/dist/types/types/utilities.d.ts +25 -3
- package/dist/ui/assets/index-B4lZaXFJ.js +141 -0
- package/dist/ui/assets/index-Y_9aLumt.css +1 -0
- package/dist/ui/index.html +2 -3
- package/dist/universal/index.cjs +6159 -3049
- package/dist/universal/index.cjs.map +1 -1
- package/dist/universal/index.mjs +6157 -3046
- package/dist/universal/index.mjs.map +1 -1
- package/package.json +18 -15
- package/readmes/AI.md +181 -45
- package/dist/ui/assets/index-2cb8f39f.js +0 -141
- package/dist/ui/assets/index-b1f988bf.css +0 -1
- /package/dist/types/{tunnels → tools}/buildUniversalManifest.d.ts +0 -0
- /package/dist/types/{processHooks.d.ts → tools/processShutdownHooks.d.ts} +0 -0
|
@@ -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","isValidHttpCode","assertHttpCode","store","deps","mapRegisterItems","task","SymbolPolicy","SymbolPolicyErrorMessage","tag","serializedPayload","shouldExcludeCurrentType","hasOwn","serializer","LRUCache","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.cjs","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"]}
|
|
1
|
+
{"version":3,"sources":["../../src/types/symbols.ts","../../src/errors.ts","../../src/tools/getCallerFile.ts","../../src/definers/defineError.ts","../../src/definers/builders/shared/mergeUtils.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/globals/resources/tunnel/error-utils.ts","../../src/platform/adapters/universal-generic.ts","../../src/platform/adapters/universal.ts","../../src/platform/factory.ts","../../src/platform/index.ts","../../src/errors/foundation.errors.ts","../../src/errors/model-runtime.errors.ts","../../src/errors/domain-error-ids.ts","../../src/errors/domain-runtime.errors.ts","../../src/errors/generic.errors.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/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/errors.ts","../../src/serializer/binary-builtins.ts","../../src/serializer/error-url-builtins.ts","../../src/serializer/special-values.ts","../../src/serializer/builtins.ts","../../src/serializer/regexp-validator.ts","../../src/serializer/type-registry.ts","../../src/serializer/validation.ts","../../src/serializer/serialize-utils.ts","../../src/serializer/graph-serializer.ts","../../src/serializer/marker-key-escapes.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/globalEvents.ts","../../src/models/ExecutionJournal.ts","../../src/models/utils/safeStringify.ts","../../src/globals/middleware/cache.middleware.ts","../../src/globals/cron/cron.errors.ts","../../src/globals/cron/types.ts","../../src/globals/cron/cron.tag.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/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/globals/resources/logger.resource.ts","../../src/globals/resources/store.resource.ts","../../src/globals/resources/taskRunner.resource.ts","../../src/globals/cron/cron-parser.ts","../../src/globals/cron/cron.resource.ts","../../src/models/Queue.ts","../../src/globals/resources/queue.resource.ts","../../src/globals/resources/runtime.resource.ts","../../src/globals/resources/tunnel/protocol.ts","../../src/http-fetch-tunnel.resource.ts","../../src/tools/buildUniversalManifest.ts","../../src/http-client.ts","../../src/globals/resources/httpClientFactory.resource.ts","../../src/globals/resources/debug/types.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/middlewareManager.resource.ts","../../src/globals/resources/debug/middleware.hook.ts","../../src/globals/resources/eventManager.resource.ts","../../src/globals/resources/debug/hook.hook.ts","../../src/globals/resources/debug/debug.resource.ts","../../src/globals/resources/serializer.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/debug.ts","../../src/models/TaskRunner.ts","../../src/models/ResourceInitializer.ts","../../src/models/LogPrinter.ts","../../src/models/Logger.ts","../../src/models/utils/dependencyStrategies.ts","../../src/models/dependency-processor/DependencyExtractor.ts","../../src/models/dependency-processor/HookEventBuffer.ts","../../src/models/utils/resourceDependencyIds.ts","../../src/models/dependency-processor/ResourceScheduler.ts","../../src/models/DependencyProcessor.ts","../../src/models/utils/findCircularDependencies.ts","../../src/models/StoreValidator.ts","../../src/models/utils/buildDependencyGraph.ts","../../src/tools/LockableMap.ts","../../src/models/VisibilityTracker.ts","../../src/models/StoreRegistry.ts","../../src/models/OverrideManager.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/utils/disposeOrder.ts","../../src/tools/getAllThrows.ts","../../src/globals/middleware/tunnel.middleware.ts","../../src/models/BuiltinsRegistry.ts","../../src/models/Store.ts","../../src/tools/processShutdownHooks.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":["id","error","override","isValidHttpCode","assertHttpCode","event","RunnerErrorId","RunnerMode","ResourceInitMode","HookDependencyState","deps","mapRegisterItems","task","SymbolPolicyErrorMessage","validationError","tag","serializedPayload","shouldExcludeCurrentType","hasOwn","LRUCache","cacheFactoryTask","journal","CronOnError","journalKeys","platform","hook","CronExpressionParser","r","debugConfig","resource","toError","storeResource","exports","globalMiddlewares","i","next","remotePayload","debug","clone","e","a","mergeDependencies","createContext"],"mappings":"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","file":"index.cjs","sourcesContent":["/**\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 (throws when unrouted; 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","export * from \"./errors/foundation.errors\";\nexport * from \"./errors/model-runtime.errors\";\nexport * from \"./errors/domain-error-ids\";\nexport * from \"./errors/domain-runtime.errors\";\nexport * from \"./errors/generic.errors\";\n\nexport type { IErrorHelper } from \"./types/error\";\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 let frames: NodeJS.CallSite[] = [];\n Error.prepareStackTrace = (_err, stackTrace) => {\n frames = stackTrace;\n // Keep stack string materialization deterministic; callers never use it.\n return \"\";\n };\n // Trigger stack generation so prepareStackTrace captures frames.\n void err.stack;\n const stack = [...frames];\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","import {\n DefaultErrorType,\n ErrorThrowArgs,\n IErrorDefinition,\n IErrorHelper,\n IErrorDefinitionFinal,\n} from \"../types/error\";\nimport type { IErrorMeta } from \"../types/meta\";\nimport type { TagType } from \"../types/tag\";\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 RunnerError(\n \"runner.errors.error.invalidHttpCode\",\n `Error httpCode must be an integer between 100 and 599. Received: ${value}`,\n { value },\n );\n }\n};\n\nexport const matchesRunnerErrorData = <\n TData extends DefaultErrorType = DefaultErrorType,\n>(\n data: TData,\n partialData?: Partial<TData>,\n): boolean => {\n if (partialData === undefined) {\n return true;\n }\n\n for (const [key, value] of Object.entries(partialData)) {\n if (data[key] !== value) {\n return false;\n }\n }\n\n return true;\n};\n\nconst isObjectRecord = (value: unknown): value is Record<string, unknown> =>\n value !== null && typeof value === \"object\";\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 get tags(): TagType[] {\n return this.definition.tags ?? [];\n }\n get meta(): IErrorMeta {\n return this.definition.meta ?? {};\n }\n private buildRunnerError(...args: ErrorThrowArgs<TData>): RunnerError<TData> {\n const data = (args[0] ?? ({} as TData)) as TData;\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 return new RunnerError(\n this.definition.id,\n message,\n parsed,\n this.definition.httpCode,\n remediation,\n );\n }\n [\"new\"](...args: ErrorThrowArgs<TData>): RunnerError<TData> {\n return this.buildRunnerError(...args);\n }\n /** @deprecated use .new() or .throw() for better DX */\n create(...args: ErrorThrowArgs<TData>): RunnerError<TData> {\n return this[\"new\"](...args);\n }\n throw(...args: ErrorThrowArgs<TData>): never {\n throw this.buildRunnerError(...args);\n }\n is(error: unknown): error is RunnerError<TData>;\n is(error: unknown, partialData: Partial<TData>): error is RunnerError<TData>;\n is(error: unknown, partialData?: unknown): error is RunnerError<TData> {\n const safePartialData = isObjectRecord(partialData)\n ? (partialData as Partial<TData>)\n : undefined;\n\n return (\n error instanceof RunnerError &&\n error.name === this.definition.id &&\n matchesRunnerErrorData(error.data, safePartialData)\n );\n }\n optional() {\n return {\n inner: this 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","/**\n * Shared builder utility: merges arrays with override support.\n * When `override` is true, returns only the addition; otherwise concatenates.\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 { 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\nexport { mergeArray } from \"../shared/mergeUtils\";\n","import type { DefaultErrorType, IErrorMeta, TagType } from \"../../../defs\";\nimport { defineError } from \"../../defineError\";\nimport type { ErrorFluentBuilder } from \"./fluent-builder.interface\";\nimport type { BuilderState } from \"./types\";\nimport { clone, mergeArray } from \"./utils\";\nimport { builderInvalidHttpCodeError } from \"../../../errors\";\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 builderInvalidHttpCodeError.throw({ value });\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 schema(schema) {\n return builder.dataSchema(schema);\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),\n });\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 tags: state.tags,\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 { matchesRunnerErrorData, 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;\nfunction isRunnerError(\n error: unknown,\n partialData: Partial<DefaultErrorType>,\n): error is RunnerError;\nfunction isRunnerError(\n error: unknown,\n partialData?: unknown,\n): error is RunnerError {\n const safePartialData =\n partialData !== null && typeof partialData === \"object\"\n ? (partialData as Partial<DefaultErrorType>)\n : undefined;\n\n return (\n error instanceof RunnerError &&\n matchesRunnerErrorData(error.data, safePartialData)\n );\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: unknown) => void) {\n const h = (error: unknown) => 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: unknown) => void) {\n const g = globalThis 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);\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 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 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 BrowserGlobalScope;\n if (g.__ENV__ && typeof g.__ENV__ === \"object\") return g.__ENV__[key];\n if (\n typeof process !== \"undefined\" &&\n (process as { env: Record<string, string> }).env\n )\n return (process 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 return platformUnsupportedFunctionError.throw({\n functionName: \"createAsyncLocalStorage\",\n });\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 type { IAsyncLocalStorage } from \"../types\";\nimport { BrowserPlatformAdapter } from \"./browser\";\n\n/**\n * Edge runtimes (workers) are closer to browsers but may support\n * AsyncLocalStorage via the `node:async_hooks` compat layer\n * (e.g. Cloudflare Workers, Vercel Edge).\n */\nexport class EdgePlatformAdapter extends BrowserPlatformAdapter {\n readonly id = \"edge\" as const;\n private alsClass: (new <T>() => IAsyncLocalStorage<T>) | null = null;\n private alsProbed = false;\n\n async init() {\n await this.probeAsyncLocalStorage();\n }\n\n /**\n * Attempt to discover AsyncLocalStorage from the runtime.\n * Checks globalThis first, then tries `import(\"node:async_hooks\")`.\n */\n private probeGlobalAsyncLocalStorage(): boolean {\n if (this.alsClass) return true;\n const g = globalThis as Record<string, unknown>;\n if (typeof g.AsyncLocalStorage === \"function\") {\n this.alsClass = g.AsyncLocalStorage as new <T>() => IAsyncLocalStorage<T>;\n return true;\n }\n return false;\n }\n\n private async probeAsyncLocalStorage(): Promise<void> {\n if (this.alsProbed) return;\n if (this.probeGlobalAsyncLocalStorage()) {\n this.alsProbed = true;\n return;\n }\n\n try {\n const mod = (await import(\"node:async_hooks\")) as {\n AsyncLocalStorage?: new <T>() => IAsyncLocalStorage<T>;\n };\n if (mod?.AsyncLocalStorage) {\n this.alsClass = mod.AsyncLocalStorage;\n }\n } catch {\n // Not available in this runtime.\n } finally {\n this.alsProbed = true;\n }\n }\n\n onShutdownSignal(_handler: () => void) {\n // No reliable shutdown signal in workers; return no-op disposer\n return () => {};\n }\n\n hasAsyncLocalStorage(): boolean {\n this.probeGlobalAsyncLocalStorage();\n return this.alsClass !== null;\n }\n\n createAsyncLocalStorage<T>(): IAsyncLocalStorage<T> {\n this.probeGlobalAsyncLocalStorage();\n if (this.alsClass) {\n return new this.alsClass<T>();\n }\n return super.createAsyncLocalStorage<T>();\n }\n}\n","export function normalizeError(input: unknown): Error {\n return input instanceof Error ? input : new Error(String(input));\n}\n","import type { IAsyncLocalStorage, IPlatformAdapter } from \"../types\";\nimport { platformUnsupportedFunctionError } from \"../../errors\";\nimport { normalizeError } from \"../../globals/resources/tunnel/error-utils\";\n\ninterface GenericEventTarget extends Record<string, unknown> {\n addEventListener?: (type: string, listener: (event: unknown) => void) => void;\n removeEventListener?: (\n type: string,\n listener: (event: unknown) => void,\n ) => void;\n document?: { visibilityState?: unknown };\n}\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 private alsClass: (new <T>() => IAsyncLocalStorage<T>) | null = null;\n private alsProbed = false;\n\n async init() {}\n\n private probeAsyncLocalStorage(): void {\n if (this.alsProbed) return;\n this.alsProbed = true;\n\n const g = globalThis as GenericEventTarget;\n\n // Keep universal behavior unchanged for non-Deno runtimes.\n if (typeof g.Deno === \"undefined\") return;\n\n if (typeof g.AsyncLocalStorage === \"function\") {\n this.alsClass = g.AsyncLocalStorage as new <T>() => IAsyncLocalStorage<T>;\n return;\n }\n\n try {\n // Prefer node:async_hooks compat when available in Deno.\n const mod = require(\"node:async_hooks\") as {\n AsyncLocalStorage?: new <T>() => IAsyncLocalStorage<T>;\n };\n if (mod?.AsyncLocalStorage) {\n this.alsClass = mod.AsyncLocalStorage;\n }\n } catch {\n // Unsupported in this runtime; fallback remains unsupported.\n }\n }\n\n onUncaughtException(handler: (error: unknown) => void) {\n const tgt = globalThis as GenericEventTarget;\n if (tgt.addEventListener) {\n const h = (event: unknown) => {\n const error =\n event &&\n typeof event === \"object\" &&\n \"error\" in event &&\n (event as { error?: unknown }).error !== undefined\n ? (event as { error?: unknown }).error\n : event;\n handler(normalizeError(error));\n };\n tgt.addEventListener(\"error\", h);\n return () => tgt.removeEventListener?.(\"error\", h);\n }\n return () => {};\n }\n\n onUnhandledRejection(handler: (reason: unknown) => void) {\n const tgt = globalThis as GenericEventTarget;\n if (tgt.addEventListener) {\n const wrap = (event: unknown) => {\n const reason =\n event &&\n typeof event === \"object\" &&\n \"reason\" in event &&\n (event as { reason?: unknown }).reason !== undefined\n ? (event as { reason?: unknown }).reason\n : event;\n handler(reason);\n };\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 GenericEventTarget;\n if (tgt.addEventListener) {\n const handlers: {\n before?: () => void;\n visibility?: () => void;\n } = {};\n handlers.before = () => handler();\n tgt.addEventListener(\"beforeunload\", handlers.before);\n\n const doc = tgt.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 if (handlers.before) {\n tgt.removeEventListener?.(\"beforeunload\", handlers.before);\n }\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 GenericEventTarget;\n if (g.__ENV__ && typeof g.__ENV__ === \"object\") {\n return (g.__ENV__ as Record<string, string | undefined>)[key];\n }\n if (\n typeof process !== \"undefined\" &&\n (process as { env: Record<string, string> }).env\n )\n return (process as { env: Record<string, string> }).env[key];\n if (g.env && typeof g.env === \"object\") {\n return (g.env as Record<string, string | undefined>)[key];\n }\n return undefined;\n }\n\n hasAsyncLocalStorage(): boolean {\n this.probeAsyncLocalStorage();\n return this.alsClass !== null;\n }\n\n createAsyncLocalStorage<T>(): IAsyncLocalStorage<T> {\n this.probeAsyncLocalStorage();\n if (this.alsClass) {\n return new this.alsClass<T>();\n }\n\n // Construct without throw; error only when used\n return {\n getStore: (): T | undefined => {\n return platformUnsupportedFunctionError.throw({\n functionName: \"createAsyncLocalStorage\",\n });\n },\n run: <R>(_store: T, _callback: () => R): R => {\n return 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 {\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 {\n document?: unknown;\n addEventListener?: unknown;\n Deno?: unknown;\n };\n\n // Deno exposes web-like globals (including addEventListener), but we keep\n // it on the universal adapter path and let the generic adapter probe ALS.\n if (typeof global.Deno !== \"undefined\") {\n this.inner = new GenericUniversalPlatformAdapter();\n return;\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: unknown) => 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 function isEdge(): boolean {\n if (typeof __TARGET__ !== \"undefined\" && __TARGET__ !== \"universal\") {\n return __TARGET__ === \"edge\";\n }\n return detectEnvironment() === \"edge\";\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: unknown) => void) {\n return this.inner.onUncaughtException(handler);\n }\n onUnhandledRejection(handler: (reason: unknown) => 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 { 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// Override target not registered\nexport const overrideTargetNotRegisteredError = error<\n {\n targetId: string;\n targetType:\n | \"Task\"\n | \"Resource\"\n | \"Task middleware\"\n | \"Resource middleware\"\n | \"Hook\";\n sources?: string[];\n } & DefaultErrorType\n>(\"runner.errors.overrideTargetNotRegistered\")\n .format(({ targetId, targetType, sources }) => {\n const sourceDetails =\n sources && sources.length > 0\n ? ` Requested from override(s) declared in: ${sources.join(\", \")}.`\n : \"\";\n\n return `Override target ${targetType} \"${targetId}\" is not registered, so it cannot be overridden.${sourceDetails}`;\n })\n .remediation(({ targetId, targetType }) => {\n const replacementPath = `Overrides replace existing ids. First register ${targetType.toLowerCase()} \"${targetId}\" in the graph via .register([...]), then apply .overrides([...]) from a parent resource.`;\n const directRegistrationPath = `If you already control composition, you can register the overridden definition directly (without .overrides([...])) as long as only one definition for that id is registered.`;\n const separateInstanceHint =\n targetType === \"Resource\"\n ? ` If you intended a separate resource instance (not a replacement), use .fork(\"new.id\") on the base resource and register the fork.`\n : ` If you intended a separate component (not a replacement), keep a different id and register it directly.`;\n\n return `${replacementPath} ${directRegistrationPath}${separateInstanceHint}`;\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 circularDependencyError = 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/** @deprecated Use circularDependencyError instead. */\nexport const circularDependenciesError = circularDependencyError;\n\n/** @deprecated Use circularDependencyError instead. */\nexport const dependencyCycleError = circularDependencyError;\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// Lazy resource sync access blocked\nexport const lazyResourceSyncAccessError = error<\n { id: string } & DefaultErrorType\n>(\"runner.errors.lazyResourceSyncAccess\")\n .format(\n ({ id }) =>\n `Resource \"${id.toString()}\" was not used during startup and cannot be read via getResourceValue() in lazy mode.`,\n )\n .remediation(\n ({ id }) =>\n `Use await runResult.getLazyResourceValue(\"${id.toString()}\") to initialize and read this resource on demand, or disable lazy mode in run(..., { lazy: false }).`,\n )\n .build();\n\nexport const lazyResourceAccessDisabledError = error<DefaultErrorType>(\n \"runner.errors.lazyResourceAccessDisabled\",\n)\n .format(\n () =>\n \"RunResult.getLazyResourceValue() is only available when run(..., { lazy: true }) is enabled.\",\n )\n .remediation(\n \"Enable lazy mode via run(app, { lazy: true }) to use getLazyResourceValue(), or use getResourceValue() in non-lazy runtimes.\",\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\nexport const duplicateTagIdOnDefinitionError = error<\n {\n definitionType: string;\n definitionId: string;\n tagId: string;\n } & DefaultErrorType\n>(\"runner.errors.duplicateTagIdOnDefinition\")\n .format(\n ({ definitionType, definitionId, tagId }) =>\n `${definitionType} \"${definitionId}\" declares duplicate tag \"${tagId}\". A definition can only include a tag id once.`,\n )\n .remediation(\n ({ definitionId, tagId }) =>\n `Remove the duplicate \"${tagId}\" tag from \"${definitionId}\", or fork the definition when you need separate tagged variants.`,\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 (input, result, config)\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/** Canonical error for input validation failures */\nexport const inputSchemaValidationError = validationError;\n/** Canonical error for result validation failures */\nexport const resultSchemaValidationError = validationError;\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// Visibility violation — item is internal to a resource that declared exports\nexport const visibilityViolationError = error<\n {\n targetId: string;\n targetType: string;\n ownerResourceId: string;\n consumerId: string;\n consumerType: string;\n exportedIds: string[];\n } & DefaultErrorType\n>(\"runner.errors.visibilityViolation\")\n .format(\n ({ targetId, targetType, ownerResourceId, consumerId, consumerType }) =>\n `${targetType} \"${targetId}\" is internal to resource \"${ownerResourceId}\" and cannot be referenced by ${consumerType} \"${consumerId}\".`,\n )\n .remediation(({ targetId, ownerResourceId, exportedIds }) => {\n const exported =\n exportedIds.length > 0\n ? `Resource \"${ownerResourceId}\" exports: [${exportedIds.join(\", \")}].`\n : `Resource \"${ownerResourceId}\" has no exports.`;\n return `${exported} Either add \"${targetId}\" to ${ownerResourceId}'s .exports([...]), or restructure to use an exported item instead.`;\n })\n .build();\n\n// RunResult/runtime surface errors (kept message-compatible with existing API expectations)\nexport const runResultDisposedError = error<DefaultErrorType>(\n \"runner.errors.runResultDisposed\",\n)\n .format(() => \"RunResult has been disposed.\")\n .remediation(\n \"Create a new runtime via run(...) before calling runtime APIs again. Dispose is terminal for a RunResult instance.\",\n )\n .build();\n\nexport const runtimeRootNotAvailableError = error<DefaultErrorType>(\n \"runner.errors.runtimeRootNotAvailable\",\n)\n .format(() => \"Root resource is not available.\")\n .remediation(\n \"Ensure run(...) completed successfully and you are not in dry-run mode when accessing the root value.\",\n )\n .build();\n\nexport const runtimeRootNotInitializedError = error<\n { rootId: string } & DefaultErrorType\n>(\"runner.errors.runtimeRootNotInitialized\")\n .format(\n ({ rootId }) =>\n `Root resource \"${rootId.toString()}\" is not initialized yet.`,\n )\n .remediation(\n ({ rootId }) =>\n `Await run(...) completion and avoid accessing root \"${rootId}\" during bootstrap/lazy initialization windows.`,\n )\n .build();\n\nexport const runResultDisposeDuringBootstrapError = error<DefaultErrorType>(\n \"runner.errors.runResultDisposeDuringBootstrap\",\n)\n .format(\n () =>\n \"RunResult.dispose() is not available during bootstrap. Wait for run() to finish initialization.\",\n )\n .remediation(\n \"Call dispose() only after run(...) resolves and the runtime is fully initialized.\",\n )\n .build();\n\nexport const runtimeElementNotFoundError = error<\n { type: string; elementId: string } & DefaultErrorType\n>(\"runner.errors.runtimeElementNotFound\")\n .format(\n ({ type, elementId }) =>\n `${type.toString()} \"${elementId.toString()}\" not found.`,\n )\n .remediation(\n ({ type, elementId }) =>\n `Register ${type.toString()} \"${elementId.toString()}\" in the root resource tree before requesting it from the runtime.`,\n )\n .build();\n\n/** Builder types that require validation before build() */\nexport type BuilderType =\n | \"task\"\n | \"hook\"\n | \"task-middleware\"\n | \"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 === \"task\"\n ? \"Task\"\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","import { error } from \"../definers/builders/error\";\nimport type { DefaultErrorType } from \"../types/error\";\n\n// Store: TaskRunner not set\nexport const taskRunnerNotSetError = error<DefaultErrorType>(\n \"runner.errors.store.taskRunnerNotSet\",\n)\n .format(\n () =>\n \"TaskRunner is not set. Call store.setTaskRunner() before initializeStore().\",\n )\n .remediation(\n \"Ensure setTaskRunner() is called on the Store instance before calling initializeStore(). This is typically done by the runtime setup.\",\n )\n .build();\n\n// Queue: Queue disposed\nexport const queueDisposedError = error<DefaultErrorType>(\n \"runner.errors.queue.disposed\",\n)\n .format(() => \"Queue has been disposed\")\n .remediation(\n \"The queue has already been disposed. Create a new Queue instance to continue enqueueing tasks.\",\n )\n .build();\n\n// Queue: Deadlock detected\nexport const queueDeadlockError = error<DefaultErrorType>(\n \"runner.errors.queue.deadlock\",\n)\n .format(\n () => \"Deadlock detected: a queued task attempted to queue another task\",\n )\n .remediation(\n \"Avoid calling queue.run() from within another queued task. If you need to chain tasks, consider using task dependencies or hooks instead.\",\n )\n .build();\n\n// Semaphore: Invalid permits (must be > 0)\nexport const semaphoreInvalidPermitsError = error<\n { maxPermits: number } & DefaultErrorType\n>(\"runner.errors.semaphore.invalidPermits\")\n .format(\n ({ maxPermits }) =>\n `maxPermits must be greater than 0. Received: ${maxPermits}`,\n )\n .remediation(\n \"Pass a positive integer greater than 0 to the Semaphore constructor. For example: new Semaphore(5)\",\n )\n .build();\n\n// Semaphore: Non-integer permits\nexport const semaphoreNonIntegerPermitsError = error<\n { maxPermits: number } & DefaultErrorType\n>(\"runner.errors.semaphore.nonIntegerPermits\")\n .format(\n ({ maxPermits }) =>\n `maxPermits must be an integer. Received: ${maxPermits}`,\n )\n .remediation(\n \"Pass an integer value to the Semaphore constructor. For example: new Semaphore(5) not new Semaphore(5.5)\",\n )\n .build();\n\n// Semaphore: Disposed\nexport const semaphoreDisposedError = error<DefaultErrorType>(\n \"runner.errors.semaphore.disposed\",\n)\n .format(() => \"Semaphore has been disposed\")\n .remediation(\n \"The semaphore has been disposed and cannot be used for new operations. Create a new Semaphore instance if you need to acquire permits.\",\n )\n .build();\n\n// Semaphore: Acquire timeout\nexport const semaphoreAcquireTimeoutError = error<\n { timeoutMs: number } & DefaultErrorType\n>(\"runner.errors.semaphore.acquireTimeout\")\n .format(({ timeoutMs }) => `Semaphore acquire timeout after ${timeoutMs}ms`)\n .remediation(\n ({ timeoutMs }) =>\n `Increase the timeout (currently ${timeoutMs}ms), reduce semaphore contention, or raise maxPermits if your workload requires more concurrency.`,\n )\n .build();\n\n// ExecutionJournal: Duplicate key\nexport const journalDuplicateKeyError = error<\n { keyId: string } & DefaultErrorType\n>(\"runner.errors.journal.duplicateKey\")\n .format(\n ({ keyId }) =>\n `Journal key \"${keyId}\" already exists. Use { override: true } to overwrite.`,\n )\n .remediation(\n ({ keyId }) =>\n `Either use { override: true } when calling journal.set() for key \"${keyId}\", or use a different key name to avoid conflicts.`,\n )\n .build();\n\n// MiddlewareManager: Unknown middleware type\nexport const unknownMiddlewareTypeError = error<DefaultErrorType>(\n \"runner.errors.middleware.unknownType\",\n)\n .format(() => \"Unknown middleware type\")\n .remediation(\n \"Ensure you are passing a valid task or resource middleware to interceptMiddleware(). Check that the middleware was created using r.taskMiddleware() or r.resourceMiddleware().\",\n )\n .build();\n\n// Clearer alias for interceptMiddleware() error semantics.\nexport const middlewareInterceptUnknownTypeError = unknownMiddlewareTypeError;\n\n// DependencyProcessor: Parallel initialization scheduling failure\nexport const parallelInitSchedulingError = error<DefaultErrorType>(\n \"runner.errors.dependencyProcessor.parallelInitScheduling\",\n)\n .format(\n () =>\n \"Could not schedule pending resources for initialization in parallel mode.\",\n )\n .remediation(\n \"This indicates a dependency ordering issue in parallel initialization mode. Ensure all resources have their dependencies properly declared, or switch to sequential initialization mode via run(app, { initMode: 'sequential' }).\",\n )\n .build();\n","export enum RunnerErrorId {\n HttpBaseUrlRequired = \"runner.errors.http.baseUrlRequired\",\n HttpFetchUnavailable = \"runner.errors.http.fetchUnavailable\",\n HttpContextSerialization = \"runner.errors.http.contextSerialization\",\n HttpEventWithResultUnavailable = \"runner.errors.http.eventWithResultUnavailable\",\n HttpClientInputUnsupported = \"runner.errors.http.clientInputUnsupported\",\n MiddlewareConcurrencyConflict = \"runner.errors.middleware.concurrencyConflict\",\n MiddlewareContextRequired = \"runner.errors.middleware.contextRequired\",\n MiddlewareTimeout = \"runner.errors.middleware.timeout\",\n MiddlewareCircuitBreakerOpen = \"runner.errors.middleware.circuitBreakerOpen\",\n MiddlewareRateLimitExceeded = \"runner.errors.middleware.rateLimitExceeded\",\n MiddlewareTemporalDisposed = \"runner.errors.middleware.temporalDisposed\",\n TunnelTaskNotFound = \"runner.errors.middleware.tunnel.taskNotFound\",\n TunnelEventNotFound = \"runner.errors.middleware.tunnel.eventNotFound\",\n TunnelClientContract = \"runner.errors.middleware.tunnel.clientContract\",\n ResourceForkInvalidId = \"runner.errors.resourceFork.invalidId\",\n BuilderInvalidHttpCode = \"runner.errors.builder.invalidHttpCode\",\n OverrideUnsupportedBase = \"runner.errors.override.unsupportedBase\",\n PlatformUnreachable = \"runner.errors.platform.unreachable\",\n SerializerInvalidPayload = \"runner.errors.serializer.invalidPayload\",\n SerializerValidation = \"runner.errors.serializer.validation\",\n SerializerDepthExceeded = \"runner.errors.serializer.depthExceeded\",\n SerializerReferenceResolution = \"runner.errors.serializer.referenceResolution\",\n SerializerUnsupportedFeature = \"runner.errors.serializer.unsupportedFeature\",\n SerializerTypeRegistry = \"runner.errors.serializer.typeRegistry\",\n SerializerSymbolPolicy = \"runner.errors.serializer.symbolPolicy\",\n NodeInputFileConsumed = \"runner.errors.node.files.inputFileConsumed\",\n NodeInputFileUnavailable = \"runner.errors.node.files.inputFileUnavailable\",\n NodeExposureMultipartLimitExceeded = \"runner.errors.node.exposure.multipartLimitExceeded\",\n OptionalDependencyInvalidExport = \"runner.errors.node.optionalDependency.invalidExport\",\n OptionalDependencyMissing = \"runner.errors.node.optionalDependency.missing\",\n DurableStoreShape = \"runner.errors.durable.storeShape\",\n DurableQueueNotInitialized = \"runner.errors.durable.queueNotInitialized\",\n DurableContextCancelled = \"runner.errors.durable.contextCancelled\",\n DurableStepDefinition = \"runner.errors.durable.stepDefinition\",\n DurableDeterminismViolation = \"runner.errors.durable.determinismViolation\",\n DurableSignalTimeout = \"runner.errors.durable.signalTimeout\",\n DurableScheduleConfig = \"runner.errors.durable.scheduleConfig\",\n DurableExecutionError = \"runner.errors.durable.executionError\",\n DurableExecutionInvariant = \"runner.errors.durable.executionInvariant\",\n DurableOperatorUnsupportedStoreCapability = \"runner.errors.durable.operator.unsupportedStoreCapability\",\n DashboardApiRequest = \"runner.errors.durable.dashboard.apiRequest\",\n LockableMapLocked = \"runner.errors.tools.lockableMapLocked\",\n}\n","import { error } from \"../definers/builders/error\";\nimport type { DefaultErrorType } from \"../types/error\";\nimport { RunnerErrorId } from \"./domain-error-ids\";\n\nexport const httpBaseUrlRequiredError = error<\n { clientFactory: string } & DefaultErrorType\n>(RunnerErrorId.HttpBaseUrlRequired)\n .format(({ clientFactory }) => `${clientFactory} requires baseUrl`)\n .remediation(\n ({ clientFactory }) =>\n `Pass a non-empty baseUrl to ${clientFactory}. Example: ${clientFactory}({ baseUrl: \"http://localhost:3000/__runner\", ... }).`,\n )\n .build();\n\nexport const httpFetchUnavailableError = error<\n { clientFactory: string } & DefaultErrorType\n>(RunnerErrorId.HttpFetchUnavailable)\n .format(\n ({ clientFactory }) =>\n `${clientFactory}: global fetch is not available; provide fetchImpl in config`,\n )\n .remediation(\n \"Provide fetchImpl in configuration, or run in an environment with a global fetch implementation.\",\n )\n .build();\n\nexport const httpContextSerializationError = error<\n { contextId: string; reason: string } & DefaultErrorType\n>(RunnerErrorId.HttpContextSerialization)\n .format(\n ({ contextId, reason }) =>\n `Failed to serialize async context \"${contextId}\" for HTTP request: ${reason}`,\n )\n .remediation(\n ({ contextId }) =>\n `Ensure context \"${contextId}\" is available in the current async scope and serializes correctly.`,\n )\n .build();\n\nexport const httpEventWithResultUnavailableError = error<\n { clientFactory: string } & DefaultErrorType\n>(RunnerErrorId.HttpEventWithResultUnavailable)\n .format(\n ({ clientFactory }) =>\n `${clientFactory}: eventWithResult not available on underlying tunnel client.`,\n )\n .remediation(\n \"Use a tunnel client/server pair that supports event return payloads, or fall back to fire-and-forget events.\",\n )\n .build();\n\nexport const httpClientInputUnsupportedError = error<\n { message: string } & DefaultErrorType\n>(RunnerErrorId.HttpClientInputUnsupported)\n .format(({ message }) => message)\n .remediation(\n \"Use the Node smart/mixed HTTP clients for Node streams/files, or send JSON/browser File payloads with the universal client.\",\n )\n .build();\n\nexport const middlewareConcurrencyConflictError = error<\n {\n key: string;\n existingLimit: number;\n attemptedLimit: number;\n } & DefaultErrorType\n>(RunnerErrorId.MiddlewareConcurrencyConflict)\n .format(\n ({ key, existingLimit, attemptedLimit }) =>\n `Concurrency middleware key \"${key}\" is already registered with limit ${existingLimit}, but got ${attemptedLimit}`,\n )\n .remediation(\n ({ key }) =>\n `Use a consistent concurrency limit for key \"${key}\", or use a different key to isolate limits.`,\n )\n .build();\n\nexport const middlewareContextRequiredError = error<\n { message: string } & DefaultErrorType\n>(RunnerErrorId.MiddlewareContextRequired)\n .format(({ message }) => message)\n .remediation(\n \"Ensure the required async context is provided before execution and middleware is wired with the matching context helper.\",\n )\n .build();\n\nexport const middlewareTimeoutError = error<\n { message: string } & DefaultErrorType\n>(RunnerErrorId.MiddlewareTimeout)\n .format(({ message }) => message)\n .httpCode(408)\n .remediation(\n \"Increase timeout ttl when appropriate, or optimize the operation to complete within the configured deadline.\",\n )\n .build();\n\nexport const middlewareCircuitBreakerOpenError = error<\n { message: string } & DefaultErrorType\n>(RunnerErrorId.MiddlewareCircuitBreakerOpen)\n .format(({ message }) => message)\n .httpCode(503)\n .remediation(\n \"Reduce downstream failures, tune circuit breaker thresholds/timeouts, or retry later when the circuit transitions back to HALF_OPEN/CLOSED.\",\n )\n .build();\n\nexport const middlewareRateLimitExceededError = error<\n { message: string } & DefaultErrorType\n>(RunnerErrorId.MiddlewareRateLimitExceeded)\n .format(({ message }) => message)\n .httpCode(429)\n .remediation(\n \"Reduce request frequency, increase allowed window/max limits, or retry after the configured reset time.\",\n )\n .build();\n\nexport const middlewareTemporalDisposedError = error<\n { message: string } & DefaultErrorType\n>(RunnerErrorId.MiddlewareTemporalDisposed)\n .format(({ message }) => message)\n .remediation(\n \"Ensure temporal middleware is not used after runtime disposal; create a fresh runtime instance before invoking tasks again.\",\n )\n .build();\n\nexport const tunnelTaskNotFoundError = error<\n { taskId: string } & DefaultErrorType\n>(RunnerErrorId.TunnelTaskNotFound)\n .format(\n ({ taskId }) =>\n `Task ${taskId} not found while trying to resolve tasks for tunnel.`,\n )\n .remediation(\n ({ taskId }) =>\n `Register task \"${taskId}\" in the runtime before tunnel middleware resolves task selectors.`,\n )\n .build();\n\nexport const tunnelEventNotFoundError = error<\n { eventId: string } & DefaultErrorType\n>(RunnerErrorId.TunnelEventNotFound)\n .format(\n ({ eventId }) =>\n `Event ${eventId} not found while trying to resolve events for tunnel.`,\n )\n .remediation(\n ({ eventId }) =>\n `Register event \"${eventId}\" in the runtime before tunnel middleware resolves event selectors.`,\n )\n .build();\n\nexport const tunnelClientContractError = error<\n { message: string } & DefaultErrorType\n>(RunnerErrorId.TunnelClientContract)\n .format(({ message }) => message)\n .remediation(\n \"In client/both tunnel mode, ensure the tunnel value exposes run(task, input) for tasks and emit(event, payload) for events.\",\n )\n .build();\n\nexport const resourceForkInvalidIdError = error<\n { id: string } & DefaultErrorType\n>(RunnerErrorId.ResourceForkInvalidId)\n .format(\n ({ id }) =>\n `resourceFork reId() must return a non-empty string for \"${id}\"`,\n )\n .remediation(\n \"Provide a reId function that always returns a non-empty string for each registered item id.\",\n )\n .build();\n\nexport const builderInvalidHttpCodeError = error<\n { value: number } & DefaultErrorType\n>(RunnerErrorId.BuilderInvalidHttpCode)\n .format(\n ({ value }) =>\n `Error httpCode must be an integer between 100 and 599. Received: ${value}`,\n )\n .remediation(\n \"Use a valid HTTP status code in the 100-599 range when configuring error helpers.\",\n )\n .build();\n\nexport const overrideUnsupportedBaseError = error<\n { message: string } & DefaultErrorType\n>(RunnerErrorId.OverrideUnsupportedBase)\n .format(({ message }) => message)\n .remediation(\n \"Only override supported runner definitions (task/resource/hook/middleware/error) and ensure the base is a valid definition instance.\",\n )\n .build();\n\nexport const platformUnreachableError = error<DefaultErrorType>(\n RunnerErrorId.PlatformUnreachable,\n)\n .format(() => \"Platform adapter reached an unreachable branch.\")\n .remediation(\n \"This indicates an internal control-flow bug. Please report with a minimal reproduction.\",\n )\n .build();\n\n// Clearer alias for the same helper; keep original export for compatibility.\nexport const platformInvariantError = platformUnreachableError;\n\nexport const serializerInvalidPayloadError = error<\n { message: string } & DefaultErrorType\n>(RunnerErrorId.SerializerInvalidPayload)\n .format(({ message }) => message)\n .remediation(\n \"Validate serialized payload shape and types before deserialization.\",\n )\n .build();\n\nexport const serializerValidationError = error<\n { message: string } & DefaultErrorType\n>(RunnerErrorId.SerializerValidation)\n .format(({ message }) => message)\n .remediation(\"Ensure serializer input satisfies validation constraints.\")\n .build();\n\n// Clearer alias for serializer-specific validation semantics.\nexport const serializerPayloadValidationError = serializerValidationError;\n\nexport const serializerDepthExceededError = error<\n { maxDepth: number } & DefaultErrorType\n>(RunnerErrorId.SerializerDepthExceeded)\n .format(({ maxDepth }) => `Maximum depth exceeded (${maxDepth})`)\n .remediation(\n \"Increase maxDepth only when needed and validate untrusted payload size/depth limits.\",\n )\n .build();\n\nexport const serializerReferenceResolutionError = error<\n { message: string } & DefaultErrorType\n>(RunnerErrorId.SerializerReferenceResolution)\n .format(({ message }) => message)\n .remediation(\n \"Ensure object references are valid and all referenced nodes exist in the payload graph.\",\n )\n .build();\n\nexport const serializerUnsupportedFeatureError = error<\n { message: string } & DefaultErrorType\n>(RunnerErrorId.SerializerUnsupportedFeature)\n .format(({ message }) => message)\n .remediation(\n \"Use only serializer features supported by the current runtime/platform settings.\",\n )\n .build();\n\nexport const serializerTypeRegistryError = error<\n { message: string } & DefaultErrorType\n>(RunnerErrorId.SerializerTypeRegistry)\n .format(({ message }) => message)\n .remediation(\n \"Register valid unique types with complete serialize/deserialize contracts.\",\n )\n .build();\n\nexport const serializerSymbolPolicyError = error<\n { message: string } & DefaultErrorType\n>(RunnerErrorId.SerializerSymbolPolicy)\n .format(({ message }) => message)\n .remediation(\n \"Adjust symbolPolicy or payload symbols to satisfy serializer symbol constraints.\",\n )\n .build();\n\nexport const nodeInputFileConsumedError = error<DefaultErrorType>(\n RunnerErrorId.NodeInputFileConsumed,\n)\n .format(() => \"InputFile stream already consumed\")\n .remediation(\n \"InputFile streams are single-use. Store needed data before consuming or create a new InputFile instance.\",\n )\n .build();\n\nexport const nodeInputFileUnavailableError = error<DefaultErrorType>(\n RunnerErrorId.NodeInputFileUnavailable,\n)\n .format(() => \"InputFile stream is not available\")\n .remediation(\n \"Ensure a valid stream is attached and has not been disposed before accessing it.\",\n )\n .build();\n\nexport const nodeExposureMultipartLimitExceededError = error<\n { message: string; response?: unknown } & DefaultErrorType\n>(RunnerErrorId.NodeExposureMultipartLimitExceeded)\n .format(({ message }) => message)\n .httpCode(413)\n .remediation(\n \"Increase multipart limits only when safe, or reduce uploaded payload size/field counts to fit configured constraints.\",\n )\n .build();\n\nexport const optionalDependencyInvalidExportError = error<\n { dependency: string; details: string } & DefaultErrorType\n>(RunnerErrorId.OptionalDependencyInvalidExport)\n .format(\n ({ dependency, details }) => `Invalid '${dependency}' export${details}`,\n )\n .remediation(\n ({ dependency }) =>\n `Verify installed package \"${dependency}\" version and export shape match Runner expectations.`,\n )\n .build();\n\nexport const optionalDependencyMissingError = error<\n { dependency: string; details: string } & DefaultErrorType\n>(RunnerErrorId.OptionalDependencyMissing)\n .format(\n ({ dependency, details }) =>\n `Missing optional dependency '${dependency}'.${details}`,\n )\n .remediation(\n ({ dependency }) =>\n `Install \"${dependency}\" or disable features requiring it in runtime configuration.`,\n )\n .build();\n\nexport const durableStoreShapeError = error<\n { message: string } & DefaultErrorType\n>(RunnerErrorId.DurableStoreShape)\n .format(({ message }) => message)\n .remediation(\n \"Ensure durable store implementation returns values in the expected contract shape.\",\n )\n .build();\n\nexport const durableQueueNotInitializedError = error<DefaultErrorType>(\n RunnerErrorId.DurableQueueNotInitialized,\n)\n .format(() => \"Queue not initialized\")\n .remediation(\n \"Initialize the durable queue connection/channel before push/consume operations.\",\n )\n .build();\n\nexport const durableContextCancelledError = error<\n { message: string } & DefaultErrorType\n>(RunnerErrorId.DurableContextCancelled)\n .format(({ message }) => message)\n .remediation(\n \"Check cancellation signals and workflow status transitions before invoking durable context operations.\",\n )\n .build();\n\nexport const durableStepDefinitionError = error<\n { stepId: string } & DefaultErrorType\n>(RunnerErrorId.DurableStepDefinition)\n .format(({ stepId }) => `Step ${stepId} has no up() function defined.`)\n .remediation(\n \"Define the step body with .up(...) before awaiting/executing the step builder.\",\n )\n .build();\n\nexport const durableDeterminismViolationError = error<\n { message: string } & DefaultErrorType\n>(RunnerErrorId.DurableDeterminismViolation)\n .format(({ message }) => message)\n .remediation(\n \"Use deterministic step IDs/flow and avoid non-deterministic branching across replays.\",\n )\n .build();\n\nexport const durableSignalTimeoutError = error<\n { signalId: string } & DefaultErrorType\n>(RunnerErrorId.DurableSignalTimeout)\n .format(({ signalId }) => `Signal '${signalId}' timed out`)\n .remediation(\n ({ signalId }) =>\n `Emit signal \"${signalId}\" before timeout or increase timeout settings for this wait step.`,\n )\n .build();\n\nexport const durableScheduleConfigError = error<\n { message: string } & DefaultErrorType\n>(RunnerErrorId.DurableScheduleConfig)\n .format(({ message }) => message)\n .remediation(\n \"Provide valid durable schedule configuration and ensure cron/interval values are valid.\",\n )\n .build();\n\nexport const durableExecutionError = error<\n {\n message: string;\n executionId: string;\n taskId: string;\n attempt: number;\n causeInfo?: { message: string; stack?: string };\n } & DefaultErrorType\n>(RunnerErrorId.DurableExecutionError)\n .format(({ message }) => message)\n .httpCode(500)\n .remediation(\n ({ executionId }) =>\n `Inspect durable execution \"${executionId}\" history and failure cause, then retry/resume based on workflow semantics.`,\n )\n .build();\n\nexport const durableExecutionInvariantError = error<\n { message: string } & DefaultErrorType\n>(RunnerErrorId.DurableExecutionInvariant)\n .format(({ message }) => message)\n .remediation(\n \"This indicates an invalid durable execution state or configuration contract violation.\",\n )\n .build();\n\nexport const durableOperatorUnsupportedStoreCapabilityError = error<\n { operation: string } & DefaultErrorType\n>(RunnerErrorId.DurableOperatorUnsupportedStoreCapability)\n .format(({ operation }) => `Store does not support ${operation}`)\n .remediation(\n ({ operation }) =>\n `Use a durable store implementation that supports operator capability \"${operation}\".`,\n )\n .build();\n\nexport const dashboardApiRequestError = error<\n { message: string } & DefaultErrorType\n>(RunnerErrorId.DashboardApiRequest)\n .format(({ message }) => message)\n .remediation(\n \"Verify dashboard API endpoint availability, authentication, and request payload shape.\",\n )\n .build();\n\nexport const lockableMapLockedError = error<\n { mapName: string } & DefaultErrorType\n>(RunnerErrorId.LockableMapLocked)\n .format(({ mapName }) => `Cannot modify \"${mapName}\" — the map is locked.`)\n .remediation(\n ({ mapName }) =>\n `The \"${mapName}\" map is locked after initialization. Perform all modifications before calling run().`,\n )\n .build();\n","import { error } from \"../definers/builders/error\";\nimport type { DefaultErrorType } from \"../types/error\";\n\n// Generic fallback helper. Use only when no stable typed contract is possible.\nconst messageError = error<{ message: string } & DefaultErrorType>(\"Error\")\n .format(({ message }) => message)\n .build();\n\nexport const createMessageError = (message?: unknown): never =>\n messageError.throw({\n message: message === undefined ? \"\" : String(message),\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\nexport const EventEmissionFailureMode = {\n FailFast: \"fail-fast\",\n Aggregate: \"aggregate\",\n} as const;\n\nexport type EventEmissionFailureMode =\n (typeof EventEmissionFailureMode)[keyof typeof EventEmissionFailureMode];\n\nexport interface IEventListenerError extends Error {\n listenerId?: string;\n listenerOrder?: number;\n}\n\nexport interface IEventEmitReport {\n totalListeners: number;\n attemptedListeners: number;\n skippedListeners: number;\n succeededListeners: number;\n failedListeners: number;\n propagationStopped: boolean;\n errors: IEventListenerError[];\n}\n\nexport interface IEventEmitOptions {\n /**\n * Controls error behavior during listener execution.\n * - fail-fast (default): throw on first failure.\n * - aggregate: continue execution and collect listener errors.\n */\n failureMode?: EventEmissionFailureMode;\n /**\n * When false, suppress throwing even if listener errors occurred.\n * Defaults to true.\n */\n throwOnError?: boolean;\n /**\n * When true, `emit(...)`/dependency event emitter returns `IEventEmitReport`.\n */\n report?: boolean;\n}\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\";\nimport { IEvent, IEventEmitOptions, IEventEmitReport } from \"../defs\";\nimport { IResource } from \"./resource\";\nimport { ITask } from \"./task\";\nimport { TaskCallOptions } from \"./utilities\";\n\n/**\n * Common interface for the Runner runtime instance.\n * Provides access to tasks, events, resources, and lifecycle management.\n */\nexport interface IRuntime<V = unknown> {\n /**\n * Executes a registered task.\n */\n runTask<TTask extends ITask<any, Promise<any>, any> | string>(\n task: TTask,\n ...args: TTask extends ITask<infer I, any, any>\n ? I extends undefined | void\n ? [input?: I, options?: TaskCallOptions]\n : [input: I, options?: TaskCallOptions]\n : [input?: unknown, options?: TaskCallOptions]\n ): TTask extends ITask<any, infer O, any> ? O : Promise<any>;\n\n /**\n * Emits an event to trigger hooks.\n */\n emitEvent<P>(\n event: IEvent<P> | string,\n payload?: P extends undefined | void ? undefined : P,\n options?: IEventEmitOptions,\n ): Promise<void | IEventEmitReport>;\n\n /**\n * Synchronously retrieves an initialized resource value.\n */\n getResourceValue<Output extends Promise<any>>(\n resource: string | IResource<any, Output, any, any, any>,\n ): Output extends Promise<infer U> ? U : Output;\n\n /**\n * Initializes and returns a resource value on-demand (lazy mode only).\n */\n getLazyResourceValue<Output extends Promise<any>>(\n resource: string | IResource<any, Output, any, any, any>,\n ): Promise<Output extends Promise<infer U> ? U : Output>;\n\n /**\n * Retrieves the configuration passed to a resource.\n */\n getResourceConfig<Config>(\n resource: string | IResource<Config, any, any, any, any>,\n ): Config;\n\n /** Returns the ID of the root resource. */\n getRootId(): string;\n /** Returns the configuration passed to the root resource. */\n getRootConfig<Config = unknown>(): Config;\n /** Returns the initialized value of the root resource. */\n getRootValue<Value = V>(): Value;\n\n /** Disposes the runtime and all resources. */\n dispose(): Promise<void>;\n}\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 * Defaults to false.\n * When true, startup skips initializing resources that are not used during bootstrap.\n * Such resources can be initialized on-demand via `runResult.getLazyResourceValue(...)`.\n */\n lazy?: boolean;\n /**\n * Defaults to `sequential`.\n * Controls how resources are initialized during startup.\n */\n initMode?: ResourceInitMode | \"sequential\" | \"parallel\";\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\n/**\n * Resource initialization strategy during run() bootstrap.\n */\nexport enum ResourceInitMode {\n Sequential = \"sequential\",\n Parallel = \"parallel\",\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<TaskLocalInterceptorRecord<any, any>>;\n};\n\nexport type TaskLocalInterceptorRecord<TInput = any, TOutput = any> = {\n interceptor: TaskLocalInterceptor<TInput, TOutput>;\n ownerResourceId?: string;\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\nfunction hasBrand(definition: unknown, symbol: symbol): boolean {\n if (definition === null || definition === undefined) {\n return false;\n }\n if (typeof definition !== \"object\" && typeof definition !== \"function\") {\n return false;\n }\n return Boolean((definition as Record<symbol, unknown>)[symbol]);\n}\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: unknown): definition is ITask {\n return hasBrand(definition, symbolTask);\n}\n\n/** Type guard: checks if a definition is a Phantom Task. */\nexport function isPhantomTask(definition: unknown): definition is IPhantomTask {\n return (\n hasBrand(definition, symbolTask) && hasBrand(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: unknown): definition is IResource {\n return hasBrand(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: unknown,\n): definition is IResourceWithConfig {\n return hasBrand(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: unknown): definition is IEvent {\n return hasBrand(definition, symbolEvent);\n}\n\n/** Type guard: checks if a definition is a Hook. */\nexport function isHook(definition: unknown): definition is IHook {\n return hasBrand(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: unknown,\n): definition is ITaskMiddleware {\n return hasBrand(definition, symbolTaskMiddleware);\n}\n\nexport function isResourceMiddleware(\n definition: unknown,\n): definition is IResourceMiddleware {\n return hasBrand(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: unknown): definition is ITag {\n return hasBrand(definition, symbolTag);\n}\n\n/** Type guard: checks if a definition is an Optional Dependency wrapper. */\nexport function isOptional(\n definition: unknown,\n): definition is IOptionalDependency<any> {\n return hasBrand(definition, symbolOptionalDependency);\n}\n\n/** Type guard: checks if a definition is an Error helper. */\nexport function isError(definition: unknown): definition is IErrorHelper<any> {\n return hasBrand(definition, symbolError);\n}\n\n/** Type guard: checks if a definition is an Async Context. */\nexport function isAsyncContext(\n definition: unknown,\n): definition is IAsyncContext<any> {\n return hasBrand(definition, symbolAsyncContext);\n}\n","import type { ThrowsList } from \"../types/error\";\nimport { isError } from \"../definers/tools\";\n\ntype ThrowOwner = {\n kind:\n | \"task\"\n | \"resource\"\n | \"hook\"\n | \"task-middleware\"\n | \"resource-middleware\";\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 { phantomTaskNotRoutedError } from \"../errors\";\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:\n taskConfig.middleware ||\n ([] as TaskMiddlewareAttachmentType[] 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 TagType[] 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 phantomRun = (async (_input: Input) => {\n phantomTaskNotRoutedError.throw({ taskId: taskConfig.id });\n }) as unknown as ITaskDefinition<Input, Output, any, any, any, any>[\"run\"];\n\n const taskDef = defineTask({\n ...taskConfig,\n run: phantomRun,\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\";\nimport { normalizeThrows } from \"../tools/throws\";\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 throws: normalizeThrows({ kind: \"hook\", id: hookDef.id }, hookDef.throws),\n } as IHook<D, TOn, TMeta>;\n}\n","import type {\n DependencyMapType,\n IResource,\n RegisterableItems,\n ResourceForkOptions,\n} from \"../types/resource\";\nimport { isOptional, isResource, isResourceWithConfig } from \"./tools\";\nimport { resourceForkInvalidIdError } from \"../errors\";\n\ntype AnyResource = IResource<any, any, any, any, any, any, any>;\n\nexport type ResourceRegisterList =\n | Array<RegisterableItems>\n | {\n bivarianceHack(config: unknown): Array<RegisterableItems>;\n }[\"bivarianceHack\"]\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 resourceForkInvalidIdError.throw({ 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: unknown) => {\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: unknown) => {\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: unknown) => {\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 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 const base = {\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 ?? [],\n throws: normalizeThrows({ kind: \"resource\", id }, constConfig.throws),\n meta: (constConfig.meta || {}) as TMeta,\n middleware: constConfig.middleware ?? [],\n exports: constConfig.exports,\n } as IResource<TConfig, TValue, TDeps, TPrivate, TMeta, TTags, TMiddleware>;\n\n const resolveCurrent = (\n candidate: unknown,\n ): IResource<TConfig, TValue, TDeps, TPrivate, TMeta, TTags, TMiddleware> => {\n if (\n candidate &&\n typeof candidate === \"object\" &&\n symbolResource in candidate\n ) {\n return candidate as IResource<\n TConfig,\n TValue,\n TDeps,\n TPrivate,\n TMeta,\n TTags,\n TMiddleware\n >;\n }\n return base;\n };\n\n const buildDefinition = (\n current: IResource<\n TConfig,\n TValue,\n TDeps,\n TPrivate,\n TMeta,\n TTags,\n TMiddleware\n >,\n ): IResourceDefinition<\n TConfig,\n TValue,\n TDeps,\n TPrivate,\n any,\n any,\n TMeta,\n TTags,\n TMiddleware\n > => ({\n id: current.id,\n dependencies: current.dependencies,\n register: current.register,\n overrides: current.overrides,\n init: current.init,\n context: current.context,\n configSchema: current.configSchema,\n resultSchema: current.resultSchema,\n tags: current.tags,\n throws: current.throws,\n middleware: current.middleware,\n dispose: current.dispose,\n meta: current.meta,\n exports: current.exports,\n });\n\n base.with = function (config: TConfig) {\n const current = resolveCurrent(this);\n const currentId = current.id;\n\n // Validate config with schema if provided (fail fast)\n if (current.configSchema) {\n try {\n config = current.configSchema.parse(config);\n } catch (error) {\n validationError.throw({\n subject: \"Resource config\",\n id: currentId,\n originalError:\n error instanceof Error ? error : new Error(String(error)),\n });\n }\n }\n\n return {\n [symbolResourceWithConfig]: true,\n id: currentId,\n resource: current,\n config,\n } satisfies IResourceWithConfig<\n TConfig,\n TValue,\n TDeps,\n TPrivate,\n TMeta,\n TTags,\n TMiddleware\n >;\n };\n\n base.optional = function () {\n const current = resolveCurrent(this);\n return {\n inner: current,\n [symbolOptionalDependency]: true,\n } as IOptionalDependency<\n IResource<TConfig, TValue, TDeps, TPrivate, TMeta, TTags, TMiddleware>\n >;\n };\n\n base.fork = function (newId: string, options?: ResourceForkOptions) {\n const current = resolveCurrent(this);\n const forkCallerFilePath = getCallerFile();\n const forkedParts = resolveForkedRegisterAndDependencies({\n register: current.register,\n dependencies: current.dependencies,\n forkId: newId,\n options,\n });\n const forked = defineResource({\n ...buildDefinition(current),\n id: newId,\n register: forkedParts.register,\n dependencies: forkedParts.dependencies,\n [symbolFilePath]: forkCallerFilePath,\n });\n forked[symbolForkedFrom] = {\n fromId: current.id,\n };\n return forked;\n };\n\n return base;\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 Record<string, unknown>),\n ...(next 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\";\nimport { normalizeThrows } from \"../tools/throws\";\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 throws: normalizeThrows(\n { kind: \"task-middleware\", id: middlewareDef.id },\n middlewareDef.throws,\n ),\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 const resolveCurrent = (\n candidate: unknown,\n ): ITaskMiddleware<\n TConfig,\n TEnforceInputContract,\n TEnforceOutputContract,\n TDependencies\n > & {\n [symbolMiddlewareConfigured]?: true;\n } => {\n if (\n candidate &&\n typeof candidate === \"object\" &&\n symbolTaskMiddleware in candidate\n ) {\n return candidate as ITaskMiddleware<\n TConfig,\n TEnforceInputContract,\n TEnforceOutputContract,\n TDependencies\n > & {\n [symbolMiddlewareConfigured]?: true;\n };\n }\n return obj;\n };\n\n return {\n ...obj,\n with: function (config: TConfig) {\n const current = resolveCurrent(this);\n\n if (current.configSchema) {\n try {\n config = current.configSchema.parse(config);\n } catch (error) {\n validationError.throw({\n subject: \"Middleware config\",\n id: current.id,\n originalError:\n error instanceof Error ? error : new Error(String(error)),\n });\n }\n }\n return wrap({\n ...current,\n [symbolMiddlewareConfigured]: true,\n config: mergeMiddlewareConfig(current.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\";\nimport { normalizeThrows } from \"../tools/throws\";\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 throws: normalizeThrows(\n { kind: \"resource-middleware\", id: middlewareDef.id },\n middlewareDef.throws,\n ),\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 const resolveCurrent = (\n candidate: unknown,\n ): IResourceMiddleware<\n TConfig,\n TEnforceInputContract,\n TEnforceOutputContract,\n TDependencies\n > & {\n [symbolMiddlewareConfigured]?: true;\n } => {\n if (\n candidate &&\n typeof candidate === \"object\" &&\n symbolResourceMiddleware in candidate\n ) {\n return candidate as IResourceMiddleware<\n TConfig,\n TEnforceInputContract,\n TEnforceOutputContract,\n TDependencies\n > & {\n [symbolMiddlewareConfigured]?: true;\n };\n }\n return obj;\n };\n\n return {\n ...obj,\n with: function (config: TConfig) {\n const current = resolveCurrent(this);\n\n if (current.configSchema) {\n try {\n config = current.configSchema.parse(config);\n } catch (error) {\n validationError.throw({\n subject: \"Middleware config\",\n id: current.id,\n originalError:\n error instanceof Error ? error : new Error(String(error)),\n });\n }\n }\n return wrap({\n ...current,\n [symbolMiddlewareConfigured]: true,\n config: mergeMiddlewareConfig(current.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 IHook<any, any, any>).on = (base as IHook<any, any, any>).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 isPlainObject = (value: unknown): value is Record<string, unknown> =>\n typeof value === \"object\" && value !== null && !Array.isArray(value);\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 (isPlainObject(tagConfig)) {\n if (isPlainObject(foundation.config)) {\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 const currentTags: TagType[] = Array.isArray(target)\n ? target\n : target.tags;\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 const currentTags: TagType[] = Array.isArray(target)\n ? target\n : target.tags || [];\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\";\nimport { middlewareContextRequiredError } from \"../../errors\";\n\nexport interface RequireContextMiddlewareConfig {\n context: IAsyncContext<any>;\n}\n\nexport const requireContextTaskMiddleware = defineTaskMiddleware({\n id: \"globals.middleware.task.requireContext\",\n throws: [middlewareContextRequiredError],\n async run({ task, next }, _deps, config: RequireContextMiddlewareConfig) {\n if (!config.context) {\n middlewareContextRequiredError.throw({\n message:\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 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 const SymbolPolicy = {\n AllowAll: \"allow-all\",\n WellKnownOnly: \"well-known-only\",\n Disabled: \"disabled\",\n} as const;\n\nexport type SymbolPolicy = (typeof SymbolPolicy)[keyof typeof SymbolPolicy];\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?<TInstance, TSerialized>(\n typeDef: TypeDefinition<TInstance, TSerialized>,\n ): void;\n}\n","import {\n serializerDepthExceededError,\n serializerInvalidPayloadError,\n serializerReferenceResolutionError,\n serializerSymbolPolicyError,\n serializerTypeRegistryError,\n serializerUnsupportedFeatureError,\n serializerValidationError,\n} from \"../errors\";\nimport { SymbolPolicyErrorMessage } from \"./types\";\n\nexport const invalidPayloadError = (message: string): never =>\n serializerInvalidPayloadError.throw({ message });\n\nexport const validationError = (message: string): never =>\n serializerValidationError.throw({ message });\n\nexport const depthExceededError = (maxDepth: number): never =>\n serializerDepthExceededError.throw({ maxDepth });\n\nexport const referenceResolutionError = (message: string): never =>\n serializerReferenceResolutionError.throw({ message });\n\nexport const unsupportedFeatureError = (message: string): never =>\n serializerUnsupportedFeatureError.throw({ message });\n\nexport const typeRegistryError = (message: string): never =>\n serializerTypeRegistryError.throw({ message });\n\nexport const symbolPolicyError = (message: SymbolPolicyErrorMessage): never =>\n serializerSymbolPolicyError.throw({ message });\n","import { invalidPayloadError, unsupportedFeatureError } from \"./errors\";\nimport 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 isRuntimeBufferConstructor = (\n value: unknown,\n): value is RuntimeBufferConstructor => {\n if (typeof value !== \"function\") {\n return false;\n }\n\n const from = Reflect.get(value, \"from\");\n const isBuffer = Reflect.get(value, \"isBuffer\");\n return typeof from === \"function\" && typeof isBuffer === \"function\";\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 RuntimeTypedArrayConstructor;\n};\n\nconst getRuntimeBufferConstructor = (): RuntimeBufferConstructor | null => {\n const value = (globalThis as Record<string, unknown>).Buffer;\n if (!isRuntimeBufferConstructor(value)) {\n return null;\n }\n return value;\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 invalidPayloadError(\n `${INVALID_PAYLOAD_MESSAGE_PREFIX} ${typeId} payload`,\n );\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 invalidPayloadError(\n `${INVALID_PAYLOAD_MESSAGE_PREFIX} ${typeId} payload`,\n );\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 unsupportedFeatureError(`${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 invalidPayloadError(\n `${INVALID_PAYLOAD_MESSAGE_PREFIX} ${typeId} payload`,\n );\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 { invalidPayloadError, unsupportedFeatureError } from \"./errors\";\nimport type { TypeDefinition } from \"./types\";\n\nconst hasOwn = Object.prototype.hasOwnProperty;\nconst errorReservedPropertyNames = new Set([\n \"name\",\n \"message\",\n \"stack\",\n \"cause\",\n]);\nconst errorMethodShadowingPropertyNames = new Set([\n \"toString\",\n \"toLocaleString\",\n \"valueOf\",\n \"hasOwnProperty\",\n \"isPrototypeOf\",\n \"propertyIsEnumerable\",\n \"__defineGetter__\",\n \"__defineSetter__\",\n \"__lookupGetter__\",\n \"__lookupSetter__\",\n \"toJSON\",\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 shouldBlockErrorCustomField = (propertyName: string): boolean =>\n isUnsafePropertyName(propertyName) ||\n errorReservedPropertyNames.has(propertyName) ||\n errorMethodShadowingPropertyNames.has(propertyName);\n\nconst collectErrorCustomFields = (error: Error): Record<string, unknown> => {\n const customFields: Record<string, unknown> = {};\n for (const propertyName of Object.getOwnPropertyNames(error)) {\n if (shouldBlockErrorCustomField(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 invalidPayloadError(\"Invalid Error payload\");\n }\n\n const { name, message, stack, customFields } = value;\n if (typeof name !== \"string\" || typeof message !== \"string\") {\n throw invalidPayloadError(\"Invalid Error payload\");\n }\n if (stack !== undefined && typeof stack !== \"string\") {\n throw invalidPayloadError(\"Invalid Error payload\");\n }\n if (customFields !== undefined && !isRecord(customFields)) {\n throw invalidPayloadError(\"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 (shouldBlockErrorCustomField(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 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 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 Object.defineProperty(restoredError, propertyName, {\n value: propertyValue,\n writable: true,\n configurable: true,\n enumerable: true,\n });\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 invalidPayloadError(\"Invalid URL payload\");\n }\n const runtimeUrlConstructor = getUrlConstructor();\n if (!runtimeUrlConstructor) {\n throw unsupportedFeatureError(\"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 invalidPayloadError(\"Invalid URLSearchParams payload\");\n }\n const runtimeUrlSearchParamsConstructor = getUrlSearchParamsConstructor();\n if (!runtimeUrlSearchParamsConstructor) {\n throw unsupportedFeatureError(\n \"URLSearchParams is not available in this runtime\",\n );\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 { invalidPayloadError, validationError } from \"./errors\";\nimport 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\nconst BIGINT_PAYLOAD_PATTERN = /^[+-]?\\d+$/;\n\nexport const assertBigIntPayload = (value: unknown): BigIntPayload => {\n if (typeof value !== \"string\") {\n throw invalidPayloadError(\"Invalid bigint payload\");\n }\n const normalized = value.trim();\n if (!BIGINT_PAYLOAD_PATTERN.test(normalized)) {\n throw invalidPayloadError(\"Invalid bigint payload\");\n }\n return normalized;\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 validationError(\"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 invalidPayloadError(\"Invalid non-finite number payload\");\n};\n","/**\n * Built-in type definitions for common JavaScript objects\n */\n\nimport {\n invalidPayloadError,\n validationError,\n unsupportedFeatureError,\n} from \"./errors\";\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 getRuntimeWellKnownSymbol = (\n key: WellKnownSymbolKey,\n): symbol | undefined => {\n const value = Reflect.get(Symbol, key);\n return typeof value === \"symbol\" ? value : undefined;\n};\n\nconst getWellKnownSymbolKey = (value: symbol): WellKnownSymbolKey | null => {\n for (const key of WELL_KNOWN_SYMBOL_KEYS) {\n const runtimeSymbol = getRuntimeWellKnownSymbol(key);\n if (runtimeSymbol === 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 invalidPayloadError(\"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 invalidPayloadError(\"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 invalidPayloadError(\"Invalid symbol payload\");\n }\n if (\n (WELL_KNOWN_SYMBOL_KEYS as readonly string[]).includes(rec.key) === false\n ) {\n throw invalidPayloadError(\"Invalid symbol payload\");\n }\n return {\n kind: SymbolPayloadKind.WellKnown,\n key: rec.key as WellKnownSymbolKey,\n };\n }\n throw invalidPayloadError(\"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 try {\n return new RegExp(data.pattern, data.flags);\n } catch {\n throw invalidPayloadError(\"Invalid RegExp payload\");\n }\n },\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 validationError(\"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 = getRuntimeWellKnownSymbol(parsed.key);\n if (!value) {\n throw unsupportedFeatureError(\n `Unsupported well-known symbol \"${parsed.key}\"`,\n );\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","import { invalidPayloadError, validationError } from \"./errors\";\n\n/**\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\nconst ALLOWED_REGEXP_FLAGS = new Set([\"d\", \"g\", \"i\", \"m\", \"s\", \"u\", \"v\", \"y\"]);\n\nconst assertRegExpFlags = (flags: string): string => {\n const seen = new Set<string>();\n for (const flag of flags) {\n if (!ALLOWED_REGEXP_FLAGS.has(flag) || seen.has(flag)) {\n throw invalidPayloadError(\"Invalid RegExp flags\");\n }\n seen.add(flag);\n }\n return flags;\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\nconst stripGroupPrefix = (groupBody: string): string => {\n if (!groupBody.startsWith(\"?\")) {\n return groupBody;\n }\n if (\n groupBody.startsWith(\"?:\") ||\n groupBody.startsWith(\"?=\") ||\n groupBody.startsWith(\"?!\") ||\n groupBody.startsWith(\"?>\")\n ) {\n return groupBody.slice(2);\n }\n if (groupBody.startsWith(\"?<=\") || groupBody.startsWith(\"?<!\")) {\n return groupBody.slice(3);\n }\n if (groupBody.startsWith(\"?<\")) {\n const closeIndex = groupBody.indexOf(\">\");\n if (closeIndex > 1) {\n return groupBody.slice(closeIndex + 1);\n }\n }\n return groupBody;\n};\n\nconst splitTopLevelAlternation = (groupBody: string): string[] => {\n const branches: string[] = [];\n let escaped = false;\n let inCharClass = false;\n let nestedDepth = 0;\n let branchStart = 0;\n let hasAlternation = false;\n\n for (let index = 0; index < groupBody.length; index += 1) {\n const char = groupBody[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 nestedDepth += 1;\n continue;\n }\n if (char === \")\") {\n if (nestedDepth > 0) {\n nestedDepth -= 1;\n }\n continue;\n }\n if (char === \"|\" && nestedDepth === 0) {\n branches.push(groupBody.slice(branchStart, index));\n branchStart = index + 1;\n hasAlternation = true;\n }\n }\n\n if (!hasAlternation) {\n return [];\n }\n\n branches.push(groupBody.slice(branchStart));\n return branches;\n};\n\nconst hasOverlappingAlternationPrefix = (groupBody: string): boolean => {\n const normalizedBody = stripGroupPrefix(groupBody);\n const branches = splitTopLevelAlternation(normalizedBody);\n if (branches.length < 2) {\n return false;\n }\n\n for (let i = 0; i < branches.length; i += 1) {\n for (let j = i + 1; j < branches.length; j += 1) {\n const left = branches[i];\n const right = branches[j];\n if (left.length === 0 || right.length === 0) {\n return true;\n }\n if (left.startsWith(right) || right.startsWith(left)) {\n return true;\n }\n }\n }\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; startIndex: number }> = [];\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, startIndex: index });\n continue;\n }\n if (char === \")\") {\n const group = groupStack.pop();\n if (!group) {\n continue;\n }\n\n const isQuantifiedGroup = isQuantifierAt(pattern, index + 1);\n if (isQuantifiedGroup) {\n if (group.hasQuantifier) {\n return false;\n }\n const groupBody = pattern.slice(group.startIndex + 1, index);\n if (hasOverlappingAlternationPrefix(groupBody)) {\n return false;\n }\n }\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 invalidPayloadError(\"Invalid RegExp payload\");\n }\n const record = value as Record<string, unknown>;\n if (typeof record.pattern !== \"string\" || typeof record.flags !== \"string\") {\n throw invalidPayloadError(\"Invalid RegExp payload\");\n }\n if (record.pattern.length > options.maxPatternLength) {\n throw validationError(\n `RegExp pattern exceeds limit (${options.maxPatternLength})`,\n );\n }\n if (!options.allowUnsafe && !isRegExpPatternSafe(record.pattern)) {\n throw validationError(\"Unsafe RegExp pattern\");\n }\n return {\n pattern: record.pattern,\n flags: assertRegExpFlags(record.flags),\n };\n};\n","/**\n * Type registry for managing custom serialization types.\n * Extracted from Serializer.ts as a standalone module.\n */\n\nimport { symbolPolicyError, typeRegistryError } from \"./errors\";\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 if (!typeDef || !typeDef.id) {\n throw typeRegistryError(\"Invalid type definition: id is required\");\n }\n if (typeof typeDef.is !== \"function\") {\n throw typeRegistryError(\"Invalid type definition: is is required\");\n }\n if (!typeDef.serialize || !typeDef.deserialize) {\n throw typeRegistryError(\n \"Invalid type definition: serialize and deserialize are required\",\n );\n }\n if (this.typeRegistry.has(typeDef.id)) {\n throw typeRegistryError(`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 typeRegistryError(`Type \"${typeId}\" is not allowed`);\n }\n const typeDef = this.typeMap.get(typeId);\n if (!typeDef) {\n throw typeRegistryError(`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 symbolPolicyError(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 symbolPolicyError(\n SymbolPolicyErrorMessage.GlobalSymbolsNotAllowed,\n );\n }\n return;\n case SymbolPolicy.Disabled:\n throw symbolPolicyError(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 { depthExceededError } from \"./errors\";\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 if (!value || typeof value !== \"object\") {\n return false;\n }\n\n const record = value as Record<string, unknown>;\n\n if (\n !Object.prototype.hasOwnProperty.call(record, \"__ref\") ||\n typeof record.__ref !== \"string\"\n ) {\n return false;\n }\n\n const ownPropertyNames = Object.getOwnPropertyNames(record);\n if (ownPropertyNames.length !== 1 || ownPropertyNames[0] !== \"__ref\") {\n return false;\n }\n\n if (Object.getOwnPropertySymbols(record).length > 0) {\n return false;\n }\n\n return true;\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 depthExceededError(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 mapKey: (key: string) => string = (key) => key,\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 const outputKey = mapKey(key);\n record[outputKey] = 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","const ESCAPE_PREFIX = \"$runner.escape::\";\n\nconst ESCAPED_MARKER_KEYS = new Set([\"__type\", \"__graph\"]);\n\nexport const escapeReservedMarkerKey = (key: string): string => {\n if (ESCAPED_MARKER_KEYS.has(key) || key.startsWith(ESCAPE_PREFIX)) {\n return `${ESCAPE_PREFIX}${key}`;\n }\n return key;\n};\n\nexport const unescapeReservedMarkerKey = (key: string): string => {\n if (key.startsWith(ESCAPE_PREFIX)) {\n return key.slice(ESCAPE_PREFIX.length);\n }\n return key;\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\";\nimport { escapeReservedMarkerKey } from \"./marker-key-escapes\";\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 context.stack.add(objectValue);\n\n try {\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 let shouldExcludeCurrentType = false;\n try {\n const serializedPayload = typeDef.serialize(objectValue);\n shouldExcludeCurrentType =\n options.typeRegistry.shouldExcludeTypeFromPayload(\n typeDef,\n serializedPayload,\n );\n if (shouldExcludeCurrentType) {\n context.excludedTypeIds.push(typeDef.id);\n }\n const payload =\n serializedPayload === objectValue\n ? serializeRecordEntries(\n objectValue as Record<string, unknown>,\n options.unsafeKeys,\n (nested) =>\n serializeTreeValue(nested, context, depth + 1, options),\n escapeReservedMarkerKey,\n )\n : 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 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 escapeReservedMarkerKey,\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 {\n invalidPayloadError,\n referenceResolutionError,\n validationError,\n} from \"./errors\";\nimport type { SerializedValue, DeserializationContext } from \"./types\";\nimport {\n isObjectReference,\n isSerializedTypeRecord,\n isUnsafeKey,\n assertDepth,\n} from \"./validation\";\nimport type { TypeRegistry } from \"./type-registry\";\nimport { unescapeReservedMarkerKey } from \"./marker-key-escapes\";\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 validationError(\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 validationError(\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 (hasOwn.call(value, \"__ref\")) {\n if (!isObjectReference(value)) {\n throw invalidPayloadError(\"Invalid object reference payload\");\n }\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 referenceResolutionError(`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 referenceResolutionError(`Unresolved reference id \"${id}\"`);\n }\n\n switch (node.kind) {\n case \"array\": {\n const values = node.value;\n if (!Array.isArray(values)) {\n throw invalidPayloadError(\"Invalid array node payload\");\n }\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 source = node.value;\n if (!source || typeof source !== \"object\" || Array.isArray(source)) {\n throw invalidPayloadError(\"Invalid object node payload\");\n }\n\n const target: Record<string, unknown> = {};\n context.resolved.set(id, target);\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 validationError(\"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 rawKey in source) {\n if (!hasOwn.call(source, rawKey)) {\n continue;\n }\n const key = unescapeReservedMarkerKey(rawKey);\n if (isUnsafeKey(key, options.unsafeKeys)) {\n continue;\n }\n obj[key] = deserializeLegacy(source[rawKey], 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} from \"./types\";\nimport { SymbolPolicy } from \"./types\";\nimport { TypeRegistry } from \"./type-registry\";\nimport {\n isGraphPayload,\n toNodeRecord,\n isObjectReference,\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} 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\nfunction parseJsonPayload(payload: string): unknown {\n try {\n return JSON.parse(payload);\n } catch {\n throw new SyntaxError(\"Invalid JSON payload.\");\n }\n}\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 = parseJsonPayload(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 this.typeRegistry.addType(typeDef);\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 { defineEvent } from \"../define\";\nimport { IEvent } from \"../defs\";\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\";\nimport { journalDuplicateKeyError } from \"../errors\";\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 journalDuplicateKeyError.throw({ keyId: key.id });\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","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 { 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\";\nimport { safeStringify } from \"../../models/utils/safeStringify\";\n\nexport interface ICacheInstance {\n set(key: string, value: unknown): unknown | Promise<unknown>;\n get(key: string): unknown | Promise<unknown>;\n clear(): void | Promise<void>;\n /** Optional presence check to disambiguate cached undefined values */\n has?(key: string): boolean | Promise<boolean>;\n}\n\ntype CacheStoredValue = NonNullable<unknown>;\ntype CacheFactoryOptions = Partial<\n LRUCache.Options<string, CacheStoredValue, unknown>\n>;\n\n// Default cache factory task that can be overridden\nexport const cacheFactoryTask = defineTask({\n id: \"globals.tasks.cacheFactory\",\n run: async (options: CacheFactoryOptions): Promise<ICacheInstance> => {\n return new LRUCache<string, CacheStoredValue, unknown>(\n options as LRUCache.Options<string, CacheStoredValue, unknown>,\n );\n },\n});\n\nexport interface CacheResourceConfig {\n defaultOptions?: CacheFactoryOptions;\n}\n\ntype CacheMiddlewareConfig = CacheFactoryOptions & {\n keyBuilder?: (taskId: string, input: unknown) => string;\n};\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 pendingCreates: new Map<string, Promise<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 cache.pendingCreates?.clear();\n for (const cacheInstance of cache.map.values()) {\n await cacheInstance.clear();\n }\n },\n});\n\nconst defaultKeyBuilder = (taskId: string, input: unknown) =>\n `${taskId}-${safeStringify(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 const pendingCreates =\n cache.pendingCreates ??\n (cache.pendingCreates = new Map<string, Promise<ICacheInstance>>());\n\n const pendingCreate = pendingCreates.get(taskId);\n if (pendingCreate) {\n cacheHolderForTask = await pendingCreate;\n } else {\n const createPromise = cache\n .cacheFactoryTask(cacheOptions)\n .then((instance) => {\n cache.map.set(taskId, instance);\n return instance;\n })\n .finally(() => {\n pendingCreates.delete(taskId);\n });\n pendingCreates.set(taskId, createPromise);\n cacheHolderForTask = await createPromise;\n }\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 ? await 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 try {\n await cacheHolderForTask.set(key, result);\n } catch {\n // Fail-open: preserve successful task result even if cache backend write fails.\n }\n\n return result;\n },\n});\n","import { error } from \"../../definers/builders/error\";\n\nexport const cronConfigurationError = error<{ message: string }>(\n \"runner.errors.cron.configuration\",\n)\n .format(({ message }) => message)\n .remediation(\n \"Ensure your cron tag is configured with a valid expression and supported options.\",\n )\n .build();\n\nexport const cronExecutionError = error<{\n taskId: string;\n expression: string;\n message: string;\n}>(\"runner.errors.cron.execution\")\n .format(\n ({ taskId, expression, message }) =>\n `Cron task \\\"${taskId}\\\" (${expression}) failed: ${message}`,\n )\n .remediation(\n ({ taskId }) =>\n `Inspect task \\\"${taskId}\\\" logs and dependencies. Fix the task failure or switch onError to \\\"continue\\\" to keep scheduling active.`,\n )\n .build();\n","export enum CronOnError {\n Continue = \"continue\",\n Stop = \"stop\",\n}\n\nexport interface CronTagConfig {\n expression: string;\n input?: unknown;\n timezone?: string;\n immediate?: boolean;\n enabled?: boolean;\n onError?: CronOnError;\n /** When true, suppresses all cron log output for this task. Defaults to false. */\n silent?: boolean;\n}\n\nexport interface CronScheduledTask {\n taskId: string;\n expression: string;\n timezone?: string;\n nextRunAt?: Date;\n enabled: boolean;\n stopped: boolean;\n}\n\nexport interface CronResourceValue {\n schedules: ReadonlyMap<string, CronScheduledTask>;\n}\n","import { defineTag } from \"../../define\";\nimport { cronConfigurationError } from \"./cron.errors\";\nimport { CronOnError, CronTagConfig } from \"./types\";\n\nconst cronOnErrorValues = new Set(Object.values(CronOnError));\n\nexport const cronTag = defineTag<CronTagConfig>({\n id: \"globals.tags.cron\",\n configSchema: {\n parse: (rawValue): CronTagConfig => {\n if (!rawValue || typeof rawValue !== \"object\") {\n return cronConfigurationError.throw({\n message: \"Cron tag config must be an object.\",\n });\n }\n\n const value = rawValue as Partial<CronTagConfig>;\n\n if (typeof value.expression !== \"string\" || !value.expression.trim()) {\n return cronConfigurationError.throw({\n message: 'Cron tag config requires a non-empty \"expression\".',\n });\n }\n\n if (\n value.timezone !== undefined &&\n (typeof value.timezone !== \"string\" || !value.timezone.trim())\n ) {\n return cronConfigurationError.throw({\n message:\n 'Cron tag config \\\"timezone\\\" must be a non-empty string when provided.',\n });\n }\n\n if (\n value.immediate !== undefined &&\n typeof value.immediate !== \"boolean\"\n ) {\n return cronConfigurationError.throw({\n message: 'Cron tag config \\\"immediate\\\" must be a boolean.',\n });\n }\n\n if (value.enabled !== undefined && typeof value.enabled !== \"boolean\") {\n return cronConfigurationError.throw({\n message: 'Cron tag config \\\"enabled\\\" must be a boolean.',\n });\n }\n\n if (\n value.onError !== undefined &&\n !cronOnErrorValues.has(value.onError)\n ) {\n return cronConfigurationError.throw({\n message:\n 'Cron tag config \\\"onError\\\" must be either \\\"continue\\\" or \\\"stop\\\".',\n });\n }\n\n if (value.silent !== undefined && typeof value.silent !== \"boolean\") {\n return cronConfigurationError.throw({\n message: 'Cron tag config \"silent\" must be a boolean.',\n });\n }\n\n return {\n expression: value.expression,\n input: value.input,\n timezone: value.timezone,\n immediate: value.immediate,\n enabled: value.enabled,\n onError: value.onError,\n silent: value.silent,\n };\n },\n },\n meta: {\n title: \"Cron\",\n description:\n \"Marks tasks that should be scheduled by globals.resources.cron using a cron expression.\",\n },\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 tunnelTaskPolicyTag = 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\n/** @deprecated Use tunnelTaskPolicyTag instead. */\nexport const tunnelPolicyTag = tunnelTaskPolicyTag;\n","import { defineTag } from \"../define\";\nimport { cronTag } from \"./cron/cron.tag\";\nimport { debugTag } from \"./resources/debug/debug.tag\";\nimport { tunnelTag } from \"./resources/tunnel/tunnel.tag\";\nimport { tunnelTaskPolicyTag } from \"./resources/tunnel/tunnel.policy.tag\";\n\nconst globalTagsBase = {\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 cron: cronTag,\n tunnel: tunnelTag,\n tunnelTaskPolicy: tunnelTaskPolicyTag,\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\ntype GlobalTags = typeof globalTagsBase & {\n /** @deprecated Use globals.tags.tunnelTaskPolicy instead. */\n tunnelPolicy: typeof tunnelTaskPolicyTag;\n};\n\nexport const globalTags = globalTagsBase as GlobalTags;\n\nObject.defineProperty(globalTags, \"tunnelPolicy\", {\n get: () => globalTags.tunnelTaskPolicy,\n enumerable: false,\n configurable: false,\n});\n","import { defineTaskMiddleware, defineResource } from \"../../define\";\nimport { journal as journalHelper } from \"../../models/ExecutionJournal\";\nimport { globalTags } from \"../globalTags\";\nimport { RunnerError } from \"../../definers/defineError\";\nimport { middlewareCircuitBreakerOpenError, RunnerErrorId } from \"../../errors\";\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 RunnerError<{ message: string }> {\n constructor(message: string) {\n super(\n RunnerErrorId.MiddlewareCircuitBreakerOpen,\n message,\n { message },\n middlewareCircuitBreakerOpenError.httpCode,\n );\n }\n}\n\nexport interface CircuitBreakerStatus {\n state: CircuitBreakerState;\n failures: number;\n lastFailureTime: number;\n halfOpenProbeInFlight: boolean;\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 dispose: async (state) => {\n state.statusMap.clear();\n },\n});\n\nexport const circuitBreakerMiddleware = defineTaskMiddleware({\n id: \"globals.middleware.task.circuitBreaker\",\n throws: [middlewareCircuitBreakerOpenError],\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 // Evict stale CLOSED entries once the map grows past a safety threshold.\n // Task IDs are typically static so this rarely fires, but guards against\n // pathological dynamic-registration workloads.\n if (statusMap.size >= 10_000) {\n for (const [key, entry] of statusMap) {\n if (\n entry.state === CircuitBreakerState.CLOSED &&\n entry.failures === 0\n ) {\n statusMap.delete(key);\n }\n }\n }\n\n status = {\n state: CircuitBreakerState.CLOSED,\n failures: 0,\n lastFailureTime: 0,\n halfOpenProbeInFlight: false,\n };\n statusMap.set(taskId, status);\n }\n\n const now = Date.now();\n const syncJournal = () => {\n journal.set(journalKeys.state, status.state, { override: true });\n journal.set(journalKeys.failures, status.failures, { override: true });\n };\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 status.halfOpenProbeInFlight = false;\n } else {\n // Set journal values before throwing\n syncJournal();\n throw new CircuitBreakerOpenError(\n `Circuit is OPEN for task \"${taskId}\"`,\n );\n }\n }\n\n let acquiredHalfOpenProbe = false;\n if (status.state === CircuitBreakerState.HALF_OPEN) {\n if (status.halfOpenProbeInFlight) {\n syncJournal();\n throw new CircuitBreakerOpenError(\n `Circuit is HALF_OPEN for task \"${taskId}\" (probe in progress)`,\n );\n }\n status.halfOpenProbeInFlight = true;\n acquiredHalfOpenProbe = true;\n }\n\n // Set journal values before executing\n syncJournal();\n\n try {\n const result = await next(task!.input);\n\n // If successful, we reset the failures counter\n if (status.state === CircuitBreakerState.CLOSED) {\n status.failures = 0;\n }\n\n if (status.state === CircuitBreakerState.HALF_OPEN) {\n status.state = CircuitBreakerState.CLOSED;\n status.failures = 0;\n status.lastFailureTime = 0;\n }\n\n syncJournal();\n return result;\n } catch (error) {\n if (status.state === CircuitBreakerState.HALF_OPEN) {\n status.state = CircuitBreakerState.OPEN;\n status.failures = Math.max(status.failures + 1, failureThreshold);\n status.lastFailureTime = Date.now();\n } else {\n status.failures++;\n status.lastFailureTime = Date.now();\n\n if (status.state === CircuitBreakerState.CLOSED) {\n if (status.failures >= failureThreshold) {\n status.state = CircuitBreakerState.OPEN;\n }\n }\n }\n\n syncJournal();\n throw error;\n } finally {\n if (acquiredHalfOpenProbe) {\n status.halfOpenProbeInFlight = false;\n }\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 removeListenerById(id: string): void {\n const removedFromGlobal = this.removeFromListeners(\n this.globalListeners,\n id,\n );\n const affectedEventIds: string[] = [];\n\n for (const [eventId, listeners] of this.listeners.entries()) {\n const removed = this.removeFromListeners(listeners, id);\n if (!removed) {\n continue;\n }\n\n affectedEventIds.push(eventId);\n if (listeners.length === 0) {\n this.listeners.delete(eventId);\n }\n }\n\n if (removedFromGlobal) {\n this.invalidateCache();\n return;\n }\n\n for (const eventId of affectedEventIds) {\n this.invalidateCache(eventId);\n }\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 // The cache is invalidated on mutation, so returning it directly is safe.\n // Callers that mutate (e.g. parallel batching) must copy themselves.\n return cached;\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 private removeFromListeners(\n listeners: IListenerStorage[],\n id: string,\n ): boolean {\n let removed = false;\n let writeIndex = 0;\n\n for (let readIndex = 0; readIndex < listeners.length; readIndex++) {\n const listener = listeners[readIndex];\n if (listener.id === id) {\n removed = true;\n continue;\n }\n listeners[writeIndex++] = listener;\n }\n\n if (removed) {\n listeners.length = writeIndex;\n }\n\n return removed;\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 {\n EventEmissionFailureMode,\n IEventEmission,\n IEventEmitReport,\n IEventListenerError,\n} from \"../../defs\";\nimport { IListenerStorage } from \"./types\";\n\ninterface ExecuteOptions {\n listeners: IListenerStorage[];\n event: IEventEmission<any>;\n isPropagationStopped?: () => boolean;\n failureMode: EventEmissionFailureMode;\n}\n\nfunction toListenerError(\n error: unknown,\n listener: IListenerStorage,\n): IEventListenerError {\n const errObj: IEventListenerError =\n error && typeof error === \"object\"\n ? (error as IEventListenerError)\n : new Error(String(error));\n\n if (errObj.listenerId === undefined) {\n errObj.listenerId = listener.id;\n }\n if (errObj.listenerOrder === undefined) {\n errObj.listenerOrder = listener.order;\n }\n return errObj;\n}\n\nfunction createReport(totalListeners: number): IEventEmitReport {\n return {\n totalListeners,\n attemptedListeners: 0,\n skippedListeners: 0,\n succeededListeners: 0,\n failedListeners: 0,\n propagationStopped: false,\n errors: [],\n };\n}\n\nfunction createAggregateError(\n errors: IEventListenerError[],\n message: string,\n): Error {\n return Object.assign(new Error(message), {\n errors,\n name: \"AggregateError\",\n cause: errors[0],\n });\n}\n\nexport async function executeSequentially({\n listeners,\n event,\n isPropagationStopped,\n failureMode,\n}: ExecuteOptions): Promise<IEventEmitReport> {\n const report = createReport(listeners.length);\n\n for (const listener of listeners) {\n if (isPropagationStopped?.()) {\n report.propagationStopped = true;\n break;\n }\n\n if (shouldExecuteListener(listener, event)) {\n report.attemptedListeners += 1;\n try {\n await listener.handler(event);\n report.succeededListeners += 1;\n } catch (error) {\n const errObj = toListenerError(error, listener);\n report.failedListeners += 1;\n report.errors.push(errObj);\n if (failureMode === EventEmissionFailureMode.FailFast) {\n throw errObj;\n }\n }\n } else {\n report.skippedListeners += 1;\n }\n }\n\n report.propagationStopped =\n report.propagationStopped || event.isPropagationStopped();\n return report;\n}\n\nexport async function executeInParallel({\n listeners,\n event,\n failureMode,\n}: Omit<ExecuteOptions, \"isPropagationStopped\">): Promise<IEventEmitReport> {\n const report = createReport(listeners.length);\n\n if (listeners.length === 0 || event.isPropagationStopped()) {\n report.propagationStopped = event.isPropagationStopped();\n return report;\n }\n\n let currentOrder = listeners[0].order;\n let currentBatch: typeof listeners = [];\n\n const executeBatch = async (batch: typeof listeners): Promise<void> => {\n const results = await Promise.allSettled(\n batch.map(async (listener) => {\n if (!shouldExecuteListener(listener, event)) {\n report.skippedListeners += 1;\n return;\n }\n\n report.attemptedListeners += 1;\n try {\n await listener.handler(event);\n report.succeededListeners += 1;\n } catch (error) {\n const errObj = toListenerError(error, listener);\n report.failedListeners += 1;\n report.errors.push(errObj);\n throw errObj;\n }\n }),\n );\n\n const errorsInBatch = results.filter(\n (result): result is PromiseRejectedResult => result.status === \"rejected\",\n ).length;\n if (\n errorsInBatch > 0 &&\n failureMode === EventEmissionFailureMode.FailFast\n ) {\n const batchErrors = report.errors.slice(-errorsInBatch);\n if (batchErrors.length === 1) {\n throw batchErrors[0];\n }\n throw createAggregateError(\n batchErrors,\n `${batchErrors.length} listeners failed in parallel batch`,\n );\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 report.propagationStopped = true;\n break;\n }\n }\n currentBatch.push(listener);\n }\n\n if (currentBatch.length > 0 && !event.isPropagationStopped()) {\n await executeBatch(currentBatch);\n }\n\n report.propagationStopped =\n report.propagationStopped || event.isPropagationStopped();\n return report;\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 hasSameSourceInCycle = currentStack\n .slice(cycleStart)\n .some((f) => f.source === source);\n const isSafeReEmit =\n top.id === frame.id &&\n currentHookId &&\n currentHookId === source &&\n top.source !== source &&\n !hasSameSourceInCycle;\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 EventEmissionFailureMode,\n DependencyValuesType,\n EventHandlerType,\n IEvent,\n IEventEmission,\n IEventEmitOptions,\n IEventEmitReport,\n} from \"../defs\";\nimport { lockedError, validationError } from \"../errors\";\nimport { IHook } from \"../types/hook\";\nimport {\n EventEmissionInterceptor,\n HandlerOptionsDefaults,\n HookExecutionInterceptor,\n IEventHandlerOptions,\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 // 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\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 async emit<TInput>(\n eventDefinition: IEvent<TInput>,\n data: TInput,\n source: string,\n options: IEventEmitOptions & { report: true },\n ): Promise<IEventEmitReport>;\n async emit<TInput>(\n eventDefinition: IEvent<TInput>,\n data: TInput,\n source: string,\n options?: IEventEmitOptions,\n ): Promise<void | IEventEmitReport>;\n async emit<TInput>(\n eventDefinition: IEvent<TInput>,\n data: TInput,\n source: string,\n options?: IEventEmitOptions,\n ): Promise<void | IEventEmitReport> {\n const result = await this.emitAndReturnEmission({\n eventDefinition,\n data,\n source,\n options,\n });\n if (options?.report) {\n return result.report;\n }\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 result = await this.emitAndReturnEmission({\n eventDefinition,\n data,\n source,\n });\n return result.emission.data as TInput;\n }\n\n private async emitAndReturnEmission<TInput>(params: {\n eventDefinition: IEvent<TInput>;\n data: TInput;\n source: string;\n options?: IEventEmitOptions;\n }): Promise<{ emission: IEventEmission<TInput>; report: IEventEmitReport }> {\n const { eventDefinition, source } = params;\n let { data } = params;\n const configuredFailureMode =\n params.options?.failureMode ?? EventEmissionFailureMode.FailFast;\n const shouldThrow = params.options?.throwOnError ?? true;\n const failureMode =\n !shouldThrow &&\n configuredFailureMode === EventEmissionFailureMode.FailFast\n ? EventEmissionFailureMode.Aggregate\n : configuredFailureMode;\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<{\n emission: IEventEmission<TInput>;\n report: IEventEmitReport;\n }> => {\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<IEventEmitReport> => {\n if (allListeners.length === 0) {\n return {\n totalListeners: 0,\n attemptedListeners: 0,\n skippedListeners: 0,\n succeededListeners: 0,\n failedListeners: 0,\n propagationStopped: eventToEmit.isPropagationStopped(),\n errors: [],\n };\n }\n\n if (eventDefinition.parallel) {\n return executeInParallel({\n listeners: allListeners,\n event: eventToEmit,\n failureMode,\n });\n } else {\n return executeSequentially({\n listeners: allListeners,\n event: eventToEmit,\n isPropagationStopped: () => propagationStopped,\n failureMode,\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 let executionReport: IEventEmitReport = {\n totalListeners: allListeners.length,\n attemptedListeners: 0,\n skippedListeners: 0,\n succeededListeners: 0,\n failedListeners: 0,\n propagationStopped: false,\n errors: [],\n };\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 executionReport = await baseEmit(eventToEmit);\n return;\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 if (\n shouldThrow &&\n failureMode === EventEmissionFailureMode.Aggregate &&\n executionReport.errors.length > 0\n ) {\n if (executionReport.errors.length === 1) {\n throw executionReport.errors[0];\n }\n throw Object.assign(\n new Error(`${executionReport.errors.length} listeners failed`),\n {\n name: \"AggregateError\",\n errors: executionReport.errors,\n cause: executionReport.errors[0],\n },\n );\n }\n return {\n emission: deepestEvent as IEventEmission<TInput>,\n report: executionReport,\n };\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 * Removes listeners registered with the provided listener id.\n */\n removeListenerById(id: string): void {\n this.checkLock();\n this.registry.removeListenerById(id);\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// 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\";\nimport {\n semaphoreInvalidPermitsError,\n semaphoreNonIntegerPermitsError,\n semaphoreDisposedError,\n semaphoreAcquireTimeoutError,\n cancellationError,\n} from \"../errors\";\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 semaphoreInvalidPermitsError.throw({ maxPermits });\n }\n if (!Number.isInteger(maxPermits)) {\n semaphoreNonIntegerPermitsError.throw({ maxPermits });\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 semaphoreDisposedError.throw();\n }\n\n if (options?.signal?.aborted) {\n cancellationError.throw({ reason: \"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 try {\n semaphoreAcquireTimeoutError.throw({ timeoutMs: options.timeout! });\n } catch (error: unknown) {\n operation.reject(error as Error);\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 try {\n cancellationError.throw({ reason: \"Operation was aborted\" });\n } catch (error: unknown) {\n operation.reject(error as Error);\n }\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 try {\n semaphoreDisposedError.throw();\n } catch (e: unknown) {\n operation.reject(e as Error);\n }\n }\n\n this.emit(\"disposed\");\n this.activeListeners.clear();\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 const listenerId = `semaphore-listener-${id}`;\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: listenerId,\n filter: () => this.activeListeners.has(id),\n },\n );\n\n return () => {\n this.activeListeners.delete(id);\n this.eventManager.removeListenerById(listenerId);\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 const listenerId = `semaphore-listener-once-${id}`;\n\n this.eventManager.addListener(\n eventDef,\n (emission: IEventEmission<SemaphoreEvent>) => {\n if (this.activeListeners.has(id)) {\n this.activeListeners.delete(id);\n this.eventManager.removeListenerById(listenerId);\n handler(emission.data);\n }\n },\n {\n id: listenerId,\n filter: () => this.activeListeners.has(id),\n },\n );\n\n return () => {\n this.activeListeners.delete(id);\n this.eventManager.removeListenerById(listenerId);\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\";\nimport { middlewareConcurrencyConflictError } from \"../../errors\";\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 semaphores: Set<Semaphore>;\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 semaphores: new Set<Semaphore>(),\n }),\n dispose: async (state) => {\n for (const semaphore of state.semaphores) {\n semaphore.dispose();\n }\n state.semaphores.clear();\n state.semaphoresByKey.clear();\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 throws: [middlewareConcurrencyConflictError],\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 middlewareConcurrencyConflictError.throw({\n key: config.key,\n existingLimit: existing.limit,\n attemptedLimit: config.limit,\n });\n }\n semaphore = existing.semaphore;\n } else {\n semaphore = new Semaphore(config.limit);\n state.semaphores.add(semaphore);\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.semaphores.add(semaphore);\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\";\nimport { RunnerError } from \"../../definers/defineError\";\nimport { middlewareRateLimitExceededError, RunnerErrorId } from \"../../errors\";\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 RunnerError<{ message: string }> {\n constructor(message: string) {\n super(\n RunnerErrorId.MiddlewareRateLimitExceeded,\n message,\n { message },\n middlewareRateLimitExceededError.httpCode,\n );\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 throws: [middlewareRateLimitExceededError],\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\";\nimport { middlewareTemporalDisposedError } from \"../../errors\";\n\nexport interface TemporalMiddlewareConfig {\n ms: number;\n}\n\ntype TimeoutHandle = ReturnType<typeof setTimeout>;\n\nexport interface DebounceState {\n timeoutId?: TimeoutHandle;\n latestInput?: unknown;\n resolveList: ((value: unknown) => void)[];\n rejectList: ((error: unknown) => void)[];\n}\n\nexport interface ThrottleState {\n lastExecution: number;\n timeoutId?: TimeoutHandle;\n latestInput?: unknown;\n resolveList: ((value: unknown) => void)[];\n rejectList: ((error: unknown) => void)[];\n currentPromise?: Promise<unknown>;\n}\n\nexport interface TemporalResourceState {\n debounceStates: WeakMap<TemporalMiddlewareConfig, DebounceState>;\n throttleStates: WeakMap<TemporalMiddlewareConfig, ThrottleState>;\n trackedDebounceStates: Set<DebounceState>;\n trackedThrottleStates: Set<ThrottleState>;\n isDisposed: boolean;\n}\n\nconst TEMPORAL_DISPOSED_ERROR_MESSAGE =\n \"Temporal middleware resource has been disposed.\";\n\nfunction createTemporalDisposedError() {\n return middlewareTemporalDisposedError.create({\n message: TEMPORAL_DISPOSED_ERROR_MESSAGE,\n });\n}\n\nfunction rejectDebounceState(state: DebounceState, error: Error) {\n if (state.timeoutId) {\n clearTimeout(state.timeoutId);\n state.timeoutId = undefined;\n }\n\n const { rejectList } = state;\n state.resolveList = [];\n state.rejectList = [];\n state.latestInput = undefined;\n rejectList.forEach((reject) => {\n reject(error);\n });\n}\n\nfunction rejectThrottleState(state: ThrottleState, error: Error) {\n if (state.timeoutId) {\n clearTimeout(state.timeoutId);\n state.timeoutId = undefined;\n }\n\n const { rejectList } = state;\n state.resolveList = [];\n state.rejectList = [];\n state.latestInput = undefined;\n state.currentPromise = undefined;\n rejectList.forEach((reject) => {\n reject(error);\n });\n}\n\nexport const temporalResource = defineResource({\n id: \"globals.resources.temporal\",\n tags: [globalTags.system],\n init: async (): Promise<TemporalResourceState> => {\n return {\n debounceStates: new WeakMap<TemporalMiddlewareConfig, DebounceState>(),\n throttleStates: new WeakMap<TemporalMiddlewareConfig, ThrottleState>(),\n trackedDebounceStates: new Set<DebounceState>(),\n trackedThrottleStates: new Set<ThrottleState>(),\n isDisposed: false,\n };\n },\n dispose: async (state: TemporalResourceState) => {\n state.isDisposed = true;\n const disposeError = createTemporalDisposedError();\n const trackedDebounceStates =\n state.trackedDebounceStates ?? new Set<DebounceState>();\n const trackedThrottleStates =\n state.trackedThrottleStates ?? new Set<ThrottleState>();\n\n trackedDebounceStates.forEach((debounceState) => {\n rejectDebounceState(debounceState, disposeError);\n });\n\n trackedThrottleStates.forEach((throttleState) => {\n rejectThrottleState(throttleState, disposeError);\n });\n\n trackedDebounceStates.clear();\n trackedThrottleStates.clear();\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 throws: [middlewareTemporalDisposedError],\n dependencies: { state: temporalResource },\n async run({ task, next }, { state }, config: TemporalMiddlewareConfig) {\n if (state.isDisposed === true) {\n throw createTemporalDisposedError();\n }\n\n const debounceStates = state.debounceStates;\n const trackedDebounceStates =\n state.trackedDebounceStates ??\n (state.trackedDebounceStates = new Set<DebounceState>());\n let debounceState = debounceStates.get(config);\n if (!debounceState) {\n debounceState = {\n resolveList: [],\n rejectList: [],\n };\n debounceStates.set(config, debounceState);\n trackedDebounceStates.add(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 if (state.isDisposed === true) {\n const disposeError = createTemporalDisposedError();\n rejectList.forEach((reject) => {\n reject(disposeError);\n });\n return;\n }\n\n try {\n const result = await next(latestInput);\n resolveList.forEach((resolve) => {\n resolve(result);\n });\n } catch (error) {\n rejectList.forEach((reject) => {\n reject(error);\n });\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 throws: [middlewareTemporalDisposedError],\n dependencies: { state: temporalResource },\n async run({ task, next }, { state }, config: TemporalMiddlewareConfig) {\n if (state.isDisposed === true) {\n throw createTemporalDisposedError();\n }\n\n const throttleStates = state.throttleStates;\n const trackedThrottleStates =\n state.trackedThrottleStates ??\n (state.trackedThrottleStates = new Set<ThrottleState>());\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 trackedThrottleStates.add(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: unknown) => void> = [];\n let pendingRejects: Array<(error: unknown) => 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) => {\n resolve(result);\n });\n return result;\n } catch (error) {\n pendingRejects.forEach((reject) => {\n reject(error);\n });\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 throttleState!.latestInput = undefined;\n\n if (state.isDisposed === true) {\n const disposeError = createTemporalDisposedError();\n rejectList.forEach((reject) => {\n reject(disposeError);\n });\n return;\n }\n\n try {\n const result = await next(latestInput);\n resolveList.forEach((resolve) => {\n resolve(result);\n });\n } catch (error) {\n rejectList.forEach((reject) => {\n reject(error);\n });\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 { defineResource } from \"../../define\";\nimport type { Logger } from \"../../models/Logger\";\nimport { globalTags } from \"../globalTags\";\n\nexport const loggerResource = 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: [globalTags.system],\n});\n","import { defineResource } from \"../../define\";\nimport type { Store } from \"../../models/Store\";\nimport { globalTags } from \"../globalTags\";\n\nexport const storeResource = 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: [globalTags.system],\n});\n","import { defineResource } from \"../../define\";\nimport type { TaskRunner } from \"../../models/TaskRunner\";\nimport { globalTags } from \"../globalTags\";\n\nexport const taskRunnerResource = 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: [globalTags.system],\n});\n","import { CronExpressionParser } from \"cron-parser\";\nimport { cronConfigurationError } from \"./cron.errors\";\n\ntype CronParseOptions = {\n currentDate?: Date;\n tz?: string;\n};\n\nexport class CronParser {\n static getNextRun(\n expression: string,\n from: Date = new Date(),\n timezone?: string,\n ): Date {\n try {\n const interval = parseExpression(expression, {\n currentDate: from,\n tz: timezone,\n });\n\n return interval.next().toDate();\n } catch {\n return cronConfigurationError.throw({\n message: `Invalid cron expression \\\"${expression}\\\".`,\n });\n }\n }\n\n static isValid(expression: string, timezone?: string): boolean {\n try {\n parseExpression(expression, { tz: timezone });\n return true;\n } catch {\n return false;\n }\n }\n}\n\nfunction parseExpression(expression: string, options?: CronParseOptions) {\n return CronExpressionParser.parse(expression, options);\n}\n","import { defineResource } from \"../../define\";\nimport type { AnyTask, DependencyMapType } from \"../../defs\";\nimport { loggerResource } from \"../resources/logger.resource\";\nimport { storeResource } from \"../resources/store.resource\";\nimport { taskRunnerResource } from \"../resources/taskRunner.resource\";\nimport { globalTags } from \"../globalTags\";\nimport { CronParser } from \"./cron-parser\";\nimport { cronExecutionError } from \"./cron.errors\";\nimport { cronTag } from \"./cron.tag\";\nimport {\n CronOnError,\n CronResourceValue,\n CronScheduledTask,\n CronTagConfig,\n} from \"./types\";\n\ntype CronTimer = ReturnType<typeof setTimeout>;\n\ninterface CronTaskState {\n task: AnyTask;\n config: CronTagConfig;\n timer?: CronTimer;\n stopped: boolean;\n nextRunAt?: Date;\n}\n\ntype CronResourceDependencies = DependencyMapType & {\n store: typeof storeResource;\n logger: typeof loggerResource;\n taskRunner: typeof taskRunnerResource;\n};\n\nexport const cronResource = defineResource<\n void,\n Promise<CronResourceValue>,\n CronResourceDependencies\n>({\n id: \"globals.resources.cron\",\n dependencies: {\n store: storeResource,\n logger: loggerResource,\n taskRunner: taskRunnerResource,\n },\n context: () => ({\n disposed: false,\n stateByTaskId: new Map<string, CronTaskState>(),\n }),\n init: async (_config, { store, logger, taskRunner }, context) => {\n const scopedLogger = logger.with({ source: \"globals.resources.cron\" });\n const scheduledTasks = store.getTasksWithTag(cronTag);\n\n const isSilent = (config: CronTagConfig): boolean => config.silent === true;\n\n const scheduleNext = (taskState: CronTaskState, from: Date): void => {\n if (context.disposed || taskState.stopped) {\n return;\n }\n\n if (taskState.timer) {\n clearTimeout(taskState.timer);\n taskState.timer = undefined;\n }\n\n const nextRunAt = CronParser.getNextRun(\n taskState.config.expression,\n from,\n taskState.config.timezone,\n );\n taskState.nextRunAt = nextRunAt;\n\n const delay = Math.max(0, nextRunAt.getTime() - Date.now());\n const timer = setTimeout(() => {\n void executeTask(taskState);\n }, delay);\n timer.unref?.();\n taskState.timer = timer;\n };\n\n const executeTask = async (taskState: CronTaskState): Promise<void> => {\n if (context.disposed || taskState.stopped) {\n return;\n }\n\n if (!isSilent(taskState.config)) {\n await scopedLogger.info(\n `Running cron task \"${taskState.task.id}\" (${taskState.config.expression}).`,\n {\n data: {\n taskId: taskState.task.id,\n expression: taskState.config.expression,\n timezone: taskState.config.timezone,\n scheduledAt: taskState.nextRunAt?.toISOString(),\n },\n },\n );\n }\n\n try {\n await taskRunner.run(taskState.task, taskState.config.input);\n } catch (error) {\n const normalizedError =\n error instanceof Error\n ? error\n : cronExecutionError.new({\n taskId: taskState.task.id,\n expression: taskState.config.expression,\n message: String(error),\n });\n\n if (!isSilent(taskState.config)) {\n await scopedLogger.error(\n `Cron task \"${taskState.task.id}\" failed during execution.`,\n {\n error: normalizedError,\n data: {\n taskId: taskState.task.id,\n expression: taskState.config.expression,\n onError: taskState.config.onError || CronOnError.Continue,\n },\n },\n );\n }\n\n if (\n (taskState.config.onError || CronOnError.Continue) ===\n CronOnError.Stop\n ) {\n taskState.stopped = true;\n if (taskState.timer) {\n clearTimeout(taskState.timer);\n taskState.timer = undefined;\n }\n return;\n }\n }\n\n scheduleNext(taskState, new Date());\n };\n\n for (const task of scheduledTasks) {\n const config = getCronConfig(task);\n if (config.enabled === false) {\n if (!isSilent(config)) {\n await scopedLogger.info(\n `Cron task \"${task.id}\" is disabled and will not be scheduled.`,\n {\n data: {\n taskId: task.id,\n expression: config.expression,\n },\n },\n );\n }\n continue;\n }\n\n if (!CronParser.isValid(config.expression, config.timezone)) {\n return cronExecutionError.throw({\n taskId: task.id,\n expression: config.expression,\n message: \"Invalid cron expression configuration.\",\n });\n }\n\n if (!isSilent(config)) {\n await scopedLogger.info(\n `Cron task \"${task.id}\" started with expression \"${config.expression}\".`,\n {\n data: {\n taskId: task.id,\n expression: config.expression,\n timezone: config.timezone,\n immediate: !!config.immediate,\n onError: config.onError || CronOnError.Continue,\n },\n },\n );\n }\n\n const taskState: CronTaskState = {\n task,\n config,\n stopped: false,\n };\n context.stateByTaskId.set(task.id, taskState);\n\n if (config.immediate) {\n void executeTask(taskState);\n } else {\n scheduleNext(taskState, new Date());\n }\n }\n\n const toPublicState = (\n map: Map<string, CronTaskState>,\n ): ReadonlyMap<string, CronScheduledTask> => {\n return new Map(\n Array.from(map.entries()).map(([taskId, state]) => {\n return [\n taskId,\n {\n taskId,\n expression: state.config.expression,\n timezone: state.config.timezone,\n nextRunAt: state.nextRunAt,\n enabled: state.config.enabled !== false,\n stopped: state.stopped,\n },\n ];\n }),\n );\n };\n\n return {\n get schedules() {\n return toPublicState(context.stateByTaskId);\n },\n };\n },\n dispose: async (_value, _config, _deps, context) => {\n context.disposed = true;\n\n for (const state of context.stateByTaskId.values()) {\n if (state.timer) {\n clearTimeout(state.timer);\n }\n state.timer = undefined;\n state.stopped = true;\n }\n\n context.stateByTaskId.clear();\n },\n tags: [globalTags.system],\n meta: {\n title: \"Cron Scheduler\",\n description:\n \"Discovers tasks tagged with globals.tags.cron and schedules them with resilient timer-based execution.\",\n },\n});\n\nfunction getCronConfig(task: AnyTask): CronTagConfig {\n const config = cronTag.extract(task);\n if (!config) {\n return cronExecutionError.throw({\n taskId: task.id,\n expression: \"<missing>\",\n message:\n \"Cron tag is missing configuration. Use globals.tags.cron.with({ expression: ... }).\",\n });\n }\n\n return config;\n}\n","import { getPlatform } from \"../platform\";\nimport { EventManager } from \"./EventManager\";\nimport { defineEvent } from \"../definers/defineEvent\";\nimport { IEventDefinition, IEventEmission } from \"../defs\";\nimport {\n queueDisposedError,\n queueDeadlockError,\n cancellationError,\n} from \"../errors\";\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 pendingTaskCount = 0;\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 try {\n queueDisposedError.throw();\n } catch (e) {\n return Promise.reject(e);\n }\n }\n\n // 2. detect dead‑locks (a queued task adding another queued task)\n if (this.hasAsyncLocalStorage && this.executionContext.getStore()) {\n try {\n queueDeadlockError.throw();\n } catch (e) {\n return Promise.reject(e);\n }\n }\n\n const { signal } = this.abortController;\n const taskId = this.nextTaskId++;\n this.pendingTaskCount += 1;\n this.emit(\"enqueue\", taskId);\n\n // 3. chain task after the current tail\n const result = this.tail.then(() => {\n if (signal.aborted) {\n this.emit(\"cancel\", taskId);\n cancellationError.throw({ reason: \"Operation was aborted\" });\n }\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.pendingTaskCount -= 1;\n this.emit(\"finish\", taskId);\n return value;\n })\n .catch((error) => {\n this.pendingTaskCount -= 1;\n this.emit(\"error\", taskId, error as Error);\n })\n .finally(() => {\n if (this.pendingTaskCount === 0) {\n // Break the settled chain so long-lived queues do not retain every historical task.\n this.tail = Promise.resolve();\n }\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 this.abortController = new AbortController();\n\n this.activeListeners.clear();\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 const listenerId = `queue-listener-${id}`;\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: listenerId,\n filter: () => this.activeListeners.has(id),\n },\n );\n\n return () => {\n this.activeListeners.delete(id);\n this.eventManager.removeListenerById(listenerId);\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 const listenerId = `queue-listener-once-${id}`;\n\n this.eventManager.addListener(\n eventDef,\n (emission: IEventEmission<QueueEvent>) => {\n if (this.activeListeners.has(id)) {\n this.activeListeners.delete(id);\n this.eventManager.removeListenerById(listenerId);\n handler(emission.data);\n }\n },\n {\n id: listenerId,\n filter: () => this.activeListeners.has(id),\n },\n );\n\n return () => {\n this.activeListeners.delete(id);\n this.eventManager.removeListenerById(listenerId);\n };\n }\n\n isIdle(): boolean {\n return this.pendingTaskCount === 0;\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\nconst IDLE_QUEUE_EVICTION_MS = 60_000;\n\ntype CleanupTimer = ReturnType<typeof setTimeout>;\n\nexport const queueResource = defineResource({\n id: \"globals.resources.queue\",\n context: () => ({\n disposed: false,\n map: new Map<string, Queue>(),\n cleanupTimers: new Map<string, CleanupTimer>(),\n }),\n init: async (_, _deps, context) => {\n const map = context.map;\n const cleanupTimers = context.cleanupTimers;\n\n const clearCleanupTimer = (id: string): void => {\n const timer = cleanupTimers.get(id);\n if (!timer) return;\n clearTimeout(timer);\n cleanupTimers.delete(id);\n };\n\n const disposeQueue = (id: string, queue: Queue): void => {\n clearCleanupTimer(id);\n map.delete(id);\n void queue.dispose();\n };\n\n const scheduleIdleCleanup = (id: string): void => {\n const queue = map.get(id);\n if (!queue || !queue.isIdle()) return;\n\n clearCleanupTimer(id);\n const timer = setTimeout(() => {\n const current = map.get(id);\n if (!current || !current.isIdle()) {\n cleanupTimers.delete(id);\n return;\n }\n disposeQueue(id, current);\n }, IDLE_QUEUE_EVICTION_MS);\n timer.unref?.();\n cleanupTimers.set(id, timer);\n };\n\n const getOrCreateQueue = (id: string): Queue => {\n const existing = map.get(id);\n if (existing) return existing;\n\n const queue = new Queue();\n queue.on(\"finish\", () => {\n scheduleIdleCleanup(id);\n });\n queue.on(\"error\", () => {\n scheduleIdleCleanup(id);\n });\n queue.on(\"disposed\", () => {\n clearCleanupTimer(id);\n map.delete(id);\n });\n\n map.set(id, queue);\n return queue;\n };\n\n return {\n map,\n run: <T>(\n id: string,\n task: (signal: AbortSignal) => Promise<T>,\n ): Promise<T> => {\n if (context.disposed) {\n return Promise.reject(new Error(\"Queue resource has been disposed\"));\n }\n\n clearCleanupTimer(id);\n const queue = getOrCreateQueue(id);\n\n return queue.run(task);\n },\n };\n },\n dispose: async (_value, _, _deps, context) => {\n context.disposed = true;\n context.cleanupTimers.forEach((timer) => {\n clearTimeout(timer);\n });\n context.cleanupTimers.clear();\n context.map.forEach((queue) => {\n void queue.dispose();\n });\n context.map.clear();\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 { defineResource } from \"../../define\";\nimport { globalTags } from \"../globalTags\";\nimport type { RunResult } from \"../../models/RunResult\";\n\nconst systemTag = globalTags.system;\n\nexport const runtimeResource = defineResource<\n void,\n Promise<RunResult<unknown>>\n>({\n id: \"globals.resources.runtime\",\n meta: {\n title: \"Runtime Services\",\n description:\n \"Safe runtime facade for advanced in-resource operations (task/event execution, resource reads, root helpers).\",\n },\n tags: [systemTag],\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","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\";\nimport { httpBaseUrlRequiredError, httpFetchUnavailableError } from \"./errors\";\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 // Security: prevent automatic redirects from forwarding tunnel auth headers.\n redirect: \"error\",\n });\n\n const text = await res.text();\n const status =\n typeof (res as { status?: unknown }).status === \"number\"\n ? (res as { status: number }).status\n : 200;\n const statusText =\n typeof (res as { statusText?: unknown }).statusText === \"string\"\n ? (res as { statusText: string }).statusText\n : \"\";\n const ok =\n typeof (res as { ok?: unknown }).ok === \"boolean\"\n ? (res as { ok: boolean }).ok\n : status >= 200 && status < 300;\n const contentType =\n typeof (res as { headers?: { get?: (name: string) => string | null } })\n .headers?.get === \"function\"\n ? ((\n res as { headers: { get: (name: string) => string | null } }\n ).headers.get(\"content-type\") ?? undefined)\n : undefined;\n\n if (!text) {\n if (!ok) {\n throw new TunnelError(\n \"HTTP_ERROR\",\n statusText\n ? `Tunnel HTTP ${status} ${statusText}`\n : `Tunnel HTTP ${status}`,\n { statusCode: status, statusText, contentType },\n { httpCode: status },\n );\n }\n // The endpoint returned an empty 2xx body — no payload to parse.\n // Callers that expect void/undefined return are safe; typed return T requires the cast.\n return undefined as T;\n }\n\n try {\n const json = serializer.parse<T>(text);\n return json;\n } catch (error) {\n if (!ok) {\n throw new TunnelError(\n \"HTTP_ERROR\",\n statusText\n ? `Tunnel HTTP ${status} ${statusText}`\n : `Tunnel HTTP ${status}`,\n {\n statusCode: status,\n statusText,\n contentType,\n bodyPreview: text.slice(0, 512),\n },\n { httpCode: status },\n );\n }\n throw error;\n }\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) {\n httpBaseUrlRequiredError.throw({ clientFactory: \"createExposureFetch\" });\n }\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 httpFetchUnavailableError.throw({ clientFactory: \"createExposureFetch\" });\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 \"./tools/buildUniversalManifest\";\nimport type { IAsyncContext } from \"./types/asyncContext\";\nimport type { IErrorHelper } from \"./types/error\";\nimport {\n httpBaseUrlRequiredError,\n httpClientInputUnsupportedError,\n httpContextSerializationError,\n httpEventWithResultUnavailableError,\n} from \"./errors\";\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\nfunction buildContextHeaderOrThrow(\n serializer: SerializerLike,\n contexts?: Array<IAsyncContext<unknown>>,\n): string | undefined {\n if (!contexts || contexts.length === 0) return undefined;\n\n const map: Record<string, string> = {};\n for (const ctx of contexts) {\n try {\n const value = ctx.use();\n map[ctx.id] = ctx.serialize(value);\n } catch (error) {\n const normalizedError =\n error instanceof Error ? error : new Error(String(error));\n httpContextSerializationError.throw({\n contextId: ctx.id,\n reason: normalizedError.message,\n });\n }\n }\n\n return serializer.stringify(map);\n}\n\n/**\n * Re-throws the caught error. When an error registry is configured,\n * checks for a matching typed-error helper and re-throws via that helper first.\n */\nfunction rethrowWithRegistry(\n e: unknown,\n errorRegistry: Map<string, IErrorHelper<any>> | undefined,\n): never {\n const te = e as { id?: unknown; data?: unknown; name?: unknown };\n if (errorRegistry && te.id && te.data) {\n const id = String(te.id);\n // Idempotency: if the error already looks like a typed Runner error\n // from this registry, do not remap it again.\n if (te.name === id && errorRegistry.has(id)) {\n throw e;\n }\n const helper = errorRegistry.get(id);\n if (helper) helper.throw(te.data);\n }\n throw e;\n}\n\nexport function createHttpClient(cfg: HttpClientConfig): HttpClient {\n const baseUrl = cfg.baseUrl.replace(/\\/$/, \"\");\n if (!baseUrl) {\n httpBaseUrlRequiredError.throw({ clientFactory: \"createHttpClient\" });\n }\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, filename);\n }\n const headers = toHeaders(cfg.auth);\n const contextHeader = buildContextHeaderOrThrow(\n cfg.serializer,\n cfg.contexts,\n );\n if (contextHeader) headers[\"x-runner-context\"] = contextHeader;\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, {\n method: \"POST\",\n body: fd,\n headers,\n // Security: prevent automatic redirects from forwarding tunnel auth headers.\n redirect: \"error\",\n });\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 httpClientInputUnsupportedError.throw({\n message:\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 rethrowWithRegistry(e, cfg.errorRegistry);\n }\n }\n\n // If Node files were detected, instruct user to use Node clients\n if (manifest.nodeFiles.length > 0) {\n httpClientInputUnsupportedError.throw({\n message:\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 rethrowWithRegistry(e, cfg.errorRegistry);\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 rethrowWithRegistry(e, cfg.errorRegistry);\n }\n },\n\n async eventWithResult<P>(id: string, payload?: P): Promise<P> {\n try {\n if (!fetchClient.eventWithResult) {\n httpEventWithResultUnavailableError.throw({\n clientFactory: \"createHttpClient\",\n });\n }\n return await fetchClient.eventWithResult!<P>(id, payload);\n } catch (e) {\n rethrowWithRegistry(e, cfg.errorRegistry);\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 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 { 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 { 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 { loggerResource as logger } from \"../logger.resource\";\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,\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 { loggerResource as logger } from \"../logger.resource\";\nimport { storeResource as store } from \"../store.resource\";\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,\n debugConfig,\n 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 try {\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 } catch (error) {\n try {\n await logger.error(String(error), {\n error,\n });\n } catch {\n // Best-effort error logging; do not overshadow the original task error\n }\n throw error;\n }\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,\n debugConfig,\n 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 type { MiddlewareManager } from \"../../models/MiddlewareManager\";\nimport { globalTags } from \"../globalTags\";\n\nexport const middlewareManagerResource = defineResource<\n void,\n Promise<MiddlewareManager>\n>({\n id: \"globals.resources.middlewareManager\",\n meta: {\n title: \"Middleware Manager\",\n description: \"Manages all middleware and middleware interceptors.\",\n },\n tags: [globalTags.system],\n});\n","import { defineResource } from \"../../../define\";\nimport { loggerResource as logger } from \"../logger.resource\";\nimport { middlewareManagerResource as middlewareManager } from \"../middlewareManager.resource\";\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,\n debugConfig,\n 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 type { EventManager } from \"../../models/EventManager\";\nimport { globalTags } from \"../globalTags\";\n\nexport const eventManagerResource = defineResource<void, Promise<EventManager>>(\n {\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: [globalTags.system],\n dispose: async (eventManager) => {\n eventManager.dispose();\n },\n },\n);\n","import { defineResource } from \"../../../define\";\nimport { loggerResource as logger } from \"../logger.resource\";\nimport { eventManagerResource as eventManager } from \"../eventManager.resource\";\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,\n debugConfig,\n 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 { defineResource } from \"../../define\";\nimport type { SerializerLike as Serializer } from \"../../serializer\";\nimport { globalTags } from \"../globalTags\";\n\nexport const serializerResource = 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: [globalTags.system],\n});\n","import { 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 { cronResource as cron } from \"./cron/cron.resource\";\nimport { queueResource } from \"./resources/queue.resource\";\nimport { runtimeResource } from \"./resources/runtime.resource\";\nimport { httpClientFactory } from \"./resources/httpClientFactory.resource\";\nimport { storeResource } from \"./resources/store.resource\";\nimport { debugResource as debug } from \"./resources/debug/debug.resource\";\nimport { serializerResource as serializer } from \"./resources/serializer.resource\";\nimport { loggerResource as logger } from \"./resources/logger.resource\";\nimport { middlewareManagerResource as middlewareManager } from \"./resources/middlewareManager.resource\";\nimport { eventManagerResource as eventManager } from \"./resources/eventManager.resource\";\nimport { taskRunnerResource as taskRunner } from \"./resources/taskRunner.resource\";\n\nexport { storeResource as store, serializer };\n\nexport const globalResources = {\n store: storeResource,\n middlewareManager,\n eventManager,\n taskRunner,\n logger,\n debug,\n serializer,\n cache: cacheResource,\n cron,\n queue: queueResource,\n runtime: runtimeResource,\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\";\nimport { RunnerError } from \"../../definers/defineError\";\nimport { middlewareTimeoutError, RunnerErrorId } from \"../../errors\";\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 RunnerError<{ message: string }> {\n constructor(message: string) {\n super(\n RunnerErrorId.MiddlewareTimeout,\n message,\n { message },\n middlewareTimeoutError.httpCode,\n );\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 throws: [middlewareTimeoutError],\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 throws: [middlewareTimeoutError],\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 : getDefaultRetryDelayMs(attempts);\n\n if (delay > 0) {\n const signal = journal.get(\n timeoutJournalKeys.abortController,\n )?.signal;\n await abortableDelay(delay, signal);\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 : getDefaultRetryDelayMs(attempts);\n if (delay > 0) {\n await abortableDelay(delay);\n }\n attempts++;\n }\n }\n },\n});\n\nfunction getDefaultRetryDelayMs(attempt: number): number {\n const baseDelayMs = 100 * Math.pow(2, attempt);\n const jitterMs = Math.floor(Math.random() * Math.max(1, baseDelayMs / 2));\n return baseDelayMs + jitterMs;\n}\n\n/**\n * Delay that can be cancelled via an AbortSignal so retries don't block disposal.\n * @internal Exported for testing only.\n */\nexport function abortableDelay(\n ms: number,\n signal?: AbortSignal,\n): Promise<void> {\n if (!signal) {\n return new Promise((resolve) => setTimeout(resolve, ms));\n }\n if (signal.aborted) return Promise.reject(signal.reason);\n return new Promise<void>((resolve, reject) => {\n const timer = setTimeout(() => {\n signal.removeEventListener(\"abort\", onAbort);\n resolve();\n }, ms);\n function onAbort() {\n clearTimeout(timer);\n reject(signal!.reason);\n }\n signal.addEventListener(\"abort\", onAbort, { once: true });\n });\n}\n","import { defineTaskMiddleware, isTask } from \"../../define\";\nimport type { ITask } from \"../../defs\";\nimport { journal as journalHelper } from \"../../models/ExecutionJournal\";\nimport { globalResources } from \"../globalResources\";\n\ntype FallbackTask = ITask;\ntype FallbackResolver = {\n bivarianceHack(error: unknown, input: unknown): unknown | Promise<unknown>;\n}[\"bivarianceHack\"];\ntype FallbackValue =\n | string\n | number\n | boolean\n | bigint\n | symbol\n | null\n | undefined\n | Record<string, unknown>\n | Array<unknown>;\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: FallbackTask | FallbackResolver | FallbackValue;\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 as FallbackResolver)(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 { 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\ntype CachedTaskRunner = (\n input: unknown,\n journal?: ExecutionJournal,\n) => Promise<unknown>;\n\nexport class TaskRunner {\n protected readonly runnerStore = new Map<string | symbol, CachedTaskRunner>();\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 const canUseCachedRunner = this.store.isLocked;\n let runner = canUseCachedRunner\n ? (this.runnerStore.get(task.id) as\n | ((input: TInput, journal?: ExecutionJournal) => Promise<TOutput>)\n | undefined)\n : undefined;\n if (!runner) {\n runner = this.createRunnerWithMiddleware<TInput, TOutput, TDeps>(task);\n if (canUseCachedRunner) {\n this.runnerStore.set(task.id, runner as CachedTaskRunner);\n }\n }\n\n // Pass journal if provided; composer will use it or create new\n return await runner(input as TInput, options?.journal);\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","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: unknown;\n timestamp: Date;\n error?: {\n name: string;\n message: string;\n stack?: string;\n };\n data?: Record<string, unknown>;\n context?: Record<string, unknown>;\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: string) => LogPrinter.writers.error!(msg);\n }\n return (msg: string) => 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: unknown): 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(\n data?: Record<string, unknown>,\n indentation = \" \",\n ): 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, unknown>,\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: string) => {\n if (typeof console !== \"undefined\" && typeof console.log === \"function\") {\n console.log(msg);\n }\n },\n error: (msg: string) => {\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: string) => void;\n error?: (msg: string) => void;\n } = { ...LogPrinter.DEFAULT_WRITERS };\n\n public static setWriters(\n writers: Partial<{\n log: (msg: string) => void;\n error?: (msg: string) => void;\n }>,\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, unknown>;\n context?: Record<string, unknown>;\n [key: string]: unknown;\n}\n\nexport interface ILog {\n level: LogLevels;\n source?: string;\n message: unknown;\n timestamp: Date;\n error?: {\n name: string;\n message: string;\n stack?: string;\n };\n data?: Record<string, unknown>;\n context?: Record<string, unknown>;\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, unknown> = {};\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, unknown> = {},\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, unknown>;\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: unknown,\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: unknown, logInfo?: ILogInfo) {\n await this.log(\"info\", message, logInfo);\n }\n\n public async error(message: unknown, logInfo?: ILogInfo) {\n await this.log(\"error\", message, logInfo);\n }\n\n public async warn(message: unknown, logInfo?: ILogInfo) {\n await this.log(\"warn\", message, logInfo);\n }\n\n public async debug(message: unknown, logInfo?: ILogInfo) {\n await this.log(\"debug\", message, logInfo);\n }\n\n public async trace(message: unknown, logInfo?: ILogInfo) {\n await this.log(\"trace\", message, logInfo);\n }\n\n public async critical(message: unknown, 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) => void | Promise<void>) {\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 * as utils from \"../../define\";\nimport type { Store } from \"../Store\";\n\n/**\n * Maps a type-guard to its dependency-resolution logic.\n */\nexport interface DependencyStrategy {\n /** Returns true if this strategy handles the given item. */\n matches: (item: unknown) => boolean;\n /** Returns the store map to check existence against (for optional deps). */\n getStoreMap: (store: Store) => Map<string, unknown>;\n}\n\nexport const dependencyStrategies: readonly DependencyStrategy[] = [\n {\n matches: utils.isResource,\n getStoreMap: (store) => store.resources as Map<string, unknown>,\n },\n {\n matches: utils.isTask,\n getStoreMap: (store) => store.tasks as Map<string, unknown>,\n },\n {\n matches: utils.isEvent,\n getStoreMap: (store) => store.events as Map<string, unknown>,\n },\n {\n matches: utils.isError,\n getStoreMap: (store) => store.errors as Map<string, unknown>,\n },\n {\n matches: utils.isAsyncContext,\n getStoreMap: (store) => store.asyncContexts as Map<string, unknown>,\n },\n];\n\n/**\n * Find the matching strategy for a dependency item, or undefined if none matches.\n */\nexport function findDependencyStrategy(\n item: unknown,\n): DependencyStrategy | undefined {\n return dependencyStrategies.find((s) => s.matches(item));\n}\n","import {\n DependencyMapType,\n DependencyValuesType,\n IEvent,\n IEventEmitOptions,\n IResourceMiddleware,\n IResource,\n ITaskMiddleware,\n ITask,\n ResourceDependencyValuesType,\n TaskCallOptions,\n TaskDependencyWithIntercept,\n TaskLocalInterceptor,\n} from \"../../defs\";\nimport { dependencyNotFoundError, unknownItemTypeError } from \"../../errors\";\nimport { EventManager } from \"../EventManager\";\nimport { Logger } from \"../Logger\";\nimport { Store } from \"../Store\";\nimport { TaskRunner } from \"../TaskRunner\";\nimport {\n ResourceStoreElementType,\n TaskLocalInterceptorRecord,\n TaskStoreElementType,\n} from \"../../types/storeTypes\";\nimport * as utils from \"../../define\";\nimport { findDependencyStrategy } from \"../utils/dependencyStrategies\";\nimport type { MiddlewareManager } from \"../MiddlewareManager\";\nimport type {\n ResourceMiddlewareInterceptor,\n TaskMiddlewareInterceptor,\n} from \"../middleware/types\";\n\nconst MIDDLEWARE_MANAGER_RESOURCE_ID = \"globals.resources.middlewareManager\";\n\nexport class DependencyExtractor {\n constructor(\n private readonly store: Store,\n private readonly eventManager: EventManager,\n private readonly taskRunner: TaskRunner,\n private readonly logger: Logger,\n private readonly ensureResourceInitialized: (\n resource: ResourceStoreElementType<any, any, any>,\n ) => Promise<void>,\n ) {}\n\n wrapResourceDependencies<TD extends DependencyMapType>(\n deps: TD,\n extracted: DependencyValuesType<TD>,\n ownerResourceId: string,\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, ownerResourceId)\n : undefined;\n } else if (\n utils.isResource(inner) &&\n inner.id === MIDDLEWARE_MANAGER_RESOURCE_ID\n ) {\n wrapped[key as string] = this.makeOwnerAwareMiddlewareManager(\n value,\n ownerResourceId,\n );\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(\n original,\n ownerResourceId,\n );\n } else if (\n utils.isResource(original) &&\n original.id === MIDDLEWARE_MANAGER_RESOURCE_ID\n ) {\n wrapped[key as string] = this.makeOwnerAwareMiddlewareManager(\n value,\n ownerResourceId,\n );\n } else {\n wrapped[key as string] = value as unknown;\n }\n }\n return wrapped as ResourceDependencyValuesType<TD>;\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 const dependency = map[key];\n if (dependency === undefined) {\n continue;\n }\n\n try {\n object[key] = await this.extractDependency(dependency, source);\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: unknown, source: string) {\n this.logger.trace(\n `Extracting dependency -> ${source} -> ${(object as { id?: string })?.id}`,\n );\n\n let isOpt = false;\n let item: unknown = object;\n\n if (utils.isOptional(object)) {\n isOpt = true;\n item = object.inner;\n }\n\n const itemWithId = item as { id: string };\n const strategy = findDependencyStrategy(item);\n if (!strategy) {\n return unknownItemTypeError.throw({ item });\n }\n\n if (isOpt) {\n const exists = strategy.getStoreMap(this.store).has(itemWithId.id);\n if (!exists) return undefined;\n }\n\n if (utils.isResource(item)) return this.extractResourceDependency(item);\n if (utils.isTask(item)) return this.extractTaskDependency(item);\n if (utils.isEvent(item)) return this.extractEventDependency(item, source);\n\n if (!isOpt) {\n const exists = strategy.getStoreMap(this.store).has(itemWithId.id);\n if (!exists) {\n const label = utils.isError(item) ? \"Error\" : \"AsyncContext\";\n dependencyNotFoundError.throw({ key: `${label} ${itemWithId.id}` });\n }\n }\n\n return item;\n }\n\n extractEventDependency(object: IEvent<any>, source: string) {\n return async (input: unknown, options?: IEventEmitOptions) => {\n return this.eventManager.emit(object, input, source, options);\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 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 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 await this.ensureResourceInitialized(sr);\n\n return sr.value;\n }\n\n private makeTaskWithIntercept<\n I,\n O extends Promise<any>,\n D extends DependencyMapType,\n >(\n original: ITask<I, O, D>,\n ownerResourceId: string,\n ): TaskDependencyWithIntercept<I, O> {\n const taskId = original.id;\n const fn: (input: I, options?: TaskCallOptions) => O = (input, options) => {\n const storeTask = this.getStoreTaskOrThrow(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.getStoreTaskOrThrow(taskId);\n\n if (!storeTask.interceptors) storeTask.interceptors = [];\n storeTask.interceptors.push({\n interceptor: middleware,\n ownerResourceId,\n } satisfies TaskLocalInterceptorRecord<I, O>);\n },\n getInterceptingResourceIds: () => {\n const storeTask = this.getStoreTaskOrThrow(taskId);\n const interceptors = storeTask.interceptors ?? [];\n const ownerIds = new Set<string>();\n for (const interceptor of interceptors) {\n if (interceptor.ownerResourceId) {\n ownerIds.add(interceptor.ownerResourceId);\n }\n }\n return Object.freeze(Array.from(ownerIds));\n },\n }) as TaskDependencyWithIntercept<I, O>;\n }\n\n private makeOwnerAwareMiddlewareManager(\n value: unknown,\n ownerResourceId: string,\n ): unknown {\n if (!value || typeof value !== \"object\") {\n return value;\n }\n\n const middlewareManager = value as MiddlewareManager;\n if (\n typeof middlewareManager.interceptOwned !== \"function\" ||\n typeof middlewareManager.interceptMiddlewareOwned !== \"function\"\n ) {\n return value;\n }\n\n return new Proxy(middlewareManager, {\n get(target, prop, receiver) {\n if (prop === \"intercept\") {\n return (\n kind: \"task\" | \"resource\",\n interceptor:\n | TaskMiddlewareInterceptor\n | ResourceMiddlewareInterceptor,\n ) => {\n if (kind === \"task\") {\n target.interceptOwned(\n \"task\",\n interceptor as TaskMiddlewareInterceptor,\n ownerResourceId,\n );\n return;\n }\n\n target.interceptOwned(\n \"resource\",\n interceptor as ResourceMiddlewareInterceptor,\n ownerResourceId,\n );\n };\n }\n\n if (prop === \"interceptMiddleware\") {\n return (\n middleware:\n | ITaskMiddleware<any, any, any, any>\n | IResourceMiddleware<any, any, any, any>,\n interceptor:\n | TaskMiddlewareInterceptor\n | ResourceMiddlewareInterceptor,\n ) => {\n if (utils.isTaskMiddleware(middleware)) {\n target.interceptMiddlewareOwned(\n middleware,\n interceptor as TaskMiddlewareInterceptor,\n ownerResourceId,\n );\n return;\n }\n\n if (utils.isResourceMiddleware(middleware)) {\n target.interceptMiddlewareOwned(\n middleware,\n interceptor as ResourceMiddlewareInterceptor,\n ownerResourceId,\n );\n }\n };\n }\n\n const originalValue = Reflect.get(target, prop, receiver);\n if (typeof originalValue === \"function\") {\n return originalValue.bind(target);\n }\n return originalValue;\n },\n });\n }\n\n private getStoreTaskOrThrow(\n taskId: string,\n ): TaskStoreElementType<any, any, any> {\n const storeTask = this.store.tasks.get(taskId);\n if (storeTask === undefined) {\n return dependencyNotFoundError.throw({ key: `Task ${taskId}` });\n }\n return storeTask;\n }\n}\n","import type { IEventEmission } from \"../../defs\";\nimport { EventManager } from \"../EventManager\";\nimport { Logger } from \"../Logger\";\nimport {\n HookDependencyState,\n HookStoreElementType,\n} from \"../../types/storeTypes\";\n\nexport class HookEventBuffer {\n private static readonly MAX_FLUSH_PASSES_WITHOUT_CYCLE_DETECTION = 128;\n public readonly pendingHookEvents = new Map<string, IEventEmission<any>[]>();\n public readonly drainingHookIds = new Set<string>();\n\n constructor(\n private readonly eventManager: EventManager,\n private readonly logger: Logger,\n private readonly runtimeEventCycleDetection: boolean,\n ) {}\n\n enqueue(hookId: string, event: IEventEmission<any>): void {\n const queue = this.pendingHookEvents.get(hookId);\n if (queue) {\n queue.push(event);\n return;\n }\n this.pendingHookEvents.set(hookId, [event]);\n }\n\n async flush(hookStoreElement: HookStoreElementType): Promise<void> {\n if (hookStoreElement.dependencyState !== HookDependencyState.Ready) {\n return;\n }\n\n const hook = hookStoreElement.hook;\n if (this.drainingHookIds.has(hook.id)) {\n return;\n }\n\n if (!this.pendingHookEvents.has(hook.id)) {\n return;\n }\n\n this.drainingHookIds.add(hook.id);\n try {\n let flushPasses = 0;\n while (true) {\n flushPasses += 1;\n if (\n !this.runtimeEventCycleDetection &&\n flushPasses > HookEventBuffer.MAX_FLUSH_PASSES_WITHOUT_CYCLE_DETECTION\n ) {\n await this.logger.error(\n `Aborting buffered hook event flush for \"${hook.id}\" after ${flushPasses - 1} passes because runtime event cycle detection is disabled.`,\n );\n break;\n }\n\n const queue = this.pendingHookEvents.get(hook.id);\n if (!queue || queue.length === 0) {\n this.pendingHookEvents.delete(hook.id);\n break;\n }\n this.pendingHookEvents.delete(hook.id);\n\n for (const queuedEvent of queue) {\n if (queuedEvent.source === hook.id) {\n continue;\n }\n await this.eventManager.executeHookWithInterceptors(\n hook,\n queuedEvent,\n hookStoreElement.computedDependencies,\n );\n }\n }\n } finally {\n this.drainingHookIds.delete(hook.id);\n }\n }\n}\n","import { isOptional, isResource } from \"../../define\";\n\nexport function getResourceDependencyIds(rawDependencies: unknown): string[] {\n if (!rawDependencies || typeof rawDependencies !== \"object\") {\n return [];\n }\n\n const resourceIds: string[] = [];\n const collect = (value: unknown): void => {\n if (isOptional(value)) {\n collect((value as { inner: unknown }).inner);\n return;\n }\n\n if (isResource(value)) {\n resourceIds.push(value.id);\n }\n };\n\n Object.values(rawDependencies as Record<string, unknown>).forEach(collect);\n return resourceIds;\n}\n","import { parallelInitSchedulingError } from \"../../errors\";\nimport { ResourceStoreElementType } from \"../../types/storeTypes\";\nimport { Store } from \"../Store\";\nimport { getResourceDependencyIds } from \"../utils/resourceDependencyIds\";\n\nexport class ResourceScheduler {\n constructor(\n private readonly store: Store,\n private readonly ensureResourceInitialized: (\n resource: ResourceStoreElementType<any, any, any>,\n ) => Promise<void>,\n ) {}\n\n collectStartupRequiredResourceIds(): Set<string> {\n const requiredResourceIds = new Set<string>();\n const pendingResourceIds: string[] = [];\n\n const collectFromDependencies = (dependencies: unknown) => {\n const dependencyIds = getResourceDependencyIds(dependencies);\n for (const dependencyId of dependencyIds) {\n if (requiredResourceIds.has(dependencyId)) {\n continue;\n }\n\n const dependencyResource = this.store.resources.get(dependencyId);\n if (!dependencyResource) {\n continue;\n }\n\n requiredResourceIds.add(dependencyId);\n pendingResourceIds.push(dependencyId);\n }\n };\n\n for (const middleware of this.store.resourceMiddlewares.values()) {\n collectFromDependencies(middleware.middleware.dependencies);\n }\n\n for (const middleware of this.store.taskMiddlewares.values()) {\n collectFromDependencies(middleware.middleware.dependencies);\n }\n\n for (const hook of this.store.hooks.values()) {\n collectFromDependencies(hook.hook.dependencies);\n }\n\n for (const task of this.store.tasks.values()) {\n collectFromDependencies(task.task.dependencies);\n }\n\n collectFromDependencies(this.store.root.resource.dependencies);\n\n while (pendingResourceIds.length > 0) {\n const resourceId = pendingResourceIds.pop()!;\n const resource = this.store.resources.get(resourceId);\n if (!resource) {\n continue;\n }\n\n collectFromDependencies(resource.resource.dependencies);\n }\n\n return requiredResourceIds;\n }\n\n async initializeUninitializedResourcesParallel(\n targetResourceIds?: ReadonlySet<string>,\n ): Promise<void> {\n const rootId = this.store.root.resource.id;\n\n while (true) {\n const pending = Array.from(this.store.resources.values()).filter(\n (resource) =>\n resource.resource.id !== rootId &&\n resource.isInitialized === false &&\n (targetResourceIds === undefined ||\n targetResourceIds.has(resource.resource.id)),\n );\n if (pending.length === 0) {\n return;\n }\n\n const readyWave = pending.filter((resource) =>\n this.isResourceReadyForParallelInit(resource),\n );\n\n if (readyWave.length === 0) {\n parallelInitSchedulingError.throw();\n }\n\n const results = await Promise.allSettled(\n readyWave.map((resource) => this.ensureResourceInitialized(resource)),\n );\n const failures = results\n .filter(\n (result): result is PromiseRejectedResult =>\n result.status === \"rejected\",\n )\n .map((result) =>\n result.reason instanceof Error\n ? result.reason\n : new Error(String(result.reason)),\n );\n\n if (failures.length === 1) {\n throw failures[0];\n }\n\n if (failures.length > 1) {\n throw Object.assign(\n new Error(\n `${failures.length} resources failed during parallel initialization.`,\n ),\n {\n name: \"AggregateError\",\n errors: failures,\n cause: failures[0],\n },\n );\n }\n }\n }\n\n isResourceReadyForParallelInit(\n resource: ResourceStoreElementType<any, any, any>,\n ): boolean {\n const dependencyIds = getResourceDependencyIds(\n resource.resource.dependencies,\n );\n return dependencyIds.every((dependencyId) => {\n const dependencyResource = this.store.resources.get(dependencyId);\n return dependencyResource?.isInitialized === true;\n });\n }\n}\n","import {\n DependencyMapType,\n DependencyValuesType,\n IEvent,\n IEventEmission,\n IEventEmitOptions,\n IResource,\n ITask,\n ResourceDependencyValuesType,\n} from \"../defs\";\nimport { Store } from \"./Store\";\nimport {\n ResourceStoreElementType,\n TaskStoreElementType,\n HookStoreElementType,\n HookDependencyState,\n} from \"../types/storeTypes\";\nimport { EventManager } from \"./EventManager\";\nimport { ResourceInitializer } from \"./ResourceInitializer\";\nimport { TaskRunner } from \"./TaskRunner\";\nimport { eventNotFoundError } from \"../errors\";\nimport { Logger } from \"./Logger\";\nimport { ResourceInitMode } from \"../types/runner\";\nimport { DependencyExtractor } from \"./dependency-processor/DependencyExtractor\";\nimport { HookEventBuffer } from \"./dependency-processor/HookEventBuffer\";\nimport { ResourceScheduler } from \"./dependency-processor/ResourceScheduler\";\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 dependencyExtractor: DependencyExtractor;\n protected readonly hookEventBuffer: HookEventBuffer;\n protected readonly resourceScheduler: ResourceScheduler;\n protected readonly logger!: Logger;\n protected readonly initMode: ResourceInitMode;\n protected readonly lazy: boolean;\n public readonly pendingHookEvents: Map<string, IEventEmission<any>[]>;\n public readonly drainingHookIds: Set<string>;\n private readonly inFlightResourceInitializations = new Map<\n string,\n Promise<void>\n >();\n\n constructor(\n protected readonly store: Store,\n protected readonly eventManager: EventManager,\n protected readonly taskRunner: TaskRunner,\n logger: Logger,\n initMode: ResourceInitMode = ResourceInitMode.Sequential,\n lazy = false,\n runtimeEventCycleDetection = true,\n ) {\n this.logger = logger.with({ source: \"dependencyProcessor\" });\n this.initMode = initMode;\n this.lazy = lazy;\n this.resourceInitializer = new ResourceInitializer(\n store,\n eventManager,\n logger,\n );\n this.hookEventBuffer = new HookEventBuffer(\n eventManager,\n this.logger,\n runtimeEventCycleDetection,\n );\n this.pendingHookEvents = this.hookEventBuffer.pendingHookEvents;\n this.drainingHookIds = this.hookEventBuffer.drainingHookIds;\n this.dependencyExtractor = new DependencyExtractor(\n store,\n eventManager,\n taskRunner,\n this.logger,\n async (resource) => this.ensureResourceInitialized(resource),\n );\n this.resourceScheduler = new ResourceScheduler(store, async (resource) =>\n this.ensureResourceInitialized(resource),\n );\n }\n\n /**\n * Computes and caches dependencies for all registered store items.\n */\n async computeAllDependencies() {\n await this.computeResourceMiddlewareDependencies();\n await this.computeTaskMiddlewareDependencies();\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 await this.computeHookDependencies();\n\n if (this.initMode === ResourceInitMode.Parallel && this.lazy) {\n await this.initializeStartupRequiredResourcesParallel();\n } else if (!this.lazy && this.initMode === ResourceInitMode.Parallel) {\n await this.initializeUninitializedResourcesParallel();\n } else if (!this.lazy) {\n for (const resource of this.store.resources.values()) {\n await this.processResourceDependencies(resource);\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 for (const task of this.store.tasks.values()) {\n await this.computeTaskDependencies(task);\n }\n\n await this.processResourceDependencies(this.store.root);\n }\n\n private async initializeStartupRequiredResourcesParallel() {\n const requiredResourceIds = this.collectStartupRequiredResourceIds();\n if (requiredResourceIds.size === 0) {\n return;\n }\n\n await this.initializeUninitializedResourcesParallel(requiredResourceIds);\n }\n\n private collectStartupRequiredResourceIds(): Set<string> {\n return this.resourceScheduler.collectStartupRequiredResourceIds();\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 await this.ensureResourceInitialized(resource);\n }\n }\n }\n\n private async computeResourceMiddlewareDependencies() {\n await Promise.all(\n Array.from(this.store.resourceMiddlewares.values()).map(\n async (middleware) => {\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 );\n }\n\n private async computeTaskMiddlewareDependencies() {\n await Promise.all(\n Array.from(this.store.taskMiddlewares.values()).map(\n async (middleware) => {\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 );\n }\n\n private async computeHookDependencies() {\n await Promise.all(\n Array.from(this.store.hooks.values()).map(async (hookStoreElement) => {\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 await this.flushBufferedHookEvents(hookStoreElement);\n }),\n );\n }\n\n private async initializeUninitializedResourcesParallel(\n targetResourceIds?: ReadonlySet<string>,\n ) {\n await this.resourceScheduler.initializeUninitializedResourcesParallel(\n targetResourceIds,\n );\n }\n\n private async ensureResourceInitialized(\n resource: ResourceStoreElementType<any, any, any>,\n ) {\n if (resource.isInitialized) {\n return;\n }\n\n const resourceId = resource.resource.id;\n const existingInitialization =\n this.inFlightResourceInitializations.get(resourceId);\n if (existingInitialization) {\n await existingInitialization;\n return;\n }\n\n const initialization = (async () => {\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(resourceId);\n } catch (error: unknown) {\n this.resetResourceInitializationState(resource);\n this.rethrowResourceInitError(resourceId, error);\n }\n })();\n\n this.inFlightResourceInitializations.set(resourceId, initialization);\n\n try {\n await initialization;\n } finally {\n this.inFlightResourceInitializations.delete(resourceId);\n }\n }\n\n private resetResourceInitializationState(\n resource: ResourceStoreElementType<any, any, any>,\n ): void {\n resource.context = undefined;\n resource.value = undefined;\n resource.isInitialized = false;\n resource.computedDependencies = undefined;\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 const wrapper = new Error(`${prefix}: ${String(error)}`);\n Object.defineProperty(wrapper, \"resourceId\", {\n value: resourceId,\n configurable: true,\n });\n Object.defineProperty(wrapper, \"cause\", {\n value: error,\n configurable: true,\n });\n throw wrapper;\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 (resource.computedDependencies !== undefined) {\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 resource.resource.id,\n );\n // resource.isInitialized = true;\n }\n\n private wrapResourceDependencies<TD extends DependencyMapType>(\n deps: TD,\n extracted: DependencyValuesType<TD>,\n ownerResourceId: string,\n ): ResourceDependencyValuesType<TD> {\n return this.dependencyExtractor.wrapResourceDependencies(\n deps,\n extracted,\n ownerResourceId,\n );\n }\n\n public async initializeRoot() {\n await this.ensureResourceInitialized(this.store.root);\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 this.enqueueBufferedHookEvent(hook.id, receivedEvent);\n return;\n }\n await this.flushBufferedHookEvents(hookStoreElement);\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(eventDefinition as IEvent[], handler, {\n order,\n });\n } else {\n if (this.store.events.get(eventDefinition.id) === undefined) {\n eventNotFoundError.throw({ id: eventDefinition.id });\n }\n this.eventManager.addListener(eventDefinition as IEvent, handler, {\n order,\n });\n }\n }\n }\n }\n\n private enqueueBufferedHookEvent(\n hookId: string,\n event: IEventEmission<any>,\n ): void {\n this.hookEventBuffer.enqueue(hookId, event);\n }\n\n private async flushBufferedHookEvents(\n hookStoreElement: HookStoreElementType,\n ): Promise<void> {\n await this.hookEventBuffer.flush(hookStoreElement);\n }\n\n async extractDependencies<T extends DependencyMapType>(\n map: T,\n source: string,\n ): Promise<DependencyValuesType<T>> {\n return this.dependencyExtractor.extractDependencies(map, source);\n }\n\n async extractDependency(object: unknown, source: string) {\n return this.dependencyExtractor.extractDependency(object, source);\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 this.dependencyExtractor.extractEventDependency(object, source) as (\n input: any,\n options?: IEventEmitOptions,\n ) => Promise<any>;\n }\n\n async extractTaskDependency(object: ITask<any, any, {}>) {\n return this.dependencyExtractor.extractTaskDependency(object);\n }\n\n async extractResourceDependency(object: IResource<any, any, any>) {\n return this.dependencyExtractor.extractResourceDependency(object);\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 duplicateTagIdOnDefinitionError,\n duplicateRegistrationError,\n middlewareNotRegisteredError,\n tagNotFoundError,\n} from \"../errors\";\nimport { ITaggable } from \"../defs\";\nimport { StoreRegistry } from \"./StoreRegistry\";\n\ntype SanityCheckTaggable = ITaggable & {\n id: string;\n tags?: ITaggable[\"tags\"];\n};\n\ntype TaggableEntry = {\n definitionType: string;\n definition: SanityCheckTaggable;\n};\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.ensureTagIdsAreUniquePerDefinition();\n this.ensureAllTagsUsedAreRegistered();\n\n // Validate module boundary visibility after all items are registered\n this.registry.visibilityTracker.validateVisibility(this.registry);\n }\n\n private getTaggableEntries(): TaggableEntry[] {\n return [\n ...Array.from(this.registry.tasks.values()).map((x) => ({\n definitionType: \"Task\",\n definition: x.task,\n })),\n ...Array.from(this.registry.resources.values()).map((x) => ({\n definitionType: \"Resource\",\n definition: x.resource,\n })),\n ...Array.from(this.registry.events.values()).map((x) => ({\n definitionType: \"Event\",\n definition: x.event,\n })),\n ...Array.from(this.registry.taskMiddlewares.values()).map((x) => ({\n definitionType: \"Task middleware\",\n definition: x.middleware,\n })),\n ...Array.from(this.registry.resourceMiddlewares.values()).map((x) => ({\n definitionType: \"Resource middleware\",\n definition: x.middleware,\n })),\n ...Array.from(this.registry.hooks.values()).map((x) => ({\n definitionType: \"Hook\",\n definition: x.hook,\n })),\n ];\n }\n\n private ensureTagIdsAreUniquePerDefinition() {\n for (const { definitionType, definition } of this.getTaggableEntries()) {\n const tags = Array.isArray(definition.tags) ? definition.tags : [];\n const seenTagIds = new Set<string>();\n for (const tag of tags) {\n if (seenTagIds.has(tag.id)) {\n duplicateTagIdOnDefinitionError.throw({\n definitionType,\n definitionId: definition.id,\n tagId: tag.id,\n });\n }\n seenTagIds.add(tag.id);\n }\n }\n }\n\n ensureAllTagsUsedAreRegistered() {\n for (const { definition } of this.getTaggableEntries()) {\n const tags = Array.isArray(definition.tags) ? definition.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","import type { StoreRegistry } from \"../StoreRegistry\";\nimport type { IDependentNode } from \"./findCircularDependencies\";\nimport type { IEvent } from \"../../defs\";\nimport { isOptional, isEvent } from \"../../define\";\n\nconst readStringId = (value: unknown): string | undefined => {\n if (!value || typeof value !== \"object\") {\n return undefined;\n }\n\n const id = (value as { id?: unknown }).id;\n return typeof id === \"string\" ? id : undefined;\n};\n\nconst getDependencyId = (dependency: unknown): string | undefined =>\n readStringId(\n isOptional(dependency)\n ? (dependency as { inner: unknown }).inner\n : dependency,\n );\n\n/**\n * Creates blank dependency nodes for every registered task, middleware, resource,\n * and hook. Populates both the shared nodeMap and the flat dependents list.\n */\nfunction setupBlankNodes(\n registry: StoreRegistry,\n nodeMap: Map<string, IDependentNode>,\n dependents: IDependentNode[],\n): void {\n for (const task of registry.tasks.values()) {\n const node: IDependentNode = {\n id: task.task.id,\n dependencies: {},\n };\n nodeMap.set(task.task.id, node);\n dependents.push(node);\n }\n\n for (const middleware of registry.taskMiddlewares.values()) {\n const node: IDependentNode = {\n id: middleware.middleware.id,\n dependencies: {},\n };\n nodeMap.set(middleware.middleware.id, node);\n dependents.push(node);\n }\n\n for (const middleware of registry.resourceMiddlewares.values()) {\n const node: IDependentNode = {\n id: middleware.middleware.id,\n dependencies: {},\n };\n nodeMap.set(middleware.middleware.id, node);\n dependents.push(node);\n }\n\n // Create nodes for resources\n for (const resource of registry.resources.values()) {\n const node: IDependentNode = {\n id: resource.resource.id,\n dependencies: {},\n };\n nodeMap.set(resource.resource.id, node);\n dependents.push(node);\n }\n\n for (const hook of registry.hooks.values()) {\n const node: IDependentNode = {\n id: hook.hook.id,\n dependencies: {},\n };\n nodeMap.set(hook.hook.id, node);\n dependents.push(node);\n }\n}\n\n/**\n * Builds a dependency graph of all registered items (tasks, resources, middlewares, hooks).\n * Returns a flat list of dependency nodes suitable for circular-dependency detection.\n */\nexport function buildDependencyGraph(\n registry: StoreRegistry,\n): IDependentNode[] {\n const depenedants: IDependentNode[] = [];\n\n // First, create all nodes\n const nodeMap = new Map<string, IDependentNode>();\n\n // Create nodes for tasks\n setupBlankNodes(registry, nodeMap, depenedants);\n\n // Now, populate dependencies with references to actual nodes\n for (const task of registry.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(task.task.dependencies)) {\n const depId = getDependencyId(depItem);\n if (!depId) {\n continue;\n }\n const depNode = nodeMap.get(depId);\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 registry.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(middleware.dependencies)) {\n const depId = getDependencyId(depItem);\n if (!depId) {\n continue;\n }\n const depNode = nodeMap.get(depId);\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 registry.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 registry.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(middleware.dependencies)) {\n const depId = getDependencyId(depItem);\n if (!depId) {\n continue;\n }\n const depNode = nodeMap.get(depId);\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 registry.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 registry.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 depId = getDependencyId(depItem);\n if (!depId) {\n continue;\n }\n const depNode = nodeMap.get(depId);\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 registry.hooks.values()) {\n const node = nodeMap.get(hook.hook.id)!;\n if (hook.hook.dependencies) {\n for (const [depKey, depItem] of Object.entries(hook.hook.dependencies)) {\n const depId = getDependencyId(depItem);\n if (!depId) {\n continue;\n }\n const depNode = nodeMap.get(depId);\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 */\nexport function buildEventEmissionGraph(\n registry: StoreRegistry,\n): IDependentNode[] {\n const nodes = new Map<string, IDependentNode>();\n\n // Create nodes for all events\n for (const e of registry.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 registry.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 } = isOptional(value)\n ? (value as { inner: { id?: string } }).inner\n : (value as { id?: string });\n if (candidate && 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","import { lockableMapLockedError } from \"../errors\";\n/**\n * A Map that can be permanently locked to prevent further mutations.\n *\n * Before locking it behaves exactly like a regular `Map`.\n * After `lock()` is called, any call to `set`, `delete` or `clear`\n * throws immediately — enforcing immutability at the data-structure level.\n */\nexport class LockableMap<K, V> extends Map<K, V> {\n #locked = false;\n readonly #name: string;\n\n constructor(name?: string) {\n super();\n this.#name = name ?? \"LockableMap\";\n }\n\n /** Whether the map is currently locked. */\n get locked(): boolean {\n return this.#locked;\n }\n\n /** Permanently lock the map — no further mutations allowed. */\n lock(): void {\n this.#locked = true;\n }\n\n /** @throws if the map is locked */\n private throwIfLocked(): void {\n if (this.#locked) {\n lockableMapLockedError.throw({ mapName: this.#name });\n }\n }\n\n override set(key: K, value: V): this {\n this.throwIfLocked();\n return super.set(key, value);\n }\n\n override delete(key: K): boolean {\n this.throwIfLocked();\n return super.delete(key);\n }\n\n override clear(): void {\n this.throwIfLocked();\n super.clear();\n }\n}\n","import { RegisterableItems, IResourceWithConfig } from \"../defs\";\nimport * as utils from \"../define\";\nimport { visibilityViolationError } from \"../errors\";\nimport { StoreRegistry } from \"./StoreRegistry\";\n\n/**\n * Extracts the string id from any registerable item.\n */\nfunction getItemId(item: RegisterableItems): string | undefined {\n if (utils.isResourceWithConfig(item)) {\n return (item as IResourceWithConfig).resource.id;\n }\n if (item && typeof item === \"object\" && \"id\" in item) {\n return (item as { id: string }).id;\n }\n return undefined;\n}\n\n/**\n * Determines the human-readable type label for a registerable item.\n */\nfunction getItemTypeLabel(registry: StoreRegistry, id: string): string {\n void registry;\n void id;\n return \"Item\";\n}\n\n/**\n * Tracks which resource owns (registered) each item and which items\n * are exported by resources that declare an exports list.\n *\n * Ownership is established during registration: when resource R calls\n * `.register([item])`, item is \"owned\" by R.\n *\n * When R declares `.exports([subset])`, only those items are visible\n * to items outside R's registration subtree.\n */\nexport class VisibilityTracker {\n /**\n * Maps item id → id of the resource that directly registered it.\n * Items registered by the root resource have the root's id as owner.\n */\n private readonly ownership = new Map<string, string>();\n\n /**\n * For each resource that declares exports: resource id → Set of\n * exported item ids. Resources without `.exports()` are absent\n * from this map (meaning \"everything is public\").\n */\n private readonly exportSets = new Map<string, Set<string>>();\n\n /**\n * Maps resource id → set of all item ids in its registration subtree\n * (including items registered by nested child resources).\n */\n private readonly subtrees = new Map<string, Set<string>>();\n\n /**\n * Records ownership when a resource registers an item.\n */\n recordOwnership(ownerResourceId: string, item: RegisterableItems): void {\n const id = getItemId(item);\n if (!id) return;\n\n // Keep first ownership immutable. If the same id is registered again,\n // StoreValidator will fail the duplicate registration; overwriting here\n // can create ownership cycles before that error is thrown.\n if (this.ownership.has(id)) {\n return;\n }\n\n this.ownership.set(id, ownerResourceId);\n\n // Add to owner's subtree and all ancestor subtrees\n const visitedOwners = new Set<string>();\n let current: string | undefined = ownerResourceId;\n while (current !== undefined && !visitedOwners.has(current)) {\n visitedOwners.add(current);\n let subtree = this.subtrees.get(current);\n if (!subtree) {\n subtree = new Set();\n this.subtrees.set(current, subtree);\n }\n subtree.add(id);\n // Walk up to the resource's own owner (parent)\n current = this.ownership.get(current);\n }\n }\n\n /**\n * Records the export set for a resource that declares `.exports()`.\n */\n recordExports(resourceId: string, exports: Array<RegisterableItems>): void {\n const ids = new Set<string>();\n for (const item of exports) {\n const id = getItemId(item);\n if (id) ids.add(id);\n }\n this.exportSets.set(resourceId, ids);\n }\n\n /**\n * Checks whether `consumerId` can access `targetId`.\n *\n * An item is accessible if:\n * 1. The target's owner has no exports list (everything is public), OR\n * 2. The consumer is inside the same registration subtree as the target, OR\n * 3. The target is in the owner resource's export set (transitively up).\n */\n isAccessible(targetId: string, consumerId: string): boolean {\n const targetOwner = this.ownership.get(targetId);\n // Items not tracked (global builtins) are always accessible\n if (targetOwner === undefined) return true;\n\n return this.isAccessibleFromOwnerChain(\n targetId,\n consumerId,\n targetOwner,\n undefined,\n new Set<string>(),\n );\n }\n\n private isAccessibleFromOwnerChain(\n targetId: string,\n consumerId: string,\n ownerId: string,\n boundaryOwnerId: string | undefined,\n seenPaths: Set<string>,\n ): boolean {\n // A resource can always access items in its own registration scope.\n if (consumerId === ownerId) return true;\n\n // If the consumer is inside the owner's subtree, it has full access\n const ownerSubtree = this.subtrees.get(ownerId);\n if (ownerSubtree?.has(consumerId)) return true;\n\n const exportSet = this.exportSets.get(ownerId);\n if (\n exportSet &&\n !this.isTargetAllowedByExports(targetId, ownerId, seenPaths)\n ) {\n return false;\n }\n\n if (ownerId === boundaryOwnerId) {\n return true;\n }\n\n const parentOwner = this.ownership.get(ownerId);\n if (parentOwner === undefined) {\n return boundaryOwnerId === undefined;\n }\n\n return this.isAccessibleFromOwnerChain(\n targetId,\n consumerId,\n parentOwner,\n boundaryOwnerId,\n seenPaths,\n );\n }\n\n private isTargetAllowedByExports(\n targetId: string,\n ownerId: string,\n seenPaths: Set<string>,\n ): boolean {\n const exportSet = this.exportSets.get(ownerId)!;\n if (exportSet.has(targetId)) return true;\n\n // If this resource exports a child resource, the child's own exported\n // surface is transitively visible at this boundary.\n for (const exportedId of exportSet) {\n const traversalKey = `${ownerId}::${exportedId}::${targetId}`;\n if (seenPaths.has(traversalKey)) continue;\n seenPaths.add(traversalKey);\n\n if (\n this.isVisibleOutsideExportedResource(\n targetId,\n exportedId,\n ownerId,\n seenPaths,\n )\n ) {\n return true;\n }\n }\n\n return false;\n }\n\n private isVisibleOutsideExportedResource(\n targetId: string,\n exportedResourceId: string,\n ownerId: string,\n seenPaths: Set<string>,\n ): boolean {\n const exportedSubtree = this.subtrees.get(exportedResourceId);\n if (!exportedSubtree?.has(targetId)) return false;\n\n const targetOwner = this.ownership.get(targetId)!;\n\n // For transitive checks we evaluate visibility from \"outside the exported\n // resource but inside the owner\".\n return this.isAccessibleFromOwnerChain(\n targetId,\n ownerId,\n targetOwner,\n exportedResourceId,\n seenPaths,\n );\n }\n\n /**\n * Validates that all dependency references respect visibility boundaries.\n * Called after registration is complete, before dependency computation.\n */\n validateVisibility(registry: StoreRegistry): void {\n this.validateItemDependencies(registry);\n this.validateHookEventVisibility(registry);\n this.validateMiddlewareVisibility(registry);\n }\n\n /**\n * Checks dependencies declared by all dependency-bearing definitions.\n */\n private validateItemDependencies(registry: StoreRegistry): void {\n const entries: Array<{\n consumerId: string;\n consumerType: string;\n dependencies: unknown;\n }> = [];\n\n for (const { task } of registry.tasks.values()) {\n entries.push({\n consumerId: task.id,\n consumerType: \"Task\",\n dependencies: task.dependencies,\n });\n }\n for (const { resource } of registry.resources.values()) {\n entries.push({\n consumerId: resource.id,\n consumerType: \"Resource\",\n dependencies: resource.dependencies,\n });\n }\n for (const { hook } of registry.hooks.values()) {\n entries.push({\n consumerId: hook.id,\n consumerType: \"Hook\",\n dependencies: hook.dependencies,\n });\n }\n for (const { middleware } of registry.taskMiddlewares.values()) {\n entries.push({\n consumerId: middleware.id,\n consumerType: \"Task middleware\",\n dependencies: middleware.dependencies,\n });\n }\n for (const { middleware } of registry.resourceMiddlewares.values()) {\n entries.push({\n consumerId: middleware.id,\n consumerType: \"Resource middleware\",\n dependencies: middleware.dependencies,\n });\n }\n\n for (const { consumerId, consumerType, dependencies } of entries) {\n if (!dependencies || typeof dependencies !== \"object\") continue;\n\n for (const depDef of Object.values(\n dependencies as Record<string, unknown>,\n )) {\n const dep = utils.isOptional(depDef)\n ? (depDef as { inner: unknown }).inner\n : depDef;\n\n const depId =\n dep && typeof dep === \"object\" && \"id\" in dep\n ? (dep as { id: string }).id\n : undefined;\n\n if (!depId) continue;\n if (this.isAccessible(depId, consumerId)) continue;\n\n const targetOwner = this.ownership.get(depId)!;\n const exportSet = this.findGatingExportSet(depId, targetOwner);\n\n visibilityViolationError.throw({\n targetId: depId,\n targetType: getItemTypeLabel(registry, depId),\n ownerResourceId: targetOwner,\n consumerId,\n consumerType,\n exportedIds: [...exportSet],\n });\n }\n }\n }\n\n /**\n * Validates that hook listeners only subscribe to visible events.\n */\n private validateHookEventVisibility(registry: StoreRegistry): void {\n for (const { hook } of registry.hooks.values()) {\n if (!hook.on || hook.on === \"*\") continue;\n\n const events = Array.isArray(hook.on) ? hook.on : [hook.on];\n for (const event of events) {\n const eventId = event.id;\n if (this.isAccessible(eventId, hook.id)) continue;\n\n const targetOwner = this.ownership.get(eventId)!;\n const exportSet = this.findGatingExportSet(eventId, targetOwner);\n\n visibilityViolationError.throw({\n targetId: eventId,\n targetType: \"Event\",\n ownerResourceId: targetOwner,\n consumerId: hook.id,\n consumerType: \"Hook\",\n exportedIds: [...exportSet],\n });\n }\n }\n }\n\n /**\n * Validates that middleware attachments are visible.\n */\n private validateMiddlewareVisibility(registry: StoreRegistry): void {\n for (const { task } of registry.tasks.values()) {\n for (const middlewareAttachment of task.middleware) {\n if (this.isAccessible(middlewareAttachment.id, task.id)) continue;\n\n const targetOwner = this.ownership.get(middlewareAttachment.id)!;\n const exportSet = this.findGatingExportSet(\n middlewareAttachment.id,\n targetOwner,\n );\n\n visibilityViolationError.throw({\n targetId: middlewareAttachment.id,\n targetType: \"Task middleware\",\n ownerResourceId: targetOwner,\n consumerId: task.id,\n consumerType: \"Task\",\n exportedIds: [...exportSet],\n });\n }\n }\n\n for (const { resource } of registry.resources.values()) {\n for (const middlewareAttachment of resource.middleware) {\n if (this.isAccessible(middlewareAttachment.id, resource.id)) continue;\n\n const targetOwner = this.ownership.get(middlewareAttachment.id)!;\n const exportSet = this.findGatingExportSet(\n middlewareAttachment.id,\n targetOwner,\n );\n\n visibilityViolationError.throw({\n targetId: middlewareAttachment.id,\n targetType: \"Resource middleware\",\n ownerResourceId: targetOwner,\n consumerId: resource.id,\n consumerType: \"Resource\",\n exportedIds: [...exportSet],\n });\n }\n }\n }\n\n /**\n * Finds the first export set in the ownership chain that gates `targetId`.\n */\n private findGatingExportSet(targetId: string, ownerId: string): Set<string> {\n const exportSet = this.exportSets.get(ownerId);\n if (\n exportSet &&\n !this.isTargetAllowedByExports(targetId, ownerId, new Set())\n ) {\n return exportSet;\n }\n const parentOwner = this.ownership.get(ownerId);\n if (parentOwner === undefined) return new Set<string>();\n return this.findGatingExportSet(targetId, parentOwner);\n }\n\n /** Exposes the ownership map for testing. */\n getOwnership(): ReadonlyMap<string, string> {\n return this.ownership;\n }\n\n /** Exposes the export sets for testing. */\n getExportSets(): ReadonlyMap<string, ReadonlySet<string>> {\n return this.exportSets;\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 {\n buildDependencyGraph,\n buildEventEmissionGraph as buildEmissionGraph,\n} from \"./utils/buildDependencyGraph\";\nimport { IErrorHelper } from \"../types/error\";\nimport type { IAsyncContext } from \"../types/asyncContext\";\nimport { HookDependencyState } from \"../types/storeTypes\";\nimport { LockableMap } from \"../tools/LockableMap\";\nimport { VisibilityTracker } from \"./VisibilityTracker\";\n\ntype StoringMode = \"normal\" | \"override\";\nexport class StoreRegistry {\n public tasks = new LockableMap<string, TaskStoreElementType>(\"tasks\");\n public resources = new LockableMap<string, ResourceStoreElementType>(\n \"resources\",\n );\n public events = new LockableMap<string, EventStoreElementType>(\"events\");\n public taskMiddlewares = new LockableMap<\n string,\n TaskMiddlewareStoreElementType\n >(\"taskMiddlewares\");\n public resourceMiddlewares = new LockableMap<\n string,\n ResourceMiddlewareStoreElementType\n >(\"resourceMiddlewares\");\n public hooks = new LockableMap<string, HookStoreElementType>(\"hooks\");\n public tags = new LockableMap<string, ITag>(\"tags\");\n public asyncContexts = new LockableMap<string, IAsyncContext<any>>(\n \"asyncContexts\",\n );\n public errors = new LockableMap<string, IErrorHelper<any>>(\"errors\");\n public readonly visibilityTracker = new VisibilityTracker();\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 /** Lock every map in the registry, preventing further mutations. */\n lockAll(): void {\n this.tasks.lock();\n this.resources.lock();\n this.events.lock();\n this.taskMiddlewares.lock();\n this.resourceMiddlewares.lock();\n this.hooks.lock();\n this.tags.lock();\n this.asyncContexts.lock();\n this.errors.lock();\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 // Track which resource owns each registered item\n this.visibilityTracker.recordOwnership(element.id, item);\n // will call registration if it detects another resource.\n this.storeGenericItem<_C>(item);\n }\n\n // Record exports after all items are registered so ids are available\n if (element.exports) {\n this.visibilityTracker.recordExports(element.id, element.exports);\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 return buildDependencyGraph(this);\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 return buildEmissionGraph(this);\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?: unknown; config?: unknown },\n MapType,\n >(\n item: T,\n collection: Map<string, MapType>,\n key: keyof MapType,\n overrideMode: StoringMode,\n config?: unknown, // 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 if (typeof currentItem.dependencies === \"function\") {\n const dependencyFactory = currentItem.dependencies as (\n cfg: unknown,\n ) => unknown;\n const effectiveConfig = config ?? currentItem.config;\n currentItem.dependencies = dependencyFactory(\n effectiveConfig,\n ) as T[\"dependencies\"];\n }\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 { overrideTargetNotRegisteredError } from \"../errors\";\nimport { StoreRegistry } from \"./StoreRegistry\";\n\ntype OverrideTargetType =\n | \"Task\"\n | \"Resource\"\n | \"Task middleware\"\n | \"Resource middleware\"\n | \"Hook\";\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 private getOverrideId(\n override:\n | IResource\n | ITaskMiddleware\n | IResourceMiddleware\n | ITask\n | IResourceWithConfig\n | IHook,\n ): string {\n if (utils.isResourceWithConfig(override)) {\n return override.resource.id;\n }\n return override.id;\n }\n\n private getOverrideType(\n override:\n | IResource\n | ITaskMiddleware\n | IResourceMiddleware\n | ITask\n | IResourceWithConfig\n | IHook,\n ): OverrideTargetType {\n if (utils.isTask(override)) return \"Task\";\n if (utils.isResource(override)) return \"Resource\";\n if (utils.isTaskMiddleware(override)) return \"Task middleware\";\n if (utils.isResourceMiddleware(override)) return \"Resource middleware\";\n if (utils.isHook(override)) return \"Hook\";\n return \"Resource\";\n }\n\n private getOverrideSourcesById(targetId: string): string[] {\n const sources = new Set<string>();\n for (const request of this.overrideRequests.values()) {\n const id = utils.isResourceWithConfig(request.override)\n ? request.override.resource.id\n : request.override.id;\n\n if (id === targetId) {\n sources.add(request.source);\n }\n }\n\n return Array.from(sources.values());\n }\n\n storeOverridesDeeply<C>(\n element: IResource<C, any, any>,\n visited: Set<string> = new Set(),\n ) {\n if (visited.has(element.id)) {\n return;\n }\n\n visited.add(element.id);\n\n element.overrides.forEach((override) => {\n if (!override) {\n return;\n }\n\n if (utils.isResource(override)) {\n this.storeOverridesDeeply(override, visited);\n }\n\n let id: string;\n if (utils.isResourceWithConfig(override)) {\n this.storeOverridesDeeply(override.resource, visited);\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 targetId = this.getOverrideId(override);\n overrideTargetNotRegisteredError.throw({\n targetId,\n targetType: this.getOverrideType(override),\n sources: this.getOverrideSourcesById(targetId),\n });\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 { lockedError } from \"../../errors\";\nimport {\n TaskMiddlewareInterceptor,\n ResourceMiddlewareInterceptor,\n} from \"./types\";\n\ntype InterceptorRecord<TInterceptor> = {\n interceptor: TInterceptor;\n ownerResourceId?: string;\n};\n\nexport type InterceptorOwnerSnapshot = {\n globalTaskInterceptorOwnerIds: readonly string[];\n globalResourceInterceptorOwnerIds: readonly string[];\n perTaskMiddlewareInterceptorOwnerIds: Readonly<\n Record<string, readonly string[]>\n >;\n perResourceMiddlewareInterceptorOwnerIds: Readonly<\n Record<string, readonly string[]>\n >;\n};\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: InterceptorRecord<TaskMiddlewareInterceptor>[] = [];\n private resourceInterceptors: InterceptorRecord<ResourceMiddlewareInterceptor>[] =\n [];\n private perTaskMiddleware: Map<\n string,\n InterceptorRecord<TaskMiddlewareInterceptor>[]\n > = new Map();\n private perResourceMiddleware: Map<\n string,\n InterceptorRecord<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(\n interceptor: TaskMiddlewareInterceptor,\n ownerResourceId?: string,\n ): void {\n this.checkLock();\n this.taskInterceptors.push({ interceptor, ownerResourceId });\n }\n\n /**\n * Adds a global resource interceptor\n */\n addGlobalResourceInterceptor(\n interceptor: ResourceMiddlewareInterceptor,\n ownerResourceId?: string,\n ): void {\n this.checkLock();\n this.resourceInterceptors.push({ interceptor, ownerResourceId });\n }\n\n /**\n * Adds an interceptor for a specific task middleware instance\n */\n addTaskMiddlewareInterceptor(\n middlewareId: string,\n interceptor: TaskMiddlewareInterceptor,\n ownerResourceId?: string,\n ): void {\n this.checkLock();\n if (!this.perTaskMiddleware.has(middlewareId)) {\n this.perTaskMiddleware.set(middlewareId, []);\n }\n this.perTaskMiddleware\n .get(middlewareId)!\n .push({ interceptor, ownerResourceId });\n }\n\n /**\n * Adds an interceptor for a specific resource middleware instance\n */\n addResourceMiddlewareInterceptor(\n middlewareId: string,\n interceptor: ResourceMiddlewareInterceptor,\n ownerResourceId?: string,\n ): void {\n this.checkLock();\n if (!this.perResourceMiddleware.has(middlewareId)) {\n this.perResourceMiddleware.set(middlewareId, []);\n }\n this.perResourceMiddleware\n .get(middlewareId)!\n .push({ interceptor, ownerResourceId });\n }\n\n /**\n * Gets all global task interceptors\n */\n getGlobalTaskInterceptors(): readonly TaskMiddlewareInterceptor[] {\n return Object.freeze(\n this.taskInterceptors.map((record) => record.interceptor),\n );\n }\n\n /**\n * Gets all global resource interceptors\n */\n getGlobalResourceInterceptors(): readonly ResourceMiddlewareInterceptor[] {\n return Object.freeze(\n this.resourceInterceptors.map((record) => record.interceptor),\n );\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.map((record) => record.interceptor));\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.map((record) => record.interceptor));\n }\n\n getOwnerSnapshot(): InterceptorOwnerSnapshot {\n return Object.freeze({\n globalTaskInterceptorOwnerIds: this.extractOwnerIds(\n this.taskInterceptors,\n ),\n globalResourceInterceptorOwnerIds: this.extractOwnerIds(\n this.resourceInterceptors,\n ),\n perTaskMiddlewareInterceptorOwnerIds: this.extractOwnerIdsMap(\n this.perTaskMiddleware,\n ),\n perResourceMiddlewareInterceptorOwnerIds: this.extractOwnerIdsMap(\n this.perResourceMiddleware,\n ),\n });\n }\n\n private extractOwnerIds<TInterceptor>(\n records: readonly InterceptorRecord<TInterceptor>[],\n ): readonly string[] {\n const uniqueOwnerIds = new Set<string>();\n for (const record of records) {\n if (!record.ownerResourceId) {\n continue;\n }\n uniqueOwnerIds.add(record.ownerResourceId);\n }\n return Object.freeze(Array.from(uniqueOwnerIds));\n }\n\n private extractOwnerIdsMap<TInterceptor>(\n map: ReadonlyMap<string, readonly InterceptorRecord<TInterceptor>[]>,\n ): Readonly<Record<string, readonly string[]>> {\n const ownerIdsByMiddlewareId: Record<string, readonly string[]> = {};\n\n for (const [middlewareId, records] of map.entries()) {\n const ownerIds = this.extractOwnerIds(records);\n if (ownerIds.length === 0) {\n continue;\n }\n ownerIdsByMiddlewareId[middlewareId] = ownerIds;\n }\n\n return Object.freeze(ownerIdsByMiddlewareId);\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.tunnelTaskPolicy.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.tunnelTaskPolicy.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 this.store.isItemVisibleToConsumer(x.middleware.id, task.id),\n )\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 this.store.isItemVisibleToConsumer(x.middleware.id, resource.id),\n )\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 {\n inputSchemaValidationError,\n resultSchemaValidationError,\n} from \"../../errors\";\nimport type { IValidationSchema } from \"../../defs\";\nimport { normalizeError } from \"../../globals/resources/tunnel/error-utils\";\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: unknown,\n schema: IValidationSchema<T> | undefined,\n id: string,\n type: \"Task\" | \"Resource\",\n ): T {\n if (!schema) return value as T;\n\n try {\n return schema.parse(value);\n } catch (error) {\n return inputSchemaValidationError.throw({\n subject: `${type} input`,\n id,\n originalError: normalizeError(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: unknown,\n schema: IValidationSchema<T> | undefined,\n id: string,\n type: \"Task\" | \"Resource\",\n ): T {\n if (!schema) return value as T;\n\n try {\n return schema.parse(value);\n } catch (error) {\n return resultSchemaValidationError.throw({\n subject: `${type} result`,\n id,\n originalError: normalizeError(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\";\nimport type { TaskMiddlewareInterceptor } from \"./types\";\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 (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].interceptor;\n const nextFunction = wrapped;\n wrapped = (async (input: TInput, journal: ExecutionJournal) =>\n interceptor((inp) => nextFunction(inp, journal), input)) 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<\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 const interceptors = this.interceptorRegistry.getGlobalTaskInterceptors();\n if (interceptors.length === 0) {\n return runner;\n }\n\n const createExecutionInput = (\n input: TInput,\n nextFunc: (inp?: TInput) => Promise<Awaited<TOutput>>,\n journal: ExecutionJournal,\n ): ITaskMiddlewareExecutionInput<TInput, Awaited<TOutput>> => ({\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 = (\n inp?: TInput,\n ): Promise<Awaited<TOutput>> =>\n nextFunction(inp === undefined ? input : inp, journal) as Promise<\n Awaited<TOutput>\n >;\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 Promise<\n Awaited<TOutput>\n >;\n };\n return interceptor(wrappedNext, executionInput) as TOutput;\n }) 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: TInput,\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, TDeps>(\n baseMiddlewareRunner as (\n input: TInput,\n journal: ExecutionJournal,\n ) => TOutput,\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<\n TInput,\n TOutput extends Promise<any>,\n TDeps extends DependencyMapType,\n >(\n middlewareRunner: (input: TInput, journal: ExecutionJournal) => TOutput,\n interceptors: readonly TaskMiddlewareInterceptor[],\n task: ITask<TInput, TOutput, TDeps>,\n ): (input: TInput, journal: ExecutionJournal) => TOutput {\n if (interceptors.length === 0) {\n return middlewareRunner;\n }\n\n let wrapped = middlewareRunner;\n\n for (let i = interceptors.length - 1; i >= 0; i--) {\n const interceptor = interceptors[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 Promise<\n Awaited<TOutput>\n >;\n };\n\n return interceptor(wrappedNext, executionInput) as TOutput;\n }) as (input: TInput, journal: ExecutionJournal) => TOutput;\n }\n\n return wrapped;\n }\n}\n","import {\n IResource,\n DependencyMapType,\n ResourceDependencyValuesType,\n} from \"../../defs\";\nimport { Store } from \"../Store\";\nimport { InterceptorRegistry } from \"./InterceptorRegistry\";\nimport { MiddlewareResolver } from \"./MiddlewareResolver\";\nimport { ValidationHelper } from \"./ValidationHelper\";\nimport { IResourceMiddlewareExecutionInput } from \"../../types/resourceMiddleware\";\nimport type { ResourceMiddlewareInterceptor } from \"./types\";\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: ResourceDependencyValuesType<TDeps>,\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 try {\n return await runner(config);\n } catch (error: unknown) {\n await this.reportUnhandledResourceInitError(resource.id, error);\n throw error;\n }\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: ResourceDependencyValuesType<TDeps>,\n context: TContext,\n ): (config: TConfig) => TValue {\n return (async (config: TConfig) => {\n if (!resource.init) {\n return undefined;\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 Awaited<TValue>;\n }) 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\n const baseMiddlewareRunner = async (cfg: TConfig) => {\n return 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 };\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 (config: TConfig) => TValue,\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: TConfig,\n nextFunc: (config?: TConfig) => Promise<Awaited<TValue>>,\n ): IResourceMiddlewareExecutionInput<TConfig, Awaited<TValue>> => ({\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 nextForExecutionInput = (\n nextConfig?: TConfig,\n ): Promise<Awaited<TValue>> => {\n const effectiveConfig = nextConfig === undefined ? cfg : nextConfig;\n return nextFunction(effectiveConfig) as Promise<Awaited<TValue>>;\n };\n const executionInput = createExecutionInput(cfg, nextForExecutionInput);\n const wrappedNext = (\n input: IResourceMiddlewareExecutionInput<TConfig, Awaited<TValue>>,\n ): Promise<Awaited<TValue>> => {\n return nextFunction(input.resource.config) as Promise<\n Awaited<TValue>\n >;\n };\n return interceptor(wrappedNext, executionInput) as TValue;\n }) 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 ResourceMiddlewareInterceptor[],\n resource: IResource<TConfig, TValue, any, any>,\n ): (config: TConfig) => TValue {\n if (interceptors.length === 0) {\n return middlewareRunner;\n }\n\n let wrapped = middlewareRunner;\n\n for (let i = interceptors.length - 1; i >= 0; i--) {\n const interceptor = interceptors[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 (\n resourceConfig?: TConfig,\n ) => Promise<Awaited<TValue>>,\n };\n\n const wrappedNext = (\n input: IResourceMiddlewareExecutionInput<TConfig, Awaited<TValue>>,\n ): Promise<Awaited<TValue>> => {\n return nextFunction(input.resource.config) as Promise<\n Awaited<TValue>\n >;\n };\n\n return interceptor(wrappedNext, executionInput) as TValue;\n }) as (config: TConfig) => TValue;\n }\n\n return wrapped;\n }\n\n private async reportUnhandledResourceInitError(\n source: string,\n error: unknown,\n ): Promise<void> {\n try {\n await this.store.onUnhandledError({\n error,\n kind: \"resourceInit\",\n source,\n });\n } catch (_) {\n // Ignore errors from error handler\n }\n }\n}\n","import {\n DependencyMapType,\n ITask,\n IResource,\n ResourceDependencyValuesType,\n} from \"../defs\";\nimport { Store } from \"./Store\";\nimport { ITaskMiddleware, IResourceMiddleware } from \"../defs\";\nimport { isResourceMiddleware, isTaskMiddleware } from \"../define\";\nimport { InterceptorRegistry } from \"./middleware/InterceptorRegistry\";\nimport type { InterceptorOwnerSnapshot } 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\";\nimport { unknownMiddlewareTypeError } from \"../errors\";\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.interceptOwned(\"task\", interceptor as TaskMiddlewareInterceptor);\n return;\n }\n this.interceptOwned(\n \"resource\",\n interceptor as ResourceMiddlewareInterceptor,\n );\n }\n\n /**\n * @internal\n * Same behavior as intercept(), but records owner metadata for tooling.\n */\n interceptOwned(\n kind: \"task\",\n interceptor: TaskMiddlewareInterceptor,\n ownerResourceId?: string,\n ): void;\n interceptOwned(\n kind: \"resource\",\n interceptor: ResourceMiddlewareInterceptor,\n ownerResourceId?: string,\n ): void;\n interceptOwned(\n kind: \"task\" | \"resource\",\n interceptor: TaskMiddlewareInterceptor | ResourceMiddlewareInterceptor,\n ownerResourceId?: string,\n ): void {\n if (kind === \"task\") {\n this.interceptorRegistry.addGlobalTaskInterceptor(\n interceptor as TaskMiddlewareInterceptor,\n ownerResourceId,\n );\n } else {\n this.interceptorRegistry.addGlobalResourceInterceptor(\n interceptor as ResourceMiddlewareInterceptor,\n ownerResourceId,\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.interceptMiddlewareOwned(\n middleware,\n interceptor as TaskMiddlewareInterceptor,\n );\n return;\n }\n if (isResourceMiddleware(middleware)) {\n this.interceptMiddlewareOwned(\n middleware,\n interceptor as ResourceMiddlewareInterceptor,\n );\n return;\n }\n unknownMiddlewareTypeError.throw();\n }\n\n /**\n * @internal\n * Same behavior as interceptMiddleware(), but records owner metadata for tooling.\n */\n interceptMiddlewareOwned(\n middleware: ITaskMiddleware<any, any, any, any>,\n interceptor: TaskMiddlewareInterceptor,\n ownerResourceId?: string,\n ): void;\n interceptMiddlewareOwned(\n middleware: IResourceMiddleware<any, any, any, any>,\n interceptor: ResourceMiddlewareInterceptor,\n ownerResourceId?: string,\n ): void;\n interceptMiddlewareOwned(\n middleware:\n | ITaskMiddleware<any, any, any, any>\n | IResourceMiddleware<any, any, any, any>,\n interceptor: TaskMiddlewareInterceptor | ResourceMiddlewareInterceptor,\n ownerResourceId?: string,\n ): void {\n if (isTaskMiddleware(middleware)) {\n this.interceptorRegistry.addTaskMiddlewareInterceptor(\n middleware.id,\n interceptor as TaskMiddlewareInterceptor,\n ownerResourceId,\n );\n } else if (isResourceMiddleware(middleware)) {\n this.interceptorRegistry.addResourceMiddlewareInterceptor(\n middleware.id,\n interceptor as ResourceMiddlewareInterceptor,\n ownerResourceId,\n );\n } else {\n unknownMiddlewareTypeError.throw();\n }\n }\n\n /**\n * @internal\n * Snapshot of resource owners that registered middleware interceptors.\n */\n getInterceptorOwnerSnapshot(): InterceptorOwnerSnapshot {\n return this.interceptorRegistry.getOwnerSnapshot();\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: ResourceDependencyValuesType<D>,\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 { ResourceStoreElementType } from \"../../types/storeTypes\";\nimport { getResourceDependencyIds } from \"./resourceDependencyIds\";\n\ntype DisposeOrderOptions = {\n preferInitOrderFastPath?: boolean;\n};\n\n/**\n * Returns initialized resources sorted in dispose order (dependents first).\n * Uses the recorded init-order when complete, otherwise falls back to a\n * topological sort derived from the resource dependency graph.\n */\nexport function getResourcesInDisposeOrder(\n resources: Map<string, ResourceStoreElementType>,\n initializedResourceIds: readonly string[],\n options: DisposeOrderOptions = {},\n): ResourceStoreElementType[] {\n const { preferInitOrderFastPath = true } = options;\n const initializedResources = Array.from(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 initializedResourceIds.length === initializedResources.length &&\n initializedResources.every((r) =>\n initializedResourceIds.includes(r.resource.id),\n );\n if (preferInitOrderFastPath && initOrderHasAllInitialized) {\n const byId = new Map(\n initializedResources.map((r) => [r.resource.id, r] as const),\n );\n return 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 return getResourceDependencyIds(resource.resource.dependencies);\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 = 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","import type { ITask } from \"../types/task\";\nimport type { IResource } from \"../types/resource\";\nimport type { StoreRegistry } from \"../models/StoreRegistry\";\nimport { isTask, isResource, isEvent, isOptional } from \"../definers/tools\";\nimport type { DependencyMapType } from \"../types/utilities\";\n\n/**\n * Collects all declared error ids from a task or resource definition and its\n * entire dependency chain: own throws, middleware throws (local + everywhere),\n * resource dependency throws (with their middleware), and — for tasks — hook\n * throws on events the task can emit.\n *\n * Designed for introspection, documentation, and error-contract tooling.\n * Returns a deduplicated list of normalized error id strings.\n */\nexport function getAllThrows(\n registry: StoreRegistry,\n target: ITask<any, any, any, any, any, any> | IResource<any, any, any, any>,\n): readonly string[] {\n const seen = new Set<string>();\n const result: string[] = [];\n\n const collect = (ids: readonly string[] | undefined) => {\n if (!ids) return;\n for (const id of ids) {\n if (seen.has(id)) continue;\n seen.add(id);\n result.push(id);\n }\n };\n\n if (isTask(target)) {\n collectTaskThrows(registry, target, seen, collect);\n } else if (isResource(target)) {\n collectResourceThrows(registry, target, seen, collect);\n }\n\n return result;\n}\n\ntype Collector = (ids: readonly string[] | undefined) => void;\n\n// ── Task aggregation ───────────────────────────────────────────────────\n\nfunction collectTaskThrows(\n registry: StoreRegistry,\n task: ITask<any, any, any, any, any, any>,\n seen: Set<string>,\n collect: Collector,\n): void {\n // 1. Task's own throws\n collect(task.throws);\n\n // 2. Local middleware attached to the task\n collectMiddlewareThrows(task.middleware, collect);\n\n // 3. Global (\"everywhere\") task middleware that applies to this task\n collectEverywhereTaskMiddlewareThrows(registry, task, collect);\n\n // 4. Resource dependencies — collect their throws + resource middleware\n collectDependencyResourceThrows(registry, task.dependencies, seen, collect);\n\n // 5. Hooks listening to events this task can emit\n collectHookThrowsForEventDeps(registry, task.dependencies, collect);\n}\n\n// ── Resource aggregation ───────────────────────────────────────────────\n\nfunction collectResourceThrows(\n registry: StoreRegistry,\n resource: IResource<any, any, any, any>,\n seen: Set<string>,\n collect: Collector,\n): void {\n // 1. Resource's own throws\n collect(resource.throws);\n\n // 2. Local middleware attached to the resource\n collectMiddlewareThrows(resource.middleware, collect);\n\n // 3. Global (\"everywhere\") resource middleware that applies to this resource\n collectEverywhereResourceMiddlewareThrows(registry, resource, collect);\n\n // 4. Resource dependencies — collect their throws + resource middleware\n collectDependencyResourceThrows(\n registry,\n resource.dependencies,\n seen,\n collect,\n );\n}\n\n// ── Middleware helpers ─────────────────────────────────────────────────\n\nfunction collectMiddlewareThrows(\n middleware: readonly { id: string }[],\n collect: Collector,\n): void {\n for (const mw of middleware) {\n const throws = (mw as { throws?: readonly string[] }).throws;\n collect(throws);\n }\n}\n\nfunction collectEverywhereTaskMiddlewareThrows(\n registry: StoreRegistry,\n task: ITask<any, any, any, any, any, any>,\n collect: Collector,\n): void {\n // Already-collected local middleware ids — skip those to avoid double-counting\n const localIds = new Set(task.middleware.map((m: { id: string }) => m.id));\n\n for (const entry of registry.taskMiddlewares.values()) {\n if (localIds.has(entry.middleware.id)) continue;\n\n const flag = entry.middleware.everywhere;\n if (!flag) continue;\n\n const applies = typeof flag === \"function\" ? flag(task) : flag === true;\n if (applies) {\n collect(entry.middleware.throws);\n }\n }\n}\n\nfunction collectEverywhereResourceMiddlewareThrows(\n registry: StoreRegistry,\n resource: IResource<any, any, any, any>,\n collect: Collector,\n): void {\n const localIds = new Set(\n resource.middleware.map((m: { id: string }) => m.id),\n );\n\n for (const entry of registry.resourceMiddlewares.values()) {\n if (localIds.has(entry.middleware.id)) continue;\n\n const flag = entry.middleware.everywhere;\n if (!flag) continue;\n\n const applies = typeof flag === \"function\" ? flag(resource) : flag === true;\n if (applies) {\n collect(entry.middleware.throws);\n }\n }\n}\n\n// ── Dependency traversal ──────────────────────────────────────────────\n\nfunction collectDependencyResourceThrows(\n registry: StoreRegistry,\n dependencies: DependencyMapType | (() => DependencyMapType) | undefined,\n seen: Set<string>,\n collect: Collector,\n): void {\n const resolved = resolveDependencies(dependencies);\n if (!resolved) return;\n\n for (const dep of Object.values(resolved)) {\n const unwrapped = unwrapOptional(dep);\n if (!isResource(unwrapped)) continue;\n\n // Avoid infinite recursion on circular resource deps\n const depKey = `resource:${unwrapped.id}`;\n if (seen.has(depKey)) continue;\n seen.add(depKey);\n\n collect(unwrapped.throws);\n collectMiddlewareThrows(unwrapped.middleware, collect);\n collectEverywhereResourceMiddlewareThrows(registry, unwrapped, collect);\n\n // Recurse into the resource's own resource-deps\n collectDependencyResourceThrows(\n registry,\n unwrapped.dependencies,\n seen,\n collect,\n );\n }\n}\n\n// ── Hook-event matching ───────────────────────────────────────────────\n\nfunction collectHookThrowsForEventDeps(\n registry: StoreRegistry,\n dependencies: DependencyMapType | (() => DependencyMapType),\n collect: Collector,\n): void {\n // Task dependencies are always defined (ITask.dependencies is required)\n const resolved = resolveDependencies(dependencies)!;\n\n // Gather event ids this task can emit\n const emittedEventIds = new Set<string>();\n for (const dep of Object.values(resolved)) {\n const unwrapped = unwrapOptional(dep);\n if (unwrapped && isEvent(unwrapped)) {\n emittedEventIds.add(unwrapped.id);\n }\n }\n\n if (emittedEventIds.size === 0) return;\n\n // Scan hooks — collect throws from those listening to any of the emitted events\n for (const entry of registry.hooks.values()) {\n const on = entry.hook.on;\n if (hookListensToAny(on, emittedEventIds)) {\n collect(entry.hook.throws);\n }\n }\n}\n\nfunction hookListensToAny(\n on: \"*\" | { id: string } | readonly { id: string }[],\n eventIds: Set<string>,\n): boolean {\n // Wildcard hooks listen to everything\n if (on === \"*\") return true;\n\n if (Array.isArray(on)) {\n return (on as readonly { id: string }[]).some((e) => eventIds.has(e.id));\n }\n\n // Single event\n return eventIds.has((on as { id: string }).id);\n}\n\n// ── Utility ───────────────────────────────────────────────────────────\n\nfunction resolveDependencies(\n deps: DependencyMapType | (() => DependencyMapType) | undefined,\n): DependencyMapType | undefined {\n if (!deps) return undefined;\n if (typeof deps === \"function\") {\n return (deps as () => DependencyMapType)();\n }\n return deps;\n}\n\nfunction unwrapOptional(dep: unknown): unknown {\n if (dep && typeof dep === \"object\" && isOptional(dep)) {\n return dep.inner;\n }\n return dep;\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 {\n tunnelClientContractError,\n tunnelEventNotFoundError,\n tunnelOwnershipConflictError,\n tunnelTaskNotFoundError,\n} from \"../../errors\";\n\nexport const tunnelResourceMiddleware = defineResourceMiddleware<\n void,\n DependencyMapType,\n TunnelRunner,\n DependencyMapType\n>({\n id: \"globals.middleware.resource.tunnel\",\n throws: [\n tunnelClientContractError,\n tunnelTaskNotFoundError,\n tunnelEventNotFoundError,\n tunnelOwnershipConflictError,\n ],\n dependencies: {\n store: globalResources.store,\n eventManager: globalResources.eventManager,\n logger: globalResources.logger,\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, logger }) => {\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 Store;\n const tasks = value.tasks ? resolveTasks(typedStore, value.tasks) : [];\n const events = value.events\n ? resolveEvents(typedStore, value.events as TunnelEventSelector)\n : [];\n\n if (mode === \"client\" || mode === \"both\") {\n if (tasks.length > 0 && typeof value.run !== \"function\") {\n tunnelClientContractError.throw({\n message:\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 tunnelClientContractError.throw({\n message:\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[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 ITask, input);\n }) as ITask[\"run\"],\n isTunneled: true,\n [symbolTunneledBy]: resourceId,\n } as typeof st.task;\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 (error) {\n try {\n await logger.warn(\n \"Tunnel remote-first delivery failed; falling back to local listeners.\",\n {\n source: resource.definition.id,\n error,\n data: { eventId: emission.id },\n },\n );\n } catch {\n // Ignore logger failures to preserve fallback semantics.\n }\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) tunnelTaskNotFoundError.throw({ taskId: item });\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) tunnelTaskNotFoundError.throw({ taskId: String(item) });\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 const eventId =\n typeof item === \"string\"\n ? item\n : typeof item === \"object\" && item\n ? item.id\n : String(item);\n tunnelEventNotFoundError.throw({ eventId });\n }\n out.push(st!.event);\n }\n\n return out;\n}\n","import { globalEventsArray } from \"../globals/globalEvents\";\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 { globalTags } from \"../globals/globalTags\";\nimport type { StoreRegistry } from \"./StoreRegistry\";\nimport {\n durableExecutionError,\n middlewareCircuitBreakerOpenError,\n middlewareRateLimitExceededError,\n middlewareTimeoutError,\n} from \"../errors\";\n\nexport function registerStoreBuiltins(registry: StoreRegistry): void {\n registry.storeGenericItem(globalResources.queue);\n registry.storeGenericItem(globalResources.httpClientFactory);\n\n Object.values(globalTags).forEach((tag) => {\n registry.storeGenericItem(tag);\n });\n\n globalEventsArray.forEach((event) => {\n registry.storeGenericItem(event);\n });\n\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 registry.storeGenericItem(middleware);\n });\n\n const builtInResourceMiddlewares = [\n retryResourceMiddleware,\n timeoutResourceMiddleware,\n tunnelResourceMiddleware,\n ];\n builtInResourceMiddlewares.forEach((middleware) => {\n registry.storeGenericItem(middleware);\n });\n\n const builtInResources = [\n globalResources.cron,\n rateLimitResource,\n circuitBreakerResource,\n temporalResource,\n concurrencyResource,\n ];\n builtInResources.forEach((resource) => {\n registry.storeGenericItem(resource);\n });\n\n const builtInErrors = [\n middlewareTimeoutError,\n middlewareCircuitBreakerOpenError,\n middlewareRateLimitExceededError,\n durableExecutionError,\n ];\n builtInErrors.forEach((helper) => {\n registry.storeGenericItem(helper);\n });\n}\n","import {\n IResource,\n RegisterableItems,\n ITag,\n AnyTask,\n TaggedTask,\n TaggedResource,\n AnyResource,\n} from \"../defs\";\nimport { findCircularDependencies } from \"./utils/findCircularDependencies\";\nimport {\n circularDependencyError,\n storeAlreadyInitializedError,\n eventEmissionCycleError,\n lockedError,\n taskRunnerNotSetError,\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 { OnUnhandledError } from \"./UnhandledError\";\nimport { MiddlewareManager } from \"./MiddlewareManager\";\nimport { RunnerMode } from \"../types/runner\";\nimport { detectRunnerMode } from \"../tools/detectRunnerMode\";\nimport { Serializer } from \"../serializer\";\nimport { getResourcesInDisposeOrder as computeDisposeOrder } from \"./utils/disposeOrder\";\nimport { RunResult } from \"./RunResult\";\nimport { getAllThrows } from \"../tools/getAllThrows\";\nimport type { ITask } from \"../types/task\";\nimport { registerStoreBuiltins } from \"./BuiltinsRegistry\";\n\nconst INTERNAL_ROOT_CRON_DEPENDENCY_KEY = \"__runnerCron\";\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 private preferInitOrderDisposal = true;\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 /**\n * Checks whether a registered item is visible to a consumer id under the\n * current exports visibility model.\n */\n public isItemVisibleToConsumer(\n targetId: string,\n consumerId: string,\n ): boolean {\n return this.registry.visibilityTracker.isAccessible(targetId, consumerId);\n }\n\n get isLocked() {\n return this.#isLocked;\n }\n\n lock() {\n this.#isLocked = true;\n this.registry.lockAll();\n }\n\n checkLock() {\n if (this.#isLocked) {\n lockedError.throw({ what: \"Store\" });\n }\n }\n\n private registerGlobalComponents(runtimeResult: RunResult<unknown>) {\n if (!this.taskRunner) {\n taskRunnerNotSetError.throw();\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 builtInResourcesMap.set(globalResources.runtime, runtimeResult);\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 registerStoreBuiltins(this.registry);\n }\n\n public setTaskRunner(taskRunner: TaskRunner) {\n this.taskRunner = taskRunner;\n }\n\n public setPreferInitOrderDisposal(prefer: boolean) {\n this.preferInitOrderDisposal = prefer;\n }\n\n private setupRootResource(rootDefinition: IResource<any>, config: unknown) {\n const resolvedDependencies =\n typeof rootDefinition.dependencies === \"function\"\n ? rootDefinition.dependencies(config)\n : rootDefinition.dependencies;\n\n const dependenciesObject = (resolvedDependencies || {}) as Record<\n string,\n unknown\n >;\n\n const rootDependencies = {\n ...dependenciesObject,\n [INTERNAL_ROOT_CRON_DEPENDENCY_KEY]:\n dependenciesObject[INTERNAL_ROOT_CRON_DEPENDENCY_KEY] ||\n globalResources.cron,\n };\n\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: rootDependencies,\n };\n\n this.root = {\n resource: root,\n computedDependencies: undefined,\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 circularDependencyError.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: unknown,\n runtimeResult: RunResult<unknown>,\n ) {\n if (this.#isInitialized) {\n storeAlreadyInitializedError.throw();\n }\n\n this.registerGlobalComponents(runtimeResult);\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 const disposalErrors: Error[] = [];\n\n for (const resource of this.getResourcesInDisposeOrder()) {\n try {\n if (resource.isInitialized && resource.resource.dispose) {\n await resource.resource.dispose(\n resource.value,\n resource.config,\n resource.computedDependencies ?? {},\n resource.context,\n );\n }\n } catch (error) {\n disposalErrors.push(\n error instanceof Error ? error : new Error(String(error)),\n );\n }\n }\n\n this.clearRuntimeStateAfterDispose();\n this.eventManager.dispose();\n\n if (disposalErrors.length === 1) {\n throw disposalErrors[0];\n }\n\n if (disposalErrors.length > 1) {\n throw Object.assign(\n new Error(\"One or more resources failed to dispose.\"),\n {\n name: \"AggregateError\",\n errors: disposalErrors,\n cause: disposalErrors[0],\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 return computeDisposeOrder(this.resources, this.initializedResourceIds, {\n preferInitOrderFastPath: this.preferInitOrderDisposal,\n });\n }\n\n private clearRuntimeStateAfterDispose() {\n for (const resource of this.resources.values()) {\n resource.value = undefined;\n resource.context = undefined;\n resource.computedDependencies = undefined;\n resource.isInitialized = false;\n }\n\n this.initializedResourceIds.length = 0;\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 /**\n * Returns all error ids declared across a task or resource and its full\n * dependency chain: own throws, middleware throws (local + everywhere),\n * resource dependency throws, and — for tasks — hook throws on events\n * the task can emit. Deduplicated.\n */\n public getAllThrows(\n target: ITask<any, any, any, any, any, any> | IResource<any, any, any, any>,\n ): readonly string[] {\n return getAllThrows(this.registry, target);\n }\n}\n","import { getPlatform } from \"../platform\";\nimport { normalizeError } from \"../globals/resources/tunnel/error-utils\";\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: unknown) => {\n for (const handler of activeErrorHandlers) {\n try {\n await handler(err, \"uncaughtException\");\n } catch (handlerError) {\n console.error(\"[runner] Process error handler failed.\", {\n source: \"uncaughtException\",\n originalError: normalizeError(err),\n handlerError: normalizeError(handlerError),\n });\n }\n }\n };\n const onUnhandledRejection = async (reason: unknown) => {\n for (const handler of activeErrorHandlers) {\n try {\n await handler(reason, \"unhandledRejection\");\n } catch (handlerError) {\n console.error(\"[runner] Process error handler failed.\", {\n source: \"unhandledRejection\",\n originalError: normalizeError(reason),\n handlerError: normalizeError(handlerError),\n });\n }\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 const disposalErrors: Error[] = [];\n try {\n const disposers = Array.from(activeDisposers);\n for (const d of disposers) {\n try {\n await d();\n } catch (disposeError) {\n const normalizedError = normalizeError(disposeError);\n disposalErrors.push(normalizedError);\n console.error(\"[runner] Shutdown disposer failed.\", normalizedError);\n } finally {\n activeDisposers.delete(d);\n }\n }\n } finally {\n platform.exit(disposalErrors.length === 0 ? 0 : 1);\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\nfunction toError(value: unknown): Error {\n return value instanceof Error ? value : new Error(String(value));\n}\n\nfunction reportUnhandledErrorReporterFailure(\n reporterError: unknown,\n info: OnUnhandledErrorInfo,\n): void {\n const normalizedReporterError = toError(reporterError);\n const normalizedOriginalError = toError(info.error);\n console.error(\"[runner] Failed to report unhandled error.\", {\n reporterError: normalizedReporterError,\n originalError: normalizedOriginalError,\n kind: info.kind,\n source: info.source,\n });\n}\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 (reporterError) {\n reportUnhandledErrorReporterFailure(reporterError, {\n error,\n kind: \"process\",\n source,\n });\n }\n };\n}\n\nexport async function safeReportUnhandledError(\n handler: OnUnhandledError,\n info: OnUnhandledErrorInfo,\n): Promise<void> {\n try {\n await handler(info);\n } catch (reporterError) {\n reportUnhandledErrorReporterFailure(reporterError, info);\n }\n}\n","import {\n IEvent,\n IEventEmitOptions,\n IEventEmitReport,\n IResource,\n ITask,\n} from \"../defs\";\nimport { IRuntime } from \"../types/runner\";\nimport type { TaskCallOptions } from \"../types/utilities\";\n// For RunResult convenience API, preserve the original simple messages\nimport type { EventManager } from \"./EventManager\";\nimport type { Logger } from \"./Logger\";\nimport type { Store } from \"./Store\";\nimport type { TaskRunner } from \"./TaskRunner\";\nimport {\n lazyResourceAccessDisabledError,\n lazyResourceSyncAccessError,\n runResultDisposeDuringBootstrapError,\n runResultDisposedError,\n runtimeElementNotFoundError,\n runtimeRootNotAvailableError,\n runtimeRootNotInitializedError,\n} from \"../errors\";\n\n/**\n * Options for configuring lazy resource loading behavior.\n * Used to enable on-demand resource initialization to improve startup time.\n */\ntype RunResultLazyOptions = {\n /**\n * Whether lazy loading mode is enabled.\n * When true, resources not used at startup are not initialized until accessed.\n */\n lazyMode?: boolean;\n\n /**\n * Set of resource IDs that were not initialized at startup.\n * These resources require lazy loading to be accessed.\n */\n startupUnusedResourceIds?: ReadonlySet<string>;\n\n /**\n * Custom loader function for lazy resource initialization.\n * Called when accessing a resource that hasn't been initialized yet.\n */\n lazyResourceLoader?: <T>(resourceId: string) => Promise<T>;\n};\n\n/**\n * RunResult represents the runtime instance after executing `run(root)`.\n * It provides access to tasks, events, resources, and lifecycle management.\n *\n * Key features:\n * - Task execution via `runTask()`\n * - Event emission via `emitEvent()`\n * - Resource access via `getResourceValue()` / `getLazyResourceValue()`\n * - Root access via `getRootValue()`, `getRootConfig()`, `getRootId()`\n * - Disposal via `dispose()`\n *\n * @example\n * const runtime = await run(app);\n * const result = await runtime.runTask(myTask, { input: \"data\" });\n * await runtime.dispose();\n */\nexport class RunResult<V> implements IRuntime<V> {\n /**\n * The root value returned by the root resource's init function.\n * Set via `setValue()` after the root resource initializes.\n */\n #value: V | undefined;\n\n /**\n * Flag indicating the runtime has been fully disposed.\n * Once disposed, all operations (runTask, emitEvent, etc.) will throw.\n */\n #disposed = false;\n\n /**\n * Flag indicating disposal is in progress.\n * Prevents concurrent disposal calls.\n */\n #disposing = false;\n\n /**\n * Promise that resolves when disposal completes.\n * Used to coordinate multiple concurrent dispose() calls.\n */\n #disposePromise: Promise<void> | undefined;\n\n /**\n * Flag indicating bootstrap (initialization) is still in progress.\n * Prevents disposal during the bootstrap phase.\n */\n #isBootstrapping = true;\n\n /**\n * Options for lazy resource loading mode.\n * When enabled, unused resources are not initialized until accessed.\n */\n private lazyOptions: RunResultLazyOptions = {};\n\n /**\n * Creates a new RunResult instance.\n *\n * @param logger - The framework logger for runtime diagnostics\n * @param store - The central store containing all registered tasks, events, resources\n * @param eventManager - Handles event emission and hook execution\n * @param taskRunner - Executes tasks with middleware and validation\n * @param disposeFn - Callback to clean up all resources during disposal\n */\n constructor(\n /**\n * Framework logger for diagnostics and debugging.\n * Use this for logging within tasks or hooks.\n */\n public readonly logger: Logger,\n /**\n * Central store containing all registered definitions.\n * Provides access to tasks, events, resources, and their metadata.\n */\n public readonly store: Store,\n /**\n * Event manager for emitting events and triggering hooks.\n * Handles both sync and async event propagation.\n */\n private readonly eventManager: EventManager,\n /**\n * Task runner that executes tasks with middleware pipeline.\n * Handles dependency injection, validation, and error handling.\n */\n private readonly taskRunner: TaskRunner,\n /**\n * Function to call during disposal.\n * Disposes all resources in reverse initialization order.\n */\n private readonly disposeFn: () => Promise<void>,\n ) {}\n\n /**\n * Returns the root value initialized by the root resource.\n * Only available after the root resource has been initialized.\n */\n public get value(): V {\n return this.#value as V;\n }\n\n /**\n * Ensures the runtime is active and can accept operations.\n * Throws if the runtime has been disposed or is currently disposing.\n * @internal\n */\n private ensureRuntimeIsActive() {\n if (this.#disposed || this.#disposing) {\n runResultDisposedError.throw();\n }\n }\n\n /**\n * Retrieves the root resource from the store.\n * Throws if the root hasn't been set (e.g., during early access).\n * @internal\n */\n private getRootOrThrow() {\n if (!this.store.root) {\n runtimeRootNotAvailableError.throw();\n }\n\n return this.store.root;\n }\n\n /**\n * Configures lazy loading options for resources.\n * Used to enable on-demand resource initialization.\n * @param options - Lazy mode configuration\n */\n public setLazyOptions(options: RunResultLazyOptions) {\n this.lazyOptions = options;\n }\n\n /**\n * Sets the root value after the root resource initializes.\n * @param value - The initialized root value\n */\n public setValue(value: V | undefined) {\n this.#value = value;\n this.#isBootstrapping = false;\n }\n\n /**\n * Executes a registered task within the runtime context.\n *\n * The task runs through its full middleware pipeline including:\n * - Input validation (via inputSchema)\n - Middleware (retry, cache, timeout, etc.)\n - The task's core logic\n - Result validation (via resultSchema)\n *\n * @example\n * // Run with task definition\n * const result = await runtime.runTask(createUser, { name: \"Alice\" });\n *\n * // Run with options for journal forwarding\n * const result = await runtime.runTask(greet, undefined, { journal });\n */\n public runTask = <TTask extends ITask<any, Promise<any>, any> | string>(\n task: TTask,\n ...args: TTask extends ITask<infer I, any, any>\n ? I extends undefined | void\n ? [input?: I, options?: TaskCallOptions]\n : [input: I, options?: TaskCallOptions]\n : [input?: unknown, options?: TaskCallOptions]\n ): TTask extends ITask<any, infer O, any> ? O : Promise<any> => {\n this.ensureRuntimeIsActive();\n const [input, options] = args as [unknown, TaskCallOptions | undefined];\n let resolvedTask: ITask<any, Promise<any>, any>;\n\n if (typeof task === \"string\") {\n const taskId = task;\n if (!this.store.tasks.has(taskId)) {\n runtimeElementNotFoundError.throw({ type: \"Task\", elementId: taskId });\n }\n resolvedTask = this.store.tasks.get(taskId)!.task;\n } else {\n resolvedTask = task;\n }\n\n return this.taskRunner.run(\n resolvedTask,\n input,\n options,\n ) as TTask extends ITask<any, infer O, any> ? O : Promise<any>;\n };\n\n /**\n * Emits an event to trigger all registered hooks listening for it.\n *\n * Events are emitted synchronously or asynchronously depending on hook configuration.\n * Hooks execute in order based on their `order()` value (lower runs first).\n *\n * @param event - The event definition or event ID string to emit\n * @param payload - The event payload data\n * @param options - Emission options (failureMode, throwOnError, report)\n * @returns Promise<void> by default, or IEventEmitReport if report: true\n *\n * @example\n * // Basic emission\n * await runtime.emitEvent(userRegistered, { userId: \"123\", email: \"a@b.com\" });\n *\n * // With report for hook failure tracking\n * const report = await runtime.emitEvent(notify, undefined, { report: true });\n * if (report.failedListeners.length > 0) {\n * console.error(\"Failed hooks:\", report.failedListeners);\n * }\n */\n public emitEvent = (<P>(\n event: IEvent<P> | string,\n payload?: P extends undefined | void ? undefined : P,\n options?: IEventEmitOptions,\n ) => {\n this.ensureRuntimeIsActive();\n\n if (typeof event === \"string\") {\n const eventId = event;\n if (!this.store.events.has(eventId)) {\n runtimeElementNotFoundError.throw({\n type: \"Event\",\n elementId: eventId,\n });\n }\n event = this.store.events.get(eventId)!.event;\n }\n return this.eventManager.emit(event, payload, \"outside\", options);\n }) as {\n <P>(\n event: IEvent<P> | string,\n payload?: P extends undefined | void ? undefined : P,\n ): Promise<void>;\n <P>(\n event: IEvent<P> | string,\n payload: P extends undefined | void ? undefined : P,\n options: IEventEmitOptions & { report: true },\n ): Promise<IEventEmitReport>;\n <P>(\n event: IEvent<P> | string,\n payload?: P extends undefined | void ? undefined : P,\n options?: IEventEmitOptions,\n ): Promise<void | IEventEmitReport>;\n };\n\n /**\n * Synchronously retrieves the initialized value of a resource.\n *\n * The resource must have been initialized (either at startup or via lazy loading).\n * For resources not initialized at startup, use `getLazyResourceValue()` instead.\n *\n * @param resource - The resource definition or resource ID string\n * @returns The initialized value of the resource (unwrapped if Promise-based)\n * @throws RuntimeError if resource not found, not initialized, or runtime disposed\n *\n * @example\n * // Get initialized resource\n * const db = runtime.getResourceValue(database);\n * const config = runtime.getResourceValue(\"app.config\");\n */\n public getResourceValue = <Output extends Promise<any>>(\n /**\n * The resource to retrieve. Can be:\n * - A resource definition object (IResource)\n * - A resource ID string (for dynamic lookup)\n */\n resource: string | IResource<any, Output, any, any, any>,\n ): Output extends Promise<infer U> ? U : Output => {\n this.ensureRuntimeIsActive();\n\n const resourceId = this.getResourceId(resource);\n if (!this.store.resources.has(resourceId)) {\n runtimeElementNotFoundError.throw({\n type: \"Resource\",\n elementId: resourceId,\n });\n }\n if (\n this.lazyOptions.lazyMode &&\n this.lazyOptions.startupUnusedResourceIds?.has(resourceId)\n ) {\n lazyResourceSyncAccessError.throw({ id: resourceId });\n }\n\n return this.store.resources.get(resourceId)!.value;\n };\n\n /**\n * Initializes (if not already) and returns the value of a resource on-demand.\n *\n * This method is useful when:\n * - Lazy loading is enabled and the resource wasn't initialized at startup\n * - You need to access a resource that may not have been loaded yet\n * - You want to ensure initialization happens before access\n *\n * @param resource - The resource definition or resource ID string\n * @returns The initialized value of the resource (unwrapped if Promise-based)\n * @throws RuntimeError if resource not found or runtime disposed\n *\n * @example\n * // Lazy-load a resource on demand\n * const heavyService = await runtime.getLazyResourceValue(heavyService);\n */\n public getLazyResourceValue = async <Output extends Promise<any>>(\n /**\n * The resource to retrieve. Can be:\n * - A resource definition object (IResource)\n * - A resource ID string (for dynamic lookup)\n */\n resource: string | IResource<any, Output, any, any, any>,\n ): Promise<Output extends Promise<infer U> ? U : Output> => {\n this.ensureRuntimeIsActive();\n if (!this.lazyOptions.lazyMode) {\n lazyResourceAccessDisabledError.throw();\n }\n\n const resourceId = this.getResourceId(resource);\n if (!this.store.resources.has(resourceId)) {\n runtimeElementNotFoundError.throw({\n type: \"Resource\",\n elementId: resourceId,\n });\n }\n\n if (!this.lazyOptions.lazyResourceLoader) {\n return this.store.resources.get(resourceId)!.value;\n }\n\n return this.lazyOptions.lazyResourceLoader<\n Output extends Promise<infer U> ? U : Output\n >(resourceId);\n };\n\n /**\n * Retrieves the configuration that was passed to a resource.\n *\n * This returns the config object (the input), not the initialized value.\n * Use `getResourceValue()` to get the initialized value.\n *\n * @param resource - The resource definition or resource ID string\n * @returns The config object passed when registering the resource\n * @throws RuntimeError if resource not found or runtime disposed\n *\n * @example\n * const config = runtime.getResourceConfig(server);\n * // config = { port: 3000 }\n */\n public getResourceConfig = <Config>(\n /**\n * The resource to retrieve config from. Can be:\n * - A resource definition object (IResource)\n * - A resource ID string (for dynamic lookup)\n */\n resource: string | IResource<Config, any, any, any, any>,\n ): Config => {\n this.ensureRuntimeIsActive();\n\n const resourceId = typeof resource === \"string\" ? resource : resource.id;\n if (!this.store.resources.has(resourceId)) {\n runtimeElementNotFoundError.throw({\n type: \"Resource\",\n elementId: resourceId,\n });\n }\n\n return this.store.resources.get(resourceId)!.config;\n };\n\n /**\n * Returns the ID of the root resource.\n * @returns The root resource identifier\n *\n * @example\n * const rootId = runtime.getRootId(); // \"app\"\n */\n public getRootId = (): string => this.getRootOrThrow().resource.id;\n\n /**\n * Returns the configuration passed to the root resource.\n * @returns The root resource configuration\n *\n * @example\n * const config = runtime.getRootConfig<AppConfig>();\n */\n public getRootConfig = <Config = unknown>(): Config =>\n this.getRootOrThrow().config as Config;\n\n /**\n * Returns the initialized value of the root resource.\n *\n * This is the value returned by the root resource's `init` function.\n * The root must have been fully initialized before calling this.\n *\n * @returns The root resource's initialized value\n * @throws RuntimeError if root hasn't been initialized yet\n *\n * @example\n * const app = runtime.getRootValue<App>();\n */\n public getRootValue = <Value = unknown>(): Value => {\n const root = this.getRootOrThrow();\n if (root.isInitialized !== true) {\n runtimeRootNotInitializedError.throw({ rootId: root.resource.id });\n }\n\n return root.value as Value;\n };\n\n /**\n * Extracts the resource ID from a resource definition or string.\n * @internal\n */\n private getResourceId(\n resource: string | IResource<any, any, any, any, any>,\n ): string {\n return typeof resource === \"string\" ? resource : resource.id;\n }\n\n /**\n * Disposes the runtime and all registered resources.\n *\n * Disposal executes in reverse initialization order:\n * 1. All resource `dispose` methods are called\n * 2. Event listeners are cleared\n * 3. Async contexts are reset\n *\n * After disposal, any further operations will throw.\n * Safe to call multiple times (subsequent calls return immediately).\n *\n * @returns Promise that resolves when disposal is complete\n * @throws RuntimeError if called during bootstrap phase\n *\n * @example\n * await runtime.dispose();\n * // All resources cleaned up, runtime is now inactive\n */\n public dispose = () => {\n if (this.#isBootstrapping) {\n runResultDisposeDuringBootstrapError.throw();\n }\n\n if (this.#disposed) {\n return Promise.resolve();\n }\n\n if (this.#disposePromise) {\n return this.#disposePromise;\n }\n\n this.#disposing = true;\n\n this.#disposePromise = Promise.resolve()\n .then(() => this.disposeFn())\n .finally(() => {\n this.#disposed = true;\n this.#disposing = false;\n this.#disposePromise = undefined;\n });\n\n return this.#disposePromise;\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 \"./tools/processShutdownHooks\";\nimport {\n OnUnhandledError,\n createDefaultUnhandledError,\n bindProcessErrorHandler,\n} from \"./models/UnhandledError\";\nimport { RunResult } from \"./models/RunResult\";\nimport { ResourceInitMode, RunOptions } from \"./types/runner\";\nimport { getPlatform } from \"./platform\";\n\nconst activeRunResults = new Set<RunResult<any>>();\n\n/**\n * This is the central function that kicks off your 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 *\n * @example\n * ```ts\n * import { r, run } from \"@bluelibs/runner\";\n *\n * const app = r.resource(\"app\")\n * .register([myTask, myService])\n * .build();\n *\n * const runtime = await run(app);\n * await runtime.runTask(myTask, { name: \"Ada\" });\n * await runtime.dispose();\n * ```\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 lazy = false,\n onUnhandledError: onUnhandledErrorOpt,\n runtimeEventCycleDetection = true,\n initMode = ResourceInitMode.Sequential,\n } = options || {};\n const normalizedInitMode = normalizeResourceInitMode(initMode);\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 normalizedInitMode,\n lazy,\n runtimeEventCycleDetection,\n );\n\n store.setPreferInitOrderDisposal(\n normalizedInitMode === ResourceInitMode.Sequential,\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 activeRunResults.delete(runtimeResult);\n await store.dispose();\n }\n };\n const runtimeResult = new RunResult<any>(\n logger,\n store,\n eventManager,\n taskRunner,\n disposeAll,\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, runtimeResult);\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 runtimeResult.setValue(store.root.value);\n return runtimeResult as RunResult<V extends Promise<infer U> ? U : V>;\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 const startupUnusedResourceIds = new Set<string>(\n Array.from(store.resources.values())\n .filter((resource) => !resource.isInitialized)\n .map((resource) => resource.resource.id),\n );\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 runtimeResult.setLazyOptions({\n lazyMode: lazy,\n startupUnusedResourceIds,\n lazyResourceLoader: async (resourceId: string) => {\n const resource = store.resources.get(resourceId)!.resource;\n return processor.extractResourceDependency(resource);\n },\n });\n runtimeResult.setValue(store.root.value);\n activeRunResults.add(runtimeResult);\n\n return runtimeResult;\n } catch (err) {\n // Rollback initialized resources\n await disposeAll();\n throw err;\n }\n}\n\nexport async function __disposeActiveRunResultsForTests(): Promise<void> {\n await __disposeActiveRunResultsForTestsExcept();\n}\n\nexport function __snapshotActiveRunResultsForTests(): ReadonlySet<\n RunResult<any>\n> {\n return new Set(activeRunResults);\n}\n\nexport async function __disposeActiveRunResultsForTestsExcept(\n keep: ReadonlySet<RunResult<any>> = new Set(),\n): Promise<void> {\n await Promise.all(\n Array.from(activeRunResults)\n .filter((runtime) => !keep.has(runtime))\n .map(async (runtime) => {\n try {\n await runtime.dispose();\n } catch {\n // Best-effort cleanup in tests; preserve original test failure surface.\n }\n }),\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: unknown;\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\nfunction normalizeResourceInitMode(\n mode: ResourceInitMode | \"sequential\" | \"parallel\",\n): ResourceInitMode {\n if (mode === ResourceInitMode.Parallel) {\n return ResourceInitMode.Parallel;\n }\n return ResourceInitMode.Sequential;\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() in your tests instead, which provides the same benefits with a more flexible API and better type safety.\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 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\nexport { mergeArray } from \"../shared/mergeUtils\";\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 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 RegisterableItems,\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 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 [...TTags, ...TNewTags],\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 schema<TNewConfig>(schema: IValidationSchema<TNewConfig>) {\n return builder.configSchema(schema);\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 exports(items: Array<RegisterableItems>, options?: { override?: boolean }) {\n const override = options?.override ?? false;\n const next = clone(state, {\n exports: mergeArray(state.exports, items, override),\n });\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 exports: state.exports,\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 */\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 const filePath = getCallerFile();\n const initial: BuilderState<\n TConfig,\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 NextState),\n ...patch,\n }) as NextState;\n}\n\nexport { mergeArray } from \"../shared/mergeUtils\";\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 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 { builderIncompleteError } from \"../../../errors\";\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 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 schema<TNewInput>(schema: IValidationSchema<TNewInput>) {\n return builder.inputSchema(schema);\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 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 // Fail-fast: task definitions require a run handler.\n if (state.run === undefined) {\n builderIncompleteError.throw({\n type: \"task\",\n builderId: state.id,\n missingFields: [\"run\"],\n message: `Task \"${state.id}\" is incomplete`,\n });\n }\n\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 // Widen state once so clone() calls with different type args don't need repetitive double-casts.\n // clone() is purely structural — it spreads and freezes — so widening is safe here.\n const anyState = state as PhantomBuilderState<any, any, any, any, any, any>;\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 >(anyState, {\n dependencies: nextDependencies 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 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 >(anyState, {\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 >(anyState, {\n tags: mergeArray(state.tags, t, override) as [...TTags, ...TNewTags],\n });\n return makePhantomTaskBuilder<\n TInput,\n TResolved,\n TDeps,\n TMeta,\n [...TTags, ...TNewTags],\n TMiddleware\n >(next);\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 >(anyState, {\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 >(anyState, {\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 >(anyState, {\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(anyState, { throws: list });\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<TInput = undefined>(\n id: string,\n): TaskFluentBuilder<\n TInput,\n Promise<any>,\n {},\n ITaskMeta,\n TagType[],\n TaskMiddlewareAttachmentType[]\n> {\n const filePath = getCallerFile();\n const initial: BuilderState<\n TInput,\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 <TInput = undefined>(\n id: string,\n ): TaskFluentBuilder<\n TInput,\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\nexport { mergeArray } from \"../shared/mergeUtils\";\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 BuilderState<TNew>, {\n payloadSchema: schema,\n });\n return makeEventBuilder<TNew>(next);\n },\n\n schema<TNew>(schema: IValidationSchema<TNew>) {\n return builder.payloadSchema(schema);\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 throws(_list) {\n // Throws is only for documentation on and Event, because events themselves don't throw.\n return builder;\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 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 const next = {\n ...s,\n ...patch,\n };\n return Object.freeze({\n ...next,\n }) as NextState;\n}\n\nexport { mergeArray } from \"../shared/mergeUtils\";\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 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 type { ThrowsList } from \"../../../types/error\";\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 TDeps & TNewDeps,\n },\n );\n\n if (override) {\n return makeHookBuilder<TNewDeps, TOn, TMeta>(\n next 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 throws(list: ThrowsList) {\n const next = clone(state, { throws: list });\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 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 throws: undefined,\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>;\nexport function cloneTask<\n C,\n In,\n Out,\n D extends DependencyMapType,\n TNextConfig,\n TNextIn,\n TNextOut,\n TNextDeps extends DependencyMapType,\n>(\n s: TaskMwState<C, In, Out, D>,\n patch: Partial<TaskMwState<TNextConfig, TNextIn, TNextOut, TNextDeps>>,\n): TaskMwState<TNextConfig, TNextIn, TNextOut, TNextDeps>;\nexport function cloneTask<\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 s: TaskMwState<C, In, Out, D>,\n patch: Partial<TaskMwState<TNextConfig, TNextIn, TNextOut, TNextDeps>>,\n): TaskMwState<TNextConfig, TNextIn, TNextOut, TNextDeps> {\n const next = {\n ...s,\n ...patch,\n };\n return Object.freeze({\n ...next,\n }) as TaskMwState<TNextConfig, TNextIn, TNextOut, TNextDeps>;\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>;\nexport function cloneRes<\n C,\n In,\n Out,\n D extends DependencyMapType,\n TNextConfig,\n TNextIn,\n TNextOut,\n TNextDeps extends DependencyMapType,\n>(\n s: ResMwState<C, In, Out, D>,\n patch: Partial<ResMwState<TNextConfig, TNextIn, TNextOut, TNextDeps>>,\n): ResMwState<TNextConfig, TNextIn, TNextOut, TNextDeps>;\nexport function cloneRes<\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 s: ResMwState<C, In, Out, D>,\n patch: Partial<ResMwState<TNextConfig, TNextIn, TNextOut, TNextDeps>>,\n): ResMwState<TNextConfig, TNextIn, TNextOut, TNextDeps> {\n const next = {\n ...s,\n ...patch,\n };\n return Object.freeze({\n ...next,\n }) as ResMwState<TNextConfig, TNextIn, TNextOut, TNextDeps>;\n}\n\nexport { mergeArray } from \"../shared/mergeUtils\";\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 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 type { ThrowsList } from \"../../../types/error\";\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, C, In, Out, D & TNewDeps>(state, {\n dependencies: nextDependencies as D & TNewDeps,\n });\n\n if (override) {\n const overridden = cloneTask<\n C,\n In,\n Out,\n D & TNewDeps,\n C,\n In,\n Out,\n TNewDeps\n >(next, {\n dependencies: nextDependencies as TNewDeps,\n });\n return makeTaskMiddlewareBuilder<C, In, Out, TNewDeps>(overridden);\n }\n return makeTaskMiddlewareBuilder<C, In, Out, D & TNewDeps>(next);\n },\n\n configSchema<TNew>(schema: IValidationSchema<TNew>) {\n const next = cloneTask<C, In, Out, D, TNew, In, Out, D>(state, {\n configSchema: schema,\n });\n return makeTaskMiddlewareBuilder<TNew, In, Out, D>(next);\n },\n\n schema<TNew>(schema: IValidationSchema<TNew>) {\n return builder.configSchema(schema);\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 throws(list: ThrowsList) {\n const next = cloneTask(state, { throws: list });\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 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 type { ThrowsList } from \"../../../types/error\";\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, C, In, Out, D & TNewDeps>(state, {\n dependencies: nextDependencies as D & TNewDeps,\n });\n\n if (override) {\n const overridden = cloneRes<\n C,\n In,\n Out,\n D & TNewDeps,\n C,\n In,\n Out,\n TNewDeps\n >(next, {\n dependencies: nextDependencies as TNewDeps,\n });\n return makeResourceMiddlewareBuilder<C, In, Out, TNewDeps>(overridden);\n }\n return makeResourceMiddlewareBuilder<C, In, Out, D & TNewDeps>(next);\n },\n\n configSchema<TNew>(schema: IValidationSchema<TNew>) {\n const next = cloneRes<C, In, Out, D, TNew, In, Out, D>(state, {\n configSchema: schema,\n });\n return makeResourceMiddlewareBuilder<TNew, In, Out, D>(next);\n },\n\n schema<TNew>(schema: IValidationSchema<TNew>) {\n return builder.configSchema(schema);\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 throws(list: ThrowsList) {\n const next = cloneRes(state, { throws: list });\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 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<In = void>(\n id: string,\n): TaskMiddlewareFluentBuilder<void, In, void, {}>;\n\nexport function taskMiddlewareBuilder<\n C,\n In,\n Out = void,\n D extends DependencyMapType = {},\n>(id: string): TaskMiddlewareFluentBuilder<C, In, Out, D>;\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,\n run: undefined,\n meta: {} as IMiddlewareMeta,\n tags: [] as TagType[],\n everywhere: undefined,\n throws: undefined,\n });\n\n return makeTaskMiddlewareBuilder(initial);\n}\n\n/**\n * Entry point for creating a resource middleware builder.\n */\nexport function resourceMiddlewareBuilder<C = void>(\n id: string,\n): ResourceMiddlewareFluentBuilder<C, void, void, {}>;\n\nexport function resourceMiddlewareBuilder<\n C,\n In,\n Out = void,\n D extends DependencyMapType = {},\n>(id: string): ResourceMiddlewareFluentBuilder<C, In, Out, D>;\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,\n run: undefined,\n meta: {} as IMiddlewareMeta,\n tags: [] as TagType[],\n everywhere: undefined,\n throws: undefined,\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 BuilderState<TNextConfig, TEnforceIn, TEnforceOut>),\n ...patch,\n });\n}\n\nexport { mergeArray } from \"../shared/mergeUtils\";\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 BuilderState<TNewConfig, TEnforceIn, TEnforceOut>;\n return makeTagBuilder(next);\n },\n\n schema<TNewConfig>(schema: IValidationSchema<TNewConfig>) {\n return builder.configSchema(schema);\n },\n\n config<TNewConfig>(config: TNewConfig) {\n const next = clone(state, { config }) 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 schema(schema) {\n return builder.configSchema(schema);\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\";\nimport type { ThrowsList } from \"../../../types/error\";\nimport { normalizeThrows } from \"../../../tools/throws\";\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 /** Declare which typed errors this hook may throw (declarative only). */\n throws(list: ThrowsList): 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 const next = {\n ...state,\n ...patch,\n } as HookOverrideState<TNextDeps, TNextOn, TNextMeta>;\n return Object.freeze(next);\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 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 throws(list: ThrowsList) {\n const next = cloneHookState(state, { throws: list });\n return makeHookOverrideBuilder(base, next);\n },\n\n build() {\n const normalizedThrows = normalizeThrows(\n { kind: \"hook\", id: state.id },\n state.throws,\n );\n const { id: _id, on: _on, ...patch } = state;\n return defineOverride<IHook<TDeps, TOn, TMeta>>(base, {\n ...patch,\n throws: normalizedThrows,\n });\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 throws: base.throws,\n });\n\n return makeHookOverrideBuilder(base, initial);\n}\n","import type {\n DependencyMapType,\n IResource,\n IResourceDefinition,\n IResourceMeta,\n IValidationSchema,\n OverridableElements,\n RegisterableItems,\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 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 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 [...TTags, ...TNewTags],\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 schema<TNewConfig>(schema: IValidationSchema<TNewConfig>) {\n return builder.configSchema(schema);\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 exports(items: Array<RegisterableItems>, options?: { override?: boolean }) {\n const override = options?.override ?? false;\n const next = cloneResourceState(state, {\n exports: mergeArray(state.exports ?? [], items, override),\n });\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 exports: base.exports,\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\";\nimport type { ThrowsList } from \"../../../types/error\";\nimport { normalizeThrows } from \"../../../tools/throws\";\n\ntype AnyResourceMiddleware = IResourceMiddleware<any, any, any, any>;\n\ntype ResourceMiddlewareOverrideState<\n C,\n In,\n Out,\n D extends DependencyMapType,\n> = Readonly<{\n id: string;\n dependencies: D | ((config: C) => D);\n configSchema: IValidationSchema<C> | undefined;\n run: IResourceMiddlewareDefinition<any, In, Out, any>[\"run\"];\n meta?: IMiddlewareMeta;\n tags?: TagType[];\n everywhere?: IResourceMiddlewareDefinition<C, In, Out, D>[\"everywhere\"];\n throws?: ThrowsList;\n}>;\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 const next = {\n ...state,\n ...patch,\n } as ResourceMiddlewareOverrideState<\n TNextConfig,\n TNextIn,\n TNextOut,\n TNextDeps\n >;\n return Object.freeze(next);\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<\n C,\n In,\n Out,\n D,\n C,\n In,\n Out,\n D & TNewDeps\n >(state, {\n dependencies: nextDependencies as D & TNewDeps,\n });\n\n if (override) {\n const overridden = cloneResourceMiddlewareState<\n C,\n In,\n Out,\n D & TNewDeps,\n C,\n In,\n Out,\n TNewDeps\n >(next, {\n dependencies: nextDependencies as TNewDeps,\n });\n return makeResourceMiddlewareOverrideBuilder<C, In, Out, TNewDeps>(\n base,\n overridden,\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<\n C,\n In,\n Out,\n D,\n TNew,\n In,\n Out,\n D\n >(state, { configSchema: schema });\n return makeResourceMiddlewareOverrideBuilder<TNew, In, Out, D>(\n base,\n next,\n );\n },\n\n schema<TNew>(schema: IValidationSchema<TNew>) {\n return builder.configSchema(schema);\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 throws(list: ThrowsList) {\n const next = cloneResourceMiddlewareState(state, { throws: list });\n return makeResourceMiddlewareOverrideBuilder(base, next);\n },\n\n build() {\n const normalizedThrows = normalizeThrows(\n { kind: \"resource-middleware\", id: state.id },\n state.throws,\n );\n const { id: _id, ...patch } = state;\n return defineOverride<IResourceMiddleware<C, In, Out, D>>(base, {\n ...patch,\n throws: normalizedThrows,\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 throws: base.throws,\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 const next = {\n ...state,\n ...patch,\n } as TaskOverrideState<\n TNextInput,\n TNextOutput,\n TNextDeps,\n TNextMeta,\n TNextTags,\n TNextMiddleware\n >;\n return Object.freeze(next);\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 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 schema<TNewInput>(schema: IValidationSchema<TNewInput>) {\n return builder.inputSchema(schema);\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 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\";\nimport type { ThrowsList } from \"../../../types/error\";\nimport { normalizeThrows } from \"../../../tools/throws\";\n\ntype AnyTaskMiddleware = ITaskMiddleware<any, any, any, any>;\n\ntype TaskMiddlewareOverrideState<\n C,\n In,\n Out,\n D extends DependencyMapType,\n> = Readonly<{\n id: string;\n dependencies: D | ((config: C) => D);\n configSchema: IValidationSchema<C> | undefined;\n run: ITaskMiddlewareDefinition<any, In, Out, any>[\"run\"];\n meta?: IMiddlewareMeta;\n tags?: TagType[];\n everywhere?: ITaskMiddlewareDefinition<C, In, Out, D>[\"everywhere\"];\n throws?: ThrowsList;\n}>;\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 const next = {\n ...state,\n ...patch,\n } as TaskMiddlewareOverrideState<TNextConfig, TNextIn, TNextOut, TNextDeps>;\n return Object.freeze(next);\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<\n C,\n In,\n Out,\n D,\n C,\n In,\n Out,\n D & TNewDeps\n >(state, {\n dependencies: nextDependencies as D & TNewDeps,\n });\n\n if (override) {\n const overridden = cloneTaskMiddlewareState<\n C,\n In,\n Out,\n D & TNewDeps,\n C,\n In,\n Out,\n TNewDeps\n >(next, {\n dependencies: nextDependencies as TNewDeps,\n });\n return makeTaskMiddlewareOverrideBuilder<C, In, Out, TNewDeps>(\n base,\n overridden,\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<C, In, Out, D, TNew, In, Out, D>(\n state,\n { configSchema: schema },\n );\n return makeTaskMiddlewareOverrideBuilder<TNew, In, Out, D>(base, next);\n },\n\n schema<TNew>(schema: IValidationSchema<TNew>) {\n return builder.configSchema(schema);\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 throws(list: ThrowsList) {\n const next = cloneTaskMiddlewareState(state, { throws: list });\n return makeTaskMiddlewareOverrideBuilder(base, next);\n },\n\n build() {\n const normalizedThrows = normalizeThrows(\n { kind: \"task-middleware\", id: state.id },\n state.throws,\n );\n const { id: _id, ...patch } = state;\n return defineOverride<ITaskMiddleware<C, In, Out, D>>(base, {\n ...patch,\n throws: normalizedThrows,\n });\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 throws: base.throws,\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 { defineOverride } from \"../../defineOverride\";\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\";\nimport { overrideUnsupportedBaseError } from \"../../../errors\";\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 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 run: ITask<TInput, TOutput, TDeps, TMeta, TTags, TMiddleware>[\"run\"],\n): ITask<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 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 init: NonNullable<\n IResource<\n TConfig,\n TValue,\n TDeps,\n TContext,\n TMeta,\n TTags,\n TMiddleware\n >[\"init\"]\n >,\n): IResource<TConfig, TValue, TDeps, TContext, TMeta, TTags, TMiddleware>;\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<\n TDeps extends DependencyMapType,\n TOn extends HookOn,\n TMeta extends ITaskMeta,\n>(\n base: IHook<TDeps, TOn, TMeta>,\n run: IHook<TDeps, TOn, TMeta>[\"run\"],\n): IHook<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: ITaskMiddleware<C, In, Out, D>,\n run: ITaskMiddleware<C, In, Out, D>[\"run\"],\n): ITaskMiddleware<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<C, In, Out, D extends DependencyMapType>(\n base: IResourceMiddleware<C, In, Out, D>,\n run: IResourceMiddleware<C, In, Out, D>[\"run\"],\n): IResourceMiddleware<C, In, Out, D>;\nexport function override(base: OverrideBuilderBase, fn?: unknown) {\n if (fn !== undefined) {\n if (isTask(base)) {\n return defineOverride(base, {\n run: fn as typeof base.run,\n });\n }\n if (isResource(base)) {\n return defineOverride(base, {\n init: fn as NonNullable<typeof base.init>,\n });\n }\n if (isHook(base)) {\n return defineOverride(base, {\n run: fn as typeof base.run,\n });\n }\n if (isTaskMiddleware(base)) {\n return defineOverride(base, {\n run: fn as typeof base.run,\n });\n }\n if (isResourceMiddleware(base)) {\n return defineOverride(base, {\n run: fn as typeof base.run,\n });\n }\n }\n\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 overrideUnsupportedBaseError.throw({\n message: OverrideBuilderErrorMessage.UnsupportedBase,\n });\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 middlewares: globalMiddlewares, // Some people prefer this forced plural, for consistency\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/**\n * The unified fluent builder namespace for creating Runner components.\n *\n * @example\n * ```ts\n * import { r, run } from \"@bluelibs/runner\";\n *\n * const greet = r.task(\"app.tasks.greet\")\n * .inputSchema<{ name: string }>({ parse: (v) => v })\n * .run(async (input) => `Hello, ${input.name}!`)\n * .build();\n *\n * const app = r.resource(\"app\").register([greet]).build();\n * const runtime = await run(app);\n * const msg = await runtime.runTask(greet, { name: \"Ada\" });\n * await runtime.dispose();\n * ```\n */\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\";\n\n// Re-export public models — internal-only classes (DependencyProcessor,\n// ResourceInitializer) are excluded from the barrel.\nexport * from \"./models\";\nexport * from \"./globals/types\";\nexport * as Errors from \"./errors\";\nexport { cancellationError } from \"./errors\";\nexport { PlatformAdapter, setPlatform } from \"./platform\";\nexport { RunnerError } from \"./definers/defineError\";\nexport { LockableMap } from \"./tools/LockableMap\";\n\n// HTTP and tunnel functionality\nexport * from \"./http-client\";\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"]}
|