Files
remanso/docs/bugs/rolldown-while-in-globalThis.md
2026-03-22 00:50:54 +01:00

2.0 KiB

Rolldown minifier drops while( keyword — invalid syntax in Safari

Status: To be filed Workaround applied: build: { minify: "esbuild" } in vite.config.mts

Summary

Rolldown's minifier drops the while(/for(; keyword when a while (x in globalThis) loop is bundled alongside other module-level variable declarations. The resulting output is a syntax error that crashes Safari.

Target repositories

Environment

Package Version
vite 8.0.1
rolldown 1.0.0-rc.10
@oxc-project/types 0.120.0
Triggered by @ark/schema 0.56.0 / arktype 2.1.29

Source

File: node_modules/@ark/schema/out/shared/registry.js

let _registryName = "$ark";
let suffix = 2;
while (_registryName in globalThis)
    _registryName = `$ark${suffix++}`;
export const registryName = _registryName;

Actual minified output

un=Pe(`implementedTraits`),dn=`$ark`,fn=2;dn in globalThis;)dn=`$ark${fn++}`;var pn=dn;

The while( keyword is missing. The orphaned ) is a syntax error.

Expected output

var dn=`$ark`,fn=2;for(;dn in globalThis;)dn=`$ark${fn++}`;var pn=dn;

Impact

Safari throws: SyntaxError: Unexpected keyword 'in'. Expected a ';' following a return statement. Chrome and Firefox appear to tolerate the malformed output.

Notes

  • The bug does not reproduce with a minimal isolated input — it is triggered by Rolldown merging multiple module-level var declarations across bundled modules before applying the loop optimization.
  • Related closed issue: rolldown/rolldown#8146 — "Minifier incorrectly merges statements into for-in expression via comma operator"

Workaround

Add to vite.config.mts:

build: {
  minify: "esbuild",
},

esbuild correctly outputs for(;Dt in globalThis;)Dt=\$ark${za++}``.