UNPKG

@forzalabs/remora

Version:

A powerful CLI tool for seamless data translation.

68 lines (67 loc) 2.76 kB
"use strict"; 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 ajv_formats_1 = __importDefault(require("ajv-formats")); const fs_1 = __importDefault(require("fs")); const path_1 = __importDefault(require("path")); const Affirm_1 = __importDefault(require("../../core/Affirm")); class SchemaValidatorClass { constructor() { this.addSchema = (schema, schemaKey) => { const isValid = this.ajv.validateSchema(schema); (0, Affirm_1.default)(isValid, `Invalid JSON Schema: ${JSON.stringify(this.ajv.errors)}`); this.ajv.addSchema(schema, schemaKey); }; this.getSchema = (schemaKey) => { return this.ajv.getSchema(schemaKey); }; this.validate = (schemaKey, data) => { var _a; const validateFn = this.ajv.getSchema(schemaKey); (0, Affirm_1.default)(validateFn, `Failed to get validator for schema '${schemaKey}'`); const isValid = validateFn(data); return { isValid, errors: (_a = validateFn.errors) !== null && _a !== void 0 ? _a : [], data }; }; this.validateAndReturn = (schemaKey, data) => { const res = this.validate(schemaKey, data); if (res.isValid) return res.data; else return null; }; this.unloadSchemas = () => { const result = this.ajv.removeSchema(); (0, Affirm_1.default)(result, `Failed to remove schemas`); this.loadInternalSchema(); return true; }; this.loadInternalSchema = () => { const internalSchemaDir = path_1.default.join(__dirname, '../../definitions/json_schemas'); const internalSchemas = [ 'project-schema', 'source-schema', 'producer-schema', 'consumer-schema' ]; internalSchemas.forEach(sn => { const sp = path_1.default.join(internalSchemaDir, `${sn}.json`); const parsed = JSON.parse(fs_1.default.readFileSync(sp, 'utf-8')); this.addSchema(parsed, sn); }); return true; }; this.ajv = new ajv_1.default({ allErrors: true, strict: true, strictSchema: false, validateFormats: true }); (0, ajv_formats_1.default)(this.ajv); this.loadInternalSchema(); } } const SchemaValidator = new SchemaValidatorClass(); exports.default = SchemaValidator;