@workflow/core 5.0.0-beta.5 → 5.0.0-beta.51

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 (317) hide show
  1. package/README.md +5 -0
  2. package/dist/attribute-changes.d.ts +5 -0
  3. package/dist/attribute-changes.d.ts.map +1 -0
  4. package/dist/attribute-changes.js +25 -0
  5. package/dist/capabilities.d.ts +35 -2
  6. package/dist/capabilities.d.ts.map +1 -1
  7. package/dist/capabilities.js +74 -5
  8. package/dist/capture-stack.d.ts +1 -1
  9. package/dist/capture-stack.js +2 -2
  10. package/dist/class-serialization.d.ts +32 -0
  11. package/dist/class-serialization.d.ts.map +1 -1
  12. package/dist/class-serialization.js +37 -1
  13. package/dist/classify-error.d.ts +19 -3
  14. package/dist/classify-error.d.ts.map +1 -1
  15. package/dist/classify-error.js +98 -6
  16. package/dist/context-violation-error.d.ts +5 -5
  17. package/dist/context-violation-error.d.ts.map +1 -1
  18. package/dist/context-violation-error.js +8 -6
  19. package/dist/create-hook.d.ts +72 -7
  20. package/dist/create-hook.d.ts.map +1 -1
  21. package/dist/create-hook.js +1 -1
  22. package/dist/define-hook.js +2 -2
  23. package/dist/describe-error.d.ts +7 -7
  24. package/dist/describe-error.d.ts.map +1 -1
  25. package/dist/describe-error.js +97 -12
  26. package/dist/encryption.d.ts +38 -4
  27. package/dist/encryption.d.ts.map +1 -1
  28. package/dist/encryption.js +96 -14
  29. package/dist/events-consumer.d.ts +297 -0
  30. package/dist/events-consumer.d.ts.map +1 -1
  31. package/dist/events-consumer.js +673 -42
  32. package/dist/flushable-stream.d.ts +97 -1
  33. package/dist/flushable-stream.d.ts.map +1 -1
  34. package/dist/flushable-stream.js +291 -11
  35. package/dist/global.d.ts +36 -2
  36. package/dist/global.d.ts.map +1 -1
  37. package/dist/global.js +21 -6
  38. package/dist/index.d.ts +2 -1
  39. package/dist/index.d.ts.map +1 -1
  40. package/dist/index.js +3 -2
  41. package/dist/log-format.d.ts +2 -2
  42. package/dist/log-format.js +19 -12
  43. package/dist/logger.d.ts +1 -0
  44. package/dist/logger.d.ts.map +1 -1
  45. package/dist/logger.js +10 -6
  46. package/dist/private.d.ts +226 -9
  47. package/dist/private.d.ts.map +1 -1
  48. package/dist/private.js +626 -7
  49. package/dist/replay-divergence.d.ts +25 -0
  50. package/dist/replay-divergence.d.ts.map +1 -0
  51. package/dist/replay-divergence.js +61 -0
  52. package/dist/replay-payload-cache.d.ts +64 -0
  53. package/dist/replay-payload-cache.d.ts.map +1 -0
  54. package/dist/replay-payload-cache.js +158 -0
  55. package/dist/runtime/compute-instance.d.ts +13 -0
  56. package/dist/runtime/compute-instance.d.ts.map +1 -0
  57. package/dist/runtime/compute-instance.js +14 -0
  58. package/dist/runtime/constants.d.ts +315 -0
  59. package/dist/runtime/constants.d.ts.map +1 -1
  60. package/dist/runtime/constants.js +502 -16
  61. package/dist/runtime/count-step-started-events.d.ts +52 -0
  62. package/dist/runtime/count-step-started-events.d.ts.map +1 -0
  63. package/dist/runtime/count-step-started-events.js +72 -0
  64. package/dist/runtime/deployment-guard.d.ts +99 -0
  65. package/dist/runtime/deployment-guard.d.ts.map +1 -0
  66. package/dist/runtime/deployment-guard.js +154 -0
  67. package/dist/runtime/get-port-lazy.d.ts +15 -0
  68. package/dist/runtime/get-port-lazy.d.ts.map +1 -1
  69. package/dist/runtime/get-port-lazy.js +75 -6
  70. package/dist/runtime/get-world-lazy.d.ts +5 -14
  71. package/dist/runtime/get-world-lazy.d.ts.map +1 -1
  72. package/dist/runtime/get-world-lazy.js +19 -29
  73. package/dist/runtime/helpers.d.ts +415 -29
  74. package/dist/runtime/helpers.d.ts.map +1 -1
  75. package/dist/runtime/helpers.js +686 -57
  76. package/dist/runtime/quickjs-assets.generated.d.ts +14 -0
  77. package/dist/runtime/quickjs-assets.generated.d.ts.map +1 -0
  78. package/dist/runtime/quickjs-assets.generated.js +30 -0
  79. package/dist/runtime/quickjs-entrypoint.d.ts +158 -0
  80. package/dist/runtime/quickjs-entrypoint.d.ts.map +1 -0
  81. package/dist/runtime/quickjs-entrypoint.js +1863 -0
  82. package/dist/runtime/quickjs-log-view.d.ts +129 -0
  83. package/dist/runtime/quickjs-log-view.d.ts.map +1 -0
  84. package/dist/runtime/quickjs-log-view.js +229 -0
  85. package/dist/runtime/quickjs-runtime.d.ts +244 -0
  86. package/dist/runtime/quickjs-runtime.d.ts.map +1 -0
  87. package/dist/runtime/quickjs-runtime.js +2427 -0
  88. package/dist/runtime/quickjs-serde.d.ts +107 -0
  89. package/dist/runtime/quickjs-serde.d.ts.map +1 -0
  90. package/dist/runtime/quickjs-serde.js +2159 -0
  91. package/dist/runtime/replay-budget.d.ts +97 -0
  92. package/dist/runtime/replay-budget.d.ts.map +1 -0
  93. package/dist/runtime/replay-budget.js +139 -0
  94. package/dist/runtime/replay-recovery-reporter.d.ts +36 -0
  95. package/dist/runtime/replay-recovery-reporter.d.ts.map +1 -0
  96. package/dist/runtime/replay-recovery-reporter.js +64 -0
  97. package/dist/runtime/resume-hook.d.ts +91 -8
  98. package/dist/runtime/resume-hook.d.ts.map +1 -1
  99. package/dist/runtime/resume-hook.js +512 -89
  100. package/dist/runtime/resume-latency.d.ts +150 -0
  101. package/dist/runtime/resume-latency.d.ts.map +1 -0
  102. package/dist/runtime/resume-latency.js +155 -0
  103. package/dist/runtime/run-id-time.d.ts +19 -0
  104. package/dist/runtime/run-id-time.d.ts.map +1 -0
  105. package/dist/runtime/run-id-time.js +42 -0
  106. package/dist/runtime/run.d.ts +72 -7
  107. package/dist/runtime/run.d.ts.map +1 -1
  108. package/dist/runtime/run.js +280 -53
  109. package/dist/runtime/runs.d.ts +54 -3
  110. package/dist/runtime/runs.d.ts.map +1 -1
  111. package/dist/runtime/runs.js +126 -16
  112. package/dist/runtime/start.d.ts +101 -2
  113. package/dist/runtime/start.d.ts.map +1 -1
  114. package/dist/runtime/start.js +352 -61
  115. package/dist/runtime/step-executor.d.ts +186 -5
  116. package/dist/runtime/step-executor.d.ts.map +1 -1
  117. package/dist/runtime/step-executor.js +768 -130
  118. package/dist/runtime/step-latency.d.ts +220 -0
  119. package/dist/runtime/step-latency.d.ts.map +1 -0
  120. package/dist/runtime/step-latency.js +215 -0
  121. package/dist/runtime/step-ownership.d.ts +72 -0
  122. package/dist/runtime/step-ownership.d.ts.map +1 -0
  123. package/dist/runtime/step-ownership.js +114 -0
  124. package/dist/runtime/step-single-flight.d.ts +12 -0
  125. package/dist/runtime/step-single-flight.d.ts.map +1 -0
  126. package/dist/runtime/step-single-flight.js +75 -0
  127. package/dist/runtime/suspension-handler.d.ts +247 -7
  128. package/dist/runtime/suspension-handler.d.ts.map +1 -1
  129. package/dist/runtime/suspension-handler.js +1304 -125
  130. package/dist/runtime/unserializable-step.d.ts +34 -0
  131. package/dist/runtime/unserializable-step.d.ts.map +1 -0
  132. package/dist/runtime/unserializable-step.js +52 -0
  133. package/dist/runtime/vm-mode.d.ts +44 -0
  134. package/dist/runtime/vm-mode.d.ts.map +1 -0
  135. package/dist/runtime/vm-mode.js +62 -0
  136. package/dist/runtime/vm-serde-bundle.generated.d.ts +14 -0
  137. package/dist/runtime/vm-serde-bundle.generated.d.ts.map +1 -0
  138. package/dist/runtime/vm-serde-bundle.generated.js +16 -0
  139. package/dist/runtime/wait-continuation.d.ts +106 -0
  140. package/dist/runtime/wait-continuation.d.ts.map +1 -0
  141. package/dist/runtime/wait-continuation.js +136 -0
  142. package/dist/runtime/wait-until.d.ts +18 -0
  143. package/dist/runtime/wait-until.d.ts.map +1 -0
  144. package/dist/runtime/wait-until.js +42 -0
  145. package/dist/runtime/world-compatibility.d.ts +32 -0
  146. package/dist/runtime/world-compatibility.d.ts.map +1 -0
  147. package/dist/runtime/world-compatibility.js +44 -0
  148. package/dist/runtime/world-init.d.ts +17 -42
  149. package/dist/runtime/world-init.d.ts.map +1 -1
  150. package/dist/runtime/world-init.js +18 -43
  151. package/dist/runtime/world.d.ts +14 -2
  152. package/dist/runtime/world.d.ts.map +1 -1
  153. package/dist/runtime/world.js +75 -19
  154. package/dist/runtime.d.ts +10 -6
  155. package/dist/runtime.d.ts.map +1 -1
  156. package/dist/runtime.js +3911 -489
  157. package/dist/sealed-box.d.ts +167 -0
  158. package/dist/sealed-box.d.ts.map +1 -0
  159. package/dist/sealed-box.js +571 -0
  160. package/dist/serialization/client.d.ts +3 -3
  161. package/dist/serialization/client.d.ts.map +1 -1
  162. package/dist/serialization/client.js +8 -4
  163. package/dist/serialization/codec-devalue-vm.d.ts +16 -0
  164. package/dist/serialization/codec-devalue-vm.d.ts.map +1 -0
  165. package/dist/serialization/codec-devalue-vm.js +148 -0
  166. package/dist/serialization/codec-devalue.d.ts +1 -1
  167. package/dist/serialization/codec-devalue.d.ts.map +1 -1
  168. package/dist/serialization/codec-devalue.js +24 -6
  169. package/dist/serialization/codec.d.ts +37 -2
  170. package/dist/serialization/codec.d.ts.map +1 -1
  171. package/dist/serialization/codec.js +2 -2
  172. package/dist/serialization/compression.d.ts +105 -0
  173. package/dist/serialization/compression.d.ts.map +1 -0
  174. package/dist/serialization/compression.js +261 -0
  175. package/dist/serialization/encryption.d.ts +119 -17
  176. package/dist/serialization/encryption.d.ts.map +1 -1
  177. package/dist/serialization/encryption.js +152 -17
  178. package/dist/serialization/errors.d.ts +13 -0
  179. package/dist/serialization/errors.d.ts.map +1 -1
  180. package/dist/serialization/errors.js +20 -2
  181. package/dist/serialization/format.d.ts +6 -6
  182. package/dist/serialization/format.js +7 -7
  183. package/dist/serialization/hardened.d.ts +156 -0
  184. package/dist/serialization/hardened.d.ts.map +1 -0
  185. package/dist/serialization/hardened.js +538 -0
  186. package/dist/serialization/index.d.ts +10 -8
  187. package/dist/serialization/index.d.ts.map +1 -1
  188. package/dist/serialization/index.js +10 -8
  189. package/dist/serialization/reducers/class-vm.d.ts +20 -0
  190. package/dist/serialization/reducers/class-vm.d.ts.map +1 -0
  191. package/dist/serialization/reducers/class-vm.js +77 -0
  192. package/dist/serialization/reducers/class.d.ts.map +1 -1
  193. package/dist/serialization/reducers/class.js +11 -6
  194. package/dist/serialization/reducers/common-vm.d.ts +15 -0
  195. package/dist/serialization/reducers/common-vm.d.ts.map +1 -0
  196. package/dist/serialization/reducers/common-vm.js +616 -0
  197. package/dist/serialization/reducers/common.d.ts +1 -1
  198. package/dist/serialization/reducers/common.d.ts.map +1 -1
  199. package/dist/serialization/reducers/common.js +202 -62
  200. package/dist/serialization/reducers/step-function-vm.d.ts +44 -0
  201. package/dist/serialization/reducers/step-function-vm.d.ts.map +1 -0
  202. package/dist/serialization/reducers/step-function-vm.js +97 -0
  203. package/dist/serialization/reducers/step-function.d.ts.map +1 -1
  204. package/dist/serialization/reducers/step-function.js +25 -9
  205. package/dist/serialization/step.d.ts +4 -4
  206. package/dist/serialization/step.d.ts.map +1 -1
  207. package/dist/serialization/step.js +9 -5
  208. package/dist/serialization/types.d.ts +80 -1
  209. package/dist/serialization/types.d.ts.map +1 -1
  210. package/dist/serialization/types.js +15 -1
  211. package/dist/serialization/workflow-vm.d.ts +29 -0
  212. package/dist/serialization/workflow-vm.d.ts.map +1 -0
  213. package/dist/serialization/workflow-vm.js +74 -0
  214. package/dist/serialization-format.d.ts +64 -8
  215. package/dist/serialization-format.d.ts.map +1 -1
  216. package/dist/serialization-format.js +225 -73
  217. package/dist/serialization.d.ts +262 -34
  218. package/dist/serialization.d.ts.map +1 -1
  219. package/dist/serialization.js +1885 -277
  220. package/dist/set-attributes.d.ts +13 -0
  221. package/dist/set-attributes.d.ts.map +1 -0
  222. package/dist/set-attributes.js +60 -0
  223. package/dist/source-map.d.ts +25 -0
  224. package/dist/source-map.d.ts.map +1 -1
  225. package/dist/source-map.js +154 -10
  226. package/dist/step/context-storage.d.ts +63 -2
  227. package/dist/step/context-storage.d.ts.map +1 -1
  228. package/dist/step/context-storage.js +7 -5
  229. package/dist/step/writable-stream.d.ts +3 -3
  230. package/dist/step/writable-stream.d.ts.map +1 -1
  231. package/dist/step/writable-stream.js +80 -13
  232. package/dist/step.d.ts.map +1 -1
  233. package/dist/step.js +148 -27
  234. package/dist/symbols.d.ts +50 -0
  235. package/dist/symbols.d.ts.map +1 -1
  236. package/dist/symbols.js +51 -1
  237. package/dist/telemetry/semantic-conventions.d.ts +433 -2
  238. package/dist/telemetry/semantic-conventions.d.ts.map +1 -1
  239. package/dist/telemetry/semantic-conventions.js +319 -3
  240. package/dist/telemetry.d.ts +91 -0
  241. package/dist/telemetry.d.ts.map +1 -1
  242. package/dist/telemetry.js +244 -17
  243. package/dist/test-support/orchestrator-context.d.ts +25 -0
  244. package/dist/test-support/orchestrator-context.d.ts.map +1 -0
  245. package/dist/test-support/orchestrator-context.js +107 -0
  246. package/dist/types.d.ts +6 -0
  247. package/dist/types.d.ts.map +1 -1
  248. package/dist/types.js +23 -1
  249. package/dist/util.d.ts +0 -5
  250. package/dist/util.d.ts.map +1 -1
  251. package/dist/util.js +1 -15
  252. package/dist/version.d.ts +1 -1
  253. package/dist/version.d.ts.map +1 -1
  254. package/dist/version.js +2 -2
  255. package/dist/vm/index.d.ts.map +1 -1
  256. package/dist/vm/index.js +84 -14
  257. package/dist/vm/script-cache.d.ts +26 -0
  258. package/dist/vm/script-cache.d.ts.map +1 -0
  259. package/dist/vm/script-cache.js +131 -0
  260. package/dist/vm/uint8array-base64.js +1 -1
  261. package/dist/workflow/abort-controller.d.ts +2 -2
  262. package/dist/workflow/abort-controller.d.ts.map +1 -1
  263. package/dist/workflow/abort-controller.js +88 -21
  264. package/dist/workflow/attribute-dispatcher.d.ts +6 -0
  265. package/dist/workflow/attribute-dispatcher.d.ts.map +1 -0
  266. package/dist/workflow/attribute-dispatcher.js +45 -0
  267. package/dist/workflow/create-hook.d.ts.map +1 -1
  268. package/dist/workflow/create-hook.js +24 -3
  269. package/dist/workflow/get-workflow-metadata.js +2 -2
  270. package/dist/workflow/hook.d.ts.map +1 -1
  271. package/dist/workflow/hook.js +304 -47
  272. package/dist/workflow/index.d.ts +1 -0
  273. package/dist/workflow/index.d.ts.map +1 -1
  274. package/dist/workflow/index.js +2 -1
  275. package/dist/workflow/set-attributes.d.ts +68 -0
  276. package/dist/workflow/set-attributes.d.ts.map +1 -0
  277. package/dist/workflow/set-attributes.js +60 -0
  278. package/dist/workflow/sleep.d.ts.map +1 -1
  279. package/dist/workflow/sleep.js +58 -12
  280. package/dist/workflow/world-init-stub.d.ts +3 -3
  281. package/dist/workflow/world-init-stub.js +4 -4
  282. package/dist/workflow.d.ts +95 -3
  283. package/dist/workflow.d.ts.map +1 -1
  284. package/dist/workflow.js +900 -561
  285. package/docs/api-reference/create-hook.mdx +89 -10
  286. package/docs/api-reference/create-webhook.mdx +16 -15
  287. package/docs/api-reference/define-hook.mdx +35 -33
  288. package/docs/api-reference/fatal-error.mdx +30 -8
  289. package/docs/api-reference/fetch.mdx +14 -10
  290. package/docs/api-reference/get-step-metadata.mdx +2 -2
  291. package/docs/api-reference/get-workflow-metadata.mdx +3 -3
  292. package/docs/api-reference/get-writable.mdx +7 -7
  293. package/docs/api-reference/index.mdx +4 -1
  294. package/docs/api-reference/retryable-error.mdx +1 -1
  295. package/docs/api-reference/set-attributes.mdx +61 -0
  296. package/docs/api-reference/sleep.mdx +4 -4
  297. package/docs/foundations/cancellation.mdx +31 -32
  298. package/docs/foundations/errors-and-retries.mdx +42 -11
  299. package/docs/foundations/hooks.mdx +64 -35
  300. package/docs/foundations/idempotency.mdx +244 -12
  301. package/docs/foundations/index.mdx +1 -23
  302. package/docs/foundations/meta.json +2 -1
  303. package/docs/foundations/serialization.mdx +21 -22
  304. package/docs/foundations/starting-workflows.mdx +106 -30
  305. package/docs/foundations/streaming.mdx +108 -60
  306. package/docs/foundations/versioning.mdx +263 -0
  307. package/docs/foundations/workflows-and-steps.mdx +9 -9
  308. package/docs/how-it-works/cancellation.mdx +63 -63
  309. package/docs/how-it-works/code-transform.mdx +83 -67
  310. package/docs/how-it-works/encryption.mdx +30 -26
  311. package/docs/how-it-works/event-sourcing.mdx +125 -34
  312. package/docs/how-it-works/framework-integrations.mdx +96 -337
  313. package/docs/how-it-works/understanding-directives.mdx +22 -22
  314. package/package.json +24 -15
  315. package/dist/runtime/step-handler.d.ts +0 -2
  316. package/dist/runtime/step-handler.d.ts.map +0 -1
  317. package/dist/runtime/step-handler.js +0 -776
package/dist/global.js CHANGED
@@ -7,23 +7,27 @@ import { pluralize } from '@workflow/utils';
7
7
  * onto the queue.
8
8
  */
