@bluelibs/runner 5.0.0 → 5.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (314) hide show
  1. package/README.md +6 -6
  2. package/dist/browser/index.cjs +1039 -467
  3. package/dist/browser/index.cjs.map +1 -1
  4. package/dist/browser/index.mjs +1037 -467
  5. package/dist/browser/index.mjs.map +1 -1
  6. package/dist/edge/index.cjs +1039 -467
  7. package/dist/edge/index.cjs.map +1 -1
  8. package/dist/edge/index.mjs +1037 -467
  9. package/dist/edge/index.mjs.map +1 -1
  10. package/dist/node/node.cjs +1490 -570
  11. package/dist/node/node.cjs.map +1 -1
  12. package/dist/node/node.mjs +1485 -570
  13. package/dist/node/node.mjs.map +1 -1
  14. package/dist/types/define.d.ts +9 -0
  15. package/dist/types/definers/builders/asyncContext/fluent-builder.d.ts +6 -0
  16. package/dist/types/definers/builders/asyncContext/fluent-builder.interface.d.ts +9 -0
  17. package/dist/types/definers/builders/asyncContext/index.d.ts +10 -0
  18. package/dist/types/definers/builders/asyncContext/types.d.ts +13 -0
  19. package/dist/types/definers/builders/asyncContext/utils.d.ts +5 -0
  20. package/dist/types/definers/builders/asyncContext.d.ts +1 -0
  21. package/dist/types/definers/builders/core.d.ts +30 -0
  22. package/dist/types/definers/builders/error/fluent-builder.d.ts +7 -0
  23. package/dist/types/definers/builders/error/fluent-builder.interface.d.ts +10 -0
  24. package/dist/types/definers/builders/error/index.d.ts +11 -0
  25. package/dist/types/definers/builders/error/types.d.ts +14 -0
  26. package/dist/types/definers/builders/error/utils.d.ts +6 -0
  27. package/dist/types/definers/builders/error.d.ts +1 -0
  28. package/dist/types/definers/builders/event/fluent-builder.d.ts +7 -0
  29. package/dist/types/definers/builders/event/fluent-builder.interface.d.ts +18 -0
  30. package/dist/types/definers/builders/event/index.d.ts +10 -0
  31. package/dist/types/definers/builders/event/types.d.ts +8 -0
  32. package/dist/types/definers/builders/event/utils.d.ts +9 -0
  33. package/dist/types/definers/builders/event.d.ts +1 -0
  34. package/dist/types/definers/builders/hook/fluent-builder.d.ts +8 -0
  35. package/dist/types/definers/builders/hook/fluent-builder.interface.d.ts +27 -0
  36. package/dist/types/definers/builders/hook/index.d.ts +12 -0
  37. package/dist/types/definers/builders/hook/types.d.ts +14 -0
  38. package/dist/types/definers/builders/hook/utils.d.ts +14 -0
  39. package/dist/types/definers/builders/hook.d.ts +1 -0
  40. package/dist/types/definers/builders/middleware/index.d.ts +19 -0
  41. package/dist/types/definers/builders/middleware/resource.d.ts +7 -0
  42. package/dist/types/definers/builders/middleware/resource.interface.d.ts +18 -0
  43. package/dist/types/definers/builders/middleware/task.d.ts +7 -0
  44. package/dist/types/definers/builders/middleware/task.interface.d.ts +18 -0
  45. package/dist/types/definers/builders/middleware/types.d.ts +13 -0
  46. package/dist/types/definers/builders/middleware/utils.d.ts +18 -0
  47. package/dist/types/definers/builders/middleware.d.ts +1 -0
  48. package/dist/types/definers/builders/override/hook.d.ts +16 -0
  49. package/dist/types/definers/builders/override/index.d.ts +11 -0
  50. package/dist/types/definers/builders/override/resource-middleware.d.ts +3 -0
  51. package/dist/types/definers/builders/override/resource.d.ts +3 -0
  52. package/dist/types/definers/builders/override/task-middleware.d.ts +3 -0
  53. package/dist/types/definers/builders/override/task.d.ts +3 -0
  54. package/dist/types/definers/builders/resource/fluent-builder.d.ts +8 -0
  55. package/dist/types/definers/builders/resource/fluent-builder.interface.d.ts +42 -0
  56. package/dist/types/definers/builders/resource/index.d.ts +13 -0
  57. package/dist/types/definers/builders/resource/types.d.ts +37 -0
  58. package/dist/types/definers/builders/resource/utils.d.ts +26 -0
  59. package/dist/types/definers/builders/resource.d.ts +1 -0
  60. package/dist/types/definers/builders/tag/fluent-builder.d.ts +6 -0
  61. package/dist/types/definers/builders/tag/fluent-builder.interface.d.ts +8 -0
  62. package/dist/types/definers/builders/tag/index.d.ts +10 -0
  63. package/dist/types/definers/builders/tag/types.d.ts +12 -0
  64. package/dist/types/definers/builders/tag/utils.d.ts +5 -0
  65. package/dist/types/definers/builders/tag.d.ts +1 -0
  66. package/dist/types/definers/builders/task/fluent-builder.d.ts +8 -0
  67. package/dist/types/definers/builders/task/fluent-builder.interface.d.ts +33 -0
  68. package/dist/types/definers/builders/task/index.d.ts +21 -0
  69. package/dist/types/definers/builders/task/phantom-builder.d.ts +8 -0
  70. package/dist/types/definers/builders/task/phantom-builder.interface.d.ts +31 -0
  71. package/dist/types/definers/builders/task/types.d.ts +34 -0
  72. package/dist/types/definers/builders/task/utils.d.ts +14 -0
  73. package/dist/types/definers/builders/task.d.ts +1 -0
  74. package/dist/types/definers/builders/task.phantom.d.ts +1 -0
  75. package/dist/types/definers/builders/utils.d.ts +4 -0
  76. package/dist/types/definers/defineAsyncContext.d.ts +15 -0
  77. package/dist/types/definers/defineError.d.ts +27 -0
  78. package/dist/types/definers/defineEvent.d.ts +2 -0
  79. package/dist/types/definers/defineHook.d.ts +6 -0
  80. package/dist/types/definers/defineOverride.d.ts +12 -0
  81. package/dist/types/definers/defineResource.d.ts +2 -0
  82. package/dist/types/definers/defineResourceMiddleware.d.ts +2 -0
  83. package/dist/types/definers/defineTag.d.ts +12 -0
  84. package/dist/types/definers/defineTask.d.ts +18 -0
  85. package/dist/types/definers/defineTaskMiddleware.d.ts +2 -0
  86. package/dist/types/definers/middlewareConfig.d.ts +1 -0
  87. package/dist/types/definers/resourceFork.d.ts +13 -0
  88. package/dist/types/definers/tools.d.ts +53 -0
  89. package/dist/types/defs.d.ts +32 -0
  90. package/dist/types/errors.d.ts +75 -0
  91. package/dist/types/globals/debug.d.ts +10 -0
  92. package/dist/types/globals/globalEvents.d.ts +8 -0
  93. package/dist/types/globals/globalMiddleware.d.ts +97 -0
  94. package/dist/types/globals/globalResources.d.ts +64 -0
  95. package/dist/types/globals/globalTags.d.ts +12 -0
  96. package/dist/types/globals/middleware/cache.middleware.d.ts +36 -0
  97. package/dist/types/globals/middleware/circuitBreaker.middleware.d.ts +56 -0
  98. package/dist/types/globals/middleware/concurrency.middleware.d.ts +47 -0
  99. package/dist/types/globals/middleware/fallback.middleware.d.ts +23 -0
  100. package/dist/types/globals/middleware/rateLimit.middleware.d.ts +47 -0
  101. package/dist/types/globals/middleware/requireContext.middleware.d.ts +5 -0
  102. package/dist/types/globals/middleware/retry.middleware.d.ts +31 -0
  103. package/dist/types/globals/middleware/temporal.middleware.d.ts +48 -0
  104. package/dist/types/globals/middleware/timeout.middleware.d.ts +24 -0
  105. package/dist/types/globals/middleware/tunnel.middleware.d.ts +3 -0
  106. package/dist/types/globals/resources/debug/debug.resource.d.ts +7 -0
  107. package/dist/types/globals/resources/debug/debug.tag.d.ts +2 -0
  108. package/dist/types/globals/resources/debug/debugConfig.resource.d.ts +22 -0
  109. package/dist/types/globals/resources/debug/executionTracker.middleware.d.ts +50 -0
  110. package/dist/types/globals/resources/debug/globalEvent.hook.d.ts +27 -0
  111. package/dist/types/globals/resources/debug/hook.hook.d.ts +30 -0
  112. package/dist/types/globals/resources/debug/index.d.ts +6 -0
  113. package/dist/types/globals/resources/debug/middleware.hook.d.ts +30 -0
  114. package/dist/types/globals/resources/debug/types.d.ts +25 -0
  115. package/dist/types/globals/resources/debug/utils.d.ts +2 -0
  116. package/dist/types/globals/resources/httpClientFactory.resource.d.ts +28 -0
  117. package/dist/types/globals/resources/queue.resource.d.ts +10 -0
  118. package/dist/types/globals/resources/tunnel/error-utils.d.ts +1 -0
  119. package/dist/types/globals/resources/tunnel/plan.d.ts +19 -0
  120. package/dist/types/globals/resources/tunnel/protocol.d.ts +48 -0
  121. package/dist/types/globals/resources/tunnel/tunnel.policy.tag.d.ts +26 -0
  122. package/dist/types/globals/resources/tunnel/tunnel.tag.d.ts +2 -0
  123. package/dist/types/globals/resources/tunnel/types.d.ts +48 -0
  124. package/dist/types/globals/tunnels/index.d.ts +23 -0
  125. package/dist/types/globals/types.d.ts +15 -0
  126. package/dist/types/http-client.d.ts +26 -0
  127. package/dist/types/http-fetch-tunnel.resource.d.ts +11 -0
  128. package/dist/types/index.d.ts +44 -0
  129. package/dist/types/models/DependencyProcessor.d.ts +46 -0
  130. package/dist/types/models/EventManager.d.ts +115 -0
  131. package/dist/types/models/ExecutionJournal.d.ts +35 -0
  132. package/dist/types/models/LogPrinter.d.ts +56 -0
  133. package/dist/types/models/Logger.d.ts +85 -0
  134. package/dist/types/models/MiddlewareManager.d.ts +73 -0
  135. package/dist/types/models/OverrideManager.d.ts +13 -0
  136. package/dist/types/models/Queue.d.ts +40 -0
  137. package/dist/types/models/ResourceInitializer.d.ts +20 -0
  138. package/dist/types/models/RunResult.d.ts +41 -0
  139. package/dist/types/models/Semaphore.d.ts +80 -0
  140. package/dist/types/models/Store.d.ts +76 -0
  141. package/dist/types/models/StoreRegistry.d.ts +49 -0
  142. package/dist/types/models/StoreValidator.d.ts +8 -0
  143. package/dist/types/models/TaskRunner.d.ts +28 -0
  144. package/dist/types/models/UnhandledError.d.ts +11 -0
  145. package/dist/types/models/event/CycleContext.d.ts +9 -0
  146. package/dist/types/models/event/EmissionExecutor.d.ts +11 -0
  147. package/dist/types/models/event/InterceptorPipeline.d.ts +5 -0
  148. package/dist/types/models/event/ListenerRegistry.d.ts +31 -0
  149. package/dist/types/models/event/types.d.ts +50 -0
  150. package/dist/types/models/index.d.ts +13 -0
  151. package/dist/types/models/middleware/InterceptorRegistry.d.ts +56 -0
  152. package/dist/types/models/middleware/MiddlewareResolver.d.ts +31 -0
  153. package/dist/types/models/middleware/ResourceMiddlewareComposer.d.ts +34 -0
  154. package/dist/types/models/middleware/TaskMiddlewareComposer.d.ts +44 -0
  155. package/dist/types/models/middleware/ValidationHelper.d.ts +20 -0
  156. package/dist/types/models/middleware/index.d.ts +6 -0
  157. package/dist/types/models/middleware/types.d.ts +10 -0
  158. package/dist/types/models/utils/findCircularDependencies.d.ts +16 -0
  159. package/dist/types/models/utils/safeStringify.d.ts +3 -0
  160. package/dist/types/node/durable/bus/MemoryEventBus.d.ts +7 -0
  161. package/dist/types/node/durable/bus/NoopEventBus.d.ts +6 -0
  162. package/dist/types/node/durable/bus/RedisEventBus.d.ts +30 -0
  163. package/dist/types/node/durable/core/CronParser.d.ts +15 -0
  164. package/dist/types/node/durable/core/DurableContext.d.ts +64 -0
  165. package/dist/types/node/durable/core/DurableOperator.d.ts +47 -0
  166. package/dist/types/node/durable/core/DurableResource.d.ts +80 -0
  167. package/dist/types/node/durable/core/DurableService.d.ts +73 -0
  168. package/dist/types/node/durable/core/DurableWorker.d.ts +19 -0
  169. package/dist/types/node/durable/core/StepBuilder.d.ts +23 -0
  170. package/dist/types/node/durable/core/audit.d.ts +152 -0
  171. package/dist/types/node/durable/core/createRunnerDurableRuntime.d.ts +18 -0
  172. package/dist/types/node/durable/core/durable-context/DurableContext.audit.d.ts +14 -0
  173. package/dist/types/node/durable/core/durable-context/DurableContext.determinism.d.ts +13 -0
  174. package/dist/types/node/durable/core/durable-context/DurableContext.emit.d.ts +16 -0
  175. package/dist/types/node/durable/core/durable-context/DurableContext.sleep.d.ts +16 -0
  176. package/dist/types/node/durable/core/durable-context/DurableContext.steps.d.ts +25 -0
  177. package/dist/types/node/durable/core/durable-context/DurableContext.switch.d.ts +22 -0
  178. package/dist/types/node/durable/core/durable-context/DurableContext.waitForSignal.d.ts +23 -0
  179. package/dist/types/node/durable/core/flowShape.d.ts +50 -0
  180. package/dist/types/node/durable/core/ids.d.ts +11 -0
  181. package/dist/types/node/durable/core/index.d.ts +11 -0
  182. package/dist/types/node/durable/core/interfaces/bus.d.ts +13 -0
  183. package/dist/types/node/durable/core/interfaces/context.d.ts +105 -0
  184. package/dist/types/node/durable/core/interfaces/queue.d.ts +17 -0
  185. package/dist/types/node/durable/core/interfaces/service.d.ts +146 -0
  186. package/dist/types/node/durable/core/interfaces/store.d.ts +66 -0
  187. package/dist/types/node/durable/core/managers/AuditLogger.d.ts +29 -0
  188. package/dist/types/node/durable/core/managers/ExecutionManager.d.ts +48 -0
  189. package/dist/types/node/durable/core/managers/PollingManager.d.ts +48 -0
  190. package/dist/types/node/durable/core/managers/ScheduleManager.d.ts +33 -0
  191. package/dist/types/node/durable/core/managers/SignalHandler.d.ts +25 -0
  192. package/dist/types/node/durable/core/managers/TaskRegistry.d.ts +16 -0
  193. package/dist/types/node/durable/core/managers/WaitManager.d.ts +26 -0
  194. package/dist/types/node/durable/core/managers/index.d.ts +7 -0
  195. package/dist/types/node/durable/core/resource.d.ts +14 -0
  196. package/dist/types/node/durable/core/types.d.ts +84 -0
  197. package/dist/types/node/durable/core/utils.d.ts +28 -0
  198. package/dist/types/node/durable/dashboard/server.d.ts +20 -0
  199. package/dist/types/node/durable/emitters/runnerAuditEmitter.d.ts +6 -0
  200. package/dist/types/node/durable/events.d.ts +76 -0
  201. package/dist/types/node/durable/index.d.ts +34 -0
  202. package/dist/types/node/durable/optionalDeps/amqplib.d.ts +1 -0
  203. package/dist/types/node/durable/optionalDeps/ioredis.d.ts +1 -0
  204. package/dist/types/node/durable/queue/MemoryQueue.d.ts +12 -0
  205. package/dist/types/node/durable/queue/RabbitMQQueue.d.ts +30 -0
  206. package/dist/types/node/durable/resources/isolation.d.ts +15 -0
  207. package/dist/types/node/durable/resources/memoryDurableResource.d.ts +21 -0
  208. package/dist/types/node/durable/resources/redisDurableResource.d.ts +35 -0
  209. package/dist/types/node/durable/store/MemoryStore.d.ts +56 -0
  210. package/dist/types/node/durable/store/RedisStore.d.ts +89 -0
  211. package/dist/types/node/durable/test-utils.d.ts +29 -0
  212. package/dist/types/node/exposure/allowList.d.ts +3 -0
  213. package/dist/types/node/exposure/authenticator.d.ts +16 -0
  214. package/dist/types/node/exposure/cors.d.ts +4 -0
  215. package/dist/types/node/exposure/createNodeExposure.d.ts +2 -0
  216. package/dist/types/node/exposure/exposureServer.d.ts +18 -0
  217. package/dist/types/node/exposure/handlers/contextWrapper.d.ts +18 -0
  218. package/dist/types/node/exposure/handlers/errorHandlers.d.ts +23 -0
  219. package/dist/types/node/exposure/handlers/eventHandler.d.ts +20 -0
  220. package/dist/types/node/exposure/handlers/taskHandler.d.ts +24 -0
  221. package/dist/types/node/exposure/httpResponse.d.ts +10 -0
  222. package/dist/types/node/exposure/index.d.ts +3 -0
  223. package/dist/types/node/exposure/logging.d.ts +4 -0
  224. package/dist/types/node/exposure/multipart.d.ts +36 -0
  225. package/dist/types/node/exposure/requestBody.d.ts +11 -0
  226. package/dist/types/node/exposure/requestContext.d.ts +17 -0
  227. package/dist/types/node/exposure/requestHandlers.d.ts +29 -0
  228. package/dist/types/node/exposure/resource.d.ts +12 -0
  229. package/dist/types/node/exposure/resourceTypes.d.ts +73 -0
  230. package/dist/types/node/exposure/router.d.ts +17 -0
  231. package/dist/types/node/exposure/serverLifecycle.d.ts +13 -0
  232. package/dist/types/node/exposure/types.d.ts +45 -0
  233. package/dist/types/node/exposure/utils.d.ts +17 -0
  234. package/dist/types/node/files/createNodeFile.d.ts +9 -0
  235. package/dist/types/node/files/index.d.ts +4 -0
  236. package/dist/types/node/files/inputFile.model.d.ts +22 -0
  237. package/dist/types/node/files/inputFile.utils.d.ts +14 -0
  238. package/dist/types/node/http/http-mixed-client.d.ts +45 -0
  239. package/dist/types/node/http/http-mixed-client.factory.resource.d.ts +17 -0
  240. package/dist/types/node/http/http-smart-client.factory.resource.d.ts +16 -0
  241. package/dist/types/node/http/http-smart-client.model.d.ts +27 -0
  242. package/dist/types/node/http/index.d.ts +4 -0
  243. package/dist/types/node/index.d.ts +1 -0
  244. package/dist/types/node/node.d.ts +192 -0
  245. package/dist/types/node/platform/createFile.d.ts +9 -0
  246. package/dist/types/node/tunnel/allowlist.d.ts +7 -0
  247. package/dist/types/node/tunnel/index.d.ts +2 -0
  248. package/dist/types/node/upload/manifest.d.ts +23 -0
  249. package/dist/types/platform/adapters/browser.d.ts +14 -0
  250. package/dist/types/platform/adapters/edge.d.ts +5 -0
  251. package/dist/types/platform/adapters/node-als.d.ts +1 -0
  252. package/dist/types/platform/adapters/node.d.ts +15 -0
  253. package/dist/types/platform/adapters/universal-generic.d.ts +14 -0
  254. package/dist/types/platform/adapters/universal.d.ts +18 -0
  255. package/dist/types/platform/createFile.d.ts +10 -0
  256. package/dist/types/platform/createWebFile.d.ts +11 -0
  257. package/dist/types/platform/factory.d.ts +2 -0
  258. package/dist/types/platform/index.d.ts +27 -0
  259. package/dist/types/platform/types.d.ts +31 -0
  260. package/dist/types/processHooks.d.ts +2 -0
  261. package/dist/types/public-types.d.ts +13 -0
  262. package/dist/types/public.d.ts +210 -0
  263. package/dist/types/run.d.ts +14 -0
  264. package/dist/types/serializer/Serializer.d.ts +84 -0
  265. package/dist/types/serializer/binary-builtins.d.ts +5 -0
  266. package/dist/types/serializer/builtins.d.ts +47 -0
  267. package/dist/types/serializer/deserializer.d.ts +27 -0
  268. package/dist/types/serializer/error-url-builtins.d.ts +13 -0
  269. package/dist/types/serializer/graph-serializer.d.ts +27 -0
  270. package/dist/types/serializer/index.d.ts +6 -0
  271. package/dist/types/serializer/option-normalizers.d.ts +2 -0
  272. package/dist/types/serializer/regexp-validator.d.ts +34 -0
  273. package/dist/types/serializer/serialize-utils.d.ts +15 -0
  274. package/dist/types/serializer/special-values.d.ts +20 -0
  275. package/dist/types/serializer/tree-serializer.d.ts +20 -0
  276. package/dist/types/serializer/type-registry.d.ts +58 -0
  277. package/dist/types/serializer/types.d.ts +126 -0
  278. package/dist/types/serializer/validation.d.ts +34 -0
  279. package/dist/types/testing.d.ts +19 -0
  280. package/dist/types/tools/detectRunnerMode.d.ts +9 -0
  281. package/dist/types/tools/getCallerFile.d.ts +1 -0
  282. package/dist/types/tools/throws.d.ts +7 -0
  283. package/dist/types/tunnels/buildUniversalManifest.d.ts +24 -0
  284. package/dist/types/types/asyncContext.d.ts +41 -0
  285. package/dist/types/types/contracts.d.ts +62 -0
  286. package/dist/types/types/error.d.ts +39 -0
  287. package/dist/types/types/event.d.ts +79 -0
  288. package/dist/types/types/executionJournal.d.ts +29 -0
  289. package/dist/types/types/hook.d.ts +23 -0
  290. package/dist/types/types/inputFile.d.ts +34 -0
  291. package/dist/types/types/meta.d.ts +22 -0
  292. package/dist/types/types/resource.d.ts +133 -0
  293. package/dist/types/types/resourceMiddleware.d.ts +48 -0
  294. package/dist/types/types/runner.d.ts +68 -0
  295. package/dist/types/types/storeTypes.d.ts +46 -0
  296. package/dist/types/types/symbols.d.ts +34 -0
  297. package/dist/types/types/tag.d.ts +45 -0
  298. package/dist/types/types/task.d.ts +76 -0
  299. package/dist/types/types/taskMiddleware.d.ts +55 -0
  300. package/dist/types/types/utilities.d.ts +125 -0
  301. package/dist/universal/index.cjs +1039 -465
  302. package/dist/universal/index.cjs.map +1 -1
  303. package/dist/universal/index.mjs +1037 -465
  304. package/dist/universal/index.mjs.map +1 -1
  305. package/package.json +14 -13
  306. package/readmes/AI.md +34 -12
  307. package/dist/browser/index.d.mts +0 -2890
  308. package/dist/browser/index.d.ts +0 -2890
  309. package/dist/edge/index.d.mts +0 -2890
  310. package/dist/edge/index.d.ts +0 -2890
  311. package/dist/node/node.d.mts +0 -4593
  312. package/dist/node/node.d.ts +0 -4593
  313. package/dist/universal/index.d.mts +0 -2890
  314. package/dist/universal/index.d.ts +0 -2890
