function parseArguments()

in eng/tools/typespec-migration-validation/src/index.ts [11:61]


function parseArguments() {
  return yargs(hideBin(process.argv))
    .usage('Usage: $0 [options]')
    .example('$0 --oldPath ./old-spec-folder --newPath ./new-spec-file', 'Compare two swagger specs')
    .example('$0 oldSpecPath newSpecPath', 'Compare using positional arguments')
    .option('oldPath', {
      alias: 'o',
      describe: 'Path to old/original Swagger specification folder',
      type: 'string',
    })
    .option('newPath', {
      alias: 'n',
      describe: 'Path to new/updated Swagger specification file',
      type: 'string',
    })
    .option('outputFolder', {
      alias: 'out',
      describe: 'Output folder for analysis results',
      type: 'string',
    })
    .check((argv) => {
      const positional = argv._;
      if (!argv.oldPath && positional.length > 0) {
        argv.oldPath = positional[0]!.toString();
      }
      if (!argv.newPath && positional.length > 1) {
        argv.newPath = positional[1]!.toString();
      }
      if (!argv.outputFolder && positional.length > 2) {
        argv.outputFolder = positional[2]!.toString();
      }

      if (!argv.oldPath || !argv.newPath) {
        throw new Error('Both oldPath and newPath are required');
      }
      
      // Verify paths exist
      if (!fs.existsSync(argv.oldPath)) {
        throw new Error(`oldPath does not exist: ${argv.oldPath}`);
      }
      
      if (!fs.existsSync(argv.newPath)) {
        throw new Error(`newPath does not exist: ${argv.newPath}`);
      }
      
      return true;
    })
    .help()
    .alias('help', 'h')
    .parseSync();
}