{"record":{"id":"3f4bcbe1eb4d87b6","repo":"jackwener/OpenCLI","slug":"wikidata-language-value-is-not-a-valid-langua","errorCode":null,"errorMessage":"wikidata language \"${value}\" is not a valid language code","messagePattern":"wikidata language \"(.+?)\" is not a valid language code","errorType":"validation","errorClass":"ArgumentError","httpStatus":null,"severity":"error","filePath":"clis/wikidata/utils.js","lineNumber":53,"sourceCode":"export function requireEntityId(value) {\n    const raw = String(value ?? '').trim().toUpperCase();\n    if (!raw) throw new ArgumentError('wikidata entity id is required (e.g. \"Q937\")');\n    // Tolerate URL-paste like `https://www.wikidata.org/wiki/Q937`.\n    const stripped = raw.replace(/^HTTPS?:\\/\\/[^/]+\\/WIKI\\//i, '');\n    if (!ENTITY_ID_PATTERN.test(stripped)) {\n        throw new ArgumentError(\n            `wikidata entity id \"${value}\" is not a valid Q/P/L identifier`,\n            'Expected format: \"Q<digits>\" (item), \"P<digits>\" (property), or \"L<digits>\" (lexeme).',\n        );\n    }\n    return stripped;\n}\n\nexport function requireLanguage(value, defaultValue = 'en') {\n    const raw = String(value ?? defaultValue).trim().toLowerCase();\n    // Wikidata language codes are 2-3 letter ISO 639 codes plus optional region (`zh-hans`).\n    if (!/^[a-z]{2,3}(-[a-z]{2,8})?$/.test(raw)) {\n        throw new ArgumentError(\n            `wikidata language \"${value}\" is not a valid language code`,\n            'Expected an ISO 639 language code such as \"en\", \"fr\", \"zh\", \"zh-hans\".',\n        );\n    }\n    return raw;\n}\n\nexport async function wikidataFetch(url, label) {\n    let resp;\n    try {\n        resp = await fetch(url, { headers: { 'user-agent': UA, accept: 'application/json' } });\n    }\n    catch (err) {\n        throw new CommandExecutionError(\n            `${label} request failed: ${err?.message ?? err}`,\n            'Check that www.wikidata.org is reachable from this network.',\n        );\n    }","sourceCodeStart":35,"sourceCodeEnd":71,"githubUrl":"https://github.com/jackwener/OpenCLI/blob/49907e53dc3ade5c223ff0c4c2c2785687cec4e6/clis/wikidata/utils.js#L35-L71","documentation":"requireLanguage validates the language option for wikidata commands against /^[a-z]{2,3}(-[a-z]{2,8})?$/ — an ISO 639 code of 2-3 letters plus optional region suffix. Invalid codes throw this ArgumentError. The default is 'en' when the option is omitted.","triggerScenarios":"Calling a wikidata command with `--language` set to something like 'english', 'en-US-x-foo' (region too long), 'e', 'zh_CN' (underscore instead of hyphen), or an empty string that overrides the default.","commonSituations":"Typing the language name instead of its code ('english' vs 'en'); using underscores (zh_CN) from locale env vars like LC_ALL; overly specific BCP-47 tags like 'en-US-POSIX' that exceed the pattern; passing '' explicitly instead of omitting the flag.","solutions":["Use a valid ISO 639 code: en, fr, zh, etc.","Convert region/underscore forms: zh_CN -> zh-hans or zh (lowercase + hyphen only)","Drop extra subtags beyond one region segment (en-US is fine, en-US-POSIX is not)","Omit the flag entirely to use the default language 'en'"],"exampleFix":"// before\nawait runCli(['wikidata', 'search', 'cat', '--language', 'zh_CN']);\n// after\nawait runCli(['wikidata', 'search', 'cat', '--language', 'zh-hans']);","handlingStrategy":"validation","validationCode":"const LANG_RE = /^[a-z]{2,3}(-[a-z]{2,8})?$/;\nconst lang = String(rawLang ?? 'en').trim().toLowerCase();\nif (!LANG_RE.test(lang)) throw new Error(`invalid language code: ${rawLang}`);\nawait runCli(['wikidata', 'search', query, '--language', lang]);","typeGuard":"function isValidLanguageCode(v) { return typeof v === 'string' && /^[a-z]{2,3}(-[a-z]{2,8})?$/.test(v.trim().toLowerCase()); }","tryCatchPattern":"try {\n    await runCli(['wikidata', 'search', query, '--language', lang]);\n} catch (e) {\n    if (/not a valid language code/.test(e.message)) {\n        console.error(`Bad --language \"${lang}\"; falling back to en`);\n        await runCli(['wikidata', 'search', query, '--language', 'en']);\n    } else throw e;\n}","preventionTips":["Convert locale formats: zh_CN -> zh-hans, never underscores","Use 2-3 letter ISO 639 codes with at most one region subtag","Omit --language to get the 'en' default","Normalize language input to lowercase before passing it"],"tags":["validation","arguments","i18n"],"backgroundTag":"invalid-argument","analyzedSha":"49907e53dc3ade5c223ff0c4c2c2785687cec4e6","analyzedAt":"2026-08-29T08:14:47.543Z","schemaVersion":2},"datasetVersion":"2026-08-29T12:17:43.993Z"}