{"version":3,"file":"parse-args.mjs","names":[],"sources":["../../../src/common/schema/parse-args.ts"],"sourcesContent":["import type { Type } from './schema'\nimport { assert } from '../assert'\nimport { fromCamelCase, toCamelCase } from '../data/camelcase'\nimport { valueToInteger } from '../data/convert'\nimport { objectMap } from '../data/object'\nimport { schemaParseObject } from './parse-object'\nimport { isSchemaObjectFlat } from './utils'\n\ndeclare module './schema' {\n  interface TypeMeta {\n    argShort?: string\n    argDesc?: string\n  }\n}\n\n// eslint-disable-next-line node/prefer-global/process\nexport function parseSchemaArgs<T>(schema: Type<T>, args: any = process?.argv ?? {}): [T, string[]] {\n  assert(isSchemaObjectFlat(schema), 'schema should be a flat object')\n\n  const alias: Record<string, string> = {}\n  const booleanArgs: string[] = []\n\n  objectMap(schema._object!, (key, schema: Type<any>) => {\n    if (schema._meta?.argShort)\n      alias[toCamelCase(schema._meta.argShort)] = toCamelCase(key)\n    if (schema.type === 'boolean') {\n      booleanArgs.push(toCamelCase(key))\n    }\n  })\n\n  const argList = [...args]\n  let arg: string | undefined\n  const names: string[] = []\n  const argsObj: Record<string, any> = {}\n\n  // eslint-disable-next-line no-cond-assign\n  while ((arg = argList.shift())) {\n    let value: any\n    if (/^--?/.test(arg)) {\n      let key = arg.replace(/^--?/, '')\n      if (arg.includes('=')) {\n        const [name, valuePart] = key.split('=', 2)\n        key = name.trim()\n        value = valuePart.trim()\n      }\n      key = toCamelCase(key)\n      key = alias[key] ?? key\n      if (booleanArgs.includes(key)) {\n        argsObj[key] = true\n      }\n      else {\n        value = value ?? argList.shift() ?? ''\n        argsObj[key] = value\n      }\n    }\n    else {\n      names.push(arg)\n    }\n  }\n\n  const argsResult = objectMap(schema._object!, (key, schema) => {\n    let value = argsObj[toCamelCase(key)]\n    if (schema.type === 'number' && value != null) {\n      value = valueToInteger(value)\n    }\n    return schemaParseObject(schema, value)\n  }) as T\n\n  return [argsResult, names]\n}\n\nexport function helpSchemaArgs<T>(schema: Type<T>): string {\n  assert(isSchemaObjectFlat(schema), 'schema should be a flat object')\n\n  const lines: string[] = []\n\n  objectMap(schema._object!, (key, schema: Type<any>) => {\n    let s = `--${fromCamelCase(key)}`\n    if (schema._meta?.argShort)\n      s += `, -${fromCamelCase(schema._meta.argShort)}`\n    if (schema.type !== 'boolean')\n      s += `=${schema.type}`\n    lines.push(s)\n    const desc = schema._meta?.argDesc ?? schema._meta?.desc\n    if (desc)\n      lines.push(`  ${desc}`)\n  })\n\n  return lines.join('\\n')\n}\n"],"mappings":";;;;;;;;AAgBA,SAAgB,gBAAmB,QAAiB,OAAY,SAAS,QAAQ,EAAE,EAAiB;AAClG,QAAO,mBAAmB,OAAO,EAAE,iCAAiC;CAEpE,MAAM,QAAgC,EAAE;CACxC,MAAM,cAAwB,EAAE;AAEhC,WAAU,OAAO,UAAW,KAAK,WAAsB;AACrD,MAAI,OAAO,OAAO,SAChB,OAAM,YAAY,OAAO,MAAM,SAAS,IAAI,YAAY,IAAI;AAC9D,MAAI,OAAO,SAAS,UAClB,aAAY,KAAK,YAAY,IAAI,CAAC;GAEpC;CAEF,MAAM,UAAU,CAAC,GAAG,KAAK;CACzB,IAAI;CACJ,MAAM,QAAkB,EAAE;CAC1B,MAAM,UAA+B,EAAE;AAGvC,QAAQ,MAAM,QAAQ,OAAO,EAAG;EAC9B,IAAI;AACJ,MAAI,OAAO,KAAK,IAAI,EAAE;GACpB,IAAI,MAAM,IAAI,QAAQ,QAAQ,GAAG;AACjC,OAAI,IAAI,SAAS,IAAI,EAAE;IACrB,MAAM,CAAC,MAAM,aAAa,IAAI,MAAM,KAAK,EAAE;AAC3C,UAAM,KAAK,MAAM;AACjB,YAAQ,UAAU,MAAM;;AAE1B,SAAM,YAAY,IAAI;AACtB,SAAM,MAAM,QAAQ;AACpB,OAAI,YAAY,SAAS,IAAI,CAC3B,SAAQ,OAAO;QAEZ;AACH,YAAQ,SAAS,QAAQ,OAAO,IAAI;AACpC,YAAQ,OAAO;;QAIjB,OAAM,KAAK,IAAI;;AAYnB,QAAO,CARY,UAAU,OAAO,UAAW,KAAK,WAAW;EAC7D,IAAI,QAAQ,QAAQ,YAAY,IAAI;AACpC,MAAI,OAAO,SAAS,YAAY,SAAS,KACvC,SAAQ,eAAe,MAAM;AAE/B,SAAO,kBAAkB,QAAQ,MAAM;GACvC,EAEkB,MAAM;;AAG5B,SAAgB,eAAkB,QAAyB;AACzD,QAAO,mBAAmB,OAAO,EAAE,iCAAiC;CAEpE,MAAM,QAAkB,EAAE;AAE1B,WAAU,OAAO,UAAW,KAAK,WAAsB;EACrD,IAAI,IAAI,KAAK,cAAc,IAAI;AAC/B,MAAI,OAAO,OAAO,SAChB,MAAK,MAAM,cAAc,OAAO,MAAM,SAAS;AACjD,MAAI,OAAO,SAAS,UAClB,MAAK,IAAI,OAAO;AAClB,QAAM,KAAK,EAAE;EACb,MAAM,OAAO,OAAO,OAAO,WAAW,OAAO,OAAO;AACpD,MAAI,KACF,OAAM,KAAK,KAAK,OAAO;GACzB;AAEF,QAAO,MAAM,KAAK,KAAK"}