123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180 |
- "use strict";
- const log = require("npmlog");
- const versionCommand = require("@lerna/version/command");
- /**
- * @see https://github.com/yargs/yargs/blob/master/docs/advanced.md#providing-a-command-module
- */
- exports.command = "publish [bump]";
- exports.describe = "Publish packages in the current project.";
- exports.builder = (yargs) => {
- const opts = {
- c: {
- describe: "Publish packages after every successful merge using the sha as part of the tag.",
- alias: "canary",
- type: "boolean",
- },
- // preid is copied from ../version/command because a whitelist for one option isn't worth it
- preid: {
- describe: "Specify the prerelease identifier when publishing a prerelease",
- type: "string",
- requiresArg: true,
- defaultDescription: "alpha",
- },
- contents: {
- describe: "Subdirectory to publish. Must apply to ALL packages.",
- type: "string",
- requiresArg: true,
- defaultDescription: ".",
- },
- "dist-tag": {
- describe: "Publish packages with the specified npm dist-tag",
- type: "string",
- requiresArg: true,
- },
- "legacy-auth": {
- describe: "Legacy Base64 Encoded username and password.",
- type: "string",
- },
- "pre-dist-tag": {
- describe: "Publish prerelease packages with the specified npm dist-tag",
- type: "string",
- requiresArg: true,
- },
- "git-head": {
- describe:
- "Explicit SHA to set as gitHead when packing tarballs, only allowed with 'from-package' positional.",
- type: "string",
- requiresArg: true,
- },
- "graph-type": {
- describe: "Type of dependency to use when determining package hierarchy.",
- choices: ["all", "dependencies"],
- defaultDescription: "dependencies",
- },
- "ignore-prepublish": {
- describe: "Disable deprecated 'prepublish' lifecycle script",
- type: "boolean",
- },
- "ignore-scripts": {
- describe: "Disable all lifecycle scripts",
- type: "boolean",
- },
- // TODO: (major) make --no-granular-pathspec the default
- "no-granular-pathspec": {
- describe: "Do not reset changes file-by-file, but globally.",
- type: "boolean",
- },
- "granular-pathspec": {
- // proxy for --no-granular-pathspec
- hidden: true,
- // describe: "Reset changes file-by-file, not globally.",
- type: "boolean",
- },
- otp: {
- describe: "Supply a one-time password for publishing with two-factor authentication.",
- type: "string",
- requiresArg: true,
- },
- registry: {
- describe: "Use the specified registry for all npm client operations.",
- type: "string",
- requiresArg: true,
- },
- "require-scripts": {
- describe: "Execute ./scripts/prepublish.js and ./scripts/postpublish.js, relative to package root.",
- type: "boolean",
- },
- "no-git-reset": {
- describe: "Do not reset changes to working tree after publishing is complete.",
- type: "boolean",
- },
- "git-reset": {
- // proxy for --no-git-reset
- hidden: true,
- type: "boolean",
- },
- "temp-tag": {
- describe: "Create a temporary tag while publishing.",
- type: "boolean",
- },
- "no-verify-access": {
- describe: "Do not verify package read-write access for current npm user.",
- type: "boolean",
- },
- "verify-access": {
- // proxy for --no-verify-access
- hidden: true,
- type: "boolean",
- },
- // y: {
- // describe: "Skip all confirmation prompts.",
- // alias: "yes",
- // type: "boolean",
- // },
- };
- composeVersionOptions(yargs);
- yargs.options(opts);
- // "unhide" duplicate options
- const { hiddenOptions } = yargs.getOptions();
- const sharedKeys = ["preid", "y", "ignore-scripts"];
- for (const sharedKey of sharedKeys) {
- hiddenOptions.splice(
- hiddenOptions.findIndex((k) => k === sharedKey),
- 1
- );
- }
- yargs.group(Object.keys(opts).concat(sharedKeys), "Command Options:");
- return yargs
- .option("npm-tag", {
- // TODO: remove in next major release
- hidden: true,
- conflicts: "dist-tag",
- type: "string",
- requiresArg: true,
- })
- .option("verify-registry", {
- // TODO: remove in next major release
- hidden: true,
- type: "boolean",
- })
- .option("skip-npm", {
- // TODO: remove in next major release
- // deprecation notice handled in initialize()
- hidden: true,
- type: "boolean",
- })
- .check((argv) => {
- /* eslint-disable no-param-reassign */
- if (argv.npmTag) {
- argv.distTag = argv.npmTag;
- argv["dist-tag"] = argv.npmTag;
- delete argv.npmTag;
- delete argv["npm-tag"];
- log.warn("deprecated", "--npm-tag has been renamed --dist-tag");
- }
- /* eslint-enable no-param-reassign */
- return argv;
- });
- };
- exports.handler = function handler(argv) {
- return require(".")(argv);
- };
- function composeVersionOptions(yargs) {
- versionCommand.addBumpPositional(yargs, ["from-git", "from-package"]);
- versionCommand.builder(yargs, "publish");
- return yargs;
- }
|