{"version":3,"sources":["../src/index.ts"],"sourcesContent":["import yargs from \"yargs-parser\";\n\nimport Debug from \"debug\";\n\nconst debug = Debug(\"libargs\");\n\nimport { runCommand } from \"./run\";\nimport { printHelp } from \"./util\";\n\nimport type { PrintTable } from \"./util\";\n\nexport * as colors from \"kleur/colors\";\n\n/** Determine which command the user requested */\nfunction resolveCommand(\n  commands: CliConfig[\"commands\"],\n  flags: yargs.Arguments\n) {\n  const clonedCommands = { ...commands };\n  const cmdKeys = new Set(Object.keys(clonedCommands));\n  const cmdAlias = new Set(Object.values(clonedCommands).map((it) => it.alias));\n\n  // console.dir(\"clonedCommands\");\n  // console.dir(clonedCommands);\n  const cmd = flags._[2] as string;\n  if (flags.version) return \"version\";\n\n  if (!cmd) return \"help\";\n\n  if (cmdKeys.has(cmd)) {\n    return cmd;\n  }\n  if (cmdAlias.has(cmd)) {\n    // 根据alias查找cmd\n    return Object.entries(clonedCommands)\n      .map(([k, v]) => ({ ...v, cmdKey: k }))\n      .find((it) => it.alias === cmd).cmdKey;\n  }\n  return \"help\";\n}\n\nexport async function throwAndExit(cmd: string, err: unknown) {\n  throw err;\n}\n\n// 定义命令标志的类型\ninterface CommandFlags {\n  [flag: string]: string;\n}\n\n// 定义命令的类型\ninterface Command {\n  name?: string;\n  desc: string;\n  show?: string;\n  dir?: string;\n  usage?: string;\n  fnName?: string;\n  file?: string;\n  flags?: CommandFlags;\n  alias?: string;\n}\n\n// 定义commands的类型\ninterface Commands {\n  [commandName: string]: Command;\n}\n\n// 定义flags的类型\ninterface Flags {\n  [flag: string]: string;\n}\n\n// 定义整个对象的类型\nexport interface CliConfig {\n  name?: string;\n  version?: string;\n  desc: string;\n  usage?: string;\n  dir: string;\n  commands?: Commands;\n  flags?: Flags;\n}\n\n/** The primary CLI action */\nexport async function cli(cfg: CliConfig, args: string[]) {\n  debug(cfg);\n  const flags = yargs(args, { boolean: [\"global\"], alias: { g: \"global\" } });\n  // console.log(\"🚀 ~ cli ~ flags:\", flags)\n  // const cfg = arguments.callee.cfg;\n  // const supportedCommands = new Set(Object.keys(cfg.commands));\n  // console.log(\"🚀 ~ cli ~ supportedCommands:\", supportedCommands)\n  // console.dir(cfg.commands[cmd]);\n  const cmds: [string, string][] = Object.keys(cfg.commands).map((cmd) => {\n    return [\n      cfg.commands[cmd][\"alias\"] ? `${cfg.commands[cmd][\"alias\"]},${cmd}` : cmd,\n      cfg.commands[cmd][\"desc\"],\n    ];\n  });\n\n  const flag: [string, string][] = Object.keys(cfg.flags).map(function (f) {\n    return [f, cfg.flags[f]];\n  });\n\n  const table: PrintTable = {\n    Commands: cmds,\n    \"Global Flags\": flag,\n  };\n\n  const cmd = resolveCommand(cfg.commands, flags);\n\n  try {\n    if (cmd == \"help\") {\n      printHelp({\n        version: cfg?.version,\n        commandName: cfg.name,\n        usage: cfg.usage || \"[command] [...flags]\",\n        headline: cfg.desc,\n        tables: {\n          Commands: cmds,\n          \"Global Flags\": flag,\n        },\n      });\n      return;\n    } else {\n      flags._ = flags._.slice(3);\n\n      cfg.commands[cmd].name = cmd;\n      cfg.commands[cmd].show = `${cfg.name} ${cmd}`;\n      cfg.commands[cmd].dir = cfg.dir;\n      cfg.commands[cmd][\"input\"] = flags;\n      debug(cfg.commands[cmd]);\n      await runCommand(cfg.commands[cmd]);\n    }\n  } catch (err) {\n    await throwAndExit(cmd, err);\n  }\n}\n"],"mappings":"+GAAA,OAAOA,MAAW,eAElB,OAAOC,MAAW,QASlB,UAAYC,MAAY,eAPxB,IAAMC,EAAQC,EAAM,SAAS,EAU7B,SAASC,EACPC,EACAC,EACA,CACA,IAAMC,EAAiB,CAAE,GAAGF,CAAS,EAC/BG,EAAU,IAAI,IAAI,OAAO,KAAKD,CAAc,CAAC,EAC7CE,EAAW,IAAI,IAAI,OAAO,OAAOF,CAAc,EAAE,IAAKG,GAAOA,EAAG,KAAK,CAAC,EAItEC,EAAML,EAAM,EAAE,CAAC,EACrB,OAAIA,EAAM,QAAgB,UAErBK,EAEDH,EAAQ,IAAIG,CAAG,EACVA,EAELF,EAAS,IAAIE,CAAG,EAEX,OAAO,QAAQJ,CAAc,EACjC,IAAI,CAAC,CAACK,EAAGC,CAAC,KAAO,CAAE,GAAGA,EAAG,OAAQD,CAAE,EAAE,EACrC,KAAMF,GAAOA,EAAG,QAAUC,CAAG,EAAE,OAE7B,OAXU,MAYnB,CAEA,eAAsBG,EAAaH,EAAaI,EAAc,CAC5D,MAAMA,CACR,CA0CA,eAAsBC,EAAIC,EAAgBC,EAAgB,CACxDhB,EAAMe,CAAG,EACT,IAAMX,EAAQa,EAAMD,EAAM,CAAE,QAAS,CAAC,QAAQ,EAAG,MAAO,CAAE,EAAG,QAAS,CAAE,CAAC,EAMnEE,EAA2B,OAAO,KAAKH,EAAI,QAAQ,EAAE,IAAKN,GACvD,CACLM,EAAI,SAASN,CAAG,EAAE,MAAW,GAAGM,EAAI,SAASN,CAAG,EAAE,KAAQ,IAAIA,CAAG,GAAKA,EACtEM,EAAI,SAASN,CAAG,EAAE,IACpB,CACD,EAEKU,EAA2B,OAAO,KAAKJ,EAAI,KAAK,EAAE,IAAI,SAAUK,EAAG,CACvE,MAAO,CAACA,EAAGL,EAAI,MAAMK,CAAC,CAAC,CACzB,CAAC,EAEKC,EAAoB,CACxB,SAAUH,EACV,eAAgBC,CAClB,EAEMV,EAAMP,EAAea,EAAI,SAAUX,CAAK,EAE9C,GAAI,CACF,GAAIK,GAAO,OAAQ,CACjBa,EAAU,CACR,QAASP,GAAK,QACd,YAAaA,EAAI,KACjB,MAAOA,EAAI,OAAS,uBACpB,SAAUA,EAAI,KACd,OAAQ,CACN,SAAUG,EACV,eAAgBC,CAClB,CACF,CAAC,EACD,MACF,MACEf,EAAM,EAAIA,EAAM,EAAE,MAAM,CAAC,EAEzBW,EAAI,SAASN,CAAG,EAAE,KAAOA,EACzBM,EAAI,SAASN,CAAG,EAAE,KAAO,GAAGM,EAAI,IAAI,IAAIN,CAAG,GAC3CM,EAAI,SAASN,CAAG,EAAE,IAAMM,EAAI,IAC5BA,EAAI,SAASN,CAAG,EAAE,MAAWL,EAC7BJ,EAAMe,EAAI,SAASN,CAAG,CAAC,EACvB,MAAMc,EAAWR,EAAI,SAASN,CAAG,CAAC,CAEtC,OAASI,EAAK,CACZ,MAAMD,EAAaH,EAAKI,CAAG,CAC7B,CACF","names":["yargs","Debug","colors","debug","Debug","resolveCommand","commands","flags","clonedCommands","cmdKeys","cmdAlias","it","cmd","k","v","throwAndExit","err","cli","cfg","args","yargs","cmds","flag","f","table","printHelp","runCommand"]}