{"record":{"id":"dbc4f1d65c6991f4","repo":"vercel/ai","slug":"unsupported-output-exhaustivecheck","errorCode":null,"errorMessage":"Unsupported output: ${_exhaustiveCheck}","messagePattern":"Unsupported output: (.+?)","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"packages/ai/src/generate-object/output-strategy.ts","lineNumber":423,"sourceCode":"  schema,\n  enumValues,\n}: {\n  output: 'object' | 'array' | 'enum' | 'no-schema';\n  schema?: FlexibleSchema<SCHEMA>;\n  enumValues?: Array<SCHEMA>;\n}): OutputStrategy<any, any, any> {\n  switch (output) {\n    case 'object':\n      return objectOutputStrategy(asSchema(schema!));\n    case 'array':\n      return arrayOutputStrategy(asSchema(schema!));\n    case 'enum':\n      return enumOutputStrategy(enumValues! as Array<string>);\n    case 'no-schema':\n      return noSchemaOutputStrategy;\n    default: {\n      const _exhaustiveCheck: never = output;\n      throw new Error(`Unsupported output: ${_exhaustiveCheck}`);\n    }\n  }\n}\n","sourceCodeStart":405,"sourceCodeEnd":427,"githubUrl":"https://github.com/vercel/ai/blob/69428b1f8b037e4d118fb4853428d5c4e620493c/packages/ai/src/generate-object/output-strategy.ts#L405-L427","documentation":"`getOutputStrategy` switches on the requested output mode and throws this Error when it encounters a value outside `'object' | 'array' | 'enum' | 'no-schema'`. At runtime this is unreachable through the public API because `validateObjectGenerationInput` rejects bad values first; seeing it means an invalid output value bypassed validation (internal misuse, casts, or version mismatch).","triggerScenarios":"Passing an arbitrary string (e.g. `'objects'`, `'list'`, `''`) as `output` to `generateObject`/`streamObject` through an `as any` cast, from untyped JS, or via an internal caller that skips `validateObjectGenerationInput`.","commonSituations":"Typos in dynamically constructed options objects; JavaScript callers with no type checking; wrapper libraries forwarding user config straight into `generateObject`.","solutions":["Use one of the literal values: `'object'`, `'array'`, `'enum'`, or `'no-schema'` for `output`.","Remove `as any` casts on the options object so TypeScript validates the `output` literal.","If the value comes from config, validate/normalize it before passing it to generateObject/streamObject."],"exampleFix":"// before\ngenerateObject({ model, schema, output: 'objects' as any });\n\n// after\ngenerateObject({ model, schema, output: 'object' });","handlingStrategy":"validation","validationCode":"const OUTPUT_MODES = ['object', 'array', 'enum', 'no-schema'] as const;\ntype OutputMode = typeof OUTPUT_MODES[number];\nfunction assertOutputMode(v: unknown): asserts v is OutputMode {\n  if (!OUTPUT_MODES.includes(v as OutputMode)) throw new Error(`Invalid output mode: ${v}`);\n}","typeGuard":"function isOutputMode(v: unknown): v is 'object' | 'array' | 'enum' | 'no-schema' {\n  return v === 'object' || v === 'array' || v === 'enum' || v === 'no-schema';\n}","tryCatchPattern":"try {\n  const result = await generateObject({ model, schema, output: userOutput as any });\n} catch (e) {\n  if (e instanceof Error && e.message.startsWith('Unsupported output')) {\n    // retry with default object mode\n    return generateObject({ model, schema });\n  }\n  throw e;\n}","preventionTips":["Always pass literal 'object' | 'array' | 'enum' | 'no-schema'.","Validate config-derived output values against the union.","Avoid `as any` on generateObject/streamObject options.","Rely on TypeScript literal types instead of string interpolation for options."],"tags":["configuration","api-misuse","exhaustiveness"],"backgroundTag":"invalid-argument-value","analyzedSha":"69428b1f8b037e4d118fb4853428d5c4e620493c","analyzedAt":"2026-08-30T12:32:21.016Z","schemaVersion":2},"datasetVersion":"2026-08-30T13:17:10.514Z"}