tywrap 0.1.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/LICENSE +21 -0
- package/README.md +319 -0
- package/dist/cli.d.ts +3 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +263 -0
- package/dist/cli.js.map +1 -0
- package/dist/config/index.d.ts +41 -0
- package/dist/config/index.d.ts.map +1 -0
- package/dist/config/index.js +234 -0
- package/dist/config/index.js.map +1 -0
- package/dist/core/analyzer.d.ts +63 -0
- package/dist/core/analyzer.d.ts.map +1 -0
- package/dist/core/analyzer.js +676 -0
- package/dist/core/analyzer.js.map +1 -0
- package/dist/core/discovery.d.ts +85 -0
- package/dist/core/discovery.d.ts.map +1 -0
- package/dist/core/discovery.js +344 -0
- package/dist/core/discovery.js.map +1 -0
- package/dist/core/generator.d.ts +37 -0
- package/dist/core/generator.d.ts.map +1 -0
- package/dist/core/generator.js +368 -0
- package/dist/core/generator.js.map +1 -0
- package/dist/core/mapper.d.ts +40 -0
- package/dist/core/mapper.d.ts.map +1 -0
- package/dist/core/mapper.js +401 -0
- package/dist/core/mapper.js.map +1 -0
- package/dist/core/validation.d.ts +79 -0
- package/dist/core/validation.d.ts.map +1 -0
- package/dist/core/validation.js +486 -0
- package/dist/core/validation.js.map +1 -0
- package/dist/index.d.ts +26 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +29 -0
- package/dist/index.js.map +1 -0
- package/dist/runtime/base.d.ts +12 -0
- package/dist/runtime/base.d.ts.map +1 -0
- package/dist/runtime/base.js +6 -0
- package/dist/runtime/base.js.map +1 -0
- package/dist/runtime/errors.d.ts +17 -0
- package/dist/runtime/errors.d.ts.map +1 -0
- package/dist/runtime/errors.js +21 -0
- package/dist/runtime/errors.js.map +1 -0
- package/dist/runtime/http.d.ts +22 -0
- package/dist/runtime/http.d.ts.map +1 -0
- package/dist/runtime/http.js +79 -0
- package/dist/runtime/http.js.map +1 -0
- package/dist/runtime/index.d.ts +8 -0
- package/dist/runtime/index.d.ts.map +1 -0
- package/dist/runtime/index.js +17 -0
- package/dist/runtime/index.js.map +1 -0
- package/dist/runtime/node.d.ts +48 -0
- package/dist/runtime/node.d.ts.map +1 -0
- package/dist/runtime/node.js +328 -0
- package/dist/runtime/node.js.map +1 -0
- package/dist/runtime/optimized-node.d.ts +131 -0
- package/dist/runtime/optimized-node.d.ts.map +1 -0
- package/dist/runtime/optimized-node.js +622 -0
- package/dist/runtime/optimized-node.js.map +1 -0
- package/dist/runtime/protocol.d.ts +3 -0
- package/dist/runtime/protocol.d.ts.map +1 -0
- package/dist/runtime/protocol.js +3 -0
- package/dist/runtime/protocol.js.map +1 -0
- package/dist/runtime/pyodide.d.ts +27 -0
- package/dist/runtime/pyodide.d.ts.map +1 -0
- package/dist/runtime/pyodide.js +191 -0
- package/dist/runtime/pyodide.js.map +1 -0
- package/dist/tools/python_suite.js +173 -0
- package/dist/tools/python_suite.js.map +1 -0
- package/dist/types/index.d.ts +299 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +5 -0
- package/dist/types/index.js.map +1 -0
- package/dist/tywrap.d.ts +29 -0
- package/dist/tywrap.d.ts.map +1 -0
- package/dist/tywrap.js +589 -0
- package/dist/tywrap.js.map +1 -0
- package/dist/utils/bundle-optimizer.d.ts +182 -0
- package/dist/utils/bundle-optimizer.d.ts.map +1 -0
- package/dist/utils/bundle-optimizer.js +680 -0
- package/dist/utils/bundle-optimizer.js.map +1 -0
- package/dist/utils/cache.d.ts +149 -0
- package/dist/utils/cache.d.ts.map +1 -0
- package/dist/utils/cache.js +492 -0
- package/dist/utils/cache.js.map +1 -0
- package/dist/utils/codec.d.ts +94 -0
- package/dist/utils/codec.d.ts.map +1 -0
- package/dist/utils/codec.js +150 -0
- package/dist/utils/codec.js.map +1 -0
- package/dist/utils/logger.d.ts +42 -0
- package/dist/utils/logger.d.ts.map +1 -0
- package/dist/utils/logger.js +140 -0
- package/dist/utils/logger.js.map +1 -0
- package/dist/utils/memory-profiler.d.ts +123 -0
- package/dist/utils/memory-profiler.d.ts.map +1 -0
- package/dist/utils/memory-profiler.js +426 -0
- package/dist/utils/memory-profiler.js.map +1 -0
- package/dist/utils/parallel-processor.d.ts +146 -0
- package/dist/utils/parallel-processor.d.ts.map +1 -0
- package/dist/utils/parallel-processor.js +636 -0
- package/dist/utils/parallel-processor.js.map +1 -0
- package/dist/utils/python.d.ts +8 -0
- package/dist/utils/python.d.ts.map +1 -0
- package/dist/utils/python.js +56 -0
- package/dist/utils/python.js.map +1 -0
- package/dist/utils/runtime.d.ts +153 -0
- package/dist/utils/runtime.d.ts.map +1 -0
- package/dist/utils/runtime.js +519 -0
- package/dist/utils/runtime.js.map +1 -0
- package/package.json +136 -0
- package/runtime/python_bridge.py +476 -0
- package/src/cli.ts +331 -0
- package/src/config/index.ts +289 -0
- package/src/core/analyzer.ts +788 -0
- package/src/core/discovery.ts +415 -0
- package/src/core/generator.ts +447 -0
- package/src/core/mapper.ts +504 -0
- package/src/core/validation.ts +693 -0
- package/src/index.ts +83 -0
- package/src/runtime/base.ts +32 -0
- package/src/runtime/errors.ts +19 -0
- package/src/runtime/http.ts +132 -0
- package/src/runtime/index.ts +24 -0
- package/src/runtime/node.ts +431 -0
- package/src/runtime/optimized-node.ts +838 -0
- package/src/runtime/protocol.ts +2 -0
- package/src/runtime/pyodide.ts +228 -0
- package/src/types/global.d.ts +60 -0
- package/src/types/index.ts +410 -0
- package/src/tywrap.ts +669 -0
- package/src/utils/bundle-optimizer.ts +876 -0
- package/src/utils/cache.ts +634 -0
- package/src/utils/codec.ts +275 -0
- package/src/utils/logger.ts +201 -0
- package/src/utils/memory-profiler.ts +582 -0
- package/src/utils/parallel-processor.ts +879 -0
- package/src/utils/python.ts +79 -0
- package/src/utils/runtime.ts +616 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"errors.js","sourceRoot":"","sources":["../../src/runtime/errors.ts"],"names":[],"mappings":"AAAA,MAAM,OAAO,WAAY,SAAQ,KAAK;IACpC,IAAI,CAAU;IACd,YAAY,OAAe,EAAE,OAA4C;QACvE,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC;QAC5B,IAAI,CAAC,IAAI,GAAG,OAAO,EAAE,IAAI,CAAC;QAC1B,IAAI,OAAO,EAAE,KAAK,EAAE,CAAC;YAClB,IAAoC,CAAC,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC;QAC9D,CAAC;IACH,CAAC;CACF;AAED,MAAM,OAAO,mBAAoB,SAAQ,WAAW;CAAG;AACvD,MAAM,OAAO,kBAAmB,SAAQ,WAAW;CAAG;AACtD,MAAM,OAAO,mBAAoB,SAAQ,WAAW;CAAG;AAEvD,MAAM,OAAO,oBAAqB,SAAQ,WAAW;IACnD,SAAS,CAAU;CACpB"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* HTTP runtime bridge
|
|
3
|
+
*/
|
|
4
|
+
import { RuntimeBridge } from './base.js';
|
|
5
|
+
export interface HttpBridgeOptions {
|
|
6
|
+
baseURL: string;
|
|
7
|
+
headers?: Record<string, string>;
|
|
8
|
+
timeoutMs?: number;
|
|
9
|
+
}
|
|
10
|
+
export declare class HttpBridge extends RuntimeBridge {
|
|
11
|
+
private readonly baseURL;
|
|
12
|
+
private readonly headers;
|
|
13
|
+
private readonly timeoutMs;
|
|
14
|
+
constructor(options?: HttpBridgeOptions);
|
|
15
|
+
call<T = unknown>(module: string, functionName: string, args: unknown[], kwargs?: Record<string, unknown>): Promise<T>;
|
|
16
|
+
instantiate<T = unknown>(module: string, className: string, args: unknown[], kwargs?: Record<string, unknown>): Promise<T>;
|
|
17
|
+
callMethod<T = unknown>(handle: string, methodName: string, args: unknown[], kwargs?: Record<string, unknown>): Promise<T>;
|
|
18
|
+
disposeInstance(handle: string): Promise<void>;
|
|
19
|
+
dispose(): Promise<void>;
|
|
20
|
+
private post;
|
|
21
|
+
}
|
|
22
|
+
//# sourceMappingURL=http.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"http.d.ts","sourceRoot":"","sources":["../../src/runtime/http.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH,OAAO,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AAE1C,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AA2BD,qBAAa,UAAW,SAAQ,aAAa;IAC3C,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;IACjC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAyB;IACjD,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAS;gBAEvB,OAAO,GAAE,iBAAwD;IAOvE,IAAI,CAAC,CAAC,GAAG,OAAO,EACpB,MAAM,EAAE,MAAM,EACd,YAAY,EAAE,MAAM,EACpB,IAAI,EAAE,OAAO,EAAE,EACf,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC/B,OAAO,CAAC,CAAC,CAAC;IAMP,WAAW,CAAC,CAAC,GAAG,OAAO,EAC3B,MAAM,EAAE,MAAM,EACd,SAAS,EAAE,MAAM,EACjB,IAAI,EAAE,OAAO,EAAE,EACf,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC/B,OAAO,CAAC,CAAC,CAAC;IAMP,UAAU,CAAC,CAAC,GAAG,OAAO,EAC1B,MAAM,EAAE,MAAM,EACd,UAAU,EAAE,MAAM,EAClB,IAAI,EAAE,OAAO,EAAE,EACf,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC/B,OAAO,CAAC,CAAC,CAAC;IAMP,eAAe,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAK9C,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;YAIhB,IAAI;CA8BnB"}
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* HTTP runtime bridge
|
|
3
|
+
*/
|
|
4
|
+
import { decodeValueAsync } from '../utils/codec.js';
|
|
5
|
+
import { RuntimeBridge } from './base.js';
|
|
6
|
+
export class HttpBridge extends RuntimeBridge {
|
|
7
|
+
baseURL;
|
|
8
|
+
headers;
|
|
9
|
+
timeoutMs;
|
|
10
|
+
constructor(options = { baseURL: 'http://localhost:8000' }) {
|
|
11
|
+
super();
|
|
12
|
+
this.baseURL = options.baseURL.replace(/\/$/, '');
|
|
13
|
+
this.headers = { 'content-type': 'application/json', ...(options.headers ?? {}) };
|
|
14
|
+
this.timeoutMs = options.timeoutMs ?? 30000;
|
|
15
|
+
}
|
|
16
|
+
async call(module, functionName, args, kwargs) {
|
|
17
|
+
const payload = { module, functionName, args, kwargs };
|
|
18
|
+
const res = await this.post(`${this.baseURL}/call`, payload);
|
|
19
|
+
return (await decodeValueAsync(res));
|
|
20
|
+
}
|
|
21
|
+
async instantiate(module, className, args, kwargs) {
|
|
22
|
+
const payload = { module, className, args, kwargs };
|
|
23
|
+
const res = await this.post(`${this.baseURL}/instantiate`, payload);
|
|
24
|
+
return (await decodeValueAsync(res));
|
|
25
|
+
}
|
|
26
|
+
async callMethod(handle, methodName, args, kwargs) {
|
|
27
|
+
const payload = { handle, methodName, args, kwargs };
|
|
28
|
+
const res = await this.post(`${this.baseURL}/call_method`, payload);
|
|
29
|
+
return (await decodeValueAsync(res));
|
|
30
|
+
}
|
|
31
|
+
async disposeInstance(handle) {
|
|
32
|
+
const payload = { handle };
|
|
33
|
+
await this.post(`${this.baseURL}/dispose_instance`, payload);
|
|
34
|
+
}
|
|
35
|
+
async dispose() {
|
|
36
|
+
// stateless
|
|
37
|
+
}
|
|
38
|
+
async post(url, body) {
|
|
39
|
+
const controller = typeof AbortController !== 'undefined' ? new AbortController() : undefined;
|
|
40
|
+
const timer = controller ? setTimeout(() => controller.abort(), this.timeoutMs) : undefined;
|
|
41
|
+
try {
|
|
42
|
+
const resp = await fetch(url, {
|
|
43
|
+
method: 'POST',
|
|
44
|
+
headers: this.headers,
|
|
45
|
+
body: JSON.stringify(body),
|
|
46
|
+
signal: controller?.signal,
|
|
47
|
+
});
|
|
48
|
+
if (!resp.ok) {
|
|
49
|
+
const text = await safeText(resp);
|
|
50
|
+
throw new Error(`HTTP ${resp.status}: ${text || resp.statusText}`);
|
|
51
|
+
}
|
|
52
|
+
const ct = resp.headers.get('content-type') ?? '';
|
|
53
|
+
if (ct.includes('application/json')) {
|
|
54
|
+
return (await resp.json());
|
|
55
|
+
}
|
|
56
|
+
const text = await resp.text();
|
|
57
|
+
try {
|
|
58
|
+
return JSON.parse(text);
|
|
59
|
+
}
|
|
60
|
+
catch {
|
|
61
|
+
return text;
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
finally {
|
|
65
|
+
if (timer) {
|
|
66
|
+
clearTimeout(timer);
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
async function safeText(resp) {
|
|
72
|
+
try {
|
|
73
|
+
return await resp.text();
|
|
74
|
+
}
|
|
75
|
+
catch {
|
|
76
|
+
return '';
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
//# sourceMappingURL=http.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"http.js","sourceRoot":"","sources":["../../src/runtime/http.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Runtime bridge registry for generated wrappers.
|
|
3
|
+
*/
|
|
4
|
+
import type { RuntimeExecution } from '../types/index.js';
|
|
5
|
+
export declare function setRuntimeBridge(bridge: RuntimeExecution): void;
|
|
6
|
+
export declare function getRuntimeBridge(): RuntimeExecution;
|
|
7
|
+
export declare function clearRuntimeBridge(): void;
|
|
8
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/runtime/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAI1D,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,gBAAgB,GAAG,IAAI,CAE/D;AAED,wBAAgB,gBAAgB,IAAI,gBAAgB,CAOnD;AAED,wBAAgB,kBAAkB,IAAI,IAAI,CAEzC"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Runtime bridge registry for generated wrappers.
|
|
3
|
+
*/
|
|
4
|
+
let runtimeBridge = null;
|
|
5
|
+
export function setRuntimeBridge(bridge) {
|
|
6
|
+
runtimeBridge = bridge;
|
|
7
|
+
}
|
|
8
|
+
export function getRuntimeBridge() {
|
|
9
|
+
if (!runtimeBridge) {
|
|
10
|
+
throw new Error('No runtime bridge configured. Call setRuntimeBridge(new NodeBridge(...)) or setRuntimeBridge(new PyodideBridge(...)) before using generated modules.');
|
|
11
|
+
}
|
|
12
|
+
return runtimeBridge;
|
|
13
|
+
}
|
|
14
|
+
export function clearRuntimeBridge() {
|
|
15
|
+
runtimeBridge = null;
|
|
16
|
+
}
|
|
17
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/runtime/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH,IAAI,aAAa,GAA4B,IAAI,CAAC;AAElD,MAAM,UAAU,gBAAgB,CAAC,MAAwB;IACvD,aAAa,GAAG,MAAM,CAAC;AACzB,CAAC;AAED,MAAM,UAAU,gBAAgB;IAC9B,IAAI,CAAC,aAAa,EAAE,CAAC;QACnB,MAAM,IAAI,KAAK,CACb,sJAAsJ,CACvJ,CAAC;IACJ,CAAC;IACD,OAAO,aAAa,CAAC;AACvB,CAAC;AAED,MAAM,UAAU,kBAAkB;IAChC,aAAa,GAAG,IAAI,CAAC;AACvB,CAAC"}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Node.js runtime bridge (minimal MVP)
|
|
3
|
+
*/
|
|
4
|
+
import type { BridgeInfo } from '../types/index.js';
|
|
5
|
+
import { RuntimeBridge } from './base.js';
|
|
6
|
+
export interface NodeBridgeOptions {
|
|
7
|
+
pythonPath?: string;
|
|
8
|
+
scriptPath?: string;
|
|
9
|
+
virtualEnv?: string;
|
|
10
|
+
cwd?: string;
|
|
11
|
+
timeoutMs?: number;
|
|
12
|
+
/**
|
|
13
|
+
* When true, sets TYWRAP_CODEC_FALLBACK=json for the Python process to prefer JSON encoding
|
|
14
|
+
* for rich types (ndarray/dataframe/series). Default: false for fast-fail on Arrow path issues.
|
|
15
|
+
*/
|
|
16
|
+
enableJsonFallback?: boolean;
|
|
17
|
+
/**
|
|
18
|
+
* Optional extra environment variables to pass to the Python subprocess.
|
|
19
|
+
*/
|
|
20
|
+
env?: Record<string, string | undefined>;
|
|
21
|
+
}
|
|
22
|
+
export declare class NodeBridge extends RuntimeBridge {
|
|
23
|
+
private child?;
|
|
24
|
+
private nextId;
|
|
25
|
+
private readonly pending;
|
|
26
|
+
private readonly options;
|
|
27
|
+
private stderrBuffer;
|
|
28
|
+
private disposed;
|
|
29
|
+
private protocolError;
|
|
30
|
+
private initPromise?;
|
|
31
|
+
private bridgeInfo?;
|
|
32
|
+
constructor(options?: NodeBridgeOptions);
|
|
33
|
+
init(): Promise<void>;
|
|
34
|
+
getBridgeInfo(options?: {
|
|
35
|
+
refresh?: boolean;
|
|
36
|
+
}): Promise<BridgeInfo>;
|
|
37
|
+
call<T = unknown>(module: string, functionName: string, args: unknown[], kwargs?: Record<string, unknown>): Promise<T>;
|
|
38
|
+
instantiate<T = unknown>(module: string, className: string, args: unknown[], kwargs?: Record<string, unknown>): Promise<T>;
|
|
39
|
+
callMethod<T = unknown>(handle: string, methodName: string, args: unknown[], kwargs?: Record<string, unknown>): Promise<T>;
|
|
40
|
+
disposeInstance(handle: string): Promise<void>;
|
|
41
|
+
dispose(): Promise<void>;
|
|
42
|
+
private send;
|
|
43
|
+
private errorFrom;
|
|
44
|
+
private handleProtocolError;
|
|
45
|
+
private startProcess;
|
|
46
|
+
private refreshBridgeInfo;
|
|
47
|
+
}
|
|
48
|
+
//# sourceMappingURL=node.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"node.d.ts","sourceRoot":"","sources":["../../src/runtime/node.ts"],"names":[],"mappings":"AAAA;;GAEG;AASH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAEpD,OAAO,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AAuB1C,MAAM,WAAW,iBAAiB;IAChC,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;;;OAGG;IACH,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B;;OAEG;IACH,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAAC;CAC1C;AAkCD,qBAAa,UAAW,SAAQ,aAAa;IAC3C,OAAO,CAAC,KAAK,CAAC,CAAuC;IACrD,OAAO,CAAC,MAAM,CAAK;IACnB,OAAO,CAAC,QAAQ,CAAC,OAAO,CAGpB;IACJ,OAAO,CAAC,QAAQ,CAAC,OAAO,CAA4B;IACpD,OAAO,CAAC,YAAY,CAAM;IAC1B,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,aAAa,CAAS;IAC9B,OAAO,CAAC,WAAW,CAAC,CAAgB;IACpC,OAAO,CAAC,UAAU,CAAC,CAAa;gBAEpB,OAAO,GAAE,iBAAsB;IAqBrC,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAkBrB,aAAa,CAAC,OAAO,GAAE;QAAE,OAAO,CAAC,EAAE,OAAO,CAAA;KAAO,GAAG,OAAO,CAAC,UAAU,CAAC;IAWvE,IAAI,CAAC,CAAC,GAAG,OAAO,EACpB,MAAM,EAAE,MAAM,EACd,YAAY,EAAE,MAAM,EACpB,IAAI,EAAE,OAAO,EAAE,EACf,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC/B,OAAO,CAAC,CAAC,CAAC;IAKP,WAAW,CAAC,CAAC,GAAG,OAAO,EAC3B,MAAM,EAAE,MAAM,EACd,SAAS,EAAE,MAAM,EACjB,IAAI,EAAE,OAAO,EAAE,EACf,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC/B,OAAO,CAAC,CAAC,CAAC;IAKP,UAAU,CAAC,CAAC,GAAG,OAAO,EAC1B,MAAM,EAAE,MAAM,EACd,UAAU,EAAE,MAAM,EAClB,IAAI,EAAE,OAAO,EAAE,EACf,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC/B,OAAO,CAAC,CAAC,CAAC;IAKP,eAAe,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAK9C,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;YAWhB,IAAI;IAqClB,OAAO,CAAC,SAAS;IAMjB,OAAO,CAAC,mBAAmB;YAsBb,YAAY;YAmKZ,iBAAiB;CAOhC"}
|
|
@@ -0,0 +1,328 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Node.js runtime bridge (minimal MVP)
|
|
3
|
+
*/
|
|
4
|
+
import { existsSync } from 'node:fs';
|
|
5
|
+
import { delimiter, isAbsolute, join, resolve } from 'node:path';
|
|
6
|
+
import { fileURLToPath } from 'node:url';
|
|
7
|
+
import { decodeValueAsync } from '../utils/codec.js';
|
|
8
|
+
import { getDefaultPythonPath } from '../utils/python.js';
|
|
9
|
+
import { getVenvBinDir, getVenvPythonExe } from '../utils/runtime.js';
|
|
10
|
+
import { RuntimeBridge } from './base.js';
|
|
11
|
+
import { BridgeDisposedError, BridgeExecutionError, BridgeProtocolError, BridgeTimeoutError, } from './errors.js';
|
|
12
|
+
import { TYWRAP_PROTOCOL, TYWRAP_PROTOCOL_VERSION } from './protocol.js';
|
|
13
|
+
function resolveDefaultScriptPath() {
|
|
14
|
+
try {
|
|
15
|
+
return fileURLToPath(new URL('../../runtime/python_bridge.py', import.meta.url));
|
|
16
|
+
}
|
|
17
|
+
catch {
|
|
18
|
+
return 'runtime/python_bridge.py';
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
function resolveVirtualEnv(virtualEnv, cwd) {
|
|
22
|
+
const venvPath = resolve(cwd, virtualEnv);
|
|
23
|
+
const binDir = join(venvPath, getVenvBinDir());
|
|
24
|
+
const pythonPath = join(binDir, getVenvPythonExe());
|
|
25
|
+
return { venvPath, binDir, pythonPath };
|
|
26
|
+
}
|
|
27
|
+
export class NodeBridge extends RuntimeBridge {
|
|
28
|
+
child;
|
|
29
|
+
nextId = 1;
|
|
30
|
+
pending = new Map();
|
|
31
|
+
options;
|
|
32
|
+
stderrBuffer = '';
|
|
33
|
+
disposed = false;
|
|
34
|
+
protocolError = false;
|
|
35
|
+
initPromise;
|
|
36
|
+
bridgeInfo;
|
|
37
|
+
constructor(options = {}) {
|
|
38
|
+
super();
|
|
39
|
+
const cwd = options.cwd ?? process.cwd();
|
|
40
|
+
const virtualEnv = options.virtualEnv ? resolve(cwd, options.virtualEnv) : undefined;
|
|
41
|
+
const venv = virtualEnv ? resolveVirtualEnv(virtualEnv, cwd) : undefined;
|
|
42
|
+
const scriptPath = options.scriptPath ?? resolveDefaultScriptPath();
|
|
43
|
+
const resolvedScriptPath = isAbsolute(scriptPath) ? scriptPath : resolve(cwd, scriptPath);
|
|
44
|
+
this.options = {
|
|
45
|
+
pythonPath: options.pythonPath ??
|
|
46
|
+
venv?.pythonPath ??
|
|
47
|
+
getDefaultPythonPath(),
|
|
48
|
+
scriptPath: resolvedScriptPath,
|
|
49
|
+
virtualEnv,
|
|
50
|
+
cwd,
|
|
51
|
+
timeoutMs: options.timeoutMs ?? 30000,
|
|
52
|
+
enableJsonFallback: options.enableJsonFallback ?? false,
|
|
53
|
+
env: options.env ?? {},
|
|
54
|
+
};
|
|
55
|
+
}
|
|
56
|
+
async init() {
|
|
57
|
+
if (this.disposed) {
|
|
58
|
+
throw new BridgeDisposedError('Bridge has been disposed');
|
|
59
|
+
}
|
|
60
|
+
if (this.child) {
|
|
61
|
+
return;
|
|
62
|
+
}
|
|
63
|
+
if (this.initPromise) {
|
|
64
|
+
return this.initPromise;
|
|
65
|
+
}
|
|
66
|
+
// eslint-disable-next-line security/detect-non-literal-fs-filename -- script path is user-configured
|
|
67
|
+
if (!existsSync(this.options.scriptPath)) {
|
|
68
|
+
throw new BridgeProtocolError(`Python bridge script not found at ${this.options.scriptPath}`);
|
|
69
|
+
}
|
|
70
|
+
this.initPromise = this.startProcess();
|
|
71
|
+
return this.initPromise;
|
|
72
|
+
}
|
|
73
|
+
async getBridgeInfo(options = {}) {
|
|
74
|
+
await this.init();
|
|
75
|
+
if (!this.bridgeInfo || options.refresh) {
|
|
76
|
+
await this.refreshBridgeInfo();
|
|
77
|
+
}
|
|
78
|
+
if (!this.bridgeInfo) {
|
|
79
|
+
throw new BridgeProtocolError('Bridge info unavailable');
|
|
80
|
+
}
|
|
81
|
+
return this.bridgeInfo;
|
|
82
|
+
}
|
|
83
|
+
async call(module, functionName, args, kwargs) {
|
|
84
|
+
await this.init();
|
|
85
|
+
return this.send({ method: 'call', params: { module, functionName, args, kwargs } });
|
|
86
|
+
}
|
|
87
|
+
async instantiate(module, className, args, kwargs) {
|
|
88
|
+
await this.init();
|
|
89
|
+
return this.send({ method: 'instantiate', params: { module, className, args, kwargs } });
|
|
90
|
+
}
|
|
91
|
+
async callMethod(handle, methodName, args, kwargs) {
|
|
92
|
+
await this.init();
|
|
93
|
+
return this.send({ method: 'call_method', params: { handle, methodName, args, kwargs } });
|
|
94
|
+
}
|
|
95
|
+
async disposeInstance(handle) {
|
|
96
|
+
await this.init();
|
|
97
|
+
await this.send({ method: 'dispose_instance', params: { handle } });
|
|
98
|
+
}
|
|
99
|
+
async dispose() {
|
|
100
|
+
this.disposed = true;
|
|
101
|
+
this.initPromise = undefined;
|
|
102
|
+
this.bridgeInfo = undefined;
|
|
103
|
+
if (!this.child) {
|
|
104
|
+
return;
|
|
105
|
+
}
|
|
106
|
+
this.child.kill('SIGTERM');
|
|
107
|
+
this.child = undefined;
|
|
108
|
+
}
|
|
109
|
+
async send(payload) {
|
|
110
|
+
if (this.disposed) {
|
|
111
|
+
throw new BridgeDisposedError('Bridge has been disposed');
|
|
112
|
+
}
|
|
113
|
+
const id = this.nextId++;
|
|
114
|
+
const message = { id, protocol: TYWRAP_PROTOCOL, ...payload };
|
|
115
|
+
const text = `${JSON.stringify(message)}\n`;
|
|
116
|
+
let timer;
|
|
117
|
+
const promise = new Promise((resolvePromise, reject) => {
|
|
118
|
+
timer = setTimeout(() => {
|
|
119
|
+
this.pending.delete(id);
|
|
120
|
+
const stderrTail = this.stderrBuffer.trim();
|
|
121
|
+
const msg = stderrTail
|
|
122
|
+
? `Python call timed out. Recent stderr from Python:\n${stderrTail}`
|
|
123
|
+
: 'Python call timed out';
|
|
124
|
+
reject(new BridgeTimeoutError(msg));
|
|
125
|
+
}, this.options.timeoutMs);
|
|
126
|
+
const resolveWrapped = (v) => {
|
|
127
|
+
resolvePromise(v);
|
|
128
|
+
};
|
|
129
|
+
this.pending.set(id, { resolve: resolveWrapped, reject, timer });
|
|
130
|
+
});
|
|
131
|
+
try {
|
|
132
|
+
if (!this.child?.stdin) {
|
|
133
|
+
throw new BridgeProtocolError('Python process not available');
|
|
134
|
+
}
|
|
135
|
+
this.child.stdin.write(text);
|
|
136
|
+
}
|
|
137
|
+
catch (err) {
|
|
138
|
+
this.pending.delete(id);
|
|
139
|
+
if (timer) {
|
|
140
|
+
clearTimeout(timer);
|
|
141
|
+
}
|
|
142
|
+
throw new BridgeProtocolError(`IPC failure: ${err.message}`);
|
|
143
|
+
}
|
|
144
|
+
return promise;
|
|
145
|
+
}
|
|
146
|
+
errorFrom(err) {
|
|
147
|
+
const e = new BridgeExecutionError(`${err.type}: ${err.message}`);
|
|
148
|
+
e.traceback = err.traceback;
|
|
149
|
+
return e;
|
|
150
|
+
}
|
|
151
|
+
handleProtocolError(details, line) {
|
|
152
|
+
if (this.protocolError) {
|
|
153
|
+
return;
|
|
154
|
+
}
|
|
155
|
+
this.protocolError = true;
|
|
156
|
+
const snippet = line ? (line.length > 500 ? `${line.slice(0, 500)}…` : line) : undefined;
|
|
157
|
+
const hint = 'Ensure your Python code does not print to stdout and that the bridge outputs only JSON lines.';
|
|
158
|
+
const msg = snippet
|
|
159
|
+
? `Protocol error from Python bridge. ${details}\n${hint}\nOffending line: ${snippet}`
|
|
160
|
+
: `Protocol error from Python bridge. ${details}\n${hint}`;
|
|
161
|
+
const error = new BridgeProtocolError(msg);
|
|
162
|
+
for (const [, p] of this.pending) {
|
|
163
|
+
p.reject(error);
|
|
164
|
+
}
|
|
165
|
+
this.pending.clear();
|
|
166
|
+
this.child?.kill('SIGTERM');
|
|
167
|
+
this.child = undefined;
|
|
168
|
+
this.initPromise = undefined;
|
|
169
|
+
this.bridgeInfo = undefined;
|
|
170
|
+
}
|
|
171
|
+
async startProcess() {
|
|
172
|
+
try {
|
|
173
|
+
const { spawn } = await import('child_process');
|
|
174
|
+
const allowedPrefixes = ['TYWRAP_'];
|
|
175
|
+
const allowedKeys = new Set(['PATH', 'PYTHONPATH', 'VIRTUAL_ENV', 'PYTHONHOME']);
|
|
176
|
+
const baseEnv = new Map();
|
|
177
|
+
for (const [k, v] of Object.entries(process.env)) {
|
|
178
|
+
if (allowedKeys.has(k) || allowedPrefixes.some(p => k.startsWith(p))) {
|
|
179
|
+
baseEnv.set(k, v);
|
|
180
|
+
}
|
|
181
|
+
}
|
|
182
|
+
const env = {
|
|
183
|
+
...Object.fromEntries(baseEnv),
|
|
184
|
+
...this.options.env,
|
|
185
|
+
};
|
|
186
|
+
if (this.options.virtualEnv) {
|
|
187
|
+
const venv = resolveVirtualEnv(this.options.virtualEnv, this.options.cwd);
|
|
188
|
+
env.VIRTUAL_ENV = venv.venvPath;
|
|
189
|
+
const currentPath = env.PATH ?? process.env.PATH ?? '';
|
|
190
|
+
env.PATH = `${venv.binDir}${delimiter}${currentPath}`;
|
|
191
|
+
}
|
|
192
|
+
if (!env.PYTHONUTF8) {
|
|
193
|
+
env.PYTHONUTF8 = '1';
|
|
194
|
+
}
|
|
195
|
+
if (!env.PYTHONIOENCODING) {
|
|
196
|
+
env.PYTHONIOENCODING = 'UTF-8';
|
|
197
|
+
}
|
|
198
|
+
// Respect explicit request for JSON fallback only; otherwise fast-fail by default
|
|
199
|
+
if (this.options.enableJsonFallback && !env.TYWRAP_CODEC_FALLBACK) {
|
|
200
|
+
env.TYWRAP_CODEC_FALLBACK = 'json';
|
|
201
|
+
}
|
|
202
|
+
let child;
|
|
203
|
+
try {
|
|
204
|
+
child = spawn(this.options.pythonPath, [this.options.scriptPath], {
|
|
205
|
+
cwd: this.options.cwd,
|
|
206
|
+
stdio: ['pipe', 'pipe', 'pipe'],
|
|
207
|
+
env,
|
|
208
|
+
});
|
|
209
|
+
}
|
|
210
|
+
catch (err) {
|
|
211
|
+
throw new BridgeProtocolError(`Failed to start Python process: ${err.message}`);
|
|
212
|
+
}
|
|
213
|
+
const startupError = await new Promise(done => {
|
|
214
|
+
child.once('error', e => done(e));
|
|
215
|
+
child.once('spawn', () => done(null));
|
|
216
|
+
});
|
|
217
|
+
if (startupError) {
|
|
218
|
+
throw new BridgeProtocolError(`Failed to start Python process: ${startupError.message}`);
|
|
219
|
+
}
|
|
220
|
+
this.child = child;
|
|
221
|
+
this.protocolError = false;
|
|
222
|
+
this.child?.on('error', err => {
|
|
223
|
+
const msg = `Python process error: ${err instanceof Error ? err.message : String(err)}`;
|
|
224
|
+
for (const [, p] of this.pending) {
|
|
225
|
+
p.reject(new BridgeProtocolError(msg));
|
|
226
|
+
}
|
|
227
|
+
this.pending.clear();
|
|
228
|
+
this.child = undefined;
|
|
229
|
+
this.initPromise = undefined;
|
|
230
|
+
this.bridgeInfo = undefined;
|
|
231
|
+
});
|
|
232
|
+
let buffer = '';
|
|
233
|
+
this.child.stdout?.on('data', (chunk) => {
|
|
234
|
+
buffer += chunk.toString();
|
|
235
|
+
let idx;
|
|
236
|
+
while ((idx = buffer.indexOf('\n')) !== -1) {
|
|
237
|
+
const line = buffer.slice(0, idx);
|
|
238
|
+
buffer = buffer.slice(idx + 1);
|
|
239
|
+
if (!line.trim()) {
|
|
240
|
+
continue;
|
|
241
|
+
}
|
|
242
|
+
(async () => {
|
|
243
|
+
try {
|
|
244
|
+
const msg = JSON.parse(line);
|
|
245
|
+
if (msg.protocol !== TYWRAP_PROTOCOL) {
|
|
246
|
+
this.handleProtocolError(`Invalid protocol. Expected ${TYWRAP_PROTOCOL} but received ${String(msg.protocol)}`, line);
|
|
247
|
+
return;
|
|
248
|
+
}
|
|
249
|
+
if (typeof msg.id !== 'number') {
|
|
250
|
+
this.handleProtocolError('Invalid response id', line);
|
|
251
|
+
return;
|
|
252
|
+
}
|
|
253
|
+
const pending = this.pending.get(msg.id);
|
|
254
|
+
if (!pending) {
|
|
255
|
+
this.handleProtocolError(`Unexpected response id ${msg.id}`, line);
|
|
256
|
+
return;
|
|
257
|
+
}
|
|
258
|
+
this.pending.delete(msg.id);
|
|
259
|
+
if (pending.timer) {
|
|
260
|
+
clearTimeout(pending.timer);
|
|
261
|
+
}
|
|
262
|
+
if (msg.error) {
|
|
263
|
+
pending.reject(this.errorFrom(msg.error));
|
|
264
|
+
}
|
|
265
|
+
else {
|
|
266
|
+
try {
|
|
267
|
+
const decoded = await decodeValueAsync(msg.result);
|
|
268
|
+
pending.resolve(decoded);
|
|
269
|
+
}
|
|
270
|
+
catch (err) {
|
|
271
|
+
pending.reject(new BridgeProtocolError(`Failed to decode Python response: ${err instanceof Error ? err.message : String(err)}`));
|
|
272
|
+
}
|
|
273
|
+
}
|
|
274
|
+
}
|
|
275
|
+
catch (err) {
|
|
276
|
+
const parseMessage = err instanceof Error ? err.message : String(err);
|
|
277
|
+
this.handleProtocolError(`Invalid JSON: ${parseMessage}`, line);
|
|
278
|
+
}
|
|
279
|
+
})().catch(() => {
|
|
280
|
+
/* ignore */
|
|
281
|
+
});
|
|
282
|
+
}
|
|
283
|
+
});
|
|
284
|
+
this.child?.stderr?.on('data', (chunk) => {
|
|
285
|
+
// Buffer stderr for better error diagnostics on failures/exits
|
|
286
|
+
try {
|
|
287
|
+
this.stderrBuffer += chunk.toString();
|
|
288
|
+
// Truncate to last 8KB to avoid unbounded growth
|
|
289
|
+
const MAX = 8 * 1024;
|
|
290
|
+
if (this.stderrBuffer.length > MAX) {
|
|
291
|
+
this.stderrBuffer = this.stderrBuffer.slice(this.stderrBuffer.length - MAX);
|
|
292
|
+
}
|
|
293
|
+
}
|
|
294
|
+
catch {
|
|
295
|
+
// ignore
|
|
296
|
+
}
|
|
297
|
+
});
|
|
298
|
+
this.child?.on('exit', () => {
|
|
299
|
+
for (const [, p] of this.pending) {
|
|
300
|
+
const stderrTail = this.stderrBuffer.trim();
|
|
301
|
+
const msg = stderrTail
|
|
302
|
+
? `Python process exited. Stderr:\n${stderrTail}`
|
|
303
|
+
: 'Python process exited';
|
|
304
|
+
p.reject(new BridgeProtocolError(msg));
|
|
305
|
+
}
|
|
306
|
+
this.pending.clear();
|
|
307
|
+
this.child = undefined;
|
|
308
|
+
this.initPromise = undefined;
|
|
309
|
+
this.bridgeInfo = undefined;
|
|
310
|
+
});
|
|
311
|
+
await this.refreshBridgeInfo();
|
|
312
|
+
}
|
|
313
|
+
catch (err) {
|
|
314
|
+
this.child?.kill('SIGTERM');
|
|
315
|
+
this.child = undefined;
|
|
316
|
+
this.initPromise = undefined;
|
|
317
|
+
throw err;
|
|
318
|
+
}
|
|
319
|
+
}
|
|
320
|
+
async refreshBridgeInfo() {
|
|
321
|
+
const info = await this.send({ method: 'meta', params: {} });
|
|
322
|
+
if (info.protocol !== TYWRAP_PROTOCOL || info.protocolVersion !== TYWRAP_PROTOCOL_VERSION) {
|
|
323
|
+
throw new BridgeProtocolError('Invalid bridge info payload');
|
|
324
|
+
}
|
|
325
|
+
this.bridgeInfo = info;
|
|
326
|
+
}
|
|
327
|
+
}
|
|
328
|
+
//# sourceMappingURL=node.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"node.js","sourceRoot":"","sources":["../../src/runtime/node.ts"],"names":[],"mappings":"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"}
|