1 | "use strict";
|
2 |
|
3 | const semver = require("semver");
|
4 | const { promptSelectOne, promptTextInput } = require("@lerna/prompt");
|
5 |
|
6 | module.exports.makePromptVersion = makePromptVersion;
|
7 |
|
8 |
|
9 |
|
10 |
|
11 | function makePromptVersion(resolvePrereleaseId) {
|
12 | return (/** @type {import("@lerna/package-graph").PackageGraphNode} */ node) =>
|
13 | promptVersion(node.version, node.name, resolvePrereleaseId(node.prereleaseId));
|
14 | }
|
15 |
|
16 |
|
17 |
|
18 |
|
19 |
|
20 |
|
21 |
|
22 |
|
23 |
|
24 | function promptVersion(currentVersion, name, prereleaseId) {
|
25 | const patch = semver.inc(currentVersion, "patch");
|
26 | const minor = semver.inc(currentVersion, "minor");
|
27 | const major = semver.inc(currentVersion, "major");
|
28 | const prepatch = semver.inc(currentVersion, "prepatch", prereleaseId);
|
29 | const preminor = semver.inc(currentVersion, "preminor", prereleaseId);
|
30 | const premajor = semver.inc(currentVersion, "premajor", prereleaseId);
|
31 |
|
32 | const message = `Select a new version ${name ? `for ${name} ` : ""}(currently ${currentVersion})`;
|
33 |
|
34 | return promptSelectOne(message, {
|
35 | choices: [
|
36 | { value: patch, name: `Patch (${patch})` },
|
37 | { value: minor, name: `Minor (${minor})` },
|
38 | { value: major, name: `Major (${major})` },
|
39 | { value: prepatch, name: `Prepatch (${prepatch})` },
|
40 | { value: preminor, name: `Preminor (${preminor})` },
|
41 | { value: premajor, name: `Premajor (${premajor})` },
|
42 | { value: "PRERELEASE", name: "Custom Prerelease" },
|
43 | { value: "CUSTOM", name: "Custom Version" },
|
44 | ],
|
45 | }).then((choice) => {
|
46 | if (choice === "CUSTOM") {
|
47 | return promptTextInput("Enter a custom version", {
|
48 | filter: semver.valid,
|
49 |
|
50 | validate: (v) => v !== null || "Must be a valid semver version",
|
51 | });
|
52 | }
|
53 |
|
54 | if (choice === "PRERELEASE") {
|
55 | const defaultVersion = semver.inc(currentVersion, "prerelease", prereleaseId);
|
56 | const prompt = `(default: "${prereleaseId}", yielding ${defaultVersion})`;
|
57 |
|
58 | return promptTextInput(`Enter a prerelease identifier ${prompt}`, {
|
59 | filter: (v) => semver.inc(currentVersion, "prerelease", v || prereleaseId),
|
60 | });
|
61 | }
|
62 |
|
63 | return choice;
|
64 | });
|
65 | }
|