NODEDC_1C/llm_normalizer/backend/dist/services/schemaValidator.js

58 lines
2.1 KiB
JavaScript

"use strict";
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.validateNormalized = validateNormalized;
exports.assertNormalized = assertNormalized;
const fs_1 = __importDefault(require("fs"));
const path_1 = __importDefault(require("path"));
const _2020_1 = __importDefault(require("ajv/dist/2020"));
const config_1 = require("../config");
const validators = new Map();
function schemaPath(version) {
if (version === "v1") {
return path_1.default.resolve(config_1.SCHEMAS_DIR, "normalized_query_v1.json");
}
if (version === "v2_0_1") {
return path_1.default.resolve(config_1.SCHEMAS_DIR, "normalized_query_v2_0_1.json");
}
if (version === "v2_0_2") {
return path_1.default.resolve(config_1.SCHEMAS_DIR, "normalized_query_v2_0_2.json");
}
return path_1.default.resolve(config_1.SCHEMAS_DIR, "normalized_query_v2.json");
}
function loadValidator(version) {
const cached = validators.get(version);
if (cached) {
return cached;
}
const raw = fs_1.default.readFileSync(schemaPath(version), "utf-8");
const schema = JSON.parse(raw);
const ajv = new _2020_1.default({ allErrors: true, strict: false });
const compiled = ajv.compile(schema);
validators.set(version, compiled);
return compiled;
}
function normalizeAjvErrors(errors) {
if (!errors || errors.length === 0) {
return [];
}
return errors.map((item) => `${item.instancePath || "/"} ${item.message ?? "validation error"}`.trim());
}
function validateNormalized(payload, schemaVersion = "v1") {
const check = loadValidator(schemaVersion);
const passed = check(payload);
return {
passed: Boolean(passed),
errors: passed ? [] : normalizeAjvErrors(check.errors)
};
}
function assertNormalized(payload, schemaVersion = "v1") {
const validation = validateNormalized(payload, schemaVersion);
if (!validation.passed) {
throw new Error(`Invalid normalized JSON: ${validation.errors.join("; ")}`);
}
return payload;
}