{"record":{"id":"b2185732baf12034","repo":"BoundaryML/baml","slug":"value-name-not-found-b21857","errorCode":null,"errorMessage":"Value ${name} not found.","messagePattern":"Value (.+?) not found\\.","errorType":"exception","errorClass":"Error","httpStatus":null,"severity":"error","filePath":"engine/language_client_typescript/typescript_src/type_builder.ts","lineNumber":272,"sourceCode":"  }\n\n  type(): FieldType {\n    return this.bldr.field()\n  }\n}\n\nexport class EnumViewer<EnumName extends string, T extends string = string> extends EnumAst<EnumName, T> {\n  constructor(tb: _TypeBuilder, name: EnumName, values: Set<T | string> = new Set()) {\n    super(tb, name, values)\n  }\n\n  listValues(): Array<[string, EnumValueViewer]> {\n    return Array.from(this.values).map((name) => [name, new EnumValueViewer()])\n  }\n\n  value(name: string): EnumValueViewer {\n    if (!this.values.has(name)) {\n      throw new Error(`Value ${name} not found.`)\n    }\n    return new EnumValueViewer()\n  }\n}\n\nexport class EnumValueViewer {\n  constructor() {}\n}\n\nexport class EnumBuilder<EnumName extends string, T extends string = string> extends EnumAst<EnumName, T> {\n  constructor(tb: _TypeBuilder, name: EnumName, values: Set<T | string> = new Set()) {\n    super(tb, name, values)\n  }\n\n  addValue<S extends string>(name: RestrictNot<EnumName, S, T>): EnumValueBuilder {\n    if (this.values.has(name)) {\n      throw new Error(`Value ${name} already exists.`)\n    }","sourceCodeStart":254,"sourceCodeEnd":290,"githubUrl":"https://github.com/BoundaryML/baml/blob/bd85ce9dee1463ff04d27efd20531013a4ff46c1/engine/language_client_typescript/typescript_src/type_builder.ts#L254-L290","documentation":"EnumAst.value (viewer API) throws 'Value <name> not found.' when the requested value is not among the enum's registered values. The viewer tracks value names in a Set and fails fast on unknown lookups rather than returning a null viewer.","triggerScenarios":"Calling enumViewer.value('RED') where 'RED' was never added via EnumBuilder value registration, or with mismatched casing (e.g. 'red' vs 'RED').","commonSituations":"Inspecting a dynamic enum whose values come from a database or config that changed; lookup names sourced from user input.","solutions":["Call listValues() first and verify the exact value name before lookup.","Fix casing/spelling in the value lookup.","Register the missing value on the EnumBuilder before inspecting it."],"exampleFix":"// before\nconst v = enumViewer.value('RED') // throws if absent\n// after\nconst names = enumViewer.listValues().map(([n]) => n)\nconst v = names.includes('RED') ? enumViewer.value('RED') : null","handlingStrategy":"validation","validationCode":"const exists = enumViewer.listValues().some(([n]) => n === name)\nif (!exists) throw new Error(`enum value '${name}' not registered`)","typeGuard":null,"tryCatchPattern":"try {\n  const v = enumViewer.value(name)\n} catch (e) {\n  if (e.message.includes('not found')) return null\n  throw e\n}","preventionTips":["Call listValues() before dynamic value lookups.","Match value casing exactly; enums are case-sensitive.","Register all enum values before inspecting the viewer."],"tags":["typescript","schema","enum","lookup"],"backgroundTag":"resource-not-found","analyzedSha":"bd85ce9dee1463ff04d27efd20531013a4ff46c1","analyzedAt":"2026-09-12T03:38:25.718Z","contentChangedAt":"2026-09-12T03:38:25.718Z","schemaVersion":2},"datasetVersion":"2026-09-14T16:17:12.679Z"}