9
9
  export class WorkflowSuspension extends Error {
10
+ items;
11
+ /** @deprecated Use `items` instead. */
10
12
  steps;
11
13
  globalThis;
12
14
  stepCount;
13
15
  hookCount;
14
16
  waitCount;
17
+ attributeCount;
15
18
  hookDisposedCount;
16
19
  abortCount;
17
- constructor(stepsInput, global) {
20
+ constructor(itemsInput, global) {
18
21
  // Convert Map to array for iteration and storage
19
- const steps = [...stepsInput.values()];
22
+ const items = [...itemsInput.values()];
20
23
  // Single-pass counting for efficiency
21
24
  let stepCount = 0;
22
25
  let hookCount = 0;
23
26
  let waitCount = 0;
27
+ let attributeCount = 0;
24
28
  let hookDisposedCount = 0;
25
29
  let abortCount = 0;
26
- for (const item of steps) {
30
+ for (const item of items) {
27
31
  if (item.type === 'step')
28
32
  stepCount++;
29
33
  else if (item.type === 'hook') {
@@ -36,6 +40,8 @@ export class WorkflowSuspension extends Error {
36
40
  }
37
41
  else if (item.type === 'wait')
38
42
  waitCount++;
43
+ else if (item.type === 'attribute')
44
+ attributeCount++;
39
45
  }
40
46
  // Build description parts
41
47
  const parts = [];
@@ -48,16 +54,20 @@ export class WorkflowSuspension extends Error {
48
54
  if (waitCount > 0) {
49
55
  parts.push(`${waitCount} ${pluralize('wait', 'waits', waitCount)}`);
50
56
  }
57
+ if (attributeCount > 0) {
58
+ parts.push(`${attributeCount} ${pluralize('attribute write', 'attribute writes', attributeCount)}`);
59
+ }
51
60
  if (hookDisposedCount > 0) {
52
61
  parts.push(`${hookDisposedCount} hook ${pluralize('disposal', 'disposals', hookDisposedCount)}`);
53
62
  }
54
63
  // Determine verb (has/have) and action (run/created/received)
55
- const totalCount = stepCount + hookCount + waitCount + hookDisposedCount;
64
+ const totalCount = stepCount + hookCount + waitCount + attributeCount + hookDisposedCount;
56
65
  const hasOrHave = pluralize('has', 'have', totalCount);
57
66
  // Pick action verb: use "processed" when mixed types are present
58
67
  const typeCount = (stepCount > 0 ? 1 : 0) +
59
68
  (hookCount > 0 ? 1 : 0) +
60
69
  (waitCount > 0 ? 1 : 0) +
70
+ (attributeCount > 0 ? 1 : 0) +
61
71
  (hookDisposedCount > 0 ? 1 : 0);
62
72
  let action;
63
73
  if (typeCount > 1) {
@@ -72,6 +82,9 @@ export class WorkflowSuspension extends Error {
72
82
  else if (waitCount > 0) {
73
83
  action = 'created';
74
84
  }
85
+ else if (attributeCount > 0) {
86
+ action = 'written';
87
+ }
75
88
  else if (hookDisposedCount > 0) {
76
89
  action = 'processed';
77
90
  }
@@ -83,11 +96,13 @@ export class WorkflowSuspension extends Error {
83
96
  : '0 steps have not been run yet'; // Default case for empty array
84
97
  super(description);
85
98
  this.name = 'WorkflowSuspension';
86
- this.steps = steps;
99
+ this.items = items;
100
+ this.steps = items;
87
101
  this.globalThis = global;
88
102
  this.stepCount = stepCount;
89
103
  this.hookCount = hookCount;
90
104
  this.waitCount = waitCount;
105
+ this.attributeCount = attributeCount;
91
106
  this.hookDisposedCount = hookDisposedCount;
92
107
  this.abortCount = abortCount;
93
108
  }
@@ -98,4 +113,4 @@ export class WorkflowSuspension extends Error {
98
113
  export function ENOTSUP() {
99
114
  throw new WorkflowRuntimeError('This API is not available inside a workflow function. Workflow functions run in a deterministic VM; move the call to a step function for full Node.js access.');
100
115
  }
101
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2xvYmFsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2dsb2JhbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUN4RCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFzQzVDOzs7OztHQUtHO0FBQ0gsTUFBTSxPQUFPLGtCQUFtQixTQUFRLEtBQUs7SUFDM0MsS0FBSyxDQUFjO0lBQ25CLFVBQVUsQ0FBb0I7SUFDOUIsU0FBUyxDQUFTO0lBQ2xCLFNBQVMsQ0FBUztJQUNsQixTQUFTLENBQVM7SUFDbEIsaUJBQWlCLENBQVM7SUFDMUIsVUFBVSxDQUFTO0lBRW5CLFlBQVksVUFBa0MsRUFBRSxNQUF5QjtRQUN2RSxpREFBaUQ7UUFDakQsTUFBTSxLQUFLLEdBQUcsQ0FBQyxHQUFHLFVBQVUsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDO1FBRXZDLHNDQUFzQztRQUN0QyxJQUFJLFNBQVMsR0FBRyxDQUFDLENBQUM7UUFDbEIsSUFBSSxTQUFTLEdBQUcsQ0FBQyxDQUFDO1FBQ2xCLElBQUksU0FBUyxHQUFHLENBQUMsQ0FBQztRQUNsQixJQUFJLGlCQUFpQixHQUFHLENBQUMsQ0FBQztRQUMxQixJQUFJLFVBQVUsR0FBRyxDQUFDLENBQUM7UUFDbkIsS0FBSyxNQUFNLElBQUksSUFBSSxLQUFLLEVBQUUsQ0FBQztZQUN6QixJQUFJLElBQUksQ0FBQyxJQUFJLEtBQUssTUFBTTtnQkFBRSxTQUFTLEVBQUUsQ0FBQztpQkFDakMsSUFBSSxJQUFJLENBQUMsSUFBSSxLQUFLLE1BQU0sRUFBRSxDQUFDO2dCQUM5QixJQUFJLElBQUksQ0FBQyxRQUFRO29CQUFFLGlCQUFpQixFQUFFLENBQUM7cUJBQ2xDLElBQUksSUFBSSxDQUFDLGNBQWM7b0JBQUUsVUFBVSxFQUFFLENBQUM7O29CQUN0QyxTQUFTLEVBQUUsQ0FBQztZQUNuQixDQUFD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LENBQUM7UUFDakMsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7UUFDbkIsSUFBSSxDQUFDLFVBQVUsR0FBRyxNQUFNLENBQUM7UUFDekIsSUFBSSxDQUFDLFNBQVMsR0FBRyxTQUFTLENBQUM7UUFDM0IsSUFBSSxDQUFDLFNBQVMsR0FBRyxTQUFTLENBQUM7UUFDM0IsSUFBSSxDQUFDLFNBQVMsR0FBRyxTQUFTLENBQUM7UUFDM0IsSUFBSSxDQUFDLGlCQUFpQixHQUFHLGlCQUFpQixDQUFDO1FBQzNDLElBQUksQ0FBQyxVQUFVLEdBQUcsVUFBVSxDQUFDO0lBQy9CLENBQUM7SUFFRCxNQUFNLENBQUMsRUFBRSxDQUFDLEtBQWM7UUFDdEIsT0FBTyxLQUFLLFlBQVksa0JBQWtCLENBQUM7SUFDN0MsQ0FBQztDQUNGO0FBRUQsTUFBTSxVQUFVLE9BQU87SUFDckIsTUFBTSxJQUFJLG9CQUFvQixDQUM1QiwrSkFBK0osQ0FDaEssQ0FBQztBQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBXb3JrZmxvd1J1bnRpbWVFcnJvciB9IGZyb20gJ0B3b3JrZmxvdy9lcnJvcnMnO1xuaW1wb3J0IHsgcGx1cmFsaXplIH0gZnJvbSAnQHdvcmtmbG93L3V0aWxzJztcbmltcG9ydCB0eXBlIHsgU2VyaWFsaXphYmxlIH0gZnJvbSAnLi9zY2hlbWFzLmpzJztcblxuZXhwb3J0IGludGVyZmFjZSBTdGVwSW52b2NhdGlvblF1ZXVlSXRlbSB7XG4gIHR5cGU6ICdzdGVwJztcbiAgY29ycmVsYXRpb25JZDogc3RyaW5nO1xuICBzdGVwTmFtZTogc3RyaW5nO1xuICBhcmdzOiBTZXJpYWxpemFibGVbXTtcbiAgY2xvc3VyZVZhcnM/OiBSZWNvcmQ8c3RyaW5nLCBTZXJpYWxpemFibGU+O1xuICB0aGlzVmFsPzogU2VyaWFsaXphYmxlO1xuICBoYXNDcmVhdGVkRXZlbnQ/OiBib29sZWFuO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEhvb2tJbnZvY2F0aW9uUXVldWVJdGVtIHtcbiAgdHlwZTogJ2hvb2snO1xuICBjb3JyZWxhdGlvbklkOiBzdHJpbmc7XG4gIHRva2VuOiBzdHJpbmc7XG4gIG1ldGFkYXRhPzogU2VyaWFsaXphYmxlO1xuICBoYXNDcmVhdGVkRXZlbnQ/OiBib29sZWFuO1xuICBkaXNwb3NlZD86IGJvb2xlYW47XG4gIGlzV2ViaG9vaz86IGJvb2xlYW47XG4gIGlzU3lzdGVtPzogYm9vbGVhbjtcbiAgYWJvcnRSZXF1ZXN0ZWQ/OiBib29sZWFuO1xuICBhYm9ydFJlYXNvbj86IHVua25vd247XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgV2FpdEludm9jYXRpb25RdWV1ZUl0ZW0ge1xuICB0eXBlOiAnd2FpdCc7XG4gIGNvcnJlbGF0aW9uSWQ6IHN0cmluZztcbiAgcmVzdW1lQXQ6IERhdGU7XG4gIGhhc0NyZWF0ZWRFdmVudD86IGJvb2xlYW47XG59XG5cbmV4cG9ydCB0eXBlIFF1ZXVlSXRlbSA9XG4gIHwgU3RlcEludm9jYXRpb25RdWV1ZUl0ZW1cbiAgfCBIb29rSW52b2NhdGlvblF1ZXVlSXRlbVxuICB8IFdhaXRJbnZvY2F0aW9uUXVldWVJdGVtO1xuXG4vKipcbiAqIEFuIGVycm9yIHRoYXQgaXMgdGhyb3duIHdoZW4gb25lIG9yIG1vcmUgb3BlcmF0aW9ucyAoc3RlcHMvaG9va3MvZXRjLikgYXJlIGNhbGxlZCBidXQgZG9cbiAqIG5vdCB5ZXQgaGF2ZSBjb3JyZXNwb25kaW5nIGVudHJpZXMgaW4gdGhlIGV2ZW50IGxvZy4gVGhlIHdvcmtmbG93XG4gKiBkaXNwYXRjaGVyIHdpbGwgY2F0Y2ggdGhpcyBlcnJvciBhbmQgcHVzaCB0aGUgb3BlcmF0aW9uc1xuICogb250byB0aGUgcXVldWUuXG4gKi9cbmV4cG9ydCBjbGFzcyBXb3JrZmxvd1N1c3BlbnNpb24gZXh0ZW5kcyBFcnJvciB7XG4gIHN0ZXBzOiBRdWV1ZUl0ZW1bXTtcbiAgZ2xvYmFsVGhpczogdHlwZW9mIGdsb2JhbFRoaXM7XG4gIHN0ZXBDb3VudDogbnVtYmVyO1xuICBob29rQ291bnQ6IG51bWJlcjtcbiAgd2FpdENvdW50OiBudW1iZXI7XG4gIGhvb2tEaXNwb3NlZENvdW50OiBudW1iZXI7XG4gIGFib3J0Q291bnQ6IG51bWJlcjtcblxuICBjb25zdHJ1Y3RvcihzdGVwc0lucHV0OiBNYXA8c3RyaW5nLCBRdWV1ZUl0ZW0+LCBnbG9iYWw6IHR5cGVvZiBnbG9iYWxUaGlzKSB7XG4gICAgLy8gQ29udmVydCBNYXAgdG8gYXJyYXkgZm9yIGl0ZXJhdGlvbiBhbmQgc3RvcmFnZVxuICAgIGNvbnN0IHN0ZXBzID0gWy4uLnN0ZXBzSW5wdXQudmFsdWVzKCldO1xuXG4gICAgLy8gU2luZ2xlLXBhc3MgY291bnRpbmcgZm9yIGVmZmljaWVuY3lcbiAgICBsZXQgc3RlcENvdW50ID0gMDtcbiAgICBsZXQgaG9va0NvdW50ID0gMDtcbiAgICBsZXQgd2FpdENvdW50ID0gMDtcbiAgICBsZXQgaG9va0Rpc3Bvc2VkQ291bnQgPSAwO1xuICAgIGxldCBhYm9ydENvdW50ID0gMDtcbiAgICBmb3IgKGNvbnN0IGl0ZW0gb2Ygc3RlcHMpIHtcbiAgICAgIGlmIChpdGVtLnR5cGUgPT09ICdzdGVwJykgc3RlcENvdW50Kys7XG4gICAgICBlbHNlIGlmIChpdGVtLnR5cGUgPT09ICdob29rJykge1xuICAgICAgICBpZiAoaXRlbS5kaXNwb3NlZCkgaG9va0Rpc3Bvc2VkQ291bnQrKztcbiAgICAgICAgZWxzZSBpZiAoaXRlbS5hYm9ydFJlcXVlc3RlZCkgYWJvcnRDb3VudCsrO1xuICAgICAgICBlbHNlIGhvb2tDb3VudCsrO1xuICAgICAgfSBlbHNlIGlmIChpdGVtLnR5cGUgPT09ICd3YWl0Jykgd2FpdENvdW50Kys7XG4gICAgfVxuXG4gICAgLy8gQnVpbGQgZGVzY3JpcHRpb24gcGFydHNcbiAgICBjb25zdCBwYXJ0czogc3RyaW5nW10gPSBbXTtcbiAgICBpZiAoc3RlcENvdW50ID4gMCkge1xuICAgICAgcGFydHMucHVzaChgJHtzdGVwQ291bnR9ICR7cGx1cmFsaXplKCdzdGVwJywgJ3N0ZXBzJywgc3RlcENvdW50KX1gKTtcbiAgICB9XG4gICAgaWYgKGhvb2tDb3VudCA+IDApIHtcbiAgICAgIHBhcnRzLnB1c2goYCR7aG9va0NvdW50fSAke3BsdXJhbGl6ZSgnaG9vaycsICdob29rcycsIGhvb2tDb3VudCl9YCk7XG4gICAgfVxuICAgIGlmICh3YWl0Q291bnQgPiAwKSB7XG4gICAgICBwYXJ0cy5wdXNoKGAke3dhaXRDb3VudH0gJHtwbHVyYWxpemUoJ3dhaXQnLCAnd2FpdHMnLCB3YWl0Q291bnQpfWApO1xuICAgIH1cbiAgICBpZiAoaG9va0Rpc3Bvc2VkQ291bnQgPiAwKSB7XG4gICAgICBwYXJ0cy5wdXNoKFxuICAgICAgICBgJHtob29rRGlzcG9zZWRDb3VudH0gaG9vayAke3BsdXJhbGl6ZSgnZGlzcG9zYWwnLCAnZGlzcG9zYWxzJywgaG9va0Rpc3Bvc2VkQ291bnQpfWBcbiAgICAgICk7XG4gICAgfVxuXG4gICAgLy8gRGV0ZXJtaW5lIHZlcmIgKGhhcy9oYXZlKSBhbmQgYWN0aW9uIChydW4vY3JlYXRlZC9yZWNlaXZlZClcbiAgICBjb25zdCB0b3RhbENvdW50ID0gc3RlcENvdW50ICsgaG9va0NvdW50ICsgd2FpdENvdW50ICsgaG9va0Rpc3Bvc2VkQ291bnQ7XG4gICAgY29uc3QgaGFzT3JIYXZlID0gcGx1cmFsaXplKCdoYXMnLCAnaGF2ZScsIHRvdGFsQ291bnQpO1xuICAgIC8vIFBpY2sgYWN0aW9uIHZlcmI6IHVzZSBcInByb2Nlc3NlZFwiIHdoZW4gbWl4ZWQgdHlwZXMgYXJlIHByZXNlbnRcbiAgICBjb25zdCB0eXBlQ291bnQgPVxuICAgICAgKHN0ZXBDb3VudCA+IDAgPyAxIDogMCkgK1xuICAgICAgKGhvb2tDb3VudCA+IDAgPyAxIDogMCkgK1xuICAgICAgKHdhaXRDb3VudCA+IDAgPyAxIDogMCkgK1xuICAgICAgKGhvb2tEaXNwb3NlZENvdW50ID4gMCA/IDEgOiAwKTtcbiAgICBsZXQgYWN0aW9uOiBzdHJpbmc7XG4gICAgaWYgKHR5cGVDb3VudCA+IDEpIHtcbiAgICAgIGFjdGlvbiA9ICdwcm9jZXNzZWQnO1xuICAgIH0gZWxzZSBpZiAoc3RlcENvdW50ID4gMCkge1xuICAgICAgYWN0aW9uID0gJ3J1bic7XG4gICAgfSBlbHNlIGlmIChob29rQ291bnQgPiAwKSB7XG4gICAgICBhY3Rpb24gPSAnY3JlYXRlZCc7XG4gICAgfSBlbHNlIGlmICh3YWl0Q291bnQgPiAwKSB7XG4gICAgICBhY3Rpb24gPSAnY3JlYXRlZCc7XG4gICAgfSBlbHNlIGlmIChob29rRGlzcG9zZWRDb3VudCA+IDApIHtcbiAgICAgIGFjdGlvbiA9ICdwcm9jZXNzZWQnO1xuICAgIH0gZWxzZSB7XG4gICAgICBhY3Rpb24gPSAncmVjZWl2ZWQnO1xuICAgIH1cblxuICAgIGNvbnN0IGRlc2NyaXB0aW9uID1cbiAgICAgIHBhcnRzLmxlbmd0aCA+IDBcbiAgICAgICAgPyBgJHtwYXJ0cy5qb2luKCcgYW5kICcpfSAke2hhc09ySGF2ZX0gbm90IGJlZW4gJHthY3Rpb259IHlldGBcbiAgICAgICAgOiAnMCBzdGVwcyBoYXZlIG5vdCBiZWVuIHJ1biB5ZXQnOyAvLyBEZWZhdWx0IGNhc2UgZm9yIGVtcHR5IGFycmF5XG4gICAgc3VwZXIoZGVzY3JpcHRpb24pO1xuICAgIHRoaXMubmFtZSA9ICdXb3JrZmxvd1N1c3BlbnNpb24nO1xuICAgIHRoaXMuc3RlcHMgPSBzdGVwcztcbiAgICB0aGlzLmdsb2JhbFRoaXMgPSBnbG9iYWw7XG4gICAgdGhpcy5zdGVwQ291bnQgPSBzdGVwQ291bnQ7XG4gICAgdGhpcy5ob29rQ291bnQgPSBob29rQ291bnQ7XG4gICAgdGhpcy53YWl0Q291bnQgPSB3YWl0Q291bnQ7XG4gICAgdGhpcy5ob29rRGlzcG9zZWRDb3VudCA9IGhvb2tEaXNwb3NlZENvdW50O1xuICAgIHRoaXMuYWJvcnRDb3VudCA9IGFib3J0Q291bnQ7XG4gIH1cblxuICBzdGF0aWMgaXModmFsdWU6IHVua25vd24pOiB2YWx1ZSBpcyBXb3JrZmxvd1N1c3BlbnNpb24ge1xuICAgIHJldHVybiB2YWx1ZSBpbnN0YW5jZW9mIFdvcmtmbG93U3VzcGVuc2lvbjtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gRU5PVFNVUCgpOiBuZXZlciB7XG4gIHRocm93IG5ldyBXb3JrZmxvd1J1bnRpbWVFcnJvcihcbiAgICAnVGhpcyBBUEkgaXMgbm90IGF2YWlsYWJsZSBpbnNpZGUgYSB3b3JrZmxvdyBmdW5jdGlvbi4gV29ya2Zsb3cgZnVuY3Rpb25zIHJ1biBpbiBhIGRldGVybWluaXN0aWMgVk07IG1vdmUgdGhlIGNhbGwgdG8gYSBzdGVwIGZ1bmN0aW9uIGZvciBmdWxsIE5vZGUuanMgYWNjZXNzLidcbiAgKTtcbn1cbiJdfQ==
116
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2xvYmFsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2dsb2JhbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUN4RCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUF1RTVDOzs7OztHQUtHO0FBQ0gsTUFBTSxPQUFPLGtCQUFtQixTQUFRLEtBQUs7SUFDM0MsS0FBSyxDQUFjO0lBQ25CLHVDQUF1QztJQUN2QyxLQUFLLENBQWM7SUFDbkIsVUFBVSxDQUFvQjtJQUM5QixTQUFTLENBQVM7SUFDbEIsU0FBUyxDQUFTO0lBQ2xCLFNBQVMsQ0FBUztJQUNsQixjQUFjLENBQVM7SUFDdkIsaUJBQWlCLENBQVM7SUFDMUIsVUFBVSxDQUFTO0lBRW5CLFlBQVksVUFBa0MsRUFBRSxNQUF5QjtRQUN2RSxpREFBaUQ7UUFDakQsTUFBTSxLQUFLLEdBQUcsQ0FBQyxHQUFHLFVBQVUsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDO1FBRXZDLHNDQUFzQztRQUN0QyxJQUFJLFNBQVMsR0FBRyxDQUFDLENBQUM7UUFDbEIsSUFBSSxTQUFTLEdBQUcsQ0FBQyxDQUFDO1FBQ2xCLElBQUksU0FBUyxHQUFHLENBQUMsQ0FBQztRQUNsQixJQUFJLGNBQWMsR0FBRyxDQUFDLENBQUM7UUFDdkIsSUFBSSxpQkFBaUIsR0FBRyxDQUFDLENBQUM7UUFDMUIsSUFBSSxVQUFVLEdBQUcsQ0FBQyxDQUFDO1FBQ25CLEtBQUssTUFBTSxJQUFJLElBQUksS0FBSyxFQUFFLENBQUM7WUFDekIsSUFBSSxJQUFJLENBQUMsSUFBSSxLQUFLLE1BQU07Z0JBQUUsU0FBUyxFQUFFLENBQUM7aUJBQ2pDLElBQUksSUFBSSxDQUFDLElBQUksS0FBSyxNQUFNLEVBQUUsQ0FBQztnQkFDOUIsSUFBSSxJQUFJLENBQUMsUUFBUTtvQkFBRSxpQkFBaUIsRUFBRSxDQUFDO3FCQUNs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Q0FDNUIsK0pBQStKLENBQ2hLLENBQUM7QUFDSixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgV29ya2Zsb3dSdW50aW1lRXJyb3IgfSBmcm9tICdAd29ya2Zsb3cvZXJyb3JzJztcbmltcG9ydCB7IHBsdXJhbGl6ZSB9IGZyb20gJ0B3b3JrZmxvdy91dGlscyc7XG5pbXBvcnQgdHlwZSB7IEF0dHJpYnV0ZUNoYW5nZSB9IGZyb20gJ0B3b3JrZmxvdy93b3JsZCc7XG5pbXBvcnQgdHlwZSB7IFNlcmlhbGl6YWJsZSB9IGZyb20gJy4vc2NoZW1hcy5qcyc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgU3RlcEludm9jYXRpb25RdWV1ZUl0ZW0ge1xuICB0eXBlOiAnc3RlcCc7XG4gIGNvcnJlbGF0aW9uSWQ6IHN0cmluZztcbiAgc3RlcE5hbWU6IHN0cmluZztcbiAgYXJnczogU2VyaWFsaXphYmxlW107XG4gIGNsb3N1cmVWYXJzPzogUmVjb3JkPHN0cmluZywgU2VyaWFsaXphYmxlPjtcbiAgdGhpc1ZhbD86IFNlcmlhbGl6YWJsZTtcbiAgaGFzQ3JlYXRlZEV2ZW50PzogYm9vbGVhbjtcbiAgLyoqXG4gICAqIElubGluZSBzdGVwIG93bmVyc2hpcCwgZGVyaXZlZCBmcm9tIHRoZSBzdGVwJ3MgTEFURVNUIGBzdGVwX3N0YXJ0ZWRgXG4gICAqIGR1cmluZyByZXBsYXk6IHRoZSBxdWV1ZSBtZXNzYWdlIElEIHN0YW1wZWQgYnkgdGhlIGludm9jYXRpb24gcnVubmluZ1xuICAgKiB0aGUgc3RlcCBpbmxpbmUsIG9yIHVuZGVmaW5lZCB3aGVuIHRoZSBsYXRlc3Qgc3RhcnQgd2FzIHVuc3RhbXBlZCAoYVxuICAgKiByZXRyeSBhdHRlbXB0IGRyaXZlbiBieSBhIHF1ZXVlZCBzdGVwIG1lc3NhZ2UsIG9yIGFuIG9sZGVyIHJ1bnRpbWUpLlxuICAgKiBMYXRlc3Qgc3RhcnQgd2luczogYW4gdW5zdGFtcGVkIGJhcmUgc3RhcnQgY2xlYXJzIGEgcHJldmlvdXMgc3RhbXA7IGFuXG4gICAqIG93bmVyLXJlY292ZXJ5IHJlLXN0YW1wZWQgc3RhcnQgcmVzdG9yZXMgaXQuXG4gICAqL1xuICBvd25lck1lc3NhZ2VJZD86IHN0cmluZztcbiAgLyoqXG4gICAqIGBjcmVhdGVkQXRgIChtcykgb2YgdGhlIHN0ZXAncyBsYXRlc3Qgb2JzZXJ2ZWQgYHN0ZXBfc3RhcnRlZGAuIEFuY2hvcnNcbiAgICogdGhlIG93bmVyc2hpcCBsZWFzZTogYGxlYXNlUmVtYWluaW5nID0gbGFzdFN0YXJ0ZWRBdCArIGxlYXNlIOKIkiBub3dgLlxuICAgKi9cbiAgbGFzdFN0YXJ0ZWRBdD86IG51bWJlcjtcbiAgLyoqXG4gICAqIFdoZXRoZXIgYSBgc3RlcF9yZXRyeWluZ2Agd2FzIG9ic2VydmVkIGZvciB0aGlzIHN0ZXAuIEZyb20gdGhhdCBwb2ludFxuICAgKiB0aGUgc3RlcCBpcyBxdWV1ZS1vd25lZCAodGhlIGRlbGF5ZWQgcmV0cnkgaGFuZG9mZiBvciByZXBsYXkgcmVxdWV1ZSksXG4gICAqIHNvIGlubGluZSBvd25lcnNoaXAgaXMgcGVybWFuZW50bHkgbGFwc2VkIGZvciB0aGlzIGNvcnJlbGF0aW9uIElELlxuICAgKi9cbiAgc2F3UmV0cnlpbmc/OiBib29sZWFuO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEhvb2tJbnZvY2F0aW9uUXVldWVJdGVtIHtcbiAgdHlwZTogJ2hvb2snO1xuICBjb3JyZWxhdGlvbklkOiBzdHJpbmc7XG4gIHRva2VuOiBzdHJpbmc7XG4gIC8qKiBFYXJsaWVzdCB0aW1lIHRoZSB0b2tlbiBjYW4gYmUgcmV1c2VkIGFmdGVyIHRoZSBydW4gZW5kcy4gKi9cbiAgdG9rZW5SZXRlbnRpb25VbnRpbD86IERhdGU7XG4gIG1ldGFkYXRhPzogU2VyaWFsaXphYmxlO1xuICBoYXNDcmVhdGVkRXZlbnQ/OiBib29sZWFuO1xuICAvKiogV2hldGhlciB0aGUgd29ya2Zsb3cgaXMgYXdhaXRpbmcgYGhvb2suZ2V0Q29uZmxpY3QoKWAgZm9yIHRoaXMgaG9vayAqL1xuICBoYXNDb25mbGljdEF3YWl0ZXI/OiBib29sZWFuO1xuICBkaXNwb3NlZD86IGJvb2xlYW47XG4gIGlzV2ViaG9vaz86IGJvb2xlYW47XG4gIGlzU3lzdGVtPzogYm9vbGVhbjtcbiAgYWJvcnRSZXF1ZXN0ZWQ/OiBib29sZWFuO1xuICBhYm9ydFJlYXNvbj86IHVua25vd247XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgV2FpdEludm9jYXRpb25RdWV1ZUl0ZW0ge1xuICB0eXBlOiAnd2FpdCc7XG4gIGNvcnJlbGF0aW9uSWQ6IHN0cmluZztcbiAgcmVzdW1lQXQ6IERhdGU7XG4gIGhhc0NyZWF0ZWRFdmVudD86IGJvb2xlYW47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQXR0cmlidXRlSW52b2NhdGlvblF1ZXVlSXRlbSB7XG4gIHR5cGU6ICdhdHRyaWJ1dGUnO1xuICBjb3JyZWxhdGlvbklkOiBzdHJpbmc7XG4gIGNoYW5nZXM6IEF0dHJpYnV0ZUNoYW5nZVtdO1xuICBhbGxvd1Jlc2VydmVkQXR0cmlidXRlcz86IHRydWU7XG59XG5cbmV4cG9ydCB0eXBlIFF1ZXVlSXRlbSA9XG4gIHwgU3RlcEludm9jYXRpb25RdWV1ZUl0ZW1cbiAgfCBIb29rSW52b2NhdGlvblF1ZXVlSXRlbVxuICB8IFdhaXRJbnZvY2F0aW9uUXVldWVJdGVtXG4gIHwgQXR0cmlidXRlSW52b2NhdGlvblF1ZXVlSXRlbTtcblxuLyoqXG4gKiBBbiBlcnJvciB0aGF0IGlzIHRocm93biB3aGVuIG9uZSBvciBtb3JlIG9wZXJhdGlvbnMgKHN0ZXBzL2hvb2tzL2V0Yy4pIGFyZSBjYWxsZWQgYnV0IGRvXG4gKiBub3QgeWV0IGhhdmUgY29ycmVzcG9uZGluZyBlbnRyaWVzIGluIHRoZSBldmVudCBsb2cuIFRoZSB3b3JrZmxvd1xuICogZGlzcGF0Y2hlciB3aWxsIGNhdGNoIHRoaXMgZXJyb3IgYW5kIHB1c2ggdGhlIG9wZXJhdGlvbnNcbiAqIG9udG8gdGhlIHF1ZXVlLlxuICovXG5leHBvcnQgY2xhc3MgV29ya2Zsb3dTdXNwZW5zaW9uIGV4dGVuZHMgRXJyb3Ige1xuICBpdGVtczogUXVldWVJdGVtW107XG4gIC8qKiBAZGVwcmVjYXRlZCBVc2UgYGl0ZW1zYCBpbnN0ZWFkLiAqL1xuICBzdGVwczogUXVldWVJdGVtW107XG4gIGdsb2JhbFRoaXM6IHR5cGVvZiBnbG9iYWxUaGlzO1xuICBzdGVwQ291bnQ6IG51bWJlcjtcbiAgaG9va0NvdW50OiBudW1iZXI7XG4gIHdhaXRDb3VudDogbnVtYmVyO1xuICBhdHRyaWJ1dGVDb3VudDogbnVtYmVyO1xuICBob29rRGlzcG9zZWRDb3VudDogbnVtYmVyO1xuICBhYm9ydENvdW50OiBudW1iZXI7XG5cbiAgY29uc3RydWN0b3IoaXRlbXNJbnB1dDogTWFwPHN0cmluZywgUXVldWVJdGVtPiwgZ2xvYmFsOiB0eXBlb2YgZ2xvYmFsVGhpcykge1xuICAgIC8vIENvbnZlcnQgTWFwIHRvIGFycmF5IGZvciBpdGVyYXRpb24gYW5kIHN0b3JhZ2VcbiAgICBjb25zdCBpdGVtcyA9IFsuLi5pdGVtc0lucHV0LnZhbHVlcygpXTtcblxuICAgIC8vIFNpbmdsZS1wYXNzIGNvdW50aW5nIGZvciBlZmZpY2llbmN5XG4gICAgbGV0IHN0ZXBDb3VudCA9IDA7XG4gICAgbGV0IGhvb2tDb3VudCA9IDA7XG4gICAgbGV0IHdhaXRDb3VudCA9IDA7XG4gICAgbGV0IGF0dHJpYnV0ZUNvdW50ID0gMDtcbiAgICBsZXQgaG9va0Rpc3Bvc2VkQ291bnQgPSAwO1xuICAgIGxldCBhYm9ydENvdW50ID0gMDtcbiAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgaXRlbXMpIHtcbiAgICAgIGlmIChpdGVtLnR5cGUgPT09ICdzdGVwJykgc3RlcENvdW50Kys7XG4gICAgICBlbHNlIGlmIChpdGVtLnR5cGUgPT09ICdob29rJykge1xuICAgICAgICBpZiAoaXRlbS5kaXNwb3NlZCkgaG9va0Rpc3Bvc2VkQ291bnQrKztcbiAgICAgICAgZWxzZSBpZiAoaXRlbS5hYm9ydFJlcXVlc3RlZCkgYWJvcnRDb3VudCsrO1xuICAgICAgICBlbHNlIGhvb2tDb3VudCsrO1xuICAgICAgfSBlbHNlIGlmIChpdGVtLnR5cGUgPT09ICd3YWl0Jykgd2FpdENvdW50Kys7XG4gICAgICBlbHNlIGlmIChpdGVtLnR5cGUgPT09ICdhdHRyaWJ1dGUnKSBhdHRyaWJ1dGVDb3VudCsrO1xuICAgIH1cblxuICAgIC8vIEJ1aWxkIGRlc2NyaXB0aW9uIHBhcnRzXG4gICAgY29uc3QgcGFydHM6IHN0cmluZ1tdID0gW107XG4gICAgaWYgKHN0ZXBDb3VudCA+IDApIHtcbiAgICAgIHBhcnRzLnB1c2goYCR7c3RlcENvdW50fSAke3BsdXJhbGl6ZSgnc3RlcCcsICdzdGVwcycsIHN0ZXBDb3VudCl9YCk7XG4gICAgfVxuICAgIGlmIChob29rQ291bnQgPiAwKSB7XG4gICAgICBwYXJ0cy5wdXNoKGAke2hvb2tDb3VudH0gJHtwbHVyYWxpemUoJ2hvb2snLCAnaG9va3MnLCBob29rQ291bnQpfWApO1xuICAgIH1cbiAgICBpZiAod2FpdENvdW50ID4gMCkge1xuICAgICAgcGFydHMucHVzaChgJHt3YWl0Q291bnR9ICR7cGx1cmFsaXplKCd3YWl0JywgJ3dhaXRzJywgd2FpdENvdW50KX1gKTtcbiAgICB9XG4gICAgaWYgKGF0dHJpYnV0ZUNvdW50ID4gMCkge1xuICAgICAgcGFydHMucHVzaChcbiAgICAgICAgYCR7YXR0cmlidXRlQ291bnR9ICR7cGx1cmFsaXplKCdhdHRyaWJ1dGUgd3JpdGUnLCAnYXR0cmlidXRlIHdyaXRlcycsIGF0dHJpYnV0ZUNvdW50KX1gXG4gICAgICApO1xuICAgIH1cbiAgICBpZiAoaG9va0Rpc3Bvc2VkQ291bnQgPiAwKSB7XG4gICAgICBwYXJ0cy5wdXNoKFxuICAgICAgICBgJHtob29rRGlzcG9zZWRDb3VudH0gaG9vayAke3BsdXJhbGl6ZSgnZGlzcG9zYWwnLCAnZGlzcG9zYWxzJywgaG9va0Rpc3Bvc2VkQ291bnQpfWBcbiAgICAgICk7XG4gICAgfVxuXG4gICAgLy8gRGV0ZXJtaW5lIHZlcmIgKGhhcy9oYXZlKSBhbmQgYWN0aW9uIChydW4vY3JlYXRlZC9yZWNlaXZlZClcbiAgICBjb25zdCB0b3RhbENvdW50ID1cbiAgICAgIHN0ZXBDb3VudCArIGhvb2tDb3VudCArIHdhaXRDb3VudCArIGF0dHJpYnV0ZUNvdW50ICsgaG9va0Rpc3Bvc2VkQ291bnQ7XG4gICAgY29uc3QgaGFzT3JIYXZlID0gcGx1cmFsaXplKCdoYXMnLCAnaGF2ZScsIHRvdGFsQ291bnQpO1xuICAgIC8vIFBpY2sgYWN0aW9uIHZlcmI6IHVzZSBcInByb2Nlc3NlZFwiIHdoZW4gbWl4ZWQgdHlwZXMgYXJlIHByZXNlbnRcbiAgICBjb25zdCB0eXBlQ291bnQgPVxuICAgICAgKHN0ZXBDb3VudCA+IDAgPyAxIDogMCkgK1xuICAgICAgKGhvb2tDb3VudCA+IDAgPyAxIDogMCkgK1xuICAgICAgKHdhaXRDb3VudCA+IDAgPyAxIDogMCkgK1xuICAgICAgKGF0dHJpYnV0ZUNvdW50ID4gMCA/IDEgOiAwKSArXG4gICAgICAoaG9va0Rpc3Bvc2VkQ291bnQgPiAwID8gMSA6IDApO1xuICAgIGxldCBhY3Rpb246IHN0cmluZztcbiAgICBpZiAodHlwZUNvdW50ID4gMSkge1xuICAgICAgYWN0aW9uID0gJ3Byb2Nlc3NlZCc7XG4gICAgfSBlbHNlIGlmIChzdGVwQ291bnQgPiAwKSB7XG4gICAgICBhY3Rpb24gPSAncnVuJztcbiAgICB9IGVsc2UgaWYgKGhvb2tDb3VudCA+IDApIHtcbiAgICAgIGFjdGlvbiA9ICdjcmVhdGVkJztcbiAgICB9IGVsc2UgaWYgKHdhaXRDb3VudCA+IDApIHtcbiAgICAgIGFjdGlvbiA9ICdjcmVhdGVkJztcbiAgICB9IGVsc2UgaWYgKGF0dHJpYnV0ZUNvdW50ID4gMCkge1xuICAgICAgYWN0aW9uID0gJ3dyaXR0ZW4nO1xuICAgIH0gZWxzZSBpZiAoaG9va0Rpc3Bvc2VkQ291bnQgPiAwKSB7XG4gICAgICBhY3Rpb24gPSAncHJvY2Vzc2VkJztcbiAgICB9IGVsc2Uge1xuICAgICAgYWN0aW9uID0gJ3JlY2VpdmVkJztcbiAgICB9XG5cbiAgICBjb25zdCBkZXNjcmlwdGlvbiA9XG4gICAgICBwYXJ0cy5sZW5ndGggPiAwXG4gICAgICAgID8gYCR7cGFydHMuam9pbignIGFuZCAnKX0gJHtoYXNPckhhdmV9IG5vdCBiZWVuICR7YWN0aW9ufSB5ZXRgXG4gICAgICAgIDogJzAgc3RlcHMgaGF2ZSBub3QgYmVlbiBydW4geWV0JzsgLy8gRGVmYXVsdCBjYXNlIGZvciBlbXB0eSBhcnJheVxuICAgIHN1cGVyKGRlc2NyaXB0aW9uKTtcbiAgICB0aGlzLm5hbWUgPSAnV29ya2Zsb3dTdXNwZW5zaW9uJztcbiAgICB0aGlzLml0ZW1zID0gaXRlbXM7XG4gICAgdGhpcy5zdGVwcyA9IGl0ZW1zO1xuICAgIHRoaXMuZ2xvYmFsVGhpcyA9IGdsb2JhbDtcbiAgICB0aGlzLnN0ZXBDb3VudCA9IHN0ZXBDb3VudDtcbiAgICB0aGlzLmhvb2tDb3VudCA9IGhvb2tDb3VudDtcbiAgICB0aGlzLndhaXRDb3VudCA9IHdhaXRDb3VudDtcbiAgICB0aGlzLmF0dHJpYnV0ZUNvdW50ID0gYXR0cmlidXRlQ291bnQ7XG4gICAgdGhpcy5ob29rRGlzcG9zZWRDb3VudCA9IGhvb2tEaXNwb3NlZENvdW50O1xuICAgIHRoaXMuYWJvcnRDb3VudCA9IGFib3J0Q291bnQ7XG4gIH1cblxuICBzdGF0aWMgaXModmFsdWU6IHVua25vd24pOiB2YWx1ZSBpcyBXb3JrZmxvd1N1c3BlbnNpb24ge1xuICAgIHJldHVybiB2YWx1ZSBpbnN0YW5jZW9mIFdvcmtmbG93U3VzcGVuc2lvbjtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gRU5PVFNVUCgpOiBuZXZlciB7XG4gIHRocm93IG5ldyBXb3JrZmxvd1J1bnRpbWVFcnJvcihcbiAgICAnVGhpcyBBUEkgaXMgbm90IGF2YWlsYWJsZSBpbnNpZGUgYSB3b3JrZmxvdyBmdW5jdGlvbi4gV29ya2Zsb3cgZnVuY3Rpb25zIHJ1biBpbiBhIGRldGVybWluaXN0aWMgVk07IG1vdmUgdGhlIGNhbGwgdG8gYSBzdGVwIGZ1bmN0aW9uIGZvciBmdWxsIE5vZGUuanMgYWNjZXNzLidcbiAgKTtcbn1cbiJdfQ==
package/dist/index.d.ts CHANGED
@@ -1,5 +1,5 @@
1
1
  /**
2
- * Just the core utilities that are meant to be imported by user
2
+ * Core utilities intended for import by user
3
3
  * steps/workflows. This allows the bundler to tree-shake and limit what goes
4
4
  * into the final user bundles. Logic for running/handling steps/workflows
5
5
  * should live in runtime. Eventually these might be separate packages
@@ -12,6 +12,7 @@
12
12
  export { FatalError, RetryableError, type RetryableErrorOptions, } from '@workflow/errors';
13
13
  export { createHook, createWebhook, type Hook, type HookOptions, type RequestWithResponse, type Webhook, type WebhookOptions, } from './create-hook.js';
14
14
  export { defineHook, type TypedHook } from './define-hook.js';
15
+ export { type SetAttributesOptions, setAttributes, } from './set-attributes.js';
15
16
  export { sleep } from './sleep.js';
16
17
  export { getStepMetadata, type StepMetadata, } from './step/get-step-metadata.js';
17
18
  export { getWorkflowMetadata, type WorkflowMetadata, } from './step/get-workflow-metadata.js';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,EACL,UAAU,EACV,cAAc,EACd,KAAK,qBAAqB,GAC3B,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EACL,UAAU,EACV,aAAa,EACb,KAAK,IAAI,EACT,KAAK,WAAW,EAChB,KAAK,mBAAmB,EACxB,KAAK,OAAO,EACZ,KAAK,cAAc,GACpB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,UAAU,EAAE,KAAK,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC9D,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACnC,OAAO,EACL,eAAe,EACf,KAAK,YAAY,GAClB,MAAM,6BAA6B,CAAC;AACrC,OAAO,EACL,mBAAmB,EACnB,KAAK,gBAAgB,GACtB,MAAM,iCAAiC,CAAC;AACzC,OAAO,EACL,WAAW,EACX,KAAK,6BAA6B,GACnC,MAAM,2BAA2B,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,EACL,UAAU,EACV,cAAc,EACd,KAAK,qBAAqB,GAC3B,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EACL,UAAU,EACV,aAAa,EACb,KAAK,IAAI,EACT,KAAK,WAAW,EAChB,KAAK,mBAAmB,EACxB,KAAK,OAAO,EACZ,KAAK,cAAc,GACpB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,UAAU,EAAE,KAAK,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC9D,OAAO,EACL,KAAK,oBAAoB,EACzB,aAAa,GACd,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACnC,OAAO,EACL,eAAe,EACf,KAAK,YAAY,GAClB,MAAM,6BAA6B,CAAC;AACrC,OAAO,EACL,mBAAmB,EACnB,KAAK,gBAAgB,GACtB,MAAM,iCAAiC,CAAC;AACzC,OAAO,EACL,WAAW,EACX,KAAK,6BAA6B,GACnC,MAAM,2BAA2B,CAAC"}
package/dist/index.js CHANGED
@@ -1,5 +1,5 @@
1
1
  /**
2
- * Just the core utilities that are meant to be imported by user
2
+ * Core utilities intended for import by user
3
3
  * steps/workflows. This allows the bundler to tree-shake and limit what goes
4
4
  * into the final user bundles. Logic for running/handling steps/workflows
5
5
  * should live in runtime. Eventually these might be separate packages
@@ -12,8 +12,9 @@
12
12
  export { FatalError, RetryableError, } from '@workflow/errors';
13
13
  export { createHook, createWebhook, } from './create-hook.js';
14
14
  export { defineHook } from './define-hook.js';
15
+ export { setAttributes, } from './set-attributes.js';
15
16
  export { sleep } from './sleep.js';
16
17
  export { getStepMetadata, } from './step/get-step-metadata.js';
17
18
  export { getWorkflowMetadata, } from './step/get-workflow-metadata.js';
18
19
  export { getWritable, } from './step/writable-stream.js';
19
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7R0FVRztBQUVILE9BQU8sRUFDTCxVQUFVLEVBQ1YsY0FBYyxHQUVmLE1BQU0sa0JBQWtCLENBQUM7QUFDMUIsT0FBTyxFQUNMLFVBQVUsRUFDVixhQUFhLEdBTWQsTUFBTSxrQkFBa0IsQ0FBQztBQUMxQixPQUFPLEVBQUUsVUFBVSxFQUFrQixNQUFNLGtCQUFrQixDQUFDO0FBQzlELE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFDbkMsT0FBTyxFQUNMLGVBQWUsR0FFaEIsTUFBTSw2QkFBNkIsQ0FBQztBQUNyQyxPQUFPLEVBQ0wsbUJBQW1CLEdBRXBCLE1BQU0saUNBQWlDLENBQUM7QUFDekMsT0FBTyxFQUNMLFdBQVcsR0FFWixNQUFNLDJCQUEyQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBKdXN0IHRoZSBjb3JlIHV0aWxpdGllcyB0aGF0IGFyZSBtZWFudCB0byBiZSBpbXBvcnRlZCBieSB1c2VyXG4gKiBzdGVwcy93b3JrZmxvd3MuIFRoaXMgYWxsb3dzIHRoZSBidW5kbGVyIHRvIHRyZWUtc2hha2UgYW5kIGxpbWl0IHdoYXQgZ29lc1xuICogaW50byB0aGUgZmluYWwgdXNlciBidW5kbGVzLiBMb2dpYyBmb3IgcnVubmluZy9oYW5kbGluZyBzdGVwcy93b3JrZmxvd3NcbiAqIHNob3VsZCBsaXZlIGluIHJ1bnRpbWUuIEV2ZW50dWFsbHkgdGhlc2UgbWlnaHQgYmUgc2VwYXJhdGUgcGFja2FnZXNcbiAqIGB3b3JrZmxvd2AgYW5kIGB3b3JrZmxvdy9ydW50aW1lYD9cbiAqXG4gKiBFdmVyeXRoaW5nIGhlcmUgd2lsbCBnZXQgcmUtZXhwb3J0ZWQgdW5kZXIgdGhlICd3b3JrZmxvdycgdG9wIGxldmVsIHBhY2thZ2UuXG4gKiBUaGlzIHNob3VsZCBiZSBhIG1pbmltYWwgc2V0IG9mIEFQSXMgc28gKipkbyBub3QgYW55dGhpbmcgaGVyZSoqIHVubGVzcyBpdCdzXG4gKiBuZWVkZWQgZm9yIHVzZXJsYW5kIHdvcmtmbG93IGNvZGUuXG4gKi9cblxuZXhwb3J0IHtcbiAgRmF0YWxFcnJvcixcbiAgUmV0cnlhYmxlRXJyb3IsXG4gIHR5cGUgUmV0cnlhYmxlRXJyb3JPcHRpb25zLFxufSBmcm9tICdAd29ya2Zsb3cvZXJyb3JzJztcbmV4cG9ydCB7XG4gIGNyZWF0ZUhvb2ssXG4gIGNyZWF0ZVdlYmhvb2ssXG4gIHR5cGUgSG9vayxcbiAgdHlwZSBIb29rT3B0aW9ucyxcbiAgdHlwZSBSZXF1ZXN0V2l0aFJlc3BvbnNlLFxuICB0eXBlIFdlYmhvb2ssXG4gIHR5cGUgV2ViaG9va09wdGlvbnMsXG59IGZyb20gJy4vY3JlYXRlLWhvb2suanMnO1xuZXhwb3J0IHsgZGVmaW5lSG9vaywgdHlwZSBUeXBlZEhvb2sgfSBmcm9tICcuL2RlZmluZS1ob29rLmpzJztcbmV4cG9ydCB7IHNsZWVwIH0gZnJvbSAnLi9zbGVlcC5qcyc7XG5leHBvcnQge1xuICBnZXRTdGVwTWV0YWRhdGEsXG4gIHR5cGUgU3RlcE1ldGFkYXRhLFxufSBmcm9tICcuL3N0ZXAvZ2V0LXN0ZXAtbWV0YWRhdGEuanMnO1xuZXhwb3J0IHtcbiAgZ2V0V29ya2Zsb3dNZXRhZGF0YSxcbiAgdHlwZSBXb3JrZmxvd01ldGFkYXRhLFxufSBmcm9tICcuL3N0ZXAvZ2V0LXdvcmtmbG93LW1ldGFkYXRhLmpzJztcbmV4cG9ydCB7XG4gIGdldFdyaXRhYmxlLFxuICB0eXBlIFdvcmtmbG93V3JpdGFibGVTdHJlYW1PcHRpb25zLFxufSBmcm9tICcuL3N0ZXAvd3JpdGFibGUtc3RyZWFtLmpzJztcbiJdfQ==
20
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7R0FVRztBQUVILE9BQU8sRUFDTCxVQUFVLEVBQ1YsY0FBYyxHQUVmLE1BQU0sa0JBQWtCLENBQUM7QUFDMUIsT0FBTyxFQUNMLFVBQVUsRUFDVixhQUFhLEdBTWQsTUFBTSxrQkFBa0IsQ0FBQztBQUMxQixPQUFPLEVBQUUsVUFBVSxFQUFrQixNQUFNLGtCQUFrQixDQUFDO0FBQzlELE9BQU8sRUFFTCxhQUFhLEdBQ2QsTUFBTSxxQkFBcUIsQ0FBQztBQUM3QixPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sWUFBWSxDQUFDO0FBQ25DLE9BQU8sRUFDTCxlQUFlLEdBRWhCLE1BQU0sNkJBQTZCLENBQUM7QUFDckMsT0FBTyxFQUNMLG1CQUFtQixHQUVwQixNQUFNLGlDQUFpQyxDQUFDO0FBQ3pDLE9BQU8sRUFDTCxXQUFXLEdBRVosTUFBTSwyQkFBMkIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQ29yZSB1dGlsaXRpZXMgaW50ZW5kZWQgZm9yIGltcG9ydCBieSB1c2VyXG4gKiBzdGVwcy93b3JrZmxvd3MuIFRoaXMgYWxsb3dzIHRoZSBidW5kbGVyIHRvIHRyZWUtc2hha2UgYW5kIGxpbWl0IHdoYXQgZ29lc1xuICogaW50byB0aGUgZmluYWwgdXNlciBidW5kbGVzLiBMb2dpYyBmb3IgcnVubmluZy9oYW5kbGluZyBzdGVwcy93b3JrZmxvd3NcbiAqIHNob3VsZCBsaXZlIGluIHJ1bnRpbWUuIEV2ZW50dWFsbHkgdGhlc2UgbWlnaHQgYmUgc2VwYXJhdGUgcGFja2FnZXNcbiAqIGB3b3JrZmxvd2AgYW5kIGB3b3JrZmxvdy9ydW50aW1lYD9cbiAqXG4gKiBFdmVyeXRoaW5nIGhlcmUgd2lsbCBnZXQgcmUtZXhwb3J0ZWQgdW5kZXIgdGhlICd3b3JrZmxvdycgdG9wIGxldmVsIHBhY2thZ2UuXG4gKiBUaGlzIHNob3VsZCBiZSBhIG1pbmltYWwgc2V0IG9mIEFQSXMgc28gKipkbyBub3QgYW55dGhpbmcgaGVyZSoqIHVubGVzcyBpdCdzXG4gKiBuZWVkZWQgZm9yIHVzZXJsYW5kIHdvcmtmbG93IGNvZGUuXG4gKi9cblxuZXhwb3J0IHtcbiAgRmF0YWxFcnJvcixcbiAgUmV0cnlhYmxlRXJyb3IsXG4gIHR5cGUgUmV0cnlhYmxlRXJyb3JPcHRpb25zLFxufSBmcm9tICdAd29ya2Zsb3cvZXJyb3JzJztcbmV4cG9ydCB7XG4gIGNyZWF0ZUhvb2ssXG4gIGNyZWF0ZVdlYmhvb2ssXG4gIHR5cGUgSG9vayxcbiAgdHlwZSBIb29rT3B0aW9ucyxcbiAgdHlwZSBSZXF1ZXN0V2l0aFJlc3BvbnNlLFxuICB0eXBlIFdlYmhvb2ssXG4gIHR5cGUgV2ViaG9va09wdGlvbnMsXG59IGZyb20gJy4vY3JlYXRlLWhvb2suanMnO1xuZXhwb3J0IHsgZGVmaW5lSG9vaywgdHlwZSBUeXBlZEhvb2sgfSBmcm9tICcuL2RlZmluZS1ob29rLmpzJztcbmV4cG9ydCB7XG4gIHR5cGUgU2V0QXR0cmlidXRlc09wdGlvbnMsXG4gIHNldEF0dHJpYnV0ZXMsXG59IGZyb20gJy4vc2V0LWF0dHJpYnV0ZXMuanMnO1xuZXhwb3J0IHsgc2xlZXAgfSBmcm9tICcuL3NsZWVwLmpzJztcbmV4cG9ydCB7XG4gIGdldFN0ZXBNZXRhZGF0YSxcbiAgdHlwZSBTdGVwTWV0YWRhdGEsXG59IGZyb20gJy4vc3RlcC9nZXQtc3RlcC1tZXRhZGF0YS5qcyc7XG5leHBvcnQge1xuICBnZXRXb3JrZmxvd01ldGFkYXRhLFxuICB0eXBlIFdvcmtmbG93TWV0YWRhdGEsXG59IGZyb20gJy4vc3RlcC9nZXQtd29ya2Zsb3ctbWV0YWRhdGEuanMnO1xuZXhwb3J0IHtcbiAgZ2V0V3JpdGFibGUsXG4gIHR5cGUgV29ya2Zsb3dXcml0YWJsZVN0cmVhbU9wdGlvbnMsXG59IGZyb20gJy4vc3RlcC93cml0YWJsZS1zdHJlYW0uanMnO1xuIl19
@@ -9,7 +9,7 @@
9
9
  * step step_… · add (./workflows/x)
10
10
  * hint: Move the call to a step function.
11
11
  * FatalError: …
12
- * at … (trimmed stack internals collapsed)
12
+ * at … (trimmed stack, internals collapsed)
13
13
  *
14
14
  * Without this composition, callers passing `${framing}\n${stack}` as the
15
15
  * message and structured fields as the metadata object got `util.inspect`'s
@@ -18,7 +18,7 @@
18
18
  *
19
19
  * The same metadata is also emitted as structured OTel span events from
20
20
  * the logger itself, so backends that want JSON-shaped data still get it.
21
- * web/web-shared do not consume stderr at all they read CBOR/JSON event
21
+ * web/web-shared do not consume stderr at all: they read CBOR/JSON event
22
22
  * payloads from the World event log.
23
23
  */
24
24
  export declare function composeLogLine(prefix: string, message: string, metadata: Record<string, unknown> | undefined): string;
@@ -11,7 +11,7 @@ import { formatStepName, formatWorkflowName, parseStepName, parseWorkflowName, }
11
11
  * step step_… · add (./workflows/x)
12
12
  * hint: Move the call to a step function.
13
13
  * FatalError: …
14
- * at … (trimmed stack internals collapsed)
14
+ * at … (trimmed stack, internals collapsed)
15
15
  *
16
16
  * Without this composition, callers passing `${framing}\n${stack}` as the
17
17
  * message and structured fields as the metadata object got `util.inspect`'s
@@ -20,13 +20,13 @@ import { formatStepName, formatWorkflowName, parseStepName, parseWorkflowName, }
20
20
  *
21
21
  * The same metadata is also emitted as structured OTel span events from
22
22
  * the logger itself, so backends that want JSON-shaped data still get it.
23
- * web/web-shared do not consume stderr at all they read CBOR/JSON event
23
+ * web/web-shared do not consume stderr at all: they read CBOR/JSON event
24
24
  * payloads from the World event log.
25
25
  */
26
26
  export function composeLogLine(prefix, message, metadata) {
27
27
  const [framing, ...rest] = message.split('\n');
28
28
  const body = rest.join('\n');
29
- const fields = renderStructuredFields(framing ?? '', metadata);
29
+ const fields = renderStructuredFields(framing ?? '', body, metadata);
30
30
  const trimmedBody = trimStackBody(body);
31
31
  const lines = [`${prefix} ${framing ?? ''}`];
32
32
  if (fields)
@@ -35,16 +35,20 @@ export function composeLogLine(prefix, message, metadata) {
35
35
  lines.push(trimmedBody);
36
36
  return lines.join('\n');
37
37
  }
38
- function renderStructuredFields(framing, metadata) {
38
+ function renderStructuredFields(framing, body, metadata) {
39
39
  if (!metadata || Object.keys(metadata).length === 0)
40
40
  return null;
41
41
  // Drop fields that the message already encodes. We render framings and
42
- // stacks into the message string itself in step-handler / runtime, so
43
- // repeating them here would be pure noise.
42
+ // stacks into the message string itself in step executor / combined runtime, so
43
+ // repeating them here would be pure noise. A message with neither (a WARN
44
+ // whose framing is a fixed sentence and whose `errorMessage` is the only
45
+ // place the underlying error's text appears) keeps `errorMessage` and
46
+ // renders it as its own row below.
44
47
  const redundant = new Set();
45
48
  redundant.add('errorStack');
46
- if (typeof metadata.errorMessage === 'string' &&
47
- framing.includes(metadata.errorMessage)) {
49
+ const errorMessage = pickString(metadata, 'errorMessage');
50
+ if (errorMessage &&
51
+ (framing.includes(errorMessage) || body.includes(errorMessage))) {
48
52
  redundant.add('errorMessage');
49
53
  }
50
54
  const wellKnown = new Set([
@@ -107,6 +111,9 @@ function renderStructuredFields(framing, metadata) {
107
111
  if (errorCode && errorCode !== errorName) {
108
112
  lines.push(` ${kvKey('code')} ${Ansi.dim(errorCode)}`);
109
113
  }
114
+ if (errorMessage && !redundant.has('errorMessage')) {
115
+ lines.push(` ${kvKey('error')} ${formatPassthroughValue(errorMessage)}`);
116
+ }
110
117
  const hint = pickString(metadata, 'hint');
111
118
  if (hint) {
112
119
  lines.push(` ${Ansi.hint(hint)}`);
@@ -126,7 +133,7 @@ function renderStructuredFields(framing, metadata) {
126
133
  *
127
134
  * Name: message
128
135
  * at userStep (./workflows/foo.ts:12:11)
129
- * at <unknown> (../../packages/core/src/runtime/step-handler.ts:535:32)
136
+ * at <unknown> (../../packages/core/src/runtime/step-executor.ts:535:32)
130
137
  * at <unknown> (.../node_modules/.pnpm/next@…/…/base-server.js:1454:9)
131
138
  * at <unknown> (.../node_modules/.pnpm/@opentelemetry+api@…/…/api.js:5440)
132
139
  * at … (15 more frames into Next.js / pnpm internals)
@@ -135,7 +142,7 @@ function renderStructuredFields(framing, metadata) {
135
142
  *
136
143
  * 1. Drop framework-internal frames (`node_modules/.pnpm/`, `node:internal/`,
137
144
  * Turbopack-bundled `node_modules__pnpm_*` / `_next_dist_*` chunks).
138
- * 2. Cap the surviving frames at `MAX_VISIBLE_FRAMES` past that, even
145
+ * 2. Cap the surviving frames at `MAX_VISIBLE_FRAMES`: past that, even
139
146
  * "user-ish" frames are usually deep async wrapping that doesn't help
140
147
  * pinpoint the throw. The user can drop into the inspect CLI for the
141
148
  * full stack on demand.
@@ -194,7 +201,7 @@ function isFrameworkFrame(line) {
194
201
  // Turbopack/Next bundle the same framework code into chunks like
195
202
  // `node_modules__pnpm_<hash>._.js` and `<...>_next_dist_<hash>._.js`,
196
203
  // and emits Next.js loader runtime as `0dx6_next_dist_<hash>._.js`.
197
- // These are the frames that show up after Turbopack DCE same intent
204
+ // These are the frames that show up after Turbopack DCE, same intent
198
205
  // as the raw `node_modules/.pnpm/` filter above.
199
206
  if (trimmed.includes('node_modules__pnpm_'))
200
207
  return true;
@@ -247,4 +254,4 @@ function formatPassthroughValue(v) {
247
254
  return String(v);
248
255
  }
249
256
  }
250
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9nLWZvcm1hdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9sb2ctZm9ybWF0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sS0FBSyxJQUFJLE1BQU0sdUJBQXVCLENBQUM7QUFDOUMsT0FBTyxFQUNMLGNBQWMsRUFDZCxrQkFBa0IsRUFDbEIsYUFBYSxFQUNiLGlCQUFpQixHQUNsQixNQUFNLGlCQUFpQixDQUFDO0FBRXpCOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBc0JHO0FBQ0gsTUFBTSxVQUFVLGNBQWMsQ0FDNUIsTUFBYyxFQUNkLE9BQWUsRUFDZixRQUE2QztJQUU3QyxNQUFNLENBQUMsT0FBTyxFQUFFLEdBQUcsSUFBSSxDQUFDLEdBQUcsT0FBTyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUMvQyxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQzdCLE1BQU0sTUFBTSxHQUFHLHNCQUFzQixDQUFDLE9BQU8sSUFBSSxFQUFFLEVBQUUsUUFBUSxDQUFDLENBQUM7SUFDL0QsTUFBTSxXQUFXLEdBQUcsYUFBYSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBRXhDLE1BQU0sS0FBSyxHQUFhLENBQUMsR0FBRyxNQUFNLElBQUksT0FBTyxJQUFJLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFDdkQsSUFBSSxNQUFNO1FBQUUsS0FBSyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUMvQixJQUFJLFdBQVc7UUFBRSxLQUFLLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO0lBQ3pDLE9BQU8sS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUMxQixDQUFDO0FBRUQsU0FBUyxzQkFBc0IsQ0FDN0IsT0FBZSxFQUNmLFFBQTZDO0lBRTdDLElBQUksQ0FBQyxRQUFRLElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FB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QUMsUUFBUSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7WUFDckIsT0FBTyxDQUFDO2lCQUNMLEtBQUssQ0FBQyxJQUFJLENBQUM7aUJBQ1gsR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLFlBQVksSUFBSSxFQUFFLENBQUMsQ0FBQztpQkFDdkQsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ2hCLENBQUM7UUFDRCxPQUFPLENBQUMsQ0FBQztJQUNYLENBQUM7SUFDRCxJQUFJLE9BQU8sQ0FBQyxLQUFLLFFBQVEsSUFBSSxPQUFPLENBQUMsS0FBSyxTQUFTO1FBQUUsT0FBTyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDdEUsSUFBSSxDQUFDO1FBQ0gsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzNCLENBQUM7SUFBQyxNQUFNLENBQUM7UUFDUCxPQUFPLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNuQixDQUFDO0FBQ0gsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIEFuc2kgZnJvbSAnQHdvcmtmbG93L2Vycm9ycy9hbnNpJztcbmltcG9ydCB7XG4gIGZvcm1hdFN0ZXBOYW1lLFxuICBmb3JtYXRXb3JrZmxvd05hbWUsXG4gIHBhcnNlU3RlcE5hbWUsXG4gIHBhcnNlV29ya2Zsb3dOYW1lLFxufSBmcm9tICdAd29ya2Zsb3cvdXRpbHMnO1xuXG4vKipcbiAqIFN0cnVjdHVyZWQtbG9nIGNvbXBvc2l0aW9uIGZvciBgY29uc29sZS5lcnJvcmAgLyBgY29uc29sZS53YXJuYC4gRW1pdHNcbiAqIG9uZSBzdHJpbmcgaW4gdGhyZWUgc2VjdGlvbnMgc28gdGhlIG1vc3QgdXNlZnVsIGluZm9ybWF0aW9uIGlzIGF0IHRoZVxuICogdG9wLCBzdGFjayB0cmFjZSBhdCB0aGUgYm90dG9tOlxuICpcbiAqICAgICBbd29ya2Zsb3ctc2RrXSA8ZnJhbWluZyBsaW5lPlxuICogICAgICAgdXNlciBlcnJvciDCtyBGYXRhbEVycm9yXG4gKiAgICAgICBydW4gICAgd3J1bl/igKZcbiAqICAgICAgIHN0ZXAgICBzdGVwX+KApiDCtyBhZGQgKC4vd29ya2Zsb3dzL3gpXG4gKiAgICAgICBoaW50OiAgTW92ZSB0aGUgY2FsbCB0byBhIHN0ZXAgZnVuY3Rpb24uXG4gKiAgICAgRmF0YWxFcnJvcjog4oCmXG4gKiAgICAgICAgIGF0IOKApiAodHJpbW1lZCBzdGFjayDigJQgaW50ZXJuYWxzIGNvbGxhcHNlZClcbiAqXG4gKiBXaXRob3V0IHRoaXMgY29tcG9zaXRpb24sIGNhbGxlcnMgcGFzc2luZyBgJHtmcmFtaW5nfVxcbiR7c3RhY2t9YCBhcyB0aGVcbiAqIG1lc3NhZ2UgYW5kIHN0cnVjdHVyZWQgZmllbGRzIGFzIHRoZSBtZXRhZGF0YSBvYmplY3QgZ290IGB1dGlsLmluc3BlY3RgJ3NcbiAqIGRlZmF1bHQgb2JqZWN0IGR1bXAgYXBwZW5kZWQgKmFmdGVyKiB0aGUgc3RhY2ssIHdoaWNoIGJ1cmllcyB0aGUgcnVuIElEXG4gKiBhbmQgYXR0cmlidXRpb24gYmFkZ2UgdW5kZXIgMzArIGxpbmVzIG9mIGBub2RlX21vZHVsZXMvLnBucG0vLi4uYCBmcmFtZXMuXG4gKlxuICogVGhlIHNhbWUgbWV0YWRhdGEgaXMgYWxzbyBlbWl0dGVkIGFzIHN0cnVjdHVyZWQgT1RlbCBzcGFuIGV2ZW50cyBmcm9tXG4gKiB0aGUgbG9nZ2VyIGl0c2VsZiwgc28gYmFja2VuZHMgdGhhdCB3YW50IEpTT04tc2hhcGVkIGRhdGEgc3RpbGwgZ2V0IGl0LlxuICogd2ViL3dlYi1zaGFyZWQgZG8gbm90IGNvbnN1bWUgc3RkZXJyIGF0IGFsbCDigJQgdGhleSByZWFkIENCT1IvSlNPTiBldmVudFxuICogcGF5bG9hZHMgZnJvbSB0aGUgV29ybGQgZXZlbnQgbG9nLlxuICovXG5leHBvcnQgZnVuY3Rpb24gY29tcG9zZUxvZ0xpbmUoXG4gIHByZWZpeDogc3RyaW5nLFxuICBtZXNzYWdlOiBzdHJpbmcsXG4gIG1ldGFkYXRhOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB8IHVuZGVmaW5lZFxuKTogc3RyaW5nIHtcbiAgY29uc3QgW2ZyYW1pbmcsIC4uLnJlc3RdID0gbWVzc2FnZS5zcGxpdCgnXFxuJyk7XG4gIGNvbnN0IGJvZHkgPSByZXN0LmpvaW4oJ1xcbicpO1xuICBjb25zdCBmaWVsZHMgPSByZW5kZXJTdHJ1Y3R1cmVkRmllbGRzKGZyYW1pbmcgPz8gJycsIG1ldGFkYXRhKTtcbiAgY29uc3QgdHJpbW1lZEJvZHkgPSB0cmltU3RhY2tCb2R5KGJvZHkpO1xuXG4gIGNvbnN0IGxpbmVzOiBzdHJpbmdbXSA9IFtgJHtwcmVmaXh9ICR7ZnJhbWluZyA/PyAnJ31gXTtcbiAgaWYgKGZpZWxkcykgbGluZXMucHVzaChmaWVsZHMpO1xuICBpZiAodHJpbW1lZEJvZHkpIGxpbmVzLnB1c2godHJpbW1lZEJvZHkpO1xuICByZXR1cm4gbGluZXMuam9pbignXFxuJyk7XG59XG5cbmZ1bmN0aW9uIHJlbmRlclN0cnVjdHVyZWRGaWVsZHMoXG4gIGZyYW1pbmc6IHN0cmluZyxcbiAgbWV0YWRhdGE6IFJlY29yZDxzdHJpbmcsIHVua25vd24+IHwgdW5kZWZpbmVkXG4pOiBzdHJpbmcgfCBudWxsIHtcbiAgaWYgKCFtZXRhZGF0YSB8fCBPYmplY3Qua2V5cyhtZXRhZGF0YSkubGVuZ3RoID09PSAwKSByZXR1cm4gbnVsbDtcblxuICAvLyBEcm9wIGZpZWxkcyB0aGF0IHRoZSBtZXNzYWdlIGFscmVhZHkgZW5jb2Rlcy4gV2UgcmVuZGVyIGZyYW1pbmdzIGFuZFxuICAvLyBzdGFja3MgaW50byB0aGUgbWVzc2FnZSBzdHJpbmcgaXRzZWxmIGluIHN0ZXAtaGFuZGxlciAvIHJ1bnRpbWUsIHNvXG4gIC8vIHJlcGVhdGluZyB0aGVtIGhlcmUgd291bGQgYmUgcHVyZSBub2lzZS5cbiAgY29uc3QgcmVkdW5kYW50ID0gbmV3IFNldDxzdHJpbmc+KCk7XG4gIHJlZHVuZGFudC5hZGQoJ2Vycm9yU3RhY2snKTtcbiAgaWYgKFxuICAgIHR5cGVvZiBtZXRhZGF0YS5lcnJvck1lc3NhZ2UgPT09ICdzdHJpbmcnICYmXG4gICAgZnJhbWluZy5pbmNsdWRlcyhtZXRhZGF0YS5lcnJvck1lc3NhZ2UgYXMgc3RyaW5nKVxuICApIHtcbiAgICByZWR1bmRhbnQuYWRkKCdlcnJvck1lc3NhZ2UnKTtcbiAgfVxuXG4gIGNvbnN0IHdlbGxLbm93biA9IG5ldyBTZXQoW1xuICAgICd3b3JrZmxvd1J1bklkJyxcbiAgICAnd29ya2Zsb3dOYW1lJyxcbiAgICAnc3RlcElkJyxcbiAgICAnc3RlcE5hbWUnLFxuICAgICdlcnJvckF0dHJpYnV0aW9uJyxcbiAgICAnZXJyb3JDb2RlJyxcbiAgICAnZXJyb3JOYW1lJyxcbiAgICAnZXJyb3JNZXNzYWdlJyxcbiAgICAnZXJyb3JTdGFjaycsXG4gICAgJ2hpbnQnLFxuICAgICdhdHRlbXB0JyxcbiAgICAncmV0cnlDb3VudCcsXG4gIF0pO1xuXG4gIGNvbnN0IGxpbmVzOiBzdHJpbmdbXSA9IFtdO1xuXG4gIC8vIEhlYWRlcjogZXJyb3IgY2xhc3MgKyBhdHRyaWJ1dGlvbiBiYWRnZS5cbiAgY29uc3QgZXJyb3JOYW1lID0gcGlja1N0cmluZyhtZXRhZGF0YSwgJ2Vycm9yTmFtZScpO1xuICBjb25zdCBhdHRyaWJ1dGlvbiA9IHBpY2tTdHJpbmcobWV0YWRhdGEsICdlcnJvckF0dHJpYnV0aW9uJyk7XG4gIGlmIChlcnJvck5hbWUgfHwgYXR0cmlidXRpb24pIHtcbiAgICBjb25zdCBiYWRnZSA9IGF0dHJpYnV0aW9uXG4gICAgICA/IGF0dHJpYnV0aW9uID09PSAnc2RrJ1xuICAgICAgICA/IEFuc2kubWFnZW50YSgnc2RrIGVycm9yJylcbiAgICAgICAgOiBBbnNpLnJlZCgndXNlciBlcnJvcicpXG4gICAgICA6ICcnO1xuICAgIGNvbnN0IGNscyA9IGVycm9yTmFtZSA/IEFuc2kuYm9sZChlcnJvck5hbWUpIDogJyc7XG4gICAgY29uc3Qgc2VwID0gYmFkZ2UgJiYgY2xzID8gQW5zaS5kaW0oJyDCtyAnKSA6ICcnO1xuICAgIGxpbmVzLnB1c2goYCAgJHtiYWRnZX0ke3NlcH0ke2Nsc31gKTtcbiAgfVxuXG4gIC8vIElEICsgcGFyc2VkIGZyaWVuZGx5LW5hbWUgcm93cy5cbiAgY29uc3QgcnVuSWQgPSBwaWNrU3RyaW5nKG1ldGFkYXRhLCAnd29ya2Zsb3dSdW5JZCcpO1xuICBjb25zdCB3Zk5hbWUgPSBwaWNrU3RyaW5nKG1ldGFkYXRhLCAnd29ya2Zsb3dOYW1lJyk7XG4gIGlmIChydW5JZCkge1xuICAgIGxpbmVzLnB1c2goZm9ybWF0SWRSb3coJ3J1bicsIHJ1bklkLCB3Zk5hbWUsIGZvcm1hdFdvcmtmbG93TmFtZSkpO1xuICB9IGVsc2UgaWYgKHdmTmFtZSkge1xuICAgIGxpbmVzLnB1c2goZm9ybWF0SWRSb3coJ3J1bicsIG51bGwsIHdmTmFtZSwgZm9ybWF0V29ya2Zsb3dOYW1lKSk7XG4gIH1cblxuICBjb25zdCBzdGVwSWQgPSBwaWNrU3RyaW5nKG1ldGFkYXRhLCAnc3RlcElkJyk7XG4gIGNvbnN0IHN0ZXBOYW1lID0gcGlja1N0cmluZyhtZXRhZGF0YSwgJ3N0ZXBOYW1lJyk7XG4gIGlmIChzdGVwSWQgfHwgc3RlcE5hbWUpIHtcbiAgICBsaW5lcy5wdXNoKGZvcm1hdElkUm93KCdzdGVwJywgc3RlcElkLCBzdGVwTmFtZSwgZm9ybWF0U3RlcE5hbWUpKTtcbiAgfVxuXG4gIGlmIChtZXRhZGF0YS5hdHRlbXB0ICE9PSB1bmRlZmluZWQgfHwgbWV0YWRhdGEucmV0cnlDb3VudCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgLy8gYGF0dGVtcHRgIGFuZCBgcmV0cnlDb3VudGAgcmVhZCBhbWJpZ3VvdXNseSBuZXh0IHRvIGVhY2ggb3RoZXIgKGlzXG4gICAgLy8gXCIzIHJldHJpZXNcIiB0aGUgbGltaXQgb3Igd2hhdCBhbHJlYWR5IGhhcHBlbmVkPykuIFJlbmRlciB0aGUgbGltaXRcbiAgICAvLyBhcyBcIm1heCByZXRyaWVzXCIgdG8gbWFrZSB0aGUgYm91bmRhcnkgZXhwbGljaXQsIGFuZCBrZWVwIGBhdHRlbXB0YFxuICAgIC8vIGFzIHRoZSBjb3VudCBvZiB0b3RhbCBpbnZvY2F0aW9ucyBpbmNsdWRpbmcgdGhlIG9yaWdpbmFsLlxuICAgIGNvbnN0IGEgPSBtZXRhZGF0YS5hdHRlbXB0O1xuICAgIGNvbnN0IHIgPSBtZXRhZGF0YS5yZXRyeUNvdW50O1xuICAgIGlmIChhICE9PSB1bmRlZmluZWQgJiYgciAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBsaW5lcy5wdXNoKFxuICAgICAgICBgICAke2t2S2V5KCdyZXRyeScpfSAke2F9ICR7QW5zaS5kaW0oJ2F0dGVtcHRzIMK3Jyl9ICR7cn0gJHtBbnNpLmRpbSgnbWF4IHJldHJpZXMnKX1gXG4gICAgICApO1xuICAgIH0gZWxzZSBpZiAoYSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBsaW5lcy5wdXNoKGAgICR7a3ZLZXkoJ3JldHJ5Jyl9ICR7YX0gJHtBbnNpLmRpbSgnYXR0ZW1wdHMnKX1gKTtcbiAgICB9XG4gIH1cblxuICBjb25zdCBlcnJvckNvZGUgPSBwaWNrU3RyaW5nKG1ldGFkYXRhLCAnZXJyb3JDb2RlJyk7XG4gIGlmIChlcnJvckNvZGUgJiYgZXJyb3JDb2RlICE9PSBlcnJvck5hbWUpIHtcbiAgICBsaW5lcy5wdXNoKGAgICR7a3ZLZXkoJ2NvZGUnKX0gJHtBbnNpLmRpbShlcnJvckNvZGUpfWApO1xuICB9XG5cbiAgY29uc3QgaGludCA9IHBpY2tTdHJpbmcobWV0YWRhdGEsICdoaW50Jyk7XG4gIGlmIChoaW50KSB7XG4gICAgbGluZXMucHVzaChgICAke0Fuc2kuaGludChoaW50KX1gKTtcbiAgfVxuXG4gIC8vIFNvcnRlZCBwYXNzLXRocm91Z2ggZm9yIHVua25vd24gZmllbGRzLlxuICBjb25zdCBwYXNzVGhyb3VnaCA9IE9iamVjdC5lbnRyaWVzKG1ldGFkYXRhKVxuICAgIC5maWx0ZXIoXG4gICAgICAoW2ssIHZdKSA9PlxuICAgICAgICAhd2VsbEtub3duLmhhcyhrKSAmJiAhcmVkdW5kYW50LmhhcyhrKSAmJiB2ICE9PSB1bmRlZmluZWQgJiYgdiAhPT0gbnVsbFxuICAgIClcbiAgICAuc29ydCgoW2FdLCBbYl0pID0+IGEubG9jYWxlQ29tcGFyZShiKSk7XG4gIGZvciAoY29uc3QgW2ssIHZdIG9mIHBhc3NUaHJvdWdoKSB7XG4gICAgbGluZXMucHVzaChgICAke2t2S2V5KGspfSAke2Zvcm1hdFBhc3N0aHJvdWdoVmFsdWUodil9YCk7XG4gIH1cblxuICByZXR1cm4gbGluZXMubGVuZ3RoID8gbGluZXMuam9pbignXFxuJykgOiBudWxsO1xufVxuXG4vKipcbiAqIFN0cmlwIHRoZSBzdGFjayBkb3duIHRvIGZyYW1lcyB0aGUgdXNlciBjYW4gYWN0IG9uLiBWOCBzdGFja3MgZm9yIG91clxuICogcnVudGltZSBlcnJvcnMgbG9vayBsaWtlOlxuICpcbiAqICAgICBOYW1lOiBtZXNzYWdlXG4gKiAgICAgICAgIGF0IHVzZXJTdGVwICguL3dvcmtmbG93cy9mb28udHM6MTI6MTEpXG4gKiAgICAgICAgIGF0IDx1bmtub3duPiAoLi4vLi4vcGFja2FnZXMvY29yZS9zcmMvcnVudGltZS9zdGVwLWhhbmRsZXIudHM6NTM1OjMyKVxuICogICAgICAgICBhdCA8dW5rbm93bj4gKC4uLi9ub2RlX21vZHVsZXMvLnBucG0vbmV4dEDigKYv4oCmL2Jhc2Utc2VydmVyLmpzOjE0NTQ6OSlcbiAqICAgICAgICAgYXQgPHVua25vd24+ICguLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0BvcGVudGVsZW1ldHJ5K2FwaUDigKYv4oCmL2FwaS5qczo1NDQwKVxuICogICAgICAgICBhdCDigKYgKDE1IG1vcmUgZnJhbWVzIGludG8gTmV4dC5qcyAvIHBucG0gaW50ZXJuYWxzKVxuICpcbiAqIFR3by1wYXNzIHRyaW06XG4gKlxuICogICAxLiBEcm9wIGZyYW1ld29yay1pbnRlcm5hbCBmcmFtZXMgKGBub2RlX21vZHVsZXMvLnBucG0vYCwgYG5vZGU6aW50ZXJuYWwvYCxcbiAqICAgICAgVHVyYm9wYWNrLWJ1bmRsZWQgYG5vZGVfbW9kdWxlc19fcG5wbV8qYCAvIGBfbmV4dF9kaXN0XypgIGNodW5rcykuXG4gKiAgIDIuIENhcCB0aGUgc3Vydml2aW5nIGZyYW1lcyBhdCBgTUFYX1ZJU0lCTEVfRlJBTUVTYCDigJQgcGFzdCB0aGF0LCBldmVuXG4gKiAgICAgIFwidXNlci1pc2hcIiBmcmFtZXMgYXJlIHVzdWFsbHkgZGVlcCBhc3luYyB3cmFwcGluZyB0aGF0IGRvZXNuJ3QgaGVscFxuICogICAgICBwaW5wb2ludCB0aGUgdGhyb3cuIFRoZSB1c2VyIGNhbiBkcm9wIGludG8gdGhlIGluc3BlY3QgQ0xJIGZvciB0aGVcbiAqICAgICAgZnVsbCBzdGFjayBvbiBkZW1hbmQuXG4gKlxuICogRWFjaCBzdXBwcmVzc2VkIHJ1biBlbWl0cyBvbmUgc3VtbWFyeSBsaW5lIHNvIHBlb3BsZSBrbm93IGhvdyBtdWNoIHdhc1xuICogdHJpbW1lZC5cbiAqL1xuY29uc3QgTUFYX1ZJU0lCTEVfRlJBTUVTID0gNjtcblxuZnVuY3Rpb24gdHJpbVN0YWNrQm9keShib2R5OiBzdHJpbmcpOiBzdHJpbmcgfCBudWxsIHtcbiAgaWYgKCFib2R5KSByZXR1cm4gbnVsbDtcbiAgY29uc3QgbGluZXMgPSBib2R5LnNwbGl0KCdcXG4nKTtcbiAgY29uc3Qgb3V0OiBzdHJpbmdbXSA9IFtdO1xuICBsZXQgZHJvcHBlZFJ1biA9IDA7XG4gIGxldCB2aXNpYmxlRnJhbWVDb3VudCA9IDA7XG4gIGxldCBjYXBwZWRGcmFtZXMgPSAwO1xuXG4gIGNvbnN0IGZsdXNoRHJvcHBlZCA9ICgpID0+IHtcbiAgICBpZiAoZHJvcHBlZFJ1biA+IDApIHtcbiAgICAgIG91dC5wdXNoKFxuICAgICAgICBBbnNpLmRpbShcbiAgICAgICAgICBgICAgICAgICDigKYgJHtkcm9wcGVkUnVufSBtb3JlICR7ZHJvcHBlZFJ1biA9PT0gMSA/ICdmcmFtZScgOiAnZnJhbWVzJ30gaW4gZnJhbWV3b3JrIGludGVybmFsc2BcbiAgICAgICAgKVxuICAgICAgKTtcbiAgICAgIGRyb3BwZWRSdW4gPSAwO1xuICAgIH1cbiAgfTtcblxuICBmb3IgKGNvbnN0IGxpbmUgb2YgbGluZXMpIHtcbiAgICBjb25zdCBpc0ZyYW1lID0gbGluZS50cmltU3RhcnQoKS5zdGFydHNXaXRoKCdhdCAnKTtcbiAgICBpZiAoaXNGcmFtZSAmJiBpc0ZyYW1ld29ya0ZyYW1lKGxpbmUpKSB7XG4gICAgICBkcm9wcGVkUnVuKys7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgaWYgKGlzRnJhbWUgJiYgdmlzaWJsZUZyYW1lQ291bnQgPj0gTUFYX1ZJU0lCTEVfRlJBTUVTKSB7XG4gICAgICBjYXBwZWRGcmFtZXMrKztcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICBmbHVzaERyb3BwZWQoKTtcbiAgICBvdXQucHVzaChsaW5lKTtcbiAgICBpZiAoaXNGcmFtZSkgdmlzaWJsZUZyYW1lQ291bnQrKztcbiAgfVxuICBmbHVzaERyb3BwZWQoKTtcbiAgaWYgKGNhcHBlZEZyYW1lcyA+IDApIHtcbiAgICBvdXQucHVzaChcbiAgICAgIEFuc2kuZGltKFxuICAgICAgICBgICAgICAgICDigKYgJHtjYXBwZWRGcmFtZXN9IG1vcmUgJHtjYXBwZWRGcmFtZXMgPT09IDEgPyAnZnJhbWUnIDogJ2ZyYW1lcyd9IChydW4gXFxgcG5wbSB3ZiBpbnNwZWN0IHJ1biA8aWQ+XFxgIGZvciB0aGUgZnVsbCBzdGFjaylgXG4gICAgICApXG4gICAgKTtcbiAgfVxuICByZXR1cm4gb3V0LmpvaW4oJ1xcbicpO1xufVxuXG5mdW5jdGlvbiBpc0ZyYW1ld29ya0ZyYW1lKGxpbmU6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAvLyBPbmx5IGF0LWZyYW1lcyBhcmUgY2FuZGlkYXRlcyBmb3Igc3RyaXBwaW5nLiBIZWFkZXIgbGluZXMgKGBOYW1lOiDigKZgKVxuICAvLyBhbmQgYXJiaXRyYXJ5IHRyYWlsaW5nIGNvbnRleHQgKGUuZy4gYGNvZGU6ICdVU0VSX0VSUk9SJ2ApIHBhc3MgdGhyb3VnaC5cbiAgY29uc3QgdHJpbW1lZCA9IGxpbmUudHJpbVN0YXJ0KCk7XG4gIGlmICghdHJpbW1lZC5zdGFydHNXaXRoKCdhdCAnKSkgcmV0dXJuIGZhbHNlO1xuICAvLyBub2RlOiogaW50ZXJuYWxzICh0aW1lcnMsIGFzeW5jIGhvb2tzLCB2bSwgZXRjLikgbmV2ZXIgaGVscCB1c2Vycy5cbiAgaWYgKHRyaW1tZWQuaW5jbHVkZXMoJ25vZGU6aW50ZXJuYWwvJykpIHJldHVybiB0cnVlO1xuICAvLyBwbnBtLXJvb3RlZCBmcmFtZXdvcmtzIGluc3RhbGxlZCBhcyBub2RlX21vZHVsZXMgZGVwZW5kZW5jaWVzLlxuICBpZiAodHJpbW1lZC5pbmNsdWRlcygnbm9kZV9tb2R1bGVzLy5wbnBtLycpKSByZXR1cm4gdHJ1ZTtcbiAgLy8gVHVyYm9wYWNrL05leHQgYnVuZGxlIHRoZSBzYW1lIGZyYW1ld29yayBjb2RlIGludG8gY2h1bmtzIGxpa2VcbiAgLy8gYG5vZGVfbW9kdWxlc19fcG5wbV88aGFzaD4uXy5qc2AgYW5kIGA8Li4uPl9uZXh0X2Rpc3RfPGhhc2g+Ll8uanNgLFxuICAvLyBhbmQgZW1pdHMgTmV4dC5qcyBsb2FkZXIgcnVudGltZSBhcyBgMGR4Nl9uZXh0X2Rpc3RfPGhhc2g+Ll8uanNgLlxuICAvLyBUaGVzZSBhcmUgdGhlIGZyYW1lcyB0aGF0IHNob3cgdXAgYWZ0ZXIgVHVyYm9wYWNrIERDRSDigJQgc2FtZSBpbnRlbnRcbiAgLy8gYXMgdGhlIHJhdyBgbm9kZV9tb2R1bGVzLy5wbnBtL2AgZmlsdGVyIGFib3ZlLlxuICBpZiAodHJpbW1lZC5pbmNsdWRlcygnbm9kZV9tb2R1bGVzX19wbnBtXycpKSByZXR1cm4gdHJ1ZTtcbiAgaWYgKHRyaW1tZWQuaW5jbHVkZXMoJ19uZXh0X2Rpc3RfJykpIHJldHVybiB0cnVlO1xuICAvLyBQbGFpbiBub2RlX21vZHVsZXMgKG5vbi1wbnBtIHNldHVwcykgZm9yIHRoZSBzYW1lIGtpbmRzIG9mIGZyYW1ld29ya3MuXG4gIGlmIChcbiAgICB0cmltbWVkLmluY2x1ZGVzKCdub2RlX21vZHVsZXMvbmV4dC8nKSB8fFxuICAgIHRyaW1tZWQuaW5jbHVkZXMoJ25vZGVfbW9kdWxlcy9Ab3BlbnRlbGVtZXRyeS8nKSB8fFxuICAgIHRyaW1tZWQuaW5jbHVkZXMoJ25vZGVfbW9kdWxlcy92aXRlc3QvJykgfHxcbiAgICB0cmltbWVkLmluY2x1ZGVzKCdub2RlX21vZHVsZXMvQHZpdGVzdC8nKVxuICApIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICByZXR1cm4gZmFsc2U7XG59XG5cbmZ1bmN0aW9uIHBpY2tTdHJpbmcoXG4gIG1ldGFkYXRhOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPixcbiAga2V5OiBzdHJpbmdcbik6IHN0cmluZyB8IG51bGwge1xuICBjb25zdCB2ID0gbWV0YWRhdGFba2V5XTtcbiAgcmV0dXJuIHR5cGVvZiB2ID09PSAnc3RyaW5nJyAmJiB2Lmxlbmd0aCA+IDAgPyB2IDogbnVsbDtcbn1cblxuZnVuY3Rpb24ga3ZLZXkoa2V5OiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gQW5zaS5kaW0oa2V5LnBhZEVuZCg2KSk7XG59XG5cbmZ1bmN0aW9uIGZvcm1hdElkUm93KFxuICBsYWJlbDogc3RyaW5nLFxuICBpZDogc3RyaW5nIHwgbnVsbCxcbiAgbmFtZTogc3RyaW5nIHwgbnVsbCxcbiAgZm9ybWF0TmFtZTogKG46IHN0cmluZykgPT4gc3RyaW5nXG4pOiBzdHJpbmcge1xuICBjb25zdCBpZENlbGwgPSBpZCA/IGlkIDogQW5zaS5kaW0oJ+KAlCcpO1xuICBjb25zdCBwYXJzZWQgPSBuYW1lXG4gICAgPyBsYWJlbCA9PT0gJ3J1bidcbiAgICAgID8gcGFyc2VXb3JrZmxvd05hbWUobmFtZSlcbiAgICAgIDogcGFyc2VTdGVwTmFtZShuYW1lKVxuICAgIDogbnVsbDtcbiAgY29uc3QgbmFtZUNlbGwgPSBwYXJzZWRcbiAgICA/IGAke0Fuc2kuZGltKCfCtycpfSAke2Zvcm1hdE5hbWUobmFtZSBhcyBzdHJpbmcpfWBcbiAgICA6ICcnO1xuICByZXR1cm4gYCAgJHtrdktleShsYWJlbCl9ICR7aWRDZWxsfSR7bmFtZUNlbGwgPyAnICcgKyBuYW1lQ2VsbCA6ICcnfWA7XG59XG5cbmZ1bmN0aW9uIGZvcm1hdFBhc3N0aHJvdWdoVmFsdWUodjogdW5rbm93bik6IHN0cmluZyB7XG4gIGlmICh0eXBlb2YgdiA9PT0gJ3N0cmluZycpIHtcbiAgICBpZiAodi5pbmNsdWRlcygnXFxuJykpIHtcbiAgICAgIHJldHVybiB2XG4gICAgICAgIC5zcGxpdCgnXFxuJylcbiAgICAgICAgLm1hcCgobGluZSwgaSkgPT4gKGkgPT09IDAgPyBsaW5lIDogYCAgICAgICAgICR7bGluZX1gKSlcbiAgICAgICAgLmpvaW4oJ1xcbicpO1xuICAgIH1cbiAgICByZXR1cm4gdjtcbiAgfVxuICBpZiAodHlwZW9mIHYgPT09ICdudW1iZXInIHx8IHR5cGVvZiB2ID09PSAnYm9vbGVhbicpIHJldHVybiBTdHJpbmcodik7XG4gIHRyeSB7XG4gICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KHYpO1xuICB9IGNhdGNoIHtcbiAgICByZXR1cm4gU3RyaW5nKHYpO1xuICB9XG59XG4iXX0=
257
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9nLWZvcm1hdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9sb2ctZm9ybWF0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sS0FBSyxJQUFJLE1BQU0sdUJBQXVCLENBQUM7QUFDOUMsT0FBTyxFQUNMLGNBQWMsRUFDZCxrQkFBa0IsRUFDbEIsYUFBYSxFQUNiLGlCQUFpQixHQUNsQixNQUFNLGlCQUFpQixDQUFDO0FBRXpCOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBc0JHO0FBQ0gsTUFBTSxVQUFVLGNBQWMsQ0FDNUIsTUFBYyxFQUNkLE9BQWUsRUFDZixRQUE2QztJQUU3QyxNQUFNLENBQUMsT0FBTyxFQUFFLEdBQUcsSUFBSSxDQUFDLEdBQUcsT0FBTyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUMvQyxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQzdCLE1BQU0sTUFBTSxHQUFHLHNCQUFzQixDQUFDLE9BQU8sSUFBSSxFQUFFLEVBQUUsSUFBSSxFQUFFLFFBQVEsQ0FBQyxDQUFDO0lBQ3JFLE1BQU0sV0FBVyxHQUFHLGFBQWEsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUV4QyxNQUFNLEtBQUssR0FBYSxDQUFDLEdBQUcsTUFBTSxJQUFJLE9BQU8sSUFBSSxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBQ3ZELElBQUksTUFBTTtRQUFFLEtBQUssQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDL0IsSUFBSSxXQUFXO1FBQUUsS0FBSyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztJQUN6QyxPQUFPLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDMUIsQ0FBQztBQUVELFNBQVMsc0JBQXNCLENBQzdCLE9BQWUsRUFDZixJQUFZLEVBQ1osUUFBNkM7SUFFN0MsSUFBSSxDQUFDLFFBQVEsSUFBSSxNQUFNLENBQUMsSUFB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QUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsSUFBSSxVQUFVLENBQUMsSUFBYyxDQUFDLEVBQUU7UUFDbEQsQ0FBQyxDQUFDLEVBQUUsQ0FBQztJQUNQLE9BQU8sS0FBSyxLQUFLLENBQUMsS0FBSyxDQUFDLElBQUksTUFBTSxHQUFHLFFBQVEsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLFFBQVEsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUM7QUFDeEUsQ0FBQztBQUVELFNBQVMsc0JBQXNCLENBQUMsQ0FBVTtJQUN4QyxJQUFJLE9BQU8sQ0FBQyxLQUFLLFFBQVEsRUFBRSxDQUFDO1FBQzFCLElBQUksQ0FBQyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDO1lBQ3JCLE9BQU8sQ0FBQztpQkFDTCxLQUFLLENBQUMsSUFBSSxDQUFDO2lCQUNYLEdBQUcsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxZQUFZLElBQUksRUFBRSxDQUFDLENBQUM7aUJBQ3ZELElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNoQixDQUFDO1FBQ0QsT0FBTyxDQUFDLENBQUM7SUFDWCxDQUFDO0lBQ0QsSUFBSSxPQUFPLENBQUMsS0FBSyxRQUFRLElBQUksT0FBTyxDQUFDLEtBQUssU0FBUztRQUFFLE9BQU8sTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3RFLElBQUksQ0FBQztRQUNILE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUMzQixDQUFDO0lBQUMsTUFBTSxDQUFDO1FBQ1AsT0FBTyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDbkIsQ0FBQztBQUNILENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBBbnNpIGZyb20gJ0B3b3JrZmxvdy9lcnJvcnMvYW5zaSc7XG5pbXBvcnQge1xuICBmb3JtYXRTdGVwTmFtZSxcbiAgZm9ybWF0V29ya2Zsb3dOYW1lLFxuICBwYXJzZVN0ZXBOYW1lLFxuICBwYXJzZVdvcmtmbG93TmFtZSxcbn0gZnJvbSAnQHdvcmtmbG93L3V0aWxzJztcblxuLyoqXG4gKiBTdHJ1Y3R1cmVkLWxvZyBjb21wb3NpdGlvbiBmb3IgYGNvbnNvbGUuZXJyb3JgIC8gYGNvbnNvbGUud2FybmAuIEVtaXRzXG4gKiBvbmUgc3RyaW5nIGluIHRocmVlIHNlY3Rpb25zIHNvIHRoZSBtb3N0IHVzZWZ1bCBpbmZvcm1hdGlvbiBpcyBhdCB0aGVcbiAqIHRvcCwgc3RhY2sgdHJhY2UgYXQgdGhlIGJvdHRvbTpcbiAqXG4gKiAgICAgW3dvcmtmbG93LXNka10gPGZyYW1pbmcgbGluZT5cbiAqICAgICAgIHVzZXIgZXJyb3IgwrcgRmF0YWxFcnJvclxuICogICAgICAgcnVuICAgIHdydW5f4oCmXG4gKiAgICAgICBzdGVwICAgc3RlcF/igKYgwrcgYWRkICguL3dvcmtmbG93cy94KVxuICogICAgICAgaGludDogIE1vdmUgdGhlIGNhbGwgdG8gYSBzdGVwIGZ1bmN0aW9uLlxuICogICAgIEZhdGFsRXJyb3I6IOKAplxuICogICAgICAgICBhdCDigKYgKHRyaW1tZWQgc3RhY2ssIGludGVybmFscyBjb2xsYXBzZWQpXG4gKlxuICogV2l0aG91dCB0aGlzIGNvbXBvc2l0aW9uLCBjYWxsZXJzIHBhc3NpbmcgYCR7ZnJhbWluZ31cXG4ke3N0YWNrfWAgYXMgdGhlXG4gKiBtZXNzYWdlIGFuZCBzdHJ1Y3R1cmVkIGZpZWxkcyBhcyB0aGUgbWV0YWRhdGEgb2JqZWN0IGdvdCBgdXRpbC5pbnNwZWN0YCdzXG4gKiBkZWZhdWx0IG9iamVjdCBkdW1wIGFwcGVuZGVkICphZnRlciogdGhlIHN0YWNrLCB3aGljaCBidXJpZXMgdGhlIHJ1biBJRFxuICogYW5kIGF0dHJpYnV0aW9uIGJhZGdlIHVuZGVyIDMwKyBsaW5lcyBvZiBgbm9kZV9tb2R1bGVzLy5wbnBtLy4uLmAgZnJhbWVzLlxuICpcbiAqIFRoZSBzYW1lIG1ldGFkYXRhIGlzIGFsc28gZW1pdHRlZCBhcyBzdHJ1Y3R1cmVkIE9UZWwgc3BhbiBldmVudHMgZnJvbVxuICogdGhlIGxvZ2dlciBpdHNlbGYsIHNvIGJhY2tlbmRzIHRoYXQgd2FudCBKU09OLXNoYXBlZCBkYXRhIHN0aWxsIGdldCBpdC5cbiAqIHdlYi93ZWItc2hhcmVkIGRvIG5vdCBjb25zdW1lIHN0ZGVyciBhdCBhbGw6IHRoZXkgcmVhZCBDQk9SL0pTT04gZXZlbnRcbiAqIHBheWxvYWRzIGZyb20gdGhlIFdvcmxkIGV2ZW50IGxvZy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNvbXBvc2VMb2dMaW5lKFxuICBwcmVmaXg6IHN0cmluZyxcbiAgbWVzc2FnZTogc3RyaW5nLFxuICBtZXRhZGF0YTogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gfCB1bmRlZmluZWRcbik6IHN0cmluZyB7XG4gIGNvbnN0IFtmcmFtaW5nLCAuLi5yZXN0XSA9IG1lc3NhZ2Uuc3BsaXQoJ1xcbicpO1xuICBjb25zdCBib2R5ID0gcmVzdC5qb2luKCdcXG4nKTtcbiAgY29uc3QgZmllbGRzID0gcmVuZGVyU3RydWN0dXJlZEZpZWxkcyhmcmFtaW5nID8/ICcnLCBib2R5LCBtZXRhZGF0YSk7XG4gIGNvbnN0IHRyaW1tZWRCb2R5ID0gdHJpbVN0YWNrQm9keShib2R5KTtcblxuICBjb25zdCBsaW5lczogc3RyaW5nW10gPSBbYCR7cHJlZml4fSAke2ZyYW1pbmcgPz8gJyd9YF07XG4gIGlmIChmaWVsZHMpIGxpbmVzLnB1c2goZmllbGRzKTtcbiAgaWYgKHRyaW1tZWRCb2R5KSBsaW5lcy5wdXNoKHRyaW1tZWRCb2R5KTtcbiAgcmV0dXJuIGxpbmVzLmpvaW4oJ1xcbicpO1xufVxuXG5mdW5jdGlvbiByZW5kZXJTdHJ1Y3R1cmVkRmllbGRzKFxuICBmcmFtaW5nOiBzdHJpbmcsXG4gIGJvZHk6IHN0cmluZyxcbiAgbWV0YWRhdGE6IFJlY29yZDxzdHJpbmcsIHVua25vd24+IHwgdW5kZWZpbmVkXG4pOiBzdHJpbmcgfCBudWxsIHtcbiAgaWYgKCFtZXRhZGF0YSB8fCBPYmplY3Qua2V5cyhtZXRhZGF0YSkubGVuZ3RoID09PSAwKSByZXR1cm4gbnVsbDtcblxuICAvLyBEcm9wIGZpZWxkcyB0aGF0IHRoZSBtZXNzYWdlIGFscmVhZHkgZW5jb2Rlcy4gV2UgcmVuZGVyIGZyYW1pbmdzIGFuZFxuICAvLyBzdGFja3MgaW50byB0aGUgbWVzc2FnZSBzdHJpbmcgaXRzZWxmIGluIHN0ZXAgZXhlY3V0b3IgLyBjb21iaW5lZCBydW50aW1lLCBzb1xuICAvLyByZXBlYXRpbmcgdGhlbSBoZXJlIHdvdWxkIGJlIHB1cmUgbm9pc2UuIEEgbWVzc2FnZSB3aXRoIG5laXRoZXIgKGEgV0FSTlxuICAvLyB3aG9zZSBmcmFtaW5nIGlzIGEgZml4ZWQgc2VudGVuY2UgYW5kIHdob3NlIGBlcnJvck1lc3NhZ2VgIGlzIHRoZSBvbmx5XG4gIC8vIHBsYWNlIHRoZSB1bmRlcmx5aW5nIGVycm9yJ3MgdGV4dCBhcHBlYXJzKSBrZWVwcyBgZXJyb3JNZXNzYWdlYCBhbmRcbiAgLy8gcmVuZGVycyBpdCBhcyBpdHMgb3duIHJvdyBiZWxvdy5cbiAgY29uc3QgcmVkdW5kYW50ID0gbmV3IFNldDxzdHJpbmc+KCk7XG4gIHJlZHVuZGFudC5hZGQoJ2Vycm9yU3RhY2snKTtcbiAgY29uc3QgZXJyb3JNZXNzYWdlID0gcGlja1N0cmluZyhtZXRhZGF0YSwgJ2Vycm9yTWVzc2FnZScpO1xuICBpZiAoXG4gICAgZXJyb3JNZXNzYWdlICYmXG4gICAgKGZyYW1pbmcuaW5jbHVkZXMoZXJyb3JNZXNzYWdlKSB8fCBib2R5LmluY2x1ZGVzKGVycm9yTWVzc2FnZSkpXG4gICkge1xuICAgIHJlZHVuZGFudC5hZGQoJ2Vycm9yTWVzc2FnZScpO1xuICB9XG5cbiAgY29uc3Qgd2VsbEtub3duID0gbmV3IFNldChbXG4gICAgJ3dvcmtmbG93UnVuSWQnLFxuICAgICd3b3JrZmxvd05hbWUnLFxuICAgICdzdGVwSWQnLFxuICAgICdzdGVwTmFtZScsXG4gICAgJ2Vycm9yQXR0cmlidXRpb24nLFxuICAgICdlcnJvckNvZGUnLFxuICAgICdlcnJvck5hbWUnLFxuICAgICdlcnJvck1lc3NhZ2UnLFxuICAgICdlcnJvclN0YWNrJyxcbiAgICAnaGludCcsXG4gICAgJ2F0dGVtcHQnLFxuICAgICdyZXRyeUNvdW50JyxcbiAgXSk7XG5cbiAgY29uc3QgbGluZXM6IHN0cmluZ1tdID0gW107XG5cbiAgLy8gSGVhZGVyOiBlcnJvciBjbGFzcyArIGF0dHJpYnV0aW9uIGJhZGdlLlxuICBjb25zdCBlcnJvck5hbWUgPSBwaWNrU3RyaW5nKG1ldGFkYXRhLCAnZXJyb3JOYW1lJyk7XG4gIGNvbnN0IGF0dHJpYnV0aW9uID0gcGlja1N0cmluZyhtZXRhZGF0YSwgJ2Vycm9yQXR0cmlidXRpb24nKTtcbiAgaWYgKGVycm9yTmFtZSB8fCBhdHRyaWJ1dGlvbikge1xuICAgIGNvbnN0IGJhZGdlID0gYXR0cmlidXRpb25cbiAgICAgID8gYXR0cmlidXRpb24gPT09ICdzZGsnXG4gICAgICAgID8gQW5zaS5tYWdlbnRhKCdzZGsgZXJyb3InKVxuICAgICAgICA6IEFuc2kucmVkKCd1c2VyIGVycm9yJylcbiAgICAgIDogJyc7XG4gICAgY29uc3QgY2xzID0gZXJyb3JOYW1lID8gQW5zaS5ib2xkKGVycm9yTmFtZSkgOiAnJztcbiAgICBjb25zdCBzZXAgPSBiYWRnZSAmJiBjbHMgPyBBbnNpLmRpbSgnIMK3ICcpIDogJyc7XG4gICAgbGluZXMucHVzaChgICAke2JhZGdlfSR7c2VwfSR7Y2xzfWApO1xuICB9XG5cbiAgLy8gSUQgKyBwYXJzZWQgZnJpZW5kbHktbmFtZSByb3dzLlxuICBjb25zdCBydW5JZCA9IHBpY2tTdHJpbmcobWV0YWRhdGEsICd3b3JrZmxvd1J1bklkJyk7XG4gIGNvbnN0IHdmTmFtZSA9IHBpY2tTdHJpbmcobWV0YWRhdGEsICd3b3JrZmxvd05hbWUnKTtcbiAgaWYgKHJ1bklkKSB7XG4gICAgbGluZXMucHVzaChmb3JtYXRJZFJvdygncnVuJywgcnVuSWQsIHdmTmFtZSwgZm9ybWF0V29ya2Zsb3dOYW1lKSk7XG4gIH0gZWxzZSBpZiAod2ZOYW1lKSB7XG4gICAgbGluZXMucHVzaChmb3JtYXRJZFJvdygncnVuJywgbnVsbCwgd2ZOYW1lLCBmb3JtYXRXb3JrZmxvd05hbWUpKTtcbiAgfVxuXG4gIGNvbnN0IHN0ZXBJZCA9IHBpY2tTdHJpbmcobWV0YWRhdGEsICdzdGVwSWQnKTtcbiAgY29uc3Qgc3RlcE5hbWUgPSBwaWNrU3RyaW5nKG1ldGFkYXRhLCAnc3RlcE5hbWUnKTtcbiAgaWYgKHN0ZXBJZCB8fCBzdGVwTmFtZSkge1xuICAgIGxpbmVzLnB1c2goZm9ybWF0SWRSb3coJ3N0ZXAnLCBzdGVwSWQsIHN0ZXBOYW1lLCBmb3JtYXRTdGVwTmFtZSkpO1xuICB9XG5cbiAgaWYgKG1ldGFkYXRhLmF0dGVtcHQgIT09IHVuZGVmaW5lZCB8fCBtZXRhZGF0YS5yZXRyeUNvdW50ICE9PSB1bmRlZmluZWQpIHtcbiAgICAvLyBgYXR0ZW1wdGAgYW5kIGByZXRyeUNvdW50YCByZWFkIGFtYmlndW91c2x5IG5leHQgdG8gZWFjaCBvdGhlciAoaXNcbiAgICAvLyBcIjMgcmV0cmllc1wiIHRoZSBsaW1pdCBvciB3aGF0IGFscmVhZHkgaGFwcGVuZWQ/KS4gUmVuZGVyIHRoZSBsaW1pdFxuICAgIC8vIGFzIFwibWF4IHJldHJpZXNcIiB0byBtYWtlIHRoZSBib3VuZGFyeSBleHBsaWNpdCwgYW5kIGtlZXAgYGF0dGVtcHRgXG4gICAgLy8gYXMgdGhlIGNvdW50IG9mIHRvdGFsIGludm9jYXRpb25zIGluY2x1ZGluZyB0aGUgb3JpZ2luYWwuXG4gICAgY29uc3QgYSA9IG1ldGFkYXRhLmF0dGVtcHQ7XG4gICAgY29uc3QgciA9IG1ldGFkYXRhLnJldHJ5Q291bnQ7XG4gICAgaWYgKGEgIT09IHVuZGVmaW5lZCAmJiByICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGxpbmVzLnB1c2goXG4gICAgICAgIGAgICR7a3ZLZXkoJ3JldHJ5Jyl9ICR7YX0gJHtBbnNpLmRpbSgnYXR0ZW1wdHMgwrcnKX0gJHtyfSAke0Fuc2kuZGltKCdtYXggcmV0cmllcycpfWBcbiAgICAgICk7XG4gICAgfSBlbHNlIGlmIChhICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGxpbmVzLnB1c2goYCAgJHtrdktleSgncmV0cnknKX0gJHthfSAke0Fuc2kuZGltKCdhdHRlbXB0cycpfWApO1xuICAgIH1cbiAgfVxuXG4gIGNvbnN0IGVycm9yQ29kZSA9IHBpY2tTdHJpbmcobWV0YWRhdGEsICdlcnJvckNvZGUnKTtcbiAgaWYgKGVycm9yQ29kZSAmJiBlcnJvckNvZGUgIT09IGVycm9yTmFtZSkge1xuICAgIGxpbmVzLnB1c2goYCAgJHtrdktleSgnY29kZScpfSAke0Fuc2kuZGltKGVycm9yQ29kZSl9YCk7XG4gIH1cblxuICBpZiAoZXJyb3JNZXNzYWdlICYmICFyZWR1bmRhbnQuaGFzKCdlcnJvck1lc3NhZ2UnKSkge1xuICAgIGxpbmVzLnB1c2goYCAgJHtrdktleSgnZXJyb3InKX0gJHtmb3JtYXRQYXNzdGhyb3VnaFZhbHVlKGVycm9yTWVzc2FnZSl9YCk7XG4gIH1cblxuICBjb25zdCBoaW50ID0gcGlja1N0cmluZyhtZXRhZGF0YSwgJ2hpbnQnKTtcbiAgaWYgKGhpbnQpIHtcbiAgICBsaW5lcy5wdXNoKGAgICR7QW5zaS5oaW50KGhpbnQpfWApO1xuICB9XG5cbiAgLy8gU29ydGVkIHBhc3MtdGhyb3VnaCBmb3IgdW5rbm93biBmaWVsZHMuXG4gIGNvbnN0IHBhc3NUaHJvdWdoID0gT2JqZWN0LmVudHJpZXMobWV0YWRhdGEpXG4gICAgLmZpbHRlcihcbiAgICAgIChbaywgdl0pID0+XG4gICAgICAgICF3ZWxsS25vd24uaGFzKGspICYmICFyZWR1bmRhbnQuaGFzKGspICYmIHYgIT09IHVuZGVmaW5lZCAmJiB2ICE9PSBudWxsXG4gICAgKVxuICAgIC5zb3J0KChbYV0sIFtiXSkgPT4gYS5sb2NhbGVDb21wYXJlKGIpKTtcbiAgZm9yIChjb25zdCBbaywgdl0gb2YgcGFzc1Rocm91Z2gpIHtcbiAgICBsaW5lcy5wdXNoKGAgICR7a3ZLZXkoayl9ICR7Zm9ybWF0UGFzc3Rocm91Z2hWYWx1ZSh2KX1gKTtcbiAgfVxuXG4gIHJldHVybiBsaW5lcy5sZW5ndGggPyBsaW5lcy5qb2luKCdcXG4nKSA6IG51bGw7XG59XG5cbi8qKlxuICogU3RyaXAgdGhlIHN0YWNrIGRvd24gdG8gZnJhbWVzIHRoZSB1c2VyIGNhbiBhY3Qgb24uIFY4IHN0YWNrcyBmb3Igb3VyXG4gKiBydW50aW1lIGVycm9ycyBsb29rIGxpa2U6XG4gKlxuICogICAgIE5hbWU6IG1lc3NhZ2VcbiAqICAgICAgICAgYXQgdXNlclN0ZXAgKC4vd29ya2Zsb3dzL2Zvby50czoxMjoxMSlcbiAqICAgICAgICAgYXQgPHVua25vd24+ICguLi8uLi9wYWNrYWdlcy9jb3JlL3NyYy9ydW50aW1lL3N0ZXAtZXhlY3V0b3IudHM6NTM1OjMyKVxuICogICAgICAgICBhdCA8dW5rbm93bj4gKC4uLi9ub2RlX21vZHVsZXMvLnBucG0vbmV4dEDigKYv4oCmL2Jhc2Utc2VydmVyLmpzOjE0NTQ6OSlcbiAqICAgICAgICAgYXQgPHVua25vd24+ICguLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0BvcGVudGVsZW1ldHJ5K2FwaUDigKYv4oCmL2FwaS5qczo1NDQwKVxuICogICAgICAgICBhdCDigKYgKDE1IG1vcmUgZnJhbWVzIGludG8gTmV4dC5qcyAvIHBucG0gaW50ZXJuYWxzKVxuICpcbiAqIFR3by1wYXNzIHRyaW06XG4gKlxuICogICAxLiBEcm9wIGZyYW1ld29yay1pbnRlcm5hbCBmcmFtZXMgKGBub2RlX21vZHVsZXMvLnBucG0vYCwgYG5vZGU6aW50ZXJuYWwvYCxcbiAqICAgICAgVHVyYm9wYWNrLWJ1bmRsZWQgYG5vZGVfbW9kdWxlc19fcG5wbV8qYCAvIGBfbmV4dF9kaXN0XypgIGNodW5rcykuXG4gKiAgIDIuIENhcCB0aGUgc3Vydml2aW5nIGZyYW1lcyBhdCBgTUFYX1ZJU0lCTEVfRlJBTUVTYDogcGFzdCB0aGF0LCBldmVuXG4gKiAgICAgIFwidXNlci1pc2hcIiBmcmFtZXMgYXJlIHVzdWFsbHkgZGVlcCBhc3luYyB3cmFwcGluZyB0aGF0IGRvZXNuJ3QgaGVscFxuICogICAgICBwaW5wb2ludCB0aGUgdGhyb3cuIFRoZSB1c2VyIGNhbiBkcm9wIGludG8gdGhlIGluc3BlY3QgQ0xJIGZvciB0aGVcbiAqICAgICAgZnVsbCBzdGFjayBvbiBkZW1hbmQuXG4gKlxuICogRWFjaCBzdXBwcmVzc2VkIHJ1biBlbWl0cyBvbmUgc3VtbWFyeSBsaW5lIHNvIHBlb3BsZSBrbm93IGhvdyBtdWNoIHdhc1xuICogdHJpbW1lZC5cbiAqL1xuY29uc3QgTUFYX1ZJU0lCTEVfRlJBTUVTID0gNjtcblxuZnVuY3Rpb24gdHJpbVN0YWNrQm9keShib2R5OiBzdHJpbmcpOiBzdHJpbmcgfCBudWxsIHtcbiAgaWYgKCFib2R5KSByZXR1cm4gbnVsbDtcbiAgY29uc3QgbGluZXMgPSBib2R5LnNwbGl0KCdcXG4nKTtcbiAgY29uc3Qgb3V0OiBzdHJpbmdbXSA9IFtdO1xuICBsZXQgZHJvcHBlZFJ1biA9IDA7XG4gIGxldCB2aXNpYmxlRnJhbWVDb3VudCA9IDA7XG4gIGxldCBjYXBwZWRGcmFtZXMgPSAwO1xuXG4gIGNvbnN0IGZsdXNoRHJvcHBlZCA9ICgpID0+IHtcbiAgICBpZiAoZHJvcHBlZFJ1biA+IDApIHtcbiAgICAgIG91dC5wdXNoKFxuICAgICAgICBBbnNpLmRpbShcbiAgICAgICAgICBgICAgICAgICDigKYgJHtkcm9wcGVkUnVufSBtb3JlICR7ZHJvcHBlZFJ1biA9PT0gMSA/ICdmcmFtZScgOiAnZnJhbWVzJ30gaW4gZnJhbWV3b3JrIGludGVybmFsc2BcbiAgICAgICAgKVxuICAgICAgKTtcbiAgICAgIGRyb3BwZWRSdW4gPSAwO1xuICAgIH1cbiAgfTtcblxuICBmb3IgKGNvbnN0IGxpbmUgb2YgbGluZXMpIHtcbiAgICBjb25zdCBpc0ZyYW1lID0gbGluZS50cmltU3RhcnQoKS5zdGFydHNXaXRoKCdhdCAnKTtcbiAgICBpZiAoaXNGcmFtZSAmJiBpc0ZyYW1ld29ya0ZyYW1lKGxpbmUpKSB7XG4gICAgICBkcm9wcGVkUnVuKys7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgaWYgKGlzRnJhbWUgJiYgdmlzaWJsZUZyYW1lQ291bnQgPj0gTUFYX1ZJU0lCTEVfRlJBTUVTKSB7XG4gICAgICBjYXBwZWRGcmFtZXMrKztcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICBmbHVzaERyb3BwZWQoKTtcbiAgICBvdXQucHVzaChsaW5lKTtcbiAgICBpZiAoaXNGcmFtZSkgdmlzaWJsZUZyYW1lQ291bnQrKztcbiAgfVxuICBmbHVzaERyb3BwZWQoKTtcbiAgaWYgKGNhcHBlZEZyYW1lcyA+IDApIHtcbiAgICBvdXQucHVzaChcbiAgICAgIEFuc2kuZGltKFxuICAgICAgICBgICAgICAgICDigKYgJHtjYXBwZWRGcmFtZXN9IG1vcmUgJHtjYXBwZWRGcmFtZXMgPT09IDEgPyAnZnJhbWUnIDogJ2ZyYW1lcyd9IChydW4gXFxgcG5wbSB3ZiBpbnNwZWN0IHJ1biA8aWQ+XFxgIGZvciB0aGUgZnVsbCBzdGFjaylgXG4gICAgICApXG4gICAgKTtcbiAgfVxuICByZXR1cm4gb3V0LmpvaW4oJ1xcbicpO1xufVxuXG5mdW5jdGlvbiBpc0ZyYW1ld29ya0ZyYW1lKGxpbmU6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAvLyBPbmx5IGF0LWZyYW1lcyBhcmUgY2FuZGlkYXRlcyBmb3Igc3RyaXBwaW5nLiBIZWFkZXIgbGluZXMgKGBOYW1lOiDigKZgKVxuICAvLyBhbmQgYXJiaXRyYXJ5IHRyYWlsaW5nIGNvbnRleHQgKGUuZy4gYGNvZGU6ICdVU0VSX0VSUk9SJ2ApIHBhc3MgdGhyb3VnaC5cbiAgY29uc3QgdHJpbW1lZCA9IGxpbmUudHJpbVN0YXJ0KCk7XG4gIGlmICghdHJpbW1lZC5zdGFydHNXaXRoKCdhdCAnKSkgcmV0dXJuIGZhbHNlO1xuICAvLyBub2RlOiogaW50ZXJuYWxzICh0aW1lcnMsIGFzeW5jIGhvb2tzLCB2bSwgZXRjLikgbmV2ZXIgaGVscCB1c2Vycy5cbiAgaWYgKHRyaW1tZWQuaW5jbHVkZXMoJ25vZGU6aW50ZXJuYWwvJykpIHJldHVybiB0cnVlO1xuICAvLyBwbnBtLXJvb3RlZCBmcmFtZXdvcmtzIGluc3RhbGxlZCBhcyBub2RlX21vZHVsZXMgZGVwZW5kZW5jaWVzLlxuICBpZiAodHJpbW1lZC5pbmNsdWRlcygnbm9kZV9tb2R1bGVzLy5wbnBtLycpKSByZXR1cm4gdHJ1ZTtcbiAgLy8gVHVyYm9wYWNrL05leHQgYnVuZGxlIHRoZSBzYW1lIGZyYW1ld29yayBjb2RlIGludG8gY2h1bmtzIGxpa2VcbiAgLy8gYG5vZGVfbW9kdWxlc19fcG5wbV88aGFzaD4uXy5qc2AgYW5kIGA8Li4uPl9uZXh0X2Rpc3RfPGhhc2g+Ll8uanNgLFxuICAvLyBhbmQgZW1pdHMgTmV4dC5qcyBsb2FkZXIgcnVudGltZSBhcyBgMGR4Nl9uZXh0X2Rpc3RfPGhhc2g+Ll8uanNgLlxuICAvLyBUaGVzZSBhcmUgdGhlIGZyYW1lcyB0aGF0IHNob3cgdXAgYWZ0ZXIgVHVyYm9wYWNrIERDRSwgc2FtZSBpbnRlbnRcbiAgLy8gYXMgdGhlIHJhdyBgbm9kZV9tb2R1bGVzLy5wbnBtL2AgZmlsdGVyIGFib3ZlLlxuICBpZiAodHJpbW1lZC5pbmNsdWRlcygnbm9kZV9tb2R1bGVzX19wbnBtXycpKSByZXR1cm4gdHJ1ZTtcbiAgaWYgKHRyaW1tZWQuaW5jbHVkZXMoJ19uZXh0X2Rpc3RfJykpIHJldHVybiB0cnVlO1xuICAvLyBQbGFpbiBub2RlX21vZHVsZXMgKG5vbi1wbnBtIHNldHVwcykgZm9yIHRoZSBzYW1lIGtpbmRzIG9mIGZyYW1ld29ya3MuXG4gIGlmIChcbiAgICB0cmltbWVkLmluY2x1ZGVzKCdub2RlX21vZHVsZXMvbmV4dC8nKSB8fFxuICAgIHRyaW1tZWQuaW5jbHVkZXMoJ25vZGVfbW9kdWxlcy9Ab3BlbnRlbGVtZXRyeS8nKSB8fFxuICAgIHRyaW1tZWQuaW5jbHVkZXMoJ25vZGVfbW9kdWxlcy92aXRlc3QvJykgfHxcbiAgICB0cmltbWVkLmluY2x1ZGVzKCdub2RlX21vZHVsZXMvQHZpdGVzdC8nKVxuICApIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICByZXR1cm4gZmFsc2U7XG59XG5cbmZ1bmN0aW9uIHBpY2tTdHJpbmcoXG4gIG1ldGFkYXRhOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPixcbiAga2V5OiBzdHJpbmdcbik6IHN0cmluZyB8IG51bGwge1xuICBjb25zdCB2ID0gbWV0YWRhdGFba2V5XTtcbiAgcmV0dXJuIHR5cGVvZiB2ID09PSAnc3RyaW5nJyAmJiB2Lmxlbmd0aCA+IDAgPyB2IDogbnVsbDtcbn1cblxuZnVuY3Rpb24ga3ZLZXkoa2V5OiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gQW5zaS5kaW0oa2V5LnBhZEVuZCg2KSk7XG59XG5cbmZ1bmN0aW9uIGZvcm1hdElkUm93KFxuICBsYWJlbDogc3RyaW5nLFxuICBpZDogc3RyaW5nIHwgbnVsbCxcbiAgbmFtZTogc3RyaW5nIHwgbnVsbCxcbiAgZm9ybWF0TmFtZTogKG46IHN0cmluZykgPT4gc3RyaW5nXG4pOiBzdHJpbmcge1xuICBjb25zdCBpZENlbGwgPSBpZCA/IGlkIDogQW5zaS5kaW0oJ+KAlCcpO1xuICBjb25zdCBwYXJzZWQgPSBuYW1lXG4gICAgPyBsYWJlbCA9PT0gJ3J1bidcbiAgICAgID8gcGFyc2VXb3JrZmxvd05hbWUobmFtZSlcbiAgICAgIDogcGFyc2VTdGVwTmFtZShuYW1lKVxuICAgIDogbnVsbDtcbiAgY29uc3QgbmFtZUNlbGwgPSBwYXJzZWRcbiAgICA/IGAke0Fuc2kuZGltKCfCtycpfSAke2Zvcm1hdE5hbWUobmFtZSBhcyBzdHJpbmcpfWBcbiAgICA6ICcnO1xuICByZXR1cm4gYCAgJHtrdktleShsYWJlbCl9ICR7aWRDZWxsfSR7bmFtZUNlbGwgPyAnICcgKyBuYW1lQ2VsbCA6ICcnfWA7XG59XG5cbmZ1bmN0aW9uIGZvcm1hdFBhc3N0aHJvdWdoVmFsdWUodjogdW5rbm93bik6IHN0cmluZyB7XG4gIGlmICh0eXBlb2YgdiA9PT0gJ3N0cmluZycpIHtcbiAgICBpZiAodi5pbmNsdWRlcygnXFxuJykpIHtcbiAgICAgIHJldHVybiB2XG4gICAgICAgIC5zcGxpdCgnXFxuJylcbiAgICAgICAgLm1hcCgobGluZSwgaSkgPT4gKGkgPT09IDAgPyBsaW5lIDogYCAgICAgICAgICR7bGluZX1gKSlcbiAgICAgICAgLmpvaW4oJ1xcbicpO1xuICAgIH1cbiAgICByZXR1cm4gdjtcbiAgfVxuICBpZiAodHlwZW9mIHYgPT09ICdudW1iZXInIHx8IHR5cGVvZiB2ID09PSAnYm9vbGVhbicpIHJldHVybiBTdHJpbmcodik7XG4gIHRyeSB7XG4gICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KHYpO1xuICB9IGNhdGNoIHtcbiAgICByZXR1cm4gU3RyaW5nKHYpO1xuICB9XG59XG4iXX0=
package/dist/logger.d.ts CHANGED
@@ -25,5 +25,6 @@ export declare const runtimeLogger: Logger;
25
25
  export declare const webhookLogger: Logger;
26
26
  export declare const eventsLogger: Logger;
27
27
  export declare const adapterLogger: Logger;
28
+ export declare const buildLogger: Logger;
28
29
  export {};
29
30
  //# sourceMappingURL=logger.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../src/logger.ts"],"names":[],"mappings":"AAGA,KAAK,WAAW,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AAE3C,KAAK,KAAK,GAAG,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,WAAW,KAAK,IAAI,CAAC;AAE/D,MAAM,WAAW,MAAM;IACrB,KAAK,EAAE,KAAK,CAAC;IACb,IAAI,EAAE,KAAK,CAAC;IACZ,IAAI,EAAE,KAAK,CAAC;IACZ,KAAK,EAAE,KAAK,CAAC;IACb;;;;;;OAMG;IACH,KAAK,EAAE,CAAC,QAAQ,EAAE,WAAW,KAAK,MAAM,CAAC;IACzC;;;;OAIG;IACH,MAAM,EAAE,CACN,aAAa,EAAE,MAAM,EACrB,YAAY,CAAC,EAAE,MAAM,EACrB,KAAK,CAAC,EAAE,WAAW,KAChB,MAAM,CAAC;CACb;AAuGD,eAAO,MAAM,UAAU,QAAuB,CAAC;AAC/C,eAAO,MAAM,aAAa,QAA0B,CAAC;AACrD,eAAO,MAAM,aAAa,QAA0B,CAAC;AACrD,eAAO,MAAM,YAAY,QAAyB,CAAC;AACnD,eAAO,MAAM,aAAa,QAA0B,CAAC"}
1
+ {"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../src/logger.ts"],"names":[],"mappings":"AAGA,KAAK,WAAW,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AAE3C,KAAK,KAAK,GAAG,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,WAAW,KAAK,IAAI,CAAC;AAE/D,MAAM,WAAW,MAAM;IACrB,KAAK,EAAE,KAAK,CAAC;IACb,IAAI,EAAE,KAAK,CAAC;IACZ,IAAI,EAAE,KAAK,CAAC;IACZ,KAAK,EAAE,KAAK,CAAC;IACb;;;;;;OAMG;IACH,KAAK,EAAE,CAAC,QAAQ,EAAE,WAAW,KAAK,MAAM,CAAC;IACzC;;;;OAIG;IACH,MAAM,EAAE,CACN,aAAa,EAAE,MAAM,EACrB,YAAY,CAAC,EAAE,MAAM,EACrB,KAAK,CAAC,EAAE,WAAW,KAChB,MAAM,CAAC;CACb;AA8GD,eAAO,MAAM,UAAU,QAAuB,CAAC;AAC/C,eAAO,MAAM,aAAa,QAA0B,CAAC;AACrD,eAAO,MAAM,aAAa,QAA0B,CAAC;AACrD,eAAO,MAAM,YAAY,QAAyB,CAAC;AACnD,eAAO,MAAM,aAAa,QAA0B,CAAC;AACrD,eAAO,MAAM,WAAW,QAEtB,CAAC"}
package/dist/logger.js CHANGED
@@ -2,7 +2,7 @@ import { composeLogLine } from './log-format.js';
2
2
  import { getActiveSpan } from './telemetry.js';
3
3
  /**
4
4
  * Lightweight `DEBUG=` pattern matcher. Replaces the `debug` package, which
5
- * was previously a static dependency of this module that import path
5
+ * was previously a static dependency of this module: that import path
6
6
  * pulled `debug/src/node` and its dynamic `require('tty')` into the
7
7
  * generated Next.js webpack flow route, breaking the V2 combined-bundle
8
8
  * build with `Dynamic require of "tty" is not supported`. Keeping this
@@ -27,10 +27,11 @@ function matchesDebugNamespace(namespace, patternList) {
27
27
  }
28
28
  return enabled;
29
29
  }
30
- function createLogger(namespace) {
30
+ function createLogger(namespace, options = {}) {
31
31
  const build = (parentMetadata) => {
32
+ const getDebugNamespace = (level) => options.debugNamespace ?? `workflow:${namespace}:${level}`;
32
33
  const logger = (level) => {
33
- const debugNamespace = `workflow:${namespace}:${level}`;
34
+ const debugNamespace = getDebugNamespace(level);
34
35
  return (message, metadata) => {
35
36
  const hasParent = Object.keys(parentMetadata).length > 0;
36
37
  const hasCallSite = metadata && Object.keys(metadata).length > 0;
@@ -44,8 +45,8 @@ function createLogger(namespace) {
44
45
  // single string so the runtime's `console.error` / `util.inspect`
45
46
  // doesn't quote-escape multi-line stacks or paragraph hints inside
46
47
  // a JSON-y object dump. The framing line stays at the top with the
47
- // structured fields right under it; the stack body with framework
48
- // internal frames collapsed sits at the bottom. See log-format.ts.
48
+ // structured fields right under it; the stack body (with framework
49
+ // internal frames collapsed) sits at the bottom. See log-format.ts.
49
50
  if (level === 'error' || level === 'warn') {
50
51
  const out = level === 'error' ? console.error : console.warn;
51
52
  out(composeLogLine('[workflow-sdk]', message, merged));
@@ -84,4 +85,7 @@ export const runtimeLogger = createLogger('runtime');
84
85
  export const webhookLogger = createLogger('webhook');
85
86
  export const eventsLogger = createLogger('events');
86
87
  export const adapterLogger = createLogger('adapter');
87
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9nZ2VyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2xvZ2dlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDakQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBK0IvQzs7Ozs7OztHQU9HO0FBQ0gsU0FBUyxxQkFBcUIsQ0FDNUIsU0FBaUIsRUFDakIsV0FBK0I7SUFFL0IsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQ2pCLE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQztJQUVELElBQUksT0FBTyxHQUFHLEtBQUssQ0FBQztJQUNwQixLQUFLLE1BQU0sVUFBVSxJQUFJLFdBQVcsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQztRQUNoRCxNQUFNLE9BQU8sR0FBRyxVQUFVLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDbEMsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQ2IsU0FBUztRQUNYLENBQUM7UUFFRCxNQUFNLFNBQVMsR0FBRyxPQUFPLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQzFDLE1BQU0sU0FBUyxHQUFHLFNBQVMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDO1FBQ3pELE1BQU0sS0FBSyxHQUFHLElBQUksTUFBTSxDQUN0QixJQUFJLFNBQVMsQ0FBQyxPQUFPLENBQUMsb0JBQW9CLEVBQUUsTUFBTSxDQUFDLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsR0FBRyxDQUM1RSxDQUFDO1FBRUYsSUFBSSxLQUFLLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUM7WUFDMUIsT0FBTyxHQUFHLENBQUMsU0FBUyxDQUFDO1FBQ3ZCLENBQUM7SUFDSCxDQUFDO0lBRUQsT0FBTyxP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RSxDQUFDO2FBQ2pCLENBQUM7U0FDTCxDQUFDO0lBQ0osQ0FBQyxDQUFDO0lBRUYsT0FBTyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDbkIsQ0FBQztBQUVELE1BQU0sQ0FBQyxNQUFNLFVBQVUsR0FBRyxZQUFZLENBQUMsTUFBTSxDQUFDLENBQUM7QUFDL0MsTUFBTSxDQUFDLE1BQU0sYUFBYSxHQUFHLFlBQVksQ0FBQyxTQUFTLENBQUMsQ0FBQztBQUNyRCxNQUFNLENBQUMsTUFBTSxhQUFhLEdBQUcsWUFBWSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0FBQ3JELE1BQU0sQ0FBQyxNQUFNLFlBQVksR0FBRyxZQUFZLENBQUMsUUFBUSxDQUFDLENBQUM7QUFDbkQsTUFBTSxDQUFDLE1BQU0sYUFBYSxHQUFHLFlBQVksQ0FBQyxTQUFTLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGNvbXBvc2VMb2dMaW5lIH0gZnJvbSAnLi9sb2ctZm9ybWF0LmpzJztcbmltcG9ydCB7IGdldEFjdGl2ZVNwYW4gfSBmcm9tICcuL3RlbGVtZXRyeS5qcyc7XG5cbnR5cGUgTG9nTWV0YWRhdGEgPSBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcblxudHlwZSBMb2dGbiA9IChtZXNzYWdlOiBzdHJpbmcsIG1ldGFkYXRhPzogTG9nTWV0YWRhdGEpID0+IHZvaWQ7XG5cbmV4cG9ydCBpbnRlcmZhY2UgTG9nZ2VyIHtcbiAgZGVidWc6IExvZ0ZuO1xuICBpbmZvOiBMb2dGbjtcbiAgd2FybjogTG9nRm47XG4gIGVycm9yOiBMb2dGbjtcbiAgLyoqXG4gICAqIFJldHVybnMgYSBjaGlsZCBsb2dnZXIgdGhhdCBtZXJnZXMgdGhlIGdpdmVuIG1ldGFkYXRhIGludG8gZXZlcnkgY2FsbC5cbiAgICogVXNlZnVsIGZvciBhdHRhY2hpbmcgc3RhYmxlIGNvbnRleHQgKGUuZy4gYHdvcmtmbG93UnVuSWRgLCBgd29ya2Zsb3dOYW1lYCxcbiAgICogYHN0ZXBJZGApIHNvIGNhbGxlcnMgZG9uJ3QgaGF2ZSB0byByZXBlYXQgaXQgb24gZXZlcnkgbG9nLlxuICAgKlxuICAgKiBDYWxsLXNpdGUgbWV0YWRhdGEgd2lucyBvbiBjb25mbGljdCwgc28gY2hpbGRyZW4gY2FuIHN0aWxsIG92ZXJyaWRlLlxuICAgKi9cbiAgY2hpbGQ6IChtZXRhZGF0YTogTG9nTWV0YWRhdGEpID0+IExvZ2dlcjtcbiAgLyoqXG4gICAqIENvbnZlbmllbmNlIGNoaWxkIGxvZ2dlciBmb3IgYSB3b3JrZmxvdyBydW4uIEVxdWl2YWxlbnQgdG9cbiAgICogYGxvZ2dlci5jaGlsZCh7IHdvcmtmbG93UnVuSWQsIHdvcmtmbG93TmFtZSB9KWAsIGJ1dCBjZW50cmFsaXplZCBzbyBhbGxcbiAgICogcnVudGltZSBjb2RlIHN0cnVjdHVyZXMgcnVuIG1ldGFkYXRhIGNvbnNpc3RlbnRseS5cbiAgICovXG4gIGZvclJ1bjogKFxuICAgIHdvcmtmbG93UnVuSWQ6IHN0cmluZyxcbiAgICB3b3JrZmxvd05hbWU/OiBzdHJpbmcsXG4gICAgZXh0cmE/OiBMb2dNZXRhZGF0YVxuICApID0+IExvZ2dlcjtcbn1cblxuLyoqXG4gKiBMaWdodHdlaWdodCBgREVCVUc9YCBwYXR0ZXJuIG1hdGNoZXIuIFJlcGxhY2VzIHRoZSBgZGVidWdgIHBhY2thZ2UsIHdoaWNoXG4gKiB3YXMgcHJldmlvdXNseSBhIHN0YXRpYyBkZXBlbmRlbmN5IG9mIHRoaXMgbW9kdWxlIOKAlCB0aGF0IGltcG9ydCBwYXRoXG4gKiBwdWxsZWQgYGRlYnVnL3NyYy9ub2RlYCBhbmQgaXRzIGR5bmFtaWMgYHJlcXVpcmUoJ3R0eScpYCBpbnRvIHRoZVxuICogZ2VuZXJhdGVkIE5leHQuanMgd2VicGFjayBmbG93IHJvdXRlLCBicmVha2luZyB0aGUgVjIgY29tYmluZWQtYnVuZGxlXG4gKiBidWlsZCB3aXRoIGBEeW5hbWljIHJlcXVpcmUgb2YgXCJ0dHlcIiBpcyBub3Qgc3VwcG9ydGVkYC4gS2VlcGluZyB0aGlzXG4gKiBtb2R1bGUgZnJlZSBvZiBgZGVidWdgIGlzIGEgcHJlcmVxdWlzaXRlIGZvciBWMiB3ZWJwYWNrIGJ1aWxkcy5cbiAqL1xuZnVuY3Rpb24gbWF0Y2hlc0RlYnVnTmFtZXNwYWNlKFxuICBuYW1lc3BhY2U6IHN0cmluZyxcbiAgcGF0dGVybkxpc3Q6IHN0cmluZyB8IHVuZGVmaW5lZFxuKTogYm9vbGVhbiB7XG4gIGlmICghcGF0dGVybkxpc3QpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBsZXQgZW5hYmxlZCA9IGZhbHNlO1xuICBmb3IgKGNvbnN0IHJhd1BhdHRlcm4gb2YgcGF0dGVybkxpc3Quc3BsaXQoJywnKSkge1xuICAgIGNvbnN0IHBhdHRlcm4gPSByYXdQYXR0ZXJuLnRyaW0oKTtcbiAgICBpZiAoIXBhdHRlcm4pIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIGNvbnN0IGlzTmVnYXRlZCA9IHBhdHRlcm4uc3RhcnRzV2l0aCgnLScpO1xuICAgIGNvbnN0IGNhbmRpZGF0ZSA9IGlzTmVnYXRlZCA/IHBhdHRlcm4uc2xpY2UoMSkgOiBwYXR0ZXJuO1xuICAgIGNvbnN0IHJlZ2V4ID0gbmV3IFJlZ0V4cChcbiAgICAgIGBeJHtjYW5kaWRhdGUucmVwbGFjZSgvW3xcXFxce30oKVtcXF1eJCs/Ll0vZywgJ1xcXFwkJicpLnJlcGxhY2UoL1xcKi9nLCAnLionKX0kYFxuICAgICk7XG5cbiAgICBpZiAocmVnZXgudGVzdChuYW1lc3BhY2UpKSB7XG4gICAgICBlbmFibGVkID0gIWlzTmVnYXRlZDtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gZW5hYmxlZDtcbn1cblxuZnVuY3Rpb24gY3JlYXRlTG9nZ2VyKG5hbWVzcGFjZTogc3RyaW5nKTogTG9nZ2VyIHtcbiAgY29uc3QgYnVpbGQgPSAocGFyZW50TWV0YWRhdGE6IExvZ01ldGFkYXRhKTogTG9nZ2VyID0+IHtcbiAgICBjb25zdCBsb2dnZXIgPSAobGV2ZWw6IHN0cmluZyk6IExvZ0ZuID0+IHtcbiAgICAgIGNvbnN0IGRlYnVnTmFtZXNwYWNlID0gYHdvcmtmbG93OiR7bmFtZXNwYWNlfToke2xldmVsfWA7XG5cbiAgICAgIHJldHVybiAobWVzc2FnZSwgbWV0YWRhdGEpID0+IHtcbiAgICAgICAgY29uc3QgaGFzUGFyZW50ID0gT2JqZWN0LmtleXMocGFyZW50TWV0YWRhdGEpLmxlbmd0aCA+IDA7XG4gICAgICAgIGNvbnN0IGhhc0NhbGxTaXRlID0gbWV0YWRhdGEgJiYgT2JqZWN0LmtleXMobWV0YWRhdGEpLmxlbmd0aCA+IDA7XG4gICAgICAgIGNvbnN0IG1lcmdlZCA9XG4gICAgICAgICAgaGFzUGFyZW50IHx8IGhhc0NhbGxTaXRlXG4gICAgICAgICAgICA/IHsgLi4ucGFyZW50TWV0YWRhdGEsIC4uLihtZXRhZGF0YSA/PyB7fSkgfVxuICAgICAgICAgICAgOiB1bmRlZmluZWQ7XG5cbiAgICAgICAgLy8gQWx3YXlzIG91dHB1dCBlcnJvci93YXJuIHRvIGNvbnNvbGUgc28gdXNlcnMgc2VlIGNyaXRpY2FsIGlzc3Vlcy5cbiAgICAgICAgLy8gZGVidWcvaW5mbyBvbmx5IG91dHB1dCB3aGVuIERFQlVHIGVudiB2YXIgbWF0Y2hlcyB0aGUgbmFtZXNwYWNlLlxuICAgICAgICAvL1xuICAgICAgICAvLyBDb21wb3NlIHRoZSBmcmFtaW5nICsgc3RydWN0dXJlZCBmaWVsZHMgKyAodHJpbW1lZCkgc3RhY2sgaW50byBhXG4gICAgICAgIC8vIHNpbmdsZSBzdHJpbmcgc28gdGhlIHJ1bnRpbWUncyBgY29uc29sZS5lcnJvcmAgLyBgdXRpbC5pbnNwZWN0YFxuICAgICAgICAvLyBkb2Vzbid0IHF1b3RlLWVzY2FwZSBtdWx0aS1saW5lIHN0YWNrcyBvciBwYXJhZ3JhcGggaGludHMgaW5zaWRlXG4gICAgICAgIC8vIGEgSlNPTi15IG9iamVjdCBkdW1wLiBUaGUgZnJhbWluZyBsaW5lIHN0YXlzIGF0IHRoZSB0b3Agd2l0aCB0aGVcbiAgICAgICAgLy8gc3RydWN0dXJlZCBmaWVsZHMgcmlnaHQgdW5kZXIgaXQ7IHRoZSBzdGFjayBib2R5IOKAlCB3aXRoIGZyYW1ld29ya1xuICAgICAgICAvLyBpbnRlcm5hbCBmcmFtZXMgY29sbGFwc2VkIOKAlCBzaXRzIGF0IHRoZSBib3R0b20uIFNlZSBsb2ctZm9ybWF0LnRzLlxuICAgICAgICBpZiAobGV2ZWwgPT09ICdlcnJvcicgfHwgbGV2ZWwgPT09ICd3YXJuJykge1xuICAgICAgICAgIGNvbnN0IG91dCA9IGxldmVsID09PSAnZXJyb3InID8gY29uc29sZS5lcnJvciA6IGNvbnNvbGUud2FybjtcbiAgICAgICAgICBvdXQoY29tcG9zZUxvZ0xpbmUoJ1t3b3JrZmxvdy1zZGtdJywgbWVzc2FnZSwgbWVyZ2VkKSk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBkZWJ1Z0VuYWJsZWQgPSBtYXRjaGVzRGVidWdOYW1lc3BhY2UoXG4gICAgICAgICAgZGVidWdOYW1lc3BhY2UsXG4gICAgICAgICAgcHJvY2Vzcy5lbnYuREVCVUdcbiAgICAgICAgKTtcblxuICAgICAgICBpZiAoZGVidWdFbmFibGVkKSB7XG4gICAgICAgICAgY29uc29sZS5kZWJ1ZyhgWyR7ZGVidWdOYW1lc3BhY2V9XSAke21lc3NhZ2V9YCwgbWVyZ2VkID8/ICcnKTtcbiAgICAgICAgICBnZXRBY3RpdmVTcGFuKClcbiAgICAgICAgICAgIC50aGVuKChzcGFuKSA9PiB7XG4gICAgICAgICAgICAgIHNwYW4/LmFkZEV2ZW50KGAke2xldmVsfS4ke25hbWVzcGFjZX1gLCB7IG1lc3NhZ2UsIC4uLm1lcmdlZCB9KTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAuY2F0Y2goKCkgPT4ge1xuICAgICAgICAgICAgICAvLyBTaWxlbnRseSBpZ25vcmUgdGVsZW1ldHJ5IGVycm9yc1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgfTtcblxuICAgIHJldHVybiB7XG4gICAgICBkZWJ1ZzogbG9nZ2VyKCdkZWJ1ZycpLFxuICAgICAgaW5mbzogbG9nZ2VyKCdpbmZvJyksXG4gICAgICB3YXJuOiBsb2dnZXIoJ3dhcm4nKSxcbiAgICAgIGVycm9yOiBsb2dnZXIoJ2Vycm9yJyksXG4gICAgICBjaGlsZDogKG1ldGFkYXRhKSA9PiBidWlsZCh7IC4uLnBhcmVudE1ldGFkYXRhLCAuLi5tZXRhZGF0YSB9KSxcbiAgICAgIGZvclJ1bjogKHdvcmtmbG93UnVuSWQsIHdvcmtmbG93TmFtZSwgZXh0cmEpID0+XG4gICAgICAgIGJ1aWxkKHtcbiAgICAgICAgICAuLi5wYXJlbnRNZXRhZGF0YSxcbiAgICAgICAgICB3b3JrZmxvd1J1bklkLFxuICAgICAgICAgIC4uLih3b3JrZmxvd05hbWUgIT09IHVuZGVmaW5lZCA/IHsgd29ya2Zsb3dOYW1lIH0gOiB7fSksXG4gICAgICAgICAgLi4uKGV4dHJhID8/IHt9KSxcbiAgICAgICAgfSksXG4gICAgfTtcbiAgfTtcblxuICByZXR1cm4gYnVpbGQoe30pO1xufVxuXG5leHBvcnQgY29uc3Qgc3RlcExvZ2dlciA9IGNyZWF0ZUxvZ2dlcignc3RlcCcpO1xuZXhwb3J0IGNvbnN0IHJ1bnRpbWVMb2dnZXIgPSBjcmVhdGVMb2dnZXIoJ3J1bnRpbWUnKTtcbmV4cG9ydCBjb25zdCB3ZWJob29rTG9nZ2VyID0gY3JlYXRlTG9nZ2VyKCd3ZWJob29rJyk7XG5leHBvcnQgY29uc3QgZXZlbnRzTG9nZ2VyID0gY3JlYXRlTG9nZ2VyKCdldmVudHMnKTtcbmV4cG9ydCBjb25zdCBhZGFwdGVyTG9nZ2VyID0gY3JlYXRlTG9nZ2VyKCdhZGFwdGVyJyk7XG4iXX0=
88
+ export const buildLogger = createLogger('build', {
89
+ debugNamespace: 'workflow:build',
90
+ });
91
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9nZ2VyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2xvZ2dlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDakQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBbUMvQzs7Ozs7OztHQU9HO0FBQ0gsU0FBUyxxQkFBcUIsQ0FDNUIsU0FBaUIsRUFDakIsV0FBK0I7SUFFL0IsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQ2pCLE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQztJQUVELElBQUksT0FBTyxHQUFHLEtBQUssQ0FBQztJQUNwQixLQUFLLE1BQU0sVUFBVSxJQUFJLFdBQVcsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQztRQUNoRCxNQUFNLE9BQU8sR0FBRyxVQUFVLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDbEMsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQ2IsU0FBUztRQUNYLENBQUM7UUFFRCxNQUFNLFNBQVMsR0FBRyxPQUFPLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQzFDLE1BQU0sU0FBUyxHQUFHLFNBQVMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDO1FBQ3pELE1BQU0sS0FBSyxHQUFHLElBQUksTUFBTSxDQUN0QixJQUFJLFNBQVMsQ0FBQyxPQUFPLENBQUMsb0JBQW9CLEVBQUUsTUFBTSxDQUFDLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsR0FBRyxDQUM1RSxDQUFDO1FBRUYsSUFBSSxLQUFLLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUM7WUFDMUIsT0FBTyxHQUFHLENBQUMsU0FBUyxDQUFDO1FBQ3ZCLENBQUM7SUFDSCxDQUFDO0lBRUQsT0FBTyxP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YixHQUFHLENBQUMsWUFBWSxLQUFLLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRSxZQUFZLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO2dCQUN2RCxHQUFHLENBQUMsS0FBSyxJQUFJLEVBQUUsQ0FBQzthQUNqQixDQUFDO1NBQ0wsQ0FBQztJQUNKLENBQUMsQ0FBQztJQUVGLE9BQU8sS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ25CLENBQUM7QUFFRCxNQUFNLENBQUMsTUFBTSxVQUFVLEdBQUcsWUFBWSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQy9DLE1BQU0sQ0FBQyxNQUFNLGFBQWEsR0FBRyxZQUFZLENBQUMsU0FBUyxDQUFDLENBQUM7QUFDckQsTUFBTSxDQUFDLE1BQU0sYUFBYSxHQUFHLFlBQVksQ0FBQyxTQUFTLENBQUMsQ0FBQztBQUNyRCxNQUFNLENBQUMsTUFBTSxZQUFZLEdBQUcsWUFBWSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0FBQ25ELE1BQU0sQ0FBQyxNQUFNLGFBQWEsR0FBRyxZQUFZLENBQUMsU0FBUyxDQUFDLENBQUM7QUFDckQsTUFBTSxDQUFDLE1BQU0sV0FBVyxHQUFHLFlBQVksQ0FBQyxPQUFPLEVBQUU7SUFDL0MsY0FBYyxFQUFFLGdCQUFnQjtDQUNqQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBjb21wb3NlTG9nTGluZSB9IGZyb20gJy4vbG9nLWZvcm1hdC5qcyc7XG5pbXBvcnQgeyBnZXRBY3RpdmVTcGFuIH0gZnJvbSAnLi90ZWxlbWV0cnkuanMnO1xuXG50eXBlIExvZ01ldGFkYXRhID0gUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG5cbnR5cGUgTG9nRm4gPSAobWVzc2FnZTogc3RyaW5nLCBtZXRhZGF0YT86IExvZ01ldGFkYXRhKSA9PiB2b2lkO1xuXG5leHBvcnQgaW50ZXJmYWNlIExvZ2dlciB7XG4gIGRlYnVnOiBMb2dGbjtcbiAgaW5mbzogTG9nRm47XG4gIHdhcm46IExvZ0ZuO1xuICBlcnJvcjogTG9nRm47XG4gIC8qKlxuICAgKiBSZXR1cm5zIGEgY2hpbGQgbG9nZ2VyIHRoYXQgbWVyZ2VzIHRoZSBnaXZlbiBtZXRhZGF0YSBpbnRvIGV2ZXJ5IGNhbGwuXG4gICAqIFVzZWZ1bCBmb3IgYXR0YWNoaW5nIHN0YWJsZSBjb250ZXh0IChlLmcuIGB3b3JrZmxvd1J1bklkYCwgYHdvcmtmbG93TmFtZWAsXG4gICAqIGBzdGVwSWRgKSBzbyBjYWxsZXJzIGRvbid0IGhhdmUgdG8gcmVwZWF0IGl0IG9uIGV2ZXJ5IGxvZy5cbiAgICpcbiAgICogQ2FsbC1zaXRlIG1ldGFkYXRhIHdpbnMgb24gY29uZmxpY3QsIHNvIGNoaWxkcmVuIGNhbiBzdGlsbCBvdmVycmlkZS5cbiAgICovXG4gIGNoaWxkOiAobWV0YWRhdGE6IExvZ01ldGFkYXRhKSA9PiBMb2dnZXI7XG4gIC8qKlxuICAgKiBDb252ZW5pZW5jZSBjaGlsZCBsb2dnZXIgZm9yIGEgd29ya2Zsb3cgcnVuLiBFcXVpdmFsZW50IHRvXG4gICAqIGBsb2dnZXIuY2hpbGQoeyB3b3JrZmxvd1J1bklkLCB3b3JrZmxvd05hbWUgfSlgLCBidXQgY2VudHJhbGl6ZWQgc28gYWxsXG4gICAqIHJ1bnRpbWUgY29kZSBzdHJ1Y3R1cmVzIHJ1biBtZXRhZGF0YSBjb25zaXN0ZW50bHkuXG4gICAqL1xuICBmb3JSdW46IChcbiAgICB3b3JrZmxvd1J1bklkOiBzdHJpbmcsXG4gICAgd29ya2Zsb3dOYW1lPzogc3RyaW5nLFxuICAgIGV4dHJhPzogTG9nTWV0YWRhdGFcbiAgKSA9PiBMb2dnZXI7XG59XG5cbnR5cGUgTG9nZ2VyT3B0aW9ucyA9IHtcbiAgZGVidWdOYW1lc3BhY2U/OiBzdHJpbmc7XG59O1xuXG4vKipcbiAqIExpZ2h0d2VpZ2h0IGBERUJVRz1gIHBhdHRlcm4gbWF0Y2hlci4gUmVwbGFjZXMgdGhlIGBkZWJ1Z2AgcGFja2FnZSwgd2hpY2hcbiAqIHdhcyBwcmV2aW91c2x5IGEgc3RhdGljIGRlcGVuZGVuY3kgb2YgdGhpcyBtb2R1bGU6IHRoYXQgaW1wb3J0IHBhdGhcbiAqIHB1bGxlZCBgZGVidWcvc3JjL25vZGVgIGFuZCBpdHMgZHluYW1pYyBgcmVxdWlyZSgndHR5JylgIGludG8gdGhlXG4gKiBnZW5lcmF0ZWQgTmV4dC5qcyB3ZWJwYWNrIGZsb3cgcm91dGUsIGJyZWFraW5nIHRoZSBWMiBjb21iaW5lZC1idW5kbGVcbiAqIGJ1aWxkIHdpdGggYER5bmFtaWMgcmVxdWlyZSBvZiBcInR0eVwiIGlzIG5vdCBzdXBwb3J0ZWRgLiBLZWVwaW5nIHRoaXNcbiAqIG1vZHVsZSBmcmVlIG9mIGBkZWJ1Z2AgaXMgYSBwcmVyZXF1aXNpdGUgZm9yIFYyIHdlYnBhY2sgYnVpbGRzLlxuICovXG5mdW5jdGlvbiBtYXRjaGVzRGVidWdOYW1lc3BhY2UoXG4gIG5hbWVzcGFjZTogc3RyaW5nLFxuICBwYXR0ZXJuTGlzdDogc3RyaW5nIHwgdW5kZWZpbmVkXG4pOiBib29sZWFuIHtcbiAgaWYgKCFwYXR0ZXJuTGlzdCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGxldCBlbmFibGVkID0gZmFsc2U7XG4gIGZvciAoY29uc3QgcmF3UGF0dGVybiBvZiBwYXR0ZXJuTGlzdC5zcGxpdCgnLCcpKSB7XG4gICAgY29uc3QgcGF0dGVybiA9IHJhd1BhdHRlcm4udHJpbSgpO1xuICAgIGlmICghcGF0dGVybikge1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgY29uc3QgaXNOZWdhdGVkID0gcGF0dGVybi5zdGFydHNXaXRoKCctJyk7XG4gICAgY29uc3QgY2FuZGlkYXRlID0gaXNOZWdhdGVkID8gcGF0dGVybi5zbGljZSgxKSA6IHBhdHRlcm47XG4gICAgY29uc3QgcmVnZXggPSBuZXcgUmVnRXhwKFxuICAgICAgYF4ke2NhbmRpZGF0ZS5yZXBsYWNlKC9bfFxcXFx7fSgpW1xcXV4kKz8uXS9nLCAnXFxcXCQmJykucmVwbGFjZSgvXFwqL2csICcuKicpfSRgXG4gICAgKTtcblxuICAgIGlmIChyZWdleC50ZXN0KG5hbWVzcGFjZSkpIHtcbiAgICAgIGVuYWJsZWQgPSAhaXNOZWdhdGVkO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBlbmFibGVkO1xufVxuXG5mdW5jdGlvbiBjcmVhdGVMb2dnZXIobmFtZXNwYWNlOiBzdHJpbmcsIG9wdGlvbnM6IExvZ2dlck9wdGlvbnMgPSB7fSk6IExvZ2dlciB7XG4gIGNvbnN0IGJ1aWxkID0gKHBhcmVudE1ldGFkYXRhOiBMb2dNZXRhZGF0YSk6IExvZ2dlciA9PiB7XG4gICAgY29uc3QgZ2V0RGVidWdOYW1lc3BhY2UgPSAobGV2ZWw6IHN0cmluZykgPT5cbiAgICAgIG9wdGlvbnMuZGVidWdOYW1lc3BhY2UgPz8gYHdvcmtmbG93OiR7bmFtZXNwYWNlfToke2xldmVsfWA7XG5cbiAgICBjb25zdCBsb2dnZXIgPSAobGV2ZWw6IHN0cmluZyk6IExvZ0ZuID0+IHtcbiAgICAgIGNvbnN0IGRlYnVnTmFtZXNwYWNlID0gZ2V0RGVidWdOYW1lc3BhY2UobGV2ZWwpO1xuXG4gICAgICByZXR1cm4gKG1lc3NhZ2UsIG1ldGFkYXRhKSA9PiB7XG4gICAgICAgIGNvbnN0IGhhc1BhcmVudCA9IE9iamVjdC5rZXlzKHBhcmVudE1ldGFkYXRhKS5sZW5ndGggPiAwO1xuICAgICAgICBjb25zdCBoYXNDYWxsU2l0ZSA9IG1ldGFkYXRhICYmIE9iamVjdC5rZXlzKG1ldGFkYXRhKS5sZW5ndGggPiAwO1xuICAgICAgICBjb25zdCBtZXJnZWQgPVxuICAgICAgICAgIGhhc1BhcmVudCB8fCBoYXNDYWxsU2l0ZVxuICAgICAgICAgICAgPyB7IC4uLnBhcmVudE1ldGFkYXRhLCAuLi4obWV0YWRhdGEgPz8ge30pIH1cbiAgICAgICAgICAgIDogdW5kZWZpbmVkO1xuXG4gICAgICAgIC8vIEFsd2F5cyBvdXRwdXQgZXJyb3Ivd2FybiB0byBjb25zb2xlIHNvIHVzZXJzIHNlZSBjcml0aWNhbCBpc3N1ZXMuXG4gICAgICAgIC8vIGRlYnVnL2luZm8gb25seSBvdXRwdXQgd2hlbiBERUJVRyBlbnYgdmFyIG1hdGNoZXMgdGhlIG5hbWVzcGFjZS5cbiAgICAgICAgLy9cbiAgICAgICAgLy8gQ29tcG9zZSB0aGUgZnJhbWluZyArIHN0cnVjdHVyZWQgZmllbGRzICsgKHRyaW1tZWQpIHN0YWNrIGludG8gYVxuICAgICAgICAvLyBzaW5nbGUgc3RyaW5nIHNvIHRoZSBydW50aW1lJ3MgYGNvbnNvbGUuZXJyb3JgIC8gYHV0aWwuaW5zcGVjdGBcbiAgICAgICAgLy8gZG9lc24ndCBxdW90ZS1lc2NhcGUgbXVsdGktbGluZSBzdGFja3Mgb3IgcGFyYWdyYXBoIGhpbnRzIGluc2lkZVxuICAgICAgICAvLyBhIEpTT04teSBvYmplY3QgZHVtcC4gVGhlIGZyYW1pbmcgbGluZSBzdGF5cyBhdCB0aGUgdG9wIHdpdGggdGhlXG4gICAgICAgIC8vIHN0cnVjdHVyZWQgZmllbGRzIHJpZ2h0IHVuZGVyIGl0OyB0aGUgc3RhY2sgYm9keSAod2l0aCBmcmFtZXdvcmtcbiAgICAgICAgLy8gaW50ZXJuYWwgZnJhbWVzIGNvbGxhcHNlZCkgc2l0cyBhdCB0aGUgYm90dG9tLiBTZWUgbG9nLWZvcm1hdC50cy5cbiAgICAgICAgaWYgKGxldmVsID09PSAnZXJyb3InIHx8IGxldmVsID09PSAnd2FybicpIHtcbiAgICAgICAgICBjb25zdCBvdXQgPSBsZXZlbCA9PT0gJ2Vycm9yJyA/IGNvbnNvbGUuZXJyb3IgOiBjb25zb2xlLndhcm47XG4gICAgICAgICAgb3V0KGNvbXBvc2VMb2dMaW5lKCdbd29ya2Zsb3ctc2RrXScsIG1lc3NhZ2UsIG1lcmdlZCkpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgZGVidWdFbmFibGVkID0gbWF0Y2hlc0RlYnVnTmFtZXNwYWNlKFxuICAgICAgICAgIGRlYnVnTmFtZXNwYWNlLFxuICAgICAgICAgIHByb2Nlc3MuZW52LkRFQlVHXG4gICAgICAgICk7XG5cbiAgICAgICAgaWYgKGRlYnVnRW5hYmxlZCkge1xuICAgICAgICAgIGNvbnNvbGUuZGVidWcoYFske2RlYnVnTmFtZXNwYWNlfV0gJHttZXNzYWdlfWAsIG1lcmdlZCA/PyAnJyk7XG4gICAgICAgICAgZ2V0QWN0aXZlU3BhbigpXG4gICAgICAgICAgICAudGhlbigoc3BhbikgPT4ge1xuICAgICAgICAgICAgICBzcGFuPy5hZGRFdmVudChgJHtsZXZlbH0uJHtuYW1lc3BhY2V9YCwgeyBtZXNzYWdlLCAuLi5tZXJnZWQgfSk7XG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgLmNhdGNoKCgpID0+IHtcbiAgICAgICAgICAgICAgLy8gU2lsZW50bHkgaWdub3JlIHRlbGVtZXRyeSBlcnJvcnNcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9O1xuICAgIH07XG5cbiAgICByZXR1cm4ge1xuICAgICAgZGVidWc6IGxvZ2dlcignZGVidWcnKSxcbiAgICAgIGluZm86IGxvZ2dlcignaW5mbycpLFxuICAgICAgd2FybjogbG9nZ2VyKCd3YXJuJyksXG4gICAgICBlcnJvcjogbG9nZ2VyKCdlcnJvcicpLFxuICAgICAgY2hpbGQ6IChtZXRhZGF0YSkgPT4gYnVpbGQoeyAuLi5wYXJlbnRNZXRhZGF0YSwgLi4ubWV0YWRhdGEgfSksXG4gICAgICBmb3JSdW46ICh3b3JrZmxvd1J1bklkLCB3b3JrZmxvd05hbWUsIGV4dHJhKSA9PlxuICAgICAgICBidWlsZCh7XG4gICAgICAgICAgLi4ucGFyZW50TWV0YWRhdGEsXG4gICAgICAgICAgd29ya2Zsb3dSdW5JZCxcbiAgICAgICAgICAuLi4od29ya2Zsb3dOYW1lICE9PSB1bmRlZmluZWQgPyB7IHdvcmtmbG93TmFtZSB9IDoge30pLFxuICAgICAgICAgIC4uLihleHRyYSA/PyB7fSksXG4gICAgICAgIH0pLFxuICAgIH07XG4gIH07XG5cbiAgcmV0dXJuIGJ1aWxkKHt9KTtcbn1cblxuZXhwb3J0IGNvbnN0IHN0ZXBMb2dnZXIgPSBjcmVhdGVMb2dnZXIoJ3N0ZXAnKTtcbmV4cG9ydCBjb25zdCBydW50aW1lTG9nZ2VyID0gY3JlYXRlTG9nZ2VyKCdydW50aW1lJyk7XG5leHBvcnQgY29uc3Qgd2ViaG9va0xvZ2dlciA9IGNyZWF0ZUxvZ2dlcignd2ViaG9vaycpO1xuZXhwb3J0IGNvbnN0IGV2ZW50c0xvZ2dlciA9IGNyZWF0ZUxvZ2dlcignZXZlbnRzJyk7XG5leHBvcnQgY29uc3QgYWRhcHRlckxvZ2dlciA9IGNyZWF0ZUxvZ2dlcignYWRhcHRlcicpO1xuZXhwb3J0IGNvbnN0IGJ1aWxkTG9nZ2VyID0gY3JlYXRlTG9nZ2VyKCdidWlsZCcsIHtcbiAgZGVidWdOYW1lc3BhY2U6ICd3b3JrZmxvdzpidWlsZCcsXG59KTtcbiJdfQ==