{"version":3,"file":"parse-args.cjs","names":["isSchemaObjectFlat","toCamelCase","objectMap","valueToInteger","schemaParseObject","fromCamelCase"],"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,8BAAOA,+CAAmB,OAAO,EAAE,iCAAiC;CAEpE,MAAM,QAAgC,EAAE;CACxC,MAAM,cAAwB,EAAE;AAEhC,sCAAU,OAAO,UAAW,KAAK,WAAsB;AACrD,MAAI,OAAO,OAAO,SAChB,OAAMC,0CAAY,OAAO,MAAM,SAAS,IAAIA,0CAAY,IAAI;AAC9D,MAAI,OAAO,SAAS,UAClB,aAAY,KAAKA,0CAAY,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,SAAMA,0CAAY,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,CARYC,qCAAU,OAAO,UAAW,KAAK,WAAW;EAC7D,IAAI,QAAQ,QAAQD,0CAAY,IAAI;AACpC,MAAI,OAAO,SAAS,YAAY,SAAS,KACvC,SAAQE,2CAAe,MAAM;AAE/B,SAAOC,qDAAkB,QAAQ,MAAM;GACvC,EAEkB,MAAM;;AAG5B,SAAgB,eAAkB,QAAyB;AACzD,8BAAOJ,+CAAmB,OAAO,EAAE,iCAAiC;CAEpE,MAAM,QAAkB,EAAE;AAE1B,sCAAU,OAAO,UAAW,KAAK,WAAsB;EACrD,IAAI,IAAI,KAAKK,4CAAc,IAAI;AAC/B,MAAI,OAAO,OAAO,SAChB,MAAK,MAAMA,4CAAc,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"}