ut-tools
Version:
Build and Release management automation package.
52 lines • 2.32 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.CasingType = void 0;
const lodash_1 = require("lodash");
const spectral_core_1 = require("@stoplight/spectral-core");
const optionSchemas_1 = require("./optionSchemas");
const types_1 = require("./types");
Object.defineProperty(exports, "CasingType", { enumerable: true, get: function () { return types_1.CasingType; } });
const CASES = {
[types_1.CasingType.flat]: '[a-z][a-z{__DIGITS__}]*',
[types_1.CasingType.camel]: '[a-z][a-z{__DIGITS__}]*(?:[A-Z{__DIGITS__}](?:[a-z{__DIGITS__}]+|$))*',
[types_1.CasingType.pascal]: '[A-Z][a-z{__DIGITS__}]*(?:[A-Z{__DIGITS__}](?:[a-z{__DIGITS__}]+|$))*',
[types_1.CasingType.kebab]: '[a-z][a-z{__DIGITS__}]*(?:-[a-z{__DIGITS__}]+)*',
[types_1.CasingType.cobol]: '[A-Z][A-Z{__DIGITS__}]*(?:-[A-Z{__DIGITS__}]+)*',
[types_1.CasingType.snake]: '[a-z][a-z{__DIGITS__}]*(?:_[a-z{__DIGITS__}]+)*',
[types_1.CasingType.macro]: '[A-Z][A-Z{__DIGITS__}]*(?:_[A-Z{__DIGITS__}]+)*',
};
exports.default = (0, spectral_core_1.createRulesetFunction)({
input: {
type: 'string',
minLength: 1,
},
options: optionSchemas_1.optionSchemas.casing,
}, function casing(targetVal, opts) {
if (targetVal.length === 1 &&
opts.separator !== void 0 &&
opts.separator.allowLeading === true &&
targetVal === opts.separator.char) {
return;
}
const casingValidator = buildFrom(CASES[opts.type], opts);
if (casingValidator.test(targetVal)) {
return;
}
return [
{
message: `must be ${opts.type} case`,
},
];
});
const DIGITS_PATTERN = '0-9';
const buildFrom = (basePattern, overrides) => {
const injectDigits = overrides.disallowDigits !== true;
const pattern = basePattern.replace(/\{__DIGITS__\}/g, injectDigits ? DIGITS_PATTERN : '');
if (overrides.separator === undefined) {
return new RegExp(`^${pattern}$`);
}
const separatorPattern = `[${(0, lodash_1.escapeRegExp)(overrides.separator.char)}]`;
const leadingSeparatorPattern = overrides.separator.allowLeading === true ? `${separatorPattern}?` : '';
return new RegExp(`^${leadingSeparatorPattern}${pattern}(?:${separatorPattern}${pattern})*$`);
};
//# sourceMappingURL=casing.js.map