footprintjs 9.41.0 → 9.42.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 (244) hide show
  1. package/AGENTS.md +7 -3
  2. package/CLAUDE.md +12 -11
  3. package/README.md +7 -3
  4. package/dist/advanced.js +4 -3
  5. package/dist/esm/advanced.d.ts +3 -1
  6. package/dist/esm/advanced.js +3 -2
  7. package/dist/esm/index.d.ts +2 -2
  8. package/dist/esm/index.js +1 -1
  9. package/dist/esm/lib/builder/FlowChartBuilder.d.ts +14 -4
  10. package/dist/esm/lib/builder/FlowChartBuilder.js +25 -7
  11. package/dist/esm/lib/builder/types.d.ts +2 -3
  12. package/dist/esm/lib/builder/types.js +1 -1
  13. package/dist/esm/lib/capture/freeze.d.ts +5 -5
  14. package/dist/esm/lib/capture/freeze.js +5 -4
  15. package/dist/esm/lib/contract/index.d.ts +5 -8
  16. package/dist/esm/lib/contract/index.js +5 -10
  17. package/dist/esm/lib/contract/types.d.ts +3 -81
  18. package/dist/esm/lib/contract/types.js +4 -5
  19. package/dist/esm/lib/decide/decide.js +13 -46
  20. package/dist/esm/lib/detach/drivers/batch.d.ts +9 -0
  21. package/dist/esm/lib/detach/drivers/batch.js +79 -0
  22. package/dist/esm/lib/detach/drivers/microtaskBatch.d.ts +17 -20
  23. package/dist/esm/lib/detach/drivers/microtaskBatch.js +20 -72
  24. package/dist/esm/lib/detach/drivers/setImmediate.js +10 -41
  25. package/dist/esm/lib/detach/drivers/setTimeout.js +3 -36
  26. package/dist/esm/lib/detach/types.d.ts +17 -20
  27. package/dist/esm/lib/detach/types.js +9 -11
  28. package/dist/esm/lib/engine/handlers/ChildrenExecutor.js +7 -3
  29. package/dist/esm/lib/engine/handlers/DeciderHandler.js +7 -5
  30. package/dist/esm/lib/engine/handlers/ParallelForEachHandler.d.ts +2 -3
  31. package/dist/esm/lib/engine/handlers/ParallelForEachHandler.js +12 -24
  32. package/dist/esm/lib/engine/handlers/SelectorHandler.d.ts +2 -4
  33. package/dist/esm/lib/engine/handlers/SelectorHandler.js +15 -7
  34. package/dist/esm/lib/engine/handlers/StageRunner.js +10 -22
  35. package/dist/esm/lib/engine/handlers/SubflowExecutor.js +19 -6
  36. package/dist/esm/lib/engine/handlers/breakFlag.d.ts +3 -0
  37. package/dist/esm/lib/engine/handlers/breakFlag.js +9 -0
  38. package/dist/esm/lib/engine/handlers/commitStage.js +3 -3
  39. package/dist/esm/lib/engine/handlers/stageError.d.ts +20 -0
  40. package/dist/esm/lib/engine/handlers/stageError.js +28 -0
  41. package/dist/esm/lib/engine/narrative/CombinedNarrativeRecorder.d.ts +6 -1
  42. package/dist/esm/lib/engine/narrative/CombinedNarrativeRecorder.js +40 -67
  43. package/dist/esm/lib/engine/narrative/FlowRecorderDispatcher.d.ts +3 -3
  44. package/dist/esm/lib/engine/narrative/FlowRecorderDispatcher.js +4 -8
  45. package/dist/esm/lib/engine/narrative/NarrativeFlowRecorder.d.ts +7 -1
  46. package/dist/esm/lib/engine/narrative/NarrativeFlowRecorder.js +28 -48
  47. package/dist/esm/lib/engine/narrative/formatting/resolveText.d.ts +6 -0
  48. package/dist/esm/lib/engine/narrative/formatting/resolveText.js +9 -0
  49. package/dist/esm/lib/engine/narrative/formatting/sentences.d.ts +16 -0
  50. package/dist/esm/lib/engine/narrative/formatting/sentences.js +50 -0
  51. package/dist/esm/lib/engine/narrative/narrativeTypes.d.ts +2 -0
  52. package/dist/esm/lib/engine/narrative/narrativeTypes.js +1 -1
  53. package/dist/esm/lib/engine/narrative/recorders/RLENarrativeFlowRecorder.js +3 -7
  54. package/dist/esm/lib/engine/narrative/recorders/SeparateNarrativeFlowRecorder.js +3 -7
  55. package/dist/esm/lib/engine/narrative/recorders/WindowedNarrativeFlowRecorder.d.ts +0 -1
  56. package/dist/esm/lib/engine/narrative/recorders/WindowedNarrativeFlowRecorder.js +5 -10
  57. package/dist/esm/lib/engine/narrative/types.d.ts +18 -8
  58. package/dist/esm/lib/engine/narrative/types.js +1 -1
  59. package/dist/esm/lib/engine/traversal/FlowchartTraverser.d.ts +6 -3
  60. package/dist/esm/lib/engine/traversal/FlowchartTraverser.js +50 -31
  61. package/dist/esm/lib/engine/types.d.ts +4 -0
  62. package/dist/esm/lib/engine/types.js +1 -1
  63. package/dist/esm/lib/memory/DiagnosticCollector.d.ts +11 -0
  64. package/dist/esm/lib/memory/DiagnosticCollector.js +51 -9
  65. package/dist/esm/lib/memory/EventLog.d.ts +9 -0
  66. package/dist/esm/lib/memory/EventLog.js +24 -1
  67. package/dist/esm/lib/memory/StageContext.d.ts +10 -1
  68. package/dist/esm/lib/memory/StageContext.js +18 -2
  69. package/dist/esm/lib/memory/eventPosition.d.ts +18 -0
  70. package/dist/esm/lib/memory/eventPosition.js +2 -0
  71. package/dist/esm/lib/memory/merge.d.ts +2 -1
  72. package/dist/esm/lib/memory/merge.js +15 -4
  73. package/dist/esm/lib/memory/redaction.d.ts +91 -11
  74. package/dist/esm/lib/memory/redaction.js +196 -17
  75. package/dist/esm/lib/observer-queue/deferredDispatcher.d.ts +2 -2
  76. package/dist/esm/lib/observer-queue/deferredDispatcher.js +3 -3
  77. package/dist/esm/lib/observer-queue/index.d.ts +7 -4
  78. package/dist/esm/lib/observer-queue/index.js +8 -5
  79. package/dist/esm/lib/reactive/createTypedScope.js +20 -21
  80. package/dist/esm/lib/reactive/index.d.ts +1 -1
  81. package/dist/esm/lib/reactive/index.js +2 -2
  82. package/dist/esm/lib/reactive/types.d.ts +0 -3
  83. package/dist/esm/lib/reactive/types.js +1 -23
  84. package/dist/esm/lib/recorder/EmitRecorder.d.ts +9 -0
  85. package/dist/esm/lib/recorder/EmitRecorder.js +1 -1
  86. package/dist/esm/lib/recorder/InOutRecorder.d.ts +5 -2
  87. package/dist/esm/lib/recorder/InOutRecorder.js +6 -3
  88. package/dist/esm/lib/runner/DeferredObserverTier.d.ts +4 -3
  89. package/dist/esm/lib/runner/DeferredObserverTier.js +5 -4
  90. package/dist/esm/lib/runner/ExecutionRuntime.d.ts +3 -0
  91. package/dist/esm/lib/runner/ExecutionRuntime.js +2 -1
  92. package/dist/esm/lib/runner/FlowChartExecutor.d.ts +11 -9
  93. package/dist/esm/lib/runner/FlowChartExecutor.js +12 -10
  94. package/dist/esm/lib/runner/attach.d.ts +3 -1
  95. package/dist/esm/lib/runner/attach.js +21 -31
  96. package/dist/esm/lib/scope/ScopeFacade.d.ts +13 -1
  97. package/dist/esm/lib/scope/ScopeFacade.js +60 -39
  98. package/dist/esm/lib/scope/protection/createProtectedScope.js +5 -2
  99. package/dist/esm/lib/scope/protection/readonlyInput.d.ts +16 -6
  100. package/dist/esm/lib/scope/protection/readonlyInput.js +72 -9
  101. package/dist/esm/lib/scope/providers/baseStateCompatible.d.ts +10 -24
  102. package/dist/esm/lib/scope/providers/baseStateCompatible.js +35 -35
  103. package/dist/esm/lib/scope/providers/providers.d.ts +2 -2
  104. package/dist/esm/lib/scope/providers/providers.js +3 -3
  105. package/dist/esm/lib/scope/providers/resolve.js +2 -2
  106. package/dist/esm/lib/scope/providers/types.d.ts +4 -2
  107. package/dist/esm/lib/scope/providers/types.js +1 -1
  108. package/dist/esm/lib/scope/recorders/MetricRecorder.d.ts +2 -3
  109. package/dist/esm/lib/scope/recorders/MetricRecorder.js +11 -14
  110. package/dist/esm/lib/scope/runtime.d.ts +48 -0
  111. package/dist/esm/lib/scope/runtime.js +60 -0
  112. package/dist/esm/lib/scope/state/zod/defineScopeFromZod.d.ts +2 -2
  113. package/dist/esm/lib/scope/state/zod/defineScopeFromZod.js +17 -6
  114. package/dist/esm/lib/scope/state/zod/resolver.js +3 -15
  115. package/dist/esm/lib/scope/state/zod/scopeFactory.d.ts +7 -3
  116. package/dist/esm/lib/scope/state/zod/scopeFactory.js +57 -22
  117. package/dist/esm/lib/scope/state/zod/utils/validateHelper.d.ts +27 -18
  118. package/dist/esm/lib/scope/state/zod/utils/validateHelper.js +66 -67
  119. package/dist/esm/recorders.d.ts +3 -0
  120. package/dist/esm/recorders.js +1 -1
  121. package/dist/index.js +1 -1
  122. package/dist/lib/builder/FlowChartBuilder.js +25 -7
  123. package/dist/lib/builder/types.js +1 -1
  124. package/dist/lib/capture/freeze.js +5 -4
  125. package/dist/lib/contract/index.js +6 -13
  126. package/dist/lib/contract/types.js +4 -5
  127. package/dist/lib/decide/decide.js +13 -46
  128. package/dist/lib/detach/drivers/batch.js +83 -0
  129. package/dist/lib/detach/drivers/microtaskBatch.js +20 -72
  130. package/dist/lib/detach/drivers/setImmediate.js +10 -41
  131. package/dist/lib/detach/drivers/setTimeout.js +3 -36
  132. package/dist/lib/detach/types.js +9 -11
  133. package/dist/lib/engine/handlers/ChildrenExecutor.js +7 -3
  134. package/dist/lib/engine/handlers/DeciderHandler.js +7 -5
  135. package/dist/lib/engine/handlers/ParallelForEachHandler.js +12 -24
  136. package/dist/lib/engine/handlers/SelectorHandler.js +15 -7
  137. package/dist/lib/engine/handlers/StageRunner.js +10 -22
  138. package/dist/lib/engine/handlers/SubflowExecutor.js +19 -6
  139. package/dist/lib/engine/handlers/breakFlag.js +13 -0
  140. package/dist/lib/engine/handlers/commitStage.js +2 -2
  141. package/dist/lib/engine/handlers/stageError.js +34 -0
  142. package/dist/lib/engine/narrative/CombinedNarrativeRecorder.js +40 -67
  143. package/dist/lib/engine/narrative/FlowRecorderDispatcher.js +4 -8
  144. package/dist/lib/engine/narrative/NarrativeFlowRecorder.js +28 -48
  145. package/dist/lib/engine/narrative/formatting/resolveText.js +13 -0
  146. package/dist/lib/engine/narrative/formatting/sentences.js +63 -0
  147. package/dist/lib/engine/narrative/narrativeTypes.js +1 -1
  148. package/dist/lib/engine/narrative/recorders/RLENarrativeFlowRecorder.js +3 -7
  149. package/dist/lib/engine/narrative/recorders/SeparateNarrativeFlowRecorder.js +3 -7
  150. package/dist/lib/engine/narrative/recorders/WindowedNarrativeFlowRecorder.js +5 -10
  151. package/dist/lib/engine/narrative/types.js +1 -1
  152. package/dist/lib/engine/traversal/FlowchartTraverser.js +50 -31
  153. package/dist/lib/engine/types.js +1 -1
  154. package/dist/lib/memory/DiagnosticCollector.js +51 -9
  155. package/dist/lib/memory/EventLog.js +24 -1
  156. package/dist/lib/memory/StageContext.js +18 -2
  157. package/dist/lib/memory/eventPosition.js +3 -0
  158. package/dist/lib/memory/merge.js +15 -4
  159. package/dist/lib/memory/redaction.js +196 -17
  160. package/dist/lib/observer-queue/deferredDispatcher.js +3 -3
  161. package/dist/lib/observer-queue/index.js +8 -5
  162. package/dist/lib/reactive/createTypedScope.js +19 -20
  163. package/dist/lib/reactive/index.js +2 -5
  164. package/dist/lib/reactive/types.js +2 -24
  165. package/dist/lib/recorder/EmitRecorder.js +1 -1
  166. package/dist/lib/recorder/InOutRecorder.js +6 -3
  167. package/dist/lib/runner/DeferredObserverTier.js +5 -4
  168. package/dist/lib/runner/ExecutionRuntime.js +2 -1
  169. package/dist/lib/runner/FlowChartExecutor.js +12 -10
  170. package/dist/lib/runner/attach.js +21 -31
  171. package/dist/lib/scope/ScopeFacade.js +60 -39
  172. package/dist/lib/scope/protection/createProtectedScope.js +5 -2
  173. package/dist/lib/scope/protection/readonlyInput.js +74 -10
  174. package/dist/lib/scope/providers/baseStateCompatible.js +37 -36
  175. package/dist/lib/scope/providers/providers.js +3 -3
  176. package/dist/lib/scope/providers/resolve.js +2 -2
  177. package/dist/lib/scope/providers/types.js +1 -1
  178. package/dist/lib/scope/recorders/MetricRecorder.js +11 -14
  179. package/dist/lib/scope/runtime.js +67 -0
  180. package/dist/lib/scope/state/zod/defineScopeFromZod.js +15 -4
  181. package/dist/lib/scope/state/zod/resolver.js +3 -15
  182. package/dist/lib/scope/state/zod/scopeFactory.js +58 -22
  183. package/dist/lib/scope/state/zod/utils/validateHelper.js +70 -68
  184. package/dist/recorders.js +1 -1
  185. package/dist/types/advanced.d.ts +3 -1
  186. package/dist/types/index.d.ts +2 -2
  187. package/dist/types/lib/builder/FlowChartBuilder.d.ts +14 -4
  188. package/dist/types/lib/builder/types.d.ts +2 -3
  189. package/dist/types/lib/capture/freeze.d.ts +5 -5
  190. package/dist/types/lib/contract/index.d.ts +5 -8
  191. package/dist/types/lib/contract/types.d.ts +3 -81
  192. package/dist/types/lib/detach/drivers/batch.d.ts +9 -0
  193. package/dist/types/lib/detach/drivers/microtaskBatch.d.ts +17 -20
  194. package/dist/types/lib/detach/types.d.ts +17 -20
  195. package/dist/types/lib/engine/handlers/ParallelForEachHandler.d.ts +2 -3
  196. package/dist/types/lib/engine/handlers/SelectorHandler.d.ts +2 -4
  197. package/dist/types/lib/engine/handlers/breakFlag.d.ts +3 -0
  198. package/dist/types/lib/engine/handlers/stageError.d.ts +20 -0
  199. package/dist/types/lib/engine/narrative/CombinedNarrativeRecorder.d.ts +6 -1
  200. package/dist/types/lib/engine/narrative/FlowRecorderDispatcher.d.ts +3 -3
  201. package/dist/types/lib/engine/narrative/NarrativeFlowRecorder.d.ts +7 -1
  202. package/dist/types/lib/engine/narrative/formatting/resolveText.d.ts +6 -0
  203. package/dist/types/lib/engine/narrative/formatting/sentences.d.ts +16 -0
  204. package/dist/types/lib/engine/narrative/narrativeTypes.d.ts +2 -0
  205. package/dist/types/lib/engine/narrative/recorders/WindowedNarrativeFlowRecorder.d.ts +0 -1
  206. package/dist/types/lib/engine/narrative/types.d.ts +18 -8
  207. package/dist/types/lib/engine/traversal/FlowchartTraverser.d.ts +6 -3
  208. package/dist/types/lib/engine/types.d.ts +4 -0
  209. package/dist/types/lib/memory/DiagnosticCollector.d.ts +11 -0
  210. package/dist/types/lib/memory/EventLog.d.ts +9 -0
  211. package/dist/types/lib/memory/StageContext.d.ts +10 -1
  212. package/dist/types/lib/memory/eventPosition.d.ts +18 -0
  213. package/dist/types/lib/memory/merge.d.ts +2 -1
  214. package/dist/types/lib/memory/redaction.d.ts +91 -11
  215. package/dist/types/lib/observer-queue/deferredDispatcher.d.ts +2 -2
  216. package/dist/types/lib/observer-queue/index.d.ts +7 -4
  217. package/dist/types/lib/reactive/index.d.ts +1 -1
  218. package/dist/types/lib/reactive/types.d.ts +0 -3
  219. package/dist/types/lib/recorder/EmitRecorder.d.ts +9 -0
  220. package/dist/types/lib/recorder/InOutRecorder.d.ts +5 -2
  221. package/dist/types/lib/runner/DeferredObserverTier.d.ts +4 -3
  222. package/dist/types/lib/runner/ExecutionRuntime.d.ts +3 -0
  223. package/dist/types/lib/runner/FlowChartExecutor.d.ts +11 -9
  224. package/dist/types/lib/runner/attach.d.ts +3 -1
  225. package/dist/types/lib/scope/ScopeFacade.d.ts +13 -1
  226. package/dist/types/lib/scope/protection/readonlyInput.d.ts +16 -6
  227. package/dist/types/lib/scope/providers/baseStateCompatible.d.ts +10 -24
  228. package/dist/types/lib/scope/providers/providers.d.ts +2 -2
  229. package/dist/types/lib/scope/providers/types.d.ts +4 -2
  230. package/dist/types/lib/scope/recorders/MetricRecorder.d.ts +2 -3
  231. package/dist/types/lib/scope/runtime.d.ts +48 -0
  232. package/dist/types/lib/scope/state/zod/defineScopeFromZod.d.ts +2 -2
  233. package/dist/types/lib/scope/state/zod/scopeFactory.d.ts +7 -3
  234. package/dist/types/lib/scope/state/zod/utils/validateHelper.d.ts +27 -18
  235. package/dist/types/recorders.d.ts +3 -0
  236. package/package.json +4 -3
  237. package/dist/esm/lib/contract/defineContract.d.ts +0 -18
  238. package/dist/esm/lib/contract/defineContract.js +0 -64
  239. package/dist/esm/lib/contract/openapi.d.ts +0 -18
  240. package/dist/esm/lib/contract/openapi.js +0 -98
  241. package/dist/lib/contract/defineContract.js +0 -68
  242. package/dist/lib/contract/openapi.js +0 -102
  243. package/dist/types/lib/contract/defineContract.d.ts +0 -18
  244. package/dist/types/lib/contract/openapi.d.ts +0 -18
@@ -4,16 +4,16 @@
4
4
  *
5
5
  * Provides:
6
6
  * - assertNotReadonly(): throws if a key belongs to the readonly input
7
- * - createFrozenArgs(): creates a cached, deeply frozen copy of input values
7
+ * - createFrozenArgs(): snapshots owned input containers without freezing the caller
8
+ * - snapshotRunInput(): the ONE snapshot a run leg takes, handed to every scope of it
8
9
  *
9
10
  * Used by both ScopeFacade (class-based scopes) and attachScopeMethods
10
- * (non-class scopes) to enforce input immutability from a single source.
11
- * The freeze itself is `capture/freeze.ts · deepFreeze` — the one walk args,
12
- * the fold base, the dev-mode snapshot and the commit log all use.
11
+ * (non-class scopes). This is an ownership boundary, not an in-place freezer:
12
+ * live capabilities and explicitly frozen wrappers are borrowed, never walked.
13
+ * Saved records still use `capture/freeze.ts · deepFreeze` unchanged.
13
14
  */
14
15
  Object.defineProperty(exports, "__esModule", { value: true });
15
- exports.createFrozenArgs = exports.assertNotReadonly = void 0;
16
- const freeze_js_1 = require("../../capture/freeze.js");
16
+ exports.snapshotRunInput = exports.createFrozenArgs = exports.assertNotReadonly = void 0;
17
17
  /**
18
18
  * Throws if `key` is an own property of `readOnlyValues`.
19
19
  * Safe against prototype pollution — uses `hasOwnProperty` on the specific object.
@@ -30,14 +30,78 @@ function assertNotReadonly(readOnlyValues, key, operation) {
30
30
  }
31
31
  exports.assertNotReadonly = assertNotReadonly;
32
32
  /**
33
- * Creates a deeply frozen shallow copy of readonly input values.
34
- * Returns a cached copy — call once at construction, reuse on every getArgs().
33
+ * Creates a frozen argument view, copying mutable ordinary records and arrays.
34
+ * Functions, opaque objects and already-frozen nested values remain borrowed —
35
+ * so over a {@link snapshotRunInput} snapshot (every container already frozen)
36
+ * a scope pays only O(root keys). Called once per scope at construction.
35
37
  */
36
38
  function createFrozenArgs(readOnlyValues) {
37
39
  if (!readOnlyValues || typeof readOnlyValues !== 'object') {
38
40
  return Object.freeze({});
39
41
  }
40
- return (0, freeze_js_1.deepFreeze)({ ...readOnlyValues });
42
+ const args = { ...readOnlyValues };
43
+ // Root spread semantics: a plain record of own enumerable string/symbol keys,
44
+ // even for array input. Seed before walking so root cycles close on the copy.
45
+ const copies = new WeakMap([[readOnlyValues, args]]);
46
+ copyProperties(args, args, copies);
47
+ return Object.freeze(args);
41
48
  }
42
49
  exports.createFrozenArgs = createFrozenArgs;
