diff --git a/Dockerfile.bun b/Dockerfile.bun index 5214e42a6a..22d6927434 100644 --- a/Dockerfile.bun +++ b/Dockerfile.bun @@ -41,8 +41,9 @@ RUN bun -e "import { Database } from 'bun:sqlite'; const db = new Database(':mem COPY . . -# Disable Turbopack for Bun builder stage (Turbopack V8 internal worker bindings require Node) -ENV OMNIROUTE_USE_TURBOPACK=0 +# Turbopack is supported on Bun 1.4 + Next 16.3; override via --build-arg OMNIROUTE_USE_TURBOPACK=0 if needed +ARG OMNIROUTE_USE_TURBOPACK=1 +ENV OMNIROUTE_USE_TURBOPACK=${OMNIROUTE_USE_TURBOPACK} ARG OMNIROUTE_BASE_PATH="" ENV OMNIROUTE_BASE_PATH=$OMNIROUTE_BASE_PATH diff --git a/changelog.d/features/11471-bun-turbopack.md b/changelog.d/features/11471-bun-turbopack.md new file mode 100644 index 0000000000..69c5c8db05 --- /dev/null +++ b/changelog.d/features/11471-bun-turbopack.md @@ -0,0 +1 @@ +- **build(bun):** allow Turbopack bundler flag on Bun 1.4+ with configurable Webpack fallback ([#11471](https://github.com/diegosouzapw/OmniRoute/pull/11471)) — thanks @TheDemonTuan diff --git a/scripts/build/build-next-isolated.mjs b/scripts/build/build-next-isolated.mjs index fa58607ff5..b1bc79e567 100644 --- a/scripts/build/build-next-isolated.mjs +++ b/scripts/build/build-next-isolated.mjs @@ -131,9 +131,9 @@ function runNextBuild() { } export function resolveNextBuildBundlerFlag(baseEnv = process.env) { - // Turbopack is the default on Node.js; on Bun or when explicitly disabled (=0), - // use Webpack (--webpack) to avoid Turbopack V8 internal worker API mismatches. - if (process.versions.bun || baseEnv.OMNIROUTE_USE_TURBOPACK === "0") { + // Turbopack is the default (on Node.js and Bun 1.4+). + // When explicitly disabled (OMNIROUTE_USE_TURBOPACK=0), use Webpack (--webpack) as fallback. + if (baseEnv.OMNIROUTE_USE_TURBOPACK === "0") { return "--webpack"; } return "--turbopack"; diff --git a/tests/unit/build/resolve-next-build-bundler-flag.test.mjs b/tests/unit/build/resolve-next-build-bundler-flag.test.mjs new file mode 100644 index 0000000000..a378193466 --- /dev/null +++ b/tests/unit/build/resolve-next-build-bundler-flag.test.mjs @@ -0,0 +1,19 @@ +import { test } from "node:test"; +import assert from "node:assert/strict"; + +import { resolveNextBuildBundlerFlag } from "../../../scripts/build/build-next-isolated.mjs"; + +test("resolveNextBuildBundlerFlag returns --turbopack by default", () => { + const flag = resolveNextBuildBundlerFlag({}); + assert.equal(flag, "--turbopack"); +}); + +test("resolveNextBuildBundlerFlag returns --webpack when OMNIROUTE_USE_TURBOPACK is '0'", () => { + const flag = resolveNextBuildBundlerFlag({ OMNIROUTE_USE_TURBOPACK: "0" }); + assert.equal(flag, "--webpack"); +}); + +test("resolveNextBuildBundlerFlag returns --turbopack when OMNIROUTE_USE_TURBOPACK is '1'", () => { + const flag = resolveNextBuildBundlerFlag({ OMNIROUTE_USE_TURBOPACK: "1" }); + assert.equal(flag, "--turbopack"); +});