| 85 | } |
| 86 | |
| 87 | private async ensureReady(): Promise<void> { |
| 88 | if (this.ready && this.worker) return |
| 89 | |
| 90 | return new Promise((resolve, reject) => { |
| 91 | const worker = new Worker(WORKER_CODE, { |
| 92 | eval: true, |
| 93 | workerData: { |
| 94 | extDir: this.extDir, |
| 95 | entry: this.entry, |
| 96 | workspaceDir: this.workspaceDir, |
| 97 | tempDir: this.tempDir, |
| 98 | }, |
| 99 | }) |
| 100 | |
| 101 | worker.once('message', (msg) => { |
| 102 | if (msg.type === 'ready') { |
| 103 | this.worker = worker |
| 104 | this.ready = true |
| 105 | resolve() |
| 106 | } else if (msg.type === 'error') { |
| 107 | worker.terminate() |
| 108 | reject(new Error(msg.message)) |
| 109 | } |
| 110 | }) |
| 111 | |
| 112 | worker.once('error', (err) => { |
| 113 | reject(err) |
| 114 | }) |
| 115 | }) |
| 116 | } |
| 117 | |
| 118 | async run( |
| 119 | input: ProcessInput, |