UNPKG

oca_package

Version:

The wrapper of OCA bundle to generate OCA Package at ADC

55 lines (54 loc) 1.88 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); /** * Canonicalizes a JSON object by sorting its properties and maintaining the order of array elements. * This function is useful for generating a consistent string representation of JSON data. * * @param {JsonValue} object - The JSON object to canonicalize. * @returns {string} - The canonicalized string representation of the JSON object. */ const canonicalize = (object) => { let buffer = ''; serialize(object); return buffer; function serialize(object) { if (object === null || typeof object !== 'object' || typeof object.toJSON === 'function') { // Primitive type or toJSON - Use ES6/JSON buffer += JSON.stringify(object); } else if (Array.isArray(object)) { // Array - Maintain element order buffer += '['; let next = false; 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() .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 += '}'; } } }; exports.default = canonicalize;