n8n-workflow 2.42.2 → 2.43.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/cjs/build.tsbuildinfo +1 -1
- package/dist/cjs/common/get-runnable-nodes.d.ts +31 -0
- package/dist/cjs/common/get-runnable-nodes.d.ts.map +1 -0
- package/dist/cjs/common/get-runnable-nodes.js +97 -0
- package/dist/cjs/common/get-runnable-nodes.js.map +1 -0
- package/dist/cjs/common/index.d.ts +1 -0
- package/dist/cjs/common/index.d.ts.map +1 -1
- package/dist/cjs/common/index.js +1 -0
- package/dist/cjs/common/index.js.map +1 -1
- package/dist/cjs/constants.d.ts +1 -0
- package/dist/cjs/constants.d.ts.map +1 -1
- package/dist/cjs/constants.js +4 -3
- package/dist/cjs/constants.js.map +1 -1
- package/dist/cjs/errors/abstract/execution-base.error.d.ts +1 -1
- package/dist/cjs/errors/abstract/execution-base.error.d.ts.map +1 -1
- package/dist/cjs/errors/abstract/execution-base.error.js +2 -2
- package/dist/cjs/errors/abstract/execution-base.error.js.map +1 -1
- package/dist/cjs/errors/db-connection-timeout-error.d.ts +1 -1
- package/dist/cjs/errors/db-connection-timeout-error.d.ts.map +1 -1
- package/dist/cjs/errors/db-connection-timeout-error.js +2 -2
- package/dist/cjs/errors/db-connection-timeout-error.js.map +1 -1
- package/dist/cjs/errors/index.d.ts +1 -5
- package/dist/cjs/errors/index.d.ts.map +1 -1
- package/dist/cjs/errors/index.js +7 -11
- package/dist/cjs/errors/index.js.map +1 -1
- package/dist/cjs/errors/node-operation.error.js +2 -2
- package/dist/cjs/errors/node-operation.error.js.map +1 -1
- package/dist/cjs/errors/node-version-not-found.error.d.ts +1 -1
- package/dist/cjs/errors/node-version-not-found.error.d.ts.map +1 -1
- package/dist/cjs/errors/node-version-not-found.error.js +2 -2
- package/dist/cjs/errors/node-version-not-found.error.js.map +1 -1
- package/dist/cjs/errors/trigger-close.error.d.ts +1 -1
- package/dist/cjs/errors/trigger-close.error.d.ts.map +1 -1
- package/dist/cjs/errors/trigger-close.error.js +2 -2
- package/dist/cjs/errors/trigger-close.error.js.map +1 -1
- package/dist/cjs/expression.d.ts +6 -0
- package/dist/cjs/expression.d.ts.map +1 -1
- package/dist/cjs/expression.js +22 -7
- package/dist/cjs/expression.js.map +1 -1
- package/dist/cjs/expressions/native-evaluation/evaluator.d.ts +21 -0
- package/dist/cjs/expressions/native-evaluation/evaluator.d.ts.map +1 -0
- package/dist/cjs/expressions/native-evaluation/evaluator.js +372 -0
- package/dist/cjs/expressions/native-evaluation/evaluator.js.map +1 -0
- package/dist/cjs/expressions/native-evaluation/grammar.d.ts +63 -0
- package/dist/cjs/expressions/native-evaluation/grammar.d.ts.map +1 -0
- package/dist/cjs/expressions/native-evaluation/grammar.js +113 -0
- package/dist/cjs/expressions/native-evaluation/grammar.js.map +1 -0
- package/dist/cjs/expressions/native-evaluation/index.d.ts +17 -0
- package/dist/cjs/expressions/native-evaluation/index.d.ts.map +1 -0
- package/dist/cjs/expressions/native-evaluation/index.js +144 -0
- package/dist/cjs/expressions/native-evaluation/index.js.map +1 -0
- package/dist/cjs/expressions/native-evaluation/parser.d.ts +6 -0
- package/dist/cjs/expressions/native-evaluation/parser.d.ts.map +1 -0
- package/dist/cjs/expressions/native-evaluation/parser.js +159 -0
- package/dist/cjs/expressions/native-evaluation/parser.js.map +1 -0
- package/dist/cjs/extensions/date-extensions.js +2 -2
- package/dist/cjs/extensions/number-extensions.js +2 -2
- package/dist/cjs/extensions/string-extensions.js +1 -1
- package/dist/cjs/index.d.ts +2 -1
- package/dist/cjs/index.d.ts.map +1 -1
- package/dist/cjs/index.js +5 -1
- package/dist/cjs/index.js.map +1 -1
- package/dist/cjs/interfaces.d.ts +27 -6
- package/dist/cjs/interfaces.d.ts.map +1 -1
- package/dist/cjs/interfaces.js +3 -0
- package/dist/cjs/interfaces.js.map +1 -1
- package/dist/cjs/native-methods/array.methods.js +4 -4
- package/dist/cjs/node-helpers.d.ts +13 -1
- package/dist/cjs/node-helpers.d.ts.map +1 -1
- package/dist/cjs/node-helpers.js +3 -1
- package/dist/cjs/node-helpers.js.map +1 -1
- package/dist/cjs/node-parameters/filter-parameter.d.ts +1 -1
- package/dist/cjs/node-parameters/filter-parameter.d.ts.map +1 -1
- package/dist/cjs/node-parameters/filter-parameter.js +2 -2
- package/dist/cjs/node-parameters/filter-parameter.js.map +1 -1
- package/dist/cjs/node-validation.d.ts +17 -5
- package/dist/cjs/node-validation.d.ts.map +1 -1
- package/dist/cjs/node-validation.js +39 -16
- package/dist/cjs/node-validation.js.map +1 -1
- package/dist/cjs/run-execution-data/run-execution-data.v1.d.ts +13 -0
- package/dist/cjs/run-execution-data/run-execution-data.v1.d.ts.map +1 -1
- package/dist/cjs/run-execution-data/run-execution-data.v1.js.map +1 -1
- package/dist/cjs/run-execution-data-factory.d.ts +1 -0
- package/dist/cjs/run-execution-data-factory.d.ts.map +1 -1
- package/dist/cjs/run-execution-data-factory.js +1 -0
- package/dist/cjs/run-execution-data-factory.js.map +1 -1
- package/dist/cjs/sub-workflow-output.d.ts +13 -1
- package/dist/cjs/sub-workflow-output.d.ts.map +1 -1
- package/dist/cjs/sub-workflow-output.js +64 -0
- package/dist/cjs/sub-workflow-output.js.map +1 -1
- package/dist/cjs/utils.js +2 -2
- package/dist/cjs/utils.js.map +1 -1
- package/dist/cjs/webhook-description-fields.d.ts +31 -0
- package/dist/cjs/webhook-description-fields.d.ts.map +1 -1
- package/dist/cjs/webhook-description-fields.js +34 -0
- package/dist/cjs/webhook-description-fields.js.map +1 -1
- package/dist/esm/common/get-runnable-nodes.d.ts +31 -0
- package/dist/esm/common/get-runnable-nodes.d.ts.map +1 -0
- package/dist/esm/common/get-runnable-nodes.js +93 -0
- package/dist/esm/common/get-runnable-nodes.js.map +1 -0
- package/dist/esm/common/index.d.ts +1 -0
- package/dist/esm/common/index.d.ts.map +1 -1
- package/dist/esm/common/index.js +1 -0
- package/dist/esm/common/index.js.map +1 -1
- package/dist/esm/constants.d.ts +1 -0
- package/dist/esm/constants.d.ts.map +1 -1
- package/dist/esm/constants.js +1 -0
- package/dist/esm/constants.js.map +1 -1
- package/dist/esm/errors/abstract/execution-base.error.d.ts +1 -1
- package/dist/esm/errors/abstract/execution-base.error.d.ts.map +1 -1
- package/dist/esm/errors/abstract/execution-base.error.js +1 -1
- package/dist/esm/errors/abstract/execution-base.error.js.map +1 -1
- package/dist/esm/errors/db-connection-timeout-error.d.ts +1 -1
- package/dist/esm/errors/db-connection-timeout-error.d.ts.map +1 -1
- package/dist/esm/errors/db-connection-timeout-error.js +1 -1
- package/dist/esm/errors/db-connection-timeout-error.js.map +1 -1
- package/dist/esm/errors/index.d.ts +1 -5
- package/dist/esm/errors/index.d.ts.map +1 -1
- package/dist/esm/errors/index.js +1 -5
- package/dist/esm/errors/index.js.map +1 -1
- package/dist/esm/errors/node-operation.error.js +1 -1
- package/dist/esm/errors/node-operation.error.js.map +1 -1
- package/dist/esm/errors/node-version-not-found.error.d.ts +1 -1
- package/dist/esm/errors/node-version-not-found.error.d.ts.map +1 -1
- package/dist/esm/errors/node-version-not-found.error.js +1 -1
- package/dist/esm/errors/node-version-not-found.error.js.map +1 -1
- package/dist/esm/errors/trigger-close.error.d.ts +1 -1
- package/dist/esm/errors/trigger-close.error.d.ts.map +1 -1
- package/dist/esm/errors/trigger-close.error.js +1 -1
- package/dist/esm/errors/trigger-close.error.js.map +1 -1
- package/dist/esm/expression.d.ts +6 -0
- package/dist/esm/expression.d.ts.map +1 -1
- package/dist/esm/expression.js +22 -7
- package/dist/esm/expression.js.map +1 -1
- package/dist/esm/expressions/native-evaluation/evaluator.d.ts +21 -0
- package/dist/esm/expressions/native-evaluation/evaluator.d.ts.map +1 -0
- package/dist/esm/expressions/native-evaluation/evaluator.js +366 -0
- package/dist/esm/expressions/native-evaluation/evaluator.js.map +1 -0
- package/dist/esm/expressions/native-evaluation/grammar.d.ts +63 -0
- package/dist/esm/expressions/native-evaluation/grammar.d.ts.map +1 -0
- package/dist/esm/expressions/native-evaluation/grammar.js +108 -0
- package/dist/esm/expressions/native-evaluation/grammar.js.map +1 -0
- package/dist/esm/expressions/native-evaluation/index.d.ts +17 -0
- package/dist/esm/expressions/native-evaluation/index.d.ts.map +1 -0
- package/dist/esm/expressions/native-evaluation/index.js +137 -0
- package/dist/esm/expressions/native-evaluation/index.js.map +1 -0
- package/dist/esm/expressions/native-evaluation/parser.d.ts +6 -0
- package/dist/esm/expressions/native-evaluation/parser.d.ts.map +1 -0
- package/dist/esm/expressions/native-evaluation/parser.js +156 -0
- package/dist/esm/expressions/native-evaluation/parser.js.map +1 -0
- package/dist/esm/extensions/date-extensions.js +2 -2
- package/dist/esm/extensions/number-extensions.js +2 -2
- package/dist/esm/extensions/string-extensions.js +1 -1
- package/dist/esm/index.d.ts +2 -1
- package/dist/esm/index.d.ts.map +1 -1
- package/dist/esm/index.js +2 -1
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/interfaces.d.ts +27 -6
- package/dist/esm/interfaces.d.ts.map +1 -1
- package/dist/esm/interfaces.js +3 -0
- package/dist/esm/interfaces.js.map +1 -1
- package/dist/esm/native-methods/array.methods.js +4 -4
- package/dist/esm/node-helpers.d.ts +13 -1
- package/dist/esm/node-helpers.d.ts.map +1 -1
- package/dist/esm/node-helpers.js +3 -1
- package/dist/esm/node-helpers.js.map +1 -1
- package/dist/esm/node-parameters/filter-parameter.d.ts +1 -1
- package/dist/esm/node-parameters/filter-parameter.d.ts.map +1 -1
- package/dist/esm/node-parameters/filter-parameter.js +1 -1
- package/dist/esm/node-parameters/filter-parameter.js.map +1 -1
- package/dist/esm/node-validation.d.ts +17 -5
- package/dist/esm/node-validation.d.ts.map +1 -1
- package/dist/esm/node-validation.js +39 -16
- package/dist/esm/node-validation.js.map +1 -1
- package/dist/esm/run-execution-data/run-execution-data.v1.d.ts +13 -0
- package/dist/esm/run-execution-data/run-execution-data.v1.d.ts.map +1 -1
- package/dist/esm/run-execution-data/run-execution-data.v1.js.map +1 -1
- package/dist/esm/run-execution-data-factory.d.ts +1 -0
- package/dist/esm/run-execution-data-factory.d.ts.map +1 -1
- package/dist/esm/run-execution-data-factory.js +1 -0
- package/dist/esm/run-execution-data-factory.js.map +1 -1
- package/dist/esm/sub-workflow-output.d.ts +13 -1
- package/dist/esm/sub-workflow-output.d.ts.map +1 -1
- package/dist/esm/sub-workflow-output.js +60 -0
- package/dist/esm/sub-workflow-output.js.map +1 -1
- package/dist/esm/typecheck.tsbuildinfo +1 -1
- package/dist/esm/utils.js +1 -1
- package/dist/esm/utils.js.map +1 -1
- package/dist/esm/webhook-description-fields.d.ts +31 -0
- package/dist/esm/webhook-description-fields.d.ts.map +1 -1
- package/dist/esm/webhook-description-fields.js +33 -0
- package/dist/esm/webhook-description-fields.js.map +1 -1
- package/package.json +15 -14
- package/dist/cjs/errors/base/base.error.d.ts +0 -26
- package/dist/cjs/errors/base/base.error.d.ts.map +0 -1
- package/dist/cjs/errors/base/base.error.js +0 -43
- package/dist/cjs/errors/base/base.error.js.map +0 -1
- package/dist/cjs/errors/base/operational.error.d.ts +0 -16
- package/dist/cjs/errors/base/operational.error.d.ts.map +0 -1
- package/dist/cjs/errors/base/operational.error.js +0 -19
- package/dist/cjs/errors/base/operational.error.js.map +0 -1
- package/dist/cjs/errors/base/unexpected.error.d.ts +0 -16
- package/dist/cjs/errors/base/unexpected.error.d.ts.map +0 -1
- package/dist/cjs/errors/base/unexpected.error.js +0 -19
- package/dist/cjs/errors/base/unexpected.error.js.map +0 -1
- package/dist/cjs/errors/base/user.error.d.ts +0 -18
- package/dist/cjs/errors/base/user.error.d.ts.map +0 -1
- package/dist/cjs/errors/base/user.error.js +0 -19
- package/dist/cjs/errors/base/user.error.js.map +0 -1
- package/dist/esm/errors/base/base.error.d.ts +0 -26
- package/dist/esm/errors/base/base.error.d.ts.map +0 -1
- package/dist/esm/errors/base/base.error.js +0 -36
- package/dist/esm/errors/base/base.error.js.map +0 -1
- package/dist/esm/errors/base/operational.error.d.ts +0 -16
- package/dist/esm/errors/base/operational.error.d.ts.map +0 -1
- package/dist/esm/errors/base/operational.error.js +0 -15
- package/dist/esm/errors/base/operational.error.js.map +0 -1
- package/dist/esm/errors/base/unexpected.error.d.ts +0 -16
- package/dist/esm/errors/base/unexpected.error.d.ts.map +0 -1
- package/dist/esm/errors/base/unexpected.error.js +0 -15
- package/dist/esm/errors/base/unexpected.error.js.map +0 -1
- package/dist/esm/errors/base/user.error.d.ts +0 -18
- package/dist/esm/errors/base/user.error.d.ts.map +0 -1
- package/dist/esm/errors/base/user.error.js +0 -15
- package/dist/esm/errors/base/user.error.js.map +0 -1
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.isOneOf = exports.isObj = exports.MAX_DEPTH = exports.MAX_RESULT_LENGTH = exports.CALLABLE_METHODS = exports.ARRAY_METHODS = exports.NUMBER_METHODS = exports.STRING_METHODS = exports.clone = exports.toNum = exports.toStr = exports.hasOwn = exports.isArray = exports.UNARY_OPS = exports.BINARY_OPS = void 0;
|
|
4
|
+
// The closed subset grammar, its operator and method allowlists, and the
|
|
5
|
+
// limits the parser and the evaluator share. See index.ts for the overview.
|
|
6
|
+
exports.BINARY_OPS = [
|
|
7
|
+
'===',
|
|
8
|
+
'!==',
|
|
9
|
+
'==',
|
|
10
|
+
'!=',
|
|
11
|
+
'<',
|
|
12
|
+
'<=',
|
|
13
|
+
'>',
|
|
14
|
+
'>=',
|
|
15
|
+
'+',
|
|
16
|
+
'-',
|
|
17
|
+
'*',
|
|
18
|
+
'/',
|
|
19
|
+
'%',
|
|
20
|
+
];
|
|
21
|
+
exports.UNARY_OPS = ['!', '-', '+'];
|
|
22
|
+
// Roots are `$json` and `$parameter` only (the literal comparisons in
|
|
23
|
+
// parseIdentifier). More roots are CAT-4697. `$now`/`$today` are excluded on
|
|
24
|
+
// purpose: they are Luxon DateTimes whose methods would make every useful
|
|
25
|
+
// expression on them a CallExpression anyway.
|
|
26
|
+
//
|
|
27
|
+
// Note on $parameter: the proxy resolves nested `=` parameter values by
|
|
28
|
+
// re-entering resolveSimpleParameterValue - a nested non-simple value simply
|
|
29
|
+
// takes the engine path there (under lazy acquisition, creating the bridge on
|
|
30
|
+
// demand).
|
|
31
|
+
// Intrinsics are captured at import so a later patch to a prototype or a
|
|
32
|
+
// global (a polyfill, a community package) does not change what the native
|
|
33
|
+
// path runs; the isolates never see such a patch either.
|
|
34
|
+
({ isArray: exports.isArray } = Array);
|
|
35
|
+
({ hasOwn: exports.hasOwn } = Object);
|
|
36
|
+
exports.toStr = String;
|
|
37
|
+
exports.toNum = Number;
|
|
38
|
+
exports.clone = structuredClone;
|
|
39
|
+
const captureMethods = (proto, names) => {
|
|
40
|
+
const methods = new Map();
|
|
41
|
+
for (const name of names) {
|
|
42
|
+
const method = Reflect.get(proto, name);
|
|
43
|
+
if (typeof method === 'function')
|
|
44
|
+
methods.set(name, method);
|
|
45
|
+
}
|
|
46
|
+
return methods;
|
|
47
|
+
};
|
|
48
|
+
// Native prototype methods callable on a receiver of the matching type.
|
|
49
|
+
// Every name here must stay disjoint from the expression-extension method
|
|
50
|
+
// names (extendSyntax rewrites extension calls into `extend()` dispatch;
|
|
51
|
+
// natives pass through untouched) - pinned by a test in the parity corpus.
|
|
52
|
+
// The receiver's type is only known at runtime: a receiver whose type has no
|
|
53
|
+
// allowlist entry for the method makes the evaluation bail to the engine
|
|
54
|
+
// (EngineFallbackError below). Callback-taking forms (regex/function args,
|
|
55
|
+
// array callbacks) are unrepresentable: those argument nodes decline parsing.
|
|
56
|
+
// Accepting callbacks is CAT-4698.
|
|
57
|
+
exports.STRING_METHODS = captureMethods(String.prototype, [
|
|
58
|
+
'toUpperCase',
|
|
59
|
+
'toLowerCase',
|
|
60
|
+
'trim',
|
|
61
|
+
'trimStart',
|
|
62
|
+
'trimEnd',
|
|
63
|
+
'includes',
|
|
64
|
+
'startsWith',
|
|
65
|
+
'endsWith',
|
|
66
|
+
'slice',
|
|
67
|
+
'indexOf',
|
|
68
|
+
'charAt',
|
|
69
|
+
'replace',
|
|
70
|
+
'replaceAll',
|
|
71
|
+
]);
|
|
72
|
+
exports.NUMBER_METHODS = captureMethods(Number.prototype, [
|
|
73
|
+
'toFixed',
|
|
74
|
+
'toPrecision',
|
|
75
|
+
'toString',
|
|
76
|
+
]);
|
|
77
|
+
// Non-mutating methods only: the receiver is the live workflow data (the vm
|
|
78
|
+
// engine evaluates a copy inside the isolate), so an in-place mutator like
|
|
79
|
+
// sort()/reverse()/fill() would corrupt execution data as a side effect. Use
|
|
80
|
+
// the toSorted()/toReversed() immutable variants instead. Iterator-returning
|
|
81
|
+
// methods (entries/values/keys) are also excluded: a live iterator has no
|
|
82
|
+
// equivalent representation across the engine boundary.
|
|
83
|
+
exports.ARRAY_METHODS = captureMethods(Array.prototype, [
|
|
84
|
+
'includes',
|
|
85
|
+
'indexOf',
|
|
86
|
+
'lastIndexOf',
|
|
87
|
+
'join',
|
|
88
|
+
'slice',
|
|
89
|
+
'at',
|
|
90
|
+
'concat',
|
|
91
|
+
'flat',
|
|
92
|
+
'toSorted',
|
|
93
|
+
'toReversed',
|
|
94
|
+
]);
|
|
95
|
+
exports.CALLABLE_METHODS = new Set([
|
|
96
|
+
...exports.STRING_METHODS.keys(),
|
|
97
|
+
...exports.NUMBER_METHODS.keys(),
|
|
98
|
+
...exports.ARRAY_METHODS.keys(),
|
|
99
|
+
]);
|
|
100
|
+
// The engine evaluates under a timeout and a memory limit; this interpreter
|
|
101
|
+
// has neither. A string or array result above this length is handed to the
|
|
102
|
+
// engine so those limits apply (nested replaceAll('', ...) or concat chains
|
|
103
|
+
// can otherwise expand without bound on the main thread).
|
|
104
|
+
exports.MAX_RESULT_LENGTH = 1_000_000;
|
|
105
|
+
// Nesting depth of the subset grammar. Parsing and evaluation both recurse
|
|
106
|
+
// once per level, so this keeps a pathological expression off the host stack;
|
|
107
|
+
// real expressions are a handful of levels deep.
|
|
108
|
+
exports.MAX_DEPTH = 64;
|
|
109
|
+
const isObj = (value) => typeof value === 'object' && value !== null;
|
|
110
|
+
exports.isObj = isObj;
|
|
111
|
+
const isOneOf = (ops, op) => typeof op === 'string' && ops.includes(op);
|
|
112
|
+
exports.isOneOf = isOneOf;
|
|
113
|
+
//# sourceMappingURL=grammar.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"grammar.js","sourceRoot":"","sources":["../../../../src/expressions/native-evaluation/grammar.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import type { IWorkflowDataProxyData } from '../../interfaces';
|
|
2
|
+
export { CALLABLE_METHODS, MAX_RESULT_LENGTH } from './grammar';
|
|
3
|
+
/** Does the expression (leading `=` stripped) fit the native subset? */
|
|
4
|
+
export declare function isNativelyEvaluable(expression: string): boolean;
|
|
5
|
+
/**
|
|
6
|
+
* Evaluate an expression (with the leading `=` already stripped) in-process.
|
|
7
|
+
* Returns `{ handled: false }` when the expression is outside the subset or a
|
|
8
|
+
* runtime value fell outside what parsing proved; the caller must then run
|
|
9
|
+
* the regular pipeline.
|
|
10
|
+
*/
|
|
11
|
+
export declare function evaluateNatively(expression: string, data: IWorkflowDataProxyData): {
|
|
12
|
+
handled: true;
|
|
13
|
+
value: unknown;
|
|
14
|
+
} | {
|
|
15
|
+
handled: false;
|
|
16
|
+
};
|
|
17
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/expressions/native-evaluation/index.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,kBAAkB,CAAC;AAE/D,OAAO,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAC;AAyGhE,wEAAwE;AACxE,wBAAgB,mBAAmB,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAE/D;AAED;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAC/B,UAAU,EAAE,MAAM,EAClB,IAAI,EAAE,sBAAsB,GAC1B;IAAE,OAAO,EAAE,IAAI,CAAC;IAAC,KAAK,EAAE,OAAO,CAAA;CAAE,GAAG;IAAE,OAAO,EAAE,KAAK,CAAA;CAAE,CAYxD"}
|
|
@@ -0,0 +1,144 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.MAX_RESULT_LENGTH = exports.CALLABLE_METHODS = void 0;
|
|
4
|
+
exports.isNativelyEvaluable = isNativelyEvaluable;
|
|
5
|
+
exports.evaluateNatively = evaluateNatively;
|
|
6
|
+
const tournament_1 = require("@n8n/tournament");
|
|
7
|
+
const lru_cache_1 = require("@n8n/utils/lru-cache");
|
|
8
|
+
const evaluator_1 = require("./evaluator");
|
|
9
|
+
const grammar_1 = require("./grammar");
|
|
10
|
+
const parser_1 = require("./parser");
|
|
11
|
+
var grammar_2 = require("./grammar");
|
|
12
|
+
Object.defineProperty(exports, "CALLABLE_METHODS", { enumerable: true, get: function () { return grammar_2.CALLABLE_METHODS; } });
|
|
13
|
+
Object.defineProperty(exports, "MAX_RESULT_LENGTH", { enumerable: true, get: function () { return grammar_2.MAX_RESULT_LENGTH; } });
|
|
14
|
+
// null = outside the subset. Declined expressions are cached too, so an
|
|
15
|
+
// expression the engine owns costs one parse here, not one per evaluation.
|
|
16
|
+
// Entries are keyed by expression text, so the key length is capped to keep
|
|
17
|
+
// the cache's memory bounded; longer expressions are compiled per evaluation.
|
|
18
|
+
const cache = new lru_cache_1.LruCache(1024);
|
|
19
|
+
const MAX_CACHED_EXPRESSION_LENGTH = 10_000;
|
|
20
|
+
// One code chunk of the split expression, or null when it is outside the
|
|
21
|
+
// subset. A throw during the re-parse must always mean "declined", never
|
|
22
|
+
// escape.
|
|
23
|
+
function compileChunk(chunk) {
|
|
24
|
+
const body = chunk.parsed.program.body;
|
|
25
|
+
if (body.length !== 1)
|
|
26
|
+
return null;
|
|
27
|
+
const statement = body[0];
|
|
28
|
+
if (statement.type !== 'ExpressionStatement')
|
|
29
|
+
return null;
|
|
30
|
+
try {
|
|
31
|
+
return (0, parser_1.parseSimple)(statement.expression);
|
|
32
|
+
}
|
|
33
|
+
catch {
|
|
34
|
+
return null;
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
function compile(expression) {
|
|
38
|
+
let parsed;
|
|
39
|
+
try {
|
|
40
|
+
parsed = (0, tournament_1.getParsedExpression)(expression);
|
|
41
|
+
}
|
|
42
|
+
catch {
|
|
43
|
+
// Syntax errors fall through to the engine for its error reporting.
|
|
44
|
+
return null;
|
|
45
|
+
}
|
|
46
|
+
const chunks = [];
|
|
47
|
+
for (const chunk of parsed) {
|
|
48
|
+
if (chunk.type === 'text') {
|
|
49
|
+
chunks.push(chunk);
|
|
50
|
+
continue;
|
|
51
|
+
}
|
|
52
|
+
const node = compileChunk(chunk);
|
|
53
|
+
if (node === null)
|
|
54
|
+
return null;
|
|
55
|
+
chunks.push({ type: 'code', node });
|
|
56
|
+
}
|
|
57
|
+
// Mirrors the branch condition in ExpressionBuilder.getExpressionCode.
|
|
58
|
+
const isWholeValue = chunks.length === 2 && chunks[0].type === 'text' && chunks[0].text === '';
|
|
59
|
+
return { chunks, isWholeValue };
|
|
60
|
+
}
|
|
61
|
+
function getCompiled(expression) {
|
|
62
|
+
if (expression.length > MAX_CACHED_EXPRESSION_LENGTH)
|
|
63
|
+
return compile(expression);
|
|
64
|
+
let compiled = cache.get(expression);
|
|
65
|
+
if (compiled === undefined) {
|
|
66
|
+
compiled = compile(expression);
|
|
67
|
+
cache.set(expression, compiled);
|
|
68
|
+
}
|
|
69
|
+
return compiled;
|
|
70
|
+
}
|
|
71
|
+
/** Does the expression (leading `=` stripped) fit the native subset? */
|
|
72
|
+
function isNativelyEvaluable(expression) {
|
|
73
|
+
return getCompiled(expression) !== null;
|
|
74
|
+
}
|
|
75
|
+
/**
|
|
76
|
+
* Evaluate an expression (with the leading `=` already stripped) in-process.
|
|
77
|
+
* Returns `{ handled: false }` when the expression is outside the subset or a
|
|
78
|
+
* runtime value fell outside what parsing proved; the caller must then run
|
|
79
|
+
* the regular pipeline.
|
|
80
|
+
*/
|
|
81
|
+
function evaluateNatively(expression, data) {
|
|
82
|
+
const compiled = getCompiled(expression);
|
|
83
|
+
if (compiled === null)
|
|
84
|
+
return { handled: false };
|
|
85
|
+
try {
|
|
86
|
+
const value = copyResult(evalCompiled(compiled, data));
|
|
87
|
+
return { handled: true, value };
|
|
88
|
+
}
|
|
89
|
+
catch (error) {
|
|
90
|
+
if (error instanceof evaluator_1.EngineFallbackError)
|
|
91
|
+
return { handled: false };
|
|
92
|
+
throw error;
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
// The engines hand back a copy of any object they return; a whole-value read
|
|
96
|
+
// like `{{ $json.body }}` here would hand back the live execution data, which
|
|
97
|
+
// callers then mutate in place (cleanupParameterData). Match the engines.
|
|
98
|
+
// The `$parameter` root is a Proxy and cannot be cloned: the engine owns it.
|
|
99
|
+
function copyResult(value) {
|
|
100
|
+
if (!(0, grammar_1.isObj)(value))
|
|
101
|
+
return value;
|
|
102
|
+
try {
|
|
103
|
+
return (0, grammar_1.clone)(value);
|
|
104
|
+
}
|
|
105
|
+
catch {
|
|
106
|
+
throw new evaluator_1.EngineFallbackError();
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
function evalCompiled(compiled, data) {
|
|
110
|
+
if (compiled.isWholeValue) {
|
|
111
|
+
const code = compiled.chunks[1];
|
|
112
|
+
// isWholeValue guarantees chunks = [text '', code]
|
|
113
|
+
return code.type === 'code' ? (0, evaluator_1.evalChunk)(code.node, data) : '';
|
|
114
|
+
}
|
|
115
|
+
// String concatenation, mirroring tmpl semantics: falsy chunk values other
|
|
116
|
+
// than 0/false render as '', parts are joined with String() coercion.
|
|
117
|
+
const parts = [];
|
|
118
|
+
let length = 0;
|
|
119
|
+
for (const chunk of compiled.chunks) {
|
|
120
|
+
if (chunk.type === 'text') {
|
|
121
|
+
if (chunk.text !== '')
|
|
122
|
+
parts.push(chunk.text);
|
|
123
|
+
length += chunk.text.length;
|
|
124
|
+
continue;
|
|
125
|
+
}
|
|
126
|
+
const value = (0, evaluator_1.evalChunk)(chunk.node, data);
|
|
127
|
+
// An object here would coerce through its toString on the host.
|
|
128
|
+
if ((0, grammar_1.isObj)(value)) {
|
|
129
|
+
throw new evaluator_1.EngineFallbackError();
|
|
130
|
+
}
|
|
131
|
+
const part = value || value === 0 || value === false ? value : '';
|
|
132
|
+
parts.push(part);
|
|
133
|
+
length += typeof part === 'string' ? part.length : 1;
|
|
134
|
+
// Bound before the join allocates the combined string.
|
|
135
|
+
if (length > grammar_1.MAX_RESULT_LENGTH)
|
|
136
|
+
throw new evaluator_1.EngineFallbackError();
|
|
137
|
+
}
|
|
138
|
+
// Single-chunk expressions (plain text, or a lone blank `{{}}`) return the
|
|
139
|
+
// part as-is; everything else joins to a string.
|
|
140
|
+
if (compiled.chunks.length < 2)
|
|
141
|
+
return parts[0] ?? '';
|
|
142
|
+
return (0, evaluator_1.bounded)(parts.join(''));
|
|
143
|
+
}
|
|
144
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/expressions/native-evaluation/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import type { ExpressionKind, SpreadElementKind } from 'ast-types/lib/gen/kinds';
|
|
2
|
+
import { type SimpleNode } from './grammar';
|
|
3
|
+
type AstNode = ExpressionKind | SpreadElementKind;
|
|
4
|
+
export declare function parseSimple(node: AstNode, depth?: number): SimpleNode | null;
|
|
5
|
+
export {};
|
|
6
|
+
//# sourceMappingURL=parser.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parser.d.ts","sourceRoot":"","sources":["../../../../src/expressions/native-evaluation/parser.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,cAAc,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAEjF,OAAO,EAMN,KAAK,UAAU,EACf,MAAM,WAAW,CAAC;AAcnB,KAAK,OAAO,GAAG,cAAc,GAAG,iBAAiB,CAAC;AA0JlD,wBAAgB,WAAW,CAAC,IAAI,EAAE,OAAO,EAAE,KAAK,SAAI,GAAG,UAAU,GAAG,IAAI,CA4BvE"}
|
|
@@ -0,0 +1,159 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.parseSimple = parseSimple;
|
|
4
|
+
const grammar_1 = require("./grammar");
|
|
5
|
+
const utils_1 = require("../../utils");
|
|
6
|
+
function parseLiteral(node) {
|
|
7
|
+
// Regex literals stay on the engine (backtracking blowup has no isolate
|
|
8
|
+
// timeout here).
|
|
9
|
+
if ('regex' in node && node.regex)
|
|
10
|
+
return null;
|
|
11
|
+
// BigInt literals carry `bigint` metadata; `value` is null where BigInt
|
|
12
|
+
// is unsupported, so decline on the metadata rather than the value.
|
|
13
|
+
if ('bigint' in node && node.bigint)
|
|
14
|
+
return null;
|
|
15
|
+
const value = node.value;
|
|
16
|
+
const isPrimitiveLiteral = value === null ||
|
|
17
|
+
typeof value === 'string' ||
|
|
18
|
+
typeof value === 'number' ||
|
|
19
|
+
typeof value === 'boolean';
|
|
20
|
+
if (!isPrimitiveLiteral)
|
|
21
|
+
return null;
|
|
22
|
+
return { kind: 'literal', value };
|
|
23
|
+
}
|
|
24
|
+
function parseIdentifier(node) {
|
|
25
|
+
if (node.name === '$json' || node.name === '$parameter') {
|
|
26
|
+
return { kind: 'root', name: node.name };
|
|
27
|
+
}
|
|
28
|
+
if (node.name === 'undefined') {
|
|
29
|
+
return { kind: 'undefined' };
|
|
30
|
+
}
|
|
31
|
+
return null;
|
|
32
|
+
}
|
|
33
|
+
// Only static keys are representable. Dynamic keys ($json[$json.key]) need
|
|
34
|
+
// the sandbox's PrototypeSanitizer, so they stay on the engine. String keys
|
|
35
|
+
// are vetted at parse time (isSafeObjectProperty), which keeps prototype
|
|
36
|
+
// names unrepresentable. An own-property-only lookup would make that vetting
|
|
37
|
+
// unnecessary, but $json/$parameter are get-trap proxies for which
|
|
38
|
+
// Object.hasOwn misreports every key, so the parse-time vet is the boundary.
|
|
39
|
+
function parseMember(node, parse) {
|
|
40
|
+
const object = parse(node.object);
|
|
41
|
+
if (object === null)
|
|
42
|
+
return null;
|
|
43
|
+
const key = node.computed === true ? parseComputedKey(node.property) : parseStaticKey(node.property);
|
|
44
|
+
if (key === null)
|
|
45
|
+
return null;
|
|
46
|
+
return { kind: 'member', object, key, optional: node.optional === true };
|
|
47
|
+
}
|
|
48
|
+
// `a[0]` or `a['b']`: the key is a literal.
|
|
49
|
+
function parseComputedKey(property) {
|
|
50
|
+
if (property.type !== 'Literal')
|
|
51
|
+
return null;
|
|
52
|
+
const value = property.value;
|
|
53
|
+
if (typeof value === 'number') {
|
|
54
|
+
return value;
|
|
55
|
+
}
|
|
56
|
+
if (typeof value === 'string' && (0, utils_1.isSafeObjectProperty)(value)) {
|
|
57
|
+
return value;
|
|
58
|
+
}
|
|
59
|
+
return null;
|
|
60
|
+
}
|
|
61
|
+
// `a.b`: the key is an identifier.
|
|
62
|
+
function parseStaticKey(property) {
|
|
63
|
+
if (property.type !== 'Identifier' || !(0, utils_1.isSafeObjectProperty)(property.name))
|
|
64
|
+
return null;
|
|
65
|
+
return property.name;
|
|
66
|
+
}
|
|
67
|
+
function parseCall(node, parse) {
|
|
68
|
+
const callee = node.callee;
|
|
69
|
+
if (callee.type !== 'MemberExpression' || callee.computed === true)
|
|
70
|
+
return null;
|
|
71
|
+
const property = callee.property;
|
|
72
|
+
if (property.type !== 'Identifier' || !grammar_1.CALLABLE_METHODS.has(property.name))
|
|
73
|
+
return null;
|
|
74
|
+
const receiver = parse(callee.object);
|
|
75
|
+
if (receiver === null)
|
|
76
|
+
return null;
|
|
77
|
+
const args = [];
|
|
78
|
+
for (const argument of node.arguments) {
|
|
79
|
+
const parsed = parse(argument);
|
|
80
|
+
if (parsed === null)
|
|
81
|
+
return null;
|
|
82
|
+
args.push(parsed);
|
|
83
|
+
}
|
|
84
|
+
// `a?.m()` marks the member optional, `a.m?.()` marks the call optional;
|
|
85
|
+
// both short-circuit on a missing receiver, so one flag carries both.
|
|
86
|
+
const optional = node.optional === true || callee.optional === true;
|
|
87
|
+
return { kind: 'call', receiver, method: property.name, args, optional };
|
|
88
|
+
}
|
|
89
|
+
// The wrapper esprima puts around every optional chain. It is the boundary an
|
|
90
|
+
// optional hop short-circuits to: `a?.b.c` yields undefined for a missing
|
|
91
|
+
// `a`, while `(a?.b).c` throws. Parentheses end the chain in the AST too.
|
|
92
|
+
function parseChain(node, parse) {
|
|
93
|
+
const expression = parse(node.expression);
|
|
94
|
+
if (expression === null)
|
|
95
|
+
return null;
|
|
96
|
+
return { kind: 'chain', expression };
|
|
97
|
+
}
|
|
98
|
+
function parseBranches(node, parse) {
|
|
99
|
+
const test = parse(node.test);
|
|
100
|
+
const consequent = parse(node.consequent);
|
|
101
|
+
const alternate = parse(node.alternate);
|
|
102
|
+
if (test === null || consequent === null || alternate === null)
|
|
103
|
+
return null;
|
|
104
|
+
return { kind: 'conditional', test, consequent, alternate };
|
|
105
|
+
}
|
|
106
|
+
function parseUnary(node, parse) {
|
|
107
|
+
if (node.prefix !== true || !(0, grammar_1.isOneOf)(grammar_1.UNARY_OPS, node.operator))
|
|
108
|
+
return null;
|
|
109
|
+
const argument = parse(node.argument);
|
|
110
|
+
if (argument === null)
|
|
111
|
+
return null;
|
|
112
|
+
return { kind: 'unary', op: node.operator, argument };
|
|
113
|
+
}
|
|
114
|
+
function parseBinary(node, parse) {
|
|
115
|
+
if (!(0, grammar_1.isOneOf)(grammar_1.BINARY_OPS, node.operator))
|
|
116
|
+
return null;
|
|
117
|
+
const left = parse(node.left);
|
|
118
|
+
const right = parse(node.right);
|
|
119
|
+
if (left === null || right === null)
|
|
120
|
+
return null;
|
|
121
|
+
return { kind: 'binary', op: node.operator, left, right };
|
|
122
|
+
}
|
|
123
|
+
function parseLogical(node, parse) {
|
|
124
|
+
const left = parse(node.left);
|
|
125
|
+
const right = parse(node.right);
|
|
126
|
+
if (left === null || right === null)
|
|
127
|
+
return null;
|
|
128
|
+
return { kind: 'logical', op: node.operator, left, right };
|
|
129
|
+
}
|
|
130
|
+
function parseSimple(node, depth = 0) {
|
|
131
|
+
if (depth > grammar_1.MAX_DEPTH)
|
|
132
|
+
return null;
|
|
133
|
+
const parse = (child) => parseSimple(child, depth + 1);
|
|
134
|
+
switch (node.type) {
|
|
135
|
+
case 'Literal':
|
|
136
|
+
return parseLiteral(node);
|
|
137
|
+
case 'Identifier':
|
|
138
|
+
return parseIdentifier(node);
|
|
139
|
+
case 'MemberExpression':
|
|
140
|
+
return parseMember(node, parse);
|
|
141
|
+
case 'ChainExpression':
|
|
142
|
+
return parseChain(node, parse);
|
|
143
|
+
case 'UnaryExpression':
|
|
144
|
+
return parseUnary(node, parse);
|
|
145
|
+
case 'BinaryExpression':
|
|
146
|
+
return parseBinary(node, parse);
|
|
147
|
+
case 'LogicalExpression':
|
|
148
|
+
return parseLogical(node, parse);
|
|
149
|
+
case 'ConditionalExpression':
|
|
150
|
+
return parseBranches(node, parse);
|
|
151
|
+
case 'CallExpression':
|
|
152
|
+
return parseCall(node, parse);
|
|
153
|
+
default:
|
|
154
|
+
// Everything else (functions, templates, object/array literals,
|
|
155
|
+
// regex, dynamic keys, spread, ...) is outside the subset.
|
|
156
|
+
return null;
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
//# sourceMappingURL=parser.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parser.js","sourceRoot":"","sources":["../../../../src/expressions/native-evaluation/parser.ts"],"names":[],"mappings":";;;AAGA,uCAOmB;AACnB,uCAAmD;AAenD,SAAS,YAAY,CAAC,IAAwB;IAC7C,wEAAwE;IACxE,iBAAiB;IACjB,IAAI,OAAO,IAAI,IAAI,IAAI,IAAI,CAAC,KAAK;QAAE,OAAO,IAAI,CAAC;IAC/C,wEAAwE;IACxE,oEAAoE;IACpE,IAAI,QAAQ,IAAI,IAAI,IAAI,IAAI,CAAC,MAAM;QAAE,OAAO,IAAI,CAAC;IAEjD,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;IACzB,MAAM,kBAAkB,GACvB,KAAK,KAAK,IAAI;QACd,OAAO,KAAK,KAAK,QAAQ;QACzB,OAAO,KAAK,KAAK,QAAQ;QACzB,OAAO,KAAK,KAAK,SAAS,CAAC;IAE5B,IAAI,CAAC,kBAAkB;QAAE,OAAO,IAAI,CAAC;IAErC,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC;AACnC,CAAC;AAED,SAAS,eAAe,CAAC,IAA2B;IACnD,IAAI,IAAI,CAAC,IAAI,KAAK,OAAO,IAAI,IAAI,CAAC,IAAI,KAAK,YAAY,EAAE,CAAC;QACzD,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC;IAC1C,CAAC;IAED,IAAI,IAAI,CAAC,IAAI,KAAK,WAAW,EAAE,CAAC;QAC/B,OAAO,EAAE,IAAI,EAAE,WAAW,EAAE,CAAC;IAC9B,CAAC;IAED,OAAO,IAAI,CAAC;AACb,CAAC;AAED,2EAA2E;AAC3E,4EAA4E;AAC5E,yEAAyE;AACzE,6EAA6E;AAC7E,mEAAmE;AACnE,6EAA6E;AAC7E,SAAS,WAAW,CAAC,IAAiC,EAAE,KAAiB;IACxE,MAAM,MAAM,GAAG,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IAClC,IAAI,MAAM,KAAK,IAAI;QAAE,OAAO,IAAI,CAAC;IAEjC,MAAM,GAAG,GACR,IAAI,CAAC,QAAQ,KAAK,IAAI,CAAC,CAAC,CAAC,gBAAgB,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,cAAc,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IAC1F,IAAI,GAAG,KAAK,IAAI;QAAE,OAAO,IAAI,CAAC;IAE9B,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,GAAG,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,KAAK,IAAI,EAAE,CAAC;AAC1E,CAAC;AAED,4CAA4C;AAC5C,SAAS,gBAAgB,CACxB,QAAiD;IAEjD,IAAI,QAAQ,CAAC,IAAI,KAAK,SAAS;QAAE,OAAO,IAAI,CAAC;IAE7C,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC;IAE7B,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC/B,OAAO,KAAK,CAAC;IACd,CAAC;IAED,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,IAAA,4BAAoB,EAAC,KAAK,CAAC,EAAE,CAAC;QAC9D,OAAO,KAAK,CAAC;IACd,CAAC;IAED,OAAO,IAAI,CAAC;AACb,CAAC;AAED,mCAAmC;AACnC,SAAS,cAAc,CAAC,QAAiD;IACxE,IAAI,QAAQ,CAAC,IAAI,KAAK,YAAY,IAAI,CAAC,IAAA,4BAAoB,EAAC,QAAQ,CAAC,IAAI,CAAC;QAAE,OAAO,IAAI,CAAC;IAExF,OAAO,QAAQ,CAAC,IAAI,CAAC;AACtB,CAAC;AAED,SAAS,SAAS,CAAC,IAA+B,EAAE,KAAiB;IACpE,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;IAC3B,IAAI,MAAM,CAAC,IAAI,KAAK,kBAAkB,IAAI,MAAM,CAAC,QAAQ,KAAK,IAAI;QAAE,OAAO,IAAI,CAAC;IAEhF,MAAM,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC;IACjC,IAAI,QAAQ,CAAC,IAAI,KAAK,YAAY,IAAI,CAAC,0BAAgB,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC;QAAE,OAAO,IAAI,CAAC;IAExF,MAAM,QAAQ,GAAG,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IACtC,IAAI,QAAQ,KAAK,IAAI;QAAE,OAAO,IAAI,CAAC;IAEnC,MAAM,IAAI,GAAiB,EAAE,CAAC;IAC9B,KAAK,MAAM,QAAQ,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;QACvC,MAAM,MAAM,GAAG,KAAK,CAAC,QAAQ,CAAC,CAAC;QAC/B,IAAI,MAAM,KAAK,IAAI;YAAE,OAAO,IAAI,CAAC;QAEjC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IACnB,CAAC;IAED,yEAAyE;IACzE,sEAAsE;IACtE,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,KAAK,IAAI,IAAI,MAAM,CAAC,QAAQ,KAAK,IAAI,CAAC;IAEpE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,CAAC,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC;AAC1E,CAAC;AAED,8EAA8E;AAC9E,0EAA0E;AAC1E,0EAA0E;AAC1E,SAAS,UAAU,CAAC,IAAgC,EAAE,KAAiB;IACtE,MAAM,UAAU,GAAG,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IAC1C,IAAI,UAAU,KAAK,IAAI;QAAE,OAAO,IAAI,CAAC;IAErC,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,UAAU,EAAE,CAAC;AACtC,CAAC;AAED,SAAS,aAAa,CACrB,IAAsC,EACtC,KAAiB;IAEjB,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC9B,MAAM,UAAU,GAAG,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IAC1C,MAAM,SAAS,GAAG,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IAExC,IAAI,IAAI,KAAK,IAAI,IAAI,UAAU,KAAK,IAAI,IAAI,SAAS,KAAK,IAAI;QAAE,OAAO,IAAI,CAAC;IAE5E,OAAO,EAAE,IAAI,EAAE,aAAa,EAAE,IAAI,EAAE,UAAU,EAAE,SAAS,EAAE,CAAC;AAC7D,CAAC;AAED,SAAS,UAAU,CAAC,IAAgC,EAAE,KAAiB;IACtE,IAAI,IAAI,CAAC,MAAM,KAAK,IAAI,IAAI,CAAC,IAAA,iBAAO,EAAC,mBAAS,EAAE,IAAI,CAAC,QAAQ,CAAC;QAAE,OAAO,IAAI,CAAC;IAE5E,MAAM,QAAQ,GAAG,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IACtC,IAAI,QAAQ,KAAK,IAAI;QAAE,OAAO,IAAI,CAAC;IAEnC,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,EAAE,IAAI,CAAC,QAAQ,EAAE,QAAQ,EAAE,CAAC;AACvD,CAAC;AAED,SAAS,WAAW,CAAC,IAAiC,EAAE,KAAiB;IACxE,IAAI,CAAC,IAAA,iBAAO,EAAC,oBAAU,EAAE,IAAI,CAAC,QAAQ,CAAC;QAAE,OAAO,IAAI,CAAC;IAErD,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC9B,MAAM,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAEhC,IAAI,IAAI,KAAK,IAAI,IAAI,KAAK,KAAK,IAAI;QAAE,OAAO,IAAI,CAAC;IAEjD,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,EAAE,IAAI,CAAC,QAAQ,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC;AAC3D,CAAC;AAED,SAAS,YAAY,CAAC,IAAkC,EAAE,KAAiB;IAC1E,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC9B,MAAM,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAEhC,IAAI,IAAI,KAAK,IAAI,IAAI,KAAK,KAAK,IAAI;QAAE,OAAO,IAAI,CAAC;IAEjD,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,EAAE,EAAE,IAAI,CAAC,QAAQ,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC;AAC5D,CAAC;AAED,qBAA4B,IAAa,EAAE,KAAK,GAAG,CAAC;IACnD,IAAI,KAAK,GAAG,mBAAS;QAAE,OAAO,IAAI,CAAC;IACnC,MAAM,KAAK,GAAe,CAAC,KAAK,EAAE,EAAE,CAAC,WAAW,CAAC,KAAK,EAAE,KAAK,GAAG,CAAC,CAAC,CAAC;IAEnE,QAAQ,IAAI,CAAC,IAAI,EAAE,CAAC;QACnB,KAAK,SAAS;YACb,OAAO,YAAY,CAAC,IAAI,CAAC,CAAC;QAC3B,KAAK,YAAY;YAChB,OAAO,eAAe,CAAC,IAAI,CAAC,CAAC;QAC9B,KAAK,kBAAkB;YACtB,OAAO,WAAW,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;QACjC,KAAK,iBAAiB;YACrB,OAAO,UAAU,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;QAChC,KAAK,iBAAiB;YACrB,OAAO,UAAU,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;QAChC,KAAK,kBAAkB;YACtB,OAAO,WAAW,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;QACjC,KAAK,mBAAmB;YACvB,OAAO,YAAY,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;QAClC,KAAK,uBAAuB;YAC3B,OAAO,aAAa,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;QACnC,KAAK,gBAAgB;YACpB,OAAO,SAAS,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;QAC/B;YACC,gEAAgE;YAChE,2DAA2D;YAC3D,OAAO,IAAI,CAAC;IACd,CAAC;AACF,CAAC"}
|
|
@@ -379,7 +379,7 @@ minus.doc = {
|
|
|
379
379
|
args: [
|
|
380
380
|
{
|
|
381
381
|
name: 'n',
|
|
382
|
-
description: 'The number of units to subtract. Or use a Luxon <a target="_blank" href
|
|
382
|
+
description: 'The number of units to subtract. Or use a Luxon <a target="_blank" href="https://moment.github.io/luxon/api-docs/index.html#duration">Duration</a> object to subtract multiple units at once.',
|
|
383
383
|
type: 'number | object',
|
|
384
384
|
},
|
|
385
385
|
{
|
|
@@ -410,7 +410,7 @@ plus.doc = {
|
|
|
410
410
|
args: [
|
|
411
411
|
{
|
|
412
412
|
name: 'n',
|
|
413
|
-
description: 'The number of units to add. Or use a Luxon <a target="_blank" href
|
|
413
|
+
description: 'The number of units to add. Or use a Luxon <a target="_blank" href="https://moment.github.io/luxon/api-docs/index.html#duration">Duration</a> object to add multiple units at once.',
|
|
414
414
|
type: 'number | object',
|
|
415
415
|
},
|
|
416
416
|
{
|
|
@@ -112,7 +112,7 @@ isOdd.doc = {
|
|
|
112
112
|
};
|
|
113
113
|
format.doc = {
|
|
114
114
|
name: 'format',
|
|
115
|
-
description: 'Returns a formatted string representing the number. Useful for formatting for a specific language or currency. The same as <a target="_blank" href
|
|
115
|
+
description: 'Returns a formatted string representing the number. Useful for formatting for a specific language or currency. The same as <a target="_blank" href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/NumberFormat/NumberFormat"><code>Intl.NumberFormat()</code></a>.',
|
|
116
116
|
examples: [
|
|
117
117
|
{ example: "(123456.789).format('de-DE')", evaluated: '123.456,789' },
|
|
118
118
|
{
|
|
@@ -125,7 +125,7 @@ format.doc = {
|
|
|
125
125
|
{
|
|
126
126
|
name: 'locale',
|
|
127
127
|
optional: true,
|
|
128
|
-
description: 'A <a target="_blank" href
|
|
128
|
+
description: 'A <a target="_blank" href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl#locales_argument">locale tag</a> for formatting the number, e.g. <code>fr-FR</code>, <code>en-GB</code>, <code>pt-BR</code>',
|
|
129
129
|
default: '"en-US"',
|
|
130
130
|
type: 'string',
|
|
131
131
|
},
|
|
@@ -406,7 +406,7 @@ toDate.doc = {
|
|
|
406
406
|
};
|
|
407
407
|
toDateTime.doc = {
|
|
408
408
|
name: 'toDateTime',
|
|
409
|
-
description: 'Converts the string to a <a target="_blank" href="https://moment.github.io/luxon/api-docs/">Luxon</a> DateTime. Useful for further transformation. Supported formats for the string are ISO 8601, HTTP, RFC2822, SQL and Unix timestamp in milliseconds. To parse other formats, use <a target="_blank" href
|
|
409
|
+
description: 'Converts the string to a <a target="_blank" href="https://moment.github.io/luxon/api-docs/">Luxon</a> DateTime. Useful for further transformation. Supported formats for the string are ISO 8601, HTTP, RFC2822, SQL and Unix timestamp in milliseconds. To parse other formats, use <a target="_blank" href="https://moment.github.io/luxon/api-docs/index.html#datetimefromformat"> <code>DateTime.fromFormat()</code></a>.',
|
|
410
410
|
section: 'cast',
|
|
411
411
|
returnType: 'DateTime',
|
|
412
412
|
docURL: 'https://docs.n8n.io/build/work-with-data/transform-data/expression-reference/string#stringtodatetime',
|
package/dist/cjs/index.d.ts
CHANGED
|
@@ -15,7 +15,8 @@ export * from './dynamic-credentials-helpers';
|
|
|
15
15
|
export * from './safe-regex';
|
|
16
16
|
export * from './global-state';
|
|
17
17
|
export * from './interfaces';
|
|
18
|
-
export { fromFunction, fromParameter, nodeParametersAreStatic, resolveWebhookDescriptionField, webhookDescriptionFields, webhookDescriptionIsNativelyResolvable, type NativeResolution, type WebhookDescriptionField, } from './webhook-description-fields';
|
|
18
|
+
export { fromExpression, fromFunction, fromParameter, nodeParametersAreStatic, resolveWebhookDescriptionField, webhookDescriptionFields, webhookDescriptionIsNativelyResolvable, type NativeResolution, type WebhookDescriptionField, } from './webhook-description-fields';
|
|
19
|
+
export { isNativelyEvaluable } from './expressions/native-evaluation';
|
|
19
20
|
export * from './sub-workflow-output';
|
|
20
21
|
export * from './run-execution-data-factory';
|
|
21
22
|
export * from './message-event-bus';
|
package/dist/cjs/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/cjs/index.js
CHANGED
|
@@ -36,7 +36,8 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
|
36
36
|
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
37
37
|
};
|
|
38
38
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
39
|
-
exports.
|
|
39
|
+
exports.NativeMethods = exports.ExpressionParser = exports.ExpressionExtensions = exports.buildAdjacencyList = exports.parseExtractableSubgraphSelection = exports.isBinaryValue = exports.isNodeConnectionType = exports.isFilterValue = exports.isResourceLocatorValue = exports.isResourceMapperValue = exports.isINodePropertyOptionsList = exports.isINodePropertyCollectionList = exports.isINodePropertiesList = exports.isINodePropertyCollection = exports.isINodePropertyOptions = exports.isINodeProperties = exports.generateSecureToken = exports.sanitizeXmlName = exports.sanitizeFilename = exports.dedupe = exports.isCommunityPackageName = exports.setSafeObjectProperty = exports.isUsableObjectKey = exports.isSafeObjectProperty = exports.randomString = exports.randomInt = exports.updateDisplayOptions = exports.removeCircularRefs = exports.assert = exports.fileTypeFromMimeType = exports.sleep = exports.replaceCircularReferences = exports.jsonStringify = exports.base64DecodeUTF8 = exports.jsonParse = exports.deepCopy = exports.isObjectEmpty = exports.TelemetryHelpers = exports.ObservableObject = exports.NodeHelpers = exports.LoggerProxy = exports.WorkflowExpression = exports.isNativelyEvaluable = exports.webhookDescriptionIsNativelyResolvable = exports.webhookDescriptionFields = exports.resolveWebhookDescriptionField = exports.nodeParametersAreStatic = exports.fromParameter = exports.fromFunction = exports.fromExpression = void 0;
|
|
40
|
+
exports.JmespathQueryError = exports.evaluateJmespathQuery = void 0;
|
|
40
41
|
const LoggerProxy = __importStar(require("./logger-proxy"));
|
|
41
42
|
exports.LoggerProxy = LoggerProxy;
|
|
42
43
|
const NodeHelpers = __importStar(require("./node-helpers"));
|
|
@@ -59,12 +60,15 @@ __exportStar(require("./safe-regex"), exports);
|
|
|
59
60
|
__exportStar(require("./global-state"), exports);
|
|
60
61
|
__exportStar(require("./interfaces"), exports);
|
|
61
62
|
var webhook_description_fields_1 = require("./webhook-description-fields");
|
|
63
|
+
Object.defineProperty(exports, "fromExpression", { enumerable: true, get: function () { return webhook_description_fields_1.fromExpression; } });
|
|
62
64
|
Object.defineProperty(exports, "fromFunction", { enumerable: true, get: function () { return webhook_description_fields_1.fromFunction; } });
|
|
63
65
|
Object.defineProperty(exports, "fromParameter", { enumerable: true, get: function () { return webhook_description_fields_1.fromParameter; } });
|
|
64
66
|
Object.defineProperty(exports, "nodeParametersAreStatic", { enumerable: true, get: function () { return webhook_description_fields_1.nodeParametersAreStatic; } });
|
|
65
67
|
Object.defineProperty(exports, "resolveWebhookDescriptionField", { enumerable: true, get: function () { return webhook_description_fields_1.resolveWebhookDescriptionField; } });
|
|
66
68
|
Object.defineProperty(exports, "webhookDescriptionFields", { enumerable: true, get: function () { return webhook_description_fields_1.webhookDescriptionFields; } });
|
|
67
69
|
Object.defineProperty(exports, "webhookDescriptionIsNativelyResolvable", { enumerable: true, get: function () { return webhook_description_fields_1.webhookDescriptionIsNativelyResolvable; } });
|
|
70
|
+
var native_evaluation_1 = require("./expressions/native-evaluation");
|
|
71
|
+
Object.defineProperty(exports, "isNativelyEvaluable", { enumerable: true, get: function () { return native_evaluation_1.isNativelyEvaluable; } });
|
|
68
72
|
__exportStar(require("./sub-workflow-output"), exports);
|
|
69
73
|
__exportStar(require("./run-execution-data-factory"), exports);
|
|
70
74
|
__exportStar(require("./message-event-bus"), exports);
|
package/dist/cjs/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"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"}
|