Big News: Socket raises $60M Series C at a $1B valuation to secure software supply chains for AI-driven development.Announcement
Sign In

@iiif/parser

Package Overview
Dependencies
Maintainers
5
Versions
39
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@iiif/parser - npm Package Compare versions

Comparing version
1.1.2
to
2.0.0
+2
dist/image-3/cjs/index.js
"use strict";function e(e){try{if("full"===e)return{full:!0};if("square"===e)return{square:!0};const i=e.startsWith("pct:"),t=e.substr(i?4:0).split(",").map((e=>parseFloat(e)));return{x:t[0],y:t[1],w:t[2],h:t[3],percent:i}}catch{throw new Error("Expected 'full', 'square' or 'x,y,w,h'. Found "+e)}}function i(e){const i={upscaled:!1,max:!1,confined:!1};if("^"===e[0]&&(i.upscaled=!0,e=e.slice(1)),"max"===e||"full"===e)return i.max=!0,i.serialiseAsFull="full"===e,i;if("!"===e[0]&&(i.confined=!0,e=e.slice(1)),"p"===e[0])return i.percentScale=parseFloat(e.slice(4)),i;const t=e.split(",").map((e=>e.trim()));return t.length&&(""!==t[0]&&(i.width=parseInt(t[0],10)),""!==t[1]&&(i.height=parseInt(t[1],10))),i}function t(e){const i={angle:0};if("!"===e[0]&&(i.mirror=!0,e=e.substr(1)),i.angle=parseFloat(e)%360,Number.isNaN(i.angle))throw new Error(`Invalid rotation ${e}`);return i}function r(e,i=""){const t=e.match(/^(([a-zA-Z]+):\/\/([^/]+))?((.*)+)/);if(!t)throw new Error(`Invalid or unknown input ${e}`);const r=t[2],a=t[3];let o=t[4];if("/"===o[0]&&(o=o.substr(1)),i.length>0){if("/"===i[0]&&(i=i.substr(1)),i!==o.substr(0,i.length))throw new Error(`Path does not start with prefix (path: ${o}, prefix: ${i})`);o=o.substr(i.length)}return{scheme:r,server:a,path:o,prefix:i}}function a(a,o=""){const{path:s,scheme:n,server:l,prefix:p}=r(a,o),f=s.split("/").reverse(),[h,x,u,m,...c]=f,g=c.reverse().filter(Boolean).join("/");if(1===f.length||""===h)return{type:"base",scheme:n,server:l,prefix:p,identifier:g};if("info.json"===h){const[,...e]=f;return{type:"info",scheme:n,server:l,prefix:p,identifier:e.reverse().filter(Boolean).join("/")}}const d=h.split(".");return{type:"image",scheme:n,server:l,prefix:p,identifier:g,originalPath:s,region:e(m),size:i(u),rotation:t(x),quality:d[0],format:d[1]}}Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const o="http://library.stanford.edu/iiif/image-api/compliance.html#level0",s="http://library.stanford.edu/iiif/image-api/compliance.html#level1",n="http://library.stanford.edu/iiif/image-api/compliance.html#level2",l="http://library.stanford.edu/iiif/image-api/conformance.html#level0",p="http://library.stanford.edu/iiif/image-api/conformance.html#level1",f="http://library.stanford.edu/iiif/image-api/conformance.html#level2",h="http://library.stanford.edu/iiif/image-api/1.1/compliance.html#level0",x="http://library.stanford.edu/iiif/image-api/1.1/compliance.html#level1",u="http://library.stanford.edu/iiif/image-api/1.1/compliance.html#level2",m="http://library.stanford.edu/iiif/image-api/1.1/conformance.html#level0",c="http://library.stanford.edu/iiif/image-api/1.1/conformance.html#level1",g="http://library.stanford.edu/iiif/image-api/1.1/conformance.html#level2",d=["http://iiif.io/api/image/2/level2",n,f,u,g,"http://iiif.io/api/image/1/level2.json","http://iiif.io/api/image/1/profiles/level2.json","http://iiif.io/api/image/2/level2.json","http://iiif.io/api/image/2/profiles/level2.json","level2"],I=[...d,"http://iiif.io/api/image/2/level1",s,p,x,c,"http://iiif.io/api/image/1/level1.json","http://iiif.io/api/image/1/profiles/level1.json","http://iiif.io/api/image/2/level1.json","http://iiif.io/api/image/2/profiles/level1.json","level1"],_=["http://iiif.io/api/image/2/level0","http://iiif.io/api/image/2/level1","http://iiif.io/api/image/2/level2",o,s,n,l,p,f,h,x,u,m,c,g,"http://iiif.io/api/image/1/level0.json","http://iiif.io/api/image/1/profiles/level0.json","http://iiif.io/api/image/1/level1.json","http://iiif.io/api/image/1/profiles/level1.json","http://iiif.io/api/image/1/level2.json","http://iiif.io/api/image/1/profiles/level2.json","http://iiif.io/api/image/2/level0.json","http://iiif.io/api/image/2/profiles/level0.json","http://iiif.io/api/image/2/level1.json","http://iiif.io/api/image/2/profiles/level1.json","http://iiif.io/api/image/2/level2.json","http://iiif.io/api/image/2/profiles/level2.json","level0","level1","level2"],F=_,v=["http://iiif.io/api/image/2/level0",o,l,h,m,"http://iiif.io/api/image/1/level0.json","http://iiif.io/api/image/1/profiles/level0.json","http://iiif.io/api/image/2/level0.json","http://iiif.io/api/image/2/profiles/level0.json","level0"],y={extraFormats:["jpg"],extraQualities:["default"],extraFeatures:["sizeByWhListed"]},E={extraFormats:["jpg"],extraQualities:["default"],extraFeatures:["baseUriRedirect","cors","jsonldMediaType","regionByPx","regionSquare","sizeByWhListed","sizeByH","sizeByW","sizeByWh"]},A={extraFormats:["jpg","png"],extraQualities:["default"],extraFeatures:["baseUriRedirect","cors","jsonldMediaType","regionByPct","regionByPx","regionSquare","rotationBy90s","sizeByWhListed","sizeByConfinedWh","sizeByH","sizeByPct","sizeByW","sizeByWh"]},z=["baseUriRedirect","canonicalLinkHeader","cors","jsonldMediaType","mirroring","profileLinkHeader","regionByPct","regionByPx","regionSquare","rotationArbitrary","rotationBy90s","sizeByConfinedWh","sizeByH","sizeByPct","sizeByW","sizeByWh","sizeUpscaling","sizeByWhListed","sizeByDistortedWh","sizeByForcedWh"];function O(e){if(-1!==d.indexOf(e))return A;return-1!==I.indexOf(e)?E:y}function S(e){const i=e?Array.isArray(e.profile)?e.profile:[e.profile]:[],t={extraQualities:[],extraFormats:[],extraFeatures:[]};for(let r of i)if("string"==typeof r&&(r=O(r)),r){if(r.formats)for(const e of r.formats)-1===t.extraFormats.indexOf(e)&&t.extraFormats.push(e);if(r.qualities)for(const e of r.qualities)-1===t.extraQualities.indexOf(e)&&t.extraQualities.push(e);if(r.supports)for(const e of r.supports)-1===t.extraFeatures.indexOf(e)&&t.extraFeatures.push(e);if(r.maxHeight&&(t.maxHeight=r.maxHeight),r.maxWidth&&(t.maxWidth=r.maxWidth),r.maxArea&&(t.maxArea=r.maxArea),r.extraFormats)for(const e of r.extraFormats)-1===t.extraFormats.indexOf(e)&&t.extraFormats.push(e);if(r.extraQualities)for(const e of r.extraQualities)-1===t.extraQualities.indexOf(e)&&t.extraQualities.push(e);if(r.extraFeatures)for(const e of r.extraFeatures)-1===t.extraFeatures.indexOf(e)&&t.extraFeatures.push(e);r.maxHeight&&(t.maxHeight=r.maxHeight),r.maxWidth&&(t.maxWidth=r.maxWidth),r.maxArea&&(t.maxArea=r.maxArea)}if(e.extraFormats)for(const r of e.extraFormats)-1===t.extraFormats.indexOf(r)&&t.extraFormats.push(r);if(e.extraFeatures)for(const r of e.extraFeatures)-1===t.extraFeatures.indexOf(r)&&t.extraFeatures.push(r);if(e.extraQualities)for(const r of e.extraQualities)-1===t.extraQualities.indexOf(r)&&t.extraQualities.push(r);return t}function j(e){return e["@id"]?e["@id"]:e.id?e.id:void 0}function M(e){if(!e||!e.profile)return!1;if(!j(e))return!1;const i=Array.isArray(e.profile)?e.profile:[e.profile];for(const t of i)if("string"==typeof t&&-1!==_.indexOf(t))return!0;return!1}function L(e,i){if(!M(e))return[!1,"Not a valid image service"];i.extraFeatures=i.extraFeatures?i.extraFeatures:[];const t=S(e);if(i.exactSize){let t=!1;if(e.sizes)for(const r of e.sizes)r.width&&r.width===i.exactSize.width&&(-1!==z.indexOf("sizeByW")||r.height&&r.height===i.exactSize.height)&&(t=!0),r.height&&r.height===i.exactSize.height&&(-1!==z.indexOf("sizeByH")||r.width&&r.width===i.exactSize.width)&&(t=!0);t||(i.maxWidth=Math.max(i.maxWidth||0,i.exactSize.width||0)||void 0,i.maxHeight=Math.max(i.maxHeight||0,i.exactSize.height||0)||void 0,i.maxArea=Math.max(i.maxArea||0,(i.exactSize.width&&i.exactSize.height?i.exactSize.width*i.exactSize.height:i.maxArea)||0)||void 0,!i.exactSize.height&&i.exactSize.width?-1===i.extraFeatures.indexOf("sizeByW")&&i.extraFeatures.push("sizeByW"):!i.exactSize.width&&i.exactSize.height&&-1===i.extraFeatures.indexOf("sizeByH")&&i.extraFeatures.push("sizeByH"))}if(i.maxArea&&t.maxArea&&i.maxArea>t.maxArea)return[!1,`Max area is ${t.maxArea}`];if(i.maxWidth&&t.maxWidth&&i.maxWidth>t.maxWidth)return[!1,`Max width is ${t.maxWidth}`];if(i.maxHeight&&t.maxHeight&&i.maxHeight>t.maxHeight)return[!1,`Max height is ${t.maxHeight}`];if(i.extraFeatures){const e=[];for(const r of i.extraFeatures)-1===t.extraFeatures.indexOf(r)&&e.push(r);if(e.length)return[!1,`Missing features: ${e.join(", ")}`]}if(i.extraFormats){const e=[];for(const r of i.extraFormats)-1===t.extraFormats.indexOf(r)&&e.push(r);if(e.length)return[!1,`Missing formats: ${e.join(", ")}`]}if(i.extraQualities){const e=[];for(const r of i.extraQualities)-1===t.extraQualities.indexOf(r)&&e.push(r);if(e.length)return[!1,`Missing qualities: ${e.join(", ")}`]}return[!0]}function w({x:e=0,y:i=0,w:t,h:r,full:a,square:o,percent:s}){if(a)return"full";if(o)return"square";if(void 0===t||void 0===r)throw new Error("RegionParameter: invalid region");const n=`${e},${i},${t},${r}`;return s?`pct:${n}`:n}function B({max:e,percentScale:i,upscaled:t,confined:r,width:a,height:o,serialiseAsFull:s}){const n=[];return t&&n.push("^"),e?(n.push(s?"full":"max"),n.join("")):(r&&n.push("!"),i&&n.push(`pct:${i}`),a&&n.push(`${a}`),n.push(","),o&&n.push(`${o}`),n.join(""))}function N(e){return`${e.mirror?"!":""}${(e.angle||0)%360}`}function W(e){return e.endsWith("info.json")?e:e.endsWith("/")?`${e}info.json`:`${e}/info.json`}exports.IIIF_1_IMAGE_LEVEL_0="http://iiif.io/api/image/1/level0.json",exports.IIIF_1_IMAGE_LEVEL_0_PROFILE="http://iiif.io/api/image/1/profiles/level0.json",exports.IIIF_1_IMAGE_LEVEL_1="http://iiif.io/api/image/1/level1.json",exports.IIIF_1_IMAGE_LEVEL_1_PROFILE="http://iiif.io/api/image/1/profiles/level1.json",exports.IIIF_1_IMAGE_LEVEL_2="http://iiif.io/api/image/1/level2.json",exports.IIIF_1_IMAGE_LEVEL_2_PROFILE="http://iiif.io/api/image/1/profiles/level2.json",exports.IIIF_2_IMAGE_LEVEL_0="http://iiif.io/api/image/2/level0.json",exports.IIIF_2_IMAGE_LEVEL_0_NO_JSON="http://iiif.io/api/image/2/level0",exports.IIIF_2_IMAGE_LEVEL_0_PROFILE="http://iiif.io/api/image/2/profiles/level0.json",exports.IIIF_2_IMAGE_LEVEL_1="http://iiif.io/api/image/2/level1.json",exports.IIIF_2_IMAGE_LEVEL_1_NO_JSON="http://iiif.io/api/image/2/level1",exports.IIIF_2_IMAGE_LEVEL_1_PROFILE="http://iiif.io/api/image/2/profiles/level1.json",exports.IIIF_2_IMAGE_LEVEL_2="http://iiif.io/api/image/2/level2.json",exports.IIIF_2_IMAGE_LEVEL_2_NO_JSON="http://iiif.io/api/image/2/level2",exports.IIIF_2_IMAGE_LEVEL_2_PROFILE="http://iiif.io/api/image/2/profiles/level2.json",exports.IIIF_3_IMAGE_LEVEL_0="level0",exports.IIIF_3_IMAGE_LEVEL_1="level1",exports.IIIF_3_IMAGE_LEVEL_2="level2",exports.STANFORD_IIIF_1_IMAGE_COMPLIANCE_0=h,exports.STANFORD_IIIF_1_IMAGE_COMPLIANCE_1=x,exports.STANFORD_IIIF_1_IMAGE_COMPLIANCE_2=u,exports.STANFORD_IIIF_1_IMAGE_CONFORMANCE_0=m,exports.STANFORD_IIIF_1_IMAGE_CONFORMANCE_1=c,exports.STANFORD_IIIF_1_IMAGE_CONFORMANCE_2=g,exports.STANFORD_IIIF_IMAGE_COMPLIANCE_0=o,exports.STANFORD_IIIF_IMAGE_COMPLIANCE_1=s,exports.STANFORD_IIIF_IMAGE_COMPLIANCE_2=n,exports.STANFORD_IIIF_IMAGE_CONFORMANCE_0=l,exports.STANFORD_IIIF_IMAGE_CONFORMANCE_1=p,exports.STANFORD_IIIF_IMAGE_CONFORMANCE_2=f,exports.canonicalServiceUrl=W,exports.combineProfiles=S,exports.createImageServiceRequest=function(e){const i=a(W(e.id));if("info"!==i.type)throw new Error("Invalid service URL");const t=S(e);return{identifier:i.identifier,originalPath:"",server:i.server,prefix:i.prefix,scheme:i.scheme,type:"image",quality:-1===t.extraQualities.indexOf("default")?t.extraQualities[0]:"default",region:{full:!0},size:{max:!0,upscaled:!1,confined:!1},format:"jpg",rotation:{angle:0}}},exports.extraFeatures=z,exports.extractFixedSizeScales=function(e,i,t){const r=t.length,a=[];for(let o=0;o<r;o++){const i=t[o].width;a.push(e/i)}return a},exports.fixedSizesFromScales=function(e,i,t){const r=t.length,a=[];for(let o=0;o<r;o++){const r=t[o];a.push({width:Math.floor(e/r),height:Math.floor(i/r)})}return a},exports.getId=j,exports.getType=function(e){return e["@type"]?e["@type"]:e.type?e.type:void 0},exports.imageServiceProfiles=_,exports.imageServiceRequestToString=function(e,i){const t=e.prefix.startsWith("/")?e.prefix.substr(1):e.prefix,r=`${e.scheme}://${e.server}/${t?`${t}/`:""}${e.identifier}`;if("base"===e.type)return r;if("info"===e.type)return`${r}/info.json`;let{size:a}=e;const{region:o,rotation:s,format:n,quality:l}=e;if(i){const e=i["@context"]?Array.isArray(i["@context"])?i["@context"]:[i["@context"]]:[],t=-1!==e.indexOf("http://iiif.io/api/image/2/context.json"),r=-1!==e.indexOf("http://iiif.io/api/image/3/context.json");if((a.width===i.width&&!a.height||a.height===i.height&&!a.width||a.width===i.width&&a.height===i.height)&&(a={...a,max:!0}),t&&(a.max&&!a.serialiseAsFull&&(a={...a,serialiseAsFull:!0}),!a.max&&a.width&&a.height&&(a={...a,height:void 0})),r&&(a.max&&a.serialiseAsFull&&(a={...a,serialiseAsFull:!1}),a.width&&!a.height&&i.width&&i.height)){const e=i.height/i.width;a={...a,height:Math.ceil(a.width*e)}}}return[r,w(o),B(a),N(s),`${l}.${n}`].filter(Boolean).join("/")},exports.imageServiceSupportsFormat=function(e,i){return L(e,{extraFormats:[i]})},exports.imageServiceSupportsRequest=function(e,i){if("image"!==i.type)return[!0];const t=[];if(i.rotation.mirror&&t.push("mirroring"),i.region.percent&&t.push("regionByPct"),i.region.square?t.push("regionSquare"):i.region.full||t.push("regionByPx"),i.rotation.angle){i.rotation.angle%90?t.push("rotationArbitrary"):t.push("rotationBy90s")}i.size.confined&&t.push("sizeByConfinedWh"),!i.size.width&&i.size.height&&t.push("sizeByH"),i.size.percentScale&&t.push("sizeByPct"),(e.sizes||[]).find((e=>e.width===i.size.width&&!i.size.height||e.height===i.size.height&&!i.size.width||e.height===i.size.height&&e.width===i.size.width))?t.push("sizeByWhListed"):(i.size.width&&!i.size.height&&t.push("sizeByW"),i.size.width&&i.size.height&&t.push("sizeByWh")),i.size.upscaled&&t.push("sizeUpscaling");const[r,a]=L(e,{extraFeatures:t,extraQualities:[i.quality],extraFormats:[i.format],exactSize:i.size});return r?[!0]:[!1,a]},exports.isImageService=M,exports.isLevel0=function(e){const i=Array.isArray(e.profile)?e.profile:[e.profile];for(const t of i)if("string"==typeof t&&-1!==v.indexOf(t))return!0;return!1},exports.level0=y,exports.level0Support=F,exports.level1=E,exports.level1Support=I,exports.level2=A,exports.level2Support=d,exports.levelToProfile=O,exports.onlyLevel0=v,exports.parseImageServerFromId=function(e){const i=e.replace(/(https?:\/\/)?(www.)?/i,"");return-1!==i.indexOf("/")?i.split("/")[0]:i},exports.parseImageServiceRequest=a,exports.parseImageServiceUrl=r,exports.parseRegionParameter=e,exports.parseRotationParameter=t,exports.parseSizeParameter=i,exports.regionParameterToString=w,exports.rotationParameterToString=N,exports.sizeParameterToString=B,exports.supports=L,exports.supportsCustomSizes=function(e){if(!M(e))return!1;const i=Array.isArray(e.profile)?e.profile:[e.profile];for(const t of i)if("string"==typeof t){if(-1!==I.indexOf(t))return!0}else{const e=[...t.supports||[],...t.extraFeatures||[]];if(-1!==e.indexOf("regionByPx")&&(-1!==e.indexOf("sizeByW")||-1!==e.indexOf("sizeByWh")))return!0}return!1};
//# sourceMappingURL=index.js.map
{"version":3,"file":"index.js","sources":["../../../src/image-3/parser/parse-region-parameter.ts","../../../src/image-3/parser/parse-size-parameter.ts","../../../src/image-3/parser/parse-rotation-parameter.ts","../../../src/image-3/parser/parse-image-service-url.ts","../../../src/image-3/parser/parse-image-service-request.ts","../../../src/image-3/profiles/profiles.ts","../../../src/image-3/profiles/level-to-profile.ts","../../../src/image-3/profiles/combine-profiles.ts","../../../src/image-3/utilities/get-id.ts","../../../src/image-3/utilities/is-image-service.ts","../../../src/image-3/profiles/supports.ts","../../../src/image-3/serialize/region-parameter-to-string.ts","../../../src/image-3/serialize/size-parameter-to-string.ts","../../../src/image-3/serialize/rotation-parameter-to-string.ts","../../../src/image-3/utilities/canonical-service-url.ts","../../../src/image-3/utilities/create-image-service-request.ts","../../../src/image-3/utilities/extract-fixed-size-scales.ts","../../../src/image-3/utilities/fixed-sizes-from-scales.ts","../../../src/image-3/utilities/get-type.ts","../../../src/image-3/serialize/image-service-request-to-string.ts","../../../src/image-3/profiles/image-service-supports-format.ts","../../../src/image-3/profiles/image-service-supports-request.ts","../../../src/image-3/profiles/is-level-0.ts","../../../src/image-3/parser/parse-image-server-from-id.ts","../../../src/image-3/profiles/supports-custom-sizes.ts"],"sourcesContent":["import { RegionParameter } from '../types';\n\nexport function parseRegionParameter(pathPart: string): RegionParameter {\n try {\n if (pathPart === 'full') {\n return { full: true };\n }\n if (pathPart === 'square') {\n return { square: true };\n }\n\n const percent = pathPart.startsWith('pct:');\n const stringParts = pathPart.substr(percent ? 4 : 0).split(',');\n const xywh = stringParts.map((part) => parseFloat(part));\n return {\n x: xywh[0],\n y: xywh[1],\n w: xywh[2],\n h: xywh[3],\n percent: percent,\n };\n } catch {\n throw new Error(\"Expected 'full', 'square' or 'x,y,w,h'. Found \" + pathPart);\n }\n}\n","import { SizeParameter } from '../types';\n\nexport function parseSizeParameter(pathPart: string): SizeParameter {\n const size: SizeParameter = {\n upscaled: false,\n max: false,\n confined: false,\n };\n\n if (pathPart[0] === '^') {\n size.upscaled = true;\n pathPart = pathPart.slice(1);\n }\n\n if (pathPart === 'max' || pathPart === 'full') {\n size.max = true;\n size.serialiseAsFull = pathPart === 'full';\n return size;\n }\n\n if (pathPart[0] === '!') {\n size.confined = true;\n pathPart = pathPart.slice(1);\n }\n\n if (pathPart[0] === 'p') {\n size.percentScale = parseFloat(pathPart.slice(4));\n return size;\n }\n\n const wh = pathPart.split(',').map((t) => t.trim());\n if (wh.length) {\n if (wh[0] !== '') {\n size.width = parseInt(wh[0], 10);\n }\n\n if (wh[1] !== '') {\n size.height = parseInt(wh[1], 10);\n }\n }\n\n return size;\n}\n","import { RotationParameter } from '../types';\n\nexport function parseRotationParameter(pathPart: string): RotationParameter {\n const rotation: RotationParameter = { angle: 0 };\n if (pathPart[0] === '!') {\n rotation.mirror = true;\n pathPart = pathPart.substr(1);\n }\n\n rotation.angle = parseFloat(pathPart) % 360;\n if (Number.isNaN(rotation.angle)) {\n throw new Error(`Invalid rotation ${pathPart}`);\n }\n return rotation;\n}\n","export function parseImageServiceUrl(canonicalId: string, prefix = '') {\n const parsedUrl = canonicalId.match(/^(([a-zA-Z]+):\\/\\/([^/]+))?((.*)+)/);\n if (!parsedUrl) {\n throw new Error(`Invalid or unknown input ${canonicalId}`);\n }\n const scheme = parsedUrl[2];\n const server = parsedUrl[3];\n let path = parsedUrl[4];\n if (path[0] === '/') {\n path = path.substr(1);\n }\n if (prefix.length > 0) {\n if (prefix[0] === '/') {\n prefix = prefix.substr(1);\n }\n if (prefix !== path.substr(0, prefix.length)) {\n throw new Error(`Path does not start with prefix (path: ${path}, prefix: ${prefix})`);\n }\n path = path.substr(prefix.length);\n }\n\n return {\n scheme,\n server,\n path,\n prefix,\n };\n}\n","import { parseRegionParameter } from './parse-region-parameter';\nimport { parseSizeParameter } from './parse-size-parameter';\nimport { parseRotationParameter } from './parse-rotation-parameter';\nimport { ImageServiceImageRequest } from '../types';\nimport { parseImageServiceUrl } from './parse-image-service-url';\n\nexport function parseImageServiceRequest(input: string, _prefix = ''): ImageServiceImageRequest {\n const { path, scheme, server, prefix } = parseImageServiceUrl(input, _prefix);\n\n const parts = path.split('/').reverse();\n const [fileName, rotation, size, region, ...others] = parts;\n const identifier = others.reverse().filter(Boolean).join('/');\n\n if (parts.length === 1 || fileName === '') {\n // likely the server will want to redirect this\n return { type: 'base', scheme, server, prefix, identifier };\n }\n\n if (fileName === 'info.json') {\n const [, ...identifierParts] = parts;\n\n return {\n type: 'info',\n scheme,\n server,\n prefix,\n identifier: identifierParts.reverse().filter(Boolean).join('/'),\n };\n }\n\n const filenameParts = fileName.split('.');\n\n return {\n type: 'image',\n scheme,\n server,\n prefix,\n identifier,\n originalPath: path,\n region: parseRegionParameter(region),\n size: parseSizeParameter(size),\n rotation: parseRotationParameter(rotation),\n quality: filenameParts[0],\n format: filenameParts[1],\n };\n}\n","export const STANFORD_IIIF_IMAGE_COMPLIANCE_0 = 'http://library.stanford.edu/iiif/image-api/compliance.html#level0';\nexport const STANFORD_IIIF_IMAGE_COMPLIANCE_1 = 'http://library.stanford.edu/iiif/image-api/compliance.html#level1';\nexport const STANFORD_IIIF_IMAGE_COMPLIANCE_2 = 'http://library.stanford.edu/iiif/image-api/compliance.html#level2';\nexport const STANFORD_IIIF_IMAGE_CONFORMANCE_0 = 'http://library.stanford.edu/iiif/image-api/conformance.html#level0';\nexport const STANFORD_IIIF_IMAGE_CONFORMANCE_1 = 'http://library.stanford.edu/iiif/image-api/conformance.html#level1';\nexport const STANFORD_IIIF_IMAGE_CONFORMANCE_2 = 'http://library.stanford.edu/iiif/image-api/conformance.html#level2';\nexport const STANFORD_IIIF_1_IMAGE_COMPLIANCE_0 =\n 'http://library.stanford.edu/iiif/image-api/1.1/compliance.html#level0';\nexport const STANFORD_IIIF_1_IMAGE_COMPLIANCE_1 =\n 'http://library.stanford.edu/iiif/image-api/1.1/compliance.html#level1';\nexport const STANFORD_IIIF_1_IMAGE_COMPLIANCE_2 =\n 'http://library.stanford.edu/iiif/image-api/1.1/compliance.html#level2';\nexport const STANFORD_IIIF_1_IMAGE_CONFORMANCE_0 =\n 'http://library.stanford.edu/iiif/image-api/1.1/conformance.html#level0';\nexport const STANFORD_IIIF_1_IMAGE_CONFORMANCE_1 =\n 'http://library.stanford.edu/iiif/image-api/1.1/conformance.html#level1';\nexport const STANFORD_IIIF_1_IMAGE_CONFORMANCE_2 =\n 'http://library.stanford.edu/iiif/image-api/1.1/conformance.html#level2';\nexport const IIIF_1_IMAGE_LEVEL_0 = 'http://iiif.io/api/image/1/level0.json';\nexport const IIIF_1_IMAGE_LEVEL_0_PROFILE = 'http://iiif.io/api/image/1/profiles/level0.json';\nexport const IIIF_1_IMAGE_LEVEL_1 = 'http://iiif.io/api/image/1/level1.json';\nexport const IIIF_1_IMAGE_LEVEL_1_PROFILE = 'http://iiif.io/api/image/1/profiles/level1.json';\nexport const IIIF_1_IMAGE_LEVEL_2 = 'http://iiif.io/api/image/1/level2.json';\nexport const IIIF_1_IMAGE_LEVEL_2_PROFILE = 'http://iiif.io/api/image/1/profiles/level2.json';\nexport const IIIF_2_IMAGE_LEVEL_0 = 'http://iiif.io/api/image/2/level0.json';\nexport const IIIF_2_IMAGE_LEVEL_0_PROFILE = 'http://iiif.io/api/image/2/profiles/level0.json';\nexport const IIIF_2_IMAGE_LEVEL_1 = 'http://iiif.io/api/image/2/level1.json';\nexport const IIIF_2_IMAGE_LEVEL_1_PROFILE = 'http://iiif.io/api/image/2/profiles/level1.json';\nexport const IIIF_2_IMAGE_LEVEL_2 = 'http://iiif.io/api/image/2/level2.json';\nexport const IIIF_2_IMAGE_LEVEL_2_PROFILE = 'http://iiif.io/api/image/2/profiles/level2.json';\nexport const IIIF_3_IMAGE_LEVEL_0 = 'level0';\nexport const IIIF_3_IMAGE_LEVEL_1 = 'level1';\nexport const IIIF_3_IMAGE_LEVEL_2 = 'level2';\n\n// Non-standard\nexport const IIIF_2_IMAGE_LEVEL_0_NO_JSON = 'http://iiif.io/api/image/2/level0';\nexport const IIIF_2_IMAGE_LEVEL_1_NO_JSON = 'http://iiif.io/api/image/2/level1';\nexport const IIIF_2_IMAGE_LEVEL_2_NO_JSON = 'http://iiif.io/api/image/2/level2';\n\nexport const level2Support = [\n IIIF_2_IMAGE_LEVEL_2_NO_JSON,\n STANFORD_IIIF_IMAGE_COMPLIANCE_2,\n STANFORD_IIIF_IMAGE_CONFORMANCE_2,\n STANFORD_IIIF_1_IMAGE_COMPLIANCE_2,\n STANFORD_IIIF_1_IMAGE_CONFORMANCE_2,\n IIIF_1_IMAGE_LEVEL_2,\n IIIF_1_IMAGE_LEVEL_2_PROFILE,\n IIIF_2_IMAGE_LEVEL_2,\n IIIF_2_IMAGE_LEVEL_2_PROFILE,\n IIIF_3_IMAGE_LEVEL_2,\n];\n\nexport const level1Support = [\n ...level2Support,\n IIIF_2_IMAGE_LEVEL_1_NO_JSON,\n STANFORD_IIIF_IMAGE_COMPLIANCE_1,\n STANFORD_IIIF_IMAGE_CONFORMANCE_1,\n STANFORD_IIIF_1_IMAGE_COMPLIANCE_1,\n STANFORD_IIIF_1_IMAGE_CONFORMANCE_1,\n IIIF_1_IMAGE_LEVEL_1,\n IIIF_1_IMAGE_LEVEL_1_PROFILE,\n IIIF_2_IMAGE_LEVEL_1,\n IIIF_2_IMAGE_LEVEL_1_PROFILE,\n IIIF_3_IMAGE_LEVEL_1,\n];\n\nexport const imageServiceProfiles = [\n IIIF_2_IMAGE_LEVEL_0_NO_JSON,\n IIIF_2_IMAGE_LEVEL_1_NO_JSON,\n IIIF_2_IMAGE_LEVEL_2_NO_JSON,\n STANFORD_IIIF_IMAGE_COMPLIANCE_0,\n STANFORD_IIIF_IMAGE_COMPLIANCE_1,\n STANFORD_IIIF_IMAGE_COMPLIANCE_2,\n STANFORD_IIIF_IMAGE_CONFORMANCE_0,\n STANFORD_IIIF_IMAGE_CONFORMANCE_1,\n STANFORD_IIIF_IMAGE_CONFORMANCE_2,\n STANFORD_IIIF_1_IMAGE_COMPLIANCE_0,\n STANFORD_IIIF_1_IMAGE_COMPLIANCE_1,\n STANFORD_IIIF_1_IMAGE_COMPLIANCE_2,\n STANFORD_IIIF_1_IMAGE_CONFORMANCE_0,\n STANFORD_IIIF_1_IMAGE_CONFORMANCE_1,\n STANFORD_IIIF_1_IMAGE_CONFORMANCE_2,\n IIIF_1_IMAGE_LEVEL_0,\n IIIF_1_IMAGE_LEVEL_0_PROFILE,\n IIIF_1_IMAGE_LEVEL_1,\n IIIF_1_IMAGE_LEVEL_1_PROFILE,\n IIIF_1_IMAGE_LEVEL_2,\n IIIF_1_IMAGE_LEVEL_2_PROFILE,\n IIIF_2_IMAGE_LEVEL_0,\n IIIF_2_IMAGE_LEVEL_0_PROFILE,\n IIIF_2_IMAGE_LEVEL_1,\n IIIF_2_IMAGE_LEVEL_1_PROFILE,\n IIIF_2_IMAGE_LEVEL_2,\n IIIF_2_IMAGE_LEVEL_2_PROFILE,\n IIIF_3_IMAGE_LEVEL_0,\n IIIF_3_IMAGE_LEVEL_1,\n IIIF_3_IMAGE_LEVEL_2,\n];\n\nexport const level0Support = imageServiceProfiles;\n\nexport const onlyLevel0 = [\n IIIF_2_IMAGE_LEVEL_0_NO_JSON,\n STANFORD_IIIF_IMAGE_COMPLIANCE_0,\n STANFORD_IIIF_IMAGE_CONFORMANCE_0,\n STANFORD_IIIF_1_IMAGE_COMPLIANCE_0,\n STANFORD_IIIF_1_IMAGE_CONFORMANCE_0,\n IIIF_1_IMAGE_LEVEL_0,\n IIIF_1_IMAGE_LEVEL_0_PROFILE,\n IIIF_2_IMAGE_LEVEL_0,\n IIIF_2_IMAGE_LEVEL_0_PROFILE,\n IIIF_3_IMAGE_LEVEL_0,\n];\n\nexport type Profile = {\n extraFormats: string[];\n extraQualities: string[];\n extraFeatures: ExtraFeature[];\n maxArea?: number;\n maxHeight?: number;\n maxWidth?: number;\n};\n\nexport const level0: Profile = {\n extraFormats: ['jpg'],\n extraQualities: ['default'],\n extraFeatures: ['sizeByWhListed'],\n};\n\nexport const level1: Profile = {\n extraFormats: ['jpg'],\n extraQualities: ['default'],\n extraFeatures: [\n 'baseUriRedirect',\n 'cors',\n 'jsonldMediaType',\n 'regionByPx',\n 'regionSquare',\n 'sizeByWhListed',\n 'sizeByH',\n 'sizeByW',\n 'sizeByWh',\n\n // 2.1\n // 'sizeByPct', <-- Used to be supported in 2.1\n ],\n};\n\nexport const level2: Profile = {\n extraFormats: ['jpg', 'png'],\n extraQualities: ['default'],\n extraFeatures: [\n 'baseUriRedirect',\n 'cors',\n 'jsonldMediaType',\n 'regionByPct',\n 'regionByPx',\n 'regionSquare',\n 'rotationBy90s',\n 'sizeByWhListed',\n 'sizeByConfinedWh',\n 'sizeByH',\n 'sizeByPct',\n 'sizeByW',\n 'sizeByWh',\n\n // 2.1\n // 'sizeByDistortedWh', <-- Used to be supported in 2.1\n // 'sizeByForcedWh', <-- Used to be supported in 2.1\n ],\n};\n\nexport const extraFeatures = [\n //\tThe base URI of the service will redirect to the image information document.\n 'baseUriRedirect',\n //\tThe canonical image URI HTTP link header is provided on image responses.\n 'canonicalLinkHeader',\n //\tThe CORS HTTP headers are provided on all responses.\n 'cors',\n //\tThe JSON-LD media type is provided when requested.\n 'jsonldMediaType',\n //\tThe image may be rotated around the vertical axis, resulting in a left-to-right mirroring of the content.\n 'mirroring',\n //\tThe profile HTTP link header is provided on image responses.\n 'profileLinkHeader',\n //\tRegions of the full image may be requested by percentage.\n 'regionByPct',\n //\tRegions of the full image may be requested by pixel dimensions.\n 'regionByPx',\n //\tA square region may be requested, where the width and height are equal to the shorter dimension of the full image.\n 'regionSquare',\n //\tImage rotation may be requested using values other than multiples of 90 degrees.\n 'rotationArbitrary',\n //\tImage rotation may be requested in multiples of 90 degrees.\n 'rotationBy90s',\n //\tImage size may be requested in the form !w,h.\n 'sizeByConfinedWh',\n //\tImage size may be requested in the form ,h.\n 'sizeByH',\n //\tImages size may be requested in the form pct:n.\n 'sizeByPct',\n //\tImage size may be requested in the form w,.\n 'sizeByW',\n //\tImage size may be requested in the form w,h.\n 'sizeByWh',\n //\tImage sizes prefixed with ^ may be requested.\n 'sizeUpscaling',\n\n // 2.1.1 compat\n 'sizeByWhListed',\n 'sizeByDistortedWh',\n 'sizeByForcedWh',\n] as const;\n\nexport type ExtraFeature = typeof extraFeatures extends ReadonlyArray<infer ElementType> ? ElementType : never;\n","import { level0, level1, level1Support, level2, level2Support, Profile } from './profiles';\n\nexport function levelToProfile(levelProfile: string): Profile {\n const isLevel2 = level2Support.indexOf(levelProfile) !== -1;\n if (isLevel2) {\n return level2;\n }\n const isLevel1 = level1Support.indexOf(levelProfile) !== -1;\n if (isLevel1) {\n return level1;\n }\n\n // The minimum.\n return level0;\n}\n","import { levelToProfile } from './level-to-profile';\nimport { Profile } from './profiles';\nimport { ImageService } from '@iiif/presentation-3';\n\nexport function combineProfiles(service: ImageService): Profile {\n const profiles: any[] = service ? (Array.isArray(service.profile) ? service.profile : [service.profile]) : [];\n const final: Profile = {\n extraQualities: [],\n extraFormats: [],\n extraFeatures: [],\n };\n\n for (let profile of profiles) {\n if (typeof profile === 'string') {\n profile = levelToProfile(profile);\n }\n\n if (!profile) {\n continue;\n }\n\n // Merging Image 2.1.1\n if (profile.formats) {\n for (const format of profile.formats) {\n if (final.extraFormats.indexOf(format) === -1) {\n final.extraFormats.push(format);\n }\n }\n }\n if (profile.qualities) {\n for (const format of profile.qualities) {\n if (final.extraQualities.indexOf(format) === -1) {\n final.extraQualities.push(format);\n }\n }\n }\n if (profile.supports) {\n for (const feature of profile.supports) {\n if (final.extraFeatures.indexOf(feature as any) === -1) {\n final.extraFeatures.push(feature as any);\n }\n }\n }\n\n if (profile.maxHeight) {\n final.maxHeight = profile.maxHeight;\n }\n if (profile.maxWidth) {\n final.maxWidth = profile.maxWidth;\n }\n if (profile.maxArea) {\n final.maxArea = profile.maxArea;\n }\n\n // Merging Image 3.0\n if (profile.extraFormats) {\n for (const format of profile.extraFormats) {\n if (final.extraFormats.indexOf(format) === -1) {\n final.extraFormats.push(format);\n }\n }\n }\n if (profile.extraQualities) {\n for (const format of profile.extraQualities) {\n if (final.extraQualities.indexOf(format) === -1) {\n final.extraQualities.push(format);\n }\n }\n }\n if (profile.extraFeatures) {\n for (const feature of profile.extraFeatures) {\n if (final.extraFeatures.indexOf(feature as any) === -1) {\n final.extraFeatures.push(feature as any);\n }\n }\n }\n\n if (profile.maxHeight) {\n final.maxHeight = profile.maxHeight;\n }\n if (profile.maxWidth) {\n final.maxWidth = profile.maxWidth;\n }\n if (profile.maxArea) {\n final.maxArea = profile.maxArea;\n }\n }\n\n if (service.extraFormats) {\n for (const format of service.extraFormats) {\n if (final.extraFormats.indexOf(format) === -1) {\n final.extraFormats.push(format);\n }\n }\n }\n if (service.extraFeatures) {\n for (const feature of service.extraFeatures) {\n if (final.extraFeatures.indexOf(feature as any) === -1) {\n final.extraFeatures.push(feature as any);\n }\n }\n }\n if (service.extraQualities) {\n for (const quality of service.extraQualities) {\n if (final.extraQualities.indexOf(quality as any) === -1) {\n final.extraQualities.push(quality as any);\n }\n }\n }\n\n return final;\n}\n","export function getId(resource: any) {\n if (resource['@id']) {\n return resource['@id'];\n }\n\n if (resource.id) {\n return resource.id;\n }\n\n return undefined;\n}\n","import { imageServiceProfiles } from '../profiles/profiles';\nimport { ImageService } from '@iiif/presentation-3';\nimport { getId } from './get-id';\n\nexport function isImageService(service: any): service is ImageService {\n if (!service || !service.profile) {\n return false;\n }\n\n if (!getId(service)) {\n return false;\n }\n\n const profiles = Array.isArray(service.profile) ? service.profile : [service.profile];\n\n for (const profile of profiles) {\n if (typeof profile === 'string' && imageServiceProfiles.indexOf(profile) !== -1) {\n return true;\n }\n }\n\n return false;\n}\n","import { ImageService } from '@iiif/presentation-3';\nimport { extraFeatures, Profile } from './profiles';\nimport { isImageService } from '../utilities/is-image-service';\nimport { combineProfiles } from './combine-profiles';\n\nexport function supports(\n service: ImageService,\n req: Partial<Profile> & { exactSize?: { width?: number; height?: number } }\n) {\n if (!isImageService(service)) {\n return [false, 'Not a valid image service'] as const;\n }\n\n req.extraFeatures = req.extraFeatures ? req.extraFeatures : [];\n\n const combined = combineProfiles(service);\n\n if (req.exactSize) {\n let valid = false;\n // 1. Check sizes.\n if (service.sizes) {\n for (const size of service.sizes) {\n if (size.width && size.width === req.exactSize.width) {\n if (extraFeatures.indexOf('sizeByW') !== -1) {\n valid = true;\n } else if (size.height && size.height === req.exactSize.height) {\n valid = true;\n }\n }\n if (size.height && size.height === req.exactSize.height) {\n if (extraFeatures.indexOf('sizeByH') !== -1) {\n valid = true;\n } else if (size.width && size.width === req.exactSize.width) {\n valid = true;\n }\n }\n }\n }\n\n if (!valid) {\n req.maxWidth = Math.max(req.maxWidth || 0, req.exactSize.width || 0) || undefined;\n req.maxHeight = Math.max(req.maxHeight || 0, req.exactSize.height || 0) || undefined;\n req.maxArea =\n Math.max(\n req.maxArea || 0,\n (req.exactSize.width && req.exactSize.height ? req.exactSize.width * req.exactSize.height : req.maxArea) || 0\n ) || undefined;\n\n if (!req.exactSize.height && req.exactSize.width) {\n if (req.extraFeatures.indexOf('sizeByW') === -1) {\n req.extraFeatures.push('sizeByW');\n }\n } else if (!req.exactSize.width && req.exactSize.height) {\n if (req.extraFeatures.indexOf('sizeByH') === -1) {\n req.extraFeatures.push('sizeByH');\n }\n }\n }\n }\n\n if (req.maxArea && combined.maxArea && req.maxArea > combined.maxArea) {\n return [false, `Max area is ${combined.maxArea}`] as const;\n }\n\n if (req.maxWidth && combined.maxWidth && req.maxWidth > combined.maxWidth) {\n return [false, `Max width is ${combined.maxWidth}`] as const;\n }\n\n if (req.maxHeight && combined.maxHeight && req.maxHeight > combined.maxHeight) {\n return [false, `Max height is ${combined.maxHeight}`] as const;\n }\n\n if (req.extraFeatures) {\n const missingFeatures = [];\n for (const feature of req.extraFeatures) {\n if (combined.extraFeatures.indexOf(feature) === -1) {\n missingFeatures.push(feature);\n }\n }\n if (missingFeatures.length) {\n return [false, `Missing features: ${missingFeatures.join(', ')}`] as const;\n }\n }\n\n if (req.extraFormats) {\n const missingFormats = [];\n for (const feature of req.extraFormats) {\n if (combined.extraFormats.indexOf(feature) === -1) {\n missingFormats.push(feature);\n }\n }\n if (missingFormats.length) {\n return [false, `Missing formats: ${missingFormats.join(', ')}`] as const;\n }\n }\n\n if (req.extraQualities) {\n const missingQualities = [];\n for (const quality of req.extraQualities) {\n if (combined.extraQualities.indexOf(quality) === -1) {\n missingQualities.push(quality);\n }\n }\n if (missingQualities.length) {\n return [false, `Missing qualities: ${missingQualities.join(', ')}`] as const;\n }\n }\n\n return [true] as const;\n}\n","import { RegionParameter } from '../types';\n\nexport function regionParameterToString({ x = 0, y = 0, w, h, full, square, percent }: RegionParameter) {\n if (full) {\n return 'full';\n }\n\n if (square) {\n return 'square';\n }\n\n if (typeof w === 'undefined' || typeof h === 'undefined') {\n throw new Error('RegionParameter: invalid region');\n }\n\n const xywh = `${x},${y},${w},${h}`;\n if (percent) {\n return `pct:${xywh}`;\n }\n\n return xywh;\n}\n","import { SizeParameter } from '../types';\n\nexport function sizeParameterToString({\n max,\n percentScale,\n upscaled,\n confined,\n width,\n height,\n serialiseAsFull,\n}: SizeParameter): string {\n const sb: string[] = [];\n\n if (upscaled) {\n sb.push('^');\n }\n\n if (max) {\n sb.push(serialiseAsFull ? 'full' : 'max');\n return sb.join('');\n }\n\n if (confined) {\n sb.push('!');\n }\n\n if (percentScale) {\n sb.push(`pct:${percentScale}`);\n }\n\n if (width) {\n sb.push(`${width}`);\n }\n\n sb.push(',');\n\n if (height) {\n sb.push(`${height}`);\n }\n\n return sb.join('');\n}\n","import { RotationParameter } from '../types';\n\nexport function rotationParameterToString(rotationParameter: RotationParameter) {\n return `${rotationParameter.mirror ? '!' : ''}${(rotationParameter.angle || 0) % 360}`;\n}\n","/**\n * Get canonical service url\n * Ensures an image service id contains the /info.json on the end of it.\n *\n * @param serviceId\n */\nexport function canonicalServiceUrl(serviceId: string) {\n return serviceId.endsWith('info.json')\n ? serviceId\n : serviceId.endsWith('/')\n ? `${serviceId}info.json`\n : `${serviceId}/info.json`;\n}\n","import { ImageService } from '@iiif/presentation-3';\nimport { ImageServiceImageRequest } from '../types';\nimport { combineProfiles } from '../profiles/combine-profiles';\nimport { parseImageServiceRequest } from '../parser/parse-image-service-request';\nimport { canonicalServiceUrl } from './canonical-service-url';\n\nexport function createImageServiceRequest(imageService: ImageService): ImageServiceImageRequest {\n const parsed = parseImageServiceRequest(canonicalServiceUrl(imageService.id));\n if (parsed.type !== 'info') {\n throw new Error('Invalid service URL');\n }\n\n const features = combineProfiles(imageService);\n\n return {\n identifier: parsed.identifier,\n originalPath: '',\n server: parsed.server,\n prefix: parsed.prefix,\n scheme: parsed.scheme,\n type: 'image',\n quality: features.extraQualities.indexOf('default') === -1 ? features.extraQualities[0] : 'default',\n region: {\n full: true,\n },\n size: {\n max: true,\n upscaled: false,\n confined: false,\n },\n format: 'jpg',\n rotation: {\n angle: 0,\n },\n };\n}\n","import { ImageSize } from '@iiif/presentation-3';\n\n/**\n * Extract fixed size scales\n *\n * Given a source width and height and a list of sizes of that same image,\n * it will return an ordered list of scales.\n *\n * @param width\n * @param height\n * @param sizes\n */\nexport function extractFixedSizeScales(width: number, height: number, sizes: ImageSize[]): number[] {\n const len = sizes.length;\n const scales = [];\n for (let i = 0; i < len; i++) {\n const size = sizes[i];\n const w = size.width;\n scales.push(width / w);\n }\n return scales;\n}\n","import { ImageSize } from '@iiif/presentation-3';\n\n/**\n * Fixed sizes from scales.\n *\n * Given a width and height of an image and a list of scales, this will return\n * an ordered list of widths and heights of the image at those scales.\n *\n * @param width\n * @param height\n * @param scales\n */\nexport function fixedSizesFromScales(width: number, height: number, scales: number[]): ImageSize[] {\n const len = scales.length;\n const sizes: ImageSize[] = [];\n for (let i = 0; i < len; i++) {\n const scale = scales[i];\n sizes.push({\n width: Math.floor(width / scale),\n height: Math.floor(height / scale),\n });\n }\n return sizes;\n}\n","export function getType(resource: any) {\n if (resource['@type']) {\n return resource['@type'];\n }\n if (resource.type) {\n return resource.type;\n }\n\n return undefined;\n}\n","import { ImageServiceImageRequest } from '../types';\nimport { regionParameterToString } from './region-parameter-to-string';\nimport { sizeParameterToString } from './size-parameter-to-string';\nimport { rotationParameterToString } from './rotation-parameter-to-string';\nimport { ImageService } from '@iiif/presentation-3';\n\nexport function imageServiceRequestToString(req: ImageServiceImageRequest, service?: ImageService): string {\n const prefix = req.prefix.startsWith('/') ? req.prefix.substr(1) : req.prefix;\n const baseUrl = `${req.scheme}://${req.server}/${prefix ? `${prefix}/` : ''}${req.identifier}`;\n\n if (req.type === 'base') {\n return baseUrl;\n }\n\n if (req.type === 'info') {\n return `${baseUrl}/info.json`;\n }\n\n let { size } = req;\n const { region, rotation, format, quality } = req;\n\n if (service) {\n // Service specific changes.\n const ctx = service['@context']\n ? Array.isArray(service['@context'])\n ? service['@context']\n : [service['@context']]\n : [];\n const is2 = ctx.indexOf('http://iiif.io/api/image/2/context.json') !== -1;\n const is3 = ctx.indexOf('http://iiif.io/api/image/3/context.json') !== -1;\n\n // max size, for canonical.\n if (\n (size.width === service.width && !size.height) ||\n (size.height === service.height && !size.width) ||\n (size.width === service.width && size.height === service.height)\n ) {\n size = { ...size, max: true };\n }\n\n if (is2) {\n if (size.max && !size.serialiseAsFull) {\n size = { ...size, serialiseAsFull: true };\n }\n\n if (!size.max && size.width && size.height) {\n size = { ...size, height: undefined };\n }\n }\n if (is3) {\n if (size.max && size.serialiseAsFull) {\n size = { ...size, serialiseAsFull: false };\n }\n\n if (size.width && !size.height && service.width && service.height) {\n // canonical requires height.\n const ratio = service.height / service.width;\n size = { ...size, height: Math.ceil(size.width * ratio) };\n }\n }\n\n // @todo FUTURE - possibly passing in a correct=true option\n // 1. Closeness/rounding to fixed size\n // 2. Fallback to supported format.\n // 3. Round to rotation\n }\n\n return [\n baseUrl,\n regionParameterToString(region),\n sizeParameterToString(size),\n rotationParameterToString(rotation),\n `${quality}.${format}`,\n ]\n .filter(Boolean)\n .join('/');\n}\n","import { ImageService } from '@iiif/presentation-3';\nimport { supports } from './supports';\n\nexport function imageServiceSupportsFormat(imageService: ImageService, format: string) {\n return supports(imageService, {\n extraFormats: [format],\n });\n}\n","import { ImageService } from '@iiif/presentation-3';\nimport { ImageServiceImageRequest } from '../types';\nimport { supports } from './supports';\nimport { ExtraFeature } from './profiles';\n\nexport function imageServiceSupportsRequest(imageService: ImageService, request: ImageServiceImageRequest) {\n if (request.type !== 'image') {\n return [true];\n }\n\n const extraFeatures: ExtraFeature[] = [];\n\n if (request.rotation.mirror) {\n extraFeatures.push('mirroring');\n }\n\n if (request.region.percent) {\n extraFeatures.push('regionByPct');\n }\n\n if (request.region.square) {\n extraFeatures.push('regionSquare');\n } else if (!request.region.full) {\n extraFeatures.push('regionByPx');\n }\n\n if (request.rotation.angle) {\n const remainder = request.rotation.angle % 90;\n if (remainder) {\n extraFeatures.push('rotationArbitrary');\n } else {\n extraFeatures.push('rotationBy90s');\n }\n }\n\n if (request.size.confined) {\n extraFeatures.push('sizeByConfinedWh');\n }\n\n if (!request.size.width && request.size.height) {\n extraFeatures.push('sizeByH');\n }\n\n if (request.size.percentScale) {\n extraFeatures.push('sizeByPct');\n }\n\n // Could we bail, and check sizes instead?\n const fixedSize = (imageService.sizes || []).find(\n (size) =>\n (size.width === request.size.width && !request.size.height) ||\n (size.height === request.size.height && !request.size.width) ||\n (size.height === request.size.height && size.width === request.size.width)\n );\n if (fixedSize) {\n extraFeatures.push('sizeByWhListed');\n } else {\n if (request.size.width && !request.size.height) {\n extraFeatures.push('sizeByW');\n }\n\n if (request.size.width && request.size.height) {\n extraFeatures.push('sizeByWh');\n }\n }\n\n if (request.size.upscaled) {\n extraFeatures.push('sizeUpscaling');\n }\n\n const [doesSupport, reason] = supports(imageService, {\n extraFeatures,\n extraQualities: [request.quality],\n extraFormats: [request.format],\n exactSize: request.size,\n });\n\n if (doesSupport) {\n return [true] as const;\n }\n\n return [false, reason] as const;\n}\n","import { ImageService } from '@iiif/presentation-3';\nimport { onlyLevel0 } from './profiles';\n\nexport function isLevel0(service: ImageService) {\n const profile = Array.isArray(service.profile) ? service.profile : [service.profile];\n\n for (const single of profile) {\n if (typeof single === 'string' && onlyLevel0.indexOf(single) !== -1) {\n return true;\n }\n }\n\n return false;\n}\n","/**\n * Get image server from ID.\n *\n * Normalises image service URLs to extract identity of the image server.\n *\n * @param url\n */\nexport function parseImageServerFromId(url: string): string {\n // Strip off the protocol + www\n const id = url.replace(/(https?:\\/\\/)?(www.)?/i, '');\n\n // Strip off the path.\n if (id.indexOf('/') !== -1) {\n return id.split('/')[0];\n }\n\n // Return the id.\n return id;\n}\n","import { ImageService } from '@iiif/presentation-3';\nimport { isImageService } from '../utilities/is-image-service';\nimport { level1Support, Profile } from './profiles';\n\nexport function supportsCustomSizes(service: ImageService): boolean {\n if (!isImageService(service)) {\n return false;\n }\n\n const profiles = Array.isArray(service.profile) ? service.profile : [service.profile];\n\n for (const profile of profiles) {\n if (typeof profile === 'string') {\n if (level1Support.indexOf(profile) !== -1) {\n return true;\n }\n } else {\n const supports = [...(profile.supports || []), ...((profile as Profile).extraFeatures || [])];\n if (\n supports.indexOf('regionByPx') !== -1 &&\n (supports.indexOf('sizeByW') !== -1 || supports.indexOf('sizeByWh') !== -1)\n ) {\n return true;\n }\n }\n }\n\n return false;\n}\n"],"names":["parseRegionParameter","pathPart","full","square","percent","startsWith","xywh","substr","split","map","part","parseFloat","x","y","w","h","Error","parseSizeParameter","size","upscaled","max","confined","slice","serialiseAsFull","percentScale","wh","t","trim","length","width","parseInt","height","parseRotationParameter","rotation","angle","mirror","Number","isNaN","parseImageServiceUrl","canonicalId","prefix","parsedUrl","match","scheme","server","path","parseImageServiceRequest","input","_prefix","parts","reverse","fileName","region","others","identifier","filter","Boolean","join","type","identifierParts","filenameParts","originalPath","quality","format","STANFORD_IIIF_IMAGE_COMPLIANCE_0","STANFORD_IIIF_IMAGE_COMPLIANCE_1","STANFORD_IIIF_IMAGE_COMPLIANCE_2","STANFORD_IIIF_IMAGE_CONFORMANCE_0","STANFORD_IIIF_IMAGE_CONFORMANCE_1","STANFORD_IIIF_IMAGE_CONFORMANCE_2","STANFORD_IIIF_1_IMAGE_COMPLIANCE_0","STANFORD_IIIF_1_IMAGE_COMPLIANCE_1","STANFORD_IIIF_1_IMAGE_COMPLIANCE_2","STANFORD_IIIF_1_IMAGE_CONFORMANCE_0","STANFORD_IIIF_1_IMAGE_CONFORMANCE_1","STANFORD_IIIF_1_IMAGE_CONFORMANCE_2","level2Support","level1Support","imageServiceProfiles","level0Support","onlyLevel0","level0","extraFormats","extraQualities","extraFeatures","level1","level2","levelToProfile","levelProfile","indexOf","combineProfiles","service","profiles","Array","isArray","profile","final","formats","push","qualities","supports","feature","maxHeight","maxWidth","maxArea","getId","resource","id","isImageService","req","combined","exactSize","valid","sizes","Math","missingFeatures","missingFormats","missingQualities","regionParameterToString","sizeParameterToString","sb","rotationParameterToString","rotationParameter","canonicalServiceUrl","serviceId","endsWith","imageService","parsed","features","len","scales","i","scale","floor","baseUrl","ctx","is2","is3","ratio","ceil","request","find","doesSupport","reason","single","url","replace"],"mappings":"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"}
function parseImageServerFromId(url) {
const id = url.replace(/(https?:\/\/)?(www.)?/i, "");
if (id.indexOf("/") !== -1) {
return id.split("/")[0];
}
return id;
}
function parseRegionParameter(pathPart) {
try {
if (pathPart === "full") {
return { full: true };
}
if (pathPart === "square") {
return { square: true };
}
const percent = pathPart.startsWith("pct:");
const stringParts = pathPart.substr(percent ? 4 : 0).split(",");
const xywh = stringParts.map((part) => parseFloat(part));
return {
x: xywh[0],
y: xywh[1],
w: xywh[2],
h: xywh[3],
percent
};
} catch {
throw new Error("Expected 'full', 'square' or 'x,y,w,h'. Found " + pathPart);
}
}
function parseSizeParameter(pathPart) {
const size = {
upscaled: false,
max: false,
confined: false
};
if (pathPart[0] === "^") {
size.upscaled = true;
pathPart = pathPart.slice(1);
}
if (pathPart === "max" || pathPart === "full") {
size.max = true;
size.serialiseAsFull = pathPart === "full";
return size;
}
if (pathPart[0] === "!") {
size.confined = true;
pathPart = pathPart.slice(1);
}
if (pathPart[0] === "p") {
size.percentScale = parseFloat(pathPart.slice(4));
return size;
}
const wh = pathPart.split(",").map((t) => t.trim());
if (wh.length) {
if (wh[0] !== "") {
size.width = parseInt(wh[0], 10);
}
if (wh[1] !== "") {
size.height = parseInt(wh[1], 10);
}
}
return size;
}
function parseRotationParameter(pathPart) {
const rotation = { angle: 0 };
if (pathPart[0] === "!") {
rotation.mirror = true;
pathPart = pathPart.substr(1);
}
rotation.angle = parseFloat(pathPart) % 360;
if (Number.isNaN(rotation.angle)) {
throw new Error(`Invalid rotation ${pathPart}`);
}
return rotation;
}
function parseImageServiceUrl(canonicalId, prefix = "") {
const parsedUrl = canonicalId.match(/^(([a-zA-Z]+):\/\/([^/]+))?((.*)+)/);
if (!parsedUrl) {
throw new Error(`Invalid or unknown input ${canonicalId}`);
}
const scheme = parsedUrl[2];
const server = parsedUrl[3];
let path = parsedUrl[4];
if (path[0] === "/") {
path = path.substr(1);
}
if (prefix.length > 0) {
if (prefix[0] === "/") {
prefix = prefix.substr(1);
}
if (prefix !== path.substr(0, prefix.length)) {
throw new Error(`Path does not start with prefix (path: ${path}, prefix: ${prefix})`);
}
path = path.substr(prefix.length);
}
return {
scheme,
server,
path,
prefix
};
}
function parseImageServiceRequest(input, _prefix = "") {
const { path, scheme, server, prefix } = parseImageServiceUrl(input, _prefix);
const parts = path.split("/").reverse();
const [fileName, rotation, size, region, ...others] = parts;
const identifier = others.reverse().filter(Boolean).join("/");
if (parts.length === 1 || fileName === "") {
return { type: "base", scheme, server, prefix, identifier };
}
if (fileName === "info.json") {
const [, ...identifierParts] = parts;
return {
type: "info",
scheme,
server,
prefix,
identifier: identifierParts.reverse().filter(Boolean).join("/")
};
}
const filenameParts = fileName.split(".");
return {
type: "image",
scheme,
server,
prefix,
identifier,
originalPath: path,
region: parseRegionParameter(region),
size: parseSizeParameter(size),
rotation: parseRotationParameter(rotation),
quality: filenameParts[0],
format: filenameParts[1]
};
}
const STANFORD_IIIF_IMAGE_COMPLIANCE_0 = "http://library.stanford.edu/iiif/image-api/compliance.html#level0";
const STANFORD_IIIF_IMAGE_COMPLIANCE_1 = "http://library.stanford.edu/iiif/image-api/compliance.html#level1";
const STANFORD_IIIF_IMAGE_COMPLIANCE_2 = "http://library.stanford.edu/iiif/image-api/compliance.html#level2";
const STANFORD_IIIF_IMAGE_CONFORMANCE_0 = "http://library.stanford.edu/iiif/image-api/conformance.html#level0";
const STANFORD_IIIF_IMAGE_CONFORMANCE_1 = "http://library.stanford.edu/iiif/image-api/conformance.html#level1";
const STANFORD_IIIF_IMAGE_CONFORMANCE_2 = "http://library.stanford.edu/iiif/image-api/conformance.html#level2";
const STANFORD_IIIF_1_IMAGE_COMPLIANCE_0 = "http://library.stanford.edu/iiif/image-api/1.1/compliance.html#level0";
const STANFORD_IIIF_1_IMAGE_COMPLIANCE_1 = "http://library.stanford.edu/iiif/image-api/1.1/compliance.html#level1";
const STANFORD_IIIF_1_IMAGE_COMPLIANCE_2 = "http://library.stanford.edu/iiif/image-api/1.1/compliance.html#level2";
const STANFORD_IIIF_1_IMAGE_CONFORMANCE_0 = "http://library.stanford.edu/iiif/image-api/1.1/conformance.html#level0";
const STANFORD_IIIF_1_IMAGE_CONFORMANCE_1 = "http://library.stanford.edu/iiif/image-api/1.1/conformance.html#level1";
const STANFORD_IIIF_1_IMAGE_CONFORMANCE_2 = "http://library.stanford.edu/iiif/image-api/1.1/conformance.html#level2";
const IIIF_1_IMAGE_LEVEL_0 = "http://iiif.io/api/image/1/level0.json";
const IIIF_1_IMAGE_LEVEL_0_PROFILE = "http://iiif.io/api/image/1/profiles/level0.json";
const IIIF_1_IMAGE_LEVEL_1 = "http://iiif.io/api/image/1/level1.json";
const IIIF_1_IMAGE_LEVEL_1_PROFILE = "http://iiif.io/api/image/1/profiles/level1.json";
const IIIF_1_IMAGE_LEVEL_2 = "http://iiif.io/api/image/1/level2.json";
const IIIF_1_IMAGE_LEVEL_2_PROFILE = "http://iiif.io/api/image/1/profiles/level2.json";
const IIIF_2_IMAGE_LEVEL_0 = "http://iiif.io/api/image/2/level0.json";
const IIIF_2_IMAGE_LEVEL_0_PROFILE = "http://iiif.io/api/image/2/profiles/level0.json";
const IIIF_2_IMAGE_LEVEL_1 = "http://iiif.io/api/image/2/level1.json";
const IIIF_2_IMAGE_LEVEL_1_PROFILE = "http://iiif.io/api/image/2/profiles/level1.json";
const IIIF_2_IMAGE_LEVEL_2 = "http://iiif.io/api/image/2/level2.json";
const IIIF_2_IMAGE_LEVEL_2_PROFILE = "http://iiif.io/api/image/2/profiles/level2.json";
const IIIF_3_IMAGE_LEVEL_0 = "level0";
const IIIF_3_IMAGE_LEVEL_1 = "level1";
const IIIF_3_IMAGE_LEVEL_2 = "level2";
const IIIF_2_IMAGE_LEVEL_0_NO_JSON = "http://iiif.io/api/image/2/level0";
const IIIF_2_IMAGE_LEVEL_1_NO_JSON = "http://iiif.io/api/image/2/level1";
const IIIF_2_IMAGE_LEVEL_2_NO_JSON = "http://iiif.io/api/image/2/level2";
const level2Support = [
IIIF_2_IMAGE_LEVEL_2_NO_JSON,
STANFORD_IIIF_IMAGE_COMPLIANCE_2,
STANFORD_IIIF_IMAGE_CONFORMANCE_2,
STANFORD_IIIF_1_IMAGE_COMPLIANCE_2,
STANFORD_IIIF_1_IMAGE_CONFORMANCE_2,
IIIF_1_IMAGE_LEVEL_2,
IIIF_1_IMAGE_LEVEL_2_PROFILE,
IIIF_2_IMAGE_LEVEL_2,
IIIF_2_IMAGE_LEVEL_2_PROFILE,
IIIF_3_IMAGE_LEVEL_2
];
const level1Support = [
...level2Support,
IIIF_2_IMAGE_LEVEL_1_NO_JSON,
STANFORD_IIIF_IMAGE_COMPLIANCE_1,
STANFORD_IIIF_IMAGE_CONFORMANCE_1,
STANFORD_IIIF_1_IMAGE_COMPLIANCE_1,
STANFORD_IIIF_1_IMAGE_CONFORMANCE_1,
IIIF_1_IMAGE_LEVEL_1,
IIIF_1_IMAGE_LEVEL_1_PROFILE,
IIIF_2_IMAGE_LEVEL_1,
IIIF_2_IMAGE_LEVEL_1_PROFILE,
IIIF_3_IMAGE_LEVEL_1
];
const imageServiceProfiles = [
IIIF_2_IMAGE_LEVEL_0_NO_JSON,
IIIF_2_IMAGE_LEVEL_1_NO_JSON,
IIIF_2_IMAGE_LEVEL_2_NO_JSON,
STANFORD_IIIF_IMAGE_COMPLIANCE_0,
STANFORD_IIIF_IMAGE_COMPLIANCE_1,
STANFORD_IIIF_IMAGE_COMPLIANCE_2,
STANFORD_IIIF_IMAGE_CONFORMANCE_0,
STANFORD_IIIF_IMAGE_CONFORMANCE_1,
STANFORD_IIIF_IMAGE_CONFORMANCE_2,
STANFORD_IIIF_1_IMAGE_COMPLIANCE_0,
STANFORD_IIIF_1_IMAGE_COMPLIANCE_1,
STANFORD_IIIF_1_IMAGE_COMPLIANCE_2,
STANFORD_IIIF_1_IMAGE_CONFORMANCE_0,
STANFORD_IIIF_1_IMAGE_CONFORMANCE_1,
STANFORD_IIIF_1_IMAGE_CONFORMANCE_2,
IIIF_1_IMAGE_LEVEL_0,
IIIF_1_IMAGE_LEVEL_0_PROFILE,
IIIF_1_IMAGE_LEVEL_1,
IIIF_1_IMAGE_LEVEL_1_PROFILE,
IIIF_1_IMAGE_LEVEL_2,
IIIF_1_IMAGE_LEVEL_2_PROFILE,
IIIF_2_IMAGE_LEVEL_0,
IIIF_2_IMAGE_LEVEL_0_PROFILE,
IIIF_2_IMAGE_LEVEL_1,
IIIF_2_IMAGE_LEVEL_1_PROFILE,
IIIF_2_IMAGE_LEVEL_2,
IIIF_2_IMAGE_LEVEL_2_PROFILE,
IIIF_3_IMAGE_LEVEL_0,
IIIF_3_IMAGE_LEVEL_1,
IIIF_3_IMAGE_LEVEL_2
];
const level0Support = imageServiceProfiles;
const onlyLevel0 = [
IIIF_2_IMAGE_LEVEL_0_NO_JSON,
STANFORD_IIIF_IMAGE_COMPLIANCE_0,
STANFORD_IIIF_IMAGE_CONFORMANCE_0,
STANFORD_IIIF_1_IMAGE_COMPLIANCE_0,
STANFORD_IIIF_1_IMAGE_CONFORMANCE_0,
IIIF_1_IMAGE_LEVEL_0,
IIIF_1_IMAGE_LEVEL_0_PROFILE,
IIIF_2_IMAGE_LEVEL_0,
IIIF_2_IMAGE_LEVEL_0_PROFILE,
IIIF_3_IMAGE_LEVEL_0
];
const level0 = {
extraFormats: ["jpg"],
extraQualities: ["default"],
extraFeatures: ["sizeByWhListed"]
};
const level1 = {
extraFormats: ["jpg"],
extraQualities: ["default"],
extraFeatures: [
"baseUriRedirect",
"cors",
"jsonldMediaType",
"regionByPx",
"regionSquare",
"sizeByWhListed",
"sizeByH",
"sizeByW",
"sizeByWh"
]
};
const level2 = {
extraFormats: ["jpg", "png"],
extraQualities: ["default"],
extraFeatures: [
"baseUriRedirect",
"cors",
"jsonldMediaType",
"regionByPct",
"regionByPx",
"regionSquare",
"rotationBy90s",
"sizeByWhListed",
"sizeByConfinedWh",
"sizeByH",
"sizeByPct",
"sizeByW",
"sizeByWh"
]
};
const extraFeatures = [
"baseUriRedirect",
"canonicalLinkHeader",
"cors",
"jsonldMediaType",
"mirroring",
"profileLinkHeader",
"regionByPct",
"regionByPx",
"regionSquare",
"rotationArbitrary",
"rotationBy90s",
"sizeByConfinedWh",
"sizeByH",
"sizeByPct",
"sizeByW",
"sizeByWh",
"sizeUpscaling",
"sizeByWhListed",
"sizeByDistortedWh",
"sizeByForcedWh"
];
function levelToProfile(levelProfile) {
const isLevel2 = level2Support.indexOf(levelProfile) !== -1;
if (isLevel2) {
return level2;
}
const isLevel1 = level1Support.indexOf(levelProfile) !== -1;
if (isLevel1) {
return level1;
}
return level0;
}
function combineProfiles(service) {
const profiles = service ? Array.isArray(service.profile) ? service.profile : [service.profile] : [];
const final = {
extraQualities: [],
extraFormats: [],
extraFeatures: []
};
for (let profile of profiles) {
if (typeof profile === "string") {
profile = levelToProfile(profile);
}
if (!profile) {
continue;
}
if (profile.formats) {
for (const format of profile.formats) {
if (final.extraFormats.indexOf(format) === -1) {
final.extraFormats.push(format);
}
}
}
if (profile.qualities) {
for (const format of profile.qualities) {
if (final.extraQualities.indexOf(format) === -1) {
final.extraQualities.push(format);
}
}
}
if (profile.supports) {
for (const feature of profile.supports) {
if (final.extraFeatures.indexOf(feature) === -1) {
final.extraFeatures.push(feature);
}
}
}
if (profile.maxHeight) {
final.maxHeight = profile.maxHeight;
}
if (profile.maxWidth) {
final.maxWidth = profile.maxWidth;
}
if (profile.maxArea) {
final.maxArea = profile.maxArea;
}
if (profile.extraFormats) {
for (const format of profile.extraFormats) {
if (final.extraFormats.indexOf(format) === -1) {
final.extraFormats.push(format);
}
}
}
if (profile.extraQualities) {
for (const format of profile.extraQualities) {
if (final.extraQualities.indexOf(format) === -1) {
final.extraQualities.push(format);
}
}
}
if (profile.extraFeatures) {
for (const feature of profile.extraFeatures) {
if (final.extraFeatures.indexOf(feature) === -1) {
final.extraFeatures.push(feature);
}
}
}
if (profile.maxHeight) {
final.maxHeight = profile.maxHeight;
}
if (profile.maxWidth) {
final.maxWidth = profile.maxWidth;
}
if (profile.maxArea) {
final.maxArea = profile.maxArea;
}
}
if (service.extraFormats) {
for (const format of service.extraFormats) {
if (final.extraFormats.indexOf(format) === -1) {
final.extraFormats.push(format);
}
}
}
if (service.extraFeatures) {
for (const feature of service.extraFeatures) {
if (final.extraFeatures.indexOf(feature) === -1) {
final.extraFeatures.push(feature);
}
}
}
if (service.extraQualities) {
for (const quality of service.extraQualities) {
if (final.extraQualities.indexOf(quality) === -1) {
final.extraQualities.push(quality);
}
}
}
return final;
}
function isLevel0(service) {
const profile = Array.isArray(service.profile) ? service.profile : [service.profile];
for (const single of profile) {
if (typeof single === "string" && onlyLevel0.indexOf(single) !== -1) {
return true;
}
}
return false;
}
function getId(resource) {
if (resource["@id"]) {
return resource["@id"];
}
if (resource.id) {
return resource.id;
}
return void 0;
}
function isImageService(service) {
if (!service || !service.profile) {
return false;
}
if (!getId(service)) {
return false;
}
const profiles = Array.isArray(service.profile) ? service.profile : [service.profile];
for (const profile of profiles) {
if (typeof profile === "string" && imageServiceProfiles.indexOf(profile) !== -1) {
return true;
}
}
return false;
}
function supports(service, req) {
if (!isImageService(service)) {
return [false, "Not a valid image service"];
}
req.extraFeatures = req.extraFeatures ? req.extraFeatures : [];
const combined = combineProfiles(service);
if (req.exactSize) {
let valid = false;
if (service.sizes) {
for (const size of service.sizes) {
if (size.width && size.width === req.exactSize.width) {
if (extraFeatures.indexOf("sizeByW") !== -1) {
valid = true;
} else if (size.height && size.height === req.exactSize.height) {
valid = true;
}
}
if (size.height && size.height === req.exactSize.height) {
if (extraFeatures.indexOf("sizeByH") !== -1) {
valid = true;
} else if (size.width && size.width === req.exactSize.width) {
valid = true;
}
}
}
}
if (!valid) {
req.maxWidth = Math.max(req.maxWidth || 0, req.exactSize.width || 0) || void 0;
req.maxHeight = Math.max(req.maxHeight || 0, req.exactSize.height || 0) || void 0;
req.maxArea = Math.max(
req.maxArea || 0,
(req.exactSize.width && req.exactSize.height ? req.exactSize.width * req.exactSize.height : req.maxArea) || 0
) || void 0;
if (!req.exactSize.height && req.exactSize.width) {
if (req.extraFeatures.indexOf("sizeByW") === -1) {
req.extraFeatures.push("sizeByW");
}
} else if (!req.exactSize.width && req.exactSize.height) {
if (req.extraFeatures.indexOf("sizeByH") === -1) {
req.extraFeatures.push("sizeByH");
}
}
}
}
if (req.maxArea && combined.maxArea && req.maxArea > combined.maxArea) {
return [false, `Max area is ${combined.maxArea}`];
}
if (req.maxWidth && combined.maxWidth && req.maxWidth > combined.maxWidth) {
return [false, `Max width is ${combined.maxWidth}`];
}
if (req.maxHeight && combined.maxHeight && req.maxHeight > combined.maxHeight) {
return [false, `Max height is ${combined.maxHeight}`];
}
if (req.extraFeatures) {
const missingFeatures = [];
for (const feature of req.extraFeatures) {
if (combined.extraFeatures.indexOf(feature) === -1) {
missingFeatures.push(feature);
}
}
if (missingFeatures.length) {
return [false, `Missing features: ${missingFeatures.join(", ")}`];
}
}
if (req.extraFormats) {
const missingFormats = [];
for (const feature of req.extraFormats) {
if (combined.extraFormats.indexOf(feature) === -1) {
missingFormats.push(feature);
}
}
if (missingFormats.length) {
return [false, `Missing formats: ${missingFormats.join(", ")}`];
}
}
if (req.extraQualities) {
const missingQualities = [];
for (const quality of req.extraQualities) {
if (combined.extraQualities.indexOf(quality) === -1) {
missingQualities.push(quality);
}
}
if (missingQualities.length) {
return [false, `Missing qualities: ${missingQualities.join(", ")}`];
}
}
return [true];
}
function supportsCustomSizes(service) {
if (!isImageService(service)) {
return false;
}
const profiles = Array.isArray(service.profile) ? service.profile : [service.profile];
for (const profile of profiles) {
if (typeof profile === "string") {
if (level1Support.indexOf(profile) !== -1) {
return true;
}
} else {
const supports2 = [...profile.supports || [], ...profile.extraFeatures || []];
if (supports2.indexOf("regionByPx") !== -1 && (supports2.indexOf("sizeByW") !== -1 || supports2.indexOf("sizeByWh") !== -1)) {
return true;
}
}
}
return false;
}
function imageServiceSupportsFormat(imageService, format) {
return supports(imageService, {
extraFormats: [format]
});
}
function imageServiceSupportsRequest(imageService, request) {
if (request.type !== "image") {
return [true];
}
const extraFeatures2 = [];
if (request.rotation.mirror) {
extraFeatures2.push("mirroring");
}
if (request.region.percent) {
extraFeatures2.push("regionByPct");
}
if (request.region.square) {
extraFeatures2.push("regionSquare");
} else if (!request.region.full) {
extraFeatures2.push("regionByPx");
}
if (request.rotation.angle) {
const remainder = request.rotation.angle % 90;
if (remainder) {
extraFeatures2.push("rotationArbitrary");
} else {
extraFeatures2.push("rotationBy90s");
}
}
if (request.size.confined) {
extraFeatures2.push("sizeByConfinedWh");
}
if (!request.size.width && request.size.height) {
extraFeatures2.push("sizeByH");
}
if (request.size.percentScale) {
extraFeatures2.push("sizeByPct");
}
const fixedSize = (imageService.sizes || []).find(
(size) => size.width === request.size.width && !request.size.height || size.height === request.size.height && !request.size.width || size.height === request.size.height && size.width === request.size.width
);
if (fixedSize) {
extraFeatures2.push("sizeByWhListed");
} else {
if (request.size.width && !request.size.height) {
extraFeatures2.push("sizeByW");
}
if (request.size.width && request.size.height) {
extraFeatures2.push("sizeByWh");
}
}
if (request.size.upscaled) {
extraFeatures2.push("sizeUpscaling");
}
const [doesSupport, reason] = supports(imageService, {
extraFeatures: extraFeatures2,
extraQualities: [request.quality],
extraFormats: [request.format],
exactSize: request.size
});
if (doesSupport) {
return [true];
}
return [false, reason];
}
function regionParameterToString({ x = 0, y = 0, w, h, full, square, percent }) {
if (full) {
return "full";
}
if (square) {
return "square";
}
if (typeof w === "undefined" || typeof h === "undefined") {
throw new Error("RegionParameter: invalid region");
}
const xywh = `${x},${y},${w},${h}`;
if (percent) {
return `pct:${xywh}`;
}
return xywh;
}
function sizeParameterToString({
max,
percentScale,
upscaled,
confined,
width,
height,
serialiseAsFull
}) {
const sb = [];
if (upscaled) {
sb.push("^");
}
if (max) {
sb.push(serialiseAsFull ? "full" : "max");
return sb.join("");
}
if (confined) {
sb.push("!");
}
if (percentScale) {
sb.push(`pct:${percentScale}`);
}
if (width) {
sb.push(`${width}`);
}
sb.push(",");
if (height) {
sb.push(`${height}`);
}
return sb.join("");
}
function rotationParameterToString(rotationParameter) {
return `${rotationParameter.mirror ? "!" : ""}${(rotationParameter.angle || 0) % 360}`;
}
function imageServiceRequestToString(req, service) {
const prefix = req.prefix.startsWith("/") ? req.prefix.substr(1) : req.prefix;
const baseUrl = `${req.scheme}://${req.server}/${prefix ? `${prefix}/` : ""}${req.identifier}`;
if (req.type === "base") {
return baseUrl;
}
if (req.type === "info") {
return `${baseUrl}/info.json`;
}
let { size } = req;
const { region, rotation, format, quality } = req;
if (service) {
const ctx = service["@context"] ? Array.isArray(service["@context"]) ? service["@context"] : [service["@context"]] : [];
const is2 = ctx.indexOf("http://iiif.io/api/image/2/context.json") !== -1;
const is3 = ctx.indexOf("http://iiif.io/api/image/3/context.json") !== -1;
if (size.width === service.width && !size.height || size.height === service.height && !size.width || size.width === service.width && size.height === service.height) {
size = { ...size, max: true };
}
if (is2) {
if (size.max && !size.serialiseAsFull) {
size = { ...size, serialiseAsFull: true };
}
if (!size.max && size.width && size.height) {
size = { ...size, height: void 0 };
}
}
if (is3) {
if (size.max && size.serialiseAsFull) {
size = { ...size, serialiseAsFull: false };
}
if (size.width && !size.height && service.width && service.height) {
const ratio = service.height / service.width;
size = { ...size, height: Math.ceil(size.width * ratio) };
}
}
}
return [
baseUrl,
regionParameterToString(region),
sizeParameterToString(size),
rotationParameterToString(rotation),
`${quality}.${format}`
].filter(Boolean).join("/");
}
function canonicalServiceUrl(serviceId) {
return serviceId.endsWith("info.json") ? serviceId : serviceId.endsWith("/") ? `${serviceId}info.json` : `${serviceId}/info.json`;
}
function createImageServiceRequest(imageService) {
const parsed = parseImageServiceRequest(canonicalServiceUrl(imageService.id));
if (parsed.type !== "info") {
throw new Error("Invalid service URL");
}
const features = combineProfiles(imageService);
return {
identifier: parsed.identifier,
originalPath: "",
server: parsed.server,
prefix: parsed.prefix,
scheme: parsed.scheme,
type: "image",
quality: features.extraQualities.indexOf("default") === -1 ? features.extraQualities[0] : "default",
region: {
full: true
},
size: {
max: true,
upscaled: false,
confined: false
},
format: "jpg",
rotation: {
angle: 0
}
};
}
function extractFixedSizeScales(width, height, sizes) {
const len = sizes.length;
const scales = [];
for (let i = 0; i < len; i++) {
const size = sizes[i];
const w = size.width;
scales.push(width / w);
}
return scales;
}
function fixedSizesFromScales(width, height, scales) {
const len = scales.length;
const sizes = [];
for (let i = 0; i < len; i++) {
const scale = scales[i];
sizes.push({
width: Math.floor(width / scale),
height: Math.floor(height / scale)
});
}
return sizes;
}
function getType(resource) {
if (resource["@type"]) {
return resource["@type"];
}
if (resource.type) {
return resource.type;
}
return void 0;
}
export {
IIIF_1_IMAGE_LEVEL_0,
IIIF_1_IMAGE_LEVEL_0_PROFILE,
IIIF_1_IMAGE_LEVEL_1,
IIIF_1_IMAGE_LEVEL_1_PROFILE,
IIIF_1_IMAGE_LEVEL_2,
IIIF_1_IMAGE_LEVEL_2_PROFILE,
IIIF_2_IMAGE_LEVEL_0,
IIIF_2_IMAGE_LEVEL_0_NO_JSON,
IIIF_2_IMAGE_LEVEL_0_PROFILE,
IIIF_2_IMAGE_LEVEL_1,
IIIF_2_IMAGE_LEVEL_1_NO_JSON,
IIIF_2_IMAGE_LEVEL_1_PROFILE,
IIIF_2_IMAGE_LEVEL_2,
IIIF_2_IMAGE_LEVEL_2_NO_JSON,
IIIF_2_IMAGE_LEVEL_2_PROFILE,
IIIF_3_IMAGE_LEVEL_0,
IIIF_3_IMAGE_LEVEL_1,
IIIF_3_IMAGE_LEVEL_2,
STANFORD_IIIF_1_IMAGE_COMPLIANCE_0,
STANFORD_IIIF_1_IMAGE_COMPLIANCE_1,
STANFORD_IIIF_1_IMAGE_COMPLIANCE_2,
STANFORD_IIIF_1_IMAGE_CONFORMANCE_0,
STANFORD_IIIF_1_IMAGE_CONFORMANCE_1,
STANFORD_IIIF_1_IMAGE_CONFORMANCE_2,
STANFORD_IIIF_IMAGE_COMPLIANCE_0,
STANFORD_IIIF_IMAGE_COMPLIANCE_1,
STANFORD_IIIF_IMAGE_COMPLIANCE_2,
STANFORD_IIIF_IMAGE_CONFORMANCE_0,
STANFORD_IIIF_IMAGE_CONFORMANCE_1,
STANFORD_IIIF_IMAGE_CONFORMANCE_2,
canonicalServiceUrl,
combineProfiles,
createImageServiceRequest,
extraFeatures,
extractFixedSizeScales,
fixedSizesFromScales,
getId,
getType,
imageServiceProfiles,
imageServiceRequestToString,
imageServiceSupportsFormat,
imageServiceSupportsRequest,
isImageService,
isLevel0,
level0,
level0Support,
level1,
level1Support,
level2,
level2Support,
levelToProfile,
onlyLevel0,
parseImageServerFromId,
parseImageServiceRequest,
parseImageServiceUrl,
parseRegionParameter,
parseRotationParameter,
parseSizeParameter,
regionParameterToString,
rotationParameterToString,
sizeParameterToString,
supports,
supportsCustomSizes
};
//# sourceMappingURL=index.mjs.map
{"version":3,"file":"index.mjs","sources":["../../../src/image-3/parser/parse-image-server-from-id.ts","../../../src/image-3/parser/parse-region-parameter.ts","../../../src/image-3/parser/parse-size-parameter.ts","../../../src/image-3/parser/parse-rotation-parameter.ts","../../../src/image-3/parser/parse-image-service-url.ts","../../../src/image-3/parser/parse-image-service-request.ts","../../../src/image-3/profiles/profiles.ts","../../../src/image-3/profiles/level-to-profile.ts","../../../src/image-3/profiles/combine-profiles.ts","../../../src/image-3/profiles/is-level-0.ts","../../../src/image-3/utilities/get-id.ts","../../../src/image-3/utilities/is-image-service.ts","../../../src/image-3/profiles/supports.ts","../../../src/image-3/profiles/supports-custom-sizes.ts","../../../src/image-3/profiles/image-service-supports-format.ts","../../../src/image-3/profiles/image-service-supports-request.ts","../../../src/image-3/serialize/region-parameter-to-string.ts","../../../src/image-3/serialize/size-parameter-to-string.ts","../../../src/image-3/serialize/rotation-parameter-to-string.ts","../../../src/image-3/serialize/image-service-request-to-string.ts","../../../src/image-3/utilities/canonical-service-url.ts","../../../src/image-3/utilities/create-image-service-request.ts","../../../src/image-3/utilities/extract-fixed-size-scales.ts","../../../src/image-3/utilities/fixed-sizes-from-scales.ts","../../../src/image-3/utilities/get-type.ts"],"sourcesContent":["/**\n * Get image server from ID.\n *\n * Normalises image service URLs to extract identity of the image server.\n *\n * @param url\n */\nexport function parseImageServerFromId(url: string): string {\n // Strip off the protocol + www\n const id = url.replace(/(https?:\\/\\/)?(www.)?/i, '');\n\n // Strip off the path.\n if (id.indexOf('/') !== -1) {\n return id.split('/')[0];\n }\n\n // Return the id.\n return id;\n}\n","import { RegionParameter } from '../types';\n\nexport function parseRegionParameter(pathPart: string): RegionParameter {\n try {\n if (pathPart === 'full') {\n return { full: true };\n }\n if (pathPart === 'square') {\n return { square: true };\n }\n\n const percent = pathPart.startsWith('pct:');\n const stringParts = pathPart.substr(percent ? 4 : 0).split(',');\n const xywh = stringParts.map((part) => parseFloat(part));\n return {\n x: xywh[0],\n y: xywh[1],\n w: xywh[2],\n h: xywh[3],\n percent: percent,\n };\n } catch {\n throw new Error(\"Expected 'full', 'square' or 'x,y,w,h'. Found \" + pathPart);\n }\n}\n","import { SizeParameter } from '../types';\n\nexport function parseSizeParameter(pathPart: string): SizeParameter {\n const size: SizeParameter = {\n upscaled: false,\n max: false,\n confined: false,\n };\n\n if (pathPart[0] === '^') {\n size.upscaled = true;\n pathPart = pathPart.slice(1);\n }\n\n if (pathPart === 'max' || pathPart === 'full') {\n size.max = true;\n size.serialiseAsFull = pathPart === 'full';\n return size;\n }\n\n if (pathPart[0] === '!') {\n size.confined = true;\n pathPart = pathPart.slice(1);\n }\n\n if (pathPart[0] === 'p') {\n size.percentScale = parseFloat(pathPart.slice(4));\n return size;\n }\n\n const wh = pathPart.split(',').map((t) => t.trim());\n if (wh.length) {\n if (wh[0] !== '') {\n size.width = parseInt(wh[0], 10);\n }\n\n if (wh[1] !== '') {\n size.height = parseInt(wh[1], 10);\n }\n }\n\n return size;\n}\n","import { RotationParameter } from '../types';\n\nexport function parseRotationParameter(pathPart: string): RotationParameter {\n const rotation: RotationParameter = { angle: 0 };\n if (pathPart[0] === '!') {\n rotation.mirror = true;\n pathPart = pathPart.substr(1);\n }\n\n rotation.angle = parseFloat(pathPart) % 360;\n if (Number.isNaN(rotation.angle)) {\n throw new Error(`Invalid rotation ${pathPart}`);\n }\n return rotation;\n}\n","export function parseImageServiceUrl(canonicalId: string, prefix = '') {\n const parsedUrl = canonicalId.match(/^(([a-zA-Z]+):\\/\\/([^/]+))?((.*)+)/);\n if (!parsedUrl) {\n throw new Error(`Invalid or unknown input ${canonicalId}`);\n }\n const scheme = parsedUrl[2];\n const server = parsedUrl[3];\n let path = parsedUrl[4];\n if (path[0] === '/') {\n path = path.substr(1);\n }\n if (prefix.length > 0) {\n if (prefix[0] === '/') {\n prefix = prefix.substr(1);\n }\n if (prefix !== path.substr(0, prefix.length)) {\n throw new Error(`Path does not start with prefix (path: ${path}, prefix: ${prefix})`);\n }\n path = path.substr(prefix.length);\n }\n\n return {\n scheme,\n server,\n path,\n prefix,\n };\n}\n","import { parseRegionParameter } from './parse-region-parameter';\nimport { parseSizeParameter } from './parse-size-parameter';\nimport { parseRotationParameter } from './parse-rotation-parameter';\nimport { ImageServiceImageRequest } from '../types';\nimport { parseImageServiceUrl } from './parse-image-service-url';\n\nexport function parseImageServiceRequest(input: string, _prefix = ''): ImageServiceImageRequest {\n const { path, scheme, server, prefix } = parseImageServiceUrl(input, _prefix);\n\n const parts = path.split('/').reverse();\n const [fileName, rotation, size, region, ...others] = parts;\n const identifier = others.reverse().filter(Boolean).join('/');\n\n if (parts.length === 1 || fileName === '') {\n // likely the server will want to redirect this\n return { type: 'base', scheme, server, prefix, identifier };\n }\n\n if (fileName === 'info.json') {\n const [, ...identifierParts] = parts;\n\n return {\n type: 'info',\n scheme,\n server,\n prefix,\n identifier: identifierParts.reverse().filter(Boolean).join('/'),\n };\n }\n\n const filenameParts = fileName.split('.');\n\n return {\n type: 'image',\n scheme,\n server,\n prefix,\n identifier,\n originalPath: path,\n region: parseRegionParameter(region),\n size: parseSizeParameter(size),\n rotation: parseRotationParameter(rotation),\n quality: filenameParts[0],\n format: filenameParts[1],\n };\n}\n","export const STANFORD_IIIF_IMAGE_COMPLIANCE_0 = 'http://library.stanford.edu/iiif/image-api/compliance.html#level0';\nexport const STANFORD_IIIF_IMAGE_COMPLIANCE_1 = 'http://library.stanford.edu/iiif/image-api/compliance.html#level1';\nexport const STANFORD_IIIF_IMAGE_COMPLIANCE_2 = 'http://library.stanford.edu/iiif/image-api/compliance.html#level2';\nexport const STANFORD_IIIF_IMAGE_CONFORMANCE_0 = 'http://library.stanford.edu/iiif/image-api/conformance.html#level0';\nexport const STANFORD_IIIF_IMAGE_CONFORMANCE_1 = 'http://library.stanford.edu/iiif/image-api/conformance.html#level1';\nexport const STANFORD_IIIF_IMAGE_CONFORMANCE_2 = 'http://library.stanford.edu/iiif/image-api/conformance.html#level2';\nexport const STANFORD_IIIF_1_IMAGE_COMPLIANCE_0 =\n 'http://library.stanford.edu/iiif/image-api/1.1/compliance.html#level0';\nexport const STANFORD_IIIF_1_IMAGE_COMPLIANCE_1 =\n 'http://library.stanford.edu/iiif/image-api/1.1/compliance.html#level1';\nexport const STANFORD_IIIF_1_IMAGE_COMPLIANCE_2 =\n 'http://library.stanford.edu/iiif/image-api/1.1/compliance.html#level2';\nexport const STANFORD_IIIF_1_IMAGE_CONFORMANCE_0 =\n 'http://library.stanford.edu/iiif/image-api/1.1/conformance.html#level0';\nexport const STANFORD_IIIF_1_IMAGE_CONFORMANCE_1 =\n 'http://library.stanford.edu/iiif/image-api/1.1/conformance.html#level1';\nexport const STANFORD_IIIF_1_IMAGE_CONFORMANCE_2 =\n 'http://library.stanford.edu/iiif/image-api/1.1/conformance.html#level2';\nexport const IIIF_1_IMAGE_LEVEL_0 = 'http://iiif.io/api/image/1/level0.json';\nexport const IIIF_1_IMAGE_LEVEL_0_PROFILE = 'http://iiif.io/api/image/1/profiles/level0.json';\nexport const IIIF_1_IMAGE_LEVEL_1 = 'http://iiif.io/api/image/1/level1.json';\nexport const IIIF_1_IMAGE_LEVEL_1_PROFILE = 'http://iiif.io/api/image/1/profiles/level1.json';\nexport const IIIF_1_IMAGE_LEVEL_2 = 'http://iiif.io/api/image/1/level2.json';\nexport const IIIF_1_IMAGE_LEVEL_2_PROFILE = 'http://iiif.io/api/image/1/profiles/level2.json';\nexport const IIIF_2_IMAGE_LEVEL_0 = 'http://iiif.io/api/image/2/level0.json';\nexport const IIIF_2_IMAGE_LEVEL_0_PROFILE = 'http://iiif.io/api/image/2/profiles/level0.json';\nexport const IIIF_2_IMAGE_LEVEL_1 = 'http://iiif.io/api/image/2/level1.json';\nexport const IIIF_2_IMAGE_LEVEL_1_PROFILE = 'http://iiif.io/api/image/2/profiles/level1.json';\nexport const IIIF_2_IMAGE_LEVEL_2 = 'http://iiif.io/api/image/2/level2.json';\nexport const IIIF_2_IMAGE_LEVEL_2_PROFILE = 'http://iiif.io/api/image/2/profiles/level2.json';\nexport const IIIF_3_IMAGE_LEVEL_0 = 'level0';\nexport const IIIF_3_IMAGE_LEVEL_1 = 'level1';\nexport const IIIF_3_IMAGE_LEVEL_2 = 'level2';\n\n// Non-standard\nexport const IIIF_2_IMAGE_LEVEL_0_NO_JSON = 'http://iiif.io/api/image/2/level0';\nexport const IIIF_2_IMAGE_LEVEL_1_NO_JSON = 'http://iiif.io/api/image/2/level1';\nexport const IIIF_2_IMAGE_LEVEL_2_NO_JSON = 'http://iiif.io/api/image/2/level2';\n\nexport const level2Support = [\n IIIF_2_IMAGE_LEVEL_2_NO_JSON,\n STANFORD_IIIF_IMAGE_COMPLIANCE_2,\n STANFORD_IIIF_IMAGE_CONFORMANCE_2,\n STANFORD_IIIF_1_IMAGE_COMPLIANCE_2,\n STANFORD_IIIF_1_IMAGE_CONFORMANCE_2,\n IIIF_1_IMAGE_LEVEL_2,\n IIIF_1_IMAGE_LEVEL_2_PROFILE,\n IIIF_2_IMAGE_LEVEL_2,\n IIIF_2_IMAGE_LEVEL_2_PROFILE,\n IIIF_3_IMAGE_LEVEL_2,\n];\n\nexport const level1Support = [\n ...level2Support,\n IIIF_2_IMAGE_LEVEL_1_NO_JSON,\n STANFORD_IIIF_IMAGE_COMPLIANCE_1,\n STANFORD_IIIF_IMAGE_CONFORMANCE_1,\n STANFORD_IIIF_1_IMAGE_COMPLIANCE_1,\n STANFORD_IIIF_1_IMAGE_CONFORMANCE_1,\n IIIF_1_IMAGE_LEVEL_1,\n IIIF_1_IMAGE_LEVEL_1_PROFILE,\n IIIF_2_IMAGE_LEVEL_1,\n IIIF_2_IMAGE_LEVEL_1_PROFILE,\n IIIF_3_IMAGE_LEVEL_1,\n];\n\nexport const imageServiceProfiles = [\n IIIF_2_IMAGE_LEVEL_0_NO_JSON,\n IIIF_2_IMAGE_LEVEL_1_NO_JSON,\n IIIF_2_IMAGE_LEVEL_2_NO_JSON,\n STANFORD_IIIF_IMAGE_COMPLIANCE_0,\n STANFORD_IIIF_IMAGE_COMPLIANCE_1,\n STANFORD_IIIF_IMAGE_COMPLIANCE_2,\n STANFORD_IIIF_IMAGE_CONFORMANCE_0,\n STANFORD_IIIF_IMAGE_CONFORMANCE_1,\n STANFORD_IIIF_IMAGE_CONFORMANCE_2,\n STANFORD_IIIF_1_IMAGE_COMPLIANCE_0,\n STANFORD_IIIF_1_IMAGE_COMPLIANCE_1,\n STANFORD_IIIF_1_IMAGE_COMPLIANCE_2,\n STANFORD_IIIF_1_IMAGE_CONFORMANCE_0,\n STANFORD_IIIF_1_IMAGE_CONFORMANCE_1,\n STANFORD_IIIF_1_IMAGE_CONFORMANCE_2,\n IIIF_1_IMAGE_LEVEL_0,\n IIIF_1_IMAGE_LEVEL_0_PROFILE,\n IIIF_1_IMAGE_LEVEL_1,\n IIIF_1_IMAGE_LEVEL_1_PROFILE,\n IIIF_1_IMAGE_LEVEL_2,\n IIIF_1_IMAGE_LEVEL_2_PROFILE,\n IIIF_2_IMAGE_LEVEL_0,\n IIIF_2_IMAGE_LEVEL_0_PROFILE,\n IIIF_2_IMAGE_LEVEL_1,\n IIIF_2_IMAGE_LEVEL_1_PROFILE,\n IIIF_2_IMAGE_LEVEL_2,\n IIIF_2_IMAGE_LEVEL_2_PROFILE,\n IIIF_3_IMAGE_LEVEL_0,\n IIIF_3_IMAGE_LEVEL_1,\n IIIF_3_IMAGE_LEVEL_2,\n];\n\nexport const level0Support = imageServiceProfiles;\n\nexport const onlyLevel0 = [\n IIIF_2_IMAGE_LEVEL_0_NO_JSON,\n STANFORD_IIIF_IMAGE_COMPLIANCE_0,\n STANFORD_IIIF_IMAGE_CONFORMANCE_0,\n STANFORD_IIIF_1_IMAGE_COMPLIANCE_0,\n STANFORD_IIIF_1_IMAGE_CONFORMANCE_0,\n IIIF_1_IMAGE_LEVEL_0,\n IIIF_1_IMAGE_LEVEL_0_PROFILE,\n IIIF_2_IMAGE_LEVEL_0,\n IIIF_2_IMAGE_LEVEL_0_PROFILE,\n IIIF_3_IMAGE_LEVEL_0,\n];\n\nexport type Profile = {\n extraFormats: string[];\n extraQualities: string[];\n extraFeatures: ExtraFeature[];\n maxArea?: number;\n maxHeight?: number;\n maxWidth?: number;\n};\n\nexport const level0: Profile = {\n extraFormats: ['jpg'],\n extraQualities: ['default'],\n extraFeatures: ['sizeByWhListed'],\n};\n\nexport const level1: Profile = {\n extraFormats: ['jpg'],\n extraQualities: ['default'],\n extraFeatures: [\n 'baseUriRedirect',\n 'cors',\n 'jsonldMediaType',\n 'regionByPx',\n 'regionSquare',\n 'sizeByWhListed',\n 'sizeByH',\n 'sizeByW',\n 'sizeByWh',\n\n // 2.1\n // 'sizeByPct', <-- Used to be supported in 2.1\n ],\n};\n\nexport const level2: Profile = {\n extraFormats: ['jpg', 'png'],\n extraQualities: ['default'],\n extraFeatures: [\n 'baseUriRedirect',\n 'cors',\n 'jsonldMediaType',\n 'regionByPct',\n 'regionByPx',\n 'regionSquare',\n 'rotationBy90s',\n 'sizeByWhListed',\n 'sizeByConfinedWh',\n 'sizeByH',\n 'sizeByPct',\n 'sizeByW',\n 'sizeByWh',\n\n // 2.1\n // 'sizeByDistortedWh', <-- Used to be supported in 2.1\n // 'sizeByForcedWh', <-- Used to be supported in 2.1\n ],\n};\n\nexport const extraFeatures = [\n //\tThe base URI of the service will redirect to the image information document.\n 'baseUriRedirect',\n //\tThe canonical image URI HTTP link header is provided on image responses.\n 'canonicalLinkHeader',\n //\tThe CORS HTTP headers are provided on all responses.\n 'cors',\n //\tThe JSON-LD media type is provided when requested.\n 'jsonldMediaType',\n //\tThe image may be rotated around the vertical axis, resulting in a left-to-right mirroring of the content.\n 'mirroring',\n //\tThe profile HTTP link header is provided on image responses.\n 'profileLinkHeader',\n //\tRegions of the full image may be requested by percentage.\n 'regionByPct',\n //\tRegions of the full image may be requested by pixel dimensions.\n 'regionByPx',\n //\tA square region may be requested, where the width and height are equal to the shorter dimension of the full image.\n 'regionSquare',\n //\tImage rotation may be requested using values other than multiples of 90 degrees.\n 'rotationArbitrary',\n //\tImage rotation may be requested in multiples of 90 degrees.\n 'rotationBy90s',\n //\tImage size may be requested in the form !w,h.\n 'sizeByConfinedWh',\n //\tImage size may be requested in the form ,h.\n 'sizeByH',\n //\tImages size may be requested in the form pct:n.\n 'sizeByPct',\n //\tImage size may be requested in the form w,.\n 'sizeByW',\n //\tImage size may be requested in the form w,h.\n 'sizeByWh',\n //\tImage sizes prefixed with ^ may be requested.\n 'sizeUpscaling',\n\n // 2.1.1 compat\n 'sizeByWhListed',\n 'sizeByDistortedWh',\n 'sizeByForcedWh',\n] as const;\n\nexport type ExtraFeature = typeof extraFeatures extends ReadonlyArray<infer ElementType> ? ElementType : never;\n","import { level0, level1, level1Support, level2, level2Support, Profile } from './profiles';\n\nexport function levelToProfile(levelProfile: string): Profile {\n const isLevel2 = level2Support.indexOf(levelProfile) !== -1;\n if (isLevel2) {\n return level2;\n }\n const isLevel1 = level1Support.indexOf(levelProfile) !== -1;\n if (isLevel1) {\n return level1;\n }\n\n // The minimum.\n return level0;\n}\n","import { levelToProfile } from './level-to-profile';\nimport { Profile } from './profiles';\nimport { ImageService } from '@iiif/presentation-3';\n\nexport function combineProfiles(service: ImageService): Profile {\n const profiles: any[] = service ? (Array.isArray(service.profile) ? service.profile : [service.profile]) : [];\n const final: Profile = {\n extraQualities: [],\n extraFormats: [],\n extraFeatures: [],\n };\n\n for (let profile of profiles) {\n if (typeof profile === 'string') {\n profile = levelToProfile(profile);\n }\n\n if (!profile) {\n continue;\n }\n\n // Merging Image 2.1.1\n if (profile.formats) {\n for (const format of profile.formats) {\n if (final.extraFormats.indexOf(format) === -1) {\n final.extraFormats.push(format);\n }\n }\n }\n if (profile.qualities) {\n for (const format of profile.qualities) {\n if (final.extraQualities.indexOf(format) === -1) {\n final.extraQualities.push(format);\n }\n }\n }\n if (profile.supports) {\n for (const feature of profile.supports) {\n if (final.extraFeatures.indexOf(feature as any) === -1) {\n final.extraFeatures.push(feature as any);\n }\n }\n }\n\n if (profile.maxHeight) {\n final.maxHeight = profile.maxHeight;\n }\n if (profile.maxWidth) {\n final.maxWidth = profile.maxWidth;\n }\n if (profile.maxArea) {\n final.maxArea = profile.maxArea;\n }\n\n // Merging Image 3.0\n if (profile.extraFormats) {\n for (const format of profile.extraFormats) {\n if (final.extraFormats.indexOf(format) === -1) {\n final.extraFormats.push(format);\n }\n }\n }\n if (profile.extraQualities) {\n for (const format of profile.extraQualities) {\n if (final.extraQualities.indexOf(format) === -1) {\n final.extraQualities.push(format);\n }\n }\n }\n if (profile.extraFeatures) {\n for (const feature of profile.extraFeatures) {\n if (final.extraFeatures.indexOf(feature as any) === -1) {\n final.extraFeatures.push(feature as any);\n }\n }\n }\n\n if (profile.maxHeight) {\n final.maxHeight = profile.maxHeight;\n }\n if (profile.maxWidth) {\n final.maxWidth = profile.maxWidth;\n }\n if (profile.maxArea) {\n final.maxArea = profile.maxArea;\n }\n }\n\n if (service.extraFormats) {\n for (const format of service.extraFormats) {\n if (final.extraFormats.indexOf(format) === -1) {\n final.extraFormats.push(format);\n }\n }\n }\n if (service.extraFeatures) {\n for (const feature of service.extraFeatures) {\n if (final.extraFeatures.indexOf(feature as any) === -1) {\n final.extraFeatures.push(feature as any);\n }\n }\n }\n if (service.extraQualities) {\n for (const quality of service.extraQualities) {\n if (final.extraQualities.indexOf(quality as any) === -1) {\n final.extraQualities.push(quality as any);\n }\n }\n }\n\n return final;\n}\n","import { ImageService } from '@iiif/presentation-3';\nimport { onlyLevel0 } from './profiles';\n\nexport function isLevel0(service: ImageService) {\n const profile = Array.isArray(service.profile) ? service.profile : [service.profile];\n\n for (const single of profile) {\n if (typeof single === 'string' && onlyLevel0.indexOf(single) !== -1) {\n return true;\n }\n }\n\n return false;\n}\n","export function getId(resource: any) {\n if (resource['@id']) {\n return resource['@id'];\n }\n\n if (resource.id) {\n return resource.id;\n }\n\n return undefined;\n}\n","import { imageServiceProfiles } from '../profiles/profiles';\nimport { ImageService } from '@iiif/presentation-3';\nimport { getId } from './get-id';\n\nexport function isImageService(service: any): service is ImageService {\n if (!service || !service.profile) {\n return false;\n }\n\n if (!getId(service)) {\n return false;\n }\n\n const profiles = Array.isArray(service.profile) ? service.profile : [service.profile];\n\n for (const profile of profiles) {\n if (typeof profile === 'string' && imageServiceProfiles.indexOf(profile) !== -1) {\n return true;\n }\n }\n\n return false;\n}\n","import { ImageService } from '@iiif/presentation-3';\nimport { extraFeatures, Profile } from './profiles';\nimport { isImageService } from '../utilities/is-image-service';\nimport { combineProfiles } from './combine-profiles';\n\nexport function supports(\n service: ImageService,\n req: Partial<Profile> & { exactSize?: { width?: number; height?: number } }\n) {\n if (!isImageService(service)) {\n return [false, 'Not a valid image service'] as const;\n }\n\n req.extraFeatures = req.extraFeatures ? req.extraFeatures : [];\n\n const combined = combineProfiles(service);\n\n if (req.exactSize) {\n let valid = false;\n // 1. Check sizes.\n if (service.sizes) {\n for (const size of service.sizes) {\n if (size.width && size.width === req.exactSize.width) {\n if (extraFeatures.indexOf('sizeByW') !== -1) {\n valid = true;\n } else if (size.height && size.height === req.exactSize.height) {\n valid = true;\n }\n }\n if (size.height && size.height === req.exactSize.height) {\n if (extraFeatures.indexOf('sizeByH') !== -1) {\n valid = true;\n } else if (size.width && size.width === req.exactSize.width) {\n valid = true;\n }\n }\n }\n }\n\n if (!valid) {\n req.maxWidth = Math.max(req.maxWidth || 0, req.exactSize.width || 0) || undefined;\n req.maxHeight = Math.max(req.maxHeight || 0, req.exactSize.height || 0) || undefined;\n req.maxArea =\n Math.max(\n req.maxArea || 0,\n (req.exactSize.width && req.exactSize.height ? req.exactSize.width * req.exactSize.height : req.maxArea) || 0\n ) || undefined;\n\n if (!req.exactSize.height && req.exactSize.width) {\n if (req.extraFeatures.indexOf('sizeByW') === -1) {\n req.extraFeatures.push('sizeByW');\n }\n } else if (!req.exactSize.width && req.exactSize.height) {\n if (req.extraFeatures.indexOf('sizeByH') === -1) {\n req.extraFeatures.push('sizeByH');\n }\n }\n }\n }\n\n if (req.maxArea && combined.maxArea && req.maxArea > combined.maxArea) {\n return [false, `Max area is ${combined.maxArea}`] as const;\n }\n\n if (req.maxWidth && combined.maxWidth && req.maxWidth > combined.maxWidth) {\n return [false, `Max width is ${combined.maxWidth}`] as const;\n }\n\n if (req.maxHeight && combined.maxHeight && req.maxHeight > combined.maxHeight) {\n return [false, `Max height is ${combined.maxHeight}`] as const;\n }\n\n if (req.extraFeatures) {\n const missingFeatures = [];\n for (const feature of req.extraFeatures) {\n if (combined.extraFeatures.indexOf(feature) === -1) {\n missingFeatures.push(feature);\n }\n }\n if (missingFeatures.length) {\n return [false, `Missing features: ${missingFeatures.join(', ')}`] as const;\n }\n }\n\n if (req.extraFormats) {\n const missingFormats = [];\n for (const feature of req.extraFormats) {\n if (combined.extraFormats.indexOf(feature) === -1) {\n missingFormats.push(feature);\n }\n }\n if (missingFormats.length) {\n return [false, `Missing formats: ${missingFormats.join(', ')}`] as const;\n }\n }\n\n if (req.extraQualities) {\n const missingQualities = [];\n for (const quality of req.extraQualities) {\n if (combined.extraQualities.indexOf(quality) === -1) {\n missingQualities.push(quality);\n }\n }\n if (missingQualities.length) {\n return [false, `Missing qualities: ${missingQualities.join(', ')}`] as const;\n }\n }\n\n return [true] as const;\n}\n","import { ImageService } from '@iiif/presentation-3';\nimport { isImageService } from '../utilities/is-image-service';\nimport { level1Support, Profile } from './profiles';\n\nexport function supportsCustomSizes(service: ImageService): boolean {\n if (!isImageService(service)) {\n return false;\n }\n\n const profiles = Array.isArray(service.profile) ? service.profile : [service.profile];\n\n for (const profile of profiles) {\n if (typeof profile === 'string') {\n if (level1Support.indexOf(profile) !== -1) {\n return true;\n }\n } else {\n const supports = [...(profile.supports || []), ...((profile as Profile).extraFeatures || [])];\n if (\n supports.indexOf('regionByPx') !== -1 &&\n (supports.indexOf('sizeByW') !== -1 || supports.indexOf('sizeByWh') !== -1)\n ) {\n return true;\n }\n }\n }\n\n return false;\n}\n","import { ImageService } from '@iiif/presentation-3';\nimport { supports } from './supports';\n\nexport function imageServiceSupportsFormat(imageService: ImageService, format: string) {\n return supports(imageService, {\n extraFormats: [format],\n });\n}\n","import { ImageService } from '@iiif/presentation-3';\nimport { ImageServiceImageRequest } from '../types';\nimport { supports } from './supports';\nimport { ExtraFeature } from './profiles';\n\nexport function imageServiceSupportsRequest(imageService: ImageService, request: ImageServiceImageRequest) {\n if (request.type !== 'image') {\n return [true];\n }\n\n const extraFeatures: ExtraFeature[] = [];\n\n if (request.rotation.mirror) {\n extraFeatures.push('mirroring');\n }\n\n if (request.region.percent) {\n extraFeatures.push('regionByPct');\n }\n\n if (request.region.square) {\n extraFeatures.push('regionSquare');\n } else if (!request.region.full) {\n extraFeatures.push('regionByPx');\n }\n\n if (request.rotation.angle) {\n const remainder = request.rotation.angle % 90;\n if (remainder) {\n extraFeatures.push('rotationArbitrary');\n } else {\n extraFeatures.push('rotationBy90s');\n }\n }\n\n if (request.size.confined) {\n extraFeatures.push('sizeByConfinedWh');\n }\n\n if (!request.size.width && request.size.height) {\n extraFeatures.push('sizeByH');\n }\n\n if (request.size.percentScale) {\n extraFeatures.push('sizeByPct');\n }\n\n // Could we bail, and check sizes instead?\n const fixedSize = (imageService.sizes || []).find(\n (size) =>\n (size.width === request.size.width && !request.size.height) ||\n (size.height === request.size.height && !request.size.width) ||\n (size.height === request.size.height && size.width === request.size.width)\n );\n if (fixedSize) {\n extraFeatures.push('sizeByWhListed');\n } else {\n if (request.size.width && !request.size.height) {\n extraFeatures.push('sizeByW');\n }\n\n if (request.size.width && request.size.height) {\n extraFeatures.push('sizeByWh');\n }\n }\n\n if (request.size.upscaled) {\n extraFeatures.push('sizeUpscaling');\n }\n\n const [doesSupport, reason] = supports(imageService, {\n extraFeatures,\n extraQualities: [request.quality],\n extraFormats: [request.format],\n exactSize: request.size,\n });\n\n if (doesSupport) {\n return [true] as const;\n }\n\n return [false, reason] as const;\n}\n","import { RegionParameter } from '../types';\n\nexport function regionParameterToString({ x = 0, y = 0, w, h, full, square, percent }: RegionParameter) {\n if (full) {\n return 'full';\n }\n\n if (square) {\n return 'square';\n }\n\n if (typeof w === 'undefined' || typeof h === 'undefined') {\n throw new Error('RegionParameter: invalid region');\n }\n\n const xywh = `${x},${y},${w},${h}`;\n if (percent) {\n return `pct:${xywh}`;\n }\n\n return xywh;\n}\n","import { SizeParameter } from '../types';\n\nexport function sizeParameterToString({\n max,\n percentScale,\n upscaled,\n confined,\n width,\n height,\n serialiseAsFull,\n}: SizeParameter): string {\n const sb: string[] = [];\n\n if (upscaled) {\n sb.push('^');\n }\n\n if (max) {\n sb.push(serialiseAsFull ? 'full' : 'max');\n return sb.join('');\n }\n\n if (confined) {\n sb.push('!');\n }\n\n if (percentScale) {\n sb.push(`pct:${percentScale}`);\n }\n\n if (width) {\n sb.push(`${width}`);\n }\n\n sb.push(',');\n\n if (height) {\n sb.push(`${height}`);\n }\n\n return sb.join('');\n}\n","import { RotationParameter } from '../types';\n\nexport function rotationParameterToString(rotationParameter: RotationParameter) {\n return `${rotationParameter.mirror ? '!' : ''}${(rotationParameter.angle || 0) % 360}`;\n}\n","import { ImageServiceImageRequest } from '../types';\nimport { regionParameterToString } from './region-parameter-to-string';\nimport { sizeParameterToString } from './size-parameter-to-string';\nimport { rotationParameterToString } from './rotation-parameter-to-string';\nimport { ImageService } from '@iiif/presentation-3';\n\nexport function imageServiceRequestToString(req: ImageServiceImageRequest, service?: ImageService): string {\n const prefix = req.prefix.startsWith('/') ? req.prefix.substr(1) : req.prefix;\n const baseUrl = `${req.scheme}://${req.server}/${prefix ? `${prefix}/` : ''}${req.identifier}`;\n\n if (req.type === 'base') {\n return baseUrl;\n }\n\n if (req.type === 'info') {\n return `${baseUrl}/info.json`;\n }\n\n let { size } = req;\n const { region, rotation, format, quality } = req;\n\n if (service) {\n // Service specific changes.\n const ctx = service['@context']\n ? Array.isArray(service['@context'])\n ? service['@context']\n : [service['@context']]\n : [];\n const is2 = ctx.indexOf('http://iiif.io/api/image/2/context.json') !== -1;\n const is3 = ctx.indexOf('http://iiif.io/api/image/3/context.json') !== -1;\n\n // max size, for canonical.\n if (\n (size.width === service.width && !size.height) ||\n (size.height === service.height && !size.width) ||\n (size.width === service.width && size.height === service.height)\n ) {\n size = { ...size, max: true };\n }\n\n if (is2) {\n if (size.max && !size.serialiseAsFull) {\n size = { ...size, serialiseAsFull: true };\n }\n\n if (!size.max && size.width && size.height) {\n size = { ...size, height: undefined };\n }\n }\n if (is3) {\n if (size.max && size.serialiseAsFull) {\n size = { ...size, serialiseAsFull: false };\n }\n\n if (size.width && !size.height && service.width && service.height) {\n // canonical requires height.\n const ratio = service.height / service.width;\n size = { ...size, height: Math.ceil(size.width * ratio) };\n }\n }\n\n // @todo FUTURE - possibly passing in a correct=true option\n // 1. Closeness/rounding to fixed size\n // 2. Fallback to supported format.\n // 3. Round to rotation\n }\n\n return [\n baseUrl,\n regionParameterToString(region),\n sizeParameterToString(size),\n rotationParameterToString(rotation),\n `${quality}.${format}`,\n ]\n .filter(Boolean)\n .join('/');\n}\n","/**\n * Get canonical service url\n * Ensures an image service id contains the /info.json on the end of it.\n *\n * @param serviceId\n */\nexport function canonicalServiceUrl(serviceId: string) {\n return serviceId.endsWith('info.json')\n ? serviceId\n : serviceId.endsWith('/')\n ? `${serviceId}info.json`\n : `${serviceId}/info.json`;\n}\n","import { ImageService } from '@iiif/presentation-3';\nimport { ImageServiceImageRequest } from '../types';\nimport { combineProfiles } from '../profiles/combine-profiles';\nimport { parseImageServiceRequest } from '../parser/parse-image-service-request';\nimport { canonicalServiceUrl } from './canonical-service-url';\n\nexport function createImageServiceRequest(imageService: ImageService): ImageServiceImageRequest {\n const parsed = parseImageServiceRequest(canonicalServiceUrl(imageService.id));\n if (parsed.type !== 'info') {\n throw new Error('Invalid service URL');\n }\n\n const features = combineProfiles(imageService);\n\n return {\n identifier: parsed.identifier,\n originalPath: '',\n server: parsed.server,\n prefix: parsed.prefix,\n scheme: parsed.scheme,\n type: 'image',\n quality: features.extraQualities.indexOf('default') === -1 ? features.extraQualities[0] : 'default',\n region: {\n full: true,\n },\n size: {\n max: true,\n upscaled: false,\n confined: false,\n },\n format: 'jpg',\n rotation: {\n angle: 0,\n },\n };\n}\n","import { ImageSize } from '@iiif/presentation-3';\n\n/**\n * Extract fixed size scales\n *\n * Given a source width and height and a list of sizes of that same image,\n * it will return an ordered list of scales.\n *\n * @param width\n * @param height\n * @param sizes\n */\nexport function extractFixedSizeScales(width: number, height: number, sizes: ImageSize[]): number[] {\n const len = sizes.length;\n const scales = [];\n for (let i = 0; i < len; i++) {\n const size = sizes[i];\n const w = size.width;\n scales.push(width / w);\n }\n return scales;\n}\n","import { ImageSize } from '@iiif/presentation-3';\n\n/**\n * Fixed sizes from scales.\n *\n * Given a width and height of an image and a list of scales, this will return\n * an ordered list of widths and heights of the image at those scales.\n *\n * @param width\n * @param height\n * @param scales\n */\nexport function fixedSizesFromScales(width: number, height: number, scales: number[]): ImageSize[] {\n const len = scales.length;\n const sizes: ImageSize[] = [];\n for (let i = 0; i < len; i++) {\n const scale = scales[i];\n sizes.push({\n width: Math.floor(width / scale),\n height: Math.floor(height / scale),\n });\n }\n return sizes;\n}\n","export function getType(resource: any) {\n if (resource['@type']) {\n return resource['@type'];\n }\n if (resource.type) {\n return resource.type;\n }\n\n return undefined;\n}\n"],"names":["supports","extraFeatures"],"mappings":"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"}
// Generated by dts-bundle-generator v6.13.0
import { ImageService, ImageSize } from '@iiif/presentation-3';
/**
* Size parameter
*
* Represents the {size} parameter of a IIIF image request.
* see https://iiif.io/api/image/3.0/#42-size
* Port of https://github.com/digirati-co-uk/iiif-net/blob/main/src/IIIF/IIIF/ImageApi/SizeParameter.cs
*/
export declare type SizeParameter = {
height?: number;
width?: number;
max: boolean;
serialiseAsFull?: boolean;
upscaled: boolean;
confined: boolean;
percentScale?: number;
};
/**
* Region parameter
*
* Represents the {region} parameter of a IIIF image request.
* see https://iiif.io/api/image/3.0/#41-region
* Port of https://github.com/digirati-co-uk/iiif-net/blob/main/src/IIIF/IIIF/ImageApi/RegionParameter.cs
*/
export declare type RegionParameter = {
x?: number;
y?: number;
w?: number;
h?: number;
full?: boolean;
square?: boolean;
percent?: boolean;
};
/**
* Rotation parameter
*
* Represents the {rotation} parameter of a IIIF image request.
* see https://iiif.io/api/image/3.0/#43-rotation
* Port of https://github.com/digirati-co-uk/iiif-net/blob/main/src/IIIF/IIIF/ImageApi/RotationParameter.cs
*/
export declare type RotationParameter = {
mirror?: boolean;
angle: number;
};
export declare type ImageServiceImageRequest = {
type: "base";
scheme: string;
server: string;
prefix: string;
identifier: string;
} | {
type: "info";
scheme: string;
server: string;
prefix: string;
identifier: string;
} | {
type: "image";
scheme: string;
server: string;
prefix: string;
identifier: string;
region: RegionParameter;
size: SizeParameter;
rotation: RotationParameter;
quality: string;
format: string;
originalPath: string;
};
/**
* Get image server from ID.
*
* Normalises image service URLs to extract identity of the image server.
*
* @param url
*/
export declare function parseImageServerFromId(url: string): string;
export declare function parseImageServiceRequest(input: string, _prefix?: string): ImageServiceImageRequest;
export declare function parseImageServiceUrl(canonicalId: string, prefix?: string): {
scheme: string;
server: string;
path: string;
prefix: string;
};
export declare function parseRegionParameter(pathPart: string): RegionParameter;
export declare function parseRotationParameter(pathPart: string): RotationParameter;
export declare function parseSizeParameter(pathPart: string): SizeParameter;
export declare const STANFORD_IIIF_IMAGE_COMPLIANCE_0 = "http://library.stanford.edu/iiif/image-api/compliance.html#level0";
export declare const STANFORD_IIIF_IMAGE_COMPLIANCE_1 = "http://library.stanford.edu/iiif/image-api/compliance.html#level1";
export declare const STANFORD_IIIF_IMAGE_COMPLIANCE_2 = "http://library.stanford.edu/iiif/image-api/compliance.html#level2";
export declare const STANFORD_IIIF_IMAGE_CONFORMANCE_0 = "http://library.stanford.edu/iiif/image-api/conformance.html#level0";
export declare const STANFORD_IIIF_IMAGE_CONFORMANCE_1 = "http://library.stanford.edu/iiif/image-api/conformance.html#level1";
export declare const STANFORD_IIIF_IMAGE_CONFORMANCE_2 = "http://library.stanford.edu/iiif/image-api/conformance.html#level2";
export declare const STANFORD_IIIF_1_IMAGE_COMPLIANCE_0 = "http://library.stanford.edu/iiif/image-api/1.1/compliance.html#level0";
export declare const STANFORD_IIIF_1_IMAGE_COMPLIANCE_1 = "http://library.stanford.edu/iiif/image-api/1.1/compliance.html#level1";
export declare const STANFORD_IIIF_1_IMAGE_COMPLIANCE_2 = "http://library.stanford.edu/iiif/image-api/1.1/compliance.html#level2";
export declare const STANFORD_IIIF_1_IMAGE_CONFORMANCE_0 = "http://library.stanford.edu/iiif/image-api/1.1/conformance.html#level0";
export declare const STANFORD_IIIF_1_IMAGE_CONFORMANCE_1 = "http://library.stanford.edu/iiif/image-api/1.1/conformance.html#level1";
export declare const STANFORD_IIIF_1_IMAGE_CONFORMANCE_2 = "http://library.stanford.edu/iiif/image-api/1.1/conformance.html#level2";
export declare const IIIF_1_IMAGE_LEVEL_0 = "http://iiif.io/api/image/1/level0.json";
export declare const IIIF_1_IMAGE_LEVEL_0_PROFILE = "http://iiif.io/api/image/1/profiles/level0.json";
export declare const IIIF_1_IMAGE_LEVEL_1 = "http://iiif.io/api/image/1/level1.json";
export declare const IIIF_1_IMAGE_LEVEL_1_PROFILE = "http://iiif.io/api/image/1/profiles/level1.json";
export declare const IIIF_1_IMAGE_LEVEL_2 = "http://iiif.io/api/image/1/level2.json";
export declare const IIIF_1_IMAGE_LEVEL_2_PROFILE = "http://iiif.io/api/image/1/profiles/level2.json";
export declare const IIIF_2_IMAGE_LEVEL_0 = "http://iiif.io/api/image/2/level0.json";
export declare const IIIF_2_IMAGE_LEVEL_0_PROFILE = "http://iiif.io/api/image/2/profiles/level0.json";
export declare const IIIF_2_IMAGE_LEVEL_1 = "http://iiif.io/api/image/2/level1.json";
export declare const IIIF_2_IMAGE_LEVEL_1_PROFILE = "http://iiif.io/api/image/2/profiles/level1.json";
export declare const IIIF_2_IMAGE_LEVEL_2 = "http://iiif.io/api/image/2/level2.json";
export declare const IIIF_2_IMAGE_LEVEL_2_PROFILE = "http://iiif.io/api/image/2/profiles/level2.json";
export declare const IIIF_3_IMAGE_LEVEL_0 = "level0";
export declare const IIIF_3_IMAGE_LEVEL_1 = "level1";
export declare const IIIF_3_IMAGE_LEVEL_2 = "level2";
export declare const IIIF_2_IMAGE_LEVEL_0_NO_JSON = "http://iiif.io/api/image/2/level0";
export declare const IIIF_2_IMAGE_LEVEL_1_NO_JSON = "http://iiif.io/api/image/2/level1";
export declare const IIIF_2_IMAGE_LEVEL_2_NO_JSON = "http://iiif.io/api/image/2/level2";
export declare const level2Support: string[];
export declare const level1Support: string[];
export declare const imageServiceProfiles: string[];
export declare const level0Support: string[];
export declare const onlyLevel0: string[];
export declare type Profile = {
extraFormats: string[];
extraQualities: string[];
extraFeatures: ExtraFeature[];
maxArea?: number;
maxHeight?: number;
maxWidth?: number;
};
export declare const level0: Profile;
export declare const level1: Profile;
export declare const level2: Profile;
export declare const extraFeatures: readonly [
"baseUriRedirect",
"canonicalLinkHeader",
"cors",
"jsonldMediaType",
"mirroring",
"profileLinkHeader",
"regionByPct",
"regionByPx",
"regionSquare",
"rotationArbitrary",
"rotationBy90s",
"sizeByConfinedWh",
"sizeByH",
"sizeByPct",
"sizeByW",
"sizeByWh",
"sizeUpscaling",
"sizeByWhListed",
"sizeByDistortedWh",
"sizeByForcedWh"
];
export declare type ExtraFeature = typeof extraFeatures extends ReadonlyArray<infer ElementType> ? ElementType : never;
export declare function combineProfiles(service: ImageService): Profile;
export declare function levelToProfile(levelProfile: string): Profile;
export declare function isLevel0(service: ImageService): boolean;
export declare function supports(service: ImageService, req: Partial<Profile> & {
exactSize?: {
width?: number;
height?: number;
};
}): readonly [
false,
"Not a valid image service"
] | readonly [
false,
`Max area is ${number}`
] | readonly [
false,
`Max width is ${number}`
] | readonly [
false,
`Max height is ${number}`
] | readonly [
false,
`Missing features: ${string}`
] | readonly [
false,
`Missing formats: ${string}`
] | readonly [
false,
`Missing qualities: ${string}`
] | readonly [
true
];
export declare function supportsCustomSizes(service: ImageService): boolean;
export declare function imageServiceSupportsFormat(imageService: ImageService, format: string): readonly [
false,
"Not a valid image service"
] | readonly [
false,
`Max area is ${number}`
] | readonly [
false,
`Max width is ${number}`
] | readonly [
false,
`Max height is ${number}`
] | readonly [
false,
`Missing features: ${string}`
] | readonly [
false,
`Missing formats: ${string}`
] | readonly [
false,
`Missing qualities: ${string}`
] | readonly [
true
];
export declare function imageServiceSupportsRequest(imageService: ImageService, request: ImageServiceImageRequest): readonly [
true
] | boolean[] | readonly [
false,
"Not a valid image service" | `Max area is ${number}` | `Max width is ${number}` | `Max height is ${number}` | `Missing features: ${string}` | `Missing formats: ${string}` | `Missing qualities: ${string}`
];
export declare function imageServiceRequestToString(req: ImageServiceImageRequest, service?: ImageService): string;
export declare function regionParameterToString({ x, y, w, h, full, square, percent }: RegionParameter): string;
export declare function rotationParameterToString(rotationParameter: RotationParameter): string;
export declare function sizeParameterToString({ max, percentScale, upscaled, confined, width, height, serialiseAsFull, }: SizeParameter): string;
/**
* Get canonical service url
* Ensures an image service id contains the /info.json on the end of it.
*
* @param serviceId
*/
export declare function canonicalServiceUrl(serviceId: string): string;
export declare function createImageServiceRequest(imageService: ImageService): ImageServiceImageRequest;
/**
* Extract fixed size scales
*
* Given a source width and height and a list of sizes of that same image,
* it will return an ordered list of scales.
*
* @param width
* @param height
* @param sizes
*/
export declare function extractFixedSizeScales(width: number, height: number, sizes: ImageSize[]): number[];
/**
* Fixed sizes from scales.
*
* Given a width and height of an image and a list of scales, this will return
* an ordered list of widths and heights of the image at those scales.
*
* @param width
* @param height
* @param scales
*/
export declare function fixedSizesFromScales(width: number, height: number, scales: number[]): ImageSize[];
export declare function getId(resource: any): any;
export declare function getType(resource: any): any;
export declare function isImageService(service: any): service is ImageService;
export {};
"use strict";var e=Object.defineProperty,t=(t,r,a)=>(((t,r,a)=>{r in t?e(t,r,{enumerable:!0,configurable:!0,writable:!0,value:a}):t[r]=a})(t,"symbol"!=typeof r?r+"":r,a),a);function r(e){return"string"!=typeof e&&(!!e&&"SpecificResource"===e.type)}function a(e){return Array.isArray(e)?e:e?[e]:[]}function n(...e){return t=>e.reduce(((e,t)=>t(e)),t)}Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const s=["Collection","Manifest","Canvas","AnnotationPage","AnnotationCollection","Annotation","ContentResource","Range","Service","Selector","Agent"];class i{constructor(e,r={}){t(this,"traversals"),t(this,"options"),t(this,"_traverseManifest",n(this.traverseManifestItems.bind(this),this.traverseLinking.bind(this),this.traverseDescriptive.bind(this),this.traverseLinkedCanvases.bind(this),this.traverseManifestStructures.bind(this),this.traverseInlineAnnotationPages.bind(this))),t(this,"_traverseCanvas",n(this.traverseCanvasItems.bind(this),this.traverseLinking.bind(this),this.traverseDescriptive.bind(this),this.traverseLinkedCanvases.bind(this),this.traverseInlineAnnotationPages.bind(this))),t(this,"_traverseAnnotationPage",n(this.traverseAnnotationPageItems.bind(this),this.traverseLinking.bind(this),this.traverseDescriptive.bind(this))),t(this,"_traverseRange",n(this.traverseRangeRanges.bind(this),this.traverseLinking.bind(this),this.traverseDescriptive.bind(this),this.traverseLinkedCanvases.bind(this))),this.traversals={collection:[],manifest:[],canvas:[],annotationCollection:[],annotationPage:[],annotation:[],contentResource:[],choice:[],range:[],service:[],agent:[],specificResource:[],geoJson:[],...e},this.options={allowUndefinedReturn:!1,...r}}static all(e){return new i({collection:[e],manifest:[e],canvas:[e],annotationCollection:[e],annotationPage:[e],annotation:[e],contentResource:[e],choice:[e],range:[e],service:[e],geoJson:[e],specificResource:[e],agent:[e]})}traverseDescriptive(e){return e.thumbnail&&(e.thumbnail=a(e.thumbnail).map((t=>this.traverseType(t,{parent:e},this.traversals.contentResource)))),e.provider&&(e.provider=e.provider.map((t=>this.traverseAgent(t,e)))),e}traverseLinking(e){return e.seeAlso&&(e.seeAlso=e.seeAlso.map((t=>this.traverseType(t,{parent:e},this.traversals.contentResource)))),e.service&&(e.service=a(e.service).map((e=>this.traverseService(e)))),e.services&&(e.services=a(e.services).map((t=>this.traverseService(t,e)))),e.logo&&(e.logo=e.logo.map((t=>this.traverseType(t,{parent:e},this.traversals.contentResource)))),e.homepage&&(e.homepage=e.homepage.map((t=>this.traverseType(t,{parent:e},this.traversals.contentResource)))),e.partOf&&(e.partOf=e.partOf.map((t=>"string"!=typeof t&&t.type?"Canvas"===t.type?this.traverseType(t,{parent:e},this.traversals.canvas):"AnnotationCollection"===t.type?this.traverseType(t,{parent:e},this.traversals.annotationCollection):"Collection"===t.type?this.traverseType(t,{parent:e},this.traversals.collection):this.traverseType(t,{parent:e},this.traversals.contentResource):this.traverseType(t,{parent:e},this.traversals.contentResource)))),e.start&&(r(e.start)?e.start=this.traverseSpecificResource(e.start,"Canvas",e):e.start=this.traverseType(e.start,{parent:e},this.traversals.canvas)),e.rendering&&(e.rendering=e.rendering.map((t=>this.traverseType(t,{parent:e},this.traversals.contentResource)))),e.supplementary&&(e.supplementary=e.supplementary.map((t=>this.traverseType(t,{parent:e},this.traversals.contentResource)))),e}traverseCollectionItems(e){return e.items&&e.items.map((e=>"Collection"===e.type?this.traverseCollection(e):this.traverseManifest(e))),e}traverseCollection(e,t){return this.traverseType(this.traverseDescriptive(this.traverseInlineAnnotationPages(this.traverseLinking(this.traverseLinkedCanvases(this.traverseCollectionItems(e))))),{parent:t},this.traversals.collection)}traverseGeoJson(e,t){return this.traverseType(e,{parent:t},this.traversals.geoJson)}traverseNavPlace(e){return e.navPlace&&(e.navPlace=this.traverseGeoJson(e.navPlace,e)),e}traverseManifestItems(e){return e.items&&(e.items=e.items.map((e=>this.traverseCanvas(e)))),e}traverseManifestStructures(e){return e.structures&&(e.structures=e.structures.map((e=>this.traverseRange(e)))),e}traverseManifest(e,t){return this.traverseType(this._traverseManifest(e),{parent:t},this.traversals.manifest)}traverseCanvasItems(e){return e.items=(e.items||[]).map((t=>this.traverseAnnotationPage(t,e))),e}traverseInlineAnnotationPages(e){return"string"!=typeof e&&e?(e.annotations&&(e.annotations=e.annotations.map((t=>this.traverseAnnotationPage(t,e)))),e):e}traverseCanvas(e,t){return this.traverseType(this._traverseCanvas(e),{parent:t},this.traversals.canvas)}traverseAnnotationPageItems(e){return e.items&&(e.items=e.items.map((t=>this.traverseAnnotation(t,e)))),e}traverseAnnotationPage(e,t){return this.traverseType(this._traverseAnnotationPage(e),{parent:t},this.traversals.annotationPage)}traverseAnnotationBody(e){return Array.isArray(e.body)?e.body=e.body.map((t=>this.traverseContentResource(t,e))):e.body&&(e.body=this.traverseContentResource(e.body,e)),e}traverseLinkedCanvases(e){return e.placeholderCanvas&&(e.placeholderCanvas=this.traverseCanvas(e.placeholderCanvas)),e.accompanyingCanvas&&(e.accompanyingCanvas=this.traverseCanvas(e.accompanyingCanvas)),e}traverseAnnotation(e,t){return this.traverseType(this.traverseLinking(this.traverseAnnotationBody(this.traverseDescriptive(e))),{parent:t},this.traversals.annotation)}traverseContentResourceLinking(e){return"string"!=typeof e&&e?(e&&e.service&&(e.service=a(e.service||[]).map((t=>this.traverseService(t,e)))),e):e}traverseContentResource(e,t){return"Choice"===e.type&&(e.items=e.items.map((t=>this.traverseContentResource(t,e)))),r(e)?this.traverseSpecificResource(e,"ContentResource"):this.traverseType(this.traverseInlineAnnotationPages(this.traverseContentResourceLinking(e)),{parent:t},this.traversals.contentResource)}traverseSpecificResource(e,t,r){let a=e.source;return"string"==typeof e.source&&(a={id:e.source,type:t||"unknown"}),this.traverseType({...e,source:"Canvas"===t||"Canvas"===a.type?this.traverseType(a,{parent:r},this.traversals.canvas):"ContentResource"===t?this.traverseContentResource(a,{parent:r}):this.traverseUnknown(a,{parent:r,typeHint:t})},{parent:r},this.traversals.specificResource)}traverseRangeRanges(e){return e.items&&(e.items=e.items.map((t=>"string"==typeof t?this.traverseCanvas({id:t,type:"Canvas"},e):r(t)?this.traverseSpecificResource(t,"Canvas",e):"Manifest"===t.type?this.traverseManifest(t,e):this.traverseRange(t,e)))),e}traverseRange(e,t){return this.traverseType(this._traverseRange(e),{parent:t},this.traversals.range)}traverseAgent(e,t){return this.traverseType(this.traverseDescriptive(this.traverseLinking(e)),{parent:t},this.traversals.agent)}traverseType(e,t,r){return r.reduce(((e,r)=>{const a=r(e,t);return void 0!==a||this.options.allowUndefinedReturn?a:e}),e)}traverseService(e,t){const r=Object.assign({},e);return r&&r.service&&(r.service=a(r.service).map((e=>this.traverseService(e)))),this.traverseType(r,{parent:t},this.traversals.service)}traverseUnknown(e,{parent:t,typeHint:r}={}){const a=function(e,t){if(null==e)throw new Error("Null or undefined is not a valid entity.");if(Array.isArray(e))throw new Error("Array is not a valid entity");if("object"!=typeof e){if(t)return t;throw new Error(typeof e+" is not a valid entity")}if("string"==typeof e.type){const t=s.indexOf(e.type);if(-1!==t)return s[t]}if(e.profile)return"Service";throw new Error("Resource type is not known")}(e,r);switch(a){case"Collection":return this.traverseCollection(e,t);case"Manifest":return this.traverseManifest(e,t);case"Canvas":return this.traverseCanvas(e,t);case"AnnotationPage":return this.traverseAnnotationPage(e,t);case"Annotation":return this.traverseAnnotation(e,t);case"ContentResource":return this.traverseContentResource(e,t);case"Range":return this.traverseRange(e,t);case"Service":return this.traverseService(e,t);case"Agent":return this.traverseAgent(e,t);default:if(r)return r;throw new Error(`Unknown or unsupported resource type of ${a}`)}}}const o=/-?([1-9]\d{3,}|0\d{3})-(0[1-9]|1[0-2])-(0[1-9]|[12]\d|3[01])T(([01]\d|2[0-3]):[0-5]\d:[0-5]\d(\.\d+)?|(24:00:00(\.0+)?))(Z|(\+|-)((0\d|1[0-3]):[0-5]\d|14:00))?/,v={warnings:[]};function u(e,t=v){return e.behavior&&(e.behavior=l(e.behavior,"behavior",t)),e.width=p(e.width,"width",!1,t),e.height=p(e.height,"height",!1,t),e.duration=p(e.duration,"duration",!0,t),e.format&&"string"!=typeof e.format&&(t.warnings.push('"format" should be a single string'),Array.isArray(e.format)&&"string"==typeof e.format[0]?e.format=e.format[0]:e.format=void 0),e}function h(e,t,r=v){return e&&Array.isArray(e)?e.filter((e=>{const a=t(e);return a&&-1===r.warnings.indexOf(a)&&r.warnings.push(a),!a})):e}function l(e,t,r=v){return Array.isArray(e)?e:(r.warnings.push(`"${t}" should be Array of values`),[e])}function c(e,t,r=v){if(Array.isArray(e)){if(r.warnings.push(`"${t}" should only contain a single value`),0===e.length)return;return e[0]}return e}function p(e,t,r=!1,a=v){if(void 0!==e){if("string"==typeof e){const n=r?parseFloat(e):Math.abs(Number(e));return Number.isNaN(n)||n<=0?void a.warnings.push(`"${t}" expected value to be a ${r?"Number":"Integer"}, instead found an invalid value`):(a.warnings.push(`"${t}" expected value to be a ${r?"Number":"Integer"}, instead found a string`),n)}return r||e%1==0?e:(a.warnings.push(`"${t}" expected value to be a Integer, instead found a Float`),Math.floor(e))}}function g(e,t,r=v){if(Array.isArray(e))return"string"==typeof e[0]?(r.warnings.push(`"${t}" should be a language map instead found a string`),{none:e}):(r.warnings.push(`"${t}" should be a language map instead found an unknown value`),{none:[""]});if("string"==typeof e)return r.warnings.push(`"${t}" should be a language map instead found a string`),{none:[e]};const a=Object.keys(e),n={};let s=!1;for(const i of a){const a=e[i],o=[];if("string"==typeof a)s=!0,r.warnings.push(`"${t}" values inside a language map should be an Array of strings, found a string`),o.push(a);else if(Array.isArray(a))for(const e of a)"string"!=typeof e?(s=!0,r.warnings.push(`"${t}" values inside a language map should be an Array of strings, found an unknown value`)):o.push(e);else s=!0,r.warnings.push(`"${t}" values inside a language map should be an Array of strings, found an unknown value`);o.length>0&&(n[i]=o)}return s?0===Object.keys(n).length?{none:[""]}:n:e}function d(e,t,r="",a=v){return"string"==typeof e?(a.warnings.push(`"${t}" should be a {label, value} set of Language maps`),{label:{none:[r]},value:{none:[e]}}):((!e.label&&e.value||e.label&&!e.value)&&a.warnings.push(`"${t}" should have both a label and a value`),e.label?e.label=g(e.label,`${t}.label`,a):e.label={none:[r]},e.value?e.value=g(e.value,`${t}.value`,a):e.value={none:[""]},e)}function y(e,t=v){var r,a;if(e.label&&(e.label=g(e.label,"label",t)),e.summary&&(e.summary=g(e.summary,"summary",t)),e.requiredStatement&&(e.requiredStatement=d(e.requiredStatement,"requiredStatement","Required statement",t)),e.metadata)if(Array.isArray(e.metadata))for(let n=0;n<e.metadata.length;n++)e.metadata[n]=d(e.metadata[n],`metadata.${n}`,"",t);else t.warnings.push('"metadata" should be an array of {label, value} Language maps'),e.metadata=[];if(e.rights&&(Array.isArray(e.rights)&&(t.warnings.push('"rights" should only contain a single string'),e.rights="string"==typeof e.rights[0]?e.rights[0]:""),"string"!=typeof e.rights||e.rights.startsWith("http")?"string"==typeof e.rights&&e.rights.startsWith("https")&&(t.warnings.push('"rights" is an informative property and should contain the http variation of the rights statement'),e.rights=`http${e.rights.slice(5)}`):t.warnings.push('"rights" should be a valid URI')),e.navDate){const r="string"==typeof e.navDate?e.navDate.trim():void 0;r!==e.navDate&&(t.warnings.push('"navDate" should not contain extra whitespace'),e.navDate=r),"string"==typeof e.navDate&&e.navDate.match(o)||(t.warnings.push('"navDate" should be a valid XSD dateTime literal'),e.navDate=void 0)}return e.language&&(e.language=l(e.language,"language",t),e.language=h(e.language,(e=>"string"==typeof e?void 0:'\'"language" expected array of strings'),t)),e.accompanyingCanvas&&(e.accompanyingCanvas=c(e.accompanyingCanvas,"accompanyingCanvas",t),"Canvas"!==(null==(r=e.accompanyingCanvas)?void 0:r.type)&&t.warnings.push('"accompanyingCanvas" should be a Canvas')),e.placeholderCanvas&&(e.placeholderCanvas=c(e.placeholderCanvas,"placeholderCanvas",t),"Canvas"!==(null==(a=e.placeholderCanvas)?void 0:a.type)&&t.warnings.push('"placeholderCanvas" should be a Canvas')),e.thumbnail&&(e.thumbnail=l(e.thumbnail,"thumbnail",t)),e}const f={Manifest:"Canvas",Canvas:"AnnotationPage",AnnotationPage:"Annotation"};function m(e,t=v){const r=e.type;switch(r){case"Canvas":case"AnnotationPage":case"Manifest":e&&e.items&&(e.items=h(e.items,(t=>t.type===f[r]?void 0:`"${e.type}.items" should contain only type ${f[r]}, found ${t.type}`),t))}return e}function b(e,t=v){return e.logo&&(e.logo=l(e.logo,"logo",t)),e.service&&(e.service=l(e.service,"service",t)),e.seeAlso&&(e.seeAlso=l(e.seeAlso,"seeAlso",t)),e.rendering&&(e.rendering=l(e.rendering,"rendering",t)),e.partOf&&(e.partOf=l(e.partOf,"partOf",t)),e.homepage&&(e.homepage=l(e.homepage,"homepage",t)),e.services&&(e.services=l(e.services,"services",t)),e.supplementary&&(e.supplementary=l(e.supplementary,"supplementary",t)),e.start&&(e.start=c(e.start,"start",t)),e}exports.presentation3StrictUpgrade=function(e,t=v){const r=i.all(function(e){return t=>{if(t)return"string"==typeof t||Array.isArray(t)?t:function(e){for(const t in e)void 0!==e[t]&&null!==e[t]||delete e[t];return e}({...t,...u(t,e),...y(t,e),...b(t,e),...m(t,e)})}}(t));return r.traverseManifest(e)};
//# sourceMappingURL=index.js.map
{"version":3,"file":"index.js","sources":["../../../src/shared/is-specific-resource.ts","../../../src/shared/ensure-array.ts","../../../src/shared/compose.ts","../../../src/presentation-3/traverse.ts","../../../src/presentation-3/strict-upgrade.ts","../../../src/shared/remove-undefined-properties.ts"],"sourcesContent":["import { SpecificResource } from '@iiif/presentation-3';\n\nexport function isSpecificResource(resource: unknown): resource is SpecificResource {\n\n if (typeof resource === 'string') {\n return false;\n }\n\n return !!resource && (resource as any).type === 'SpecificResource';\n}\n","export function ensureArray<T>(maybeArray: T | T[]): T[] {\n if (Array.isArray(maybeArray)) {\n return maybeArray;\n }\n return maybeArray ? [maybeArray] : [];\n}\n","export function compose<T, B = T>(...fns: any[]): (input: T) => T {\n return <B>(arg: any) => fns.reduce((a, f) => f(a), arg) as any as T;\n}\n","import {\n Annotation,\n AnnotationCollection,\n AnnotationPage,\n Canvas,\n ChoiceBody,\n ChoiceTarget,\n Collection,\n ContentResource,\n DescriptiveProperties,\n IIIFExternalWebResource,\n LinkingProperties,\n Manifest,\n Range,\n RangeItems,\n Required,\n Service,\n SpecificResource,\n ResourceProvider,\n StructuralProperties,\n} from '@iiif/presentation-3';\nimport { isSpecificResource } from '../shared/is-specific-resource';\nimport { ensureArray } from '../shared/ensure-array';\nimport { compose } from '../shared/compose';\n\nexport const types = [\n 'Collection',\n 'Manifest',\n 'Canvas',\n 'AnnotationPage',\n 'AnnotationCollection',\n 'Annotation',\n 'ContentResource',\n 'Range',\n 'Service',\n 'Selector',\n 'Agent',\n];\n\nexport type TraversalContext = { parent?: any };\n\nexport type Traversal<T> = (jsonLd: T, context: TraversalContext) => Partial<T> | any;\n\nexport type TraversalMap = {\n collection?: Array<Traversal<Collection>>;\n manifest?: Array<Traversal<Manifest>>;\n canvas?: Array<Traversal<Canvas>>;\n annotationCollection?: Array<Traversal<AnnotationCollection>>;\n annotationPage?: Array<Traversal<AnnotationPage>>;\n annotation?: Array<Traversal<Annotation>>;\n contentResource?: Array<Traversal<ContentResource>>;\n choice?: Array<Traversal<ChoiceTarget | ChoiceBody>>;\n range?: Array<Traversal<Range>>;\n service?: Array<Traversal<Service>>;\n agent?: Array<Traversal<ResourceProvider>>;\n specificResource?: Array<Traversal<SpecificResource>>;\n geoJson?: Array<Traversal<import('geojson').GeoJSON>>;\n};\n\nexport type TraverseOptions = {\n allowUndefinedReturn: boolean;\n};\n\nexport function identifyResource(resource: any, typeHint?: string): string {\n if (typeof resource === 'undefined' || resource === null) {\n throw new Error('Null or undefined is not a valid entity.');\n }\n if (Array.isArray(resource)) {\n throw new Error('Array is not a valid entity');\n }\n if (typeof resource !== 'object') {\n if (typeHint) {\n return typeHint;\n }\n throw new Error(`${typeof resource} is not a valid entity`);\n }\n\n if (typeof resource!.type === 'string') {\n const hasType = types.indexOf(resource.type);\n if (hasType !== -1) {\n return types[hasType];\n }\n }\n\n if (resource!.profile) {\n return 'Service';\n }\n\n throw new Error('Resource type is not known');\n}\n\nexport class Traverse {\n private traversals: Required<TraversalMap>;\n\n private options: TraverseOptions;\n\n constructor(traversals: TraversalMap, options: Partial<TraverseOptions> = {}) {\n this.traversals = {\n collection: [],\n manifest: [],\n canvas: [],\n annotationCollection: [],\n annotationPage: [],\n annotation: [],\n contentResource: [],\n choice: [],\n range: [],\n service: [],\n agent: [],\n specificResource: [],\n geoJson: [],\n ...traversals,\n };\n this.options = {\n allowUndefinedReturn: false,\n ...options,\n };\n }\n\n static all(traversal: (resource: any) => any) {\n return new Traverse({\n collection: [traversal],\n manifest: [traversal],\n canvas: [traversal],\n annotationCollection: [traversal],\n annotationPage: [traversal],\n annotation: [traversal],\n contentResource: [traversal],\n choice: [traversal],\n range: [traversal],\n service: [traversal],\n geoJson: [traversal],\n specificResource: [traversal],\n agent: [traversal],\n });\n }\n\n traverseDescriptive<T extends Partial<DescriptiveProperties>>(resource: T): T {\n if (resource.thumbnail) {\n resource.thumbnail = ensureArray(resource.thumbnail).map((thumbnail) =>\n this.traverseType(thumbnail, { parent: resource }, this.traversals.contentResource)\n );\n }\n if (resource.provider) {\n resource.provider = resource.provider.map((agent) => this.traverseAgent(agent, resource));\n }\n return resource;\n }\n\n traverseLinking<T extends Partial<LinkingProperties>>(resource: T): T {\n if (resource.seeAlso) {\n resource.seeAlso = resource.seeAlso.map((content) =>\n this.traverseType(content, { parent: resource }, this.traversals.contentResource)\n );\n }\n if (resource.service) {\n resource.service = ensureArray(resource.service).map((service) => this.traverseService(service));\n }\n if (resource.services) {\n resource.services = ensureArray(resource.services).map((service) => this.traverseService(service, resource));\n }\n if (resource.logo) {\n resource.logo = resource.logo.map((content) =>\n this.traverseType(content, { parent: resource }, this.traversals.contentResource)\n );\n }\n if (resource.homepage) {\n resource.homepage = resource.homepage.map((homepage) =>\n this.traverseType(homepage, { parent: resource }, this.traversals.contentResource)\n );\n }\n if (resource.partOf) {\n // Array<ContentResource | Canvas | AnnotationCollection>\n (resource as any).partOf = resource.partOf.map((partOf) => {\n if (typeof partOf === 'string' || !partOf.type) {\n return this.traverseType(partOf as ContentResource, { parent: resource }, this.traversals.contentResource);\n }\n if (partOf.type === 'Canvas') {\n return this.traverseType(partOf as Canvas, { parent: resource }, this.traversals.canvas);\n }\n if (partOf.type === 'AnnotationCollection') {\n return this.traverseType(\n partOf as AnnotationCollection,\n { parent: resource },\n this.traversals.annotationCollection\n );\n }\n if (partOf.type === 'Collection') {\n return this.traverseType(partOf as Collection, { parent: resource }, this.traversals.collection);\n }\n return this.traverseType(partOf as ContentResource, { parent: resource }, this.traversals.contentResource);\n });\n }\n if (resource.start) {\n if (isSpecificResource(resource.start)) {\n resource.start = this.traverseSpecificResource(resource.start, 'Canvas', resource) as any;\n } else {\n // The spec says this can be a \"partial canvas\" causing errors with the types.\n resource.start = this.traverseType(resource.start as any, { parent: resource }, this.traversals.canvas);\n }\n }\n if (resource.rendering) {\n resource.rendering = resource.rendering.map((content) =>\n this.traverseType(content, { parent: resource }, this.traversals.contentResource)\n );\n }\n if (resource.supplementary) {\n resource.supplementary = resource.supplementary.map((content) =>\n this.traverseType(content, { parent: resource }, this.traversals.contentResource)\n );\n }\n\n return resource;\n }\n\n traverseCollectionItems<T extends StructuralProperties<any>>(collection: T): T {\n if (collection.items) {\n collection.items.map((collectionOrManifest: Manifest | Collection) => {\n if (collectionOrManifest.type === 'Collection') {\n return this.traverseCollection(collectionOrManifest as Collection);\n }\n return this.traverseManifest(collectionOrManifest as Manifest);\n });\n }\n\n return collection;\n }\n\n traverseCollection(collection: Collection, parent?: any): Collection {\n return this.traverseType<Collection>(\n this.traverseDescriptive(\n this.traverseInlineAnnotationPages(\n this.traverseLinking(this.traverseLinkedCanvases(this.traverseCollectionItems(collection as any)))\n )\n ),\n { parent },\n this.traversals.collection\n );\n }\n\n traverseGeoJson(geoJson: import('geojson').GeoJSON, parent?: any): import('geojson').GeoJSON {\n return this.traverseType<import('geojson').GeoJSON>(geoJson, { parent }, this.traversals.geoJson);\n }\n\n traverseNavPlace(resource: any /*NavPlaceExtension*/) {\n if (resource.navPlace) {\n resource.navPlace = this.traverseGeoJson(resource.navPlace, resource);\n }\n return resource;\n }\n\n traverseManifestItems(manifest: Manifest): Manifest {\n if (manifest.items) {\n manifest.items = manifest.items.map((canvas) => this.traverseCanvas(canvas));\n }\n return manifest;\n }\n\n traverseManifestStructures(manifest: Manifest): Manifest {\n if (manifest.structures) {\n manifest.structures = manifest.structures.map((range) => this.traverseRange(range));\n }\n return manifest;\n }\n\n _traverseManifest = compose<Manifest>(\n this.traverseManifestItems.bind(this),\n this.traverseLinking.bind(this),\n this.traverseDescriptive.bind(this),\n this.traverseLinkedCanvases.bind(this),\n this.traverseManifestStructures.bind(this),\n this.traverseInlineAnnotationPages.bind(this)\n );\n\n traverseManifest(manifest: Manifest, parent?: any): Manifest {\n return this.traverseType<Manifest>(this._traverseManifest(manifest), { parent }, this.traversals.manifest);\n }\n\n traverseCanvasItems(canvas: Canvas): Canvas {\n canvas.items = (canvas.items || []).map((annotationPage: AnnotationPage): AnnotationPage => {\n return this.traverseAnnotationPage(annotationPage, canvas);\n });\n\n return canvas;\n }\n\n traverseInlineAnnotationPages<T extends Manifest | Canvas | Range | string>(resource: T): T {\n if (typeof resource === 'string' || !resource) {\n return resource;\n }\n if (resource.annotations) {\n resource.annotations = resource.annotations.map((annotationPage: AnnotationPage): AnnotationPage => {\n return this.traverseAnnotationPage(annotationPage, resource);\n });\n }\n\n return resource;\n }\n\n _traverseCanvas = compose<Canvas>(\n this.traverseCanvasItems.bind(this),\n this.traverseLinking.bind(this),\n this.traverseDescriptive.bind(this),\n this.traverseLinkedCanvases.bind(this),\n this.traverseInlineAnnotationPages.bind(this)\n );\n\n traverseCanvas(canvas: Canvas, parent?: any): Canvas {\n return this.traverseType<Canvas>(this._traverseCanvas(canvas), { parent }, this.traversals.canvas);\n }\n\n traverseAnnotationPageItems(annotationPage: AnnotationPage): AnnotationPage {\n if (annotationPage.items) {\n annotationPage.items = annotationPage.items.map((annotation: Annotation): Annotation => {\n return this.traverseAnnotation(annotation, annotationPage);\n });\n }\n return annotationPage;\n }\n\n _traverseAnnotationPage = compose<AnnotationPage>(\n this.traverseAnnotationPageItems.bind(this),\n this.traverseLinking.bind(this),\n this.traverseDescriptive.bind(this)\n );\n\n traverseAnnotationPage(annotationPageJson: AnnotationPage, parent?: any): AnnotationPage {\n return this.traverseType<AnnotationPage>(\n this._traverseAnnotationPage(annotationPageJson),\n { parent },\n this.traversals.annotationPage\n );\n }\n\n // Disabling these.\n\n traverseAnnotationBody(annotation: Annotation): Annotation {\n if (Array.isArray(annotation.body)) {\n annotation.body = annotation.body.map((annotationBody: any): ContentResource => {\n return this.traverseContentResource(annotationBody, annotation);\n });\n } else if (annotation.body) {\n annotation.body = this.traverseContentResource(annotation.body as ContentResource, annotation);\n }\n\n return annotation;\n }\n\n traverseLinkedCanvases<T extends { placeholderCanvas?: any; accompanyingCanvas?: any }>(json: T): T {\n if (json.placeholderCanvas) {\n json.placeholderCanvas = this.traverseCanvas(json.placeholderCanvas);\n }\n\n if (json.accompanyingCanvas) {\n json.accompanyingCanvas = this.traverseCanvas(json.accompanyingCanvas);\n }\n\n return json;\n }\n\n // @todo traverseAnnotationSelector\n traverseAnnotation(annotationJson: Annotation, parent?: any): Annotation {\n return this.traverseType<Annotation>(\n this.traverseLinking(this.traverseAnnotationBody(this.traverseDescriptive(annotationJson as any))),\n { parent },\n this.traversals.annotation\n );\n }\n\n traverseContentResourceLinking(contentResourceJson: ContentResource): ContentResource {\n if (typeof contentResourceJson === 'string' || !contentResourceJson) {\n return contentResourceJson;\n }\n if (contentResourceJson && (contentResourceJson as IIIFExternalWebResource)!.service) {\n (contentResourceJson as IIIFExternalWebResource).service = ensureArray(\n (contentResourceJson as IIIFExternalWebResource).service || []\n ).map((service) => this.traverseService(service, contentResourceJson));\n }\n\n return contentResourceJson;\n }\n\n traverseContentResource(contentResourceJson: ContentResource, parent?: any): ContentResource {\n if ((contentResourceJson as any).type === 'Choice') {\n (contentResourceJson as any).items = (contentResourceJson as any).items.map((choiceItem: ContentResource) => {\n return this.traverseContentResource(choiceItem, contentResourceJson);\n });\n }\n\n if (isSpecificResource(contentResourceJson)) {\n return this.traverseSpecificResource(contentResourceJson, 'ContentResource');\n }\n\n return this.traverseType<ContentResource>(\n // This needs an `any` because of the scope of W3C annotation bodies (covered by ContentResource).\n // ContentResources are permitted to have a `.annotations` property, so we can pass it as any for this\n // case.\n this.traverseInlineAnnotationPages(this.traverseContentResourceLinking(contentResourceJson) as any),\n { parent },\n this.traversals.contentResource\n );\n }\n\n traverseSpecificResource(specificResource: SpecificResource, typeHint?: string, parent?: any): SpecificResource {\n let source = specificResource.source;\n if (typeof specificResource.source === 'string') {\n source = { id: specificResource.source, type: typeHint || 'unknown' };\n }\n\n return this.traverseType<SpecificResource>(\n {\n ...specificResource,\n source:\n typeHint === 'Canvas' || source.type === 'Canvas'\n ? this.traverseType(source, { parent }, this.traversals.canvas)\n : typeHint === 'ContentResource'\n ? this.traverseContentResource(source, { parent })\n : this.traverseUnknown(source, { parent, typeHint }),\n },\n { parent },\n this.traversals.specificResource\n );\n }\n\n traverseRangeRanges(range: Range): Range {\n if (range.items) {\n range.items = range.items.map((rangeOrManifest: RangeItems) => {\n if (typeof rangeOrManifest === 'string') {\n return this.traverseCanvas({ id: rangeOrManifest, type: 'Canvas' }, range);\n }\n if (isSpecificResource(rangeOrManifest)) {\n return this.traverseSpecificResource(rangeOrManifest, 'Canvas', range);\n }\n // This is a non-standard case.\n if ((rangeOrManifest as any).type === 'Manifest') {\n return this.traverseManifest(rangeOrManifest as any, range) as any as RangeItems;\n }\n return this.traverseRange(rangeOrManifest as Range, range);\n });\n }\n\n return range;\n }\n\n _traverseRange = compose<Range>(\n this.traverseRangeRanges.bind(this),\n this.traverseLinking.bind(this),\n this.traverseDescriptive.bind(this),\n this.traverseLinkedCanvases.bind(this)\n );\n\n traverseRange(range: Range, parent?: any): Range {\n return this.traverseType<Range>(this._traverseRange(range), { parent }, this.traversals.range);\n }\n\n traverseAgent(agent: ResourceProvider, parent?: any) {\n return this.traverseType<ResourceProvider>(\n this.traverseDescriptive(this.traverseLinking(agent)),\n { parent },\n this.traversals.agent\n );\n }\n\n traverseType<T>(object: T, context: TraversalContext, traversals: Array<Traversal<T>>): T {\n return traversals.reduce((acc: T, traversal: Traversal<T>): T => {\n const returnValue = traversal(acc, context);\n if (typeof returnValue === 'undefined' && !this.options.allowUndefinedReturn) {\n return acc;\n }\n return returnValue;\n }, object);\n }\n\n traverseService(service: Service, parent?: any): Service {\n const _service: any = Object.assign({}, service);\n if (_service && _service.service) {\n _service.service = ensureArray(_service.service).map((innerService: any) => this.traverseService(innerService));\n }\n return this.traverseType<Service>(_service, { parent }, this.traversals.service);\n }\n\n traverseUnknown(resource: any, { parent, typeHint }: { typeHint?: string; parent?: any } = {}) {\n const type = identifyResource(resource, typeHint);\n\n switch (type) {\n case 'Collection':\n return this.traverseCollection(resource as Collection, parent);\n case 'Manifest':\n return this.traverseManifest(resource as Manifest, parent);\n case 'Canvas':\n return this.traverseCanvas(resource as Canvas, parent);\n case 'AnnotationPage':\n return this.traverseAnnotationPage(resource as AnnotationPage, parent);\n case 'Annotation':\n return this.traverseAnnotation(resource as Annotation, parent);\n case 'ContentResource':\n return this.traverseContentResource(resource as ContentResource, parent);\n case 'Range':\n return this.traverseRange(resource as Range, parent);\n case 'Service':\n return this.traverseService(resource as Service, parent);\n case 'Agent':\n return this.traverseAgent(resource as ResourceProvider, parent);\n default: {\n if (typeHint) {\n return typeHint;\n }\n throw new Error(`Unknown or unsupported resource type of ${type}`);\n }\n }\n }\n}\n","import * as Presentation3 from '@iiif/presentation-3';\nimport { Traverse } from './traverse';\nimport { removeUndefinedProperties } from '../shared/remove-undefined-properties';\n\nconst validNavDate =\n /-?([1-9]\\d{3,}|0\\d{3})-(0[1-9]|1[0-2])-(0[1-9]|[12]\\d|3[01])T(([01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(\\.\\d+)?|(24:00:00(\\.0+)?))(Z|(\\+|-)((0\\d|1[0-3]):[0-5]\\d|14:00))?/;\n\ninterface InternalLogging {\n warnings: string[];\n}\n\nconst globalWarnings = { warnings: [] };\n\nfunction technicalProperties(\n item: Partial<Presentation3.TechnicalProperties>,\n logging: InternalLogging = globalWarnings\n): Partial<Presentation3.TechnicalProperties> {\n if (item.behavior) {\n item.behavior = ensureArrayWarning(item.behavior, 'behavior', logging);\n }\n\n item.width = ensureValidNumber(item.width, 'width', false, logging);\n item.height = ensureValidNumber(item.height, 'height', false, logging);\n item.duration = ensureValidNumber(item.duration, 'duration', true, logging);\n\n if (item.format && typeof item.format !== 'string') {\n logging.warnings.push(`\"format\" should be a single string`);\n if (Array.isArray(item.format) && typeof item.format[0] === 'string') {\n item.format = item.format[0];\n } else {\n item.format = undefined;\n }\n }\n\n return item;\n}\n\nfunction ensureArrayMatches(\n values: Array<any> | undefined,\n isValid: (value: any) => string | undefined,\n logging: InternalLogging = globalWarnings\n) {\n if (values && Array.isArray(values)) {\n return values.filter((value) => {\n const message = isValid(value);\n if (message && logging.warnings.indexOf(message) === -1) {\n logging.warnings.push(message);\n }\n return !message;\n });\n }\n return values;\n}\n\nfunction ensureArrayWarning(value: any, propName: string, logging: InternalLogging = globalWarnings) {\n if (Array.isArray(value)) {\n return value;\n }\n logging.warnings.push(`\"${propName}\" should be Array of values`);\n return [value];\n}\n\nfunction ensureNotArrayWarning(value: any, propName: string, logging: InternalLogging = globalWarnings) {\n if (Array.isArray(value)) {\n logging.warnings.push(`\"${propName}\" should only contain a single value`);\n if (value.length === 0) {\n return undefined;\n }\n return value[0];\n }\n return value;\n}\n\nfunction ensureValidNumber(\n value: undefined | string | number,\n propName: string,\n isFloat = false,\n logging: InternalLogging = globalWarnings\n): number | undefined {\n if (typeof value === 'undefined') {\n return undefined;\n }\n\n if (typeof value === 'string') {\n const newValue = isFloat ? parseFloat(value) : Math.abs(Number(value));\n if (Number.isNaN(newValue) || newValue <= 0) {\n logging.warnings.push(\n `\"${propName}\" expected value to be a ${isFloat ? 'Number' : 'Integer'}, instead found an invalid value`\n );\n return undefined;\n }\n logging.warnings.push(\n `\"${propName}\" expected value to be a ${isFloat ? 'Number' : 'Integer'}, instead found a string`\n );\n return newValue;\n }\n\n if (!isFloat && value % 1 !== 0) {\n logging.warnings.push(`\"${propName}\" expected value to be a Integer, instead found a Float`);\n return Math.floor(value);\n }\n\n return value;\n}\n\nfunction ensureValidLanguageMap(\n str: Presentation3.InternationalString,\n propName: string,\n logging: InternalLogging = globalWarnings\n): Presentation3.InternationalString {\n // Handle {\"label\": [\"an array of strings\"]}\n if (Array.isArray(str)) {\n if (typeof str[0] === 'string') {\n logging.warnings.push(`\"${propName}\" should be a language map instead found a string`);\n return { none: str };\n }\n logging.warnings.push(`\"${propName}\" should be a language map instead found an unknown value`);\n return { none: [''] };\n }\n\n if (typeof str === 'string') {\n logging.warnings.push(`\"${propName}\" should be a language map instead found a string`);\n return { none: [str] };\n }\n\n // Handle {\"label\": {\"en\": \"some value\"}\n const keys = Object.keys(str);\n const fixed: Presentation3.InternationalString = {};\n let didFix = false;\n for (const key of keys) {\n const values = str[key] as unknown;\n const fixedItem = [];\n if (typeof values === 'string') {\n didFix = true;\n logging.warnings.push(`\"${propName}\" values inside a language map should be an Array of strings, found a string`);\n fixedItem.push(values);\n } else if (Array.isArray(values)) {\n for (const str of values) {\n if (!(typeof str === 'string')) {\n didFix = true;\n logging.warnings.push(\n `\"${propName}\" values inside a language map should be an Array of strings, found an unknown value`\n );\n // Nothing to do here? - but mark as needing fixed.\n } else {\n fixedItem.push(str);\n }\n }\n } else {\n didFix = true;\n logging.warnings.push(\n `\"${propName}\" values inside a language map should be an Array of strings, found an unknown value`\n );\n }\n if (fixedItem.length > 0) {\n fixed[key] = fixedItem;\n }\n }\n\n if (didFix) {\n if (Object.keys(fixed).length === 0) {\n return { none: [''] };\n }\n\n return fixed;\n }\n\n return str;\n}\n\nfunction validMetadataValue(\n input: Presentation3.MetadataItem,\n propName: string,\n defaultLabel = '',\n logging: InternalLogging = globalWarnings\n): Presentation3.MetadataItem {\n if (typeof input === 'string') {\n logging.warnings.push(`\"${propName}\" should be a {label, value} set of Language maps`);\n return {\n label: { none: [defaultLabel] },\n value: { none: [input] },\n };\n } else {\n if ((!input.label && input.value) || (input.label && !input.value)) {\n logging.warnings.push(`\"${propName}\" should have both a label and a value`);\n }\n if (input.label) {\n input.label = ensureValidLanguageMap(input.label, `${propName}.label`, logging);\n } else {\n input.label = { none: [defaultLabel] };\n }\n if (input.value) {\n input.value = ensureValidLanguageMap(input.value, `${propName}.value`, logging);\n } else {\n input.value = { none: [''] };\n }\n }\n\n return input;\n}\n\nfunction descriptiveProperties(\n item: Partial<Presentation3.DescriptiveProperties>,\n logging: InternalLogging = globalWarnings\n): Partial<Presentation3.DescriptiveProperties> {\n if (item.label) {\n item.label = ensureValidLanguageMap(item.label, 'label', logging);\n }\n if (item.summary) {\n item.summary = ensureValidLanguageMap(item.summary, 'summary', logging);\n }\n\n if (item.requiredStatement) {\n item.requiredStatement = validMetadataValue(\n item.requiredStatement,\n 'requiredStatement',\n 'Required statement',\n logging\n );\n }\n\n if (item.metadata) {\n if (Array.isArray(item.metadata)) {\n for (let i = 0; i < item.metadata.length; i++) {\n item.metadata[i] = validMetadataValue(item.metadata[i], `metadata.${i}`, '', logging);\n }\n } else {\n logging.warnings.push(`\"metadata\" should be an array of {label, value} Language maps`);\n item.metadata = [];\n }\n }\n\n if (item.rights) {\n if (Array.isArray(item.rights)) {\n logging.warnings.push(`\"rights\" should only contain a single string`);\n item.rights = typeof item.rights[0] === 'string' ? item.rights[0] : '';\n }\n if (typeof item.rights === 'string' && !item.rights.startsWith('http')) {\n logging.warnings.push(`\"rights\" should be a valid URI`);\n } else if (typeof item.rights === 'string' && item.rights.startsWith('https')) {\n logging.warnings.push(\n `\"rights\" is an informative property and should contain the http variation of the rights statement`\n );\n item.rights = `http${item.rights.slice(5)}`;\n }\n }\n\n if (item.navDate) {\n const trimmedNavDate = typeof item.navDate === 'string' ? item.navDate.trim() : undefined;\n if (trimmedNavDate !== item.navDate) {\n logging.warnings.push(`\"navDate\" should not contain extra whitespace`);\n item.navDate = trimmedNavDate;\n }\n if (typeof item.navDate !== 'string' || !item.navDate.match(validNavDate)) {\n logging.warnings.push(`\"navDate\" should be a valid XSD dateTime literal`);\n item.navDate = undefined;\n }\n }\n\n if (item.language) {\n item.language = ensureArrayWarning(item.language, 'language', logging);\n item.language = ensureArrayMatches(\n item.language,\n (value) => (typeof value === 'string' ? undefined : `'\"language\" expected array of strings`),\n logging\n );\n }\n if (item.accompanyingCanvas) {\n item.accompanyingCanvas = ensureNotArrayWarning(item.accompanyingCanvas, 'accompanyingCanvas', logging);\n if (item.accompanyingCanvas?.type !== 'Canvas') {\n logging.warnings.push(`\"accompanyingCanvas\" should be a Canvas`);\n }\n }\n if (item.placeholderCanvas) {\n item.placeholderCanvas = ensureNotArrayWarning(item.placeholderCanvas, 'placeholderCanvas', logging);\n if (item.placeholderCanvas?.type !== 'Canvas') {\n logging.warnings.push(`\"placeholderCanvas\" should be a Canvas`);\n }\n }\n if (item.thumbnail) {\n item.thumbnail = ensureArrayWarning(item.thumbnail, 'thumbnail', logging);\n }\n return item;\n}\n\nconst validItemMapping: any = {\n Manifest: 'Canvas',\n Canvas: 'AnnotationPage',\n AnnotationPage: 'Annotation',\n};\n\nfunction structuralProperties(resource: any, logging: InternalLogging = globalWarnings) {\n const type = resource.type;\n switch (type) {\n case 'Canvas':\n case 'AnnotationPage':\n case 'Manifest': {\n if (resource && resource.items) {\n resource.items = ensureArrayMatches(\n resource.items,\n (item) =>\n item.type === validItemMapping[type]\n ? undefined\n : `\"${resource.type}.items\" should contain only type ${validItemMapping[type]}, found ${item.type}`,\n logging\n );\n }\n }\n }\n\n return resource;\n}\n\nfunction linkingProperties(\n item: Partial<Presentation3.LinkingProperties>,\n logging: InternalLogging = globalWarnings\n): Partial<Presentation3.LinkingProperties> {\n if (item.logo) {\n item.logo = ensureArrayWarning(item.logo, 'logo', logging);\n }\n if (item.service) {\n item.service = ensureArrayWarning(item.service, 'service', logging);\n }\n\n if (item.seeAlso) {\n item.seeAlso = ensureArrayWarning(item.seeAlso, 'seeAlso', logging);\n }\n\n if (item.rendering) {\n item.rendering = ensureArrayWarning(item.rendering, 'rendering', logging);\n }\n\n if (item.partOf) {\n item.partOf = ensureArrayWarning(item.partOf, 'partOf', logging);\n }\n\n if (item.homepage) {\n item.homepage = ensureArrayWarning(item.homepage, 'homepage', logging);\n }\n\n if (item.services) {\n item.services = ensureArrayWarning(item.services, 'services', logging);\n }\n\n if (item.supplementary) {\n item.supplementary = ensureArrayWarning(item.supplementary, 'supplementary', logging);\n }\n\n if (item.start) {\n item.start = ensureNotArrayWarning(item.start, 'start', logging);\n }\n\n return item;\n}\n\nfunction upgradeResource(state: InternalLogging) {\n return (resource: any) => {\n if (!resource) {\n return undefined;\n }\n\n if (typeof resource === 'string') {\n return resource;\n }\n\n if (Array.isArray(resource)) {\n return resource;\n }\n\n return removeUndefinedProperties({\n ...resource,\n ...technicalProperties(resource, state),\n ...descriptiveProperties(resource, state),\n ...linkingProperties(resource, state),\n ...structuralProperties(resource, state),\n });\n };\n}\n\nexport function presentation3StrictUpgrade(\n p3: Presentation3.Manifest,\n state: InternalLogging = globalWarnings\n): Presentation3.Manifest {\n const traverse = Traverse.all(upgradeResource(state));\n\n return traverse.traverseManifest(p3);\n}\n","export function removeUndefinedProperties(obj: any) {\n for (const prop in obj) {\n if (typeof obj[prop] === 'undefined' || obj[prop] === null) {\n delete obj[prop];\n }\n }\n return obj;\n}\n"],"names":["isSpecificResource","resource","type","ensureArray","maybeArray","Array","isArray","compose","fns","arg","reduce","a","f","types","Traverse","constructor","traversals","options","__publicField","this","traverseManifestItems","bind","traverseLinking","traverseDescriptive","traverseLinkedCanvases","traverseManifestStructures","traverseInlineAnnotationPages","traverseCanvasItems","traverseAnnotationPageItems","traverseRangeRanges","collection","manifest","canvas","annotationCollection","annotationPage","annotation","contentResource","choice","range","service","agent","specificResource","geoJson","allowUndefinedReturn","static","traversal","thumbnail","map","traverseType","parent","provider","traverseAgent","seeAlso","content","traverseService","services","logo","homepage","partOf","start","traverseSpecificResource","rendering","supplementary","traverseCollectionItems","items","collectionOrManifest","traverseCollection","traverseManifest","traverseGeoJson","traverseNavPlace","navPlace","traverseCanvas","structures","traverseRange","_traverseManifest","traverseAnnotationPage","annotations","_traverseCanvas","traverseAnnotation","annotationPageJson","_traverseAnnotationPage","traverseAnnotationBody","body","annotationBody","traverseContentResource","json","placeholderCanvas","accompanyingCanvas","annotationJson","traverseContentResourceLinking","contentResourceJson","choiceItem","typeHint","source","id","traverseUnknown","rangeOrManifest","_traverseRange","object","context","acc","returnValue","_service","Object","assign","innerService","Error","hasType","indexOf","profile","identifyResource","validNavDate","globalWarnings","warnings","technicalProperties","item","logging","behavior","ensureArrayWarning","width","ensureValidNumber","height","duration","format","push","ensureArrayMatches","values","isValid","filter","value","message","propName","ensureNotArrayWarning","length","isFloat","newValue","parseFloat","Math","abs","Number","isNaN","floor","ensureValidLanguageMap","str","none","keys","fixed","didFix","key","fixedItem","validMetadataValue","input","defaultLabel","label","descriptiveProperties","summary","requiredStatement","metadata","i","rights","startsWith","slice","navDate","trimmedNavDate","trim","match","language","_a","_b","validItemMapping","Manifest","Canvas","AnnotationPage","structuralProperties","linkingProperties","p3","state","traverse","all","obj","prop","removeUndefinedProperties","upgradeResource"],"mappings":"6KAEO,SAASA,EAAmBC,GAE7B,MAAoB,iBAAbA,MAIFA,GAAuC,qBAA1BA,EAAiBC,KACzC,CCTO,SAASC,EAAeC,GACzB,OAAAC,MAAMC,QAAQF,GACTA,EAEFA,EAAa,CAACA,GAAc,EACrC,CCLO,SAASG,KAAqBC,GAC5B,OAAIC,GAAaD,EAAIE,QAAO,CAACC,EAAGC,IAAMA,EAAED,IAAIF,EACrD,gGCuBO,MAAMI,EAAQ,CACnB,aACA,WACA,SACA,iBACA,uBACA,aACA,kBACA,QACA,UACA,WACA,SAuDK,MAAMC,EAKXC,YAAYC,EAA0BC,EAAoC,IAJlEC,EAAAC,KAAA,cAEAD,EAAAC,KAAA,WA2KYD,EAAAC,KAAA,oBAAAZ,EAClBY,KAAKC,sBAAsBC,KAAKF,MAChCA,KAAKG,gBAAgBD,KAAKF,MAC1BA,KAAKI,oBAAoBF,KAAKF,MAC9BA,KAAKK,uBAAuBH,KAAKF,MACjCA,KAAKM,2BAA2BJ,KAAKF,MACrCA,KAAKO,8BAA8BL,KAAKF,QA4BxBD,EAAAC,KAAA,kBAAAZ,EAChBY,KAAKQ,oBAAoBN,KAAKF,MAC9BA,KAAKG,gBAAgBD,KAAKF,MAC1BA,KAAKI,oBAAoBF,KAAKF,MAC9BA,KAAKK,uBAAuBH,KAAKF,MACjCA,KAAKO,8BAA8BL,KAAKF,QAgBhBD,EAAAC,KAAA,0BAAAZ,EACxBY,KAAKS,4BAA4BP,KAAKF,MACtCA,KAAKG,gBAAgBD,KAAKF,MAC1BA,KAAKI,oBAAoBF,KAAKF,QAyHfD,EAAAC,KAAA,iBAAAZ,EACfY,KAAKU,oBAAoBR,KAAKF,MAC9BA,KAAKG,gBAAgBD,KAAKF,MAC1BA,KAAKI,oBAAoBF,KAAKF,MAC9BA,KAAKK,uBAAuBH,KAAKF,QA/VjCA,KAAKH,WAAa,CAChBc,WAAY,GACZC,SAAU,GACVC,OAAQ,GACRC,qBAAsB,GACtBC,eAAgB,GAChBC,WAAY,GACZC,gBAAiB,GACjBC,OAAQ,GACRC,MAAO,GACPC,QAAS,GACTC,MAAO,GACPC,iBAAkB,GAClBC,QAAS,MACN1B,GAELG,KAAKF,QAAU,CACb0B,sBAAsB,KACnB1B,EAEP,CAEA2B,WAAWC,GACT,OAAO,IAAI/B,EAAS,CAClBgB,WAAY,CAACe,GACbd,SAAU,CAACc,GACXb,OAAQ,CAACa,GACTZ,qBAAsB,CAACY,GACvBX,eAAgB,CAACW,GACjBV,WAAY,CAACU,GACbT,gBAAiB,CAACS,GAClBR,OAAQ,CAACQ,GACTP,MAAO,CAACO,GACRN,QAAS,CAACM,GACVH,QAAS,CAACG,GACVJ,iBAAkB,CAACI,GACnBL,MAAO,CAACK,IAEZ,CAEAtB,oBAA8DtB,GASrD,OARHA,EAAS6C,YACX7C,EAAS6C,UAAY3C,EAAYF,EAAS6C,WAAWC,KAAKD,GACxD3B,KAAK6B,aAAaF,EAAW,CAAEG,OAAQhD,GAAYkB,KAAKH,WAAWoB,oBAGnEnC,EAASiD,WACFjD,EAAAiD,SAAWjD,EAASiD,SAASH,KAAKP,GAAUrB,KAAKgC,cAAcX,EAAOvC,MAE1EA,CACT,CAEAqB,gBAAsDrB,GA+D7C,OA9DHA,EAASmD,UACFnD,EAAAmD,QAAUnD,EAASmD,QAAQL,KAAKM,GACvClC,KAAK6B,aAAaK,EAAS,CAAEJ,OAAQhD,GAAYkB,KAAKH,WAAWoB,oBAGjEnC,EAASsC,UACFtC,EAAAsC,QAAUpC,EAAYF,EAASsC,SAASQ,KAAKR,GAAYpB,KAAKmC,gBAAgBf,MAErFtC,EAASsD,WACXtD,EAASsD,SAAWpD,EAAYF,EAASsD,UAAUR,KAAKR,GAAYpB,KAAKmC,gBAAgBf,EAAStC,MAEhGA,EAASuD,OACFvD,EAAAuD,KAAOvD,EAASuD,KAAKT,KAAKM,GACjClC,KAAK6B,aAAaK,EAAS,CAAEJ,OAAQhD,GAAYkB,KAAKH,WAAWoB,oBAGjEnC,EAASwD,WACFxD,EAAAwD,SAAWxD,EAASwD,SAASV,KAAKU,GACzCtC,KAAK6B,aAAaS,EAAU,CAAER,OAAQhD,GAAYkB,KAAKH,WAAWoB,oBAGlEnC,EAASyD,SAEVzD,EAAiByD,OAASzD,EAASyD,OAAOX,KAAKW,GACxB,iBAAXA,GAAwBA,EAAOxD,KAGtB,WAAhBwD,EAAOxD,KACFiB,KAAK6B,aAAaU,EAAkB,CAAET,OAAQhD,GAAYkB,KAAKH,WAAWgB,QAE/D,yBAAhB0B,EAAOxD,KACFiB,KAAK6B,aACVU,EACA,CAAET,OAAQhD,GACVkB,KAAKH,WAAWiB,sBAGA,eAAhByB,EAAOxD,KACFiB,KAAK6B,aAAaU,EAAsB,CAAET,OAAQhD,GAAYkB,KAAKH,WAAWc,YAEhFX,KAAK6B,aAAaU,EAA2B,CAAET,OAAQhD,GAAYkB,KAAKH,WAAWoB,iBAfjFjB,KAAK6B,aAAaU,EAA2B,CAAET,OAAQhD,GAAYkB,KAAKH,WAAWoB,oBAkB5FnC,EAAS0D,QACP3D,EAAmBC,EAAS0D,OAC9B1D,EAAS0D,MAAQxC,KAAKyC,yBAAyB3D,EAAS0D,MAAO,SAAU1D,GAGhEA,EAAA0D,MAAQxC,KAAK6B,aAAa/C,EAAS0D,MAAc,CAAEV,OAAQhD,GAAYkB,KAAKH,WAAWgB,SAGhG/B,EAAS4D,YACF5D,EAAA4D,UAAY5D,EAAS4D,UAAUd,KAAKM,GAC3ClC,KAAK6B,aAAaK,EAAS,CAAEJ,OAAQhD,GAAYkB,KAAKH,WAAWoB,oBAGjEnC,EAAS6D,gBACF7D,EAAA6D,cAAgB7D,EAAS6D,cAAcf,KAAKM,GACnDlC,KAAK6B,aAAaK,EAAS,CAAEJ,OAAQhD,GAAYkB,KAAKH,WAAWoB,oBAI9DnC,CACT,CAEA8D,wBAA6DjC,GAUpD,OATHA,EAAWkC,OACFlC,EAAAkC,MAAMjB,KAAKkB,GACc,eAA9BA,EAAqB/D,KAChBiB,KAAK+C,mBAAmBD,GAE1B9C,KAAKgD,iBAAiBF,KAI1BnC,CACT,CAEAoC,mBAAmBpC,EAAwBmB,GACzC,OAAO9B,KAAK6B,aACV7B,KAAKI,oBACHJ,KAAKO,8BACHP,KAAKG,gBAAgBH,KAAKK,uBAAuBL,KAAK4C,wBAAwBjC,OAGlF,CAAEmB,UACF9B,KAAKH,WAAWc,WAEpB,CAEAsC,gBAAgB1B,EAAoCO,GAC3C,OAAA9B,KAAK6B,aAAwCN,EAAS,CAAEO,UAAU9B,KAAKH,WAAW0B,QAC3F,CAEA2B,iBAAiBpE,GAIR,OAHHA,EAASqE,WACXrE,EAASqE,SAAWnD,KAAKiD,gBAAgBnE,EAASqE,SAAUrE,IAEvDA,CACT,CAEAmB,sBAAsBW,GAIb,OAHHA,EAASiC,QACFjC,EAAAiC,MAAQjC,EAASiC,MAAMjB,KAAKf,GAAWb,KAAKoD,eAAevC,MAE/DD,CACT,CAEAN,2BAA2BM,GAIlB,OAHHA,EAASyC,aACFzC,EAAAyC,WAAazC,EAASyC,WAAWzB,KAAKT,GAAUnB,KAAKsD,cAAcnC,MAEvEP,CACT,CAWAoC,iBAAiBpC,EAAoBkB,GAC5B,OAAA9B,KAAK6B,aAAuB7B,KAAKuD,kBAAkB3C,GAAW,CAAEkB,UAAU9B,KAAKH,WAAWe,SACnG,CAEAJ,oBAAoBK,GAKX,OAJPA,EAAOgC,OAAShC,EAAOgC,OAAS,IAAIjB,KAAKb,GAChCf,KAAKwD,uBAAuBzC,EAAgBF,KAG9CA,CACT,CAEAN,8BAA4EzB,GAC1E,MAAwB,iBAAbA,GAA0BA,GAGjCA,EAAS2E,cACX3E,EAAS2E,YAAc3E,EAAS2E,YAAY7B,KAAKb,GACxCf,KAAKwD,uBAAuBzC,EAAgBjC,MAIhDA,GAREA,CASX,CAUAsE,eAAevC,EAAgBiB,GACtB,OAAA9B,KAAK6B,aAAqB7B,KAAK0D,gBAAgB7C,GAAS,CAAEiB,UAAU9B,KAAKH,WAAWgB,OAC7F,CAEAJ,4BAA4BM,GAMnB,OALHA,EAAe8B,QACjB9B,EAAe8B,MAAQ9B,EAAe8B,MAAMjB,KAAKZ,GACxChB,KAAK2D,mBAAmB3C,EAAYD,MAGxCA,CACT,CAQAyC,uBAAuBI,EAAoC9B,GACzD,OAAO9B,KAAK6B,aACV7B,KAAK6D,wBAAwBD,GAC7B,CAAE9B,UACF9B,KAAKH,WAAWkB,eAEpB,CAIA+C,uBAAuB9C,GASd,OARH9B,MAAMC,QAAQ6B,EAAW+C,MAC3B/C,EAAW+C,KAAO/C,EAAW+C,KAAKnC,KAAKoC,GAC9BhE,KAAKiE,wBAAwBD,EAAgBhD,KAE7CA,EAAW+C,OACpB/C,EAAW+C,KAAO/D,KAAKiE,wBAAwBjD,EAAW+C,KAAyB/C,IAG9EA,CACT,CAEAX,uBAAwF6D,GAS/E,OARHA,EAAKC,oBACPD,EAAKC,kBAAoBnE,KAAKoD,eAAec,EAAKC,oBAGhDD,EAAKE,qBACPF,EAAKE,mBAAqBpE,KAAKoD,eAAec,EAAKE,qBAG9CF,CACT,CAGAP,mBAAmBU,EAA4BvC,GAC7C,OAAO9B,KAAK6B,aACV7B,KAAKG,gBAAgBH,KAAK8D,uBAAuB9D,KAAKI,oBAAoBiE,KAC1E,CAAEvC,UACF9B,KAAKH,WAAWmB,WAEpB,CAEAsD,+BAA+BC,GAC7B,MAAmC,iBAAxBA,GAAqCA,GAG5CA,GAAwBA,EAAiDnD,UAC1EmD,EAAgDnD,QAAUpC,EACxDuF,EAAgDnD,SAAW,IAC5DQ,KAAKR,GAAYpB,KAAKmC,gBAAgBf,EAASmD,MAG5CA,GAREA,CASX,CAEAN,wBAAwBM,EAAsCzC,GAOxD,MANsC,WAArCyC,EAA4BxF,OAC9BwF,EAA4B1B,MAAS0B,EAA4B1B,MAAMjB,KAAK4C,GACpExE,KAAKiE,wBAAwBO,EAAYD,MAIhD1F,EAAmB0F,GACdvE,KAAKyC,yBAAyB8B,EAAqB,mBAGrDvE,KAAK6B,aAIV7B,KAAKO,8BAA8BP,KAAKsE,+BAA+BC,IACvE,CAAEzC,UACF9B,KAAKH,WAAWoB,gBAEpB,CAEAwB,yBAAyBnB,EAAoCmD,EAAmB3C,GAC9E,IAAI4C,EAASpD,EAAiBoD,OAK9B,MAJuC,iBAA5BpD,EAAiBoD,SAC1BA,EAAS,CAAEC,GAAIrD,EAAiBoD,OAAQ3F,KAAM0F,GAAY,YAGrDzE,KAAK6B,aACV,IACKP,EACHoD,OACe,WAAbD,GAAyC,WAAhBC,EAAO3F,KAC5BiB,KAAK6B,aAAa6C,EAAQ,CAAE5C,UAAU9B,KAAKH,WAAWgB,QACzC,oBAAb4D,EACAzE,KAAKiE,wBAAwBS,EAAQ,CAAE5C,WACvC9B,KAAK4E,gBAAgBF,EAAQ,CAAE5C,SAAQ2C,cAE/C,CAAE3C,UACF9B,KAAKH,WAAWyB,iBAEpB,CAEAZ,oBAAoBS,GAiBX,OAhBHA,EAAM0B,QACR1B,EAAM0B,MAAQ1B,EAAM0B,MAAMjB,KAAKiD,GACE,iBAApBA,EACF7E,KAAKoD,eAAe,CAAEuB,GAAIE,EAAiB9F,KAAM,UAAYoC,GAElEtC,EAAmBgG,GACd7E,KAAKyC,yBAAyBoC,EAAiB,SAAU1D,GAG5B,aAAjC0D,EAAwB9F,KACpBiB,KAAKgD,iBAAiB6B,EAAwB1D,GAEhDnB,KAAKsD,cAAcuB,EAA0B1D,MAIjDA,CACT,CASAmC,cAAcnC,EAAcW,GACnB,OAAA9B,KAAK6B,aAAoB7B,KAAK8E,eAAe3D,GAAQ,CAAEW,UAAU9B,KAAKH,WAAWsB,MAC1F,CAEAa,cAAcX,EAAyBS,GACrC,OAAO9B,KAAK6B,aACV7B,KAAKI,oBAAoBJ,KAAKG,gBAAgBkB,IAC9C,CAAES,UACF9B,KAAKH,WAAWwB,MAEpB,CAEAQ,aAAgBkD,EAAWC,EAA2BnF,GACpD,OAAOA,EAAWN,QAAO,CAAC0F,EAAQvD,KAC1B,MAAAwD,EAAcxD,EAAUuD,EAAKD,GACnC,YAA2B,IAAhBE,GAAgClF,KAAKF,QAAQ0B,qBAGjD0D,EAFED,CAEF,GACNF,EACL,CAEA5C,gBAAgBf,EAAkBU,GAChC,MAAMqD,EAAgBC,OAAOC,OAAO,GAAIjE,GAIjC,OAHH+D,GAAYA,EAAS/D,UACd+D,EAAA/D,QAAUpC,EAAYmG,EAAS/D,SAASQ,KAAK0D,GAAsBtF,KAAKmC,gBAAgBmD,MAE5FtF,KAAK6B,aAAsBsD,EAAU,CAAErD,UAAU9B,KAAKH,WAAWuB,QAC1E,CAEAwD,gBAAgB9F,GAAegD,OAAEA,WAAQ2C,GAAkD,CAAA,GACnF,MAAA1F,EAnaM,SAAiBD,EAAe2F,GAC9C,GAAI,MAAO3F,EACH,MAAA,IAAIyG,MAAM,4CAEd,GAAArG,MAAMC,QAAQL,GACV,MAAA,IAAIyG,MAAM,+BAEd,GAAoB,iBAAbzG,EAAuB,CAChC,GAAI2F,EACK,OAAAA,EAET,MAAM,IAAIc,aAAgBzG,EAAV,yBAClB,CAEI,GAA0B,iBAAnBA,EAAUC,KAAmB,CACtC,MAAMyG,EAAU9F,EAAM+F,QAAQ3G,EAASC,MACvC,IAAoB,IAAhByG,EACF,OAAO9F,EAAM8F,EAEjB,CAEA,GAAI1G,EAAU4G,QACL,MAAA,UAGH,MAAA,IAAIH,MAAM,6BAClB,CAyYiBI,CAAiB7G,EAAU2F,GAExC,OAAQ1F,GACN,IAAK,aACI,OAAAiB,KAAK+C,mBAAmBjE,EAAwBgD,GACzD,IAAK,WACI,OAAA9B,KAAKgD,iBAAiBlE,EAAsBgD,GACrD,IAAK,SACI,OAAA9B,KAAKoD,eAAetE,EAAoBgD,GACjD,IAAK,iBACI,OAAA9B,KAAKwD,uBAAuB1E,EAA4BgD,GACjE,IAAK,aACI,OAAA9B,KAAK2D,mBAAmB7E,EAAwBgD,GACzD,IAAK,kBACI,OAAA9B,KAAKiE,wBAAwBnF,EAA6BgD,GACnE,IAAK,QACI,OAAA9B,KAAKsD,cAAcxE,EAAmBgD,GAC/C,IAAK,UACI,OAAA9B,KAAKmC,gBAAgBrD,EAAqBgD,GACnD,IAAK,QACI,OAAA9B,KAAKgC,cAAclD,EAA8BgD,GAC1D,QACE,GAAI2C,EACK,OAAAA,EAEH,MAAA,IAAIc,MAAM,2CAA2CxG,KAGjE,EC1fF,MAAM6G,EACJ,kKAMIC,EAAiB,CAAEC,SAAU,IAEnC,SAASC,EACPC,EACAC,EAA2BJ,GAmBpB,OAjBHG,EAAKE,WACPF,EAAKE,SAAWC,EAAmBH,EAAKE,SAAU,WAAYD,IAGhED,EAAKI,MAAQC,EAAkBL,EAAKI,MAAO,SAAS,EAAOH,GAC3DD,EAAKM,OAASD,EAAkBL,EAAKM,OAAQ,UAAU,EAAOL,GAC9DD,EAAKO,SAAWF,EAAkBL,EAAKO,SAAU,YAAY,EAAMN,GAE/DD,EAAKQ,QAAiC,iBAAhBR,EAAKQ,SACrBP,EAAAH,SAASW,KAAK,sCAClBvH,MAAMC,QAAQ6G,EAAKQ,SAAqC,iBAAnBR,EAAKQ,OAAO,GAC9CR,EAAAQ,OAASR,EAAKQ,OAAO,GAE1BR,EAAKQ,YAAS,GAIXR,CACT,CAEA,SAASU,EACPC,EACAC,EACAX,EAA2BJ,GAE3B,OAAIc,GAAUzH,MAAMC,QAAQwH,GACnBA,EAAOE,QAAQC,IACd,MAAAC,EAAUH,EAAQE,GAIxB,OAHIC,IAAqD,IAA1Cd,EAAQH,SAASL,QAAQsB,IAC9Bd,EAAAH,SAASW,KAAKM,IAEhBA,CAAA,IAGLJ,CACT,CAEA,SAASR,EAAmBW,EAAYE,EAAkBf,EAA2BJ,GAC/E,OAAA3G,MAAMC,QAAQ2H,GACTA,GAEDb,EAAAH,SAASW,KAAK,IAAIO,gCACnB,CAACF,GACV,CAEA,SAASG,EAAsBH,EAAYE,EAAkBf,EAA2BJ,GAClF,GAAA3G,MAAMC,QAAQ2H,GAAQ,CAEpB,GADIb,EAAAH,SAASW,KAAK,IAAIO,yCACL,IAAjBF,EAAMI,OACD,OAET,OAAOJ,EAAM,EACf,CACO,OAAAA,CACT,CAEA,SAAST,EACPS,EACAE,EACAG,GAAU,EACVlB,EAA2BJ,GAEvB,QAAiB,IAAViB,EAAP,CAIA,GAAiB,iBAAVA,EAAoB,CACvB,MAAAM,EAAWD,EAAUE,WAAWP,GAASQ,KAAKC,IAAIC,OAAOV,IAC/D,OAAIU,OAAOC,MAAML,IAAaA,GAAY,OACxCnB,EAAQH,SAASW,KACf,IAAIO,6BAAoCG,EAAU,SAAW,8CAIjElB,EAAQH,SAASW,KACf,IAAIO,6BAAoCG,EAAU,SAAW,qCAExDC,EACT,CAEA,OAAKD,GAAWL,EAAQ,GAAM,EAKvBA,GAJGb,EAAAH,SAASW,KAAK,IAAIO,4DACnBM,KAAKI,MAAMZ,GAlBpB,CAsBF,CAEA,SAASa,EACPC,EACAZ,EACAf,EAA2BJ,GAGvB,GAAA3G,MAAMC,QAAQyI,GACZ,MAAkB,iBAAXA,EAAI,IACL3B,EAAAH,SAASW,KAAK,IAAIO,sDACnB,CAAEa,KAAMD,KAET3B,EAAAH,SAASW,KAAK,IAAIO,8DACnB,CAAEa,KAAM,CAAC,MAGd,GAAe,iBAARD,EAET,OADQ3B,EAAAH,SAASW,KAAK,IAAIO,sDACnB,CAAEa,KAAM,CAACD,IAIZ,MAAAE,EAAO1C,OAAO0C,KAAKF,GACnBG,EAA2C,CAAA,EACjD,IAAIC,GAAS,EACb,IAAA,MAAWC,KAAOH,EAAM,CACtB,MAAMnB,EAASiB,EAAIK,GACbC,EAAY,GACd,GAAkB,iBAAXvB,EACAqB,GAAA,EACD/B,EAAAH,SAASW,KAAK,IAAIO,iFAC1BkB,EAAUzB,KAAKE,QACN,GAAAzH,MAAMC,QAAQwH,GACvB,IAAA,MAAWiB,KAAOjB,EACK,iBAARiB,GACFI,GAAA,EACT/B,EAAQH,SAASW,KACf,IAAIO,0FAINkB,EAAUzB,KAAKmB,QAIVI,GAAA,EACT/B,EAAQH,SAASW,KACf,IAAIO,yFAGJkB,EAAUhB,OAAS,IACrBa,EAAME,GAAOC,EAEjB,CAEA,OAAIF,EACgC,IAA9B5C,OAAO0C,KAAKC,GAAOb,OACd,CAAEW,KAAM,CAAC,KAGXE,EAGFH,CACT,CAEA,SAASO,EACPC,EACApB,EACAqB,EAAe,GACfpC,EAA2BJ,GAEvB,MAAiB,iBAAVuC,GACDnC,EAAAH,SAASW,KAAK,IAAIO,sDACnB,CACLsB,MAAO,CAAET,KAAM,CAACQ,IAChBvB,MAAO,CAAEe,KAAM,CAACO,SAGZA,EAAME,OAASF,EAAMtB,OAAWsB,EAAME,QAAUF,EAAMtB,QAClDb,EAAAH,SAASW,KAAK,IAAIO,2CAExBoB,EAAME,MACRF,EAAME,MAAQX,EAAuBS,EAAME,MAAO,GAAGtB,UAAkBf,GAEvEmC,EAAME,MAAQ,CAAET,KAAM,CAACQ,IAErBD,EAAMtB,MACRsB,EAAMtB,MAAQa,EAAuBS,EAAMtB,MAAO,GAAGE,UAAkBf,GAEvEmC,EAAMtB,MAAQ,CAAEe,KAAM,CAAC,KAIpBO,EACT,CAEA,SAASG,EACPvC,EACAC,EAA2BJ,WAkB3B,GAhBIG,EAAKsC,QACPtC,EAAKsC,MAAQX,EAAuB3B,EAAKsC,MAAO,QAASrC,IAEvDD,EAAKwC,UACPxC,EAAKwC,QAAUb,EAAuB3B,EAAKwC,QAAS,UAAWvC,IAG7DD,EAAKyC,oBACPzC,EAAKyC,kBAAoBN,EACvBnC,EAAKyC,kBACL,oBACA,qBACAxC,IAIAD,EAAK0C,SACP,GAAIxJ,MAAMC,QAAQ6G,EAAK0C,UACrB,IAAA,IAASC,EAAI,EAAGA,EAAI3C,EAAK0C,SAASxB,OAAQyB,IACnC3C,EAAA0C,SAASC,GAAKR,EAAmBnC,EAAK0C,SAASC,GAAI,YAAYA,IAAK,GAAI1C,QAGvEA,EAAAH,SAASW,KAAK,iEACtBT,EAAK0C,SAAW,GAmBpB,GAfI1C,EAAK4C,SACH1J,MAAMC,QAAQ6G,EAAK4C,UACb3C,EAAAH,SAASW,KAAK,gDACjBT,EAAA4C,OAAmC,iBAAnB5C,EAAK4C,OAAO,GAAkB5C,EAAK4C,OAAO,GAAK,IAE3C,iBAAhB5C,EAAK4C,QAAwB5C,EAAK4C,OAAOC,WAAW,QAE7B,iBAAhB7C,EAAK4C,QAAuB5C,EAAK4C,OAAOC,WAAW,WACnE5C,EAAQH,SAASW,KACf,qGAEFT,EAAK4C,OAAS,OAAO5C,EAAK4C,OAAOE,MAAM,MAL/B7C,EAAAH,SAASW,KAAK,mCAStBT,EAAK+C,QAAS,CACV,MAAAC,EAAyC,iBAAjBhD,EAAK+C,QAAuB/C,EAAK+C,QAAQE,YAAS,EAC5ED,IAAmBhD,EAAK+C,UAClB9C,EAAAH,SAASW,KAAK,iDACtBT,EAAK+C,QAAUC,GAEW,iBAAjBhD,EAAK+C,SAAyB/C,EAAK+C,QAAQG,MAAMtD,KAClDK,EAAAH,SAASW,KAAK,oDACtBT,EAAK+C,aAAU,EAEnB,CAyBO,OAvBH/C,EAAKmD,WACPnD,EAAKmD,SAAWhD,EAAmBH,EAAKmD,SAAU,WAAYlD,GAC9DD,EAAKmD,SAAWzC,EACdV,EAAKmD,UACJrC,GAA4B,iBAAVA,OAAqB,EAAY,0CACpDb,IAGAD,EAAK5B,qBACP4B,EAAK5B,mBAAqB6C,EAAsBjB,EAAK5B,mBAAoB,qBAAsB6B,GACzD,YAAlC,OAAAmD,EAAKpD,EAAA5B,yBAAoB,EAAAgF,EAAArK,OACnBkH,EAAAH,SAASW,KAAK,4CAGtBT,EAAK7B,oBACP6B,EAAK7B,kBAAoB8C,EAAsBjB,EAAK7B,kBAAmB,oBAAqB8B,GACvD,YAAjC,OAAAoD,EAAKrD,EAAA7B,wBAAmB,EAAAkF,EAAAtK,OAClBkH,EAAAH,SAASW,KAAK,2CAGtBT,EAAKrE,YACPqE,EAAKrE,UAAYwE,EAAmBH,EAAKrE,UAAW,YAAasE,IAE5DD,CACT,CAEA,MAAMsD,EAAwB,CAC5BC,SAAU,SACVC,OAAQ,iBACRC,eAAgB,cAGlB,SAASC,EAAqB5K,EAAemH,EAA2BJ,GACtE,MAAM9G,EAAOD,EAASC,KACtB,OAAQA,GACN,IAAK,SACL,IAAK,iBACL,IAAK,WACCD,GAAYA,EAAS+D,QACvB/D,EAAS+D,MAAQ6D,EACf5H,EAAS+D,OACRmD,GACCA,EAAKjH,OAASuK,EAAiBvK,QAC3B,EACA,IAAID,EAASC,wCAAwCuK,EAAiBvK,aAAgBiH,EAAKjH,QACjGkH,IAMD,OAAAnH,CACT,CAEA,SAAS6K,EACP3D,EACAC,EAA2BJ,GAqCpB,OAnCHG,EAAK3D,OACP2D,EAAK3D,KAAO8D,EAAmBH,EAAK3D,KAAM,OAAQ4D,IAEhDD,EAAK5E,UACP4E,EAAK5E,QAAU+E,EAAmBH,EAAK5E,QAAS,UAAW6E,IAGzDD,EAAK/D,UACP+D,EAAK/D,QAAUkE,EAAmBH,EAAK/D,QAAS,UAAWgE,IAGzDD,EAAKtD,YACPsD,EAAKtD,UAAYyD,EAAmBH,EAAKtD,UAAW,YAAauD,IAG/DD,EAAKzD,SACPyD,EAAKzD,OAAS4D,EAAmBH,EAAKzD,OAAQ,SAAU0D,IAGtDD,EAAK1D,WACP0D,EAAK1D,SAAW6D,EAAmBH,EAAK1D,SAAU,WAAY2D,IAG5DD,EAAK5D,WACP4D,EAAK5D,SAAW+D,EAAmBH,EAAK5D,SAAU,WAAY6D,IAG5DD,EAAKrD,gBACPqD,EAAKrD,cAAgBwD,EAAmBH,EAAKrD,cAAe,gBAAiBsD,IAG3ED,EAAKxD,QACPwD,EAAKxD,MAAQyE,EAAsBjB,EAAKxD,MAAO,QAASyD,IAGnDD,CACT,oCA0BgB,SACd4D,EACAC,EAAyBhE,GAEzB,MAAMiE,EAAWnK,EAASoK,IA5B5B,SAAyBF,GACvB,OAAQ/K,IACN,GAAKA,EAID,MAAoB,iBAAbA,GAIPI,MAAMC,QAAQL,GAHTA,EC1WN,SAAmCkL,GACxC,IAAA,MAAWC,KAAQD,OACQ,IAAdA,EAAIC,IAAuC,OAAdD,EAAIC,WACnCD,EAAIC,GAGR,OAAAD,CACT,CD0WWE,CAA0B,IAC5BpL,KACAiH,EAAoBjH,EAAU+K,MAC9BtB,EAAsBzJ,EAAU+K,MAChCF,EAAkB7K,EAAU+K,MAC5BH,EAAqB5K,EAAU+K,IACnC,CAEL,CAMgCM,CAAgBN,IAEvC,OAAAC,EAAS9G,iBAAiB4G,EACnC"}
var __defProp = Object.defineProperty;
var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
var __publicField = (obj, key, value) => {
__defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
return value;
};
function isSpecificResource(resource) {
if (typeof resource === "string") {
return false;
}
return !!resource && resource.type === "SpecificResource";
}
function ensureArray(maybeArray) {
if (Array.isArray(maybeArray)) {
return maybeArray;
}
return maybeArray ? [maybeArray] : [];
}
function compose(...fns) {
return (arg) => fns.reduce((a, f) => f(a), arg);
}
const types = [
"Collection",
"Manifest",
"Canvas",
"AnnotationPage",
"AnnotationCollection",
"Annotation",
"ContentResource",
"Range",
"Service",
"Selector",
"Agent"
];
function identifyResource(resource, typeHint) {
if (typeof resource === "undefined" || resource === null) {
throw new Error("Null or undefined is not a valid entity.");
}
if (Array.isArray(resource)) {
throw new Error("Array is not a valid entity");
}
if (typeof resource !== "object") {
if (typeHint) {
return typeHint;
}
throw new Error(`${typeof resource} is not a valid entity`);
}
if (typeof resource.type === "string") {
const hasType = types.indexOf(resource.type);
if (hasType !== -1) {
return types[hasType];
}
}
if (resource.profile) {
return "Service";
}
throw new Error("Resource type is not known");
}
class Traverse {
constructor(traversals, options = {}) {
__publicField(this, "traversals");
__publicField(this, "options");
__publicField(this, "_traverseManifest", compose(
this.traverseManifestItems.bind(this),
this.traverseLinking.bind(this),
this.traverseDescriptive.bind(this),
this.traverseLinkedCanvases.bind(this),
this.traverseManifestStructures.bind(this),
this.traverseInlineAnnotationPages.bind(this)
));
__publicField(this, "_traverseCanvas", compose(
this.traverseCanvasItems.bind(this),
this.traverseLinking.bind(this),
this.traverseDescriptive.bind(this),
this.traverseLinkedCanvases.bind(this),
this.traverseInlineAnnotationPages.bind(this)
));
__publicField(this, "_traverseAnnotationPage", compose(
this.traverseAnnotationPageItems.bind(this),
this.traverseLinking.bind(this),
this.traverseDescriptive.bind(this)
));
__publicField(this, "_traverseRange", compose(
this.traverseRangeRanges.bind(this),
this.traverseLinking.bind(this),
this.traverseDescriptive.bind(this),
this.traverseLinkedCanvases.bind(this)
));
this.traversals = {
collection: [],
manifest: [],
canvas: [],
annotationCollection: [],
annotationPage: [],
annotation: [],
contentResource: [],
choice: [],
range: [],
service: [],
agent: [],
specificResource: [],
geoJson: [],
...traversals
};
this.options = {
allowUndefinedReturn: false,
...options
};
}
static all(traversal) {
return new Traverse({
collection: [traversal],
manifest: [traversal],
canvas: [traversal],
annotationCollection: [traversal],
annotationPage: [traversal],
annotation: [traversal],
contentResource: [traversal],
choice: [traversal],
range: [traversal],
service: [traversal],
geoJson: [traversal],
specificResource: [traversal],
agent: [traversal]
});
}
traverseDescriptive(resource) {
if (resource.thumbnail) {
resource.thumbnail = ensureArray(resource.thumbnail).map(
(thumbnail) => this.traverseType(thumbnail, { parent: resource }, this.traversals.contentResource)
);
}
if (resource.provider) {
resource.provider = resource.provider.map((agent) => this.traverseAgent(agent, resource));
}
return resource;
}
traverseLinking(resource) {
if (resource.seeAlso) {
resource.seeAlso = resource.seeAlso.map(
(content) => this.traverseType(content, { parent: resource }, this.traversals.contentResource)
);
}
if (resource.service) {
resource.service = ensureArray(resource.service).map((service) => this.traverseService(service));
}
if (resource.services) {
resource.services = ensureArray(resource.services).map((service) => this.traverseService(service, resource));
}
if (resource.logo) {
resource.logo = resource.logo.map(
(content) => this.traverseType(content, { parent: resource }, this.traversals.contentResource)
);
}
if (resource.homepage) {
resource.homepage = resource.homepage.map(
(homepage) => this.traverseType(homepage, { parent: resource }, this.traversals.contentResource)
);
}
if (resource.partOf) {
resource.partOf = resource.partOf.map((partOf) => {
if (typeof partOf === "string" || !partOf.type) {
return this.traverseType(partOf, { parent: resource }, this.traversals.contentResource);
}
if (partOf.type === "Canvas") {
return this.traverseType(partOf, { parent: resource }, this.traversals.canvas);
}
if (partOf.type === "AnnotationCollection") {
return this.traverseType(
partOf,
{ parent: resource },
this.traversals.annotationCollection
);
}
if (partOf.type === "Collection") {
return this.traverseType(partOf, { parent: resource }, this.traversals.collection);
}
return this.traverseType(partOf, { parent: resource }, this.traversals.contentResource);
});
}
if (resource.start) {
if (isSpecificResource(resource.start)) {
resource.start = this.traverseSpecificResource(resource.start, "Canvas", resource);
} else {
resource.start = this.traverseType(resource.start, { parent: resource }, this.traversals.canvas);
}
}
if (resource.rendering) {
resource.rendering = resource.rendering.map(
(content) => this.traverseType(content, { parent: resource }, this.traversals.contentResource)
);
}
if (resource.supplementary) {
resource.supplementary = resource.supplementary.map(
(content) => this.traverseType(content, { parent: resource }, this.traversals.contentResource)
);
}
return resource;
}
traverseCollectionItems(collection) {
if (collection.items) {
collection.items.map((collectionOrManifest) => {
if (collectionOrManifest.type === "Collection") {
return this.traverseCollection(collectionOrManifest);
}
return this.traverseManifest(collectionOrManifest);
});
}
return collection;
}
traverseCollection(collection, parent) {
return this.traverseType(
this.traverseDescriptive(
this.traverseInlineAnnotationPages(
this.traverseLinking(this.traverseLinkedCanvases(this.traverseCollectionItems(collection)))
)
),
{ parent },
this.traversals.collection
);
}
traverseGeoJson(geoJson, parent) {
return this.traverseType(geoJson, { parent }, this.traversals.geoJson);
}
traverseNavPlace(resource) {
if (resource.navPlace) {
resource.navPlace = this.traverseGeoJson(resource.navPlace, resource);
}
return resource;
}
traverseManifestItems(manifest) {
if (manifest.items) {
manifest.items = manifest.items.map((canvas) => this.traverseCanvas(canvas));
}
return manifest;
}
traverseManifestStructures(manifest) {
if (manifest.structures) {
manifest.structures = manifest.structures.map((range) => this.traverseRange(range));
}
return manifest;
}
traverseManifest(manifest, parent) {
return this.traverseType(this._traverseManifest(manifest), { parent }, this.traversals.manifest);
}
traverseCanvasItems(canvas) {
canvas.items = (canvas.items || []).map((annotationPage) => {
return this.traverseAnnotationPage(annotationPage, canvas);
});
return canvas;
}
traverseInlineAnnotationPages(resource) {
if (typeof resource === "string" || !resource) {
return resource;
}
if (resource.annotations) {
resource.annotations = resource.annotations.map((annotationPage) => {
return this.traverseAnnotationPage(annotationPage, resource);
});
}
return resource;
}
traverseCanvas(canvas, parent) {
return this.traverseType(this._traverseCanvas(canvas), { parent }, this.traversals.canvas);
}
traverseAnnotationPageItems(annotationPage) {
if (annotationPage.items) {
annotationPage.items = annotationPage.items.map((annotation) => {
return this.traverseAnnotation(annotation, annotationPage);
});
}
return annotationPage;
}
traverseAnnotationPage(annotationPageJson, parent) {
return this.traverseType(
this._traverseAnnotationPage(annotationPageJson),
{ parent },
this.traversals.annotationPage
);
}
traverseAnnotationBody(annotation) {
if (Array.isArray(annotation.body)) {
annotation.body = annotation.body.map((annotationBody) => {
return this.traverseContentResource(annotationBody, annotation);
});
} else if (annotation.body) {
annotation.body = this.traverseContentResource(annotation.body, annotation);
}
return annotation;
}
traverseLinkedCanvases(json) {
if (json.placeholderCanvas) {
json.placeholderCanvas = this.traverseCanvas(json.placeholderCanvas);
}
if (json.accompanyingCanvas) {
json.accompanyingCanvas = this.traverseCanvas(json.accompanyingCanvas);
}
return json;
}
traverseAnnotation(annotationJson, parent) {
return this.traverseType(
this.traverseLinking(this.traverseAnnotationBody(this.traverseDescriptive(annotationJson))),
{ parent },
this.traversals.annotation
);
}
traverseContentResourceLinking(contentResourceJson) {
if (typeof contentResourceJson === "string" || !contentResourceJson) {
return contentResourceJson;
}
if (contentResourceJson && contentResourceJson.service) {
contentResourceJson.service = ensureArray(
contentResourceJson.service || []
).map((service) => this.traverseService(service, contentResourceJson));
}
return contentResourceJson;
}
traverseContentResource(contentResourceJson, parent) {
if (contentResourceJson.type === "Choice") {
contentResourceJson.items = contentResourceJson.items.map((choiceItem) => {
return this.traverseContentResource(choiceItem, contentResourceJson);
});
}
if (isSpecificResource(contentResourceJson)) {
return this.traverseSpecificResource(contentResourceJson, "ContentResource");
}
return this.traverseType(
this.traverseInlineAnnotationPages(this.traverseContentResourceLinking(contentResourceJson)),
{ parent },
this.traversals.contentResource
);
}
traverseSpecificResource(specificResource, typeHint, parent) {
let source = specificResource.source;
if (typeof specificResource.source === "string") {
source = { id: specificResource.source, type: typeHint || "unknown" };
}
return this.traverseType(
{
...specificResource,
source: typeHint === "Canvas" || source.type === "Canvas" ? this.traverseType(source, { parent }, this.traversals.canvas) : typeHint === "ContentResource" ? this.traverseContentResource(source, { parent }) : this.traverseUnknown(source, { parent, typeHint })
},
{ parent },
this.traversals.specificResource
);
}
traverseRangeRanges(range) {
if (range.items) {
range.items = range.items.map((rangeOrManifest) => {
if (typeof rangeOrManifest === "string") {
return this.traverseCanvas({ id: rangeOrManifest, type: "Canvas" }, range);
}
if (isSpecificResource(rangeOrManifest)) {
return this.traverseSpecificResource(rangeOrManifest, "Canvas", range);
}
if (rangeOrManifest.type === "Manifest") {
return this.traverseManifest(rangeOrManifest, range);
}
return this.traverseRange(rangeOrManifest, range);
});
}
return range;
}
traverseRange(range, parent) {
return this.traverseType(this._traverseRange(range), { parent }, this.traversals.range);
}
traverseAgent(agent, parent) {
return this.traverseType(
this.traverseDescriptive(this.traverseLinking(agent)),
{ parent },
this.traversals.agent
);
}
traverseType(object, context, traversals) {
return traversals.reduce((acc, traversal) => {
const returnValue = traversal(acc, context);
if (typeof returnValue === "undefined" && !this.options.allowUndefinedReturn) {
return acc;
}
return returnValue;
}, object);
}
traverseService(service, parent) {
const _service = Object.assign({}, service);
if (_service && _service.service) {
_service.service = ensureArray(_service.service).map((innerService) => this.traverseService(innerService));
}
return this.traverseType(_service, { parent }, this.traversals.service);
}
traverseUnknown(resource, { parent, typeHint } = {}) {
const type = identifyResource(resource, typeHint);
switch (type) {
case "Collection":
return this.traverseCollection(resource, parent);
case "Manifest":
return this.traverseManifest(resource, parent);
case "Canvas":
return this.traverseCanvas(resource, parent);
case "AnnotationPage":
return this.traverseAnnotationPage(resource, parent);
case "Annotation":
return this.traverseAnnotation(resource, parent);
case "ContentResource":
return this.traverseContentResource(resource, parent);
case "Range":
return this.traverseRange(resource, parent);
case "Service":
return this.traverseService(resource, parent);
case "Agent":
return this.traverseAgent(resource, parent);
default: {
if (typeHint) {
return typeHint;
}
throw new Error(`Unknown or unsupported resource type of ${type}`);
}
}
}
}
function removeUndefinedProperties(obj) {
for (const prop in obj) {
if (typeof obj[prop] === "undefined" || obj[prop] === null) {
delete obj[prop];
}
}
return obj;
}
const validNavDate = /-?([1-9]\d{3,}|0\d{3})-(0[1-9]|1[0-2])-(0[1-9]|[12]\d|3[01])T(([01]\d|2[0-3]):[0-5]\d:[0-5]\d(\.\d+)?|(24:00:00(\.0+)?))(Z|(\+|-)((0\d|1[0-3]):[0-5]\d|14:00))?/;
const globalWarnings = { warnings: [] };
function technicalProperties(item, logging = globalWarnings) {
if (item.behavior) {
item.behavior = ensureArrayWarning(item.behavior, "behavior", logging);
}
item.width = ensureValidNumber(item.width, "width", false, logging);
item.height = ensureValidNumber(item.height, "height", false, logging);
item.duration = ensureValidNumber(item.duration, "duration", true, logging);
if (item.format && typeof item.format !== "string") {
logging.warnings.push(`"format" should be a single string`);
if (Array.isArray(item.format) && typeof item.format[0] === "string") {
item.format = item.format[0];
} else {
item.format = void 0;
}
}
return item;
}
function ensureArrayMatches(values, isValid, logging = globalWarnings) {
if (values && Array.isArray(values)) {
return values.filter((value) => {
const message = isValid(value);
if (message && logging.warnings.indexOf(message) === -1) {
logging.warnings.push(message);
}
return !message;
});
}
return values;
}
function ensureArrayWarning(value, propName, logging = globalWarnings) {
if (Array.isArray(value)) {
return value;
}
logging.warnings.push(`"${propName}" should be Array of values`);
return [value];
}
function ensureNotArrayWarning(value, propName, logging = globalWarnings) {
if (Array.isArray(value)) {
logging.warnings.push(`"${propName}" should only contain a single value`);
if (value.length === 0) {
return void 0;
}
return value[0];
}
return value;
}
function ensureValidNumber(value, propName, isFloat = false, logging = globalWarnings) {
if (typeof value === "undefined") {
return void 0;
}
if (typeof value === "string") {
const newValue = isFloat ? parseFloat(value) : Math.abs(Number(value));
if (Number.isNaN(newValue) || newValue <= 0) {
logging.warnings.push(
`"${propName}" expected value to be a ${isFloat ? "Number" : "Integer"}, instead found an invalid value`
);
return void 0;
}
logging.warnings.push(
`"${propName}" expected value to be a ${isFloat ? "Number" : "Integer"}, instead found a string`
);
return newValue;
}
if (!isFloat && value % 1 !== 0) {
logging.warnings.push(`"${propName}" expected value to be a Integer, instead found a Float`);
return Math.floor(value);
}
return value;
}
function ensureValidLanguageMap(str, propName, logging = globalWarnings) {
if (Array.isArray(str)) {
if (typeof str[0] === "string") {
logging.warnings.push(`"${propName}" should be a language map instead found a string`);
return { none: str };
}
logging.warnings.push(`"${propName}" should be a language map instead found an unknown value`);
return { none: [""] };
}
if (typeof str === "string") {
logging.warnings.push(`"${propName}" should be a language map instead found a string`);
return { none: [str] };
}
const keys = Object.keys(str);
const fixed = {};
let didFix = false;
for (const key of keys) {
const values = str[key];
const fixedItem = [];
if (typeof values === "string") {
didFix = true;
logging.warnings.push(`"${propName}" values inside a language map should be an Array of strings, found a string`);
fixedItem.push(values);
} else if (Array.isArray(values)) {
for (const str2 of values) {
if (!(typeof str2 === "string")) {
didFix = true;
logging.warnings.push(
`"${propName}" values inside a language map should be an Array of strings, found an unknown value`
);
} else {
fixedItem.push(str2);
}
}
} else {
didFix = true;
logging.warnings.push(
`"${propName}" values inside a language map should be an Array of strings, found an unknown value`
);
}
if (fixedItem.length > 0) {
fixed[key] = fixedItem;
}
}
if (didFix) {
if (Object.keys(fixed).length === 0) {
return { none: [""] };
}
return fixed;
}
return str;
}
function validMetadataValue(input, propName, defaultLabel = "", logging = globalWarnings) {
if (typeof input === "string") {
logging.warnings.push(`"${propName}" should be a {label, value} set of Language maps`);
return {
label: { none: [defaultLabel] },
value: { none: [input] }
};
} else {
if (!input.label && input.value || input.label && !input.value) {
logging.warnings.push(`"${propName}" should have both a label and a value`);
}
if (input.label) {
input.label = ensureValidLanguageMap(input.label, `${propName}.label`, logging);
} else {
input.label = { none: [defaultLabel] };
}
if (input.value) {
input.value = ensureValidLanguageMap(input.value, `${propName}.value`, logging);
} else {
input.value = { none: [""] };
}
}
return input;
}
function descriptiveProperties(item, logging = globalWarnings) {
var _a, _b;
if (item.label) {
item.label = ensureValidLanguageMap(item.label, "label", logging);
}
if (item.summary) {
item.summary = ensureValidLanguageMap(item.summary, "summary", logging);
}
if (item.requiredStatement) {
item.requiredStatement = validMetadataValue(
item.requiredStatement,
"requiredStatement",
"Required statement",
logging
);
}
if (item.metadata) {
if (Array.isArray(item.metadata)) {
for (let i = 0; i < item.metadata.length; i++) {
item.metadata[i] = validMetadataValue(item.metadata[i], `metadata.${i}`, "", logging);
}
} else {
logging.warnings.push(`"metadata" should be an array of {label, value} Language maps`);
item.metadata = [];
}
}
if (item.rights) {
if (Array.isArray(item.rights)) {
logging.warnings.push(`"rights" should only contain a single string`);
item.rights = typeof item.rights[0] === "string" ? item.rights[0] : "";
}
if (typeof item.rights === "string" && !item.rights.startsWith("http")) {
logging.warnings.push(`"rights" should be a valid URI`);
} else if (typeof item.rights === "string" && item.rights.startsWith("https")) {
logging.warnings.push(
`"rights" is an informative property and should contain the http variation of the rights statement`
);
item.rights = `http${item.rights.slice(5)}`;
}
}
if (item.navDate) {
const trimmedNavDate = typeof item.navDate === "string" ? item.navDate.trim() : void 0;
if (trimmedNavDate !== item.navDate) {
logging.warnings.push(`"navDate" should not contain extra whitespace`);
item.navDate = trimmedNavDate;
}
if (typeof item.navDate !== "string" || !item.navDate.match(validNavDate)) {
logging.warnings.push(`"navDate" should be a valid XSD dateTime literal`);
item.navDate = void 0;
}
}
if (item.language) {
item.language = ensureArrayWarning(item.language, "language", logging);
item.language = ensureArrayMatches(
item.language,
(value) => typeof value === "string" ? void 0 : `'"language" expected array of strings`,
logging
);
}
if (item.accompanyingCanvas) {
item.accompanyingCanvas = ensureNotArrayWarning(item.accompanyingCanvas, "accompanyingCanvas", logging);
if (((_a = item.accompanyingCanvas) == null ? void 0 : _a.type) !== "Canvas") {
logging.warnings.push(`"accompanyingCanvas" should be a Canvas`);
}
}
if (item.placeholderCanvas) {
item.placeholderCanvas = ensureNotArrayWarning(item.placeholderCanvas, "placeholderCanvas", logging);
if (((_b = item.placeholderCanvas) == null ? void 0 : _b.type) !== "Canvas") {
logging.warnings.push(`"placeholderCanvas" should be a Canvas`);
}
}
if (item.thumbnail) {
item.thumbnail = ensureArrayWarning(item.thumbnail, "thumbnail", logging);
}
return item;
}
const validItemMapping = {
Manifest: "Canvas",
Canvas: "AnnotationPage",
AnnotationPage: "Annotation"
};
function structuralProperties(resource, logging = globalWarnings) {
const type = resource.type;
switch (type) {
case "Canvas":
case "AnnotationPage":
case "Manifest": {
if (resource && resource.items) {
resource.items = ensureArrayMatches(
resource.items,
(item) => item.type === validItemMapping[type] ? void 0 : `"${resource.type}.items" should contain only type ${validItemMapping[type]}, found ${item.type}`,
logging
);
}
}
}
return resource;
}
function linkingProperties(item, logging = globalWarnings) {
if (item.logo) {
item.logo = ensureArrayWarning(item.logo, "logo", logging);
}
if (item.service) {
item.service = ensureArrayWarning(item.service, "service", logging);
}
if (item.seeAlso) {
item.seeAlso = ensureArrayWarning(item.seeAlso, "seeAlso", logging);
}
if (item.rendering) {
item.rendering = ensureArrayWarning(item.rendering, "rendering", logging);
}
if (item.partOf) {
item.partOf = ensureArrayWarning(item.partOf, "partOf", logging);
}
if (item.homepage) {
item.homepage = ensureArrayWarning(item.homepage, "homepage", logging);
}
if (item.services) {
item.services = ensureArrayWarning(item.services, "services", logging);
}
if (item.supplementary) {
item.supplementary = ensureArrayWarning(item.supplementary, "supplementary", logging);
}
if (item.start) {
item.start = ensureNotArrayWarning(item.start, "start", logging);
}
return item;
}
function upgradeResource(state) {
return (resource) => {
if (!resource) {
return void 0;
}
if (typeof resource === "string") {
return resource;
}
if (Array.isArray(resource)) {
return resource;
}
return removeUndefinedProperties({
...resource,
...technicalProperties(resource, state),
...descriptiveProperties(resource, state),
...linkingProperties(resource, state),
...structuralProperties(resource, state)
});
};
}
function presentation3StrictUpgrade(p3, state = globalWarnings) {
const traverse = Traverse.all(upgradeResource(state));
return traverse.traverseManifest(p3);
}
export {
presentation3StrictUpgrade
};
//# sourceMappingURL=index.mjs.map
{"version":3,"file":"index.mjs","sources":["../../../src/shared/is-specific-resource.ts","../../../src/shared/ensure-array.ts","../../../src/shared/compose.ts","../../../src/presentation-3/traverse.ts","../../../src/shared/remove-undefined-properties.ts","../../../src/presentation-3/strict-upgrade.ts"],"sourcesContent":["import { SpecificResource } from '@iiif/presentation-3';\n\nexport function isSpecificResource(resource: unknown): resource is SpecificResource {\n\n if (typeof resource === 'string') {\n return false;\n }\n\n return !!resource && (resource as any).type === 'SpecificResource';\n}\n","export function ensureArray<T>(maybeArray: T | T[]): T[] {\n if (Array.isArray(maybeArray)) {\n return maybeArray;\n }\n return maybeArray ? [maybeArray] : [];\n}\n","export function compose<T, B = T>(...fns: any[]): (input: T) => T {\n return <B>(arg: any) => fns.reduce((a, f) => f(a), arg) as any as T;\n}\n","import {\n Annotation,\n AnnotationCollection,\n AnnotationPage,\n Canvas,\n ChoiceBody,\n ChoiceTarget,\n Collection,\n ContentResource,\n DescriptiveProperties,\n IIIFExternalWebResource,\n LinkingProperties,\n Manifest,\n Range,\n RangeItems,\n Required,\n Service,\n SpecificResource,\n ResourceProvider,\n StructuralProperties,\n} from '@iiif/presentation-3';\nimport { isSpecificResource } from '../shared/is-specific-resource';\nimport { ensureArray } from '../shared/ensure-array';\nimport { compose } from '../shared/compose';\n\nexport const types = [\n 'Collection',\n 'Manifest',\n 'Canvas',\n 'AnnotationPage',\n 'AnnotationCollection',\n 'Annotation',\n 'ContentResource',\n 'Range',\n 'Service',\n 'Selector',\n 'Agent',\n];\n\nexport type TraversalContext = { parent?: any };\n\nexport type Traversal<T> = (jsonLd: T, context: TraversalContext) => Partial<T> | any;\n\nexport type TraversalMap = {\n collection?: Array<Traversal<Collection>>;\n manifest?: Array<Traversal<Manifest>>;\n canvas?: Array<Traversal<Canvas>>;\n annotationCollection?: Array<Traversal<AnnotationCollection>>;\n annotationPage?: Array<Traversal<AnnotationPage>>;\n annotation?: Array<Traversal<Annotation>>;\n contentResource?: Array<Traversal<ContentResource>>;\n choice?: Array<Traversal<ChoiceTarget | ChoiceBody>>;\n range?: Array<Traversal<Range>>;\n service?: Array<Traversal<Service>>;\n agent?: Array<Traversal<ResourceProvider>>;\n specificResource?: Array<Traversal<SpecificResource>>;\n geoJson?: Array<Traversal<import('geojson').GeoJSON>>;\n};\n\nexport type TraverseOptions = {\n allowUndefinedReturn: boolean;\n};\n\nexport function identifyResource(resource: any, typeHint?: string): string {\n if (typeof resource === 'undefined' || resource === null) {\n throw new Error('Null or undefined is not a valid entity.');\n }\n if (Array.isArray(resource)) {\n throw new Error('Array is not a valid entity');\n }\n if (typeof resource !== 'object') {\n if (typeHint) {\n return typeHint;\n }\n throw new Error(`${typeof resource} is not a valid entity`);\n }\n\n if (typeof resource!.type === 'string') {\n const hasType = types.indexOf(resource.type);\n if (hasType !== -1) {\n return types[hasType];\n }\n }\n\n if (resource!.profile) {\n return 'Service';\n }\n\n throw new Error('Resource type is not known');\n}\n\nexport class Traverse {\n private traversals: Required<TraversalMap>;\n\n private options: TraverseOptions;\n\n constructor(traversals: TraversalMap, options: Partial<TraverseOptions> = {}) {\n this.traversals = {\n collection: [],\n manifest: [],\n canvas: [],\n annotationCollection: [],\n annotationPage: [],\n annotation: [],\n contentResource: [],\n choice: [],\n range: [],\n service: [],\n agent: [],\n specificResource: [],\n geoJson: [],\n ...traversals,\n };\n this.options = {\n allowUndefinedReturn: false,\n ...options,\n };\n }\n\n static all(traversal: (resource: any) => any) {\n return new Traverse({\n collection: [traversal],\n manifest: [traversal],\n canvas: [traversal],\n annotationCollection: [traversal],\n annotationPage: [traversal],\n annotation: [traversal],\n contentResource: [traversal],\n choice: [traversal],\n range: [traversal],\n service: [traversal],\n geoJson: [traversal],\n specificResource: [traversal],\n agent: [traversal],\n });\n }\n\n traverseDescriptive<T extends Partial<DescriptiveProperties>>(resource: T): T {\n if (resource.thumbnail) {\n resource.thumbnail = ensureArray(resource.thumbnail).map((thumbnail) =>\n this.traverseType(thumbnail, { parent: resource }, this.traversals.contentResource)\n );\n }\n if (resource.provider) {\n resource.provider = resource.provider.map((agent) => this.traverseAgent(agent, resource));\n }\n return resource;\n }\n\n traverseLinking<T extends Partial<LinkingProperties>>(resource: T): T {\n if (resource.seeAlso) {\n resource.seeAlso = resource.seeAlso.map((content) =>\n this.traverseType(content, { parent: resource }, this.traversals.contentResource)\n );\n }\n if (resource.service) {\n resource.service = ensureArray(resource.service).map((service) => this.traverseService(service));\n }\n if (resource.services) {\n resource.services = ensureArray(resource.services).map((service) => this.traverseService(service, resource));\n }\n if (resource.logo) {\n resource.logo = resource.logo.map((content) =>\n this.traverseType(content, { parent: resource }, this.traversals.contentResource)\n );\n }\n if (resource.homepage) {\n resource.homepage = resource.homepage.map((homepage) =>\n this.traverseType(homepage, { parent: resource }, this.traversals.contentResource)\n );\n }\n if (resource.partOf) {\n // Array<ContentResource | Canvas | AnnotationCollection>\n (resource as any).partOf = resource.partOf.map((partOf) => {\n if (typeof partOf === 'string' || !partOf.type) {\n return this.traverseType(partOf as ContentResource, { parent: resource }, this.traversals.contentResource);\n }\n if (partOf.type === 'Canvas') {\n return this.traverseType(partOf as Canvas, { parent: resource }, this.traversals.canvas);\n }\n if (partOf.type === 'AnnotationCollection') {\n return this.traverseType(\n partOf as AnnotationCollection,\n { parent: resource },\n this.traversals.annotationCollection\n );\n }\n if (partOf.type === 'Collection') {\n return this.traverseType(partOf as Collection, { parent: resource }, this.traversals.collection);\n }\n return this.traverseType(partOf as ContentResource, { parent: resource }, this.traversals.contentResource);\n });\n }\n if (resource.start) {\n if (isSpecificResource(resource.start)) {\n resource.start = this.traverseSpecificResource(resource.start, 'Canvas', resource) as any;\n } else {\n // The spec says this can be a \"partial canvas\" causing errors with the types.\n resource.start = this.traverseType(resource.start as any, { parent: resource }, this.traversals.canvas);\n }\n }\n if (resource.rendering) {\n resource.rendering = resource.rendering.map((content) =>\n this.traverseType(content, { parent: resource }, this.traversals.contentResource)\n );\n }\n if (resource.supplementary) {\n resource.supplementary = resource.supplementary.map((content) =>\n this.traverseType(content, { parent: resource }, this.traversals.contentResource)\n );\n }\n\n return resource;\n }\n\n traverseCollectionItems<T extends StructuralProperties<any>>(collection: T): T {\n if (collection.items) {\n collection.items.map((collectionOrManifest: Manifest | Collection) => {\n if (collectionOrManifest.type === 'Collection') {\n return this.traverseCollection(collectionOrManifest as Collection);\n }\n return this.traverseManifest(collectionOrManifest as Manifest);\n });\n }\n\n return collection;\n }\n\n traverseCollection(collection: Collection, parent?: any): Collection {\n return this.traverseType<Collection>(\n this.traverseDescriptive(\n this.traverseInlineAnnotationPages(\n this.traverseLinking(this.traverseLinkedCanvases(this.traverseCollectionItems(collection as any)))\n )\n ),\n { parent },\n this.traversals.collection\n );\n }\n\n traverseGeoJson(geoJson: import('geojson').GeoJSON, parent?: any): import('geojson').GeoJSON {\n return this.traverseType<import('geojson').GeoJSON>(geoJson, { parent }, this.traversals.geoJson);\n }\n\n traverseNavPlace(resource: any /*NavPlaceExtension*/) {\n if (resource.navPlace) {\n resource.navPlace = this.traverseGeoJson(resource.navPlace, resource);\n }\n return resource;\n }\n\n traverseManifestItems(manifest: Manifest): Manifest {\n if (manifest.items) {\n manifest.items = manifest.items.map((canvas) => this.traverseCanvas(canvas));\n }\n return manifest;\n }\n\n traverseManifestStructures(manifest: Manifest): Manifest {\n if (manifest.structures) {\n manifest.structures = manifest.structures.map((range) => this.traverseRange(range));\n }\n return manifest;\n }\n\n _traverseManifest = compose<Manifest>(\n this.traverseManifestItems.bind(this),\n this.traverseLinking.bind(this),\n this.traverseDescriptive.bind(this),\n this.traverseLinkedCanvases.bind(this),\n this.traverseManifestStructures.bind(this),\n this.traverseInlineAnnotationPages.bind(this)\n );\n\n traverseManifest(manifest: Manifest, parent?: any): Manifest {\n return this.traverseType<Manifest>(this._traverseManifest(manifest), { parent }, this.traversals.manifest);\n }\n\n traverseCanvasItems(canvas: Canvas): Canvas {\n canvas.items = (canvas.items || []).map((annotationPage: AnnotationPage): AnnotationPage => {\n return this.traverseAnnotationPage(annotationPage, canvas);\n });\n\n return canvas;\n }\n\n traverseInlineAnnotationPages<T extends Manifest | Canvas | Range | string>(resource: T): T {\n if (typeof resource === 'string' || !resource) {\n return resource;\n }\n if (resource.annotations) {\n resource.annotations = resource.annotations.map((annotationPage: AnnotationPage): AnnotationPage => {\n return this.traverseAnnotationPage(annotationPage, resource);\n });\n }\n\n return resource;\n }\n\n _traverseCanvas = compose<Canvas>(\n this.traverseCanvasItems.bind(this),\n this.traverseLinking.bind(this),\n this.traverseDescriptive.bind(this),\n this.traverseLinkedCanvases.bind(this),\n this.traverseInlineAnnotationPages.bind(this)\n );\n\n traverseCanvas(canvas: Canvas, parent?: any): Canvas {\n return this.traverseType<Canvas>(this._traverseCanvas(canvas), { parent }, this.traversals.canvas);\n }\n\n traverseAnnotationPageItems(annotationPage: AnnotationPage): AnnotationPage {\n if (annotationPage.items) {\n annotationPage.items = annotationPage.items.map((annotation: Annotation): Annotation => {\n return this.traverseAnnotation(annotation, annotationPage);\n });\n }\n return annotationPage;\n }\n\n _traverseAnnotationPage = compose<AnnotationPage>(\n this.traverseAnnotationPageItems.bind(this),\n this.traverseLinking.bind(this),\n this.traverseDescriptive.bind(this)\n );\n\n traverseAnnotationPage(annotationPageJson: AnnotationPage, parent?: any): AnnotationPage {\n return this.traverseType<AnnotationPage>(\n this._traverseAnnotationPage(annotationPageJson),\n { parent },\n this.traversals.annotationPage\n );\n }\n\n // Disabling these.\n\n traverseAnnotationBody(annotation: Annotation): Annotation {\n if (Array.isArray(annotation.body)) {\n annotation.body = annotation.body.map((annotationBody: any): ContentResource => {\n return this.traverseContentResource(annotationBody, annotation);\n });\n } else if (annotation.body) {\n annotation.body = this.traverseContentResource(annotation.body as ContentResource, annotation);\n }\n\n return annotation;\n }\n\n traverseLinkedCanvases<T extends { placeholderCanvas?: any; accompanyingCanvas?: any }>(json: T): T {\n if (json.placeholderCanvas) {\n json.placeholderCanvas = this.traverseCanvas(json.placeholderCanvas);\n }\n\n if (json.accompanyingCanvas) {\n json.accompanyingCanvas = this.traverseCanvas(json.accompanyingCanvas);\n }\n\n return json;\n }\n\n // @todo traverseAnnotationSelector\n traverseAnnotation(annotationJson: Annotation, parent?: any): Annotation {\n return this.traverseType<Annotation>(\n this.traverseLinking(this.traverseAnnotationBody(this.traverseDescriptive(annotationJson as any))),\n { parent },\n this.traversals.annotation\n );\n }\n\n traverseContentResourceLinking(contentResourceJson: ContentResource): ContentResource {\n if (typeof contentResourceJson === 'string' || !contentResourceJson) {\n return contentResourceJson;\n }\n if (contentResourceJson && (contentResourceJson as IIIFExternalWebResource)!.service) {\n (contentResourceJson as IIIFExternalWebResource).service = ensureArray(\n (contentResourceJson as IIIFExternalWebResource).service || []\n ).map((service) => this.traverseService(service, contentResourceJson));\n }\n\n return contentResourceJson;\n }\n\n traverseContentResource(contentResourceJson: ContentResource, parent?: any): ContentResource {\n if ((contentResourceJson as any).type === 'Choice') {\n (contentResourceJson as any).items = (contentResourceJson as any).items.map((choiceItem: ContentResource) => {\n return this.traverseContentResource(choiceItem, contentResourceJson);\n });\n }\n\n if (isSpecificResource(contentResourceJson)) {\n return this.traverseSpecificResource(contentResourceJson, 'ContentResource');\n }\n\n return this.traverseType<ContentResource>(\n // This needs an `any` because of the scope of W3C annotation bodies (covered by ContentResource).\n // ContentResources are permitted to have a `.annotations` property, so we can pass it as any for this\n // case.\n this.traverseInlineAnnotationPages(this.traverseContentResourceLinking(contentResourceJson) as any),\n { parent },\n this.traversals.contentResource\n );\n }\n\n traverseSpecificResource(specificResource: SpecificResource, typeHint?: string, parent?: any): SpecificResource {\n let source = specificResource.source;\n if (typeof specificResource.source === 'string') {\n source = { id: specificResource.source, type: typeHint || 'unknown' };\n }\n\n return this.traverseType<SpecificResource>(\n {\n ...specificResource,\n source:\n typeHint === 'Canvas' || source.type === 'Canvas'\n ? this.traverseType(source, { parent }, this.traversals.canvas)\n : typeHint === 'ContentResource'\n ? this.traverseContentResource(source, { parent })\n : this.traverseUnknown(source, { parent, typeHint }),\n },\n { parent },\n this.traversals.specificResource\n );\n }\n\n traverseRangeRanges(range: Range): Range {\n if (range.items) {\n range.items = range.items.map((rangeOrManifest: RangeItems) => {\n if (typeof rangeOrManifest === 'string') {\n return this.traverseCanvas({ id: rangeOrManifest, type: 'Canvas' }, range);\n }\n if (isSpecificResource(rangeOrManifest)) {\n return this.traverseSpecificResource(rangeOrManifest, 'Canvas', range);\n }\n // This is a non-standard case.\n if ((rangeOrManifest as any).type === 'Manifest') {\n return this.traverseManifest(rangeOrManifest as any, range) as any as RangeItems;\n }\n return this.traverseRange(rangeOrManifest as Range, range);\n });\n }\n\n return range;\n }\n\n _traverseRange = compose<Range>(\n this.traverseRangeRanges.bind(this),\n this.traverseLinking.bind(this),\n this.traverseDescriptive.bind(this),\n this.traverseLinkedCanvases.bind(this)\n );\n\n traverseRange(range: Range, parent?: any): Range {\n return this.traverseType<Range>(this._traverseRange(range), { parent }, this.traversals.range);\n }\n\n traverseAgent(agent: ResourceProvider, parent?: any) {\n return this.traverseType<ResourceProvider>(\n this.traverseDescriptive(this.traverseLinking(agent)),\n { parent },\n this.traversals.agent\n );\n }\n\n traverseType<T>(object: T, context: TraversalContext, traversals: Array<Traversal<T>>): T {\n return traversals.reduce((acc: T, traversal: Traversal<T>): T => {\n const returnValue = traversal(acc, context);\n if (typeof returnValue === 'undefined' && !this.options.allowUndefinedReturn) {\n return acc;\n }\n return returnValue;\n }, object);\n }\n\n traverseService(service: Service, parent?: any): Service {\n const _service: any = Object.assign({}, service);\n if (_service && _service.service) {\n _service.service = ensureArray(_service.service).map((innerService: any) => this.traverseService(innerService));\n }\n return this.traverseType<Service>(_service, { parent }, this.traversals.service);\n }\n\n traverseUnknown(resource: any, { parent, typeHint }: { typeHint?: string; parent?: any } = {}) {\n const type = identifyResource(resource, typeHint);\n\n switch (type) {\n case 'Collection':\n return this.traverseCollection(resource as Collection, parent);\n case 'Manifest':\n return this.traverseManifest(resource as Manifest, parent);\n case 'Canvas':\n return this.traverseCanvas(resource as Canvas, parent);\n case 'AnnotationPage':\n return this.traverseAnnotationPage(resource as AnnotationPage, parent);\n case 'Annotation':\n return this.traverseAnnotation(resource as Annotation, parent);\n case 'ContentResource':\n return this.traverseContentResource(resource as ContentResource, parent);\n case 'Range':\n return this.traverseRange(resource as Range, parent);\n case 'Service':\n return this.traverseService(resource as Service, parent);\n case 'Agent':\n return this.traverseAgent(resource as ResourceProvider, parent);\n default: {\n if (typeHint) {\n return typeHint;\n }\n throw new Error(`Unknown or unsupported resource type of ${type}`);\n }\n }\n }\n}\n","export function removeUndefinedProperties(obj: any) {\n for (const prop in obj) {\n if (typeof obj[prop] === 'undefined' || obj[prop] === null) {\n delete obj[prop];\n }\n }\n return obj;\n}\n","import * as Presentation3 from '@iiif/presentation-3';\nimport { Traverse } from './traverse';\nimport { removeUndefinedProperties } from '../shared/remove-undefined-properties';\n\nconst validNavDate =\n /-?([1-9]\\d{3,}|0\\d{3})-(0[1-9]|1[0-2])-(0[1-9]|[12]\\d|3[01])T(([01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(\\.\\d+)?|(24:00:00(\\.0+)?))(Z|(\\+|-)((0\\d|1[0-3]):[0-5]\\d|14:00))?/;\n\ninterface InternalLogging {\n warnings: string[];\n}\n\nconst globalWarnings = { warnings: [] };\n\nfunction technicalProperties(\n item: Partial<Presentation3.TechnicalProperties>,\n logging: InternalLogging = globalWarnings\n): Partial<Presentation3.TechnicalProperties> {\n if (item.behavior) {\n item.behavior = ensureArrayWarning(item.behavior, 'behavior', logging);\n }\n\n item.width = ensureValidNumber(item.width, 'width', false, logging);\n item.height = ensureValidNumber(item.height, 'height', false, logging);\n item.duration = ensureValidNumber(item.duration, 'duration', true, logging);\n\n if (item.format && typeof item.format !== 'string') {\n logging.warnings.push(`\"format\" should be a single string`);\n if (Array.isArray(item.format) && typeof item.format[0] === 'string') {\n item.format = item.format[0];\n } else {\n item.format = undefined;\n }\n }\n\n return item;\n}\n\nfunction ensureArrayMatches(\n values: Array<any> | undefined,\n isValid: (value: any) => string | undefined,\n logging: InternalLogging = globalWarnings\n) {\n if (values && Array.isArray(values)) {\n return values.filter((value) => {\n const message = isValid(value);\n if (message && logging.warnings.indexOf(message) === -1) {\n logging.warnings.push(message);\n }\n return !message;\n });\n }\n return values;\n}\n\nfunction ensureArrayWarning(value: any, propName: string, logging: InternalLogging = globalWarnings) {\n if (Array.isArray(value)) {\n return value;\n }\n logging.warnings.push(`\"${propName}\" should be Array of values`);\n return [value];\n}\n\nfunction ensureNotArrayWarning(value: any, propName: string, logging: InternalLogging = globalWarnings) {\n if (Array.isArray(value)) {\n logging.warnings.push(`\"${propName}\" should only contain a single value`);\n if (value.length === 0) {\n return undefined;\n }\n return value[0];\n }\n return value;\n}\n\nfunction ensureValidNumber(\n value: undefined | string | number,\n propName: string,\n isFloat = false,\n logging: InternalLogging = globalWarnings\n): number | undefined {\n if (typeof value === 'undefined') {\n return undefined;\n }\n\n if (typeof value === 'string') {\n const newValue = isFloat ? parseFloat(value) : Math.abs(Number(value));\n if (Number.isNaN(newValue) || newValue <= 0) {\n logging.warnings.push(\n `\"${propName}\" expected value to be a ${isFloat ? 'Number' : 'Integer'}, instead found an invalid value`\n );\n return undefined;\n }\n logging.warnings.push(\n `\"${propName}\" expected value to be a ${isFloat ? 'Number' : 'Integer'}, instead found a string`\n );\n return newValue;\n }\n\n if (!isFloat && value % 1 !== 0) {\n logging.warnings.push(`\"${propName}\" expected value to be a Integer, instead found a Float`);\n return Math.floor(value);\n }\n\n return value;\n}\n\nfunction ensureValidLanguageMap(\n str: Presentation3.InternationalString,\n propName: string,\n logging: InternalLogging = globalWarnings\n): Presentation3.InternationalString {\n // Handle {\"label\": [\"an array of strings\"]}\n if (Array.isArray(str)) {\n if (typeof str[0] === 'string') {\n logging.warnings.push(`\"${propName}\" should be a language map instead found a string`);\n return { none: str };\n }\n logging.warnings.push(`\"${propName}\" should be a language map instead found an unknown value`);\n return { none: [''] };\n }\n\n if (typeof str === 'string') {\n logging.warnings.push(`\"${propName}\" should be a language map instead found a string`);\n return { none: [str] };\n }\n\n // Handle {\"label\": {\"en\": \"some value\"}\n const keys = Object.keys(str);\n const fixed: Presentation3.InternationalString = {};\n let didFix = false;\n for (const key of keys) {\n const values = str[key] as unknown;\n const fixedItem = [];\n if (typeof values === 'string') {\n didFix = true;\n logging.warnings.push(`\"${propName}\" values inside a language map should be an Array of strings, found a string`);\n fixedItem.push(values);\n } else if (Array.isArray(values)) {\n for (const str of values) {\n if (!(typeof str === 'string')) {\n didFix = true;\n logging.warnings.push(\n `\"${propName}\" values inside a language map should be an Array of strings, found an unknown value`\n );\n // Nothing to do here? - but mark as needing fixed.\n } else {\n fixedItem.push(str);\n }\n }\n } else {\n didFix = true;\n logging.warnings.push(\n `\"${propName}\" values inside a language map should be an Array of strings, found an unknown value`\n );\n }\n if (fixedItem.length > 0) {\n fixed[key] = fixedItem;\n }\n }\n\n if (didFix) {\n if (Object.keys(fixed).length === 0) {\n return { none: [''] };\n }\n\n return fixed;\n }\n\n return str;\n}\n\nfunction validMetadataValue(\n input: Presentation3.MetadataItem,\n propName: string,\n defaultLabel = '',\n logging: InternalLogging = globalWarnings\n): Presentation3.MetadataItem {\n if (typeof input === 'string') {\n logging.warnings.push(`\"${propName}\" should be a {label, value} set of Language maps`);\n return {\n label: { none: [defaultLabel] },\n value: { none: [input] },\n };\n } else {\n if ((!input.label && input.value) || (input.label && !input.value)) {\n logging.warnings.push(`\"${propName}\" should have both a label and a value`);\n }\n if (input.label) {\n input.label = ensureValidLanguageMap(input.label, `${propName}.label`, logging);\n } else {\n input.label = { none: [defaultLabel] };\n }\n if (input.value) {\n input.value = ensureValidLanguageMap(input.value, `${propName}.value`, logging);\n } else {\n input.value = { none: [''] };\n }\n }\n\n return input;\n}\n\nfunction descriptiveProperties(\n item: Partial<Presentation3.DescriptiveProperties>,\n logging: InternalLogging = globalWarnings\n): Partial<Presentation3.DescriptiveProperties> {\n if (item.label) {\n item.label = ensureValidLanguageMap(item.label, 'label', logging);\n }\n if (item.summary) {\n item.summary = ensureValidLanguageMap(item.summary, 'summary', logging);\n }\n\n if (item.requiredStatement) {\n item.requiredStatement = validMetadataValue(\n item.requiredStatement,\n 'requiredStatement',\n 'Required statement',\n logging\n );\n }\n\n if (item.metadata) {\n if (Array.isArray(item.metadata)) {\n for (let i = 0; i < item.metadata.length; i++) {\n item.metadata[i] = validMetadataValue(item.metadata[i], `metadata.${i}`, '', logging);\n }\n } else {\n logging.warnings.push(`\"metadata\" should be an array of {label, value} Language maps`);\n item.metadata = [];\n }\n }\n\n if (item.rights) {\n if (Array.isArray(item.rights)) {\n logging.warnings.push(`\"rights\" should only contain a single string`);\n item.rights = typeof item.rights[0] === 'string' ? item.rights[0] : '';\n }\n if (typeof item.rights === 'string' && !item.rights.startsWith('http')) {\n logging.warnings.push(`\"rights\" should be a valid URI`);\n } else if (typeof item.rights === 'string' && item.rights.startsWith('https')) {\n logging.warnings.push(\n `\"rights\" is an informative property and should contain the http variation of the rights statement`\n );\n item.rights = `http${item.rights.slice(5)}`;\n }\n }\n\n if (item.navDate) {\n const trimmedNavDate = typeof item.navDate === 'string' ? item.navDate.trim() : undefined;\n if (trimmedNavDate !== item.navDate) {\n logging.warnings.push(`\"navDate\" should not contain extra whitespace`);\n item.navDate = trimmedNavDate;\n }\n if (typeof item.navDate !== 'string' || !item.navDate.match(validNavDate)) {\n logging.warnings.push(`\"navDate\" should be a valid XSD dateTime literal`);\n item.navDate = undefined;\n }\n }\n\n if (item.language) {\n item.language = ensureArrayWarning(item.language, 'language', logging);\n item.language = ensureArrayMatches(\n item.language,\n (value) => (typeof value === 'string' ? undefined : `'\"language\" expected array of strings`),\n logging\n );\n }\n if (item.accompanyingCanvas) {\n item.accompanyingCanvas = ensureNotArrayWarning(item.accompanyingCanvas, 'accompanyingCanvas', logging);\n if (item.accompanyingCanvas?.type !== 'Canvas') {\n logging.warnings.push(`\"accompanyingCanvas\" should be a Canvas`);\n }\n }\n if (item.placeholderCanvas) {\n item.placeholderCanvas = ensureNotArrayWarning(item.placeholderCanvas, 'placeholderCanvas', logging);\n if (item.placeholderCanvas?.type !== 'Canvas') {\n logging.warnings.push(`\"placeholderCanvas\" should be a Canvas`);\n }\n }\n if (item.thumbnail) {\n item.thumbnail = ensureArrayWarning(item.thumbnail, 'thumbnail', logging);\n }\n return item;\n}\n\nconst validItemMapping: any = {\n Manifest: 'Canvas',\n Canvas: 'AnnotationPage',\n AnnotationPage: 'Annotation',\n};\n\nfunction structuralProperties(resource: any, logging: InternalLogging = globalWarnings) {\n const type = resource.type;\n switch (type) {\n case 'Canvas':\n case 'AnnotationPage':\n case 'Manifest': {\n if (resource && resource.items) {\n resource.items = ensureArrayMatches(\n resource.items,\n (item) =>\n item.type === validItemMapping[type]\n ? undefined\n : `\"${resource.type}.items\" should contain only type ${validItemMapping[type]}, found ${item.type}`,\n logging\n );\n }\n }\n }\n\n return resource;\n}\n\nfunction linkingProperties(\n item: Partial<Presentation3.LinkingProperties>,\n logging: InternalLogging = globalWarnings\n): Partial<Presentation3.LinkingProperties> {\n if (item.logo) {\n item.logo = ensureArrayWarning(item.logo, 'logo', logging);\n }\n if (item.service) {\n item.service = ensureArrayWarning(item.service, 'service', logging);\n }\n\n if (item.seeAlso) {\n item.seeAlso = ensureArrayWarning(item.seeAlso, 'seeAlso', logging);\n }\n\n if (item.rendering) {\n item.rendering = ensureArrayWarning(item.rendering, 'rendering', logging);\n }\n\n if (item.partOf) {\n item.partOf = ensureArrayWarning(item.partOf, 'partOf', logging);\n }\n\n if (item.homepage) {\n item.homepage = ensureArrayWarning(item.homepage, 'homepage', logging);\n }\n\n if (item.services) {\n item.services = ensureArrayWarning(item.services, 'services', logging);\n }\n\n if (item.supplementary) {\n item.supplementary = ensureArrayWarning(item.supplementary, 'supplementary', logging);\n }\n\n if (item.start) {\n item.start = ensureNotArrayWarning(item.start, 'start', logging);\n }\n\n return item;\n}\n\nfunction upgradeResource(state: InternalLogging) {\n return (resource: any) => {\n if (!resource) {\n return undefined;\n }\n\n if (typeof resource === 'string') {\n return resource;\n }\n\n if (Array.isArray(resource)) {\n return resource;\n }\n\n return removeUndefinedProperties({\n ...resource,\n ...technicalProperties(resource, state),\n ...descriptiveProperties(resource, state),\n ...linkingProperties(resource, state),\n ...structuralProperties(resource, state),\n });\n };\n}\n\nexport function presentation3StrictUpgrade(\n p3: Presentation3.Manifest,\n state: InternalLogging = globalWarnings\n): Presentation3.Manifest {\n const traverse = Traverse.all(upgradeResource(state));\n\n return traverse.traverseManifest(p3);\n}\n"],"names":["str"],"mappings":"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"}
// Generated by dts-bundle-generator v6.13.0
import * as Presentation3 from '@iiif/presentation-3';
export interface InternalLogging {
warnings: string[];
}
export declare function presentation3StrictUpgrade(p3: Presentation3.Manifest, state?: InternalLogging): Presentation3.Manifest;
export {};
+1
-1

@@ -1,2 +0,2 @@

"use strict";var e=Object.defineProperty,t=(t,i,r)=>(((t,i,r)=>{i in t?e(t,i,{enumerable:!0,configurable:!0,writable:!0,value:r}):t[i]=r})(t,"symbol"!=typeof i?i+"":i,r),r);Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const i=[];Object.freeze(i);const r={id:"https://iiif-parser/annotation",type:"Annotation",behavior:i,label:null,thumbnail:i,summary:null,requiredStatement:null,metadata:i,seeAlso:i,homepage:i,logo:i,rendering:i,service:i,accessibility:i,audience:i,body:i,bodyValue:null,canonical:null,created:null,creator:i,generated:null,generator:i,modified:null,motivation:i,rights:i,stylesheet:null,target:i,timeMode:void 0,via:i,partOf:i},n={id:"https://iiif-parser/annotation-page",type:"AnnotationPage",behavior:i,motivation:null,label:null,thumbnail:i,summary:null,requiredStatement:null,metadata:i,rights:null,provider:i,items:i,seeAlso:i,homepage:i,logo:i,rendering:i,service:i},a={id:"https://iiif-parser/empty-canvas",type:"Canvas",label:null,behavior:i,motivation:null,thumbnail:i,posterCanvas:null,accompanyingCanvas:null,placeholderCanvas:null,summary:null,requiredStatement:null,metadata:i,rights:null,navDate:null,provider:i,items:i,annotations:i,seeAlso:i,homepage:i,logo:i,partOf:i,rendering:i,service:i,duration:0,height:0,width:0},s={id:"https://iiif-parser/empty-collection",type:"Collection",label:null,viewingDirection:"left-to-right",behavior:i,motivation:null,thumbnail:i,posterCanvas:null,accompanyingCanvas:null,placeholderCanvas:null,summary:null,requiredStatement:null,metadata:i,rights:null,navDate:null,provider:i,items:i,annotations:i,seeAlso:i,homepage:i,logo:i,partOf:i,rendering:i,service:i,services:i},o={id:"https://iiif-parser/empty-manifest",type:"Manifest",annotations:i,behavior:i,homepage:i,items:i,label:null,logo:i,metadata:i,motivation:null,navDate:null,provider:i,partOf:i,posterCanvas:null,accompanyingCanvas:null,placeholderCanvas:null,rendering:i,requiredStatement:null,rights:null,seeAlso:i,service:i,services:i,start:null,structures:i,summary:null,thumbnail:i,viewingDirection:"left-to-right"},l={id:"https://iiif-parser/empty-canvas",type:"Range",label:null,behavior:i,motivation:null,thumbnail:i,posterCanvas:null,accompanyingCanvas:null,placeholderCanvas:null,summary:null,requiredStatement:null,metadata:i,rights:null,navDate:null,provider:i,items:i,annotations:i,seeAlso:i,homepage:i,logo:i,partOf:i,rendering:i,service:i,start:null,supplementary:null,viewingDirection:"left-to-right"},c={id:"https://iiif-parser/empty-agent",type:"Agent",label:{},logo:i,seeAlso:i,homepage:i};function p(e){return Array.isArray(e)?e:[e]}const u=["Collection","Manifest","Canvas","AnnotationPage","AnnotationCollection","Annotation","ContentResource","Range","Service","Selector","Agent"];function v(e){if(null==e)throw new Error("Null or undefined is not a valid entity.");if(Array.isArray(e))throw new Error("Array is not a valid entity");if("object"!=typeof e)throw new Error(typeof e+" is not a valid entity");if("string"==typeof e.type){const t=u.indexOf(e.type);if(-1!==t)return u[t]}if(e.profile)return"Service";throw new Error("Resource type is not known")}class h{constructor(e,i={}){t(this,"traversals"),t(this,"options"),this.traversals={collection:[],manifest:[],canvas:[],annotationCollection:[],annotationPage:[],annotation:[],contentResource:[],choice:[],range:[],service:[],agent:[],...e},this.options={allowUndefinedReturn:!1,...i}}static all(e){return new h({collection:[e],manifest:[e],canvas:[e],annotationCollection:[e],annotationPage:[e],annotation:[e],contentResource:[e],choice:[e],range:[e],service:[e]})}traverseDescriptive(e){return e.thumbnail&&(e.thumbnail=e.thumbnail.map((e=>this.traverseType(e,this.traversals.contentResource)))),e.provider&&(e.provider=e.provider.map((e=>this.traverseAgent(e)))),e}traverseLinking(e){return e.seeAlso&&(e.seeAlso=e.seeAlso.map((e=>this.traverseType(e,this.traversals.contentResource)))),e.service&&(e.service=p(e.service).map((e=>this.traverseType(e,this.traversals.service)))),e.services&&(e.services=e.services.map((e=>this.traverseType(e,this.traversals.service)))),e.logo&&(e.logo=e.logo.map((e=>this.traverseType(e,this.traversals.contentResource)))),e.homepage&&(e.homepage=e.homepage.map((e=>this.traverseType(e,this.traversals.contentResource)))),e.partOf&&(e.partOf=e.partOf.map((e=>"string"!=typeof e&&e.type?"Canvas"===e.type?this.traverseType(e,this.traversals.canvas):"AnnotationCollection"===e.type?this.traverseType(e,this.traversals.annotationCollection):"Collection"===e.type?this.traverseType(e,this.traversals.collection):this.traverseType(e,this.traversals.contentResource):this.traverseType(e,this.traversals.contentResource)))),e.start&&(e.start=e.start?this.traverseType(e.start,this.traversals.canvas):null),e.rendering&&(e.rendering=e.rendering.map((e=>this.traverseType(e,this.traversals.contentResource)))),e.supplementary&&(e.supplementary=e.supplementary.map((e=>this.traverseType(e,this.traversals.contentResource)))),e}traverseCollectionItems(e){return e.items&&e.items.map((e=>"Collection"===e.type?this.traverseCollection(e):this.traverseManifest(e))),e}traverseCollection(e){return this.traverseType(this.traverseDescriptive(this.traverseInlineAnnotationPages(this.traverseLinking(this.traversePosterCanvas(this.traverseCollectionItems(e))))),this.traversals.collection)}traverseManifestItems(e){return e.items&&(e.items=e.items.map((e=>this.traverseCanvas(e)))),e}traverseManifestStructures(e){return e.structures&&(e.structures=e.structures.map((e=>this.traverseRange(e)))),e}traverseManifest(e){return this.traverseType(this.traverseInlineAnnotationPages(this.traverseManifestStructures(this.traversePosterCanvas(this.traverseDescriptive(this.traverseLinking(this.traverseManifestItems(e)))))),this.traversals.manifest)}traverseCanvasItems(e){return e.items=(e.items||[]).map((e=>this.traverseAnnotationPage(e))),e}traverseInlineAnnotationPages(e){return"string"!=typeof e&&e?(e.annotations&&(e.annotations=e.annotations.map((e=>this.traverseAnnotationPage(e)))),e):e}traverseCanvas(e){return this.traverseType(this.traverseInlineAnnotationPages(this.traversePosterCanvas(this.traverseDescriptive(this.traverseLinking(this.traverseCanvasItems(e))))),this.traversals.canvas)}traverseAnnotationPageItems(e){return e.items&&(e.items=e.items.map((e=>this.traverseAnnotation(e)))),e}traverseAnnotationPage(e){return this.traverseType(this.traverseDescriptive(this.traverseLinking(this.traverseAnnotationPageItems(e))),this.traversals.annotationPage)}traverseAnnotationBody(e){return Array.isArray(e.body)?e.body=e.body.map((e=>this.traverseContentResource(e))):e.body&&(e.body=this.traverseContentResource(e.body)),e}traversePosterCanvas(e){return e.posterCanvas&&(e.posterCanvas=this.traverseCanvas(e.posterCanvas)),e.placeholderCanvas&&(e.placeholderCanvas=this.traverseCanvas(e.placeholderCanvas)),e.accompanyingCanvas&&(e.accompanyingCanvas=this.traverseCanvas(e.accompanyingCanvas)),e}traverseAnnotation(e){return this.traverseType(this.traverseLinking(this.traverseAnnotationBody(e)),this.traversals.annotation)}traverseContentResourceLinking(e){return"string"!=typeof e&&e?(e&&e.service&&(e.service=p(e.service||[]).map((e=>this.traverseType(e,this.traversals.service)))),e):e}traverseContentResource(e){return"Choice"===e.type&&(e.items=e.items.map((e=>this.traverseContentResource(e)))),this.traverseType(this.traverseInlineAnnotationPages(this.traverseContentResourceLinking(e)),this.traversals.contentResource)}traverseRangeRanges(e){return e.items&&(e.items=e.items.map((e=>"string"==typeof e?this.traverseCanvas({id:e,type:"Canvas"}):"Manifest"===e.type?this.traverseManifest(e):this.traverseRange(e)))),e}traverseRange(e){return this.traverseType(this.traversePosterCanvas(this.traverseDescriptive(this.traverseLinking(this.traverseRangeRanges(e)))),this.traversals.range)}traverseAgent(e){return this.traverseType(this.traverseDescriptive(this.traverseLinking(e)),this.traversals.agent)}traverseType(e,t){return t.reduce(((e,t)=>{const i=t(e);return void 0!==i||this.options.allowUndefinedReturn?i:e}),e)}traverseService(e){return this.traverseType(e,this.traversals.service)}traverseUnknown(e){const t=v(e);switch(t){case"Collection":return this.traverseCollection(e);case"Manifest":return this.traverseManifest(e);case"Canvas":return this.traverseCanvas(e);case"AnnotationPage":return this.traverseAnnotationPage(e);case"Annotation":return this.traverseAnnotation(e);case"ContentResource":return this.traverseContentResource(e);case"Range":return this.traverseRange(e);case"Service":return this.traverseService(e);case"Agent":return this.traverseAgent(e);default:throw new Error(`Unknown or unsupported resource type of ${t}`)}}}const f=["sc:Collection","sc:Manifest","sc:Canvas","sc:AnnotationList","oa:Annotation","sc:Range","sc:Layer","sc:Sequence","oa:Choice","Service","ContentResource"];class m{constructor(e,i={}){t(this,"traversals"),t(this,"options"),this.traversals={collection:[],manifest:[],canvas:[],annotationList:[],sequence:[],annotation:[],contentResource:[],choice:[],range:[],service:[],layer:[],...e},this.options={convertPropsToArray:!0,mergeMemberProperties:!0,allowUndefinedReturn:!1,...i}}static all(e){return new m({collection:[e],manifest:[e],canvas:[e],annotationList:[e],sequence:[e],annotation:[e],contentResource:[e],choice:[e],range:[e],service:[e],layer:[e]})}traverseCollection(e){return this.traverseType(this.traverseDescriptive(this.traverseLinking(this.traverseCollectionItems(e))),this.traversals.collection)}traverseCollectionItems(e){if(this.options.mergeMemberProperties){const t=[...(e.manifests||[]).map((e=>"string"==typeof e?{"@id":e,"@type":"sc:Manifest"}:e)),...(e.collections||[]).map((e=>"string"==typeof e?{"@id":e,"@type":"sc:Collection"}:e)),...e.members||[]];delete e.collections,delete e.manifests,e.members=t}return e.manifests&&(e.manifests=e.manifests.map((e=>this.traverseManifest("string"==typeof e?{"@id":e,"@type":"sc:Manifest"}:e)))),e.collections&&(e.collections=e.collections.map((e=>this.traverseCollection("string"==typeof e?{"@id":e,"@type":"sc:Collection"}:e)))),e.members&&(e.members=e.members.map((e=>"string"==typeof e?e:this.traverseUnknown(e)))),e}traverseManifest(e){return this.traverseType(this.traverseDescriptive(this.traverseLinking(this.traverseManifestItems(e))),this.traversals.manifest)}traverseManifestItems(e){return e.sequences&&(e.sequences=e.sequences.map((e=>this.traverseSequence(e)))),e.structures&&(e.structures=e.structures.map((e=>this.traverseRange(e)))),e}traverseSequence(e){return this.traverseType(this.traverseDescriptive(this.traverseLinking(this.traverseSequenceItems(e))),this.traversals.sequence)}traverseSequenceItems(e){return e.canvases&&(e.canvases=e.canvases.map((e=>this.traverseCanvas(e)))),e}traverseCanvas(e){return this.traverseType(this.traverseDescriptive(this.traverseLinking(this.traverseCanvasItems(e))),this.traversals.canvas)}traverseCanvasItems(e){return e.images&&(e.images=e.images.map((e=>this.traverseAnnotation(e)))),e.otherContent&&(e.otherContent=e.otherContent.map((e=>this.traverseAnnotationList(e)))),e}traverseRange(e){return this.traverseType(this.traverseDescriptive(this.traverseLinking(this.traverseRangeItems(e))),this.traversals.range)}traverseRangeItems(e){if(this.options.mergeMemberProperties){const t=[...(e.ranges||[]).map((e=>"string"==typeof e?{"@id":e,"@type":"sc:Range"}:e)),...(e.canvases||[]).map((e=>"string"==typeof e?{"@id":e,"@type":"sc:Canvas"}:e)),...e.members||[]];delete e.ranges,delete e.canvases,e.members=t.length?t.map((e=>this.traverseUnknown(e))):void 0}return e}traverseAnnotationList(e){const t="string"==typeof e?{"@id":e,"@type":"sc:AnnotationList"}:e;return this.traverseType(this.traverseDescriptive(this.traverseAnnotationListItems(t)),this.traversals.annotationList)}traverseAnnotationListItems(e){return e.resources&&(e.resources=e.resources.map((e=>this.traverseAnnotation(e)))),e}traverseAnnotation(e){return this.traverseType(this.traverseDescriptive(this.traverseLinking(this.traverseAnnotationItems(e))),this.traversals.annotation)}traverseAnnotationItems(e){return e.resource&&(Array.isArray(e.resource)?e.resource=e.resource.map((e=>this.traverseContentResource(e))):e.resource=this.traverseContentResource(e.resource)),e.on,e}traverseLayer(e){return this.traverseType(this.traverseLinking(this.traverseLayerItems(e)),this.traversals.layer)}traverseLayerItems(e){return e.otherContent&&(e.otherContent=e.otherContent.map((e=>this.traverseAnnotationList(e)))),e}traverseChoice(e){return this.traverseType(this.traverseChoiceItems(e),this.traversals.choice)}traverseChoiceItems(e){return e.default&&"rdf:nil"!==e.default&&(e.default=this.traverseContentResource(e.default)),e.item&&"rdf:nil"!==e.item&&(e.item=e.item.map((e=>this.traverseContentResource(e)))),e}traverseService(e){return this.traverseType(this.traverseLinking(e),this.traversals.service)}traverseContentResource(e){return"oa:Choice"===e["@type"]?this.traverseChoice(e):this.traverseType(this.traverseDescriptive(this.traverseLinking(e)),this.traversals.contentResource)}traverseUnknown(e){if(!e["@type"]||"string"==typeof e)return e;switch(function(e){if(null==e)throw new Error("Null or undefined is not a valid entity.");if(Array.isArray(e))throw new Error("Array is not a valid entity");if("object"!=typeof e)throw new Error(typeof e+" is not a valid entity");if("string"==typeof e["@type"]){const t=f.indexOf(e["@type"]);if(-1!==t)return f[t]}if(e.profile)return"Service";if(e.format)return"ContentResource";if(e["@type"])return"ContentResource";throw new Error("Resource type is not known")}(e)){case"sc:Collection":return this.traverseCollection(e);case"sc:Manifest":return this.traverseManifest(e);case"sc:Canvas":return this.traverseCanvas(e);case"sc:Sequence":return this.traverseSequence(e);case"sc:Range":return this.traverseRange(e);case"oa:Annotation":return this.traverseAnnotation(e);case"sc:AnnotationList":return this.traverseAnnotationList(e);case"sc:Layer":return this.traverseLayer(e);case"Service":return this.traverseService(e);case"oa:Choice":return this.traverseChoice(e);case"ContentResource":return this.traverseContentResource(e)}return e.profile?this.traverseService(e):e}traverseImageResource(e){const t=Array.isArray(e),i=Array.isArray(e)?e:[e],r=[];for(const n of i)"string"==typeof n?r.push(this.traverseContentResource({"@id":n,"@type":"dctypes:Image"})):r.push(this.traverseContentResource(n));return t||this.options.convertPropsToArray?r:r[0]}traverseDescriptive(e){return e.thumbnail&&(e.thumbnail=this.traverseImageResource(e.thumbnail)),e.logo&&(e.logo=this.traverseImageResource(e.logo)),e}traverseOneOrMoreServices(e){const t=Array.isArray(e),i=Array.isArray(e)?e:[e],r=[];for(const n of i)r.push(this.traverseService(n));return t||this.options.convertPropsToArray?r:r[0]}traverseLinking(e){return e.related&&(e.related=this.traverseOneOrManyType(e.related,this.traversals.contentResource)),e.rendering&&(e.rendering=this.traverseOneOrManyType(e.rendering,this.traversals.contentResource)),e.service&&(e.service=this.traverseOneOrMoreServices(e.service)),e.seeAlso&&(e.seeAlso=this.traverseOneOrManyType(e.seeAlso,this.traversals.contentResource)),e.within&&("string"==typeof e.within||(e.within=this.traverseOneOrManyType(e.within,this.traversals.contentResource))),e.startCanvas&&("string"==typeof e.startCanvas?e.startCanvas=this.traverseType({"@id":e.startCanvas,"@type":"sc:Canvas"},this.traversals.canvas):e.startCanvas&&this.traverseType(e.startCanvas,this.traversals.canvas)),e.contentLayer&&("string"==typeof e.contentLayer?e.contentLayer=this.traverseLayer({"@id":e.contentLayer,"@type":"sc:Layer"}):e.contentLayer=this.traverseLayer(e.contentLayer)),e}traverseOneOrManyType(e,t){if(!Array.isArray(e)){if(!this.options.convertPropsToArray)return this.traverseType(e,t);e=[e]}return e.map((e=>this.traverseType(e,t)))}traverseType(e,t){return t.reduce(((e,t)=>{const i=t(e);return void 0!==i||this.options.allowUndefinedReturn?i:e}),e)}}const y=["http://iiif.io/api/image/2/level1","http://iiif.io/api/image/2/level2","http://library.stanford.edu/iiif/image-api/compliance.html#level1","http://library.stanford.edu/iiif/image-api/compliance.html#level2","http://library.stanford.edu/iiif/image-api/conformance.html#level1","http://library.stanford.edu/iiif/image-api/conformance.html#level2","http://library.stanford.edu/iiif/image-api/1.1/compliance.html#level1","http://library.stanford.edu/iiif/image-api/1.1/compliance.html#level2","http://library.stanford.edu/iiif/image-api/1.1/conformance.html#level1","http://library.stanford.edu/iiif/image-api/1.1/conformance.html#level2","http://iiif.io/api/image/1/level1.json","http://iiif.io/api/image/1/profiles/level1.json","http://iiif.io/api/image/1/level2.json","http://iiif.io/api/image/1/profiles/level2.json","http://iiif.io/api/image/2/level1.json","http://iiif.io/api/image/2/profiles/level1.json","http://iiif.io/api/image/2/level2.json","http://iiif.io/api/image/2/profiles/level2.json","level1","level2"],d=["http://iiif.io/api/image/2/level0","http://iiif.io/api/image/2/level1","http://iiif.io/api/image/2/level2","http://library.stanford.edu/iiif/image-api/compliance.html#level0","http://library.stanford.edu/iiif/image-api/compliance.html#level1","http://library.stanford.edu/iiif/image-api/compliance.html#level2","http://library.stanford.edu/iiif/image-api/conformance.html#level0","http://library.stanford.edu/iiif/image-api/conformance.html#level1","http://library.stanford.edu/iiif/image-api/conformance.html#level2","http://library.stanford.edu/iiif/image-api/1.1/compliance.html#level0","http://library.stanford.edu/iiif/image-api/1.1/compliance.html#level1","http://library.stanford.edu/iiif/image-api/1.1/compliance.html#level2","http://library.stanford.edu/iiif/image-api/1.1/conformance.html#level0","http://library.stanford.edu/iiif/image-api/1.1/conformance.html#level1","http://library.stanford.edu/iiif/image-api/1.1/conformance.html#level2","http://iiif.io/api/image/1/level0.json","http://iiif.io/api/image/1/profiles/level0.json","http://iiif.io/api/image/1/level1.json","http://iiif.io/api/image/1/profiles/level1.json","http://iiif.io/api/image/1/level2.json","http://iiif.io/api/image/1/profiles/level2.json","http://iiif.io/api/image/2/level0.json","http://iiif.io/api/image/2/profiles/level0.json","http://iiif.io/api/image/2/level1.json","http://iiif.io/api/image/2/profiles/level1.json","http://iiif.io/api/image/2/level2.json","http://iiif.io/api/image/2/profiles/level2.json","level0","level1","level2"],g="Attribution",A="http://example.org/provider",C="Unknown";function b(e,t="none"){if(!e)return{};const i=Array.isArray(e)?e:[e],r={};for(const n of i){if("string"==typeof n){r[t]=r[t]?r[t]:[],r[t].push(n||"");continue}if(!n["@language"]){r[t]=r[t]?r[t]:[],r[t].push(n["@value"]||"");continue}const e=n["@language"];r[e]=r[e]?r[e]:[],r[e].push(n["@value"]||"")}return r}function w(e){return Array.isArray(e)?w(e.find((e=>"string"==typeof e))):-1!==d.indexOf(e)?"level2":-1!==y.indexOf(e)?"level1":"string"==typeof e?e:void 0}function R(e){for(const t of["sc","oa","dcterms","dctypes","iiif"])if(e.startsWith(`${t}:`))return e.slice(t.length+1);return e}const x=["Collection","Manifest","Annotation","AnnotationPage","Range","Service"];function S(e){const t=e["@id"]||e.id;let i=e["@type"]||e.type;const r=e.profile||void 0,n=e["@context"]||void 0;if(r){const e=function(e){switch(e){case"http://iiif.io/api/image/2/level0.json":case"http://iiif.io/api/image/2/level1.json":case"http://iiif.io/api/image/2/level2.json":return"ImageService2";case"http://iiif.io/api/auth/1/kiosk":case"http://iiif.io/api/auth/1/login":case"http://iiif.io/api/auth/1/clickthrough":case"http://iiif.io/api/auth/1/external":case"http://iiif.io/api/auth/0/kiosk":case"http://iiif.io/api/auth/0/login":case"http://iiif.io/api/auth/0/clickthrough":case"http://iiif.io/api/auth/0/external":return"AuthCookieService1";case"http://iiif.io/api/auth/1/token":case"http://iiif.io/api/auth/0/token":return"AuthTokenService1";case"http://iiif.io/api/auth/1/logout":case"http://iiif.io/api/auth/0/logout":return"AuthLogoutService1";case"http://iiif.io/api/search/1/search":case"http://iiif.io/api/search/0/search":return"SearchService1";case"http://iiif.io/api/search/1/autocomplete":case"http://iiif.io/api/search/0/autocomplete":return"AutoCompleteService1"}}(r);if(e)return e}if(n){const e=function(e){const t=Array.isArray(e)?e:[e];for(const i of t)switch(i){case"http://iiif.io/api/image/2/context.json":case"http://library.stanford.edu/iiif/image-api/1.1/compliance.html#level2":return"ImageService2";case"http://iiif.io/api/image/1/context.json":case"http://library.stanford.edu/iiif/image-api/1.1/context.json":return"ImageService1";case"http://iiif.io/api/annex/openannotation/context.json":return"ImageApiSelector"}}(n);if(e)return e}if(i){if(Array.isArray(i)){if(-1!==i.indexOf("oa:CssStylesheet"))return"CssStylesheet";if(-1!==i.indexOf("cnt:ContentAsText"))return"TextualBody";i=i[0]}for(const e of["sc","oa","dcterms","dctypes","iiif"])if(i.startsWith(`${e}:`)){i=i.slice(e.length+1);break}switch(i){case"Layer":return"AnnotationCollection";case"AnnotationList":return"AnnotationPage";case"cnt:ContentAsText":return"TextualBody"}}if(i&&-1!==x.indexOf(i))return i;if(e.format){if(e.format.startsWith("image/"))return"Image";if(e.format.startsWith("text/"))return"Text";if("application/pdf"===e.format)return"Text";if(e.format.startsWith("application/"))return"Dataset"}return t&&(t.endsWith(".jpg")||t.endsWith(".png")||t.endsWith(".jpeg"))?"Image":i||"unknown"}const j=/http(s)?:\/\/(creativecommons.org|rightsstatements.org)[^"'\\<\n]+/gm;function T(e){const t=e.match(j);return t?t[0]:e}const L=["http://iiif.io/api/presentation/2/context.json","http://iiif.io/api/image/2/context.json","http://iiif.io/api/image/1/context.json","http://library.stanford.edu/iiif/image-api/1.1/context.json","http://iiif.io/api/search/1/context.json","http://iiif.io/api/search/0/context.json","http://iiif.io/api/auth/1/context.json","http://iiif.io/api/auth/0/context.json","http://iiif.io/api/annex/openannotation/context.json"];function I(e){if(e){const t=Array.isArray(e)?e:[e],i=[];for(const e of t)"http://iiif.io/api/presentation/2/context.json"===e&&i.push("http://iiif.io/api/presentation/3/context.json"),-1===L.indexOf(e)&&i.push(e);if(t.length)return 1===i.length?i[0]:i}}function M(e){for(const t in e)void 0!==e[t]&&null!==e[t]||delete e[t];return e}let P=0;function O(e,t){const i=encodeURI(e.id||e["@id"]||"").trim();return i&&t?`${i}/${t}`:i||(P++,`http://example.org/${e["@type"]}${t?`/${t}`:""}/${P}`)}function k(e){const t=[...e.behavior||[]];let i;return e.viewingHint&&t.push(e.viewingHint),Array.isArray(e.motivation)?i=e.motivation.map(R):e.motivation&&(i=R(e.motivation)),{"@context":e["@context"]?I(e["@context"]):void 0,id:(e["@id"]||O(e)).trim(),type:S(e),behavior:t.length?t:void 0,height:e.height?e.height:void 0,width:e.width?e.width:void 0,motivation:i,viewingDirection:e.viewingDirection,profile:e.profile,format:e.format?e.format:void 0,duration:void 0,timeMode:void 0}}function D(e){const[t,i]=function(e,t="Rights/License",i="none"){let r=null;const n=[],a=Array.isArray(e)?e:[e];for(const s of a){const e=s?T(s):void 0;!e||-1===e.indexOf("creativecommons.org")&&-1===e.indexOf("rightsstatements.org")?e&&n.push({label:{[i]:[t]},value:{[i]:[e]}}):r=e.startsWith("https://")?`http://${e.slice(8)}`:e}return[r,n]}(e.license),r=[...e.metadata?(n=e.metadata,n?n.map((e=>({label:b(e.label),value:b(e.value)}))):[]):[],...i];var n;return{rights:t,metadata:r.length?r:void 0,label:e.label?b(e.label):void 0,requiredStatement:e.attribution?{label:b(g),value:b(e.attribution)}:void 0,navDate:e.navDate,summary:e.description?b(e.description):void 0,thumbnail:e.thumbnail}}function q(e){if(!e.within)return;const t=Array.isArray(e.within)?e.within:[e.within],i=[];for(const r of t)if("string"==typeof r){if(r&&"sc:Manifest"===e["@type"])i.push({id:r,type:"Collection"})}else r["@id"]&&i.push({id:r["@id"],type:S(r)});return i.length?i:void 0}function U(e){const t=e.related?Array.isArray(e.related)?e.related:[e.related]:[],i=e.contentLayer;return{provider:e.logo||t.length?[{id:A,type:"Agent",homepage:t.length?[t[0]]:void 0,logo:e.logo?Array.isArray(e.logo)?e.logo:[e.logo]:void 0,label:b(C)}]:void 0,partOf:q(e),rendering:e.rendering,seeAlso:e.seeAlso,start:e.startCanvas,service:e.service?p(e.service):void 0,supplementary:i?[i]:void 0}}function E(e){const t=e;return M({...k(t),...D(t),...U(t),...(i=t,{chars:i.chars,format:i.format?i.format:void 0,language:i.language})});var i}const $=new m({collection:[function(e){return M({...k(e),...D(e),...U(e),items:e.members})}],manifest:[function(e){const t=[],i=[];for(const n of e.sequences||[])n.canvases.length&&t.push(...n.canvases),n.behavior&&i.push(...n.behavior);const r=k(e);return i.length&&(r.behavior?r.behavior.push(...i):r.behavior=i),M({...r,...D(e),...U(e),items:t,structures:e.structures})}],canvas:[function(e){return M({...k(e),...D(e),...U(e),annotations:e.otherContent&&e.otherContent.length?e.otherContent:void 0,items:e.images&&e.images.length?[{id:O(e,"annotation-page"),type:"AnnotationPage",items:e.images}]:void 0})}],annotationList:[function(e){return M({...k(e),...D(e),...U(e),items:e.resources&&e.resources.length?e.resources:void 0})}],sequence:[function(e){return e.canvases&&0!==e.canvases.length?{canvases:e.canvases,behavior:e.viewingHint?[e.viewingHint]:[]}:{canvases:[],behavior:[]}}],annotation:[function(e){return M({...k(e),...D(e),...U(e),target:function e(t){if(Array.isArray(t)){if(t.length>1)return{type:"List",items:t.map(e)};t=t[0]}if("string"==typeof t)return encodeURI(t).trim();if("@type"in t){let e;if("string"==typeof t.full)e=t.full;else if("dctypes:Image"===t.full["@type"])e={id:t.full["@id"],type:"Image"};else{if("sc:Canvas"!==t.full["@type"])throw new Error(`Unsupported source type on annotation: ${t.full["@type"]}`);e={id:t.full["@id"],type:"Canvas"}}return{type:"SpecificResource",source:e,selector:W(t.selector)}}return encodeURI(t["@id"]).trim()}(e.on),body:Array.isArray(e.resource)?e.resource.map(E):E(e.resource)})}],contentResource:[E],choice:[function(e){const t=[];return e.default&&"rdf:nil"!==e.default&&t.push(e.default),e.item&&"rdf:nil"!==e.item&&t.push(...e.item),{...k(e),...D(e),items:t}}],range:[function(e){return M({...k(e),...D(e),...U(e),items:e.members})}],service:[function(e){const{"@id":t,"@type":i,"@context":r,profile:n,...a}=e,s={};return t&&(s["@id"]=t),s["@type"]=S(e),"unknown"===s["@type"]&&(r&&r.length&&(s["@context"]=r),s["@type"]="Service"),n&&(s.profile=w(n)),M({...s,...a})}],layer:[function(e){return M({...k(e),...D(e),...U(e)})}]});function W(e){if((Array.isArray(e["@type"])&&e["@type"].includes("oa:SvgSelector")||"oa:SvgSelector"==e["@type"])&&("chars"in e||"value"in e))return{type:"SvgSelector",value:"chars"in e?e.chars:e.value};if("oa:FragmentSelector"===e["@type"])return{type:"FragmentSelector",value:e.value};if("oa:Choice"===e["@type"])return[W(e.default),...(Array.isArray(e.item)?e.item:[e.item]).map(W)];if("iiif:ImageApiSelector"==e["@type"])return{type:"ImageApiSelector",region:"region"in e?e.region:void 0,rotation:"rotation"in e?e.rotation:void 0};throw new Error(`Unsupported selector type: ${e["@type"]}`)}function _(){return{Collection:{},Manifest:{},Canvas:{},AnnotationPage:{},AnnotationCollection:{},Annotation:{},ContentResource:{},Range:{},Service:{},Selector:{},Agent:{}}}function z(e,t){if("string"==typeof e)return{id:e,type:t};if(!e.id)throw new Error(`Invalid resource does not have an ID (${t})`);return e}function N(e,t){if(!t)return e;if(Array.isArray(e)){if(!Array.isArray(t))throw new Error("Cannot merge array with non-array");const i=[...e];for(const r of t)if(null!=r)if(Array.isArray(r))i.push(r);else if("object"==typeof r&&r.id&&r.type){const e=i.findIndex((e=>e.id===r.id&&e.type===r.type));e>=0&&(i[e]=N(i[e],r))}else-1===e.indexOf(r)&&i.push(r);return i}if("object"==typeof e){if(Array.isArray(t)||"object"!=typeof t)throw new Error("Cannot merge object with non-object");const r={...e};for(const[e,n]of Object.entries(t)){const t=r[e];r[e]=t!==i&&t?N(t,n):n}return r}return e||t}function B(e,t){if("string"==typeof e)return e;if(t.id!==e.id||t.type!==e.type)throw new Error("Can only merge entities with identical identifiers and type!");return N({...e},t)}function F(e){const t=JSON.stringify(e);let i=5381,r=t.length;for(;r;)i=33*i^t.charCodeAt(--r);const n=(i>>>0).toString(16);return n.length%2?"0"+n:n}function H(e){return t=>"string"==typeof t?{id:t,type:e}:t.id?t.type?t:{type:e,...t}:{id:`vault://${F(t)}`,type:e,...t}}function J(e){return t=>({...e,...t})}function V(e){return Array.isArray(e)?e:[e]}function Y(e){return e.body&&(e.body=V(e.body)),e.seeAlso&&(e.seeAlso=V(e.seeAlso)),e.body&&(e.body=V(e.body)),e.audience&&(e.audience=V(e.audience)),e.accessibility&&(e.accessibility=V(e.accessibility)),e.motivation&&(e.motivation=V(e.motivation)),e}const G="__$UNSET$__",K="__$UNWRAP$__";function Q(e){const t={};for(const[i,r]of e){if(i===K&&r!==G)return r;r!==G&&null!=r&&(t[i]=r)}return t}function X(e){if(!e)return;const t=Object.keys(e);if(0!==t.length){if(1===t.length){const i=t[0];if(!i)return"";const r=(e[i]||[]).join("");return"@none"===i||"none"===i||"en"===i?r:{"@language":i,"@value":r}}return t.map((t=>({"@language":t,"@value":(e[t]||[]).join("")})))}}function Z(e){return Array.isArray(e)?e.map((e=>Z(e))):"string"==typeof e?e:e.type&&"Canvas"===e.type?e.id:e}function ee(e,t=!1){if(e)return e.length>1&&!t?e:e[0]||void 0}function te(e){if(e){if("string"==typeof e)return{"@id":e};if("@id"in e){const t={...e};return delete t["@type"],t}return{"@context":"http://iiif.io/api/image/2/context.json","@id":e.id,profile:`http://iiif.io/api/image/2/profiles/${e.profile}.json`}}}function ie(e,t){return[["@id",e.id],["@type",t],["format",e.format],["height",e.height],["width",e.width],["viewingDirection","left-to-right"!==e.viewingDirection?e.viewingDirection:void 0]]}function*re(e){const t=e.provider?yield e.provider[0]:void 0;return[["label",X(e.label)],["metadata",e.metadata&&e.metadata.length?e.metadata.map((e=>({label:X(e.label)||"",value:X(e.value)||""}))):void 0],["description",X(e.summary)],["thumbnail",ee(yield e.thumbnail)],["navDate",e.navDate],["logo",t?ee(t.logo):void 0],["homepage",t?t.homepage:void 0],["attribution",e.requiredStatement?X(e.requiredStatement.value):void 0]]}function*ne(e){return[["seeAlso",ee(yield e.seeAlso)],["service",ee((e.service||[]).map(te))],["rendering",ee(yield e.rendering)],["startCanvas",e.start?e.start.id:void 0]]}const ae={Manifest:function*(e){return[...ie(e,"sc:Manifest"),...yield*re(e),...yield*ne(e),["sequences",[{"@id":`${e.id}/sequence0`,"@type":"sc:Sequence",canvases:yield e.items}]],["structures",yield e.structures]]},Canvas:function*(e){const t=(yield e.items)[0];return[...ie(e,"sc:Canvas"),...yield*re(e),...yield*ne(e),["images",t?[t.resources]:void 0],["annotations",e.annotations&&e.annotations.length?ee(yield e.annotations):void 0]]},AnnotationPage:function*(e){return[...ie(e,"sc:AnnotationList"),...yield*re(e),["resources",e.items&&e.items.length?ee(yield e.items):void 0]]},Annotation:function*(e){return[["@id",e.id],["@type","oa:Annotation"],["motivation","sc:painting"],["on",Z(e.target)],["resource",ee(yield e.body,!0)]]},ContentResource:function*(e){return"Image"===e.type?[...ie(e,"dctypes:Image"),...yield*re(e),...yield*ne(e)]:[...ie(e,void 0),...yield*re(e)]},AnnotationCollection:function*(e){return[["@id",e.id],["@type","sc:Layer"],["label",X(e.label)]]},Collection:function*(e){return[...ie(e,"sc:Collection"),...yield*re(e),...yield*ne(e),["members",yield*e.items]]},Range:function*(e){const t=[],i=[];if(e.items)for(const r of e.items){const n=yield r;t.push({"@id":r.id,"@type":r.type,label:n?n.label:void 0,within:e.id}),"Canvas"===r.type&&i.push(r.id)}return[...ie(e,"sc:Range"),...yield*re(e),...yield*ne(e),["canvases",i.length===t.length?i:void 0],["members",i.length!==t.length?t:void 0]]}};function se(e){var t;return[["id",(null==(t=e.id)?void 0:t.startsWith("vault://"))?void 0:e.id],["type",e.type],["format",e.format],["profile",e.profile],["height",e.height],["width",e.width],["duration",e.duration||void 0],["viewingDirection","left-to-right"!==e.viewingDirection?e.viewingDirection:void 0],["behavior",e.behavior&&e.behavior.length?e.behavior:void 0],["timeMode",e.timeMode],["motivation",Array.isArray(e.motivation)?e.motivation[0]:e.motivation]]}function oe(e){if(e&&0!==e.length)return e}function le(e){if(e&&e.type&&"ImageService2"===e.type){const{id:t,type:i,profile:r,...n}=e,a="string"==typeof r?r:Array.isArray(r)?r.find((e=>"string"==typeof e)):"";return{"@id":t,"@type":i,profile:a?a.startsWith("http")?a:`http://iiif.io/api/image/2/${a}.json`:"http://iiif.io/api/image/2/level0.json",...n}}return e}function ce(e){if(e&&0!==e.length)return e.map(le)}function*pe(e){return[["label",e.label],["metadata",oe(e.metadata)],["summary",e.summary],["requiredStatement",e.requiredStatement],["rights",e.rights],["navDate",e.navDate],["language",e.language],["thumbnail",oe(yield e.thumbnail)],["placeholderCanvas",yield e.placeholderCanvas],["accompanyingCanvas",yield e.accompanyingCanvas],["provider",oe(yield e.provider)]]}function*ue(e){return[["seeAlso",oe(yield e.seeAlso)],["service",ce(e.service)],["services",ce(e.services)],["rendering",oe(yield e.rendering)],["supplementary",oe(yield e.supplementary)],["homepage",oe(yield e.homepage)],["logo",oe(yield e.logo)],["partOf",oe(yield e.partOf)],["start",e.start]]}const ve={Manifest:function*(e,t,{isTopLevel:i}){return i?[["@context","http://iiif.io/api/presentation/3/context.json"],...se(e),...yield*pe(e),...yield*ue(e),["items",yield e.items],["structures",oe(yield e.structures)],["annotations",oe(yield e.annotations)]]:[...se(e),...yield*pe(e)]},Canvas:function*(e){return[...se(e),...yield*pe(e),...yield*ue(e),["items",yield e.items],["annotations",oe(yield e.annotations)]]},Agent:function*(e){return[["id",e.id],["type","Agent"],["label",e.label],...yield*ue(e)]},AnnotationPage:function*(e){return[...Object.entries(e).map((([e,t])=>[e,Array.isArray(t)?oe(t):t])).filter((([e,t])=>"items"!==e)),...yield*ue(e),["items",yield e.items]]},Service:function*(e){return[[K,le(e)]]},Annotation:function*(e){const t=Object.entries(e).map((([e,t])=>"motivation"===e?[e,Array.isArray(t)?t[0]:t]:[e,Array.isArray(t)?oe(t):t])).filter((([e])=>"body"!==e)),i=yield e.body;return[...t,["body",1===i.length?i[0]:i]]},ContentResource:function*(e){return[...se(e),...yield*pe(e),...yield*ue(e),["annotations",oe(yield e.annotations)],["items",oe(yield e.items)]]},AnnotationCollection:function*(e){return[["id",e.id],["type","AnnotationCollection"],["label",e.label]]},Collection:function*(e,t,{isTopLevel:i}){return i?[["@context","http://iiif.io/api/presentation/3/context.json"],...se(e),...yield*pe(e),...yield*ue(e),["items",oe(yield e.items)]]:[...se(e),...yield*pe(e)]},Range:function*(e){const t=[];for(const i of e.items)"Range"===i.type?t.push(yield i):t.push(i);return[...se(e),...yield*pe(e),...yield*ue(e),["items",t],["annotations",oe(yield e.annotations)]]}};exports.EMPTY=i,exports.Traverse=h,exports.UNSET=G,exports.UNWRAP=K,exports.defaultEntities={Collection:{},Manifest:{},Canvas:{},AnnotationPage:{},AnnotationCollection:{},Annotation:{},ContentResource:{},Range:{},Service:{},Selector:{},Agent:{}},exports.emptyAgent=c,exports.emptyAnnotation=r,exports.emptyAnnotationPage=n,exports.emptyCanvas=a,exports.emptyCollection=s,exports.emptyManifest=o,exports.emptyRange=l,exports.getDefaultEntities=_,exports.identifyResource=v,exports.languageString2to3=X,exports.mergeEntities=B,exports.normalize=function(e){const t=function(e){return e&&e["@context"]&&("http://iiif.io/api/presentation/2/context.json"===e["@context"]||-1!==e["@context"].indexOf("http://iiif.io/api/presentation/2/context.json")||"http://www.shared-canvas.org/ns/context.json"===e["@context"])||"http://iiif.io/api/image/2/context.json"===e["@context"]?$.traverseUnknown(e):e}(e),i={Collection:{},Manifest:{},Canvas:{},AnnotationPage:{},AnnotationCollection:{},Annotation:{},ContentResource:{},Range:{},Service:{},Selector:{},Agent:{}},r={},p=function(e){return(t,i)=>{const r=e[t]?e[t]:{};return e=>{const n=z(e,i||t);return n&&n.id&&t?(r[n.id]=r[n.id]?B(r[n.id],n):Object.assign({},n),{id:n.id,type:"ContentResource"===t?t:n.type}):n}}}(i),u=function(e){return(t,i)=>r=>{const{id:n,type:a}=z(r,i||t);if(void 0===n)throw new Error("Found invalid entity without an ID.");return e[n]="ContentResource"===t?t:a,r}}(r);return{entities:i,resource:new h({collection:[J(s),u("Collection"),p("Collection")],manifest:[J(o),u("Manifest"),p("Manifest")],canvas:[J(a),u("Canvas"),p("Canvas")],annotationPage:[H("AnnotationPage"),J(n),u("AnnotationPage"),p("AnnotationPage")],annotation:[H("Annotation"),Y,u("Annotation"),p("Annotation")],contentResource:[H("ContentResource"),u("ContentResource"),p("ContentResource")],range:[J(l),u("Range","Canvas"),p("Range","Canvas")],agent:[J(c),u("Agent"),p("Agent")]}).traverseUnknown(t),mapping:r}},exports.serialize=function(e,t,i){if(!t.type||!t.id)throw new Error("Unknown entity");if(!i[t.type])throw new Error(`Serializer not found for ${t.type}`);return function r(n){const a=i[n.type];if(!a)return G;const s=function(e,t){const i=e.requests[t],r=e.mapping[t];if(r&&(!i||!i.resourceUri||e.entities[r][i.resourceUri]))return e.entities[r][i?i.resourceUri:t]}(e,n.id)||(n.id&&n.type?n:null);if(!s)return G;const o=a(s,e,{isTopLevel:t.id===n.id});let l=o.next();for(;!l.done;){const e=l.value;let t=G;if(e)if(Array.isArray(e)){const i=[];for(const t of e)i.push(r(t));t=i}else t=r(e);l=o.next(t)}return l.value===G?G:Q(l.value)}(t)},exports.serializeConfigPresentation2=ae,exports.serializeConfigPresentation3=ve,exports.serializedFieldsToObject=Q,exports.types=u;
"use strict";var e=Object.defineProperty,t=(t,i,r)=>(((t,i,r)=>{i in t?e(t,i,{enumerable:!0,configurable:!0,writable:!0,value:r}):t[i]=r})(t,"symbol"!=typeof i?i+"":i,r),r);function i(e){return"string"!=typeof e&&(!!e&&"SpecificResource"===e.type)}function r(e,t){const n=t||"unknown";if(!e)return;if("string"==typeof e)return{id:e,type:n};if(i(e))return r(e.source,t);let s=n&&"unknown"!==n?n:e.type||e["@type"];const a=e.id||e["@id"];return-1!==s.indexOf(":")&&(s=s.split(":").pop()),a&&s?{id:a,type:s}:void 0}Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const n={},s="iiif-parser:hasPart",a="iiif-parser:partOf",o="iiif-parser:isExternal",c="__$UNSET$__",l="__$UNWRAP$__",p=[];function u(e){if(e===n||0===Object.keys(e).length)return!0;for(const t in e)return!1;return!0}function v(e,t){if(t&&t["@explicit"]){const i={},r=Object.keys(t);for(const n of r)n!==a&&"@explicit"!==n&&(u(t[n])?i[n]=e[n]:i[n]=t[n]);return i}return e}function f(e,t,i){const n=r(t);if(!n)return[void 0,void 0];const o=e.requests[n.id],c=n.type||e.mapping[n.id];if(!c||o&&o.resourceUri&&!e.entities[c][o.resourceUri])return[void 0,void 0];const l=e.entities[c][o?o.resourceUri:n.id];if(n.type&&!l)return f(e,{id:n.id},i);if(l&&l[s]){const e=l[s].find((e=>i?e[a]===i.id:e[a]===l.id));return[v(l,e),l]}return[l,l]}Object.freeze(p),Object.freeze(n);const h={id:"https://iiif-parser/annotation",type:"Annotation",behavior:p,label:null,thumbnail:p,summary:null,requiredStatement:null,metadata:p,seeAlso:p,homepage:p,rendering:p,service:p,accessibility:p,audience:p,body:p,bodyValue:null,canonical:null,created:null,creator:p,generated:null,generator:p,modified:null,motivation:p,rights:null,stylesheet:null,target:p,timeMode:void 0,via:p,partOf:p},y={id:"https://iiif-parser/annotation-page",type:"AnnotationPage",behavior:p,label:null,thumbnail:p,summary:null,requiredStatement:null,metadata:p,rights:null,provider:p,items:p,seeAlso:p,homepage:p,rendering:p,service:p},d={id:"https://iiif-parser/empty-canvas",type:"Canvas",label:null,behavior:p,thumbnail:p,accompanyingCanvas:null,placeholderCanvas:null,summary:null,requiredStatement:null,metadata:p,rights:null,navDate:null,provider:p,items:p,annotations:p,seeAlso:p,homepage:p,partOf:p,rendering:p,service:p,duration:0,height:0,width:0},m={id:"https://iiif-parser/empty-collection",type:"Collection",label:null,viewingDirection:"left-to-right",behavior:p,thumbnail:p,accompanyingCanvas:null,placeholderCanvas:null,summary:null,requiredStatement:null,metadata:p,rights:null,navDate:null,provider:p,items:p,annotations:p,seeAlso:p,homepage:p,partOf:p,rendering:p,service:p,services:p},g={id:"https://iiif-parser/empty-manifest",type:"Manifest",annotations:p,behavior:p,homepage:p,items:p,label:null,metadata:p,navDate:null,provider:p,partOf:p,accompanyingCanvas:null,placeholderCanvas:null,rendering:p,requiredStatement:null,rights:null,seeAlso:p,service:p,services:p,start:null,structures:p,summary:null,thumbnail:p,viewingDirection:"left-to-right"},A={id:"https://iiif-parser/empty-canvas",type:"Range",label:null,behavior:p,thumbnail:p,accompanyingCanvas:null,placeholderCanvas:null,summary:null,requiredStatement:null,metadata:p,rights:null,navDate:null,provider:p,items:p,annotations:p,seeAlso:p,homepage:p,partOf:p,rendering:p,service:p,start:null,supplementary:null,viewingDirection:"left-to-right"},C={id:"https://iiif-parser/empty-agent",type:"Agent",label:{},logo:p,seeAlso:p,homepage:p},b={id:"https://iiif-parser/empty-service",type:"UnknownService"};function R(e){return Array.isArray(e)?e:e?[e]:[]}function S(...e){return t=>e.reduce(((e,t)=>t(e)),t)}const w=["Collection","Manifest","Canvas","AnnotationPage","AnnotationCollection","Annotation","ContentResource","Range","Service","Selector","Agent"];function x(e,t){if(null==e)throw new Error("Null or undefined is not a valid entity.");if(Array.isArray(e))throw new Error("Array is not a valid entity");if("object"!=typeof e){if(t)return t;throw new Error(typeof e+" is not a valid entity")}if("string"==typeof e.type){const t=w.indexOf(e.type);if(-1!==t)return w[t]}if(e.profile)return"Service";throw new Error("Resource type is not known")}class j{constructor(e,i={}){t(this,"traversals"),t(this,"options"),t(this,"_traverseManifest",S(this.traverseManifestItems.bind(this),this.traverseLinking.bind(this),this.traverseDescriptive.bind(this),this.traverseLinkedCanvases.bind(this),this.traverseManifestStructures.bind(this),this.traverseInlineAnnotationPages.bind(this))),t(this,"_traverseCanvas",S(this.traverseCanvasItems.bind(this),this.traverseLinking.bind(this),this.traverseDescriptive.bind(this),this.traverseLinkedCanvases.bind(this),this.traverseInlineAnnotationPages.bind(this))),t(this,"_traverseAnnotationPage",S(this.traverseAnnotationPageItems.bind(this),this.traverseLinking.bind(this),this.traverseDescriptive.bind(this))),t(this,"_traverseRange",S(this.traverseRangeRanges.bind(this),this.traverseLinking.bind(this),this.traverseDescriptive.bind(this),this.traverseLinkedCanvases.bind(this))),this.traversals={collection:[],manifest:[],canvas:[],annotationCollection:[],annotationPage:[],annotation:[],contentResource:[],choice:[],range:[],service:[],agent:[],specificResource:[],geoJson:[],...e},this.options={allowUndefinedReturn:!1,...i}}static all(e){return new j({collection:[e],manifest:[e],canvas:[e],annotationCollection:[e],annotationPage:[e],annotation:[e],contentResource:[e],choice:[e],range:[e],service:[e],geoJson:[e],specificResource:[e],agent:[e]})}traverseDescriptive(e){return e.thumbnail&&(e.thumbnail=R(e.thumbnail).map((t=>this.traverseType(t,{parent:e},this.traversals.contentResource)))),e.provider&&(e.provider=e.provider.map((t=>this.traverseAgent(t,e)))),e}traverseLinking(e){return e.seeAlso&&(e.seeAlso=e.seeAlso.map((t=>this.traverseType(t,{parent:e},this.traversals.contentResource)))),e.service&&(e.service=R(e.service).map((e=>this.traverseService(e)))),e.services&&(e.services=R(e.services).map((t=>this.traverseService(t,e)))),e.logo&&(e.logo=e.logo.map((t=>this.traverseType(t,{parent:e},this.traversals.contentResource)))),e.homepage&&(e.homepage=e.homepage.map((t=>this.traverseType(t,{parent:e},this.traversals.contentResource)))),e.partOf&&(e.partOf=e.partOf.map((t=>"string"!=typeof t&&t.type?"Canvas"===t.type?this.traverseType(t,{parent:e},this.traversals.canvas):"AnnotationCollection"===t.type?this.traverseType(t,{parent:e},this.traversals.annotationCollection):"Collection"===t.type?this.traverseType(t,{parent:e},this.traversals.collection):this.traverseType(t,{parent:e},this.traversals.contentResource):this.traverseType(t,{parent:e},this.traversals.contentResource)))),e.start&&(i(e.start)?e.start=this.traverseSpecificResource(e.start,"Canvas",e):e.start=this.traverseType(e.start,{parent:e},this.traversals.canvas)),e.rendering&&(e.rendering=e.rendering.map((t=>this.traverseType(t,{parent:e},this.traversals.contentResource)))),e.supplementary&&(e.supplementary=e.supplementary.map((t=>this.traverseType(t,{parent:e},this.traversals.contentResource)))),e}traverseCollectionItems(e){return e.items&&e.items.map((e=>"Collection"===e.type?this.traverseCollection(e):this.traverseManifest(e))),e}traverseCollection(e,t){return this.traverseType(this.traverseDescriptive(this.traverseInlineAnnotationPages(this.traverseLinking(this.traverseLinkedCanvases(this.traverseCollectionItems(e))))),{parent:t},this.traversals.collection)}traverseGeoJson(e,t){return this.traverseType(e,{parent:t},this.traversals.geoJson)}traverseNavPlace(e){return e.navPlace&&(e.navPlace=this.traverseGeoJson(e.navPlace,e)),e}traverseManifestItems(e){return e.items&&(e.items=e.items.map((e=>this.traverseCanvas(e)))),e}traverseManifestStructures(e){return e.structures&&(e.structures=e.structures.map((e=>this.traverseRange(e)))),e}traverseManifest(e,t){return this.traverseType(this._traverseManifest(e),{parent:t},this.traversals.manifest)}traverseCanvasItems(e){return e.items=(e.items||[]).map((t=>this.traverseAnnotationPage(t,e))),e}traverseInlineAnnotationPages(e){return"string"!=typeof e&&e?(e.annotations&&(e.annotations=e.annotations.map((t=>this.traverseAnnotationPage(t,e)))),e):e}traverseCanvas(e,t){return this.traverseType(this._traverseCanvas(e),{parent:t},this.traversals.canvas)}traverseAnnotationPageItems(e){return e.items&&(e.items=e.items.map((t=>this.traverseAnnotation(t,e)))),e}traverseAnnotationPage(e,t){return this.traverseType(this._traverseAnnotationPage(e),{parent:t},this.traversals.annotationPage)}traverseAnnotationBody(e){return Array.isArray(e.body)?e.body=e.body.map((t=>this.traverseContentResource(t,e))):e.body&&(e.body=this.traverseContentResource(e.body,e)),e}traverseLinkedCanvases(e){return e.placeholderCanvas&&(e.placeholderCanvas=this.traverseCanvas(e.placeholderCanvas)),e.accompanyingCanvas&&(e.accompanyingCanvas=this.traverseCanvas(e.accompanyingCanvas)),e}traverseAnnotation(e,t){return this.traverseType(this.traverseLinking(this.traverseAnnotationBody(this.traverseDescriptive(e))),{parent:t},this.traversals.annotation)}traverseContentResourceLinking(e){return"string"!=typeof e&&e?(e&&e.service&&(e.service=R(e.service||[]).map((t=>this.traverseService(t,e)))),e):e}traverseContentResource(e,t){return"Choice"===e.type&&(e.items=e.items.map((t=>this.traverseContentResource(t,e)))),i(e)?this.traverseSpecificResource(e,"ContentResource"):this.traverseType(this.traverseInlineAnnotationPages(this.traverseContentResourceLinking(e)),{parent:t},this.traversals.contentResource)}traverseSpecificResource(e,t,i){let r=e.source;return"string"==typeof e.source&&(r={id:e.source,type:t||"unknown"}),this.traverseType({...e,source:"Canvas"===t||"Canvas"===r.type?this.traverseType(r,{parent:i},this.traversals.canvas):"ContentResource"===t?this.traverseContentResource(r,{parent:i}):this.traverseUnknown(r,{parent:i,typeHint:t})},{parent:i},this.traversals.specificResource)}traverseRangeRanges(e){return e.items&&(e.items=e.items.map((t=>"string"==typeof t?this.traverseCanvas({id:t,type:"Canvas"},e):i(t)?this.traverseSpecificResource(t,"Canvas",e):"Manifest"===t.type?this.traverseManifest(t,e):this.traverseRange(t,e)))),e}traverseRange(e,t){return this.traverseType(this._traverseRange(e),{parent:t},this.traversals.range)}traverseAgent(e,t){return this.traverseType(this.traverseDescriptive(this.traverseLinking(e)),{parent:t},this.traversals.agent)}traverseType(e,t,i){return i.reduce(((e,i)=>{const r=i(e,t);return void 0!==r||this.options.allowUndefinedReturn?r:e}),e)}traverseService(e,t){const i=Object.assign({},e);return i&&i.service&&(i.service=R(i.service).map((e=>this.traverseService(e)))),this.traverseType(i,{parent:t},this.traversals.service)}traverseUnknown(e,{parent:t,typeHint:i}={}){const r=x(e,i);switch(r){case"Collection":return this.traverseCollection(e,t);case"Manifest":return this.traverseManifest(e,t);case"Canvas":return this.traverseCanvas(e,t);case"AnnotationPage":return this.traverseAnnotationPage(e,t);case"Annotation":return this.traverseAnnotation(e,t);case"ContentResource":return this.traverseContentResource(e,t);case"Range":return this.traverseRange(e,t);case"Service":return this.traverseService(e,t);case"Agent":return this.traverseAgent(e,t);default:if(i)return i;throw new Error(`Unknown or unsupported resource type of ${r}`)}}}const O=["sc:Collection","sc:Manifest","sc:Canvas","sc:AnnotationList","oa:Annotation","sc:Range","sc:Layer","sc:Sequence","oa:Choice","Service","ContentResource"];class T{constructor(e,i={}){t(this,"traversals"),t(this,"options"),this.traversals={collection:[],manifest:[],canvas:[],annotationList:[],sequence:[],annotation:[],contentResource:[],choice:[],range:[],service:[],layer:[],...e},this.options={convertPropsToArray:!0,mergeMemberProperties:!0,allowUndefinedReturn:!1,...i}}static all(e){return new T({collection:[e],manifest:[e],canvas:[e],annotationList:[e],sequence:[e],annotation:[e],contentResource:[e],choice:[e],range:[e],service:[e],layer:[e]})}traverseCollection(e){return this.traverseType(this.traverseDescriptive(this.traverseLinking(this.traverseCollectionItems(e))),this.traversals.collection)}traverseCollectionItems(e){if(this.options.mergeMemberProperties){const t=[...(e.manifests||[]).map((e=>"string"==typeof e?{"@id":e,"@type":"sc:Manifest"}:e)),...(e.collections||[]).map((e=>"string"==typeof e?{"@id":e,"@type":"sc:Collection"}:e)),...e.members||[]];delete e.collections,delete e.manifests,e.members=t}return e.manifests&&(e.manifests=e.manifests.map((e=>this.traverseManifest("string"==typeof e?{"@id":e,"@type":"sc:Manifest"}:e)))),e.collections&&(e.collections=e.collections.map((e=>this.traverseCollection("string"==typeof e?{"@id":e,"@type":"sc:Collection"}:e)))),e.members&&(e.members=e.members.map((e=>"string"==typeof e?e:this.traverseUnknown(e)))),e}traverseManifest(e){return this.traverseType(this.traverseDescriptive(this.traverseLinking(this.traverseManifestItems(e))),this.traversals.manifest)}traverseManifestItems(e){return e.sequences&&(e.sequences=e.sequences.map((e=>this.traverseSequence(e)))),e.structures&&(e.structures=e.structures.map((e=>this.traverseRange(e)))),e}traverseSequence(e){return this.traverseType(this.traverseDescriptive(this.traverseLinking(this.traverseSequenceItems(e))),this.traversals.sequence)}traverseSequenceItems(e){return e.canvases&&(e.canvases=e.canvases.map((e=>this.traverseCanvas(e)))),e}traverseCanvas(e){return this.traverseType(this.traverseDescriptive(this.traverseLinking(this.traverseCanvasItems(e))),this.traversals.canvas)}traverseCanvasItems(e){return e.images&&(e.images=e.images.map((e=>this.traverseAnnotation(e)))),e.otherContent&&(e.otherContent=e.otherContent.map((e=>this.traverseAnnotationList(e)))),e}traverseRange(e){return this.traverseType(this.traverseDescriptive(this.traverseLinking(this.traverseRangeItems(e))),this.traversals.range)}traverseRangeItems(e){if(this.options.mergeMemberProperties){const t=[...(e.ranges||[]).map((e=>"string"==typeof e?{"@id":e,"@type":"sc:Range"}:e)),...(e.canvases||[]).map((e=>"string"==typeof e?{"@id":e,"@type":"sc:Canvas"}:e)),...e.members||[]];delete e.ranges,delete e.canvases,e.members=t.length?t.map((e=>this.traverseUnknown(e))):void 0}return e}traverseAnnotationList(e){const t="string"==typeof e?{"@id":e,"@type":"sc:AnnotationList"}:e;return this.traverseType(this.traverseDescriptive(this.traverseAnnotationListItems(t)),this.traversals.annotationList)}traverseAnnotationListItems(e){return e.resources&&(e.resources=e.resources.map((e=>this.traverseAnnotation(e)))),e}traverseAnnotation(e){return this.traverseType(this.traverseDescriptive(this.traverseLinking(this.traverseAnnotationItems(e))),this.traversals.annotation)}traverseAnnotationItems(e){return e.resource&&(Array.isArray(e.resource)?e.resource=e.resource.map((e=>this.traverseContentResource(e))):e.resource=this.traverseContentResource(e.resource)),e.on,e}traverseLayer(e){return this.traverseType(this.traverseLinking(this.traverseLayerItems(e)),this.traversals.layer)}traverseLayerItems(e){return e.otherContent&&(e.otherContent=e.otherContent.map((e=>this.traverseAnnotationList(e)))),e}traverseChoice(e){return this.traverseType(this.traverseChoiceItems(e),this.traversals.choice)}traverseChoiceItems(e){return e.default&&"rdf:nil"!==e.default&&(e.default=this.traverseContentResource(e.default)),e.item&&"rdf:nil"!==e.item&&(e.item=e.item.map((e=>this.traverseContentResource(e)))),e}traverseService(e){return this.traverseType(this.traverseLinking(e),this.traversals.service)}traverseContentResource(e){return"oa:Choice"===e["@type"]?this.traverseChoice(e):this.traverseType(this.traverseDescriptive(this.traverseLinking(e)),this.traversals.contentResource)}traverseUnknown(e){if(!e["@type"]||"string"==typeof e)return e;switch(function(e){if(null==e)throw new Error("Null or undefined is not a valid entity.");if(Array.isArray(e))throw new Error("Array is not a valid entity");if("object"!=typeof e)throw new Error(typeof e+" is not a valid entity");if("string"==typeof e["@type"]){const t=O.indexOf(e["@type"]);if(-1!==t)return O[t]}if(e.profile)return"Service";if(e.format)return"ContentResource";if(e["@type"])return"ContentResource";throw new Error("Resource type is not known")}(e)){case"sc:Collection":return this.traverseCollection(e);case"sc:Manifest":return this.traverseManifest(e);case"sc:Canvas":return this.traverseCanvas(e);case"sc:Sequence":return this.traverseSequence(e);case"sc:Range":return this.traverseRange(e);case"oa:Annotation":return this.traverseAnnotation(e);case"sc:AnnotationList":return this.traverseAnnotationList(e);case"sc:Layer":return this.traverseLayer(e);case"Service":return this.traverseService(e);case"oa:Choice":return this.traverseChoice(e);case"ContentResource":return this.traverseContentResource(e)}return e.profile?this.traverseService(e):e}traverseImageResource(e){const t=Array.isArray(e),i=Array.isArray(e)?e:[e],r=[];for(const n of i)"string"==typeof n?r.push(this.traverseContentResource({"@id":n,"@type":"dctypes:Image"})):r.push(this.traverseContentResource(n));return t||this.options.convertPropsToArray?r:r[0]}traverseDescriptive(e){return e.thumbnail&&(e.thumbnail=this.traverseImageResource(e.thumbnail)),e.logo&&(e.logo=this.traverseImageResource(e.logo)),e}traverseOneOrMoreServices(e){const t=Array.isArray(e),i=Array.isArray(e)?e:[e],r=[];for(const n of i)r.push(this.traverseService(n));return t||this.options.convertPropsToArray?r:r[0]}traverseLinking(e){return e.related&&(e.related=this.traverseOneOrManyType(e.related,this.traversals.contentResource)),e.rendering&&(e.rendering=this.traverseOneOrManyType(e.rendering,this.traversals.contentResource)),e.service&&(e.service=this.traverseOneOrMoreServices(e.service)),e.seeAlso&&(e.seeAlso=this.traverseOneOrManyType(e.seeAlso,this.traversals.contentResource)),e.within&&("string"==typeof e.within||(e.within=this.traverseOneOrManyType(e.within,this.traversals.contentResource))),e.startCanvas&&("string"==typeof e.startCanvas?e.startCanvas=this.traverseType({"@id":e.startCanvas,"@type":"sc:Canvas"},this.traversals.canvas):e.startCanvas&&this.traverseType(e.startCanvas,this.traversals.canvas)),e.contentLayer&&("string"==typeof e.contentLayer?e.contentLayer=this.traverseLayer({"@id":e.contentLayer,"@type":"sc:Layer"}):e.contentLayer=this.traverseLayer(e.contentLayer)),e}traverseOneOrManyType(e,t){if(!Array.isArray(e)){if(!this.options.convertPropsToArray)return this.traverseType(e,t);e=[e]}return e.map((e=>this.traverseType(e,t)))}traverseType(e,t){return t.reduce(((e,t)=>{const i=t(e);return void 0!==i||this.options.allowUndefinedReturn?i:e}),e)}}const L=["http://iiif.io/api/image/2/level1","http://iiif.io/api/image/2/level2","http://library.stanford.edu/iiif/image-api/compliance.html#level1","http://library.stanford.edu/iiif/image-api/compliance.html#level2","http://library.stanford.edu/iiif/image-api/conformance.html#level1","http://library.stanford.edu/iiif/image-api/conformance.html#level2","http://library.stanford.edu/iiif/image-api/1.1/compliance.html#level1","http://library.stanford.edu/iiif/image-api/1.1/compliance.html#level2","http://library.stanford.edu/iiif/image-api/1.1/conformance.html#level1","http://library.stanford.edu/iiif/image-api/1.1/conformance.html#level2","http://iiif.io/api/image/1/level1.json","http://iiif.io/api/image/1/profiles/level1.json","http://iiif.io/api/image/1/level2.json","http://iiif.io/api/image/1/profiles/level2.json","http://iiif.io/api/image/2/level1.json","http://iiif.io/api/image/2/profiles/level1.json","http://iiif.io/api/image/2/level2.json","http://iiif.io/api/image/2/profiles/level2.json","level1","level2"],k=["http://iiif.io/api/image/2/level0","http://iiif.io/api/image/2/level1","http://iiif.io/api/image/2/level2","http://library.stanford.edu/iiif/image-api/compliance.html#level0","http://library.stanford.edu/iiif/image-api/compliance.html#level1","http://library.stanford.edu/iiif/image-api/compliance.html#level2","http://library.stanford.edu/iiif/image-api/conformance.html#level0","http://library.stanford.edu/iiif/image-api/conformance.html#level1","http://library.stanford.edu/iiif/image-api/conformance.html#level2","http://library.stanford.edu/iiif/image-api/1.1/compliance.html#level0","http://library.stanford.edu/iiif/image-api/1.1/compliance.html#level1","http://library.stanford.edu/iiif/image-api/1.1/compliance.html#level2","http://library.stanford.edu/iiif/image-api/1.1/conformance.html#level0","http://library.stanford.edu/iiif/image-api/1.1/conformance.html#level1","http://library.stanford.edu/iiif/image-api/1.1/conformance.html#level2","http://iiif.io/api/image/1/level0.json","http://iiif.io/api/image/1/profiles/level0.json","http://iiif.io/api/image/1/level1.json","http://iiif.io/api/image/1/profiles/level1.json","http://iiif.io/api/image/1/level2.json","http://iiif.io/api/image/1/profiles/level2.json","http://iiif.io/api/image/2/level0.json","http://iiif.io/api/image/2/profiles/level0.json","http://iiif.io/api/image/2/level1.json","http://iiif.io/api/image/2/profiles/level1.json","http://iiif.io/api/image/2/level2.json","http://iiif.io/api/image/2/profiles/level2.json","level0","level1","level2"];function I(e){for(const t in e)void 0!==e[t]&&null!==e[t]||delete e[t];return e}const P="Attribution",M="http://example.org/provider",D="Unknown";function q(e,t="none"){if(!e)return{};const i=Array.isArray(e)?e:[e],r={};for(const n of i){if("string"==typeof n){r[t]=r[t]?r[t]:[],r[t].push(n||"");continue}if(!n["@language"]){r[t]=r[t]?r[t]:[],r[t].push(n["@value"]||"");continue}const e=n["@language"];r[e]=r[e]?r[e]:[],r[e].push(n["@value"]||"")}return r}function E(e){return Array.isArray(e)?E(e.find((e=>"string"==typeof e))):-1!==k.indexOf(e)?"level2":-1!==L.indexOf(e)?"level1":"string"==typeof e?e:void 0}function U(e){for(const t of["sc","oa","dcterms","dctypes","iiif"])if(e.startsWith(`${t}:`))return e.slice(t.length+1);return e}const $=["Collection","Manifest","Annotation","AnnotationPage","Range","Service"];function _(e){const t=e["@id"]||e.id;let i=e["@type"]||e.type;const r=e.profile||void 0,n=e["@context"]||void 0;if(r){const e=function(e){switch(e){case"http://iiif.io/api/image/2/level0.json":case"http://iiif.io/api/image/2/level1.json":case"http://iiif.io/api/image/2/level2.json":return"ImageService2";case"http://iiif.io/api/auth/1/kiosk":case"http://iiif.io/api/auth/1/login":case"http://iiif.io/api/auth/1/clickthrough":case"http://iiif.io/api/auth/1/external":case"http://iiif.io/api/auth/0/kiosk":case"http://iiif.io/api/auth/0/login":case"http://iiif.io/api/auth/0/clickthrough":case"http://iiif.io/api/auth/0/external":return"AuthCookieService1";case"http://iiif.io/api/auth/1/token":case"http://iiif.io/api/auth/0/token":return"AuthTokenService1";case"http://iiif.io/api/auth/1/logout":case"http://iiif.io/api/auth/0/logout":return"AuthLogoutService1";case"http://iiif.io/api/search/1/search":case"http://iiif.io/api/search/0/search":return"SearchService1";case"http://iiif.io/api/search/1/autocomplete":case"http://iiif.io/api/search/0/autocomplete":return"AutoCompleteService1"}}(r);if(e)return e}if(n){const e=function(e){const t=Array.isArray(e)?e:[e];for(const i of t)switch(i){case"http://iiif.io/api/image/2/context.json":case"http://library.stanford.edu/iiif/image-api/1.1/compliance.html#level2":return"ImageService2";case"http://iiif.io/api/image/1/context.json":case"http://library.stanford.edu/iiif/image-api/1.1/context.json":return"ImageService1";case"http://iiif.io/api/annex/openannotation/context.json":return"ImageApiSelector"}}(n);if(e)return e}if(i){if(Array.isArray(i)){if(-1!==i.indexOf("oa:CssStylesheet"))return"CssStylesheet";if(-1!==i.indexOf("cnt:ContentAsText"))return"TextualBody";i=i[0]}for(const e of["sc","oa","dcterms","dctypes","iiif"])if(i.startsWith(`${e}:`)){i=i.slice(e.length+1);break}switch(i){case"Layer":return"AnnotationCollection";case"AnnotationList":return"AnnotationPage";case"cnt:ContentAsText":return"TextualBody"}}if(i&&-1!==$.indexOf(i))return i;if(e.format){if(e.format.startsWith("image/"))return"Image";if(e.format.startsWith("text/"))return"Text";if("application/pdf"===e.format)return"Text";if(e.format.startsWith("application/"))return"Dataset"}return t&&(t.endsWith(".jpg")||t.endsWith(".png")||t.endsWith(".jpeg"))?"Image":i||"unknown"}const W=/http(s)?:\/\/(creativecommons.org|rightsstatements.org)[^"'\\<\n]+/gm;function H(e){const t=e.match(W);return t?t[0]:e}const F=["http://iiif.io/api/presentation/2/context.json","http://iiif.io/api/image/2/context.json","http://iiif.io/api/image/1/context.json","http://library.stanford.edu/iiif/image-api/1.1/context.json","http://iiif.io/api/search/1/context.json","http://iiif.io/api/search/0/context.json","http://iiif.io/api/auth/1/context.json","http://iiif.io/api/auth/0/context.json","http://iiif.io/api/annex/openannotation/context.json"];function N(e){if(e){const t=Array.isArray(e)?e:[e],i=[];for(const e of t)"http://iiif.io/api/presentation/2/context.json"===e&&i.push("http://iiif.io/api/presentation/3/context.json"),-1===F.indexOf(e)&&i.push(e);if(t.length)return 1===i.length?i[0]:i}}let z=0;function J(e,t){const i=encodeURI(e.id||e["@id"]||"").trim();return i&&t?`${i}/${t}`:i||(z++,`http://example.org/${e["@type"]}${t?`/${t}`:""}/${z}`)}function B(e){const t=[...e.behavior||[]];let i;return e.viewingHint&&t.push(e.viewingHint),Array.isArray(e.motivation)?i=e.motivation.map(U):e.motivation&&(i=U(e.motivation)),{"@context":e["@context"]?N(e["@context"]):void 0,id:(e["@id"]||J(e)).trim(),type:_(e),behavior:t.length?t:void 0,height:e.height?e.height:void 0,width:e.width?e.width:void 0,motivation:i,viewingDirection:e.viewingDirection,profile:e.profile,format:e.format?e.format:void 0,duration:void 0,timeMode:void 0}}function G(e){const[t,i]=function(e,t="Rights/License",i="none"){let r=null;const n=[],s=Array.isArray(e)?e:[e];for(const a of s){const e=a?H(a):void 0;!e||-1===e.indexOf("creativecommons.org")&&-1===e.indexOf("rightsstatements.org")?e&&n.push({label:{[i]:[t]},value:{[i]:[e]}}):r=e.startsWith("https://")?`http://${e.slice(8)}`:e}return[r,n]}(e.license),r=[...e.metadata?(n=e.metadata,n?n.map((e=>({label:q(e.label),value:q(e.value)}))):[]):[],...i];var n;return{rights:t,metadata:r.length?r:void 0,label:e.label?q(e.label):void 0,requiredStatement:e.attribution?{label:q(P),value:q(e.attribution)}:void 0,navDate:e.navDate,summary:e.description?q(e.description):void 0,thumbnail:V(e.thumbnail)}}function V(e){if(e){return(Array.isArray(e)?e:[e]).map((e=>"string"==typeof e?{id:e,type:"Image"}:("unknown"===e.type&&(e.type="Image"),e)))}return e}function X(e){if(!e.within)return;const t=Array.isArray(e.within)?e.within:[e.within],i=[];for(const r of t)if("string"==typeof r){if(r&&"sc:Manifest"===e["@type"])i.push({id:r,type:"Collection"})}else r["@id"]&&i.push({id:r["@id"],type:_(r)});return i.length?i:void 0}function Y(e){const t=e.related?Array.isArray(e.related)?e.related:[e.related]:[],i=e.contentLayer;return{provider:e.logo||t.length?[{id:M,type:"Agent",homepage:t.length?[t[0]]:void 0,logo:e.logo?Array.isArray(e.logo)?e.logo:[e.logo]:void 0,label:q(D)}]:void 0,partOf:X(e),rendering:e.rendering,seeAlso:e.seeAlso,start:e.startCanvas,service:e.service?R(e.service):void 0,supplementary:i?[i]:void 0}}function K(e){const t=e;return I({...B(t),...G(t),...Y(t),...(i=t,{chars:i.chars,format:i.format?i.format:void 0,language:i.language})});var i}const Q=new T({collection:[function(e){return I({...B(e),...G(e),...Y(e),items:e.members})}],manifest:[function(e){const t=[],i=[];let r;for(const s of e.sequences||[])s.canvases.length&&t.push(...s.canvases),s.behavior&&i.push(...s.behavior),s.startCanvas&&(r=s.startCanvas);const n=B(e);return i.length&&(n.behavior?n.behavior.push(...i):n.behavior=i),I({...n,...G(e),...Y(e),start:r,items:t,structures:e.structures})}],canvas:[function(e){return I({...B(e),...G(e),...Y(e),annotations:e.otherContent&&e.otherContent.length?e.otherContent:void 0,items:e.images&&e.images.length?[{id:J(e,"annotation-page"),type:"AnnotationPage",items:e.images}]:void 0})}],annotationList:[function(e){return I({...B(e),...G(e),...Y(e),items:e.resources&&e.resources.length?e.resources:void 0})}],sequence:[function(e){return e.canvases&&0!==e.canvases.length?{canvases:e.canvases,behavior:e.viewingHint?[e.viewingHint]:[],startCanvas:e.startCanvas}:{canvases:[],behavior:[]}}],annotation:[function(e){return I({...B(e),...G(e),...Y(e),target:function e(t){if(Array.isArray(t)){if(t.length>1)return{type:"List",items:t.map(e)};t=t[0]}if("string"==typeof t)return encodeURI(t).trim();if("@type"in t){let e;if("string"==typeof t.full)e=t.full;else if("dctypes:Image"===t.full["@type"])e={id:t.full["@id"],type:"Image"};else{if("sc:Canvas"!==t.full["@type"])throw new Error(`Unsupported source type on annotation: ${t.full["@type"]}`);e={id:t.full["@id"],type:"Canvas"}}return{type:"SpecificResource",source:e,selector:Z(t.selector)}}return encodeURI(t["@id"]).trim()}(e.on),body:Array.isArray(e.resource)?e.resource.map(K):K(e.resource)})}],contentResource:[K],choice:[function(e){const t=[];return e.default&&"rdf:nil"!==e.default&&t.push(e.default),e.item&&"rdf:nil"!==e.item&&t.push(...e.item),{...B(e),...G(e),items:t}}],range:[function(e){return I({...B(e),...G(e),...Y(e),items:e.members})}],service:[function(e){const{"@id":t,"@type":i,"@context":r,profile:n,...s}=e,a={};return t&&(a["@id"]=t),a["@type"]=_(e),"unknown"===a["@type"]&&(r&&r.length&&(a["@context"]=r),a["@type"]="Service"),n&&(a.profile=E(n)),I({...a,...s})}],layer:[function(e){return I({...B(e),...G(e),...Y(e)})}]});function Z(e){if((Array.isArray(e["@type"])&&e["@type"].includes("oa:SvgSelector")||"oa:SvgSelector"==e["@type"])&&("chars"in e||"value"in e))return{type:"SvgSelector",value:"chars"in e?e.chars:e.value};if("oa:FragmentSelector"===e["@type"])return{type:"FragmentSelector",value:e.value};if("oa:Choice"===e["@type"])return[Z(e.default),...(Array.isArray(e.item)?e.item:[e.item]).map(Z)];if("iiif:ImageApiSelector"==e["@type"])return{type:"ImageApiSelector",region:"region"in e?e.region:void 0,rotation:"rotation"in e?e.rotation:void 0};throw new Error(`Unsupported selector type: ${e["@type"]}`)}function ee(e,t={}){if(Array.isArray(e))return ee(e[0]);if("string"==typeof e){const[i,r]=e.split("#");return r?{type:"SpecificResource",source:{id:i,type:t.typeHint||"Unknown"},selector:{type:"FragmentSelector",value:r}}:{type:"SpecificResource",source:{id:i,type:t.typeMap&&t.typeMap[i]||t.typeHint||"Unknown"}}}if("Choice"===e.type||"List"===e.type||"Composite"===e.type||"Independents"===e.type)return ee(e.items[0]);if("SpecificResource"===e.type)return"Canvas"===e.source.type&&e.source.partOf&&"string"==typeof e.source.partOf&&(e.source.partOf=[{id:e.source.partOf,type:"Manifest"}]),e.selector?{type:"SpecificResource",source:e.source,selector:e.selector}:{type:"SpecificResource",source:e.source};if(e.id){"Canvas"===e.type&&e.partOf&&"string"==typeof e.partOf&&(e.partOf=[{id:e.partOf,type:"Manifest"}]);const[t,i]=e.id.split("#");return i?{type:"SpecificResource",source:{...e,id:t},selector:{type:"FragmentSelector",value:i}}:{type:"SpecificResource",source:{...e,id:t}}}return{type:"SpecificResource",source:e}}function te(){return{Collection:{},Manifest:{},Canvas:{},AnnotationPage:{},AnnotationCollection:{},Annotation:{},ContentResource:{},Range:{},Service:{},Selector:{},Agent:{}}}function ie(e,t){if("string"==typeof e)return{id:e,type:t};if(!e.id)throw new Error(`Invalid resource does not have an ID (${JSON.stringify(e)}, ${t})`);return e}function re(e,t,i){if(!t)return e;if(Array.isArray(e)){if(!Array.isArray(t))throw new Error("Cannot merge array with non-array");const i=[...e];for(const r of t)if(r["@id"]&&!r.id&&(r.id=r["@id"]),r["@type"]&&!r.type&&(r.type=r["@type"]),null!=r)if(Array.isArray(r))i.push(r);else if("object"==typeof r&&r.id&&r.type){const e=i.findIndex((e=>e.id===r.id&&e.type===r.type));e>=0&&(i[e]=re(i[e],r))}else-1===e.indexOf(r)&&i.push(r);return i}if("object"==typeof e){if(Array.isArray(t)||"object"!=typeof t)throw new Error("Cannot merge object with non-object");const r={...e},o=[],c=[],l=Object.keys(e).filter((e=>e!==s&&"id"!==e&&"type"!==e)),u={},v={};for(const[e,i]of Object.entries(t)){if(e===s||"id"===e||"type"===e)continue;const t=r[e];t===i?c.push(e):t!==p&&t?(t&&i&&(u[e]=t,v[e]=i),r[e]=re(t,i),r[e]===u[e]&&(c.push(e),delete u[e])):(o.push(e),r[e]=i)}if(i&&(i.parent&&i.parent.id||i.isTopLevel)){const t=[],p={};if(i.parent?p[a]=i.parent.id:i.isTopLevel&&(p[a]=e.id),r[s]&&r[s].length){const e=!(r[s]||[]).find((e=>e["@explicit"])),i=o.length>0||c.length!==l.length;if(e&&i)for(const a of r[s]){const e={...a},i=Object.keys(u);if(e){e["@explicit"]=!0;for(const t of l)t!==s&&(e[t]=n);for(const t of i)e[t]=u[t]}t.push(e)}else t.push(...r[s]);if(i){const e=Object.keys(v);p["@explicit"]=!0;for(const t of o)p[t]=n;for(const t of c)p[t]=n;for(const t of e)p[t]=v[t]}}p.id=r.id,p.type=r.type,t.push(p),r[s]=t}return r}return e||t}function ne(e,t,i){if("string"==typeof e)return e;if(t.id!==e.id||t.type!==e.type){if("ImageService3"===t.type)return t;if("ImageService3"===e.type)return e;throw new Error(`Can only merge entities with identical identifiers and type! ${t.type}(${t.id}) => ${e.type}(${e.id})`)}return re({...e},t,i)}function se(e){return t=>{e.Service=e.Service?e.Service:{};const i=t.id||t["@id"],r=function(e){const t=Object.assign({},e);if(t["@id"]&&(t.id=t["@id"]),t["@type"]&&(t.type=t["@type"]),t.service){const e=[];t.service=Array.isArray(t.service)?t.service:[t.service];for(const i of t.service)e.push({id:i["@id"]||i.id,type:i["@type"]||i.type});t.service=e}return Object.assign({},b,t)}(t);return r&&r.id&&(e.Service[r.id]?e.Service[i]=ne(e.Service[i],r):e.Service[i]=r),t}}function ae(e){const t=JSON.stringify(e);let i=5381,r=t.length;for(;r;)i=33*i^t.charCodeAt(--r);const n=(i>>>0).toString(16);return n.length%2?"0"+n:n}function oe(e){return t=>"string"==typeof t?{id:t,type:e}:t.id?t.type?t:{type:e,...t}:{id:`vault://${ae(t)}`,type:e,...t}}function ce(e){return t=>({...e,...t})}function le(e){return Array.isArray(e)?e:[e]}function pe(e){return e.body&&(e.body=le(e.body)),e.seeAlso&&(e.seeAlso=le(e.seeAlso)),e.audience&&(e.audience=le(e.audience)),e.accessibility&&(e.accessibility=le(e.accessibility)),e.motivation&&(e.motivation=le(e.motivation)),e}function ue(e,{typeHint:t,partOfTypeHint:r}={}){if("string"==typeof e&&(e={id:e,type:t||"unknown"}),i(e))return"string"==typeof e.source&&(e.source={id:e.source,type:t||"unknown"}),"Canvas"===e.source.type&&e.source.partOf&&"string"==typeof e.source.partOf&&(e.source.partOf=[{id:e.source.partOf,type:r||"Manifest"}]),e;let n;if(-1!==(e.id||"").indexOf("#")){const[t,i]=(e.id||"").split("#");e.id=t,i&&(n={type:"FragmentSelector",value:i})}return{type:"SpecificResource",source:e,selector:n}}function ve(e){const t=Object.assign({},e);return e&&e.items&&(t.items=e.items.map((e=>"string"==typeof e||"Canvas"===e.type?ue(e):e))),t}function fe(e){const t=Object.assign({},e);return t.start?(t.start=ue(t.start,{typeHint:"Canvas"}),t):e}function he(e){const t=Object.assign({},e);return t.target?(t.target=ee(t.target,{typeHint:"Canvas"}),t):e}function ye(e){return e}function de(e){return void 0===e.items&&(e[o]=!0),e}function me(e){const t={};for(const[i,r]of e){if(i===l&&r!==c)return r;r!==c&&null!=r&&(t[i]=r)}return t}function ge(e,{allowSourceString:t=!0,allowString:i=!1,allowedStringType:r}={}){const n=e=>{if(t&&e&&e.source&&"string"!=typeof e.source){const t=Object.keys(e.source);if(e.source.id&&e.source.type&&2===t.length)return{...e,source:e.source.id}}return e};if(e){if(e.source&&e.source.partOf)return n(e);const t=Object.keys(e);if(2===t.length&&e.type&&e.source||3===t.length&&e.type&&e.source&&-1!==t.indexOf("selector")&&!e.selector)return!i||r&&r!==e.source.type?"ContentResource"===e.source.type?{type:"SpecificResource",source:e.source.id}:e.source:e.source.id;if(e.selector&&!Array.isArray(e.selector)&&"string"!=typeof e.selector&&"FragmentSelector"===e.selector.type){const t=`${e.source.id}#${e.selector.value}`;return i?t:{id:t,type:e.source.type}}}return n(e)}function Ae(e){if(!e)return;const t=Object.keys(e);if(0!==t.length){if(1===t.length){const i=t[0];if(!i)return"";const r=(e[i]||[]).join("");return"@none"===i||"none"===i||"en"===i?r:{"@language":i,"@value":r}}return t.map((t=>({"@language":t,"@value":(e[t]||[]).join("")})))}}function Ce(e){return Array.isArray(e)?e.map((e=>Ce(e))):"string"==typeof e?e:e.type&&"Canvas"===e.type?e.id:e}function be(e,t=!1){if(e)return e.length>1&&!t?e:e[0]||void 0}function Re(e){if(e){if("string"==typeof e)return{"@id":e};if("@id"in e){const t={...e};return delete t["@type"],t}return{"@context":"http://iiif.io/api/image/2/context.json","@id":e.id,profile:`http://iiif.io/api/image/2/profiles/${e.profile}.json`}}}function Se(e,t){return[["@id",e.id],["@type",t],["format",e.format],["height",e.height],["width",e.width],["viewingDirection","left-to-right"!==e.viewingDirection?e.viewingDirection:void 0],["license",e.license?e.license:void 0]]}function*we(e){const t=e.provider?yield e.provider[0]:void 0;return[["label",Ae(e.label)],["metadata",e.metadata&&e.metadata.length?e.metadata.map((e=>({label:Ae(e.label)||"",value:Ae(e.value)||""}))):void 0],["description",Ae(e.summary)],["thumbnail",be(yield e.thumbnail)],["navDate",e.navDate],["logo",t?be(t.logo):void 0],["homepage",t?t.homepage:void 0],["attribution",e.requiredStatement?Ae(e.requiredStatement.value):void 0]]}function*xe(e){const t=e.start&&e.start.type&&"SpecificResource"===e.start.type?ge(e.start):e.start;return[["seeAlso",be(yield e.seeAlso)],["service",be((e.service||[]).map(Re))],["rendering",be(yield e.rendering)],["startCanvas",t?t.id:void 0]]}function je(e){if(e&&function(e){return"SpecificResource"===e.type}(e)){let t=e.id;const i=e.selector?Array.isArray(e.selector)?e.selector[0]:e.selector:void 0;return function(e){return e&&"FragmentSelector"===e.type}(i)&&(t+="#"+i.value),t}return null==e?void 0:e.id}const Oe={Manifest:function*(e,t,{isTopLevel:i}){return[...i?[["@context","http://iiif.io/api/presentation/2/context.json"]]:[],...Se(e,"sc:Manifest"),...yield*we(e),...yield*xe(e),["sequences",[{"@id":`${e.id}/sequence0`,"@type":"sc:Sequence",canvases:yield e.items}]],["structures",yield e.structures]]},Canvas:function*(e){const t=(yield e.items)[0];return[...Se(e,"sc:Canvas"),...yield*we(e),...yield*xe(e),["images",t?[t.resources]:void 0],["annotations",e.annotations&&e.annotations.length?be(yield e.annotations):void 0]]},AnnotationPage:function*(e){return[...Se(e,"sc:AnnotationList"),...yield*we(e),["resources",e.items&&e.items.length?be(yield e.items):void 0]]},Annotation:function*(e){return[["@id",e.id],["@type","oa:Annotation"],["motivation","sc:painting"],["on",Ce(e.target)],["resource",be(yield e.body,!0)]]},ContentResource:function*(e){return"Image"===e.type?[...Se(e,"dctypes:Image"),...yield*we(e),...yield*xe(e)]:[...Se(e,void 0),...yield*we(e)]},AnnotationCollection:function*(e){return[["@id",e.id],["@type","sc:Layer"],["label",Ae(e.label)]]},Collection:function*(e){return[...Se(e,"sc:Collection"),...yield*we(e),...yield*xe(e),["members",yield*e.items]]},Range:function*(e){const t=[],i=[];if(e.items)for(const r of e.items){const n="SpecificResource"===r.type?r.source:r;if(n){const s=yield n;t.push({"@id":je(r),"@type":n.type,label:s?s.label:void 0,within:e.id}),"Canvas"===n.type&&i.push(n.id)}}return[...Se(e,"sc:Range"),...yield*we(e),...yield*xe(e),["canvases",i.length===t.length?i:void 0],["members",i.length!==t.length?t:void 0]]}};function Te(e){var t;return[["id",(null==(t=e.id)?void 0:t.startsWith("vault://"))?void 0:e.id],["type",e.type],["format",e.format],["profile",e.profile],["height",e.height||void 0],["width",e.width||void 0],["duration",e.duration||void 0],["viewingDirection","left-to-right"!==e.viewingDirection?e.viewingDirection:void 0],["behavior",e.behavior&&e.behavior.length?e.behavior:void 0],["timeMode",e.timeMode],["motivation",Array.isArray(e.motivation)?e.motivation[0]:e.motivation],[s,c]]}function Le(e){if(e===c)return;if(!e||0===e.length)return;const t=e.filter((e=>e!==c));return 0!==t.length?t:void 0}function ke(e){if(e&&e.type&&"ImageService2"===e.type){const{id:t,type:i,profile:r,...n}=e,s="string"==typeof r?r:Array.isArray(r)?r.find((e=>"string"==typeof e)):"";return{"@id":t,"@type":i,profile:s?s.startsWith("http")?s:`http://iiif.io/api/image/2/${s}.json`:"http://iiif.io/api/image/2/level0.json",...n}}return e}function Ie(e){if(Array.isArray(e)||(e=e?[e]:[]),e&&0!==e.length)return e.map(ke)}function*Pe(e){return[["label",e.label],["metadata",Le(e.metadata)],["summary",e.summary],["requiredStatement",e.requiredStatement],["rights",Array.isArray(e.rights)?e.rights[0]||void 0:e.rights||void 0],["navDate",e.navDate],["language",e.language],["thumbnail",Le(yield e.thumbnail)],["placeholderCanvas",yield e.placeholderCanvas],["accompanyingCanvas",yield e.accompanyingCanvas],["provider",Le(yield e.provider)]]}function*Me(e){return[["seeAlso",Le(yield e.seeAlso)],["service",Le(Ie(e.service))],["services",Le(Ie(e.services))],["rendering",Le(yield e.rendering)],["supplementary",Le(yield e.supplementary)],["homepage",Le(yield e.homepage)],["logo",Le(yield e.logo)],["partOf",Le(yield e.partOf)],["start",e.start?ge(e.start):e.start]]}const De={Manifest:function*(e,t,{isTopLevel:i}){return i?[["@context",e["@context"]?e["@context"]:"http://iiif.io/api/presentation/3/context.json"],...Te(e),...yield*Pe(e),...yield*Me(e),["items",yield e.items],["structures",Le(yield e.structures)],["annotations",Le(yield e.annotations)],["navPlace",e.navPlace]]:[...Te(e),...yield*Pe(e)]},Canvas:function*(e){return[...Te(e),...yield*Pe(e),...yield*Me(e),["items",yield e.items],["annotations",Le(yield e.annotations)],["navPlace",e.navPlace]]},Agent:function*(e){return[["id",e.id],["type","Agent"],["label",e.label],...yield*Me(e)]},AnnotationPage:function*(e){var t;const i=Object.entries(e).map((([e,t])=>[e,Array.isArray(t)?Le(t):t])).filter((([e,t])=>"items"!==e&&"id"!==e&&e!==s&&e!==a&&e!==o)),r=yield e.items;return[["id",(null==(t=e.id)?void 0:t.startsWith("vault://"))?void 0:e.id],...i,...yield*Me(e),["items",r.length||!1===e[o]?r:c]]},Service:function*(e){return[[l,ke(e)]]},Annotation:function*(e){const t=Object.entries(e).map((([e,t])=>"motivation"===e?[e,Array.isArray(t)?t[0]:t]:"target"===e?[e,ge(t,{allowString:!0,allowSourceString:!0,allowedStringType:"Canvas"})]:[e,Array.isArray(t)?Le(t):t])).filter((([e])=>"body"!==e&&e!==s&&e!==o));let r;if(Array.isArray(e.body)){const t=[];for(const r of e.body)if(r&&i(r)){const e={...r};e.source=yield r.source,t.push(ge(e,{allowSourceString:!0}))}else t.push(yield r);r=t}else e.body&&i(e.body)?(r={...e.body},r.source=yield e.body.source):r=yield e.body;return[...t,...yield*Pe(e),...yield*Me(e),["body",1===r.length?r[0]:r]]},ContentResource:function*(e){return function(e,t){const i=Object.keys(t),r=e.map((([e])=>e));for(const n of i)n!==s&&n!==o&&-1===r.indexOf(n)&&void 0!==t[n]&&e.push([n,t[n]]);return e}([...Te(e),...yield*Pe(e),...yield*Me(e),["annotations",Le(yield e.annotations)],["items",Le(yield e.items)]],e)},AnnotationCollection:function*(e){return[["id",e.id],["type","AnnotationCollection"],["label",e.label]]},Collection:function*(e,t,{isTopLevel:i}){return i?[["@context","http://iiif.io/api/presentation/3/context.json"],...Te(e),...yield*Pe(e),...yield*Me(e),["items",Le(yield e.items)],["navPlace",e.navPlace]]:[...Te(e),...yield*Pe(e)]},Range:function*(e){const t=[];for(const i of e.items)"Range"===i.type?t.push(yield i):i&&"SpecificResource"===i.type?t.push(ge(i)):t.push(i);return[...Te(e),...yield*Pe(e),...yield*Me(e),["items",t],["annotations",Le(yield e.annotations)],["navPlace",e.navPlace]]}};exports.EMPTY=p,exports.HAS_PART=s,exports.IS_EXTERNAL=o,exports.PART_OF=a,exports.Traverse=j,exports.UNSET=c,exports.UNWRAP=l,exports.WILDCARD=n,exports.addFlagForExternalResource=de,exports.compressSpecificResource=ge,exports.defaultEntities={Collection:{},Manifest:{},Canvas:{},AnnotationPage:{},AnnotationCollection:{},Annotation:{},ContentResource:{},Range:{},Service:{},Selector:{},Agent:{}},exports.emptyAgent=C,exports.emptyAnnotation=h,exports.emptyAnnotationPage=y,exports.emptyCanvas=d,exports.emptyCollection=m,exports.emptyManifest=g,exports.emptyRange=A,exports.emptyService=b,exports.frameResource=v,exports.getDefaultEntities=te,exports.identifyResource=x,exports.isSpecificResource=i,exports.isWildcard=u,exports.languageString2to3=Ae,exports.merge=re,exports.mergeEntities=ne,exports.normalize=function(e){const t=function(e){return e&&e["@context"]&&("http://iiif.io/api/presentation/2/context.json"===e["@context"]||-1!==e["@context"].indexOf("http://iiif.io/api/presentation/2/context.json")||"http://www.shared-canvas.org/ns/context.json"===e["@context"])||"http://iiif.io/api/image/2/context.json"===e["@context"]?Q.traverseUnknown(e):e}(e),i={Collection:{},Manifest:{},Canvas:{},AnnotationPage:{},AnnotationCollection:{},Annotation:{},ContentResource:{},Range:{},Service:{},Selector:{},Agent:{}},r={},n=function(e,t){return(i,r)=>{const n=e[i]?e[i]:{};return(e,s)=>{const a=ie(e,r||i);return a&&a.id&&i?(n[a.id]=n[a.id]?ne(n[a.id],a,{parent:s.parent,isTopLevel:t.id===a.id}):ne({id:a.id,type:a.type},a,{parent:s.parent,isTopLevel:t.id===a.id}),{id:a.id,type:"ContentResource"===i?i:a.type}):a}}}(i,t),s=function(e){return(t,i)=>r=>{const{id:n,type:s}=ie(r,i||t);if(void 0===n)throw new Error("Found invalid entity without an ID.");return e[n]="ContentResource"===t||"Service"===t?t:s,r}}(r);return{entities:i,resource:new j({collection:[de,ce(m),s("Collection"),n("Collection")],manifest:[de,ce(g),fe,s("Manifest"),n("Manifest")],canvas:[ce(d),s("Canvas"),n("Canvas")],annotationPage:[de,oe("AnnotationPage"),ce(y),s("AnnotationPage"),n("AnnotationPage")],annotation:[oe("Annotation"),pe,he,s("Annotation"),n("Annotation")],contentResource:[oe("ContentResource"),s("ContentResource"),n("ContentResource")],range:[ce(A),ve,s("Range","Canvas"),n("Range","Canvas")],agent:[ce(C),s("Agent"),n("Agent")],specificResource:[ye],service:[se(i)]}).traverseUnknown(t),mapping:r}},exports.resolveIfExists=f,exports.serialize=function(e,t,i){if(!t.type||!t.id)throw new Error("Unknown entity");if(!i[t.type])throw new Error(`Serializer not found for ${t.type}`);return function r(n,s,a=0){const o=i[n.type];if(!o)return c;if(a>20)throw new Error("Circular reference: "+n.id+" "+n.type);const[l,p]=f(e,n.type?n:n.id,s)||(n.id&&n.type?n:null);if(!l)return c;const u=o(l,e,{parent:s,isTopLevel:t.id===n.id,fullResource:p});let v=u.next();for(;!v.done;){const e=v.value;let t=c;if(e)if(Array.isArray(e)){const i=[];for(const t of e)i.push(r(t,n,a+1));t=i}else t=r(e,n,a+1);v=u.next(t)}return v.value===c?c:me(v.value)}(t)},exports.serializeConfigPresentation2=Oe,exports.serializeConfigPresentation3=De,exports.serializedFieldsToObject=me,exports.toRef=r,exports.traverseSpecificResource=ye,exports.types=w;
//# sourceMappingURL=index.js.map

@@ -1,2 +0,2 @@

var __defProp=Object.defineProperty,__defNormalProp=(e,t,i)=>t in e?__defProp(e,t,{enumerable:!0,configurable:!0,writable:!0,value:i}):e[t]=i,__publicField=(e,t,i)=>(__defNormalProp(e,"symbol"!=typeof t?t+"":t,i),i);!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define(t):(e="undefined"!=typeof globalThis?globalThis:e||self).IIIFParser=t()}(this,(function(){"use strict";const e=["sc:Collection","sc:Manifest","sc:Canvas","sc:AnnotationList","oa:Annotation","sc:Range","sc:Layer","sc:Sequence","oa:Choice","Service","ContentResource"];function t(t){if(null==t)throw new Error("Null or undefined is not a valid entity.");if(Array.isArray(t))throw new Error("Array is not a valid entity");if("object"!=typeof t)throw new Error(typeof t+" is not a valid entity");if("string"==typeof t["@type"]){const i=e.indexOf(t["@type"]);if(-1!==i)return e[i]}if(t.profile)return"Service";if(t.format)return"ContentResource";if(t["@type"])return"ContentResource";throw new Error("Resource type is not known")}class i{constructor(e,t={}){__publicField(this,"traversals"),__publicField(this,"options"),this.traversals={collection:[],manifest:[],canvas:[],annotationList:[],sequence:[],annotation:[],contentResource:[],choice:[],range:[],service:[],layer:[],...e},this.options={convertPropsToArray:!0,mergeMemberProperties:!0,allowUndefinedReturn:!1,...t}}static all(e){return new i({collection:[e],manifest:[e],canvas:[e],annotationList:[e],sequence:[e],annotation:[e],contentResource:[e],choice:[e],range:[e],service:[e],layer:[e]})}traverseCollection(e){return this.traverseType(this.traverseDescriptive(this.traverseLinking(this.traverseCollectionItems(e))),this.traversals.collection)}traverseCollectionItems(e){if(this.options.mergeMemberProperties){const t=[...(e.manifests||[]).map((e=>"string"==typeof e?{"@id":e,"@type":"sc:Manifest"}:e)),...(e.collections||[]).map((e=>"string"==typeof e?{"@id":e,"@type":"sc:Collection"}:e)),...e.members||[]];delete e.collections,delete e.manifests,e.members=t}return e.manifests&&(e.manifests=e.manifests.map((e=>this.traverseManifest("string"==typeof e?{"@id":e,"@type":"sc:Manifest"}:e)))),e.collections&&(e.collections=e.collections.map((e=>this.traverseCollection("string"==typeof e?{"@id":e,"@type":"sc:Collection"}:e)))),e.members&&(e.members=e.members.map((e=>"string"==typeof e?e:this.traverseUnknown(e)))),e}traverseManifest(e){return this.traverseType(this.traverseDescriptive(this.traverseLinking(this.traverseManifestItems(e))),this.traversals.manifest)}traverseManifestItems(e){return e.sequences&&(e.sequences=e.sequences.map((e=>this.traverseSequence(e)))),e.structures&&(e.structures=e.structures.map((e=>this.traverseRange(e)))),e}traverseSequence(e){return this.traverseType(this.traverseDescriptive(this.traverseLinking(this.traverseSequenceItems(e))),this.traversals.sequence)}traverseSequenceItems(e){return e.canvases&&(e.canvases=e.canvases.map((e=>this.traverseCanvas(e)))),e}traverseCanvas(e){return this.traverseType(this.traverseDescriptive(this.traverseLinking(this.traverseCanvasItems(e))),this.traversals.canvas)}traverseCanvasItems(e){return e.images&&(e.images=e.images.map((e=>this.traverseAnnotation(e)))),e.otherContent&&(e.otherContent=e.otherContent.map((e=>this.traverseAnnotationList(e)))),e}traverseRange(e){return this.traverseType(this.traverseDescriptive(this.traverseLinking(this.traverseRangeItems(e))),this.traversals.range)}traverseRangeItems(e){if(this.options.mergeMemberProperties){const t=[...(e.ranges||[]).map((e=>"string"==typeof e?{"@id":e,"@type":"sc:Range"}:e)),...(e.canvases||[]).map((e=>"string"==typeof e?{"@id":e,"@type":"sc:Canvas"}:e)),...e.members||[]];delete e.ranges,delete e.canvases,e.members=t.length?t.map((e=>this.traverseUnknown(e))):void 0}return e}traverseAnnotationList(e){const t="string"==typeof e?{"@id":e,"@type":"sc:AnnotationList"}:e;return this.traverseType(this.traverseDescriptive(this.traverseAnnotationListItems(t)),this.traversals.annotationList)}traverseAnnotationListItems(e){return e.resources&&(e.resources=e.resources.map((e=>this.traverseAnnotation(e)))),e}traverseAnnotation(e){return this.traverseType(this.traverseDescriptive(this.traverseLinking(this.traverseAnnotationItems(e))),this.traversals.annotation)}traverseAnnotationItems(e){return e.resource&&(Array.isArray(e.resource)?e.resource=e.resource.map((e=>this.traverseContentResource(e))):e.resource=this.traverseContentResource(e.resource)),e.on,e}traverseLayer(e){return this.traverseType(this.traverseLinking(this.traverseLayerItems(e)),this.traversals.layer)}traverseLayerItems(e){return e.otherContent&&(e.otherContent=e.otherContent.map((e=>this.traverseAnnotationList(e)))),e}traverseChoice(e){return this.traverseType(this.traverseChoiceItems(e),this.traversals.choice)}traverseChoiceItems(e){return e.default&&"rdf:nil"!==e.default&&(e.default=this.traverseContentResource(e.default)),e.item&&"rdf:nil"!==e.item&&(e.item=e.item.map((e=>this.traverseContentResource(e)))),e}traverseService(e){return this.traverseType(this.traverseLinking(e),this.traversals.service)}traverseContentResource(e){return"oa:Choice"===e["@type"]?this.traverseChoice(e):this.traverseType(this.traverseDescriptive(this.traverseLinking(e)),this.traversals.contentResource)}traverseUnknown(e){if(!e["@type"]||"string"==typeof e)return e;switch(t(e)){case"sc:Collection":return this.traverseCollection(e);case"sc:Manifest":return this.traverseManifest(e);case"sc:Canvas":return this.traverseCanvas(e);case"sc:Sequence":return this.traverseSequence(e);case"sc:Range":return this.traverseRange(e);case"oa:Annotation":return this.traverseAnnotation(e);case"sc:AnnotationList":return this.traverseAnnotationList(e);case"sc:Layer":return this.traverseLayer(e);case"Service":return this.traverseService(e);case"oa:Choice":return this.traverseChoice(e);case"ContentResource":return this.traverseContentResource(e)}return e.profile?this.traverseService(e):e}traverseImageResource(e){const t=Array.isArray(e),i=Array.isArray(e)?e:[e],n=[];for(const r of i)"string"==typeof r?n.push(this.traverseContentResource({"@id":r,"@type":"dctypes:Image"})):n.push(this.traverseContentResource(r));return t||this.options.convertPropsToArray?n:n[0]}traverseDescriptive(e){return e.thumbnail&&(e.thumbnail=this.traverseImageResource(e.thumbnail)),e.logo&&(e.logo=this.traverseImageResource(e.logo)),e}traverseOneOrMoreServices(e){const t=Array.isArray(e),i=Array.isArray(e)?e:[e],n=[];for(const r of i)n.push(this.traverseService(r));return t||this.options.convertPropsToArray?n:n[0]}traverseLinking(e){return e.related&&(e.related=this.traverseOneOrManyType(e.related,this.traversals.contentResource)),e.rendering&&(e.rendering=this.traverseOneOrManyType(e.rendering,this.traversals.contentResource)),e.service&&(e.service=this.traverseOneOrMoreServices(e.service)),e.seeAlso&&(e.seeAlso=this.traverseOneOrManyType(e.seeAlso,this.traversals.contentResource)),e.within&&("string"==typeof e.within||(e.within=this.traverseOneOrManyType(e.within,this.traversals.contentResource))),e.startCanvas&&("string"==typeof e.startCanvas?e.startCanvas=this.traverseType({"@id":e.startCanvas,"@type":"sc:Canvas"},this.traversals.canvas):e.startCanvas&&this.traverseType(e.startCanvas,this.traversals.canvas)),e.contentLayer&&("string"==typeof e.contentLayer?e.contentLayer=this.traverseLayer({"@id":e.contentLayer,"@type":"sc:Layer"}):e.contentLayer=this.traverseLayer(e.contentLayer)),e}traverseOneOrManyType(e,t){if(!Array.isArray(e)){if(!this.options.convertPropsToArray)return this.traverseType(e,t);e=[e]}return e.map((e=>this.traverseType(e,t)))}traverseType(e,t){return t.reduce(((e,t)=>{const i=t(e);return void 0!==i||this.options.allowUndefinedReturn?i:e}),e)}}const n="http://library.stanford.edu/iiif/image-api/compliance.html#level1",r="http://library.stanford.edu/iiif/image-api/compliance.html#level2",a="http://library.stanford.edu/iiif/image-api/conformance.html#level1",s="http://library.stanford.edu/iiif/image-api/conformance.html#level2",o="http://library.stanford.edu/iiif/image-api/1.1/compliance.html#level1",l="http://library.stanford.edu/iiif/image-api/1.1/compliance.html#level2",c="http://library.stanford.edu/iiif/image-api/1.1/conformance.html#level1",u="http://library.stanford.edu/iiif/image-api/1.1/conformance.html#level2",v="http://iiif.io/api/image/1/level1.json",p="http://iiif.io/api/image/1/profiles/level1.json",h="http://iiif.io/api/image/1/level2.json",f="http://iiif.io/api/image/1/profiles/level2.json",y="http://iiif.io/api/image/2/level1.json",d="http://iiif.io/api/image/2/profiles/level1.json",m="http://iiif.io/api/image/2/level2.json",g="http://iiif.io/api/image/2/profiles/level2.json",A="level1",C="level2",b="http://iiif.io/api/image/2/level1",w="http://iiif.io/api/image/2/level2",R=[b,w,n,r,a,s,o,l,c,u,v,p,h,f,y,d,m,g,A,C],S=["http://iiif.io/api/image/2/level0",b,w,"http://library.stanford.edu/iiif/image-api/compliance.html#level0",n,r,"http://library.stanford.edu/iiif/image-api/conformance.html#level0",a,s,"http://library.stanford.edu/iiif/image-api/1.1/compliance.html#level0",o,l,"http://library.stanford.edu/iiif/image-api/1.1/conformance.html#level0",c,u,"http://iiif.io/api/image/1/level0.json","http://iiif.io/api/image/1/profiles/level0.json",v,p,h,f,"http://iiif.io/api/image/2/level0.json","http://iiif.io/api/image/2/profiles/level0.json",y,d,m,g,"level0",A,C];function T(e){return Array.isArray(e)?e:[e]}const x="Attribution",j="http://example.org/provider",L="Unknown";function P(e,t="none"){if(!e)return{};const i=Array.isArray(e)?e:[e],n={};for(const r of i){if("string"==typeof r){n[t]=n[t]?n[t]:[],n[t].push(r||"");continue}if(!r["@language"]){n[t]=n[t]?n[t]:[],n[t].push(r["@value"]||"");continue}const e=r["@language"];n[e]=n[e]?n[e]:[],n[e].push(r["@value"]||"")}return n}function I(e){return Array.isArray(e)?I(e.find((e=>"string"==typeof e))):-1!==S.indexOf(e)?"level2":-1!==R.indexOf(e)?"level1":"string"==typeof e?e:void 0}function M(e){const t=Array.isArray(e)?e:[e];for(const i of t)switch(i){case"http://iiif.io/api/image/2/context.json":case"http://library.stanford.edu/iiif/image-api/1.1/compliance.html#level2":return"ImageService2";case"http://iiif.io/api/image/1/context.json":case"http://library.stanford.edu/iiif/image-api/1.1/context.json":return"ImageService1";case"http://iiif.io/api/annex/openannotation/context.json":return"ImageApiSelector"}}function O(e){for(const t of["sc","oa","dcterms","dctypes","iiif"])if(e.startsWith(`${t}:`))return e.slice(t.length+1);return e}const k=["Collection","Manifest","Annotation","AnnotationPage","Range","Service"];function D(e){const t=e["@id"]||e.id;let i=e["@type"]||e.type;const n=e.profile||void 0,r=e["@context"]||void 0;if(n){const e=function(e){switch(e){case"http://iiif.io/api/image/2/level0.json":case"http://iiif.io/api/image/2/level1.json":case"http://iiif.io/api/image/2/level2.json":return"ImageService2";case"http://iiif.io/api/auth/1/kiosk":case"http://iiif.io/api/auth/1/login":case"http://iiif.io/api/auth/1/clickthrough":case"http://iiif.io/api/auth/1/external":case"http://iiif.io/api/auth/0/kiosk":case"http://iiif.io/api/auth/0/login":case"http://iiif.io/api/auth/0/clickthrough":case"http://iiif.io/api/auth/0/external":return"AuthCookieService1";case"http://iiif.io/api/auth/1/token":case"http://iiif.io/api/auth/0/token":return"AuthTokenService1";case"http://iiif.io/api/auth/1/logout":case"http://iiif.io/api/auth/0/logout":return"AuthLogoutService1";case"http://iiif.io/api/search/1/search":case"http://iiif.io/api/search/0/search":return"SearchService1";case"http://iiif.io/api/search/1/autocomplete":case"http://iiif.io/api/search/0/autocomplete":return"AutoCompleteService1"}}(n);if(e)return e}if(r){const e=M(r);if(e)return e}if(i){if(Array.isArray(i)){if(-1!==i.indexOf("oa:CssStylesheet"))return"CssStylesheet";if(-1!==i.indexOf("cnt:ContentAsText"))return"TextualBody";i=i[0]}for(const e of["sc","oa","dcterms","dctypes","iiif"])if(i.startsWith(`${e}:`)){i=i.slice(e.length+1);break}switch(i){case"Layer":return"AnnotationCollection";case"AnnotationList":return"AnnotationPage";case"cnt:ContentAsText":return"TextualBody"}}if(i&&-1!==k.indexOf(i))return i;if(e.format){if(e.format.startsWith("image/"))return"Image";if(e.format.startsWith("text/"))return"Text";if("application/pdf"===e.format)return"Text";if(e.format.startsWith("application/"))return"Dataset"}return t&&(t.endsWith(".jpg")||t.endsWith(".png")||t.endsWith(".jpeg"))?"Image":i||"unknown"}const _=/http(s)?:\/\/(creativecommons.org|rightsstatements.org)[^"'\\<\n]+/gm;function q(e){const t=e.match(_);return t?t[0]:e}const U=["http://iiif.io/api/presentation/2/context.json","http://iiif.io/api/image/2/context.json","http://iiif.io/api/image/1/context.json","http://library.stanford.edu/iiif/image-api/1.1/context.json","http://iiif.io/api/search/1/context.json","http://iiif.io/api/search/0/context.json","http://iiif.io/api/auth/1/context.json","http://iiif.io/api/auth/0/context.json","http://iiif.io/api/annex/openannotation/context.json"];function E(e){if(e){const t=Array.isArray(e)?e:[e],i=[];for(const e of t)"http://iiif.io/api/presentation/2/context.json"===e&&i.push("http://iiif.io/api/presentation/3/context.json"),-1===U.indexOf(e)&&i.push(e);if(t.length)return 1===i.length?i[0]:i}}function $(e){for(const t in e)void 0!==e[t]&&null!==e[t]||delete e[t];return e}let W=0;function F(e,t){const i=encodeURI(e.id||e["@id"]||"").trim();return i&&t?`${i}/${t}`:i||(W++,`http://example.org/${e["@type"]}${t?`/${t}`:""}/${W}`)}function z(e){const t=[...e.behavior||[]];let i;return e.viewingHint&&t.push(e.viewingHint),Array.isArray(e.motivation)?i=e.motivation.map(O):e.motivation&&(i=O(e.motivation)),{"@context":e["@context"]?E(e["@context"]):void 0,id:(e["@id"]||F(e)).trim(),type:D(e),behavior:t.length?t:void 0,height:e.height?e.height:void 0,width:e.width?e.width:void 0,motivation:i,viewingDirection:e.viewingDirection,profile:e.profile,format:e.format?e.format:void 0,duration:void 0,timeMode:void 0}}function N(e){const[t,i]=function(e,t="Rights/License",i="none"){let n=null;const r=[],a=Array.isArray(e)?e:[e];for(const s of a){const e=s?q(s):void 0;!e||-1===e.indexOf("creativecommons.org")&&-1===e.indexOf("rightsstatements.org")?e&&r.push({label:{[i]:[t]},value:{[i]:[e]}}):n=e.startsWith("https://")?`http://${e.slice(8)}`:e}return[n,r]}(e.license),n=[...e.metadata?(r=e.metadata,r?r.map((e=>({label:P(e.label),value:P(e.value)}))):[]):[],...i];var r;return{rights:t,metadata:n.length?n:void 0,label:e.label?P(e.label):void 0,requiredStatement:e.attribution?{label:P(x),value:P(e.attribution)}:void 0,navDate:e.navDate,summary:e.description?P(e.description):void 0,thumbnail:e.thumbnail}}function B(e){if(!e.within)return;const t=Array.isArray(e.within)?e.within:[e.within],i=[];for(const n of t)if("string"==typeof n){if(n&&"sc:Manifest"===e["@type"])i.push({id:n,type:"Collection"})}else n["@id"]&&i.push({id:n["@id"],type:D(n)});return i.length?i:void 0}function H(e){const t=e.related?Array.isArray(e.related)?e.related:[e.related]:[],i=e.contentLayer;return{provider:e.logo||t.length?[{id:j,type:"Agent",homepage:t.length?[t[0]]:void 0,logo:e.logo?Array.isArray(e.logo)?e.logo:[e.logo]:void 0,label:P(L)}]:void 0,partOf:B(e),rendering:e.rendering,seeAlso:e.seeAlso,start:e.startCanvas,service:e.service?T(e.service):void 0,supplementary:i?[i]:void 0}}function J(e){const t=e;return $({...z(t),...N(t),...H(t),...(i=t,{chars:i.chars,format:i.format?i.format:void 0,language:i.language})});var i}const V=new i({collection:[function(e){return $({...z(e),...N(e),...H(e),items:e.members})}],manifest:[function(e){const t=[],i=[];for(const r of e.sequences||[])r.canvases.length&&t.push(...r.canvases),r.behavior&&i.push(...r.behavior);const n=z(e);return i.length&&(n.behavior?n.behavior.push(...i):n.behavior=i),$({...n,...N(e),...H(e),items:t,structures:e.structures})}],canvas:[function(e){return $({...z(e),...N(e),...H(e),annotations:e.otherContent&&e.otherContent.length?e.otherContent:void 0,items:e.images&&e.images.length?[{id:F(e,"annotation-page"),type:"AnnotationPage",items:e.images}]:void 0})}],annotationList:[function(e){return $({...z(e),...N(e),...H(e),items:e.resources&&e.resources.length?e.resources:void 0})}],sequence:[function(e){return e.canvases&&0!==e.canvases.length?{canvases:e.canvases,behavior:e.viewingHint?[e.viewingHint]:[]}:{canvases:[],behavior:[]}}],annotation:[function(e){return $({...z(e),...N(e),...H(e),target:function e(t){if(Array.isArray(t)){if(t.length>1)return{type:"List",items:t.map(e)};t=t[0]}if("string"==typeof t)return encodeURI(t).trim();if("@type"in t){let e;if("string"==typeof t.full)e=t.full;else if("dctypes:Image"===t.full["@type"])e={id:t.full["@id"],type:"Image"};else{if("sc:Canvas"!==t.full["@type"])throw new Error(`Unsupported source type on annotation: ${t.full["@type"]}`);e={id:t.full["@id"],type:"Canvas"}}return{type:"SpecificResource",source:e,selector:G(t.selector)}}return encodeURI(t["@id"]).trim()}(e.on),body:Array.isArray(e.resource)?e.resource.map(J):J(e.resource)})}],contentResource:[J],choice:[function(e){const t=[];return e.default&&"rdf:nil"!==e.default&&t.push(e.default),e.item&&"rdf:nil"!==e.item&&t.push(...e.item),{...z(e),...N(e),items:t}}],range:[function(e){return $({...z(e),...N(e),...H(e),items:e.members})}],service:[function(e){const{"@id":t,"@type":i,"@context":n,profile:r,...a}=e,s={};return t&&(s["@id"]=t),s["@type"]=D(e),"unknown"===s["@type"]&&(n&&n.length&&(s["@context"]=n),s["@type"]="Service"),r&&(s.profile=I(r)),$({...s,...a})}],layer:[function(e){return $({...z(e),...N(e),...H(e)})}]});function Y(e){return e&&e["@context"]&&("http://iiif.io/api/presentation/2/context.json"===e["@context"]||-1!==e["@context"].indexOf("http://iiif.io/api/presentation/2/context.json")||"http://www.shared-canvas.org/ns/context.json"===e["@context"])||"http://iiif.io/api/image/2/context.json"===e["@context"]?V.traverseUnknown(e):e}function G(e){if((Array.isArray(e["@type"])&&e["@type"].includes("oa:SvgSelector")||"oa:SvgSelector"==e["@type"])&&("chars"in e||"value"in e))return{type:"SvgSelector",value:"chars"in e?e.chars:e.value};if("oa:FragmentSelector"===e["@type"])return{type:"FragmentSelector",value:e.value};if("oa:Choice"===e["@type"])return[G(e.default),...(Array.isArray(e.item)?e.item:[e.item]).map(G)];if("iiif:ImageApiSelector"==e["@type"])return{type:"ImageApiSelector",region:"region"in e?e.region:void 0,rotation:"rotation"in e?e.rotation:void 0};throw new Error(`Unsupported selector type: ${e["@type"]}`)}const K=Object.freeze(Object.defineProperty({__proto__:null,types:e,identifyResource:t,Traverse:i,convertLanguageMapping:P,getProfile:I,getTypeFromContext:M,presentation2to3:V,convertPresentation2:Y},Symbol.toStringTag,{value:"Module"})),Q=[];Object.freeze(Q);const X={id:"https://iiif-parser/annotation",type:"Annotation",behavior:Q,label:null,thumbnail:Q,summary:null,requiredStatement:null,metadata:Q,seeAlso:Q,homepage:Q,logo:Q,rendering:Q,service:Q,accessibility:Q,audience:Q,body:Q,bodyValue:null,canonical:null,created:null,creator:Q,generated:null,generator:Q,modified:null,motivation:Q,rights:Q,stylesheet:null,target:Q,timeMode:void 0,via:Q,partOf:Q},Z={id:"https://iiif-parser/annotation-page",type:"AnnotationPage",behavior:Q,motivation:null,label:null,thumbnail:Q,summary:null,requiredStatement:null,metadata:Q,rights:null,provider:Q,items:Q,seeAlso:Q,homepage:Q,logo:Q,rendering:Q,service:Q},ee={id:"https://iiif-parser/empty-canvas",type:"Canvas",label:null,behavior:Q,motivation:null,thumbnail:Q,posterCanvas:null,accompanyingCanvas:null,placeholderCanvas:null,summary:null,requiredStatement:null,metadata:Q,rights:null,navDate:null,provider:Q,items:Q,annotations:Q,seeAlso:Q,homepage:Q,logo:Q,partOf:Q,rendering:Q,service:Q,duration:0,height:0,width:0},te={id:"https://iiif-parser/empty-collection",type:"Collection",label:null,viewingDirection:"left-to-right",behavior:Q,motivation:null,thumbnail:Q,posterCanvas:null,accompanyingCanvas:null,placeholderCanvas:null,summary:null,requiredStatement:null,metadata:Q,rights:null,navDate:null,provider:Q,items:Q,annotations:Q,seeAlso:Q,homepage:Q,logo:Q,partOf:Q,rendering:Q,service:Q,services:Q},ie={id:"https://iiif-parser/empty-manifest",type:"Manifest",annotations:Q,behavior:Q,homepage:Q,items:Q,label:null,logo:Q,metadata:Q,motivation:null,navDate:null,provider:Q,partOf:Q,posterCanvas:null,accompanyingCanvas:null,placeholderCanvas:null,rendering:Q,requiredStatement:null,rights:null,seeAlso:Q,service:Q,services:Q,start:null,structures:Q,summary:null,thumbnail:Q,viewingDirection:"left-to-right"},ne={id:"https://iiif-parser/empty-canvas",type:"Range",label:null,behavior:Q,motivation:null,thumbnail:Q,posterCanvas:null,accompanyingCanvas:null,placeholderCanvas:null,summary:null,requiredStatement:null,metadata:Q,rights:null,navDate:null,provider:Q,items:Q,annotations:Q,seeAlso:Q,homepage:Q,logo:Q,partOf:Q,rendering:Q,service:Q,start:null,supplementary:null,viewingDirection:"left-to-right"},re={id:"https://iiif-parser/empty-agent",type:"Agent",label:{},logo:Q,seeAlso:Q,homepage:Q},ae=["Collection","Manifest","Canvas","AnnotationPage","AnnotationCollection","Annotation","ContentResource","Range","Service","Selector","Agent"];function se(e){if(null==e)throw new Error("Null or undefined is not a valid entity.");if(Array.isArray(e))throw new Error("Array is not a valid entity");if("object"!=typeof e)throw new Error(typeof e+" is not a valid entity");if("string"==typeof e.type){const t=ae.indexOf(e.type);if(-1!==t)return ae[t]}if(e.profile)return"Service";throw new Error("Resource type is not known")}class oe{constructor(e,t={}){__publicField(this,"traversals"),__publicField(this,"options"),this.traversals={collection:[],manifest:[],canvas:[],annotationCollection:[],annotationPage:[],annotation:[],contentResource:[],choice:[],range:[],service:[],agent:[],...e},this.options={allowUndefinedReturn:!1,...t}}static all(e){return new oe({collection:[e],manifest:[e],canvas:[e],annotationCollection:[e],annotationPage:[e],annotation:[e],contentResource:[e],choice:[e],range:[e],service:[e]})}traverseDescriptive(e){return e.thumbnail&&(e.thumbnail=e.thumbnail.map((e=>this.traverseType(e,this.traversals.contentResource)))),e.provider&&(e.provider=e.provider.map((e=>this.traverseAgent(e)))),e}traverseLinking(e){return e.seeAlso&&(e.seeAlso=e.seeAlso.map((e=>this.traverseType(e,this.traversals.contentResource)))),e.service&&(e.service=T(e.service).map((e=>this.traverseType(e,this.traversals.service)))),e.services&&(e.services=e.services.map((e=>this.traverseType(e,this.traversals.service)))),e.logo&&(e.logo=e.logo.map((e=>this.traverseType(e,this.traversals.contentResource)))),e.homepage&&(e.homepage=e.homepage.map((e=>this.traverseType(e,this.traversals.contentResource)))),e.partOf&&(e.partOf=e.partOf.map((e=>"string"!=typeof e&&e.type?"Canvas"===e.type?this.traverseType(e,this.traversals.canvas):"AnnotationCollection"===e.type?this.traverseType(e,this.traversals.annotationCollection):"Collection"===e.type?this.traverseType(e,this.traversals.collection):this.traverseType(e,this.traversals.contentResource):this.traverseType(e,this.traversals.contentResource)))),e.start&&(e.start=e.start?this.traverseType(e.start,this.traversals.canvas):null),e.rendering&&(e.rendering=e.rendering.map((e=>this.traverseType(e,this.traversals.contentResource)))),e.supplementary&&(e.supplementary=e.supplementary.map((e=>this.traverseType(e,this.traversals.contentResource)))),e}traverseCollectionItems(e){return e.items&&e.items.map((e=>"Collection"===e.type?this.traverseCollection(e):this.traverseManifest(e))),e}traverseCollection(e){return this.traverseType(this.traverseDescriptive(this.traverseInlineAnnotationPages(this.traverseLinking(this.traversePosterCanvas(this.traverseCollectionItems(e))))),this.traversals.collection)}traverseManifestItems(e){return e.items&&(e.items=e.items.map((e=>this.traverseCanvas(e)))),e}traverseManifestStructures(e){return e.structures&&(e.structures=e.structures.map((e=>this.traverseRange(e)))),e}traverseManifest(e){return this.traverseType(this.traverseInlineAnnotationPages(this.traverseManifestStructures(this.traversePosterCanvas(this.traverseDescriptive(this.traverseLinking(this.traverseManifestItems(e)))))),this.traversals.manifest)}traverseCanvasItems(e){return e.items=(e.items||[]).map((e=>this.traverseAnnotationPage(e))),e}traverseInlineAnnotationPages(e){return"string"!=typeof e&&e?(e.annotations&&(e.annotations=e.annotations.map((e=>this.traverseAnnotationPage(e)))),e):e}traverseCanvas(e){return this.traverseType(this.traverseInlineAnnotationPages(this.traversePosterCanvas(this.traverseDescriptive(this.traverseLinking(this.traverseCanvasItems(e))))),this.traversals.canvas)}traverseAnnotationPageItems(e){return e.items&&(e.items=e.items.map((e=>this.traverseAnnotation(e)))),e}traverseAnnotationPage(e){return this.traverseType(this.traverseDescriptive(this.traverseLinking(this.traverseAnnotationPageItems(e))),this.traversals.annotationPage)}traverseAnnotationBody(e){return Array.isArray(e.body)?e.body=e.body.map((e=>this.traverseContentResource(e))):e.body&&(e.body=this.traverseContentResource(e.body)),e}traversePosterCanvas(e){return e.posterCanvas&&(e.posterCanvas=this.traverseCanvas(e.posterCanvas)),e.placeholderCanvas&&(e.placeholderCanvas=this.traverseCanvas(e.placeholderCanvas)),e.accompanyingCanvas&&(e.accompanyingCanvas=this.traverseCanvas(e.accompanyingCanvas)),e}traverseAnnotation(e){return this.traverseType(this.traverseLinking(this.traverseAnnotationBody(e)),this.traversals.annotation)}traverseContentResourceLinking(e){return"string"!=typeof e&&e?(e&&e.service&&(e.service=T(e.service||[]).map((e=>this.traverseType(e,this.traversals.service)))),e):e}traverseContentResource(e){return"Choice"===e.type&&(e.items=e.items.map((e=>this.traverseContentResource(e)))),this.traverseType(this.traverseInlineAnnotationPages(this.traverseContentResourceLinking(e)),this.traversals.contentResource)}traverseRangeRanges(e){return e.items&&(e.items=e.items.map((e=>"string"==typeof e?this.traverseCanvas({id:e,type:"Canvas"}):"Manifest"===e.type?this.traverseManifest(e):this.traverseRange(e)))),e}traverseRange(e){return this.traverseType(this.traversePosterCanvas(this.traverseDescriptive(this.traverseLinking(this.traverseRangeRanges(e)))),this.traversals.range)}traverseAgent(e){return this.traverseType(this.traverseDescriptive(this.traverseLinking(e)),this.traversals.agent)}traverseType(e,t){return t.reduce(((e,t)=>{const i=t(e);return void 0!==i||this.options.allowUndefinedReturn?i:e}),e)}traverseService(e){return this.traverseType(e,this.traversals.service)}traverseUnknown(e){const t=se(e);switch(t){case"Collection":return this.traverseCollection(e);case"Manifest":return this.traverseManifest(e);case"Canvas":return this.traverseCanvas(e);case"AnnotationPage":return this.traverseAnnotationPage(e);case"Annotation":return this.traverseAnnotation(e);case"ContentResource":return this.traverseContentResource(e);case"Range":return this.traverseRange(e);case"Service":return this.traverseService(e);case"Agent":return this.traverseAgent(e);default:throw new Error(`Unknown or unsupported resource type of ${t}`)}}}function le(){return{Collection:{},Manifest:{},Canvas:{},AnnotationPage:{},AnnotationCollection:{},Annotation:{},ContentResource:{},Range:{},Service:{},Selector:{},Agent:{}}}function ce(e,t){if("string"==typeof e)return{id:e,type:t};if(!e.id)throw new Error(`Invalid resource does not have an ID (${t})`);return e}function ue(e,t){if(!t)return e;if(Array.isArray(e)){if(!Array.isArray(t))throw new Error("Cannot merge array with non-array");const i=[...e];for(const n of t)if(null!=n)if(Array.isArray(n))i.push(n);else if("object"==typeof n&&n.id&&n.type){const e=i.findIndex((e=>e.id===n.id&&e.type===n.type));e>=0&&(i[e]=ue(i[e],n))}else-1===e.indexOf(n)&&i.push(n);return i}if("object"==typeof e){if(Array.isArray(t)||"object"!=typeof t)throw new Error("Cannot merge object with non-object");const i={...e};for(const[e,n]of Object.entries(t)){const t=i[e];i[e]=t!==Q&&t?ue(t,n):n}return i}return e||t}function ve(e,t){if("string"==typeof e)return e;if(t.id!==e.id||t.type!==e.type)throw new Error("Can only merge entities with identical identifiers and type!");return ue({...e},t)}function pe(e){const t=JSON.stringify(e);let i=5381,n=t.length;for(;n;)i=33*i^t.charCodeAt(--n);const r=(i>>>0).toString(16);return r.length%2?"0"+r:r}function he(e){return t=>"string"==typeof t?{id:t,type:e}:t.id?t.type?t:{type:e,...t}:{id:`vault://${pe(t)}`,type:e,...t}}function fe(e){return t=>({...e,...t})}function ye(e){return Array.isArray(e)?e:[e]}function de(e){return e.body&&(e.body=ye(e.body)),e.seeAlso&&(e.seeAlso=ye(e.seeAlso)),e.body&&(e.body=ye(e.body)),e.audience&&(e.audience=ye(e.audience)),e.accessibility&&(e.accessibility=ye(e.accessibility)),e.motivation&&(e.motivation=ye(e.motivation)),e}const me="__$UNSET$__",ge="__$UNWRAP$__";function Ae(e){const t={};for(const[i,n]of e){if(i===ge&&n!==me)return n;n!==me&&null!=n&&(t[i]=n)}return t}function Ce(e){if(!e)return;const t=Object.keys(e);if(0!==t.length){if(1===t.length){const i=t[0];if(!i)return"";const n=(e[i]||[]).join("");return"@none"===i||"none"===i||"en"===i?n:{"@language":i,"@value":n}}return t.map((t=>({"@language":t,"@value":(e[t]||[]).join("")})))}}function be(e){return Array.isArray(e)?e.map((e=>be(e))):"string"==typeof e?e:e.type&&"Canvas"===e.type?e.id:e}function we(e,t=!1){if(e)return e.length>1&&!t?e:e[0]||void 0}function Re(e){if(e){if("string"==typeof e)return{"@id":e};if("@id"in e){const t={...e};return delete t["@type"],t}return{"@context":"http://iiif.io/api/image/2/context.json","@id":e.id,profile:`http://iiif.io/api/image/2/profiles/${e.profile}.json`}}}function Se(e,t){return[["@id",e.id],["@type",t],["format",e.format],["height",e.height],["width",e.width],["viewingDirection","left-to-right"!==e.viewingDirection?e.viewingDirection:void 0]]}function*Te(e){const t=e.provider?yield e.provider[0]:void 0;return[["label",Ce(e.label)],["metadata",e.metadata&&e.metadata.length?e.metadata.map((e=>({label:Ce(e.label)||"",value:Ce(e.value)||""}))):void 0],["description",Ce(e.summary)],["thumbnail",we(yield e.thumbnail)],["navDate",e.navDate],["logo",t?we(t.logo):void 0],["homepage",t?t.homepage:void 0],["attribution",e.requiredStatement?Ce(e.requiredStatement.value):void 0]]}function*xe(e){return[["seeAlso",we(yield e.seeAlso)],["service",we((e.service||[]).map(Re))],["rendering",we(yield e.rendering)],["startCanvas",e.start?e.start.id:void 0]]}const je={Manifest:function*(e){return[...Se(e,"sc:Manifest"),...yield*Te(e),...yield*xe(e),["sequences",[{"@id":`${e.id}/sequence0`,"@type":"sc:Sequence",canvases:yield e.items}]],["structures",yield e.structures]]},Canvas:function*(e){const t=(yield e.items)[0];return[...Se(e,"sc:Canvas"),...yield*Te(e),...yield*xe(e),["images",t?[t.resources]:void 0],["annotations",e.annotations&&e.annotations.length?we(yield e.annotations):void 0]]},AnnotationPage:function*(e){return[...Se(e,"sc:AnnotationList"),...yield*Te(e),["resources",e.items&&e.items.length?we(yield e.items):void 0]]},Annotation:function*(e){return[["@id",e.id],["@type","oa:Annotation"],["motivation","sc:painting"],["on",be(e.target)],["resource",we(yield e.body,!0)]]},ContentResource:function*(e){return"Image"===e.type?[...Se(e,"dctypes:Image"),...yield*Te(e),...yield*xe(e)]:[...Se(e,void 0),...yield*Te(e)]},AnnotationCollection:function*(e){return[["@id",e.id],["@type","sc:Layer"],["label",Ce(e.label)]]},Collection:function*(e){return[...Se(e,"sc:Collection"),...yield*Te(e),...yield*xe(e),["members",yield*e.items]]},Range:function*(e){const t=[],i=[];if(e.items)for(const n of e.items){const r=yield n;t.push({"@id":n.id,"@type":n.type,label:r?r.label:void 0,within:e.id}),"Canvas"===n.type&&i.push(n.id)}return[...Se(e,"sc:Range"),...yield*Te(e),...yield*xe(e),["canvases",i.length===t.length?i:void 0],["members",i.length!==t.length?t:void 0]]}};function Le(e){var t;return[["id",(null==(t=e.id)?void 0:t.startsWith("vault://"))?void 0:e.id],["type",e.type],["format",e.format],["profile",e.profile],["height",e.height],["width",e.width],["duration",e.duration||void 0],["viewingDirection","left-to-right"!==e.viewingDirection?e.viewingDirection:void 0],["behavior",e.behavior&&e.behavior.length?e.behavior:void 0],["timeMode",e.timeMode],["motivation",Array.isArray(e.motivation)?e.motivation[0]:e.motivation]]}function Pe(e){if(e&&0!==e.length)return e}function Ie(e){if(e&&e.type&&"ImageService2"===e.type){const{id:t,type:i,profile:n,...r}=e,a="string"==typeof n?n:Array.isArray(n)?n.find((e=>"string"==typeof e)):"";return{"@id":t,"@type":i,profile:a?a.startsWith("http")?a:`http://iiif.io/api/image/2/${a}.json`:"http://iiif.io/api/image/2/level0.json",...r}}return e}function Me(e){if(e&&0!==e.length)return e.map(Ie)}function*Oe(e){return[["label",e.label],["metadata",Pe(e.metadata)],["summary",e.summary],["requiredStatement",e.requiredStatement],["rights",e.rights],["navDate",e.navDate],["language",e.language],["thumbnail",Pe(yield e.thumbnail)],["placeholderCanvas",yield e.placeholderCanvas],["accompanyingCanvas",yield e.accompanyingCanvas],["provider",Pe(yield e.provider)]]}function*ke(e){return[["seeAlso",Pe(yield e.seeAlso)],["service",Me(e.service)],["services",Me(e.services)],["rendering",Pe(yield e.rendering)],["supplementary",Pe(yield e.supplementary)],["homepage",Pe(yield e.homepage)],["logo",Pe(yield e.logo)],["partOf",Pe(yield e.partOf)],["start",e.start]]}const De={Manifest:function*(e,t,{isTopLevel:i}){return i?[["@context","http://iiif.io/api/presentation/3/context.json"],...Le(e),...yield*Oe(e),...yield*ke(e),["items",yield e.items],["structures",Pe(yield e.structures)],["annotations",Pe(yield e.annotations)]]:[...Le(e),...yield*Oe(e)]},Canvas:function*(e){return[...Le(e),...yield*Oe(e),...yield*ke(e),["items",yield e.items],["annotations",Pe(yield e.annotations)]]},Agent:function*(e){return[["id",e.id],["type","Agent"],["label",e.label],...yield*ke(e)]},AnnotationPage:function*(e){return[...Object.entries(e).map((([e,t])=>[e,Array.isArray(t)?Pe(t):t])).filter((([e,t])=>"items"!==e)),...yield*ke(e),["items",yield e.items]]},Service:function*(e){return[[ge,Ie(e)]]},Annotation:function*(e){const t=Object.entries(e).map((([e,t])=>"motivation"===e?[e,Array.isArray(t)?t[0]:t]:[e,Array.isArray(t)?Pe(t):t])).filter((([e])=>"body"!==e)),i=yield e.body;return[...t,["body",1===i.length?i[0]:i]]},ContentResource:function*(e){return[...Le(e),...yield*Oe(e),...yield*ke(e),["annotations",Pe(yield e.annotations)],["items",Pe(yield e.items)]]},AnnotationCollection:function*(e){return[["id",e.id],["type","AnnotationCollection"],["label",e.label]]},Collection:function*(e,t,{isTopLevel:i}){return i?[["@context","http://iiif.io/api/presentation/3/context.json"],...Le(e),...yield*Oe(e),...yield*ke(e),["items",Pe(yield e.items)]]:[...Le(e),...yield*Oe(e)]},Range:function*(e){const t=[];for(const i of e.items)"Range"===i.type?t.push(yield i):t.push(i);return[...Le(e),...yield*Oe(e),...yield*ke(e),["items",t],["annotations",Pe(yield e.annotations)]]}};return{Presentation2:K,Presentation3:Object.freeze(Object.defineProperty({__proto__:null,EMPTY:Q,emptyAnnotation:X,emptyAnnotationPage:Z,emptyCanvas:ee,emptyCollection:te,emptyManifest:ie,emptyRange:ne,emptyAgent:re,defaultEntities:{Collection:{},Manifest:{},Canvas:{},AnnotationPage:{},AnnotationCollection:{},Annotation:{},ContentResource:{},Range:{},Service:{},Selector:{},Agent:{}},getDefaultEntities:le,mergeEntities:ve,normalize:function(e){const t=Y(e),i={Collection:{},Manifest:{},Canvas:{},AnnotationPage:{},AnnotationCollection:{},Annotation:{},ContentResource:{},Range:{},Service:{},Selector:{},Agent:{}},n={},r=function(e){return(t,i)=>{const n=e[t]?e[t]:{};return e=>{const r=ce(e,i||t);return r&&r.id&&t?(n[r.id]=n[r.id]?ve(n[r.id],r):Object.assign({},r),{id:r.id,type:"ContentResource"===t?t:r.type}):r}}}(i),a=function(e){return(t,i)=>n=>{const{id:r,type:a}=ce(n,i||t);if(void 0===r)throw new Error("Found invalid entity without an ID.");return e[r]="ContentResource"===t?t:a,n}}(n);return{entities:i,resource:new oe({collection:[fe(te),a("Collection"),r("Collection")],manifest:[fe(ie),a("Manifest"),r("Manifest")],canvas:[fe(ee),a("Canvas"),r("Canvas")],annotationPage:[he("AnnotationPage"),fe(Z),a("AnnotationPage"),r("AnnotationPage")],annotation:[he("Annotation"),de,a("Annotation"),r("Annotation")],contentResource:[he("ContentResource"),a("ContentResource"),r("ContentResource")],range:[fe(ne),a("Range","Canvas"),r("Range","Canvas")],agent:[fe(re),a("Agent"),r("Agent")]}).traverseUnknown(t),mapping:n}},types:ae,identifyResource:se,Traverse:oe,UNSET:me,UNWRAP:ge,serializedFieldsToObject:Ae,serialize:function(e,t,i){if(!t.type||!t.id)throw new Error("Unknown entity");if(!i[t.type])throw new Error(`Serializer not found for ${t.type}`);return function n(r){const a=i[r.type];if(!a)return me;const s=function(e,t){const i=e.requests[t],n=e.mapping[t];if(n&&(!i||!i.resourceUri||e.entities[n][i.resourceUri]))return e.entities[n][i?i.resourceUri:t]}(e,r.id)||(r.id&&r.type?r:null);if(!s)return me;const o=a(s,e,{isTopLevel:t.id===r.id});let l=o.next();for(;!l.done;){const e=l.value;let t=me;if(e)if(Array.isArray(e)){const i=[];for(const t of e)i.push(n(t));t=i}else t=n(e);l=o.next(t)}return l.value===me?me:Ae(l.value)}(t)},languageString2to3:Ce,serializeConfigPresentation2:je,serializeConfigPresentation3:De},Symbol.toStringTag,{value:"Module"}))}}));
var __defProp=Object.defineProperty,__defNormalProp=(e,t,i)=>t in e?__defProp(e,t,{enumerable:!0,configurable:!0,writable:!0,value:i}):e[t]=i,__publicField=(e,t,i)=>(__defNormalProp(e,"symbol"!=typeof t?t+"":t,i),i);!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define(t):(e="undefined"!=typeof globalThis?globalThis:e||self).IIIFParser=t()}(this,(function(){"use strict";const e=["sc:Collection","sc:Manifest","sc:Canvas","sc:AnnotationList","oa:Annotation","sc:Range","sc:Layer","sc:Sequence","oa:Choice","Service","ContentResource"];function t(t){if(null==t)throw new Error("Null or undefined is not a valid entity.");if(Array.isArray(t))throw new Error("Array is not a valid entity");if("object"!=typeof t)throw new Error(typeof t+" is not a valid entity");if("string"==typeof t["@type"]){const i=e.indexOf(t["@type"]);if(-1!==i)return e[i]}if(t.profile)return"Service";if(t.format)return"ContentResource";if(t["@type"])return"ContentResource";throw new Error("Resource type is not known")}class i{constructor(e,t={}){__publicField(this,"traversals"),__publicField(this,"options"),this.traversals={collection:[],manifest:[],canvas:[],annotationList:[],sequence:[],annotation:[],contentResource:[],choice:[],range:[],service:[],layer:[],...e},this.options={convertPropsToArray:!0,mergeMemberProperties:!0,allowUndefinedReturn:!1,...t}}static all(e){return new i({collection:[e],manifest:[e],canvas:[e],annotationList:[e],sequence:[e],annotation:[e],contentResource:[e],choice:[e],range:[e],service:[e],layer:[e]})}traverseCollection(e){return this.traverseType(this.traverseDescriptive(this.traverseLinking(this.traverseCollectionItems(e))),this.traversals.collection)}traverseCollectionItems(e){if(this.options.mergeMemberProperties){const t=[...(e.manifests||[]).map((e=>"string"==typeof e?{"@id":e,"@type":"sc:Manifest"}:e)),...(e.collections||[]).map((e=>"string"==typeof e?{"@id":e,"@type":"sc:Collection"}:e)),...e.members||[]];delete e.collections,delete e.manifests,e.members=t}return e.manifests&&(e.manifests=e.manifests.map((e=>this.traverseManifest("string"==typeof e?{"@id":e,"@type":"sc:Manifest"}:e)))),e.collections&&(e.collections=e.collections.map((e=>this.traverseCollection("string"==typeof e?{"@id":e,"@type":"sc:Collection"}:e)))),e.members&&(e.members=e.members.map((e=>"string"==typeof e?e:this.traverseUnknown(e)))),e}traverseManifest(e){return this.traverseType(this.traverseDescriptive(this.traverseLinking(this.traverseManifestItems(e))),this.traversals.manifest)}traverseManifestItems(e){return e.sequences&&(e.sequences=e.sequences.map((e=>this.traverseSequence(e)))),e.structures&&(e.structures=e.structures.map((e=>this.traverseRange(e)))),e}traverseSequence(e){return this.traverseType(this.traverseDescriptive(this.traverseLinking(this.traverseSequenceItems(e))),this.traversals.sequence)}traverseSequenceItems(e){return e.canvases&&(e.canvases=e.canvases.map((e=>this.traverseCanvas(e)))),e}traverseCanvas(e){return this.traverseType(this.traverseDescriptive(this.traverseLinking(this.traverseCanvasItems(e))),this.traversals.canvas)}traverseCanvasItems(e){return e.images&&(e.images=e.images.map((e=>this.traverseAnnotation(e)))),e.otherContent&&(e.otherContent=e.otherContent.map((e=>this.traverseAnnotationList(e)))),e}traverseRange(e){return this.traverseType(this.traverseDescriptive(this.traverseLinking(this.traverseRangeItems(e))),this.traversals.range)}traverseRangeItems(e){if(this.options.mergeMemberProperties){const t=[...(e.ranges||[]).map((e=>"string"==typeof e?{"@id":e,"@type":"sc:Range"}:e)),...(e.canvases||[]).map((e=>"string"==typeof e?{"@id":e,"@type":"sc:Canvas"}:e)),...e.members||[]];delete e.ranges,delete e.canvases,e.members=t.length?t.map((e=>this.traverseUnknown(e))):void 0}return e}traverseAnnotationList(e){const t="string"==typeof e?{"@id":e,"@type":"sc:AnnotationList"}:e;return this.traverseType(this.traverseDescriptive(this.traverseAnnotationListItems(t)),this.traversals.annotationList)}traverseAnnotationListItems(e){return e.resources&&(e.resources=e.resources.map((e=>this.traverseAnnotation(e)))),e}traverseAnnotation(e){return this.traverseType(this.traverseDescriptive(this.traverseLinking(this.traverseAnnotationItems(e))),this.traversals.annotation)}traverseAnnotationItems(e){return e.resource&&(Array.isArray(e.resource)?e.resource=e.resource.map((e=>this.traverseContentResource(e))):e.resource=this.traverseContentResource(e.resource)),e.on,e}traverseLayer(e){return this.traverseType(this.traverseLinking(this.traverseLayerItems(e)),this.traversals.layer)}traverseLayerItems(e){return e.otherContent&&(e.otherContent=e.otherContent.map((e=>this.traverseAnnotationList(e)))),e}traverseChoice(e){return this.traverseType(this.traverseChoiceItems(e),this.traversals.choice)}traverseChoiceItems(e){return e.default&&"rdf:nil"!==e.default&&(e.default=this.traverseContentResource(e.default)),e.item&&"rdf:nil"!==e.item&&(e.item=e.item.map((e=>this.traverseContentResource(e)))),e}traverseService(e){return this.traverseType(this.traverseLinking(e),this.traversals.service)}traverseContentResource(e){return"oa:Choice"===e["@type"]?this.traverseChoice(e):this.traverseType(this.traverseDescriptive(this.traverseLinking(e)),this.traversals.contentResource)}traverseUnknown(e){if(!e["@type"]||"string"==typeof e)return e;switch(t(e)){case"sc:Collection":return this.traverseCollection(e);case"sc:Manifest":return this.traverseManifest(e);case"sc:Canvas":return this.traverseCanvas(e);case"sc:Sequence":return this.traverseSequence(e);case"sc:Range":return this.traverseRange(e);case"oa:Annotation":return this.traverseAnnotation(e);case"sc:AnnotationList":return this.traverseAnnotationList(e);case"sc:Layer":return this.traverseLayer(e);case"Service":return this.traverseService(e);case"oa:Choice":return this.traverseChoice(e);case"ContentResource":return this.traverseContentResource(e)}return e.profile?this.traverseService(e):e}traverseImageResource(e){const t=Array.isArray(e),i=Array.isArray(e)?e:[e],r=[];for(const n of i)"string"==typeof n?r.push(this.traverseContentResource({"@id":n,"@type":"dctypes:Image"})):r.push(this.traverseContentResource(n));return t||this.options.convertPropsToArray?r:r[0]}traverseDescriptive(e){return e.thumbnail&&(e.thumbnail=this.traverseImageResource(e.thumbnail)),e.logo&&(e.logo=this.traverseImageResource(e.logo)),e}traverseOneOrMoreServices(e){const t=Array.isArray(e),i=Array.isArray(e)?e:[e],r=[];for(const n of i)r.push(this.traverseService(n));return t||this.options.convertPropsToArray?r:r[0]}traverseLinking(e){return e.related&&(e.related=this.traverseOneOrManyType(e.related,this.traversals.contentResource)),e.rendering&&(e.rendering=this.traverseOneOrManyType(e.rendering,this.traversals.contentResource)),e.service&&(e.service=this.traverseOneOrMoreServices(e.service)),e.seeAlso&&(e.seeAlso=this.traverseOneOrManyType(e.seeAlso,this.traversals.contentResource)),e.within&&("string"==typeof e.within||(e.within=this.traverseOneOrManyType(e.within,this.traversals.contentResource))),e.startCanvas&&("string"==typeof e.startCanvas?e.startCanvas=this.traverseType({"@id":e.startCanvas,"@type":"sc:Canvas"},this.traversals.canvas):e.startCanvas&&this.traverseType(e.startCanvas,this.traversals.canvas)),e.contentLayer&&("string"==typeof e.contentLayer?e.contentLayer=this.traverseLayer({"@id":e.contentLayer,"@type":"sc:Layer"}):e.contentLayer=this.traverseLayer(e.contentLayer)),e}traverseOneOrManyType(e,t){if(!Array.isArray(e)){if(!this.options.convertPropsToArray)return this.traverseType(e,t);e=[e]}return e.map((e=>this.traverseType(e,t)))}traverseType(e,t){return t.reduce(((e,t)=>{const i=t(e);return void 0!==i||this.options.allowUndefinedReturn?i:e}),e)}}const r="http://library.stanford.edu/iiif/image-api/compliance.html#level1",n="http://library.stanford.edu/iiif/image-api/compliance.html#level2",s="http://library.stanford.edu/iiif/image-api/conformance.html#level1",a="http://library.stanford.edu/iiif/image-api/conformance.html#level2",o="http://library.stanford.edu/iiif/image-api/1.1/compliance.html#level1",c="http://library.stanford.edu/iiif/image-api/1.1/compliance.html#level2",l="http://library.stanford.edu/iiif/image-api/1.1/conformance.html#level1",u="http://library.stanford.edu/iiif/image-api/1.1/conformance.html#level2",p="http://iiif.io/api/image/1/level1.json",f="http://iiif.io/api/image/1/profiles/level1.json",h="http://iiif.io/api/image/1/level2.json",v="http://iiif.io/api/image/1/profiles/level2.json",d="http://iiif.io/api/image/2/level1.json",y="http://iiif.io/api/image/2/profiles/level1.json",m="http://iiif.io/api/image/2/level2.json",g="http://iiif.io/api/image/2/profiles/level2.json",A="level1",x="level2",b="http://iiif.io/api/image/2/level1",C="http://iiif.io/api/image/2/level2",I=[b,C,r,n,s,a,o,c,l,u,p,f,h,v,d,y,m,g,A,x],S=["http://iiif.io/api/image/2/level0",b,C,"http://library.stanford.edu/iiif/image-api/compliance.html#level0",r,n,"http://library.stanford.edu/iiif/image-api/conformance.html#level0",s,a,"http://library.stanford.edu/iiif/image-api/1.1/compliance.html#level0",o,c,"http://library.stanford.edu/iiif/image-api/1.1/conformance.html#level0",l,u,"http://iiif.io/api/image/1/level0.json","http://iiif.io/api/image/1/profiles/level0.json",p,f,h,v,"http://iiif.io/api/image/2/level0.json","http://iiif.io/api/image/2/profiles/level0.json",d,y,m,g,"level0",A,x];function _(e){return Array.isArray(e)?e:e?[e]:[]}function w(e){for(const t in e)void 0!==e[t]&&null!==e[t]||delete e[t];return e}const R="Attribution",O="http://example.org/provider",F="Unknown";function L(e,t="none"){if(!e)return{};const i=Array.isArray(e)?e:[e],r={};for(const n of i){if("string"==typeof n){r[t]=r[t]?r[t]:[],r[t].push(n||"");continue}if(!n["@language"]){r[t]=r[t]?r[t]:[],r[t].push(n["@value"]||"");continue}const e=n["@language"];r[e]=r[e]?r[e]:[],r[e].push(n["@value"]||"")}return r}function E(e){return Array.isArray(e)?E(e.find((e=>"string"==typeof e))):-1!==S.indexOf(e)?"level2":-1!==I.indexOf(e)?"level1":"string"==typeof e?e:void 0}function j(e){const t=Array.isArray(e)?e:[e];for(const i of t)switch(i){case"http://iiif.io/api/image/2/context.json":case"http://library.stanford.edu/iiif/image-api/1.1/compliance.html#level2":return"ImageService2";case"http://iiif.io/api/image/1/context.json":case"http://library.stanford.edu/iiif/image-api/1.1/context.json":return"ImageService1";case"http://iiif.io/api/annex/openannotation/context.json":return"ImageApiSelector"}}function M(e){for(const t of["sc","oa","dcterms","dctypes","iiif"])if(e.startsWith(`${t}:`))return e.slice(t.length+1);return e}const P=["Collection","Manifest","Annotation","AnnotationPage","Range","Service"];function T(e){const t=e["@id"]||e.id;let i=e["@type"]||e.type;const r=e.profile||void 0,n=e["@context"]||void 0;if(r){const e=function(e){switch(e){case"http://iiif.io/api/image/2/level0.json":case"http://iiif.io/api/image/2/level1.json":case"http://iiif.io/api/image/2/level2.json":return"ImageService2";case"http://iiif.io/api/auth/1/kiosk":case"http://iiif.io/api/auth/1/login":case"http://iiif.io/api/auth/1/clickthrough":case"http://iiif.io/api/auth/1/external":case"http://iiif.io/api/auth/0/kiosk":case"http://iiif.io/api/auth/0/login":case"http://iiif.io/api/auth/0/clickthrough":case"http://iiif.io/api/auth/0/external":return"AuthCookieService1";case"http://iiif.io/api/auth/1/token":case"http://iiif.io/api/auth/0/token":return"AuthTokenService1";case"http://iiif.io/api/auth/1/logout":case"http://iiif.io/api/auth/0/logout":return"AuthLogoutService1";case"http://iiif.io/api/search/1/search":case"http://iiif.io/api/search/0/search":return"SearchService1";case"http://iiif.io/api/search/1/autocomplete":case"http://iiif.io/api/search/0/autocomplete":return"AutoCompleteService1"}}(r);if(e)return e}if(n){const e=j(n);if(e)return e}if(i){if(Array.isArray(i)){if(-1!==i.indexOf("oa:CssStylesheet"))return"CssStylesheet";if(-1!==i.indexOf("cnt:ContentAsText"))return"TextualBody";i=i[0]}for(const e of["sc","oa","dcterms","dctypes","iiif"])if(i.startsWith(`${e}:`)){i=i.slice(e.length+1);break}switch(i){case"Layer":return"AnnotationCollection";case"AnnotationList":return"AnnotationPage";case"cnt:ContentAsText":return"TextualBody"}}if(i&&-1!==P.indexOf(i))return i;if(e.format){if(e.format.startsWith("image/"))return"Image";if(e.format.startsWith("text/"))return"Text";if("application/pdf"===e.format)return"Text";if(e.format.startsWith("application/"))return"Dataset"}return t&&(t.endsWith(".jpg")||t.endsWith(".png")||t.endsWith(".jpeg"))?"Image":i||"unknown"}const z=/http(s)?:\/\/(creativecommons.org|rightsstatements.org)[^"'\\<\n]+/gm;function k(e){const t=e.match(z);return t?t[0]:e}const $=["http://iiif.io/api/presentation/2/context.json","http://iiif.io/api/image/2/context.json","http://iiif.io/api/image/1/context.json","http://library.stanford.edu/iiif/image-api/1.1/context.json","http://iiif.io/api/search/1/context.json","http://iiif.io/api/search/0/context.json","http://iiif.io/api/auth/1/context.json","http://iiif.io/api/auth/0/context.json","http://iiif.io/api/annex/openannotation/context.json"];function D(e){if(e){const t=Array.isArray(e)?e:[e],i=[];for(const e of t)"http://iiif.io/api/presentation/2/context.json"===e&&i.push("http://iiif.io/api/presentation/3/context.json"),-1===$.indexOf(e)&&i.push(e);if(t.length)return 1===i.length?i[0]:i}}let W=0;function N(e,t){const i=encodeURI(e.id||e["@id"]||"").trim();return i&&t?`${i}/${t}`:i||(W++,`http://example.org/${e["@type"]}${t?`/${t}`:""}/${W}`)}function q(e){const t=[...e.behavior||[]];let i;return e.viewingHint&&t.push(e.viewingHint),Array.isArray(e.motivation)?i=e.motivation.map(M):e.motivation&&(i=M(e.motivation)),{"@context":e["@context"]?D(e["@context"]):void 0,id:(e["@id"]||N(e)).trim(),type:T(e),behavior:t.length?t:void 0,height:e.height?e.height:void 0,width:e.width?e.width:void 0,motivation:i,viewingDirection:e.viewingDirection,profile:e.profile,format:e.format?e.format:void 0,duration:void 0,timeMode:void 0}}function B(e){const[t,i]=function(e,t="Rights/License",i="none"){let r=null;const n=[],s=Array.isArray(e)?e:[e];for(const a of s){const e=a?k(a):void 0;!e||-1===e.indexOf("creativecommons.org")&&-1===e.indexOf("rightsstatements.org")?e&&n.push({label:{[i]:[t]},value:{[i]:[e]}}):r=e.startsWith("https://")?`http://${e.slice(8)}`:e}return[r,n]}(e.license),r=[...e.metadata?(n=e.metadata,n?n.map((e=>({label:L(e.label),value:L(e.value)}))):[]):[],...i];var n;return{rights:t,metadata:r.length?r:void 0,label:e.label?L(e.label):void 0,requiredStatement:e.attribution?{label:L(R),value:L(e.attribution)}:void 0,navDate:e.navDate,summary:e.description?L(e.description):void 0,thumbnail:U(e.thumbnail)}}function U(e){if(e){return(Array.isArray(e)?e:[e]).map((e=>"string"==typeof e?{id:e,type:"Image"}:("unknown"===e.type&&(e.type="Image"),e)))}return e}function H(e){if(!e.within)return;const t=Array.isArray(e.within)?e.within:[e.within],i=[];for(const r of t)if("string"==typeof r){if(r&&"sc:Manifest"===e["@type"])i.push({id:r,type:"Collection"})}else r["@id"]&&i.push({id:r["@id"],type:T(r)});return i.length?i:void 0}function G(e){const t=e.related?Array.isArray(e.related)?e.related:[e.related]:[],i=e.contentLayer;return{provider:e.logo||t.length?[{id:O,type:"Agent",homepage:t.length?[t[0]]:void 0,logo:e.logo?Array.isArray(e.logo)?e.logo:[e.logo]:void 0,label:L(F)}]:void 0,partOf:H(e),rendering:e.rendering,seeAlso:e.seeAlso,start:e.startCanvas,service:e.service?_(e.service):void 0,supplementary:i?[i]:void 0}}function Q(e){const t=e;return w({...q(t),...B(t),...G(t),...(i=t,{chars:i.chars,format:i.format?i.format:void 0,language:i.language})});var i}const V=new i({collection:[function(e){return w({...q(e),...B(e),...G(e),items:e.members})}],manifest:[function(e){const t=[],i=[];let r;for(const s of e.sequences||[])s.canvases.length&&t.push(...s.canvases),s.behavior&&i.push(...s.behavior),s.startCanvas&&(r=s.startCanvas);const n=q(e);return i.length&&(n.behavior?n.behavior.push(...i):n.behavior=i),w({...n,...B(e),...G(e),start:r,items:t,structures:e.structures})}],canvas:[function(e){return w({...q(e),...B(e),...G(e),annotations:e.otherContent&&e.otherContent.length?e.otherContent:void 0,items:e.images&&e.images.length?[{id:N(e,"annotation-page"),type:"AnnotationPage",items:e.images}]:void 0})}],annotationList:[function(e){return w({...q(e),...B(e),...G(e),items:e.resources&&e.resources.length?e.resources:void 0})}],sequence:[function(e){return e.canvases&&0!==e.canvases.length?{canvases:e.canvases,behavior:e.viewingHint?[e.viewingHint]:[],startCanvas:e.startCanvas}:{canvases:[],behavior:[]}}],annotation:[function(e){return w({...q(e),...B(e),...G(e),target:function e(t){if(Array.isArray(t)){if(t.length>1)return{type:"List",items:t.map(e)};t=t[0]}if("string"==typeof t)return encodeURI(t).trim();if("@type"in t){let e;if("string"==typeof t.full)e=t.full;else if("dctypes:Image"===t.full["@type"])e={id:t.full["@id"],type:"Image"};else{if("sc:Canvas"!==t.full["@type"])throw new Error(`Unsupported source type on annotation: ${t.full["@type"]}`);e={id:t.full["@id"],type:"Canvas"}}return{type:"SpecificResource",source:e,selector:X(t.selector)}}return encodeURI(t["@id"]).trim()}(e.on),body:Array.isArray(e.resource)?e.resource.map(Q):Q(e.resource)})}],contentResource:[Q],choice:[function(e){const t=[];return e.default&&"rdf:nil"!==e.default&&t.push(e.default),e.item&&"rdf:nil"!==e.item&&t.push(...e.item),{...q(e),...B(e),items:t}}],range:[function(e){return w({...q(e),...B(e),...G(e),items:e.members})}],service:[function(e){const{"@id":t,"@type":i,"@context":r,profile:n,...s}=e,a={};return t&&(a["@id"]=t),a["@type"]=T(e),"unknown"===a["@type"]&&(r&&r.length&&(a["@context"]=r),a["@type"]="Service"),n&&(a.profile=E(n)),w({...a,...s})}],layer:[function(e){return w({...q(e),...B(e),...G(e)})}]});function J(e){return e&&e["@context"]&&("http://iiif.io/api/presentation/2/context.json"===e["@context"]||-1!==e["@context"].indexOf("http://iiif.io/api/presentation/2/context.json")||"http://www.shared-canvas.org/ns/context.json"===e["@context"])||"http://iiif.io/api/image/2/context.json"===e["@context"]?V.traverseUnknown(e):e}function X(e){if((Array.isArray(e["@type"])&&e["@type"].includes("oa:SvgSelector")||"oa:SvgSelector"==e["@type"])&&("chars"in e||"value"in e))return{type:"SvgSelector",value:"chars"in e?e.chars:e.value};if("oa:FragmentSelector"===e["@type"])return{type:"FragmentSelector",value:e.value};if("oa:Choice"===e["@type"])return[X(e.default),...(Array.isArray(e.item)?e.item:[e.item]).map(X)];if("iiif:ImageApiSelector"==e["@type"])return{type:"ImageApiSelector",region:"region"in e?e.region:void 0,rotation:"rotation"in e?e.rotation:void 0};throw new Error(`Unsupported selector type: ${e["@type"]}`)}const Y=Object.freeze(Object.defineProperty({__proto__:null,types:e,identifyResource:t,Traverse:i,convertLanguageMapping:L,getProfile:E,getTypeFromContext:j,presentation2to3:V,convertPresentation2:J},Symbol.toStringTag,{value:"Module"}));function Z(e){return"string"!=typeof e&&(!!e&&"SpecificResource"===e.type)}function K(e,t){const i=t||"unknown";if(!e)return;if("string"==typeof e)return{id:e,type:i};if(Z(e))return K(e.source,t);let r=i&&"unknown"!==i?i:e.type||e["@type"];const n=e.id||e["@id"];return-1!==r.indexOf(":")&&(r=r.split(":").pop()),n&&r?{id:n,type:r}:void 0}const ee={},te="iiif-parser:hasPart",ie="iiif-parser:partOf",re="iiif-parser:isExternal",ne="__$UNSET$__",se="__$UNWRAP$__",ae=[];function oe(e){if(e===ee||0===Object.keys(e).length)return!0;for(const t in e)return!1;return!0}function ce(e,t){if(t&&t["@explicit"]){const i={},r=Object.keys(t);for(const n of r)n!==ie&&"@explicit"!==n&&(oe(t[n])?i[n]=e[n]:i[n]=t[n]);return i}return e}function le(e,t,i){const r=K(t);if(!r)return[void 0,void 0];const n=e.requests[r.id],s=r.type||e.mapping[r.id];if(!s||n&&n.resourceUri&&!e.entities[s][n.resourceUri])return[void 0,void 0];const a=e.entities[s][n?n.resourceUri:r.id];if(r.type&&!a)return le(e,{id:r.id},i);if(a&&a[te]){const e=a[te].find((e=>i?e[ie]===i.id:e[ie]===a.id));return[ce(a,e),a]}return[a,a]}Object.freeze(ae),Object.freeze(ee);const ue={id:"https://iiif-parser/annotation",type:"Annotation",behavior:ae,label:null,thumbnail:ae,summary:null,requiredStatement:null,metadata:ae,seeAlso:ae,homepage:ae,rendering:ae,service:ae,accessibility:ae,audience:ae,body:ae,bodyValue:null,canonical:null,created:null,creator:ae,generated:null,generator:ae,modified:null,motivation:ae,rights:null,stylesheet:null,target:ae,timeMode:void 0,via:ae,partOf:ae},pe={id:"https://iiif-parser/annotation-page",type:"AnnotationPage",behavior:ae,label:null,thumbnail:ae,summary:null,requiredStatement:null,metadata:ae,rights:null,provider:ae,items:ae,seeAlso:ae,homepage:ae,rendering:ae,service:ae},fe={id:"https://iiif-parser/empty-canvas",type:"Canvas",label:null,behavior:ae,thumbnail:ae,accompanyingCanvas:null,placeholderCanvas:null,summary:null,requiredStatement:null,metadata:ae,rights:null,navDate:null,provider:ae,items:ae,annotations:ae,seeAlso:ae,homepage:ae,partOf:ae,rendering:ae,service:ae,duration:0,height:0,width:0},he={id:"https://iiif-parser/empty-collection",type:"Collection",label:null,viewingDirection:"left-to-right",behavior:ae,thumbnail:ae,accompanyingCanvas:null,placeholderCanvas:null,summary:null,requiredStatement:null,metadata:ae,rights:null,navDate:null,provider:ae,items:ae,annotations:ae,seeAlso:ae,homepage:ae,partOf:ae,rendering:ae,service:ae,services:ae},ve={id:"https://iiif-parser/empty-manifest",type:"Manifest",annotations:ae,behavior:ae,homepage:ae,items:ae,label:null,metadata:ae,navDate:null,provider:ae,partOf:ae,accompanyingCanvas:null,placeholderCanvas:null,rendering:ae,requiredStatement:null,rights:null,seeAlso:ae,service:ae,services:ae,start:null,structures:ae,summary:null,thumbnail:ae,viewingDirection:"left-to-right"},de={id:"https://iiif-parser/empty-canvas",type:"Range",label:null,behavior:ae,thumbnail:ae,accompanyingCanvas:null,placeholderCanvas:null,summary:null,requiredStatement:null,metadata:ae,rights:null,navDate:null,provider:ae,items:ae,annotations:ae,seeAlso:ae,homepage:ae,partOf:ae,rendering:ae,service:ae,start:null,supplementary:null,viewingDirection:"left-to-right"},ye={id:"https://iiif-parser/empty-agent",type:"Agent",label:{},logo:ae,seeAlso:ae,homepage:ae},me={id:"https://iiif-parser/empty-service",type:"UnknownService"};function ge(...e){return t=>e.reduce(((e,t)=>t(e)),t)}const Ae=["Collection","Manifest","Canvas","AnnotationPage","AnnotationCollection","Annotation","ContentResource","Range","Service","Selector","Agent"];function xe(e,t){if(null==e)throw new Error("Null or undefined is not a valid entity.");if(Array.isArray(e))throw new Error("Array is not a valid entity");if("object"!=typeof e){if(t)return t;throw new Error(typeof e+" is not a valid entity")}if("string"==typeof e.type){const t=Ae.indexOf(e.type);if(-1!==t)return Ae[t]}if(e.profile)return"Service";throw new Error("Resource type is not known")}class be{constructor(e,t={}){__publicField(this,"traversals"),__publicField(this,"options"),__publicField(this,"_traverseManifest",ge(this.traverseManifestItems.bind(this),this.traverseLinking.bind(this),this.traverseDescriptive.bind(this),this.traverseLinkedCanvases.bind(this),this.traverseManifestStructures.bind(this),this.traverseInlineAnnotationPages.bind(this))),__publicField(this,"_traverseCanvas",ge(this.traverseCanvasItems.bind(this),this.traverseLinking.bind(this),this.traverseDescriptive.bind(this),this.traverseLinkedCanvases.bind(this),this.traverseInlineAnnotationPages.bind(this))),__publicField(this,"_traverseAnnotationPage",ge(this.traverseAnnotationPageItems.bind(this),this.traverseLinking.bind(this),this.traverseDescriptive.bind(this))),__publicField(this,"_traverseRange",ge(this.traverseRangeRanges.bind(this),this.traverseLinking.bind(this),this.traverseDescriptive.bind(this),this.traverseLinkedCanvases.bind(this))),this.traversals={collection:[],manifest:[],canvas:[],annotationCollection:[],annotationPage:[],annotation:[],contentResource:[],choice:[],range:[],service:[],agent:[],specificResource:[],geoJson:[],...e},this.options={allowUndefinedReturn:!1,...t}}static all(e){return new be({collection:[e],manifest:[e],canvas:[e],annotationCollection:[e],annotationPage:[e],annotation:[e],contentResource:[e],choice:[e],range:[e],service:[e],geoJson:[e],specificResource:[e],agent:[e]})}traverseDescriptive(e){return e.thumbnail&&(e.thumbnail=_(e.thumbnail).map((t=>this.traverseType(t,{parent:e},this.traversals.contentResource)))),e.provider&&(e.provider=e.provider.map((t=>this.traverseAgent(t,e)))),e}traverseLinking(e){return e.seeAlso&&(e.seeAlso=e.seeAlso.map((t=>this.traverseType(t,{parent:e},this.traversals.contentResource)))),e.service&&(e.service=_(e.service).map((e=>this.traverseService(e)))),e.services&&(e.services=_(e.services).map((t=>this.traverseService(t,e)))),e.logo&&(e.logo=e.logo.map((t=>this.traverseType(t,{parent:e},this.traversals.contentResource)))),e.homepage&&(e.homepage=e.homepage.map((t=>this.traverseType(t,{parent:e},this.traversals.contentResource)))),e.partOf&&(e.partOf=e.partOf.map((t=>"string"!=typeof t&&t.type?"Canvas"===t.type?this.traverseType(t,{parent:e},this.traversals.canvas):"AnnotationCollection"===t.type?this.traverseType(t,{parent:e},this.traversals.annotationCollection):"Collection"===t.type?this.traverseType(t,{parent:e},this.traversals.collection):this.traverseType(t,{parent:e},this.traversals.contentResource):this.traverseType(t,{parent:e},this.traversals.contentResource)))),e.start&&(Z(e.start)?e.start=this.traverseSpecificResource(e.start,"Canvas",e):e.start=this.traverseType(e.start,{parent:e},this.traversals.canvas)),e.rendering&&(e.rendering=e.rendering.map((t=>this.traverseType(t,{parent:e},this.traversals.contentResource)))),e.supplementary&&(e.supplementary=e.supplementary.map((t=>this.traverseType(t,{parent:e},this.traversals.contentResource)))),e}traverseCollectionItems(e){return e.items&&e.items.map((e=>"Collection"===e.type?this.traverseCollection(e):this.traverseManifest(e))),e}traverseCollection(e,t){return this.traverseType(this.traverseDescriptive(this.traverseInlineAnnotationPages(this.traverseLinking(this.traverseLinkedCanvases(this.traverseCollectionItems(e))))),{parent:t},this.traversals.collection)}traverseGeoJson(e,t){return this.traverseType(e,{parent:t},this.traversals.geoJson)}traverseNavPlace(e){return e.navPlace&&(e.navPlace=this.traverseGeoJson(e.navPlace,e)),e}traverseManifestItems(e){return e.items&&(e.items=e.items.map((e=>this.traverseCanvas(e)))),e}traverseManifestStructures(e){return e.structures&&(e.structures=e.structures.map((e=>this.traverseRange(e)))),e}traverseManifest(e,t){return this.traverseType(this._traverseManifest(e),{parent:t},this.traversals.manifest)}traverseCanvasItems(e){return e.items=(e.items||[]).map((t=>this.traverseAnnotationPage(t,e))),e}traverseInlineAnnotationPages(e){return"string"!=typeof e&&e?(e.annotations&&(e.annotations=e.annotations.map((t=>this.traverseAnnotationPage(t,e)))),e):e}traverseCanvas(e,t){return this.traverseType(this._traverseCanvas(e),{parent:t},this.traversals.canvas)}traverseAnnotationPageItems(e){return e.items&&(e.items=e.items.map((t=>this.traverseAnnotation(t,e)))),e}traverseAnnotationPage(e,t){return this.traverseType(this._traverseAnnotationPage(e),{parent:t},this.traversals.annotationPage)}traverseAnnotationBody(e){return Array.isArray(e.body)?e.body=e.body.map((t=>this.traverseContentResource(t,e))):e.body&&(e.body=this.traverseContentResource(e.body,e)),e}traverseLinkedCanvases(e){return e.placeholderCanvas&&(e.placeholderCanvas=this.traverseCanvas(e.placeholderCanvas)),e.accompanyingCanvas&&(e.accompanyingCanvas=this.traverseCanvas(e.accompanyingCanvas)),e}traverseAnnotation(e,t){return this.traverseType(this.traverseLinking(this.traverseAnnotationBody(this.traverseDescriptive(e))),{parent:t},this.traversals.annotation)}traverseContentResourceLinking(e){return"string"!=typeof e&&e?(e&&e.service&&(e.service=_(e.service||[]).map((t=>this.traverseService(t,e)))),e):e}traverseContentResource(e,t){return"Choice"===e.type&&(e.items=e.items.map((t=>this.traverseContentResource(t,e)))),Z(e)?this.traverseSpecificResource(e,"ContentResource"):this.traverseType(this.traverseInlineAnnotationPages(this.traverseContentResourceLinking(e)),{parent:t},this.traversals.contentResource)}traverseSpecificResource(e,t,i){let r=e.source;return"string"==typeof e.source&&(r={id:e.source,type:t||"unknown"}),this.traverseType({...e,source:"Canvas"===t||"Canvas"===r.type?this.traverseType(r,{parent:i},this.traversals.canvas):"ContentResource"===t?this.traverseContentResource(r,{parent:i}):this.traverseUnknown(r,{parent:i,typeHint:t})},{parent:i},this.traversals.specificResource)}traverseRangeRanges(e){return e.items&&(e.items=e.items.map((t=>"string"==typeof t?this.traverseCanvas({id:t,type:"Canvas"},e):Z(t)?this.traverseSpecificResource(t,"Canvas",e):"Manifest"===t.type?this.traverseManifest(t,e):this.traverseRange(t,e)))),e}traverseRange(e,t){return this.traverseType(this._traverseRange(e),{parent:t},this.traversals.range)}traverseAgent(e,t){return this.traverseType(this.traverseDescriptive(this.traverseLinking(e)),{parent:t},this.traversals.agent)}traverseType(e,t,i){return i.reduce(((e,i)=>{const r=i(e,t);return void 0!==r||this.options.allowUndefinedReturn?r:e}),e)}traverseService(e,t){const i=Object.assign({},e);return i&&i.service&&(i.service=_(i.service).map((e=>this.traverseService(e)))),this.traverseType(i,{parent:t},this.traversals.service)}traverseUnknown(e,{parent:t,typeHint:i}={}){const r=xe(e,i);switch(r){case"Collection":return this.traverseCollection(e,t);case"Manifest":return this.traverseManifest(e,t);case"Canvas":return this.traverseCanvas(e,t);case"AnnotationPage":return this.traverseAnnotationPage(e,t);case"Annotation":return this.traverseAnnotation(e,t);case"ContentResource":return this.traverseContentResource(e,t);case"Range":return this.traverseRange(e,t);case"Service":return this.traverseService(e,t);case"Agent":return this.traverseAgent(e,t);default:if(i)return i;throw new Error(`Unknown or unsupported resource type of ${r}`)}}}function Ce(e,t={}){if(Array.isArray(e))return Ce(e[0]);if("string"==typeof e){const[i,r]=e.split("#");return r?{type:"SpecificResource",source:{id:i,type:t.typeHint||"Unknown"},selector:{type:"FragmentSelector",value:r}}:{type:"SpecificResource",source:{id:i,type:t.typeMap&&t.typeMap[i]||t.typeHint||"Unknown"}}}if("Choice"===e.type||"List"===e.type||"Composite"===e.type||"Independents"===e.type)return Ce(e.items[0]);if("SpecificResource"===e.type)return"Canvas"===e.source.type&&e.source.partOf&&"string"==typeof e.source.partOf&&(e.source.partOf=[{id:e.source.partOf,type:"Manifest"}]),e.selector?{type:"SpecificResource",source:e.source,selector:e.selector}:{type:"SpecificResource",source:e.source};if(e.id){"Canvas"===e.type&&e.partOf&&"string"==typeof e.partOf&&(e.partOf=[{id:e.partOf,type:"Manifest"}]);const[t,i]=e.id.split("#");return i?{type:"SpecificResource",source:{...e,id:t},selector:{type:"FragmentSelector",value:i}}:{type:"SpecificResource",source:{...e,id:t}}}return{type:"SpecificResource",source:e}}function Ie(){return{Collection:{},Manifest:{},Canvas:{},AnnotationPage:{},AnnotationCollection:{},Annotation:{},ContentResource:{},Range:{},Service:{},Selector:{},Agent:{}}}function Se(e,t){if("string"==typeof e)return{id:e,type:t};if(!e.id)throw new Error(`Invalid resource does not have an ID (${JSON.stringify(e)}, ${t})`);return e}function _e(e,t,i){if(!t)return e;if(Array.isArray(e)){if(!Array.isArray(t))throw new Error("Cannot merge array with non-array");const i=[...e];for(const r of t)if(r["@id"]&&!r.id&&(r.id=r["@id"]),r["@type"]&&!r.type&&(r.type=r["@type"]),null!=r)if(Array.isArray(r))i.push(r);else if("object"==typeof r&&r.id&&r.type){const e=i.findIndex((e=>e.id===r.id&&e.type===r.type));e>=0&&(i[e]=_e(i[e],r))}else-1===e.indexOf(r)&&i.push(r);return i}if("object"==typeof e){if(Array.isArray(t)||"object"!=typeof t)throw new Error("Cannot merge object with non-object");const r={...e},n=[],s=[],a=Object.keys(e).filter((e=>e!==te&&"id"!==e&&"type"!==e)),o={},c={};for(const[e,i]of Object.entries(t)){if(e===te||"id"===e||"type"===e)continue;const t=r[e];t===i?s.push(e):t!==ae&&t?(t&&i&&(o[e]=t,c[e]=i),r[e]=_e(t,i),r[e]===o[e]&&(s.push(e),delete o[e])):(n.push(e),r[e]=i)}if(i&&(i.parent&&i.parent.id||i.isTopLevel)){const t=[],l={};if(i.parent?l[ie]=i.parent.id:i.isTopLevel&&(l[ie]=e.id),r[te]&&r[te].length){const e=!(r[te]||[]).find((e=>e["@explicit"])),i=n.length>0||s.length!==a.length;if(e&&i)for(const n of r[te]){const e={...n},i=Object.keys(o);if(e){e["@explicit"]=!0;for(const t of a)t!==te&&(e[t]=ee);for(const t of i)e[t]=o[t]}t.push(e)}else t.push(...r[te]);if(i){const e=Object.keys(c);l["@explicit"]=!0;for(const t of n)l[t]=ee;for(const t of s)l[t]=ee;for(const t of e)l[t]=c[t]}}l.id=r.id,l.type=r.type,t.push(l),r[te]=t}return r}return e||t}function we(e,t,i){if("string"==typeof e)return e;if(t.id!==e.id||t.type!==e.type){if("ImageService3"===t.type)return t;if("ImageService3"===e.type)return e;throw new Error(`Can only merge entities with identical identifiers and type! ${t.type}(${t.id}) => ${e.type}(${e.id})`)}return _e({...e},t,i)}function Re(e){return t=>{e.Service=e.Service?e.Service:{};const i=t.id||t["@id"],r=function(e){const t=Object.assign({},e);if(t["@id"]&&(t.id=t["@id"]),t["@type"]&&(t.type=t["@type"]),t.service){const e=[];t.service=Array.isArray(t.service)?t.service:[t.service];for(const i of t.service)e.push({id:i["@id"]||i.id,type:i["@type"]||i.type});t.service=e}return Object.assign({},me,t)}(t);return r&&r.id&&(e.Service[r.id]?e.Service[i]=we(e.Service[i],r):e.Service[i]=r),t}}function Oe(e){const t=JSON.stringify(e);let i=5381,r=t.length;for(;r;)i=33*i^t.charCodeAt(--r);const n=(i>>>0).toString(16);return n.length%2?"0"+n:n}function Fe(e){return t=>"string"==typeof t?{id:t,type:e}:t.id?t.type?t:{type:e,...t}:{id:`vault://${Oe(t)}`,type:e,...t}}function Le(e){return t=>({...e,...t})}function Ee(e){return Array.isArray(e)?e:[e]}function je(e){return e.body&&(e.body=Ee(e.body)),e.seeAlso&&(e.seeAlso=Ee(e.seeAlso)),e.audience&&(e.audience=Ee(e.audience)),e.accessibility&&(e.accessibility=Ee(e.accessibility)),e.motivation&&(e.motivation=Ee(e.motivation)),e}function Me(e,{typeHint:t,partOfTypeHint:i}={}){if("string"==typeof e&&(e={id:e,type:t||"unknown"}),Z(e))return"string"==typeof e.source&&(e.source={id:e.source,type:t||"unknown"}),"Canvas"===e.source.type&&e.source.partOf&&"string"==typeof e.source.partOf&&(e.source.partOf=[{id:e.source.partOf,type:i||"Manifest"}]),e;let r;if(-1!==(e.id||"").indexOf("#")){const[t,i]=(e.id||"").split("#");e.id=t,i&&(r={type:"FragmentSelector",value:i})}return{type:"SpecificResource",source:e,selector:r}}function Pe(e){const t=Object.assign({},e);return e&&e.items&&(t.items=e.items.map((e=>"string"==typeof e||"Canvas"===e.type?Me(e):e))),t}function Te(e){const t=Object.assign({},e);return t.start?(t.start=Me(t.start,{typeHint:"Canvas"}),t):e}function ze(e){const t=Object.assign({},e);return t.target?(t.target=Ce(t.target,{typeHint:"Canvas"}),t):e}function ke(e){return e}function $e(e){return void 0===e.items&&(e[re]=!0),e}function De(e){const t={};for(const[i,r]of e){if(i===se&&r!==ne)return r;r!==ne&&null!=r&&(t[i]=r)}return t}function We(e,{allowSourceString:t=!0,allowString:i=!1,allowedStringType:r}={}){const n=e=>{if(t&&e&&e.source&&"string"!=typeof e.source){const t=Object.keys(e.source);if(e.source.id&&e.source.type&&2===t.length)return{...e,source:e.source.id}}return e};if(e){if(e.source&&e.source.partOf)return n(e);const t=Object.keys(e);if(2===t.length&&e.type&&e.source||3===t.length&&e.type&&e.source&&-1!==t.indexOf("selector")&&!e.selector)return!i||r&&r!==e.source.type?"ContentResource"===e.source.type?{type:"SpecificResource",source:e.source.id}:e.source:e.source.id;if(e.selector&&!Array.isArray(e.selector)&&"string"!=typeof e.selector&&"FragmentSelector"===e.selector.type){const t=`${e.source.id}#${e.selector.value}`;return i?t:{id:t,type:e.source.type}}}return n(e)}function Ne(e){if(!e)return;const t=Object.keys(e);if(0!==t.length){if(1===t.length){const i=t[0];if(!i)return"";const r=(e[i]||[]).join("");return"@none"===i||"none"===i||"en"===i?r:{"@language":i,"@value":r}}return t.map((t=>({"@language":t,"@value":(e[t]||[]).join("")})))}}function qe(e){return Array.isArray(e)?e.map((e=>qe(e))):"string"==typeof e?e:e.type&&"Canvas"===e.type?e.id:e}function Be(e,t=!1){if(e)return e.length>1&&!t?e:e[0]||void 0}function Ue(e){if(e){if("string"==typeof e)return{"@id":e};if("@id"in e){const t={...e};return delete t["@type"],t}return{"@context":"http://iiif.io/api/image/2/context.json","@id":e.id,profile:`http://iiif.io/api/image/2/profiles/${e.profile}.json`}}}function He(e,t){return[["@id",e.id],["@type",t],["format",e.format],["height",e.height],["width",e.width],["viewingDirection","left-to-right"!==e.viewingDirection?e.viewingDirection:void 0],["license",e.license?e.license:void 0]]}function*Ge(e){const t=e.provider?yield e.provider[0]:void 0;return[["label",Ne(e.label)],["metadata",e.metadata&&e.metadata.length?e.metadata.map((e=>({label:Ne(e.label)||"",value:Ne(e.value)||""}))):void 0],["description",Ne(e.summary)],["thumbnail",Be(yield e.thumbnail)],["navDate",e.navDate],["logo",t?Be(t.logo):void 0],["homepage",t?t.homepage:void 0],["attribution",e.requiredStatement?Ne(e.requiredStatement.value):void 0]]}function*Qe(e){const t=e.start&&e.start.type&&"SpecificResource"===e.start.type?We(e.start):e.start;return[["seeAlso",Be(yield e.seeAlso)],["service",Be((e.service||[]).map(Ue))],["rendering",Be(yield e.rendering)],["startCanvas",t?t.id:void 0]]}function Ve(e){if(e&&function(e){return"SpecificResource"===e.type}(e)){let t=e.id;const i=e.selector?Array.isArray(e.selector)?e.selector[0]:e.selector:void 0;return function(e){return e&&"FragmentSelector"===e.type}(i)&&(t+="#"+i.value),t}return null==e?void 0:e.id}const Je={Manifest:function*(e,t,{isTopLevel:i}){return[...i?[["@context","http://iiif.io/api/presentation/2/context.json"]]:[],...He(e,"sc:Manifest"),...yield*Ge(e),...yield*Qe(e),["sequences",[{"@id":`${e.id}/sequence0`,"@type":"sc:Sequence",canvases:yield e.items}]],["structures",yield e.structures]]},Canvas:function*(e){const t=(yield e.items)[0];return[...He(e,"sc:Canvas"),...yield*Ge(e),...yield*Qe(e),["images",t?[t.resources]:void 0],["annotations",e.annotations&&e.annotations.length?Be(yield e.annotations):void 0]]},AnnotationPage:function*(e){return[...He(e,"sc:AnnotationList"),...yield*Ge(e),["resources",e.items&&e.items.length?Be(yield e.items):void 0]]},Annotation:function*(e){return[["@id",e.id],["@type","oa:Annotation"],["motivation","sc:painting"],["on",qe(e.target)],["resource",Be(yield e.body,!0)]]},ContentResource:function*(e){return"Image"===e.type?[...He(e,"dctypes:Image"),...yield*Ge(e),...yield*Qe(e)]:[...He(e,void 0),...yield*Ge(e)]},AnnotationCollection:function*(e){return[["@id",e.id],["@type","sc:Layer"],["label",Ne(e.label)]]},Collection:function*(e){return[...He(e,"sc:Collection"),...yield*Ge(e),...yield*Qe(e),["members",yield*e.items]]},Range:function*(e){const t=[],i=[];if(e.items)for(const r of e.items){const n="SpecificResource"===r.type?r.source:r;if(n){const s=yield n;t.push({"@id":Ve(r),"@type":n.type,label:s?s.label:void 0,within:e.id}),"Canvas"===n.type&&i.push(n.id)}}return[...He(e,"sc:Range"),...yield*Ge(e),...yield*Qe(e),["canvases",i.length===t.length?i:void 0],["members",i.length!==t.length?t:void 0]]}};function Xe(e){var t;return[["id",(null==(t=e.id)?void 0:t.startsWith("vault://"))?void 0:e.id],["type",e.type],["format",e.format],["profile",e.profile],["height",e.height||void 0],["width",e.width||void 0],["duration",e.duration||void 0],["viewingDirection","left-to-right"!==e.viewingDirection?e.viewingDirection:void 0],["behavior",e.behavior&&e.behavior.length?e.behavior:void 0],["timeMode",e.timeMode],["motivation",Array.isArray(e.motivation)?e.motivation[0]:e.motivation],[te,ne]]}function Ye(e){if(e===ne)return;if(!e||0===e.length)return;const t=e.filter((e=>e!==ne));return 0!==t.length?t:void 0}function Ze(e){if(e&&e.type&&"ImageService2"===e.type){const{id:t,type:i,profile:r,...n}=e,s="string"==typeof r?r:Array.isArray(r)?r.find((e=>"string"==typeof e)):"";return{"@id":t,"@type":i,profile:s?s.startsWith("http")?s:`http://iiif.io/api/image/2/${s}.json`:"http://iiif.io/api/image/2/level0.json",...n}}return e}function Ke(e){if(Array.isArray(e)||(e=e?[e]:[]),e&&0!==e.length)return e.map(Ze)}function*et(e){return[["label",e.label],["metadata",Ye(e.metadata)],["summary",e.summary],["requiredStatement",e.requiredStatement],["rights",Array.isArray(e.rights)?e.rights[0]||void 0:e.rights||void 0],["navDate",e.navDate],["language",e.language],["thumbnail",Ye(yield e.thumbnail)],["placeholderCanvas",yield e.placeholderCanvas],["accompanyingCanvas",yield e.accompanyingCanvas],["provider",Ye(yield e.provider)]]}function*tt(e){return[["seeAlso",Ye(yield e.seeAlso)],["service",Ye(Ke(e.service))],["services",Ye(Ke(e.services))],["rendering",Ye(yield e.rendering)],["supplementary",Ye(yield e.supplementary)],["homepage",Ye(yield e.homepage)],["logo",Ye(yield e.logo)],["partOf",Ye(yield e.partOf)],["start",e.start?We(e.start):e.start]]}const it={Manifest:function*(e,t,{isTopLevel:i}){return i?[["@context",e["@context"]?e["@context"]:"http://iiif.io/api/presentation/3/context.json"],...Xe(e),...yield*et(e),...yield*tt(e),["items",yield e.items],["structures",Ye(yield e.structures)],["annotations",Ye(yield e.annotations)],["navPlace",e.navPlace]]:[...Xe(e),...yield*et(e)]},Canvas:function*(e){return[...Xe(e),...yield*et(e),...yield*tt(e),["items",yield e.items],["annotations",Ye(yield e.annotations)],["navPlace",e.navPlace]]},Agent:function*(e){return[["id",e.id],["type","Agent"],["label",e.label],...yield*tt(e)]},AnnotationPage:function*(e){var t;const i=Object.entries(e).map((([e,t])=>[e,Array.isArray(t)?Ye(t):t])).filter((([e,t])=>"items"!==e&&"id"!==e&&e!==te&&e!==ie&&e!==re)),r=yield e.items;return[["id",(null==(t=e.id)?void 0:t.startsWith("vault://"))?void 0:e.id],...i,...yield*tt(e),["items",r.length||!1===e[re]?r:ne]]},Service:function*(e){return[[se,Ze(e)]]},Annotation:function*(e){const t=Object.entries(e).map((([e,t])=>"motivation"===e?[e,Array.isArray(t)?t[0]:t]:"target"===e?[e,We(t,{allowString:!0,allowSourceString:!0,allowedStringType:"Canvas"})]:[e,Array.isArray(t)?Ye(t):t])).filter((([e])=>"body"!==e&&e!==te&&e!==re));let i;if(Array.isArray(e.body)){const t=[];for(const i of e.body)if(i&&Z(i)){const e={...i};e.source=yield i.source,t.push(We(e,{allowSourceString:!0}))}else t.push(yield i);i=t}else e.body&&Z(e.body)?(i={...e.body},i.source=yield e.body.source):i=yield e.body;return[...t,...yield*et(e),...yield*tt(e),["body",1===i.length?i[0]:i]]},ContentResource:function*(e){return function(e,t){const i=Object.keys(t),r=e.map((([e])=>e));for(const n of i)n!==te&&n!==re&&-1===r.indexOf(n)&&void 0!==t[n]&&e.push([n,t[n]]);return e}([...Xe(e),...yield*et(e),...yield*tt(e),["annotations",Ye(yield e.annotations)],["items",Ye(yield e.items)]],e)},AnnotationCollection:function*(e){return[["id",e.id],["type","AnnotationCollection"],["label",e.label]]},Collection:function*(e,t,{isTopLevel:i}){return i?[["@context","http://iiif.io/api/presentation/3/context.json"],...Xe(e),...yield*et(e),...yield*tt(e),["items",Ye(yield e.items)],["navPlace",e.navPlace]]:[...Xe(e),...yield*et(e)]},Range:function*(e){const t=[];for(const i of e.items)"Range"===i.type?t.push(yield i):i&&"SpecificResource"===i.type?t.push(We(i)):t.push(i);return[...Xe(e),...yield*et(e),...yield*tt(e),["items",t],["annotations",Ye(yield e.annotations)],["navPlace",e.navPlace]]}};const rt=Object.freeze(Object.defineProperty({__proto__:null,emptyAnnotation:ue,emptyAnnotationPage:pe,emptyCanvas:fe,emptyCollection:he,emptyManifest:ve,emptyRange:de,emptyAgent:ye,emptyService:me,defaultEntities:{Collection:{},Manifest:{},Canvas:{},AnnotationPage:{},AnnotationCollection:{},Annotation:{},ContentResource:{},Range:{},Service:{},Selector:{},Agent:{}},getDefaultEntities:Ie,merge:_e,mergeEntities:we,traverseSpecificResource:ke,addFlagForExternalResource:$e,normalize:function(e){const t=J(e),i={Collection:{},Manifest:{},Canvas:{},AnnotationPage:{},AnnotationCollection:{},Annotation:{},ContentResource:{},Range:{},Service:{},Selector:{},Agent:{}},r={},n=function(e,t){return(i,r)=>{const n=e[i]?e[i]:{};return(e,s)=>{const a=Se(e,r||i);return a&&a.id&&i?(n[a.id]=n[a.id]?we(n[a.id],a,{parent:s.parent,isTopLevel:t.id===a.id}):we({id:a.id,type:a.type},a,{parent:s.parent,isTopLevel:t.id===a.id}),{id:a.id,type:"ContentResource"===i?i:a.type}):a}}}(i,t),s=function(e){return(t,i)=>r=>{const{id:n,type:s}=Se(r,i||t);if(void 0===n)throw new Error("Found invalid entity without an ID.");return e[n]="ContentResource"===t||"Service"===t?t:s,r}}(r);return{entities:i,resource:new be({collection:[$e,Le(he),s("Collection"),n("Collection")],manifest:[$e,Le(ve),Te,s("Manifest"),n("Manifest")],canvas:[Le(fe),s("Canvas"),n("Canvas")],annotationPage:[$e,Fe("AnnotationPage"),Le(pe),s("AnnotationPage"),n("AnnotationPage")],annotation:[Fe("Annotation"),je,ze,s("Annotation"),n("Annotation")],contentResource:[Fe("ContentResource"),s("ContentResource"),n("ContentResource")],range:[Le(de),Pe,s("Range","Canvas"),n("Range","Canvas")],agent:[Le(ye),s("Agent"),n("Agent")],specificResource:[ke],service:[Re(i)]}).traverseUnknown(t),mapping:r}},types:Ae,identifyResource:xe,Traverse:be,serializedFieldsToObject:De,serialize:function(e,t,i){if(!t.type||!t.id)throw new Error("Unknown entity");if(!i[t.type])throw new Error(`Serializer not found for ${t.type}`);return function r(n,s,a=0){const o=i[n.type];if(!o)return ne;if(a>20)throw new Error("Circular reference: "+n.id+" "+n.type);const[c,l]=le(e,n.type?n:n.id,s)||(n.id&&n.type?n:null);if(!c)return ne;const u=o(c,e,{parent:s,isTopLevel:t.id===n.id,fullResource:l});let p=u.next();for(;!p.done;){const e=p.value;let t=ne;if(e)if(Array.isArray(e)){const i=[];for(const t of e)i.push(r(t,n,a+1));t=i}else t=r(e,n,a+1);p=u.next(t)}return p.value===ne?ne:De(p.value)}(t)},languageString2to3:Ne,serializeConfigPresentation2:Je,serializeConfigPresentation3:it,WILDCARD:ee,HAS_PART:te,PART_OF:ie,IS_EXTERNAL:re,UNSET:ne,UNWRAP:se,EMPTY:ae,isWildcard:oe,frameResource:ce,resolveIfExists:le,toRef:K,compressSpecificResource:We,isSpecificResource:Z},Symbol.toStringTag,{value:"Module"}));function nt(e){try{if("full"===e)return{full:!0};if("square"===e)return{square:!0};const t=e.startsWith("pct:"),i=e.substr(t?4:0).split(",").map((e=>parseFloat(e)));return{x:i[0],y:i[1],w:i[2],h:i[3],percent:t}}catch{throw new Error("Expected 'full', 'square' or 'x,y,w,h'. Found "+e)}}function st(e){const t={upscaled:!1,max:!1,confined:!1};if("^"===e[0]&&(t.upscaled=!0,e=e.slice(1)),"max"===e||"full"===e)return t.max=!0,t.serialiseAsFull="full"===e,t;if("!"===e[0]&&(t.confined=!0,e=e.slice(1)),"p"===e[0])return t.percentScale=parseFloat(e.slice(4)),t;const i=e.split(",").map((e=>e.trim()));return i.length&&(""!==i[0]&&(t.width=parseInt(i[0],10)),""!==i[1]&&(t.height=parseInt(i[1],10))),t}function at(e){const t={angle:0};if("!"===e[0]&&(t.mirror=!0,e=e.substr(1)),t.angle=parseFloat(e)%360,Number.isNaN(t.angle))throw new Error(`Invalid rotation ${e}`);return t}function ot(e,t=""){const i=e.match(/^(([a-zA-Z]+):\/\/([^/]+))?((.*)+)/);if(!i)throw new Error(`Invalid or unknown input ${e}`);const r=i[2],n=i[3];let s=i[4];if("/"===s[0]&&(s=s.substr(1)),t.length>0){if("/"===t[0]&&(t=t.substr(1)),t!==s.substr(0,t.length))throw new Error(`Path does not start with prefix (path: ${s}, prefix: ${t})`);s=s.substr(t.length)}return{scheme:r,server:n,path:s,prefix:t}}function ct(e,t=""){const{path:i,scheme:r,server:n,prefix:s}=ot(e,t),a=i.split("/").reverse(),[o,c,l,u,...p]=a,f=p.reverse().filter(Boolean).join("/");if(1===a.length||""===o)return{type:"base",scheme:r,server:n,prefix:s,identifier:f};if("info.json"===o){const[,...e]=a;return{type:"info",scheme:r,server:n,prefix:s,identifier:e.reverse().filter(Boolean).join("/")}}const h=o.split(".");return{type:"image",scheme:r,server:n,prefix:s,identifier:f,originalPath:i,region:nt(u),size:st(l),rotation:at(c),quality:h[0],format:h[1]}}const lt="http://library.stanford.edu/iiif/image-api/compliance.html#level0",ut="http://library.stanford.edu/iiif/image-api/compliance.html#level1",pt="http://library.stanford.edu/iiif/image-api/compliance.html#level2",ft="http://library.stanford.edu/iiif/image-api/conformance.html#level0",ht="http://library.stanford.edu/iiif/image-api/conformance.html#level1",vt="http://library.stanford.edu/iiif/image-api/conformance.html#level2",dt="http://library.stanford.edu/iiif/image-api/1.1/compliance.html#level0",yt="http://library.stanford.edu/iiif/image-api/1.1/compliance.html#level1",mt="http://library.stanford.edu/iiif/image-api/1.1/compliance.html#level2",gt="http://library.stanford.edu/iiif/image-api/1.1/conformance.html#level0",At="http://library.stanford.edu/iiif/image-api/1.1/conformance.html#level1",xt="http://library.stanford.edu/iiif/image-api/1.1/conformance.html#level2",bt="http://iiif.io/api/image/1/level0.json",Ct="http://iiif.io/api/image/1/profiles/level0.json",It="http://iiif.io/api/image/1/level1.json",St="http://iiif.io/api/image/1/profiles/level1.json",_t="http://iiif.io/api/image/1/level2.json",wt="http://iiif.io/api/image/1/profiles/level2.json",Rt="http://iiif.io/api/image/2/level0.json",Ot="http://iiif.io/api/image/2/profiles/level0.json",Ft="http://iiif.io/api/image/2/level1.json",Lt="http://iiif.io/api/image/2/profiles/level1.json",Et="http://iiif.io/api/image/2/level2.json",jt="http://iiif.io/api/image/2/profiles/level2.json",Mt="level0",Pt="level1",Tt="level2",zt="http://iiif.io/api/image/2/level0",kt="http://iiif.io/api/image/2/level1",$t="http://iiif.io/api/image/2/level2",Dt=[$t,pt,vt,mt,xt,_t,wt,Et,jt,Tt],Wt=[...Dt,kt,ut,ht,yt,At,It,St,Ft,Lt,Pt],Nt=[zt,kt,$t,lt,ut,pt,ft,ht,vt,dt,yt,mt,gt,At,xt,bt,Ct,It,St,_t,wt,Rt,Ot,Ft,Lt,Et,jt,Mt,Pt,Tt],qt=Nt,Bt=[zt,lt,ft,dt,gt,bt,Ct,Rt,Ot,Mt],Ut={extraFormats:["jpg"],extraQualities:["default"],extraFeatures:["sizeByWhListed"]},Ht={extraFormats:["jpg"],extraQualities:["default"],extraFeatures:["baseUriRedirect","cors","jsonldMediaType","regionByPx","regionSquare","sizeByWhListed","sizeByH","sizeByW","sizeByWh"]},Gt={extraFormats:["jpg","png"],extraQualities:["default"],extraFeatures:["baseUriRedirect","cors","jsonldMediaType","regionByPct","regionByPx","regionSquare","rotationBy90s","sizeByWhListed","sizeByConfinedWh","sizeByH","sizeByPct","sizeByW","sizeByWh"]},Qt=["baseUriRedirect","canonicalLinkHeader","cors","jsonldMediaType","mirroring","profileLinkHeader","regionByPct","regionByPx","regionSquare","rotationArbitrary","rotationBy90s","sizeByConfinedWh","sizeByH","sizeByPct","sizeByW","sizeByWh","sizeUpscaling","sizeByWhListed","sizeByDistortedWh","sizeByForcedWh"];function Vt(e){if(-1!==Dt.indexOf(e))return Gt;return-1!==Wt.indexOf(e)?Ht:Ut}function Jt(e){const t=e?Array.isArray(e.profile)?e.profile:[e.profile]:[],i={extraQualities:[],extraFormats:[],extraFeatures:[]};for(let r of t)if("string"==typeof r&&(r=Vt(r)),r){if(r.formats)for(const e of r.formats)-1===i.extraFormats.indexOf(e)&&i.extraFormats.push(e);if(r.qualities)for(const e of r.qualities)-1===i.extraQualities.indexOf(e)&&i.extraQualities.push(e);if(r.supports)for(const e of r.supports)-1===i.extraFeatures.indexOf(e)&&i.extraFeatures.push(e);if(r.maxHeight&&(i.maxHeight=r.maxHeight),r.maxWidth&&(i.maxWidth=r.maxWidth),r.maxArea&&(i.maxArea=r.maxArea),r.extraFormats)for(const e of r.extraFormats)-1===i.extraFormats.indexOf(e)&&i.extraFormats.push(e);if(r.extraQualities)for(const e of r.extraQualities)-1===i.extraQualities.indexOf(e)&&i.extraQualities.push(e);if(r.extraFeatures)for(const e of r.extraFeatures)-1===i.extraFeatures.indexOf(e)&&i.extraFeatures.push(e);r.maxHeight&&(i.maxHeight=r.maxHeight),r.maxWidth&&(i.maxWidth=r.maxWidth),r.maxArea&&(i.maxArea=r.maxArea)}if(e.extraFormats)for(const r of e.extraFormats)-1===i.extraFormats.indexOf(r)&&i.extraFormats.push(r);if(e.extraFeatures)for(const r of e.extraFeatures)-1===i.extraFeatures.indexOf(r)&&i.extraFeatures.push(r);if(e.extraQualities)for(const r of e.extraQualities)-1===i.extraQualities.indexOf(r)&&i.extraQualities.push(r);return i}function Xt(e){return e["@id"]?e["@id"]:e.id?e.id:void 0}function Yt(e){if(!e||!e.profile)return!1;if(!Xt(e))return!1;const t=Array.isArray(e.profile)?e.profile:[e.profile];for(const i of t)if("string"==typeof i&&-1!==Nt.indexOf(i))return!0;return!1}function Zt(e,t){if(!Yt(e))return[!1,"Not a valid image service"];t.extraFeatures=t.extraFeatures?t.extraFeatures:[];const i=Jt(e);if(t.exactSize){let i=!1;if(e.sizes)for(const r of e.sizes)r.width&&r.width===t.exactSize.width&&(-1!==Qt.indexOf("sizeByW")||r.height&&r.height===t.exactSize.height)&&(i=!0),r.height&&r.height===t.exactSize.height&&(-1!==Qt.indexOf("sizeByH")||r.width&&r.width===t.exactSize.width)&&(i=!0);i||(t.maxWidth=Math.max(t.maxWidth||0,t.exactSize.width||0)||void 0,t.maxHeight=Math.max(t.maxHeight||0,t.exactSize.height||0)||void 0,t.maxArea=Math.max(t.maxArea||0,(t.exactSize.width&&t.exactSize.height?t.exactSize.width*t.exactSize.height:t.maxArea)||0)||void 0,!t.exactSize.height&&t.exactSize.width?-1===t.extraFeatures.indexOf("sizeByW")&&t.extraFeatures.push("sizeByW"):!t.exactSize.width&&t.exactSize.height&&-1===t.extraFeatures.indexOf("sizeByH")&&t.extraFeatures.push("sizeByH"))}if(t.maxArea&&i.maxArea&&t.maxArea>i.maxArea)return[!1,`Max area is ${i.maxArea}`];if(t.maxWidth&&i.maxWidth&&t.maxWidth>i.maxWidth)return[!1,`Max width is ${i.maxWidth}`];if(t.maxHeight&&i.maxHeight&&t.maxHeight>i.maxHeight)return[!1,`Max height is ${i.maxHeight}`];if(t.extraFeatures){const e=[];for(const r of t.extraFeatures)-1===i.extraFeatures.indexOf(r)&&e.push(r);if(e.length)return[!1,`Missing features: ${e.join(", ")}`]}if(t.extraFormats){const e=[];for(const r of t.extraFormats)-1===i.extraFormats.indexOf(r)&&e.push(r);if(e.length)return[!1,`Missing formats: ${e.join(", ")}`]}if(t.extraQualities){const e=[];for(const r of t.extraQualities)-1===i.extraQualities.indexOf(r)&&e.push(r);if(e.length)return[!1,`Missing qualities: ${e.join(", ")}`]}return[!0]}function Kt({x:e=0,y:t=0,w:i,h:r,full:n,square:s,percent:a}){if(n)return"full";if(s)return"square";if(void 0===i||void 0===r)throw new Error("RegionParameter: invalid region");const o=`${e},${t},${i},${r}`;return a?`pct:${o}`:o}function ei({max:e,percentScale:t,upscaled:i,confined:r,width:n,height:s,serialiseAsFull:a}){const o=[];return i&&o.push("^"),e?(o.push(a?"full":"max"),o.join("")):(r&&o.push("!"),t&&o.push(`pct:${t}`),n&&o.push(`${n}`),o.push(","),s&&o.push(`${s}`),o.join(""))}function ti(e){return`${e.mirror?"!":""}${(e.angle||0)%360}`}function ii(e){return e.endsWith("info.json")?e:e.endsWith("/")?`${e}info.json`:`${e}/info.json`}return{Presentation2:Y,Presentation3:rt,Image3:Object.freeze(Object.defineProperty({__proto__:null,parseImageServerFromId:function(e){const t=e.replace(/(https?:\/\/)?(www.)?/i,"");return-1!==t.indexOf("/")?t.split("/")[0]:t},parseImageServiceRequest:ct,parseImageServiceUrl:ot,parseRegionParameter:nt,parseRotationParameter:at,parseSizeParameter:st,STANFORD_IIIF_IMAGE_COMPLIANCE_0:lt,STANFORD_IIIF_IMAGE_COMPLIANCE_1:ut,STANFORD_IIIF_IMAGE_COMPLIANCE_2:pt,STANFORD_IIIF_IMAGE_CONFORMANCE_0:ft,STANFORD_IIIF_IMAGE_CONFORMANCE_1:ht,STANFORD_IIIF_IMAGE_CONFORMANCE_2:vt,STANFORD_IIIF_1_IMAGE_COMPLIANCE_0:dt,STANFORD_IIIF_1_IMAGE_COMPLIANCE_1:yt,STANFORD_IIIF_1_IMAGE_COMPLIANCE_2:mt,STANFORD_IIIF_1_IMAGE_CONFORMANCE_0:gt,STANFORD_IIIF_1_IMAGE_CONFORMANCE_1:At,STANFORD_IIIF_1_IMAGE_CONFORMANCE_2:xt,IIIF_1_IMAGE_LEVEL_0:bt,IIIF_1_IMAGE_LEVEL_0_PROFILE:Ct,IIIF_1_IMAGE_LEVEL_1:It,IIIF_1_IMAGE_LEVEL_1_PROFILE:St,IIIF_1_IMAGE_LEVEL_2:_t,IIIF_1_IMAGE_LEVEL_2_PROFILE:wt,IIIF_2_IMAGE_LEVEL_0:Rt,IIIF_2_IMAGE_LEVEL_0_PROFILE:Ot,IIIF_2_IMAGE_LEVEL_1:Ft,IIIF_2_IMAGE_LEVEL_1_PROFILE:Lt,IIIF_2_IMAGE_LEVEL_2:Et,IIIF_2_IMAGE_LEVEL_2_PROFILE:jt,IIIF_3_IMAGE_LEVEL_0:Mt,IIIF_3_IMAGE_LEVEL_1:Pt,IIIF_3_IMAGE_LEVEL_2:Tt,IIIF_2_IMAGE_LEVEL_0_NO_JSON:zt,IIIF_2_IMAGE_LEVEL_1_NO_JSON:kt,IIIF_2_IMAGE_LEVEL_2_NO_JSON:$t,level2Support:Dt,level1Support:Wt,imageServiceProfiles:Nt,level0Support:qt,onlyLevel0:Bt,level0:Ut,level1:Ht,level2:Gt,extraFeatures:Qt,combineProfiles:Jt,levelToProfile:Vt,isLevel0:function(e){const t=Array.isArray(e.profile)?e.profile:[e.profile];for(const i of t)if("string"==typeof i&&-1!==Bt.indexOf(i))return!0;return!1},supports:Zt,supportsCustomSizes:function(e){if(!Yt(e))return!1;const t=Array.isArray(e.profile)?e.profile:[e.profile];for(const i of t)if("string"==typeof i){if(-1!==Wt.indexOf(i))return!0}else{const e=[...i.supports||[],...i.extraFeatures||[]];if(-1!==e.indexOf("regionByPx")&&(-1!==e.indexOf("sizeByW")||-1!==e.indexOf("sizeByWh")))return!0}return!1},imageServiceSupportsFormat:function(e,t){return Zt(e,{extraFormats:[t]})},imageServiceSupportsRequest:function(e,t){if("image"!==t.type)return[!0];const i=[];if(t.rotation.mirror&&i.push("mirroring"),t.region.percent&&i.push("regionByPct"),t.region.square?i.push("regionSquare"):t.region.full||i.push("regionByPx"),t.rotation.angle){t.rotation.angle%90?i.push("rotationArbitrary"):i.push("rotationBy90s")}t.size.confined&&i.push("sizeByConfinedWh"),!t.size.width&&t.size.height&&i.push("sizeByH"),t.size.percentScale&&i.push("sizeByPct"),(e.sizes||[]).find((e=>e.width===t.size.width&&!t.size.height||e.height===t.size.height&&!t.size.width||e.height===t.size.height&&e.width===t.size.width))?i.push("sizeByWhListed"):(t.size.width&&!t.size.height&&i.push("sizeByW"),t.size.width&&t.size.height&&i.push("sizeByWh")),t.size.upscaled&&i.push("sizeUpscaling");const[r,n]=Zt(e,{extraFeatures:i,extraQualities:[t.quality],extraFormats:[t.format],exactSize:t.size});return r?[!0]:[!1,n]},imageServiceRequestToString:function(e,t){const i=e.prefix.startsWith("/")?e.prefix.substr(1):e.prefix,r=`${e.scheme}://${e.server}/${i?`${i}/`:""}${e.identifier}`;if("base"===e.type)return r;if("info"===e.type)return`${r}/info.json`;let{size:n}=e;const{region:s,rotation:a,format:o,quality:c}=e;if(t){const e=t["@context"]?Array.isArray(t["@context"])?t["@context"]:[t["@context"]]:[],i=-1!==e.indexOf("http://iiif.io/api/image/2/context.json"),r=-1!==e.indexOf("http://iiif.io/api/image/3/context.json");if((n.width===t.width&&!n.height||n.height===t.height&&!n.width||n.width===t.width&&n.height===t.height)&&(n={...n,max:!0}),i&&(n.max&&!n.serialiseAsFull&&(n={...n,serialiseAsFull:!0}),!n.max&&n.width&&n.height&&(n={...n,height:void 0})),r&&(n.max&&n.serialiseAsFull&&(n={...n,serialiseAsFull:!1}),n.width&&!n.height&&t.width&&t.height)){const e=t.height/t.width;n={...n,height:Math.ceil(n.width*e)}}}return[r,Kt(s),ei(n),ti(a),`${c}.${o}`].filter(Boolean).join("/")},regionParameterToString:Kt,rotationParameterToString:ti,sizeParameterToString:ei,canonicalServiceUrl:ii,createImageServiceRequest:function(e){const t=ct(ii(e.id));if("info"!==t.type)throw new Error("Invalid service URL");const i=Jt(e);return{identifier:t.identifier,originalPath:"",server:t.server,prefix:t.prefix,scheme:t.scheme,type:"image",quality:-1===i.extraQualities.indexOf("default")?i.extraQualities[0]:"default",region:{full:!0},size:{max:!0,upscaled:!1,confined:!1},format:"jpg",rotation:{angle:0}}},extractFixedSizeScales:function(e,t,i){const r=i.length,n=[];for(let s=0;s<r;s++){const t=i[s].width;n.push(e/t)}return n},fixedSizesFromScales:function(e,t,i){const r=i.length,n=[];for(let s=0;s<r;s++){const r=i[s];n.push({width:Math.floor(e/r),height:Math.floor(t/r)})}return n},getId:Xt,getType:function(e){return e["@type"]?e["@type"]:e.type?e.type:void 0},isImageService:Yt},Symbol.toStringTag,{value:"Module"}))}}));
//# sourceMappingURL=index.umd.js.map

@@ -1,2 +0,2 @@

"use strict";var e=Object.defineProperty,t=(t,i,r)=>(((t,i,r)=>{i in t?e(t,i,{enumerable:!0,configurable:!0,writable:!0,value:r}):t[i]=r})(t,"symbol"!=typeof i?i+"":i,r),r);Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const i=["sc:Collection","sc:Manifest","sc:Canvas","sc:AnnotationList","oa:Annotation","sc:Range","sc:Layer","sc:Sequence","oa:Choice","Service","ContentResource"];function r(e){if(null==e)throw new Error("Null or undefined is not a valid entity.");if(Array.isArray(e))throw new Error("Array is not a valid entity");if("object"!=typeof e)throw new Error(typeof e+" is not a valid entity");if("string"==typeof e["@type"]){const t=i.indexOf(e["@type"]);if(-1!==t)return i[t]}if(e.profile)return"Service";if(e.format)return"ContentResource";if(e["@type"])return"ContentResource";throw new Error("Resource type is not known")}class n{constructor(e,i={}){t(this,"traversals"),t(this,"options"),this.traversals={collection:[],manifest:[],canvas:[],annotationList:[],sequence:[],annotation:[],contentResource:[],choice:[],range:[],service:[],layer:[],...e},this.options={convertPropsToArray:!0,mergeMemberProperties:!0,allowUndefinedReturn:!1,...i}}static all(e){return new n({collection:[e],manifest:[e],canvas:[e],annotationList:[e],sequence:[e],annotation:[e],contentResource:[e],choice:[e],range:[e],service:[e],layer:[e]})}traverseCollection(e){return this.traverseType(this.traverseDescriptive(this.traverseLinking(this.traverseCollectionItems(e))),this.traversals.collection)}traverseCollectionItems(e){if(this.options.mergeMemberProperties){const t=[...(e.manifests||[]).map((e=>"string"==typeof e?{"@id":e,"@type":"sc:Manifest"}:e)),...(e.collections||[]).map((e=>"string"==typeof e?{"@id":e,"@type":"sc:Collection"}:e)),...e.members||[]];delete e.collections,delete e.manifests,e.members=t}return e.manifests&&(e.manifests=e.manifests.map((e=>this.traverseManifest("string"==typeof e?{"@id":e,"@type":"sc:Manifest"}:e)))),e.collections&&(e.collections=e.collections.map((e=>this.traverseCollection("string"==typeof e?{"@id":e,"@type":"sc:Collection"}:e)))),e.members&&(e.members=e.members.map((e=>"string"==typeof e?e:this.traverseUnknown(e)))),e}traverseManifest(e){return this.traverseType(this.traverseDescriptive(this.traverseLinking(this.traverseManifestItems(e))),this.traversals.manifest)}traverseManifestItems(e){return e.sequences&&(e.sequences=e.sequences.map((e=>this.traverseSequence(e)))),e.structures&&(e.structures=e.structures.map((e=>this.traverseRange(e)))),e}traverseSequence(e){return this.traverseType(this.traverseDescriptive(this.traverseLinking(this.traverseSequenceItems(e))),this.traversals.sequence)}traverseSequenceItems(e){return e.canvases&&(e.canvases=e.canvases.map((e=>this.traverseCanvas(e)))),e}traverseCanvas(e){return this.traverseType(this.traverseDescriptive(this.traverseLinking(this.traverseCanvasItems(e))),this.traversals.canvas)}traverseCanvasItems(e){return e.images&&(e.images=e.images.map((e=>this.traverseAnnotation(e)))),e.otherContent&&(e.otherContent=e.otherContent.map((e=>this.traverseAnnotationList(e)))),e}traverseRange(e){return this.traverseType(this.traverseDescriptive(this.traverseLinking(this.traverseRangeItems(e))),this.traversals.range)}traverseRangeItems(e){if(this.options.mergeMemberProperties){const t=[...(e.ranges||[]).map((e=>"string"==typeof e?{"@id":e,"@type":"sc:Range"}:e)),...(e.canvases||[]).map((e=>"string"==typeof e?{"@id":e,"@type":"sc:Canvas"}:e)),...e.members||[]];delete e.ranges,delete e.canvases,e.members=t.length?t.map((e=>this.traverseUnknown(e))):void 0}return e}traverseAnnotationList(e){const t="string"==typeof e?{"@id":e,"@type":"sc:AnnotationList"}:e;return this.traverseType(this.traverseDescriptive(this.traverseAnnotationListItems(t)),this.traversals.annotationList)}traverseAnnotationListItems(e){return e.resources&&(e.resources=e.resources.map((e=>this.traverseAnnotation(e)))),e}traverseAnnotation(e){return this.traverseType(this.traverseDescriptive(this.traverseLinking(this.traverseAnnotationItems(e))),this.traversals.annotation)}traverseAnnotationItems(e){return e.resource&&(Array.isArray(e.resource)?e.resource=e.resource.map((e=>this.traverseContentResource(e))):e.resource=this.traverseContentResource(e.resource)),e.on,e}traverseLayer(e){return this.traverseType(this.traverseLinking(this.traverseLayerItems(e)),this.traversals.layer)}traverseLayerItems(e){return e.otherContent&&(e.otherContent=e.otherContent.map((e=>this.traverseAnnotationList(e)))),e}traverseChoice(e){return this.traverseType(this.traverseChoiceItems(e),this.traversals.choice)}traverseChoiceItems(e){return e.default&&"rdf:nil"!==e.default&&(e.default=this.traverseContentResource(e.default)),e.item&&"rdf:nil"!==e.item&&(e.item=e.item.map((e=>this.traverseContentResource(e)))),e}traverseService(e){return this.traverseType(this.traverseLinking(e),this.traversals.service)}traverseContentResource(e){return"oa:Choice"===e["@type"]?this.traverseChoice(e):this.traverseType(this.traverseDescriptive(this.traverseLinking(e)),this.traversals.contentResource)}traverseUnknown(e){if(!e["@type"]||"string"==typeof e)return e;switch(r(e)){case"sc:Collection":return this.traverseCollection(e);case"sc:Manifest":return this.traverseManifest(e);case"sc:Canvas":return this.traverseCanvas(e);case"sc:Sequence":return this.traverseSequence(e);case"sc:Range":return this.traverseRange(e);case"oa:Annotation":return this.traverseAnnotation(e);case"sc:AnnotationList":return this.traverseAnnotationList(e);case"sc:Layer":return this.traverseLayer(e);case"Service":return this.traverseService(e);case"oa:Choice":return this.traverseChoice(e);case"ContentResource":return this.traverseContentResource(e)}return e.profile?this.traverseService(e):e}traverseImageResource(e){const t=Array.isArray(e),i=Array.isArray(e)?e:[e],r=[];for(const n of i)"string"==typeof n?r.push(this.traverseContentResource({"@id":n,"@type":"dctypes:Image"})):r.push(this.traverseContentResource(n));return t||this.options.convertPropsToArray?r:r[0]}traverseDescriptive(e){return e.thumbnail&&(e.thumbnail=this.traverseImageResource(e.thumbnail)),e.logo&&(e.logo=this.traverseImageResource(e.logo)),e}traverseOneOrMoreServices(e){const t=Array.isArray(e),i=Array.isArray(e)?e:[e],r=[];for(const n of i)r.push(this.traverseService(n));return t||this.options.convertPropsToArray?r:r[0]}traverseLinking(e){return e.related&&(e.related=this.traverseOneOrManyType(e.related,this.traversals.contentResource)),e.rendering&&(e.rendering=this.traverseOneOrManyType(e.rendering,this.traversals.contentResource)),e.service&&(e.service=this.traverseOneOrMoreServices(e.service)),e.seeAlso&&(e.seeAlso=this.traverseOneOrManyType(e.seeAlso,this.traversals.contentResource)),e.within&&("string"==typeof e.within||(e.within=this.traverseOneOrManyType(e.within,this.traversals.contentResource))),e.startCanvas&&("string"==typeof e.startCanvas?e.startCanvas=this.traverseType({"@id":e.startCanvas,"@type":"sc:Canvas"},this.traversals.canvas):e.startCanvas&&this.traverseType(e.startCanvas,this.traversals.canvas)),e.contentLayer&&("string"==typeof e.contentLayer?e.contentLayer=this.traverseLayer({"@id":e.contentLayer,"@type":"sc:Layer"}):e.contentLayer=this.traverseLayer(e.contentLayer)),e}traverseOneOrManyType(e,t){if(!Array.isArray(e)){if(!this.options.convertPropsToArray)return this.traverseType(e,t);e=[e]}return e.map((e=>this.traverseType(e,t)))}traverseType(e,t){return t.reduce(((e,t)=>{const i=t(e);return void 0!==i||this.options.allowUndefinedReturn?i:e}),e)}}const a=["http://iiif.io/api/image/2/level1","http://iiif.io/api/image/2/level2","http://library.stanford.edu/iiif/image-api/compliance.html#level1","http://library.stanford.edu/iiif/image-api/compliance.html#level2","http://library.stanford.edu/iiif/image-api/conformance.html#level1","http://library.stanford.edu/iiif/image-api/conformance.html#level2","http://library.stanford.edu/iiif/image-api/1.1/compliance.html#level1","http://library.stanford.edu/iiif/image-api/1.1/compliance.html#level2","http://library.stanford.edu/iiif/image-api/1.1/conformance.html#level1","http://library.stanford.edu/iiif/image-api/1.1/conformance.html#level2","http://iiif.io/api/image/1/level1.json","http://iiif.io/api/image/1/profiles/level1.json","http://iiif.io/api/image/1/level2.json","http://iiif.io/api/image/1/profiles/level2.json","http://iiif.io/api/image/2/level1.json","http://iiif.io/api/image/2/profiles/level1.json","http://iiif.io/api/image/2/level2.json","http://iiif.io/api/image/2/profiles/level2.json","level1","level2"],s=["http://iiif.io/api/image/2/level0","http://iiif.io/api/image/2/level1","http://iiif.io/api/image/2/level2","http://library.stanford.edu/iiif/image-api/compliance.html#level0","http://library.stanford.edu/iiif/image-api/compliance.html#level1","http://library.stanford.edu/iiif/image-api/compliance.html#level2","http://library.stanford.edu/iiif/image-api/conformance.html#level0","http://library.stanford.edu/iiif/image-api/conformance.html#level1","http://library.stanford.edu/iiif/image-api/conformance.html#level2","http://library.stanford.edu/iiif/image-api/1.1/compliance.html#level0","http://library.stanford.edu/iiif/image-api/1.1/compliance.html#level1","http://library.stanford.edu/iiif/image-api/1.1/compliance.html#level2","http://library.stanford.edu/iiif/image-api/1.1/conformance.html#level0","http://library.stanford.edu/iiif/image-api/1.1/conformance.html#level1","http://library.stanford.edu/iiif/image-api/1.1/conformance.html#level2","http://iiif.io/api/image/1/level0.json","http://iiif.io/api/image/1/profiles/level0.json","http://iiif.io/api/image/1/level1.json","http://iiif.io/api/image/1/profiles/level1.json","http://iiif.io/api/image/1/level2.json","http://iiif.io/api/image/1/profiles/level2.json","http://iiif.io/api/image/2/level0.json","http://iiif.io/api/image/2/profiles/level0.json","http://iiif.io/api/image/2/level1.json","http://iiif.io/api/image/2/profiles/level1.json","http://iiif.io/api/image/2/level2.json","http://iiif.io/api/image/2/profiles/level2.json","level0","level1","level2"];const o="Attribution",c="http://example.org/provider",l="Unknown";function p(e,t="none"){if(!e)return{};const i=Array.isArray(e)?e:[e],r={};for(const n of i){if("string"==typeof n){r[t]=r[t]?r[t]:[],r[t].push(n||"");continue}if(!n["@language"]){r[t]=r[t]?r[t]:[],r[t].push(n["@value"]||"");continue}const e=n["@language"];r[e]=r[e]?r[e]:[],r[e].push(n["@value"]||"")}return r}function h(e){return Array.isArray(e)?h(e.find((e=>"string"==typeof e))):-1!==s.indexOf(e)?"level2":-1!==a.indexOf(e)?"level1":"string"==typeof e?e:void 0}function v(e){const t=Array.isArray(e)?e:[e];for(const i of t)switch(i){case"http://iiif.io/api/image/2/context.json":case"http://library.stanford.edu/iiif/image-api/1.1/compliance.html#level2":return"ImageService2";case"http://iiif.io/api/image/1/context.json":case"http://library.stanford.edu/iiif/image-api/1.1/context.json":return"ImageService1";case"http://iiif.io/api/annex/openannotation/context.json":return"ImageApiSelector"}}function u(e){for(const t of["sc","oa","dcterms","dctypes","iiif"])if(e.startsWith(`${t}:`))return e.slice(t.length+1);return e}const f=["Collection","Manifest","Annotation","AnnotationPage","Range","Service"];function m(e){const t=e["@id"]||e.id;let i=e["@type"]||e.type;const r=e.profile||void 0,n=e["@context"]||void 0;if(r){const e=function(e){switch(e){case"http://iiif.io/api/image/2/level0.json":case"http://iiif.io/api/image/2/level1.json":case"http://iiif.io/api/image/2/level2.json":return"ImageService2";case"http://iiif.io/api/auth/1/kiosk":case"http://iiif.io/api/auth/1/login":case"http://iiif.io/api/auth/1/clickthrough":case"http://iiif.io/api/auth/1/external":case"http://iiif.io/api/auth/0/kiosk":case"http://iiif.io/api/auth/0/login":case"http://iiif.io/api/auth/0/clickthrough":case"http://iiif.io/api/auth/0/external":return"AuthCookieService1";case"http://iiif.io/api/auth/1/token":case"http://iiif.io/api/auth/0/token":return"AuthTokenService1";case"http://iiif.io/api/auth/1/logout":case"http://iiif.io/api/auth/0/logout":return"AuthLogoutService1";case"http://iiif.io/api/search/1/search":case"http://iiif.io/api/search/0/search":return"SearchService1";case"http://iiif.io/api/search/1/autocomplete":case"http://iiif.io/api/search/0/autocomplete":return"AutoCompleteService1"}}(r);if(e)return e}if(n){const e=v(n);if(e)return e}if(i){if(Array.isArray(i)){if(-1!==i.indexOf("oa:CssStylesheet"))return"CssStylesheet";if(-1!==i.indexOf("cnt:ContentAsText"))return"TextualBody";i=i[0]}for(const e of["sc","oa","dcterms","dctypes","iiif"])if(i.startsWith(`${e}:`)){i=i.slice(e.length+1);break}switch(i){case"Layer":return"AnnotationCollection";case"AnnotationList":return"AnnotationPage";case"cnt:ContentAsText":return"TextualBody"}}if(i&&-1!==f.indexOf(i))return i;if(e.format){if(e.format.startsWith("image/"))return"Image";if(e.format.startsWith("text/"))return"Text";if("application/pdf"===e.format)return"Text";if(e.format.startsWith("application/"))return"Dataset"}return t&&(t.endsWith(".jpg")||t.endsWith(".png")||t.endsWith(".jpeg"))?"Image":i||"unknown"}const g=/http(s)?:\/\/(creativecommons.org|rightsstatements.org)[^"'\\<\n]+/gm;function y(e){const t=e.match(g);return t?t[0]:e}const d=["http://iiif.io/api/presentation/2/context.json","http://iiif.io/api/image/2/context.json","http://iiif.io/api/image/1/context.json","http://library.stanford.edu/iiif/image-api/1.1/context.json","http://iiif.io/api/search/1/context.json","http://iiif.io/api/search/0/context.json","http://iiif.io/api/auth/1/context.json","http://iiif.io/api/auth/0/context.json","http://iiif.io/api/annex/openannotation/context.json"];function A(e){if(e){const t=Array.isArray(e)?e:[e],i=[];for(const e of t)"http://iiif.io/api/presentation/2/context.json"===e&&i.push("http://iiif.io/api/presentation/3/context.json"),-1===d.indexOf(e)&&i.push(e);if(t.length)return 1===i.length?i[0]:i}}function b(e){for(const t in e)void 0!==e[t]&&null!==e[t]||delete e[t];return e}let C=0;function x(e,t){const i=encodeURI(e.id||e["@id"]||"").trim();return i&&t?`${i}/${t}`:i||(C++,`http://example.org/${e["@type"]}${t?`/${t}`:""}/${C}`)}function w(e){const t=[...e.behavior||[]];let i;return e.viewingHint&&t.push(e.viewingHint),Array.isArray(e.motivation)?i=e.motivation.map(u):e.motivation&&(i=u(e.motivation)),{"@context":e["@context"]?A(e["@context"]):void 0,id:(e["@id"]||x(e)).trim(),type:m(e),behavior:t.length?t:void 0,height:e.height?e.height:void 0,width:e.width?e.width:void 0,motivation:i,viewingDirection:e.viewingDirection,profile:e.profile,format:e.format?e.format:void 0,duration:void 0,timeMode:void 0}}function j(e){const[t,i]=function(e,t="Rights/License",i="none"){let r=null;const n=[],a=Array.isArray(e)?e:[e];for(const s of a){const e=s?y(s):void 0;!e||-1===e.indexOf("creativecommons.org")&&-1===e.indexOf("rightsstatements.org")?e&&n.push({label:{[i]:[t]},value:{[i]:[e]}}):r=e.startsWith("https://")?`http://${e.slice(8)}`:e}return[r,n]}(e.license),r=[...e.metadata?(n=e.metadata,n?n.map((e=>({label:p(e.label),value:p(e.value)}))):[]):[],...i];var n;return{rights:t,metadata:r.length?r:void 0,label:e.label?p(e.label):void 0,requiredStatement:e.attribution?{label:p(o),value:p(e.attribution)}:void 0,navDate:e.navDate,summary:e.description?p(e.description):void 0,thumbnail:e.thumbnail}}function L(e){if(!e.within)return;const t=Array.isArray(e.within)?e.within:[e.within],i=[];for(const r of t)if("string"==typeof r){if(r&&"sc:Manifest"===e["@type"])i.push({id:r,type:"Collection"})}else r["@id"]&&i.push({id:r["@id"],type:m(r)});return i.length?i:void 0}function S(e){const t=e.related?Array.isArray(e.related)?e.related:[e.related]:[],i=e.contentLayer;return{provider:e.logo||t.length?[{id:c,type:"Agent",homepage:t.length?[t[0]]:void 0,logo:e.logo?Array.isArray(e.logo)?e.logo:[e.logo]:void 0,label:p(l)}]:void 0,partOf:L(e),rendering:e.rendering,seeAlso:e.seeAlso,start:e.startCanvas,service:e.service?(r=e.service,Array.isArray(r)?r:[r]):void 0,supplementary:i?[i]:void 0};var r}function R(e){const t=e;return b({...w(t),...j(t),...S(t),...(i=t,{chars:i.chars,format:i.format?i.format:void 0,language:i.language})});var i}const I=new n({collection:[function(e){return b({...w(e),...j(e),...S(e),items:e.members})}],manifest:[function(e){const t=[],i=[];for(const n of e.sequences||[])n.canvases.length&&t.push(...n.canvases),n.behavior&&i.push(...n.behavior);const r=w(e);return i.length&&(r.behavior?r.behavior.push(...i):r.behavior=i),b({...r,...j(e),...S(e),items:t,structures:e.structures})}],canvas:[function(e){return b({...w(e),...j(e),...S(e),annotations:e.otherContent&&e.otherContent.length?e.otherContent:void 0,items:e.images&&e.images.length?[{id:x(e,"annotation-page"),type:"AnnotationPage",items:e.images}]:void 0})}],annotationList:[function(e){return b({...w(e),...j(e),...S(e),items:e.resources&&e.resources.length?e.resources:void 0})}],sequence:[function(e){return e.canvases&&0!==e.canvases.length?{canvases:e.canvases,behavior:e.viewingHint?[e.viewingHint]:[]}:{canvases:[],behavior:[]}}],annotation:[function(e){return b({...w(e),...j(e),...S(e),target:function e(t){if(Array.isArray(t)){if(t.length>1)return{type:"List",items:t.map(e)};t=t[0]}if("string"==typeof t)return encodeURI(t).trim();if("@type"in t){let e;if("string"==typeof t.full)e=t.full;else if("dctypes:Image"===t.full["@type"])e={id:t.full["@id"],type:"Image"};else{if("sc:Canvas"!==t.full["@type"])throw new Error(`Unsupported source type on annotation: ${t.full["@type"]}`);e={id:t.full["@id"],type:"Canvas"}}return{type:"SpecificResource",source:e,selector:T(t.selector)}}return encodeURI(t["@id"]).trim()}(e.on),body:Array.isArray(e.resource)?e.resource.map(R):R(e.resource)})}],contentResource:[R],choice:[function(e){const t=[];return e.default&&"rdf:nil"!==e.default&&t.push(e.default),e.item&&"rdf:nil"!==e.item&&t.push(...e.item),{...w(e),...j(e),items:t}}],range:[function(e){return b({...w(e),...j(e),...S(e),items:e.members})}],service:[function(e){const{"@id":t,"@type":i,"@context":r,profile:n,...a}=e,s={};return t&&(s["@id"]=t),s["@type"]=m(e),"unknown"===s["@type"]&&(r&&r.length&&(s["@context"]=r),s["@type"]="Service"),n&&(s.profile=h(n)),b({...s,...a})}],layer:[function(e){return b({...w(e),...j(e),...S(e)})}]});function T(e){if((Array.isArray(e["@type"])&&e["@type"].includes("oa:SvgSelector")||"oa:SvgSelector"==e["@type"])&&("chars"in e||"value"in e))return{type:"SvgSelector",value:"chars"in e?e.chars:e.value};if("oa:FragmentSelector"===e["@type"])return{type:"FragmentSelector",value:e.value};if("oa:Choice"===e["@type"])return[T(e.default),...(Array.isArray(e.item)?e.item:[e.item]).map(T)];if("iiif:ImageApiSelector"==e["@type"])return{type:"ImageApiSelector",region:"region"in e?e.region:void 0,rotation:"rotation"in e?e.rotation:void 0};throw new Error(`Unsupported selector type: ${e["@type"]}`)}exports.Traverse=n,exports.convertLanguageMapping=p,exports.convertPresentation2=function(e){return e&&e["@context"]&&("http://iiif.io/api/presentation/2/context.json"===e["@context"]||-1!==e["@context"].indexOf("http://iiif.io/api/presentation/2/context.json")||"http://www.shared-canvas.org/ns/context.json"===e["@context"])||"http://iiif.io/api/image/2/context.json"===e["@context"]?I.traverseUnknown(e):e},exports.getProfile=h,exports.getTypeFromContext=v,exports.identifyResource=r,exports.presentation2to3=I,exports.types=i;
"use strict";var e=Object.defineProperty,t=(t,i,r)=>(((t,i,r)=>{i in t?e(t,i,{enumerable:!0,configurable:!0,writable:!0,value:r}):t[i]=r})(t,"symbol"!=typeof i?i+"":i,r),r);Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const i=["sc:Collection","sc:Manifest","sc:Canvas","sc:AnnotationList","oa:Annotation","sc:Range","sc:Layer","sc:Sequence","oa:Choice","Service","ContentResource"];function r(e){if(null==e)throw new Error("Null or undefined is not a valid entity.");if(Array.isArray(e))throw new Error("Array is not a valid entity");if("object"!=typeof e)throw new Error(typeof e+" is not a valid entity");if("string"==typeof e["@type"]){const t=i.indexOf(e["@type"]);if(-1!==t)return i[t]}if(e.profile)return"Service";if(e.format)return"ContentResource";if(e["@type"])return"ContentResource";throw new Error("Resource type is not known")}class n{constructor(e,i={}){t(this,"traversals"),t(this,"options"),this.traversals={collection:[],manifest:[],canvas:[],annotationList:[],sequence:[],annotation:[],contentResource:[],choice:[],range:[],service:[],layer:[],...e},this.options={convertPropsToArray:!0,mergeMemberProperties:!0,allowUndefinedReturn:!1,...i}}static all(e){return new n({collection:[e],manifest:[e],canvas:[e],annotationList:[e],sequence:[e],annotation:[e],contentResource:[e],choice:[e],range:[e],service:[e],layer:[e]})}traverseCollection(e){return this.traverseType(this.traverseDescriptive(this.traverseLinking(this.traverseCollectionItems(e))),this.traversals.collection)}traverseCollectionItems(e){if(this.options.mergeMemberProperties){const t=[...(e.manifests||[]).map((e=>"string"==typeof e?{"@id":e,"@type":"sc:Manifest"}:e)),...(e.collections||[]).map((e=>"string"==typeof e?{"@id":e,"@type":"sc:Collection"}:e)),...e.members||[]];delete e.collections,delete e.manifests,e.members=t}return e.manifests&&(e.manifests=e.manifests.map((e=>this.traverseManifest("string"==typeof e?{"@id":e,"@type":"sc:Manifest"}:e)))),e.collections&&(e.collections=e.collections.map((e=>this.traverseCollection("string"==typeof e?{"@id":e,"@type":"sc:Collection"}:e)))),e.members&&(e.members=e.members.map((e=>"string"==typeof e?e:this.traverseUnknown(e)))),e}traverseManifest(e){return this.traverseType(this.traverseDescriptive(this.traverseLinking(this.traverseManifestItems(e))),this.traversals.manifest)}traverseManifestItems(e){return e.sequences&&(e.sequences=e.sequences.map((e=>this.traverseSequence(e)))),e.structures&&(e.structures=e.structures.map((e=>this.traverseRange(e)))),e}traverseSequence(e){return this.traverseType(this.traverseDescriptive(this.traverseLinking(this.traverseSequenceItems(e))),this.traversals.sequence)}traverseSequenceItems(e){return e.canvases&&(e.canvases=e.canvases.map((e=>this.traverseCanvas(e)))),e}traverseCanvas(e){return this.traverseType(this.traverseDescriptive(this.traverseLinking(this.traverseCanvasItems(e))),this.traversals.canvas)}traverseCanvasItems(e){return e.images&&(e.images=e.images.map((e=>this.traverseAnnotation(e)))),e.otherContent&&(e.otherContent=e.otherContent.map((e=>this.traverseAnnotationList(e)))),e}traverseRange(e){return this.traverseType(this.traverseDescriptive(this.traverseLinking(this.traverseRangeItems(e))),this.traversals.range)}traverseRangeItems(e){if(this.options.mergeMemberProperties){const t=[...(e.ranges||[]).map((e=>"string"==typeof e?{"@id":e,"@type":"sc:Range"}:e)),...(e.canvases||[]).map((e=>"string"==typeof e?{"@id":e,"@type":"sc:Canvas"}:e)),...e.members||[]];delete e.ranges,delete e.canvases,e.members=t.length?t.map((e=>this.traverseUnknown(e))):void 0}return e}traverseAnnotationList(e){const t="string"==typeof e?{"@id":e,"@type":"sc:AnnotationList"}:e;return this.traverseType(this.traverseDescriptive(this.traverseAnnotationListItems(t)),this.traversals.annotationList)}traverseAnnotationListItems(e){return e.resources&&(e.resources=e.resources.map((e=>this.traverseAnnotation(e)))),e}traverseAnnotation(e){return this.traverseType(this.traverseDescriptive(this.traverseLinking(this.traverseAnnotationItems(e))),this.traversals.annotation)}traverseAnnotationItems(e){return e.resource&&(Array.isArray(e.resource)?e.resource=e.resource.map((e=>this.traverseContentResource(e))):e.resource=this.traverseContentResource(e.resource)),e.on,e}traverseLayer(e){return this.traverseType(this.traverseLinking(this.traverseLayerItems(e)),this.traversals.layer)}traverseLayerItems(e){return e.otherContent&&(e.otherContent=e.otherContent.map((e=>this.traverseAnnotationList(e)))),e}traverseChoice(e){return this.traverseType(this.traverseChoiceItems(e),this.traversals.choice)}traverseChoiceItems(e){return e.default&&"rdf:nil"!==e.default&&(e.default=this.traverseContentResource(e.default)),e.item&&"rdf:nil"!==e.item&&(e.item=e.item.map((e=>this.traverseContentResource(e)))),e}traverseService(e){return this.traverseType(this.traverseLinking(e),this.traversals.service)}traverseContentResource(e){return"oa:Choice"===e["@type"]?this.traverseChoice(e):this.traverseType(this.traverseDescriptive(this.traverseLinking(e)),this.traversals.contentResource)}traverseUnknown(e){if(!e["@type"]||"string"==typeof e)return e;switch(r(e)){case"sc:Collection":return this.traverseCollection(e);case"sc:Manifest":return this.traverseManifest(e);case"sc:Canvas":return this.traverseCanvas(e);case"sc:Sequence":return this.traverseSequence(e);case"sc:Range":return this.traverseRange(e);case"oa:Annotation":return this.traverseAnnotation(e);case"sc:AnnotationList":return this.traverseAnnotationList(e);case"sc:Layer":return this.traverseLayer(e);case"Service":return this.traverseService(e);case"oa:Choice":return this.traverseChoice(e);case"ContentResource":return this.traverseContentResource(e)}return e.profile?this.traverseService(e):e}traverseImageResource(e){const t=Array.isArray(e),i=Array.isArray(e)?e:[e],r=[];for(const n of i)"string"==typeof n?r.push(this.traverseContentResource({"@id":n,"@type":"dctypes:Image"})):r.push(this.traverseContentResource(n));return t||this.options.convertPropsToArray?r:r[0]}traverseDescriptive(e){return e.thumbnail&&(e.thumbnail=this.traverseImageResource(e.thumbnail)),e.logo&&(e.logo=this.traverseImageResource(e.logo)),e}traverseOneOrMoreServices(e){const t=Array.isArray(e),i=Array.isArray(e)?e:[e],r=[];for(const n of i)r.push(this.traverseService(n));return t||this.options.convertPropsToArray?r:r[0]}traverseLinking(e){return e.related&&(e.related=this.traverseOneOrManyType(e.related,this.traversals.contentResource)),e.rendering&&(e.rendering=this.traverseOneOrManyType(e.rendering,this.traversals.contentResource)),e.service&&(e.service=this.traverseOneOrMoreServices(e.service)),e.seeAlso&&(e.seeAlso=this.traverseOneOrManyType(e.seeAlso,this.traversals.contentResource)),e.within&&("string"==typeof e.within||(e.within=this.traverseOneOrManyType(e.within,this.traversals.contentResource))),e.startCanvas&&("string"==typeof e.startCanvas?e.startCanvas=this.traverseType({"@id":e.startCanvas,"@type":"sc:Canvas"},this.traversals.canvas):e.startCanvas&&this.traverseType(e.startCanvas,this.traversals.canvas)),e.contentLayer&&("string"==typeof e.contentLayer?e.contentLayer=this.traverseLayer({"@id":e.contentLayer,"@type":"sc:Layer"}):e.contentLayer=this.traverseLayer(e.contentLayer)),e}traverseOneOrManyType(e,t){if(!Array.isArray(e)){if(!this.options.convertPropsToArray)return this.traverseType(e,t);e=[e]}return e.map((e=>this.traverseType(e,t)))}traverseType(e,t){return t.reduce(((e,t)=>{const i=t(e);return void 0!==i||this.options.allowUndefinedReturn?i:e}),e)}}const a=["http://iiif.io/api/image/2/level1","http://iiif.io/api/image/2/level2","http://library.stanford.edu/iiif/image-api/compliance.html#level1","http://library.stanford.edu/iiif/image-api/compliance.html#level2","http://library.stanford.edu/iiif/image-api/conformance.html#level1","http://library.stanford.edu/iiif/image-api/conformance.html#level2","http://library.stanford.edu/iiif/image-api/1.1/compliance.html#level1","http://library.stanford.edu/iiif/image-api/1.1/compliance.html#level2","http://library.stanford.edu/iiif/image-api/1.1/conformance.html#level1","http://library.stanford.edu/iiif/image-api/1.1/conformance.html#level2","http://iiif.io/api/image/1/level1.json","http://iiif.io/api/image/1/profiles/level1.json","http://iiif.io/api/image/1/level2.json","http://iiif.io/api/image/1/profiles/level2.json","http://iiif.io/api/image/2/level1.json","http://iiif.io/api/image/2/profiles/level1.json","http://iiif.io/api/image/2/level2.json","http://iiif.io/api/image/2/profiles/level2.json","level1","level2"],s=["http://iiif.io/api/image/2/level0","http://iiif.io/api/image/2/level1","http://iiif.io/api/image/2/level2","http://library.stanford.edu/iiif/image-api/compliance.html#level0","http://library.stanford.edu/iiif/image-api/compliance.html#level1","http://library.stanford.edu/iiif/image-api/compliance.html#level2","http://library.stanford.edu/iiif/image-api/conformance.html#level0","http://library.stanford.edu/iiif/image-api/conformance.html#level1","http://library.stanford.edu/iiif/image-api/conformance.html#level2","http://library.stanford.edu/iiif/image-api/1.1/compliance.html#level0","http://library.stanford.edu/iiif/image-api/1.1/compliance.html#level1","http://library.stanford.edu/iiif/image-api/1.1/compliance.html#level2","http://library.stanford.edu/iiif/image-api/1.1/conformance.html#level0","http://library.stanford.edu/iiif/image-api/1.1/conformance.html#level1","http://library.stanford.edu/iiif/image-api/1.1/conformance.html#level2","http://iiif.io/api/image/1/level0.json","http://iiif.io/api/image/1/profiles/level0.json","http://iiif.io/api/image/1/level1.json","http://iiif.io/api/image/1/profiles/level1.json","http://iiif.io/api/image/1/level2.json","http://iiif.io/api/image/1/profiles/level2.json","http://iiif.io/api/image/2/level0.json","http://iiif.io/api/image/2/profiles/level0.json","http://iiif.io/api/image/2/level1.json","http://iiif.io/api/image/2/profiles/level1.json","http://iiif.io/api/image/2/level2.json","http://iiif.io/api/image/2/profiles/level2.json","level0","level1","level2"];function o(e){for(const t in e)void 0!==e[t]&&null!==e[t]||delete e[t];return e}const c="Attribution",l="http://example.org/provider",p="Unknown";function h(e,t="none"){if(!e)return{};const i=Array.isArray(e)?e:[e],r={};for(const n of i){if("string"==typeof n){r[t]=r[t]?r[t]:[],r[t].push(n||"");continue}if(!n["@language"]){r[t]=r[t]?r[t]:[],r[t].push(n["@value"]||"");continue}const e=n["@language"];r[e]=r[e]?r[e]:[],r[e].push(n["@value"]||"")}return r}function v(e){return Array.isArray(e)?v(e.find((e=>"string"==typeof e))):-1!==s.indexOf(e)?"level2":-1!==a.indexOf(e)?"level1":"string"==typeof e?e:void 0}function u(e){const t=Array.isArray(e)?e:[e];for(const i of t)switch(i){case"http://iiif.io/api/image/2/context.json":case"http://library.stanford.edu/iiif/image-api/1.1/compliance.html#level2":return"ImageService2";case"http://iiif.io/api/image/1/context.json":case"http://library.stanford.edu/iiif/image-api/1.1/context.json":return"ImageService1";case"http://iiif.io/api/annex/openannotation/context.json":return"ImageApiSelector"}}function f(e){for(const t of["sc","oa","dcterms","dctypes","iiif"])if(e.startsWith(`${t}:`))return e.slice(t.length+1);return e}const m=["Collection","Manifest","Annotation","AnnotationPage","Range","Service"];function g(e){const t=e["@id"]||e.id;let i=e["@type"]||e.type;const r=e.profile||void 0,n=e["@context"]||void 0;if(r){const e=function(e){switch(e){case"http://iiif.io/api/image/2/level0.json":case"http://iiif.io/api/image/2/level1.json":case"http://iiif.io/api/image/2/level2.json":return"ImageService2";case"http://iiif.io/api/auth/1/kiosk":case"http://iiif.io/api/auth/1/login":case"http://iiif.io/api/auth/1/clickthrough":case"http://iiif.io/api/auth/1/external":case"http://iiif.io/api/auth/0/kiosk":case"http://iiif.io/api/auth/0/login":case"http://iiif.io/api/auth/0/clickthrough":case"http://iiif.io/api/auth/0/external":return"AuthCookieService1";case"http://iiif.io/api/auth/1/token":case"http://iiif.io/api/auth/0/token":return"AuthTokenService1";case"http://iiif.io/api/auth/1/logout":case"http://iiif.io/api/auth/0/logout":return"AuthLogoutService1";case"http://iiif.io/api/search/1/search":case"http://iiif.io/api/search/0/search":return"SearchService1";case"http://iiif.io/api/search/1/autocomplete":case"http://iiif.io/api/search/0/autocomplete":return"AutoCompleteService1"}}(r);if(e)return e}if(n){const e=u(n);if(e)return e}if(i){if(Array.isArray(i)){if(-1!==i.indexOf("oa:CssStylesheet"))return"CssStylesheet";if(-1!==i.indexOf("cnt:ContentAsText"))return"TextualBody";i=i[0]}for(const e of["sc","oa","dcterms","dctypes","iiif"])if(i.startsWith(`${e}:`)){i=i.slice(e.length+1);break}switch(i){case"Layer":return"AnnotationCollection";case"AnnotationList":return"AnnotationPage";case"cnt:ContentAsText":return"TextualBody"}}if(i&&-1!==m.indexOf(i))return i;if(e.format){if(e.format.startsWith("image/"))return"Image";if(e.format.startsWith("text/"))return"Text";if("application/pdf"===e.format)return"Text";if(e.format.startsWith("application/"))return"Dataset"}return t&&(t.endsWith(".jpg")||t.endsWith(".png")||t.endsWith(".jpeg"))?"Image":i||"unknown"}const y=/http(s)?:\/\/(creativecommons.org|rightsstatements.org)[^"'\\<\n]+/gm;function d(e){const t=e.match(y);return t?t[0]:e}const A=["http://iiif.io/api/presentation/2/context.json","http://iiif.io/api/image/2/context.json","http://iiif.io/api/image/1/context.json","http://library.stanford.edu/iiif/image-api/1.1/context.json","http://iiif.io/api/search/1/context.json","http://iiif.io/api/search/0/context.json","http://iiif.io/api/auth/1/context.json","http://iiif.io/api/auth/0/context.json","http://iiif.io/api/annex/openannotation/context.json"];function C(e){if(e){const t=Array.isArray(e)?e:[e],i=[];for(const e of t)"http://iiif.io/api/presentation/2/context.json"===e&&i.push("http://iiif.io/api/presentation/3/context.json"),-1===A.indexOf(e)&&i.push(e);if(t.length)return 1===i.length?i[0]:i}}let b=0;function x(e,t){const i=encodeURI(e.id||e["@id"]||"").trim();return i&&t?`${i}/${t}`:i||(b++,`http://example.org/${e["@type"]}${t?`/${t}`:""}/${b}`)}function w(e){const t=[...e.behavior||[]];let i;return e.viewingHint&&t.push(e.viewingHint),Array.isArray(e.motivation)?i=e.motivation.map(f):e.motivation&&(i=f(e.motivation)),{"@context":e["@context"]?C(e["@context"]):void 0,id:(e["@id"]||x(e)).trim(),type:g(e),behavior:t.length?t:void 0,height:e.height?e.height:void 0,width:e.width?e.width:void 0,motivation:i,viewingDirection:e.viewingDirection,profile:e.profile,format:e.format?e.format:void 0,duration:void 0,timeMode:void 0}}function j(e){const[t,i]=function(e,t="Rights/License",i="none"){let r=null;const n=[],a=Array.isArray(e)?e:[e];for(const s of a){const e=s?d(s):void 0;!e||-1===e.indexOf("creativecommons.org")&&-1===e.indexOf("rightsstatements.org")?e&&n.push({label:{[i]:[t]},value:{[i]:[e]}}):r=e.startsWith("https://")?`http://${e.slice(8)}`:e}return[r,n]}(e.license),r=[...e.metadata?(n=e.metadata,n?n.map((e=>({label:h(e.label),value:h(e.value)}))):[]):[],...i];var n;return{rights:t,metadata:r.length?r:void 0,label:e.label?h(e.label):void 0,requiredStatement:e.attribution?{label:h(c),value:h(e.attribution)}:void 0,navDate:e.navDate,summary:e.description?h(e.description):void 0,thumbnail:L(e.thumbnail)}}function L(e){if(e){return(Array.isArray(e)?e:[e]).map((e=>"string"==typeof e?{id:e,type:"Image"}:("unknown"===e.type&&(e.type="Image"),e)))}return e}function S(e){if(!e.within)return;const t=Array.isArray(e.within)?e.within:[e.within],i=[];for(const r of t)if("string"==typeof r){if(r&&"sc:Manifest"===e["@type"])i.push({id:r,type:"Collection"})}else r["@id"]&&i.push({id:r["@id"],type:g(r)});return i.length?i:void 0}function R(e){const t=e.related?Array.isArray(e.related)?e.related:[e.related]:[],i=e.contentLayer;return{provider:e.logo||t.length?[{id:l,type:"Agent",homepage:t.length?[t[0]]:void 0,logo:e.logo?Array.isArray(e.logo)?e.logo:[e.logo]:void 0,label:h(p)}]:void 0,partOf:S(e),rendering:e.rendering,seeAlso:e.seeAlso,start:e.startCanvas,service:e.service?(r=e.service,Array.isArray(r)?r:r?[r]:[]):void 0,supplementary:i?[i]:void 0};var r}function I(e){const t=e;return o({...w(t),...j(t),...R(t),...(i=t,{chars:i.chars,format:i.format?i.format:void 0,language:i.language})});var i}const T=new n({collection:[function(e){return o({...w(e),...j(e),...R(e),items:e.members})}],manifest:[function(e){const t=[],i=[];let r;for(const a of e.sequences||[])a.canvases.length&&t.push(...a.canvases),a.behavior&&i.push(...a.behavior),a.startCanvas&&(r=a.startCanvas);const n=w(e);return i.length&&(n.behavior?n.behavior.push(...i):n.behavior=i),o({...n,...j(e),...R(e),start:r,items:t,structures:e.structures})}],canvas:[function(e){return o({...w(e),...j(e),...R(e),annotations:e.otherContent&&e.otherContent.length?e.otherContent:void 0,items:e.images&&e.images.length?[{id:x(e,"annotation-page"),type:"AnnotationPage",items:e.images}]:void 0})}],annotationList:[function(e){return o({...w(e),...j(e),...R(e),items:e.resources&&e.resources.length?e.resources:void 0})}],sequence:[function(e){return e.canvases&&0!==e.canvases.length?{canvases:e.canvases,behavior:e.viewingHint?[e.viewingHint]:[],startCanvas:e.startCanvas}:{canvases:[],behavior:[]}}],annotation:[function(e){return o({...w(e),...j(e),...R(e),target:function e(t){if(Array.isArray(t)){if(t.length>1)return{type:"List",items:t.map(e)};t=t[0]}if("string"==typeof t)return encodeURI(t).trim();if("@type"in t){let e;if("string"==typeof t.full)e=t.full;else if("dctypes:Image"===t.full["@type"])e={id:t.full["@id"],type:"Image"};else{if("sc:Canvas"!==t.full["@type"])throw new Error(`Unsupported source type on annotation: ${t.full["@type"]}`);e={id:t.full["@id"],type:"Canvas"}}return{type:"SpecificResource",source:e,selector:k(t.selector)}}return encodeURI(t["@id"]).trim()}(e.on),body:Array.isArray(e.resource)?e.resource.map(I):I(e.resource)})}],contentResource:[I],choice:[function(e){const t=[];return e.default&&"rdf:nil"!==e.default&&t.push(e.default),e.item&&"rdf:nil"!==e.item&&t.push(...e.item),{...w(e),...j(e),items:t}}],range:[function(e){return o({...w(e),...j(e),...R(e),items:e.members})}],service:[function(e){const{"@id":t,"@type":i,"@context":r,profile:n,...a}=e,s={};return t&&(s["@id"]=t),s["@type"]=g(e),"unknown"===s["@type"]&&(r&&r.length&&(s["@context"]=r),s["@type"]="Service"),n&&(s.profile=v(n)),o({...s,...a})}],layer:[function(e){return o({...w(e),...j(e),...R(e)})}]});function k(e){if((Array.isArray(e["@type"])&&e["@type"].includes("oa:SvgSelector")||"oa:SvgSelector"==e["@type"])&&("chars"in e||"value"in e))return{type:"SvgSelector",value:"chars"in e?e.chars:e.value};if("oa:FragmentSelector"===e["@type"])return{type:"FragmentSelector",value:e.value};if("oa:Choice"===e["@type"])return[k(e.default),...(Array.isArray(e.item)?e.item:[e.item]).map(k)];if("iiif:ImageApiSelector"==e["@type"])return{type:"ImageApiSelector",region:"region"in e?e.region:void 0,rotation:"rotation"in e?e.rotation:void 0};throw new Error(`Unsupported selector type: ${e["@type"]}`)}exports.Traverse=n,exports.convertLanguageMapping=h,exports.convertPresentation2=function(e){return e&&e["@context"]&&("http://iiif.io/api/presentation/2/context.json"===e["@context"]||-1!==e["@context"].indexOf("http://iiif.io/api/presentation/2/context.json")||"http://www.shared-canvas.org/ns/context.json"===e["@context"])||"http://iiif.io/api/image/2/context.json"===e["@context"]?T.traverseUnknown(e):e},exports.getProfile=v,exports.getTypeFromContext=u,exports.identifyResource=r,exports.presentation2to3=T,exports.types=i;
//# sourceMappingURL=index.js.map

@@ -503,4 +503,12 @@ var __defProp = Object.defineProperty;

}
return [maybeArray];
return maybeArray ? [maybeArray] : [];
}
function removeUndefinedProperties(obj) {
for (const prop in obj) {
if (typeof obj[prop] === "undefined" || obj[prop] === null) {
delete obj[prop];
}
}
return obj;
}
const configuration = {

@@ -744,10 +752,2 @@ attributionLabel: "Attribution",

}
function removeUndefinedProperties(obj) {
for (const prop in obj) {
if (typeof obj[prop] === "undefined" || obj[prop] === null) {
delete obj[prop];
}
}
return obj;
}
let mintedIdCounter = 0;

@@ -804,5 +804,20 @@ function mintNewIdFromResource(resource, subresource) {

summary: resource.description ? convertLanguageMapping(resource.description) : void 0,
thumbnail: resource.thumbnail
thumbnail: compatThumbnail(resource.thumbnail)
};
}
function compatThumbnail(thumb) {
if (thumb) {
const arrayOfThumbs = Array.isArray(thumb) ? thumb : [thumb];
return arrayOfThumbs.map((t) => {
if (typeof t === "string") {
return { id: t, type: "Image" };
}
if (t.type === "unknown") {
t.type = "Image";
}
return t;
});
}
return thumb;
}
function parseWithin(resource) {

@@ -872,2 +887,3 @@ if (!resource.within) {

const behavior = [];
let start = void 0;
for (const sequence of manifest.sequences || []) {

@@ -880,2 +896,5 @@ if (sequence.canvases.length) {

}
if (sequence.startCanvas) {
start = sequence.startCanvas;
}
}

@@ -894,2 +913,3 @@ const technical = technicalProperties(manifest);

...linkingProperties(manifest),
start,
items: allCanvases,

@@ -931,3 +951,4 @@ structures: manifest.structures

canvases: sequence.canvases,
behavior: sequence.viewingHint ? [sequence.viewingHint] : []
behavior: sequence.viewingHint ? [sequence.viewingHint] : [],
startCanvas: sequence.startCanvas
};

@@ -934,0 +955,0 @@ }

@@ -1,2 +0,2 @@

var __defProp=Object.defineProperty,__defNormalProp=(e,t,i)=>t in e?__defProp(e,t,{enumerable:!0,configurable:!0,writable:!0,value:i}):e[t]=i,__publicField=(e,t,i)=>(__defNormalProp(e,"symbol"!=typeof t?t+"":t,i),i);!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports):"function"==typeof define&&define.amd?define(["exports"],t):t((e="undefined"!=typeof globalThis?globalThis:e||self).IIIFUpgrader={})}(this,(function(e){"use strict";const t="http://library.stanford.edu/iiif/image-api/compliance.html#level1",i="http://library.stanford.edu/iiif/image-api/compliance.html#level2",r="http://library.stanford.edu/iiif/image-api/conformance.html#level1",n="http://library.stanford.edu/iiif/image-api/conformance.html#level2",s="http://library.stanford.edu/iiif/image-api/1.1/compliance.html#level1",a="http://library.stanford.edu/iiif/image-api/1.1/compliance.html#level2",o="http://library.stanford.edu/iiif/image-api/1.1/conformance.html#level1",c="http://library.stanford.edu/iiif/image-api/1.1/conformance.html#level2",l="http://iiif.io/api/image/1/level1.json",p="http://iiif.io/api/image/1/profiles/level1.json",h="http://iiif.io/api/image/1/level2.json",u="http://iiif.io/api/image/1/profiles/level2.json",v="http://iiif.io/api/image/2/level1.json",f="http://iiif.io/api/image/2/profiles/level1.json",m="http://iiif.io/api/image/2/level2.json",y="http://iiif.io/api/image/2/profiles/level2.json",g="level1",d="level2",A="http://iiif.io/api/image/2/level1",b="http://iiif.io/api/image/2/level2",C=[A,b,t,i,r,n,s,a,o,c,l,p,h,u,v,f,m,y,g,d],x=["http://iiif.io/api/image/2/level0",A,b,"http://library.stanford.edu/iiif/image-api/compliance.html#level0",t,i,"http://library.stanford.edu/iiif/image-api/conformance.html#level0",r,n,"http://library.stanford.edu/iiif/image-api/1.1/compliance.html#level0",s,a,"http://library.stanford.edu/iiif/image-api/1.1/conformance.html#level0",o,c,"http://iiif.io/api/image/1/level0.json","http://iiif.io/api/image/1/profiles/level0.json",l,p,h,u,"http://iiif.io/api/image/2/level0.json","http://iiif.io/api/image/2/profiles/level0.json",v,f,m,y,"level0",g,d],w=["sc:Collection","sc:Manifest","sc:Canvas","sc:AnnotationList","oa:Annotation","sc:Range","sc:Layer","sc:Sequence","oa:Choice","Service","ContentResource"];class L{constructor(e,t={}){__publicField(this,"traversals"),__publicField(this,"options"),this.traversals={collection:[],manifest:[],canvas:[],annotationList:[],sequence:[],annotation:[],contentResource:[],choice:[],range:[],service:[],layer:[],...e},this.options={convertPropsToArray:!0,mergeMemberProperties:!0,allowUndefinedReturn:!1,...t}}static all(e){return new L({collection:[e],manifest:[e],canvas:[e],annotationList:[e],sequence:[e],annotation:[e],contentResource:[e],choice:[e],range:[e],service:[e],layer:[e]})}traverseCollection(e){return this.traverseType(this.traverseDescriptive(this.traverseLinking(this.traverseCollectionItems(e))),this.traversals.collection)}traverseCollectionItems(e){if(this.options.mergeMemberProperties){const t=[...(e.manifests||[]).map((e=>"string"==typeof e?{"@id":e,"@type":"sc:Manifest"}:e)),...(e.collections||[]).map((e=>"string"==typeof e?{"@id":e,"@type":"sc:Collection"}:e)),...e.members||[]];delete e.collections,delete e.manifests,e.members=t}return e.manifests&&(e.manifests=e.manifests.map((e=>this.traverseManifest("string"==typeof e?{"@id":e,"@type":"sc:Manifest"}:e)))),e.collections&&(e.collections=e.collections.map((e=>this.traverseCollection("string"==typeof e?{"@id":e,"@type":"sc:Collection"}:e)))),e.members&&(e.members=e.members.map((e=>"string"==typeof e?e:this.traverseUnknown(e)))),e}traverseManifest(e){return this.traverseType(this.traverseDescriptive(this.traverseLinking(this.traverseManifestItems(e))),this.traversals.manifest)}traverseManifestItems(e){return e.sequences&&(e.sequences=e.sequences.map((e=>this.traverseSequence(e)))),e.structures&&(e.structures=e.structures.map((e=>this.traverseRange(e)))),e}traverseSequence(e){return this.traverseType(this.traverseDescriptive(this.traverseLinking(this.traverseSequenceItems(e))),this.traversals.sequence)}traverseSequenceItems(e){return e.canvases&&(e.canvases=e.canvases.map((e=>this.traverseCanvas(e)))),e}traverseCanvas(e){return this.traverseType(this.traverseDescriptive(this.traverseLinking(this.traverseCanvasItems(e))),this.traversals.canvas)}traverseCanvasItems(e){return e.images&&(e.images=e.images.map((e=>this.traverseAnnotation(e)))),e.otherContent&&(e.otherContent=e.otherContent.map((e=>this.traverseAnnotationList(e)))),e}traverseRange(e){return this.traverseType(this.traverseDescriptive(this.traverseLinking(this.traverseRangeItems(e))),this.traversals.range)}traverseRangeItems(e){if(this.options.mergeMemberProperties){const t=[...(e.ranges||[]).map((e=>"string"==typeof e?{"@id":e,"@type":"sc:Range"}:e)),...(e.canvases||[]).map((e=>"string"==typeof e?{"@id":e,"@type":"sc:Canvas"}:e)),...e.members||[]];delete e.ranges,delete e.canvases,e.members=t.length?t.map((e=>this.traverseUnknown(e))):void 0}return e}traverseAnnotationList(e){const t="string"==typeof e?{"@id":e,"@type":"sc:AnnotationList"}:e;return this.traverseType(this.traverseDescriptive(this.traverseAnnotationListItems(t)),this.traversals.annotationList)}traverseAnnotationListItems(e){return e.resources&&(e.resources=e.resources.map((e=>this.traverseAnnotation(e)))),e}traverseAnnotation(e){return this.traverseType(this.traverseDescriptive(this.traverseLinking(this.traverseAnnotationItems(e))),this.traversals.annotation)}traverseAnnotationItems(e){return e.resource&&(Array.isArray(e.resource)?e.resource=e.resource.map((e=>this.traverseContentResource(e))):e.resource=this.traverseContentResource(e.resource)),e.on,e}traverseLayer(e){return this.traverseType(this.traverseLinking(this.traverseLayerItems(e)),this.traversals.layer)}traverseLayerItems(e){return e.otherContent&&(e.otherContent=e.otherContent.map((e=>this.traverseAnnotationList(e)))),e}traverseChoice(e){return this.traverseType(this.traverseChoiceItems(e),this.traversals.choice)}traverseChoiceItems(e){return e.default&&"rdf:nil"!==e.default&&(e.default=this.traverseContentResource(e.default)),e.item&&"rdf:nil"!==e.item&&(e.item=e.item.map((e=>this.traverseContentResource(e)))),e}traverseService(e){return this.traverseType(this.traverseLinking(e),this.traversals.service)}traverseContentResource(e){return"oa:Choice"===e["@type"]?this.traverseChoice(e):this.traverseType(this.traverseDescriptive(this.traverseLinking(e)),this.traversals.contentResource)}traverseUnknown(e){if(!e["@type"]||"string"==typeof e)return e;switch(function(e){if(null==e)throw new Error("Null or undefined is not a valid entity.");if(Array.isArray(e))throw new Error("Array is not a valid entity");if("object"!=typeof e)throw new Error(typeof e+" is not a valid entity");if("string"==typeof e["@type"]){const t=w.indexOf(e["@type"]);if(-1!==t)return w[t]}if(e.profile)return"Service";if(e.format)return"ContentResource";if(e["@type"])return"ContentResource";throw new Error("Resource type is not known")}(e)){case"sc:Collection":return this.traverseCollection(e);case"sc:Manifest":return this.traverseManifest(e);case"sc:Canvas":return this.traverseCanvas(e);case"sc:Sequence":return this.traverseSequence(e);case"sc:Range":return this.traverseRange(e);case"oa:Annotation":return this.traverseAnnotation(e);case"sc:AnnotationList":return this.traverseAnnotationList(e);case"sc:Layer":return this.traverseLayer(e);case"Service":return this.traverseService(e);case"oa:Choice":return this.traverseChoice(e);case"ContentResource":return this.traverseContentResource(e)}return e.profile?this.traverseService(e):e}traverseImageResource(e){const t=Array.isArray(e),i=Array.isArray(e)?e:[e],r=[];for(const n of i)"string"==typeof n?r.push(this.traverseContentResource({"@id":n,"@type":"dctypes:Image"})):r.push(this.traverseContentResource(n));return t||this.options.convertPropsToArray?r:r[0]}traverseDescriptive(e){return e.thumbnail&&(e.thumbnail=this.traverseImageResource(e.thumbnail)),e.logo&&(e.logo=this.traverseImageResource(e.logo)),e}traverseOneOrMoreServices(e){const t=Array.isArray(e),i=Array.isArray(e)?e:[e],r=[];for(const n of i)r.push(this.traverseService(n));return t||this.options.convertPropsToArray?r:r[0]}traverseLinking(e){return e.related&&(e.related=this.traverseOneOrManyType(e.related,this.traversals.contentResource)),e.rendering&&(e.rendering=this.traverseOneOrManyType(e.rendering,this.traversals.contentResource)),e.service&&(e.service=this.traverseOneOrMoreServices(e.service)),e.seeAlso&&(e.seeAlso=this.traverseOneOrManyType(e.seeAlso,this.traversals.contentResource)),e.within&&("string"==typeof e.within||(e.within=this.traverseOneOrManyType(e.within,this.traversals.contentResource))),e.startCanvas&&("string"==typeof e.startCanvas?e.startCanvas=this.traverseType({"@id":e.startCanvas,"@type":"sc:Canvas"},this.traversals.canvas):e.startCanvas&&this.traverseType(e.startCanvas,this.traversals.canvas)),e.contentLayer&&("string"==typeof e.contentLayer?e.contentLayer=this.traverseLayer({"@id":e.contentLayer,"@type":"sc:Layer"}):e.contentLayer=this.traverseLayer(e.contentLayer)),e}traverseOneOrManyType(e,t){if(!Array.isArray(e)){if(!this.options.convertPropsToArray)return this.traverseType(e,t);e=[e]}return e.map((e=>this.traverseType(e,t)))}traverseType(e,t){return t.reduce(((e,t)=>{const i=t(e);return void 0!==i||this.options.allowUndefinedReturn?i:e}),e)}}const S="Attribution",j="http://example.org/provider",R="Unknown";function I(e,t="none"){if(!e)return{};const i=Array.isArray(e)?e:[e],r={};for(const n of i){if("string"==typeof n){r[t]=r[t]?r[t]:[],r[t].push(n||"");continue}if(!n["@language"]){r[t]=r[t]?r[t]:[],r[t].push(n["@value"]||"");continue}const e=n["@language"];r[e]=r[e]?r[e]:[],r[e].push(n["@value"]||"")}return r}function T(e){return Array.isArray(e)?T(e.find((e=>"string"==typeof e))):-1!==x.indexOf(e)?"level2":-1!==C.indexOf(e)?"level1":"string"==typeof e?e:void 0}function k(e){for(const t of["sc","oa","dcterms","dctypes","iiif"])if(e.startsWith(`${t}:`))return e.slice(t.length+1);return e}const O=["Collection","Manifest","Annotation","AnnotationPage","Range","Service"];function M(e){const t=e["@id"]||e.id;let i=e["@type"]||e.type;const r=e.profile||void 0,n=e["@context"]||void 0;if(r){const e=function(e){switch(e){case"http://iiif.io/api/image/2/level0.json":case"http://iiif.io/api/image/2/level1.json":case"http://iiif.io/api/image/2/level2.json":return"ImageService2";case"http://iiif.io/api/auth/1/kiosk":case"http://iiif.io/api/auth/1/login":case"http://iiif.io/api/auth/1/clickthrough":case"http://iiif.io/api/auth/1/external":case"http://iiif.io/api/auth/0/kiosk":case"http://iiif.io/api/auth/0/login":case"http://iiif.io/api/auth/0/clickthrough":case"http://iiif.io/api/auth/0/external":return"AuthCookieService1";case"http://iiif.io/api/auth/1/token":case"http://iiif.io/api/auth/0/token":return"AuthTokenService1";case"http://iiif.io/api/auth/1/logout":case"http://iiif.io/api/auth/0/logout":return"AuthLogoutService1";case"http://iiif.io/api/search/1/search":case"http://iiif.io/api/search/0/search":return"SearchService1";case"http://iiif.io/api/search/1/autocomplete":case"http://iiif.io/api/search/0/autocomplete":return"AutoCompleteService1"}}(r);if(e)return e}if(n){const e=function(e){const t=Array.isArray(e)?e:[e];for(const i of t)switch(i){case"http://iiif.io/api/image/2/context.json":case"http://library.stanford.edu/iiif/image-api/1.1/compliance.html#level2":return"ImageService2";case"http://iiif.io/api/image/1/context.json":case"http://library.stanford.edu/iiif/image-api/1.1/context.json":return"ImageService1";case"http://iiif.io/api/annex/openannotation/context.json":return"ImageApiSelector"}}(n);if(e)return e}if(i){if(Array.isArray(i)){if(-1!==i.indexOf("oa:CssStylesheet"))return"CssStylesheet";if(-1!==i.indexOf("cnt:ContentAsText"))return"TextualBody";i=i[0]}for(const e of["sc","oa","dcterms","dctypes","iiif"])if(i.startsWith(`${e}:`)){i=i.slice(e.length+1);break}switch(i){case"Layer":return"AnnotationCollection";case"AnnotationList":return"AnnotationPage";case"cnt:ContentAsText":return"TextualBody"}}if(i&&-1!==O.indexOf(i))return i;if(e.format){if(e.format.startsWith("image/"))return"Image";if(e.format.startsWith("text/"))return"Text";if("application/pdf"===e.format)return"Text";if(e.format.startsWith("application/"))return"Dataset"}return t&&(t.endsWith(".jpg")||t.endsWith(".png")||t.endsWith(".jpeg"))?"Image":i||"unknown"}const q=/http(s)?:\/\/(creativecommons.org|rightsstatements.org)[^"'\\<\n]+/gm;function P(e){const t=e.match(q);return t?t[0]:e}const _=["http://iiif.io/api/presentation/2/context.json","http://iiif.io/api/image/2/context.json","http://iiif.io/api/image/1/context.json","http://library.stanford.edu/iiif/image-api/1.1/context.json","http://iiif.io/api/search/1/context.json","http://iiif.io/api/search/0/context.json","http://iiif.io/api/auth/1/context.json","http://iiif.io/api/auth/0/context.json","http://iiif.io/api/annex/openannotation/context.json"];function D(e){if(e){const t=Array.isArray(e)?e:[e],i=[];for(const e of t)"http://iiif.io/api/presentation/2/context.json"===e&&i.push("http://iiif.io/api/presentation/3/context.json"),-1===_.indexOf(e)&&i.push(e);if(t.length)return 1===i.length?i[0]:i}}function U(e){for(const t in e)void 0!==e[t]&&null!==e[t]||delete e[t];return e}let $=0;function W(e,t){const i=encodeURI(e.id||e["@id"]||"").trim();return i&&t?`${i}/${t}`:i||($++,`http://example.org/${e["@type"]}${t?`/${t}`:""}/${$}`)}function E(e){const t=[...e.behavior||[]];let i;return e.viewingHint&&t.push(e.viewingHint),Array.isArray(e.motivation)?i=e.motivation.map(k):e.motivation&&(i=k(e.motivation)),{"@context":e["@context"]?D(e["@context"]):void 0,id:(e["@id"]||W(e)).trim(),type:M(e),behavior:t.length?t:void 0,height:e.height?e.height:void 0,width:e.width?e.width:void 0,motivation:i,viewingDirection:e.viewingDirection,profile:e.profile,format:e.format?e.format:void 0,duration:void 0,timeMode:void 0}}function F(e){const[t,i]=function(e,t="Rights/License",i="none"){let r=null;const n=[],s=Array.isArray(e)?e:[e];for(const a of s){const e=a?P(a):void 0;!e||-1===e.indexOf("creativecommons.org")&&-1===e.indexOf("rightsstatements.org")?e&&n.push({label:{[i]:[t]},value:{[i]:[e]}}):r=e.startsWith("https://")?`http://${e.slice(8)}`:e}return[r,n]}(e.license),r=[...e.metadata?(n=e.metadata,n?n.map((e=>({label:I(e.label),value:I(e.value)}))):[]):[],...i];var n;return{rights:t,metadata:r.length?r:void 0,label:e.label?I(e.label):void 0,requiredStatement:e.attribution?{label:I(S),value:I(e.attribution)}:void 0,navDate:e.navDate,summary:e.description?I(e.description):void 0,thumbnail:e.thumbnail}}function H(e){if(!e.within)return;const t=Array.isArray(e.within)?e.within:[e.within],i=[];for(const r of t)if("string"==typeof r){if(r&&"sc:Manifest"===e["@type"])i.push({id:r,type:"Collection"})}else r["@id"]&&i.push({id:r["@id"],type:M(r)});return i.length?i:void 0}function N(e){const t=e.related?Array.isArray(e.related)?e.related:[e.related]:[],i=e.contentLayer;return{provider:e.logo||t.length?[{id:j,type:"Agent",homepage:t.length?[t[0]]:void 0,logo:e.logo?Array.isArray(e.logo)?e.logo:[e.logo]:void 0,label:I(R)}]:void 0,partOf:H(e),rendering:e.rendering,seeAlso:e.seeAlso,start:e.startCanvas,service:e.service?(r=e.service,Array.isArray(r)?r:[r]):void 0,supplementary:i?[i]:void 0};var r}function B(e){const t=e;return U({...E(t),...F(t),...N(t),...(i=t,{chars:i.chars,format:i.format?i.format:void 0,language:i.language})});var i}const z=new L({collection:[function(e){return U({...E(e),...F(e),...N(e),items:e.members})}],manifest:[function(e){const t=[],i=[];for(const n of e.sequences||[])n.canvases.length&&t.push(...n.canvases),n.behavior&&i.push(...n.behavior);const r=E(e);return i.length&&(r.behavior?r.behavior.push(...i):r.behavior=i),U({...r,...F(e),...N(e),items:t,structures:e.structures})}],canvas:[function(e){return U({...E(e),...F(e),...N(e),annotations:e.otherContent&&e.otherContent.length?e.otherContent:void 0,items:e.images&&e.images.length?[{id:W(e,"annotation-page"),type:"AnnotationPage",items:e.images}]:void 0})}],annotationList:[function(e){return U({...E(e),...F(e),...N(e),items:e.resources&&e.resources.length?e.resources:void 0})}],sequence:[function(e){return e.canvases&&0!==e.canvases.length?{canvases:e.canvases,behavior:e.viewingHint?[e.viewingHint]:[]}:{canvases:[],behavior:[]}}],annotation:[function(e){return U({...E(e),...F(e),...N(e),target:function e(t){if(Array.isArray(t)){if(t.length>1)return{type:"List",items:t.map(e)};t=t[0]}if("string"==typeof t)return encodeURI(t).trim();if("@type"in t){let e;if("string"==typeof t.full)e=t.full;else if("dctypes:Image"===t.full["@type"])e={id:t.full["@id"],type:"Image"};else{if("sc:Canvas"!==t.full["@type"])throw new Error(`Unsupported source type on annotation: ${t.full["@type"]}`);e={id:t.full["@id"],type:"Canvas"}}return{type:"SpecificResource",source:e,selector:G(t.selector)}}return encodeURI(t["@id"]).trim()}(e.on),body:Array.isArray(e.resource)?e.resource.map(B):B(e.resource)})}],contentResource:[B],choice:[function(e){const t=[];return e.default&&"rdf:nil"!==e.default&&t.push(e.default),e.item&&"rdf:nil"!==e.item&&t.push(...e.item),{...E(e),...F(e),items:t}}],range:[function(e){return U({...E(e),...F(e),...N(e),items:e.members})}],service:[function(e){const{"@id":t,"@type":i,"@context":r,profile:n,...s}=e,a={};return t&&(a["@id"]=t),a["@type"]=M(e),"unknown"===a["@type"]&&(r&&r.length&&(a["@context"]=r),a["@type"]="Service"),n&&(a.profile=T(n)),U({...a,...s})}],layer:[function(e){return U({...E(e),...F(e),...N(e)})}]});function G(e){if((Array.isArray(e["@type"])&&e["@type"].includes("oa:SvgSelector")||"oa:SvgSelector"==e["@type"])&&("chars"in e||"value"in e))return{type:"SvgSelector",value:"chars"in e?e.chars:e.value};if("oa:FragmentSelector"===e["@type"])return{type:"FragmentSelector",value:e.value};if("oa:Choice"===e["@type"])return[G(e.default),...(Array.isArray(e.item)?e.item:[e.item]).map(G)];if("iiif:ImageApiSelector"==e["@type"])return{type:"ImageApiSelector",region:"region"in e?e.region:void 0,rotation:"rotation"in e?e.rotation:void 0};throw new Error(`Unsupported selector type: ${e["@type"]}`)}const J=function(e){return e&&e["@context"]&&("http://iiif.io/api/presentation/2/context.json"===e["@context"]||-1!==e["@context"].indexOf("http://iiif.io/api/presentation/2/context.json")||"http://www.shared-canvas.org/ns/context.json"===e["@context"])||"http://iiif.io/api/image/2/context.json"===e["@context"]?z.traverseUnknown(e):e};e.upgrade=J,Object.defineProperties(e,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}})}));
var __defProp=Object.defineProperty,__defNormalProp=(e,t,i)=>t in e?__defProp(e,t,{enumerable:!0,configurable:!0,writable:!0,value:i}):e[t]=i,__publicField=(e,t,i)=>(__defNormalProp(e,"symbol"!=typeof t?t+"":t,i),i);!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports):"function"==typeof define&&define.amd?define(["exports"],t):t((e="undefined"!=typeof globalThis?globalThis:e||self).IIIFUpgrader={})}(this,(function(e){"use strict";const t="http://library.stanford.edu/iiif/image-api/compliance.html#level1",i="http://library.stanford.edu/iiif/image-api/compliance.html#level2",r="http://library.stanford.edu/iiif/image-api/conformance.html#level1",n="http://library.stanford.edu/iiif/image-api/conformance.html#level2",s="http://library.stanford.edu/iiif/image-api/1.1/compliance.html#level1",a="http://library.stanford.edu/iiif/image-api/1.1/compliance.html#level2",o="http://library.stanford.edu/iiif/image-api/1.1/conformance.html#level1",c="http://library.stanford.edu/iiif/image-api/1.1/conformance.html#level2",l="http://iiif.io/api/image/1/level1.json",p="http://iiif.io/api/image/1/profiles/level1.json",h="http://iiif.io/api/image/1/level2.json",u="http://iiif.io/api/image/1/profiles/level2.json",v="http://iiif.io/api/image/2/level1.json",f="http://iiif.io/api/image/2/profiles/level1.json",m="http://iiif.io/api/image/2/level2.json",y="http://iiif.io/api/image/2/profiles/level2.json",g="level1",d="level2",A="http://iiif.io/api/image/2/level1",C="http://iiif.io/api/image/2/level2",b=[A,C,t,i,r,n,s,a,o,c,l,p,h,u,v,f,m,y,g,d],x=["http://iiif.io/api/image/2/level0",A,C,"http://library.stanford.edu/iiif/image-api/compliance.html#level0",t,i,"http://library.stanford.edu/iiif/image-api/conformance.html#level0",r,n,"http://library.stanford.edu/iiif/image-api/1.1/compliance.html#level0",s,a,"http://library.stanford.edu/iiif/image-api/1.1/conformance.html#level0",o,c,"http://iiif.io/api/image/1/level0.json","http://iiif.io/api/image/1/profiles/level0.json",l,p,h,u,"http://iiif.io/api/image/2/level0.json","http://iiif.io/api/image/2/profiles/level0.json",v,f,m,y,"level0",g,d],w=["sc:Collection","sc:Manifest","sc:Canvas","sc:AnnotationList","oa:Annotation","sc:Range","sc:Layer","sc:Sequence","oa:Choice","Service","ContentResource"];class L{constructor(e,t={}){__publicField(this,"traversals"),__publicField(this,"options"),this.traversals={collection:[],manifest:[],canvas:[],annotationList:[],sequence:[],annotation:[],contentResource:[],choice:[],range:[],service:[],layer:[],...e},this.options={convertPropsToArray:!0,mergeMemberProperties:!0,allowUndefinedReturn:!1,...t}}static all(e){return new L({collection:[e],manifest:[e],canvas:[e],annotationList:[e],sequence:[e],annotation:[e],contentResource:[e],choice:[e],range:[e],service:[e],layer:[e]})}traverseCollection(e){return this.traverseType(this.traverseDescriptive(this.traverseLinking(this.traverseCollectionItems(e))),this.traversals.collection)}traverseCollectionItems(e){if(this.options.mergeMemberProperties){const t=[...(e.manifests||[]).map((e=>"string"==typeof e?{"@id":e,"@type":"sc:Manifest"}:e)),...(e.collections||[]).map((e=>"string"==typeof e?{"@id":e,"@type":"sc:Collection"}:e)),...e.members||[]];delete e.collections,delete e.manifests,e.members=t}return e.manifests&&(e.manifests=e.manifests.map((e=>this.traverseManifest("string"==typeof e?{"@id":e,"@type":"sc:Manifest"}:e)))),e.collections&&(e.collections=e.collections.map((e=>this.traverseCollection("string"==typeof e?{"@id":e,"@type":"sc:Collection"}:e)))),e.members&&(e.members=e.members.map((e=>"string"==typeof e?e:this.traverseUnknown(e)))),e}traverseManifest(e){return this.traverseType(this.traverseDescriptive(this.traverseLinking(this.traverseManifestItems(e))),this.traversals.manifest)}traverseManifestItems(e){return e.sequences&&(e.sequences=e.sequences.map((e=>this.traverseSequence(e)))),e.structures&&(e.structures=e.structures.map((e=>this.traverseRange(e)))),e}traverseSequence(e){return this.traverseType(this.traverseDescriptive(this.traverseLinking(this.traverseSequenceItems(e))),this.traversals.sequence)}traverseSequenceItems(e){return e.canvases&&(e.canvases=e.canvases.map((e=>this.traverseCanvas(e)))),e}traverseCanvas(e){return this.traverseType(this.traverseDescriptive(this.traverseLinking(this.traverseCanvasItems(e))),this.traversals.canvas)}traverseCanvasItems(e){return e.images&&(e.images=e.images.map((e=>this.traverseAnnotation(e)))),e.otherContent&&(e.otherContent=e.otherContent.map((e=>this.traverseAnnotationList(e)))),e}traverseRange(e){return this.traverseType(this.traverseDescriptive(this.traverseLinking(this.traverseRangeItems(e))),this.traversals.range)}traverseRangeItems(e){if(this.options.mergeMemberProperties){const t=[...(e.ranges||[]).map((e=>"string"==typeof e?{"@id":e,"@type":"sc:Range"}:e)),...(e.canvases||[]).map((e=>"string"==typeof e?{"@id":e,"@type":"sc:Canvas"}:e)),...e.members||[]];delete e.ranges,delete e.canvases,e.members=t.length?t.map((e=>this.traverseUnknown(e))):void 0}return e}traverseAnnotationList(e){const t="string"==typeof e?{"@id":e,"@type":"sc:AnnotationList"}:e;return this.traverseType(this.traverseDescriptive(this.traverseAnnotationListItems(t)),this.traversals.annotationList)}traverseAnnotationListItems(e){return e.resources&&(e.resources=e.resources.map((e=>this.traverseAnnotation(e)))),e}traverseAnnotation(e){return this.traverseType(this.traverseDescriptive(this.traverseLinking(this.traverseAnnotationItems(e))),this.traversals.annotation)}traverseAnnotationItems(e){return e.resource&&(Array.isArray(e.resource)?e.resource=e.resource.map((e=>this.traverseContentResource(e))):e.resource=this.traverseContentResource(e.resource)),e.on,e}traverseLayer(e){return this.traverseType(this.traverseLinking(this.traverseLayerItems(e)),this.traversals.layer)}traverseLayerItems(e){return e.otherContent&&(e.otherContent=e.otherContent.map((e=>this.traverseAnnotationList(e)))),e}traverseChoice(e){return this.traverseType(this.traverseChoiceItems(e),this.traversals.choice)}traverseChoiceItems(e){return e.default&&"rdf:nil"!==e.default&&(e.default=this.traverseContentResource(e.default)),e.item&&"rdf:nil"!==e.item&&(e.item=e.item.map((e=>this.traverseContentResource(e)))),e}traverseService(e){return this.traverseType(this.traverseLinking(e),this.traversals.service)}traverseContentResource(e){return"oa:Choice"===e["@type"]?this.traverseChoice(e):this.traverseType(this.traverseDescriptive(this.traverseLinking(e)),this.traversals.contentResource)}traverseUnknown(e){if(!e["@type"]||"string"==typeof e)return e;switch(function(e){if(null==e)throw new Error("Null or undefined is not a valid entity.");if(Array.isArray(e))throw new Error("Array is not a valid entity");if("object"!=typeof e)throw new Error(typeof e+" is not a valid entity");if("string"==typeof e["@type"]){const t=w.indexOf(e["@type"]);if(-1!==t)return w[t]}if(e.profile)return"Service";if(e.format)return"ContentResource";if(e["@type"])return"ContentResource";throw new Error("Resource type is not known")}(e)){case"sc:Collection":return this.traverseCollection(e);case"sc:Manifest":return this.traverseManifest(e);case"sc:Canvas":return this.traverseCanvas(e);case"sc:Sequence":return this.traverseSequence(e);case"sc:Range":return this.traverseRange(e);case"oa:Annotation":return this.traverseAnnotation(e);case"sc:AnnotationList":return this.traverseAnnotationList(e);case"sc:Layer":return this.traverseLayer(e);case"Service":return this.traverseService(e);case"oa:Choice":return this.traverseChoice(e);case"ContentResource":return this.traverseContentResource(e)}return e.profile?this.traverseService(e):e}traverseImageResource(e){const t=Array.isArray(e),i=Array.isArray(e)?e:[e],r=[];for(const n of i)"string"==typeof n?r.push(this.traverseContentResource({"@id":n,"@type":"dctypes:Image"})):r.push(this.traverseContentResource(n));return t||this.options.convertPropsToArray?r:r[0]}traverseDescriptive(e){return e.thumbnail&&(e.thumbnail=this.traverseImageResource(e.thumbnail)),e.logo&&(e.logo=this.traverseImageResource(e.logo)),e}traverseOneOrMoreServices(e){const t=Array.isArray(e),i=Array.isArray(e)?e:[e],r=[];for(const n of i)r.push(this.traverseService(n));return t||this.options.convertPropsToArray?r:r[0]}traverseLinking(e){return e.related&&(e.related=this.traverseOneOrManyType(e.related,this.traversals.contentResource)),e.rendering&&(e.rendering=this.traverseOneOrManyType(e.rendering,this.traversals.contentResource)),e.service&&(e.service=this.traverseOneOrMoreServices(e.service)),e.seeAlso&&(e.seeAlso=this.traverseOneOrManyType(e.seeAlso,this.traversals.contentResource)),e.within&&("string"==typeof e.within||(e.within=this.traverseOneOrManyType(e.within,this.traversals.contentResource))),e.startCanvas&&("string"==typeof e.startCanvas?e.startCanvas=this.traverseType({"@id":e.startCanvas,"@type":"sc:Canvas"},this.traversals.canvas):e.startCanvas&&this.traverseType(e.startCanvas,this.traversals.canvas)),e.contentLayer&&("string"==typeof e.contentLayer?e.contentLayer=this.traverseLayer({"@id":e.contentLayer,"@type":"sc:Layer"}):e.contentLayer=this.traverseLayer(e.contentLayer)),e}traverseOneOrManyType(e,t){if(!Array.isArray(e)){if(!this.options.convertPropsToArray)return this.traverseType(e,t);e=[e]}return e.map((e=>this.traverseType(e,t)))}traverseType(e,t){return t.reduce(((e,t)=>{const i=t(e);return void 0!==i||this.options.allowUndefinedReturn?i:e}),e)}}function S(e){for(const t in e)void 0!==e[t]&&null!==e[t]||delete e[t];return e}const j="Attribution",I="http://example.org/provider",R="Unknown";function T(e,t="none"){if(!e)return{};const i=Array.isArray(e)?e:[e],r={};for(const n of i){if("string"==typeof n){r[t]=r[t]?r[t]:[],r[t].push(n||"");continue}if(!n["@language"]){r[t]=r[t]?r[t]:[],r[t].push(n["@value"]||"");continue}const e=n["@language"];r[e]=r[e]?r[e]:[],r[e].push(n["@value"]||"")}return r}function k(e){return Array.isArray(e)?k(e.find((e=>"string"==typeof e))):-1!==x.indexOf(e)?"level2":-1!==b.indexOf(e)?"level1":"string"==typeof e?e:void 0}function O(e){for(const t of["sc","oa","dcterms","dctypes","iiif"])if(e.startsWith(`${t}:`))return e.slice(t.length+1);return e}const M=["Collection","Manifest","Annotation","AnnotationPage","Range","Service"];function q(e){const t=e["@id"]||e.id;let i=e["@type"]||e.type;const r=e.profile||void 0,n=e["@context"]||void 0;if(r){const e=function(e){switch(e){case"http://iiif.io/api/image/2/level0.json":case"http://iiif.io/api/image/2/level1.json":case"http://iiif.io/api/image/2/level2.json":return"ImageService2";case"http://iiif.io/api/auth/1/kiosk":case"http://iiif.io/api/auth/1/login":case"http://iiif.io/api/auth/1/clickthrough":case"http://iiif.io/api/auth/1/external":case"http://iiif.io/api/auth/0/kiosk":case"http://iiif.io/api/auth/0/login":case"http://iiif.io/api/auth/0/clickthrough":case"http://iiif.io/api/auth/0/external":return"AuthCookieService1";case"http://iiif.io/api/auth/1/token":case"http://iiif.io/api/auth/0/token":return"AuthTokenService1";case"http://iiif.io/api/auth/1/logout":case"http://iiif.io/api/auth/0/logout":return"AuthLogoutService1";case"http://iiif.io/api/search/1/search":case"http://iiif.io/api/search/0/search":return"SearchService1";case"http://iiif.io/api/search/1/autocomplete":case"http://iiif.io/api/search/0/autocomplete":return"AutoCompleteService1"}}(r);if(e)return e}if(n){const e=function(e){const t=Array.isArray(e)?e:[e];for(const i of t)switch(i){case"http://iiif.io/api/image/2/context.json":case"http://library.stanford.edu/iiif/image-api/1.1/compliance.html#level2":return"ImageService2";case"http://iiif.io/api/image/1/context.json":case"http://library.stanford.edu/iiif/image-api/1.1/context.json":return"ImageService1";case"http://iiif.io/api/annex/openannotation/context.json":return"ImageApiSelector"}}(n);if(e)return e}if(i){if(Array.isArray(i)){if(-1!==i.indexOf("oa:CssStylesheet"))return"CssStylesheet";if(-1!==i.indexOf("cnt:ContentAsText"))return"TextualBody";i=i[0]}for(const e of["sc","oa","dcterms","dctypes","iiif"])if(i.startsWith(`${e}:`)){i=i.slice(e.length+1);break}switch(i){case"Layer":return"AnnotationCollection";case"AnnotationList":return"AnnotationPage";case"cnt:ContentAsText":return"TextualBody"}}if(i&&-1!==M.indexOf(i))return i;if(e.format){if(e.format.startsWith("image/"))return"Image";if(e.format.startsWith("text/"))return"Text";if("application/pdf"===e.format)return"Text";if(e.format.startsWith("application/"))return"Dataset"}return t&&(t.endsWith(".jpg")||t.endsWith(".png")||t.endsWith(".jpeg"))?"Image":i||"unknown"}const P=/http(s)?:\/\/(creativecommons.org|rightsstatements.org)[^"'\\<\n]+/gm;function _(e){const t=e.match(P);return t?t[0]:e}const D=["http://iiif.io/api/presentation/2/context.json","http://iiif.io/api/image/2/context.json","http://iiif.io/api/image/1/context.json","http://library.stanford.edu/iiif/image-api/1.1/context.json","http://iiif.io/api/search/1/context.json","http://iiif.io/api/search/0/context.json","http://iiif.io/api/auth/1/context.json","http://iiif.io/api/auth/0/context.json","http://iiif.io/api/annex/openannotation/context.json"];function U(e){if(e){const t=Array.isArray(e)?e:[e],i=[];for(const e of t)"http://iiif.io/api/presentation/2/context.json"===e&&i.push("http://iiif.io/api/presentation/3/context.json"),-1===D.indexOf(e)&&i.push(e);if(t.length)return 1===i.length?i[0]:i}}let $=0;function W(e,t){const i=encodeURI(e.id||e["@id"]||"").trim();return i&&t?`${i}/${t}`:i||($++,`http://example.org/${e["@type"]}${t?`/${t}`:""}/${$}`)}function E(e){const t=[...e.behavior||[]];let i;return e.viewingHint&&t.push(e.viewingHint),Array.isArray(e.motivation)?i=e.motivation.map(O):e.motivation&&(i=O(e.motivation)),{"@context":e["@context"]?U(e["@context"]):void 0,id:(e["@id"]||W(e)).trim(),type:q(e),behavior:t.length?t:void 0,height:e.height?e.height:void 0,width:e.width?e.width:void 0,motivation:i,viewingDirection:e.viewingDirection,profile:e.profile,format:e.format?e.format:void 0,duration:void 0,timeMode:void 0}}function F(e){const[t,i]=function(e,t="Rights/License",i="none"){let r=null;const n=[],s=Array.isArray(e)?e:[e];for(const a of s){const e=a?_(a):void 0;!e||-1===e.indexOf("creativecommons.org")&&-1===e.indexOf("rightsstatements.org")?e&&n.push({label:{[i]:[t]},value:{[i]:[e]}}):r=e.startsWith("https://")?`http://${e.slice(8)}`:e}return[r,n]}(e.license),r=[...e.metadata?(n=e.metadata,n?n.map((e=>({label:T(e.label),value:T(e.value)}))):[]):[],...i];var n;return{rights:t,metadata:r.length?r:void 0,label:e.label?T(e.label):void 0,requiredStatement:e.attribution?{label:T(j),value:T(e.attribution)}:void 0,navDate:e.navDate,summary:e.description?T(e.description):void 0,thumbnail:H(e.thumbnail)}}function H(e){if(e){return(Array.isArray(e)?e:[e]).map((e=>"string"==typeof e?{id:e,type:"Image"}:("unknown"===e.type&&(e.type="Image"),e)))}return e}function N(e){if(!e.within)return;const t=Array.isArray(e.within)?e.within:[e.within],i=[];for(const r of t)if("string"==typeof r){if(r&&"sc:Manifest"===e["@type"])i.push({id:r,type:"Collection"})}else r["@id"]&&i.push({id:r["@id"],type:q(r)});return i.length?i:void 0}function B(e){const t=e.related?Array.isArray(e.related)?e.related:[e.related]:[],i=e.contentLayer;return{provider:e.logo||t.length?[{id:I,type:"Agent",homepage:t.length?[t[0]]:void 0,logo:e.logo?Array.isArray(e.logo)?e.logo:[e.logo]:void 0,label:T(R)}]:void 0,partOf:N(e),rendering:e.rendering,seeAlso:e.seeAlso,start:e.startCanvas,service:e.service?(r=e.service,Array.isArray(r)?r:r?[r]:[]):void 0,supplementary:i?[i]:void 0};var r}function z(e){const t=e;return S({...E(t),...F(t),...B(t),...(i=t,{chars:i.chars,format:i.format?i.format:void 0,language:i.language})});var i}const G=new L({collection:[function(e){return S({...E(e),...F(e),...B(e),items:e.members})}],manifest:[function(e){const t=[],i=[];let r;for(const s of e.sequences||[])s.canvases.length&&t.push(...s.canvases),s.behavior&&i.push(...s.behavior),s.startCanvas&&(r=s.startCanvas);const n=E(e);return i.length&&(n.behavior?n.behavior.push(...i):n.behavior=i),S({...n,...F(e),...B(e),start:r,items:t,structures:e.structures})}],canvas:[function(e){return S({...E(e),...F(e),...B(e),annotations:e.otherContent&&e.otherContent.length?e.otherContent:void 0,items:e.images&&e.images.length?[{id:W(e,"annotation-page"),type:"AnnotationPage",items:e.images}]:void 0})}],annotationList:[function(e){return S({...E(e),...F(e),...B(e),items:e.resources&&e.resources.length?e.resources:void 0})}],sequence:[function(e){return e.canvases&&0!==e.canvases.length?{canvases:e.canvases,behavior:e.viewingHint?[e.viewingHint]:[],startCanvas:e.startCanvas}:{canvases:[],behavior:[]}}],annotation:[function(e){return S({...E(e),...F(e),...B(e),target:function e(t){if(Array.isArray(t)){if(t.length>1)return{type:"List",items:t.map(e)};t=t[0]}if("string"==typeof t)return encodeURI(t).trim();if("@type"in t){let e;if("string"==typeof t.full)e=t.full;else if("dctypes:Image"===t.full["@type"])e={id:t.full["@id"],type:"Image"};else{if("sc:Canvas"!==t.full["@type"])throw new Error(`Unsupported source type on annotation: ${t.full["@type"]}`);e={id:t.full["@id"],type:"Canvas"}}return{type:"SpecificResource",source:e,selector:J(t.selector)}}return encodeURI(t["@id"]).trim()}(e.on),body:Array.isArray(e.resource)?e.resource.map(z):z(e.resource)})}],contentResource:[z],choice:[function(e){const t=[];return e.default&&"rdf:nil"!==e.default&&t.push(e.default),e.item&&"rdf:nil"!==e.item&&t.push(...e.item),{...E(e),...F(e),items:t}}],range:[function(e){return S({...E(e),...F(e),...B(e),items:e.members})}],service:[function(e){const{"@id":t,"@type":i,"@context":r,profile:n,...s}=e,a={};return t&&(a["@id"]=t),a["@type"]=q(e),"unknown"===a["@type"]&&(r&&r.length&&(a["@context"]=r),a["@type"]="Service"),n&&(a.profile=k(n)),S({...a,...s})}],layer:[function(e){return S({...E(e),...F(e),...B(e)})}]});function J(e){if((Array.isArray(e["@type"])&&e["@type"].includes("oa:SvgSelector")||"oa:SvgSelector"==e["@type"])&&("chars"in e||"value"in e))return{type:"SvgSelector",value:"chars"in e?e.chars:e.value};if("oa:FragmentSelector"===e["@type"])return{type:"FragmentSelector",value:e.value};if("oa:Choice"===e["@type"])return[J(e.default),...(Array.isArray(e.item)?e.item:[e.item]).map(J)];if("iiif:ImageApiSelector"==e["@type"])return{type:"ImageApiSelector",region:"region"in e?e.region:void 0,rotation:"rotation"in e?e.rotation:void 0};throw new Error(`Unsupported selector type: ${e["@type"]}`)}const K=function(e){return e&&e["@context"]&&("http://iiif.io/api/presentation/2/context.json"===e["@context"]||-1!==e["@context"].indexOf("http://iiif.io/api/presentation/2/context.json")||"http://www.shared-canvas.org/ns/context.json"===e["@context"])||"http://iiif.io/api/image/2/context.json"===e["@context"]?G.traverseUnknown(e):e};e.upgrade=K,Object.defineProperties(e,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}})}));
//# sourceMappingURL=index.umd.js.map
{
"name": "@iiif/parser",
"version": "1.1.2",
"version": "2.0.0",
"license": "MIT",
"description": "IIIF Presentation 2 and 3 parsing utilities",
"repository": {
"type": "git",
"url": "https://github.com/iiif-commons/parser"
},
"main": "dist/bundle/cjs/index.js",

@@ -15,13 +20,29 @@ "module": "dist/bundle/esm/index.mjs",

"import": "./dist/bundle/esm/index.mjs",
"default": "./dist/index.umd.js"
"types": "./dist/index.d.ts"
},
"./presentation-2": {
"require": "./dist/presentation-2/cjs/index.js",
"import": "./dist/presentation-2/esm/index.mjs"
"import": "./dist/presentation-2/esm/index.mjs",
"types": "./dist/presentation-2/index.d.ts"
},
"./presentation-3": {
"require": "./dist/bundle/cjs/index.js",
"import": "./dist/bundle/esm/index.mjs"
"import": "./dist/bundle/esm/index.mjs",
"types": "./dist/index.d.ts"
},
"./upgrader": "./dist/upgrader/index.umd.js"
"./strict": {
"require": "./dist/strict/cjs/index.js",
"import": "./dist/strict/esm/index.mjs",
"types": "./dist/strict/index.d.ts"
},
"./image-3": {
"require": "./dist/image-3/cjs/index.js",
"import": "./dist/image-3/esm/index.mjs",
"types": "./dist/image-3/index.d.ts"
},
"./upgrader": {
"require": "./dist/upgrader/index.umd.js",
"import": "./dist/upgrader/index.umd.js",
"types": "./dist/upgrader/index.d.ts"
}
},

@@ -31,12 +52,4 @@ "typesVersions": {

"*": [
"dist/index.d.ts"
],
"presentation-2": [
"dist/presentation-2/index.d.ts"
],
"presentation-3": [
"dist/index.d.ts"
],
"upgrader": [
"dist/upgrader/index.d.ts"
"./dist/*",
"./*"
]

@@ -46,15 +59,21 @@ }

"scripts": {
"build": "node scripts/build.mjs",
"prepublishOnly": "node scripts/build.mjs && node scripts/validate.mjs",
"build": "node ./scripts/build.mjs",
"prepublishOnly": "node ./scripts/build.mjs && node scripts/validate.mjs",
"test": "vitest"
},
"resolutions": {
"@iiif/presentation-3": "^2.1.3"
},
"dependencies": {
"@iiif/presentation-2": "^1.0.4",
"@iiif/presentation-3": "^1.1.3",
"@types/geojson": "^7946.0.8"
"@iiif/presentation-3": "^2.1.3",
"@iiif/presentation-3-normalized": "^0.9.7",
"@types/geojson": "^7946.0.10"
},
"devDependencies": {
"@happy-dom/global-registrator": "^6.0.4",
"@hyperion-framework/validator": "^1.1.0",
"@typescript-eslint/eslint-plugin": "^5.9.1",
"@typescript-eslint/parser": "^5.9.1",
"@vitest/coverage-c8": "^0.25.2",
"chalk": "^5.0.1",

@@ -66,6 +85,7 @@ "dts-bundle-generator": "^6.13.0",

"execa": "^6.1.0",
"node-fetch": "^3.2.9",
"prettier": "^2.5.1",
"terser": "^5.15.0",
"tslib": "^2.3.1",
"typescript": "^4.5.4",
"tslib": "^2.4.0",
"typescript": "^4.7.4",
"vite": "^3.1.3",

@@ -72,0 +92,0 @@ "vitest": "^0.23.4"

Sorry, the diff of this file is too big to display

Sorry, the diff of this file is too big to display

Sorry, the diff of this file is too big to display

Sorry, the diff of this file is too big to display

Sorry, the diff of this file is too big to display

Sorry, the diff of this file is too big to display

Sorry, the diff of this file is too big to display

Sorry, the diff of this file is too big to display