@prose-reader/metadata-fetcher 1.345.0 → 1.347.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.cjs CHANGED
@@ -1,2 +1,2 @@
1
- Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});let e=require("@prose-reader/archive-reader"),t=require("@prose-reader/shared"),n=require("xmldoc");var r=(e,t)=>t.has(e.scheme.trim().toLowerCase()),i=(e,t,n)=>{for(let i of e??[]){if(!r(i,t))continue;let e=n(i.value);if(e!==void 0)return e}},a=new Set([`isbn`,`gtin`]),o=new Set([`gtin`,`isbn`]),s=t=>{let n=(0,e.normalizeIsbn)(t);return n!==void 0&&(n.length===10||/^97[89]/.test(n))?n:void 0},c=e=>i(e,a,s),l=t=>i(t,o,e.normalizeGtin),u=e=>{let t=e.contributors??[],n=t.filter(e=>e.roles.includes(`author`)),r=(n.length>0?n:t).map(e=>e.name.trim()).filter(e=>e.length>0);return[...new Set(r)]},d=/^\d{13}$/,f=/^\d{9}[\dX]$/,p=t=>{let n=(0,e.normalizeIsbn)(t);if(n===void 0)return;if(d.test(n))return n;if(!f.test(n))return;let r=`978${n.slice(0,9)}`,i=0;for(let e=0;e<r.length;e++){let t=r.charCodeAt(e)-48;i+=e%2==0?t:t*3}return`${r}${(10-i%10)%10}`},m=/[\u0300-\u036f]/g,h=/[^\p{L}\p{N}]+/gu,g=e=>e.normalize(`NFD`).replace(m,``).toLowerCase().replace(h,` `).trim(),_=e=>{let t=new Map;for(let n=0;n<e.length-1;n++){let r=e.slice(n,n+2);t.set(r,(t.get(r)??0)+1)}return t},v=(e,t)=>{let n=g(e).replaceAll(` `,``),r=g(t).replaceAll(` `,``);if(n.length===0||r.length===0)return 0;if(n===r)return 1;if(n.length<2||r.length<2)return 0;let i=_(n),a=0;for(let[e,t]of _(r))a+=Math.min(t,i.get(e)??0);return 2*a/(n.length-1+(r.length-1))},y=/\s*[:;]\s*|\s+[-–—]\s+/,b=e=>{let[t=``,...n]=e.split(y),r=t.trim(),i=n.join(` `).trim();return r.length===0?{main:e,hasSubtitle:!1}:{main:r,hasSubtitle:i.length>0}},x=.9,S=[`volume`,`part`,`book`],C=/\b(volumes?|vols?|parts?|books?)\s+([\p{L}\p{N}]+)\b/gu,w={one:1,first:1,two:2,second:2,three:3,third:3,four:4,fourth:4,five:5,fifth:5,six:6,sixth:6,seven:7,seventh:7,eight:8,eighth:8,nine:9,ninth:9,ten:10,tenth:10,eleven:11,eleventh:11,twelve:12,twelfth:12},T={i:1,v:5,x:10,l:50,c:100,d:500,m:1e3},ee=e=>{if(!/^m{0,3}(cm|cd|d?c{0,3})(xc|xl|l?x{0,3})(ix|iv|v?i{0,3})$/i.test(e))return;let t=0,n=0;for(let r of[...e.toLowerCase()].reverse()){let e=T[r];if(e===void 0)return;e<n?t-=e:(t+=e,n=e)}return t>0?t:void 0},te=e=>/^\d+$/.test(e)?Number.parseInt(e,10):w[e]??ee(e),ne=e=>{if(e.startsWith(`vol`))return`volume`;if(e.startsWith(`part`))return`part`;if(e.startsWith(`book`))return`book`},re=e=>{let t=new Map;for(let n of g(e).matchAll(C)){let e=n[1]===void 0?void 0:ne(n[1]),r=n[2]===void 0?void 0:te(n[2]);if(e===void 0||r===void 0)continue;let i=t.get(e)??new Set;i.add(r),t.set(e,i)}return t},ie=(e,t)=>{let n=re(e),r=re(t);for(let e of S){let t=n.get(e),i=r.get(e);if(!(t===void 0||i===void 0)&&[...t].every(e=>!i.has(e)))return!0}return!1},ae=(e,t)=>{if(ie(e,t))return 0;let n=v(e,t),r=b(e),i=b(t);return r.hasSubtitle===i.hasSubtitle?n:Math.max(n,v(r.main,i.main)*x)},oe=e=>g(e).split(` `).filter(e=>e.length>0).sort().join(` `),E=(e,t)=>v(oe(e),oe(t)),D={isbn:1,gtin:1,identifiers:.6,title:.8,authors:.5,series:.3,publishedYear:.2,publisher:.15,languages:.15,numberOfPages:.15},se=new Set([`isbn`,`gtin`]),O=e=>{let t=e?.trim();return t!==void 0&&t.length>0?t:void 0},k=(e,t)=>{let n=O(e.value)?.toLowerCase();return n!==void 0&&n===O(t.value)?.toLowerCase()},A=e=>e.scheme.trim().toLowerCase()===`unknown`?void 0:O(e.scheme)?.toLowerCase(),ce=e=>`${e.scheme}:${e.value}`,le=e=>{let t=e.scheme.trim().toLowerCase();return t===`isbn`||t===`gtin`},ue=(e,t)=>{if(!k(e,t))return!1;let n=A(e),r=A(t);return n===void 0||r===void 0||n===r},de=(e,t)=>{if(!k(e,t))return!1;let n=A(e),r=A(t);return n!==void 0&&n===r},fe=e=>e.trim().toLowerCase().split(`-`)[0]??``,pe=(e,t)=>{let n=Math.abs(e-t);return n===0?1:n===1?.6:n<=3?.3:0},me=(e,t)=>{let n=Math.max(e,t);return n<=0?0:Math.max(0,1-Math.abs(e-t)/n*2)},he=(e,t,n)=>e.reduce((e,r)=>t.reduce((e,t)=>Math.max(e,n(r,t)),e),0),ge=(e,t,n=v)=>{let r=O(e);if(r===void 0)return;let i;for(let e of t){let t=O(e);if(t===void 0)continue;let a={score:n(r,t),query:r,candidate:t};(i===void 0||a.score>i.score)&&(i=a)}return i},_e=(e,t)=>{if(e===void 0)return;let n;for(let r of t){if(r===void 0)continue;let t={score:pe(e,r),query:String(e),candidate:String(r)};(n===void 0||t.score>n.score)&&(n=t)}return n},ve=(e,t)=>{let n=[],r=(e,t)=>{t!==void 0&&n.push({field:e,weight:D[e],score:Math.min(1,Math.max(0,t.score)),query:t.query,candidate:t.candidate})},i=(e,t,n,i=v)=>{let a=O(t),o=O(n);a===void 0||o===void 0||r(e,{score:i(a,o),query:a,candidate:o})},a=c(e.identifiers),o=c(t.identifiers),s=a===void 0?void 0:p(a),d=o===void 0?void 0:p(o),f=a!==void 0&&o!==void 0&&s!==void 0&&d!==void 0;f&&r(`isbn`,{score:+(s===d),query:a,candidate:o});let m=l(e.identifiers),h=l(t.identifiers);!f&&m!==void 0&&h!==void 0&&r(`gtin`,{score:+(m===h),query:m,candidate:h});let g=(e.identifiers??[]).filter(e=>!le(e)),_=(t.identifiers??[]).filter(e=>!le(e)),y=g.some(e=>_.some(t=>de(e,t)));g.length>0&&_.length>0&&r(`identifiers`,{score:+!!g.some(e=>_.some(t=>ue(e,t))),query:g.map(ce).join(`, `),candidate:_.map(ce).join(`, `)}),i(`title`,e.title,t.title,ae),r(`publisher`,ge(e.publisher,[t.publication?.original?.publisher,t.publication?.edition?.publisher])),i(`series`,e.series,t.belongsTo?.series?.[0]?.name);let b=u(t),x=(e.authors??[]).flatMap(e=>{let t=O(e);return t===void 0?[]:[t]});x.length>0&&b.length>0&&r(`authors`,{score:he(x,b,E),query:x.join(`, `),candidate:b.join(`, `)}),r(`publishedYear`,_e(e.publishedYear,[t.publication?.original?.date?.year,t.publication?.edition?.date?.year]));let S=e.languages??[],C=t.languages??[];if(S.length>0&&C.length>0){let e=new Set(C.map(fe));r(`languages`,{score:+!!S.some(t=>e.has(fe(t))),query:S.join(`, `),candidate:C.join(`, `)})}e.numberOfPages!==void 0&&t.numberOfPages!==void 0&&r(`numberOfPages`,{score:me(e.numberOfPages,t.numberOfPages),query:String(e.numberOfPages),candidate:String(t.numberOfPages)});let w=n.filter(e=>se.has(e.field));if(w.some(e=>e.score===0))return{score:0,signals:n};if(y||w.some(e=>e.score===1))return{score:1,signals:n};let T=n.reduce((e,t)=>e+t.weight,0);return T===0?{score:0,signals:n}:{score:n.reduce((e,t)=>e+t.score*t.weight,0)/T,signals:n}},j=class extends Error{status;constructor(e,t){super(t??`Provider responded with status ${e}`),this.name=`MetadataProviderResponseError`,this.status=e}},M=e=>{if(typeof e!=`object`||!e||!(`status`in e))return;let{status:t}=e;if(!(typeof t!=`number`||!Number.isInteger(t)))return t>=100&&t<=599?t:void 0},ye=t.Report.namespace(`@prose-reader/metadata-fetcher`,void 0,{color:`#b06642`}),N=e=>{let t=Object.entries(e).filter(([,e])=>e!==void 0);return Object.fromEntries(t)},be=5,xe=.5,Se=5,Ce=({candidate:e,providerId:t,score:n,signals:r,accepted:i,includeRaw:a})=>N({providerId:t,score:n,signals:r,accepted:i,metadata:e.metadata,id:e.id,url:e.url,raw:a?e.raw:void 0}),we=async(e,t)=>{let n=t.limit??be,r=t.minScore??xe,i=t.includeRaw===!0,a=await Promise.all(t.providers.map(async r=>{try{return{provider:r,candidates:await r.search(e,{limit:n,signal:t.signal}),failure:void 0}}catch(e){if(t.signal?.aborted===!0)throw e;return ye.error(`fetchMetadata: provider "${r.id}" failed`,e),{provider:r,candidates:void 0,failure:N({id:r.id,status:M(e)})}}})),o=a.flatMap(e=>e.failure===void 0?[]:[e.failure]),s={},c=[];for(let{provider:t,candidates:o}of a){if(o===void 0)continue;let a=o.map(n=>{let{score:a,signals:o}=ve(e,n.metadata);return Ce({candidate:n,providerId:t.id,score:a,signals:o,accepted:a>=r,includeRaw:i})}).sort((e,t)=>t.score-e.score).slice(0,n);s[t.id]!==void 0&&ye.warn(`fetchMetadata: several providers share the id "${t.id}"`),s[t.id]={provider:{id:t.id,name:t.name},matches:a},c.push(...a)}return{version:Se,matches:[...c].sort((e,t)=>t.score-e.score),sources:s,failedProviders:o}},Te=e=>{let{metadata:t}=e,n=u(t),r=t.identifiers?.map(({value:e,scheme:t})=>({value:e,scheme:t}));return N({title:t.title,authors:n.length>0?n:void 0,identifiers:r!==void 0&&r.length>0?r:void 0,series:t.belongsTo?.series?.[0]?.name,publisher:t.publication?.edition?.publisher??t.publication?.original?.publisher,publishedYear:t.publication?.edition?.date?.year??t.publication?.original?.date?.year,languages:t.languages,numberOfPages:t.numberOfPages})},P=e=>typeof e==`object`&&!!e&&!Array.isArray(e),F=(e,t)=>{let n=e[t];if(typeof n!=`string`)return;let r=n.trim();return r.length>0?r:void 0},I=(e,t)=>{let n=e[t];return typeof n==`number`&&Number.isFinite(n)?n:void 0},L=(e,t)=>{let n=e[t];if(!Array.isArray(n))return;let r=n.filter(e=>typeof e==`string`).map(e=>e.trim()).filter(e=>e.length>0);return r.length>0?r:void 0},R=(e,t)=>{let n=e[t];return Array.isArray(n)?n.filter(P):[]},Ee=e=>e.reason??new DOMException(`The operation was aborted`,`AbortError`),De=e=>{if(e?.aborted===!0)throw Ee(e)},Oe=(e,t)=>(De(t),new Promise((n,r)=>{let i=()=>{clearTimeout(a),r(t===void 0?void 0:Ee(t))},a=setTimeout(()=>{t?.removeEventListener(`abort`,i),n()},e);t?.addEventListener(`abort`,i,{once:!0})})),ke=e=>{if(!Number.isInteger(e.attempts)||e.attempts<1)throw RangeError(`attempts must be a positive integer`);if(!Number.isFinite(e.initialDelayMs)||e.initialDelayMs<0)throw RangeError(`initialDelayMs must be a non-negative finite number`);if(e.maxDelayMs!==void 0&&(!Number.isFinite(e.maxDelayMs)||e.maxDelayMs<0))throw RangeError(`maxDelayMs must be a non-negative finite number`)},Ae=(e,t)=>{let n=t.initialDelayMs*2**(e-1),r=t.jitter===!1?n:n*(1+Math.random());return Math.min(r,t.maxDelayMs??2**53-1)},je=async(e,t)=>{ke(t);for(let n=1;n<=t.attempts;n+=1){De(t.signal);try{return await e(n)}catch(e){if(n===t.attempts||t.signal?.aborted===!0||!t.shouldRetry(e,n))throw e;await Oe(Ae(n,t),t.signal)}}throw Error(`retryWithBackoff reached an invalid state`)},Me=`GoogleBooks`,Ne=new Set([`books.googleapis.com`,`www.googleapis.com`]),Pe=/^books\.google\.(?:com|[a-z]{2}|com\.[a-z]{2}|co\.[a-z]{2})$/i,z=e=>{let t=e.trim();return/^[a-z0-9_-]+$/i.test(t)?t:void 0},Fe=e=>{try{let t=new URL(e.trim());if(t.protocol!==`http:`&&t.protocol!==`https:`)return;let n=t.hostname.toLowerCase();if(Pe.test(n))return z(t.searchParams.get(`id`)??``);if(Ne.has(n)){let e=/^\/books\/v1\/volumes\/([^/]+)\/?$/i.exec(t.pathname)?.[1];return e===void 0?void 0:z(decodeURIComponent(e))}}catch{return}},B=e=>{for(let t of e.identifiers??[]){let e=t.scheme.trim().toLowerCase(),n=e===`googlebooks`?z(t.value):e===`unknown`||e===`url`||e===`uri`?Fe(t.value):void 0;if(n!==void 0)return{id:n,identifier:{value:t.value,scheme:t.scheme}}}},V=(e,t)=>{let n=e[t];return P(n)?n:void 0},Ie=e=>{let t=R(e,`industryIdentifiers`).flatMap(e=>{let t=F(e,`identifier`);return t===void 0?[]:[N({type:F(e,`type`),identifier:t})]});return t.length>0?t:void 0},Le=e=>{let t=V(e,`imageLinks`);if(t===void 0)return;let n=N({smallThumbnail:F(t,`smallThumbnail`),thumbnail:F(t,`thumbnail`),small:F(t,`small`),medium:F(t,`medium`),large:F(t,`large`),extraLarge:F(t,`extraLarge`)});return Object.keys(n).length>0?n:void 0},Re=e=>{let t=V(e,`seriesInfo`);if(t===void 0)return;let n=F(t,`bookDisplayNumber`);return n===void 0?void 0:{bookDisplayNumber:n}},ze=e=>{let t=V(e,`volumeInfo`);if(t===void 0)return;let n=N({title:F(t,`title`),subtitle:F(t,`subtitle`),authors:L(t,`authors`),publisher:F(t,`publisher`),publishedDate:F(t,`publishedDate`),description:F(t,`description`),industryIdentifiers:Ie(t),pageCount:I(t,`pageCount`),categories:L(t,`categories`),language:F(t,`language`),imageLinks:Le(t),infoLink:F(t,`infoLink`),canonicalVolumeLink:F(t,`canonicalVolumeLink`),seriesInfo:Re(t)});return Object.keys(n).length>0?n:void 0},H=e=>{if(!P(e))return;let t=N({id:F(e,`id`),volumeInfo:ze(e)});return Object.keys(t).length>0?t:void 0},Be=e=>P(e)?R(e,`items`).flatMap(e=>{let t=H(e);return t===void 0?[]:[t]}):[],Ve=25,He={id:`identifiers`,volumeInfo:`metadata`},Ue={title:`title`,subtitle:`title`,authors:`contributors`,publisher:`publication.edition.publisher`,publishedDate:`publication.edition.date`,description:`description`,industryIdentifiers:`identifiers`,pageCount:`numberOfPages`,categories:`subjects`,language:`languages`,imageLinks:`cover`,infoLink:`candidate.url`,canonicalVolumeLink:`candidate.url`,seriesInfo:`title`},U=e=>e.length>0?e:void 0,We=e=>e===`ISBN_10`||e===`ISBN_13`?`ISBN`:e??`Unknown`,Ge=e=>U(e.filter((e,t,n)=>n.findIndex(t=>t.value.trim().toLowerCase()===e.value.trim().toLowerCase()&&t.scheme.trim().toLowerCase()===e.scheme.trim().toLowerCase())===t)),Ke=e=>e.map(e=>N({value:e.identifier,scheme:We(e.type)})),qe=e=>{let t=e.title!==void 0&&e.subtitle!==void 0?`${e.title}: ${e.subtitle}`:e.title,n=e.seriesInfo?.bookDisplayNumber,r=t!==void 0&&(/\bvol(?:ume)?\.?\s*\S+/i.test(t)||/\b(?:book|part)(?:\s*#\s*|\s+)(?:\d+(?:[.-]\d+)*|[ivxlcdm]+)\b/i.test(t));return t===void 0||n===void 0||r?t:`${t} Vol ${n}`},W=e=>{if(e!==void 0)try{let t=new URL(e);return t.protocol!==`http:`&&t.protocol!==`https:`?void 0:(t.protocol===`http:`&&(t.protocol=`https:`),t.toString())}catch{return}},Je=e=>{if(e===void 0)return;let t=[e.extraLarge,e.large,e.medium,e.small,e.thumbnail,e.smallThumbnail];for(let e of t){let t=W(e);if(t!==void 0)return t}},Ye=e=>U(e.map(e=>({name:e,roles:[`author`]}))),Xe=(t,n={})=>{let r=t.volumeInfo??{},i=Ke(r.industryIdentifiers??[]),a=Ge([...n.matchedIdentifier===void 0?[]:[n.matchedIdentifier],...n.matchedIsbn===void 0?[]:[{value:n.matchedIsbn,scheme:`ISBN`}],...t.id===void 0?[]:[{value:t.id,scheme:Me}],...i]),o=N({date:(0,e.parseW3cDtfDate)(r.publishedDate),publisher:r.publisher}),s=Je(r.imageLinks),c=s===void 0?void 0:{uri:s,confidence:`derived`},l=[...new Set(r.categories??[])].slice(0,25);return N({title:qe(r),description:r.description,publication:o.date!==void 0||o.publisher!==void 0?{edition:o}:void 0,languages:r.language===void 0?void 0:[r.language],subjects:U(l),contributors:Ye(r.authors??[]),numberOfPages:r.pageCount,identifiers:a,cover:c})},Ze=e=>W(e.volumeInfo?.canonicalVolumeLink)??W(e.volumeInfo?.infoLink)??(e.id===void 0?void 0:`https://books.google.com/books?id=${encodeURIComponent(e.id)}`),Qe=40,$e=3,et=1e3,tt=3e3,nt=new Set([500,502,503,504]),rt=e=>`"${e.replace(/["\\]+/g,` `).replace(/\s+/g,` `).trim()}"`,it=e=>{let t=e.title?.trim();if(t===void 0||t.length===0)return;let n=e.authors?.find(e=>e.trim().length>0)?.trim();return{title:t,...n===void 0?{}:{author:n}}},at=e=>{let t=H(e);return t===void 0?void 0:{volume:t,raw:e}},ot=e=>P(e)?R(e,`items`).flatMap(e=>{let t=at(e);return t===void 0?[]:[t]}):[],G=(e,t={})=>e.map(({volume:e,raw:n})=>({metadata:Xe(e,t),id:e.id,url:Ze(e),raw:n})),st=e=>{let t=`${e.baseUrl.replace(/\/+$/,``)}/volumes`,n=async(t,n,r=!1)=>(t.searchParams.set(`key`,e.apiKey),je(async()=>{let i=await e.fetch(t.toString(),{signal:n.signal,headers:{Accept:`application/json`}});if(!(r&&i.status===404)){if(!i.ok)throw new j(i.status,`Google Books lookup failed with status ${i.status}`);return i}},{attempts:$e,initialDelayMs:et,maxDelayMs:tt,signal:n.signal,shouldRetry:e=>{let t=M(e);return t===void 0||nt.has(t)}})),r=async(e,r)=>{let i=await n(new URL(`${t}/${encodeURIComponent(e)}`),r,!0);if(i===void 0)return;let a=at(await i.json());if(a?.volume.id!==e)throw Error(`Google Books response did not contain the requested volume ${e}`);return a},i=async(e,r)=>{if(r.limit<=0)return[];let i=new URL(t);i.searchParams.set(`q`,e),i.searchParams.set(`maxResults`,String(Math.min(Math.ceil(r.limit),Qe))),i.searchParams.set(`orderBy`,`relevance`),i.searchParams.set(`printType`,`books`);let a=await n(i,r);return a===void 0?[]:ot(await a.json())};return async(e,t)=>{let n=B(e);if(n!==void 0){let e=await r(n.id,t);if(e!==void 0)return G([e],{matchedIdentifier:n.identifier})}let a=c(e.identifiers);if(a!==void 0){let e=await i(`isbn:${a}`,t);if(e.length>0)return G(e,{matchedIsbn:a})}let o=it(e);if(o===void 0)return[];let s=`intitle:${rt(o.title)}`,l=o.author===void 0?s:`${s} inauthor:${rt(o.author)}`,u=await i(l,t);return u.length>0||o.author===void 0?G(u):G(await i(s,t))}},ct=`googleBooks`,lt=`https://www.googleapis.com/books/v1`,ut=e=>{let t=e.apiKey.trim();if(t.length===0)throw Error(`createGoogleBooksProvider requires a non-empty apiKey`);return{id:ct,name:`Google Books`,search:st({apiKey:t,baseUrl:e.baseUrl??lt,fetch:e.fetch??globalThis.fetch})}},dt=`ProjectGutenberg`,ft=new Set([`gutenberg.org`,`www.gutenberg.org`]),pt=[/^\/ebooks\/(\d+)(?:[./]|$)/i,/^\/files\/(\d+)(?:\/|$)/i,/^\/cache\/epub\/(\d+)(?:\/|$)/i,/^\/(\d+)(?:\/|$)/],mt=e=>{let t=e.trim();if(!/^\d+$/.test(t))return;let n=t.replace(/^0+(?=\d)/,``);return n===`0`?void 0:n},ht=e=>{try{let t=new URL(e.trim());if(t.protocol!==`http:`&&t.protocol!==`https:`||!ft.has(t.hostname.toLowerCase()))return;for(let e of pt){let n=e.exec(t.pathname)?.[1];if(n!==void 0)return mt(n)}}catch{return}},K=e=>{for(let t of e.identifiers??[]){let e=t.scheme.trim().toLowerCase(),n=e===`projectgutenberg`?mt(t.value):e===`unknown`||e===`url`||e===`uri`?ht(t.value):void 0;if(n!==void 0)return{id:n,identifier:{value:t.value,scheme:t.scheme}}}},gt=e=>({key:F(e,`key`),title:F(e,`title`),subtitle:F(e,`subtitle`),author_name:L(e,`author_name`),first_publish_year:I(e,`first_publish_year`),language:L(e,`language`),subject:L(e,`subject`),number_of_pages_median:I(e,`number_of_pages_median`),cover_i:I(e,`cover_i`),id_project_gutenberg:L(e,`id_project_gutenberg`)}),_t=e=>P(e)?R(e,`docs`).map(gt):[],vt={afr:`af`,alb:`sq`,amh:`am`,ara:`ar`,arm:`hy`,asm:`as`,aze:`az`,baq:`eu`,bel:`be`,ben:`bn`,bos:`bs`,bul:`bg`,bur:`my`,cat:`ca`,ces:`cs`,chi:`zh`,cym:`cy`,cze:`cs`,dan:`da`,deu:`de`,dut:`nl`,ell:`el`,eng:`en`,epo:`eo`,est:`et`,eus:`eu`,fao:`fo`,fas:`fa`,fin:`fi`,fra:`fr`,fre:`fr`,geo:`ka`,ger:`de`,gle:`ga`,glg:`gl`,gre:`el`,guj:`gu`,heb:`he`,hin:`hi`,hrv:`hr`,hun:`hu`,hye:`hy`,ice:`is`,ind:`id`,isl:`is`,ita:`it`,jpn:`ja`,kan:`kn`,kat:`ka`,kaz:`kk`,khm:`km`,kor:`ko`,lao:`lo`,lat:`la`,lav:`lv`,lit:`lt`,ltz:`lb`,mac:`mk`,mal:`ml`,mar:`mr`,may:`ms`,mkd:`mk`,mlt:`mt`,mon:`mn`,msa:`ms`,mya:`my`,nep:`ne`,nld:`nl`,nno:`nn`,nob:`nb`,nor:`no`,ori:`or`,pan:`pa`,per:`fa`,pol:`pl`,por:`pt`,rom:`ro`,ron:`ro`,rum:`ro`,rus:`ru`,scc:`sr`,scr:`hr`,sin:`si`,slk:`sk`,slo:`sk`,slv:`sl`,snd:`sd`,spa:`es`,sqi:`sq`,srp:`sr`,swa:`sw`,swe:`sv`,tam:`ta`,tel:`te`,tgl:`tl`,tha:`th`,tur:`tr`,ukr:`uk`,urd:`ur`,uzb:`uz`,vie:`vi`,wel:`cy`,yid:`yi`,zho:`zh`},yt=new Set([`mul`,`und`,`zxx`,`sgn`]),bt=e=>{let t=e.trim().toLowerCase();if(t.length!==0&&!yt.has(t))return vt[t]??t},xt=25,St={key:`identifiers`,title:`title`,subtitle:`title`,author_name:`contributors`,first_publish_year:`publication.original.date`,language:`languages`,subject:`subjects`,number_of_pages_median:`numberOfPages`,cover_i:`cover`,id_project_gutenberg:`identifiers`},Ct=`OpenLibrary`,wt=`ProjectGutenberg`,q=e=>e.length>0?e:void 0,Tt=(e,t)=>{let n=e.title!==void 0&&e.subtitle!==void 0?`${e.title}: ${e.subtitle}`:e.title,r=q([...new Set((e.language??[]).map(bt).filter(e=>e!==void 0))]),i=[...t.isbn===void 0?[]:[{value:t.isbn,scheme:`ISBN`}],...t.matchedProjectGutenbergIdentifier===void 0?[]:[t.matchedProjectGutenbergIdentifier],...(e.id_project_gutenberg??[]).map(e=>({value:e,scheme:wt})),...e.key===void 0?[]:[{value:e.key,scheme:Ct}]];return N({title:n,cover:e.cover_i===void 0?void 0:{uri:`${t.coversBaseUrl}/b/id/${e.cover_i}-L.jpg`,mediaType:`image/jpeg`,confidence:`derived`},publication:e.first_publish_year===void 0?void 0:{original:{date:{year:e.first_publish_year}}},languages:r,subjects:q((e.subject??[]).slice(0,25)),contributors:q((e.author_name??[]).map(e=>({name:e,roles:[`author`]}))),numberOfPages:e.number_of_pages_median,identifiers:q(i)})},Et=`openLibrary`,Dt=`https://openlibrary.org`,Ot=`https://covers.openlibrary.org`,kt=[`key`,`title`,`subtitle`,`author_name`,`first_publish_year`,`language`,`subject`,`number_of_pages_median`,`cover_i`,`id_project_gutenberg`].join(`,`),At=e=>{let t=e.title?.trim();if(t===void 0||t.length===0)return;let n=e.authors?.find(e=>e.trim().length>0)?.trim();return{title:t,...n===void 0?{}:{author:n}}},jt=(e={})=>{let t=e.baseUrl??Dt,n=e.coversBaseUrl??Ot,r=async(n,r)=>{let i=new URL(`/search.json`,t);for(let[e,t]of Object.entries(n))i.searchParams.set(e,t);i.searchParams.set(`fields`,kt),i.searchParams.set(`limit`,String(r.limit));let a=await(e.fetch??globalThis.fetch)(i.toString(),{signal:r.signal,headers:{Accept:`application/json`,...e.userAgent===void 0?{}:{"User-Agent":e.userAgent}}});if(!a.ok)throw new j(a.status,`Open Library search failed with status ${a.status}`);return _t(await a.json())},i=(e,r={})=>e.map(e=>({metadata:Tt(e,{coversBaseUrl:n,isbn:r.isbn,matchedProjectGutenbergIdentifier:r.confirmedProjectGutenberg?.identifier}),id:e.key,url:e.key===void 0?void 0:`${t}${e.key}`,raw:e}));return{id:Et,name:`Open Library`,search:async(e,t)=>{let n=c(e.identifiers),a=K(e);if(n!==void 0){let e=await r({isbn:n},t);if(e.length>0)return i(e,{isbn:n})}if(a!==void 0){let e=await r({q:`id_project_gutenberg:${a.id}`},t);if(e.length>0)return i(e,{confirmedProjectGutenberg:a})}let o=At(e);if(o===void 0)return[];let s=await r(o,t);if(s.length>0)return i(s);let l=o.author===void 0?o.title:`${o.title} ${o.author}`;return i(await r({q:l},t))}}},J=e=>e.includes(`:`)?e.slice(e.lastIndexOf(`:`)+1):e,Mt=e=>e.type===`element`,Y=(e,t)=>e.children.filter(e=>Mt(e)&&J(e.name).toLowerCase()===t.toLowerCase()),X=(e,t)=>Y(e,t)[0],Z=e=>{let t=e?.val.trim();return t!==void 0&&t.length>0?t:void 0},Q=(e,t)=>{for(let[n,r]of Object.entries(e.attr)){if(J(n).toLowerCase()!==t.toLowerCase())continue;let e=r.trim();if(e.length>0)return e}},Nt=(e,t)=>Y(e,t).flatMap(e=>{let t=Z(X(X(e,`Description`)??e,`value`));return t===void 0?[]:[t]}),Pt=e=>{let t=Q(e,`about`),n=t===void 0?void 0:/(?:^|\/)ebooks\/(\d+)$/.exec(t)?.[1];if(n===void 0)return;let r=n.replace(/^0+(?=\d)/,``);return r===`0`?void 0:r},Ft=e=>{let t=[];for(let n of e.children){if(!Mt(n))continue;let e=n.name.toLowerCase()===`dcterms:creator`,r=n.name.toLowerCase().startsWith(`marcrel:`);if(!e&&!r)continue;let i=Z(X(X(n,`agent`)??n,`name`));i!==void 0&&t.push({name:i,role:e?`aut`:J(n.name).toLowerCase()})}return t},It=e=>Y(e,`subject`).flatMap(e=>{let t=X(e,`Description`),n=t===void 0?void 0:Q(X(t,`memberOf`)??t,`resource`),r=Z(t===void 0?void 0:X(t,`value`));return r!==void 0&&n?.endsWith(`/LCSH`)===!0?[r]:[]}),Lt=e=>{let t=Y(e,`hasFormat`).flatMap(e=>{let t=X(e,`file`);if(t===void 0)return[];let n=Q(t,`about`),r=Y(t,`format`).map(e=>Z(X(X(e,`Description`)??e,`value`))).find(e=>e?.startsWith(`image/`)===!0);return n===void 0||r===void 0||!/\.cover\.(?:medium|small)\.[a-z0-9]+(?:$|[?#])/i.test(n)?[]:[{uri:n,mediaType:r}]});return t.find(e=>/\.cover\.medium\./i.test(e.uri))??t[0]},$=e=>e.length>0?e:void 0,Rt=e=>{let t;try{t=new n.XmlDocument(e)}catch(e){let t=e instanceof Error?e.message:String(e);throw Error(`Project Gutenberg RDF is malformed: ${t}`,{cause:e})}if(J(t.name).toLowerCase()!==`rdf`)return;let r=X(t,`ebook`);if(r===void 0)return;let i=Pt(r);if(i===void 0)return;let a=[...new Set(Nt(r,`language`))],o=[...new Set(It(r))],s=[...new Set(Nt(r,`bookshelf`))],c=Ft(r);return{id:i,title:Z(X(r,`title`)),publisher:Z(X(r,`publisher`)),issued:Z(X(r,`issued`)),originalPublication:Z(X(r,`marc260`)),rights:Z(X(r,`rights`)),description:Z(X(r,`description`)),summary:Z(X(r,`marc520`)),languages:$(a),subjects:$(o),bookshelves:$(s),contributors:$(c),cover:Lt(r)}},zt=25,Bt={id:`identifiers`,title:`title`,publisher:`publication.edition.publisher`,issued:`publication.edition.date`,originalPublication:`publication.original`,rights:`rights`,description:`description`,summary:`description`,languages:`languages`,subjects:`subjects`,bookshelves:`subjects`,contributors:`contributors`,cover:`cover`},Vt={art:`artist`,aut:`author`,clr:`colorist`,ctb:`contributor`,edt:`editor`,ill:`illustrator`,nrt:`narrator`,trl:`translator`},Ht=e=>{let t=new Map;for(let n of e.contributors??[]){let e=n.name.trim().toLowerCase(),r=Vt[n.role.trim().toLowerCase()]??n.role,i=t.get(e);i===void 0?t.set(e,{name:n.name,roles:[r]}):i.roles.includes(r)||i.roles.push(r)}return t.size>0?[...t.values()]:void 0},Ut=e=>{if(e===void 0)return;let t=/^(\d{4})(?:-(\d{2})(?:-(\d{2}))?)?$/.exec(e.trim());if(t===null)return;let n=Number(t[1]),r=t[2]===void 0?void 0:Number(t[2]),i=t[3]===void 0?void 0:Number(t[3]);if(!(!Number.isInteger(n)||n<=0||r!==void 0&&(r<1||r>12)||i!==void 0&&(i<1||i>31)))return{year:n,...r===void 0?{}:{month:r},...i===void 0?{}:{day:i}}},Wt=(e,t)=>e.split(`$`).slice(1).flatMap(e=>e[0]?.toLowerCase()===t.toLowerCase()?[e.slice(1).trim()]:[]).filter(e=>e.length>0),Gt=e=>{if(e===void 0)return;let t=Wt(e,`b`),n=(t.length===1?t[0]:void 0)?.replace(/[\s,;:/]+$/u,``).trim(),r=Wt(e,`c`),i=[...new Set(r.flatMap(e=>[...e.matchAll(/\d{4}/g)].flatMap(e=>e[0]===void 0?[]:[Number(e[0])])))],a=N({date:i.length===1?{year:i[0]}:void 0,publisher:n!==void 0&&n.length>0&&!/^\[?s\.n\.?\]?$/i.test(n)?n:void 0});return a.date!==void 0||a.publisher!==void 0?a:void 0},Kt=(e,t)=>{try{let n=new URL(e,t);return n.protocol===`http:`||n.protocol===`https:`?n.toString():void 0}catch{return}},qt=e=>e.length>0?e:void 0,Jt=(e,t)=>{let n=[t.matchedIdentifier,{value:e.id,scheme:dt}].filter((e,t,n)=>n.findIndex(t=>t.value.trim().toLowerCase()===e.value.trim().toLowerCase()&&t.scheme.trim().toLowerCase()===e.scheme.trim().toLowerCase())===t),r=[...new Set([...e.subjects??[],...e.bookshelves??[]])].slice(0,25),i=e.cover===void 0?void 0:Kt(e.cover.uri,t.baseUrl),a=i===void 0?void 0:{uri:i,mediaType:e.cover?.mediaType,confidence:`derived`},o=N({date:Ut(e.issued),publisher:e.publisher}),s=N({original:Gt(e.originalPublication),edition:o.date!==void 0||o.publisher!==void 0?o:void 0});return N({title:e.title,publication:s.original!==void 0||s.edition!==void 0?s:void 0,description:e.summary??e.description,rights:e.rights,languages:qt([...new Set(e.languages??[])]),subjects:qt(r),contributors:Ht(e),identifiers:n,cover:a})},Yt=`projectGutenberg`,Xt=`https://www.gutenberg.org`,Zt=(e={})=>{let t=e.baseUrl??Xt;return{id:Yt,name:`Project Gutenberg`,search:async(n,r)=>{let i=K(n);if(i===void 0)return[];let a=new URL(`/cache/epub/${i.id}/pg${i.id}.rdf`,t),o=await(e.fetch??globalThis.fetch)(a.toString(),{signal:r.signal,headers:{Accept:`application/rdf+xml, application/xml;q=0.9`,...e.userAgent===void 0?{}:{"User-Agent":e.userAgent}}});if(o.status===404)return[];if(!o.ok)throw new j(o.status,`Project Gutenberg metadata lookup failed with status ${o.status}`);let s=Rt(await o.text());if(s===void 0||s.id!==i.id)throw Error(`Project Gutenberg RDF did not contain the requested eBook ${i.id}`);let c=new URL(`/ebooks/${i.id}`,t).toString();return[{id:s.id,url:c,raw:s,metadata:Jt(s,{baseUrl:t,matchedIdentifier:i.identifier})}]}}},Qt=e=>[e.title,e.series].some(e=>e!==void 0&&e.trim().length>0)||(e.identifiers??[]).some(e=>e.value.trim().length>0)||(e.authors??[]).some(e=>e.trim().length>0);exports.GOOGLE_BOOKS_IDENTIFIER_SCHEME=Me,exports.GOOGLE_BOOKS_MAX_SUBJECTS=Ve,exports.GOOGLE_BOOKS_PROVIDER_ID=ct,exports.METADATA_MATCH_WEIGHTS=D,exports.MetadataProviderResponseError=j,exports.OPEN_LIBRARY_IDENTIFIER_SCHEME=Ct,exports.OPEN_LIBRARY_MAX_SUBJECTS=xt,exports.OPEN_LIBRARY_PROVIDER_ID=Et,exports.PROJECT_GUTENBERG_IDENTIFIER_SCHEME=dt,exports.PROJECT_GUTENBERG_MAX_SUBJECTS=zt,exports.PROJECT_GUTENBERG_PROVIDER_ID=Yt,exports.createGoogleBooksProvider=ut,exports.createOpenLibraryProvider=jt,exports.createProjectGutenbergProvider=Zt,exports.fetchMetadata=we,exports.googleBooksCoverUrl=Je,exports.googleBooksLookupFromInput=B,exports.googleBooksVolumeInfoMetadataHomes=Ue,exports.googleBooksVolumeMetadataHomes=He,exports.googleBooksVolumeUrl=Ze,exports.hasSearchTerms=Qt,exports.marcLanguageToBcp47=bt,exports.metadataAuthors=u,exports.metadataInputFromResolvedArchive=Te,exports.normalizeForComparison=g,exports.openLibraryMetadataHomes=St,exports.parseGoogleBooksVolume=H,exports.parseGoogleBooksVolumesResponse=Be,exports.parseOpenLibrarySearchResponse=_t,exports.parseProjectGutenbergRdf=Rt,exports.personNameSimilarity=E,exports.projectGutenbergLookupFromInput=K,exports.projectGutenbergMetadataHomes=Bt,exports.resolveGoogleBooksVolume=Xe,exports.resolveOpenLibraryDoc=Tt,exports.resolveProjectGutenbergRecord=Jt,exports.responseErrorStatus=M,exports.retryWithBackoff=je,exports.scoreMetadataCandidate=ve,exports.textSimilarity=v,exports.titleSimilarity=ae,exports.toIsbn13=p;
1
+ Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});let e=require("@prose-reader/archive-reader"),t=require("@prose-reader/shared"),n=require("xmldoc");var r=(e,t)=>t.has(e.scheme.trim().toLowerCase()),i=(e,t,n)=>{for(let i of e??[]){if(!r(i,t))continue;let e=n(i.value);if(e!==void 0)return e}},a=new Set([`isbn`,`gtin`]),o=new Set([`gtin`,`isbn`]),s=t=>{let n=(0,e.normalizeIsbn)(t);return n!==void 0&&(n.length===10||/^97[89]/.test(n))?n:void 0},c=e=>i(e,a,s),l=t=>i(t,o,e.normalizeGtin),u=e=>{let t=e.contributors??[],n=t.filter(e=>e.roles.includes(`author`)),r=(n.length>0?n:t).map(e=>e.name.trim()).filter(e=>e.length>0);return[...new Set(r)]},d=/^\d{13}$/,f=/^\d{9}[\dX]$/,p=t=>{let n=(0,e.normalizeIsbn)(t);if(n===void 0)return;if(d.test(n))return n;if(!f.test(n))return;let r=`978${n.slice(0,9)}`,i=0;for(let e=0;e<r.length;e++){let t=r.charCodeAt(e)-48;i+=e%2==0?t:t*3}return`${r}${(10-i%10)%10}`},m=/[\u0300-\u036f]/g,h=/[^\p{L}\p{N}]+/gu,g=e=>e.normalize(`NFD`).replace(m,``).toLowerCase().replace(h,` `).trim(),_=e=>{let t=new Map;for(let n=0;n<e.length-1;n++){let r=e.slice(n,n+2);t.set(r,(t.get(r)??0)+1)}return t},v=(e,t)=>{let n=g(e).replaceAll(` `,``),r=g(t).replaceAll(` `,``);if(n.length===0||r.length===0)return 0;if(n===r)return 1;if(n.length<2||r.length<2)return 0;let i=_(n),a=0;for(let[e,t]of _(r))a+=Math.min(t,i.get(e)??0);return 2*a/(n.length-1+(r.length-1))},y=/\s*[:;]\s*|\s+[-–—]\s+/,b=e=>{let[t=``,...n]=e.split(y),r=t.trim(),i=n.join(` `).trim();return r.length===0?{main:e,hasSubtitle:!1}:{main:r,hasSubtitle:i.length>0}},x=.9,S=[`volume`,`part`,`book`],C=/\b(volumes?|vols?|parts?|books?)\s+([\p{L}\p{N}]+)\b/gu,w={one:1,first:1,two:2,second:2,three:3,third:3,four:4,fourth:4,five:5,fifth:5,six:6,sixth:6,seven:7,seventh:7,eight:8,eighth:8,nine:9,ninth:9,ten:10,tenth:10,eleven:11,eleventh:11,twelve:12,twelfth:12},T={i:1,v:5,x:10,l:50,c:100,d:500,m:1e3},E=e=>{if(!/^m{0,3}(cm|cd|d?c{0,3})(xc|xl|l?x{0,3})(ix|iv|v?i{0,3})$/i.test(e))return;let t=0,n=0;for(let r of[...e.toLowerCase()].reverse()){let e=T[r];if(e===void 0)return;e<n?t-=e:(t+=e,n=e)}return t>0?t:void 0},ee=e=>/^\d+$/.test(e)?Number.parseInt(e,10):w[e]??E(e),te=e=>{if(e.startsWith(`vol`))return`volume`;if(e.startsWith(`part`))return`part`;if(e.startsWith(`book`))return`book`},ne=e=>{let t=new Map;for(let n of g(e).matchAll(C)){let e=n[1]===void 0?void 0:te(n[1]),r=n[2]===void 0?void 0:ee(n[2]);if(e===void 0||r===void 0)continue;let i=t.get(e)??new Set;i.add(r),t.set(e,i)}return t},re=(e,t)=>{let n=ne(e),r=ne(t);for(let e of S){let t=n.get(e),i=r.get(e);if(!(t===void 0||i===void 0)&&[...t].every(e=>!i.has(e)))return!0}return!1},ie=(e,t)=>{if(re(e,t))return 0;let n=v(e,t),r=b(e),i=b(t);return r.hasSubtitle===i.hasSubtitle?n:Math.max(n,v(r.main,i.main)*x)},D=e=>g(e).split(` `).filter(e=>e.length>0).sort().join(` `),O=(e,t)=>v(D(e),D(t)),ae={isbn:1,gtin:1,identifiers:.6,title:.8,authors:.5,series:.3,publishedYear:.2,publisher:.15,languages:.15,numberOfPages:.15},oe=new Set([`isbn`,`gtin`]),k=e=>{let t=e?.trim();return t!==void 0&&t.length>0?t:void 0},se=(e,t)=>{let n=k(e.value)?.toLowerCase();return n!==void 0&&n===k(t.value)?.toLowerCase()},A=e=>e.scheme.trim().toLowerCase()===`unknown`?void 0:k(e.scheme)?.toLowerCase(),ce=e=>`${e.scheme}:${e.value}`,le=e=>{let t=e.scheme.trim().toLowerCase();return t===`isbn`||t===`gtin`},ue=(e,t)=>{if(!se(e,t))return!1;let n=A(e),r=A(t);return n===void 0||r===void 0||n===r},de=(e,t)=>{if(!se(e,t))return!1;let n=A(e),r=A(t);return n!==void 0&&n===r},fe=e=>e.trim().toLowerCase().split(`-`)[0]??``,pe=(e,t)=>{let n=Math.abs(e-t);return n===0?1:n===1?.6:n<=3?.3:0},me=(e,t)=>{let n=Math.max(e,t);return n<=0?0:Math.max(0,1-Math.abs(e-t)/n*2)},he=(e,t,n)=>e.reduce((e,r)=>t.reduce((e,t)=>Math.max(e,n(r,t)),e),0),ge=(e,t,n=v)=>{let r=k(e);if(r===void 0)return;let i;for(let e of t){let t=k(e);if(t===void 0)continue;let a={score:n(r,t),query:r,candidate:t};(i===void 0||a.score>i.score)&&(i=a)}return i},_e=(e,t)=>{if(e===void 0)return;let n;for(let r of t){if(r===void 0)continue;let t={score:pe(e,r),query:String(e),candidate:String(r)};(n===void 0||t.score>n.score)&&(n=t)}return n},ve=(t,n)=>{let r=[],i=(e,t)=>{t!==void 0&&r.push({field:e,weight:ae[e],score:Math.min(1,Math.max(0,t.score)),query:t.query,candidate:t.candidate})},a=(e,t,n,r=v)=>{let a=k(t),o=k(n);a===void 0||o===void 0||i(e,{score:r(a,o),query:a,candidate:o})},o=c(t.identifiers),s=c(n.identifiers),d=o===void 0?void 0:p(o),f=s===void 0?void 0:p(s),m=o!==void 0&&s!==void 0&&d!==void 0&&f!==void 0;m&&i(`isbn`,{score:+(d===f),query:o,candidate:s});let h=l(t.identifiers),g=l(n.identifiers);!m&&h!==void 0&&g!==void 0&&i(`gtin`,{score:+(h===g),query:h,candidate:g});let _=(t.identifiers??[]).filter(e=>!le(e)),y=(n.identifiers??[]).filter(e=>!le(e)),b=_.some(e=>y.some(t=>de(e,t)));_.length>0&&y.length>0&&i(`identifiers`,{score:+!!_.some(e=>y.some(t=>ue(e,t))),query:_.map(ce).join(`, `),candidate:y.map(ce).join(`, `)}),a(`title`,t.title,(0,e.mainTitle)(n),ie),i(`publisher`,ge(t.publisher,[n.publication?.original?.publisher,n.publication?.edition?.publisher])),a(`series`,t.series,n.belongsTo?.series?.[0]?.name);let x=u(n),S=(t.authors??[]).flatMap(e=>{let t=k(e);return t===void 0?[]:[t]});S.length>0&&x.length>0&&i(`authors`,{score:he(S,x,O),query:S.join(`, `),candidate:x.join(`, `)}),i(`publishedYear`,_e(t.publishedYear,[n.publication?.original?.date?.year,n.publication?.edition?.date?.year]));let C=t.languages??[],w=n.languages??[];if(C.length>0&&w.length>0){let e=new Set(w.map(fe));i(`languages`,{score:+!!C.some(t=>e.has(fe(t))),query:C.join(`, `),candidate:w.join(`, `)})}t.numberOfPages!==void 0&&n.numberOfPages!==void 0&&i(`numberOfPages`,{score:me(t.numberOfPages,n.numberOfPages),query:String(t.numberOfPages),candidate:String(n.numberOfPages)});let T=r.filter(e=>oe.has(e.field));if(T.some(e=>e.score===0))return{score:0,signals:r};if(b||T.some(e=>e.score===1))return{score:1,signals:r};let E=r.reduce((e,t)=>e+t.weight,0);return E===0?{score:0,signals:r}:{score:r.reduce((e,t)=>e+t.score*t.weight,0)/E,signals:r}},j=class extends Error{status;constructor(e,t){super(t??`Provider responded with status ${e}`),this.name=`MetadataProviderResponseError`,this.status=e}},M=e=>{if(typeof e!=`object`||!e||!(`status`in e))return;let{status:t}=e;if(!(typeof t!=`number`||!Number.isInteger(t)))return t>=100&&t<=599?t:void 0},ye=t.Report.namespace(`@prose-reader/metadata-fetcher`,void 0,{color:`#b06642`}),N=e=>{let t=Object.entries(e).filter(([,e])=>e!==void 0);return Object.fromEntries(t)},be=5,xe=.5,Se=5,Ce=({candidate:e,providerId:t,score:n,signals:r,accepted:i,includeRaw:a})=>N({providerId:t,score:n,signals:r,accepted:i,metadata:e.metadata,id:e.id,url:e.url,raw:a?e.raw:void 0}),we=async(e,t)=>{let n=t.limit??be,r=t.minScore??xe,i=t.includeRaw===!0,a=await Promise.all(t.providers.map(async r=>{try{return{provider:r,candidates:await r.search(e,{limit:n,signal:t.signal}),failure:void 0}}catch(e){if(t.signal?.aborted===!0)throw e;return ye.error(`fetchMetadata: provider "${r.id}" failed`,e),{provider:r,candidates:void 0,failure:N({id:r.id,status:M(e)})}}})),o=a.flatMap(e=>e.failure===void 0?[]:[e.failure]),s={},c=[];for(let{provider:t,candidates:o}of a){if(o===void 0)continue;let a=o.map(n=>{let{score:a,signals:o}=ve(e,n.metadata);return Ce({candidate:n,providerId:t.id,score:a,signals:o,accepted:a>=r,includeRaw:i})}).sort((e,t)=>t.score-e.score).slice(0,n);s[t.id]!==void 0&&ye.warn(`fetchMetadata: several providers share the id "${t.id}"`),s[t.id]={provider:{id:t.id,name:t.name},matches:a},c.push(...a)}return{version:Se,matches:[...c].sort((e,t)=>t.score-e.score),sources:s,failedProviders:o}},Te=t=>{let{metadata:n}=t,r=u(n),i=n.identifiers?.map(({value:e,scheme:t})=>({value:e,scheme:t}));return N({title:(0,e.mainTitle)(n),authors:r.length>0?r:void 0,identifiers:i!==void 0&&i.length>0?i:void 0,series:n.belongsTo?.series?.[0]?.name,publisher:n.publication?.edition?.publisher??n.publication?.original?.publisher,publishedYear:n.publication?.edition?.date?.year??n.publication?.original?.date?.year,languages:n.languages,numberOfPages:n.numberOfPages})},P=e=>typeof e==`object`&&!!e&&!Array.isArray(e),F=(e,t)=>{let n=e[t];if(typeof n!=`string`)return;let r=n.trim();return r.length>0?r:void 0},I=(e,t)=>{let n=e[t];return typeof n==`number`&&Number.isFinite(n)?n:void 0},L=(e,t)=>{let n=e[t];if(!Array.isArray(n))return;let r=n.filter(e=>typeof e==`string`).map(e=>e.trim()).filter(e=>e.length>0);return r.length>0?r:void 0},R=(e,t)=>{let n=e[t];return Array.isArray(n)?n.filter(P):[]},Ee=e=>e.reason??new DOMException(`The operation was aborted`,`AbortError`),De=e=>{if(e?.aborted===!0)throw Ee(e)},Oe=(e,t)=>(De(t),new Promise((n,r)=>{let i=()=>{clearTimeout(a),r(t===void 0?void 0:Ee(t))},a=setTimeout(()=>{t?.removeEventListener(`abort`,i),n()},e);t?.addEventListener(`abort`,i,{once:!0})})),ke=e=>{if(!Number.isInteger(e.attempts)||e.attempts<1)throw RangeError(`attempts must be a positive integer`);if(!Number.isFinite(e.initialDelayMs)||e.initialDelayMs<0)throw RangeError(`initialDelayMs must be a non-negative finite number`);if(e.maxDelayMs!==void 0&&(!Number.isFinite(e.maxDelayMs)||e.maxDelayMs<0))throw RangeError(`maxDelayMs must be a non-negative finite number`)},Ae=(e,t)=>{let n=t.initialDelayMs*2**(e-1),r=t.jitter===!1?n:n*(1+Math.random());return Math.min(r,t.maxDelayMs??2**53-1)},je=async(e,t)=>{ke(t);for(let n=1;n<=t.attempts;n+=1){De(t.signal);try{return await e(n)}catch(e){if(n===t.attempts||t.signal?.aborted===!0||!t.shouldRetry(e,n))throw e;await Oe(Ae(n,t),t.signal)}}throw Error(`retryWithBackoff reached an invalid state`)},Me=`GoogleBooks`,Ne=new Set([`books.googleapis.com`,`www.googleapis.com`]),Pe=/^books\.google\.(?:com|[a-z]{2}|com\.[a-z]{2}|co\.[a-z]{2})$/i,z=e=>{let t=e.trim();return/^[a-z0-9_-]+$/i.test(t)?t:void 0},Fe=e=>{try{let t=new URL(e.trim());if(t.protocol!==`http:`&&t.protocol!==`https:`)return;let n=t.hostname.toLowerCase();if(Pe.test(n))return z(t.searchParams.get(`id`)??``);if(Ne.has(n)){let e=/^\/books\/v1\/volumes\/([^/]+)\/?$/i.exec(t.pathname)?.[1];return e===void 0?void 0:z(decodeURIComponent(e))}}catch{return}},B=e=>{for(let t of e.identifiers??[]){let e=t.scheme.trim().toLowerCase(),n=e===`googlebooks`?z(t.value):e===`unknown`||e===`url`||e===`uri`?Fe(t.value):void 0;if(n!==void 0)return{id:n,identifier:{value:t.value,scheme:t.scheme}}}},V=(e,t)=>{let n=e[t];return P(n)?n:void 0},Ie=e=>{let t=R(e,`industryIdentifiers`).flatMap(e=>{let t=F(e,`identifier`);return t===void 0?[]:[N({type:F(e,`type`),identifier:t})]});return t.length>0?t:void 0},Le=e=>{let t=V(e,`imageLinks`);if(t===void 0)return;let n=N({smallThumbnail:F(t,`smallThumbnail`),thumbnail:F(t,`thumbnail`),small:F(t,`small`),medium:F(t,`medium`),large:F(t,`large`),extraLarge:F(t,`extraLarge`)});return Object.keys(n).length>0?n:void 0},Re=e=>{let t=V(e,`seriesInfo`);if(t===void 0)return;let n=F(t,`bookDisplayNumber`);return n===void 0?void 0:{bookDisplayNumber:n}},ze=e=>{let t=V(e,`volumeInfo`);if(t===void 0)return;let n=N({title:F(t,`title`),subtitle:F(t,`subtitle`),authors:L(t,`authors`),publisher:F(t,`publisher`),publishedDate:F(t,`publishedDate`),description:F(t,`description`),industryIdentifiers:Ie(t),pageCount:I(t,`pageCount`),categories:L(t,`categories`),language:F(t,`language`),imageLinks:Le(t),infoLink:F(t,`infoLink`),canonicalVolumeLink:F(t,`canonicalVolumeLink`),seriesInfo:Re(t)});return Object.keys(n).length>0?n:void 0},H=e=>{if(!P(e))return;let t=N({id:F(e,`id`),volumeInfo:ze(e)});return Object.keys(t).length>0?t:void 0},Be=e=>P(e)?R(e,`items`).flatMap(e=>{let t=H(e);return t===void 0?[]:[t]}):[],Ve=25,U=e=>e.length>0?e:void 0,He=e=>e===`ISBN_10`||e===`ISBN_13`?`ISBN`:e??`Unknown`,Ue=e=>U(e.filter((e,t,n)=>n.findIndex(t=>t.value.trim().toLowerCase()===e.value.trim().toLowerCase()&&t.scheme.trim().toLowerCase()===e.scheme.trim().toLowerCase())===t)),We=e=>e.map(e=>N({value:e.identifier,scheme:He(e.type)})),Ge=e=>{let t=e.title!==void 0&&e.subtitle!==void 0?`${e.title}: ${e.subtitle}`:e.title,n=e.seriesInfo?.bookDisplayNumber,r=t!==void 0&&(/\bvol(?:ume)?\.?\s*\S+/i.test(t)||/\b(?:book|part)(?:\s*#\s*|\s+)(?:\d+(?:[.-]\d+)*|[ivxlcdm]+)\b/i.test(t));return t===void 0||n===void 0||r?t:`${t} Vol ${n}`},W=e=>{if(e!==void 0)try{let t=new URL(e);return t.protocol!==`http:`&&t.protocol!==`https:`?void 0:(t.protocol===`http:`&&(t.protocol=`https:`),t.toString())}catch{return}},Ke=e=>{if(e===void 0)return;let t=[e.extraLarge,e.large,e.medium,e.small,e.thumbnail,e.smallThumbnail];for(let e of t){let t=W(e);if(t!==void 0)return t}},qe=e=>U(e.map(e=>({name:e,roles:[`author`]}))),Je=(t,n={})=>{let r=t.volumeInfo??{},i=We(r.industryIdentifiers??[]),a=Ue([...n.matchedIdentifier===void 0?[]:[n.matchedIdentifier],...n.matchedIsbn===void 0?[]:[{value:n.matchedIsbn,scheme:`ISBN`}],...t.id===void 0?[]:[{value:t.id,scheme:Me}],...i]),o=N({date:(0,e.parseW3cDtfDate)(r.publishedDate),publisher:r.publisher}),s=Ke(r.imageLinks),c=s===void 0?void 0:{uri:s,confidence:`derived`},l=[...new Set(r.categories??[])].slice(0,25),u=Ge(r);return N({titles:u===void 0?void 0:[{value:u}],description:r.description,publication:o.date!==void 0||o.publisher!==void 0?{edition:o}:void 0,languages:r.language===void 0?void 0:[r.language],subjects:U(l),contributors:qe(r.authors??[]),numberOfPages:r.pageCount,identifiers:a,cover:c})},Ye=e=>W(e.volumeInfo?.canonicalVolumeLink)??W(e.volumeInfo?.infoLink)??(e.id===void 0?void 0:`https://books.google.com/books?id=${encodeURIComponent(e.id)}`),Xe=40,Ze=3,Qe=1e3,$e=3e3,et=new Set([500,502,503,504]),tt=e=>`"${e.replace(/["\\]+/g,` `).replace(/\s+/g,` `).trim()}"`,nt=e=>{let t=e.title?.trim();if(t===void 0||t.length===0)return;let n=e.authors?.find(e=>e.trim().length>0)?.trim();return{title:t,...n===void 0?{}:{author:n}}},rt=e=>{let t=H(e);return t===void 0?void 0:{volume:t,raw:e}},it=e=>P(e)?R(e,`items`).flatMap(e=>{let t=rt(e);return t===void 0?[]:[t]}):[],G=(e,t={})=>e.map(({volume:e,raw:n})=>({metadata:Je(e,t),id:e.id,url:Ye(e),raw:n})),at=e=>{let t=`${e.baseUrl.replace(/\/+$/,``)}/volumes`,n=async(t,n,r=!1)=>(t.searchParams.set(`key`,e.apiKey),je(async()=>{let i=await e.fetch(t.toString(),{signal:n.signal,headers:{Accept:`application/json`}});if(!(r&&i.status===404)){if(!i.ok)throw new j(i.status,`Google Books lookup failed with status ${i.status}`);return i}},{attempts:Ze,initialDelayMs:Qe,maxDelayMs:$e,signal:n.signal,shouldRetry:e=>{let t=M(e);return t===void 0||et.has(t)}})),r=async(e,r)=>{let i=await n(new URL(`${t}/${encodeURIComponent(e)}`),r,!0);if(i===void 0)return;let a=rt(await i.json());if(a?.volume.id!==e)throw Error(`Google Books response did not contain the requested volume ${e}`);return a},i=async(e,r)=>{if(r.limit<=0)return[];let i=new URL(t);i.searchParams.set(`q`,e),i.searchParams.set(`maxResults`,String(Math.min(Math.ceil(r.limit),Xe))),i.searchParams.set(`orderBy`,`relevance`),i.searchParams.set(`printType`,`books`);let a=await n(i,r);return a===void 0?[]:it(await a.json())};return async(e,t)=>{let n=B(e);if(n!==void 0){let e=await r(n.id,t);if(e!==void 0)return G([e],{matchedIdentifier:n.identifier})}let a=c(e.identifiers);if(a!==void 0){let e=await i(`isbn:${a}`,t);if(e.length>0)return G(e,{matchedIsbn:a})}let o=nt(e);if(o===void 0)return[];let s=`intitle:${tt(o.title)}`,l=o.author===void 0?s:`${s} inauthor:${tt(o.author)}`,u=await i(l,t);return u.length>0||o.author===void 0?G(u):G(await i(s,t))}},ot=`googleBooks`,st=`https://www.googleapis.com/books/v1`,ct=e=>{let t=e.apiKey.trim();if(t.length===0)throw Error(`createGoogleBooksProvider requires a non-empty apiKey`);return{id:ot,name:`Google Books`,search:at({apiKey:t,baseUrl:e.baseUrl??st,fetch:e.fetch??globalThis.fetch})}},lt=`ProjectGutenberg`,ut=new Set([`gutenberg.org`,`www.gutenberg.org`]),dt=[/^\/ebooks\/(\d+)(?:[./]|$)/i,/^\/files\/(\d+)(?:\/|$)/i,/^\/cache\/epub\/(\d+)(?:\/|$)/i,/^\/(\d+)(?:\/|$)/],ft=e=>{let t=e.trim();if(!/^\d+$/.test(t))return;let n=t.replace(/^0+(?=\d)/,``);return n===`0`?void 0:n},pt=e=>{try{let t=new URL(e.trim());if(t.protocol!==`http:`&&t.protocol!==`https:`||!ut.has(t.hostname.toLowerCase()))return;for(let e of dt){let n=e.exec(t.pathname)?.[1];if(n!==void 0)return ft(n)}}catch{return}},K=e=>{for(let t of e.identifiers??[]){let e=t.scheme.trim().toLowerCase(),n=e===`projectgutenberg`?ft(t.value):e===`unknown`||e===`url`||e===`uri`?pt(t.value):void 0;if(n!==void 0)return{id:n,identifier:{value:t.value,scheme:t.scheme}}}},mt=e=>({key:F(e,`key`),title:F(e,`title`),subtitle:F(e,`subtitle`),author_name:L(e,`author_name`),first_publish_year:I(e,`first_publish_year`),language:L(e,`language`),subject:L(e,`subject`),number_of_pages_median:I(e,`number_of_pages_median`),cover_i:I(e,`cover_i`),id_project_gutenberg:L(e,`id_project_gutenberg`)}),ht=e=>P(e)?R(e,`docs`).map(mt):[],gt={afr:`af`,alb:`sq`,amh:`am`,ara:`ar`,arm:`hy`,asm:`as`,aze:`az`,baq:`eu`,bel:`be`,ben:`bn`,bos:`bs`,bul:`bg`,bur:`my`,cat:`ca`,ces:`cs`,chi:`zh`,cym:`cy`,cze:`cs`,dan:`da`,deu:`de`,dut:`nl`,ell:`el`,eng:`en`,epo:`eo`,est:`et`,eus:`eu`,fao:`fo`,fas:`fa`,fin:`fi`,fra:`fr`,fre:`fr`,geo:`ka`,ger:`de`,gle:`ga`,glg:`gl`,gre:`el`,guj:`gu`,heb:`he`,hin:`hi`,hrv:`hr`,hun:`hu`,hye:`hy`,ice:`is`,ind:`id`,isl:`is`,ita:`it`,jpn:`ja`,kan:`kn`,kat:`ka`,kaz:`kk`,khm:`km`,kor:`ko`,lao:`lo`,lat:`la`,lav:`lv`,lit:`lt`,ltz:`lb`,mac:`mk`,mal:`ml`,mar:`mr`,may:`ms`,mkd:`mk`,mlt:`mt`,mon:`mn`,msa:`ms`,mya:`my`,nep:`ne`,nld:`nl`,nno:`nn`,nob:`nb`,nor:`no`,ori:`or`,pan:`pa`,per:`fa`,pol:`pl`,por:`pt`,rom:`ro`,ron:`ro`,rum:`ro`,rus:`ru`,scc:`sr`,scr:`hr`,sin:`si`,slk:`sk`,slo:`sk`,slv:`sl`,snd:`sd`,spa:`es`,sqi:`sq`,srp:`sr`,swa:`sw`,swe:`sv`,tam:`ta`,tel:`te`,tgl:`tl`,tha:`th`,tur:`tr`,ukr:`uk`,urd:`ur`,uzb:`uz`,vie:`vi`,wel:`cy`,yid:`yi`,zho:`zh`},_t=new Set([`mul`,`und`,`zxx`,`sgn`]),vt=e=>{let t=e.trim().toLowerCase();if(t.length!==0&&!_t.has(t))return gt[t]??t},yt=25,bt=`OpenLibrary`,xt=`ProjectGutenberg`,q=e=>e.length>0?e:void 0,St=(e,t)=>{let n=e.title!==void 0&&e.subtitle!==void 0?`${e.title}: ${e.subtitle}`:e.title,r=q([...new Set((e.language??[]).map(vt).filter(e=>e!==void 0))]),i=[...t.isbn===void 0?[]:[{value:t.isbn,scheme:`ISBN`}],...t.matchedProjectGutenbergIdentifier===void 0?[]:[t.matchedProjectGutenbergIdentifier],...(e.id_project_gutenberg??[]).map(e=>({value:e,scheme:xt})),...e.key===void 0?[]:[{value:e.key,scheme:bt}]];return N({titles:n===void 0?void 0:[{value:n}],cover:e.cover_i===void 0?void 0:{uri:`${t.coversBaseUrl}/b/id/${e.cover_i}-L.jpg`,mediaType:`image/jpeg`,confidence:`derived`},publication:e.first_publish_year===void 0?void 0:{original:{date:{year:e.first_publish_year}}},languages:r,subjects:q((e.subject??[]).slice(0,25)),contributors:q((e.author_name??[]).map(e=>({name:e,roles:[`author`]}))),numberOfPages:e.number_of_pages_median,identifiers:q(i)})},Ct=`openLibrary`,wt=`https://openlibrary.org`,Tt=`https://covers.openlibrary.org`,Et=[`key`,`title`,`subtitle`,`author_name`,`first_publish_year`,`language`,`subject`,`number_of_pages_median`,`cover_i`,`id_project_gutenberg`].join(`,`),Dt=e=>{let t=e.title?.trim();if(t===void 0||t.length===0)return;let n=e.authors?.find(e=>e.trim().length>0)?.trim();return{title:t,...n===void 0?{}:{author:n}}},Ot=(e={})=>{let t=e.baseUrl??wt,n=e.coversBaseUrl??Tt,r=async(n,r)=>{let i=new URL(`/search.json`,t);for(let[e,t]of Object.entries(n))i.searchParams.set(e,t);i.searchParams.set(`fields`,Et),i.searchParams.set(`limit`,String(r.limit));let a=await(e.fetch??globalThis.fetch)(i.toString(),{signal:r.signal,headers:{Accept:`application/json`,...e.userAgent===void 0?{}:{"User-Agent":e.userAgent}}});if(!a.ok)throw new j(a.status,`Open Library search failed with status ${a.status}`);return ht(await a.json())},i=(e,r={})=>e.map(e=>({metadata:St(e,{coversBaseUrl:n,isbn:r.isbn,matchedProjectGutenbergIdentifier:r.confirmedProjectGutenberg?.identifier}),id:e.key,url:e.key===void 0?void 0:`${t}${e.key}`,raw:e}));return{id:Ct,name:`Open Library`,search:async(e,t)=>{let n=c(e.identifiers),a=K(e);if(n!==void 0){let e=await r({isbn:n},t);if(e.length>0)return i(e,{isbn:n})}if(a!==void 0){let e=await r({q:`id_project_gutenberg:${a.id}`},t);if(e.length>0)return i(e,{confirmedProjectGutenberg:a})}let o=Dt(e);if(o===void 0)return[];let s=await r(o,t);if(s.length>0)return i(s);let l=o.author===void 0?o.title:`${o.title} ${o.author}`;return i(await r({q:l},t))}}},J=e=>e.includes(`:`)?e.slice(e.lastIndexOf(`:`)+1):e,kt=e=>e.type===`element`,Y=(e,t)=>e.children.filter(e=>kt(e)&&J(e.name).toLowerCase()===t.toLowerCase()),X=(e,t)=>Y(e,t)[0],Z=e=>{let t=e?.val.trim();return t!==void 0&&t.length>0?t:void 0},Q=(e,t)=>{for(let[n,r]of Object.entries(e.attr)){if(J(n).toLowerCase()!==t.toLowerCase())continue;let e=r.trim();if(e.length>0)return e}},At=(e,t)=>Y(e,t).flatMap(e=>{let t=Z(X(X(e,`Description`)??e,`value`));return t===void 0?[]:[t]}),jt=e=>{let t=Q(e,`about`),n=t===void 0?void 0:/(?:^|\/)ebooks\/(\d+)$/.exec(t)?.[1];if(n===void 0)return;let r=n.replace(/^0+(?=\d)/,``);return r===`0`?void 0:r},Mt=e=>{let t=[];for(let n of e.children){if(!kt(n))continue;let e=n.name.toLowerCase()===`dcterms:creator`,r=n.name.toLowerCase().startsWith(`marcrel:`);if(!e&&!r)continue;let i=Z(X(X(n,`agent`)??n,`name`));i!==void 0&&t.push({name:i,role:e?`aut`:J(n.name).toLowerCase()})}return t},Nt=e=>Y(e,`subject`).flatMap(e=>{let t=X(e,`Description`),n=t===void 0?void 0:Q(X(t,`memberOf`)??t,`resource`),r=Z(t===void 0?void 0:X(t,`value`));return r!==void 0&&n?.endsWith(`/LCSH`)===!0?[r]:[]}),Pt=e=>{let t=Y(e,`hasFormat`).flatMap(e=>{let t=X(e,`file`);if(t===void 0)return[];let n=Q(t,`about`),r=Y(t,`format`).map(e=>Z(X(X(e,`Description`)??e,`value`))).find(e=>e?.startsWith(`image/`)===!0);return n===void 0||r===void 0||!/\.cover\.(?:medium|small)\.[a-z0-9]+(?:$|[?#])/i.test(n)?[]:[{uri:n,mediaType:r}]});return t.find(e=>/\.cover\.medium\./i.test(e.uri))??t[0]},$=e=>e.length>0?e:void 0,Ft=e=>{let t;try{t=new n.XmlDocument(e)}catch(e){let t=e instanceof Error?e.message:String(e);throw Error(`Project Gutenberg RDF is malformed: ${t}`,{cause:e})}if(J(t.name).toLowerCase()!==`rdf`)return;let r=X(t,`ebook`);if(r===void 0)return;let i=jt(r);if(i===void 0)return;let a=[...new Set(At(r,`language`))],o=[...new Set(Nt(r))],s=[...new Set(At(r,`bookshelf`))],c=Mt(r);return{id:i,title:Z(X(r,`title`)),publisher:Z(X(r,`publisher`)),issued:Z(X(r,`issued`)),originalPublication:Z(X(r,`marc260`)),rights:Z(X(r,`rights`)),description:Z(X(r,`description`)),summary:Z(X(r,`marc520`)),languages:$(a),subjects:$(o),bookshelves:$(s),contributors:$(c),cover:Pt(r)}},It=25,Lt={art:`artist`,aut:`author`,clr:`colorist`,ctb:`contributor`,edt:`editor`,ill:`illustrator`,nrt:`narrator`,trl:`translator`},Rt=e=>{let t=new Map;for(let n of e.contributors??[]){let e=n.name.trim().toLowerCase(),r=Lt[n.role.trim().toLowerCase()]??n.role,i=t.get(e);i===void 0?t.set(e,{name:n.name,roles:[r]}):i.roles.includes(r)||i.roles.push(r)}return t.size>0?[...t.values()]:void 0},zt=e=>{if(e===void 0)return;let t=/^(\d{4})(?:-(\d{2})(?:-(\d{2}))?)?$/.exec(e.trim());if(t===null)return;let n=Number(t[1]),r=t[2]===void 0?void 0:Number(t[2]),i=t[3]===void 0?void 0:Number(t[3]);if(!(!Number.isInteger(n)||n<=0||r!==void 0&&(r<1||r>12)||i!==void 0&&(i<1||i>31)))return{year:n,...r===void 0?{}:{month:r},...i===void 0?{}:{day:i}}},Bt=(e,t)=>e.split(`$`).slice(1).flatMap(e=>e[0]?.toLowerCase()===t.toLowerCase()?[e.slice(1).trim()]:[]).filter(e=>e.length>0),Vt=e=>{if(e===void 0)return;let t=Bt(e,`b`),n=(t.length===1?t[0]:void 0)?.replace(/[\s,;:/]+$/u,``).trim(),r=Bt(e,`c`),i=[...new Set(r.flatMap(e=>[...e.matchAll(/\d{4}/g)].flatMap(e=>e[0]===void 0?[]:[Number(e[0])])))],a=N({date:i.length===1?{year:i[0]}:void 0,publisher:n!==void 0&&n.length>0&&!/^\[?s\.n\.?\]?$/i.test(n)?n:void 0});return a.date!==void 0||a.publisher!==void 0?a:void 0},Ht=(e,t)=>{try{let n=new URL(e,t);return n.protocol===`http:`||n.protocol===`https:`?n.toString():void 0}catch{return}},Ut=e=>e.length>0?e:void 0,Wt=(e,t)=>{let n=[t.matchedIdentifier,{value:e.id,scheme:lt}].filter((e,t,n)=>n.findIndex(t=>t.value.trim().toLowerCase()===e.value.trim().toLowerCase()&&t.scheme.trim().toLowerCase()===e.scheme.trim().toLowerCase())===t),r=[...new Set([...e.subjects??[],...e.bookshelves??[]])].slice(0,25),i=e.cover===void 0?void 0:Ht(e.cover.uri,t.baseUrl),a=i===void 0?void 0:{uri:i,mediaType:e.cover?.mediaType,confidence:`derived`},o=N({date:zt(e.issued),publisher:e.publisher}),s=N({original:Vt(e.originalPublication),edition:o.date!==void 0||o.publisher!==void 0?o:void 0});return N({titles:e.title===void 0?void 0:[{value:e.title}],publication:s.original!==void 0||s.edition!==void 0?s:void 0,description:e.summary??e.description,rights:e.rights,languages:Ut([...new Set(e.languages??[])]),subjects:Ut(r),contributors:Rt(e),identifiers:n,cover:a})},Gt=`projectGutenberg`,Kt=`https://www.gutenberg.org`,qt=(e={})=>{let t=e.baseUrl??Kt;return{id:Gt,name:`Project Gutenberg`,search:async(n,r)=>{let i=K(n);if(i===void 0)return[];let a=new URL(`/cache/epub/${i.id}/pg${i.id}.rdf`,t),o=await(e.fetch??globalThis.fetch)(a.toString(),{signal:r.signal,headers:{Accept:`application/rdf+xml, application/xml;q=0.9`,...e.userAgent===void 0?{}:{"User-Agent":e.userAgent}}});if(o.status===404)return[];if(!o.ok)throw new j(o.status,`Project Gutenberg metadata lookup failed with status ${o.status}`);let s=Ft(await o.text());if(s===void 0||s.id!==i.id)throw Error(`Project Gutenberg RDF did not contain the requested eBook ${i.id}`);let c=new URL(`/ebooks/${i.id}`,t).toString();return[{id:s.id,url:c,raw:s,metadata:Wt(s,{baseUrl:t,matchedIdentifier:i.identifier})}]}}},Jt=e=>[e.title,e.series].some(e=>e!==void 0&&e.trim().length>0)||(e.identifiers??[]).some(e=>e.value.trim().length>0)||(e.authors??[]).some(e=>e.trim().length>0);exports.GOOGLE_BOOKS_IDENTIFIER_SCHEME=Me,exports.GOOGLE_BOOKS_MAX_SUBJECTS=Ve,exports.GOOGLE_BOOKS_PROVIDER_ID=ot,exports.METADATA_MATCH_WEIGHTS=ae,exports.MetadataProviderResponseError=j,exports.OPEN_LIBRARY_IDENTIFIER_SCHEME=bt,exports.OPEN_LIBRARY_MAX_SUBJECTS=yt,exports.OPEN_LIBRARY_PROVIDER_ID=Ct,exports.PROJECT_GUTENBERG_IDENTIFIER_SCHEME=lt,exports.PROJECT_GUTENBERG_MAX_SUBJECTS=It,exports.PROJECT_GUTENBERG_PROVIDER_ID=Gt,exports.createGoogleBooksProvider=ct,exports.createOpenLibraryProvider=Ot,exports.createProjectGutenbergProvider=qt,exports.fetchMetadata=we,exports.googleBooksCoverUrl=Ke,exports.googleBooksLookupFromInput=B,exports.googleBooksVolumeUrl=Ye,exports.hasSearchTerms=Jt,exports.marcLanguageToBcp47=vt,exports.metadataAuthors=u,exports.metadataInputFromResolvedArchive=Te,exports.normalizeForComparison=g,exports.parseGoogleBooksVolume=H,exports.parseGoogleBooksVolumesResponse=Be,exports.parseOpenLibrarySearchResponse=ht,exports.parseProjectGutenbergRdf=Ft,exports.personNameSimilarity=O,exports.projectGutenbergLookupFromInput=K,exports.resolveGoogleBooksVolume=Je,exports.resolveOpenLibraryDoc=St,exports.resolveProjectGutenbergRecord=Wt,exports.responseErrorStatus=M,exports.retryWithBackoff=je,exports.scoreMetadataCandidate=ve,exports.textSimilarity=v,exports.titleSimilarity=ie,exports.toIsbn13=p;
2
2
  //# sourceMappingURL=index.cjs.map