43
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVhZG9ubHlJbnB1dC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9saWIvc2NvcGUvcHJvdGVjdGlvbi9yZWFkb25seUlucHV0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQTs7Ozs7Ozs7Ozs7R0FXRzs7O0FBRUgsdURBQXFEO0FBRXJEOzs7R0FHRztBQUNILFNBQWdCLGlCQUFpQixDQUFDLGNBQXVCLEVBQUUsR0FBVyxFQUFFLFNBQTZCO0lBQ25HLElBQ0UsY0FBYztRQUNkLE9BQU8sY0FBYyxLQUFLLFFBQVE7UUFDbEMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLGNBQWMsRUFBRSxHQUFHLENBQUMsRUFDekQsQ0FBQztRQUNELElBQUksU0FBUyxLQUFLLFFBQVEsRUFBRSxDQUFDO1lBQzNCLE1BQU0sSUFBSSxLQUFLLENBQUMscUNBQXFDLEdBQUcsZ0NBQWdDLENBQUMsQ0FBQztRQUM1RixDQUFDO1FBQ0QsTUFBTSxJQUFJLEtBQUssQ0FBQyx1Q0FBdUMsR0FBRyx3Q0FBd0MsQ0FBQyxDQUFDO0lBQ3RHLENBQUM7QUFDSCxDQUFDO0FBWEQsOENBV0M7QUFFRDs7O0dBR0c7QUFDSCxTQUFnQixnQkFBZ0IsQ0FBQyxjQUF1QjtJQUN0RCxJQUFJLENBQUMsY0FBYyxJQUFJLE9BQU8sY0FBYyxLQUFLLFFBQVEsRUFBRSxDQUFDO1FBQzFELE9BQU8sTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUMzQixDQUFDO0lBQ0QsT0FBTyxJQUFBLHNCQUFVLEVBQUMsRUFBRSxHQUFJLGNBQTBDLEVBQUUsQ0FBQyxDQUFDO0FBQ3hFLENBQUM7QUFMRCw0Q0FLQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogcmVhZG9ubHlJbnB1dCDigJQgVXRpbGl0aWVzIGZvciByZWFkb25seSBpbnB1dCBlbmZvcmNlbWVudC5cbiAqXG4gKiBQcm92aWRlczpcbiAqIC0gYXNzZXJ0Tm90UmVhZG9ubHkoKTogdGhyb3dzIGlmIGEga2V5IGJlbG9uZ3MgdG8gdGhlIHJlYWRvbmx5IGlucHV0XG4gKiAtIGNyZWF0ZUZyb3plbkFyZ3MoKTogY3JlYXRlcyBhIGNhY2hlZCwgZGVlcGx5IGZyb3plbiBjb3B5IG9mIGlucHV0IHZhbHVlc1xuICpcbiAqIFVzZWQgYnkgYm90aCBTY29wZUZhY2FkZSAoY2xhc3MtYmFzZWQgc2NvcGVzKSBhbmQgYXR0YWNoU2NvcGVNZXRob2RzXG4gKiAobm9uLWNsYXNzIHNjb3BlcykgdG8gZW5mb3JjZSBpbnB1dCBpbW11dGFiaWxpdHkgZnJvbSBhIHNpbmdsZSBzb3VyY2UuXG4gKiBUaGUgZnJlZXplIGl0c2VsZiBpcyBgY2FwdHVyZS9mcmVlemUudHMgwrcgZGVlcEZyZWV6ZWAg4oCUIHRoZSBvbmUgd2FsayBhcmdzLFxuICogdGhlIGZvbGQgYmFzZSwgdGhlIGRldi1tb2RlIHNuYXBzaG90IGFuZCB0aGUgY29tbWl0IGxvZyBhbGwgdXNlLlxuICovXG5cbmltcG9ydCB7IGRlZXBGcmVlemUgfSBmcm9tICcuLi8uLi9jYXB0dXJlL2ZyZWV6ZS5qcyc7XG5cbi8qKlxuICogVGhyb3dzIGlmIGBrZXlgIGlzIGFuIG93biBwcm9wZXJ0eSBvZiBgcmVhZE9ubHlWYWx1ZXNgLlxuICogU2FmZSBhZ2FpbnN0IHByb3RvdHlwZSBwb2xsdXRpb24g4oCUIHVzZXMgYGhhc093blByb3BlcnR5YCBvbiB0aGUgc3BlY2lmaWMgb2JqZWN0LlxuICovXG5leHBvcnQgZnVuY3Rpb24gYXNzZXJ0Tm90UmVhZG9ubHkocmVhZE9ubHlWYWx1ZXM6IHVua25vd24sIGtleTogc3RyaW5nLCBvcGVyYXRpb246ICd3cml0ZScgfCAnZGVsZXRlJyk6IHZvaWQge1xuICBpZiAoXG4gICAgcmVhZE9ubHlWYWx1ZXMgJiZcbiAgICB0eXBlb2YgcmVhZE9ubHlWYWx1ZXMgPT09ICdvYmplY3QnICYmXG4gICAgT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHJlYWRPbmx5VmFsdWVzLCBrZXkpXG4gICkge1xuICAgIGlmIChvcGVyYXRpb24gPT09ICdkZWxldGUnKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYENhbm5vdCBkZWxldGUgcmVhZG9ubHkgaW5wdXQga2V5IFwiJHtrZXl9XCIg4oCUIGlucHV0IHZhbHVlcyBhcmUgaW1tdXRhYmxlYCk7XG4gICAgfVxuICAgIHRocm93IG5ldyBFcnJvcihgQ2Fubm90IHdyaXRlIHRvIHJlYWRvbmx5IGlucHV0IGtleSBcIiR7a2V5fVwiIOKAlCB1c2UgZ2V0QXJncygpIHRvIHJlYWQgaW5wdXQgdmFsdWVzYCk7XG4gIH1cbn1cblxuLyoqXG4gKiBDcmVhdGVzIGEgZGVlcGx5IGZyb3plbiBzaGFsbG93IGNvcHkgb2YgcmVhZG9ubHkgaW5wdXQgdmFsdWVzLlxuICogUmV0dXJucyBhIGNhY2hlZCBjb3B5IOKAlCBjYWxsIG9uY2UgYXQgY29uc3RydWN0aW9uLCByZXVzZSBvbiBldmVyeSBnZXRBcmdzKCkuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVGcm96ZW5BcmdzKHJlYWRPbmx5VmFsdWVzOiB1bmtub3duKTogUmVjb3JkPHN0cmluZywgdW5rbm93bj4ge1xuICBpZiAoIXJlYWRPbmx5VmFsdWVzIHx8IHR5cGVvZiByZWFkT25seVZhbHVlcyAhPT0gJ29iamVjdCcpIHtcbiAgICByZXR1cm4gT2JqZWN0LmZyZWV6ZSh7fSk7XG4gIH1cbiAgcmV0dXJuIGRlZXBGcmVlemUoeyAuLi4ocmVhZE9ubHlWYWx1ZXMgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4pIH0pO1xufVxuIl19
50
+ /** One memoized traversal: copy each owned container once, then freeze only it. */
51
+ function snapshotValue(value, copies) {
52
+ if (value === null || typeof value !== 'object')
53
+ return value;
54
+ const existing = copies.get(value);
55
+ if (existing)
56
+ return existing;
57
+ if (Object.isFrozen(value))
58
+ return value;
59
+ const prototype = Object.getPrototypeOf(value);
60
+ const isArray = Array.isArray(value);
61
+ if (prototype !== null && prototype !== (isArray ? Array.prototype : Object.prototype))
62
+ return value;
63
+ const copy = isArray ? Object.setPrototypeOf(new Array(value.length), prototype) : Object.create(prototype);
64
+ copies.set(value, copy);
65
+ copyProperties(value, copy, copies);
66
+ return Object.freeze(copy);
67
+ }
68
+ /** Materialize accessors once; define data keys safely, including __proto__. */
69
+ function copyProperties(source, target, copies) {
70
+ for (const key of Reflect.ownKeys(source)) {
71
+ const descriptor = Object.getOwnPropertyDescriptor(source, key);
72
+ if (!descriptor)
73
+ continue;
74
+ // An array already owns its non-configurable length; holes remain holes.
75
+ if (Array.isArray(target) && key === 'length')
76
+ continue;
77
+ const value = snapshotValue(Reflect.get(source, key), copies);
78
+ Object.defineProperty(target, key, {
79
+ value,
80
+ enumerable: descriptor.enumerable,
81
+ configurable: true,
82
+ writable: true,
83
+ });
84
+ }
85
+ }
86
+ /**
87
+ * The ONE owned, frozen input snapshot of a run leg — taken once per `run()` /
88
+ * `resume()` traverser (and per subflow mount, whose mapped input is its own)
89
+ * and handed to every scope factory of that leg. A caller edit to the input
90
+ * after the leg starts reaches no scope of it. Non-object input passes through.
91
+ */
92
+ function snapshotRunInput(input) {
93
+ if (input === null || typeof input !== 'object')
94
+ return input;
95
+ // The snapshot root keeps ALL the input's own keys (non-enumerable ones
96
+ // included), so the readonly-key check over it refuses exactly what it
97
+ // refused over the input. A borrowed root (opaque or caller-frozen) is not
98
+ // copied by the walk, so its keys are copied onto a plain frozen record here.
99
+ const owned = snapshotValue(input, new WeakMap());
100
+ if (owned !== input)
101
+ return owned;
102
+ const root = {};
103
+ copyProperties(input, root, new WeakMap([[input, root]]));
104
+ return Object.freeze(root);
105
+ }
106
+ exports.snapshotRunInput = snapshotRunInput;
107
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVhZG9ubHlJbnB1dC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9saWIvc2NvcGUvcHJvdGVjdGlvbi9yZWFkb25seUlucHV0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQTs7Ozs7Ozs7Ozs7O0dBWUc7OztBQUVIOzs7R0FHRztBQUNILFNBQWdCLGlCQUFpQixDQUFDLGNBQXVCLEVBQUUsR0FBVyxFQUFFLFNBQTZCO0lBQ25HLElBQ0UsY0FBYztRQUNkLE9BQU8sY0FBYyxLQUFLLFFBQVE7UUFDbEMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLGNBQWMsRUFBRSxHQUFHLENBQUMsRUFDekQsQ0FBQztRQUNELElBQUksU0FBUyxLQUFLLFFBQVEsRUFBRSxDQUFDO1lBQzNCLE1BQU0sSUFBSSxLQUFLLENBQUMscUNBQXFDLEdBQUcsZ0NBQWdDLENBQUMsQ0FBQztRQUM1RixDQUFDO1FBQ0QsTUFBTSxJQUFJLEtBQUssQ0FBQyx1Q0FBdUMsR0FBRyx3Q0FBd0MsQ0FBQyxDQUFDO0lBQ3RHLENBQUM7QUFDSCxDQUFDO0FBWEQsOENBV0M7QUFFRDs7Ozs7R0FLRztBQUNILFNBQWdCLGdCQUFnQixDQUFDLGNBQXVCO0lBQ3RELElBQUksQ0FBQyxjQUFjLElBQUksT0FBTyxjQUFjLEtBQUssUUFBUSxFQUFFLENBQUM7UUFDMUQsT0FBTyxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQzNCLENBQUM7SUFDRCxNQUFNLElBQUksR0FBRyxFQUFFLEdBQUksY0FBMEMsRUFBRSxDQUFDO0lBQ2hFLDhFQUE4RTtJQUM5RSw4RUFBOEU7SUFDOUUsTUFBTSxNQUFNLEdBQUcsSUFBSSxPQUFPLENBQWlCLENBQUMsQ0FBQyxjQUFjLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3JFLGNBQWMsQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLE1BQU0sQ0FBQyxDQUFDO0lB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QUFFLElBQUksRUFBRSxJQUFJLE9BQU8sQ0FBaUIsQ0FBQyxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUMxRSxPQUFPLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDN0IsQ0FBQztBQVhELDRDQVdDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiByZWFkb25seUlucHV0IOKAlCBVdGlsaXRpZXMgZm9yIHJlYWRvbmx5IGlucHV0IGVuZm9yY2VtZW50LlxuICpcbiAqIFByb3ZpZGVzOlxuICogLSBhc3NlcnROb3RSZWFkb25seSgpOiB0aHJvd3MgaWYgYSBrZXkgYmVsb25ncyB0byB0aGUgcmVhZG9ubHkgaW5wdXRcbiAqIC0gY3JlYXRlRnJvemVuQXJncygpOiBzbmFwc2hvdHMgb3duZWQgaW5wdXQgY29udGFpbmVycyB3aXRob3V0IGZyZWV6aW5nIHRoZSBjYWxsZXJcbiAqIC0gc25hcHNob3RSdW5JbnB1dCgpOiB0aGUgT05FIHNuYXBzaG90IGEgcnVuIGxlZyB0YWtlcywgaGFuZGVkIHRvIGV2ZXJ5IHNjb3BlIG9mIGl0XG4gKlxuICogVXNlZCBieSBib3RoIFNjb3BlRmFjYWRlIChjbGFzcy1iYXNlZCBzY29wZXMpIGFuZCBhdHRhY2hTY29wZU1ldGhvZHNcbiAqIChub24tY2xhc3Mgc2NvcGVzKS4gVGhpcyBpcyBhbiBvd25lcnNoaXAgYm91bmRhcnksIG5vdCBhbiBpbi1wbGFjZSBmcmVlemVyOlxuICogbGl2ZSBjYXBhYmlsaXRpZXMgYW5kIGV4cGxpY2l0bHkgZnJvemVuIHdyYXBwZXJzIGFyZSBib3Jyb3dlZCwgbmV2ZXIgd2Fsa2VkLlxuICogU2F2ZWQgcmVjb3JkcyBzdGlsbCB1c2UgYGNhcHR1cmUvZnJlZXplLnRzIMK3IGRlZXBGcmVlemVgIHVuY2hhbmdlZC5cbiAqL1xuXG4vKipcbiAqIFRocm93cyBpZiBga2V5YCBpcyBhbiBvd24gcHJvcGVydHkgb2YgYHJlYWRPbmx5VmFsdWVzYC5cbiAqIFNhZmUgYWdhaW5zdCBwcm90b3R5cGUgcG9sbHV0aW9uIOKAlCB1c2VzIGBoYXNPd25Qcm9wZXJ0eWAgb24gdGhlIHNwZWNpZmljIG9iamVjdC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGFzc2VydE5vdFJlYWRvbmx5KHJlYWRPbmx5VmFsdWVzOiB1bmtub3duLCBrZXk6IHN0cmluZywgb3BlcmF0aW9uOiAnd3JpdGUnIHwgJ2RlbGV0ZScpOiB2b2lkIHtcbiAgaWYgKFxuICAgIHJlYWRPbmx5VmFsdWVzICYmXG4gICAgdHlwZW9mIHJlYWRPbmx5VmFsdWVzID09PSAnb2JqZWN0JyAmJlxuICAgIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChyZWFkT25seVZhbHVlcywga2V5KVxuICApIHtcbiAgICBpZiAob3BlcmF0aW9uID09PSAnZGVsZXRlJykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBDYW5ub3QgZGVsZXRlIHJlYWRvbmx5IGlucHV0IGtleSBcIiR7a2V5fVwiIOKAlCBpbnB1dCB2YWx1ZXMgYXJlIGltbXV0YWJsZWApO1xuICAgIH1cbiAgICB0aHJvdyBuZXcgRXJyb3IoYENhbm5vdCB3cml0ZSB0byByZWFkb25seSBpbnB1dCBrZXkgXCIke2tleX1cIiDigJQgdXNlIGdldEFyZ3MoKSB0byByZWFkIGlucHV0IHZhbHVlc2ApO1xuICB9XG59XG5cbi8qKlxuICogQ3JlYXRlcyBhIGZyb3plbiBhcmd1bWVudCB2aWV3LCBjb3B5aW5nIG11dGFibGUgb3JkaW5hcnkgcmVjb3JkcyBhbmQgYXJyYXlzLlxuICogRnVuY3Rpb25zLCBvcGFxdWUgb2JqZWN0cyBhbmQgYWxyZWFkeS1mcm96ZW4gbmVzdGVkIHZhbHVlcyByZW1haW4gYm9ycm93ZWQg4oCUXG4gKiBzbyBvdmVyIGEge0BsaW5rIHNuYXBzaG90UnVuSW5wdXR9IHNuYXBzaG90IChldmVyeSBjb250YWluZXIgYWxyZWFkeSBmcm96ZW4pXG4gKiBhIHNjb3BlIHBheXMgb25seSBPKHJvb3Qga2V5cykuIENhbGxlZCBvbmNlIHBlciBzY29wZSBhdCBjb25zdHJ1Y3Rpb24uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVGcm96ZW5BcmdzKHJlYWRPbmx5VmFsdWVzOiB1bmtub3duKTogUmVjb3JkPHN0cmluZywgdW5rbm93bj4ge1xuICBpZiAoIXJlYWRPbmx5VmFsdWVzIHx8IHR5cGVvZiByZWFkT25seVZhbHVlcyAhPT0gJ29iamVjdCcpIHtcbiAgICByZXR1cm4gT2JqZWN0LmZyZWV6ZSh7fSk7XG4gIH1cbiAgY29uc3QgYXJncyA9IHsgLi4uKHJlYWRPbmx5VmFsdWVzIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+KSB9O1xuICAvLyBSb290IHNwcmVhZCBzZW1hbnRpY3M6IGEgcGxhaW4gcmVjb3JkIG9mIG93biBlbnVtZXJhYmxlIHN0cmluZy9zeW1ib2wga2V5cyxcbiAgLy8gZXZlbiBmb3IgYXJyYXkgaW5wdXQuIFNlZWQgYmVmb3JlIHdhbGtpbmcgc28gcm9vdCBjeWNsZXMgY2xvc2Ugb24gdGhlIGNvcHkuXG4gIGNvbnN0IGNvcGllcyA9IG5ldyBXZWFrTWFwPG9iamVjdCwgb2JqZWN0PihbW3JlYWRPbmx5VmFsdWVzLCBhcmdzXV0pO1xuICBjb3B5UHJvcGVydGllcyhhcmdzLCBhcmdzLCBjb3BpZXMpO1xuICByZXR1cm4gT2JqZWN0LmZyZWV6ZShhcmdzKTtcbn1cblxuLyoqIE9uZSBtZW1vaXplZCB0cmF2ZXJzYWw6IGNvcHkgZWFjaCBvd25lZCBjb250YWluZXIgb25jZSwgdGhlbiBmcmVlemUgb25seSBpdC4gKi9cbmZ1bmN0aW9uIHNuYXBzaG90VmFsdWUodmFsdWU6IHVua25vd24sIGNvcGllczogV2Vha01hcDxvYmplY3QsIG9iamVjdD4pOiB1bmtub3duIHtcbiAgaWYgKHZhbHVlID09PSBudWxsIHx8IHR5cGVvZiB2YWx1ZSAhPT0gJ29iamVjdCcpIHJldHVybiB2YWx1ZTtcbiAgY29uc3QgZXhpc3RpbmcgPSBjb3BpZXMuZ2V0KHZhbHVlKTtcbiAgaWYgKGV4aXN0aW5nKSByZXR1cm4gZXhpc3Rpbmc7XG4gIGlmIChPYmplY3QuaXNGcm96ZW4odmFsdWUpKSByZXR1cm4gdmFsdWU7XG5cbiAgY29uc3QgcHJvdG90eXBlID0gT2JqZWN0LmdldFByb3RvdHlwZU9mKHZhbHVlKTtcbiAgY29uc3QgaXNBcnJheSA9IEFycmF5LmlzQXJyYXkodmFsdWUpO1xuICBpZiAocHJvdG90eXBlICE9PSBudWxsICYmIHByb3RvdHlwZSAhPT0gKGlzQXJyYXkgPyBBcnJheS5wcm90b3R5cGUgOiBPYmplY3QucHJvdG90eXBlKSkgcmV0dXJuIHZhbHVlO1xuXG4gIGNvbnN0IGNvcHk6IG9iamVjdCA9IGlzQXJyYXkgPyBPYmplY3Quc2V0UHJvdG90eXBlT2YobmV3IEFycmF5KHZhbHVlLmxlbmd0aCksIHByb3RvdHlwZSkgOiBPYmplY3QuY3JlYXRlKHByb3RvdHlwZSk7XG4gIGNvcGllcy5zZXQodmFsdWUsIGNvcHkpO1xuICBjb3B5UHJvcGVydGllcyh2YWx1ZSwgY29weSwgY29waWVzKTtcbiAgcmV0dXJuIE9iamVjdC5mcmVlemUoY29weSk7XG59XG5cbi8qKiBNYXRlcmlhbGl6ZSBhY2Nlc3NvcnMgb25jZTsgZGVmaW5lIGRhdGEga2V5cyBzYWZlbHksIGluY2x1ZGluZyBfX3Byb3RvX18uICovXG5mdW5jdGlvbiBjb3B5UHJvcGVydGllcyhzb3VyY2U6IG9iamVjdCwgdGFyZ2V0OiBvYmplY3QsIGNvcGllczogV2Vha01hcDxvYmplY3QsIG9iamVjdD4pOiB2b2lkIHtcbiAgZm9yIChjb25zdCBrZXkgb2YgUmVmbGVjdC5vd25LZXlzKHNvdXJjZSkpIHtcbiAgICBjb25zdCBkZXNjcmlwdG9yID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihzb3VyY2UsIGtleSk7XG4gICAgaWYgKCFkZXNjcmlwdG9yKSBjb250aW51ZTtcbiAgICAvLyBBbiBhcnJheSBhbHJlYWR5IG93bnMgaXRzIG5vbi1jb25maWd1cmFibGUgbGVuZ3RoOyBob2xlcyByZW1haW4gaG9sZXMuXG4gICAgaWYgKEFycmF5LmlzQXJyYXkodGFyZ2V0KSAmJiBrZXkgPT09ICdsZW5ndGgnKSBjb250aW51ZTtcbiAgICBjb25zdCB2YWx1ZSA9IHNuYXBzaG90VmFsdWUoUmVmbGVjdC5nZXQoc291cmNlLCBrZXkpLCBjb3BpZXMpO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwge1xuICAgICAgdmFsdWUsXG4gICAgICBlbnVtZXJhYmxlOiBkZXNjcmlwdG9yLmVudW1lcmFibGUsXG4gICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICB3cml0YWJsZTogdHJ1ZSxcbiAgICB9KTtcbiAgfVxufVxuXG4vKipcbiAqIFRoZSBPTkUgb3duZWQsIGZyb3plbiBpbnB1dCBzbmFwc2hvdCBvZiBhIHJ1biBsZWcg4oCUIHRha2VuIG9uY2UgcGVyIGBydW4oKWAgL1xuICogYHJlc3VtZSgpYCB0cmF2ZXJzZXIgKGFuZCBwZXIgc3ViZmxvdyBtb3VudCwgd2hvc2UgbWFwcGVkIGlucHV0IGlzIGl0cyBvd24pXG4gKiBhbmQgaGFuZGVkIHRvIGV2ZXJ5IHNjb3BlIGZhY3Rvcnkgb2YgdGhhdCBsZWcuIEEgY2FsbGVyIGVkaXQgdG8gdGhlIGlucHV0XG4gKiBhZnRlciB0aGUgbGVnIHN0YXJ0cyByZWFjaGVzIG5vIHNjb3BlIG9mIGl0LiBOb24tb2JqZWN0IGlucHV0IHBhc3NlcyB0aHJvdWdoLlxuICovXG5leHBvcnQgZnVuY3Rpb24gc25hcHNob3RSdW5JbnB1dChpbnB1dDogdW5rbm93bik6IHVua25vd24ge1xuICBpZiAoaW5wdXQgPT09IG51bGwgfHwgdHlwZW9mIGlucHV0ICE9PSAnb2JqZWN0JykgcmV0dXJuIGlucHV0O1xuICAvLyBUaGUgc25hcHNob3Qgcm9vdCBrZWVwcyBBTEwgdGhlIGlucHV0J3Mgb3duIGtleXMgKG5vbi1lbnVtZXJhYmxlIG9uZXNcbiAgLy8gaW5jbHVkZWQpLCBzbyB0aGUgcmVhZG9ubHkta2V5IGNoZWNrIG92ZXIgaXQgcmVmdXNlcyBleGFjdGx5IHdoYXQgaXRcbiAgLy8gcmVmdXNlZCBvdmVyIHRoZSBpbnB1dC4gQSBib3Jyb3dlZCByb290IChvcGFxdWUgb3IgY2FsbGVyLWZyb3plbikgaXMgbm90XG4gIC8vIGNvcGllZCBieSB0aGUgd2Fsaywgc28gaXRzIGtleXMgYXJlIGNvcGllZCBvbnRvIGEgcGxhaW4gZnJvemVuIHJlY29yZCBoZXJlLlxuICBjb25zdCBvd25lZCA9IHNuYXBzaG90VmFsdWUoaW5wdXQsIG5ldyBXZWFrTWFwKCkpO1xuICBpZiAob3duZWQgIT09IGlucHV0KSByZXR1cm4gb3duZWQ7XG4gIGNvbnN0IHJvb3QgPSB7fTtcbiAgY29weVByb3BlcnRpZXMoaW5wdXQsIHJvb3QsIG5ldyBXZWFrTWFwPG9iamVjdCwgb2JqZWN0PihbW2lucHV0LCByb290XV0pKTtcbiAgcmV0dXJuIE9iamVjdC5mcmVlemUocm9vdCk7XG59XG4iXX0=
@@ -1,40 +1,41 @@
1
1
  "use strict";
2
- /**
3
- * attachScopeMethods — Attach ScopeFacade-compatible methods onto any target object.
4
- *
5
- * Gives non-class scopes (like Zod-generated proxies) the same convenience
6
- * methods as ScopeFacade subclasses: getValue, setValue, addDebugInfo, etc.
7
- *
8
- * API matches ScopeFacade's simplified signatures (no path arrays).
9
- */
10
2
  Object.defineProperty(exports, "__esModule", { value: true });
