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,234 @@
1
+ /**
2
+ * Configuration system
3
+ *
4
+ * Loads configuration from defaults, optional config file and CLI overrides
5
+ * with basic validation of known options.
6
+ */
7
+ import { existsSync } from 'node:fs';
8
+ import { readFile } from 'node:fs/promises';
9
+ import { createRequire } from 'node:module';
10
+ import { dirname, extname, resolve } from 'node:path';
11
+ import { pathToFileURL } from 'node:url';
12
+ import { getDefaultPythonPath } from '../utils/python.js';
13
+ /**
14
+ * Default configuration values used when options are not supplied.
15
+ */
16
+ const DEFAULT_CONFIG = {
17
+ pythonModules: {},
18
+ output: { dir: './generated', format: 'esm', declaration: false, sourceMap: false },
19
+ runtime: { node: { pythonPath: getDefaultPythonPath(), timeout: 30000 } },
20
+ performance: { caching: false, batching: false, compression: 'none' },
21
+ development: { hotReload: false, sourceMap: false, validation: 'none' },
22
+ types: { presets: [] },
23
+ debug: false,
24
+ };
25
+ /**
26
+ * Recursively merge two configuration objects. Arrays are overwritten by
27
+ * overrides instead of concatenated.
28
+ */
29
+ function isPlainObject(value) {
30
+ return value !== null && typeof value === 'object' && !Array.isArray(value);
31
+ }
32
+ function ensureConfigObject(value, configFile) {
33
+ if (!isPlainObject(value)) {
34
+ throw new Error(`Configuration file must export an object: ${configFile}`);
35
+ }
36
+ return value;
37
+ }
38
+ function merge(base, override) {
39
+ const result = new Map(Object.entries(base));
40
+ for (const [key, val] of Object.entries(override)) {
41
+ if (val === undefined) {
42
+ continue;
43
+ }
44
+ const current = result.get(key);
45
+ if (isPlainObject(val) && isPlainObject(current)) {
46
+ result.set(key, merge(current, val));
47
+ }
48
+ else {
49
+ result.set(key, val);
50
+ }
51
+ }
52
+ return Object.fromEntries(result);
53
+ }
54
+ function safeExists(path) {
55
+ // eslint-disable-next-line security/detect-non-literal-fs-filename -- config path is user-controlled and resolved
56
+ return existsSync(path);
57
+ }
58
+ /**
59
+ * Validate configuration values and throw user-friendly errors when invalid.
60
+ */
61
+ function validateConfig(config) {
62
+ const allowedTopLevel = new Set([
63
+ 'pythonModules',
64
+ 'output',
65
+ 'runtime',
66
+ 'performance',
67
+ 'development',
68
+ 'types',
69
+ 'debug',
70
+ ]);
71
+ for (const key of Object.keys(config)) {
72
+ if (!allowedTopLevel.has(key)) {
73
+ throw new Error(`Unknown configuration option \"${key}\"`);
74
+ }
75
+ }
76
+ const out = config.output;
77
+ if (typeof out.dir !== 'string') {
78
+ throw new Error('output.dir must be a string');
79
+ }
80
+ if (!['esm', 'cjs', 'both'].includes(out.format)) {
81
+ throw new Error('output.format must be one of "esm", "cjs" or "both"');
82
+ }
83
+ if (typeof out.declaration !== 'boolean' || typeof out.sourceMap !== 'boolean') {
84
+ throw new Error('output.declaration and output.sourceMap must be boolean');
85
+ }
86
+ const runtime = config.runtime;
87
+ if (runtime.node) {
88
+ if (runtime.node.pythonPath !== undefined && typeof runtime.node.pythonPath !== 'string') {
89
+ throw new Error('runtime.node.pythonPath must be a string');
90
+ }
91
+ if (runtime.node.timeout !== undefined) {
92
+ if (typeof runtime.node.timeout !== 'number' || runtime.node.timeout < 0) {
93
+ throw new Error('runtime.node.timeout must be a non-negative number');
94
+ }
95
+ }
96
+ }
97
+ const perf = config.performance;
98
+ if (typeof perf.caching !== 'boolean') {
99
+ throw new Error('performance.caching must be a boolean');
100
+ }
101
+ if (typeof perf.batching !== 'boolean') {
102
+ throw new Error('performance.batching must be a boolean');
103
+ }
104
+ const validCompression = ['auto', 'gzip', 'brotli', 'none'];
105
+ if (!validCompression.includes(perf.compression)) {
106
+ throw new Error(`performance.compression must be one of ${validCompression.join(', ')}`);
107
+ }
108
+ const dev = config.development;
109
+ if (typeof dev.hotReload !== 'boolean') {
110
+ throw new Error('development.hotReload must be a boolean');
111
+ }
112
+ if (typeof dev.sourceMap !== 'boolean') {
113
+ throw new Error('development.sourceMap must be a boolean');
114
+ }
115
+ const validValidation = ['runtime', 'compile', 'both', 'none'];
116
+ if (!validValidation.includes(dev.validation)) {
117
+ throw new Error(`development.validation must be one of ${validValidation.join(', ')}`);
118
+ }
119
+ if (config.types) {
120
+ const presets = config.types.presets;
121
+ const validPresets = new Set(['numpy', 'pandas', 'pydantic', 'stdlib', 'scipy', 'torch', 'sklearn']);
122
+ if (presets !== undefined) {
123
+ if (!Array.isArray(presets) || presets.some(p => typeof p !== 'string')) {
124
+ throw new Error('types.presets must be an array of strings');
125
+ }
126
+ for (const preset of presets) {
127
+ if (!validPresets.has(preset)) {
128
+ throw new Error(`types.presets contains invalid value "${preset}". Allowed: ${Array.from(validPresets).join(', ')}`);
129
+ }
130
+ }
131
+ }
132
+ }
133
+ if (typeof config.debug !== 'boolean') {
134
+ throw new Error('debug must be a boolean');
135
+ }
136
+ }
137
+ /**
138
+ * Create a configuration object by merging defaults with overrides.
139
+ *
140
+ * @param overrides CLI or programmatic overrides
141
+ */
142
+ export function createConfig(overrides = {}) {
143
+ const merged = merge(DEFAULT_CONFIG, overrides);
144
+ validateConfig(merged);
145
+ return merged;
146
+ }
147
+ /**
148
+ * Resolve configuration by loading a config file (JSON/JS/TS) and merging
149
+ * defaults with any overrides.
150
+ */
151
+ export async function resolveConfig(options = {}) {
152
+ const cwd = options.cwd ?? process.cwd();
153
+ const overrides = options.overrides ?? {};
154
+ const configFile = options.configFile ? resolve(cwd, options.configFile) : undefined;
155
+ let fileConfig = {};
156
+ if (configFile) {
157
+ if (!safeExists(configFile)) {
158
+ if (options.requireConfig) {
159
+ throw new Error(`Configuration file not found: ${configFile}`);
160
+ }
161
+ }
162
+ else {
163
+ fileConfig = await loadConfigFile(configFile);
164
+ }
165
+ }
166
+ const merged = merge(merge(DEFAULT_CONFIG, fileConfig), overrides);
167
+ validateConfig(merged);
168
+ return merged;
169
+ }
170
+ /**
171
+ * Load a tywrap config file. Supports JSON, JS/CJS/ESM, and TS files.
172
+ */
173
+ export async function loadConfigFile(configFile) {
174
+ const ext = extname(configFile).toLowerCase();
175
+ const resolved = resolve(configFile);
176
+ if (!safeExists(resolved)) {
177
+ throw new Error(`Configuration file not found: ${resolved}`);
178
+ }
179
+ if (ext === '.json') {
180
+ const txt = await safeReadFileAsync(resolved);
181
+ try {
182
+ const parsed = JSON.parse(txt);
183
+ return ensureConfigObject(parsed, resolved);
184
+ }
185
+ catch (err) {
186
+ throw new Error(`Failed to parse JSON config ${resolved}: ${err.message}`);
187
+ }
188
+ }
189
+ if (ext === '.cjs') {
190
+ const require = createRequire(import.meta.url);
191
+ // eslint-disable-next-line security/detect-non-literal-require -- config path is user-controlled and resolved
192
+ const mod = require(resolved);
193
+ const loaded = mod.default ?? mod;
194
+ return ensureConfigObject(loaded ?? {}, resolved);
195
+ }
196
+ if (ext === '.js' || ext === '.mjs') {
197
+ const mod = (await import(pathToFileURL(resolved).href));
198
+ const loaded = mod.default ?? mod;
199
+ return ensureConfigObject(loaded ?? {}, resolved);
200
+ }
201
+ if (ext === '.ts' || ext === '.mts' || ext === '.cts') {
202
+ const ts = await import('typescript');
203
+ const source = await safeReadFileAsync(resolved);
204
+ const output = ts.transpileModule(source, {
205
+ compilerOptions: {
206
+ module: ts.ModuleKind.CommonJS,
207
+ target: ts.ScriptTarget.ES2020,
208
+ esModuleInterop: true,
209
+ },
210
+ fileName: resolved,
211
+ });
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);
221
+ }
222
+ throw new Error(`Unsupported configuration file extension: ${ext}`);
223
+ }
224
+ async function safeReadFileAsync(path) {
225
+ // eslint-disable-next-line security/detect-non-literal-fs-filename -- config path is user-controlled and resolved
226
+ return readFile(path, 'utf-8');
227
+ }
228
+ /**
229
+ * Type helper for authoring tywrap configs with full type inference.
230
+ */
231
+ export function defineConfig(config) {
232
+ return config;
233
+ }
234
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/config/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,63 @@
1
+ /**
2
+ * PyAnalyzer - Python AST analysis and type extraction
3
+ */
4
+ import type { SyntaxNode } from 'tree-sitter';
5
+ import type { AnalysisResult, PythonFunction, PythonClass, PythonType } from '../types/index.js';
6
+ export declare class PyAnalyzer {
7
+ private parser;
8
+ private initialized;
9
+ constructor();
10
+ /**
11
+ * Initialize the tree-sitter parser with Python grammar
12
+ */
13
+ initialize(): Promise<void>;
14
+ /**
15
+ * Analyze Python module source code and extract structure with caching
16
+ */
17
+ analyzePythonModule(source: string, modulePath?: string): Promise<AnalysisResult>;
18
+ /**
19
+ * Extract function definitions from AST
20
+ */
21
+ extractFunctions(node: SyntaxNode): Promise<PythonFunction[]>;
22
+ /**
23
+ * Extract class definitions from AST
24
+ */
25
+ extractClasses(node: SyntaxNode): Promise<PythonClass[]>;
26
+ /**
27
+ * Extract single function from function_definition node
28
+ */
29
+ private extractFunction;
30
+ /**
31
+ * Extract single class from class_definition node
32
+ */
33
+ private extractClass;
34
+ /**
35
+ * Extract function parameters from parameters node
36
+ */
37
+ private extractParameters;
38
+ /**
39
+ * Parse type annotation node into PythonType
40
+ */
41
+ parseTypeAnnotation(node: SyntaxNode): PythonType;
42
+ private parseGenericType;
43
+ private parseUnionType;
44
+ private parseGenericArguments;
45
+ /**
46
+ * Extract import statements
47
+ */
48
+ private extractImports;
49
+ /**
50
+ * Utility methods
51
+ */
52
+ private findNodesByType;
53
+ private extractModuleName;
54
+ private extractDecorators;
55
+ private extractDocstring;
56
+ private containsYield;
57
+ private extractBases;
58
+ private extractProperty;
59
+ private extractExports;
60
+ private collectSyntaxErrors;
61
+ private generateStatistics;
62
+ }
63
+ //# sourceMappingURL=analyzer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"analyzer.d.ts","sourceRoot":"","sources":["../../src/core/analyzer.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAI9C,OAAO,KAAK,EACV,cAAc,EAKd,cAAc,EACd,WAAW,EAEX,UAAU,EAIX,MAAM,mBAAmB,CAAC;AAQ3B,qBAAa,UAAU;IACrB,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,WAAW,CAAS;;IAM5B;;OAEG;IACG,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAajC;;OAEG;IACG,mBAAmB,CAAC,MAAM,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC;IAiFvF;;OAEG;IACG,gBAAgB,CAAC,IAAI,EAAE,UAAU,GAAG,OAAO,CAAC,cAAc,EAAE,CAAC;IAiBnE;;OAEG;IACG,cAAc,CAAC,IAAI,EAAE,UAAU,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC;IAiB9D;;OAEG;YACW,eAAe;IAyC7B;;OAEG;YACW,YAAY;IA8C1B;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAkHzB;;OAEG;IACH,mBAAmB,CAAC,IAAI,EAAE,UAAU,GAAG,UAAU;IA0FjD,OAAO,CAAC,gBAAgB;IAqBxB,OAAO,CAAC,cAAc;IAatB,OAAO,CAAC,qBAAqB;IAiC7B;;OAEG;IACH,OAAO,CAAC,cAAc;IAwFtB;;OAEG;IACH,OAAO,CAAC,eAAe;IAiBvB,OAAO,CAAC,iBAAiB;IAQzB,OAAO,CAAC,iBAAiB;IAYzB,OAAO,CAAC,gBAAgB;IAuBxB,OAAO,CAAC,aAAa;IAKrB,OAAO,CAAC,YAAY;IAUpB,OAAO,CAAC,eAAe;IAavB,OAAO,CAAC,cAAc;IAiBtB,OAAO,CAAC,mBAAmB;IAe3B,OAAO,CAAC,kBAAkB;CA0B3B"}