@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
@@ -5,13 +5,13 @@
5
5
  * arguments) and when receiving workflow return values. Supports encryption.
6
6
  */
7
7
  import type { CodecOptions } from './codec.js';
8
- import { type CryptoKey } from './encryption.js';
8
+ import { type PayloadKey } from './encryption.js';
9
9
  /**
10
10
  * Serialize a value from the client environment (e.g. workflow arguments).
11
11
  */
12
- export declare function serialize(value: unknown, encryptionKey?: CryptoKey, options?: CodecOptions): Promise<Uint8Array | unknown>;
12
+ export declare function serialize(value: unknown, encryptionKey?: PayloadKey, options?: CodecOptions): Promise<Uint8Array | unknown>;
13
13
  /**
14
14
  * Deserialize a value for the client environment (e.g. workflow return value).
15
15
  */
16
- export declare function deserialize(data: Uint8Array | unknown, encryptionKey?: CryptoKey, options?: CodecOptions): Promise<unknown>;
16
+ export declare function deserialize(data: Uint8Array | unknown, encryptionKey?: PayloadKey, options?: CodecOptions): Promise<unknown>;
17
17
  //# sourceMappingURL=client.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/serialization/client.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAE/C,OAAO,EACL,KAAK,SAAS,EAGf,MAAM,iBAAiB,CAAC;AAKzB;;GAEG;AACH,wBAAsB,SAAS,CAC7B,KAAK,EAAE,OAAO,EACd,aAAa,CAAC,EAAE,SAAS,EACzB,OAAO,CAAC,EAAE,YAAY,GACrB,OAAO,CAAC,UAAU,GAAG,OAAO,CAAC,CAY/B;AAED;;GAEG;AACH,wBAAsB,WAAW,CAC/B,IAAI,EAAE,UAAU,GAAG,OAAO,EAC1B,aAAa,CAAC,EAAE,SAAS,EACzB,OAAO,CAAC,EAAE,YAAY,GACrB,OAAO,CAAC,OAAO,CAAC,CAmBlB"}
