@etu-wiki/sharp-iiif-shims 0.0.87 → 0.0.89

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.d.ts CHANGED
@@ -1,9 +1,5 @@
1
1
  import sharp from 'sharp';
2
2
  import IiifImageShims from '@etu-wiki/iiif-image-shims';
3
- type Dims = {
4
- width: number;
5
- height: number;
6
- };
7
3
  export default class SharpIiifImageShims extends IiifImageShims {
8
4
  version: string;
9
5
  level: string;
@@ -16,6 +12,5 @@ export default class SharpIiifImageShims extends IiifImageShims {
16
12
  private qualityFormatImpl;
17
13
  iiifTransform(path: string, metadata: any): sharp.Sharp | null;
18
14
  generateIiifImage(path: string, sourceImage: any, scaleLimit?: number): Promise<any>;
19
- generateImageInfo(id: string, dims: Dims, preferredFormat?: string): any;
15
+ generateImageInfo(id: string, metadata: any, preferredFormat?: string): any;
20
16
  }
21
- export {};
package/dist/index.js CHANGED
@@ -1 +1 @@
1
- "use strict";var lt=Object.create;var I=Object.defineProperty;var gt=Object.getOwnPropertyDescriptor;var ct=Object.getOwnPropertyNames;var mt=Object.getPrototypeOf,pt=Object.prototype.hasOwnProperty;var ut=(i,e)=>()=>(e||i((e={exports:{}}).exports,e),e.exports),dt=(i,e)=>{for(var r in e)I(i,r,{get:e[r],enumerable:!0})},J=(i,e,r,t)=>{if(e&&typeof e=="object"||typeof e=="function")for(let s of ct(e))!pt.call(i,s)&&s!==r&&I(i,s,{get:()=>e[s],enumerable:!(t=gt(e,s))||t.enumerable});return i};var Q=(i,e,r)=>(r=i!=null?lt(mt(i)):{},J(e||!i||!i.__esModule?I(r,"default",{value:i,enumerable:!0}):r,i)),ft=i=>J(I({},"__esModule",{value:!0}),i);var tt=ut((_t,E)=>{"use strict";var O=Object.defineProperty,yt=Object.getOwnPropertyDescriptor,wt=Object.getOwnPropertyNames,zt=Object.prototype.hasOwnProperty,vt=(i,e)=>{for(var r in e)O(i,r,{get:e[r],enumerable:!0})},$t=(i,e,r,t)=>{if(e&&typeof e=="object"||typeof e=="function")for(let s of wt(e))!zt.call(i,s)&&s!==r&&O(i,s,{get:()=>e[s],enumerable:!(t=yt(e,s))||t.enumerable});return i},bt=i=>$t(O({},"__esModule",{value:!0}),i),V={};vt(V,{default:()=>Z});E.exports=bt(V);var n="[1-9][0-9]*",K="[0-9]*",f="(?=.*[1-9])\\d+(\\.\\d+)?",N="\\d+(\\.\\d+)?",M=(i=>(i.jpg="image/jpeg",i.jpeg="image/jpeg",i.png="image/png",i.webp="image/webp",i.tif="image/tiff",i.tiff="image/tiff",i.gif="image/gif",i.jp2="image/jp2",i.pdf="application/pdf",i))(M||{}),v={version:["1.0","1.1","2.0","2.1","3.0"],level:["0","1","2"],region:["full","square",`${K},${K},${n},${n}`,`pct:${N},${N},${f},${f}`],rotation:`!?${N}`,quality:["color","gray","bitonal","default","native","grey"],format:["jpg","png","webp","tif","gif","jp2","pdf"],size:[""]},xt={1:["full",`${n},`,`,${n}`,`pct:${f}`,`${n},${n}`,`!${n},${n}`],1.1:["full",`${n},`,`,${n}`,`pct:${f}`,`${n},${n}`,`!${n},${n}`],2:["full",`${n},`,`,${n}`,`pct:${f}`,`${n},${n}`,`!${n},${n}`],2.1:["full","max",`${n},`,`,${n}`,`pct:${f}`,`${n},${n}`,`!${n},${n}`],3:["max",`${n},`,`,${n}`,`pct:${f}`,`${n},${n}`,`!${n},${n}`,"\\^max",`\\^${n},`,`\\^,${n}`,`\\^pct:${f}`,`\\^${n},${n}`,`\\^!${n},${n}`]},W=/^pct:([\d,]+)/,Z=class{constructor(i,e,r,t,s,o,a){this.version=i,this.level=e,this.maxArea=r,this.maxWidth=t,this.maxHeight=s,this.tileWidth=o,this.tileHeight=a,this.validate("version",i),this.validate("level",e),v.size=xt[Number(i)]}validator(i){var e=v[i];return e instanceof Array&&(e=e.join("|")),new RegExp("^("+e+")$")}validate(i,e){if(!this.validator(i).test(e))throw Error(`invalid IIIF url ${i}: ${e}`);return!0}normalizeRegionParams(i,e){if(this.validate("region",i),i==="full")return null;if(i==="square")return this._regionSquare(e);if(W.test(i))return this._regionPct(i.match(W)[1],e);{let r=i.split(",").map(t=>Number(t));return this._regionXYWH(r,e)}}_regionSquare(i){let e,r,t=i.width,s=i.height;if(t!==s){let o=Math.min(t,s),a=Math.abs(Math.floor((t-s)/2));return t>s?(e=a,r=0):(e=0,r=a),this._regionXYWH([e,r,o,o],i)}return null}_regionPct(i,e){let r=i.split(",").map((t,s)=>{let o=Number(t)/100;return s===0||s===2?Math.ceil(e.width*o):s===1||s===3?Math.ceil(e.height*o):null});return this._regionXYWH(r,e)}_regionXYWH(i,e){let r=e.width,t=e.height,[s,o,a,h]=i;return s+a>r&&(a=r-s),o+h>t&&(h=t-o),{x:s,y:o,w:a,h}}normalizeSizeParams(i,e){let r=i,t=e.width,s=e.height;if(!e||!t&&!s)throw Error(`invalid region dimensions: ${JSON.stringify(e,null,2)}`);this.validate("size",r);let o=!1;r.charAt(0)==="^"&&(o=!0,r=r.substring(1));let a=null;if(r==="full"||(r==="max"?a=this._sizeMaxScale(e):W.test(r)?a=this._sizePctScale(r.match(W)[1]):r.charAt(0)==="!"&&(r=r.substring(1),a=this._sizeBangScale(r,o,e)),a===1))return null;if(a){let h=Math.ceil(t*a),l=Math.ceil(s*a);return this._sizeWH(`${h},${l}`,o,e)}else return this._sizeWH(r,o,e)}_sizeBangScale(i,e,r){let t=r.width,s=r.height,[o,a]=i.split(",").map(l=>l===""?null:Number(l)),h=Math.min(o/t,a/s);if(o>t&&a>s&&!e)throw Error("should not upscale without ^");return h}_sizeMaxScale(i){let e=i.width,r=i.height,t=1;return this.maxArea&&this.maxArea<e*r&&(t=Math.sqrt(this.maxArea/(e*r))),this.maxWidth&&this.maxWidth<e&&(t=Math.min(t,this.maxWidth/e)),this.maxHeight&&this.maxHeight<r&&(t=Math.min(t,this.maxHeight/r)),t}_sizePctScale(i){return Number(i)/100}_sizeWH(i,e,r){let t=r.width,s=r.height,[o,a]=i.split(",").map(h=>h===""?null:Number(h));if(o?a||(a=Math.ceil(s*o/t),a=a===0?1:a):(o=Math.ceil(t*a/s),o=o===0?1:o),(o>t||a>s)&&!e)throw Error("should not upscale without ^");return{width:o,height:a}}normalizeRotationParams(i){this.validate("rotation",i);let e=!1;if(i==="0")return null;i[0]==="!"&&(e=!0);let r=Number(i.replace(/^!/,""));return{isMirror:e,degree:r}}normalizeQualityParams(i){return this.validate("quality",i),i==="native"||i==="default"?null:i}normalizeFormatParams(i,e){if((this.version==="1.0"||this.version==="1.1"||this.version==="2.0"||this.version==="2.1")&&!i)return"png";this.validate("format",i);let r=M[i],t=M[e];return r===t?null:i}getContentType(i){return M[i]}generateImageInfoTemp(i,e){let r={},t={};r.info=t;let s=this.version;return s==="1.0"?(t.identifier=i,t.width=e.width,t.height=e.height,t.scale_factors=this.factors(e),t.tile_width=this.tileWidth,t.tile_height=this.tileHeight,t.formats=v.format,t.qualities=v.quality,t.profile=this.uriPattern("compliance"),r.contentType="application/json",r.body=JSON.stringify(t)):(s==="1.1"?(t["@context"]=this.uriPattern("context"),t["@id"]=i,t.width=e.width,t.height=e.height,t.scale_factors=this.factors(e),t.tile_width=this.tileWidth,t.tile_height=this.tileHeight,t.formats=v.format,t.qualities=v.quality,t.profile=this.uriPattern("compliance")):s==="2.0"||s==="2.1"?(t["@context"]=this.uriPattern("context"),t["@id"]=i,t.protocol="http://iiif.io/api/image",t.width=e.width,t.height=e.height,this.level==="0"?t.sizes=this.sizes(e):t.tiles=[{scaleFactors:this.factors(e),width:this.tileWidth,height:this.tileHeight}],t.profile=[this.uriPattern("compliance")]):s==="3.0"&&(t["@context"]=[this.uriPattern("context")],t.id=i,t.type="ImageService3",t.protocol="http://iiif.io/api/image",t.width=e.width,t.height=e.height,this.level==="0"?t.sizes=this.sizes(e):t.tiles=[{scaleFactors:this.factors(e),width:this.tileWidth,height:this.tileHeight}],t.profile=this.uriPattern("compliance")),r.contentType="application/ld+json"),r}factors(i){let e=1,r=[];for(;this.tileWidth*e<=i.width&&this.tileHeight*e<=i.height;)r.push(e),e*=2;return r}uriPattern(i){let e="",r="";return this.version==="1.0"?e=`http://library.stanford.edu/iiif/image-api/compliance.html#level${this.level}`:this.version==="1.1"?(e=`http://library.stanford.edu/iiif/image-api/1.1/compliance.html#level${this.level}`,r="http://library.stanford.edu/iiif/image-api/1.1/context.json"):this.version==="2.0"||this.version==="2.1"?(e=`http://iiif.io/api/image/2/level${this.level}.json`,r="http://iiif.io/api/image/2/context.json"):this.version==="3.0"&&(e=`level${this.level}`,r="http://iiif.io/api/image/3/context.json"),i==="compliance"?e:i==="context"?r:""}sizes(i){return[{width:i.width,height:i.height}]}};E.exports=Z});var Mt={};dt(Mt,{default:()=>b});module.exports=ft(Mt);var $=Q(require("sharp")),rt=Q(tt()),Pt=1e8,it=1e4,et=1e4,Ht=512,It=512,Wt={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"]},b=class extends rt.default{constructor(r,t,s=Pt,o=it,a=et,h=Ht,l=It){super(r,t,s,o,a,h,l)}regionImpl(r,t){r&&(t=t.extract({left:r.x,top:r.y,width:r.w,height:r.h}))}sizeImpl(r,t){r&&(t=t.resize({...r,fit:"fill"}))}rotationImpl(r,t){r&&(r.isMirror&&(t=t.flop()),t=t.rotate(r.degree))}qualityFormatImpl(r,t,s,o,a){r&&(r==="color"?s=s.toColorspace("srgb"):r==="gray"||r==="grey"?s=s.grayscale():r==="bitonal"&&(s=s.threshold())),t&&(s=s.toFormat(t)),o==="png"&&(a.paletteBitDepth===1||a.space==="b-w")&&(s=s.toColorspace("b-w").png({colors:2}))}iiifTransform(r,t){let s={width:t.width,height:t.height},o=(0,$.default)(),a=r.split("/"),h=a.pop(),l=h.split(".")[0],p=h.split(".")[1],B=a.pop(),_=a.pop(),j=a.pop(),c=o,g=super.normalizeRegionParams(j,s);this.regionImpl(g,c);let y=super.normalizeSizeParams(_,{width:g?g.w:s.width,height:g?g.h:s.height});this.sizeImpl(y,c);let m=super.normalizeRotationParams(B);this.rotationImpl(m,c);let u=super.normalizeQualityParams(l),d=super.normalizeFormatParams(p,t.format);return this.qualityFormatImpl(u,d,c,p,t),g||y||m||u||d?c:(console.log("skip iiif transform"),null)}async generateIiifImage(r,t,s=256){let o=(0,$.default)(t,{limitInputPixels:!1,sequentialRead:!0}),a=r.split("/"),h=a.pop(),l=h.split(".")[0],p=h.split(".")[1],B=a.pop(),_=a.pop(),j=a.pop(),c=await o.metadata(),g={width:c.width,height:c.height},y={},m=o,u=super.normalizeRegionParams(j,g);this.regionImpl(u,m);let d=super.normalizeSizeParams(_,{width:u?u.w:g.width,height:u?u.h:g.height});this.sizeImpl(d,m);let{x:st,y:at,w:S,h:q}=u||{x:0,y:0,w:g.width,h:g.height},{width:R,height:T}=d||{width:g.width,height:g.height};if(S*q>R*T*s&&R<it&&T<et&&c.pages&&c.pages>1){console.log("thumbnail");let w=Math.max(R/S,T/q),[A,F,x,P]=[Math.round(st*w),Math.round(at*w),Math.round(S*w),Math.round(q*w)],[k,X]=[Math.round(g.width*w),Math.round(g.height*w)],H=c.pages-1,C=await(0,$.default)(t,{limitInputPixels:!1,page:H,sequentialRead:!0}).metadata(),U=C.width,Y=C.height;for(;Y<X||U<k;)Y*=2,U*=2,H--;console.log("selectedPage: "+H);let L={width:k,height:X,fastShrinkOnLoad:!1},ht=await(0,$.default)(t,{limitInputPixels:!1,page:H,sequentialRead:!0}).resize(L).toBuffer();m=(0,$.default)(ht);let z=await m.metadata();F+P>z.height&&(P=z.height-F,console.log("adjested sh: "+P)),A+x>z.width&&(x=z.width-A,console.log("adjusted sw: "+x));let G={x:A,y:F,w:x,h:P};this.regionImpl(G,m),this.sizeImpl(d,m),console.log(z.width,z.height,L.width,L.height,G,d)}let ot=super.normalizeRotationParams(B);this.rotationImpl(ot,m);let nt=super.normalizeQualityParams(l);console.log(p,c.format);let D=super.normalizeFormatParams(p,c.format);return this.qualityFormatImpl(nt,D,m,p,c),y.body=m,y.contentType=super.getContentType(D),y}generateImageInfo(r,t,s=""){let o=this.version,a=this.level,h=super.generateImageInfoTemp(r,t),l=h.info;if((o==="2.0"||o==="2.1")&&(l.profile=[super.uriPattern("compliance")],a==="2")){let p={};p.formats=["jpg","png","webp","jp2","pdf","tif"],p.qualities=["color","gray","bitonal","default","native","grey"],p.supports=Wt[Number(o)],l.profile.push(p)}return o==="3.0"&&s&&(l.extraFormats=[s],l.preferredFormats=[s]),s&&(l.formats=[s]),h}};module.exports=b;
1
+ "use strict";var lt=Object.create;var B=Object.defineProperty;var gt=Object.getOwnPropertyDescriptor;var ct=Object.getOwnPropertyNames;var pt=Object.getPrototypeOf,ut=Object.prototype.hasOwnProperty;var mt=(i,e)=>()=>(e||i((e={exports:{}}).exports,e),e.exports),ft=(i,e)=>{for(var r in e)B(i,r,{get:e[r],enumerable:!0})},Q=(i,e,r,t)=>{if(e&&typeof e=="object"||typeof e=="function")for(let s of ct(e))!ut.call(i,s)&&s!==r&&B(i,s,{get:()=>e[s],enumerable:!(t=gt(e,s))||t.enumerable});return i};var K=(i,e,r)=>(r=i!=null?lt(pt(i)):{},Q(e||!i||!i.__esModule?B(r,"default",{value:i,enumerable:!0}):r,i)),dt=i=>Q(B({},"__esModule",{value:!0}),i);var it=mt((_t,D)=>{"use strict";var E=Object.defineProperty,yt=Object.getOwnPropertyDescriptor,wt=Object.getOwnPropertyNames,zt=Object.prototype.hasOwnProperty,vt=(i,e)=>{for(var r in e)E(i,r,{get:e[r],enumerable:!0})},$t=(i,e,r,t)=>{if(e&&typeof e=="object"||typeof e=="function")for(let s of wt(e))!zt.call(i,s)&&s!==r&&E(i,s,{get:()=>e[s],enumerable:!(t=yt(e,s))||t.enumerable});return i},bt=i=>$t(E({},"__esModule",{value:!0}),i),Z={};vt(Z,{default:()=>tt});D.exports=bt(Z);var a="[1-9][0-9]*",V="[0-9]*",w="(?=.*[1-9])\\d+(\\.\\d+)?",O="\\d+(\\.\\d+)?",j=(i=>(i.jpg="image/jpeg",i.jpeg="image/jpeg",i.png="image/png",i.webp="image/webp",i.tif="image/tiff",i.tiff="image/tiff",i.gif="image/gif",i.jp2="image/jp2",i.pdf="application/pdf",i))(j||{}),$={version:["1.0","1.1","2.0","2.1","3.0"],level:["0","1","2"],region:["full","square",`${V},${V},${a},${a}`,`pct:${O},${O},${w},${w}`],rotation:`!?${O}`,quality:["color","gray","bitonal","default","native","grey"],format:["jpg","png","webp","tif","gif","jp2","pdf"],size:[""]},xt={1:["full",`${a},`,`,${a}`,`pct:${w}`,`${a},${a}`,`!${a},${a}`],1.1:["full",`${a},`,`,${a}`,`pct:${w}`,`${a},${a}`,`!${a},${a}`],2:["full",`${a},`,`,${a}`,`pct:${w}`,`${a},${a}`,`!${a},${a}`],2.1:["full","max",`${a},`,`,${a}`,`pct:${w}`,`${a},${a}`,`!${a},${a}`],3:["max",`${a},`,`,${a}`,`pct:${w}`,`${a},${a}`,`!${a},${a}`,"\\^max",`\\^${a},`,`\\^,${a}`,`\\^pct:${w}`,`\\^${a},${a}`,`\\^!${a},${a}`]},_=/^pct:([\d,]+)/,tt=class{constructor(i,e,r,t,s,o,n){this.version=i,this.level=e,this.maxArea=r,this.maxWidth=t,this.maxHeight=s,this.tileWidth=o,this.tileHeight=n,this.validate("version",i),this.validate("level",e),$.size=xt[Number(i)]}validator(i){var e=$[i];return e instanceof Array&&(e=e.join("|")),new RegExp("^("+e+")$")}validate(i,e){if(!this.validator(i).test(e))throw Error(`invalid IIIF url ${i}: ${e}`);return!0}normalizeRegionParams(i,e){if(this.validate("region",i),i==="full")return null;if(i==="square")return this._regionSquare(e);if(_.test(i))return this._regionPct(i.match(_)[1],e);{let r=i.split(",").map(t=>Number(t));return this._regionXYWH(r,e)}}_regionSquare(i){let e,r,t=i.width,s=i.height;if(t!==s){let o=Math.min(t,s),n=Math.abs(Math.floor((t-s)/2));return t>s?(e=n,r=0):(e=0,r=n),this._regionXYWH([e,r,o,o],i)}return null}_regionPct(i,e){let r=i.split(",").map((t,s)=>{let o=Number(t)/100;return s===0||s===2?Math.ceil(e.width*o):s===1||s===3?Math.ceil(e.height*o):null});return this._regionXYWH(r,e)}_regionXYWH(i,e){let r=e.width,t=e.height,[s,o,n,h]=i;return s+n>r&&(n=r-s),o+h>t&&(h=t-o),{x:s,y:o,w:n,h}}normalizeSizeParams(i,e){let r=i,t=e.width,s=e.height;if(!e||!t&&!s)throw Error(`invalid region dimensions: ${JSON.stringify(e,null,2)}`);this.validate("size",r);let o=!1;r.charAt(0)==="^"&&(o=!0,r=r.substring(1));let n=null;if(r==="full"||(r==="max"?n=this._sizeMaxScale(e):_.test(r)?n=this._sizePctScale(r.match(_)[1]):r.charAt(0)==="!"&&(r=r.substring(1),n=this._sizeBangScale(r,o,e)),n===1))return null;if(n){let h=Math.ceil(t*n),g=Math.ceil(s*n);return this._sizeWH(`${h},${g}`,o,e)}else return this._sizeWH(r,o,e)}_sizeBangScale(i,e,r){let t=r.width,s=r.height,[o,n]=i.split(",").map(g=>g===""?null:Number(g)),h=Math.min(o/t,n/s);if(o>t&&n>s&&!e)throw Error("should not upscale without ^");return h}_sizeMaxScale(i){let e=i.width,r=i.height,t=1;return this.maxArea&&this.maxArea<e*r&&(t=Math.sqrt(this.maxArea/(e*r))),this.maxWidth&&this.maxWidth<e&&(t=Math.min(t,this.maxWidth/e)),this.maxHeight&&this.maxHeight<r&&(t=Math.min(t,this.maxHeight/r)),t}_sizePctScale(i){return Number(i)/100}_sizeWH(i,e,r){let t=r.width,s=r.height,[o,n]=i.split(",").map(h=>h===""?null:Number(h));if(o?n||(n=Math.ceil(s*o/t),n=n===0?1:n):(o=Math.ceil(t*n/s),o=o===0?1:o),(o>t||n>s)&&!e)throw Error("should not upscale without ^");return{width:o,height:n}}normalizeRotationParams(i){this.validate("rotation",i);let e=!1;if(i==="0")return null;i[0]==="!"&&(e=!0);let r=Number(i.replace(/^!/,""));return{isMirror:e,degree:r}}normalizeQualityParams(i){return this.validate("quality",i),i==="native"||i==="default"?null:i}normalizeFormatParams(i,e){if((this.version==="1.0"||this.version==="1.1"||this.version==="2.0"||this.version==="2.1")&&!i)return"png";this.validate("format",i);let r=j[i],t=j[e];return r===t?null:i}getContentType(i){return j[i]}generateImageInfoTemp(i,e){let r={},t={};r.info=t;let s=this.version;return s==="1.0"?(t.identifier=i,t.width=e.width,t.height=e.height,t.scale_factors=this.factors(e),t.tile_width=this.tileWidth,t.tile_height=this.tileHeight,t.formats=$.format,t.qualities=$.quality,t.profile=this.uriPattern("compliance"),r.contentType="application/json",r.body=JSON.stringify(t)):(s==="1.1"?(t["@context"]=this.uriPattern("context"),t["@id"]=i,t.width=e.width,t.height=e.height,t.scale_factors=this.factors(e),t.tile_width=this.tileWidth,t.tile_height=this.tileHeight,t.formats=$.format,t.qualities=$.quality,t.profile=this.uriPattern("compliance")):s==="2.0"||s==="2.1"?(t["@context"]=this.uriPattern("context"),t["@id"]=i,t.protocol="http://iiif.io/api/image",t.width=e.width,t.height=e.height,this.level==="0"?t.sizes=this.sizes(e):t.tiles=[{scaleFactors:this.factors(e),width:this.tileWidth,height:this.tileHeight}],t.profile=[this.uriPattern("compliance")]):s==="3.0"&&(t["@context"]=[this.uriPattern("context")],t.id=i,t.type="ImageService3",t.protocol="http://iiif.io/api/image",t.width=e.width,t.height=e.height,this.level==="0"?t.sizes=this.sizes(e):t.tiles=[{scaleFactors:this.factors(e),width:this.tileWidth,height:this.tileHeight}],t.profile=this.uriPattern("compliance")),r.contentType="application/ld+json"),r}factors(i){let e=1,r=[];for(;this.tileWidth*e<=i.width&&this.tileHeight*e<=i.height;)r.push(e),e*=2;return r}uriPattern(i){let e="",r="";return this.version==="1.0"?e=`http://library.stanford.edu/iiif/image-api/compliance.html#level${this.level}`:this.version==="1.1"?(e=`http://library.stanford.edu/iiif/image-api/1.1/compliance.html#level${this.level}`,r="http://library.stanford.edu/iiif/image-api/1.1/context.json"):this.version==="2.0"||this.version==="2.1"?(e=`http://iiif.io/api/image/2/level${this.level}.json`,r="http://iiif.io/api/image/2/context.json"):this.version==="3.0"&&(e=`level${this.level}`,r="http://iiif.io/api/image/3/context.json"),i==="compliance"?e:i==="context"?r:""}sizes(i){return[{width:i.width,height:i.height}]}};D.exports=tt});var Mt={};ft(Mt,{default:()=>x});module.exports=dt(Mt);var b=K(require("sharp")),st=K(it()),Pt=1e8,et=1e4,rt=1e4,Ht=512,It=512,Wt={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"]},x=class extends st.default{constructor(r,t,s=Pt,o=et,n=rt,h=Ht,g=It){super(r,t,s,o,n,h,g)}regionImpl(r,t){r&&(t=t.extract({left:r.x,top:r.y,width:r.w,height:r.h}))}sizeImpl(r,t){r&&(t=t.resize({...r,fit:"fill"}))}rotationImpl(r,t){r&&(r.isMirror&&(t=t.flop()),t=t.rotate(r.degree))}qualityFormatImpl(r,t,s,o,n){r&&(r==="color"?s=s.toColorspace("srgb"):r==="gray"||r==="grey"?s=s.grayscale():r==="bitonal"&&(s=s.threshold())),t&&(s=s.toFormat(t)),o==="png"&&(n.paletteBitDepth===1||n.space==="b-w")&&(s=s.toColorspace("b-w").png({colors:2}))}iiifTransform(r,t){let s=(0,b.default)(),o=r.split("/"),n=o.pop(),h=n.split(".")[0],g=n.split(".")[1],u=o.pop(),d=o.pop(),S=o.pop(),P=!1,l=s,c={width:t.width,height:t.height};t&&t.orientation&&(P=!0,l=l.rotate(),t.orientation>=5&&(c={width:t.height,height:t.width}));let m=super.normalizeRegionParams(S,c);this.regionImpl(m,l);let p=super.normalizeSizeParams(d,{width:m?m.w:c.width,height:m?m.h:c.height});this.sizeImpl(p,l);let f=super.normalizeRotationParams(u);this.rotationImpl(f,l);let y=super.normalizeQualityParams(h),H=super.normalizeFormatParams(g,t.format);return this.qualityFormatImpl(y,H,l,g,t),m||p||f||y||H||P?l:(console.log("skip iiif transform"),null)}async generateIiifImage(r,t,s=256){let o=(0,b.default)(t,{limitInputPixels:!1,sequentialRead:!0}),n=r.split("/"),h=n.pop(),g=h.split(".")[0],u=h.split(".")[1],d=n.pop(),S=n.pop(),P=n.pop(),l=await o.metadata(),c={width:l.width,height:l.height},m={},p=o,f=super.normalizeRegionParams(P,c);this.regionImpl(f,p);let y=super.normalizeSizeParams(S,{width:f?f.w:c.width,height:f?f.h:c.height});this.sizeImpl(y,p);let{x:H,y:ot,w:q,h:R}=f||{x:0,y:0,w:c.width,h:c.height},{width:T,height:A}=y||{width:c.width,height:c.height};if(q*R>T*A*s&&T<et&&A<rt&&l.pages&&l.pages>1){console.log("thumbnail");let z=Math.max(T/q,A/R),[F,L,I,W]=[Math.round(H*z),Math.round(ot*z),Math.round(q*z),Math.round(R*z)],[X,C]=[Math.round(c.width*z),Math.round(c.height*z)],M=l.pages-1,U=await(0,b.default)(t,{limitInputPixels:!1,page:M,sequentialRead:!0}).metadata(),Y=U.width,G=U.height;for(;G<C||Y<X;)G*=2,Y*=2,M--;console.log("selectedPage: "+M);let N={width:X,height:C,fastShrinkOnLoad:!1},ht=await(0,b.default)(t,{limitInputPixels:!1,page:M,sequentialRead:!0}).resize(N).toBuffer();p=(0,b.default)(ht);let v=await p.metadata();L+W>v.height&&(W=v.height-L,console.log("adjested sh: "+W)),F+I>v.width&&(I=v.width-F,console.log("adjusted sw: "+I));let J={x:F,y:L,w:I,h:W};this.regionImpl(J,p),this.sizeImpl(y,p),console.log(v.width,v.height,N.width,N.height,J,y)}let nt=super.normalizeRotationParams(d);this.rotationImpl(nt,p);let at=super.normalizeQualityParams(g);console.log(u,l.format);let k=super.normalizeFormatParams(u,l.format);return this.qualityFormatImpl(at,k,p,u,l),m.body=p,m.contentType=super.getContentType(k),m}generateImageInfo(r,t,s=""){let o=this.version,n=this.level,h={width:t.width,height:t.height};t&&t.orientation&&t.orientation>=5&&(console.log(t.orientation),h={width:t.height,height:t.width});let g=super.generateImageInfoTemp(r,h),u=g.info;if((o==="2.0"||o==="2.1")&&(u.profile=[super.uriPattern("compliance")],n==="2")){let d={};d.formats=["jpg","png","webp","jp2","pdf","tif"],d.qualities=["color","gray","bitonal","default","native","grey"],d.supports=Wt[Number(o)],u.profile.push(d)}return o==="3.0"&&s&&(u.extraFormats=[s],u.preferredFormats=[s]),s&&(u.formats=[s]),g}};module.exports=x;
package/package.json CHANGED
@@ -1,13 +1,14 @@
1
1
  {
2
2
  "name": "@etu-wiki/sharp-iiif-shims",
3
- "version": "0.0.87",
3
+ "version": "0.0.89",
4
4
  "description": "",
5
5
  "main": "dist/index.js",
6
6
  "scripts": {
7
7
  "test": "jest",
8
8
  "build": "npm run build:common && npm run build:types",
9
9
  "build:common": "npx esbuild ./src/index.ts --outdir=dist --bundle --platform=node --minify --external:sharp",
10
- "build:types": "tsc --emitDeclarationOnly --declaration --outDir dist --project tsconfig.spec.json"
10
+ "build:types": "tsc --emitDeclarationOnly --declaration --outDir dist --project tsconfig.spec.json",
11
+ "prepublishOnly": "npm run build"
11
12
  },
12
13
  "keywords": [
13
14
  "iiif",