UNPKG

declapract

Version:

A tool to declaratively define best practices, maintainable evolve them, and scalably enforce them.

68 lines 3.46 kB
"use strict"; 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