nodepyx 1.0.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 +22 -0
- package/README.md +399 -0
- package/binding.gyp +73 -0
- package/dist/core/PyCallable.d.ts +65 -0
- package/dist/core/PyCallable.d.ts.map +1 -0
- package/dist/core/PyCallable.js +109 -0
- package/dist/core/PyCallable.js.map +1 -0
- package/dist/core/PyContext.d.ts +76 -0
- package/dist/core/PyContext.d.ts.map +1 -0
- package/dist/core/PyContext.js +228 -0
- package/dist/core/PyContext.js.map +1 -0
- package/dist/core/PyIterator.d.ts +84 -0
- package/dist/core/PyIterator.d.ts.map +1 -0
- package/dist/core/PyIterator.js +243 -0
- package/dist/core/PyIterator.js.map +1 -0
- package/dist/core/PyModule.d.ts +55 -0
- package/dist/core/PyModule.d.ts.map +1 -0
- package/dist/core/PyModule.js +172 -0
- package/dist/core/PyModule.js.map +1 -0
- package/dist/core/PyProxy.d.ts +65 -0
- package/dist/core/PyProxy.d.ts.map +1 -0
- package/dist/core/PyProxy.js +483 -0
- package/dist/core/PyProxy.js.map +1 -0
- package/dist/core/PyRuntime.d.ts +105 -0
- package/dist/core/PyRuntime.d.ts.map +1 -0
- package/dist/core/PyRuntime.js +438 -0
- package/dist/core/PyRuntime.js.map +1 -0
- package/dist/env/CondaManager.d.ts +118 -0
- package/dist/env/CondaManager.d.ts.map +1 -0
- package/dist/env/CondaManager.js +401 -0
- package/dist/env/CondaManager.js.map +1 -0
- package/dist/env/PackageInstaller.d.ts +233 -0
- package/dist/env/PackageInstaller.d.ts.map +1 -0
- package/dist/env/PackageInstaller.js +609 -0
- package/dist/env/PackageInstaller.js.map +1 -0
- package/dist/env/PythonDetector.d.ts +103 -0
- package/dist/env/PythonDetector.d.ts.map +1 -0
- package/dist/env/PythonDetector.js +381 -0
- package/dist/env/PythonDetector.js.map +1 -0
- package/dist/env/VenvManager.d.ts +117 -0
- package/dist/env/VenvManager.d.ts.map +1 -0
- package/dist/env/VenvManager.js +331 -0
- package/dist/env/VenvManager.js.map +1 -0
- package/dist/index.d.ts +169 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +393 -0
- package/dist/index.js.map +1 -0
- package/dist/plugins/Plugin.interface.d.ts +41 -0
- package/dist/plugins/Plugin.interface.d.ts.map +1 -0
- package/dist/plugins/Plugin.interface.js +12 -0
- package/dist/plugins/Plugin.interface.js.map +1 -0
- package/dist/plugins/PluginManager.d.ts +26 -0
- package/dist/plugins/PluginManager.d.ts.map +1 -0
- package/dist/plugins/PluginManager.js +174 -0
- package/dist/plugins/PluginManager.js.map +1 -0
- package/dist/plugins/builtin/NumpyPlugin.d.ts +17 -0
- package/dist/plugins/builtin/NumpyPlugin.d.ts.map +1 -0
- package/dist/plugins/builtin/NumpyPlugin.js +41 -0
- package/dist/plugins/builtin/NumpyPlugin.js.map +1 -0
- package/dist/plugins/builtin/PandasPlugin.d.ts +19 -0
- package/dist/plugins/builtin/PandasPlugin.d.ts.map +1 -0
- package/dist/plugins/builtin/PandasPlugin.js +57 -0
- package/dist/plugins/builtin/PandasPlugin.js.map +1 -0
- package/dist/plugins/builtin/TorchPlugin.d.ts +23 -0
- package/dist/plugins/builtin/TorchPlugin.d.ts.map +1 -0
- package/dist/plugins/builtin/TorchPlugin.js +50 -0
- package/dist/plugins/builtin/TorchPlugin.js.map +1 -0
- package/dist/plugins/index.d.ts +7 -0
- package/dist/plugins/index.d.ts.map +1 -0
- package/dist/plugins/index.js +12 -0
- package/dist/plugins/index.js.map +1 -0
- package/dist/serialization/DataFrameBridge.d.ts +141 -0
- package/dist/serialization/DataFrameBridge.d.ts.map +1 -0
- package/dist/serialization/DataFrameBridge.js +355 -0
- package/dist/serialization/DataFrameBridge.js.map +1 -0
- package/dist/serialization/MsgPackSerializer.d.ts +45 -0
- package/dist/serialization/MsgPackSerializer.d.ts.map +1 -0
- package/dist/serialization/MsgPackSerializer.js +242 -0
- package/dist/serialization/MsgPackSerializer.js.map +1 -0
- package/dist/serialization/NumpyBridge.d.ts +96 -0
- package/dist/serialization/NumpyBridge.d.ts.map +1 -0
- package/dist/serialization/NumpyBridge.js +323 -0
- package/dist/serialization/NumpyBridge.js.map +1 -0
- package/dist/serialization/Serializer.d.ts +78 -0
- package/dist/serialization/Serializer.d.ts.map +1 -0
- package/dist/serialization/Serializer.js +281 -0
- package/dist/serialization/Serializer.js.map +1 -0
- package/dist/types/PythonTypeMapper.d.ts +87 -0
- package/dist/types/PythonTypeMapper.d.ts.map +1 -0
- package/dist/types/PythonTypeMapper.js +449 -0
- package/dist/types/PythonTypeMapper.js.map +1 -0
- package/dist/types/StubCache.d.ts +109 -0
- package/dist/types/StubCache.d.ts.map +1 -0
- package/dist/types/StubCache.js +333 -0
- package/dist/types/StubCache.js.map +1 -0
- package/dist/types/TypeGenerator.d.ts +139 -0
- package/dist/types/TypeGenerator.d.ts.map +1 -0
- package/dist/types/TypeGenerator.js +372 -0
- package/dist/types/TypeGenerator.js.map +1 -0
- package/dist/types/addon.d.ts +114 -0
- package/dist/types/addon.d.ts.map +1 -0
- package/dist/types/addon.js +32 -0
- package/dist/types/addon.js.map +1 -0
- package/dist/types/config.d.ts +175 -0
- package/dist/types/config.d.ts.map +1 -0
- package/dist/types/config.js +35 -0
- package/dist/types/config.js.map +1 -0
- package/dist/types/index.d.ts +10 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +12 -0
- package/dist/types/index.js.map +1 -0
- package/dist/types/python.d.ts +235 -0
- package/dist/types/python.d.ts.map +1 -0
- package/dist/types/python.js +7 -0
- package/dist/types/python.js.map +1 -0
- package/dist/utils/ErrorTranslator.d.ts +83 -0
- package/dist/utils/ErrorTranslator.d.ts.map +1 -0
- package/dist/utils/ErrorTranslator.js +210 -0
- package/dist/utils/ErrorTranslator.js.map +1 -0
- package/dist/utils/Logger.d.ts +27 -0
- package/dist/utils/Logger.d.ts.map +1 -0
- package/dist/utils/Logger.js +115 -0
- package/dist/utils/Logger.js.map +1 -0
- package/dist/utils/MemoryMonitor.d.ts +44 -0
- package/dist/utils/MemoryMonitor.d.ts.map +1 -0
- package/dist/utils/MemoryMonitor.js +143 -0
- package/dist/utils/MemoryMonitor.js.map +1 -0
- package/package.json +177 -0
- package/python/error_handler.py +433 -0
- package/python/nodepyx_runtime.py +575 -0
- package/python/serializer.py +379 -0
- package/python/type_inspector.py +288 -0
- package/scripts/build-native.js +68 -0
- package/scripts/download-prebuilds.js +99 -0
- package/scripts/generate-stubs.js +405 -0
- package/scripts/install.js +260 -0
- package/src/core/PyCallable.ts +137 -0
- package/src/core/PyContext.ts +296 -0
- package/src/core/PyIterator.ts +294 -0
- package/src/core/PyModule.ts +194 -0
- package/src/core/PyProxy.ts +605 -0
- package/src/core/PyRuntime.ts +504 -0
- package/src/env/CondaManager.ts +451 -0
- package/src/env/PackageInstaller.ts +738 -0
- package/src/env/PythonDetector.ts +414 -0
- package/src/env/VenvManager.ts +396 -0
- package/src/index.ts +425 -0
- package/src/native/gil_guard.cpp +26 -0
- package/src/native/gil_guard.h +175 -0
- package/src/native/nodepyx_addon.cpp +886 -0
- package/src/native/python_bridge.cpp +790 -0
- package/src/native/python_bridge.h +257 -0
- package/src/native/thread_pool.cpp +336 -0
- package/src/native/thread_pool.h +175 -0
- package/src/native/type_converter.cpp +901 -0
- package/src/native/type_converter.h +272 -0
- package/src/nextjs/PyProvider.tsx +123 -0
- package/src/nextjs/index.ts +21 -0
- package/src/nextjs/usePython.ts +106 -0
- package/src/nextjs/withnodepyx.ts +88 -0
- package/src/plugins/Plugin.interface.ts +51 -0
- package/src/plugins/PluginManager.ts +155 -0
- package/src/plugins/builtin/NumpyPlugin.ts +36 -0
- package/src/plugins/builtin/PandasPlugin.ts +49 -0
- package/src/plugins/builtin/TorchPlugin.ts +56 -0
- package/src/plugins/index.ts +7 -0
- package/src/serialization/DataFrameBridge.ts +398 -0
- package/src/serialization/MsgPackSerializer.ts +220 -0
- package/src/serialization/NumpyBridge.ts +332 -0
- package/src/serialization/Serializer.ts +320 -0
- package/src/types/PythonTypeMapper.ts +495 -0
- package/src/types/StubCache.ts +340 -0
- package/src/types/TypeGenerator.ts +491 -0
- package/src/types/addon.ts +170 -0
- package/src/types/config.ts +226 -0
- package/src/types/index.ts +55 -0
- package/src/types/python.ts +309 -0
- package/src/types/stubs/numpy.d.ts +441 -0
- package/src/types/stubs/pandas.d.ts +575 -0
- package/src/types/stubs/sklearn.d.ts +728 -0
- package/src/types/stubs/torch.d.ts +694 -0
- package/src/utils/ErrorTranslator.ts +220 -0
- package/src/utils/Logger.ts +119 -0
- package/src/utils/MemoryMonitor.ts +175 -0
|
@@ -0,0 +1,281 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* nodepyx — Serializer
|
|
4
|
+
* Central coordinator for Python ↔ JavaScript data conversion.
|
|
5
|
+
* Routes to specialized bridges (MsgPack, NumPy, DataFrame) based on format.
|
|
6
|
+
*/
|
|
7
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
8
|
+
exports.Serializer = void 0;
|
|
9
|
+
const NumpyBridge_1 = require("./NumpyBridge");
|
|
10
|
+
const DataFrameBridge_1 = require("./DataFrameBridge");
|
|
11
|
+
const MsgPackSerializer_1 = require("./MsgPackSerializer");
|
|
12
|
+
const Logger_1 = require("../utils/Logger");
|
|
13
|
+
const logger = new Logger_1.Logger('Serializer');
|
|
14
|
+
/**
|
|
15
|
+
* Serializer — converts between Python wire format and JavaScript values.
|
|
16
|
+
*
|
|
17
|
+
* This is a singleton accessed via `Serializer.getInstance()`.
|
|
18
|
+
*
|
|
19
|
+
* @example
|
|
20
|
+
* ```typescript
|
|
21
|
+
* const serializer = Serializer.getInstance();
|
|
22
|
+
*
|
|
23
|
+
* // JavaScript → Python wire format
|
|
24
|
+
* const sv = await serializer.serialize([1, 2, 3, 4, 5]);
|
|
25
|
+
*
|
|
26
|
+
* // Python wire format → JavaScript
|
|
27
|
+
* const jsValue = await serializer.deserialize(sv);
|
|
28
|
+
* ```
|
|
29
|
+
*/
|
|
30
|
+
class Serializer {
|
|
31
|
+
static _instance = null;
|
|
32
|
+
_options;
|
|
33
|
+
_numpyBridge;
|
|
34
|
+
_dataframeBridge;
|
|
35
|
+
_msgpackSerializer;
|
|
36
|
+
constructor(options = {}) {
|
|
37
|
+
this._options = {
|
|
38
|
+
useSharedArrayBuffer: options.useSharedArrayBuffer ?? false,
|
|
39
|
+
maxJsonSize: options.maxJsonSize ?? 65536, // 64KB
|
|
40
|
+
wrapPythonRefs: options.wrapPythonRefs ?? true,
|
|
41
|
+
};
|
|
42
|
+
this._numpyBridge = new NumpyBridge_1.NumpyBridge({ useSharedArrayBuffer: this._options.useSharedArrayBuffer });
|
|
43
|
+
this._dataframeBridge = new DataFrameBridge_1.DataFrameBridge();
|
|
44
|
+
this._msgpackSerializer = new MsgPackSerializer_1.MsgPackSerializer();
|
|
45
|
+
}
|
|
46
|
+
static getInstance(options) {
|
|
47
|
+
if (!Serializer._instance) {
|
|
48
|
+
Serializer._instance = new Serializer(options);
|
|
49
|
+
}
|
|
50
|
+
return Serializer._instance;
|
|
51
|
+
}
|
|
52
|
+
static resetInstance() {
|
|
53
|
+
Serializer._instance = null;
|
|
54
|
+
}
|
|
55
|
+
// ─── Python Wire Format → JavaScript ───────────────────────────────────────
|
|
56
|
+
/**
|
|
57
|
+
* Deserialize a Python wire format value to JavaScript.
|
|
58
|
+
*
|
|
59
|
+
* Format routing:
|
|
60
|
+
* - JSON (0) → JSON.parse
|
|
61
|
+
* - MsgPack (1) → MessagePack decode
|
|
62
|
+
* - NumPy array (2) → TypedArray
|
|
63
|
+
* - DataFrame (3) → DataFrameResult
|
|
64
|
+
* - Series (4) → SeriesResult
|
|
65
|
+
* - PyRef (6) → PyProxy (via addon)
|
|
66
|
+
* - Bytes (7) → Uint8Array
|
|
67
|
+
* - None (8) → null
|
|
68
|
+
*/
|
|
69
|
+
async deserialize(sv) {
|
|
70
|
+
const format = sv.format;
|
|
71
|
+
switch (format) {
|
|
72
|
+
case 0: // JSON
|
|
73
|
+
return this._deserializeJson(sv);
|
|
74
|
+
case 1: // MSGPACK
|
|
75
|
+
return this._deserializeMsgPack(sv);
|
|
76
|
+
case 2: // NUMPY_ARRAY
|
|
77
|
+
return this._numpyBridge.deserialize(sv);
|
|
78
|
+
case 3: // PANDAS_DATAFRAME
|
|
79
|
+
return this._dataframeBridge.deserializeDataFrame(sv);
|
|
80
|
+
case 4: // PANDAS_SERIES
|
|
81
|
+
return this._dataframeBridge.deserializeSeries(sv);
|
|
82
|
+
case 6: // PYTHON_REF
|
|
83
|
+
return this._deserializePythonRef(sv);
|
|
84
|
+
case 7: // BYTES
|
|
85
|
+
return this._deserializeBytes(sv);
|
|
86
|
+
case 8: // NONE
|
|
87
|
+
return null;
|
|
88
|
+
default:
|
|
89
|
+
logger.warn(`Unknown serialization format: ${format}`);
|
|
90
|
+
return null;
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
/**
|
|
94
|
+
* Deserialize synchronously (for non-async contexts).
|
|
95
|
+
* Limited: only works for simple types.
|
|
96
|
+
*/
|
|
97
|
+
deserializeSync(sv) {
|
|
98
|
+
const format = sv.format;
|
|
99
|
+
switch (format) {
|
|
100
|
+
case 0: // JSON
|
|
101
|
+
return this._deserializeJson(sv);
|
|
102
|
+
case 7: // BYTES
|
|
103
|
+
return sv.data instanceof Uint8Array ? sv.data : null;
|
|
104
|
+
case 8: // NONE
|
|
105
|
+
return null;
|
|
106
|
+
default:
|
|
107
|
+
// For binary formats, return null in sync mode
|
|
108
|
+
return null;
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
// ─── JavaScript → Python Wire Format ───────────────────────────────────────
|
|
112
|
+
/**
|
|
113
|
+
* Serialize a JavaScript value to Python wire format.
|
|
114
|
+
* Chooses the most efficient encoding automatically.
|
|
115
|
+
*/
|
|
116
|
+
async serialize(value) {
|
|
117
|
+
return this._serializeValue(value);
|
|
118
|
+
}
|
|
119
|
+
/**
|
|
120
|
+
* Serialize synchronously (for non-async contexts).
|
|
121
|
+
*/
|
|
122
|
+
serializeSync(value) {
|
|
123
|
+
return this._serializeValueSync(value);
|
|
124
|
+
}
|
|
125
|
+
// ─── Private Deserialization ───────────────────────────────────────────────
|
|
126
|
+
_deserializeJson(sv) {
|
|
127
|
+
const data = sv.data;
|
|
128
|
+
if (data === null || data === undefined) {
|
|
129
|
+
return null;
|
|
130
|
+
}
|
|
131
|
+
const jsonStr = typeof data === 'string' ? data : new TextDecoder().decode(data);
|
|
132
|
+
if (!jsonStr || jsonStr === 'null') {
|
|
133
|
+
return null;
|
|
134
|
+
}
|
|
135
|
+
if (jsonStr === 'true') {
|
|
136
|
+
return true;
|
|
137
|
+
}
|
|
138
|
+
if (jsonStr === 'false') {
|
|
139
|
+
return false;
|
|
140
|
+
}
|
|
141
|
+
try {
|
|
142
|
+
return JSON.parse(jsonStr);
|
|
143
|
+
}
|
|
144
|
+
catch {
|
|
145
|
+
// If JSON parse fails, return the raw string
|
|
146
|
+
return jsonStr;
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
_deserializeMsgPack(sv) {
|
|
150
|
+
const data = sv.data;
|
|
151
|
+
if (!data || !(data instanceof Uint8Array)) {
|
|
152
|
+
return null;
|
|
153
|
+
}
|
|
154
|
+
try {
|
|
155
|
+
return this._msgpackSerializer.decode(data);
|
|
156
|
+
}
|
|
157
|
+
catch (err) {
|
|
158
|
+
logger.warn('MsgPack deserialization failed', err);
|
|
159
|
+
return null;
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
_deserializePythonRef(sv) {
|
|
163
|
+
// PyRef deserialization is handled by PyProxy._deserializeAddonResult
|
|
164
|
+
// which has access to the addon. Here we return the raw ref.
|
|
165
|
+
const objectId = sv.metadata?.objectId;
|
|
166
|
+
if (objectId) {
|
|
167
|
+
return { __pyref__: objectId };
|
|
168
|
+
}
|
|
169
|
+
return null;
|
|
170
|
+
}
|
|
171
|
+
_deserializeBytes(sv) {
|
|
172
|
+
const data = sv.data;
|
|
173
|
+
if (!data) {
|
|
174
|
+
return null;
|
|
175
|
+
}
|
|
176
|
+
if (data instanceof Uint8Array) {
|
|
177
|
+
return data;
|
|
178
|
+
}
|
|
179
|
+
if (typeof data === 'string') {
|
|
180
|
+
return new TextEncoder().encode(data);
|
|
181
|
+
}
|
|
182
|
+
return null;
|
|
183
|
+
}
|
|
184
|
+
// ─── Private Serialization ─────────────────────────────────────────────────
|
|
185
|
+
async _serializeValue(value) {
|
|
186
|
+
return this._serializeValueSync(value);
|
|
187
|
+
}
|
|
188
|
+
_serializeValueSync(value) {
|
|
189
|
+
// null / undefined
|
|
190
|
+
if (value === null || value === undefined) {
|
|
191
|
+
return { format: 0, data: 'null', metadata: {} };
|
|
192
|
+
}
|
|
193
|
+
// Boolean
|
|
194
|
+
if (typeof value === 'boolean') {
|
|
195
|
+
return { format: 0, data: String(value), metadata: {} };
|
|
196
|
+
}
|
|
197
|
+
// Number
|
|
198
|
+
if (typeof value === 'number') {
|
|
199
|
+
if (Number.isNaN(value)) {
|
|
200
|
+
return { format: 0, data: 'null', metadata: {} };
|
|
201
|
+
}
|
|
202
|
+
return { format: 0, data: String(value), metadata: {} };
|
|
203
|
+
}
|
|
204
|
+
// BigInt
|
|
205
|
+
if (typeof value === 'bigint') {
|
|
206
|
+
return { format: 0, data: `"${value.toString()}"`, metadata: {} };
|
|
207
|
+
}
|
|
208
|
+
// String
|
|
209
|
+
if (typeof value === 'string') {
|
|
210
|
+
return { format: 0, data: JSON.stringify(value), metadata: {} };
|
|
211
|
+
}
|
|
212
|
+
// TypedArrays → NumPy format
|
|
213
|
+
if (value instanceof Float32Array) {
|
|
214
|
+
return this._numpyBridge.serializeTypedArray(value, 'float32');
|
|
215
|
+
}
|
|
216
|
+
if (value instanceof Float64Array) {
|
|
217
|
+
return this._numpyBridge.serializeTypedArray(value, 'float64');
|
|
218
|
+
}
|
|
219
|
+
if (value instanceof Int8Array) {
|
|
220
|
+
return this._numpyBridge.serializeTypedArray(value, 'int8');
|
|
221
|
+
}
|
|
222
|
+
if (value instanceof Int16Array) {
|
|
223
|
+
return this._numpyBridge.serializeTypedArray(value, 'int16');
|
|
224
|
+
}
|
|
225
|
+
if (value instanceof Int32Array) {
|
|
226
|
+
return this._numpyBridge.serializeTypedArray(value, 'int32');
|
|
227
|
+
}
|
|
228
|
+
if (value instanceof BigInt64Array) {
|
|
229
|
+
return this._numpyBridge.serializeTypedArray(value, 'int64');
|
|
230
|
+
}
|
|
231
|
+
if (value instanceof Uint8Array) {
|
|
232
|
+
return this._numpyBridge.serializeTypedArray(value, 'uint8');
|
|
233
|
+
}
|
|
234
|
+
if (value instanceof Uint16Array) {
|
|
235
|
+
return this._numpyBridge.serializeTypedArray(value, 'uint16');
|
|
236
|
+
}
|
|
237
|
+
if (value instanceof Uint32Array) {
|
|
238
|
+
return this._numpyBridge.serializeTypedArray(value, 'uint32');
|
|
239
|
+
}
|
|
240
|
+
if (value instanceof BigUint64Array) {
|
|
241
|
+
return this._numpyBridge.serializeTypedArray(value, 'uint64');
|
|
242
|
+
}
|
|
243
|
+
// Raw ArrayBuffer
|
|
244
|
+
if (value instanceof ArrayBuffer) {
|
|
245
|
+
return { format: 7, data: new Uint8Array(value), metadata: {} };
|
|
246
|
+
}
|
|
247
|
+
// Array — use MsgPack for large, JSON for small
|
|
248
|
+
if (Array.isArray(value)) {
|
|
249
|
+
try {
|
|
250
|
+
const json = JSON.stringify(value);
|
|
251
|
+
if (json.length <= this._options.maxJsonSize) {
|
|
252
|
+
return { format: 0, data: json, metadata: { length: value.length } };
|
|
253
|
+
}
|
|
254
|
+
// Large array → MessagePack
|
|
255
|
+
const packed = this._msgpackSerializer.encode(value);
|
|
256
|
+
return { format: 1, data: packed, metadata: { length: value.length } };
|
|
257
|
+
}
|
|
258
|
+
catch {
|
|
259
|
+
return { format: 8, data: null, metadata: {} };
|
|
260
|
+
}
|
|
261
|
+
}
|
|
262
|
+
// Plain object — JSON or MsgPack
|
|
263
|
+
if (typeof value === 'object') {
|
|
264
|
+
try {
|
|
265
|
+
const json = JSON.stringify(value);
|
|
266
|
+
if (json.length <= this._options.maxJsonSize) {
|
|
267
|
+
return { format: 0, data: json, metadata: {} };
|
|
268
|
+
}
|
|
269
|
+
const packed = this._msgpackSerializer.encode(value);
|
|
270
|
+
return { format: 1, data: packed, metadata: {} };
|
|
271
|
+
}
|
|
272
|
+
catch {
|
|
273
|
+
return { format: 8, data: null, metadata: {} };
|
|
274
|
+
}
|
|
275
|
+
}
|
|
276
|
+
// Fallback
|
|
277
|
+
return { format: 8, data: null, metadata: {} };
|
|
278
|
+
}
|
|
279
|
+
}
|
|
280
|
+
exports.Serializer = Serializer;
|
|
281
|
+
//# sourceMappingURL=Serializer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Serializer.js","sourceRoot":"","sources":["../../src/serialization/Serializer.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* nodepyx — PythonTypeMapper
|
|
3
|
+
* Maps Python type annotation strings → TypeScript type strings.
|
|
4
|
+
*
|
|
5
|
+
* Handles:
|
|
6
|
+
* - Python built-in types (str, int, float, bool, …)
|
|
7
|
+
* - typing module generics (List[X], Dict[K,V], Optional[X], Union[A,B], …)
|
|
8
|
+
* - numpy / pandas / torch special types
|
|
9
|
+
* - Forward references (strings in quotes)
|
|
10
|
+
* - PEP 604 union syntax (X | Y)
|
|
11
|
+
*/
|
|
12
|
+
export type TsType = string;
|
|
13
|
+
/**
|
|
14
|
+
* Mapping entry — maps a Python canonical name to a TS type.
|
|
15
|
+
*/
|
|
16
|
+
export interface TypeMapEntry {
|
|
17
|
+
/** TypeScript type string */
|
|
18
|
+
tsType: TsType;
|
|
19
|
+
/** Whether this type needs an import statement */
|
|
20
|
+
needsImport?: boolean;
|
|
21
|
+
/** The import path (e.g. './DataFrameBridge') */
|
|
22
|
+
importFrom?: string;
|
|
23
|
+
}
|
|
24
|
+
/** Context passed to mapType for resolving generic parameters */
|
|
25
|
+
export interface TypeMapContext {
|
|
26
|
+
/** Known class names from the current module */
|
|
27
|
+
knownClasses?: Set<string>;
|
|
28
|
+
/** Module name being inspected */
|
|
29
|
+
moduleName?: string;
|
|
30
|
+
/** Whether to emit strict types (never use `unknown`) */
|
|
31
|
+
strict?: boolean;
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Map a Python type annotation string to a TypeScript type string.
|
|
35
|
+
*
|
|
36
|
+
* @example
|
|
37
|
+
* ```typescript
|
|
38
|
+
* mapType('List[int]') // → 'Array<number>'
|
|
39
|
+
* mapType('Dict[str, float]') // → 'Record<string, number>'
|
|
40
|
+
* mapType('Optional[DataFrame]') // → 'DataFrameResult | null'
|
|
41
|
+
* mapType('Union[str, int, None]') // → 'string | number | null'
|
|
42
|
+
* mapType('Tuple[int, str, bool]') // → '[number, string, boolean]'
|
|
43
|
+
* ```
|
|
44
|
+
*/
|
|
45
|
+
export declare function mapType(pythonType: string, ctx?: TypeMapContext): TsType;
|
|
46
|
+
/**
|
|
47
|
+
* Map a Python return type annotation.
|
|
48
|
+
* Automatically wraps the result in `Promise<>` since all Python calls
|
|
49
|
+
* are asynchronous from the JavaScript side.
|
|
50
|
+
*
|
|
51
|
+
* Generator / Iterator returns are mapped to `AsyncGenerator`.
|
|
52
|
+
* None → Promise<void>
|
|
53
|
+
*/
|
|
54
|
+
export declare function mapReturnType(pythonReturnType: string, ctx?: TypeMapContext): TsType;
|
|
55
|
+
/**
|
|
56
|
+
* Convert a Python default value representation to a TypeScript literal.
|
|
57
|
+
*/
|
|
58
|
+
export declare function mapDefaultValue(pythonDefault: string): string;
|
|
59
|
+
/**
|
|
60
|
+
* Split generic parameters at the top level (respects nested brackets).
|
|
61
|
+
* e.g. "str, Dict[str, int], bool" → ["str", "Dict[str, int]", "bool"]
|
|
62
|
+
*/
|
|
63
|
+
export declare function splitGenericParams(params: string): string[];
|
|
64
|
+
/**
|
|
65
|
+
* Stateful type mapper that accumulates required imports
|
|
66
|
+
* and knows which class names belong to the current module.
|
|
67
|
+
*
|
|
68
|
+
* @example
|
|
69
|
+
* ```typescript
|
|
70
|
+
* const mapper = new PythonTypeMapper({ moduleName: 'sklearn.linear_model' });
|
|
71
|
+
* mapper.registerClass('LinearRegression');
|
|
72
|
+
*
|
|
73
|
+
* mapper.map('LinearRegression') // → 'LinearRegression' (local class ref)
|
|
74
|
+
* mapper.map('DataFrame') // → 'DataFrameResult'
|
|
75
|
+
* ```
|
|
76
|
+
*/
|
|
77
|
+
export declare class PythonTypeMapper {
|
|
78
|
+
private readonly _ctx;
|
|
79
|
+
private readonly _imports;
|
|
80
|
+
constructor(ctx?: TypeMapContext);
|
|
81
|
+
registerClass(name: string): void;
|
|
82
|
+
map(pyType: string): TsType;
|
|
83
|
+
mapReturn(pyType: string): TsType;
|
|
84
|
+
addImport(symbol: string, from: string): void;
|
|
85
|
+
generateImportBlock(): string;
|
|
86
|
+
}
|
|
87
|
+
//# sourceMappingURL=PythonTypeMapper.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PythonTypeMapper.d.ts","sourceRoot":"","sources":["../../src/types/PythonTypeMapper.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,MAAM,MAAM,MAAM,GAAG,MAAM,CAAC;AAE5B;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,6BAA6B;IAC7B,MAAM,EAAE,MAAM,CAAC;IACf,kDAAkD;IAClD,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,iDAAiD;IACjD,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,iEAAiE;AACjE,MAAM,WAAW,cAAc;IAC7B,gDAAgD;IAChD,YAAY,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IAC3B,kCAAkC;IAClC,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,yDAAyD;IACzD,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAoOD;;;;;;;;;;;GAWG;AACH,wBAAgB,OAAO,CACrB,UAAU,EAAE,MAAM,EAClB,GAAG,GAAE,cAAmB,GACvB,MAAM,CA0CR;AAID;;;;;;;GAOG;AACH,wBAAgB,aAAa,CAC3B,gBAAgB,EAAE,MAAM,EACxB,GAAG,GAAE,cAAmB,GACvB,MAAM,CAwBR;AAID;;GAEG;AACH,wBAAgB,eAAe,CAAC,aAAa,EAAE,MAAM,GAAG,MAAM,CAS7D;AAID;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,CAyB3D;AA2BD;;;;;;;;;;;;GAYG;AACH,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAiB;IACtC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAkC;gBAE/C,GAAG,GAAE,cAAmB;IAOpC,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAIjC,GAAG,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM;IAa3B,SAAS,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM;IAIjC,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI;IAO7C,mBAAmB,IAAI,MAAM;CAO9B"}
|