lerna
Version:
Lerna is a fast, modern build system for managing and publishing multiple JavaScript/TypeScript packages from the same repository
327 lines (324 loc) • 11.6 kB
JavaScript
import {
npmlog_default
} from "./chunk-WC2B4V4E.js";
// libs/commands/version/src/command.ts
import semver from "semver";
function addBumpPositional(yargs, additionalKeywords = []) {
const semverKeywords = ["major", "minor", "patch", "premajor", "preminor", "prepatch", "prerelease"].concat(
additionalKeywords
);
const bumpOptionList = `'${semverKeywords.slice(0, -1).join("', '")}', or '${semverKeywords[semverKeywords.length - 1]}'.`;
yargs.positional("bump", {
describe: `Increment version(s) by explicit version _or_ semver keyword,
${bumpOptionList}`,
type: "string",
coerce: (choice) => {
if (!semver.valid(choice) && semverKeywords.indexOf(choice) === -1) {
throw new Error(`bump must be an explicit version string _or_ one of: ${bumpOptionList}`);
}
return choice;
}
});
}
var command = {
command: "version [bump]",
describe: "Bump version of packages changed since the last release",
// TODO: refactor based on TS feedback
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
// @ts-ignore
builder(yargs, composed) {
const opts = {
"allow-branch": {
describe: "Specify which branches to allow versioning from.",
type: "array"
},
amend: {
describe: "Amend the existing commit, instead of generating a new one.",
type: "boolean"
},
"build-metadata": {
describe: "Apply semver-compatible build metadata to the release",
requiresArg: true,
type: "string"
},
"ci-behind-behavior": {
describe: "Control whether CI errors or exits successfully when the current branch is behind upstream.",
type: "string",
choices: ["error", "skip"],
requiresArg: true,
defaultDescription: "error"
},
"conventional-commits": {
describe: "Use conventional-changelog to determine version bump and generate CHANGELOG.",
type: "boolean"
},
"conventional-graduate": {
describe: "Version currently prereleased packages to a non-prerelease version."
// type must remain ambiguous because it is overloaded (boolean _or_ string _or_ array)
},
"force-conventional-graduate": {
describe: "Forces all packages specified by --conventional-graduate to bump their version whether or not they are a prerelease or have changes since the previous version.",
type: "boolean"
},
"conventional-prerelease": {
describe: "Version changed packages as prereleases when using --conventional-commits."
// type must remain ambiguous because it is overloaded (boolean _or_ string _or_ array)
},
"conventional-bump-prerelease": {
describe: "Bumps prerelease versions if conventional commits requires it.",
type: "boolean"
},
"changelog-preset": {
describe: "Custom conventional-changelog preset.",
type: "string",
requiresArg: true,
defaultDescription: "angular"
},
"changelog-entry-additional-markdown": {
describe: "Additional markdown to add to CHANGELOG.md entries.",
type: "string"
},
exact: {
describe: "Specify cross-dependency version numbers exactly rather than with a caret (^).",
type: "boolean"
},
"force-publish": {
describe: "Always include targeted packages in versioning operations, skipping default logic."
// type must remain ambiguous because it is overloaded (boolean _or_ string _or_ array)
},
"git-remote": {
describe: "Push git changes to the specified remote.",
type: "string",
requiresArg: true,
defaultDescription: "origin"
},
"create-release": {
describe: "Create an official GitHub or GitLab release for every version.",
type: "string",
choices: ["gitlab", "github"]
},
"ignore-changes": {
describe: [
"Ignore changes in files matched by glob(s) when detecting changed packages.",
"Pass --no-ignore-changes to completely disable."
].join("\n"),
type: "array"
},
"ignore-scripts": {
describe: "Disable all lifecycle scripts",
type: "boolean"
},
"include-merged-tags": {
describe: "Include tags from merged branches when detecting changed packages.",
type: "boolean"
},
json: {
describe: "Outputs changed packages in json format",
type: "boolean"
},
m: {
describe: "Use a custom commit message when creating the version commit.",
alias: "message",
type: "string",
requiresArg: true
},
"no-changelog": {
describe: "Do not generate CHANGELOG.md files when using --conventional-commits.",
type: "boolean"
},
changelog: {
// proxy for --no-changelog
hidden: true,
type: "boolean"
},
"no-commit-hooks": {
describe: "Do not run git commit hooks when committing version changes.",
type: "boolean"
},
"commit-hooks": {
// proxy for --no-commit-hooks
hidden: true,
type: "boolean"
},
"no-git-tag-version": {
describe: "Do not commit or tag version changes.",
type: "boolean"
},
"git-tag-version": {
// proxy for --no-git-tag-version
hidden: true,
type: "boolean"
},
"sync-dist-version": {
describe: "Update the version of the package.json of the contents directory.",
type: "boolean"
},
// TODO: (major) make --no-granular-pathspec the default
"no-granular-pathspec": {
describe: "Do not stage changes file-by-file, but globally.",
type: "boolean"
},
"granular-pathspec": {
// proxy for --no-granular-pathspec
hidden: true,
// describe: "Stage changes file-by-file, not globally.",
type: "boolean"
},
// TODO: (major) make --no-private the default
"no-private": {
describe: "Do not version private packages.",
type: "boolean"
},
private: {
// proxy for --no-private
hidden: true,
type: "boolean"
},
"no-push": {
describe: "Do not push tagged commit to git remote.",
type: "boolean"
},
push: {
// proxy for --no-push
hidden: true,
type: "boolean"
},
// preid is copied into ../publish/command because a whitelist for one option isn't worth it
preid: {
describe: "Specify the prerelease identifier when versioning a prerelease",
type: "string",
requiresArg: true,
defaultDescription: "alpha"
},
"sign-git-commit": {
describe: "Pass the `--gpg-sign` flag to `git commit`.",
type: "boolean"
},
"signoff-git-commit": {
describe: "Pass the `--signoff` flag to `git commit`.",
type: "boolean"
},
"sign-git-tag": {
describe: "Pass the `--sign` flag to `git tag`.",
type: "boolean"
},
"force-git-tag": {
describe: "Pass the `--force` flag to `git tag`.",
type: "boolean"
},
"tag-version-prefix": {
describe: "Customize the tag prefix. To remove entirely, pass an empty string.",
type: "string",
requiresArg: true,
defaultDescription: "v"
},
"tag-version-separator": {
describe: "Customize the tag version separator used when creating tags for independent versioning.",
type: "string",
requiresArg: true,
defaultDescription: "@"
},
"git-tag-command": {
describe: "Allows users to specify a custom command to be used when applying git tags. For example, this may be useful for providing a wrapper command in CI/CD pipelines that have no direct write access.",
type: "string"
},
"run-scripts-on-lockfile-update": {
describe: "Do not disable all lifecycle scripts while updating the lock file after the version bump.",
type: "boolean"
},
"npm-client-args": {
describe: "Additional arguments to pass to the npm client when performing 'npm install'.",
type: "array"
},
"premajor-version-bump": {
describe: "Controls how pre-major version packages are bumped by lerna.",
type: "string",
choices: ["default", "force-patch"],
requiresArg: true,
defaultDescription: "default"
},
y: {
describe: "Skip all confirmation prompts.",
alias: "yes",
type: "boolean"
}
};
if (composed) {
Object.keys(opts).forEach((key) => {
opts[key].hidden = true;
});
yargs.default("composed", composed).hide("composed");
} else {
addBumpPositional(yargs);
}
yargs.options(opts);
yargs.parserConfiguration({
"populate--": true
});
if (!composed) {
yargs.group(Object.keys(opts), "Command Options:");
}
return yargs.option("ignore", {
// NOT the same as filter-options --ignore
hidden: true,
conflicts: "ignore-changes",
type: "array"
}).option("cd-version", {
hidden: true,
conflicts: "bump",
type: "string",
requiresArg: true
}).option("repo-version", {
hidden: true,
conflicts: "bump",
type: "string",
requiresArg: true
}).option("skip-git", {
hidden: true,
type: "boolean"
}).option("github-release", {
hidden: true,
type: "boolean"
}).check((argv) => {
if (argv.ignore) {
throw new Error(
"--ignore was renamed to --ignore-changes. We recommend running `lerna repair` in order to ensure your lerna.json is up to date, otherwise check your CLI usage and/or any configs you extend from."
);
}
if (argv.cdVersion) {
throw new Error(
"--cd-version was replaced by positional [bump]. We recommend running `lerna repair` in order to ensure your lerna.json is up to date, otherwise check your CLI usage and/or any configs you extend from."
);
}
if (argv.repoVersion) {
throw new Error(
"--repo-version was replaced by positional [bump]. We recommend running `lerna repair` in order to ensure your lerna.json is up to date, otherwise check your CLI usage and/or any configs you extend from."
);
}
if (argv.skipGit) {
throw new Error(
"--skip-git was replaced by --no-git-tag-version --no-push. We recommend running `lerna repair` in order to ensure your lerna.json is up to date, otherwise check your CLI usage and/or any configs you extend from."
);
}
if (argv.githubRelease) {
throw new Error(
"--github-release was replaced by --create-release=github. We recommend running `lerna repair` in order to ensure your lerna.json is up to date, otherwise check your CLI usage and/or any configs you extend from."
);
}
if (argv["--"]) {
npmlog_default.warn("EDOUBLEDASH", "Arguments after -- are no longer passed to subprocess executions.");
npmlog_default.warn("EDOUBLEDASH", "This will cause an error in a future major version.");
}
return argv;
});
},
async handler(argv) {
const cmd = await import("./src-JTMF2QCW.js");
return (cmd.default ?? cmd)(argv);
},
addBumpPositional
};
var command_default = command;
export {
command_default
};