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

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 (161) hide show
  1. package/dist/capture-stack.d.ts +16 -0
  2. package/dist/capture-stack.d.ts.map +1 -0
  3. package/dist/capture-stack.js +21 -0
  4. package/dist/classify-error.d.ts +7 -0
  5. package/dist/classify-error.d.ts.map +1 -1
  6. package/dist/classify-error.js +25 -4
  7. package/dist/context-errors.d.ts +27 -0
  8. package/dist/context-errors.d.ts.map +1 -0
  9. package/dist/context-errors.js +101 -0
  10. package/dist/context-violation-error.d.ts +97 -0
  11. package/dist/context-violation-error.d.ts.map +1 -0
  12. package/dist/context-violation-error.js +147 -0
  13. package/dist/create-hook.d.ts.map +1 -1
  14. package/dist/create-hook.js +4 -3
  15. package/dist/define-hook.d.ts.map +1 -1
  16. package/dist/define-hook.js +20 -5
  17. package/dist/describe-error.d.ts +70 -0
  18. package/dist/describe-error.d.ts.map +1 -0
  19. package/dist/describe-error.js +119 -0
  20. package/dist/encryption.d.ts.map +1 -1
  21. package/dist/encryption.js +4 -20
  22. package/dist/events-consumer.d.ts +7 -0
  23. package/dist/events-consumer.d.ts.map +1 -1
  24. package/dist/events-consumer.js +9 -2
  25. package/dist/flushable-stream.d.ts +10 -10
  26. package/dist/flushable-stream.d.ts.map +1 -1
  27. package/dist/flushable-stream.js +13 -12
  28. package/dist/global.d.ts +4 -0
  29. package/dist/global.d.ts.map +1 -1
  30. package/dist/global.js +8 -2
  31. package/dist/log-format.d.ts +25 -0
  32. package/dist/log-format.d.ts.map +1 -0
  33. package/dist/log-format.js +250 -0
  34. package/dist/logger.d.ts +28 -30
  35. package/dist/logger.d.ts.map +1 -1
  36. package/dist/logger.js +77 -31
  37. package/dist/private.js +3 -3
  38. package/dist/runtime/get-port-lazy.d.ts +10 -0
  39. package/dist/runtime/get-port-lazy.d.ts.map +1 -0
  40. package/dist/runtime/get-port-lazy.js +30 -0
  41. package/dist/runtime/get-world-lazy.d.ts +32 -0
  42. package/dist/runtime/get-world-lazy.d.ts.map +1 -0
  43. package/dist/runtime/get-world-lazy.js +56 -0
  44. package/dist/runtime/helpers.d.ts +38 -5
  45. package/dist/runtime/helpers.d.ts.map +1 -1
  46. package/dist/runtime/helpers.js +67 -18
  47. package/dist/runtime/resume-hook.js +4 -4
  48. package/dist/runtime/run.d.ts.map +1 -1
  49. package/dist/runtime/run.js +31 -6
  50. package/dist/runtime/start.js +3 -3
  51. package/dist/runtime/step-executor.d.ts +40 -0
  52. package/dist/runtime/step-executor.d.ts.map +1 -0
  53. package/dist/runtime/step-executor.js +480 -0
  54. package/dist/runtime/step-handler.d.ts.map +1 -1
  55. package/dist/runtime/step-handler.js +209 -111
  56. package/dist/runtime/suspension-handler.d.ts +22 -4
  57. package/dist/runtime/suspension-handler.d.ts.map +1 -1
  58. package/dist/runtime/suspension-handler.js +86 -73
  59. package/dist/runtime/world-init.d.ts +75 -0
  60. package/dist/runtime/world-init.d.ts.map +1 -0
  61. package/dist/runtime/world-init.js +75 -0
  62. package/dist/runtime/world.d.ts.map +1 -1
  63. package/dist/runtime/world.js +47 -18
  64. package/dist/runtime.d.ts +8 -7
  65. package/dist/runtime.d.ts.map +1 -1
  66. package/dist/runtime.js +649 -292
  67. package/dist/schemas.d.ts +1 -1
  68. package/dist/schemas.d.ts.map +1 -1
  69. package/dist/schemas.js +1 -1
  70. package/dist/serialization/client.d.ts +17 -0
  71. package/dist/serialization/client.d.ts.map +1 -0
  72. package/dist/serialization/client.js +44 -0
  73. package/dist/serialization/codec-devalue.d.ts +14 -0
  74. package/dist/serialization/codec-devalue.d.ts.map +1 -0
  75. package/dist/serialization/codec-devalue.js +98 -0
  76. package/dist/serialization/codec.d.ts +90 -0
  77. package/dist/serialization/codec.d.ts.map +1 -0
  78. package/dist/serialization/codec.js +17 -0
  79. package/dist/serialization/encryption.d.ts +32 -0
  80. package/dist/serialization/encryption.d.ts.map +1 -0
  81. package/dist/serialization/encryption.js +51 -0
  82. package/dist/serialization/errors.d.ts +21 -0
  83. package/dist/serialization/errors.d.ts.map +1 -0
  84. package/dist/serialization/errors.js +41 -0
  85. package/dist/serialization/format.d.ts +60 -0
  86. package/dist/serialization/format.d.ts.map +1 -0
  87. package/dist/serialization/format.js +97 -0
  88. package/dist/serialization/index.d.ts +18 -0
  89. package/dist/serialization/index.d.ts.map +1 -0
  90. package/dist/serialization/index.js +20 -0
  91. package/dist/serialization/reducers/class.d.ts +11 -0
  92. package/dist/serialization/reducers/class.d.ts.map +1 -0
  93. package/dist/serialization/reducers/class.js +68 -0
  94. package/dist/serialization/reducers/common.d.ts +16 -0
  95. package/dist/serialization/reducers/common.d.ts.map +1 -0
  96. package/dist/serialization/reducers/common.js +362 -0
  97. package/dist/serialization/reducers/step-function.d.ts +35 -0
  98. package/dist/serialization/reducers/step-function.d.ts.map +1 -0
  99. package/dist/serialization/reducers/step-function.js +88 -0
  100. package/dist/serialization/step.d.ts +17 -0
  101. package/dist/serialization/step.d.ts.map +1 -0
  102. package/dist/serialization/step.js +44 -0
  103. package/dist/serialization/types.d.ts +201 -0
  104. package/dist/serialization/types.d.ts.map +1 -0
  105. package/dist/serialization/types.js +21 -0
  106. package/dist/serialization/workflow.d.ts +29 -0
  107. package/dist/serialization/workflow.d.ts.map +1 -0
  108. package/dist/serialization/workflow.js +54 -0
  109. package/dist/serialization-format.d.ts.map +1 -1
  110. package/dist/serialization-format.js +77 -3
  111. package/dist/serialization.d.ts +202 -226
  112. package/dist/serialization.d.ts.map +1 -1
  113. package/dist/serialization.js +773 -633
  114. package/dist/sleep.d.ts.map +1 -1
  115. package/dist/sleep.js +3 -2
  116. package/dist/step/get-closure-vars.d.ts.map +1 -1
  117. package/dist/step/get-closure-vars.js +3 -2
  118. package/dist/step/get-step-metadata.d.ts.map +1 -1
  119. package/dist/step/get-step-metadata.js +3 -2
  120. package/dist/step/get-workflow-metadata.d.ts.map +1 -1
  121. package/dist/step/get-workflow-metadata.js +3 -2
  122. package/dist/step/writable-stream.d.ts.map +1 -1
  123. package/dist/step/writable-stream.js +3 -2
  124. package/dist/step.d.ts.map +1 -1
  125. package/dist/step.js +83 -16
  126. package/dist/symbols.d.ts +4 -0
  127. package/dist/symbols.d.ts.map +1 -1
  128. package/dist/symbols.js +5 -1
  129. package/dist/telemetry/semantic-conventions.d.ts +2 -2
  130. package/dist/telemetry/semantic-conventions.js +1 -1
  131. package/dist/util.d.ts +18 -3
  132. package/dist/util.d.ts.map +1 -1
  133. package/dist/util.js +28 -5
  134. package/dist/version.d.ts +1 -1
  135. package/dist/version.js +2 -2
  136. package/dist/vm/index.d.ts.map +1 -1
  137. package/dist/vm/index.js +3 -2
  138. package/dist/workflow/abort-controller.d.ts +65 -0
  139. package/dist/workflow/abort-controller.d.ts.map +1 -0
  140. package/dist/workflow/abort-controller.js +245 -0
  141. package/dist/workflow/create-hook.d.ts.map +1 -1
  142. package/dist/workflow/create-hook.js +3 -2
  143. package/dist/workflow/define-hook.d.ts +1 -1
  144. package/dist/workflow/define-hook.d.ts.map +1 -1
  145. package/dist/workflow/define-hook.js +8 -4
  146. package/dist/workflow/get-workflow-metadata.d.ts.map +1 -1
  147. package/dist/workflow/get-workflow-metadata.js +14 -3
  148. package/dist/workflow/index.d.ts.map +1 -1
  149. package/dist/workflow/index.js +4 -3
  150. package/dist/workflow/world-init-stub.d.ts +15 -0
  151. package/dist/workflow/world-init-stub.d.ts.map +1 -0
  152. package/dist/workflow/world-init-stub.js +15 -0
  153. package/dist/workflow.d.ts.map +1 -1
  154. package/dist/workflow.js +71 -28
  155. package/docs/foundations/cancellation.mdx +460 -0
  156. package/docs/foundations/errors-and-retries.mdx +7 -3
  157. package/docs/foundations/meta.json +1 -0
  158. package/docs/foundations/serialization.mdx +77 -41
  159. package/docs/how-it-works/cancellation.mdx +287 -0
  160. package/docs/how-it-works/meta.json +2 -1
  161. package/package.json +15 -6
