syncpack
Version:
Manage multiple package.json files, such as in Lerna Monorepos and Yarn/Pnpm Workspaces
54 lines (53 loc) • 2.53 kB
JavaScript
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
exports.__esModule = true;
exports.fixMismatchesToDisk = exports.fixMismatches = void 0;
var chalk_1 = __importDefault(require("chalk"));
var fs_extra_1 = require("fs-extra");
var os_1 = require("os");
var path_1 = require("path");
var get_dependency_types_1 = require("./lib/get-dependency-types");
var get_highest_version_1 = require("./lib/get-highest-version");
var get_installations_1 = require("./lib/get-installations");
var get_wrappers_1 = require("./lib/get-wrappers");
var log_1 = require("./lib/log");
exports.fixMismatches = function (dependencyTypes, filter, wrappers) {
var iterator = get_installations_1.getMismatchedDependencies(dependencyTypes, wrappers);
var mismatches = Array.from(iterator).filter(function (_a) {
var name = _a.name;
return name.search(filter) !== -1;
});
mismatches.forEach(function (installedPackage) {
var versions = installedPackage.installations.map(function (installation) { return installation.version; });
var newest = get_highest_version_1.getHighestVersion(versions);
installedPackage.installations.forEach(function (_a) {
var type = _a.type, name = _a.name, source = _a.source;
var dependencies = source.contents[type];
if (dependencies) {
dependencies[name] = newest;
}
});
});
};
exports.fixMismatchesToDisk = function (_a) {
var dev = _a.dev, filter = _a.filter, indent = _a.indent, peer = _a.peer, prod = _a.prod, source = _a.source;
var toJson = function (wrapper) { return "" + JSON.stringify(wrapper.contents, null, indent) + os_1.EOL; };
var dependencyTypes = get_dependency_types_1.getDependencyTypes({ dev: dev, peer: peer, prod: prod });
var wrappers = get_wrappers_1.getWrappers({ source: source });
var allBefore = wrappers.map(toJson);
exports.fixMismatches(dependencyTypes, filter, wrappers);
wrappers.forEach(function (wrapper, i) {
var shortPath = path_1.relative(process.cwd(), wrapper.filePath);
var before = allBefore[i];
var after = toJson(wrapper);
if (before !== after) {
fs_extra_1.writeFileSync(wrapper.filePath, after);
log_1.log(chalk_1["default"].green('✓'), shortPath);
}
else {
log_1.log(chalk_1["default"].dim('-', shortPath));
}
});
};
;