UNPKG

react-code-compare

Version:

A simple and fast text diff viewer component

3 lines (2 loc) 2.28 kB
var F=Object.create;var L=Object.defineProperty;var H=Object.getOwnPropertyDescriptor;var U=Object.getOwnPropertyNames;var V=Object.getPrototypeOf,$=Object.prototype.hasOwnProperty;var j=(e,n)=>{for(var o in n)L(e,o,{get:n[o],enumerable:!0})},S=(e,n,o,f)=>{if(n&&typeof n=="object"||typeof n=="function")for(let i of U(n))!$.call(e,i)&&i!==o&&L(e,i,{get:()=>n[i],enumerable:!(f=H(n,i))||f.enumerable});return e};var _=(e,n,o)=>(o=e!=null?F(V(e)):{},S(n||!e||!e.__esModule?L(o,"default",{value:e,enumerable:!0}):o,e)),k=e=>S(L({},"__esModule",{value:!0}),e);var P={};j(P,{DiffMethod:()=>T,DiffType:()=>R,computeLineInformation:()=>B});module.exports=k(P);var d=_(require("diff")),J=d,R=(f=>(f[f.DEFAULT=0]="DEFAULT",f[f.ADDED=1]="ADDED",f[f.REMOVED=2]="REMOVED",f))(R||{}),T=(t=>(t.CHARS="diffChars",t.WORDS="diffWords",t.WORDS_WITH_SPACE="diffWordsWithSpace",t.LINES="diffLines",t.TRIMMED_LINES="diffTrimmedLines",t.SENTENCES="diffSentences",t.CSS="diffCss",t))(T||{}),N=e=>{let n=e.split(` `);if(n.every(u=>!u))return n.length===2?[]:(n.pop(),n);let f=n[n.length-1],i=n[0];return f||n.pop(),i||n.shift(),n},w=(e,n,o="diffChars")=>{let f=J[o](e,n),i={left:[],right:[]};return f.forEach(({added:u,removed:m,value:t})=>{let r={};return u&&(r.type=1,r.value=t,i.right.push(r)),m&&(r.type=2,r.value=t,i.left.push(r)),!m&&!u&&(r.type=0,r.value=t,i.right.push(r),i.left.push(r)),r}),i},B=(e,n,o=!1,f="diffChars",i=0)=>{let u=d.diffLines(e.trimRight(),n.trimRight(),{newlineIsToken:!0,ignoreWhitespace:!1,ignoreCase:!1}),m=i,t=i,r=[],I=0,h=[],y=[],C=(E,l,b,c,W)=>N(E).map((p,D)=>{let a={},s={};if(!(y.includes(`${l}-${D}`)||W&&D!==0)){if(b||c)if(h.includes(I)||h.push(I),c){t+=1,a.lineNumber=t,a.type=2,a.value=p||" ";let g=u[l+1];if(g&&g.added&&N(g.value)[D]){let{value:A,lineNumber:x,type:O}=C(g.value,l,!0,!1,!0)[0].right;if(y.push(`${l+1}-${D}`),s.lineNumber=x,s.type=O,o)s.value=A;else{let v=w(p,A,f);s.value=v.right,a.value=v.left}}}else m+=1,s.lineNumber=m,s.type=1,s.value=p;else t+=1,m+=1,a.lineNumber=t,a.type=0,a.value=p,s.lineNumber=m,s.type=0,s.value=p;return I+=1,{right:s,left:a}}}).filter(Boolean);return u.forEach(({added:E,removed:l,value:b},c)=>{r=[...r,...C(b,c,E,l)]}),{lineInformation:r,diffLines:h}};0&&(module.exports={DiffMethod,DiffType,computeLineInformation});