@n8n/expression-runtime 0.13.0 → 0.13.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/bundle/runtime.esm.js +17 -17
- package/dist/bundle/runtime.esm.js.map +3 -3
- package/dist/bundle/runtime.iife.js +17 -17
- package/dist/bundle/runtime.iife.js.map +3 -3
- package/dist/cjs/build.tsbuildinfo +1 -1
- package/dist/cjs/runtime/context.d.ts.map +1 -1
- package/dist/cjs/runtime/context.js +7 -5
- package/dist/cjs/runtime/context.js.map +1 -1
- package/dist/cjs/runtime/jmespath.d.ts +22 -0
- package/dist/cjs/runtime/jmespath.d.ts.map +1 -0
- package/dist/cjs/runtime/jmespath.js +112 -0
- package/dist/cjs/runtime/jmespath.js.map +1 -0
- package/dist/cjs/runtime/lazy-proxy.d.ts +30 -3
- package/dist/cjs/runtime/lazy-proxy.d.ts.map +1 -1
- package/dist/cjs/runtime/lazy-proxy.js +143 -121
- package/dist/cjs/runtime/lazy-proxy.js.map +1 -1
- package/dist/esm/build.tsbuildinfo +1 -1
- package/dist/esm/runtime/context.d.ts.map +1 -1
- package/dist/esm/runtime/context.js +8 -6
- package/dist/esm/runtime/context.js.map +1 -1
- package/dist/esm/runtime/jmespath.d.ts +22 -0
- package/dist/esm/runtime/jmespath.d.ts.map +1 -0
- package/dist/esm/runtime/jmespath.js +66 -0
- package/dist/esm/runtime/jmespath.js.map +1 -0
- package/dist/esm/runtime/lazy-proxy.d.ts +30 -3
- package/dist/esm/runtime/lazy-proxy.d.ts.map +1 -1
- package/dist/esm/runtime/lazy-proxy.js +142 -122
- package/dist/esm/runtime/lazy-proxy.js.map +1 -1
- package/package.json +4 -4
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../../../src/runtime/context.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../../../src/runtime/context.ts"],"names":[],"mappings":"AAyBA;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,YAAY,CAC3B,cAAc,EAAE,GAAG,EACnB,eAAe,EAAE,GAAG,EACpB,kBAAkB,EAAE,GAAG,EACvB,QAAQ,CAAC,EAAE,MAAM,GACf,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CA4JzB"}
|
|
@@ -2,7 +2,7 @@ import { DateTime, IANAZone, Settings } from 'luxon';
|
|
|
2
2
|
import { extend, extendOptional } from '../extensions/extend';
|
|
3
3
|
import { extendedFunctions } from '../extensions/function-extensions';
|
|
4
4
|
import { __sanitize, createSafeErrorSubclass, ExpressionError } from './safe-globals';
|
|
5
|
-
import { createDeepLazyProxy, throwIfErrorSentinel } from './lazy-proxy';
|
|
5
|
+
import { createDeepLazyProxy, isArrayMetadata, isObjectMetadata, throwIfErrorSentinel, } from './lazy-proxy';
|
|
6
6
|
// Pre-create safe error subclass wrappers (reused across evaluations)
|
|
7
7
|
const SafeTypeError = createSafeErrorSubclass(TypeError);
|
|
8
8
|
const SafeSyntaxError = createSafeErrorSubclass(SyntaxError);
|
|
@@ -125,11 +125,13 @@ export function buildContext(getValueAtPath, getArrayElement, callFunctionAtPath
|
|
|
125
125
|
};
|
|
126
126
|
return true;
|
|
127
127
|
}
|
|
128
|
-
// Object metadata — create a lazy proxy for deep access
|
|
129
|
-
if (value
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
128
|
+
// Object / array metadata — create a shape-matched lazy proxy for deep access
|
|
129
|
+
if (isArrayMetadata(value)) {
|
|
130
|
+
target[key] = createDeepLazyProxy([key], { kind: 'array', length: value.__length }, callbacks);
|
|
131
|
+
return true;
|
|
132
|
+
}
|
|
133
|
+
if (isObjectMetadata(value)) {
|
|
134
|
+
target[key] = createDeepLazyProxy([key], { kind: 'object', keys: value.__keys }, callbacks);
|
|
133
135
|
return true;
|
|
134
136
|
}
|
|
135
137
|
// Primitive or null — store directly
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"context.js","sourceRoot":"","sources":["../../../src/runtime/context.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AAErD,OAAO,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAC9D,OAAO,EAAE,iBAAiB,EAAE,MAAM,mCAAmC,CAAC;AAEtE,OAAO,EAAE,UAAU,EAAE,uBAAuB,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AACtF,OAAO,
|
|
1
|
+
{"version":3,"file":"context.js","sourceRoot":"","sources":["../../../src/runtime/context.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* In-isolate `$jmespath` / `$jmesPath` implementation.
|
|
3
|
+
*
|
|
4
|
+
* Mirrors the host-side wrapper in `packages/workflow/src/workflow-data-proxy.ts`
|
|
5
|
+
* so that expressions resolve `$jmespath` from the in-isolate runtime via
|
|
6
|
+
* Tournament's polyfill, instead of falling through to the bridge's
|
|
7
|
+
* `callFunctionAtPath` channel. This shrinks the host-callable surface
|
|
8
|
+
* exposed by the data object.
|
|
9
|
+
*
|
|
10
|
+
* Behavioural parity with the host wrapper:
|
|
11
|
+
* - Throws `ExpressionError` (same name) when args are wrong.
|
|
12
|
+
* - Rejects queries that contain unsafe property tokens.
|
|
13
|
+
* - Spreads non-array, non-null objects to drop proxies at the top level.
|
|
14
|
+
*
|
|
15
|
+
* Note on lazy proxies: when `data` is a lazy proxy (e.g. `$json`), each
|
|
16
|
+
* property access during `jmespath.search` triggers a synchronous host
|
|
17
|
+
* roundtrip via `getValueAtPath`. Functional but slow for deep traversals.
|
|
18
|
+
* Performance optimisation (e.g. bulk pre-fetch of the queried subtree) is
|
|
19
|
+
* a follow-up.
|
|
20
|
+
*/
|
|
21
|
+
export declare function jmesPath(data: unknown, query: string): unknown;
|
|
22
|
+
//# sourceMappingURL=jmespath.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"jmespath.d.ts","sourceRoot":"","sources":["../../../src/runtime/jmespath.ts"],"names":[],"mappings":"AAmCA;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAgB,QAAQ,CAAC,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAoB9D"}
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
import * as jmespath from 'jmespath';
|
|
2
|
+
import { ExpressionError } from './safe-globals';
|
|
3
|
+
const unsafeJmespathProperties = [
|
|
4
|
+
'__proto__',
|
|
5
|
+
'prototype',
|
|
6
|
+
'constructor',
|
|
7
|
+
'getPrototypeOf',
|
|
8
|
+
'setPrototypeOf',
|
|
9
|
+
'getOwnPropertyDescriptor',
|
|
10
|
+
'getOwnPropertyDescriptors',
|
|
11
|
+
'defineProperty',
|
|
12
|
+
'defineProperties',
|
|
13
|
+
'mainModule',
|
|
14
|
+
'binding',
|
|
15
|
+
'_linkedBinding',
|
|
16
|
+
'_load',
|
|
17
|
+
'prepareStackTrace',
|
|
18
|
+
'__lookupGetter__',
|
|
19
|
+
'__lookupSetter__',
|
|
20
|
+
'__defineGetter__',
|
|
21
|
+
'__defineSetter__',
|
|
22
|
+
'caller',
|
|
23
|
+
'arguments',
|
|
24
|
+
'getBuiltinModule',
|
|
25
|
+
'dlopen',
|
|
26
|
+
'execve',
|
|
27
|
+
'loadEnvFile',
|
|
28
|
+
];
|
|
29
|
+
const unsafeJmespathPropertyPattern = new RegExp(`\\b(?:${unsafeJmespathProperties.map((p) => p.replace(/[.*+?^${}()|[\]\\]/g, '\\$&')).join('|')})\\b`);
|
|
30
|
+
/**
|
|
31
|
+
* In-isolate `$jmespath` / `$jmesPath` implementation.
|
|
32
|
+
*
|
|
33
|
+
* Mirrors the host-side wrapper in `packages/workflow/src/workflow-data-proxy.ts`
|
|
34
|
+
* so that expressions resolve `$jmespath` from the in-isolate runtime via
|
|
35
|
+
* Tournament's polyfill, instead of falling through to the bridge's
|
|
36
|
+
* `callFunctionAtPath` channel. This shrinks the host-callable surface
|
|
37
|
+
* exposed by the data object.
|
|
38
|
+
*
|
|
39
|
+
* Behavioural parity with the host wrapper:
|
|
40
|
+
* - Throws `ExpressionError` (same name) when args are wrong.
|
|
41
|
+
* - Rejects queries that contain unsafe property tokens.
|
|
42
|
+
* - Spreads non-array, non-null objects to drop proxies at the top level.
|
|
43
|
+
*
|
|
44
|
+
* Note on lazy proxies: when `data` is a lazy proxy (e.g. `$json`), each
|
|
45
|
+
* property access during `jmespath.search` triggers a synchronous host
|
|
46
|
+
* roundtrip via `getValueAtPath`. Functional but slow for deep traversals.
|
|
47
|
+
* Performance optimisation (e.g. bulk pre-fetch of the queried subtree) is
|
|
48
|
+
* a follow-up.
|
|
49
|
+
*/
|
|
50
|
+
export function jmesPath(data, query) {
|
|
51
|
+
if (typeof data !== 'object' || typeof query !== 'string') {
|
|
52
|
+
throw new ExpressionError('expected two arguments (Object, string) for this function');
|
|
53
|
+
}
|
|
54
|
+
// jmespath decodes escape sequences inside quoted identifiers, so the
|
|
55
|
+
// token check must run against an unescaped query. Reject any backslash
|
|
56
|
+
// up front to keep the property-name match meaningful.
|
|
57
|
+
if (query.includes('\\') || unsafeJmespathPropertyPattern.test(query)) {
|
|
58
|
+
throw new ExpressionError('Cannot access this property in a jmespath query due to security concerns');
|
|
59
|
+
}
|
|
60
|
+
if (data !== null && !Array.isArray(data) && typeof data === 'object') {
|
|
61
|
+
return jmespath.search({ ...data }, query);
|
|
62
|
+
}
|
|
63
|
+
// Array or null — pass through to jmespath which accepts both
|
|
64
|
+
return jmespath.search(data, query);
|
|
65
|
+
}
|
|
66
|
+
//# sourceMappingURL=jmespath.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"jmespath.js","sourceRoot":"","sources":["../../../src/runtime/jmespath.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,QAAQ,MAAM,UAAU,CAAC;AAErC,OAAO,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAEjD,MAAM,wBAAwB,GAAG;IAChC,WAAW;IACX,WAAW;IACX,aAAa;IACb,gBAAgB;IAChB,gBAAgB;IAChB,0BAA0B;IAC1B,2BAA2B;IAC3B,gBAAgB;IAChB,kBAAkB;IAClB,YAAY;IACZ,SAAS;IACT,gBAAgB;IAChB,OAAO;IACP,mBAAmB;IACnB,kBAAkB;IAClB,kBAAkB;IAClB,kBAAkB;IAClB,kBAAkB;IAClB,QAAQ;IACR,WAAW;IACX,kBAAkB;IAClB,QAAQ;IACR,QAAQ;IACR,aAAa;CACb,CAAC;AAEF,MAAM,6BAA6B,GAAG,IAAI,MAAM,CAC/C,SAAS,wBAAwB,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,qBAAqB,EAAE,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CACtG,CAAC;AAEF;;;;;;;;;;;;;;;;;;;GAmBG;AACH,MAAM,UAAU,QAAQ,CAAC,IAAa,EAAE,KAAa;IACpD,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC3D,MAAM,IAAI,eAAe,CAAC,2DAA2D,CAAC,CAAC;IACxF,CAAC;IAED,sEAAsE;IACtE,wEAAwE;IACxE,uDAAuD;IACvD,IAAI,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,6BAA6B,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;QACvE,MAAM,IAAI,eAAe,CACxB,0EAA0E,CAC1E,CAAC;IACH,CAAC;IAED,IAAI,IAAI,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE,CAAC;QACvE,OAAO,QAAQ,CAAC,MAAM,CAAC,EAAE,GAAI,IAAgC,EAAE,EAAE,KAAK,CAAC,CAAC;IACzE,CAAC;IAED,8DAA8D;IAC9D,OAAO,QAAQ,CAAC,MAAM,CAAC,IAAa,EAAE,KAAK,CAAC,CAAC;AAC9C,CAAC"}
|
|
@@ -11,6 +11,16 @@ export interface ErrorSentinel {
|
|
|
11
11
|
stack?: string;
|
|
12
12
|
extra?: Record<string, unknown>;
|
|
13
13
|
}
|
|
14
|
+
interface ObjectMetadata {
|
|
15
|
+
__isObject: true;
|
|
16
|
+
__keys: string[];
|
|
17
|
+
}
|
|
18
|
+
interface ArrayMetadata {
|
|
19
|
+
__isArray: true;
|
|
20
|
+
__length: number;
|
|
21
|
+
}
|
|
22
|
+
export declare function isObjectMetadata(value: unknown): value is ObjectMetadata;
|
|
23
|
+
export declare function isArrayMetadata(value: unknown): value is ArrayMetadata;
|
|
14
24
|
/**
|
|
15
25
|
* If `value` is an error sentinel from a host-side callback, throw it
|
|
16
26
|
* directly. The isolate's outer try-catch will detect __isError and
|
|
@@ -21,6 +31,22 @@ export declare function throwIfErrorSentinel(value: unknown): void;
|
|
|
21
31
|
export declare function isLazyProxy(obj: unknown): boolean;
|
|
22
32
|
/** Returns the basePath the proxy was created with, or undefined if not a proxy. */
|
|
23
33
|
export declare function getProxyPath(obj: object): string[] | undefined;
|
|
34
|
+
/**
|
|
35
|
+
* Tagged-union shape descriptor for a deep lazy proxy.
|
|
36
|
+
*
|
|
37
|
+
* - `object` proxies wrap a plain object target. `keys` is optional —
|
|
38
|
+
* when omitted, ownKeys/Object.keys() trigger a lazy `getValueAtPath`
|
|
39
|
+
* round-trip to fetch them.
|
|
40
|
+
* - `array` proxies wrap an array target so `Array.isArray(proxy)` is `true`
|
|
41
|
+
* and structured clone / `Array.prototype.map` iterate indices correctly.
|
|
42
|
+
*/
|
|
43
|
+
export type ProxyMeta = {
|
|
44
|
+
kind: 'object';
|
|
45
|
+
keys?: string[];
|
|
46
|
+
} | {
|
|
47
|
+
kind: 'array';
|
|
48
|
+
length: number;
|
|
49
|
+
};
|
|
24
50
|
/**
|
|
25
51
|
* Creates a deep lazy-loading proxy for workflow data.
|
|
26
52
|
*
|
|
@@ -30,18 +56,19 @@ export declare function getProxyPath(obj: object): string[] | undefined;
|
|
|
30
56
|
* Pattern:
|
|
31
57
|
* 1. When property accessed: Call getValueAtPath([path]) to get metadata
|
|
32
58
|
* 2. Metadata indicates type: primitive, object, array, or function
|
|
33
|
-
* 3. For objects/arrays: Create nested proxy for lazy loading
|
|
59
|
+
* 3. For objects/arrays: Create nested proxy (shape-matched) for lazy loading
|
|
34
60
|
* 4. For functions: Create wrapper that calls callFunctionAtPath
|
|
35
61
|
* 5. Cache all fetched values in target to avoid repeated callbacks
|
|
36
62
|
*
|
|
37
63
|
* @param basePath - Current path in object tree (e.g., ['$json', 'user'])
|
|
38
|
-
* @param
|
|
64
|
+
* @param meta - Optional shape descriptor (object/array + known keys/length)
|
|
39
65
|
* @param callbacks - ivm.Reference callbacks for cross-isolate communication
|
|
40
66
|
* @returns Proxy object with lazy loading behavior
|
|
41
67
|
*/
|
|
42
|
-
export declare function createDeepLazyProxy(basePath?: string[],
|
|
68
|
+
export declare function createDeepLazyProxy(basePath?: string[], meta?: ProxyMeta, callbacks?: {
|
|
43
69
|
getValueAtPath: any;
|
|
44
70
|
getArrayElement: any;
|
|
45
71
|
callFunctionAtPath: any;
|
|
46
72
|
}): any;
|
|
73
|
+
export {};
|
|
47
74
|
//# sourceMappingURL=lazy-proxy.d.ts.map
|
|
@@ -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;
|
|
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;;;;;;;;;;;;;;;;;GAiBG;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;IACrB,kBAAkB,EAAE,GAAG,CAAC;CACxB,GACC,GAAG,CAqNL"}
|
|
@@ -8,12 +8,15 @@
|
|
|
8
8
|
// expression code. Avoids shadowing user data keys like __isProxy / __path.
|
|
9
9
|
// ---------------------------------------------------------------------------
|
|
10
10
|
const proxyPaths = new WeakMap();
|
|
11
|
-
function isObjectMetadata(value) {
|
|
11
|
+
export function isObjectMetadata(value) {
|
|
12
12
|
return (typeof value === 'object' &&
|
|
13
13
|
value !== null &&
|
|
14
14
|
'__isObject' in value &&
|
|
15
15
|
value.__isObject === true);
|
|
16
16
|
}
|
|
17
|
+
export function isArrayMetadata(value) {
|
|
18
|
+
return (typeof value === 'object' && value !== null && '__isArray' in value && value.__isArray === true);
|
|
19
|
+
}
|
|
17
20
|
function isErrorSentinel(value) {
|
|
18
21
|
return (typeof value === 'object' && value !== null && '__isError' in value && value.__isError === true);
|
|
19
22
|
}
|
|
@@ -45,26 +48,29 @@ export function getProxyPath(obj) {
|
|
|
45
48
|
* Pattern:
|
|
46
49
|
* 1. When property accessed: Call getValueAtPath([path]) to get metadata
|
|
47
50
|
* 2. Metadata indicates type: primitive, object, array, or function
|
|
48
|
-
* 3. For objects/arrays: Create nested proxy for lazy loading
|
|
51
|
+
* 3. For objects/arrays: Create nested proxy (shape-matched) for lazy loading
|
|
49
52
|
* 4. For functions: Create wrapper that calls callFunctionAtPath
|
|
50
53
|
* 5. Cache all fetched values in target to avoid repeated callbacks
|
|
51
54
|
*
|
|
52
55
|
* @param basePath - Current path in object tree (e.g., ['$json', 'user'])
|
|
53
|
-
* @param
|
|
56
|
+
* @param meta - Optional shape descriptor (object/array + known keys/length)
|
|
54
57
|
* @param callbacks - ivm.Reference callbacks for cross-isolate communication
|
|
55
58
|
* @returns Proxy object with lazy loading behavior
|
|
56
59
|
*/
|
|
57
|
-
export function createDeepLazyProxy(basePath = [],
|
|
60
|
+
export function createDeepLazyProxy(basePath = [], meta, callbacks) {
|
|
58
61
|
if (!callbacks) {
|
|
59
62
|
throw new Error('createDeepLazyProxy requires callbacks parameter');
|
|
60
63
|
}
|
|
61
64
|
const { getValueAtPath, getArrayElement, callFunctionAtPath } = callbacks;
|
|
62
|
-
|
|
65
|
+
const isArray = meta?.kind === 'array';
|
|
66
|
+
const arrayLength = isArray ? meta.length : 0;
|
|
67
|
+
const objectKeys = meta?.kind === 'object' ? meta.keys : undefined;
|
|
68
|
+
// Cache for keys fetched from the bridge (root object proxies without known keys).
|
|
63
69
|
// Shared between ownKeys and getOwnPropertyDescriptor for consistency.
|
|
64
70
|
let fetchedKeys;
|
|
65
|
-
function
|
|
66
|
-
if (
|
|
67
|
-
return
|
|
71
|
+
function resolveObjectKeys() {
|
|
72
|
+
if (objectKeys)
|
|
73
|
+
return objectKeys;
|
|
68
74
|
if (fetchedKeys)
|
|
69
75
|
return fetchedKeys;
|
|
70
76
|
const value = getValueAtPath.applySync(null, [basePath], {
|
|
@@ -78,42 +84,134 @@ export function createDeepLazyProxy(basePath = [], knownKeys, callbacks) {
|
|
|
78
84
|
}
|
|
79
85
|
return [];
|
|
80
86
|
}
|
|
81
|
-
|
|
87
|
+
function isInArrayBounds(prop) {
|
|
88
|
+
const idx = Number(prop);
|
|
89
|
+
if (!Number.isInteger(idx) || idx < 0 || idx >= arrayLength)
|
|
90
|
+
return undefined;
|
|
91
|
+
if (String(idx) !== prop)
|
|
92
|
+
return undefined; // reject '00', '1.0', etc.
|
|
93
|
+
return idx;
|
|
94
|
+
}
|
|
95
|
+
function materializeChild(basePath, propOrIdx, value) {
|
|
96
|
+
if (value === undefined || value === null)
|
|
97
|
+
return value;
|
|
98
|
+
throwIfErrorSentinel(value);
|
|
99
|
+
// `path = [...basePath, propOrIdx]` is built only inside the three branches
|
|
100
|
+
// that actually use it, so non-metadata objects don't pay for the spread.
|
|
101
|
+
if (value && typeof value === 'object' && value.__isFunction) {
|
|
102
|
+
const path = [...basePath, propOrIdx];
|
|
103
|
+
return function (...args) {
|
|
104
|
+
const result = callFunctionAtPath.applySync(null, [path, ...args], {
|
|
105
|
+
arguments: { copy: true },
|
|
106
|
+
result: { copy: true },
|
|
107
|
+
});
|
|
108
|
+
throwIfErrorSentinel(result);
|
|
109
|
+
return result;
|
|
110
|
+
};
|
|
111
|
+
}
|
|
112
|
+
if (isArrayMetadata(value)) {
|
|
113
|
+
const path = [...basePath, propOrIdx];
|
|
114
|
+
return createDeepLazyProxy(path, { kind: 'array', length: value.__length }, callbacks);
|
|
115
|
+
}
|
|
116
|
+
if (isObjectMetadata(value)) {
|
|
117
|
+
const path = [...basePath, propOrIdx];
|
|
118
|
+
return createDeepLazyProxy(path, { kind: 'object', keys: value.__keys }, callbacks);
|
|
119
|
+
}
|
|
120
|
+
return value;
|
|
121
|
+
}
|
|
122
|
+
const target = isArray ? [] : {};
|
|
123
|
+
const proxy = new Proxy(target, {
|
|
82
124
|
ownKeys() {
|
|
83
|
-
|
|
125
|
+
if (isArray) {
|
|
126
|
+
const keys = Array.from({ length: arrayLength }, (_, i) => String(i));
|
|
127
|
+
// Required by proxy invariant: target [] has non-configurable 'length'
|
|
128
|
+
keys.push('length');
|
|
129
|
+
return keys;
|
|
130
|
+
}
|
|
131
|
+
return resolveObjectKeys();
|
|
84
132
|
},
|
|
85
133
|
getOwnPropertyDescriptor(_target, prop) {
|
|
86
134
|
if (typeof prop === 'symbol')
|
|
87
135
|
return undefined;
|
|
88
|
-
if (
|
|
136
|
+
if (isArray) {
|
|
137
|
+
if (prop === 'length') {
|
|
138
|
+
// Match the target array's own length descriptor shape so the
|
|
139
|
+
// proxy invariant holds: writable & non-configurable.
|
|
140
|
+
return {
|
|
141
|
+
configurable: false,
|
|
142
|
+
enumerable: false,
|
|
143
|
+
writable: true,
|
|
144
|
+
value: arrayLength,
|
|
145
|
+
};
|
|
146
|
+
}
|
|
147
|
+
if (isInArrayBounds(prop) !== undefined) {
|
|
148
|
+
// Lazy proxies are read-only views of host data — writes from
|
|
149
|
+
// expression code must not propagate back across the isolate.
|
|
150
|
+
// Reading `proxy[prop]` triggers the get trap, which fetches the
|
|
151
|
+
// element from the host (if not cached) and stores it on the
|
|
152
|
+
// target. Including `value` matches a native array's data
|
|
153
|
+
// descriptor; the fetch is one-shot per index because of caching.
|
|
154
|
+
return {
|
|
155
|
+
configurable: true,
|
|
156
|
+
enumerable: true,
|
|
157
|
+
writable: false,
|
|
158
|
+
value: proxy[prop],
|
|
159
|
+
};
|
|
160
|
+
}
|
|
161
|
+
return undefined;
|
|
162
|
+
}
|
|
163
|
+
if (resolveObjectKeys().includes(prop)) {
|
|
89
164
|
return { configurable: true, enumerable: true, writable: false };
|
|
90
165
|
}
|
|
91
166
|
return undefined;
|
|
92
167
|
},
|
|
93
|
-
get(
|
|
94
|
-
//
|
|
95
|
-
//
|
|
96
|
-
//
|
|
168
|
+
get(targetObj, prop) {
|
|
169
|
+
// Symbol-keyed access falls through to the proxy target so that
|
|
170
|
+
// well-known symbols on the prototype chain are reachable. For array
|
|
171
|
+
// proxies this exposes `Array.prototype[Symbol.iterator]` etc., which
|
|
172
|
+
// `[...arr]`, `for…of`, and destructuring need. For object proxies the
|
|
173
|
+
// `{}` target has no own symbol-keyed entries; reads return undefined.
|
|
174
|
+
// Symbols themselves aren't transferred across the isolate boundary —
|
|
175
|
+
// only the values yielded by iteration, which already pay the proxy's
|
|
176
|
+
// indexed `[[Get]]` (primitives or sub-proxies).
|
|
97
177
|
if (typeof prop === 'symbol') {
|
|
98
|
-
return
|
|
99
|
-
}
|
|
100
|
-
// Handle common Object.prototype methods within isolate
|
|
101
|
-
// Don't fetch from parent to avoid native function transfer issues
|
|
102
|
-
if (prop === 'toString') {
|
|
103
|
-
return function () {
|
|
104
|
-
return '[object Object]';
|
|
105
|
-
};
|
|
178
|
+
return targetObj[prop];
|
|
106
179
|
}
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
180
|
+
// `toString` and `valueOf` aren't intercepted — they fall through to the
|
|
181
|
+
// target's prototype via the cache check below. That means `arr.toString()`
|
|
182
|
+
// returns the canonical comma-joined string (via `Array.prototype.toString`
|
|
183
|
+
// → `.join(',')`, paying one bridge call per element), and `obj.valueOf()`
|
|
184
|
+
// returns the proxy itself instead of the internal target. Pre-fix this
|
|
185
|
+
// trap shortcut to `''` / `targetObj` to avoid the O(n) cost, but the
|
|
186
|
+
// divergence from native was surprising in expressions like
|
|
187
|
+
// `={{ "items: " + $json.arr }}`. Users who care about the cost can call
|
|
188
|
+
// `$json.arr.length` and index explicitly.
|
|
189
|
+
// Array length is known at construction — no bridge call needed
|
|
190
|
+
if (isArray && prop === 'length') {
|
|
191
|
+
return arrayLength;
|
|
111
192
|
}
|
|
112
193
|
// Check cache - if already fetched, return cached value
|
|
113
|
-
if (prop in
|
|
114
|
-
return
|
|
194
|
+
if (prop in targetObj) {
|
|
195
|
+
return targetObj[prop];
|
|
196
|
+
}
|
|
197
|
+
if (isArray) {
|
|
198
|
+
const idx = isInArrayBounds(prop);
|
|
199
|
+
if (idx === undefined)
|
|
200
|
+
return undefined;
|
|
201
|
+
const element = getArrayElement.applySync(null, [basePath, idx], {
|
|
202
|
+
arguments: { copy: true },
|
|
203
|
+
result: { copy: true },
|
|
204
|
+
});
|
|
205
|
+
// Primitives (and null) skip `materializeChild`'s metadata checks.
|
|
206
|
+
if (element === null || typeof element !== 'object') {
|
|
207
|
+
targetObj[prop] = element;
|
|
208
|
+
return element;
|
|
209
|
+
}
|
|
210
|
+
targetObj[prop] = materializeChild(basePath, String(idx), element);
|
|
211
|
+
return targetObj[prop];
|
|
115
212
|
}
|
|
116
|
-
// Build path for this property
|
|
213
|
+
// Build path for this property — needed for the getValueAtPath call.
|
|
214
|
+
// materializeChild rebuilds it only inside metadata branches.
|
|
117
215
|
const path = [...basePath, prop];
|
|
118
216
|
// Call back to host to get metadata/value
|
|
119
217
|
// Note: getValueAtPath is an ivm.Reference passed via callbacks
|
|
@@ -121,103 +219,25 @@ export function createDeepLazyProxy(basePath = [], knownKeys, callbacks) {
|
|
|
121
219
|
arguments: { copy: true },
|
|
122
220
|
result: { copy: true },
|
|
123
221
|
});
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
target[prop] = value;
|
|
127
|
-
return value;
|
|
128
|
-
}
|
|
129
|
-
// Handle errors serialized by host-side callbacks — reconstruct and throw
|
|
130
|
-
// so the isolate's outer try-catch can serialize them back via __reportError
|
|
131
|
-
throwIfErrorSentinel(value);
|
|
132
|
-
// Handle functions - metadata: { __isFunction: true, __name: string }
|
|
133
|
-
if (value && typeof value === 'object' && value.__isFunction) {
|
|
134
|
-
// Create function wrapper that calls back to parent
|
|
135
|
-
target[prop] = function (...args) {
|
|
136
|
-
const result = callFunctionAtPath.applySync(null, [path, ...args], {
|
|
137
|
-
arguments: { copy: true },
|
|
138
|
-
result: { copy: true },
|
|
139
|
-
});
|
|
140
|
-
// Check if the host-side function threw — reconstruct and throw
|
|
141
|
-
throwIfErrorSentinel(result);
|
|
142
|
-
return result;
|
|
143
|
-
};
|
|
144
|
-
return target[prop];
|
|
145
|
-
}
|
|
146
|
-
// Handle arrays - metadata: { __isArray: true, __length: number }
|
|
147
|
-
if (value && typeof value === 'object' && value.__isArray) {
|
|
148
|
-
const arrayProxy = new Proxy([], {
|
|
149
|
-
has(arrTarget, arrProp) {
|
|
150
|
-
if (typeof arrProp === 'symbol')
|
|
151
|
-
return arrProp in arrTarget;
|
|
152
|
-
const index = Number(arrProp);
|
|
153
|
-
if (!isNaN(index) && index >= 0 && index < value.__length) {
|
|
154
|
-
return true;
|
|
155
|
-
}
|
|
156
|
-
return arrProp in arrTarget;
|
|
157
|
-
},
|
|
158
|
-
get(arrTarget, arrProp) {
|
|
159
|
-
// Symbols can't be transferred via isolated-vm; return undefined
|
|
160
|
-
if (typeof arrProp === 'symbol') {
|
|
161
|
-
return undefined;
|
|
162
|
-
}
|
|
163
|
-
// Handle array length
|
|
164
|
-
if (arrProp === 'length') {
|
|
165
|
-
return value.__length;
|
|
166
|
-
}
|
|
167
|
-
// Handle numeric index
|
|
168
|
-
const index = Number(arrProp);
|
|
169
|
-
if (!isNaN(index) && index >= 0) {
|
|
170
|
-
// Check cache
|
|
171
|
-
if (!(arrProp in arrTarget)) {
|
|
172
|
-
// Fetch element from parent
|
|
173
|
-
const element = getArrayElement.applySync(null, [path, index], {
|
|
174
|
-
arguments: { copy: true },
|
|
175
|
-
result: { copy: true },
|
|
176
|
-
});
|
|
177
|
-
throwIfErrorSentinel(element);
|
|
178
|
-
// Handle element metadata (arrays and objects need proxies)
|
|
179
|
-
if (element && typeof element === 'object' && element.__isArray) {
|
|
180
|
-
const elementPath = [...path, String(index)];
|
|
181
|
-
arrTarget[arrProp] = createDeepLazyProxy(elementPath, undefined, callbacks);
|
|
182
|
-
}
|
|
183
|
-
else if (isObjectMetadata(element)) {
|
|
184
|
-
// Object metadata: create nested proxy, passing known keys to
|
|
185
|
-
// avoid an extra __getValueAtPath round-trip for ownKeys/Object.keys()
|
|
186
|
-
const elementPath = [...path, String(index)];
|
|
187
|
-
arrTarget[arrProp] = createDeepLazyProxy(elementPath, element.__keys, callbacks);
|
|
188
|
-
}
|
|
189
|
-
else {
|
|
190
|
-
// Primitive element
|
|
191
|
-
arrTarget[arrProp] = element;
|
|
192
|
-
}
|
|
193
|
-
}
|
|
194
|
-
return arrTarget[arrProp];
|
|
195
|
-
}
|
|
196
|
-
// Array methods (map, filter, etc.)
|
|
197
|
-
// Note: These require full array - limitation for now
|
|
198
|
-
return arrTarget[arrProp];
|
|
199
|
-
},
|
|
200
|
-
});
|
|
201
|
-
target[prop] = arrayProxy;
|
|
202
|
-
return target[prop];
|
|
203
|
-
}
|
|
204
|
-
// Handle objects - metadata: { __isObject: true, __keys: string[] }
|
|
205
|
-
if (isObjectMetadata(value)) {
|
|
206
|
-
// Create nested proxy for recursive lazy loading, passing known keys
|
|
207
|
-
target[prop] = createDeepLazyProxy(path, value.__keys, callbacks);
|
|
208
|
-
return target[prop];
|
|
209
|
-
}
|
|
210
|
-
// Primitive value - cache and return
|
|
211
|
-
target[prop] = value;
|
|
212
|
-
return value;
|
|
222
|
+
targetObj[prop] = materializeChild(basePath, prop, value);
|
|
223
|
+
return targetObj[prop];
|
|
213
224
|
},
|
|
214
|
-
has(
|
|
225
|
+
has(targetObj, prop) {
|
|
215
226
|
// Implement 'in' operator support
|
|
216
227
|
// Example: '$json' in data
|
|
228
|
+
// Mirror the get trap: symbol-keyed lookups defer to the target so
|
|
229
|
+
// `Symbol.iterator in arr` reflects the prototype chain.
|
|
217
230
|
if (typeof prop === 'symbol')
|
|
218
|
-
return
|
|
231
|
+
return prop in targetObj;
|
|
232
|
+
if (isArray) {
|
|
233
|
+
if (prop === 'length')
|
|
234
|
+
return true;
|
|
235
|
+
if (prop in targetObj)
|
|
236
|
+
return true;
|
|
237
|
+
return isInArrayBounds(prop) !== undefined;
|
|
238
|
+
}
|
|
219
239
|
// Check cache first
|
|
220
|
-
if (prop in
|
|
240
|
+
if (prop in targetObj) {
|
|
221
241
|
return true;
|
|
222
242
|
}
|
|
223
243
|
// Build path and check existence via callback
|
|
@@ -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;
|
|
1
|
+
{"version":3,"file":"lazy-proxy.js","sourceRoot":"","sources":["../../../src/runtime/lazy-proxy.ts"],"names":[],"mappings":"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"}
|