mirror of
https://github.com/PaulHatch/semantic-version.git
synced 2025-12-27 13:08:17 +00:00
Set Jest config file in package script Include module path Include tests in project folders Remove index module exports Hardcode configuration parameters Move parameter binding into main run function Use alias imports Run test sequentially Remove cleanup (async conflict) Revert Jest option Increase test timeout to 15 seconds
90 lines
4.8 KiB
JavaScript
90 lines
4.8 KiB
JavaScript
"use strict";
|
|
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
return new (P || (P = Promise))(function (resolve, reject) {
|
|
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
});
|
|
};
|
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
exports.DefaultVersionClassifier = void 0;
|
|
const VersionClassification_1 = require("./VersionClassification");
|
|
const VersionType_1 = require("./VersionType");
|
|
class DefaultVersionClassifier {
|
|
constructor(config) {
|
|
const searchBody = config.searchCommitBody;
|
|
this.majorPattern = this.parsePattern(config.majorPattern, searchBody);
|
|
this.minorPattern = this.parsePattern(config.minorPattern, searchBody);
|
|
}
|
|
parsePattern(pattern, searchBody) {
|
|
if (pattern.startsWith('/') && pattern.endsWith('/')) {
|
|
var regex = new RegExp(pattern.slice(1, -1));
|
|
return searchBody ?
|
|
(commit) => regex.test(commit.subject) || regex.test(commit.body) :
|
|
(commit) => regex.test(commit.subject);
|
|
}
|
|
else {
|
|
const matchString = pattern;
|
|
return searchBody ?
|
|
(commit) => commit.subject.includes(matchString) || commit.body.includes(matchString) :
|
|
(commit) => commit.subject.includes(matchString);
|
|
}
|
|
}
|
|
getNextVersion(current, type) {
|
|
switch (type) {
|
|
case VersionType_1.VersionType.Major:
|
|
return { major: current.major + 1, minor: 0, patch: 0 };
|
|
case VersionType_1.VersionType.Minor:
|
|
return { major: current.major, minor: current.minor + 1, patch: 0 };
|
|
case VersionType_1.VersionType.Patch:
|
|
return { major: current.major, minor: current.minor, patch: current.patch + 1 };
|
|
case VersionType_1.VersionType.None:
|
|
return { major: current.major, minor: current.minor, patch: current.patch };
|
|
default:
|
|
throw new Error(`Unknown change type: ${type}`);
|
|
}
|
|
}
|
|
resolveCommitType(commitsSet) {
|
|
if (commitsSet.commits.length === 0) {
|
|
return { type: VersionType_1.VersionType.None, increment: 0, changed: commitsSet.changed };
|
|
}
|
|
const commits = commitsSet.commits.reverse();
|
|
let index = 1;
|
|
for (let commit of commits) {
|
|
if (this.majorPattern(commit)) {
|
|
return { type: VersionType_1.VersionType.Major, increment: commits.length - index, changed: commitsSet.changed };
|
|
}
|
|
index++;
|
|
}
|
|
index = 1;
|
|
for (let commit of commits) {
|
|
if (this.minorPattern(commit)) {
|
|
return { type: VersionType_1.VersionType.Minor, increment: commits.length - index, changed: commitsSet.changed };
|
|
}
|
|
index++;
|
|
}
|
|
return { type: VersionType_1.VersionType.Patch, increment: commitsSet.commits.length - 1, changed: true };
|
|
}
|
|
ClassifyAsync(lastRelease, commitSet) {
|
|
return __awaiter(this, void 0, void 0, function* () {
|
|
const { type, increment, changed } = this.resolveCommitType(commitSet);
|
|
const { major, minor, patch } = this.getNextVersion(lastRelease, type);
|
|
if (lastRelease.currentPatch !== null) {
|
|
// If the current commit is tagged, we must use that version. Here we check if the version we have resolved from the
|
|
// previous commits is the same as the current version. If it is, we will use the increment value, otherwise we reset
|
|
// to zero. For example:
|
|
// - commit 1 - v1.0.0+0
|
|
// - commit 2 - v1.0.0+1
|
|
// - commit 3 was tagged v2.0.0 - v2.0.0+0
|
|
// - commit 4 - v2.0.1+0
|
|
const versionsMatch = lastRelease.currentMajor === major && lastRelease.currentMinor === minor && lastRelease.currentPatch === patch;
|
|
const currentIncremement = versionsMatch ? increment : 0;
|
|
return new VersionClassification_1.VersionClassification(VersionType_1.VersionType.None, currentIncremement, false, lastRelease.currentMajor, lastRelease.currentMinor, lastRelease.currentPatch);
|
|
}
|
|
return new VersionClassification_1.VersionClassification(type, increment, changed, major, minor, patch);
|
|
});
|
|
}
|
|
}
|
|
exports.DefaultVersionClassifier = DefaultVersionClassifier;
|