@@ -0,0 +1,97 @@
1
+ /**
2
+ * Format prefix system for serialized payloads.
3
+ *
4
+ * All serialized payloads are prefixed with a 4-byte format identifier that
5
+ * allows the deserializer to determine how to decode the payload. This enables:
6
+ *
7
+ * 1. Self-describing payloads — the World layer is agnostic to serialization format
8
+ * 2. Gradual migration — old runs keep working, new runs can use new formats
9
+ * 3. Composability — encryption can wrap any format ("encr" wrapping "devl")
10
+ * 4. Debugging — raw data inspection immediately reveals the format
11
+ *
12
+ * Format: [4 bytes: format identifier][payload]
13
+ *
14
+ * The format prefix is open-ended — any 4-character [a-z0-9] string is valid.
15
+ * This allows new codecs to be added without modifying this module.
16
+ */
17
+ import { isFormatPrefix, SerializationFormat, } from './types.js';
18
+ /** Length of the format prefix in bytes */
19
+ const FORMAT_PREFIX_LENGTH = 4;
20
+ const formatEncoder = new TextEncoder();
21
+ const formatDecoder = new TextDecoder();
22
+ /**
23
+ * Encode a payload with a format prefix.
24
+ *
25
+ * @param format - The format identifier (4 chars, [a-z0-9])
26
+ * @param payload - The serialized payload bytes
27
+ * @returns A new Uint8Array with format prefix prepended
28
+ */
29
+ export function encodeWithFormatPrefix(format, payload) {
30
+ if (!(payload instanceof Uint8Array)) {
31
+ return payload;
32
+ }
33
+ const prefixBytes = formatEncoder.encode(format);
34
+ const result = new Uint8Array(FORMAT_PREFIX_LENGTH + payload.length);
35
+ result.set(prefixBytes, 0);
36
+ result.set(payload, FORMAT_PREFIX_LENGTH);
37
+ return result;
38
+ }
39
+ /**
40
+ * Peek at the format prefix without consuming it.
41
+ *
42
+ * Returns the prefix if it's a valid format prefix ([a-z0-9]{4}),
43
+ * or null if the data is legacy/non-binary or doesn't start with a
44
+ * valid prefix.
45
+ *
46
+ * @param data - The format-prefixed data
47
+ * @returns The format prefix, or null
48
+ */
49
+ export function peekFormatPrefix(data) {
50
+ if (!(data instanceof Uint8Array) || data.length < FORMAT_PREFIX_LENGTH) {
51
+ return null;
52
+ }
53
+ const prefixBytes = data.subarray(0, FORMAT_PREFIX_LENGTH);
54
+ const str = formatDecoder.decode(prefixBytes);
55
+ return isFormatPrefix(str) ? str : null;
56
+ }
57
+ /**
58
+ * Check if data is encrypted (has 'encr' format prefix).
59
+ */
60
+ export function isEncrypted(data) {
61
+ return peekFormatPrefix(data) === SerializationFormat.ENCRYPTED;
62
+ }
63
+ /**
64
+ * Decode a format-prefixed payload.
65
+ *
66
+ * Unlike the legacy implementation which only accepted known formats
67
+ * (`devl`, `encr`), this function accepts any valid format prefix
68
+ * (`[a-z0-9]{4}`). This is intentional for forward compatibility —
69
+ * new codecs (e.g. `cbor`) can be added without modifying this module.
70
+ * Callers are responsible for checking whether they support the returned
71
+ * format and throwing an appropriate error if not (e.g. "Unsupported
72
+ * serialization format").
73
+ *
74
+ * @param data - The format-prefixed data
75
+ * @returns An object with the format prefix and payload
76
+ * @throws Error if the data is too short or has an invalid prefix
77
+ */
78
+ export function decodeFormatPrefix(data) {
79
+ // Compat for legacy specVersion 1 runs that don't have a format prefix
80
+ if (!(data instanceof Uint8Array)) {
81
+ return {
82
+ format: SerializationFormat.DEVALUE_V1,
83
+ payload: new TextEncoder().encode(JSON.stringify(data)),
84
+ };
85
+ }
86
+ if (data.length < FORMAT_PREFIX_LENGTH) {
87
+ throw new Error(`Data too short to contain format prefix: expected at least ${FORMAT_PREFIX_LENGTH} bytes, got ${data.length}`);
88
+ }
89
+ const prefixBytes = data.subarray(0, FORMAT_PREFIX_LENGTH);
90
+ const str = formatDecoder.decode(prefixBytes);
91
+ if (!isFormatPrefix(str)) {
92
+ throw new Error(`Invalid format prefix: "${str}". Must be 4 characters of [a-z0-9].`);
93
+ }
94
+ const payload = data.subarray(FORMAT_PREFIX_LENGTH);
95
+ return { format: str, payload };
96
+ }
97
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybWF0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3NlcmlhbGl6YXRpb24vZm9ybWF0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUVILE9BQU8sRUFFTCxjQUFjLEVBQ2QsbUJBQW1CLEdBQ3BCLE1BQU0sWUFBWSxDQUFDO0FBRXBCLDJDQUEyQztBQUMzQyxNQUFNLG9CQUFvQixHQUFHLENBQUMsQ0FBQztBQUUvQixNQUFNLGFBQWEsR0FBRyxJQUFJLFdBQVcsRUFBRSxDQUFDO0FBQ3hDLE1BQU0sYUFBYSxHQUFHLElBQUksV0FBVyxFQUFFLENBQUM7QUFFeEM7Ozs7OztHQU1HO0FBQ0gsTUFBTSxVQUFVLHNCQUFzQixDQUNwQyxNQUFvQixFQUNwQixPQUE2QjtJQUU3QixJQUFJLENBQUMsQ0FBQyxPQUFPLFlBQVksVUFBVSxDQUFDLEVBQUUsQ0FBQztRQUNyQyxPQUFPLE9BQU8sQ0FBQztJQUNqQixDQUFDO0lBRUQsTUFBTSxXQUFXLEdBQUcsYUFBYSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUNqRCxNQUFNLE1BQU0sR0FBRyxJQUFJLFVBQVUsQ0FBQyxvQkFBb0IsR0FBRyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDckUsTUFBTSxDQUFDLEdBQUcsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDM0IsTUFBTSxDQUFDLEdBQUcsQ0FBQyxPQUFPLEVBQUUsb0JBQW9CLENBQUMsQ0FBQztJQUMxQyxPQUFPLE1BQU0sQ0FBQztBQUNoQixDQUFDO0FBRUQ7Ozs7Ozs7OztHQVNHO0FBQ0gsTUFBTSxVQUFVLGdCQUFnQixDQUM5QixJQUEwQjtJQUUxQixJQUFJLENBQUMsQ0FBQyxJQUFJLFlBQVksVUFBVSxDQUFDLElBQUksSUFBSSxDQUFDLE1BQU0sR0FBRyxvQkFBb0IsRUFBRSxDQUFDO1FBQ3hFLE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUNELE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxFQUFFLG9CQUFvQixDQUFDLENBQUM7SUFDM0QsTUFBTSxHQUFHLEdBQUcsYUFBYSxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsQ0FBQztJQUM5QyxPQUFPLGNBQWMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7QUFDMUMsQ0FBQztBQUVEOztHQUVHO0FBQ0gsTUFBTSxVQUFVLFdBQVcsQ0FBQyxJQUEwQjtJQUNwRCxPQUFPLGdCQUFnQixDQUFDLElBQUksQ0FBQyxLQUFLLG1CQUFtQixDQUFDLFNBQVMsQ0FBQztBQUNsRSxDQUFDO0FBRUQ7Ozs7Ozs7Ozs7Ozs7O0dBY0c7QUFDSCxNQUFNLFVBQVUsa0JBQWtCLENBQUMsSUFBMEI7SUFJM0QsdUVBQXVFO0lBQ3ZFLElBQUksQ0FBQyxDQUFDLElBQUksWUFBWSxVQUFVLENBQUMsRUFBRSxDQUFDO1FBQ2xDLE9BQU87WUFDTCxNQUFNLEVBQUUsbUJBQW1CLENBQUMsVUFBVTtZQUN0QyxPQUFPLEVBQUUsSUFBSSxXQUFXLEVBQUUsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQztTQUN4RCxDQUFDO0lBQ0osQ0FBQztJQUVELElBQUksSUFBSSxDQUFDLE1BQU0sR0FBRyxvQkFBb0IsRUFBRSxDQUFDO1FBQ3ZDLE1BQU0sSUFBSSxLQUFLLENBQ2IsOERBQThELG9CQUFvQixlQUFlLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FDL0csQ0FBQztJQUNKLENBQUM7SUFFRCxNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsRUFBRSxvQkFBb0IsQ0FBQyxDQUFDO0lBQzNELE1BQU0sR0FBRyxHQUFHLGFBQWEsQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLENBQUM7SUFFOUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDO1FBQ3pCLE1BQU0sSUFBSSxLQUFLLENBQ2IsMkJBQTJCLEdBQUcsc0NBQXNDLENBQ3JFLENBQUM7SUFDSixDQUFDO0lBRUQsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDO0lBQ3BELE9BQU8sRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFFLE9BQU8sRUFBRSxDQUFDO0FBQ2xDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEZvcm1hdCBwcmVmaXggc3lzdGVtIGZvciBzZXJpYWxpemVkIHBheWxvYWRzLlxuICpcbiAqIEFsbCBzZXJpYWxpemVkIHBheWxvYWRzIGFyZSBwcmVmaXhlZCB3aXRoIGEgNC1ieXRlIGZvcm1hdCBpZGVudGlmaWVyIHRoYXRcbiAqIGFsbG93cyB0aGUgZGVzZXJpYWxpemVyIHRvIGRldGVybWluZSBob3cgdG8gZGVjb2RlIHRoZSBwYXlsb2FkLiBUaGlzIGVuYWJsZXM6XG4gKlxuICogMS4gU2VsZi1kZXNjcmliaW5nIHBheWxvYWRzIOKAlCB0aGUgV29ybGQgbGF5ZXIgaXMgYWdub3N0aWMgdG8gc2VyaWFsaXphdGlvbiBmb3JtYXRcbiAqIDIuIEdyYWR1YWwgbWlncmF0aW9uIOKAlCBvbGQgcnVucyBrZWVwIHdvcmtpbmcsIG5ldyBydW5zIGNhbiB1c2UgbmV3IGZvcm1hdHNcbiAqIDMuIENvbXBvc2FiaWxpdHkg4oCUIGVuY3J5cHRpb24gY2FuIHdyYXAgYW55IGZvcm1hdCAoXCJlbmNyXCIgd3JhcHBpbmcgXCJkZXZsXCIpXG4gKiA0LiBEZWJ1Z2dpbmcg4oCUIHJhdyBkYXRhIGluc3BlY3Rpb24gaW1tZWRpYXRlbHkgcmV2ZWFscyB0aGUgZm9ybWF0XG4gKlxuICogRm9ybWF0OiBbNCBieXRlczogZm9ybWF0IGlkZW50aWZpZXJdW3BheWxvYWRdXG4gKlxuICogVGhlIGZvcm1hdCBwcmVmaXggaXMgb3Blbi1lbmRlZCDigJQgYW55IDQtY2hhcmFjdGVyIFthLXowLTldIHN0cmluZyBpcyB2YWxpZC5cbiAqIFRoaXMgYWxsb3dzIG5ldyBjb2RlY3MgdG8gYmUgYWRkZWQgd2l0aG91dCBtb2RpZnlpbmcgdGhpcyBtb2R1bGUuXG4gKi9cblxuaW1wb3J0IHtcbiAgdHlwZSBGb3JtYXRQcmVmaXgsXG4gIGlzRm9ybWF0UHJlZml4LFxuICBTZXJpYWxpemF0aW9uRm9ybWF0LFxufSBmcm9tICcuL3R5cGVzLmpzJztcblxuLyoqIExlbmd0aCBvZiB0aGUgZm9ybWF0IHByZWZpeCBpbiBieXRlcyAqL1xuY29uc3QgRk9STUFUX1BSRUZJWF9MRU5HVEggPSA0O1xuXG5jb25zdCBmb3JtYXRFbmNvZGVyID0gbmV3IFRleHRFbmNvZGVyKCk7XG5jb25zdCBmb3JtYXREZWNvZGVyID0gbmV3IFRleHREZWNvZGVyKCk7XG5cbi8qKlxuICogRW5jb2RlIGEgcGF5bG9hZCB3aXRoIGEgZm9ybWF0IHByZWZpeC5cbiAqXG4gKiBAcGFyYW0gZm9ybWF0IC0gVGhlIGZvcm1hdCBpZGVudGlmaWVyICg0IGNoYXJzLCBbYS16MC05XSlcbiAqIEBwYXJhbSBwYXlsb2FkIC0gVGhlIHNlcmlhbGl6ZWQgcGF5bG9hZCBieXRlc1xuICogQHJldHVybnMgQSBuZXcgVWludDhBcnJheSB3aXRoIGZvcm1hdCBwcmVmaXggcHJlcGVuZGVkXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBlbmNvZGVXaXRoRm9ybWF0UHJlZml4KFxuICBmb3JtYXQ6IEZvcm1hdFByZWZpeCxcbiAgcGF5bG9hZDogVWludDhBcnJheSB8IHVua25vd25cbik6IFVpbnQ4QXJyYXkgfCB1bmtub3duIHtcbiAgaWYgKCEocGF5bG9hZCBpbnN0YW5jZW9mIFVpbnQ4QXJyYXkpKSB7XG4gICAgcmV0dXJuIHBheWxvYWQ7XG4gIH1cblxuICBjb25zdCBwcmVmaXhCeXRlcyA9IGZvcm1hdEVuY29kZXIuZW5jb2RlKGZvcm1hdCk7XG4gIGNvbnN0IHJlc3VsdCA9IG5ldyBVaW50OEFycmF5KEZPUk1BVF9QUkVGSVhfTEVOR1RIICsgcGF5bG9hZC5sZW5ndGgpO1xuICByZXN1bHQuc2V0KHByZWZpeEJ5dGVzLCAwKTtcbiAgcmVzdWx0LnNldChwYXlsb2FkLCBGT1JNQVRfUFJFRklYX0xFTkdUSCk7XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbi8qKlxuICogUGVlayBhdCB0aGUgZm9ybWF0IHByZWZpeCB3aXRob3V0IGNvbnN1bWluZyBpdC5cbiAqXG4gKiBSZXR1cm5zIHRoZSBwcmVmaXggaWYgaXQncyBhIHZhbGlkIGZvcm1hdCBwcmVmaXggKFthLXowLTldezR9KSxcbiAqIG9yIG51bGwgaWYgdGhlIGRhdGEgaXMgbGVnYWN5L25vbi1iaW5hcnkgb3IgZG9lc24ndCBzdGFydCB3aXRoIGFcbiAqIHZhbGlkIHByZWZpeC5cbiAqXG4gKiBAcGFyYW0gZGF0YSAtIFRoZSBmb3JtYXQtcHJlZml4ZWQgZGF0YVxuICogQHJldHVybnMgVGhlIGZvcm1hdCBwcmVmaXgsIG9yIG51bGxcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHBlZWtGb3JtYXRQcmVmaXgoXG4gIGRhdGE6IFVpbnQ4QXJyYXkgfCB1bmtub3duXG4pOiBGb3JtYXRQcmVmaXggfCBudWxsIHtcbiAgaWYgKCEoZGF0YSBpbnN0YW5jZW9mIFVpbnQ4QXJyYXkpIHx8IGRhdGEubGVuZ3RoIDwgRk9STUFUX1BSRUZJWF9MRU5HVEgpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICBjb25zdCBwcmVmaXhCeXRlcyA9IGRhdGEuc3ViYXJyYXkoMCwgRk9STUFUX1BSRUZJWF9MRU5HVEgpO1xuICBjb25zdCBzdHIgPSBmb3JtYXREZWNvZGVyLmRlY29kZShwcmVmaXhCeXRlcyk7XG4gIHJldHVybiBpc0Zvcm1hdFByZWZpeChzdHIpID8gc3RyIDogbnVsbDtcbn1cblxuLyoqXG4gKiBDaGVjayBpZiBkYXRhIGlzIGVuY3J5cHRlZCAoaGFzICdlbmNyJyBmb3JtYXQgcHJlZml4KS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzRW5jcnlwdGVkKGRhdGE6IFVpbnQ4QXJyYXkgfCB1bmtub3duKTogYm9vbGVhbiB7XG4gIHJldHVybiBwZWVrRm9ybWF0UHJlZml4KGRhdGEpID09PSBTZXJpYWxpemF0aW9uRm9ybWF0LkVOQ1JZUFRFRDtcbn1cblxuLyoqXG4gKiBEZWNvZGUgYSBmb3JtYXQtcHJlZml4ZWQgcGF5bG9hZC5cbiAqXG4gKiBVbmxpa2UgdGhlIGxlZ2FjeSBpbXBsZW1lbnRhdGlvbiB3aGljaCBvbmx5IGFjY2VwdGVkIGtub3duIGZvcm1hdHNcbiAqIChgZGV2bGAsIGBlbmNyYCksIHRoaXMgZnVuY3Rpb24gYWNjZXB0cyBhbnkgdmFsaWQgZm9ybWF0IHByZWZpeFxuICogKGBbYS16MC05XXs0fWApLiBUaGlzIGlzIGludGVudGlvbmFsIGZvciBmb3J3YXJkIGNvbXBhdGliaWxpdHkg4oCUXG4gKiBuZXcgY29kZWNzIChlLmcuIGBjYm9yYCkgY2FuIGJlIGFkZGVkIHdpdGhvdXQgbW9kaWZ5aW5nIHRoaXMgbW9kdWxlLlxuICogQ2FsbGVycyBhcmUgcmVzcG9uc2libGUgZm9yIGNoZWNraW5nIHdoZXRoZXIgdGhleSBzdXBwb3J0IHRoZSByZXR1cm5lZFxuICogZm9ybWF0IGFuZCB0aHJvd2luZyBhbiBhcHByb3ByaWF0ZSBlcnJvciBpZiBub3QgKGUuZy4gXCJVbnN1cHBvcnRlZFxuICogc2VyaWFsaXphdGlvbiBmb3JtYXRcIikuXG4gKlxuICogQHBhcmFtIGRhdGEgLSBUaGUgZm9ybWF0LXByZWZpeGVkIGRhdGFcbiAqIEByZXR1cm5zIEFuIG9iamVjdCB3aXRoIHRoZSBmb3JtYXQgcHJlZml4IGFuZCBwYXlsb2FkXG4gKiBAdGhyb3dzIEVycm9yIGlmIHRoZSBkYXRhIGlzIHRvbyBzaG9ydCBvciBoYXMgYW4gaW52YWxpZCBwcmVmaXhcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGRlY29kZUZvcm1hdFByZWZpeChkYXRhOiBVaW50OEFycmF5IHwgdW5rbm93bik6IHtcbiAgZm9ybWF0OiBGb3JtYXRQcmVmaXg7XG4gIHBheWxvYWQ6IFVpbnQ4QXJyYXk7XG59IHtcbiAgLy8gQ29tcGF0IGZvciBsZWdhY3kgc3BlY1ZlcnNpb24gMSBydW5zIHRoYXQgZG9uJ3QgaGF2ZSBhIGZvcm1hdCBwcmVmaXhcbiAgaWYgKCEoZGF0YSBpbnN0YW5jZW9mIFVpbnQ4QXJyYXkpKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGZvcm1hdDogU2VyaWFsaXphdGlvbkZvcm1hdC5ERVZBTFVFX1YxLFxuICAgICAgcGF5bG9hZDogbmV3IFRleHRFbmNvZGVyKCkuZW5jb2RlKEpTT04uc3RyaW5naWZ5KGRhdGEpKSxcbiAgICB9O1xuICB9XG5cbiAgaWYgKGRhdGEubGVuZ3RoIDwgRk9STUFUX1BSRUZJWF9MRU5HVEgpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICBgRGF0YSB0b28gc2hvcnQgdG8gY29udGFpbiBmb3JtYXQgcHJlZml4OiBleHBlY3RlZCBhdCBsZWFzdCAke0ZPUk1BVF9QUkVGSVhfTEVOR1RIfSBieXRlcywgZ290ICR7ZGF0YS5sZW5ndGh9YFxuICAgICk7XG4gIH1cblxuICBjb25zdCBwcmVmaXhCeXRlcyA9IGRhdGEuc3ViYXJyYXkoMCwgRk9STUFUX1BSRUZJWF9MRU5HVEgpO1xuICBjb25zdCBzdHIgPSBmb3JtYXREZWNvZGVyLmRlY29kZShwcmVmaXhCeXRlcyk7XG5cbiAgaWYgKCFpc0Zvcm1hdFByZWZpeChzdHIpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgYEludmFsaWQgZm9ybWF0IHByZWZpeDogXCIke3N0cn1cIi4gTXVzdCBiZSA0IGNoYXJhY3RlcnMgb2YgW2EtejAtOV0uYFxuICAgICk7XG4gIH1cblxuICBjb25zdCBwYXlsb2FkID0gZGF0YS5zdWJhcnJheShGT1JNQVRfUFJFRklYX0xFTkdUSCk7XG4gIHJldHVybiB7IGZvcm1hdDogc3RyLCBwYXlsb2FkIH07XG59XG4iXX0=
@@ -0,0 +1,18 @@
1
+ /**
2
+ * Serialization module — public API.
3
+ *
4
+ * Re-exports the mode-specific serialize/deserialize functions and
5
+ * the codec/format/encryption abstractions.
6
+ */
7
+ export type { FormatPrefix, SerializableSpecial, Reducers, Revivers, } from './types.js';
8
+ export { SerializationFormat, isFormatPrefix } from './types.js';
9
+ export type { Codec, SerializationMode } from './codec.js';
10
+ export { devalueCodec } from './codec-devalue.js';
11
+ export { encodeWithFormatPrefix, decodeFormatPrefix, peekFormatPrefix, isEncrypted, } from './format.js';
12
+ export { encrypt, decrypt, type CryptoKey, type EncryptionKeyParam, } from './encryption.js';
13
+ import * as workflow from './workflow.js';
14
+ import * as step from './step.js';
15
+ import * as client from './client.js';
16
+ export { workflow, step, client };
17
+ export { revive } from './reducers/common.js';
18
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/serialization/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,YAAY,EACV,YAAY,EACZ,mBAAmB,EACnB,QAAQ,EACR,QAAQ,GACT,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,mBAAmB,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAGjE,YAAY,EAAE,KAAK,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAC3D,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAGlD,OAAO,EACL,sBAAsB,EACtB,kBAAkB,EAClB,gBAAgB,EAChB,WAAW,GACZ,MAAM,aAAa,CAAC;AAGrB,OAAO,EACL,OAAO,EACP,OAAO,EACP,KAAK,SAAS,EACd,KAAK,kBAAkB,GACxB,MAAM,iBAAiB,CAAC;AAGzB,OAAO,KAAK,QAAQ,MAAM,eAAe,CAAC;AAC1C,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAClC,OAAO,KAAK,MAAM,MAAM,aAAa,CAAC;AACtC,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;AAGlC,OAAO,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC"}
@@ -0,0 +1,20 @@
1
+ /**
2
+ * Serialization module — public API.
3
+ *
4
+ * Re-exports the mode-specific serialize/deserialize functions and
5
+ * the codec/format/encryption abstractions.
6
+ */
7
+ export { SerializationFormat, isFormatPrefix } from './types.js';
8
+ export { devalueCodec } from './codec-devalue.js';
9
+ // Re-export format prefix utilities
10
+ export { encodeWithFormatPrefix, decodeFormatPrefix, peekFormatPrefix, isEncrypted, } from './format.js';
11
+ // Re-export composable encryption
12
+ export { encrypt, decrypt, } from './encryption.js';
13
+ // Re-export mode-specific modules as namespaces
14
+ import * as workflow from './workflow.js';
15
+ import * as step from './step.js';
16
+ import * as client from './client.js';
17
+ export { workflow, step, client };
18
+ // Re-export revive helper (used by legacy compat in serialization.ts)
19
+ export { revive } from './reducers/common.js';
20
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvc2VyaWFsaXphdGlvbi9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7R0FLRztBQVNILE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxjQUFjLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFJakUsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBRWxELG9DQUFvQztBQUNwQyxPQUFPLEVBQ0wsc0JBQXNCLEVBQ3RCLGtCQUFrQixFQUNsQixnQkFBZ0IsRUFDaEIsV0FBVyxHQUNaLE1BQU0sYUFBYSxDQUFDO0FBRXJCLGtDQUFrQztBQUNsQyxPQUFPLEVBQ0wsT0FBTyxFQUNQLE9BQU8sR0FHUixNQUFNLGlCQUFpQixDQUFDO0FBRXpCLGdEQUFnRDtBQUNoRCxPQUFPLEtBQUssUUFBUSxNQUFNLGVBQWUsQ0FBQztBQUMxQyxPQUFPLEtBQUssSUFBSSxNQUFNLFdBQVcsQ0FBQztBQUNsQyxPQUFPLEtBQUssTUFBTSxNQUFNLGFBQWEsQ0FBQztBQUN0QyxPQUFPLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsQ0FBQztBQUVsQyxzRUFBc0U7QUFDdEUsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLHNCQUFzQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBTZXJpYWxpemF0aW9uIG1vZHVsZSDigJQgcHVibGljIEFQSS5cbiAqXG4gKiBSZS1leHBvcnRzIHRoZSBtb2RlLXNwZWNpZmljIHNlcmlhbGl6ZS9kZXNlcmlhbGl6ZSBmdW5jdGlvbnMgYW5kXG4gKiB0aGUgY29kZWMvZm9ybWF0L2VuY3J5cHRpb24gYWJzdHJhY3Rpb25zLlxuICovXG5cbi8vIFJlLWV4cG9ydCB0eXBlc1xuZXhwb3J0IHR5cGUge1xuICBGb3JtYXRQcmVmaXgsXG4gIFNlcmlhbGl6YWJsZVNwZWNpYWwsXG4gIFJlZHVjZXJzLFxuICBSZXZpdmVycyxcbn0gZnJvbSAnLi90eXBlcy5qcyc7XG5leHBvcnQgeyBTZXJpYWxpemF0aW9uRm9ybWF0LCBpc0Zvcm1hdFByZWZpeCB9IGZyb20gJy4vdHlwZXMuanMnO1xuXG4vLyBSZS1leHBvcnQgY29kZWMgaW50ZXJmYWNlIGFuZCBtb2RlIHR5cGVcbmV4cG9ydCB0eXBlIHsgQ29kZWMsIFNlcmlhbGl6YXRpb25Nb2RlIH0gZnJvbSAnLi9jb2RlYy5qcyc7XG5leHBvcnQgeyBkZXZhbHVlQ29kZWMgfSBmcm9tICcuL2NvZGVjLWRldmFsdWUuanMnO1xuXG4vLyBSZS1leHBvcnQgZm9ybWF0IHByZWZpeCB1dGlsaXRpZXNcbmV4cG9ydCB7XG4gIGVuY29kZVdpdGhGb3JtYXRQcmVmaXgsXG4gIGRlY29kZUZvcm1hdFByZWZpeCxcbiAgcGVla0Zvcm1hdFByZWZpeCxcbiAgaXNFbmNyeXB0ZWQsXG59IGZyb20gJy4vZm9ybWF0LmpzJztcblxuLy8gUmUtZXhwb3J0IGNvbXBvc2FibGUgZW5jcnlwdGlvblxuZXhwb3J0IHtcbiAgZW5jcnlwdCxcbiAgZGVjcnlwdCxcbiAgdHlwZSBDcnlwdG9LZXksXG4gIHR5cGUgRW5jcnlwdGlvbktleVBhcmFtLFxufSBmcm9tICcuL2VuY3J5cHRpb24uanMnO1xuXG4vLyBSZS1leHBvcnQgbW9kZS1zcGVjaWZpYyBtb2R1bGVzIGFzIG5hbWVzcGFjZXNcbmltcG9ydCAqIGFzIHdvcmtmbG93IGZyb20gJy4vd29ya2Zsb3cuanMnO1xuaW1wb3J0ICogYXMgc3RlcCBmcm9tICcuL3N0ZXAuanMnO1xuaW1wb3J0ICogYXMgY2xpZW50IGZyb20gJy4vY2xpZW50LmpzJztcbmV4cG9ydCB7IHdvcmtmbG93LCBzdGVwLCBjbGllbnQgfTtcblxuLy8gUmUtZXhwb3J0IHJldml2ZSBoZWxwZXIgKHVzZWQgYnkgbGVnYWN5IGNvbXBhdCBpbiBzZXJpYWxpemF0aW9uLnRzKVxuZXhwb3J0IHsgcmV2aXZlIH0gZnJvbSAnLi9yZWR1Y2Vycy9jb21tb24uanMnO1xuIl19
@@ -0,0 +1,11 @@
1
+ /**
2
+ * Reducers and revivers for custom class serialization.
3
+ *
4
+ * Handles:
5
+ * - Class: class constructors with a `classId` property
6
+ * - Instance: instances of classes with custom WORKFLOW_SERIALIZE/DESERIALIZE methods
7
+ */
8
+ import type { Reducers, Revivers } from '../types.js';
9
+ export declare function getClassReducers(): Partial<Reducers>;
10
+ export declare function getClassRevivers(global?: Record<string, any>): Partial<Revivers>;
11
+ //# sourceMappingURL=class.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"class.d.ts","sourceRoot":"","sources":["../../../src/serialization/reducers/class.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAIH,OAAO,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAItD,wBAAgB,gBAAgB,IAAI,OAAO,CAAC,QAAQ,CAAC,CA8BpD;AAID,wBAAgB,gBAAgB,CAC9B,MAAM,GAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAc,GACvC,OAAO,CAAC,QAAQ,CAAC,CAiCnB"}
@@ -0,0 +1,68 @@
1
+ /**
2
+ * Reducers and revivers for custom class serialization.
3
+ *
4
+ * Handles:
5
+ * - Class: class constructors with a `classId` property
6
+ * - Instance: instances of classes with custom WORKFLOW_SERIALIZE/DESERIALIZE methods
7
+ */
8
+ import { WORKFLOW_DESERIALIZE, WORKFLOW_SERIALIZE } from '@workflow/serde';
9
+ import { getSerializationClass } from '../../class-serialization.js';
10
+ // ---- Reducers ----
11
+ export function getClassReducers() {
12
+ return {
13
+ // Class and Instance are intentionally placed before Error so that
14
+ // custom Error subclasses with WORKFLOW_SERIALIZE take precedence
15
+ // over the generic Error serialization (devalue uses first-match-wins).
16
+ Class: (value) => {
17
+ if (typeof value !== 'function')
18
+ return false;
19
+ const classId = value.classId;
20
+ if (typeof classId !== 'string')
21
+ return false;
22
+ return { classId };
23
+ },
24
+ Instance: (value) => {
25
+ if (value === null || typeof value !== 'object')
26
+ return false;
27
+ const cls = value.constructor;
28
+ if (!cls || typeof cls !== 'function')
29
+ return false;
30
+ const serialize = cls[WORKFLOW_SERIALIZE];
31
+ if (typeof serialize !== 'function')
32
+ return false;
33
+ const classId = cls.classId;
34
+ if (typeof classId !== 'string') {
35
+ throw new Error(`Class "${cls.name}" with ${String(WORKFLOW_SERIALIZE)} must have a static "classId" property.`);
36
+ }
37
+ const data = serialize.call(cls, value);
38
+ return { classId, data };
39
+ },
40
+ };
41
+ }
42
+ // ---- Revivers ----
43
+ export function getClassRevivers(global = globalThis) {
44
+ return {
45
+ Class: (value) => {
46
+ const classId = value.classId;
47
+ const cls = getSerializationClass(classId, global);
48
+ if (!cls) {
49
+ throw new Error(`Class "${classId}" not found. Make sure the class is registered with registerSerializationClass.`);
50
+ }
51
+ return cls;
52
+ },
53
+ Instance: (value) => {
54
+ const classId = value.classId;
55
+ const data = value.data;
56
+ const cls = getSerializationClass(classId, global);
57
+ if (!cls) {
58
+ throw new Error(`Class "${classId}" not found. Make sure the class is registered with registerSerializationClass.`);
59
+ }
60
+ const deserialize = cls[WORKFLOW_DESERIALIZE];
61
+ if (typeof deserialize !== 'function') {
62
+ throw new Error(`Class "${classId}" does not have a static ${String(WORKFLOW_DESERIALIZE)} method.`);
63
+ }
64
+ return deserialize.call(cls, data);
65
+ },
66
+ };
67
+ }
68
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xhc3MuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvc2VyaWFsaXphdGlvbi9yZWR1Y2Vycy9jbGFzcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7O0dBTUc7QUFFSCxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMzRSxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUdyRSxxQkFBcUI7QUFFckIsTUFBTSxVQUFVLGdCQUFnQjtJQUM5QixPQUFPO1FBQ0wsbUVBQW1FO1FBQ25FLGtFQUFrRTtRQUNsRSx3RUFBd0U7UUFDeEUsS0FBSyxFQUFFLENBQUMsS0FBSyxFQUFFLEVBQUU7WUFDZixJQUFJLE9BQU8sS0FBSyxLQUFLLFVBQVU7Z0JBQUUsT0FBTyxLQUFLLENBQUM7WUFDOUMsTUFBTSxPQUFPLEdBQUksS0FBYSxDQUFDLE9BQU8sQ0FBQztZQUN2QyxJQUFJLE9BQU8sT0FBTyxLQUFLLFFBQVE7Z0JBQUUsT0FBTyxLQUFLLENBQUM7WUFDOUMsT0FBTyxFQUFFLE9BQU8sRUFBRSxDQUFDO1FBQ3JCLENBQUM7UUFDRCxRQUFRLEVBQUUsQ0FBQyxLQUFLLEVBQUUsRUFBRTtZQUNsQixJQUFJLEtBQUssS0FBSyxJQUFJLElBQUksT0FBTyxLQUFLLEtBQUssUUFBUTtnQkFBRSxPQUFPLEtBQUssQ0FBQztZQUM5RCxNQUFNLEdBQUcsR0FBRyxLQUFLLENBQUMsV0FBVyxDQUFDO1lBQzlCLElBQUksQ0FBQyxHQUFHLElBQUksT0FBTyxHQUFHLEtBQUssVUFBVTtnQkFBRSxPQUFPLEtBQUssQ0FBQztZQUVwRCxNQUFNLFNBQVMsR0FBRyxHQUFHLENBQUMsa0JBQWtCLENBQUMsQ0FBQztZQUMxQyxJQUFJLE9BQU8sU0FBUyxLQUFLLFVBQVU7Z0JBQUUsT0FBTyxLQUFLLENBQUM7WUFFbEQsTUFBTSxPQUFPLEdBQUcsR0FBRyxDQUFDLE9BQU8sQ0FBQztZQUM1QixJQUFJLE9BQU8sT0FBTyxLQUFLLFFBQVEsRUFBRSxDQUFDO2dCQUNoQyxNQUFNLElBQUksS0FBSyxDQUNiLFVBQVUsR0FBRyxDQUFDLElBQUksVUFBVSxNQUFNLENBQUMsa0JBQWtCLENBQUMseUNBQXlDLENBQ2hHLENBQUM7WUFDSixDQUFDO1lBRUQsTUFBTSxJQUFJLEdBQUcsU0FBUyxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsS0FBSyxDQUFDLENBQUM7WUFDeEMsT0FBTyxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsQ0FBQztRQUMzQixDQUFDO0tBQ0YsQ0FBQztBQUNKLENBQUM7QUFFRCxxQkFBcUI7QUFFckIsTUFBTSxVQUFVLGdCQUFnQixDQUM5QixTQUE4QixVQUFVO0lBRXhDLE9BQU87UUFDTCxLQUFLLEVBQUUsQ0FBQyxLQUFLLEVBQUUsRUFBRTtZQUNmLE1BQU0sT0FBTyxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUM7WUFDOUIsTUFBTSxHQUFHLEdBQUcscUJBQXFCLENBQUMsT0FBTyxFQUFFLE1BQU0sQ0FBQyxDQUFDO1lBQ25ELElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztnQkFDVCxNQUFNLElBQUksS0FBSyxDQUNiLFVBQVUsT0FBTyxpRkFBaUYsQ0FDbkcsQ0FBQztZQUNKLENBQUM7WUFDRCxPQUFPLEdBQUcsQ0FBQztRQUNiLENBQUM7UUFDRCxRQUFRLEVBQUUsQ0FBQyxLQUFLLEVBQUUsRUFBRTtZQUNsQixNQUFNLE9BQU8sR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDO1lBQzlCLE1BQU0sSUFBSSxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUM7WUFFeEIsTUFBTSxHQUFHLEdBQUcscUJBQXFCLENBQUMsT0FBTyxFQUFFLE1BQU0sQ0FBQyxDQUFDO1lBQ25ELElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztnQkFDVCxNQUFNLElBQUksS0FBSyxDQUNiLFVBQVUsT0FBTyxpRkFBaUYsQ0FDbkcsQ0FBQztZQUNKLENBQUM7WUFFRCxNQUFNLFdBQVcsR0FBSSxHQUFXLENBQUMsb0JBQW9CLENBQUMsQ0FBQztZQUN2RCxJQUFJLE9BQU8sV0FBVyxLQUFLLFVBQVUsRUFBRSxDQUFDO2dCQUN0QyxNQUFNLElBQUksS0FBSyxDQUNiLFVBQVUsT0FBTyw0QkFBNEIsTUFBTSxDQUFDLG9CQUFvQixDQUFDLFVBQVUsQ0FDcEYsQ0FBQztZQUNKLENBQUM7WUFFRCxPQUFPLFdBQVcsQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQ3JDLENBQUM7S0FDRixDQUFDO0FBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogUmVkdWNlcnMgYW5kIHJldml2ZXJzIGZvciBjdXN0b20gY2xhc3Mgc2VyaWFsaXphdGlvbi5cbiAqXG4gKiBIYW5kbGVzOlxuICogLSBDbGFzczogY2xhc3MgY29uc3RydWN0b3JzIHdpdGggYSBgY2xhc3NJZGAgcHJvcGVydHlcbiAqIC0gSW5zdGFuY2U6IGluc3RhbmNlcyBvZiBjbGFzc2VzIHdpdGggY3VzdG9tIFdPUktGTE9XX1NFUklBTElaRS9ERVNFUklBTElaRSBtZXRob2RzXG4gKi9cblxuaW1wb3J0IHsgV09SS0ZMT1dfREVTRVJJQUxJWkUsIFdPUktGTE9XX1NFUklBTElaRSB9IGZyb20gJ0B3b3JrZmxvdy9zZXJkZSc7XG5pbXBvcnQgeyBnZXRTZXJpYWxpemF0aW9uQ2xhc3MgfSBmcm9tICcuLi8uLi9jbGFzcy1zZXJpYWxpemF0aW9uLmpzJztcbmltcG9ydCB0eXBlIHsgUmVkdWNlcnMsIFJldml2ZXJzIH0gZnJvbSAnLi4vdHlwZXMuanMnO1xuXG4vLyAtLS0tIFJlZHVjZXJzIC0tLS1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldENsYXNzUmVkdWNlcnMoKTogUGFydGlhbDxSZWR1Y2Vycz4ge1xuICByZXR1cm4ge1xuICAgIC8vIENsYXNzIGFuZCBJbnN0YW5jZSBhcmUgaW50ZW50aW9uYWxseSBwbGFjZWQgYmVmb3JlIEVycm9yIHNvIHRoYXRcbiAgICAvLyBjdXN0b20gRXJyb3Igc3ViY2xhc3NlcyB3aXRoIFdPUktGTE9XX1NFUklBTElaRSB0YWtlIHByZWNlZGVuY2VcbiAgICAvLyBvdmVyIHRoZSBnZW5lcmljIEVycm9yIHNlcmlhbGl6YXRpb24gKGRldmFsdWUgdXNlcyBmaXJzdC1tYXRjaC13aW5zKS5cbiAgICBDbGFzczogKHZhbHVlKSA9PiB7XG4gICAgICBpZiAodHlwZW9mIHZhbHVlICE9PSAnZnVuY3Rpb24nKSByZXR1cm4gZmFsc2U7XG4gICAgICBjb25zdCBjbGFzc0lkID0gKHZhbHVlIGFzIGFueSkuY2xhc3NJZDtcbiAgICAgIGlmICh0eXBlb2YgY2xhc3NJZCAhPT0gJ3N0cmluZycpIHJldHVybiBmYWxzZTtcbiAgICAgIHJldHVybiB7IGNsYXNzSWQgfTtcbiAgICB9LFxuICAgIEluc3RhbmNlOiAodmFsdWUpID0+IHtcbiAgICAgIGlmICh2YWx1ZSA9PT0gbnVsbCB8fCB0eXBlb2YgdmFsdWUgIT09ICdvYmplY3QnKSByZXR1cm4gZmFsc2U7XG4gICAgICBjb25zdCBjbHMgPSB2YWx1ZS5jb25zdHJ1Y3RvcjtcbiAgICAgIGlmICghY2xzIHx8IHR5cGVvZiBjbHMgIT09ICdmdW5jdGlvbicpIHJldHVybiBmYWxzZTtcblxuICAgICAgY29uc3Qgc2VyaWFsaXplID0gY2xzW1dPUktGTE9XX1NFUklBTElaRV07XG4gICAgICBpZiAodHlwZW9mIHNlcmlhbGl6ZSAhPT0gJ2Z1bmN0aW9uJykgcmV0dXJuIGZhbHNlO1xuXG4gICAgICBjb25zdCBjbGFzc0lkID0gY2xzLmNsYXNzSWQ7XG4gICAgICBpZiAodHlwZW9mIGNsYXNzSWQgIT09ICdzdHJpbmcnKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICBgQ2xhc3MgXCIke2Nscy5uYW1lfVwiIHdpdGggJHtTdHJpbmcoV09SS0ZMT1dfU0VSSUFMSVpFKX0gbXVzdCBoYXZlIGEgc3RhdGljIFwiY2xhc3NJZFwiIHByb3BlcnR5LmBcbiAgICAgICAgKTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgZGF0YSA9IHNlcmlhbGl6ZS5jYWxsKGNscywgdmFsdWUpO1xuICAgICAgcmV0dXJuIHsgY2xhc3NJZCwgZGF0YSB9O1xuICAgIH0sXG4gIH07XG59XG5cbi8vIC0tLS0gUmV2aXZlcnMgLS0tLVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0Q2xhc3NSZXZpdmVycyhcbiAgZ2xvYmFsOiBSZWNvcmQ8c3RyaW5nLCBhbnk+ID0gZ2xvYmFsVGhpc1xuKTogUGFydGlhbDxSZXZpdmVycz4ge1xuICByZXR1cm4ge1xuICAgIENsYXNzOiAodmFsdWUpID0+IHtcbiAgICAgIGNvbnN0IGNsYXNzSWQgPSB2YWx1ZS5jbGFzc0lkO1xuICAgICAgY29uc3QgY2xzID0gZ2V0U2VyaWFsaXphdGlvbkNsYXNzKGNsYXNzSWQsIGdsb2JhbCk7XG4gICAgICBpZiAoIWNscykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgYENsYXNzIFwiJHtjbGFzc0lkfVwiIG5vdCBmb3VuZC4gTWFrZSBzdXJlIHRoZSBjbGFzcyBpcyByZWdpc3RlcmVkIHdpdGggcmVnaXN0ZXJTZXJpYWxpemF0aW9uQ2xhc3MuYFxuICAgICAgICApO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGNscztcbiAgICB9LFxuICAgIEluc3RhbmNlOiAodmFsdWUpID0+IHtcbiAgICAgIGNvbnN0IGNsYXNzSWQgPSB2YWx1ZS5jbGFzc0lkO1xuICAgICAgY29uc3QgZGF0YSA9IHZhbHVlLmRhdGE7XG5cbiAgICAgIGNvbnN0IGNscyA9IGdldFNlcmlhbGl6YXRpb25DbGFzcyhjbGFzc0lkLCBnbG9iYWwpO1xuICAgICAgaWYgKCFjbHMpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgIGBDbGFzcyBcIiR7Y2xhc3NJZH1cIiBub3QgZm91bmQuIE1ha2Ugc3VyZSB0aGUgY2xhc3MgaXMgcmVnaXN0ZXJlZCB3aXRoIHJlZ2lzdGVyU2VyaWFsaXphdGlvbkNsYXNzLmBcbiAgICAgICAgKTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgZGVzZXJpYWxpemUgPSAoY2xzIGFzIGFueSlbV09SS0ZMT1dfREVTRVJJQUxJWkVdO1xuICAgICAgaWYgKHR5cGVvZiBkZXNlcmlhbGl6ZSAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgYENsYXNzIFwiJHtjbGFzc0lkfVwiIGRvZXMgbm90IGhhdmUgYSBzdGF0aWMgJHtTdHJpbmcoV09SS0ZMT1dfREVTRVJJQUxJWkUpfSBtZXRob2QuYFxuICAgICAgICApO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gZGVzZXJpYWxpemUuY2FsbChjbHMsIGRhdGEpO1xuICAgIH0sXG4gIH07XG59XG4iXX0=
@@ -0,0 +1,16 @@
1
+ /**
2
+ * Common reducers and revivers for types shared across all serialization modes.
3
+ *
4
+ * Handles: ArrayBuffer, BigInt, typed arrays, Date, Error, Headers, Map, Set,
5
+ * RegExp, Request, Response, URL, URLSearchParams.
6
+ *
7
+ * Note: Uses Node.js Buffer for base64 encoding/decoding. For environments
8
+ * without Buffer (e.g. QuickJS VM), a polyfill or alternative base64
9
+ * implementation will be needed.
10
+ */
11
+ import type { Reducers, Revivers } from '../types.js';
12
+ declare function revive(str: string): any;
13
+ export declare function getCommonReducers(global?: Record<string, any>): Partial<Reducers>;
14
+ export declare function getCommonRevivers(global?: Record<string, any>): Partial<Revivers>;
15
+ export { revive };
16
+ //# sourceMappingURL=common.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"common.d.ts","sourceRoot":"","sources":["../../../src/serialization/reducers/common.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAIH,OAAO,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAuB,MAAM,aAAa,CAAC;AAgC3E,iBAAS,MAAM,CAAC,GAAG,EAAE,MAAM,OAM1B;AAmHD,wBAAgB,iBAAiB,CAC/B,MAAM,GAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAc,GACvC,OAAO,CAAC,QAAQ,CAAC,CAsJnB;AAID,wBAAgB,iBAAiB,CAC/B,MAAM,GAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAc,GACvC,OAAO,CAAC,QAAQ,CAAC,CAmHnB;AAGD,OAAO,EAAE,MAAM,EAAE,CAAC"}