@prose-reader/metadata-fetcher 1.371.0 → 1.373.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 +1 -1
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +3 -3
- package/dist/index.js.map +1 -1
- package/package.json +4 -4
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=>{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)]},i=/^\d{13}$/,a=/^\d{9}[\dX]$/,o=t=>{let n=(0,e.normalizeIsbn)(t);if(n===void 0)return;if(i.test(n))return n;if(!a.test(n))return;let r=`978${n.slice(0,9)}`,o=0;for(let e=0;e<r.length;e++){let t=r.charCodeAt(e)-48;o+=e%2==0?t:t*3}return`${r}${(10-o%10)%10}`},s=/[\u0300-\u036f]/g,c=/[^\p{L}\p{N}]+/gu,l=e=>e.normalize(`NFD`).replace(s,``).toLowerCase().replace(c,` `).trim(),u=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},d=(e,t)=>{let n=l(e).replaceAll(` `,``),r=l(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=u(n),a=0;for(let[e,t]of u(r))a+=Math.min(t,i.get(e)??0);return 2*a/(n.length-1+(r.length-1))},f=/\s*[:;]\s*|\s+[-–—]\s+/,p=e=>{let[t=``,...n]=e.split(f),r=t.trim(),i=n.join(` `).trim();return r.length===0?{main:e,hasSubtitle:!1}:{main:r,hasSubtitle:i.length>0}},m=.9,h=[`volume`,`part`,`book`],g=/\b(volumes?|vols?|parts?|books?)\s+([\p{L}\p{N}]+)\b/gu,_={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},v={i:1,v:5,x:10,l:50,c:100,d:500,m:1e3},y=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=v[r];if(e===void 0)return;e<n?t-=e:(t+=e,n=e)}return t>0?t:void 0},b=e=>/^\d+$/.test(e)?Number.parseInt(e,10):_[e]??y(e),x=e=>{if(e.startsWith(`vol`))return`volume`;if(e.startsWith(`part`))return`part`;if(e.startsWith(`book`))return`book`},S=e=>{let t=new Map;for(let n of l(e).matchAll(g)){let e=n[1]===void 0?void 0:x(n[1]),r=n[2]===void 0?void 0:b(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},C=(e,t)=>{let n=S(e),r=S(t);for(let e of h){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},w=e=>{let t=new Set;for(let n of S(e).values())for(let e of n)t.add(e);return t},T=(e,t)=>{if(C(e,t))return 0;let n=d(e,t),r=p(e),i=p(t);return r.hasSubtitle===i.hasSubtitle?n:Math.max(n,d(r.main,i.main)*m)},E=(e,t)=>{let n;for(let r of t){if(C(e,r))return{score:0,candidate:r};let t=T(e,r);(n===void 0||t>n.score)&&(n={score:t,candidate:r})}return n},D=e=>l(e).split(` `).filter(e=>e.length>0).sort().join(` `),O=(e,t)=>d(D(e),D(t)),k={isbn:1,gtin:1,identifiers:.6,title:.8,authors:.5,series:.3,publishedYear:.2,publisher:.15,languages:.15,numberOfPages:.15},ee=new Set([`isbn`,`gtin`]),A=e=>{let t=e?.trim();return t!==void 0&&t.length>0?t:void 0},te=(e,t)=>{let n=A(e.value)?.toLowerCase();return n!==void 0&&n===A(t.value)?.toLowerCase()},j=e=>e.scheme.trim().toLowerCase()===`unknown`?void 0:A(e.scheme)?.toLowerCase(),ne=e=>`${e.scheme}:${e.value}`,re=(e,t)=>{if(!te(e,t))return!1;let n=j(e),r=j(t);return n===void 0||r===void 0||n===r},ie=(e,t)=>{if(!te(e,t))return!1;let n=j(e),r=j(t);return n!==void 0&&n===r},ae=e=>e.trim().toLowerCase().split(`-`)[0]??``,oe=(e,t)=>{let n=Math.abs(e-t);return n===0?1:n===1?.6:n<=3?.3:0},se=(e,t)=>{let n=Math.max(e,t);return n<=0?0:Math.max(0,1-Math.abs(e-t)/n*2)},ce=(e,t,n)=>e.reduce((e,r)=>t.reduce((e,t)=>Math.max(e,n(r,t)),e),0),le=(e,t,n=d)=>{let r=A(e);if(r===void 0)return;let i;for(let e of t){let t=A(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},ue=t=>{let n=(0,e.mainTitle)(t),r=t.titles?.find(e=>e.type===`subtitle`)?.value;return n!==void 0&&r!==void 0?`${n}: ${r}`:void 0},de=(e,t)=>{let n=w(e);if(n.size===0)return!1;let r=(t.belongsTo?.series??[]).flatMap(e=>e.position===void 0?[]:[e.position]);return r.length>0&&r.every(e=>!n.has(e))},fe=(e,t)=>{if(e===void 0)return;let n;for(let r of t){if(r===void 0)continue;let t={score:oe(e,r),query:String(e),candidate:String(r)};(n===void 0||t.score>n.score)&&(n=t)}return n},pe=(t,n)=>{let i=[],a=(e,t)=>{t!==void 0&&i.push({field:e,weight:k[e],score:Math.min(1,Math.max(0,t.score)),query:t.query,candidate:t.candidate})},s=(e,t,n,r=d)=>{let i=A(t),o=A(n);i===void 0||o===void 0||a(e,{score:r(i,o),query:i,candidate:o})},c=(0,e.identifierValue)(t.identifiers,`ISBN`),l=(0,e.identifierValue)(n.identifiers,`ISBN`),u=c===void 0?void 0:o(c),f=l===void 0?void 0:o(l),p=c!==void 0&&l!==void 0&&u!==void 0&&f!==void 0;p&&a(`isbn`,{score:+(u===f),query:c,candidate:l});let m=(0,e.identifierValue)(t.identifiers,`GTIN`),h=(0,e.identifierValue)(n.identifiers,`GTIN`);!p&&m!==void 0&&h!==void 0&&a(`gtin`,{score:+(m===h),query:m,candidate:h});let g=(t.identifiers??[]).filter(t=>!(0,e.isIsbnBearingScheme)(t.scheme)),_=(n.identifiers??[]).filter(t=>!(0,e.isIsbnBearingScheme)(t.scheme)),v=g.some(e=>_.some(t=>ie(e,t)));g.length>0&&_.length>0&&a(`identifiers`,{score:+!!g.some(e=>_.some(t=>re(e,t))),query:g.map(ne).join(`, `),candidate:_.map(ne).join(`, `)});let y=A(t.title),b=[(0,e.mainTitle)(n),ue(n)].flatMap(e=>{let t=A(e);return t===void 0?[]:[t]});if(y!==void 0&&b.length>0){let e=E(y,b);e!==void 0&&a(`title`,{score:de(y,n)?0:e.score,query:y,candidate:e.candidate})}a(`publisher`,le(t.publisher,[n.publication?.original?.publisher,n.publication?.edition?.publisher])),s(`series`,t.series,n.belongsTo?.series?.[0]?.name);let x=r(n),S=(t.authors??[]).flatMap(e=>{let t=A(e);return t===void 0?[]:[t]});S.length>0&&x.length>0&&a(`authors`,{score:ce(S,x,O),query:S.join(`, `),candidate:x.join(`, `)}),a(`publishedYear`,fe(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(ae));a(`languages`,{score:+!!C.some(t=>e.has(ae(t))),query:C.join(`, `),candidate:w.join(`, `)})}t.numberOfPages!==void 0&&n.numberOfPages!==void 0&&a(`numberOfPages`,{score:se(t.numberOfPages,n.numberOfPages),query:String(t.numberOfPages),candidate:String(n.numberOfPages)});let T=i.filter(e=>ee.has(e.field));if(T.some(e=>e.score===0))return{score:0,signals:i};if(v||T.some(e=>e.score===1))return{score:1,signals:i};let D=i.reduce((e,t)=>e+t.weight,0);return D===0?{score:0,signals:i}:{score:i.reduce((e,t)=>e+t.score*t.weight,0)/D,signals:i}},M=class extends Error{status;constructor(e,t){super(t??`Provider responded with status ${e}`),this.name=`MetadataProviderResponseError`,this.status=e}},N=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},me=t.Report.namespace(`@prose-reader/metadata-fetcher`,void 0,{color:`#b06642`}),P=e=>{let t=Object.entries(e).filter(([,e])=>e!==void 0);return Object.fromEntries(t)},he=5,ge=.5,_e=5,ve=({candidate:e,providerId:t,score:n,signals:r,accepted:i,includeRaw:a})=>P({providerId:t,score:n,signals:r,accepted:i,metadata:e.metadata,id:e.id,url:e.url,raw:a?e.raw:void 0}),ye=async(e,t)=>{let n=t.limit??he,r=t.minScore??ge,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 me.error(`fetchMetadata: provider "${r.id}" failed`,e),{provider:r,candidates:void 0,failure:P({id:r.id,status:N(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}=pe(e,n.metadata);return ve({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&&me.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:_e,matches:[...c].sort((e,t)=>t.score-e.score),sources:s,failedProviders:o}},be=t=>{let{metadata:n}=t,i=r(n),a=n.identifiers?.map(({value:e,scheme:t})=>({value:e,scheme:t}));return P({title:(0,e.mainTitle)(n),authors:i.length>0?i:void 0,identifiers:a!==void 0&&a.length>0?a: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})},F=e=>typeof e==`object`&&!!e&&!Array.isArray(e),I=(e,t)=>{let n=e[t];if(typeof n!=`string`)return;let r=n.trim();return r.length>0?r:void 0},L=(e,t)=>{let n=e[t];return typeof n==`number`&&Number.isFinite(n)?n:void 0},R=(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},z=(e,t)=>{let n=e[t];return Array.isArray(n)?n.filter(F):[]},xe=e=>e.reason??new DOMException(`The operation was aborted`,`AbortError`),Se=e=>{if(e?.aborted===!0)throw xe(e)},Ce=(e,t)=>(Se(t),new Promise((n,r)=>{let i=()=>{clearTimeout(a),r(t===void 0?void 0:xe(t))},a=setTimeout(()=>{t?.removeEventListener(`abort`,i),n()},e);t?.addEventListener(`abort`,i,{once:!0})})),we=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`)},Te=(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)},Ee=async(e,t)=>{we(t);for(let n=1;n<=t.attempts;n+=1){Se(t.signal);try{return await e(n)}catch(e){if(n===t.attempts||t.signal?.aborted===!0||!t.shouldRetry(e,n))throw e;await Ce(Te(n,t),t.signal)}}throw Error(`retryWithBackoff reached an invalid state`)},B=`GoogleBooks`,De=t=>{for(let n of t.identifiers??[]){let t=(0,e.identifierValue)([n],B);if(t!==void 0)return{id:t,identifier:{value:n.value,scheme:n.scheme}}}},V=(e,t)=>{let n=e[t];return F(n)?n:void 0},Oe=e=>{let t=z(e,`industryIdentifiers`).flatMap(e=>{let t=I(e,`identifier`);return t===void 0?[]:[P({type:I(e,`type`),identifier:t})]});return t.length>0?t:void 0},ke=e=>{let t=V(e,`imageLinks`);if(t===void 0)return;let n=P({smallThumbnail:I(t,`smallThumbnail`),thumbnail:I(t,`thumbnail`),small:I(t,`small`),medium:I(t,`medium`),large:I(t,`large`),extraLarge:I(t,`extraLarge`)});return Object.keys(n).length>0?n:void 0},Ae=e=>{let t=V(e,`seriesInfo`);if(t===void 0)return;let n=z(t,`volumeSeries`).flatMap(e=>{let t=P({seriesId:I(e,`seriesId`),orderNumber:L(e,`orderNumber`)});return Object.keys(t).length>0?[t]:[]});return n.length>0?{volumeSeries:n}:void 0},je=e=>{let t=V(e,`volumeInfo`);if(t===void 0)return;let n=P({title:I(t,`title`),subtitle:I(t,`subtitle`),authors:R(t,`authors`),publisher:I(t,`publisher`),publishedDate:I(t,`publishedDate`),description:I(t,`description`),industryIdentifiers:Oe(t),pageCount:L(t,`pageCount`),categories:R(t,`categories`),averageRating:L(t,`averageRating`),ratingsCount:L(t,`ratingsCount`),language:I(t,`language`),imageLinks:ke(t),infoLink:I(t,`infoLink`),canonicalVolumeLink:I(t,`canonicalVolumeLink`),seriesInfo:Ae(t)});return Object.keys(n).length>0?n:void 0},H=e=>{if(!F(e))return;let t=P({id:I(e,`id`),volumeInfo:je(e)});return Object.keys(t).length>0?t:void 0},Me=e=>F(e)?z(e,`items`).flatMap(e=>{let t=H(e);return t===void 0?[]:[t]}):[],Ne=5,Pe=(e,t)=>{if(e===void 0||e<0||e>Ne)return;let n=t!==void 0&&Number.isInteger(t)&&t>=0?t:void 0;if(n!==0)return P({value:e,count:n})},Fe=25,U=e=>e.length>0?e:void 0,Ie=e=>e===`ISBN_10`||e===`ISBN_13`?`ISBN`:e??`Unknown`,Le=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)),Re=e=>e.map(e=>P({value:e.identifier,scheme:Ie(e.type)})),ze=(e,t)=>U([...e===void 0?[]:[{value:e}],...t===void 0?[]:[{value:t,type:`subtitle`}]]),Be=e=>U((e?.volumeSeries??[]).flatMap(e=>{let t=P({identifiers:e.seriesId===void 0?void 0:[{value:e.seriesId,scheme:B}],position:e.orderNumber});return Object.keys(t).length>0?[t]:[]})),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}},Ve=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}},He=e=>U(e.map(e=>({name:e,roles:[`author`]}))),Ue=(t,n={})=>{let{id:r,volumeInfo:i,...a}=t,{title:o,subtitle:s,authors:c,publisher:l,publishedDate:u,description:d,industryIdentifiers:f,pageCount:p,categories:m,averageRating:h,ratingsCount:g,language:_,imageLinks:v,seriesInfo:y,infoLink:b,canonicalVolumeLink:x,...S}=i??{},C=Re(f??[]),w=Le([...n.matchedIdentifier===void 0?[]:[n.matchedIdentifier],...n.matchedIsbn===void 0?[]:[{value:n.matchedIsbn,scheme:`ISBN`}],...r===void 0?[]:[{value:r,scheme:B}],...C]),T=P({date:(0,e.parseW3cDtfDate)(u),publisher:l}),E=Ve(v),D=E===void 0?void 0:{uri:E,confidence:`derived`},O=[...new Set(m??[])].slice(0,25),k=Be(y);return P({titles:ze(o,s),description:d,belongsTo:k===void 0?void 0:{series:k},publication:T.date!==void 0||T.publisher!==void 0?{edition:T}:void 0,languages:_===void 0?void 0:[_],subjects:U(O),contributors:He(c??[]),numberOfPages:p,aggregateRating:Pe(h,g),identifiers:w,cover:D})},We=e=>W(e.volumeInfo?.canonicalVolumeLink)??W(e.volumeInfo?.infoLink)??(e.id===void 0?void 0:`https://books.google.com/books?id=${encodeURIComponent(e.id)}`),Ge=40,Ke=1,qe=4,Je=3,Ye=1e3,Xe=3e3,Ze=new Set([500,502,503,504]),Qe=/["\\]+/g,$e=/:/g,et=/(^|\s)-+/g,tt=/\s+/g,nt=e=>e.replace(Qe,` `).replace($e,` `).replace(et,` `).replace(tt,` `).trim(),rt=e=>e.length>0,it=e=>{let t=nt(e.title??``);if(t.length===0)return;let n=e.authors?.map(nt).find(rt);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=>F(e)?z(e,`items`).flatMap(e=>{let t=at(e);return t===void 0?[]:[t]}):[],G=(e,t={})=>e.map(({volume:e,raw:n})=>({metadata:Ue(e,t),id:e.id,url:We(e),raw:n})),st=t=>{let n=`${t.baseUrl.replace(/\/+$/,``)}/volumes`,r=async(e,n,r=!1)=>(e.searchParams.set(`key`,t.apiKey),Ee(async()=>{let i=await t.fetch(e.toString(),{signal:n.signal,headers:{Accept:`application/json`}});if(!(r&&i.status===404)){if(!i.ok)throw new M(i.status,`Google Books lookup failed with status ${i.status}`);return i}},{attempts:Je,initialDelayMs:Ye,maxDelayMs:Xe,signal:n.signal,shouldRetry:e=>{let t=N(e);return t===void 0||Ze.has(t)}})),i=async(e,t)=>{let i=await r(new URL(`${n}/${encodeURIComponent(e)}`),t,!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},a=async(e,t,i)=>{let a=Math.min(Math.ceil(t.limit*i),Ge);if(a<=0)return[];let o=new URL(n);o.searchParams.set(`q`,e),o.searchParams.set(`maxResults`,String(a)),o.searchParams.set(`orderBy`,`relevance`),o.searchParams.set(`printType`,`books`);let s=await r(o,t);return s===void 0?[]:ot(await s.json())};return async(t,n)=>{let r=De(t);if(r!==void 0){let e=await i(r.id,n);if(e!==void 0)return G([e],{matchedIdentifier:r.identifier})}let o=(0,e.identifierValue)(t.identifiers,`ISBN`);if(o!==void 0){let e=await a(`isbn:${o}`,n,Ke);if(e.length>0)return G(e,{matchedIsbn:o})}let s=it(t);if(s===void 0)return[];let c=`intitle:${s.title}`,l=s.author===void 0?c:`${c} inauthor:${s.author}`,u=await a(l,n,qe);return u.length>0||s.author===void 0?G(u):G(await a(c,n,qe))}},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})}},K=`ProjectGutenberg`,q=t=>{for(let n of t.identifiers??[]){let t=(0,e.identifierValue)([n],K);if(t!==void 0)return{id:t,identifier:{value:n.value,scheme:n.scheme}}}},dt=e=>({key:I(e,`key`),title:I(e,`title`),subtitle:I(e,`subtitle`),author_name:R(e,`author_name`),first_publish_year:L(e,`first_publish_year`),language:R(e,`language`),subject:R(e,`subject`),number_of_pages_median:L(e,`number_of_pages_median`),ratings_average:L(e,`ratings_average`),ratings_count:L(e,`ratings_count`),cover_i:L(e,`cover_i`),id_project_gutenberg:R(e,`id_project_gutenberg`)}),ft=e=>F(e)?z(e,`docs`).map(dt):[],pt={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`},mt=new Set([`mul`,`und`,`zxx`,`sgn`]),ht=e=>{let t=e.trim().toLowerCase();if(t.length!==0&&!mt.has(t))return pt[t]??t},gt=25,_t=`OpenLibrary`,vt=`ProjectGutenberg`,J=e=>e.length>0?e:void 0,yt=(e,t)=>{let{title:n,subtitle:r,language:i,key:a,author_name:o,first_publish_year:s,subject:c,number_of_pages_median:l,ratings_average:u,ratings_count:d,cover_i:f,id_project_gutenberg:p,...m}=e,h=J([...n===void 0?[]:[{value:n}],...r===void 0?[]:[{value:r,type:`subtitle`}]]),g=J([...new Set((i??[]).map(ht).filter(e=>e!==void 0))]),_=[...t.isbn===void 0?[]:[{value:t.isbn,scheme:`ISBN`}],...t.matchedProjectGutenbergIdentifier===void 0?[]:[t.matchedProjectGutenbergIdentifier],...(p??[]).map(e=>({value:e,scheme:vt})),...a===void 0?[]:[{value:a,scheme:_t}]];return P({titles:h,cover:f===void 0?void 0:{uri:`${t.coversBaseUrl}/b/id/${f}-L.jpg`,mediaType:`image/jpeg`,confidence:`derived`},publication:s===void 0?void 0:{original:{date:{year:s}}},languages:g,subjects:J((c??[]).slice(0,25)),contributors:J((o??[]).map(e=>({name:e,roles:[`author`]}))),numberOfPages:l,aggregateRating:Pe(u,d),identifiers:J(_)})},bt=`openLibrary`,xt=`https://openlibrary.org`,St=`https://covers.openlibrary.org`,Ct=[`key`,`title`,`subtitle`,`author_name`,`first_publish_year`,`language`,`subject`,`number_of_pages_median`,`ratings_average`,`ratings_count`,`cover_i`,`id_project_gutenberg`].join(`,`),wt=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}}},Tt=(t={})=>{let n=t.baseUrl??xt,r=t.coversBaseUrl??St,i=async(e,r)=>{let i=new URL(`/search.json`,n);for(let[t,n]of Object.entries(e))i.searchParams.set(t,n);i.searchParams.set(`fields`,Ct),i.searchParams.set(`limit`,String(r.limit));let a=await(t.fetch??globalThis.fetch)(i.toString(),{signal:r.signal,headers:{Accept:`application/json`,...t.userAgent===void 0?{}:{"User-Agent":t.userAgent}}});if(!a.ok)throw new M(a.status,`Open Library search failed with status ${a.status}`);return ft(await a.json())},a=(e,t={})=>e.map(e=>({metadata:yt(e,{coversBaseUrl:r,isbn:t.isbn,matchedProjectGutenbergIdentifier:t.confirmedProjectGutenberg?.identifier}),id:e.key,url:e.key===void 0?void 0:`${n}${e.key}`,raw:e}));return{id:bt,name:`Open Library`,search:async(t,n)=>{let r=(0,e.identifierValue)(t.identifiers,`ISBN`),o=q(t);if(r!==void 0){let e=await i({isbn:r},n);if(e.length>0)return a(e,{isbn:r})}if(o!==void 0){let e=await i({q:`id_project_gutenberg:${o.id}`},n);if(e.length>0)return a(e,{confirmedProjectGutenberg:o})}let s=wt(t);if(s===void 0)return[];let c=await i(s,n);if(c.length>0)return a(c);let l=s.author===void 0?s.title:`${s.title} ${s.author}`;return a(await i({q:l},n))}}},Y=e=>e.includes(`:`)?e.slice(e.lastIndexOf(`:`)+1):e,Et=e=>e.type===`element`,X=(e,t)=>e.children.filter(e=>Et(e)&&Y(e.name).toLowerCase()===t.toLowerCase()),Z=(e,t)=>X(e,t)[0],Q=e=>{let t=e?.val.trim();return t!==void 0&&t.length>0?t:void 0},Dt=(e,t)=>{for(let[n,r]of Object.entries(e.attr)){if(Y(n).toLowerCase()!==t.toLowerCase())continue;let e=r.trim();if(e.length>0)return e}},Ot=(e,t)=>X(e,t).flatMap(e=>{let t=Q(Z(Z(e,`Description`)??e,`value`));return t===void 0?[]:[t]}),kt=e=>{let t=Dt(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},At=e=>{let t=[];for(let n of e.children){if(!Et(n))continue;let e=n.name.toLowerCase()===`dcterms:creator`,r=n.name.toLowerCase().startsWith(`marcrel:`);if(!e&&!r)continue;let i=Q(Z(Z(n,`agent`)??n,`name`));i!==void 0&&t.push({name:i,role:e?`aut`:Y(n.name).toLowerCase()})}return t},jt=e=>X(e,`subject`).flatMap(e=>{let t=Z(e,`Description`),n=t===void 0?void 0:Dt(Z(t,`memberOf`)??t,`resource`),r=Q(t===void 0?void 0:Z(t,`value`));return r!==void 0&&n?.endsWith(`/LCSH`)===!0?[r]:[]}),Mt=e=>{let t=X(e,`hasFormat`).flatMap(e=>{let t=Z(e,`file`);if(t===void 0)return[];let n=Dt(t,`about`),r=X(t,`format`).map(e=>Q(Z(Z(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,Nt=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(Y(t.name).toLowerCase()!==`rdf`)return;let r=Z(t,`ebook`);if(r===void 0)return;let i=kt(r);if(i===void 0)return;let a=[...new Set(Ot(r,`language`))],o=[...new Set(jt(r))],s=[...new Set(Ot(r,`bookshelf`))],c=At(r);return{id:i,title:Q(Z(r,`title`)),publisher:Q(Z(r,`publisher`)),issued:Q(Z(r,`issued`)),originalPublication:Q(Z(r,`marc260`)),rights:Q(Z(r,`rights`)),description:Q(Z(r,`description`)),summary:Q(Z(r,`marc520`)),languages:$(a),subjects:$(o),bookshelves:$(s),contributors:$(c),cover:Mt(r)}},Pt=25,Ft={art:`artist`,aut:`author`,clr:`colorist`,ctb:`contributor`,edt:`editor`,ill:`illustrator`,nrt:`narrator`,trl:`translator`},It=e=>{let t=new Map;for(let n of e.contributors??[]){let e=n.name.trim().toLowerCase(),r=Ft[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},Lt=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}}},Rt=(e,t)=>e.split(`$`).slice(1).flatMap(e=>e[0]?.toLowerCase()===t.toLowerCase()?[e.slice(1).trim()]:[]).filter(e=>e.length>0),zt=e=>{if(e===void 0)return;let t=Rt(e,`b`),n=(t.length===1?t[0]:void 0)?.replace(/[\s,;:/]+$/u,``).trim(),r=Rt(e,`c`),i=[...new Set(r.flatMap(e=>[...e.matchAll(/\d{4}/g)].flatMap(e=>e[0]===void 0?[]:[Number(e[0])])))],a=P({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},Bt=(e,t)=>{try{let n=new URL(e,t);return n.protocol===`http:`||n.protocol===`https:`?n.toString():void 0}catch{return}},Vt=e=>e.length>0?e:void 0,Ht=(e,t)=>{let{id:n,title:r,publisher:i,issued:a,originalPublication:o,rights:s,description:c,summary:l,languages:u,subjects:d,bookshelves:f,contributors:p,cover:m,...h}=e,g=[t.matchedIdentifier,{value:n,scheme:K}].filter((e,t,n)=>n.findIndex(t=>t.value.trim().toLowerCase()===e.value.trim().toLowerCase()&&t.scheme.trim().toLowerCase()===e.scheme.trim().toLowerCase())===t),_=[...new Set([...d??[],...f??[]])].slice(0,25),v=m===void 0?void 0:Bt(m.uri,t.baseUrl),y=v===void 0?void 0:{uri:v,mediaType:m?.mediaType,confidence:`derived`},b=P({date:Lt(a),publisher:i}),x=P({original:zt(o),edition:b.date!==void 0||b.publisher!==void 0?b:void 0});return P({titles:r===void 0?void 0:[{value:r}],publication:x.original!==void 0||x.edition!==void 0?x:void 0,description:l??c,rights:s,languages:Vt([...new Set(u??[])]),subjects:Vt(_),contributors:It(e),identifiers:g,cover:y})},Ut=`projectGutenberg`,Wt=`https://www.gutenberg.org`,Gt=(e={})=>{let t=e.baseUrl??Wt;return{id:Ut,name:`Project Gutenberg`,search:async(n,r)=>{let i=q(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 M(o.status,`Project Gutenberg metadata lookup failed with status ${o.status}`);let s=Nt(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:Ht(s,{baseUrl:t,matchedIdentifier:i.identifier})}]}}},Kt=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=B,exports.GOOGLE_BOOKS_MAX_SUBJECTS=Fe,exports.GOOGLE_BOOKS_PROVIDER_ID=ct,exports.METADATA_MATCH_WEIGHTS=k,exports.MetadataProviderResponseError=M,exports.OPEN_LIBRARY_IDENTIFIER_SCHEME=_t,exports.OPEN_LIBRARY_MAX_SUBJECTS=gt,exports.OPEN_LIBRARY_PROVIDER_ID=bt,exports.PROJECT_GUTENBERG_IDENTIFIER_SCHEME=K,exports.PROJECT_GUTENBERG_MAX_SUBJECTS=Pt,exports.PROJECT_GUTENBERG_PROVIDER_ID=Ut,exports.createGoogleBooksProvider=ut,exports.createOpenLibraryProvider=Tt,exports.createProjectGutenbergProvider=Gt,exports.fetchMetadata=ye,exports.googleBooksCoverUrl=Ve,exports.googleBooksLookupFromInput=De,exports.googleBooksVolumeUrl=We,exports.hasSearchTerms=Kt,exports.marcLanguageToBcp47=ht,exports.metadataAuthors=r,exports.metadataInputFromResolvedArchive=be,exports.normalizeForComparison=l,exports.parseGoogleBooksVolume=H,exports.parseGoogleBooksVolumesResponse=Me,exports.parseOpenLibrarySearchResponse=ft,exports.parseProjectGutenbergRdf=Nt,exports.personNameSimilarity=O,exports.projectGutenbergLookupFromInput=q,exports.resolveGoogleBooksVolume=Ue,exports.resolveOpenLibraryDoc=yt,exports.resolveProjectGutenbergRecord=Ht,exports.responseErrorStatus=N,exports.retryWithBackoff=Ee,exports.scoreMetadataCandidate=pe,exports.textSimilarity=d,exports.titleSimilarity=T,exports.toIsbn13=o;
|
|
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=>{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)]},i=/^\d{13}$/,a=/^\d{9}[\dX]$/,o=t=>{let n=(0,e.normalizeIsbn)(t);if(n===void 0)return;if(i.test(n))return n;if(!a.test(n))return;let r=`978${n.slice(0,9)}`,o=0;for(let e=0;e<r.length;e++){let t=r.charCodeAt(e)-48;o+=e%2==0?t:t*3}return`${r}${(10-o%10)%10}`},s=/[\u0300-\u036f]/g,c=/[^\p{L}\p{N}]+/gu,l=e=>e.normalize(`NFD`).replace(s,``).toLowerCase().replace(c,` `).trim(),u=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},d=(e,t)=>{let n=l(e).replaceAll(` `,``),r=l(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=u(n),a=0;for(let[e,t]of u(r))a+=Math.min(t,i.get(e)??0);return 2*a/(n.length-1+(r.length-1))},f=/\s*[:;]\s*|\s+[-–—]\s+/,p=e=>{let[t=``,...n]=e.split(f),r=t.trim(),i=n.join(` `).trim();return r.length===0?{main:e,hasSubtitle:!1}:{main:r,hasSubtitle:i.length>0}},m=.9,h=[`volume`,`part`,`book`],g=/\b(volumes?|vols?|parts?|books?)\s+([\p{L}\p{N}]+)\b/gu,_={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},v={i:1,v:5,x:10,l:50,c:100,d:500,m:1e3},y=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=v[r];if(e===void 0)return;e<n?t-=e:(t+=e,n=e)}return t>0?t:void 0},b=e=>/^\d+$/.test(e)?Number.parseInt(e,10):_[e]??y(e),x=e=>{if(e.startsWith(`vol`))return`volume`;if(e.startsWith(`part`))return`part`;if(e.startsWith(`book`))return`book`},S=e=>{let t=new Map;for(let n of l(e).matchAll(g)){let e=n[1]===void 0?void 0:x(n[1]),r=n[2]===void 0?void 0:b(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},C=(e,t)=>{let n=S(e),r=S(t);for(let e of h){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},w=e=>{let t=new Set;for(let n of S(e).values())for(let e of n)t.add(e);return t},T=(e,t)=>{if(C(e,t))return 0;let n=d(e,t),r=p(e),i=p(t);return r.hasSubtitle===i.hasSubtitle?n:Math.max(n,d(r.main,i.main)*m)},E=(e,t)=>{let n;for(let r of t){if(C(e,r))return{score:0,candidate:r};let t=T(e,r);(n===void 0||t>n.score)&&(n={score:t,candidate:r})}return n},D=e=>l(e).split(` `).filter(e=>e.length>0).sort().join(` `),O=(e,t)=>d(D(e),D(t)),k={isbn:1,gtin:1,identifiers:.6,title:.8,authors:.5,series:.3,publishedYear:.2,publisher:.15,languages:.15,numberOfPages:.15},ee=new Set([`isbn`,`gtin`]),A=e=>{let t=e?.trim();return t!==void 0&&t.length>0?t:void 0},te=(e,t)=>{let n=A(e.value)?.toLowerCase();return n!==void 0&&n===A(t.value)?.toLowerCase()},j=e=>e.scheme.trim().toLowerCase()===`unknown`?void 0:A(e.scheme)?.toLowerCase(),ne=e=>`${e.scheme}:${e.value}`,re=(e,t)=>{if(!te(e,t))return!1;let n=j(e),r=j(t);return n===void 0||r===void 0||n===r},ie=(e,t)=>{if(!te(e,t))return!1;let n=j(e),r=j(t);return n!==void 0&&n===r},ae=e=>e.trim().toLowerCase().split(`-`)[0]??``,oe=(e,t)=>{let n=Math.abs(e-t);return n===0?1:n===1?.6:n<=3?.3:0},se=(e,t)=>{let n=Math.max(e,t);return n<=0?0:Math.max(0,1-Math.abs(e-t)/n*2)},ce=(e,t,n)=>e.reduce((e,r)=>t.reduce((e,t)=>Math.max(e,n(r,t)),e),0),le=(e,t,n=d)=>{let r=A(e);if(r===void 0)return;let i;for(let e of t){let t=A(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},ue=t=>{let n=(0,e.mainTitle)(t),r=t.titles?.find(e=>e.type===`subtitle`)?.value;return n!==void 0&&r!==void 0?`${n}: ${r}`:void 0},de=(e,t)=>{let n=w(e);if(n.size===0)return!1;let r=(t.belongsTo?.series??[]).flatMap(e=>e.position===void 0?[]:[e.position]);return r.length>0&&r.every(e=>!n.has(e))},fe=(e,t)=>{if(e===void 0)return;let n;for(let r of t){if(r===void 0)continue;let t={score:oe(e,r),query:String(e),candidate:String(r)};(n===void 0||t.score>n.score)&&(n=t)}return n},pe=(t,n)=>{let i=[],a=(e,t)=>{t!==void 0&&i.push({field:e,weight:k[e],score:Math.min(1,Math.max(0,t.score)),query:t.query,candidate:t.candidate})},s=(e,t,n,r=d)=>{let i=A(t),o=A(n);i!==void 0&&o!==void 0&&a(e,{score:r(i,o),query:i,candidate:o})},c=(0,e.identifierValue)(t.identifiers,`ISBN`),l=(0,e.identifierValue)(n.identifiers,`ISBN`),u=c===void 0?void 0:o(c),f=l===void 0?void 0:o(l),p=c!==void 0&&l!==void 0&&u!==void 0&&f!==void 0;p&&a(`isbn`,{score:+(u===f),query:c,candidate:l});let m=(0,e.identifierValue)(t.identifiers,`GTIN`),h=(0,e.identifierValue)(n.identifiers,`GTIN`);!p&&m!==void 0&&h!==void 0&&a(`gtin`,{score:+(m===h),query:m,candidate:h});let g=(t.identifiers??[]).filter(t=>!(0,e.isIsbnBearingScheme)(t.scheme)),_=(n.identifiers??[]).filter(t=>!(0,e.isIsbnBearingScheme)(t.scheme)),v=g.some(e=>_.some(t=>ie(e,t)));g.length>0&&_.length>0&&a(`identifiers`,{score:+!!g.some(e=>_.some(t=>re(e,t))),query:g.map(ne).join(`, `),candidate:_.map(ne).join(`, `)});let y=A(t.title),b=[(0,e.mainTitle)(n),ue(n)].flatMap(e=>{let t=A(e);return t===void 0?[]:[t]});if(y!==void 0&&b.length>0){let e=E(y,b);e!==void 0&&a(`title`,{score:de(y,n)?0:e.score,query:y,candidate:e.candidate})}a(`publisher`,le(t.publisher,[n.publication?.original?.publisher,n.publication?.edition?.publisher])),s(`series`,t.series,n.belongsTo?.series?.[0]?.name);let x=r(n),S=(t.authors??[]).flatMap(e=>{let t=A(e);return t===void 0?[]:[t]});S.length>0&&x.length>0&&a(`authors`,{score:ce(S,x,O),query:S.join(`, `),candidate:x.join(`, `)}),a(`publishedYear`,fe(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(ae));a(`languages`,{score:+!!C.some(t=>e.has(ae(t))),query:C.join(`, `),candidate:w.join(`, `)})}t.numberOfPages!==void 0&&n.numberOfPages!==void 0&&a(`numberOfPages`,{score:se(t.numberOfPages,n.numberOfPages),query:String(t.numberOfPages),candidate:String(n.numberOfPages)});let T=i.filter(e=>ee.has(e.field));if(T.some(e=>e.score===0))return{score:0,signals:i};if(v||T.some(e=>e.score===1))return{score:1,signals:i};let D=i.reduce((e,t)=>e+t.weight,0);return D===0?{score:0,signals:i}:{score:i.reduce((e,t)=>e+t.score*t.weight,0)/D,signals:i}},M=class extends Error{status;constructor(e,t){super(t??`Provider responded with status ${e}`),this.name=`MetadataProviderResponseError`,this.status=e}},N=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},me=t.Report.namespace(`@prose-reader/metadata-fetcher`,void 0,{color:`#b06642`}),P=e=>{let t=Object.entries(e).filter(([,e])=>e!==void 0);return Object.fromEntries(t)},he=5,ge=.5,_e=5,ve=({candidate:e,providerId:t,score:n,signals:r,accepted:i,includeRaw:a})=>P({providerId:t,score:n,signals:r,accepted:i,metadata:e.metadata,id:e.id,url:e.url,raw:a?e.raw:void 0}),ye=async(e,t)=>{let n=t.limit??he,r=t.minScore??ge,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 me.error(`fetchMetadata: provider "${r.id}" failed`,e),{provider:r,candidates:void 0,failure:P({id:r.id,status:N(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}=pe(e,n.metadata);return ve({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&&me.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:_e,matches:[...c].sort((e,t)=>t.score-e.score),sources:s,failedProviders:o}},be=t=>{let{metadata:n}=t,i=r(n),a=n.identifiers?.map(({value:e,scheme:t})=>({value:e,scheme:t}));return P({title:(0,e.mainTitle)(n),authors:i.length>0?i:void 0,identifiers:a!==void 0&&a.length>0?a: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})},F=e=>typeof e==`object`&&!!e&&!Array.isArray(e),I=(e,t)=>{let n=e[t];if(typeof n!=`string`)return;let r=n.trim();return r.length>0?r:void 0},L=(e,t)=>{let n=e[t];return typeof n==`number`&&Number.isFinite(n)?n:void 0},R=(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},z=(e,t)=>{let n=e[t];return Array.isArray(n)?n.filter(F):[]},xe=e=>e.reason??new DOMException(`The operation was aborted`,`AbortError`),Se=e=>{if(e?.aborted===!0)throw xe(e)},Ce=(e,t)=>(Se(t),new Promise((n,r)=>{let i=()=>{clearTimeout(a),r(t===void 0?void 0:xe(t))},a=setTimeout(()=>{t?.removeEventListener(`abort`,i),n()},e);t?.addEventListener(`abort`,i,{once:!0})})),we=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`)},Te=(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)},Ee=async(e,t)=>{we(t);for(let n=1;n<=t.attempts;n+=1){Se(t.signal);try{return await e(n)}catch(e){if(n===t.attempts||t.signal?.aborted===!0||!t.shouldRetry(e,n))throw e;await Ce(Te(n,t),t.signal)}}throw Error(`retryWithBackoff reached an invalid state`)},B=`GoogleBooks`,De=t=>{for(let n of t.identifiers??[]){let t=(0,e.identifierValue)([n],B);if(t!==void 0)return{id:t,identifier:{value:n.value,scheme:n.scheme}}}},V=(e,t)=>{let n=e[t];return F(n)?n:void 0},Oe=e=>{let t=z(e,`industryIdentifiers`).flatMap(e=>{let t=I(e,`identifier`);return t===void 0?[]:[P({type:I(e,`type`),identifier:t})]});return t.length>0?t:void 0},ke=e=>{let t=V(e,`imageLinks`);if(t===void 0)return;let n=P({smallThumbnail:I(t,`smallThumbnail`),thumbnail:I(t,`thumbnail`),small:I(t,`small`),medium:I(t,`medium`),large:I(t,`large`),extraLarge:I(t,`extraLarge`)});return Object.keys(n).length>0?n:void 0},Ae=e=>{let t=V(e,`seriesInfo`);if(t===void 0)return;let n=z(t,`volumeSeries`).flatMap(e=>{let t=P({seriesId:I(e,`seriesId`),orderNumber:L(e,`orderNumber`)});return Object.keys(t).length>0?[t]:[]});return n.length>0?{volumeSeries:n}:void 0},je=e=>{let t=V(e,`volumeInfo`);if(t===void 0)return;let n=P({title:I(t,`title`),subtitle:I(t,`subtitle`),authors:R(t,`authors`),publisher:I(t,`publisher`),publishedDate:I(t,`publishedDate`),description:I(t,`description`),industryIdentifiers:Oe(t),pageCount:L(t,`pageCount`),categories:R(t,`categories`),averageRating:L(t,`averageRating`),ratingsCount:L(t,`ratingsCount`),language:I(t,`language`),imageLinks:ke(t),infoLink:I(t,`infoLink`),canonicalVolumeLink:I(t,`canonicalVolumeLink`),seriesInfo:Ae(t)});return Object.keys(n).length>0?n:void 0},H=e=>{if(!F(e))return;let t=P({id:I(e,`id`),volumeInfo:je(e)});return Object.keys(t).length>0?t:void 0},Me=e=>F(e)?z(e,`items`).flatMap(e=>{let t=H(e);return t===void 0?[]:[t]}):[],Ne=5,Pe=(e,t)=>{if(e===void 0||e<0||e>Ne)return;let n=t!==void 0&&Number.isInteger(t)&&t>=0?t:void 0;if(n!==0)return P({value:e,count:n})},Fe=25,U=e=>e.length>0?e:void 0,Ie=e=>e===`ISBN_10`||e===`ISBN_13`?`ISBN`:e??`Unknown`,Le=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)),Re=e=>e.map(e=>P({value:e.identifier,scheme:Ie(e.type)})),ze=(e,t)=>U([...e===void 0?[]:[{value:e}],...t===void 0?[]:[{value:t,type:`subtitle`}]]),Be=e=>U((e?.volumeSeries??[]).flatMap(e=>{let t=P({identifiers:e.seriesId===void 0?void 0:[{value:e.seriesId,scheme:B}],position:e.orderNumber});return Object.keys(t).length>0?[t]:[]})),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}},Ve=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}},He=e=>U(e.map(e=>({name:e,roles:[`author`]}))),Ue=(t,n={})=>{let{id:r,volumeInfo:i,...a}=t,{title:o,subtitle:s,authors:c,publisher:l,publishedDate:u,description:d,industryIdentifiers:f,pageCount:p,categories:m,averageRating:h,ratingsCount:g,language:_,imageLinks:v,seriesInfo:y,infoLink:b,canonicalVolumeLink:x,...S}=i??{},C=Re(f??[]),w=Le([...n.matchedIdentifier===void 0?[]:[n.matchedIdentifier],...n.matchedIsbn===void 0?[]:[{value:n.matchedIsbn,scheme:`ISBN`}],...r===void 0?[]:[{value:r,scheme:B}],...C]),T=P({date:(0,e.parseW3cDtfDate)(u),publisher:l}),E=Ve(v),D=E===void 0?void 0:{uri:E,confidence:`derived`},O=[...new Set(m??[])].slice(0,25),k=Be(y);return P({titles:ze(o,s),description:d,belongsTo:k===void 0?void 0:{series:k},publication:T.date!==void 0||T.publisher!==void 0?{edition:T}:void 0,languages:_===void 0?void 0:[_],subjects:U(O),contributors:He(c??[]),numberOfPages:p,aggregateRating:Pe(h,g),identifiers:w,cover:D})},We=e=>W(e.volumeInfo?.canonicalVolumeLink)??W(e.volumeInfo?.infoLink)??(e.id===void 0?void 0:`https://books.google.com/books?id=${encodeURIComponent(e.id)}`),Ge=40,Ke=1,qe=4,Je=3,Ye=1e3,Xe=3e3,Ze=new Set([500,502,503,504]),Qe=/["\\]+/g,$e=/:/g,et=/(^|\s)-+/g,tt=/\s+/g,nt=e=>e.replace(Qe,` `).replace($e,` `).replace(et,` `).replace(tt,` `).trim(),rt=e=>e.length>0,it=e=>{let t=nt(e.title??``);if(t.length===0)return;let n=e.authors?.map(nt).find(rt);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=>F(e)?z(e,`items`).flatMap(e=>{let t=at(e);return t===void 0?[]:[t]}):[],G=(e,t={})=>e.map(({volume:e,raw:n})=>({metadata:Ue(e,t),id:e.id,url:We(e),raw:n})),st=t=>{let n=`${t.baseUrl.replace(/\/+$/,``)}/volumes`,r=async(e,n,r=!1)=>(e.searchParams.set(`key`,t.apiKey),Ee(async()=>{let i=await t.fetch(e.toString(),{signal:n.signal,headers:{Accept:`application/json`}});if(!(r&&i.status===404)){if(!i.ok)throw new M(i.status,`Google Books lookup failed with status ${i.status}`);return i}},{attempts:Je,initialDelayMs:Ye,maxDelayMs:Xe,signal:n.signal,shouldRetry:e=>{let t=N(e);return t===void 0||Ze.has(t)}})),i=async(e,t)=>{let i=await r(new URL(`${n}/${encodeURIComponent(e)}`),t,!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},a=async(e,t,i)=>{let a=Math.min(Math.ceil(t.limit*i),Ge);if(a<=0)return[];let o=new URL(n);o.searchParams.set(`q`,e),o.searchParams.set(`maxResults`,String(a)),o.searchParams.set(`orderBy`,`relevance`),o.searchParams.set(`printType`,`books`);let s=await r(o,t);return s===void 0?[]:ot(await s.json())};return async(t,n)=>{let r=De(t);if(r!==void 0){let e=await i(r.id,n);if(e!==void 0)return G([e],{matchedIdentifier:r.identifier})}let o=(0,e.identifierValue)(t.identifiers,`ISBN`);if(o!==void 0){let e=await a(`isbn:${o}`,n,Ke);if(e.length>0)return G(e,{matchedIsbn:o})}let s=it(t);if(s===void 0)return[];let c=`intitle:${s.title}`,l=s.author===void 0?c:`${c} inauthor:${s.author}`,u=await a(l,n,qe);return u.length>0||s.author===void 0?G(u):G(await a(c,n,qe))}},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})}},K=`ProjectGutenberg`,q=t=>{for(let n of t.identifiers??[]){let t=(0,e.identifierValue)([n],K);if(t!==void 0)return{id:t,identifier:{value:n.value,scheme:n.scheme}}}},dt=e=>({key:I(e,`key`),title:I(e,`title`),subtitle:I(e,`subtitle`),author_name:R(e,`author_name`),first_publish_year:L(e,`first_publish_year`),language:R(e,`language`),subject:R(e,`subject`),number_of_pages_median:L(e,`number_of_pages_median`),ratings_average:L(e,`ratings_average`),ratings_count:L(e,`ratings_count`),cover_i:L(e,`cover_i`),id_project_gutenberg:R(e,`id_project_gutenberg`)}),ft=e=>F(e)?z(e,`docs`).map(dt):[],pt={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`},mt=new Set([`mul`,`und`,`zxx`,`sgn`]),ht=e=>{let t=e.trim().toLowerCase();if(t.length!==0&&!mt.has(t))return pt[t]??t},gt=25,_t=`OpenLibrary`,vt=`ProjectGutenberg`,J=e=>e.length>0?e:void 0,yt=(e,t)=>{let{title:n,subtitle:r,language:i,key:a,author_name:o,first_publish_year:s,subject:c,number_of_pages_median:l,ratings_average:u,ratings_count:d,cover_i:f,id_project_gutenberg:p,...m}=e,h=J([...n===void 0?[]:[{value:n}],...r===void 0?[]:[{value:r,type:`subtitle`}]]),g=J([...new Set((i??[]).map(ht).filter(e=>e!==void 0))]),_=[...t.isbn===void 0?[]:[{value:t.isbn,scheme:`ISBN`}],...t.matchedProjectGutenbergIdentifier===void 0?[]:[t.matchedProjectGutenbergIdentifier],...(p??[]).map(e=>({value:e,scheme:vt})),...a===void 0?[]:[{value:a,scheme:_t}]];return P({titles:h,cover:f===void 0?void 0:{uri:`${t.coversBaseUrl}/b/id/${f}-L.jpg`,mediaType:`image/jpeg`,confidence:`derived`},publication:s===void 0?void 0:{original:{date:{year:s}}},languages:g,subjects:J((c??[]).slice(0,25)),contributors:J((o??[]).map(e=>({name:e,roles:[`author`]}))),numberOfPages:l,aggregateRating:Pe(u,d),identifiers:J(_)})},bt=`openLibrary`,xt=`https://openlibrary.org`,St=`https://covers.openlibrary.org`,Ct=[`key`,`title`,`subtitle`,`author_name`,`first_publish_year`,`language`,`subject`,`number_of_pages_median`,`ratings_average`,`ratings_count`,`cover_i`,`id_project_gutenberg`].join(`,`),wt=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}}},Tt=(t={})=>{let n=t.baseUrl??xt,r=t.coversBaseUrl??St,i=async(e,r)=>{let i=new URL(`/search.json`,n);for(let[t,n]of Object.entries(e))i.searchParams.set(t,n);i.searchParams.set(`fields`,Ct),i.searchParams.set(`limit`,String(r.limit));let a=await(t.fetch??globalThis.fetch)(i.toString(),{signal:r.signal,headers:{Accept:`application/json`,...t.userAgent===void 0?{}:{"User-Agent":t.userAgent}}});if(!a.ok)throw new M(a.status,`Open Library search failed with status ${a.status}`);return ft(await a.json())},a=(e,t={})=>e.map(e=>({metadata:yt(e,{coversBaseUrl:r,isbn:t.isbn,matchedProjectGutenbergIdentifier:t.confirmedProjectGutenberg?.identifier}),id:e.key,url:e.key===void 0?void 0:`${n}${e.key}`,raw:e}));return{id:bt,name:`Open Library`,search:async(t,n)=>{let r=(0,e.identifierValue)(t.identifiers,`ISBN`),o=q(t);if(r!==void 0){let e=await i({isbn:r},n);if(e.length>0)return a(e,{isbn:r})}if(o!==void 0){let e=await i({q:`id_project_gutenberg:${o.id}`},n);if(e.length>0)return a(e,{confirmedProjectGutenberg:o})}let s=wt(t);if(s===void 0)return[];let c=await i(s,n);if(c.length>0)return a(c);let l=s.author===void 0?s.title:`${s.title} ${s.author}`;return a(await i({q:l},n))}}},Y=e=>e.includes(`:`)?e.slice(e.lastIndexOf(`:`)+1):e,Et=e=>e.type===`element`,X=(e,t)=>e.children.filter(e=>Et(e)&&Y(e.name).toLowerCase()===t.toLowerCase()),Z=(e,t)=>X(e,t)[0],Q=e=>{let t=e?.val.trim();return t!==void 0&&t.length>0?t:void 0},Dt=(e,t)=>{for(let[n,r]of Object.entries(e.attr)){if(Y(n).toLowerCase()!==t.toLowerCase())continue;let e=r.trim();if(e.length>0)return e}},Ot=(e,t)=>X(e,t).flatMap(e=>{let t=Q(Z(Z(e,`Description`)??e,`value`));return t===void 0?[]:[t]}),kt=e=>{let t=Dt(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},At=e=>{let t=[];for(let n of e.children){if(!Et(n))continue;let e=n.name.toLowerCase()===`dcterms:creator`,r=n.name.toLowerCase().startsWith(`marcrel:`);if(!e&&!r)continue;let i=Q(Z(Z(n,`agent`)??n,`name`));i!==void 0&&t.push({name:i,role:e?`aut`:Y(n.name).toLowerCase()})}return t},jt=e=>X(e,`subject`).flatMap(e=>{let t=Z(e,`Description`),n=t===void 0?void 0:Dt(Z(t,`memberOf`)??t,`resource`),r=Q(t===void 0?void 0:Z(t,`value`));return r!==void 0&&n?.endsWith(`/LCSH`)===!0?[r]:[]}),Mt=e=>{let t=X(e,`hasFormat`).flatMap(e=>{let t=Z(e,`file`);if(t===void 0)return[];let n=Dt(t,`about`),r=X(t,`format`).map(e=>Q(Z(Z(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,Nt=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(Y(t.name).toLowerCase()!==`rdf`)return;let r=Z(t,`ebook`);if(r===void 0)return;let i=kt(r);if(i===void 0)return;let a=[...new Set(Ot(r,`language`))],o=[...new Set(jt(r))],s=[...new Set(Ot(r,`bookshelf`))],c=At(r);return{id:i,title:Q(Z(r,`title`)),publisher:Q(Z(r,`publisher`)),issued:Q(Z(r,`issued`)),originalPublication:Q(Z(r,`marc260`)),rights:Q(Z(r,`rights`)),description:Q(Z(r,`description`)),summary:Q(Z(r,`marc520`)),languages:$(a),subjects:$(o),bookshelves:$(s),contributors:$(c),cover:Mt(r)}},Pt=25,Ft={art:`artist`,aut:`author`,clr:`colorist`,ctb:`contributor`,edt:`editor`,ill:`illustrator`,nrt:`narrator`,trl:`translator`},It=e=>{let t=new Map;for(let n of e.contributors??[]){let e=n.name.trim().toLowerCase(),r=Ft[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},Lt=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}}},Rt=(e,t)=>e.split(`$`).slice(1).flatMap(e=>e[0]?.toLowerCase()===t.toLowerCase()?[e.slice(1).trim()]:[]).filter(e=>e.length>0),zt=e=>{if(e===void 0)return;let t=Rt(e,`b`),n=(t.length===1?t[0]:void 0)?.replace(/[\s,;:/]+$/u,``).trim(),r=Rt(e,`c`),i=[...new Set(r.flatMap(e=>[...e.matchAll(/\d{4}/g)].flatMap(e=>e[0]===void 0?[]:[Number(e[0])])))],a=P({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},Bt=(e,t)=>{try{let n=new URL(e,t);return n.protocol===`http:`||n.protocol===`https:`?n.toString():void 0}catch{return}},Vt=e=>e.length>0?e:void 0,Ht=(e,t)=>{let{id:n,title:r,publisher:i,issued:a,originalPublication:o,rights:s,description:c,summary:l,languages:u,subjects:d,bookshelves:f,contributors:p,cover:m,...h}=e,g=[t.matchedIdentifier,{value:n,scheme:K}].filter((e,t,n)=>n.findIndex(t=>t.value.trim().toLowerCase()===e.value.trim().toLowerCase()&&t.scheme.trim().toLowerCase()===e.scheme.trim().toLowerCase())===t),_=[...new Set([...d??[],...f??[]])].slice(0,25),v=m===void 0?void 0:Bt(m.uri,t.baseUrl),y=v===void 0?void 0:{uri:v,mediaType:m?.mediaType,confidence:`derived`},b=P({date:Lt(a),publisher:i}),x=P({original:zt(o),edition:b.date!==void 0||b.publisher!==void 0?b:void 0});return P({titles:r===void 0?void 0:[{value:r}],publication:x.original!==void 0||x.edition!==void 0?x:void 0,description:l??c,rights:s,languages:Vt([...new Set(u??[])]),subjects:Vt(_),contributors:It(e),identifiers:g,cover:y})},Ut=`projectGutenberg`,Wt=`https://www.gutenberg.org`,Gt=(e={})=>{let t=e.baseUrl??Wt;return{id:Ut,name:`Project Gutenberg`,search:async(n,r)=>{let i=q(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 M(o.status,`Project Gutenberg metadata lookup failed with status ${o.status}`);let s=Nt(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:Ht(s,{baseUrl:t,matchedIdentifier:i.identifier})}]}}},Kt=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=B,exports.GOOGLE_BOOKS_MAX_SUBJECTS=Fe,exports.GOOGLE_BOOKS_PROVIDER_ID=ct,exports.METADATA_MATCH_WEIGHTS=k,exports.MetadataProviderResponseError=M,exports.OPEN_LIBRARY_IDENTIFIER_SCHEME=_t,exports.OPEN_LIBRARY_MAX_SUBJECTS=gt,exports.OPEN_LIBRARY_PROVIDER_ID=bt,exports.PROJECT_GUTENBERG_IDENTIFIER_SCHEME=K,exports.PROJECT_GUTENBERG_MAX_SUBJECTS=Pt,exports.PROJECT_GUTENBERG_PROVIDER_ID=Ut,exports.createGoogleBooksProvider=ut,exports.createOpenLibraryProvider=Tt,exports.createProjectGutenbergProvider=Gt,exports.fetchMetadata=ye,exports.googleBooksCoverUrl=Ve,exports.googleBooksLookupFromInput=De,exports.googleBooksVolumeUrl=We,exports.hasSearchTerms=Kt,exports.marcLanguageToBcp47=ht,exports.metadataAuthors=r,exports.metadataInputFromResolvedArchive=be,exports.normalizeForComparison=l,exports.parseGoogleBooksVolume=H,exports.parseGoogleBooksVolumesResponse=Me,exports.parseOpenLibrarySearchResponse=ft,exports.parseProjectGutenbergRdf=Nt,exports.personNameSimilarity=O,exports.projectGutenbergLookupFromInput=q,exports.resolveGoogleBooksVolume=Ue,exports.resolveOpenLibraryDoc=yt,exports.resolveProjectGutenbergRecord=Ht,exports.responseErrorStatus=N,exports.retryWithBackoff=Ee,exports.scoreMetadataCandidate=pe,exports.textSimilarity=d,exports.titleSimilarity=T,exports.toIsbn13=o;
|
|
2
2
|
//# sourceMappingURL=index.cjs.map
|