@n8n/expression-runtime 0.2.0 → 0.3.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.
Files changed (77) hide show
  1. package/ARCHITECTURE.md +5 -6
  2. package/LICENSE_EE.md +27 -0
  3. package/README.md +8 -8
  4. package/dist/bridge/isolated-vm-bridge.d.ts +132 -0
  5. package/dist/bridge/isolated-vm-bridge.d.ts.map +1 -0
  6. package/dist/bridge/isolated-vm-bridge.js +427 -0
  7. package/dist/bridge/isolated-vm-bridge.js.map +1 -0
  8. package/dist/build.tsbuildinfo +1 -1
  9. package/dist/bundle/runtime.esm.js +45 -0
  10. package/dist/bundle/runtime.esm.js.map +7 -0
  11. package/dist/bundle/runtime.iife.js +45 -0
  12. package/dist/bundle/runtime.iife.js.map +7 -0
  13. package/dist/extensions/array-extensions.d.ts +34 -0
  14. package/dist/extensions/array-extensions.d.ts.map +1 -0
  15. package/dist/extensions/array-extensions.js +610 -0
  16. package/dist/extensions/array-extensions.js.map +1 -0
  17. package/dist/extensions/boolean-extensions.d.ts +6 -0
  18. package/dist/extensions/boolean-extensions.d.ts.map +1 -0
  19. package/dist/extensions/boolean-extensions.js +33 -0
  20. package/dist/extensions/boolean-extensions.js.map +1 -0
  21. package/dist/extensions/date-extensions.d.ts +3 -0
  22. package/dist/extensions/date-extensions.d.ts.map +1 -0
  23. package/dist/extensions/date-extensions.js +515 -0
  24. package/dist/extensions/date-extensions.js.map +1 -0
  25. package/dist/extensions/expression-extension-error.d.ts +7 -0
  26. package/dist/extensions/expression-extension-error.d.ts.map +1 -0
  27. package/dist/extensions/expression-extension-error.js +11 -0
  28. package/dist/extensions/expression-extension-error.js.map +1 -0
  29. package/dist/extensions/extend.d.ts +12 -0
  30. package/dist/extensions/extend.d.ts.map +1 -0
  31. package/dist/extensions/extend.js +134 -0
  32. package/dist/extensions/extend.js.map +1 -0
  33. package/dist/extensions/extensions.d.ts +43 -0
  34. package/dist/extensions/extensions.d.ts.map +1 -0
  35. package/dist/extensions/extensions.js +2 -0
  36. package/dist/extensions/extensions.js.map +1 -0
  37. package/dist/extensions/number-extensions.d.ts +27 -0
  38. package/dist/extensions/number-extensions.d.ts.map +1 -0
  39. package/dist/extensions/number-extensions.js +221 -0
  40. package/dist/extensions/number-extensions.js.map +1 -0
  41. package/dist/extensions/object-extensions.d.ts +46 -0
  42. package/dist/extensions/object-extensions.d.ts.map +1 -0
  43. package/dist/extensions/object-extensions.js +277 -0
  44. package/dist/extensions/object-extensions.js.map +1 -0
  45. package/dist/extensions/string-extensions.d.ts +38 -0
  46. package/dist/extensions/string-extensions.d.ts.map +1 -0
  47. package/dist/extensions/string-extensions.js +735 -0
  48. package/dist/extensions/string-extensions.js.map +1 -0
  49. package/dist/extensions/utils.d.ts +4 -0
  50. package/dist/extensions/utils.d.ts.map +1 -0
  51. package/dist/extensions/utils.js +27 -0
  52. package/dist/extensions/utils.js.map +1 -0
  53. package/dist/runtime/index.d.ts +17 -0
  54. package/dist/runtime/index.d.ts.map +1 -0
  55. package/dist/runtime/index.js +23 -0
  56. package/dist/runtime/index.js.map +1 -0
  57. package/dist/runtime/lazy-proxy.d.ts +18 -0
  58. package/dist/runtime/lazy-proxy.d.ts.map +1 -0
  59. package/dist/runtime/lazy-proxy.js +150 -0
  60. package/dist/runtime/lazy-proxy.js.map +1 -0
  61. package/dist/runtime/reset.d.ts +16 -0
  62. package/dist/runtime/reset.d.ts.map +1 -0
  63. package/dist/runtime/reset.js +124 -0
  64. package/dist/runtime/reset.js.map +1 -0
  65. package/dist/runtime/safe-globals.d.ts +21 -0
  66. package/dist/runtime/safe-globals.d.ts.map +1 -0
  67. package/dist/runtime/safe-globals.js +110 -0
  68. package/dist/runtime/safe-globals.js.map +1 -0
  69. package/dist/types/index.d.ts +0 -1
  70. package/dist/types/index.d.ts.map +1 -1
  71. package/dist/types/index.js +1 -0
  72. package/dist/types/index.js.map +1 -1
  73. package/dist/types/runtime.d.ts +0 -102
  74. package/dist/types/runtime.d.ts.map +1 -1
  75. package/dist/types/runtime.js +0 -6
  76. package/dist/types/runtime.js.map +1 -1
  77. package/package.json +15 -3
