diff --git a/packages/build/src/esbuild.ts b/packages/build/src/esbuild.ts index 952e823eec..b2183d6253 100644 --- a/packages/build/src/esbuild.ts +++ b/packages/build/src/esbuild.ts @@ -197,15 +197,23 @@ function copyEsbuildWasmFiles(nodeModulesDir: string, distDir: string): void { ] for (const { src, dest } of filesToCopy) { - fs.copyFileSync(src, dest) - - // Make CLI executable. if (src.endsWith("esbuild")) { + // Read the esbuild binary, patch it to prevent the V8 crash (crbug.com/1201626) + // by eagerly initializing process.stdout.fd and process.stderr.fd on line 2 + // before WebAssembly execution takes place. + let content = fs.readFileSync(src, "utf8") + content = content.replace( + /^(#!.*$)/m, + "$1\n// Eagerly initialize stdout/stderr to avoid V8 crash (crbug.com/1201626) inside WASM stack\nconst _ = [process.stdout.fd, process.stderr.fd];", + ) + fs.writeFileSync(dest, content) try { fs.chmodSync(dest, 0o755) } catch { // Ignore chmod errors on Windows. } + } else { + fs.copyFileSync(src, dest) } } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 1aa321660e..8e7150a577 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -675,8 +675,8 @@ importers: specifier: 6.0.218 version: 6.0.218(zod@3.25.76) esbuild-wasm: - specifier: 0.25.12 - version: 0.25.12 + specifier: 0.28.1 + version: 0.28.1 execa: specifier: 9.6.1 version: 9.6.1 @@ -862,7 +862,7 @@ importers: version: 3.4.1 source-map: specifier: ^0.7.4 - version: 0.7.4 + version: 0.7.6 stacktrace-js: specifier: ^2.0.2 version: 2.0.2 @@ -4555,8 +4555,8 @@ packages: es6-error@4.1.1: resolution: {integrity: sha512-Um/+FxMr9CISWh0bi5Zv0iOD+4cFh5qLeks1qhAopKVAJw3drgKbKySikp7wGhDL0HPeaja0P5ULZrxLkniUVg==} - esbuild-wasm@0.25.12: - resolution: {integrity: sha512-rZqkjL3Y6FwLpSHzLnaEy8Ps6veCNo1kZa9EOfJvmWtBq5dJH4iVjfmOO6Mlkv9B0tt9WFPFmb/VxlgJOnueNg==} + esbuild-wasm@0.28.1: + resolution: {integrity: sha512-p/GD4E8oYRjg3kjdKrnMb0s4PzXgJF42e0MF4H0+ACyK/kIlFRp3e0fzOleIG+wBBm6MM3XQrbpe7soEA+vJIA==} engines: {node: '>=18'} hasBin: true @@ -7360,10 +7360,6 @@ packages: resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==} engines: {node: '>=0.10.0'} - source-map@0.7.4: - resolution: {integrity: sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==} - engines: {node: '>= 8'} - source-map@0.7.6: resolution: {integrity: sha512-i5uvt8C3ikiWeNZSVZNWcfZPItFQOsYTUAOkcUPGd8DqDy1uOUikjt5dG+uRlwyvR108Fb9DOd4GvXfT0N2/uQ==} engines: {node: '>= 12'} @@ -12374,7 +12370,7 @@ snapshots: es6-error@4.1.1: {} - esbuild-wasm@0.25.12: {} + esbuild-wasm@0.28.1: {} esbuild@0.28.1: optionalDependencies: @@ -15826,8 +15822,6 @@ snapshots: source-map@0.6.1: {} - source-map@0.7.4: {} - source-map@0.7.6: {} space-separated-tokens@1.1.5: {} diff --git a/src/package.json b/src/package.json index 7eb12d5fde..18b415580c 100644 --- a/src/package.json +++ b/src/package.json @@ -542,7 +542,7 @@ "@vitest/coverage-v8": "4.1.9", "@vscode/vsce": "3.9.2", "ai": "6.0.218", - "esbuild-wasm": "0.25.12", + "esbuild-wasm": "0.28.1", "execa": "9.6.1", "mkdirp": "3.0.1", "nock": "14.0.15",