@forzalabs/remora
Version:
A powerful CLI tool for seamless data translation.
68 lines (67 loc) • 2.76 kB
JavaScript
"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;