UNPKG

@vis.gl/dev-tools

Version:

Dev tools for vis.gl frameworks

99 lines (84 loc) 2.76 kB
#!/usr/bin/env node import fs from 'fs'; import {resolve} from 'path'; import glob from 'glob'; import {execSync} from 'child_process'; const packageJsonFiles = glob.sync(resolve('**/package.json'), {ignore: '**/node_modules/**'}); console.log(packageJsonFiles); function getVersions(packageName) { const versions = execSync(`npm v ${packageName} dist-tags --json`, {encoding: 'utf8'}); return versions ? JSON.parse(versions) : null; } function getTargetVersion(packageAndVersion, moduleName) { const [, targetVersion] = packageAndVersion; let version = targetVersion; if (targetVersion === 'beta' || targetVersion === 'latest') { const versions = getVersions(moduleName); version = versions && versions[targetVersion]; } return version; } function bumpPackages(packages) { for (const file of packageJsonFiles) { let changed = false; let content = JSON.parse(fs.readFileSync(file, 'utf8')); const dependencies = content.dependencies || {}; const devDependencies = content.devDependencies || {}; const peerDependencies = content.peerDependencies || {}; for (const package_ of packages) { if (dependencies[package_.name]) { dependencies[package_.name] = `^${package_.version}`; changed = true; } if (devDependencies[package_.name]) { devDependencies[package_.name] = `^${package_.version}`; changed = true; } if (peerDependencies[package_.name]) { peerDependencies[package_.name] = `^${package_.version}`; changed = true; } } if (changed) { content = JSON.stringify(content, null, 2); fs.writeFileSync(file, `${content}\n`); } } } function main() { let packages = []; const args = process.argv; if (!args || args.length < 3) { console.error('Should provide at lease one package.'); return; } const argLen = args.length; for (let i = 2; i < argLen; i++) { const packageAndVersion = args[i].split('='); if (!packageAndVersion) { console.error('Should use format "yarn bump package" or "yarn bump package=target_version".'); return; } // default to latest version if (packageAndVersion.length === 1) { packageAndVersion.push('latest'); } const [packageName] = packageAndVersion; const modules = JSON.parse(execSync(`npm search ${packageName} --json`, {encoding: 'utf8'})); if (modules) { packages = packages.concat( modules.map(function (module) { const version = getTargetVersion(packageAndVersion, module.name); return { name: module.name, version }; }) ); } } if (packages.length) { bumpPackages(packages); } } main();