@@ -3,6 +3,7 @@
3
3
  *
4
4
  * This module exports all TypeScript interfaces and types for the expression runtime.
5
5
  */
6
+ // Runtime types
6
7
  export { RuntimeError } from './runtime';
7
8
  export { ExpressionError, MemoryLimitError, TimeoutError, SecurityViolationError, SyntaxError, } from './evaluator';
8
9
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAaH,OAAO,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AAgBzC,OAAO,EACN,eAAe,EACf,gBAAgB,EAChB,YAAY,EACZ,sBAAsB,EACtB,WAAW,GACX,MAAM,aAAa,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAKH,gBAAgB;AAChB,OAAO,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AAgBzC,OAAO,EACN,eAAe,EACf,gBAAgB,EAChB,YAAY,EACZ,sBAAsB,EACtB,WAAW,GACX,MAAM,aAAa,CAAC"}
@@ -1,86 +1,3 @@
1
- /**
2
- * Runtime interface exposed to isolated context.
3
- *
4
- * This interface defines what the runtime code (running inside the isolated context)
5
- * can call. The bridge implements these functions on the host side.
6
- */
7
- export interface RuntimeHostInterface {
8
- /**
9
- * Get data from host by path (synchronous).
10
- * Used by lazy loading proxies to fetch data on-demand.
11
- *
12
- * IMPORTANT: This is SYNCHRONOUS because JavaScript Proxy traps cannot be async.
13
- * - IsolatedVmBridge: Uses ivm.Reference for true sync callbacks
14
- * - WebWorkerBridge: Not supported - must pre-fetch all data
15
- *
16
- * @param path - Property path to fetch (e.g., "user.email", "items[0].json")
17
- * @returns Value at the path, or undefined if not found
18
- */
19
- getDataSync(path: string): unknown;
20
- }
21
- /**
22
- * Lazy-loading proxy for workflow data.
23
- *
24
- * At runtime, these appear as plain objects but are actually Proxy objects
25
- * that fetch data on-demand from the host using getDataSync().
26
- */
27
- type LazyDataProxy = Record<string, unknown>;
28
- /**
29
- * Runtime globals available in isolated context.
30
- *
31
- * These are injected by the bridge when initializing the context.
32
- */
33
- export interface RuntimeGlobals {
34
- /**
35
- * Host interface for calling back to host process.
36
- */
37
- __host: RuntimeHostInterface;
38
- /**
39
- * Workflow data proxy ($json, $item, etc.).
40
- * Set by bridge before each execute() call.
41
- */
42
- /** Current item data (lazy-loaded proxy) */
43
- $json: LazyDataProxy;
44
- /** Alias for $json (lazy-loaded proxy) */
45
- $: LazyDataProxy;
46
- /** Get item by index (lazy-loaded) */
47
- $item: (index: number, runIndex?: number) => LazyDataProxy;
48
- /** Access to all items */
49
- $input: {
50
- all: () => Array<{
51
- json: LazyDataProxy;
52
- }>;
53
- first: () => {
54
- json: LazyDataProxy;
55
- } | undefined;
56
- last: () => {
57
- json: LazyDataProxy;
58
- } | undefined;
59
- item: {
60
- json: LazyDataProxy;
61
- };
62
- };
63
- /**
64
- * Standard libraries available in runtime.
65
- */
66
- _: typeof import('lodash');
67
- DateTime: typeof import('luxon').DateTime;
68
- }
69
- /**
70
- * Configuration for runtime initialization.
71
- */
72
- export interface RuntimeConfig {
73
- /**
74
- * Enable debug logging in runtime.
75
- * Default: false
76
- */
77
- debug?: boolean;
78
- /**
79
- * Custom timeout for data fetches.
80
- * Default: 1000ms
81
- */
82
- dataFetchTimeout?: number;
83
- }
84
1
  /**
85
2
  * Runtime error thrown inside isolated context.
86
3
  *
@@ -100,23 +17,4 @@ export declare class RuntimeError extends Error {
100
17
  details?: Record<string, unknown> | undefined;
101
18
  constructor(message: string, code: string, details?: Record<string, unknown> | undefined);
102
19
  }
103
- /**
104
- * Lazy proxy configuration.
105
- */
106
- export interface LazyProxyConfig {
107
- /**
108
- * Host interface for fetching data.
109
- */
110
- host: RuntimeHostInterface;
111
- /**
112
- * Property path prefix (for nested proxies).
113
- * Example: If this proxy represents $json.user, pathPrefix would be "user"
114
- */
115
- pathPrefix?: string;
116
- /**
117
- * Cache for fetched values to avoid repeated host calls.
118
- */
119
- cache?: Map<string, unknown>;
120
- }
121
- export {};
122
20
  //# sourceMappingURL=runtime.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"runtime.d.ts","sourceRoot":"","sources":["../../src/types/runtime.ts"],"names":[],"mappings":"AAOA;;;;;GAKG;AACH,MAAM,WAAW,oBAAoB;IACpC;;;;;;;;;;OAUG;IACH,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC;CACnC;AAED;;;;;GAKG;AACH,KAAK,aAAa,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AAE7C;;;;GAIG;AACH,MAAM,WAAW,cAAc;IAC9B;;OAEG;IACH,MAAM,EAAE,oBAAoB,CAAC;IAE7B;;;OAGG;IAEH,4CAA4C;IAC5C,KAAK,EAAE,aAAa,CAAC;IAErB,0CAA0C;IAC1C,CAAC,EAAE,aAAa,CAAC;IAEjB,sCAAsC;IACtC,KAAK,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,KAAK,aAAa,CAAC;IAE3D,0BAA0B;IAC1B,MAAM,EAAE;QACP,GAAG,EAAE,MAAM,KAAK,CAAC;YAAE,IAAI,EAAE,aAAa,CAAA;SAAE,CAAC,CAAC;QAC1C,KAAK,EAAE,MAAM;YAAE,IAAI,EAAE,aAAa,CAAA;SAAE,GAAG,SAAS,CAAC;QACjD,IAAI,EAAE,MAAM;YAAE,IAAI,EAAE,aAAa,CAAA;SAAE,GAAG,SAAS,CAAC;QAChD,IAAI,EAAE;YAAE,IAAI,EAAE,aAAa,CAAA;SAAE,CAAC;KAC9B,CAAC;IAEF;;OAEG;IACH,CAAC,EAAE,cAAc,QAAQ,CAAC,CAAC;IAC3B,QAAQ,EAAE,cAAc,OAAO,EAAE,QAAQ,CAAC;CAC1C;AAED;;GAEG;AACH,MAAM,WAAW,aAAa;IAC7B;;;OAGG;IACH,KAAK,CAAC,EAAE,OAAO,CAAC;IAEhB;;;OAGG;IACH,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED;;;;;;;;;;;;;GAaG;AACH,qBAAa,YAAa,SAAQ,KAAK;IAG9B,IAAI,EAAE,MAAM;IACZ,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;gBAFxC,OAAO,EAAE,MAAM,EACR,IAAI,EAAE,MAAM,EACZ,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,YAAA;CAKzC;AAED;;GAEG;AACH,MAAM,WAAW,eAAe;IAC/B;;OAEG;IACH,IAAI,EAAE,oBAAoB,CAAC;IAE3B;;;OAGG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;IAEpB;;OAEG;IACH,KAAK,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAC7B"}
