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,636 @@
1
+ /**
2
+ * Parallel Processing System for tywrap
3
+ * High-performance parallel processing for large Python codebases
4
+ */
5
+ import { EventEmitter } from 'events';
6
+ import { cpus } from 'os';
7
+ import { performance } from 'perf_hooks';
8
+ import { Worker, isMainThread, parentPort, workerData } from 'worker_threads';
9
+ import { fileURLToPath } from 'node:url';
10
+ import { CodeGenerator } from '../core/generator.js';
11
+ import { PyAnalyzer } from '../core/analyzer.js';
12
+ import { globalCache } from './cache.js';
13
+ import { getComponentLogger } from './logger.js';
14
+ const log = getComponentLogger('ParallelProcessor');
15
+ export class ParallelProcessor extends EventEmitter {
16
+ workers = new Map();
17
+ workerStats = new Map();
18
+ taskQueue = [];
19
+ activeTasks = new Map();
20
+ pendingResults = new Map();
21
+ roundRobinIndex = 0;
22
+ options;
23
+ disposed = false;
24
+ debug = false;
25
+ constructor(options = {}) {
26
+ super();
27
+ const defaultWorkerScript = fileURLToPath(import.meta.url);
28
+ this.options = {
29
+ maxWorkers: options.maxWorkers ?? Math.min(cpus().length, 8),
30
+ taskTimeout: options.taskTimeout ?? 30000,
31
+ retryAttempts: options.retryAttempts ?? 2,
32
+ enableMemoryMonitoring: options.enableMemoryMonitoring ?? true,
33
+ enableCaching: options.enableCaching ?? true,
34
+ workerScript: options.workerScript ?? defaultWorkerScript,
35
+ batchSize: options.batchSize ?? 1,
36
+ loadBalancing: options.loadBalancing ?? 'least-loaded',
37
+ debug: options.debug ?? false,
38
+ };
39
+ this.debug = this.options.debug;
40
+ if (this.debug) {
41
+ this.debugLog(`🚀 Parallel processor initialized with ${this.options.maxWorkers} workers`);
42
+ }
43
+ }
44
+ debugLog(message) {
45
+ if (!this.debug) {
46
+ return;
47
+ }
48
+ process.stdout.write(`${message}\n`);
49
+ }
50
+ /**
51
+ * Initialize worker pool
52
+ */
53
+ async init() {
54
+ if (this.disposed) {
55
+ throw new Error('Processor has been disposed');
56
+ }
57
+ // Spawn initial worker pool
58
+ for (let i = 0; i < this.options.maxWorkers; i++) {
59
+ await this.spawnWorker(`worker_${i}`);
60
+ }
61
+ // Start task processing
62
+ this.processQueue();
63
+ this.debugLog(`✅ Worker pool initialized with ${this.workers.size} workers`);
64
+ }
65
+ /**
66
+ * Process Python module analysis in parallel
67
+ */
68
+ async analyzeModulesParallel(sources, options = {}) {
69
+ const chunkSize = options.chunkSize ?? Math.ceil(sources.length / this.options.maxWorkers);
70
+ const chunks = this.chunkArray(sources, chunkSize);
71
+ this.debugLog(`📊 Analyzing ${sources.length} modules in ${chunks.length} chunks`);
72
+ const tasks = chunks.map((chunk, index) => ({
73
+ id: `analyze_chunk_${index}`,
74
+ type: 'analyze',
75
+ data: { sources: chunk },
76
+ priority: 1,
77
+ }));
78
+ const results = await this.executeTasks(tasks);
79
+ // Flatten chunked results
80
+ const flatResults = [];
81
+ for (const result of results) {
82
+ if (!result.success || !result.result) {
83
+ continue;
84
+ }
85
+ if (result.success && result.result) {
86
+ const chunkResults = result.result;
87
+ if (Array.isArray(chunkResults)) {
88
+ flatResults.push(...chunkResults);
89
+ }
90
+ }
91
+ }
92
+ return flatResults;
93
+ }
94
+ /**
95
+ * Generate TypeScript wrappers in parallel
96
+ */
97
+ async generateWrappersParallel(modules, options = {}) {
98
+ const chunkSize = options.chunkSize ?? Math.ceil(modules.length / this.options.maxWorkers);
99
+ const chunks = this.chunkArray(modules, chunkSize);
100
+ this.debugLog(`🏗️ Generating ${modules.length} wrappers in ${chunks.length} chunks`);
101
+ const tasks = chunks.map((chunk, index) => ({
102
+ id: `generate_chunk_${index}`,
103
+ type: 'generate',
104
+ data: { modules: chunk },
105
+ priority: 1,
106
+ }));
107
+ const results = await this.executeTasks(tasks);
108
+ // Flatten chunked results
109
+ const flatResults = [];
110
+ for (const result of results) {
111
+ if (result.success && result.result) {
112
+ const chunkResults = result.result;
113
+ if (Array.isArray(chunkResults)) {
114
+ flatResults.push(...chunkResults);
115
+ }
116
+ }
117
+ }
118
+ return flatResults;
119
+ }
120
+ /**
121
+ * Execute tasks in parallel with load balancing
122
+ */
123
+ async executeTasks(tasks) {
124
+ if (this.workers.size === 0) {
125
+ await this.init();
126
+ }
127
+ // Sort tasks by priority
128
+ const sortedTasks = [...tasks].sort((a, b) => (b.priority ?? 0) - (a.priority ?? 0));
129
+ // Execute tasks with batching
130
+ const results = [];
131
+ const inFlight = new Set();
132
+ const maxInFlight = this.workers.size * 2;
133
+ for (const task of sortedTasks) {
134
+ const promise = this.executeTask(task);
135
+ inFlight.add(promise);
136
+ promise
137
+ .finally(() => {
138
+ inFlight.delete(promise);
139
+ })
140
+ .catch(() => {
141
+ // no-op: individual task failures are encoded in results
142
+ });
143
+ // Limit concurrent tasks to prevent overwhelming workers
144
+ if (inFlight.size >= maxInFlight) {
145
+ const completed = await Promise.race(inFlight);
146
+ results.push(completed);
147
+ }
148
+ }
149
+ // Wait for remaining tasks
150
+ const remaining = await Promise.all(inFlight);
151
+ results.push(...remaining);
152
+ return results;
153
+ }
154
+ /**
155
+ * Execute single task
156
+ */
157
+ async executeTask(task) {
158
+ // Check cache first if enabled
159
+ if (this.options.enableCaching) {
160
+ const cacheKey = globalCache.generateKey('parallel_task', task.type, task.data);
161
+ const cached = await globalCache.get(cacheKey);
162
+ if (cached) {
163
+ this.debugLog(`🎯 Cache HIT for task ${task.id}`);
164
+ return cached;
165
+ }
166
+ }
167
+ let attempts = 0;
168
+ let lastError;
169
+ while (attempts < this.options.retryAttempts) {
170
+ attempts++;
171
+ try {
172
+ const worker = this.selectOptimalWorker();
173
+ if (!worker) {
174
+ throw new Error('No available workers');
175
+ }
176
+ const result = await this.sendTaskToWorker(worker, task);
177
+ // Cache successful results
178
+ if (this.options.enableCaching && result.success) {
179
+ const cacheKey = globalCache.generateKey('parallel_task', task.type, task.data);
180
+ await globalCache.set(cacheKey, result, { computeTime: result.duration });
181
+ }
182
+ return result;
183
+ }
184
+ catch (error) {
185
+ lastError = error;
186
+ log.warn('Task failed', { taskId: task.id, attempt: attempts, error: String(error) });
187
+ if (attempts < this.options.retryAttempts) {
188
+ // Exponential backoff
189
+ await this.sleep(Math.pow(2, attempts) * 1000);
190
+ }
191
+ }
192
+ }
193
+ // Return failure result
194
+ return {
195
+ taskId: task.id,
196
+ success: false,
197
+ error: lastError?.message ?? 'Task failed after retries',
198
+ duration: 0,
199
+ };
200
+ }
201
+ /**
202
+ * Select optimal worker using load balancing strategy
203
+ */
204
+ selectOptimalWorker() {
205
+ const availableWorkers = Array.from(this.workers.values()).filter(worker => worker.threadId > 0);
206
+ if (availableWorkers.length === 0) {
207
+ return null;
208
+ }
209
+ switch (this.options.loadBalancing) {
210
+ case 'round-robin': {
211
+ const selected = availableWorkers[this.roundRobinIndex % availableWorkers.length];
212
+ this.roundRobinIndex = (this.roundRobinIndex + 1) % availableWorkers.length;
213
+ return selected ?? null;
214
+ }
215
+ case 'least-loaded': {
216
+ // Find worker with least active tasks
217
+ const workerLoads = availableWorkers.map(w => {
218
+ const workerId = this.getWorkerId(w);
219
+ const stats = this.workerStats.get(workerId);
220
+ return { worker: w, load: stats?.tasksCompleted ?? 0 };
221
+ });
222
+ workerLoads.sort((a, b) => a.load - b.load);
223
+ return workerLoads[0]?.worker ?? null;
224
+ }
225
+ case 'weighted': {
226
+ // Weight by average task completion time
227
+ const workerWeights = availableWorkers.map(w => {
228
+ const workerId = this.getWorkerId(w);
229
+ const stats = this.workerStats.get(workerId);
230
+ const avgTime = stats?.averageTime ?? 1000;
231
+ return { worker: w, weight: 1 / avgTime };
232
+ });
233
+ // Weighted random selection
234
+ const totalWeight = workerWeights.reduce((sum, w) => sum + w.weight, 0);
235
+ let random = Math.random() * totalWeight;
236
+ for (const { worker: candidate, weight } of workerWeights) {
237
+ random -= weight;
238
+ if (random <= 0) {
239
+ return candidate;
240
+ }
241
+ }
242
+ return workerWeights[0]?.worker ?? null;
243
+ }
244
+ default:
245
+ return availableWorkers[0] ?? null;
246
+ }
247
+ }
248
+ /**
249
+ * Send task to specific worker
250
+ */
251
+ async sendTaskToWorker(worker, task) {
252
+ return new Promise((resolve, reject) => {
253
+ const timeoutMs = task.timeout ?? this.options.taskTimeout;
254
+ const timeout = setTimeout(() => {
255
+ this.pendingResults.delete(task.id);
256
+ reject(new Error(`Task ${task.id} timed out after ${timeoutMs}ms`));
257
+ }, timeoutMs);
258
+ this.pendingResults.set(task.id, {
259
+ resolve: resolve,
260
+ reject,
261
+ timeout,
262
+ });
263
+ this.activeTasks.set(task.id, task);
264
+ worker.postMessage({
265
+ type: 'task',
266
+ task,
267
+ });
268
+ });
269
+ }
270
+ /**
271
+ * Spawn new worker
272
+ */
273
+ async spawnWorker(workerId) {
274
+ const worker = new Worker(this.options.workerScript, {
275
+ workerData: {
276
+ workerId,
277
+ options: {
278
+ enableMemoryMonitoring: this.options.enableMemoryMonitoring,
279
+ enableCaching: this.options.enableCaching,
280
+ },
281
+ },
282
+ });
283
+ // Setup worker message handling
284
+ worker.on('message', message => {
285
+ this.handleWorkerMessage(workerId, message);
286
+ });
287
+ // Setup worker error handling
288
+ worker.on('error', error => {
289
+ log.error('Worker error', { workerId, error: String(error) });
290
+ this.handleWorkerError(workerId, error);
291
+ });
292
+ // Setup worker exit handling
293
+ worker.on('exit', code => {
294
+ log.warn('Worker exited', { workerId, code });
295
+ this.handleWorkerExit(workerId, code);
296
+ });
297
+ this.workers.set(workerId, worker);
298
+ this.workerStats.set(workerId, {
299
+ workerId,
300
+ tasksCompleted: 0,
301
+ totalTime: 0,
302
+ averageTime: 0,
303
+ errorCount: 0,
304
+ memoryPeak: 0,
305
+ isActive: true,
306
+ });
307
+ this.debugLog(`👷 Spawned worker ${workerId}`);
308
+ return worker;
309
+ }
310
+ /**
311
+ * Handle message from worker
312
+ */
313
+ handleWorkerMessage(workerId, message) {
314
+ if (message.type === 'task_complete') {
315
+ const { taskId, result, error, duration, memoryUsage } = message;
316
+ const pending = this.pendingResults.get(taskId);
317
+ if (pending) {
318
+ this.pendingResults.delete(taskId);
319
+ this.activeTasks.delete(taskId);
320
+ if (pending.timeout) {
321
+ clearTimeout(pending.timeout);
322
+ }
323
+ // Update worker stats
324
+ const stats = this.workerStats.get(workerId);
325
+ if (stats) {
326
+ stats.tasksCompleted++;
327
+ stats.totalTime += duration;
328
+ stats.averageTime = stats.totalTime / stats.tasksCompleted;
329
+ if (error) {
330
+ stats.errorCount++;
331
+ }
332
+ if (memoryUsage && memoryUsage > stats.memoryPeak) {
333
+ stats.memoryPeak = memoryUsage;
334
+ }
335
+ }
336
+ const parallelResult = {
337
+ taskId,
338
+ success: !error,
339
+ result,
340
+ error,
341
+ duration,
342
+ memoryUsage,
343
+ };
344
+ pending.resolve(parallelResult);
345
+ }
346
+ }
347
+ else if (message.type === 'worker_ready') {
348
+ this.emit('worker_ready', workerId);
349
+ }
350
+ }
351
+ /**
352
+ * Handle worker error
353
+ */
354
+ handleWorkerError(workerId, error) {
355
+ const stats = this.workerStats.get(workerId);
356
+ if (stats) {
357
+ stats.errorCount++;
358
+ stats.isActive = false;
359
+ }
360
+ // Reject pending tasks for this worker
361
+ for (const [taskId, pending] of this.pendingResults) {
362
+ const task = this.activeTasks.get(taskId);
363
+ if (task) {
364
+ pending.reject(new Error(`Worker ${workerId} error: ${error.message}`));
365
+ this.pendingResults.delete(taskId);
366
+ this.activeTasks.delete(taskId);
367
+ }
368
+ }
369
+ this.emit('worker_error', workerId, error);
370
+ }
371
+ /**
372
+ * Handle worker exit
373
+ */
374
+ handleWorkerExit(workerId, code) {
375
+ this.workers.delete(workerId);
376
+ const stats = this.workerStats.get(workerId);
377
+ if (stats) {
378
+ stats.isActive = false;
379
+ }
380
+ // Respawn worker if not disposing
381
+ if (!this.disposed && this.workers.size < this.options.maxWorkers) {
382
+ this.spawnWorker(`${workerId}_respawn_${Date.now()}`).catch(error => {
383
+ log.error('Failed to respawn worker', { workerId, error: String(error) });
384
+ });
385
+ }
386
+ this.emit('worker_exit', workerId, code);
387
+ }
388
+ /**
389
+ * Process task queue
390
+ */
391
+ processQueue() {
392
+ // Simple queue processing - could be enhanced with priority scheduling
393
+ setInterval(() => {
394
+ if (this.taskQueue.length > 0 && this.workers.size > 0) {
395
+ const task = this.taskQueue.shift();
396
+ if (task) {
397
+ this.executeTask(task).catch(error => {
398
+ log.error('Queue task execution failed', { error: String(error) });
399
+ });
400
+ }
401
+ }
402
+ }, 100);
403
+ }
404
+ /**
405
+ * Get worker statistics
406
+ */
407
+ getWorkerStats() {
408
+ return Array.from(this.workerStats.values());
409
+ }
410
+ /**
411
+ * Get overall processing statistics
412
+ */
413
+ getStats() {
414
+ const workers = Array.from(this.workerStats.values());
415
+ const totalTasks = workers.reduce((sum, w) => sum + w.tasksCompleted, 0);
416
+ const totalErrors = workers.reduce((sum, w) => sum + w.errorCount, 0);
417
+ const totalTime = workers.reduce((sum, w) => sum + w.totalTime, 0);
418
+ const avgTime = totalTasks > 0 ? totalTime / totalTasks : 0;
419
+ return {
420
+ activeWorkers: workers.filter(w => w.isActive).length,
421
+ totalWorkers: workers.length,
422
+ tasksCompleted: totalTasks,
423
+ totalErrors,
424
+ averageTaskTime: avgTime,
425
+ queueLength: this.taskQueue.length,
426
+ activeTasks: this.activeTasks.size,
427
+ workerStats: workers,
428
+ };
429
+ }
430
+ /**
431
+ * Utility methods
432
+ */
433
+ chunkArray(array, chunkSize) {
434
+ const chunks = [];
435
+ for (let i = 0; i < array.length; i += chunkSize) {
436
+ chunks.push(array.slice(i, i + chunkSize));
437
+ }
438
+ return chunks;
439
+ }
440
+ getWorkerId(worker) {
441
+ for (const [id, w] of this.workers) {
442
+ if (w === worker) {
443
+ return id;
444
+ }
445
+ }
446
+ return 'unknown';
447
+ }
448
+ sleep(ms) {
449
+ return new Promise(resolve => setTimeout(resolve, ms));
450
+ }
451
+ /**
452
+ * Gracefully dispose all workers
453
+ */
454
+ async dispose() {
455
+ if (this.disposed) {
456
+ return;
457
+ }
458
+ this.disposed = true;
459
+ this.debugLog('🛑 Disposing parallel processor...');
460
+ // Terminate all workers
461
+ const terminationPromises = Array.from(this.workers.values()).map(worker => {
462
+ return new Promise(resolve => {
463
+ const timeout = setTimeout(() => {
464
+ worker.terminate();
465
+ resolve();
466
+ }, 5000);
467
+ worker.once('exit', () => {
468
+ clearTimeout(timeout);
469
+ resolve();
470
+ });
471
+ worker.postMessage({ type: 'shutdown' });
472
+ });
473
+ });
474
+ await Promise.all(terminationPromises);
475
+ // Clear data structures
476
+ this.workers.clear();
477
+ this.workerStats.clear();
478
+ this.taskQueue.length = 0;
479
+ this.activeTasks.clear();
480
+ this.pendingResults.clear();
481
+ this.removeAllListeners();
482
+ this.debugLog('✅ Parallel processor disposed');
483
+ }
484
+ setDebug(debug) {
485
+ this.debug = debug;
486
+ }
487
+ }
488
+ // Worker script implementation (this runs in worker threads)
489
+ if (!isMainThread && parentPort) {
490
+ const port = parentPort;
491
+ const { workerId } = workerData;
492
+ let analyzer = null;
493
+ let analyzerInitialized = false;
494
+ let generator = null;
495
+ const getAnalyzer = async () => {
496
+ analyzer ??= new PyAnalyzer();
497
+ if (!analyzerInitialized) {
498
+ await analyzer.initialize();
499
+ analyzerInitialized = true;
500
+ }
501
+ return analyzer;
502
+ };
503
+ const getGenerator = () => {
504
+ generator ??= new CodeGenerator();
505
+ return generator;
506
+ };
507
+ const createResultId = (prefix, name, index) => `${prefix}:${name}:${index}`;
508
+ // Import required modules in worker context
509
+ const workerImplementation = {
510
+ async processTask(task) {
511
+ const startTime = performance.now();
512
+ let result;
513
+ let error;
514
+ try {
515
+ switch (task.type) {
516
+ case 'analyze':
517
+ result = await this.processAnalysisTask(task.data);
518
+ break;
519
+ case 'generate':
520
+ result = await this.processGenerationTask(task.data);
521
+ break;
522
+ case 'validate':
523
+ result = await this.processValidationTask(task.data);
524
+ break;
525
+ default:
526
+ throw new Error(`Unknown task type: ${task.type}`);
527
+ }
528
+ }
529
+ catch (err) {
530
+ error = String(err);
531
+ }
532
+ const duration = performance.now() - startTime;
533
+ const memoryUsage = process.memoryUsage().heapUsed;
534
+ return { result, error, duration, memoryUsage };
535
+ },
536
+ async processAnalysisTask(data) {
537
+ const results = [];
538
+ const activeAnalyzer = await getAnalyzer();
539
+ for (const [index, source] of data.sources.entries()) {
540
+ const start = performance.now();
541
+ try {
542
+ const modulePath = source.path ?? `${source.name}.py`;
543
+ const analysis = await activeAnalyzer.analyzePythonModule(source.content, modulePath);
544
+ results.push({
545
+ taskId: createResultId('analyze', source.name, index),
546
+ success: true,
547
+ result: analysis,
548
+ duration: performance.now() - start,
549
+ memoryUsage: process.memoryUsage().heapUsed,
550
+ });
551
+ }
552
+ catch (error) {
553
+ results.push({
554
+ taskId: createResultId('analyze', source.name, index),
555
+ success: false,
556
+ error: String(error),
557
+ duration: performance.now() - start,
558
+ memoryUsage: process.memoryUsage().heapUsed,
559
+ });
560
+ }
561
+ }
562
+ return results;
563
+ },
564
+ async processGenerationTask(data) {
565
+ const results = [];
566
+ const activeGenerator = getGenerator();
567
+ for (const [index, moduleData] of data.modules.entries()) {
568
+ const start = performance.now();
569
+ try {
570
+ const generationOptions = {
571
+ moduleName: moduleData.name,
572
+ ...moduleData.options,
573
+ };
574
+ const generated = await activeGenerator.generateModule(moduleData.module, generationOptions);
575
+ results.push({
576
+ taskId: createResultId('generate', moduleData.name, index),
577
+ success: true,
578
+ result: generated,
579
+ duration: performance.now() - start,
580
+ memoryUsage: process.memoryUsage().heapUsed,
581
+ });
582
+ }
583
+ catch (error) {
584
+ results.push({
585
+ taskId: createResultId('generate', moduleData.name, index),
586
+ success: false,
587
+ error: String(error),
588
+ duration: performance.now() - start,
589
+ memoryUsage: process.memoryUsage().heapUsed,
590
+ });
591
+ }
592
+ }
593
+ return results;
594
+ },
595
+ async processValidationTask(_data) {
596
+ // Validation logic would go here
597
+ return { validated: true };
598
+ },
599
+ };
600
+ port.on('message', async (raw) => {
601
+ const message = raw;
602
+ if (!message || typeof message !== 'object') {
603
+ return;
604
+ }
605
+ if (message.type === 'task') {
606
+ try {
607
+ const taskResult = await workerImplementation.processTask(message.task);
608
+ port.postMessage({
609
+ type: 'task_complete',
610
+ taskId: message.task.id,
611
+ ...(typeof taskResult === 'object' && taskResult !== null
612
+ ? taskResult
613
+ : { result: taskResult }),
614
+ });
615
+ }
616
+ catch (error) {
617
+ port.postMessage({
618
+ type: 'task_complete',
619
+ taskId: message.task.id,
620
+ error: String(error),
621
+ duration: 0,
622
+ });
623
+ }
624
+ }
625
+ else if (message.type === 'shutdown') {
626
+ process.exit(0);
627
+ }
628
+ });
629
+ // Signal that worker is ready
630
+ port.postMessage({
631
+ type: 'worker_ready',
632
+ workerId,
633
+ });
634
+ }
635
+ export const globalParallelProcessor = new ParallelProcessor();
636
+ //# sourceMappingURL=parallel-processor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parallel-processor.js","sourceRoot":"","sources":["../../src/utils/parallel-processor.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ export interface PythonResolveOptions {
2
+ pythonPath?: string;
3
+ virtualEnv?: string;
4
+ cwd?: string;
5
+ }
6
+ export declare function getDefaultPythonPath(): string;
7
+ export declare function resolvePythonExecutable(options?: PythonResolveOptions): Promise<string>;
8
+ //# sourceMappingURL=python.d.ts.map