@@ -164,6 +164,9 @@ var symbolPhantomTask = Symbol.for(
164
164
  "runner.task.phantom"
165
165
  );
166
166
  var symbolResource = Symbol.for("runner.resource");
167
+ var symbolResourceForkedFrom = Symbol.for(
168
+ "runner.resourceForkedFrom"
169
+ );
167
170
  var symbolResourceWithConfig = Symbol.for(
168
171
  "runner.resourceWithConfig"
169
172
  );
@@ -193,88 +196,227 @@ var symbolAsyncContext = Symbol.for(
193
196
  "runner.asyncContext"
194
197
  );
195
198
 
196
- // src/platform/adapters/node-als.ts
197
- async function loadAsyncLocalStorageClass() {
198
- const mod = __require("async_hooks");
199
- return mod.AsyncLocalStorage;
199
+ // src/tools/getCallerFile.ts
200
+ function isNodeInline() {
201
+ return typeof process !== "undefined" && typeof process?.versions?.node === "string";
200
202
  }
201
- __name(loadAsyncLocalStorageClass, "loadAsyncLocalStorageClass");
202
-
203
- // src/platform/adapters/node.ts
204
- var NodePlatformAdapter = class {
205
- constructor() {
206
- this.id = "node";
207
- this.setTimeout = globalThis.setTimeout;
208
- this.clearTimeout = globalThis.clearTimeout;
209
- }
210
- static {
211
- __name(this, "NodePlatformAdapter");
212
- }
213
- async init() {
214
- this.alsClass = await loadAsyncLocalStorageClass();
215
- }
216
- onUncaughtException(handler) {
217
- const h = /* @__PURE__ */ __name((error2) => handler(error2), "h");
218
- process.on("uncaughtException", h);
219
- return () => process.off("uncaughtException", h);
220
- }
221
- onUnhandledRejection(handler) {
222
- const h = /* @__PURE__ */ __name((reason) => handler(reason), "h");
223
- process.on("unhandledRejection", h);
224
- return () => process.off("unhandledRejection", h);
225
- }
226
- onShutdownSignal(handler) {
227
- process.on("SIGINT", handler);
228
- process.on("SIGTERM", handler);
229
- return () => {
230
- process.off("SIGINT", handler);
231
- process.off("SIGTERM", handler);
232
- };
233
- }
234
- exit(code) {
235
- process.exit(code);
236
- }
237
- getEnv(key) {
238
- return process.env[key];
239
- }
240
- hasAsyncLocalStorage() {
241
- return true;
203
+ __name(isNodeInline, "isNodeInline");
204
+ function getCallerFile() {
205
+ const originalPrepare = Error.prepareStackTrace;
206
+ try {
207
+ if (isNodeInline()) {
208
+ const err = new Error();
209
+ Error.prepareStackTrace = (_err, stack2) => stack2;
210
+ const stack = err.stack;
211
+ stack.shift();
212
+ stack.shift();
213
+ const candidate = stack.shift();
214
+ const file = candidate?.getFileName?.();
215
+ return file;
216
+ }
217
+ return "unknown";
218
+ } finally {
219
+ Error.prepareStackTrace = originalPrepare;
242
220
  }
243
- createAsyncLocalStorage() {
244
- let instance;
245
- const ensure = /* @__PURE__ */ __name(() => {
246
- if (!this.alsClass) {
247
- let als;
248
- const forceNoop = typeof process !== "undefined" && !!process.env?.RUNNER_FORCE_NOOP_ALS;
249
- if (!forceNoop) {
250
- try {
251
- const mod = __require("async_hooks");
252
- als = mod?.AsyncLocalStorage;
253
- } catch (_) {
254
- als = void 0;
255
- }
256
- }
257
- this.alsClass = als || class NoopAsyncLocalStorage {
258
- static {
259
- __name(this, "NoopAsyncLocalStorage");
260
- }
261
- getStore() {
262
- return void 0;
263
- }
264
- run(_store, callback) {
265
- return callback();
266
- }
267
- };
221
+ }
222
+ __name(getCallerFile, "getCallerFile");
223
+
224
+ // src/defs.ts
225
+ var defs_exports = {};
226
+ __export(defs_exports, {
227
+ CONTRACT: () => CONTRACT,
228
+ HookDependencyState: () => HookDependencyState,
229
+ RunnerMode: () => RunnerMode,
230
+ isOneOf: () => isOneOf,
231
+ onAnyOf: () => onAnyOf,
232
+ symbolAsyncContext: () => symbolAsyncContext,
233
+ symbolError: () => symbolError,
234
+ symbolEvent: () => symbolEvent,
235
+ symbolFilePath: () => symbolFilePath,
236
+ symbolHook: () => symbolHook,
237
+ symbolMiddleware: () => symbolMiddleware,
238
+ symbolMiddlewareConfigured: () => symbolMiddlewareConfigured,
239
+ symbolOptionalDependency: () => symbolOptionalDependency,
240
+ symbolPhantomTask: () => symbolPhantomTask,
241
+ symbolResource: () => symbolResource,
242
+ symbolResourceForkedFrom: () => symbolResourceForkedFrom,
243
+ symbolResourceMiddleware: () => symbolResourceMiddleware,
244
+ symbolResourceWithConfig: () => symbolResourceWithConfig,
245
+ symbolTag: () => symbolTag,
246
+ symbolTagConfigured: () => symbolTagConfigured,
247
+ symbolTask: () => symbolTask,
248
+ symbolTaskMiddleware: () => symbolTaskMiddleware,
249
+ symbolTunneledBy: () => symbolTunneledBy
250
+ });
251
+
252
+ // src/types/event.ts
253
+ function onAnyOf(...defs) {
254
+ return defs;
255
+ }
256
+ __name(onAnyOf, "onAnyOf");
257
+ function isOneOf(emission, defs) {
258
+ return defs.some((d) => d.id === emission.id);
259
+ }
260
+ __name(isOneOf, "isOneOf");
261
+
262
+ // src/types/runner.ts
263
+ var RunnerMode = /* @__PURE__ */ ((RunnerMode2) => {
264
+ RunnerMode2["TEST"] = "test";
265
+ RunnerMode2["DEV"] = "dev";
266
+ RunnerMode2["PROD"] = "prod";
267
+ return RunnerMode2;
268
+ })(RunnerMode || {});
269
+
270
+ // src/types/contracts.ts
271
+ var CONTRACT = Symbol.for("runner.contract");
272
+
273
+ // src/types/storeTypes.ts
274
+ var HookDependencyState = /* @__PURE__ */ ((HookDependencyState2) => {
275
+ HookDependencyState2["Pending"] = "pending";
276
+ HookDependencyState2["Computing"] = "computing";
277
+ HookDependencyState2["Ready"] = "ready";
278
+ return HookDependencyState2;
279
+ })(HookDependencyState || {});
280
+
281
+ // src/definers/tools.ts
282
+ function isTask(definition) {
283
+ return definition && definition[symbolTask];
284
+ }
285
+ __name(isTask, "isTask");
286
+ function isResource(definition) {
287
+ return definition && definition[symbolResource];
288
+ }
289
+ __name(isResource, "isResource");
290
+ function isResourceWithConfig(definition) {
291
+ return definition && definition[symbolResourceWithConfig];
292
+ }
293
+ __name(isResourceWithConfig, "isResourceWithConfig");
294
+ function isEvent(definition) {
295
+ return definition && definition[symbolEvent];
296
+ }
297
+ __name(isEvent, "isEvent");
298
+ function isHook(definition) {
299
+ return definition && definition[symbolHook];
300
+ }
301
+ __name(isHook, "isHook");
302
+ function isTaskMiddleware(definition) {
303
+ return definition && definition[symbolTaskMiddleware];
304
+ }
305
+ __name(isTaskMiddleware, "isTaskMiddleware");
306
+ function isResourceMiddleware(definition) {
307
+ return definition && definition[symbolResourceMiddleware];
308
+ }
309
+ __name(isResourceMiddleware, "isResourceMiddleware");
310
+ function isTag(definition) {
311
+ return definition && definition[symbolTag];
312
+ }
313
+ __name(isTag, "isTag");
314
+ function isOptional(definition) {
315
+ return definition && definition[symbolOptionalDependency];
316
+ }
317
+ __name(isOptional, "isOptional");
318
+ function isError(definition) {
319
+ return Boolean(definition && definition[symbolError]);
320
+ }
321
+ __name(isError, "isError");
322
+ function isAsyncContext(definition) {
323
+ return Boolean(definition && definition[symbolAsyncContext]);
324
+ }
325
+ __name(isAsyncContext, "isAsyncContext");
326
+
327
+ // src/tools/throws.ts
328
+ function invalidThrowsEntryError(owner, item) {
329
+ const got = item === null ? "null" : Array.isArray(item) ? "array" : typeof item === "object" ? "object" : typeof item;
330
+ return new Error(
331
+ `Invalid throws entry for ${owner.kind} ${owner.id}: expected error id string or Error helper, got ${got}`
332
+ );
333
+ }
334
+ __name(invalidThrowsEntryError, "invalidThrowsEntryError");
335
+ function toErrorIdList(owner, list) {
336
+ const ids = [];
337
+ const seen = /* @__PURE__ */ new Set();
338
+ for (const item of list) {
339
+ let id2;
340
+ if (typeof item === "string") {
341
+ if (item.trim().length === 0) {
342
+ throw invalidThrowsEntryError(owner, item);
268
343
  }
269
- return instance ??= new this.alsClass();
270
- }, "ensure");
271
- return {
272
- getStore: /* @__PURE__ */ __name(() => ensure().getStore(), "getStore"),
273
- run: /* @__PURE__ */ __name((store2, callback) => ensure().run(store2, callback), "run")
274
- };
344
+ id2 = item;
345
+ } else if (isError(item)) {
346
+ id2 = item.id;
347
+ if (typeof id2 !== "string" || id2.trim().length === 0) {
348
+ throw invalidThrowsEntryError(owner, item);
349
+ }
350
+ } else {
351
+ throw invalidThrowsEntryError(owner, item);
352
+ }
353
+ if (seen.has(id2)) continue;
354
+ seen.add(id2);
355
+ ids.push(id2);
275
356
  }
357
+ return ids;
358
+ }
359
+ __name(toErrorIdList, "toErrorIdList");
360
+ function normalizeThrows(owner, throwsList) {
361
+ if (throwsList === void 0) return void 0;
362
+ return toErrorIdList(owner, throwsList);
363
+ }
364
+ __name(normalizeThrows, "normalizeThrows");
365
+
366
+ // src/definers/defineTask.ts
367
+ function defineTask(taskConfig) {
368
+ const filePath = getCallerFile();
369
+ const id2 = taskConfig.id;
370
+ return {
371
+ [symbolTask]: true,
372
+ [symbolFilePath]: filePath,
373
+ id: id2,
374
+ dependencies: taskConfig.dependencies || {},
375
+ middleware: taskConfig.middleware || [],
376
+ run: taskConfig.run,
377
+ inputSchema: taskConfig.inputSchema,
378
+ resultSchema: taskConfig.resultSchema,
379
+ meta: taskConfig.meta || {},
380
+ tags: taskConfig.tags || [],
381
+ throws: normalizeThrows({ kind: "task", id: id2 }, taskConfig.throws),
382
+ // autorun,
383
+ optional() {
384
+ return {
385
+ inner: this,
386
+ [symbolOptionalDependency]: true
387
+ };
388
+ }
389
+ };
390
+ }
391
+ __name(defineTask, "defineTask");
392
+ defineTask.phantom = (taskConfig) => {
393
+ const taskDef = defineTask({
394
+ ...taskConfig,
395
+ run: /* @__PURE__ */ __name(async (_input) => {
396
+ return void 0;
397
+ }, "run")
398
+ });
399
+ taskDef[symbolPhantomTask] = true;
400
+ return taskDef;
276
401
  };
277
402
 
403
+ // src/definers/defineHook.ts
404
+ function defineHook(hookDef) {
405
+ const filePath = getCallerFile();
406
+ return {
407
+ [symbolHook]: true,
408
+ [symbolFilePath]: filePath,
409
+ id: hookDef.id,
410
+ dependencies: hookDef.dependencies || {},
411
+ on: hookDef.on,
412
+ order: hookDef.order,
413
+ run: hookDef.run,
414
+ meta: hookDef.meta || {},
415
+ tags: hookDef.tags || []
416
+ };
417
+ }
418
+ __name(defineHook, "defineHook");
419
+
278
420
  // src/errors.ts
279
421
  var errors_exports = {};
280
422
  __export(errors_exports, {
@@ -316,9 +458,10 @@ var RunnerError = class extends Error {
316
458
  var _a;
317
459
  _a = symbolError;
318
460
  var ErrorHelper = class {
319
- constructor(definition) {
461
+ constructor(definition, filePath) {
320
462
  this.definition = definition;
321
463
  this[_a] = true;
464
+ this[symbolFilePath] = filePath;
322
465
  }
323
466
  static {
324
467
  __name(this, "ErrorHelper");
@@ -341,11 +484,15 @@ var ErrorHelper = class {
341
484
  };
342
485
  }
343
486
  };
344
- function defineError(definition) {
487
+ function defineError(definition, filePath) {
345
488
  if (!definition.format) {
346
489
  definition.format = (data) => `${JSON.stringify(data)}`;
347
490
  }
348
- return new ErrorHelper(definition);
491
+ const resolvedFilePath = filePath ?? getCallerFile();
492
+ return new ErrorHelper(
493
+ definition,
494
+ resolvedFilePath
495
+ );
349
496
  }
350
497
  __name(defineError, "defineError");
351
498
 
@@ -383,14 +530,17 @@ function makeErrorBuilder(state) {
383
530
  return makeErrorBuilder(next);
384
531
  },
385
532
  build() {
386
- return defineError({
387
- id: state.id,
388
- serialize: state.serialize,
389
- parse: state.parse,
390
- dataSchema: state.dataSchema,
391
- format: state.format,
392
- meta: state.meta
393
- });
533
+ return defineError(
534
+ {
535
+ id: state.id,
536
+ serialize: state.serialize,
537
+ parse: state.parse,
538
+ dataSchema: state.dataSchema,
539
+ format: state.format,
540
+ meta: state.meta
541
+ },
542
+ state.filePath
543
+ );
394
544
  }
395
545
  };
396
546
  return builder;
@@ -399,8 +549,10 @@ __name(makeErrorBuilder, "makeErrorBuilder");
399
549
 
400
550
  // src/definers/builders/error/index.ts
401
551
  function errorBuilder(id2) {
552
+ const filePath = getCallerFile();
402
553
  const initial = Object.freeze({
403
554
  id: id2,
555
+ filePath,
404
556
  serialize: void 0,
405
557
  parse: void 0,
406
558
  dataSchema: void 0,
@@ -411,103 +563,87 @@ function errorBuilder(id2) {
411
563
  __name(errorBuilder, "errorBuilder");
412
564
  var error = errorBuilder;
413
565
 
414
- // src/errors.ts
415
- var duplicateRegistrationError = error("runner.errors.duplicateRegistration").format(
416
- ({ type, id: id2 }) => `${type} "${id2.toString()}" already registered. You might have used the same 'id' in two different components or you may have registered the same element twice.`
417
- ).build();
418
- var dependencyNotFoundError = error("runner.errors.dependencyNotFound").format(
419
- ({ key }) => `Dependency ${key.toString()} not found. Did you forget to register it through a resource?`
420
- ).build();
421
- var unknownItemTypeError = error(
422
- "runner.errors.unknownItemType"
423
- ).format(
424
- ({ item }) => `Unknown item type: ${String(
425
- item
426
- )}. Please ensure you are not using different versions of '@bluelibs/runner'`
427
- ).build();
428
- var contextError = error(
429
- "runner.errors.context"
430
- ).format(({ details }) => details ?? "Context error").build();
431
- var circularDependenciesError = error("runner.errors.circularDependencies").format(({ cycles }) => {
432
- const cycleDetails = cycles.map((cycle) => ` \u2022 ${cycle}`).join("\n");
433
- const hasMiddleware = cycles.some((cycle) => cycle.includes("middleware"));
434
- let guidance = "\n\nTo resolve circular dependencies:";
435
- guidance += "\n \u2022 Consider refactoring to reduce coupling between components";
436
- guidance += "\n \u2022 Extract shared dependencies into separate resources";
437
- if (hasMiddleware) {
438
- guidance += "\n \u2022 For middleware: you can filter out tasks/resources using everywhere(fn)";
439
- guidance += "\n \u2022 Consider using events for communication instead of direct dependencies";
440
- }
441
- return `Circular dependencies detected:
442
- ${cycleDetails}${guidance}`;
443
- }).build();
444
- var eventNotFoundError = error(
445
- "runner.errors.eventNotFound"
446
- ).format(
447
- ({ id: id2 }) => `Event "${id2.toString()}" not found. Did you forget to register it?`
448
- ).build();
449
- var resourceNotFoundError = error(
450
- "runner.errors.resourceNotFound"
451
- ).format(
452
- ({ id: id2 }) => `Resource "${id2.toString()}" not found. Did you forget to register it or are you using the correct id?`
453
- ).build();
454
- var middlewareNotRegisteredError = error("runner.errors.middlewareNotRegistered").format(
455
- ({ type, source, middlewareId }) => `Middleware inside ${type} "${source}" depends on "${middlewareId}" but it's not registered. Did you forget to register it?`
456
- ).build();
457
- var tagNotFoundError = error(
458
- "runner.errors.tagNotFound"
459
- ).format(
460
- ({ id: id2 }) => `Tag "${id2}" not registered. Did you forget to register it inside a resource?`
461
- ).build();
462
- var lockedError = error(
463
- "runner.errors.locked"
464
- ).format(
465
- ({ what }) => `Cannot modify the ${what.toString()} when it is locked.`
466
- ).build();
467
- var storeAlreadyInitializedError = error(
468
- "runner.errors.storeAlreadyInitialized"
469
- ).format(() => "Store already initialized. Cannot reinitialize.").build();
470
- var validationError = error("runner.errors.validation").format(({ subject, id: id2, originalError }) => {
471
- const errorMessage = originalError instanceof Error ? originalError.message : String(originalError);
472
- return `${subject} validation failed for ${id2.toString()}: ${errorMessage}`;
473
- }).build();
474
- var eventCycleError = error("runner.errors.eventCycle").format(({ path }) => {
475
- const chain = path.map((p) => `${p.id}\u2190${p.source}`).join(" -> ");
476
- return `Event emission cycle detected:
477
- ${chain}
478
-
479
- Break the cycle by changing hook logic (avoid mutual emits) or gate with conditions/tags.`;
480
- }).build();
481
- var eventEmissionCycleError = error("runner.errors.eventEmissionCycle").format(({ cycles }) => {
482
- const list = cycles.map((c) => ` \u2022 ${c}`).join("\n");
483
- return `Event emission cycles detected between hooks and events:
484
- ${list}
485
-
486
- This was detected at compile time (dry-run). Break the cycle by avoiding mutual emits between hooks or scoping hooks using tags.`;
487
- }).build();
488
- var platformUnsupportedFunctionError = error("runner.errors.platformUnsupportedFunction").format(
489
- ({ functionName }) => `Platform function not supported in this environment: ${functionName}. Detected platform: ${detectEnvironment()}.`
490
- ).build();
491
- var cancellationError = error(
492
- "runner.errors.cancellation"
493
- ).format(({ reason }) => reason || "Operation cancelled").build();
494
- var tunnelOwnershipConflictError = error("runner.errors.tunnelOwnershipConflict").format(
495
- ({ taskId, currentOwnerId, attemptedOwnerId }) => `Task "${taskId}" is already tunneled by resource "${currentOwnerId}". Resource "${attemptedOwnerId}" cannot tunnel it again. Ensure each task is owned by a single tunnel client.`
496
- ).build();
497
- var phantomTaskNotRoutedError = error("runner.errors.phantomTaskNotRouted").format(
498
- ({ taskId }) => `Phantom task "${taskId}" is not routed through any tunnel. Ensure a tunnel client selects this task id (or avoid calling the phantom task directly).`
499
- ).build();
500
- var taskNotRegisteredError = error("runner.errors.taskNotRegistered").format(
501
- ({ taskId }) => `Task "${taskId}" is not registered in the Store. This is an internal error\u2014ensure the task is registered before execution.`
502
- ).build();
503
- var builderIncompleteError = error("runner.errors.builderIncomplete").format(({ type, builderId, missingFields }) => {
504
- const typeLabel = type === "hook" ? "Hook" : type === "task-middleware" ? "Task middleware" : "Resource middleware";
505
- return `${typeLabel} "${builderId}" is incomplete. Missing required: ${missingFields.join(", ")}. Call ${missingFields.map((f) => `.${f}()`).join(" and ")} before .build().`;
506
- }).build();
507
- function isCancellationError(err) {
508
- return cancellationError.is(err);
566
+ // src/platform/adapters/node-als.ts
567
+ async function loadAsyncLocalStorageClass() {
568
+ const mod = __require("async_hooks");
569
+ return mod.AsyncLocalStorage;
509
570
  }
510
- __name(isCancellationError, "isCancellationError");
571
+ __name(loadAsyncLocalStorageClass, "loadAsyncLocalStorageClass");
572
+
573
+ // src/platform/adapters/node.ts
574
+ var NodePlatformAdapter = class {
575
+ constructor() {
576
+ this.id = "node";
577
+ this.setTimeout = globalThis.setTimeout;
578
+ this.clearTimeout = globalThis.clearTimeout;
579
+ }
580
+ static {
581
+ __name(this, "NodePlatformAdapter");
582
+ }
583
+ async init() {
584
+ this.alsClass = await loadAsyncLocalStorageClass();
585
+ }
586
+ onUncaughtException(handler) {
587
+ const h = /* @__PURE__ */ __name((error2) => handler(error2), "h");
588
+ process.on("uncaughtException", h);
589
+ return () => process.off("uncaughtException", h);
590
+ }
591
+ onUnhandledRejection(handler) {
592
+ const h = /* @__PURE__ */ __name((reason) => handler(reason), "h");
593
+ process.on("unhandledRejection", h);
594
+ return () => process.off("unhandledRejection", h);
595
+ }
596
+ onShutdownSignal(handler) {
597
+ process.on("SIGINT", handler);
598
+ process.on("SIGTERM", handler);
599
+ return () => {
600
+ process.off("SIGINT", handler);
601
+ process.off("SIGTERM", handler);
602
+ };
603
+ }
604
+ exit(code) {
605
+ process.exit(code);
606
+ }
607
+ getEnv(key) {
608
+ return process.env[key];
609
+ }
610
+ hasAsyncLocalStorage() {
611
+ return true;
612
+ }
613
+ createAsyncLocalStorage() {
614
+ let instance;
615
+ const ensure = /* @__PURE__ */ __name(() => {
616
+ if (!this.alsClass) {
617
+ let als;
618
+ const forceNoop = typeof process !== "undefined" && !!process.env?.RUNNER_FORCE_NOOP_ALS;
619
+ if (!forceNoop) {
620
+ try {
621
+ const mod = __require("async_hooks");
622
+ als = mod?.AsyncLocalStorage;
623
+ } catch (_) {
624
+ als = void 0;
625
+ }
626
+ }
627
+ this.alsClass = als || class NoopAsyncLocalStorage {
628
+ static {
629
+ __name(this, "NoopAsyncLocalStorage");
630
+ }
631
+ getStore() {
632
+ return void 0;
633
+ }
634
+ run(_store, callback) {
635
+ return callback();
636
+ }
637
+ };
638
+ }
639
+ return instance ??= new this.alsClass();
640
+ }, "ensure");
641
+ return {
642
+ getStore: /* @__PURE__ */ __name(() => ensure().getStore(), "getStore"),
643
+ run: /* @__PURE__ */ __name((store2, callback) => ensure().run(store2, callback), "run")
644
+ };
645
+ }
646
+ };
511
647
 
512
648
  // src/platform/adapters/browser.ts
513
649
  var BrowserPlatformAdapter = class {
@@ -800,14 +936,11 @@ function setPlatform(adapter) {
800
936
  adapter.id;
801
937
  }
802
938
  __name(setPlatform, "setPlatform");
803
- function isNode() {
804
- return detectEnvironment() === "node";
805
- }
806
- __name(isNode, "isNode");
807
939
  var PlatformAdapter = class {
940
+ static {
941
+ __name(this, "PlatformAdapter");
942
+ }
808
943
  constructor(env) {
809
- this.setTimeout = globalThis.setTimeout;
810
- this.clearTimeout = globalThis.clearTimeout;
811
944
  const kind = env ?? detectEnvironment();
812
945
  this.env = kind;
813
946
  switch (kind) {
@@ -827,9 +960,8 @@ var PlatformAdapter = class {
827
960
  this.inner = new UniversalPlatformAdapter();
828
961
  }
829
962
  this.id = this.inner.id;
830
- }
831
- static {
832
- __name(this, "PlatformAdapter");
963
+ this.setTimeout = this.inner.setTimeout;
964
+ this.clearTimeout = this.inner.clearTimeout;
833
965
  }
834
966
  async init() {
835
967
  return this.inner.init();
@@ -857,208 +989,285 @@ var PlatformAdapter = class {
857
989
  }
858
990
  };
859
991
 
860
- // src/tools/getCallerFile.ts
861
- function getCallerFile() {
862
- const originalPrepare = Error.prepareStackTrace;
863
- try {
864
- if (isNode()) {
865
- const err = new Error();
866
- Error.prepareStackTrace = (_err, stack2) => stack2;
867
- const stack = err.stack;
868
- stack.shift();
869
- stack.shift();
870
- const candidate = stack.shift();
871
- const file = candidate?.getFileName?.();
872
- return file;
873
- }
874
- return "unknown";
875
- } finally {
876
- Error.prepareStackTrace = originalPrepare;
992
+ // src/errors.ts
993
+ var duplicateRegistrationError = error("runner.errors.duplicateRegistration").format(
994
+ ({ type, id: id2 }) => `${type} "${id2.toString()}" already registered. You might have used the same 'id' in two different components or you may have registered the same element twice.`
995
+ ).build();
996
+ var dependencyNotFoundError = error("runner.errors.dependencyNotFound").format(
997
+ ({ key }) => `Dependency ${key.toString()} not found. Did you forget to register it through a resource?`
998
+ ).build();
999
+ var unknownItemTypeError = error(
1000
+ "runner.errors.unknownItemType"
1001
+ ).format(
1002
+ ({ item }) => `Unknown item type: ${String(
1003
+ item
1004
+ )}. Please ensure you are not using different versions of '@bluelibs/runner'`
1005
+ ).build();
1006
+ var contextError = error(
1007
+ "runner.errors.context"
1008
+ ).format(({ details }) => details ?? "Context error").build();
1009
+ var circularDependenciesError = error("runner.errors.circularDependencies").format(({ cycles }) => {
1010
+ const cycleDetails = cycles.map((cycle) => ` \u2022 ${cycle}`).join("\n");
1011
+ const hasMiddleware = cycles.some((cycle) => cycle.includes("middleware"));
1012
+ let guidance = "\n\nTo resolve circular dependencies:";
1013
+ guidance += "\n \u2022 Consider refactoring to reduce coupling between components";
1014
+ guidance += "\n \u2022 Extract shared dependencies into separate resources";
1015
+ if (hasMiddleware) {
1016
+ guidance += "\n \u2022 For middleware: you can filter out tasks/resources using everywhere(fn)";
1017
+ guidance += "\n \u2022 Consider using events for communication instead of direct dependencies";
877
1018
  }
878
- }
879
- __name(getCallerFile, "getCallerFile");
880
-
881
- // src/defs.ts
882
- var defs_exports = {};
883
- __export(defs_exports, {
884
- RunnerMode: () => RunnerMode,
885
- isOneOf: () => isOneOf,
886
- onAnyOf: () => onAnyOf,
887
- symbolAsyncContext: () => symbolAsyncContext,
888
- symbolError: () => symbolError,
889
- symbolEvent: () => symbolEvent,
890
- symbolFilePath: () => symbolFilePath,
891
- symbolHook: () => symbolHook,
892
- symbolMiddleware: () => symbolMiddleware,
893
- symbolMiddlewareConfigured: () => symbolMiddlewareConfigured,
894
- symbolOptionalDependency: () => symbolOptionalDependency,
895
- symbolPhantomTask: () => symbolPhantomTask,
896
- symbolResource: () => symbolResource,
897
- symbolResourceMiddleware: () => symbolResourceMiddleware,
898
- symbolResourceWithConfig: () => symbolResourceWithConfig,
899
- symbolTag: () => symbolTag,
900
- symbolTagConfigured: () => symbolTagConfigured,
901
- symbolTask: () => symbolTask,
902
- symbolTaskMiddleware: () => symbolTaskMiddleware,
903
- symbolTunneledBy: () => symbolTunneledBy
904
- });
905
-
906
- // src/types/event.ts
907
- function onAnyOf(...defs) {
908
- return defs;
909
- }
910
- __name(onAnyOf, "onAnyOf");
911
- function isOneOf(emission, defs) {
912
- return defs.some((d) => d.id === emission.id);
913
- }
914
- __name(isOneOf, "isOneOf");
915
-
916
- // src/types/runner.ts
917
- var RunnerMode = /* @__PURE__ */ ((RunnerMode2) => {
918
- RunnerMode2["TEST"] = "test";
919
- RunnerMode2["DEV"] = "dev";
920
- RunnerMode2["PROD"] = "prod";
921
- return RunnerMode2;
922
- })(RunnerMode || {});
1019
+ return `Circular dependencies detected:
1020
+ ${cycleDetails}${guidance}`;
1021
+ }).build();
1022
+ var eventNotFoundError = error(
1023
+ "runner.errors.eventNotFound"
1024
+ ).format(
1025
+ ({ id: id2 }) => `Event "${id2.toString()}" not found. Did you forget to register it?`
1026
+ ).build();
1027
+ var resourceNotFoundError = error(
1028
+ "runner.errors.resourceNotFound"
1029
+ ).format(
1030
+ ({ id: id2 }) => `Resource "${id2.toString()}" not found. Did you forget to register it or are you using the correct id?`
1031
+ ).build();
1032
+ var middlewareNotRegisteredError = error("runner.errors.middlewareNotRegistered").format(
1033
+ ({ type, source, middlewareId }) => `Middleware inside ${type} "${source}" depends on "${middlewareId}" but it's not registered. Did you forget to register it?`
1034
+ ).build();
1035
+ var tagNotFoundError = error(
1036
+ "runner.errors.tagNotFound"
1037
+ ).format(
1038
+ ({ id: id2 }) => `Tag "${id2}" not registered. Did you forget to register it inside a resource?`
1039
+ ).build();
1040
+ var lockedError = error(
1041
+ "runner.errors.locked"
1042
+ ).format(
1043
+ ({ what }) => `Cannot modify the ${what.toString()} when it is locked.`
1044
+ ).build();
1045
+ var storeAlreadyInitializedError = error(
1046
+ "runner.errors.storeAlreadyInitialized"
1047
+ ).format(() => "Store already initialized. Cannot reinitialize.").build();
1048
+ var validationError = error("runner.errors.validation").format(({ subject, id: id2, originalError }) => {
1049
+ const errorMessage = originalError instanceof Error ? originalError.message : String(originalError);
1050
+ return `${subject} validation failed for ${id2.toString()}: ${errorMessage}`;
1051
+ }).build();
1052
+ var eventCycleError = error("runner.errors.eventCycle").format(({ path }) => {
1053
+ const chain = path.map((p) => `${p.id}\u2190${p.source}`).join(" -> ");
1054
+ return `Event emission cycle detected:
1055
+ ${chain}
923
1056
 
924
- // src/definers/tools.ts
925
- function isTask(definition) {
926
- return definition && definition[symbolTask];
927
- }
928
- __name(isTask, "isTask");
929
- function isResource(definition) {
930
- return definition && definition[symbolResource];
931
- }
932
- __name(isResource, "isResource");
933
- function isResourceWithConfig(definition) {
934
- return definition && definition[symbolResourceWithConfig];
935
- }
936
- __name(isResourceWithConfig, "isResourceWithConfig");
937
- function isEvent(definition) {
938
- return definition && definition[symbolEvent];
939
- }
940
- __name(isEvent, "isEvent");
941
- function isHook(definition) {
942
- return definition && definition[symbolHook];
943
- }
944
- __name(isHook, "isHook");
945
- function isTaskMiddleware(definition) {
946
- return definition && definition[symbolTaskMiddleware];
947
- }
948
- __name(isTaskMiddleware, "isTaskMiddleware");
949
- function isResourceMiddleware(definition) {
950
- return definition && definition[symbolResourceMiddleware];
951
- }
952
- __name(isResourceMiddleware, "isResourceMiddleware");
953
- function isTag(definition) {
954
- return definition && definition[symbolTag];
955
- }
956
- __name(isTag, "isTag");
957
- function isOptional(definition) {
958
- return definition && definition[symbolOptionalDependency];
959
- }
960
- __name(isOptional, "isOptional");
961
- function isError(definition) {
962
- return Boolean(definition && definition[symbolError]);
963
- }
964
- __name(isError, "isError");
965
- function isAsyncContext(definition) {
966
- return Boolean(definition && definition[symbolAsyncContext]);
967
- }
968
- __name(isAsyncContext, "isAsyncContext");
1057
+ Break the cycle by changing hook logic (avoid mutual emits) or gate with conditions/tags.`;
1058
+ }).build();
1059
+ var eventEmissionCycleError = error("runner.errors.eventEmissionCycle").format(({ cycles }) => {
1060
+ const list = cycles.map((c) => ` \u2022 ${c}`).join("\n");
1061
+ return `Event emission cycles detected between hooks and events:
1062
+ ${list}
969
1063
 
970
- // src/tools/throws.ts
971
- function invalidThrowsEntryError(owner, item) {
972
- const got = item === null ? "null" : Array.isArray(item) ? "array" : typeof item === "object" ? "object" : typeof item;
973
- return new Error(
974
- `Invalid throws entry for ${owner.kind} ${owner.id}: expected error id string or Error helper, got ${got}`
975
- );
1064
+ This was detected at compile time (dry-run). Break the cycle by avoiding mutual emits between hooks or scoping hooks using tags.`;
1065
+ }).build();
1066
+ var platformUnsupportedFunctionError = error("runner.errors.platformUnsupportedFunction").format(
1067
+ ({ functionName }) => `Platform function not supported in this environment: ${functionName}. Detected platform: ${detectEnvironment()}.`
1068
+ ).build();
1069
+ var cancellationError = error(
1070
+ "runner.errors.cancellation"
1071
+ ).format(({ reason }) => reason || "Operation cancelled").build();
1072
+ var tunnelOwnershipConflictError = error("runner.errors.tunnelOwnershipConflict").format(
1073
+ ({ taskId, currentOwnerId, attemptedOwnerId }) => `Task "${taskId}" is already tunneled by resource "${currentOwnerId}". Resource "${attemptedOwnerId}" cannot tunnel it again. Ensure each task is owned by a single tunnel client.`
1074
+ ).build();
1075
+ var phantomTaskNotRoutedError = error("runner.errors.phantomTaskNotRouted").format(
1076
+ ({ taskId }) => `Phantom task "${taskId}" is not routed through any tunnel. Ensure a tunnel client selects this task id (or avoid calling the phantom task directly).`
1077
+ ).build();
1078
+ var taskNotRegisteredError = error("runner.errors.taskNotRegistered").format(
1079
+ ({ taskId }) => `Task "${taskId}" is not registered in the Store. This is an internal error\u2014ensure the task is registered before execution.`
1080
+ ).build();
1081
+ var builderIncompleteError = error("runner.errors.builderIncomplete").format(({ type, builderId, missingFields }) => {
1082
+ const typeLabel = type === "hook" ? "Hook" : type === "task-middleware" ? "Task middleware" : "Resource middleware";
1083
+ return `${typeLabel} "${builderId}" is incomplete. Missing required: ${missingFields.join(", ")}. Call ${missingFields.map((f) => `.${f}()`).join(" and ")} before .build().`;
1084
+ }).build();
1085
+ function isCancellationError(err) {
1086
+ return cancellationError.is(err);
976
1087
  }
977
- __name(invalidThrowsEntryError, "invalidThrowsEntryError");
978
- function toErrorIdList(owner, list) {
979
- const ids = [];
980
- const seen = /* @__PURE__ */ new Set();
981
- for (const item of list) {
982
- let id2;
983
- if (typeof item === "string") {
984
- if (item.trim().length === 0) {
985
- throw invalidThrowsEntryError(owner, item);
1088
+ __name(isCancellationError, "isCancellationError");
1089
+
1090
+ // src/definers/resourceFork.ts
1091
+ function resolveReId(forkId, options) {
1092
+ const fallback = /* @__PURE__ */ __name((id2) => `${forkId}.${id2}`, "fallback");
1093
+ const reId = options?.reId ?? fallback;
1094
+ return (id2) => {
1095
+ const next = reId(id2);
1096
+ if (typeof next !== "string" || next.length === 0) {
1097
+ throw new Error(`fork(reId) must return a non-empty string for "${id2}"`);
1098
+ }
1099
+ return next;
1100
+ };
1101
+ }
1102
+ __name(resolveReId, "resolveReId");
1103
+ function remapResourceDependenciesInObject(deps, options) {
1104
+ const remapObject = /* @__PURE__ */ __name((deps2) => {
1105
+ const out = { ...deps2 };
1106
+ for (const [key, value] of Object.entries(deps2)) {
1107
+ if (isOptional(value)) {
1108
+ const inner = value.inner;
1109
+ if (isResource(inner)) {
1110
+ const forked = options.getForkedResourceByBaseId(inner.id);
1111
+ if (forked) {
1112
+ out[key] = { ...value, inner: forked };
1113
+ }
1114
+ }
1115
+ continue;
986
1116
  }
987
- id2 = item;
988
- } else if (isError(item)) {
989
- id2 = item.id;
990
- if (typeof id2 !== "string" || id2.trim().length === 0) {
991
- throw invalidThrowsEntryError(owner, item);
1117
+ if (isResource(value)) {
1118
+ const forked = options.getForkedResourceByBaseId(value.id);
1119
+ if (forked) {
1120
+ out[key] = forked;
1121
+ }
992
1122
  }
993
- } else {
994
- throw invalidThrowsEntryError(owner, item);
995
1123
  }
996
- if (seen.has(id2)) continue;
997
- seen.add(id2);
998
- ids.push(id2);
999
- }
1000
- return ids;
1124
+ return out;
1125
+ }, "remapObject");
1126
+ return remapObject(deps);
1001
1127
  }
1002
- __name(toErrorIdList, "toErrorIdList");
1003
- function normalizeThrows(owner, throwsList) {
1004
- if (throwsList === void 0) return void 0;
1005
- return toErrorIdList(owner, throwsList);
1128
+ __name(remapResourceDependenciesInObject, "remapResourceDependenciesInObject");
1129
+ function toResourceOnlyRegisterItems(items) {
1130
+ const out = [];
1131
+ for (const item of items) {
1132
+ if (isResourceWithConfig(item)) {
1133
+ out.push({
1134
+ kind: "withConfig",
1135
+ resource: item.resource,
1136
+ config: item.config
1137
+ });
1138
+ continue;
1139
+ }
1140
+ if (isResource(item)) {
1141
+ out.push({ kind: "resource", resource: item });
1142
+ continue;
1143
+ }
1144
+ }
1145
+ return out;
1006
1146
  }
1007
- __name(normalizeThrows, "normalizeThrows");
1008
-
1009
- // src/definers/defineTask.ts
1010
- function defineTask(taskConfig) {
1011
- const filePath = getCallerFile();
1012
- const id2 = taskConfig.id;
1013
- return {
1014
- [symbolTask]: true,
1015
- [symbolFilePath]: filePath,
1016
- id: id2,
1017
- dependencies: taskConfig.dependencies || {},
1018
- middleware: taskConfig.middleware || [],
1019
- run: taskConfig.run,
1020
- inputSchema: taskConfig.inputSchema,
1021
- resultSchema: taskConfig.resultSchema,
1022
- meta: taskConfig.meta || {},
1023
- tags: taskConfig.tags || [],
1024
- throws: normalizeThrows({ kind: "task", id: id2 }, taskConfig.throws),
1025
- // autorun,
1026
- optional() {
1027
- return {
1028
- inner: this,
1029
- [symbolOptionalDependency]: true
1147
+ __name(toResourceOnlyRegisterItems, "toResourceOnlyRegisterItems");
1148
+ function createDeepForkContext(forkId, options) {
1149
+ const reId = resolveReId(forkId, options);
1150
+ const forkedResourceByBaseId = /* @__PURE__ */ new Map();
1151
+ const ensureForked = /* @__PURE__ */ __name((base) => {
1152
+ const cached = forkedResourceByBaseId.get(base.id);
1153
+ if (cached) return cached;
1154
+ const forked = base.fork(reId(base.id), { register: "drop" });
1155
+ forkedResourceByBaseId.set(base.id, forked);
1156
+ const baseRegister = base.register;
1157
+ const ensureForkedForRegisterConfig = /* @__PURE__ */ __name((config) => {
1158
+ const items = typeof baseRegister === "function" ? baseRegister(config) : baseRegister;
1159
+ for (const candidate of toResourceOnlyRegisterItems(items)) {
1160
+ ensureForked(candidate.resource);
1161
+ }
1162
+ return items;
1163
+ }, "ensureForkedForRegisterConfig");
1164
+ const mapRegisterItems2 = /* @__PURE__ */ __name((items) => {
1165
+ const resourceItems = toResourceOnlyRegisterItems(items);
1166
+ const out = [];
1167
+ for (const candidate of resourceItems) {
1168
+ if (candidate.kind === "resource") {
1169
+ out.push(ensureForked(candidate.resource));
1170
+ continue;
1171
+ }
1172
+ out.push(ensureForked(candidate.resource).with(candidate.config));
1173
+ }
1174
+ return out;
1175
+ }, "mapRegisterItems");
1176
+ forked.register = typeof baseRegister === "function" ? (config) => {
1177
+ const items = ensureForkedForRegisterConfig(config);
1178
+ return mapRegisterItems2(items);
1179
+ } : (() => {
1180
+ ensureForkedForRegisterConfig(void 0);
1181
+ return mapRegisterItems2(baseRegister);
1182
+ })();
1183
+ const baseDependencies = base.dependencies;
1184
+ const remapDepsObject = /* @__PURE__ */ __name((deps) => remapResourceDependenciesInObject(deps, {
1185
+ getForkedResourceByBaseId: /* @__PURE__ */ __name((id2) => forkedResourceByBaseId.get(id2), "getForkedResourceByBaseId")
1186
+ }), "remapDepsObject");
1187
+ if (!baseDependencies) {
1188
+ forked.dependencies = baseDependencies;
1189
+ } else {
1190
+ forked.dependencies = (config) => {
1191
+ ensureForkedForRegisterConfig(config);
1192
+ const deps = typeof baseDependencies === "function" ? baseDependencies(config) : baseDependencies;
1193
+ return remapDepsObject(deps);
1030
1194
  };
1031
1195
  }
1196
+ return forked;
1197
+ }, "ensureForked");
1198
+ const ensureForkedForRegisterItems = /* @__PURE__ */ __name((items) => {
1199
+ for (const candidate of toResourceOnlyRegisterItems(items)) {
1200
+ ensureForked(candidate.resource);
1201
+ }
1202
+ }, "ensureForkedForRegisterItems");
1203
+ const mapRegisterItems = /* @__PURE__ */ __name((items) => {
1204
+ ensureForkedForRegisterItems(items);
1205
+ const resourceItems = toResourceOnlyRegisterItems(items);
1206
+ const out = [];
1207
+ for (const candidate of resourceItems) {
1208
+ if (candidate.kind === "resource") {
1209
+ out.push(ensureForked(candidate.resource));
1210
+ continue;
1211
+ }
1212
+ out.push(ensureForked(candidate.resource).with(candidate.config));
1213
+ }
1214
+ return out;
1215
+ }, "mapRegisterItems");
1216
+ const remapDependencies = /* @__PURE__ */ __name((dependencies) => {
1217
+ if (!dependencies) return dependencies;
1218
+ const remapObj = /* @__PURE__ */ __name((deps) => remapResourceDependenciesInObject(deps, {
1219
+ getForkedResourceByBaseId: /* @__PURE__ */ __name((id2) => forkedResourceByBaseId.get(id2), "getForkedResourceByBaseId")
1220
+ }), "remapObj");
1221
+ if (typeof dependencies === "function") {
1222
+ return (config) => remapObj(dependencies(config));
1223
+ }
1224
+ return remapObj(dependencies);
1225
+ }, "remapDependencies");
1226
+ return {
1227
+ reId,
1228
+ ensureForkedForRegisterItems,
1229
+ mapRegisterItems,
1230
+ remapDependencies,
1231
+ getForkedResourceByBaseId: /* @__PURE__ */ __name((id2) => forkedResourceByBaseId.get(id2), "getForkedResourceByBaseId")
1032
1232
  };
1033
1233
  }
1034
- __name(defineTask, "defineTask");
1035
- defineTask.phantom = (taskConfig) => {
1036
- const taskDef = defineTask({
1037
- ...taskConfig,
1038
- run: /* @__PURE__ */ __name(async (_input) => {
1039
- return void 0;
1040
- }, "run")
1041
- });
1042
- taskDef[symbolPhantomTask] = true;
1043
- return taskDef;
1044
- };
1045
-
1046
- // src/definers/defineHook.ts
1047
- function defineHook(hookDef) {
1048
- const filePath = getCallerFile();
1234
+ __name(createDeepForkContext, "createDeepForkContext");
1235
+ function resolveForkedRegisterAndDependencies(params) {
1236
+ const { register, dependencies, forkId, options } = params;
1237
+ const mode = options?.register ?? "keep";
1238
+ if (mode === "drop") {
1239
+ return { register: [], dependencies };
1240
+ }
1241
+ if (mode !== "deep") {
1242
+ return { register, dependencies };
1243
+ }
1244
+ if (!register) {
1245
+ return { register, dependencies };
1246
+ }
1247
+ const ctx = createDeepForkContext(forkId, options);
1248
+ if (typeof register === "function") {
1249
+ return {
1250
+ register: /* @__PURE__ */ __name((config) => {
1251
+ const baseItems = register(config);
1252
+ return ctx.mapRegisterItems(baseItems);
1253
+ }, "register"),
1254
+ dependencies: dependencies ? (config) => {
1255
+ const baseItems = register(config);
1256
+ ctx.ensureForkedForRegisterItems(baseItems);
1257
+ const baseDeps = typeof dependencies === "function" ? dependencies(config) : dependencies;
1258
+ return remapResourceDependenciesInObject(baseDeps, {
1259
+ getForkedResourceByBaseId: ctx.getForkedResourceByBaseId
1260
+ });
1261
+ } : dependencies
1262
+ };
1263
+ }
1264
+ ctx.ensureForkedForRegisterItems(register);
1049
1265
  return {
1050
- [symbolHook]: true,
1051
- [symbolFilePath]: filePath,
1052
- id: hookDef.id,
1053
- dependencies: hookDef.dependencies || {},
1054
- on: hookDef.on,
1055
- order: hookDef.order,
1056
- run: hookDef.run,
1057
- meta: hookDef.meta || {},
1058
- tags: hookDef.tags || []
1266
+ register: ctx.mapRegisterItems(register),
1267
+ dependencies: ctx.remapDependencies(dependencies)
1059
1268
  };
1060
1269
  }
1061
- __name(defineHook, "defineHook");
1270
+ __name(resolveForkedRegisterAndDependencies, "resolveForkedRegisterAndDependencies");
1062
1271
 
1063
1272
  // src/definers/defineResource.ts
1064
1273
  function defineResource(constConfig) {
@@ -1105,12 +1314,25 @@ function defineResource(constConfig) {
1105
1314
  [symbolOptionalDependency]: true
1106
1315
  };
1107
1316
  },
1108
- fork(newId) {
1109
- return defineResource({
1317
+ fork(newId, options) {
1318
+ const forkedParts = resolveForkedRegisterAndDependencies({
1319
+ register: constConfig.register,
1320
+ dependencies: constConfig.dependencies,
1321
+ forkId: newId,
1322
+ options
1323
+ });
1324
+ const forked = defineResource({
1110
1325
  ...constConfig,
1111
1326
  id: newId,
1327
+ register: forkedParts.register,
1328
+ dependencies: forkedParts.dependencies,
1112
1329
  [symbolFilePath]: filePath
1113
1330
  });
1331
+ forked[symbolResourceForkedFrom] = {
1332
+ fromId: id2,
1333
+ forkedAtFilePath: getCallerFile()
1334
+ };
1335
+ return forked;
1114
1336
  }
1115
1337
  };
1116
1338
  }
@@ -1238,7 +1460,7 @@ function defineOverride(base, patch) {
1238
1460
  ...patch,
1239
1461
  id: base.id
1240
1462
  };
1241
- if (base.on !== void 0) {
1463
+ if ("on" in base && base.on !== void 0) {
1242
1464
  overridden.on = base.on;
1243
1465
  }
1244
1466
  return overridden;
@@ -1358,6 +1580,309 @@ var SymbolPolicy = /* @__PURE__ */ ((SymbolPolicy2) => {
1358
1580
  SymbolPolicy2["Disabled"] = "Disabled";
1359
1581
  return SymbolPolicy2;
1360
1582
  })(SymbolPolicy || {});
1583
+ var SymbolPolicyErrorMessage = /* @__PURE__ */ ((SymbolPolicyErrorMessage2) => {
1584
+ SymbolPolicyErrorMessage2["GlobalSymbolsNotAllowed"] = "Global symbols are not allowed";
1585
+ SymbolPolicyErrorMessage2["SymbolsNotAllowed"] = "Symbols are not allowed";
1586
+ SymbolPolicyErrorMessage2["UnsupportedSymbolPolicy"] = "Unsupported symbol policy";
1587
+ return SymbolPolicyErrorMessage2;
1588
+ })(SymbolPolicyErrorMessage || {});
1589
+
1590
+ // src/serializer/binary-builtins.ts
1591
+ var INVALID_PAYLOAD_MESSAGE_PREFIX = "Invalid";
1592
+ var typedArrayTypeIds = [
1593
+ "Int8Array",
1594
+ "Uint8Array",
1595
+ "Uint8ClampedArray",
1596
+ "Int16Array",
1597
+ "Uint16Array",
1598
+ "Int32Array",
1599
+ "Uint32Array",
1600
+ "Float32Array",
1601
+ "Float64Array",
1602
+ "BigInt64Array",
1603
+ "BigUint64Array"
1604
+ ];
1605
+ var getTypedArrayConstructor = /* @__PURE__ */ __name((typeId) => {
1606
+ const value = globalThis[typeId];
1607
+ if (typeof value !== "function") {
1608
+ return null;
1609
+ }
1610
+ return value;
1611
+ }, "getTypedArrayConstructor");
1612
+ var getRuntimeBufferConstructor = /* @__PURE__ */ __name(() => {
1613
+ const value = globalThis.Buffer;
1614
+ if (typeof value !== "function") {
1615
+ return null;
1616
+ }
1617
+ const valueRecord = value;
1618
+ if (typeof valueRecord.from !== "function" || typeof valueRecord.isBuffer !== "function") {
1619
+ return null;
1620
+ }
1621
+ return value;
1622
+ }, "getRuntimeBufferConstructor");
1623
+ var isNodeBuffer = /* @__PURE__ */ __name((value) => {
1624
+ const runtimeBufferConstructor = getRuntimeBufferConstructor();
1625
+ if (!runtimeBufferConstructor) {
1626
+ return false;
1627
+ }
1628
+ return runtimeBufferConstructor.isBuffer(value);
1629
+ }, "isNodeBuffer");
1630
+ var assertBytePayload = /* @__PURE__ */ __name((payload, typeId) => {
1631
+ if (!Array.isArray(payload)) {
1632
+ throw new Error(`${INVALID_PAYLOAD_MESSAGE_PREFIX} ${typeId} payload`);
1633
+ }
1634
+ const bytes = new Array(payload.length);
1635
+ for (let index = 0; index < payload.length; index += 1) {
1636
+ const byteValue = payload[index];
1637
+ if (typeof byteValue !== "number" || !Number.isInteger(byteValue) || byteValue < 0 || byteValue > 255) {
1638
+ throw new Error(`${INVALID_PAYLOAD_MESSAGE_PREFIX} ${typeId} payload`);
1639
+ }
1640
+ bytes[index] = byteValue;
1641
+ }
1642
+ return bytes;
1643
+ }, "assertBytePayload");
1644
+ var toBytePayload = /* @__PURE__ */ __name((value) => Array.from(new Uint8Array(value.buffer, value.byteOffset, value.byteLength)), "toBytePayload");
1645
+ var bytesToArrayBuffer = /* @__PURE__ */ __name((payload, typeId) => {
1646
+ const bytes = assertBytePayload(payload, typeId);
1647
+ return Uint8Array.from(bytes).buffer;
1648
+ }, "bytesToArrayBuffer");
1649
+ var deserializeTypedArray = /* @__PURE__ */ __name((typeId, payload) => {
1650
+ const typedArrayConstructor = getTypedArrayConstructor(typeId);
1651
+ if (!typedArrayConstructor) {
1652
+ throw new Error(`${typeId} is not available in this runtime`);
1653
+ }
1654
+ const bytes = assertBytePayload(payload, typeId);
1655
+ const bytesPerElement = typedArrayConstructor.BYTES_PER_ELEMENT;
1656
+ if (bytes.length % bytesPerElement !== 0) {
1657
+ throw new Error(`${INVALID_PAYLOAD_MESSAGE_PREFIX} ${typeId} payload`);
1658
+ }
1659
+ const arrayBuffer = Uint8Array.from(bytes).buffer;
1660
+ return new typedArrayConstructor(arrayBuffer);
1661
+ }, "deserializeTypedArray");
1662
+ var createTypedArrayType = /* @__PURE__ */ __name((typeId) => ({
1663
+ id: typeId,
1664
+ is: /* @__PURE__ */ __name((value) => {
1665
+ const typedArrayConstructor = getTypedArrayConstructor(typeId);
1666
+ if (!typedArrayConstructor) {
1667
+ return false;
1668
+ }
1669
+ if (!(value instanceof typedArrayConstructor)) {
1670
+ return false;
1671
+ }
1672
+ if (typeId === "Uint8Array" && isNodeBuffer(value)) {
1673
+ return false;
1674
+ }
1675
+ return true;
1676
+ }, "is"),
1677
+ serialize: /* @__PURE__ */ __name((value) => toBytePayload(value), "serialize"),
1678
+ deserialize: /* @__PURE__ */ __name((payload) => deserializeTypedArray(typeId, payload), "deserialize"),
1679
+ strategy: "value"
1680
+ }), "createTypedArrayType");
1681
+ var ArrayBufferType = {
1682
+ id: "ArrayBuffer",
1683
+ is: /* @__PURE__ */ __name((value) => value instanceof ArrayBuffer, "is"),
1684
+ serialize: /* @__PURE__ */ __name((value) => Array.from(new Uint8Array(value)), "serialize"),
1685
+ deserialize: /* @__PURE__ */ __name((payload) => bytesToArrayBuffer(payload, "ArrayBuffer"), "deserialize"),
1686
+ strategy: "value"
1687
+ };
1688
+ var DataViewType = {
1689
+ id: "DataView",
1690
+ is: /* @__PURE__ */ __name((value) => value instanceof DataView, "is"),
1691
+ serialize: /* @__PURE__ */ __name((value) => toBytePayload(value), "serialize"),
1692
+ deserialize: /* @__PURE__ */ __name((payload) => new DataView(bytesToArrayBuffer(payload, "DataView")), "deserialize"),
1693
+ strategy: "value"
1694
+ };
1695
+ var BufferType = {
1696
+ id: "Buffer",
1697
+ is: /* @__PURE__ */ __name((value) => isNodeBuffer(value), "is"),
1698
+ serialize: /* @__PURE__ */ __name((value) => toBytePayload(value), "serialize"),
1699
+ deserialize: /* @__PURE__ */ __name((payload) => {
1700
+ const bytes = assertBytePayload(payload, "Buffer");
1701
+ const runtimeBufferConstructor = getRuntimeBufferConstructor();
1702
+ if (runtimeBufferConstructor) {
1703
+ return runtimeBufferConstructor.from(bytes);
1704
+ }
1705
+ return Uint8Array.from(bytes);
1706
+ }, "deserialize"),
1707
+ strategy: "value"
1708
+ };
1709
+ var typedArrayTypes = typedArrayTypeIds.map(
1710
+ (typeId) => createTypedArrayType(typeId)
1711
+ );
1712
+ var binaryBuiltInTypes = [
1713
+ ArrayBufferType,
1714
+ DataViewType,
1715
+ BufferType,
1716
+ ...typedArrayTypes
1717
+ ];
1718
+
1719
+ // src/serializer/error-url-builtins.ts
1720
+ var hasOwn = Object.prototype.hasOwnProperty;
1721
+ var errorReservedPropertyNames = /* @__PURE__ */ new Set([
1722
+ "name",
1723
+ "message",
1724
+ "stack",
1725
+ "cause"
1726
+ ]);
1727
+ var isRecord = /* @__PURE__ */ __name((value) => typeof value === "object" && value !== null && !Array.isArray(value), "isRecord");
1728
+ var isUnsafePropertyName = /* @__PURE__ */ __name((propertyName) => propertyName === "__proto__" || propertyName === "constructor" || propertyName === "prototype", "isUnsafePropertyName");
1729
+ var collectErrorCustomFields = /* @__PURE__ */ __name((error2) => {
1730
+ const customFields = {};
1731
+ for (const propertyName of Object.getOwnPropertyNames(error2)) {
1732
+ if (errorReservedPropertyNames.has(propertyName)) {
1733
+ continue;
1734
+ }
1735
+ if (isUnsafePropertyName(propertyName)) {
1736
+ continue;
1737
+ }
1738
+ const descriptor = Object.getOwnPropertyDescriptor(error2, propertyName);
1739
+ if (!descriptor || !("value" in descriptor)) {
1740
+ continue;
1741
+ }
1742
+ customFields[propertyName] = descriptor.value;
1743
+ }
1744
+ return customFields;
1745
+ }, "collectErrorCustomFields");
1746
+ var assertSerializedErrorPayload = /* @__PURE__ */ __name((value) => {
1747
+ if (!isRecord(value)) {
1748
+ throw new Error("Invalid Error payload");
1749
+ }
1750
+ const { name, message, stack, customFields } = value;
1751
+ if (typeof name !== "string" || typeof message !== "string") {
1752
+ throw new Error("Invalid Error payload");
1753
+ }
1754
+ if (stack !== void 0 && typeof stack !== "string") {
1755
+ throw new Error("Invalid Error payload");
1756
+ }
1757
+ if (customFields !== void 0 && !isRecord(customFields)) {
1758
+ throw new Error("Invalid Error payload");
1759
+ }
1760
+ const normalizedCustomFields = {};
1761
+ const customFieldEntries = Object.entries(customFields ?? {});
1762
+ for (const [propertyName, propertyValue] of customFieldEntries) {
1763
+ if (isUnsafePropertyName(propertyName)) {
1764
+ continue;
1765
+ }
1766
+ normalizedCustomFields[propertyName] = propertyValue;
1767
+ }
1768
+ return {
1769
+ name,
1770
+ message,
1771
+ stack,
1772
+ hasCause: hasOwn.call(value, "cause"),
1773
+ cause: value.cause,
1774
+ customFields: normalizedCustomFields
1775
+ };
1776
+ }, "assertSerializedErrorPayload");
1777
+ var getUrlConstructor = /* @__PURE__ */ __name(() => {
1778
+ const value = globalThis.URL;
1779
+ if (typeof value !== "function") {
1780
+ return null;
1781
+ }
1782
+ return value;
1783
+ }, "getUrlConstructor");
1784
+ var getUrlSearchParamsConstructor = /* @__PURE__ */ __name(() => {
1785
+ const value = globalThis.URLSearchParams;
1786
+ if (typeof value !== "function") {
1787
+ return null;
1788
+ }
1789
+ return value;
1790
+ }, "getUrlSearchParamsConstructor");
1791
+ var ErrorType = {
1792
+ id: "Error",
1793
+ is: /* @__PURE__ */ __name((value) => value instanceof Error, "is"),
1794
+ serialize: /* @__PURE__ */ __name((error2) => {
1795
+ const serializedErrorPayload = {
1796
+ name: error2.name,
1797
+ message: error2.message,
1798
+ customFields: collectErrorCustomFields(error2)
1799
+ };
1800
+ if (typeof error2.stack === "string") {
1801
+ serializedErrorPayload.stack = error2.stack;
1802
+ }
1803
+ if (hasOwn.call(error2, "cause")) {
1804
+ serializedErrorPayload.cause = error2.cause;
1805
+ }
1806
+ return serializedErrorPayload;
1807
+ }, "serialize"),
1808
+ deserialize: /* @__PURE__ */ __name((payload) => {
1809
+ const { name, message, stack, hasCause, cause, customFields } = assertSerializedErrorPayload(payload);
1810
+ const restoredError = new Error(message);
1811
+ restoredError.name = name;
1812
+ if (stack !== void 0) {
1813
+ Object.defineProperty(restoredError, "stack", {
1814
+ value: stack,
1815
+ writable: true,
1816
+ configurable: true,
1817
+ enumerable: false
1818
+ });
1819
+ }
1820
+ if (hasCause) {
1821
+ Object.defineProperty(restoredError, "cause", {
1822
+ value: cause,
1823
+ writable: true,
1824
+ configurable: true,
1825
+ enumerable: false
1826
+ });
1827
+ }
1828
+ for (const [propertyName, propertyValue] of Object.entries(customFields)) {
1829
+ if (errorReservedPropertyNames.has(propertyName)) {
1830
+ continue;
1831
+ }
1832
+ restoredError[propertyName] = propertyValue;
1833
+ }
1834
+ return restoredError;
1835
+ }, "deserialize")
1836
+ };
1837
+ var URLType = {
1838
+ id: "URL",
1839
+ is: /* @__PURE__ */ __name((value) => {
1840
+ const runtimeUrlConstructor = getUrlConstructor();
1841
+ if (!runtimeUrlConstructor) {
1842
+ return false;
1843
+ }
1844
+ return value instanceof runtimeUrlConstructor;
1845
+ }, "is"),
1846
+ serialize: /* @__PURE__ */ __name((value) => value.href, "serialize"),
1847
+ deserialize: /* @__PURE__ */ __name((payload) => {
1848
+ if (typeof payload !== "string") {
1849
+ throw new Error("Invalid URL payload");
1850
+ }
1851
+ const runtimeUrlConstructor = getUrlConstructor();
1852
+ if (!runtimeUrlConstructor) {
1853
+ throw new Error("URL is not available in this runtime");
1854
+ }
1855
+ return new runtimeUrlConstructor(payload);
1856
+ }, "deserialize"),
1857
+ strategy: "value"
1858
+ };
1859
+ var URLSearchParamsType = {
1860
+ id: "URLSearchParams",
1861
+ is: /* @__PURE__ */ __name((value) => {
1862
+ const runtimeUrlSearchParamsConstructor = getUrlSearchParamsConstructor();
1863
+ if (!runtimeUrlSearchParamsConstructor) {
1864
+ return false;
1865
+ }
1866
+ return value instanceof runtimeUrlSearchParamsConstructor;
1867
+ }, "is"),
1868
+ serialize: /* @__PURE__ */ __name((value) => value.toString(), "serialize"),
1869
+ deserialize: /* @__PURE__ */ __name((payload) => {
1870
+ if (typeof payload !== "string") {
1871
+ throw new Error("Invalid URLSearchParams payload");
1872
+ }
1873
+ const runtimeUrlSearchParamsConstructor = getUrlSearchParamsConstructor();
1874
+ if (!runtimeUrlSearchParamsConstructor) {
1875
+ throw new Error("URLSearchParams is not available in this runtime");
1876
+ }
1877
+ return new runtimeUrlSearchParamsConstructor(payload);
1878
+ }, "deserialize"),
1879
+ strategy: "value"
1880
+ };
1881
+ var errorAndUrlBuiltInTypes = [
1882
+ ErrorType,
1883
+ URLType,
1884
+ URLSearchParamsType
1885
+ ];
1361
1886
 
1362
1887
  // src/serializer/special-values.ts
1363
1888
  var serializeUndefined = /* @__PURE__ */ __name(() => ({
@@ -1563,7 +2088,9 @@ var builtInTypes = [
1563
2088
  UndefinedType,
1564
2089
  NonFiniteNumberType,
1565
2090
  BigIntType,
1566
- SymbolType
2091
+ SymbolType,
2092
+ ...errorAndUrlBuiltInTypes,
2093
+ ...binaryBuiltInTypes
1567
2094
  ];
1568
2095
 
1569
2096
  // src/serializer/type-registry.ts
@@ -2054,7 +2581,7 @@ var serializeTreeValue = /* @__PURE__ */ __name((value, context, depth, options)
2054
2581
  }, "serializeTreeValue");
2055
2582
 
2056
2583
  // src/serializer/deserializer.ts
2057
- var hasOwn = Object.prototype.hasOwnProperty;
2584
+ var hasOwn2 = Object.prototype.hasOwnProperty;
2058
2585
  var copyOwnProperties = /* @__PURE__ */ __name((target, source, unsafeKeys) => {
2059
2586
  const descriptors = Object.getOwnPropertyDescriptors(source);
2060
2587
  for (const key of Object.keys(descriptors)) {
@@ -2135,7 +2662,7 @@ var deserializeValue = /* @__PURE__ */ __name((value, context, depth, options) =
2135
2662
  const obj = {};
2136
2663
  const source = value;
2137
2664
  for (const key in source) {
2138
- if (!hasOwn.call(source, key)) {
2665
+ if (!hasOwn2.call(source, key)) {
2139
2666
  continue;
2140
2667
  }
2141
2668
  if (isUnsafeKey(key, options.unsafeKeys)) {
@@ -2180,7 +2707,7 @@ var resolveReference = /* @__PURE__ */ __name((id2, context, depth, options) =>
2180
2707
  context.resolved.set(id2, target);
2181
2708
  const source = node.value;
2182
2709
  for (const key in source) {
2183
- if (!hasOwn.call(source, key)) {
2710
+ if (!hasOwn2.call(source, key)) {
2184
2711
  continue;
2185
2712
  }
2186
2713
  if (isUnsafeKey(key, options.unsafeKeys)) {
@@ -2252,7 +2779,7 @@ var mergePlaceholder = /* @__PURE__ */ __name((placeholder, result, unsafeKeys)
2252
2779
  const target = placeholder;
2253
2780
  const source = result;
2254
2781
  for (const key in source) {
2255
- if (!hasOwn.call(source, key)) {
2782
+ if (!hasOwn2.call(source, key)) {
2256
2783
  continue;
2257
2784
  }
2258
2785
  if (isUnsafeKey(key, unsafeKeys)) {
@@ -2285,7 +2812,7 @@ var deserializeLegacy = /* @__PURE__ */ __name((value, depth, options) => {
2285
2812
  const obj = {};
2286
2813
  const source = value;
2287
2814
  for (const key in source) {
2288
- if (!hasOwn.call(source, key)) {
2815
+ if (!hasOwn2.call(source, key)) {
2289
2816
  continue;
2290
2817
  }
2291
2818
  if (isUnsafeKey(key, options.unsafeKeys)) {
@@ -2296,6 +2823,26 @@ var deserializeLegacy = /* @__PURE__ */ __name((value, depth, options) => {
2296
2823
  return obj;
2297
2824
  }, "deserializeLegacy");
2298
2825
 
2826
+ // src/serializer/option-normalizers.ts
2827
+ var normalizeMaxDepth = /* @__PURE__ */ __name((value, fallback) => {
2828
+ if (value === Number.POSITIVE_INFINITY) {
2829
+ return Number.POSITIVE_INFINITY;
2830
+ }
2831
+ if (typeof value === "number" && Number.isFinite(value) && value >= 0) {
2832
+ return Math.floor(value);
2833
+ }
2834
+ return fallback;
2835
+ }, "normalizeMaxDepth");
2836
+ var normalizeMaxRegExpPatternLength = /* @__PURE__ */ __name((value, fallback) => {
2837
+ if (value === Number.POSITIVE_INFINITY) {
2838
+ return Number.POSITIVE_INFINITY;
2839
+ }
2840
+ if (typeof value === "number" && Number.isFinite(value) && value > 0) {
2841
+ return Math.floor(value);
2842
+ }
2843
+ return fallback;
2844
+ }, "normalizeMaxRegExpPatternLength");
2845
+
2299
2846
  // src/serializer/Serializer.ts
2300
2847
  var GRAPH_VERSION = 1;
2301
2848
  var DEFAULT_MAX_DEPTH = 1e3;
@@ -2331,10 +2878,11 @@ var Serializer = class {
2331
2878
  return check(pattern, index);
2332
2879
  }, "isBoundedQuantifier");
2333
2880
  this.indent = options.pretty ? 2 : void 0;
2334
- const maxDepth = options.maxDepth;
2335
- this.maxDepth = typeof maxDepth === "number" && Number.isFinite(maxDepth) && maxDepth >= 0 ? Math.floor(maxDepth) : DEFAULT_MAX_DEPTH;
2336
- const maxPatternLength = options.maxRegExpPatternLength;
2337
- this.maxRegExpPatternLength = maxPatternLength === Number.POSITIVE_INFINITY ? Number.POSITIVE_INFINITY : typeof maxPatternLength === "number" && Number.isFinite(maxPatternLength) && maxPatternLength > 0 ? Math.floor(maxPatternLength) : DEFAULT_MAX_REGEXP_PATTERN_LENGTH;
2881
+ this.maxDepth = normalizeMaxDepth(options.maxDepth, DEFAULT_MAX_DEPTH);
2882
+ this.maxRegExpPatternLength = normalizeMaxRegExpPatternLength(
2883
+ options.maxRegExpPatternLength,
2884
+ DEFAULT_MAX_REGEXP_PATTERN_LENGTH
2885
+ );
2338
2886
  this.allowUnsafeRegExp = options.allowUnsafeRegExp ?? false;
2339
2887
  this.unsafeKeys = DEFAULT_UNSAFE_KEYS;
2340
2888
  this.typeRegistry = new TypeRegistry({
@@ -2469,13 +3017,6 @@ var Serializer = class {
2469
3017
  }
2470
3018
  };
2471
3019
 
2472
- // src/serializer/index.ts
2473
- var defaultSerializer = new Serializer();
2474
- function getDefaultSerializer() {
2475
- return defaultSerializer;
2476
- }
2477
- __name(getDefaultSerializer, "getDefaultSerializer");
2478
-
2479
3020
  // src/definers/defineAsyncContext.ts
2480
3021
  var platform = getPlatform();
2481
3022
  var storage = platform.createAsyncLocalStorage();
@@ -2483,13 +3024,14 @@ function getCurrentStore() {
2483
3024
  return storage.getStore();
2484
3025
  }
2485
3026
  __name(getCurrentStore, "getCurrentStore");
2486
- function defineAsyncContext(def) {
3027
+ function defineAsyncContext(def, filePath) {
2487
3028
  if (!platform.hasAsyncLocalStorage()) {
2488
3029
  platformUnsupportedFunctionError.throw({
2489
3030
  functionName: `createAsyncLocalStorage: Cannot create context ${def.id}: no async storage available in this environment`
2490
3031
  });
2491
3032
  }
2492
3033
  const ctxId = def.id;
3034
+ const resolvedFilePath = filePath ?? getCallerFile();
2493
3035
  const use = /* @__PURE__ */ __name(() => {
2494
3036
  const store2 = getCurrentStore();
2495
3037
  if (!store2 || !store2.has(ctxId)) {
@@ -2506,10 +3048,11 @@ function defineAsyncContext(def) {
2506
3048
  map.set(ctxId, value);
2507
3049
  return storage.run(map, fn);
2508
3050
  }, "provide");
2509
- const serializer2 = getDefaultSerializer();
3051
+ const serializer2 = new Serializer();
2510
3052
  const api = {
2511
3053
  id: ctxId,
2512
3054
  [symbolAsyncContext]: true,
3055
+ [symbolFilePath]: resolvedFilePath,
2513
3056
  use,
2514
3057
  /* istanbul ignore next */
2515
3058
  provide(value, fn) {
@@ -3161,12 +3704,12 @@ var EventManager = class {
3161
3704
  data,
3162
3705
  timestamp: /* @__PURE__ */ new Date(),
3163
3706
  source,
3164
- meta: eventDefinition.meta || {},
3707
+ meta: { ...eventDefinition.meta || {} },
3165
3708
  stopPropagation: /* @__PURE__ */ __name(() => {
3166
3709
  propagationStopped = true;
3167
3710
  }, "stopPropagation"),
3168
3711
  isPropagationStopped: /* @__PURE__ */ __name(() => propagationStopped, "isPropagationStopped"),
3169
- tags: eventDefinition.tags
3712
+ tags: [...eventDefinition.tags]
3170
3713
  };
3171
3714
  const baseEmit = /* @__PURE__ */ __name(async (eventToEmit) => {
3172
3715
  if (allListeners.length === 0) {
@@ -3192,10 +3735,14 @@ var EventManager = class {
3192
3735
  if (!interceptor) {
3193
3736
  return baseEmit(eventToEmit);
3194
3737
  }
3195
- return interceptor(
3196
- (nextEvent) => runInterceptor(index + 1, nextEvent),
3197
- eventToEmit
3198
- );
3738
+ return interceptor((nextEvent) => {
3739
+ this.assertPropagationMethodsUnchanged(
3740
+ eventDefinition.id,
3741
+ eventToEmit,
3742
+ nextEvent
3743
+ );
3744
+ return runInterceptor(index + 1, nextEvent);
3745
+ }, eventToEmit);
3199
3746
  }, "runInterceptor");
3200
3747
  await runInterceptor(0, event2);
3201
3748
  return deepestEvent;
@@ -3306,21 +3853,24 @@ var EventManager = class {
3306
3853
  lockedError.throw({ what: "EventManager" });
3307
3854
  }
3308
3855
  }
3309
- /**
3310
- * Clears all listeners and interceptors.
3311
- * Call this to release references and free memory.
3312
- */
3313
- clear() {
3314
- this.registry.clear();
3315
- this.emissionInterceptors.length = 0;
3316
- this.hookInterceptors.length = 0;
3856
+ assertPropagationMethodsUnchanged(eventId, currentEvent, nextEvent) {
3857
+ if (nextEvent.stopPropagation !== currentEvent.stopPropagation || nextEvent.isPropagationStopped !== currentEvent.isPropagationStopped) {
3858
+ validationError.throw({
3859
+ subject: "Event interceptor",
3860
+ id: eventId,
3861
+ originalError: new Error(
3862
+ "Interceptors cannot override stopPropagation/isPropagationStopped"
3863
+ )
3864
+ });
3865
+ }
3317
3866
  }
3318
3867
  /**
3319
3868
  * Disposes the EventManager, releasing all listeners and interceptors.
3320
- * Alias for clear() following the IResource disposal pattern.
3321
3869
  */
3322
3870
  dispose() {
3323
- this.clear();
3871
+ this.registry.clear();
3872
+ this.emissionInterceptors.length = 0;
3873
+ this.hookInterceptors.length = 0;
3324
3874
  }
3325
3875
  /**
3326
3876
  * Retrieves cached merged listeners for an event, or creates them if not cached.
@@ -4838,7 +5388,7 @@ var TaskRunner = class {
4838
5388
  __name(this, "TaskRunner");
4839
5389
  }
4840
5390
  /**
4841
- * Begins the execution of an task. These are registered tasks and all sanity checks have been performed at this stage to ensure consistency of the object.
5391
+ * 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.
4842
5392
  * This function can throw only if any of the event listeners or run function throws
4843
5393
  * @param task the task to be run
4844
5394
  * @param input the input to be passed to the task
@@ -4867,8 +5417,6 @@ var TaskRunner = class {
4867
5417
  /**
4868
5418
  * Creates the function with the chain of middleware.
4869
5419
  * @param task
4870
- * @param input
4871
- * @param taskDependencies
4872
5420
  * @returns
4873
5421
  */
4874
5422
  createRunnerWithMiddleware(task2) {
@@ -4888,7 +5436,7 @@ var ResourceInitializer = class {
4888
5436
  __name(this, "ResourceInitializer");
4889
5437
  }
4890
5438
  /**
4891
- * Begins the execution of an task. These are registered tasks and all sanity checks have been performed at this stage to ensure consistency of the object.
5439
+ * 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.
4892
5440
  * This function can throw only if any of the event listeners or run function throws
4893
5441
  */
4894
5442
  async initializeResource(resource2, config, dependencies) {
@@ -5378,23 +5926,28 @@ var DependencyProcessor = class {
5378
5926
  middleware.computedDependencies = computedDependencies;
5379
5927
  middleware.isInitialized = true;
5380
5928
  }
5381
- for (const resource2 of this.store.resources.values()) {
5382
- await this.processResourceDependencies(resource2);
5383
- }
5384
- for (const task2 of this.store.tasks.values()) {
5385
- await this.computeTaskDependencies(task2);
5386
- }
5387
5929
  for (const hookStoreElement of this.store.hooks.values()) {
5388
5930
  const hook2 = hookStoreElement.hook;
5389
5931
  const deps = hook2.dependencies;
5932
+ hookStoreElement.dependencyState = "computing" /* Computing */;
5390
5933
  hookStoreElement.computedDependencies = await this.extractDependencies(
5391
5934
  deps,
5392
5935
  hook2.id
5393
5936
  );
5937
+ hookStoreElement.dependencyState = "ready" /* Ready */;
5938
+ }
5939
+ for (const resource2 of this.store.resources.values()) {
5940
+ await this.processResourceDependencies(resource2);
5941
+ }
5942
+ for (const task2 of this.store.tasks.values()) {
5943
+ await this.computeTaskDependencies(task2);
5394
5944
  }
5395
5945
  await this.initializeUninitializedResources();
5396
5946
  }
5397
5947
  async computeTaskDependencies(task2) {
5948
+ if (task2.isInitialized) {
5949
+ return;
5950
+ }
5398
5951
  const deps = task2.task.dependencies;
5399
5952
  task2.computedDependencies = await this.extractDependencies(
5400
5953
  deps,
@@ -5526,6 +6079,9 @@ var DependencyProcessor = class {
5526
6079
  if (receivedEvent.source === hook2.id) {
5527
6080
  return;
5528
6081
  }
6082
+ if (hookStoreElement.dependencyState !== "ready" /* Ready */) {
6083
+ return;
6084
+ }
5529
6085
  return this.eventManager.executeHookWithInterceptors(
5530
6086
  hook2,
5531
6087
  receivedEvent,
@@ -5642,7 +6198,7 @@ var DependencyProcessor = class {
5642
6198
  }
5643
6199
  const st = storeTask;
5644
6200
  if (!st.isInitialized) {
5645
- const dependencies = object.dependencies;
6201
+ const dependencies = st.task.dependencies;
5646
6202
  st.computedDependencies = await this.extractDependencies(
5647
6203
  dependencies,
5648
6204
  st.task.id
@@ -5668,14 +6224,19 @@ var DependencyProcessor = class {
5668
6224
  wrapped = this.wrapResourceDependencies(depMap, raw);
5669
6225
  sr.computedDependencies = wrapped;
5670
6226
  }
5671
- const { value, context } = await this.resourceInitializer.initializeResource(
5672
- resource2,
5673
- config,
5674
- wrapped
5675
- );
5676
- sr.context = context;
5677
- sr.value = value;
5678
- sr.isInitialized = true;
6227
+ try {
6228
+ const { value, context } = await this.resourceInitializer.initializeResource(
6229
+ resource2,
6230
+ config,
6231
+ wrapped
6232
+ );
6233
+ sr.context = context;
6234
+ sr.value = value;
6235
+ sr.isInitialized = true;
6236
+ this.store.recordResourceInitialized(resource2.id);
6237
+ } catch (error2) {
6238
+ this.rethrowResourceInitError(resource2.id, error2);
6239
+ }
5679
6240
  }
5680
6241
  return sr.value;
5681
6242
  }
@@ -5878,7 +6439,8 @@ var StoreRegistry = class {
5878
6439
  const hook2 = this.getFreshValue(item, this.hooks, "hook", overrideMode);
5879
6440
  this.hooks.set(hook2.id, {
5880
6441
  hook: hook2,
5881
- computedDependencies: {}
6442
+ computedDependencies: {},
6443
+ dependencyState: "pending" /* Pending */
5882
6444
  });
5883
6445
  }
5884
6446
  storeTaskMiddleware(item, storingMode = "normal") {
@@ -5933,7 +6495,10 @@ var StoreRegistry = class {
5933
6495
  return prepared;
5934
6496
  }
5935
6497
  computeRegistrationDeeply(element, config) {
5936
- const items = typeof element.register === "function" ? element.register(config) : element.register;
6498
+ let items = typeof element.register === "function" ? element.register(config) : element.register;
6499
+ if (!items) {
6500
+ items = [];
6501
+ }
5937
6502
  element.register = items;
5938
6503
  for (const item of items) {
5939
6504
  this.storeGenericItem(item);
@@ -6471,25 +7036,27 @@ var InterceptorRegistry = class {
6471
7036
  * Gets all global task interceptors
6472
7037
  */
6473
7038
  getGlobalTaskInterceptors() {
6474
- return this.taskInterceptors;
7039
+ return Object.freeze([...this.taskInterceptors]);
6475
7040
  }
6476
7041
  /**
6477
7042
  * Gets all global resource interceptors
6478
7043
  */
6479
7044
  getGlobalResourceInterceptors() {
6480
- return this.resourceInterceptors;
7045
+ return Object.freeze([...this.resourceInterceptors]);
6481
7046
  }
6482
7047
  /**
6483
7048
  * Gets interceptors for a specific task middleware
6484
7049
  */
6485
7050
  getTaskMiddlewareInterceptors(middlewareId) {
6486
- return this.perTaskMiddleware.get(middlewareId) || [];
7051
+ const interceptors = this.perTaskMiddleware.get(middlewareId) ?? [];
7052
+ return Object.freeze([...interceptors]);
6487
7053
  }
6488
7054
  /**
6489
7055
  * Gets interceptors for a specific resource middleware
6490
7056
  */
6491
7057
  getResourceMiddlewareInterceptors(middlewareId) {
6492
- return this.perResourceMiddleware.get(middlewareId) || [];
7058
+ const interceptors = this.perResourceMiddleware.get(middlewareId) ?? [];
7059
+ return Object.freeze([...interceptors]);
6493
7060
  }
6494
7061
  };
6495
7062
 
@@ -6968,10 +7535,8 @@ var ResourceMiddlewareComposer = class {
6968
7535
 
6969
7536
  // src/models/MiddlewareManager.ts
6970
7537
  var MiddlewareManager = class {
6971
- constructor(store2, eventManager, logger) {
7538
+ constructor(store2, _eventManager, _logger) {
6972
7539
  this.store = store2;
6973
- this.eventManager = eventManager;
6974
- this.logger = logger;
6975
7540
  this.interceptorRegistry = new InterceptorRegistry();
6976
7541
  this.middlewareResolver = new MiddlewareResolver(store2);
6977
7542
  this.taskComposer = new TaskMiddlewareComposer(
@@ -7012,14 +7577,6 @@ var MiddlewareManager = class {
7012
7577
  lock() {
7013
7578
  this.interceptorRegistry.lock();
7014
7579
  }
7015
- /**
7016
- * Adds an interceptor for task or resource middleware execution
7017
- * Interceptors are executed in the order they are added, with the ability to
7018
- * modify, log, or prevent middleware execution
7019
- *
7020
- * @param kind - The type of middleware to intercept ("task" or "resource")
7021
- * @param interceptor - The interceptor function to add
7022
- */
7023
7580
  intercept(kind, interceptor) {
7024
7581
  if (kind === "task") {
7025
7582
  this.interceptorRegistry.addGlobalTaskInterceptor(
@@ -7031,13 +7588,6 @@ var MiddlewareManager = class {
7031
7588
  );
7032
7589
  }
7033
7590
  }
7034
- /**
7035
- * Adds an interceptor for a specific middleware instance with better type safety
7036
- * This method automatically determines the type and provides type-safe access
7037
- *
7038
- * @param middleware - The middleware instance to intercept
7039
- * @param interceptor - The interceptor function with proper typing
7040
- */
7041
7591
  interceptMiddleware(middleware, interceptor) {
7042
7592
  if (isTaskMiddleware(middleware)) {
7043
7593
  this.interceptorRegistry.addTaskMiddlewareInterceptor(
@@ -7176,12 +7726,17 @@ var Store = class {
7176
7726
  }
7177
7727
  }
7178
7728
  registerGlobalComponents() {
7729
+ if (!this.taskRunner) {
7730
+ throw new Error(
7731
+ "TaskRunner is not set. Call store.setTaskRunner() before initializeStore()."
7732
+ );
7733
+ }
7179
7734
  const builtInResourcesMap = /* @__PURE__ */ new Map();
7180
7735
  builtInResourcesMap.set(globalResources.store, this);
7181
7736
  builtInResourcesMap.set(globalResources.eventManager, this.eventManager);
7182
7737
  builtInResourcesMap.set(globalResources.logger, this.logger);
7183
7738
  builtInResourcesMap.set(globalResources.taskRunner, this.taskRunner);
7184
- builtInResourcesMap.set(globalResources.serializer, getDefaultSerializer());
7739
+ builtInResourcesMap.set(globalResources.serializer, new Serializer());
7185
7740
  builtInResourcesMap.set(
7186
7741
  globalResources.middlewareManager,
7187
7742
  this.middlewareManager
@@ -7241,8 +7796,11 @@ var Store = class {
7241
7796
  setTaskRunner(taskRunner) {
7242
7797
  this.taskRunner = taskRunner;
7243
7798
  }
7244
- setupRootResource(root, config) {
7245
- root.dependencies = typeof root.dependencies === "function" ? root.dependencies(config) : root.dependencies;
7799
+ setupRootResource(rootDefinition, config) {
7800
+ const root = {
7801
+ ...rootDefinition,
7802
+ dependencies: typeof rootDefinition.dependencies === "function" ? rootDefinition.dependencies(config) : rootDefinition.dependencies
7803
+ };
7246
7804
  this.root = {
7247
7805
  resource: root,
7248
7806
  computedDependencies: {},
@@ -7795,6 +8353,18 @@ var RunResult = class {
7795
8353
  }
7796
8354
  return this.store.resources.get(resourceId).value;
7797
8355
  }, "getResourceValue");
8356
+ /**
8357
+ * Get the config of a resource from the run result.
8358
+ * @param resource - The resource to get the config of.
8359
+ * @returns The config passed for the resource.
8360
+ */
8361
+ this.getResourceConfig = /* @__PURE__ */ __name((resource2) => {
8362
+ const resourceId = typeof resource2 === "string" ? resource2 : resource2.id;
8363
+ if (!this.store.resources.has(resourceId)) {
8364
+ throw new Error(`Resource "${resourceId}" not found.`);
8365
+ }
8366
+ return this.store.resources.get(resourceId).config;
8367
+ }, "getResourceConfig");
7798
8368
  this.dispose = /* @__PURE__ */ __name(() => {
7799
8369
  return this.disposeFn();
7800
8370
  }, "dispose");
@@ -8975,7 +9545,7 @@ function makeAsyncContextBuilder(state) {
8975
9545
  configSchema: state.configSchema,
8976
9546
  meta: state.meta
8977
9547
  };
8978
- return defineAsyncContext(def);
9548
+ return defineAsyncContext(def, state.filePath);
8979
9549
  }
8980
9550
  };
8981
9551
  return builder;
@@ -8984,8 +9554,10 @@ __name(makeAsyncContextBuilder, "makeAsyncContextBuilder");
8984
9554
 
8985
9555
  // src/definers/builders/asyncContext/index.ts
8986
9556
  function asyncContextBuilder(id2) {
9557
+ const filePath = getCallerFile();
8987
9558
  const initial = Object.freeze({
8988
9559
  id: id2,
9560
+ filePath,
8989
9561
  serialize: void 0,
8990
9562
  parse: void 0,
8991
9563
  configSchema: void 0,
@@ -9458,7 +10030,7 @@ function override(base) {
9458
10030
  }
9459
10031
  __name(override, "override");
9460
10032
 
9461
- // src/index.ts
10033
+ // src/public.ts
9462
10034
  var globals = {
9463
10035
  events: globalEvents,
9464
10036
  resources: globalResources,
@@ -9483,6 +10055,6 @@ var r = Object.freeze({
9483
10055
  })
9484
10056
  });
9485
10057
 
9486
- export { DependencyProcessor, errors_exports as Errors, EventManager, Logger, MiddlewareManager, PlatformAdapter, Queue, ResourceInitializer, RunResult, Semaphore, Serializer, Store, TaskRunner, allFalse, defineAsyncContext as asyncContext, bindProcessErrorHandler, createContext2 as createContext, createDefaultUnhandledError, createExposureFetch, createHttpClient, createTestResource, debug, debugLevels, defs_exports as definitions, defineEvent as event, getConfig, getDefaultSerializer, globals, defineHook as hook, journal, levelNormal, levelVerbose, normalizeError, defineOverride as override, r, defineResource as resource, defineResourceMiddleware as resourceMiddleware, run, safeReportUnhandledError, setPlatform, defineTag as tag, defineTask as task, defineTaskMiddleware as taskMiddleware };
10058
+ export { DependencyProcessor, errors_exports as Errors, EventManager, LogPrinter, Logger, MiddlewareManager, PlatformAdapter, Queue, ResourceInitializer, RunResult, Semaphore, Serializer, Store, SymbolPolicy, SymbolPolicyErrorMessage, TaskRunner, allFalse, defineAsyncContext as asyncContext, bindProcessErrorHandler, createContext2 as createContext, createDefaultUnhandledError, createExposureFetch, createHttpClient, createTestResource, debug, debugLevels, defs_exports as definitions, defineEvent as event, getConfig, globals, defineHook as hook, journal, levelNormal, levelVerbose, normalizeError, defineOverride as override, r, defineResource as resource, defineResourceMiddleware as resourceMiddleware, run, safeReportUnhandledError, setPlatform, defineTag as tag, defineTask as task, defineTaskMiddleware as taskMiddleware };
9487
10059
  //# sourceMappingURL=index.mjs.map
9488
10060
  //# sourceMappingURL=index.mjs.map