@n8n/expression-runtime 0.22.0 → 0.23.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 (109) hide show
  1. package/dist/cjs/bridge/bridge-messages.d.ts +8 -8
  2. package/dist/cjs/bridge/bridge-messages.js +234 -244
  3. package/dist/cjs/bridge/bridge-messages.js.map +1 -1
  4. package/dist/cjs/bridge/isolated-vm-bridge.d.ts.map +1 -1
  5. package/dist/cjs/bridge/isolated-vm-bridge.js +633 -643
  6. package/dist/cjs/bridge/isolated-vm-bridge.js.map +1 -1
  7. package/dist/cjs/build.tsbuildinfo +1 -1
  8. package/dist/cjs/evaluator/error-classification.js +15 -25
  9. package/dist/cjs/evaluator/error-classification.js.map +1 -1
  10. package/dist/cjs/evaluator/expression-evaluator.d.ts.map +1 -1
  11. package/dist/cjs/evaluator/expression-evaluator.js +152 -162
  12. package/dist/cjs/evaluator/expression-evaluator.js.map +1 -1
  13. package/dist/cjs/evaluator/lru-cache.d.ts.map +1 -1
  14. package/dist/cjs/evaluator/lru-cache.js +35 -45
  15. package/dist/cjs/evaluator/lru-cache.js.map +1 -1
  16. package/dist/cjs/extensions/array-extensions.js +589 -599
  17. package/dist/cjs/extensions/array-extensions.js.map +1 -1
  18. package/dist/cjs/extensions/boolean-extensions.js +38 -48
  19. package/dist/cjs/extensions/boolean-extensions.js.map +1 -1
  20. package/dist/cjs/extensions/date-extensions.js +500 -510
  21. package/dist/cjs/extensions/date-extensions.js.map +1 -1
  22. package/dist/cjs/extensions/expression-extension-error.d.ts.map +1 -1
  23. package/dist/cjs/extensions/expression-extension-error.js +12 -22
  24. package/dist/cjs/extensions/expression-extension-error.js.map +1 -1
  25. package/dist/cjs/extensions/extend.js +162 -172
  26. package/dist/cjs/extensions/extend.js.map +1 -1
  27. package/dist/cjs/extensions/extensions.js +2 -12
  28. package/dist/cjs/extensions/function-extensions.d.ts +10 -18
  29. package/dist/cjs/extensions/function-extensions.d.ts.map +1 -1
  30. package/dist/cjs/extensions/function-extensions.js +78 -88
  31. package/dist/cjs/extensions/function-extensions.js.map +1 -1
  32. package/dist/cjs/extensions/number-extensions.js +225 -235
  33. package/dist/cjs/extensions/number-extensions.js.map +1 -1
  34. package/dist/cjs/extensions/object-extensions.js +286 -296
  35. package/dist/cjs/extensions/object-extensions.js.map +1 -1
  36. package/dist/cjs/extensions/string-extensions.d.ts +1 -1
  37. package/dist/cjs/extensions/string-extensions.d.ts.map +1 -1
  38. package/dist/cjs/extensions/string-extensions.js +758 -768
  39. package/dist/cjs/extensions/string-extensions.js.map +1 -1
  40. package/dist/cjs/extensions/utils.d.ts.map +1 -1
  41. package/dist/cjs/extensions/utils.js +28 -38
  42. package/dist/cjs/extensions/utils.js.map +1 -1
  43. package/dist/cjs/index.js +32 -42
  44. package/dist/cjs/index.js.map +1 -1
  45. package/dist/cjs/observability/metrics.d.ts +27 -27
  46. package/dist/cjs/observability/metrics.d.ts.map +1 -1
  47. package/dist/cjs/observability/metrics.js +59 -69
  48. package/dist/cjs/observability/metrics.js.map +1 -1
  49. package/dist/cjs/observability/noop-provider.js +28 -38
  50. package/dist/cjs/observability/noop-provider.js.map +1 -1
  51. package/dist/cjs/pool/idle-scaling-pool.d.ts.map +1 -1
  52. package/dist/cjs/pool/idle-scaling-pool.js +134 -144
  53. package/dist/cjs/pool/idle-scaling-pool.js.map +1 -1
  54. package/dist/cjs/pool/isolate-pool.d.ts.map +1 -1
  55. package/dist/cjs/pool/isolate-pool.js +101 -111
  56. package/dist/cjs/pool/isolate-pool.js.map +1 -1
  57. package/dist/cjs/runtime/context.js +418 -428
  58. package/dist/cjs/runtime/context.js.map +1 -1
  59. package/dist/cjs/runtime/index.js +26 -36
  60. package/dist/cjs/runtime/index.js.map +1 -1
  61. package/dist/cjs/runtime/jmespath.js +72 -82
  62. package/dist/cjs/runtime/jmespath.js.map +1 -1
  63. package/dist/cjs/runtime/lazy-proxy.js +238 -248
  64. package/dist/cjs/runtime/lazy-proxy.js.map +1 -1
  65. package/dist/cjs/runtime/safe-globals.d.ts.map +1 -1
  66. package/dist/cjs/runtime/safe-globals.js +134 -144
  67. package/dist/cjs/runtime/safe-globals.js.map +1 -1
  68. package/dist/cjs/runtime/serialize.js +54 -64
  69. package/dist/cjs/runtime/serialize.js.map +1 -1
  70. package/dist/cjs/runtime/utils.js +20 -30
  71. package/dist/cjs/runtime/utils.js.map +1 -1
  72. package/dist/cjs/types/bridge.js +15 -25
  73. package/dist/cjs/types/bridge.js.map +1 -1
  74. package/dist/cjs/types/evaluator.d.ts.map +1 -1
  75. package/dist/cjs/types/evaluator.js +35 -45
  76. package/dist/cjs/types/evaluator.js.map +1 -1
  77. package/dist/cjs/types/index.js +14 -24
  78. package/dist/cjs/types/index.js.map +1 -1
  79. package/dist/cjs/types/runtime.d.ts.map +1 -1
  80. package/dist/cjs/types/runtime.js +27 -37
  81. package/dist/cjs/types/runtime.js.map +1 -1
  82. package/dist/esm/bridge/bridge-messages.d.ts +8 -8
  83. package/dist/esm/bridge/isolated-vm-bridge.d.ts.map +1 -1
  84. package/dist/esm/bridge/isolated-vm-bridge.js.map +1 -1
  85. package/dist/esm/build.tsbuildinfo +1 -1
  86. package/dist/esm/evaluator/expression-evaluator.d.ts.map +1 -1
  87. package/dist/esm/evaluator/lru-cache.d.ts.map +1 -1
  88. package/dist/esm/evaluator/lru-cache.js.map +1 -1
  89. package/dist/esm/extensions/expression-extension-error.d.ts.map +1 -1
  90. package/dist/esm/extensions/function-extensions.d.ts +10 -18
  91. package/dist/esm/extensions/function-extensions.d.ts.map +1 -1
  92. package/dist/esm/extensions/number-extensions.js.map +1 -1
  93. package/dist/esm/extensions/string-extensions.d.ts +1 -1
  94. package/dist/esm/extensions/string-extensions.d.ts.map +1 -1
  95. package/dist/esm/extensions/string-extensions.js.map +1 -1
  96. package/dist/esm/extensions/utils.d.ts.map +1 -1
  97. package/dist/esm/observability/metrics.d.ts +27 -27
  98. package/dist/esm/observability/metrics.d.ts.map +1 -1
  99. package/dist/esm/pool/idle-scaling-pool.d.ts.map +1 -1
  100. package/dist/esm/pool/idle-scaling-pool.js.map +1 -1
  101. package/dist/esm/pool/isolate-pool.d.ts.map +1 -1
  102. package/dist/esm/pool/isolate-pool.js.map +1 -1
  103. package/dist/esm/runtime/lazy-proxy.js.map +1 -1
  104. package/dist/esm/runtime/safe-globals.d.ts.map +1 -1
  105. package/dist/esm/types/evaluator.d.ts.map +1 -1
  106. package/dist/esm/types/evaluator.js.map +1 -1
  107. package/dist/esm/types/runtime.d.ts.map +1 -1
  108. package/dist/esm/types/runtime.js.map +1 -1
  109. package/package.json +6 -5
