diff --git a/.gitignore b/.gitignore index 36669d8..f3f228b 100644 --- a/.gitignore +++ b/.gitignore @@ -35,3 +35,4 @@ report.[0-9]_.[0-9]_.[0-9]_.[0-9]_.json .DS_Store PLAN.md +bun-repro-dir/ diff --git a/repro.ts b/repro.ts new file mode 100644 index 0000000..869b425 --- /dev/null +++ b/repro.ts @@ -0,0 +1,59 @@ +import { rmdir, mkdir, writeFile, readFile } from "node:fs/promises"; +import { join } from "node:path"; +import { spawn } from "node:child_process"; + +async function main() { + const testDir = join(process.cwd(), "bun-repro-dir"); + await rmdir(testDir, { recursive: true }).catch(() => {}); + await mkdir(testDir, { recursive: true }); + + const numChunks = 2500; + + for (let i = 0; i < numChunks; i++) { + await writeFile(join(testDir, `chunk${i}.js`), `export const val = ${i};\nconsole.log(val);`); + } + + let entryFile = "import { x } from './entry1.js'; console.log(x);\n"; + let entry1File = "export const x = 1;\n"; + + for (let i = 0; i < numChunks; i++) { + entry1File += `import("./chunk${i}.js").then(m => console.log(m.val));\n`; + } + + await writeFile(join(testDir, "entry1.js"), entry1File); + await writeFile(join(testDir, "index.js"), entryFile); + + const htmlContent = ``; + await writeFile(join(testDir, "index.html"), htmlContent); + + console.log("Building..."); + const child = spawn(process.argv[0], ["build", "--target=browser", "--splitting", "--outdir", "./dist", "./index.html"], { + cwd: testDir, + stdio: "inherit", + }); + + await new Promise((resolve) => child.on("close", resolve)); + + const outputHtml = await readFile(join(testDir, "dist", "index.html"), "utf8"); + console.log("\nGenerated HTML (partial):"); + console.log(outputHtml.slice(0, 500)); + + // Parse the injected script src + const match = outputHtml.match(/src="([^"]+)"/); + if (!match) { + console.error("Failed to parse output HTML"); + process.exit(1); + } + + const injectedScript = match[1]; + console.log(`\nInjected script: ${injectedScript}`); + + const injectedContent = await readFile(join(testDir, "dist", injectedScript), "utf8"); + if (injectedContent.includes('console.log(x)') || injectedContent.includes('console.log(1)')) { + console.log("✅ Bun successfully injected the main entrypoint!"); + } else { + console.log("❌ Bug confirmed: Bun injected a random chunk instead of the main entrypoint."); + } +} + +main().catch(console.error);