declapract
Version:
A tool to declaratively define best practices, maintainable evolve them, and scalably enforce them.
68 lines • 3.46 kB
JavaScript
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.defineMinPackageVersionRegex = exports.defineRegexPartForNumberGreaterThan = void 0;
const joi_1 = __importDefault(require("joi"));
const UserInputError_1 = require("../../UserInputError");
const defineRegexPartForNumberGreaterThan = (greaterThan) => {
// check that its an integer
const validationResult = joi_1.default.number()
.integer()
.positive()
.allow(0)
.validate(greaterThan);
if (validationResult.error)
throw new Error(`not a positive integer: '${greaterThan}'`);
// build the regex string
const sameNumberOfDigitsPart = [...greaterThan]
.map((digitChar) => {
if (digitChar === '9')
return '9';
return `[${digitChar}-9]`;
})
.join('');
const moreDigitsPart = [
Array.from({ length: greaterThan.length + 1 }, () => '[0-9]').join(''),
'+', // + to say ("or more" digits)
].join('');
return `(${moreDigitsPart}|${sameNumberOfDigitsPart})`;
};
exports.defineRegexPartForNumberGreaterThan = defineRegexPartForNumberGreaterThan;
const defineMinPackageVersionRegex = (minVersion) => {
try {
// for each part of the semver version, specify the regexp
const [major, minor = '0', patch = '0', ...more] = minVersion.split('.'); // default minor and patch to zero
if (more.length)
// fail fast if not a valid semver
throw new Error(`semver versions should only have three parts. '${minVersion}' has ${minVersion.split.length} parts`);
// define regex for greater or equal to the patch version
const greaterThanOrEqualToPatchRegex = [
(0, exports.defineRegexPartForNumberGreaterThan)(major),
(0, exports.defineRegexPartForNumberGreaterThan)(minor),
(0, exports.defineRegexPartForNumberGreaterThan)(patch),
].join('.');
// define regex for greater or equal to the minor version
const greaterThanOrEqualToMinorRegex = [
(0, exports.defineRegexPartForNumberGreaterThan)(major),
(0, exports.defineRegexPartForNumberGreaterThan)(`${parseInt(minor, 10) + 1}`),
(0, exports.defineRegexPartForNumberGreaterThan)('0'),
].join('.');
// define regex for greater or equal to the major version
const greaterThanOrEqualToMajorRegex = [
(0, exports.defineRegexPartForNumberGreaterThan)(`${parseInt(major, 10) + 1}`),
(0, exports.defineRegexPartForNumberGreaterThan)('0'),
(0, exports.defineRegexPartForNumberGreaterThan)('0'),
].join('.');
// define regexp for greater or equal to the minor version
return new RegExp(`^(${greaterThanOrEqualToMajorRegex}|${greaterThanOrEqualToMinorRegex}|${greaterThanOrEqualToPatchRegex})$`);
}
catch (error) {
throw new UserInputError_1.UserInputError(`input to defineMinPackageVersionRegex was not a valid semver version number: ${error.message}`, {
potentialSolution: `change '${minVersion}' to a valid semver version number. (e.g., '0.8.21' or '7.0.0')`,
});
}
};
exports.defineMinPackageVersionRegex = defineMinPackageVersionRegex;
//# sourceMappingURL=defineMinPackageVersionRegex.js.map
;