UNPKG

waka-pm

Version:

a pnpm supplement for enforcing consistent versions across all workspaces

159 lines 6.18 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.installFn = void 0; const ext_config_1 = require("../ext-config"); const file_1 = require("../file"); const npmjs_1 = require("../npmjs"); const package_1 = require("../package"); const schema_1 = require("../schema"); function parsePackageAndVersion(packageName) { if (packageName.lastIndexOf('@') > 0) { const name = packageName.substring(0, packageName.lastIndexOf('@')); const version = packageName.substring(packageName.lastIndexOf('@') + 1); return { name, version }; } return { name: packageName, version: null }; } function lookupDefaultVersion(packageName, requestedVersion, wakaRoot) { let version = wakaRoot.getRegisteredDepVersion(packageName); if (!version) { console.log('version not found in registry -- looking up in npmjs'); version = (0, npmjs_1.getLatestVersion)(packageName + '@' + (requestedVersion ?? 'latest')); if (!version) { throw new Error(`Package ${packageName} not found in npmjs registry.`); } } return version; } function getDepType(opts) { const { saveDev, savePeer, saveOpt } = opts; if (saveDev) { return 'devDependencies'; } else if (savePeer) { return 'peerDependencies'; } else if (saveOpt) { return 'optionalDependencies'; } return 'dependencies'; } function updatePackage({ wakaRoot, wakaPackage, depType, packageName, version, noRegister, }) { if (!noRegister) { wakaPackage.setDependencyVersion(packageName, schema_1.ROOT_REGISTRY_VERSION, depType); wakaRoot.setRegisteredDependencyVersion(packageName, version); } else { // if we have been told not to register or // the registry already has a version of this dependency, then don't register // just add the version to the package wakaPackage.setDependencyVersion(packageName, version, depType); } return { wakaRoot, wakaPackage }; } async function installFn(repoRootDir, opts) { const { workspace, packageName } = opts; let workspaceDir = await (0, package_1.parseWorkspaceDir)(repoRootDir, file_1.cwd, workspace); const depType = getDepType(opts); const wakaRoot = await (0, package_1.getWakaRootDocument)(repoRootDir); const extConfig = await (0, ext_config_1.getExternalConfig)(repoRootDir, opts); await extConfig?.installPreEvaluate({ workspaceDir, depType, wakaRoot, installPackageAndVersion: packageName, }); let targetIsRoot = false; if ((0, file_1.isMonoRepoRoot)(workspaceDir)) { targetIsRoot = true; workspaceDir = repoRootDir; } const parsedPackage = parsePackageAndVersion(packageName); if (wakaRoot.hasRegisteredDep(parsedPackage.name) && !opts.noRegister && parsedPackage.version && wakaRoot.getRegisteredDepVersion(parsedPackage.name) !== parsedPackage.version) { throw new Error(`Package ${parsedPackage.name} already registered in root. Use --no-register to install this different version to this workspace. Otherwise, run again without a version to install the root-version`); } if (!parsedPackage.version) { console.log('no version specified -- looking up version'); parsedPackage.version = lookupDefaultVersion(parsedPackage.name, parsedPackage.version, wakaRoot); } if (!opts.noRegister) { console.log('registering to root registry'); wakaRoot.setRegisteredDependencyVersion(parsedPackage.name, parsedPackage.version); } else { console.log('not registering to root registry'); } const wakaRootFile = await (0, package_1.getWakaRootFile)(repoRootDir); if (targetIsRoot) { console.log('installing to root'); const { wakaRoot: newWakaRoot } = updatePackage({ wakaRoot, wakaPackage: wakaRoot, depType, packageName: parsedPackage.name, version: parsedPackage.version, noRegister: opts.noRegister ?? false, }); await extConfig?.installPreWrite({ wakaRootFile, workspaceDir, depType, wakaRoot: newWakaRoot, parsedPackageInfo: parsedPackage, }); console.log(`writing to ${wakaRootFile}`); await (0, package_1.writeWakaRootDocument)(wakaRootFile, newWakaRoot); await extConfig?.installPostWrite({ wakaRootFile, workspaceDir, depType, wakaRoot: newWakaRoot, parsedPackageInfo: parsedPackage, }); } else { console.log('installing to package'); const wakaPackageFile = await (0, package_1.getWakaPackageFile)(workspaceDir, { ensureExists: true, }); const wakaPackage = await (0, package_1.getWakaPackageDocument)(workspaceDir); const { wakaRoot: newWakaRoot, wakaPackage: newWakaPackage } = updatePackage({ wakaRoot, wakaPackage, depType, packageName: parsedPackage.name, version: parsedPackage.version, noRegister: opts.noRegister ?? false, }); await extConfig?.installPreWrite({ wakaRootFile, wakaPackageFile, workspaceDir, depType, wakaRoot: newWakaRoot, wakaPackage: newWakaPackage, parsedPackageInfo: parsedPackage, }); console.log(`writing to ${wakaPackageFile}`); await (0, package_1.writeWakaPackageDocument)(wakaPackageFile, newWakaPackage); console.log(`writing to ${wakaRootFile}`); await (0, package_1.writeWakaRootDocument)(wakaRootFile, newWakaRoot); await extConfig?.installPostWrite({ wakaRootFile, wakaPackageFile, workspaceDir, depType, wakaRoot: newWakaRoot, wakaPackage: newWakaPackage, parsedPackageInfo: parsedPackage, }); } } exports.installFn = installFn; //# sourceMappingURL=install.js.map