@n8n/expression-runtime 0.2.0 → 0.4.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/ARCHITECTURE.md +5 -6
- package/LICENSE_EE.md +27 -0
- package/README.md +11 -11
- package/dist/bundle/runtime.esm.js +45 -0
- package/dist/bundle/runtime.esm.js.map +7 -0
- package/dist/bundle/runtime.iife.js +45 -0
- package/dist/bundle/runtime.iife.js.map +7 -0
- package/dist/cjs/bridge/isolated-vm-bridge.d.ts +132 -0
- package/dist/cjs/bridge/isolated-vm-bridge.d.ts.map +1 -0
- package/dist/cjs/bridge/isolated-vm-bridge.js +500 -0
- package/dist/cjs/bridge/isolated-vm-bridge.js.map +1 -0
- package/dist/cjs/build.tsbuildinfo +1 -0
- package/dist/cjs/evaluator/expression-evaluator.d.ts +23 -0
- package/dist/cjs/evaluator/expression-evaluator.d.ts.map +1 -0
- package/dist/cjs/evaluator/expression-evaluator.js +87 -0
- package/dist/cjs/evaluator/expression-evaluator.js.map +1 -0
- package/dist/cjs/extensions/array-extensions.d.ts +34 -0
- package/dist/cjs/extensions/array-extensions.d.ts.map +1 -0
- package/dist/cjs/extensions/array-extensions.js +632 -0
- package/dist/cjs/extensions/array-extensions.js.map +1 -0
- package/dist/cjs/extensions/boolean-extensions.d.ts +6 -0
- package/dist/cjs/extensions/boolean-extensions.d.ts.map +1 -0
- package/dist/cjs/extensions/boolean-extensions.js +49 -0
- package/dist/cjs/extensions/boolean-extensions.js.map +1 -0
- package/dist/cjs/extensions/date-extensions.d.ts +3 -0
- package/dist/cjs/extensions/date-extensions.d.ts.map +1 -0
- package/dist/cjs/extensions/date-extensions.js +528 -0
- package/dist/cjs/extensions/date-extensions.js.map +1 -0
- package/dist/cjs/extensions/expression-extension-error.d.ts +7 -0
- package/dist/cjs/extensions/expression-extension-error.d.ts.map +1 -0
- package/dist/cjs/extensions/expression-extension-error.js +25 -0
- package/dist/cjs/extensions/expression-extension-error.js.map +1 -0
- package/dist/cjs/extensions/extend.d.ts +12 -0
- package/dist/cjs/extensions/extend.d.ts.map +1 -0
- package/dist/cjs/extensions/extend.js +149 -0
- package/dist/cjs/extensions/extend.js.map +1 -0
- package/dist/cjs/extensions/extensions.d.ts +43 -0
- package/dist/cjs/extensions/extensions.d.ts.map +1 -0
- package/dist/cjs/extensions/extensions.js +13 -0
- package/dist/cjs/extensions/extensions.js.map +1 -0
- package/dist/cjs/extensions/number-extensions.d.ts +27 -0
- package/dist/cjs/extensions/number-extensions.d.ts.map +1 -0
- package/dist/cjs/extensions/number-extensions.js +235 -0
- package/dist/cjs/extensions/number-extensions.js.map +1 -0
- package/dist/cjs/extensions/object-extensions.d.ts +46 -0
- package/dist/cjs/extensions/object-extensions.d.ts.map +1 -0
- package/dist/cjs/extensions/object-extensions.js +297 -0
- package/dist/cjs/extensions/object-extensions.js.map +1 -0
- package/dist/cjs/extensions/string-extensions.d.ts +38 -0
- package/dist/cjs/extensions/string-extensions.d.ts.map +1 -0
- package/dist/cjs/extensions/string-extensions.js +753 -0
- package/dist/cjs/extensions/string-extensions.js.map +1 -0
- package/dist/cjs/extensions/utils.d.ts +4 -0
- package/dist/cjs/extensions/utils.d.ts.map +1 -0
- package/dist/cjs/extensions/utils.js +42 -0
- package/dist/cjs/extensions/utils.js.map +1 -0
- package/dist/cjs/index.d.ts +7 -0
- package/dist/cjs/index.d.ts.map +1 -0
- package/dist/cjs/index.js +34 -0
- package/dist/cjs/index.js.map +1 -0
- package/dist/cjs/runtime/index.d.ts +17 -0
- package/dist/cjs/runtime/index.d.ts.map +1 -0
- package/dist/cjs/runtime/index.js +35 -0
- package/dist/cjs/runtime/index.js.map +1 -0
- package/dist/cjs/runtime/lazy-proxy.d.ts +22 -0
- package/dist/cjs/runtime/lazy-proxy.d.ts.map +1 -0
- package/dist/cjs/runtime/lazy-proxy.js +179 -0
- package/dist/cjs/runtime/lazy-proxy.js.map +1 -0
- package/dist/cjs/runtime/reset.d.ts +16 -0
- package/dist/cjs/runtime/reset.d.ts.map +1 -0
- package/dist/cjs/runtime/reset.js +137 -0
- package/dist/cjs/runtime/reset.js.map +1 -0
- package/dist/cjs/runtime/safe-globals.d.ts +21 -0
- package/dist/cjs/runtime/safe-globals.d.ts.map +1 -0
- package/dist/cjs/runtime/safe-globals.js +125 -0
- package/dist/cjs/runtime/safe-globals.js.map +1 -0
- package/dist/{types → cjs/types}/bridge.d.ts +2 -0
- package/dist/cjs/types/bridge.d.ts.map +1 -0
- package/dist/cjs/types/bridge.js +26 -0
- package/dist/cjs/types/bridge.js.map +1 -0
- package/dist/{types → cjs/types}/evaluator.d.ts +1 -4
- package/dist/cjs/types/evaluator.d.ts.map +1 -0
- package/dist/cjs/types/evaluator.js +47 -0
- package/dist/cjs/types/evaluator.js.map +1 -0
- package/dist/{types → cjs/types}/index.d.ts +2 -2
- package/dist/cjs/types/index.d.ts.map +1 -0
- package/dist/cjs/types/index.js +30 -0
- package/dist/cjs/types/index.js.map +1 -0
- package/dist/cjs/types/runtime.d.ts +20 -0
- package/dist/cjs/types/runtime.d.ts.map +1 -0
- package/dist/cjs/types/runtime.js +39 -0
- package/dist/cjs/types/runtime.js.map +1 -0
- package/dist/esm/bridge/isolated-vm-bridge.d.ts +132 -0
- package/dist/esm/bridge/isolated-vm-bridge.d.ts.map +1 -0
- package/dist/esm/bridge/isolated-vm-bridge.js +450 -0
- package/dist/esm/bridge/isolated-vm-bridge.js.map +1 -0
- package/dist/esm/build.tsbuildinfo +1 -0
- package/dist/esm/evaluator/expression-evaluator.d.ts +23 -0
- package/dist/esm/evaluator/expression-evaluator.d.ts.map +1 -0
- package/dist/esm/evaluator/expression-evaluator.js +73 -0
- package/dist/esm/evaluator/expression-evaluator.js.map +1 -0
- package/dist/esm/extensions/array-extensions.d.ts +34 -0
- package/dist/esm/extensions/array-extensions.d.ts.map +1 -0
- package/dist/esm/extensions/array-extensions.js +610 -0
- package/dist/esm/extensions/array-extensions.js.map +1 -0
- package/dist/esm/extensions/boolean-extensions.d.ts +6 -0
- package/dist/esm/extensions/boolean-extensions.d.ts.map +1 -0
- package/dist/esm/extensions/boolean-extensions.js +33 -0
- package/dist/esm/extensions/boolean-extensions.js.map +1 -0
- package/dist/esm/extensions/date-extensions.d.ts +3 -0
- package/dist/esm/extensions/date-extensions.d.ts.map +1 -0
- package/dist/esm/extensions/date-extensions.js +515 -0
- package/dist/esm/extensions/date-extensions.js.map +1 -0
- package/dist/esm/extensions/expression-extension-error.d.ts +7 -0
- package/dist/esm/extensions/expression-extension-error.d.ts.map +1 -0
- package/dist/esm/extensions/expression-extension-error.js +11 -0
- package/dist/esm/extensions/expression-extension-error.js.map +1 -0
- package/dist/esm/extensions/extend.d.ts +12 -0
- package/dist/esm/extensions/extend.d.ts.map +1 -0
- package/dist/esm/extensions/extend.js +134 -0
- package/dist/esm/extensions/extend.js.map +1 -0
- package/dist/esm/extensions/extensions.d.ts +43 -0
- package/dist/esm/extensions/extensions.d.ts.map +1 -0
- package/dist/esm/extensions/extensions.js +2 -0
- package/dist/esm/extensions/extensions.js.map +1 -0
- package/dist/esm/extensions/number-extensions.d.ts +27 -0
- package/dist/esm/extensions/number-extensions.d.ts.map +1 -0
- package/dist/esm/extensions/number-extensions.js +221 -0
- package/dist/esm/extensions/number-extensions.js.map +1 -0
- package/dist/esm/extensions/object-extensions.d.ts +46 -0
- package/dist/esm/extensions/object-extensions.d.ts.map +1 -0
- package/dist/esm/extensions/object-extensions.js +277 -0
- package/dist/esm/extensions/object-extensions.js.map +1 -0
- package/dist/esm/extensions/string-extensions.d.ts +38 -0
- package/dist/esm/extensions/string-extensions.d.ts.map +1 -0
- package/dist/esm/extensions/string-extensions.js +735 -0
- package/dist/esm/extensions/string-extensions.js.map +1 -0
- package/dist/esm/extensions/utils.d.ts +4 -0
- package/dist/esm/extensions/utils.d.ts.map +1 -0
- package/dist/esm/extensions/utils.js +27 -0
- package/dist/esm/extensions/utils.js.map +1 -0
- package/dist/esm/index.d.ts +7 -0
- package/dist/esm/index.d.ts.map +1 -0
- package/dist/esm/index.js +10 -0
- package/dist/esm/index.js.map +1 -0
- package/dist/esm/runtime/index.d.ts +17 -0
- package/dist/esm/runtime/index.d.ts.map +1 -0
- package/dist/esm/runtime/index.js +23 -0
- package/dist/esm/runtime/index.js.map +1 -0
- package/dist/esm/runtime/lazy-proxy.d.ts +22 -0
- package/dist/esm/runtime/lazy-proxy.d.ts.map +1 -0
- package/dist/esm/runtime/lazy-proxy.js +164 -0
- package/dist/esm/runtime/lazy-proxy.js.map +1 -0
- package/dist/esm/runtime/reset.d.ts +16 -0
- package/dist/esm/runtime/reset.d.ts.map +1 -0
- package/dist/esm/runtime/reset.js +124 -0
- package/dist/esm/runtime/reset.js.map +1 -0
- package/dist/esm/runtime/safe-globals.d.ts +21 -0
- package/dist/esm/runtime/safe-globals.d.ts.map +1 -0
- package/dist/esm/runtime/safe-globals.js +110 -0
- package/dist/esm/runtime/safe-globals.js.map +1 -0
- package/dist/esm/types/bridge.d.ts +63 -0
- package/dist/esm/types/bridge.d.ts.map +1 -0
- package/dist/{types → esm/types}/bridge.js +6 -1
- package/dist/esm/types/bridge.js.map +1 -0
- package/dist/esm/types/evaluator.d.ts +194 -0
- package/dist/esm/types/evaluator.d.ts.map +1 -0
- package/dist/esm/types/evaluator.js.map +1 -0
- package/dist/esm/types/index.d.ts +11 -0
- package/dist/esm/types/index.d.ts.map +1 -0
- package/dist/{types → esm/types}/index.js +2 -0
- package/dist/esm/types/index.js.map +1 -0
- package/dist/esm/types/runtime.d.ts +20 -0
- package/dist/esm/types/runtime.d.ts.map +1 -0
- package/dist/{types → esm/types}/runtime.js +0 -6
- package/dist/esm/types/runtime.js.map +1 -0
- package/package.json +29 -6
- package/dist/build.tsbuildinfo +0 -1
- package/dist/index.d.ts +0 -3
- package/dist/index.d.ts.map +0 -1
- package/dist/index.js +0 -2
- package/dist/index.js.map +0 -1
- package/dist/types/bridge.d.ts.map +0 -1
- package/dist/types/bridge.js.map +0 -1
- package/dist/types/evaluator.d.ts.map +0 -1
- package/dist/types/evaluator.js.map +0 -1
- package/dist/types/index.d.ts.map +0 -1
- package/dist/types/index.js.map +0 -1
- package/dist/types/runtime.d.ts +0 -122
- package/dist/types/runtime.d.ts.map +0 -1
- package/dist/types/runtime.js.map +0 -1
- /package/dist/{types → esm/types}/evaluator.js +0 -0
package/ARCHITECTURE.md
CHANGED
|
@@ -306,7 +306,7 @@ packages/@n8n/expression-runtime/
|
|
|
306
306
|
|
|
307
307
|
**Future-Proofing**: Frontend will use Web Workers. Backend uses isolated-vm. Abstract bridge allows adding new environments without changing other layers.
|
|
308
308
|
|
|
309
|
-
**Testing**:
|
|
309
|
+
**Testing**: Integration tests use `IsolatedVmBridge` directly (see `src/__tests__/integration.test.ts`).
|
|
310
310
|
|
|
311
311
|
## Known Limitations
|
|
312
312
|
|
|
@@ -361,16 +361,15 @@ The runtime has **no access** to:
|
|
|
361
361
|
- ❌ Cookies
|
|
362
362
|
|
|
363
363
|
The runtime **can only**:
|
|
364
|
-
- ✅ Call `
|
|
364
|
+
- ✅ Call back to host via `ivm.Reference` callbacks to fetch workflow data
|
|
365
365
|
- ✅ Access lodash and Luxon libraries
|
|
366
366
|
- ✅ Execute pure JavaScript code
|
|
367
367
|
|
|
368
368
|
## Testing Strategy
|
|
369
369
|
|
|
370
|
-
**
|
|
371
|
-
- Use
|
|
372
|
-
- Test lazy loading, helpers, error handling
|
|
373
|
-
- No native dependencies required
|
|
370
|
+
**Integration Tests** (vitest):
|
|
371
|
+
- Use `IsolatedVmBridge` with real `isolated-vm`
|
|
372
|
+
- Test lazy loading, helpers, error handling, security wrappers
|
|
374
373
|
|
|
375
374
|
**Bridge Tests** (vitest):
|
|
376
375
|
- Test each bridge implementation
|
package/LICENSE_EE.md
ADDED
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
# The n8n Enterprise License (the “Enterprise License”)
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2022-present n8n GmbH.
|
|
4
|
+
|
|
5
|
+
With regard to the n8n Software:
|
|
6
|
+
|
|
7
|
+
This software and associated documentation files (the "Software") may only be used in production, if
|
|
8
|
+
you (and any entity that you represent) hold a valid n8n Enterprise license corresponding to your
|
|
9
|
+
usage. Subject to the foregoing sentence, you are free to modify this Software and publish patches
|
|
10
|
+
to the Software. You agree that n8n and/or its licensors (as applicable) retain all right, title and
|
|
11
|
+
interest in and to all such modifications and/or patches, and all such modifications and/or patches
|
|
12
|
+
may only be used, copied, modified, displayed, distributed, or otherwise exploited with a valid n8n
|
|
13
|
+
Enterprise license for the corresponding usage. Notwithstanding the foregoing, you may copy and
|
|
14
|
+
modify the Software for development and testing purposes, without requiring a subscription. You
|
|
15
|
+
agree that n8n and/or its licensors (as applicable) retain all right, title and interest in and to
|
|
16
|
+
all such modifications. You are not granted any other rights beyond what is expressly stated herein.
|
|
17
|
+
Subject to the foregoing, it is forbidden to copy, merge, publish, distribute, sublicense, and/or
|
|
18
|
+
sell the Software.
|
|
19
|
+
|
|
20
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT
|
|
21
|
+
NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
|
22
|
+
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES
|
|
23
|
+
OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
|
|
24
|
+
CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|
25
|
+
|
|
26
|
+
For all third party components incorporated into the n8n Software, those components are licensed
|
|
27
|
+
under the original license provided by the owner of the applicable component.
|
package/README.md
CHANGED
|
@@ -7,14 +7,14 @@ Secure, isolated expression evaluation runtime for n8n workflows.
|
|
|
7
7
|
**In progress — landing as a series of incremental PRs.**
|
|
8
8
|
|
|
9
9
|
Implemented so far:
|
|
10
|
-
- ✅ TypeScript interfaces and architecture design
|
|
11
|
-
- ✅ Core architecture documentation
|
|
10
|
+
- ✅ TypeScript interfaces and architecture design (PR 1)
|
|
11
|
+
- ✅ Core architecture documentation (PR 1)
|
|
12
|
+
- ✅ Runtime bundle: extension functions, deep lazy proxy system (PR 2)
|
|
13
|
+
- ✅ `IsolatedVmBridge`: V8 isolate management via `isolated-vm` (PR 3)
|
|
14
|
+
- ✅ `ExpressionEvaluator`: tournament integration, expression code caching (PR 4)
|
|
15
|
+
- ✅ Integration tests (PR 4)
|
|
12
16
|
|
|
13
17
|
Coming in later PRs:
|
|
14
|
-
- 🚧 Runtime bundle: extension functions, deep lazy proxy system (PR 2)
|
|
15
|
-
- 🚧 `IsolatedVmBridge`: V8 isolate management via `isolated-vm` (PR 3)
|
|
16
|
-
- 🚧 `ExpressionEvaluator`: tournament integration, expression code caching (PR 4)
|
|
17
|
-
- 🚧 Integration tests (PR 4)
|
|
18
18
|
- 🚧 Workflow integration behind `N8N_EXPRESSION_ENGINE=vm` flag (PR 5)
|
|
19
19
|
- 🚧 Web Worker support (Phase 2+)
|
|
20
20
|
- 🚧 Performance optimizations (Phase 3)
|
|
@@ -165,7 +165,7 @@ interface RuntimeBridge {
|
|
|
165
165
|
|
|
166
166
|
### Bridge Implementations
|
|
167
167
|
|
|
168
|
-
- **IsolatedVmBridge**:
|
|
168
|
+
- **IsolatedVmBridge**: ✅ For Node.js backend (isolated-vm with V8 isolates)
|
|
169
169
|
- Memory isolation with hard 128MB limit
|
|
170
170
|
- Timeout enforcement (5s default)
|
|
171
171
|
- Deep lazy proxy system for workflow data
|
|
@@ -181,13 +181,13 @@ interface RuntimeBridge {
|
|
|
181
181
|
interface EvaluatorConfig {
|
|
182
182
|
bridge: RuntimeBridge; // required
|
|
183
183
|
observability?: ObservabilityProvider; // optional - interfaces defined, providers not yet implemented
|
|
184
|
-
hooks?: TournamentHooks; // optional - AST security hooks for tournament
|
|
184
|
+
hooks?: TournamentHooks; // optional - AST security hooks for tournament
|
|
185
185
|
}
|
|
186
186
|
|
|
187
187
|
interface BridgeConfig {
|
|
188
|
-
memoryLimit?: number; // Default: 128 MB
|
|
189
|
-
timeout?: number; // Default: 5000 ms
|
|
190
|
-
debug?: boolean; // Default: false
|
|
188
|
+
memoryLimit?: number; // Default: 128 MB
|
|
189
|
+
timeout?: number; // Default: 5000 ms
|
|
190
|
+
debug?: boolean; // Default: false
|
|
191
191
|
}
|
|
192
192
|
```
|
|
193
193
|
|