{"record":{"id":"9ca0fc84e0e871cd","repo":"evanw/esbuild","slug":"expected-value-for-supported-quote-key-to-be-a","errorCode":null,"errorMessage":"Expected value for supported ${quote(key)} to be a boolean, got ${typeof value} instead","messagePattern":"Expected value for supported (.+?) to be a boolean, got (.+?) instead","errorType":"validation","errorClass":"Error","httpStatus":null,"severity":"error","filePath":"lib/shared/common.ts","lineNumber":229,"sourceCode":"  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[],\n  write: boolean,\n  stdinContents: Uint8Array | null,","sourceCodeStart":211,"sourceCodeEnd":247,"githubUrl":"https://github.com/evanw/esbuild/blob/f6058f8364fe7ab91ca57a83e02577ed74c9cae4/lib/shared/common.ts#L211-L247","documentation":"Each entry in the `supported` map must be a boolean (true = feature is supported, false = polyfill needed). At lib/shared/common.ts:229 esbuild rejects non-boolean values with the key and the actual typeof, because the value is emitted verbatim as `--supported:key=true|false`.","triggerScenarios":"Passing `supported: { 'async-await': 'true' }`, `{ 'async-await': 1 }`, or `{ 'async-await': null }`.","commonSituations":"Loading supported flags from JSON/env where booleans become strings or numbers; forwarding untyped UI input.","solutions":["Coerce each value to an actual boolean (e.g. value === 'true' or Boolean(value) as appropriate).","Type your supported object as Record<string, boolean>."],"exampleFix":"// before\nawait build({ entryPoints: ['app.ts'], supported: { 'async-await': 'true' } })\n\n// after\nawait build({ entryPoints: ['app.ts'], supported: { 'async-await': true } })","handlingStrategy":"validation","validationCode":"function coerceSupported(map) {\n  if (!map) return map\n  const out = {}\n  for (const k of Object.keys(map)) {\n    const v = map[k]\n    out[k] = typeof v === 'boolean' ? v : (v === 'true' || v === 1)\n  }\n  return out\n}\noptions.supported = coerceSupported(options.supported)","typeGuard":"function isSupportedMap(v): v is Record<string, boolean> {\n  if (!v || typeof v !== 'object') return false\n  return Object.values(v).every(x => typeof x === 'boolean')\n}\nif (options.supported && !isSupportedMap(options.supported)) {\n  throw new Error('supported values must be booleans')\n}","tryCatchPattern":null,"preventionTips":["Type the supported object as Record<string, boolean>.","When loading from JSON/env, coerce truthy strings/numbers to actual booleans.","Avoid forwarding raw form input directly into the supported map."],"tags":["config","validation","supported","type-mismatch"],"backgroundTag":null,"analyzedSha":"f6058f8364fe7ab91ca57a83e02577ed74c9cae4","analyzedAt":"2026-08-09T18:37:22.223Z","contentChangedAt":null,"schemaVersion":2},"datasetVersion":"2026-09-23T08:17:48.524Z"}