1
+ {"version":3,"file":"runtime.d.ts","sourceRoot":"","sources":["../../src/types/runtime.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AACH,qBAAa,YAAa,SAAQ,KAAK;IAG9B,IAAI,EAAE,MAAM;IACZ,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;gBAFxC,OAAO,EAAE,MAAM,EACR,IAAI,EAAE,MAAM,EACZ,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,YAAA;CAKzC"}
@@ -1,9 +1,3 @@
1
- // ============================================================================
2
- // Phase 1.1: Runtime Interfaces (IMPLEMENT WITH BRIDGE)
3
- //
4
- // These interfaces define how the runtime (inside isolation) communicates
5
- // with the host. Implement these when building the runtime code.
6
- // ============================================================================
7
1
  /**
8
2
  * Runtime error thrown inside isolated context.
9
3
  *
@@ -1 +1 @@
1
- {"version":3,"file":"runtime.js","sourceRoot":"","sources":["../../src/types/runtime.ts"],"names":[],"mappings":"AAAA,+EAA+E;AAC/E,wDAAwD;AACxD,EAAE;AACF,0EAA0E;AAC1E,iEAAiE;AACjE,+EAA+E;AAwF/E;;;;;;;;;;;;;GAaG;AACH,MAAM,OAAO,YAAa,SAAQ,KAAK;IAG9B;IACA;IAHR,YACC,OAAe,EACR,IAAY,EACZ,OAAiC;QAExC,KAAK,CAAC,OAAO,CAAC,CAAC;QAHR,SAAI,GAAJ,IAAI,CAAQ;QACZ,YAAO,GAAP,OAAO,CAA0B;QAGxC,IAAI,CAAC,IAAI,GAAG,cAAc,CAAC;IAC5B,CAAC;CACD"}
1
+ {"version":3,"file":"runtime.js","sourceRoot":"","sources":["../../src/types/runtime.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AACH,MAAM,OAAO,YAAa,SAAQ,KAAK;IAG9B;IACA;IAHR,YACC,OAAe,EACR,IAAY,EACZ,OAAiC;QAExC,KAAK,CAAC,OAAO,CAAC,CAAC;QAHR,SAAI,GAAJ,IAAI,CAAQ;QACZ,YAAO,GAAP,OAAO,CAA0B;QAGxC,IAAI,CAAC,IAAI,GAAG,cAAc,CAAC;IAC5B,CAAC;CACD"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@n8n/expression-runtime",
3
- "version": "0.2.0",
3
+ "version": "0.3.0",
4
4
  "description": "Secure, isolated expression evaluation runtime for n8n",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
@@ -14,6 +14,7 @@
14
14
  ],
15
15
  "license": "SEE LICENSE IN LICENSE.md",
16
16
  "dependencies": {
17
+ "isolated-vm": "^6.0.2",
17
18
  "js-base64": "3.7.2",
18
19
  "jssha": "3.3.1",
19
20
  "lodash": "4.17.23",
@@ -32,10 +33,21 @@
32
33
  "files": [
33
34
  "dist",
34
35
  "ARCHITECTURE.md",
35
- "LICENSE.md"
36
+ "LICENSE.md",
37
+ "LICENSE_EE.md"
36
38
  ],
39
+ "homepage": "https://n8n.io",
40
+ "author": {
41
+ "name": "Jan Oberhauser",
42
+ "email": "jan@n8n.io"
43
+ },
44
+ "repository": {
45
+ "type": "git",
46
+ "url": "git+https://github.com/n8n-io/n8n.git"
47
+ },
37
48
  "scripts": {
38
- "build": "tsc -p tsconfig.build.json",
49
+ "build": "tsc -p tsconfig.build.json && pnpm build:runtime",
50
+ "build:runtime": "node esbuild.config.js",
39
51
  "test": "vitest run",
40
52
  "test:dev": "vitest --watch --silent false",
41
53
  "typecheck": "tsc --noEmit"