ut-tools
Version:
Build and Release management automation package.
86 lines • 3.67 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.createValidator = void 0;
const tslib_1 = require("tslib");
const ajv_1 = (0, tslib_1.__importStar)(require("ajv"));
const names_1 = (0, tslib_1.__importDefault)(require("ajv/dist/compile/names"));
const ajv_formats_1 = (0, tslib_1.__importDefault)(require("ajv-formats"));
const ajv_errors_1 = (0, tslib_1.__importDefault)(require("ajv-errors"));
const ruleSchema = (0, tslib_1.__importStar)(require("../meta/rule.schema.json"));
const shared = (0, tslib_1.__importStar)(require("../meta/shared.json"));
const rulesetSchema = (0, tslib_1.__importStar)(require("../meta/ruleset.schema.json"));
const jsExtensions = (0, tslib_1.__importStar)(require("../meta/js-extensions.json"));
const jsonExtensions = (0, tslib_1.__importStar)(require("../meta/json-extensions.json"));
const alias_1 = require("./validators/alias");
const function_1 = require("./validators/function");
const validators = {
js: null,
json: null,
};
function createValidator(format) {
const existingValidator = validators[format];
if (existingValidator !== null) {
return existingValidator;
}
const ajv = new ajv_1.default({
allErrors: true,
strict: true,
strictRequired: false,
keywords: ['$anchor'],
schemas: [ruleSchema, shared],
passContext: true,
});
(0, ajv_formats_1.default)(ajv);
(0, ajv_errors_1.default)(ajv);
ajv.addKeyword({
keyword: 'x-spectral-runtime',
schemaType: 'string',
error: {
message(cxt) {
var _a;
return (0, ajv_1._) `${((_a = cxt.params) === null || _a === void 0 ? void 0 : _a.message) !== void 0 ? cxt.params.message : ''}`;
},
params(cxt) {
var _a;
return (0, ajv_1._) `{ errors: ${((_a = cxt.params) === null || _a === void 0 ? void 0 : _a.errors) !== void 0 && cxt.params.errors} || [] }`;
},
},
code(cxt) {
const { data } = cxt;
switch (cxt.schema) {
case 'format':
cxt.fail((0, ajv_1._) `typeof ${data} !== "function"`);
break;
case 'ruleset-function': {
const fn = cxt.gen.const('spectralFunction', (0, ajv_1._) `this.validateFunction(${data}.function, ${data}.functionOptions === void 0 ? null : ${data}.functionOptions, ${names_1.default.instancePath})`);
cxt.gen.if((0, ajv_1._) `${fn} !== void 0`);
cxt.error(false, { errors: fn });
cxt.gen.endIf();
break;
}
case 'alias': {
const alias = cxt.gen.const('spectralAlias', (0, ajv_1._) `this.validateAlias(${names_1.default.rootData}, ${data}, ${names_1.default.instancePath})`);
cxt.gen.if((0, ajv_1._) `${alias} !== void 0`);
cxt.error(false, { errors: alias });
cxt.gen.endIf();
break;
}
}
},
});
if (format === 'js') {
ajv.addSchema(jsExtensions);
}
else {
ajv.addSchema(jsonExtensions);
}
const validator = new Proxy(ajv.compile(rulesetSchema), {
apply(target, thisArg, args) {
return Reflect.apply(target, { validateAlias: alias_1.validateAlias, validateFunction: function_1.validateFunction }, args);
},
});
validators[format] = validator;
return validator;
}
exports.createValidator = createValidator;
//# sourceMappingURL=ajv.js.map