@etu-wiki/sharp-iiif-shims 0.0.97 → 0.0.98
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.
- package/dist/index.js +1 -1
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
`;function Zo(A){if(typeof Object.fromEntries<"u")return Object.fromEntries(A);let t={};for(let[e,i]of A)t[e.toLowerCase()]=i;return t}function Nl(A){let t=A.split(`\r
|
|
6
6
|
`).map(e=>{let i=e.split(":").map(r=>r.trim());return i[0]=i[0].toLowerCase(),i});return Zo(t)}function Xo(A){let[t,...e]=A.split(";").map(r=>r.trim()),i=e.map(r=>r.split("="));return{type:t,params:Zo(i)}}function Gt(A){let t,e,i;return A&&([,t,e,i]=A.match(/bytes (\d+)-(\d+)\/(\d+)/),t=parseInt(t,10),e=parseInt(e,10),i=parseInt(i,10)),{start:t,end:e,total:i}}function jo(A,t){let e=null,i=new TextDecoder("ascii"),r=[],n=`--${t}`,l=`${n}--`;for(let s=0;s<10;++s)i.decode(new Uint8Array(A,s,n.length))===n&&(e=s);if(e===null)throw new Error("Could not find initial boundary");for(;e<A.byteLength;){let s=i.decode(new Uint8Array(A,e,Math.min(n.length+1024,A.byteLength-e)));if(s.length===0||s.startsWith(l))break;if(!s.startsWith(n))throw new Error("Part does not start with boundary");let f=s.substr(n.length+2);if(f.length===0)break;let o=f.indexOf(Vo),a=Nl(f.substr(0,o)),{start:h,end:I,total:g}=Gt(a["content-range"]),c=e+n.length+o+Vo.length,B=parseInt(I,10)+1-parseInt(h,10);r.push({headers:a,data:A.slice(c,c+B),offset:h,length:B,fileSize:g}),e=c+B+4}return r}var he=class{async fetch(t,e=void 0){return Promise.all(t.map(i=>this.fetchSlice(i,e)))}async fetchSlice(t){throw new Error(`fetching of slice ${t} not possible, not implemented`)}get fileSize(){return null}async close(){}};var qe=class extends Map{constructor(t={}){if(super(),!(t.maxSize&&t.maxSize>0))throw new TypeError("`maxSize` must be a number greater than 0");if(typeof t.maxAge=="number"&&t.maxAge===0)throw new TypeError("`maxAge` must be a number greater than 0");this.maxSize=t.maxSize,this.maxAge=t.maxAge||Number.POSITIVE_INFINITY,this.onEviction=t.onEviction,this.cache=new Map,this.oldCache=new Map,this._size=0}_emitEvictions(t){if(typeof this.onEviction=="function")for(let[e,i]of t)this.onEviction(e,i.value)}_deleteIfExpired(t,e){return typeof e.expiry=="number"&&e.expiry<=Date.now()?(typeof this.onEviction=="function"&&this.onEviction(t,e.value),this.delete(t)):!1}_getOrDeleteIfExpired(t,e){if(this._deleteIfExpired(t,e)===!1)return e.value}_getItemValue(t,e){return e.expiry?this._getOrDeleteIfExpired(t,e):e.value}_peek(t,e){let i=e.get(t);return this._getItemValue(t,i)}_set(t,e){this.cache.set(t,e),this._size++,this._size>=this.maxSize&&(this._size=0,this._emitEvictions(this.oldCache),this.oldCache=this.cache,this.cache=new Map)}_moveToRecent(t,e){this.oldCache.delete(t),this._set(t,e)}*_entriesAscending(){for(let t of this.oldCache){let[e,i]=t;this.cache.has(e)||this._deleteIfExpired(e,i)===!1&&(yield t)}for(let t of this.cache){let[e,i]=t;this._deleteIfExpired(e,i)===!1&&(yield t)}}get(t){if(this.cache.has(t)){let e=this.cache.get(t);return this._getItemValue(t,e)}if(this.oldCache.has(t)){let e=this.oldCache.get(t);if(this._deleteIfExpired(t,e)===!1)return this._moveToRecent(t,e),e.value}}set(t,e,{maxAge:i=this.maxAge}={}){let r=typeof i=="number"&&i!==Number.POSITIVE_INFINITY?Date.now()+i:void 0;return this.cache.has(t)?this.cache.set(t,{value:e,expiry:r}):this._set(t,{value:e,expiry:r}),this}has(t){return this.cache.has(t)?!this._deleteIfExpired(t,this.cache.get(t)):this.oldCache.has(t)?!this._deleteIfExpired(t,this.oldCache.get(t)):!1}peek(t){if(this.cache.has(t))return this._peek(t,this.cache);if(this.oldCache.has(t))return this._peek(t,this.oldCache)}delete(t){let e=this.cache.delete(t);return e&&this._size--,this.oldCache.delete(t)||e}clear(){this.cache.clear(),this.oldCache.clear(),this._size=0}resize(t){if(!(t&&t>0))throw new TypeError("`maxSize` must be a number greater than 0");let e=[...this._entriesAscending()],i=e.length-t;i<0?(this.cache=new Map(e),this.oldCache=new Map,this._size=e.length):(i>0&&this._emitEvictions(e.slice(0,i)),this.oldCache=new Map(e.slice(i)),this.cache=new Map,this._size=0),this.maxSize=t}*keys(){for(let[t]of this)yield t}*values(){for(let[,t]of this)yield t}*[Symbol.iterator](){for(let t of this.cache){let[e,i]=t;this._deleteIfExpired(e,i)===!1&&(yield[e,i.value])}for(let t of this.oldCache){let[e,i]=t;this.cache.has(e)||this._deleteIfExpired(e,i)===!1&&(yield[e,i.value])}}*entriesDescending(){let t=[...this.cache];for(let e=t.length-1;e>=0;--e){let i=t[e],[r,n]=i;this._deleteIfExpired(r,n)===!1&&(yield[r,n.value])}t=[...this.oldCache];for(let e=t.length-1;e>=0;--e){let i=t[e],[r,n]=i;this.cache.has(r)||this._deleteIfExpired(r,n)===!1&&(yield[r,n.value])}}*entriesAscending(){for(let[t,e]of this._entriesAscending())yield[t,e.value]}get size(){if(!this._size)return this.oldCache.size;let t=0;for(let e of this.oldCache.keys())this.cache.has(e)||t++;return Math.min(this._size+t,this.maxSize)}entries(){return this.entriesAscending()}forEach(t,e=this){for(let[i,r]of this.entriesAscending())t.call(e,r,i,this)}get[Symbol.toStringTag](){return JSON.stringify([...this.entriesAscending()])}};async function $o(A){return new Promise(t=>setTimeout(t,A))}function Wo(A,t){let e=Array.isArray(A)?A:Array.from(A),i=Array.isArray(t)?t:Array.from(t);return e.map((r,n)=>[r,i[n]])}var CA=class extends Error{constructor(t){super(t),Error.captureStackTrace&&Error.captureStackTrace(this,CA),this.name="AbortError"}},Ki=class extends Error{constructor(t,e){super(e),this.errors=t,this.message=e,this.name="AggregateError"}},Aa=Ki;var Pi=class{constructor(t,e,i=null){this.offset=t,this.length=e,this.data=i}get top(){return this.offset+this.length}},Mt=class{constructor(t,e,i){this.offset=t,this.length=e,this.blockIds=i}},Lt=class extends he{constructor(t,{blockSize:e=65536,cacheSize:i=100}={}){super(),this.source=t,this.blockSize=e,this.blockCache=new qe({maxSize:i,onEviction:(r,n)=>{this.evictedBlocks.set(r,n)}}),this.evictedBlocks=new Map,this.blockRequests=new Map,this.blockIdsToFetch=new Set,this.abortedBlockIds=new Set}get fileSize(){return this.source.fileSize}async fetch(t,e){let i=[],r=[],n=[];this.evictedBlocks.clear();for(let{offset:I,length:g}of t){let c=I+g,{fileSize:B}=this;B!==null&&(c=Math.min(c,B));let C=Math.floor(I/this.blockSize)*this.blockSize;for(let d=C;d<c;d+=this.blockSize){let E=Math.floor(d/this.blockSize);!this.blockCache.has(E)&&!this.blockRequests.has(E)&&(this.blockIdsToFetch.add(E),r.push(E)),this.blockRequests.has(E)&&i.push(this.blockRequests.get(E)),n.push(E)}}await $o(),this.fetchBlocks(e);let l=[];for(let I of r)this.blockRequests.has(I)&&l.push(this.blockRequests.get(I));await Promise.allSettled(i),await Promise.allSettled(l);let s=[],f=n.filter(I=>this.abortedBlockIds.has(I)||!this.blockCache.has(I));if(f.forEach(I=>this.blockIdsToFetch.add(I)),f.length>0&&e&&!e.aborted){this.fetchBlocks(null);for(let I of f){let g=this.blockRequests.get(I);if(!g)throw new Error(`Block ${I} is not in the block requests`);s.push(g)}await Promise.allSettled(s)}if(e&&e.aborted)throw new CA("Request was aborted");let o=n.map(I=>this.blockCache.get(I)||this.evictedBlocks.get(I)),a=o.filter(I=>!I);if(a.length)throw new Aa(a,"Request failed");let h=new Map(Wo(n,o));return this.readSliceData(t,h)}fetchBlocks(t){if(this.blockIdsToFetch.size>0){let e=this.groupBlocks(this.blockIdsToFetch),i=this.source.fetch(e,t);for(let r=0;r<e.length;++r){let n=e[r];for(let l of n.blockIds)this.blockRequests.set(l,(async()=>{try{let s=(await i)[r],f=l*this.blockSize,o=f-s.offset,a=Math.min(o+this.blockSize,s.data.byteLength),h=s.data.slice(o,a),I=new Pi(f,h.byteLength,h,l);this.blockCache.set(l,I),this.abortedBlockIds.delete(l)}catch(s){if(s.name==="AbortError")s.signal=t,this.blockCache.delete(l),this.abortedBlockIds.add(l);else throw s}finally{this.blockRequests.delete(l)}})())}this.blockIdsToFetch.clear()}}groupBlocks(t){let e=Array.from(t).sort((l,s)=>l-s);if(e.length===0)return[];let i=[],r=null,n=[];for(let l of e)r===null||r+1===l?(i.push(l),r=l):(n.push(new Mt(i[0]*this.blockSize,i.length*this.blockSize,i)),i=[l],r=l);return n.push(new Mt(i[0]*this.blockSize,i.length*this.blockSize,i)),n}readSliceData(t,e){return t.map(i=>{let r=i.offset+i.length;this.fileSize!==null&&(r=Math.min(this.fileSize,r));let n=Math.floor(i.offset/this.blockSize),l=Math.floor(r/this.blockSize),s=new ArrayBuffer(i.length),f=new Uint8Array(s);for(let o=n;o<=l;++o){let a=e.get(o),h=a.offset-i.offset,I=a.top-r,g=0,c=0,B;h<0?g=-h:h>0&&(c=h),I<0?B=a.length-g:B=r-a.offset-g;let C=new Uint8Array(a.data,g,B);f.set(C,c)}return s})}};var qA=class{get ok(){return this.status>=200&&this.status<=299}get status(){throw new Error("not implemented")}getHeader(t){throw new Error("not implemented")}async getData(){throw new Error("not implemented")}},HA=class{constructor(t){this.url=t}async request({headers:t,signal:e}={}){throw new Error("request is not implemented")}};var Vi=class extends qA{constructor(t){super(),this.response=t}get status(){return this.response.status}getHeader(t){return this.response.headers.get(t)}async getData(){return this.response.arrayBuffer?await this.response.arrayBuffer():(await this.response.buffer()).buffer}},Nt=class extends HA{constructor(t,e){super(t),this.credentials=e}async request({headers:t,signal:e}={}){let i=await fetch(this.url,{headers:t,credentials:this.credentials,signal:e});return new Vi(i)}};var Zi=class extends qA{constructor(t,e){super(),this.xhr=t,this.data=e}get status(){return this.xhr.status}getHeader(t){return this.xhr.getResponseHeader(t)}async getData(){return this.data}},Tt=class extends HA{constructRequest(t,e){return new Promise((i,r)=>{let n=new XMLHttpRequest;n.open("GET",this.url),n.responseType="arraybuffer";for(let[l,s]of Object.entries(t))n.setRequestHeader(l,s);n.onload=()=>{let l=n.response;i(new Zi(n,l))},n.onerror=r,n.onabort=()=>r(new CA("Request aborted")),n.send(),e&&(e.aborted&&n.abort(),e.addEventListener("abort",()=>n.abort()))})}async request({headers:t,signal:e}={}){return await this.constructRequest(t,e)}};var ea=UA(require("http"),1),ta=UA(require("https"),1),ia=UA(require("url"),1);var Xi=class extends qA{constructor(t,e){super(),this.response=t,this.dataPromise=e}get status(){return this.response.statusCode}getHeader(t){return this.response.headers[t]}async getData(){return await this.dataPromise}},Ot=class extends HA{constructor(t){super(t),this.parsedUrl=ia.default.parse(this.url),this.httpApi=this.parsedUrl.protocol==="http:"?ea.default:ta.default}constructRequest(t,e){return new Promise((i,r)=>{let n=this.httpApi.get({...this.parsedUrl,headers:t},l=>{let s=new Promise(f=>{let o=[];l.on("data",a=>{o.push(a)}),l.on("end",()=>{let a=Buffer.concat(o).buffer;f(a)}),l.on("error",r)});i(new Xi(l,s))});n.on("error",r),e&&(e.aborted&&n.destroy(new CA("Request aborted")),e.addEventListener("abort",()=>n.destroy(new CA("Request aborted"))))})}async request({headers:t,signal:e}={}){return await this.constructRequest(t,e)}};var He=class extends he{constructor(t,e,i,r){super(),this.client=t,this.headers=e,this.maxRanges=i,this.allowFullFile=r,this._fileSize=null}async fetch(t,e){return this.maxRanges>=t.length?this.fetchSlices(t,e):(this.maxRanges>0&&t.length>1,Promise.all(t.map(i=>this.fetchSlice(i,e))))}async fetchSlices(t,e){let i=await this.client.request({headers:{...this.headers,Range:`bytes=${t.map(({offset:r,length:n})=>`${r}-${r+n}`).join(",")}`},signal:e});if(i.ok)if(i.status===206){let{type:r,params:n}=Xo(i.getHeader("content-type"));if(r==="multipart/byteranges"){let h=jo(await i.getData(),n.boundary);return this._fileSize=h[0].fileSize||null,h}let l=await i.getData(),{start:s,end:f,total:o}=Gt(i.getHeader("content-range"));this._fileSize=o||null;let a=[{data:l,offset:s,length:f-s}];if(t.length>1){let h=await Promise.all(t.slice(1).map(I=>this.fetchSlice(I,e)));return a.concat(h)}return a}else{if(!this.allowFullFile)throw new Error("Server responded with full file");let r=await i.getData();return this._fileSize=r.byteLength,[{data:r,offset:0,length:r.byteLength}]}else throw new Error("Error fetching data.")}async fetchSlice(t,e){let{offset:i,length:r}=t,n=await this.client.request({headers:{...this.headers,Range:`bytes=${i}-${i+r}`},signal:e});if(n.ok)if(n.status===206){let l=await n.getData(),{total:s}=Gt(n.getHeader("content-range"));return this._fileSize=s||null,{data:l,offset:i,length:r}}else{if(!this.allowFullFile)throw new Error("Server responded with full file");let l=await n.getData();return this._fileSize=l.byteLength,{data:l,offset:0,length:l.byteLength}}else throw new Error("Error fetching data.")}get fileSize(){return this._fileSize}};function ji(A,{blockSize:t,cacheSize:e}){return t===null?A:new Lt(A,{blockSize:t,cacheSize:e})}function Tl(A,{headers:t={},credentials:e,maxRanges:i=0,allowFullFile:r=!1,...n}={}){let l=new Nt(A,e),s=new He(l,t,i,r);return ji(s,n)}function Ol(A,{headers:t={},maxRanges:e=0,allowFullFile:i=!1,...r}={}){let n=new Tt(A),l=new He(n,t,e,i);return ji(l,r)}function ql(A,{headers:t={},maxRanges:e=0,allowFullFile:i=!1,...r}={}){let n=new Ot(A),l=new He(n,t,e,i);return ji(l,r)}function ra(A,{forceXHR:t=!1,...e}={}){return typeof fetch=="function"&&!t?Tl(A,e):typeof XMLHttpRequest<"u"?Ol(A,e):ql(A,e)}it();_A();function $i(A){switch(A){case O.BYTE:case O.ASCII:case O.SBYTE:case O.UNDEFINED:return 1;case O.SHORT:case O.SSHORT:return 2;case O.LONG:case O.SLONG:case O.FLOAT:case O.IFD:return 4;case O.RATIONAL:case O.SRATIONAL:case O.DOUBLE:case O.LONG8:case O.SLONG8:case O.IFD8:return 8;default:throw new RangeError(`Invalid field type: ${A}`)}}function Hl(A){let t=A.GeoKeyDirectory;if(!t)return null;let e={};for(let i=4;i<=t[3]*4;i+=4){let r=ue[t[i]],n=t[i+1]?te[t[i+1]]:null,l=t[i+2],s=t[i+3],f=null;if(!n)f=s;else{if(f=A[n],typeof f>"u"||f===null)throw new Error(`Could not get value of geoKey '${r}'.`);typeof f=="string"?f=f.substring(s,s+l-1):f.subarray&&(f=f.subarray(s,s+l),l===1&&(f=f[0]))}e[r]=f}return e}function Be(A,t,e,i){let r=null,n=null,l=$i(t);switch(t){case O.BYTE:case O.ASCII:case O.UNDEFINED:r=new Uint8Array(e),n=A.readUint8;break;case O.SBYTE:r=new Int8Array(e),n=A.readInt8;break;case O.SHORT:r=new Uint16Array(e),n=A.readUint16;break;case O.SSHORT:r=new Int16Array(e),n=A.readInt16;break;case O.LONG:case O.IFD:r=new Uint32Array(e),n=A.readUint32;break;case O.SLONG:r=new Int32Array(e),n=A.readInt32;break;case O.LONG8:case O.IFD8:r=new Array(e),n=A.readUint64;break;case O.SLONG8:r=new Array(e),n=A.readInt64;break;case O.RATIONAL:r=new Uint32Array(e*2),n=A.readUint32;break;case O.SRATIONAL:r=new Int32Array(e*2),n=A.readInt32;break;case O.FLOAT:r=new Float32Array(e),n=A.readFloat32;break;case O.DOUBLE:r=new Float64Array(e),n=A.readFloat64;break;default:throw new RangeError(`Invalid field type: ${t}`)}if(t===O.RATIONAL||t===O.SRATIONAL)for(let s=0;s<e;s+=2)r[s]=n.call(A,i+s*l),r[s+1]=n.call(A,i+(s*l+4));else for(let s=0;s<e;++s)r[s]=n.call(A,i+s*l);return t===O.ASCII?new TextDecoder("utf-8").decode(r):r}var Wi=class{constructor(t,e,i){this.fileDirectory=t,this.geoKeyDirectory=e,this.nextIFDByteOffset=i}},Ce=class extends Error{constructor(t){super(`No image at index ${t}`),this.index=t}},Ar=class{async readRasters(t={}){let{window:e,width:i,height:r}=t,{resX:n,resY:l,bbox:s}=t,f=await this.getImage(),o=f,a=await this.getImageCount(),h=f.getBoundingBox();if(e&&s)throw new Error('Both "bbox" and "window" passed.');if(i||r){if(e){let[c,B]=f.getOrigin(),[C,d]=f.getResolution();s=[c+e[0]*C,B+e[1]*d,c+e[2]*C,B+e[3]*d]}let g=s||h;if(i){if(n)throw new Error("Both width and resX passed");n=(g[2]-g[0])/i}if(r){if(l)throw new Error("Both width and resY passed");l=(g[3]-g[1])/r}}if(n||l){let g=[];for(let c=0;c<a;++c){let B=await this.getImage(c),{SubfileType:C,NewSubfileType:d}=B.fileDirectory;(c===0||C===2||d&1)&&g.push(B)}g.sort((c,B)=>c.getWidth()-B.getWidth());for(let c=0;c<g.length;++c){let B=g[c],C=(h[2]-h[0])/B.getWidth(),d=(h[3]-h[1])/B.getHeight();if(o=B,n&&n>C||l&&l>d)break}}let I=e;if(s){let[g,c]=f.getOrigin(),[B,C]=o.getResolution(f);I=[Math.round((s[0]-g)/B),Math.round((s[1]-c)/C),Math.round((s[2]-g)/B),Math.round((s[3]-c)/C)],I=[Math.min(I[0],I[2]),Math.min(I[1],I[3]),Math.max(I[0],I[2]),Math.max(I[1],I[3])]}return o.readRasters({...t,window:I})}},Ye=class extends Ar{constructor(t,e,i,r,n={}){super(),this.source=t,this.littleEndian=e,this.bigTiff=i,this.firstIFDOffset=r,this.cache=n.cache||!1,this.ifdRequests=[],this.ghostValues=null}async getSlice(t,e){let i=this.bigTiff?4048:1024;return new Oe((await this.source.fetch([{offset:t,length:typeof e<"u"?e:i}]))[0],t,this.littleEndian,this.bigTiff)}async parseFileDirectoryAt(t){let e=this.bigTiff?20:12,i=this.bigTiff?8:2,r=await this.getSlice(t),n=this.bigTiff?r.readUint64(t):r.readUint16(t),l=n*e+(this.bigTiff?16:6);r.covers(t,l)||(r=await this.getSlice(t,l));let s={},f=t+(this.bigTiff?8:2);for(let h=0;h<n;f+=e,++h){let I=r.readUint16(f),g=r.readUint16(f+2),c=this.bigTiff?r.readUint64(f+4):r.readUint32(f+4),B,C,d=$i(g),E=f+(this.bigTiff?12:8);if(d*c<=(this.bigTiff?8:4))B=Be(r,g,c,E);else{let w=r.readOffset(E),p=$i(g)*c;if(r.covers(w,p))B=Be(r,g,c,w);else{let Q=await this.getSlice(w,p);B=Be(Q,g,c,w)}}c===1&&Jr.indexOf(I)===-1&&!(g===O.RATIONAL||g===O.SRATIONAL)?C=B[0]:C=B,s[te[I]]=C}let o=Hl(s),a=r.readOffset(t+i+e*n);return new Wi(s,o,a)}async requestIFD(t){if(this.ifdRequests[t])return this.ifdRequests[t];if(t===0)return this.ifdRequests[t]=this.parseFileDirectoryAt(this.firstIFDOffset),this.ifdRequests[t];if(!this.ifdRequests[t-1])try{this.ifdRequests[t-1]=this.requestIFD(t-1)}catch(e){throw e instanceof Ce?new Ce(t):e}return this.ifdRequests[t]=(async()=>{let e=await this.ifdRequests[t-1];if(e.nextIFDByteOffset===0)throw new Ce(t);return this.parseFileDirectoryAt(e.nextIFDByteOffset)})(),this.ifdRequests[t]}async getImage(t=0){let e=await this.requestIFD(t);return new Po(e.fileDirectory,e.geoKeyDirectory,this.dataView,this.littleEndian,this.cache,this.source)}async getImageCount(){let t=0,e=!0;for(;e;)try{await this.requestIFD(t),++t}catch(i){if(i instanceof Ce)e=!1;else throw i}return t}async getGhostValues(){let t=this.bigTiff?16:8;if(this.ghostValues)return this.ghostValues;let e="GDAL_STRUCTURAL_METADATA_SIZE=",i=e.length+100,r=await this.getSlice(t,i);if(e===Be(r,O.ASCII,e.length,t)){let l=Be(r,O.ASCII,i,t).split(`
|
|
7
7
|
`)[0],s=Number(l.split("=")[1].split(" ")[0])+l.length;s>i&&(r=await this.getSlice(t,s));let f=Be(r,O.ASCII,s,t);this.ghostValues={},f.split(`
|
|
8
|
-
`).filter(o=>o.length>0).map(o=>o.split("=")).forEach(([o,a])=>{this.ghostValues[o]=a})}return this.ghostValues}static async fromSource(t,e,i){let r=(await t.fetch([{offset:0,length:1024}],i))[0],n=new Te(r),l=n.getUint16(0,0),s;if(l===18761)s=!0;else if(l===19789)s=!1;else throw new TypeError("Invalid byte order value.");let f=n.getUint16(2,s),o;if(f===42)o=!1;else if(f===43){if(o=!0,n.getUint16(4,s)!==8)throw new Error("Unsupported offset byte-size.")}else throw new TypeError("Invalid magic number.");let a=o?n.getUint64(8,s):n.getUint32(4,s);return new Ye(t,s,o,a,e)}close(){return typeof this.source.close=="function"?this.source.close():!1}};async function na(A,t={},e){return Ye.fromSource(ra(A,t),e)}var Yl=1e8,oa=1e4,aa=1e4,Jl=512,zl=512,Kl={2:["baseUriRedirect","canonicalLinkHeader","cors","jsonldMediaType","mirroring","profileLinkHeader","regionByPct","regionByPx","rotationArbitrary","rotationBy90s","sizeAboveFull","sizeByWhListed","sizeByForcedWh","sizeByH","sizeByPct","sizeByW","sizeByWh"],2.1:["baseUriRedirect","canonicalLinkHeader","cors","jsonldMediaType","mirroring","profileLinkHeader","regionByPct","regionByPx","regionSquare","rotationArbitrary","rotationBy90s","sizeAboveFull","sizeByConfinedWh","sizeByDistortedWh","sizeByH","sizeByPct","sizeByW","sizeByWh","sizeByWhListed","sizeByForcedWh"],3:["baseUriRedirect","canonicalLinkHeader","cors","jsonldMediaType","mirroring","profileLinkHeader","regionByPct","regionByPx","regionSquare","rotationArbitrary","rotationBy90s","sizeByConfinedWh","sizeByH","sizeByPct","sizeByW","sizeByWh","sizeUpscaling"]},er=class extends W{async decode(t,e){let i=Array.isArray(t.BitsPerSample)?t.BitsPerSample.length:t.SamplesPerPixel||4,r=(0,lA.default)(e,{sequentialRead:!0}),l=(await r.metadata()).channels||4;i===4&&l<4&&r.ensureAlpha?r=r.ensureAlpha():i===3&&l>3&&r.removeAlpha&&(r=r.removeAlpha());let{data:s,info:f}=await r.raw().toBuffer({resolveWithObject:!0});if(f.channels!==i){let o=f.width*f.height,a=Buffer.alloc(o*i),h=s;for(let I=0;I<o;I+=1){let g=I*f.channels,c=I*i;for(let B=0;B<i;B+=1)B<f.channels?a[c+B]=h[g+B]:a[c+B]=B===3?255:0}return a.buffer.slice(a.byteOffset,a.byteOffset+a.byteLength)}return s.buffer.slice(s.byteOffset,s.byteOffset+s.byteLength)}};BA(50001,()=>Promise.resolve(er));var Je=class extends sa.default{constructor(e,i,r=!1,n=Yl,l=oa,s=aa,f=Jl,o=zl){super(e,i,n,l,s,f,o);this.enableHD=r}regionImpl(e,i){e&&(i=i.extract({left:e.x,top:e.y,width:e.w,height:e.h}))}sizeImpl(e,i){e&&(i=i.resize({...e,fit:"fill"}))}rotationImpl(e,i){e&&(e.isMirror&&(i=i.flop()),i=i.rotate(e.degree))}qualityFormatImpl(e,i,r,n,l){e&&(e==="color"?r=r.toColorspace("srgb"):e==="gray"||e==="grey"?r=r.grayscale():e==="bitonal"&&(r=r.threshold())),i&&(r=r.toFormat(i)),n==="png"&&(l.paletteBitDepth===1||l.space==="b-w")&&(r=r.toColorspace("b-w").png({colors:2}))}async generateImageTile(e,i,r){let n=e.split("/"),l=n.pop(),s=l.split(".")[0],f=l.split(".")[1],o=n.pop(),a=n.pop(),h=n.pop(),I=n.pop(),g={width:i.width,height:i.height},c=super.normalizeRegionParams(h,g),B=super.normalizeSizeParams(a,{width:c?c.w:g.width,height:c?c.h:g.height}),{x:C,y:d,w:E,h:w}=c,{width:p,height:Q}=B,u=r+"/"+I,m=await na(u),y=await m.getImage();console.log(`Source dimensions: ${y.getWidth()} x ${y.getHeight()}`),console.log(`Extracting region: x=${C}, y=${d}, w=${E}, h=${w}`),console.log(`Output size: ${p} x ${Q}`);let k=await m.getImageCount();console.log(`Total images (including overviews): ${k}`);let x=E/p,b=w/Q,S=Math.max(x,b);console.log(`Scale factor: ${S.toFixed(2)}`);let N=y,D=0,_=C,R=d,T=E,F=w;if(k>1&&S>1){console.log("Looking for suitable overview...");for(let Y=1;Y<k;Y++){let K=Math.pow(2,Y),AA=Math.floor(y.getWidth()/K),nA=Math.floor(y.getHeight()/K);if(console.log(`Overview ${Y}: ${AA} x ${nA} (factor: ${K})`),K>=S&&(D===0||K<Math.pow(2,D))){D=Y-1;break}}if(D
|
|
8
|
+
`).filter(o=>o.length>0).map(o=>o.split("=")).forEach(([o,a])=>{this.ghostValues[o]=a})}return this.ghostValues}static async fromSource(t,e,i){let r=(await t.fetch([{offset:0,length:1024}],i))[0],n=new Te(r),l=n.getUint16(0,0),s;if(l===18761)s=!0;else if(l===19789)s=!1;else throw new TypeError("Invalid byte order value.");let f=n.getUint16(2,s),o;if(f===42)o=!1;else if(f===43){if(o=!0,n.getUint16(4,s)!==8)throw new Error("Unsupported offset byte-size.")}else throw new TypeError("Invalid magic number.");let a=o?n.getUint64(8,s):n.getUint32(4,s);return new Ye(t,s,o,a,e)}close(){return typeof this.source.close=="function"?this.source.close():!1}};async function na(A,t={},e){return Ye.fromSource(ra(A,t),e)}var Yl=1e8,oa=1e4,aa=1e4,Jl=512,zl=512,Kl={2:["baseUriRedirect","canonicalLinkHeader","cors","jsonldMediaType","mirroring","profileLinkHeader","regionByPct","regionByPx","rotationArbitrary","rotationBy90s","sizeAboveFull","sizeByWhListed","sizeByForcedWh","sizeByH","sizeByPct","sizeByW","sizeByWh"],2.1:["baseUriRedirect","canonicalLinkHeader","cors","jsonldMediaType","mirroring","profileLinkHeader","regionByPct","regionByPx","regionSquare","rotationArbitrary","rotationBy90s","sizeAboveFull","sizeByConfinedWh","sizeByDistortedWh","sizeByH","sizeByPct","sizeByW","sizeByWh","sizeByWhListed","sizeByForcedWh"],3:["baseUriRedirect","canonicalLinkHeader","cors","jsonldMediaType","mirroring","profileLinkHeader","regionByPct","regionByPx","regionSquare","rotationArbitrary","rotationBy90s","sizeByConfinedWh","sizeByH","sizeByPct","sizeByW","sizeByWh","sizeUpscaling"]},er=class extends W{async decode(t,e){let i=Array.isArray(t.BitsPerSample)?t.BitsPerSample.length:t.SamplesPerPixel||4,r=(0,lA.default)(e,{sequentialRead:!0}),l=(await r.metadata()).channels||4;i===4&&l<4&&r.ensureAlpha?r=r.ensureAlpha():i===3&&l>3&&r.removeAlpha&&(r=r.removeAlpha());let{data:s,info:f}=await r.raw().toBuffer({resolveWithObject:!0});if(f.channels!==i){let o=f.width*f.height,a=Buffer.alloc(o*i),h=s;for(let I=0;I<o;I+=1){let g=I*f.channels,c=I*i;for(let B=0;B<i;B+=1)B<f.channels?a[c+B]=h[g+B]:a[c+B]=B===3?255:0}return a.buffer.slice(a.byteOffset,a.byteOffset+a.byteLength)}return s.buffer.slice(s.byteOffset,s.byteOffset+s.byteLength)}};BA(50001,()=>Promise.resolve(er));var Je=class extends sa.default{constructor(e,i,r=!1,n=Yl,l=oa,s=aa,f=Jl,o=zl){super(e,i,n,l,s,f,o);this.enableHD=r}regionImpl(e,i){e&&(i=i.extract({left:e.x,top:e.y,width:e.w,height:e.h}))}sizeImpl(e,i){e&&(i=i.resize({...e,fit:"fill"}))}rotationImpl(e,i){e&&(e.isMirror&&(i=i.flop()),i=i.rotate(e.degree))}qualityFormatImpl(e,i,r,n,l){e&&(e==="color"?r=r.toColorspace("srgb"):e==="gray"||e==="grey"?r=r.grayscale():e==="bitonal"&&(r=r.threshold())),i&&(r=r.toFormat(i)),n==="png"&&(l.paletteBitDepth===1||l.space==="b-w")&&(r=r.toColorspace("b-w").png({colors:2}))}async generateImageTile(e,i,r){let n=e.split("/"),l=n.pop(),s=l.split(".")[0],f=l.split(".")[1],o=n.pop(),a=n.pop(),h=n.pop(),I=n.pop(),g={width:i.width,height:i.height},c=super.normalizeRegionParams(h,g),B=super.normalizeSizeParams(a,{width:c?c.w:g.width,height:c?c.h:g.height}),{x:C,y:d,w:E,h:w}=c,{width:p,height:Q}=B,u=r+"/"+I,m=await na(u),y=await m.getImage();console.log(`Source dimensions: ${y.getWidth()} x ${y.getHeight()}`),console.log(`Extracting region: x=${C}, y=${d}, w=${E}, h=${w}`),console.log(`Output size: ${p} x ${Q}`);let k=await m.getImageCount();console.log(`Total images (including overviews): ${k}`);let x=E/p,b=w/Q,S=Math.max(x,b);console.log(`Scale factor: ${S.toFixed(2)}`);let N=y,D=0,_=C,R=d,T=E,F=w;if(k>1&&S>1){console.log("Looking for suitable overview...");for(let Y=1;Y<k;Y++){let K=Math.pow(2,Y),AA=Math.floor(y.getWidth()/K),nA=Math.floor(y.getHeight()/K);if(console.log(`Overview ${Y}: ${AA} x ${nA} (factor: ${K})`),K>=S&&(D===0||K<Math.pow(2,D))){D=Y-1;break}}if(D>=0){N=await m.getImage(D);let Y=Math.pow(2,D);console.log(`Using overview level: ${D} (factor: ${Y})`),console.log(`Overview dimensions: ${N.getWidth()} x ${N.getHeight()}`),_=Math.floor(C/Y),R=Math.floor(d/Y),T=Math.floor(E/Y),F=Math.floor(w/Y),console.log(`Adjusted window: x=${_}, y=${R}, w=${T}, h=${F}`)}else if(k>1)try{let Y=k-1;N=await m.getImage(Y);let K=Math.pow(2,Y);console.log(`Using largest overview (factor: ${K})`),console.log(`Overview dimensions: ${N.getWidth()} x ${N.getHeight()}`),_=Math.floor(C/K),R=Math.floor(d/K),T=Math.floor(E/K),F=Math.floor(w/K),console.log(`Adjusted window: x=${_}, y=${R}, w=${T}, h=${F}`)}catch(Y){console.warn("Could not use largest overview, falling back to full resolution")}}else console.log("Using full resolution (no suitable overview found or scale factor <= 1)");let v=N.getSamplesPerPixel(),U;v>=3?(U=[0,1,2],v>=4&&U.push(3)):U=[0];let q=await N.readRasters({window:[_,R,_+T,R+F],width:p,height:Q,samples:U,interleave:!0,resampleMethod:"bilinear"}),z=U.length,V=Buffer.from(q.buffer,q.byteOffset,q.byteLength),L=(0,lA.default)(V,{raw:{width:p,height:Q,channels:z}}),M=super.normalizeRotationParams(o);this.rotationImpl(M,L);let G=super.normalizeQualityParams(s),P=super.normalizeFormatParams(f,i.format);this.qualityFormatImpl(G,P,L,f,i);let X={};return X.body=L,X.contentType=super.getContentType(P),X}iiifTransform(e,i){let r=this.enableHD?(0,lA.default)({limitInputPixels:!1,sequentialRead:!0}):(0,lA.default)(),n=e.split("/"),l=n.pop(),s=l.split(".")[0],f=l.split(".")[1],o=n.pop(),a=n.pop(),h=n.pop(),I=!1,g=r,c={width:i.width,height:i.height};i&&i.orientation&&(I=!0,g=g.rotate(),i.orientation>=5&&(c={width:i.height,height:i.width}));let B=super.normalizeRegionParams(h,c);this.regionImpl(B,g);let C=super.normalizeSizeParams(a,{width:B?B.w:c.width,height:B?B.h:c.height});this.sizeImpl(C,g);let d=super.normalizeRotationParams(o);this.rotationImpl(d,g);let E=super.normalizeQualityParams(s),w=super.normalizeFormatParams(f,i.format);return this.qualityFormatImpl(E,w,g,f,i),B||C||d||E||w||I?g:(console.log("skip iiif transform"),null)}async generateIiifImage(e,i,r=256){let n=this.enableHD?(0,lA.default)(i,{limitInputPixels:!1,sequentialRead:!0}):(0,lA.default)(i),l=e.split("/"),s=l.pop(),f=s.split(".")[0],o=s.split(".")[1],a=l.pop(),h=l.pop(),I=l.pop(),g=await n.metadata(),c={width:g.width,height:g.height},B={},C=n,d=super.normalizeRegionParams(I,c);this.regionImpl(d,C);let E=super.normalizeSizeParams(h,{width:d?d.w:c.width,height:d?d.h:c.height});this.sizeImpl(E,C);let{x:w,y:p,w:Q,h:u}=d||{x:0,y:0,w:c.width,h:c.height},{width:m,height:y}=E||{width:c.width,height:c.height};try{if(Q*u>m*y*r&&m<oa&&y<aa&&g.pages&&g.pages>1){console.log("thumbnail");let S=Math.max(m/Q,y/u),[N,D,_,R]=[Math.round(w*S),Math.round(p*S),Math.round(Q*S),Math.round(u*S)],[T,F]=[Math.round(c.width*S),Math.round(c.height*S)];console.log("rawMeta.pages: "+g.pages);let v=Math.max(0,g.pages-1);console.log("selectedPage1: "+v),v>=g.pages&&(console.log("Warning: Selected page exceeds available pages, using last available page"),v=Math.max(0,g.pages-1));let U=this.enableHD?await(0,lA.default)(i,{limitInputPixels:!1,page:v,sequentialRead:!0}).metadata():await(0,lA.default)(i,{page:v}).metadata(),q=U.width,z=U.height;for(;v>0&&(z<F||q<T);)z*=2,q*=2,v--;(v<0||v>=g.pages)&&(console.log("Warning: Invalid page index after calculation, using page 0"),v=0),console.log("selectedPage2: "+v);let V={width:T,height:F,fastShrinkOnLoad:!1},L=this.enableHD?await(0,lA.default)(i,{limitInputPixels:!1,page:v,sequentialRead:!0}).resize(V).toBuffer():await(0,lA.default)(i,{page:v}).resize(V).toBuffer(),M=this.enableHD?(0,lA.default)(L,{limitInputPixels:!1,sequentialRead:!0}):(0,lA.default)(L),G=await M.metadata();console.log(G),D+R>G.height&&(R=G.height-D,console.log("adjested sh: "+R)),N+_>G.width&&(_=G.width-N,console.log("adjusted sw: "+_));let P={x:N,y:D,w:_,h:R};this.regionImpl(P,M),this.sizeImpl(E,M),console.log(G.width,G.height,V.width,V.height,P,E),C=M}}catch(S){console.trace(S),console.log(S)}let k=super.normalizeRotationParams(a);this.rotationImpl(k,C);let x=super.normalizeQualityParams(f);console.log(o,g.format);let b=super.normalizeFormatParams(o,g.format);return this.qualityFormatImpl(x,b,C,o,g),console.log("pipeline "+C),B.body=C,B.contentType=super.getContentType(b),B}generateImageInfo(e,i,r=""){let n=this.version,l=this.level,s={width:i.width,height:i.height};i&&i.orientation&&i.orientation>=5&&(console.log(i.orientation),s={width:i.height,height:i.width});let f=super.generateImageInfoTemp(e,s),o=f.info;if((n==="2.0"||n==="2.1")&&(o.profile=[super.uriPattern("compliance")],l==="2")){let a={};a.formats=["jpg","png","webp","jp2","pdf","tif"],a.qualities=["color","gray","bitonal","default","native","grey"],a.supports=Kl[Number(n)],o.profile.push(a)}return n==="3.0"&&r&&(o.extraFormats=[r],o.preferredFormats=[r]),r&&(o.formats=[r]),f}};module.exports=Je;
|
|
9
9
|
/*! Bundled license information:
|
|
10
10
|
|
|
11
11
|
pako/dist/pako.esm.mjs:
|