@workflow/core 5.0.0-beta.3 → 5.0.0-beta.31

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 (268) hide show
  1. package/dist/attribute-changes.d.ts +7 -0
  2. package/dist/attribute-changes.d.ts.map +1 -0
  3. package/dist/attribute-changes.js +25 -0
  4. package/dist/capabilities.d.ts +22 -1
  5. package/dist/capabilities.d.ts.map +1 -1
  6. package/dist/capabilities.js +41 -4
  7. package/dist/capture-stack.d.ts +16 -0
  8. package/dist/capture-stack.d.ts.map +1 -0
  9. package/dist/capture-stack.js +21 -0
  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 +26 -3
  14. package/dist/classify-error.d.ts.map +1 -1
  15. package/dist/classify-error.js +103 -6
  16. package/dist/context-errors.d.ts +27 -0
  17. package/dist/context-errors.d.ts.map +1 -0
  18. package/dist/context-errors.js +101 -0
  19. package/dist/context-violation-error.d.ts +97 -0
  20. package/dist/context-violation-error.d.ts.map +1 -0
  21. package/dist/context-violation-error.js +147 -0
  22. package/dist/create-hook.d.ts +42 -3
  23. package/dist/create-hook.d.ts.map +1 -1
  24. package/dist/create-hook.js +4 -3
  25. package/dist/define-hook.d.ts.map +1 -1
  26. package/dist/define-hook.js +20 -5
  27. package/dist/describe-error.d.ts +70 -0
  28. package/dist/describe-error.d.ts.map +1 -0
  29. package/dist/describe-error.js +165 -0
  30. package/dist/encryption.d.ts +22 -1
  31. package/dist/encryption.d.ts.map +1 -1
  32. package/dist/encryption.js +72 -27
  33. package/dist/events-consumer.d.ts +25 -1
  34. package/dist/events-consumer.d.ts.map +1 -1
  35. package/dist/events-consumer.js +95 -16
  36. package/dist/flushable-stream.d.ts +10 -10
  37. package/dist/flushable-stream.d.ts.map +1 -1
  38. package/dist/flushable-stream.js +26 -15
  39. package/dist/global.d.ts +35 -1
  40. package/dist/global.d.ts.map +1 -1
  41. package/dist/global.js +21 -3
  42. package/dist/index.d.ts +1 -0
  43. package/dist/index.d.ts.map +1 -1
  44. package/dist/index.js +2 -1
  45. package/dist/log-format.d.ts +25 -0
  46. package/dist/log-format.d.ts.map +1 -0
  47. package/dist/log-format.js +250 -0
  48. package/dist/logger.d.ts +29 -30
  49. package/dist/logger.d.ts.map +1 -1
  50. package/dist/logger.js +82 -32
  51. package/dist/private.d.ts +107 -2
  52. package/dist/private.d.ts.map +1 -1
  53. package/dist/private.js +80 -3
  54. package/dist/runtime/constants.d.ts +189 -0
  55. package/dist/runtime/constants.d.ts.map +1 -1
  56. package/dist/runtime/constants.js +310 -15
  57. package/dist/runtime/get-port-lazy.d.ts +25 -0
  58. package/dist/runtime/get-port-lazy.d.ts.map +1 -0
  59. package/dist/runtime/get-port-lazy.js +92 -0
  60. package/dist/runtime/get-world-lazy.d.ts +23 -0
  61. package/dist/runtime/get-world-lazy.d.ts.map +1 -0
  62. package/dist/runtime/get-world-lazy.js +46 -0
  63. package/dist/runtime/helpers.d.ts +57 -6
  64. package/dist/runtime/helpers.d.ts.map +1 -1
  65. package/dist/runtime/helpers.js +169 -32
  66. package/dist/runtime/replay-budget.d.ts +98 -0
  67. package/dist/runtime/replay-budget.d.ts.map +1 -0
  68. package/dist/runtime/replay-budget.js +192 -0
  69. package/dist/runtime/resume-hook.d.ts.map +1 -1
  70. package/dist/runtime/resume-hook.js +39 -23
  71. package/dist/runtime/run-id-time.d.ts +10 -0
  72. package/dist/runtime/run-id-time.d.ts.map +1 -0
  73. package/dist/runtime/run-id-time.js +31 -0
  74. package/dist/runtime/run.d.ts +6 -2
  75. package/dist/runtime/run.d.ts.map +1 -1
  76. package/dist/runtime/run.js +52 -10
  77. package/dist/runtime/runs.d.ts +36 -2
  78. package/dist/runtime/runs.d.ts.map +1 -1
  79. package/dist/runtime/runs.js +18 -7
  80. package/dist/runtime/start.d.ts +58 -1
  81. package/dist/runtime/start.d.ts.map +1 -1
  82. package/dist/runtime/start.js +160 -46
  83. package/dist/runtime/step-executor.d.ts +131 -0
  84. package/dist/runtime/step-executor.d.ts.map +1 -0
  85. package/dist/runtime/step-executor.js +818 -0
  86. package/dist/runtime/step-handler.d.ts.map +1 -1
  87. package/dist/runtime/step-handler.js +718 -557
  88. package/dist/runtime/step-latency.d.ts +131 -0
  89. package/dist/runtime/step-latency.d.ts.map +1 -0
  90. package/dist/runtime/step-latency.js +155 -0
  91. package/dist/runtime/step-ownership.d.ts +72 -0
  92. package/dist/runtime/step-ownership.d.ts.map +1 -0
  93. package/dist/runtime/step-ownership.js +114 -0
  94. package/dist/runtime/step-single-flight.d.ts +12 -0
  95. package/dist/runtime/step-single-flight.d.ts.map +1 -0
  96. package/dist/runtime/step-single-flight.js +69 -0
  97. package/dist/runtime/suspension-handler.d.ts +81 -7
  98. package/dist/runtime/suspension-handler.d.ts.map +1 -1
  99. package/dist/runtime/suspension-handler.js +355 -137
  100. package/dist/runtime/wait-continuation.d.ts +84 -0
  101. package/dist/runtime/wait-continuation.d.ts.map +1 -0
  102. package/dist/runtime/wait-continuation.js +105 -0
  103. package/dist/runtime/wait-until.d.ts +18 -0
  104. package/dist/runtime/wait-until.d.ts.map +1 -0
  105. package/dist/runtime/wait-until.js +42 -0
  106. package/dist/runtime/world-compatibility.d.ts +5 -0
  107. package/dist/runtime/world-compatibility.d.ts.map +1 -0
  108. package/dist/runtime/world-compatibility.js +12 -0
  109. package/dist/runtime/world-init.d.ts +50 -0
  110. package/dist/runtime/world-init.d.ts.map +1 -0
  111. package/dist/runtime/world-init.js +50 -0
  112. package/dist/runtime/world-target.d.ts +11 -0
  113. package/dist/runtime/world-target.d.ts.map +1 -0
  114. package/dist/runtime/world-target.js +15 -0
  115. package/dist/runtime/world.d.ts +21 -9
  116. package/dist/runtime/world.d.ts.map +1 -1
  117. package/dist/runtime/world.js +58 -83
  118. package/dist/runtime.d.ts +15 -10
  119. package/dist/runtime.d.ts.map +1 -1
  120. package/dist/runtime.js +1757 -326
  121. package/dist/schemas.d.ts +1 -1
  122. package/dist/schemas.d.ts.map +1 -1
  123. package/dist/schemas.js +1 -1
  124. package/dist/serialization/client.d.ts +17 -0
  125. package/dist/serialization/client.d.ts.map +1 -0
  126. package/dist/serialization/client.js +48 -0
  127. package/dist/serialization/codec-devalue.d.ts +14 -0
  128. package/dist/serialization/codec-devalue.d.ts.map +1 -0
  129. package/dist/serialization/codec-devalue.js +98 -0
  130. package/dist/serialization/codec.d.ts +106 -0
  131. package/dist/serialization/codec.d.ts.map +1 -0
  132. package/dist/serialization/codec.js +17 -0
  133. package/dist/serialization/compression.d.ts +104 -0
  134. package/dist/serialization/compression.d.ts.map +1 -0
  135. package/dist/serialization/compression.js +260 -0
  136. package/dist/serialization/encryption.d.ts +33 -0
  137. package/dist/serialization/encryption.d.ts.map +1 -0
  138. package/dist/serialization/encryption.js +70 -0
  139. package/dist/serialization/errors.d.ts +34 -0
  140. package/dist/serialization/errors.d.ts.map +1 -0
  141. package/dist/serialization/errors.js +59 -0
  142. package/dist/serialization/format.d.ts +60 -0
  143. package/dist/serialization/format.d.ts.map +1 -0
  144. package/dist/serialization/format.js +97 -0
  145. package/dist/serialization/index.d.ts +19 -0
  146. package/dist/serialization/index.d.ts.map +1 -0
  147. package/dist/serialization/index.js +22 -0
  148. package/dist/serialization/reducers/class.d.ts +11 -0
  149. package/dist/serialization/reducers/class.d.ts.map +1 -0
  150. package/dist/serialization/reducers/class.js +68 -0
  151. package/dist/serialization/reducers/common.d.ts +16 -0
  152. package/dist/serialization/reducers/common.d.ts.map +1 -0
  153. package/dist/serialization/reducers/common.js +417 -0
  154. package/dist/serialization/reducers/step-function.d.ts +35 -0
  155. package/dist/serialization/reducers/step-function.d.ts.map +1 -0
  156. package/dist/serialization/reducers/step-function.js +88 -0
  157. package/dist/serialization/step.d.ts +17 -0
  158. package/dist/serialization/step.d.ts.map +1 -0
  159. package/dist/serialization/step.js +48 -0
  160. package/dist/serialization/types.d.ts +253 -0
  161. package/dist/serialization/types.d.ts.map +1 -0
  162. package/dist/serialization/types.js +25 -0
  163. package/dist/serialization/workflow.d.ts +29 -0
  164. package/dist/serialization/workflow.d.ts.map +1 -0
  165. package/dist/serialization/workflow.js +54 -0
  166. package/dist/serialization-format.d.ts +16 -0
  167. package/dist/serialization-format.d.ts.map +1 -1
  168. package/dist/serialization-format.js +213 -50
  169. package/dist/serialization.d.ts +322 -214
  170. package/dist/serialization.d.ts.map +1 -1
  171. package/dist/serialization.js +1575 -664
  172. package/dist/set-attributes.d.ts +18 -0
  173. package/dist/set-attributes.d.ts.map +1 -0
  174. package/dist/set-attributes.js +61 -0
  175. package/dist/sleep.d.ts.map +1 -1
  176. package/dist/sleep.js +3 -2
  177. package/dist/source-map.d.ts +5 -0
  178. package/dist/source-map.d.ts.map +1 -1
  179. package/dist/source-map.js +102 -10
  180. package/dist/step/context-storage.d.ts +53 -0
  181. package/dist/step/context-storage.d.ts.map +1 -1
  182. package/dist/step/context-storage.js +1 -1
  183. package/dist/step/get-closure-vars.d.ts.map +1 -1
  184. package/dist/step/get-closure-vars.js +3 -2
  185. package/dist/step/get-step-metadata.d.ts.map +1 -1
  186. package/dist/step/get-step-metadata.js +3 -2
  187. package/dist/step/get-workflow-metadata.d.ts.map +1 -1
  188. package/dist/step/get-workflow-metadata.js +3 -2
  189. package/dist/step/writable-stream.d.ts.map +1 -1
  190. package/dist/step/writable-stream.js +58 -6
  191. package/dist/step-hydration-cache.d.ts +148 -0
  192. package/dist/step-hydration-cache.d.ts.map +1 -0
  193. package/dist/step-hydration-cache.js +171 -0
  194. package/dist/step.d.ts.map +1 -1
  195. package/dist/step.js +144 -25
  196. package/dist/symbols.d.ts +28 -0
  197. package/dist/symbols.d.ts.map +1 -1
  198. package/dist/symbols.js +29 -1
  199. package/dist/telemetry/semantic-conventions.d.ts +98 -2
  200. package/dist/telemetry/semantic-conventions.d.ts.map +1 -1
  201. package/dist/telemetry/semantic-conventions.js +66 -1
  202. package/dist/telemetry.d.ts +68 -0
  203. package/dist/telemetry.d.ts.map +1 -1
  204. package/dist/telemetry.js +106 -4
  205. package/dist/types.d.ts +6 -0
  206. package/dist/types.d.ts.map +1 -1
  207. package/dist/types.js +23 -1
  208. package/dist/util.d.ts +16 -6
  209. package/dist/util.d.ts.map +1 -1
  210. package/dist/util.js +25 -16
  211. package/dist/version.d.ts +1 -1
  212. package/dist/version.d.ts.map +1 -1
  213. package/dist/version.js +2 -2
  214. package/dist/vm/index.d.ts.map +1 -1
  215. package/dist/vm/index.js +3 -2
  216. package/dist/vm/script-cache.d.ts +28 -0
  217. package/dist/vm/script-cache.d.ts.map +1 -0
  218. package/dist/vm/script-cache.js +140 -0
  219. package/dist/workflow/abort-controller.d.ts +65 -0
  220. package/dist/workflow/abort-controller.d.ts.map +1 -0
  221. package/dist/workflow/abort-controller.js +277 -0
  222. package/dist/workflow/attribute-dispatcher.d.ts +6 -0
  223. package/dist/workflow/attribute-dispatcher.d.ts.map +1 -0
  224. package/dist/workflow/attribute-dispatcher.js +48 -0
  225. package/dist/workflow/create-hook.d.ts.map +1 -1
  226. package/dist/workflow/create-hook.js +25 -3
  227. package/dist/workflow/define-hook.d.ts +1 -1
  228. package/dist/workflow/define-hook.d.ts.map +1 -1
  229. package/dist/workflow/define-hook.js +8 -4
  230. package/dist/workflow/get-workflow-metadata.d.ts.map +1 -1
  231. package/dist/workflow/get-workflow-metadata.js +14 -3
  232. package/dist/workflow/hook.d.ts.map +1 -1
  233. package/dist/workflow/hook.js +207 -33
  234. package/dist/workflow/index.d.ts +1 -0
  235. package/dist/workflow/index.d.ts.map +1 -1
  236. package/dist/workflow/index.js +5 -3
  237. package/dist/workflow/set-attributes.d.ts +77 -0
  238. package/dist/workflow/set-attributes.d.ts.map +1 -0
  239. package/dist/workflow/set-attributes.js +65 -0
  240. package/dist/workflow/sleep.d.ts.map +1 -1
  241. package/dist/workflow/sleep.js +45 -8
  242. package/dist/workflow/world-init-stub.d.ts +15 -0
  243. package/dist/workflow/world-init-stub.d.ts.map +1 -0
  244. package/dist/workflow/world-init-stub.js +15 -0
  245. package/dist/workflow.d.ts +17 -1
  246. package/dist/workflow.d.ts.map +1 -1
  247. package/dist/workflow.js +190 -56
  248. package/docs/api-reference/create-hook.mdx +38 -0
  249. package/docs/api-reference/create-webhook.mdx +1 -0
  250. package/docs/api-reference/fetch.mdx +5 -0
  251. package/docs/api-reference/index.mdx +3 -0
  252. package/docs/api-reference/set-attributes.mdx +65 -0
  253. package/docs/foundations/cancellation.mdx +459 -0
  254. package/docs/foundations/errors-and-retries.mdx +7 -3
  255. package/docs/foundations/hooks.mdx +29 -0
  256. package/docs/foundations/idempotency.mdx +236 -11
  257. package/docs/foundations/index.mdx +1 -23
  258. package/docs/foundations/meta.json +3 -1
  259. package/docs/foundations/serialization.mdx +77 -41
  260. package/docs/foundations/starting-workflows.mdx +5 -1
  261. package/docs/foundations/streaming.mdx +14 -23
  262. package/docs/foundations/versioning.mdx +263 -0
  263. package/docs/how-it-works/cancellation.mdx +287 -0
  264. package/docs/how-it-works/code-transform.mdx +2 -2
  265. package/docs/how-it-works/encryption.mdx +2 -2
  266. package/docs/how-it-works/event-sourcing.mdx +2 -2
  267. package/docs/how-it-works/meta.json +2 -1
  268. package/package.json +32 -11