1
+ {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/serialization/client.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAG/C,OAAO,EAGL,KAAK,UAAU,EAChB,MAAM,iBAAiB,CAAC;AAKzB;;GAEG;AACH,wBAAsB,SAAS,CAC7B,KAAK,EAAE,OAAO,EACd,aAAa,CAAC,EAAE,UAAU,EAC1B,OAAO,CAAC,EAAE,YAAY,GACrB,OAAO,CAAC,UAAU,GAAG,OAAO,CAAC,CAmB/B;AAED;;GAEG;AACH,wBAAsB,WAAW,CAC/B,IAAI,EAAE,UAAU,GAAG,OAAO,EAC1B,aAAa,CAAC,EAAE,UAAU,EAC1B,OAAO,CAAC,EAAE,YAAY,GACrB,OAAO,CAAC,OAAO,CAAC,CAsBlB"}
@@ -6,8 +6,9 @@
6
6
  */
7
7
  import { SerializationError } from '@workflow/errors';
8
8
  import { devalueCodec } from './codec-devalue.js';
9
+ import { compress, decompress } from './compression.js';
9
10
  import { decrypt as decryptData, encrypt as encryptData, } from './encryption.js';
10
- import { formatSerializationError } from './errors.js';
11
+ import { formatSerializationError, rethrowIfRuntimeError } from './errors.js';
11
12
  import { decodeFormatPrefix, encodeWithFormatPrefix } from './format.js';
12
13
  import { SerializationFormat } from './types.js';
13
14
  /**
@@ -17,9 +18,12 @@ export async function serialize(value, encryptionKey, options) {
17
18
  try {
18
19
  const payload = devalueCodec.serialize(value, 'client', options);
19
20
  const prefixed = encodeWithFormatPrefix(SerializationFormat.DEVALUE_V1, payload);
20
- return encryptData(prefixed, encryptionKey);
21
+ // Compress before encrypting, since encrypted bytes don't compress.
22
+ const compressed = await compress(prefixed, options?.compression === true, options?.compressionStats);
23
+ return encryptData(compressed, encryptionKey);
21
24
  }
22
25
  catch (error) {
26
+ rethrowIfRuntimeError(error);
23
27
  const { message, hint } = formatSerializationError('client value', error);
24
28
  throw new SerializationError(message, { hint, cause: error });
25
29
  }
@@ -28,7 +32,7 @@ export async function serialize(value, encryptionKey, options) {
28
32
  * Deserialize a value for the client environment (e.g. workflow return value).
29
33
  */
30
34
  export async function deserialize(data, encryptionKey, options) {
31
- const decrypted = await decryptData(data, encryptionKey);
35
+ const decrypted = await decompress(await decryptData(data, encryptionKey), options?.compressionStats);
32
36
  if (!(decrypted instanceof Uint8Array)) {
33
37
  if (devalueCodec.deserializeLegacy) {
34
38
  return devalueCodec.deserializeLegacy(decrypted, 'client', options);
@@ -41,4 +45,4 @@ export async function deserialize(data, encryptionKey, options) {
41
45
  }
42
46
  throw new Error(`Unsupported serialization format: ${format}`);
43
47
  }
44
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xpZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3NlcmlhbGl6YXRpb24vY2xpZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7OztHQUtHO0FBRUgsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFFdEQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ2xELE9BQU8sRUFFTCxPQUFPLElBQUksV0FBVyxFQUN0QixPQUFPLElBQUksV0FBVyxHQUN2QixNQUFNLGlCQUFpQixDQUFDO0FBQ3pCLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUN2RCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDekUsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sWUFBWSxDQUFDO0FBRWpEOztHQUVHO0FBQ0gsTUFBTSxDQUFDLEtBQUssVUFBVSxTQUFTLENBQzdCLEtBQWMsRUFDZCxhQUF5QixFQUN6QixPQUFzQjtJQUV0QixJQUFJLENBQUM7UUFDSCxNQUFNLE9BQU8sR0FBRyxZQUFZLENBQUMsU0FBUyxDQUFDLEtBQUssRUFBRSxRQUFRLEVBQUUsT0FBTyxDQUFDLENBQUM7UUFDakUsTUFBTSxRQUFRLEdBQUcsc0JBQXNCLENBQ3JDLG1CQUFtQixDQUFDLFVBQVUsRUFDOUIsT0FBTyxDQUNNLENBQUM7UUFDaEIsT0FBTyxXQUFXLENBQUMsUUFBUSxFQUFFLGFBQWEsQ0FBQyxDQUFDO0lBQzlDLENBQUM7SUFBQyxPQUFPLEtBQUssRUFBRSxDQUFDO1FBQ2YsTUFBTSxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsR0FBRyx3QkFBd0IsQ0FBQyxjQUFjLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDMUUsTUFBTSxJQUFJLGtCQUFrQixDQUFDLE9BQU8sRUFBRSxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQztJQUNoRSxDQUFDO0FBQ0gsQ0FBQztBQUVEOztHQUVHO0FBQ0gsTUFBTSxDQUFDLEtBQUssVUFBVSxXQUFXLENBQy9CLElBQTBCLEVBQzFCLGFBQXlCLEVBQ3pCLE9BQXNCO0lBRXRCLE1BQU0sU0FBUyxHQUFHLE1BQU0sV0FBVyxDQUFDLElBQUksRUFBRSxhQUFhLENBQUMsQ0FBQztJQUV6RCxJQUFJLENBQUMsQ0FBQyxTQUFTLFlBQVksVUFBVSxDQUFDLEVBQUUsQ0FBQztRQUN2QyxJQUFJLFlBQVksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO1lBQ25DLE9BQU8sWUFBWSxDQUFDLGlCQUFpQixDQUFDLFNBQVMsRUFBRSxRQUFRLEVBQUUsT0FBTyxDQUFDLENBQUM7UUFDdEUsQ0FBQztRQUNELE1BQU0sSUFBSSxLQUFLLENBQ2IsMkRBQTJELENBQzVELENBQUM7SUFDSixDQUFDO0lBRUQsTUFBTSxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsR0FBRyxrQkFBa0IsQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUUxRCxJQUFJLE1BQU0sS0FBSyxtQkFBbUIsQ0FBQyxVQUFVLEVBQUUsQ0FBQztRQUM5QyxPQUFPLFlBQVksQ0FBQyxXQUFXLENBQUMsT0FBTyxFQUFFLFFBQVEsRUFBRSxPQUFPLENBQUMsQ0FBQztJQUM5RCxDQUFDO0lBRUQsTUFBTSxJQUFJLEtBQUssQ0FBQyxxQ0FBcUMsTUFBTSxFQUFFLENBQUMsQ0FBQztBQUNqRSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBDbGllbnQgKGV4dGVybmFsKSBtb2RlIHNlcmlhbGl6YXRpb24uXG4gKlxuICogVXNlZCB3aGVuIHN0YXJ0aW5nIHdvcmtmbG93cyBmcm9tIHRoZSBjbGllbnQgc2lkZSAoc2VyaWFsaXppbmcgd29ya2Zsb3dcbiAqIGFyZ3VtZW50cykgYW5kIHdoZW4gcmVjZWl2aW5nIHdvcmtmbG93IHJldHVybiB2YWx1ZXMuIFN1cHBvcnRzIGVuY3J5cHRpb24uXG4gKi9cblxuaW1wb3J0IHsgU2VyaWFsaXphdGlvbkVycm9yIH0gZnJvbSAnQHdvcmtmbG93L2Vycm9ycyc7XG5pbXBvcnQgdHlwZSB7IENvZGVjT3B0aW9ucyB9IGZyb20gJy4vY29kZWMuanMnO1xuaW1wb3J0IHsgZGV2YWx1ZUNvZGVjIH0gZnJvbSAnLi9jb2RlYy1kZXZhbHVlLmpzJztcbmltcG9ydCB7XG4gIHR5cGUgQ3J5cHRvS2V5LFxuICBkZWNyeXB0IGFzIGRlY3J5cHREYXRhLFxuICBlbmNyeXB0IGFzIGVuY3J5cHREYXRhLFxufSBmcm9tICcuL2VuY3J5cHRpb24uanMnO1xuaW1wb3J0IHsgZm9ybWF0U2VyaWFsaXphdGlvbkVycm9yIH0gZnJvbSAnLi9lcnJvcnMuanMnO1xuaW1wb3J0IHsgZGVjb2RlRm9ybWF0UHJlZml4LCBlbmNvZGVXaXRoRm9ybWF0UHJlZml4IH0gZnJvbSAnLi9mb3JtYXQuanMnO1xuaW1wb3J0IHsgU2VyaWFsaXphdGlvbkZvcm1hdCB9IGZyb20gJy4vdHlwZXMuanMnO1xuXG4vKipcbiAqIFNlcmlhbGl6ZSBhIHZhbHVlIGZyb20gdGhlIGNsaWVudCBlbnZpcm9ubWVudCAoZS5nLiB3b3JrZmxvdyBhcmd1bWVudHMpLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gc2VyaWFsaXplKFxuICB2YWx1ZTogdW5rbm93bixcbiAgZW5jcnlwdGlvbktleT86IENyeXB0b0tleSxcbiAgb3B0aW9ucz86IENvZGVjT3B0aW9uc1xuKTogUHJvbWlzZTxVaW50OEFycmF5IHwgdW5rbm93bj4ge1xuICB0cnkge1xuICAgIGNvbnN0IHBheWxvYWQgPSBkZXZhbHVlQ29kZWMuc2VyaWFsaXplKHZhbHVlLCAnY2xpZW50Jywgb3B0aW9ucyk7XG4gICAgY29uc3QgcHJlZml4ZWQgPSBlbmNvZGVXaXRoRm9ybWF0UHJlZml4KFxuICAgICAgU2VyaWFsaXphdGlvbkZvcm1hdC5ERVZBTFVFX1YxLFxuICAgICAgcGF5bG9hZFxuICAgICkgYXMgVWludDhBcnJheTtcbiAgICByZXR1cm4gZW5jcnlwdERhdGEocHJlZml4ZWQsIGVuY3J5cHRpb25LZXkpO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGNvbnN0IHsgbWVzc2FnZSwgaGludCB9ID0gZm9ybWF0U2VyaWFsaXphdGlvbkVycm9yKCdjbGllbnQgdmFsdWUnLCBlcnJvcik7XG4gICAgdGhyb3cgbmV3IFNlcmlhbGl6YXRpb25FcnJvcihtZXNzYWdlLCB7IGhpbnQsIGNhdXNlOiBlcnJvciB9KTtcbiAgfVxufVxuXG4vKipcbiAqIERlc2VyaWFsaXplIGEgdmFsdWUgZm9yIHRoZSBjbGllbnQgZW52aXJvbm1lbnQgKGUuZy4gd29ya2Zsb3cgcmV0dXJuIHZhbHVlKS5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGRlc2VyaWFsaXplKFxuICBkYXRhOiBVaW50OEFycmF5IHwgdW5rbm93bixcbiAgZW5jcnlwdGlvbktleT86IENyeXB0b0tleSxcbiAgb3B0aW9ucz86IENvZGVjT3B0aW9uc1xuKTogUHJvbWlzZTx1bmtub3duPiB7XG4gIGNvbnN0IGRlY3J5cHRlZCA9IGF3YWl0IGRlY3J5cHREYXRhKGRhdGEsIGVuY3J5cHRpb25LZXkpO1xuXG4gIGlmICghKGRlY3J5cHRlZCBpbnN0YW5jZW9mIFVpbnQ4QXJyYXkpKSB7XG4gICAgaWYgKGRldmFsdWVDb2RlYy5kZXNlcmlhbGl6ZUxlZ2FjeSkge1xuICAgICAgcmV0dXJuIGRldmFsdWVDb2RlYy5kZXNlcmlhbGl6ZUxlZ2FjeShkZWNyeXB0ZWQsICdjbGllbnQnLCBvcHRpb25zKTtcbiAgICB9XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgJ0Nhbm5vdCBkZXNlcmlhbGl6ZSBub24tYmluYXJ5IGRhdGEgd2l0aG91dCBsZWdhY3kgc3VwcG9ydCdcbiAgICApO1xuICB9XG5cbiAgY29uc3QgeyBmb3JtYXQsIHBheWxvYWQgfSA9IGRlY29kZUZvcm1hdFByZWZpeChkZWNyeXB0ZWQpO1xuXG4gIGlmIChmb3JtYXQgPT09IFNlcmlhbGl6YXRpb25Gb3JtYXQuREVWQUxVRV9WMSkge1xuICAgIHJldHVybiBkZXZhbHVlQ29kZWMuZGVzZXJpYWxpemUocGF5bG9hZCwgJ2NsaWVudCcsIG9wdGlvbnMpO1xuICB9XG5cbiAgdGhyb3cgbmV3IEVycm9yKGBVbnN1cHBvcnRlZCBzZXJpYWxpemF0aW9uIGZvcm1hdDogJHtmb3JtYXR9YCk7XG59XG4iXX0=
48
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xpZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3NlcmlhbGl6YXRpb24vY2xpZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7OztHQUtHO0FBRUgsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFFdEQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ2xELE9BQU8sRUFBRSxRQUFRLEVBQUUsVUFBVSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDeEQsT0FBTyxFQUNMLE9BQU8sSUFBSSxXQUFXLEVBQ3RCLE9BQU8sSUFBSSxXQUFXLEdBRXZCLE1BQU0saUJBQWlCLENBQUM7QUFDekIsT0FBTyxFQUFFLHdCQUF3QixFQUFFLHFCQUFxQixFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQzlFLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxzQkFBc0IsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUN6RSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFFakQ7O0dBRUc7QUFDSCxNQUFNLENBQUMsS0FBSyxVQUFVLFNBQVMsQ0FDN0IsS0FBYyxFQUNkLGFBQTBCLEVBQzFCLE9BQXNCO0lBRXRCLElBQUksQ0FBQztRQUNILE1BQU0sT0FBTyxHQUFHLFlBQVksQ0FBQyxTQUFTLENBQUMsS0FBSyxFQUFFLFFBQVEsRUFBRSxPQUFPLENBQUMsQ0FBQztRQUNqRSxNQUFNLFFBQVEsR0FBRyxzQkFBc0IsQ0FDckMsbUJBQW1CLENBQUMsVUFBVSxFQUM5QixPQUFPLENBQ00sQ0FBQztRQUNoQixvRUFBb0U7UUFDcEUsTUFBTSxVQUFVLEdBQUcsTUFBTSxRQUFRLENBQy9CLFFBQVEsRUFDUixPQUFPLEVBQUUsV0FBVyxLQUFLLElBQUksRUFDN0IsT0FBTyxFQUFFLGdCQUFnQixDQUMxQixDQUFDO1FBQ0YsT0FBTyxXQUFXLENBQUMsVUFBVSxFQUFFLGFBQWEsQ0FBQyxDQUFDO0lBQ2hELENBQUM7SUFBQyxPQUFPLEtBQUssRUFBRSxDQUFDO1FBQ2YscUJBQXFCLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDN0IsTUFBTSxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsR0FBRyx3QkFBd0IsQ0FBQyxjQUFjLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDMUUsTUFBTSxJQUFJLGtCQUFrQixDQUFDLE9BQU8sRUFBRSxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQztJQUNoRSxDQUFDO0FBQ0gsQ0FBQztBQUVEOztHQUVHO0FBQ0gsTUFBTSxDQUFDLEtBQUssVUFBVSxXQUFXLENBQy9CLElBQTBCLEVBQzFCLGFBQTBCLEVBQzFCLE9BQXNCO0lBRXRCLE1BQU0sU0FBUyxHQUFHLE1BQU0sVUFBVSxDQUNoQyxNQUFNLFdBQVcsQ0FBQyxJQUFJLEVBQUUsYUFBYSxDQUFDLEVBQ3RDLE9BQU8sRUFBRSxnQkFBZ0IsQ0FDMUIsQ0FBQztJQUVGLElBQUksQ0FBQyxDQUFDLFNBQVMsWUFBWSxVQUFVLENBQUMsRUFBRSxDQUFDO1FBQ3ZDLElBQUksWUFBWSxDQUFDLGlCQUFpQixFQUFFLENBQUM7WUFDbkMsT0FBTyxZQUFZLENBQUMsaUJBQWlCLENBQUMsU0FBUyxFQUFFLFFBQVEsRUFBRSxPQUFPLENBQUMsQ0FBQztRQUN0RSxDQUFDO1FBQ0QsTUFBTSxJQUFJLEtBQUssQ0FDYiwyREFBMkQsQ0FDNUQsQ0FBQztJQUNKLENBQUM7SUFFRCxNQUFNLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxHQUFHLGtCQUFrQixDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBRTFELElBQUksTUFBTSxLQUFLLG1CQUFtQixDQUFDLFVBQVUsRUFBRSxDQUFDO1FBQzlDLE9BQU8sWUFBWSxDQUFDLFdBQVcsQ0FBQyxPQUFPLEVBQUUsUUFBUSxFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBQzlELENBQUM7SUFFRCxNQUFNLElBQUksS0FBSyxDQUFDLHFDQUFxQyxNQUFNLEVBQUUsQ0FBQyxDQUFDO0FBQ2pFLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIENsaWVudCAoZXh0ZXJuYWwpIG1vZGUgc2VyaWFsaXphdGlvbi5cbiAqXG4gKiBVc2VkIHdoZW4gc3RhcnRpbmcgd29ya2Zsb3dzIGZyb20gdGhlIGNsaWVudCBzaWRlIChzZXJpYWxpemluZyB3b3JrZmxvd1xuICogYXJndW1lbnRzKSBhbmQgd2hlbiByZWNlaXZpbmcgd29ya2Zsb3cgcmV0dXJuIHZhbHVlcy4gU3VwcG9ydHMgZW5jcnlwdGlvbi5cbiAqL1xuXG5pbXBvcnQgeyBTZXJpYWxpemF0aW9uRXJyb3IgfSBmcm9tICdAd29ya2Zsb3cvZXJyb3JzJztcbmltcG9ydCB0eXBlIHsgQ29kZWNPcHRpb25zIH0gZnJvbSAnLi9jb2RlYy5qcyc7XG5pbXBvcnQgeyBkZXZhbHVlQ29kZWMgfSBmcm9tICcuL2NvZGVjLWRldmFsdWUuanMnO1xuaW1wb3J0IHsgY29tcHJlc3MsIGRlY29tcHJlc3MgfSBmcm9tICcuL2NvbXByZXNzaW9uLmpzJztcbmltcG9ydCB7XG4gIGRlY3J5cHQgYXMgZGVjcnlwdERhdGEsXG4gIGVuY3J5cHQgYXMgZW5jcnlwdERhdGEsXG4gIHR5cGUgUGF5bG9hZEtleSxcbn0gZnJvbSAnLi9lbmNyeXB0aW9uLmpzJztcbmltcG9ydCB7IGZvcm1hdFNlcmlhbGl6YXRpb25FcnJvciwgcmV0aHJvd0lmUnVudGltZUVycm9yIH0gZnJvbSAnLi9lcnJvcnMuanMnO1xuaW1wb3J0IHsgZGVjb2RlRm9ybWF0UHJlZml4LCBlbmNvZGVXaXRoRm9ybWF0UHJlZml4IH0gZnJvbSAnLi9mb3JtYXQuanMnO1xuaW1wb3J0IHsgU2VyaWFsaXphdGlvbkZvcm1hdCB9IGZyb20gJy4vdHlwZXMuanMnO1xuXG4vKipcbiAqIFNlcmlhbGl6ZSBhIHZhbHVlIGZyb20gdGhlIGNsaWVudCBlbnZpcm9ubWVudCAoZS5nLiB3b3JrZmxvdyBhcmd1bWVudHMpLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gc2VyaWFsaXplKFxuICB2YWx1ZTogdW5rbm93bixcbiAgZW5jcnlwdGlvbktleT86IFBheWxvYWRLZXksXG4gIG9wdGlvbnM/OiBDb2RlY09wdGlvbnNcbik6IFByb21pc2U8VWludDhBcnJheSB8IHVua25vd24+IHtcbiAgdHJ5IHtcbiAgICBjb25zdCBwYXlsb2FkID0gZGV2YWx1ZUNvZGVjLnNlcmlhbGl6ZSh2YWx1ZSwgJ2NsaWVudCcsIG9wdGlvbnMpO1xuICAgIGNvbnN0IHByZWZpeGVkID0gZW5jb2RlV2l0aEZvcm1hdFByZWZpeChcbiAgICAgIFNlcmlhbGl6YXRpb25Gb3JtYXQuREVWQUxVRV9WMSxcbiAgICAgIHBheWxvYWRcbiAgICApIGFzIFVpbnQ4QXJyYXk7XG4gICAgLy8gQ29tcHJlc3MgYmVmb3JlIGVuY3J5cHRpbmcsIHNpbmNlIGVuY3J5cHRlZCBieXRlcyBkb24ndCBjb21wcmVzcy5cbiAgICBjb25zdCBjb21wcmVzc2VkID0gYXdhaXQgY29tcHJlc3MoXG4gICAgICBwcmVmaXhlZCxcbiAgICAgIG9wdGlvbnM/LmNvbXByZXNzaW9uID09PSB0cnVlLFxuICAgICAgb3B0aW9ucz8uY29tcHJlc3Npb25TdGF0c1xuICAgICk7XG4gICAgcmV0dXJuIGVuY3J5cHREYXRhKGNvbXByZXNzZWQsIGVuY3J5cHRpb25LZXkpO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHJldGhyb3dJZlJ1bnRpbWVFcnJvcihlcnJvcik7XG4gICAgY29uc3QgeyBtZXNzYWdlLCBoaW50IH0gPSBmb3JtYXRTZXJpYWxpemF0aW9uRXJyb3IoJ2NsaWVudCB2YWx1ZScsIGVycm9yKTtcbiAgICB0aHJvdyBuZXcgU2VyaWFsaXphdGlvbkVycm9yKG1lc3NhZ2UsIHsgaGludCwgY2F1c2U6IGVycm9yIH0pO1xuICB9XG59XG5cbi8qKlxuICogRGVzZXJpYWxpemUgYSB2YWx1ZSBmb3IgdGhlIGNsaWVudCBlbnZpcm9ubWVudCAoZS5nLiB3b3JrZmxvdyByZXR1cm4gdmFsdWUpLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZGVzZXJpYWxpemUoXG4gIGRhdGE6IFVpbnQ4QXJyYXkgfCB1bmtub3duLFxuICBlbmNyeXB0aW9uS2V5PzogUGF5bG9hZEtleSxcbiAgb3B0aW9ucz86IENvZGVjT3B0aW9uc1xuKTogUHJvbWlzZTx1bmtub3duPiB7XG4gIGNvbnN0IGRlY3J5cHRlZCA9IGF3YWl0IGRlY29tcHJlc3MoXG4gICAgYXdhaXQgZGVjcnlwdERhdGEoZGF0YSwgZW5jcnlwdGlvbktleSksXG4gICAgb3B0aW9ucz8uY29tcHJlc3Npb25TdGF0c1xuICApO1xuXG4gIGlmICghKGRlY3J5cHRlZCBpbnN0YW5jZW9mIFVpbnQ4QXJyYXkpKSB7XG4gICAgaWYgKGRldmFsdWVDb2RlYy5kZXNlcmlhbGl6ZUxlZ2FjeSkge1xuICAgICAgcmV0dXJuIGRldmFsdWVDb2RlYy5kZXNlcmlhbGl6ZUxlZ2FjeShkZWNyeXB0ZWQsICdjbGllbnQnLCBvcHRpb25zKTtcbiAgICB9XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgJ0Nhbm5vdCBkZXNlcmlhbGl6ZSBub24tYmluYXJ5IGRhdGEgd2l0aG91dCBsZWdhY3kgc3VwcG9ydCdcbiAgICApO1xuICB9XG5cbiAgY29uc3QgeyBmb3JtYXQsIHBheWxvYWQgfSA9IGRlY29kZUZvcm1hdFByZWZpeChkZWNyeXB0ZWQpO1xuXG4gIGlmIChmb3JtYXQgPT09IFNlcmlhbGl6YXRpb25Gb3JtYXQuREVWQUxVRV9WMSkge1xuICAgIHJldHVybiBkZXZhbHVlQ29kZWMuZGVzZXJpYWxpemUocGF5bG9hZCwgJ2NsaWVudCcsIG9wdGlvbnMpO1xuICB9XG5cbiAgdGhyb3cgbmV3IEVycm9yKGBVbnN1cHBvcnRlZCBzZXJpYWxpemF0aW9uIGZvcm1hdDogJHtmb3JtYXR9YCk7XG59XG4iXX0=
@@ -0,0 +1,16 @@
1
+ /**
2
+ * VM-compatible devalue codec.
3
+ *
4
+ * Same as codec-devalue.ts but uses VM-compatible reducers/revivers
5
+ * (no Node.js Buffer, no node:util). Safe to bundle into the QuickJS VM.
6
+ */
7
+ import type { Codec } from './codec.js';
8
+ /**
9
+ * The workflow-mode reducer/reviver key sets, exported for the QuickJS
10
+ * host serde's exhaustiveness test (quickjs-serde.test.ts), which pins
11
+ * that the handle-space codec implements exactly these.
12
+ */
13
+ export declare function getWorkflowModeReducerKeys(): string[];
14
+ export declare function getWorkflowModeReviverKeys(): string[];
15
+ export declare const devalueVmCodec: Codec;
16
+ //# sourceMappingURL=codec-devalue-vm.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"codec-devalue-vm.d.ts","sourceRoot":"","sources":["../../src/serialization/codec-devalue-vm.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,KAAK,EAAE,KAAK,EAAqB,MAAM,YAAY,CAAC;AAyI3D;;;;GAIG;AACH,wBAAgB,0BAA0B,IAAI,MAAM,EAAE,CAErD;AACD,wBAAgB,0BAA0B,IAAI,MAAM,EAAE,CAErD;AAED,eAAO,MAAM,cAAc,EAAE,KAyB5B,CAAC"}
@@ -0,0 +1,148 @@
1
+ /**
2
+ * VM-compatible devalue codec.
3
+ *
4
+ * Same as codec-devalue.ts but uses VM-compatible reducers/revivers
5
+ * (no Node.js Buffer, no node:util). Safe to bundle into the QuickJS VM.
6
+ */
7
+ import { parse, stringify, unflatten } from 'devalue';
8
+ import { getClassReducers, getClassRevivers } from './reducers/class-vm.js';
9
+ import { getCommonReducers, getCommonRevivers } from './reducers/common-vm.js';
10
+ import { getStepFunctionReducer, getStepFunctionReviver, } from './reducers/step-function-vm.js';
11
+ import { SerializationFormat } from './types.js';
12
+ const encoder = new TextEncoder();
13
+ const decoder = new TextDecoder();
14
+ // ---- AbortController / AbortSignal (workflow VM context) ----
15
+ // Mirrors the node:vm engine's workflow-context abort reducers/revivers in
16
+ // serialization.ts: reduce by reading the stream/hook symbols stamped at
17
+ // controller construction; revive to the bootstrap's WorkflowAbortSignal
18
+ // class (looked up lazily on globalThis, since the serde bundle is
19
+ // evaluated before the bootstrap defines it).
20
+ const ABORT_STREAM_NAME = Symbol.for('WORKFLOW_ABORT_STREAM_NAME');
21
+ const ABORT_HOOK_TOKEN = Symbol.for('WORKFLOW_ABORT_HOOK_TOKEN');
22
+ function reduceAbortBySymbol(signal, holder) {
23
+ const streamName = holder[ABORT_STREAM_NAME] ?? holder.signal?.[ABORT_STREAM_NAME];
24
+ const hookToken = holder[ABORT_HOOK_TOKEN] ?? holder.signal?.[ABORT_HOOK_TOKEN];
25
+ if (!streamName) {
26
+ throw new Error('AbortController/AbortSignal stream name is not set');
27
+ }
28
+ return {
29
+ streamName,
30
+ hookToken,
31
+ aborted: signal.aborted,
32
+ reason: signal.aborted ? signal.reason : undefined,
33
+ };
34
+ }
35
+ function reviveAbortSignalVM(value) {
36
+ const Cls = globalThis.__WorkflowAbortSignal;
37
+ if (typeof Cls !== 'function') {
38
+ throw new Error('WorkflowAbortSignal is not registered in the VM (bootstrap not evaluated)');
39
+ }
40
+ const signal = new Cls(value.streamName, value.hookToken);
41
+ if (value.aborted)
42
+ signal._setAborted(value.reason);
43
+ return signal;
44
+ }
45
+ function getAbortReducersVM() {
46
+ return {
47
+ AbortController: (value) => {
48
+ if (!value || typeof value !== 'object' || !value.signal)
49
+ return false;
50
+ const hasAbortSymbol = value[ABORT_STREAM_NAME] ?? value.signal?.[ABORT_STREAM_NAME];
51
+ if (hasAbortSymbol === undefined)
52
+ return false;
53
+ return reduceAbortBySymbol(value.signal, value);
54
+ },
55
+ AbortSignal: (value) => {
56
+ if (!value || typeof value !== 'object')
57
+ return false;
58
+ if (value[ABORT_STREAM_NAME] === undefined)
59
+ return false;
60
+ return reduceAbortBySymbol(value, value);
61
+ },
62
+ };
63
+ }
64
+ function getAbortReviversVM() {
65
+ return {
66
+ AbortController: (value) => ({
67
+ [ABORT_STREAM_NAME]: value.streamName,
68
+ [ABORT_HOOK_TOKEN]: value.hookToken,
69
+ signal: reviveAbortSignalVM(value),
70
+ abort: () => { },
71
+ }),
72
+ AbortSignal: (value) => reviveAbortSignalVM(value),
73
+ };
74
+ }
75
+ function getReducersForMode(mode) {
76
+ switch (mode) {
77
+ case 'workflow':
78
+ return {
79
+ ...getAbortReducersVM(),
80
+ ...getClassReducers(),
81
+ ...getStepFunctionReducer(),
82
+ ...getCommonReducers(),
83
+ };
84
+ case 'step':
85
+ return {
86
+ ...getClassReducers(),
87
+ ...getCommonReducers(),
88
+ };
89
+ case 'client':
90
+ return {
91
+ ...getClassReducers(),
92
+ ...getCommonReducers(),
93
+ };
94
+ }
95
+ }
96
+ function getReviversForMode(mode) {
97
+ switch (mode) {
98
+ case 'workflow':
99
+ return {
100
+ ...getAbortReviversVM(),
101
+ ...getClassRevivers(),
102
+ ...getStepFunctionReviver(),
103
+ ...getCommonRevivers(),
104
+ };
105
+ case 'step':
106
+ return {
107
+ ...getClassRevivers(),
108
+ ...getCommonRevivers(),
109
+ };
110
+ case 'client':
111
+ return {
112
+ ...getClassRevivers(),
113
+ ...getCommonRevivers(),
114
+ StepFunction: () => {
115
+ throw new Error('Step functions cannot be deserialized in client context.');
116
+ },
117
+ };
118
+ }
119
+ }
120
+ /**
121
+ * The workflow-mode reducer/reviver key sets, exported for the QuickJS
122
+ * host serde's exhaustiveness test (quickjs-serde.test.ts), which pins
123
+ * that the handle-space codec implements exactly these.
124
+ */
125
+ export function getWorkflowModeReducerKeys() {
126
+ return Object.keys(getReducersForMode('workflow'));
127
+ }
128
+ export function getWorkflowModeReviverKeys() {
129
+ return Object.keys(getReviversForMode('workflow'));
130
+ }
131
+ export const devalueVmCodec = {
132
+ formatPrefix: SerializationFormat.DEVALUE_V1,
133
+ serialize(value, mode) {
134
+ const reducers = getReducersForMode(mode);
135
+ const str = stringify(value, reducers);
136
+ return encoder.encode(str);
137
+ },
138
+ deserialize(data, mode) {
139
+ const revivers = getReviversForMode(mode);
140
+ const str = decoder.decode(data);
141
+ return parse(str, revivers);
142
+ },
143
+ deserializeLegacy(data, mode) {
144
+ const revivers = getReviversForMode(mode);
145
+ return unflatten(data, revivers);
146
+ },
147
+ };
148
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29kZWMtZGV2YWx1ZS12bS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zZXJpYWxpemF0aW9uL2NvZGVjLWRldmFsdWUtdm0udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7O0dBS0c7QUFFSCxPQUFPLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsTUFBTSxTQUFTLENBQUM7QUFFdEQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLGdCQUFnQixFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDNUUsT0FBTyxFQUFFLGlCQUFpQixFQUFFLGlCQUFpQixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDL0UsT0FBTyxFQUNMLHNCQUFzQixFQUN0QixzQkFBc0IsR0FDdkIsTUFBTSxnQ0FBZ0MsQ0FBQztBQUN4QyxPQUFPLEVBQWdDLG1CQUFtQixFQUFFLE1BQU0sWUFBWSxDQUFDO0FBRS9FLE1BQU0sT0FBTyxHQUFHLElBQUksV0FBVyxFQUFFLENBQUM7QUFDbEMsTUFBTSxPQUFPLEdBQUcsSUFBSSxXQUFXLEVBQUUsQ0FBQztBQUVsQyxnRUFBZ0U7QUFDaEUsMkVBQTJFO0FBQzNFLHlFQUF5RTtBQUN6RSx5RUFBeUU7QUFDekUsbUVBQW1FO0FBQ25FLDhDQUE4QztBQUM5QyxNQUFNLGlCQUFpQixHQUFHLE1BQU0sQ0FBQyxHQUFHLENBQUMsNEJBQTRCLENBQUMsQ0FBQztBQUNuRSxNQUFNLGdCQUFnQixHQUFHLE1BQU0sQ0FBQyxHQUFHLENBQUMsMkJBQTJCLENBQUMsQ0FBQztBQVNqRSxTQUFTLG1CQUFtQixDQUMxQixNQUE4QyxFQUM5QyxNQUFXO0lBRVgsTUFBTSxVQUFVLEdBQ2QsTUFBTSxDQUFDLGlCQUFpQixDQUFDLElBQUksTUFBTSxDQUFDLE1BQU0sRUFBRSxDQUFDLGlCQUFpQixDQUFDLENBQUM7SUFDbEUsTUFBTSxTQUFTLEdBQ2IsTUFBTSxDQUFDLGdCQUFnQixDQUFDLElBQUksTUFBTSxDQUFDLE1B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QU0sUUFBUSxHQUFHLGtCQUFrQixDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzFDLE1BQU0sR0FBRyxHQUFHLFNBQVMsQ0FDbkIsS0FBSyxFQUNMLFFBQStDLENBQ2hELENBQUM7UUFDRixPQUFPLE9BQU8sQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDN0IsQ0FBQztJQUVELFdBQVcsQ0FBQyxJQUFnQixFQUFFLElBQXVCO1FBQ25ELE1BQU0sUUFBUSxHQUFHLGtCQUFrQixDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzFDLE1BQU0sR0FBRyxHQUFHLE9BQU8sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDakMsT0FBTyxLQUFLLENBQUMsR0FBRyxFQUFFLFFBQStDLENBQUMsQ0FBQztJQUNyRSxDQUFDO0lBRUQsaUJBQWlCLENBQUMsSUFBYSxFQUFFLElBQXVCO1FBQ3RELE1BQU0sUUFBUSxHQUFHLGtCQUFrQixDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzFDLE9BQU8sU0FBUyxDQUNkLElBQWEsRUFDYixRQUErQyxDQUNoRCxDQUFDO0lBQ0osQ0FBQztDQUNGLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFZNLWNvbXBhdGlibGUgZGV2YWx1ZSBjb2RlYy5cbiAqXG4gKiBTYW1lIGFzIGNvZGVjLWRldmFsdWUudHMgYnV0IHVzZXMgVk0tY29tcGF0aWJsZSByZWR1Y2Vycy9yZXZpdmVyc1xuICogKG5vIE5vZGUuanMgQnVmZmVyLCBubyBub2RlOnV0aWwpLiBTYWZlIHRvIGJ1bmRsZSBpbnRvIHRoZSBRdWlja0pTIFZNLlxuICovXG5cbmltcG9ydCB7IHBhcnNlLCBzdHJpbmdpZnksIHVuZmxhdHRlbiB9IGZyb20gJ2RldmFsdWUnO1xuaW1wb3J0IHR5cGUgeyBDb2RlYywgU2VyaWFsaXphdGlvbk1vZGUgfSBmcm9tICcuL2NvZGVjLmpzJztcbmltcG9ydCB7IGdldENsYXNzUmVkdWNlcnMsIGdldENsYXNzUmV2aXZlcnMgfSBmcm9tICcuL3JlZHVjZXJzL2NsYXNzLXZtLmpzJztcbmltcG9ydCB7IGdldENvbW1vblJlZHVjZXJzLCBnZXRDb21tb25SZXZpdmVycyB9IGZyb20gJy4vcmVkdWNlcnMvY29tbW9uLXZtLmpzJztcbmltcG9ydCB7XG4gIGdldFN0ZXBGdW5jdGlvblJlZHVjZXIsXG4gIGdldFN0ZXBGdW5jdGlvblJldml2ZXIsXG59IGZyb20gJy4vcmVkdWNlcnMvc3RlcC1mdW5jdGlvbi12bS5qcyc7XG5pbXBvcnQgeyB0eXBlIFJlZHVjZXJzLCB0eXBlIFJldml2ZXJzLCBTZXJpYWxpemF0aW9uRm9ybWF0IH0gZnJvbSAnLi90eXBlcy5qcyc7XG5cbmNvbnN0IGVuY29kZXIgPSBuZXcgVGV4dEVuY29kZXIoKTtcbmNvbnN0IGRlY29kZXIgPSBuZXcgVGV4dERlY29kZXIoKTtcblxuLy8gLS0tLSBBYm9ydENvbnRyb2xsZXIgLyBBYm9ydFNpZ25hbCAod29ya2Zsb3cgVk0gY29udGV4dCkgLS0tLVxuLy8gTWlycm9ycyB0aGUgbm9kZTp2bSBlbmdpbmUncyB3b3JrZmxvdy1jb250ZXh0IGFib3J0IHJlZHVjZXJzL3Jldml2ZXJzIGluXG4vLyBzZXJpYWxpemF0aW9uLnRzOiByZWR1Y2UgYnkgcmVhZGluZyB0aGUgc3RyZWFtL2hvb2sgc3ltYm9scyBzdGFtcGVkIGF0XG4vLyBjb250cm9sbGVyIGNvbnN0cnVjdGlvbjsgcmV2aXZlIHRvIHRoZSBib290c3RyYXAncyBXb3JrZmxvd0Fib3J0U2lnbmFsXG4vLyBjbGFzcyAobG9va2VkIHVwIGxhemlseSBvbiBnbG9iYWxUaGlzLCBzaW5jZSB0aGUgc2VyZGUgYnVuZGxlIGlzXG4vLyBldmFsdWF0ZWQgYmVmb3JlIHRoZSBib290c3RyYXAgZGVmaW5lcyBpdCkuXG5jb25zdCBBQk9SVF9TVFJFQU1fTkFNRSA9IFN5bWJvbC5mb3IoJ1dPUktGTE9XX0FCT1JUX1NUUkVBTV9OQU1FJyk7XG5jb25zdCBBQk9SVF9IT09LX1RPS0VOID0gU3ltYm9sLmZvcignV09SS0ZMT1dfQUJPUlRfSE9PS19UT0tFTicpO1xuXG50eXBlIEFib3J0U2VyaWFsaXplZCA9IHtcbiAgc3RyZWFtTmFtZTogc3RyaW5nO1xuICBob29rVG9rZW46IHN0cmluZztcbiAgYWJvcnRlZDogYm9vbGVhbjtcbiAgcmVhc29uPzogdW5rbm93bjtcbn07XG5cbmZ1bmN0aW9uIHJlZHVjZUFib3J0QnlTeW1ib2woXG4gIHNpZ25hbDogeyBhYm9ydGVkOiBib29sZWFuOyByZWFzb24/OiB1bmtub3duIH0sXG4gIGhvbGRlcjogYW55XG4pOiBBYm9ydFNlcmlhbGl6ZWQge1xuICBjb25zdCBzdHJlYW1OYW1lID1cbiAgICBob2xkZXJbQUJPUlRfU1RSRUFNX05BTUVdID8/IGhvbGRlci5zaWduYWw/LltBQk9SVF9TVFJFQU1fTkFNRV07XG4gIGNvbnN0IGhvb2tUb2tlbiA9XG4gICAgaG9sZGVyW0FCT1JUX0hPT0tfVE9LRU5dID8/IGhvbGRlci5zaWduYWw/LltBQk9SVF9IT09LX1RPS0VOXTtcbiAgaWYgKCFzdHJlYW1OYW1lKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdBYm9ydENvbnRyb2xsZXIvQWJvcnRTaWduYWwgc3RyZWFtIG5hbWUgaXMgbm90IHNldCcpO1xuICB9XG4gIHJldHVybiB7XG4gICAgc3RyZWFtTmFtZSxcbiAgICBob29rVG9rZW4sXG4gICAgYWJvcnRlZDogc2lnbmFsLmFib3J0ZWQsXG4gICAgcmVhc29uOiBzaWduYWwuYWJvcnRlZCA/IHNpZ25hbC5yZWFzb24gOiB1bmRlZmluZWQsXG4gIH07XG59XG5cbmZ1bmN0aW9uIHJldml2ZUFib3J0U2lnbmFsVk0odmFsdWU6IEFib3J0U2VyaWFsaXplZCkge1xuICBjb25zdCBDbHMgPSAoZ2xvYmFsVGhpcyBhcyBhbnkpLl9fV29ya2Zsb3dBYm9ydFNpZ25hbDtcbiAgaWYgKHR5cGVvZiBDbHMgIT09ICdmdW5jdGlvbicpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAnV29ya2Zsb3dBYm9ydFNpZ25hbCBpcyBub3QgcmVnaXN0ZXJlZCBpbiB0aGUgVk0gKGJvb3RzdHJhcCBub3QgZXZhbHVhdGVkKSdcbiAgICApO1xuICB9XG4gIGNvbnN0IHNpZ25hbCA9IG5ldyBDbHModmFsdWUuc3RyZWFtTmFtZSwgdmFsdWUuaG9va1Rva2VuKTtcbiAgaWYgKHZhbHVlLmFib3J0ZWQpIHNpZ25hbC5fc2V0QWJvcnRlZCh2YWx1ZS5yZWFzb24pO1xuICByZXR1cm4gc2lnbmFsO1xufVxuXG5mdW5jdGlvbiBnZXRBYm9ydFJlZHVjZXJzVk0oKTogUGFydGlhbDxSZWR1Y2Vycz4ge1xuICByZXR1cm4ge1xuICAgIEFib3J0Q29udHJvbGxlcjogKHZhbHVlKSA9PiB7XG4gICAgICBpZiAoIXZhbHVlIHx8IHR5cGVvZiB2YWx1ZSAhPT0gJ29iamVjdCcgfHwgIXZhbHVlLnNpZ25hbCkgcmV0dXJuIGZhbHNlO1xuICAgICAgY29uc3QgaGFzQWJvcnRTeW1ib2wgPVxuICAgICAgICB2YWx1ZVtBQk9SVF9TVFJFQU1fTkFNRV0gPz8gdmFsdWUuc2lnbmFsPy5bQUJPUlRfU1RSRUFNX05BTUVdO1xuICAgICAgaWYgKGhhc0Fib3J0U3ltYm9sID09PSB1bmRlZmluZWQpIHJldHVybiBmYWxzZTtcbiAgICAgIHJldHVybiByZWR1Y2VBYm9ydEJ5U3ltYm9sKHZhbHVlLnNpZ25hbCwgdmFsdWUpO1xuICAgIH0sXG4gICAgQWJvcnRTaWduYWw6ICh2YWx1ZSkgPT4ge1xuICAgICAgaWYgKCF2YWx1ZSB8fCB0eXBlb2YgdmFsdWUgIT09ICdvYmplY3QnKSByZXR1cm4gZmFsc2U7XG4gICAgICBpZiAoKHZhbHVlIGFzIGFueSlbQUJPUlRfU1RSRUFNX05BTUVdID09PSB1bmRlZmluZWQpIHJldHVybiBmYWxzZTtcbiAgICAgIHJldHVybiByZWR1Y2VBYm9ydEJ5U3ltYm9sKHZhbHVlIGFzIGFueSwgdmFsdWUpO1xuICAgIH0sXG4gIH07XG59XG5cbmZ1bmN0aW9uIGdldEFib3J0UmV2aXZlcnNWTSgpOiBQYXJ0aWFsPFJldml2ZXJzPiB7XG4gIHJldHVybiB7XG4gICAgQWJvcnRDb250cm9sbGVyOiAodmFsdWU6IEFib3J0U2VyaWFsaXplZCkgPT4gKHtcbiAgICAgIFtBQk9SVF9TVFJFQU1fTkFNRV06IHZhbHVlLnN0cmVhbU5hbWUsXG4gICAgICBbQUJPUlRfSE9PS19UT0tFTl06IHZhbHVlLmhvb2tUb2tlbixcbiAgICAgIHNpZ25hbDogcmV2aXZlQWJvcnRTaWduYWxWTSh2YWx1ZSksXG4gICAgICBhYm9ydDogKCkgPT4ge30sXG4gICAgfSksXG4gICAgQWJvcnRTaWduYWw6ICh2YWx1ZTogQWJvcnRTZXJpYWxpemVkKSA9PiByZXZpdmVBYm9ydFNpZ25hbFZNKHZhbHVlKSxcbiAgfTtcbn1cblxuZnVuY3Rpb24gZ2V0UmVkdWNlcnNGb3JNb2RlKG1vZGU6IFNlcmlhbGl6YXRpb25Nb2RlKTogUGFydGlhbDxSZWR1Y2Vycz4ge1xuICBzd2l0Y2ggKG1vZGUpIHtcbiAgICBjYXNlICd3b3JrZmxvdyc6XG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5nZXRBYm9ydFJlZHVjZXJzVk0oKSxcbiAgICAgICAgLi4uZ2V0Q2xhc3NSZWR1Y2VycygpLFxuICAgICAgICAuLi5nZXRTdGVwRnVuY3Rpb25SZWR1Y2VyKCksXG4gICAgICAgIC4uLmdldENvbW1vblJlZHVjZXJzKCksXG4gICAgICB9O1xuICAgIGNhc2UgJ3N0ZXAnOlxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4uZ2V0Q2xhc3NSZWR1Y2VycygpLFxuICAgICAgICAuLi5nZXRDb21tb25SZWR1Y2VycygpLFxuICAgICAgfTtcbiAgICBjYXNlICdjbGllbnQnOlxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4uZ2V0Q2xhc3NSZWR1Y2VycygpLFxuICAgICAgICAuLi5nZXRDb21tb25SZWR1Y2VycygpLFxuICAgICAgfTtcbiAgfVxufVxuXG5mdW5jdGlvbiBnZXRSZXZpdmVyc0Zvck1vZGUobW9kZTogU2VyaWFsaXphdGlvbk1vZGUpOiBQYXJ0aWFsPFJldml2ZXJzPiB7XG4gIHN3aXRjaCAobW9kZSkge1xuICAgIGNhc2UgJ3dvcmtmbG93JzpcbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLmdldEFib3J0UmV2aXZlcnNWTSgpLFxuICAgICAgICAuLi5nZXRDbGFzc1Jldml2ZXJzKCksXG4gICAgICAgIC4uLmdldFN0ZXBGdW5jdGlvblJldml2ZXIoKSxcbiAgICAgICAgLi4uZ2V0Q29tbW9uUmV2aXZlcnMoKSxcbiAgICAgIH07XG4gICAgY2FzZSAnc3RlcCc6XG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5nZXRDbGFzc1Jldml2ZXJzKCksXG4gICAgICAgIC4uLmdldENvbW1vblJldml2ZXJzKCksXG4gICAgICB9O1xuICAgIGNhc2UgJ2NsaWVudCc6XG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5nZXRDbGFzc1Jldml2ZXJzKCksXG4gICAgICAgIC4uLmdldENvbW1vblJldml2ZXJzKCksXG4gICAgICAgIFN0ZXBGdW5jdGlvbjogKCkgPT4ge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAgICdTdGVwIGZ1bmN0aW9ucyBjYW5ub3QgYmUgZGVzZXJpYWxpemVkIGluIGNsaWVudCBjb250ZXh0LidcbiAgICAgICAgICApO1xuICAgICAgICB9LFxuICAgICAgfTtcbiAgfVxufVxuXG4vKipcbiAqIFRoZSB3b3JrZmxvdy1tb2RlIHJlZHVjZXIvcmV2aXZlciBrZXkgc2V0cywgZXhwb3J0ZWQgZm9yIHRoZSBRdWlja0pTXG4gKiBob3N0IHNlcmRlJ3MgZXhoYXVzdGl2ZW5lc3MgdGVzdCAocXVpY2tqcy1zZXJkZS50ZXN0LnRzKSwgd2hpY2ggcGluc1xuICogdGhhdCB0aGUgaGFuZGxlLXNwYWNlIGNvZGVjIGltcGxlbWVudHMgZXhhY3RseSB0aGVzZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFdvcmtmbG93TW9kZVJlZHVjZXJLZXlzKCk6IHN0cmluZ1tdIHtcbiAgcmV0dXJuIE9iamVjdC5rZXlzKGdldFJlZHVjZXJzRm9yTW9kZSgnd29ya2Zsb3cnKSk7XG59XG5leHBvcnQgZnVuY3Rpb24gZ2V0V29ya2Zsb3dNb2RlUmV2aXZlcktleXMoKTogc3RyaW5nW10ge1xuICByZXR1cm4gT2JqZWN0LmtleXMoZ2V0UmV2aXZlcnNGb3JNb2RlKCd3b3JrZmxvdycpKTtcbn1cblxuZXhwb3J0IGNvbnN0IGRldmFsdWVWbUNvZGVjOiBDb2RlYyA9IHtcbiAgZm9ybWF0UHJlZml4OiBTZXJpYWxpemF0aW9uRm9ybWF0LkRFVkFMVUVfVjEsXG5cbiAgc2VyaWFsaXplKHZhbHVlOiB1bmtub3duLCBtb2RlOiBTZXJpYWxpemF0aW9uTW9kZSk6IFVpbnQ4QXJyYXkge1xuICAgIGNvbnN0IHJlZHVjZXJzID0gZ2V0UmVkdWNlcnNGb3JNb2RlKG1vZGUpO1xuICAgIGNvbnN0IHN0ciA9IHN0cmluZ2lmeShcbiAgICAgIHZhbHVlLFxuICAgICAgcmVkdWNlcnMgYXMgUmVjb3JkPHN0cmluZywgKHZhbHVlOiBhbnkpID0+IGFueT5cbiAgICApO1xuICAgIHJldHVybiBlbmNvZGVyLmVuY29kZShzdHIpO1xuICB9LFxuXG4gIGRlc2VyaWFsaXplKGRhdGE6IFVpbnQ4QXJyYXksIG1vZGU6IFNlcmlhbGl6YXRpb25Nb2RlKTogdW5rbm93biB7XG4gICAgY29uc3QgcmV2aXZlcnMgPSBnZXRSZXZpdmVyc0Zvck1vZGUobW9kZSk7XG4gICAgY29uc3Qgc3RyID0gZGVjb2Rlci5kZWNvZGUoZGF0YSk7XG4gICAgcmV0dXJuIHBhcnNlKHN0ciwgcmV2aXZlcnMgYXMgUmVjb3JkPHN0cmluZywgKHZhbHVlOiBhbnkpID0+IGFueT4pO1xuICB9LFxuXG4gIGRlc2VyaWFsaXplTGVnYWN5KGRhdGE6IHVua25vd24sIG1vZGU6IFNlcmlhbGl6YXRpb25Nb2RlKTogdW5rbm93biB7XG4gICAgY29uc3QgcmV2aXZlcnMgPSBnZXRSZXZpdmVyc0Zvck1vZGUobW9kZSk7XG4gICAgcmV0dXJuIHVuZmxhdHRlbihcbiAgICAgIGRhdGEgYXMgYW55W10sXG4gICAgICByZXZpdmVycyBhcyBSZWNvcmQ8c3RyaW5nLCAodmFsdWU6IGFueSkgPT4gYW55PlxuICAgICk7XG4gIH0sXG59O1xuIl19
@@ -5,7 +5,7 @@
5
5
  * reducers (serialize) and revivers (deserialize) which are composed
6
6
  * internally based on the serialization mode.
7
7
  *
8
- * The reducer/reviver pattern is specific to devalue other codecs
8
+ * The reducer/reviver pattern is specific to devalue: other codecs
9
9
  * (CBOR, JSON) would handle types differently (e.g. CBOR supports Date,
10
10
  * typed arrays, Map, Set natively).
11
11
  */
@@ -1 +1 @@
1
- {"version":3,"file":"codec-devalue.d.ts","sourceRoot":"","sources":["../../src/serialization/codec-devalue.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAGH,OAAO,KAAK,EAAE,KAAK,EAAmC,MAAM,YAAY,CAAC;AAwFzE,eAAO,MAAM,YAAY,EAAE,KA2C1B,CAAC"}
1
+ {"version":3,"file":"codec-devalue.d.ts","sourceRoot":"","sources":["../../src/serialization/codec-devalue.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AASH,OAAO,KAAK,EAAE,KAAK,EAAmC,MAAM,YAAY,CAAC;AAuGzE,eAAO,MAAM,YAAY,EAAE,KAmD1B,CAAC"}
@@ -5,17 +5,29 @@
5
5
  * reducers (serialize) and revivers (deserialize) which are composed
6
6
  * internally based on the serialization mode.
7
7
  *
8
- * The reducer/reviver pattern is specific to devalue other codecs
8
+ * The reducer/reviver pattern is specific to devalue: other codecs
9
9
  * (CBOR, JSON) would handle types differently (e.g. CBOR supports Date,
10
10
  * typed arrays, Map, Set natively).
11
11
  */
12
- import { parse, stringify, unflatten } from 'devalue';
12
+ import { defaultParseOperations, parse, stringify, unflatten, } from 'devalue';
13
+ import { hardenedStringifyOperations, withGuestCodeStats } from './hardened.js';
13
14
  import { getClassReducers, getClassRevivers } from './reducers/class.js';
14
15
  import { getCommonReducers, getCommonRevivers } from './reducers/common.js';
15
16
  import { getStepFunctionReducer, getStepFunctionReviver, } from './reducers/step-function.js';
16
17
  import { SerializationFormat } from './types.js';
17
18
  const encoder = new TextEncoder();
18
19
  const decoder = new TextDecoder();
20
+ const MAX_SPARSE_ARRAY_LENGTH = 100_000;
21
+ const parseOptions = {
22
+ operations: {
23
+ createSparseArray(length) {
24
+ if (length > MAX_SPARSE_ARRAY_LENGTH) {
25
+ throw new RangeError(`Sparse array length ${length} exceeds the maximum of ${MAX_SPARSE_ARRAY_LENGTH}`);
26
+ }
27
+ return defaultParseOperations.createSparseArray(length);
28
+ },
29
+ },
30
+ };
19
31
  // ---- Reducer/Reviver composition per mode ----
20
32
  function getReducersForMode(mode, global = globalThis, extraReducers) {
21
33
  let base;
@@ -82,17 +94,23 @@ export const devalueCodec = {
82
94
  formatPrefix: SerializationFormat.DEVALUE_V1,
83
95
  serialize(value, mode, options) {
84
96
  const reducers = getReducersForMode(mode, options?.global, options?.extraReducers);
85
- const str = stringify(value, reducers);
97
+ // Hardened operations: devalue's own introspection (classification,
98
+ // built-in extraction, property reads) goes through captured host
99
+ // intrinsics and descriptor reads, so serializing a value constructed
100
+ // inside a workflow VM cannot execute sandbox code behind our back.
101
+ // Where workflow code must run (getters, proxies, custom serializers),
102
+ // the execution is recorded into `options.guestCodeStats`.
103
+ const str = withGuestCodeStats(options?.guestCodeStats, () => stringify(value, reducers, { operations: hardenedStringifyOperations }));
86
104
  return encoder.encode(str);
87
105
  },
88
106
  deserialize(data, mode, options) {
89
107
  const revivers = getReviversForMode(mode, options?.global, options?.extraRevivers);
90
108
  const str = decoder.decode(data);
91
- return parse(str, revivers);
109
+ return parse(str, revivers, parseOptions);
92
110
  },
93
111
  deserializeLegacy(data, mode, options) {
94
112
  const revivers = getReviversForMode(mode, options?.global, options?.extraRevivers);
95
- return unflatten(data, revivers);
113
+ return unflatten(data, revivers, parseOptions);
96
114
  },
97
115
  };
98
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29kZWMtZGV2YWx1ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zZXJpYWxpemF0aW9uL2NvZGVjLWRldmFsdWUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7R0FVRztBQUVILE9BQU8sRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxNQUFNLFNBQVMsQ0FBQztBQUV0RCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUN6RSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUM1RSxPQUFPLEVBQ0wsc0JBQXNCLEVBQ3RCLHNCQUFzQixHQUN2QixNQUFNLDZCQUE2QixDQUFDO0FBQ3JDLE9BQU8sRUFBZ0MsbUJBQW1CLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFFL0UsTUFBTSxPQUFPLEdBQUcsSUFBSSxXQUFXLEVBQUUsQ0FBQztBQUNsQyxNQUFNLE9BQU8sR0FBRyxJQUFJLFdBQVcsRUFBRSxDQUFDO0FBRWxDLGlEQUFpRDtBQUVqRCxTQUFTLGtCQUFrQixDQUN6QixJQUF1QixFQUN2QixTQUE4QixVQUFVLEVBQ3hDLGFBQW1EO0lBRW5ELElBQUksSUFBdUIsQ0FBQztJQUM1QixRQUFRLElBQUksRUFBRSxDQUFDO1FBQ2IsS0FBSyxVQUFVO1lBQ2IsaUZBQWlGO1lBQ2pGLElBQUksR0FBRztnQkFDTCxHQUFHLGdCQUFnQixFQUFFO2dCQUNyQixHQUFHLHNCQUFzQixFQUFFO2dCQUMzQixHQUFHLGlCQUFpQixDQUFDLE1BQU0sQ0FBQzthQUM3QixDQUFDO1lBQ0YsTUFBTTtRQUNSLEtBQUssTUFBTTtZQUNULElBQUksR0FBRztnQkFDTCxHQUFHLGdCQUFnQixFQUFFO2dCQUNyQixHQUFHLGlCQUFpQixDQUFDLE1BQU0sQ0FBQzthQUM3QixDQUFDO1lBQ0YsTUFBTTtRQUNSLEtBQUssUUFBUTtZQUNYLElBQUksR0FBRztnQkFDTCxHQUFHLGdCQUFnQixFQUFFO2dCQUNyQixHQUFHLGlCQUFpQixDQUFDLE1BQU0sQ0FBQzthQUM3QixDQUFDO1lBQ0YsTUFBTTtJQUNWLENBQUM7SUFDRCxJQUFJLGFBQWEsRUFBRSxDQUFDO1FBQ2xCLE9BQU8sRUFBRSxHQUFHLElBQUksRUFBRSxHQUFHLGFBQWEsRUFBeUMsQ0FBQztJQUM5RSxDQUFDO0lBQ0QsT0FBTyxJQUEyQyxDQUFDO0FBQ3JELENBQUM7QUFFRCxTQUFTLGtCQUFrQixDQUN6QixJQUF1QixFQUN2QixTQUE4QixVQUFVLEVBQ3hDLGFBQW1EO0lBRW5ELElBQUksSUFBdUIsQ0FBQztJQUM1QixRQUFRLElBQUksRUFBRSxDQUFDO1FBQ2IsS0FBSyxVQUFVO1lBQ2IsSUFBSSxHQUFHO2dCQUNMLEdBQUcsZ0JBQWdCLENBQUMsTUFBTSxDQUFDO2dCQUMzQixHQUFHLHNCQUFzQixDQUFDLE1BQU0sQ0FBQztnQkFDakMsR0FBRyxpQkFBaUIsQ0FBQyxNQUFNLENBQUM7YUFDN0IsQ0FBQztZQUNGLE1BQU07UUFDUixLQUFLLE1BQU07WUFDVCxJQUFJLEdBQUc7Z0JBQ0wsR0FBRyxnQkFBZ0IsQ0FBQyxNQUFNLENBQUM7Z0JBQzNCLEdBQUcsaUJBQWlCLENBQUMsTUFBTSxDQUFDO2FBQzdCLENBQUM7WUFDRixNQUFNO1FBQ1IsS0FBSyxRQUFRO1lBQ1gsSUFBSSxHQUFHO2dCQUNMLEdBQUcsZ0JBQWdCLENBQUMsTUFBTSxDQUFDO2dCQUMzQixHQUFHLGlCQUFpQixDQUFDLE1BQU0sQ0FBQztnQkFDNUIsWUFBWSxFQUFFLEdBQUcsRUFBRTtvQkFDakIsTUFBTSxJQUFJLEtBQUssQ0FDYiwwREFBMEQsQ0FDM0QsQ0FBQztnQkFDSixDQUFDO2FBQ0YsQ0FBQztZQUNGLE1BQU07SUFDVixDQUFDO0lBQ0QsSUFBSSxhQUFhLEVBQUUsQ0FBQztRQUNsQixPQUFPLEVBQUUsR0FBRyxJQUFJLEVBQUUsR0FBRyxhQUFhLEVBQXlDLENBQUM7SUFDOUUsQ0FBQztJQUNELE9BQU8sSUFBMkMsQ0FBQztBQUNyRCxDQUFDO0FBRUQsaUNBQWlDO0FBRWpDLE1BQU0sQ0FBQyxNQUFNLFlBQVksR0FBVTtJQUNqQyxZQUFZLEVBQUUsbUJBQW1CLENBQUMsVUFBVTtJQUU1QyxTQUFTLENBQ1AsS0FBYyxFQUNkLElBQXVCLEVBQ3ZCLE9BQXNCO1FBRXRCLE1BQU0sUUFBUSxHQUFHLGtCQUFrQixDQUNqQyxJQUFJLEVBQ0osT0FBTyxFQUFFLE1BQU0sRUFDZixPQUFPLEVBQUUsYUFBYSxDQUN2QixDQUFDO1FBQ0YsTUFBTSxHQUFHLEdBQUcsU0FBUyxDQUFDLEtBQUssRUFBRSxRQUFRLENBQUMsQ0FBQztRQUN2QyxPQUFPLE9BQU8sQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDN0IsQ0FBQztJQUVELFdBQVcsQ0FDVCxJQUFnQixFQUNoQixJQUF1QixFQUN2QixPQUFzQjtRQUV0QixNQUFNLFFBQVEsR0FBRyxrQkFBa0IsQ0FDakMsSUFBSSxFQUNKLE9BQU8sRUFBRSxNQUFNLEVBQ2YsT0FBTyxFQUFFLGFBQWEsQ0FDdkIsQ0FBQztRQUNGLE1BQU0sR0FBRyxHQUFHLE9BQU8sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDakMsT0FBTyxLQUFLLENBQUMsR0FBRyxFQUFFLFFBQVEsQ0FBQyxDQUFDO0lBQzlCLENBQUM7SUFFRCxpQkFBaUIsQ0FDZixJQUFhLEVBQ2IsSUFBdUIsRUFDdkIsT0FBc0I7UUFFdEIsTUFBTSxRQUFRLEdBQUcsa0JBQWtCLENBQ2pDLElBQUksRUFDSixPQUFPLEVBQUUsTUFBTSxFQUNmLE9BQU8sRUFBRSxhQUFhLENBQ3ZCLENBQUM7UUFDRixPQUFPLFNBQVMsQ0FBQyxJQUFhLEVBQUUsUUFBUSxDQUFDLENBQUM7SUFDNUMsQ0FBQztDQUNGLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIERldmFsdWUgY29kZWMgaW1wbGVtZW50YXRpb24uXG4gKlxuICogVXNlcyB0aGUgYGRldmFsdWVgIGxpYnJhcnkgZm9yIHNlcmlhbGl6YXRpb24uIEhhbmRsZXMgY3VzdG9tIHR5cGVzIHZpYVxuICogcmVkdWNlcnMgKHNlcmlhbGl6ZSkgYW5kIHJldml2ZXJzIChkZXNlcmlhbGl6ZSkgd2hpY2ggYXJlIGNvbXBvc2VkXG4gKiBpbnRlcm5hbGx5IGJhc2VkIG9uIHRoZSBzZXJpYWxpemF0aW9uIG1vZGUuXG4gKlxuICogVGhlIHJlZHVjZXIvcmV2aXZlciBwYXR0ZXJuIGlzIHNwZWNpZmljIHRvIGRldmFsdWUg4oCUIG90aGVyIGNvZGVjc1xuICogKENCT1IsIEpTT04pIHdvdWxkIGhhbmRsZSB0eXBlcyBkaWZmZXJlbnRseSAoZS5nLiBDQk9SIHN1cHBvcnRzIERhdGUsXG4gKiB0eXBlZCBhcnJheXMsIE1hcCwgU2V0IG5hdGl2ZWx5KS5cbiAqL1xuXG5pbXBvcnQgeyBwYXJzZSwgc3RyaW5naWZ5LCB1bmZsYXR0ZW4gfSBmcm9tICdkZXZhbHVlJztcbmltcG9ydCB0eXBlIHsgQ29kZWMsIENvZGVjT3B0aW9ucywgU2VyaWFsaXphdGlvbk1vZGUgfSBmcm9tICcuL2NvZGVjLmpzJztcbmltcG9ydCB7IGdldENsYXNzUmVkdWNlcnMsIGdldENsYXNzUmV2aXZlcnMgfSBmcm9tICcuL3JlZHVjZXJzL2NsYXNzLmpzJztcbmltcG9ydCB7IGdldENvbW1vblJlZHVjZXJzLCBnZXRDb21tb25SZXZpdmVycyB9IGZyb20gJy4vcmVkdWNlcnMvY29tbW9uLmpzJztcbmltcG9ydCB7XG4gIGdldFN0ZXBGdW5jdGlvblJlZHVjZXIsXG4gIGdldFN0ZXBGdW5jdGlvblJldml2ZXIsXG59IGZyb20gJy4vcmVkdWNlcnMvc3RlcC1mdW5jdGlvbi5qcyc7XG5pbXBvcnQgeyB0eXBlIFJlZHVjZXJzLCB0eXBlIFJldml2ZXJzLCBTZXJpYWxpemF0aW9uRm9ybWF0IH0gZnJvbSAnLi90eXBlcy5qcyc7XG5cbmNvbnN0IGVuY29kZXIgPSBuZXcgVGV4dEVuY29kZXIoKTtcbmNvbnN0IGRlY29kZXIgPSBuZXcgVGV4dERlY29kZXIoKTtcblxuLy8gLS0tLSBSZWR1Y2VyL1Jldml2ZXIgY29tcG9zaXRpb24gcGVyIG1vZGUgLS0tLVxuXG5mdW5jdGlvbiBnZXRSZWR1Y2Vyc0Zvck1vZGUoXG4gIG1vZGU6IFNlcmlhbGl6YXRpb25Nb2RlLFxuICBnbG9iYWw6IFJlY29yZDxzdHJpbmcsIGFueT4gPSBnbG9iYWxUaGlzLFxuICBleHRyYVJlZHVjZXJzPzogUmVjb3JkPHN0cmluZywgKHZhbHVlOiBhbnkpID0+IGFueT5cbik6IFJlY29yZDxzdHJpbmcsICh2YWx1ZTogYW55KSA9PiBhbnk+IHtcbiAgbGV0IGJhc2U6IFBhcnRpYWw8UmVkdWNlcnM+O1xuICBzd2l0Y2ggKG1vZGUpIHtcbiAgICBjYXNlICd3b3JrZmxvdyc6XG4gICAgICAvLyBDbGFzcy9JbnN0YW5jZSBNVVNUIGNvbWUgYmVmb3JlIGNvbW1vbiAoZmlyc3QtbWF0Y2gtd2lucyBmb3IgRXJyb3Igc3ViY2xhc3NlcylcbiAgICAgIGJhc2UgPSB7XG4gICAgICAgIC4uLmdldENsYXNzUmVkdWNlcnMoKSxcbiAgICAgICAgLi4uZ2V0U3RlcEZ1bmN0aW9uUmVkdWNlcigpLFxuICAgICAgICAuLi5nZXRDb21tb25SZWR1Y2VycyhnbG9iYWwpLFxuICAgICAgfTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ3N0ZXAnOlxuICAgICAgYmFzZSA9IHtcbiAgICAgICAgLi4uZ2V0Q2xhc3NSZWR1Y2VycygpLFxuICAgICAgICAuLi5nZXRDb21tb25SZWR1Y2VycyhnbG9iYWwpLFxuICAgICAgfTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ2NsaWVudCc6XG4gICAgICBiYXNlID0ge1xuICAgICAgICAuLi5nZXRDbGFzc1JlZHVjZXJzKCksXG4gICAgICAgIC4uLmdldENvbW1vblJlZHVjZXJzKGdsb2JhbCksXG4gICAgICB9O1xuICAgICAgYnJlYWs7XG4gIH1cbiAgaWYgKGV4dHJhUmVkdWNlcnMpIHtcbiAgICByZXR1cm4geyAuLi5iYXNlLCAuLi5leHRyYVJlZHVjZXJzIH0gYXMgUmVjb3JkPHN0cmluZywgKHZhbHVlOiBhbnkpID0+IGFueT47XG4gIH1cbiAgcmV0dXJuIGJhc2UgYXMgUmVjb3JkPHN0cmluZywgKHZhbHVlOiBhbnkpID0+IGFueT47XG59XG5cbmZ1bmN0aW9uIGdldFJldml2ZXJzRm9yTW9kZShcbiAgbW9kZTogU2VyaWFsaXphdGlvbk1vZGUsXG4gIGdsb2JhbDogUmVjb3JkPHN0cmluZywgYW55PiA9IGdsb2JhbFRoaXMsXG4gIGV4dHJhUmV2aXZlcnM/OiBSZWNvcmQ8c3RyaW5nLCAodmFsdWU6IGFueSkgPT4gYW55PlxuKTogUmVjb3JkPHN0cmluZywgKHZhbHVlOiBhbnkpID0+IGFueT4ge1xuICBsZXQgYmFzZTogUGFydGlhbDxSZXZpdmVycz47XG4gIHN3aXRjaCAobW9kZSkge1xuICAgIGNhc2UgJ3dvcmtmbG93JzpcbiAgICAgIGJhc2UgPSB7XG4gICAgICAgIC4uLmdldENsYXNzUmV2aXZlcnMoZ2xvYmFsKSxcbiAgICAgICAgLi4uZ2V0U3RlcEZ1bmN0aW9uUmV2aXZlcihnbG9iYWwpLFxuICAgICAgICAuLi5nZXRDb21tb25SZXZpdmVycyhnbG9iYWwpLFxuICAgICAgfTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ3N0ZXAnOlxuICAgICAgYmFzZSA9IHtcbiAgICAgICAgLi4uZ2V0Q2xhc3NSZXZpdmVycyhnbG9iYWwpLFxuICAgICAgICAuLi5nZXRDb21tb25SZXZpdmVycyhnbG9iYWwpLFxuICAgICAgfTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ2NsaWVudCc6XG4gICAgICBiYXNlID0ge1xuICAgICAgICAuLi5nZXRDbGFzc1Jldml2ZXJzKGdsb2JhbCksXG4gICAgICAgIC4uLmdldENvbW1vblJldml2ZXJzKGdsb2JhbCksXG4gICAgICAgIFN0ZXBGdW5jdGlvbjogKCkgPT4ge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAgICdTdGVwIGZ1bmN0aW9ucyBjYW5ub3QgYmUgZGVzZXJpYWxpemVkIGluIGNsaWVudCBjb250ZXh0LidcbiAgICAgICAgICApO1xuICAgICAgICB9LFxuICAgICAgfTtcbiAgICAgIGJyZWFrO1xuICB9XG4gIGlmIChleHRyYVJldml2ZXJzKSB7XG4gICAgcmV0dXJuIHsgLi4uYmFzZSwgLi4uZXh0cmFSZXZpdmVycyB9IGFzIFJlY29yZDxzdHJpbmcsICh2YWx1ZTogYW55KSA9PiBhbnk+O1xuICB9XG4gIHJldHVybiBiYXNlIGFzIFJlY29yZDxzdHJpbmcsICh2YWx1ZTogYW55KSA9PiBhbnk+O1xufVxuXG4vLyAtLS0tIENvZGVjIGltcGxlbWVudGF0aW9uIC0tLS1cblxuZXhwb3J0IGNvbnN0IGRldmFsdWVDb2RlYzogQ29kZWMgPSB7XG4gIGZvcm1hdFByZWZpeDogU2VyaWFsaXphdGlvbkZvcm1hdC5ERVZBTFVFX1YxLFxuXG4gIHNlcmlhbGl6ZShcbiAgICB2YWx1ZTogdW5rbm93bixcbiAgICBtb2RlOiBTZXJpYWxpemF0aW9uTW9kZSxcbiAgICBvcHRpb25zPzogQ29kZWNPcHRpb25zXG4gICk6IFVpbnQ4QXJyYXkge1xuICAgIGNvbnN0IHJlZHVjZXJzID0gZ2V0UmVkdWNlcnNGb3JNb2RlKFxuICAgICAgbW9kZSxcbiAgICAgIG9wdGlvbnM/Lmdsb2JhbCxcbiAgICAgIG9wdGlvbnM/LmV4dHJhUmVkdWNlcnNcbiAgICApO1xuICAgIGNvbnN0IHN0ciA9IHN0cmluZ2lmeSh2YWx1ZSwgcmVkdWNlcnMpO1xuICAgIHJldHVybiBlbmNvZGVyLmVuY29kZShzdHIpO1xuICB9LFxuXG4gIGRlc2VyaWFsaXplKFxuICAgIGRhdGE6IFVpbnQ4QXJyYXksXG4gICAgbW9kZTogU2VyaWFsaXphdGlvbk1vZGUsXG4gICAgb3B0aW9ucz86IENvZGVjT3B0aW9uc1xuICApOiB1bmtub3duIHtcbiAgICBjb25zdCByZXZpdmVycyA9IGdldFJldml2ZXJzRm9yTW9kZShcbiAgICAgIG1vZGUsXG4gICAgICBvcHRpb25zPy5nbG9iYWwsXG4gICAgICBvcHRpb25zPy5leHRyYVJldml2ZXJzXG4gICAgKTtcbiAgICBjb25zdCBzdHIgPSBkZWNvZGVyLmRlY29kZShkYXRhKTtcbiAgICByZXR1cm4gcGFyc2Uoc3RyLCByZXZpdmVycyk7XG4gIH0sXG5cbiAgZGVzZXJpYWxpemVMZWdhY3koXG4gICAgZGF0YTogdW5rbm93bixcbiAgICBtb2RlOiBTZXJpYWxpemF0aW9uTW9kZSxcbiAgICBvcHRpb25zPzogQ29kZWNPcHRpb25zXG4gICk6IHVua25vd24ge1xuICAgIGNvbnN0IHJldml2ZXJzID0gZ2V0UmV2aXZlcnNGb3JNb2RlKFxuICAgICAgbW9kZSxcbiAgICAgIG9wdGlvbnM/Lmdsb2JhbCxcbiAgICAgIG9wdGlvbnM/LmV4dHJhUmV2aXZlcnNcbiAgICApO1xuICAgIHJldHVybiB1bmZsYXR0ZW4oZGF0YSBhcyBhbnlbXSwgcmV2aXZlcnMpO1xuICB9LFxufTtcbiJdfQ==
116
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29kZWMtZGV2YWx1ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zZXJpYWxpemF0aW9uL2NvZGVjLWRldmFsdWUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7R0FVRztBQUVILE9BQU8sRUFDTCxzQkFBc0IsRUFFdEIsS0FBSyxFQUNMLFNBQVMsRUFDVCxTQUFTLEdBQ1YsTUFBTSxTQUFTLENBQUM7QUFFakIsT0FBTyxFQUFFLDJCQUEyQixFQUFFLGtCQUFrQixFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ2hGLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3pFLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQzVFLE9BQU8sRUFDTCxzQkFBc0IsRUFDdEIsc0JBQXNCLEdBQ3ZCLE1BQU0sNkJBQTZCLENBQUM7QUFDckMsT0FBTyxFQUFnQyxtQkFBbUIsRUFBRSxNQUFNLFlBQVksQ0FBQztBQUUvRSxNQUFNLE9BQU8sR0FBRyxJQUFJLFdBQVcsRUFBRSxDQUFDO0FBQ2xDLE1BQU0sT0FBTyxHQUFHLElBQUksV0FBVyxFQUFFLENBQUM7QUFDbEMsTUFBTSx1QkFBdUIsR0FBRyxPQUFPLENBQUM7QUFFeEMsTUFBTSxZQUFZLEdBQUc7SUFDbkIsVUFBVSxFQUFFO1FBQ1YsaUJBQWlCLENBQUMsTUFBTTtZQUN0QixJQUFJLE1BQU0sR0FBRyx1QkFBdUIsRUFBRSxDQUFDO2dCQUNyQyxNQUFNLElBQUksVUFBVSxDQUNsQix1QkFBdUIsTUFBTSwyQkFBMkIsdUJBQXVCLEVBQUUsQ0FDbEYsQ0FBQztZQUNKLENBQUM7WUFDRCxPQUFPLHNCQUFzQixDQUFDLGlCQUFpQixDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQzFELENBQUM7S0FDRjtDQUNxQixDQUFDO0FBRXpCLGlEQUFpRDtBQUVqRCxTQUFTLGtCQUFrQixDQUN6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RUFDdkIsT0FBc0I7UUFFdEIsTUFBTSxRQUFRLEdBQUcsa0JBQWtCLENBQ2pDLElBQUksRUFDSixPQUFPLEVBQUUsTUFBTSxFQUNmLE9BQU8sRUFBRSxhQUFhLENBQ3ZCLENBQUM7UUFDRixNQUFNLEdBQUcsR0FBRyxPQUFPLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ2pDLE9BQU8sS0FBSyxDQUFDLEdBQUcsRUFBRSxRQUFRLEVBQUUsWUFBWSxDQUFDLENBQUM7SUFDNUMsQ0FBQztJQUVELGlCQUFpQixDQUNmLElBQWEsRUFDYixJQUF1QixFQUN2QixPQUFzQjtRQUV0QixNQUFNLFFBQVEsR0FBRyxrQkFBa0IsQ0FDakMsSUFBSSxFQUNKLE9BQU8sRUFBRSxNQUFNLEVBQ2YsT0FBTyxFQUFFLGFBQWEsQ0FDdkIsQ0FBQztRQUNGLE9BQU8sU0FBUyxDQUFDLElBQWEsRUFBRSxRQUFRLEVBQUUsWUFBWSxDQUFDLENBQUM7SUFDMUQsQ0FBQztDQUNGLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIERldmFsdWUgY29kZWMgaW1wbGVtZW50YXRpb24uXG4gKlxuICogVXNlcyB0aGUgYGRldmFsdWVgIGxpYnJhcnkgZm9yIHNlcmlhbGl6YXRpb24uIEhhbmRsZXMgY3VzdG9tIHR5cGVzIHZpYVxuICogcmVkdWNlcnMgKHNlcmlhbGl6ZSkgYW5kIHJldml2ZXJzIChkZXNlcmlhbGl6ZSkgd2hpY2ggYXJlIGNvbXBvc2VkXG4gKiBpbnRlcm5hbGx5IGJhc2VkIG9uIHRoZSBzZXJpYWxpemF0aW9uIG1vZGUuXG4gKlxuICogVGhlIHJlZHVjZXIvcmV2aXZlciBwYXR0ZXJuIGlzIHNwZWNpZmljIHRvIGRldmFsdWU6IG90aGVyIGNvZGVjc1xuICogKENCT1IsIEpTT04pIHdvdWxkIGhhbmRsZSB0eXBlcyBkaWZmZXJlbnRseSAoZS5nLiBDQk9SIHN1cHBvcnRzIERhdGUsXG4gKiB0eXBlZCBhcnJheXMsIE1hcCwgU2V0IG5hdGl2ZWx5KS5cbiAqL1xuXG5pbXBvcnQge1xuICBkZWZhdWx0UGFyc2VPcGVyYXRpb25zLFxuICB0eXBlIFBhcnNlT3B0aW9ucyxcbiAgcGFyc2UsXG4gIHN0cmluZ2lmeSxcbiAgdW5mbGF0dGVuLFxufSBmcm9tICdkZXZhbHVlJztcbmltcG9ydCB0eXBlIHsgQ29kZWMsIENvZGVjT3B0aW9ucywgU2VyaWFsaXphdGlvbk1vZGUgfSBmcm9tICcuL2NvZGVjLmpzJztcbmltcG9ydCB7IGhhcmRlbmVkU3RyaW5naWZ5T3BlcmF0aW9ucywgd2l0aEd1ZXN0Q29kZVN0YXRzIH0gZnJvbSAnLi9oYXJkZW5lZC5qcyc7XG5pbXBvcnQgeyBnZXRDbGFzc1JlZHVjZXJzLCBnZXRDbGFzc1Jldml2ZXJzIH0gZnJvbSAnLi9yZWR1Y2Vycy9jbGFzcy5qcyc7XG5pbXBvcnQgeyBnZXRDb21tb25SZWR1Y2VycywgZ2V0Q29tbW9uUmV2aXZlcnMgfSBmcm9tICcuL3JlZHVjZXJzL2NvbW1vbi5qcyc7XG5pbXBvcnQge1xuICBnZXRTdGVwRnVuY3Rpb25SZWR1Y2VyLFxuICBnZXRTdGVwRnVuY3Rpb25SZXZpdmVyLFxufSBmcm9tICcuL3JlZHVjZXJzL3N0ZXAtZnVuY3Rpb24uanMnO1xuaW1wb3J0IHsgdHlwZSBSZWR1Y2VycywgdHlwZSBSZXZpdmVycywgU2VyaWFsaXphdGlvbkZvcm1hdCB9IGZyb20gJy4vdHlwZXMuanMnO1xuXG5jb25zdCBlbmNvZGVyID0gbmV3IFRleHRFbmNvZGVyKCk7XG5jb25zdCBkZWNvZGVyID0gbmV3IFRleHREZWNvZGVyKCk7XG5jb25zdCBNQVhfU1BBUlNFX0FSUkFZX0xFTkdUSCA9IDEwMF8wMDA7XG5cbmNvbnN0IHBhcnNlT3B0aW9ucyA9IHtcbiAgb3BlcmF0aW9uczoge1xuICAgIGNyZWF0ZVNwYXJzZUFycmF5KGxlbmd0aCkge1xuICAgICAgaWYgKGxlbmd0aCA+IE1BWF9TUEFSU0VfQVJSQVlfTEVOR1RIKSB7XG4gICAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKFxuICAgICAgICAgIGBTcGFyc2UgYXJyYXkgbGVuZ3RoICR7bGVuZ3RofSBleGNlZWRzIHRoZSBtYXhpbXVtIG9mICR7TUFYX1NQQVJTRV9BUlJBWV9MRU5HVEh9YFxuICAgICAgICApO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGRlZmF1bHRQYXJzZU9wZXJhdGlvbnMuY3JlYXRlU3BhcnNlQXJyYXkobGVuZ3RoKTtcbiAgICB9LFxuICB9LFxufSBzYXRpc2ZpZXMgUGFyc2VPcHRpb25zO1xuXG4vLyAtLS0tIFJlZHVjZXIvUmV2aXZlciBjb21wb3NpdGlvbiBwZXIgbW9kZSAtLS0tXG5cbmZ1bmN0aW9uIGdldFJlZHVjZXJzRm9yTW9kZShcbiAgbW9kZTogU2VyaWFsaXphdGlvbk1vZGUsXG4gIGdsb2JhbDogUmVjb3JkPHN0cmluZywgYW55PiA9IGdsb2JhbFRoaXMsXG4gIGV4dHJhUmVkdWNlcnM/OiBSZWNvcmQ8c3RyaW5nLCAodmFsdWU6IGFueSkgPT4gYW55PlxuKTogUmVjb3JkPHN0cmluZywgKHZhbHVlOiBhbnkpID0+IGFueT4ge1xuICBsZXQgYmFzZTogUGFydGlhbDxSZWR1Y2Vycz47XG4gIHN3aXRjaCAobW9kZSkge1xuICAgIGNhc2UgJ3dvcmtmbG93JzpcbiAgICAgIC8vIENsYXNzL0luc3RhbmNlIE1VU1QgY29tZSBiZWZvcmUgY29tbW9uIChmaXJzdC1tYXRjaC13aW5zIGZvciBFcnJvciBzdWJjbGFzc2VzKVxuICAgICAgYmFzZSA9IHtcbiAgICAgICAgLi4uZ2V0Q2xhc3NSZWR1Y2VycygpLFxuICAgICAgICAuLi5nZXRTdGVwRnVuY3Rpb25SZWR1Y2VyKCksXG4gICAgICAgIC4uLmdldENvbW1vblJlZHVjZXJzKGdsb2JhbCksXG4gICAgICB9O1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAnc3RlcCc6XG4gICAgICBiYXNlID0ge1xuICAgICAgICAuLi5nZXRDbGFzc1JlZHVjZXJzKCksXG4gICAgICAgIC4uLmdldENvbW1vblJlZHVjZXJzKGdsb2JhbCksXG4gICAgICB9O1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAnY2xpZW50JzpcbiAgICAgIGJhc2UgPSB7XG4gICAgICAgIC4uLmdldENsYXNzUmVkdWNlcnMoKSxcbiAgICAgICAgLi4uZ2V0Q29tbW9uUmVkdWNlcnMoZ2xvYmFsKSxcbiAgICAgIH07XG4gICAgICBicmVhaztcbiAgfVxuICBpZiAoZXh0cmFSZWR1Y2Vycykge1xuICAgIHJldHVybiB7IC4uLmJhc2UsIC4uLmV4dHJhUmVkdWNlcnMgfSBhcyBSZWNvcmQ8c3RyaW5nLCAodmFsdWU6IGFueSkgPT4gYW55PjtcbiAgfVxuICByZXR1cm4gYmFzZSBhcyBSZWNvcmQ8c3RyaW5nLCAodmFsdWU6IGFueSkgPT4gYW55Pjtcbn1cblxuZnVuY3Rpb24gZ2V0UmV2aXZlcnNGb3JNb2RlKFxuICBtb2RlOiBTZXJpYWxpemF0aW9uTW9kZSxcbiAgZ2xvYmFsOiBSZWNvcmQ8c3RyaW5nLCBhbnk+ID0gZ2xvYmFsVGhpcyxcbiAgZXh0cmFSZXZpdmVycz86IFJlY29yZDxzdHJpbmcsICh2YWx1ZTogYW55KSA9PiBhbnk+XG4pOiBSZWNvcmQ8c3RyaW5nLCAodmFsdWU6IGFueSkgPT4gYW55PiB7XG4gIGxldCBiYXNlOiBQYXJ0aWFsPFJldml2ZXJzPjtcbiAgc3dpdGNoIChtb2RlKSB7XG4gICAgY2FzZSAnd29ya2Zsb3cnOlxuICAgICAgYmFzZSA9IHtcbiAgICAgICAgLi4uZ2V0Q2xhc3NSZXZpdmVycyhnbG9iYWwpLFxuICAgICAgICAuLi5nZXRTdGVwRnVuY3Rpb25SZXZpdmVyKGdsb2JhbCksXG4gICAgICAgIC4uLmdldENvbW1vblJldml2ZXJzKGdsb2JhbCksXG4gICAgICB9O1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAnc3RlcCc6XG4gICAgICBiYXNlID0ge1xuICAgICAgICAuLi5nZXRDbGFzc1Jldml2ZXJzKGdsb2JhbCksXG4gICAgICAgIC4uLmdldENvbW1vblJldml2ZXJzKGdsb2JhbCksXG4gICAgICB9O1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAnY2xpZW50JzpcbiAgICAgIGJhc2UgPSB7XG4gICAgICAgIC4uLmdldENsYXNzUmV2aXZlcnMoZ2xvYmFsKSxcbiAgICAgICAgLi4uZ2V0Q29tbW9uUmV2aXZlcnMoZ2xvYmFsKSxcbiAgICAgICAgU3RlcEZ1bmN0aW9uOiAoKSA9PiB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgICAgJ1N0ZXAgZnVuY3Rpb25zIGNhbm5vdCBiZSBkZXNlcmlhbGl6ZWQgaW4gY2xpZW50IGNvbnRleHQuJ1xuICAgICAgICAgICk7XG4gICAgICAgIH0sXG4gICAgICB9O1xuICAgICAgYnJlYWs7XG4gIH1cbiAgaWYgKGV4dHJhUmV2aXZlcnMpIHtcbiAgICByZXR1cm4geyAuLi5iYXNlLCAuLi5leHRyYVJldml2ZXJzIH0gYXMgUmVjb3JkPHN0cmluZywgKHZhbHVlOiBhbnkpID0+IGFueT47XG4gIH1cbiAgcmV0dXJuIGJhc2UgYXMgUmVjb3JkPHN0cmluZywgKHZhbHVlOiBhbnkpID0+IGFueT47XG59XG5cbi8vIC0tLS0gQ29kZWMgaW1wbGVtZW50YXRpb24gLS0tLVxuXG5leHBvcnQgY29uc3QgZGV2YWx1ZUNvZGVjOiBDb2RlYyA9IHtcbiAgZm9ybWF0UHJlZml4OiBTZXJpYWxpemF0aW9uRm9ybWF0LkRFVkFMVUVfVjEsXG5cbiAgc2VyaWFsaXplKFxuICAgIHZhbHVlOiB1bmtub3duLFxuICAgIG1vZGU6IFNlcmlhbGl6YXRpb25Nb2RlLFxuICAgIG9wdGlvbnM/OiBDb2RlY09wdGlvbnNcbiAgKTogVWludDhBcnJheSB7XG4gICAgY29uc3QgcmVkdWNlcnMgPSBnZXRSZWR1Y2Vyc0Zvck1vZGUoXG4gICAgICBtb2RlLFxuICAgICAgb3B0aW9ucz8uZ2xvYmFsLFxuICAgICAgb3B0aW9ucz8uZXh0cmFSZWR1Y2Vyc1xuICAgICk7XG4gICAgLy8gSGFyZGVuZWQgb3BlcmF0aW9uczogZGV2YWx1ZSdzIG93biBpbnRyb3NwZWN0aW9uIChjbGFzc2lmaWNhdGlvbixcbiAgICAvLyBidWlsdC1pbiBleHRyYWN0aW9uLCBwcm9wZXJ0eSByZWFkcykgZ29lcyB0aHJvdWdoIGNhcHR1cmVkIGhvc3RcbiAgICAvLyBpbnRyaW5zaWNzIGFuZCBkZXNjcmlwdG9yIHJlYWRzLCBzbyBzZXJpYWxpemluZyBhIHZhbHVlIGNvbnN0cnVjdGVkXG4gICAgLy8gaW5zaWRlIGEgd29ya2Zsb3cgVk0gY2Fubm90IGV4ZWN1dGUgc2FuZGJveCBjb2RlIGJlaGluZCBvdXIgYmFjay5cbiAgICAvLyBXaGVyZSB3b3JrZmxvdyBjb2RlIG11c3QgcnVuIChnZXR0ZXJzLCBwcm94aWVzLCBjdXN0b20gc2VyaWFsaXplcnMpLFxuICAgIC8vIHRoZSBleGVjdXRpb24gaXMgcmVjb3JkZWQgaW50byBgb3B0aW9ucy5ndWVzdENvZGVTdGF0c2AuXG4gICAgY29uc3Qgc3RyID0gd2l0aEd1ZXN0Q29kZVN0YXRzKG9wdGlvbnM/Lmd1ZXN0Q29kZVN0YXRzLCAoKSA9PlxuICAgICAgc3RyaW5naWZ5KHZhbHVlLCByZWR1Y2VycywgeyBvcGVyYXRpb25zOiBoYXJkZW5lZFN0cmluZ2lmeU9wZXJhdGlvbnMgfSlcbiAgICApO1xuICAgIHJldHVybiBlbmNvZGVyLmVuY29kZShzdHIpO1xuICB9LFxuXG4gIGRlc2VyaWFsaXplKFxuICAgIGRhdGE6IFVpbnQ4QXJyYXksXG4gICAgbW9kZTogU2VyaWFsaXphdGlvbk1vZGUsXG4gICAgb3B0aW9ucz86IENvZGVjT3B0aW9uc1xuICApOiB1bmtub3duIHtcbiAgICBjb25zdCByZXZpdmVycyA9IGdldFJldml2ZXJzRm9yTW9kZShcbiAgICAgIG1vZGUsXG4gICAgICBvcHRpb25zPy5nbG9iYWwsXG4gICAgICBvcHRpb25zPy5leHRyYVJldml2ZXJzXG4gICAgKTtcbiAgICBjb25zdCBzdHIgPSBkZWNvZGVyLmRlY29kZShkYXRhKTtcbiAgICByZXR1cm4gcGFyc2Uoc3RyLCByZXZpdmVycywgcGFyc2VPcHRpb25zKTtcbiAgfSxcblxuICBkZXNlcmlhbGl6ZUxlZ2FjeShcbiAgICBkYXRhOiB1bmtub3duLFxuICAgIG1vZGU6IFNlcmlhbGl6YXRpb25Nb2RlLFxuICAgIG9wdGlvbnM/OiBDb2RlY09wdGlvbnNcbiAgKTogdW5rbm93biB7XG4gICAgY29uc3QgcmV2aXZlcnMgPSBnZXRSZXZpdmVyc0Zvck1vZGUoXG4gICAgICBtb2RlLFxuICAgICAgb3B0aW9ucz8uZ2xvYmFsLFxuICAgICAgb3B0aW9ucz8uZXh0cmFSZXZpdmVyc1xuICAgICk7XG4gICAgcmV0dXJuIHVuZmxhdHRlbihkYXRhIGFzIGFueVtdLCByZXZpdmVycywgcGFyc2VPcHRpb25zKTtcbiAgfSxcbn07XG4iXX0=
@@ -3,7 +3,7 @@
3
3
  *
4
4
  * A codec handles the core serialize/deserialize logic for a specific
5
5
  * wire format (devalue, CBOR, JSON, etc.). Each codec is responsible
6
- * for handling all supported data types internally the caller only
6
+ * for handling all supported data types internally; the caller only
7
7
  * specifies which serialization mode to use.
8
8
  *
9
9
  * - **devalue**: Uses custom reducers/revivers for Date, Error, Map, Set,
@@ -13,6 +13,8 @@
13
13
  * - **json**: Would only support standard JSON types (primitives, arrays,
14
14
  * plain objects). No Date, Map, Set, typed arrays, etc.
15
15
  */
16
+ import type { CompressionStats } from './compression.js';
17
+ import type { GuestCodeStats } from './hardened.js';
16
18
  import type { FormatPrefix } from './types.js';
17
19
  /**
18
20
  * The serialization mode determines which types are supported and how
@@ -20,7 +22,7 @@ import type { FormatPrefix } from './types.js';
20
22
  *
21
23
  * - `workflow`: Runs inside the workflow VM. Includes class serialization,
22
24
  * step function serialization. No stream handling.
23
- * - `step`: Runs in the step handler (Node.js). Includes class serialization.
25
+ * - `step`: Runs in the step executor (Node.js). Includes class serialization.
24
26
  * No step function serialization. Stream handling at call sites.
25
27
  * - `client`: Runs on the client side. Includes class serialization.
26
28
  * No step function serialization. Stream handling at call sites.
@@ -49,6 +51,39 @@ export interface CodecOptions {
49
51
  * or other mode-specific type revivers.
50
52
  */
51
53
  extraRevivers?: Record<string, (value: any) => any>;
54
+ /**
55
+ * Whether to compress the serialized payload (write side only; zstd is
56
+ * preferred and gzip is the portable fallback). Reads dispatch compressed
57
+ * payloads by format prefix; zstd decoding still requires runtime or
58
+ * registered decoder support. Must only be enabled when the target run
59
+ * supports compressed payloads:
60
+ * run specVersion >= SPEC_VERSION_SUPPORTS_COMPRESSION, and for
61
+ * cross-deployment writes the target deployment's capabilities (see
62
+ * `getRunCapabilities` in capabilities.ts). Defaults to `false`.
63
+ */
64
+ compression?: boolean;
65
+ /**
66
+ * Optional telemetry sink populated by the compression layer with what
67
+ * it did to the payload (whether it compressed, logical vs stored size).
68
+ * Used by the dehydrate/hydrate wrappers to emit OTel span attributes.
69
+ */
70
+ compressionStats?: CompressionStats;
71
+ /**
72
+ * Optional sink populated by the hardened serializer with every
73
+ * workflow (guest) code execution that serialization could not avoid:
74
+ * getters, proxies, and custom `[WORKFLOW_SERIALIZE]` methods. A non-empty
75
+ * `executions` array means serialization may have perturbed VM state
76
+ * (it runs exactly once per payload and is never replayed, so any side
77
+ * effect it triggers diverges from replay).
78
+ *
79
+ * Every dehydrate path already reports this as span attributes. Passing a
80
+ * sink is for callers that need the executions *programmatically*, such
81
+ * as a retained-VM gate deciding whether the VM is still reusable. No caller
82
+ * does that yet, so nothing in the runtime currently passes one.
83
+ *
84
+ * Serialize side only.
85
+ */
86
+ guestCodeStats?: GuestCodeStats;
52
87
  }
53
88
  export interface Codec {
54
89
  /** The 4-character format prefix identifier (e.g. "devl", "cbor", "json") */
@@ -1 +1 @@
1
- {"version":3,"file":"codec.d.ts","sourceRoot":"","sources":["../../src/serialization/codec.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAE/C;;;;;;;;;;GAUG;AACH,MAAM,MAAM,iBAAiB,GAAG,UAAU,GAAG,MAAM,GAAG,QAAQ,CAAC;AAE/D;;;GAGG;AACH,MAAM,WAAW,YAAY;IAC3B;;;;OAIG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAE7B;;;;OAIG;IACH,aAAa,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,KAAK,EAAE,GAAG,KAAK,GAAG,CAAC,CAAC;IAEpD;;;;OAIG;IACH,aAAa,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,KAAK,EAAE,GAAG,KAAK,GAAG,CAAC,CAAC;CACrD;AAED,MAAM,WAAW,KAAK;IACpB,6EAA6E;IAC7E,QAAQ,CAAC,YAAY,EAAE,YAAY,CAAC;IAEpC;;;;;;;;;OASG;IACH,SAAS,CACP,KAAK,EAAE,OAAO,EACd,IAAI,EAAE,iBAAiB,EACvB,OAAO,CAAC,EAAE,YAAY,GACrB,UAAU,CAAC;IAEd;;;;;;;;;OASG;IACH,WAAW,CACT,IAAI,EAAE,UAAU,EAChB,IAAI,EAAE,iBAAiB,EACvB,OAAO,CAAC,EAAE,YAAY,GACrB,OAAO,CAAC;IAEX;;;;;;;;;OASG;IACH,iBAAiB,CAAC,CAChB,IAAI,EAAE,OAAO,EACb,IAAI,EAAE,iBAAiB,EACvB,OAAO,CAAC,EAAE,YAAY,GACrB,OAAO,CAAC;CACZ"}
1
+ {"version":3,"file":"codec.d.ts","sourceRoot":"","sources":["../../src/serialization/codec.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AACzD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AACpD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAE/C;;;;;;;;;;GAUG;AACH,MAAM,MAAM,iBAAiB,GAAG,UAAU,GAAG,MAAM,GAAG,QAAQ,CAAC;AAE/D;;;GAGG;AACH,MAAM,WAAW,YAAY;IAC3B;;;;OAIG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAE7B;;;;OAIG;IACH,aAAa,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,KAAK,EAAE,GAAG,KAAK,GAAG,CAAC,CAAC;IAEpD;;;;OAIG;IACH,aAAa,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,KAAK,EAAE,GAAG,KAAK,GAAG,CAAC,CAAC;IAEpD;;;;;;;;;OASG;IACH,WAAW,CAAC,EAAE,OAAO,CAAC;IAEtB;;;;OAIG;IACH,gBAAgB,CAAC,EAAE,gBAAgB,CAAC;IAEpC;;;;;;;;;;;;;;OAcG;IACH,cAAc,CAAC,EAAE,cAAc,CAAC;CACjC;AAED,MAAM,WAAW,KAAK;IACpB,6EAA6E;IAC7E,QAAQ,CAAC,YAAY,EAAE,YAAY,CAAC;IAEpC;;;;;;;;;OASG;IACH,SAAS,CACP,KAAK,EAAE,OAAO,EACd,IAAI,EAAE,iBAAiB,EACvB,OAAO,CAAC,EAAE,YAAY,GACrB,UAAU,CAAC;IAEd;;;;;;;;;OASG;IACH,WAAW,CACT,IAAI,EAAE,UAAU,EAChB,IAAI,EAAE,iBAAiB,EACvB,OAAO,CAAC,EAAE,YAAY,GACrB,OAAO,CAAC;IAEX;;;;;;;;;OASG;IACH,iBAAiB,CAAC,CAChB,IAAI,EAAE,OAAO,EACb,IAAI,EAAE,iBAAiB,EACvB,OAAO,CAAC,EAAE,YAAY,GACrB,OAAO,CAAC;CACZ"}
@@ -3,7 +3,7 @@
3
3
  *
4
4
  * A codec handles the core serialize/deserialize logic for a specific
5
5
  * wire format (devalue, CBOR, JSON, etc.). Each codec is responsible
6
- * for handling all supported data types internally the caller only
6
+ * for handling all supported data types internally; the caller only
7
7
  * specifies which serialization mode to use.
8
8
  *
9
9
  * - **devalue**: Uses custom reducers/revivers for Date, Error, Map, Set,
@@ -14,4 +14,4 @@
14
14
  * plain objects). No Date, Map, Set, typed arrays, etc.
15
15
  */
16
16
  export {};
17
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29kZWMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvc2VyaWFsaXphdGlvbi9jb2RlYy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7R0FjRyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQ29kZWMgaW50ZXJmYWNlIGZvciBzZXJpYWxpemF0aW9uIGZvcm1hdHMuXG4gKlxuICogQSBjb2RlYyBoYW5kbGVzIHRoZSBjb3JlIHNlcmlhbGl6ZS9kZXNlcmlhbGl6ZSBsb2dpYyBmb3IgYSBzcGVjaWZpY1xuICogd2lyZSBmb3JtYXQgKGRldmFsdWUsIENCT1IsIEpTT04sIGV0Yy4pLiBFYWNoIGNvZGVjIGlzIHJlc3BvbnNpYmxlXG4gKiBmb3IgaGFuZGxpbmcgYWxsIHN1cHBvcnRlZCBkYXRhIHR5cGVzIGludGVybmFsbHkg4oCUIHRoZSBjYWxsZXIgb25seVxuICogc3BlY2lmaWVzIHdoaWNoIHNlcmlhbGl6YXRpb24gbW9kZSB0byB1c2UuXG4gKlxuICogLSAqKmRldmFsdWUqKjogVXNlcyBjdXN0b20gcmVkdWNlcnMvcmV2aXZlcnMgZm9yIERhdGUsIEVycm9yLCBNYXAsIFNldCxcbiAqICAgdHlwZWQgYXJyYXlzLCBjbGFzcyBpbnN0YW5jZXMsIGV0Yy5cbiAqIC0gKipjYm9yKio6IFdvdWxkIGhhbmRsZSBEYXRlLCB0eXBlZCBhcnJheXMsIE1hcCwgU2V0IG5hdGl2ZWx5IHZpYSB0aGVcbiAqICAgQ0JPUiB0eXBlIHN5c3RlbS4gQ2xhc3MgaW5zdGFuY2VzIHdvdWxkIHN0aWxsIG5lZWQgY3VzdG9tIGhhbmRsaW5nLlxuICogLSAqKmpzb24qKjogV291bGQgb25seSBzdXBwb3J0IHN0YW5kYXJkIEpTT04gdHlwZXMgKHByaW1pdGl2ZXMsIGFycmF5cyxcbiAqICAgcGxhaW4gb2JqZWN0cykuIE5vIERhdGUsIE1hcCwgU2V0LCB0eXBlZCBhcnJheXMsIGV0Yy5cbiAqL1xuXG5pbXBvcnQgdHlwZSB7IEZvcm1hdFByZWZpeCB9IGZyb20gJy4vdHlwZXMuanMnO1xuXG4vKipcbiAqIFRoZSBzZXJpYWxpemF0aW9uIG1vZGUgZGV0ZXJtaW5lcyB3aGljaCB0eXBlcyBhcmUgc3VwcG9ydGVkIGFuZCBob3dcbiAqIHRoZXkncmUgaGFuZGxlZC4gRGlmZmVyZW50IG1vZGVzIGNvbXBvc2UgZGlmZmVyZW50IHNldHMgb2YgdHlwZSBoYW5kbGVycy5cbiAqXG4gKiAtIGB3b3JrZmxvd2A6IFJ1bnMgaW5zaWRlIHRoZSB3b3JrZmxvdyBWTS4gSW5jbHVkZXMgY2xhc3Mgc2VyaWFsaXphdGlvbixcbiAqICAgc3RlcCBmdW5jdGlvbiBzZXJpYWxpemF0aW9uLiBObyBzdHJlYW0gaGFuZGxpbmcuXG4gKiAtIGBzdGVwYDogUnVucyBpbiB0aGUgc3RlcCBoYW5kbGVyIChOb2RlLmpzKS4gSW5jbHVkZXMgY2xhc3Mgc2VyaWFsaXphdGlvbi5cbiAqICAgTm8gc3RlcCBmdW5jdGlvbiBzZXJpYWxpemF0aW9uLiBTdHJlYW0gaGFuZGxpbmcgYXQgY2FsbCBzaXRlcy5cbiAqIC0gYGNsaWVudGA6IFJ1bnMgb24gdGhlIGNsaWVudCBzaWRlLiBJbmNsdWRlcyBjbGFzcyBzZXJpYWxpemF0aW9uLlxuICogICBObyBzdGVwIGZ1bmN0aW9uIHNlcmlhbGl6YXRpb24uIFN0cmVhbSBoYW5kbGluZyBhdCBjYWxsIHNpdGVzLlxuICovXG5leHBvcnQgdHlwZSBTZXJpYWxpemF0aW9uTW9kZSA9ICd3b3JrZmxvdycgfCAnc3RlcCcgfCAnY2xpZW50JztcblxuLyoqXG4gKiBPcHRpb25zIHBhc3NlZCB0byBjb2RlYyBzZXJpYWxpemUvZGVzZXJpYWxpemUgdG8gc3VwcG9ydCBWTS1jb250ZXh0XG4gKiBzZXJpYWxpemF0aW9uIGFuZCBtb2RlLXNwZWNpZmljIHR5cGUgaGFuZGxpbmcuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ29kZWNPcHRpb25zIHtcbiAgLyoqXG4gICAqIFRoZSBnbG9iYWwgb2JqZWN0IHRvIHVzZSBmb3IgYGluc3RhbmNlb2ZgIGNoZWNrcyBhbmQgY29uc3RydWN0b3JzLlxuICAgKiBEZWZhdWx0cyB0byBgZ2xvYmFsVGhpc2AuIE11c3QgYmUgc2V0IHRvIHRoZSBWTSdzIGdsb2JhbCB3aGVuXG4gICAqIHNlcmlhbGl6aW5nL2Rlc2VyaWFsaXppbmcgZGF0YSB0aGF0IGNyb3NzZXMgVk0gYm91bmRhcmllcy5cbiAgICovXG4gIGdsb2JhbD86IFJlY29yZDxzdHJpbmcsIGFueT47XG5cbiAgLyoqXG4gICAqIEFkZGl0aW9uYWwgcmVkdWNlcnMgdG8gbWVyZ2UgaW50byB0aGUgbW9kZSdzIGRlZmF1bHQgcmVkdWNlcnMuXG4gICAqIFVzZWQgYnkgZGVoeWRyYXRlL2h5ZHJhdGUgZnVuY3Rpb25zIHRoYXQgbmVlZCBzdHJlYW0gaGFuZGxpbmdcbiAgICogb3Igb3RoZXIgbW9kZS1zcGVjaWZpYyB0eXBlIHJlZHVjZXJzLlxuICAgKi9cbiAgZXh0cmFSZWR1Y2Vycz86IFJlY29yZDxzdHJpbmcsICh2YWx1ZTogYW55KSA9PiBhbnk+O1xuXG4gIC8qKlxuICAgKiBBZGRpdGlvbmFsIHJldml2ZXJzIHRvIG1lcmdlIGludG8gdGhlIG1vZGUncyBkZWZhdWx0IHJldml2ZXJzLlxuICAgKiBVc2VkIGJ5IGRlaHlkcmF0ZS9oeWRyYXRlIGZ1bmN0aW9ucyB0aGF0IG5lZWQgc3RyZWFtIGhhbmRsaW5nXG4gICAqIG9yIG90aGVyIG1vZGUtc3BlY2lmaWMgdHlwZSByZXZpdmVycy5cbiAgICovXG4gIGV4dHJhUmV2aXZlcnM/OiBSZWNvcmQ8c3RyaW5nLCAodmFsdWU6IGFueSkgPT4gYW55Pjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBDb2RlYyB7XG4gIC8qKiBUaGUgNC1jaGFyYWN0ZXIgZm9ybWF0IHByZWZpeCBpZGVudGlmaWVyIChlLmcuIFwiZGV2bFwiLCBcImNib3JcIiwgXCJqc29uXCIpICovXG4gIHJlYWRvbmx5IGZvcm1hdFByZWZpeDogRm9ybWF0UHJlZml4O1xuXG4gIC8qKlxuICAgKiBTZXJpYWxpemUgYSB2YWx1ZSB0byBieXRlcy5cbiAgICpcbiAgICogVGhlIGNvZGVjIGhhbmRsZXMgYWxsIHN1cHBvcnRlZCB0eXBlcyBpbnRlcm5hbGx5IGJhc2VkIG9uIHRoZSBtb2RlLlxuICAgKlxuICAgKiBAcGFyYW0gdmFsdWUgLSBUaGUgdmFsdWUgdG8gc2VyaWFsaXplXG4gICAqIEBwYXJhbSBtb2RlIC0gVGhlIHNlcmlhbGl6YXRpb24gbW9kZVxuICAgKiBAcGFyYW0gb3B0aW9ucyAtIE9wdGlvbmFsIGdsb2JhbCwgZXh0cmEgcmVkdWNlcnMvcmV2aXZlcnNcbiAgICogQHJldHVybnMgVGhlIHNlcmlhbGl6ZWQgcGF5bG9hZCAod2l0aG91dCBmb3JtYXQgcHJlZml4KVxuICAgKi9cbiAgc2VyaWFsaXplKFxuICAgIHZhbHVlOiB1bmtub3duLFxuICAgIG1vZGU6IFNlcmlhbGl6YXRpb25Nb2RlLFxuICAgIG9wdGlvbnM/OiBDb2RlY09wdGlvbnNcbiAgKTogVWludDhBcnJheTtcblxuICAvKipcbiAgICogRGVzZXJpYWxpemUgYnl0ZXMgYmFjayB0byBhIHZhbHVlLlxuICAgKlxuICAgKiBUaGUgY29kZWMgaGFuZGxlcyBhbGwgc3VwcG9ydGVkIHR5cGVzIGludGVybmFsbHkgYmFzZWQgb24gdGhlIG1vZGUuXG4gICAqXG4gICAqIEBwYXJhbSBkYXRhIC0gVGhlIHNlcmlhbGl6ZWQgcGF5bG9hZCAod2l0aG91dCBmb3JtYXQgcHJlZml4KVxuICAgKiBAcGFyYW0gbW9kZSAtIFRoZSBzZXJpYWxpemF0aW9uIG1vZGVcbiAgICogQHBhcmFtIG9wdGlvbnMgLSBPcHRpb25hbCBnbG9iYWwsIGV4dHJhIHJldml2ZXJzXG4gICAqIEByZXR1cm5zIFRoZSBkZXNlcmlhbGl6ZWQgdmFsdWVcbiAgICovXG4gIGRlc2VyaWFsaXplKFxuICAgIGRhdGE6IFVpbnQ4QXJyYXksXG4gICAgbW9kZTogU2VyaWFsaXphdGlvbk1vZGUsXG4gICAgb3B0aW9ucz86IENvZGVjT3B0aW9uc1xuICApOiB1bmtub3duO1xuXG4gIC8qKlxuICAgKiBEZXNlcmlhbGl6ZSBsZWdhY3kgKHByZS1mb3JtYXQtcHJlZml4KSBkYXRhLlxuICAgKiBVc2VkIGZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eSB3aXRoIHNwZWNWZXJzaW9uIDEgcnVucyB0aGF0IHN0b3JlZFxuICAgKiBkYXRhIGFzIHBsYWluIEpTT04gYXJyYXlzIGluc3RlYWQgb2YgYmluYXJ5LlxuICAgKlxuICAgKiBAcGFyYW0gZGF0YSAtIFRoZSBsZWdhY3kgZGF0YVxuICAgKiBAcGFyYW0gbW9kZSAtIFRoZSBzZXJpYWxpemF0aW9uIG1vZGVcbiAgICogQHBhcmFtIG9wdGlvbnMgLSBPcHRpb25hbCBnbG9iYWwsIGV4dHJhIHJldml2ZXJzXG4gICAqIEByZXR1cm5zIFRoZSBkZXNlcmlhbGl6ZWQgdmFsdWVcbiAgICovXG4gIGRlc2VyaWFsaXplTGVnYWN5PyhcbiAgICBkYXRhOiB1bmtub3duLFxuICAgIG1vZGU6IFNlcmlhbGl6YXRpb25Nb2RlLFxuICAgIG9wdGlvbnM/OiBDb2RlY09wdGlvbnNcbiAgKTogdW5rbm93bjtcbn1cbiJdfQ==
17
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29kZWMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvc2VyaWFsaXphdGlvbi9jb2RlYy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7R0FjRyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQ29kZWMgaW50ZXJmYWNlIGZvciBzZXJpYWxpemF0aW9uIGZvcm1hdHMuXG4gKlxuICogQSBjb2RlYyBoYW5kbGVzIHRoZSBjb3JlIHNlcmlhbGl6ZS9kZXNlcmlhbGl6ZSBsb2dpYyBmb3IgYSBzcGVjaWZpY1xuICogd2lyZSBmb3JtYXQgKGRldmFsdWUsIENCT1IsIEpTT04sIGV0Yy4pLiBFYWNoIGNvZGVjIGlzIHJlc3BvbnNpYmxlXG4gKiBmb3IgaGFuZGxpbmcgYWxsIHN1cHBvcnRlZCBkYXRhIHR5cGVzIGludGVybmFsbHk7IHRoZSBjYWxsZXIgb25seVxuICogc3BlY2lmaWVzIHdoaWNoIHNlcmlhbGl6YXRpb24gbW9kZSB0byB1c2UuXG4gKlxuICogLSAqKmRldmFsdWUqKjogVXNlcyBjdXN0b20gcmVkdWNlcnMvcmV2aXZlcnMgZm9yIERhdGUsIEVycm9yLCBNYXAsIFNldCxcbiAqICAgdHlwZWQgYXJyYXlzLCBjbGFzcyBpbnN0YW5jZXMsIGV0Yy5cbiAqIC0gKipjYm9yKio6IFdvdWxkIGhhbmRsZSBEYXRlLCB0eXBlZCBhcnJheXMsIE1hcCwgU2V0IG5hdGl2ZWx5IHZpYSB0aGVcbiAqICAgQ0JPUiB0eXBlIHN5c3RlbS4gQ2xhc3MgaW5zdGFuY2VzIHdvdWxkIHN0aWxsIG5lZWQgY3VzdG9tIGhhbmRsaW5nLlxuICogLSAqKmpzb24qKjogV291bGQgb25seSBzdXBwb3J0IHN0YW5kYXJkIEpTT04gdHlwZXMgKHByaW1pdGl2ZXMsIGFycmF5cyxcbiAqICAgcGxhaW4gb2JqZWN0cykuIE5vIERhdGUsIE1hcCwgU2V0LCB0eXBlZCBhcnJheXMsIGV0Yy5cbiAqL1xuXG5pbXBvcnQgdHlwZSB7IENvbXByZXNzaW9uU3RhdHMgfSBmcm9tICcuL2NvbXByZXNzaW9uLmpzJztcbmltcG9ydCB0eXBlIHsgR3Vlc3RDb2RlU3RhdHMgfSBmcm9tICcuL2hhcmRlbmVkLmpzJztcbmltcG9ydCB0eXBlIHsgRm9ybWF0UHJlZml4IH0gZnJvbSAnLi90eXBlcy5qcyc7XG5cbi8qKlxuICogVGhlIHNlcmlhbGl6YXRpb24gbW9kZSBkZXRlcm1pbmVzIHdoaWNoIHR5cGVzIGFyZSBzdXBwb3J0ZWQgYW5kIGhvd1xuICogdGhleSdyZSBoYW5kbGVkLiBEaWZmZXJlbnQgbW9kZXMgY29tcG9zZSBkaWZmZXJlbnQgc2V0cyBvZiB0eXBlIGhhbmRsZXJzLlxuICpcbiAqIC0gYHdvcmtmbG93YDogUnVucyBpbnNpZGUgdGhlIHdvcmtmbG93IFZNLiBJbmNsdWRlcyBjbGFzcyBzZXJpYWxpemF0aW9uLFxuICogICBzdGVwIGZ1bmN0aW9uIHNlcmlhbGl6YXRpb24uIE5vIHN0cmVhbSBoYW5kbGluZy5cbiAqIC0gYHN0ZXBgOiBSdW5zIGluIHRoZSBzdGVwIGV4ZWN1dG9yIChOb2RlLmpzKS4gSW5jbHVkZXMgY2xhc3Mgc2VyaWFsaXphdGlvbi5cbiAqICAgTm8gc3RlcCBmdW5jdGlvbiBzZXJpYWxpemF0aW9uLiBTdHJlYW0gaGFuZGxpbmcgYXQgY2FsbCBzaXRlcy5cbiAqIC0gYGNsaWVudGA6IFJ1bnMgb24gdGhlIGNsaWVudCBzaWRlLiBJbmNsdWRlcyBjbGFzcyBzZXJpYWxpemF0aW9uLlxuICogICBObyBzdGVwIGZ1bmN0aW9uIHNlcmlhbGl6YXRpb24uIFN0cmVhbSBoYW5kbGluZyBhdCBjYWxsIHNpdGVzLlxuICovXG5leHBvcnQgdHlwZSBTZXJpYWxpemF0aW9uTW9kZSA9ICd3b3JrZmxvdycgfCAnc3RlcCcgfCAnY2xpZW50JztcblxuLyoqXG4gKiBPcHRpb25zIHBhc3NlZCB0byBjb2RlYyBzZXJpYWxpemUvZGVzZXJpYWxpemUgdG8gc3VwcG9ydCBWTS1jb250ZXh0XG4gKiBzZXJpYWxpemF0aW9uIGFuZCBtb2RlLXNwZWNpZmljIHR5cGUgaGFuZGxpbmcuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ29kZWNPcHRpb25zIHtcbiAgLyoqXG4gICAqIFRoZSBnbG9iYWwgb2JqZWN0IHRvIHVzZSBmb3IgYGluc3RhbmNlb2ZgIGNoZWNrcyBhbmQgY29uc3RydWN0b3JzLlxuICAgKiBEZWZhdWx0cyB0byBgZ2xvYmFsVGhpc2AuIE11c3QgYmUgc2V0IHRvIHRoZSBWTSdzIGdsb2JhbCB3aGVuXG4gICAqIHNlcmlhbGl6aW5nL2Rlc2VyaWFsaXppbmcgZGF0YSB0aGF0IGNyb3NzZXMgVk0gYm91bmRhcmllcy5cbiAgICovXG4gIGdsb2JhbD86IFJlY29yZDxzdHJpbmcsIGFueT47XG5cbiAgLyoqXG4gICAqIEFkZGl0aW9uYWwgcmVkdWNlcnMgdG8gbWVyZ2UgaW50byB0aGUgbW9kZSdzIGRlZmF1bHQgcmVkdWNlcnMuXG4gICAqIFVzZWQgYnkgZGVoeWRyYXRlL2h5ZHJhdGUgZnVuY3Rpb25zIHRoYXQgbmVlZCBzdHJlYW0gaGFuZGxpbmdcbiAgICogb3Igb3RoZXIgbW9kZS1zcGVjaWZpYyB0eXBlIHJlZHVjZXJzLlxuICAgKi9cbiAgZXh0cmFSZWR1Y2Vycz86IFJlY29yZDxzdHJpbmcsICh2YWx1ZTogYW55KSA9PiBhbnk+O1xuXG4gIC8qKlxuICAgKiBBZGRpdGlvbmFsIHJldml2ZXJzIHRvIG1lcmdlIGludG8gdGhlIG1vZGUncyBkZWZhdWx0IHJldml2ZXJzLlxuICAgKiBVc2VkIGJ5IGRlaHlkcmF0ZS9oeWRyYXRlIGZ1bmN0aW9ucyB0aGF0IG5lZWQgc3RyZWFtIGhhbmRsaW5nXG4gICAqIG9yIG90aGVyIG1vZGUtc3BlY2lmaWMgdHlwZSByZXZpdmVycy5cbiAgICovXG4gIGV4dHJhUmV2aXZlcnM/OiBSZWNvcmQ8c3RyaW5nLCAodmFsdWU6IGFueSkgPT4gYW55PjtcblxuICAvKipcbiAgICogV2hldGhlciB0byBjb21wcmVzcyB0aGUgc2VyaWFsaXplZCBwYXlsb2FkICh3cml0ZSBzaWRlIG9ubHk7IHpzdGQgaXNcbiAgICogcHJlZmVycmVkIGFuZCBnemlwIGlzIHRoZSBwb3J0YWJsZSBmYWxsYmFjaykuIFJlYWRzIGRpc3BhdGNoIGNvbXByZXNzZWRcbiAgICogcGF5bG9hZHMgYnkgZm9ybWF0IHByZWZpeDsgenN0ZCBkZWNvZGluZyBzdGlsbCByZXF1aXJlcyBydW50aW1lIG9yXG4gICAqIHJlZ2lzdGVyZWQgZGVjb2RlciBzdXBwb3J0LiBNdXN0IG9ubHkgYmUgZW5hYmxlZCB3aGVuIHRoZSB0YXJnZXQgcnVuXG4gICAqIHN1cHBvcnRzIGNvbXByZXNzZWQgcGF5bG9hZHM6XG4gICAqIHJ1biBzcGVjVmVyc2lvbiA+PSBTUEVDX1ZFUlNJT05fU1VQUE9SVFNfQ09NUFJFU1NJT04sIGFuZCBmb3JcbiAgICogY3Jvc3MtZGVwbG95bWVudCB3cml0ZXMgdGhlIHRhcmdldCBkZXBsb3ltZW50J3MgY2FwYWJpbGl0aWVzIChzZWVcbiAgICogYGdldFJ1bkNhcGFiaWxpdGllc2AgaW4gY2FwYWJpbGl0aWVzLnRzKS4gRGVmYXVsdHMgdG8gYGZhbHNlYC5cbiAgICovXG4gIGNvbXByZXNzaW9uPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogT3B0aW9uYWwgdGVsZW1ldHJ5IHNpbmsgcG9wdWxhdGVkIGJ5IHRoZSBjb21wcmVzc2lvbiBsYXllciB3aXRoIHdoYXRcbiAgICogaXQgZGlkIHRvIHRoZSBwYXlsb2FkICh3aGV0aGVyIGl0IGNvbXByZXNzZWQsIGxvZ2ljYWwgdnMgc3RvcmVkIHNpemUpLlxuICAgKiBVc2VkIGJ5IHRoZSBkZWh5ZHJhdGUvaHlkcmF0ZSB3cmFwcGVycyB0byBlbWl0IE9UZWwgc3BhbiBhdHRyaWJ1dGVzLlxuICAgKi9cbiAgY29tcHJlc3Npb25TdGF0cz86IENvbXByZXNzaW9uU3RhdHM7XG5cbiAgLyoqXG4gICAqIE9wdGlvbmFsIHNpbmsgcG9wdWxhdGVkIGJ5IHRoZSBoYXJkZW5lZCBzZXJpYWxpemVyIHdpdGggZXZlcnlcbiAgICogd29ya2Zsb3cgKGd1ZXN0KSBjb2RlIGV4ZWN1dGlvbiB0aGF0IHNlcmlhbGl6YXRpb24gY291bGQgbm90IGF2b2lkOlxuICAgKiBnZXR0ZXJzLCBwcm94aWVzLCBhbmQgY3VzdG9tIGBbV09SS0ZMT1dfU0VSSUFMSVpFXWAgbWV0aG9kcy4gQSBub24tZW1wdHlcbiAgICogYGV4ZWN1dGlvbnNgIGFycmF5IG1lYW5zIHNlcmlhbGl6YXRpb24gbWF5IGhhdmUgcGVydHVyYmVkIFZNIHN0YXRlXG4gICAqIChpdCBydW5zIGV4YWN0bHkgb25jZSBwZXIgcGF5bG9hZCBhbmQgaXMgbmV2ZXIgcmVwbGF5ZWQsIHNvIGFueSBzaWRlXG4gICAqIGVmZmVjdCBpdCB0cmlnZ2VycyBkaXZlcmdlcyBmcm9tIHJlcGxheSkuXG4gICAqXG4gICAqIEV2ZXJ5IGRlaHlkcmF0ZSBwYXRoIGFscmVhZHkgcmVwb3J0cyB0aGlzIGFzIHNwYW4gYXR0cmlidXRlcy4gUGFzc2luZyBhXG4gICAqIHNpbmsgaXMgZm9yIGNhbGxlcnMgdGhhdCBuZWVkIHRoZSBleGVjdXRpb25zICpwcm9ncmFtbWF0aWNhbGx5Kiwgc3VjaFxuICAgKiBhcyBhIHJldGFpbmVkLVZNIGdhdGUgZGVjaWRpbmcgd2hldGhlciB0aGUgVk0gaXMgc3RpbGwgcmV1c2FibGUuIE5vIGNhbGxlclxuICAgKiBkb2VzIHRoYXQgeWV0LCBzbyBub3RoaW5nIGluIHRoZSBydW50aW1lIGN1cnJlbnRseSBwYXNzZXMgb25lLlxuICAgKlxuICAgKiBTZXJpYWxpemUgc2lkZSBvbmx5LlxuICAgKi9cbiAgZ3Vlc3RDb2RlU3RhdHM/OiBHdWVzdENvZGVTdGF0cztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBDb2RlYyB7XG4gIC8qKiBUaGUgNC1jaGFyYWN0ZXIgZm9ybWF0IHByZWZpeCBpZGVudGlmaWVyIChlLmcuIFwiZGV2bFwiLCBcImNib3JcIiwgXCJqc29uXCIpICovXG4gIHJlYWRvbmx5IGZvcm1hdFByZWZpeDogRm9ybWF0UHJlZml4O1xuXG4gIC8qKlxuICAgKiBTZXJpYWxpemUgYSB2YWx1ZSB0byBieXRlcy5cbiAgICpcbiAgICogVGhlIGNvZGVjIGhhbmRsZXMgYWxsIHN1cHBvcnRlZCB0eXBlcyBpbnRlcm5hbGx5IGJhc2VkIG9uIHRoZSBtb2RlLlxuICAgKlxuICAgKiBAcGFyYW0gdmFsdWUgLSBUaGUgdmFsdWUgdG8gc2VyaWFsaXplXG4gICAqIEBwYXJhbSBtb2RlIC0gVGhlIHNlcmlhbGl6YXRpb24gbW9kZVxuICAgKiBAcGFyYW0gb3B0aW9ucyAtIE9wdGlvbmFsIGdsb2JhbCwgZXh0cmEgcmVkdWNlcnMvcmV2aXZlcnNcbiAgICogQHJldHVybnMgVGhlIHNlcmlhbGl6ZWQgcGF5bG9hZCAod2l0aG91dCBmb3JtYXQgcHJlZml4KVxuICAgKi9cbiAgc2VyaWFsaXplKFxuICAgIHZhbHVlOiB1bmtub3duLFxuICAgIG1vZGU6IFNlcmlhbGl6YXRpb25Nb2RlLFxuICAgIG9wdGlvbnM/OiBDb2RlY09wdGlvbnNcbiAgKTogVWludDhBcnJheTtcblxuICAvKipcbiAgICogRGVzZXJpYWxpemUgYnl0ZXMgYmFjayB0byBhIHZhbHVlLlxuICAgKlxuICAgKiBUaGUgY29kZWMgaGFuZGxlcyBhbGwgc3VwcG9ydGVkIHR5cGVzIGludGVybmFsbHkgYmFzZWQgb24gdGhlIG1vZGUuXG4gICAqXG4gICAqIEBwYXJhbSBkYXRhIC0gVGhlIHNlcmlhbGl6ZWQgcGF5bG9hZCAod2l0aG91dCBmb3JtYXQgcHJlZml4KVxuICAgKiBAcGFyYW0gbW9kZSAtIFRoZSBzZXJpYWxpemF0aW9uIG1vZGVcbiAgICogQHBhcmFtIG9wdGlvbnMgLSBPcHRpb25hbCBnbG9iYWwsIGV4dHJhIHJldml2ZXJzXG4gICAqIEByZXR1cm5zIFRoZSBkZXNlcmlhbGl6ZWQgdmFsdWVcbiAgICovXG4gIGRlc2VyaWFsaXplKFxuICAgIGRhdGE6IFVpbnQ4QXJyYXksXG4gICAgbW9kZTogU2VyaWFsaXphdGlvbk1vZGUsXG4gICAgb3B0aW9ucz86IENvZGVjT3B0aW9uc1xuICApOiB1bmtub3duO1xuXG4gIC8qKlxuICAgKiBEZXNlcmlhbGl6ZSBsZWdhY3kgKHByZS1mb3JtYXQtcHJlZml4KSBkYXRhLlxuICAgKiBVc2VkIGZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eSB3aXRoIHNwZWNWZXJzaW9uIDEgcnVucyB0aGF0IHN0b3JlZFxuICAgKiBkYXRhIGFzIHBsYWluIEpTT04gYXJyYXlzIGluc3RlYWQgb2YgYmluYXJ5LlxuICAgKlxuICAgKiBAcGFyYW0gZGF0YSAtIFRoZSBsZWdhY3kgZGF0YVxuICAgKiBAcGFyYW0gbW9kZSAtIFRoZSBzZXJpYWxpemF0aW9uIG1vZGVcbiAgICogQHBhcmFtIG9wdGlvbnMgLSBPcHRpb25hbCBnbG9iYWwsIGV4dHJhIHJldml2ZXJzXG4gICAqIEByZXR1cm5zIFRoZSBkZXNlcmlhbGl6ZWQgdmFsdWVcbiAgICovXG4gIGRlc2VyaWFsaXplTGVnYWN5PyhcbiAgICBkYXRhOiB1bmtub3duLFxuICAgIG1vZGU6IFNlcmlhbGl6YXRpb25Nb2RlLFxuICAgIG9wdGlvbnM/OiBDb2RlY09wdGlvbnNcbiAgKTogdW5rbm93bjtcbn1cbiJdfQ==
@@ -0,0 +1,105 @@
1
+ /**
2
+ * Composable compression layer for serialized data.
3
+ *
4
+ * Wraps/unwraps serialized payloads with a compression codec, using the
5
+ * format prefix system to mark compressed data (e.g. 'zstd' or 'gzip'
6
+ * wrapping the inner format: 'zstd' + zstd('devl' + payload)).
7
+ *
8
+ * Codec selection (write side): zstd is preferred because it is markedly
9
+ * faster than gzip at a comparable-or-better ratio (see scripts/README.md),
10
+ * and compression runs at every step boundary so the write CPU is a
11
+ * per-step tax. zstd requires `node:zlib` >= 22.15 (Web
12
+ * `CompressionStream` has no zstd), so on a runtime without it we fall back
13
+ * to gzip via the portable
14
+ * `CompressionStream`. `WORKFLOW_COMPRESSION_CODEC=gzip` forces the
15
+ * portable codec.
16
+ *
17
+ * Read side: dispatch on the format prefix, so both 'zstd' and 'gzip'
18
+ * payloads are always decodable regardless of which codec wrote them.
19
+ * (The browser o11y read path decodes zstd via a registered WASM decoder,
20
+ * see `serialization-format.ts`; this module's `decompress` is the Node
21
+ * runtime/replay path and uses `node:zlib`.)
22
+ *
23
+ * Layering order with encryption: compression is applied BEFORE
24
+ * encryption (encr(zstd(devl))): encrypted bytes are high-entropy and
25
+ * do not compress, so the reverse order would be a no-op.
26
+ *
27
+ * Compression is conditional:
28
+ * - Payloads smaller than {@link COMPRESSION_MIN_BYTES} are passed
29
+ * through unchanged (codec overhead isn't worth it).
30
+ * - If the compressed result isn't meaningfully smaller than the
31
+ * original (see {@link COMPRESSION_MIN_SAVINGS_RATIO}), the original
32
+ * is kept. This protects already-compressed binary payloads (images,
33
+ * archives, etc.) from wasted CPU and size inflation.
34
+ */
35
+ /**
36
+ * Payloads below this size are never compressed. The 4-byte format
37
+ * prefix + codec header/trailer overhead means small payloads gain
38
+ * nothing, and tiny ones would grow.
39
+ */
40
+ export declare const COMPRESSION_MIN_BYTES = 1024;
41
+ /**
42
+ * Compression must shave off at least this fraction of the payload
43
+ * size to be kept; otherwise the uncompressed original is stored.
44
+ * Guards against incompressible (already-compressed / high-entropy)
45
+ * data paying a permanent decompression tax for a negligible win.
46
+ */
47
+ export declare const COMPRESSION_MIN_SAVINGS_RATIO = 0.05;
48
+ /** Which codec compressed a payload (or `none` when stored uncompressed). */
49
+ export type CompressionCodec = 'zstd' | 'gzip' | 'none';
50
+ /**
51
+ * Telemetry sink describing what the compression layer did to a payload.
52
+ * Populated by {@link compress} (write) and {@link decompress} (read) when
53
+ * a `stats` object is passed. Sizes are measured at the compression
54
+ * boundary (i.e. before encryption is layered on the write side and after
55
+ * decryption on the read side), so they reflect compression's effect, not
56
+ * the at-rest size (which also includes the `encr` envelope and, on some
57
+ * backends, base64 expansion).
58
+ *
59
+ * Field meanings are identical for both directions:
60
+ * - `uncompressedBytes`: the logical (devalue-prefixed) payload size.
61
+ * - `storedBytes`: the size handed to / read from storage (compressed when
62
+ * a codec applied, otherwise equal to `uncompressedBytes`).
63
+ * - `codec`: which codec applied (`none` when stored uncompressed).
64
+ */
65
+ export interface CompressionStats {
66
+ /** True once the compression layer ran (i.e. saw binary data). */
67
+ recorded?: boolean;
68
+ /** Whether a codec was applied (write) or present (read). */
69
+ compressed?: boolean;
70
+ /** Which codec applied / was present. */
71
+ codec?: CompressionCodec;
72
+ /** Logical, uncompressed payload size in bytes. */
73
+ uncompressedBytes?: number;
74
+ /** Stored (post-compression) payload size in bytes. */
75
+ storedBytes?: number;
76
+ }
77
+ /**
78
+ * Compress a format-prefixed payload if compression is enabled for the
79
+ * target run and the payload is worth compressing.
80
+ *
81
+ * @param data - The format-prefixed serialized data (e.g. 'devl' + bytes)
82
+ * @param enabled - Whether the target run supports compressed payloads
83
+ * (run specVersion >= SPEC_VERSION_SUPPORTS_COMPRESSION, and for
84
+ * cross-deployment writes, the target deployment's capabilities; see
85
+ * `getRunCapabilities` in capabilities.ts). zstd and gzip read
86
+ * support co-ship, so a single boolean is sufficient.
87
+ * @param stats - Optional telemetry sink; populated when `data` is binary.
88
+ * @returns The compressed data with a codec prefix, or the original data
89
+ * when compression is disabled, unavailable, or not worthwhile.
90
+ */
91
+ export declare function compress(data: Uint8Array | unknown, enabled: boolean, stats?: CompressionStats): Promise<Uint8Array | unknown>;
92
+ /**
93
+ * Decompress a format-prefixed payload if it's compressed.
94
+ * Dispatches on the prefix ('zstd' or 'gzip') and inflates the inner
95
+ * payload (which carries its own format prefix, e.g. 'devl').
96
+ *
97
+ * Non-compressed data (including non-binary legacy data) is returned
98
+ * unchanged, so this is safe to apply unconditionally on read paths.
99
+ */
100
+ export declare function decompress(data: Uint8Array | unknown, stats?: CompressionStats): Promise<Uint8Array | unknown>;
101
+ /**
102
+ * Check if data is compressed (has a 'zstd' or 'gzip' format prefix).
103
+ */
104
+ export declare function isCompressed(data: Uint8Array | unknown): boolean;
105
+ //# sourceMappingURL=compression.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"compression.d.ts","sourceRoot":"","sources":["../../src/serialization/compression.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiCG;AASH;;;;GAIG;AACH,eAAO,MAAM,qBAAqB,OAAO,CAAC;AAE1C;;;;;GAKG;AACH,eAAO,MAAM,6BAA6B,OAAO,CAAC;AAKlD,6EAA6E;AAC7E,MAAM,MAAM,gBAAgB,GAAG,MAAM,GAAG,MAAM,GAAG,MAAM,CAAC;AA4IxD;;;;;;;;;;;;;;GAcG;AACH,MAAM,WAAW,gBAAgB;IAC/B,kEAAkE;IAClE,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,6DAA6D;IAC7D,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,yCAAyC;IACzC,KAAK,CAAC,EAAE,gBAAgB,CAAC;IACzB,mDAAmD;IACnD,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,uDAAuD;IACvD,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AA6BD;;;;;;;;;;;;;GAaG;AACH,wBAAsB,QAAQ,CAC5B,IAAI,EAAE,UAAU,GAAG,OAAO,EAC1B,OAAO,EAAE,OAAO,EAChB,KAAK,CAAC,EAAE,gBAAgB,GACvB,OAAO,CAAC,UAAU,GAAG,OAAO,CAAC,CA4B/B;AAED;;;;;;;GAOG;AACH,wBAAsB,UAAU,CAC9B,IAAI,EAAE,UAAU,GAAG,OAAO,EAC1B,KAAK,CAAC,EAAE,gBAAgB,GACvB,OAAO,CAAC,UAAU,GAAG,OAAO,CAAC,CA2B/B;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE,UAAU,GAAG,OAAO,GAAG,OAAO,CAKhE"}