evanw/esbuild · error · Error
Invalid log override
Error message
Invalid log override: ${key} What it means
The `logOverride` option (which forces a particular log level per syntax feature) is serialized as `--log-override:KEY=value`. An '=' inside the KEY breaks parsing, so such keys are rejected at lib/shared/common.ts:221.
Solutions
- Remove '=' from the logOverride key.
- Use the correct feature identifier (e.g. 'no-unused-labels', 'commonjs-import-assertions') without separators that include '='.
Example fix
// before
await build({ entryPoints: ['app.ts'], logOverride: { 'commonjs=x': 'verbose' } })
// after
await build({ entryPoints: ['app.ts'], logOverride: { 'commonjs': 'verbose' } }) Defensive patterns
Strategy: validation
Validate before calling
function assertKeysHaveNoEquals(map, name) {
for (const k of Object.keys(map ?? {})) {
if (k.includes('=')) throw new Error(`${name} key must not contain '=': ${k}`)
}
}
assertKeysHaveNoEquals(options.logOverride, 'logOverride') Prevention
- Use esbuild's documented feature identifiers as logOverride keys.
- Avoid templating '=' into feature-name keys.
- Validate keys when config is generated dynamically.
When it happens
Trigger: Passing `logOverride: { 'default=foo': 'verbose' }` or any logOverride key containing '='.
Common situations: Generated/templated feature names that accidentally embed '='; copy-paste errors.
Related errors
- Expected in mangle cache to map to either a string or false
- Expected value for supported
- Expected value for to be a string, got instead
- Invalid banner file type
- Invalid charset
AI-assisted analysis of evanw/esbuild@f6058f8364 (2026-08-09).
Data as JSON: /api/errors/c6248327db28fc48.
Report an issue: GitHub.
Appendix: source
Thrown at lib/shared/common.ts:221
if (reserveProps) flags.push(`--reserve-props=${jsRegExpToGoRegExp(reserveProps)}`)
if (mangleQuoted !== void 0) flags.push(`--mangle-quoted=${mangleQuoted}`)
if (jsx) flags.push(`--jsx=${jsx}`)
if (jsxFactory) flags.push(`--jsx-factory=${jsxFactory}`)
if (jsxFragment) flags.push(`--jsx-fragment=${jsxFragment}`)
if (jsxImportSource) flags.push(`--jsx-import-source=${jsxImportSource}`)
if (jsxDev) flags.push(`--jsx-dev`)
if (jsxSideEffects) flags.push(`--jsx-side-effects`)
if (define) {
for (let key in define) {
if (key.indexOf('=') >= 0) throw new Error(`Invalid define: ${key}`)
flags.push(`--define:${key}=${validateStringValue(define[key], 'define', key)}`)
}
}
if (logOverride) {
for (let key in logOverride) {
if (key.indexOf('=') >= 0) throw new Error(`Invalid log override: ${key}`)
flags.push(`--log-override:${key}=${validateStringValue(logOverride[key], 'log override', key)}`)
}
}
if (supported) {
for (let key in supported) {
if (key.indexOf('=') >= 0) throw new Error(`Invalid supported: ${key}`)
const value = supported[key]
if (typeof value !== 'boolean') throw new Error(`Expected value for supported ${quote(key)} to be a boolean, got ${typeof value} instead`)
flags.push(`--supported:${key}=${value}`)
}
}
if (pure) for (let fn of pure) flags.push(`--pure:${validateStringValue(fn, 'pure')}`)
if (keepNames) flags.push(`--keep-names`)
}
function flagsForBuildOptions(
callName: string,
options: types.BuildOptions,View on GitHub (pinned to f6058f8364)