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
365 lines (269 loc) • 9.72 kB
JavaScript
var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard");
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = void 0;
function _bluebird() {
const data = require("bluebird");
_bluebird = function () {
return data;
};
return data;
}
function _fsExtra() {
const data = _interopRequireDefault(require("fs-extra"));
_fsExtra = function () {
return data;
};
return data;
}
function _glob() {
const data = _interopRequireDefault(require("glob"));
_glob = function () {
return data;
};
return data;
}
function _ramda() {
const data = _interopRequireDefault(require("ramda"));
_ramda = function () {
return data;
};
return data;
}
function path() {
const data = _interopRequireWildcard(require("path"));
path = function () {
return data;
};
return data;
}
function _semver() {
const data = _interopRequireDefault(require("semver"));
_semver = function () {
return data;
};
return data;
}
function _consumer() {
const data = require("../../../consumer");
_consumer = function () {
return data;
};
return data;
}
function _loader() {
const data = _interopRequireDefault(require("../../../cli/loader"));
_loader = function () {
return data;
};
return data;
}
function _loaderMessages() {
const data = require("../../../cli/loader/loader-messages");
_loaderMessages = function () {
return data;
};
return data;
}
function _flattenDependencies() {
const data = require("../../../scope/flatten-dependencies");
_flattenDependencies = function () {
return data;
};
return data;
}
function _bitId() {
const data = require("../../../bit-id");
_bitId = function () {
return data;
};
return data;
}
function _analytics() {
const data = require("../../../analytics/analytics");
_analytics = function () {
return data;
};
return data;
}
function _generalError() {
const data = _interopRequireDefault(require("../../../error/general-error"));
_generalError = function () {
return data;
};
return data;
}
function _importComponents() {
const data = _interopRequireDefault(require("../../../consumer/component-ops/import-components"));
_importComponents = function () {
return data;
};
return data;
}
const key = _ramda().default.compose(_ramda().default.head, _ramda().default.keys);
var _default = /*#__PURE__*/function () {
var _importAction = (0, _bluebird().coroutine)(function* (environmentOptions, importOptions, packageManagerArgs) {
function importEnvironment(_x4) {
return _importEnvironment.apply(this, arguments);
}
function _importEnvironment() {
_importEnvironment = (0, _bluebird().coroutine)(function* (consumer) {
_loader().default.start(_loaderMessages().BEFORE_IMPORT_ENVIRONMENT);
if (!importOptions.ids.length) throw new (_generalError().default)('you must specify component id for importing an environment');
const idToImport = importOptions.ids[0];
const bitIdToImport = _bitId().BitId.parse(idToImport, true); // import without id is not supported
const envComponents = yield consumer.importEnvironment(bitIdToImport, importOptions.verbose, true);
if (!envComponents.length) throw new (_generalError().default)(`the environment component ${idToImport} is installed already`);
const id = envComponents[0].component.id.toString();
function writeConfigIfNeeded() {
return _writeConfigIfNeeded.apply(this, arguments);
}
function _writeConfigIfNeeded() {
_writeConfigIfNeeded = (0, _bluebird().coroutine)(function* () {
if (environmentOptions.compiler) {
consumer.config._setCompiler(id);
_analytics().Analytics.setExtraData('build_env', id);
const res = consumer.config.write({
workspaceDir: consumer.getPath()
});
return res;
}
if (environmentOptions.tester) {
consumer.config._setTester(id);
_analytics().Analytics.setExtraData('test_env', id);
return consumer.config.write({
workspaceDir: consumer.getPath()
});
}
return Promise.resolve(true);
});
return _writeConfigIfNeeded.apply(this, arguments);
}
yield writeConfigIfNeeded();
return {
envComponents
};
});
return _importEnvironment.apply(this, arguments);
}
const consumer = yield (0, _consumer().loadConsumer)();
consumer.packageManagerArgs = packageManagerArgs;
if (environmentOptions.tester || environmentOptions.compiler) {
return importEnvironment(consumer);
}
const importComponents = new (_importComponents().default)(consumer, importOptions);
const {
dependencies,
envComponents,
importDetails
} = yield importComponents.importComponents();
const bitIds = dependencies.map(_ramda().default.path(['component', 'id']));
const warnings = yield warnForPackageDependencies({
dependencies: (0, _flattenDependencies().flattenDependencies)(dependencies),
// @ts-ignore AUTO-ADDED-AFTER-MIGRATION-PLEASE-FIX!
envComponents,
consumer,
installNpmPackages: importOptions.installNpmPackages
});
_analytics().Analytics.setExtraData('num_components', bitIds.length);
yield consumer.onDestroy();
return {
dependencies,
envComponents,
importDetails,
warnings
};
});
function importAction(_x, _x2, _x3) {
return _importAction.apply(this, arguments);
}
return importAction;
}(); // TODO: refactor to better use of semver
// TODO: move to bit-javascript
exports.default = _default;
const getSemverType = str => {
if (_semver().default.valid(str)) return 'V'; // VALID_VERSION
if (_semver().default.validRange(str)) return 'R'; // RANGE_VERSIONS
return null;
}; // TODO: refactor to better use of semver
// TODO: move to bit-javascript
function compatibleWith(a, b) {
const depName = key(a);
if (!b[depName]) return false; // dependency does not exist - return false
const bVersion = b[depName];
const aVersion = a[depName];
const aType = getSemverType(aVersion);
const bType = getSemverType(bVersion);
if (!aType || !bType) return false; // in case one of the versions is invalid - return false
if (aType === 'V' && bType === 'V') {
return _semver().default.eq(aVersion, bVersion);
}
if (aType === 'V' && bType === 'R') {
return _semver().default.satisfies(aVersion, bVersion);
}
if (aType === 'R' && bType === 'V') {
return _semver().default.satisfies(bVersion, aVersion);
}
if (aType === 'R' && bType === 'R') {
if (aVersion.startsWith('^') && bVersion.startsWith('^')) {
const aMajorVersion = parseInt(aVersion[1], 10);
const bMajorVersion = parseInt(bVersion[1], 10);
if (aMajorVersion === bMajorVersion) return true;
}
}
return false;
} // TODO: refactor to better use of semver
// TODO: move to bit-javascript
function warnForPackageDependencies({
dependencies,
consumer,
installNpmPackages
}) {
const warnings = {
notInPackageJson: [],
notInNodeModules: [],
notInBoth: []
};
if (installNpmPackages) return Promise.resolve(warnings);
const projectDir = consumer.getPath();
const getPackageJson = dir => {
try {
return _fsExtra().default.readJSONSync(path().join(dir, 'package.json'));
} catch (e) {
return {};
} // do we want to inform the use that he has no package.json
};
const packageJson = getPackageJson(projectDir);
const packageJsonDependencies = _ramda().default.merge(packageJson.dependencies || {}, packageJson.devDependencies || {});
const getNameAndVersion = pj => ({
[pj.name]: pj.version
});
const nodeModules = _ramda().default.mergeAll(_glob().default.sync(path().join(projectDir, 'node_modules', '*')).map(_ramda().default.compose(getNameAndVersion, getPackageJson))); // eslint-disable-next-line
dependencies.forEach(dep => {
if (!dep.packageDependencies || _ramda().default.isEmpty(dep.packageDependencies)) return null;
_ramda().default.forEachObjIndexed((packageDepVersion, packageDepName) => {
const packageDep = {
[packageDepName]: packageDepVersion
};
const compatibleWithPackgeJson = compatibleWith(packageDep, packageJsonDependencies);
const compatibleWithNodeModules = compatibleWith(packageDep, nodeModules);
if (!compatibleWithPackgeJson && !compatibleWithNodeModules && !_ramda().default.contains(packageDep, warnings.notInBoth)) {
// @ts-ignore AUTO-ADDED-AFTER-MIGRATION-PLEASE-FIX!
warnings.notInBoth.push(packageDep);
}
if (!compatibleWithPackgeJson && compatibleWithNodeModules && !_ramda().default.contains(packageDep, warnings.notInPackageJson)) {
// @ts-ignore AUTO-ADDED-AFTER-MIGRATION-PLEASE-FIX!
warnings.notInPackageJson.push(packageDep);
}
if (compatibleWithPackgeJson && !compatibleWithNodeModules && !_ramda().default.contains(packageDep, warnings.notInNodeModules)) {
// @ts-ignore AUTO-ADDED-AFTER-MIGRATION-PLEASE-FIX!
warnings.notInNodeModules.push(packageDep);
}
}, dep.packageDependencies);
}); // Remove duplicates warnings for missing packages
warnings.notInBoth = _ramda().default.uniq(warnings.notInBoth);
return Promise.resolve(warnings);
}
;