@pomgui/deep
Version:
Ultrasmall footprint deepmerge, deepfreeze, diff, patch tools
2 lines • 2.19 kB
JavaScript
function p(...e){let t=[];for(let r of e)t.push(l(r));return t.length==1?t[0]:t}function l(e){if(!e||typeof e!="object")return e;for(let t in Object.getOwnPropertyNames(e))l(e[t]);return Object.freeze(e)}function y(e,...t){for(let r of t)e!==r&&Object.entries(r).forEach(([i,o])=>{let n=e[i];(n!==o||!e.hasOwnProperty(i))&&(typeof o=="object"&&o!==null?(Array.isArray(o)&&!Array.isArray(n)?n=e[i]=[]:typeof n!="object"&&(n=e[i]={}),y(n,o)):(n===void 0||o!==void 0)&&(e[i]=o))});return e}function a(e,t,r,i){let o={};if(typeof e=="object"&&typeof t=="object"&&e!==null&&t!==null){if(i.has(e)&&i.has(t))return{};if(i.add(e),i.add(t),Array.isArray(e)&&Array.isArray(t)){for(let n=0;n<e.length;n++){let s=f(r,n);Object.hasOwn(t,n)?Object.assign(o,a(e[n],t[n],s,i)):o["-"+s]=0}for(let n=0;n<t.length;n++)if(!Object.hasOwn(e,n)){let s=f(r,n);o["+"+s]=t[n]}return i.delete(e),i.delete(t),o}if(Object.prototype.toString.call(e)==="[object Object]"&&Object.prototype.toString.call(t)==="[object Object]"){for(let n in e){let s=f(r,n);Object.hasOwn(t,n)?Object.assign(o,a(e[n],t[n],s,i)):o["-"+s]=0}for(let n of Object.keys(t))if(!Object.hasOwn(e,n)){let s=f(r,n);o["+"+s]=t[n]}return i.delete(e),i.delete(t),o}if(e instanceof Date&&t instanceof Date&&!Object.is(e.getTime(),t.getTime()))return{["="+r]:t};if(Object.prototype.toString.call(e)!==Object.prototype.toString.call(t))return{["="+r]:t}}else if(!Object.is(e,t))return{["="+r]:t};return o}function f(e,t){let r=typeof t=="string"?t.replace(".","\\."):t.toString();return e!=""?e+"."+r:r}function u(e,t){return a(e,t,"",new WeakSet)}function g(e,t){for(let r in t)(r[0]=="+"||r[0]=="=")&&d(e,r.substring(1),t[r]),r[0]=="-"&&O(e,r.substring(1));return e}function d(e,t,r){let i=t.split(/(?<!\\)\./).map(n=>n.replace(/\\./g,".")),o=i.pop();for(let n=0;n<i.length;n++){let s=i[n],c=i[n+1];(!(s in e)||!e[s]||typeof e[s]!="object")&&(e[s]=/^\d+$/.test(c!=null?c:o)?[]:{}),e=e[s]}e[o]=r}function O(e,t){let r=t.split(/(?<!\\)\./).map(o=>o.replace(/\\./g,".")),i=r.pop();for(let o=0;o<r.length;o++){let n=r[o];if(!(n in e)||(e=e[n],!e))return}delete e[i]}export{p as deepFreeze,y as deepMerge,u as diff,g as patch};
//# sourceMappingURL=index.mjs.map