evanw/esbuild · error · Error

Invalid supported

Error message

Invalid supported: ${key}

What it means

The `supported` option (feature compatibility flags) is serialized as `--supported:KEY=value`. An '=' inside the KEY breaks parsing, so such keys are rejected at lib/shared/common.ts:227.

Solutions

  1. Remove '=' from the supported key.
  2. Use the canonical feature name from esbuild's supported list.

Example fix

// before
await build({ entryPoints: ['app.ts'], supported: { 'async-await=1': true } })

// after
await build({ entryPoints: ['app.ts'], supported: { 'async-await': true } })
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.supported, 'supported')

Prevention

When it happens

Trigger: Passing `supported: { 'object-rest-spread=x': true }` or any supported key containing '='.

Common situations: Generated feature names that embed '='; mis-delimited config.

Related errors


AI-assisted analysis of evanw/esbuild@f6058f8364 (2026-08-09). Data as JSON: /api/errors/77a9819feac07823. Report an issue: GitHub.

Appendix: source

Thrown at lib/shared/common.ts:227

  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,
  isTTY: boolean,
  logLevelDefault: types.LogLevel,
  writeDefault: boolean,
): {
  entries: [string, string][],
  flags: string[],

View on GitHub (pinned to f6058f8364)