UNPKG

@tangle-js/ld-proofs

Version:

Linked Data Proofs on the Tangle. Powered by IOTA Identity & IOTA Streams

73 lines 4.97 kB
/* eslint-disable jsdoc/require-jsdoc */ // es-lint-disable unicorn/no-array-for-each export class JsonCanonicalization { /** * Calculates the canonical serialization of a JSON document. * * @param input The input. * @returns The serialization as a string. */ static calculate(input) { let buffer = ""; serialize(input); return buffer; /** * Serializes in canonical format. * * @param object The object to be serialized. */ function serialize(object) { if (object === null || typeof object !== "object") { // /////////////////////////////////////////////// // Primitive data type - Use ES6/JSON // // /////////////////////////////////////////////// buffer += JSON.stringify(object); } else if (Array.isArray(object)) { // /////////////////////////////////////////////// // Array - Maintain element order // // /////////////////////////////////////////////// buffer += "["; let next = false; // eslint-disable-next-line unicorn/no-array-for-each object.forEach(element => { if (next) { buffer += ","; } next = true; // /////////////////////////////////////// // Array element - Recursive expansion // // /////////////////////////////////////// serialize(element); }); buffer += "]"; } else { // /////////////////////////////////////////////// // Object - Sort properties before serializing // // /////////////////////////////////////////////// buffer += "{"; let next = false; Object.keys(object).sort() // eslint-disable-next-line unicorn/no-array-for-each .forEach(property => { if (next) { buffer += ","; } next = true; // ///////////////////////////////////////////// // Property names are strings - Use ES6/JSON // // ///////////////////////////////////////////// buffer += JSON.stringify(property); buffer += ":"; // //////////////////////////////////////// // Property value - Recursive expansion // // //////////////////////////////////////// serialize(object[property]); }); buffer += "}"; } } } } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoianNvbkNhbm9uaWNhbGl6YXRpb24ubWpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2hlbHBlcnMvanNvbkNhbm9uaWNhbGl6YXRpb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsd0NBQXdDO0FBRXhDLDRDQUE0QztBQUM1QyxNQUFNLE9BQU8sb0JBQW9CO0lBQzdCOzs7OztPQUtHO0lBQ0ksTUFBTSxDQUFDLFNBQVMsQ0FBQyxLQUFjO1FBQ2xDLElBQUksTUFBTSxHQUFHLEVBQUUsQ0FBQztRQUNoQixTQUFTLENBQUMsS0FBSyxDQUFDLENBQUM7UUFFakIsT0FBTyxNQUFNLENBQUM7UUFFZDs7OztXQUlHO1FBQ0gsU0FBUyxTQUFTLENBQUMsTUFBTTtZQUNyQixJQUFJLE1BQU0sS0FBSyxJQUFJLElBQUksT0FBTyxNQUFNLEtBQUssUUFBUSxFQUFFO2dCQUMvQyxrREFBa0Q7Z0JBQ2xELGlEQUFpRDtnQkFDakQsa0RBQWtEO2dCQUNsRCxNQUFNLElBQUksSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQzthQUNwQztpQkFBTSxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLEVBQUU7Z0JBQzlCLGtEQUFrRDtnQkFDbEQsaURBQWlEO2dCQUNqRCxrREFBa0Q7Z0JBQ2xELE1BQU0sSUFBSSxHQUFHLENBQUM7Z0JBQ2QsSUFBSSxJQUFJLEdBQUcsS0FBSyxDQUFDO2dCQUNqQixxREFBcUQ7Z0JBQ3JELE1BQU0sQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLEVBQUU7b0JBQ3JCLElBQUksSUFBSSxFQUFFO3dCQUNOLE1BQU0sSUFBSSxHQUFHLENBQUM7cUJBQ2pCO29CQUNELElBQUksR0FBRyxJQUFJLENBQUM7b0JBQ1osMENBQTBDO29CQUMxQyx5Q0FBeUM7b0JBQ3pDLDBDQUEwQztvQkFDMUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxDQUFDO2dCQUN2QixDQUFDLENBQUMsQ0FBQztnQkFDSCxNQUFNLElBQUksR0FBRyxDQUFDO2FBQ2pCO2lCQUFNO2dCQUNILGtEQUFrRDtnQkFDbEQsaURBQWlEO2dCQUNqRCxrREFBa0Q7Z0JBQ2xELE1BQU0sSUFBSSxHQUFHLENBQUM7Z0JBQ2QsSUFBSSxJQUFJLEdBQUcsS0FBSyxDQUFDO2dCQUNqQixNQUFNLENBQUMsSUFBSSxDQUFDLE1BQWlCLENBQUMsQ0FBQyxJQUFJLEVBQUU7b0JBQ3JDLHFEQUFxRDtxQkFDcEQsT0FBTyxDQUFDLFFBQVEsQ0FBQyxFQUFFO29CQUNoQixJQUFJLElBQUksRUFBRTt3QkFDTixNQUFNLElBQUksR0FBRyxDQUFDO3FCQUNqQjtvQkFDRCxJQUFJLEdBQUcsSUFBSSxDQUFDO29CQUNaLGdEQUFnRDtvQkFDaEQsK0NBQStDO29CQUMvQyxnREFBZ0Q7b0JBQ2hELE1BQU0sSUFBSSxJQUFJLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxDQUFDO29CQUNuQyxNQUFNLElBQUksR0FBRyxDQUFDO29CQUNkLDJDQUEyQztvQkFDM0MsMENBQTBDO29CQUMxQywyQ0FBMkM7b0JBQzNDLFNBQVMsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQztnQkFDaEMsQ0FBQyxDQUFDLENBQUM7Z0JBQ0gsTUFBTSxJQUFJLEdBQUcsQ0FBQzthQUNqQjtRQUNMLENBQUM7SUFDTCxDQUFDO0NBQ0oifQ==