waka-pm
Version:
a pnpm supplement for enforcing consistent versions across all workspaces
141 lines • 6.71 kB
JavaScript
"use strict";
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.importFn = void 0;
const select_1 = __importDefault(require("@inquirer/select"));
const coerce_1 = __importDefault(require("semver/functions/coerce"));
const sort_1 = __importDefault(require("semver/functions/sort"));
const package_1 = require("../package");
const schema_1 = require("../schema");
async function promptForRootRegVersionSelect(name, detailsByNameAndVersion, opts) {
const selections = { rootRegVersion: null, changeAllToRootVersion: false };
if (opts.acceptLatest) {
const sortedVersions = (0, sort_1.default)(Object.values(detailsByNameAndVersion).map((details) => (0, coerce_1.default)(details[0].version)), { loose: true });
const latestVersion = sortedVersions[sortedVersions.length - 1];
selections.rootRegVersion = latestVersion.raw;
}
else {
selections.rootRegVersion = await (0, select_1.default)({
message: `Select which version of ${name} that you want to be pinned as the root registry version:`,
choices: [
{ name: 'do not register to root registry', value: null },
...Object.values(detailsByNameAndVersion).map((details) => {
const [detail] = details;
return {
name: detail.version,
value: detail.version,
description: `count: (${details.length})`,
};
}),
],
});
}
if (selections.rootRegVersion) {
if (opts.registerAll) {
selections.changeAllToRootVersion = true;
}
else {
selections.changeAllToRootVersion = await (0, select_1.default)({
message: `Do you want to change all versions of ${name} to be the root registry version?`,
choices: [
{ name: 'yes', value: true },
{ name: 'no', value: false },
],
});
}
}
return selections;
// const detail = Object.values(detailsByNameAndVersion)[0]!;
// const answer = await Promise.resolve(detail[0]!.version);
// return answer;
}
async function organizeDependencies(wakaRoot, wakaPackages, npmPackageDetails, opts) {
function adjustWakaRootRegistryVersion(name, newVersion) {
if (!newVersion) {
if (wakaRoot.hasRegisteredDep(name)) {
wakaRoot.removeRegisteredDependency(name);
}
return wakaRoot;
}
wakaRoot.setRegisteredDependencyVersion(name, newVersion);
return wakaRoot;
}
function adjustWakaPackageVersion(workspacePackageName, pkgName, newVersion, depType) {
const wakaPackage = wakaPackages[workspacePackageName];
wakaPackage.setDependencyVersion(pkgName, newVersion, depType);
return wakaPackage;
}
const detailsByName = (0, package_1.mapNPMPackageDetails)(npmPackageDetails, ['name']);
// const detailsByNameAndVersion = mapNPMPackageDetails(npmPackageDetails, [
// 'name',
// 'version',
// ]);
const names = Object.keys(detailsByName);
for (const name of names) {
const detailForName = detailsByName[name];
const detailsByNameAndVersion = (0, package_1.mapNPMPackageDetails)(detailForName, [
'name',
'version',
]);
if (Object.keys(detailsByNameAndVersion).length === 1) {
const [detail] = detailForName;
const { version } = detail;
wakaRoot = adjustWakaRootRegistryVersion(name, version);
for (const detailToFix of detailForName) {
const { packageName } = detailToFix;
wakaPackages[packageName] = adjustWakaPackageVersion(packageName, name, schema_1.ROOT_REGISTRY_VERSION, detail.type);
}
}
else {
const { rootRegVersion, changeAllToRootVersion } = await promptForRootRegVersionSelect(name, detailsByNameAndVersion, opts);
if (rootRegVersion) {
wakaRoot = adjustWakaRootRegistryVersion(name, rootRegVersion);
detailForName.forEach((detail) => {
const { packageName } = detail;
wakaPackages[packageName] = adjustWakaPackageVersion(packageName, name, rootRegVersion === detail.version || changeAllToRootVersion
? schema_1.ROOT_REGISTRY_VERSION
: detail.version, detail.type);
});
}
else {
wakaRoot = adjustWakaRootRegistryVersion(name, null);
detailForName.forEach((detail) => {
const { packageName } = detail;
wakaPackages[packageName] = adjustWakaPackageVersion(packageName, name, detail.version, detail.type);
});
}
}
}
return Promise.resolve({
wakaRoot,
wakaPackages,
});
}
async function importFn(repoRootDir, opts) {
const wakaRoot = await (0, package_1.getWakaRootDocument)(repoRootDir);
const wakaPackages = await (0, package_1.getWakaPackageDocuments)(repoRootDir);
const npmPackageDetails = await (0, package_1.getNPMPackageDetails)(repoRootDir, {
includeRoot: true,
});
const rootPackageJson = await (0, package_1.getNPMPackageFile)(repoRootDir);
const rootPackageName = (0, package_1.getNPMPackageName)(rootPackageJson);
// ensure the tha the rootPackageName in the map of packageNames -> wakaPackageDocuments points
// to the same exact object as wakaRoot
wakaPackages[rootPackageName] = wakaRoot;
const { wakaRoot: newWakaRoot, wakaPackages: newWakaPackages } = await organizeDependencies(wakaRoot, wakaPackages, npmPackageDetails, opts);
const rootFile = await (0, package_1.getWakaRootFile)(repoRootDir, { ensureExists: false });
const packageNames = Object.keys(newWakaPackages);
for (const p of packageNames) {
const packageDir = await (0, package_1.getNPMPackageDir)(p, repoRootDir);
const wakaPackageYaml = await (0, package_1.getWakaPackageFile)(packageDir, {
ensureExists: false,
});
await (0, package_1.writeWakaPackageDocument)(wakaPackageYaml, newWakaPackages[p]);
}
await (0, package_1.writeWakaRootDocument)(rootFile, newWakaRoot);
console.log('all dependencies have been imported to waka yaml files');
}
exports.importFn = importFn;
//# sourceMappingURL=import.js.map