{"record":{"id":"e46cf56509e07c04","repo":"biomejs/biome","slug":"metavariable-members-are-not-supported-in-the-error-global","errorCode":null,"errorMessage":"metavariable members are not supported in the Error global","messagePattern":"metavariable members are not supported in the Error global","errorType":"validation","errorClass":null,"httpStatus":null,"severity":"error","filePath":"xtask/codegen/src/generate_global_types/lower.rs","lineNumber":2533,"sourceCode":"            };\n            Ok(Some(LoweredTypeMember {\n                name,\n                kind: LoweredMemberKind::Named { optional },\n                type_reference,\n            }))\n        }\n        AnyTsTypeMember::TsMethodSignatureTypeMember(_) => {\n            bail!(\"method signatures are not supported in the Error global\")\n        }\n        AnyTsTypeMember::TsCallSignatureTypeMember(_)\n        | AnyTsTypeMember::TsConstructSignatureTypeMember(_) => {\n            bail!(\"Error global signatures must be declared on ErrorConstructor\")\n        }\n        AnyTsTypeMember::JsBogusMember(_) => {\n            bail!(\"bogus members are not supported in the Error global\")\n        }\n        AnyTsTypeMember::JsMetavariable(_) => {\n            bail!(\"metavariable members are not supported in the Error global\")\n        }\n        AnyTsTypeMember::TsGetterSignatureTypeMember(_) => {\n            bail!(\"getter signatures are not supported in the Error global\")\n        }\n        AnyTsTypeMember::TsIndexSignatureTypeMember(_) => {\n            bail!(\"index signatures are not supported in the Error global\")\n        }\n        AnyTsTypeMember::TsSetterSignatureTypeMember(_) => {\n            bail!(\"setter signatures are not supported in the Error global\")\n        }\n    }\n}\n\n/// Validates supported optional `Error` members.\nfn lower_optional_error_member_reference(\n    name: &Text,\n    type_reference: LoweredTypeReference,\n) -> Result<LoweredTypeReference> {","sourceCodeStart":2515,"sourceCodeEnd":2551,"githubUrl":"https://github.com/biomejs/biome/blob/3835945f0638c88162351318b7bc8b64c5f2fba7/xtask/codegen/src/generate_global_types/lower.rs#L2515-L2551","documentation":"This is a build-time error thrown by Biome's codegen xtask while lowering the TypeScript Error global type declarations into Rust code. The generator only supports a fixed set of member kinds (property, method, constructor) on the Error global; any JsMetavariable member in the source .d.ts input is rejected because metavariables (unparsed/incomplete syntax) cannot be lowered to a typed signature. It indicates the upstream type data fed to the generator is malformed or the lowering code needs a new arm.","triggerScenarios":"Running the global-types codegen (e.g. `just gen-global-types` / xtask generate-global-types) when the parsed Error global declaration contains a member that parsed as JsMetavariable instead of a concrete AnyTsTypeMember variant.","commonSituations":"Feeding a truncated or syntactically incomplete TypeScript lib definition for Error into the codegen pipeline; a parser upgrade causing members of `ErrorConstructor`/`Error` to parse as metavariables; hand-editing the bundled type source and leaving an incomplete member.","solutions":["Fix the source type declaration so every member of the Error global is a complete, concrete TypeScript member (no parse errors).","Re-run the parser/codegen with a current grammar so the member parses as a property/method/signature instead of a metavariable.","If metavariable members are now legitimate, add an explicit AnyTsTypeMember::JsMetavariable handling arm in lower.rs instead of bailing."],"exampleFix":"// before (source .d.ts fed to codegen)\ninterface Error {\n  stack?: string\n// after (complete member)\ninterface Error {\n  stack?: string;\n}","handlingStrategy":"validation","validationCode":"// Before running codegen, ensure the Error global source has no metavariable members\nfn assert_no_metavariables(source: &str) -> Result<(), String> {\n    if source.trim_end().ends_with(';') || source.trim_end().ends_with('}') {\n        Ok(())\n    } else {\n        Err(\"Error global declaration contains an incomplete member\".into())\n    }\n}","typeGuard":"fn is_concrete_member(m: &AnyTsTypeMember) -> bool {\n    !matches!(m, AnyTsTypeMember::JsBogusMember(_) | AnyTsTypeMember::JsMetavariable(_))\n}","tryCatchPattern":null,"preventionTips":["Always regenerate type data from complete, committed lib .d.ts sources, never hand-edited partial files.","Pin the grammar version used for parsing to the one the codegen expects.","Run `just gen-grammar typescript` after parser changes before running global-types codegen."],"tags":["codegen","build","typescript"],"backgroundTag":"unsupported-operation","analyzedSha":"3835945f0638c88162351318b7bc8b64c5f2fba7","analyzedAt":"2026-09-13T15:11:16.919Z","contentChangedAt":"2026-09-13T15:11:16.919Z","schemaVersion":2},"datasetVersion":"2026-09-14T00:17:10.932Z"}