UNPKG

@amaui/diff

Version:
7 lines (6 loc) 9.65 kB
/** @license AmauiDiff v1.0.11141 * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. */ !function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define(t):(e="undefined"!=typeof globalThis?globalThis:e||self).AmauiDiff=t()}(this,(function(){"use strict";function e(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}var t="undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{};function r(e){return e&&e.__esModule&&Object.prototype.hasOwnProperty.call(e,"default")?e.default:e}var n={exports:{}};!function(e,r){Object.defineProperty(r,"__esModule",{value:!0});const n={},o="undefined"!=typeof window&&void 0!==window.document,a=!(void 0===t||!e.exports);r.default=function e(t,r,i={}){var s;const c=Object.assign(Object.assign({},n),i),{variant:u}=c,f=r&&"object"==typeof r&&Object.getPrototypeOf(r);switch(t){case"string":return"string"==typeof r;case"number":return"number"==typeof r&&!Number.isNaN(r);case"boolean":return"boolean"==typeof r;case"array":return Array.isArray(r);case"object":return"object"==typeof r&&!!r&&r.constructor===Object;case"object-like":return"object"==typeof r&&(null===r||r.constructor!==Object);case"class":return("object"==typeof r||"function"==typeof r)&&(/class/gi.test(String(r))||/class/gi.test(String(null==r?void 0:r.constructor)));case"function":return!!(r&&r instanceof Function);case"async":return!(!e("function",r)||!(o?"AsyncFunction"===r.constructor.name:r()instanceof Promise));case"map":return!(f!==Map.prototype);case"weakmap":return!(f!==WeakMap.prototype);case"set":return!(f!==Set.prototype);case"weakset":return!(f!==WeakSet.prototype);case"promise":return!(f!==Promise.prototype);case"int8array":return!(f!==Int8Array.prototype);case"uint8array":return!(f!==Uint8Array.prototype);case"uint8clampedarray":return!(f!==Uint8ClampedArray.prototype);case"int16array":return!(f!==Int16Array.prototype);case"uint16array":return!(f!==Uint16Array.prototype);case"int32array":return!(f!==Int32Array.prototype);case"uint32array":return!(f!==Uint32Array.prototype);case"float32array":return!(f!==Float32Array.prototype);case"float64array":return!(f!==Float64Array.prototype);case"bigint64array":return!(f!==BigInt64Array.prototype);case"biguint64array":return!(f!==BigUint64Array.prototype);case"typedarray":return e("int8array",r)||e("uint8array",r)||e("uint8clampedarray",r)||e("int16array",r)||e("uint16array",r)||e("int32array",r)||e("uint32array",r)||e("float32array",r)||e("float64array",r)||e("bigint64array",r)||e("biguint64array",r);case"dataview":return!(f!==DataView.prototype);case"arraybuffer":return!(f!==ArrayBuffer.prototype);case"sharedarraybuffer":return"undefined"!=typeof SharedArrayBuffer&&!(f!==SharedArrayBuffer.prototype);case"symbol":return!("symbol"!=typeof r);case"error":return!!(r&&r instanceof Error);case"date":return!!(r&&r instanceof Date);case"regexp":return!!(r&&r instanceof RegExp);case"arguments":return!(!r||"[object Arguments]"!==r.toString());case"null":return null===r;case"undefined":return void 0===r;case"blob":return o&&r instanceof Blob;case"buffer":return!(!a||"function"!=typeof(null===(s=null==r?void 0:r.constructor)||void 0===s?void 0:s.isBuffer)||!r.constructor.isBuffer(r));case"element":if(r)switch(u){case void 0:case"html":case"element":return o&&("object"==typeof HTMLElement?r instanceof HTMLElement:r&&"object"==typeof r&&null!==r&&1===r.nodeType&&"string"==typeof r.nodeName);case"node":return o&&("object"==typeof Node?r instanceof Node:r&&"object"==typeof r&&null!==r&&"number"==typeof r.nodeType&&"string"==typeof r.nodeName);case"react":return r.elementType||r.hasOwnProperty("$$typeof");default:return!1}return!1;case"simple":return e("string",r,c)||e("number",r,c)||e("boolean",r,c)||e("undefined",r,c)||e("null",r,c);case"not-array-object":return!e("array",r,c)&&!e("object",r,c);default:return!1}}}(n,n.exports);var o=r(n.exports),a={},i={};Object.defineProperty(i,"__esModule",{value:!0});const s=e=>{if((e=>Array.isArray(e))(e))return e.map((e=>s(e)));if((e=>"object"==typeof e&&!!e&&e.constructor===Object)(e)){const t={};return Object.keys(e).forEach((r=>t[r]=s(e[r]))),t}return e};i.default=s;var c=function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(a,"__esModule",{value:!0});const u=c(n.exports),f=c(i),l={copy:!1,merge:{array:!1}},p=(e,t,r={})=>{const n=Object.assign(Object.assign({},l),r);if(n.merge.array&&(0,u.default)("array",e)&&(0,u.default)("array",t)){const r=Math.max(e.length,t.length);for(let o=0;o<r;o++)void 0===e[o]&&(e[o]=t[o]),((0,u.default)("object",e[o])&&(0,u.default)("object",t[o])||(0,u.default)("array",e[o])&&(0,u.default)("array",t[o]))&&(e[o]=p(e[o],t[o],n))}return(0,u.default)("object",e)&&(0,u.default)("object",t)&&Object.keys(t).forEach((r=>{e.hasOwnProperty(r)?(0,u.default)("object",e[r])&&(0,u.default)("object",t[r])&&(e[r]=p(e[r],t[r],n)):e[r]=n.copy?(0,f.default)(t[r]):t[r]})),e};var d=a.default=p,y={};Object.defineProperty(y,"__esModule",{value:!0});var m=y.default=(e,t=2,r=(()=>{const e=new WeakSet;return(t,r)=>{if(void 0!==((t,r)=>{if("object"==typeof r&&null!==r){if(e.has(r))return;e.add(r)}return r})(0,r)&&void 0!==r)return r}})())=>{try{let n=JSON.stringify(e,r,t);return n=n.replace(/(?!\[)\n* *null,/g,"").replace(/,\n* *null/g,""),n}catch(e){}return String(e)};function h(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function b(t){for(var r=1;r<arguments.length;r++){var n=null!=arguments[r]?arguments[r]:{};r%2?h(Object(n),!0).forEach((function(r){e(t,r,n[r])})):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(n)):h(Object(n)).forEach((function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(n,e))}))}return t}const g={default:{init:{method:e=>String(e)},itemize:{method:e=>e.split("").filter(Boolean)},join:{method:e=>e.join("")},equal:{method:(e,t)=>e===t}},word:{init:{method:e=>String(e)},itemize:{method:e=>e.split(/\s|\b/).filter(Boolean)},join:{method:e=>e.join(" ")}},line:{init:{method:e=>String(e)},itemize:{method:e=>{const t=e.split(/(\n|\r\n)/),r=[];for(let e=0;e<t.length;e++)e%2?r[r.length-1]+=t[e]:r.push(t[e]);return r}},join:{method:e=>e.join("")}},sentence:{init:{method:e=>String(e)},itemize:{method:e=>e.split(/(\S.*?[.!?])(?=\s +|$)/).filter(Boolean)},join:{method:e=>e.join("")}}},j=b(b({},g.default),{},{output:{compressed:!0}});class O{static get amauidiff(){return new O}static get word(){return new O(O.OPTIONS.word)}static get line(){return new O(O.OPTIONS.line)}static get sentence(){return new O(O.OPTIONS.sentence)}static get json(){const e=O.OPTIONS.line;return e.init.method=e=>m(e),new O(e)}static get OPTIONS(){return g}static updateGroups(e){const t=[];let r=[],n=!1;const o=[];for(let t=0;t<e.items.length;)["r","remove"].indexOf(e.items[t])>-1?(o.push(e.items.slice(t,t+2)),t+=2):(o.push(e.items.slice(t,t+3)),t+=3);return e.items=o,e.items.forEach(((o,a)=>{const i=e.items[a+1],s=o[0],c=i&&i[0];["r","remove"].indexOf(s)>-1&&["r","remove"].indexOf(c)>-1&&!n&&(r.length&&t.push(r),n=!0,r=[]),["a","add"].indexOf(s)>-1&&n&&(r.length&&t.push(r),n=!1,r=[]),r.push(o)})),r.length&&t.push(r),t}constructor(){let t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:j;e(this,"options",void 0),this.options=d(t,j)}diff(e,t){const r=d(arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},this.options),n=r.init.method(e),a=r.init.method(t);if(o("string",n)&&o("string",a)){const e=r.itemize.method(a),t=r.itemize.method(n),o=e.length,i=t.length,s=Math.max(o,i),c=[],u=[],f=e=>{if(e){let t,[r,n]=e.slice(1),o=c[r]&&c[r][n-1],a=c[r-1]&&c[r-1][n],i=c[r-1]&&c[r-1][n-1];for(o&&a&&o[0]!==e[0]&&a[0]!==e[0]&&([r,n]=i.slice(1));!t;)if(o=c[r]&&c[r][n-1],a=c[r-1]&&c[r-1][n],i=c[r-1]&&c[r-1][n-1],o&&o[0]===c[r][n][0])[r,n]=o.slice(1);else{if(!a||a[0]!==c[r][n][0]){t=c[r][n];break}[r,n]=a.slice(1)}return t}},l=(n,o)=>{const a=c[n]&&c[n][o-1],i=c[n-1]&&c[n-1][o],s=c[n-1]&&c[n-1][o-1];let u=0;u=r.equal.method(e[n],t[o])?(s?s[0]:0)+1:Math.max(i?i[0]:0,a?a[0]:0);return[u,n,o]};for(let e=0;e<o;e++){c.push([]);for(let t=0;t<i;t++)c[e][t]=l(e,t)}const p=c[o-1][i-1];if(p&&p[0]){let e=p,t=o-1,r=i-1;const n=c[t]&&c[t][r-1],a=c[t-1]&&c[t-1][r],s=c[t-1]&&c[t-1][r-1];for(n&&a&&n[0]!==e[0]&&a[0]!==e[0]&&(u.push(e),[t,r]=s.slice(1));e&&0!==e[1]&&0!==e[2];)e=f(e),u.push(e)}u.sort(((e,t)=>e[0]-t[0]));const d={items:[]};for(let t=0;t<s;t++){const n=u.find((e=>e[1]===t));!u.find((e=>e[2]===t))&&t<i&&d.items.push(this.action("remove",t,void 0,r)),!n&&t<o&&d.items.push(this.action("add",t,e[t],r))}function y(e,t){return e[0]<t[0]?1:e[0]>t[0]?-1:0}return d.items.sort(y),d.items=d.items.flat(),d}}update(e,t){const r=d(arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},this.options),n=r.init.method(e);if(o("string",n)&&void 0!==t){var a;const e=r.itemize.method(n);if(null!==(a=t.items)&&void 0!==a&&a.length){O.updateGroups(t).forEach((t=>{t.every((e=>["r","remove"].indexOf(e[0])>-1))?(t.sort(((e,t)=>t[1]-e[1])),t.forEach((t=>e.splice(t[1],1)))):t.forEach((t=>{const r=t[0],n=t[1],o=t[2];switch(r){case"a":case"add":e.splice(n,0,o);break;case"r":case"remove":e.splice(n,1)}}))}))}return r.join.method(e)}}action(e,t,r,n){var o;return[(null===(o=n.output)||void 0===o?void 0:o.compressed)?e.charAt(0):e,t,r].filter((e=>void 0!==e))}}return O}));