@n8n/expression-runtime 0.9.0 → 0.10.0
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 +7 -7
- package/dist/bundle/runtime.esm.js.map +3 -3
- package/dist/bundle/runtime.iife.js +7 -7
- 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 +91 -89
- package/dist/cjs/runtime/context.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 +91 -89
- package/dist/esm/runtime/context.js.map +1 -1
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../../../src/runtime/context.ts"],"names":[],"mappings":"AAoBA;;;;;;;;;;;;;;;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,
|
|
1
|
+
{"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../../../src/runtime/context.ts"],"names":[],"mappings":"AAoBA;;;;;;;;;;;;;;;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,CAwJzB"}
|
|
@@ -34,13 +34,13 @@ export function buildContext(getValueAtPath, getArrayElement, callFunctionAtPath
|
|
|
34
34
|
throw new Error(`Invalid timezone: "${timezone}"`);
|
|
35
35
|
}
|
|
36
36
|
Settings.defaultZone = timezone ?? 'system';
|
|
37
|
-
const
|
|
37
|
+
const target = {};
|
|
38
38
|
// Callback bundle passed to createDeepLazyProxy so proxies don't touch globalThis
|
|
39
39
|
const callbacks = { getValueAtPath, getArrayElement, callFunctionAtPath };
|
|
40
40
|
// __sanitize must be on the context because PrototypeSanitizer generates:
|
|
41
41
|
// obj[this.__sanitize(expr)] where 'this' is the context (via .call(ctx) wrapping)
|
|
42
42
|
// Use a non-writable property descriptor so override attempts throw instead of silently succeeding.
|
|
43
|
-
Object.defineProperty(
|
|
43
|
+
Object.defineProperty(target, '__sanitize', {
|
|
44
44
|
get: () => __sanitize,
|
|
45
45
|
set: () => {
|
|
46
46
|
throw new ExpressionError('Cannot override "__sanitize" due to security concerns');
|
|
@@ -49,105 +49,32 @@ export function buildContext(getValueAtPath, getArrayElement, callFunctionAtPath
|
|
|
49
49
|
configurable: false,
|
|
50
50
|
});
|
|
51
51
|
// -------------------------------------------------------------------------
|
|
52
|
-
// Create lazy proxies for complex workflow properties
|
|
53
|
-
// -------------------------------------------------------------------------
|
|
54
|
-
ctx.$json = createDeepLazyProxy(['$json'], undefined, callbacks);
|
|
55
|
-
ctx.$binary = createDeepLazyProxy(['$binary'], undefined, callbacks);
|
|
56
|
-
ctx.$input = createDeepLazyProxy(['$input'], undefined, callbacks);
|
|
57
|
-
ctx.$node = createDeepLazyProxy(['$node'], undefined, callbacks);
|
|
58
|
-
ctx.$parameter = createDeepLazyProxy(['$parameter'], undefined, callbacks);
|
|
59
|
-
ctx.$workflow = createDeepLazyProxy(['$workflow'], undefined, callbacks);
|
|
60
|
-
ctx.$prevNode = createDeepLazyProxy(['$prevNode'], undefined, callbacks);
|
|
61
|
-
ctx.$data = createDeepLazyProxy(['$data'], undefined, callbacks);
|
|
62
|
-
ctx.$env = createDeepLazyProxy(['$env'], undefined, callbacks);
|
|
63
|
-
ctx.process = createDeepLazyProxy(['process'], undefined, callbacks);
|
|
64
|
-
ctx.$execution = createDeepLazyProxy(['$execution'], undefined, callbacks);
|
|
65
|
-
ctx.$vars = createDeepLazyProxy(['$vars'], undefined, callbacks);
|
|
66
|
-
ctx.$secrets = createDeepLazyProxy(['$secrets'], undefined, callbacks);
|
|
67
|
-
// -------------------------------------------------------------------------
|
|
68
52
|
// Create DateTime values inside the isolate (not lazy-loaded from host,
|
|
69
53
|
// because host-side DateTime objects lose their prototype crossing the
|
|
70
54
|
// boundary). The isolate has its own luxon with the correct timezone
|
|
71
55
|
// already set via Settings.defaultZone above.
|
|
72
56
|
// -------------------------------------------------------------------------
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
// -------------------------------------------------------------------------
|
|
76
|
-
// Fetch primitives directly (no lazy loading needed for simple values)
|
|
77
|
-
// -------------------------------------------------------------------------
|
|
78
|
-
function fetchPrimitive(key) {
|
|
79
|
-
try {
|
|
80
|
-
return getValueAtPath.applySync(null, [[key]], {
|
|
81
|
-
arguments: { copy: true },
|
|
82
|
-
result: { copy: true },
|
|
83
|
-
});
|
|
84
|
-
}
|
|
85
|
-
catch {
|
|
86
|
-
return undefined;
|
|
87
|
-
}
|
|
88
|
-
}
|
|
89
|
-
ctx.$runIndex = fetchPrimitive('$runIndex');
|
|
90
|
-
ctx.$itemIndex = fetchPrimitive('$itemIndex');
|
|
91
|
-
ctx.$executionId = fetchPrimitive('$executionId');
|
|
92
|
-
ctx.$resumeWebhookUrl = fetchPrimitive('$resumeWebhookUrl');
|
|
93
|
-
ctx.$webhookId = fetchPrimitive('$webhookId');
|
|
94
|
-
ctx.$nodeId = fetchPrimitive('$nodeId');
|
|
95
|
-
ctx.$nodeVersion = fetchPrimitive('$nodeVersion');
|
|
57
|
+
target.$now = DateTime.now();
|
|
58
|
+
target.$today = DateTime.now().set({ hour: 0, minute: 0, second: 0, millisecond: 0 });
|
|
96
59
|
// -------------------------------------------------------------------------
|
|
97
60
|
// Expose standalone functions (min, max, average, numberList, zip, $ifEmpty, etc.)
|
|
98
61
|
// -------------------------------------------------------------------------
|
|
99
|
-
Object.assign(
|
|
100
|
-
// -------------------------------------------------------------------------
|
|
101
|
-
// Handle function properties (check if value is function metadata)
|
|
62
|
+
Object.assign(target, extendedFunctions);
|
|
102
63
|
// -------------------------------------------------------------------------
|
|
103
|
-
//
|
|
104
|
-
// wrapper that forwards calls via callFunctionAtPath; otherwise copy
|
|
105
|
-
// the value as-is.
|
|
106
|
-
function exposeHostFunction(name) {
|
|
107
|
-
if (!callFunctionAtPath)
|
|
108
|
-
return;
|
|
109
|
-
try {
|
|
110
|
-
const value = getValueAtPath.applySync(null, [[name]], {
|
|
111
|
-
arguments: { copy: true },
|
|
112
|
-
result: { copy: true },
|
|
113
|
-
});
|
|
114
|
-
if (value && typeof value === 'object' && value.__isFunction) {
|
|
115
|
-
ctx[name] = function (...args) {
|
|
116
|
-
const result = callFunctionAtPath.applySync(null, [[name], ...args], {
|
|
117
|
-
arguments: { copy: true },
|
|
118
|
-
result: { copy: true },
|
|
119
|
-
});
|
|
120
|
-
throwIfErrorSentinel(result);
|
|
121
|
-
return result;
|
|
122
|
-
};
|
|
123
|
-
}
|
|
124
|
-
else {
|
|
125
|
-
ctx[name] = value;
|
|
126
|
-
}
|
|
127
|
-
}
|
|
128
|
-
catch {
|
|
129
|
-
ctx[name] = undefined;
|
|
130
|
-
}
|
|
131
|
-
}
|
|
132
|
-
exposeHostFunction('$items');
|
|
133
|
-
exposeHostFunction('$fromAI');
|
|
134
|
-
exposeHostFunction('$fromai');
|
|
135
|
-
exposeHostFunction('$fromAi');
|
|
136
|
-
// -------------------------------------------------------------------------
|
|
137
|
-
// Expose globals on ctx so tournament's "x in this ? this.x : global.x"
|
|
64
|
+
// Expose globals on target so tournament's "x in this ? this.x : global.x"
|
|
138
65
|
// pattern resolves them correctly (tournament checks ctx before global)
|
|
139
66
|
// -------------------------------------------------------------------------
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
// Expose extend/extendOptional on
|
|
67
|
+
target.DateTime = globalThis.DateTime;
|
|
68
|
+
target.Duration = globalThis.Duration;
|
|
69
|
+
target.Interval = globalThis.Interval;
|
|
70
|
+
// Expose extend/extendOptional on target so tournament's "x in this ? this.x : global.x"
|
|
144
71
|
// pattern resolves them correctly when the VM checks ctx first
|
|
145
|
-
|
|
146
|
-
|
|
72
|
+
target.extend = extend;
|
|
73
|
+
target.extendOptional = extendOptional;
|
|
147
74
|
// Wire builtins so tournament's VariablePolyfill resolves them from ctx
|
|
148
|
-
initializeBuiltins(
|
|
75
|
+
initializeBuiltins(target);
|
|
149
76
|
// $item(itemIndex) returns a sub-proxy for the specified item (legacy syntax)
|
|
150
|
-
|
|
77
|
+
target.$item = function (itemIndex) {
|
|
151
78
|
const indexStr = String(itemIndex);
|
|
152
79
|
return {
|
|
153
80
|
$json: createDeepLazyProxy(['$item', indexStr, '$json'], undefined, callbacks),
|
|
@@ -155,10 +82,85 @@ export function buildContext(getValueAtPath, getArrayElement, callFunctionAtPath
|
|
|
155
82
|
};
|
|
156
83
|
};
|
|
157
84
|
// $() function for accessing other nodes
|
|
158
|
-
|
|
85
|
+
target.$ = function (nodeName) {
|
|
159
86
|
return createDeepLazyProxy(['$', nodeName], undefined, callbacks);
|
|
160
87
|
};
|
|
161
|
-
|
|
88
|
+
// -------------------------------------------------------------------------
|
|
89
|
+
// Resolve an unknown key from the host. Called by the proxy's has/get traps
|
|
90
|
+
// for keys not already on the target. The resolved value is cached on target
|
|
91
|
+
// so each key is fetched at most once per evaluation.
|
|
92
|
+
// -------------------------------------------------------------------------
|
|
93
|
+
// Track keys we've already probed so we never call applySync twice
|
|
94
|
+
// for the same key — even if the host returned undefined.
|
|
95
|
+
const probedKeys = new Set();
|
|
96
|
+
function resolveFromHost(key) {
|
|
97
|
+
if (probedKeys.has(key))
|
|
98
|
+
return false;
|
|
99
|
+
let value;
|
|
100
|
+
try {
|
|
101
|
+
value = getValueAtPath.applySync(null, [[key]], {
|
|
102
|
+
arguments: { copy: true },
|
|
103
|
+
result: { copy: true },
|
|
104
|
+
});
|
|
105
|
+
}
|
|
106
|
+
catch {
|
|
107
|
+
// Don't mark as probed — the throw may be transient
|
|
108
|
+
// (e.g. host data not yet available) and a retry should be allowed.
|
|
109
|
+
return false;
|
|
110
|
+
}
|
|
111
|
+
// Mark as probed only after a definitive answer from the host.
|
|
112
|
+
probedKeys.add(key);
|
|
113
|
+
if (value === undefined)
|
|
114
|
+
return false;
|
|
115
|
+
throwIfErrorSentinel(value);
|
|
116
|
+
// Function metadata — create a callable wrapper
|
|
117
|
+
if (value && typeof value === 'object' && value.__isFunction) {
|
|
118
|
+
target[key] = function (...args) {
|
|
119
|
+
const result = callFunctionAtPath.applySync(null, [[key], ...args], {
|
|
120
|
+
arguments: { copy: true },
|
|
121
|
+
result: { copy: true },
|
|
122
|
+
});
|
|
123
|
+
throwIfErrorSentinel(result);
|
|
124
|
+
return result;
|
|
125
|
+
};
|
|
126
|
+
return true;
|
|
127
|
+
}
|
|
128
|
+
// Object metadata — create a lazy proxy for deep access
|
|
129
|
+
if (value &&
|
|
130
|
+
typeof value === 'object' &&
|
|
131
|
+
('__isObject' in value || '__isArray' in value)) {
|
|
132
|
+
target[key] = createDeepLazyProxy([key], undefined, callbacks);
|
|
133
|
+
return true;
|
|
134
|
+
}
|
|
135
|
+
// Primitive or null — store directly
|
|
136
|
+
target[key] = value;
|
|
137
|
+
return true;
|
|
138
|
+
}
|
|
139
|
+
// -------------------------------------------------------------------------
|
|
140
|
+
// Wrap target in a Proxy so unknown keys are resolved lazily from the host.
|
|
141
|
+
// Tournament's VariablePolyfill transforms identifiers to:
|
|
142
|
+
// ("x" in this ? this : global).x
|
|
143
|
+
// The has trap intercepts the "in" check, resolves the key on demand, and
|
|
144
|
+
// caches it on target. The get trap then finds it cached.
|
|
145
|
+
// -------------------------------------------------------------------------
|
|
146
|
+
return new Proxy(target, {
|
|
147
|
+
has(_target, prop) {
|
|
148
|
+
if (typeof prop === 'symbol')
|
|
149
|
+
return prop in target;
|
|
150
|
+
if (prop in target)
|
|
151
|
+
return true;
|
|
152
|
+
return resolveFromHost(prop);
|
|
153
|
+
},
|
|
154
|
+
get(_target, prop) {
|
|
155
|
+
if (typeof prop === 'symbol')
|
|
156
|
+
return undefined;
|
|
157
|
+
if (prop in target)
|
|
158
|
+
return target[prop];
|
|
159
|
+
// has() should have resolved it, but handle direct get() too
|
|
160
|
+
resolveFromHost(prop);
|
|
161
|
+
return target[prop];
|
|
162
|
+
},
|
|
163
|
+
});
|
|
162
164
|
}
|
|
163
165
|
// Matches initializeGlobalContext() lines 262-318 in packages/workflow/src/expression.ts
|
|
164
166
|
const DENYLISTED_GLOBALS = [
|
|
@@ -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,EAAE,mBAAmB,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAC;AAEzE,sEAAsE;AACtE,MAAM,aAAa,GAAG,uBAAuB,CAAC,SAAS,CAAC,CAAC;AACzD,MAAM,eAAe,GAAG,uBAAuB,CAAC,WAAW,CAAC,CAAC;AAC7D,MAAM,aAAa,GAAG,uBAAuB,CAAC,SAAS,CAAC,CAAC;AACzD,MAAM,cAAc,GAAG,uBAAuB,CAAC,UAAU,CAAC,CAAC;AAC3D,MAAM,kBAAkB,GAAG,uBAAuB,CAAC,cAAc,CAAC,CAAC;AACnE,MAAM,YAAY,GAAG,uBAAuB,CAAC,QAAQ,CAAC,CAAC;AAEvD,+EAA+E;AAC/E,yBAAyB;AACzB,+EAA+E;AAE/E;;;;;;;;;;;;;;;GAeG;AACH,MAAM,UAAU,YAAY,CAC3B,cAAmB,EACnB,eAAoB,EACpB,kBAAuB,EACvB,QAAiB;IAEjB,IAAI,QAAQ,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,QAAQ,CAAC,EAAE,CAAC;QACjD,MAAM,IAAI,KAAK,CAAC,sBAAsB,QAAQ,GAAG,CAAC,CAAC;IACpD,CAAC;IACD,QAAQ,CAAC,WAAW,GAAG,QAAQ,IAAI,QAAQ,CAAC;IAE5C,MAAM,
|
|
1
|
+
{"version":3,"file":"context.js","sourceRoot":"","sources":["../../../src/runtime/context.ts"],"names":[],"mappings":"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"}
|