oca_package
Version:
The wrapper of OCA bundle to generate OCA Package at ADC
55 lines (54 loc) • 1.88 kB
JavaScript
;
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;