assertRequiredOptions.js 990 Bytes
/**
 * Copyright (c) 2015-present, Facebook, Inc.
 * All rights reserved.
 *
 * This source code is licensed under the BSD-style license found in the
 * LICENSE file in the root directory of this source tree. An additional grant
 * of patent rights can be found in the PATENTS file in the same directory.
 */
'use strict';

const { Option } = require('commander');
const { camelCase } = require('lodash');

// Commander.js has a 2 years old open issue to support <...> syntax
// for options. Until that gets merged, we run the checks manually
// https://github.com/tj/commander.js/issues/230
module.exports = function assertRequiredOptions(options, passedOptions) {
  options.forEach(opt => {
    const option = new Option(opt.command);

    if (!option.required) {
      return;
    }

    const name = camelCase(option.long);

    if (!passedOptions[name]) {
      // Provide commander.js like error message
      throw new Error(`error: option '${option.long}' missing`);
    }
  });
};