@n8n/expression-runtime 0.7.0 → 0.8.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/bundle/runtime.esm.js +17 -17
- package/dist/bundle/runtime.esm.js.map +3 -3
- package/dist/bundle/runtime.iife.js +17 -17
- package/dist/bundle/runtime.iife.js.map +3 -3
- package/dist/cjs/bridge/isolated-vm-bridge.d.ts +8 -0
- package/dist/cjs/bridge/isolated-vm-bridge.d.ts.map +1 -1
- package/dist/cjs/bridge/isolated-vm-bridge.js +223 -117
- package/dist/cjs/bridge/isolated-vm-bridge.js.map +1 -1
- package/dist/cjs/build.tsbuildinfo +1 -1
- package/dist/cjs/evaluator/expression-evaluator.d.ts +8 -1
- package/dist/cjs/evaluator/expression-evaluator.d.ts.map +1 -1
- package/dist/cjs/evaluator/expression-evaluator.js +60 -5
- package/dist/cjs/evaluator/expression-evaluator.js.map +1 -1
- package/dist/cjs/extensions/boolean-extensions.d.ts +1 -1
- package/dist/cjs/extensions/object-extensions.d.ts.map +1 -1
- package/dist/cjs/extensions/object-extensions.js +8 -4
- package/dist/cjs/extensions/object-extensions.js.map +1 -1
- package/dist/cjs/index.d.ts +1 -1
- package/dist/cjs/index.d.ts.map +1 -1
- package/dist/cjs/index.js.map +1 -1
- package/dist/cjs/pool/isolate-pool.d.ts +34 -0
- package/dist/cjs/pool/isolate-pool.d.ts.map +1 -0
- package/dist/cjs/pool/isolate-pool.js +122 -0
- package/dist/cjs/pool/isolate-pool.js.map +1 -0
- package/dist/cjs/runtime/index.d.ts +9 -0
- package/dist/cjs/runtime/index.d.ts.map +1 -1
- package/dist/cjs/runtime/index.js.map +1 -1
- package/dist/cjs/runtime/lazy-proxy.d.ts +20 -1
- package/dist/cjs/runtime/lazy-proxy.d.ts.map +1 -1
- package/dist/cjs/runtime/lazy-proxy.js +70 -8
- package/dist/cjs/runtime/lazy-proxy.js.map +1 -1
- package/dist/cjs/runtime/reset.d.ts.map +1 -1
- package/dist/cjs/runtime/reset.js +37 -21
- package/dist/cjs/runtime/reset.js.map +1 -1
- package/dist/cjs/types/bridge.d.ts +12 -7
- package/dist/cjs/types/bridge.d.ts.map +1 -1
- package/dist/cjs/types/bridge.js +7 -1
- package/dist/cjs/types/bridge.js.map +1 -1
- package/dist/cjs/types/evaluator.d.ts +24 -14
- package/dist/cjs/types/evaluator.d.ts.map +1 -1
- package/dist/cjs/types/evaluator.js.map +1 -1
- package/dist/cjs/types/index.d.ts +1 -1
- package/dist/cjs/types/index.d.ts.map +1 -1
- package/dist/esm/bridge/isolated-vm-bridge.d.ts +8 -0
- package/dist/esm/bridge/isolated-vm-bridge.d.ts.map +1 -1
- package/dist/esm/bridge/isolated-vm-bridge.js +223 -117
- package/dist/esm/bridge/isolated-vm-bridge.js.map +1 -1
- package/dist/esm/build.tsbuildinfo +1 -1
- package/dist/esm/evaluator/expression-evaluator.d.ts +8 -1
- package/dist/esm/evaluator/expression-evaluator.d.ts.map +1 -1
- package/dist/esm/evaluator/expression-evaluator.js +59 -4
- package/dist/esm/evaluator/expression-evaluator.js.map +1 -1
- package/dist/esm/extensions/object-extensions.d.ts.map +1 -1
- package/dist/esm/extensions/object-extensions.js +8 -4
- package/dist/esm/extensions/object-extensions.js.map +1 -1
- package/dist/esm/index.d.ts +1 -1
- package/dist/esm/index.d.ts.map +1 -1
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/pool/isolate-pool.d.ts +34 -0
- package/dist/esm/pool/isolate-pool.d.ts.map +1 -0
- package/dist/esm/pool/isolate-pool.js +106 -0
- package/dist/esm/pool/isolate-pool.js.map +1 -0
- package/dist/esm/runtime/index.d.ts +9 -0
- package/dist/esm/runtime/index.d.ts.map +1 -1
- package/dist/esm/runtime/index.js.map +1 -1
- package/dist/esm/runtime/lazy-proxy.d.ts +20 -1
- package/dist/esm/runtime/lazy-proxy.d.ts.map +1 -1
- package/dist/esm/runtime/lazy-proxy.js +69 -8
- package/dist/esm/runtime/lazy-proxy.js.map +1 -1
- package/dist/esm/runtime/reset.d.ts.map +1 -1
- package/dist/esm/runtime/reset.js +38 -22
- package/dist/esm/runtime/reset.js.map +1 -1
- package/dist/esm/types/bridge.d.ts +12 -7
- package/dist/esm/types/bridge.d.ts.map +1 -1
- package/dist/esm/types/bridge.js +7 -1
- package/dist/esm/types/bridge.js.map +1 -1
- package/dist/esm/types/evaluator.d.ts +24 -14
- package/dist/esm/types/evaluator.d.ts.map +1 -1
- package/dist/esm/types/evaluator.js.map +1 -1
- package/dist/esm/types/index.d.ts +1 -1
- package/dist/esm/types/index.d.ts.map +1 -1
- package/package.json +6 -4
|
@@ -4,13 +4,15 @@
|
|
|
4
4
|
if (v !== undefined) module.exports = v;
|
|
5
5
|
}
|
|
6
6
|
else if (typeof define === "function" && define.amd) {
|
|
7
|
-
define(["require", "exports", "@n8n/tournament", "./lru-cache"], factory);
|
|
7
|
+
define(["require", "exports", "@n8n/tournament", "../types/bridge", "../pool/isolate-pool", "./lru-cache"], factory);
|
|
8
8
|
}
|
|
9
9
|
})(function (require, exports) {
|
|
10
10
|
"use strict";
|
|
11
11
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
12
|
exports.ExpressionEvaluator = void 0;
|
|
13
13
|
const tournament_1 = require("@n8n/tournament");
|
|
14
|
+
const bridge_1 = require("../types/bridge");
|
|
15
|
+
const isolate_pool_1 = require("../pool/isolate-pool");
|
|
14
16
|
const lru_cache_1 = require("./lru-cache");
|
|
15
17
|
class ExpressionEvaluator {
|
|
16
18
|
config;
|
|
@@ -20,22 +22,53 @@
|
|
|
20
22
|
// Cache: template expression → tournament-transformed JavaScript code
|
|
21
23
|
// Cache hit rate in production: ~99.9% (same expressions repeat within a workflow)
|
|
22
24
|
codeCache;
|
|
25
|
+
pool;
|
|
26
|
+
bridgesByCaller = new WeakMap();
|
|
27
|
+
createBridge;
|
|
23
28
|
constructor(config) {
|
|
24
29
|
this.config = config;
|
|
25
30
|
this.codeCache = new lru_cache_1.LruCache(config.maxCodeCacheSize, () => {
|
|
26
31
|
this.config.observability?.metrics.counter('expression.code_cache.eviction', 1);
|
|
27
32
|
});
|
|
33
|
+
const logger = config.logger ?? bridge_1.DEFAULT_BRIDGE_CONFIG.logger;
|
|
34
|
+
this.createBridge = async () => {
|
|
35
|
+
const bridge = config.createBridge();
|
|
36
|
+
await bridge.initialize();
|
|
37
|
+
return bridge;
|
|
38
|
+
};
|
|
39
|
+
this.pool = new isolate_pool_1.IsolatePool(this.createBridge, config.poolSize ?? 1, (error) => {
|
|
40
|
+
logger.error('[IsolatePool] Failed to replenish bridge', { error });
|
|
41
|
+
config.observability?.metrics.counter('expression.pool.replenish_failed', 1);
|
|
42
|
+
}, logger);
|
|
28
43
|
}
|
|
29
44
|
async initialize() {
|
|
30
|
-
await this.
|
|
45
|
+
await this.pool.initialize();
|
|
31
46
|
}
|
|
32
|
-
|
|
47
|
+
async acquire(caller) {
|
|
48
|
+
if (this.bridgesByCaller.has(caller))
|
|
49
|
+
return;
|
|
50
|
+
let bridge;
|
|
51
|
+
try {
|
|
52
|
+
bridge = this.pool.acquire();
|
|
53
|
+
}
|
|
54
|
+
catch (error) {
|
|
55
|
+
if (error instanceof isolate_pool_1.PoolDisposedError)
|
|
56
|
+
throw error;
|
|
57
|
+
if (!(error instanceof isolate_pool_1.PoolExhaustedError))
|
|
58
|
+
throw error;
|
|
59
|
+
bridge = await this.createBridge();
|
|
60
|
+
}
|
|
61
|
+
this.config.observability?.metrics.counter('expression.pool.acquired', 1);
|
|
62
|
+
this.bridgesByCaller.set(caller, bridge);
|
|
63
|
+
}
|
|
64
|
+
evaluate(expression, data, caller, options) {
|
|
33
65
|
if (this.disposed)
|
|
34
66
|
throw new Error('Evaluator disposed');
|
|
67
|
+
const bridge = this.getBridge(caller);
|
|
35
68
|
// Transform template expression → sanitized JavaScript (cached)
|
|
36
69
|
const transformedCode = this.getTransformedCode(expression);
|
|
37
70
|
try {
|
|
38
|
-
const result =
|
|
71
|
+
const result = bridge.execute(transformedCode, data, {
|
|
39
72
|
timezone: options?.timezone,
|
|
40
73
|
});
|
|
41
74
|
if (this.config.observability) {
|
|
@@ -50,6 +83,28 @@
|
|
|
50
83
|
throw error;
|
|
51
84
|
}
|
|
52
85
|
}
|
|
86
|
+
getBridge(caller) {
|
|
87
|
+
const bridge = this.bridgesByCaller.get(caller);
|
|
88
|
+
if (!bridge) {
|
|
89
|
+
throw new Error('No bridge acquired for this context. Call acquire() first.');
|
|
90
|
+
}
|
|
91
|
+
// If the isolate died mid-execution (e.g. OOM), all remaining expressions
|
|
92
|
+
// in this execution are expected to fail. Recovery is per-execution, not per-expression.
|
|
93
|
+
if (bridge.isDisposed()) {
|
|
94
|
+
throw new Error('Isolate for this caller is no longer available');
|
|
95
|
+
}
|
|
96
|
+
return bridge;
|
|
97
|
+
}
|
|
98
|
+
async release(caller) {
|
|
99
|
+
const bridge = this.bridgesByCaller.get(caller);
|
|
100
|
+
if (!bridge)
|
|
101
|
+
return;
|
|
102
|
+
this.bridgesByCaller.delete(caller);
|
|
103
|
+
await this.pool.release(bridge);
|
|
104
|
+
}
|
|
105
|
+
async waitForReplenishment() {
|
|
106
|
+
await this.pool.waitForReplenishment();
|
|
107
|
+
}
|
|
53
108
|
/**
|
|
54
109
|
* Transform a template expression to executable JavaScript via tournament.
|
|
55
110
|
*
|
|
@@ -86,7 +141,7 @@
|
|
|
86
141
|
this.disposed = true;
|
|
87
142
|
this.codeCache.clear();
|
|
88
143
|
this.config.observability?.metrics.gauge('expression.code_cache.size', 0);
|
|
89
|
-
await this.
|
|
144
|
+
await this.pool.dispose();
|
|
90
145
|
}
|
|
91
146
|
isDisposed() {
|
|
92
147
|
return this.disposed;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"expression-evaluator.js","sourceRoot":"","sources":["../../../src/evaluator/expression-evaluator.ts"],"names":[],"mappings":";;;;;;;;;;;;IAAA,gDAA6C;
|
|
1
|
+
{"version":3,"file":"expression-evaluator.js","sourceRoot":"","sources":["../../../src/evaluator/expression-evaluator.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import type { ExtensionMap } from './extensions';
|
|
2
2
|
export declare function toBoolean(value: boolean): boolean;
|
|
3
|
-
export declare function toInt(value: boolean):
|
|
3
|
+
export declare function toInt(value: boolean): 0 | 1;
|
|
4
4
|
export declare function toDateTime(): undefined;
|
|
5
5
|
export declare const booleanExtensions: ExtensionMap;
|
|
6
6
|
//# sourceMappingURL=boolean-extensions.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"object-extensions.d.ts","sourceRoot":"","sources":["../../../src/extensions/object-extensions.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAmEjD,wBAAgB,OAAO,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAiB7C;yBAjBe,OAAO;;;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"object-extensions.d.ts","sourceRoot":"","sources":["../../../src/extensions/object-extensions.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAmEjD,wBAAgB,OAAO,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAiB7C;yBAjBe,OAAO;;;;;;;;;;;;AA8BvB,wBAAgB,SAAS,CAAC,KAAK,EAAE,MAAM,UAItC;yBAJe,SAAS;;;;;;;;;;;;AAMzB,wBAAgB,YAAY,CAAC,KAAK,EAAE,MAAM,UAEzC;yBAFe,YAAY;;;;;;;;;;;;AAI5B,wBAAgB,KAAK,cAEpB;AAED,wBAAgB,OAAO,cAEtB;AAED,wBAAgB,SAAS,cAExB;AAED,wBAAgB,UAAU,cAEzB;AA+LD,eAAO,MAAM,gBAAgB,EAAE,YAmB9B,CAAC"}
|
|
@@ -95,12 +95,16 @@
|
|
|
95
95
|
// DIVERGENCE from packages/workflow/src/extensions/object-extensions.ts:
|
|
96
96
|
// The original uses URLSearchParams which is a Web API unavailable inside the
|
|
97
97
|
// V8 isolate. encodeURIComponent is an ECMAScript built-in available in all
|
|
98
|
-
// V8 contexts
|
|
98
|
+
// V8 contexts, but it doesn't encode !'()~ which WHATWG requires. The extra
|
|
99
|
+
// replace step covers those characters to match URLSearchParams output.
|
|
100
|
+
function whatwgEncode(str) {
|
|
101
|
+
return encodeURIComponent(str)
|
|
102
|
+
.replace(/%20/g, '+')
|
|
103
|
+
.replace(/[!'()~]/g, (c) => '%' + c.charCodeAt(0).toString(16).toUpperCase());
|
|
104
|
+
}
|
|
99
105
|
function urlEncode(value) {
|
|
100
106
|
return Object.entries(value)
|
|
101
|
-
.map(([k, v]) =>
|
|
102
|
-
'=' +
|
|
103
|
-
encodeURIComponent(String(v)).replace(/%20/g, '+'))
|
|
107
|
+
.map(([k, v]) => whatwgEncode(k) + '=' + whatwgEncode(String(v)))
|
|
104
108
|
.join('&');
|
|
105
109
|
}
|
|
106
110
|
function toJsonString(value) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"object-extensions.js","sourceRoot":"","sources":["../../../src/extensions/object-extensions.ts"],"names":[],"mappings":";;;;;;;;;;;;IAmEA,0BAiBC;
|
|
1
|
+
{"version":3,"file":"object-extensions.js","sourceRoot":"","sources":["../../../src/extensions/object-extensions.ts"],"names":[],"mappings":"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"}
|
package/dist/cjs/index.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
export { ExpressionEvaluator } from './evaluator/expression-evaluator';
|
|
2
2
|
export { IsolatedVmBridge } from './bridge/isolated-vm-bridge';
|
|
3
|
-
export type { IExpressionEvaluator, EvaluatorConfig, WorkflowData, EvaluateOptions, ExecuteOptions, RuntimeBridge, BridgeConfig, ObservabilityProvider, MetricsAPI, TracesAPI, Span, LogsAPI, } from './types';
|
|
3
|
+
export type { IExpressionEvaluator, EvaluatorConfig, WorkflowData, EvaluateOptions, ExecuteOptions, RuntimeBridge, BridgeConfig, Logger, ObservabilityProvider, MetricsAPI, TracesAPI, Span, LogsAPI, } from './types';
|
|
4
4
|
export { ExpressionError, MemoryLimitError, TimeoutError, SecurityViolationError, SyntaxError, } from './types';
|
|
5
5
|
export { extend, extendOptional, EXTENSION_OBJECTS } from './extensions/extend';
|
|
6
6
|
export { ExpressionExtensionError } from './extensions/expression-extension-error';
|
package/dist/cjs/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,mBAAmB,EAAE,MAAM,kCAAkC,CAAC;AAIvE,OAAO,EAAE,gBAAgB,EAAE,MAAM,6BAA6B,CAAC;AAG/D,YAAY,EACX,oBAAoB,EACpB,eAAe,EACf,YAAY,EACZ,eAAe,EACf,cAAc,EACd,aAAa,EACb,YAAY,EACZ,qBAAqB,EACrB,UAAU,EACV,SAAS,EACT,IAAI,EACJ,OAAO,GACP,MAAM,SAAS,CAAC;AAGjB,OAAO,EACN,eAAe,EACf,gBAAgB,EAChB,YAAY,EACZ,sBAAsB,EACtB,WAAW,GACX,MAAM,SAAS,CAAC;AAGjB,OAAO,EAAE,MAAM,EAAE,cAAc,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAChF,OAAO,EAAE,wBAAwB,EAAE,MAAM,yCAAyC,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,mBAAmB,EAAE,MAAM,kCAAkC,CAAC;AAIvE,OAAO,EAAE,gBAAgB,EAAE,MAAM,6BAA6B,CAAC;AAG/D,YAAY,EACX,oBAAoB,EACpB,eAAe,EACf,YAAY,EACZ,eAAe,EACf,cAAc,EACd,aAAa,EACb,YAAY,EACZ,MAAM,EACN,qBAAqB,EACrB,UAAU,EACV,SAAS,EACT,IAAI,EACJ,OAAO,GACP,MAAM,SAAS,CAAC;AAGjB,OAAO,EACN,eAAe,EACf,gBAAgB,EAChB,YAAY,EACZ,sBAAsB,EACtB,WAAW,GACX,MAAM,SAAS,CAAC;AAGjB,OAAO,EAAE,MAAM,EAAE,cAAc,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAChF,OAAO,EAAE,wBAAwB,EAAE,MAAM,yCAAyC,CAAC"}
|
package/dist/cjs/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;IAAA,eAAe;IACf,yEAAuE;IAA9D,2HAAA,mBAAmB,OAAA;IAE5B,uEAAuE;IACvE,6EAA6E;IAC7E,kEAA+D;IAAtD,sHAAA,gBAAgB,OAAA;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;IAAA,eAAe;IACf,yEAAuE;IAA9D,2HAAA,mBAAmB,OAAA;IAE5B,uEAAuE;IACvE,6EAA6E;IAC7E,kEAA+D;IAAtD,sHAAA,gBAAgB,OAAA;IAmBzB,cAAc;IACd,iCAMiB;IALhB,wGAAA,eAAe,OAAA;IACf,yGAAA,gBAAgB,OAAA;IAChB,qGAAA,YAAY,OAAA;IACZ,+GAAA,sBAAsB,OAAA;IACtB,oGAAA,WAAW,OAAA;IAGZ,4BAA4B;IAC5B,8CAAgF;IAAvE,gGAAA,MAAM,OAAA;IAAE,wGAAA,cAAc,OAAA;IAAE,2GAAA,iBAAiB,OAAA;IAClD,sFAAmF;IAA1E,sIAAA,wBAAwB,OAAA"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import type { RuntimeBridge } from '../types';
|
|
2
|
+
import type { Logger } from '../types/bridge';
|
|
3
|
+
export declare class PoolDisposedError extends Error {
|
|
4
|
+
constructor();
|
|
5
|
+
}
|
|
6
|
+
export declare class PoolExhaustedError extends Error {
|
|
7
|
+
constructor();
|
|
8
|
+
}
|
|
9
|
+
export declare class IsolatePool {
|
|
10
|
+
private readonly createBridge;
|
|
11
|
+
private readonly size;
|
|
12
|
+
private readonly onReplenishFailed?;
|
|
13
|
+
private readonly logger?;
|
|
14
|
+
private bridges;
|
|
15
|
+
private disposed;
|
|
16
|
+
/** Number of bridges currently being created. */
|
|
17
|
+
private warming;
|
|
18
|
+
/** In-flight isolate replenishment promises. */
|
|
19
|
+
private replenishPromises;
|
|
20
|
+
constructor(createBridge: () => Promise<RuntimeBridge>, size: number, onReplenishFailed?: ((error: unknown) => void) | undefined, logger?: Logger | undefined);
|
|
21
|
+
initialize(): Promise<void>;
|
|
22
|
+
/**
|
|
23
|
+
* Pops a warm bridge from the pool. Kickstarts replenishment.
|
|
24
|
+
* Throws if disposed or pool is empty. Callers are expected to handle the empty case by falling back to cold-start bridge creation.
|
|
25
|
+
*/
|
|
26
|
+
acquire(): RuntimeBridge;
|
|
27
|
+
release(bridge: RuntimeBridge): Promise<void>;
|
|
28
|
+
dispose(): Promise<void>;
|
|
29
|
+
private static readonly MAX_REPLENISH_RETRIES;
|
|
30
|
+
private static readonly REPLENISH_RETRY_BASE_MS;
|
|
31
|
+
waitForReplenishment(): Promise<void>;
|
|
32
|
+
private replenish;
|
|
33
|
+
}
|
|
34
|
+
//# sourceMappingURL=isolate-pool.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"isolate-pool.d.ts","sourceRoot":"","sources":["../../../src/pool/isolate-pool.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAC9C,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AAE9C,qBAAa,iBAAkB,SAAQ,KAAK;;CAK3C;AAED,qBAAa,kBAAmB,SAAQ,KAAK;;CAK5C;AAED,qBAAa,WAAW;IAStB,OAAO,CAAC,QAAQ,CAAC,YAAY;IAC7B,OAAO,CAAC,QAAQ,CAAC,IAAI;IACrB,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAC;IACnC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC;IAXzB,OAAO,CAAC,OAAO,CAAuB;IACtC,OAAO,CAAC,QAAQ,CAAS;IACzB,iDAAiD;IACjD,OAAO,CAAC,OAAO,CAAK;IACpB,gDAAgD;IAChD,OAAO,CAAC,iBAAiB,CAA4B;gBAGnC,YAAY,EAAE,MAAM,OAAO,CAAC,aAAa,CAAC,EAC1C,IAAI,EAAE,MAAM,EACZ,iBAAiB,CAAC,GAAE,CAAC,KAAK,EAAE,OAAO,KAAK,IAAI,aAAA,EAC5C,MAAM,CAAC,EAAE,MAAM,YAAA;IAG3B,UAAU;IAoBhB;;;OAGG;IACH,OAAO,IAAI,aAAa;IAQlB,OAAO,CAAC,MAAM,EAAE,aAAa;IAK7B,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAO9B,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,qBAAqB,CAAK;IAClD,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,uBAAuB,CAAO;IAEhD,oBAAoB,IAAI,OAAO,CAAC,IAAI,CAAC;IAM3C,OAAO,CAAC,SAAS;CA4BjB"}
|
|
@@ -0,0 +1,122 @@
|
|
|
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"], factory);
|
|
8
|
+
}
|
|
9
|
+
})(function (require, exports) {
|
|
10
|
+
"use strict";
|
|
11
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
+
exports.IsolatePool = exports.PoolExhaustedError = exports.PoolDisposedError = void 0;
|
|
13
|
+
class PoolDisposedError extends Error {
|
|
14
|
+
constructor() {
|
|
15
|
+
super('Pool is disposed');
|
|
16
|
+
this.name = 'PoolDisposedError';
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
exports.PoolDisposedError = PoolDisposedError;
|
|
20
|
+
class PoolExhaustedError extends Error {
|
|
21
|
+
constructor() {
|
|
22
|
+
super('No isolate bridge available in pool');
|
|
23
|
+
this.name = 'PoolExhaustedError';
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
exports.PoolExhaustedError = PoolExhaustedError;
|
|
27
|
+
class IsolatePool {
|
|
28
|
+
createBridge;
|
|
29
|
+
size;
|
|
30
|
+
onReplenishFailed;
|
|
31
|
+
logger;
|
|
32
|
+
bridges = [];
|
|
33
|
+
disposed = false;
|
|
34
|
+
/** Number of bridges currently being created. */
|
|
35
|
+
warming = 0;
|
|
36
|
+
/** In-flight isolate replenishment promises. */
|
|
37
|
+
replenishPromises = new Set();
|
|
38
|
+
constructor(createBridge, size, onReplenishFailed, logger) {
|
|
39
|
+
this.createBridge = createBridge;
|
|
40
|
+
this.size = size;
|
|
41
|
+
this.onReplenishFailed = onReplenishFailed;
|
|
42
|
+
this.logger = logger;
|
|
43
|
+
}
|
|
44
|
+
async initialize() {
|
|
45
|
+
const results = await Promise.allSettled(Array.from({ length: this.size }, () => this.createBridge()));
|
|
46
|
+
for (const result of results) {
|
|
47
|
+
if (result.status === 'fulfilled') {
|
|
48
|
+
this.bridges.push(result.value);
|
|
49
|
+
}
|
|
50
|
+
else {
|
|
51
|
+
this.logger?.error('[IsolatePool] Failed to create bridge during init', {
|
|
52
|
+
error: result.reason,
|
|
53
|
+
});
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
if (this.bridges.length === 0) {
|
|
57
|
+
throw new Error('IsolatePool failed to create any bridges');
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* Pops a warm bridge from the pool. Kickstarts replenishment.
|
|
62
|
+
* Throws if disposed or pool is empty. Callers are expected to handle the empty case by falling back to cold-start bridge creation.
|
|
63
|
+
*/
|
|
64
|
+
acquire() {
|
|
65
|
+
if (this.disposed)
|
|
66
|
+
throw new PoolDisposedError();
|
|
67
|
+
const bridge = this.bridges.shift();
|
|
68
|
+
if (!bridge)
|
|
69
|
+
throw new PoolExhaustedError();
|
|
70
|
+
void this.replenish();
|
|
71
|
+
return bridge;
|
|
72
|
+
}
|
|
73
|
+
async release(bridge) {
|
|
74
|
+
if (!bridge.isDisposed())
|
|
75
|
+
await bridge.dispose();
|
|
76
|
+
this.replenish();
|
|
77
|
+
}
|
|
78
|
+
async dispose() {
|
|
79
|
+
this.disposed = true;
|
|
80
|
+
await Promise.all([...this.replenishPromises]);
|
|
81
|
+
await Promise.all(this.bridges.map((b) => b.dispose()));
|
|
82
|
+
this.bridges = [];
|
|
83
|
+
}
|
|
84
|
+
static MAX_REPLENISH_RETRIES = 3;
|
|
85
|
+
static REPLENISH_RETRY_BASE_MS = 500;
|
|
86
|
+
async waitForReplenishment() {
|
|
87
|
+
if (this.replenishPromises.size > 0) {
|
|
88
|
+
await Promise.all([...this.replenishPromises]);
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
replenish(attempt = 0) {
|
|
92
|
+
if (this.disposed)
|
|
93
|
+
return;
|
|
94
|
+
if (this.bridges.length + this.warming >= this.size)
|
|
95
|
+
return;
|
|
96
|
+
this.warming++;
|
|
97
|
+
let promise;
|
|
98
|
+
promise = this.createBridge()
|
|
99
|
+
.then((bridge) => {
|
|
100
|
+
this.warming--;
|
|
101
|
+
this.replenishPromises.delete(promise);
|
|
102
|
+
if (this.disposed) {
|
|
103
|
+
void bridge.dispose();
|
|
104
|
+
return;
|
|
105
|
+
}
|
|
106
|
+
this.bridges.push(bridge);
|
|
107
|
+
})
|
|
108
|
+
.catch((error) => {
|
|
109
|
+
this.warming--;
|
|
110
|
+
this.replenishPromises.delete(promise);
|
|
111
|
+
this.onReplenishFailed?.(error);
|
|
112
|
+
if (attempt < IsolatePool.MAX_REPLENISH_RETRIES) {
|
|
113
|
+
const delay = IsolatePool.REPLENISH_RETRY_BASE_MS * 2 ** attempt;
|
|
114
|
+
setTimeout(() => this.replenish(attempt + 1), delay).unref();
|
|
115
|
+
}
|
|
116
|
+
});
|
|
117
|
+
this.replenishPromises.add(promise);
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
exports.IsolatePool = IsolatePool;
|
|
121
|
+
});
|
|
122
|
+
//# sourceMappingURL=isolate-pool.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"isolate-pool.js","sourceRoot":"","sources":["../../../src/pool/isolate-pool.ts"],"names":[],"mappings":"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"}
|
|
@@ -28,6 +28,15 @@ declare global {
|
|
|
28
28
|
var $now: import('luxon').DateTime;
|
|
29
29
|
var $today: import('luxon').DateTime;
|
|
30
30
|
var $items: unknown;
|
|
31
|
+
var $execution: unknown;
|
|
32
|
+
var $vars: unknown;
|
|
33
|
+
var $secrets: unknown;
|
|
34
|
+
var $executionId: string | undefined;
|
|
35
|
+
var $resumeWebhookUrl: string | undefined;
|
|
36
|
+
var $webhookId: string | undefined;
|
|
37
|
+
var $nodeId: string | undefined;
|
|
38
|
+
var $nodeVersion: number | undefined;
|
|
39
|
+
var $: (nodeName: string) => unknown;
|
|
31
40
|
}
|
|
32
41
|
}
|
|
33
42
|
export {};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/runtime/index.ts"],"names":[],"mappings":"AAUA,OAAO,CAAC,MAAM,CAAC;IACd,UAAU,UAAU,CAAC;QAEpB,IAAI,gBAAgB,EAAE,GAAG,CAAC;QAC1B,IAAI,iBAAiB,EAAE,GAAG,CAAC;QAC3B,IAAI,oBAAoB,EAAE,GAAG,CAAC;QAG9B,IAAI,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QAGpC,IAAI,mBAAmB,EAAE,CAAC,QAAQ,CAAC,EAAE,MAAM,EAAE,KAAK,GAAG,CAAC;QAGtD,IAAI,gBAAgB,EAAE,MAAM,IAAI,CAAC;QAGjC,IAAI,UAAU,EAAE,OAAO,MAAM,CAAC;QAC9B,IAAI,SAAS,EAAE,OAAO,KAAK,CAAC;QAG5B,IAAI,QAAQ,EAAE,cAAc,OAAO,EAAE,QAAQ,CAAC;QAC9C,IAAI,QAAQ,EAAE,cAAc,OAAO,EAAE,QAAQ,CAAC;QAC9C,IAAI,QAAQ,EAAE,cAAc,OAAO,EAAE,QAAQ,CAAC;QAC9C,IAAI,oBAAoB,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,OAAO,CAAC;QACtD,IAAI,MAAM,EAAE,cAAc,sBAAsB,EAAE,MAAM,CAAC;QACzD,IAAI,cAAc,EAAE,cAAc,sBAAsB,EAAE,cAAc,CAAC;QAGzE,IAAI,KAAK,EAAE,OAAO,CAAC;QACnB,IAAI,OAAO,EAAE,OAAO,CAAC;QACrB,IAAI,MAAM,EAAE,OAAO,CAAC;QACpB,IAAI,KAAK,EAAE,OAAO,CAAC;QACnB,IAAI,UAAU,EAAE,OAAO,CAAC;QACxB,IAAI,SAAS,EAAE,OAAO,CAAC;QACvB,IAAI,SAAS,EAAE,OAAO,CAAC;QACvB,IAAI,KAAK,EAAE,OAAO,CAAC;QACnB,IAAI,IAAI,EAAE,OAAO,CAAC;QAClB,IAAI,SAAS,EAAE,MAAM,GAAG,SAAS,CAAC;QAClC,IAAI,UAAU,EAAE,MAAM,GAAG,SAAS,CAAC;QACnC,IAAI,IAAI,EAAE,OAAO,OAAO,EAAE,QAAQ,CAAC;QACnC,IAAI,MAAM,EAAE,OAAO,OAAO,EAAE,QAAQ,CAAC;QACrC,IAAI,MAAM,EAAE,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/runtime/index.ts"],"names":[],"mappings":"AAUA,OAAO,CAAC,MAAM,CAAC;IACd,UAAU,UAAU,CAAC;QAEpB,IAAI,gBAAgB,EAAE,GAAG,CAAC;QAC1B,IAAI,iBAAiB,EAAE,GAAG,CAAC;QAC3B,IAAI,oBAAoB,EAAE,GAAG,CAAC;QAG9B,IAAI,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QAGpC,IAAI,mBAAmB,EAAE,CAAC,QAAQ,CAAC,EAAE,MAAM,EAAE,KAAK,GAAG,CAAC;QAGtD,IAAI,gBAAgB,EAAE,MAAM,IAAI,CAAC;QAGjC,IAAI,UAAU,EAAE,OAAO,MAAM,CAAC;QAC9B,IAAI,SAAS,EAAE,OAAO,KAAK,CAAC;QAG5B,IAAI,QAAQ,EAAE,cAAc,OAAO,EAAE,QAAQ,CAAC;QAC9C,IAAI,QAAQ,EAAE,cAAc,OAAO,EAAE,QAAQ,CAAC;QAC9C,IAAI,QAAQ,EAAE,cAAc,OAAO,EAAE,QAAQ,CAAC;QAC9C,IAAI,oBAAoB,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,OAAO,CAAC;QACtD,IAAI,MAAM,EAAE,cAAc,sBAAsB,EAAE,MAAM,CAAC;QACzD,IAAI,cAAc,EAAE,cAAc,sBAAsB,EAAE,cAAc,CAAC;QAGzE,IAAI,KAAK,EAAE,OAAO,CAAC;QACnB,IAAI,OAAO,EAAE,OAAO,CAAC;QACrB,IAAI,MAAM,EAAE,OAAO,CAAC;QACpB,IAAI,KAAK,EAAE,OAAO,CAAC;QACnB,IAAI,UAAU,EAAE,OAAO,CAAC;QACxB,IAAI,SAAS,EAAE,OAAO,CAAC;QACvB,IAAI,SAAS,EAAE,OAAO,CAAC;QACvB,IAAI,KAAK,EAAE,OAAO,CAAC;QACnB,IAAI,IAAI,EAAE,OAAO,CAAC;QAClB,IAAI,SAAS,EAAE,MAAM,GAAG,SAAS,CAAC;QAClC,IAAI,UAAU,EAAE,MAAM,GAAG,SAAS,CAAC;QACnC,IAAI,IAAI,EAAE,OAAO,OAAO,EAAE,QAAQ,CAAC;QACnC,IAAI,MAAM,EAAE,OAAO,OAAO,EAAE,QAAQ,CAAC;QACrC,IAAI,MAAM,EAAE,OAAO,CAAC;QACpB,IAAI,UAAU,EAAE,OAAO,CAAC;QACxB,IAAI,KAAK,EAAE,OAAO,CAAC;QACnB,IAAI,QAAQ,EAAE,OAAO,CAAC;QACtB,IAAI,YAAY,EAAE,MAAM,GAAG,SAAS,CAAC;QACrC,IAAI,iBAAiB,EAAE,MAAM,GAAG,SAAS,CAAC;QAC1C,IAAI,UAAU,EAAE,MAAM,GAAG,SAAS,CAAC;QACnC,IAAI,OAAO,EAAE,MAAM,GAAG,SAAS,CAAC;QAChC,IAAI,YAAY,EAAE,MAAM,GAAG,SAAS,CAAC;QACrC,IAAI,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,OAAO,CAAC;KACrC;CACD"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/runtime/index.ts"],"names":[],"mappings":";;;;;;;;;;;IAAA,iCAAqD;IAErD,iDAA8D;IAE9D,iDAAwE;IACxE,6CAAmD;IACnD,mCAA2C;IAC3C,2CAAmD;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/runtime/index.ts"],"names":[],"mappings":";;;;;;;;;;;IAAA,iCAAqD;IAErD,iDAA8D;IAE9D,iDAAwE;IACxE,6CAAmD;IACnD,mCAA2C;IAC3C,2CAAmD;IA0DnD,+EAA+E;IAC/E,gBAAgB;IAChB,+EAA+E;IAE/E,gEAAgE;IAChE,UAAU,CAAC,MAAM,GAAG,eAAM,CAAC;IAC3B,UAAU,CAAC,cAAc,GAAG,uBAAc,CAAC;IAC3C,UAAU,CAAC,QAAQ,GAAG,gBAAQ,CAAC;IAC/B,UAAU,CAAC,QAAQ,GAAG,gBAAQ,CAAC;IAC/B,UAAU,CAAC,QAAQ,GAAG,gBAAQ,CAAC;IAE/B,+EAA+E;IAC/E,gDAAgD;IAChD,+EAA+E;IAE/E,UAAU,CAAC,UAAU,GAAG,yBAAU,CAAC;IACnC,UAAU,CAAC,SAAS,GAAG,wBAAS,CAAC;IAChC,UAAkB,CAAC,eAAe,GAAG,8BAAe,CAAC;IAEtD,UAAU,CAAC,mBAAmB,GAAG,gCAAmB,CAAC;IACrD,UAAU,CAAC,gBAAgB,GAAG,wBAAgB,CAAC;IAC/C,UAAU,CAAC,oBAAoB,GAAG,gCAAoB,CAAC;IAEvD,wFAAwF;IACxF,UAAU,CAAC,MAAM,GAAG,EAAE,CAAC"}
|
|
@@ -1,3 +1,22 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Serialized error sentinel returned by host-side bridge callbacks.
|
|
3
|
+
* When a callback throws, the bridge catches the error and returns this
|
|
4
|
+
* sentinel instead of letting it cross the isolate boundary (which strips
|
|
5
|
+
* custom class identity and properties).
|
|
6
|
+
*/
|
|
7
|
+
export interface ErrorSentinel {
|
|
8
|
+
__isError: true;
|
|
9
|
+
name: string;
|
|
10
|
+
message: string;
|
|
11
|
+
stack?: string;
|
|
12
|
+
extra?: Record<string, unknown>;
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* If `value` is an error sentinel from a host-side callback, throw it
|
|
16
|
+
* directly. The isolate's outer try-catch will detect __isError and
|
|
17
|
+
* return it as the result. Error reconstruction happens on the host only.
|
|
18
|
+
*/
|
|
19
|
+
export declare function throwIfErrorSentinel(value: unknown): void;
|
|
1
20
|
/** Returns true if `obj` is a deep lazy proxy created by createDeepLazyProxy. */
|
|
2
21
|
export declare function isLazyProxy(obj: unknown): boolean;
|
|
3
22
|
/** Returns the basePath the proxy was created with, or undefined if not a proxy. */
|
|
@@ -18,5 +37,5 @@ export declare function getProxyPath(obj: object): string[] | undefined;
|
|
|
18
37
|
* @param basePath - Current path in object tree (e.g., ['$json', 'user'])
|
|
19
38
|
* @returns Proxy object with lazy loading behavior
|
|
20
39
|
*/
|
|
21
|
-
export declare function createDeepLazyProxy(basePath?: string[]): any;
|
|
40
|
+
export declare function createDeepLazyProxy(basePath?: string[], knownKeys?: string[]): any;
|
|
22
41
|
//# sourceMappingURL=lazy-proxy.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"lazy-proxy.d.ts","sourceRoot":"","sources":["../../../src/runtime/lazy-proxy.ts"],"names":[],"mappings":"AAYA,iFAAiF;AACjF,wBAAgB,WAAW,CAAC,GAAG,EAAE,OAAO,GAAG,OAAO,CAEjD;AAED,oFAAoF;AACpF,wBAAgB,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,SAAS,CAE9D;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,mBAAmB,CAAC,QAAQ,GAAE,MAAM,EAAO,GAAG,GAAG,
|
|
1
|
+
{"version":3,"file":"lazy-proxy.d.ts","sourceRoot":"","sources":["../../../src/runtime/lazy-proxy.ts"],"names":[],"mappings":"AAYA;;;;;GAKG;AACH,MAAM,WAAW,aAAa;IAC7B,SAAS,EAAE,IAAI,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAChC;AAsBD;;;;GAIG;AACH,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,OAAO,GAAG,IAAI,CAKzD;AAED,iFAAiF;AACjF,wBAAgB,WAAW,CAAC,GAAG,EAAE,OAAO,GAAG,OAAO,CAEjD;AAED,oFAAoF;AACpF,wBAAgB,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,SAAS,CAE9D;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,mBAAmB,CAAC,QAAQ,GAAE,MAAM,EAAO,EAAE,SAAS,CAAC,EAAE,MAAM,EAAE,GAAG,GAAG,CAkMtF"}
|
|
@@ -14,6 +14,7 @@
|
|
|
14
14
|
})(function (require, exports) {
|
|
15
15
|
"use strict";
|
|
16
16
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
+
exports.throwIfErrorSentinel = throwIfErrorSentinel;
|
|
17
18
|
exports.isLazyProxy = isLazyProxy;
|
|
18
19
|
exports.getProxyPath = getProxyPath;
|
|
19
20
|
exports.createDeepLazyProxy = createDeepLazyProxy;
|
|
@@ -22,6 +23,26 @@
|
|
|
22
23
|
// expression code. Avoids shadowing user data keys like __isProxy / __path.
|
|
23
24
|
// ---------------------------------------------------------------------------
|
|
24
25
|
const proxyPaths = new WeakMap();
|
|
26
|
+
function isObjectMetadata(value) {
|
|
27
|
+
return (typeof value === 'object' &&
|
|
28
|
+
value !== null &&
|
|
29
|
+
'__isObject' in value &&
|
|
30
|
+
value.__isObject === true);
|
|
31
|
+
}
|
|
32
|
+
function isErrorSentinel(value) {
|
|
33
|
+
return (typeof value === 'object' && value !== null && '__isError' in value && value.__isError === true);
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* If `value` is an error sentinel from a host-side callback, throw it
|
|
37
|
+
* directly. The isolate's outer try-catch will detect __isError and
|
|
38
|
+
* return it as the result. Error reconstruction happens on the host only.
|
|
39
|
+
*/
|
|
40
|
+
function throwIfErrorSentinel(value) {
|
|
41
|
+
if (isErrorSentinel(value)) {
|
|
42
|
+
// eslint-disable-next-line @typescript-eslint/no-throw-literal -- sentinel is reconstructed on the host
|
|
43
|
+
throw value;
|
|
44
|
+
}
|
|
45
|
+
}
|
|
25
46
|
/** Returns true if `obj` is a deep lazy proxy created by createDeepLazyProxy. */
|
|
26
47
|
function isLazyProxy(obj) {
|
|
27
48
|
return typeof obj === 'object' && obj !== null && proxyPaths.has(obj);
|
|
@@ -46,8 +67,38 @@
|
|
|
46
67
|
* @param basePath - Current path in object tree (e.g., ['$json', 'user'])
|
|
47
68
|
* @returns Proxy object with lazy loading behavior
|
|
48
69
|
*/
|
|
49
|
-
function createDeepLazyProxy(basePath = []) {
|
|
70
|
+
function createDeepLazyProxy(basePath = [], knownKeys) {
|
|
71
|
+
// Cache for keys fetched from the bridge (root proxies without knownKeys).
|
|
72
|
+
// Shared between ownKeys and getOwnPropertyDescriptor for consistency.
|
|
73
|
+
let fetchedKeys;
|
|
74
|
+
function resolveKeys() {
|
|
75
|
+
if (knownKeys)
|
|
76
|
+
return knownKeys;
|
|
77
|
+
if (fetchedKeys)
|
|
78
|
+
return fetchedKeys;
|
|
79
|
+
const value = globalThis.__getValueAtPath.applySync(null, [basePath], {
|
|
80
|
+
arguments: { copy: true },
|
|
81
|
+
result: { copy: true },
|
|
82
|
+
});
|
|
83
|
+
throwIfErrorSentinel(value);
|
|
84
|
+
if (isObjectMetadata(value)) {
|
|
85
|
+
fetchedKeys = value.__keys;
|
|
86
|
+
return fetchedKeys;
|
|
87
|
+
}
|
|
88
|
+
return [];
|
|
89
|
+
}
|
|
50
90
|
const proxy = new Proxy({}, {
|
|
91
|
+
ownKeys() {
|
|
92
|
+
return resolveKeys();
|
|
93
|
+
},
|
|
94
|
+
getOwnPropertyDescriptor(_target, prop) {
|
|
95
|
+
if (typeof prop === 'symbol')
|
|
96
|
+
return undefined;
|
|
97
|
+
if (resolveKeys().includes(prop)) {
|
|
98
|
+
return { configurable: true, enumerable: true, writable: false };
|
|
99
|
+
}
|
|
100
|
+
return undefined;
|
|
101
|
+
},
|
|
51
102
|
get(target, prop) {
|
|
52
103
|
// Handle Symbol properties - return undefined
|
|
53
104
|
// Symbols like Symbol.toStringTag are accessed internally
|
|
@@ -84,14 +135,20 @@
|
|
|
84
135
|
target[prop] = value;
|
|
85
136
|
return value;
|
|
86
137
|
}
|
|
138
|
+
// Handle errors serialized by host-side callbacks — reconstruct and throw
|
|
139
|
+
// so the isolate's outer try-catch can serialize them back via __reportError
|
|
140
|
+
throwIfErrorSentinel(value);
|
|
87
141
|
// Handle functions - metadata: { __isFunction: true, __name: string }
|
|
88
142
|
if (value && typeof value === 'object' && value.__isFunction) {
|
|
89
143
|
// Create function wrapper that calls back to parent
|
|
90
144
|
target[prop] = function (...args) {
|
|
91
|
-
|
|
145
|
+
const result = globalThis.__callFunctionAtPath.applySync(null, [path, ...args], {
|
|
92
146
|
arguments: { copy: true },
|
|
93
147
|
result: { copy: true },
|
|
94
148
|
});
|
|
149
|
+
// Check if the host-side function threw — reconstruct and throw
|
|
150
|
+
throwIfErrorSentinel(result);
|
|
151
|
+
return result;
|
|
95
152
|
};
|
|
96
153
|
return target[prop];
|
|
97
154
|
}
|
|
@@ -126,15 +183,17 @@
|
|
|
126
183
|
arguments: { copy: true },
|
|
127
184
|
result: { copy: true },
|
|
128
185
|
});
|
|
186
|
+
throwIfErrorSentinel(element);
|
|
129
187
|
// Handle element metadata (arrays and objects need proxies)
|
|
130
188
|
if (element && typeof element === 'object' && element.__isArray) {
|
|
131
189
|
const elementPath = [...path, String(index)];
|
|
132
190
|
arrTarget[arrProp] = createDeepLazyProxy(elementPath);
|
|
133
191
|
}
|
|
134
|
-
else if (element
|
|
135
|
-
// Object metadata: create nested proxy
|
|
192
|
+
else if (isObjectMetadata(element)) {
|
|
193
|
+
// Object metadata: create nested proxy, passing known keys to
|
|
194
|
+
// avoid an extra __getValueAtPath round-trip for ownKeys/Object.keys()
|
|
136
195
|
const elementPath = [...path, String(index)];
|
|
137
|
-
arrTarget[arrProp] = createDeepLazyProxy(elementPath);
|
|
196
|
+
arrTarget[arrProp] = createDeepLazyProxy(elementPath, element.__keys);
|
|
138
197
|
}
|
|
139
198
|
else {
|
|
140
199
|
// Primitive element
|
|
@@ -152,9 +211,9 @@
|
|
|
152
211
|
return target[prop];
|
|
153
212
|
}
|
|
154
213
|
// Handle objects - metadata: { __isObject: true, __keys: string[] }
|
|
155
|
-
if (value
|
|
156
|
-
// Create nested proxy for recursive lazy loading
|
|
157
|
-
target[prop] = createDeepLazyProxy(path);
|
|
214
|
+
if (isObjectMetadata(value)) {
|
|
215
|
+
// Create nested proxy for recursive lazy loading, passing known keys
|
|
216
|
+
target[prop] = createDeepLazyProxy(path, value.__keys);
|
|
158
217
|
return target[prop];
|
|
159
218
|
}
|
|
160
219
|
// Primitive value - cache and return
|
|
@@ -176,6 +235,9 @@
|
|
|
176
235
|
arguments: { copy: true },
|
|
177
236
|
result: { copy: true },
|
|
178
237
|
});
|
|
238
|
+
// Handle errors serialized by host-side callbacks — reconstruct and throw
|
|
239
|
+
// so the isolate's outer try-catch can serialize them back via __reportError
|
|
240
|
+
throwIfErrorSentinel(value);
|
|
179
241
|
// Property exists if value is not undefined
|
|
180
242
|
// Note: null values mean property exists but is null
|
|
181
243
|
return value !== undefined;
|