Files
b8eba4f703 Mark bun builtin modules as external (fixes #75220) (#77616)
Fixes https://github.com/vercel/next.js/issues/75220

This marks Bun's builtin modules as external, following the same pattern
as for Node.

- `"bun:ffi"`
- `"bun:jsc"`
- `"bun:sqlite"`
- `"bun:test"`
- `"bun:wrap"`
- `"bun"`

I have not manually tested this change yet, nor attempted to write tests
for this. I did check for other places in the code that should be
updated and _maybe_
`externals/crates/next-custom-transforms/src/transforms/warn_for_edge_runtime.rs`
should as well, but I'll leave that up to you whether or not that makes
sense. Opening as a draft until this can be at least manually tested.

By the way, node's `sqlite` module is missing from `NODE_EXTERNALS`.
That seemed out of scope but worth mentioning.

Current error message:

![image](https://github.com/user-attachments/assets/0538fd35-a1ce-44fe-af7f-1db696cd3e7b)

---------

Co-authored-by: Alistair Smith <[email protected]>
2025-08-01 11:15:57 +02:00

27 lines
703 B
TypeScript

import { NextResponse } from 'next/server'
export const runtime = 'edge'
// Edge runtime should not allow Bun imports
// This test verifies that Bun modules are handled correctly in edge runtime
export async function GET() {
const modules = [
{ name: 'bunFfi', module: 'bun:ffi' },
{ name: 'bunJsc', module: 'bun:jsc' },
{ name: 'bunSqlite', module: 'bun:sqlite' },
{ name: 'bunTest', module: 'bun:test' },
{ name: 'bunWrap', module: 'bun:wrap' },
{ name: 'bun', module: 'bun' },
]
try {
for (const { module } of modules) {
await import(module)
}
return NextResponse.json('Did not throw')
} catch (e) {
return NextResponse.json(String(e))
}
}