@aliceplex/core
Version:
[![License][license_badge]][license] [![Pipelines][pipelines_badge]][pipelines] [![Coverage][coverage_badge]][pipelines] [![NPM][npm_badge]][npm] [![semantic-release][semantic_release_badge]][semantic_release]
52 lines • 1.91 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
const ajv_1 = __importDefault(require("ajv"));
const lodash_1 = __importDefault(require("lodash"));
const schema_1 = require("./schema");
var Schema;
(function (Schema) {
Schema["Show"] = "show";
Schema["Movie"] = "movie";
Schema["Album"] = "album";
Schema["Artist"] = "artist";
Schema["Episode"] = "episode";
Schema["Actor"] = "actor";
})(Schema || (Schema = {}));
exports.createAjv = (options = { allErrors: true, format: "full" }) => {
const ajv = new ajv_1.default(options);
ajv.addSchema(schema_1.Schemas.Definitions);
ajv.addSchema(schema_1.Schemas.Actor, Schema.Actor);
ajv.addSchema(schema_1.Schemas.Show, Schema.Show);
ajv.addSchema(schema_1.Schemas.Movie, Schema.Movie);
ajv.addSchema(schema_1.Schemas.Album, Schema.Album);
ajv.addSchema(schema_1.Schemas.Artist, Schema.Artist);
ajv.addSchema(schema_1.Schemas.Episode, Schema.Episode);
return ajv;
};
exports.validateSchema = (data, schema, options) => {
const { ajv } = options;
const validate = ajv.getSchema(schema);
const valid = validate(data);
return {
valid: !!valid,
errors: validate.errors || []
};
};
exports.toSerializedModel = (data, options) => {
let errors = [];
for (const schema of Object.values(Schema)) {
const result = exports.validateSchema(data, schema, options);
if (result.valid) {
return data;
}
if (lodash_1.default.isArray(result.errors) &&
(errors.length <= 0 || errors.length > result.errors.length)) {
errors = result.errors;
}
}
throw new Error(JSON.stringify(errors, null, 2));
};
//# sourceMappingURL=validate.js.map