UNPKG

json-schema-library

Version:

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

33 lines (28 loc) 1.09 kB
import { getValue } from "../utils/getValue"; import { isObject } from "../utils/isObject"; import { SchemaNode } from "../types"; export type DataNode = { node: SchemaNode; value: unknown; pointer: string }; export function toDataNodes(node: SchemaNode, data: unknown, pointer = "#", dataNodes: DataNode[] = []) { const currentNode = node.resolveRef(); dataNodes.push({ node: currentNode, value: data, pointer }); if (isObject(data)) { Object.keys(data).forEach((key) => { const { node: nextNode } = currentNode.getNodeChild(key, data); if (nextNode) { toDataNodes(nextNode, getValue(data, key), `${pointer}/${key}`, dataNodes); } }); } else if (Array.isArray(data)) { data.forEach((next: unknown, key: number) => { const { node: nextNode } = currentNode.getNodeChild(key, data); if (nextNode) { toDataNodes(nextNode, getValue(data, key), `${pointer}/${key}`, dataNodes); } }); } return dataNodes; }