@nlabs/lex
Version:
124 lines (123 loc) • 15.2 kB
JavaScript
/**
* Copyright (c) 2018-Present, Nitrogen Labs, Inc.
* Copyrights licensed under the MIT License. See the accompanying LICENSE file for terms.
*/ import { execa } from 'execa';
import semver from 'semver';
import { LexConfig } from '../../LexConfig.js';
import { createSpinner, getPackageJson, setPackageJson } from '../../utils/app.js';
import { log } from '../../utils/log.js';
export const publish = async (cmd, callback = process.exit)=>{
const { bump, cliName = 'Lex', newVersion, otp, packageManager: cmdPackageManager, private: accessPrivate, tag, quiet } = cmd;
log(`${cliName} publishing npm module...`, 'info', quiet);
// Spinner
const spinner = createSpinner(quiet);
// Get custom configuration
await LexConfig.parseConfig(cmd);
const { packageManager: configPackageManager } = LexConfig.config;
const packageManager = cmdPackageManager || configPackageManager;
const publishOptions = [
'publish'
];
if (accessPrivate) {
publishOptions.push('--access', 'restricted');
}
if (otp) {
publishOptions.push('--otp', otp);
}
if (tag) {
publishOptions.push('--tag', tag);
}
// Get next version number
let nextVersion;
const packagePath = `${process.cwd()}/package.json`;
let packageJson;
let packageName;
let prevVersion;
// If not using yarn, we'll use npm and manually update the version number
try {
packageJson = getPackageJson(packagePath);
packageName = packageJson.name;
prevVersion = packageJson.version;
} catch (error) {
log(`\n${cliName} Error: The file, ${packagePath}, was not found or is malformed.\n`, 'error', quiet);
log(error.message, 'error');
callback(1);
return 1;
}
// Update package.json with the latest version
if (newVersion) {
// If using a specific version, we don't need to determine the next bump
nextVersion = newVersion;
} else if (bump) {
// Determine next version
const formatBump = bump.toString().trim().toLowerCase();
if (formatBump) {
const validReleases = [
'major',
'minor',
'patch'
];
const validPreReleases = [
'alpha',
'beta',
'rc'
];
// Make sure the version in package.json is valid
const packageVersion = semver.coerce(prevVersion);
if (!semver.valid(packageVersion)) {
log(`\n${cliName} Error: Version is invalid in package.json`, 'error', quiet);
callback(1);
return 1;
}
if (validReleases.includes(formatBump)) {
nextVersion = semver.inc(packageVersion, formatBump);
} else if (validPreReleases.includes(formatBump)) {
nextVersion = semver.inc(packageVersion, 'prerelease', formatBump);
} else {
log(`\n${cliName} Error: Bump type is invalid. please make sure it is one of the following: ${validReleases.join(', ')}, ${validPreReleases.join(', ')}`, 'error', quiet);
callback(1);
return 1;
}
} else {
log(`\n${cliName} Error: Bump type is missing.`, 'error', quiet);
callback(1);
return 1;
}
}
if (nextVersion && packageManager === 'yarn') {
publishOptions.push('--new-version', nextVersion);
} else if (nextVersion && packageJson) {
try {
// Save updated version
setPackageJson({
...packageJson,
version: nextVersion
}, packagePath);
} catch (error) {
log(`\n${cliName} Error: The file, ${packagePath}, was not found or is malformed. ${error.message}`, 'error', quiet);
callback(1);
return 1;
}
} else {
nextVersion = prevVersion;
}
try {
await execa(packageManager, publishOptions, {
encoding: 'utf8',
stdio: 'inherit'
});
spinner.succeed(`Successfully published npm package: ${packageName}!`);
// Kill process
callback(0);
return 0;
} catch (error) {
// Display error message
log(`\n${cliName} Error: ${error.message}`, 'error', quiet);
// Stop spinner
spinner.fail('Publishing to npm has failed.');
// Kill process
callback(1);
return 1;
}
};
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jb21tYW5kcy9wdWJsaXNoL3B1Ymxpc2gudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTgtUHJlc2VudCwgTml0cm9nZW4gTGFicywgSW5jLlxuICogQ29weXJpZ2h0cyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuIFNlZSB0aGUgYWNjb21wYW55aW5nIExJQ0VOU0UgZmlsZSBmb3IgdGVybXMuXG4gKi9cbmltcG9ydCB7ZXhlY2F9IGZyb20gJ2V4ZWNhJztcbmltcG9ydCBzZW12ZXIsIHtSZWxlYXNlVHlwZX0gZnJvbSAnc2VtdmVyJztcblxuaW1wb3J0IHtMZXhDb25maWd9IGZyb20gJy4uLy4uL0xleENvbmZpZy5qcyc7XG5pbXBvcnQge2NyZWF0ZVNwaW5uZXIsIGdldFBhY2thZ2VKc29uLCBzZXRQYWNrYWdlSnNvbn0gZnJvbSAnLi4vLi4vdXRpbHMvYXBwLmpzJztcbmltcG9ydCB7bG9nfSBmcm9tICcuLi8uLi91dGlscy9sb2cuanMnO1xuXG5leHBvcnQgaW50ZXJmYWNlIFB1Ymxpc2hPcHRpb25zIHtcbiAgcmVhZG9ubHkgYnVtcD86IHN0cmluZztcbiAgcmVhZG9ubHkgY2xpTmFtZT86IHN0cmluZztcbiAgcmVhZG9ubHkgbmV3VmVyc2lvbj86IHN0cmluZztcbiAgcmVhZG9ubHkgb3RwPzogc3RyaW5nO1xuICByZWFkb25seSBwYWNrYWdlTWFuYWdlcj86IHN0cmluZztcbiAgcmVhZG9ubHkgcHJpdmF0ZT86IGJvb2xlYW47XG4gIHJlYWRvbmx5IHF1aWV0PzogYm9vbGVhbjtcbiAgcmVhZG9ubHkgdGFnPzogc3RyaW5nO1xufVxuXG5leHBvcnQgdHlwZSBQdWJsaXNoQ2FsbGJhY2sgPSB0eXBlb2YgcHJvY2Vzcy5leGl0O1xuXG5leHBvcnQgY29uc3QgcHVibGlzaCA9IGFzeW5jIChjbWQ6IFB1Ymxpc2hPcHRpb25zLCBjYWxsYmFjazogUHVibGlzaENhbGxiYWNrID0gcHJvY2Vzcy5leGl0KTogUHJvbWlzZTxudW1iZXI+ID0+IHtcbiAgY29uc3Qge2J1bXAsIGNsaU5hbWUgPSAnTGV4JywgbmV3VmVyc2lvbiwgb3RwLCBwYWNrYWdlTWFuYWdlcjogY21kUGFja2FnZU1hbmFnZXIsIHByaXZhdGU6IGFjY2Vzc1ByaXZhdGUsIHRhZywgcXVpZXR9ID0gY21kO1xuICBsb2coYCR7Y2xpTmFtZX0gcHVibGlzaGluZyBucG0gbW9kdWxlLi4uYCwgJ2luZm8nLCBxdWlldCk7XG5cbiAgLy8gU3Bpbm5lclxuICBjb25zdCBzcGlubmVyID0gY3JlYXRlU3Bpbm5lcihxdWlldCk7XG5cbiAgLy8gR2V0IGN1c3RvbSBjb25maWd1cmF0aW9uXG4gIGF3YWl0IExleENvbmZpZy5wYXJzZUNvbmZpZyhjbWQpO1xuXG4gIGNvbnN0IHtwYWNrYWdlTWFuYWdlcjogY29uZmlnUGFja2FnZU1hbmFnZXJ9ID0gTGV4Q29uZmlnLmNvbmZpZztcbiAgY29uc3QgcGFja2FnZU1hbmFnZXI6IHN0cmluZyA9IGNtZFBhY2thZ2VNYW5hZ2VyIHx8IGNvbmZpZ1BhY2thZ2VNYW5hZ2VyO1xuICBjb25zdCBwdWJsaXNoT3B0aW9uczogc3RyaW5nW10gPSBbJ3B1Ymxpc2gnXTtcblxuICBpZihhY2Nlc3NQcml2YXRlKSB7XG4gICAgcHVibGlzaE9wdGlvbnMucHVzaCgnLS1hY2Nlc3MnLCAncmVzdHJpY3RlZCcpO1xuICB9XG5cbiAgaWYob3RwKSB7XG4gICAgcHVibGlzaE9wdGlvbnMucHVzaCgnLS1vdHAnLCBvdHApO1xuICB9XG5cbiAgaWYodGFnKSB7XG4gICAgcHVibGlzaE9wdGlvbnMucHVzaCgnLS10YWcnLCB0YWcpO1xuICB9XG5cbiAgLy8gR2V0IG5leHQgdmVyc2lvbiBudW1iZXJcbiAgbGV0IG5leHRWZXJzaW9uOiBzdHJpbmc7XG4gIGNvbnN0IHBhY2thZ2VQYXRoOiBzdHJpbmcgPSBgJHtwcm9jZXNzLmN3ZCgpfS9wYWNrYWdlLmpzb25gO1xuICBsZXQgcGFja2FnZUpzb247XG4gIGxldCBwYWNrYWdlTmFtZTogc3RyaW5nO1xuICBsZXQgcHJldlZlcnNpb246IHN0cmluZztcblxuICAvLyBJZiBub3QgdXNpbmcgeWFybiwgd2UnbGwgdXNlIG5wbSBhbmQgbWFudWFsbHkgdXBkYXRlIHRoZSB2ZXJzaW9uIG51bWJlclxuICB0cnkge1xuICAgIHBhY2thZ2VKc29uID0gZ2V0UGFja2FnZUpzb24ocGFja2FnZVBhdGgpO1xuICAgIHBhY2thZ2VOYW1lID0gcGFja2FnZUpzb24ubmFtZTtcbiAgICBwcmV2VmVyc2lvbiA9IHBhY2thZ2VKc29uLnZlcnNpb247XG4gIH0gY2F0Y2goZXJyb3IpIHtcbiAgICBsb2coYFxcbiR7Y2xpTmFtZX0gRXJyb3I6IFRoZSBmaWxlLCAke3BhY2thZ2VQYXRofSwgd2FzIG5vdCBmb3VuZCBvciBpcyBtYWxmb3JtZWQuXFxuYCwgJ2Vycm9yJywgcXVpZXQpO1xuICAgIGxvZyhlcnJvci5tZXNzYWdlLCAnZXJyb3InKTtcbiAgICBjYWxsYmFjaygxKTtcbiAgICByZXR1cm4gMTtcbiAgfVxuXG4gIC8vIFVwZGF0ZSBwYWNrYWdlLmpzb24gd2l0aCB0aGUgbGF0ZXN0IHZlcnNpb25cbiAgaWYobmV3VmVyc2lvbikge1xuICAgIC8vIElmIHVzaW5nIGEgc3BlY2lmaWMgdmVyc2lvbiwgd2UgZG9uJ3QgbmVlZCB0byBkZXRlcm1pbmUgdGhlIG5leHQgYnVtcFxuICAgIG5leHRWZXJzaW9uID0gbmV3VmVyc2lvbjtcbiAgfSBlbHNlIGlmKGJ1bXApIHtcbiAgICAvLyBEZXRlcm1pbmUgbmV4dCB2ZXJzaW9uXG4gICAgY29uc3QgZm9ybWF0QnVtcCA9IGJ1bXAudG9TdHJpbmcoKVxuICAgICAgLnRyaW0oKVxuICAgICAgLnRvTG93ZXJDYXNlKCk7XG5cbiAgICBpZihmb3JtYXRCdW1wKSB7XG4gICAgICBjb25zdCB2YWxpZFJlbGVhc2VzOiBzdHJpbmdbXSA9IFsnbWFqb3InLCAnbWlub3InLCAncGF0Y2gnXTtcbiAgICAgIGNvbnN0IHZhbGlkUHJlUmVsZWFzZXM6IHN0cmluZ1tdID0gWydhbHBoYScsICdiZXRhJywgJ3JjJ107XG5cbiAgICAgIC8vIE1ha2Ugc3VyZSB0aGUgdmVyc2lvbiBpbiBwYWNrYWdlLmpzb24gaXMgdmFsaWRcbiAgICAgIGNvbnN0IHBhY2thZ2VWZXJzaW9uID0gc2VtdmVyLmNvZXJjZShwcmV2VmVyc2lvbik7XG5cbiAgICAgIGlmKCFzZW12ZXIudmFsaWQocGFja2FnZVZlcnNpb24pKSB7XG4gICAgICAgIGxvZyhgXFxuJHtjbGlOYW1lfSBFcnJvcjogVmVyc2lvbiBpcyBpbnZhbGlkIGluIHBhY2thZ2UuanNvbmAsICdlcnJvcicsIHF1aWV0KTtcbiAgICAgICAgY2FsbGJhY2soMSk7XG4gICAgICAgIHJldHVybiAxO1xuICAgICAgfVxuXG4gICAgICBpZih2YWxpZFJlbGVhc2VzLmluY2x1ZGVzKGZvcm1hdEJ1bXApKSB7XG4gICAgICAgIG5leHRWZXJzaW9uID0gc2VtdmVyLmluYyhwYWNrYWdlVmVyc2lvbiwgZm9ybWF0QnVtcCBhcyBSZWxlYXNlVHlwZSk7XG4gICAgICB9IGVsc2UgaWYodmFsaWRQcmVSZWxlYXNlcy5pbmNsdWRlcyhmb3JtYXRCdW1wKSkge1xuICAgICAgICBuZXh0VmVyc2lvbiA9IHNlbXZlci5pbmMocGFja2FnZVZlcnNpb24sICdwcmVyZWxlYXNlJywgZm9ybWF0QnVtcCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBsb2coYFxcbiR7Y2xpTmFtZX0gRXJyb3I6IEJ1bXAgdHlwZSBpcyBpbnZhbGlkLiBwbGVhc2UgbWFrZSBzdXJlIGl0IGlzIG9uZSBvZiB0aGUgZm9sbG93aW5nOiAke3ZhbGlkUmVsZWFzZXMuam9pbignLCAnKX0sICR7dmFsaWRQcmVSZWxlYXNlcy5qb2luKCcsICcpfWAsICdlcnJvcicsIHF1aWV0KTtcbiAgICAgICAgY2FsbGJhY2soMSk7XG4gICAgICAgIHJldHVybiAxO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBsb2coYFxcbiR7Y2xpTmFtZX0gRXJyb3I6IEJ1bXAgdHlwZSBpcyBtaXNzaW5nLmAsICdlcnJvcicsIHF1aWV0KTtcbiAgICAgIGNhbGxiYWNrKDEpO1xuICAgICAgcmV0dXJuIDE7XG4gICAgfVxuICB9XG5cbiAgaWYobmV4dFZlcnNpb24gJiYgcGFja2FnZU1hbmFnZXIgPT09ICd5YXJuJykge1xuICAgIHB1Ymxpc2hPcHRpb25zLnB1c2goJy0tbmV3LXZlcnNpb24nLCBuZXh0VmVyc2lvbik7XG4gIH0gZWxzZSBpZihuZXh0VmVyc2lvbiAmJiBwYWNrYWdlSnNvbikge1xuICAgIHRyeSB7XG4gICAgICAvLyBTYXZlIHVwZGF0ZWQgdmVyc2lvblxuICAgICAgc2V0UGFja2FnZUpzb24oey4uLnBhY2thZ2VKc29uLCB2ZXJzaW9uOiBuZXh0VmVyc2lvbn0sIHBhY2thZ2VQYXRoKTtcbiAgICB9IGNhdGNoKGVycm9yKSB7XG4gICAgICBsb2coYFxcbiR7Y2xpTmFtZX0gRXJyb3I6IFRoZSBmaWxlLCAke3BhY2thZ2VQYXRofSwgd2FzIG5vdCBmb3VuZCBvciBpcyBtYWxmb3JtZWQuICR7ZXJyb3IubWVzc2FnZX1gLCAnZXJyb3InLCBxdWlldCk7XG4gICAgICBjYWxsYmFjaygxKTtcbiAgICAgIHJldHVybiAxO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBuZXh0VmVyc2lvbiA9IHByZXZWZXJzaW9uO1xuICB9XG5cbiAgdHJ5IHtcbiAgICBhd2FpdCBleGVjYShwYWNrYWdlTWFuYWdlciwgcHVibGlzaE9wdGlvbnMsIHtcbiAgICAgIGVuY29kaW5nOiAndXRmOCcsXG4gICAgICBzdGRpbzogJ2luaGVyaXQnXG4gICAgfSk7XG5cbiAgICBzcGlubmVyLnN1Y2NlZWQoYFN1Y2Nlc3NmdWxseSBwdWJsaXNoZWQgbnBtIHBhY2thZ2U6ICR7cGFja2FnZU5hbWV9IWApO1xuXG4gICAgLy8gS2lsbCBwcm9jZXNzXG4gICAgY2FsbGJhY2soMCk7XG4gICAgcmV0dXJuIDA7XG4gIH0gY2F0Y2goZXJyb3IpIHtcbiAgICAvLyBEaXNwbGF5IGVycm9yIG1lc3NhZ2VcbiAgICBsb2coYFxcbiR7Y2xpTmFtZX0gRXJyb3I6ICR7ZXJyb3IubWVzc2FnZX1gLCAnZXJyb3InLCBxdWlldCk7XG5cbiAgICAvLyBTdG9wIHNwaW5uZXJcbiAgICBzcGlubmVyLmZhaWwoJ1B1Ymxpc2hpbmcgdG8gbnBtIGhhcyBmYWlsZWQuJyk7XG5cbiAgICAvLyBLaWxsIHByb2Nlc3NcbiAgICBjYWxsYmFjaygxKTtcbiAgICByZXR1cm4gMTtcbiAgfVxufTsiXSwibmFtZXMiOlsiZXhlY2EiLCJzZW12ZXIiLCJMZXhDb25maWciLCJjcmVhdGVTcGlubmVyIiwiZ2V0UGFja2FnZUpzb24iLCJzZXRQYWNrYWdlSnNvbiIsImxvZyIsInB1Ymxpc2giLCJjbWQiLCJjYWxsYmFjayIsInByb2Nlc3MiLCJleGl0IiwiYnVtcCIsImNsaU5hbWUiLCJuZXdWZXJzaW9uIiwib3RwIiwicGFja2FnZU1hbmFnZXIiLCJjbWRQYWNrYWdlTWFuYWdlciIsInByaXZhdGUiLCJhY2Nlc3NQcml2YXRlIiwidGFnIiwicXVpZXQiLCJzcGlubmVyIiwicGFyc2VDb25maWciLCJjb25maWdQYWNrYWdlTWFuYWdlciIsImNvbmZpZyIsInB1Ymxpc2hPcHRpb25zIiwicHVzaCIsIm5leHRWZXJzaW9uIiwicGFja2FnZVBhdGgiLCJjd2QiLCJwYWNrYWdlSnNvbiIsInBhY2thZ2VOYW1lIiwicHJldlZlcnNpb24iLCJuYW1lIiwidmVyc2lvbiIsImVycm9yIiwibWVzc2FnZSIsImZvcm1hdEJ1bXAiLCJ0b1N0cmluZyIsInRyaW0iLCJ0b0xvd2VyQ2FzZSIsInZhbGlkUmVsZWFzZXMiLCJ2YWxpZFByZVJlbGVhc2VzIiwicGFja2FnZVZlcnNpb24iLCJjb2VyY2UiLCJ2YWxpZCIsImluY2x1ZGVzIiwiaW5jIiwiam9pbiIsImVuY29kaW5nIiwic3RkaW8iLCJzdWNjZWVkIiwiZmFpbCJdLCJtYXBwaW5ncyI6IkFBQUE7OztDQUdDLEdBQ0QsU0FBUUEsS0FBSyxRQUFPLFFBQVE7QUFDNUIsT0FBT0MsWUFBMkIsU0FB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