UNPKG

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

267 lines (207 loc) 10.3 kB
"use strict"; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); Object.defineProperty(exports, "__esModule", { value: true }); exports.default = void 0; function _defineProperty2() { const data = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty")); _defineProperty2 = function () { return data; }; return data; } function _ramda() { const data = _interopRequireDefault(require("ramda")); _ramda = function () { return data; }; return data; } function _chalk() { const data = _interopRequireDefault(require("chalk")); _chalk = function () { return data; }; return data; } function _consumer() { const data = require("../../../api/consumer"); _consumer = function () { return data; }; return data; } function _utils() { const data = require("../../../utils"); _utils = function () { return data; }; return data; } function _chalkBox() { const data = require("../../chalk-box"); _chalkBox = function () { return data; }; return data; } function _generalError() { const data = _interopRequireDefault(require("../../../error/general-error")); _generalError = function () { return data; }; return data; } function _constants() { const data = require("../../../constants"); _constants = function () { return data; }; return data; } function _mergeVersion() { const data = require("../../../consumer/versions-ops/merge-version/merge-version"); _mergeVersion = function () { return data; }; return data; } function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; } function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { (0, _defineProperty2().default)(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; } class Import { constructor() { (0, _defineProperty2().default)(this, "name", 'import [ids...]'); (0, _defineProperty2().default)(this, "description", `import components into your current workspace. https://${_constants().BASE_DOCS_DOMAIN}/docs/sourcing-components ${(0, _constants().WILDCARD_HELP)('import')}`); (0, _defineProperty2().default)(this, "alias", 'i'); (0, _defineProperty2().default)(this, "opts", [['t', 'tester', 'import a tester environment component'], ['c', 'compiler', 'import a compiler environment component'], ['e', 'environment', 'install development environment dependencies (compiler and tester)'], ['p', 'path <path>', 'import components into a specific directory'], ['o', 'objects', "import components objects only, don't write the components to the file system. This is a default behavior for import with no id"], ['d', 'display-dependencies', 'display the imported dependencies'], ['O', 'override', 'override local changes'], ['v', 'verbose', 'showing verbose output for inspection'], ['j', 'json', 'return the output as JSON'], ['', 'ignore-dist', "skip writing the component's build files during import"], ['', 'conf [path]', 'write the configuration file (bit.json) and the envs configuration files (use --conf without path to write to the default dir)'], ['', 'skip-npm-install', 'do not install packages of the imported components. (it automatically enables save-dependencies-as-components flag)'], ['', 'ignore-package-json', 'do not generate package.json for the imported component(s). (it automatically enables skip-npm-install and save-dependencies-as-components flags)'], ['m', 'merge [strategy]', 'merge local changes with the imported version. strategy should be "theirs", "ours" or "manual"'], ['', 'dependencies', 'EXPERIMENTAL. import all dependencies and write them to the workspace'], ['', 'dependents', 'EXPERIMENTAL. import component dependents to allow auto-tag updating them upon tag']]); (0, _defineProperty2().default)(this, "loader", true); (0, _defineProperty2().default)(this, "migration", true); (0, _defineProperty2().default)(this, "remoteOp", true); } action([ids], { tester = false, compiler = false, path, objects = false, displayDependencies = false, environment = false, override = false, verbose = false, json = false, ignoreDist = false, conf, skipNpmInstall = false, ignorePackageJson = false, merge, dependencies = false, dependents = false }, packageManagerArgs) { if (tester && compiler) { throw new (_generalError().default)('you cant use tester and compiler flags combined'); } if (objects && merge) { throw new (_generalError().default)('you cant use --objects and --merge flags combined'); } if (override && merge) { throw new (_generalError().default)('you cant use --override and --merge flags combined'); } let mergeStrategy; if (merge && _ramda().default.is(String, merge)) { const options = Object.keys(_mergeVersion().MergeOptions); if (!options.includes(merge)) { throw new (_generalError().default)(`merge must be one of the following: ${options.join(', ')}`); } mergeStrategy = merge; } const environmentOptions = { tester, compiler }; const importOptions = { ids, verbose, merge: !!merge, mergeStrategy, writeToPath: path, objectsOnly: objects, withEnvironments: environment, override, writeDists: !ignoreDist, writeConfig: !!conf, installNpmPackages: !skipNpmInstall, writePackageJson: !ignorePackageJson, importDependenciesDirectly: dependencies, importDependents: dependents }; return (0, _consumer().importAction)(environmentOptions, importOptions, packageManagerArgs).then(importResults => _objectSpread({ displayDependencies, json }, importResults)); } report({ dependencies, envComponents, importDetails, warnings, displayDependencies, json }) { if (json) { return JSON.stringify({ importDetails, warnings }, null, 4); } let dependenciesOutput; let envComponentsOutput; if (dependencies && !_ramda().default.isEmpty(dependencies)) { const components = dependencies.map(_ramda().default.prop('component')); const peerDependencies = _ramda().default.flatten(dependencies.map(_ramda().default.prop('dependencies')), dependencies.map(_ramda().default.prop('devDependencies'))); const title = components.length === 1 ? 'successfully imported one component' : `successfully imported ${components.length} components`; const componentDependencies = components.map(component => { // @ts-ignore AUTO-ADDED-AFTER-MIGRATION-PLEASE-FIX! const details = importDetails.find(c => c.id === component.id.toStringWithoutVersion()); // @ts-ignore AUTO-ADDED-AFTER-MIGRATION-PLEASE-FIX! if (!details) throw new Error(`missing details of component ${component.id.toString()}`); // @ts-ignore AUTO-ADDED-AFTER-MIGRATION-PLEASE-FIX! return (0, _chalkBox().formatPlainComponentItemWithVersions)(component, details); }); const componentDependenciesOutput = [_chalk().default.green(title)].concat(componentDependencies).join('\n'); const peerDependenciesOutput = peerDependencies && !_ramda().default.isEmpty(peerDependencies) && displayDependencies ? (0, _utils().immutableUnshift)(_ramda().default.uniq(peerDependencies.map(_chalkBox().formatPlainComponentItem)), _chalk().default.green(`\n\nsuccessfully imported ${components.length} component dependencies`)).join('\n') : ''; dependenciesOutput = componentDependenciesOutput + peerDependenciesOutput; } if (envComponents && !_ramda().default.isEmpty(envComponents)) { envComponentsOutput = (0, _utils().immutableUnshift)( // @ts-ignore AUTO-ADDED-AFTER-MIGRATION-PLEASE-FIX! envComponents.map(envDependency => (0, _chalkBox().formatPlainComponentItem)(envDependency.component)), _chalk().default.green('the following component environments were installed')).join('\n'); } const getImportOutput = () => { if (dependenciesOutput && !envComponentsOutput) return dependenciesOutput; if (!dependenciesOutput && envComponentsOutput) return envComponentsOutput; if (dependenciesOutput && envComponentsOutput) { return `${dependenciesOutput}\n\n${envComponentsOutput}`; } return _chalk().default.yellow('nothing to import'); }; const logObject = obj => `> ${_ramda().default.keys(obj)[0]}: ${_ramda().default.values(obj)[0]}`; const getWarningOutput = () => { if (!warnings) return ''; let output = '\n'; if (!_ramda().default.isEmpty(warnings.notInBoth)) { output += _chalk().default.red.underline('\nerror - missing the following package dependencies. please install and add to package.json.\n'); output += _chalk().default.red(`${warnings.notInBoth.map(logObject).join('\n')}\n`); } if (!_ramda().default.isEmpty(warnings.notInPackageJson)) { output += _chalk().default.yellow.underline('\nwarning - add the following packages to package.json\n'); output += _chalk().default.yellow(`${warnings.notInPackageJson.map(logObject).join('\n')}\n`); } if (!_ramda().default.isEmpty(warnings.notInNodeModules)) { output += _chalk().default.yellow.underline('\nwarning - following packages are not installed. please install them.\n'); output += _chalk().default.yellow(`${warnings.notInNodeModules.map(logObject).join('\n')}\n`); } return output === '\n' ? '' : output; }; return getImportOutput() + getWarningOutput(); } } exports.default = Import;