mirror of
https://github.com/zebrajr/react.git
synced 2025-12-06 12:20:20 +01:00
72 lines
2.1 KiB
JavaScript
72 lines
2.1 KiB
JavaScript
#!/usr/bin/env node
|
|
|
|
'use strict';
|
|
|
|
const prompt = require('prompt-promise');
|
|
const semver = require('semver');
|
|
const theme = require('../theme');
|
|
const {confirm} = require('../utils');
|
|
|
|
const run = async ({skipPackages}, versionsMap) => {
|
|
const groupedVersionsMap = new Map();
|
|
|
|
// Group packages with the same source versions.
|
|
// We want these to stay lock-synced anyway.
|
|
// This will require less redundant input from the user later,
|
|
// and reduce the likelihood of human error (entering the wrong version).
|
|
versionsMap.forEach((version, packageName) => {
|
|
if (!groupedVersionsMap.has(version)) {
|
|
groupedVersionsMap.set(version, [packageName]);
|
|
} else {
|
|
groupedVersionsMap.get(version).push(packageName);
|
|
}
|
|
});
|
|
|
|
// Prompt user to confirm or override each version group.
|
|
const entries = [...groupedVersionsMap.entries()];
|
|
for (let i = 0; i < entries.length; i++) {
|
|
const [bestGuessVersion, packages] = entries[i];
|
|
const packageNames = packages.map(name => theme.package(name)).join(', ');
|
|
|
|
let version = bestGuessVersion;
|
|
if (
|
|
skipPackages.some(skipPackageName =>
|
|
packageNames.includes(skipPackageName)
|
|
)
|
|
) {
|
|
await confirm(
|
|
theme`{spinnerSuccess ✓} Version for ${packageNames} will remain {version ${bestGuessVersion}}`
|
|
);
|
|
} else {
|
|
const defaultVersion = bestGuessVersion
|
|
? theme.version(` (default ${bestGuessVersion})`)
|
|
: '';
|
|
version =
|
|
(await prompt(
|
|
theme`{spinnerSuccess ✓} Version for ${packageNames}${defaultVersion}: `
|
|
)) || bestGuessVersion;
|
|
prompt.done();
|
|
}
|
|
|
|
// Verify a valid version has been supplied.
|
|
try {
|
|
semver(version);
|
|
|
|
packages.forEach(packageName => {
|
|
versionsMap.set(packageName, version);
|
|
});
|
|
} catch (error) {
|
|
console.log(
|
|
theme`{spinnerError ✘} Version {version ${version}} is invalid.`
|
|
);
|
|
|
|
// Prompt again
|
|
i--;
|
|
}
|
|
}
|
|
};
|
|
|
|
// Run this directly because it's fast,
|
|
// and logPromise would interfere with console prompting.
|
|
module.exports = run;
|