@n8n/expression-runtime 0.30.0 → 0.31.1

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 (122) hide show
  1. package/README.md +4 -0
  2. package/dist/bundle/runtime.esm.js +17 -17
  3. package/dist/bundle/runtime.esm.js.map +4 -4
  4. package/dist/bundle/runtime.iife.js +17 -17
  5. package/dist/bundle/runtime.iife.js.map +4 -4
  6. package/dist/cjs/bridge/host-functions.d.ts +74 -0
  7. package/dist/cjs/bridge/host-functions.d.ts.map +1 -0
  8. package/dist/cjs/bridge/host-functions.js +336 -0
  9. package/dist/cjs/bridge/host-functions.js.map +1 -0
  10. package/dist/cjs/bridge/isolated-vm-bridge.d.ts +24 -150
  11. package/dist/cjs/bridge/isolated-vm-bridge.d.ts.map +1 -1
  12. package/dist/cjs/bridge/isolated-vm-bridge.js +130 -429
  13. package/dist/cjs/bridge/isolated-vm-bridge.js.map +1 -1
  14. package/dist/cjs/bridge/quickjs-bridge.d.ts +21 -6
  15. package/dist/cjs/bridge/quickjs-bridge.d.ts.map +1 -1
  16. package/dist/cjs/bridge/quickjs-bridge.js +377 -402
  17. package/dist/cjs/bridge/quickjs-bridge.js.map +1 -1
  18. package/dist/cjs/build.tsbuildinfo +1 -1
  19. package/dist/cjs/evaluator/expression-evaluator.d.ts +17 -0
  20. package/dist/cjs/evaluator/expression-evaluator.d.ts.map +1 -1
  21. package/dist/cjs/evaluator/expression-evaluator.js +61 -1
  22. package/dist/cjs/evaluator/expression-evaluator.js.map +1 -1
  23. package/dist/cjs/extensions/array-extensions.d.ts.map +1 -1
  24. package/dist/cjs/extensions/array-extensions.js +7 -15
  25. package/dist/cjs/extensions/array-extensions.js.map +1 -1
  26. package/dist/cjs/extensions/function-extensions.d.ts +2 -0
  27. package/dist/cjs/extensions/function-extensions.d.ts.map +1 -1
  28. package/dist/cjs/extensions/function-extensions.js +13 -10
  29. package/dist/cjs/extensions/function-extensions.js.map +1 -1
  30. package/dist/cjs/extensions/object-extensions.d.ts.map +1 -1
  31. package/dist/cjs/extensions/object-extensions.js +3 -11
  32. package/dist/cjs/extensions/object-extensions.js.map +1 -1
  33. package/dist/cjs/extensions/utils.d.ts +1 -0
  34. package/dist/cjs/extensions/utils.d.ts.map +1 -1
  35. package/dist/cjs/extensions/utils.js +10 -0
  36. package/dist/cjs/extensions/utils.js.map +1 -1
  37. package/dist/cjs/observability/metrics.d.ts +12 -0
  38. package/dist/cjs/observability/metrics.d.ts.map +1 -1
  39. package/dist/cjs/observability/metrics.js +12 -0
  40. package/dist/cjs/observability/metrics.js.map +1 -1
  41. package/dist/cjs/runtime/lazy-proxy.d.ts +2 -0
  42. package/dist/cjs/runtime/lazy-proxy.d.ts.map +1 -1
  43. package/dist/cjs/runtime/lazy-proxy.js +29 -15
  44. package/dist/cjs/runtime/lazy-proxy.js.map +1 -1
  45. package/dist/cjs/runtime/luxon-transfer.d.ts +62 -0
  46. package/dist/cjs/runtime/luxon-transfer.d.ts.map +1 -0
  47. package/dist/cjs/runtime/luxon-transfer.js +200 -0
  48. package/dist/cjs/runtime/luxon-transfer.js.map +1 -0
  49. package/dist/cjs/runtime/serialize.d.ts +7 -7
  50. package/dist/cjs/runtime/serialize.d.ts.map +1 -1
  51. package/dist/cjs/runtime/serialize.js +42 -30
  52. package/dist/cjs/runtime/serialize.js.map +1 -1
  53. package/dist/cjs/runtime/transfer.d.ts +77 -0
  54. package/dist/cjs/runtime/transfer.d.ts.map +1 -0
  55. package/dist/cjs/runtime/transfer.js +183 -0
  56. package/dist/cjs/runtime/transfer.js.map +1 -0
  57. package/dist/cjs/types/bridge.d.ts +16 -0
  58. package/dist/cjs/types/bridge.d.ts.map +1 -1
  59. package/dist/cjs/types/bridge.js +1 -0
  60. package/dist/cjs/types/bridge.js.map +1 -1
  61. package/dist/cjs/types/evaluator.d.ts +9 -0
  62. package/dist/cjs/types/evaluator.d.ts.map +1 -1
  63. package/dist/cjs/types/evaluator.js.map +1 -1
  64. package/dist/esm/bridge/host-functions.d.ts +74 -0
  65. package/dist/esm/bridge/host-functions.d.ts.map +1 -0
  66. package/dist/esm/bridge/host-functions.js +328 -0
  67. package/dist/esm/bridge/host-functions.js.map +1 -0
  68. package/dist/esm/bridge/isolated-vm-bridge.d.ts +24 -150
  69. package/dist/esm/bridge/isolated-vm-bridge.d.ts.map +1 -1
  70. package/dist/esm/bridge/isolated-vm-bridge.js +126 -425
  71. package/dist/esm/bridge/isolated-vm-bridge.js.map +1 -1
  72. package/dist/esm/bridge/quickjs-bridge.d.ts +21 -6
  73. package/dist/esm/bridge/quickjs-bridge.d.ts.map +1 -1
  74. package/dist/esm/bridge/quickjs-bridge.js +368 -393
  75. package/dist/esm/bridge/quickjs-bridge.js.map +1 -1
  76. package/dist/esm/build.tsbuildinfo +1 -1
  77. package/dist/esm/evaluator/expression-evaluator.d.ts +17 -0
  78. package/dist/esm/evaluator/expression-evaluator.d.ts.map +1 -1
  79. package/dist/esm/evaluator/expression-evaluator.js +61 -1
  80. package/dist/esm/evaluator/expression-evaluator.js.map +1 -1
  81. package/dist/esm/extensions/array-extensions.d.ts.map +1 -1
  82. package/dist/esm/extensions/array-extensions.js +1 -9
  83. package/dist/esm/extensions/array-extensions.js.map +1 -1
  84. package/dist/esm/extensions/function-extensions.d.ts +2 -0
  85. package/dist/esm/extensions/function-extensions.d.ts.map +1 -1
  86. package/dist/esm/extensions/function-extensions.js +12 -9
  87. package/dist/esm/extensions/function-extensions.js.map +1 -1
  88. package/dist/esm/extensions/object-extensions.d.ts.map +1 -1
  89. package/dist/esm/extensions/object-extensions.js +1 -9
  90. package/dist/esm/extensions/object-extensions.js.map +1 -1
  91. package/dist/esm/extensions/utils.d.ts +1 -0
  92. package/dist/esm/extensions/utils.d.ts.map +1 -1
  93. package/dist/esm/extensions/utils.js +9 -0
  94. package/dist/esm/extensions/utils.js.map +1 -1
  95. package/dist/esm/observability/metrics.d.ts +12 -0
  96. package/dist/esm/observability/metrics.d.ts.map +1 -1
  97. package/dist/esm/observability/metrics.js +12 -0
  98. package/dist/esm/observability/metrics.js.map +1 -1
  99. package/dist/esm/runtime/lazy-proxy.d.ts +2 -0
  100. package/dist/esm/runtime/lazy-proxy.d.ts.map +1 -1
  101. package/dist/esm/runtime/lazy-proxy.js +29 -15
  102. package/dist/esm/runtime/lazy-proxy.js.map +1 -1
  103. package/dist/esm/runtime/luxon-transfer.d.ts +62 -0
  104. package/dist/esm/runtime/luxon-transfer.d.ts.map +1 -0
  105. package/dist/esm/runtime/luxon-transfer.js +183 -0
  106. package/dist/esm/runtime/luxon-transfer.js.map +1 -0
  107. package/dist/esm/runtime/serialize.d.ts +7 -7
  108. package/dist/esm/runtime/serialize.d.ts.map +1 -1
  109. package/dist/esm/runtime/serialize.js +42 -30
  110. package/dist/esm/runtime/serialize.js.map +1 -1
  111. package/dist/esm/runtime/transfer.d.ts +77 -0
  112. package/dist/esm/runtime/transfer.d.ts.map +1 -0
  113. package/dist/esm/runtime/transfer.js +173 -0
  114. package/dist/esm/runtime/transfer.js.map +1 -0
  115. package/dist/esm/types/bridge.d.ts +16 -0
  116. package/dist/esm/types/bridge.d.ts.map +1 -1
  117. package/dist/esm/types/bridge.js +1 -0
  118. package/dist/esm/types/bridge.js.map +1 -1
  119. package/dist/esm/types/evaluator.d.ts +9 -0
  120. package/dist/esm/types/evaluator.d.ts.map +1 -1
  121. package/dist/esm/types/evaluator.js.map +1 -1
  122. package/package.json +6 -6
