tywrap 0.1.0 → 0.1.2
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/README.md +54 -221
- package/dist/cli.js +70 -3
- package/dist/cli.js.map +1 -1
- package/dist/config/index.d.ts.map +1 -1
- package/dist/config/index.js +56 -12
- package/dist/config/index.js.map +1 -1
- package/dist/core/generator.d.ts.map +1 -1
- package/dist/core/generator.js +6 -2
- package/dist/core/generator.js.map +1 -1
- package/dist/core/mapper.d.ts.map +1 -1
- package/dist/core/mapper.js +20 -5
- package/dist/core/mapper.js.map +1 -1
- package/dist/index.d.ts +2 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -2
- package/dist/index.js.map +1 -1
- package/dist/runtime/bridge-core.d.ts +64 -0
- package/dist/runtime/bridge-core.d.ts.map +1 -0
- package/dist/runtime/bridge-core.js +344 -0
- package/dist/runtime/bridge-core.js.map +1 -0
- package/dist/runtime/node.d.ts +5 -6
- package/dist/runtime/node.d.ts.map +1 -1
- package/dist/runtime/node.js +95 -193
- package/dist/runtime/node.js.map +1 -1
- package/dist/runtime/optimized-node.d.ts +4 -7
- package/dist/runtime/optimized-node.d.ts.map +1 -1
- package/dist/runtime/optimized-node.js +117 -186
- package/dist/runtime/optimized-node.js.map +1 -1
- package/dist/runtime/timed-out-request-tracker.d.ts +20 -0
- package/dist/runtime/timed-out-request-tracker.d.ts.map +1 -0
- package/dist/runtime/timed-out-request-tracker.js +48 -0
- package/dist/runtime/timed-out-request-tracker.js.map +1 -0
- package/dist/types/index.d.ts +3 -0
- package/dist/types/index.d.ts.map +1 -1
- package/dist/tywrap.d.ts +17 -4
- package/dist/tywrap.d.ts.map +1 -1
- package/dist/tywrap.js +68 -35
- package/dist/tywrap.js.map +1 -1
- package/dist/utils/codec.d.ts +22 -0
- package/dist/utils/codec.d.ts.map +1 -1
- package/dist/utils/codec.js +245 -55
- package/dist/utils/codec.js.map +1 -1
- package/dist/utils/logger.d.ts.map +1 -1
- package/dist/utils/logger.js +7 -4
- package/dist/utils/logger.js.map +1 -1
- package/dist/utils/python.d.ts.map +1 -1
- package/dist/utils/python.js.map +1 -1
- package/package.json +11 -2
- package/runtime/python_bridge.py +450 -69
- package/src/cli.ts +81 -5
- package/src/config/index.ts +67 -16
- package/src/core/generator.ts +6 -2
- package/src/core/mapper.ts +21 -8
- package/src/index.ts +2 -1
- package/src/runtime/bridge-core.ts +454 -0
- package/src/runtime/node.ts +117 -224
- package/src/runtime/optimized-node.ts +160 -235
- package/src/runtime/timed-out-request-tracker.ts +58 -0
- package/src/types/index.ts +3 -0
- package/src/tywrap.ts +91 -36
- package/src/utils/codec.ts +306 -83
- package/src/utils/logger.ts +11 -7
- package/src/utils/python.ts +0 -1
package/README.md
CHANGED
|
@@ -6,21 +6,14 @@
|
|
|
6
6
|
|
|
7
7
|
TypeScript wrapper for Python libraries with full type safety.
|
|
8
8
|
|
|
9
|
-
>
|
|
10
|
-
> **Version 0.1.0** - This project is in early experimental development. APIs may change significantly between versions. Not recommended for production use until version 1.0.0.
|
|
11
|
-
|
|
12
|
-
TypeScript is great, but many robust libraries exist only in Python, especially for data science and machine learning. Wouldn't it be great if you could use those libraries in your TypeScript project?
|
|
13
|
-
|
|
14
|
-
tywrap is a build-time code generation system that creates TypeScript wrappers for Python libraries, giving you type safety and IDE autocomplete for Python code.
|
|
9
|
+
> **⚠️ Experimental Software (v0.1.2)** - APIs may change between versions. Not recommended for production use until v1.0.0.
|
|
15
10
|
|
|
16
11
|
## Features
|
|
17
12
|
|
|
18
|
-
- **Full Type Safety** - TypeScript
|
|
19
|
-
- **Multi-Runtime
|
|
20
|
-
- **
|
|
21
|
-
- **
|
|
22
|
-
- **Efficient Serialization** - Apache Arrow binary format for high-performance data transfer (with JSON fallback)
|
|
23
|
-
- **Optional Caching** - Intelligent result caching system (opt-in via config)
|
|
13
|
+
- **Full Type Safety** - TypeScript definitions generated from Python source analysis
|
|
14
|
+
- **Multi-Runtime** - Node.js (subprocess) and browsers (Pyodide)
|
|
15
|
+
- **Rich Data Types** - numpy, pandas, scipy, torch, sklearn, and stdlib types
|
|
16
|
+
- **Efficient Serialization** - Apache Arrow binary format with JSON fallback
|
|
24
17
|
|
|
25
18
|
## Requirements
|
|
26
19
|
|
|
@@ -31,282 +24,122 @@ tywrap is a build-time code generation system that creates TypeScript wrappers f
|
|
|
31
24
|
|
|
32
25
|
```bash
|
|
33
26
|
npm install tywrap
|
|
27
|
+
npx tywrap init # Create config (and package.json scripts if present)
|
|
28
|
+
npx tywrap generate # Generate wrappers
|
|
34
29
|
```
|
|
35
30
|
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
```bash
|
|
39
|
-
npx tywrap init
|
|
40
|
-
```
|
|
41
|
-
|
|
42
|
-
This creates a `tywrap.config.ts` file. Edit it to specify which Python modules to wrap.
|
|
43
|
-
|
|
44
|
-
### Generate Wrappers
|
|
31
|
+
For CI (or to verify a dependency upgrade didn’t change the generated surface):
|
|
45
32
|
|
|
46
33
|
```bash
|
|
47
|
-
npx tywrap generate
|
|
34
|
+
npx tywrap generate --check
|
|
48
35
|
```
|
|
49
36
|
|
|
50
|
-
### Basic Usage
|
|
51
|
-
|
|
52
37
|
```typescript
|
|
53
38
|
import { NodeBridge } from 'tywrap/node';
|
|
54
39
|
import { setRuntimeBridge } from 'tywrap/runtime';
|
|
55
40
|
import * as math from './generated/math.generated.js';
|
|
56
41
|
|
|
57
|
-
|
|
58
|
-
const bridge = new NodeBridge({
|
|
59
|
-
pythonPath: 'python3',
|
|
60
|
-
virtualEnv: './venv'
|
|
61
|
-
});
|
|
62
|
-
|
|
63
|
-
// Set as the active bridge for generated wrappers
|
|
42
|
+
const bridge = new NodeBridge({ pythonPath: 'python3' });
|
|
64
43
|
setRuntimeBridge(bridge);
|
|
65
44
|
|
|
66
|
-
|
|
67
|
-
const result = await math.sqrt(16);
|
|
68
|
-
console.log(result); // 4
|
|
45
|
+
const result = await math.sqrt(16); // 4
|
|
69
46
|
```
|
|
70
47
|
|
|
71
|
-
## Runtime
|
|
72
|
-
|
|
73
|
-
tywrap provides **bridge** implementations—runtime adapters that handle communication between TypeScript and Python.
|
|
74
|
-
|
|
75
|
-
### Node.js (Primary)
|
|
48
|
+
## Runtime Bridges
|
|
76
49
|
|
|
77
|
-
|
|
50
|
+
### Node.js
|
|
78
51
|
|
|
79
52
|
```typescript
|
|
80
53
|
import { NodeBridge } from 'tywrap/node';
|
|
81
|
-
import { setRuntimeBridge } from 'tywrap/runtime';
|
|
82
|
-
|
|
83
54
|
const bridge = new NodeBridge({
|
|
84
55
|
pythonPath: 'python3',
|
|
85
56
|
virtualEnv: './venv',
|
|
86
|
-
|
|
57
|
+
timeoutMs: 30000
|
|
87
58
|
});
|
|
88
|
-
|
|
89
|
-
setRuntimeBridge(bridge);
|
|
90
59
|
```
|
|
91
60
|
|
|
92
|
-
|
|
61
|
+
NodeBridge is the default, correctness-first bridge. OptimizedNodeBridge is a performance-focused
|
|
62
|
+
prototype (process pooling + optional caching) and is not a drop-in replacement yet. See
|
|
63
|
+
`ROADMAP.md` for the unification plan.
|
|
93
64
|
|
|
94
|
-
|
|
65
|
+
Both bridges share a common JSONL core for protocol validation and timeouts.
|
|
66
|
+
|
|
67
|
+
By default, NodeBridge inherits only PATH/PYTHON*/TYWRAP_* from `process.env` to keep
|
|
68
|
+
the subprocess environment minimal. Set `inheritProcessEnv: true` if you need the
|
|
69
|
+
full environment. Large JSONL responses are capped by `maxLineLength` (defaults to
|
|
70
|
+
`TYWRAP_CODEC_MAX_BYTES` when set, otherwise 1MB).
|
|
71
|
+
|
|
72
|
+
You can cap payload sizes with `TYWRAP_CODEC_MAX_BYTES` (responses) and `TYWRAP_REQUEST_MAX_BYTES`
|
|
73
|
+
(requests) to keep JSONL traffic bounded.
|
|
74
|
+
|
|
75
|
+
### Browser (Pyodide)
|
|
95
76
|
|
|
96
77
|
```typescript
|
|
97
78
|
import { PyodideBridge } from 'tywrap/pyodide';
|
|
98
|
-
import { setRuntimeBridge } from 'tywrap/runtime';
|
|
99
|
-
|
|
100
79
|
const bridge = new PyodideBridge({
|
|
101
80
|
indexURL: 'https://cdn.jsdelivr.net/pyodide/v0.24.1/full/'
|
|
102
81
|
});
|
|
103
|
-
|
|
104
82
|
await bridge.init();
|
|
105
|
-
setRuntimeBridge(bridge);
|
|
106
83
|
```
|
|
107
84
|
|
|
108
85
|
### Deno / Bun
|
|
109
86
|
|
|
110
|
-
Deno and Bun can use the Node.js bridge. Import via npm specifier:
|
|
111
|
-
|
|
112
87
|
```typescript
|
|
113
|
-
// Deno
|
|
114
|
-
import { NodeBridge
|
|
115
|
-
|
|
116
|
-
// Bun (same as Node.js)
|
|
117
|
-
import { NodeBridge, setRuntimeBridge } from 'tywrap';
|
|
118
|
-
|
|
119
|
-
const bridge = new NodeBridge({ pythonPath: 'python3' });
|
|
120
|
-
setRuntimeBridge(bridge);
|
|
121
|
-
```
|
|
122
|
-
|
|
123
|
-
### Working with Classes
|
|
124
|
-
|
|
125
|
-
Generated class wrappers use async factory methods:
|
|
126
|
-
|
|
127
|
-
```typescript
|
|
128
|
-
import { Counter } from './generated/collections.generated';
|
|
129
|
-
|
|
130
|
-
// Create instance (async because it calls Python)
|
|
131
|
-
const counter = await Counter.create(['a', 'b', 'b', 'c', 'b']);
|
|
132
|
-
|
|
133
|
-
// Call methods
|
|
134
|
-
const mostCommon = await counter.mostCommon(2);
|
|
135
|
-
console.log(mostCommon); // [['b', 3], ['c', 1]]
|
|
136
|
-
|
|
137
|
-
// Clean up when done
|
|
138
|
-
await counter.disposeHandle();
|
|
88
|
+
import { NodeBridge } from 'npm:tywrap'; // Deno
|
|
89
|
+
import { NodeBridge } from 'tywrap'; // Bun
|
|
139
90
|
```
|
|
140
91
|
|
|
141
92
|
## Configuration
|
|
142
93
|
|
|
143
|
-
Create a `tywrap.config.ts` file:
|
|
144
|
-
|
|
145
94
|
```typescript
|
|
95
|
+
// tywrap.config.ts
|
|
146
96
|
import { defineConfig } from 'tywrap';
|
|
147
97
|
|
|
148
98
|
export default defineConfig({
|
|
149
99
|
pythonModules: {
|
|
150
|
-
'pandas': {
|
|
151
|
-
|
|
152
|
-
classes: ['DataFrame'],
|
|
153
|
-
functions: ['read_csv', 'concat']
|
|
154
|
-
},
|
|
155
|
-
'numpy': {
|
|
156
|
-
version: '1.24.0',
|
|
157
|
-
alias: 'np'
|
|
158
|
-
},
|
|
159
|
-
'./custom_module.py': {
|
|
160
|
-
// Local modules work too
|
|
161
|
-
}
|
|
162
|
-
},
|
|
163
|
-
|
|
164
|
-
output: {
|
|
165
|
-
dir: './src/generated',
|
|
166
|
-
format: 'esm',
|
|
167
|
-
declaration: true
|
|
100
|
+
'pandas': { classes: ['DataFrame'], functions: ['read_csv'] },
|
|
101
|
+
'numpy': { alias: 'np' }
|
|
168
102
|
},
|
|
169
|
-
|
|
170
|
-
performance: {
|
|
171
|
-
caching: true, // Enable result caching
|
|
172
|
-
batching: true // Batch multiple calls
|
|
173
|
-
},
|
|
174
|
-
|
|
175
|
-
debug: false // Set true for verbose logging
|
|
103
|
+
output: { dir: './src/generated' }
|
|
176
104
|
});
|
|
177
105
|
```
|
|
178
106
|
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
See the [Configuration Guide](./docs/configuration.md) for all options.
|
|
182
|
-
|
|
183
|
-
## How It Works
|
|
184
|
-
|
|
185
|
-
1. **Python IR Extraction** - The `tywrap_ir` tool analyzes Python modules using AST parsing and emits a versioned JSON Intermediate Representation (IR) containing function signatures, class definitions, and type annotations.
|
|
186
|
-
|
|
187
|
-
2. **Type Mapping** - The IR is transformed into TypeScript types. Python's `int` becomes `number`, `List[str]` becomes `string[]`, etc.
|
|
188
|
-
|
|
189
|
-
3. **Code Generation** - TypeScript wrapper code is generated with proper async handling and bridge integration.
|
|
190
|
-
|
|
191
|
-
4. **Runtime Execution** - At runtime, the bridge serializes calls to Python and deserializes results back to JavaScript.
|
|
192
|
-
|
|
193
|
-
## Documentation
|
|
194
|
-
|
|
195
|
-
- [Getting Started Guide](./docs/getting-started.md) - Detailed setup instructions
|
|
196
|
-
- [Configuration Reference](./docs/configuration.md) - All configuration options
|
|
197
|
-
- [Node.js Runtime](./docs/runtimes/nodejs.md) - Node.js bridge details
|
|
198
|
-
- [Browser Runtime](./docs/runtimes/browser.md) - Pyodide integration
|
|
199
|
-
- [API Reference](./docs/api/README.md) - Complete API documentation
|
|
200
|
-
- [Examples](./docs/examples/README.md) - Real-world usage examples
|
|
201
|
-
- [Troubleshooting](./docs/troubleshooting/README.md) - Common issues and solutions
|
|
202
|
-
- [Release Notes](./docs/release.md) - Version history and upgrade guides
|
|
203
|
-
|
|
204
|
-
## Data Type Support
|
|
205
|
-
|
|
206
|
-
tywrap automatically serializes Python data types to JavaScript. The Python bridge wraps complex types in **envelopes**—metadata wrappers that preserve type information.
|
|
207
|
-
|
|
208
|
-
### Supported Types
|
|
107
|
+
See [Configuration Guide](./docs/configuration.md) for all options.
|
|
209
108
|
|
|
210
|
-
|
|
211
|
-
|-------------|-----------|----------|-------|
|
|
212
|
-
| `numpy.ndarray` | `Uint8Array` or `array` | Arrow or JSON | Shape preserved |
|
|
213
|
-
| `pandas.DataFrame` | Arrow Table or `object[]` | Arrow or JSON | Column types preserved |
|
|
214
|
-
| `pandas.Series` | Arrow Table or `array` | Arrow or JSON | Name preserved |
|
|
215
|
-
| `scipy.sparse.*` | `SparseMatrix` | JSON | CSR, CSC, COO formats |
|
|
216
|
-
| `torch.Tensor` | `TorchTensor` | ndarray wrapper | CPU only by default |
|
|
217
|
-
| `sklearn estimator` | `SklearnEstimator` | JSON | Params only (no pickle) |
|
|
218
|
-
| `datetime.*` | `string` | ISO format | datetime, date, time |
|
|
219
|
-
| `timedelta` | `number` | seconds | Total seconds as float |
|
|
220
|
-
| `Decimal` | `string` | string | Preserves precision |
|
|
221
|
-
| `UUID` | `string` | string | Standard format |
|
|
222
|
-
| `Path` | `string` | string | Platform-neutral |
|
|
109
|
+
## Supported Data Types
|
|
223
110
|
|
|
224
|
-
|
|
111
|
+
| Python | TypeScript | Notes |
|
|
112
|
+
|--------|-----------|-------|
|
|
113
|
+
| `numpy.ndarray` | `Uint8Array` / `array` | Arrow or JSON |
|
|
114
|
+
| `pandas.DataFrame` | Arrow Table / `object[]` | Arrow or JSON |
|
|
115
|
+
| `scipy.sparse.*` | `SparseMatrix` | CSR, CSC, COO |
|
|
116
|
+
| `torch.Tensor` | `TorchTensor` | CPU only |
|
|
117
|
+
| `sklearn estimator` | `SklearnEstimator` | Params only |
|
|
118
|
+
| `datetime`, `Decimal`, `UUID`, `Path` | `string` | Standard formats |
|
|
225
119
|
|
|
226
|
-
For
|
|
120
|
+
For Arrow encoding with numpy/pandas:
|
|
227
121
|
|
|
228
122
|
```typescript
|
|
229
123
|
import { registerArrowDecoder } from 'tywrap';
|
|
230
124
|
import { tableFromIPC } from 'apache-arrow';
|
|
231
|
-
|
|
232
125
|
registerArrowDecoder(bytes => tableFromIPC(bytes));
|
|
233
126
|
```
|
|
234
127
|
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
| Variable | Purpose |
|
|
238
|
-
|----------|---------|
|
|
239
|
-
| `TYWRAP_CODEC_FALLBACK=json` | Use JSON instead of Arrow (for dev or constrained environments) |
|
|
240
|
-
| `TYWRAP_TORCH_ALLOW_COPY=1` | Allow GPU→CPU transfer and non-contiguous tensor copying |
|
|
241
|
-
|
|
242
|
-
### Envelope Format
|
|
243
|
-
|
|
244
|
-
```json
|
|
245
|
-
{"__tywrap__": "dataframe", "encoding": "arrow", "b64": "..."}
|
|
246
|
-
{"__tywrap__": "ndarray", "encoding": "json", "data": [...], "shape": [3, 4]}
|
|
247
|
-
{"__tywrap__": "scipy.sparse", "format": "csr", "data": [...], "indices": [...]}
|
|
248
|
-
{"__tywrap__": "torch.tensor", "value": {...}, "dtype": "float32", "device": "cpu"}
|
|
249
|
-
{"__tywrap__": "sklearn.estimator", "className": "LinearRegression", "params": {...}}
|
|
250
|
-
```
|
|
251
|
-
|
|
252
|
-
See [codec-roadmap.md](./docs/codec-roadmap.md) for encoding details and planned features.
|
|
253
|
-
|
|
254
|
-
## Roadmap
|
|
255
|
-
|
|
256
|
-
### Implemented
|
|
257
|
-
- [x] Core TypeScript generation from Python IR
|
|
258
|
-
- [x] Node.js runtime bridge (subprocess)
|
|
259
|
-
- [x] Browser runtime bridge (Pyodide)
|
|
260
|
-
- [x] Python AST analysis and type extraction
|
|
261
|
-
- [x] Codec support: numpy, pandas, scipy sparse, torch tensors, sklearn estimators
|
|
262
|
-
- [x] Apache Arrow binary encoding (with JSON fallback)
|
|
263
|
-
- [x] Python stdlib type conversions (datetime, Decimal, UUID, Path)
|
|
264
|
-
- [x] Result caching system (opt-in)
|
|
265
|
-
|
|
266
|
-
### Planned
|
|
267
|
-
- [ ] Build tool plugins (Vite, Webpack, Rollup)
|
|
268
|
-
- [ ] Hot reload / watch mode
|
|
269
|
-
- [ ] Source map generation
|
|
270
|
-
- [ ] IDE extensions
|
|
271
|
-
- [ ] SharedArrayBuffer for zero-copy transfers
|
|
272
|
-
- [ ] Streaming results for large datasets
|
|
273
|
-
|
|
274
|
-
## Versioning
|
|
275
|
-
|
|
276
|
-
tywrap follows [Semantic Versioning](https://semver.org/):
|
|
277
|
-
|
|
278
|
-
- **0.x.x** - Experimental releases. Breaking changes may occur in any release.
|
|
279
|
-
- **1.x.x** - Stable API. Breaking changes only in major versions.
|
|
280
|
-
|
|
281
|
-
### Current Status (v0.1.0)
|
|
128
|
+
## Documentation
|
|
282
129
|
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
| Pyodide bridge | ✅ Working |
|
|
288
|
-
| Type safety | ✅ Working |
|
|
289
|
-
| numpy/pandas codecs | ✅ Working |
|
|
290
|
-
| scipy/torch/sklearn codecs | ✅ Working |
|
|
291
|
-
| Deno/Bun | ⚠️ Uses Node bridge |
|
|
292
|
-
| API stability | ⚠️ May change |
|
|
130
|
+
- [Getting Started](./docs/getting-started.md)
|
|
131
|
+
- [Configuration](./docs/configuration.md)
|
|
132
|
+
- [API Reference](./docs/api/README.md)
|
|
133
|
+
- [Troubleshooting](./docs/troubleshooting/README.md)
|
|
293
134
|
|
|
294
135
|
## Contributing
|
|
295
136
|
|
|
296
|
-
We welcome contributions! See [CONTRIBUTING.md](./CONTRIBUTING.md) for guidelines.
|
|
297
|
-
|
|
298
|
-
To run tests locally:
|
|
299
|
-
|
|
300
137
|
```bash
|
|
301
138
|
npm install
|
|
302
139
|
npm test
|
|
303
140
|
```
|
|
304
141
|
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
```bash
|
|
308
|
-
npm run test:python:suite:core
|
|
309
|
-
```
|
|
142
|
+
See [CONTRIBUTING.md](./CONTRIBUTING.md) for guidelines.
|
|
310
143
|
|
|
311
144
|
## License
|
|
312
145
|
|
|
@@ -314,6 +147,6 @@ MIT © [tywrap contributors](LICENSE)
|
|
|
314
147
|
|
|
315
148
|
## Links
|
|
316
149
|
|
|
317
|
-
- [GitHub
|
|
318
|
-
- [npm
|
|
319
|
-
- [
|
|
150
|
+
- [GitHub](https://github.com/bbopen/tywrap)
|
|
151
|
+
- [npm](https://www.npmjs.com/package/tywrap)
|
|
152
|
+
- [Issues](https://github.com/bbopen/tywrap/issues)
|
package/dist/cli.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import { existsSync } from 'node:fs';
|
|
3
|
-
import { writeFile } from 'node:fs/promises';
|
|
3
|
+
import { readFile, writeFile } from 'node:fs/promises';
|
|
4
4
|
import { resolve } from 'node:path';
|
|
5
5
|
import yargs from 'yargs';
|
|
6
6
|
import { hideBin } from 'yargs/helpers';
|
|
@@ -79,6 +79,42 @@ ${moduleLines}
|
|
|
79
79
|
});
|
|
80
80
|
`;
|
|
81
81
|
}
|
|
82
|
+
async function addRecommendedScriptsToPackageJson(cwd) {
|
|
83
|
+
const packageJsonPath = resolve(cwd, 'package.json');
|
|
84
|
+
// eslint-disable-next-line security/detect-non-literal-fs-filename -- path is derived from cwd
|
|
85
|
+
if (!existsSync(packageJsonPath)) {
|
|
86
|
+
return;
|
|
87
|
+
}
|
|
88
|
+
try {
|
|
89
|
+
// eslint-disable-next-line security/detect-non-literal-fs-filename -- path is derived from cwd
|
|
90
|
+
const raw = await readFile(packageJsonPath, 'utf-8');
|
|
91
|
+
const pkg = JSON.parse(raw);
|
|
92
|
+
const scripts = typeof pkg.scripts === 'object' && pkg.scripts !== null && !Array.isArray(pkg.scripts)
|
|
93
|
+
? pkg.scripts
|
|
94
|
+
: {};
|
|
95
|
+
const nextScripts = { ...scripts };
|
|
96
|
+
let changed = false;
|
|
97
|
+
if (nextScripts['tywrap:generate'] === undefined) {
|
|
98
|
+
nextScripts['tywrap:generate'] = 'tywrap generate';
|
|
99
|
+
changed = true;
|
|
100
|
+
}
|
|
101
|
+
if (nextScripts['tywrap:check'] === undefined) {
|
|
102
|
+
nextScripts['tywrap:check'] = 'tywrap generate --check';
|
|
103
|
+
changed = true;
|
|
104
|
+
}
|
|
105
|
+
if (!changed) {
|
|
106
|
+
return;
|
|
107
|
+
}
|
|
108
|
+
pkg.scripts = nextScripts;
|
|
109
|
+
const out = `${JSON.stringify(pkg, null, 2)}\n`;
|
|
110
|
+
// eslint-disable-next-line security/detect-non-literal-fs-filename -- path is derived from cwd
|
|
111
|
+
await writeFile(packageJsonPath, out, 'utf-8');
|
|
112
|
+
}
|
|
113
|
+
catch (err) {
|
|
114
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
115
|
+
log.warn('Failed to update package.json scripts', { error: message });
|
|
116
|
+
}
|
|
117
|
+
}
|
|
82
118
|
async function main() {
|
|
83
119
|
await yargs(hideBin(process.argv))
|
|
84
120
|
.scriptName('tywrap')
|
|
@@ -132,6 +168,11 @@ async function main() {
|
|
|
132
168
|
type: 'boolean',
|
|
133
169
|
default: false,
|
|
134
170
|
describe: 'Exit with code 2 if generation emits warnings',
|
|
171
|
+
})
|
|
172
|
+
.option('check', {
|
|
173
|
+
type: 'boolean',
|
|
174
|
+
default: false,
|
|
175
|
+
describe: 'Check whether generated wrappers are up to date without writing files',
|
|
135
176
|
})
|
|
136
177
|
.strict(), async (argv) => {
|
|
137
178
|
const { configPath, explicit } = resolveConfigPath(argv.config);
|
|
@@ -179,8 +220,26 @@ async function main() {
|
|
|
179
220
|
log.error('No pythonModules configured. Use --modules or update your config.');
|
|
180
221
|
process.exit(1);
|
|
181
222
|
}
|
|
182
|
-
const res = await generate(options);
|
|
183
|
-
|
|
223
|
+
const res = await generate(options, { check: argv.check });
|
|
224
|
+
if (argv.check) {
|
|
225
|
+
const outOfDate = res.outOfDate ?? [];
|
|
226
|
+
if (outOfDate.length === 0) {
|
|
227
|
+
process.stdout.write('Generated wrappers are up to date.\n');
|
|
228
|
+
}
|
|
229
|
+
else {
|
|
230
|
+
process.stderr.write('Generated wrappers are out of date:\n');
|
|
231
|
+
for (const file of outOfDate) {
|
|
232
|
+
process.stderr.write(`- ${file}\n`);
|
|
233
|
+
}
|
|
234
|
+
process.stderr.write('\nRun `tywrap generate` to update.\n');
|
|
235
|
+
if (!(argv.failOnWarn && res.warnings.length > 0)) {
|
|
236
|
+
process.exit(3);
|
|
237
|
+
}
|
|
238
|
+
}
|
|
239
|
+
}
|
|
240
|
+
else {
|
|
241
|
+
process.stdout.write(`Generated: ${res.written.join(', ')}\n`);
|
|
242
|
+
}
|
|
184
243
|
if (argv.failOnWarn && res.warnings.length > 0) {
|
|
185
244
|
log.error(`Warnings encountered (count ${res.warnings.length}). Failing due to --fail-on-warn.`);
|
|
186
245
|
process.exit(2);
|
|
@@ -223,6 +282,11 @@ async function main() {
|
|
|
223
282
|
type: 'boolean',
|
|
224
283
|
default: false,
|
|
225
284
|
describe: 'Overwrite existing config file',
|
|
285
|
+
})
|
|
286
|
+
.option('scripts', {
|
|
287
|
+
type: 'boolean',
|
|
288
|
+
default: true,
|
|
289
|
+
describe: 'Add recommended tywrap scripts to package.json (use --no-scripts to disable)',
|
|
226
290
|
})
|
|
227
291
|
.strict(), async (argv) => {
|
|
228
292
|
const modules = parseModules(argv.modules);
|
|
@@ -243,6 +307,9 @@ async function main() {
|
|
|
243
307
|
// eslint-disable-next-line security/detect-non-literal-fs-filename -- config path is user-controlled
|
|
244
308
|
await writeFile(targetPath, content, 'utf-8');
|
|
245
309
|
process.stdout.write(`Created ${targetPath}\n`);
|
|
310
|
+
if (argv.scripts) {
|
|
311
|
+
await addRecommendedScriptsToPackageJson(process.cwd());
|
|
312
|
+
}
|
|
246
313
|
}
|
|
247
314
|
catch (err) {
|
|
248
315
|
const message = err instanceof Error ? err.message : String(err);
|
package/dist/cli.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/config/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/config/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAQH,OAAO,KAAK,EACV,aAAa,EAKd,MAAM,mBAAmB,CAAC;AAG3B;;GAEG;AACH,MAAM,MAAM,YAAY,GAAG,aAAa,CAAC;AAEzC,KAAK,WAAW,CAAC,CAAC,IAAI;KACnB,CAAC,IAAI,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,SAAS,KAAK,CAAC,MAAM,CAAC,CAAC,GACxC,KAAK,CAAC,CAAC,CAAC,GACR,CAAC,CAAC,CAAC,CAAC,SAAS,MAAM,GACjB,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GACjB,CAAC,CAAC,CAAC,CAAC;CACX,CAAC;AAmJF;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,SAAS,GAAE,WAAW,CAAC,aAAa,CAAM,GAAG,YAAY,CAIrF;AAED,MAAM,WAAW,oBAAoB;IACnC,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,WAAW,CAAC,aAAa,CAAC,CAAC;IACvC,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,aAAa,CAAC,EAAE,OAAO,CAAC;CACzB;AAED;;;GAGG;AACH,wBAAsB,aAAa,CAAC,OAAO,GAAE,oBAAyB,GAAG,OAAO,CAAC,YAAY,CAAC,CAmB7F;AAED;;GAEG;AACH,wBAAsB,cAAc,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC,CAqGxF;AAOD;;GAEG;AACH,wBAAgB,YAAY,CAAC,MAAM,EAAE,YAAY,GAAG,YAAY,CAE/D"}
|
package/dist/config/index.js
CHANGED
|
@@ -4,8 +4,9 @@
|
|
|
4
4
|
* Loads configuration from defaults, optional config file and CLI overrides
|
|
5
5
|
* with basic validation of known options.
|
|
6
6
|
*/
|
|
7
|
+
import { randomUUID } from 'node:crypto';
|
|
7
8
|
import { existsSync } from 'node:fs';
|
|
8
|
-
import { readFile } from 'node:fs/promises';
|
|
9
|
+
import { readFile, rm, writeFile } from 'node:fs/promises';
|
|
9
10
|
import { createRequire } from 'node:module';
|
|
10
11
|
import { dirname, extname, resolve } from 'node:path';
|
|
11
12
|
import { pathToFileURL } from 'node:url';
|
|
@@ -118,7 +119,15 @@ function validateConfig(config) {
|
|
|
118
119
|
}
|
|
119
120
|
if (config.types) {
|
|
120
121
|
const presets = config.types.presets;
|
|
121
|
-
const validPresets = new Set([
|
|
122
|
+
const validPresets = new Set([
|
|
123
|
+
'numpy',
|
|
124
|
+
'pandas',
|
|
125
|
+
'pydantic',
|
|
126
|
+
'stdlib',
|
|
127
|
+
'scipy',
|
|
128
|
+
'torch',
|
|
129
|
+
'sklearn',
|
|
130
|
+
]);
|
|
122
131
|
if (presets !== undefined) {
|
|
123
132
|
if (!Array.isArray(presets) || presets.some(p => typeof p !== 'string')) {
|
|
124
133
|
throw new Error('types.presets must be an array of strings');
|
|
@@ -201,23 +210,58 @@ export async function loadConfigFile(configFile) {
|
|
|
201
210
|
if (ext === '.ts' || ext === '.mts' || ext === '.cts') {
|
|
202
211
|
const ts = await import('typescript');
|
|
203
212
|
const source = await safeReadFileAsync(resolved);
|
|
213
|
+
// Why: many configs want to `import { defineConfig } from 'tywrap'`. The tywrap package is ESM,
|
|
214
|
+
// so evaluating a transpiled CommonJS config would try `require('tywrap')` and fail. Treat
|
|
215
|
+
// `.ts`/`.mts` configs as ESM, and only treat `.cts` as CommonJS to match Node conventions.
|
|
216
|
+
const emitCommonJs = ext === '.cts';
|
|
204
217
|
const output = ts.transpileModule(source, {
|
|
205
218
|
compilerOptions: {
|
|
206
|
-
module: ts.ModuleKind.CommonJS,
|
|
219
|
+
module: emitCommonJs ? ts.ModuleKind.CommonJS : ts.ModuleKind.ES2020,
|
|
207
220
|
target: ts.ScriptTarget.ES2020,
|
|
208
221
|
esModuleInterop: true,
|
|
209
222
|
},
|
|
210
223
|
fileName: resolved,
|
|
211
224
|
});
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
225
|
+
if (emitCommonJs) {
|
|
226
|
+
// Why: `.cts` is explicitly CommonJS. We evaluate the transpiled output in-memory using
|
|
227
|
+
// Node's Module internals (`Module._compile` / `_nodeModulePaths`) to avoid writing an extra
|
|
228
|
+
// temp file. These are private Node APIs, so we keep this tooling path scoped and rely on
|
|
229
|
+
// supported Node versions (see package.json engines).
|
|
230
|
+
const require = createRequire(import.meta.url);
|
|
231
|
+
const nodeModule = require('module');
|
|
232
|
+
const moduleCtor = nodeModule.Module;
|
|
233
|
+
if (typeof moduleCtor !== 'function') {
|
|
234
|
+
throw new Error('[tywrap] Unable to evaluate .cts config in-memory (emitCommonJs=true): missing Node Module constructor');
|
|
235
|
+
}
|
|
236
|
+
const nodeModulePaths = moduleCtor._nodeModulePaths;
|
|
237
|
+
if (typeof nodeModulePaths !== 'function') {
|
|
238
|
+
throw new Error('[tywrap] Unable to evaluate .cts config in-memory (emitCommonJs=true): missing Node private API Module._nodeModulePaths');
|
|
239
|
+
}
|
|
240
|
+
const mod = new moduleCtor(resolved);
|
|
241
|
+
const compile = mod._compile;
|
|
242
|
+
if (typeof compile !== 'function') {
|
|
243
|
+
throw new Error('[tywrap] Unable to evaluate .cts config in-memory (emitCommonJs=true): missing Node private API Module._compile');
|
|
244
|
+
}
|
|
245
|
+
mod.filename = resolved;
|
|
246
|
+
mod.paths = nodeModulePaths(dirname(resolved));
|
|
247
|
+
compile.call(mod, output.outputText, resolved);
|
|
248
|
+
const loaded = mod.exports.default ?? mod.exports;
|
|
249
|
+
return ensureConfigObject(loaded ?? {}, resolved);
|
|
250
|
+
}
|
|
251
|
+
// Why: Node can't import ESM from a string without a custom loader. We write the transpiled
|
|
252
|
+
// output to a temporary `.mjs` file next to the source config so relative imports and Node
|
|
253
|
+
// resolution behave naturally, then clean it up immediately after loading.
|
|
254
|
+
const tmpPath = resolve(dirname(resolved), `.tywrap.config.${randomUUID()}.mjs`);
|
|
255
|
+
try {
|
|
256
|
+
// eslint-disable-next-line security/detect-non-literal-fs-filename -- temp path is derived from config location
|
|
257
|
+
await writeFile(tmpPath, output.outputText, 'utf-8');
|
|
258
|
+
const mod = (await import(pathToFileURL(tmpPath).href));
|
|
259
|
+
const loaded = mod.default ?? mod;
|
|
260
|
+
return ensureConfigObject(loaded ?? {}, resolved);
|
|
261
|
+
}
|
|
262
|
+
finally {
|
|
263
|
+
await rm(tmpPath, { force: true });
|
|
264
|
+
}
|
|
221
265
|
}
|
|
222
266
|
throw new Error(`Unsupported configuration file extension: ${ext}`);
|
|
223
267
|
}
|