{"record":{"id":"e66bd93354730031","repo":"denoland/deno","slug":"err-invalid-arg-value-e66bd9","errorCode":"ERR_INVALID_ARG_VALUE","errorMessage":"The property 'options.${longOption}.short' must be a single character. Received ${inspected}","messagePattern":"The property 'options\\.(.+?)\\.short' must be a single character\\. Received (.+?)","errorType":"error_code","errorClass":"TypeError","httpStatus":null,"severity":"error","filePath":"ext/node/polyfills/internal/util/parse_args/parse_args.js","lineNumber":369,"sourceCode":"  validateBoolean(returnTokens, \"tokens\");\n  validateObject(options, \"options\");\n  ArrayPrototypeForEach(\n    ObjectEntries(options),\n    ({ 0: longOption, 1: optionConfig }) => {\n      validateObject(optionConfig, `options.${longOption}`);\n\n      // type is required\n      const optionType = objectGetOwn(optionConfig, \"type\");\n      validateUnion(optionType, `options.${longOption}.type`, [\n        \"string\",\n        \"boolean\",\n      ]);\n\n      if (ObjectHasOwn(optionConfig, \"short\")) {\n        const shortOption = optionConfig.short;\n        validateString(shortOption, `options.${longOption}.short`);\n        if (shortOption.length !== 1) {\n          throw new ERR_INVALID_ARG_VALUE(\n            `options.${longOption}.short`,\n            shortOption,\n            \"must be a single character\",\n          );\n        }\n      }\n\n      const multipleOption = objectGetOwn(optionConfig, \"multiple\");\n      if (ObjectHasOwn(optionConfig, \"multiple\")) {\n        validateBoolean(multipleOption, `options.${longOption}.multiple`);\n      }\n\n      const defaultValue = objectGetOwn(optionConfig, \"default\");\n      if (defaultValue !== undefined) {\n        let validator;\n        switch (optionType) {\n          case \"string\":\n            validator = multipleOption ? validateStringArray : validateString;","sourceCodeStart":351,"sourceCodeEnd":387,"githubUrl":"https://github.com/denoland/deno/blob/9ad36f7a2cce60488e6ec52283efb32efddaf93a/ext/node/polyfills/internal/util/parse_args/parse_args.js#L351-L387","documentation":"Config-time validation inside parseArgs: for each declared option that has a 'short', the value must already be a string (validateString) and then must be exactly one character; a longer or empty string throws ERR_INVALID_ARG_VALUE for options.<name>.short.","triggerScenarios":"parseArgs({options: {log: {type: 'string', short: 'log'}}}); short: ''; programmatically generated configs where the long name is reused as the short.","commonSituations":"Copy-pasting the long name into the short field; config loaded from YAML/JSON with short: ['l'] (array) or 'vv'; generators that forget to truncate.","solutions":["Use exactly one character: short: 'l'","Omit short entirely when no short form is wanted","When generating configs, assert short.length === 1 before calling parseArgs"],"exampleFix":"// before\nparseArgs({ options: { output: { type: 'string', short: 'output' } }, args: [] }); // throws\n\n// after\nparseArgs({ options: { output: { type: 'string', short: 'o' } }, args: [] });","handlingStrategy":"validation","validationCode":"for (const [name, o] of Object.entries(options)) {\n  if (o.short !== undefined && o.short.length !== 1) {\n    throw new Error(`options.${name}.short must be a single character`);\n  }\n}\nconst { values } = parseArgs({ options, args });","typeGuard":"const validShort = (s) => s === undefined || (typeof s === 'string' && s.length === 1);","tryCatchPattern":null,"preventionTips":["Pick one-letter shorts deliberately","Validate generated CLI configs before calling parseArgs","Omit short rather than duplicating the long name"],"tags":["parse-args","cli","config-validation","node-compat"],"backgroundTag":"invalid-argument-value","analyzedSha":"9ad36f7a2cce60488e6ec52283efb32efddaf93a","analyzedAt":"2026-08-20T13:07:44.778Z","contentChangedAt":"2026-08-20T13:07:44.778Z","schemaVersion":2},"datasetVersion":"2026-09-14T00:17:10.932Z"}