{"id":"597e757d356d9d4e","repo":"tj/commander.js","slug":"option-creation-failed-due-to-unsupportedflag-597e75","errorCode":null,"errorMessage":"option creation failed due to '${unsupportedFlag}' in option flags '${flags}'\n- too many short flags","messagePattern":"option creation failed due to '(.+?)' in option flags '(.+?)'\n- too many short flags","errorType":"exception","errorClass":"Error","httpStatus":null,"severity":"error","filePath":"lib/option.js","lineNumber":362,"sourceCode":"  // This is the supported way to have a shortish option flag.\n  if (!shortFlag && longFlagExp.test(flagParts[0])) {\n    shortFlag = longFlag;\n    longFlag = flagParts.shift();\n  }\n\n  // Check for unprocessed flag. Fail noisily rather than silently ignore.\n  if (flagParts[0].startsWith('-')) {\n    const unsupportedFlag = flagParts[0];\n    const baseError = `option creation failed due to '${unsupportedFlag}' in option flags '${flags}'`;\n    if (/^-[^-][^-]/.test(unsupportedFlag))\n      throw new Error(\n        `${baseError}\n- a short flag is a single dash and a single character\n  - either use a single dash and a single character (for a short flag)\n  - or use a double dash for a long option (and can have two, like '--ws, --workspace')`,\n      );\n    if (shortFlagExp.test(unsupportedFlag))\n      throw new Error(`${baseError}\n- too many short flags`);\n    if (longFlagExp.test(unsupportedFlag))\n      throw new Error(`${baseError}\n- too many long flags`);\n\n    throw new Error(`${baseError}\n- unrecognised flag format`);\n  }\n  if (shortFlag === undefined && longFlag === undefined)\n    throw new Error(\n      `option creation failed due to no flags found in '${flags}'.`,\n    );\n\n  return { shortFlag, longFlag };\n}\n","sourceCodeStart":344,"sourceCodeEnd":378,"githubUrl":"https://github.com/tj/commander.js/blob/ba6d13ddb4243e5913367734f8c159089ffe7834/lib/option.js#L344-L378","documentation":"Thrown by splitOptionFlags() when, after consuming the first valid short flag, another token still matches the short-flag shape /^-[^-]$/. Commander allows at most one short flag per option, so a second single-dash-single-char token is rejected as 'too many short flags'. Raised synchronously during `new Option(flags)`.","triggerScenarios":"Constructing new Option('-f, -g <value>'), new Option('-a -b'), or any flags string that lists two or more distinct short flags separated by space/comma.","commonSituations":"Trying to give an option two short aliases; merging two options into one; copy-paste that left an extra short flag; misreading the docs and assuming multiple shorts are allowed like multiple longs are.","solutions":["Keep only one short flag: new Option('-f <value>').","Express the second name as a long alias: new Option('-f, --fg <value>').","Split the behavior into two separate Option instances if both shorts are genuinely needed."],"exampleFix":"// before\nnew Option('-f, -g <value>');\n\n// after\nnew Option('-f, --fg <value>');","handlingStrategy":"validation","validationCode":"// Reuses the same rule mirror as error 23; focused check for too-many-shorts.\nfunction previewOptionFlagsError(flags) {\n  const shortFlagExp = /^-[^-]$/;\n  const longFlagExp = /^--[^-]/;\n  const flagParts = String(flags).split(/[ |,]+/).concat('guard');\n  let shortFlag, longFlag;\n  if (shortFlagExp.test(flagParts[0])) shortFlag = flagParts.shift();\n  if (longFlagExp.test(flagParts[0])) longFlag = flagParts.shift();\n  if (!shortFlag && shortFlagExp.test(flagParts[0])) shortFlag = flagParts.shift();\n  if (!shortFlag && longFlagExp.test(flagParts[0])) { shortFlag = longFlag; longFlag = flagParts.shift(); }\n  if (flagParts[0].startsWith('-')) {\n    const u = flagParts[0];\n    if (/^-[^-][^-]/.test(u)) return `short flag must be one dash + one char: '${u}'`;\n    if (shortFlagExp.test(u)) return `too many short flags: '${u}'`;\n    if (longFlagExp.test(u)) return `too many long flags: '${u}'`;\n    return `unrecognised flag format: '${u}'`;\n  }\n  if (shortFlag === undefined && longFlag === undefined) return `no flags found in '${flags}'`;\n  return null;\n}\n// Quick dedicated check for two-or-more short flags:\nfunction hasMultipleShortFlags(flags) {\n  return (String(flags).match(/(^|[, ])-[^- ](?!\\S*\\.)/g) || []).length > 1;\n}","typeGuard":null,"tryCatchPattern":null,"preventionTips":["An option may have at most one short flag; give additional names as long aliases.","Use the shared previewOptionFlagsError helper to validate generated flags.","Unit-test option construction to catch this at build time, not runtime."],"tags":["option","flags","validation","commander"],"analyzedSha":"ba6d13ddb4243e5913367734f8c159089ffe7834","analyzedAt":"2026-08-03T20:26:04.326Z","schemaVersion":2}