@ndelangen/flatted
Version:
A super light and fast circular JSON parser.
3 lines (2 loc) • 978 B
JavaScript
/*! (c) 2018, Andrea Giammarchi, (ISC) */
var Flatted=function(c,s){return{parse:function(n,t){var e=JSON.parse(n,i).map(f),r=e[0],u=t||p;return u("","object"==typeof r&&r?function u(f,i,n,o){return Object.keys(n).reduce(function(n,t){var e=n[t];if(e instanceof c){var r=f[e];"object"!=typeof r||i.has(r)?n[t]=o(t,r):(i.add(r),n[t]=o(t,u(f,i,r,o)))}else n[t]=o(t,e);return n},n)}(e,new Set,r,u):r)},stringify:function(n,e,t){for(var r,u=new Map,f=[],i=[],o=e&&typeof e==typeof f?function(n,t){if(""===n||-1<e.indexOf(n))return t}:e||p,c=+y(u,f,o("",n)),a=function(n,t){if(r)return r=!r,c<1?t:o(n,t);var e=o(n,t);switch(typeof e){case"object":if(null===e)return e;case s:return u.get(e)||y(u,f,e)}return e};c<f.length;c++)r=!0,i[c]=JSON.stringify(f[c],a,t);return"["+i.join(",")+"]"}};function p(n,t){return t}function y(n,t,e){var r=c(t.push(e)-1);return n.set(e,r),r}function f(n){return n instanceof c?c(n):n}function i(n,t){return typeof t===s?new c(t):t}}(String,"string");