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

34 lines
813 B
TypeScript

'use server'
export async function testBunExternals() {
const modules = [
'bun:ffi',
'bun:jsc',
'bun:sqlite',
'bun:test',
'bun:wrap',
'bun',
]
const results: Record<string, string> = {}
for (const mod of modules) {
try {
require(mod)
results[mod] = 'loaded'
} catch (e: any) {
// Expected: Cannot find module error when not in Bun runtime
results[mod] = e.message.includes('Cannot find module')
? 'external (not found)'
: 'error'
}
}
// All modules should be external (not found when not in Bun)
const allExternal = Object.values(results).every(
(r) => r === 'external (not found)' || r === 'loaded'
)
return allExternal
? 'All Bun modules are external'
: 'Some modules were not properly externalized'
}