bit-bin
Version:
<a href="https://opensource.org/licenses/Apache-2.0"><img alt="apache" src="https://img.shields.io/badge/License-Apache%202.0-blue.svg"></a> <a href="https://github.com/teambit/bit/blob/master/CONTRIBUTING.md"><img alt="prs" src="https://img.shields.io/b
296 lines (220 loc) • 7.1 kB
JavaScript
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.CLIProvider = CLIProvider;
exports.CLIExtension = void 0;
function _bluebird() {
const data = require("bluebird");
_bluebird = function () {
return data;
};
return data;
}
function _defineProperty2() {
const data = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
_defineProperty2 = function () {
return data;
};
return data;
}
function _commander() {
const data = _interopRequireDefault(require("commander"));
_commander = function () {
return data;
};
return data;
}
function _ramda() {
const data = require("ramda");
_ramda = function () {
return data;
};
return data;
}
function _didyoumean() {
const data = _interopRequireDefault(require("didyoumean"));
_didyoumean = function () {
return data;
};
return data;
}
function _registry() {
const data = _interopRequireDefault(require("./registry"));
_registry = function () {
return data;
};
return data;
}
function _reporter() {
const data = require("../reporter");
_reporter = function () {
return data;
};
return data;
}
function _commandRegistry() {
const data = require("../../cli/command-registry");
_commandRegistry = function () {
return data;
};
return data;
}
function _alreadyExists() {
const data = require("./exceptions/already-exists");
_alreadyExists = function () {
return data;
};
return data;
}
function _help() {
const data = require("./commands/help.cmd");
_help = function () {
return data;
};
return data;
}
function _cli() {
const data = require("../../cli");
_cli = function () {
return data;
};
return data;
}
function _extensionsLoader() {
const data = _interopRequireDefault(require("../../legacy-extensions/extensions-loader"));
_extensionsLoader = function () {
return data;
};
return data;
}
function _legacyCommandAdapter() {
const data = require("./legacy-command-adapter");
_legacyCommandAdapter = function () {
return data;
};
return data;
}
function _commandNotFound() {
const data = require("./exceptions/command-not-found");
_commandNotFound = function () {
return data;
};
return data;
}
class CLIExtension {
static provider([reporter]) {
const cli = new CLIExtension(new (_registry().default)({}), reporter);
return CLIProvider([cli]);
}
constructor(registry, reporter) {
this.registry = registry;
this.reporter = reporter;
(0, _defineProperty2().default)(this, "groups", {});
}
setDefaults(command) {
command.alias = command.alias || '';
command.description = command.description || '';
command.shortDescription = command.shortDescription || '';
command.group = command.group || 'ungrouped';
command.options = command.options || [];
command.private = command.private || false;
command.commands = command.commands || [];
if (command.loader === undefined) {
if (command.internal) {
command.loader = false;
} else {
command.loader = true;
}
}
}
/**
* registers a new command in to `Paper`.
*/
register(command) {
this.setDefaults(command); // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
command.commands.forEach(cmd => this.setDefaults(cmd));
this.registry.register(command);
}
/**
* list of all registered commands. (legacy and new).
*/
get commands() {
return this.registry.commands;
}
/**
* execute commands registered to `Paper` and the legacy bit cli.
*/
run() {
var _this = this;
return (0, _bluebird().coroutine)(function* () {
const args = process.argv.slice(2); // remove the first two arguments, they're not relevant
if (!args[0] || ['-h', '--help'].includes(args[0])) {
(0, _help().Help)()(_this.commands, _this.groups);
return;
}
const [params, packageManagerArgs] = (0, _ramda().splitWhen)((0, _ramda().equals)('--'), process.argv);
if (packageManagerArgs && packageManagerArgs.length) {
packageManagerArgs.shift(); // remove the -- delimiter
}
Object.values(_this.commands).forEach(command => (0, _commandRegistry().register)(command, _commander().default, packageManagerArgs));
_this.throwForNonExistsCommand(args[0]); // this is what runs the `execAction` of the specific command and eventually exits the process
_commander().default.parse(params);
if (_this.shouldOutputJson()) {
_this.reporter.suppressOutput();
}
})();
}
shouldOutputJson() {
const showCommand = _commander().default.commands.find(c => c._name === 'show');
return showCommand.versions;
}
throwForNonExistsCommand(commandName) {
const commands = Object.keys(this.commands);
const aliases = commands.map(c => this.commands[c].alias).filter(a => a);
const globalFlags = ['-V', '--version'];
const validCommands = [...commands, ...aliases, ...globalFlags];
const commandExist = validCommands.includes(commandName);
if (!commandExist) {
_didyoumean().default.returnFirstMatch = true;
const suggestions = (0, _didyoumean().default)(commandName, Object.keys(this.commands).filter(c => !this.commands[c].private));
const suggestion = suggestions && Array.isArray(suggestions) ? suggestions[0] : suggestions;
throw new (_commandNotFound().CommandNotFound)(commandName, suggestion);
}
}
registerGroup(name, description) {
if (this.groups[name]) {
throw new (_alreadyExists().AlreadyExistsError)('group', name);
}
this.groups[name] = description;
}
}
exports.CLIExtension = CLIExtension;
(0, _defineProperty2().default)(CLIExtension, "dependencies", [_reporter().ReporterExt]);
function CLIProvider(_x) {
return _CLIProvider.apply(this, arguments);
}
function _CLIProvider() {
_CLIProvider = (0, _bluebird().coroutine)(function* ([cliExtension]) {
const legacyExtensions = yield (0, _extensionsLoader().default)(); // Make sure to register all the hooks actions in the global hooks manager
legacyExtensions.forEach(extension => {
extension.registerHookActionsOnHooksManager();
});
const extensionsCommands = legacyExtensions.reduce((acc, curr) => {
if (curr.commands && curr.commands.length) {
// @ts-ignore AUTO-ADDED-AFTER-MIGRATION-PLEASE-FIX!
acc = acc.concat(curr.commands);
}
return acc;
}, []);
const legacyRegistry = (0, _cli().buildRegistry)(extensionsCommands);
const allCommands = legacyRegistry.commands.concat(legacyRegistry.extensionsCommands || []);
allCommands.forEach(command => {
const legacyCommandAdapter = new (_legacyCommandAdapter().LegacyCommandAdapter)(command, cliExtension);
cliExtension.register(legacyCommandAdapter);
});
return cliExtension;
});
return _CLIProvider.apply(this, arguments);
}
;