@@ -1,26 +1,16 @@
1
- (function (factory) {
2
- if (typeof module === "object" && typeof module.exports === "object") {
3
- var v = factory(require, exports);
4
- if (v !== undefined) module.exports = v;
5
- }
6
- else if (typeof define === "function" && define.amd) {
7
- define(["require", "exports", "../types"], factory);
8
- }
9
- })(function (require, exports) {
10
- "use strict";
11
- Object.defineProperty(exports, "__esModule", { value: true });
12
- exports.classifyExpressionError = classifyExpressionError;
13
- const types_1 = require("../types");
14
- function classifyExpressionError(error) {
15
- if (error instanceof types_1.TimeoutError)
16
- return 'timeout';
17
- if (error instanceof types_1.MemoryLimitError)
18
- return 'memory_limit';
19
- if (error instanceof types_1.SecurityViolationError)
20
- return 'security';
21
- if (error instanceof types_1.SyntaxError)
22
- return 'syntax';
23
- return 'unknown';
24
- }
25
- });
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.classifyExpressionError = classifyExpressionError;
4
+ const types_1 = require("../types");
5
+ function classifyExpressionError(error) {
6
+ if (error instanceof types_1.TimeoutError)
7
+ return 'timeout';
8
+ if (error instanceof types_1.MemoryLimitError)
9
+ return 'memory_limit';
10
+ if (error instanceof types_1.SecurityViolationError)
11
+ return 'security';
12
+ if (error instanceof types_1.SyntaxError)
13
+ return 'syntax';
14
+ return 'unknown';
15
+ }
26
16
  //# sourceMappingURL=error-classification.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"error-classification.js","sourceRoot":"","sources":["../../../src/evaluator/error-classification.ts"],"names":[],"mappings":";;;;;;;;;;;IAIA,0DAMC;IAVD,oCAA+F;IAI/F,SAAgB,uBAAuB,CAAC,KAAc;QACrD,IAAI,KAAK,YAAY,oBAAY;YAAE,OAAO,SAAS,CAAC;QACpD,IAAI,KAAK,YAAY,wBAAgB;YAAE,OAAO,cAAc,CAAC;QAC7D,IAAI,KAAK,YAAY,8BAAsB;YAAE,OAAO,UAAU,CAAC;QAC/D,IAAI,KAAK,YAAY,mBAAW;YAAE,OAAO,QAAQ,CAAC;QAClD,OAAO,SAAS,CAAC;IAClB,CAAC"}
