"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; }