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.
Files changed (63) hide show
  1. package/README.md +54 -221
  2. package/dist/cli.js +70 -3
  3. package/dist/cli.js.map +1 -1
  4. package/dist/config/index.d.ts.map +1 -1
  5. package/dist/config/index.js +56 -12
  6. package/dist/config/index.js.map +1 -1
  7. package/dist/core/generator.d.ts.map +1 -1
  8. package/dist/core/generator.js +6 -2
  9. package/dist/core/generator.js.map +1 -1
  10. package/dist/core/mapper.d.ts.map +1 -1
  11. package/dist/core/mapper.js +20 -5
  12. package/dist/core/mapper.js.map +1 -1
  13. package/dist/index.d.ts +2 -2
  14. package/dist/index.d.ts.map +1 -1
  15. package/dist/index.js +2 -2
  16. package/dist/index.js.map +1 -1
  17. package/dist/runtime/bridge-core.d.ts +64 -0
  18. package/dist/runtime/bridge-core.d.ts.map +1 -0
  19. package/dist/runtime/bridge-core.js +344 -0
  20. package/dist/runtime/bridge-core.js.map +1 -0
  21. package/dist/runtime/node.d.ts +5 -6
  22. package/dist/runtime/node.d.ts.map +1 -1
  23. package/dist/runtime/node.js +95 -193
  24. package/dist/runtime/node.js.map +1 -1
  25. package/dist/runtime/optimized-node.d.ts +4 -7
  26. package/dist/runtime/optimized-node.d.ts.map +1 -1
  27. package/dist/runtime/optimized-node.js +117 -186
  28. package/dist/runtime/optimized-node.js.map +1 -1
  29. package/dist/runtime/timed-out-request-tracker.d.ts +20 -0
  30. package/dist/runtime/timed-out-request-tracker.d.ts.map +1 -0
  31. package/dist/runtime/timed-out-request-tracker.js +48 -0
  32. package/dist/runtime/timed-out-request-tracker.js.map +1 -0
  33. package/dist/types/index.d.ts +3 -0
  34. package/dist/types/index.d.ts.map +1 -1
  35. package/dist/tywrap.d.ts +17 -4
  36. package/dist/tywrap.d.ts.map +1 -1
  37. package/dist/tywrap.js +68 -35
  38. package/dist/tywrap.js.map +1 -1
  39. package/dist/utils/codec.d.ts +22 -0
  40. package/dist/utils/codec.d.ts.map +1 -1
  41. package/dist/utils/codec.js +245 -55
  42. package/dist/utils/codec.js.map +1 -1
  43. package/dist/utils/logger.d.ts.map +1 -1
  44. package/dist/utils/logger.js +7 -4
  45. package/dist/utils/logger.js.map +1 -1
  46. package/dist/utils/python.d.ts.map +1 -1
  47. package/dist/utils/python.js.map +1 -1
  48. package/package.json +11 -2
  49. package/runtime/python_bridge.py +450 -69
  50. package/src/cli.ts +81 -5
  51. package/src/config/index.ts +67 -16
  52. package/src/core/generator.ts +6 -2
  53. package/src/core/mapper.ts +21 -8
  54. package/src/index.ts +2 -1
  55. package/src/runtime/bridge-core.ts +454 -0
  56. package/src/runtime/node.ts +117 -224
  57. package/src/runtime/optimized-node.ts +160 -235
  58. package/src/runtime/timed-out-request-tracker.ts +58 -0
  59. package/src/types/index.ts +3 -0
  60. package/src/tywrap.ts +91 -36
  61. package/src/utils/codec.ts +306 -83
  62. package/src/utils/logger.ts +11 -7
  63. 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
- > **Warning: Experimental Software**
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 type definitions generated from Python source analysis
19
- - **Multi-Runtime Support** - Works in Node.js (subprocess) and browsers (via Pyodide)
20
- - **IR-First Generation** - Python Intermediate Representation (IR) extractor analyzes modules and emits structured type information
21
- - **Rich Data Type Support** - Native handling for numpy, pandas, scipy, torch, sklearn, and Python stdlib types
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
- ### Initialize a Config
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
- // Create a "bridge" - the runtime adapter that executes Python code
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
- // Call Python functions with full type safety
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 Support
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
- The Node.js bridge spawns a Python subprocess and communicates via JSON-RPC:
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
- timeout: 30000 // Optional: request timeout in ms
57
+ timeoutMs: 30000
87
58
  });
88
-
89
- setRuntimeBridge(bridge);
90
59
  ```
91
60
 
92
- ### Browser (Pyodide)
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
- The browser bridge uses [Pyodide](https://pyodide.org/) to run Python in WebAssembly:
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, setRuntimeBridge } from 'npm:tywrap';
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
- version: '2.1.0',
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
- Config file resolution: `tywrap.config.ts`, `.mts`, `.js`, `.mjs`, `.cjs`, `.json`.
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
- | Python Type | JS/TS Type | Encoding | Notes |
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
- ### Arrow Encoding (Recommended)
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 numpy/pandas data, Arrow binary format is more efficient than JSON. Register a decoder at app startup:
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
- ### Environment Variables
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
- | Feature | Status |
284
- |---------|--------|
285
- | TypeScript generation | ✅ Working |
286
- | Node.js bridge | ✅ Working |
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
- For the full test matrix including Python library integration:
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 Repository](https://github.com/bbopen/tywrap)
318
- - [npm Package](https://www.npmjs.com/package/tywrap)
319
- - [Issue Tracker](https://github.com/bbopen/tywrap/issues)
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
- process.stdout.write(`Generated: ${res.written.join(', ')}\n`);
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;AAOH,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;AA2IF;;;;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,CA2DxF;AAOD;;GAEG;AACH,wBAAgB,YAAY,CAAC,MAAM,EAAE,YAAY,GAAG,YAAY,CAE/D"}
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"}
@@ -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(['numpy', 'pandas', 'pydantic', 'stdlib', 'scipy', 'torch', 'sklearn']);
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
- const require = createRequire(import.meta.url);
213
- const nodeModule = require('module');
214
- const moduleCtor = nodeModule.Module;
215
- const mod = new moduleCtor(resolved);
216
- mod.filename = resolved;
217
- mod.paths = moduleCtor._nodeModulePaths(dirname(resolved));
218
- mod._compile(output.outputText, resolved);
219
- const loaded = mod.exports.default ?? mod.exports;
220
- return ensureConfigObject(loaded ?? {}, resolved);
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
  }