UNPKG

r2-streamer-js

Version:

Readium 2 'streamer' for NodeJS (TypeScript)

108 lines 4.8 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.jsonSchemaValidate = jsonSchemaValidate; var ajv_1 = require("ajv"); var ajv_formats_1 = require("ajv-formats"); var debug_ = require("debug"); var fs = require("fs"); var path = require("path"); var debug = debug_("r2:streamer#utils/json-schema-validate"); var _cachedJsonSchemas = {}; function jsonSchemaValidate(jsonSchemasRootpath, jsonSchemasNames, jsonToValidate) { var _a; try { for (var _i = 0, jsonSchemasNames_1 = jsonSchemasNames; _i < jsonSchemasNames_1.length; _i++) { var jsonSchemaName = jsonSchemasNames_1[_i]; var jsonSchemaName_ = jsonSchemaName.replace(/\//g, path.sep); var jsonSchemaPath = path.join(jsonSchemasRootpath, jsonSchemaName_ + ".schema.json"); if (_cachedJsonSchemas[jsonSchemaPath]) { continue; } if (!fs.existsSync(jsonSchemaPath)) { debug("Skipping JSON SCHEMAS (not found): " + jsonSchemaPath); return undefined; } var jsonSchemaStr = fs.readFileSync(jsonSchemaPath, { encoding: "utf8" }); if (!jsonSchemaStr) { debug("File load fail: " + jsonSchemaPath); return undefined; } jsonSchemaStr = jsonSchemaStr.replace(/\?<grandfathered>/g, ""); jsonSchemaStr = jsonSchemaStr.replace(/\?<privateUse>/g, ""); jsonSchemaStr = jsonSchemaStr.replace(/\?<privateUse2>/g, ""); jsonSchemaStr = jsonSchemaStr.replace(/\?<extension>/g, ""); jsonSchemaStr = jsonSchemaStr.replace(/\?<variant>/g, ""); jsonSchemaStr = jsonSchemaStr.replace(/\?<script>/g, ""); jsonSchemaStr = jsonSchemaStr.replace(/\?<extlang>/g, ""); jsonSchemaStr = jsonSchemaStr.replace(/\?<language>/g, ""); jsonSchemaStr = jsonSchemaStr.replace(/\?<region>/g, ""); if (jsonSchemaStr.indexOf("?<") >= 0) { debug("REGEX WARNING!!"); return undefined; } var jsonSchema = global.JSON.parse(jsonSchemaStr); debug("JSON SCHEMA is now cached: ".concat(jsonSchema["$id"], " (").concat(jsonSchemaPath, ")")); _cachedJsonSchemas[jsonSchemaPath] = jsonSchema; } var ajv = new ajv_1.default({ allErrors: true, allowUnionTypes: true, coerceTypes: false, strict: true, strictRequired: "log", validateFormats: true, verbose: true, }); (0, ajv_formats_1.default)(ajv); var idRoot = void 0; for (var _b = 0, jsonSchemasNames_2 = jsonSchemasNames; _b < jsonSchemasNames_2.length; _b++) { var jsonSchemaName = jsonSchemasNames_2[_b]; var jsonSchemaPath = path.join(jsonSchemasRootpath, jsonSchemaName + ".schema.json"); var jsonSchema = _cachedJsonSchemas[jsonSchemaPath]; if (!jsonSchema) { debug("!jsonSchema?? " + jsonSchemaPath); return undefined; } if (!idRoot) { idRoot = jsonSchema["$id"]; } ajv.addSchema(jsonSchema, jsonSchema["$id"]); } if (!idRoot) { debug("!idRoot?? "); return undefined; } var ajvValid = ajv.validate(idRoot, jsonToValidate); if (!ajvValid) { var errors = ajv.errors; if (errors) { var errs = []; for (var _c = 0, errors_1 = errors; _c < errors_1.length; _c++) { var err = errors_1[_c]; var jsonPath = (_a = err.instancePath) === null || _a === void 0 ? void 0 : _a.replace(/^\./, "").replace(/\[([0-9]+)\]/g, ".$1"); errs.push({ ajvDataPath: err.instancePath, ajvMessage: err.message ? err.message : "", ajvSchemaPath: err.schemaPath, jsonPath: jsonPath, }); } return errs; } } } catch (err) { debug("JSON Schema VALIDATION PROBLEM."); debug(err); var errs = []; errs.push({ ajvDataPath: typeof (err === null || err === void 0 ? void 0 : err.toString) === "function" ? err.toString() : "ajvDataPath", ajvMessage: typeof (err === null || err === void 0 ? void 0 : err.message) === "string" ? err.message : "ajvMessage", ajvSchemaPath: "ajvSchemaPath", jsonPath: "jsonPath", }); return errs; } return undefined; } //# sourceMappingURL=json-schema-validate.js.map