diff --git a/packages/meta/src/node-es-module-loader/loader.mts b/packages/meta/src/node-es-module-loader/loader.mts index 253634a881..cb407879e0 100644 --- a/packages/meta/src/node-es-module-loader/loader.mts +++ b/packages/meta/src/node-es-module-loader/loader.mts @@ -10,7 +10,7 @@ interface TsConfig { } // Read and parse tsconfig.base.json -const workspaceRoot = join(import.meta.dirname, '..', '..', '..', '..') +const workspaceRoot = join(import.meta.dirname, '..', '..', '..', '..'); const tsconfigPath = join(workspaceRoot, 'tsconfig.base.json'); const tsconfig: TsConfig = JSON.parse(readFileSync(tsconfigPath, 'utf-8')); const pathAliases = tsconfig.compilerOptions.paths; diff --git a/packages/php-wasm/universal/src/lib/php-worker.ts b/packages/php-wasm/universal/src/lib/php-worker.ts index 65dac7d7b3..d6ff16d607 100644 --- a/packages/php-wasm/universal/src/lib/php-worker.ts +++ b/packages/php-wasm/universal/src/lib/php-worker.ts @@ -194,11 +194,23 @@ export class PHPWorker implements LimitedPHPApi, AsyncDisposable { options?: { env?: Record } ): Promise { const { php, reap } = await this.acquirePHPInstance(); + let response: StreamedPHPResponse; try { - return await php.cli(argv, options); - } finally { + response = await php.cli(argv, options); + } catch (error) { reap(); + throw error; } + /** + * Register the reap() callback to run asynchronously once + * the response is finished. + * + * We don't await for response.finished here. It is a + * `StreamedPHPResponse` instance and the caller may want + * to start processing the streamed data immediately. + */ + response.finished.finally(reap); + return response; } /** @inheritDoc @php-wasm/universal!/PHP.chdir */ diff --git a/packages/playground/cli/tests/run-cli.spec.ts b/packages/playground/cli/tests/run-cli.spec.ts index 4262b8f833..06593c490d 100644 --- a/packages/playground/cli/tests/run-cli.spec.ts +++ b/packages/playground/cli/tests/run-cli.spec.ts @@ -631,5 +631,5 @@ describe.each(blueprintVersions)( }); }); }, - 60000 + 60_000 * 5 );