tywrap 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (137) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +319 -0
  3. package/dist/cli.d.ts +3 -0
  4. package/dist/cli.d.ts.map +1 -0
  5. package/dist/cli.js +263 -0
  6. package/dist/cli.js.map +1 -0
  7. package/dist/config/index.d.ts +41 -0
  8. package/dist/config/index.d.ts.map +1 -0
  9. package/dist/config/index.js +234 -0
  10. package/dist/config/index.js.map +1 -0
  11. package/dist/core/analyzer.d.ts +63 -0
  12. package/dist/core/analyzer.d.ts.map +1 -0
  13. package/dist/core/analyzer.js +676 -0
  14. package/dist/core/analyzer.js.map +1 -0
  15. package/dist/core/discovery.d.ts +85 -0
  16. package/dist/core/discovery.d.ts.map +1 -0
  17. package/dist/core/discovery.js +344 -0
  18. package/dist/core/discovery.js.map +1 -0
  19. package/dist/core/generator.d.ts +37 -0
  20. package/dist/core/generator.d.ts.map +1 -0
  21. package/dist/core/generator.js +368 -0
  22. package/dist/core/generator.js.map +1 -0
  23. package/dist/core/mapper.d.ts +40 -0
  24. package/dist/core/mapper.d.ts.map +1 -0
  25. package/dist/core/mapper.js +401 -0
  26. package/dist/core/mapper.js.map +1 -0
  27. package/dist/core/validation.d.ts +79 -0
  28. package/dist/core/validation.d.ts.map +1 -0
  29. package/dist/core/validation.js +486 -0
  30. package/dist/core/validation.js.map +1 -0
  31. package/dist/index.d.ts +26 -0
  32. package/dist/index.d.ts.map +1 -0
  33. package/dist/index.js +29 -0
  34. package/dist/index.js.map +1 -0
  35. package/dist/runtime/base.d.ts +12 -0
  36. package/dist/runtime/base.d.ts.map +1 -0
  37. package/dist/runtime/base.js +6 -0
  38. package/dist/runtime/base.js.map +1 -0
  39. package/dist/runtime/errors.d.ts +17 -0
  40. package/dist/runtime/errors.d.ts.map +1 -0
  41. package/dist/runtime/errors.js +21 -0
  42. package/dist/runtime/errors.js.map +1 -0
  43. package/dist/runtime/http.d.ts +22 -0
  44. package/dist/runtime/http.d.ts.map +1 -0
  45. package/dist/runtime/http.js +79 -0
  46. package/dist/runtime/http.js.map +1 -0
  47. package/dist/runtime/index.d.ts +8 -0
  48. package/dist/runtime/index.d.ts.map +1 -0
  49. package/dist/runtime/index.js +17 -0
  50. package/dist/runtime/index.js.map +1 -0
  51. package/dist/runtime/node.d.ts +48 -0
  52. package/dist/runtime/node.d.ts.map +1 -0
  53. package/dist/runtime/node.js +328 -0
  54. package/dist/runtime/node.js.map +1 -0
  55. package/dist/runtime/optimized-node.d.ts +131 -0
  56. package/dist/runtime/optimized-node.d.ts.map +1 -0
  57. package/dist/runtime/optimized-node.js +622 -0
  58. package/dist/runtime/optimized-node.js.map +1 -0
  59. package/dist/runtime/protocol.d.ts +3 -0
  60. package/dist/runtime/protocol.d.ts.map +1 -0
  61. package/dist/runtime/protocol.js +3 -0
  62. package/dist/runtime/protocol.js.map +1 -0
  63. package/dist/runtime/pyodide.d.ts +27 -0
  64. package/dist/runtime/pyodide.d.ts.map +1 -0
  65. package/dist/runtime/pyodide.js +191 -0
  66. package/dist/runtime/pyodide.js.map +1 -0
  67. package/dist/tools/python_suite.js +173 -0
  68. package/dist/tools/python_suite.js.map +1 -0
  69. package/dist/types/index.d.ts +299 -0
  70. package/dist/types/index.d.ts.map +1 -0
  71. package/dist/types/index.js +5 -0
  72. package/dist/types/index.js.map +1 -0
  73. package/dist/tywrap.d.ts +29 -0
  74. package/dist/tywrap.d.ts.map +1 -0
  75. package/dist/tywrap.js +589 -0
  76. package/dist/tywrap.js.map +1 -0
  77. package/dist/utils/bundle-optimizer.d.ts +182 -0
  78. package/dist/utils/bundle-optimizer.d.ts.map +1 -0
  79. package/dist/utils/bundle-optimizer.js +680 -0
  80. package/dist/utils/bundle-optimizer.js.map +1 -0
  81. package/dist/utils/cache.d.ts +149 -0
  82. package/dist/utils/cache.d.ts.map +1 -0
  83. package/dist/utils/cache.js +492 -0
  84. package/dist/utils/cache.js.map +1 -0
  85. package/dist/utils/codec.d.ts +94 -0
  86. package/dist/utils/codec.d.ts.map +1 -0
  87. package/dist/utils/codec.js +150 -0
  88. package/dist/utils/codec.js.map +1 -0
  89. package/dist/utils/logger.d.ts +42 -0
  90. package/dist/utils/logger.d.ts.map +1 -0
  91. package/dist/utils/logger.js +140 -0
  92. package/dist/utils/logger.js.map +1 -0
  93. package/dist/utils/memory-profiler.d.ts +123 -0
  94. package/dist/utils/memory-profiler.d.ts.map +1 -0
  95. package/dist/utils/memory-profiler.js +426 -0
  96. package/dist/utils/memory-profiler.js.map +1 -0
  97. package/dist/utils/parallel-processor.d.ts +146 -0
  98. package/dist/utils/parallel-processor.d.ts.map +1 -0
  99. package/dist/utils/parallel-processor.js +636 -0
  100. package/dist/utils/parallel-processor.js.map +1 -0
  101. package/dist/utils/python.d.ts +8 -0
  102. package/dist/utils/python.d.ts.map +1 -0
  103. package/dist/utils/python.js +56 -0
  104. package/dist/utils/python.js.map +1 -0
  105. package/dist/utils/runtime.d.ts +153 -0
  106. package/dist/utils/runtime.d.ts.map +1 -0
  107. package/dist/utils/runtime.js +519 -0
  108. package/dist/utils/runtime.js.map +1 -0
  109. package/package.json +136 -0
  110. package/runtime/python_bridge.py +476 -0
  111. package/src/cli.ts +331 -0
  112. package/src/config/index.ts +289 -0
  113. package/src/core/analyzer.ts +788 -0
  114. package/src/core/discovery.ts +415 -0
  115. package/src/core/generator.ts +447 -0
  116. package/src/core/mapper.ts +504 -0
  117. package/src/core/validation.ts +693 -0
  118. package/src/index.ts +83 -0
  119. package/src/runtime/base.ts +32 -0
  120. package/src/runtime/errors.ts +19 -0
  121. package/src/runtime/http.ts +132 -0
  122. package/src/runtime/index.ts +24 -0
  123. package/src/runtime/node.ts +431 -0
  124. package/src/runtime/optimized-node.ts +838 -0
  125. package/src/runtime/protocol.ts +2 -0
  126. package/src/runtime/pyodide.ts +228 -0
  127. package/src/types/global.d.ts +60 -0
  128. package/src/types/index.ts +410 -0
  129. package/src/tywrap.ts +669 -0
  130. package/src/utils/bundle-optimizer.ts +876 -0
  131. package/src/utils/cache.ts +634 -0
  132. package/src/utils/codec.ts +275 -0
  133. package/src/utils/logger.ts +201 -0
  134. package/src/utils/memory-profiler.ts +582 -0
  135. package/src/utils/parallel-processor.ts +879 -0
  136. package/src/utils/python.ts +79 -0
  137. package/src/utils/runtime.ts +616 -0
