jazelle/commands/align.js (34 lines of code) (raw):

// @flow const {getManifest} = require('../utils/get-manifest.js'); const {getAllDependencies} = require('../utils/get-all-dependencies.js'); const {read, write} = require('../utils/node-helpers.js'); const {shouldSync, getVersion} = require('../utils/version-onboarding.js'); const {install} = require('./install.js'); const sortPackageJson = require('../utils/sort-package-json'); /*:: type AlignArgs = { root: string, cwd: string, } type Align = (AlignArgs) => Promise<void> */ const align /*: Align */ = async ({root, cwd}) => { const {projects, versionPolicy} = /*:: await */ await getManifest({root}); if (versionPolicy) { const deps = await getAllDependencies({root, projects}); const meta = JSON.parse(await read(`${cwd}/package.json`, 'utf8')); const others = deps.filter(dep => dep.meta.name !== meta.name); const types = ['dependencies', 'devDependencies', 'resolutions']; let changed = false; for (const type of types) { if (meta[type]) { for (const name in meta[type]) { if (shouldSync({versionPolicy, name})) { const version = getVersion({name, deps: others}); if (version !== '') { meta[type][name] = version; changed = true; } } } } } if (changed) { await write(`${cwd}/package.json`, sortPackageJson(meta), 'utf8'); } } await install({root, cwd, conservative: true}); }; module.exports = {align};