UNPKG

@sybil-center/zkc-preparator

Version:
87 lines 7.15 kB
import { TransformationGraph } from "./graph.js"; import sortKeys from "sort-keys"; export class Preparator { constructor() { this.graph = new TransformationGraph(); this.extendGraph = this.graph.extend.bind(this.graph); } prepare(credential, schema) { const sortedCred = sort(credential); const sortedSchema = sort(schema); const pathValueList = toPathValueList(sortedCred); return pathValueList.reduce((result, { value, path }) => { const links = getByPath(sortedSchema, path); const transformed = this.graph.transform(value, links); const lastNode = this.graph.toLastNode(links); if (lastNode?.spread) transformed.forEach((it) => result.push(it)); else result.push(transformed); return result; }, []); } } export function toPathValueList(obj) { return Object.keys(obj).reduce((vector, key) => { vector.concat(getPathValues(obj, key, vector)); return vector; }, []); } function getPathValues(obj, key, vector, path) { let target = obj[key]; path = !path ? [key] : path; if (Array.isArray(target)) target = arrToObj(target); if (typeof target === "object" && target !== null) { Object.keys(target).forEach((localKey) => { getPathValues(target, localKey, vector, path.concat(localKey)); }); } if (isPrimitive(target)) { vector.push({ value: target, path: path }); } return vector; } function arrToObj(list) { return list.reduce((prev, value, index) => { prev[index] = value; return prev; }, {}); } function isPrimitive(value) { return ["string", "number", "bigint", "boolean"].includes(typeof value); } function getByPath(obj, path) { let current = obj; path.forEach((key) => { current = current[key]; }); return current; } function sort(credential) { const target = {}; target.isr = { id: { t: credential.isr.id.t, k: credential.isr.id.k } }; target.sch = credential.sch; target.isd = credential.isd; target.exd = credential.exd; const sbjProps = Object.keys(credential.sbj) .filter((key) => key !== "id") .reduce((sbjProps, prop) => { sbjProps[prop] = credential.sbj[prop]; return sbjProps; }, {}); target.sbj = { id: { t: credential.sbj.id.t, k: credential.sbj.id.k }, ...sortKeys(sbjProps, { deep: true }) }; return target; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJlcGFyYXRvci5qcyIsInNvdXJjZVJvb3QiOiIuL3NyYy8iLCJzb3VyY2VzIjpbInByZXBhcmF0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUF3QixtQkFBbUIsRUFBRSxNQUFNLFlBQVksQ0FBQztBQUN2RSxPQUFPLFFBQVEsTUFBTSxXQUFXLENBQUM7QUE2Q2pDLE1BQU0sT0FBTyxVQUFVO0lBQXZCO1FBRW1CLFVBQUssR0FBRyxJQUFJLG1CQUFtQixFQUFFLENBQUM7UUFDbkQsZ0JBQVcsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBb0JuRCxDQUFDO0lBbEJDLE9BQU8sQ0FJTCxVQUFnQixFQUFFLE1BQWU7UUFDakMsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQ3BDLE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBa0IsTUFBTSxDQUFDLENBQUM7UUFDbkQsTUFBTSxhQUFhLEdBQUcsZUFBZSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQ2xELE9BQU8sYUFBYSxDQUFDLE1BQU0sQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsRUFBRSxFQUFFO1lBQ3RELE1BQU0sS0FBSyxHQUFHLFNBQVMsQ0FBQyxZQUFZLEVBQUUsSUFBSSxDQUFhLENBQUM7WUFDeEQsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQyxDQUFDO1lBQ3ZELE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQzlDLElBQUksUUFBUSxFQUFFLE1BQU07Z0JBQUUsV0FBVyxDQUFDLE9BQU8sQ0FBQyxDQUFDLEVBQU8sRUFBRSxFQUFFLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMs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