@@ -50,6 +50,8 @@ export function getProxyPath(obj) {
50
50
  * 2. Metadata indicates type: primitive, object, or array
51
51
  * 3. For objects/arrays: Create nested proxy (shape-matched) for lazy loading
52
52
  * 4. Cache all fetched values in target to avoid repeated callbacks
53
+ * 5. On the first write or delete: shallow-materialize into the cache
54
+ * (copy-on-write). Mutations stay in the evaluation and never reach the host.
53
55
  *
54
56
  * Callable host bindings (`$('Foo').first()`, `$items()`, etc.) do not flow
55
57
  * through this proxy — they are wired as in-isolate stubs on `target` that
@@ -69,7 +71,8 @@ export function createDeepLazyProxy(basePath = [], meta, callbacks) {
69
71
  const arrayLength = isArray ? meta.length : 0;
70
72
  const objectKeys = meta?.kind === 'object' ? meta.keys : undefined;
71
73
  // Cache for keys fetched from the bridge (root object proxies without known keys).
72
- // Shared between ownKeys and getOwnPropertyDescriptor for consistency.
74
+ // Shared by ownKeys, getOwnPropertyDescriptor, and materialize() so all three
75
+ // see the same key list.
73
76
  let fetchedKeys;
74
77
  function resolveObjectKeys() {
75
78
  if (objectKeys)
@@ -115,10 +118,16 @@ export function createDeepLazyProxy(basePath = [], meta, callbacks) {
115
118
  // never cross the isolate boundary — the host callback surface is read-only
116
119
  // (getValueAtPath / getArrayElement) — and the mutated copy dies with the
117
120
  // per-evaluation context.
121
+ // The guard must be in EVERY trap: after mutation, the construction-time
122
+ // meta (arrayLength, host key list, host `in` checks) is stale — an
123
+ // unguarded trap would report the pre-push length or resurrect deleted keys.
118
124
  let materialized = false;
119
- function fetchAndCacheArrayElement(idx) {
125
+ // `prop` is the already-stringified index — callers have it at hand, and
126
+ // re-deriving it here would put a String() allocation on the hot read path.
127
+ // Plain assignment is safe here (unlike fetchAndCacheObjectValue): `prop`
128
+ // is always a canonical index string, never a setter-chain key like '__proto__'.
129
+ function fetchAndCacheArrayElement(idx, prop) {
120
130
  const t = target;
121
- const prop = String(idx);
122
131
  const element = getArrayElement(basePath, idx);
123
132
  // Primitives (and null) skip `materializeChild`'s metadata checks.
124
133
  if (element === null || typeof element !== 'object') {
@@ -145,10 +154,14 @@ export function createDeepLazyProxy(basePath = [], meta, callbacks) {
145
154
  function materialize() {
146
155
  if (materialized)
147
156
  return;
157
+ // Keep cached entries: a cached child proxy can already carry its own
158
+ // copy-on-write mutations; a re-fetch would create a fresh proxy and
159
+ // discard them.
148
160
  if (isArray) {
149
161
  for (let i = 0; i < arrayLength; i++) {
150
- if (!Object.prototype.hasOwnProperty.call(target, String(i)))
151
- fetchAndCacheArrayElement(i);
162
+ const prop = String(i);
163
+ if (!Object.prototype.hasOwnProperty.call(target, prop))
164
+ fetchAndCacheArrayElement(i, prop);
152
165
  }
153
166
  target.length = arrayLength;
154
167
  }
@@ -237,7 +250,6 @@ export function createDeepLazyProxy(basePath = [], meta, callbacks) {
237
250
  if (isArray && prop === 'length') {
238
251
  return arrayLength;
239
252
  }
240
- // Check cache - if already fetched, return cached value
241
253
  if (prop in targetObj) {
242
254
  return targetObj[prop];
243
255
  }
@@ -245,21 +257,26 @@ export function createDeepLazyProxy(basePath = [], meta, callbacks) {
245
257
  const idx = isInArrayBounds(prop);
246
258
  if (idx === undefined)
247
259
  return undefined;
248
- return fetchAndCacheArrayElement(idx);
260
+ return fetchAndCacheArrayElement(idx, prop);
249
261
  }
250
262
  return fetchAndCacheObjectValue(prop);
251
263
  },
252
- set(_targetObj, prop, value) {
264
+ // Expression code runs in sloppy mode (the eval wrapper adds no
265
+ // 'use strict'), so a false result from these traps no-ops silently
266
+ // instead of throwing. Materialize, then let Reflect apply the
267
+ // mutation for real.
268
+ set(_targetObj, prop, value, receiver) {
253
269
  materialize();
254
- return Reflect.set(target, prop, value);
270
+ // Forward the receiver: when the proxy sits on another object's
271
+ // prototype chain, the write must create an own property on that
272
+ // object, not land in this proxy's cache.
273
+ return Reflect.set(target, prop, value, receiver);
255
274
  },
256
275
  deleteProperty(_targetObj, prop) {
257
276
  materialize();
258
277
  return Reflect.deleteProperty(target, prop);
259
278
  },
260
279
  has(targetObj, prop) {
261
- // Implement 'in' operator support
262
- // Example: '$json' in data
263
280
  if (materialized)
264
281
  return Reflect.has(targetObj, prop);
265
282
  // Mirror the get trap: symbol-keyed lookups defer to the target so
@@ -273,18 +290,15 @@ export function createDeepLazyProxy(basePath = [], meta, callbacks) {
273
290
  return true;
274
291
  return isInArrayBounds(prop) !== undefined;
275
292
  }
276
- // Check cache first
277
293
  if (prop in targetObj) {
278
294
  return true;
279
295
  }
280
- // Build path and check existence via callback
281
296
  const path = [...basePath, prop];
282
297
  const value = getValueAtPath(path);
283
298
  // Handle errors serialized by host-side callbacks — reconstruct and throw
284
299
  // so the isolate's outer try-catch can serialize them back via __reportError
285
300
  throwIfErrorSentinel(value);
286
- // Property exists if value is not undefined
287
- // Note: null values mean property exists but is null
301
+ // Note: null values mean the property exists but is null.
288
302
  return value !== undefined;
289
303
  },
290
304
  });
@@ -1 +1 @@
1
- {"version":3,"file":"lazy-proxy.js","sourceRoot":"","sources":["../../../src/runtime/lazy-proxy.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"lazy-proxy.js","sourceRoot":"","sources":["../../../src/runtime/lazy-proxy.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,62 @@
1
+ /**
2
+ * Carry luxon values across the runtime boundary.
3
+ *
4
+ * A luxon DateTime, Duration or Interval is a class instance, and structured
5
+ * clone does not carry the prototype of one. Each goes across as a marker
6
+ * object in the framing `transfer.ts` defines, and the host rebuilds a real
7
+ * instance from it.
8
+ */
9
+ import { DateTime, Duration, Interval } from 'luxon';
10
+ import type { DurationLikeObject } from 'luxon';
11
+ import type { SentinelDecoder, SentinelEncoder, TransferSentinel } from './transfer';
12
+ import { TRANSFER_TYPE_KEY } from './transfer';
13
+ export declare const DATE_TIME_TYPE = "DateTime";
14
+ export declare const DURATION_TYPE = "Duration";
15
+ export declare const INTERVAL_TYPE = "Interval";
16
+ export interface InvalidLuxonSentinel {
17
+ __invalidReason?: string;
18
+ __invalidExplanation?: string | null;
19
+ }
20
+ export interface DateTimeSentinel extends TransferSentinel, InvalidLuxonSentinel {
21
+ [TRANSFER_TYPE_KEY]: typeof DATE_TIME_TYPE;
22
+ __isoString?: string;
23
+ __zone?: string;
24
+ }
25
+ export interface DurationSentinel extends TransferSentinel, InvalidLuxonSentinel {
26
+ [TRANSFER_TYPE_KEY]: typeof DURATION_TYPE;
27
+ __values?: DurationLikeObject;
28
+ }
29
+ export interface IntervalSentinel extends TransferSentinel, InvalidLuxonSentinel {
30
+ [TRANSFER_TYPE_KEY]: typeof INTERVAL_TYPE;
31
+ __start?: DateTimeSentinel;
32
+ __end?: DateTimeSentinel;
33
+ }
34
+ export type LuxonSentinel = DateTimeSentinel | DurationSentinel | IntervalSentinel;
35
+ export declare function isDateTimeSentinel(value: unknown): value is DateTimeSentinel;
36
+ export declare function isDurationSentinel(value: unknown): value is DurationSentinel;
37
+ export declare function isIntervalSentinel(value: unknown): value is IntervalSentinel;
38
+ export declare function isLuxonSentinel(value: unknown): value is LuxonSentinel;
39
+ export declare function dateTimeToSentinel(value: DateTime): DateTimeSentinel;
40
+ export declare function durationToSentinel(value: Duration): DurationSentinel;
41
+ export declare function intervalToSentinel(value: Interval): IntervalSentinel;
42
+ export declare function rebuildDateTime(sentinel: DateTimeSentinel): DateTime;
43
+ export declare function rebuildDuration(sentinel: DurationSentinel): Duration;
44
+ export declare function rebuildInterval(sentinel: IntervalSentinel): Interval;
45
+ export declare function rebuildLuxonValue(sentinel: LuxonSentinel): DateTime | Duration | Interval;
46
+ /**
47
+ * Turn a luxon instance into a marker, or give back nothing for any other value.
48
+ *
49
+ * The luxon `is*` helpers only read a flag on the object, which user data can
50
+ * also hold. The prototype check makes sure the value is a real instance.
51
+ */
52
+ export declare const encodeLuxonValue: SentinelEncoder;
53
+ /**
54
+ * Rebuild a luxon instance from a marker.
55
+ *
56
+ * A marker that names a type no encoder here wrote is given back as the plain
57
+ * object it is, which is what the host did before the type had a marker.
58
+ */
59
+ export declare const decodeLuxonSentinel: SentinelDecoder;
60
+ /** Walk a transferred value and rebuild every luxon instance in it. */
61
+ export declare function unwrapLuxonValues(value: unknown): unknown;
62
+ //# sourceMappingURL=luxon-transfer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"luxon-transfer.d.ts","sourceRoot":"","sources":["../../../src/runtime/luxon-transfer.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAY,QAAQ,EAAE,MAAM,OAAO,CAAC;AAC/D,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,OAAO,CAAC;AAEhD,OAAO,KAAK,EAAE,eAAe,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AACrF,OAAO,EAGN,iBAAiB,EAEjB,MAAM,YAAY,CAAC;AAEpB,eAAO,MAAM,cAAc,aAAa,CAAC;AACzC,eAAO,MAAM,aAAa,aAAa,CAAC;AACxC,eAAO,MAAM,aAAa,aAAa,CAAC;AAExC,MAAM,WAAW,oBAAoB;IACpC,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,oBAAoB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CACrC;AAED,MAAM,WAAW,gBAAiB,SAAQ,gBAAgB,EAAE,oBAAoB;IAC/E,CAAC,iBAAiB,CAAC,EAAE,OAAO,cAAc,CAAC;IAC3C,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,MAAM,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,gBAAiB,SAAQ,gBAAgB,EAAE,oBAAoB;IAC/E,CAAC,iBAAiB,CAAC,EAAE,OAAO,aAAa,CAAC;IAC1C,QAAQ,CAAC,EAAE,kBAAkB,CAAC;CAC9B;AAED,MAAM,WAAW,gBAAiB,SAAQ,gBAAgB,EAAE,oBAAoB;IAC/E,CAAC,iBAAiB,CAAC,EAAE,OAAO,aAAa,CAAC;IAC1C,OAAO,CAAC,EAAE,gBAAgB,CAAC;IAC3B,KAAK,CAAC,EAAE,gBAAgB,CAAC;CACzB;AAED,MAAM,MAAM,aAAa,GAAG,gBAAgB,GAAG,gBAAgB,GAAG,gBAAgB,CAAC;AAEnF,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,gBAAgB,CAE5E;AAED,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,gBAAgB,CAE5E;AAED,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,gBAAgB,CAE5E;AAED,wBAAgB,eAAe,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,aAAa,CAEtE;AAED,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,QAAQ,GAAG,gBAAgB,CAgBpE;AAED,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,QAAQ,GAAG,gBAAgB,CASpE;AAED,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,QAAQ,GAAG,gBAAgB,CAapE;AA2DD,wBAAgB,eAAe,CAAC,QAAQ,EAAE,gBAAgB,GAAG,QAAQ,CAWpE;AAED,wBAAgB,eAAe,CAAC,QAAQ,EAAE,gBAAgB,GAAG,QAAQ,CAMpE;AAED,wBAAgB,eAAe,CAAC,QAAQ,EAAE,gBAAgB,GAAG,QAAQ,CAOpE;AAED,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,aAAa,GAAG,QAAQ,GAAG,QAAQ,GAAG,QAAQ,CAIzF;AAED;;;;;GAKG;AACH,eAAO,MAAM,gBAAgB,EAAE,eAK9B,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,mBAAmB,EAAE,eAGjC,CAAC;AAEF,uEAAuE;AACvE,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAEzD"}
@@ -0,0 +1,183 @@
1
+ /**
2
+ * Carry luxon values across the runtime boundary.
3
+ *
4
+ * A luxon DateTime, Duration or Interval is a class instance, and structured
5
+ * clone does not carry the prototype of one. Each goes across as a marker
6
+ * object in the framing `transfer.ts` defines, and the host rebuilds a real
7
+ * instance from it.
8
+ */
9
+ import { DateTime, Duration, IANAZone, Interval } from 'luxon';
10
+ import { isPlainObject, transferTypeOf, TRANSFER_TYPE_KEY, unwrapTransferSentinels, } from './transfer';
11
+ export const DATE_TIME_TYPE = 'DateTime';
12
+ export const DURATION_TYPE = 'Duration';
13
+ export const INTERVAL_TYPE = 'Interval';
14
+ export function isDateTimeSentinel(value) {
15
+ return transferTypeOf(value) === DATE_TIME_TYPE;
16
+ }
17
+ export function isDurationSentinel(value) {
18
+ return transferTypeOf(value) === DURATION_TYPE;
19
+ }
20
+ export function isIntervalSentinel(value) {
21
+ return transferTypeOf(value) === INTERVAL_TYPE;
22
+ }
23
+ export function isLuxonSentinel(value) {
24
+ return isDateTimeSentinel(value) || isDurationSentinel(value) || isIntervalSentinel(value);
25
+ }
26
+ export function dateTimeToSentinel(value) {
27
+ if (!value.isValid) {
28
+ return {
29
+ [TRANSFER_TYPE_KEY]: DATE_TIME_TYPE,
30
+ __invalidReason: value.invalidReason ?? 'unknown',
31
+ __invalidExplanation: value.invalidExplanation,
32
+ };
33
+ }
34
+ const sentinel = {
35
+ [TRANSFER_TYPE_KEY]: DATE_TIME_TYPE,
36
+ __isoString: value.toISO() ?? '',
37
+ };
38
+ // Carry a zone name only when the value does not use the system zone. The
39
+ // host then keeps its own system zone for such a value.
40
+ if (value.zone.type !== 'system')
41
+ sentinel.__zone = value.zone.name;
42
+ return sentinel;
43
+ }
44
+ export function durationToSentinel(value) {
45
+ if (!value.isValid) {
46
+ return {
47
+ [TRANSFER_TYPE_KEY]: DURATION_TYPE,
48
+ __invalidReason: value.invalidReason ?? 'unknown',
49
+ __invalidExplanation: value.invalidExplanation,
50
+ };
51
+ }
52
+ return { [TRANSFER_TYPE_KEY]: DURATION_TYPE, __values: value.toObject() };
53
+ }
54
+ export function intervalToSentinel(value) {
55
+ if (!value.isValid || value.start === null || value.end === null) {
56
+ return {
57
+ [TRANSFER_TYPE_KEY]: INTERVAL_TYPE,
58
+ __invalidReason: value.invalidReason ?? 'unknown',
59
+ __invalidExplanation: value.invalidExplanation,
60
+ };
61
+ }
62
+ return {
63
+ [TRANSFER_TYPE_KEY]: INTERVAL_TYPE,
64
+ __start: dateTimeToSentinel(value.start),
65
+ __end: dateTimeToSentinel(value.end),
66
+ };
67
+ }
68
+ // The host rebuilds from fields that came across the boundary, and user data
69
+ // can hold the same fields. The checks below run before any field reaches
70
+ // luxon. A field that does not pass gives an invalid instance.
71
+ const DURATION_UNIT_KEYS = new Set([
72
+ 'year',
73
+ 'years',
74
+ 'quarter',
75
+ 'quarters',
76
+ 'month',
77
+ 'months',
78
+ 'week',
79
+ 'weeks',
80
+ 'day',
81
+ 'days',
82
+ 'hour',
83
+ 'hours',
84
+ 'minute',
85
+ 'minutes',
86
+ 'second',
87
+ 'seconds',
88
+ 'millisecond',
89
+ 'milliseconds',
90
+ ]);
91
+ // Luxon resolves a fixed offset only in the "UTC" spelling, such as "UTC+1".
92
+ // It does not resolve an offset written against GMT, such as "GMT+2", and no
93
+ // zone database holds that name either. Bare "GMT" is a zone database name, so
94
+ // it passes the IANA check below.
95
+ const FIXED_OFFSET_ZONE_NAME = /^utc(?:[+-]\d{1,2}(?::\d{2})?)?$/i;
96
+ function invalidArguments(sentinel) {
97
+ const reason = typeof sentinel.__invalidReason === 'string' && sentinel.__invalidReason.length > 0
98
+ ? sentinel.__invalidReason
99
+ : 'unknown';
100
+ const explanation = typeof sentinel.__invalidExplanation === 'string' ? sentinel.__invalidExplanation : undefined;
101
+ return [reason, explanation];
102
+ }
103
+ /** Give back a zone name luxon can resolve, or nothing to keep the system zone. */
104
+ function acceptedZoneName(zone) {
105
+ if (typeof zone !== 'string' || zone.length === 0)
106
+ return undefined;
107
+ const lowered = zone.toLowerCase();
108
+ if (lowered === 'local' || lowered === 'system' || lowered === 'default')
109
+ return undefined;
110
+ if (FIXED_OFFSET_ZONE_NAME.test(zone))
111
+ return zone;
112
+ return IANAZone.isValidZone(zone) ? zone : undefined;
113
+ }
114
+ function isDurationValues(value) {
115
+ if (typeof value !== 'object' || value === null || !isPlainObject(value))
116
+ return false;
117
+ return Object.entries(value).every(([key, amount]) => DURATION_UNIT_KEYS.has(key) && typeof amount === 'number' && Number.isFinite(amount));
118
+ }
119
+ export function rebuildDateTime(sentinel) {
120
+ const isoString = sentinel.__isoString;
121
+ if (typeof isoString !== 'string') {
122
+ return DateTime.invalid(...invalidArguments(sentinel));
123
+ }
124
+ // A marker without a zone name came from a value in the system zone. Name the
125
+ // system zone, because the default zone here is the timezone of the workflow.
126
+ const zone = acceptedZoneName(sentinel.__zone) ?? 'local';
127
+ // Do not pass `setZone`. With `setZone`, luxon takes the zone from the offset
128
+ // in the ISO string and drops the zone name the marker carries.
129
+ return DateTime.fromISO(isoString, { zone });
130
+ }
131
+ export function rebuildDuration(sentinel) {
132
+ const values = sentinel.__values;
133
+ if (!isDurationValues(values)) {
134
+ return Duration.invalid(...invalidArguments(sentinel));
135
+ }
136
+ return Duration.fromObject(values);
137
+ }
138
+ export function rebuildInterval(sentinel) {
139
+ const start = sentinel.__start;
140
+ const end = sentinel.__end;
141
+ if (!isDateTimeSentinel(start) || !isDateTimeSentinel(end)) {
142
+ return Interval.invalid(...invalidArguments(sentinel));
143
+ }
144
+ return Interval.fromDateTimes(rebuildDateTime(start), rebuildDateTime(end));
145
+ }
146
+ export function rebuildLuxonValue(sentinel) {
147
+ if (isDateTimeSentinel(sentinel))
148
+ return rebuildDateTime(sentinel);
149
+ if (isDurationSentinel(sentinel))
150
+ return rebuildDuration(sentinel);
151
+ return rebuildInterval(sentinel);
152
+ }
153
+ /**
154
+ * Turn a luxon instance into a marker, or give back nothing for any other value.
155
+ *
156
+ * The luxon `is*` helpers only read a flag on the object, which user data can
157
+ * also hold. The prototype check makes sure the value is a real instance.
158
+ */
159
+ export const encodeLuxonValue = (value) => {
160
+ if (value instanceof DateTime && DateTime.isDateTime(value))
161
+ return dateTimeToSentinel(value);
162
+ if (value instanceof Duration && Duration.isDuration(value))
163
+ return durationToSentinel(value);
164
+ if (value instanceof Interval && Interval.isInterval(value))
165
+ return intervalToSentinel(value);
166
+ return undefined;
167
+ };
168
+ /**
169
+ * Rebuild a luxon instance from a marker.
170
+ *
171
+ * A marker that names a type no encoder here wrote is given back as the plain
172
+ * object it is, which is what the host did before the type had a marker.
173
+ */
174
+ export const decodeLuxonSentinel = (sentinel) => {
175
+ if (!isLuxonSentinel(sentinel))
176
+ return sentinel;
177
+ return rebuildLuxonValue(sentinel);
178
+ };
179
+ /** Walk a transferred value and rebuild every luxon instance in it. */
180
+ export function unwrapLuxonValues(value) {
181
+ return unwrapTransferSentinels(value, decodeLuxonSentinel);
182
+ }
183
+ //# sourceMappingURL=luxon-transfer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"luxon-transfer.js","sourceRoot":"","sources":["../../../src/runtime/luxon-transfer.ts"],"names":[],"mappings":"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"}
@@ -2,18 +2,18 @@
2
2
  * Prepare a value for transfer across the V8 isolate boundary.
3
3
  *
4
4
  * isolated-vm's `copy: true` uses structured clone, which strips prototypes
5
- * from non-standard types. Luxon DateTime/Duration/Interval lose their class
6
- * identity and arrive on the host as plain objects.
5
+ * from non-standard types. A class instance such as a luxon DateTime loses its
6
+ * class identity and arrives on the host as a plain object.
7
7
  *
8
- * This function recursively walks a value and converts types that don't
9
- * survive structured clone into their string representations. It runs
10
- * inside the isolate before the result is transferred.
8
+ * This function recursively walks a value and converts each such type into a
9
+ * structured-cloneable marker object. The host rebuilds a real instance from
10
+ * the marker. It runs inside the isolate before the result is transferred.
11
11
  *
12
12
  * Note: JS Date objects survive structured clone with prototype intact
13
13
  * (Date is a standard structured-cloneable type) and are not converted.
14
14
  *
15
- * Circular references are not handled — expression results should not
16
- * contain cycles.
15
+ * This walk does not record the objects it has seen, because expression results
16
+ * are not expected to refer to themselves. The host walk does record them.
17
17
  */
18
18
  export declare function __prepareForTransfer(value: unknown): unknown;
19
19
  //# sourceMappingURL=serialize.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"serialize.d.ts","sourceRoot":"","sources":["../../../src/runtime/serialize.ts"],"names":[],"mappings":"AAQA;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CA2B5D"}
1
+ {"version":3,"file":"serialize.d.ts","sourceRoot":"","sources":["../../../src/runtime/serialize.ts"],"names":[],"mappings":"AAyBA;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CA8B5D"}
@@ -1,54 +1,66 @@
1
- import { DateTime, Duration, Interval } from 'luxon';
2
- /** Type guard: plain object with Object.prototype or null prototype. */
3
- function isPlainObject(value) {
4
- const proto = Object.getPrototypeOf(value);
5
- return proto === Object.prototype || proto === null;
1
+ import { encodeLuxonValue } from './luxon-transfer';
2
+ import { isPlainObject, isStructuredCloneBuiltin, TRANSFER_ESCAPED_KEY, TRANSFER_FRAMING_KEYS, TRANSFER_OPAQUE_KEY, TRANSFER_VALUE_KEY, } from './transfer';
3
+ /**
4
+ * The types that go across as a marker. Each encoder claims the values it owns
5
+ * and passes on every other, so a new type is one entry here.
6
+ */
7
+ const ENCODERS = [encodeLuxonValue];
8
+ function encode(value) {
9
+ for (const encoder of ENCODERS) {
10
+ const sentinel = encoder(value);
11
+ if (sentinel !== undefined)
12
+ return sentinel;
13
+ }
14
+ return undefined;
6
15
  }
7
16
  /**
8
17
  * Prepare a value for transfer across the V8 isolate boundary.
9
18
  *
10
19
  * isolated-vm's `copy: true` uses structured clone, which strips prototypes
11
- * from non-standard types. Luxon DateTime/Duration/Interval lose their class
12
- * identity and arrive on the host as plain objects.
20
+ * from non-standard types. A class instance such as a luxon DateTime loses its
21
+ * class identity and arrives on the host as a plain object.
13
22
  *
14
- * This function recursively walks a value and converts types that don't
15
- * survive structured clone into their string representations. It runs
16
- * inside the isolate before the result is transferred.
23
+ * This function recursively walks a value and converts each such type into a
24
+ * structured-cloneable marker object. The host rebuilds a real instance from
25
+ * the marker. It runs inside the isolate before the result is transferred.
17
26
  *
18
27
  * Note: JS Date objects survive structured clone with prototype intact
19
28
  * (Date is a standard structured-cloneable type) and are not converted.
20
29
  *
21
- * Circular references are not handled — expression results should not
22
- * contain cycles.
30
+ * This walk does not record the objects it has seen, because expression results
31
+ * are not expected to refer to themselves. The host walk does record them.
23
32
  */
24
33
  export function __prepareForTransfer(value) {
25
34
  if (value === null || value === undefined)
26
35
  return value;
27
36
  if (typeof value !== 'object')
28
37
  return value;
29
- // Luxon DateTime -> ISO string (toISO() returns null for invalid DateTime)
30
- if (DateTime.isDateTime(value))
31
- return value.toISO() ?? null;
32
- // Luxon Duration -> ISO string (toISO() returns null for invalid Duration)
33
- if (Duration.isDuration(value))
34
- return value.toISO() ?? null;
35
- // Luxon Interval -> ISO string (toISO() returns "Invalid Interval" for invalid Interval)
36
- if (Interval.isInterval(value)) {
37
- const iso = value.toISO();
38
- return iso === 'Invalid Interval' ? null : iso;
39
- }
40
- // Array — walk elements
38
+ const sentinel = encode(value);
39
+ if (sentinel !== undefined)
40
+ return sentinel;
41
41
  if (Array.isArray(value))
42
42
  return value.map(__prepareForTransfer);
43
- // Only walk plain objects — structured-cloneable types like Date, Map, Set,
44
- // RegExp, Error, typed arrays survive copy:true with prototypes intact.
45
- if (!isPlainObject(value))
46
- return value;
47
- // Plain object — walk values
43
+ if (!isPlainObject(value)) {
44
+ if (isStructuredCloneBuiltin(value))
45
+ return value;
46
+ // A class instance the host cannot rebuild. Structured clone flattens its
47
+ // prototype away, so a marker key on it would read as one of ours. Mark it
48
+ // opaque, and the host gives the contents back as data.
49
+ return {
50
+ [TRANSFER_ESCAPED_KEY]: true,
51
+ [TRANSFER_OPAQUE_KEY]: true,
52
+ [TRANSFER_VALUE_KEY]: value,
53
+ };
54
+ }
48
55
  const result = {};
56
+ let collides = false;
49
57
  for (const key of Object.keys(value)) {
58
+ if (TRANSFER_FRAMING_KEYS.includes(key))
59
+ collides = true;
50
60
  result[key] = __prepareForTransfer(value[key]);
51
61
  }
52
- return result;
62
+ // User data can hold the same keys as our framing. Escape such an object, so
63
+ // the host reads the object itself as data but still walks what is inside it.
64
+ return collides ? { [TRANSFER_ESCAPED_KEY]: true, [TRANSFER_VALUE_KEY]: result } : result;
53
65
  }
54
66
  //# sourceMappingURL=serialize.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"serialize.js","sourceRoot":"","sources":["../../../src/runtime/serialize.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AAErD,wEAAwE;AACxE,SAAS,aAAa,CAAC,KAAa;IACnC,MAAM,KAAK,GAAG,MAAM,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;IAC3C,OAAO,KAAK,KAAK,MAAM,CAAC,SAAS,IAAI,KAAK,KAAK,IAAI,CAAC;AACrD,CAAC;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,UAAU,oBAAoB,CAAC,KAAc;IAClD,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,SAAS;QAAE,OAAO,KAAK,CAAC;IACxD,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,OAAO,KAAK,CAAC;IAE5C,2EAA2E;IAC3E,IAAI,QAAQ,CAAC,UAAU,CAAC,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC,KAAK,EAAE,IAAI,IAAI,CAAC;IAC7D,2EAA2E;IAC3E,IAAI,QAAQ,CAAC,UAAU,CAAC,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC,KAAK,EAAE,IAAI,IAAI,CAAC;IAC7D,yFAAyF;IACzF,IAAI,QAAQ,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE,CAAC;QAChC,MAAM,GAAG,GAAG,KAAK,CAAC,KAAK,EAAE,CAAC;QAC1B,OAAO,GAAG,KAAK,kBAAkB,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC;IAChD,CAAC;IAED,wBAAwB;IACxB,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC,GAAG,CAAC,oBAAoB,CAAC,CAAC;IAEjE,4EAA4E;IAC5E,wEAAwE;IACxE,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC;IAExC,6BAA6B;IAC7B,MAAM,MAAM,GAA4B,EAAE,CAAC;IAC3C,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;QACtC,MAAM,CAAC,GAAG,CAAC,GAAG,oBAAoB,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC;IAChD,CAAC;IACD,OAAO,MAAM,CAAC;AACf,CAAC"}
1
+ {"version":3,"file":"serialize.js","sourceRoot":"","sources":["../../../src/runtime/serialize.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AAEpD,OAAO,EACN,aAAa,EACb,wBAAwB,EACxB,oBAAoB,EACpB,qBAAqB,EACrB,mBAAmB,EACnB,kBAAkB,GAClB,MAAM,YAAY,CAAC;AAEpB;;;GAGG;AACH,MAAM,QAAQ,GAAsB,CAAC,gBAAgB,CAAC,CAAC;AAEvD,SAAS,MAAM,CAAC,KAAa;IAC5B,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;QAChC,MAAM,QAAQ,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC;QAChC,IAAI,QAAQ,KAAK,SAAS;YAAE,OAAO,QAAQ,CAAC;IAC7C,CAAC;IACD,OAAO,SAAS,CAAC;AAClB,CAAC;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,UAAU,oBAAoB,CAAC,KAAc;IAClD,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,SAAS;QAAE,OAAO,KAAK,CAAC;IACxD,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,OAAO,KAAK,CAAC;IAE5C,MAAM,QAAQ,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;IAC/B,IAAI,QAAQ,KAAK,SAAS;QAAE,OAAO,QAAQ,CAAC;IAE5C,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC,GAAG,CAAC,oBAAoB,CAAC,CAAC;IAEjE,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,EAAE,CAAC;QAC3B,IAAI,wBAAwB,CAAC,KAAK,CAAC;YAAE,OAAO,KAAK,CAAC;QAClD,0EAA0E;QAC1E,2EAA2E;QAC3E,wDAAwD;QACxD,OAAO;YACN,CAAC,oBAAoB,CAAC,EAAE,IAAI;YAC5B,CAAC,mBAAmB,CAAC,EAAE,IAAI;YAC3B,CAAC,kBAAkB,CAAC,EAAE,KAAK;SAC3B,CAAC;IACH,CAAC;IAED,MAAM,MAAM,GAA4B,EAAE,CAAC;IAC3C,IAAI,QAAQ,GAAG,KAAK,CAAC;IACrB,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;QACtC,IAAI,qBAAqB,CAAC,QAAQ,CAAC,GAAG,CAAC;YAAE,QAAQ,GAAG,IAAI,CAAC;QACzD,MAAM,CAAC,GAAG,CAAC,GAAG,oBAAoB,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC;IAChD,CAAC;IACD,6EAA6E;IAC7E,8EAA8E;IAC9E,OAAO,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,oBAAoB,CAAC,EAAE,IAAI,EAAE,CAAC,kBAAkB,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC;AAC3F,CAAC"}
@@ -0,0 +1,77 @@
1
+ /**
2
+ * Framing for values that cross the runtime boundary.
3
+ *
4
+ * Results cross by structured clone, which does not carry the prototype of a
5
+ * class instance. A type the host must get back as a real instance goes across
6
+ * as a structured-cloneable marker object instead: a plain object naming its
7
+ * type under `__n8nType`, which the host reads and rebuilds from.
8
+ *
9
+ * This module knows the framing and nothing about any single type. The encoders
10
+ * and the decoders live next to the type they carry, such as `luxon-transfer`.
11
+ *
12
+ * User data can hold the same keys. The escape wrapper below lets the host tell
13
+ * a marker from user data that looks like one.
14
+ */
15
+ /** Names the type a marker carries, and marks the object as one of ours. */
16
+ export declare const TRANSFER_TYPE_KEY = "__n8nType";
17
+ /** Marks a wrapper whose payload is user data, not a marker. */
18
+ export declare const TRANSFER_ESCAPED_KEY = "__n8nEscaped";
19
+ /** Marks an escaped payload the host must return without any walk. */
20
+ export declare const TRANSFER_OPAQUE_KEY = "__n8nOpaque";
21
+ /** Holds the payload of an escaped wrapper. */
22
+ export declare const TRANSFER_VALUE_KEY = "__value";
23
+ /**
24
+ * Keys that make an object look like our framing.
25
+ *
26
+ * An object with one of these own keys is escaped, so the host reads it as
27
+ * data. The opaque flag is in the set for the same reason. If it were not, user
28
+ * data that holds it would make the host return an object without a walk.
29
+ *
30
+ * One type key covers every marker, so a new type does not grow this set.
31
+ */
32
+ export declare const TRANSFER_FRAMING_KEYS: readonly string[];
33
+ export interface TransferSentinel {
34
+ [TRANSFER_TYPE_KEY]: string;
35
+ }
36
+ export interface EscapedTransferValue {
37
+ [TRANSFER_ESCAPED_KEY]: true;
38
+ [TRANSFER_OPAQUE_KEY]?: true;
39
+ [TRANSFER_VALUE_KEY]: unknown;
40
+ }
41
+ /**
42
+ * Rebuild a real instance from a marker.
43
+ *
44
+ * Only the guest walk writes the type key, and it escapes any user object that
45
+ * carries one, so a decoder only ever sees a type its own encoder wrote.
46
+ */
47
+ export type SentinelDecoder = (sentinel: TransferSentinel) => unknown;
48
+ /** Give back a sentinel for a value the decoder owns, or nothing for any other. */
49
+ export type SentinelEncoder = (value: object) => TransferSentinel | undefined;
50
+ /** The type a marker names, or nothing when the value is not a marker. */
51
+ export declare function transferTypeOf(value: unknown): string | undefined;
52
+ export declare function isTransferSentinel(value: unknown): value is TransferSentinel;
53
+ export declare function isEscapedTransferValue(value: unknown): value is EscapedTransferValue;
54
+ /**
55
+ * An escaped wrapper whose payload must be returned as data without any
56
+ * further inspection for markers.
57
+ */
58
+ export declare function isOpaqueTransferValue(value: unknown): boolean;
59
+ /** Type guard: plain object with Object.prototype or null prototype. */
60
+ export declare function isPlainObject(value: object): value is Record<string, unknown>;
61
+ /** Types that structured clone copies with the prototype intact. */
62
+ export declare function isStructuredCloneBuiltin(value: object): boolean;
63
+ /**
64
+ * Rebuild instances from the markers `__prepareForTransfer` emits.
65
+ *
66
+ * Walks the same shapes that function walks: a top-level value, arrays, and
67
+ * plain objects. Other structured-cloneable types are returned untouched.
68
+ * A payload marked opaque is returned as data, without any inspection.
69
+ * Objects already visited are reused, so a graph that repeats or contains
70
+ * itself is walked once.
71
+ *
72
+ * A value that holds no marker is given back as it is. The walk copies every
73
+ * plain object and array it enters, and most results carry no marker at all,
74
+ * so the copy would double what an expression allocates for nothing.
75
+ */
76
+ export declare function unwrapTransferSentinels(value: unknown, decode: SentinelDecoder): unknown;
77
+ //# sourceMappingURL=transfer.d.ts.map