UNPKG

json-schema-library

Version:

Customizable and hackable json-validator and json-schema utilities for traversal, data generation and validation

43 lines (42 loc) 1.59 kB
import { getValue } from "../utils/getValue"; import { isObject } from "../utils/isObject"; import { validateNode } from "../validateNode"; export const propertiesKeyword = { id: "property", keyword: "properties", parse: parseProperties, addResolve: (node) => node.properties != null, resolve: propertyResolver, addValidate: (node) => node.properties != null, validate: validateProperties }; function propertyResolver({ node, key }) { var _a; return (_a = node.properties) === null || _a === void 0 ? void 0 : _a[key]; } export function parseProperties(node) { const { schema, evaluationPath, schemaLocation } = node; if (schema.properties) { node.properties = {}; Object.keys(schema.properties).forEach((propertyName) => { const propertyNode = node.compileSchema(schema.properties[propertyName], `${evaluationPath}/properties/${propertyName}`, `${schemaLocation}/properties/${propertyName}`); node.properties[propertyName] = propertyNode; }); } } function validateProperties({ node, data, pointer, path }) { if (!isObject(data)) { return; } // move validation through properties const errors = []; Object.keys(data).forEach((propertyName) => { if (node.properties[propertyName] == null) { return; } const propertyNode = node.properties[propertyName]; const result = validateNode(propertyNode, getValue(data, propertyName), `${pointer}/${propertyName}`, path); errors.push(...result); }); return errors; }