{
  "version": 3,
  "sources": ["../../../../src/packages/plugin-commands-completion/getOptionType.ts"],
  "sourcesContent": ["import nopt from '@pnpm/nopt';\nimport omit from 'ramda/src/omit';\n\nexport type CompletionCtx = {\n  last: string;\n  lastPartial: string;\n  line: string;\n  partial: string;\n  point: number;\n  prev: string;\n  words: number;\n};\n\nexport function getOptionCompletions(\n  optionTypes: Record<string, unknown>,\n  shorthands: Record<string, string | string[]>,\n  option: string\n): string[] | undefined {\n  const optionType = getOptionType(optionTypes, shorthands, option);\n\n  return optionTypeToCompletion(optionType);\n}\n\nfunction optionTypeToCompletion(optionType: unknown): undefined | string[] {\n  switch (optionType) {\n    // In this case the option is complete\n    case undefined:\n    case Boolean: {\n      return undefined;\n    }\n    // In this case, anything may be the option value\n    case String:\n    case Number: {\n      return [];\n    }\n  }\n\n  if (!Array.isArray(optionType)) return [];\n\n  if (optionType.length === 1) {\n    return optionTypeToCompletion(optionType);\n  }\n\n  return optionType.filter((ot) => typeof ot === 'string');\n}\n\nfunction getOptionType(\n  optionTypes: Record<string, unknown>,\n  shorthands: Record<string, string | string[]>,\n  option: string\n): unknown {\n  const allBools = Object.fromEntries(\n    Object.keys(optionTypes).map((optionName) => [optionName, Boolean])\n  );\n\n  const result = omit.default(\n    ['argv'],\n    nopt(allBools, shorthands, [option], 0)\n  );\n\n  return optionTypes[Object.entries(result)[0]?.[0] ?? ''];\n}\n\nexport function getLastOption(completionCtx: CompletionCtx): string | null {\n  if (isOption(completionCtx.prev)) {\n    return completionCtx.prev;\n  }\n\n  if (completionCtx.lastPartial === '' || completionCtx.words <= 1) {\n    return null;\n  }\n\n  const words = completionCtx.line\n    .slice(0, completionCtx.point)\n    .trim()\n    .split(/\\s+/);\n\n  const lastWord = words[words.length - 2];\n\n  if (typeof lastWord !== 'string') {\n    return null;\n  }\n\n  return isOption(lastWord) ? lastWord : null;\n}\n\nfunction isOption(word: string): boolean {\n  return (\n    (word.startsWith('--') && word.length >= 3) ||\n    (word.startsWith('-') && word.length >= 2)\n  );\n}\n\nexport function currentTypedWordType(\n  completionCtx: CompletionCtx\n): 'option' | 'value' | null {\n  if (completionCtx.partial.endsWith(' ')) return null;\n  return completionCtx.lastPartial.startsWith('-') ? 'option' : 'value';\n}\n"],
  "mappings": "AAAA,OAAO,UAAU;AACjB,OAAO,UAAU;AAYV,SAAS,qBACd,aACA,YACA,QACsB;AACtB,QAAM,aAAa,cAAc,aAAa,YAAY,MAAM;AAEhE,SAAO,uBAAuB,UAAU;AAC1C;AAEA,SAAS,uBAAuB,YAA2C;AACzE,UAAQ,YAAY;AAAA;AAAA,IAElB,KAAK;AAAA,IACL,KAAK,SAAS;AACZ,aAAO;AAAA,IACT;AAAA;AAAA,IAEA,KAAK;AAAA,IACL,KAAK,QAAQ;AACX,aAAO,CAAC;AAAA,IACV;AAAA,EACF;AAEA,MAAI,CAAC,MAAM,QAAQ,UAAU,EAAG,QAAO,CAAC;AAExC,MAAI,WAAW,WAAW,GAAG;AAC3B,WAAO,uBAAuB,UAAU;AAAA,EAC1C;AAEA,SAAO,WAAW,OAAO,CAAC,OAAO,OAAO,OAAO,QAAQ;AACzD;AAEA,SAAS,cACP,aACA,YACA,QACS;AACT,QAAM,WAAW,OAAO;AAAA,IACtB,OAAO,KAAK,WAAW,EAAE,IAAI,CAAC,eAAe,CAAC,YAAY,OAAO,CAAC;AAAA,EACpE;AAEA,QAAM,SAAS,KAAK;AAAA,IAClB,CAAC,MAAM;AAAA,IACP,KAAK,UAAU,YAAY,CAAC,MAAM,GAAG,CAAC;AAAA,EACxC;AAEA,SAAO,YAAY,OAAO,QAAQ,MAAM,EAAE,CAAC,IAAI,CAAC,KAAK,EAAE;AACzD;AAEO,SAAS,cAAc,eAA6C;AACzE,MAAI,SAAS,cAAc,IAAI,GAAG;AAChC,WAAO,cAAc;AAAA,EACvB;AAEA,MAAI,cAAc,gBAAgB,MAAM,cAAc,SAAS,GAAG;AAChE,WAAO;AAAA,EACT;AAEA,QAAM,QAAQ,cAAc,KACzB,MAAM,GAAG,cAAc,KAAK,EAC5B,KAAK,EACL,MAAM,KAAK;AAEd,QAAM,WAAW,MAAM,MAAM,SAAS,CAAC;AAEvC,MAAI,OAAO,aAAa,UAAU;AAChC,WAAO;AAAA,EACT;AAEA,SAAO,SAAS,QAAQ,IAAI,WAAW;AACzC;AAEA,SAAS,SAAS,MAAuB;AACvC,SACG,KAAK,WAAW,IAAI,KAAK,KAAK,UAAU,KACxC,KAAK,WAAW,GAAG,KAAK,KAAK,UAAU;AAE5C;AAEO,SAAS,qBACd,eAC2B;AAC3B,MAAI,cAAc,QAAQ,SAAS,GAAG,EAAG,QAAO;AAChD,SAAO,cAAc,YAAY,WAAW,GAAG,IAAI,WAAW;AAChE;",
  "names": []
}
