@baqhub/sdk
Version:
The official JavaScript SDK for the BAQ federated app platform.
27 lines (26 loc) • 938 B
JavaScript
;
// Inspired by:
// https://github.com/cyberphone/json-canonicalization/blob/master/node-es6/canonicalize.js
Object.defineProperty(exports, "__esModule", { value: true });
exports.Canonicalization = void 0;
const type_js_1 = require("./type.js");
function canonicalize(object) {
// Primitive type or "toJSON": use native stringify.
if (object === null || typeof object !== "object" || "toJSON" in object) {
return JSON.stringify(object);
}
// Array: maintain element order.
if (Array.isArray(object)) {
return `[${object.map(canonicalize).join(",")}]`;
}
// Object: sort properties.
const valuesJson = Object.keys(object)
.filter(key => (0, type_js_1.isDefined)(object[key]))
.sort()
.map(key => `${JSON.stringify(key)}:${canonicalize(object[key])}`)
.join(",");
return `{${valuesJson}}`;
}
exports.Canonicalization = {
canonicalize,
};