json-canonicalize
Version:
JSON canonicalize function
20 lines (13 loc) • 1.86 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';
var CircularRootPathName="$";function _serialize(r,e){var t="",i=e&&e.include,n=e&&e.exclude;n&&"string"==typeof n&&(n=[n]),i&&i.sort();var o=new WeakMap,a=e&&e.allowCircular,c=e&&e.filterUndefined,f=e&&e.undefinedInArrayToNull;return function r(e,l){if(null===e||"object"!=typeof e||null!=e.toJSON)t+=JSON.stringify(e);else if(Array.isArray(e)){if(void 0!==(s=o.get(e))&&l.startsWith(s)){if(!a)throw new Error("Circular reference detected");return void(t+='"[Circular:'+s+']"')}o.set(e,l),t+="[";var u=!1;e.forEach((function(e,i){u&&(t+=","),u=!0,f&&void 0===e&&(e=null),r(e,l+"["+i+"]");})),t+="]";}else {var s;if(void 0!==(s=o.get(e))&&l.startsWith(s)){if(!a)throw new Error("Circular reference detected");return void(t+='"[Circular:'+s+']"')}o.set(e,l),t+="{";var d=!1,v=function(i){n&&n.includes(i)||(d&&(t+=","),d=!0,t+=JSON.stringify(i),t+=":",r(e[i],l+"."+i));};if(l===CircularRootPathName&&i)i.forEach((function(r){e.hasOwnProperty(r)&&v(r);}));else {var h=Object.keys(e);c&&(h=h.filter((function(r){return void 0!==e[r]}))),h.sort(),h.forEach((function(r){v(r);}));}t+="}";}}(r,CircularRootPathName),t}
function canonicalize(e,i){return _serialize(e,{allowCircular:i,filterUndefined:!0,undefinedInArrayToNull:!0})}
function canonicalizeEx(i,e){return _serialize(i,e)}
exports.canonicalize = canonicalize;
exports.canonicalizeEx = canonicalizeEx;
Object.defineProperty(exports, '__esModule', { value: true });
})));
//# sourceMappingURL=index.umd.min.js.map