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,333 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* nodepyx — StubCache
|
|
4
|
+
* Manages the on-disk cache of generated TypeScript stub files (.d.ts).
|
|
5
|
+
*
|
|
6
|
+
* Cache layout on disk (default: <project>/.nodepyx/stubs/):
|
|
7
|
+
* <stubsDir>/
|
|
8
|
+
* pandas.d.ts ↠generated stub
|
|
9
|
+
* numpy.d.ts
|
|
10
|
+
* …
|
|
11
|
+
* _meta.json ↠cache metadata / timestamps
|
|
12
|
+
*
|
|
13
|
+
* A cached stub is considered stale when:
|
|
14
|
+
* 1. The Python library version changes (checked via pip show).
|
|
15
|
+
* 2. nodepyx itself is updated (checked via package version hash).
|
|
16
|
+
* 3. maxAgeMs has elapsed (default: 7 days).
|
|
17
|
+
*
|
|
18
|
+
* The cache falls back gracefully when the disk is unavailable (read-only
|
|
19
|
+
* filesystem, CI environments, etc.).
|
|
20
|
+
*/
|
|
21
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
22
|
+
if (k2 === undefined) k2 = k;
|
|
23
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
24
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
25
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
26
|
+
}
|
|
27
|
+
Object.defineProperty(o, k2, desc);
|
|
28
|
+
}) : (function(o, m, k, k2) {
|
|
29
|
+
if (k2 === undefined) k2 = k;
|
|
30
|
+
o[k2] = m[k];
|
|
31
|
+
}));
|
|
32
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
33
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
34
|
+
}) : function(o, v) {
|
|
35
|
+
o["default"] = v;
|
|
36
|
+
});
|
|
37
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
38
|
+
var ownKeys = function(o) {
|
|
39
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
40
|
+
var ar = [];
|
|
41
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
42
|
+
return ar;
|
|
43
|
+
};
|
|
44
|
+
return ownKeys(o);
|
|
45
|
+
};
|
|
46
|
+
return function (mod) {
|
|
47
|
+
if (mod && mod.__esModule) return mod;
|
|
48
|
+
var result = {};
|
|
49
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
50
|
+
__setModuleDefault(result, mod);
|
|
51
|
+
return result;
|
|
52
|
+
};
|
|
53
|
+
})();
|
|
54
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
55
|
+
exports.StubCache = void 0;
|
|
56
|
+
const fs = __importStar(require("fs"));
|
|
57
|
+
const path = __importStar(require("path"));
|
|
58
|
+
const Logger_1 = require("../utils/Logger");
|
|
59
|
+
const logger = new Logger_1.Logger('StubCache');
|
|
60
|
+
const SEVEN_DAYS_MS = 7 * 24 * 60 * 60 * 1000;
|
|
61
|
+
const META_FILENAME = '_meta.json';
|
|
62
|
+
/**
|
|
63
|
+
* StubCache — read / write TypeScript stubs to the on-disk cache.
|
|
64
|
+
*
|
|
65
|
+
* @example
|
|
66
|
+
* ```typescript
|
|
67
|
+
* const cache = new StubCache({ stubsDir: './.nodepyx/stubs' });
|
|
68
|
+
*
|
|
69
|
+
* // Check if a fresh stub exists
|
|
70
|
+
* const hit = cache.get('pandas');
|
|
71
|
+
* if (hit) {
|
|
72
|
+
* console.log(hit); // .d.ts content
|
|
73
|
+
* } else {
|
|
74
|
+
* const dts = await generateStub('pandas');
|
|
75
|
+
* cache.set('pandas', dts, { libVersion: '2.1.0' });
|
|
76
|
+
* }
|
|
77
|
+
* ```
|
|
78
|
+
*/
|
|
79
|
+
class StubCache {
|
|
80
|
+
_stubsDir;
|
|
81
|
+
_maxAgeMs;
|
|
82
|
+
_disabled;
|
|
83
|
+
_nodepyxVersion;
|
|
84
|
+
_meta = {};
|
|
85
|
+
_initialized = false;
|
|
86
|
+
constructor(options = {}) {
|
|
87
|
+
this._stubsDir = options.stubsDir ?? path.join(process.cwd(), '.nodepyx', 'stubs');
|
|
88
|
+
this._maxAgeMs = options.maxAgeMs ?? SEVEN_DAYS_MS;
|
|
89
|
+
this._disabled = options.disabled ?? false;
|
|
90
|
+
this._nodepyxVersion = options.nodepyxVersion ?? this._readnodepyxVersion();
|
|
91
|
+
}
|
|
92
|
+
// ─── Public API ──────────────────────────────────────────────────────────
|
|
93
|
+
/**
|
|
94
|
+
* Get cached stub content for a module.
|
|
95
|
+
* Returns null on miss, staleness, or if the cache is disabled.
|
|
96
|
+
*/
|
|
97
|
+
get(moduleName, libVersion) {
|
|
98
|
+
if (this._disabled) {
|
|
99
|
+
return null;
|
|
100
|
+
}
|
|
101
|
+
try {
|
|
102
|
+
this._ensureInit();
|
|
103
|
+
const meta = this._meta[moduleName];
|
|
104
|
+
if (!meta) {
|
|
105
|
+
return null;
|
|
106
|
+
}
|
|
107
|
+
// ── Staleness checks ─────────────────────────────────────────────
|
|
108
|
+
if (this._isStale(meta, libVersion)) {
|
|
109
|
+
logger.debug(`StubCache: stale stub for '${moduleName}'`);
|
|
110
|
+
return null;
|
|
111
|
+
}
|
|
112
|
+
const stubPath = this._stubPath(moduleName);
|
|
113
|
+
if (!fs.existsSync(stubPath)) {
|
|
114
|
+
return null;
|
|
115
|
+
}
|
|
116
|
+
return fs.readFileSync(stubPath, 'utf8');
|
|
117
|
+
}
|
|
118
|
+
catch (err) {
|
|
119
|
+
logger.warn(`StubCache.get failed for '${moduleName}'`, err);
|
|
120
|
+
return null;
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
/**
|
|
124
|
+
* Store a stub in the cache.
|
|
125
|
+
*/
|
|
126
|
+
set(moduleName, content, options = {}) {
|
|
127
|
+
if (this._disabled) {
|
|
128
|
+
return;
|
|
129
|
+
}
|
|
130
|
+
try {
|
|
131
|
+
this._ensureInit();
|
|
132
|
+
this._ensureDir();
|
|
133
|
+
const stubPath = this._stubPath(moduleName);
|
|
134
|
+
fs.writeFileSync(stubPath, content, 'utf8');
|
|
135
|
+
this._meta[moduleName] = {
|
|
136
|
+
nodepyxVersion: this._nodepyxVersion,
|
|
137
|
+
libVersion: options.libVersion ?? 'unknown',
|
|
138
|
+
generatedAt: Date.now(),
|
|
139
|
+
contentHash: this._hash(content),
|
|
140
|
+
};
|
|
141
|
+
this._saveMeta();
|
|
142
|
+
logger.debug(`StubCache: stored stub for '${moduleName}'`);
|
|
143
|
+
}
|
|
144
|
+
catch (err) {
|
|
145
|
+
logger.warn(`StubCache.set failed for '${moduleName}'`, err);
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
/**
|
|
149
|
+
* Remove a single stub from the cache.
|
|
150
|
+
*/
|
|
151
|
+
invalidate(moduleName) {
|
|
152
|
+
if (this._disabled) {
|
|
153
|
+
return;
|
|
154
|
+
}
|
|
155
|
+
try {
|
|
156
|
+
this._ensureInit();
|
|
157
|
+
const stubPath = this._stubPath(moduleName);
|
|
158
|
+
if (fs.existsSync(stubPath)) {
|
|
159
|
+
fs.unlinkSync(stubPath);
|
|
160
|
+
}
|
|
161
|
+
delete this._meta[moduleName];
|
|
162
|
+
this._saveMeta();
|
|
163
|
+
}
|
|
164
|
+
catch (err) {
|
|
165
|
+
logger.warn(`StubCache.invalidate failed for '${moduleName}'`, err);
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
/**
|
|
169
|
+
* Clear all cached stubs.
|
|
170
|
+
*/
|
|
171
|
+
clear() {
|
|
172
|
+
if (this._disabled) {
|
|
173
|
+
return;
|
|
174
|
+
}
|
|
175
|
+
try {
|
|
176
|
+
this._ensureInit();
|
|
177
|
+
for (const name of Object.keys(this._meta)) {
|
|
178
|
+
const stubPath = this._stubPath(name);
|
|
179
|
+
if (fs.existsSync(stubPath)) {
|
|
180
|
+
fs.unlinkSync(stubPath);
|
|
181
|
+
}
|
|
182
|
+
}
|
|
183
|
+
this._meta = {};
|
|
184
|
+
this._saveMeta();
|
|
185
|
+
logger.info('StubCache: cleared all stubs');
|
|
186
|
+
}
|
|
187
|
+
catch (err) {
|
|
188
|
+
logger.warn('StubCache.clear failed', err);
|
|
189
|
+
}
|
|
190
|
+
}
|
|
191
|
+
/**
|
|
192
|
+
* List all cached module names.
|
|
193
|
+
*/
|
|
194
|
+
list() {
|
|
195
|
+
if (this._disabled) {
|
|
196
|
+
return [];
|
|
197
|
+
}
|
|
198
|
+
try {
|
|
199
|
+
this._ensureInit();
|
|
200
|
+
return Object.keys(this._meta);
|
|
201
|
+
}
|
|
202
|
+
catch {
|
|
203
|
+
return [];
|
|
204
|
+
}
|
|
205
|
+
}
|
|
206
|
+
/**
|
|
207
|
+
* Check whether a fresh stub is cached.
|
|
208
|
+
*/
|
|
209
|
+
has(moduleName, libVersion) {
|
|
210
|
+
return this.get(moduleName, libVersion) !== null;
|
|
211
|
+
}
|
|
212
|
+
/**
|
|
213
|
+
* Return the absolute path to the stub file for a module.
|
|
214
|
+
*/
|
|
215
|
+
stubPath(moduleName) {
|
|
216
|
+
return this._stubPath(moduleName);
|
|
217
|
+
}
|
|
218
|
+
/**
|
|
219
|
+
* Return the stubs directory path.
|
|
220
|
+
*/
|
|
221
|
+
get stubsDir() {
|
|
222
|
+
return this._stubsDir;
|
|
223
|
+
}
|
|
224
|
+
// ─── Built-in stub management ─────────────────────────────────────────────
|
|
225
|
+
/**
|
|
226
|
+
* Copy a pre-built stub from the package's bundled stubs directory
|
|
227
|
+
* to the project's stub cache. Pre-built stubs ship inside the nodepyx
|
|
228
|
+
* package for common libraries (pandas, numpy, sklearn, torch).
|
|
229
|
+
*/
|
|
230
|
+
copyPrebuilt(moduleName) {
|
|
231
|
+
const src = path.join(__dirname, 'stubs', `${moduleName}.d.ts`);
|
|
232
|
+
if (!fs.existsSync(src)) {
|
|
233
|
+
return false;
|
|
234
|
+
}
|
|
235
|
+
try {
|
|
236
|
+
this._ensureDir();
|
|
237
|
+
const content = fs.readFileSync(src, 'utf8');
|
|
238
|
+
this.set(moduleName, content, { libVersion: 'prebuilt' });
|
|
239
|
+
logger.debug(`StubCache: copied pre-built stub for '${moduleName}'`);
|
|
240
|
+
return true;
|
|
241
|
+
}
|
|
242
|
+
catch (err) {
|
|
243
|
+
logger.warn(`StubCache.copyPrebuilt failed for '${moduleName}'`, err);
|
|
244
|
+
return false;
|
|
245
|
+
}
|
|
246
|
+
}
|
|
247
|
+
/**
|
|
248
|
+
* Pre-populate the cache with all bundled stubs.
|
|
249
|
+
*/
|
|
250
|
+
initPrebuilts() {
|
|
251
|
+
const builtinStubs = ['pandas', 'numpy', 'sklearn', 'torch'];
|
|
252
|
+
for (const name of builtinStubs) {
|
|
253
|
+
if (!this.has(name)) {
|
|
254
|
+
this.copyPrebuilt(name);
|
|
255
|
+
}
|
|
256
|
+
}
|
|
257
|
+
}
|
|
258
|
+
// ─── Private helpers ──────────────────────────────────────────────────────
|
|
259
|
+
_ensureInit() {
|
|
260
|
+
if (this._initialized) {
|
|
261
|
+
return;
|
|
262
|
+
}
|
|
263
|
+
this._initialized = true;
|
|
264
|
+
try {
|
|
265
|
+
this._ensureDir();
|
|
266
|
+
const metaPath = path.join(this._stubsDir, META_FILENAME);
|
|
267
|
+
if (fs.existsSync(metaPath)) {
|
|
268
|
+
const raw = fs.readFileSync(metaPath, 'utf8');
|
|
269
|
+
this._meta = JSON.parse(raw);
|
|
270
|
+
}
|
|
271
|
+
}
|
|
272
|
+
catch (err) {
|
|
273
|
+
logger.warn('StubCache: failed to load meta file, starting fresh', err);
|
|
274
|
+
this._meta = {};
|
|
275
|
+
}
|
|
276
|
+
}
|
|
277
|
+
_ensureDir() {
|
|
278
|
+
fs.mkdirSync(this._stubsDir, { recursive: true });
|
|
279
|
+
}
|
|
280
|
+
_saveMeta() {
|
|
281
|
+
try {
|
|
282
|
+
const metaPath = path.join(this._stubsDir, META_FILENAME);
|
|
283
|
+
fs.writeFileSync(metaPath, JSON.stringify(this._meta, null, 2), 'utf8');
|
|
284
|
+
}
|
|
285
|
+
catch (err) {
|
|
286
|
+
logger.warn('StubCache: failed to save meta file', err);
|
|
287
|
+
}
|
|
288
|
+
}
|
|
289
|
+
_stubPath(moduleName) {
|
|
290
|
+
// Replace dots with hyphens for filesystem safety
|
|
291
|
+
const safeName = moduleName.replace(/\./g, '-');
|
|
292
|
+
return path.join(this._stubsDir, `${safeName}.d.ts`);
|
|
293
|
+
}
|
|
294
|
+
_isStale(meta, libVersion) {
|
|
295
|
+
// Age check — use createdAt if present (test compatibility), else generatedAt
|
|
296
|
+
const timestamp = meta['createdAt'] ?? meta.generatedAt;
|
|
297
|
+
if (Date.now() - timestamp > this._maxAgeMs) {
|
|
298
|
+
return true;
|
|
299
|
+
}
|
|
300
|
+
// nodepyx version mismatch
|
|
301
|
+
if (meta.nodepyxVersion !== this._nodepyxVersion) {
|
|
302
|
+
return true;
|
|
303
|
+
}
|
|
304
|
+
// Library version mismatch (if provided)
|
|
305
|
+
if (libVersion && meta.libVersion !== 'prebuilt' && meta.libVersion !== libVersion) {
|
|
306
|
+
return true;
|
|
307
|
+
}
|
|
308
|
+
return false;
|
|
309
|
+
}
|
|
310
|
+
_readnodepyxVersion() {
|
|
311
|
+
try {
|
|
312
|
+
const pkgPath = path.join(__dirname, '..', '..', 'package.json');
|
|
313
|
+
if (fs.existsSync(pkgPath)) {
|
|
314
|
+
const pkg = JSON.parse(fs.readFileSync(pkgPath, 'utf8'));
|
|
315
|
+
return pkg.version ?? '0.0.0';
|
|
316
|
+
}
|
|
317
|
+
}
|
|
318
|
+
catch {
|
|
319
|
+
// ignore
|
|
320
|
+
}
|
|
321
|
+
return '0.0.0';
|
|
322
|
+
}
|
|
323
|
+
/** djb2 hash — fast, not cryptographic */
|
|
324
|
+
_hash(content) {
|
|
325
|
+
let h = 5381;
|
|
326
|
+
for (let i = 0; i < content.length; i++) {
|
|
327
|
+
h = ((h << 5) + h + content.charCodeAt(i)) >>> 0;
|
|
328
|
+
}
|
|
329
|
+
return h.toString(16);
|
|
330
|
+
}
|
|
331
|
+
}
|
|
332
|
+
exports.StubCache = StubCache;
|
|
333
|
+
//# sourceMappingURL=StubCache.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"StubCache.js","sourceRoot":"","sources":["../../src/types/StubCache.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,139 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* nodepyx — TypeGenerator
|
|
3
|
+
* Generates TypeScript .d.ts stub files from Python module introspection.
|
|
4
|
+
*
|
|
5
|
+
* Flow:
|
|
6
|
+
* 1. Check StubCache — return cached stub if fresh.
|
|
7
|
+
* 2. Run Python introspection via addon.runPythonCode()
|
|
8
|
+
* (executes type_inspector.py in the embedded Python runtime).
|
|
9
|
+
* 3. Parse the JSON introspection result.
|
|
10
|
+
* 4. Generate .d.ts content using PythonTypeMapper.
|
|
11
|
+
* 5. Store in StubCache.
|
|
12
|
+
* 6. Return type info array (PyTypeInfo[]).
|
|
13
|
+
*
|
|
14
|
+
* Generated stubs are compatible with TypeScript LSP — they provide
|
|
15
|
+
* real autocomplete inside editors without running Python.
|
|
16
|
+
*/
|
|
17
|
+
import { StubCache } from './StubCache';
|
|
18
|
+
import type { PyModuleInspection, PyCallableInfo, PyClassInfo, PyMemberInfo } from './python';
|
|
19
|
+
export type { PyModuleInspection, PyCallableInfo, PyClassInfo, PyMemberInfo };
|
|
20
|
+
export interface TypeGeneratorOptions {
|
|
21
|
+
/** Directory to store generated .d.ts files. Default: './.nodepyx/stubs' */
|
|
22
|
+
stubsDir?: string;
|
|
23
|
+
/** nodepyx version string for cache validation */
|
|
24
|
+
nodepyxVersion?: string;
|
|
25
|
+
/**
|
|
26
|
+
* Whether to emit strict types (never fall back to 'unknown').
|
|
27
|
+
* Default: false
|
|
28
|
+
*/
|
|
29
|
+
strictTypes?: boolean;
|
|
30
|
+
/**
|
|
31
|
+
* Maximum number of members to include per class in the generated stub.
|
|
32
|
+
* Default: 200
|
|
33
|
+
*/
|
|
34
|
+
maxMembersPerClass?: number;
|
|
35
|
+
/**
|
|
36
|
+
* Whether to include private members (names starting with _).
|
|
37
|
+
* Default: false
|
|
38
|
+
*/
|
|
39
|
+
includePrivate?: boolean;
|
|
40
|
+
/**
|
|
41
|
+
* Whether to include inherited members.
|
|
42
|
+
* Default: false
|
|
43
|
+
*/
|
|
44
|
+
includeInherited?: boolean;
|
|
45
|
+
}
|
|
46
|
+
export interface RawParamInfo {
|
|
47
|
+
name: string;
|
|
48
|
+
type?: string;
|
|
49
|
+
annotation?: string;
|
|
50
|
+
optional?: boolean;
|
|
51
|
+
has_default?: boolean;
|
|
52
|
+
default?: string;
|
|
53
|
+
kind?: string;
|
|
54
|
+
}
|
|
55
|
+
export interface RawCallableInfo {
|
|
56
|
+
name: string;
|
|
57
|
+
qual_name?: string;
|
|
58
|
+
docstring?: string;
|
|
59
|
+
parameters?: RawParamInfo[];
|
|
60
|
+
return_type?: string;
|
|
61
|
+
return_annotation?: string;
|
|
62
|
+
is_method?: boolean;
|
|
63
|
+
is_class_method?: boolean;
|
|
64
|
+
is_static_method?: boolean;
|
|
65
|
+
is_coroutine?: boolean;
|
|
66
|
+
is_generator?: boolean;
|
|
67
|
+
}
|
|
68
|
+
export interface RawMemberInfo {
|
|
69
|
+
name: string;
|
|
70
|
+
type?: string;
|
|
71
|
+
read_only?: boolean;
|
|
72
|
+
docstring?: string;
|
|
73
|
+
}
|
|
74
|
+
export interface RawClassInfo {
|
|
75
|
+
name: string;
|
|
76
|
+
qual_name?: string;
|
|
77
|
+
docstring?: string;
|
|
78
|
+
bases?: string[];
|
|
79
|
+
members?: RawMemberInfo[];
|
|
80
|
+
methods?: RawCallableInfo[];
|
|
81
|
+
properties?: RawMemberInfo[];
|
|
82
|
+
class_methods?: RawCallableInfo[];
|
|
83
|
+
static_methods?: RawCallableInfo[];
|
|
84
|
+
}
|
|
85
|
+
export interface RawModuleInspection {
|
|
86
|
+
name: string;
|
|
87
|
+
file?: string;
|
|
88
|
+
docstring?: string;
|
|
89
|
+
version?: string;
|
|
90
|
+
functions?: RawCallableInfo[];
|
|
91
|
+
classes?: RawClassInfo[];
|
|
92
|
+
constants?: RawMemberInfo[];
|
|
93
|
+
submodules?: string[];
|
|
94
|
+
error?: string;
|
|
95
|
+
}
|
|
96
|
+
/**
|
|
97
|
+
* TypeGenerator — generates TypeScript type stubs from Python modules.
|
|
98
|
+
*
|
|
99
|
+
* @example
|
|
100
|
+
* ```typescript
|
|
101
|
+
* const gen = new TypeGenerator({ stubsDir: './.nodepyx/stubs' });
|
|
102
|
+
*
|
|
103
|
+
* // Generate stub (uses cache if available)
|
|
104
|
+
* const dts = await gen.generateStub('pandas');
|
|
105
|
+
*
|
|
106
|
+
* // Access parsed type info
|
|
107
|
+
* const info = await gen.inspectModule('pandas');
|
|
108
|
+
* console.log(info.classes.map(c => c.name));
|
|
109
|
+
* ```
|
|
110
|
+
*/
|
|
111
|
+
export declare class TypeGenerator {
|
|
112
|
+
private readonly _options;
|
|
113
|
+
private readonly _cache;
|
|
114
|
+
constructor(options?: TypeGeneratorOptions);
|
|
115
|
+
/**
|
|
116
|
+
* Generate (or return cached) TypeScript stub for a Python module.
|
|
117
|
+
* Returns the .d.ts content as a string.
|
|
118
|
+
*/
|
|
119
|
+
generateStub(moduleName: string, inspection: RawModuleInspection, libVersion?: string): Promise<string>;
|
|
120
|
+
/**
|
|
121
|
+
* Parse raw introspection JSON from Python into typed structures.
|
|
122
|
+
*/
|
|
123
|
+
parseInspection(raw: RawModuleInspection): PyModuleInspection;
|
|
124
|
+
/**
|
|
125
|
+
* Return the StubCache instance.
|
|
126
|
+
*/
|
|
127
|
+
get cache(): StubCache;
|
|
128
|
+
private _generateDTS;
|
|
129
|
+
private _functionDecl;
|
|
130
|
+
private _paramDecl;
|
|
131
|
+
private _classDecl;
|
|
132
|
+
private _generateFallbackStub;
|
|
133
|
+
private _parseCallable;
|
|
134
|
+
private _parseParam;
|
|
135
|
+
private _parseClass;
|
|
136
|
+
private _parseMember;
|
|
137
|
+
private _docComment;
|
|
138
|
+
}
|
|
139
|
+
//# sourceMappingURL=TypeGenerator.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TypeGenerator.d.ts","sourceRoot":"","sources":["../../src/types/TypeGenerator.ts"],"names":[],"mappings":"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"}
|