1
+ {"version":3,"file":"error-classification.js","sourceRoot":"","sources":["../../../src/evaluator/error-classification.ts"],"names":[],"mappings":";;;AAAA,oCAA+F;AAI/F,iCAAwC,KAAc;IACrD,IAAI,KAAK,YAAY,oBAAY;QAAE,OAAO,SAAS,CAAC;IACpD,IAAI,KAAK,YAAY,wBAAgB;QAAE,OAAO,cAAc,CAAC;IAC7D,IAAI,KAAK,YAAY,8BAAsB;QAAE,OAAO,UAAU,CAAC;IAC/D,IAAI,KAAK,YAAY,mBAAW;QAAE,OAAO,QAAQ,CAAC;IAClD,OAAO,SAAS,CAAC;AAClB,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"expression-evaluator.d.ts","sourceRoot":"","sources":["../../../src/evaluator/expression-evaluator.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACX,oBAAoB,EACpB,eAAe,EACf,YAAY,EACZ,eAAe,EAGf,MAAM,UAAU,CAAC;AAyBlB,qBAAa,mBAAoB,YAAW,oBAAoB;IAC/D,OAAO,CAAC,MAAM,CAAkB;IAEhC,OAAO,CAAC,QAAQ,CAAS;IAGzB,OAAO,CAAC,UAAU,CAAC,CAAa;IAIhC,OAAO,CAAC,SAAS,CAA2B;IAE5C,OAAO,CAAC,IAAI,CAAQ;IAEpB,OAAO,CAAC,eAAe,CAAwC;IAE/D,OAAO,CAAC,QAAQ,CAAC,YAAY,CAA+B;gBAEhD,MAAM,EAAE,eAAe;IA8B7B,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAIjC;;;;;OAKG;IACG,OAAO,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAe/C,QAAQ,CACP,UAAU,EAAE,MAAM,EAClB,IAAI,EAAE,YAAY,EAClB,MAAM,EAAE,MAAM,EACd,OAAO,CAAC,EAAE,eAAe,GACvB,OAAO;IAuBV,OAAO,CAAC,SAAS;IAeX,OAAO,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAOtC,oBAAoB,IAAI,OAAO,CAAC,IAAI,CAAC;IAI3C;;;;;;;;OAQG;IACH,OAAO,CAAC,kBAAkB;IA8BpB,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAO9B,UAAU,IAAI,OAAO;CAGrB"}
1
+ {"version":3,"file":"expression-evaluator.d.ts","sourceRoot":"","sources":["../../../src/evaluator/expression-evaluator.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACX,oBAAoB,EACpB,eAAe,EACf,YAAY,EACZ,eAAe,EAGf,MAAM,UAAU,CAAC;AAyBlB,qBAAa,mBAAoB,YAAW,oBAAoB;IAC/D,OAAO,CAAC,MAAM,CAAkB;IAEhC,OAAO,CAAC,QAAQ,CAAS;IAGzB,OAAO,CAAC,UAAU,CAAC,CAAa;IAIhC,OAAO,CAAC,SAAS,CAA2B;IAE5C,OAAO,CAAC,IAAI,CAAQ;IAEpB,OAAO,CAAC,eAAe,CAAwC;IAE/D,OAAO,CAAC,QAAQ,CAAC,YAAY,CAA+B;IAE5D,YAAY,MAAM,EAAE,eAAe,EA4BlC;IAEK,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC,CAEhC;IAED;;;;;OAKG;IACG,OAAO,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAa9C;IAED,QAAQ,CACP,UAAU,EAAE,MAAM,EAClB,IAAI,EAAE,YAAY,EAClB,MAAM,EAAE,MAAM,EACd,OAAO,CAAC,EAAE,eAAe,GACvB,OAAO,CAqBT;IAED,OAAO,CAAC,SAAS;IAeX,OAAO,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAK3C;IAEK,oBAAoB,IAAI,OAAO,CAAC,IAAI,CAAC,CAE1C;IAED;;;;;;;;OAQG;IACH,OAAO,CAAC,kBAAkB;IA8BpB,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,CAK7B;IAED,UAAU,IAAI,OAAO,CAEpB;CACD"}
@@ -1,175 +1,165 @@
1
- (function (factory) {
2
- if (typeof module === "object" && typeof module.exports === "object") {
3
- var v = factory(require, exports);
4
- if (v !== undefined) module.exports = v;
5
- }
6
- else if (typeof define === "function" && define.amd) {
7
- define(["require", "exports", "@n8n/tournament", "../types/bridge", "@n8n/errors", "../pool/idle-scaling-pool", "../pool/isolate-pool", "../observability/metrics", "./error-classification", "./lru-cache"], factory);
8
- }
9
- })(function (require, exports) {
10
- "use strict";
11
- Object.defineProperty(exports, "__esModule", { value: true });
12
- exports.ExpressionEvaluator = void 0;
13
- const tournament_1 = require("@n8n/tournament");
14
- const bridge_1 = require("../types/bridge");
15
- const errors_1 = require("@n8n/errors");
16
- const idle_scaling_pool_1 = require("../pool/idle-scaling-pool");
17
- const isolate_pool_1 = require("../pool/isolate-pool");
18
- const metrics_1 = require("../observability/metrics");
19
- const error_classification_1 = require("./error-classification");
20
- const lru_cache_1 = require("./lru-cache");
21
- function recordOutcome(observability, start, status, error) {
22
- if (!observability)
23
- return;
24
- const durationSeconds = (performance.now() - start) / 1000;
25
- const errorType = error !== undefined ? (0, error_classification_1.classifyExpressionError)(error) : undefined;
26
- observability.metrics.histogram(metrics_1.EXPRESSION_METRICS.evaluationDuration.name, durationSeconds, {
27
- status,
28
- type: errorType ?? 'none',
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ExpressionEvaluator = void 0;
4
+ const tournament_1 = require("@n8n/tournament");
5
+ const bridge_1 = require("../types/bridge");
6
+ const errors_1 = require("@n8n/errors");
7
+ const idle_scaling_pool_1 = require("../pool/idle-scaling-pool");
8
+ const isolate_pool_1 = require("../pool/isolate-pool");
9
+ const metrics_1 = require("../observability/metrics");
10
+ const error_classification_1 = require("./error-classification");
11
+ const lru_cache_1 = require("./lru-cache");
12
+ function recordOutcome(observability, start, status, error) {
13
+ if (!observability)
14
+ return;
15
+ const durationSeconds = (performance.now() - start) / 1000;
16
+ const errorType = error !== undefined ? (0, error_classification_1.classifyExpressionError)(error) : undefined;
17
+ observability.metrics.histogram(metrics_1.EXPRESSION_METRICS.evaluationDuration.name, durationSeconds, {
18
+ status,
19
+ type: errorType ?? 'none',
20
+ });
21
+ }
22
+ class ExpressionEvaluator {
23
+ config;
24
+ disposed = false;
25
+ // Lazy-initialized tournament instance (expensive to create, reused across evaluations)
26
+ tournament;
27
+ // Cache: template expression → tournament-transformed JavaScript code
28
+ // Cache hit rate in production: ~99.9% (same expressions repeat within a workflow)
29
+ codeCache;
30
+ pool;
31
+ bridgesByCaller = new WeakMap();
32
+ createBridge;
33
+ constructor(config) {
34
+ this.config = config;
35
+ this.codeCache = new lru_cache_1.LruCache(config.maxCodeCacheSize, () => {
36
+ this.config.observability?.metrics.counter(metrics_1.EXPRESSION_METRICS.codeCacheEviction.name, 1);
29
37
  });
38
+ const logger = config.logger ?? bridge_1.DEFAULT_BRIDGE_CONFIG.logger;
39
+ this.createBridge = async () => {
40
+ const bridge = config.createBridge();
41
+ await bridge.initialize();
42
+ return bridge;
43
+ };
44
+ const onReplenishFailed = (error) => {
45
+ logger.error('[IsolatePool] Failed to replenish bridge', { error });
46
+ config.observability?.metrics.counter(metrics_1.EXPRESSION_METRICS.poolReplenishFailed.name, 1);
47
+ };
48
+ this.pool =
49
+ config.idleTimeoutMs === undefined
50
+ ? new isolate_pool_1.IsolatePool(this.createBridge, config.poolSize ?? 1, onReplenishFailed, logger)
51
+ : new idle_scaling_pool_1.IdleScalingPool(this.createBridge, config.poolSize ?? 1, config.idleTimeoutMs, onReplenishFailed, logger, config.observability);
30
52
  }
31
- class ExpressionEvaluator {
32
- config;
33
- disposed = false;
34
- // Lazy-initialized tournament instance (expensive to create, reused across evaluations)
35
- tournament;
36
- // Cache: template expression tournament-transformed JavaScript code
37
- // Cache hit rate in production: ~99.9% (same expressions repeat within a workflow)
38
- codeCache;
39
- pool;
40
- bridgesByCaller = new WeakMap();
41
- createBridge;
42
- constructor(config) {
43
- this.config = config;
44
- this.codeCache = new lru_cache_1.LruCache(config.maxCodeCacheSize, () => {
45
- this.config.observability?.metrics.counter(metrics_1.EXPRESSION_METRICS.codeCacheEviction.name, 1);
46
- });
47
- const logger = config.logger ?? bridge_1.DEFAULT_BRIDGE_CONFIG.logger;
48
- this.createBridge = async () => {
49
- const bridge = config.createBridge();
50
- await bridge.initialize();
51
- return bridge;
52
- };
53
- const onReplenishFailed = (error) => {
54
- logger.error('[IsolatePool] Failed to replenish bridge', { error });
55
- config.observability?.metrics.counter(metrics_1.EXPRESSION_METRICS.poolReplenishFailed.name, 1);
56
- };
57
- this.pool =
58
- config.idleTimeoutMs === undefined
59
- ? new isolate_pool_1.IsolatePool(this.createBridge, config.poolSize ?? 1, onReplenishFailed, logger)
60
- : new idle_scaling_pool_1.IdleScalingPool(this.createBridge, config.poolSize ?? 1, config.idleTimeoutMs, onReplenishFailed, logger, config.observability);
61
- }
62
- async initialize() {
63
- await this.pool.initialize();
64
- }
65
- /**
66
- * Acquire a bridge for the caller. Returns whether a bridge was newly
67
- * acquired: `false` means the caller already held one, so the current
68
- * scope must not release it (release is not reference-counted and would
69
- * return the caller's bridge to the pool mid-use).
70
- */
71
- async acquire(caller) {
72
- if (this.bridgesByCaller.has(caller))
73
- return false;
74
- let bridge;
75
- try {
76
- bridge = this.pool.acquire();
77
- }
78
- catch (error) {
79
- if (error instanceof isolate_pool_1.PoolDisposedError)
80
- throw error;
81
- if (!(error instanceof isolate_pool_1.PoolExhaustedError))
82
- throw error;
83
- bridge = await this.createBridge();
84
- }
85
- this.config.observability?.metrics.counter(metrics_1.EXPRESSION_METRICS.poolAcquired.name, 1);
86
- this.bridgesByCaller.set(caller, bridge);
87
- return true;
53
+ async initialize() {
54
+ await this.pool.initialize();
55
+ }
56
+ /**
57
+ * Acquire a bridge for the caller. Returns whether a bridge was newly
58
+ * acquired: `false` means the caller already held one, so the current
59
+ * scope must not release it (release is not reference-counted and would
60
+ * return the caller's bridge to the pool mid-use).
61
+ */
62
+ async acquire(caller) {
63
+ if (this.bridgesByCaller.has(caller))
64
+ return false;
65
+ let bridge;
66
+ try {
67
+ bridge = this.pool.acquire();
88
68
  }
89
- evaluate(expression, data, caller, options) {
90
- if (this.disposed)
91
- throw new errors_1.IsolateError('Evaluator disposed');
92
- const bridge = this.getBridge(caller);
93
- // Transform template expression → sanitized JavaScript (cached)
94
- const transformedCode = this.getTransformedCode(expression);
95
- const { observability } = this.config;
96
- const start = performance.now();
97
- try {
98
- const result = bridge.execute(transformedCode, data, {
99
- timezone: options?.timezone,
100
- });
101
- recordOutcome(observability, start, 'success');
102
- return result;
103
- }
104
- catch (error) {
105
- recordOutcome(observability, start, 'error', error);
69
+ catch (error) {
70
+ if (error instanceof isolate_pool_1.PoolDisposedError)
106
71
  throw error;
107
- }
72
+ if (!(error instanceof isolate_pool_1.PoolExhaustedError))
73
+ throw error;
74
+ bridge = await this.createBridge();
108
75
  }
109
- getBridge(caller) {
110
- const bridge = this.bridgesByCaller.get(caller);
111
- if (!bridge) {
112
- throw new errors_1.IsolateError('No bridge acquired for this context. Call acquire() first.');
113
- }
114
- // If the isolate died mid-execution (e.g. OOM), all remaining expressions
115
- // in this execution are expected to fail. Recovery is per-execution, not per-expression.
116
- if (bridge.isDisposed()) {
117
- throw new errors_1.IsolateError('Isolate for this caller is no longer available');
118
- }
119
- return bridge;
76
+ this.config.observability?.metrics.counter(metrics_1.EXPRESSION_METRICS.poolAcquired.name, 1);
77
+ this.bridgesByCaller.set(caller, bridge);
78
+ return true;
79
+ }
80
+ evaluate(expression, data, caller, options) {
81
+ if (this.disposed)
82
+ throw new errors_1.IsolateError('Evaluator disposed');
83
+ const bridge = this.getBridge(caller);
84
+ // Transform template expression sanitized JavaScript (cached)
85
+ const transformedCode = this.getTransformedCode(expression);
86
+ const { observability } = this.config;
87
+ const start = performance.now();
88
+ try {
89
+ const result = bridge.execute(transformedCode, data, {
90
+ timezone: options?.timezone,
91
+ });
92
+ recordOutcome(observability, start, 'success');
93
+ return result;
120
94
  }
121
- async release(caller) {
122
- const bridge = this.bridgesByCaller.get(caller);
123
- if (!bridge)
124
- return;
125
- this.bridgesByCaller.delete(caller);
126
- await this.pool.release(bridge);
95
+ catch (error) {
96
+ recordOutcome(observability, start, 'error', error);
97
+ throw error;
127
98
  }
128
- async waitForReplenishment() {
129
- await this.pool.waitForReplenishment();
99
+ }
100
+ getBridge(caller) {
101
+ const bridge = this.bridgesByCaller.get(caller);
102
+ if (!bridge) {
103
+ throw new errors_1.IsolateError('No bridge acquired for this context. Call acquire() first.');
130
104
  }
131
- /**
132
- * Transform a template expression to executable JavaScript via tournament.
133
- *
134
- * Input: "{{ $json.email }}"
135
- * Output: JavaScript string with tournament security transforms applied
136
- * ($json → this.$json, computed access wrapped in this.__sanitize(), etc.)
137
- *
138
- * Result is cached by expression string (tournament AST parsing is expensive).
139
- */
140
- getTransformedCode(expression) {
141
- const cached = this.codeCache.get(expression);
142
- if (cached !== undefined) {
143
- this.config.observability?.metrics.counter(metrics_1.EXPRESSION_METRICS.codeCacheHit.name, 1);
144
- return cached;
145
- }
146
- this.config.observability?.metrics.counter(metrics_1.EXPRESSION_METRICS.codeCacheMiss.name, 1);
147
- if (!this.tournament) {
148
- // Tournament requires an errorHandler but we only use getExpressionCode()
149
- // for AST transformation — we never call tournament.execute(), so this
150
- // handler is never invoked. Runtime errors are handled by the bridge's
151
- // own E() injection in injectErrorHandler().
152
- const errorHandler = () => { };
153
- this.tournament = new tournament_1.Tournament(errorHandler, undefined, undefined, {
154
- before: this.config.hooks?.before ?? [],
155
- after: this.config.hooks?.after ?? [],
156
- });
157
- }
158
- const [transformedCode] = this.tournament.getExpressionCode(expression);
159
- this.codeCache.set(expression, transformedCode);
160
- this.config.observability?.metrics.gauge(metrics_1.EXPRESSION_METRICS.codeCacheSize.name, this.codeCache.size);
161
- return transformedCode;
105
+ // If the isolate died mid-execution (e.g. OOM), all remaining expressions
106
+ // in this execution are expected to fail. Recovery is per-execution, not per-expression.
107
+ if (bridge.isDisposed()) {
108
+ throw new errors_1.IsolateError('Isolate for this caller is no longer available');
162
109
  }
163
- async dispose() {
164
- this.disposed = true;
165
- this.codeCache.clear();
166
- this.config.observability?.metrics.gauge(metrics_1.EXPRESSION_METRICS.codeCacheSize.name, 0);
167
- await this.pool.dispose();
110
+ return bridge;
111
+ }
112
+ async release(caller) {
113
+ const bridge = this.bridgesByCaller.get(caller);
114
+ if (!bridge)
115
+ return;
116
+ this.bridgesByCaller.delete(caller);
117
+ await this.pool.release(bridge);
118
+ }
119
+ async waitForReplenishment() {
120
+ await this.pool.waitForReplenishment();
121
+ }
122
+ /**
123
+ * Transform a template expression to executable JavaScript via tournament.
124
+ *
125
+ * Input: "{{ $json.email }}"
126
+ * Output: JavaScript string with tournament security transforms applied
127
+ * ($json → this.$json, computed access wrapped in this.__sanitize(), etc.)
128
+ *
129
+ * Result is cached by expression string (tournament AST parsing is expensive).
130
+ */
131
+ getTransformedCode(expression) {
132
+ const cached = this.codeCache.get(expression);
133
+ if (cached !== undefined) {
134
+ this.config.observability?.metrics.counter(metrics_1.EXPRESSION_METRICS.codeCacheHit.name, 1);
135
+ return cached;
168
136
  }
169
- isDisposed() {
170
- return this.disposed;
137
+ this.config.observability?.metrics.counter(metrics_1.EXPRESSION_METRICS.codeCacheMiss.name, 1);
138
+ if (!this.tournament) {
139
+ // Tournament requires an errorHandler but we only use getExpressionCode()
140
+ // for AST transformation — we never call tournament.execute(), so this
141
+ // handler is never invoked. Runtime errors are handled by the bridge's
142
+ // own E() injection in injectErrorHandler().
143
+ const errorHandler = () => { };
144
+ this.tournament = new tournament_1.Tournament(errorHandler, undefined, undefined, {
145
+ before: this.config.hooks?.before ?? [],
146
+ after: this.config.hooks?.after ?? [],
147
+ });
171
148
  }
149
+ const [transformedCode] = this.tournament.getExpressionCode(expression);
150
+ this.codeCache.set(expression, transformedCode);
151
+ this.config.observability?.metrics.gauge(metrics_1.EXPRESSION_METRICS.codeCacheSize.name, this.codeCache.size);
152
+ return transformedCode;
153
+ }
154
+ async dispose() {
155
+ this.disposed = true;
156
+ this.codeCache.clear();
157
+ this.config.observability?.metrics.gauge(metrics_1.EXPRESSION_METRICS.codeCacheSize.name, 0);
158
+ await this.pool.dispose();
159
+ }
160
+ isDisposed() {
161
+ return this.disposed;
172
162
  }
173
- exports.ExpressionEvaluator = ExpressionEvaluator;
174
- });
163
+ }
164
+ exports.ExpressionEvaluator = ExpressionEvaluator;
175
165
  //# sourceMappingURL=expression-evaluator.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"expression-evaluator.js","sourceRoot":"","sources":["../../../src/evaluator/expression-evaluator.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"expression-evaluator.js","sourceRoot":"","sources":["../../../src/evaluator/expression-evaluator.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"lru-cache.d.ts","sourceRoot":"","sources":["../../../src/evaluator/lru-cache.ts"],"names":[],"mappings":"AAAA,qBAAa,QAAQ,CAAC,CAAC,EAAE,CAAC;IAIxB,OAAO,CAAC,QAAQ,CAAC,QAAQ;IACzB,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC;IAJ1B,OAAO,CAAC,GAAG,CAAmB;gBAGZ,QAAQ,EAAE,MAAM,EAChB,OAAO,CAAC,GAAE,CAAC,GAAG,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,KAAK,IAAI,aAAA;IAOtD,GAAG,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,GAAG,SAAS;IAQ1B,GAAG,CAAC,GAAG,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,GAAG,IAAI;IAU3B,IAAI,IAAI,IAAI,MAAM,CAEjB;IAED,KAAK,IAAI,IAAI;CAGb"}
1
+ {"version":3,"file":"lru-cache.d.ts","sourceRoot":"","sources":["../../../src/evaluator/lru-cache.ts"],"names":[],"mappings":"AAAA,qBAAa,QAAQ,CAAC,CAAC,EAAE,CAAC;IAIxB,OAAO,CAAC,QAAQ,CAAC,QAAQ;IACzB,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC;IAJ1B,OAAO,CAAC,GAAG,CAAmB;IAE9B,YACkB,QAAQ,EAAE,MAAM,EAChB,OAAO,CAAC,GAAE,CAAC,GAAG,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,KAAK,IAAI,aAAA,EAKrD;IAED,GAAG,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,GAAG,SAAS,CAMzB;IAED,GAAG,CAAC,GAAG,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,GAAG,IAAI,CAQ1B;IAED,IAAI,IAAI,IAAI,MAAM,CAEjB;IAED,KAAK,IAAI,IAAI,CAEZ;CACD"}
@@ -1,50 +1,40 @@
1
- (function (factory) {
2
- if (typeof module === "object" && typeof module.exports === "object") {
3
- var v = factory(require, exports);
4
- if (v !== undefined) module.exports = v;
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.LruCache = void 0;
4
+ class LruCache {
5
+ capacity;
6
+ onEvict;
7
+ map = new Map();
8
+ constructor(capacity, onEvict) {
9
+ this.capacity = capacity;
10
+ this.onEvict = onEvict;
11
+ if (capacity < 1) {
12
+ throw new Error('LruCache capacity must be at least 1');
13
+ }
5
14
  }
6
- else if (typeof define === "function" && define.amd) {
7
- define(["require", "exports"], factory);
15
+ get(key) {
16
+ const value = this.map.get(key);
17
+ if (value === undefined)
18
+ return undefined;
19
+ this.map.delete(key);
20
+ this.map.set(key, value);
21
+ return value;
8
22
  }
9
- })(function (require, exports) {
10
- "use strict";
11
- Object.defineProperty(exports, "__esModule", { value: true });
12
- exports.LruCache = void 0;
13
- class LruCache {
14
- capacity;
15
- onEvict;
16
- map = new Map();
17
- constructor(capacity, onEvict) {
18
- this.capacity = capacity;
19
- this.onEvict = onEvict;
20
- if (capacity < 1) {
21
- throw new Error('LruCache capacity must be at least 1');
22
- }
23
- }
24
- get(key) {
25
- const value = this.map.get(key);
26
- if (value === undefined)
27
- return undefined;
28
- this.map.delete(key);
29
- this.map.set(key, value);
30
- return value;
31
- }
32
- set(key, value) {
33
- this.map.delete(key);
34
- this.map.set(key, value);
35
- if (this.map.size > this.capacity) {
36
- const [oldestKey, oldestValue] = this.map.entries().next().value;
37
- this.map.delete(oldestKey);
38
- this.onEvict?.(oldestKey, oldestValue);
39
- }
40
- }
41
- get size() {
42
- return this.map.size;
43
- }
44
- clear() {
45
- this.map.clear();
23
+ set(key, value) {
24
+ this.map.delete(key);
25
+ this.map.set(key, value);
26
+ if (this.map.size > this.capacity) {
27
+ const [oldestKey, oldestValue] = this.map.entries().next().value;
28
+ this.map.delete(oldestKey);
29
+ this.onEvict?.(oldestKey, oldestValue);
46
30
  }
47
31
  }
48
- exports.LruCache = LruCache;
49
- });
32
+ get size() {
33
+ return this.map.size;
34
+ }
35
+ clear() {
36
+ this.map.clear();
37
+ }
38
+ }
39
+ exports.LruCache = LruCache;
50
40
  //# sourceMappingURL=lru-cache.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"lru-cache.js","sourceRoot":"","sources":["../../../src/evaluator/lru-cache.ts"],"names":[],"mappings":";;;;;;;;;;;;IAAA,MAAa,QAAQ;QAIF;QACA;QAJV,GAAG,GAAG,IAAI,GAAG,EAAQ,CAAC;QAE9B,YACkB,QAAgB,EAChB,OAAoC;YADpC,aAAQ,GAAR,QAAQ,CAAQ;YAChB,YAAO,GAAP,OAAO,CAA6B;YAErD,IAAI,QAAQ,GAAG,CAAC,EAAE,CAAC;gBAClB,MAAM,IAAI,KAAK,CAAC,sCAAsC,CAAC,CAAC;YACzD,CAAC;QACF,CAAC;QAED,GAAG,CAAC,GAAM;YACT,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YAChC,IAAI,KAAK,KAAK,SAAS;gBAAE,OAAO,SAAS,CAAC;YAC1C,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YACrB,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;YACzB,OAAO,KAAK,CAAC;QACd,CAAC;QAED,GAAG,CAAC,GAAM,EAAE,KAAQ;YACnB,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YACrB,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;YACzB,IAAI,IAAI,CAAC,GAAG,CAAC,IAAI,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC;gBACnC,MAAM,CAAC,SAAS,EAAE,WAAW,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC,IAAI,EAAE,CAAC,KAAM,CAAC;gBAClE,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;gBAC3B,IAAI,CAAC,OAAO,EAAE,CAAC,SAAS,EAAE,WAAW,CAAC,CAAC;YACxC,CAAC;QACF,CAAC;QAED,IAAI,IAAI;YACP,OAAO,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC;QACtB,CAAC;QAED,KAAK;YACJ,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC;QAClB,CAAC;KACD;IArCD,4BAqCC"}
1
+ {"version":3,"file":"lru-cache.js","sourceRoot":"","sources":["../../../src/evaluator/lru-cache.ts"],"names":[],"mappings":";;;AAAA;IAImB,QAAQ;IACR,OAAO;IAJjB,GAAG,GAAG,IAAI,GAAG,EAAQ,CAAC;IAE9B,YACkB,QAAgB,EAChB,OAAoC;wBADpC,QAAQ;uBACR,OAAO;QAExB,IAAI,QAAQ,GAAG,CAAC,EAAE,CAAC;YAClB,MAAM,IAAI,KAAK,CAAC,sCAAsC,CAAC,CAAC;QACzD,CAAC;IACF,CAAC;IAED,GAAG,CAAC,GAAM;QACT,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAChC,IAAI,KAAK,KAAK,SAAS;YAAE,OAAO,SAAS,CAAC;QAC1C,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QACrB,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;QACzB,OAAO,KAAK,CAAC;IACd,CAAC;IAED,GAAG,CAAC,GAAM,EAAE,KAAQ;QACnB,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QACrB,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;QACzB,IAAI,IAAI,CAAC,GAAG,CAAC,IAAI,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC;YACnC,MAAM,CAAC,SAAS,EAAE,WAAW,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC,IAAI,EAAE,CAAC,KAAM,CAAC;YAClE,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;YAC3B,IAAI,CAAC,OAAO,EAAE,CAAC,SAAS,EAAE,WAAW,CAAC,CAAC;QACxC,CAAC;IACF,CAAC;IAED,IAAI,IAAI;QACP,OAAO,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC;IACtB,CAAC;IAED,KAAK;QACJ,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC;IAClB,CAAC;CACD"}