{"record":{"id":"c41f5a688cf228dc","repo":"BoundaryML/baml","slug":"value-name-not-found-type-builder","errorCode":null,"errorMessage":"Value ${name} not found.","messagePattern":"Value (.+?) not found\\.","errorType":"exception","errorClass":"Error","httpStatus":null,"severity":"error","filePath":"engine/language_client_typescript/type_builder.js","lineNumber":196,"sourceCode":"    constructor(tb, name, values = new Set()) {\n        this.values = values;\n        this.bldr = tb.getEnum(name);\n    }\n    type() {\n        return this.bldr.field();\n    }\n}\nexports.EnumAst = EnumAst;\nclass EnumViewer extends EnumAst {\n    constructor(tb, name, values = new Set()) {\n        super(tb, name, values);\n    }\n    listValues() {\n        return Array.from(this.values).map((name) => [name, new EnumValueViewer()]);\n    }\n    value(name) {\n        if (!this.values.has(name)) {\n            throw new Error(`Value ${name} not found.`);\n        }\n        return new EnumValueViewer();\n    }\n}\nexports.EnumViewer = EnumViewer;\nclass EnumValueViewer {\n    constructor() { }\n}\nexports.EnumValueViewer = EnumValueViewer;\nclass EnumBuilder extends EnumAst {\n    constructor(tb, name, values = new Set()) {\n        super(tb, name, values);\n    }\n    addValue(name) {\n        if (this.values.has(name)) {\n            throw new Error(`Value ${name} already exists.`);\n        }\n        this.values.add(name);","sourceCodeStart":178,"sourceCodeEnd":214,"githubUrl":"https://github.com/BoundaryML/baml/blob/bd85ce9dee1463ff04d27efd20531013a4ff46c1/engine/language_client_typescript/type_builder.js#L178-L214","documentation":"EnumViewer.value(name) throws when the requested enum value name is not present in the enum's value set. The viewer is read-only and only resolves names that exist, so this error means the caller asked for a value the enum does not define.","triggerScenarios":"Calling EnumViewer.value('SOME_VALUE') where SOME_VALUE is not in the enum's value set (typo, wrong casing, value removed, or viewer built from a different enum).","commonSituations":"Switching a BAML enum's members and forgetting to update code that looks values up by string; querying a value from one enum on another enum's viewer; stringly-typed lookups from parsed user input.","solutions":["Check membership first with listValues() or values.has before calling value(name)","Match the exact enum member name and casing as defined in the .baml file","Regenerate/update client code after changing the enum definition"],"exampleFix":"// before\nconst v = enumViewer.value('PENDING'); // throws if absent\n// after\nconst found = enumViewer.listValues().find(([n]) => n === 'PENDING');\nif (!found) throw new Error('Enum value PENDING does not exist');\nconst v = enumViewer.value('PENDING');","handlingStrategy":"validation","validationCode":"const known = new Set(enumViewer.listValues().map(([n]) => n));\nif (!known.has('PENDING')) throw new Error('Unknown enum value: PENDING');","typeGuard":"function hasEnumValue(ev, name) { return ev.listValues().some(([n]) => n === name); }","tryCatchPattern":"try { return enumViewer.value(name); }\ncatch (e) { if (String(e.message).includes('not found')) return null; throw e; }","preventionTips":["Validate string inputs against enum members before lookup","Update lookup tables when enum definitions change","Use generated enum constants instead of raw strings"],"tags":["enum","lookup","builder"],"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-23T08:17:48.524Z"}