@workflow/core 5.0.0-beta.4 → 5.0.0-beta.40
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.
- package/dist/attribute-changes.d.ts +7 -0
- package/dist/attribute-changes.d.ts.map +1 -0
- package/dist/attribute-changes.js +25 -0
- package/dist/capabilities.d.ts +33 -1
- package/dist/capabilities.d.ts.map +1 -1
- package/dist/capabilities.js +71 -4
- package/dist/capture-stack.d.ts +16 -0
- package/dist/capture-stack.d.ts.map +1 -0
- package/dist/capture-stack.js +21 -0
- package/dist/class-serialization.d.ts +32 -0
- package/dist/class-serialization.d.ts.map +1 -1
- package/dist/class-serialization.js +37 -1
- package/dist/classify-error.d.ts +26 -3
- package/dist/classify-error.d.ts.map +1 -1
- package/dist/classify-error.js +109 -6
- package/dist/context-errors.d.ts +27 -0
- package/dist/context-errors.d.ts.map +1 -0
- package/dist/context-errors.js +101 -0
- package/dist/context-violation-error.d.ts +97 -0
- package/dist/context-violation-error.d.ts.map +1 -0
- package/dist/context-violation-error.js +149 -0
- package/dist/correlation-id.d.ts +109 -0
- package/dist/correlation-id.d.ts.map +1 -0
- package/dist/correlation-id.js +139 -0
- package/dist/create-hook.d.ts +62 -4
- package/dist/create-hook.d.ts.map +1 -1
- package/dist/create-hook.js +4 -3
- package/dist/define-hook.d.ts.map +1 -1
- package/dist/define-hook.js +20 -5
- package/dist/describe-error.d.ts +70 -0
- package/dist/describe-error.d.ts.map +1 -0
- package/dist/describe-error.js +189 -0
- package/dist/encryption.d.ts +37 -3
- package/dist/encryption.d.ts.map +1 -1
- package/dist/encryption.js +97 -31
- package/dist/events-consumer.d.ts +26 -1
- package/dist/events-consumer.d.ts.map +1 -1
- package/dist/events-consumer.js +105 -18
- package/dist/flushable-stream.d.ts +65 -10
- package/dist/flushable-stream.d.ts.map +1 -1
- package/dist/flushable-stream.js +131 -18
- package/dist/global.d.ts +37 -1
- package/dist/global.d.ts.map +1 -1
- package/dist/global.js +21 -3
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -1
- package/dist/log-format.d.ts +25 -0
- package/dist/log-format.d.ts.map +1 -0
- package/dist/log-format.js +250 -0
- package/dist/logger.d.ts +29 -30
- package/dist/logger.d.ts.map +1 -1
- package/dist/logger.js +82 -32
- package/dist/private.d.ts +178 -9
- package/dist/private.d.ts.map +1 -1
- package/dist/private.js +273 -9
- package/dist/replay-payload-cache.d.ts +68 -0
- package/dist/replay-payload-cache.d.ts.map +1 -0
- package/dist/replay-payload-cache.js +160 -0
- package/dist/runtime/compute-instance.d.ts +12 -0
- package/dist/runtime/compute-instance.d.ts.map +1 -0
- package/dist/runtime/compute-instance.js +13 -0
- package/dist/runtime/constants.d.ts +237 -0
- package/dist/runtime/constants.d.ts.map +1 -1
- package/dist/runtime/constants.js +405 -15
- package/dist/runtime/count-step-started-events.d.ts +52 -0
- package/dist/runtime/count-step-started-events.d.ts.map +1 -0
- package/dist/runtime/count-step-started-events.js +72 -0
- package/dist/runtime/deployment-guard.d.ts +99 -0
- package/dist/runtime/deployment-guard.d.ts.map +1 -0
- package/dist/runtime/deployment-guard.js +154 -0
- package/dist/runtime/get-port-lazy.d.ts +25 -0
- package/dist/runtime/get-port-lazy.d.ts.map +1 -0
- package/dist/runtime/get-port-lazy.js +92 -0
- package/dist/runtime/get-world-lazy.d.ts +23 -0
- package/dist/runtime/get-world-lazy.d.ts.map +1 -0
- package/dist/runtime/get-world-lazy.js +46 -0
- package/dist/runtime/helpers.d.ts +219 -10
- package/dist/runtime/helpers.d.ts.map +1 -1
- package/dist/runtime/helpers.js +414 -40
- package/dist/runtime/quickjs-assets.generated.d.ts +14 -0
- package/dist/runtime/quickjs-assets.generated.d.ts.map +1 -0
- package/dist/runtime/quickjs-assets.generated.js +30 -0
- package/dist/runtime/quickjs-entrypoint.d.ts +124 -0
- package/dist/runtime/quickjs-entrypoint.d.ts.map +1 -0
- package/dist/runtime/quickjs-entrypoint.js +1429 -0
- package/dist/runtime/quickjs-runtime.d.ts +193 -0
- package/dist/runtime/quickjs-runtime.d.ts.map +1 -0
- package/dist/runtime/quickjs-runtime.js +1944 -0
- package/dist/runtime/replay-budget.d.ts +98 -0
- package/dist/runtime/replay-budget.d.ts.map +1 -0
- package/dist/runtime/replay-budget.js +192 -0
- package/dist/runtime/replay-recovery-reporter.d.ts +36 -0
- package/dist/runtime/replay-recovery-reporter.d.ts.map +1 -0
- package/dist/runtime/replay-recovery-reporter.js +64 -0
- package/dist/runtime/resume-hook.d.ts +27 -4
- package/dist/runtime/resume-hook.d.ts.map +1 -1
- package/dist/runtime/resume-hook.js +448 -76
- package/dist/runtime/run-id-time.d.ts +19 -0
- package/dist/runtime/run-id-time.d.ts.map +1 -0
- package/dist/runtime/run-id-time.js +42 -0
- package/dist/runtime/run.d.ts +8 -2
- package/dist/runtime/run.d.ts.map +1 -1
- package/dist/runtime/run.js +62 -15
- package/dist/runtime/runs.d.ts +54 -3
- package/dist/runtime/runs.d.ts.map +1 -1
- package/dist/runtime/runs.js +117 -10
- package/dist/runtime/start.d.ts +70 -1
- package/dist/runtime/start.d.ts.map +1 -1
- package/dist/runtime/start.js +312 -54
- package/dist/runtime/step-executor.d.ts +177 -0
- package/dist/runtime/step-executor.d.ts.map +1 -0
- package/dist/runtime/step-executor.js +949 -0
- package/dist/runtime/step-latency.d.ts +197 -0
- package/dist/runtime/step-latency.d.ts.map +1 -0
- package/dist/runtime/step-latency.js +207 -0
- package/dist/runtime/step-ownership.d.ts +72 -0
- package/dist/runtime/step-ownership.d.ts.map +1 -0
- package/dist/runtime/step-ownership.js +114 -0
- package/dist/runtime/step-single-flight.d.ts +12 -0
- package/dist/runtime/step-single-flight.d.ts.map +1 -0
- package/dist/runtime/step-single-flight.js +69 -0
- package/dist/runtime/suspension-handler.d.ts +102 -7
- package/dist/runtime/suspension-handler.d.ts.map +1 -1
- package/dist/runtime/suspension-handler.js +439 -140
- package/dist/runtime/vm-mode.d.ts +44 -0
- package/dist/runtime/vm-mode.d.ts.map +1 -0
- package/dist/runtime/vm-mode.js +62 -0
- package/dist/runtime/vm-serde-bundle.generated.d.ts +14 -0
- package/dist/runtime/vm-serde-bundle.generated.d.ts.map +1 -0
- package/dist/runtime/vm-serde-bundle.generated.js +16 -0
- package/dist/runtime/wait-continuation.d.ts +84 -0
- package/dist/runtime/wait-continuation.d.ts.map +1 -0
- package/dist/runtime/wait-continuation.js +105 -0
- package/dist/runtime/wait-until.d.ts +18 -0
- package/dist/runtime/wait-until.d.ts.map +1 -0
- package/dist/runtime/wait-until.js +42 -0
- package/dist/runtime/world-compatibility.d.ts +5 -0
- package/dist/runtime/world-compatibility.d.ts.map +1 -0
- package/dist/runtime/world-compatibility.js +12 -0
- package/dist/runtime/world-init.d.ts +50 -0
- package/dist/runtime/world-init.d.ts.map +1 -0
- package/dist/runtime/world-init.js +50 -0
- package/dist/runtime/world.d.ts +14 -2
- package/dist/runtime/world.d.ts.map +1 -1
- package/dist/runtime/world.js +101 -26
- package/dist/runtime.d.ts +17 -12
- package/dist/runtime.d.ts.map +1 -1
- package/dist/runtime.js +3078 -327
- package/dist/schemas.d.ts +1 -1
- package/dist/schemas.d.ts.map +1 -1
- package/dist/schemas.js +1 -1
- package/dist/sealed-box.d.ts +167 -0
- package/dist/sealed-box.d.ts.map +1 -0
- package/dist/sealed-box.js +571 -0
- package/dist/serialization/client.d.ts +17 -0
- package/dist/serialization/client.d.ts.map +1 -0
- package/dist/serialization/client.js +48 -0
- package/dist/serialization/codec-devalue-vm.d.ts +9 -0
- package/dist/serialization/codec-devalue-vm.d.ts.map +1 -0
- package/dist/serialization/codec-devalue-vm.js +137 -0
- package/dist/serialization/codec-devalue.d.ts +14 -0
- package/dist/serialization/codec-devalue.d.ts.map +1 -0
- package/dist/serialization/codec-devalue.js +105 -0
- package/dist/serialization/codec.d.ts +125 -0
- package/dist/serialization/codec.d.ts.map +1 -0
- package/dist/serialization/codec.js +17 -0
- package/dist/serialization/compression.d.ts +104 -0
- package/dist/serialization/compression.d.ts.map +1 -0
- package/dist/serialization/compression.js +260 -0
- package/dist/serialization/encryption.d.ts +134 -0
- package/dist/serialization/encryption.d.ts.map +1 -0
- package/dist/serialization/encryption.js +186 -0
- package/dist/serialization/errors.d.ts +34 -0
- package/dist/serialization/errors.d.ts.map +1 -0
- package/dist/serialization/errors.js +59 -0
- package/dist/serialization/format.d.ts +60 -0
- package/dist/serialization/format.d.ts.map +1 -0
- package/dist/serialization/format.js +97 -0
- package/dist/serialization/hardened.d.ts +155 -0
- package/dist/serialization/hardened.d.ts.map +1 -0
- package/dist/serialization/hardened.js +523 -0
- package/dist/serialization/index.d.ts +20 -0
- package/dist/serialization/index.d.ts.map +1 -0
- package/dist/serialization/index.js +22 -0
- package/dist/serialization/reducers/class-vm.d.ts +20 -0
- package/dist/serialization/reducers/class-vm.d.ts.map +1 -0
- package/dist/serialization/reducers/class-vm.js +77 -0
- package/dist/serialization/reducers/class.d.ts +11 -0
- package/dist/serialization/reducers/class.d.ts.map +1 -0
- package/dist/serialization/reducers/class.js +73 -0
- package/dist/serialization/reducers/common-vm.d.ts +15 -0
- package/dist/serialization/reducers/common-vm.d.ts.map +1 -0
- package/dist/serialization/reducers/common-vm.js +579 -0
- package/dist/serialization/reducers/common.d.ts +16 -0
- package/dist/serialization/reducers/common.d.ts.map +1 -0
- package/dist/serialization/reducers/common.js +478 -0
- package/dist/serialization/reducers/step-function-vm.d.ts +44 -0
- package/dist/serialization/reducers/step-function-vm.d.ts.map +1 -0
- package/dist/serialization/reducers/step-function-vm.js +97 -0
- package/dist/serialization/reducers/step-function.d.ts +35 -0
- package/dist/serialization/reducers/step-function.d.ts.map +1 -0
- package/dist/serialization/reducers/step-function.js +104 -0
- package/dist/serialization/step.d.ts +17 -0
- package/dist/serialization/step.d.ts.map +1 -0
- package/dist/serialization/step.js +48 -0
- package/dist/serialization/types.d.ts +273 -0
- package/dist/serialization/types.d.ts.map +1 -0
- package/dist/serialization/types.js +35 -0
- package/dist/serialization/vm-bundle-entry.d.ts +12 -0
- package/dist/serialization/vm-bundle-entry.d.ts.map +1 -0
- package/dist/serialization/vm-bundle-entry.js +58 -0
- package/dist/serialization/workflow-vm.d.ts +24 -0
- package/dist/serialization/workflow-vm.d.ts.map +1 -0
- package/dist/serialization/workflow-vm.js +66 -0
- package/dist/serialization/workflow.d.ts +29 -0
- package/dist/serialization/workflow.d.ts.map +1 -0
- package/dist/serialization/workflow.js +54 -0
- package/dist/serialization-format.d.ts +60 -4
- package/dist/serialization-format.d.ts.map +1 -1
- package/dist/serialization-format.js +276 -56
- package/dist/serialization.d.ts +374 -221
- package/dist/serialization.d.ts.map +1 -1
- package/dist/serialization.js +2300 -783
- package/dist/set-attributes.d.ts +13 -0
- package/dist/set-attributes.d.ts.map +1 -0
- package/dist/set-attributes.js +60 -0
- package/dist/sleep.d.ts.map +1 -1
- package/dist/sleep.js +3 -2
- package/dist/source-map.d.ts +25 -0
- package/dist/source-map.d.ts.map +1 -1
- package/dist/source-map.js +148 -10
- package/dist/step/context-storage.d.ts +61 -2
- package/dist/step/context-storage.d.ts.map +1 -1
- package/dist/step/context-storage.js +7 -5
- package/dist/step/get-closure-vars.d.ts.map +1 -1
- package/dist/step/get-closure-vars.js +3 -2
- package/dist/step/get-step-metadata.d.ts.map +1 -1
- package/dist/step/get-step-metadata.js +3 -2
- package/dist/step/get-workflow-metadata.d.ts.map +1 -1
- package/dist/step/get-workflow-metadata.js +3 -2
- package/dist/step/writable-stream.d.ts.map +1 -1
- package/dist/step/writable-stream.js +71 -7
- package/dist/step.d.ts.map +1 -1
- package/dist/step.js +226 -30
- package/dist/symbols.d.ts +54 -0
- package/dist/symbols.d.ts.map +1 -1
- package/dist/symbols.js +55 -1
- package/dist/telemetry/semantic-conventions.d.ts +242 -2
- package/dist/telemetry/semantic-conventions.d.ts.map +1 -1
- package/dist/telemetry/semantic-conventions.js +173 -1
- package/dist/telemetry.d.ts +73 -0
- package/dist/telemetry.d.ts.map +1 -1
- package/dist/telemetry.js +153 -16
- package/dist/types.d.ts +6 -0
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js +23 -1
- package/dist/util.d.ts +16 -6
- package/dist/util.d.ts.map +1 -1
- package/dist/util.js +25 -16
- package/dist/version.d.ts +1 -1
- package/dist/version.d.ts.map +1 -1
- package/dist/version.js +2 -2
- package/dist/vm/index.d.ts.map +1 -1
- package/dist/vm/index.js +77 -9
- package/dist/vm/script-cache.d.ts +28 -0
- package/dist/vm/script-cache.d.ts.map +1 -0
- package/dist/vm/script-cache.js +140 -0
- package/dist/workflow/abort-controller.d.ts +65 -0
- package/dist/workflow/abort-controller.d.ts.map +1 -0
- package/dist/workflow/abort-controller.js +314 -0
- package/dist/workflow/attribute-dispatcher.d.ts +6 -0
- package/dist/workflow/attribute-dispatcher.d.ts.map +1 -0
- package/dist/workflow/attribute-dispatcher.js +48 -0
- package/dist/workflow/create-hook.d.ts.map +1 -1
- package/dist/workflow/create-hook.js +25 -3
- package/dist/workflow/define-hook.d.ts +1 -1
- package/dist/workflow/define-hook.d.ts.map +1 -1
- package/dist/workflow/define-hook.js +8 -4
- package/dist/workflow/get-workflow-metadata.d.ts.map +1 -1
- package/dist/workflow/get-workflow-metadata.js +14 -3
- package/dist/workflow/hook.d.ts.map +1 -1
- package/dist/workflow/hook.js +303 -37
- package/dist/workflow/index.d.ts +1 -0
- package/dist/workflow/index.d.ts.map +1 -1
- package/dist/workflow/index.js +5 -3
- package/dist/workflow/set-attributes.d.ts +68 -0
- package/dist/workflow/set-attributes.d.ts.map +1 -0
- package/dist/workflow/set-attributes.js +60 -0
- package/dist/workflow/sleep.d.ts.map +1 -1
- package/dist/workflow/sleep.js +58 -9
- package/dist/workflow/world-init-stub.d.ts +15 -0
- package/dist/workflow/world-init-stub.d.ts.map +1 -0
- package/dist/workflow/world-init-stub.js +15 -0
- package/dist/workflow.d.ts +69 -3
- package/dist/workflow.d.ts.map +1 -1
- package/dist/workflow.js +791 -554
- package/docs/api-reference/create-hook.mdx +79 -0
- package/docs/api-reference/create-webhook.mdx +1 -0
- package/docs/api-reference/define-hook.mdx +26 -24
- package/docs/api-reference/fatal-error.mdx +29 -7
- package/docs/api-reference/fetch.mdx +8 -4
- package/docs/api-reference/index.mdx +3 -0
- package/docs/api-reference/set-attributes.mdx +61 -0
- package/docs/api-reference/sleep.mdx +1 -1
- package/docs/foundations/cancellation.mdx +459 -0
- package/docs/foundations/errors-and-retries.mdx +7 -3
- package/docs/foundations/hooks.mdx +29 -0
- package/docs/foundations/idempotency.mdx +243 -11
- package/docs/foundations/index.mdx +1 -23
- package/docs/foundations/meta.json +3 -1
- package/docs/foundations/serialization.mdx +77 -41
- package/docs/foundations/starting-workflows.mdx +79 -2
- package/docs/foundations/streaming.mdx +14 -23
- package/docs/foundations/versioning.mdx +263 -0
- package/docs/how-it-works/cancellation.mdx +287 -0
- package/docs/how-it-works/code-transform.mdx +21 -17
- package/docs/how-it-works/encryption.mdx +5 -5
- package/docs/how-it-works/event-sourcing.mdx +6 -6
- package/docs/how-it-works/framework-integrations.mdx +96 -337
- package/docs/how-it-works/meta.json +2 -1
- package/package.json +31 -13
- package/dist/runtime/step-handler.d.ts +0 -2
- package/dist/runtime/step-handler.d.ts.map +0 -1
- package/dist/runtime/step-handler.js +0 -678
|
@@ -0,0 +1,273 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared types for the serialization system.
|
|
3
|
+
*/
|
|
4
|
+
import type { RuntimeDecryptionErrorContext } from '@workflow/errors';
|
|
5
|
+
/**
|
|
6
|
+
* A format prefix is exactly 4 lowercase alphanumeric characters [a-z0-9].
|
|
7
|
+
*
|
|
8
|
+
* This is a branded string type — use `isFormatPrefix()` to validate
|
|
9
|
+
* at runtime. The `SerializationFormat` object provides well-known
|
|
10
|
+
* constants, but codecs may define additional prefixes.
|
|
11
|
+
*/
|
|
12
|
+
export type FormatPrefix = string & {
|
|
13
|
+
readonly __brand: 'FormatPrefix';
|
|
14
|
+
};
|
|
15
|
+
/**
|
|
16
|
+
* Runtime type guard for format prefix strings.
|
|
17
|
+
*
|
|
18
|
+
* Validates that a string is exactly 4 characters of [a-z0-9].
|
|
19
|
+
*/
|
|
20
|
+
export declare function isFormatPrefix(value: string): value is FormatPrefix;
|
|
21
|
+
/**
|
|
22
|
+
* Well-known format prefix constants. Codecs may define additional ones.
|
|
23
|
+
*/
|
|
24
|
+
export declare const SerializationFormat: {
|
|
25
|
+
/** devalue stringify/parse with TextEncoder/TextDecoder */
|
|
26
|
+
readonly DEVALUE_V1: FormatPrefix;
|
|
27
|
+
/** Encrypted payload (inner payload has its own format prefix) */
|
|
28
|
+
readonly ENCRYPTED: FormatPrefix;
|
|
29
|
+
/**
|
|
30
|
+
* Sealed payload — asymmetrically encrypted to a run's X25519 public key
|
|
31
|
+
* (inner payload has its own format prefix).
|
|
32
|
+
*
|
|
33
|
+
* Used for *cross-run* writes (hook payloads, forwarded stream frames),
|
|
34
|
+
* where the writer holds only the recipient run's public key and therefore
|
|
35
|
+
* cannot decrypt. A run's own payloads continue to use {@link ENCRYPTED}.
|
|
36
|
+
* See `sealed-box.ts` for the construction.
|
|
37
|
+
*/
|
|
38
|
+
readonly SEALED: FormatPrefix;
|
|
39
|
+
/** Gzip-compressed payload (inner payload has its own format prefix) */
|
|
40
|
+
readonly GZIP: FormatPrefix;
|
|
41
|
+
/** Zstandard-compressed payload (inner payload has its own format prefix) */
|
|
42
|
+
readonly ZSTD: FormatPrefix;
|
|
43
|
+
};
|
|
44
|
+
/**
|
|
45
|
+
* Wire-framing format identifier carried in the serialized
|
|
46
|
+
* `ReadableStream` ref's `framing` field.
|
|
47
|
+
*
|
|
48
|
+
* - absent / `'raw'`: chunks are written to the transport verbatim
|
|
49
|
+
* (legacy format — no auto-reconnect support).
|
|
50
|
+
* - `'framed-v1'`: each chunk is wrapped in a 4-byte big-endian length
|
|
51
|
+
* prefix, allowing the reader to identify chunk boundaries and
|
|
52
|
+
* transparently reconnect on transient stream errors.
|
|
53
|
+
*/
|
|
54
|
+
export type ByteStreamFraming = 'raw' | 'framed-v1';
|
|
55
|
+
/**
|
|
56
|
+
* Types that need specialized handling when serialized/deserialized.
|
|
57
|
+
* If a type is added here, it MUST also be added to the `Serializable`
|
|
58
|
+
* type in `schemas.ts`.
|
|
59
|
+
*/
|
|
60
|
+
export interface SerializableSpecial {
|
|
61
|
+
ArrayBuffer: string;
|
|
62
|
+
BigInt: string;
|
|
63
|
+
BigInt64Array: string;
|
|
64
|
+
BigUint64Array: string;
|
|
65
|
+
Date: string;
|
|
66
|
+
DOMException: {
|
|
67
|
+
message: string;
|
|
68
|
+
name: string;
|
|
69
|
+
stack?: string;
|
|
70
|
+
cause?: unknown;
|
|
71
|
+
};
|
|
72
|
+
FatalError: {
|
|
73
|
+
message: string;
|
|
74
|
+
stack?: string;
|
|
75
|
+
cause?: unknown;
|
|
76
|
+
};
|
|
77
|
+
Float32Array: string;
|
|
78
|
+
Float64Array: string;
|
|
79
|
+
Error: {
|
|
80
|
+
name: string;
|
|
81
|
+
message: string;
|
|
82
|
+
stack?: string;
|
|
83
|
+
cause?: unknown;
|
|
84
|
+
};
|
|
85
|
+
EvalError: {
|
|
86
|
+
message: string;
|
|
87
|
+
stack?: string;
|
|
88
|
+
cause?: unknown;
|
|
89
|
+
};
|
|
90
|
+
Headers: [string, string][];
|
|
91
|
+
HookConflictError: {
|
|
92
|
+
message: string;
|
|
93
|
+
stack?: string;
|
|
94
|
+
cause?: unknown;
|
|
95
|
+
token: string;
|
|
96
|
+
conflictingRunId?: string;
|
|
97
|
+
};
|
|
98
|
+
Int8Array: string;
|
|
99
|
+
Int16Array: string;
|
|
100
|
+
Int32Array: string;
|
|
101
|
+
Map: [any, any][];
|
|
102
|
+
RangeError: {
|
|
103
|
+
message: string;
|
|
104
|
+
stack?: string;
|
|
105
|
+
cause?: unknown;
|
|
106
|
+
};
|
|
107
|
+
ReadableStream: {
|
|
108
|
+
name: string;
|
|
109
|
+
type?: 'bytes';
|
|
110
|
+
startIndex?: number;
|
|
111
|
+
/**
|
|
112
|
+
* Wire-framing format for byte streams. See {@link ByteStreamFraming}
|
|
113
|
+
* and `getByteFramingStream` / `getByteUnframingStream`.
|
|
114
|
+
*
|
|
115
|
+
* Only meaningful when `type === 'bytes'`. Absent on object streams
|
|
116
|
+
* (which always use length-prefixed devalue framing) and on legacy
|
|
117
|
+
* byte streams written by SDKs that predate framing support — those
|
|
118
|
+
* are interpreted as `'raw'` by the consumer.
|
|
119
|
+
*/
|
|
120
|
+
framing?: ByteStreamFraming;
|
|
121
|
+
} | {
|
|
122
|
+
bodyInit: any;
|
|
123
|
+
};
|
|
124
|
+
ReferenceError: {
|
|
125
|
+
message: string;
|
|
126
|
+
stack?: string;
|
|
127
|
+
cause?: unknown;
|
|
128
|
+
};
|
|
129
|
+
RegExp: {
|
|
130
|
+
source: string;
|
|
131
|
+
flags: string;
|
|
132
|
+
};
|
|
133
|
+
/**
|
|
134
|
+
* `retryAfter` is serialized as a numeric epoch timestamp rather than a
|
|
135
|
+
* `Date` to be realm-safe. The Date reducer uses `instanceof global.Date`,
|
|
136
|
+
* which fails for Dates from a different VM realm.
|
|
137
|
+
*/
|
|
138
|
+
RetryableError: {
|
|
139
|
+
message: string;
|
|
140
|
+
stack?: string;
|
|
141
|
+
cause?: unknown;
|
|
142
|
+
retryAfter: number;
|
|
143
|
+
};
|
|
144
|
+
RuntimeDecryptionError: {
|
|
145
|
+
message: string;
|
|
146
|
+
stack?: string;
|
|
147
|
+
cause?: unknown;
|
|
148
|
+
context?: RuntimeDecryptionErrorContext;
|
|
149
|
+
};
|
|
150
|
+
Request: {
|
|
151
|
+
method: string;
|
|
152
|
+
url: string;
|
|
153
|
+
headers: Headers;
|
|
154
|
+
body: Request['body'];
|
|
155
|
+
duplex: Request['duplex'];
|
|
156
|
+
responseWritable?: WritableStream<Response>;
|
|
157
|
+
signal?: AbortSignal;
|
|
158
|
+
};
|
|
159
|
+
Response: {
|
|
160
|
+
type: Response['type'];
|
|
161
|
+
url: string;
|
|
162
|
+
status: number;
|
|
163
|
+
statusText: string;
|
|
164
|
+
headers: Headers;
|
|
165
|
+
body: Response['body'];
|
|
166
|
+
redirected: boolean;
|
|
167
|
+
};
|
|
168
|
+
Class: {
|
|
169
|
+
classId: string;
|
|
170
|
+
};
|
|
171
|
+
Instance: {
|
|
172
|
+
classId: string;
|
|
173
|
+
data: unknown;
|
|
174
|
+
};
|
|
175
|
+
Set: any[];
|
|
176
|
+
SyntaxError: {
|
|
177
|
+
message: string;
|
|
178
|
+
stack?: string;
|
|
179
|
+
cause?: unknown;
|
|
180
|
+
};
|
|
181
|
+
StepFunction: {
|
|
182
|
+
stepId: string;
|
|
183
|
+
closureVars?: Record<string, any>;
|
|
184
|
+
/**
|
|
185
|
+
* Captured lexical `this` for step proxies that were created via
|
|
186
|
+
* `useStep(...).bind(thisArg)` (the SWC plugin emits this for nested
|
|
187
|
+
* arrow steps that close over their enclosing function's `this`).
|
|
188
|
+
* The reviver re-binds the freshly-created proxy to this value so the
|
|
189
|
+
* binding survives serialization round-trips.
|
|
190
|
+
*/
|
|
191
|
+
boundThis?: unknown;
|
|
192
|
+
/**
|
|
193
|
+
* Prefilled arguments captured when the user (rather than the SWC
|
|
194
|
+
* plugin) called `useStep(...).bind(thisArg, x, y)`. The reviver
|
|
195
|
+
* re-applies these alongside `boundThis` so partial application
|
|
196
|
+
* survives serialization. The SWC plugin only ever emits
|
|
197
|
+
* `.bind(this)` with no extra args today; this slot exists so a
|
|
198
|
+
* hand-written `.bind(thisArg, x)` doesn't silently lose `x` after
|
|
199
|
+
* round-tripping through the reducer/reviver.
|
|
200
|
+
*/
|
|
201
|
+
boundArgs?: unknown[];
|
|
202
|
+
};
|
|
203
|
+
TypeError: {
|
|
204
|
+
message: string;
|
|
205
|
+
stack?: string;
|
|
206
|
+
cause?: unknown;
|
|
207
|
+
};
|
|
208
|
+
URIError: {
|
|
209
|
+
message: string;
|
|
210
|
+
stack?: string;
|
|
211
|
+
cause?: unknown;
|
|
212
|
+
};
|
|
213
|
+
URL: string;
|
|
214
|
+
WorkflowFunction: {
|
|
215
|
+
workflowId: string;
|
|
216
|
+
};
|
|
217
|
+
URLSearchParams: string;
|
|
218
|
+
Uint8Array: string;
|
|
219
|
+
Uint8ClampedArray: string;
|
|
220
|
+
Uint16Array: string;
|
|
221
|
+
Uint32Array: string;
|
|
222
|
+
AggregateError: {
|
|
223
|
+
message: string;
|
|
224
|
+
stack?: string;
|
|
225
|
+
cause?: unknown;
|
|
226
|
+
errors: unknown[];
|
|
227
|
+
};
|
|
228
|
+
WritableStream: {
|
|
229
|
+
name: string;
|
|
230
|
+
/**
|
|
231
|
+
* The runId of the workflow run that owns the underlying server
|
|
232
|
+
* stream. Present only when the writable was forwarded across a
|
|
233
|
+
* `start()` boundary (parent → child). When omitted, the writable
|
|
234
|
+
* belongs to the receiving run (the normal in-run case).
|
|
235
|
+
*/
|
|
236
|
+
runId?: string;
|
|
237
|
+
/**
|
|
238
|
+
* The deployment that owns the server stream. Carried with `runId`
|
|
239
|
+
* so a child running on a newer deployment can encrypt chunks with
|
|
240
|
+
* the parent's key without fetching the parent run first.
|
|
241
|
+
*/
|
|
242
|
+
deploymentId?: string;
|
|
243
|
+
/**
|
|
244
|
+
* The owning run's X25519 public key (base64), when it has one.
|
|
245
|
+
*
|
|
246
|
+
* Lets the receiving run seal frames to the stream's owner with no
|
|
247
|
+
* lookup at all — neither a run fetch nor a key-API round trip. The
|
|
248
|
+
* owner derives this locally when it creates the stream, so including
|
|
249
|
+
* it here is free. Absent for runs created by older SDKs, in which
|
|
250
|
+
* case the receiver falls back to resolving the owner's symmetric key.
|
|
251
|
+
*/
|
|
252
|
+
encryptionPublicKey?: string;
|
|
253
|
+
};
|
|
254
|
+
AbortController: {
|
|
255
|
+
streamName: string;
|
|
256
|
+
hookToken: string;
|
|
257
|
+
aborted: boolean;
|
|
258
|
+
reason?: unknown;
|
|
259
|
+
};
|
|
260
|
+
AbortSignal: {
|
|
261
|
+
streamName: string;
|
|
262
|
+
hookToken: string;
|
|
263
|
+
aborted: boolean;
|
|
264
|
+
reason?: unknown;
|
|
265
|
+
};
|
|
266
|
+
}
|
|
267
|
+
export type Reducers = {
|
|
268
|
+
[K in keyof SerializableSpecial]: (value: any) => SerializableSpecial[K] | false;
|
|
269
|
+
};
|
|
270
|
+
export type Revivers = {
|
|
271
|
+
[K in keyof SerializableSpecial]: (value: SerializableSpecial[K]) => any;
|
|
272
|
+
};
|
|
273
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/serialization/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,6BAA6B,EAAE,MAAM,kBAAkB,CAAC;AAItE;;;;;;GAMG;AACH,MAAM,MAAM,YAAY,GAAG,MAAM,GAAG;IAAE,QAAQ,CAAC,OAAO,EAAE,cAAc,CAAA;CAAE,CAAC;AAEzE;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,KAAK,IAAI,YAAY,CAEnE;AAED;;GAEG;AACH,eAAO,MAAM,mBAAmB;IAC9B,2DAA2D;yBACrC,YAAY;IAClC,kEAAkE;wBAC7C,YAAY;IACjC;;;;;;;;OAQG;qBACe,YAAY;IAC9B,wEAAwE;mBACxD,YAAY;IAC5B,6EAA6E;mBAC7D,YAAY;CACpB,CAAC;AAIX;;;;;;;;;GASG;AACH,MAAM,MAAM,iBAAiB,GAAG,KAAK,GAAG,WAAW,CAAC;AAEpD;;;;GAIG;AACH,MAAM,WAAW,mBAAmB;IAClC,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,MAAM,CAAC;IACf,aAAa,EAAE,MAAM,CAAC;IACtB,cAAc,EAAE,MAAM,CAAC;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,YAAY,EAAE;QACZ,OAAO,EAAE,MAAM,CAAC;QAChB,IAAI,EAAE,MAAM,CAAC;QACb,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,KAAK,CAAC,EAAE,OAAO,CAAC;KACjB,CAAC;IACF,UAAU,EAAE;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,OAAO,CAAA;KAAE,CAAC;IACjE,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,MAAM,CAAC;IACrB,KAAK,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,OAAO,CAAA;KAAE,CAAC;IAC1E,SAAS,EAAE;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,OAAO,CAAA;KAAE,CAAC;IAChE,OAAO,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,CAAC;IAC5B,iBAAiB,EAAE;QACjB,OAAO,EAAE,MAAM,CAAC;QAChB,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,KAAK,CAAC,EAAE,OAAO,CAAC;QAChB,KAAK,EAAE,MAAM,CAAC;QAEd,gBAAgB,CAAC,EAAE,MAAM,CAAC;KAC3B,CAAC;IACF,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,GAAG,EAAE,CAAC,GAAG,EAAE,GAAG,CAAC,EAAE,CAAC;IAClB,UAAU,EAAE;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,OAAO,CAAA;KAAE,CAAC;IACjE,cAAc,EACV;QACE,IAAI,EAAE,MAAM,CAAC;QACb,IAAI,CAAC,EAAE,OAAO,CAAC;QACf,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB;;;;;;;;WAQG;QACH,OAAO,CAAC,EAAE,iBAAiB,CAAC;KAC7B,GACD;QAAE,QAAQ,EAAE,GAAG,CAAA;KAAE,CAAC;IACtB,cAAc,EAAE;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,OAAO,CAAA;KAAE,CAAC;IACrE,MAAM,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC;IAC1C;;;;OAIG;IACH,cAAc,EAAE;QACd,OAAO,EAAE,MAAM,CAAC;QAChB,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,KAAK,CAAC,EAAE,OAAO,CAAC;QAChB,UAAU,EAAE,MAAM,CAAC;KACpB,CAAC;IACF,sBAAsB,EAAE;QACtB,OAAO,EAAE,MAAM,CAAC;QAChB,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,KAAK,CAAC,EAAE,OAAO,CAAC;QAChB,OAAO,CAAC,EAAE,6BAA6B,CAAC;KACzC,CAAC;IACF,OAAO,EAAE;QACP,MAAM,EAAE,MAAM,CAAC;QACf,GAAG,EAAE,MAAM,CAAC;QACZ,OAAO,EAAE,OAAO,CAAC;QACjB,IAAI,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;QACtB,MAAM,EAAE,OAAO,CAAC,QAAQ,CAAC,CAAC;QAC1B,gBAAgB,CAAC,EAAE,cAAc,CAAC,QAAQ,CAAC,CAAC;QAC5C,MAAM,CAAC,EAAE,WAAW,CAAC;KACtB,CAAC;IACF,QAAQ,EAAE;QACR,IAAI,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC;QACvB,GAAG,EAAE,MAAM,CAAC;QACZ,MAAM,EAAE,MAAM,CAAC;QACf,UAAU,EAAE,MAAM,CAAC;QACnB,OAAO,EAAE,OAAO,CAAC;QACjB,IAAI,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC;QACvB,UAAU,EAAE,OAAO,CAAC;KACrB,CAAC;IACF,KAAK,EAAE;QACL,OAAO,EAAE,MAAM,CAAC;KACjB,CAAC;IACF,QAAQ,EAAE;QACR,OAAO,EAAE,MAAM,CAAC;QAChB,IAAI,EAAE,OAAO,CAAC;KACf,CAAC;IACF,GAAG,EAAE,GAAG,EAAE,CAAC;IACX,WAAW,EAAE;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,OAAO,CAAA;KAAE,CAAC;IAClE,YAAY,EAAE;QACZ,MAAM,EAAE,MAAM,CAAC;QACf,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;QAClC;;;;;;WAMG;QACH,SAAS,CAAC,EAAE,OAAO,CAAC;QACpB;;;;;;;;WAQG;QACH,SAAS,CAAC,EAAE,OAAO,EAAE,CAAC;KACvB,CAAC;IACF,SAAS,EAAE;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,OAAO,CAAA;KAAE,CAAC;IAChE,QAAQ,EAAE;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,OAAO,CAAA;KAAE,CAAC;IAC/D,GAAG,EAAE,MAAM,CAAC;IACZ,gBAAgB,EAAE;QAChB,UAAU,EAAE,MAAM,CAAC;KACpB,CAAC;IACF,eAAe,EAAE,MAAM,CAAC;IACxB,UAAU,EAAE,MAAM,CAAC;IACnB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,cAAc,EAAE;QACd,OAAO,EAAE,MAAM,CAAC;QAChB,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,KAAK,CAAC,EAAE,OAAO,CAAC;QAChB,MAAM,EAAE,OAAO,EAAE,CAAC;KACnB,CAAC;IACF,cAAc,EAAE;QACd,IAAI,EAAE,MAAM,CAAC;QACb;;;;;WAKG;QACH,KAAK,CAAC,EAAE,MAAM,CAAC;QACf;;;;WAIG;QACH,YAAY,CAAC,EAAE,MAAM,CAAC;QACtB;;;;;;;;WAQG;QACH,mBAAmB,CAAC,EAAE,MAAM,CAAC;KAC9B,CAAC;IACF,eAAe,EAAE;QACf,UAAU,EAAE,MAAM,CAAC;QACnB,SAAS,EAAE,MAAM,CAAC;QAClB,OAAO,EAAE,OAAO,CAAC;QACjB,MAAM,CAAC,EAAE,OAAO,CAAC;KAClB,CAAC;IACF,WAAW,EAAE;QACX,UAAU,EAAE,MAAM,CAAC;QACnB,SAAS,EAAE,MAAM,CAAC;QAClB,OAAO,EAAE,OAAO,CAAC;QACjB,MAAM,CAAC,EAAE,OAAO,CAAC;KAClB,CAAC;CACH;AAED,MAAM,MAAM,QAAQ,GAAG;KACpB,CAAC,IAAI,MAAM,mBAAmB,GAAG,CAChC,KAAK,EAAE,GAAG,KACP,mBAAmB,CAAC,CAAC,CAAC,GAAG,KAAK;CACpC,CAAC;AAEF,MAAM,MAAM,QAAQ,GAAG;KACpB,CAAC,IAAI,MAAM,mBAAmB,GAAG,CAAC,KAAK,EAAE,mBAAmB,CAAC,CAAC,CAAC,KAAK,GAAG;CACzE,CAAC"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared types for the serialization system.
|
|
3
|
+
*/
|
|
4
|
+
/**
|
|
5
|
+
* Runtime type guard for format prefix strings.
|
|
6
|
+
*
|
|
7
|
+
* Validates that a string is exactly 4 characters of [a-z0-9].
|
|
8
|
+
*/
|
|
9
|
+
export function isFormatPrefix(value) {
|
|
10
|
+
return value.length === 4 && /^[a-z0-9]{4}$/.test(value);
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* Well-known format prefix constants. Codecs may define additional ones.
|
|
14
|
+
*/
|
|
15
|
+
export const SerializationFormat = {
|
|
16
|
+
/** devalue stringify/parse with TextEncoder/TextDecoder */
|
|
17
|
+
DEVALUE_V1: 'devl',
|
|
18
|
+
/** Encrypted payload (inner payload has its own format prefix) */
|
|
19
|
+
ENCRYPTED: 'encr',
|
|
20
|
+
/**
|
|
21
|
+
* Sealed payload — asymmetrically encrypted to a run's X25519 public key
|
|
22
|
+
* (inner payload has its own format prefix).
|
|
23
|
+
*
|
|
24
|
+
* Used for *cross-run* writes (hook payloads, forwarded stream frames),
|
|
25
|
+
* where the writer holds only the recipient run's public key and therefore
|
|
26
|
+
* cannot decrypt. A run's own payloads continue to use {@link ENCRYPTED}.
|
|
27
|
+
* See `sealed-box.ts` for the construction.
|
|
28
|
+
*/
|
|
29
|
+
SEALED: 'encp',
|
|
30
|
+
/** Gzip-compressed payload (inner payload has its own format prefix) */
|
|
31
|
+
GZIP: 'gzip',
|
|
32
|
+
/** Zstandard-compressed payload (inner payload has its own format prefix) */
|
|
33
|
+
ZSTD: 'zstd',
|
|
34
|
+
};
|
|
35
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvc2VyaWFsaXphdGlvbi90eXBlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7R0FFRztBQWVIOzs7O0dBSUc7QUFDSCxNQUFNLFVBQVUsY0FBYyxDQUFDLEtBQWE7SUFDMUMsT0FBTyxLQUFLLENBQUMsTUFBTSxLQUFLLENBQUMsSUFBSSxlQUFlLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQzNELENBQUM7QUFFRDs7R0FFRztBQUNILE1BQU0sQ0FBQyxNQUFNLG1CQUFtQixHQUFHO0lBQ2pDLDJEQUEyRDtJQUMzRCxVQUFVLEVBQUUsTUFBc0I7SUFDbEMsa0VBQWtFO0lBQ2xFLFNBQVMsRUFBRSxNQUFzQjtJQUNqQzs7Ozs7Ozs7T0FRRztJQUNILE1BQU0sRUFBRSxNQUFzQjtJQUM5Qix3RUFBd0U7SUFDeEUsSUFBSSxFQUFFLE1BQXNCO0lBQzVCLDZFQUE2RTtJQUM3RSxJQUFJLEVBQUUsTUFBc0I7Q0FDcEIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogU2hhcmVkIHR5cGVzIGZvciB0aGUgc2VyaWFsaXphdGlvbiBzeXN0ZW0uXG4gKi9cblxuaW1wb3J0IHR5cGUgeyBSdW50aW1lRGVjcnlwdGlvbkVycm9yQ29udGV4dCB9IGZyb20gJ0B3b3JrZmxvdy9lcnJvcnMnO1xuXG4vLyAtLS0tIEZvcm1hdCBQcmVmaXggLS0tLVxuXG4vKipcbiAqIEEgZm9ybWF0IHByZWZpeCBpcyBleGFjdGx5IDQgbG93ZXJjYXNlIGFscGhhbnVtZXJpYyBjaGFyYWN0ZXJzIFthLXowLTldLlxuICpcbiAqIFRoaXMgaXMgYSBicmFuZGVkIHN0cmluZyB0eXBlIOKAlCB1c2UgYGlzRm9ybWF0UHJlZml4KClgIHRvIHZhbGlkYXRlXG4gKiBhdCBydW50aW1lLiBUaGUgYFNlcmlhbGl6YXRpb25Gb3JtYXRgIG9iamVjdCBwcm92aWRlcyB3ZWxsLWtub3duXG4gKiBjb25zdGFudHMsIGJ1dCBjb2RlY3MgbWF5IGRlZmluZSBhZGRpdGlvbmFsIHByZWZpeGVzLlxuICovXG5leHBvcnQgdHlwZSBGb3JtYXRQcmVmaXggPSBzdHJpbmcgJiB7IHJlYWRvbmx5IF9fYnJhbmQ6ICdGb3JtYXRQcmVmaXgnIH07XG5cbi8qKlxuICogUnVudGltZSB0eXBlIGd1YXJkIGZvciBmb3JtYXQgcHJlZml4IHN0cmluZ3MuXG4gKlxuICogVmFsaWRhdGVzIHRoYXQgYSBzdHJpbmcgaXMgZXhhY3RseSA0IGNoYXJhY3RlcnMgb2YgW2EtejAtOV0uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc0Zvcm1hdFByZWZpeCh2YWx1ZTogc3RyaW5nKTogdmFsdWUgaXMgRm9ybWF0UHJlZml4IHtcbiAgcmV0dXJuIHZhbHVlLmxlbmd0aCA9PT0gNCAmJiAvXlthLXowLTldezR9JC8udGVzdCh2YWx1ZSk7XG59XG5cbi8qKlxuICogV2VsbC1rbm93biBmb3JtYXQgcHJlZml4IGNvbnN0YW50cy4gQ29kZWNzIG1heSBkZWZpbmUgYWRkaXRpb25hbCBvbmVzLlxuICovXG5leHBvcnQgY29uc3QgU2VyaWFsaXphdGlvbkZvcm1hdCA9IHtcbiAgLyoqIGRldmFsdWUgc3RyaW5naWZ5L3BhcnNlIHdpdGggVGV4dEVuY29kZXIvVGV4dERlY29kZXIgKi9cbiAgREVWQUxVRV9WMTogJ2RldmwnIGFzIEZvcm1hdFByZWZpeCxcbiAgLyoqIEVuY3J5cHRlZCBwYXlsb2FkIChpbm5lciBwYXlsb2FkIGhhcyBpdHMgb3duIGZvcm1hdCBwcmVmaXgpICovXG4gIEVOQ1JZUFRFRDogJ2VuY3InIGFzIEZvcm1hdFByZWZpeCxcbiAgLyoqXG4gICAqIFNlYWxlZCBwYXlsb2FkIOKAlCBhc3ltbWV0cmljYWxseSBlbmNyeXB0ZWQgdG8gYSBydW4ncyBYMjU1MTkgcHVibGljIGtleVxuICAgKiAoaW5uZXIgcGF5bG9hZCBoYXMgaXRzIG93biBmb3JtYXQgcHJlZml4KS5cbiAgICpcbiAgICogVXNlZCBmb3IgKmNyb3NzLXJ1biogd3JpdGVzIChob29rIHBheWxvYWRzLCBmb3J3YXJkZWQgc3RyZWFtIGZyYW1lcyksXG4gICAqIHdoZXJlIHRoZSB3cml0ZXIgaG9sZHMgb25seSB0aGUgcmVjaXBpZW50IHJ1bidzIHB1YmxpYyBrZXkgYW5kIHRoZXJlZm9yZVxuICAgKiBjYW5ub3QgZGVjcnlwdC4gQSBydW4ncyBvd24gcGF5bG9hZHMgY29udGludWUgdG8gdXNlIHtAbGluayBFTkNSWVBURUR9LlxuICAgKiBTZWUgYHNlYWxlZC1ib3gudHNgIGZvciB0aGUgY29uc3RydWN0aW9uLlxuICAgKi9cbiAgU0VBTEVEOiAnZW5jcCcgYXMgRm9ybWF0UHJlZml4LFxuICAvKiogR3ppcC1jb21wcmVzc2VkIHBheWxvYWQgKGlubmVyIHBheWxvYWQgaGFzIGl0cyBvd24gZm9ybWF0IHByZWZpeCkgKi9cbiAgR1pJUDogJ2d6aXAnIGFzIEZvcm1hdFByZWZpeCxcbiAgLyoqIFpzdGFuZGFyZC1jb21wcmVzc2VkIHBheWxvYWQgKGlubmVyIHBheWxvYWQgaGFzIGl0cyBvd24gZm9ybWF0IHByZWZpeCkgKi9cbiAgWlNURDogJ3pzdGQnIGFzIEZvcm1hdFByZWZpeCxcbn0gYXMgY29uc3Q7XG5cbi8vIC0tLS0gU2VyaWFsaXphYmxlIFR5cGVzIC0tLS1cblxuLyoqXG4gKiBXaXJlLWZyYW1pbmcgZm9ybWF0IGlkZW50aWZpZXIgY2FycmllZCBpbiB0aGUgc2VyaWFsaXplZFxuICogYFJlYWRhYmxlU3RyZWFtYCByZWYncyBgZnJhbWluZ2AgZmllbGQuXG4gKlxuICogLSBhYnNlbnQgLyBgJ3JhdydgOiBjaHVua3MgYXJlIHdyaXR0ZW4gdG8gdGhlIHRyYW5zcG9ydCB2ZXJiYXRpbVxuICogICAobGVnYWN5IGZvcm1hdCDigJQgbm8gYXV0by1yZWNvbm5lY3Qgc3VwcG9ydCkuXG4gKiAtIGAnZnJhbWVkLXYxJ2A6IGVhY2ggY2h1bmsgaXMgd3JhcHBlZCBpbiBhIDQtYnl0ZSBiaWctZW5kaWFuIGxlbmd0aFxuICogICBwcmVmaXgsIGFsbG93aW5nIHRoZSByZWFkZXIgdG8gaWRlbnRpZnkgY2h1bmsgYm91bmRhcmllcyBhbmRcbiAqICAgdHJhbnNwYXJlbnRseSByZWNvbm5lY3Qgb24gdHJhbnNpZW50IHN0cmVhbSBlcnJvcnMuXG4gKi9cbmV4cG9ydCB0eXBlIEJ5dGVTdHJlYW1GcmFtaW5nID0gJ3JhdycgfCAnZnJhbWVkLXYxJztcblxuLyoqXG4gKiBUeXBlcyB0aGF0IG5lZWQgc3BlY2lhbGl6ZWQgaGFuZGxpbmcgd2hlbiBzZXJpYWxpemVkL2Rlc2VyaWFsaXplZC5cbiAqIElmIGEgdHlwZSBpcyBhZGRlZCBoZXJlLCBpdCBNVVNUIGFsc28gYmUgYWRkZWQgdG8gdGhlIGBTZXJpYWxpemFibGVgXG4gKiB0eXBlIGluIGBzY2hlbWFzLnRzYC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTZXJpYWxpemFibGVTcGVjaWFsIHtcbiAgQXJyYXlCdWZmZXI6IHN0cmluZzsgLy8gYmFzZTY0IHN0cmluZ1xuICBCaWdJbnQ6IHN0cmluZzsgLy8gc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIGJpZ2ludFxuICBCaWdJbnQ2NEFycmF5OiBzdHJpbmc7IC8vIGJhc2U2NCBzdHJpbmdcbiAgQmlnVWludDY0QXJyYXk6IHN0cmluZzsgLy8gYmFzZTY0IHN0cmluZ1xuICBEYXRlOiBzdHJpbmc7IC8vIElTTyBzdHJpbmdcbiAgRE9NRXhjZXB0aW9uOiB7XG4gICAgbWVzc2FnZTogc3RyaW5nO1xuICAgIG5hbWU6IHN0cmluZztcbiAgICBzdGFjaz86IHN0cmluZztcbiAgICBjYXVzZT86IHVua25vd247XG4gIH07XG4gIEZhdGFsRXJyb3I6IHsgbWVzc2FnZTogc3RyaW5nOyBzdGFjaz86IHN0cmluZzsgY2F1c2U/OiB1bmtub3duIH07XG4gIEZsb2F0MzJBcnJheTogc3RyaW5nOyAvLyBiYXNlNjQgc3RyaW5nXG4gIEZsb2F0NjRBcnJheTogc3RyaW5nOyAvLyBiYXNlNjQgc3RyaW5nXG4gIEVycm9yOiB7IG5hbWU6IHN0cmluZzsgbWVzc2FnZTogc3RyaW5nOyBzdGFjaz86IHN0cmluZzsgY2F1c2U/OiB1bmtub3duIH07XG4gIEV2YWxFcnJvcjogeyBtZXNzYWdlOiBzdHJpbmc7IHN0YWNrPzogc3RyaW5nOyBjYXVzZT86IHVua25vd24gfTtcbiAgSGVhZGVyczogW3N0cmluZywgc3RyaW5nXVtdO1xuICBIb29rQ29uZmxpY3RFcnJvcjoge1xuICAgIG1lc3NhZ2U6IHN0cmluZztcbiAgICBzdGFjaz86IHN0cmluZztcbiAgICBjYXVzZT86IHVua25vd247XG4gICAgdG9rZW46IHN0cmluZztcbiAgICAvLyBUT0RPOiBNYWtlIHRoaXMgcmVxdWlyZWQgd2hlbiBIb29rQ29uZmxpY3RFcnJvci5jb25mbGljdGluZ1J1bklkIGlzIHJlcXVpcmVkLlxuICAgIGNvbmZsaWN0aW5nUnVuSWQ/OiBzdHJpbmc7XG4gIH07XG4gIEludDhBcnJheTogc3RyaW5nOyAvLyBiYXNlNjQgc3RyaW5nXG4gIEludDE2QXJyYXk6IHN0cmluZzsgLy8gYmFzZTY0IHN0cmluZ1xuICBJbnQzMkFycmF5OiBzdHJpbmc7IC8vIGJhc2U2NCBzdHJpbmdcbiAgTWFwOiBbYW55LCBhbnldW107XG4gIFJhbmdlRXJyb3I6IHsgbWVzc2FnZTogc3RyaW5nOyBzdGFjaz86IHN0cmluZzsgY2F1c2U/OiB1bmtub3duIH07XG4gIFJlYWRhYmxlU3RyZWFtOlxuICAgIHwge1xuICAgICAgICBuYW1lOiBzdHJpbmc7XG4gICAgICAgIHR5cGU/OiAnYnl0ZXMnO1xuICAgICAgICBzdGFydEluZGV4PzogbnVtYmVyO1xuICAgICAgICAvKipcbiAgICAgICAgICogV2lyZS1mcmFtaW5nIGZvcm1hdCBmb3IgYnl0ZSBzdHJlYW1zLiBTZWUge0BsaW5rIEJ5dGVTdHJlYW1GcmFtaW5nfVxuICAgICAgICAgKiBhbmQgYGdldEJ5dGVGcmFtaW5nU3RyZWFtYCAvIGBnZXRCeXRlVW5mcmFtaW5nU3RyZWFtYC5cbiAgICAgICAgICpcbiAgICAgICAgICogT25seSBtZWFuaW5nZnVsIHdoZW4gYHR5cGUgPT09ICdieXRlcydgLiBBYnNlbnQgb24gb2JqZWN0IHN0cmVhbXNcbiAgICAgICAgICogKHdoaWNoIGFsd2F5cyB1c2UgbGVuZ3RoLXByZWZpeGVkIGRldmFsdWUgZnJhbWluZykgYW5kIG9uIGxlZ2FjeVxuICAgICAgICAgKiBieXRlIHN0cmVhbXMgd3JpdHRlbiBieSBTREtzIHRoYXQgcHJlZGF0ZSBmcmFtaW5nIHN1cHBvcnQg4oCUIHRob3NlXG4gICAgICAgICAqIGFyZSBpbnRlcnByZXRlZCBhcyBgJ3JhdydgIGJ5IHRoZSBjb25zdW1lci5cbiAgICAgICAgICovXG4gICAgICAgIGZyYW1pbmc/OiBCeXRlU3RyZWFtRnJhbWluZztcbiAgICAgIH1cbiAgICB8IHsgYm9keUluaXQ6IGFueSB9O1xuICBSZWZlcmVuY2VFcnJvcjogeyBtZXNzYWdlOiBzdHJpbmc7IHN0YWNrPzogc3RyaW5nOyBjYXVzZT86IHVua25vd24gfTtcbiAgUmVnRXhwOiB7IHNvdXJjZTogc3RyaW5nOyBmbGFnczogc3RyaW5nIH07XG4gIC8qKlxuICAgKiBgcmV0cnlBZnRlcmAgaXMgc2VyaWFsaXplZCBhcyBhIG51bWVyaWMgZXBvY2ggdGltZXN0YW1wIHJhdGhlciB0aGFuIGFcbiAgICogYERhdGVgIHRvIGJlIHJlYWxtLXNhZmUuIFRoZSBEYXRlIHJlZHVjZXIgdXNlcyBgaW5zdGFuY2VvZiBnbG9iYWwuRGF0ZWAsXG4gICAqIHdoaWNoIGZhaWxzIGZvciBEYXRlcyBmcm9tIGEgZGlmZmVyZW50IFZNIHJlYWxtLlxuICAgKi9cbiAgUmV0cnlhYmxlRXJyb3I6IHtcbiAgICBtZXNzYWdlOiBzdHJpbmc7XG4gICAgc3RhY2s/OiBzdHJpbmc7XG4gICAgY2F1c2U/OiB1bmtub3duO1xuICAgIHJldHJ5QWZ0ZXI6IG51bWJlcjtcbiAgfTtcbiAgUnVudGltZURlY3J5cHRpb25FcnJvcjoge1xuICAgIG1lc3NhZ2U6IHN0cmluZztcbiAgICBzdGFjaz86IHN0cmluZztcbiAgICBjYXVzZT86IHVua25vd247XG4gICAgY29udGV4dD86IFJ1bnRpbWVEZWNyeXB0aW9uRXJyb3JDb250ZXh0O1xuICB9O1xuICBSZXF1ZXN0OiB7XG4gICAgbWV0aG9kOiBzdHJpbmc7XG4gICAgdXJsOiBzdHJpbmc7XG4gICAgaGVhZGVyczogSGVhZGVycztcbiAgICBib2R5OiBSZXF1ZXN0Wydib2R5J107XG4gICAgZHVwbGV4OiBSZXF1ZXN0WydkdXBsZXgnXTtcbiAgICByZXNwb25zZVdyaXRhYmxlPzogV3JpdGFibGVTdHJlYW08UmVzcG9uc2U+O1xuICAgIHNpZ25hbD86IEFib3J0U2lnbmFsO1xuICB9O1xuICBSZXNwb25zZToge1xuICAgIHR5cGU6IFJlc3BvbnNlWyd0eXBlJ107XG4gICAgdXJsOiBzdHJpbmc7XG4gICAgc3RhdHVzOiBudW1iZXI7XG4gICAgc3RhdHVzVGV4dDogc3RyaW5nO1xuICAgIGhlYWRlcnM6IEhlYWRlcnM7XG4gICAgYm9keTogUmVzcG9uc2VbJ2JvZHknXTtcbiAgICByZWRpcmVjdGVkOiBib29sZWFuO1xuICB9O1xuICBDbGFzczoge1xuICAgIGNsYXNzSWQ6IHN0cmluZztcbiAgfTtcbiAgSW5zdGFuY2U6IHtcbiAgICBjbGFzc0lkOiBzdHJpbmc7XG4gICAgZGF0YTogdW5rbm93bjtcbiAgfTtcbiAgU2V0OiBhbnlbXTtcbiAgU3ludGF4RXJyb3I6IHsgbWVzc2FnZTogc3RyaW5nOyBzdGFjaz86IHN0cmluZzsgY2F1c2U/OiB1bmtub3duIH07XG4gIFN0ZXBGdW5jdGlvbjoge1xuICAgIHN0ZXBJZDogc3RyaW5nO1xuICAgIGNsb3N1cmVWYXJzPzogUmVjb3JkPHN0cmluZywgYW55PjtcbiAgICAvKipcbiAgICAgKiBDYXB0dXJlZCBsZXhpY2FsIGB0aGlzYCBmb3Igc3RlcCBwcm94aWVzIHRoYXQgd2VyZSBjcmVhdGVkIHZpYVxuICAgICAqIGB1c2VTdGVwKC4uLikuYmluZCh0aGlzQXJnKWAgKHRoZSBTV0MgcGx1Z2luIGVtaXRzIHRoaXMgZm9yIG5lc3RlZFxuICAgICAqIGFycm93IHN0ZXBzIHRoYXQgY2xvc2Ugb3ZlciB0aGVpciBlbmNsb3NpbmcgZnVuY3Rpb24ncyBgdGhpc2ApLlxuICAgICAqIFRoZSByZXZpdmVyIHJlLWJpbmRzIHRoZSBmcmVzaGx5LWNyZWF0ZWQgcHJveHkgdG8gdGhpcyB2YWx1ZSBzbyB0aGVcbiAgICAgKiBiaW5kaW5nIHN1cnZpdmVzIHNlcmlhbGl6YXRpb24gcm91bmQtdHJpcHMuXG4gICAgICovXG4gICAgYm91bmRUaGlzPzogdW5rbm93bjtcbiAgICAvKipcbiAgICAgKiBQcmVmaWxsZWQgYXJndW1lbnRzIGNhcHR1cmVkIHdoZW4gdGhlIHVzZXIgKHJhdGhlciB0aGFuIHRoZSBTV0NcbiAgICAgKiBwbHVnaW4pIGNhbGxlZCBgdXNlU3RlcCguLi4pLmJpbmQodGhpc0FyZywgeCwgeSlgLiBUaGUgcmV2aXZlclxuICAgICAqIHJlLWFwcGxpZXMgdGhlc2UgYWxvbmdzaWRlIGBib3VuZFRoaXNgIHNvIHBhcnRpYWwgYXBwbGljYXRpb25cbiAgICAgKiBzdXJ2aXZlcyBzZXJpYWxpemF0aW9uLiBUaGUgU1dDIHBsdWdpbiBvbmx5IGV2ZXIgZW1pdHNcbiAgICAgKiBgLmJpbmQodGhpcylgIHdpdGggbm8gZXh0cmEgYXJncyB0b2RheTsgdGhpcyBzbG90IGV4aXN0cyBzbyBhXG4gICAgICogaGFuZC13cml0dGVuIGAuYmluZCh0aGlzQXJnLCB4KWAgZG9lc24ndCBzaWxlbnRseSBsb3NlIGB4YCBhZnRlclxuICAgICAqIHJvdW5kLXRyaXBwaW5nIHRocm91Z2ggdGhlIHJlZHVjZXIvcmV2aXZlci5cbiAgICAgKi9cbiAgICBib3VuZEFyZ3M/OiB1bmtub3duW107XG4gIH07XG4gIFR5cGVFcnJvcjogeyBtZXNzYWdlOiBzdHJpbmc7IHN0YWNrPzogc3RyaW5nOyBjYXVzZT86IHVua25vd24gfTtcbiAgVVJJRXJyb3I6IHsgbWVzc2FnZTogc3RyaW5nOyBzdGFjaz86IHN0cmluZzsgY2F1c2U/OiB1bmtub3duIH07XG4gIFVSTDogc3RyaW5nO1xuICBXb3JrZmxvd0Z1bmN0aW9uOiB7XG4gICAgd29ya2Zsb3dJZDogc3RyaW5nO1xuICB9O1xuICBVUkxTZWFyY2hQYXJhbXM6IHN0cmluZztcbiAgVWludDhBcnJheTogc3RyaW5nOyAvLyBiYXNlNjQgc3RyaW5nXG4gIFVpbnQ4Q2xhbXBlZEFycmF5OiBzdHJpbmc7IC8vIGJhc2U2NCBzdHJpbmdcbiAgVWludDE2QXJyYXk6IHN0cmluZzsgLy8gYmFzZTY0IHN0cmluZ1xuICBVaW50MzJBcnJheTogc3RyaW5nOyAvLyBiYXNlNjQgc3RyaW5nXG4gIEFnZ3JlZ2F0ZUVycm9yOiB7XG4gICAgbWVzc2FnZTogc3RyaW5nO1xuICAgIHN0YWNrPzogc3RyaW5nO1xuICAgIGNhdXNlPzogdW5rbm93bjtcbiAgICBlcnJvcnM6IHVua25vd25bXTtcbiAgfTtcbiAgV3JpdGFibGVTdHJlYW06IHtcbiAgICBuYW1lOiBzdHJpbmc7XG4gICAgLyoqXG4gICAgICogVGhlIHJ1bklkIG9mIHRoZSB3b3JrZmxvdyBydW4gdGhhdCBvd25zIHRoZSB1bmRlcmx5aW5nIHNlcnZlclxuICAgICAqIHN0cmVhbS4gUHJlc2VudCBvbmx5IHdoZW4gdGhlIHdyaXRhYmxlIHdhcyBmb3J3YXJkZWQgYWNyb3NzIGFcbiAgICAgKiBgc3RhcnQoKWAgYm91bmRhcnkgKHBhcmVudCDihpIgY2hpbGQpLiBXaGVuIG9taXR0ZWQsIHRoZSB3cml0YWJsZVxuICAgICAqIGJlbG9uZ3MgdG8gdGhlIHJlY2VpdmluZyBydW4gKHRoZSBub3JtYWwgaW4tcnVuIGNhc2UpLlxuICAgICAqL1xuICAgIHJ1bklkPzogc3RyaW5nO1xuICAgIC8qKlxuICAgICAqIFRoZSBkZXBsb3ltZW50IHRoYXQgb3ducyB0aGUgc2VydmVyIHN0cmVhbS4gQ2FycmllZCB3aXRoIGBydW5JZGBcbiAgICAgKiBzbyBhIGNoaWxkIHJ1bm5pbmcgb24gYSBuZXdlciBkZXBsb3ltZW50IGNhbiBlbmNyeXB0IGNodW5rcyB3aXRoXG4gICAgICogdGhlIHBhcmVudCdzIGtleSB3aXRob3V0IGZldGNoaW5nIHRoZSBwYXJlbnQgcnVuIGZpcnN0LlxuICAgICAqL1xuICAgIGRlcGxveW1lbnRJZD86IHN0cmluZztcbiAgICAvKipcbiAgICAgKiBUaGUgb3duaW5nIHJ1bidzIFgyNTUxOSBwdWJsaWMga2V5IChiYXNlNjQpLCB3aGVuIGl0IGhhcyBvbmUuXG4gICAgICpcbiAgICAgKiBMZXRzIHRoZSByZWNlaXZpbmcgcnVuIHNlYWwgZnJhbWVzIHRvIHRoZSBzdHJlYW0ncyBvd25lciB3aXRoIG5vXG4gICAgICogbG9va3VwIGF0IGFsbCDigJQgbmVpdGhlciBhIHJ1biBmZXRjaCBub3IgYSBrZXktQVBJIHJvdW5kIHRyaXAuIFRoZVxuICAgICAqIG93bmVyIGRlcml2ZXMgdGhpcyBsb2NhbGx5IHdoZW4gaXQgY3JlYXRlcyB0aGUgc3RyZWFtLCBzbyBpbmNsdWRpbmdcbiAgICAgKiBpdCBoZXJlIGlzIGZyZWUuIEFic2VudCBmb3IgcnVucyBjcmVhdGVkIGJ5IG9sZGVyIFNES3MsIGluIHdoaWNoXG4gICAgICogY2FzZSB0aGUgcmVjZWl2ZXIgZmFsbHMgYmFjayB0byByZXNvbHZpbmcgdGhlIG93bmVyJ3Mgc3ltbWV0cmljIGtleS5cbiAgICAgKi9cbiAgICBlbmNyeXB0aW9uUHVibGljS2V5Pzogc3RyaW5nO1xuICB9O1xuICBBYm9ydENvbnRyb2xsZXI6IHtcbiAgICBzdHJlYW1OYW1lOiBzdHJpbmc7XG4gICAgaG9va1Rva2VuOiBzdHJpbmc7XG4gICAgYWJvcnRlZDogYm9vbGVhbjtcbiAgICByZWFzb24/OiB1bmtub3duO1xuICB9O1xuICBBYm9ydFNpZ25hbDoge1xuICAgIHN0cmVhbU5hbWU6IHN0cmluZztcbiAgICBob29rVG9rZW46IHN0cmluZztcbiAgICBhYm9ydGVkOiBib29sZWFuO1xuICAgIHJlYXNvbj86IHVua25vd247XG4gIH07XG59XG5cbmV4cG9ydCB0eXBlIFJlZHVjZXJzID0ge1xuICBbSyBpbiBrZXlvZiBTZXJpYWxpemFibGVTcGVjaWFsXTogKFxuICAgIHZhbHVlOiBhbnlcbiAgKSA9PiBTZXJpYWxpemFibGVTcGVjaWFsW0tdIHwgZmFsc2U7XG59O1xuXG5leHBvcnQgdHlwZSBSZXZpdmVycyA9IHtcbiAgW0sgaW4ga2V5b2YgU2VyaWFsaXphYmxlU3BlY2lhbF06ICh2YWx1ZTogU2VyaWFsaXphYmxlU3BlY2lhbFtLXSkgPT4gYW55O1xufTtcbiJdfQ==
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Entry point for the VM serialization bundle.
|
|
3
|
+
*
|
|
4
|
+
* This file is bundled by esbuild into a self-contained IIFE that
|
|
5
|
+
* sets up serialize/deserialize on globalThis. The bundled output
|
|
6
|
+
* is evaluated inside the QuickJS VM during bootstrap.
|
|
7
|
+
*
|
|
8
|
+
* TextEncoder, TextDecoder, and Headers are provided by native C
|
|
9
|
+
* extensions in quickjs-wasi, so no polyfills are needed.
|
|
10
|
+
*/
|
|
11
|
+
export {};
|
|
12
|
+
//# sourceMappingURL=vm-bundle-entry.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"vm-bundle-entry.d.ts","sourceRoot":"","sources":["../../src/serialization/vm-bundle-entry.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG"}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Entry point for the VM serialization bundle.
|
|
3
|
+
*
|
|
4
|
+
* This file is bundled by esbuild into a self-contained IIFE that
|
|
5
|
+
* sets up serialize/deserialize on globalThis. The bundled output
|
|
6
|
+
* is evaluated inside the QuickJS VM during bootstrap.
|
|
7
|
+
*
|
|
8
|
+
* TextEncoder, TextDecoder, and Headers are provided by native C
|
|
9
|
+
* extensions in quickjs-wasi, so no polyfills are needed.
|
|
10
|
+
*/
|
|
11
|
+
import { monotonicFactory } from 'ulid';
|
|
12
|
+
import { deserialize, serialize } from './workflow-vm.js';
|
|
13
|
+
// Install on global scope under the public well-known symbols. The
|
|
14
|
+
// snapshot runtime's bootstrap (and the various inline-evaluated JS
|
|
15
|
+
// strings in `snapshot-runtime.ts`) reach the same functions via
|
|
16
|
+
// `globalThis[Symbol.for('workflow-serialize')]` etc.
|
|
17
|
+
globalThis[Symbol.for('workflow-serialize')] = serialize;
|
|
18
|
+
globalThis[Symbol.for('workflow-deserialize')] = deserialize;
|
|
19
|
+
// ULID generator for correlationIds — uses the same monotonicFactory
|
|
20
|
+
// as the node:vm engine. Both inputs MUST be set by the host before the
|
|
21
|
+
// first ULID is drawn, otherwise the seeded-ULID determinism guarantee
|
|
22
|
+
// is silently broken:
|
|
23
|
+
//
|
|
24
|
+
// * `Math.random` must be replaced with the host's seeded PRNG via
|
|
25
|
+
// `vm.newFunction('random', …)` (see `quickjs-runtime.ts`, the
|
|
26
|
+
// `Seeded Math.random` block). Two workflow invocations of the same
|
|
27
|
+
// run MUST observe an identical random sequence so their
|
|
28
|
+
// correlationIds collide and the world's EntityConflictError dedup
|
|
29
|
+
// applies. We pass it explicitly to `monotonicFactory` because
|
|
30
|
+
// ULID's auto-detect (`detectPRNG`) only knows about
|
|
31
|
+
// `crypto.getRandomValues` / `crypto.randomBytes`, neither of which
|
|
32
|
+
// exist in QuickJS. The PRNG is deliberately LATE-BOUND (the arrow
|
|
33
|
+
// reads `Math.random` at draw time, not at bundle-eval time) so
|
|
34
|
+
// that this bundle can be evaluated during static VM initialization
|
|
35
|
+
// — before the per-run seeded PRNG is installed — without capturing
|
|
36
|
+
// the unseeded built-in. This is also what allows a future VM
|
|
37
|
+
// snapshot taken after bundle eval to have its PRNG swapped
|
|
38
|
+
// post-restore.
|
|
39
|
+
// * `globalThis.__ulidTimestamp` must be a number (typically
|
|
40
|
+
// `workflowRun.startedAt`). It's used in place of `Date.now()` so
|
|
41
|
+
// the time portion of the ULID is also stable across concurrent
|
|
42
|
+
// invocations of the same run.
|
|
43
|
+
//
|
|
44
|
+
// The timestamp prerequisite is validated below — fail loudly rather
|
|
45
|
+
// than fall back to `Date.now()`, which would re-introduce
|
|
46
|
+
// non-determinism that replay relies on us NOT having.
|
|
47
|
+
const ulid = monotonicFactory(() => Math.random());
|
|
48
|
+
globalThis.__generateUlid = () => {
|
|
49
|
+
const t = globalThis.__ulidTimestamp;
|
|
50
|
+
if (typeof t !== 'number') {
|
|
51
|
+
throw new Error('__generateUlid: globalThis.__ulidTimestamp must be a number set by ' +
|
|
52
|
+
'the host before the serde bundle is evaluated. Without it, ULIDs ' +
|
|
53
|
+
'would fall back to Date.now() and concurrent workflow invocations ' +
|
|
54
|
+
'of the same resumption would produce divergent correlationIds.');
|
|
55
|
+
}
|
|
56
|
+
return ulid(t);
|
|
57
|
+
};
|
|
58
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidm0tYnVuZGxlLWVudHJ5LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3NlcmlhbGl6YXRpb24vdm0tYnVuZGxlLWVudHJ5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7R0FTRztBQUVILE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUN4QyxPQUFPLEVBQUUsV0FBVyxFQUFFLFNBQVMsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBRTFELG1FQUFtRTtBQUNuRSxvRUFBb0U7QUFDcEUsaUVBQWlFO0FBQ2pFLHNEQUFzRDtBQUNyRCxVQUFrQixDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsb0JBQW9CLENBQUMsQ0FBQyxHQUFHLFNBQVMsQ0FBQztBQUNqRSxVQUFrQixDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsc0JBQXNCLENBQUMsQ0FBQyxHQUFHLFdBQVcsQ0FBQztBQUV0RSxxRUFBcUU7QUFDckUsd0VBQXdFO0FBQ3hFLHVFQUF1RTtBQUN2RSxzQkFBc0I7QUFDdEIsRUFBRTtBQUNGLHFFQUFxRTtBQUNyRSxtRUFBbUU7QUFDbkUsd0VBQXdFO0FBQ3hFLDZEQUE2RDtBQUM3RCx1RUFBdUU7QUFDdkUsbUVBQW1FO0FBQ25FLHlEQUF5RDtBQUN6RCx3RUFBd0U7QUFDeEUsdUVBQXVFO0FBQ3ZFLG9FQUFvRTtBQUNwRSx3RUFBd0U7QUFDeEUsd0VBQXdFO0FBQ3hFLGtFQUFrRTtBQUNsRSxnRUFBZ0U7QUFDaEUsb0JBQW9CO0FBQ3BCLCtEQUErRDtBQUMvRCxzRUFBc0U7QUFDdEUsb0VBQW9FO0FBQ3BFLG1DQUFtQztBQUNuQyxFQUFFO0FBQ0YscUVBQXFFO0FBQ3JFLDJEQUEyRDtBQUMzRCx1REFBdUQ7QUFDdkQsTUFBTSxJQUFJLEdBQUcsZ0JBQWdCLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUM7QUFDbEQsVUFBa0IsQ0FBQyxjQUFjLEdBQUcsR0FBRyxFQUFFO0lBQ3hDLE1BQU0sQ0FBQyxHQUFJLFVBQWtCLENBQUMsZUFBZSxDQUFDO0lBQzlDLElBQUksT0FBTyxDQUFDLEtBQUssUUFBUSxFQUFFLENBQUM7UUFDMUIsTUFBTSxJQUFJLEtBQUssQ0FDYixxRUFBcUU7WUFDbkUsbUVBQW1FO1lBQ25FLG9FQUFvRTtZQUNwRSxnRUFBZ0UsQ0FDbkUsQ0FBQztJQUNKLENBQUM7SUFDRCxPQUFPLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNqQixDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEVudHJ5IHBvaW50IGZvciB0aGUgVk0gc2VyaWFsaXphdGlvbiBidW5kbGUuXG4gKlxuICogVGhpcyBmaWxlIGlzIGJ1bmRsZWQgYnkgZXNidWlsZCBpbnRvIGEgc2VsZi1jb250YWluZWQgSUlGRSB0aGF0XG4gKiBzZXRzIHVwIHNlcmlhbGl6ZS9kZXNlcmlhbGl6ZSBvbiBnbG9iYWxUaGlzLiBUaGUgYnVuZGxlZCBvdXRwdXRcbiAqIGlzIGV2YWx1YXRlZCBpbnNpZGUgdGhlIFF1aWNrSlMgVk0gZHVyaW5nIGJvb3RzdHJhcC5cbiAqXG4gKiBUZXh0RW5jb2RlciwgVGV4dERlY29kZXIsIGFuZCBIZWFkZXJzIGFyZSBwcm92aWRlZCBieSBuYXRpdmUgQ1xuICogZXh0ZW5zaW9ucyBpbiBxdWlja2pzLXdhc2ksIHNvIG5vIHBvbHlmaWxscyBhcmUgbmVlZGVkLlxuICovXG5cbmltcG9ydCB7IG1vbm90b25pY0ZhY3RvcnkgfSBmcm9tICd1bGlkJztcbmltcG9ydCB7IGRlc2VyaWFsaXplLCBzZXJpYWxpemUgfSBmcm9tICcuL3dvcmtmbG93LXZtLmpzJztcblxuLy8gSW5zdGFsbCBvbiBnbG9iYWwgc2NvcGUgdW5kZXIgdGhlIHB1YmxpYyB3ZWxsLWtub3duIHN5bWJvbHMuIFRoZVxuLy8gc25hcHNob3QgcnVudGltZSdzIGJvb3RzdHJhcCAoYW5kIHRoZSB2YXJpb3VzIGlubGluZS1ldmFsdWF0ZWQgSlNcbi8vIHN0cmluZ3MgaW4gYHNuYXBzaG90LXJ1bnRpbWUudHNgKSByZWFjaCB0aGUgc2FtZSBmdW5jdGlvbnMgdmlhXG4vLyBgZ2xvYmFsVGhpc1tTeW1ib2wuZm9yKCd3b3JrZmxvdy1zZXJpYWxpemUnKV1gIGV0Yy5cbihnbG9iYWxUaGlzIGFzIGFueSlbU3ltYm9sLmZvcignd29ya2Zsb3ctc2VyaWFsaXplJyldID0gc2VyaWFsaXplO1xuKGdsb2JhbFRoaXMgYXMgYW55KVtTeW1ib2wuZm9yKCd3b3JrZmxvdy1kZXNlcmlhbGl6ZScpXSA9IGRlc2VyaWFsaXplO1xuXG4vLyBVTElEIGdlbmVyYXRvciBmb3IgY29ycmVsYXRpb25JZHMg4oCUIHVzZXMgdGhlIHNhbWUgbW9ub3RvbmljRmFjdG9yeVxuLy8gYXMgdGhlIG5vZGU6dm0gZW5naW5lLiBCb3RoIGlucHV0cyBNVVNUIGJlIHNldCBieSB0aGUgaG9zdCBiZWZvcmUgdGhlXG4vLyBmaXJzdCBVTElEIGlzIGRyYXduLCBvdGhlcndpc2UgdGhlIHNlZWRlZC1VTElEIGRldGVybWluaXNtIGd1YXJhbnRlZVxuLy8gaXMgc2lsZW50bHkgYnJva2VuOlxuLy9cbi8vICAgKiBgTWF0aC5yYW5kb21gIG11c3QgYmUgcmVwbGFjZWQgd2l0aCB0aGUgaG9zdCdzIHNlZWRlZCBQUk5HIHZpYVxuLy8gICAgIGB2bS5uZXdGdW5jdGlvbigncmFuZG9tJywg4oCmKWAgKHNlZSBgcXVpY2tqcy1ydW50aW1lLnRzYCwgdGhlXG4vLyAgICAgYFNlZWRlZCBNYXRoLnJhbmRvbWAgYmxvY2spLiBUd28gd29ya2Zsb3cgaW52b2NhdGlvbnMgb2YgdGhlIHNhbWVcbi8vICAgICBydW4gTVVTVCBvYnNlcnZlIGFuIGlkZW50aWNhbCByYW5kb20gc2VxdWVuY2Ugc28gdGhlaXJcbi8vICAgICBjb3JyZWxhdGlvbklkcyBjb2xsaWRlIGFuZCB0aGUgd29ybGQncyBFbnRpdHlDb25mbGljdEVycm9yIGRlZHVwXG4vLyAgICAgYXBwbGllcy4gV2UgcGFzcyBpdCBleHBsaWNpdGx5IHRvIGBtb25vdG9uaWNGYWN0b3J5YCBiZWNhdXNlXG4vLyAgICAgVUxJRCdzIGF1dG8tZGV0ZWN0IChgZGV0ZWN0UFJOR2ApIG9ubHkga25vd3MgYWJvdXRcbi8vICAgICBgY3J5cHRvLmdldFJhbmRvbVZhbHVlc2AgLyBgY3J5cHRvLnJhbmRvbUJ5dGVzYCwgbmVpdGhlciBvZiB3aGljaFxuLy8gICAgIGV4aXN0IGluIFF1aWNrSlMuIFRoZSBQUk5HIGlzIGRlbGliZXJhdGVseSBMQVRFLUJPVU5EICh0aGUgYXJyb3dcbi8vICAgICByZWFkcyBgTWF0aC5yYW5kb21gIGF0IGRyYXcgdGltZSwgbm90IGF0IGJ1bmRsZS1ldmFsIHRpbWUpIHNvXG4vLyAgICAgdGhhdCB0aGlzIGJ1bmRsZSBjYW4gYmUgZXZhbHVhdGVkIGR1cmluZyBzdGF0aWMgVk0gaW5pdGlhbGl6YXRpb25cbi8vICAgICDigJQgYmVmb3JlIHRoZSBwZXItcnVuIHNlZWRlZCBQUk5HIGlzIGluc3RhbGxlZCDigJQgd2l0aG91dCBjYXB0dXJpbmdcbi8vICAgICB0aGUgdW5zZWVkZWQgYnVpbHQtaW4uIFRoaXMgaXMgYWxzbyB3aGF0IGFsbG93cyBhIGZ1dHVyZSBWTVxuLy8gICAgIHNuYXBzaG90IHRha2VuIGFmdGVyIGJ1bmRsZSBldmFsIHRvIGhhdmUgaXRzIFBSTkcgc3dhcHBlZFxuLy8gICAgIHBvc3QtcmVzdG9yZS5cbi8vICAgKiBgZ2xvYmFsVGhpcy5fX3VsaWRUaW1lc3RhbXBgIG11c3QgYmUgYSBudW1iZXIgKHR5cGljYWxseVxuLy8gICAgIGB3b3JrZmxvd1J1bi5zdGFydGVkQXRgKS4gSXQncyB1c2VkIGluIHBsYWNlIG9mIGBEYXRlLm5vdygpYCBzb1xuLy8gICAgIHRoZSB0aW1lIHBvcnRpb24gb2YgdGhlIFVMSUQgaXMgYWxzbyBzdGFibGUgYWNyb3NzIGNvbmN1cnJlbnRcbi8vICAgICBpbnZvY2F0aW9ucyBvZiB0aGUgc2FtZSBydW4uXG4vL1xuLy8gVGhlIHRpbWVzdGFtcCBwcmVyZXF1aXNpdGUgaXMgdmFsaWRhdGVkIGJlbG93IOKAlCBmYWlsIGxvdWRseSByYXRoZXJcbi8vIHRoYW4gZmFsbCBiYWNrIHRvIGBEYXRlLm5vdygpYCwgd2hpY2ggd291bGQgcmUtaW50cm9kdWNlXG4vLyBub24tZGV0ZXJtaW5pc20gdGhhdCByZXBsYXkgcmVsaWVzIG9uIHVzIE5PVCBoYXZpbmcuXG5jb25zdCB1bGlkID0gbW9ub3RvbmljRmFjdG9yeSgoKSA9PiBNYXRoLnJhbmRvbSgpKTtcbihnbG9iYWxUaGlzIGFzIGFueSkuX19nZW5lcmF0ZVVsaWQgPSAoKSA9PiB7XG4gIGNvbnN0IHQgPSAoZ2xvYmFsVGhpcyBhcyBhbnkpLl9fdWxpZFRpbWVzdGFtcDtcbiAgaWYgKHR5cGVvZiB0ICE9PSAnbnVtYmVyJykge1xuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICdfX2dlbmVyYXRlVWxpZDogZ2xvYmFsVGhpcy5fX3VsaWRUaW1lc3RhbXAgbXVzdCBiZSBhIG51bWJlciBzZXQgYnkgJyArXG4gICAgICAgICd0aGUgaG9zdCBiZWZvcmUgdGhlIHNlcmRlIGJ1bmRsZSBpcyBldmFsdWF0ZWQuIFdpdGhvdXQgaXQsIFVMSURzICcgK1xuICAgICAgICAnd291bGQgZmFsbCBiYWNrIHRvIERhdGUubm93KCkgYW5kIGNvbmN1cnJlbnQgd29ya2Zsb3cgaW52b2NhdGlvbnMgJyArXG4gICAgICAgICdvZiB0aGUgc2FtZSByZXN1bXB0aW9uIHdvdWxkIHByb2R1Y2UgZGl2ZXJnZW50IGNvcnJlbGF0aW9uSWRzLidcbiAgICApO1xuICB9XG4gIHJldHVybiB1bGlkKHQpO1xufTtcbiJdfQ==
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* VM-compatible workflow mode serialization.
|
|
3
|
+
*
|
|
4
|
+
* This module is designed to be bundled into the QuickJS WASM VM.
|
|
5
|
+
* It has NO Node.js dependencies (no Buffer, no node:util).
|
|
6
|
+
*
|
|
7
|
+
* Produces and consumes the same wire format as the Node.js workflow.ts —
|
|
8
|
+
* format-prefixed devalue data ("devl" + devalue.stringify output).
|
|
9
|
+
*/
|
|
10
|
+
/**
|
|
11
|
+
* Serialize a value to format-prefixed bytes.
|
|
12
|
+
*
|
|
13
|
+
* @param value - The value to serialize
|
|
14
|
+
* @returns Uint8Array with "devl" prefix + devalue payload
|
|
15
|
+
*/
|
|
16
|
+
export declare function serialize(value: unknown): Uint8Array;
|
|
17
|
+
/**
|
|
18
|
+
* Deserialize format-prefixed bytes back to a value.
|
|
19
|
+
*
|
|
20
|
+
* @param data - Uint8Array with format prefix, or legacy non-binary data
|
|
21
|
+
* @returns The deserialized value
|
|
22
|
+
*/
|
|
23
|
+
export declare function deserialize(data: Uint8Array | unknown): unknown;
|
|
24
|
+
//# sourceMappingURL=workflow-vm.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"workflow-vm.d.ts","sourceRoot":"","sources":["../../src/serialization/workflow-vm.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAiBH;;;;;GAKG;AACH,wBAAgB,SAAS,CAAC,KAAK,EAAE,OAAO,GAAG,UAAU,CAOpD;AAED;;;;;GAKG;AACH,wBAAgB,WAAW,CAAC,IAAI,EAAE,UAAU,GAAG,OAAO,GAAG,OAAO,CA0B/D"}
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* VM-compatible workflow mode serialization.
|
|
3
|
+
*
|
|
4
|
+
* This module is designed to be bundled into the QuickJS WASM VM.
|
|
5
|
+
* It has NO Node.js dependencies (no Buffer, no node:util).
|
|
6
|
+
*
|
|
7
|
+
* Produces and consumes the same wire format as the Node.js workflow.ts —
|
|
8
|
+
* format-prefixed devalue data ("devl" + devalue.stringify output).
|
|
9
|
+
*/
|
|
10
|
+
import { devalueVmCodec } from './codec-devalue-vm.js';
|
|
11
|
+
import { isFormatPrefix, SerializationFormat } from './types.js';
|
|
12
|
+
const FORMAT_PREFIX_LENGTH = 4;
|
|
13
|
+
let _encoder;
|
|
14
|
+
let _decoder;
|
|
15
|
+
function getEncoder() {
|
|
16
|
+
if (!_encoder)
|
|
17
|
+
_encoder = new globalThis.TextEncoder();
|
|
18
|
+
return _encoder;
|
|
19
|
+
}
|
|
20
|
+
function getDecoder() {
|
|
21
|
+
if (!_decoder)
|
|
22
|
+
_decoder = new globalThis.TextDecoder();
|
|
23
|
+
return _decoder;
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Serialize a value to format-prefixed bytes.
|
|
27
|
+
*
|
|
28
|
+
* @param value - The value to serialize
|
|
29
|
+
* @returns Uint8Array with "devl" prefix + devalue payload
|
|
30
|
+
*/
|
|
31
|
+
export function serialize(value) {
|
|
32
|
+
const payload = devalueVmCodec.serialize(value, 'workflow');
|
|
33
|
+
const prefix = getEncoder().encode(SerializationFormat.DEVALUE_V1);
|
|
34
|
+
const result = new Uint8Array(prefix.length + payload.length);
|
|
35
|
+
result.set(prefix, 0);
|
|
36
|
+
result.set(payload, prefix.length);
|
|
37
|
+
return result;
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* Deserialize format-prefixed bytes back to a value.
|
|
41
|
+
*
|
|
42
|
+
* @param data - Uint8Array with format prefix, or legacy non-binary data
|
|
43
|
+
* @returns The deserialized value
|
|
44
|
+
*/
|
|
45
|
+
export function deserialize(data) {
|
|
46
|
+
// Legacy: non-binary data
|
|
47
|
+
if (!(data instanceof Uint8Array)) {
|
|
48
|
+
if (devalueVmCodec.deserializeLegacy) {
|
|
49
|
+
return devalueVmCodec.deserializeLegacy(data, 'workflow');
|
|
50
|
+
}
|
|
51
|
+
throw new Error('Cannot deserialize non-binary data without legacy support');
|
|
52
|
+
}
|
|
53
|
+
if (data.length < FORMAT_PREFIX_LENGTH) {
|
|
54
|
+
throw new Error('Data too short to contain format prefix');
|
|
55
|
+
}
|
|
56
|
+
const prefixStr = getDecoder().decode(data.subarray(0, FORMAT_PREFIX_LENGTH));
|
|
57
|
+
if (!isFormatPrefix(prefixStr)) {
|
|
58
|
+
throw new Error(`Invalid format prefix: "${prefixStr}"`);
|
|
59
|
+
}
|
|
60
|
+
if (prefixStr === SerializationFormat.DEVALUE_V1) {
|
|
61
|
+
const payload = data.subarray(FORMAT_PREFIX_LENGTH);
|
|
62
|
+
return devalueVmCodec.deserialize(payload, 'workflow');
|
|
63
|
+
}
|
|
64
|
+
throw new Error(`Unsupported serialization format: ${prefixStr}`);
|
|
65
|
+
}
|
|
66
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid29ya2Zsb3ctdm0uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvc2VyaWFsaXphdGlvbi93b3JrZmxvdy12bS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7R0FRRztBQUVILE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUN2RCxPQUFPLEVBQUUsY0FBYyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sWUFBWSxDQUFDO0FBRWpFLE1BQU0sb0JBQW9CLEdBQUcsQ0FBQyxDQUFDO0FBQy9CLElBQUksUUFBMkMsQ0FBQztBQUNoRCxJQUFJLFFBQTJDLENBQUM7QUFDaEQsU0FBUyxVQUFVO0lBQ2pCLElBQUksQ0FBQyxRQUFRO1FBQUUsUUFBUSxHQUFHLElBQUssVUFBa0IsQ0FBQyxXQUFXLEVBQUUsQ0FBQztJQUNoRSxPQUFPLFFBQVEsQ0FBQztBQUNsQixDQUFDO0FBQ0QsU0FBUyxVQUFVO0lBQ2pCLElBQUksQ0FBQyxRQUFRO1FBQUUsUUFBUSxHQUFHLElBQUssVUFBa0IsQ0FBQyxXQUFXLEVBQUUsQ0FBQztJQUNoRSxPQUFPLFFBQVEsQ0FBQztBQUNsQixDQUFDO0FBRUQ7Ozs7O0dBS0c7QUFDSCxNQUFNLFVBQVUsU0FBUyxDQUFDLEtBQWM7SUFDdEMsTUFBTSxPQUFPLEdBQUcsY0FBYyxDQUFDLFNBQVMsQ0FBQyxLQUFLLEVBQUUsVUFBVSxDQUFDLENBQUM7SUFDNUQsTUFBTSxNQUFNLEdBQUcsVUFBVSxFQUFFLENBQUMsTUFBTSxDQUFDLG1CQUFtQixDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBQ25FLE1BQU0sTUFBTSxHQUFHLElBQUksVUFBVSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEdBQUcsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQzlELE1BQU0sQ0FBQyxHQUFHLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ3RCLE1BQU0sQ0FBQyxHQUFHLENBQUMsT0FBTyxFQUFFLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUNuQyxPQUFPLE1BQU0sQ0FBQztBQUNoQixDQUFDO0FBRUQ7Ozs7O0dBS0c7QUFDSCxNQUFNLFVBQVUsV0FBVyxDQUFDLElBQTBCO0lBQ3BELDBCQUEwQjtJQUMxQixJQUFJLENBQUMsQ0FBQyxJQUFJLFlBQVksVUFBVSxDQUFDLEVBQUUsQ0FBQztRQUNsQyxJQUFJLGNBQWMsQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO1lBQ3JDLE9BQU8sY0FBYyxDQUFDLGlCQUFpQixDQUFDLElBQUksRUFBRSxVQUFVLENBQUMsQ0FBQztRQUM1RCxDQUFDO1FBQ0QsTUFBTSxJQUFJLEtBQUssQ0FDYiwyREFBMkQsQ0FDNUQsQ0FBQztJQUNKLENBQUM7SUFFRCxJQUFJLElBQUksQ0FBQyxNQUFNLEdBQUcsb0JBQW9CLEVBQUUsQ0FBQztRQUN2QyxNQUFNLElBQUksS0FBSyxDQUFDLHlDQUF5QyxDQUFDLENBQUM7SUFDN0QsQ0FBQztJQUVELE1BQU0sU0FBUyxHQUFHLFVBQVUsRUFBRSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsRUFBRSxvQkFBb0IsQ0FBQyxDQUFDLENBQUM7SUFDOUUsSUFBSSxDQUFDLGNBQWMsQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDO1FBQy9CLE1BQU0sSUFBSSxLQUFLLENBQUMsMkJBQTJCLFNBQVMsR0FBRyxDQUFDLENBQUM7SUFDM0QsQ0FBQztJQUVELElBQUksU0FBUyxLQUFLLG1CQUFtQixDQUFDLFVBQVUsRUFBRSxDQUFDO1FBQ2pELE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsb0JBQW9CLENBQUMsQ0FBQztRQUNwRCxPQUFPLGNBQWMsQ0FBQyxXQUFXLENBQUMsT0FBTyxFQUFFLFVBQVUsQ0FBQyxDQUFDO0lBQ3pELENBQUM7SUFFRCxNQUFNLElBQUksS0FBSyxDQUFDLHFDQUFxQyxTQUFTLEVBQUUsQ0FBQyxDQUFDO0FBQ3BFLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFZNLWNvbXBhdGlibGUgd29ya2Zsb3cgbW9kZSBzZXJpYWxpemF0aW9uLlxuICpcbiAqIFRoaXMgbW9kdWxlIGlzIGRlc2lnbmVkIHRvIGJlIGJ1bmRsZWQgaW50byB0aGUgUXVpY2tKUyBXQVNNIFZNLlxuICogSXQgaGFzIE5PIE5vZGUuanMgZGVwZW5kZW5jaWVzIChubyBCdWZmZXIsIG5vIG5vZGU6dXRpbCkuXG4gKlxuICogUHJvZHVjZXMgYW5kIGNvbnN1bWVzIHRoZSBzYW1lIHdpcmUgZm9ybWF0IGFzIHRoZSBOb2RlLmpzIHdvcmtmbG93LnRzIOKAlFxuICogZm9ybWF0LXByZWZpeGVkIGRldmFsdWUgZGF0YSAoXCJkZXZsXCIgKyBkZXZhbHVlLnN0cmluZ2lmeSBvdXRwdXQpLlxuICovXG5cbmltcG9ydCB7IGRldmFsdWVWbUNvZGVjIH0gZnJvbSAnLi9jb2RlYy1kZXZhbHVlLXZtLmpzJztcbmltcG9ydCB7IGlzRm9ybWF0UHJlZml4LCBTZXJpYWxpemF0aW9uRm9ybWF0IH0gZnJvbSAnLi90eXBlcy5qcyc7XG5cbmNvbnN0IEZPUk1BVF9QUkVGSVhfTEVOR1RIID0gNDtcbmxldCBfZW5jb2RlcjogeyBlbmNvZGUoczogc3RyaW5nKTogVWludDhBcnJheSB9O1xubGV0IF9kZWNvZGVyOiB7IGRlY29kZShkOiBVaW50OEFycmF5KTogc3RyaW5nIH07XG5mdW5jdGlvbiBnZXRFbmNvZGVyKCkge1xuICBpZiAoIV9lbmNvZGVyKSBfZW5jb2RlciA9IG5ldyAoZ2xvYmFsVGhpcyBhcyBhbnkpLlRleHRFbmNvZGVyKCk7XG4gIHJldHVybiBfZW5jb2Rlcjtcbn1cbmZ1bmN0aW9uIGdldERlY29kZXIoKSB7XG4gIGlmICghX2RlY29kZXIpIF9kZWNvZGVyID0gbmV3IChnbG9iYWxUaGlzIGFzIGFueSkuVGV4dERlY29kZXIoKTtcbiAgcmV0dXJuIF9kZWNvZGVyO1xufVxuXG4vKipcbiAqIFNlcmlhbGl6ZSBhIHZhbHVlIHRvIGZvcm1hdC1wcmVmaXhlZCBieXRlcy5cbiAqXG4gKiBAcGFyYW0gdmFsdWUgLSBUaGUgdmFsdWUgdG8gc2VyaWFsaXplXG4gKiBAcmV0dXJucyBVaW50OEFycmF5IHdpdGggXCJkZXZsXCIgcHJlZml4ICsgZGV2YWx1ZSBwYXlsb2FkXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzZXJpYWxpemUodmFsdWU6IHVua25vd24pOiBVaW50OEFycmF5IHtcbiAgY29uc3QgcGF5bG9hZCA9IGRldmFsdWVWbUNvZGVjLnNlcmlhbGl6ZSh2YWx1ZSwgJ3dvcmtmbG93Jyk7XG4gIGNvbnN0IHByZWZpeCA9IGdldEVuY29kZXIoKS5lbmNvZGUoU2VyaWFsaXphdGlvbkZvcm1hdC5ERVZBTFVFX1YxKTtcbiAgY29uc3QgcmVzdWx0ID0gbmV3IFVpbnQ4QXJyYXkocHJlZml4Lmxlbmd0aCArIHBheWxvYWQubGVuZ3RoKTtcbiAgcmVzdWx0LnNldChwcmVmaXgsIDApO1xuICByZXN1bHQuc2V0KHBheWxvYWQsIHByZWZpeC5sZW5ndGgpO1xuICByZXR1cm4gcmVzdWx0O1xufVxuXG4vKipcbiAqIERlc2VyaWFsaXplIGZvcm1hdC1wcmVmaXhlZCBieXRlcyBiYWNrIHRvIGEgdmFsdWUuXG4gKlxuICogQHBhcmFtIGRhdGEgLSBVaW50OEFycmF5IHdpdGggZm9ybWF0IHByZWZpeCwgb3IgbGVnYWN5IG5vbi1iaW5hcnkgZGF0YVxuICogQHJldHVybnMgVGhlIGRlc2VyaWFsaXplZCB2YWx1ZVxuICovXG5leHBvcnQgZnVuY3Rpb24gZGVzZXJpYWxpemUoZGF0YTogVWludDhBcnJheSB8IHVua25vd24pOiB1bmtub3duIHtcbiAgLy8gTGVnYWN5OiBub24tYmluYXJ5IGRhdGFcbiAgaWYgKCEoZGF0YSBpbnN0YW5jZW9mIFVpbnQ4QXJyYXkpKSB7XG4gICAgaWYgKGRldmFsdWVWbUNvZGVjLmRlc2VyaWFsaXplTGVnYWN5KSB7XG4gICAgICByZXR1cm4gZGV2YWx1ZVZtQ29kZWMuZGVzZXJpYWxpemVMZWdhY3koZGF0YSwgJ3dvcmtmbG93Jyk7XG4gICAgfVxuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICdDYW5ub3QgZGVzZXJpYWxpemUgbm9uLWJpbmFyeSBkYXRhIHdpdGhvdXQgbGVnYWN5IHN1cHBvcnQnXG4gICAgKTtcbiAgfVxuXG4gIGlmIChkYXRhLmxlbmd0aCA8IEZPUk1BVF9QUkVGSVhfTEVOR1RIKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdEYXRhIHRvbyBzaG9ydCB0byBjb250YWluIGZvcm1hdCBwcmVmaXgnKTtcbiAgfVxuXG4gIGNvbnN0IHByZWZpeFN0ciA9IGdldERlY29kZXIoKS5kZWNvZGUoZGF0YS5zdWJhcnJheSgwLCBGT1JNQVRfUFJFRklYX0xFTkdUSCkpO1xuICBpZiAoIWlzRm9ybWF0UHJlZml4KHByZWZpeFN0cikpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgZm9ybWF0IHByZWZpeDogXCIke3ByZWZpeFN0cn1cImApO1xuICB9XG5cbiAgaWYgKHByZWZpeFN0ciA9PT0gU2VyaWFsaXphdGlvbkZvcm1hdC5ERVZBTFVFX1YxKSB7XG4gICAgY29uc3QgcGF5bG9hZCA9IGRhdGEuc3ViYXJyYXkoRk9STUFUX1BSRUZJWF9MRU5HVEgpO1xuICAgIHJldHVybiBkZXZhbHVlVm1Db2RlYy5kZXNlcmlhbGl6ZShwYXlsb2FkLCAnd29ya2Zsb3cnKTtcbiAgfVxuXG4gIHRocm93IG5ldyBFcnJvcihgVW5zdXBwb3J0ZWQgc2VyaWFsaXphdGlvbiBmb3JtYXQ6ICR7cHJlZml4U3RyfWApO1xufVxuIl19
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Workflow mode serialization.
|
|
3
|
+
*
|
|
4
|
+
* Provides serialize/deserialize for use inside the workflow execution
|
|
5
|
+
* environment (QuickJS VM or Node.js vm). It is:
|
|
6
|
+
* - Synchronous (no async operations)
|
|
7
|
+
* - No encryption (encryption is handled outside the VM on the host side)
|
|
8
|
+
*
|
|
9
|
+
* Designed to be bundled into the workflow code by esbuild and executed
|
|
10
|
+
* inside the sandboxed VM.
|
|
11
|
+
*/
|
|
12
|
+
import type { CodecOptions } from './codec.js';
|
|
13
|
+
/**
|
|
14
|
+
* Serialize a value for storage/transmission from the workflow environment.
|
|
15
|
+
*
|
|
16
|
+
* @param value - The value to serialize
|
|
17
|
+
* @param options - Optional global, extra reducers/revivers for VM-context serialization
|
|
18
|
+
* @returns Format-prefixed serialized bytes
|
|
19
|
+
*/
|
|
20
|
+
export declare function serialize(value: unknown, options?: CodecOptions): Uint8Array;
|
|
21
|
+
/**
|
|
22
|
+
* Deserialize a value received in the workflow environment.
|
|
23
|
+
*
|
|
24
|
+
* @param data - Format-prefixed serialized bytes, or legacy data
|
|
25
|
+
* @param options - Optional global, extra revivers for VM-context deserialization
|
|
26
|
+
* @returns The deserialized value
|
|
27
|
+
*/
|
|
28
|
+
export declare function deserialize(data: Uint8Array | unknown, options?: CodecOptions): unknown;
|
|
29
|
+
//# sourceMappingURL=workflow.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"workflow.d.ts","sourceRoot":"","sources":["../../src/serialization/workflow.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAGH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAM/C;;;;;;GAMG;AACH,wBAAgB,SAAS,CAAC,KAAK,EAAE,OAAO,EAAE,OAAO,CAAC,EAAE,YAAY,GAAG,UAAU,CAW5E;AAED;;;;;;GAMG;AACH,wBAAgB,WAAW,CACzB,IAAI,EAAE,UAAU,GAAG,OAAO,EAC1B,OAAO,CAAC,EAAE,YAAY,GACrB,OAAO,CAiBT"}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Workflow mode serialization.
|
|
3
|
+
*
|
|
4
|
+
* Provides serialize/deserialize for use inside the workflow execution
|
|
5
|
+
* environment (QuickJS VM or Node.js vm). It is:
|
|
6
|
+
* - Synchronous (no async operations)
|
|
7
|
+
* - No encryption (encryption is handled outside the VM on the host side)
|
|
8
|
+
*
|
|
9
|
+
* Designed to be bundled into the workflow code by esbuild and executed
|
|
10
|
+
* inside the sandboxed VM.
|
|
11
|
+
*/
|
|
12
|
+
import { SerializationError } from '@workflow/errors';
|
|
13
|
+
import { devalueCodec } from './codec-devalue.js';
|
|
14
|
+
import { formatSerializationError } from './errors.js';
|
|
15
|
+
import { decodeFormatPrefix, encodeWithFormatPrefix } from './format.js';
|
|
16
|
+
import { SerializationFormat } from './types.js';
|
|
17
|
+
/**
|
|
18
|
+
* Serialize a value for storage/transmission from the workflow environment.
|
|
19
|
+
*
|
|
20
|
+
* @param value - The value to serialize
|
|
21
|
+
* @param options - Optional global, extra reducers/revivers for VM-context serialization
|
|
22
|
+
* @returns Format-prefixed serialized bytes
|
|
23
|
+
*/
|
|
24
|
+
export function serialize(value, options) {
|
|
25
|
+
try {
|
|
26
|
+
const payload = devalueCodec.serialize(value, 'workflow', options);
|
|
27
|
+
return encodeWithFormatPrefix(SerializationFormat.DEVALUE_V1, payload);
|
|
28
|
+
}
|
|
29
|
+
catch (error) {
|
|
30
|
+
const { message, hint } = formatSerializationError('workflow value', error);
|
|
31
|
+
throw new SerializationError(message, { hint, cause: error });
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Deserialize a value received in the workflow environment.
|
|
36
|
+
*
|
|
37
|
+
* @param data - Format-prefixed serialized bytes, or legacy data
|
|
38
|
+
* @param options - Optional global, extra revivers for VM-context deserialization
|
|
39
|
+
* @returns The deserialized value
|
|
40
|
+
*/
|
|
41
|
+
export function deserialize(data, options) {
|
|
42
|
+
if (!(data instanceof Uint8Array)) {
|
|
43
|
+
if (devalueCodec.deserializeLegacy) {
|
|
44
|
+
return devalueCodec.deserializeLegacy(data, 'workflow', options);
|
|
45
|
+
}
|
|
46
|
+
throw new Error('Cannot deserialize non-binary data without legacy support');
|
|
47
|
+
}
|
|
48
|
+
const { format, payload } = decodeFormatPrefix(data);
|
|
49
|
+
if (format === SerializationFormat.DEVALUE_V1) {
|
|
50
|
+
return devalueCodec.deserialize(payload, 'workflow', options);
|
|
51
|
+
}
|
|
52
|
+
throw new Error(`Unsupported serialization format: ${format}`);
|
|
53
|
+
}
|
|
54
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid29ya2Zsb3cuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvc2VyaWFsaXphdGlvbi93b3JrZmxvdy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7OztHQVVHO0FBRUgsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFFdEQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ2xELE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUN2RCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDekUsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sWUFBWSxDQUFDO0FBRWpEOzs7Ozs7R0FNRztBQUNILE1BQU0sVUFBVSxTQUFTLENBQUMsS0FBYyxFQUFFLE9BQXNCO0lBQzlELElBQUksQ0FBQztRQUNILE1BQU0sT0FBTyxHQUFHLFlBQVksQ0FBQyxTQUFTLENBQUMsS0FBSyxFQUFFLFVBQVUsRUFBRSxPQUFPLENBQUMsQ0FBQztRQUNuRSxPQUFPLHNCQUFzQixDQUMzQixtQkFBbUIsQ0FBQyxVQUFVLEVBQzlCLE9BQU8sQ0FDTSxDQUFDO0lBQ2xCLENBQUM7SUFBQyxPQUFPLEtBQUssRUFBRSxDQUFDO1FBQ2YsTUFBTSxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsR0FBRyx3QkFBd0IsQ0FBQyxnQkFBZ0IsRUFBRSxLQUFLLENBQUMsQ0FBQztRQUM1RSxNQUFNLElBQUksa0JBQWtCLENBQUMsT0FBTyxFQUFFLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDO0lBQ2hFLENBQUM7QUFDSCxDQUFDO0FBRUQ7Ozs7OztHQU1HO0FBQ0gsTUFBTSxVQUFVLFdBQVcsQ0FDekIsSUFBMEIsRUFDMUIsT0FBc0I7SUFFdEIsSUFBSSxDQUFDLENBQUMsSUFBSSxZQUFZLFVBQVUsQ0FBQyxFQUFFLENBQUM7UUFDbEMsSUFBSSxZQUFZLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztZQUNuQyxPQUFPLFlBQVksQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLEVBQUUsVUFBVSxFQUFFLE9BQU8sQ0FBQyxDQUFDO1FBQ25FLENBQUM7UUFDRCxNQUFNLElBQUksS0FBSyxDQUNiLDJEQUEyRCxDQUM1RCxDQUFDO0lBQ0osQ0FBQztJQUVELE1BQU0sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLEdBQUcsa0JBQWtCLENBQUMsSUFBSSxDQUFDLENBQUM7SUFFckQsSUFBSSxNQUFNLEtBQUssbUJBQW1CLENBQUMsVUFBVSxFQUFFLENBQUM7UUFDOUMsT0FBTyxZQUFZLENBQUMsV0FBVyxDQUFDLE9BQU8sRUFBRSxVQUFVLEVBQUUsT0FBTyxDQUFDLENBQUM7SUFDaEUsQ0FBQztJQUVELE1BQU0sSUFBSSxLQUFLLENBQUMscUNBQXFDLE1BQU0sRUFBRSxDQUFDLENBQUM7QUFDakUsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogV29ya2Zsb3cgbW9kZSBzZXJpYWxpemF0aW9uLlxuICpcbiAqIFByb3ZpZGVzIHNlcmlhbGl6ZS9kZXNlcmlhbGl6ZSBmb3IgdXNlIGluc2lkZSB0aGUgd29ya2Zsb3cgZXhlY3V0aW9uXG4gKiBlbnZpcm9ubWVudCAoUXVpY2tKUyBWTSBvciBOb2RlLmpzIHZtKS4gSXQgaXM6XG4gKiAtIFN5bmNocm9ub3VzIChubyBhc3luYyBvcGVyYXRpb25zKVxuICogLSBObyBlbmNyeXB0aW9uIChlbmNyeXB0aW9uIGlzIGhhbmRsZWQgb3V0c2lkZSB0aGUgVk0gb24gdGhlIGhvc3Qgc2lkZSlcbiAqXG4gKiBEZXNpZ25lZCB0byBiZSBidW5kbGVkIGludG8gdGhlIHdvcmtmbG93IGNvZGUgYnkgZXNidWlsZCBhbmQgZXhlY3V0ZWRcbiAqIGluc2lkZSB0aGUgc2FuZGJveGVkIFZNLlxuICovXG5cbmltcG9ydCB7IFNlcmlhbGl6YXRpb25FcnJvciB9IGZyb20gJ0B3b3JrZmxvdy9lcnJvcnMnO1xuaW1wb3J0IHR5cGUgeyBDb2RlY09wdGlvbnMgfSBmcm9tICcuL2NvZGVjLmpzJztcbmltcG9ydCB7IGRldmFsdWVDb2RlYyB9IGZyb20gJy4vY29kZWMtZGV2YWx1ZS5qcyc7XG5pbXBvcnQgeyBmb3JtYXRTZXJpYWxpemF0aW9uRXJyb3IgfSBmcm9tICcuL2Vycm9ycy5qcyc7XG5pbXBvcnQgeyBkZWNvZGVGb3JtYXRQcmVmaXgsIGVuY29kZVdpdGhGb3JtYXRQcmVmaXggfSBmcm9tICcuL2Zvcm1hdC5qcyc7XG5pbXBvcnQgeyBTZXJpYWxpemF0aW9uRm9ybWF0IH0gZnJvbSAnLi90eXBlcy5qcyc7XG5cbi8qKlxuICogU2VyaWFsaXplIGEgdmFsdWUgZm9yIHN0b3JhZ2UvdHJhbnNtaXNzaW9uIGZyb20gdGhlIHdvcmtmbG93IGVudmlyb25tZW50LlxuICpcbiAqIEBwYXJhbSB2YWx1ZSAtIFRoZSB2YWx1ZSB0byBzZXJpYWxpemVcbiAqIEBwYXJhbSBvcHRpb25zIC0gT3B0aW9uYWwgZ2xvYmFsLCBleHRyYSByZWR1Y2Vycy9yZXZpdmVycyBmb3IgVk0tY29udGV4dCBzZXJpYWxpemF0aW9uXG4gKiBAcmV0dXJucyBGb3JtYXQtcHJlZml4ZWQgc2VyaWFsaXplZCBieXRlc1xuICovXG5leHBvcnQgZnVuY3Rpb24gc2VyaWFsaXplKHZhbHVlOiB1bmtub3duLCBvcHRpb25zPzogQ29kZWNPcHRpb25zKTogVWludDhBcnJheSB7XG4gIHRyeSB7XG4gICAgY29uc3QgcGF5bG9hZCA9IGRldmFsdWVDb2RlYy5zZXJpYWxpemUodmFsdWUsICd3b3JrZmxvdycsIG9wdGlvbnMpO1xuICAgIHJldHVybiBlbmNvZGVXaXRoRm9ybWF0UHJlZml4KFxuICAgICAgU2VyaWFsaXphdGlvbkZvcm1hdC5ERVZBTFVFX1YxLFxuICAgICAgcGF5bG9hZFxuICAgICkgYXMgVWludDhBcnJheTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBjb25zdCB7IG1lc3NhZ2UsIGhpbnQgfSA9IGZvcm1hdFNlcmlhbGl6YXRpb25FcnJvcignd29ya2Zsb3cgdmFsdWUnLCBlcnJvcik7XG4gICAgdGhyb3cgbmV3IFNlcmlhbGl6YXRpb25FcnJvcihtZXNzYWdlLCB7IGhpbnQsIGNhdXNlOiBlcnJvciB9KTtcbiAgfVxufVxuXG4vKipcbiAqIERlc2VyaWFsaXplIGEgdmFsdWUgcmVjZWl2ZWQgaW4gdGhlIHdvcmtmbG93IGVudmlyb25tZW50LlxuICpcbiAqIEBwYXJhbSBkYXRhIC0gRm9ybWF0LXByZWZpeGVkIHNlcmlhbGl6ZWQgYnl0ZXMsIG9yIGxlZ2FjeSBkYXRhXG4gKiBAcGFyYW0gb3B0aW9ucyAtIE9wdGlvbmFsIGdsb2JhbCwgZXh0cmEgcmV2aXZlcnMgZm9yIFZNLWNvbnRleHQgZGVzZXJpYWxpemF0aW9uXG4gKiBAcmV0dXJucyBUaGUgZGVzZXJpYWxpemVkIHZhbHVlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkZXNlcmlhbGl6ZShcbiAgZGF0YTogVWludDhBcnJheSB8IHVua25vd24sXG4gIG9wdGlvbnM/OiBDb2RlY09wdGlvbnNcbik6IHVua25vd24ge1xuICBpZiAoIShkYXRhIGluc3RhbmNlb2YgVWludDhBcnJheSkpIHtcbiAgICBpZiAoZGV2YWx1ZUNvZGVjLmRlc2VyaWFsaXplTGVnYWN5KSB7XG4gICAgICByZXR1cm4gZGV2YWx1ZUNvZGVjLmRlc2VyaWFsaXplTGVnYWN5KGRhdGEsICd3b3JrZmxvdycsIG9wdGlvbnMpO1xuICAgIH1cbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAnQ2Fubm90IGRlc2VyaWFsaXplIG5vbi1iaW5hcnkgZGF0YSB3aXRob3V0IGxlZ2FjeSBzdXBwb3J0J1xuICAgICk7XG4gIH1cblxuICBjb25zdCB7IGZvcm1hdCwgcGF5bG9hZCB9ID0gZGVjb2RlRm9ybWF0UHJlZml4KGRhdGEpO1xuXG4gIGlmIChmb3JtYXQgPT09IFNlcmlhbGl6YXRpb25Gb3JtYXQuREVWQUxVRV9WMSkge1xuICAgIHJldHVybiBkZXZhbHVlQ29kZWMuZGVzZXJpYWxpemUocGF5bG9hZCwgJ3dvcmtmbG93Jywgb3B0aW9ucyk7XG4gIH1cblxuICB0aHJvdyBuZXcgRXJyb3IoYFVuc3VwcG9ydGVkIHNlcmlhbGl6YXRpb24gZm9ybWF0OiAke2Zvcm1hdH1gKTtcbn1cbiJdfQ==
|