compare-pdf-ts 0.0.1 → 0.0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,2 @@
1
+ "use strict";var Pt=Object.create;var H=Object.defineProperty;var At=Object.getOwnPropertyDescriptor;var Ot=Object.getOwnPropertyNames;var Lt=Object.getPrototypeOf,It=Object.prototype.hasOwnProperty;var b=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports),Rt=(e,t)=>{for(var r in t)H(e,r,{get:t[r],enumerable:!0})},ge=(e,t,r,i)=>{if(t&&typeof t=="object"||typeof t=="function")for(let n of Ot(t))!It.call(e,n)&&n!==r&&H(e,n,{get:()=>t[n],enumerable:!(i=At(t,n))||i.enumerable});return e};var W=(e,t,r)=>(r=e!=null?Pt(Lt(e)):{},ge(t||!e||!e.__esModule?H(r,"default",{value:e,enumerable:!0}):r,e)),kt=e=>ge(H({},"__esModule",{value:!0}),e);var K=b((qr,be)=>{"use strict";var Bt=require("util"),ye=require("stream"),R=be.exports=function(){ye.call(this),this._buffers=[],this._buffered=0,this._reads=[],this._paused=!1,this._encoding="utf8",this.writable=!0};Bt.inherits(R,ye);R.prototype.read=function(e,t){this._reads.push({length:Math.abs(e),allowLess:e<0,func:t}),process.nextTick(function(){this._process(),this._paused&&this._reads&&this._reads.length>0&&(this._paused=!1,this.emit("drain"))}.bind(this))};R.prototype.write=function(e,t){if(!this.writable)return this.emit("error",new Error("Stream not writable")),!1;let r;return Buffer.isBuffer(e)?r=e:r=Buffer.from(e,t||this._encoding),this._buffers.push(r),this._buffered+=r.length,this._process(),this._reads&&this._reads.length===0&&(this._paused=!0),this.writable&&!this._paused};R.prototype.end=function(e,t){e&&this.write(e,t),this.writable=!1,this._buffers&&(this._buffers.length===0?this._end():(this._buffers.push(null),this._process()))};R.prototype.destroySoon=R.prototype.end;R.prototype._end=function(){this._reads.length>0&&this.emit("error",new Error("Unexpected end of input")),this.destroy()};R.prototype.destroy=function(){this._buffers&&(this.writable=!1,this._reads=null,this._buffers=null,this.emit("close"))};R.prototype._processReadAllowingLess=function(e){this._reads.shift();let t=this._buffers[0];t.length>e.length?(this._buffered-=e.length,this._buffers[0]=t.slice(e.length),e.func.call(this,t.slice(0,e.length))):(this._buffered-=t.length,this._buffers.shift(),e.func.call(this,t))};R.prototype._processRead=function(e){this._reads.shift();let t=0,r=0,i=Buffer.alloc(e.length);for(;t<e.length;){let n=this._buffers[r++],l=Math.min(n.length,e.length-t);n.copy(i,t,0,l),t+=l,l!==n.length&&(this._buffers[--r]=n.slice(l))}r>0&&this._buffers.splice(0,r),this._buffered-=e.length,e.func.call(this,i)};R.prototype._process=function(){try{for(;this._buffered>0&&this._reads&&this._reads.length>0;){let e=this._reads[0];if(e.allowLess)this._processReadAllowingLess(e);else if(this._buffered>=e.length)this._processRead(e);else break}this._buffers&&!this.writable&&this._end()}catch(e){this.emit("error",e)}}});var J=b(X=>{"use strict";var B=[{x:[0],y:[0]},{x:[4],y:[0]},{x:[0,4],y:[4]},{x:[2,6],y:[0,4]},{x:[0,2,4,6],y:[2,6]},{x:[1,3,5,7],y:[0,2,4,6]},{x:[0,1,2,3,4,5,6,7],y:[1,3,5,7]}];X.getImagePasses=function(e,t){let r=[],i=e%8,n=t%8,l=(e-i)/8,s=(t-n)/8;for(let o=0;o<B.length;o++){let h=B[o],f=l*h.x.length,a=s*h.y.length;for(let u=0;u<h.x.length&&h.x[u]<i;u++)f++;for(let u=0;u<h.y.length&&h.y[u]<n;u++)a++;f>0&&a>0&&r.push({width:f,height:a,index:o})}return r};X.getInterlaceIterator=function(e){return function(t,r,i){let n=t%B[i].x.length,l=(t-n)/B[i].x.length*8+B[i].x[n],s=r%B[i].y.length,o=(r-s)/B[i].y.length*8+B[i].y[s];return l*4+o*e*4}}});var Q=b((Ur,Ce)=>{"use strict";Ce.exports=function(t,r,i){let n=t+r-i,l=Math.abs(n-t),s=Math.abs(n-r),o=Math.abs(n-i);return l<=s&&l<=o?t:s<=o?r:i}});var $=b((vr,Ee)=>{"use strict";var St=J(),xt=Q();function we(e,t,r){let i=e*t;return r!==8&&(i=Math.ceil(i/(8/r))),i}var N=Ee.exports=function(e,t){let r=e.width,i=e.height,n=e.interlace,l=e.bpp,s=e.depth;if(this.read=t.read,this.write=t.write,this.complete=t.complete,this._imageIndex=0,this._images=[],n){let o=St.getImagePasses(r,i);for(let h=0;h<o.length;h++)this._images.push({byteWidth:we(o[h].width,l,s),height:o[h].height,lineIndex:0})}else this._images.push({byteWidth:we(r,l,s),height:i,lineIndex:0});s===8?this._xComparison=l:s===16?this._xComparison=l*2:this._xComparison=1};N.prototype.start=function(){this.read(this._images[this._imageIndex].byteWidth+1,this._reverseFilterLine.bind(this))};N.prototype._unFilterType1=function(e,t,r){let i=this._xComparison,n=i-1;for(let l=0;l<r;l++){let s=e[1+l],o=l>n?t[l-i]:0;t[l]=s+o}};N.prototype._unFilterType2=function(e,t,r){let i=this._lastLine;for(let n=0;n<r;n++){let l=e[1+n],s=i?i[n]:0;t[n]=l+s}};N.prototype._unFilterType3=function(e,t,r){let i=this._xComparison,n=i-1,l=this._lastLine;for(let s=0;s<r;s++){let o=e[1+s],h=l?l[s]:0,f=s>n?t[s-i]:0,a=Math.floor((f+h)/2);t[s]=o+a}};N.prototype._unFilterType4=function(e,t,r){let i=this._xComparison,n=i-1,l=this._lastLine;for(let s=0;s<r;s++){let o=e[1+s],h=l?l[s]:0,f=s>n?t[s-i]:0,a=s>n&&l?l[s-i]:0,u=xt(f,h,a);t[s]=o+u}};N.prototype._reverseFilterLine=function(e){let t=e[0],r,i=this._images[this._imageIndex],n=i.byteWidth;if(t===0)r=e.slice(1,n+1);else switch(r=Buffer.alloc(n),t){case 1:this._unFilterType1(e,r,n);break;case 2:this._unFilterType2(e,r,n);break;case 3:this._unFilterType3(e,r,n);break;case 4:this._unFilterType4(e,r,n);break;default:throw new Error("Unrecognised filter type - "+t)}this.write(r),i.lineIndex++,i.lineIndex>=i.height?(this._lastLine=null,this._imageIndex++,i=this._images[this._imageIndex]):this._lastLine=r,i?this.read(i.byteWidth+1,this._reverseFilterLine.bind(this)):(this._lastLine=null,this.complete())}});var Ae=b((Gr,Pe)=>{"use strict";var Mt=require("util"),Te=K(),Dt=$(),Nt=Pe.exports=function(e){Te.call(this);let t=[],r=this;this._filter=new Dt(e,{read:this.read.bind(this),write:function(i){t.push(i)},complete:function(){r.emit("complete",Buffer.concat(t))}}),this._filter.start()};Mt.inherits(Nt,Te)});var q=b((Hr,Oe)=>{"use strict";Oe.exports={PNG_SIGNATURE:[137,80,78,71,13,10,26,10],TYPE_IHDR:1229472850,TYPE_IEND:1229278788,TYPE_IDAT:1229209940,TYPE_PLTE:1347179589,TYPE_tRNS:1951551059,TYPE_gAMA:1732332865,COLORTYPE_GRAYSCALE:0,COLORTYPE_PALETTE:1,COLORTYPE_COLOR:2,COLORTYPE_ALPHA:4,COLORTYPE_PALETTE_COLOR:3,COLORTYPE_COLOR_ALPHA:6,COLORTYPE_TO_BPP_MAP:{0:1,2:3,3:1,4:2,6:4},GAMMA_DIVISION:1e5}});var re=b((Fr,Le)=>{"use strict";var ee=[];(function(){for(let e=0;e<256;e++){let t=e;for(let r=0;r<8;r++)t&1?t=3988292384^t>>>1:t=t>>>1;ee[e]=t}})();var te=Le.exports=function(){this._crc=-1};te.prototype.write=function(e){for(let t=0;t<e.length;t++)this._crc=ee[(this._crc^e[t])&255]^this._crc>>>8;return!0};te.prototype.crc32=function(){return this._crc^-1};te.crc32=function(e){let t=-1;for(let r=0;r<e.length;r++)t=ee[(t^e[r])&255]^t>>>8;return t^-1}});var ie=b((zr,Ie)=>{"use strict";var C=q(),qt=re(),w=Ie.exports=function(e,t){this._options=e,e.checkCRC=e.checkCRC!==!1,this._hasIHDR=!1,this._hasIEND=!1,this._emittedHeadersFinished=!1,this._palette=[],this._colorType=0,this._chunks={},this._chunks[C.TYPE_IHDR]=this._handleIHDR.bind(this),this._chunks[C.TYPE_IEND]=this._handleIEND.bind(this),this._chunks[C.TYPE_IDAT]=this._handleIDAT.bind(this),this._chunks[C.TYPE_PLTE]=this._handlePLTE.bind(this),this._chunks[C.TYPE_tRNS]=this._handleTRNS.bind(this),this._chunks[C.TYPE_gAMA]=this._handleGAMA.bind(this),this.read=t.read,this.error=t.error,this.metadata=t.metadata,this.gamma=t.gamma,this.transColor=t.transColor,this.palette=t.palette,this.parsed=t.parsed,this.inflateData=t.inflateData,this.finished=t.finished,this.simpleTransparency=t.simpleTransparency,this.headersFinished=t.headersFinished||function(){}};w.prototype.start=function(){this.read(C.PNG_SIGNATURE.length,this._parseSignature.bind(this))};w.prototype._parseSignature=function(e){let t=C.PNG_SIGNATURE;for(let r=0;r<t.length;r++)if(e[r]!==t[r]){this.error(new Error("Invalid file signature"));return}this.read(8,this._parseChunkBegin.bind(this))};w.prototype._parseChunkBegin=function(e){let t=e.readUInt32BE(0),r=e.readUInt32BE(4),i="";for(let l=4;l<8;l++)i+=String.fromCharCode(e[l]);let n=!!(e[4]&32);if(!this._hasIHDR&&r!==C.TYPE_IHDR){this.error(new Error("Expected IHDR on beggining"));return}if(this._crc=new qt,this._crc.write(Buffer.from(i)),this._chunks[r])return this._chunks[r](t);if(!n){this.error(new Error("Unsupported critical chunk type "+i));return}this.read(t+4,this._skipChunk.bind(this))};w.prototype._skipChunk=function(){this.read(8,this._parseChunkBegin.bind(this))};w.prototype._handleChunkEnd=function(){this.read(4,this._parseChunkEnd.bind(this))};w.prototype._parseChunkEnd=function(e){let t=e.readInt32BE(0),r=this._crc.crc32();if(this._options.checkCRC&&r!==t){this.error(new Error("Crc error - "+t+" - "+r));return}this._hasIEND||this.read(8,this._parseChunkBegin.bind(this))};w.prototype._handleIHDR=function(e){this.read(e,this._parseIHDR.bind(this))};w.prototype._parseIHDR=function(e){this._crc.write(e);let t=e.readUInt32BE(0),r=e.readUInt32BE(4),i=e[8],n=e[9],l=e[10],s=e[11],o=e[12];if(i!==8&&i!==4&&i!==2&&i!==1&&i!==16){this.error(new Error("Unsupported bit depth "+i));return}if(!(n in C.COLORTYPE_TO_BPP_MAP)){this.error(new Error("Unsupported color type"));return}if(l!==0){this.error(new Error("Unsupported compression method"));return}if(s!==0){this.error(new Error("Unsupported filter method"));return}if(o!==0&&o!==1){this.error(new Error("Unsupported interlace method"));return}this._colorType=n;let h=C.COLORTYPE_TO_BPP_MAP[this._colorType];this._hasIHDR=!0,this.metadata({width:t,height:r,depth:i,interlace:!!o,palette:!!(n&C.COLORTYPE_PALETTE),color:!!(n&C.COLORTYPE_COLOR),alpha:!!(n&C.COLORTYPE_ALPHA),bpp:h,colorType:n}),this._handleChunkEnd()};w.prototype._handlePLTE=function(e){this.read(e,this._parsePLTE.bind(this))};w.prototype._parsePLTE=function(e){this._crc.write(e);let t=Math.floor(e.length/3);for(let r=0;r<t;r++)this._palette.push([e[r*3],e[r*3+1],e[r*3+2],255]);this.palette(this._palette),this._handleChunkEnd()};w.prototype._handleTRNS=function(e){this.simpleTransparency(),this.read(e,this._parseTRNS.bind(this))};w.prototype._parseTRNS=function(e){if(this._crc.write(e),this._colorType===C.COLORTYPE_PALETTE_COLOR){if(this._palette.length===0){this.error(new Error("Transparency chunk must be after palette"));return}if(e.length>this._palette.length){this.error(new Error("More transparent colors than palette size"));return}for(let t=0;t<e.length;t++)this._palette[t][3]=e[t];this.palette(this._palette)}this._colorType===C.COLORTYPE_GRAYSCALE&&this.transColor([e.readUInt16BE(0)]),this._colorType===C.COLORTYPE_COLOR&&this.transColor([e.readUInt16BE(0),e.readUInt16BE(2),e.readUInt16BE(4)]),this._handleChunkEnd()};w.prototype._handleGAMA=function(e){this.read(e,this._parseGAMA.bind(this))};w.prototype._parseGAMA=function(e){this._crc.write(e),this.gamma(e.readUInt32BE(0)/C.GAMMA_DIVISION),this._handleChunkEnd()};w.prototype._handleIDAT=function(e){this._emittedHeadersFinished||(this._emittedHeadersFinished=!0,this.headersFinished()),this.read(-e,this._parseIDAT.bind(this,e))};w.prototype._parseIDAT=function(e,t){if(this._crc.write(t),this._colorType===C.COLORTYPE_PALETTE_COLOR&&this._palette.length===0)throw new Error("Expected palette not found");this.inflateData(t);let r=e-t.length;r>0?this._handleIDAT(r):this._handleChunkEnd()};w.prototype._handleIEND=function(e){this.read(e,this._parseIEND.bind(this))};w.prototype._parseIEND=function(e){this._crc.write(e),this._hasIEND=!0,this._handleChunkEnd(),this.finished&&this.finished()}});var ne=b(ke=>{"use strict";var Re=J(),Yt=[function(){},function(e,t,r,i){if(i===t.length)throw new Error("Ran out of data");let n=t[i];e[r]=n,e[r+1]=n,e[r+2]=n,e[r+3]=255},function(e,t,r,i){if(i+1>=t.length)throw new Error("Ran out of data");let n=t[i];e[r]=n,e[r+1]=n,e[r+2]=n,e[r+3]=t[i+1]},function(e,t,r,i){if(i+2>=t.length)throw new Error("Ran out of data");e[r]=t[i],e[r+1]=t[i+1],e[r+2]=t[i+2],e[r+3]=255},function(e,t,r,i){if(i+3>=t.length)throw new Error("Ran out of data");e[r]=t[i],e[r+1]=t[i+1],e[r+2]=t[i+2],e[r+3]=t[i+3]}],Ut=[function(){},function(e,t,r,i){let n=t[0];e[r]=n,e[r+1]=n,e[r+2]=n,e[r+3]=i},function(e,t,r){let i=t[0];e[r]=i,e[r+1]=i,e[r+2]=i,e[r+3]=t[1]},function(e,t,r,i){e[r]=t[0],e[r+1]=t[1],e[r+2]=t[2],e[r+3]=i},function(e,t,r){e[r]=t[0],e[r+1]=t[1],e[r+2]=t[2],e[r+3]=t[3]}];function vt(e,t){let r=[],i=0;function n(){if(i===e.length)throw new Error("Ran out of data");let l=e[i];i++;let s,o,h,f,a,u,c,d;switch(t){default:throw new Error("unrecognised depth");case 16:c=e[i],i++,r.push((l<<8)+c);break;case 4:c=l&15,d=l>>4,r.push(d,c);break;case 2:a=l&3,u=l>>2&3,c=l>>4&3,d=l>>6&3,r.push(d,c,u,a);break;case 1:s=l&1,o=l>>1&1,h=l>>2&1,f=l>>3&1,a=l>>4&1,u=l>>5&1,c=l>>6&1,d=l>>7&1,r.push(d,c,u,a,f,h,o,s);break}}return{get:function(l){for(;r.length<l;)n();let s=r.slice(0,l);return r=r.slice(l),s},resetAfterLine:function(){r.length=0},end:function(){if(i!==e.length)throw new Error("extra data found")}}}function Gt(e,t,r,i,n,l){let s=e.width,o=e.height,h=e.index;for(let f=0;f<o;f++)for(let a=0;a<s;a++){let u=r(a,f,h);Yt[i](t,n,u,l),l+=i}return l}function Ht(e,t,r,i,n,l){let s=e.width,o=e.height,h=e.index;for(let f=0;f<o;f++){for(let a=0;a<s;a++){let u=n.get(i),c=r(a,f,h);Ut[i](t,u,c,l)}n.resetAfterLine()}}ke.dataToBitMap=function(e,t){let r=t.width,i=t.height,n=t.depth,l=t.bpp,s=t.interlace,o;n!==8&&(o=vt(e,n));let h;n<=8?h=Buffer.alloc(r*i*4):h=new Uint16Array(r*i*4);let f=Math.pow(2,n)-1,a=0,u,c;if(s)u=Re.getImagePasses(r,i),c=Re.getInterlaceIterator(r,i);else{let d=0;c=function(){let _=d;return d+=4,_},u=[{width:r,height:i}]}for(let d=0;d<u.length;d++)n===8?a=Gt(u[d],h,c,l,e,a):Ht(u[d],h,c,l,o,f);if(n===8){if(a!==e.length)throw new Error("extra data found")}else o.end();return h}});var le=b((Vr,Be)=>{"use strict";function Ft(e,t,r,i,n){let l=0;for(let s=0;s<i;s++)for(let o=0;o<r;o++){let h=n[e[l]];if(!h)throw new Error("index "+e[l]+" not in palette");for(let f=0;f<4;f++)t[l+f]=h[f];l+=4}}function zt(e,t,r,i,n){let l=0;for(let s=0;s<i;s++)for(let o=0;o<r;o++){let h=!1;if(n.length===1?n[0]===e[l]&&(h=!0):n[0]===e[l]&&n[1]===e[l+1]&&n[2]===e[l+2]&&(h=!0),h)for(let f=0;f<4;f++)t[l+f]=0;l+=4}}function jt(e,t,r,i,n){let l=255,s=Math.pow(2,n)-1,o=0;for(let h=0;h<i;h++)for(let f=0;f<r;f++){for(let a=0;a<4;a++)t[o+a]=Math.floor(e[o+a]*l/s+.5);o+=4}}Be.exports=function(e,t,r=!1){let i=t.depth,n=t.width,l=t.height,s=t.colorType,o=t.transColor,h=t.palette,f=e;return s===3?Ft(e,f,n,l,h):(o&&zt(e,f,n,l,o),i!==8&&!r&&(i===16&&(f=Buffer.alloc(n*l*4)),jt(e,f,n,l,i))),f}});var Me=b((Zr,xe)=>{"use strict";var Vt=require("util"),se=require("zlib"),Se=K(),Zt=Ae(),Wt=ie(),Kt=ne(),Xt=le(),k=xe.exports=function(e){Se.call(this),this._parser=new Wt(e,{read:this.read.bind(this),error:this._handleError.bind(this),metadata:this._handleMetaData.bind(this),gamma:this.emit.bind(this,"gamma"),palette:this._handlePalette.bind(this),transColor:this._handleTransColor.bind(this),finished:this._finished.bind(this),inflateData:this._inflateData.bind(this),simpleTransparency:this._simpleTransparency.bind(this),headersFinished:this._headersFinished.bind(this)}),this._options=e,this.writable=!0,this._parser.start()};Vt.inherits(k,Se);k.prototype._handleError=function(e){this.emit("error",e),this.writable=!1,this.destroy(),this._inflate&&this._inflate.destroy&&this._inflate.destroy(),this._filter&&(this._filter.destroy(),this._filter.on("error",function(){})),this.errord=!0};k.prototype._inflateData=function(e){if(!this._inflate)if(this._bitmapInfo.interlace)this._inflate=se.createInflate(),this._inflate.on("error",this.emit.bind(this,"error")),this._filter.on("complete",this._complete.bind(this)),this._inflate.pipe(this._filter);else{let r=((this._bitmapInfo.width*this._bitmapInfo.bpp*this._bitmapInfo.depth+7>>3)+1)*this._bitmapInfo.height,i=Math.max(r,se.Z_MIN_CHUNK);this._inflate=se.createInflate({chunkSize:i});let n=r,l=this.emit.bind(this,"error");this._inflate.on("error",function(o){n&&l(o)}),this._filter.on("complete",this._complete.bind(this));let s=this._filter.write.bind(this._filter);this._inflate.on("data",function(o){n&&(o.length>n&&(o=o.slice(0,n)),n-=o.length,s(o))}),this._inflate.on("end",this._filter.end.bind(this._filter))}this._inflate.write(e)};k.prototype._handleMetaData=function(e){this._metaData=e,this._bitmapInfo=Object.create(e),this._filter=new Zt(this._bitmapInfo)};k.prototype._handleTransColor=function(e){this._bitmapInfo.transColor=e};k.prototype._handlePalette=function(e){this._bitmapInfo.palette=e};k.prototype._simpleTransparency=function(){this._metaData.alpha=!0};k.prototype._headersFinished=function(){this.emit("metadata",this._metaData)};k.prototype._finished=function(){this.errord||(this._inflate?this._inflate.end():this.emit("error","No Inflate block"))};k.prototype._complete=function(e){if(this.errord)return;let t;try{let r=Kt.dataToBitMap(e,this._bitmapInfo);t=Xt(r,this._bitmapInfo,this._options.skipRescale),r=null}catch(r){this._handleError(r);return}this.emit("parsed",t)}});var Ne=b((Wr,De)=>{"use strict";var I=q();De.exports=function(e,t,r,i){let n=[I.COLORTYPE_COLOR_ALPHA,I.COLORTYPE_ALPHA].indexOf(i.colorType)!==-1;if(i.colorType===i.inputColorType){let _=(function(){let m=new ArrayBuffer(2);return new DataView(m).setInt16(0,256,!0),new Int16Array(m)[0]!==256})();if(i.bitDepth===8||i.bitDepth===16&&_)return e}let l=i.bitDepth!==16?e:new Uint16Array(e.buffer),s=255,o=I.COLORTYPE_TO_BPP_MAP[i.inputColorType];o===4&&!i.inputHasAlpha&&(o=3);let h=I.COLORTYPE_TO_BPP_MAP[i.colorType];i.bitDepth===16&&(s=65535,h*=2);let f=Buffer.alloc(t*r*h),a=0,u=0,c=i.bgColor||{};c.red===void 0&&(c.red=s),c.green===void 0&&(c.green=s),c.blue===void 0&&(c.blue=s);function d(){let _,m,p,g=s;switch(i.inputColorType){case I.COLORTYPE_COLOR_ALPHA:g=l[a+3],_=l[a],m=l[a+1],p=l[a+2];break;case I.COLORTYPE_COLOR:_=l[a],m=l[a+1],p=l[a+2];break;case I.COLORTYPE_ALPHA:g=l[a+1],_=l[a],m=_,p=_;break;case I.COLORTYPE_GRAYSCALE:_=l[a],m=_,p=_;break;default:throw new Error("input color type:"+i.inputColorType+" is not supported at present")}return i.inputHasAlpha&&(n||(g/=s,_=Math.min(Math.max(Math.round((1-g)*c.red+g*_),0),s),m=Math.min(Math.max(Math.round((1-g)*c.green+g*m),0),s),p=Math.min(Math.max(Math.round((1-g)*c.blue+g*p),0),s))),{red:_,green:m,blue:p,alpha:g}}for(let _=0;_<r;_++)for(let m=0;m<t;m++){let p=d(l,a);switch(i.colorType){case I.COLORTYPE_COLOR_ALPHA:case I.COLORTYPE_COLOR:i.bitDepth===8?(f[u]=p.red,f[u+1]=p.green,f[u+2]=p.blue,n&&(f[u+3]=p.alpha)):(f.writeUInt16BE(p.red,u),f.writeUInt16BE(p.green,u+2),f.writeUInt16BE(p.blue,u+4),n&&f.writeUInt16BE(p.alpha,u+6));break;case I.COLORTYPE_ALPHA:case I.COLORTYPE_GRAYSCALE:{let g=(p.red+p.green+p.blue)/3;i.bitDepth===8?(f[u]=g,n&&(f[u+1]=p.alpha)):(f.writeUInt16BE(g,u),n&&f.writeUInt16BE(p.alpha,u+2));break}default:throw new Error("unrecognised color Type "+i.colorType)}a+=o,u+=h}return f}});var Ue=b((Kr,Ye)=>{"use strict";var qe=Q();function Jt(e,t,r,i,n){for(let l=0;l<r;l++)i[n+l]=e[t+l]}function Qt(e,t,r){let i=0,n=t+r;for(let l=t;l<n;l++)i+=Math.abs(e[l]);return i}function $t(e,t,r,i,n,l){for(let s=0;s<r;s++){let o=s>=l?e[t+s-l]:0,h=e[t+s]-o;i[n+s]=h}}function er(e,t,r,i){let n=0;for(let l=0;l<r;l++){let s=l>=i?e[t+l-i]:0,o=e[t+l]-s;n+=Math.abs(o)}return n}function tr(e,t,r,i,n){for(let l=0;l<r;l++){let s=t>0?e[t+l-r]:0,o=e[t+l]-s;i[n+l]=o}}function rr(e,t,r){let i=0,n=t+r;for(let l=t;l<n;l++){let s=t>0?e[l-r]:0,o=e[l]-s;i+=Math.abs(o)}return i}function ir(e,t,r,i,n,l){for(let s=0;s<r;s++){let o=s>=l?e[t+s-l]:0,h=t>0?e[t+s-r]:0,f=e[t+s]-(o+h>>1);i[n+s]=f}}function nr(e,t,r,i){let n=0;for(let l=0;l<r;l++){let s=l>=i?e[t+l-i]:0,o=t>0?e[t+l-r]:0,h=e[t+l]-(s+o>>1);n+=Math.abs(h)}return n}function lr(e,t,r,i,n,l){for(let s=0;s<r;s++){let o=s>=l?e[t+s-l]:0,h=t>0?e[t+s-r]:0,f=t>0&&s>=l?e[t+s-(r+l)]:0,a=e[t+s]-qe(o,h,f);i[n+s]=a}}function sr(e,t,r,i){let n=0;for(let l=0;l<r;l++){let s=l>=i?e[t+l-i]:0,o=t>0?e[t+l-r]:0,h=t>0&&l>=i?e[t+l-(r+i)]:0,f=e[t+l]-qe(s,o,h);n+=Math.abs(f)}return n}var or={0:Jt,1:$t,2:tr,3:ir,4:lr},hr={0:Qt,1:er,2:rr,3:nr,4:sr};Ye.exports=function(e,t,r,i,n){let l;if(!("filterType"in i)||i.filterType===-1)l=[0,1,2,3,4];else if(typeof i.filterType=="number")l=[i.filterType];else throw new Error("unrecognised filter types");i.bitDepth===16&&(n*=2);let s=t*n,o=0,h=0,f=Buffer.alloc((s+1)*r),a=l[0];for(let u=0;u<r;u++){if(l.length>1){let c=1/0;for(let d=0;d<l.length;d++){let _=hr[l[d]](e,h,s,n);_<c&&(a=l[d],c=_)}}f[o]=a,o++,or[a](e,h,s,f,o,n),o+=s,h+=s}return f}});var oe=b((Xr,ve)=>{"use strict";var E=q(),fr=re(),ar=Ne(),ur=Ue(),cr=require("zlib"),S=ve.exports=function(e){if(this._options=e,e.deflateChunkSize=e.deflateChunkSize||32*1024,e.deflateLevel=e.deflateLevel!=null?e.deflateLevel:9,e.deflateStrategy=e.deflateStrategy!=null?e.deflateStrategy:3,e.inputHasAlpha=e.inputHasAlpha!=null?e.inputHasAlpha:!0,e.deflateFactory=e.deflateFactory||cr.createDeflate,e.bitDepth=e.bitDepth||8,e.colorType=typeof e.colorType=="number"?e.colorType:E.COLORTYPE_COLOR_ALPHA,e.inputColorType=typeof e.inputColorType=="number"?e.inputColorType:E.COLORTYPE_COLOR_ALPHA,[E.COLORTYPE_GRAYSCALE,E.COLORTYPE_COLOR,E.COLORTYPE_COLOR_ALPHA,E.COLORTYPE_ALPHA].indexOf(e.colorType)===-1)throw new Error("option color type:"+e.colorType+" is not supported at present");if([E.COLORTYPE_GRAYSCALE,E.COLORTYPE_COLOR,E.COLORTYPE_COLOR_ALPHA,E.COLORTYPE_ALPHA].indexOf(e.inputColorType)===-1)throw new Error("option input color type:"+e.inputColorType+" is not supported at present");if(e.bitDepth!==8&&e.bitDepth!==16)throw new Error("option bit depth:"+e.bitDepth+" is not supported at present")};S.prototype.getDeflateOptions=function(){return{chunkSize:this._options.deflateChunkSize,level:this._options.deflateLevel,strategy:this._options.deflateStrategy}};S.prototype.createDeflate=function(){return this._options.deflateFactory(this.getDeflateOptions())};S.prototype.filterData=function(e,t,r){let i=ar(e,t,r,this._options),n=E.COLORTYPE_TO_BPP_MAP[this._options.colorType];return ur(i,t,r,this._options,n)};S.prototype._packChunk=function(e,t){let r=t?t.length:0,i=Buffer.alloc(r+12);return i.writeUInt32BE(r,0),i.writeUInt32BE(e,4),t&&t.copy(i,8),i.writeInt32BE(fr.crc32(i.slice(4,i.length-4)),i.length-4),i};S.prototype.packGAMA=function(e){let t=Buffer.alloc(4);return t.writeUInt32BE(Math.floor(e*E.GAMMA_DIVISION),0),this._packChunk(E.TYPE_gAMA,t)};S.prototype.packIHDR=function(e,t){let r=Buffer.alloc(13);return r.writeUInt32BE(e,0),r.writeUInt32BE(t,4),r[8]=this._options.bitDepth,r[9]=this._options.colorType,r[10]=0,r[11]=0,r[12]=0,this._packChunk(E.TYPE_IHDR,r)};S.prototype.packIDAT=function(e){return this._packChunk(E.TYPE_IDAT,e)};S.prototype.packIEND=function(){return this._packChunk(E.TYPE_IEND,null)}});var ze=b((Jr,Fe)=>{"use strict";var pr=require("util"),Ge=require("stream"),dr=q(),_r=oe(),He=Fe.exports=function(e){Ge.call(this);let t=e||{};this._packer=new _r(t),this._deflate=this._packer.createDeflate(),this.readable=!0};pr.inherits(He,Ge);He.prototype.pack=function(e,t,r,i){this.emit("data",Buffer.from(dr.PNG_SIGNATURE)),this.emit("data",this._packer.packIHDR(t,r)),i&&this.emit("data",this._packer.packGAMA(i));let n=this._packer.filterData(e,t,r);this._deflate.on("error",this.emit.bind(this,"error")),this._deflate.on("data",function(l){this.emit("data",this._packer.packIDAT(l))}.bind(this)),this._deflate.on("end",function(){this.emit("data",this._packer.packIEND()),this.emit("end")}.bind(this)),this._deflate.end(n)}});var Xe=b((G,Ke)=>{"use strict";var je=require("assert").ok,Y=require("zlib"),mr=require("util"),Ve=require("buffer").kMaxLength;function x(e){if(!(this instanceof x))return new x(e);e&&e.chunkSize<Y.Z_MIN_CHUNK&&(e.chunkSize=Y.Z_MIN_CHUNK),Y.Inflate.call(this,e),this._offset=this._offset===void 0?this._outOffset:this._offset,this._buffer=this._buffer||this._outBuffer,e&&e.maxLength!=null&&(this._maxLength=e.maxLength)}function gr(e){return new x(e)}function Ze(e,t){t&&process.nextTick(t),e._handle&&(e._handle.close(),e._handle=null)}x.prototype._processChunk=function(e,t,r){if(typeof r=="function")return Y.Inflate._processChunk.call(this,e,t,r);let i=this,n=e&&e.length,l=this._chunkSize-this._offset,s=this._maxLength,o=0,h=[],f=0,a;this.on("error",function(_){a=_});function u(_,m){if(i._hadError)return;let p=l-m;if(je(p>=0,"have should not go down"),p>0){let g=i._buffer.slice(i._offset,i._offset+p);if(i._offset+=p,g.length>s&&(g=g.slice(0,s)),h.push(g),f+=g.length,s-=g.length,s===0)return!1}return(m===0||i._offset>=i._chunkSize)&&(l=i._chunkSize,i._offset=0,i._buffer=Buffer.allocUnsafe(i._chunkSize)),m===0?(o+=n-_,n=_,!0):!1}je(this._handle,"zlib binding closed");let c;do c=this._handle.writeSync(t,e,o,n,this._buffer,this._offset,l),c=c||this._writeState;while(!this._hadError&&u(c[0],c[1]));if(this._hadError)throw a;if(f>=Ve)throw Ze(this),new RangeError("Cannot create final Buffer. It would be larger than 0x"+Ve.toString(16)+" bytes");let d=Buffer.concat(h,f);return Ze(this),d};mr.inherits(x,Y.Inflate);function yr(e,t){if(typeof t=="string"&&(t=Buffer.from(t)),!(t instanceof Buffer))throw new TypeError("Not a string or buffer");let r=e._finishFlushFlag;return r==null&&(r=Y.Z_FINISH),e._processChunk(t,r)}function We(e,t){return yr(new x(t),e)}Ke.exports=G=We;G.Inflate=x;G.createInflate=gr;G.inflateSync=We});var he=b((Qr,Qe)=>{"use strict";var Je=Qe.exports=function(e){this._buffer=e,this._reads=[]};Je.prototype.read=function(e,t){this._reads.push({length:Math.abs(e),allowLess:e<0,func:t})};Je.prototype.process=function(){for(;this._reads.length>0&&this._buffer.length;){let e=this._reads[0];if(this._buffer.length&&(this._buffer.length>=e.length||e.allowLess)){this._reads.shift();let t=this._buffer;this._buffer=t.slice(e.length),e.func.call(this,t.slice(0,e.length))}else break}if(this._reads.length>0)throw new Error("There are some read requests waitng on finished stream");if(this._buffer.length>0)throw new Error("unrecognised content at end of stream")}});var et=b($e=>{"use strict";var br=he(),Cr=$();$e.process=function(e,t){let r=[],i=new br(e);return new Cr(t,{read:i.read.bind(i),write:function(l){r.push(l)},complete:function(){}}).start(),i.process(),Buffer.concat(r)}});var nt=b((ei,it)=>{"use strict";var tt=!0,rt=require("zlib"),wr=Xe();rt.deflateSync||(tt=!1);var Er=he(),Tr=et(),Pr=ie(),Ar=ne(),Or=le();it.exports=function(e,t){if(!tt)throw new Error("To use the sync capability of this library in old node versions, please pin pngjs to v2.3.0");let r;function i(y){r=y}let n;function l(y){n=y}function s(y){n.transColor=y}function o(y){n.palette=y}function h(){n.alpha=!0}let f;function a(y){f=y}let u=[];function c(y){u.push(y)}let d=new Er(e);if(new Pr(t,{read:d.read.bind(d),error:i,metadata:l,gamma:a,palette:o,transColor:s,inflateData:c,simpleTransparency:h}).start(),d.process(),r)throw r;let m=Buffer.concat(u);u.length=0;let p;if(n.interlace)p=rt.inflateSync(m);else{let A=((n.width*n.bpp*n.depth+7>>3)+1)*n.height;p=wr(m,{chunkSize:A,maxLength:A})}if(m=null,!p||!p.length)throw new Error("bad png - invalid inflate data response");let g=Tr.process(p,n);m=null;let L=Ar.dataToBitMap(g,n);g=null;let T=Or(L,n,t.skipRescale);return n.data=T,n.gamma=f||0,n}});var ht=b((ti,ot)=>{"use strict";var lt=!0,st=require("zlib");st.deflateSync||(lt=!1);var Lr=q(),Ir=oe();ot.exports=function(e,t){if(!lt)throw new Error("To use the sync capability of this library in old node versions, please pin pngjs to v2.3.0");let r=t||{},i=new Ir(r),n=[];n.push(Buffer.from(Lr.PNG_SIGNATURE)),n.push(i.packIHDR(e.width,e.height)),e.gamma&&n.push(i.packGAMA(e.gamma));let l=i.filterData(e.data,e.width,e.height),s=st.deflateSync(l,i.getDeflateOptions());if(l=null,!s||!s.length)throw new Error("bad png - invalid compressed data response");return n.push(i.packIDAT(s)),n.push(i.packIEND()),Buffer.concat(n)}});var ft=b(fe=>{"use strict";var Rr=nt(),kr=ht();fe.read=function(e,t){return Rr(e,t||{})};fe.write=function(e,t){return kr(e,t)}});var F=b(ut=>{"use strict";var Br=require("util"),at=require("stream"),Sr=Me(),xr=ze(),Mr=ft(),P=ut.PNG=function(e){at.call(this),e=e||{},this.width=e.width|0,this.height=e.height|0,this.data=this.width>0&&this.height>0?Buffer.alloc(4*this.width*this.height):null,e.fill&&this.data&&this.data.fill(0),this.gamma=0,this.readable=this.writable=!0,this._parser=new Sr(e),this._parser.on("error",this.emit.bind(this,"error")),this._parser.on("close",this._handleClose.bind(this)),this._parser.on("metadata",this._metadata.bind(this)),this._parser.on("gamma",this._gamma.bind(this)),this._parser.on("parsed",function(t){this.data=t,this.emit("parsed",t)}.bind(this)),this._packer=new xr(e),this._packer.on("data",this.emit.bind(this,"data")),this._packer.on("end",this.emit.bind(this,"end")),this._parser.on("close",this._handleClose.bind(this)),this._packer.on("error",this.emit.bind(this,"error"))};Br.inherits(P,at);P.sync=Mr;P.prototype.pack=function(){return!this.data||!this.data.length?(this.emit("error","No data provided"),this):(process.nextTick(function(){this._packer.pack(this.data,this.width,this.height,this.gamma)}.bind(this)),this)};P.prototype.parse=function(e,t){if(t){let r,i;r=function(n){this.removeListener("error",i),this.data=n,t(null,this)}.bind(this),i=function(n){this.removeListener("parsed",r),t(n,null)}.bind(this),this.once("parsed",r),this.once("error",i)}return this.end(e),this};P.prototype.write=function(e){return this._parser.write(e),!0};P.prototype.end=function(e){this._parser.end(e)};P.prototype._metadata=function(e){this.width=e.width,this.height=e.height,this.emit("metadata",e)};P.prototype._gamma=function(e){this.gamma=e};P.prototype._handleClose=function(){!this._parser.writable&&!this._packer.readable&&this.emit("close")};P.bitblt=function(e,t,r,i,n,l,s,o){if(r|=0,i|=0,n|=0,l|=0,s|=0,o|=0,r>e.width||i>e.height||r+n>e.width||i+l>e.height)throw new Error("bitblt reading outside image");if(s>t.width||o>t.height||s+n>t.width||o+l>t.height)throw new Error("bitblt writing outside image");for(let h=0;h<l;h++)e.data.copy(t.data,(o+h)*t.width+s<<2,(i+h)*e.width+r<<2,(i+h)*e.width+r+n<<2)};P.prototype.bitblt=function(e,t,r,i,n,l,s){return P.bitblt(this,e,t,r,i,n,l,s),this};P.adjustGamma=function(e){if(e.gamma){for(let t=0;t<e.height;t++)for(let r=0;r<e.width;r++){let i=e.width*t+r<<2;for(let n=0;n<3;n++){let l=e.data[i+n]/255;l=Math.pow(l,1/2.2/e.gamma),e.data[i+n]=Math.round(l*255)}}e.gamma=0}};P.prototype.adjustGamma=function(){P.adjustGamma(this)}});var Dr={};Rt(Dr,{DEFAULT_COMPARE_PDFS_OPTIONS:()=>de,comparePdfs:()=>Ct});module.exports=kt(Dr);var pe=require("pdfjs-dist/legacy/build/pdf.mjs"),bt=W(F());var ct=require("@napi-rs/canvas"),pt=W(F());async function ae({pdf:e,scale:t}){let{numPages:r}=e,i=Array.from({length:r},(l,s)=>s+1);return await Promise.all(i.map(async l=>{let s=await e.getPage(l),o=s.getViewport({scale:t}),h=(0,ct.createCanvas)(o.width,o.height),f=h.getContext("2d");await s.render({viewport:o,canvas:h,canvasContext:f}).promise;let a=h.toBuffer("image/png");return pt.PNG.sync.read(a)}))}function ce(e,t,r,i,n,l={}){let{threshold:s=.1,alpha:o=.1,aaColor:h=[255,255,0],diffColor:f=[255,0,0],includeAA:a,diffColorAlt:u,diffMask:c}=l;if(!ue(e)||!ue(t)||r&&!ue(r))throw new Error("Image data: Uint8Array, Uint8ClampedArray or Buffer expected.");if(e.length!==t.length||r&&r.length!==e.length)throw new Error("Image sizes do not match.");if(e.length!==i*n*4)throw new Error("Image data size does not match width/height.");let d=i*n,_=new Uint32Array(e.buffer,e.byteOffset,d),m=new Uint32Array(t.buffer,t.byteOffset,d),p=!0;for(let O=0;O<d;O++)if(_[O]!==m[O]){p=!1;break}if(p){if(r&&!c)for(let O=0;O<d;O++)_t(e,4*O,o,r);return 0}let g=35215*s*s,[L,T,y]=h,[A,M,U]=f,[V,wt,Et]=u||f,_e=0;for(let O=0;O<n;O++)for(let v=0;v<i;v++){let Z=O*i+v,D=Z*4,me=_[Z]===m[Z]?0:mt(e,t,D,D,!1);if(Math.abs(me)>g){let Tt=dt(e,v,O,i,n,_,m)||dt(t,v,O,i,n,m,_);!a&&Tt?r&&!c&&j(r,D,L,T,y):(r&&(me<0?j(r,D,V,wt,Et):j(r,D,A,M,U)),_e++)}else r&&!c&&_t(e,D,o,r)}return _e}function ue(e){return ArrayBuffer.isView(e)&&e.BYTES_PER_ELEMENT===1}function dt(e,t,r,i,n,l,s){let o=Math.max(t-1,0),h=Math.max(r-1,0),f=Math.min(t+1,i-1),a=Math.min(r+1,n-1),u=r*i+t,c=t===o||t===f||r===h||r===a?1:0,d=0,_=0,m=0,p=0,g=0,L=0;for(let T=o;T<=f;T++)for(let y=h;y<=a;y++){if(T===t&&y===r)continue;let A=mt(e,e,u*4,(y*i+T)*4,!0);if(A===0){if(c++,c>2)return!1}else A<d?(d=A,m=T,p=y):A>_&&(_=A,g=T,L=y)}return d===0||_===0?!1:z(l,m,p,i,n)&&z(s,m,p,i,n)||z(l,g,L,i,n)&&z(s,g,L,i,n)}function z(e,t,r,i,n){let l=Math.max(t-1,0),s=Math.max(r-1,0),o=Math.min(t+1,i-1),h=Math.min(r+1,n-1),f=e[r*i+t],a=t===l||t===o||r===s||r===h?1:0;for(let u=l;u<=o;u++)for(let c=s;c<=h;c++)if(!(u===t&&c===r)&&(a+=+(f===e[c*i+u]),a>2))return!0;return!1}function mt(e,t,r,i,n){let l=e[r],s=e[r+1],o=e[r+2],h=e[r+3],f=t[i],a=t[i+1],u=t[i+2],c=t[i+3],d=l-f,_=s-a,m=o-u,p=h-c;if(!d&&!_&&!m&&!p)return 0;if(h<255||c<255){let A=48+159*(r%2),M=48+159*((r/1.618033988749895|0)%2),U=48+159*((r/2.618033988749895|0)%2);d=(l*h-f*c-A*p)/255,_=(s*h-a*c-M*p)/255,m=(o*h-u*c-U*p)/255}let g=d*.29889531+_*.58662247+m*.11448223;if(n)return g;let L=d*.59597799-_*.2741761-m*.32180189,T=d*.21147017-_*.52261711+m*.31114694,y=.5053*g*g+.299*L*L+.1957*T*T;return g>0?-y:y}function j(e,t,r,i,n){e[t+0]=r,e[t+1]=i,e[t+2]=n,e[t+3]=255}function _t(e,t,r,i){let n=255+(e[t]*.29889531+e[t+1]*.58662247+e[t+2]*.11448223-255)*r*e[t+3]/255;j(i,t,n,n,n)}var gt=W(F());function yt({png1:e,png2:t,threshold:r,antiAliasing:i,alpha:n,antiLiasingColor:l,diffColor:s,diffColorAlt:o,diffMask:h}){let{width:f,height:a}=e,u=new gt.PNG({width:f,height:a});return ce(e.data,t.data,u.data,f,a,{threshold:r,includeAA:i,alpha:n,aaColor:l,diffColor:s,diffColorAlt:o,diffMask:h})<=0?{equal:!0}:{equal:!1,diffPng:u}}var de={pngScale:1,considerAntiAliasing:!1,includeDiffMask:!1,diffThreshold:.1,diffAlpha:.1,diffAntiAliasingColor:[255,255,0],diffColor:[255,0,0],diffColorAlt:[255,0,0]};async function Ct(e,t,r){let{pngScale:i,considerAntiAliasing:n,includeDiffMask:l,diffThreshold:s,diffAlpha:o,diffAntiAliasingColor:h,diffColor:f,diffColorAlt:a}={...de,...r},u=Uint8Array.from(e),c=Uint8Array.from(t),d=await(0,pe.getDocument)({data:u}).promise,_=await(0,pe.getDocument)({data:c}).promise,m=await ae({pdf:d,scale:i}),p=await ae({pdf:_,scale:i}),g=m.flatMap((T,y)=>{let A=y+1,M=p[y];if(!M)return[];let{equal:U,diffPng:V}=yt({png1:T,png2:M,threshold:s,antiAliasing:n,alpha:o,antiLiasingColor:h,diffColor:f,diffColorAlt:a,diffMask:l});return U?[]:{pageNumber:A,diffPng:bt.PNG.sync.write(V)}}),L=m.length!==p.length;return g.length>0||L?{equal:!1,diffs:g,diffPageCount:L}:{equal:!0}}0&&(module.exports={DEFAULT_COMPARE_PDFS_OPTIONS,comparePdfs});
2
+ //# sourceMappingURL=index.cjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../node_modules/pngjs/lib/chunkstream.js", "../../node_modules/pngjs/lib/interlace.js", "../../node_modules/pngjs/lib/paeth-predictor.js", "../../node_modules/pngjs/lib/filter-parse.js", "../../node_modules/pngjs/lib/filter-parse-async.js", "../../node_modules/pngjs/lib/constants.js", "../../node_modules/pngjs/lib/crc.js", "../../node_modules/pngjs/lib/parser.js", "../../node_modules/pngjs/lib/bitmapper.js", "../../node_modules/pngjs/lib/format-normaliser.js", "../../node_modules/pngjs/lib/parser-async.js", "../../node_modules/pngjs/lib/bitpacker.js", "../../node_modules/pngjs/lib/filter-pack.js", "../../node_modules/pngjs/lib/packer.js", "../../node_modules/pngjs/lib/packer-async.js", "../../node_modules/pngjs/lib/sync-inflate.js", "../../node_modules/pngjs/lib/sync-reader.js", "../../node_modules/pngjs/lib/filter-parse-sync.js", "../../node_modules/pngjs/lib/parser-sync.js", "../../node_modules/pngjs/lib/packer-sync.js", "../../node_modules/pngjs/lib/png-sync.js", "../../node_modules/pngjs/lib/png.js", "../../src/index.ts", "../../src/functions/comparePdfs.ts", "../../src/functions/convertPdfToPngs.ts", "../../node_modules/pixelmatch/index.js", "../../src/functions/comparePngs.ts"],
4
+ "sourcesContent": ["\"use strict\";\n\nlet util = require(\"util\");\nlet Stream = require(\"stream\");\n\nlet ChunkStream = (module.exports = function () {\n Stream.call(this);\n\n this._buffers = [];\n this._buffered = 0;\n\n this._reads = [];\n this._paused = false;\n\n this._encoding = \"utf8\";\n this.writable = true;\n});\nutil.inherits(ChunkStream, Stream);\n\nChunkStream.prototype.read = function (length, callback) {\n this._reads.push({\n length: Math.abs(length), // if length < 0 then at most this length\n allowLess: length < 0,\n func: callback,\n });\n\n process.nextTick(\n function () {\n this._process();\n\n // its paused and there is not enought data then ask for more\n if (this._paused && this._reads && this._reads.length > 0) {\n this._paused = false;\n\n this.emit(\"drain\");\n }\n }.bind(this)\n );\n};\n\nChunkStream.prototype.write = function (data, encoding) {\n if (!this.writable) {\n this.emit(\"error\", new Error(\"Stream not writable\"));\n return false;\n }\n\n let dataBuffer;\n if (Buffer.isBuffer(data)) {\n dataBuffer = data;\n } else {\n dataBuffer = Buffer.from(data, encoding || this._encoding);\n }\n\n this._buffers.push(dataBuffer);\n this._buffered += dataBuffer.length;\n\n this._process();\n\n // ok if there are no more read requests\n if (this._reads && this._reads.length === 0) {\n this._paused = true;\n }\n\n return this.writable && !this._paused;\n};\n\nChunkStream.prototype.end = function (data, encoding) {\n if (data) {\n this.write(data, encoding);\n }\n\n this.writable = false;\n\n // already destroyed\n if (!this._buffers) {\n return;\n }\n\n // enqueue or handle end\n if (this._buffers.length === 0) {\n this._end();\n } else {\n this._buffers.push(null);\n this._process();\n }\n};\n\nChunkStream.prototype.destroySoon = ChunkStream.prototype.end;\n\nChunkStream.prototype._end = function () {\n if (this._reads.length > 0) {\n this.emit(\"error\", new Error(\"Unexpected end of input\"));\n }\n\n this.destroy();\n};\n\nChunkStream.prototype.destroy = function () {\n if (!this._buffers) {\n return;\n }\n\n this.writable = false;\n this._reads = null;\n this._buffers = null;\n\n this.emit(\"close\");\n};\n\nChunkStream.prototype._processReadAllowingLess = function (read) {\n // ok there is any data so that we can satisfy this request\n this._reads.shift(); // == read\n\n // first we need to peek into first buffer\n let smallerBuf = this._buffers[0];\n\n // ok there is more data than we need\n if (smallerBuf.length > read.length) {\n this._buffered -= read.length;\n this._buffers[0] = smallerBuf.slice(read.length);\n\n read.func.call(this, smallerBuf.slice(0, read.length));\n } else {\n // ok this is less than maximum length so use it all\n this._buffered -= smallerBuf.length;\n this._buffers.shift(); // == smallerBuf\n\n read.func.call(this, smallerBuf);\n }\n};\n\nChunkStream.prototype._processRead = function (read) {\n this._reads.shift(); // == read\n\n let pos = 0;\n let count = 0;\n let data = Buffer.alloc(read.length);\n\n // create buffer for all data\n while (pos < read.length) {\n let buf = this._buffers[count++];\n let len = Math.min(buf.length, read.length - pos);\n\n buf.copy(data, pos, 0, len);\n pos += len;\n\n // last buffer wasn't used all so just slice it and leave\n if (len !== buf.length) {\n this._buffers[--count] = buf.slice(len);\n }\n }\n\n // remove all used buffers\n if (count > 0) {\n this._buffers.splice(0, count);\n }\n\n this._buffered -= read.length;\n\n read.func.call(this, data);\n};\n\nChunkStream.prototype._process = function () {\n try {\n // as long as there is any data and read requests\n while (this._buffered > 0 && this._reads && this._reads.length > 0) {\n let read = this._reads[0];\n\n // read any data (but no more than length)\n if (read.allowLess) {\n this._processReadAllowingLess(read);\n } else if (this._buffered >= read.length) {\n // ok we can meet some expectations\n\n this._processRead(read);\n } else {\n // not enought data to satisfy first request in queue\n // so we need to wait for more\n break;\n }\n }\n\n if (this._buffers && !this.writable) {\n this._end();\n }\n } catch (ex) {\n this.emit(\"error\", ex);\n }\n};\n", "\"use strict\";\n\n// Adam 7\n// 0 1 2 3 4 5 6 7\n// 0 x 6 4 6 x 6 4 6\n// 1 7 7 7 7 7 7 7 7\n// 2 5 6 5 6 5 6 5 6\n// 3 7 7 7 7 7 7 7 7\n// 4 3 6 4 6 3 6 4 6\n// 5 7 7 7 7 7 7 7 7\n// 6 5 6 5 6 5 6 5 6\n// 7 7 7 7 7 7 7 7 7\n\nlet imagePasses = [\n {\n // pass 1 - 1px\n x: [0],\n y: [0],\n },\n {\n // pass 2 - 1px\n x: [4],\n y: [0],\n },\n {\n // pass 3 - 2px\n x: [0, 4],\n y: [4],\n },\n {\n // pass 4 - 4px\n x: [2, 6],\n y: [0, 4],\n },\n {\n // pass 5 - 8px\n x: [0, 2, 4, 6],\n y: [2, 6],\n },\n {\n // pass 6 - 16px\n x: [1, 3, 5, 7],\n y: [0, 2, 4, 6],\n },\n {\n // pass 7 - 32px\n x: [0, 1, 2, 3, 4, 5, 6, 7],\n y: [1, 3, 5, 7],\n },\n];\n\nexports.getImagePasses = function (width, height) {\n let images = [];\n let xLeftOver = width % 8;\n let yLeftOver = height % 8;\n let xRepeats = (width - xLeftOver) / 8;\n let yRepeats = (height - yLeftOver) / 8;\n for (let i = 0; i < imagePasses.length; i++) {\n let pass = imagePasses[i];\n let passWidth = xRepeats * pass.x.length;\n let passHeight = yRepeats * pass.y.length;\n for (let j = 0; j < pass.x.length; j++) {\n if (pass.x[j] < xLeftOver) {\n passWidth++;\n } else {\n break;\n }\n }\n for (let j = 0; j < pass.y.length; j++) {\n if (pass.y[j] < yLeftOver) {\n passHeight++;\n } else {\n break;\n }\n }\n if (passWidth > 0 && passHeight > 0) {\n images.push({ width: passWidth, height: passHeight, index: i });\n }\n }\n return images;\n};\n\nexports.getInterlaceIterator = function (width) {\n return function (x, y, pass) {\n let outerXLeftOver = x % imagePasses[pass].x.length;\n let outerX =\n ((x - outerXLeftOver) / imagePasses[pass].x.length) * 8 +\n imagePasses[pass].x[outerXLeftOver];\n let outerYLeftOver = y % imagePasses[pass].y.length;\n let outerY =\n ((y - outerYLeftOver) / imagePasses[pass].y.length) * 8 +\n imagePasses[pass].y[outerYLeftOver];\n return outerX * 4 + outerY * width * 4;\n };\n};\n", "\"use strict\";\n\nmodule.exports = function paethPredictor(left, above, upLeft) {\n let paeth = left + above - upLeft;\n let pLeft = Math.abs(paeth - left);\n let pAbove = Math.abs(paeth - above);\n let pUpLeft = Math.abs(paeth - upLeft);\n\n if (pLeft <= pAbove && pLeft <= pUpLeft) {\n return left;\n }\n if (pAbove <= pUpLeft) {\n return above;\n }\n return upLeft;\n};\n", "\"use strict\";\n\nlet interlaceUtils = require(\"./interlace\");\nlet paethPredictor = require(\"./paeth-predictor\");\n\nfunction getByteWidth(width, bpp, depth) {\n let byteWidth = width * bpp;\n if (depth !== 8) {\n byteWidth = Math.ceil(byteWidth / (8 / depth));\n }\n return byteWidth;\n}\n\nlet Filter = (module.exports = function (bitmapInfo, dependencies) {\n let width = bitmapInfo.width;\n let height = bitmapInfo.height;\n let interlace = bitmapInfo.interlace;\n let bpp = bitmapInfo.bpp;\n let depth = bitmapInfo.depth;\n\n this.read = dependencies.read;\n this.write = dependencies.write;\n this.complete = dependencies.complete;\n\n this._imageIndex = 0;\n this._images = [];\n if (interlace) {\n let passes = interlaceUtils.getImagePasses(width, height);\n for (let i = 0; i < passes.length; i++) {\n this._images.push({\n byteWidth: getByteWidth(passes[i].width, bpp, depth),\n height: passes[i].height,\n lineIndex: 0,\n });\n }\n } else {\n this._images.push({\n byteWidth: getByteWidth(width, bpp, depth),\n height: height,\n lineIndex: 0,\n });\n }\n\n // when filtering the line we look at the pixel to the left\n // the spec also says it is done on a byte level regardless of the number of pixels\n // so if the depth is byte compatible (8 or 16) we subtract the bpp in order to compare back\n // a pixel rather than just a different byte part. However if we are sub byte, we ignore.\n if (depth === 8) {\n this._xComparison = bpp;\n } else if (depth === 16) {\n this._xComparison = bpp * 2;\n } else {\n this._xComparison = 1;\n }\n});\n\nFilter.prototype.start = function () {\n this.read(\n this._images[this._imageIndex].byteWidth + 1,\n this._reverseFilterLine.bind(this)\n );\n};\n\nFilter.prototype._unFilterType1 = function (\n rawData,\n unfilteredLine,\n byteWidth\n) {\n let xComparison = this._xComparison;\n let xBiggerThan = xComparison - 1;\n\n for (let x = 0; x < byteWidth; x++) {\n let rawByte = rawData[1 + x];\n let f1Left = x > xBiggerThan ? unfilteredLine[x - xComparison] : 0;\n unfilteredLine[x] = rawByte + f1Left;\n }\n};\n\nFilter.prototype._unFilterType2 = function (\n rawData,\n unfilteredLine,\n byteWidth\n) {\n let lastLine = this._lastLine;\n\n for (let x = 0; x < byteWidth; x++) {\n let rawByte = rawData[1 + x];\n let f2Up = lastLine ? lastLine[x] : 0;\n unfilteredLine[x] = rawByte + f2Up;\n }\n};\n\nFilter.prototype._unFilterType3 = function (\n rawData,\n unfilteredLine,\n byteWidth\n) {\n let xComparison = this._xComparison;\n let xBiggerThan = xComparison - 1;\n let lastLine = this._lastLine;\n\n for (let x = 0; x < byteWidth; x++) {\n let rawByte = rawData[1 + x];\n let f3Up = lastLine ? lastLine[x] : 0;\n let f3Left = x > xBiggerThan ? unfilteredLine[x - xComparison] : 0;\n let f3Add = Math.floor((f3Left + f3Up) / 2);\n unfilteredLine[x] = rawByte + f3Add;\n }\n};\n\nFilter.prototype._unFilterType4 = function (\n rawData,\n unfilteredLine,\n byteWidth\n) {\n let xComparison = this._xComparison;\n let xBiggerThan = xComparison - 1;\n let lastLine = this._lastLine;\n\n for (let x = 0; x < byteWidth; x++) {\n let rawByte = rawData[1 + x];\n let f4Up = lastLine ? lastLine[x] : 0;\n let f4Left = x > xBiggerThan ? unfilteredLine[x - xComparison] : 0;\n let f4UpLeft = x > xBiggerThan && lastLine ? lastLine[x - xComparison] : 0;\n let f4Add = paethPredictor(f4Left, f4Up, f4UpLeft);\n unfilteredLine[x] = rawByte + f4Add;\n }\n};\n\nFilter.prototype._reverseFilterLine = function (rawData) {\n let filter = rawData[0];\n let unfilteredLine;\n let currentImage = this._images[this._imageIndex];\n let byteWidth = currentImage.byteWidth;\n\n if (filter === 0) {\n unfilteredLine = rawData.slice(1, byteWidth + 1);\n } else {\n unfilteredLine = Buffer.alloc(byteWidth);\n\n switch (filter) {\n case 1:\n this._unFilterType1(rawData, unfilteredLine, byteWidth);\n break;\n case 2:\n this._unFilterType2(rawData, unfilteredLine, byteWidth);\n break;\n case 3:\n this._unFilterType3(rawData, unfilteredLine, byteWidth);\n break;\n case 4:\n this._unFilterType4(rawData, unfilteredLine, byteWidth);\n break;\n default:\n throw new Error(\"Unrecognised filter type - \" + filter);\n }\n }\n\n this.write(unfilteredLine);\n\n currentImage.lineIndex++;\n if (currentImage.lineIndex >= currentImage.height) {\n this._lastLine = null;\n this._imageIndex++;\n currentImage = this._images[this._imageIndex];\n } else {\n this._lastLine = unfilteredLine;\n }\n\n if (currentImage) {\n // read, using the byte width that may be from the new current image\n this.read(currentImage.byteWidth + 1, this._reverseFilterLine.bind(this));\n } else {\n this._lastLine = null;\n this.complete();\n }\n};\n", "\"use strict\";\n\nlet util = require(\"util\");\nlet ChunkStream = require(\"./chunkstream\");\nlet Filter = require(\"./filter-parse\");\n\nlet FilterAsync = (module.exports = function (bitmapInfo) {\n ChunkStream.call(this);\n\n let buffers = [];\n let that = this;\n this._filter = new Filter(bitmapInfo, {\n read: this.read.bind(this),\n write: function (buffer) {\n buffers.push(buffer);\n },\n complete: function () {\n that.emit(\"complete\", Buffer.concat(buffers));\n },\n });\n\n this._filter.start();\n});\nutil.inherits(FilterAsync, ChunkStream);\n", "\"use strict\";\n\nmodule.exports = {\n PNG_SIGNATURE: [0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a],\n\n TYPE_IHDR: 0x49484452,\n TYPE_IEND: 0x49454e44,\n TYPE_IDAT: 0x49444154,\n TYPE_PLTE: 0x504c5445,\n TYPE_tRNS: 0x74524e53, // eslint-disable-line camelcase\n TYPE_gAMA: 0x67414d41, // eslint-disable-line camelcase\n\n // color-type bits\n COLORTYPE_GRAYSCALE: 0,\n COLORTYPE_PALETTE: 1,\n COLORTYPE_COLOR: 2,\n COLORTYPE_ALPHA: 4, // e.g. grayscale and alpha\n\n // color-type combinations\n COLORTYPE_PALETTE_COLOR: 3,\n COLORTYPE_COLOR_ALPHA: 6,\n\n COLORTYPE_TO_BPP_MAP: {\n 0: 1,\n 2: 3,\n 3: 1,\n 4: 2,\n 6: 4,\n },\n\n GAMMA_DIVISION: 100000,\n};\n", "\"use strict\";\n\nlet crcTable = [];\n\n(function () {\n for (let i = 0; i < 256; i++) {\n let currentCrc = i;\n for (let j = 0; j < 8; j++) {\n if (currentCrc & 1) {\n currentCrc = 0xedb88320 ^ (currentCrc >>> 1);\n } else {\n currentCrc = currentCrc >>> 1;\n }\n }\n crcTable[i] = currentCrc;\n }\n})();\n\nlet CrcCalculator = (module.exports = function () {\n this._crc = -1;\n});\n\nCrcCalculator.prototype.write = function (data) {\n for (let i = 0; i < data.length; i++) {\n this._crc = crcTable[(this._crc ^ data[i]) & 0xff] ^ (this._crc >>> 8);\n }\n return true;\n};\n\nCrcCalculator.prototype.crc32 = function () {\n return this._crc ^ -1;\n};\n\nCrcCalculator.crc32 = function (buf) {\n let crc = -1;\n for (let i = 0; i < buf.length; i++) {\n crc = crcTable[(crc ^ buf[i]) & 0xff] ^ (crc >>> 8);\n }\n return crc ^ -1;\n};\n", "\"use strict\";\n\nlet constants = require(\"./constants\");\nlet CrcCalculator = require(\"./crc\");\n\nlet Parser = (module.exports = function (options, dependencies) {\n this._options = options;\n options.checkCRC = options.checkCRC !== false;\n\n this._hasIHDR = false;\n this._hasIEND = false;\n this._emittedHeadersFinished = false;\n\n // input flags/metadata\n this._palette = [];\n this._colorType = 0;\n\n this._chunks = {};\n this._chunks[constants.TYPE_IHDR] = this._handleIHDR.bind(this);\n this._chunks[constants.TYPE_IEND] = this._handleIEND.bind(this);\n this._chunks[constants.TYPE_IDAT] = this._handleIDAT.bind(this);\n this._chunks[constants.TYPE_PLTE] = this._handlePLTE.bind(this);\n this._chunks[constants.TYPE_tRNS] = this._handleTRNS.bind(this);\n this._chunks[constants.TYPE_gAMA] = this._handleGAMA.bind(this);\n\n this.read = dependencies.read;\n this.error = dependencies.error;\n this.metadata = dependencies.metadata;\n this.gamma = dependencies.gamma;\n this.transColor = dependencies.transColor;\n this.palette = dependencies.palette;\n this.parsed = dependencies.parsed;\n this.inflateData = dependencies.inflateData;\n this.finished = dependencies.finished;\n this.simpleTransparency = dependencies.simpleTransparency;\n this.headersFinished = dependencies.headersFinished || function () {};\n});\n\nParser.prototype.start = function () {\n this.read(constants.PNG_SIGNATURE.length, this._parseSignature.bind(this));\n};\n\nParser.prototype._parseSignature = function (data) {\n let signature = constants.PNG_SIGNATURE;\n\n for (let i = 0; i < signature.length; i++) {\n if (data[i] !== signature[i]) {\n this.error(new Error(\"Invalid file signature\"));\n return;\n }\n }\n this.read(8, this._parseChunkBegin.bind(this));\n};\n\nParser.prototype._parseChunkBegin = function (data) {\n // chunk content length\n let length = data.readUInt32BE(0);\n\n // chunk type\n let type = data.readUInt32BE(4);\n let name = \"\";\n for (let i = 4; i < 8; i++) {\n name += String.fromCharCode(data[i]);\n }\n\n //console.log('chunk ', name, length);\n\n // chunk flags\n let ancillary = Boolean(data[4] & 0x20); // or critical\n // priv = Boolean(data[5] & 0x20), // or public\n // safeToCopy = Boolean(data[7] & 0x20); // or unsafe\n\n if (!this._hasIHDR && type !== constants.TYPE_IHDR) {\n this.error(new Error(\"Expected IHDR on beggining\"));\n return;\n }\n\n this._crc = new CrcCalculator();\n this._crc.write(Buffer.from(name));\n\n if (this._chunks[type]) {\n return this._chunks[type](length);\n }\n\n if (!ancillary) {\n this.error(new Error(\"Unsupported critical chunk type \" + name));\n return;\n }\n\n this.read(length + 4, this._skipChunk.bind(this));\n};\n\nParser.prototype._skipChunk = function (/*data*/) {\n this.read(8, this._parseChunkBegin.bind(this));\n};\n\nParser.prototype._handleChunkEnd = function () {\n this.read(4, this._parseChunkEnd.bind(this));\n};\n\nParser.prototype._parseChunkEnd = function (data) {\n let fileCrc = data.readInt32BE(0);\n let calcCrc = this._crc.crc32();\n\n // check CRC\n if (this._options.checkCRC && calcCrc !== fileCrc) {\n this.error(new Error(\"Crc error - \" + fileCrc + \" - \" + calcCrc));\n return;\n }\n\n if (!this._hasIEND) {\n this.read(8, this._parseChunkBegin.bind(this));\n }\n};\n\nParser.prototype._handleIHDR = function (length) {\n this.read(length, this._parseIHDR.bind(this));\n};\nParser.prototype._parseIHDR = function (data) {\n this._crc.write(data);\n\n let width = data.readUInt32BE(0);\n let height = data.readUInt32BE(4);\n let depth = data[8];\n let colorType = data[9]; // bits: 1 palette, 2 color, 4 alpha\n let compr = data[10];\n let filter = data[11];\n let interlace = data[12];\n\n // console.log(' width', width, 'height', height,\n // 'depth', depth, 'colorType', colorType,\n // 'compr', compr, 'filter', filter, 'interlace', interlace\n // );\n\n if (\n depth !== 8 &&\n depth !== 4 &&\n depth !== 2 &&\n depth !== 1 &&\n depth !== 16\n ) {\n this.error(new Error(\"Unsupported bit depth \" + depth));\n return;\n }\n if (!(colorType in constants.COLORTYPE_TO_BPP_MAP)) {\n this.error(new Error(\"Unsupported color type\"));\n return;\n }\n if (compr !== 0) {\n this.error(new Error(\"Unsupported compression method\"));\n return;\n }\n if (filter !== 0) {\n this.error(new Error(\"Unsupported filter method\"));\n return;\n }\n if (interlace !== 0 && interlace !== 1) {\n this.error(new Error(\"Unsupported interlace method\"));\n return;\n }\n\n this._colorType = colorType;\n\n let bpp = constants.COLORTYPE_TO_BPP_MAP[this._colorType];\n\n this._hasIHDR = true;\n\n this.metadata({\n width: width,\n height: height,\n depth: depth,\n interlace: Boolean(interlace),\n palette: Boolean(colorType & constants.COLORTYPE_PALETTE),\n color: Boolean(colorType & constants.COLORTYPE_COLOR),\n alpha: Boolean(colorType & constants.COLORTYPE_ALPHA),\n bpp: bpp,\n colorType: colorType,\n });\n\n this._handleChunkEnd();\n};\n\nParser.prototype._handlePLTE = function (length) {\n this.read(length, this._parsePLTE.bind(this));\n};\nParser.prototype._parsePLTE = function (data) {\n this._crc.write(data);\n\n let entries = Math.floor(data.length / 3);\n // console.log('Palette:', entries);\n\n for (let i = 0; i < entries; i++) {\n this._palette.push([data[i * 3], data[i * 3 + 1], data[i * 3 + 2], 0xff]);\n }\n\n this.palette(this._palette);\n\n this._handleChunkEnd();\n};\n\nParser.prototype._handleTRNS = function (length) {\n this.simpleTransparency();\n this.read(length, this._parseTRNS.bind(this));\n};\nParser.prototype._parseTRNS = function (data) {\n this._crc.write(data);\n\n // palette\n if (this._colorType === constants.COLORTYPE_PALETTE_COLOR) {\n if (this._palette.length === 0) {\n this.error(new Error(\"Transparency chunk must be after palette\"));\n return;\n }\n if (data.length > this._palette.length) {\n this.error(new Error(\"More transparent colors than palette size\"));\n return;\n }\n for (let i = 0; i < data.length; i++) {\n this._palette[i][3] = data[i];\n }\n this.palette(this._palette);\n }\n\n // for colorType 0 (grayscale) and 2 (rgb)\n // there might be one gray/color defined as transparent\n if (this._colorType === constants.COLORTYPE_GRAYSCALE) {\n // grey, 2 bytes\n this.transColor([data.readUInt16BE(0)]);\n }\n if (this._colorType === constants.COLORTYPE_COLOR) {\n this.transColor([\n data.readUInt16BE(0),\n data.readUInt16BE(2),\n data.readUInt16BE(4),\n ]);\n }\n\n this._handleChunkEnd();\n};\n\nParser.prototype._handleGAMA = function (length) {\n this.read(length, this._parseGAMA.bind(this));\n};\nParser.prototype._parseGAMA = function (data) {\n this._crc.write(data);\n this.gamma(data.readUInt32BE(0) / constants.GAMMA_DIVISION);\n\n this._handleChunkEnd();\n};\n\nParser.prototype._handleIDAT = function (length) {\n if (!this._emittedHeadersFinished) {\n this._emittedHeadersFinished = true;\n this.headersFinished();\n }\n this.read(-length, this._parseIDAT.bind(this, length));\n};\nParser.prototype._parseIDAT = function (length, data) {\n this._crc.write(data);\n\n if (\n this._colorType === constants.COLORTYPE_PALETTE_COLOR &&\n this._palette.length === 0\n ) {\n throw new Error(\"Expected palette not found\");\n }\n\n this.inflateData(data);\n let leftOverLength = length - data.length;\n\n if (leftOverLength > 0) {\n this._handleIDAT(leftOverLength);\n } else {\n this._handleChunkEnd();\n }\n};\n\nParser.prototype._handleIEND = function (length) {\n this.read(length, this._parseIEND.bind(this));\n};\nParser.prototype._parseIEND = function (data) {\n this._crc.write(data);\n\n this._hasIEND = true;\n this._handleChunkEnd();\n\n if (this.finished) {\n this.finished();\n }\n};\n", "\"use strict\";\n\nlet interlaceUtils = require(\"./interlace\");\n\nlet pixelBppMapper = [\n // 0 - dummy entry\n function () {},\n\n // 1 - L\n // 0: 0, 1: 0, 2: 0, 3: 0xff\n function (pxData, data, pxPos, rawPos) {\n if (rawPos === data.length) {\n throw new Error(\"Ran out of data\");\n }\n\n let pixel = data[rawPos];\n pxData[pxPos] = pixel;\n pxData[pxPos + 1] = pixel;\n pxData[pxPos + 2] = pixel;\n pxData[pxPos + 3] = 0xff;\n },\n\n // 2 - LA\n // 0: 0, 1: 0, 2: 0, 3: 1\n function (pxData, data, pxPos, rawPos) {\n if (rawPos + 1 >= data.length) {\n throw new Error(\"Ran out of data\");\n }\n\n let pixel = data[rawPos];\n pxData[pxPos] = pixel;\n pxData[pxPos + 1] = pixel;\n pxData[pxPos + 2] = pixel;\n pxData[pxPos + 3] = data[rawPos + 1];\n },\n\n // 3 - RGB\n // 0: 0, 1: 1, 2: 2, 3: 0xff\n function (pxData, data, pxPos, rawPos) {\n if (rawPos + 2 >= data.length) {\n throw new Error(\"Ran out of data\");\n }\n\n pxData[pxPos] = data[rawPos];\n pxData[pxPos + 1] = data[rawPos + 1];\n pxData[pxPos + 2] = data[rawPos + 2];\n pxData[pxPos + 3] = 0xff;\n },\n\n // 4 - RGBA\n // 0: 0, 1: 1, 2: 2, 3: 3\n function (pxData, data, pxPos, rawPos) {\n if (rawPos + 3 >= data.length) {\n throw new Error(\"Ran out of data\");\n }\n\n pxData[pxPos] = data[rawPos];\n pxData[pxPos + 1] = data[rawPos + 1];\n pxData[pxPos + 2] = data[rawPos + 2];\n pxData[pxPos + 3] = data[rawPos + 3];\n },\n];\n\nlet pixelBppCustomMapper = [\n // 0 - dummy entry\n function () {},\n\n // 1 - L\n // 0: 0, 1: 0, 2: 0, 3: 0xff\n function (pxData, pixelData, pxPos, maxBit) {\n let pixel = pixelData[0];\n pxData[pxPos] = pixel;\n pxData[pxPos + 1] = pixel;\n pxData[pxPos + 2] = pixel;\n pxData[pxPos + 3] = maxBit;\n },\n\n // 2 - LA\n // 0: 0, 1: 0, 2: 0, 3: 1\n function (pxData, pixelData, pxPos) {\n let pixel = pixelData[0];\n pxData[pxPos] = pixel;\n pxData[pxPos + 1] = pixel;\n pxData[pxPos + 2] = pixel;\n pxData[pxPos + 3] = pixelData[1];\n },\n\n // 3 - RGB\n // 0: 0, 1: 1, 2: 2, 3: 0xff\n function (pxData, pixelData, pxPos, maxBit) {\n pxData[pxPos] = pixelData[0];\n pxData[pxPos + 1] = pixelData[1];\n pxData[pxPos + 2] = pixelData[2];\n pxData[pxPos + 3] = maxBit;\n },\n\n // 4 - RGBA\n // 0: 0, 1: 1, 2: 2, 3: 3\n function (pxData, pixelData, pxPos) {\n pxData[pxPos] = pixelData[0];\n pxData[pxPos + 1] = pixelData[1];\n pxData[pxPos + 2] = pixelData[2];\n pxData[pxPos + 3] = pixelData[3];\n },\n];\n\nfunction bitRetriever(data, depth) {\n let leftOver = [];\n let i = 0;\n\n function split() {\n if (i === data.length) {\n throw new Error(\"Ran out of data\");\n }\n let byte = data[i];\n i++;\n let byte8, byte7, byte6, byte5, byte4, byte3, byte2, byte1;\n switch (depth) {\n default:\n throw new Error(\"unrecognised depth\");\n case 16:\n byte2 = data[i];\n i++;\n leftOver.push((byte << 8) + byte2);\n break;\n case 4:\n byte2 = byte & 0x0f;\n byte1 = byte >> 4;\n leftOver.push(byte1, byte2);\n break;\n case 2:\n byte4 = byte & 3;\n byte3 = (byte >> 2) & 3;\n byte2 = (byte >> 4) & 3;\n byte1 = (byte >> 6) & 3;\n leftOver.push(byte1, byte2, byte3, byte4);\n break;\n case 1:\n byte8 = byte & 1;\n byte7 = (byte >> 1) & 1;\n byte6 = (byte >> 2) & 1;\n byte5 = (byte >> 3) & 1;\n byte4 = (byte >> 4) & 1;\n byte3 = (byte >> 5) & 1;\n byte2 = (byte >> 6) & 1;\n byte1 = (byte >> 7) & 1;\n leftOver.push(byte1, byte2, byte3, byte4, byte5, byte6, byte7, byte8);\n break;\n }\n }\n\n return {\n get: function (count) {\n while (leftOver.length < count) {\n split();\n }\n let returner = leftOver.slice(0, count);\n leftOver = leftOver.slice(count);\n return returner;\n },\n resetAfterLine: function () {\n leftOver.length = 0;\n },\n end: function () {\n if (i !== data.length) {\n throw new Error(\"extra data found\");\n }\n },\n };\n}\n\nfunction mapImage8Bit(image, pxData, getPxPos, bpp, data, rawPos) {\n // eslint-disable-line max-params\n let imageWidth = image.width;\n let imageHeight = image.height;\n let imagePass = image.index;\n for (let y = 0; y < imageHeight; y++) {\n for (let x = 0; x < imageWidth; x++) {\n let pxPos = getPxPos(x, y, imagePass);\n pixelBppMapper[bpp](pxData, data, pxPos, rawPos);\n rawPos += bpp; //eslint-disable-line no-param-reassign\n }\n }\n return rawPos;\n}\n\nfunction mapImageCustomBit(image, pxData, getPxPos, bpp, bits, maxBit) {\n // eslint-disable-line max-params\n let imageWidth = image.width;\n let imageHeight = image.height;\n let imagePass = image.index;\n for (let y = 0; y < imageHeight; y++) {\n for (let x = 0; x < imageWidth; x++) {\n let pixelData = bits.get(bpp);\n let pxPos = getPxPos(x, y, imagePass);\n pixelBppCustomMapper[bpp](pxData, pixelData, pxPos, maxBit);\n }\n bits.resetAfterLine();\n }\n}\n\nexports.dataToBitMap = function (data, bitmapInfo) {\n let width = bitmapInfo.width;\n let height = bitmapInfo.height;\n let depth = bitmapInfo.depth;\n let bpp = bitmapInfo.bpp;\n let interlace = bitmapInfo.interlace;\n let bits;\n\n if (depth !== 8) {\n bits = bitRetriever(data, depth);\n }\n let pxData;\n if (depth <= 8) {\n pxData = Buffer.alloc(width * height * 4);\n } else {\n pxData = new Uint16Array(width * height * 4);\n }\n let maxBit = Math.pow(2, depth) - 1;\n let rawPos = 0;\n let images;\n let getPxPos;\n\n if (interlace) {\n images = interlaceUtils.getImagePasses(width, height);\n getPxPos = interlaceUtils.getInterlaceIterator(width, height);\n } else {\n let nonInterlacedPxPos = 0;\n getPxPos = function () {\n let returner = nonInterlacedPxPos;\n nonInterlacedPxPos += 4;\n return returner;\n };\n images = [{ width: width, height: height }];\n }\n\n for (let imageIndex = 0; imageIndex < images.length; imageIndex++) {\n if (depth === 8) {\n rawPos = mapImage8Bit(\n images[imageIndex],\n pxData,\n getPxPos,\n bpp,\n data,\n rawPos\n );\n } else {\n mapImageCustomBit(\n images[imageIndex],\n pxData,\n getPxPos,\n bpp,\n bits,\n maxBit\n );\n }\n }\n if (depth === 8) {\n if (rawPos !== data.length) {\n throw new Error(\"extra data found\");\n }\n } else {\n bits.end();\n }\n\n return pxData;\n};\n", "\"use strict\";\n\nfunction dePalette(indata, outdata, width, height, palette) {\n let pxPos = 0;\n // use values from palette\n for (let y = 0; y < height; y++) {\n for (let x = 0; x < width; x++) {\n let color = palette[indata[pxPos]];\n\n if (!color) {\n throw new Error(\"index \" + indata[pxPos] + \" not in palette\");\n }\n\n for (let i = 0; i < 4; i++) {\n outdata[pxPos + i] = color[i];\n }\n pxPos += 4;\n }\n }\n}\n\nfunction replaceTransparentColor(indata, outdata, width, height, transColor) {\n let pxPos = 0;\n for (let y = 0; y < height; y++) {\n for (let x = 0; x < width; x++) {\n let makeTrans = false;\n\n if (transColor.length === 1) {\n if (transColor[0] === indata[pxPos]) {\n makeTrans = true;\n }\n } else if (\n transColor[0] === indata[pxPos] &&\n transColor[1] === indata[pxPos + 1] &&\n transColor[2] === indata[pxPos + 2]\n ) {\n makeTrans = true;\n }\n if (makeTrans) {\n for (let i = 0; i < 4; i++) {\n outdata[pxPos + i] = 0;\n }\n }\n pxPos += 4;\n }\n }\n}\n\nfunction scaleDepth(indata, outdata, width, height, depth) {\n let maxOutSample = 255;\n let maxInSample = Math.pow(2, depth) - 1;\n let pxPos = 0;\n\n for (let y = 0; y < height; y++) {\n for (let x = 0; x < width; x++) {\n for (let i = 0; i < 4; i++) {\n outdata[pxPos + i] = Math.floor(\n (indata[pxPos + i] * maxOutSample) / maxInSample + 0.5\n );\n }\n pxPos += 4;\n }\n }\n}\n\nmodule.exports = function (indata, imageData, skipRescale = false) {\n let depth = imageData.depth;\n let width = imageData.width;\n let height = imageData.height;\n let colorType = imageData.colorType;\n let transColor = imageData.transColor;\n let palette = imageData.palette;\n\n let outdata = indata; // only different for 16 bits\n\n if (colorType === 3) {\n // paletted\n dePalette(indata, outdata, width, height, palette);\n } else {\n if (transColor) {\n replaceTransparentColor(indata, outdata, width, height, transColor);\n }\n // if it needs scaling\n if (depth !== 8 && !skipRescale) {\n // if we need to change the buffer size\n if (depth === 16) {\n outdata = Buffer.alloc(width * height * 4);\n }\n scaleDepth(indata, outdata, width, height, depth);\n }\n }\n return outdata;\n};\n", "\"use strict\";\n\nlet util = require(\"util\");\nlet zlib = require(\"zlib\");\nlet ChunkStream = require(\"./chunkstream\");\nlet FilterAsync = require(\"./filter-parse-async\");\nlet Parser = require(\"./parser\");\nlet bitmapper = require(\"./bitmapper\");\nlet formatNormaliser = require(\"./format-normaliser\");\n\nlet ParserAsync = (module.exports = function (options) {\n ChunkStream.call(this);\n\n this._parser = new Parser(options, {\n read: this.read.bind(this),\n error: this._handleError.bind(this),\n metadata: this._handleMetaData.bind(this),\n gamma: this.emit.bind(this, \"gamma\"),\n palette: this._handlePalette.bind(this),\n transColor: this._handleTransColor.bind(this),\n finished: this._finished.bind(this),\n inflateData: this._inflateData.bind(this),\n simpleTransparency: this._simpleTransparency.bind(this),\n headersFinished: this._headersFinished.bind(this),\n });\n this._options = options;\n this.writable = true;\n\n this._parser.start();\n});\nutil.inherits(ParserAsync, ChunkStream);\n\nParserAsync.prototype._handleError = function (err) {\n this.emit(\"error\", err);\n\n this.writable = false;\n\n this.destroy();\n\n if (this._inflate && this._inflate.destroy) {\n this._inflate.destroy();\n }\n\n if (this._filter) {\n this._filter.destroy();\n // For backward compatibility with Node 7 and below.\n // Suppress errors due to _inflate calling write() even after\n // it's destroy()'ed.\n this._filter.on(\"error\", function () {});\n }\n\n this.errord = true;\n};\n\nParserAsync.prototype._inflateData = function (data) {\n if (!this._inflate) {\n if (this._bitmapInfo.interlace) {\n this._inflate = zlib.createInflate();\n\n this._inflate.on(\"error\", this.emit.bind(this, \"error\"));\n this._filter.on(\"complete\", this._complete.bind(this));\n\n this._inflate.pipe(this._filter);\n } else {\n let rowSize =\n ((this._bitmapInfo.width *\n this._bitmapInfo.bpp *\n this._bitmapInfo.depth +\n 7) >>\n 3) +\n 1;\n let imageSize = rowSize * this._bitmapInfo.height;\n let chunkSize = Math.max(imageSize, zlib.Z_MIN_CHUNK);\n\n this._inflate = zlib.createInflate({ chunkSize: chunkSize });\n let leftToInflate = imageSize;\n\n let emitError = this.emit.bind(this, \"error\");\n this._inflate.on(\"error\", function (err) {\n if (!leftToInflate) {\n return;\n }\n\n emitError(err);\n });\n this._filter.on(\"complete\", this._complete.bind(this));\n\n let filterWrite = this._filter.write.bind(this._filter);\n this._inflate.on(\"data\", function (chunk) {\n if (!leftToInflate) {\n return;\n }\n\n if (chunk.length > leftToInflate) {\n chunk = chunk.slice(0, leftToInflate);\n }\n\n leftToInflate -= chunk.length;\n\n filterWrite(chunk);\n });\n\n this._inflate.on(\"end\", this._filter.end.bind(this._filter));\n }\n }\n this._inflate.write(data);\n};\n\nParserAsync.prototype._handleMetaData = function (metaData) {\n this._metaData = metaData;\n this._bitmapInfo = Object.create(metaData);\n\n this._filter = new FilterAsync(this._bitmapInfo);\n};\n\nParserAsync.prototype._handleTransColor = function (transColor) {\n this._bitmapInfo.transColor = transColor;\n};\n\nParserAsync.prototype._handlePalette = function (palette) {\n this._bitmapInfo.palette = palette;\n};\n\nParserAsync.prototype._simpleTransparency = function () {\n this._metaData.alpha = true;\n};\n\nParserAsync.prototype._headersFinished = function () {\n // Up until this point, we don't know if we have a tRNS chunk (alpha)\n // so we can't emit metadata any earlier\n this.emit(\"metadata\", this._metaData);\n};\n\nParserAsync.prototype._finished = function () {\n if (this.errord) {\n return;\n }\n\n if (!this._inflate) {\n this.emit(\"error\", \"No Inflate block\");\n } else {\n // no more data to inflate\n this._inflate.end();\n }\n};\n\nParserAsync.prototype._complete = function (filteredData) {\n if (this.errord) {\n return;\n }\n\n let normalisedBitmapData;\n\n try {\n let bitmapData = bitmapper.dataToBitMap(filteredData, this._bitmapInfo);\n\n normalisedBitmapData = formatNormaliser(\n bitmapData,\n this._bitmapInfo,\n this._options.skipRescale\n );\n bitmapData = null;\n } catch (ex) {\n this._handleError(ex);\n return;\n }\n\n this.emit(\"parsed\", normalisedBitmapData);\n};\n", "\"use strict\";\n\nlet constants = require(\"./constants\");\n\nmodule.exports = function (dataIn, width, height, options) {\n let outHasAlpha =\n [constants.COLORTYPE_COLOR_ALPHA, constants.COLORTYPE_ALPHA].indexOf(\n options.colorType\n ) !== -1;\n if (options.colorType === options.inputColorType) {\n let bigEndian = (function () {\n let buffer = new ArrayBuffer(2);\n new DataView(buffer).setInt16(0, 256, true /* littleEndian */);\n // Int16Array uses the platform's endianness.\n return new Int16Array(buffer)[0] !== 256;\n })();\n // If no need to convert to grayscale and alpha is present/absent in both, take a fast route\n if (options.bitDepth === 8 || (options.bitDepth === 16 && bigEndian)) {\n return dataIn;\n }\n }\n\n // map to a UInt16 array if data is 16bit, fix endianness below\n let data = options.bitDepth !== 16 ? dataIn : new Uint16Array(dataIn.buffer);\n\n let maxValue = 255;\n let inBpp = constants.COLORTYPE_TO_BPP_MAP[options.inputColorType];\n if (inBpp === 4 && !options.inputHasAlpha) {\n inBpp = 3;\n }\n let outBpp = constants.COLORTYPE_TO_BPP_MAP[options.colorType];\n if (options.bitDepth === 16) {\n maxValue = 65535;\n outBpp *= 2;\n }\n let outData = Buffer.alloc(width * height * outBpp);\n\n let inIndex = 0;\n let outIndex = 0;\n\n let bgColor = options.bgColor || {};\n if (bgColor.red === undefined) {\n bgColor.red = maxValue;\n }\n if (bgColor.green === undefined) {\n bgColor.green = maxValue;\n }\n if (bgColor.blue === undefined) {\n bgColor.blue = maxValue;\n }\n\n function getRGBA() {\n let red;\n let green;\n let blue;\n let alpha = maxValue;\n switch (options.inputColorType) {\n case constants.COLORTYPE_COLOR_ALPHA:\n alpha = data[inIndex + 3];\n red = data[inIndex];\n green = data[inIndex + 1];\n blue = data[inIndex + 2];\n break;\n case constants.COLORTYPE_COLOR:\n red = data[inIndex];\n green = data[inIndex + 1];\n blue = data[inIndex + 2];\n break;\n case constants.COLORTYPE_ALPHA:\n alpha = data[inIndex + 1];\n red = data[inIndex];\n green = red;\n blue = red;\n break;\n case constants.COLORTYPE_GRAYSCALE:\n red = data[inIndex];\n green = red;\n blue = red;\n break;\n default:\n throw new Error(\n \"input color type:\" +\n options.inputColorType +\n \" is not supported at present\"\n );\n }\n\n if (options.inputHasAlpha) {\n if (!outHasAlpha) {\n alpha /= maxValue;\n red = Math.min(\n Math.max(Math.round((1 - alpha) * bgColor.red + alpha * red), 0),\n maxValue\n );\n green = Math.min(\n Math.max(Math.round((1 - alpha) * bgColor.green + alpha * green), 0),\n maxValue\n );\n blue = Math.min(\n Math.max(Math.round((1 - alpha) * bgColor.blue + alpha * blue), 0),\n maxValue\n );\n }\n }\n return { red: red, green: green, blue: blue, alpha: alpha };\n }\n\n for (let y = 0; y < height; y++) {\n for (let x = 0; x < width; x++) {\n let rgba = getRGBA(data, inIndex);\n\n switch (options.colorType) {\n case constants.COLORTYPE_COLOR_ALPHA:\n case constants.COLORTYPE_COLOR:\n if (options.bitDepth === 8) {\n outData[outIndex] = rgba.red;\n outData[outIndex + 1] = rgba.green;\n outData[outIndex + 2] = rgba.blue;\n if (outHasAlpha) {\n outData[outIndex + 3] = rgba.alpha;\n }\n } else {\n outData.writeUInt16BE(rgba.red, outIndex);\n outData.writeUInt16BE(rgba.green, outIndex + 2);\n outData.writeUInt16BE(rgba.blue, outIndex + 4);\n if (outHasAlpha) {\n outData.writeUInt16BE(rgba.alpha, outIndex + 6);\n }\n }\n break;\n case constants.COLORTYPE_ALPHA:\n case constants.COLORTYPE_GRAYSCALE: {\n // Convert to grayscale and alpha\n let grayscale = (rgba.red + rgba.green + rgba.blue) / 3;\n if (options.bitDepth === 8) {\n outData[outIndex] = grayscale;\n if (outHasAlpha) {\n outData[outIndex + 1] = rgba.alpha;\n }\n } else {\n outData.writeUInt16BE(grayscale, outIndex);\n if (outHasAlpha) {\n outData.writeUInt16BE(rgba.alpha, outIndex + 2);\n }\n }\n break;\n }\n default:\n throw new Error(\"unrecognised color Type \" + options.colorType);\n }\n\n inIndex += inBpp;\n outIndex += outBpp;\n }\n }\n\n return outData;\n};\n", "\"use strict\";\n\nlet paethPredictor = require(\"./paeth-predictor\");\n\nfunction filterNone(pxData, pxPos, byteWidth, rawData, rawPos) {\n for (let x = 0; x < byteWidth; x++) {\n rawData[rawPos + x] = pxData[pxPos + x];\n }\n}\n\nfunction filterSumNone(pxData, pxPos, byteWidth) {\n let sum = 0;\n let length = pxPos + byteWidth;\n\n for (let i = pxPos; i < length; i++) {\n sum += Math.abs(pxData[i]);\n }\n return sum;\n}\n\nfunction filterSub(pxData, pxPos, byteWidth, rawData, rawPos, bpp) {\n for (let x = 0; x < byteWidth; x++) {\n let left = x >= bpp ? pxData[pxPos + x - bpp] : 0;\n let val = pxData[pxPos + x] - left;\n\n rawData[rawPos + x] = val;\n }\n}\n\nfunction filterSumSub(pxData, pxPos, byteWidth, bpp) {\n let sum = 0;\n for (let x = 0; x < byteWidth; x++) {\n let left = x >= bpp ? pxData[pxPos + x - bpp] : 0;\n let val = pxData[pxPos + x] - left;\n\n sum += Math.abs(val);\n }\n\n return sum;\n}\n\nfunction filterUp(pxData, pxPos, byteWidth, rawData, rawPos) {\n for (let x = 0; x < byteWidth; x++) {\n let up = pxPos > 0 ? pxData[pxPos + x - byteWidth] : 0;\n let val = pxData[pxPos + x] - up;\n\n rawData[rawPos + x] = val;\n }\n}\n\nfunction filterSumUp(pxData, pxPos, byteWidth) {\n let sum = 0;\n let length = pxPos + byteWidth;\n for (let x = pxPos; x < length; x++) {\n let up = pxPos > 0 ? pxData[x - byteWidth] : 0;\n let val = pxData[x] - up;\n\n sum += Math.abs(val);\n }\n\n return sum;\n}\n\nfunction filterAvg(pxData, pxPos, byteWidth, rawData, rawPos, bpp) {\n for (let x = 0; x < byteWidth; x++) {\n let left = x >= bpp ? pxData[pxPos + x - bpp] : 0;\n let up = pxPos > 0 ? pxData[pxPos + x - byteWidth] : 0;\n let val = pxData[pxPos + x] - ((left + up) >> 1);\n\n rawData[rawPos + x] = val;\n }\n}\n\nfunction filterSumAvg(pxData, pxPos, byteWidth, bpp) {\n let sum = 0;\n for (let x = 0; x < byteWidth; x++) {\n let left = x >= bpp ? pxData[pxPos + x - bpp] : 0;\n let up = pxPos > 0 ? pxData[pxPos + x - byteWidth] : 0;\n let val = pxData[pxPos + x] - ((left + up) >> 1);\n\n sum += Math.abs(val);\n }\n\n return sum;\n}\n\nfunction filterPaeth(pxData, pxPos, byteWidth, rawData, rawPos, bpp) {\n for (let x = 0; x < byteWidth; x++) {\n let left = x >= bpp ? pxData[pxPos + x - bpp] : 0;\n let up = pxPos > 0 ? pxData[pxPos + x - byteWidth] : 0;\n let upleft =\n pxPos > 0 && x >= bpp ? pxData[pxPos + x - (byteWidth + bpp)] : 0;\n let val = pxData[pxPos + x] - paethPredictor(left, up, upleft);\n\n rawData[rawPos + x] = val;\n }\n}\n\nfunction filterSumPaeth(pxData, pxPos, byteWidth, bpp) {\n let sum = 0;\n for (let x = 0; x < byteWidth; x++) {\n let left = x >= bpp ? pxData[pxPos + x - bpp] : 0;\n let up = pxPos > 0 ? pxData[pxPos + x - byteWidth] : 0;\n let upleft =\n pxPos > 0 && x >= bpp ? pxData[pxPos + x - (byteWidth + bpp)] : 0;\n let val = pxData[pxPos + x] - paethPredictor(left, up, upleft);\n\n sum += Math.abs(val);\n }\n\n return sum;\n}\n\nlet filters = {\n 0: filterNone,\n 1: filterSub,\n 2: filterUp,\n 3: filterAvg,\n 4: filterPaeth,\n};\n\nlet filterSums = {\n 0: filterSumNone,\n 1: filterSumSub,\n 2: filterSumUp,\n 3: filterSumAvg,\n 4: filterSumPaeth,\n};\n\nmodule.exports = function (pxData, width, height, options, bpp) {\n let filterTypes;\n if (!(\"filterType\" in options) || options.filterType === -1) {\n filterTypes = [0, 1, 2, 3, 4];\n } else if (typeof options.filterType === \"number\") {\n filterTypes = [options.filterType];\n } else {\n throw new Error(\"unrecognised filter types\");\n }\n\n if (options.bitDepth === 16) {\n bpp *= 2;\n }\n let byteWidth = width * bpp;\n let rawPos = 0;\n let pxPos = 0;\n let rawData = Buffer.alloc((byteWidth + 1) * height);\n\n let sel = filterTypes[0];\n\n for (let y = 0; y < height; y++) {\n if (filterTypes.length > 1) {\n // find best filter for this line (with lowest sum of values)\n let min = Infinity;\n\n for (let i = 0; i < filterTypes.length; i++) {\n let sum = filterSums[filterTypes[i]](pxData, pxPos, byteWidth, bpp);\n if (sum < min) {\n sel = filterTypes[i];\n min = sum;\n }\n }\n }\n\n rawData[rawPos] = sel;\n rawPos++;\n filters[sel](pxData, pxPos, byteWidth, rawData, rawPos, bpp);\n rawPos += byteWidth;\n pxPos += byteWidth;\n }\n return rawData;\n};\n", "\"use strict\";\n\nlet constants = require(\"./constants\");\nlet CrcStream = require(\"./crc\");\nlet bitPacker = require(\"./bitpacker\");\nlet filter = require(\"./filter-pack\");\nlet zlib = require(\"zlib\");\n\nlet Packer = (module.exports = function (options) {\n this._options = options;\n\n options.deflateChunkSize = options.deflateChunkSize || 32 * 1024;\n options.deflateLevel =\n options.deflateLevel != null ? options.deflateLevel : 9;\n options.deflateStrategy =\n options.deflateStrategy != null ? options.deflateStrategy : 3;\n options.inputHasAlpha =\n options.inputHasAlpha != null ? options.inputHasAlpha : true;\n options.deflateFactory = options.deflateFactory || zlib.createDeflate;\n options.bitDepth = options.bitDepth || 8;\n // This is outputColorType\n options.colorType =\n typeof options.colorType === \"number\"\n ? options.colorType\n : constants.COLORTYPE_COLOR_ALPHA;\n options.inputColorType =\n typeof options.inputColorType === \"number\"\n ? options.inputColorType\n : constants.COLORTYPE_COLOR_ALPHA;\n\n if (\n [\n constants.COLORTYPE_GRAYSCALE,\n constants.COLORTYPE_COLOR,\n constants.COLORTYPE_COLOR_ALPHA,\n constants.COLORTYPE_ALPHA,\n ].indexOf(options.colorType) === -1\n ) {\n throw new Error(\n \"option color type:\" + options.colorType + \" is not supported at present\"\n );\n }\n if (\n [\n constants.COLORTYPE_GRAYSCALE,\n constants.COLORTYPE_COLOR,\n constants.COLORTYPE_COLOR_ALPHA,\n constants.COLORTYPE_ALPHA,\n ].indexOf(options.inputColorType) === -1\n ) {\n throw new Error(\n \"option input color type:\" +\n options.inputColorType +\n \" is not supported at present\"\n );\n }\n if (options.bitDepth !== 8 && options.bitDepth !== 16) {\n throw new Error(\n \"option bit depth:\" + options.bitDepth + \" is not supported at present\"\n );\n }\n});\n\nPacker.prototype.getDeflateOptions = function () {\n return {\n chunkSize: this._options.deflateChunkSize,\n level: this._options.deflateLevel,\n strategy: this._options.deflateStrategy,\n };\n};\n\nPacker.prototype.createDeflate = function () {\n return this._options.deflateFactory(this.getDeflateOptions());\n};\n\nPacker.prototype.filterData = function (data, width, height) {\n // convert to correct format for filtering (e.g. right bpp and bit depth)\n let packedData = bitPacker(data, width, height, this._options);\n\n // filter pixel data\n let bpp = constants.COLORTYPE_TO_BPP_MAP[this._options.colorType];\n let filteredData = filter(packedData, width, height, this._options, bpp);\n return filteredData;\n};\n\nPacker.prototype._packChunk = function (type, data) {\n let len = data ? data.length : 0;\n let buf = Buffer.alloc(len + 12);\n\n buf.writeUInt32BE(len, 0);\n buf.writeUInt32BE(type, 4);\n\n if (data) {\n data.copy(buf, 8);\n }\n\n buf.writeInt32BE(\n CrcStream.crc32(buf.slice(4, buf.length - 4)),\n buf.length - 4\n );\n return buf;\n};\n\nPacker.prototype.packGAMA = function (gamma) {\n let buf = Buffer.alloc(4);\n buf.writeUInt32BE(Math.floor(gamma * constants.GAMMA_DIVISION), 0);\n return this._packChunk(constants.TYPE_gAMA, buf);\n};\n\nPacker.prototype.packIHDR = function (width, height) {\n let buf = Buffer.alloc(13);\n buf.writeUInt32BE(width, 0);\n buf.writeUInt32BE(height, 4);\n buf[8] = this._options.bitDepth; // Bit depth\n buf[9] = this._options.colorType; // colorType\n buf[10] = 0; // compression\n buf[11] = 0; // filter\n buf[12] = 0; // interlace\n\n return this._packChunk(constants.TYPE_IHDR, buf);\n};\n\nPacker.prototype.packIDAT = function (data) {\n return this._packChunk(constants.TYPE_IDAT, data);\n};\n\nPacker.prototype.packIEND = function () {\n return this._packChunk(constants.TYPE_IEND, null);\n};\n", "\"use strict\";\n\nlet util = require(\"util\");\nlet Stream = require(\"stream\");\nlet constants = require(\"./constants\");\nlet Packer = require(\"./packer\");\n\nlet PackerAsync = (module.exports = function (opt) {\n Stream.call(this);\n\n let options = opt || {};\n\n this._packer = new Packer(options);\n this._deflate = this._packer.createDeflate();\n\n this.readable = true;\n});\nutil.inherits(PackerAsync, Stream);\n\nPackerAsync.prototype.pack = function (data, width, height, gamma) {\n // Signature\n this.emit(\"data\", Buffer.from(constants.PNG_SIGNATURE));\n this.emit(\"data\", this._packer.packIHDR(width, height));\n\n if (gamma) {\n this.emit(\"data\", this._packer.packGAMA(gamma));\n }\n\n let filteredData = this._packer.filterData(data, width, height);\n\n // compress it\n this._deflate.on(\"error\", this.emit.bind(this, \"error\"));\n\n this._deflate.on(\n \"data\",\n function (compressedData) {\n this.emit(\"data\", this._packer.packIDAT(compressedData));\n }.bind(this)\n );\n\n this._deflate.on(\n \"end\",\n function () {\n this.emit(\"data\", this._packer.packIEND());\n this.emit(\"end\");\n }.bind(this)\n );\n\n this._deflate.end(filteredData);\n};\n", "\"use strict\";\n\nlet assert = require(\"assert\").ok;\nlet zlib = require(\"zlib\");\nlet util = require(\"util\");\n\nlet kMaxLength = require(\"buffer\").kMaxLength;\n\nfunction Inflate(opts) {\n if (!(this instanceof Inflate)) {\n return new Inflate(opts);\n }\n\n if (opts && opts.chunkSize < zlib.Z_MIN_CHUNK) {\n opts.chunkSize = zlib.Z_MIN_CHUNK;\n }\n\n zlib.Inflate.call(this, opts);\n\n // Node 8 --> 9 compatibility check\n this._offset = this._offset === undefined ? this._outOffset : this._offset;\n this._buffer = this._buffer || this._outBuffer;\n\n if (opts && opts.maxLength != null) {\n this._maxLength = opts.maxLength;\n }\n}\n\nfunction createInflate(opts) {\n return new Inflate(opts);\n}\n\nfunction _close(engine, callback) {\n if (callback) {\n process.nextTick(callback);\n }\n\n // Caller may invoke .close after a zlib error (which will null _handle).\n if (!engine._handle) {\n return;\n }\n\n engine._handle.close();\n engine._handle = null;\n}\n\nInflate.prototype._processChunk = function (chunk, flushFlag, asyncCb) {\n if (typeof asyncCb === \"function\") {\n return zlib.Inflate._processChunk.call(this, chunk, flushFlag, asyncCb);\n }\n\n let self = this;\n\n let availInBefore = chunk && chunk.length;\n let availOutBefore = this._chunkSize - this._offset;\n let leftToInflate = this._maxLength;\n let inOff = 0;\n\n let buffers = [];\n let nread = 0;\n\n let error;\n this.on(\"error\", function (err) {\n error = err;\n });\n\n function handleChunk(availInAfter, availOutAfter) {\n if (self._hadError) {\n return;\n }\n\n let have = availOutBefore - availOutAfter;\n assert(have >= 0, \"have should not go down\");\n\n if (have > 0) {\n let out = self._buffer.slice(self._offset, self._offset + have);\n self._offset += have;\n\n if (out.length > leftToInflate) {\n out = out.slice(0, leftToInflate);\n }\n\n buffers.push(out);\n nread += out.length;\n leftToInflate -= out.length;\n\n if (leftToInflate === 0) {\n return false;\n }\n }\n\n if (availOutAfter === 0 || self._offset >= self._chunkSize) {\n availOutBefore = self._chunkSize;\n self._offset = 0;\n self._buffer = Buffer.allocUnsafe(self._chunkSize);\n }\n\n if (availOutAfter === 0) {\n inOff += availInBefore - availInAfter;\n availInBefore = availInAfter;\n\n return true;\n }\n\n return false;\n }\n\n assert(this._handle, \"zlib binding closed\");\n let res;\n do {\n res = this._handle.writeSync(\n flushFlag,\n chunk, // in\n inOff, // in_off\n availInBefore, // in_len\n this._buffer, // out\n this._offset, //out_off\n availOutBefore\n ); // out_len\n // Node 8 --> 9 compatibility check\n res = res || this._writeState;\n } while (!this._hadError && handleChunk(res[0], res[1]));\n\n if (this._hadError) {\n throw error;\n }\n\n if (nread >= kMaxLength) {\n _close(this);\n throw new RangeError(\n \"Cannot create final Buffer. It would be larger than 0x\" +\n kMaxLength.toString(16) +\n \" bytes\"\n );\n }\n\n let buf = Buffer.concat(buffers, nread);\n _close(this);\n\n return buf;\n};\n\nutil.inherits(Inflate, zlib.Inflate);\n\nfunction zlibBufferSync(engine, buffer) {\n if (typeof buffer === \"string\") {\n buffer = Buffer.from(buffer);\n }\n if (!(buffer instanceof Buffer)) {\n throw new TypeError(\"Not a string or buffer\");\n }\n\n let flushFlag = engine._finishFlushFlag;\n if (flushFlag == null) {\n flushFlag = zlib.Z_FINISH;\n }\n\n return engine._processChunk(buffer, flushFlag);\n}\n\nfunction inflateSync(buffer, opts) {\n return zlibBufferSync(new Inflate(opts), buffer);\n}\n\nmodule.exports = exports = inflateSync;\nexports.Inflate = Inflate;\nexports.createInflate = createInflate;\nexports.inflateSync = inflateSync;\n", "\"use strict\";\n\nlet SyncReader = (module.exports = function (buffer) {\n this._buffer = buffer;\n this._reads = [];\n});\n\nSyncReader.prototype.read = function (length, callback) {\n this._reads.push({\n length: Math.abs(length), // if length < 0 then at most this length\n allowLess: length < 0,\n func: callback,\n });\n};\n\nSyncReader.prototype.process = function () {\n // as long as there is any data and read requests\n while (this._reads.length > 0 && this._buffer.length) {\n let read = this._reads[0];\n\n if (\n this._buffer.length &&\n (this._buffer.length >= read.length || read.allowLess)\n ) {\n // ok there is any data so that we can satisfy this request\n this._reads.shift(); // == read\n\n let buf = this._buffer;\n\n this._buffer = buf.slice(read.length);\n\n read.func.call(this, buf.slice(0, read.length));\n } else {\n break;\n }\n }\n\n if (this._reads.length > 0) {\n throw new Error(\"There are some read requests waitng on finished stream\");\n }\n\n if (this._buffer.length > 0) {\n throw new Error(\"unrecognised content at end of stream\");\n }\n};\n", "\"use strict\";\n\nlet SyncReader = require(\"./sync-reader\");\nlet Filter = require(\"./filter-parse\");\n\nexports.process = function (inBuffer, bitmapInfo) {\n let outBuffers = [];\n let reader = new SyncReader(inBuffer);\n let filter = new Filter(bitmapInfo, {\n read: reader.read.bind(reader),\n write: function (bufferPart) {\n outBuffers.push(bufferPart);\n },\n complete: function () {},\n });\n\n filter.start();\n reader.process();\n\n return Buffer.concat(outBuffers);\n};\n", "\"use strict\";\n\nlet hasSyncZlib = true;\nlet zlib = require(\"zlib\");\nlet inflateSync = require(\"./sync-inflate\");\nif (!zlib.deflateSync) {\n hasSyncZlib = false;\n}\nlet SyncReader = require(\"./sync-reader\");\nlet FilterSync = require(\"./filter-parse-sync\");\nlet Parser = require(\"./parser\");\nlet bitmapper = require(\"./bitmapper\");\nlet formatNormaliser = require(\"./format-normaliser\");\n\nmodule.exports = function (buffer, options) {\n if (!hasSyncZlib) {\n throw new Error(\n \"To use the sync capability of this library in old node versions, please pin pngjs to v2.3.0\"\n );\n }\n\n let err;\n function handleError(_err_) {\n err = _err_;\n }\n\n let metaData;\n function handleMetaData(_metaData_) {\n metaData = _metaData_;\n }\n\n function handleTransColor(transColor) {\n metaData.transColor = transColor;\n }\n\n function handlePalette(palette) {\n metaData.palette = palette;\n }\n\n function handleSimpleTransparency() {\n metaData.alpha = true;\n }\n\n let gamma;\n function handleGamma(_gamma_) {\n gamma = _gamma_;\n }\n\n let inflateDataList = [];\n function handleInflateData(inflatedData) {\n inflateDataList.push(inflatedData);\n }\n\n let reader = new SyncReader(buffer);\n\n let parser = new Parser(options, {\n read: reader.read.bind(reader),\n error: handleError,\n metadata: handleMetaData,\n gamma: handleGamma,\n palette: handlePalette,\n transColor: handleTransColor,\n inflateData: handleInflateData,\n simpleTransparency: handleSimpleTransparency,\n });\n\n parser.start();\n reader.process();\n\n if (err) {\n throw err;\n }\n\n //join together the inflate datas\n let inflateData = Buffer.concat(inflateDataList);\n inflateDataList.length = 0;\n\n let inflatedData;\n if (metaData.interlace) {\n inflatedData = zlib.inflateSync(inflateData);\n } else {\n let rowSize =\n ((metaData.width * metaData.bpp * metaData.depth + 7) >> 3) + 1;\n let imageSize = rowSize * metaData.height;\n inflatedData = inflateSync(inflateData, {\n chunkSize: imageSize,\n maxLength: imageSize,\n });\n }\n inflateData = null;\n\n if (!inflatedData || !inflatedData.length) {\n throw new Error(\"bad png - invalid inflate data response\");\n }\n\n let unfilteredData = FilterSync.process(inflatedData, metaData);\n inflateData = null;\n\n let bitmapData = bitmapper.dataToBitMap(unfilteredData, metaData);\n unfilteredData = null;\n\n let normalisedBitmapData = formatNormaliser(\n bitmapData,\n metaData,\n options.skipRescale\n );\n\n metaData.data = normalisedBitmapData;\n metaData.gamma = gamma || 0;\n\n return metaData;\n};\n", "\"use strict\";\n\nlet hasSyncZlib = true;\nlet zlib = require(\"zlib\");\nif (!zlib.deflateSync) {\n hasSyncZlib = false;\n}\nlet constants = require(\"./constants\");\nlet Packer = require(\"./packer\");\n\nmodule.exports = function (metaData, opt) {\n if (!hasSyncZlib) {\n throw new Error(\n \"To use the sync capability of this library in old node versions, please pin pngjs to v2.3.0\"\n );\n }\n\n let options = opt || {};\n\n let packer = new Packer(options);\n\n let chunks = [];\n\n // Signature\n chunks.push(Buffer.from(constants.PNG_SIGNATURE));\n\n // Header\n chunks.push(packer.packIHDR(metaData.width, metaData.height));\n\n if (metaData.gamma) {\n chunks.push(packer.packGAMA(metaData.gamma));\n }\n\n let filteredData = packer.filterData(\n metaData.data,\n metaData.width,\n metaData.height\n );\n\n // compress it\n let compressedData = zlib.deflateSync(\n filteredData,\n packer.getDeflateOptions()\n );\n filteredData = null;\n\n if (!compressedData || !compressedData.length) {\n throw new Error(\"bad png - invalid compressed data response\");\n }\n chunks.push(packer.packIDAT(compressedData));\n\n // End\n chunks.push(packer.packIEND());\n\n return Buffer.concat(chunks);\n};\n", "\"use strict\";\n\nlet parse = require(\"./parser-sync\");\nlet pack = require(\"./packer-sync\");\n\nexports.read = function (buffer, options) {\n return parse(buffer, options || {});\n};\n\nexports.write = function (png, options) {\n return pack(png, options);\n};\n", "\"use strict\";\n\nlet util = require(\"util\");\nlet Stream = require(\"stream\");\nlet Parser = require(\"./parser-async\");\nlet Packer = require(\"./packer-async\");\nlet PNGSync = require(\"./png-sync\");\n\nlet PNG = (exports.PNG = function (options) {\n Stream.call(this);\n\n options = options || {}; // eslint-disable-line no-param-reassign\n\n // coerce pixel dimensions to integers (also coerces undefined -> 0):\n this.width = options.width | 0;\n this.height = options.height | 0;\n\n this.data =\n this.width > 0 && this.height > 0\n ? Buffer.alloc(4 * this.width * this.height)\n : null;\n\n if (options.fill && this.data) {\n this.data.fill(0);\n }\n\n this.gamma = 0;\n this.readable = this.writable = true;\n\n this._parser = new Parser(options);\n\n this._parser.on(\"error\", this.emit.bind(this, \"error\"));\n this._parser.on(\"close\", this._handleClose.bind(this));\n this._parser.on(\"metadata\", this._metadata.bind(this));\n this._parser.on(\"gamma\", this._gamma.bind(this));\n this._parser.on(\n \"parsed\",\n function (data) {\n this.data = data;\n this.emit(\"parsed\", data);\n }.bind(this)\n );\n\n this._packer = new Packer(options);\n this._packer.on(\"data\", this.emit.bind(this, \"data\"));\n this._packer.on(\"end\", this.emit.bind(this, \"end\"));\n this._parser.on(\"close\", this._handleClose.bind(this));\n this._packer.on(\"error\", this.emit.bind(this, \"error\"));\n});\nutil.inherits(PNG, Stream);\n\nPNG.sync = PNGSync;\n\nPNG.prototype.pack = function () {\n if (!this.data || !this.data.length) {\n this.emit(\"error\", \"No data provided\");\n return this;\n }\n\n process.nextTick(\n function () {\n this._packer.pack(this.data, this.width, this.height, this.gamma);\n }.bind(this)\n );\n\n return this;\n};\n\nPNG.prototype.parse = function (data, callback) {\n if (callback) {\n let onParsed, onError;\n\n onParsed = function (parsedData) {\n this.removeListener(\"error\", onError);\n\n this.data = parsedData;\n callback(null, this);\n }.bind(this);\n\n onError = function (err) {\n this.removeListener(\"parsed\", onParsed);\n\n callback(err, null);\n }.bind(this);\n\n this.once(\"parsed\", onParsed);\n this.once(\"error\", onError);\n }\n\n this.end(data);\n return this;\n};\n\nPNG.prototype.write = function (data) {\n this._parser.write(data);\n return true;\n};\n\nPNG.prototype.end = function (data) {\n this._parser.end(data);\n};\n\nPNG.prototype._metadata = function (metadata) {\n this.width = metadata.width;\n this.height = metadata.height;\n\n this.emit(\"metadata\", metadata);\n};\n\nPNG.prototype._gamma = function (gamma) {\n this.gamma = gamma;\n};\n\nPNG.prototype._handleClose = function () {\n if (!this._parser.writable && !this._packer.readable) {\n this.emit(\"close\");\n }\n};\n\nPNG.bitblt = function (src, dst, srcX, srcY, width, height, deltaX, deltaY) {\n // eslint-disable-line max-params\n // coerce pixel dimensions to integers (also coerces undefined -> 0):\n /* eslint-disable no-param-reassign */\n srcX |= 0;\n srcY |= 0;\n width |= 0;\n height |= 0;\n deltaX |= 0;\n deltaY |= 0;\n /* eslint-enable no-param-reassign */\n\n if (\n srcX > src.width ||\n srcY > src.height ||\n srcX + width > src.width ||\n srcY + height > src.height\n ) {\n throw new Error(\"bitblt reading outside image\");\n }\n\n if (\n deltaX > dst.width ||\n deltaY > dst.height ||\n deltaX + width > dst.width ||\n deltaY + height > dst.height\n ) {\n throw new Error(\"bitblt writing outside image\");\n }\n\n for (let y = 0; y < height; y++) {\n src.data.copy(\n dst.data,\n ((deltaY + y) * dst.width + deltaX) << 2,\n ((srcY + y) * src.width + srcX) << 2,\n ((srcY + y) * src.width + srcX + width) << 2\n );\n }\n};\n\nPNG.prototype.bitblt = function (\n dst,\n srcX,\n srcY,\n width,\n height,\n deltaX,\n deltaY\n) {\n // eslint-disable-line max-params\n\n PNG.bitblt(this, dst, srcX, srcY, width, height, deltaX, deltaY);\n return this;\n};\n\nPNG.adjustGamma = function (src) {\n if (src.gamma) {\n for (let y = 0; y < src.height; y++) {\n for (let x = 0; x < src.width; x++) {\n let idx = (src.width * y + x) << 2;\n\n for (let i = 0; i < 3; i++) {\n let sample = src.data[idx + i] / 255;\n sample = Math.pow(sample, 1 / 2.2 / src.gamma);\n src.data[idx + i] = Math.round(sample * 255);\n }\n }\n }\n src.gamma = 0;\n }\n};\n\nPNG.prototype.adjustGamma = function () {\n PNG.adjustGamma(this);\n};\n", "export { comparePdfs, DEFAULT_COMPARE_PDFS_OPTIONS } from \"./functions\";\nexport type {\n ComparePdfsOptions,\n ComparePdfsResult,\n PageDiff,\n} from \"./functions\";\n", "import {\n getDocument,\n type PDFDocumentProxy,\n} from \"pdfjs-dist/legacy/build/pdf.mjs\";\nimport { PNG } from \"pngjs\";\nimport type { XOR } from \"ts-xor\";\nimport { convertPdfToPngs } from \"./convertPdfToPngs\";\nimport { comparePngs } from \"./comparePngs\";\n\nexport const DEFAULT_COMPARE_PDFS_OPTIONS: ComparePdfsOptions = {\n pngScale: 1.0,\n considerAntiAliasing: false,\n includeDiffMask: false,\n diffThreshold: 0.1,\n diffAlpha: 0.1,\n diffAntiAliasingColor: [255, 255, 0],\n diffColor: [255, 0, 0],\n diffColorAlt: [255, 0, 0],\n};\n\nexport type ComparePdfsOptions = {\n /**\n * The scale factor to use when rendering PDF pages to PNG images. Higher values result in higher fidelity\n * images but increase processing time and memory usage. Default is 1.0.\n */\n pngScale: number;\n /**\n * Whether to consider anti-aliasing when comparing images. Default is false.\n */\n considerAntiAliasing: boolean;\n /**\n * Whether to include a diff mask in the output diff images. Default is false.\n */\n includeDiffMask: boolean;\n /**\n * The threshold for pixel color differences to be considered significant. Ranges from 0 to 1, where 0 means\n * any difference is significant and 1 means only completely different colors are significant. Default is 0.1.\n */\n diffThreshold: number;\n /**\n * The alpha transparency value to use for the diff overlay. Ranges from 0 (fully transparent) to 1 (fully opaque).\n * Default is 0.1.\n */\n diffAlpha: number;\n /**\n * The RGB color to use for highlighting anti-aliased pixels in the diff image. Default is yellow [255, 255, 0].\n */\n diffAntiAliasingColor: [number, number, number];\n /**\n * The RGB color to use for highlighting differences in the diff image. Default is red [255, 0, 0].\n */\n diffColor: [number, number, number];\n /**\n * The RGB color to use as an alternative for highlighting differences in the diff image. Default is red [255, 0, 0].\n */\n diffColorAlt: [number, number, number];\n};\n\nexport type ComparePdfsResult = XOR<\n {\n equal: true;\n },\n {\n equal: false;\n /**\n * An array of diff objects containing the diff image and the page number of the diff.\n */\n diffs: PageDiff[];\n /**\n * Indicates whether the two PDFs have a different number of pages.\n */\n diffPageCount: boolean;\n }\n>;\n\nexport type PageDiff = {\n /**\n * The page number (1-based index) where the difference was found.\n */\n pageNumber: number;\n /**\n * A Buffer containing the PNG image data highlighting the differences for the page.\n */\n diffPng: Buffer;\n};\n\n/**\n * Compares two PDF files provided as Buffers using image pixel comparison and returns whether they\n * are equal along with any diffs.\n * @param file1 - Buffer containing the first PDF file.\n * @param file2 - Buffer containing the second PDF file.\n * @param options - Optional comparison settings.\n * @returns A promise that resolves to a `ComparePdfsResult` indicating if the PDFs are equal and any diffs.\n */\nexport async function comparePdfs(\n file1: Buffer,\n file2: Buffer,\n options?: Partial<ComparePdfsOptions>,\n): Promise<ComparePdfsResult> {\n const {\n pngScale,\n considerAntiAliasing,\n includeDiffMask,\n diffThreshold,\n diffAlpha,\n diffAntiAliasingColor,\n diffColor,\n diffColorAlt,\n }: ComparePdfsOptions = {\n ...DEFAULT_COMPARE_PDFS_OPTIONS,\n ...options,\n };\n\n // getDocument requires data to be Uint8Array\n const file1Converted = Uint8Array.from(file1);\n const file2Converted = Uint8Array.from(file2);\n\n const pdf1: PDFDocumentProxy = await getDocument({\n data: file1Converted,\n }).promise;\n const pdf2: PDFDocumentProxy = await getDocument({\n data: file2Converted,\n }).promise;\n\n const pngs1: PNG[] = await convertPdfToPngs({\n pdf: pdf1,\n scale: pngScale,\n });\n const pngs2: PNG[] = await convertPdfToPngs({\n pdf: pdf2,\n scale: pngScale,\n });\n\n const diffs: PageDiff[] = pngs1.flatMap((png1, index) => {\n const pageNumber = index + 1;\n\n const png2 = pngs2[index];\n\n if (!png2) {\n return [];\n }\n\n const { equal, diffPng } = comparePngs({\n png1,\n png2,\n threshold: diffThreshold,\n antiAliasing: considerAntiAliasing,\n alpha: diffAlpha,\n antiLiasingColor: diffAntiAliasingColor,\n diffColor,\n diffColorAlt,\n diffMask: includeDiffMask,\n });\n\n if (equal) {\n return [];\n }\n\n return {\n pageNumber,\n diffPng: PNG.sync.write(diffPng),\n };\n });\n\n const diffPageCount = pngs1.length !== pngs2.length;\n\n if (diffs.length > 0 || diffPageCount) {\n return {\n equal: false,\n diffs,\n diffPageCount,\n };\n }\n\n return {\n equal: true,\n };\n}\n", "import {\n type Canvas,\n type CanvasRenderingContext2D,\n createCanvas,\n} from \"@napi-rs/canvas\";\nimport {\n type PageViewport,\n type PDFPageProxy,\n type PDFDocumentProxy,\n} from \"pdfjs-dist/legacy/build/pdf.mjs\";\nimport { PNG } from \"pngjs\";\n\ntype ConvertPdfToPngsParams = {\n pdf: PDFDocumentProxy;\n scale: number;\n};\n\nexport async function convertPdfToPngs({\n pdf,\n scale,\n}: ConvertPdfToPngsParams): Promise<PNG[]> {\n const { numPages } = pdf;\n const pageNumbers = Array.from({ length: numPages }, (_, i) => i + 1);\n\n const pngs: PNG[] = await Promise.all(\n pageNumbers.map(async (pageNumber) => {\n const page: PDFPageProxy = await pdf.getPage(pageNumber);\n const viewport: PageViewport = page.getViewport({ scale });\n const canvas: Canvas = createCanvas(viewport.width, viewport.height);\n const canvasContext: CanvasRenderingContext2D = canvas.getContext(\"2d\");\n\n await page.render({\n viewport,\n canvas,\n canvasContext,\n }).promise;\n\n const pngBuffer: Buffer = canvas.toBuffer(\"image/png\");\n\n const png: PNG = PNG.sync.read(pngBuffer);\n\n return png;\n }),\n );\n\n return pngs;\n}\n", "/**\n * Compare two equally sized images, pixel by pixel.\n *\n * @param {Uint8Array | Uint8ClampedArray} img1 First image data.\n * @param {Uint8Array | Uint8ClampedArray} img2 Second image data.\n * @param {Uint8Array | Uint8ClampedArray | void} output Image data to write the diff to, if provided.\n * @param {number} width Input images width.\n * @param {number} height Input images height.\n *\n * @param {Object} [options]\n * @param {number} [options.threshold=0.1] Matching threshold (0 to 1); smaller is more sensitive.\n * @param {boolean} [options.includeAA=false] Whether to skip anti-aliasing detection.\n * @param {number} [options.alpha=0.1] Opacity of original image in diff output.\n * @param {[number, number, number]} [options.aaColor=[255, 255, 0]] Color of anti-aliased pixels in diff output.\n * @param {[number, number, number]} [options.diffColor=[255, 0, 0]] Color of different pixels in diff output.\n * @param {[number, number, number]} [options.diffColorAlt=options.diffColor] Whether to detect dark on light differences between img1 and img2 and set an alternative color to differentiate between the two.\n * @param {boolean} [options.diffMask=false] Draw the diff over a transparent background (a mask).\n *\n * @return {number} The number of mismatched pixels.\n */\nexport default function pixelmatch(img1, img2, output, width, height, options = {}) {\n const {\n threshold = 0.1,\n alpha = 0.1,\n aaColor = [255, 255, 0],\n diffColor = [255, 0, 0],\n includeAA, diffColorAlt, diffMask\n } = options;\n\n if (!isPixelData(img1) || !isPixelData(img2) || (output && !isPixelData(output)))\n throw new Error('Image data: Uint8Array, Uint8ClampedArray or Buffer expected.');\n\n if (img1.length !== img2.length || (output && output.length !== img1.length))\n throw new Error('Image sizes do not match.');\n\n if (img1.length !== width * height * 4) throw new Error('Image data size does not match width/height.');\n\n // check if images are identical\n const len = width * height;\n const a32 = new Uint32Array(img1.buffer, img1.byteOffset, len);\n const b32 = new Uint32Array(img2.buffer, img2.byteOffset, len);\n let identical = true;\n\n for (let i = 0; i < len; i++) {\n if (a32[i] !== b32[i]) { identical = false; break; }\n }\n if (identical) { // fast path if identical\n if (output && !diffMask) {\n for (let i = 0; i < len; i++) drawGrayPixel(img1, 4 * i, alpha, output);\n }\n return 0;\n }\n\n // maximum acceptable square distance between two colors;\n // 35215 is the maximum possible value for the YIQ difference metric\n const maxDelta = 35215 * threshold * threshold;\n const [aaR, aaG, aaB] = aaColor;\n const [diffR, diffG, diffB] = diffColor;\n const [altR, altG, altB] = diffColorAlt || diffColor;\n let diff = 0;\n\n // compare each pixel of one image against the other one\n for (let y = 0; y < height; y++) {\n for (let x = 0; x < width; x++) {\n\n const i = y * width + x;\n const pos = i * 4;\n\n // squared YUV distance between colors at this pixel position, negative if the img2 pixel is darker\n const delta = a32[i] === b32[i] ? 0 : colorDelta(img1, img2, pos, pos, false);\n\n // the color difference is above the threshold\n if (Math.abs(delta) > maxDelta) {\n // check it's a real rendering difference or just anti-aliasing\n const isAA = antialiased(img1, x, y, width, height, a32, b32) || antialiased(img2, x, y, width, height, b32, a32);\n if (!includeAA && isAA) {\n // one of the pixels is anti-aliasing; draw as yellow and do not count as difference\n // note that we do not include such pixels in a mask\n if (output && !diffMask) drawPixel(output, pos, aaR, aaG, aaB);\n\n } else {\n // found substantial difference not caused by anti-aliasing; draw it as such\n if (output) {\n if (delta < 0) {\n drawPixel(output, pos, altR, altG, altB);\n } else {\n drawPixel(output, pos, diffR, diffG, diffB);\n }\n }\n diff++;\n }\n\n } else if (output && !diffMask) {\n // pixels are similar; draw background as grayscale image blended with white\n drawGrayPixel(img1, pos, alpha, output);\n }\n }\n }\n\n // return the number of different pixels\n return diff;\n}\n\n/** @param {Uint8Array | Uint8ClampedArray} arr */\nfunction isPixelData(arr) {\n // work around instanceof Uint8Array not working properly in some Jest environments\n return ArrayBuffer.isView(arr) && arr.BYTES_PER_ELEMENT === 1;\n}\n\n/**\n * Check if a pixel is likely a part of anti-aliasing;\n * based on \"Anti-aliased Pixel and Intensity Slope Detector\" paper by V. Vysniauskas, 2009\n * @param {Uint8Array | Uint8ClampedArray} img\n * @param {number} x1\n * @param {number} y1\n * @param {number} width\n * @param {number} height\n * @param {Uint32Array} a32\n * @param {Uint32Array} b32\n */\nfunction antialiased(img, x1, y1, width, height, a32, b32) {\n const x0 = Math.max(x1 - 1, 0);\n const y0 = Math.max(y1 - 1, 0);\n const x2 = Math.min(x1 + 1, width - 1);\n const y2 = Math.min(y1 + 1, height - 1);\n const pos = y1 * width + x1;\n let zeroes = x1 === x0 || x1 === x2 || y1 === y0 || y1 === y2 ? 1 : 0;\n let min = 0;\n let max = 0;\n let minX = 0;\n let minY = 0;\n let maxX = 0;\n let maxY = 0;\n\n // go through 8 adjacent pixels\n for (let x = x0; x <= x2; x++) {\n for (let y = y0; y <= y2; y++) {\n if (x === x1 && y === y1) continue;\n\n // brightness delta between the center pixel and adjacent one\n const delta = colorDelta(img, img, pos * 4, (y * width + x) * 4, true);\n\n // count the number of equal, darker and brighter adjacent pixels\n if (delta === 0) {\n zeroes++;\n // if found more than 2 equal siblings, it's definitely not anti-aliasing\n if (zeroes > 2) return false;\n\n // remember the darkest pixel\n } else if (delta < min) {\n min = delta;\n minX = x;\n minY = y;\n\n // remember the brightest pixel\n } else if (delta > max) {\n max = delta;\n maxX = x;\n maxY = y;\n }\n }\n }\n\n // if there are no both darker and brighter pixels among siblings, it's not anti-aliasing\n if (min === 0 || max === 0) return false;\n\n // if either the darkest or the brightest pixel has 3+ equal siblings in both images\n // (definitely not anti-aliased), this pixel is anti-aliased\n return (hasManySiblings(a32, minX, minY, width, height) && hasManySiblings(b32, minX, minY, width, height)) ||\n (hasManySiblings(a32, maxX, maxY, width, height) && hasManySiblings(b32, maxX, maxY, width, height));\n}\n\n/**\n * Check if a pixel has 3+ adjacent pixels of the same color.\n * @param {Uint32Array} img\n * @param {number} x1\n * @param {number} y1\n * @param {number} width\n * @param {number} height\n */\nfunction hasManySiblings(img, x1, y1, width, height) {\n const x0 = Math.max(x1 - 1, 0);\n const y0 = Math.max(y1 - 1, 0);\n const x2 = Math.min(x1 + 1, width - 1);\n const y2 = Math.min(y1 + 1, height - 1);\n const val = img[y1 * width + x1];\n let zeroes = x1 === x0 || x1 === x2 || y1 === y0 || y1 === y2 ? 1 : 0;\n\n // go through 8 adjacent pixels\n for (let x = x0; x <= x2; x++) {\n for (let y = y0; y <= y2; y++) {\n if (x === x1 && y === y1) continue;\n zeroes += +(val === img[y * width + x]);\n if (zeroes > 2) return true;\n }\n }\n return false;\n}\n\n/**\n * Calculate color difference according to the paper \"Measuring perceived color difference\n * using YIQ NTSC transmission color space in mobile applications\" by Y. Kotsarenko and F. Ramos\n * @param {Uint8Array | Uint8ClampedArray} img1\n * @param {Uint8Array | Uint8ClampedArray} img2\n * @param {number} k\n * @param {number} m\n * @param {boolean} yOnly\n */\nfunction colorDelta(img1, img2, k, m, yOnly) {\n const r1 = img1[k];\n const g1 = img1[k + 1];\n const b1 = img1[k + 2];\n const a1 = img1[k + 3];\n const r2 = img2[m];\n const g2 = img2[m + 1];\n const b2 = img2[m + 2];\n const a2 = img2[m + 3];\n\n let dr = r1 - r2;\n let dg = g1 - g2;\n let db = b1 - b2;\n const da = a1 - a2;\n\n if (!dr && !dg && !db && !da) return 0;\n\n if (a1 < 255 || a2 < 255) { // blend pixels with background\n const rb = 48 + 159 * (k % 2);\n const gb = 48 + 159 * ((k / 1.618033988749895 | 0) % 2);\n const bb = 48 + 159 * ((k / 2.618033988749895 | 0) % 2);\n dr = (r1 * a1 - r2 * a2 - rb * da) / 255;\n dg = (g1 * a1 - g2 * a2 - gb * da) / 255;\n db = (b1 * a1 - b2 * a2 - bb * da) / 255;\n }\n\n const y = dr * 0.29889531 + dg * 0.58662247 + db * 0.11448223;\n\n if (yOnly) return y; // brightness difference only\n\n const i = dr * 0.59597799 - dg * 0.27417610 - db * 0.32180189;\n const q = dr * 0.21147017 - dg * 0.52261711 + db * 0.31114694;\n\n const delta = 0.5053 * y * y + 0.299 * i * i + 0.1957 * q * q;\n\n // encode whether the pixel lightens or darkens in the sign\n return y > 0 ? -delta : delta;\n}\n\n/**\n * @param {Uint8Array | Uint8ClampedArray} output\n * @param {number} pos\n * @param {number} r\n * @param {number} g\n * @param {number} b\n */\nfunction drawPixel(output, pos, r, g, b) {\n output[pos + 0] = r;\n output[pos + 1] = g;\n output[pos + 2] = b;\n output[pos + 3] = 255;\n}\n\n/**\n * @param {Uint8Array | Uint8ClampedArray} img\n * @param {number} i\n * @param {number} alpha\n * @param {Uint8Array | Uint8ClampedArray} output\n */\nfunction drawGrayPixel(img, i, alpha, output) {\n const val = 255 + (img[i] * 0.29889531 + img[i + 1] * 0.58662247 + img[i + 2] * 0.11448223 - 255) * alpha * img[i + 3] / 255;\n drawPixel(output, i, val, val, val);\n}\n", "import pixelmatch from \"pixelmatch\";\nimport { PNG } from \"pngjs\";\nimport { type XOR } from \"ts-xor\";\n\ntype ComparePngsResult = XOR<\n {\n equal: true;\n },\n {\n equal: false;\n diffPng: PNG;\n }\n>;\n\ntype ComparePngsParams = {\n png1: PNG;\n png2: PNG;\n threshold: number;\n antiAliasing: boolean;\n alpha: number;\n antiLiasingColor: [number, number, number];\n diffColor: [number, number, number];\n diffColorAlt: [number, number, number];\n diffMask: boolean;\n};\n\nexport function comparePngs({\n png1,\n png2,\n threshold,\n antiAliasing,\n alpha,\n antiLiasingColor,\n diffColor,\n diffColorAlt,\n diffMask,\n}: ComparePngsParams): ComparePngsResult {\n const { width, height } = png1;\n\n const diffPng = new PNG({ width, height });\n\n const numDiffPixels = pixelmatch(\n png1.data,\n png2.data,\n diffPng.data,\n width,\n height,\n {\n threshold,\n includeAA: antiAliasing,\n alpha,\n aaColor: antiLiasingColor,\n diffColor,\n diffColorAlt,\n diffMask,\n },\n );\n\n if (numDiffPixels <= 0) {\n return {\n equal: true,\n };\n }\n\n return {\n equal: false,\n diffPng,\n };\n}\n"],
5
+ "mappings": "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",
6
+ "names": ["require_chunkstream", "__commonJSMin", "exports", "module", "util", "Stream", "ChunkStream", "length", "callback", "data", "encoding", "dataBuffer", "read", "smallerBuf", "pos", "count", "buf", "len", "ex", "require_interlace", "__commonJSMin", "exports", "imagePasses", "width", "height", "images", "xLeftOver", "yLeftOver", "xRepeats", "yRepeats", "i", "pass", "passWidth", "passHeight", "j", "x", "y", "outerXLeftOver", "outerX", "outerYLeftOver", "outerY", "require_paeth_predictor", "__commonJSMin", "exports", "module", "left", "above", "upLeft", "paeth", "pLeft", "pAbove", "pUpLeft", "require_filter_parse", "__commonJSMin", "exports", "module", "interlaceUtils", "paethPredictor", "getByteWidth", "width", "bpp", "depth", "byteWidth", "Filter", "bitmapInfo", "dependencies", "height", "interlace", "passes", "i", "rawData", "unfilteredLine", "xComparison", "xBiggerThan", "x", "rawByte", "f1Left", "lastLine", "f2Up", "f3Up", "f3Left", "f3Add", "f4Up", "f4Left", "f4UpLeft", "f4Add", "filter", "currentImage", "require_filter_parse_async", "__commonJSMin", "exports", "module", "util", "ChunkStream", "Filter", "FilterAsync", "bitmapInfo", "buffers", "that", "buffer", "require_constants", "__commonJSMin", "exports", "module", "require_crc", "__commonJSMin", "exports", "module", "crcTable", "i", "currentCrc", "j", "CrcCalculator", "data", "buf", "crc", "require_parser", "__commonJSMin", "exports", "module", "constants", "CrcCalculator", "Parser", "options", "dependencies", "data", "signature", "i", "length", "type", "name", "ancillary", "fileCrc", "calcCrc", "width", "height", "depth", "colorType", "compr", "filter", "interlace", "bpp", "entries", "leftOverLength", "require_bitmapper", "__commonJSMin", "exports", "interlaceUtils", "pixelBppMapper", "pxData", "data", "pxPos", "rawPos", "pixel", "pixelBppCustomMapper", "pixelData", "maxBit", "bitRetriever", "depth", "leftOver", "split", "byte", "byte8", "byte7", "byte6", "byte5", "byte4", "byte3", "byte2", "byte1", "count", "returner", "mapImage8Bit", "image", "getPxPos", "bpp", "imageWidth", "imageHeight", "imagePass", "y", "x", "mapImageCustomBit", "bits", "bitmapInfo", "width", "height", "interlace", "images", "nonInterlacedPxPos", "imageIndex", "require_format_normaliser", "__commonJSMin", "exports", "module", "dePalette", "indata", "outdata", "width", "height", "palette", "pxPos", "y", "x", "color", "i", "replaceTransparentColor", "transColor", "makeTrans", "scaleDepth", "depth", "maxOutSample", "maxInSample", "imageData", "skipRescale", "colorType", "require_parser_async", "__commonJSMin", "exports", "module", "util", "zlib", "ChunkStream", "FilterAsync", "Parser", "bitmapper", "formatNormaliser", "ParserAsync", "options", "err", "data", "imageSize", "chunkSize", "leftToInflate", "emitError", "filterWrite", "chunk", "metaData", "transColor", "palette", "filteredData", "normalisedBitmapData", "bitmapData", "ex", "require_bitpacker", "__commonJSMin", "exports", "module", "constants", "dataIn", "width", "height", "options", "outHasAlpha", "bigEndian", "buffer", "data", "maxValue", "inBpp", "outBpp", "outData", "inIndex", "outIndex", "bgColor", "getRGBA", "red", "green", "blue", "alpha", "y", "x", "rgba", "grayscale", "require_filter_pack", "__commonJSMin", "exports", "module", "paethPredictor", "filterNone", "pxData", "pxPos", "byteWidth", "rawData", "rawPos", "x", "filterSumNone", "sum", "length", "i", "filterSub", "bpp", "left", "val", "filterSumSub", "filterUp", "up", "filterSumUp", "filterAvg", "filterSumAvg", "filterPaeth", "upleft", "filterSumPaeth", "filters", "filterSums", "width", "height", "options", "filterTypes", "sel", "y", "min", "require_packer", "__commonJSMin", "exports", "module", "constants", "CrcStream", "bitPacker", "filter", "zlib", "Packer", "options", "data", "width", "height", "packedData", "bpp", "type", "len", "buf", "gamma", "require_packer_async", "__commonJSMin", "exports", "module", "util", "Stream", "constants", "Packer", "PackerAsync", "opt", "options", "data", "width", "height", "gamma", "filteredData", "compressedData", "require_sync_inflate", "__commonJSMin", "exports", "module", "assert", "zlib", "util", "kMaxLength", "Inflate", "opts", "createInflate", "_close", "engine", "callback", "chunk", "flushFlag", "asyncCb", "self", "availInBefore", "availOutBefore", "leftToInflate", "inOff", "buffers", "nread", "error", "err", "handleChunk", "availInAfter", "availOutAfter", "have", "out", "res", "buf", "zlibBufferSync", "buffer", "inflateSync", "require_sync_reader", "__commonJSMin", "exports", "module", "SyncReader", "buffer", "length", "callback", "read", "buf", "require_filter_parse_sync", "__commonJSMin", "exports", "SyncReader", "Filter", "inBuffer", "bitmapInfo", "outBuffers", "reader", "bufferPart", "require_parser_sync", "__commonJSMin", "exports", "module", "hasSyncZlib", "zlib", "inflateSync", "SyncReader", "FilterSync", "Parser", "bitmapper", "formatNormaliser", "buffer", "options", "err", "handleError", "_err_", "metaData", "handleMetaData", "_metaData_", "handleTransColor", "transColor", "handlePalette", "palette", "handleSimpleTransparency", "gamma", "handleGamma", "_gamma_", "inflateDataList", "handleInflateData", "inflatedData", "reader", "inflateData", "imageSize", "unfilteredData", "bitmapData", "normalisedBitmapData", "require_packer_sync", "__commonJSMin", "exports", "module", "hasSyncZlib", "zlib", "constants", "Packer", "metaData", "opt", "options", "packer", "chunks", "filteredData", "compressedData", "require_png_sync", "__commonJSMin", "exports", "parse", "pack", "buffer", "options", "png", "require_png", "__commonJSMin", "exports", "util", "Stream", "Parser", "Packer", "PNGSync", "PNG", "options", "data", "callback", "onParsed", "onError", "parsedData", "err", "metadata", "gamma", "src", "dst", "srcX", "srcY", "width", "height", "deltaX", "deltaY", "y", "x", "idx", "i", "sample", "index_exports", "__export", "DEFAULT_COMPARE_PDFS_OPTIONS", "comparePdfs", "__toCommonJS", "import_pdf", "import_pngjs", "import_canvas", "import_pngjs", "convertPdfToPngs", "pdf", "scale", "numPages", "pageNumbers", "_", "i", "pageNumber", "page", "viewport", "canvas", "canvasContext", "pngBuffer", "pixelmatch", "img1", "img2", "output", "width", "height", "options", "threshold", "alpha", "aaColor", "diffColor", "includeAA", "diffColorAlt", "diffMask", "isPixelData", "len", "a32", "b32", "identical", "i", "drawGrayPixel", "maxDelta", "aaR", "aaG", "aaB", "diffR", "diffG", "diffB", "altR", "altG", "altB", "diff", "y", "x", "pos", "delta", "colorDelta", "isAA", "antialiased", "drawPixel", "arr", "img", "x1", "y1", "x0", "y0", "x2", "y2", "zeroes", "min", "max", "minX", "minY", "maxX", "maxY", "hasManySiblings", "val", "k", "m", "yOnly", "r1", "g1", "b1", "a1", "r2", "g2", "b2", "a2", "dr", "dg", "db", "da", "rb", "gb", "bb", "q", "g", "b", "import_pngjs", "comparePngs", "png1", "png2", "threshold", "antiAliasing", "alpha", "antiLiasingColor", "diffColor", "diffColorAlt", "diffMask", "width", "height", "diffPng", "pixelmatch", "DEFAULT_COMPARE_PDFS_OPTIONS", "comparePdfs", "file1", "file2", "options", "pngScale", "considerAntiAliasing", "includeDiffMask", "diffThreshold", "diffAlpha", "diffAntiAliasingColor", "diffColor", "diffColorAlt", "file1Converted", "file2Converted", "pdf1", "pdf2", "pngs1", "convertPdfToPngs", "pngs2", "diffs", "png1", "index", "pageNumber", "png2", "equal", "diffPng", "comparePngs", "diffPageCount"]
7
+ }
@@ -0,0 +1,2 @@
1
+ var Et=Object.create;var _e=Object.defineProperty;var Tt=Object.getOwnPropertyDescriptor;var Pt=Object.getOwnPropertyNames;var At=Object.getPrototypeOf,Ot=Object.prototype.hasOwnProperty;var E=(e=>typeof require<"u"?require:typeof Proxy<"u"?new Proxy(e,{get:(t,r)=>(typeof require<"u"?require:t)[r]}):e)(function(e){if(typeof require<"u")return require.apply(this,arguments);throw Error('Dynamic require of "'+e+'" is not supported')});var b=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports);var Lt=(e,t,r,i)=>{if(t&&typeof t=="object"||typeof t=="function")for(let n of Pt(t))!Ot.call(e,n)&&n!==r&&_e(e,n,{get:()=>t[n],enumerable:!(i=Tt(t,n))||i.enumerable});return e};var W=(e,t,r)=>(r=e!=null?Et(At(e)):{},Lt(t||!e||!e.__esModule?_e(r,"default",{value:e,enumerable:!0}):r,e));var K=b((Dr,ge)=>{"use strict";var It=E("util"),me=E("stream"),k=ge.exports=function(){me.call(this),this._buffers=[],this._buffered=0,this._reads=[],this._paused=!1,this._encoding="utf8",this.writable=!0};It.inherits(k,me);k.prototype.read=function(e,t){this._reads.push({length:Math.abs(e),allowLess:e<0,func:t}),process.nextTick(function(){this._process(),this._paused&&this._reads&&this._reads.length>0&&(this._paused=!1,this.emit("drain"))}.bind(this))};k.prototype.write=function(e,t){if(!this.writable)return this.emit("error",new Error("Stream not writable")),!1;let r;return Buffer.isBuffer(e)?r=e:r=Buffer.from(e,t||this._encoding),this._buffers.push(r),this._buffered+=r.length,this._process(),this._reads&&this._reads.length===0&&(this._paused=!0),this.writable&&!this._paused};k.prototype.end=function(e,t){e&&this.write(e,t),this.writable=!1,this._buffers&&(this._buffers.length===0?this._end():(this._buffers.push(null),this._process()))};k.prototype.destroySoon=k.prototype.end;k.prototype._end=function(){this._reads.length>0&&this.emit("error",new Error("Unexpected end of input")),this.destroy()};k.prototype.destroy=function(){this._buffers&&(this.writable=!1,this._reads=null,this._buffers=null,this.emit("close"))};k.prototype._processReadAllowingLess=function(e){this._reads.shift();let t=this._buffers[0];t.length>e.length?(this._buffered-=e.length,this._buffers[0]=t.slice(e.length),e.func.call(this,t.slice(0,e.length))):(this._buffered-=t.length,this._buffers.shift(),e.func.call(this,t))};k.prototype._processRead=function(e){this._reads.shift();let t=0,r=0,i=Buffer.alloc(e.length);for(;t<e.length;){let n=this._buffers[r++],l=Math.min(n.length,e.length-t);n.copy(i,t,0,l),t+=l,l!==n.length&&(this._buffers[--r]=n.slice(l))}r>0&&this._buffers.splice(0,r),this._buffered-=e.length,e.func.call(this,i)};k.prototype._process=function(){try{for(;this._buffered>0&&this._reads&&this._reads.length>0;){let e=this._reads[0];if(e.allowLess)this._processReadAllowingLess(e);else if(this._buffered>=e.length)this._processRead(e);else break}this._buffers&&!this.writable&&this._end()}catch(e){this.emit("error",e)}}});var J=b(X=>{"use strict";var S=[{x:[0],y:[0]},{x:[4],y:[0]},{x:[0,4],y:[4]},{x:[2,6],y:[0,4]},{x:[0,2,4,6],y:[2,6]},{x:[1,3,5,7],y:[0,2,4,6]},{x:[0,1,2,3,4,5,6,7],y:[1,3,5,7]}];X.getImagePasses=function(e,t){let r=[],i=e%8,n=t%8,l=(e-i)/8,s=(t-n)/8;for(let o=0;o<S.length;o++){let h=S[o],f=l*h.x.length,a=s*h.y.length;for(let u=0;u<h.x.length&&h.x[u]<i;u++)f++;for(let u=0;u<h.y.length&&h.y[u]<n;u++)a++;f>0&&a>0&&r.push({width:f,height:a,index:o})}return r};X.getInterlaceIterator=function(e){return function(t,r,i){let n=t%S[i].x.length,l=(t-n)/S[i].x.length*8+S[i].x[n],s=r%S[i].y.length,o=(r-s)/S[i].y.length*8+S[i].y[s];return l*4+o*e*4}}});var Q=b((qr,ye)=>{"use strict";ye.exports=function(t,r,i){let n=t+r-i,l=Math.abs(n-t),s=Math.abs(n-r),o=Math.abs(n-i);return l<=s&&l<=o?t:s<=o?r:i}});var $=b((Yr,Ce)=>{"use strict";var Rt=J(),kt=Q();function be(e,t,r){let i=e*t;return r!==8&&(i=Math.ceil(i/(8/r))),i}var q=Ce.exports=function(e,t){let r=e.width,i=e.height,n=e.interlace,l=e.bpp,s=e.depth;if(this.read=t.read,this.write=t.write,this.complete=t.complete,this._imageIndex=0,this._images=[],n){let o=Rt.getImagePasses(r,i);for(let h=0;h<o.length;h++)this._images.push({byteWidth:be(o[h].width,l,s),height:o[h].height,lineIndex:0})}else this._images.push({byteWidth:be(r,l,s),height:i,lineIndex:0});s===8?this._xComparison=l:s===16?this._xComparison=l*2:this._xComparison=1};q.prototype.start=function(){this.read(this._images[this._imageIndex].byteWidth+1,this._reverseFilterLine.bind(this))};q.prototype._unFilterType1=function(e,t,r){let i=this._xComparison,n=i-1;for(let l=0;l<r;l++){let s=e[1+l],o=l>n?t[l-i]:0;t[l]=s+o}};q.prototype._unFilterType2=function(e,t,r){let i=this._lastLine;for(let n=0;n<r;n++){let l=e[1+n],s=i?i[n]:0;t[n]=l+s}};q.prototype._unFilterType3=function(e,t,r){let i=this._xComparison,n=i-1,l=this._lastLine;for(let s=0;s<r;s++){let o=e[1+s],h=l?l[s]:0,f=s>n?t[s-i]:0,a=Math.floor((f+h)/2);t[s]=o+a}};q.prototype._unFilterType4=function(e,t,r){let i=this._xComparison,n=i-1,l=this._lastLine;for(let s=0;s<r;s++){let o=e[1+s],h=l?l[s]:0,f=s>n?t[s-i]:0,a=s>n&&l?l[s-i]:0,u=kt(f,h,a);t[s]=o+u}};q.prototype._reverseFilterLine=function(e){let t=e[0],r,i=this._images[this._imageIndex],n=i.byteWidth;if(t===0)r=e.slice(1,n+1);else switch(r=Buffer.alloc(n),t){case 1:this._unFilterType1(e,r,n);break;case 2:this._unFilterType2(e,r,n);break;case 3:this._unFilterType3(e,r,n);break;case 4:this._unFilterType4(e,r,n);break;default:throw new Error("Unrecognised filter type - "+t)}this.write(r),i.lineIndex++,i.lineIndex>=i.height?(this._lastLine=null,this._imageIndex++,i=this._images[this._imageIndex]):this._lastLine=r,i?this.read(i.byteWidth+1,this._reverseFilterLine.bind(this)):(this._lastLine=null,this.complete())}});var Te=b((Ur,Ee)=>{"use strict";var Bt=E("util"),we=K(),St=$(),xt=Ee.exports=function(e){we.call(this);let t=[],r=this;this._filter=new St(e,{read:this.read.bind(this),write:function(i){t.push(i)},complete:function(){r.emit("complete",Buffer.concat(t))}}),this._filter.start()};Bt.inherits(xt,we)});var Y=b((vr,Pe)=>{"use strict";Pe.exports={PNG_SIGNATURE:[137,80,78,71,13,10,26,10],TYPE_IHDR:1229472850,TYPE_IEND:1229278788,TYPE_IDAT:1229209940,TYPE_PLTE:1347179589,TYPE_tRNS:1951551059,TYPE_gAMA:1732332865,COLORTYPE_GRAYSCALE:0,COLORTYPE_PALETTE:1,COLORTYPE_COLOR:2,COLORTYPE_ALPHA:4,COLORTYPE_PALETTE_COLOR:3,COLORTYPE_COLOR_ALPHA:6,COLORTYPE_TO_BPP_MAP:{0:1,2:3,3:1,4:2,6:4},GAMMA_DIVISION:1e5}});var re=b((Gr,Ae)=>{"use strict";var ee=[];(function(){for(let e=0;e<256;e++){let t=e;for(let r=0;r<8;r++)t&1?t=3988292384^t>>>1:t=t>>>1;ee[e]=t}})();var te=Ae.exports=function(){this._crc=-1};te.prototype.write=function(e){for(let t=0;t<e.length;t++)this._crc=ee[(this._crc^e[t])&255]^this._crc>>>8;return!0};te.prototype.crc32=function(){return this._crc^-1};te.crc32=function(e){let t=-1;for(let r=0;r<e.length;r++)t=ee[(t^e[r])&255]^t>>>8;return t^-1}});var ie=b((Hr,Oe)=>{"use strict";var C=Y(),Mt=re(),w=Oe.exports=function(e,t){this._options=e,e.checkCRC=e.checkCRC!==!1,this._hasIHDR=!1,this._hasIEND=!1,this._emittedHeadersFinished=!1,this._palette=[],this._colorType=0,this._chunks={},this._chunks[C.TYPE_IHDR]=this._handleIHDR.bind(this),this._chunks[C.TYPE_IEND]=this._handleIEND.bind(this),this._chunks[C.TYPE_IDAT]=this._handleIDAT.bind(this),this._chunks[C.TYPE_PLTE]=this._handlePLTE.bind(this),this._chunks[C.TYPE_tRNS]=this._handleTRNS.bind(this),this._chunks[C.TYPE_gAMA]=this._handleGAMA.bind(this),this.read=t.read,this.error=t.error,this.metadata=t.metadata,this.gamma=t.gamma,this.transColor=t.transColor,this.palette=t.palette,this.parsed=t.parsed,this.inflateData=t.inflateData,this.finished=t.finished,this.simpleTransparency=t.simpleTransparency,this.headersFinished=t.headersFinished||function(){}};w.prototype.start=function(){this.read(C.PNG_SIGNATURE.length,this._parseSignature.bind(this))};w.prototype._parseSignature=function(e){let t=C.PNG_SIGNATURE;for(let r=0;r<t.length;r++)if(e[r]!==t[r]){this.error(new Error("Invalid file signature"));return}this.read(8,this._parseChunkBegin.bind(this))};w.prototype._parseChunkBegin=function(e){let t=e.readUInt32BE(0),r=e.readUInt32BE(4),i="";for(let l=4;l<8;l++)i+=String.fromCharCode(e[l]);let n=!!(e[4]&32);if(!this._hasIHDR&&r!==C.TYPE_IHDR){this.error(new Error("Expected IHDR on beggining"));return}if(this._crc=new Mt,this._crc.write(Buffer.from(i)),this._chunks[r])return this._chunks[r](t);if(!n){this.error(new Error("Unsupported critical chunk type "+i));return}this.read(t+4,this._skipChunk.bind(this))};w.prototype._skipChunk=function(){this.read(8,this._parseChunkBegin.bind(this))};w.prototype._handleChunkEnd=function(){this.read(4,this._parseChunkEnd.bind(this))};w.prototype._parseChunkEnd=function(e){let t=e.readInt32BE(0),r=this._crc.crc32();if(this._options.checkCRC&&r!==t){this.error(new Error("Crc error - "+t+" - "+r));return}this._hasIEND||this.read(8,this._parseChunkBegin.bind(this))};w.prototype._handleIHDR=function(e){this.read(e,this._parseIHDR.bind(this))};w.prototype._parseIHDR=function(e){this._crc.write(e);let t=e.readUInt32BE(0),r=e.readUInt32BE(4),i=e[8],n=e[9],l=e[10],s=e[11],o=e[12];if(i!==8&&i!==4&&i!==2&&i!==1&&i!==16){this.error(new Error("Unsupported bit depth "+i));return}if(!(n in C.COLORTYPE_TO_BPP_MAP)){this.error(new Error("Unsupported color type"));return}if(l!==0){this.error(new Error("Unsupported compression method"));return}if(s!==0){this.error(new Error("Unsupported filter method"));return}if(o!==0&&o!==1){this.error(new Error("Unsupported interlace method"));return}this._colorType=n;let h=C.COLORTYPE_TO_BPP_MAP[this._colorType];this._hasIHDR=!0,this.metadata({width:t,height:r,depth:i,interlace:!!o,palette:!!(n&C.COLORTYPE_PALETTE),color:!!(n&C.COLORTYPE_COLOR),alpha:!!(n&C.COLORTYPE_ALPHA),bpp:h,colorType:n}),this._handleChunkEnd()};w.prototype._handlePLTE=function(e){this.read(e,this._parsePLTE.bind(this))};w.prototype._parsePLTE=function(e){this._crc.write(e);let t=Math.floor(e.length/3);for(let r=0;r<t;r++)this._palette.push([e[r*3],e[r*3+1],e[r*3+2],255]);this.palette(this._palette),this._handleChunkEnd()};w.prototype._handleTRNS=function(e){this.simpleTransparency(),this.read(e,this._parseTRNS.bind(this))};w.prototype._parseTRNS=function(e){if(this._crc.write(e),this._colorType===C.COLORTYPE_PALETTE_COLOR){if(this._palette.length===0){this.error(new Error("Transparency chunk must be after palette"));return}if(e.length>this._palette.length){this.error(new Error("More transparent colors than palette size"));return}for(let t=0;t<e.length;t++)this._palette[t][3]=e[t];this.palette(this._palette)}this._colorType===C.COLORTYPE_GRAYSCALE&&this.transColor([e.readUInt16BE(0)]),this._colorType===C.COLORTYPE_COLOR&&this.transColor([e.readUInt16BE(0),e.readUInt16BE(2),e.readUInt16BE(4)]),this._handleChunkEnd()};w.prototype._handleGAMA=function(e){this.read(e,this._parseGAMA.bind(this))};w.prototype._parseGAMA=function(e){this._crc.write(e),this.gamma(e.readUInt32BE(0)/C.GAMMA_DIVISION),this._handleChunkEnd()};w.prototype._handleIDAT=function(e){this._emittedHeadersFinished||(this._emittedHeadersFinished=!0,this.headersFinished()),this.read(-e,this._parseIDAT.bind(this,e))};w.prototype._parseIDAT=function(e,t){if(this._crc.write(t),this._colorType===C.COLORTYPE_PALETTE_COLOR&&this._palette.length===0)throw new Error("Expected palette not found");this.inflateData(t);let r=e-t.length;r>0?this._handleIDAT(r):this._handleChunkEnd()};w.prototype._handleIEND=function(e){this.read(e,this._parseIEND.bind(this))};w.prototype._parseIEND=function(e){this._crc.write(e),this._hasIEND=!0,this._handleChunkEnd(),this.finished&&this.finished()}});var ne=b(Ie=>{"use strict";var Le=J(),Dt=[function(){},function(e,t,r,i){if(i===t.length)throw new Error("Ran out of data");let n=t[i];e[r]=n,e[r+1]=n,e[r+2]=n,e[r+3]=255},function(e,t,r,i){if(i+1>=t.length)throw new Error("Ran out of data");let n=t[i];e[r]=n,e[r+1]=n,e[r+2]=n,e[r+3]=t[i+1]},function(e,t,r,i){if(i+2>=t.length)throw new Error("Ran out of data");e[r]=t[i],e[r+1]=t[i+1],e[r+2]=t[i+2],e[r+3]=255},function(e,t,r,i){if(i+3>=t.length)throw new Error("Ran out of data");e[r]=t[i],e[r+1]=t[i+1],e[r+2]=t[i+2],e[r+3]=t[i+3]}],Nt=[function(){},function(e,t,r,i){let n=t[0];e[r]=n,e[r+1]=n,e[r+2]=n,e[r+3]=i},function(e,t,r){let i=t[0];e[r]=i,e[r+1]=i,e[r+2]=i,e[r+3]=t[1]},function(e,t,r,i){e[r]=t[0],e[r+1]=t[1],e[r+2]=t[2],e[r+3]=i},function(e,t,r){e[r]=t[0],e[r+1]=t[1],e[r+2]=t[2],e[r+3]=t[3]}];function qt(e,t){let r=[],i=0;function n(){if(i===e.length)throw new Error("Ran out of data");let l=e[i];i++;let s,o,h,f,a,u,c,d;switch(t){default:throw new Error("unrecognised depth");case 16:c=e[i],i++,r.push((l<<8)+c);break;case 4:c=l&15,d=l>>4,r.push(d,c);break;case 2:a=l&3,u=l>>2&3,c=l>>4&3,d=l>>6&3,r.push(d,c,u,a);break;case 1:s=l&1,o=l>>1&1,h=l>>2&1,f=l>>3&1,a=l>>4&1,u=l>>5&1,c=l>>6&1,d=l>>7&1,r.push(d,c,u,a,f,h,o,s);break}}return{get:function(l){for(;r.length<l;)n();let s=r.slice(0,l);return r=r.slice(l),s},resetAfterLine:function(){r.length=0},end:function(){if(i!==e.length)throw new Error("extra data found")}}}function Yt(e,t,r,i,n,l){let s=e.width,o=e.height,h=e.index;for(let f=0;f<o;f++)for(let a=0;a<s;a++){let u=r(a,f,h);Dt[i](t,n,u,l),l+=i}return l}function Ut(e,t,r,i,n,l){let s=e.width,o=e.height,h=e.index;for(let f=0;f<o;f++){for(let a=0;a<s;a++){let u=n.get(i),c=r(a,f,h);Nt[i](t,u,c,l)}n.resetAfterLine()}}Ie.dataToBitMap=function(e,t){let r=t.width,i=t.height,n=t.depth,l=t.bpp,s=t.interlace,o;n!==8&&(o=qt(e,n));let h;n<=8?h=Buffer.alloc(r*i*4):h=new Uint16Array(r*i*4);let f=Math.pow(2,n)-1,a=0,u,c;if(s)u=Le.getImagePasses(r,i),c=Le.getInterlaceIterator(r,i);else{let d=0;c=function(){let _=d;return d+=4,_},u=[{width:r,height:i}]}for(let d=0;d<u.length;d++)n===8?a=Yt(u[d],h,c,l,e,a):Ut(u[d],h,c,l,o,f);if(n===8){if(a!==e.length)throw new Error("extra data found")}else o.end();return h}});var le=b((zr,Re)=>{"use strict";function vt(e,t,r,i,n){let l=0;for(let s=0;s<i;s++)for(let o=0;o<r;o++){let h=n[e[l]];if(!h)throw new Error("index "+e[l]+" not in palette");for(let f=0;f<4;f++)t[l+f]=h[f];l+=4}}function Gt(e,t,r,i,n){let l=0;for(let s=0;s<i;s++)for(let o=0;o<r;o++){let h=!1;if(n.length===1?n[0]===e[l]&&(h=!0):n[0]===e[l]&&n[1]===e[l+1]&&n[2]===e[l+2]&&(h=!0),h)for(let f=0;f<4;f++)t[l+f]=0;l+=4}}function Ht(e,t,r,i,n){let l=255,s=Math.pow(2,n)-1,o=0;for(let h=0;h<i;h++)for(let f=0;f<r;f++){for(let a=0;a<4;a++)t[o+a]=Math.floor(e[o+a]*l/s+.5);o+=4}}Re.exports=function(e,t,r=!1){let i=t.depth,n=t.width,l=t.height,s=t.colorType,o=t.transColor,h=t.palette,f=e;return s===3?vt(e,f,n,l,h):(o&&Gt(e,f,n,l,o),i!==8&&!r&&(i===16&&(f=Buffer.alloc(n*l*4)),Ht(e,f,n,l,i))),f}});var Se=b((jr,Be)=>{"use strict";var Ft=E("util"),se=E("zlib"),ke=K(),zt=Te(),jt=ie(),Vt=ne(),Zt=le(),B=Be.exports=function(e){ke.call(this),this._parser=new jt(e,{read:this.read.bind(this),error:this._handleError.bind(this),metadata:this._handleMetaData.bind(this),gamma:this.emit.bind(this,"gamma"),palette:this._handlePalette.bind(this),transColor:this._handleTransColor.bind(this),finished:this._finished.bind(this),inflateData:this._inflateData.bind(this),simpleTransparency:this._simpleTransparency.bind(this),headersFinished:this._headersFinished.bind(this)}),this._options=e,this.writable=!0,this._parser.start()};Ft.inherits(B,ke);B.prototype._handleError=function(e){this.emit("error",e),this.writable=!1,this.destroy(),this._inflate&&this._inflate.destroy&&this._inflate.destroy(),this._filter&&(this._filter.destroy(),this._filter.on("error",function(){})),this.errord=!0};B.prototype._inflateData=function(e){if(!this._inflate)if(this._bitmapInfo.interlace)this._inflate=se.createInflate(),this._inflate.on("error",this.emit.bind(this,"error")),this._filter.on("complete",this._complete.bind(this)),this._inflate.pipe(this._filter);else{let r=((this._bitmapInfo.width*this._bitmapInfo.bpp*this._bitmapInfo.depth+7>>3)+1)*this._bitmapInfo.height,i=Math.max(r,se.Z_MIN_CHUNK);this._inflate=se.createInflate({chunkSize:i});let n=r,l=this.emit.bind(this,"error");this._inflate.on("error",function(o){n&&l(o)}),this._filter.on("complete",this._complete.bind(this));let s=this._filter.write.bind(this._filter);this._inflate.on("data",function(o){n&&(o.length>n&&(o=o.slice(0,n)),n-=o.length,s(o))}),this._inflate.on("end",this._filter.end.bind(this._filter))}this._inflate.write(e)};B.prototype._handleMetaData=function(e){this._metaData=e,this._bitmapInfo=Object.create(e),this._filter=new zt(this._bitmapInfo)};B.prototype._handleTransColor=function(e){this._bitmapInfo.transColor=e};B.prototype._handlePalette=function(e){this._bitmapInfo.palette=e};B.prototype._simpleTransparency=function(){this._metaData.alpha=!0};B.prototype._headersFinished=function(){this.emit("metadata",this._metaData)};B.prototype._finished=function(){this.errord||(this._inflate?this._inflate.end():this.emit("error","No Inflate block"))};B.prototype._complete=function(e){if(this.errord)return;let t;try{let r=Vt.dataToBitMap(e,this._bitmapInfo);t=Zt(r,this._bitmapInfo,this._options.skipRescale),r=null}catch(r){this._handleError(r);return}this.emit("parsed",t)}});var Me=b((Vr,xe)=>{"use strict";var R=Y();xe.exports=function(e,t,r,i){let n=[R.COLORTYPE_COLOR_ALPHA,R.COLORTYPE_ALPHA].indexOf(i.colorType)!==-1;if(i.colorType===i.inputColorType){let _=(function(){let m=new ArrayBuffer(2);return new DataView(m).setInt16(0,256,!0),new Int16Array(m)[0]!==256})();if(i.bitDepth===8||i.bitDepth===16&&_)return e}let l=i.bitDepth!==16?e:new Uint16Array(e.buffer),s=255,o=R.COLORTYPE_TO_BPP_MAP[i.inputColorType];o===4&&!i.inputHasAlpha&&(o=3);let h=R.COLORTYPE_TO_BPP_MAP[i.colorType];i.bitDepth===16&&(s=65535,h*=2);let f=Buffer.alloc(t*r*h),a=0,u=0,c=i.bgColor||{};c.red===void 0&&(c.red=s),c.green===void 0&&(c.green=s),c.blue===void 0&&(c.blue=s);function d(){let _,m,p,g=s;switch(i.inputColorType){case R.COLORTYPE_COLOR_ALPHA:g=l[a+3],_=l[a],m=l[a+1],p=l[a+2];break;case R.COLORTYPE_COLOR:_=l[a],m=l[a+1],p=l[a+2];break;case R.COLORTYPE_ALPHA:g=l[a+1],_=l[a],m=_,p=_;break;case R.COLORTYPE_GRAYSCALE:_=l[a],m=_,p=_;break;default:throw new Error("input color type:"+i.inputColorType+" is not supported at present")}return i.inputHasAlpha&&(n||(g/=s,_=Math.min(Math.max(Math.round((1-g)*c.red+g*_),0),s),m=Math.min(Math.max(Math.round((1-g)*c.green+g*m),0),s),p=Math.min(Math.max(Math.round((1-g)*c.blue+g*p),0),s))),{red:_,green:m,blue:p,alpha:g}}for(let _=0;_<r;_++)for(let m=0;m<t;m++){let p=d(l,a);switch(i.colorType){case R.COLORTYPE_COLOR_ALPHA:case R.COLORTYPE_COLOR:i.bitDepth===8?(f[u]=p.red,f[u+1]=p.green,f[u+2]=p.blue,n&&(f[u+3]=p.alpha)):(f.writeUInt16BE(p.red,u),f.writeUInt16BE(p.green,u+2),f.writeUInt16BE(p.blue,u+4),n&&f.writeUInt16BE(p.alpha,u+6));break;case R.COLORTYPE_ALPHA:case R.COLORTYPE_GRAYSCALE:{let g=(p.red+p.green+p.blue)/3;i.bitDepth===8?(f[u]=g,n&&(f[u+1]=p.alpha)):(f.writeUInt16BE(g,u),n&&f.writeUInt16BE(p.alpha,u+2));break}default:throw new Error("unrecognised color Type "+i.colorType)}a+=o,u+=h}return f}});var qe=b((Zr,Ne)=>{"use strict";var De=Q();function Wt(e,t,r,i,n){for(let l=0;l<r;l++)i[n+l]=e[t+l]}function Kt(e,t,r){let i=0,n=t+r;for(let l=t;l<n;l++)i+=Math.abs(e[l]);return i}function Xt(e,t,r,i,n,l){for(let s=0;s<r;s++){let o=s>=l?e[t+s-l]:0,h=e[t+s]-o;i[n+s]=h}}function Jt(e,t,r,i){let n=0;for(let l=0;l<r;l++){let s=l>=i?e[t+l-i]:0,o=e[t+l]-s;n+=Math.abs(o)}return n}function Qt(e,t,r,i,n){for(let l=0;l<r;l++){let s=t>0?e[t+l-r]:0,o=e[t+l]-s;i[n+l]=o}}function $t(e,t,r){let i=0,n=t+r;for(let l=t;l<n;l++){let s=t>0?e[l-r]:0,o=e[l]-s;i+=Math.abs(o)}return i}function er(e,t,r,i,n,l){for(let s=0;s<r;s++){let o=s>=l?e[t+s-l]:0,h=t>0?e[t+s-r]:0,f=e[t+s]-(o+h>>1);i[n+s]=f}}function tr(e,t,r,i){let n=0;for(let l=0;l<r;l++){let s=l>=i?e[t+l-i]:0,o=t>0?e[t+l-r]:0,h=e[t+l]-(s+o>>1);n+=Math.abs(h)}return n}function rr(e,t,r,i,n,l){for(let s=0;s<r;s++){let o=s>=l?e[t+s-l]:0,h=t>0?e[t+s-r]:0,f=t>0&&s>=l?e[t+s-(r+l)]:0,a=e[t+s]-De(o,h,f);i[n+s]=a}}function ir(e,t,r,i){let n=0;for(let l=0;l<r;l++){let s=l>=i?e[t+l-i]:0,o=t>0?e[t+l-r]:0,h=t>0&&l>=i?e[t+l-(r+i)]:0,f=e[t+l]-De(s,o,h);n+=Math.abs(f)}return n}var nr={0:Wt,1:Xt,2:Qt,3:er,4:rr},lr={0:Kt,1:Jt,2:$t,3:tr,4:ir};Ne.exports=function(e,t,r,i,n){let l;if(!("filterType"in i)||i.filterType===-1)l=[0,1,2,3,4];else if(typeof i.filterType=="number")l=[i.filterType];else throw new Error("unrecognised filter types");i.bitDepth===16&&(n*=2);let s=t*n,o=0,h=0,f=Buffer.alloc((s+1)*r),a=l[0];for(let u=0;u<r;u++){if(l.length>1){let c=1/0;for(let d=0;d<l.length;d++){let _=lr[l[d]](e,h,s,n);_<c&&(a=l[d],c=_)}}f[o]=a,o++,nr[a](e,h,s,f,o,n),o+=s,h+=s}return f}});var oe=b((Wr,Ye)=>{"use strict";var T=Y(),sr=re(),or=Me(),hr=qe(),fr=E("zlib"),x=Ye.exports=function(e){if(this._options=e,e.deflateChunkSize=e.deflateChunkSize||32*1024,e.deflateLevel=e.deflateLevel!=null?e.deflateLevel:9,e.deflateStrategy=e.deflateStrategy!=null?e.deflateStrategy:3,e.inputHasAlpha=e.inputHasAlpha!=null?e.inputHasAlpha:!0,e.deflateFactory=e.deflateFactory||fr.createDeflate,e.bitDepth=e.bitDepth||8,e.colorType=typeof e.colorType=="number"?e.colorType:T.COLORTYPE_COLOR_ALPHA,e.inputColorType=typeof e.inputColorType=="number"?e.inputColorType:T.COLORTYPE_COLOR_ALPHA,[T.COLORTYPE_GRAYSCALE,T.COLORTYPE_COLOR,T.COLORTYPE_COLOR_ALPHA,T.COLORTYPE_ALPHA].indexOf(e.colorType)===-1)throw new Error("option color type:"+e.colorType+" is not supported at present");if([T.COLORTYPE_GRAYSCALE,T.COLORTYPE_COLOR,T.COLORTYPE_COLOR_ALPHA,T.COLORTYPE_ALPHA].indexOf(e.inputColorType)===-1)throw new Error("option input color type:"+e.inputColorType+" is not supported at present");if(e.bitDepth!==8&&e.bitDepth!==16)throw new Error("option bit depth:"+e.bitDepth+" is not supported at present")};x.prototype.getDeflateOptions=function(){return{chunkSize:this._options.deflateChunkSize,level:this._options.deflateLevel,strategy:this._options.deflateStrategy}};x.prototype.createDeflate=function(){return this._options.deflateFactory(this.getDeflateOptions())};x.prototype.filterData=function(e,t,r){let i=or(e,t,r,this._options),n=T.COLORTYPE_TO_BPP_MAP[this._options.colorType];return hr(i,t,r,this._options,n)};x.prototype._packChunk=function(e,t){let r=t?t.length:0,i=Buffer.alloc(r+12);return i.writeUInt32BE(r,0),i.writeUInt32BE(e,4),t&&t.copy(i,8),i.writeInt32BE(sr.crc32(i.slice(4,i.length-4)),i.length-4),i};x.prototype.packGAMA=function(e){let t=Buffer.alloc(4);return t.writeUInt32BE(Math.floor(e*T.GAMMA_DIVISION),0),this._packChunk(T.TYPE_gAMA,t)};x.prototype.packIHDR=function(e,t){let r=Buffer.alloc(13);return r.writeUInt32BE(e,0),r.writeUInt32BE(t,4),r[8]=this._options.bitDepth,r[9]=this._options.colorType,r[10]=0,r[11]=0,r[12]=0,this._packChunk(T.TYPE_IHDR,r)};x.prototype.packIDAT=function(e){return this._packChunk(T.TYPE_IDAT,e)};x.prototype.packIEND=function(){return this._packChunk(T.TYPE_IEND,null)}});var He=b((Kr,Ge)=>{"use strict";var ar=E("util"),Ue=E("stream"),ur=Y(),cr=oe(),ve=Ge.exports=function(e){Ue.call(this);let t=e||{};this._packer=new cr(t),this._deflate=this._packer.createDeflate(),this.readable=!0};ar.inherits(ve,Ue);ve.prototype.pack=function(e,t,r,i){this.emit("data",Buffer.from(ur.PNG_SIGNATURE)),this.emit("data",this._packer.packIHDR(t,r)),i&&this.emit("data",this._packer.packGAMA(i));let n=this._packer.filterData(e,t,r);this._deflate.on("error",this.emit.bind(this,"error")),this._deflate.on("data",function(l){this.emit("data",this._packer.packIDAT(l))}.bind(this)),this._deflate.on("end",function(){this.emit("data",this._packer.packIEND()),this.emit("end")}.bind(this)),this._deflate.end(n)}});var We=b((H,Ze)=>{"use strict";var Fe=E("assert").ok,U=E("zlib"),pr=E("util"),ze=E("buffer").kMaxLength;function M(e){if(!(this instanceof M))return new M(e);e&&e.chunkSize<U.Z_MIN_CHUNK&&(e.chunkSize=U.Z_MIN_CHUNK),U.Inflate.call(this,e),this._offset=this._offset===void 0?this._outOffset:this._offset,this._buffer=this._buffer||this._outBuffer,e&&e.maxLength!=null&&(this._maxLength=e.maxLength)}function dr(e){return new M(e)}function je(e,t){t&&process.nextTick(t),e._handle&&(e._handle.close(),e._handle=null)}M.prototype._processChunk=function(e,t,r){if(typeof r=="function")return U.Inflate._processChunk.call(this,e,t,r);let i=this,n=e&&e.length,l=this._chunkSize-this._offset,s=this._maxLength,o=0,h=[],f=0,a;this.on("error",function(_){a=_});function u(_,m){if(i._hadError)return;let p=l-m;if(Fe(p>=0,"have should not go down"),p>0){let g=i._buffer.slice(i._offset,i._offset+p);if(i._offset+=p,g.length>s&&(g=g.slice(0,s)),h.push(g),f+=g.length,s-=g.length,s===0)return!1}return(m===0||i._offset>=i._chunkSize)&&(l=i._chunkSize,i._offset=0,i._buffer=Buffer.allocUnsafe(i._chunkSize)),m===0?(o+=n-_,n=_,!0):!1}Fe(this._handle,"zlib binding closed");let c;do c=this._handle.writeSync(t,e,o,n,this._buffer,this._offset,l),c=c||this._writeState;while(!this._hadError&&u(c[0],c[1]));if(this._hadError)throw a;if(f>=ze)throw je(this),new RangeError("Cannot create final Buffer. It would be larger than 0x"+ze.toString(16)+" bytes");let d=Buffer.concat(h,f);return je(this),d};pr.inherits(M,U.Inflate);function _r(e,t){if(typeof t=="string"&&(t=Buffer.from(t)),!(t instanceof Buffer))throw new TypeError("Not a string or buffer");let r=e._finishFlushFlag;return r==null&&(r=U.Z_FINISH),e._processChunk(t,r)}function Ve(e,t){return _r(new M(t),e)}Ze.exports=H=Ve;H.Inflate=M;H.createInflate=dr;H.inflateSync=Ve});var he=b((Xr,Xe)=>{"use strict";var Ke=Xe.exports=function(e){this._buffer=e,this._reads=[]};Ke.prototype.read=function(e,t){this._reads.push({length:Math.abs(e),allowLess:e<0,func:t})};Ke.prototype.process=function(){for(;this._reads.length>0&&this._buffer.length;){let e=this._reads[0];if(this._buffer.length&&(this._buffer.length>=e.length||e.allowLess)){this._reads.shift();let t=this._buffer;this._buffer=t.slice(e.length),e.func.call(this,t.slice(0,e.length))}else break}if(this._reads.length>0)throw new Error("There are some read requests waitng on finished stream");if(this._buffer.length>0)throw new Error("unrecognised content at end of stream")}});var Qe=b(Je=>{"use strict";var mr=he(),gr=$();Je.process=function(e,t){let r=[],i=new mr(e);return new gr(t,{read:i.read.bind(i),write:function(l){r.push(l)},complete:function(){}}).start(),i.process(),Buffer.concat(r)}});var rt=b((Qr,tt)=>{"use strict";var $e=!0,et=E("zlib"),yr=We();et.deflateSync||($e=!1);var br=he(),Cr=Qe(),wr=ie(),Er=ne(),Tr=le();tt.exports=function(e,t){if(!$e)throw new Error("To use the sync capability of this library in old node versions, please pin pngjs to v2.3.0");let r;function i(y){r=y}let n;function l(y){n=y}function s(y){n.transColor=y}function o(y){n.palette=y}function h(){n.alpha=!0}let f;function a(y){f=y}let u=[];function c(y){u.push(y)}let d=new br(e);if(new wr(t,{read:d.read.bind(d),error:i,metadata:l,gamma:a,palette:o,transColor:s,inflateData:c,simpleTransparency:h}).start(),d.process(),r)throw r;let m=Buffer.concat(u);u.length=0;let p;if(n.interlace)p=et.inflateSync(m);else{let O=((n.width*n.bpp*n.depth+7>>3)+1)*n.height;p=yr(m,{chunkSize:O,maxLength:O})}if(m=null,!p||!p.length)throw new Error("bad png - invalid inflate data response");let g=Cr.process(p,n);m=null;let I=Er.dataToBitMap(g,n);g=null;let P=Tr(I,n,t.skipRescale);return n.data=P,n.gamma=f||0,n}});var st=b(($r,lt)=>{"use strict";var it=!0,nt=E("zlib");nt.deflateSync||(it=!1);var Pr=Y(),Ar=oe();lt.exports=function(e,t){if(!it)throw new Error("To use the sync capability of this library in old node versions, please pin pngjs to v2.3.0");let r=t||{},i=new Ar(r),n=[];n.push(Buffer.from(Pr.PNG_SIGNATURE)),n.push(i.packIHDR(e.width,e.height)),e.gamma&&n.push(i.packGAMA(e.gamma));let l=i.filterData(e.data,e.width,e.height),s=nt.deflateSync(l,i.getDeflateOptions());if(l=null,!s||!s.length)throw new Error("bad png - invalid compressed data response");return n.push(i.packIDAT(s)),n.push(i.packIEND()),Buffer.concat(n)}});var ot=b(fe=>{"use strict";var Or=rt(),Lr=st();fe.read=function(e,t){return Or(e,t||{})};fe.write=function(e,t){return Lr(e,t)}});var F=b(ft=>{"use strict";var Ir=E("util"),ht=E("stream"),Rr=Se(),kr=He(),Br=ot(),A=ft.PNG=function(e){ht.call(this),e=e||{},this.width=e.width|0,this.height=e.height|0,this.data=this.width>0&&this.height>0?Buffer.alloc(4*this.width*this.height):null,e.fill&&this.data&&this.data.fill(0),this.gamma=0,this.readable=this.writable=!0,this._parser=new Rr(e),this._parser.on("error",this.emit.bind(this,"error")),this._parser.on("close",this._handleClose.bind(this)),this._parser.on("metadata",this._metadata.bind(this)),this._parser.on("gamma",this._gamma.bind(this)),this._parser.on("parsed",function(t){this.data=t,this.emit("parsed",t)}.bind(this)),this._packer=new kr(e),this._packer.on("data",this.emit.bind(this,"data")),this._packer.on("end",this.emit.bind(this,"end")),this._parser.on("close",this._handleClose.bind(this)),this._packer.on("error",this.emit.bind(this,"error"))};Ir.inherits(A,ht);A.sync=Br;A.prototype.pack=function(){return!this.data||!this.data.length?(this.emit("error","No data provided"),this):(process.nextTick(function(){this._packer.pack(this.data,this.width,this.height,this.gamma)}.bind(this)),this)};A.prototype.parse=function(e,t){if(t){let r,i;r=function(n){this.removeListener("error",i),this.data=n,t(null,this)}.bind(this),i=function(n){this.removeListener("parsed",r),t(n,null)}.bind(this),this.once("parsed",r),this.once("error",i)}return this.end(e),this};A.prototype.write=function(e){return this._parser.write(e),!0};A.prototype.end=function(e){this._parser.end(e)};A.prototype._metadata=function(e){this.width=e.width,this.height=e.height,this.emit("metadata",e)};A.prototype._gamma=function(e){this.gamma=e};A.prototype._handleClose=function(){!this._parser.writable&&!this._packer.readable&&this.emit("close")};A.bitblt=function(e,t,r,i,n,l,s,o){if(r|=0,i|=0,n|=0,l|=0,s|=0,o|=0,r>e.width||i>e.height||r+n>e.width||i+l>e.height)throw new Error("bitblt reading outside image");if(s>t.width||o>t.height||s+n>t.width||o+l>t.height)throw new Error("bitblt writing outside image");for(let h=0;h<l;h++)e.data.copy(t.data,(o+h)*t.width+s<<2,(i+h)*e.width+r<<2,(i+h)*e.width+r+n<<2)};A.prototype.bitblt=function(e,t,r,i,n,l,s){return A.bitblt(this,e,t,r,i,n,l,s),this};A.adjustGamma=function(e){if(e.gamma){for(let t=0;t<e.height;t++)for(let r=0;r<e.width;r++){let i=e.width*t+r<<2;for(let n=0;n<3;n++){let l=e.data[i+n]/255;l=Math.pow(l,1/2.2/e.gamma),e.data[i+n]=Math.round(l*255)}}e.gamma=0}};A.prototype.adjustGamma=function(){A.adjustGamma(this)}});var gt=W(F());import{getDocument as mt}from"pdfjs-dist/legacy/build/pdf.mjs";var at=W(F());import{createCanvas as Sr}from"@napi-rs/canvas";async function ae({pdf:e,scale:t}){let{numPages:r}=e,i=Array.from({length:r},(l,s)=>s+1);return await Promise.all(i.map(async l=>{let s=await e.getPage(l),o=s.getViewport({scale:t}),h=Sr(o.width,o.height),f=h.getContext("2d");await s.render({viewport:o,canvas:h,canvasContext:f}).promise;let a=h.toBuffer("image/png");return at.PNG.sync.read(a)}))}function ce(e,t,r,i,n,l={}){let{threshold:s=.1,alpha:o=.1,aaColor:h=[255,255,0],diffColor:f=[255,0,0],includeAA:a,diffColorAlt:u,diffMask:c}=l;if(!ue(e)||!ue(t)||r&&!ue(r))throw new Error("Image data: Uint8Array, Uint8ClampedArray or Buffer expected.");if(e.length!==t.length||r&&r.length!==e.length)throw new Error("Image sizes do not match.");if(e.length!==i*n*4)throw new Error("Image data size does not match width/height.");let d=i*n,_=new Uint32Array(e.buffer,e.byteOffset,d),m=new Uint32Array(t.buffer,t.byteOffset,d),p=!0;for(let L=0;L<d;L++)if(_[L]!==m[L]){p=!1;break}if(p){if(r&&!c)for(let L=0;L<d;L++)ct(e,4*L,o,r);return 0}let g=35215*s*s,[I,P,y]=h,[O,D,v]=f,[V,bt,Ct]=u||f,pe=0;for(let L=0;L<n;L++)for(let G=0;G<i;G++){let Z=L*i+G,N=Z*4,de=_[Z]===m[Z]?0:pt(e,t,N,N,!1);if(Math.abs(de)>g){let wt=ut(e,G,L,i,n,_,m)||ut(t,G,L,i,n,m,_);!a&&wt?r&&!c&&j(r,N,I,P,y):(r&&(de<0?j(r,N,V,bt,Ct):j(r,N,O,D,v)),pe++)}else r&&!c&&ct(e,N,o,r)}return pe}function ue(e){return ArrayBuffer.isView(e)&&e.BYTES_PER_ELEMENT===1}function ut(e,t,r,i,n,l,s){let o=Math.max(t-1,0),h=Math.max(r-1,0),f=Math.min(t+1,i-1),a=Math.min(r+1,n-1),u=r*i+t,c=t===o||t===f||r===h||r===a?1:0,d=0,_=0,m=0,p=0,g=0,I=0;for(let P=o;P<=f;P++)for(let y=h;y<=a;y++){if(P===t&&y===r)continue;let O=pt(e,e,u*4,(y*i+P)*4,!0);if(O===0){if(c++,c>2)return!1}else O<d?(d=O,m=P,p=y):O>_&&(_=O,g=P,I=y)}return d===0||_===0?!1:z(l,m,p,i,n)&&z(s,m,p,i,n)||z(l,g,I,i,n)&&z(s,g,I,i,n)}function z(e,t,r,i,n){let l=Math.max(t-1,0),s=Math.max(r-1,0),o=Math.min(t+1,i-1),h=Math.min(r+1,n-1),f=e[r*i+t],a=t===l||t===o||r===s||r===h?1:0;for(let u=l;u<=o;u++)for(let c=s;c<=h;c++)if(!(u===t&&c===r)&&(a+=+(f===e[c*i+u]),a>2))return!0;return!1}function pt(e,t,r,i,n){let l=e[r],s=e[r+1],o=e[r+2],h=e[r+3],f=t[i],a=t[i+1],u=t[i+2],c=t[i+3],d=l-f,_=s-a,m=o-u,p=h-c;if(!d&&!_&&!m&&!p)return 0;if(h<255||c<255){let O=48+159*(r%2),D=48+159*((r/1.618033988749895|0)%2),v=48+159*((r/2.618033988749895|0)%2);d=(l*h-f*c-O*p)/255,_=(s*h-a*c-D*p)/255,m=(o*h-u*c-v*p)/255}let g=d*.29889531+_*.58662247+m*.11448223;if(n)return g;let I=d*.59597799-_*.2741761-m*.32180189,P=d*.21147017-_*.52261711+m*.31114694,y=.5053*g*g+.299*I*I+.1957*P*P;return g>0?-y:y}function j(e,t,r,i,n){e[t+0]=r,e[t+1]=i,e[t+2]=n,e[t+3]=255}function ct(e,t,r,i){let n=255+(e[t]*.29889531+e[t+1]*.58662247+e[t+2]*.11448223-255)*r*e[t+3]/255;j(i,t,n,n,n)}var dt=W(F());function _t({png1:e,png2:t,threshold:r,antiAliasing:i,alpha:n,antiLiasingColor:l,diffColor:s,diffColorAlt:o,diffMask:h}){let{width:f,height:a}=e,u=new dt.PNG({width:f,height:a});return ce(e.data,t.data,u.data,f,a,{threshold:r,includeAA:i,alpha:n,aaColor:l,diffColor:s,diffColorAlt:o,diffMask:h})<=0?{equal:!0}:{equal:!1,diffPng:u}}var yt={pngScale:1,considerAntiAliasing:!1,includeDiffMask:!1,diffThreshold:.1,diffAlpha:.1,diffAntiAliasingColor:[255,255,0],diffColor:[255,0,0],diffColorAlt:[255,0,0]};async function xr(e,t,r){let{pngScale:i,considerAntiAliasing:n,includeDiffMask:l,diffThreshold:s,diffAlpha:o,diffAntiAliasingColor:h,diffColor:f,diffColorAlt:a}={...yt,...r},u=Uint8Array.from(e),c=Uint8Array.from(t),d=await mt({data:u}).promise,_=await mt({data:c}).promise,m=await ae({pdf:d,scale:i}),p=await ae({pdf:_,scale:i}),g=m.flatMap((P,y)=>{let O=y+1,D=p[y];if(!D)return[];let{equal:v,diffPng:V}=_t({png1:P,png2:D,threshold:s,antiAliasing:n,alpha:o,antiLiasingColor:h,diffColor:f,diffColorAlt:a,diffMask:l});return v?[]:{pageNumber:O,diffPng:gt.PNG.sync.write(V)}}),I=m.length!==p.length;return g.length>0||I?{equal:!1,diffs:g,diffPageCount:I}:{equal:!0}}export{yt as DEFAULT_COMPARE_PDFS_OPTIONS,xr as comparePdfs};
2
+ //# sourceMappingURL=index.mjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../node_modules/pngjs/lib/chunkstream.js", "../../node_modules/pngjs/lib/interlace.js", "../../node_modules/pngjs/lib/paeth-predictor.js", "../../node_modules/pngjs/lib/filter-parse.js", "../../node_modules/pngjs/lib/filter-parse-async.js", "../../node_modules/pngjs/lib/constants.js", "../../node_modules/pngjs/lib/crc.js", "../../node_modules/pngjs/lib/parser.js", "../../node_modules/pngjs/lib/bitmapper.js", "../../node_modules/pngjs/lib/format-normaliser.js", "../../node_modules/pngjs/lib/parser-async.js", "../../node_modules/pngjs/lib/bitpacker.js", "../../node_modules/pngjs/lib/filter-pack.js", "../../node_modules/pngjs/lib/packer.js", "../../node_modules/pngjs/lib/packer-async.js", "../../node_modules/pngjs/lib/sync-inflate.js", "../../node_modules/pngjs/lib/sync-reader.js", "../../node_modules/pngjs/lib/filter-parse-sync.js", "../../node_modules/pngjs/lib/parser-sync.js", "../../node_modules/pngjs/lib/packer-sync.js", "../../node_modules/pngjs/lib/png-sync.js", "../../node_modules/pngjs/lib/png.js", "../../src/functions/comparePdfs.ts", "../../src/functions/convertPdfToPngs.ts", "../../node_modules/pixelmatch/index.js", "../../src/functions/comparePngs.ts"],
4
+ "sourcesContent": ["\"use strict\";\n\nlet util = require(\"util\");\nlet Stream = require(\"stream\");\n\nlet ChunkStream = (module.exports = function () {\n Stream.call(this);\n\n this._buffers = [];\n this._buffered = 0;\n\n this._reads = [];\n this._paused = false;\n\n this._encoding = \"utf8\";\n this.writable = true;\n});\nutil.inherits(ChunkStream, Stream);\n\nChunkStream.prototype.read = function (length, callback) {\n this._reads.push({\n length: Math.abs(length), // if length < 0 then at most this length\n allowLess: length < 0,\n func: callback,\n });\n\n process.nextTick(\n function () {\n this._process();\n\n // its paused and there is not enought data then ask for more\n if (this._paused && this._reads && this._reads.length > 0) {\n this._paused = false;\n\n this.emit(\"drain\");\n }\n }.bind(this)\n );\n};\n\nChunkStream.prototype.write = function (data, encoding) {\n if (!this.writable) {\n this.emit(\"error\", new Error(\"Stream not writable\"));\n return false;\n }\n\n let dataBuffer;\n if (Buffer.isBuffer(data)) {\n dataBuffer = data;\n } else {\n dataBuffer = Buffer.from(data, encoding || this._encoding);\n }\n\n this._buffers.push(dataBuffer);\n this._buffered += dataBuffer.length;\n\n this._process();\n\n // ok if there are no more read requests\n if (this._reads && this._reads.length === 0) {\n this._paused = true;\n }\n\n return this.writable && !this._paused;\n};\n\nChunkStream.prototype.end = function (data, encoding) {\n if (data) {\n this.write(data, encoding);\n }\n\n this.writable = false;\n\n // already destroyed\n if (!this._buffers) {\n return;\n }\n\n // enqueue or handle end\n if (this._buffers.length === 0) {\n this._end();\n } else {\n this._buffers.push(null);\n this._process();\n }\n};\n\nChunkStream.prototype.destroySoon = ChunkStream.prototype.end;\n\nChunkStream.prototype._end = function () {\n if (this._reads.length > 0) {\n this.emit(\"error\", new Error(\"Unexpected end of input\"));\n }\n\n this.destroy();\n};\n\nChunkStream.prototype.destroy = function () {\n if (!this._buffers) {\n return;\n }\n\n this.writable = false;\n this._reads = null;\n this._buffers = null;\n\n this.emit(\"close\");\n};\n\nChunkStream.prototype._processReadAllowingLess = function (read) {\n // ok there is any data so that we can satisfy this request\n this._reads.shift(); // == read\n\n // first we need to peek into first buffer\n let smallerBuf = this._buffers[0];\n\n // ok there is more data than we need\n if (smallerBuf.length > read.length) {\n this._buffered -= read.length;\n this._buffers[0] = smallerBuf.slice(read.length);\n\n read.func.call(this, smallerBuf.slice(0, read.length));\n } else {\n // ok this is less than maximum length so use it all\n this._buffered -= smallerBuf.length;\n this._buffers.shift(); // == smallerBuf\n\n read.func.call(this, smallerBuf);\n }\n};\n\nChunkStream.prototype._processRead = function (read) {\n this._reads.shift(); // == read\n\n let pos = 0;\n let count = 0;\n let data = Buffer.alloc(read.length);\n\n // create buffer for all data\n while (pos < read.length) {\n let buf = this._buffers[count++];\n let len = Math.min(buf.length, read.length - pos);\n\n buf.copy(data, pos, 0, len);\n pos += len;\n\n // last buffer wasn't used all so just slice it and leave\n if (len !== buf.length) {\n this._buffers[--count] = buf.slice(len);\n }\n }\n\n // remove all used buffers\n if (count > 0) {\n this._buffers.splice(0, count);\n }\n\n this._buffered -= read.length;\n\n read.func.call(this, data);\n};\n\nChunkStream.prototype._process = function () {\n try {\n // as long as there is any data and read requests\n while (this._buffered > 0 && this._reads && this._reads.length > 0) {\n let read = this._reads[0];\n\n // read any data (but no more than length)\n if (read.allowLess) {\n this._processReadAllowingLess(read);\n } else if (this._buffered >= read.length) {\n // ok we can meet some expectations\n\n this._processRead(read);\n } else {\n // not enought data to satisfy first request in queue\n // so we need to wait for more\n break;\n }\n }\n\n if (this._buffers && !this.writable) {\n this._end();\n }\n } catch (ex) {\n this.emit(\"error\", ex);\n }\n};\n", "\"use strict\";\n\n// Adam 7\n// 0 1 2 3 4 5 6 7\n// 0 x 6 4 6 x 6 4 6\n// 1 7 7 7 7 7 7 7 7\n// 2 5 6 5 6 5 6 5 6\n// 3 7 7 7 7 7 7 7 7\n// 4 3 6 4 6 3 6 4 6\n// 5 7 7 7 7 7 7 7 7\n// 6 5 6 5 6 5 6 5 6\n// 7 7 7 7 7 7 7 7 7\n\nlet imagePasses = [\n {\n // pass 1 - 1px\n x: [0],\n y: [0],\n },\n {\n // pass 2 - 1px\n x: [4],\n y: [0],\n },\n {\n // pass 3 - 2px\n x: [0, 4],\n y: [4],\n },\n {\n // pass 4 - 4px\n x: [2, 6],\n y: [0, 4],\n },\n {\n // pass 5 - 8px\n x: [0, 2, 4, 6],\n y: [2, 6],\n },\n {\n // pass 6 - 16px\n x: [1, 3, 5, 7],\n y: [0, 2, 4, 6],\n },\n {\n // pass 7 - 32px\n x: [0, 1, 2, 3, 4, 5, 6, 7],\n y: [1, 3, 5, 7],\n },\n];\n\nexports.getImagePasses = function (width, height) {\n let images = [];\n let xLeftOver = width % 8;\n let yLeftOver = height % 8;\n let xRepeats = (width - xLeftOver) / 8;\n let yRepeats = (height - yLeftOver) / 8;\n for (let i = 0; i < imagePasses.length; i++) {\n let pass = imagePasses[i];\n let passWidth = xRepeats * pass.x.length;\n let passHeight = yRepeats * pass.y.length;\n for (let j = 0; j < pass.x.length; j++) {\n if (pass.x[j] < xLeftOver) {\n passWidth++;\n } else {\n break;\n }\n }\n for (let j = 0; j < pass.y.length; j++) {\n if (pass.y[j] < yLeftOver) {\n passHeight++;\n } else {\n break;\n }\n }\n if (passWidth > 0 && passHeight > 0) {\n images.push({ width: passWidth, height: passHeight, index: i });\n }\n }\n return images;\n};\n\nexports.getInterlaceIterator = function (width) {\n return function (x, y, pass) {\n let outerXLeftOver = x % imagePasses[pass].x.length;\n let outerX =\n ((x - outerXLeftOver) / imagePasses[pass].x.length) * 8 +\n imagePasses[pass].x[outerXLeftOver];\n let outerYLeftOver = y % imagePasses[pass].y.length;\n let outerY =\n ((y - outerYLeftOver) / imagePasses[pass].y.length) * 8 +\n imagePasses[pass].y[outerYLeftOver];\n return outerX * 4 + outerY * width * 4;\n };\n};\n", "\"use strict\";\n\nmodule.exports = function paethPredictor(left, above, upLeft) {\n let paeth = left + above - upLeft;\n let pLeft = Math.abs(paeth - left);\n let pAbove = Math.abs(paeth - above);\n let pUpLeft = Math.abs(paeth - upLeft);\n\n if (pLeft <= pAbove && pLeft <= pUpLeft) {\n return left;\n }\n if (pAbove <= pUpLeft) {\n return above;\n }\n return upLeft;\n};\n", "\"use strict\";\n\nlet interlaceUtils = require(\"./interlace\");\nlet paethPredictor = require(\"./paeth-predictor\");\n\nfunction getByteWidth(width, bpp, depth) {\n let byteWidth = width * bpp;\n if (depth !== 8) {\n byteWidth = Math.ceil(byteWidth / (8 / depth));\n }\n return byteWidth;\n}\n\nlet Filter = (module.exports = function (bitmapInfo, dependencies) {\n let width = bitmapInfo.width;\n let height = bitmapInfo.height;\n let interlace = bitmapInfo.interlace;\n let bpp = bitmapInfo.bpp;\n let depth = bitmapInfo.depth;\n\n this.read = dependencies.read;\n this.write = dependencies.write;\n this.complete = dependencies.complete;\n\n this._imageIndex = 0;\n this._images = [];\n if (interlace) {\n let passes = interlaceUtils.getImagePasses(width, height);\n for (let i = 0; i < passes.length; i++) {\n this._images.push({\n byteWidth: getByteWidth(passes[i].width, bpp, depth),\n height: passes[i].height,\n lineIndex: 0,\n });\n }\n } else {\n this._images.push({\n byteWidth: getByteWidth(width, bpp, depth),\n height: height,\n lineIndex: 0,\n });\n }\n\n // when filtering the line we look at the pixel to the left\n // the spec also says it is done on a byte level regardless of the number of pixels\n // so if the depth is byte compatible (8 or 16) we subtract the bpp in order to compare back\n // a pixel rather than just a different byte part. However if we are sub byte, we ignore.\n if (depth === 8) {\n this._xComparison = bpp;\n } else if (depth === 16) {\n this._xComparison = bpp * 2;\n } else {\n this._xComparison = 1;\n }\n});\n\nFilter.prototype.start = function () {\n this.read(\n this._images[this._imageIndex].byteWidth + 1,\n this._reverseFilterLine.bind(this)\n );\n};\n\nFilter.prototype._unFilterType1 = function (\n rawData,\n unfilteredLine,\n byteWidth\n) {\n let xComparison = this._xComparison;\n let xBiggerThan = xComparison - 1;\n\n for (let x = 0; x < byteWidth; x++) {\n let rawByte = rawData[1 + x];\n let f1Left = x > xBiggerThan ? unfilteredLine[x - xComparison] : 0;\n unfilteredLine[x] = rawByte + f1Left;\n }\n};\n\nFilter.prototype._unFilterType2 = function (\n rawData,\n unfilteredLine,\n byteWidth\n) {\n let lastLine = this._lastLine;\n\n for (let x = 0; x < byteWidth; x++) {\n let rawByte = rawData[1 + x];\n let f2Up = lastLine ? lastLine[x] : 0;\n unfilteredLine[x] = rawByte + f2Up;\n }\n};\n\nFilter.prototype._unFilterType3 = function (\n rawData,\n unfilteredLine,\n byteWidth\n) {\n let xComparison = this._xComparison;\n let xBiggerThan = xComparison - 1;\n let lastLine = this._lastLine;\n\n for (let x = 0; x < byteWidth; x++) {\n let rawByte = rawData[1 + x];\n let f3Up = lastLine ? lastLine[x] : 0;\n let f3Left = x > xBiggerThan ? unfilteredLine[x - xComparison] : 0;\n let f3Add = Math.floor((f3Left + f3Up) / 2);\n unfilteredLine[x] = rawByte + f3Add;\n }\n};\n\nFilter.prototype._unFilterType4 = function (\n rawData,\n unfilteredLine,\n byteWidth\n) {\n let xComparison = this._xComparison;\n let xBiggerThan = xComparison - 1;\n let lastLine = this._lastLine;\n\n for (let x = 0; x < byteWidth; x++) {\n let rawByte = rawData[1 + x];\n let f4Up = lastLine ? lastLine[x] : 0;\n let f4Left = x > xBiggerThan ? unfilteredLine[x - xComparison] : 0;\n let f4UpLeft = x > xBiggerThan && lastLine ? lastLine[x - xComparison] : 0;\n let f4Add = paethPredictor(f4Left, f4Up, f4UpLeft);\n unfilteredLine[x] = rawByte + f4Add;\n }\n};\n\nFilter.prototype._reverseFilterLine = function (rawData) {\n let filter = rawData[0];\n let unfilteredLine;\n let currentImage = this._images[this._imageIndex];\n let byteWidth = currentImage.byteWidth;\n\n if (filter === 0) {\n unfilteredLine = rawData.slice(1, byteWidth + 1);\n } else {\n unfilteredLine = Buffer.alloc(byteWidth);\n\n switch (filter) {\n case 1:\n this._unFilterType1(rawData, unfilteredLine, byteWidth);\n break;\n case 2:\n this._unFilterType2(rawData, unfilteredLine, byteWidth);\n break;\n case 3:\n this._unFilterType3(rawData, unfilteredLine, byteWidth);\n break;\n case 4:\n this._unFilterType4(rawData, unfilteredLine, byteWidth);\n break;\n default:\n throw new Error(\"Unrecognised filter type - \" + filter);\n }\n }\n\n this.write(unfilteredLine);\n\n currentImage.lineIndex++;\n if (currentImage.lineIndex >= currentImage.height) {\n this._lastLine = null;\n this._imageIndex++;\n currentImage = this._images[this._imageIndex];\n } else {\n this._lastLine = unfilteredLine;\n }\n\n if (currentImage) {\n // read, using the byte width that may be from the new current image\n this.read(currentImage.byteWidth + 1, this._reverseFilterLine.bind(this));\n } else {\n this._lastLine = null;\n this.complete();\n }\n};\n", "\"use strict\";\n\nlet util = require(\"util\");\nlet ChunkStream = require(\"./chunkstream\");\nlet Filter = require(\"./filter-parse\");\n\nlet FilterAsync = (module.exports = function (bitmapInfo) {\n ChunkStream.call(this);\n\n let buffers = [];\n let that = this;\n this._filter = new Filter(bitmapInfo, {\n read: this.read.bind(this),\n write: function (buffer) {\n buffers.push(buffer);\n },\n complete: function () {\n that.emit(\"complete\", Buffer.concat(buffers));\n },\n });\n\n this._filter.start();\n});\nutil.inherits(FilterAsync, ChunkStream);\n", "\"use strict\";\n\nmodule.exports = {\n PNG_SIGNATURE: [0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a],\n\n TYPE_IHDR: 0x49484452,\n TYPE_IEND: 0x49454e44,\n TYPE_IDAT: 0x49444154,\n TYPE_PLTE: 0x504c5445,\n TYPE_tRNS: 0x74524e53, // eslint-disable-line camelcase\n TYPE_gAMA: 0x67414d41, // eslint-disable-line camelcase\n\n // color-type bits\n COLORTYPE_GRAYSCALE: 0,\n COLORTYPE_PALETTE: 1,\n COLORTYPE_COLOR: 2,\n COLORTYPE_ALPHA: 4, // e.g. grayscale and alpha\n\n // color-type combinations\n COLORTYPE_PALETTE_COLOR: 3,\n COLORTYPE_COLOR_ALPHA: 6,\n\n COLORTYPE_TO_BPP_MAP: {\n 0: 1,\n 2: 3,\n 3: 1,\n 4: 2,\n 6: 4,\n },\n\n GAMMA_DIVISION: 100000,\n};\n", "\"use strict\";\n\nlet crcTable = [];\n\n(function () {\n for (let i = 0; i < 256; i++) {\n let currentCrc = i;\n for (let j = 0; j < 8; j++) {\n if (currentCrc & 1) {\n currentCrc = 0xedb88320 ^ (currentCrc >>> 1);\n } else {\n currentCrc = currentCrc >>> 1;\n }\n }\n crcTable[i] = currentCrc;\n }\n})();\n\nlet CrcCalculator = (module.exports = function () {\n this._crc = -1;\n});\n\nCrcCalculator.prototype.write = function (data) {\n for (let i = 0; i < data.length; i++) {\n this._crc = crcTable[(this._crc ^ data[i]) & 0xff] ^ (this._crc >>> 8);\n }\n return true;\n};\n\nCrcCalculator.prototype.crc32 = function () {\n return this._crc ^ -1;\n};\n\nCrcCalculator.crc32 = function (buf) {\n let crc = -1;\n for (let i = 0; i < buf.length; i++) {\n crc = crcTable[(crc ^ buf[i]) & 0xff] ^ (crc >>> 8);\n }\n return crc ^ -1;\n};\n", "\"use strict\";\n\nlet constants = require(\"./constants\");\nlet CrcCalculator = require(\"./crc\");\n\nlet Parser = (module.exports = function (options, dependencies) {\n this._options = options;\n options.checkCRC = options.checkCRC !== false;\n\n this._hasIHDR = false;\n this._hasIEND = false;\n this._emittedHeadersFinished = false;\n\n // input flags/metadata\n this._palette = [];\n this._colorType = 0;\n\n this._chunks = {};\n this._chunks[constants.TYPE_IHDR] = this._handleIHDR.bind(this);\n this._chunks[constants.TYPE_IEND] = this._handleIEND.bind(this);\n this._chunks[constants.TYPE_IDAT] = this._handleIDAT.bind(this);\n this._chunks[constants.TYPE_PLTE] = this._handlePLTE.bind(this);\n this._chunks[constants.TYPE_tRNS] = this._handleTRNS.bind(this);\n this._chunks[constants.TYPE_gAMA] = this._handleGAMA.bind(this);\n\n this.read = dependencies.read;\n this.error = dependencies.error;\n this.metadata = dependencies.metadata;\n this.gamma = dependencies.gamma;\n this.transColor = dependencies.transColor;\n this.palette = dependencies.palette;\n this.parsed = dependencies.parsed;\n this.inflateData = dependencies.inflateData;\n this.finished = dependencies.finished;\n this.simpleTransparency = dependencies.simpleTransparency;\n this.headersFinished = dependencies.headersFinished || function () {};\n});\n\nParser.prototype.start = function () {\n this.read(constants.PNG_SIGNATURE.length, this._parseSignature.bind(this));\n};\n\nParser.prototype._parseSignature = function (data) {\n let signature = constants.PNG_SIGNATURE;\n\n for (let i = 0; i < signature.length; i++) {\n if (data[i] !== signature[i]) {\n this.error(new Error(\"Invalid file signature\"));\n return;\n }\n }\n this.read(8, this._parseChunkBegin.bind(this));\n};\n\nParser.prototype._parseChunkBegin = function (data) {\n // chunk content length\n let length = data.readUInt32BE(0);\n\n // chunk type\n let type = data.readUInt32BE(4);\n let name = \"\";\n for (let i = 4; i < 8; i++) {\n name += String.fromCharCode(data[i]);\n }\n\n //console.log('chunk ', name, length);\n\n // chunk flags\n let ancillary = Boolean(data[4] & 0x20); // or critical\n // priv = Boolean(data[5] & 0x20), // or public\n // safeToCopy = Boolean(data[7] & 0x20); // or unsafe\n\n if (!this._hasIHDR && type !== constants.TYPE_IHDR) {\n this.error(new Error(\"Expected IHDR on beggining\"));\n return;\n }\n\n this._crc = new CrcCalculator();\n this._crc.write(Buffer.from(name));\n\n if (this._chunks[type]) {\n return this._chunks[type](length);\n }\n\n if (!ancillary) {\n this.error(new Error(\"Unsupported critical chunk type \" + name));\n return;\n }\n\n this.read(length + 4, this._skipChunk.bind(this));\n};\n\nParser.prototype._skipChunk = function (/*data*/) {\n this.read(8, this._parseChunkBegin.bind(this));\n};\n\nParser.prototype._handleChunkEnd = function () {\n this.read(4, this._parseChunkEnd.bind(this));\n};\n\nParser.prototype._parseChunkEnd = function (data) {\n let fileCrc = data.readInt32BE(0);\n let calcCrc = this._crc.crc32();\n\n // check CRC\n if (this._options.checkCRC && calcCrc !== fileCrc) {\n this.error(new Error(\"Crc error - \" + fileCrc + \" - \" + calcCrc));\n return;\n }\n\n if (!this._hasIEND) {\n this.read(8, this._parseChunkBegin.bind(this));\n }\n};\n\nParser.prototype._handleIHDR = function (length) {\n this.read(length, this._parseIHDR.bind(this));\n};\nParser.prototype._parseIHDR = function (data) {\n this._crc.write(data);\n\n let width = data.readUInt32BE(0);\n let height = data.readUInt32BE(4);\n let depth = data[8];\n let colorType = data[9]; // bits: 1 palette, 2 color, 4 alpha\n let compr = data[10];\n let filter = data[11];\n let interlace = data[12];\n\n // console.log(' width', width, 'height', height,\n // 'depth', depth, 'colorType', colorType,\n // 'compr', compr, 'filter', filter, 'interlace', interlace\n // );\n\n if (\n depth !== 8 &&\n depth !== 4 &&\n depth !== 2 &&\n depth !== 1 &&\n depth !== 16\n ) {\n this.error(new Error(\"Unsupported bit depth \" + depth));\n return;\n }\n if (!(colorType in constants.COLORTYPE_TO_BPP_MAP)) {\n this.error(new Error(\"Unsupported color type\"));\n return;\n }\n if (compr !== 0) {\n this.error(new Error(\"Unsupported compression method\"));\n return;\n }\n if (filter !== 0) {\n this.error(new Error(\"Unsupported filter method\"));\n return;\n }\n if (interlace !== 0 && interlace !== 1) {\n this.error(new Error(\"Unsupported interlace method\"));\n return;\n }\n\n this._colorType = colorType;\n\n let bpp = constants.COLORTYPE_TO_BPP_MAP[this._colorType];\n\n this._hasIHDR = true;\n\n this.metadata({\n width: width,\n height: height,\n depth: depth,\n interlace: Boolean(interlace),\n palette: Boolean(colorType & constants.COLORTYPE_PALETTE),\n color: Boolean(colorType & constants.COLORTYPE_COLOR),\n alpha: Boolean(colorType & constants.COLORTYPE_ALPHA),\n bpp: bpp,\n colorType: colorType,\n });\n\n this._handleChunkEnd();\n};\n\nParser.prototype._handlePLTE = function (length) {\n this.read(length, this._parsePLTE.bind(this));\n};\nParser.prototype._parsePLTE = function (data) {\n this._crc.write(data);\n\n let entries = Math.floor(data.length / 3);\n // console.log('Palette:', entries);\n\n for (let i = 0; i < entries; i++) {\n this._palette.push([data[i * 3], data[i * 3 + 1], data[i * 3 + 2], 0xff]);\n }\n\n this.palette(this._palette);\n\n this._handleChunkEnd();\n};\n\nParser.prototype._handleTRNS = function (length) {\n this.simpleTransparency();\n this.read(length, this._parseTRNS.bind(this));\n};\nParser.prototype._parseTRNS = function (data) {\n this._crc.write(data);\n\n // palette\n if (this._colorType === constants.COLORTYPE_PALETTE_COLOR) {\n if (this._palette.length === 0) {\n this.error(new Error(\"Transparency chunk must be after palette\"));\n return;\n }\n if (data.length > this._palette.length) {\n this.error(new Error(\"More transparent colors than palette size\"));\n return;\n }\n for (let i = 0; i < data.length; i++) {\n this._palette[i][3] = data[i];\n }\n this.palette(this._palette);\n }\n\n // for colorType 0 (grayscale) and 2 (rgb)\n // there might be one gray/color defined as transparent\n if (this._colorType === constants.COLORTYPE_GRAYSCALE) {\n // grey, 2 bytes\n this.transColor([data.readUInt16BE(0)]);\n }\n if (this._colorType === constants.COLORTYPE_COLOR) {\n this.transColor([\n data.readUInt16BE(0),\n data.readUInt16BE(2),\n data.readUInt16BE(4),\n ]);\n }\n\n this._handleChunkEnd();\n};\n\nParser.prototype._handleGAMA = function (length) {\n this.read(length, this._parseGAMA.bind(this));\n};\nParser.prototype._parseGAMA = function (data) {\n this._crc.write(data);\n this.gamma(data.readUInt32BE(0) / constants.GAMMA_DIVISION);\n\n this._handleChunkEnd();\n};\n\nParser.prototype._handleIDAT = function (length) {\n if (!this._emittedHeadersFinished) {\n this._emittedHeadersFinished = true;\n this.headersFinished();\n }\n this.read(-length, this._parseIDAT.bind(this, length));\n};\nParser.prototype._parseIDAT = function (length, data) {\n this._crc.write(data);\n\n if (\n this._colorType === constants.COLORTYPE_PALETTE_COLOR &&\n this._palette.length === 0\n ) {\n throw new Error(\"Expected palette not found\");\n }\n\n this.inflateData(data);\n let leftOverLength = length - data.length;\n\n if (leftOverLength > 0) {\n this._handleIDAT(leftOverLength);\n } else {\n this._handleChunkEnd();\n }\n};\n\nParser.prototype._handleIEND = function (length) {\n this.read(length, this._parseIEND.bind(this));\n};\nParser.prototype._parseIEND = function (data) {\n this._crc.write(data);\n\n this._hasIEND = true;\n this._handleChunkEnd();\n\n if (this.finished) {\n this.finished();\n }\n};\n", "\"use strict\";\n\nlet interlaceUtils = require(\"./interlace\");\n\nlet pixelBppMapper = [\n // 0 - dummy entry\n function () {},\n\n // 1 - L\n // 0: 0, 1: 0, 2: 0, 3: 0xff\n function (pxData, data, pxPos, rawPos) {\n if (rawPos === data.length) {\n throw new Error(\"Ran out of data\");\n }\n\n let pixel = data[rawPos];\n pxData[pxPos] = pixel;\n pxData[pxPos + 1] = pixel;\n pxData[pxPos + 2] = pixel;\n pxData[pxPos + 3] = 0xff;\n },\n\n // 2 - LA\n // 0: 0, 1: 0, 2: 0, 3: 1\n function (pxData, data, pxPos, rawPos) {\n if (rawPos + 1 >= data.length) {\n throw new Error(\"Ran out of data\");\n }\n\n let pixel = data[rawPos];\n pxData[pxPos] = pixel;\n pxData[pxPos + 1] = pixel;\n pxData[pxPos + 2] = pixel;\n pxData[pxPos + 3] = data[rawPos + 1];\n },\n\n // 3 - RGB\n // 0: 0, 1: 1, 2: 2, 3: 0xff\n function (pxData, data, pxPos, rawPos) {\n if (rawPos + 2 >= data.length) {\n throw new Error(\"Ran out of data\");\n }\n\n pxData[pxPos] = data[rawPos];\n pxData[pxPos + 1] = data[rawPos + 1];\n pxData[pxPos + 2] = data[rawPos + 2];\n pxData[pxPos + 3] = 0xff;\n },\n\n // 4 - RGBA\n // 0: 0, 1: 1, 2: 2, 3: 3\n function (pxData, data, pxPos, rawPos) {\n if (rawPos + 3 >= data.length) {\n throw new Error(\"Ran out of data\");\n }\n\n pxData[pxPos] = data[rawPos];\n pxData[pxPos + 1] = data[rawPos + 1];\n pxData[pxPos + 2] = data[rawPos + 2];\n pxData[pxPos + 3] = data[rawPos + 3];\n },\n];\n\nlet pixelBppCustomMapper = [\n // 0 - dummy entry\n function () {},\n\n // 1 - L\n // 0: 0, 1: 0, 2: 0, 3: 0xff\n function (pxData, pixelData, pxPos, maxBit) {\n let pixel = pixelData[0];\n pxData[pxPos] = pixel;\n pxData[pxPos + 1] = pixel;\n pxData[pxPos + 2] = pixel;\n pxData[pxPos + 3] = maxBit;\n },\n\n // 2 - LA\n // 0: 0, 1: 0, 2: 0, 3: 1\n function (pxData, pixelData, pxPos) {\n let pixel = pixelData[0];\n pxData[pxPos] = pixel;\n pxData[pxPos + 1] = pixel;\n pxData[pxPos + 2] = pixel;\n pxData[pxPos + 3] = pixelData[1];\n },\n\n // 3 - RGB\n // 0: 0, 1: 1, 2: 2, 3: 0xff\n function (pxData, pixelData, pxPos, maxBit) {\n pxData[pxPos] = pixelData[0];\n pxData[pxPos + 1] = pixelData[1];\n pxData[pxPos + 2] = pixelData[2];\n pxData[pxPos + 3] = maxBit;\n },\n\n // 4 - RGBA\n // 0: 0, 1: 1, 2: 2, 3: 3\n function (pxData, pixelData, pxPos) {\n pxData[pxPos] = pixelData[0];\n pxData[pxPos + 1] = pixelData[1];\n pxData[pxPos + 2] = pixelData[2];\n pxData[pxPos + 3] = pixelData[3];\n },\n];\n\nfunction bitRetriever(data, depth) {\n let leftOver = [];\n let i = 0;\n\n function split() {\n if (i === data.length) {\n throw new Error(\"Ran out of data\");\n }\n let byte = data[i];\n i++;\n let byte8, byte7, byte6, byte5, byte4, byte3, byte2, byte1;\n switch (depth) {\n default:\n throw new Error(\"unrecognised depth\");\n case 16:\n byte2 = data[i];\n i++;\n leftOver.push((byte << 8) + byte2);\n break;\n case 4:\n byte2 = byte & 0x0f;\n byte1 = byte >> 4;\n leftOver.push(byte1, byte2);\n break;\n case 2:\n byte4 = byte & 3;\n byte3 = (byte >> 2) & 3;\n byte2 = (byte >> 4) & 3;\n byte1 = (byte >> 6) & 3;\n leftOver.push(byte1, byte2, byte3, byte4);\n break;\n case 1:\n byte8 = byte & 1;\n byte7 = (byte >> 1) & 1;\n byte6 = (byte >> 2) & 1;\n byte5 = (byte >> 3) & 1;\n byte4 = (byte >> 4) & 1;\n byte3 = (byte >> 5) & 1;\n byte2 = (byte >> 6) & 1;\n byte1 = (byte >> 7) & 1;\n leftOver.push(byte1, byte2, byte3, byte4, byte5, byte6, byte7, byte8);\n break;\n }\n }\n\n return {\n get: function (count) {\n while (leftOver.length < count) {\n split();\n }\n let returner = leftOver.slice(0, count);\n leftOver = leftOver.slice(count);\n return returner;\n },\n resetAfterLine: function () {\n leftOver.length = 0;\n },\n end: function () {\n if (i !== data.length) {\n throw new Error(\"extra data found\");\n }\n },\n };\n}\n\nfunction mapImage8Bit(image, pxData, getPxPos, bpp, data, rawPos) {\n // eslint-disable-line max-params\n let imageWidth = image.width;\n let imageHeight = image.height;\n let imagePass = image.index;\n for (let y = 0; y < imageHeight; y++) {\n for (let x = 0; x < imageWidth; x++) {\n let pxPos = getPxPos(x, y, imagePass);\n pixelBppMapper[bpp](pxData, data, pxPos, rawPos);\n rawPos += bpp; //eslint-disable-line no-param-reassign\n }\n }\n return rawPos;\n}\n\nfunction mapImageCustomBit(image, pxData, getPxPos, bpp, bits, maxBit) {\n // eslint-disable-line max-params\n let imageWidth = image.width;\n let imageHeight = image.height;\n let imagePass = image.index;\n for (let y = 0; y < imageHeight; y++) {\n for (let x = 0; x < imageWidth; x++) {\n let pixelData = bits.get(bpp);\n let pxPos = getPxPos(x, y, imagePass);\n pixelBppCustomMapper[bpp](pxData, pixelData, pxPos, maxBit);\n }\n bits.resetAfterLine();\n }\n}\n\nexports.dataToBitMap = function (data, bitmapInfo) {\n let width = bitmapInfo.width;\n let height = bitmapInfo.height;\n let depth = bitmapInfo.depth;\n let bpp = bitmapInfo.bpp;\n let interlace = bitmapInfo.interlace;\n let bits;\n\n if (depth !== 8) {\n bits = bitRetriever(data, depth);\n }\n let pxData;\n if (depth <= 8) {\n pxData = Buffer.alloc(width * height * 4);\n } else {\n pxData = new Uint16Array(width * height * 4);\n }\n let maxBit = Math.pow(2, depth) - 1;\n let rawPos = 0;\n let images;\n let getPxPos;\n\n if (interlace) {\n images = interlaceUtils.getImagePasses(width, height);\n getPxPos = interlaceUtils.getInterlaceIterator(width, height);\n } else {\n let nonInterlacedPxPos = 0;\n getPxPos = function () {\n let returner = nonInterlacedPxPos;\n nonInterlacedPxPos += 4;\n return returner;\n };\n images = [{ width: width, height: height }];\n }\n\n for (let imageIndex = 0; imageIndex < images.length; imageIndex++) {\n if (depth === 8) {\n rawPos = mapImage8Bit(\n images[imageIndex],\n pxData,\n getPxPos,\n bpp,\n data,\n rawPos\n );\n } else {\n mapImageCustomBit(\n images[imageIndex],\n pxData,\n getPxPos,\n bpp,\n bits,\n maxBit\n );\n }\n }\n if (depth === 8) {\n if (rawPos !== data.length) {\n throw new Error(\"extra data found\");\n }\n } else {\n bits.end();\n }\n\n return pxData;\n};\n", "\"use strict\";\n\nfunction dePalette(indata, outdata, width, height, palette) {\n let pxPos = 0;\n // use values from palette\n for (let y = 0; y < height; y++) {\n for (let x = 0; x < width; x++) {\n let color = palette[indata[pxPos]];\n\n if (!color) {\n throw new Error(\"index \" + indata[pxPos] + \" not in palette\");\n }\n\n for (let i = 0; i < 4; i++) {\n outdata[pxPos + i] = color[i];\n }\n pxPos += 4;\n }\n }\n}\n\nfunction replaceTransparentColor(indata, outdata, width, height, transColor) {\n let pxPos = 0;\n for (let y = 0; y < height; y++) {\n for (let x = 0; x < width; x++) {\n let makeTrans = false;\n\n if (transColor.length === 1) {\n if (transColor[0] === indata[pxPos]) {\n makeTrans = true;\n }\n } else if (\n transColor[0] === indata[pxPos] &&\n transColor[1] === indata[pxPos + 1] &&\n transColor[2] === indata[pxPos + 2]\n ) {\n makeTrans = true;\n }\n if (makeTrans) {\n for (let i = 0; i < 4; i++) {\n outdata[pxPos + i] = 0;\n }\n }\n pxPos += 4;\n }\n }\n}\n\nfunction scaleDepth(indata, outdata, width, height, depth) {\n let maxOutSample = 255;\n let maxInSample = Math.pow(2, depth) - 1;\n let pxPos = 0;\n\n for (let y = 0; y < height; y++) {\n for (let x = 0; x < width; x++) {\n for (let i = 0; i < 4; i++) {\n outdata[pxPos + i] = Math.floor(\n (indata[pxPos + i] * maxOutSample) / maxInSample + 0.5\n );\n }\n pxPos += 4;\n }\n }\n}\n\nmodule.exports = function (indata, imageData, skipRescale = false) {\n let depth = imageData.depth;\n let width = imageData.width;\n let height = imageData.height;\n let colorType = imageData.colorType;\n let transColor = imageData.transColor;\n let palette = imageData.palette;\n\n let outdata = indata; // only different for 16 bits\n\n if (colorType === 3) {\n // paletted\n dePalette(indata, outdata, width, height, palette);\n } else {\n if (transColor) {\n replaceTransparentColor(indata, outdata, width, height, transColor);\n }\n // if it needs scaling\n if (depth !== 8 && !skipRescale) {\n // if we need to change the buffer size\n if (depth === 16) {\n outdata = Buffer.alloc(width * height * 4);\n }\n scaleDepth(indata, outdata, width, height, depth);\n }\n }\n return outdata;\n};\n", "\"use strict\";\n\nlet util = require(\"util\");\nlet zlib = require(\"zlib\");\nlet ChunkStream = require(\"./chunkstream\");\nlet FilterAsync = require(\"./filter-parse-async\");\nlet Parser = require(\"./parser\");\nlet bitmapper = require(\"./bitmapper\");\nlet formatNormaliser = require(\"./format-normaliser\");\n\nlet ParserAsync = (module.exports = function (options) {\n ChunkStream.call(this);\n\n this._parser = new Parser(options, {\n read: this.read.bind(this),\n error: this._handleError.bind(this),\n metadata: this._handleMetaData.bind(this),\n gamma: this.emit.bind(this, \"gamma\"),\n palette: this._handlePalette.bind(this),\n transColor: this._handleTransColor.bind(this),\n finished: this._finished.bind(this),\n inflateData: this._inflateData.bind(this),\n simpleTransparency: this._simpleTransparency.bind(this),\n headersFinished: this._headersFinished.bind(this),\n });\n this._options = options;\n this.writable = true;\n\n this._parser.start();\n});\nutil.inherits(ParserAsync, ChunkStream);\n\nParserAsync.prototype._handleError = function (err) {\n this.emit(\"error\", err);\n\n this.writable = false;\n\n this.destroy();\n\n if (this._inflate && this._inflate.destroy) {\n this._inflate.destroy();\n }\n\n if (this._filter) {\n this._filter.destroy();\n // For backward compatibility with Node 7 and below.\n // Suppress errors due to _inflate calling write() even after\n // it's destroy()'ed.\n this._filter.on(\"error\", function () {});\n }\n\n this.errord = true;\n};\n\nParserAsync.prototype._inflateData = function (data) {\n if (!this._inflate) {\n if (this._bitmapInfo.interlace) {\n this._inflate = zlib.createInflate();\n\n this._inflate.on(\"error\", this.emit.bind(this, \"error\"));\n this._filter.on(\"complete\", this._complete.bind(this));\n\n this._inflate.pipe(this._filter);\n } else {\n let rowSize =\n ((this._bitmapInfo.width *\n this._bitmapInfo.bpp *\n this._bitmapInfo.depth +\n 7) >>\n 3) +\n 1;\n let imageSize = rowSize * this._bitmapInfo.height;\n let chunkSize = Math.max(imageSize, zlib.Z_MIN_CHUNK);\n\n this._inflate = zlib.createInflate({ chunkSize: chunkSize });\n let leftToInflate = imageSize;\n\n let emitError = this.emit.bind(this, \"error\");\n this._inflate.on(\"error\", function (err) {\n if (!leftToInflate) {\n return;\n }\n\n emitError(err);\n });\n this._filter.on(\"complete\", this._complete.bind(this));\n\n let filterWrite = this._filter.write.bind(this._filter);\n this._inflate.on(\"data\", function (chunk) {\n if (!leftToInflate) {\n return;\n }\n\n if (chunk.length > leftToInflate) {\n chunk = chunk.slice(0, leftToInflate);\n }\n\n leftToInflate -= chunk.length;\n\n filterWrite(chunk);\n });\n\n this._inflate.on(\"end\", this._filter.end.bind(this._filter));\n }\n }\n this._inflate.write(data);\n};\n\nParserAsync.prototype._handleMetaData = function (metaData) {\n this._metaData = metaData;\n this._bitmapInfo = Object.create(metaData);\n\n this._filter = new FilterAsync(this._bitmapInfo);\n};\n\nParserAsync.prototype._handleTransColor = function (transColor) {\n this._bitmapInfo.transColor = transColor;\n};\n\nParserAsync.prototype._handlePalette = function (palette) {\n this._bitmapInfo.palette = palette;\n};\n\nParserAsync.prototype._simpleTransparency = function () {\n this._metaData.alpha = true;\n};\n\nParserAsync.prototype._headersFinished = function () {\n // Up until this point, we don't know if we have a tRNS chunk (alpha)\n // so we can't emit metadata any earlier\n this.emit(\"metadata\", this._metaData);\n};\n\nParserAsync.prototype._finished = function () {\n if (this.errord) {\n return;\n }\n\n if (!this._inflate) {\n this.emit(\"error\", \"No Inflate block\");\n } else {\n // no more data to inflate\n this._inflate.end();\n }\n};\n\nParserAsync.prototype._complete = function (filteredData) {\n if (this.errord) {\n return;\n }\n\n let normalisedBitmapData;\n\n try {\n let bitmapData = bitmapper.dataToBitMap(filteredData, this._bitmapInfo);\n\n normalisedBitmapData = formatNormaliser(\n bitmapData,\n this._bitmapInfo,\n this._options.skipRescale\n );\n bitmapData = null;\n } catch (ex) {\n this._handleError(ex);\n return;\n }\n\n this.emit(\"parsed\", normalisedBitmapData);\n};\n", "\"use strict\";\n\nlet constants = require(\"./constants\");\n\nmodule.exports = function (dataIn, width, height, options) {\n let outHasAlpha =\n [constants.COLORTYPE_COLOR_ALPHA, constants.COLORTYPE_ALPHA].indexOf(\n options.colorType\n ) !== -1;\n if (options.colorType === options.inputColorType) {\n let bigEndian = (function () {\n let buffer = new ArrayBuffer(2);\n new DataView(buffer).setInt16(0, 256, true /* littleEndian */);\n // Int16Array uses the platform's endianness.\n return new Int16Array(buffer)[0] !== 256;\n })();\n // If no need to convert to grayscale and alpha is present/absent in both, take a fast route\n if (options.bitDepth === 8 || (options.bitDepth === 16 && bigEndian)) {\n return dataIn;\n }\n }\n\n // map to a UInt16 array if data is 16bit, fix endianness below\n let data = options.bitDepth !== 16 ? dataIn : new Uint16Array(dataIn.buffer);\n\n let maxValue = 255;\n let inBpp = constants.COLORTYPE_TO_BPP_MAP[options.inputColorType];\n if (inBpp === 4 && !options.inputHasAlpha) {\n inBpp = 3;\n }\n let outBpp = constants.COLORTYPE_TO_BPP_MAP[options.colorType];\n if (options.bitDepth === 16) {\n maxValue = 65535;\n outBpp *= 2;\n }\n let outData = Buffer.alloc(width * height * outBpp);\n\n let inIndex = 0;\n let outIndex = 0;\n\n let bgColor = options.bgColor || {};\n if (bgColor.red === undefined) {\n bgColor.red = maxValue;\n }\n if (bgColor.green === undefined) {\n bgColor.green = maxValue;\n }\n if (bgColor.blue === undefined) {\n bgColor.blue = maxValue;\n }\n\n function getRGBA() {\n let red;\n let green;\n let blue;\n let alpha = maxValue;\n switch (options.inputColorType) {\n case constants.COLORTYPE_COLOR_ALPHA:\n alpha = data[inIndex + 3];\n red = data[inIndex];\n green = data[inIndex + 1];\n blue = data[inIndex + 2];\n break;\n case constants.COLORTYPE_COLOR:\n red = data[inIndex];\n green = data[inIndex + 1];\n blue = data[inIndex + 2];\n break;\n case constants.COLORTYPE_ALPHA:\n alpha = data[inIndex + 1];\n red = data[inIndex];\n green = red;\n blue = red;\n break;\n case constants.COLORTYPE_GRAYSCALE:\n red = data[inIndex];\n green = red;\n blue = red;\n break;\n default:\n throw new Error(\n \"input color type:\" +\n options.inputColorType +\n \" is not supported at present\"\n );\n }\n\n if (options.inputHasAlpha) {\n if (!outHasAlpha) {\n alpha /= maxValue;\n red = Math.min(\n Math.max(Math.round((1 - alpha) * bgColor.red + alpha * red), 0),\n maxValue\n );\n green = Math.min(\n Math.max(Math.round((1 - alpha) * bgColor.green + alpha * green), 0),\n maxValue\n );\n blue = Math.min(\n Math.max(Math.round((1 - alpha) * bgColor.blue + alpha * blue), 0),\n maxValue\n );\n }\n }\n return { red: red, green: green, blue: blue, alpha: alpha };\n }\n\n for (let y = 0; y < height; y++) {\n for (let x = 0; x < width; x++) {\n let rgba = getRGBA(data, inIndex);\n\n switch (options.colorType) {\n case constants.COLORTYPE_COLOR_ALPHA:\n case constants.COLORTYPE_COLOR:\n if (options.bitDepth === 8) {\n outData[outIndex] = rgba.red;\n outData[outIndex + 1] = rgba.green;\n outData[outIndex + 2] = rgba.blue;\n if (outHasAlpha) {\n outData[outIndex + 3] = rgba.alpha;\n }\n } else {\n outData.writeUInt16BE(rgba.red, outIndex);\n outData.writeUInt16BE(rgba.green, outIndex + 2);\n outData.writeUInt16BE(rgba.blue, outIndex + 4);\n if (outHasAlpha) {\n outData.writeUInt16BE(rgba.alpha, outIndex + 6);\n }\n }\n break;\n case constants.COLORTYPE_ALPHA:\n case constants.COLORTYPE_GRAYSCALE: {\n // Convert to grayscale and alpha\n let grayscale = (rgba.red + rgba.green + rgba.blue) / 3;\n if (options.bitDepth === 8) {\n outData[outIndex] = grayscale;\n if (outHasAlpha) {\n outData[outIndex + 1] = rgba.alpha;\n }\n } else {\n outData.writeUInt16BE(grayscale, outIndex);\n if (outHasAlpha) {\n outData.writeUInt16BE(rgba.alpha, outIndex + 2);\n }\n }\n break;\n }\n default:\n throw new Error(\"unrecognised color Type \" + options.colorType);\n }\n\n inIndex += inBpp;\n outIndex += outBpp;\n }\n }\n\n return outData;\n};\n", "\"use strict\";\n\nlet paethPredictor = require(\"./paeth-predictor\");\n\nfunction filterNone(pxData, pxPos, byteWidth, rawData, rawPos) {\n for (let x = 0; x < byteWidth; x++) {\n rawData[rawPos + x] = pxData[pxPos + x];\n }\n}\n\nfunction filterSumNone(pxData, pxPos, byteWidth) {\n let sum = 0;\n let length = pxPos + byteWidth;\n\n for (let i = pxPos; i < length; i++) {\n sum += Math.abs(pxData[i]);\n }\n return sum;\n}\n\nfunction filterSub(pxData, pxPos, byteWidth, rawData, rawPos, bpp) {\n for (let x = 0; x < byteWidth; x++) {\n let left = x >= bpp ? pxData[pxPos + x - bpp] : 0;\n let val = pxData[pxPos + x] - left;\n\n rawData[rawPos + x] = val;\n }\n}\n\nfunction filterSumSub(pxData, pxPos, byteWidth, bpp) {\n let sum = 0;\n for (let x = 0; x < byteWidth; x++) {\n let left = x >= bpp ? pxData[pxPos + x - bpp] : 0;\n let val = pxData[pxPos + x] - left;\n\n sum += Math.abs(val);\n }\n\n return sum;\n}\n\nfunction filterUp(pxData, pxPos, byteWidth, rawData, rawPos) {\n for (let x = 0; x < byteWidth; x++) {\n let up = pxPos > 0 ? pxData[pxPos + x - byteWidth] : 0;\n let val = pxData[pxPos + x] - up;\n\n rawData[rawPos + x] = val;\n }\n}\n\nfunction filterSumUp(pxData, pxPos, byteWidth) {\n let sum = 0;\n let length = pxPos + byteWidth;\n for (let x = pxPos; x < length; x++) {\n let up = pxPos > 0 ? pxData[x - byteWidth] : 0;\n let val = pxData[x] - up;\n\n sum += Math.abs(val);\n }\n\n return sum;\n}\n\nfunction filterAvg(pxData, pxPos, byteWidth, rawData, rawPos, bpp) {\n for (let x = 0; x < byteWidth; x++) {\n let left = x >= bpp ? pxData[pxPos + x - bpp] : 0;\n let up = pxPos > 0 ? pxData[pxPos + x - byteWidth] : 0;\n let val = pxData[pxPos + x] - ((left + up) >> 1);\n\n rawData[rawPos + x] = val;\n }\n}\n\nfunction filterSumAvg(pxData, pxPos, byteWidth, bpp) {\n let sum = 0;\n for (let x = 0; x < byteWidth; x++) {\n let left = x >= bpp ? pxData[pxPos + x - bpp] : 0;\n let up = pxPos > 0 ? pxData[pxPos + x - byteWidth] : 0;\n let val = pxData[pxPos + x] - ((left + up) >> 1);\n\n sum += Math.abs(val);\n }\n\n return sum;\n}\n\nfunction filterPaeth(pxData, pxPos, byteWidth, rawData, rawPos, bpp) {\n for (let x = 0; x < byteWidth; x++) {\n let left = x >= bpp ? pxData[pxPos + x - bpp] : 0;\n let up = pxPos > 0 ? pxData[pxPos + x - byteWidth] : 0;\n let upleft =\n pxPos > 0 && x >= bpp ? pxData[pxPos + x - (byteWidth + bpp)] : 0;\n let val = pxData[pxPos + x] - paethPredictor(left, up, upleft);\n\n rawData[rawPos + x] = val;\n }\n}\n\nfunction filterSumPaeth(pxData, pxPos, byteWidth, bpp) {\n let sum = 0;\n for (let x = 0; x < byteWidth; x++) {\n let left = x >= bpp ? pxData[pxPos + x - bpp] : 0;\n let up = pxPos > 0 ? pxData[pxPos + x - byteWidth] : 0;\n let upleft =\n pxPos > 0 && x >= bpp ? pxData[pxPos + x - (byteWidth + bpp)] : 0;\n let val = pxData[pxPos + x] - paethPredictor(left, up, upleft);\n\n sum += Math.abs(val);\n }\n\n return sum;\n}\n\nlet filters = {\n 0: filterNone,\n 1: filterSub,\n 2: filterUp,\n 3: filterAvg,\n 4: filterPaeth,\n};\n\nlet filterSums = {\n 0: filterSumNone,\n 1: filterSumSub,\n 2: filterSumUp,\n 3: filterSumAvg,\n 4: filterSumPaeth,\n};\n\nmodule.exports = function (pxData, width, height, options, bpp) {\n let filterTypes;\n if (!(\"filterType\" in options) || options.filterType === -1) {\n filterTypes = [0, 1, 2, 3, 4];\n } else if (typeof options.filterType === \"number\") {\n filterTypes = [options.filterType];\n } else {\n throw new Error(\"unrecognised filter types\");\n }\n\n if (options.bitDepth === 16) {\n bpp *= 2;\n }\n let byteWidth = width * bpp;\n let rawPos = 0;\n let pxPos = 0;\n let rawData = Buffer.alloc((byteWidth + 1) * height);\n\n let sel = filterTypes[0];\n\n for (let y = 0; y < height; y++) {\n if (filterTypes.length > 1) {\n // find best filter for this line (with lowest sum of values)\n let min = Infinity;\n\n for (let i = 0; i < filterTypes.length; i++) {\n let sum = filterSums[filterTypes[i]](pxData, pxPos, byteWidth, bpp);\n if (sum < min) {\n sel = filterTypes[i];\n min = sum;\n }\n }\n }\n\n rawData[rawPos] = sel;\n rawPos++;\n filters[sel](pxData, pxPos, byteWidth, rawData, rawPos, bpp);\n rawPos += byteWidth;\n pxPos += byteWidth;\n }\n return rawData;\n};\n", "\"use strict\";\n\nlet constants = require(\"./constants\");\nlet CrcStream = require(\"./crc\");\nlet bitPacker = require(\"./bitpacker\");\nlet filter = require(\"./filter-pack\");\nlet zlib = require(\"zlib\");\n\nlet Packer = (module.exports = function (options) {\n this._options = options;\n\n options.deflateChunkSize = options.deflateChunkSize || 32 * 1024;\n options.deflateLevel =\n options.deflateLevel != null ? options.deflateLevel : 9;\n options.deflateStrategy =\n options.deflateStrategy != null ? options.deflateStrategy : 3;\n options.inputHasAlpha =\n options.inputHasAlpha != null ? options.inputHasAlpha : true;\n options.deflateFactory = options.deflateFactory || zlib.createDeflate;\n options.bitDepth = options.bitDepth || 8;\n // This is outputColorType\n options.colorType =\n typeof options.colorType === \"number\"\n ? options.colorType\n : constants.COLORTYPE_COLOR_ALPHA;\n options.inputColorType =\n typeof options.inputColorType === \"number\"\n ? options.inputColorType\n : constants.COLORTYPE_COLOR_ALPHA;\n\n if (\n [\n constants.COLORTYPE_GRAYSCALE,\n constants.COLORTYPE_COLOR,\n constants.COLORTYPE_COLOR_ALPHA,\n constants.COLORTYPE_ALPHA,\n ].indexOf(options.colorType) === -1\n ) {\n throw new Error(\n \"option color type:\" + options.colorType + \" is not supported at present\"\n );\n }\n if (\n [\n constants.COLORTYPE_GRAYSCALE,\n constants.COLORTYPE_COLOR,\n constants.COLORTYPE_COLOR_ALPHA,\n constants.COLORTYPE_ALPHA,\n ].indexOf(options.inputColorType) === -1\n ) {\n throw new Error(\n \"option input color type:\" +\n options.inputColorType +\n \" is not supported at present\"\n );\n }\n if (options.bitDepth !== 8 && options.bitDepth !== 16) {\n throw new Error(\n \"option bit depth:\" + options.bitDepth + \" is not supported at present\"\n );\n }\n});\n\nPacker.prototype.getDeflateOptions = function () {\n return {\n chunkSize: this._options.deflateChunkSize,\n level: this._options.deflateLevel,\n strategy: this._options.deflateStrategy,\n };\n};\n\nPacker.prototype.createDeflate = function () {\n return this._options.deflateFactory(this.getDeflateOptions());\n};\n\nPacker.prototype.filterData = function (data, width, height) {\n // convert to correct format for filtering (e.g. right bpp and bit depth)\n let packedData = bitPacker(data, width, height, this._options);\n\n // filter pixel data\n let bpp = constants.COLORTYPE_TO_BPP_MAP[this._options.colorType];\n let filteredData = filter(packedData, width, height, this._options, bpp);\n return filteredData;\n};\n\nPacker.prototype._packChunk = function (type, data) {\n let len = data ? data.length : 0;\n let buf = Buffer.alloc(len + 12);\n\n buf.writeUInt32BE(len, 0);\n buf.writeUInt32BE(type, 4);\n\n if (data) {\n data.copy(buf, 8);\n }\n\n buf.writeInt32BE(\n CrcStream.crc32(buf.slice(4, buf.length - 4)),\n buf.length - 4\n );\n return buf;\n};\n\nPacker.prototype.packGAMA = function (gamma) {\n let buf = Buffer.alloc(4);\n buf.writeUInt32BE(Math.floor(gamma * constants.GAMMA_DIVISION), 0);\n return this._packChunk(constants.TYPE_gAMA, buf);\n};\n\nPacker.prototype.packIHDR = function (width, height) {\n let buf = Buffer.alloc(13);\n buf.writeUInt32BE(width, 0);\n buf.writeUInt32BE(height, 4);\n buf[8] = this._options.bitDepth; // Bit depth\n buf[9] = this._options.colorType; // colorType\n buf[10] = 0; // compression\n buf[11] = 0; // filter\n buf[12] = 0; // interlace\n\n return this._packChunk(constants.TYPE_IHDR, buf);\n};\n\nPacker.prototype.packIDAT = function (data) {\n return this._packChunk(constants.TYPE_IDAT, data);\n};\n\nPacker.prototype.packIEND = function () {\n return this._packChunk(constants.TYPE_IEND, null);\n};\n", "\"use strict\";\n\nlet util = require(\"util\");\nlet Stream = require(\"stream\");\nlet constants = require(\"./constants\");\nlet Packer = require(\"./packer\");\n\nlet PackerAsync = (module.exports = function (opt) {\n Stream.call(this);\n\n let options = opt || {};\n\n this._packer = new Packer(options);\n this._deflate = this._packer.createDeflate();\n\n this.readable = true;\n});\nutil.inherits(PackerAsync, Stream);\n\nPackerAsync.prototype.pack = function (data, width, height, gamma) {\n // Signature\n this.emit(\"data\", Buffer.from(constants.PNG_SIGNATURE));\n this.emit(\"data\", this._packer.packIHDR(width, height));\n\n if (gamma) {\n this.emit(\"data\", this._packer.packGAMA(gamma));\n }\n\n let filteredData = this._packer.filterData(data, width, height);\n\n // compress it\n this._deflate.on(\"error\", this.emit.bind(this, \"error\"));\n\n this._deflate.on(\n \"data\",\n function (compressedData) {\n this.emit(\"data\", this._packer.packIDAT(compressedData));\n }.bind(this)\n );\n\n this._deflate.on(\n \"end\",\n function () {\n this.emit(\"data\", this._packer.packIEND());\n this.emit(\"end\");\n }.bind(this)\n );\n\n this._deflate.end(filteredData);\n};\n", "\"use strict\";\n\nlet assert = require(\"assert\").ok;\nlet zlib = require(\"zlib\");\nlet util = require(\"util\");\n\nlet kMaxLength = require(\"buffer\").kMaxLength;\n\nfunction Inflate(opts) {\n if (!(this instanceof Inflate)) {\n return new Inflate(opts);\n }\n\n if (opts && opts.chunkSize < zlib.Z_MIN_CHUNK) {\n opts.chunkSize = zlib.Z_MIN_CHUNK;\n }\n\n zlib.Inflate.call(this, opts);\n\n // Node 8 --> 9 compatibility check\n this._offset = this._offset === undefined ? this._outOffset : this._offset;\n this._buffer = this._buffer || this._outBuffer;\n\n if (opts && opts.maxLength != null) {\n this._maxLength = opts.maxLength;\n }\n}\n\nfunction createInflate(opts) {\n return new Inflate(opts);\n}\n\nfunction _close(engine, callback) {\n if (callback) {\n process.nextTick(callback);\n }\n\n // Caller may invoke .close after a zlib error (which will null _handle).\n if (!engine._handle) {\n return;\n }\n\n engine._handle.close();\n engine._handle = null;\n}\n\nInflate.prototype._processChunk = function (chunk, flushFlag, asyncCb) {\n if (typeof asyncCb === \"function\") {\n return zlib.Inflate._processChunk.call(this, chunk, flushFlag, asyncCb);\n }\n\n let self = this;\n\n let availInBefore = chunk && chunk.length;\n let availOutBefore = this._chunkSize - this._offset;\n let leftToInflate = this._maxLength;\n let inOff = 0;\n\n let buffers = [];\n let nread = 0;\n\n let error;\n this.on(\"error\", function (err) {\n error = err;\n });\n\n function handleChunk(availInAfter, availOutAfter) {\n if (self._hadError) {\n return;\n }\n\n let have = availOutBefore - availOutAfter;\n assert(have >= 0, \"have should not go down\");\n\n if (have > 0) {\n let out = self._buffer.slice(self._offset, self._offset + have);\n self._offset += have;\n\n if (out.length > leftToInflate) {\n out = out.slice(0, leftToInflate);\n }\n\n buffers.push(out);\n nread += out.length;\n leftToInflate -= out.length;\n\n if (leftToInflate === 0) {\n return false;\n }\n }\n\n if (availOutAfter === 0 || self._offset >= self._chunkSize) {\n availOutBefore = self._chunkSize;\n self._offset = 0;\n self._buffer = Buffer.allocUnsafe(self._chunkSize);\n }\n\n if (availOutAfter === 0) {\n inOff += availInBefore - availInAfter;\n availInBefore = availInAfter;\n\n return true;\n }\n\n return false;\n }\n\n assert(this._handle, \"zlib binding closed\");\n let res;\n do {\n res = this._handle.writeSync(\n flushFlag,\n chunk, // in\n inOff, // in_off\n availInBefore, // in_len\n this._buffer, // out\n this._offset, //out_off\n availOutBefore\n ); // out_len\n // Node 8 --> 9 compatibility check\n res = res || this._writeState;\n } while (!this._hadError && handleChunk(res[0], res[1]));\n\n if (this._hadError) {\n throw error;\n }\n\n if (nread >= kMaxLength) {\n _close(this);\n throw new RangeError(\n \"Cannot create final Buffer. It would be larger than 0x\" +\n kMaxLength.toString(16) +\n \" bytes\"\n );\n }\n\n let buf = Buffer.concat(buffers, nread);\n _close(this);\n\n return buf;\n};\n\nutil.inherits(Inflate, zlib.Inflate);\n\nfunction zlibBufferSync(engine, buffer) {\n if (typeof buffer === \"string\") {\n buffer = Buffer.from(buffer);\n }\n if (!(buffer instanceof Buffer)) {\n throw new TypeError(\"Not a string or buffer\");\n }\n\n let flushFlag = engine._finishFlushFlag;\n if (flushFlag == null) {\n flushFlag = zlib.Z_FINISH;\n }\n\n return engine._processChunk(buffer, flushFlag);\n}\n\nfunction inflateSync(buffer, opts) {\n return zlibBufferSync(new Inflate(opts), buffer);\n}\n\nmodule.exports = exports = inflateSync;\nexports.Inflate = Inflate;\nexports.createInflate = createInflate;\nexports.inflateSync = inflateSync;\n", "\"use strict\";\n\nlet SyncReader = (module.exports = function (buffer) {\n this._buffer = buffer;\n this._reads = [];\n});\n\nSyncReader.prototype.read = function (length, callback) {\n this._reads.push({\n length: Math.abs(length), // if length < 0 then at most this length\n allowLess: length < 0,\n func: callback,\n });\n};\n\nSyncReader.prototype.process = function () {\n // as long as there is any data and read requests\n while (this._reads.length > 0 && this._buffer.length) {\n let read = this._reads[0];\n\n if (\n this._buffer.length &&\n (this._buffer.length >= read.length || read.allowLess)\n ) {\n // ok there is any data so that we can satisfy this request\n this._reads.shift(); // == read\n\n let buf = this._buffer;\n\n this._buffer = buf.slice(read.length);\n\n read.func.call(this, buf.slice(0, read.length));\n } else {\n break;\n }\n }\n\n if (this._reads.length > 0) {\n throw new Error(\"There are some read requests waitng on finished stream\");\n }\n\n if (this._buffer.length > 0) {\n throw new Error(\"unrecognised content at end of stream\");\n }\n};\n", "\"use strict\";\n\nlet SyncReader = require(\"./sync-reader\");\nlet Filter = require(\"./filter-parse\");\n\nexports.process = function (inBuffer, bitmapInfo) {\n let outBuffers = [];\n let reader = new SyncReader(inBuffer);\n let filter = new Filter(bitmapInfo, {\n read: reader.read.bind(reader),\n write: function (bufferPart) {\n outBuffers.push(bufferPart);\n },\n complete: function () {},\n });\n\n filter.start();\n reader.process();\n\n return Buffer.concat(outBuffers);\n};\n", "\"use strict\";\n\nlet hasSyncZlib = true;\nlet zlib = require(\"zlib\");\nlet inflateSync = require(\"./sync-inflate\");\nif (!zlib.deflateSync) {\n hasSyncZlib = false;\n}\nlet SyncReader = require(\"./sync-reader\");\nlet FilterSync = require(\"./filter-parse-sync\");\nlet Parser = require(\"./parser\");\nlet bitmapper = require(\"./bitmapper\");\nlet formatNormaliser = require(\"./format-normaliser\");\n\nmodule.exports = function (buffer, options) {\n if (!hasSyncZlib) {\n throw new Error(\n \"To use the sync capability of this library in old node versions, please pin pngjs to v2.3.0\"\n );\n }\n\n let err;\n function handleError(_err_) {\n err = _err_;\n }\n\n let metaData;\n function handleMetaData(_metaData_) {\n metaData = _metaData_;\n }\n\n function handleTransColor(transColor) {\n metaData.transColor = transColor;\n }\n\n function handlePalette(palette) {\n metaData.palette = palette;\n }\n\n function handleSimpleTransparency() {\n metaData.alpha = true;\n }\n\n let gamma;\n function handleGamma(_gamma_) {\n gamma = _gamma_;\n }\n\n let inflateDataList = [];\n function handleInflateData(inflatedData) {\n inflateDataList.push(inflatedData);\n }\n\n let reader = new SyncReader(buffer);\n\n let parser = new Parser(options, {\n read: reader.read.bind(reader),\n error: handleError,\n metadata: handleMetaData,\n gamma: handleGamma,\n palette: handlePalette,\n transColor: handleTransColor,\n inflateData: handleInflateData,\n simpleTransparency: handleSimpleTransparency,\n });\n\n parser.start();\n reader.process();\n\n if (err) {\n throw err;\n }\n\n //join together the inflate datas\n let inflateData = Buffer.concat(inflateDataList);\n inflateDataList.length = 0;\n\n let inflatedData;\n if (metaData.interlace) {\n inflatedData = zlib.inflateSync(inflateData);\n } else {\n let rowSize =\n ((metaData.width * metaData.bpp * metaData.depth + 7) >> 3) + 1;\n let imageSize = rowSize * metaData.height;\n inflatedData = inflateSync(inflateData, {\n chunkSize: imageSize,\n maxLength: imageSize,\n });\n }\n inflateData = null;\n\n if (!inflatedData || !inflatedData.length) {\n throw new Error(\"bad png - invalid inflate data response\");\n }\n\n let unfilteredData = FilterSync.process(inflatedData, metaData);\n inflateData = null;\n\n let bitmapData = bitmapper.dataToBitMap(unfilteredData, metaData);\n unfilteredData = null;\n\n let normalisedBitmapData = formatNormaliser(\n bitmapData,\n metaData,\n options.skipRescale\n );\n\n metaData.data = normalisedBitmapData;\n metaData.gamma = gamma || 0;\n\n return metaData;\n};\n", "\"use strict\";\n\nlet hasSyncZlib = true;\nlet zlib = require(\"zlib\");\nif (!zlib.deflateSync) {\n hasSyncZlib = false;\n}\nlet constants = require(\"./constants\");\nlet Packer = require(\"./packer\");\n\nmodule.exports = function (metaData, opt) {\n if (!hasSyncZlib) {\n throw new Error(\n \"To use the sync capability of this library in old node versions, please pin pngjs to v2.3.0\"\n );\n }\n\n let options = opt || {};\n\n let packer = new Packer(options);\n\n let chunks = [];\n\n // Signature\n chunks.push(Buffer.from(constants.PNG_SIGNATURE));\n\n // Header\n chunks.push(packer.packIHDR(metaData.width, metaData.height));\n\n if (metaData.gamma) {\n chunks.push(packer.packGAMA(metaData.gamma));\n }\n\n let filteredData = packer.filterData(\n metaData.data,\n metaData.width,\n metaData.height\n );\n\n // compress it\n let compressedData = zlib.deflateSync(\n filteredData,\n packer.getDeflateOptions()\n );\n filteredData = null;\n\n if (!compressedData || !compressedData.length) {\n throw new Error(\"bad png - invalid compressed data response\");\n }\n chunks.push(packer.packIDAT(compressedData));\n\n // End\n chunks.push(packer.packIEND());\n\n return Buffer.concat(chunks);\n};\n", "\"use strict\";\n\nlet parse = require(\"./parser-sync\");\nlet pack = require(\"./packer-sync\");\n\nexports.read = function (buffer, options) {\n return parse(buffer, options || {});\n};\n\nexports.write = function (png, options) {\n return pack(png, options);\n};\n", "\"use strict\";\n\nlet util = require(\"util\");\nlet Stream = require(\"stream\");\nlet Parser = require(\"./parser-async\");\nlet Packer = require(\"./packer-async\");\nlet PNGSync = require(\"./png-sync\");\n\nlet PNG = (exports.PNG = function (options) {\n Stream.call(this);\n\n options = options || {}; // eslint-disable-line no-param-reassign\n\n // coerce pixel dimensions to integers (also coerces undefined -> 0):\n this.width = options.width | 0;\n this.height = options.height | 0;\n\n this.data =\n this.width > 0 && this.height > 0\n ? Buffer.alloc(4 * this.width * this.height)\n : null;\n\n if (options.fill && this.data) {\n this.data.fill(0);\n }\n\n this.gamma = 0;\n this.readable = this.writable = true;\n\n this._parser = new Parser(options);\n\n this._parser.on(\"error\", this.emit.bind(this, \"error\"));\n this._parser.on(\"close\", this._handleClose.bind(this));\n this._parser.on(\"metadata\", this._metadata.bind(this));\n this._parser.on(\"gamma\", this._gamma.bind(this));\n this._parser.on(\n \"parsed\",\n function (data) {\n this.data = data;\n this.emit(\"parsed\", data);\n }.bind(this)\n );\n\n this._packer = new Packer(options);\n this._packer.on(\"data\", this.emit.bind(this, \"data\"));\n this._packer.on(\"end\", this.emit.bind(this, \"end\"));\n this._parser.on(\"close\", this._handleClose.bind(this));\n this._packer.on(\"error\", this.emit.bind(this, \"error\"));\n});\nutil.inherits(PNG, Stream);\n\nPNG.sync = PNGSync;\n\nPNG.prototype.pack = function () {\n if (!this.data || !this.data.length) {\n this.emit(\"error\", \"No data provided\");\n return this;\n }\n\n process.nextTick(\n function () {\n this._packer.pack(this.data, this.width, this.height, this.gamma);\n }.bind(this)\n );\n\n return this;\n};\n\nPNG.prototype.parse = function (data, callback) {\n if (callback) {\n let onParsed, onError;\n\n onParsed = function (parsedData) {\n this.removeListener(\"error\", onError);\n\n this.data = parsedData;\n callback(null, this);\n }.bind(this);\n\n onError = function (err) {\n this.removeListener(\"parsed\", onParsed);\n\n callback(err, null);\n }.bind(this);\n\n this.once(\"parsed\", onParsed);\n this.once(\"error\", onError);\n }\n\n this.end(data);\n return this;\n};\n\nPNG.prototype.write = function (data) {\n this._parser.write(data);\n return true;\n};\n\nPNG.prototype.end = function (data) {\n this._parser.end(data);\n};\n\nPNG.prototype._metadata = function (metadata) {\n this.width = metadata.width;\n this.height = metadata.height;\n\n this.emit(\"metadata\", metadata);\n};\n\nPNG.prototype._gamma = function (gamma) {\n this.gamma = gamma;\n};\n\nPNG.prototype._handleClose = function () {\n if (!this._parser.writable && !this._packer.readable) {\n this.emit(\"close\");\n }\n};\n\nPNG.bitblt = function (src, dst, srcX, srcY, width, height, deltaX, deltaY) {\n // eslint-disable-line max-params\n // coerce pixel dimensions to integers (also coerces undefined -> 0):\n /* eslint-disable no-param-reassign */\n srcX |= 0;\n srcY |= 0;\n width |= 0;\n height |= 0;\n deltaX |= 0;\n deltaY |= 0;\n /* eslint-enable no-param-reassign */\n\n if (\n srcX > src.width ||\n srcY > src.height ||\n srcX + width > src.width ||\n srcY + height > src.height\n ) {\n throw new Error(\"bitblt reading outside image\");\n }\n\n if (\n deltaX > dst.width ||\n deltaY > dst.height ||\n deltaX + width > dst.width ||\n deltaY + height > dst.height\n ) {\n throw new Error(\"bitblt writing outside image\");\n }\n\n for (let y = 0; y < height; y++) {\n src.data.copy(\n dst.data,\n ((deltaY + y) * dst.width + deltaX) << 2,\n ((srcY + y) * src.width + srcX) << 2,\n ((srcY + y) * src.width + srcX + width) << 2\n );\n }\n};\n\nPNG.prototype.bitblt = function (\n dst,\n srcX,\n srcY,\n width,\n height,\n deltaX,\n deltaY\n) {\n // eslint-disable-line max-params\n\n PNG.bitblt(this, dst, srcX, srcY, width, height, deltaX, deltaY);\n return this;\n};\n\nPNG.adjustGamma = function (src) {\n if (src.gamma) {\n for (let y = 0; y < src.height; y++) {\n for (let x = 0; x < src.width; x++) {\n let idx = (src.width * y + x) << 2;\n\n for (let i = 0; i < 3; i++) {\n let sample = src.data[idx + i] / 255;\n sample = Math.pow(sample, 1 / 2.2 / src.gamma);\n src.data[idx + i] = Math.round(sample * 255);\n }\n }\n }\n src.gamma = 0;\n }\n};\n\nPNG.prototype.adjustGamma = function () {\n PNG.adjustGamma(this);\n};\n", "import {\n getDocument,\n type PDFDocumentProxy,\n} from \"pdfjs-dist/legacy/build/pdf.mjs\";\nimport { PNG } from \"pngjs\";\nimport type { XOR } from \"ts-xor\";\nimport { convertPdfToPngs } from \"./convertPdfToPngs\";\nimport { comparePngs } from \"./comparePngs\";\n\nexport const DEFAULT_COMPARE_PDFS_OPTIONS: ComparePdfsOptions = {\n pngScale: 1.0,\n considerAntiAliasing: false,\n includeDiffMask: false,\n diffThreshold: 0.1,\n diffAlpha: 0.1,\n diffAntiAliasingColor: [255, 255, 0],\n diffColor: [255, 0, 0],\n diffColorAlt: [255, 0, 0],\n};\n\nexport type ComparePdfsOptions = {\n /**\n * The scale factor to use when rendering PDF pages to PNG images. Higher values result in higher fidelity\n * images but increase processing time and memory usage. Default is 1.0.\n */\n pngScale: number;\n /**\n * Whether to consider anti-aliasing when comparing images. Default is false.\n */\n considerAntiAliasing: boolean;\n /**\n * Whether to include a diff mask in the output diff images. Default is false.\n */\n includeDiffMask: boolean;\n /**\n * The threshold for pixel color differences to be considered significant. Ranges from 0 to 1, where 0 means\n * any difference is significant and 1 means only completely different colors are significant. Default is 0.1.\n */\n diffThreshold: number;\n /**\n * The alpha transparency value to use for the diff overlay. Ranges from 0 (fully transparent) to 1 (fully opaque).\n * Default is 0.1.\n */\n diffAlpha: number;\n /**\n * The RGB color to use for highlighting anti-aliased pixels in the diff image. Default is yellow [255, 255, 0].\n */\n diffAntiAliasingColor: [number, number, number];\n /**\n * The RGB color to use for highlighting differences in the diff image. Default is red [255, 0, 0].\n */\n diffColor: [number, number, number];\n /**\n * The RGB color to use as an alternative for highlighting differences in the diff image. Default is red [255, 0, 0].\n */\n diffColorAlt: [number, number, number];\n};\n\nexport type ComparePdfsResult = XOR<\n {\n equal: true;\n },\n {\n equal: false;\n /**\n * An array of diff objects containing the diff image and the page number of the diff.\n */\n diffs: PageDiff[];\n /**\n * Indicates whether the two PDFs have a different number of pages.\n */\n diffPageCount: boolean;\n }\n>;\n\nexport type PageDiff = {\n /**\n * The page number (1-based index) where the difference was found.\n */\n pageNumber: number;\n /**\n * A Buffer containing the PNG image data highlighting the differences for the page.\n */\n diffPng: Buffer;\n};\n\n/**\n * Compares two PDF files provided as Buffers using image pixel comparison and returns whether they\n * are equal along with any diffs.\n * @param file1 - Buffer containing the first PDF file.\n * @param file2 - Buffer containing the second PDF file.\n * @param options - Optional comparison settings.\n * @returns A promise that resolves to a `ComparePdfsResult` indicating if the PDFs are equal and any diffs.\n */\nexport async function comparePdfs(\n file1: Buffer,\n file2: Buffer,\n options?: Partial<ComparePdfsOptions>,\n): Promise<ComparePdfsResult> {\n const {\n pngScale,\n considerAntiAliasing,\n includeDiffMask,\n diffThreshold,\n diffAlpha,\n diffAntiAliasingColor,\n diffColor,\n diffColorAlt,\n }: ComparePdfsOptions = {\n ...DEFAULT_COMPARE_PDFS_OPTIONS,\n ...options,\n };\n\n // getDocument requires data to be Uint8Array\n const file1Converted = Uint8Array.from(file1);\n const file2Converted = Uint8Array.from(file2);\n\n const pdf1: PDFDocumentProxy = await getDocument({\n data: file1Converted,\n }).promise;\n const pdf2: PDFDocumentProxy = await getDocument({\n data: file2Converted,\n }).promise;\n\n const pngs1: PNG[] = await convertPdfToPngs({\n pdf: pdf1,\n scale: pngScale,\n });\n const pngs2: PNG[] = await convertPdfToPngs({\n pdf: pdf2,\n scale: pngScale,\n });\n\n const diffs: PageDiff[] = pngs1.flatMap((png1, index) => {\n const pageNumber = index + 1;\n\n const png2 = pngs2[index];\n\n if (!png2) {\n return [];\n }\n\n const { equal, diffPng } = comparePngs({\n png1,\n png2,\n threshold: diffThreshold,\n antiAliasing: considerAntiAliasing,\n alpha: diffAlpha,\n antiLiasingColor: diffAntiAliasingColor,\n diffColor,\n diffColorAlt,\n diffMask: includeDiffMask,\n });\n\n if (equal) {\n return [];\n }\n\n return {\n pageNumber,\n diffPng: PNG.sync.write(diffPng),\n };\n });\n\n const diffPageCount = pngs1.length !== pngs2.length;\n\n if (diffs.length > 0 || diffPageCount) {\n return {\n equal: false,\n diffs,\n diffPageCount,\n };\n }\n\n return {\n equal: true,\n };\n}\n", "import {\n type Canvas,\n type CanvasRenderingContext2D,\n createCanvas,\n} from \"@napi-rs/canvas\";\nimport {\n type PageViewport,\n type PDFPageProxy,\n type PDFDocumentProxy,\n} from \"pdfjs-dist/legacy/build/pdf.mjs\";\nimport { PNG } from \"pngjs\";\n\ntype ConvertPdfToPngsParams = {\n pdf: PDFDocumentProxy;\n scale: number;\n};\n\nexport async function convertPdfToPngs({\n pdf,\n scale,\n}: ConvertPdfToPngsParams): Promise<PNG[]> {\n const { numPages } = pdf;\n const pageNumbers = Array.from({ length: numPages }, (_, i) => i + 1);\n\n const pngs: PNG[] = await Promise.all(\n pageNumbers.map(async (pageNumber) => {\n const page: PDFPageProxy = await pdf.getPage(pageNumber);\n const viewport: PageViewport = page.getViewport({ scale });\n const canvas: Canvas = createCanvas(viewport.width, viewport.height);\n const canvasContext: CanvasRenderingContext2D = canvas.getContext(\"2d\");\n\n await page.render({\n viewport,\n canvas,\n canvasContext,\n }).promise;\n\n const pngBuffer: Buffer = canvas.toBuffer(\"image/png\");\n\n const png: PNG = PNG.sync.read(pngBuffer);\n\n return png;\n }),\n );\n\n return pngs;\n}\n", "/**\n * Compare two equally sized images, pixel by pixel.\n *\n * @param {Uint8Array | Uint8ClampedArray} img1 First image data.\n * @param {Uint8Array | Uint8ClampedArray} img2 Second image data.\n * @param {Uint8Array | Uint8ClampedArray | void} output Image data to write the diff to, if provided.\n * @param {number} width Input images width.\n * @param {number} height Input images height.\n *\n * @param {Object} [options]\n * @param {number} [options.threshold=0.1] Matching threshold (0 to 1); smaller is more sensitive.\n * @param {boolean} [options.includeAA=false] Whether to skip anti-aliasing detection.\n * @param {number} [options.alpha=0.1] Opacity of original image in diff output.\n * @param {[number, number, number]} [options.aaColor=[255, 255, 0]] Color of anti-aliased pixels in diff output.\n * @param {[number, number, number]} [options.diffColor=[255, 0, 0]] Color of different pixels in diff output.\n * @param {[number, number, number]} [options.diffColorAlt=options.diffColor] Whether to detect dark on light differences between img1 and img2 and set an alternative color to differentiate between the two.\n * @param {boolean} [options.diffMask=false] Draw the diff over a transparent background (a mask).\n *\n * @return {number} The number of mismatched pixels.\n */\nexport default function pixelmatch(img1, img2, output, width, height, options = {}) {\n const {\n threshold = 0.1,\n alpha = 0.1,\n aaColor = [255, 255, 0],\n diffColor = [255, 0, 0],\n includeAA, diffColorAlt, diffMask\n } = options;\n\n if (!isPixelData(img1) || !isPixelData(img2) || (output && !isPixelData(output)))\n throw new Error('Image data: Uint8Array, Uint8ClampedArray or Buffer expected.');\n\n if (img1.length !== img2.length || (output && output.length !== img1.length))\n throw new Error('Image sizes do not match.');\n\n if (img1.length !== width * height * 4) throw new Error('Image data size does not match width/height.');\n\n // check if images are identical\n const len = width * height;\n const a32 = new Uint32Array(img1.buffer, img1.byteOffset, len);\n const b32 = new Uint32Array(img2.buffer, img2.byteOffset, len);\n let identical = true;\n\n for (let i = 0; i < len; i++) {\n if (a32[i] !== b32[i]) { identical = false; break; }\n }\n if (identical) { // fast path if identical\n if (output && !diffMask) {\n for (let i = 0; i < len; i++) drawGrayPixel(img1, 4 * i, alpha, output);\n }\n return 0;\n }\n\n // maximum acceptable square distance between two colors;\n // 35215 is the maximum possible value for the YIQ difference metric\n const maxDelta = 35215 * threshold * threshold;\n const [aaR, aaG, aaB] = aaColor;\n const [diffR, diffG, diffB] = diffColor;\n const [altR, altG, altB] = diffColorAlt || diffColor;\n let diff = 0;\n\n // compare each pixel of one image against the other one\n for (let y = 0; y < height; y++) {\n for (let x = 0; x < width; x++) {\n\n const i = y * width + x;\n const pos = i * 4;\n\n // squared YUV distance between colors at this pixel position, negative if the img2 pixel is darker\n const delta = a32[i] === b32[i] ? 0 : colorDelta(img1, img2, pos, pos, false);\n\n // the color difference is above the threshold\n if (Math.abs(delta) > maxDelta) {\n // check it's a real rendering difference or just anti-aliasing\n const isAA = antialiased(img1, x, y, width, height, a32, b32) || antialiased(img2, x, y, width, height, b32, a32);\n if (!includeAA && isAA) {\n // one of the pixels is anti-aliasing; draw as yellow and do not count as difference\n // note that we do not include such pixels in a mask\n if (output && !diffMask) drawPixel(output, pos, aaR, aaG, aaB);\n\n } else {\n // found substantial difference not caused by anti-aliasing; draw it as such\n if (output) {\n if (delta < 0) {\n drawPixel(output, pos, altR, altG, altB);\n } else {\n drawPixel(output, pos, diffR, diffG, diffB);\n }\n }\n diff++;\n }\n\n } else if (output && !diffMask) {\n // pixels are similar; draw background as grayscale image blended with white\n drawGrayPixel(img1, pos, alpha, output);\n }\n }\n }\n\n // return the number of different pixels\n return diff;\n}\n\n/** @param {Uint8Array | Uint8ClampedArray} arr */\nfunction isPixelData(arr) {\n // work around instanceof Uint8Array not working properly in some Jest environments\n return ArrayBuffer.isView(arr) && arr.BYTES_PER_ELEMENT === 1;\n}\n\n/**\n * Check if a pixel is likely a part of anti-aliasing;\n * based on \"Anti-aliased Pixel and Intensity Slope Detector\" paper by V. Vysniauskas, 2009\n * @param {Uint8Array | Uint8ClampedArray} img\n * @param {number} x1\n * @param {number} y1\n * @param {number} width\n * @param {number} height\n * @param {Uint32Array} a32\n * @param {Uint32Array} b32\n */\nfunction antialiased(img, x1, y1, width, height, a32, b32) {\n const x0 = Math.max(x1 - 1, 0);\n const y0 = Math.max(y1 - 1, 0);\n const x2 = Math.min(x1 + 1, width - 1);\n const y2 = Math.min(y1 + 1, height - 1);\n const pos = y1 * width + x1;\n let zeroes = x1 === x0 || x1 === x2 || y1 === y0 || y1 === y2 ? 1 : 0;\n let min = 0;\n let max = 0;\n let minX = 0;\n let minY = 0;\n let maxX = 0;\n let maxY = 0;\n\n // go through 8 adjacent pixels\n for (let x = x0; x <= x2; x++) {\n for (let y = y0; y <= y2; y++) {\n if (x === x1 && y === y1) continue;\n\n // brightness delta between the center pixel and adjacent one\n const delta = colorDelta(img, img, pos * 4, (y * width + x) * 4, true);\n\n // count the number of equal, darker and brighter adjacent pixels\n if (delta === 0) {\n zeroes++;\n // if found more than 2 equal siblings, it's definitely not anti-aliasing\n if (zeroes > 2) return false;\n\n // remember the darkest pixel\n } else if (delta < min) {\n min = delta;\n minX = x;\n minY = y;\n\n // remember the brightest pixel\n } else if (delta > max) {\n max = delta;\n maxX = x;\n maxY = y;\n }\n }\n }\n\n // if there are no both darker and brighter pixels among siblings, it's not anti-aliasing\n if (min === 0 || max === 0) return false;\n\n // if either the darkest or the brightest pixel has 3+ equal siblings in both images\n // (definitely not anti-aliased), this pixel is anti-aliased\n return (hasManySiblings(a32, minX, minY, width, height) && hasManySiblings(b32, minX, minY, width, height)) ||\n (hasManySiblings(a32, maxX, maxY, width, height) && hasManySiblings(b32, maxX, maxY, width, height));\n}\n\n/**\n * Check if a pixel has 3+ adjacent pixels of the same color.\n * @param {Uint32Array} img\n * @param {number} x1\n * @param {number} y1\n * @param {number} width\n * @param {number} height\n */\nfunction hasManySiblings(img, x1, y1, width, height) {\n const x0 = Math.max(x1 - 1, 0);\n const y0 = Math.max(y1 - 1, 0);\n const x2 = Math.min(x1 + 1, width - 1);\n const y2 = Math.min(y1 + 1, height - 1);\n const val = img[y1 * width + x1];\n let zeroes = x1 === x0 || x1 === x2 || y1 === y0 || y1 === y2 ? 1 : 0;\n\n // go through 8 adjacent pixels\n for (let x = x0; x <= x2; x++) {\n for (let y = y0; y <= y2; y++) {\n if (x === x1 && y === y1) continue;\n zeroes += +(val === img[y * width + x]);\n if (zeroes > 2) return true;\n }\n }\n return false;\n}\n\n/**\n * Calculate color difference according to the paper \"Measuring perceived color difference\n * using YIQ NTSC transmission color space in mobile applications\" by Y. Kotsarenko and F. Ramos\n * @param {Uint8Array | Uint8ClampedArray} img1\n * @param {Uint8Array | Uint8ClampedArray} img2\n * @param {number} k\n * @param {number} m\n * @param {boolean} yOnly\n */\nfunction colorDelta(img1, img2, k, m, yOnly) {\n const r1 = img1[k];\n const g1 = img1[k + 1];\n const b1 = img1[k + 2];\n const a1 = img1[k + 3];\n const r2 = img2[m];\n const g2 = img2[m + 1];\n const b2 = img2[m + 2];\n const a2 = img2[m + 3];\n\n let dr = r1 - r2;\n let dg = g1 - g2;\n let db = b1 - b2;\n const da = a1 - a2;\n\n if (!dr && !dg && !db && !da) return 0;\n\n if (a1 < 255 || a2 < 255) { // blend pixels with background\n const rb = 48 + 159 * (k % 2);\n const gb = 48 + 159 * ((k / 1.618033988749895 | 0) % 2);\n const bb = 48 + 159 * ((k / 2.618033988749895 | 0) % 2);\n dr = (r1 * a1 - r2 * a2 - rb * da) / 255;\n dg = (g1 * a1 - g2 * a2 - gb * da) / 255;\n db = (b1 * a1 - b2 * a2 - bb * da) / 255;\n }\n\n const y = dr * 0.29889531 + dg * 0.58662247 + db * 0.11448223;\n\n if (yOnly) return y; // brightness difference only\n\n const i = dr * 0.59597799 - dg * 0.27417610 - db * 0.32180189;\n const q = dr * 0.21147017 - dg * 0.52261711 + db * 0.31114694;\n\n const delta = 0.5053 * y * y + 0.299 * i * i + 0.1957 * q * q;\n\n // encode whether the pixel lightens or darkens in the sign\n return y > 0 ? -delta : delta;\n}\n\n/**\n * @param {Uint8Array | Uint8ClampedArray} output\n * @param {number} pos\n * @param {number} r\n * @param {number} g\n * @param {number} b\n */\nfunction drawPixel(output, pos, r, g, b) {\n output[pos + 0] = r;\n output[pos + 1] = g;\n output[pos + 2] = b;\n output[pos + 3] = 255;\n}\n\n/**\n * @param {Uint8Array | Uint8ClampedArray} img\n * @param {number} i\n * @param {number} alpha\n * @param {Uint8Array | Uint8ClampedArray} output\n */\nfunction drawGrayPixel(img, i, alpha, output) {\n const val = 255 + (img[i] * 0.29889531 + img[i + 1] * 0.58662247 + img[i + 2] * 0.11448223 - 255) * alpha * img[i + 3] / 255;\n drawPixel(output, i, val, val, val);\n}\n", "import pixelmatch from \"pixelmatch\";\nimport { PNG } from \"pngjs\";\nimport { type XOR } from \"ts-xor\";\n\ntype ComparePngsResult = XOR<\n {\n equal: true;\n },\n {\n equal: false;\n diffPng: PNG;\n }\n>;\n\ntype ComparePngsParams = {\n png1: PNG;\n png2: PNG;\n threshold: number;\n antiAliasing: boolean;\n alpha: number;\n antiLiasingColor: [number, number, number];\n diffColor: [number, number, number];\n diffColorAlt: [number, number, number];\n diffMask: boolean;\n};\n\nexport function comparePngs({\n png1,\n png2,\n threshold,\n antiAliasing,\n alpha,\n antiLiasingColor,\n diffColor,\n diffColorAlt,\n diffMask,\n}: ComparePngsParams): ComparePngsResult {\n const { width, height } = png1;\n\n const diffPng = new PNG({ width, height });\n\n const numDiffPixels = pixelmatch(\n png1.data,\n png2.data,\n diffPng.data,\n width,\n height,\n {\n threshold,\n includeAA: antiAliasing,\n alpha,\n aaColor: antiLiasingColor,\n diffColor,\n diffColorAlt,\n diffMask,\n },\n );\n\n if (numDiffPixels <= 0) {\n return {\n equal: true,\n };\n }\n\n return {\n equal: false,\n diffPng,\n };\n}\n"],
5
+ "mappings": "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",
6
+ "names": ["require_chunkstream", "__commonJSMin", "exports", "module", "util", "Stream", "ChunkStream", "length", "callback", "data", "encoding", "dataBuffer", "read", "smallerBuf", "pos", "count", "buf", "len", "ex", "require_interlace", "__commonJSMin", "exports", "imagePasses", "width", "height", "images", "xLeftOver", "yLeftOver", "xRepeats", "yRepeats", "i", "pass", "passWidth", "passHeight", "j", "x", "y", "outerXLeftOver", "outerX", "outerYLeftOver", "outerY", "require_paeth_predictor", "__commonJSMin", "exports", "module", "left", "above", "upLeft", "paeth", "pLeft", "pAbove", "pUpLeft", "require_filter_parse", "__commonJSMin", "exports", "module", "interlaceUtils", "paethPredictor", "getByteWidth", "width", "bpp", "depth", "byteWidth", "Filter", "bitmapInfo", "dependencies", "height", "interlace", "passes", "i", "rawData", "unfilteredLine", "xComparison", "xBiggerThan", "x", "rawByte", "f1Left", "lastLine", "f2Up", "f3Up", "f3Left", "f3Add", "f4Up", "f4Left", "f4UpLeft", "f4Add", "filter", "currentImage", "require_filter_parse_async", "__commonJSMin", "exports", "module", "util", "ChunkStream", "Filter", "FilterAsync", "bitmapInfo", "buffers", "that", "buffer", "require_constants", "__commonJSMin", "exports", "module", "require_crc", "__commonJSMin", "exports", "module", "crcTable", "i", "currentCrc", "j", "CrcCalculator", "data", "buf", "crc", "require_parser", "__commonJSMin", "exports", "module", "constants", "CrcCalculator", "Parser", "options", "dependencies", "data", "signature", "i", "length", "type", "name", "ancillary", "fileCrc", "calcCrc", "width", "height", "depth", "colorType", "compr", "filter", "interlace", "bpp", "entries", "leftOverLength", "require_bitmapper", "__commonJSMin", "exports", "interlaceUtils", "pixelBppMapper", "pxData", "data", "pxPos", "rawPos", "pixel", "pixelBppCustomMapper", "pixelData", "maxBit", "bitRetriever", "depth", "leftOver", "split", "byte", "byte8", "byte7", "byte6", "byte5", "byte4", "byte3", "byte2", "byte1", "count", "returner", "mapImage8Bit", "image", "getPxPos", "bpp", "imageWidth", "imageHeight", "imagePass", "y", "x", "mapImageCustomBit", "bits", "bitmapInfo", "width", "height", "interlace", "images", "nonInterlacedPxPos", "imageIndex", "require_format_normaliser", "__commonJSMin", "exports", "module", "dePalette", "indata", "outdata", "width", "height", "palette", "pxPos", "y", "x", "color", "i", "replaceTransparentColor", "transColor", "makeTrans", "scaleDepth", "depth", "maxOutSample", "maxInSample", "imageData", "skipRescale", "colorType", "require_parser_async", "__commonJSMin", "exports", "module", "util", "zlib", "ChunkStream", "FilterAsync", "Parser", "bitmapper", "formatNormaliser", "ParserAsync", "options", "err", "data", "imageSize", "chunkSize", "leftToInflate", "emitError", "filterWrite", "chunk", "metaData", "transColor", "palette", "filteredData", "normalisedBitmapData", "bitmapData", "ex", "require_bitpacker", "__commonJSMin", "exports", "module", "constants", "dataIn", "width", "height", "options", "outHasAlpha", "bigEndian", "buffer", "data", "maxValue", "inBpp", "outBpp", "outData", "inIndex", "outIndex", "bgColor", "getRGBA", "red", "green", "blue", "alpha", "y", "x", "rgba", "grayscale", "require_filter_pack", "__commonJSMin", "exports", "module", "paethPredictor", "filterNone", "pxData", "pxPos", "byteWidth", "rawData", "rawPos", "x", "filterSumNone", "sum", "length", "i", "filterSub", "bpp", "left", "val", "filterSumSub", "filterUp", "up", "filterSumUp", "filterAvg", "filterSumAvg", "filterPaeth", "upleft", "filterSumPaeth", "filters", "filterSums", "width", "height", "options", "filterTypes", "sel", "y", "min", "require_packer", "__commonJSMin", "exports", "module", "constants", "CrcStream", "bitPacker", "filter", "zlib", "Packer", "options", "data", "width", "height", "packedData", "bpp", "type", "len", "buf", "gamma", "require_packer_async", "__commonJSMin", "exports", "module", "util", "Stream", "constants", "Packer", "PackerAsync", "opt", "options", "data", "width", "height", "gamma", "filteredData", "compressedData", "require_sync_inflate", "__commonJSMin", "exports", "module", "assert", "zlib", "util", "kMaxLength", "Inflate", "opts", "createInflate", "_close", "engine", "callback", "chunk", "flushFlag", "asyncCb", "self", "availInBefore", "availOutBefore", "leftToInflate", "inOff", "buffers", "nread", "error", "err", "handleChunk", "availInAfter", "availOutAfter", "have", "out", "res", "buf", "zlibBufferSync", "buffer", "inflateSync", "require_sync_reader", "__commonJSMin", "exports", "module", "SyncReader", "buffer", "length", "callback", "read", "buf", "require_filter_parse_sync", "__commonJSMin", "exports", "SyncReader", "Filter", "inBuffer", "bitmapInfo", "outBuffers", "reader", "bufferPart", "require_parser_sync", "__commonJSMin", "exports", "module", "hasSyncZlib", "zlib", "inflateSync", "SyncReader", "FilterSync", "Parser", "bitmapper", "formatNormaliser", "buffer", "options", "err", "handleError", "_err_", "metaData", "handleMetaData", "_metaData_", "handleTransColor", "transColor", "handlePalette", "palette", "handleSimpleTransparency", "gamma", "handleGamma", "_gamma_", "inflateDataList", "handleInflateData", "inflatedData", "reader", "inflateData", "imageSize", "unfilteredData", "bitmapData", "normalisedBitmapData", "require_packer_sync", "__commonJSMin", "exports", "module", "hasSyncZlib", "zlib", "constants", "Packer", "metaData", "opt", "options", "packer", "chunks", "filteredData", "compressedData", "require_png_sync", "__commonJSMin", "exports", "parse", "pack", "buffer", "options", "png", "require_png", "__commonJSMin", "exports", "util", "Stream", "Parser", "Packer", "PNGSync", "PNG", "options", "data", "callback", "onParsed", "onError", "parsedData", "err", "metadata", "gamma", "src", "dst", "srcX", "srcY", "width", "height", "deltaX", "deltaY", "y", "x", "idx", "i", "sample", "import_pngjs", "getDocument", "import_pngjs", "createCanvas", "convertPdfToPngs", "pdf", "scale", "numPages", "pageNumbers", "_", "i", "pageNumber", "page", "viewport", "canvas", "canvasContext", "pngBuffer", "pixelmatch", "img1", "img2", "output", "width", "height", "options", "threshold", "alpha", "aaColor", "diffColor", "includeAA", "diffColorAlt", "diffMask", "isPixelData", "len", "a32", "b32", "identical", "i", "drawGrayPixel", "maxDelta", "aaR", "aaG", "aaB", "diffR", "diffG", "diffB", "altR", "altG", "altB", "diff", "y", "x", "pos", "delta", "colorDelta", "isAA", "antialiased", "drawPixel", "arr", "img", "x1", "y1", "x0", "y0", "x2", "y2", "zeroes", "min", "max", "minX", "minY", "maxX", "maxY", "hasManySiblings", "val", "k", "m", "yOnly", "r1", "g1", "b1", "a1", "r2", "g2", "b2", "a2", "dr", "dg", "db", "da", "rb", "gb", "bb", "q", "g", "b", "import_pngjs", "comparePngs", "png1", "png2", "threshold", "antiAliasing", "alpha", "antiLiasingColor", "diffColor", "diffColorAlt", "diffMask", "width", "height", "diffPng", "pixelmatch", "DEFAULT_COMPARE_PDFS_OPTIONS", "comparePdfs", "file1", "file2", "options", "pngScale", "considerAntiAliasing", "includeDiffMask", "diffThreshold", "diffAlpha", "diffAntiAliasingColor", "diffColor", "diffColorAlt", "file1Converted", "file2Converted", "pdf1", "getDocument", "pdf2", "pngs1", "convertPdfToPngs", "pngs2", "diffs", "png1", "index", "pageNumber", "png2", "equal", "diffPng", "comparePngs", "diffPageCount"]
7
+ }
@@ -0,0 +1,71 @@
1
+ import type { XOR } from "ts-xor";
2
+ export declare const DEFAULT_COMPARE_PDFS_OPTIONS: ComparePdfsOptions;
3
+ export type ComparePdfsOptions = {
4
+ /**
5
+ * The scale factor to use when rendering PDF pages to PNG images. Higher values result in higher fidelity
6
+ * images but increase processing time and memory usage. Default is 1.0.
7
+ */
8
+ pngScale: number;
9
+ /**
10
+ * Whether to consider anti-aliasing when comparing images. Default is false.
11
+ */
12
+ considerAntiAliasing: boolean;
13
+ /**
14
+ * Whether to include a diff mask in the output diff images. Default is false.
15
+ */
16
+ includeDiffMask: boolean;
17
+ /**
18
+ * The threshold for pixel color differences to be considered significant. Ranges from 0 to 1, where 0 means
19
+ * any difference is significant and 1 means only completely different colors are significant. Default is 0.1.
20
+ */
21
+ diffThreshold: number;
22
+ /**
23
+ * The alpha transparency value to use for the diff overlay. Ranges from 0 (fully transparent) to 1 (fully opaque).
24
+ * Default is 0.1.
25
+ */
26
+ diffAlpha: number;
27
+ /**
28
+ * The RGB color to use for highlighting anti-aliased pixels in the diff image. Default is yellow [255, 255, 0].
29
+ */
30
+ diffAntiAliasingColor: [number, number, number];
31
+ /**
32
+ * The RGB color to use for highlighting differences in the diff image. Default is red [255, 0, 0].
33
+ */
34
+ diffColor: [number, number, number];
35
+ /**
36
+ * The RGB color to use as an alternative for highlighting differences in the diff image. Default is red [255, 0, 0].
37
+ */
38
+ diffColorAlt: [number, number, number];
39
+ };
40
+ export type ComparePdfsResult = XOR<{
41
+ equal: true;
42
+ }, {
43
+ equal: false;
44
+ /**
45
+ * An array of diff objects containing the diff image and the page number of the diff.
46
+ */
47
+ diffs: PageDiff[];
48
+ /**
49
+ * Indicates whether the two PDFs have a different number of pages.
50
+ */
51
+ diffPageCount: boolean;
52
+ }>;
53
+ export type PageDiff = {
54
+ /**
55
+ * The page number (1-based index) where the difference was found.
56
+ */
57
+ pageNumber: number;
58
+ /**
59
+ * A Buffer containing the PNG image data highlighting the differences for the page.
60
+ */
61
+ diffPng: Buffer;
62
+ };
63
+ /**
64
+ * Compares two PDF files provided as Buffers using image pixel comparison and returns whether they
65
+ * are equal along with any diffs.
66
+ * @param file1 - Buffer containing the first PDF file.
67
+ * @param file2 - Buffer containing the second PDF file.
68
+ * @param options - Optional comparison settings.
69
+ * @returns A promise that resolves to a `ComparePdfsResult` indicating if the PDFs are equal and any diffs.
70
+ */
71
+ export declare function comparePdfs(file1: Buffer, file2: Buffer, options?: Partial<ComparePdfsOptions>): Promise<ComparePdfsResult>;
@@ -0,0 +1,21 @@
1
+ import { PNG } from "pngjs";
2
+ import { type XOR } from "ts-xor";
3
+ type ComparePngsResult = XOR<{
4
+ equal: true;
5
+ }, {
6
+ equal: false;
7
+ diffPng: PNG;
8
+ }>;
9
+ type ComparePngsParams = {
10
+ png1: PNG;
11
+ png2: PNG;
12
+ threshold: number;
13
+ antiAliasing: boolean;
14
+ alpha: number;
15
+ antiLiasingColor: [number, number, number];
16
+ diffColor: [number, number, number];
17
+ diffColorAlt: [number, number, number];
18
+ diffMask: boolean;
19
+ };
20
+ export declare function comparePngs({ png1, png2, threshold, antiAliasing, alpha, antiLiasingColor, diffColor, diffColorAlt, diffMask, }: ComparePngsParams): ComparePngsResult;
21
+ export {};
@@ -0,0 +1,8 @@
1
+ import { type PDFDocumentProxy } from "pdfjs-dist/legacy/build/pdf.mjs";
2
+ import { PNG } from "pngjs";
3
+ type ConvertPdfToPngsParams = {
4
+ pdf: PDFDocumentProxy;
5
+ scale: number;
6
+ };
7
+ export declare function convertPdfToPngs({ pdf, scale, }: ConvertPdfToPngsParams): Promise<PNG[]>;
8
+ export {};
@@ -0,0 +1,3 @@
1
+ export * from "./comparePdfs";
2
+ export * from "./convertPdfToPngs";
3
+ export * from "./comparePngs";
@@ -0,0 +1,2 @@
1
+ export { comparePdfs, DEFAULT_COMPARE_PDFS_OPTIONS } from "./functions";
2
+ export type { ComparePdfsOptions, ComparePdfsResult, PageDiff, } from "./functions";
@@ -0,0 +1 @@
1
+ export {};
package/package.json CHANGED
@@ -1,8 +1,11 @@
1
1
  {
2
2
  "name": "compare-pdf-ts",
3
- "version": "0.0.1",
3
+ "version": "0.0.2",
4
4
  "author": "DirtCheapDeeds",
5
- "repository": "https://github.com/DirtCheapDeeds/compare-pdf-ts",
5
+ "repository": {
6
+ "type": "git",
7
+ "url": "git+https://github.com/DirtCheapDeeds/compare-pdf-ts.git"
8
+ },
6
9
  "description": "In-memory PDF comparison tool designed for Node.js environments.",
7
10
  "license": "MIT",
8
11
  "keywords": [