json-canonicalize
Version:
JSON canonicalize function
18 lines (12 loc) • 2.14 kB
JavaScript
(function (global, factory) {
typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) :
typeof define === 'function' && define.amd ? define(['exports'], factory) :
(global = typeof globalThis !== 'undefined' ? globalThis : global || self, factory(global.JsonCanonicalize = {}));
}(this, (function (exports) { 'use strict';
function canonicalize(r,e){var n="",i=new WeakMap;return t(r),n;function t(r){if(null===r||"object"!=typeof r||null!=r.toJSON)n+=JSON.stringify(r);else if(Array.isArray(r)){if(i.has(r)){if(!e)throw new Error("Circular reference detected");return void(n+='"[Circular]"')}i.set(r,!0),n+="[";var o=!1;r.forEach((function(r){o&&(n+=","),o=!0,void 0===r&&(r=null),t(r);})),n+="]";}else {if(i.has(r)){if(!e)throw new Error("Circular reference detected");return void(n+='"[Circular]"')}i.set(r,!0),n+="{",Object.keys(r).filter((function(e){return void 0!==r[e]})).sort().forEach((function(e,i){return function(r,e,i){i>0&&(n+=",");n+=JSON.stringify(e),n+=":",t(r[e]);}(r,e,i)})),n+="}";}}}
function canonicalizeEx(r,e){var n="",t=e&&e.include,i=e&&e.exclude;i&&"string"==typeof i&&(i=[i]),t&&t.sort();var o=new WeakMap,f=e&&(null==e?void 0:e.allowCircular);return c(r),n;function c(r,e){if(null===r||"object"!=typeof r||null!=r.toJSON)n+=JSON.stringify(r);else if(Array.isArray(r)){if(o.has(r)){if(!f)throw new Error("Circular reference detected");return void(n+='"[Circular]"')}o.set(r,!0),n+="[";var i=!1;r.forEach((function(e){i&&(n+=","),i=!0,c(e,r);})),n+="]";}else {if(o.has(r)){if(!f)throw new Error("Circular reference detected");return void(n+='"[Circular]"')}if(o.set(r,!0),n+="{",!e&&t)t.forEach((function(e,n){r.hasOwnProperty(e)&&a(r,e,n);}));else Object.keys(r).sort().forEach((function(e,n){return a(r,e,n)}));n+="}";}}function a(r,e,t){if(i&&i.length)for(var o=0,f=i;o<f.length;o++){if(f[o]===e)return}t>0&&(n+=","),n+=JSON.stringify(e),n+=":",c(r[e],r);}}
exports.canonicalize = canonicalize;
exports.canonicalizeEx = canonicalizeEx;
Object.defineProperty(exports, '__esModule', { value: true });
})));
//# sourceMappingURL=index.umd.min.js.map