export function parseArgs()

in src/commandline.ts [123:184]


export function parseArgs(args: string[]): Arguments | null {
  const opts = {
    boolean: [
      VERBOSE_FLAG,
      PERF_LOGGING_FLAG,
      DEBUG_LOGGING_FLAG,
      SILENT_LOGGING_FLAG,
      DRY_RUN_FLAG,
      HEADERS_ONLY,
      IMPL_ONLY,
      SINGLE_FILE,
      ONE_CPU,
    ],
    string: [
      ADT_CONFIG_PATH,
      VALUE_OBJECT_CONFIG_PATH,
      OBJECT_CONFIG_PATH,
      INCLUDE,
      EXCLUDE,
      OUTPUT_PATH,
      EMIT,
    ],
    default: {[HEADERS_ONLY]: false, [IMPL_ONLY]: false},
  };
  const parsedArgs = minimist(args, opts);

  const sanitizedHeadersOnly = sanitizeBooleanArg(
    parsedArgs[HEADERS_ONLY],
    false,
  );
  const sanitizedImplsOnly = sanitizeBooleanArg(parsedArgs[IMPL_ONLY], false);

  if (parsedArgs._.length === 0) {
    return null;
  } else if (sanitizedHeadersOnly && sanitizedImplsOnly) {
    console.log(
      'Error: %s and %s cannot both be set simultaneously',
      HEADERS_ONLY,
      IMPL_ONLY,
    );
    return null;
  } else {
    return {
      givenPaths: parsedArgs._,
      adtConfigPath: parsedArgs[ADT_CONFIG_PATH],
      valueObjectConfigPath: parsedArgs[VALUE_OBJECT_CONFIG_PATH],
      objectConfigPath: parsedArgs[OBJECT_CONFIG_PATH],
      interestedLoggingTypes: interestedTypesForArgs(parsedArgs),
      minimalLevel: parsedArgs[VERBOSE_FLAG] ? 1 : 10,
      dryRun: parsedArgs[DRY_RUN_FLAG],
      outputPath: parsedArgs[OUTPUT_PATH],
      includes: sanitizeArrayArg(parsedArgs[INCLUDE]),
      excludes: sanitizeArrayArg(parsedArgs[EXCLUDE]),
      outputFlags: {
        emitHeaders: !sanitizedImplsOnly,
        emitImplementations: !sanitizedHeadersOnly,
        outputList: sanitizeEmitOption(parsedArgs[EMIT]),
        singleFile: sanitizeBooleanArg(parsedArgs[SINGLE_FILE], false),
      },
    };
  }
}