11
- exports.attachScopeMethods = void 0;
12
- const readonlyInput_js_1 = require("../protection/readonlyInput.js");
13
- /** Attach ScopeFacade-compatible methods onto any target (e.g., a proxy scope). */
14
- function attachScopeMethods(target, ctx, stageName, readOnly) {
15
- // Cache frozen args once — reused on every getArgs() call
16
- const frozenArgs = (0, readonlyInput_js_1.createFrozenArgs)(readOnly);
17
- const methods = {
18
- addDebugInfo: (k, v) => ctx.addLog?.(k, v),
19
- addDebugMessage: (v) => ctx.addLog?.('messages', [v]),
20
- addErrorInfo: (k, v) => ctx.addError?.(k, v),
21
- addMetric: (name, v) => ctx.addLog?.(`metric:${name}`, v),
22
- addEval: (name, v) => ctx.addLog?.(`eval:${name}`, v),
23
- getInitialValueFor: (k) => ctx.getGlobal?.(k),
24
- getValue: (key) => ctx.getValue([], key),
25
- setValue: (key, value, shouldRedact = false, description) => {
26
- (0, readonlyInput_js_1.assertNotReadonly)(readOnly, key, 'write');
27
- return ctx.setObject([], key, value, shouldRedact, description);
28
- },
29
- updateValue: (key, value, description) => {
30
- (0, readonlyInput_js_1.assertNotReadonly)(readOnly, key, 'write');
31
- return ctx.updateObject([], key, value, description);
32
- },
33
- setObjectInRoot: (key, value) => ctx.setRoot?.(key, value),
34
- getArgs: () => frozenArgs,
35
- getPipelineId: () => ctx.pipelineId ?? ctx.runId,
36
- };
37
- return Object.assign(target, methods);
3
+ exports.attachScopeMethods = exports.attachFacadeMethods = exports.SCOPE_CONVENIENCE_METHODS = void 0;
4
+ const runtime_js_1 = require("../runtime.js");
5
+ const ScopeFacade_js_1 = require("../ScopeFacade.js");
6
+ /** One inventory for method attachment and schema-name collision checks. */
7
+ exports.SCOPE_CONVENIENCE_METHODS = [
8
+ 'addDebugInfo',
9
+ 'addDebugMessage',
10
+ 'addErrorInfo',
11
+ 'addMetric',
12
+ 'addEval',
13
+ 'getInitialValueFor',
14
+ 'getValue',
15
+ 'setValue',
16
+ 'updateValue',
17
+ 'setObjectInRoot',
18
+ 'getArgs',
19
+ 'getEnv',
20
+ 'getPipelineId',
21
+ 'emitEvent',
22
+ ];
23
+ /** Bind to an EXISTING facade: an adapter must not install a second commit observer. */
24
+ function attachFacadeMethods(target, facade) {
25
+ for (const name of exports.SCOPE_CONVENIENCE_METHODS) {
26
+ Object.defineProperty(target, name, {
27
+ value: facade[name].bind(facade),
28
+ enumerable: true,
29
+ configurable: true,
30
+ writable: true,
31
+ });
32
+ }
33
+ return (0, runtime_js_1.registerScopeRuntime)(target, { target: facade, handlesAssignments: false });
34
+ }
35
+ exports.attachFacadeMethods = attachFacadeMethods;
36
+ /** Attach standard scope conveniences to an object backed by a real stage context. */
37
+ function attachScopeMethods(target, ctx, stageName, readOnly, executionEnv) {
38
+ return attachFacadeMethods(target, new ScopeFacade_js_1.ScopeFacade(ctx, stageName, readOnly, executionEnv));
38
39
  }
39
40
  exports.attachScopeMethods = attachScopeMethods;
40
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZVN0YXRlQ29tcGF0aWJsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9saWIvc2NvcGUvcHJvdmlkZXJzL2Jhc2VTdGF0ZUNvbXBhdGlibGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBOzs7Ozs7O0dBT0c7OztBQUVILHFFQUFxRjtBQUdyRixtRkFBbUY7QUFDbkYsU0FBZ0Isa0JBQWtCLENBQ2hDLE1BQVMsRUFDVCxHQUFxQixFQUNyQixTQUFpQixFQUNqQixRQUFrQjtJQWVsQiwwREFBMEQ7SUFDMUQsTUFBTSxVQUFVLEdBQUcsSUFBQSxtQ0FBZ0IsRUFBQyxRQUFRLENBQUMsQ0FBQztJQUU5QyxNQUFNLE9BQU8sR0FBRztRQUNkLFlBQVksRUFBRSxDQUFDLENBQVMsRUFBRSxDQUFVLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQzNELGVBQWUsRUFBRSxDQUFDLENBQVUsRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLE1BQU0sRUFBRSxDQUFDLFVBQVUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzlELFlBQVksRUFBRSxDQUFDLENBQVMsRUFBRSxDQUFVLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQzdELFNBQVMsRUFBRSxDQUFDLElBQVksRUFBRSxDQUFVLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxVQUFVLElBQUksRUFBRSxFQUFFLENBQUMsQ0FBQztRQUMxRSxPQUFPLEVBQUUsQ0FBQyxJQUFZLEVBQUUsQ0FBVSxFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUMsTUFBTSxFQUFFLENBQUMsUUFBUSxJQUFJLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFFdEUsa0JBQWtCLEVBQUUsQ0FBQyxDQUFTLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxTQUFTLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDckQsUUFBUSxFQUFFLENBQUMsR0FBWSxFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUM7UUFDakQsUUFBUSxFQUFFLENBQUMsR0FBVyxFQUFFLEtBQWMsRUFBRSxZQUFZLEdBQUcsS0FBSyxFQUFFLFdBQW9CLEVBQUUsRUFBRTtZQUNwRixJQUFBLG9DQUFpQixFQUFDLFFBQVEsRUFBRSxHQUFHLEVBQUUsT0FBTyxDQUFDLENBQUM7WUFDMUMsT0FBUSxHQUFXLENBQUMsU0FBUyxDQUFDLEVBQUUsRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFFLFlBQVksRUFBRSxXQUFXLENBQUMsQ0FBQztRQUMzRSxDQUFDO1FBQ0QsV0FBVyxFQUFFLENBQUMsR0FBVyxFQUFFLEtBQWMsRUFBRSxXQUFvQixFQUFFLEVBQUU7WUFDakUsSUFBQSxvQ0FBaUIsRUFBQyxRQUFRLEVBQUUsR0FBRyxFQUFFLE9BQU8sQ0FBQyxDQUFDO1lBQzFDLE9BQU8sR0FBRyxDQUFDLFlBQVksQ0FBQyxFQUFFLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRSxXQUFXLENBQUMsQ0FBQztRQUN2RCxDQUFDO1FBQ0QsZUFBZSxFQUFFLENBQUMsR0FBVyxFQUFFLEtBQWMsRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLE9BQU8sRUFBRSxDQUFDLEdBQUcsRUFBRSxLQUFLLENBQUM7UUFFM0UsT0FBTyxFQUFFLEdBQWdDLEVBQUUsQ0FBQyxVQUFlO1FBQzNELGFBQWEsRUFBRSxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUMsVUFBVSxJQUFJLEdBQUcsQ0FBQyxLQUFLO0tBQ2pELENBQUM7SUFFRixPQUFPLE1BQU0sQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFLE9BQU8sQ0FBQyxDQUFDO0FBQ3hDLENBQUM7QUE5Q0QsZ0RBOENDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBhdHRhY2hTY29wZU1ldGhvZHMg4oCUIEF0dGFjaCBTY29wZUZhY2FkZS1jb21wYXRpYmxlIG1ldGhvZHMgb250byBhbnkgdGFyZ2V0IG9iamVjdC5cbiAqXG4gKiBHaXZlcyBub24tY2xhc3Mgc2NvcGVzIChsaWtlIFpvZC1nZW5lcmF0ZWQgcHJveGllcykgdGhlIHNhbWUgY29udmVuaWVuY2VcbiAqIG1ldGhvZHMgYXMgU2NvcGVGYWNhZGUgc3ViY2xhc3NlczogZ2V0VmFsdWUsIHNldFZhbHVlLCBhZGREZWJ1Z0luZm8sIGV0Yy5cbiAqXG4gKiBBUEkgbWF0Y2hlcyBTY29wZUZhY2FkZSdzIHNpbXBsaWZpZWQgc2lnbmF0dXJlcyAobm8gcGF0aCBhcnJheXMpLlxuICovXG5cbmltcG9ydCB7IGFzc2VydE5vdFJlYWRvbmx5LCBjcmVhdGVGcm96ZW5BcmdzIH0gZnJvbSAnLi4vcHJvdGVjdGlvbi9yZWFkb25seUlucHV0LmpzJztcbmltcG9ydCB0eXBlIHsgU3RhZ2VDb250ZXh0TGlrZSB9IGZyb20gJy4vdHlwZXMuanMnO1xuXG4vKiogQXR0YWNoIFNjb3BlRmFjYWRlLWNvbXBhdGlibGUgbWV0aG9kcyBvbnRvIGFueSB0YXJnZXQgKGUuZy4sIGEgcHJveHkgc2NvcGUpLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGF0dGFjaFNjb3BlTWV0aG9kczxUIGV4dGVuZHMgb2JqZWN0PihcbiAgdGFyZ2V0OiBULFxuICBjdHg6IFN0YWdlQ29udGV4dExpa2UsXG4gIHN0YWdlTmFtZTogc3RyaW5nLFxuICByZWFkT25seT86IHVua25vd24sXG4pOiBUICYge1xuICBhZGREZWJ1Z0luZm8oazogc3RyaW5nLCB2OiB1bmtub3duKTogdm9pZDtcbiAgYWRkRGVidWdNZXNzYWdlKHY6IHVua25vd24pOiB2b2lkO1xuICBhZGRFcnJvckluZm8oazogc3RyaW5nLCB2OiB1bmtub3duKTogdm9pZDtcbiAgYWRkTWV0cmljKG5hbWU6IHN0cmluZywgdjogdW5rbm93bik6IHZvaWQ7XG4gIGFkZEV2YWwobmFtZTogc3RyaW5nLCB2OiB1bmtub3duKTogdm9pZDtcbiAgZ2V0SW5pdGlhbFZhbHVlRm9yKGs6IHN0cmluZyk6IHVua25vd247XG4gIGdldFZhbHVlKGtleT86IHN0cmluZyk6IHVua25vd247XG4gIHNldFZhbHVlKGtleTogc3RyaW5nLCB2YWx1ZTogdW5rbm93biwgc2hvdWxkUmVkYWN0PzogYm9vbGVhbiwgZGVzY3JpcHRpb24/OiBzdHJpbmcpOiB2b2lkO1xuICB1cGRhdGVWYWx1ZShrZXk6IHN0cmluZywgdmFsdWU6IHVua25vd24sIGRlc2NyaXB0aW9uPzogc3RyaW5nKTogdm9pZDtcbiAgc2V0T2JqZWN0SW5Sb290KGtleTogc3RyaW5nLCB2YWx1ZTogdW5rbm93bik6IHZvaWQ7XG4gIGdldEFyZ3M8VCA9IFJlY29yZDxzdHJpbmcsIHVua25vd24+PigpOiBUO1xuICBnZXRQaXBlbGluZUlkKCk6IHN0cmluZyB8IHVuZGVmaW5lZDtcbn0ge1xuICAvLyBDYWNoZSBmcm96ZW4gYXJncyBvbmNlIOKAlCByZXVzZWQgb24gZXZlcnkgZ2V0QXJncygpIGNhbGxcbiAgY29uc3QgZnJvemVuQXJncyA9IGNyZWF0ZUZyb3plbkFyZ3MocmVhZE9ubHkpO1xuXG4gIGNvbnN0IG1ldGhvZHMgPSB7XG4gICAgYWRkRGVidWdJbmZvOiAoazogc3RyaW5nLCB2OiB1bmtub3duKSA9PiBjdHguYWRkTG9nPy4oaywgdiksXG4gICAgYWRkRGVidWdNZXNzYWdlOiAodjogdW5rbm93bikgPT4gY3R4LmFkZExvZz8uKCdtZXNzYWdlcycsIFt2XSksXG4gICAgYWRkRXJyb3JJbmZvOiAoazogc3RyaW5nLCB2OiB1bmtub3duKSA9PiBjdHguYWRkRXJyb3I/LihrLCB2KSxcbiAgICBhZGRNZXRyaWM6IChuYW1lOiBzdHJpbmcsIHY6IHVua25vd24pID0+IGN0eC5hZGRMb2c/LihgbWV0cmljOiR7bmFtZX1gLCB2KSxcbiAgICBhZGRFdmFsOiAobmFtZTogc3RyaW5nLCB2OiB1bmtub3duKSA9PiBjdHguYWRkTG9nPy4oYGV2YWw6JHtuYW1lfWAsIHYpLFxuXG4gICAgZ2V0SW5pdGlhbFZhbHVlRm9yOiAoazogc3RyaW5nKSA9PiBjdHguZ2V0R2xvYmFsPy4oayksXG4gICAgZ2V0VmFsdWU6IChrZXk/OiBzdHJpbmcpID0+IGN0eC5nZXRWYWx1ZShbXSwga2V5KSxcbiAgICBzZXRWYWx1ZTogKGtleTogc3RyaW5nLCB2YWx1ZTogdW5rbm93biwgc2hvdWxkUmVkYWN0ID0gZmFsc2UsIGRlc2NyaXB0aW9uPzogc3RyaW5nKSA9PiB7XG4gICAgICBhc3NlcnROb3RSZWFkb25seShyZWFkT25seSwga2V5LCAnd3JpdGUnKTtcbiAgICAgIHJldHVybiAoY3R4IGFzIGFueSkuc2V0T2JqZWN0KFtdLCBrZXksIHZhbHVlLCBzaG91bGRSZWRhY3QsIGRlc2NyaXB0aW9uKTtcbiAgICB9LFxuICAgIHVwZGF0ZVZhbHVlOiAoa2V5OiBzdHJpbmcsIHZhbHVlOiB1bmtub3duLCBkZXNjcmlwdGlvbj86IHN0cmluZykgPT4ge1xuICAgICAgYXNzZXJ0Tm90UmVhZG9ubHkocmVhZE9ubHksIGtleSwgJ3dyaXRlJyk7XG4gICAgICByZXR1cm4gY3R4LnVwZGF0ZU9iamVjdChbXSwga2V5LCB2YWx1ZSwgZGVzY3JpcHRpb24pO1xuICAgIH0sXG4gICAgc2V0T2JqZWN0SW5Sb290OiAoa2V5OiBzdHJpbmcsIHZhbHVlOiB1bmtub3duKSA9PiBjdHguc2V0Um9vdD8uKGtleSwgdmFsdWUpLFxuXG4gICAgZ2V0QXJnczogPFUgPSBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPj4oKSA9PiBmcm96ZW5BcmdzIGFzIFUsXG4gICAgZ2V0UGlwZWxpbmVJZDogKCkgPT4gY3R4LnBpcGVsaW5lSWQgPz8gY3R4LnJ1bklkLFxuICB9O1xuXG4gIHJldHVybiBPYmplY3QuYXNzaWduKHRhcmdldCwgbWV0aG9kcyk7XG59XG4iXX0=
41
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZVN0YXRlQ29tcGF0aWJsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9saWIvc2NvcGUvcHJvdmlkZXJzL2Jhc2VTdGF0ZUNvbXBhdGlibGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBRUEsOENBQXFEO0FBQ3JELHNEQUFnRDtBQUVoRCw0RUFBNEU7QUFDL0QsUUFBQSx5QkFBeUIsR0FBRztJQUN2QyxjQUFjO0lBQ2QsaUJBQWlCO0lBQ2pCLGNBQWM7SUFDZCxXQUFXO0lBQ1gsU0FBUztJQUNULG9CQUFvQjtJQUNwQixVQUFVO0lBQ1YsVUFBVTtJQUNWLGFBQWE7SUFDYixpQkFBaUI7SUFDakIsU0FBUztJQUNULFFBQVE7SUFDUixlQUFlO0lBQ2YsV0FBVztDQUNzQyxDQUFDO0FBSXBELHdGQUF3RjtBQUN4RixTQUFnQixtQkFBbUIsQ0FBbUIsTUFBUyxFQUFFLE1BQW1CO0lBQ2xGLEtBQUssTUFBTSxJQUFJLElBQUksaUNBQXlCLEVBQUUsQ0FBQztRQUM3QyxNQUFNLENBQUMsY0FBYyxDQUFDLE1BQU0sRUFBRSxJQUFJLEVBQUU7WUFDbEMsS0FBSyxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDO1lBQ2hDLFVBQVUsRUFBRSxJQUFJO1lBQ2hCLFlBQVksRUFBRSxJQUFJO1lBQ2xCLFFBQVEsRUFBRSxJQUFJO1NBQ2YsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUNELE9BQU8sSUFBQSxpQ0FBb0IsRUFBQyxNQUFNLEVBQUUsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLGtCQUFrQixFQUFFLEtBQUssRUFBRSxDQUFnQyxDQUFDO0FBQ3BILENBQUM7QUFWRCxrREFVQztBQUVELHNGQUFzRjtBQUN0RixTQUFnQixrQkFBa0IsQ0FDaEMsTUFBUyxFQUNULEdBQWlCLEVBQ2pCLFNBQWlCLEVBQ2pCLFFBQWtCLEVBQ2xCLFlBQTJEO0lBRTNELE9BQU8sbUJBQW1CLENBQUMsTUFBTSxFQUFFLElBQUksNEJBQVcsQ0FBQyxHQUFHLEVBQUUsU0FBUyxFQUFFLFFBQVEsRUFBRSxZQUFZLENBQUMsQ0FBQyxDQUFDO0FBQzlGLENBQUM7QUFSRCxnREFRQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKiBUaGluIGNvbnZlbmllbmNlLW1ldGhvZCBhZGFwdGVyLiBTY29wZUZhY2FkZSBvd25zIGV2ZXJ5IHN0YXRlL2xpZmVjeWNsZSBydWxlLiAqL1xuaW1wb3J0IHR5cGUgeyBTdGFnZUNvbnRleHQgfSBmcm9tICcuLi8uLi9tZW1vcnkvU3RhZ2VDb250ZXh0LmpzJztcbmltcG9ydCB7IHJlZ2lzdGVyU2NvcGVSdW50aW1lIH0gZnJvbSAnLi4vcnVudGltZS5qcyc7XG5pbXBvcnQgeyBTY29wZUZhY2FkZSB9IGZyb20gJy4uL1Njb3BlRmFjYWRlLmpzJztcblxuLyoqIE9uZSBpbnZlbnRvcnkgZm9yIG1ldGhvZCBhdHRhY2htZW50IGFuZCBzY2hlbWEtbmFtZSBjb2xsaXNpb24gY2hlY2tzLiAqL1xuZXhwb3J0IGNvbnN0IFNDT1BFX0NPTlZFTklFTkNFX01FVEhPRFMgPSBbXG4gICdhZGREZWJ1Z0luZm8nLFxuICAnYWRkRGVidWdNZXNzYWdlJyxcbiAgJ2FkZEVycm9ySW5mbycsXG4gICdhZGRNZXRyaWMnLFxuICAnYWRkRXZhbCcsXG4gICdnZXRJbml0aWFsVmFsdWVGb3InLFxuICAnZ2V0VmFsdWUnLFxuICAnc2V0VmFsdWUnLFxuICAndXBkYXRlVmFsdWUnLFxuICAnc2V0T2JqZWN0SW5Sb290JyxcbiAgJ2dldEFyZ3MnLFxuICAnZ2V0RW52JyxcbiAgJ2dldFBpcGVsaW5lSWQnLFxuICAnZW1pdEV2ZW50Jyxcbl0gYXMgY29uc3Qgc2F0aXNmaWVzIHJlYWRvbmx5IChrZXlvZiBTY29wZUZhY2FkZSlbXTtcblxuZXhwb3J0IHR5cGUgU2NvcGVDb252ZW5pZW5jZU1ldGhvZHMgPSBQaWNrPFNjb3BlRmFjYWRlLCAodHlwZW9mIFNDT1BFX0NPTlZFTklFTkNFX01FVEhPRFMpW251bWJlcl0+O1xuXG4vKiogQmluZCB0byBhbiBFWElTVElORyBmYWNhZGU6IGFuIGFkYXB0ZXIgbXVzdCBub3QgaW5zdGFsbCBhIHNlY29uZCBjb21taXQgb2JzZXJ2ZXIuICovXG5leHBvcnQgZnVuY3Rpb24gYXR0YWNoRmFjYWRlTWV0aG9kczxUIGV4dGVuZHMgb2JqZWN0Pih0YXJnZXQ6IFQsIGZhY2FkZTogU2NvcGVGYWNhZGUpOiBUICYgU2NvcGVDb252ZW5pZW5jZU1ldGhvZHMge1xuICBmb3IgKGNvbnN0IG5hbWUgb2YgU0NPUEVfQ09OVkVOSUVOQ0VfTUVUSE9EUykge1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIG5hbWUsIHtcbiAgICAgIHZhbHVlOiBmYWNhZGVbbmFtZV0uYmluZChmYWNhZGUpLFxuICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgIHdyaXRhYmxlOiB0cnVlLFxuICAgIH0pO1xuICB9XG4gIHJldHVybiByZWdpc3RlclNjb3BlUnVudGltZSh0YXJnZXQsIHsgdGFyZ2V0OiBmYWNhZGUsIGhhbmRsZXNBc3NpZ25tZW50czogZmFsc2UgfSkgYXMgVCAmIFNjb3BlQ29udmVuaWVuY2VNZXRob2RzO1xufVxuXG4vKiogQXR0YWNoIHN0YW5kYXJkIHNjb3BlIGNvbnZlbmllbmNlcyB0byBhbiBvYmplY3QgYmFja2VkIGJ5IGEgcmVhbCBzdGFnZSBjb250ZXh0LiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGF0dGFjaFNjb3BlTWV0aG9kczxUIGV4dGVuZHMgb2JqZWN0PihcbiAgdGFyZ2V0OiBULFxuICBjdHg6IFN0YWdlQ29udGV4dCxcbiAgc3RhZ2VOYW1lOiBzdHJpbmcsXG4gIHJlYWRPbmx5PzogdW5rbm93bixcbiAgZXhlY3V0aW9uRW52PzogQ29uc3RydWN0b3JQYXJhbWV0ZXJzPHR5cGVvZiBTY29wZUZhY2FkZT5bM10sXG4pOiBUICYgU2NvcGVDb252ZW5pZW5jZU1ldGhvZHMge1xuICByZXR1cm4gYXR0YWNoRmFjYWRlTWV0aG9kcyh0YXJnZXQsIG5ldyBTY29wZUZhY2FkZShjdHgsIHN0YWdlTmFtZSwgcmVhZE9ubHksIGV4ZWN1dGlvbkVudikpO1xufVxuIl19
@@ -8,7 +8,7 @@ exports.makeClassProvider = exports.makeFactoryProvider = void 0;
8
8
  function makeFactoryProvider(factory) {
9
9
  return {
10
10
  kind: 'factory',
11
- create: (ctx, stageName, ro) => factory(ctx, stageName, ro),
11
+ create: (ctx, stageName, ro, env) => factory(ctx, stageName, ro, env),
12
12
  };
13
13
  }
14
14
  exports.makeFactoryProvider = makeFactoryProvider;
@@ -16,8 +16,8 @@ exports.makeFactoryProvider = makeFactoryProvider;
16
16
  function makeClassProvider(Ctor) {
17
17
  return {
18
18
  kind: 'class',
19
- create: (ctx, stageName, ro) => new Ctor(ctx, stageName, ro),
19
+ create: (ctx, stageName, ro, env) => new Ctor(ctx, stageName, ro, env),
20
20
  };
21
21
  }
22
22
  exports.makeClassProvider = makeClassProvider;
23
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvdmlkZXJzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2xpYi9zY29wZS9wcm92aWRlcnMvcHJvdmlkZXJzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQTs7R0FFRzs7O0FBSUgsMkRBQTJEO0FBQzNELFNBQWdCLG1CQUFtQixDQUFTLE9BQTZCO0lBQ3ZFLE9BQU87UUFDTCxJQUFJLEVBQUUsU0FBUztRQUNmLE1BQU0sRUFBRSxDQUFDLEdBQUcsRUFBRSxTQUFTLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxPQUFPLENBQUMsR0FBRyxFQUFFLFNBQVMsRUFBRSxFQUFFLENBQUM7S0FDNUQsQ0FBQztBQUNKLENBQUM7QUFMRCxrREFLQztBQUVELGtEQUFrRDtBQUNsRCxTQUFnQixpQkFBaUIsQ0FDL0IsSUFBa0Y7SUFFbEYsT0FBTztRQUNMLElBQUksRUFBRSxPQUFPO1FBQ2IsTUFBTSxFQUFFLENBQUMsR0FBRyxFQUFFLFNBQVMsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLElBQUksSUFBSSxDQUFDLEdBQUcsRUFBRSxTQUFTLEVBQUUsRUFBRSxDQUFDO0tBQzdELENBQUM7QUFDSixDQUFDO0FBUEQsOENBT0MiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFByb3ZpZGVyIEZhY3RvcmllcyDigJQgV3JhcCBmYWN0b3J5IGZ1bmN0aW9ucyBhbmQgY2xhc3MgY29uc3RydWN0b3JzIGFzIFNjb3BlUHJvdmlkZXJzXG4gKi9cblxuaW1wb3J0IHR5cGUgeyBTY29wZUZhY3RvcnksIFNjb3BlUHJvdmlkZXIsIFN0YWdlQ29udGV4dExpa2UgfSBmcm9tICcuL3R5cGVzLmpzJztcblxuLyoqIFdyYXAgYW4gZXhpc3RpbmcgZmFjdG9yeSBmdW5jdGlvbiBhcyBhIFNjb3BlUHJvdmlkZXIgKi9cbmV4cG9ydCBmdW5jdGlvbiBtYWtlRmFjdG9yeVByb3ZpZGVyPFRTY29wZT4oZmFjdG9yeTogU2NvcGVGYWN0b3J5PFRTY29wZT4pOiBTY29wZVByb3ZpZGVyPFRTY29wZT4ge1xuICByZXR1cm4ge1xuICAgIGtpbmQ6ICdmYWN0b3J5JyxcbiAgICBjcmVhdGU6IChjdHgsIHN0YWdlTmFtZSwgcm8pID0+IGZhY3RvcnkoY3R4LCBzdGFnZU5hbWUsIHJvKSxcbiAgfTtcbn1cblxuLyoqIFdyYXAgYSBjbGFzcyBjb25zdHJ1Y3RvciBhcyBhIFNjb3BlUHJvdmlkZXIgKi9cbmV4cG9ydCBmdW5jdGlvbiBtYWtlQ2xhc3NQcm92aWRlcjxUU2NvcGU+KFxuICBDdG9yOiBuZXcgKGN0eDogU3RhZ2VDb250ZXh0TGlrZSwgc3RhZ2VOYW1lOiBzdHJpbmcsIHJlYWRPbmx5PzogdW5rbm93bikgPT4gVFNjb3BlLFxuKTogU2NvcGVQcm92aWRlcjxUU2NvcGU+IHtcbiAgcmV0dXJuIHtcbiAgICBraW5kOiAnY2xhc3MnLFxuICAgIGNyZWF0ZTogKGN0eCwgc3RhZ2VOYW1lLCBybykgPT4gbmV3IEN0b3IoY3R4LCBzdGFnZU5hbWUsIHJvKSxcbiAgfTtcbn1cbiJdfQ==
23
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvdmlkZXJzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2xpYi9zY29wZS9wcm92aWRlcnMvcHJvdmlkZXJzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQTs7R0FFRzs7O0FBSUgsMkRBQTJEO0FBQzNELFNBQWdCLG1CQUFtQixDQUFTLE9BQTZCO0lBQ3ZFLE9BQU87UUFDTCxJQUFJLEVBQUUsU0FBUztRQUNmLE1BQU0sRUFBRSxDQUFDLEdBQUcsRUFBRSxTQUFTLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxFQUFFLENBQUMsT0FBTyxDQUFDLEdBQUcsRUFBRSxTQUFTLEVBQUUsRUFBRSxFQUFFLEdBQUcsQ0FBQztLQUN0RSxDQUFDO0FBQ0osQ0FBQztBQUxELGtEQUtDO0FBRUQsa0RBQWtEO0FBQ2xELFNBQWdCLGlCQUFpQixDQUMvQixJQUErRDtJQUUvRCxPQUFPO1FBQ0wsSUFBSSxFQUFFLE9BQU87UUFDYixNQUFNLEVBQUUsQ0FBQyxHQUFHLEVBQUUsU0FBUyxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsRUFBRSxDQUFDLElBQUksSUFBSSxDQUFDLEdBQUcsRUFBRSxTQUFTLEVBQUUsRUFBRSxFQUFFLEdBQUcsQ0FBQztLQUN2RSxDQUFDO0FBQ0osQ0FBQztBQVBELDhDQU9DIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBQcm92aWRlciBGYWN0b3JpZXMg4oCUIFdyYXAgZmFjdG9yeSBmdW5jdGlvbnMgYW5kIGNsYXNzIGNvbnN0cnVjdG9ycyBhcyBTY29wZVByb3ZpZGVyc1xuICovXG5cbmltcG9ydCB0eXBlIHsgU2NvcGVGYWN0b3J5LCBTY29wZVByb3ZpZGVyIH0gZnJvbSAnLi90eXBlcy5qcyc7XG5cbi8qKiBXcmFwIGFuIGV4aXN0aW5nIGZhY3RvcnkgZnVuY3Rpb24gYXMgYSBTY29wZVByb3ZpZGVyICovXG5leHBvcnQgZnVuY3Rpb24gbWFrZUZhY3RvcnlQcm92aWRlcjxUU2NvcGU+KGZhY3Rvcnk6IFNjb3BlRmFjdG9yeTxUU2NvcGU+KTogU2NvcGVQcm92aWRlcjxUU2NvcGU+IHtcbiAgcmV0dXJuIHtcbiAgICBraW5kOiAnZmFjdG9yeScsXG4gICAgY3JlYXRlOiAoY3R4LCBzdGFnZU5hbWUsIHJvLCBlbnYpID0+IGZhY3RvcnkoY3R4LCBzdGFnZU5hbWUsIHJvLCBlbnYpLFxuICB9O1xufVxuXG4vKiogV3JhcCBhIGNsYXNzIGNvbnN0cnVjdG9yIGFzIGEgU2NvcGVQcm92aWRlciAqL1xuZXhwb3J0IGZ1bmN0aW9uIG1ha2VDbGFzc1Byb3ZpZGVyPFRTY29wZT4oXG4gIEN0b3I6IG5ldyAoLi4uYXJnczogUGFyYW1ldGVyczxTY29wZUZhY3Rvcnk8VFNjb3BlPj4pID0+IFRTY29wZSxcbik6IFNjb3BlUHJvdmlkZXI8VFNjb3BlPiB7XG4gIHJldHVybiB7XG4gICAga2luZDogJ2NsYXNzJyxcbiAgICBjcmVhdGU6IChjdHgsIHN0YWdlTmFtZSwgcm8sIGVudikgPT4gbmV3IEN0b3IoY3R4LCBzdGFnZU5hbWUsIHJvLCBlbnYpLFxuICB9O1xufVxuIl19
@@ -8,9 +8,9 @@ const registry_js_1 = require("./registry.js");
8
8
  /** Normalize a factory/class/schema-like input into a ScopeFactory the pipeline expects */
9
9
  function toScopeFactory(input, options) {
10
10
  const provider = (0, registry_js_1.resolveScopeProvider)(input, options);
11
- return (ctx, stageName, ro) => provider.create(ctx, stageName, ro);
11
+ return (ctx, stageName, ro, env) => provider.create(ctx, stageName, ro, env);
12
12
  }
13
13
  exports.toScopeFactory = toScopeFactory;
14
14
  var registry_js_2 = require("./registry.js");
15
15
  Object.defineProperty(exports, "registerScopeResolver", { enumerable: true, get: function () { return registry_js_2.registerScopeResolver; } });
16
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVzb2x2ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9saWIvc2NvcGUvcHJvdmlkZXJzL3Jlc29sdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBOztHQUVHOzs7QUFFSCwrQ0FBcUQ7QUFHckQsMkZBQTJGO0FBQzNGLFNBQWdCLGNBQWMsQ0FBUyxLQUFjLEVBQUUsT0FBd0I7SUFDN0UsTUFBTSxRQUFRLEdBQTBCLElBQUEsa0NBQW9CLEVBQVMsS0FBSyxFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBQ3JGLE9BQU8sQ0FBQyxHQUFHLEVBQUUsU0FBUyxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxHQUFHLEVBQUUsU0FBUyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0FBQ3JFLENBQUM7QUFIRCx3Q0FHQztBQUVELDZDQUFzRDtBQUE3QyxvSEFBQSxxQkFBcUIsT0FBQSIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogcmVzb2x2ZS50cyDigJQgUHVibGljIEFQSSBmb3IgY29udmVydGluZyBzY29wZSBpbnB1dHMgdG8gU2NvcGVGYWN0b3J5XG4gKi9cblxuaW1wb3J0IHsgcmVzb2x2ZVNjb3BlUHJvdmlkZXIgfSBmcm9tICcuL3JlZ2lzdHJ5LmpzJztcbmltcG9ydCB0eXBlIHsgUmVzb2x2ZU9wdGlvbnMsIFNjb3BlRmFjdG9yeSwgU2NvcGVQcm92aWRlciB9IGZyb20gJy4vdHlwZXMuanMnO1xuXG4vKiogTm9ybWFsaXplIGEgZmFjdG9yeS9jbGFzcy9zY2hlbWEtbGlrZSBpbnB1dCBpbnRvIGEgU2NvcGVGYWN0b3J5IHRoZSBwaXBlbGluZSBleHBlY3RzICovXG5leHBvcnQgZnVuY3Rpb24gdG9TY29wZUZhY3Rvcnk8VFNjb3BlPihpbnB1dDogdW5rbm93biwgb3B0aW9ucz86IFJlc29sdmVPcHRpb25zKTogU2NvcGVGYWN0b3J5PFRTY29wZT4ge1xuICBjb25zdCBwcm92aWRlcjogU2NvcGVQcm92aWRlcjxUU2NvcGU+ID0gcmVzb2x2ZVNjb3BlUHJvdmlkZXI8VFNjb3BlPihpbnB1dCwgb3B0aW9ucyk7XG4gIHJldHVybiAoY3R4LCBzdGFnZU5hbWUsIHJvKSA9PiBwcm92aWRlci5jcmVhdGUoY3R4LCBzdGFnZU5hbWUsIHJvKTtcbn1cblxuZXhwb3J0IHsgcmVnaXN0ZXJTY29wZVJlc29sdmVyIH0gZnJvbSAnLi9yZWdpc3RyeS5qcyc7XG5leHBvcnQgdHlwZSB7IFJlc29sdmVPcHRpb25zLCBTY29wZVByb3ZpZGVyIH0gZnJvbSAnLi90eXBlcy5qcyc7XG4iXX0=
16
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVzb2x2ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9saWIvc2NvcGUvcHJvdmlkZXJzL3Jlc29sdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBOztHQUVHOzs7QUFFSCwrQ0FBcUQ7QUFHckQsMkZBQTJGO0FBQzNGLFNBQWdCLGNBQWMsQ0FBUyxLQUFjLEVBQUUsT0FBd0I7SUFDN0UsTUFBTSxRQUFRLEdBQTBCLElBQUEsa0NBQW9CLEVBQVMsS0FBSyxFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBQ3JGLE9BQU8sQ0FBQyxHQUFHLEVBQUUsU0FBUyxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsRUFBRSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsR0FBRyxFQUFFLFNBQVMsRUFBRSxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDL0UsQ0FBQztBQUhELHdDQUdDO0FBRUQsNkNBQXNEO0FBQTdDLG9IQUFBLHFCQUFxQixPQUFBIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiByZXNvbHZlLnRzIOKAlCBQdWJsaWMgQVBJIGZvciBjb252ZXJ0aW5nIHNjb3BlIGlucHV0cyB0byBTY29wZUZhY3RvcnlcbiAqL1xuXG5pbXBvcnQgeyByZXNvbHZlU2NvcGVQcm92aWRlciB9IGZyb20gJy4vcmVnaXN0cnkuanMnO1xuaW1wb3J0IHR5cGUgeyBSZXNvbHZlT3B0aW9ucywgU2NvcGVGYWN0b3J5LCBTY29wZVByb3ZpZGVyIH0gZnJvbSAnLi90eXBlcy5qcyc7XG5cbi8qKiBOb3JtYWxpemUgYSBmYWN0b3J5L2NsYXNzL3NjaGVtYS1saWtlIGlucHV0IGludG8gYSBTY29wZUZhY3RvcnkgdGhlIHBpcGVsaW5lIGV4cGVjdHMgKi9cbmV4cG9ydCBmdW5jdGlvbiB0b1Njb3BlRmFjdG9yeTxUU2NvcGU+KGlucHV0OiB1bmtub3duLCBvcHRpb25zPzogUmVzb2x2ZU9wdGlvbnMpOiBTY29wZUZhY3Rvcnk8VFNjb3BlPiB7XG4gIGNvbnN0IHByb3ZpZGVyOiBTY29wZVByb3ZpZGVyPFRTY29wZT4gPSByZXNvbHZlU2NvcGVQcm92aWRlcjxUU2NvcGU+KGlucHV0LCBvcHRpb25zKTtcbiAgcmV0dXJuIChjdHgsIHN0YWdlTmFtZSwgcm8sIGVudikgPT4gcHJvdmlkZXIuY3JlYXRlKGN0eCwgc3RhZ2VOYW1lLCBybywgZW52KTtcbn1cblxuZXhwb3J0IHsgcmVnaXN0ZXJTY29wZVJlc29sdmVyIH0gZnJvbSAnLi9yZWdpc3RyeS5qcyc7XG5leHBvcnQgdHlwZSB7IFJlc29sdmVPcHRpb25zLCBTY29wZVByb3ZpZGVyIH0gZnJvbSAnLi90eXBlcy5qcyc7XG4iXX0=
@@ -6,4 +6,4 @@
6
6
  * StageContextLike is the minimal surface from StageContext to avoid tight coupling.
7
7
  */
8
8
  Object.defineProperty(exports, "__esModule", { value: true });
9
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvbGliL3Njb3BlL3Byb3ZpZGVycy90eXBlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7Ozs7O0dBS0ciLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFByb3ZpZGVyIFN5c3RlbSBUeXBlc1xuICpcbiAqIERlZmluZXMgY29udHJhY3RzIGJldHdlZW4gdGhlIHJlZ2lzdHJ5LCByZXNvbHZlcnMsIGFuZCBwcm92aWRlcnMuXG4gKiBTdGFnZUNvbnRleHRMaWtlIGlzIHRoZSBtaW5pbWFsIHN1cmZhY2UgZnJvbSBTdGFnZUNvbnRleHQgdG8gYXZvaWQgdGlnaHQgY291cGxpbmcuXG4gKi9cblxuLyoqIE1pbmltYWwgc3VyZmFjZSBmcm9tIFN0YWdlQ29udGV4dCAocGF0Y2gtYmFzZWQpICovXG5leHBvcnQgaW50ZXJmYWNlIFN0YWdlQ29udGV4dExpa2Uge1xuICBnZXRWYWx1ZShwYXRoOiBzdHJpbmdbXSwga2V5Pzogc3RyaW5nKTogdW5rbm93bjtcbiAgc2V0T2JqZWN0KHBhdGg6IHN0cmluZ1tdLCBrZXk6IHN0cmluZywgdmFsdWU6IHVua25vd24sIHNob3VsZFJlZGFjdD86IGJvb2xlYW4sIGRlc2NyaXB0aW9uPzogc3RyaW5nKTogdm9pZDtcbiAgdXBkYXRlT2JqZWN0KHBhdGg6IHN0cmluZ1tdLCBrZXk6IHN0cmluZywgdmFsdWU6IHVua25vd24sIGRlc2NyaXB0aW9uPzogc3RyaW5nKTogdm9pZDtcblxuICBhZGRMb2c/KGtleTogc3RyaW5nLCB2YWw6IHVua25vd24pOiB2b2lkO1xuICBhZGRFcnJvcj8oa2V5OiBzdHJpbmcsIHZhbDogdW5rbm93bik6IHZvaWQ7XG5cbiAgZ2V0R2xvYmFsPyhrZXk6IHN0cmluZyk6IHVua25vd247XG4gIHNldFJvb3Q/KGtleTogc3RyaW5nLCB2YWx1ZTogdW5rbm93bik6IHZvaWQ7XG4gIHNldEdsb2JhbD8oa2V5OiBzdHJpbmcsIHZhbHVlOiB1bmtub3duLCBkZXNjcmlwdGlvbj86IHN0cmluZyk6IHZvaWQ7XG5cbiAgcGlwZWxpbmVJZD86IHN0cmluZztcbiAgcnVuSWQ/OiBzdHJpbmc7XG59XG5cbi8qKiBGYWN0b3J5IHR5cGUgdGhlIHBpcGVsaW5lIGV4cGVjdHMgKi9cbmV4cG9ydCB0eXBlIFNjb3BlRmFjdG9yeTxUU2NvcGU+ID0gKGN0eDogU3RhZ2VDb250ZXh0TGlrZSwgc3RhZ2VOYW1lOiBzdHJpbmcsIHJlYWRPbmx5PzogdW5rbm93bikgPT4gVFNjb3BlO1xuXG4vKiogU3RyYXRlZ3kgb2JqZWN0IHRoYXQgY3JlYXRlcyBhIHNjb3BlICovXG5leHBvcnQgaW50ZXJmYWNlIFNjb3BlUHJvdmlkZXI8VFNjb3BlPiB7XG4gIHJlYWRvbmx5IGtpbmQ6IHN0cmluZztcbiAgY3JlYXRlKGN0eDogU3RhZ2VDb250ZXh0TGlrZSwgc3RhZ2VOYW1lOiBzdHJpbmcsIHJlYWRPbmx5PzogdW5rbm93bik6IFRTY29wZTtcbn1cblxuLyoqIFJlc29sdmVyIHRoYXQgY2FuIHR1cm4gYW4gYXJiaXRyYXJ5IGlucHV0IGludG8gYSBTY29wZVByb3ZpZGVyICovXG5leHBvcnQgaW50ZXJmYWNlIFByb3ZpZGVyUmVzb2x2ZXI8VFNjb3BlID0gYW55PiB7XG4gIG5hbWU6IHN0cmluZztcbiAgY2FuSGFuZGxlKGlucHV0OiB1bmtub3duKTogYm9vbGVhbjtcbiAgbWFrZVByb3ZpZGVyKGlucHV0OiB1bmtub3duLCBvcHRpb25zPzogdW5rbm93bik6IFNjb3BlUHJvdmlkZXI8VFNjb3BlPjtcbn1cblxuLyoqIE9wdGlvbmFsIHN0cmljdG5lc3MgZm9yIHNjaGVtYS1iYWNrZWQgcHJvdmlkZXJzICovXG5leHBvcnQgdHlwZSBTdHJpY3RNb2RlID0gJ29mZicgfCAnd2FybicgfCAnZGVueSc7XG5cbi8qKiBPcHRpb25zIGJhZyBwYXNzZWQgdG8gcmVzb2x2ZSgpICovXG5leHBvcnQgdHlwZSBSZXNvbHZlT3B0aW9ucyA9IHtcbiAgem9kPzogeyBzdHJpY3Q/OiBTdHJpY3RNb2RlIH07XG59O1xuIl19
9
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvbGliL3Njb3BlL3Byb3ZpZGVycy90eXBlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7Ozs7O0dBS0ciLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFByb3ZpZGVyIFN5c3RlbSBUeXBlc1xuICpcbiAqIERlZmluZXMgY29udHJhY3RzIGJldHdlZW4gdGhlIHJlZ2lzdHJ5LCByZXNvbHZlcnMsIGFuZCBwcm92aWRlcnMuXG4gKiBTdGFnZUNvbnRleHRMaWtlIGlzIHRoZSBtaW5pbWFsIHN1cmZhY2UgZnJvbSBTdGFnZUNvbnRleHQgdG8gYXZvaWQgdGlnaHQgY291cGxpbmcuXG4gKi9cblxuaW1wb3J0IHR5cGUgeyBTdGFnZUNvbnRleHQgfSBmcm9tICcuLi8uLi9tZW1vcnkvU3RhZ2VDb250ZXh0LmpzJztcbmltcG9ydCB0eXBlIHsgU2NvcGVGYWNhZGUgfSBmcm9tICcuLi9TY29wZUZhY2FkZS5qcyc7XG5cbi8qKiBNaW5pbWFsIHN1cmZhY2UgZnJvbSBTdGFnZUNvbnRleHQgKHBhdGNoLWJhc2VkKSAqL1xuZXhwb3J0IGludGVyZmFjZSBTdGFnZUNvbnRleHRMaWtlIHtcbiAgZ2V0VmFsdWUocGF0aDogc3RyaW5nW10sIGtleT86IHN0cmluZyk6IHVua25vd247XG4gIHNldE9iamVjdChwYXRoOiBzdHJpbmdbXSwga2V5OiBzdHJpbmcsIHZhbHVlOiB1bmtub3duLCBzaG91bGRSZWRhY3Q/OiBib29sZWFuLCBkZXNjcmlwdGlvbj86IHN0cmluZyk6IHZvaWQ7XG4gIHVwZGF0ZU9iamVjdChwYXRoOiBzdHJpbmdbXSwga2V5OiBzdHJpbmcsIHZhbHVlOiB1bmtub3duLCBkZXNjcmlwdGlvbj86IHN0cmluZyk6IHZvaWQ7XG5cbiAgYWRkTG9nPyhrZXk6IHN0cmluZywgdmFsOiB1bmtub3duKTogdm9pZDtcbiAgYWRkRXJyb3I/KGtleTogc3RyaW5nLCB2YWw6IHVua25vd24pOiB2b2lkO1xuXG4gIGdldEdsb2JhbD8oa2V5OiBzdHJpbmcpOiB1bmtub3duO1xuICBzZXRSb290PyhrZXk6IHN0cmluZywgdmFsdWU6IHVua25vd24pOiB2b2lkO1xuICBzZXRHbG9iYWw/KGtleTogc3RyaW5nLCB2YWx1ZTogdW5rbm93biwgZGVzY3JpcHRpb24/OiBzdHJpbmcpOiB2b2lkO1xuXG4gIHBpcGVsaW5lSWQ/OiBzdHJpbmc7XG4gIHJ1bklkPzogc3RyaW5nO1xufVxuXG4vKiogRmFjdG9yeSB0eXBlIHRoZSBwaXBlbGluZSBleHBlY3RzICovXG5leHBvcnQgdHlwZSBTY29wZUZhY3Rvcnk8VFNjb3BlPiA9IChcbiAgY3R4OiBTdGFnZUNvbnRleHQsXG4gIHN0YWdlTmFtZTogc3RyaW5nLFxuICByZWFkT25seT86IHVua25vd24sXG4gIGV4ZWN1dGlvbkVudj86IENvbnN0cnVjdG9yUGFyYW1ldGVyczx0eXBlb2YgU2NvcGVGYWNhZGU+WzNdLFxuKSA9PiBUU2NvcGU7XG5cbi8qKiBTdHJhdGVneSBvYmplY3QgdGhhdCBjcmVhdGVzIGEgc2NvcGUgKi9cbmV4cG9ydCBpbnRlcmZhY2UgU2NvcGVQcm92aWRlcjxUU2NvcGU+IHtcbiAgcmVhZG9ubHkga2luZDogc3RyaW5nO1xuICBjcmVhdGUoLi4uYXJnczogUGFyYW1ldGVyczxTY29wZUZhY3Rvcnk8VFNjb3BlPj4pOiBUU2NvcGU7XG59XG5cbi8qKiBSZXNvbHZlciB0aGF0IGNhbiB0dXJuIGFuIGFyYml0cmFyeSBpbnB1dCBpbnRvIGEgU2NvcGVQcm92aWRlciAqL1xuZXhwb3J0IGludGVyZmFjZSBQcm92aWRlclJlc29sdmVyPFRTY29wZSA9IGFueT4ge1xuICBuYW1lOiBzdHJpbmc7XG4gIGNhbkhhbmRsZShpbnB1dDogdW5rbm93bik6IGJvb2xlYW47XG4gIG1ha2VQcm92aWRlcihpbnB1dDogdW5rbm93biwgb3B0aW9ucz86IHVua25vd24pOiBTY29wZVByb3ZpZGVyPFRTY29wZT47XG59XG5cbi8qKiBPcHRpb25hbCBzdHJpY3RuZXNzIGZvciBzY2hlbWEtYmFja2VkIHByb3ZpZGVycyAqL1xuZXhwb3J0IHR5cGUgU3RyaWN0TW9kZSA9ICdvZmYnIHwgJ3dhcm4nIHwgJ2RlbnknO1xuXG4vKiogT3B0aW9ucyBiYWcgcGFzc2VkIHRvIHJlc29sdmUoKSAqL1xuZXhwb3J0IHR5cGUgUmVzb2x2ZU9wdGlvbnMgPSB7XG4gIHpvZD86IHsgc3RyaWN0PzogU3RyaWN0TW9kZSB9O1xufTtcbiJdfQ==
@@ -33,7 +33,6 @@ class MetricRecorder {
33
33
  /** 1:1 per-step storage (Convention 1 — composed, not inherited). */
34
34
  store = new KeyedStore_js_1.KeyedStore();
35
35
  stageStartTimes = new Map();
36
- currentRuntimeStageId = '';
37
36
  stageFilter;
38
37
  constructor(idOrOptions) {
39
38
  if (typeof idOrOptions === 'string') {
@@ -49,12 +48,12 @@ class MetricRecorder {
49
48
  shouldRecord(stageName) {
50
49
  return !this.stageFilter || this.stageFilter(stageName);
51
50
  }
52
- /** Get or create the StepMetrics for the current stage. */
53
- current() {
54
- const key = this.currentRuntimeStageId;
51
+ /** Each event owns its attribution; another stage may have started meanwhile. */
52
+ forEvent(event) {
53
+ const key = event.runtimeStageId;
55
54
  let m = this.store.get(key);
56
55
  if (!m) {
57
- m = { stageName: '', readCount: 0, writeCount: 0, commitCount: 0, pauseCount: 0, duration: 0 };
56
+ m = { stageName: event.stageName, readCount: 0, writeCount: 0, commitCount: 0, pauseCount: 0, duration: 0 };
58
57
  this.store.set(key, m);
59
58
  }
60
59
  return m;
@@ -87,35 +86,34 @@ class MetricRecorder {
87
86
  onStageStart(event) {
88
87
  if (!this.shouldRecord(event.stageName))
89
88
  return;
90
- this.currentRuntimeStageId = event.runtimeStageId;
91
89
  this.stageStartTimes.set(event.runtimeStageId, event.timestamp);
92
- const m = this.current();
90
+ const m = this.forEvent(event);
93
91
  m.stageName = event.stageName;
94
92
  }
95
93
  onRead(event) {
96
94
  if (!this.shouldRecord(event.stageName))
97
95
  return;
98
- this.current().readCount++;
96
+ this.forEvent(event).readCount++;
99
97
  }
100
98
  onWrite(event) {
101
99
  if (!this.shouldRecord(event.stageName))
102
100
  return;
103
- this.current().writeCount++;
101
+ this.forEvent(event).writeCount++;
104
102
  }
105
103
  onCommit(event) {
106
104
  if (!this.shouldRecord(event.stageName))
107
105
  return;
108
- this.current().commitCount++;
106
+ this.forEvent(event).commitCount++;
109
107
  }
110
108
  onPause(event) {
111
109
  if (!this.shouldRecord(event.stageName))
112
110
  return;
113
- this.current().pauseCount++;
111
+ this.forEvent(event).pauseCount++;
114
112
  }
115
113
  onStageEnd(event) {
116
114
  if (!this.shouldRecord(event.stageName))
117
115
  return;
118
- const m = this.current();
116
+ const m = this.forEvent(event);
119
117
  if (event.duration !== undefined) {
120
118
  m.duration = event.duration;
121
119
  }
@@ -191,7 +189,6 @@ class MetricRecorder {
191
189
  clear() {
192
190
  this.store.clear();
193
191
  this.stageStartTimes.clear();
194
- this.currentRuntimeStageId = '';
195
192
  }
196
193
  /** Alias for clear() (backward compat). */
197
194
  reset() {
@@ -199,4 +196,4 @@ class MetricRecorder {
199
196
  }
200
197
  }
201
198
  exports.MetricRecorder = MetricRecorder;
202
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTWV0cmljUmVjb3JkZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvbGliL3Njb3BlL3JlY29yZGVycy9NZXRyaWNSZWNvcmRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBdUJHOzs7QUFFSCxnRUFBMEQ7QUFvRDFELE1BQWEsY0FBYztJQUNqQixNQUFNLENBQUMsUUFBUSxHQUFHLENBQUMsQ0FBQztJQUVuQixFQUFFLENBQVM7SUFDWCxrQkFBa0IsQ0FBb0I7SUFDL0MscUVBQXFFO0lBQ3BELEtBQUssR0FBRyxJQUFJLDBCQUFVLEVBQWUsQ0FBQztJQUMvQyxlQUFlLEdBQUcsSUFBSSxHQUFHLEVBQWtCLENBQUM7SUFDNUMscUJBQXFCLEdBQUcsRUFBRSxDQUFDO0lBQzNCLFdBQVcsQ0FBa0M7SUFFckQsWUFBWSxXQUE0QztRQUN0RCxJQUFJLE9BQU8sV0FBVyxLQUFLLFFBQVEsRUFBRSxDQUFDO1lBQ3BDLElBQUksQ0FBQyxFQUFFLEdBQUcsV0FBVyxDQUFDO1lBQ3RCLElBQUksQ0FBQyxrQkFBa0IsR0FBRyxXQUFXLENBQUM7UUFDeEMsQ0FBQzthQUFNLENBQUM7WUFDTixJQUFJLENBQUMsRUFBRSxHQUFHLFdBQVcsRUFBRSxFQUFFLElBQUksV0FBVyxFQUFFLGNBQWMsQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUNwRSxJQUFJLENBQUMsV0FBVyxHQUFHLFdBQVcsRUFBRSxXQUFXLENBQUM7WUFDNUMsSUFBSSxDQUFDLGtCQUFrQixHQUFHLFdBQVcsRUFBRSxrQkFBa0IsSUFBSSxXQUFXLENBQUM7UUFDM0UsQ0FBQztJQUNILENBQUM7SUFFTyxZQUFZLENBQUMsU0FBaUI7UUFDcEMsT0FBTyxDQUFDLElBQUksQ0FBQyxXQUFXLElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUMxRCxDQUFDO0lBRUQsMkRBQTJEO0lBQ25ELE9BQU87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cEMsVUFBVSxFQUFFLE9BQU8sQ0FBQyxVQUFVO2dCQUM5QixXQUFXLEVBQUUsT0FBTyxDQUFDLFdBQVc7Z0JBQ2hDLFlBQVksRUFBRSxPQUFPLENBQUMsWUFBWTtnQkFDbEMsV0FBVyxFQUFFLE9BQU8sQ0FBQyxXQUFXO2dCQUNoQyxLQUFLO2FBQ047U0FDRixDQUFDO0lBQ0osQ0FBQztJQUVELDhEQUE4RDtJQUM5RCxLQUFLO1FBQ0gsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUNuQixJQUFJLENBQUMsZUFBZSxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQzdCLElBQUksQ0FBQyxxQkFBcUIsR0FBRyxFQUFFLENBQUM7SUFDbEMsQ0FBQztJQUVELDJDQUEyQztJQUMzQyxLQUFLO1FBQ0gsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO0lBQ2YsQ0FBQzs7QUExTEgsd0NBMkxDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBNZXRyaWNSZWNvcmRlciDigJQgcGVyLXN0ZXAgdGltaW5nIGFuZCBleGVjdXRpb24gY291bnRzLCBrZXllZCBieSBydW50aW1lU3RhZ2VJZC5cbiAqXG4gKiBTdG9yZXMgcGVyLWludm9jYXRpb24gZGF0YSBkdXJpbmcgdHJhdmVyc2FsLiBBZ2dyZWdhdGVkIHZpZXdzIGNvbXB1dGVkIG9uIHJlYWQuXG4gKiBDb21wb3NlcyBhIGBLZXllZFN0b3JlPFN0ZXBNZXRyaWNzPmAgZm9yIE8oMSkgbG9va3VwIGFuZCBzdGFuZGFyZCBvcGVyYXRpb25zXG4gKiAoQ29udmVudGlvbiAxIOKAlCBvbmUgcHVycG9zZSBwZXIgcmVjb3JkZXI6IHRoaXMgaXMgdGhlIFNjb3BlUmVjb3JkZXI7IHRoZSBzdG9yZVxuICogaXMgdGhlIHN0b3JhZ2UpLlxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiBjb25zdCBtZXRyaWMgPSBuZXcgTWV0cmljUmVjb3JkZXIoKTtcbiAqIGV4ZWN1dG9yLmF0dGFjaFNjb3BlUmVjb3JkZXIobWV0cmljKTtcbiAqIGF3YWl0IGV4ZWN1dG9yLnJ1bigpO1xuICpcbiAqIC8vIFBlci1zdGVwICh0aW1lLXRyYXZlbCk6XG4gKiBtZXRyaWMuZ2V0QnlLZXkoJ2NhbGwtbGxtIzUnKTsgIC8vIHsgc3RhZ2VOYW1lLCByZWFkQ291bnQsIHdyaXRlQ291bnQsIGR1cmF0aW9uIH1cbiAqXG4gKiAvLyBBZ2dyZWdhdGVkIChiYWNrd2FyZCBjb21wYXQpOlxuICogbWV0cmljLmdldE1ldHJpY3MoKTsgIC8vIHsgdG90YWxEdXJhdGlvbiwgdG90YWxSZWFkcywgc3RhZ2VNZXRyaWNzOiBNYXA8c3RhZ2VOYW1lLCBhZ2dyZWdhdGVkPiB9XG4gKlxuICogLy8gUHJvZ3Jlc3NpdmUgKHNsaWRlcik6XG4gKiBtZXRyaWMuYWNjdW11bGF0ZSgoc3VtLCBtKSA9PiBzdW0gKyBtLmR1cmF0aW9uLCAwLCB2aXNpYmxlS2V5cyk7XG4gKiBgYGBcbiAqL1xuXG5pbXBvcnQgeyBLZXllZFN0b3JlIH0gZnJvbSAnLi4vLi4vcmVjb3JkZXIvS2V5ZWRTdG9yZS5qcyc7XG5pbXBvcnQgdHlwZSB7IFJlY29yZGVyT3BlcmF0aW9uIH0gZnJvbSAnLi4vLi4vcmVjb3JkZXIvUmVjb3JkZXJPcGVyYXRpb24uanMnO1xuaW1wb3J0IHR5cGUgeyBDb21taXRFdmVudCwgUGF1c2VFdmVudCwgUmVhZEV2ZW50LCBTY29wZVJlY29yZGVyLCBTdGFnZUV2ZW50LCBXcml0ZUV2ZW50IH0gZnJvbSAnLi4vdHlwZXMuanMnO1xuXG4vKiogUGVyLWludm9jYXRpb24gbWV0cmljcyBmb3IgYSBzaW5nbGUgZXhlY3V0aW9uIHN0ZXAuICovXG5leHBvcnQgaW50ZXJmYWNlIFN0ZXBNZXRyaWNzIHtcbiAgLyoqIEh1bWFuLXJlYWRhYmxlIHN0YWdlIG5hbWUuICovXG4gIHN0YWdlTmFtZTogc3RyaW5nO1xuICAvKiogTnVtYmVyIG9mIHNjb3BlIHJlYWRzIGR1cmluZyB0aGlzIGludm9jYXRpb24uICovXG4gIHJlYWRDb3VudDogbnVtYmVyO1xuICAvKiogTnVtYmVyIG9mIHNjb3BlIHdyaXRlcyBkdXJpbmcgdGhpcyBpbnZvY2F0aW9uLiAqL1xuICB3cml0ZUNvdW50OiBudW1iZXI7XG4gIC8qKiBOdW1iZXIgb2YgY29tbWl0cyBkdXJpbmcgdGhpcyBpbnZvY2F0aW9uLiAqL1xuICBjb21taXRDb3VudDogbnVtYmVyO1xuICAvKiogTnVtYmVyIG9mIHBhdXNlcyBkdXJpbmcgdGhpcyBpbnZvY2F0aW9uLiAqL1xuICBwYXVzZUNvdW50OiBudW1iZXI7XG4gIC8qKiBEdXJhdGlvbiBpbiBtcyBmb3IgdGhpcyBpbnZvY2F0aW9uLiAqL1xuICBkdXJhdGlvbjogbnVtYmVyO1xufVxuXG4vKiogQWdncmVnYXRlZCBtZXRyaWNzIGFjcm9zcyBhbGwgaW52b2NhdGlvbnMgKGJhY2t3YXJkIGNvbXBhdGlibGUpLiAqL1xuZXhwb3J0IGludGVyZmFjZSBBZ2dyZWdhdGVkTWV0cmljcyB7XG4gIHRvdGFsRHVyYXRpb246IG51bWJlcjtcbiAgdG90YWxSZWFkczogbnVtYmVyO1xuICB0b3RhbFdyaXRlczogbnVtYmVyO1xuICB0b3RhbENvbW1pdHM6IG51bWJlcjtcbiAgdG90YWxQYXVzZXM6IG51bWJlcjtcbiAgLyoqIEFnZ3JlZ2F0ZWQgYnkgc3RhZ2VOYW1lIOKAlCBzdW1zIGFjcm9zcyBsb29wIGludm9jYXRpb25zLiAqL1xuICBzdGFnZU1ldHJpY3M6IE1hcDxzdHJpbmcsIFN0YWdlTWV0cmljcz47XG59XG5cbi8qKiBBZ2dyZWdhdGVkIHBlci1zdGFnZU5hbWUgKGJhY2t3YXJkIGNvbXBhdGlibGUgd2l0aCBwcmUtcnVudGltZVN0YWdlSWQgQVBJKS4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU3RhZ2VNZXRyaWNzIHtcbiAgc3RhZ2VOYW1lOiBzdHJpbmc7XG4gIHJlYWRDb3VudDogbnVtYmVyO1xuICB3cml0ZUNvdW50OiBudW1iZXI7XG4gIGNvbW1pdENvdW50OiBudW1iZXI7XG4gIHBhdXNlQ291bnQ6IG51bWJlcjtcbiAgdG90YWxEdXJhdGlvbjogbnVtYmVyO1xuICBpbnZvY2F0aW9uQ291bnQ6IG51bWJlcjtcbn1cblxuLyoqIE9wdGlvbnMgZm9yIE1ldHJpY1JlY29yZGVyLiAqL1xuZXhwb3J0IGludGVyZmFjZSBNZXRyaWNSZWNvcmRlck9wdGlvbnMge1xuICAvKiogU2NvcGVSZWNvcmRlciBJRC4gRGVmYXVsdHMgdG8gYXV0by1pbmNyZW1lbnQgKGBtZXRyaWNzLTFgLCBgbWV0cmljcy0yYCwgLi4uKS4gKi9cbiAgaWQ/OiBzdHJpbmc7XG4gIC8qKiBGaWx0ZXIgd2hpY2ggc3RhZ2VzIGFyZSByZWNvcmRlZC4gUmV0dXJuIGB0cnVlYCB0byByZWNvcmQsIGBmYWxzZWAgdG8gc2tpcC4gKi9cbiAgc3RhZ2VGaWx0ZXI/OiAoc3RhZ2VOYW1lOiBzdHJpbmcpID0+IGJvb2xlYW47XG4gIC8qKiBQcmVmZXJyZWQgVUkgb3BlcmF0aW9uLiBEZWZhdWx0cyB0byAnYWdncmVnYXRlJyAoZGFzaGJvYXJkIHRvdGFscykuICovXG4gIHByZWZlcnJlZE9wZXJhdGlvbj86IFJlY29yZGVyT3BlcmF0aW9uO1xufVxuXG5leHBvcnQgY2xhc3MgTWV0cmljUmVjb3JkZXIgaW1wbGVtZW50cyBTY29wZVJlY29yZGVyIHtcbiAgcHJpdmF0ZSBzdGF0aWMgX2NvdW50ZXIgPSAwO1xuXG4gIHJlYWRvbmx5IGlkOiBzdHJpbmc7XG4gIHJlYWRvbmx5IHByZWZlcnJlZE9wZXJhdGlvbjogUmVjb3JkZXJPcGVyYXRpb247XG4gIC8qKiAxOjEgcGVyLXN0ZXAgc3RvcmFnZSAoQ29udmVudGlvbiAxIOKAlCBjb21wb3NlZCwgbm90IGluaGVyaXRlZCkuICovXG4gIHByaXZhdGUgcmVhZG9ubHkgc3RvcmUgPSBuZXcgS2V5ZWRTdG9yZTxTdGVwTWV0cmljcz4oKTtcbiAgcHJpdmF0ZSBzdGFnZVN0YXJ0VGltZXMgPSBuZXcgTWFwPHN0cmluZywgbnVtYmVyPigpO1xuICBwcml2YXRlIGN1cnJlbnRSdW50aW1lU3RhZ2VJZCA9ICcnO1xuICBwcml2YXRlIHN0YWdlRmlsdGVyPzogKHN0YWdlTmFtZTogc3RyaW5nKSA9PiBib29sZWFuO1xuXG4gIGNvbnN0cnVjdG9yKGlkT3JPcHRpb25zPzogc3RyaW5nIHwgTWV0cmljUmVjb3JkZXJPcHRpb25zKSB7XG4gICAgaWYgKHR5cGVvZiBpZE9yT3B0aW9ucyA9PT0gJ3N0cmluZycpIHtcbiAgICAgIHRoaXMuaWQgPSBpZE9yT3B0aW9ucztcbiAgICAgIHRoaXMucHJlZmVycmVkT3BlcmF0aW9uID0gJ2FnZ3JlZ2F0ZSc7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuaWQgPSBpZE9yT3B0aW9ucz8uaWQgPz8gYG1ldHJpY3MtJHsrK01ldHJpY1JlY29yZGVyLl9jb3VudGVyfWA7XG4gICAgICB0aGlzLnN0YWdlRmlsdGVyID0gaWRPck9wdGlvbnM/LnN0YWdlRmlsdGVyO1xuICAgICAgdGhpcy5wcmVmZXJyZWRPcGVyYXRpb24gPSBpZE9yT3B0aW9ucz8ucHJlZmVycmVkT3BlcmF0aW9uID8/ICdhZ2dyZWdhdGUnO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgc2hvdWxkUmVjb3JkKHN0YWdlTmFtZTogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICF0aGlzLnN0YWdlRmlsdGVyIHx8IHRoaXMuc3RhZ2VGaWx0ZXIoc3RhZ2VOYW1lKTtcbiAgfVxuXG4gIC8qKiBHZXQgb3IgY3JlYXRlIHRoZSBTdGVwTWV0cmljcyBmb3IgdGhlIGN1cnJlbnQgc3RhZ2UuICovXG4gIHByaXZhdGUgY3VycmVudCgpOiBTdGVwTWV0cmljcyB7XG4gICAgY29uc3Qga2V5ID0gdGhpcy5jdXJyZW50UnVudGltZVN0YWdlSWQ7XG4gICAgbGV0IG0gPSB0aGlzLnN0b3JlLmdldChrZXkpO1xuICAgIGlmICghbSkge1xuICAgICAgbSA9IHsgc3RhZ2VOYW1lOiAnJywgcmVhZENvdW50OiAwLCB3cml0ZUNvdW50OiAwLCBjb21taXRDb3VudDogMCwgcGF1c2VDb3VudDogMCwgZHVyYXRpb246IDAgfTtcbiAgICAgIHRoaXMuc3RvcmUuc2V0KGtleSwgbSk7XG4gICAgfVxuICAgIHJldHVybiBtO1xuICB9XG5cbiAgLy8g4pSA4pSAIFBlci1zdGVwIHF1ZXJ5IEFQSSAoZGVsZWdhdGVzIHRvIHRoZSBjb21wb3NlZCBzdG9yZSkg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG5cbiAgLyoqIFRyYW5zbGF0ZTogcGVyLXN0ZXAgbWV0cmljcyBieSBydW50aW1lU3RhZ2VJZC4gKi9cbiAgZ2V0QnlLZXkocnVudGltZVN0YWdlSWQ6IHN0cmluZyk6IFN0ZXBNZXRyaWNzIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5zdG9yZS5nZXQocnVudGltZVN0YWdlSWQpO1xuICB9XG5cbiAgLyoqIEFsbCBwZXItc3RlcCBtZXRyaWNzIGFzIGEgcmVhZC1vbmx5IE1hcCAoaW5zZXJ0aW9uLW9yZGVyZWQpLiAqL1xuICBnZXRNYXAoKTogUmVhZG9ubHlNYXA8c3RyaW5nLCBTdGVwTWV0cmljcz4ge1xuICAgIHJldHVybiB0aGlzLnN0b3JlLmdldE1hcCgpO1xuICB9XG5cbiAgLyoqIEFsbCBwZXItc3RlcCBtZXRyaWNzIChpbnNlcnRpb24tb3JkZXJlZCkuICovXG4gIHZhbHVlcygpOiBTdGVwTWV0cmljc1tdIHtcbiAgICByZXR1cm4gdGhpcy5zdG9yZS52YWx1ZXMoKTtcbiAgfVxuXG4gIC8qKiBOdW1iZXIgb2YgcmVjb3JkZWQgc3RlcHMuICovXG4gIGdldCBzaXplKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuc3RvcmUuc2l6ZTtcbiAgfVxuXG4gIC8qKiBBZ2dyZWdhdGU6IHJlZHVjZSBBTEwgc3RlcHMgdG8gYSBzaW5nbGUgdmFsdWUgKGRhc2hib2FyZHMsIHRvdGFscykuICovXG4gIGFnZ3JlZ2F0ZTxSPihmbjogKGFjYzogUiwgZW50cnk6IFN0ZXBNZXRyaWNzLCBrZXk6IHN0cmluZykgPT4gUiwgaW5pdGlhbDogUik6IFIge1xuICAgIHJldHVybiB0aGlzLnN0b3JlLmFnZ3JlZ2F0ZShmbiwgaW5pdGlhbCk7XG4gIH1cblxuICAvKiogQWNjdW11bGF0ZTogcmVkdWNlIHN0ZXBzIHVwIHRvIGEgc2xpZGVyIHBvc2l0aW9uIChwcm9ncmVzc2l2ZSB2aWV3KS4gKi9cbiAgYWNjdW11bGF0ZTxSPihmbjogKGFjYzogUiwgZW50cnk6IFN0ZXBNZXRyaWNzLCBrZXk6IHN0cmluZykgPT4gUiwgaW5pdGlhbDogUiwga2V5cz86IFJlYWRvbmx5U2V0PHN0cmluZz4pOiBSIHtcbiAgICByZXR1cm4gdGhpcy5zdG9yZS5hY2N1bXVsYXRlKGZuLCBpbml0aWFsLCBrZXlzKTtcbiAgfVxuXG4gIG9uU3RhZ2VTdGFydChldmVudDogU3RhZ2VFdmVudCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5zaG91bGRSZWNvcmQoZXZlbnQuc3RhZ2VOYW1lKSkgcmV0dXJuO1xuICAgIHRoaXMuY3VycmVudFJ1bnRpbWVTdGFnZUlkID0gZXZlbnQucnVudGltZVN0YWdlSWQ7XG4gICAgdGhpcy5zdGFnZVN0YXJ0VGltZXMuc2V0KGV2ZW50LnJ1bnRpbWVTdGFnZUlkLCBldmVudC50aW1lc3RhbXApO1xuICAgIGNvbnN0IG0gPSB0aGlzLmN1cnJlbnQoKTtcbiAgICBtLnN0YWdlTmFtZSA9IGV2ZW50LnN0YWdlTmFtZTtcbiAgfVxuXG4gIG9uUmVhZChldmVudDogUmVhZEV2ZW50KTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLnNob3VsZFJlY29yZChldmVudC5zdGFnZU5hbWUpKSByZXR1cm47XG4gICAgdGhpcy5jdXJyZW50KCkucmVhZENvdW50Kys7XG4gIH1cblxuICBvbldyaXRlKGV2ZW50OiBXcml0ZUV2ZW50KTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLnNob3VsZFJlY29yZChldmVudC5zdGFnZU5hbWUpKSByZXR1cm47XG4gICAgdGhpcy5jdXJyZW50KCkud3JpdGVDb3VudCsrO1xuICB9XG5cbiAgb25Db21taXQoZXZlbnQ6IENvbW1pdEV2ZW50KTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLnNob3VsZFJlY29yZChldmVudC5zdGFnZU5hbWUpKSByZXR1cm47XG4gICAgdGhpcy5jdXJyZW50KCkuY29tbWl0Q291bnQrKztcbiAgfVxuXG4gIG9uUGF1c2UoZXZlbnQ6IFBhdXNlRXZlbnQpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuc2hvdWxkUmVjb3JkKGV2ZW50LnN0YWdlTmFtZSkpIHJldHVybjtcbiAgICB0aGlzLmN1cnJlbnQoKS5wYXVzZUNvdW50Kys7XG4gIH1cblxuICBvblN0YWdlRW5kKGV2ZW50OiBTdGFnZUV2ZW50KTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLnNob3VsZFJlY29yZChldmVudC5zdGFnZU5hbWUpKSByZXR1cm47XG4gICAgY29uc3QgbSA9IHRoaXMuY3VycmVudCgpO1xuICAgIGlmIChldmVudC5kdXJhdGlvbiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBtLmR1cmF0aW9uID0gZXZlbnQuZHVyYXRpb247XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IHN0YXJ0VGltZSA9IHRoaXMuc3RhZ2VTdGFydFRpbWVzLmdldChldmVudC5ydW50aW1lU3RhZ2VJZCk7XG4gICAgICBtLmR1cmF0aW9uID0gc3RhcnRUaW1lICE9PSB1bmRlZmluZWQgPyBldmVudC50aW1lc3RhbXAgLSBzdGFydFRpbWUgOiAwO1xuICAgIH1cbiAgICB0aGlzLnN0YWdlU3RhcnRUaW1lcy5kZWxldGUoZXZlbnQucnVudGltZVN0YWdlSWQpO1xuICB9XG5cbiAgLyoqIEFnZ3JlZ2F0ZWQgbWV0cmljcyDigJQgY29tcHV0ZXMgdG90YWxzIG9uIHRoZSBmbHkgZnJvbSBwZXItc3RlcCBkYXRhIChiYWNrd2FyZCBjb21wYXRpYmxlKS4gKi9cbiAgZ2V0TWV0cmljcygpOiBBZ2dyZWdhdGVkTWV0cmljcyB7XG4gICAgY29uc3QgYnlOYW1lID0gbmV3IE1hcDxzdHJpbmcsIFN0YWdlTWV0cmljcz4oKTtcblxuICAgIGNvbnN0IHRvdGFsRHVyYXRpb24gPSB0aGlzLmFnZ3JlZ2F0ZSgoc3VtLCBtKSA9PiBzdW0gKyBtLmR1cmF0aW9uLCAwKTtcbiAgICBjb25zdCB0b3RhbFJlYWRzID0gdGhpcy5hZ2dyZWdhdGUoKHN1bSwgbSkgPT4gc3VtICsgbS5yZWFkQ291bnQsIDApO1xuICAgIGNvbnN0IHRvdGFsV3JpdGVzID0gdGhpcy5hZ2dyZWdhdGUoKHN1bSwgbSkgPT4gc3VtICsgbS53cml0ZUNvdW50LCAwKTtcbiAgICBjb25zdCB0b3RhbENvbW1pdHMgPSB0aGlzLmFnZ3JlZ2F0ZSgoc3VtLCBtKSA9PiBzdW0gKyBtLmNvbW1pdENvdW50LCAwKTtcbiAgICBjb25zdCB0b3RhbFBhdXNlcyA9IHRoaXMuYWdncmVnYXRlKChzdW0sIG0pID0+IHN1bSArIG0ucGF1c2VDb3VudCwgMCk7XG5cbiAgICAvLyBHcm91cCBieSBzdGFnZU5hbWUgZm9yIGJhY2t3YXJkIGNvbXBhdFxuICAgIGZvciAoY29uc3QgbSBvZiB0aGlzLnZhbHVlcygpKSB7XG4gICAgICBjb25zdCBleGlzdGluZyA9IGJ5TmFtZS5nZXQobS5zdGFnZU5hbWUpO1xuICAgICAgaWYgKGV4aXN0aW5nKSB7XG4gICAgICAgIGV4aXN0aW5nLnJlYWRDb3VudCArPSBtLnJlYWRDb3VudDtcbiAgICAgICAgZXhpc3Rpbmcud3JpdGVDb3VudCArPSBtLndyaXRlQ291bnQ7XG4gICAgICAgIGV4aXN0aW5nLmNvbW1pdENvdW50ICs9IG0uY29tbWl0Q291bnQ7XG4gICAgICAgIGV4aXN0aW5nLnBhdXNlQ291bnQgKz0gbS5wYXVzZUNvdW50O1xuICAgICAgICBleGlzdGluZy50b3RhbER1cmF0aW9uICs9IG0uZHVyYXRpb247XG4gICAgICAgIGV4aXN0aW5nLmludm9jYXRpb25Db3VudCsrO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgYnlOYW1lLnNldChtLnN0YWdlTmFtZSwge1xuICAgICAgICAgIHN0YWdlTmFtZTogbS5zdGFnZU5hbWUsXG4gICAgICAgICAgcmVhZENvdW50OiBtLnJlYWRDb3VudCxcbiAgICAgICAgICB3cml0ZUNvdW50OiBtLndyaXRlQ291bnQsXG4gICAgICAgICAgY29tbWl0Q291bnQ6IG0uY29tbWl0Q291bnQsXG4gICAgICAgICAgcGF1c2VDb3VudDogbS5wYXVzZUNvdW50LFxuICAgICAgICAgIHRvdGFsRHVyYXRpb246IG0uZHVyYXRpb24sXG4gICAgICAgICAgaW52b2NhdGlvbkNvdW50OiAxLFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4geyB0b3RhbER1cmF0aW9uLCB0b3RhbFJlYWRzLCB0b3RhbFdyaXRlcywgdG90YWxDb21taXRzLCB0b3RhbFBhdXNlcywgc3RhZ2VNZXRyaWNzOiBieU5hbWUgfTtcbiAgfVxuXG4gIC8qKiBHZXQgYWdncmVnYXRlZCBtZXRyaWNzIGZvciBhIHNwZWNpZmljIHN0YWdlIG5hbWUgKGJhY2t3YXJkIGNvbXBhdGlibGUpLiAqL1xuICBnZXRTdGFnZU1ldHJpY3Moc3RhZ2VOYW1lOiBzdHJpbmcpOiBTdGFnZU1ldHJpY3MgfCB1bmRlZmluZWQge1xuICAgIGNvbnN0IG1ldHJpY3MgPSB0aGlzLmdldE1ldHJpY3MoKTtcbiAgICByZXR1cm4gbWV0cmljcy5zdGFnZU1ldHJpY3MuZ2V0KHN0YWdlTmFtZSk7XG4gIH1cblxuICB0b1NuYXBzaG90KCkge1xuICAgIGNvbnN0IG1ldHJpY3MgPSB0aGlzLmdldE1ldHJpY3MoKTtcbiAgICAvLyBFeHBvc2UgcGVyLXN0ZXAgZGF0YSBrZXllZCBieSBydW50aW1lU3RhZ2VJZCAoZm9yIHRpbWUtdHJhdmVsIFVJKVxuICAgIC8vIGFsb25nc2lkZSB0aGUgYWdncmVnYXRlZCB0b3RhbHNcbiAgICBjb25zdCBzdGVwczogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPSB7fTtcbiAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiB0aGlzLmdldE1hcCgpKSB7XG4gICAgICBzdGVwc1trZXldID0gdmFsdWU7XG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICBuYW1lOiAnTWV0cmljcycsXG4gICAgICBkZXNjcmlwdGlvbjogJ0FnZ3JlZ2F0b3IgKEtleWVkU3RvcmUpIOKAlCBwZXItc3RlcCB0aW1pbmcgYW5kIEkvTyBjb3VudHMnLFxuICAgICAgcHJlZmVycmVkT3BlcmF0aW9uOiB0aGlzLnByZWZlcnJlZE9wZXJhdGlvbixcbiAgICAgIGRhdGE6IHtcbiAgICAgICAgbnVtZXJpY0ZpZWxkOiAncmVhZENvdW50JyxcbiAgICAgICAgZ3JhbmRUb3RhbDogbWV0cmljcy50b3RhbFJlYWRzLFxuICAgICAgICB0b3RhbER1cmF0aW9uOiBtZXRyaWNzLnRvdGFsRHVyYXRpb24sXG4gICAgICAgIHRvdGFsUmVhZHM6IG1ldHJpY3MudG90YWxSZWFkcyxcbiAgICAgICAgdG90YWxXcml0ZXM6IG1ldHJpY3MudG90YWxXcml0ZXMsXG4gICAgICAgIHRvdGFsQ29tbWl0czogbWV0cmljcy50b3RhbENvbW1pdHMsXG4gICAgICAgIHRvdGFsUGF1c2VzOiBtZXRyaWNzLnRvdGFsUGF1c2VzLFxuICAgICAgICBzdGVwcyxcbiAgICAgIH0sXG4gICAgfTtcbiAgfVxuXG4gIC8qKiBDbGVhciBhbGwgc3RhdGUg4oCUIGNhbGxlZCBieSBleGVjdXRvciBiZWZvcmUgZWFjaCBydW4oKS4gKi9cbiAgY2xlYXIoKTogdm9pZCB7XG4gICAgdGhpcy5zdG9yZS5jbGVhcigpO1xuICAgIHRoaXMuc3RhZ2VTdGFydFRpbWVzLmNsZWFyKCk7XG4gICAgdGhpcy5jdXJyZW50UnVudGltZVN0YWdlSWQgPSAnJztcbiAgfVxuXG4gIC8qKiBBbGlhcyBmb3IgY2xlYXIoKSAoYmFja3dhcmQgY29tcGF0KS4gKi9cbiAgcmVzZXQoKTogdm9pZCB7XG4gICAgdGhpcy5jbGVhcigpO1xuICB9XG59XG4iXX0=
199
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTWV0cmljUmVjb3JkZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvbGliL3Njb3BlL3JlY29yZGVycy9NZXRyaWNSZWNvcmRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBdUJHOzs7QUFFSCxnRUFBMEQ7QUE0RDFELE1BQWEsY0FBYztJQUNqQixNQUFNLENBQUMsUUFBUSxHQUFHLENBQUMsQ0FBQztJQUVuQixFQUFFLENBQVM7SUFDWCxrQkFBa0IsQ0FBb0I7SUFDL0MscUVBQXFFO0lBQ3BELEtBQUssR0FBRyxJQUFJLDBCQUFVLEVBQWUsQ0FBQztJQUMvQyxlQUFlLEdBQUcsSUFBSSxHQUFHLEVBQWtCLENBQUM7SUFDNUMsV0FBVyxDQUFrQztJQUVyRCxZQUFZLFdBQTRDO1FBQ3RELElBQUksT0FBTyxXQUFXLEtBQUssUUFBUSxFQUFFLENBQUM7WUFDcEMsSUFBSSxDQUFDLEVBQUUsR0FBRyxXQUFXLENBQUM7WUFDdEIsSUFBSSxDQUFDLGtCQUFrQixHQUFHLFdBQVcsQ0FBQztRQUN4QyxDQUFDO2FBQU0sQ0FBQztZQUNOLElBQUksQ0FBQyxFQUFFLEdBQUcsV0FBVyxFQUFFLEVBQUUsSUFBSSxXQUFXLEVBQUUsY0FBYyxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQ3BFLElBQUksQ0FBQyxXQUFXLEdBQUcsV0FBVyxFQUFFLFdBQVcsQ0FBQztZQUM1QyxJQUFJLENBQUMsa0JBQWtCLEdBQUcsV0FBVyxFQUFFLGtCQUFrQixJQUFJLFdBQVcsQ0FBQztRQUMzRSxDQUFDO0lBQ0gsQ0FBQztJQUVPLFlBQVksQ0FBQyxTQUFpQjtRQUNwQyxPQUFPLENBQUMsSUFBSSxDQUFDLFdBQVcsSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQzFELENBQUM7SUFFRCxpRkFBaUY7SUFDekUsUUFBUSxDQUFDLEtBQXNCO1FBQ3JDLE1BQU0sR0FBRyxH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Z0JBQ3BDLFVBQVUsRUFBRSxPQUFPLENBQUMsVUFBVTtnQkFDOUIsV0FBVyxFQUFFLE9BQU8sQ0FBQyxXQUFXO2dCQUNoQyxZQUFZLEVBQUUsT0FBTyxDQUFDLFlBQVk7Z0JBQ2xDLFdBQVcsRUFBRSxPQUFPLENBQUMsV0FBVztnQkFDaEMsS0FBSzthQUNOO1NBQ0YsQ0FBQztJQUNKLENBQUM7SUFFRCw4REFBOEQ7SUFDOUQsS0FBSztRQUNILElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDbkIsSUFBSSxDQUFDLGVBQWUsQ0FBQyxLQUFLLEVBQUUsQ0FBQztJQUMvQixDQUFDO0lBRUQsMkNBQTJDO0lBQzNDLEtBQUs7UUFDSCxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7SUFDZixDQUFDOztBQXZMSCx3Q0F3TEMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIE1ldHJpY1JlY29yZGVyIOKAlCBwZXItc3RlcCB0aW1pbmcgYW5kIGV4ZWN1dGlvbiBjb3VudHMsIGtleWVkIGJ5IHJ1bnRpbWVTdGFnZUlkLlxuICpcbiAqIFN0b3JlcyBwZXItaW52b2NhdGlvbiBkYXRhIGR1cmluZyB0cmF2ZXJzYWwuIEFnZ3JlZ2F0ZWQgdmlld3MgY29tcHV0ZWQgb24gcmVhZC5cbiAqIENvbXBvc2VzIGEgYEtleWVkU3RvcmU8U3RlcE1ldHJpY3M+YCBmb3IgTygxKSBsb29rdXAgYW5kIHN0YW5kYXJkIG9wZXJhdGlvbnNcbiAqIChDb252ZW50aW9uIDEg4oCUIG9uZSBwdXJwb3NlIHBlciByZWNvcmRlcjogdGhpcyBpcyB0aGUgU2NvcGVSZWNvcmRlcjsgdGhlIHN0b3JlXG4gKiBpcyB0aGUgc3RvcmFnZSkuXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIGNvbnN0IG1ldHJpYyA9IG5ldyBNZXRyaWNSZWNvcmRlcigpO1xuICogZXhlY3V0b3IuYXR0YWNoU2NvcGVSZWNvcmRlcihtZXRyaWMpO1xuICogYXdhaXQgZXhlY3V0b3IucnVuKCk7XG4gKlxuICogLy8gUGVyLXN0ZXAgKHRpbWUtdHJhdmVsKTpcbiAqIG1ldHJpYy5nZXRCeUtleSgnY2FsbC1sbG0jNScpOyAgLy8geyBzdGFnZU5hbWUsIHJlYWRDb3VudCwgd3JpdGVDb3VudCwgZHVyYXRpb24gfVxuICpcbiAqIC8vIEFnZ3JlZ2F0ZWQgKGJhY2t3YXJkIGNvbXBhdCk6XG4gKiBtZXRyaWMuZ2V0TWV0cmljcygpOyAgLy8geyB0b3RhbER1cmF0aW9uLCB0b3RhbFJlYWRzLCBzdGFnZU1ldHJpY3M6IE1hcDxzdGFnZU5hbWUsIGFnZ3JlZ2F0ZWQ+IH1cbiAqXG4gKiAvLyBQcm9ncmVzc2l2ZSAoc2xpZGVyKTpcbiAqIG1ldHJpYy5hY2N1bXVsYXRlKChzdW0sIG0pID0+IHN1bSArIG0uZHVyYXRpb24sIDAsIHZpc2libGVLZXlzKTtcbiAqIGBgYFxuICovXG5cbmltcG9ydCB7IEtleWVkU3RvcmUgfSBmcm9tICcuLi8uLi9yZWNvcmRlci9LZXllZFN0b3JlLmpzJztcbmltcG9ydCB0eXBlIHsgUmVjb3JkZXJPcGVyYXRpb24gfSBmcm9tICcuLi8uLi9yZWNvcmRlci9SZWNvcmRlck9wZXJhdGlvbi5qcyc7XG5pbXBvcnQgdHlwZSB7XG4gIENvbW1pdEV2ZW50LFxuICBQYXVzZUV2ZW50LFxuICBSZWFkRXZlbnQsXG4gIFJlY29yZGVyQ29udGV4dCxcbiAgU2NvcGVSZWNvcmRlcixcbiAgU3RhZ2VFdmVudCxcbiAgV3JpdGVFdmVudCxcbn0gZnJvbSAnLi4vdHlwZXMuanMnO1xuXG4vKiogUGVyLWludm9jYXRpb24gbWV0cmljcyBmb3IgYSBzaW5nbGUgZXhlY3V0aW9uIHN0ZXAuICovXG5leHBvcnQgaW50ZXJmYWNlIFN0ZXBNZXRyaWNzIHtcbiAgLyoqIEh1bWFuLXJlYWRhYmxlIHN0YWdlIG5hbWUuICovXG4gIHN0YWdlTmFtZTogc3RyaW5nO1xuICAvKiogTnVtYmVyIG9mIHNjb3BlIHJlYWRzIGR1cmluZyB0aGlzIGludm9jYXRpb24uICovXG4gIHJlYWRDb3VudDogbnVtYmVyO1xuICAvKiogTnVtYmVyIG9mIHNjb3BlIHdyaXRlcyBkdXJpbmcgdGhpcyBpbnZvY2F0aW9uLiAqL1xuICB3cml0ZUNvdW50OiBudW1iZXI7XG4gIC8qKiBOdW1iZXIgb2YgY29tbWl0cyBkdXJpbmcgdGhpcyBpbnZvY2F0aW9uLiAqL1xuICBjb21taXRDb3VudDogbnVtYmVyO1xuICAvKiogTnVtYmVyIG9mIHBhdXNlcyBkdXJpbmcgdGhpcyBpbnZvY2F0aW9uLiAqL1xuICBwYXVzZUNvdW50OiBudW1iZXI7XG4gIC8qKiBEdXJhdGlvbiBpbiBtcyBmb3IgdGhpcyBpbnZvY2F0aW9uLiAqL1xuICBkdXJhdGlvbjogbnVtYmVyO1xufVxuXG4vKiogQWdncmVnYXRlZCBtZXRyaWNzIGFjcm9zcyBhbGwgaW52b2NhdGlvbnMgKGJhY2t3YXJkIGNvbXBhdGlibGUpLiAqL1xuZXhwb3J0IGludGVyZmFjZSBBZ2dyZWdhdGVkTWV0cmljcyB7XG4gIHRvdGFsRHVyYXRpb246IG51bWJlcjtcbiAgdG90YWxSZWFkczogbnVtYmVyO1xuICB0b3RhbFdyaXRlczogbnVtYmVyO1xuICB0b3RhbENvbW1pdHM6IG51bWJlcjtcbiAgdG90YWxQYXVzZXM6IG51bWJlcjtcbiAgLyoqIEFnZ3JlZ2F0ZWQgYnkgc3RhZ2VOYW1lIOKAlCBzdW1zIGFjcm9zcyBsb29wIGludm9jYXRpb25zLiAqL1xuICBzdGFnZU1ldHJpY3M6IE1hcDxzdHJpbmcsIFN0YWdlTWV0cmljcz47XG59XG5cbi8qKiBBZ2dyZWdhdGVkIHBlci1zdGFnZU5hbWUgKGJhY2t3YXJkIGNvbXBhdGlibGUgd2l0aCBwcmUtcnVudGltZVN0YWdlSWQgQVBJKS4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU3RhZ2VNZXRyaWNzIHtcbiAgc3RhZ2VOYW1lOiBzdHJpbmc7XG4gIHJlYWRDb3VudDogbnVtYmVyO1xuICB3cml0ZUNvdW50OiBudW1iZXI7XG4gIGNvbW1pdENvdW50OiBudW1iZXI7XG4gIHBhdXNlQ291bnQ6IG51bWJlcjtcbiAgdG90YWxEdXJhdGlvbjogbnVtYmVyO1xuICBpbnZvY2F0aW9uQ291bnQ6IG51bWJlcjtcbn1cblxuLyoqIE9wdGlvbnMgZm9yIE1ldHJpY1JlY29yZGVyLiAqL1xuZXhwb3J0IGludGVyZmFjZSBNZXRyaWNSZWNvcmRlck9wdGlvbnMge1xuICAvKiogU2NvcGVSZWNvcmRlciBJRC4gRGVmYXVsdHMgdG8gYXV0by1pbmNyZW1lbnQgKGBtZXRyaWNzLTFgLCBgbWV0cmljcy0yYCwgLi4uKS4gKi9cbiAgaWQ/OiBzdHJpbmc7XG4gIC8qKiBGaWx0ZXIgd2hpY2ggc3RhZ2VzIGFyZSByZWNvcmRlZC4gUmV0dXJuIGB0cnVlYCB0byByZWNvcmQsIGBmYWxzZWAgdG8gc2tpcC4gKi9cbiAgc3RhZ2VGaWx0ZXI/OiAoc3RhZ2VOYW1lOiBzdHJpbmcpID0+IGJvb2xlYW47XG4gIC8qKiBQcmVmZXJyZWQgVUkgb3BlcmF0aW9uLiBEZWZhdWx0cyB0byAnYWdncmVnYXRlJyAoZGFzaGJvYXJkIHRvdGFscykuICovXG4gIHByZWZlcnJlZE9wZXJhdGlvbj86IFJlY29yZGVyT3BlcmF0aW9uO1xufVxuXG5leHBvcnQgY2xhc3MgTWV0cmljUmVjb3JkZXIgaW1wbGVtZW50cyBTY29wZVJlY29yZGVyIHtcbiAgcHJpdmF0ZSBzdGF0aWMgX2NvdW50ZXIgPSAwO1xuXG4gIHJlYWRvbmx5IGlkOiBzdHJpbmc7XG4gIHJlYWRvbmx5IHByZWZlcnJlZE9wZXJhdGlvbjogUmVjb3JkZXJPcGVyYXRpb247XG4gIC8qKiAxOjEgcGVyLXN0ZXAgc3RvcmFnZSAoQ29udmVudGlvbiAxIOKAlCBjb21wb3NlZCwgbm90IGluaGVyaXRlZCkuICovXG4gIHByaXZhdGUgcmVhZG9ubHkgc3RvcmUgPSBuZXcgS2V5ZWRTdG9yZTxTdGVwTWV0cmljcz4oKTtcbiAgcHJpdmF0ZSBzdGFnZVN0YXJ0VGltZXMgPSBuZXcgTWFwPHN0cmluZywgbnVtYmVyPigpO1xuICBwcml2YXRlIHN0YWdlRmlsdGVyPzogKHN0YWdlTmFtZTogc3RyaW5nKSA9PiBib29sZWFuO1xuXG4gIGNvbnN0cnVjdG9yKGlkT3JPcHRpb25zPzogc3RyaW5nIHwgTWV0cmljUmVjb3JkZXJPcHRpb25zKSB7XG4gICAgaWYgKHR5cGVvZiBpZE9yT3B0aW9ucyA9PT0gJ3N0cmluZycpIHtcbiAgICAgIHRoaXMuaWQgPSBpZE9yT3B0aW9ucztcbiAgICAgIHRoaXMucHJlZmVycmVkT3BlcmF0aW9uID0gJ2FnZ3JlZ2F0ZSc7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuaWQgPSBpZE9yT3B0aW9ucz8uaWQgPz8gYG1ldHJpY3MtJHsrK01ldHJpY1JlY29yZGVyLl9jb3VudGVyfWA7XG4gICAgICB0aGlzLnN0YWdlRmlsdGVyID0gaWRPck9wdGlvbnM/LnN0YWdlRmlsdGVyO1xuICAgICAgdGhpcy5wcmVmZXJyZWRPcGVyYXRpb24gPSBpZE9yT3B0aW9ucz8ucHJlZmVycmVkT3BlcmF0aW9uID8/ICdhZ2dyZWdhdGUnO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgc2hvdWxkUmVjb3JkKHN0YWdlTmFtZTogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICF0aGlzLnN0YWdlRmlsdGVyIHx8IHRoaXMuc3RhZ2VGaWx0ZXIoc3RhZ2VOYW1lKTtcbiAgfVxuXG4gIC8qKiBFYWNoIGV2ZW50IG93bnMgaXRzIGF0dHJpYnV0aW9uOyBhbm90aGVyIHN0YWdlIG1heSBoYXZlIHN0YXJ0ZWQgbWVhbndoaWxlLiAqL1xuICBwcml2YXRlIGZvckV2ZW50KGV2ZW50OiBSZWNvcmRlckNvbnRleHQpOiBTdGVwTWV0cmljcyB7XG4gICAgY29uc3Qga2V5ID0gZXZlbnQucnVudGltZVN0YWdlSWQ7XG4gICAgbGV0IG0gPSB0aGlzLnN0b3JlLmdldChrZXkpO1xuICAgIGlmICghbSkge1xuICAgICAgbSA9IHsgc3RhZ2VOYW1lOiBldmVudC5zdGFnZU5hbWUsIHJlYWRDb3VudDogMCwgd3JpdGVDb3VudDogMCwgY29tbWl0Q291bnQ6IDAsIHBhdXNlQ291bnQ6IDAsIGR1cmF0aW9uOiAwIH07XG4gICAgICB0aGlzLnN0b3JlLnNldChrZXksIG0pO1xuICAgIH1cbiAgICByZXR1cm4gbTtcbiAgfVxuXG4gIC8vIOKUgOKUgCBQZXItc3RlcCBxdWVyeSBBUEkgKGRlbGVnYXRlcyB0byB0aGUgY29tcG9zZWQgc3RvcmUpIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuXG4gIC8qKiBUcmFuc2xhdGU6IHBlci1zdGVwIG1ldHJpY3MgYnkgcnVudGltZVN0YWdlSWQuICovXG4gIGdldEJ5S2V5KHJ1bnRpbWVTdGFnZUlkOiBzdHJpbmcpOiBTdGVwTWV0cmljcyB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuc3RvcmUuZ2V0KHJ1bnRpbWVTdGFnZUlkKTtcbiAgfVxuXG4gIC8qKiBBbGwgcGVyLXN0ZXAgbWV0cmljcyBhcyBhIHJlYWQtb25seSBNYXAgKGluc2VydGlvbi1vcmRlcmVkKS4gKi9cbiAgZ2V0TWFwKCk6IFJlYWRvbmx5TWFwPHN0cmluZywgU3RlcE1ldHJpY3M+IHtcbiAgICByZXR1cm4gdGhpcy5zdG9yZS5nZXRNYXAoKTtcbiAgfVxuXG4gIC8qKiBBbGwgcGVyLXN0ZXAgbWV0cmljcyAoaW5zZXJ0aW9uLW9yZGVyZWQpLiAqL1xuICB2YWx1ZXMoKTogU3RlcE1ldHJpY3NbXSB7XG4gICAgcmV0dXJuIHRoaXMuc3RvcmUudmFsdWVzKCk7XG4gIH1cblxuICAvKiogTnVtYmVyIG9mIHJlY29yZGVkIHN0ZXBzLiAqL1xuICBnZXQgc2l6ZSgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLnN0b3JlLnNpemU7XG4gIH1cblxuICAvKiogQWdncmVnYXRlOiByZWR1Y2UgQUxMIHN0ZXBzIHRvIGEgc2luZ2xlIHZhbHVlIChkYXNoYm9hcmRzLCB0b3RhbHMpLiAqL1xuICBhZ2dyZWdhdGU8Uj4oZm46IChhY2M6IFIsIGVudHJ5OiBTdGVwTWV0cmljcywga2V5OiBzdHJpbmcpID0+IFIsIGluaXRpYWw6IFIpOiBSIHtcbiAgICByZXR1cm4gdGhpcy5zdG9yZS5hZ2dyZWdhdGUoZm4sIGluaXRpYWwpO1xuICB9XG5cbiAgLyoqIEFjY3VtdWxhdGU6IHJlZHVjZSBzdGVwcyB1cCB0byBhIHNsaWRlciBwb3NpdGlvbiAocHJvZ3Jlc3NpdmUgdmlldykuICovXG4gIGFjY3VtdWxhdGU8Uj4oZm46IChhY2M6IFIsIGVudHJ5OiBTdGVwTWV0cmljcywga2V5OiBzdHJpbmcpID0+IFIsIGluaXRpYWw6IFIsIGtleXM/OiBSZWFkb25seVNldDxzdHJpbmc+KTogUiB7XG4gICAgcmV0dXJuIHRoaXMuc3RvcmUuYWNjdW11bGF0ZShmbiwgaW5pdGlhbCwga2V5cyk7XG4gIH1cblxuICBvblN0YWdlU3RhcnQoZXZlbnQ6IFN0YWdlRXZlbnQpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuc2hvdWxkUmVjb3JkKGV2ZW50LnN0YWdlTmFtZSkpIHJldHVybjtcbiAgICB0aGlzLnN0YWdlU3RhcnRUaW1lcy5zZXQoZXZlbnQucnVudGltZVN0YWdlSWQsIGV2ZW50LnRpbWVzdGFtcCk7XG4gICAgY29uc3QgbSA9IHRoaXMuZm9yRXZlbnQoZXZlbnQpO1xuICAgIG0uc3RhZ2VOYW1lID0gZXZlbnQuc3RhZ2VOYW1lO1xuICB9XG5cbiAgb25SZWFkKGV2ZW50OiBSZWFkRXZlbnQpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuc2hvdWxkUmVjb3JkKGV2ZW50LnN0YWdlTmFtZSkpIHJldHVybjtcbiAgICB0aGlzLmZvckV2ZW50KGV2ZW50KS5yZWFkQ291bnQrKztcbiAgfVxuXG4gIG9uV3JpdGUoZXZlbnQ6IFdyaXRlRXZlbnQpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuc2hvdWxkUmVjb3JkKGV2ZW50LnN0YWdlTmFtZSkpIHJldHVybjtcbiAgICB0aGlzLmZvckV2ZW50KGV2ZW50KS53cml0ZUNvdW50Kys7XG4gIH1cblxuICBvbkNvbW1pdChldmVudDogQ29tbWl0RXZlbnQpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuc2hvdWxkUmVjb3JkKGV2ZW50LnN0YWdlTmFtZSkpIHJldHVybjtcbiAgICB0aGlzLmZvckV2ZW50KGV2ZW50KS5jb21taXRDb3VudCsrO1xuICB9XG5cbiAgb25QYXVzZShldmVudDogUGF1c2VFdmVudCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5zaG91bGRSZWNvcmQoZXZlbnQuc3RhZ2VOYW1lKSkgcmV0dXJuO1xuICAgIHRoaXMuZm9yRXZlbnQoZXZlbnQpLnBhdXNlQ291bnQrKztcbiAgfVxuXG4gIG9uU3RhZ2VFbmQoZXZlbnQ6IFN0YWdlRXZlbnQpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuc2hvdWxkUmVjb3JkKGV2ZW50LnN0YWdlTmFtZSkpIHJldHVybjtcbiAgICBjb25zdCBtID0gdGhpcy5mb3JFdmVudChldmVudCk7XG4gICAgaWYgKGV2ZW50LmR1cmF0aW9uICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIG0uZHVyYXRpb24gPSBldmVudC5kdXJhdGlvbjtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3Qgc3RhcnRUaW1lID0gdGhpcy5zdGFnZVN0YXJ0VGltZXMuZ2V0KGV2ZW50LnJ1bnRpbWVTdGFnZUlkKTtcbiAgICAgIG0uZHVyYXRpb24gPSBzdGFydFRpbWUgIT09IHVuZGVmaW5lZCA/IGV2ZW50LnRpbWVzdGFtcCAtIHN0YXJ0VGltZSA6IDA7XG4gICAgfVxuICAgIHRoaXMuc3RhZ2VTdGFydFRpbWVzLmRlbGV0ZShldmVudC5ydW50aW1lU3RhZ2VJZCk7XG4gIH1cblxuICAvKiogQWdncmVnYXRlZCBtZXRyaWNzIOKAlCBjb21wdXRlcyB0b3RhbHMgb24gdGhlIGZseSBmcm9tIHBlci1zdGVwIGRhdGEgKGJhY2t3YXJkIGNvbXBhdGlibGUpLiAqL1xuICBnZXRNZXRyaWNzKCk6IEFnZ3JlZ2F0ZWRNZXRyaWNzIHtcbiAgICBjb25zdCBieU5hbWUgPSBuZXcgTWFwPHN0cmluZywgU3RhZ2VNZXRyaWNzPigpO1xuXG4gICAgY29uc3QgdG90YWxEdXJhdGlvbiA9IHRoaXMuYWdncmVnYXRlKChzdW0sIG0pID0+IHN1bSArIG0uZHVyYXRpb24sIDApO1xuICAgIGNvbnN0IHRvdGFsUmVhZHMgPSB0aGlzLmFnZ3JlZ2F0ZSgoc3VtLCBtKSA9PiBzdW0gKyBtLnJlYWRDb3VudCwgMCk7XG4gICAgY29uc3QgdG90YWxXcml0ZXMgPSB0aGlzLmFnZ3JlZ2F0ZSgoc3VtLCBtKSA9PiBzdW0gKyBtLndyaXRlQ291bnQsIDApO1xuICAgIGNvbnN0IHRvdGFsQ29tbWl0cyA9IHRoaXMuYWdncmVnYXRlKChzdW0sIG0pID0+IHN1bSArIG0uY29tbWl0Q291bnQsIDApO1xuICAgIGNvbnN0IHRvdGFsUGF1c2VzID0gdGhpcy5hZ2dyZWdhdGUoKHN1bSwgbSkgPT4gc3VtICsgbS5wYXVzZUNvdW50LCAwKTtcblxuICAgIC8vIEdyb3VwIGJ5IHN0YWdlTmFtZSBmb3IgYmFja3dhcmQgY29tcGF0XG4gICAgZm9yIChjb25zdCBtIG9mIHRoaXMudmFsdWVzKCkpIHtcbiAgICAgIGNvbnN0IGV4aXN0aW5nID0gYnlOYW1lLmdldChtLnN0YWdlTmFtZSk7XG4gICAgICBpZiAoZXhpc3RpbmcpIHtcbiAgICAgICAgZXhpc3RpbmcucmVhZENvdW50ICs9IG0ucmVhZENvdW50O1xuICAgICAgICBleGlzdGluZy53cml0ZUNvdW50ICs9IG0ud3JpdGVDb3VudDtcbiAgICAgICAgZXhpc3RpbmcuY29tbWl0Q291bnQgKz0gbS5jb21taXRDb3VudDtcbiAgICAgICAgZXhpc3RpbmcucGF1c2VDb3VudCArPSBtLnBhdXNlQ291bnQ7XG4gICAgICAgIGV4aXN0aW5nLnRvdGFsRHVyYXRpb24gKz0gbS5kdXJhdGlvbjtcbiAgICAgICAgZXhpc3RpbmcuaW52b2NhdGlvbkNvdW50Kys7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBieU5hbWUuc2V0KG0uc3RhZ2VOYW1lLCB7XG4gICAgICAgICAgc3RhZ2VOYW1lOiBtLnN0YWdlTmFtZSxcbiAgICAgICAgICByZWFkQ291bnQ6IG0ucmVhZENvdW50LFxuICAgICAgICAgIHdyaXRlQ291bnQ6IG0ud3JpdGVDb3VudCxcbiAgICAgICAgICBjb21taXRDb3VudDogbS5jb21taXRDb3VudCxcbiAgICAgICAgICBwYXVzZUNvdW50OiBtLnBhdXNlQ291bnQsXG4gICAgICAgICAgdG90YWxEdXJhdGlvbjogbS5kdXJhdGlvbixcbiAgICAgICAgICBpbnZvY2F0aW9uQ291bnQ6IDEsXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB7IHRvdGFsRHVyYXRpb24sIHRvdGFsUmVhZHMsIHRvdGFsV3JpdGVzLCB0b3RhbENvbW1pdHMsIHRvdGFsUGF1c2VzLCBzdGFnZU1ldHJpY3M6IGJ5TmFtZSB9O1xuICB9XG5cbiAgLyoqIEdldCBhZ2dyZWdhdGVkIG1ldHJpY3MgZm9yIGEgc3BlY2lmaWMgc3RhZ2UgbmFtZSAoYmFja3dhcmQgY29tcGF0aWJsZSkuICovXG4gIGdldFN0YWdlTWV0cmljcyhzdGFnZU5hbWU6IHN0cmluZyk6IFN0YWdlTWV0cmljcyB8IHVuZGVmaW5lZCB7XG4gICAgY29uc3QgbWV0cmljcyA9IHRoaXMuZ2V0TWV0cmljcygpO1xuICAgIHJldHVybiBtZXRyaWNzLnN0YWdlTWV0cmljcy5nZXQoc3RhZ2VOYW1lKTtcbiAgfVxuXG4gIHRvU25hcHNob3QoKSB7XG4gICAgY29uc3QgbWV0cmljcyA9IHRoaXMuZ2V0TWV0cmljcygpO1xuICAgIC8vIEV4cG9zZSBwZXItc3RlcCBkYXRhIGtleWVkIGJ5IHJ1bnRpbWVTdGFnZUlkIChmb3IgdGltZS10cmF2ZWwgVUkpXG4gICAgLy8gYWxvbmdzaWRlIHRoZSBhZ2dyZWdhdGVkIHRvdGFsc1xuICAgIGNvbnN0IHN0ZXBzOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiA9IHt9O1xuICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIHRoaXMuZ2V0TWFwKCkpIHtcbiAgICAgIHN0ZXBzW2tleV0gPSB2YWx1ZTtcbiAgICB9XG4gICAgcmV0dXJuIHtcbiAgICAgIG5hbWU6ICdNZXRyaWNzJyxcbiAgICAgIGRlc2NyaXB0aW9uOiAnQWdncmVnYXRvciAoS2V5ZWRTdG9yZSkg4oCUIHBlci1zdGVwIHRpbWluZyBhbmQgSS9PIGNvdW50cycsXG4gICAgICBwcmVmZXJyZWRPcGVyYXRpb246IHRoaXMucHJlZmVycmVkT3BlcmF0aW9uLFxuICAgICAgZGF0YToge1xuICAgICAgICBudW1lcmljRmllbGQ6ICdyZWFkQ291bnQnLFxuICAgICAgICBncmFuZFRvdGFsOiBtZXRyaWNzLnRvdGFsUmVhZHMsXG4gICAgICAgIHRvdGFsRHVyYXRpb246IG1ldHJpY3MudG90YWxEdXJhdGlvbixcbiAgICAgICAgdG90YWxSZWFkczogbWV0cmljcy50b3RhbFJlYWRzLFxuICAgICAgICB0b3RhbFdyaXRlczogbWV0cmljcy50b3RhbFdyaXRlcyxcbiAgICAgICAgdG90YWxDb21taXRzOiBtZXRyaWNzLnRvdGFsQ29tbWl0cyxcbiAgICAgICAgdG90YWxQYXVzZXM6IG1ldHJpY3MudG90YWxQYXVzZXMsXG4gICAgICAgIHN0ZXBzLFxuICAgICAgfSxcbiAgICB9O1xuICB9XG5cbiAgLyoqIENsZWFyIGFsbCBzdGF0ZSDigJQgY2FsbGVkIGJ5IGV4ZWN1dG9yIGJlZm9yZSBlYWNoIHJ1bigpLiAqL1xuICBjbGVhcigpOiB2b2lkIHtcbiAgICB0aGlzLnN0b3JlLmNsZWFyKCk7XG4gICAgdGhpcy5zdGFnZVN0YXJ0VGltZXMuY2xlYXIoKTtcbiAgfVxuXG4gIC8qKiBBbGlhcyBmb3IgY2xlYXIoKSAoYmFja3dhcmQgY29tcGF0KS4gKi9cbiAgcmVzZXQoKTogdm9pZCB7XG4gICAgdGhpcy5jbGVhcigpO1xuICB9XG59XG4iXX0=
@@ -0,0 +1,67 @@
1
+ "use strict";
2
+ /**
3
+ * The scope ↔ engine protocol. A user-facing scope may be a strict schema
4
+ * proxy: asking it for an infrastructure member is a state access, not a
5
+ * capability check. Registration keeps that boundary entirely out of band.
6
+ *
7
+ * This module owns identity and capabilities, not their implementation.
8
+ * ScopeFacade owns recording, redaction and state access; custom scopes may
9
+ * explicitly supply a smaller port (including `{}` for data-only scopes).
10
+ */
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.requireDecisionScopeRuntime = exports.requireScopeRuntime = exports.scopeRuntimeFor = exports.registerScopeRuntime = void 0;
13
+ const runtimes = new WeakMap();
14
+ function isObject(value) {
15
+ return (typeof value === 'object' && value !== null) || typeof value === 'function';
16
+ }
17
+ /**
18
+ * Register a custom scope's engine-facing port and return the SAME scope.
19
+ * Registration never reads, writes or enumerates properties on `scope`.
20
+ * Re-registering explicitly replaces its binding. The descriptor is copied
21
+ * and frozen; the target itself remains live and belongs to its provider.
22
+ *
23
+ * @example
24
+ * const facade = new ScopeFacade(context, stageName, input, env);
25
+ * return registerScopeRuntime(myProxy, { target: facade, handlesAssignments: true });
26
+ */
27
+ function registerScopeRuntime(scope, runtime) {
28
+ if (!isObject(scope))
29
+ throw new TypeError('registerScopeRuntime: scope must be an object');
30
+ if (!runtime || !isObject(runtime.target) || typeof runtime.handlesAssignments !== 'boolean') {
31
+ throw new TypeError('registerScopeRuntime: provide a target port and boolean handlesAssignments');
32
+ }
33
+ if (runtime.setBreak !== undefined && typeof runtime.setBreak !== 'function') {
34
+ throw new TypeError('registerScopeRuntime: setBreak must be a function when supplied');
35
+ }
36
+ runtimes.set(scope, Object.freeze({
37
+ target: runtime.target,
38
+ handlesAssignments: runtime.handlesAssignments,
39
+ setBreak: runtime.setBreak,
40
+ }));
41
+ return scope;
42
+ }
43
+ exports.registerScopeRuntime = registerScopeRuntime;
44
+ /** @internal Optional only for wrappers that also work outside the engine. */
45
+ function scopeRuntimeFor(scope) {
46
+ return isObject(scope) ? runtimes.get(scope) : undefined;
47
+ }
48
+ exports.scopeRuntimeFor = scopeRuntimeFor;
49
+ const UNREGISTERED = '[footprint] Unregistered scope. Custom scope factories must call registerScopeRuntime(scope, ' +
50
+ '{ target, handlesAssignments }) from footprintjs/advanced. ScopeFacade and built-in scope factories register automatically.';
51
+ const UNREGISTERED_DECISION = "[footprint] decide()/select() needs the stage's scope (the object your stage function receives), " +
52
+ 'not a plain object. A hand-built scope must be registered with registerScopeRuntime(scope, ' +
53
+ '{ target, handlesAssignments }) from footprintjs/advanced.';
54
+ /** @internal No method-name guessing: a missing registration is an explicit migration error. */
55
+ function requireScopeRuntime(scope, message = UNREGISTERED) {
56
+ const runtime = scopeRuntimeFor(scope);
57
+ if (runtime)
58
+ return runtime;
59
+ throw new TypeError(message);
60
+ }
61
+ exports.requireScopeRuntime = requireScopeRuntime;
62
+ /** @internal decide()/select() asked outside a stage: name THEM, not the custom-factory migration. */
63
+ function requireDecisionScopeRuntime(scope) {
64
+ return requireScopeRuntime(scope, UNREGISTERED_DECISION);
65
+ }
66
+ exports.requireDecisionScopeRuntime = requireDecisionScopeRuntime;
67
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicnVudGltZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9saWIvc2NvcGUvcnVudGltZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7Ozs7Ozs7O0dBUUc7OztBQTJCSCxNQUFNLFFBQVEsR0FBRyxJQUFJLE9BQU8sRUFBa0MsQ0FBQztBQUUvRCxTQUFTLFFBQVEsQ0FBQyxLQUFjO0lBQzlCLE9BQU8sQ0FBQyxPQUFPLEtBQUssS0FBSyxRQUFRLElBQUksS0FBSyxLQUFLLElBQUksQ0FBQyxJQUFJLE9BQU8sS0FBSyxLQUFLLFVBQVUsQ0FBQztBQUN0RixDQUFDO0FBRUQ7Ozs7Ozs7OztHQVNHO0FBQ0gsU0FBZ0Isb0JBQW9CLENBQW1CLEtBQVEsRUFBRSxPQUFxQjtJQUNwRixJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQztRQUFFLE1BQU0sSUFBSSxTQUFTLENBQUMsK0NBQStDLENBQUMsQ0FBQztJQUMzRixJQUFJLENBQUMsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsSUFBSSxPQUFPLE9BQU8sQ0FBQyxrQkFBa0IsS0FBSyxTQUFTLEVBQUUsQ0FBQztRQUM3RixNQUFNLElBQUksU0FBUyxDQUFDLDRFQUE0RSxDQUFDLENBQUM7SUFDcEcsQ0FBQztJQUNELElBQUksT0FBTyxDQUFDLFFBQVEsS0FBSyxTQUFTLElBQUksT0FBTyxPQUFPLENBQUMsUUFBUSxLQUFLLFVBQVUsRUFBRSxDQUFDO1FBQzdFLE1BQU0sSUFBSSxTQUFTLENBQUMsaUVBQWlFLENBQUMsQ0FBQztJQUN6RixDQUFDO0lBQ0QsUUFBUSxDQUFDLEdBQUcsQ0FDVixLQUFLLEVBQ0wsTUFBTSxDQUFDLE1BQU0sQ0FBQztRQUNaLE1BQU0sRUFBRSxPQUFPLENBQUMsTUFBTTtRQUN0QixrQkFBa0IsRUFBRSxPQUFPLENBQUMsa0JBQWtCO1FBQzlDLFFBQVEsRUFBRSxPQUFPLENBQUMsUUFBUTtLQUMzQixDQUFDLENBQ0gsQ0FBQztJQUNGLE9BQU8sS0FBSyxDQUFDO0FBQ2YsQ0FBQztBQWpCRCxvREFpQkM7QUFFRCw4RUFBOEU7QUFDOUUsU0FBZ0IsZUFBZSxDQUFDLEtBQWM7SUFDNUMsT0FBTyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQztBQUMzRCxDQUFDO0FBRkQsMENBRUM7QUFFRCxNQUFNLFlBQVksR0FDaEIsK0ZBQStGO0lBQy9GLDZIQUE2SCxDQUFDO0FBRWhJLE1BQU0scUJBQXFCLEdBQ3pCLG1HQUFtRztJQUNuRyw2RkFBNkY7SUFDN0YsNERBQTRELENBQUM7QUFFL0QsZ0dBQWdHO0FBQ2hHLFNBQWdCLG1CQUFtQixDQUFDLEtBQWMsRUFBRSxVQUFrQixZQUFZO0lBQ2hGLE1BQU0sT0FBTyxHQUFHLGVBQWUsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUN2QyxJQUFJLE9BQU87UUFBRSxPQUFPLE9BQU8sQ0FBQztJQUM1QixNQUFNLElBQUksU0FBUyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0FBQy9CLENBQUM7QUFKRCxrREFJQztBQUVELHNHQUFzRztBQUN0RyxTQUFnQiwyQkFBMkIsQ0FBQyxLQUFjO0lBQ3hELE9BQU8sbUJBQW1CLENBQUMsS0FBSyxFQUFFLHFCQUFxQixDQUFDLENBQUM7QUFDM0QsQ0FBQztBQUZELGtFQUVDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBUaGUgc2NvcGUg4oaUIGVuZ2luZSBwcm90b2NvbC4gQSB1c2VyLWZhY2luZyBzY29wZSBtYXkgYmUgYSBzdHJpY3Qgc2NoZW1hXG4gKiBwcm94eTogYXNraW5nIGl0IGZvciBhbiBpbmZyYXN0cnVjdHVyZSBtZW1iZXIgaXMgYSBzdGF0ZSBhY2Nlc3MsIG5vdCBhXG4gKiBjYXBhYmlsaXR5IGNoZWNrLiBSZWdpc3RyYXRpb24ga2VlcHMgdGhhdCBib3VuZGFyeSBlbnRpcmVseSBvdXQgb2YgYmFuZC5cbiAqXG4gKiBUaGlzIG1vZHVsZSBvd25zIGlkZW50aXR5IGFuZCBjYXBhYmlsaXRpZXMsIG5vdCB0aGVpciBpbXBsZW1lbnRhdGlvbi5cbiAqIFNjb3BlRmFjYWRlIG93bnMgcmVjb3JkaW5nLCByZWRhY3Rpb24gYW5kIHN0YXRlIGFjY2VzczsgY3VzdG9tIHNjb3BlcyBtYXlcbiAqIGV4cGxpY2l0bHkgc3VwcGx5IGEgc21hbGxlciBwb3J0IChpbmNsdWRpbmcgYHt9YCBmb3IgZGF0YS1vbmx5IHNjb3BlcykuXG4gKi9cblxuaW1wb3J0IHR5cGUgeyBSZWRhY3Rpb25Qb2xpY3ksIFNjb3BlUmVjb3JkZXIgfSBmcm9tICcuL3R5cGVzLmpzJztcblxuLyoqIEVuZ2luZS1mYWNpbmcgY2FwYWJpbGl0aWVzLiBOZXZlciB1c2UgYSBzdHJpY3QgdXNlci1maWVsZCBwcm94eSBhcyB0aGlzIHBvcnQuICovXG5leHBvcnQgaW50ZXJmYWNlIFNjb3BlUnVudGltZVRhcmdldCB7XG4gIGF0dGFjaFNjb3BlUmVjb3JkZXI/KHJlY29yZGVyOiBTY29wZVJlY29yZGVyKTogdm9pZDtcbiAgZGV0YWNoU2NvcGVSZWNvcmRlcj8ocmVjb3JkZXJJZDogc3RyaW5nKTogdm9pZDtcbiAgZ2V0U2NvcGVSZWNvcmRlcnM/KCk6IFNjb3BlUmVjb3JkZXJbXTtcbiAgdXNlU2hhcmVkUmVkYWN0ZWRLZXlzPyhrZXlzOiBTZXQ8c3RyaW5nPik6IHZvaWQ7XG4gIHVzZVJlZGFjdGlvblBvbGljeT8ocG9saWN5OiBSZWRhY3Rpb25Qb2xpY3kpOiB2b2lkO1xuICBnZXRSZWRhY3RlZEtleXM/KCk6IFNldDxzdHJpbmc+O1xuICBub3RpZnlTdGFnZVN0YXJ0PygpOiB2b2lkO1xuICBub3RpZnlTdGFnZUVuZD8oZHVyYXRpb24/OiBudW1iZXIpOiB2b2lkO1xuICBub3RpZnlQYXVzZT8oZGF0YT86IHVua25vd24pOiB2b2lkO1xuICBnZXRWYWx1ZT8oa2V5Pzogc3RyaW5nKTogdW5rbm93bjtcbiAgc2V0VmFsdWU/KGtleTogc3RyaW5nLCB2YWx1ZTogdW5rbm93biwgc2hvdWxkUmVkYWN0PzogYm9vbGVhbiwgZGVzY3JpcHRpb24/OiBzdHJpbmcpOiB2b2lkO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFNjb3BlUnVudGltZSB7XG4gIHJlYWRvbmx5IHRhcmdldDogU2NvcGVSdW50aW1lVGFyZ2V0O1xuICAvKiogVGhlIHNjb3BlIGFscmVhZHkgcm91dGVzIHByb3BlcnR5IGFzc2lnbm1lbnRzIGludG8gbWFuYWdlZCBzdGF0ZS4gKi9cbiAgcmVhZG9ubHkgaGFuZGxlc0Fzc2lnbm1lbnRzOiBib29sZWFuO1xuICAvKiogSW5zdGFsbCB0aGlzIGV4ZWN1dGlvbidzIGJyZWFrIGNhbGxiYWNrLCBpZiB0aGUgc2NvcGUgZXhwb3NlcyBvbmUuICovXG4gIHJlYWRvbmx5IHNldEJyZWFrPzogKGJyZWFrUGlwZWxpbmU6IChyZWFzb24/OiBzdHJpbmcpID0+IHZvaWQpID0+IHZvaWQ7XG59XG5cbmNvbnN0IHJ1bnRpbWVzID0gbmV3IFdlYWtNYXA8b2JqZWN0LCBSZWFkb25seTxTY29wZVJ1bnRpbWU+PigpO1xuXG5mdW5jdGlvbiBpc09iamVjdCh2YWx1ZTogdW5rbm93bik6IHZhbHVlIGlzIG9iamVjdCB7XG4gIHJldHVybiAodHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJiB2YWx1ZSAhPT0gbnVsbCkgfHwgdHlwZW9mIHZhbHVlID09PSAnZnVuY3Rpb24nO1xufVxuXG4vKipcbiAqIFJlZ2lzdGVyIGEgY3VzdG9tIHNjb3BlJ3MgZW5naW5lLWZhY2luZyBwb3J0IGFuZCByZXR1cm4gdGhlIFNBTUUgc2NvcGUuXG4gKiBSZWdpc3RyYXRpb24gbmV2ZXIgcmVhZHMsIHdyaXRlcyBvciBlbnVtZXJhdGVzIHByb3BlcnRpZXMgb24gYHNjb3BlYC5cbiAqIFJlLXJlZ2lzdGVyaW5nIGV4cGxpY2l0bHkgcmVwbGFjZXMgaXRzIGJpbmRpbmcuIFRoZSBkZXNjcmlwdG9yIGlzIGNvcGllZFxuICogYW5kIGZyb3plbjsgdGhlIHRhcmdldCBpdHNlbGYgcmVtYWlucyBsaXZlIGFuZCBiZWxvbmdzIHRvIGl0cyBwcm92aWRlci5cbiAqXG4gKiBAZXhhbXBsZVxuICogY29uc3QgZmFjYWRlID0gbmV3IFNjb3BlRmFjYWRlKGNvbnRleHQsIHN0YWdlTmFtZSwgaW5wdXQsIGVudik7XG4gKiByZXR1cm4gcmVnaXN0ZXJTY29wZVJ1bnRpbWUobXlQcm94eSwgeyB0YXJnZXQ6IGZhY2FkZSwgaGFuZGxlc0Fzc2lnbm1lbnRzOiB0cnVlIH0pO1xuICovXG5leHBvcnQgZnVuY3Rpb24gcmVnaXN0ZXJTY29wZVJ1bnRpbWU8VCBleHRlbmRzIG9iamVjdD4oc2NvcGU6IFQsIHJ1bnRpbWU6IFNjb3BlUnVudGltZSk6IFQge1xuICBpZiAoIWlzT2JqZWN0KHNjb3BlKSkgdGhyb3cgbmV3IFR5cGVFcnJvcigncmVnaXN0ZXJTY29wZVJ1bnRpbWU6IHNjb3BlIG11c3QgYmUgYW4gb2JqZWN0Jyk7XG4gIGlmICghcnVudGltZSB8fCAhaXNPYmplY3QocnVudGltZS50YXJnZXQpIHx8IHR5cGVvZiBydW50aW1lLmhhbmRsZXNBc3NpZ25tZW50cyAhPT0gJ2Jvb2xlYW4nKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcigncmVnaXN0ZXJTY29wZVJ1bnRpbWU6IHByb3ZpZGUgYSB0YXJnZXQgcG9ydCBhbmQgYm9vbGVhbiBoYW5kbGVzQXNzaWdubWVudHMnKTtcbiAgfVxuICBpZiAocnVudGltZS5zZXRCcmVhayAhPT0gdW5kZWZpbmVkICYmIHR5cGVvZiBydW50aW1lLnNldEJyZWFrICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcigncmVnaXN0ZXJTY29wZVJ1bnRpbWU6IHNldEJyZWFrIG11c3QgYmUgYSBmdW5jdGlvbiB3aGVuIHN1cHBsaWVkJyk7XG4gIH1cbiAgcnVudGltZXMuc2V0KFxuICAgIHNjb3BlLFxuICAgIE9iamVjdC5mcmVlemUoe1xuICAgICAgdGFyZ2V0OiBydW50aW1lLnRhcmdldCxcbiAgICAgIGhhbmRsZXNBc3NpZ25tZW50czogcnVudGltZS5oYW5kbGVzQXNzaWdubWVudHMsXG4gICAgICBzZXRCcmVhazogcnVudGltZS5zZXRCcmVhayxcbiAgICB9KSxcbiAgKTtcbiAgcmV0dXJuIHNjb3BlO1xufVxuXG4vKiogQGludGVybmFsIE9wdGlvbmFsIG9ubHkgZm9yIHdyYXBwZXJzIHRoYXQgYWxzbyB3b3JrIG91dHNpZGUgdGhlIGVuZ2luZS4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzY29wZVJ1bnRpbWVGb3Ioc2NvcGU6IHVua25vd24pOiBSZWFkb25seTxTY29wZVJ1bnRpbWU+IHwgdW5kZWZpbmVkIHtcbiAgcmV0dXJuIGlzT2JqZWN0KHNjb3BlKSA/IHJ1bnRpbWVzLmdldChzY29wZSkgOiB1bmRlZmluZWQ7XG59XG5cbmNvbnN0IFVOUkVHSVNURVJFRCA9XG4gICdbZm9vdHByaW50XSBVbnJlZ2lzdGVyZWQgc2NvcGUuIEN1c3RvbSBzY29wZSBmYWN0b3JpZXMgbXVzdCBjYWxsIHJlZ2lzdGVyU2NvcGVSdW50aW1lKHNjb3BlLCAnICtcbiAgJ3sgdGFyZ2V0LCBoYW5kbGVzQXNzaWdubWVudHMgfSkgZnJvbSBmb290cHJpbnRqcy9hZHZhbmNlZC4gU2NvcGVGYWNhZGUgYW5kIGJ1aWx0LWluIHNjb3BlIGZhY3RvcmllcyByZWdpc3RlciBhdXRvbWF0aWNhbGx5Lic7XG5cbmNvbnN0IFVOUkVHSVNURVJFRF9ERUNJU0lPTiA9XG4gIFwiW2Zvb3RwcmludF0gZGVjaWRlKCkvc2VsZWN0KCkgbmVlZHMgdGhlIHN0YWdlJ3Mgc2NvcGUgKHRoZSBvYmplY3QgeW91ciBzdGFnZSBmdW5jdGlvbiByZWNlaXZlcyksIFwiICtcbiAgJ25vdCBhIHBsYWluIG9iamVjdC4gQSBoYW5kLWJ1aWx0IHNjb3BlIG11c3QgYmUgcmVnaXN0ZXJlZCB3aXRoIHJlZ2lzdGVyU2NvcGVSdW50aW1lKHNjb3BlLCAnICtcbiAgJ3sgdGFyZ2V0LCBoYW5kbGVzQXNzaWdubWVudHMgfSkgZnJvbSBmb290cHJpbnRqcy9hZHZhbmNlZC4nO1xuXG4vKiogQGludGVybmFsIE5vIG1ldGhvZC1uYW1lIGd1ZXNzaW5nOiBhIG1pc3NpbmcgcmVnaXN0cmF0aW9uIGlzIGFuIGV4cGxpY2l0IG1pZ3JhdGlvbiBlcnJvci4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZXF1aXJlU2NvcGVSdW50aW1lKHNjb3BlOiB1bmtub3duLCBtZXNzYWdlOiBzdHJpbmcgPSBVTlJFR0lTVEVSRUQpOiBSZWFkb25seTxTY29wZVJ1bnRpbWU+IHtcbiAgY29uc3QgcnVudGltZSA9IHNjb3BlUnVudGltZUZvcihzY29wZSk7XG4gIGlmIChydW50aW1lKSByZXR1cm4gcnVudGltZTtcbiAgdGhyb3cgbmV3IFR5cGVFcnJvcihtZXNzYWdlKTtcbn1cblxuLyoqIEBpbnRlcm5hbCBkZWNpZGUoKS9zZWxlY3QoKSBhc2tlZCBvdXRzaWRlIGEgc3RhZ2U6IG5hbWUgVEhFTSwgbm90IHRoZSBjdXN0b20tZmFjdG9yeSBtaWdyYXRpb24uICovXG5leHBvcnQgZnVuY3Rpb24gcmVxdWlyZURlY2lzaW9uU2NvcGVSdW50aW1lKHNjb3BlOiB1bmtub3duKTogUmVhZG9ubHk8U2NvcGVSdW50aW1lPiB7XG4gIHJldHVybiByZXF1aXJlU2NvcGVSdW50aW1lKHNjb3BlLCBVTlJFR0lTVEVSRURfREVDSVNJT04pO1xufVxuIl19
@@ -5,13 +5,24 @@
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
6
  exports.defineScopeFromZod = void 0;
7
7
  const baseStateCompatible_js_1 = require("../../providers/baseStateCompatible.js");
8
+ const ScopeFacade_js_1 = require("../../ScopeFacade.js");
8
9
  const scopeFactory_js_1 = require("./scopeFactory.js");
9
10
  function defineScopeFromZod(schema, opts) {
11
+ const createProxy = (0, scopeFactory_js_1.prepareZodScope)(schema, baseStateCompatible_js_1.SCOPE_CONVENIENCE_METHODS);
10
12
  const strict = opts?.strict ?? 'warn';
11
- return (ctx, stageName, readOnly) => {
12
- const proxy = (0, scopeFactory_js_1.createScopeProxyFromZod)(ctx, schema, strict, readOnly);
13
- return (0, baseStateCompatible_js_1.attachScopeMethods)(proxy, ctx, stageName, readOnly);
13
+ return (context, stageName, readOnly, executionEnv) => {
14
+ const facade = new ScopeFacade_js_1.ScopeFacade(context, stageName, readOnly, executionEnv);
15
+ const access = {
16
+ getValue: (path, key) => facade.getValueAt(path, key),
17
+ setObject: (path, key, value, redact, description) => facade.setValueAt(path, key, value, redact, description),
18
+ updateObject: (path, key, value, description) => facade.updateValueAt(path, key, value, description),
19
+ addLog: (key, value) => facade.addDebugInfo(key, value),
20
+ addError: (key, value) => facade.addErrorInfo(key, value),
21
+ };
22
+ // Construction is not an argument read: mark this dependency only on actual access.
23
+ const proxy = createProxy(access, strict, () => facade.getArgs());
24
+ return (0, baseStateCompatible_js_1.attachFacadeMethods)(proxy, facade);
14
25
  };
15
26
  }
16
27
  exports.defineScopeFromZod = defineScopeFromZod;
17
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVmaW5lU2NvcGVGcm9tWm9kLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi9zY29wZS9zdGF0ZS96b2QvZGVmaW5lU2NvcGVGcm9tWm9kLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQTs7R0FFRzs7O0FBSUgsbUZBQTRFO0FBRTVFLHVEQUE0RDtBQU01RCxTQUFnQixrQkFBa0IsQ0FDaEMsTUFBUyxFQUNULElBQXlCO0lBRXpCLE1BQU0sTUFBTSxHQUFHLElBQUksRUFBRSxNQUFNLElBQUksTUFBTSxDQUFDO0lBQ3RDLE9BQU8sQ0FBQyxHQUFxQixFQUFFLFNBQWlCLEVBQUUsUUFBa0IsRUFBRSxFQUFFO1FBQ3RFLE1BQU0sS0FBSyxHQUFHLElBQUEseUNBQXVCLEVBQUMsR0FBRyxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsUUFBUSxDQUFDLENBQUM7UUFDckUsT0FBTyxJQUFBLDJDQUFrQixFQUFDLEtBQUssRUFBRSxHQUFHLEVBQUUsU0FBUyxFQUFFLFFBQVEsQ0FBQyxDQUFDO0lBQzdELENBQUMsQ0FBQztBQUNKLENBQUM7QUFURCxnREFTQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogZGVmaW5lU2NvcGVGcm9tWm9kIOKAlCBCdWlsZCBhIFNjb3BlRmFjdG9yeSBmcm9tIGEgWm9kIG9iamVjdCBzY2hlbWFcbiAqL1xuXG5pbXBvcnQgeyB6IH0gZnJvbSAnem9kJztcblxuaW1wb3J0IHsgYXR0YWNoU2NvcGVNZXRob2RzIH0gZnJvbSAnLi4vLi4vcHJvdmlkZXJzL2Jhc2VTdGF0ZUNvbXBhdGlibGUuanMnO1xuaW1wb3J0IHR5cGUgeyBTY29wZUZhY3RvcnksIFN0YWdlQ29udGV4dExpa2UsIFN0cmljdE1vZGUgfSBmcm9tICcuLi8uLi9wcm92aWRlcnMvdHlwZXMuanMnO1xuaW1wb3J0IHsgY3JlYXRlU2NvcGVQcm94eUZyb21ab2QgfSBmcm9tICcuL3Njb3BlRmFjdG9yeS5qcyc7XG5cbmV4cG9ydCB0eXBlIERlZmluZVNjb3BlT3B0aW9ucyA9IHtcbiAgc3RyaWN0PzogU3RyaWN0TW9kZTtcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiBkZWZpbmVTY29wZUZyb21ab2Q8UyBleHRlbmRzIHouWm9kT2JqZWN0PGFueT4+KFxuICBzY2hlbWE6IFMsXG4gIG9wdHM/OiBEZWZpbmVTY29wZU9wdGlvbnMsXG4pOiBTY29wZUZhY3Rvcnk8YW55PiB7XG4gIGNvbnN0IHN0cmljdCA9IG9wdHM/LnN0cmljdCA/PyAnd2Fybic7XG4gIHJldHVybiAoY3R4OiBTdGFnZUNvbnRleHRMaWtlLCBzdGFnZU5hbWU6IHN0cmluZywgcmVhZE9ubHk/OiB1bmtub3duKSA9PiB7XG4gICAgY29uc3QgcHJveHkgPSBjcmVhdGVTY29wZVByb3h5RnJvbVpvZChjdHgsIHNjaGVtYSwgc3RyaWN0LCByZWFkT25seSk7XG4gICAgcmV0dXJuIGF0dGFjaFNjb3BlTWV0aG9kcyhwcm94eSwgY3R4LCBzdGFnZU5hbWUsIHJlYWRPbmx5KTtcbiAgfTtcbn1cbiJdfQ==
28
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVmaW5lU2NvcGVGcm9tWm9kLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi9zY29wZS9zdGF0ZS96b2QvZGVmaW5lU2NvcGVGcm9tWm9kLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQTs7R0FFRzs7O0FBRUgsbUZBQXdHO0FBRXhHLHlEQUFtRDtBQUNuRCx1REFBb0Q7QUFPcEQsU0FBZ0Isa0JBQWtCLENBQUMsTUFBaUIsRUFBRSxJQUF5QjtJQUM3RSxNQUFNLFdBQVcsR0FBRyxJQUFBLGlDQUFlLEVBQUMsTUFBTSxFQUFFLGtEQUF5QixDQUFDLENBQUM7SUFDdkUsTUFBTSxNQUFNLEdBQUcsSUFBSSxFQUFFLE1BQU0sSUFBSSxNQUFNLENBQUM7SUFDdEMsT0FBTyxDQUFDLE9BQU8sRUFBRSxTQUFTLEVBQUUsUUFBUSxFQUFFLFlBQVksRUFBRSxFQUFFO1FBQ3BELE1BQU0sTUFBTSxHQUFHLElBQUksNEJBQVcsQ0FBQyxPQUFPLEVBQUUsU0FBUyxFQUFFLFFBQVEsRUFBRSxZQUFZLENBQUMsQ0FBQztRQUMzRSxNQUFNLE1BQU0sR0FBcUI7WUFDL0IsUUFBUSxFQUFFLENBQUMsSUFBSSxFQUFFLEdBQUcsRUFBRSxFQUFFLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxJQUFJLEVBQUUsR0FBRyxDQUFDO1lBQ3JELFNBQVMsRUFBRSxDQUFDLElBQUksRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxXQUFXLEVBQUUsRUFBRSxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsSUFBSSxFQUFFLEdBQUcsRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLFdBQVcsQ0FBQztZQUM5RyxZQUFZLEVBQUUsQ0FBQyxJQUFJLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRSxXQUFXLEVBQUUsRUFBRSxDQUFDLE1BQU0sQ0FBQyxhQUFhLENBQUMsSUFBSSxFQUFFLEdBQUcsRUFBRSxLQUFLLEVBQUUsV0FBVyxDQUFDO1lBQ3BHLE1BQU0sRUFBRSxDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsRUFBRSxDQUFDLE1BQU0sQ0FBQyxZQUFZLENBQUMsR0FBRyxFQUFFLEtBQUssQ0FBQztZQUN2RCxRQUFRLEVBQUUsQ0FBQyxHQUFHLEVBQUUsS0FBSyxFQUFFLEVBQUUsQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUFDLEdBQUcsRUFBRSxLQUFLLENBQUM7U0FDMUQsQ0FBQztRQUNGLG9GQUFvRjtRQUNwRixNQUFNLEtBQUssR0FBRyxXQUFXLENBQUMsTUFBTSxFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUUsQ0FBQyxNQUFNLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQztRQUNsRSxPQUFPLElBQUEsNENBQW1CLEVBQUMsS0FBSyxFQUFFLE1BQU0sQ0FBQyxDQUFDO0lBQzVDLENBQUMsQ0FBQztBQUNKLENBQUM7QUFoQkQsZ0RBZ0JDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBkZWZpbmVTY29wZUZyb21ab2Qg4oCUIEJ1aWxkIGEgU2NvcGVGYWN0b3J5IGZyb20gYSBab2Qgb2JqZWN0IHNjaGVtYVxuICovXG5cbmltcG9ydCB7IGF0dGFjaEZhY2FkZU1ldGhvZHMsIFNDT1BFX0NPTlZFTklFTkNFX01FVEhPRFMgfSBmcm9tICcuLi8uLi9wcm92aWRlcnMvYmFzZVN0YXRlQ29tcGF0aWJsZS5qcyc7XG5pbXBvcnQgdHlwZSB7IFNjb3BlRmFjdG9yeSwgU3RhZ2VDb250ZXh0TGlrZSwgU3RyaWN0TW9kZSB9IGZyb20gJy4uLy4uL3Byb3ZpZGVycy90eXBlcy5qcyc7XG5pbXBvcnQgeyBTY29wZUZhY2FkZSB9IGZyb20gJy4uLy4uL1Njb3BlRmFjYWRlLmpzJztcbmltcG9ydCB7IHByZXBhcmVab2RTY29wZSB9IGZyb20gJy4vc2NvcGVGYWN0b3J5LmpzJztcbmltcG9ydCB0eXBlIHsgWm9kU2NoZW1hIH0gZnJvbSAnLi91dGlscy92YWxpZGF0ZUhlbHBlci5qcyc7XG5cbmV4cG9ydCB0eXBlIERlZmluZVNjb3BlT3B0aW9ucyA9IHtcbiAgc3RyaWN0PzogU3RyaWN0TW9kZTtcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiBkZWZpbmVTY29wZUZyb21ab2Qoc2NoZW1hOiBab2RTY2hlbWEsIG9wdHM/OiBEZWZpbmVTY29wZU9wdGlvbnMpOiBTY29wZUZhY3Rvcnk8YW55PiB7XG4gIGNvbnN0IGNyZWF0ZVByb3h5ID0gcHJlcGFyZVpvZFNjb3BlKHNjaGVtYSwgU0NPUEVfQ09OVkVOSUVOQ0VfTUVUSE9EUyk7XG4gIGNvbnN0IHN0cmljdCA9IG9wdHM/LnN0cmljdCA/PyAnd2Fybic7XG4gIHJldHVybiAoY29udGV4dCwgc3RhZ2VOYW1lLCByZWFkT25seSwgZXhlY3V0aW9uRW52KSA9PiB7XG4gICAgY29uc3QgZmFjYWRlID0gbmV3IFNjb3BlRmFjYWRlKGNvbnRleHQsIHN0YWdlTmFtZSwgcmVhZE9ubHksIGV4ZWN1dGlvbkVudik7XG4gICAgY29uc3QgYWNjZXNzOiBTdGFnZUNvbnRleHRMaWtlID0ge1xuICAgICAgZ2V0VmFsdWU6IChwYXRoLCBrZXkpID0+IGZhY2FkZS5nZXRWYWx1ZUF0KHBhdGgsIGtleSksXG4gICAgICBzZXRPYmplY3Q6IChwYXRoLCBrZXksIHZhbHVlLCByZWRhY3QsIGRlc2NyaXB0aW9uKSA9PiBmYWNhZGUuc2V0VmFsdWVBdChwYXRoLCBrZXksIHZhbHVlLCByZWRhY3QsIGRlc2NyaXB0aW9uKSxcbiAgICAgIHVwZGF0ZU9iamVjdDogKHBhdGgsIGtleSwgdmFsdWUsIGRlc2NyaXB0aW9uKSA9PiBmYWNhZGUudXBkYXRlVmFsdWVBdChwYXRoLCBrZXksIHZhbHVlLCBkZXNjcmlwdGlvbiksXG4gICAgICBhZGRMb2c6IChrZXksIHZhbHVlKSA9PiBmYWNhZGUuYWRkRGVidWdJbmZvKGtleSwgdmFsdWUpLFxuICAgICAgYWRkRXJyb3I6IChrZXksIHZhbHVlKSA9PiBmYWNhZGUuYWRkRXJyb3JJbmZvKGtleSwgdmFsdWUpLFxuICAgIH07XG4gICAgLy8gQ29uc3RydWN0aW9uIGlzIG5vdCBhbiBhcmd1bWVudCByZWFkOiBtYXJrIHRoaXMgZGVwZW5kZW5jeSBvbmx5IG9uIGFjdHVhbCBhY2Nlc3MuXG4gICAgY29uc3QgcHJveHkgPSBjcmVhdGVQcm94eShhY2Nlc3MsIHN0cmljdCwgKCkgPT4gZmFjYWRlLmdldEFyZ3MoKSk7XG4gICAgcmV0dXJuIGF0dGFjaEZhY2FkZU1ldGhvZHMocHJveHksIGZhY2FkZSk7XG4gIH07XG59XG4iXX0=