siegel
Version:
Web application development ecosystem
1 lines • 1.46 kB
JavaScript
import e from"../../is/primitive/index.js";let t=Symbol.for("equal"),r=Symbol.for("removed"),l=e=>Array.isArray(e)||e.constructor==Object;function o(t,r,o,{valuesIterable:s,valuesNotEqual:a,valuesEqual:n}){let c=e(t),p=e(r);c||p?c&&p&&t===r?n?.():a():r.constructor==t.constructor?l(t)?s(u(t,r,o)):o.complexTypesIsEqual&&o.complexTypesIsEqual(t,r)?n?.():a():a()}let u=(e,t,r)=>Array.isArray(e)?function(e,t,r){let{valueForEqualArrElement:l}=r,u=[],s=0;return t.forEach((t,a)=>{if(a<e.length){let n;o(e[a],t,r,{valuesIterable(e){n=e.updatesCount?e.result:l},valuesNotEqual(){n=t},valuesEqual(){n=l}}),n===l||s++,u.push(n)}else u.push(t),s++}),t.length<e.length&&s++,{result:u,updatesCount:s}}(e,t,r):function(e,t,r){let{valueForRemovedObjField:l}=r,u={},s=0;for(let a in Object.entries(e).forEach(([e,a])=>{if(Object.prototype.hasOwnProperty.call(t,e)){let l=t[e];o(a,l,r,{valuesIterable(t){t.updatesCount&&(u[e]=t.result,s++)},valuesNotEqual(){u[e]=l,s++}})}else u[e]=l,s++}),t)if(Object.prototype.hasOwnProperty.call(t,a))if(Object.prototype.hasOwnProperty.call(e,a))continue;else u[a]=t[a],s++;return{result:u,updatesCount:s}}(e,t,r);export default function(e,o,s={}){if(e.constructor!=o.constructor)return o;if(!l(e))return s.complexTypesIsEqual&&s.complexTypesIsEqual(e,o)?t:o;{s.valueForEqualArrElement||=t,s.valueForRemovedObjField||=r;let{result:l,updatesCount:a}=u(e,o,s);return a?l:t}};export{t as SYMBOL__VALUES_EQUAL,r as SYMBOL__OBJECT_FIELD_REMOVED};