{"record":{"id":"77a9819feac07823","repo":"evanw/esbuild","slug":"invalid-supported-key","errorCode":null,"errorMessage":"Invalid supported: ${key}","messagePattern":"Invalid supported: (.+?)","errorType":"validation","errorClass":"Error","httpStatus":null,"severity":"error","filePath":"lib/shared/common.ts","lineNumber":227,"sourceCode":"  if (jsxImportSource) flags.push(`--jsx-import-source=${jsxImportSource}`)\n  if (jsxDev) flags.push(`--jsx-dev`)\n  if (jsxSideEffects) flags.push(`--jsx-side-effects`)\n\n  if (define) {\n    for (let key in define) {\n      if (key.indexOf('=') >= 0) throw new Error(`Invalid define: ${key}`)\n      flags.push(`--define:${key}=${validateStringValue(define[key], 'define', key)}`)\n    }\n  }\n  if (logOverride) {\n    for (let key in logOverride) {\n      if (key.indexOf('=') >= 0) throw new Error(`Invalid log override: ${key}`)\n      flags.push(`--log-override:${key}=${validateStringValue(logOverride[key], 'log override', key)}`)\n    }\n  }\n  if (supported) {\n    for (let key in supported) {\n      if (key.indexOf('=') >= 0) throw new Error(`Invalid supported: ${key}`)\n      const value = supported[key]\n      if (typeof value !== 'boolean') throw new Error(`Expected value for supported ${quote(key)} to be a boolean, got ${typeof value} instead`)\n      flags.push(`--supported:${key}=${value}`)\n    }\n  }\n  if (pure) for (let fn of pure) flags.push(`--pure:${validateStringValue(fn, 'pure')}`)\n  if (keepNames) flags.push(`--keep-names`)\n}\n\nfunction flagsForBuildOptions(\n  callName: string,\n  options: types.BuildOptions,\n  isTTY: boolean,\n  logLevelDefault: types.LogLevel,\n  writeDefault: boolean,\n): {\n  entries: [string, string][],\n  flags: string[],","sourceCodeStart":209,"sourceCodeEnd":245,"githubUrl":"https://github.com/evanw/esbuild/blob/f6058f8364fe7ab91ca57a83e02577ed74c9cae4/lib/shared/common.ts#L209-L245","documentation":"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.","triggerScenarios":"Passing `supported: { 'object-rest-spread=x': true }` or any supported key containing '='.","commonSituations":"Generated feature names that embed '='; mis-delimited config.","solutions":["Remove '=' from the supported key.","Use the canonical feature name from esbuild's supported list."],"exampleFix":"// before\nawait build({ entryPoints: ['app.ts'], supported: { 'async-await=1': true } })\n\n// after\nawait build({ entryPoints: ['app.ts'], supported: { 'async-await': true } })","handlingStrategy":"validation","validationCode":"function assertKeysHaveNoEquals(map, name) {\n  for (const k of Object.keys(map ?? {})) {\n    if (k.includes('=')) throw new Error(`${name} key must not contain '=': ${k}`)\n  }\n}\nassertKeysHaveNoEquals(options.supported, 'supported')","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Use canonical feature names from esbuild's supported list as keys.","Don't embed '=' in generated feature identifiers.","Unit-test the supported map for valid keys before building."],"tags":["config","validation","supported"],"backgroundTag":null,"analyzedSha":"f6058f8364fe7ab91ca57a83e02577ed74c9cae4","analyzedAt":"2026-08-09T18:37:22.223Z","contentChangedAt":null,"schemaVersion":2},"datasetVersion":"2026-09-23T08:17:48.524Z"}