UNPKG

json-canonicalize

Version:
18 lines (12 loc) 2.14 kB
(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