UNPKG

differify-js

Version:

Differify allows you to get the diff between two entities (objects diff, arrays diff, date diff, functions diff, number diff, etc) very easily, quickly and in a friendly way.

2 lines 6.97 kB
/*! For license information please see differify.commonjs.js.LICENSE.txt */ (()=>{"use strict";var n,r={d:(n,t)=>{for(var e in t)r.o(t,e)&&!r.o(n,e)&&Object.defineProperty(n,e,{enumerable:!0,get:t[e]})},o:(n,r)=>Object.prototype.hasOwnProperty.call(n,r)},t={};r.d(t,{default:()=>F}),function(n){n.REFERENCE="REFERENCE",n.DIFF="DIFF",n.STRING="STRING"}(n||(n={}));const e=n;function o(n){return n&&!Array.isArray(n)&&"object"==typeof n}function u(n){return n&&"string"==typeof n&&n.length>0}function i(n,r){return n.hasOwnProperty?n.hasOwnProperty(r):void 0!==n[r]}function a(n,r,t,e){return void 0===e&&(e=0),{original:n,current:r,status:t,changes:e}}function c(n,r,t){return void 0===t&&(t=0),{_:n,status:r,changes:t}}function f(n){if(this.compareArraysInOrder=!0,this.mode={array:e.DIFF,object:e.DIFF,function:e.REFERENCE},o(n)&&("boolean"==typeof n.compareArraysInOrder&&(this.compareArraysInOrder=n.compareArraysInOrder),o(n.mode))){var r=Object.values(e);if(u(n.mode.array)){var t=n.mode.array.toUpperCase();void 0!==r.find((function(n){return n===t}))&&(this.mode.array=t)}if(u(n.mode.object)){var i=n.mode.object.toUpperCase();void 0!==r.find((function(n){return n===i}))&&(this.mode.object=i)}if(u(n.mode.function)){var a=n.mode.function.toUpperCase();a!==e.REFERENCE&&a!==e.STRING||(this.mode.function=a)}}}var l;!function(n){n.ADDED="ADDED",n.DELETED="DELETED",n.MODIFIED="MODIFIED",n.EQUAL="EQUAL"}(l||(l={}));const s=l;function g(n,r){return n===r?a(n,r,s.EQUAL):a(n,r,s.MODIFIED,1)}function E(n,r){return n.getTime()===r.getTime()?a(n,r,s.EQUAL):a(n,r,s.MODIFIED,1)}function h(n,r){return n.toString()===r.toString()?a(n,r,s.EQUAL):a(n,r,s.MODIFIED,1)}var p=function(){return p=Object.assign||function(n){for(var r,t=1,e=arguments.length;t<e;t++)for(var o in r=arguments[t])Object.prototype.hasOwnProperty.call(r,o)&&(n[o]=r[o]);return n},p.apply(this,arguments)},D=Symbol("invalid");function v(n,r){return r===D?Array.isArray(n)?[]:{}:r}var y=function(n,r){if((u=n)&&Array.isArray(u)){for(var t=[],e=void 0,o=0;o<n.length;o++)(e=r(n[o]))!==D&&t.push(e);return 0===t.length?D:t}var u;if("object"==typeof n){var i={},a=(e=void 0,!1);for(var o in n)Object.prototype.hasOwnProperty.call(n,o)&&(e=r(n[o]))!==D&&(i[o]=e,a=!0);return a?i:D}return r(n)},d=function(n){return n._?y(n._,d):n.status===s.DELETED?n.original:n.current},I=function(n){return n._?y(n._,I):n.status===s.ADDED?n.current:n.original},b=function(n){var r=function(t){return t._&&t.changes>0?y(t._,r):t.status===s.EQUAL?D:n(t)};return r},O=function(n){var r=n===s.DELETED?"original":"current",t=n===s.EQUAL,e=function(o){return o._&&(t||o.changes>0)?y(o._,e):o.status===n?o[r]:D};return e},m=function(n){var r=n===s.EQUAL,t=function(e){return e._&&(r||e.changes>0)?y(e._,t):e.status===n?{current:e.current,original:e.original}:D};return t},A=function(n){return n&&"original"in n&&"current"in n&&"status"in n};const F=function(){function n(n){var r=this;this.compSelector=function(){var n={string:null,number:null,boolean:null,function:null,object:null},r={};function t(r,t){if(r===t)return a(r,t,s.EQUAL);var e=typeof r;if(e!==typeof t)return a(r,t,s.MODIFIED,1);var o=n[e];return o?o(r,t):g(r,t)}function o(n,t){var e=Object.prototype.toString.call(n);if(e===Object.prototype.toString.call(t)){var o=r[e];return o?o(n,t):g(n,t)}return a(n,t,s.MODIFIED,1)}return{multipleComparatorSelector:t,deepComparatorSelector:o,getComparatorByType:function(r){return n[r]},configure:function(u){var f,l={};l[e.DIFF]=(f=t,function(n,r){var t={},e=0,o=0,u=0;for(var l in n)i(n,l)&&(++e,i(r,l)?t[l]=f(n[l],r[l]):t[l]=a(n[l],null,s.DELETED,1),u+=t[l].changes);for(var g in r)i(r,g)&&(++o,i(n,g)||(t[g]=a(null,r[g],s.ADDED,1),u+=t[g].changes));return 0===e&&0===o?c(null,s.EQUAL,u):c(t,u>0?s.MODIFIED:s.EQUAL,u)}),l[e.REFERENCE]=function(n,r){var t=g(n,r);return a(n,r,t.status,t.changes)},l[e.STRING]=function(n,r){var t=function(n,r){return JSON.stringify(n)===JSON.stringify(r)?a(n,r,s.EQUAL):a(n,r,s.MODIFIED,1)}(n,r);return a(n,r,t.status,t.changes)};var p={};p[e.DIFF]=u.compareArraysInOrder?function(n){return function(r,t){var e,o,u=0;r.length>t.length||r.length===t.length?(e=r,o=t,u=-1):(e=t,o=r,u=1);var i,f=[],l=0;for(i=0;i<o.length;++i)f.push(n(r[i],t[i])),l+=f[i].changes||0;if(-1===u)for(;i<e.length;++i)f.push(a(r[i],null,s.DELETED,1)),++l;else if(1===u)for(;i<e.length;++i)f.push(a(null,t[i],s.ADDED,1)),++l;return c(f,l>0?s.MODIFIED:s.EQUAL,l)}}(t):function(n){return function(r,t){var e;e=r.length>=t.length?r:t;var o,u,i,f,l,g,E=0,h=[],p=Object.create(null);for(o=0;o<e.length;++o)o<r.length&&(f=r[o],void 0!==(g=p[u=JSON.stringify(f)])&&g.length>0?null!==(l=g[g.length-1]).b?(i=n(f,l.b),h.push(i),g.pop(),0===g.length&&delete p[u]):g.unshift({a:f,b:null}):p[u]=[{a:f,b:null}]),o<t.length&&(f=t[o],void 0!==(g=p[u=JSON.stringify(f)])&&g.length>0?null!==(l=g[g.length-1]).a?(i=n(l.a,f),h.push(i),g.pop(),0===g.length&&delete p[u]):g.unshift({a:null,b:f}):p[u]=[{a:null,b:f}]);var D=Object.create(null);for(var v in D.a=[],D.b=[],p){g=p[v];for(var y=0;y<g.length;++y)(l=g[y]).a?D.b.length>0?(E+=(i=n(l.a,D.b.pop())).changes,h.push(i)):D.a.unshift(l.a):l.b&&(D.a.length>0?(E+=(i=n(D.a.pop(),l.b)).changes,h.push(i)):D.b.unshift(l.b))}for(var d=D.a.length-1;d>-1;--d)h.push(a(D.a[d],null,s.DELETED,1)),++E;for(var I=D.b.length-1;I>-1;--I)h.push(a(null,D.b[I],s.ADDED,1)),++E;return c(h,E>0?s.MODIFIED:s.EQUAL,E)}}(t),p[e.REFERENCE]=function(n,r){var t=g(n,r);return a(n,r,t.status,t.changes)},p[e.STRING]=function(n,r){var t,e,o=(e=r,(t=n).length===e.length&&JSON.stringify(t)===JSON.stringify(e)?a(t,e,s.EQUAL):a(t,e,s.MODIFIED,1));return a(n,r,o.status,o.changes)};var D={};D[e.REFERENCE]=g,D[e.STRING]=h,n.string=g,n.number=g,n.boolean=g,n.function=D[u.mode.function],n.object=o,r["[object Array]"]=p[u.mode.array],r["[object Date]"]=E,r["[object Object]"]=l[u.mode.object]}}}(),this.config=null,this.setConfig=function(n){r.config=new f(n),r.compSelector.configure(r.config)},this.getConfig=function(){return{compareArraysInOrder:r.config.compareArraysInOrder,mode:p({},r.config.mode)}},this.compare=function(n,t){return function(n,r,t){var e=typeof r;if(e!==typeof t)return a(r,t,s.MODIFIED,1);var o=n.getComparatorByType(e);return o?o(r,t):g(r,t)}(r.compSelector,n,t)},this.applyLeftChanges=function(n,r){return void 0===r&&(r=!1),n&&n._?v(n._,y(n._,r?b(I):I)):A(n)?n.original:null},this.applyRightChanges=function(n,r){return void 0===r&&(r=!1),n&&n._?v(n._,y(n._,r?b(d):d)):A(n)?n.current:null},this.filterDiffByStatus=function(n,r,t){void 0===r&&(r=s.MODIFIED),void 0===t&&(t=!1);var e=function(n){if("string"==typeof n){var r=n.trim().toUpperCase();return void 0!==Object.keys(s).find((function(n){return r===n}))?r:null}return null}(r);if(e&&n){if(n._)return v(n._,y(n._,t?m(r):O(r)));if(A(n)&&n.status===e)return(t?m(r):O(r))(n)}return null},this.config=new f(n),this.compSelector.configure(this.config)}return n.DIFF_MODES=e,n.PROPERTY_STATUS=s,n}();module.exports=t.default})();