john-test-upgrade
Version:
Upgrade tool for Babel
84 lines (69 loc) • 2.67 kB
JavaScript
var semver = require('semver');
var _require = require('./packageData'),
oldPackages = _require.packages,
latestPackages = _require.latestPackages;
var otherPackages = {
'babel-loader': 'v8.0.0-beta.0'
};
module.exports = function upgradeDeps(dependencies, version) {
var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};
var hasFlow = options.hasFlow;
var _arr = Object.keys(dependencies);
for (var _i = 0; _i < _arr.length; _i++) {
var pkg = _arr[_i];
var depVersion = dependencies[pkg];
if (Object.keys(oldPackages).includes(pkg)) {
// don't update `babel-core` bridge
if (dependencies[pkg].includes("7.0.0-bridge.0")) {
break;
}
delete dependencies[pkg];
var newPackageName = oldPackages[pkg];
if (newPackageName) {
if (process.env.DEBUG) {
console.warn(`Updating ${pkg} -> ${newPackageName}`);
}
if (Array.isArray(newPackageName)) {
var _iteratorNormalCompletion = true;
var _didIteratorError = false;
var _iteratorError = undefined;
try {
for (var _iterator = newPackageName[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {
name = _step.value;
dependencies[name] = version;
}
} catch (err) {
_didIteratorError = true;
_iteratorError = err;
} finally {
try {
if (!_iteratorNormalCompletion && _iterator.return != null) {
_iterator.return();
}
} finally {
if (_didIteratorError) {
throw _iteratorError;
}
}
}
} else {
dependencies[newPackageName] = version;
}
}
} else if (latestPackages.has(pkg) && semver.valid(depVersion) && semver.valid(version) && semver.lt(depVersion, version)) {
dependencies[pkg] = version; // TODO: refactor out somewhere else
} else if (otherPackages[pkg]) {
dependencies[pkg] = otherPackages[pkg];
}
} // one-off on checking for `@babel/core` dep
if (!dependencies['@babel/core'] && Object.keys(dependencies).some(function (a) {
return a.startsWith('@babel/plugin') || a.startsWith('@babel/preset');
})) {
dependencies['@babel/core'] = version;
} // Adds preset-flow if needed, especially since it was split out of
// preset-react
if (hasFlow && !dependencies['@babel/preset-flow']) {
dependencies['@babel/preset-flow'] = version;
}
return dependencies;
};