UNPKG

1.33 kBJavaScriptView Raw
1const semver = require('semver');
2const logger = require('../logger');
3const taskify = require('../cli-task');
4const updateVersions = require('../update-versions');
5const getLatestVersions = require('../get-latest-versions');
6
7async function version(targetPackages = [], tag, allPackages = []) {
8 // Projects may use different tag formats
9 const number = semver.clean(tag);
10
11 if (semver.valid(number)) {
12 logger.info(`Updating packages to version ${number}`);
13 } else {
14 throw new Error(`The given tag "${tag}" is not a valid version number`);
15 }
16
17 // Fetch the latest versions for every package from npm
18 const latestVersions = await getLatestVersions(allPackages);
19 // Only bump the version for the list of target packages
20 const packagesToUpdate = new Set(targetPackages.map(pkg => pkg.name));
21
22 return targetPackages.map(pkg => {
23 const apply = () => {
24 const newManifest = updateVersions(
25 pkg.manifest,
26 packagesToUpdate,
27 number,
28 latestVersions,
29 );
30 return pkg.writeManifest(newManifest);
31 };
32
33 return { pkg, apply };
34 });
35}
36
37exports.task = version;
38
39exports.register = program => {
40 program
41 .command('version <tag>')
42 .description(
43 'Updates the release number for public packages and their cross-dependencies and writes the data back to package.json',
44 )
45 .action(taskify(version));
46};