UNPKG

quick-publish

Version:

Shipped a standard `npm publish` workflow with one click.

91 lines 2.92 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.selectVersionAndTag = void 0; /** * Module dependencies */ const inquirer_1 = __importDefault(require("inquirer")); const semver_1 = __importDefault(require("semver")); /** * Select version and tag to be released. */ async function selectVersionAndTag(currentVersion) { const customItem = { name: 'Custom', value: 'custom' }; /** * Determine release types by current version. */ const releaseTypes = isPreRelease(currentVersion) ? ['prerelease', 'patch', 'minor', 'major'] : ['patch', 'minor', 'major', 'prerelease']; /** * Build version candidate by release types. */ const versionCandidate = releaseTypes.reduce((memo, releaseType) => { memo[releaseType] = semver_1.default.inc(currentVersion, releaseType); return memo; }, {}); /** * Determine version by answers */ function getVersion(answers) { return (answers.customVersion || versionCandidate[answers.releaseType]); } /** * Determine npm tags candidates by version */ function getNpmTags(version) { if (isPreRelease(version)) { return ['next', 'latest', 'beta', customItem]; } return ['latest', 'next', 'beta', customItem]; } /** * Check prerelease */ function isPreRelease(version) { return Boolean(semver_1.default.prerelease(version)); } const bumpChoices = releaseTypes.map(b => ({ name: `${b} (${versionCandidate[b]})`, value: b, })); const { releaseType, customVersion, npmTag, customNpmTag } = await inquirer_1.default.prompt([ { name: 'releaseType', message: 'Select release type:', type: 'list', choices: [...bumpChoices, customItem], }, { name: 'customVersion', message: 'Input version:', type: 'input', when: answers => answers.releaseType === 'custom', }, { name: 'npmTag', message: 'Input npm tag:', type: 'list', default: (answers) => getNpmTags(getVersion(answers))[0], choices: answers => getNpmTags(getVersion(answers)), }, { name: 'customNpmTag', message: 'Input customized npm tag:', type: 'input', when: answers => answers.npmTag === 'custom', }, ]); const version = customVersion || versionCandidate[releaseType]; const tag = customNpmTag || npmTag; return { tag, version, }; } exports.selectVersionAndTag = selectVersionAndTag; //# sourceMappingURL=select-version.js.map