@@ -0,0 +1,417 @@
1
+ /**
2
+ * Common reducers and revivers for types shared across all serialization modes.
3
+ *
4
+ * Handles: ArrayBuffer, BigInt, typed arrays, Date, Error, Headers, Map, Set,
5
+ * RegExp, Request, Response, URL, URLSearchParams.
6
+ *
7
+ * Note: Uses Node.js Buffer for base64 encoding/decoding. For environments
8
+ * without Buffer (e.g. QuickJS VM), a polyfill or alternative base64
9
+ * implementation will be needed.
10
+ */
11
+ import { types } from 'node:util';
12
+ import { FatalError, HookConflictError, RetryableError, RuntimeDecryptionError, } from '@workflow/errors';
13
+ // ---- Base64 helpers ----
14
+ function arrayBufferToBase64(value, offset, length) {
15
+ // Avoid returning falsy value for zero-length buffers
16
+ if (length === 0)
17
+ return '.';
18
+ // Create a proper copy to avoid ArrayBuffer detachment issues
19
+ const uint8 = new Uint8Array(value, offset, length);
20
+ return Buffer.from(uint8).toString('base64');
21
+ }
22
+ function viewToBase64(value) {
23
+ return arrayBufferToBase64(value.buffer, value.byteOffset, value.byteLength);
24
+ }
25
+ function reviveArrayBuffer(value, global) {
26
+ const base64 = value === '.' ? '' : value;
27
+ const buffer = Buffer.from(base64, 'base64');
28
+ const arrayBuffer = new global.ArrayBuffer(buffer.length);
29
+ const uint8Array = new global.Uint8Array(arrayBuffer);
30
+ uint8Array.set(buffer);
31
+ return arrayBuffer;
32
+ }
33
+ function revive(str) {
34
+ // devalue.stringify() always produces valid JSON: special values
35
+ // (undefined, NaN, Infinity, -0) are encoded as negative integer
36
+ // sentinels and the remaining structure is ordinary JSON. Parsing
37
+ // with JSON.parse yields the flattened form that unflatten() expects.
38
+ return JSON.parse(str);
39
+ }
40
+ /**
41
+ * Reduces any native Error instance to the shared `BaseErrorPayload` shape,
42
+ * preserving `cause` only when present (to distinguish "no cause" from
43
+ * "cause is undefined"). Used directly by reducers for subclasses that need
44
+ * to extend the shape with additional fields.
45
+ *
46
+ * `types.isNativeError()` is used instead of `instanceof` for cross-VM safety:
47
+ * errors may originate from a different VM context, and `instanceof` fails
48
+ * across VM boundaries since each context has its own Error constructor.
49
+ */
50
+ function reduceErrorBase(value) {
51
+ if (!types.isNativeError(value))
52
+ return false;
53
+ const reduced = {
54
+ message: value.message,
55
+ stack: value.stack,
56
+ };
57
+ if ('cause' in value)
58
+ reduced.cause = value.cause;
59
+ return reduced;
60
+ }
61
+ /**
62
+ * Reduces a native error to the shared `BaseErrorPayload`, but only when its
63
+ * `name` instance property matches `subclassName`. Used by:
64
+ * - `makeErrorSubclassReducer`, for subclasses whose serialized shape is
65
+ * exactly `BaseErrorPayload`.
66
+ * - Inline reducers for subclasses that extend the shape with additional
67
+ * fields (e.g. `AggregateError.errors`, `RetryableError.retryAfter`).
68
+ *
69
+ * Matching by `value.name` (instead of `value.constructor?.name`) is robust
70
+ * to bundlers that emit the class as an anonymous expression — e.g. Turbopack
71
+ * compiles `export class FatalError extends Error {…}` to a registration call
72
+ * like `e.s(["FatalError", 0, class extends Error {…}])`, and the resulting
73
+ * constructor has `name === ''`. Since every Error subclass we care about
74
+ * sets `this.name` explicitly in its constructor (built-in subclasses do this
75
+ * automatically; `FatalError`/`RetryableError` do it in user code), the
76
+ * instance property is the reliable identity marker across realms and
77
+ * bundlers.
78
+ */
79
+ function reduceNamedErrorSubclassBase(subclassName, value) {
80
+ if (!types.isNativeError(value))
81
+ return false;
82
+ if (value.name !== subclassName)
83
+ return false;
84
+ return reduceErrorBase(value);
85
+ }
86
+ /**
87
+ * Creates a reducer for a built-in Error subclass whose serialized shape is
88
+ * exactly `BaseErrorPayload` (no extra fields). The reducer matches by
89
+ * constructor name (after the isNativeError gate), since `instanceof` may
90
+ * fail across VM boundaries.
91
+ */
92
+ function makeErrorSubclassReducer(subclassName) {
93
+ return (value) => {
94
+ const base = reduceNamedErrorSubclassBase(subclassName, value);
95
+ if (!base)
96
+ return false;
97
+ return base;
98
+ };
99
+ }
100
+ /**
101
+ * Creates a reviver for a built-in Error subclass. Reconstructs the correct
102
+ * built-in Error type using the context's constructor. The `cause` option is
103
+ * only passed when the serialized data includes it, preserving the distinction
104
+ * between "no cause" and "cause is undefined".
105
+ */
106
+ function makeErrorSubclassReviver(global, ctorName) {
107
+ return (value) => {
108
+ const v = value;
109
+ const opts = 'cause' in v ? { cause: v.cause } : undefined;
110
+ const Ctor = global[ctorName];
111
+ const error = new Ctor(v.message, opts);
112
+ if (v.stack !== undefined)
113
+ error.stack = v.stack;
114
+ return error;
115
+ };
116
+ }
117
+ // ---- Reducers ----
118
+ export function getCommonReducers(global = globalThis) {
119
+ return {
120
+ ArrayBuffer: (value) => value instanceof global.ArrayBuffer &&
121
+ arrayBufferToBase64(value, 0, value.byteLength),
122
+ BigInt: (value) => typeof value === 'bigint' && value.toString(),
123
+ BigInt64Array: (value) => value instanceof global.BigInt64Array && viewToBase64(value),
124
+ BigUint64Array: (value) => value instanceof global.BigUint64Array && viewToBase64(value),
125
+ Date: (value) => {
126
+ if (!(value instanceof global.Date))
127
+ return false;
128
+ const valid = !Number.isNaN(value.getDate());
129
+ return valid ? value.toISOString() : '.';
130
+ },
131
+ // DOMException is a special case: it `instanceof Error` is true in Node,
132
+ // but `types.isNativeError()` returns FALSE for it, so the generic Error
133
+ // reducer (which gates on isNativeError) won't match. Check it explicitly
134
+ // by constructor name + Error inheritance so we catch DOMExceptions from
135
+ // any realm (cross-VM safety: instanceof global.DOMException would fail
136
+ // for instances minted in another context).
137
+ DOMException: (value) => {
138
+ if (value === null || typeof value !== 'object')
139
+ return false;
140
+ if (value.constructor?.name !==
141
+ 'DOMException')
142
+ return false;
143
+ const e = value;
144
+ const reduced = {
145
+ message: e.message,
146
+ name: e.name,
147
+ stack: e.stack,
148
+ };
149
+ if ('cause' in e)
150
+ reduced.cause = e.cause;
151
+ return reduced;
152
+ },
153
+ // Error subclass reducers are intentionally placed before the base Error
154
+ // reducer because devalue uses first-match-wins. Subclass-specific reducers
155
+ // must be checked first so that e.g. a TypeError is serialized as "TypeError"
156
+ // rather than falling through to the generic "Error" reducer.
157
+ // See `makeErrorSubclassReducer` for implementation details.
158
+ EvalError: makeErrorSubclassReducer('EvalError'),
159
+ FatalError: makeErrorSubclassReducer('FatalError'),
160
+ HookConflictError: (value) => {
161
+ const base = reduceNamedErrorSubclassBase('HookConflictError', value);
162
+ if (!base)
163
+ return false;
164
+ const error = value;
165
+ const reduced = {
166
+ ...base,
167
+ token: error.token,
168
+ };
169
+ if (error.conflictingRunId !== undefined) {
170
+ reduced.conflictingRunId = error.conflictingRunId;
171
+ }
172
+ return reduced;
173
+ },
174
+ RangeError: makeErrorSubclassReducer('RangeError'),
175
+ ReferenceError: makeErrorSubclassReducer('ReferenceError'),
176
+ // RetryableError carries an extra `retryAfter` Date that we serialize as
177
+ // a numeric epoch timestamp. The Date reducer uses `instanceof global.Date`,
178
+ // which fails for Dates from a different VM realm; serializing as a
179
+ // number sidesteps that issue.
180
+ RetryableError: (value) => {
181
+ const base = reduceNamedErrorSubclassBase('RetryableError', value);
182
+ if (!base)
183
+ return false;
184
+ const retryAfterRaw = value.retryAfter;
185
+ let retryAfter;
186
+ if (retryAfterRaw &&
187
+ typeof retryAfterRaw === 'object' &&
188
+ typeof retryAfterRaw.getTime === 'function') {
189
+ const t = retryAfterRaw.getTime();
190
+ retryAfter = Number.isNaN(t) ? Date.now() + 1000 : t;
191
+ }
192
+ else if (typeof retryAfterRaw === 'string' ||
193
+ typeof retryAfterRaw === 'number') {
194
+ const t = new Date(retryAfterRaw).getTime();
195
+ retryAfter = Number.isNaN(t) ? Date.now() + 1000 : t;
196
+ }
197
+ else {
198
+ retryAfter = Date.now() + 1000;
199
+ }
200
+ return {
201
+ ...base,
202
+ retryAfter,
203
+ };
204
+ },
205
+ // RuntimeDecryptionError carries an extra `context` object (operation,
206
+ // byteLength, formatPrefix) that the generic Error reducer would drop.
207
+ // Preserve it so the diagnostic data survives the run-error round trip.
208
+ RuntimeDecryptionError: (value) => {
209
+ const base = reduceNamedErrorSubclassBase('RuntimeDecryptionError', value);
210
+ if (!base)
211
+ return false;
212
+ const reduced = {
213
+ ...base,
214
+ };
215
+ const context = value.context;
216
+ if (context !== undefined) {
217
+ reduced.context = context;
218
+ }
219
+ return reduced;
220
+ },
221
+ SyntaxError: makeErrorSubclassReducer('SyntaxError'),
222
+ TypeError: makeErrorSubclassReducer('TypeError'),
223
+ URIError: makeErrorSubclassReducer('URIError'),
224
+ // AggregateError is similar to other subclasses but also preserves the
225
+ // `errors` array. We extend the base helper's output here.
226
+ AggregateError: (value) => {
227
+ const base = reduceNamedErrorSubclassBase('AggregateError', value);
228
+ if (!base)
229
+ return false;
230
+ return {
231
+ ...base,
232
+ errors: value.errors,
233
+ };
234
+ },
235
+ // Base Error reducer — catch-all for any Error instance not matched by a
236
+ // specific subclass reducer above (including user Error subclasses without
237
+ // WORKFLOW_SERIALIZE). Preserves `name` so the error's identity is retained
238
+ // even though the exact class cannot be reconstructed.
239
+ Error: (value) => {
240
+ if (!types.isNativeError(value))
241
+ return false;
242
+ const reduced = {
243
+ name: value.name,
244
+ message: value.message,
245
+ stack: value.stack,
246
+ };
247
+ if ('cause' in value)
248
+ reduced.cause = value.cause;
249
+ return reduced;
250
+ },
251
+ Float32Array: (value) => value instanceof global.Float32Array && viewToBase64(value),
252
+ Float64Array: (value) => value instanceof global.Float64Array && viewToBase64(value),
253
+ Headers: (value) => value instanceof global.Headers && Array.from(value),
254
+ Int8Array: (value) => value instanceof global.Int8Array && viewToBase64(value),
255
+ Int16Array: (value) => value instanceof global.Int16Array && viewToBase64(value),
256
+ Int32Array: (value) => value instanceof global.Int32Array && viewToBase64(value),
257
+ Map: (value) => value instanceof global.Map && Array.from(value),
258
+ RegExp: (value) => value instanceof global.RegExp && {
259
+ source: value.source,
260
+ flags: value.flags,
261
+ },
262
+ // Request and Response are intentionally NOT in common reducers.
263
+ // They require mode-specific revivers (stream handling, etc.) and
264
+ // including them here without matching revivers would cause them
265
+ // to deserialize as plain objects.
266
+ Set: (value) => value instanceof global.Set && Array.from(value),
267
+ URL: (value) => value instanceof global.URL && value.href,
268
+ WorkflowFunction: (value) => {
269
+ // Only match function references with a workflowId property (set by
270
+ // the SWC compiler on workflow functions). Plain { workflowId } objects
271
+ // are NOT matched — this prevents infinite recursion since the reduced
272
+ // form { workflowId } is a plain object, not a function.
273
+ if (typeof value !== 'function')
274
+ return false;
275
+ const workflowId = value.workflowId;
276
+ if (typeof workflowId !== 'string')
277
+ return false;
278
+ return { workflowId };
279
+ },
280
+ URLSearchParams: (value) => {
281
+ if (!(value instanceof global.URLSearchParams))
282
+ return false;
283
+ if (value.size === 0)
284
+ return '.';
285
+ return String(value);
286
+ },
287
+ Uint8Array: (value) => value instanceof global.Uint8Array && viewToBase64(value),
288
+ Uint8ClampedArray: (value) => value instanceof global.Uint8ClampedArray && viewToBase64(value),
289
+ Uint16Array: (value) => value instanceof global.Uint16Array && viewToBase64(value),
290
+ Uint32Array: (value) => value instanceof global.Uint32Array && viewToBase64(value),
291
+ };
292
+ }
293
+ // ---- Revivers ----
294
+ export function getCommonRevivers(global = globalThis) {
295
+ return {
296
+ ArrayBuffer: (value) => reviveArrayBuffer(value, global),
297
+ BigInt: (value) => global.BigInt(value),
298
+ BigInt64Array: (value) => new global.BigInt64Array(reviveArrayBuffer(value, global)),
299
+ BigUint64Array: (value) => new global.BigUint64Array(reviveArrayBuffer(value, global)),
300
+ Date: (value) => new global.Date(value),
301
+ DOMException: (value) => {
302
+ const error = new global.DOMException(value.message, value.name);
303
+ if (value.stack !== undefined)
304
+ error.stack = value.stack;
305
+ // DOMException's constructor doesn't accept a cause option, so
306
+ // we set it manually when present in the serialized data.
307
+ if ('cause' in value)
308
+ error.cause = value.cause;
309
+ return error;
310
+ },
311
+ // Error subclass revivers reconstruct the correct built-in Error type.
312
+ // See `makeErrorSubclassReviver` for implementation details.
313
+ EvalError: makeErrorSubclassReviver(global, 'EvalError'),
314
+ // `FatalError` and `RetryableError` are not built-ins, so we resolve them
315
+ // from the consumer's `globalThis` via a `Symbol.for(...)` key registered
316
+ // by `@workflow/errors` on load. This makes `instanceof FatalError` work
317
+ // in user code that lives in a different realm than this reducer module
318
+ // (e.g. when the host hydrates a value destined for a workflow VM
319
+ // context). See the registration block at the bottom of
320
+ // `packages/errors/src/index.ts` for details. Falls back to the imported
321
+ // class for environments where no bundled `@workflow/errors` has loaded
322
+ // in the consumer realm.
323
+ FatalError: (value) => {
324
+ const Ctor = global[Symbol.for('@workflow/errors//FatalError')] ?? FatalError;
325
+ const error = new Ctor(value.message);
326
+ if (value.stack !== undefined)
327
+ error.stack = value.stack;
328
+ if ('cause' in value)
329
+ error.cause = value.cause;
330
+ return error;
331
+ },
332
+ HookConflictError: (value) => {
333
+ const Ctor = global[Symbol.for('@workflow/errors//HookConflictError')] ?? HookConflictError;
334
+ const error = new Ctor(value.token, value.conflictingRunId);
335
+ if (value.stack !== undefined)
336
+ error.stack = value.stack;
337
+ if ('cause' in value) {
338
+ error.cause = value.cause;
339
+ }
340
+ return error;
341
+ },
342
+ RangeError: makeErrorSubclassReviver(global, 'RangeError'),
343
+ ReferenceError: makeErrorSubclassReviver(global, 'ReferenceError'),
344
+ RetryableError: (value) => {
345
+ // Use the context's `Date` constructor (matching the rest of this
346
+ // module) so the resulting `retryAfter` Date passes `instanceof
347
+ // global.Date` checks in the target realm. See the FatalError reviver
348
+ // above for why we resolve `RetryableError` from the consumer's
349
+ // globalThis instead of the imported class.
350
+ const Ctor = global[Symbol.for('@workflow/errors//RetryableError')] ?? RetryableError;
351
+ const error = new Ctor(value.message, {
352
+ retryAfter: new global.Date(value.retryAfter),
353
+ });
354
+ if (value.stack !== undefined)
355
+ error.stack = value.stack;
356
+ if ('cause' in value)
357
+ error.cause = value.cause;
358
+ return error;
359
+ },
360
+ RuntimeDecryptionError: (value) => {
361
+ // Resolve from the consumer's globalThis (see the FatalError reviver
362
+ // above) so `instanceof RuntimeDecryptionError` holds across realms.
363
+ const Ctor = global[Symbol.for('@workflow/errors//RuntimeDecryptionError')] ??
364
+ RuntimeDecryptionError;
365
+ const opts = {};
366
+ if ('cause' in value)
367
+ opts.cause = value.cause;
368
+ if (value.context !== undefined)
369
+ opts.context = value.context;
370
+ const error = new Ctor(value.message, opts);
371
+ if (value.stack !== undefined)
372
+ error.stack = value.stack;
373
+ return error;
374
+ },
375
+ SyntaxError: makeErrorSubclassReviver(global, 'SyntaxError'),
376
+ TypeError: makeErrorSubclassReviver(global, 'TypeError'),
377
+ URIError: makeErrorSubclassReviver(global, 'URIError'),
378
+ AggregateError: (value) => {
379
+ const opts = 'cause' in value ? { cause: value.cause } : undefined;
380
+ const error = new global.AggregateError(value.errors, value.message, opts);
381
+ if (value.stack !== undefined)
382
+ error.stack = value.stack;
383
+ return error;
384
+ },
385
+ // Base Error reviver — used for plain Error instances and unrecognized
386
+ // Error subclasses. Preserves `name` so the error's identity is retained.
387
+ Error: (value) => {
388
+ const opts = 'cause' in value ? { cause: value.cause } : undefined;
389
+ const error = new global.Error(value.message, opts);
390
+ error.name = value.name;
391
+ if (value.stack !== undefined)
392
+ error.stack = value.stack;
393
+ return error;
394
+ },
395
+ Float32Array: (value) => new global.Float32Array(reviveArrayBuffer(value, global)),
396
+ Float64Array: (value) => new global.Float64Array(reviveArrayBuffer(value, global)),
397
+ Headers: (value) => new global.Headers(value),
398
+ Int8Array: (value) => new global.Int8Array(reviveArrayBuffer(value, global)),
399
+ Int16Array: (value) => new global.Int16Array(reviveArrayBuffer(value, global)),
400
+ Int32Array: (value) => new global.Int32Array(reviveArrayBuffer(value, global)),
401
+ Map: (value) => new global.Map(value),
402
+ RegExp: (value) => new global.RegExp(value.source, value.flags),
403
+ Set: (value) => new global.Set(value),
404
+ URL: (value) => new global.URL(value),
405
+ WorkflowFunction: (value) => Object.assign(() => {
406
+ throw new Error('Workflow functions cannot be called directly. Use start() to invoke them.');
407
+ }, { workflowId: value.workflowId }),
408
+ URLSearchParams: (value) => new global.URLSearchParams(value === '.' ? '' : value),
409
+ Uint8Array: (value) => new global.Uint8Array(reviveArrayBuffer(value, global)),
410
+ Uint8ClampedArray: (value) => new global.Uint8ClampedArray(reviveArrayBuffer(value, global)),
411
+ Uint16Array: (value) => new global.Uint16Array(reviveArrayBuffer(value, global)),
412
+ Uint32Array: (value) => new global.Uint32Array(reviveArrayBuffer(value, global)),
413
+ };
414
+ }
415
+ // Re-export for use in legacy compat
416
+ export { revive };
417
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tbW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3NlcmlhbGl6YXRpb24vcmVkdWNlcnMvY29tbW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7R0FTRztBQUVILE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFDbEMsT0FBTyxFQUNMLFVBQVUsRUFDVixpQkFBaUIsRUFDakIsY0FBYyxFQUNkLHNCQUFzQixHQUN2QixNQUFNLGtCQUFrQixDQUFDO0FBRzFCLDJCQUEyQjtBQUUzQixTQUFTLG1CQUFtQixDQUMxQixLQUFzQixFQUN0QixNQUFjLEVBQ2QsTUFBYztJQUVkLHNEQUFzRDtJQUN0RCxJQUFJLE1BQU0sS0FBSyxDQUFDO1FBQUUsT0FBTyxHQUFHLENBQUM7SUFDN0IsOERBQThEO0lBQzlELE1BQU0sS0FBSyxHQUFHLElBQUksVUFBVSxDQUFDLEtBQUssRUFBRSxNQUFNLEVBQUUsTUFBTSxDQUFDLENBQUM7SUFDcEQsT0FBTyxNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsQ0FBQztBQUMvQyxDQUFDO0FBRUQsU0FBUyxZQUFZLENBQUMsS0FBc0I7SUFDMUMsT0FBTyxtQkFBbUIsQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFLEtBQUssQ0FBQyxVQUFVLEVBQUUsS0FBSyxDQUFDLFVBQVUsQ0FBQyxDQUFDO0FBQy9FLENBQUM7QUFFRCxTQUFTLGlCQUFpQixDQUN4QixLQUFhLEVBQ2IsTUFBMkI7SUFFM0IsTUFBTSxNQUFNLEdBQUcsS0FBSyxLQUFLLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUM7SUFDMUMsTUFBTSxNQUFNLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsUUFBUSxDQUFDLENBQUM7SUFDN0MsTUFBTSxXQUFXLEdBQUcsSUFBSSxNQUFNLENB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QWlCLENBQUMsS0FBSyxFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBQ2hFLFdBQVcsRUFBRSxDQUFDLEtBQWEsRUFBRSxFQUFFLENBQzdCLElBQUksTUFBTSxDQUFDLFdBQVcsQ0FBQyxpQkFBaUIsQ0FBQyxLQUFLLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFDMUQsV0FBVyxFQUFFLENBQUMsS0FBYSxFQUFFLEVBQUUsQ0FDN0IsSUFBSSxNQUFNLENBQUMsV0FBVyxDQUFDLGlCQUFpQixDQUFDLEtBQUssRUFBRSxNQUFNLENBQUMsQ0FBQztLQUMzRCxDQUFDO0FBQ0osQ0FBQztBQUVELHFDQUFxQztBQUNyQyxPQUFPLEVBQUUsTUFBTSxFQUFFLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIENvbW1vbiByZWR1Y2VycyBhbmQgcmV2aXZlcnMgZm9yIHR5cGVzIHNoYXJlZCBhY3Jvc3MgYWxsIHNlcmlhbGl6YXRpb24gbW9kZXMuXG4gKlxuICogSGFuZGxlczogQXJyYXlCdWZmZXIsIEJpZ0ludCwgdHlwZWQgYXJyYXlzLCBEYXRlLCBFcnJvciwgSGVhZGVycywgTWFwLCBTZXQsXG4gKiBSZWdFeHAsIFJlcXVlc3QsIFJlc3BvbnNlLCBVUkwsIFVSTFNlYXJjaFBhcmFtcy5cbiAqXG4gKiBOb3RlOiBVc2VzIE5vZGUuanMgQnVmZmVyIGZvciBiYXNlNjQgZW5jb2RpbmcvZGVjb2RpbmcuIEZvciBlbnZpcm9ubWVudHNcbiAqIHdpdGhvdXQgQnVmZmVyIChlLmcuIFF1aWNrSlMgVk0pLCBhIHBvbHlmaWxsIG9yIGFsdGVybmF0aXZlIGJhc2U2NFxuICogaW1wbGVtZW50YXRpb24gd2lsbCBiZSBuZWVkZWQuXG4gKi9cblxuaW1wb3J0IHsgdHlwZXMgfSBmcm9tICdub2RlOnV0aWwnO1xuaW1wb3J0IHtcbiAgRmF0YWxFcnJvcixcbiAgSG9va0NvbmZsaWN0RXJyb3IsXG4gIFJldHJ5YWJsZUVycm9yLFxuICBSdW50aW1lRGVjcnlwdGlvbkVycm9yLFxufSBmcm9tICdAd29ya2Zsb3cvZXJyb3JzJztcbmltcG9ydCB0eXBlIHsgUmVkdWNlcnMsIFJldml2ZXJzLCBTZXJpYWxpemFibGVTcGVjaWFsIH0gZnJvbSAnLi4vdHlwZXMuanMnO1xuXG4vLyAtLS0tIEJhc2U2NCBoZWxwZXJzIC0tLS1cblxuZnVuY3Rpb24gYXJyYXlCdWZmZXJUb0Jhc2U2NChcbiAgdmFsdWU6IEFycmF5QnVmZmVyTGlrZSxcbiAgb2Zmc2V0OiBudW1iZXIsXG4gIGxlbmd0aDogbnVtYmVyXG4pOiBzdHJpbmcge1xuICAvLyBBdm9pZCByZXR1cm5pbmcgZmFsc3kgdmFsdWUgZm9yIHplcm8tbGVuZ3RoIGJ1ZmZlcnNcbiAgaWYgKGxlbmd0aCA9PT0gMCkgcmV0dXJuICcuJztcbiAgLy8gQ3JlYXRlIGEgcHJvcGVyIGNvcHkgdG8gYXZvaWQgQXJyYXlCdWZmZXIgZGV0YWNobWVudCBpc3N1ZXNcbiAgY29uc3QgdWludDggPSBuZXcgVWludDhBcnJheSh2YWx1ZSwgb2Zmc2V0LCBsZW5ndGgpO1xuICByZXR1cm4gQnVmZmVyLmZyb20odWludDgpLnRvU3RyaW5nKCdiYXNlNjQnKTtcbn1cblxuZnVuY3Rpb24gdmlld1RvQmFzZTY0KHZhbHVlOiBBcnJheUJ1ZmZlclZpZXcpOiBzdHJpbmcge1xuICByZXR1cm4gYXJyYXlCdWZmZXJUb0Jhc2U2NCh2YWx1ZS5idWZmZXIsIHZhbHVlLmJ5dGVPZmZzZXQsIHZhbHVlLmJ5dGVMZW5ndGgpO1xufVxuXG5mdW5jdGlvbiByZXZpdmVBcnJheUJ1ZmZlcihcbiAgdmFsdWU6IHN0cmluZyxcbiAgZ2xvYmFsOiBSZWNvcmQ8c3RyaW5nLCBhbnk+XG4pOiBBcnJheUJ1ZmZlciB7XG4gIGNvbnN0IGJhc2U2NCA9IHZhbHVlID09PSAnLicgPyAnJyA6IHZhbHVlO1xuICBjb25zdCBidWZmZXIgPSBCdWZmZXIuZnJvbShiYXNlNjQsICdiYXNlNjQnKTtcbiAgY29uc3QgYXJyYXlCdWZmZXIgPSBuZXcgZ2xvYmFsLkFycmF5QnVmZmVyKGJ1ZmZlci5sZW5ndGgpO1xuICBjb25zdCB1aW50OEFycmF5ID0gbmV3IGdsb2JhbC5VaW50OEFycmF5KGFycmF5QnVmZmVyKTtcbiAgdWludDhBcnJheS5zZXQoYnVmZmVyKTtcbiAgcmV0dXJuIGFycmF5QnVmZmVyO1xufVxuXG5mdW5jdGlvbiByZXZpdmUoc3RyOiBzdHJpbmcpIHtcbiAgLy8gZGV2YWx1ZS5zdHJpbmdpZnkoKSBhbHdheXMgcHJvZHVjZXMgdmFsaWQgSlNPTjogc3BlY2lhbCB2YWx1ZXNcbiAgLy8gKHVuZGVmaW5lZCwgTmFOLCBJbmZpbml0eSwgLTApIGFyZSBlbmNvZGVkIGFzIG5lZ2F0aXZlIGludGVnZXJcbiAgLy8gc2VudGluZWxzIGFuZCB0aGUgcmVtYWluaW5nIHN0cnVjdHVyZSBpcyBvcmRpbmFyeSBKU09OLiBQYXJzaW5nXG4gIC8vIHdpdGggSlNPTi5wYXJzZSB5aWVsZHMgdGhlIGZsYXR0ZW5lZCBmb3JtIHRoYXQgdW5mbGF0dGVuKCkgZXhwZWN0cy5cbiAgcmV0dXJuIEpTT04ucGFyc2Uoc3RyKTtcbn1cblxuLy8gLS0tLSBFcnJvciBzdWJjbGFzcyBoZWxwZXJzIC0tLS1cblxuLyoqXG4gKiBUaGUgc2hhcmVkIHNoYXBlIHRoYXQgZXZlcnkgRXJyb3Itc3ViY2xhc3MgcmVkdWNlciBpbiB0aGlzIG1vZHVsZVxuICogcHJvZHVjZXMuIFNvbWUgc3ViY2xhc3NlcyAoZS5nLiBgQWdncmVnYXRlRXJyb3JgLCBgUmV0cnlhYmxlRXJyb3JgKSBleHRlbmRcbiAqIHRoaXMgd2l0aCBhZGRpdGlvbmFsIGZpZWxkcyBieSBzcHJlYWRpbmcgdGhlIGJhc2UgcGF5bG9hZC5cbiAqL1xudHlwZSBCYXNlRXJyb3JQYXlsb2FkID0ge1xuICBtZXNzYWdlOiBzdHJpbmc7XG4gIHN0YWNrPzogc3RyaW5nO1xuICBjYXVzZT86IHVua25vd247XG59O1xuXG4vKipcbiAqIFN1YnNldCBvZiBgU2VyaWFsaXphYmxlU3BlY2lhbGAga2V5cyB3aG9zZSBwYXlsb2FkIHNoYXBlIGlzIGV4YWN0bHkgdGhlXG4gKiBgQmFzZUVycm9yUGF5bG9hZGAuIGBtYWtlRXJyb3JTdWJjbGFzc1JlZHVjZXJgIGlzIGNvbnN0cmFpbmVkIHRvIG9ubHlcbiAqIHRoZXNlIGtleXMgc28gaXRzIHJldHVybiB0eXBlIGlzIHNvdW5kIOKAlCBzdWJjbGFzc2VzIHRoYXQgbmVlZCBleHRyYVxuICogZmllbGRzIChsaWtlIGBBZ2dyZWdhdGVFcnJvci5lcnJvcnNgIG9yIGBSZXRyeWFibGVFcnJvci5yZXRyeUFmdGVyYCkgdXNlXG4gKiBgcmVkdWNlRXJyb3JCYXNlYCBkaXJlY3RseSBhbmQgZXh0ZW5kIHRoZSByZXN1bHQuXG4gKi9cbnR5cGUgU2ltcGxlRXJyb3JTdWJjbGFzc0tleSA9IHtcbiAgW0sgaW4ga2V5b2YgU2VyaWFsaXphYmxlU3BlY2lhbF06IFNlcmlhbGl6YWJsZVNwZWNpYWxbS10gZXh0ZW5kcyBCYXNlRXJyb3JQYXlsb2FkXG4gICAgPyBCYXNlRXJyb3JQYXlsb2FkIGV4dGVuZHMgU2VyaWFsaXphYmxlU3BlY2lhbFtLXVxuICAgICAgPyBLXG4gICAgICA6IG5ldmVyXG4gICAgOiBuZXZlcjtcbn1ba2V5b2YgU2VyaWFsaXphYmxlU3BlY2lhbF07XG5cbi8qKlxuICogUmVkdWNlcyBhbnkgbmF0aXZlIEVycm9yIGluc3RhbmNlIHRvIHRoZSBzaGFyZWQgYEJhc2VFcnJvclBheWxvYWRgIHNoYXBlLFxuICogcHJlc2VydmluZyBgY2F1c2VgIG9ubHkgd2hlbiBwcmVzZW50ICh0byBkaXN0aW5ndWlzaCBcIm5vIGNhdXNlXCIgZnJvbVxuICogXCJjYXVzZSBpcyB1bmRlZmluZWRcIikuIFVzZWQgZGlyZWN0bHkgYnkgcmVkdWNlcnMgZm9yIHN1YmNsYXNzZXMgdGhhdCBuZWVkXG4gKiB0byBleHRlbmQgdGhlIHNoYXBlIHdpdGggYWRkaXRpb25hbCBmaWVsZHMuXG4gKlxuICogYHR5cGVzLmlzTmF0aXZlRXJyb3IoKWAgaXMgdXNlZCBpbnN0ZWFkIG9mIGBpbnN0YW5jZW9mYCBmb3IgY3Jvc3MtVk0gc2FmZXR5OlxuICogZXJyb3JzIG1heSBvcmlnaW5hdGUgZnJvbSBhIGRpZmZlcmVudCBWTSBjb250ZXh0LCBhbmQgYGluc3RhbmNlb2ZgIGZhaWxzXG4gKiBhY3Jvc3MgVk0gYm91bmRhcmllcyBzaW5jZSBlYWNoIGNvbnRleHQgaGFzIGl0cyBvd24gRXJyb3IgY29uc3RydWN0b3IuXG4gKi9cbmZ1bmN0aW9uIHJlZHVjZUVycm9yQmFzZSh2YWx1ZTogdW5rbm93bik6IEJhc2VFcnJvclBheWxvYWQgfCBmYWxzZSB7XG4gIGlmICghdHlwZXMuaXNOYXRpdmVFcnJvcih2YWx1ZSkpIHJldHVybiBmYWxzZTtcbiAgY29uc3QgcmVkdWNlZDogQmFzZUVycm9yUGF5bG9hZCA9IHtcbiAgICBtZXNzYWdlOiB2YWx1ZS5tZXNzYWdlLFxuICAgIHN0YWNrOiB2YWx1ZS5zdGFjayxcbiAgfTtcbiAgaWYgKCdjYXVzZScgaW4gdmFsdWUpIHJlZHVjZWQuY2F1c2UgPSAodmFsdWUgYXMgeyBjYXVzZTogdW5rbm93biB9KS5jYXVzZTtcbiAgcmV0dXJuIHJlZHVjZWQ7XG59XG5cbi8qKlxuICogUmVkdWNlcyBhIG5hdGl2ZSBlcnJvciB0byB0aGUgc2hhcmVkIGBCYXNlRXJyb3JQYXlsb2FkYCwgYnV0IG9ubHkgd2hlbiBpdHNcbiAqIGBuYW1lYCBpbnN0YW5jZSBwcm9wZXJ0eSBtYXRjaGVzIGBzdWJjbGFzc05hbWVgLiBVc2VkIGJ5OlxuICogICAtIGBtYWtlRXJyb3JTdWJjbGFzc1JlZHVjZXJgLCBmb3Igc3ViY2xhc3NlcyB3aG9zZSBzZXJpYWxpemVkIHNoYXBlIGlzXG4gKiAgICAgZXhhY3RseSBgQmFzZUVycm9yUGF5bG9hZGAuXG4gKiAgIC0gSW5saW5lIHJlZHVjZXJzIGZvciBzdWJjbGFzc2VzIHRoYXQgZXh0ZW5kIHRoZSBzaGFwZSB3aXRoIGFkZGl0aW9uYWxcbiAqICAgICBmaWVsZHMgKGUuZy4gYEFnZ3JlZ2F0ZUVycm9yLmVycm9yc2AsIGBSZXRyeWFibGVFcnJvci5yZXRyeUFmdGVyYCkuXG4gKlxuICogTWF0Y2hpbmcgYnkgYHZhbHVlLm5hbWVgIChpbnN0ZWFkIG9mIGB2YWx1ZS5jb25zdHJ1Y3Rvcj8ubmFtZWApIGlzIHJvYnVzdFxuICogdG8gYnVuZGxlcnMgdGhhdCBlbWl0IHRoZSBjbGFzcyBhcyBhbiBhbm9ueW1vdXMgZXhwcmVzc2lvbiDigJQgZS5nLiBUdXJib3BhY2tcbiAqIGNvbXBpbGVzIGBleHBvcnQgY2xhc3MgRmF0YWxFcnJvciBleHRlbmRzIEVycm9yIHvigKZ9YCB0byBhIHJlZ2lzdHJhdGlvbiBjYWxsXG4gKiBsaWtlIGBlLnMoW1wiRmF0YWxFcnJvclwiLCAwLCBjbGFzcyBleHRlbmRzIEVycm9yIHvigKZ9XSlgLCBhbmQgdGhlIHJlc3VsdGluZ1xuICogY29uc3RydWN0b3IgaGFzIGBuYW1lID09PSAnJ2AuIFNpbmNlIGV2ZXJ5IEVycm9yIHN1YmNsYXNzIHdlIGNhcmUgYWJvdXRcbiAqIHNldHMgYHRoaXMubmFtZWAgZXhwbGljaXRseSBpbiBpdHMgY29uc3RydWN0b3IgKGJ1aWx0LWluIHN1YmNsYXNzZXMgZG8gdGhpc1xuICogYXV0b21hdGljYWxseTsgYEZhdGFsRXJyb3JgL2BSZXRyeWFibGVFcnJvcmAgZG8gaXQgaW4gdXNlciBjb2RlKSwgdGhlXG4gKiBpbnN0YW5jZSBwcm9wZXJ0eSBpcyB0aGUgcmVsaWFibGUgaWRlbnRpdHkgbWFya2VyIGFjcm9zcyByZWFsbXMgYW5kXG4gKiBidW5kbGVycy5cbiAqL1xuZnVuY3Rpb24gcmVkdWNlTmFtZWRFcnJvclN1YmNsYXNzQmFzZShcbiAgc3ViY2xhc3NOYW1lOiBzdHJpbmcsXG4gIHZhbHVlOiB1bmtub3duXG4pOiBCYXNlRXJyb3JQYXlsb2FkIHwgZmFsc2Uge1xuICBpZiAoIXR5cGVzLmlzTmF0aXZlRXJyb3IodmFsdWUpKSByZXR1cm4gZmFsc2U7XG4gIGlmICh2YWx1ZS5uYW1lICE9PSBzdWJjbGFzc05hbWUpIHJldHVybiBmYWxzZTtcbiAgcmV0dXJuIHJlZHVjZUVycm9yQmFzZSh2YWx1ZSk7XG59XG5cbi8qKlxuICogQ3JlYXRlcyBhIHJlZHVjZXIgZm9yIGEgYnVpbHQtaW4gRXJyb3Igc3ViY2xhc3Mgd2hvc2Ugc2VyaWFsaXplZCBzaGFwZSBpc1xuICogZXhhY3RseSBgQmFzZUVycm9yUGF5bG9hZGAgKG5vIGV4dHJhIGZpZWxkcykuIFRoZSByZWR1Y2VyIG1hdGNoZXMgYnlcbiAqIGNvbnN0cnVjdG9yIG5hbWUgKGFmdGVyIHRoZSBpc05hdGl2ZUVycm9yIGdhdGUpLCBzaW5jZSBgaW5zdGFuY2VvZmAgbWF5XG4gKiBmYWlsIGFjcm9zcyBWTSBib3VuZGFyaWVzLlxuICovXG5mdW5jdGlvbiBtYWtlRXJyb3JTdWJjbGFzc1JlZHVjZXI8SyBleHRlbmRzIFNpbXBsZUVycm9yU3ViY2xhc3NLZXk+KFxuICBzdWJjbGFzc05hbWU6IEtcbikge1xuICByZXR1cm4gKHZhbHVlOiB1bmtub3duKTogU2VyaWFsaXphYmxlU3BlY2lhbFtLXSB8IGZhbHNlID0+IHtcbiAgICBjb25zdCBiYXNlID0gcmVkdWNlTmFtZWRFcnJvclN1YmNsYXNzQmFzZShzdWJjbGFzc05hbWUsIHZhbHVlKTtcbiAgICBpZiAoIWJhc2UpIHJldHVybiBmYWxzZTtcbiAgICByZXR1cm4gYmFzZSBhcyBTZXJpYWxpemFibGVTcGVjaWFsW0tdO1xuICB9O1xufVxuXG4vKipcbiAqIENyZWF0ZXMgYSByZXZpdmVyIGZvciBhIGJ1aWx0LWluIEVycm9yIHN1YmNsYXNzLiBSZWNvbnN0cnVjdHMgdGhlIGNvcnJlY3RcbiAqIGJ1aWx0LWluIEVycm9yIHR5cGUgdXNpbmcgdGhlIGNvbnRleHQncyBjb25zdHJ1Y3Rvci4gVGhlIGBjYXVzZWAgb3B0aW9uIGlzXG4gKiBvbmx5IHBhc3NlZCB3aGVuIHRoZSBzZXJpYWxpemVkIGRhdGEgaW5jbHVkZXMgaXQsIHByZXNlcnZpbmcgdGhlIGRpc3RpbmN0aW9uXG4gKiBiZXR3ZWVuIFwibm8gY2F1c2VcIiBhbmQgXCJjYXVzZSBpcyB1bmRlZmluZWRcIi5cbiAqL1xuZnVuY3Rpb24gbWFrZUVycm9yU3ViY2xhc3NSZXZpdmVyPEsgZXh0ZW5kcyBrZXlvZiBTZXJpYWxpemFibGVTcGVjaWFsPihcbiAgZ2xvYmFsOiBSZWNvcmQ8c3RyaW5nLCBhbnk+LFxuICBjdG9yTmFtZTogc3RyaW5nXG4pIHtcbiAgcmV0dXJuICh2YWx1ZTogU2VyaWFsaXphYmxlU3BlY2lhbFtLXSkgPT4ge1xuICAgIGNvbnN0IHYgPSB2YWx1ZSBhcyBCYXNlRXJyb3JQYXlsb2FkO1xuICAgIGNvbnN0IG9wdHMgPSAnY2F1c2UnIGluIHYgPyB7IGNhdXNlOiB2LmNhdXNlIH0gOiB1bmRlZmluZWQ7XG4gICAgY29uc3QgQ3RvciA9IGdsb2JhbFtjdG9yTmFtZV07XG4gICAgY29uc3QgZXJyb3I6IEVycm9yID0gbmV3IEN0b3Iodi5tZXNzYWdlLCBvcHRzKTtcbiAgICBpZiAodi5zdGFjayAhPT0gdW5kZWZpbmVkKSBlcnJvci5zdGFjayA9IHYuc3RhY2s7XG4gICAgcmV0dXJuIGVycm9yO1xuICB9O1xufVxuXG4vLyAtLS0tIFJlZHVjZXJzIC0tLS1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldENvbW1vblJlZHVjZXJzKFxuICBnbG9iYWw6IFJlY29yZDxzdHJpbmcsIGFueT4gPSBnbG9iYWxUaGlzXG4pOiBQYXJ0aWFsPFJlZHVjZXJzPiB7XG4gIHJldHVybiB7XG4gICAgQXJyYXlCdWZmZXI6ICh2YWx1ZSkgPT5cbiAgICAgIHZhbHVlIGluc3RhbmNlb2YgZ2xvYmFsLkFycmF5QnVmZmVyICYmXG4gICAgICBhcnJheUJ1ZmZlclRvQmFzZTY0KHZhbHVlLCAwLCB2YWx1ZS5ieXRlTGVuZ3RoKSxcbiAgICBCaWdJbnQ6ICh2YWx1ZSkgPT4gdHlwZW9mIHZhbHVlID09PSAnYmlnaW50JyAmJiB2YWx1ZS50b1N0cmluZygpLFxuICAgIEJpZ0ludDY0QXJyYXk6ICh2YWx1ZSkgPT5cbiAgICAgIHZhbHVlIGluc3RhbmNlb2YgZ2xvYmFsLkJpZ0ludDY0QXJyYXkgJiYgdmlld1RvQmFzZTY0KHZhbHVlKSxcbiAgICBCaWdVaW50NjRBcnJheTogKHZhbHVlKSA9PlxuICAgICAgdmFsdWUgaW5zdGFuY2VvZiBnbG9iYWwuQmlnVWludDY0QXJyYXkgJiYgdmlld1RvQmFzZTY0KHZhbHVlKSxcbiAgICBEYXRlOiAodmFsdWUpID0+IHtcbiAgICAgIGlmICghKHZhbHVlIGluc3RhbmNlb2YgZ2xvYmFsLkRhdGUpKSByZXR1cm4gZmFsc2U7XG4gICAgICBjb25zdCB2YWxpZCA9ICFOdW1iZXIuaXNOYU4odmFsdWUuZ2V0RGF0ZSgpKTtcbiAgICAgIHJldHVybiB2YWxpZCA/IHZhbHVlLnRvSVNPU3RyaW5nKCkgOiAnLic7XG4gICAgfSxcbiAgICAvLyBET01FeGNlcHRpb24gaXMgYSBzcGVjaWFsIGNhc2U6IGl0IGBpbnN0YW5jZW9mIEVycm9yYCBpcyB0cnVlIGluIE5vZGUsXG4gICAgLy8gYnV0IGB0eXBlcy5pc05hdGl2ZUVycm9yKClgIHJldHVybnMgRkFMU0UgZm9yIGl0LCBzbyB0aGUgZ2VuZXJpYyBFcnJvclxuICAgIC8vIHJlZHVjZXIgKHdoaWNoIGdhdGVzIG9uIGlzTmF0aXZlRXJyb3IpIHdvbid0IG1hdGNoLiBDaGVjayBpdCBleHBsaWNpdGx5XG4gICAgLy8gYnkgY29uc3RydWN0b3IgbmFtZSArIEVycm9yIGluaGVyaXRhbmNlIHNvIHdlIGNhdGNoIERPTUV4Y2VwdGlvbnMgZnJvbVxuICAgIC8vIGFueSByZWFsbSAoY3Jvc3MtVk0gc2FmZXR5OiBpbnN0YW5jZW9mIGdsb2JhbC5ET01FeGNlcHRpb24gd291bGQgZmFpbFxuICAgIC8vIGZvciBpbnN0YW5jZXMgbWludGVkIGluIGFub3RoZXIgY29udGV4dCkuXG4gICAgRE9NRXhjZXB0aW9uOiAodmFsdWUpID0+IHtcbiAgICAgIGlmICh2YWx1ZSA9PT0gbnVsbCB8fCB0eXBlb2YgdmFsdWUgIT09ICdvYmplY3QnKSByZXR1cm4gZmFsc2U7XG4gICAgICBpZiAoXG4gICAgICAgICh2YWx1ZSBhcyB7IGNvbnN0cnVjdG9yPzogeyBuYW1lPzogc3RyaW5nIH0gfSkuY29uc3RydWN0b3I/Lm5hbWUgIT09XG4gICAgICAgICdET01FeGNlcHRpb24nXG4gICAgICApXG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIGNvbnN0IGUgPSB2YWx1ZSBhcyBFcnJvciAmIHsgY2F1c2U/OiB1bmtub3duIH07XG4gICAgICBjb25zdCByZWR1Y2VkOiBTZXJpYWxpemFibGVTcGVjaWFsWydET01FeGNlcHRpb24nXSA9IHtcbiAgICAgICAgbWVzc2FnZTogZS5tZXNzYWdlLFxuICAgICAgICBuYW1lOiBlLm5hbWUsXG4gICAgICAgIHN0YWNrOiBlLnN0YWNrLFxuICAgICAgfTtcbiAgICAgIGlmICgnY2F1c2UnIGluIGUpIHJlZHVjZWQuY2F1c2UgPSBlLmNhdXNlO1xuICAgICAgcmV0dXJuIHJlZHVjZWQ7XG4gICAgfSxcbiAgICAvLyBFcnJvciBzdWJjbGFzcyByZWR1Y2VycyBhcmUgaW50ZW50aW9uYWxseSBwbGFjZWQgYmVmb3JlIHRoZSBiYXNlIEVycm9yXG4gICAgLy8gcmVkdWNlciBiZWNhdXNlIGRldmFsdWUgdXNlcyBmaXJzdC1tYXRjaC13aW5zLiBTdWJjbGFzcy1zcGVjaWZpYyByZWR1Y2Vyc1xuICAgIC8vIG11c3QgYmUgY2hlY2tlZCBmaXJzdCBzbyB0aGF0IGUuZy4gYSBUeXBlRXJyb3IgaXMgc2VyaWFsaXplZCBhcyBcIlR5cGVFcnJvclwiXG4gICAgLy8gcmF0aGVyIHRoYW4gZmFsbGluZyB0aHJvdWdoIHRvIHRoZSBnZW5lcmljIFwiRXJyb3JcIiByZWR1Y2VyLlxuICAgIC8vIFNlZSBgbWFrZUVycm9yU3ViY2xhc3NSZWR1Y2VyYCBmb3IgaW1wbGVtZW50YXRpb24gZGV0YWlscy5cbiAgICBFdmFsRXJyb3I6IG1ha2VFcnJvclN1YmNsYXNzUmVkdWNlcignRXZhbEVycm9yJyksXG4gICAgRmF0YWxFcnJvcjogbWFrZUVycm9yU3ViY2xhc3NSZWR1Y2VyKCdGYXRhbEVycm9yJyksXG4gICAgSG9va0NvbmZsaWN0RXJyb3I6ICh2YWx1ZSkgPT4ge1xuICAgICAgY29uc3QgYmFzZSA9IHJlZHVjZU5hbWVkRXJyb3JTdWJjbGFzc0Jhc2UoJ0hvb2tDb25mbGljdEVycm9yJywgdmFsdWUpO1xuICAgICAgaWYgKCFiYXNlKSByZXR1cm4gZmFsc2U7XG4gICAgICBjb25zdCBlcnJvciA9IHZhbHVlIGFzIEhvb2tDb25mbGljdEVycm9yO1xuICAgICAgY29uc3QgcmVkdWNlZDogU2VyaWFsaXphYmxlU3BlY2lhbFsnSG9va0NvbmZsaWN0RXJyb3InXSA9IHtcbiAgICAgICAgLi4uYmFzZSxcbiAgICAgICAgdG9rZW46IGVycm9yLnRva2VuLFxuICAgICAgfTtcbiAgICAgIGlmIChlcnJvci5jb25mbGljdGluZ1J1bklkICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcmVkdWNlZC5jb25mbGljdGluZ1J1bklkID0gZXJyb3IuY29uZmxpY3RpbmdSdW5JZDtcbiAgICAgIH1cbiAgICAgIHJldHVybiByZWR1Y2VkO1xuICAgIH0sXG4gICAgUmFuZ2VFcnJvcjogbWFrZUVycm9yU3ViY2xhc3NSZWR1Y2VyKCdSYW5nZUVycm9yJyksXG4gICAgUmVmZXJlbmNlRXJyb3I6IG1ha2VFcnJvclN1YmNsYXNzUmVkdWNlcignUmVmZXJlbmNlRXJyb3InKSxcbiAgICAvLyBSZXRyeWFibGVFcnJvciBjYXJyaWVzIGFuIGV4dHJhIGByZXRyeUFmdGVyYCBEYXRlIHRoYXQgd2Ugc2VyaWFsaXplIGFzXG4gICAgLy8gYSBudW1lcmljIGVwb2NoIHRpbWVzdGFtcC4gVGhlIERhdGUgcmVkdWNlciB1c2VzIGBpbnN0YW5jZW9mIGdsb2JhbC5EYXRlYCxcbiAgICAvLyB3aGljaCBmYWlscyBmb3IgRGF0ZXMgZnJvbSBhIGRpZmZlcmVudCBWTSByZWFsbTsgc2VyaWFsaXppbmcgYXMgYVxuICAgIC8vIG51bWJlciBzaWRlc3RlcHMgdGhhdCBpc3N1ZS5cbiAgICBSZXRyeWFibGVFcnJvcjogKHZhbHVlKSA9PiB7XG4gICAgICBjb25zdCBiYXNlID0gcmVkdWNlTmFtZWRFcnJvclN1YmNsYXNzQmFzZSgnUmV0cnlhYmxlRXJyb3InLCB2YWx1ZSk7XG4gICAgICBpZiAoIWJhc2UpIHJldHVybiBmYWxzZTtcbiAgICAgIGNvbnN0IHJldHJ5QWZ0ZXJSYXcgPSAodmFsdWUgYXMgUmV0cnlhYmxlRXJyb3IpLnJldHJ5QWZ0ZXIgYXMgdW5rbm93bjtcbiAgICAgIGxldCByZXRyeUFmdGVyOiBudW1iZXI7XG4gICAgICBpZiAoXG4gICAgICAgIHJldHJ5QWZ0ZXJSYXcgJiZcbiAgICAgICAgdHlwZW9mIHJldHJ5QWZ0ZXJSYXcgPT09ICdvYmplY3QnICYmXG4gICAgICAgIHR5cGVvZiAocmV0cnlBZnRlclJhdyBhcyB7IGdldFRpbWU/OiB1bmtub3duIH0pLmdldFRpbWUgPT09ICdmdW5jdGlvbidcbiAgICAgICkge1xuICAgICAgICBjb25zdCB0ID0gKHJldHJ5QWZ0ZXJSYXcgYXMgRGF0ZSkuZ2V0VGltZSgpO1xuICAgICAgICByZXRyeUFmdGVyID0gTnVtYmVyLmlzTmFOKHQpID8gRGF0ZS5ub3coKSArIDEwMDAgOiB0O1xuICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgdHlwZW9mIHJldHJ5QWZ0ZXJSYXcgPT09ICdzdHJpbmcnIHx8XG4gICAgICAgIHR5cGVvZiByZXRyeUFmdGVyUmF3ID09PSAnbnVtYmVyJ1xuICAgICAgKSB7XG4gICAgICAgIGNvbnN0IHQgPSBuZXcgRGF0ZShyZXRyeUFmdGVyUmF3KS5nZXRUaW1lKCk7XG4gICAgICAgIHJldHJ5QWZ0ZXIgPSBOdW1iZXIuaXNOYU4odCkgPyBEYXRlLm5vdygpICsgMTAwMCA6IHQ7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXRyeUFmdGVyID0gRGF0ZS5ub3coKSArIDEwMDA7XG4gICAgICB9XG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5iYXNlLFxuICAgICAgICByZXRyeUFmdGVyLFxuICAgICAgfSBzYXRpc2ZpZXMgU2VyaWFsaXphYmxlU3BlY2lhbFsnUmV0cnlhYmxlRXJyb3InXTtcbiAgICB9LFxuICAgIC8vIFJ1bnRpbWVEZWNyeXB0aW9uRXJyb3IgY2FycmllcyBhbiBleHRyYSBgY29udGV4dGAgb2JqZWN0IChvcGVyYXRpb24sXG4gICAgLy8gYnl0ZUxlbmd0aCwgZm9ybWF0UHJlZml4KSB0aGF0IHRoZSBnZW5lcmljIEVycm9yIHJlZHVjZXIgd291bGQgZHJvcC5cbiAgICAvLyBQcmVzZXJ2ZSBpdCBzbyB0aGUgZGlhZ25vc3RpYyBkYXRhIHN1cnZpdmVzIHRoZSBydW4tZXJyb3Igcm91bmQgdHJpcC5cbiAgICBSdW50aW1lRGVjcnlwdGlvbkVycm9yOiAodmFsdWUpID0+IHtcbiAgICAgIGNvbnN0IGJhc2UgPSByZWR1Y2VOYW1lZEVycm9yU3ViY2xhc3NCYXNlKFxuICAgICAgICAnUnVudGltZURlY3J5cHRpb25FcnJvcicsXG4gICAgICAgIHZhbHVlXG4gICAgICApO1xuICAgICAgaWYgKCFiYXNlKSByZXR1cm4gZmFsc2U7XG4gICAgICBjb25zdCByZWR1Y2VkOiBTZXJpYWxpemFibGVTcGVjaWFsWydSdW50aW1lRGVjcnlwdGlvbkVycm9yJ10gPSB7XG4gICAgICAgIC4uLmJhc2UsXG4gICAgICB9O1xuICAgICAgY29uc3QgY29udGV4dCA9ICh2YWx1ZSBhcyBSdW50aW1lRGVjcnlwdGlvbkVycm9yKS5jb250ZXh0O1xuICAgICAgaWYgKGNvbnRleHQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICByZWR1Y2VkLmNvbnRleHQgPSBjb250ZXh0O1xuICAgICAgfVxuICAgICAgcmV0dXJuIHJlZHVjZWQ7XG4gICAgfSxcbiAgICBTeW50YXhFcnJvcjogbWFrZUVycm9yU3ViY2xhc3NSZWR1Y2VyKCdTeW50YXhFcnJvcicpLFxuICAgIFR5cGVFcnJvcjogbWFrZUVycm9yU3ViY2xhc3NSZWR1Y2VyKCdUeXBlRXJyb3InKSxcbiAgICBVUklFcnJvcjogbWFrZUVycm9yU3ViY2xhc3NSZWR1Y2VyKCdVUklFcnJvcicpLFxuICAgIC8vIEFnZ3JlZ2F0ZUVycm9yIGlzIHNpbWlsYXIgdG8gb3RoZXIgc3ViY2xhc3NlcyBidXQgYWxzbyBwcmVzZXJ2ZXMgdGhlXG4gICAgLy8gYGVycm9yc2AgYXJyYXkuIFdlIGV4dGVuZCB0aGUgYmFzZSBoZWxwZXIncyBvdXRwdXQgaGVyZS5cbiAgICBBZ2dyZWdhdGVFcnJvcjogKHZhbHVlKSA9PiB7XG4gICAgICBjb25zdCBiYXNlID0gcmVkdWNlTmFtZWRFcnJvclN1YmNsYXNzQmFzZSgnQWdncmVnYXRlRXJyb3InLCB2YWx1ZSk7XG4gICAgICBpZiAoIWJhc2UpIHJldHVybiBmYWxzZTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLmJhc2UsXG4gICAgICAgIGVycm9yczogKHZhbHVlIGFzIEFnZ3JlZ2F0ZUVycm9yKS5lcnJvcnMsXG4gICAgICB9IHNhdGlzZmllcyBTZXJpYWxpemFibGVTcGVjaWFsWydBZ2dyZWdhdGVFcnJvciddO1xuICAgIH0sXG4gICAgLy8gQmFzZSBFcnJvciByZWR1Y2VyIOKAlCBjYXRjaC1hbGwgZm9yIGFueSBFcnJvciBpbnN0YW5jZSBub3QgbWF0Y2hlZCBieSBhXG4gICAgLy8gc3BlY2lmaWMgc3ViY2xhc3MgcmVkdWNlciBhYm92ZSAoaW5jbHVkaW5nIHVzZXIgRXJyb3Igc3ViY2xhc3NlcyB3aXRob3V0XG4gICAgLy8gV09SS0ZMT1dfU0VSSUFMSVpFKS4gUHJlc2VydmVzIGBuYW1lYCBzbyB0aGUgZXJyb3IncyBpZGVudGl0eSBpcyByZXRhaW5lZFxuICAgIC8vIGV2ZW4gdGhvdWdoIHRoZSBleGFjdCBjbGFzcyBjYW5ub3QgYmUgcmVjb25zdHJ1Y3RlZC5cbiAgICBFcnJvcjogKHZhbHVlKSA9PiB7XG4gICAgICBpZiAoIXR5cGVzLmlzTmF0aXZlRXJyb3IodmFsdWUpKSByZXR1cm4gZmFsc2U7XG4gICAgICBjb25zdCByZWR1Y2VkOiBTZXJpYWxpemFibGVTcGVjaWFsWydFcnJvciddID0ge1xuICAgICAgICBuYW1lOiB2YWx1ZS5uYW1lLFxuICAgICAgICBtZXNzYWdlOiB2YWx1ZS5tZXNzYWdlLFxuICAgICAgICBzdGFjazogdmFsdWUuc3RhY2ssXG4gICAgICB9O1xuICAgICAgaWYgKCdjYXVzZScgaW4gdmFsdWUpIHJlZHVjZWQuY2F1c2UgPSB2YWx1ZS5jYXVzZTtcbiAgICAgIHJldHVybiByZWR1Y2VkO1xuICAgIH0sXG4gICAgRmxvYXQzMkFycmF5OiAodmFsdWUpID0+XG4gICAgICB2YWx1ZSBpbnN0YW5jZW9mIGdsb2JhbC5GbG9hdDMyQXJyYXkgJiYgdmlld1RvQmFzZTY0KHZhbHVlKSxcbiAgICBGbG9hdDY0QXJyYXk6ICh2YWx1ZSkgPT5cbiAgICAgIHZhbHVlIGluc3RhbmNlb2YgZ2xvYmFsLkZsb2F0NjRBcnJheSAmJiB2aWV3VG9CYXNlNjQodmFsdWUpLFxuICAgIEhlYWRlcnM6ICh2YWx1ZSkgPT4gdmFsdWUgaW5zdGFuY2VvZiBnbG9iYWwuSGVhZGVycyAmJiBBcnJheS5mcm9tKHZhbHVlKSxcbiAgICBJbnQ4QXJyYXk6ICh2YWx1ZSkgPT5cbiAgICAgIHZhbHVlIGluc3RhbmNlb2YgZ2xvYmFsLkludDhBcnJheSAmJiB2aWV3VG9CYXNlNjQodmFsdWUpLFxuICAgIEludDE2QXJyYXk6ICh2YWx1ZSkgPT5cbiAgICAgIHZhbHVlIGluc3RhbmNlb2YgZ2xvYmFsLkludDE2QXJyYXkgJiYgdmlld1RvQmFzZTY0KHZhbHVlKSxcbiAgICBJbnQzMkFycmF5OiAodmFsdWUpID0+XG4gICAgICB2YWx1ZSBpbnN0YW5jZW9mIGdsb2JhbC5JbnQzMkFycmF5ICYmIHZpZXdUb0Jhc2U2NCh2YWx1ZSksXG4gICAgTWFwOiAodmFsdWUpID0+IHZhbHVlIGluc3RhbmNlb2YgZ2xvYmFsLk1hcCAmJiBBcnJheS5mcm9tKHZhbHVlKSxcbiAgICBSZWdFeHA6ICh2YWx1ZSkgPT5cbiAgICAgIHZhbHVlIGluc3RhbmNlb2YgZ2xvYmFsLlJlZ0V4cCAmJiB7XG4gICAgICAgIHNvdXJjZTogdmFsdWUuc291cmNlLFxuICAgICAgICBmbGFnczogdmFsdWUuZmxhZ3MsXG4gICAgICB9LFxuICAgIC8vIFJlcXVlc3QgYW5kIFJlc3BvbnNlIGFyZSBpbnRlbnRpb25hbGx5IE5PVCBpbiBjb21tb24gcmVkdWNlcnMuXG4gICAgLy8gVGhleSByZXF1aXJlIG1vZGUtc3BlY2lmaWMgcmV2aXZlcnMgKHN0cmVhbSBoYW5kbGluZywgZXRjLikgYW5kXG4gICAgLy8gaW5jbHVkaW5nIHRoZW0gaGVyZSB3aXRob3V0IG1hdGNoaW5nIHJldml2ZXJzIHdvdWxkIGNhdXNlIHRoZW1cbiAgICAvLyB0byBkZXNlcmlhbGl6ZSBhcyBwbGFpbiBvYmplY3RzLlxuICAgIFNldDogKHZhbHVlKSA9PiB2YWx1ZSBpbnN0YW5jZW9mIGdsb2JhbC5TZXQgJiYgQXJyYXkuZnJvbSh2YWx1ZSksXG4gICAgVVJMOiAodmFsdWUpID0+IHZhbHVlIGluc3RhbmNlb2YgZ2xvYmFsLlVSTCAmJiB2YWx1ZS5ocmVmLFxuICAgIFdvcmtmbG93RnVuY3Rpb246ICh2YWx1ZSkgPT4ge1xuICAgICAgLy8gT25seSBtYXRjaCBmdW5jdGlvbiByZWZlcmVuY2VzIHdpdGggYSB3b3JrZmxvd0lkIHByb3BlcnR5IChzZXQgYnlcbiAgICAgIC8vIHRoZSBTV0MgY29tcGlsZXIgb24gd29ya2Zsb3cgZnVuY3Rpb25zKS4gUGxhaW4geyB3b3JrZmxvd0lkIH0gb2JqZWN0c1xuICAgICAgLy8gYXJlIE5PVCBtYXRjaGVkIOKAlCB0aGlzIHByZXZlbnRzIGluZmluaXRlIHJlY3Vyc2lvbiBzaW5jZSB0aGUgcmVkdWNlZFxuICAgICAgLy8gZm9ybSB7IHdvcmtmbG93SWQgfSBpcyBhIHBsYWluIG9iamVjdCwgbm90IGEgZnVuY3Rpb24uXG4gICAgICBpZiAodHlwZW9mIHZhbHVlICE9PSAnZnVuY3Rpb24nKSByZXR1cm4gZmFsc2U7XG4gICAgICBjb25zdCB3b3JrZmxvd0lkID0gKHZhbHVlIGFzIGFueSkud29ya2Zsb3dJZDtcbiAgICAgIGlmICh0eXBlb2Ygd29ya2Zsb3dJZCAhPT0gJ3N0cmluZycpIHJldHVybiBmYWxzZTtcbiAgICAgIHJldHVybiB7IHdvcmtmbG93SWQgfTtcbiAgICB9LFxuICAgIFVSTFNlYXJjaFBhcmFtczogKHZhbHVlKSA9PiB7XG4gICAgICBpZiAoISh2YWx1ZSBpbnN0YW5jZW9mIGdsb2JhbC5VUkxTZWFyY2hQYXJhbXMpKSByZXR1cm4gZmFsc2U7XG4gICAgICBpZiAodmFsdWUuc2l6ZSA9PT0gMCkgcmV0dXJuICcuJztcbiAgICAgIHJldHVybiBTdHJpbmcodmFsdWUpO1xuICAgIH0sXG4gICAgVWludDhBcnJheTogKHZhbHVlKSA9PlxuICAgICAgdmFsdWUgaW5zdGFuY2VvZiBnbG9iYWwuVWludDhBcnJheSAmJiB2aWV3VG9CYXNlNjQodmFsdWUpLFxuICAgIFVpbnQ4Q2xhbXBlZEFycmF5OiAodmFsdWUpID0+XG4gICAgICB2YWx1ZSBpbnN0YW5jZW9mIGdsb2JhbC5VaW50OENsYW1wZWRBcnJheSAmJiB2aWV3VG9CYXNlNjQodmFsdWUpLFxuICAgIFVpbnQxNkFycmF5OiAodmFsdWUpID0+XG4gICAgICB2YWx1ZSBpbnN0YW5jZW9mIGdsb2JhbC5VaW50MTZBcnJheSAmJiB2aWV3VG9CYXNlNjQodmFsdWUpLFxuICAgIFVpbnQzMkFycmF5OiAodmFsdWUpID0+XG4gICAgICB2YWx1ZSBpbnN0YW5jZW9mIGdsb2JhbC5VaW50MzJBcnJheSAmJiB2aWV3VG9CYXNlNjQodmFsdWUpLFxuICB9O1xufVxuXG4vLyAtLS0tIFJldml2ZXJzIC0tLS1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldENvbW1vblJldml2ZXJzKFxuICBnbG9iYWw6IFJlY29yZDxzdHJpbmcsIGFueT4gPSBnbG9iYWxUaGlzXG4pOiBQYXJ0aWFsPFJldml2ZXJzPiB7XG4gIHJldHVybiB7XG4gICAgQXJyYXlCdWZmZXI6ICh2YWx1ZTogc3RyaW5nKSA9PiByZXZpdmVBcnJheUJ1ZmZlcih2YWx1ZSwgZ2xvYmFsKSxcbiAgICBCaWdJbnQ6ICh2YWx1ZTogc3RyaW5nKSA9PiBnbG9iYWwuQmlnSW50KHZhbHVlKSxcbiAgICBCaWdJbnQ2NEFycmF5OiAodmFsdWU6IHN0cmluZykgPT5cbiAgICAgIG5ldyBnbG9iYWwuQmlnSW50NjRBcnJheShyZXZpdmVBcnJheUJ1ZmZlcih2YWx1ZSwgZ2xvYmFsKSksXG4gICAgQmlnVWludDY0QXJyYXk6ICh2YWx1ZTogc3RyaW5nKSA9PlxuICAgICAgbmV3IGdsb2JhbC5CaWdVaW50NjRBcnJheShyZXZpdmVBcnJheUJ1ZmZlcih2YWx1ZSwgZ2xvYmFsKSksXG4gICAgRGF0ZTogKHZhbHVlKSA9PiBuZXcgZ2xvYmFsLkRhdGUodmFsdWUpLFxuICAgIERPTUV4Y2VwdGlvbjogKHZhbHVlKSA9PiB7XG4gICAgICBjb25zdCBlcnJvciA9IG5ldyBnbG9iYWwuRE9NRXhjZXB0aW9uKHZhbHVlLm1lc3NhZ2UsIHZhbHVlLm5hbWUpO1xuICAgICAgaWYgKHZhbHVlLnN0YWNrICE9PSB1bmRlZmluZWQpIGVycm9yLnN0YWNrID0gdmFsdWUuc3RhY2s7XG4gICAgICAvLyBET01FeGNlcHRpb24ncyBjb25zdHJ1Y3RvciBkb2Vzbid0IGFjY2VwdCBhIGNhdXNlIG9wdGlvbiwgc29cbiAgICAgIC8vIHdlIHNldCBpdCBtYW51YWxseSB3aGVuIHByZXNlbnQgaW4gdGhlIHNlcmlhbGl6ZWQgZGF0YS5cbiAgICAgIGlmICgnY2F1c2UnIGluIHZhbHVlKSBlcnJvci5jYXVzZSA9IHZhbHVlLmNhdXNlO1xuICAgICAgcmV0dXJuIGVycm9yO1xuICAgIH0sXG4gICAgLy8gRXJyb3Igc3ViY2xhc3MgcmV2aXZlcnMgcmVjb25zdHJ1Y3QgdGhlIGNvcnJlY3QgYnVpbHQtaW4gRXJyb3IgdHlwZS5cbiAgICAvLyBTZWUgYG1ha2VFcnJvclN1YmNsYXNzUmV2aXZlcmAgZm9yIGltcGxlbWVudGF0aW9uIGRldGFpbHMuXG4gICAgRXZhbEVycm9yOiBtYWtlRXJyb3JTdWJjbGFzc1Jldml2ZXIoZ2xvYmFsLCAnRXZhbEVycm9yJyksXG4gICAgLy8gYEZhdGFsRXJyb3JgIGFuZCBgUmV0cnlhYmxlRXJyb3JgIGFyZSBub3QgYnVpbHQtaW5zLCBzbyB3ZSByZXNvbHZlIHRoZW1cbiAgICAvLyBmcm9tIHRoZSBjb25zdW1lcidzIGBnbG9iYWxUaGlzYCB2aWEgYSBgU3ltYm9sLmZvciguLi4pYCBrZXkgcmVnaXN0ZXJlZFxuICAgIC8vIGJ5IGBAd29ya2Zsb3cvZXJyb3JzYCBvbiBsb2FkLiBUaGlzIG1ha2VzIGBpbnN0YW5jZW9mIEZhdGFsRXJyb3JgIHdvcmtcbiAgICAvLyBpbiB1c2VyIGNvZGUgdGhhdCBsaXZlcyBpbiBhIGRpZmZlcmVudCByZWFsbSB0aGFuIHRoaXMgcmVkdWNlciBtb2R1bGVcbiAgICAvLyAoZS5nLiB3aGVuIHRoZSBob3N0IGh5ZHJhdGVzIGEgdmFsdWUgZGVzdGluZWQgZm9yIGEgd29ya2Zsb3cgVk1cbiAgICAvLyBjb250ZXh0KS4gU2VlIHRoZSByZWdpc3RyYXRpb24gYmxvY2sgYXQgdGhlIGJvdHRvbSBvZlxuICAgIC8vIGBwYWNrYWdlcy9lcnJvcnMvc3JjL2luZGV4LnRzYCBmb3IgZGV0YWlscy4gRmFsbHMgYmFjayB0byB0aGUgaW1wb3J0ZWRcbiAgICAvLyBjbGFzcyBmb3IgZW52aXJvbm1lbnRzIHdoZXJlIG5vIGJ1bmRsZWQgYEB3b3JrZmxvdy9lcnJvcnNgIGhhcyBsb2FkZWRcbiAgICAvLyBpbiB0aGUgY29uc3VtZXIgcmVhbG0uXG4gICAgRmF0YWxFcnJvcjogKHZhbHVlKSA9PiB7XG4gICAgICBjb25zdCBDdG9yID1cbiAgICAgICAgKChnbG9iYWwgYXMgUmVjb3JkPHN5bWJvbCwgdW5rbm93bj4pW1xuICAgICAgICAgIFN5bWJvbC5mb3IoJ0B3b3JrZmxvdy9lcnJvcnMvL0ZhdGFsRXJyb3InKVxuICAgICAgICBdIGFzIHR5cGVvZiBGYXRhbEVycm9yIHwgdW5kZWZpbmVkKSA/PyBGYXRhbEVycm9yO1xuICAgICAgY29uc3QgZXJyb3IgPSBuZXcgQ3Rvcih2YWx1ZS5tZXNzYWdlKTtcbiAgICAgIGlmICh2YWx1ZS5zdGFjayAhPT0gdW5kZWZpbmVkKSBlcnJvci5zdGFjayA9IHZhbHVlLnN0YWNrO1xuICAgICAgaWYgKCdjYXVzZScgaW4gdmFsdWUpIGVycm9yLmNhdXNlID0gdmFsdWUuY2F1c2U7XG4gICAgICByZXR1cm4gZXJyb3I7XG4gICAgfSxcbiAgICBIb29rQ29uZmxpY3RFcnJvcjogKHZhbHVlKSA9PiB7XG4gICAgICBjb25zdCBDdG9yID1cbiAgICAgICAgKChnbG9iYWwgYXMgUmVjb3JkPHN5bWJvbCwgdW5rbm93bj4pW1xuICAgICAgICAgIFN5bWJvbC5mb3IoJ0B3b3JrZmxvdy9lcnJvcnMvL0hvb2tDb25mbGljdEVycm9yJylcbiAgICAgICAgXSBhcyB0eXBlb2YgSG9va0NvbmZsaWN0RXJyb3IgfCB1bmRlZmluZWQpID8/IEhvb2tDb25mbGljdEVycm9yO1xuICAgICAgY29uc3QgZXJyb3IgPSBuZXcgQ3Rvcih2YWx1ZS50b2tlbiwgdmFsdWUuY29uZmxpY3RpbmdSdW5JZCk7XG4gICAgICBpZiAodmFsdWUuc3RhY2sgIT09IHVuZGVmaW5lZCkgZXJyb3Iuc3RhY2sgPSB2YWx1ZS5zdGFjaztcbiAgICAgIGlmICgnY2F1c2UnIGluIHZhbHVlKSB7XG4gICAgICAgIChlcnJvciBhcyBFcnJvciAmIHsgY2F1c2U/OiB1bmtub3duIH0pLmNhdXNlID0gdmFsdWUuY2F1c2U7XG4gICAgICB9XG4gICAgICByZXR1cm4gZXJyb3I7XG4gICAgfSxcbiAgICBSYW5nZUVycm9yOiBtYWtlRXJyb3JTdWJjbGFzc1Jldml2ZXIoZ2xvYmFsLCAnUmFuZ2VFcnJvcicpLFxuICAgIFJlZmVyZW5jZUVycm9yOiBtYWtlRXJyb3JTdWJjbGFzc1Jldml2ZXIoZ2xvYmFsLCAnUmVmZXJlbmNlRXJyb3InKSxcbiAgICBSZXRyeWFibGVFcnJvcjogKHZhbHVlKSA9PiB7XG4gICAgICAvLyBVc2UgdGhlIGNvbnRleHQncyBgRGF0ZWAgY29uc3RydWN0b3IgKG1hdGNoaW5nIHRoZSByZXN0IG9mIHRoaXNcbiAgICAgIC8vIG1vZHVsZSkgc28gdGhlIHJlc3VsdGluZyBgcmV0cnlBZnRlcmAgRGF0ZSBwYXNzZXMgYGluc3RhbmNlb2ZcbiAgICAgIC8vIGdsb2JhbC5EYXRlYCBjaGVja3MgaW4gdGhlIHRhcmdldCByZWFsbS4gU2VlIHRoZSBGYXRhbEVycm9yIHJldml2ZXJcbiAgICAgIC8vIGFib3ZlIGZvciB3aHkgd2UgcmVzb2x2ZSBgUmV0cnlhYmxlRXJyb3JgIGZyb20gdGhlIGNvbnN1bWVyJ3NcbiAgICAgIC8vIGdsb2JhbFRoaXMgaW5zdGVhZCBvZiB0aGUgaW1wb3J0ZWQgY2xhc3MuXG4gICAgICBjb25zdCBDdG9yID1cbiAgICAgICAgKChnbG9iYWwgYXMgUmVjb3JkPHN5bWJvbCwgdW5rbm93bj4pW1xuICAgICAgICAgIFN5bWJvbC5mb3IoJ0B3b3JrZmxvdy9lcnJvcnMvL1JldHJ5YWJsZUVycm9yJylcbiAgICAgICAgXSBhcyB0eXBlb2YgUmV0cnlhYmxlRXJyb3IgfCB1bmRlZmluZWQpID8/IFJldHJ5YWJsZUVycm9yO1xuICAgICAgY29uc3QgZXJyb3IgPSBuZXcgQ3Rvcih2YWx1ZS5tZXNzYWdlLCB7XG4gICAgICAgIHJldHJ5QWZ0ZXI6IG5ldyBnbG9iYWwuRGF0ZSh2YWx1ZS5yZXRyeUFmdGVyKSxcbiAgICAgIH0pO1xuICAgICAgaWYgKHZhbHVlLnN0YWNrICE9PSB1bmRlZmluZWQpIGVycm9yLnN0YWNrID0gdmFsdWUuc3RhY2s7XG4gICAgICBpZiAoJ2NhdXNlJyBpbiB2YWx1ZSkgZXJyb3IuY2F1c2UgPSB2YWx1ZS5jYXVzZTtcbiAgICAgIHJldHVybiBlcnJvcjtcbiAgICB9LFxuICAgIFJ1bnRpbWVEZWNyeXB0aW9uRXJyb3I6ICh2YWx1ZSkgPT4ge1xuICAgICAgLy8gUmVzb2x2ZSBmcm9tIHRoZSBjb25zdW1lcidzIGdsb2JhbFRoaXMgKHNlZSB0aGUgRmF0YWxFcnJvciByZXZpdmVyXG4gICAgICAvLyBhYm92ZSkgc28gYGluc3RhbmNlb2YgUnVudGltZURlY3J5cHRpb25FcnJvcmAgaG9sZHMgYWNyb3NzIHJlYWxtcy5cbiAgICAgIGNvbnN0IEN0b3IgPVxuICAgICAgICAoKGdsb2JhbCBhcyBSZWNvcmQ8c3ltYm9sLCB1bmtub3duPilbXG4gICAgICAgICAgU3ltYm9sLmZvcignQHdvcmtmbG93L2Vycm9ycy8vUnVudGltZURlY3J5cHRpb25FcnJvcicpXG4gICAgICAgIF0gYXMgdHlwZW9mIFJ1bnRpbWVEZWNyeXB0aW9uRXJyb3IgfCB1bmRlZmluZWQpID8/XG4gICAgICAgIFJ1bnRpbWVEZWNyeXB0aW9uRXJyb3I7XG4gICAgICBjb25zdCBvcHRzOiBDb25zdHJ1Y3RvclBhcmFtZXRlcnM8dHlwZW9mIFJ1bnRpbWVEZWNyeXB0aW9uRXJyb3I+WzFdID0ge307XG4gICAgICBpZiAoJ2NhdXNlJyBpbiB2YWx1ZSkgb3B0cy5jYXVzZSA9IHZhbHVlLmNhdXNlO1xuICAgICAgaWYgKHZhbHVlLmNvbnRleHQgIT09IHVuZGVmaW5lZCkgb3B0cy5jb250ZXh0ID0gdmFsdWUuY29udGV4dDtcbiAgICAgIGNvbnN0IGVycm9yID0gbmV3IEN0b3IodmFsdWUubWVzc2FnZSwgb3B0cyk7XG4gICAgICBpZiAodmFsdWUuc3RhY2sgIT09IHVuZGVmaW5lZCkgZXJyb3Iuc3RhY2sgPSB2YWx1ZS5zdGFjaztcbiAgICAgIHJldHVybiBlcnJvcjtcbiAgICB9LFxuICAgIFN5bnRheEVycm9yOiBtYWtlRXJyb3JTdWJjbGFzc1Jldml2ZXIoZ2xvYmFsLCAnU3ludGF4RXJyb3InKSxcbiAgICBUeXBlRXJyb3I6IG1ha2VFcnJvclN1YmNsYXNzUmV2aXZlcihnbG9iYWwsICdUeXBlRXJyb3InKSxcbiAgICBVUklFcnJvcjogbWFrZUVycm9yU3ViY2xhc3NSZXZpdmVyKGdsb2JhbCwgJ1VSSUVycm9yJyksXG4gICAgQWdncmVnYXRlRXJyb3I6ICh2YWx1ZSkgPT4ge1xuICAgICAgY29uc3Qgb3B0cyA9ICdjYXVzZScgaW4gdmFsdWUgPyB7IGNhdXNlOiB2YWx1ZS5jYXVzZSB9IDogdW5kZWZpbmVkO1xuICAgICAgY29uc3QgZXJyb3IgPSBuZXcgZ2xvYmFsLkFnZ3JlZ2F0ZUVycm9yKFxuICAgICAgICB2YWx1ZS5lcnJvcnMsXG4gICAgICAgIHZhbHVlLm1lc3NhZ2UsXG4gICAgICAgIG9wdHNcbiAgICAgICk7XG4gICAgICBpZiAodmFsdWUuc3RhY2sgIT09IHVuZGVmaW5lZCkgZXJyb3Iuc3RhY2sgPSB2YWx1ZS5zdGFjaztcbiAgICAgIHJldHVybiBlcnJvcjtcbiAgICB9LFxuICAgIC8vIEJhc2UgRXJyb3IgcmV2aXZlciDigJQgdXNlZCBmb3IgcGxhaW4gRXJyb3IgaW5zdGFuY2VzIGFuZCB1bnJlY29nbml6ZWRcbiAgICAvLyBFcnJvciBzdWJjbGFzc2VzLiBQcmVzZXJ2ZXMgYG5hbWVgIHNvIHRoZSBlcnJvcidzIGlkZW50aXR5IGlzIHJldGFpbmVkLlxuICAgIEVycm9yOiAodmFsdWUpID0+IHtcbiAgICAgIGNvbnN0IG9wdHMgPSAnY2F1c2UnIGluIHZhbHVlID8geyBjYXVzZTogdmFsdWUuY2F1c2UgfSA6IHVuZGVmaW5lZDtcbiAgICAgIGNvbnN0IGVycm9yID0gbmV3IGdsb2JhbC5FcnJvcih2YWx1ZS5tZXNzYWdlLCBvcHRzKTtcbiAgICAgIGVycm9yLm5hbWUgPSB2YWx1ZS5uYW1lO1xuICAgICAgaWYgKHZhbHVlLnN0YWNrICE9PSB1bmRlZmluZWQpIGVycm9yLnN0YWNrID0gdmFsdWUuc3RhY2s7XG4gICAgICByZXR1cm4gZXJyb3I7XG4gICAgfSxcbiAgICBGbG9hdDMyQXJyYXk6ICh2YWx1ZTogc3RyaW5nKSA9PlxuICAgICAgbmV3IGdsb2JhbC5GbG9hdDMyQXJyYXkocmV2aXZlQXJyYXlCdWZmZXIodmFsdWUsIGdsb2JhbCkpLFxuICAgIEZsb2F0NjRBcnJheTogKHZhbHVlOiBzdHJpbmcpID0+XG4gICAgICBuZXcgZ2xvYmFsLkZsb2F0NjRBcnJheShyZXZpdmVBcnJheUJ1ZmZlcih2YWx1ZSwgZ2xvYmFsKSksXG4gICAgSGVhZGVyczogKHZhbHVlKSA9PiBuZXcgZ2xvYmFsLkhlYWRlcnModmFsdWUpLFxuICAgIEludDhBcnJheTogKHZhbHVlOiBzdHJpbmcpID0+XG4gICAgICBuZXcgZ2xvYmFsLkludDhBcnJheShyZXZpdmVBcnJheUJ1ZmZlcih2YWx1ZSwgZ2xvYmFsKSksXG4gICAgSW50MTZBcnJheTogKHZhbHVlOiBzdHJpbmcpID0+XG4gICAgICBuZXcgZ2xvYmFsLkludDE2QXJyYXkocmV2aXZlQXJyYXlCdWZmZXIodmFsdWUsIGdsb2JhbCkpLFxuICAgIEludDMyQXJyYXk6ICh2YWx1ZTogc3RyaW5nKSA9PlxuICAgICAgbmV3IGdsb2JhbC5JbnQzMkFycmF5KHJldml2ZUFycmF5QnVmZmVyKHZhbHVlLCBnbG9iYWwpKSxcbiAgICBNYXA6ICh2YWx1ZSkgPT4gbmV3IGdsb2JhbC5NYXAodmFsdWUpLFxuICAgIFJlZ0V4cDogKHZhbHVlKSA9PiBuZXcgZ2xvYmFsLlJlZ0V4cCh2YWx1ZS5zb3VyY2UsIHZhbHVlLmZsYWdzKSxcbiAgICBTZXQ6ICh2YWx1ZSkgPT4gbmV3IGdsb2JhbC5TZXQodmFsdWUpLFxuICAgIFVSTDogKHZhbHVlKSA9PiBuZXcgZ2xvYmFsLlVSTCh2YWx1ZSksXG4gICAgV29ya2Zsb3dGdW5jdGlvbjogKHZhbHVlKSA9PlxuICAgICAgT2JqZWN0LmFzc2lnbihcbiAgICAgICAgKCkgPT4ge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAgICdXb3JrZmxvdyBmdW5jdGlvbnMgY2Fubm90IGJlIGNhbGxlZCBkaXJlY3RseS4gVXNlIHN0YXJ0KCkgdG8gaW52b2tlIHRoZW0uJ1xuICAgICAgICAgICk7XG4gICAgICAgIH0sXG4gICAgICAgIHsgd29ya2Zsb3dJZDogdmFsdWUud29ya2Zsb3dJZCB9XG4gICAgICApLFxuICAgIFVSTFNlYXJjaFBhcmFtczogKHZhbHVlKSA9PlxuICAgICAgbmV3IGdsb2JhbC5VUkxTZWFyY2hQYXJhbXModmFsdWUgPT09ICcuJyA/ICcnIDogdmFsdWUpLFxuICAgIFVpbnQ4QXJyYXk6ICh2YWx1ZTogc3RyaW5nKSA9PlxuICAgICAgbmV3IGdsb2JhbC5VaW50OEFycmF5KHJldml2ZUFycmF5QnVmZmVyKHZhbHVlLCBnbG9iYWwpKSxcbiAgICBVaW50OENsYW1wZWRBcnJheTogKHZhbHVlOiBzdHJpbmcpID0+XG4gICAgICBuZXcgZ2xvYmFsLlVpbnQ4Q2xhbXBlZEFycmF5KHJldml2ZUFycmF5QnVmZmVyKHZhbHVlLCBnbG9iYWwpKSxcbiAgICBVaW50MTZBcnJheTogKHZhbHVlOiBzdHJpbmcpID0+XG4gICAgICBuZXcgZ2xvYmFsLlVpbnQxNkFycmF5KHJldml2ZUFycmF5QnVmZmVyKHZhbHVlLCBnbG9iYWwpKSxcbiAgICBVaW50MzJBcnJheTogKHZhbHVlOiBzdHJpbmcpID0+XG4gICAgICBuZXcgZ2xvYmFsLlVpbnQzMkFycmF5KHJldml2ZUFycmF5QnVmZmVyKHZhbHVlLCBnbG9iYWwpKSxcbiAgfTtcbn1cblxuLy8gUmUtZXhwb3J0IGZvciB1c2UgaW4gbGVnYWN5IGNvbXBhdFxuZXhwb3J0IHsgcmV2aXZlIH07XG4iXX0=
@@ -0,0 +1,35 @@
1
+ /**
2
+ * Reducer and reviver for step function references.
3
+ *
4
+ * In workflow mode, step functions are replaced by the SWC plugin with
5
+ * proxies created by `globalThis[Symbol.for("WORKFLOW_USE_STEP")]("stepId")`.
6
+ * These proxies have a `.stepId` property and optionally a `.__closureVarsFn`
7
+ * for captured closure variables. They may additionally have `.__boundThis`
8
+ * (and rarely `.__boundArgs`) when the SWC plugin emitted
9
+ * `useStep(...).bind(this)` for a nested arrow step that lexically
10
+ * captured `this` (see `packages/swc-plugin-workflow/spec.md` → "Lexical
11
+ * `this` Capture in Nested Arrow Steps").
12
+ *
13
+ * The reducer serializes them as
14
+ * `{ stepId, closureVars?, boundThis?, boundArgs? }`.
15
+ * The reviver reconstructs them by calling WORKFLOW_USE_STEP and, when
16
+ * `boundThis` (or `boundArgs`) is present, re-binding the resulting
17
+ * proxy so the caller's captured `this` (and prefilled args) survive the
18
+ * round trip.
19
+ */
20
+ import type { Reducers, Revivers } from '../types.js';
21
+ export declare function getStepFunctionReducer(): Partial<Reducers>;
22
+ /**
23
+ * Create the StepFunction reviver for workflow context.
24
+ *
25
+ * The reviver calls WORKFLOW_USE_STEP to create the step proxy,
26
+ * restoring the ability to call the step from workflow code. If the
27
+ * serialized payload includes `boundThis` (and optionally `boundArgs`),
28
+ * the reviver also re-binds the freshly-created proxy so a step proxy
29
+ * that was constructed with `.bind(this, …)` in the workflow bundle
30
+ * continues to carry that receiver and any prefilled arguments after
31
+ * being deserialized in another bundle (e.g. when passed as a step
32
+ * argument).
33
+ */
34
+ export declare function getStepFunctionReviver(global?: Record<string, any>): Partial<Revivers>;
35
+ //# sourceMappingURL=step-function.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"step-function.d.ts","sourceRoot":"","sources":["../../../src/serialization/reducers/step-function.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAItD,wBAAgB,sBAAsB,IAAI,OAAO,CAAC,QAAQ,CAAC,CAuC1D;AAID;;;;;;;;;;;GAWG;AACH,wBAAgB,sBAAsB,CACpC,MAAM,GAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAc,GACvC,OAAO,CAAC,QAAQ,CAAC,CA8BnB"}