lerna
Version:
Lerna is a fast, modern build system for managing and publishing multiple JavaScript/TypeScript packages from the same repository
53 lines (50 loc) • 2.38 kB
JavaScript
import {
applyBuildMetadata,
promptSelectOne,
promptTextInput
} from "./chunk-WC2B4V4E.js";
// libs/commands/version/src/lib/prompt-version.ts
import semver from "semver";
function makePromptVersion(resolvePrereleaseId, buildMetadata) {
return (node) => promptVersion(node.version, node.name, resolvePrereleaseId(node.prereleaseId), buildMetadata);
}
function promptVersion(currentVersion, name, prereleaseId, buildMetadata) {
const patch = applyBuildMetadata(semver.inc(currentVersion, "patch"), buildMetadata);
const minor = applyBuildMetadata(semver.inc(currentVersion, "minor"), buildMetadata);
const major = applyBuildMetadata(semver.inc(currentVersion, "major"), buildMetadata);
const prepatch = applyBuildMetadata(semver.inc(currentVersion, "prepatch", prereleaseId), buildMetadata);
const preminor = applyBuildMetadata(semver.inc(currentVersion, "preminor", prereleaseId), buildMetadata);
const premajor = applyBuildMetadata(semver.inc(currentVersion, "premajor", prereleaseId), buildMetadata);
const message = `Select a new version ${name ? `for ${name} ` : ""}(currently ${currentVersion})`;
return promptSelectOne(message, {
choices: [
{ value: patch, name: `Patch (${patch})` },
{ value: minor, name: `Minor (${minor})` },
{ value: major, name: `Major (${major})` },
{ value: prepatch, name: `Prepatch (${prepatch})` },
{ value: preminor, name: `Preminor (${preminor})` },
{ value: premajor, name: `Premajor (${premajor})` },
{ value: "PRERELEASE", name: "Custom Prerelease" },
{ value: "CUSTOM", name: "Custom Version" }
]
}).then((choice) => {
if (choice === "CUSTOM") {
return promptTextInput("Enter a custom version", {
filter: semver.valid,
// semver.valid() always returns null with invalid input
validate: (v) => v !== null || "Must be a valid semver version"
});
}
if (choice === "PRERELEASE") {
const defaultVersion = semver.inc(currentVersion, "prerelease", prereleaseId);
const prompt = `(default: "${prereleaseId}", yielding ${defaultVersion})`;
return promptTextInput(`Enter a prerelease identifier ${prompt}`, {
filter: (v) => applyBuildMetadata(semver.inc(currentVersion, "prerelease", v || prereleaseId), buildMetadata)
});
}
return choice;
});
}
export {
makePromptVersion
};