quick-publish
Version:
Shipped a standard `npm publish` workflow with one click.
91 lines • 2.92 kB
JavaScript
;
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