UNPKG

waka-pm

Version:

a pnpm supplement for enforcing consistent versions across all workspaces

141 lines 6.71 kB
"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