@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.
- package/README.md +4 -0
- package/dist/bundle/runtime.esm.js +17 -17
- package/dist/bundle/runtime.esm.js.map +4 -4
- package/dist/bundle/runtime.iife.js +17 -17
- package/dist/bundle/runtime.iife.js.map +4 -4
- package/dist/cjs/bridge/host-functions.d.ts +74 -0
- package/dist/cjs/bridge/host-functions.d.ts.map +1 -0
- package/dist/cjs/bridge/host-functions.js +336 -0
- package/dist/cjs/bridge/host-functions.js.map +1 -0
- package/dist/cjs/bridge/isolated-vm-bridge.d.ts +24 -150
- package/dist/cjs/bridge/isolated-vm-bridge.d.ts.map +1 -1
- package/dist/cjs/bridge/isolated-vm-bridge.js +130 -429
- package/dist/cjs/bridge/isolated-vm-bridge.js.map +1 -1
- package/dist/cjs/bridge/quickjs-bridge.d.ts +21 -6
- package/dist/cjs/bridge/quickjs-bridge.d.ts.map +1 -1
- package/dist/cjs/bridge/quickjs-bridge.js +377 -402
- package/dist/cjs/bridge/quickjs-bridge.js.map +1 -1
- package/dist/cjs/build.tsbuildinfo +1 -1
- package/dist/cjs/evaluator/expression-evaluator.d.ts +17 -0
- package/dist/cjs/evaluator/expression-evaluator.d.ts.map +1 -1
- package/dist/cjs/evaluator/expression-evaluator.js +61 -1
- package/dist/cjs/evaluator/expression-evaluator.js.map +1 -1
- package/dist/cjs/extensions/array-extensions.d.ts.map +1 -1
- package/dist/cjs/extensions/array-extensions.js +7 -15
- package/dist/cjs/extensions/array-extensions.js.map +1 -1
- package/dist/cjs/extensions/function-extensions.d.ts +2 -0
- package/dist/cjs/extensions/function-extensions.d.ts.map +1 -1
- package/dist/cjs/extensions/function-extensions.js +13 -10
- package/dist/cjs/extensions/function-extensions.js.map +1 -1
- package/dist/cjs/extensions/object-extensions.d.ts.map +1 -1
- package/dist/cjs/extensions/object-extensions.js +3 -11
- package/dist/cjs/extensions/object-extensions.js.map +1 -1
- package/dist/cjs/extensions/utils.d.ts +1 -0
- package/dist/cjs/extensions/utils.d.ts.map +1 -1
- package/dist/cjs/extensions/utils.js +10 -0
- package/dist/cjs/extensions/utils.js.map +1 -1
- package/dist/cjs/observability/metrics.d.ts +12 -0
- package/dist/cjs/observability/metrics.d.ts.map +1 -1
- package/dist/cjs/observability/metrics.js +12 -0
- package/dist/cjs/observability/metrics.js.map +1 -1
- package/dist/cjs/runtime/lazy-proxy.d.ts +2 -0
- package/dist/cjs/runtime/lazy-proxy.d.ts.map +1 -1
- package/dist/cjs/runtime/lazy-proxy.js +29 -15
- package/dist/cjs/runtime/lazy-proxy.js.map +1 -1
- package/dist/cjs/runtime/luxon-transfer.d.ts +62 -0
- package/dist/cjs/runtime/luxon-transfer.d.ts.map +1 -0
- package/dist/cjs/runtime/luxon-transfer.js +200 -0
- package/dist/cjs/runtime/luxon-transfer.js.map +1 -0
- package/dist/cjs/runtime/serialize.d.ts +7 -7
- package/dist/cjs/runtime/serialize.d.ts.map +1 -1
- package/dist/cjs/runtime/serialize.js +42 -30
- package/dist/cjs/runtime/serialize.js.map +1 -1
- package/dist/cjs/runtime/transfer.d.ts +77 -0
- package/dist/cjs/runtime/transfer.d.ts.map +1 -0
- package/dist/cjs/runtime/transfer.js +183 -0
- package/dist/cjs/runtime/transfer.js.map +1 -0
- package/dist/cjs/types/bridge.d.ts +16 -0
- package/dist/cjs/types/bridge.d.ts.map +1 -1
- package/dist/cjs/types/bridge.js +1 -0
- package/dist/cjs/types/bridge.js.map +1 -1
- package/dist/cjs/types/evaluator.d.ts +9 -0
- package/dist/cjs/types/evaluator.d.ts.map +1 -1
- package/dist/cjs/types/evaluator.js.map +1 -1
- package/dist/esm/bridge/host-functions.d.ts +74 -0
- package/dist/esm/bridge/host-functions.d.ts.map +1 -0
- package/dist/esm/bridge/host-functions.js +328 -0
- package/dist/esm/bridge/host-functions.js.map +1 -0
- package/dist/esm/bridge/isolated-vm-bridge.d.ts +24 -150
- package/dist/esm/bridge/isolated-vm-bridge.d.ts.map +1 -1
- package/dist/esm/bridge/isolated-vm-bridge.js +126 -425
- package/dist/esm/bridge/isolated-vm-bridge.js.map +1 -1
- package/dist/esm/bridge/quickjs-bridge.d.ts +21 -6
- package/dist/esm/bridge/quickjs-bridge.d.ts.map +1 -1
- package/dist/esm/bridge/quickjs-bridge.js +368 -393
- package/dist/esm/bridge/quickjs-bridge.js.map +1 -1
- package/dist/esm/build.tsbuildinfo +1 -1
- package/dist/esm/evaluator/expression-evaluator.d.ts +17 -0
- package/dist/esm/evaluator/expression-evaluator.d.ts.map +1 -1
- package/dist/esm/evaluator/expression-evaluator.js +61 -1
- package/dist/esm/evaluator/expression-evaluator.js.map +1 -1
- package/dist/esm/extensions/array-extensions.d.ts.map +1 -1
- package/dist/esm/extensions/array-extensions.js +1 -9
- package/dist/esm/extensions/array-extensions.js.map +1 -1
- package/dist/esm/extensions/function-extensions.d.ts +2 -0
- package/dist/esm/extensions/function-extensions.d.ts.map +1 -1
- package/dist/esm/extensions/function-extensions.js +12 -9
- package/dist/esm/extensions/function-extensions.js.map +1 -1
- package/dist/esm/extensions/object-extensions.d.ts.map +1 -1
- package/dist/esm/extensions/object-extensions.js +1 -9
- package/dist/esm/extensions/object-extensions.js.map +1 -1
- package/dist/esm/extensions/utils.d.ts +1 -0
- package/dist/esm/extensions/utils.d.ts.map +1 -1
- package/dist/esm/extensions/utils.js +9 -0
- package/dist/esm/extensions/utils.js.map +1 -1
- package/dist/esm/observability/metrics.d.ts +12 -0
- package/dist/esm/observability/metrics.d.ts.map +1 -1
- package/dist/esm/observability/metrics.js +12 -0
- package/dist/esm/observability/metrics.js.map +1 -1
- package/dist/esm/runtime/lazy-proxy.d.ts +2 -0
- package/dist/esm/runtime/lazy-proxy.d.ts.map +1 -1
- package/dist/esm/runtime/lazy-proxy.js +29 -15
- package/dist/esm/runtime/lazy-proxy.js.map +1 -1
- package/dist/esm/runtime/luxon-transfer.d.ts +62 -0
- package/dist/esm/runtime/luxon-transfer.d.ts.map +1 -0
- package/dist/esm/runtime/luxon-transfer.js +183 -0
- package/dist/esm/runtime/luxon-transfer.js.map +1 -0
- package/dist/esm/runtime/serialize.d.ts +7 -7
- package/dist/esm/runtime/serialize.d.ts.map +1 -1
- package/dist/esm/runtime/serialize.js +42 -30
- package/dist/esm/runtime/serialize.js.map +1 -1
- package/dist/esm/runtime/transfer.d.ts +77 -0
- package/dist/esm/runtime/transfer.d.ts.map +1 -0
- package/dist/esm/runtime/transfer.js +173 -0
- package/dist/esm/runtime/transfer.js.map +1 -0
- package/dist/esm/types/bridge.d.ts +16 -0
- package/dist/esm/types/bridge.d.ts.map +1 -1
- package/dist/esm/types/bridge.js +1 -0
- package/dist/esm/types/bridge.js.map +1 -1
- package/dist/esm/types/evaluator.d.ts +9 -0
- package/dist/esm/types/evaluator.d.ts.map +1 -1
- package/dist/esm/types/evaluator.js.map +1 -1
- package/package.json +6 -6
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"lazy-proxy.d.ts","sourceRoot":"","sources":["../../../src/runtime/lazy-proxy.ts"],"names":[],"mappings":"AAYA;;;;;GAKG;AACH,MAAM,WAAW,aAAa;IAC7B,SAAS,EAAE,IAAI,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAChC;AAED,UAAU,cAAc;IACvB,UAAU,EAAE,IAAI,CAAC;IACjB,MAAM,EAAE,MAAM,EAAE,CAAC;CACjB;AAED,UAAU,aAAa;IACtB,SAAS,EAAE,IAAI,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;CACjB;AAED,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,cAAc,CAOxE;AAED,wBAAgB,eAAe,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,aAAa,CAItE;AAQD;;;;GAIG;AACH,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,OAAO,GAAG,IAAI,CAKzD;AAED,iFAAiF;AACjF,wBAAgB,WAAW,CAAC,GAAG,EAAE,OAAO,GAAG,OAAO,CAEjD;AAED,oFAAoF;AACpF,wBAAgB,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,SAAS,CAE9D;AAED;;;;;;;;GAQG;AACH,MAAM,MAAM,SAAS,GAAG;IAAE,IAAI,EAAE,QAAQ,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,EAAE,CAAA;CAAE,GAAG;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC;AAEhG
|
|
1
|
+
{"version":3,"file":"lazy-proxy.d.ts","sourceRoot":"","sources":["../../../src/runtime/lazy-proxy.ts"],"names":[],"mappings":"AAYA;;;;;GAKG;AACH,MAAM,WAAW,aAAa;IAC7B,SAAS,EAAE,IAAI,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAChC;AAED,UAAU,cAAc;IACvB,UAAU,EAAE,IAAI,CAAC;IACjB,MAAM,EAAE,MAAM,EAAE,CAAC;CACjB;AAED,UAAU,aAAa;IACtB,SAAS,EAAE,IAAI,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;CACjB;AAED,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,cAAc,CAOxE;AAED,wBAAgB,eAAe,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,aAAa,CAItE;AAQD;;;;GAIG;AACH,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,OAAO,GAAG,IAAI,CAKzD;AAED,iFAAiF;AACjF,wBAAgB,WAAW,CAAC,GAAG,EAAE,OAAO,GAAG,OAAO,CAEjD;AAED,oFAAoF;AACpF,wBAAgB,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,SAAS,CAE9D;AAED;;;;;;;;GAQG;AACH,MAAM,MAAM,SAAS,GAAG;IAAE,IAAI,EAAE,QAAQ,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,EAAE,CAAA;CAAE,GAAG;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC;AAEhG;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,wBAAgB,mBAAmB,CAClC,QAAQ,GAAE,MAAM,EAAO,EACvB,IAAI,CAAC,EAAE,SAAS,EAChB,SAAS,CAAC,EAAE;IACX,cAAc,EAAE,GAAG,CAAC;IACpB,eAAe,EAAE,GAAG,CAAC;CACrB,GACC,MAAM,CAAC,MAAM,GAAG,MAAM,EAAE,OAAO,CAAC,CA+PlC"}
|
|
@@ -58,6 +58,8 @@ function getProxyPath(obj) {
|
|
|
58
58
|
* 2. Metadata indicates type: primitive, object, or array
|
|
59
59
|
* 3. For objects/arrays: Create nested proxy (shape-matched) for lazy loading
|
|
60
60
|
* 4. Cache all fetched values in target to avoid repeated callbacks
|
|
61
|
+
* 5. On the first write or delete: shallow-materialize into the cache
|
|
62
|
+
* (copy-on-write). Mutations stay in the evaluation and never reach the host.
|
|
61
63
|
*
|
|
62
64
|
* Callable host bindings (`$('Foo').first()`, `$items()`, etc.) do not flow
|
|
63
65
|
* through this proxy — they are wired as in-isolate stubs on `target` that
|
|
@@ -77,7 +79,8 @@ function createDeepLazyProxy(basePath = [], meta, callbacks) {
|
|
|
77
79
|
const arrayLength = isArray ? meta.length : 0;
|
|
78
80
|
const objectKeys = meta?.kind === 'object' ? meta.keys : undefined;
|
|
79
81
|
// Cache for keys fetched from the bridge (root object proxies without known keys).
|
|
80
|
-
// Shared
|
|
82
|
+
// Shared by ownKeys, getOwnPropertyDescriptor, and materialize() so all three
|
|
83
|
+
// see the same key list.
|
|
81
84
|
let fetchedKeys;
|
|
82
85
|
function resolveObjectKeys() {
|
|
83
86
|
if (objectKeys)
|
|
@@ -123,10 +126,16 @@ function createDeepLazyProxy(basePath = [], meta, callbacks) {
|
|
|
123
126
|
// never cross the isolate boundary — the host callback surface is read-only
|
|
124
127
|
// (getValueAtPath / getArrayElement) — and the mutated copy dies with the
|
|
125
128
|
// per-evaluation context.
|
|
129
|
+
// The guard must be in EVERY trap: after mutation, the construction-time
|
|
130
|
+
// meta (arrayLength, host key list, host `in` checks) is stale — an
|
|
131
|
+
// unguarded trap would report the pre-push length or resurrect deleted keys.
|
|
126
132
|
let materialized = false;
|
|
127
|
-
|
|
133
|
+
// `prop` is the already-stringified index — callers have it at hand, and
|
|
134
|
+
// re-deriving it here would put a String() allocation on the hot read path.
|
|
135
|
+
// Plain assignment is safe here (unlike fetchAndCacheObjectValue): `prop`
|
|
136
|
+
// is always a canonical index string, never a setter-chain key like '__proto__'.
|
|
137
|
+
function fetchAndCacheArrayElement(idx, prop) {
|
|
128
138
|
const t = target;
|
|
129
|
-
const prop = String(idx);
|
|
130
139
|
const element = getArrayElement(basePath, idx);
|
|
131
140
|
// Primitives (and null) skip `materializeChild`'s metadata checks.
|
|
132
141
|
if (element === null || typeof element !== 'object') {
|
|
@@ -153,10 +162,14 @@ function createDeepLazyProxy(basePath = [], meta, callbacks) {
|
|
|
153
162
|
function materialize() {
|
|
154
163
|
if (materialized)
|
|
155
164
|
return;
|
|
165
|
+
// Keep cached entries: a cached child proxy can already carry its own
|
|
166
|
+
// copy-on-write mutations; a re-fetch would create a fresh proxy and
|
|
167
|
+
// discard them.
|
|
156
168
|
if (isArray) {
|
|
157
169
|
for (let i = 0; i < arrayLength; i++) {
|
|
158
|
-
|
|
159
|
-
|
|
170
|
+
const prop = String(i);
|
|
171
|
+
if (!Object.prototype.hasOwnProperty.call(target, prop))
|
|
172
|
+
fetchAndCacheArrayElement(i, prop);
|
|
160
173
|
}
|
|
161
174
|
target.length = arrayLength;
|
|
162
175
|
}
|
|
@@ -245,7 +258,6 @@ function createDeepLazyProxy(basePath = [], meta, callbacks) {
|
|
|
245
258
|
if (isArray && prop === 'length') {
|
|
246
259
|
return arrayLength;
|
|
247
260
|
}
|
|
248
|
-
// Check cache - if already fetched, return cached value
|
|
249
261
|
if (prop in targetObj) {
|
|
250
262
|
return targetObj[prop];
|
|
251
263
|
}
|
|
@@ -253,21 +265,26 @@ function createDeepLazyProxy(basePath = [], meta, callbacks) {
|
|
|
253
265
|
const idx = isInArrayBounds(prop);
|
|
254
266
|
if (idx === undefined)
|
|
255
267
|
return undefined;
|
|
256
|
-
return fetchAndCacheArrayElement(idx);
|
|
268
|
+
return fetchAndCacheArrayElement(idx, prop);
|
|
257
269
|
}
|
|
258
270
|
return fetchAndCacheObjectValue(prop);
|
|
259
271
|
},
|
|
260
|
-
|
|
272
|
+
// Expression code runs in sloppy mode (the eval wrapper adds no
|
|
273
|
+
// 'use strict'), so a false result from these traps no-ops silently
|
|
274
|
+
// instead of throwing. Materialize, then let Reflect apply the
|
|
275
|
+
// mutation for real.
|
|
276
|
+
set(_targetObj, prop, value, receiver) {
|
|
261
277
|
materialize();
|
|
262
|
-
|
|
278
|
+
// Forward the receiver: when the proxy sits on another object's
|
|
279
|
+
// prototype chain, the write must create an own property on that
|
|
280
|
+
// object, not land in this proxy's cache.
|
|
281
|
+
return Reflect.set(target, prop, value, receiver);
|
|
263
282
|
},
|
|
264
283
|
deleteProperty(_targetObj, prop) {
|
|
265
284
|
materialize();
|
|
266
285
|
return Reflect.deleteProperty(target, prop);
|
|
267
286
|
},
|
|
268
287
|
has(targetObj, prop) {
|
|
269
|
-
// Implement 'in' operator support
|
|
270
|
-
// Example: '$json' in data
|
|
271
288
|
if (materialized)
|
|
272
289
|
return Reflect.has(targetObj, prop);
|
|
273
290
|
// Mirror the get trap: symbol-keyed lookups defer to the target so
|
|
@@ -281,18 +298,15 @@ function createDeepLazyProxy(basePath = [], meta, callbacks) {
|
|
|
281
298
|
return true;
|
|
282
299
|
return isInArrayBounds(prop) !== undefined;
|
|
283
300
|
}
|
|
284
|
-
// Check cache first
|
|
285
301
|
if (prop in targetObj) {
|
|
286
302
|
return true;
|
|
287
303
|
}
|
|
288
|
-
// Build path and check existence via callback
|
|
289
304
|
const path = [...basePath, prop];
|
|
290
305
|
const value = getValueAtPath(path);
|
|
291
306
|
// Handle errors serialized by host-side callbacks — reconstruct and throw
|
|
292
307
|
// so the isolate's outer try-catch can serialize them back via __reportError
|
|
293
308
|
throwIfErrorSentinel(value);
|
|
294
|
-
//
|
|
295
|
-
// Note: null values mean property exists but is null
|
|
309
|
+
// Note: null values mean the property exists but is null.
|
|
296
310
|
return value !== undefined;
|
|
297
311
|
},
|
|
298
312
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"lazy-proxy.js","sourceRoot":"","sources":["../../../src/runtime/lazy-proxy.ts"],"names":[],"mappings":";AAAA,+EAA+E;AAC/E,yBAAyB;AACzB,+EAA+E;AAC/E,yCAAyC;AACzC,yFAAyF;;;;;;;;AAEzF,8EAA8E;AAC9E,4EAA4E;AAC5E,4EAA4E;AAC5E,8EAA8E;AAC9E,MAAM,UAAU,GAAG,IAAI,OAAO,EAAoB,CAAC;AA0BnD,0BAAiC,KAAc;IAC9C,OAAO,CACN,OAAO,KAAK,KAAK,QAAQ;QACzB,KAAK,KAAK,IAAI;QACd,YAAY,IAAI,KAAK;QACrB,KAAK,CAAC,UAAU,KAAK,IAAI,CACzB,CAAC;AACH,CAAC;AAED,yBAAgC,KAAc;IAC7C,OAAO,CACN,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,WAAW,IAAI,KAAK,IAAI,KAAK,CAAC,SAAS,KAAK,IAAI,CAC/F,CAAC;AACH,CAAC;AAED,SAAS,eAAe,CAAC,KAAc;IACtC,OAAO,CACN,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,WAAW,IAAI,KAAK,IAAI,KAAK,CAAC,SAAS,KAAK,IAAI,CAC/F,CAAC;AACH,CAAC;AAED;;;;GAIG;AACH,8BAAqC,KAAc;IAClD,IAAI,eAAe,CAAC,KAAK,CAAC,EAAE,CAAC;QAC5B,wGAAwG;QACxG,MAAM,KAAK,CAAC;IACb,CAAC;AACF,CAAC;AAED,iFAAiF;AACjF,qBAA4B,GAAY;IACvC,OAAO,OAAO,GAAG,KAAK,QAAQ,IAAI,GAAG,KAAK,IAAI,IAAI,UAAU,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;AACvE,CAAC;AAED,oFAAoF;AACpF,sBAA6B,GAAW;IACvC,OAAO,UAAU,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;AAC5B,CAAC;AAaD
|
|
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,200 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Carry luxon values across the runtime boundary.
|
|
4
|
+
*
|
|
5
|
+
* A luxon DateTime, Duration or Interval is a class instance, and structured
|
|
6
|
+
* clone does not carry the prototype of one. Each goes across as a marker
|
|
7
|
+
* object in the framing `transfer.ts` defines, and the host rebuilds a real
|
|
8
|
+
* instance from it.
|
|
9
|
+
*/
|
|
10
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
11
|
+
exports.decodeLuxonSentinel = exports.encodeLuxonValue = exports.INTERVAL_TYPE = exports.DURATION_TYPE = exports.DATE_TIME_TYPE = void 0;
|
|
12
|
+
exports.isDateTimeSentinel = isDateTimeSentinel;
|
|
13
|
+
exports.isDurationSentinel = isDurationSentinel;
|
|
14
|
+
exports.isIntervalSentinel = isIntervalSentinel;
|
|
15
|
+
exports.isLuxonSentinel = isLuxonSentinel;
|
|
16
|
+
exports.dateTimeToSentinel = dateTimeToSentinel;
|
|
17
|
+
exports.durationToSentinel = durationToSentinel;
|
|
18
|
+
exports.intervalToSentinel = intervalToSentinel;
|
|
19
|
+
exports.rebuildDateTime = rebuildDateTime;
|
|
20
|
+
exports.rebuildDuration = rebuildDuration;
|
|
21
|
+
exports.rebuildInterval = rebuildInterval;
|
|
22
|
+
exports.rebuildLuxonValue = rebuildLuxonValue;
|
|
23
|
+
exports.unwrapLuxonValues = unwrapLuxonValues;
|
|
24
|
+
const luxon_1 = require("luxon");
|
|
25
|
+
const transfer_1 = require("./transfer");
|
|
26
|
+
exports.DATE_TIME_TYPE = 'DateTime';
|
|
27
|
+
exports.DURATION_TYPE = 'Duration';
|
|
28
|
+
exports.INTERVAL_TYPE = 'Interval';
|
|
29
|
+
function isDateTimeSentinel(value) {
|
|
30
|
+
return (0, transfer_1.transferTypeOf)(value) === exports.DATE_TIME_TYPE;
|
|
31
|
+
}
|
|
32
|
+
function isDurationSentinel(value) {
|
|
33
|
+
return (0, transfer_1.transferTypeOf)(value) === exports.DURATION_TYPE;
|
|
34
|
+
}
|
|
35
|
+
function isIntervalSentinel(value) {
|
|
36
|
+
return (0, transfer_1.transferTypeOf)(value) === exports.INTERVAL_TYPE;
|
|
37
|
+
}
|
|
38
|
+
function isLuxonSentinel(value) {
|
|
39
|
+
return isDateTimeSentinel(value) || isDurationSentinel(value) || isIntervalSentinel(value);
|
|
40
|
+
}
|
|
41
|
+
function dateTimeToSentinel(value) {
|
|
42
|
+
if (!value.isValid) {
|
|
43
|
+
return {
|
|
44
|
+
[transfer_1.TRANSFER_TYPE_KEY]: exports.DATE_TIME_TYPE,
|
|
45
|
+
__invalidReason: value.invalidReason ?? 'unknown',
|
|
46
|
+
__invalidExplanation: value.invalidExplanation,
|
|
47
|
+
};
|
|
48
|
+
}
|
|
49
|
+
const sentinel = {
|
|
50
|
+
[transfer_1.TRANSFER_TYPE_KEY]: exports.DATE_TIME_TYPE,
|
|
51
|
+
__isoString: value.toISO() ?? '',
|
|
52
|
+
};
|
|
53
|
+
// Carry a zone name only when the value does not use the system zone. The
|
|
54
|
+
// host then keeps its own system zone for such a value.
|
|
55
|
+
if (value.zone.type !== 'system')
|
|
56
|
+
sentinel.__zone = value.zone.name;
|
|
57
|
+
return sentinel;
|
|
58
|
+
}
|
|
59
|
+
function durationToSentinel(value) {
|
|
60
|
+
if (!value.isValid) {
|
|
61
|
+
return {
|
|
62
|
+
[transfer_1.TRANSFER_TYPE_KEY]: exports.DURATION_TYPE,
|
|
63
|
+
__invalidReason: value.invalidReason ?? 'unknown',
|
|
64
|
+
__invalidExplanation: value.invalidExplanation,
|
|
65
|
+
};
|
|
66
|
+
}
|
|
67
|
+
return { [transfer_1.TRANSFER_TYPE_KEY]: exports.DURATION_TYPE, __values: value.toObject() };
|
|
68
|
+
}
|
|
69
|
+
function intervalToSentinel(value) {
|
|
70
|
+
if (!value.isValid || value.start === null || value.end === null) {
|
|
71
|
+
return {
|
|
72
|
+
[transfer_1.TRANSFER_TYPE_KEY]: exports.INTERVAL_TYPE,
|
|
73
|
+
__invalidReason: value.invalidReason ?? 'unknown',
|
|
74
|
+
__invalidExplanation: value.invalidExplanation,
|
|
75
|
+
};
|
|
76
|
+
}
|
|
77
|
+
return {
|
|
78
|
+
[transfer_1.TRANSFER_TYPE_KEY]: exports.INTERVAL_TYPE,
|
|
79
|
+
__start: dateTimeToSentinel(value.start),
|
|
80
|
+
__end: dateTimeToSentinel(value.end),
|
|
81
|
+
};
|
|
82
|
+
}
|
|
83
|
+
// The host rebuilds from fields that came across the boundary, and user data
|
|
84
|
+
// can hold the same fields. The checks below run before any field reaches
|
|
85
|
+
// luxon. A field that does not pass gives an invalid instance.
|
|
86
|
+
const DURATION_UNIT_KEYS = new Set([
|
|
87
|
+
'year',
|
|
88
|
+
'years',
|
|
89
|
+
'quarter',
|
|
90
|
+
'quarters',
|
|
91
|
+
'month',
|
|
92
|
+
'months',
|
|
93
|
+
'week',
|
|
94
|
+
'weeks',
|
|
95
|
+
'day',
|
|
96
|
+
'days',
|
|
97
|
+
'hour',
|
|
98
|
+
'hours',
|
|
99
|
+
'minute',
|
|
100
|
+
'minutes',
|
|
101
|
+
'second',
|
|
102
|
+
'seconds',
|
|
103
|
+
'millisecond',
|
|
104
|
+
'milliseconds',
|
|
105
|
+
]);
|
|
106
|
+
// Luxon resolves a fixed offset only in the "UTC" spelling, such as "UTC+1".
|
|
107
|
+
// It does not resolve an offset written against GMT, such as "GMT+2", and no
|
|
108
|
+
// zone database holds that name either. Bare "GMT" is a zone database name, so
|
|
109
|
+
// it passes the IANA check below.
|
|
110
|
+
const FIXED_OFFSET_ZONE_NAME = /^utc(?:[+-]\d{1,2}(?::\d{2})?)?$/i;
|
|
111
|
+
function invalidArguments(sentinel) {
|
|
112
|
+
const reason = typeof sentinel.__invalidReason === 'string' && sentinel.__invalidReason.length > 0
|
|
113
|
+
? sentinel.__invalidReason
|
|
114
|
+
: 'unknown';
|
|
115
|
+
const explanation = typeof sentinel.__invalidExplanation === 'string' ? sentinel.__invalidExplanation : undefined;
|
|
116
|
+
return [reason, explanation];
|
|
117
|
+
}
|
|
118
|
+
/** Give back a zone name luxon can resolve, or nothing to keep the system zone. */
|
|
119
|
+
function acceptedZoneName(zone) {
|
|
120
|
+
if (typeof zone !== 'string' || zone.length === 0)
|
|
121
|
+
return undefined;
|
|
122
|
+
const lowered = zone.toLowerCase();
|
|
123
|
+
if (lowered === 'local' || lowered === 'system' || lowered === 'default')
|
|
124
|
+
return undefined;
|
|
125
|
+
if (FIXED_OFFSET_ZONE_NAME.test(zone))
|
|
126
|
+
return zone;
|
|
127
|
+
return luxon_1.IANAZone.isValidZone(zone) ? zone : undefined;
|
|
128
|
+
}
|
|
129
|
+
function isDurationValues(value) {
|
|
130
|
+
if (typeof value !== 'object' || value === null || !(0, transfer_1.isPlainObject)(value))
|
|
131
|
+
return false;
|
|
132
|
+
return Object.entries(value).every(([key, amount]) => DURATION_UNIT_KEYS.has(key) && typeof amount === 'number' && Number.isFinite(amount));
|
|
133
|
+
}
|
|
134
|
+
function rebuildDateTime(sentinel) {
|
|
135
|
+
const isoString = sentinel.__isoString;
|
|
136
|
+
if (typeof isoString !== 'string') {
|
|
137
|
+
return luxon_1.DateTime.invalid(...invalidArguments(sentinel));
|
|
138
|
+
}
|
|
139
|
+
// A marker without a zone name came from a value in the system zone. Name the
|
|
140
|
+
// system zone, because the default zone here is the timezone of the workflow.
|
|
141
|
+
const zone = acceptedZoneName(sentinel.__zone) ?? 'local';
|
|
142
|
+
// Do not pass `setZone`. With `setZone`, luxon takes the zone from the offset
|
|
143
|
+
// in the ISO string and drops the zone name the marker carries.
|
|
144
|
+
return luxon_1.DateTime.fromISO(isoString, { zone });
|
|
145
|
+
}
|
|
146
|
+
function rebuildDuration(sentinel) {
|
|
147
|
+
const values = sentinel.__values;
|
|
148
|
+
if (!isDurationValues(values)) {
|
|
149
|
+
return luxon_1.Duration.invalid(...invalidArguments(sentinel));
|
|
150
|
+
}
|
|
151
|
+
return luxon_1.Duration.fromObject(values);
|
|
152
|
+
}
|
|
153
|
+
function rebuildInterval(sentinel) {
|
|
154
|
+
const start = sentinel.__start;
|
|
155
|
+
const end = sentinel.__end;
|
|
156
|
+
if (!isDateTimeSentinel(start) || !isDateTimeSentinel(end)) {
|
|
157
|
+
return luxon_1.Interval.invalid(...invalidArguments(sentinel));
|
|
158
|
+
}
|
|
159
|
+
return luxon_1.Interval.fromDateTimes(rebuildDateTime(start), rebuildDateTime(end));
|
|
160
|
+
}
|
|
161
|
+
function rebuildLuxonValue(sentinel) {
|
|
162
|
+
if (isDateTimeSentinel(sentinel))
|
|
163
|
+
return rebuildDateTime(sentinel);
|
|
164
|
+
if (isDurationSentinel(sentinel))
|
|
165
|
+
return rebuildDuration(sentinel);
|
|
166
|
+
return rebuildInterval(sentinel);
|
|
167
|
+
}
|
|
168
|
+
/**
|
|
169
|
+
* Turn a luxon instance into a marker, or give back nothing for any other value.
|
|
170
|
+
*
|
|
171
|
+
* The luxon `is*` helpers only read a flag on the object, which user data can
|
|
172
|
+
* also hold. The prototype check makes sure the value is a real instance.
|
|
173
|
+
*/
|
|
174
|
+
const encodeLuxonValue = (value) => {
|
|
175
|
+
if (value instanceof luxon_1.DateTime && luxon_1.DateTime.isDateTime(value))
|
|
176
|
+
return dateTimeToSentinel(value);
|
|
177
|
+
if (value instanceof luxon_1.Duration && luxon_1.Duration.isDuration(value))
|
|
178
|
+
return durationToSentinel(value);
|
|
179
|
+
if (value instanceof luxon_1.Interval && luxon_1.Interval.isInterval(value))
|
|
180
|
+
return intervalToSentinel(value);
|
|
181
|
+
return undefined;
|
|
182
|
+
};
|
|
183
|
+
exports.encodeLuxonValue = encodeLuxonValue;
|
|
184
|
+
/**
|
|
185
|
+
* Rebuild a luxon instance from a marker.
|
|
186
|
+
*
|
|
187
|
+
* A marker that names a type no encoder here wrote is given back as the plain
|
|
188
|
+
* object it is, which is what the host did before the type had a marker.
|
|
189
|
+
*/
|
|
190
|
+
const decodeLuxonSentinel = (sentinel) => {
|
|
191
|
+
if (!isLuxonSentinel(sentinel))
|
|
192
|
+
return sentinel;
|
|
193
|
+
return rebuildLuxonValue(sentinel);
|
|
194
|
+
};
|
|
195
|
+
exports.decodeLuxonSentinel = decodeLuxonSentinel;
|
|
196
|
+
/** Walk a transferred value and rebuild every luxon instance in it. */
|
|
197
|
+
function unwrapLuxonValues(value) {
|
|
198
|
+
return (0, transfer_1.unwrapTransferSentinels)(value, exports.decodeLuxonSentinel);
|
|
199
|
+
}
|
|
200
|
+
//# sourceMappingURL=luxon-transfer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"luxon-transfer.js","sourceRoot":"","sources":["../../../src/runtime/luxon-transfer.ts"],"names":[],"mappings":";AAAA;;;;;;;GAOG;;;;;;;;;;;;;;;AAEH,iCAA+D;AAI/D,yCAKoB;AAEP,QAAA,cAAc,GAAG,UAAU,CAAC;AAC5B,QAAA,aAAa,GAAG,UAAU,CAAC;AAC3B,QAAA,aAAa,GAAG,UAAU,CAAC;AA0BxC,4BAAmC,KAAc;IAChD,OAAO,IAAA,yBAAc,EAAC,KAAK,CAAC,KAAK,QAAA,cAAc,CAAC;AACjD,CAAC;AAED,4BAAmC,KAAc;IAChD,OAAO,IAAA,yBAAc,EAAC,KAAK,CAAC,KAAK,QAAA,aAAa,CAAC;AAChD,CAAC;AAED,4BAAmC,KAAc;IAChD,OAAO,IAAA,yBAAc,EAAC,KAAK,CAAC,KAAK,QAAA,aAAa,CAAC;AAChD,CAAC;AAED,yBAAgC,KAAc;IAC7C,OAAO,kBAAkB,CAAC,KAAK,CAAC,IAAI,kBAAkB,CAAC,KAAK,CAAC,IAAI,kBAAkB,CAAC,KAAK,CAAC,CAAC;AAC5F,CAAC;AAED,4BAAmC,KAAe;IACjD,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC;QACpB,OAAO;YACN,CAAC,4BAAiB,CAAC,EAAE,QAAA,cAAc;YACnC,eAAe,EAAE,KAAK,CAAC,aAAa,IAAI,SAAS;YACjD,oBAAoB,EAAE,KAAK,CAAC,kBAAkB;SAC9C,CAAC;IACH,CAAC;IACD,MAAM,QAAQ,GAAqB;QAClC,CAAC,4BAAiB,CAAC,EAAE,QAAA,cAAc;QACnC,WAAW,EAAE,KAAK,CAAC,KAAK,EAAE,IAAI,EAAE;KAChC,CAAC;IACF,0EAA0E;IAC1E,wDAAwD;IACxD,IAAI,KAAK,CAAC,IAAI,CAAC,IAAI,KAAK,QAAQ;QAAE,QAAQ,CAAC,MAAM,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC;IACpE,OAAO,QAAQ,CAAC;AACjB,CAAC;AAED,4BAAmC,KAAe;IACjD,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC;QACpB,OAAO;YACN,CAAC,4BAAiB,CAAC,EAAE,QAAA,aAAa;YAClC,eAAe,EAAE,KAAK,CAAC,aAAa,IAAI,SAAS;YACjD,oBAAoB,EAAE,KAAK,CAAC,kBAAkB;SAC9C,CAAC;IACH,CAAC;IACD,OAAO,EAAE,CAAC,4BAAiB,CAAC,EAAE,QAAA,aAAa,EAAE,QAAQ,EAAE,KAAK,CAAC,QAAQ,EAAE,EAAE,CAAC;AAC3E,CAAC;AAED,4BAAmC,KAAe;IACjD,IAAI,CAAC,KAAK,CAAC,OAAO,IAAI,KAAK,CAAC,KAAK,KAAK,IAAI,IAAI,KAAK,CAAC,GAAG,KAAK,IAAI,EAAE,CAAC;QAClE,OAAO;YACN,CAAC,4BAAiB,CAAC,EAAE,QAAA,aAAa;YAClC,eAAe,EAAE,KAAK,CAAC,aAAa,IAAI,SAAS;YACjD,oBAAoB,EAAE,KAAK,CAAC,kBAAkB;SAC9C,CAAC;IACH,CAAC;IACD,OAAO;QACN,CAAC,4BAAiB,CAAC,EAAE,QAAA,aAAa;QAClC,OAAO,EAAE,kBAAkB,CAAC,KAAK,CAAC,KAAK,CAAC;QACxC,KAAK,EAAE,kBAAkB,CAAC,KAAK,CAAC,GAAG,CAAC;KACpC,CAAC;AACH,CAAC;AAED,6EAA6E;AAC7E,0EAA0E;AAC1E,+DAA+D;AAC/D,MAAM,kBAAkB,GAAG,IAAI,GAAG,CAAC;IAClC,MAAM;IACN,OAAO;IACP,SAAS;IACT,UAAU;IACV,OAAO;IACP,QAAQ;IACR,MAAM;IACN,OAAO;IACP,KAAK;IACL,MAAM;IACN,MAAM;IACN,OAAO;IACP,QAAQ;IACR,SAAS;IACT,QAAQ;IACR,SAAS;IACT,aAAa;IACb,cAAc;CACd,CAAC,CAAC;AAEH,6EAA6E;AAC7E,6EAA6E;AAC7E,+EAA+E;AAC/E,kCAAkC;AAClC,MAAM,sBAAsB,GAAG,mCAAmC,CAAC;AAEnE,SAAS,gBAAgB,CAAC,QAA8B;IACvD,MAAM,MAAM,GACX,OAAO,QAAQ,CAAC,eAAe,KAAK,QAAQ,IAAI,QAAQ,CAAC,eAAe,CAAC,MAAM,GAAG,CAAC;QAClF,CAAC,CAAC,QAAQ,CAAC,eAAe;QAC1B,CAAC,CAAC,SAAS,CAAC;IACd,MAAM,WAAW,GAChB,OAAO,QAAQ,CAAC,oBAAoB,KAAK,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,oBAAoB,CAAC,CAAC,CAAC,SAAS,CAAC;IAC/F,OAAO,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;AAC9B,CAAC;AAED,mFAAmF;AACnF,SAAS,gBAAgB,CAAC,IAAa;IACtC,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,SAAS,CAAC;IACpE,MAAM,OAAO,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;IACnC,IAAI,OAAO,KAAK,OAAO,IAAI,OAAO,KAAK,QAAQ,IAAI,OAAO,KAAK,SAAS;QAAE,OAAO,SAAS,CAAC;IAC3F,IAAI,sBAAsB,CAAC,IAAI,CAAC,IAAI,CAAC;QAAE,OAAO,IAAI,CAAC;IACnD,OAAO,gBAAQ,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC;AACtD,CAAC;AAED,SAAS,gBAAgB,CAAC,KAAc;IACvC,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,CAAC,IAAA,wBAAa,EAAC,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC;IACvF,OAAO,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,KAAK,CACjC,CAAC,CAAC,GAAG,EAAE,MAAM,CAAC,EAAE,EAAE,CACjB,kBAAkB,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CACrF,CAAC;AACH,CAAC;AAED,yBAAgC,QAA0B;IACzD,MAAM,SAAS,GAAY,QAAQ,CAAC,WAAW,CAAC;IAChD,IAAI,OAAO,SAAS,KAAK,QAAQ,EAAE,CAAC;QACnC,OAAO,gBAAQ,CAAC,OAAO,CAAC,GAAG,gBAAgB,CAAC,QAAQ,CAAC,CAAC,CAAC;IACxD,CAAC;IACD,8EAA8E;IAC9E,8EAA8E;IAC9E,MAAM,IAAI,GAAG,gBAAgB,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,OAAO,CAAC;IAC1D,8EAA8E;IAC9E,gEAAgE;IAChE,OAAO,gBAAQ,CAAC,OAAO,CAAC,SAAS,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC;AAC9C,CAAC;AAED,yBAAgC,QAA0B;IACzD,MAAM,MAAM,GAAY,QAAQ,CAAC,QAAQ,CAAC;IAC1C,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,EAAE,CAAC;QAC/B,OAAO,gBAAQ,CAAC,OAAO,CAAC,GAAG,gBAAgB,CAAC,QAAQ,CAAC,CAAC,CAAC;IACxD,CAAC;IACD,OAAO,gBAAQ,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;AACpC,CAAC;AAED,yBAAgC,QAA0B;IACzD,MAAM,KAAK,GAAY,QAAQ,CAAC,OAAO,CAAC;IACxC,MAAM,GAAG,GAAY,QAAQ,CAAC,KAAK,CAAC;IACpC,IAAI,CAAC,kBAAkB,CAAC,KAAK,CAAC,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,EAAE,CAAC;QAC5D,OAAO,gBAAQ,CAAC,OAAO,CAAC,GAAG,gBAAgB,CAAC,QAAQ,CAAC,CAAC,CAAC;IACxD,CAAC;IACD,OAAO,gBAAQ,CAAC,aAAa,CAAC,eAAe,CAAC,KAAK,CAAC,EAAE,eAAe,CAAC,GAAG,CAAC,CAAC,CAAC;AAC7E,CAAC;AAED,2BAAkC,QAAuB;IACxD,IAAI,kBAAkB,CAAC,QAAQ,CAAC;QAAE,OAAO,eAAe,CAAC,QAAQ,CAAC,CAAC;IACnE,IAAI,kBAAkB,CAAC,QAAQ,CAAC;QAAE,OAAO,eAAe,CAAC,QAAQ,CAAC,CAAC;IACnE,OAAO,eAAe,CAAC,QAAQ,CAAC,CAAC;AAClC,CAAC;AAED;;;;;GAKG;AACI,MAAM,gBAAgB,GAAoB,CAAC,KAAK,EAAE,EAAE;IAC1D,IAAI,KAAK,YAAY,gBAAQ,IAAI,gBAAQ,CAAC,UAAU,CAAC,KAAK,CAAC;QAAE,OAAO,kBAAkB,CAAC,KAAK,CAAC,CAAC;IAC9F,IAAI,KAAK,YAAY,gBAAQ,IAAI,gBAAQ,CAAC,UAAU,CAAC,KAAK,CAAC;QAAE,OAAO,kBAAkB,CAAC,KAAK,CAAC,CAAC;IAC9F,IAAI,KAAK,YAAY,gBAAQ,IAAI,gBAAQ,CAAC,UAAU,CAAC,KAAK,CAAC;QAAE,OAAO,kBAAkB,CAAC,KAAK,CAAC,CAAC;IAC9F,OAAO,SAAS,CAAC;AAClB,CAAC,CAAC;AALW,QAAA,gBAAgB,GAAhB,gBAAgB,CAK3B;AAEF;;;;;GAKG;AACI,MAAM,mBAAmB,GAAoB,CAAC,QAAQ,EAAE,EAAE;IAChE,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC;QAAE,OAAO,QAAQ,CAAC;IAChD,OAAO,iBAAiB,CAAC,QAAQ,CAAC,CAAC;AACpC,CAAC,CAAC;AAHW,QAAA,mBAAmB,GAAnB,mBAAmB,CAG9B;AAEF,uEAAuE;AACvE,2BAAkC,KAAc;IAC/C,OAAO,IAAA,kCAAuB,EAAC,KAAK,EAAE,QAAA,mBAAmB,CAAC,CAAC;AAC5D,CAAC"}
|
|
@@ -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.
|
|
6
|
-
* identity and
|
|
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
|
|
9
|
-
*
|
|
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
|
-
*
|
|
16
|
-
*
|
|
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":"
|
|
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,57 +1,69 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.__prepareForTransfer = __prepareForTransfer;
|
|
4
|
-
const
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
4
|
+
const luxon_transfer_1 = require("./luxon-transfer");
|
|
5
|
+
const transfer_1 = require("./transfer");
|
|
6
|
+
/**
|
|
7
|
+
* The types that go across as a marker. Each encoder claims the values it owns
|
|
8
|
+
* and passes on every other, so a new type is one entry here.
|
|
9
|
+
*/
|
|
10
|
+
const ENCODERS = [luxon_transfer_1.encodeLuxonValue];
|
|
11
|
+
function encode(value) {
|
|
12
|
+
for (const encoder of ENCODERS) {
|
|
13
|
+
const sentinel = encoder(value);
|
|
14
|
+
if (sentinel !== undefined)
|
|
15
|
+
return sentinel;
|
|
16
|
+
}
|
|
17
|
+
return undefined;
|
|
9
18
|
}
|
|
10
19
|
/**
|
|
11
20
|
* Prepare a value for transfer across the V8 isolate boundary.
|
|
12
21
|
*
|
|
13
22
|
* isolated-vm's `copy: true` uses structured clone, which strips prototypes
|
|
14
|
-
* from non-standard types.
|
|
15
|
-
* identity and
|
|
23
|
+
* from non-standard types. A class instance such as a luxon DateTime loses its
|
|
24
|
+
* class identity and arrives on the host as a plain object.
|
|
16
25
|
*
|
|
17
|
-
* This function recursively walks a value and converts
|
|
18
|
-
*
|
|
19
|
-
* inside the isolate before the result is transferred.
|
|
26
|
+
* This function recursively walks a value and converts each such type into a
|
|
27
|
+
* structured-cloneable marker object. The host rebuilds a real instance from
|
|
28
|
+
* the marker. It runs inside the isolate before the result is transferred.
|
|
20
29
|
*
|
|
21
30
|
* Note: JS Date objects survive structured clone with prototype intact
|
|
22
31
|
* (Date is a standard structured-cloneable type) and are not converted.
|
|
23
32
|
*
|
|
24
|
-
*
|
|
25
|
-
*
|
|
33
|
+
* This walk does not record the objects it has seen, because expression results
|
|
34
|
+
* are not expected to refer to themselves. The host walk does record them.
|
|
26
35
|
*/
|
|
27
36
|
function __prepareForTransfer(value) {
|
|
28
37
|
if (value === null || value === undefined)
|
|
29
38
|
return value;
|
|
30
39
|
if (typeof value !== 'object')
|
|
31
40
|
return value;
|
|
32
|
-
|
|
33
|
-
if (
|
|
34
|
-
return
|
|
35
|
-
// Luxon Duration -> ISO string (toISO() returns null for invalid Duration)
|
|
36
|
-
if (luxon_1.Duration.isDuration(value))
|
|
37
|
-
return value.toISO() ?? null;
|
|
38
|
-
// Luxon Interval -> ISO string (toISO() returns "Invalid Interval" for invalid Interval)
|
|
39
|
-
if (luxon_1.Interval.isInterval(value)) {
|
|
40
|
-
const iso = value.toISO();
|
|
41
|
-
return iso === 'Invalid Interval' ? null : iso;
|
|
42
|
-
}
|
|
43
|
-
// Array — walk elements
|
|
41
|
+
const sentinel = encode(value);
|
|
42
|
+
if (sentinel !== undefined)
|
|
43
|
+
return sentinel;
|
|
44
44
|
if (Array.isArray(value))
|
|
45
45
|
return value.map(__prepareForTransfer);
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
46
|
+
if (!(0, transfer_1.isPlainObject)(value)) {
|
|
47
|
+
if ((0, transfer_1.isStructuredCloneBuiltin)(value))
|
|
48
|
+
return value;
|
|
49
|
+
// A class instance the host cannot rebuild. Structured clone flattens its
|
|
50
|
+
// prototype away, so a marker key on it would read as one of ours. Mark it
|
|
51
|
+
// opaque, and the host gives the contents back as data.
|
|
52
|
+
return {
|
|
53
|
+
[transfer_1.TRANSFER_ESCAPED_KEY]: true,
|
|
54
|
+
[transfer_1.TRANSFER_OPAQUE_KEY]: true,
|
|
55
|
+
[transfer_1.TRANSFER_VALUE_KEY]: value,
|
|
56
|
+
};
|
|
57
|
+
}
|
|
51
58
|
const result = {};
|
|
59
|
+
let collides = false;
|
|
52
60
|
for (const key of Object.keys(value)) {
|
|
61
|
+
if (transfer_1.TRANSFER_FRAMING_KEYS.includes(key))
|
|
62
|
+
collides = true;
|
|
53
63
|
result[key] = __prepareForTransfer(value[key]);
|
|
54
64
|
}
|
|
55
|
-
|
|
65
|
+
// User data can hold the same keys as our framing. Escape such an object, so
|
|
66
|
+
// the host reads the object itself as data but still walks what is inside it.
|
|
67
|
+
return collides ? { [transfer_1.TRANSFER_ESCAPED_KEY]: true, [transfer_1.TRANSFER_VALUE_KEY]: result } : result;
|
|
56
68
|
}
|
|
57
69
|
//# sourceMappingURL=serialize.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"serialize.js","sourceRoot":"","sources":["../../../src/runtime/serialize.ts"],"names":[],"mappings":";;;AAAA,
|
|
1
|
+
{"version":3,"file":"serialize.js","sourceRoot":"","sources":["../../../src/runtime/serialize.ts"],"names":[],"mappings":";;;AAAA,qDAAoD;AAEpD,yCAOoB;AAEpB;;;GAGG;AACH,MAAM,QAAQ,GAAsB,CAAC,iCAAgB,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,8BAAqC,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,IAAA,wBAAa,EAAC,KAAK,CAAC,EAAE,CAAC;QAC3B,IAAI,IAAA,mCAAwB,EAAC,KAAK,CAAC;YAAE,OAAO,KAAK,CAAC;QAClD,0EAA0E;QAC1E,2EAA2E;QAC3E,wDAAwD;QACxD,OAAO;YACN,CAAC,+BAAoB,CAAC,EAAE,IAAI;YAC5B,CAAC,8BAAmB,CAAC,EAAE,IAAI;YAC3B,CAAC,6BAAkB,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,gCAAqB,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,+BAAoB,CAAC,EAAE,IAAI,EAAE,CAAC,6BAAkB,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC;AAC3F,CAAC"}
|