@@ -0,0 +1,519 @@
1
+ /**
2
+ * Runtime detection utilities for Node.js, Deno, Bun, and Browser environments
3
+ */
4
+ /// <reference path="../types/global.d.ts" />
5
+ // Cache for runtime detection to avoid repeated environment checks
6
+ let runtimeCache = null;
7
+ /**
8
+ * Clear runtime cache (for testing purposes only)
9
+ * @internal
10
+ */
11
+ export function clearRuntimeCache() {
12
+ runtimeCache = null;
13
+ }
14
+ /**
15
+ * Detect the current JavaScript runtime environment
16
+ * Results are cached and frozen to prevent external mutation
17
+ */
18
+ export function detectRuntime() {
19
+ if (runtimeCache) {
20
+ return runtimeCache;
21
+ }
22
+ // Deno detection (must come before Node.js check)
23
+ if (typeof Deno !== 'undefined' && Deno !== null) {
24
+ const capabilities = {
25
+ filesystem: true,
26
+ subprocess: true,
27
+ webassembly: true,
28
+ webworkers: true,
29
+ sharedArrayBuffer: typeof SharedArrayBuffer !== 'undefined',
30
+ fetch: true,
31
+ };
32
+ const result = {
33
+ name: 'deno',
34
+ version: Deno.version?.deno,
35
+ capabilities: Object.freeze(capabilities),
36
+ };
37
+ runtimeCache = Object.freeze(result);
38
+ return runtimeCache;
39
+ }
40
+ // Bun detection
41
+ if (typeof Bun !== 'undefined' && Bun !== null) {
42
+ const capabilities = {
43
+ filesystem: true,
44
+ subprocess: true,
45
+ webassembly: true,
46
+ webworkers: true,
47
+ sharedArrayBuffer: typeof SharedArrayBuffer !== 'undefined',
48
+ fetch: true,
49
+ };
50
+ const result = {
51
+ name: 'bun',
52
+ version: Bun.version,
53
+ capabilities: Object.freeze(capabilities),
54
+ };
55
+ runtimeCache = Object.freeze(result);
56
+ return runtimeCache;
57
+ }
58
+ // Node.js detection
59
+ if (typeof process !== 'undefined' && process.versions?.node) {
60
+ const capabilities = {
61
+ filesystem: true,
62
+ subprocess: true,
63
+ webassembly: typeof WebAssembly !== 'undefined',
64
+ webworkers: false, // Node.js worker_threads are different
65
+ sharedArrayBuffer: typeof SharedArrayBuffer !== 'undefined',
66
+ fetch: typeof fetch !== 'undefined', // Available in Node.js 18+
67
+ };
68
+ const result = {
69
+ name: 'node',
70
+ version: process.versions.node,
71
+ capabilities: Object.freeze(capabilities),
72
+ };
73
+ runtimeCache = Object.freeze(result);
74
+ return runtimeCache;
75
+ }
76
+ // Browser detection
77
+ if (typeof window !== 'undefined' || typeof self !== 'undefined') {
78
+ const isSecureContext = typeof window !== 'undefined'
79
+ ? window.isSecureContext
80
+ : typeof self !== 'undefined'
81
+ ? self.isSecureContext
82
+ : false;
83
+ const capabilities = {
84
+ filesystem: false,
85
+ subprocess: false,
86
+ webassembly: typeof WebAssembly !== 'undefined',
87
+ webworkers: typeof Worker !== 'undefined',
88
+ sharedArrayBuffer: isSecureContext && typeof SharedArrayBuffer !== 'undefined',
89
+ fetch: typeof fetch !== 'undefined',
90
+ };
91
+ const result = {
92
+ name: 'browser',
93
+ capabilities: Object.freeze(capabilities),
94
+ };
95
+ runtimeCache = Object.freeze(result);
96
+ return runtimeCache;
97
+ }
98
+ const capabilities = {
99
+ filesystem: false,
100
+ subprocess: false,
101
+ webassembly: false,
102
+ webworkers: false,
103
+ sharedArrayBuffer: false,
104
+ fetch: false,
105
+ };
106
+ const result = {
107
+ name: 'unknown',
108
+ capabilities: Object.freeze(capabilities),
109
+ };
110
+ // Cache and freeze the result to prevent external mutation
111
+ runtimeCache = Object.freeze(result);
112
+ return runtimeCache;
113
+ }
114
+ /**
115
+ * Check if running in Node.js
116
+ */
117
+ export function isNodejs() {
118
+ return detectRuntime().name === 'node';
119
+ }
120
+ /**
121
+ * Check if running in Deno
122
+ */
123
+ export function isDeno() {
124
+ return detectRuntime().name === 'deno';
125
+ }
126
+ /**
127
+ * Check if running in Bun
128
+ */
129
+ export function isBun() {
130
+ return detectRuntime().name === 'bun';
131
+ }
132
+ /**
133
+ * Check if running in browser
134
+ */
135
+ export function isBrowser() {
136
+ return detectRuntime().name === 'browser';
137
+ }
138
+ /**
139
+ * Get runtime capabilities
140
+ */
141
+ export function getRuntimeCapabilities() {
142
+ return detectRuntime().capabilities;
143
+ }
144
+ /**
145
+ * Check if a specific capability is supported
146
+ */
147
+ export function hasCapability(capability) {
148
+ // eslint-disable-next-line security/detect-object-injection
149
+ return getRuntimeCapabilities()[capability];
150
+ }
151
+ /**
152
+ * Get the best runtime strategy for Python execution
153
+ */
154
+ export function getBestPythonRuntime() {
155
+ const runtime = detectRuntime();
156
+ if (runtime.name === 'browser') {
157
+ return 'pyodide';
158
+ }
159
+ if (runtime.capabilities.subprocess) {
160
+ return 'node'; // Works for Node.js, Deno, and Bun
161
+ }
162
+ // Fallback to HTTP bridge
163
+ return 'http';
164
+ }
165
+ // Cache for lazy-loaded path module
166
+ let pathModule = null;
167
+ /**
168
+ * Lazy load Node.js path module on demand
169
+ */
170
+ async function loadPathModule() {
171
+ if (pathModule) {
172
+ return pathModule;
173
+ }
174
+ const runtime = detectRuntime();
175
+ if (runtime.name === 'node') {
176
+ try {
177
+ pathModule = await import('node:path');
178
+ return pathModule;
179
+ }
180
+ catch {
181
+ // Fallback for older Node.js versions
182
+ pathModule = await import('path');
183
+ return pathModule;
184
+ }
185
+ }
186
+ return null;
187
+ }
188
+ /**
189
+ * Normalize path by stripping '.' and resolving '..' components
190
+ */
191
+ function normalizePath(path) {
192
+ const isAbsolute = path.startsWith('/');
193
+ const segments = path.split('/');
194
+ const normalized = [];
195
+ for (const segment of segments) {
196
+ if (segment === '.' || segment === '') {
197
+ continue; // Skip current directory and empty segments
198
+ }
199
+ else if (segment === '..') {
200
+ if (normalized.length > 0 && normalized[normalized.length - 1] !== '..') {
201
+ normalized.pop(); // Go up one directory
202
+ }
203
+ else if (!isAbsolute) {
204
+ normalized.push(segment); // Keep '..' if not absolute and at root
205
+ }
206
+ }
207
+ else {
208
+ normalized.push(segment);
209
+ }
210
+ }
211
+ const result = normalized.join('/');
212
+ return isAbsolute ? `/${result}` : result;
213
+ }
214
+ /**
215
+ * Runtime-specific path utilities
216
+ */
217
+ export const pathUtils = {
218
+ /**
219
+ * Join paths in a cross-runtime way
220
+ */
221
+ join(...segments) {
222
+ const joined = segments
223
+ .filter(Boolean)
224
+ .join('/')
225
+ .replace(/\/+/g, '/') // Replace multiple slashes with single slash
226
+ .replace(/\\/g, '/'); // Normalize backslashes to forward slashes
227
+ return normalizePath(joined);
228
+ },
229
+ /**
230
+ * Join paths asynchronously with enhanced Node.js support
231
+ */
232
+ async joinAsync(...segments) {
233
+ const runtime = detectRuntime();
234
+ // For Node.js, use the real path module when available
235
+ if (runtime.name === 'node') {
236
+ const pathMod = await loadPathModule();
237
+ if (pathMod?.posix) {
238
+ return pathMod.posix.join(...segments);
239
+ }
240
+ }
241
+ // Fallback implementation with normalization
242
+ const joined = segments
243
+ .filter(Boolean)
244
+ .join('/')
245
+ .replace(/\/+/g, '/') // Replace multiple slashes with single slash
246
+ .replace(/\\/g, '/'); // Normalize backslashes to forward slashes
247
+ return normalizePath(joined);
248
+ },
249
+ /**
250
+ * Resolve absolute path in a cross-runtime way (synchronous)
251
+ */
252
+ resolve(path) {
253
+ const runtime = detectRuntime();
254
+ // Simple synchronous resolution for testing
255
+ if (path.startsWith('/')) {
256
+ return path; // Already absolute
257
+ }
258
+ if (runtime.name === 'node' && typeof process !== 'undefined' && process.cwd) {
259
+ return normalizePath(`${process.cwd()}/${path}`);
260
+ }
261
+ if (runtime.name === 'browser' && typeof location !== 'undefined') {
262
+ return new URL(path, location.href).href;
263
+ }
264
+ // Fallback: normalize and return as-is for relative paths
265
+ return normalizePath(path);
266
+ },
267
+ /**
268
+ * Resolve absolute path in a cross-runtime way (asynchronous)
269
+ */
270
+ async resolveAsync(path) {
271
+ const runtime = detectRuntime();
272
+ if (runtime.name === 'node') {
273
+ const pathMod = await loadPathModule();
274
+ if (pathMod) {
275
+ return pathMod.resolve(path);
276
+ }
277
+ }
278
+ if (runtime.name === 'browser') {
279
+ return new URL(path, location.href).href;
280
+ }
281
+ // Fallback: normalize and return as-is
282
+ return normalizePath(path);
283
+ },
284
+ };
285
+ /**
286
+ * Cross-runtime file system operations
287
+ */
288
+ export const fsUtils = {
289
+ /**
290
+ * Check if file system operations are available
291
+ */
292
+ isAvailable() {
293
+ return hasCapability('filesystem');
294
+ },
295
+ /**
296
+ * Read file in a cross-runtime way
297
+ */
298
+ async readFile(path) {
299
+ const runtime = detectRuntime();
300
+ if (!runtime.capabilities.filesystem) {
301
+ throw new Error('File system operations not available in this runtime');
302
+ }
303
+ if (runtime.name === 'deno' && Deno) {
304
+ return await Deno.readTextFile(path);
305
+ }
306
+ if (runtime.name === 'bun' && Bun) {
307
+ const file = Bun.file(path);
308
+ return await file.text();
309
+ }
310
+ if (runtime.name === 'node') {
311
+ // Dynamic import to maintain ESM compatibility
312
+ const { readFile } = await import('fs/promises');
313
+ return await readFile(path, 'utf-8');
314
+ }
315
+ throw new Error(`File system operations not implemented for ${runtime.name}`);
316
+ },
317
+ /**
318
+ * Write file in a cross-runtime way
319
+ */
320
+ async writeFile(path, content) {
321
+ const runtime = detectRuntime();
322
+ if (!runtime.capabilities.filesystem) {
323
+ throw new Error('File system operations not available in this runtime');
324
+ }
325
+ if (runtime.name === 'deno' && Deno) {
326
+ await Deno.writeTextFile(path, content);
327
+ return;
328
+ }
329
+ if (runtime.name === 'bun' && Bun) {
330
+ await Bun.write(path, content);
331
+ return;
332
+ }
333
+ if (runtime.name === 'node') {
334
+ const { writeFile, mkdir } = await import('fs/promises');
335
+ const parts = path.split('/');
336
+ parts.pop();
337
+ const dir = parts.join('/') || '.';
338
+ try {
339
+ await mkdir(dir, { recursive: true });
340
+ }
341
+ catch { }
342
+ await writeFile(path, content, 'utf-8');
343
+ return;
344
+ }
345
+ throw new Error(`File system operations not implemented for ${runtime.name}`);
346
+ },
347
+ };
348
+ /**
349
+ * Cross-runtime subprocess execution
350
+ */
351
+ export const processUtils = {
352
+ /**
353
+ * Check if subprocess operations are available
354
+ */
355
+ isAvailable() {
356
+ return hasCapability('subprocess');
357
+ },
358
+ /**
359
+ * Execute command in a cross-runtime way
360
+ */
361
+ async exec(command, args = []) {
362
+ const runtime = detectRuntime();
363
+ if (!runtime.capabilities.subprocess) {
364
+ throw new Error('Subprocess operations not available in this runtime');
365
+ }
366
+ if (runtime.name === 'deno' && Deno) {
367
+ const cmd = new Deno.Command(command, { args });
368
+ const { code, stdout, stderr } = await cmd.output();
369
+ return {
370
+ code,
371
+ stdout: new TextDecoder().decode(stdout),
372
+ stderr: new TextDecoder().decode(stderr),
373
+ };
374
+ }
375
+ if (runtime.name === 'bun' && Bun) {
376
+ const proc = Bun.spawn([command, ...args], {
377
+ stdout: 'pipe',
378
+ stderr: 'pipe',
379
+ });
380
+ const [stdout, stderr] = await Promise.all([
381
+ new Response(proc.stdout).text(),
382
+ new Response(proc.stderr).text(),
383
+ ]);
384
+ await proc.exited;
385
+ return {
386
+ code: proc.exitCode ?? 0,
387
+ stdout,
388
+ stderr,
389
+ };
390
+ }
391
+ if (runtime.name === 'node') {
392
+ const { spawn } = await import('child_process');
393
+ const { delimiter } = await import('node:path');
394
+ return new Promise((resolve, reject) => {
395
+ const extraPyPath = pathUtils.join(process.cwd(), 'tywrap_ir');
396
+ const existingPyPath = process.env.PYTHONPATH;
397
+ const env = {
398
+ ...process.env,
399
+ PYTHONPATH: existingPyPath ? `${extraPyPath}${delimiter}${existingPyPath}` : extraPyPath,
400
+ };
401
+ const child = spawn(command, args, { env });
402
+ let stdout = '';
403
+ let stderr = '';
404
+ child.stdout?.on('data', data => {
405
+ stdout += data.toString();
406
+ });
407
+ child.stderr?.on('data', data => {
408
+ stderr += data.toString();
409
+ });
410
+ child.on('close', code => {
411
+ resolve({ code: code ?? 0, stdout, stderr });
412
+ });
413
+ child.on('error', reject);
414
+ });
415
+ }
416
+ throw new Error(`Subprocess operations not implemented for ${runtime.name}`);
417
+ },
418
+ };
419
+ /**
420
+ * Platform detection utilities
421
+ */
422
+ /**
423
+ * Check if running on Windows
424
+ */
425
+ export function isWindows() {
426
+ if (typeof process !== 'undefined' && process.platform) {
427
+ return process.platform === 'win32';
428
+ }
429
+ const deno = globalThis.Deno;
430
+ return deno?.build?.os === 'windows';
431
+ }
432
+ /**
433
+ * Check if running on macOS
434
+ */
435
+ export function isMacOS() {
436
+ if (typeof process !== 'undefined' && process.platform) {
437
+ return process.platform === 'darwin';
438
+ }
439
+ const deno = globalThis.Deno;
440
+ return deno?.build?.os === 'darwin';
441
+ }
442
+ /**
443
+ * Check if running on Linux
444
+ */
445
+ export function isLinux() {
446
+ if (typeof process !== 'undefined' && process.platform) {
447
+ return process.platform === 'linux';
448
+ }
449
+ const deno = globalThis.Deno;
450
+ return deno?.build?.os === 'linux';
451
+ }
452
+ /**
453
+ * Check if a path is absolute
454
+ */
455
+ export function isAbsolutePath(path) {
456
+ // Unix absolute paths
457
+ if (path.startsWith('/')) {
458
+ return true;
459
+ }
460
+ // Windows absolute paths (e.g., C:\, D:/)
461
+ return /^[A-Za-z]:[\\/]/.test(path);
462
+ }
463
+ /**
464
+ * Get the path separator for the current platform
465
+ */
466
+ export function getPathSeparator() {
467
+ return isWindows() ? '\\' : '/';
468
+ }
469
+ /**
470
+ * Get the default Python executable name for the current platform
471
+ */
472
+ export function getPythonExecutableName() {
473
+ return isWindows() ? 'python' : 'python3';
474
+ }
475
+ /**
476
+ * Get the virtual environment bin directory name
477
+ */
478
+ export function getVenvBinDir() {
479
+ return isWindows() ? 'Scripts' : 'bin';
480
+ }
481
+ /**
482
+ * Get the Python executable filename in a virtual environment
483
+ */
484
+ export function getVenvPythonExe() {
485
+ return isWindows() ? 'python.exe' : 'python';
486
+ }
487
+ /**
488
+ * Cross-runtime hashing and stable stringify utilities
489
+ */
490
+ export const hashUtils = {
491
+ async sha256Hex(text) {
492
+ const runtime = detectRuntime();
493
+ // Node path
494
+ if (runtime.name === 'node') {
495
+ try {
496
+ const crypto = await import('node:crypto');
497
+ return crypto.createHash('sha256').update(text).digest('hex');
498
+ }
499
+ catch {
500
+ // fallthrough to web crypto
501
+ }
502
+ }
503
+ // Web/Deno/Bun path via SubtleCrypto
504
+ if (typeof globalThis.crypto?.subtle !== 'undefined') {
505
+ const data = new TextEncoder().encode(text);
506
+ const digest = await globalThis.crypto.subtle.digest('SHA-256', data);
507
+ const bytes = Array.from(new Uint8Array(digest));
508
+ return bytes.map(b => b.toString(16).padStart(2, '0')).join('');
509
+ }
510
+ // Fallback to DJB2 (non-crypto) for unknown runtimes
511
+ let hash = 5381;
512
+ for (let i = 0; i < text.length; i++) {
513
+ hash = (hash << 5) + hash + text.charCodeAt(i);
514
+ hash |= 0;
515
+ }
516
+ return Math.abs(hash).toString(16);
517
+ },
518
+ };
519
+ //# sourceMappingURL=runtime.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runtime.js","sourceRoot":"","sources":["../../src/utils/runtime.ts"],"names":[],"mappings":"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"}
package/package.json ADDED
@@ -0,0 +1,136 @@
1
+ {
2
+ "name": "tywrap",
3
+ "version": "0.1.0",
4
+ "description": "TypeScript wrapper for Python libraries with full type safety (EXPERIMENTAL - v0.1.0)",
5
+ "type": "module",
6
+ "main": "dist/index.js",
7
+ "types": "dist/index.d.ts",
8
+ "exports": {
9
+ ".": {
10
+ "import": "./dist/index.js",
11
+ "types": "./dist/index.d.ts"
12
+ },
13
+ "./node": {
14
+ "import": "./dist/runtime/node.js",
15
+ "types": "./dist/runtime/node.d.ts"
16
+ },
17
+ "./pyodide": {
18
+ "import": "./dist/runtime/pyodide.js",
19
+ "types": "./dist/runtime/pyodide.d.ts"
20
+ },
21
+ "./http": {
22
+ "import": "./dist/runtime/http.js",
23
+ "types": "./dist/runtime/http.d.ts"
24
+ },
25
+ "./runtime": {
26
+ "import": "./dist/runtime/index.js",
27
+ "types": "./dist/runtime/index.d.ts"
28
+ }
29
+ },
30
+ "files": [
31
+ "dist",
32
+ "runtime",
33
+ "src",
34
+ "README.md"
35
+ ],
36
+ "scripts": {
37
+ "build": "tsc && npm run build:tools",
38
+ "build:tools": "tsc -p tsconfig.tools.json",
39
+ "dev": "tsc --watch",
40
+ "typecheck": "tsc --noEmit",
41
+ "test": "vitest --run",
42
+ "test:watch": "vitest",
43
+ "test:bun": "LC_ALL=C LANG=C bun run vitest --run test/runtime_bun.test.ts",
44
+ "test:coverage": "vitest --run --coverage",
45
+ "test:types": "tsd",
46
+ "test:python:suite:core": "npm run build:tools && node dist/tools/python_suite.js core",
47
+ "test:python:suite:data": "npm run build:tools && node dist/tools/python_suite.js data",
48
+ "test:python:suite:ml": "npm run build:tools && node dist/tools/python_suite.js ml",
49
+ "test:python:suite:all": "npm run build:tools && node dist/tools/python_suite.js all",
50
+ "lint": "eslint src test --ext .ts,.tsx",
51
+ "lint:fix": "eslint src test --ext .ts,.tsx --fix",
52
+ "format": "prettier --write src test",
53
+ "format:check": "prettier --check src test",
54
+ "prepare": "npm run build",
55
+ "check:node": "node --check dist/index.js",
56
+ "check:deno": "deno check src/index.ts",
57
+ "check:bun": "bun run --dry-run src/index.ts",
58
+ "check:all": "npm run format:check && npm run lint && npm run build && npm run test:types && npm run test",
59
+ "cli:build": "tsc && node dist/cli.js generate --config examples/tywrap.config.json",
60
+ "fix:all": "npm run format && npm run lint:fix",
61
+ "matrix": "node -e \"import('./tools/matrix.js').then(m=>m.run()).catch(e=>{console.error(e);process.exit(1)})\"",
62
+ "release": "node scripts/release.mjs",
63
+ "act": "node scripts/act.mjs",
64
+ "act:clean": "node scripts/act.mjs --clean",
65
+ "act:serial": "node scripts/act-matrix.mjs",
66
+ "docker:npm": "node scripts/node-docker.mjs npm"
67
+ },
68
+ "keywords": [
69
+ "typescript",
70
+ "python",
71
+ "bridge",
72
+ "type-safety",
73
+ "interop",
74
+ "pyodide",
75
+ "ast",
76
+ "code-generation",
77
+ "node",
78
+ "deno",
79
+ "bun"
80
+ ],
81
+ "author": "tywrap contributors",
82
+ "license": "MIT",
83
+ "repository": {
84
+ "type": "git",
85
+ "url": "https://github.com/bbopen/tywrap.git"
86
+ },
87
+ "bugs": {
88
+ "url": "https://github.com/bbopen/tywrap/issues"
89
+ },
90
+ "homepage": "https://github.com/bbopen/tywrap#readme",
91
+ "publishConfig": {
92
+ "access": "public",
93
+ "registry": "https://registry.npmjs.org/"
94
+ },
95
+ "dependencies": {
96
+ "@babel/parser": "^7.25.6",
97
+ "@babel/types": "^7.25.6",
98
+ "tree-sitter": "^0.21.0",
99
+ "tree-sitter-python": "^0.21.0",
100
+ "typescript": "^5.6.2",
101
+ "web-tree-sitter": "^0.21.0",
102
+ "yargs": "^17.7.2"
103
+ },
104
+ "devDependencies": {
105
+ "@types/bun": "^1.2.19",
106
+ "@types/node": "^22.5.4",
107
+ "@types/yargs": "^17.0.33",
108
+ "@typescript-eslint/eslint-plugin": "^8.5.0",
109
+ "@typescript-eslint/parser": "^8.5.0",
110
+ "@vitest/coverage-v8": "^4.0.16",
111
+ "@vitest/eslint-plugin": "^1.6.4",
112
+ "eslint": "^9.10.0",
113
+ "eslint-import-resolver-typescript": "^3.6.1",
114
+ "eslint-plugin-import": "^2.29.1",
115
+ "eslint-plugin-security": "^3.0.1",
116
+ "fast-check": "^4.3.0",
117
+ "prettier": "^3.3.3",
118
+ "tsd": "^0.33.0",
119
+ "vite": "^7.3.0",
120
+ "vitest": "^4.0.16"
121
+ },
122
+ "peerDependencies": {
123
+ "pyodide": ">=0.28.0"
124
+ },
125
+ "engines": {
126
+ "node": ">=20.0.0",
127
+ "deno": ">=1.46.0",
128
+ "bun": ">=1.1.0"
129
+ },
130
+ "trustedDependencies": [
131
+ "pyodide"
132
+ ],
133
+ "bin": {
134
+ "tywrap": "dist/cli.js"
135
+ }
136
+ }