git-release-manager
Version:
A tool to generate release notes from git commit history
70 lines • 3.01 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.incrementVersion = void 0;
const semver_1 = __importDefault(require("semver"));
const incrementVersion = (version, type, options = {}) => {
const { prefix, build, channel, prerelease, channelNumber } = options;
let versionWithoutPrefix = removePrefixAndBuild(version, prefix);
if (!semver_1.default.valid(versionWithoutPrefix)) {
throw new Error(`Invalid version format: ${version}`);
}
let newVersion = type ? incrementVersionCore(versionWithoutPrefix, type) : versionWithoutPrefix;
if (channel || prerelease) {
// Clear any existing prerelease if type is specified (since it means a new increment)
if (type) {
newVersion = clearPrerelease(newVersion);
}
newVersion = addPrereleaseOrChannel(newVersion, versionWithoutPrefix, options);
}
if (build) {
newVersion = `${newVersion}+${build}`;
}
return finalizeVersion(newVersion, prefix);
};
exports.incrementVersion = incrementVersion;
const incrementVersionCore = (version, type) => {
var _a;
return (_a = semver_1.default.inc(version, type)) !== null && _a !== void 0 ? _a : version;
};
const removePrefixAndBuild = (version, prefix) => {
let baseVersion = prefix ? version.replace(prefix, '') : version;
return baseVersion.split('+')[0];
};
const addPrereleaseOrChannel = (baseVersion, versionWithoutPrefix, options) => {
const { channel, channelNumber, prerelease } = options;
if (prerelease) {
// For prerelease, append without a numerical suffix
// If there's an existing prerelease, return it as it is
if (semver_1.default.prerelease(baseVersion)) {
return baseVersion;
}
return `${baseVersion}-${prerelease}`;
}
if (channel) {
const currentPrerelease = semver_1.default.prerelease(baseVersion);
const isExistingChannel = currentPrerelease && currentPrerelease[0] === channel;
if (isExistingChannel && channelNumber) {
const currentNumber = parseInt(currentPrerelease[1], 10) || 0;
return `${baseVersion.split('-')[0]}-${channel}.${currentNumber + 1}`;
}
if (!channelNumber) {
// If there is no -channel suffix or channelNumber is false, append channel without number
return `${baseVersion.split('-')[0]}-${channel}`;
}
else {
// If no existing channel, and channelNumber is true, start numbering from .1
return `${baseVersion.split('-')[0]}-${channel}.1`;
}
}
return baseVersion;
};
const clearPrerelease = (version) => {
return version.split('-')[0];
};
const finalizeVersion = (version, prefix) => {
return prefix ? `${prefix}${version}` : version;
};
//# sourceMappingURL=versionFormatter.js.map