{"version":3,"file":"cli-option-groups.cjs","names":[],"sources":["../../src/lib/cli-option-groups.ts"],"sourcesContent":["import { InternalOptionConfig } from '@cli-forge/parser';\nimport { AnyInternalCLI } from './internal-cli';\n\nexport function readOptionGroupsForCLI(parentCLI: AnyInternalCLI) {\n  function registerGroupsFromCLI(cli: AnyInternalCLI) {\n    for (const { label, keys, sortOrder } of cli.registeredOptionGroups) {\n      groups[label] ??= {\n        keys: new Set(),\n        sortOrder: Number.MAX_SAFE_INTEGER,\n      };\n      if (sortOrder) {\n        groups[label].sortOrder = sortOrder;\n      }\n      for (const key of keys) {\n        groups[label].keys.add(key);\n      }\n    }\n  }\n\n  const groups: Record<string, { keys: Set<string>; sortOrder: number }> = {};\n   \n  let command: AnyInternalCLI = parentCLI;\n  registerGroupsFromCLI(command);\n  for (const subcommand of parentCLI.commandChain) {\n    command = command?.registeredCommands[subcommand];\n    registerGroupsFromCLI(command);\n  }\n  const parserOptions: Record<string, InternalOptionConfig> =\n    parentCLI.parser.configuredOptions;\n\n  for (const key in parserOptions) {\n    const option = parserOptions[key];\n    if (option.group) {\n      groups[option.group] ??= {\n        keys: new Set(),\n        sortOrder: Number.MAX_SAFE_INTEGER,\n      };\n      groups[option.group].keys.add(key);\n    }\n  }\n\n  const groupedOptions: Array<{\n    label: string;\n    sortOrder: number;\n    keys: Array<InternalOptionConfig>;\n  }> = [];\n\n  for (const label in groups) {\n    const entry = {\n      sortOrder: groups[label].sortOrder,\n      keys: [] as InternalOptionConfig[],\n      label,\n    };\n    for (const key of groups[label].keys) {\n      const option = parserOptions[key];\n      entry.keys.push(option);\n      delete parserOptions[key];\n    }\n    groupedOptions.push(entry);\n  }\n  groupedOptions.sort((a, b) => {\n    if (a.sortOrder === b.sortOrder) {\n      return a.label.localeCompare(b.label);\n    } else {\n      return a.sortOrder - b.sortOrder;\n    }\n  });\n  return groupedOptions;\n}\n"],"mappings":";;AAGA,SAAgB,uBAAuB,WAA2B;CAChE,SAAS,sBAAsB,KAAqB;AAClD,OAAK,MAAM,EAAE,OAAO,MAAM,eAAe,IAAI,wBAAwB;AACnE,UAAO,WAAW;IAChB,sBAAM,IAAI,KAAK;IACf,WAAW,OAAO;IACnB;AACD,OAAI,UACF,QAAO,OAAO,YAAY;AAE5B,QAAK,MAAM,OAAO,KAChB,QAAO,OAAO,KAAK,IAAI,IAAI;;;CAKjC,MAAM,SAAmE,EAAE;CAE3E,IAAI,UAA0B;AAC9B,uBAAsB,QAAQ;AAC9B,MAAK,MAAM,cAAc,UAAU,cAAc;AAC/C,YAAU,SAAS,mBAAmB;AACtC,wBAAsB,QAAQ;;CAEhC,MAAM,gBACJ,UAAU,OAAO;AAEnB,MAAK,MAAM,OAAO,eAAe;EAC/B,MAAM,SAAS,cAAc;AAC7B,MAAI,OAAO,OAAO;AAChB,UAAO,OAAO,WAAW;IACvB,sBAAM,IAAI,KAAK;IACf,WAAW,OAAO;IACnB;AACD,UAAO,OAAO,OAAO,KAAK,IAAI,IAAI;;;CAItC,MAAM,iBAID,EAAE;AAEP,MAAK,MAAM,SAAS,QAAQ;EAC1B,MAAM,QAAQ;GACZ,WAAW,OAAO,OAAO;GACzB,MAAM,EAAE;GACR;GACD;AACD,OAAK,MAAM,OAAO,OAAO,OAAO,MAAM;GACpC,MAAM,SAAS,cAAc;AAC7B,SAAM,KAAK,KAAK,OAAO;AACvB,UAAO,cAAc;;AAEvB,iBAAe,KAAK,MAAM;;AAE5B,gBAAe,MAAM,GAAG,MAAM;AAC5B,MAAI,EAAE,cAAc,EAAE,UACpB,QAAO,EAAE,MAAM,cAAc,EAAE,MAAM;MAErC,QAAO,EAAE,YAAY,EAAE;GAEzB;AACF,QAAO"}