@prose-reader/archive-reader 1.359.0 → 1.360.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/index.cjs +1 -1
- package/dist/index/index.cjs.map +1 -1
- package/dist/index/index.js +264 -255
- package/dist/index/index.js.map +1 -1
- package/dist/index.d.ts +2 -0
- package/dist/metadata/opf/identifierScheme.d.ts +7 -0
- package/dist/metadata/opf/identifierScheme.test.d.ts +1 -0
- package/package.json +3 -3
package/dist/index/index.cjs
CHANGED
|
@@ -28,5 +28,5 @@ Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=requi
|
|
|
28
28
|
`)}
|
|
29
29
|
</spine>
|
|
30
30
|
</package>
|
|
31
|
-
`,c=r.map(e=>({dir:!1,basename:(0,n.getUriBasename)(e),encodingFormat:(0,n.detectMimeTypeFromName)(e),uri:e,size:0,...t.n(async()=>(await fetch(e)).blob())}));return e.n({records:[{dir:!1,basename:`content.opf`,uri:`content.opf`,size:0,...t.n(async()=>new Blob([s]))},...c],close:()=>Promise.resolve()})},s=e=>!e.dir,c=e=>e.dir,l=(e,t)=>{let n=e.recordsByUri.get(t);return n&&s(n)?n:void 0},u=e=>(0,n.parseContentType)(e.encodingFormat??``)||(0,n.detectMimeTypeFromName)(e.basename),d=e=>s(e)&&u(e)?.startsWith(`image/`)===!0,f=e=>e.records.filter(s).filter(d),p=async e=>new TextDecoder().decode(await e.arrayBuffer()),m=e=>{let t=e.records.filter(e=>!e.dir).find(e=>e.uri.endsWith(`.opf`));return{data:t,basePath:t?.uri.substring(0,t.uri.lastIndexOf(`/`))||``}},h=e=>e===void 0||e.trim().length===0?[]:e.trim().split(/\s+/).filter(e=>e.length>0),g=e=>{let t=h(e);if(t.length===0)return{};let n;t.includes(`rendition:layout-reflowable`)&&(n=`reflowable`),t.includes(`rendition:layout-pre-paginated`)&&(n=`pre-paginated`);let r;return t.includes(`rendition:flow-auto`)&&(r=`auto`),t.includes(`rendition:flow-paginated`)&&(r=`paginated`),t.includes(`rendition:flow-scrolled-doc`)&&(r=`scrolled-doc`),t.includes(`rendition:flow-scrolled-continuous`)&&(r=`scrolled-continuous`),{...n===void 0?{}:{renditionLayout:n},...r===void 0?{}:{renditionFlow:r},...t.includes(`page-spread-left`)?{pageSpreadLeft:!0}:{},...t.includes(`page-spread-right`)?{pageSpreadRight:!0}:{}}},_=e=>e.includes(`:`)?e.slice(e.lastIndexOf(`:`)+1):e,v=(e,t)=>_(e).toLowerCase()===t.toLowerCase(),y=e=>e.type===`element`,b=(e,t)=>{for(let n of e.children)if(y(n)&&v(n.name,t))return n},x=(e,t)=>{let n=[];for(let r of e.children)y(r)&&v(r.name,t)&&n.push(r);return n},ee=(e,t)=>{let n=[];return e.eachChild(e=>{if(_(e.name).toLowerCase()!==`identifier`)return;let r=e.val.trim();if(r.length===0)return;let i=(e.attr[`opf:scheme`]??e.attr[`opf:Scheme`]??e.attr.scheme)?.trim(),a=e.attr.id?.trim(),o=a!==void 0&&a.length>0?a:void 0;n.push({value:r,...i!==void 0&&i.length>0?{scheme:i}:{},...o===void 0?{}:{id:o},...o!==void 0&&o===t?{unique:!0}:{}})}),n},S=e=>{let t=[];return e.eachChild(e=>{if(_(e.name).toLowerCase()!==`title`)return;let n=e.val.trim();if(n.length===0)return;let r=e.attr.id?.trim();t.push({value:n,...r!==void 0&&r.length>0?{id:r}:{}})}),t},C=(e,t)=>{let n;return e.eachChild(e=>{if(n!==void 0||_(e.name).toLowerCase()!==t.toLowerCase())return;let r=e.val.trim();r.length>0&&(n=r)}),n},w=(e,t)=>{let n=[];return e.eachChild(e=>{if(_(e.name).toLowerCase()!==t.toLowerCase())return;let r=e.val.trim();r.length>0&&n.push(r)}),n},T=e=>{let t;return e.eachChild(e=>{if(t!==void 0||_(e.name).toLowerCase()!==`meta`||e.attr.name?.toLowerCase()!==`cover`)return;let n=e.attr.content?.trim();n!==void 0&&n.length>0&&(t=n)}),t},E=({manifestItems:e,metadataEl:t})=>{let n=e=>e.mediaType?.toLowerCase().includes(`image/`)===!0,r=e.find(e=>n(e)?h(e.properties).includes(`cover-image`):!1);if(r!==void 0)return r.href;if(t!==void 0){let r=T(t);if(r!==void 0){let t=e.find(e=>e.id===r&&n(e));if(t!==void 0)return t.href}}return e.find(e=>e.id.toLowerCase().includes(`cover`)&&n(e))?.href},D=(e,t)=>{let n=e.attr[t]?.trim();return n!==void 0&&n.length>0?n:void 0},O=e=>{let t=[];return e.eachChild(e=>{if(_(e.name).toLowerCase()!==`meta`)return;let n=D(e,`property`),r=D(e,`refines`),i=D(e,`scheme`),a=D(e,`id`),o=D(e,`name`),s=D(e,`content`),c=e.val.trim(),l=c.length>0?c:void 0,u={...n===void 0?{}:{property:n},...r===void 0?{}:{refines:r},...i===void 0?{}:{scheme:i},...a===void 0?{}:{id:a},...o===void 0?{}:{name:o},...s===void 0?{}:{content:s},...l===void 0?{}:{value:l}};Object.keys(u).length!==0&&t.push(u)}),t},k=(e,t)=>e.replace(/^#/,``)===t,te=(e,t)=>{let n=[];return e.eachChild(e=>{let r=_(e.name).toLowerCase();if(r!==`creator`&&r!==`contributor`)return;let i=e.val.trim();if(i.length===0)return;let a=D(e,`id`),o=e=>a===void 0?[]:t.flatMap(t=>t.refines!==void 0&&k(t.refines,a)&&t.property===e&&t.value!==void 0?[t.value]:[]),s=D(e,`opf:role`)??D(e,`role`),c=[...s===void 0?[]:[s],...o(`role`)],l=D(e,`opf:file-as`)??D(e,`file-as`)??o(`file-as`)[0];n.push({name:i,source:r,...a===void 0?{}:{id:a},roles:c,...l===void 0?{}:{fileAs:l}})}),n},A=(e,t)=>{let n=x(e,`meta`).find(e=>e.attr.property===t)?.val;if(!(n===void 0||n.trim().length===0))return n},ne=e=>{let t=b(e,`guide`);if(t===void 0)return[];let n=[];for(let e of x(t,`reference`)){let t=e.attr.href?.trim();t===void 0||t.length===0||n.push({href:t,title:e.attr.title?.trim()??``,type:e.attr.type?.trim()??``})}return n},j=e=>{let t=e.attr.id,n=e.attr.href;if(t===void 0||t.length===0||n===void 0||n.length===0)return;let r=e.attr[`media-type`],i=e.attr.properties?.trim();return{id:t,href:n,...r!==void 0&&r.length>0?{mediaType:r}:{},...i!==void 0&&i.length>0?{properties:i}:{}}},re=e=>{let t=[],n=new Map;for(let r of x(e,`item`)){let e=j(r);e!==void 0&&(t.push(e),n.set(e.id,e))}return{items:t,byId:n}},ie=(e,t)=>{let n=[];for(let r of x(t,`itemref`)){let t=r.attr.idref;if(t===void 0||t.trim().length===0)continue;let i=e.get(t);if(i===void 0)continue;let a=g(r.attr.properties);n.push({idref:t,id:i.id,href:i.href,...i.mediaType===void 0?{}:{mediaType:i.mediaType},...i.properties===void 0?{}:{properties:i.properties},...a.renditionLayout===void 0?{}:{renditionLayout:a.renditionLayout},...a.renditionFlow===void 0?{}:{renditionFlow:a.renditionFlow},...a.pageSpreadLeft===void 0?{}:{pageSpreadLeft:a.pageSpreadLeft},...a.pageSpreadRight===void 0?{}:{pageSpreadRight:a.pageSpreadRight}})}return n},M=e=>{let t=new r.XmlDocument(e),n=b(t,`manifest`),i=b(t,`spine`),a=b(t,`metadata`),o=t.attr[`unique-identifier`]?.trim(),s=o!==void 0&&o.length>0?o:void 0,c=[],l=[];if(n!==void 0){let{items:e,byId:t}=re(n);c=e,i!==void 0&&(l=ie(t,i))}let u=i?.attr[`page-progression-direction`],d=u!==void 0&&u.trim().length>0?u:void 0,f=i?.attr.toc,p=f!==void 0&&f.trim().length>0?f.trim():void 0,m=[],h,g,_,v,y=[],x=[],T=[],D=[],k,j,M,N=[],P=[];a!==void 0&&(m=S(a),h=C(a,`publisher`),g=C(a,`description`),_=C(a,`rights`),v=C(a,`date`),y=w(a,`creator`),T=w(a,`language`),D=w(a,`subject`),k=A(a,`rendition:layout`),j=A(a,`rendition:flow`),M=A(a,`rendition:spread`),N=O(a),x=te(a,N),P.push(...ee(a,s)));let ae=E({manifestItems:c,metadataEl:a}),F=ne(t);return{kind:`opf`,manifestItems:c,spineRows:l,spineTocIdref:p,identifiers:P,titles:m,creators:y,contributors:x,publisher:h,description:g,rights:_,languages:T,subjects:D,date:v,coverHref:ae,renditionLayoutMeta:k,renditionFlowMeta:j,renditionSpreadMeta:M,pageProgressionDirection:d,guide:F,metas:N}};async function N(e){let{data:t,basePath:n}=m(e)||{};if(!(!t||t.dir))return{opf:M(await p(t)),basePath:n}}var P=`com.apple.ibooks.display-options.xml`,ae=e=>e.childrenNamed(`option`).map(e=>({name:e.attr?.name,value:e.val})),F=e=>{let t=new r.XmlDocument(e);if(t.name?.toLowerCase()!==`display_options`)return{kind:`apple`};let n=t.childNamed(`platform`);return{kind:`apple`,displayOptions:{...n===void 0?{}:{platform:{options:ae(n)}}}}},I=`ComicInfo.xml`,oe=`AgeRating.AlternateCount.AlternateNumber.AlternateSeries.BlackAndWhite.Characters.Colorist.CommunityRating.Count.CoverArtist.Day.Editor.Format.Genre.GTIN.Imprint.Inker.LanguageISO.Letterer.Locations.MainCharacterOrTeam.Manga.Month.Notes.Number.PageCount.Penciller.Publisher.Review.ScanInformation.Series.SeriesGroup.StoryArc.StoryArcNumber.Summary.Tags.Teams.Title.Translator.Volume.Web.Writer.Year`.split(`.`),se=new Set([`Pages`,`ComicInfo`]),ce=e=>e.children.some(e=>e.type===`element`),le=e=>{let t=e.val.trim();return t.length>0?t:void 0},ue=e=>{let t;try{t=new r.XmlDocument(e)}catch(e){let t=e instanceof Error?e.message:String(e);throw Error(`${I} is malformed: ${t}`,{cause:e})}let n={};return t.eachChild(e=>{if(e.type!==`element`||se.has(e.name)||ce(e))return;let t=le(e);t!==void 0&&n[e.name]===void 0&&(n[e.name]=t)}),{kind:`comicInfo`,...n}},de=`com.kobobooks.display-options.xml`,fe=e=>{let t=e.childNamed(`platform`);if(!t)return{};for(let e of t.childrenNamed(`option`))if(e.attr?.name===`fixed-layout`)return e.val.trim().toLowerCase()===`true`?{renditionLayout:`pre-paginated`}:{};return{}},pe=e=>{let t=new r.XmlDocument(e);return t.name?.toLowerCase()===`display_options`?{kind:`kobo`,...fe(t)}:{kind:`kobo`}},L=e=>{let t=Object.entries(e).filter(([,e])=>e!==void 0);return Object.fromEntries(t)},me=e=>{let t=[];for(let n of e.split(`/`))if(n!==`.`){if(n===`..`){t.pop();continue}t.push(n)}return t.join(`/`)},he=(e,t)=>/^https?:\/\//.test(e)?e:me(t?`${t}/${e}`:e),ge=e=>{let t=e?.trim().toLowerCase();return t===`reflowable`||t===`pre-paginated`?t:void 0},_e=(e,{opf:t,basePath:n})=>{let r=ge(t.renditionLayoutMeta),i=t.spineRows.map(t=>{let r=he(t.href,n);return{row:t,uri:r,record:l(e,r)}}),a=i.reduce((e,{record:t})=>e+(t?.size??0),0);return i.map(({row:e,uri:n,record:i})=>L({uri:n,id:e.id,mediaType:e.mediaType??i?.encodingFormat,size:i?.size,renditionLayout:e.renditionLayout??r,renditionFlow:e.renditionFlow,pageSpreadLeft:e.pageSpreadLeft,pageSpreadRight:e.pageSpreadRight,progressionWeight:a>0?(i?.size??0)/a:1/t.spineRows.length}))},ve=I.toLowerCase(),ye=P.toLowerCase(),be=e=>{let t=e.basename.toLowerCase();return t===ve||t===ye||e.uri.endsWith(`com.kobobooks.display-options.xml`)||t.endsWith(`.db`)},xe=e=>{let t=e.records.filter(s).filter(e=>!be(e));return t.map(e=>{let r=(0,n.parseContentType)(e.encodingFormat??``)||(0,n.detectMimeTypeFromName)(e.basename);return L({uri:e.uri,mediaType:r,size:e.size,renditionLayout:r!==void 0&&(0,n.isMediaContentMimeType)(r)?`pre-paginated`:void 0,progressionWeight:1/t.length})})},R=async(e,{opf:t}={})=>{let n=t??await N(e).catch(()=>void 0);return n?_e(e,n):xe(e)},Se=(e,t)=>{let r=l(e,t);if(r!==void 0)return(0,n.parseContentType)(r.encodingFormat??``)||(0,n.detectMimeTypeFromName)(r.basename)},Ce=async(e,{opf:t,readingOrder:n}={})=>{let r=t??await N(e).catch(()=>void 0);if(r!==void 0&&r.opf.coverHref!==void 0){let t=he(r.opf.coverHref,r.basePath);return L({uri:t,mediaType:Se(e,t),confidence:`derived`})}let i=(n??await R(e,{opf:r})).find(e=>e.mediaType?.startsWith(`image/`)===!0);if(i!==void 0)return L({uri:i.uri,mediaType:i.mediaType,confidence:`assumed`})},we=e=>{let t=e.descendantWithPath(`head`)?.childrenNamed(`meta`).find(e=>e.attr.name===`viewport`);return!!(t&&t.attr.name===`viewport`)},Te=async(t,i)=>{if(i.length===0)return!1;for(let a of i){if(!(0,n.isXmlBasedMimeType)({mimeType:a.mediaType,uri:a.uri}))return!1;let i=l(t,a.uri);if(!i||!s(i))return!1;try{let e=await p(i);if(!we(new r.XmlDocument(e)))return!1}catch(t){return e.r.error(`layout scan: unable to inspect ${a.uri}`,t),!1}}return!0},Ee=P.toLowerCase();async function De(e){let t=e.records.find(e=>s(e)&&e.basename.toLowerCase()===Ee);if(t)return F(await p(t))}var Oe=I.toLowerCase(),ke=e=>e.records.find(e=>s(e)&&e.basename.toLowerCase()===Oe),Ae=[`Unknown`,`No`,`Yes`,`YesAndRightToLeft`],je=e=>{for(let t of Ae)if(t===e)return!0;return!1};async function Me(e){let t=ke(e);if(t)return ue(await p(t))}async function Ne(t){let n=t.records.filter(e=>s(e)&&e.uri.endsWith(`com.kobobooks.display-options.xml`));if(n.length===0)return;let r;for(let t of n){let n=await p(t);try{let{renditionLayout:e}=pe(n);e&&(r=e)}catch(n){e.r.error(`Unable to parse ${de} (${t.uri})`,n)}}return{kind:`kobo`,...r===void 0?{}:{renditionLayout:r}}}var Pe=async({archive:e,archiveOpf:t})=>{if(!t)return[];let{opf:n,basePath:r}=t,{spineRows:i}=n;return e.records.filter(e=>i.find(t=>r?`${r}/${t.href}`===e.uri:`${t.href}`===e.uri))},Fe=e=>e.toLowerCase().endsWith(`.opf`),Ie=e=>e.records.some(e=>!e.dir&&(Fe(e.basename)||Fe(e.uri))),Le=e=>{let t=e.displayOptions?.platform?.options,n=t?.find(e=>e.name===`fixed-layout`)?.value.trim().toLowerCase(),r=n===`true`||n!==`false`&&void 0,i=L({fixedLayout:r,options:t!==void 0&&t.length>0?t.map(({name:e,value:t})=>L({name:e,value:t})):void 0});return L({renditionLayout:r===!0?`pre-paginated`:void 0,apple:Object.keys(i).length>0?i:void 0})},Re=e=>{switch(e.Manga){case`YesAndRightToLeft`:return`rtl`;case`Yes`:case`No`:return`ltr`;default:return}},z=e=>{if(e===void 0)return;let t=e.trim();return t.length>0?t:void 0},B=e=>e===void 0?[]:e.split(`,`).map(e=>e.trim()).filter(e=>e.length>0),V=e=>{let t=z(e);if(t===void 0||!/^\d+$/.test(t))return;let n=Number.parseInt(t,10);return Number.isFinite(n)?n:void 0},H=e=>{let t=z(e);if(t===void 0||!/^\d+(\.\d+)?$/.test(t))return;let n=Number.parseFloat(t);return Number.isFinite(n)?n:void 0},ze=e=>{let t=z(e)?.toLowerCase();if(t===`yes`)return!0;if(t===`no`)return!1},Be=e=>{switch(e.Manga){case`Yes`:case`YesAndRightToLeft`:return!0;case`No`:return!1;default:return}},Ve=e=>{let t=V(e.Year),n=V(e.Month),r=V(e.Day);if(!(t===void 0&&n===void 0&&r===void 0))return{...t===void 0?{}:{year:t},...n===void 0?{}:{month:n},...r===void 0?{}:{day:r}}},He=[[`Writer`,`author`],[`Penciller`,`penciler`],[`Inker`,`inker`],[`Colorist`,`colorist`],[`Letterer`,`letterer`],[`CoverArtist`,`coverArtist`],[`Editor`,`editor`],[`Translator`,`translator`]],Ue=e=>{let t=new Map;for(let[n,r]of He)for(let i of B(e[n])){let e=t.get(i);e?e.roles.includes(r)||e.roles.push(r):t.set(i,{name:i,roles:[r]})}return[...t.values()]},We=e=>{let t=L({name:z(e.Series),position:H(e.Number),total:V(e.Count)});return Object.keys(t).length>0?t:void 0},Ge=e=>{let t=z(e.AlternateSeries);if(t!==void 0)return L({name:t,position:H(e.AlternateNumber),total:V(e.AlternateCount)})},Ke=e=>{let t=B(e.StoryArc);if(t.length===0)return[];let n=B(e.StoryArcNumber);return t.map((e,t)=>L({name:e,position:H(n[t])}))},U=e=>e.length>0?e:void 0,qe=e=>(e.Web??``).split(/\s+/).filter(e=>e.length>0),Je=e=>{try{let t=new URL(e);return(t.protocol===`http:`||t.protocol===`https:`)&&t.hostname.length>0}catch{return!1}},Ye=e=>e.filter((e,t,n)=>Je(e)&&n.indexOf(e)===t).map(e=>({value:e,scheme:`URL`})),Xe=(e,t)=>{let n=L({manga:Be(e),blackAndWhite:ze(e.BlackAndWhite),volume:V(e.Volume),format:z(e.Format),ageRating:z(e.AgeRating),notes:z(e.Notes),review:z(e.Review),web:U(t),scanInformation:z(e.ScanInformation),mainCharacterOrTeam:z(e.MainCharacterOrTeam),characters:U(B(e.Characters)),teams:U(B(e.Teams)),locations:U(B(e.Locations)),storyArcs:U(Ke(e)),alternateSeries:Ge(e)});return Object.keys(n).length>0?n:void 0},Ze=e=>{let t=H(e.CommunityRating);return t!==void 0&&t<=5?{value:t}:void 0},Qe=e=>{let t=We(e),n=U(B(e.SeriesGroup).map(e=>({name:e})));if(!(t===void 0&&n===void 0))return L({series:t===void 0?void 0:[t],collection:n})},$e=e=>{let t=e.GTIN,n=z(t),r=qe(e),i=[...n===void 0?[]:[{value:n,scheme:`GTIN`}],...Ye(r)],a=z(e.LanguageISO),o=[...B(e.Genre),...B(e.Tags)],s=L({date:Ve(e),publisher:z(e.Publisher),imprint:z(e.Imprint)}),c=z(e.Title);return L({titles:c===void 0?void 0:[{value:c}],description:z(e.Summary),publication:s.date!==void 0||s.publisher!==void 0||s.imprint!==void 0?{edition:s}:void 0,languages:a===void 0?void 0:[a],subjects:U(o),contributors:U(Ue(e)),readingDirection:Re(e),numberOfPages:V(e.PageCount),aggregateRating:Ze(e),identifiers:U(i),belongsTo:Qe(e),comicInfo:Xe(e,r)})},et=e=>L({renditionLayout:e.renditionLayout,kobo:e.renditionLayout===void 0?void 0:{fixedLayout:e.renditionLayout===`pre-paginated`}}),tt=/[0-9Xx]+/g,nt=/^(?:97[89])?\d{9}[\dXx]$/,rt=e=>{if(e==null)return;let t=String(e).trim().replace(/^urn:isbn:/i,``).replace(/^isbn[:\s-]*/i,``),n=t.replace(/[^0-9Xx]/g,``);if(n.length===10||n.length===13)return n.toUpperCase();for(let e of t.match(tt)??[])if(nt.test(e))return e.toUpperCase()},it=e=>{let t=rt(e);if(t!==void 0)return t.length===10||/^97[89]/.test(t)?t:void 0},at=new Set([8,12,13,14]),W=e=>{if(e==null)return;let t=String(e).replace(/\D/g,``);if(!(t.length===0||!at.has(t.length)))return t},ot=new Map(Object.entries({isbn:`ISBN`,gtin:`GTIN`,doi:`DOI`,googlebooks:`GoogleBooks`,openlibrary:`OpenLibrary`,projectgutenberg:`ProjectGutenberg`,url:`URL`,unknown:`Unknown`})),G=e=>{let t=e.trim();return ot.get(t.toLowerCase())??t},st=e=>{if(e===void 0)return;let t=e.trim().match(/^(\d{4})(?:-(\d{2})(?:-(\d{2}))?)?/);if(t===null)return;let[,n,r,i]=t;return{...n===void 0?{}:{year:Number.parseInt(n,10)},...r===void 0?{}:{month:Number.parseInt(r,10)},...i===void 0?{}:{day:Number.parseInt(i,10)}}},ct=e=>{let t=e.trim();if(/^https?:\/\//i.test(t))try{let e=new URL(t);if((e.protocol===`http:`||e.protocol===`https:`)&&e.hostname.length>0)return`URL`}catch{}return it(t)===void 0?W(t)===void 0?`Unknown`:`GTIN`:`ISBN`},lt={art:`artist`,aut:`author`,clr:`colorist`,ctb:`contributor`,edt:`editor`,ill:`illustrator`,nrt:`narrator`,trl:`translator`},ut=e=>e.map(e=>{let t=e.roles.map(e=>lt[e.trim().toLowerCase()]??e);return L({name:e.name,roles:t.length>0?t:[e.source===`creator`?`author`:`contributor`],sortAs:e.fileAs})}),K=(e,t)=>e.refines!==void 0&&e.refines.replace(/^#/,``)===t,dt={"02":`ISBN`,"03":`GTIN`,"04":`UPC`,"05":`ISMN`,"06":`DOI`,13:`LCCN`,14:`GTIN`,15:`ISBN`,22:`URN`,23:`OCLC`,24:`ISBN`,25:`ISMN`,26:`DOI`,34:`GTIN`,35:`ARK`},ft=e=>{let t=e?.value?.trim();if(!(t===void 0||t.length===0))return e?.scheme?.trim().toLowerCase()===`onix:codelist5`?dt[t]??t:t},pt=(e,t)=>{let n=e.id;if(n!==void 0)return ft(t.find(e=>e.property===`identifier-type`&&K(e,n)&&e.value!==void 0))},mt=e=>{let t=e?.trim();if(t===void 0||!/^\d+(\.\d+)?$/.test(t))return;let n=Number.parseFloat(t);return Number.isFinite(n)?n:void 0},ht=e=>{let t=e?.trim();if(t===void 0||!/^\d+$/.test(t))return;let n=Number.parseInt(t,10);return Number.isFinite(n)?n:void 0},q=e=>{let t=e?.trim();return t!==void 0&&t.length>0?t:void 0},J=(e,t,n)=>t===void 0?void 0:e.find(e=>K(e,t)&&e.property===n&&e.value!==void 0)?.value,gt=(e,t)=>e.map(e=>L({value:e.value,type:q(J(t,e.id,`title-type`))?.toLowerCase(),displaySeq:ht(J(t,e.id,`display-seq`)),sortAs:q(J(t,e.id,`file-as`))})),_t=(e,t)=>{if(t===void 0)return;let n=e.flatMap(n=>{if(!K(n,t)||n.property!==`dcterms:identifier`)return[];let r=q(n.value);return r===void 0?[]:[{value:r,scheme:G(ft(e.find(e=>n.id!==void 0&&K(e,n.id)&&e.property===`identifier-type`))??ct(r))}]});return n.length>0?n:void 0},vt=e=>{let t=[],n=[];for(let r of e){if(r.property!==`belongs-to-collection`||r.value===void 0)continue;let i=r.id,a=t=>J(e,i,t),o=a(`collection-type`)?.trim().toLowerCase(),s=L({name:r.value,identifiers:_t(e,i),position:mt(a(`group-position`))});o===`series`?t.push(s):n.push(s)}if(t.length===0){let n=e.find(e=>e.name?.toLowerCase()===`calibre:series`&&e.content!==void 0)?.content;n!==void 0&&t.push(L({name:n,position:mt(e.find(e=>e.name?.toLowerCase()===`calibre:series_index`)?.content)}))}return{series:t,collection:n}},yt=e=>{let t=e?.trim();if(t===`scrolled-continuous`||t===`scrolled-doc`||t===`paginated`||t===`auto`)return t},bt=e=>{let t=e?.trim();if(t===`none`||t===`landscape`||t===`portrait`||t===`both`||t===`auto`)return t},xt=e=>{let{titles:t,contributors:n,publisher:r,description:i,rights:a,languages:o,subjects:s,date:c,renditionLayoutMeta:l,renditionFlowMeta:u,renditionSpreadMeta:d,pageProgressionDirection:f,identifiers:p,metas:m,kind:h,creators:g,manifestItems:_,spineRows:v,spineTocIdref:y,coverHref:b,guide:x,...ee}=e,S=f?.trim().toLowerCase(),C=S===`ltr`||S===`rtl`?S:void 0,w=l?.trim().toLowerCase(),T=w===`reflowable`||w===`pre-paginated`?w:void 0,E=ut(n),D=gt(t,m),{series:O,collection:k}=vt(m),te=O.length>0||k.length>0?L({series:O.length>0?O:void 0,collection:k.length>0?k:void 0}):void 0,A=L({date:st(c),publisher:r});return L({titles:D.length>0?D:void 0,description:i,publication:A.date!==void 0||A.publisher!==void 0?{edition:A}:void 0,rights:a,languages:o.length>0?[...o]:void 0,subjects:s.length>0?[...s]:void 0,contributors:E.length>0?E:void 0,readingDirection:C,renditionLayout:T,renditionFlow:yt(u),renditionSpread:bt(d),identifiers:p.length>0?p.map(e=>L({value:e.value,scheme:G(e.scheme??pt(e,m)??ct(e.value)),unique:e.unique})):void 0,belongsTo:te,properties:m.length>0?[...m]:void 0})},St=e=>e.kind===`comicInfo`?$e(e):e.kind===`kobo`?et(e):e.kind===`apple`?Le(e):xt(e),Ct=e=>{let t=e.opf===void 0?void 0:xt(e.opf),n=e.comicInfo===void 0?void 0:$e(e.comicInfo),r=e.apple===void 0?void 0:Le(e.apple),i=e.kobo===void 0?void 0:et(e.kobo),a=[...t?.identifiers??[],...n?.identifiers??[]],o=L({date:t?.publication?.edition?.date??n?.publication?.edition?.date,publisher:t?.publication?.edition?.publisher??n?.publication?.edition?.publisher,imprint:t?.publication?.edition?.imprint??n?.publication?.edition?.imprint});return L({titles:t?.titles??n?.titles,description:t?.description??n?.description,publication:o.date!==void 0||o.publisher!==void 0||o.imprint!==void 0?{edition:o}:void 0,rights:t?.rights,languages:t?.languages??n?.languages,subjects:t?.subjects??n?.subjects,contributors:t?.contributors??n?.contributors,readingDirection:n?.readingDirection??t?.readingDirection,renditionLayout:t?.renditionLayout??r?.renditionLayout??i?.renditionLayout,renditionFlow:t?.renditionFlow,renditionSpread:t?.renditionSpread,numberOfPages:n?.numberOfPages,aggregateRating:n?.aggregateRating,identifiers:a.length>0?a:void 0,belongsTo:t?.belongsTo??n?.belongsTo,properties:t?.properties,comicInfo:n?.comicInfo,apple:r?.apple,kobo:i?.kobo})},wt=e=>{let t=[...e.records].sort((e,t)=>(0,n.sortByTitleComparator)(e.uri,t.uri)),r=(e,t,n,i,a)=>{let o=e.find(e=>e.title===t),[s,...c]=n;return o?s?[...e.filter(e=>e!==o),{...o,contents:r(o.contents,s,c,i,a)}]:o.path.split(`/`).length>a.split(`/`).length?[...e.filter(e=>e!==o),{...o,path:a,containerHref:i}]:e:s?[...e,{contents:r([],s,c,i,a),containerHref:i,path:a,title:t}]:[...e,{contents:[],containerHref:i,path:a,title:t}]};return t.reduce((e,t)=>{if(t.dir)return e;let[n,...i]=t.uri.split(`/`).slice(0,-1);if(!n)return e;let a=encodeURI(t.uri).replace(/#/g,`%23`).replace(/\?/g,`%3F`).replace(/\/$/,``),o=t.uri.replace(/\/$/,``);return r(e,n,i,a,o)},[])},Tt=e=>e?e.children.map(e=>e instanceof r.XmlTextNode?e.text:e instanceof r.XmlElement?Tt(e):``).join(``).trim():``,Et=e=>h(e.properties).includes(`nav`),Dt=(e,{basePath:t})=>{let r={contents:[],path:``,containerHref:``,title:``},i=e.childNamed(`span`)||e.childNamed(`a`);r.title=(i?.attr.title||i?.val.trim()||Tt(i))??``;let a=i?.name;a!==`a`&&(i=e.descendantWithPath(`${a}.a`),i&&(a=i.name.toLowerCase())),a===`a`&&i?.attr.href&&(r.path=(0,n.urlJoin)(t,i.attr.href),r.containerHref=r.path);let o=e.childNamed(`ol`);if(o){let e=o.childrenNamed(`li`);e&&e.length>0&&(r.contents=e.map(e=>Dt(e,{basePath:t})))}return r},Ot=(e,{basePath:t})=>{let n=[],i;return e.descendantWithPath(`body.nav.ol`)?i=e.descendantWithPath(`body.nav.ol`)?.children:e.descendantWithPath(`body.section.nav.ol`)&&(i=e.descendantWithPath(`body.section.nav.ol`)?.children),i&&i.length>0&&i.filter(e=>e instanceof r.XmlElement&&e.name===`li`).forEach(e=>{n.push(Dt(e,{basePath:t}))}),n},kt=async(e,t)=>{let i=e.manifestItems.find(Et);if(i?.href){let e=t.records.find(e=>e.uri.endsWith(i.href));if(e&&!e.dir)return Ot(new r.XmlDocument(await p(e)),{basePath:(0,n.getUriBasePath)(e.uri)})}},At=(e,{basePath:t,prefix:r})=>{let i=(0,n.urlJoin)(t,e?.childNamed(`${r}content`)?.attr.src||``),a={title:e?.descendantWithPath(`${r}navLabel.${r}text`)?.val||``,path:i,containerHref:i,contents:[]},o=e.childrenNamed(`${r}navPoint`);return o&&o.length>0&&(a.contents=o.map(e=>At(e,{basePath:t,prefix:r}))),a},jt=(e,{basePath:t})=>{let n=[],r=e.name,i=``;return r.indexOf(`:`)!==-1&&(i=`${r.split(`:`)[0]}:`),e.childNamed(`${i}navMap`)?.childrenNamed(`${i}navPoint`).forEach(e=>{n.push(At(e,{basePath:t,prefix:i}))}),n},Mt=async({opf:e,opfBasePath:t,archive:i})=>{let a=e.spineTocIdref;if(a){let o=e.manifestItems.find(e=>e.id===a);if(o){let e=`${t}${t===``?``:`/`}${o.href}`,a=i.records.find(t=>t.uri.endsWith(e));if(a&&!a.dir)return jt(new r.XmlDocument(await p(a)),{basePath:(0,n.getUriBasePath)(a.uri)})}}},Nt=async(e,{opf:t}={})=>{let n=t??await N(e);if(n)return await kt(n.opf,e)||await Mt({opf:n.opf,opfBasePath:n.basePath,archive:e})||[];let r=wt(e);return r.length===0?void 0:r},Pt=[`metadata`,`readingOrder`,`toc`],Y=async(t,n)=>{try{return{value:await t(),failed:!1}}catch(t){return e.r.error(`resolveArchive: unable to read ${n}`,t),{value:void 0,failed:!0}}},Ft=e=>{let t=e=>e?.startsWith(`audio/`)===!0||e?.startsWith(`video/`)===!0,n=e.filter(e=>e.renditionLayout===`pre-paginated`&&!t(e.mediaType)).length;return n>0?n:void 0},It=({archive:e,opf:t,comicInfo:n,apple:r,kobo:i})=>{let a=[];return t!==void 0&&t.value===void 0&&(t.failed||Ie(e))&&a.push(`opf`),n?.failed&&a.push(`comicInfo`),r?.failed&&a.push(`apple`),i?.failed&&a.push(`kobo`),a},Lt=3,Rt=async(e,t={})=>{let n=new Set(t.include??Pt),r=n.has(`metadata`),i=n.has(`sources`),a=n.has(`readingOrder`),o=n.has(`toc`),s=t.layoutScan===!0&&(r||a),c=r||i||a||o?await Y(()=>N(e),`opf`):void 0,l=c?.value,u=r||i||s,d=u?await Y(()=>Me(e),`comicInfo`):void 0,f=d?.value,p=u?await Y(()=>De(e),`apple`):void 0,m=p?.value,h=u?await Y(()=>Ne(e),`kobo`):void 0,g=h?.value,_=r||s?Ct({opf:l?.opf,comicInfo:f,apple:m,kobo:g}):void 0,v=a||s?await R(e,{opf:l}):void 0;if(s&&_!==void 0&&v!==void 0&&_.renditionLayout===`reflowable`&&v.every(e=>e.renditionLayout===`reflowable`)&&await Te(e,v)&&(_={..._,renditionLayout:`pre-paginated`},v=v.map(e=>({...e,renditionLayout:`pre-paginated`}))),r&&_!==void 0){let t=v??await R(e,{opf:l}),n=await Ce(e,{opf:l,readingOrder:t}),r=_.numberOfPages??Ft(t);_=L({..._,cover:n,numberOfPages:r})}let y=o?(await Y(()=>Nt(e,{opf:l}),`toc`)).value:void 0,b={version:Lt,unreadableSources:It({archive:e,opf:c,comicInfo:d,apple:p,kobo:h})};return r&&_!==void 0&&(b.metadata=_),a&&v!==void 0&&(b.readingOrder=v),o&&y!==void 0&&(b.toc=y),i&&(b.sources=L({opf:l,comicInfo:f,apple:m,kobo:g})),b},zt=e=>{let t=e.trim().toLowerCase();return t===`url`||t===`uri`||t===`unknown`},Bt=e=>{try{return decodeURIComponent(e)}catch{return}},Vt=e=>{try{let t=new URL(e.trim());return t.protocol===`http:`||t.protocol===`https:`?t:void 0}catch{return}},X=(e,t)=>{let n=Vt(e);return n!==void 0&&t(n.hostname.toLowerCase())?n:void 0},Ht=/^books\.google\.(?:com|[a-z]{2}|com\.[a-z]{2}|co\.[a-z]{2})$/i,Ut=new Set([`books.googleapis.com`,`www.googleapis.com`]),Wt=/^\/books\/v1\/volumes\/([^/]+)\/?$/i,Z=e=>{let t=e.trim();return/^[a-z0-9_-]+$/i.test(t)?t:void 0},Gt=e=>{let t=X(e,e=>Ht.test(e)||Ut.has(e));if(t!==void 0){if(Ut.has(t.hostname.toLowerCase())){let e=Wt.exec(t.pathname)?.[1],n=e===void 0?void 0:Bt(e);return n===void 0?void 0:Z(n)}return Z(t.searchParams.get(`id`)??``)}},Kt=new Set([`gutenberg.org`,`www.gutenberg.org`]),qt=[/^\/ebooks\/(\d+)(?:[./]|$)/i,/^\/files\/(\d+)(?:\/|$)/i,/^\/cache\/epub\/(\d+)(?:\/|$)/i,/^\/(\d+)(?:\/|$)/],Jt=e=>{let t=e.trim();if(!/^\d+$/.test(t))return;let n=t.replace(/^0+(?=\d)/,``);return n===`0`?void 0:n},Yt=e=>{let t=X(e,e=>Kt.has(e));if(t!==void 0)for(let e of qt){let n=e.exec(t.pathname)?.[1];if(n!==void 0)return Jt(n)}},Xt=new Set([`openlibrary.org`,`www.openlibrary.org`]),Zt=/^\/(works|books|authors)\/(OL\d+[A-Z])(?:\/|$)/i,Qt=/^OL\d+([MWA])$/i,$t={M:`books`,W:`works`,A:`authors`},en=e=>{let t=e.trim(),n=Zt.exec(t);if(n?.[1]!==void 0&&n[2]!==void 0)return`/${n[1].toLowerCase()}/${n[2].toUpperCase()}`;let r=$t[Qt.exec(t)?.[1]?.toUpperCase()??``];return r===void 0?void 0:`/${r}/${t.toUpperCase()}`},tn=e=>{let t=X(e,e=>Xt.has(e));return t===void 0?void 0:en(t.pathname)},nn=new Set([`doi.org`,`dx.doi.org`,`www.doi.org`]),rn=/^10\.\d{4,9}\/\S+$/,an=e=>{let t=e.trim().replace(/^doi:/i,``);return rn.test(t)?t:void 0},on=e=>e.split(`/`).map(encodeURIComponent).join(`/`),Q=[{scheme:`GoogleBooks`,normalizeValue:Z,valueFromUrl:Gt,toUrl:e=>`https://books.google.com/books?id=${encodeURIComponent(e)}`},{scheme:`ProjectGutenberg`,normalizeValue:Jt,valueFromUrl:Yt,toUrl:e=>`https://www.gutenberg.org/ebooks/${e}`},{scheme:`OpenLibrary`,normalizeValue:en,valueFromUrl:tn,toUrl:e=>`https://openlibrary.org${e}`},{scheme:`DOI`,normalizeValue:an,valueFromUrl:e=>{let t=X(e,e=>nn.has(e)),n=t===void 0?void 0:Bt(t.pathname.replace(/^\//,``));return n===void 0?void 0:an(n)},toUrl:e=>`https://doi.org/${on(e)}`}],sn=Q.map(function(e){return e.scheme}),cn=e=>{let t=e.trim().toLowerCase();return Q.find(function(e){return e.scheme.toLowerCase()===t})},ln=e=>cn(e)!==void 0,un=e=>{for(let t of Q){let n=t.valueFromUrl(e);if(n!==void 0)return{value:n,scheme:t.scheme}}},dn=({scheme:e,value:t})=>{let n=cn(e),r=n?.normalizeValue(t);if(n===void 0||r===void 0)return;let i=n.toUrl(r);return n.valueFromUrl(i)===r?i:void 0},fn=e=>{let t=Q.find(function(t){return t.scheme===e});if(t===void 0)throw Error(`No catalog rule for scheme ${e}`);return t},pn=e=>{let t=G(e);return t===`ISBN`||t===`GTIN`},mn=e=>({carries:pn,normalizeValue:e}),$=e=>({carries:t=>G(t)===e,...fn(e)}),hn={ISBN:mn(it),GTIN:mn(W),GoogleBooks:$(`GoogleBooks`),OpenLibrary:$(`OpenLibrary`),ProjectGutenberg:$(`ProjectGutenberg`),DOI:$(`DOI`)},gn=(e,t)=>{let n=hn[t];for(let t of e??[]){if(n.carries(t.scheme)){let e=n.normalizeValue(t.value)??n.valueFromUrl?.(t.value);if(e!==void 0)return e;continue}if(n.valueFromUrl===void 0||!zt(t.scheme))continue;let e=n.valueFromUrl(t.value);if(e!==void 0)return e}},_n=e=>e?.titles?.[0]?.value;exports.APPLE_IBOOKS_DISPLAY_OPTIONS_FILENAME=P,exports.COMIC_INFO_FILENAME=I,exports.COMIC_INFO_KNOWN_FIELDS=oe,exports.COMIC_INFO_MANGA_VALUES=Ae,exports.KOBO_DISPLAY_OPTIONS_FILENAME=de,exports.METADATA_CATALOG_SCHEMES=sn,exports.arrayBufferFileAccessors=t.t,exports.blobFileAccessors=t.n,exports.catalogIdentifierFromUrl=un,exports.catalogUrlFromIdentifier=dn,exports.createArchive=e.n,exports.createArchiveFromArrayBufferList=i,exports.createArchiveFromEntries=e.t,exports.createArchiveFromText=a,exports.createArchiveFromUrls=o,exports.getArchiveFileRecordByUri=l,exports.getArchiveHasComicInfo=ke,exports.getArchiveImageRecords=f,exports.getArchiveOpfInfo=m,exports.getSpineItemFilesFromArchive=Pe,exports.identifierValue=gn,exports.isArchiveEpub=Ie,exports.isComicInfoManga=je,exports.isDirectoryRecord=c,exports.isFileRecord=s,exports.isImageRecord=d,exports.isIsbnBearingScheme=pn,exports.isMetadataCatalogScheme=ln,exports.mainTitle=_n,exports.normalizeGtin=W,exports.normalizeIdentifierScheme=G,exports.normalizeIsbn=rt,exports.parseAppleDisplayOptionsXml=F,exports.parseComicInfo=ue,exports.parseKoboXml=pe,exports.parseOpf=M,exports.parseW3cDtfDate=st,exports.readArchiveApple=De,exports.readArchiveComicInfo=Me,exports.readArchiveKobo=Ne,exports.readArchiveOpf=N,exports.readRecordAsText=p,exports.readingOrderDocumentsAllHaveViewport=Te,exports.resolveArchive=Rt,exports.resolveArchiveCover=Ce,exports.resolveArchiveMetadata=St,exports.resolveArchiveReadingOrder=R,exports.resolveArchiveToc=Nt,exports.resolveMetadata=Ct,exports.tokenizeXmlSpaceSeparatedList=h;
|
|
31
|
+
`,c=r.map(e=>({dir:!1,basename:(0,n.getUriBasename)(e),encodingFormat:(0,n.detectMimeTypeFromName)(e),uri:e,size:0,...t.n(async()=>(await fetch(e)).blob())}));return e.n({records:[{dir:!1,basename:`content.opf`,uri:`content.opf`,size:0,...t.n(async()=>new Blob([s]))},...c],close:()=>Promise.resolve()})},s=e=>!e.dir,c=e=>e.dir,l=(e,t)=>{let n=e.recordsByUri.get(t);return n&&s(n)?n:void 0},u=e=>(0,n.parseContentType)(e.encodingFormat??``)||(0,n.detectMimeTypeFromName)(e.basename),d=e=>s(e)&&u(e)?.startsWith(`image/`)===!0,f=e=>e.records.filter(s).filter(d),p=async e=>new TextDecoder().decode(await e.arrayBuffer()),m=e=>{let t=e.records.filter(e=>!e.dir).find(e=>e.uri.endsWith(`.opf`));return{data:t,basePath:t?.uri.substring(0,t.uri.lastIndexOf(`/`))||``}},h=e=>e===void 0||e.trim().length===0?[]:e.trim().split(/\s+/).filter(e=>e.length>0),g=Object.freeze([`opf:scheme`,`opf:Scheme`,`scheme`]),_={"02":`ISBN`,"03":`GTIN`,"04":`UPC`,"05":`ISMN`,"06":`DOI`,13:`LCCN`,14:`GTIN`,15:`ISBN`,22:`URN`,23:`OCLC`,24:`ISBN`,25:`ISMN`,26:`DOI`,34:`GTIN`,35:`ARK`},v=e=>{let t=e?.value?.trim();if(!(t===void 0||t.length===0))return e?.scheme?.trim().toLowerCase()===`onix:codelist5`?_[t]??t:t},y=e=>{for(let t of g){let n=e[t];if(n!==void 0)return n}},b=e=>{let t=h(e);if(t.length===0)return{};let n;t.includes(`rendition:layout-reflowable`)&&(n=`reflowable`),t.includes(`rendition:layout-pre-paginated`)&&(n=`pre-paginated`);let r;return t.includes(`rendition:flow-auto`)&&(r=`auto`),t.includes(`rendition:flow-paginated`)&&(r=`paginated`),t.includes(`rendition:flow-scrolled-doc`)&&(r=`scrolled-doc`),t.includes(`rendition:flow-scrolled-continuous`)&&(r=`scrolled-continuous`),{...n===void 0?{}:{renditionLayout:n},...r===void 0?{}:{renditionFlow:r},...t.includes(`page-spread-left`)?{pageSpreadLeft:!0}:{},...t.includes(`page-spread-right`)?{pageSpreadRight:!0}:{}}},x=e=>e.includes(`:`)?e.slice(e.lastIndexOf(`:`)+1):e,S=(e,t)=>x(e).toLowerCase()===t.toLowerCase(),C=e=>e.type===`element`,w=(e,t)=>{for(let n of e.children)if(C(n)&&S(n.name,t))return n},T=(e,t)=>{let n=[];for(let r of e.children)C(r)&&S(r.name,t)&&n.push(r);return n},ee=(e,t)=>{let n=[];return e.eachChild(e=>{if(x(e.name).toLowerCase()!==`identifier`)return;let r=e.val.trim();if(r.length===0)return;let i=y(e.attr)?.trim(),a=e.attr.id?.trim(),o=a!==void 0&&a.length>0?a:void 0;n.push({value:r,...i!==void 0&&i.length>0?{scheme:i}:{},...o===void 0?{}:{id:o},...o!==void 0&&o===t?{unique:!0}:{}})}),n},E=e=>{let t=[];return e.eachChild(e=>{if(x(e.name).toLowerCase()!==`title`)return;let n=e.val.trim();if(n.length===0)return;let r=e.attr.id?.trim();t.push({value:n,...r!==void 0&&r.length>0?{id:r}:{}})}),t},D=(e,t)=>{let n;return e.eachChild(e=>{if(n!==void 0||x(e.name).toLowerCase()!==t.toLowerCase())return;let r=e.val.trim();r.length>0&&(n=r)}),n},O=(e,t)=>{let n=[];return e.eachChild(e=>{if(x(e.name).toLowerCase()!==t.toLowerCase())return;let r=e.val.trim();r.length>0&&n.push(r)}),n},k=e=>{let t;return e.eachChild(e=>{if(t!==void 0||x(e.name).toLowerCase()!==`meta`||e.attr.name?.toLowerCase()!==`cover`)return;let n=e.attr.content?.trim();n!==void 0&&n.length>0&&(t=n)}),t},te=({manifestItems:e,metadataEl:t})=>{let n=e=>e.mediaType?.toLowerCase().includes(`image/`)===!0,r=e.find(e=>n(e)?h(e.properties).includes(`cover-image`):!1);if(r!==void 0)return r.href;if(t!==void 0){let r=k(t);if(r!==void 0){let t=e.find(e=>e.id===r&&n(e));if(t!==void 0)return t.href}}return e.find(e=>e.id.toLowerCase().includes(`cover`)&&n(e))?.href},A=(e,t)=>{let n=e.attr[t]?.trim();return n!==void 0&&n.length>0?n:void 0},ne=e=>{let t=[];return e.eachChild(e=>{if(x(e.name).toLowerCase()!==`meta`)return;let n=A(e,`property`),r=A(e,`refines`),i=A(e,`scheme`),a=A(e,`id`),o=A(e,`name`),s=A(e,`content`),c=e.val.trim(),l=c.length>0?c:void 0,u={...n===void 0?{}:{property:n},...r===void 0?{}:{refines:r},...i===void 0?{}:{scheme:i},...a===void 0?{}:{id:a},...o===void 0?{}:{name:o},...s===void 0?{}:{content:s},...l===void 0?{}:{value:l}};Object.keys(u).length!==0&&t.push(u)}),t},j=(e,t)=>e.replace(/^#/,``)===t,re=(e,t)=>{let n=[];return e.eachChild(e=>{let r=x(e.name).toLowerCase();if(r!==`creator`&&r!==`contributor`)return;let i=e.val.trim();if(i.length===0)return;let a=A(e,`id`),o=e=>a===void 0?[]:t.flatMap(t=>t.refines!==void 0&&j(t.refines,a)&&t.property===e&&t.value!==void 0?[t.value]:[]),s=A(e,`opf:role`)??A(e,`role`),c=[...s===void 0?[]:[s],...o(`role`)],l=A(e,`opf:file-as`)??A(e,`file-as`)??o(`file-as`)[0];n.push({name:i,source:r,...a===void 0?{}:{id:a},roles:c,...l===void 0?{}:{fileAs:l}})}),n},M=(e,t)=>{let n=T(e,`meta`).find(e=>e.attr.property===t)?.val;if(!(n===void 0||n.trim().length===0))return n},ie=e=>{let t=w(e,`guide`);if(t===void 0)return[];let n=[];for(let e of T(t,`reference`)){let t=e.attr.href?.trim();t===void 0||t.length===0||n.push({href:t,title:e.attr.title?.trim()??``,type:e.attr.type?.trim()??``})}return n},ae=e=>{let t=e.attr.id,n=e.attr.href;if(t===void 0||t.length===0||n===void 0||n.length===0)return;let r=e.attr[`media-type`],i=e.attr.properties?.trim();return{id:t,href:n,...r!==void 0&&r.length>0?{mediaType:r}:{},...i!==void 0&&i.length>0?{properties:i}:{}}},oe=e=>{let t=[],n=new Map;for(let r of T(e,`item`)){let e=ae(r);e!==void 0&&(t.push(e),n.set(e.id,e))}return{items:t,byId:n}},se=(e,t)=>{let n=[];for(let r of T(t,`itemref`)){let t=r.attr.idref;if(t===void 0||t.trim().length===0)continue;let i=e.get(t);if(i===void 0)continue;let a=b(r.attr.properties);n.push({idref:t,id:i.id,href:i.href,...i.mediaType===void 0?{}:{mediaType:i.mediaType},...i.properties===void 0?{}:{properties:i.properties},...a.renditionLayout===void 0?{}:{renditionLayout:a.renditionLayout},...a.renditionFlow===void 0?{}:{renditionFlow:a.renditionFlow},...a.pageSpreadLeft===void 0?{}:{pageSpreadLeft:a.pageSpreadLeft},...a.pageSpreadRight===void 0?{}:{pageSpreadRight:a.pageSpreadRight}})}return n},N=e=>{let t=new r.XmlDocument(e),n=w(t,`manifest`),i=w(t,`spine`),a=w(t,`metadata`),o=t.attr[`unique-identifier`]?.trim(),s=o!==void 0&&o.length>0?o:void 0,c=[],l=[];if(n!==void 0){let{items:e,byId:t}=oe(n);c=e,i!==void 0&&(l=se(t,i))}let u=i?.attr[`page-progression-direction`],d=u!==void 0&&u.trim().length>0?u:void 0,f=i?.attr.toc,p=f!==void 0&&f.trim().length>0?f.trim():void 0,m=[],h,g,_,v,y=[],b=[],x=[],S=[],C,T,k,A=[],j=[];a!==void 0&&(m=E(a),h=D(a,`publisher`),g=D(a,`description`),_=D(a,`rights`),v=D(a,`date`),y=O(a,`creator`),x=O(a,`language`),S=O(a,`subject`),C=M(a,`rendition:layout`),T=M(a,`rendition:flow`),k=M(a,`rendition:spread`),A=ne(a),b=re(a,A),j.push(...ee(a,s)));let ae=te({manifestItems:c,metadataEl:a}),N=ie(t);return{kind:`opf`,manifestItems:c,spineRows:l,spineTocIdref:p,identifiers:j,titles:m,creators:y,contributors:b,publisher:h,description:g,rights:_,languages:x,subjects:S,date:v,coverHref:ae,renditionLayoutMeta:C,renditionFlowMeta:T,renditionSpreadMeta:k,pageProgressionDirection:d,guide:N,metas:A}};async function P(e){let{data:t,basePath:n}=m(e)||{};if(!(!t||t.dir))return{opf:N(await p(t)),basePath:n}}var F=`com.apple.ibooks.display-options.xml`,ce=e=>e.childrenNamed(`option`).map(e=>({name:e.attr?.name,value:e.val})),le=e=>{let t=new r.XmlDocument(e);if(t.name?.toLowerCase()!==`display_options`)return{kind:`apple`};let n=t.childNamed(`platform`);return{kind:`apple`,displayOptions:{...n===void 0?{}:{platform:{options:ce(n)}}}}},I=`ComicInfo.xml`,ue=`AgeRating.AlternateCount.AlternateNumber.AlternateSeries.BlackAndWhite.Characters.Colorist.CommunityRating.Count.CoverArtist.Day.Editor.Format.Genre.GTIN.Imprint.Inker.LanguageISO.Letterer.Locations.MainCharacterOrTeam.Manga.Month.Notes.Number.PageCount.Penciller.Publisher.Review.ScanInformation.Series.SeriesGroup.StoryArc.StoryArcNumber.Summary.Tags.Teams.Title.Translator.Volume.Web.Writer.Year`.split(`.`),de=new Set([`Pages`,`ComicInfo`]),fe=e=>e.children.some(e=>e.type===`element`),pe=e=>{let t=e.val.trim();return t.length>0?t:void 0},me=e=>{let t;try{t=new r.XmlDocument(e)}catch(e){let t=e instanceof Error?e.message:String(e);throw Error(`${I} is malformed: ${t}`,{cause:e})}let n={};return t.eachChild(e=>{if(e.type!==`element`||de.has(e.name)||fe(e))return;let t=pe(e);t!==void 0&&n[e.name]===void 0&&(n[e.name]=t)}),{kind:`comicInfo`,...n}},he=`com.kobobooks.display-options.xml`,ge=e=>{let t=e.childNamed(`platform`);if(!t)return{};for(let e of t.childrenNamed(`option`))if(e.attr?.name===`fixed-layout`)return e.val.trim().toLowerCase()===`true`?{renditionLayout:`pre-paginated`}:{};return{}},_e=e=>{let t=new r.XmlDocument(e);return t.name?.toLowerCase()===`display_options`?{kind:`kobo`,...ge(t)}:{kind:`kobo`}},L=e=>{let t=Object.entries(e).filter(([,e])=>e!==void 0);return Object.fromEntries(t)},ve=e=>{let t=[];for(let n of e.split(`/`))if(n!==`.`){if(n===`..`){t.pop();continue}t.push(n)}return t.join(`/`)},ye=(e,t)=>/^https?:\/\//.test(e)?e:ve(t?`${t}/${e}`:e),be=e=>{let t=e?.trim().toLowerCase();return t===`reflowable`||t===`pre-paginated`?t:void 0},xe=(e,{opf:t,basePath:n})=>{let r=be(t.renditionLayoutMeta),i=t.spineRows.map(t=>{let r=ye(t.href,n);return{row:t,uri:r,record:l(e,r)}}),a=i.reduce((e,{record:t})=>e+(t?.size??0),0);return i.map(({row:e,uri:n,record:i})=>L({uri:n,id:e.id,mediaType:e.mediaType??i?.encodingFormat,size:i?.size,renditionLayout:e.renditionLayout??r,renditionFlow:e.renditionFlow,pageSpreadLeft:e.pageSpreadLeft,pageSpreadRight:e.pageSpreadRight,progressionWeight:a>0?(i?.size??0)/a:1/t.spineRows.length}))},Se=I.toLowerCase(),Ce=F.toLowerCase(),we=e=>{let t=e.basename.toLowerCase();return t===Se||t===Ce||e.uri.endsWith(`com.kobobooks.display-options.xml`)||t.endsWith(`.db`)},Te=e=>{let t=e.records.filter(s).filter(e=>!we(e));return t.map(e=>{let r=(0,n.parseContentType)(e.encodingFormat??``)||(0,n.detectMimeTypeFromName)(e.basename);return L({uri:e.uri,mediaType:r,size:e.size,renditionLayout:r!==void 0&&(0,n.isMediaContentMimeType)(r)?`pre-paginated`:void 0,progressionWeight:1/t.length})})},R=async(e,{opf:t}={})=>{let n=t??await P(e).catch(()=>void 0);return n?xe(e,n):Te(e)},Ee=(e,t)=>{let r=l(e,t);if(r!==void 0)return(0,n.parseContentType)(r.encodingFormat??``)||(0,n.detectMimeTypeFromName)(r.basename)},De=async(e,{opf:t,readingOrder:n}={})=>{let r=t??await P(e).catch(()=>void 0);if(r!==void 0&&r.opf.coverHref!==void 0){let t=ye(r.opf.coverHref,r.basePath);return L({uri:t,mediaType:Ee(e,t),confidence:`derived`})}let i=(n??await R(e,{opf:r})).find(e=>e.mediaType?.startsWith(`image/`)===!0);if(i!==void 0)return L({uri:i.uri,mediaType:i.mediaType,confidence:`assumed`})},Oe=e=>{let t=e.descendantWithPath(`head`)?.childrenNamed(`meta`).find(e=>e.attr.name===`viewport`);return!!(t&&t.attr.name===`viewport`)},ke=async(t,i)=>{if(i.length===0)return!1;for(let a of i){if(!(0,n.isXmlBasedMimeType)({mimeType:a.mediaType,uri:a.uri}))return!1;let i=l(t,a.uri);if(!i||!s(i))return!1;try{let e=await p(i);if(!Oe(new r.XmlDocument(e)))return!1}catch(t){return e.r.error(`layout scan: unable to inspect ${a.uri}`,t),!1}}return!0},Ae=F.toLowerCase();async function je(e){let t=e.records.find(e=>s(e)&&e.basename.toLowerCase()===Ae);if(t)return le(await p(t))}var Me=I.toLowerCase(),Ne=e=>e.records.find(e=>s(e)&&e.basename.toLowerCase()===Me),Pe=[`Unknown`,`No`,`Yes`,`YesAndRightToLeft`],Fe=e=>{for(let t of Pe)if(t===e)return!0;return!1};async function Ie(e){let t=Ne(e);if(t)return me(await p(t))}async function Le(t){let n=t.records.filter(e=>s(e)&&e.uri.endsWith(`com.kobobooks.display-options.xml`));if(n.length===0)return;let r;for(let t of n){let n=await p(t);try{let{renditionLayout:e}=_e(n);e&&(r=e)}catch(n){e.r.error(`Unable to parse ${he} (${t.uri})`,n)}}return{kind:`kobo`,...r===void 0?{}:{renditionLayout:r}}}var Re=async({archive:e,archiveOpf:t})=>{if(!t)return[];let{opf:n,basePath:r}=t,{spineRows:i}=n;return e.records.filter(e=>i.find(t=>r?`${r}/${t.href}`===e.uri:`${t.href}`===e.uri))},ze=e=>e.toLowerCase().endsWith(`.opf`),Be=e=>e.records.some(e=>!e.dir&&(ze(e.basename)||ze(e.uri))),Ve=e=>{let t=e.displayOptions?.platform?.options,n=t?.find(e=>e.name===`fixed-layout`)?.value.trim().toLowerCase(),r=n===`true`||n!==`false`&&void 0,i=L({fixedLayout:r,options:t!==void 0&&t.length>0?t.map(({name:e,value:t})=>L({name:e,value:t})):void 0});return L({renditionLayout:r===!0?`pre-paginated`:void 0,apple:Object.keys(i).length>0?i:void 0})},He=e=>{switch(e.Manga){case`YesAndRightToLeft`:return`rtl`;case`Yes`:case`No`:return`ltr`;default:return}},z=e=>{if(e===void 0)return;let t=e.trim();return t.length>0?t:void 0},B=e=>e===void 0?[]:e.split(`,`).map(e=>e.trim()).filter(e=>e.length>0),V=e=>{let t=z(e);if(t===void 0||!/^\d+$/.test(t))return;let n=Number.parseInt(t,10);return Number.isFinite(n)?n:void 0},H=e=>{let t=z(e);if(t===void 0||!/^\d+(\.\d+)?$/.test(t))return;let n=Number.parseFloat(t);return Number.isFinite(n)?n:void 0},Ue=e=>{let t=z(e)?.toLowerCase();if(t===`yes`)return!0;if(t===`no`)return!1},We=e=>{switch(e.Manga){case`Yes`:case`YesAndRightToLeft`:return!0;case`No`:return!1;default:return}},Ge=e=>{let t=V(e.Year),n=V(e.Month),r=V(e.Day);if(!(t===void 0&&n===void 0&&r===void 0))return{...t===void 0?{}:{year:t},...n===void 0?{}:{month:n},...r===void 0?{}:{day:r}}},Ke=[[`Writer`,`author`],[`Penciller`,`penciler`],[`Inker`,`inker`],[`Colorist`,`colorist`],[`Letterer`,`letterer`],[`CoverArtist`,`coverArtist`],[`Editor`,`editor`],[`Translator`,`translator`]],qe=e=>{let t=new Map;for(let[n,r]of Ke)for(let i of B(e[n])){let e=t.get(i);e?e.roles.includes(r)||e.roles.push(r):t.set(i,{name:i,roles:[r]})}return[...t.values()]},Je=e=>{let t=L({name:z(e.Series),position:H(e.Number),total:V(e.Count)});return Object.keys(t).length>0?t:void 0},Ye=e=>{let t=z(e.AlternateSeries);if(t!==void 0)return L({name:t,position:H(e.AlternateNumber),total:V(e.AlternateCount)})},Xe=e=>{let t=B(e.StoryArc);if(t.length===0)return[];let n=B(e.StoryArcNumber);return t.map((e,t)=>L({name:e,position:H(n[t])}))},U=e=>e.length>0?e:void 0,Ze=e=>(e.Web??``).split(/\s+/).filter(e=>e.length>0),Qe=e=>{try{let t=new URL(e);return(t.protocol===`http:`||t.protocol===`https:`)&&t.hostname.length>0}catch{return!1}},$e=e=>e.filter((e,t,n)=>Qe(e)&&n.indexOf(e)===t).map(e=>({value:e,scheme:`URL`})),et=(e,t)=>{let n=L({manga:We(e),blackAndWhite:Ue(e.BlackAndWhite),volume:V(e.Volume),format:z(e.Format),ageRating:z(e.AgeRating),notes:z(e.Notes),review:z(e.Review),web:U(t),scanInformation:z(e.ScanInformation),mainCharacterOrTeam:z(e.MainCharacterOrTeam),characters:U(B(e.Characters)),teams:U(B(e.Teams)),locations:U(B(e.Locations)),storyArcs:U(Xe(e)),alternateSeries:Ye(e)});return Object.keys(n).length>0?n:void 0},tt=e=>{let t=H(e.CommunityRating);return t!==void 0&&t<=5?{value:t}:void 0},nt=e=>{let t=Je(e),n=U(B(e.SeriesGroup).map(e=>({name:e})));if(!(t===void 0&&n===void 0))return L({series:t===void 0?void 0:[t],collection:n})},rt=e=>{let t=e.GTIN,n=z(t),r=Ze(e),i=[...n===void 0?[]:[{value:n,scheme:`GTIN`}],...$e(r)],a=z(e.LanguageISO),o=[...B(e.Genre),...B(e.Tags)],s=L({date:Ge(e),publisher:z(e.Publisher),imprint:z(e.Imprint)}),c=z(e.Title);return L({titles:c===void 0?void 0:[{value:c}],description:z(e.Summary),publication:s.date!==void 0||s.publisher!==void 0||s.imprint!==void 0?{edition:s}:void 0,languages:a===void 0?void 0:[a],subjects:U(o),contributors:U(qe(e)),readingDirection:He(e),numberOfPages:V(e.PageCount),aggregateRating:tt(e),identifiers:U(i),belongsTo:nt(e),comicInfo:et(e,r)})},it=e=>L({renditionLayout:e.renditionLayout,kobo:e.renditionLayout===void 0?void 0:{fixedLayout:e.renditionLayout===`pre-paginated`}}),at=/[0-9Xx]+/g,ot=/^(?:97[89])?\d{9}[\dXx]$/,st=e=>{if(e==null)return;let t=String(e).trim().replace(/^urn:isbn:/i,``).replace(/^isbn[:\s-]*/i,``),n=t.replace(/[^0-9Xx]/g,``);if(n.length===10||n.length===13)return n.toUpperCase();for(let e of t.match(at)??[])if(ot.test(e))return e.toUpperCase()},ct=e=>{let t=st(e);if(t!==void 0)return t.length===10||/^97[89]/.test(t)?t:void 0},lt=new Set([8,12,13,14]),W=e=>{if(e==null)return;let t=String(e).replace(/\D/g,``);if(!(t.length===0||!lt.has(t.length)))return t},ut=new Map(Object.entries({isbn:`ISBN`,gtin:`GTIN`,doi:`DOI`,googlebooks:`GoogleBooks`,openlibrary:`OpenLibrary`,projectgutenberg:`ProjectGutenberg`,url:`URL`,unknown:`Unknown`})),G=e=>{let t=e.trim();return ut.get(t.toLowerCase())??t},dt=e=>{if(e===void 0)return;let t=e.trim().match(/^(\d{4})(?:-(\d{2})(?:-(\d{2}))?)?/);if(t===null)return;let[,n,r,i]=t;return{...n===void 0?{}:{year:Number.parseInt(n,10)},...r===void 0?{}:{month:Number.parseInt(r,10)},...i===void 0?{}:{day:Number.parseInt(i,10)}}},ft=e=>{let t=e.trim();if(/^https?:\/\//i.test(t))try{let e=new URL(t);if((e.protocol===`http:`||e.protocol===`https:`)&&e.hostname.length>0)return`URL`}catch{}return ct(t)===void 0?W(t)===void 0?`Unknown`:`GTIN`:`ISBN`},pt={art:`artist`,aut:`author`,clr:`colorist`,ctb:`contributor`,edt:`editor`,ill:`illustrator`,nrt:`narrator`,trl:`translator`},mt=e=>e.map(e=>{let t=e.roles.map(e=>pt[e.trim().toLowerCase()]??e);return L({name:e.name,roles:t.length>0?t:[e.source===`creator`?`author`:`contributor`],sortAs:e.fileAs})}),K=(e,t)=>e.refines!==void 0&&e.refines.replace(/^#/,``)===t,ht=(e,t)=>{let n=e.id;if(n!==void 0)return v(t.find(e=>e.property===`identifier-type`&&K(e,n)&&e.value!==void 0))},gt=e=>{let t=e?.trim();if(t===void 0||!/^\d+(\.\d+)?$/.test(t))return;let n=Number.parseFloat(t);return Number.isFinite(n)?n:void 0},_t=e=>{let t=e?.trim();if(t===void 0||!/^\d+$/.test(t))return;let n=Number.parseInt(t,10);return Number.isFinite(n)?n:void 0},q=e=>{let t=e?.trim();return t!==void 0&&t.length>0?t:void 0},J=(e,t,n)=>t===void 0?void 0:e.find(e=>K(e,t)&&e.property===n&&e.value!==void 0)?.value,vt=(e,t)=>e.map(e=>L({value:e.value,type:q(J(t,e.id,`title-type`))?.toLowerCase(),displaySeq:_t(J(t,e.id,`display-seq`)),sortAs:q(J(t,e.id,`file-as`))})),yt=(e,t)=>{if(t===void 0)return;let n=e.flatMap(n=>{if(!K(n,t)||n.property!==`dcterms:identifier`)return[];let r=q(n.value);return r===void 0?[]:[{value:r,scheme:G(v(e.find(e=>n.id!==void 0&&K(e,n.id)&&e.property===`identifier-type`))??ft(r))}]});return n.length>0?n:void 0},bt=e=>{let t=[],n=[];for(let r of e){if(r.property!==`belongs-to-collection`||r.value===void 0)continue;let i=r.id,a=t=>J(e,i,t),o=a(`collection-type`)?.trim().toLowerCase(),s=L({name:r.value,identifiers:yt(e,i),position:gt(a(`group-position`))});o===`series`?t.push(s):n.push(s)}if(t.length===0){let n=e.find(e=>e.name?.toLowerCase()===`calibre:series`&&e.content!==void 0)?.content;n!==void 0&&t.push(L({name:n,position:gt(e.find(e=>e.name?.toLowerCase()===`calibre:series_index`)?.content)}))}return{series:t,collection:n}},xt=e=>{let t=e?.trim();if(t===`scrolled-continuous`||t===`scrolled-doc`||t===`paginated`||t===`auto`)return t},St=e=>{let t=e?.trim();if(t===`none`||t===`landscape`||t===`portrait`||t===`both`||t===`auto`)return t},Ct=e=>{let{titles:t,contributors:n,publisher:r,description:i,rights:a,languages:o,subjects:s,date:c,renditionLayoutMeta:l,renditionFlowMeta:u,renditionSpreadMeta:d,pageProgressionDirection:f,identifiers:p,metas:m,kind:h,creators:g,manifestItems:_,spineRows:v,spineTocIdref:y,coverHref:b,guide:x,...S}=e,C=f?.trim().toLowerCase(),w=C===`ltr`||C===`rtl`?C:void 0,T=l?.trim().toLowerCase(),ee=T===`reflowable`||T===`pre-paginated`?T:void 0,E=mt(n),D=vt(t,m),{series:O,collection:k}=bt(m),te=O.length>0||k.length>0?L({series:O.length>0?O:void 0,collection:k.length>0?k:void 0}):void 0,A=L({date:dt(c),publisher:r});return L({titles:D.length>0?D:void 0,description:i,publication:A.date!==void 0||A.publisher!==void 0?{edition:A}:void 0,rights:a,languages:o.length>0?[...o]:void 0,subjects:s.length>0?[...s]:void 0,contributors:E.length>0?E:void 0,readingDirection:w,renditionLayout:ee,renditionFlow:xt(u),renditionSpread:St(d),identifiers:p.length>0?p.map(e=>L({value:e.value,scheme:G(e.scheme??ht(e,m)??ft(e.value)),unique:e.unique})):void 0,belongsTo:te,properties:m.length>0?[...m]:void 0})},wt=e=>e.kind===`comicInfo`?rt(e):e.kind===`kobo`?it(e):e.kind===`apple`?Ve(e):Ct(e),Tt=e=>{let t=e.opf===void 0?void 0:Ct(e.opf),n=e.comicInfo===void 0?void 0:rt(e.comicInfo),r=e.apple===void 0?void 0:Ve(e.apple),i=e.kobo===void 0?void 0:it(e.kobo),a=[...t?.identifiers??[],...n?.identifiers??[]],o=L({date:t?.publication?.edition?.date??n?.publication?.edition?.date,publisher:t?.publication?.edition?.publisher??n?.publication?.edition?.publisher,imprint:t?.publication?.edition?.imprint??n?.publication?.edition?.imprint});return L({titles:t?.titles??n?.titles,description:t?.description??n?.description,publication:o.date!==void 0||o.publisher!==void 0||o.imprint!==void 0?{edition:o}:void 0,rights:t?.rights,languages:t?.languages??n?.languages,subjects:t?.subjects??n?.subjects,contributors:t?.contributors??n?.contributors,readingDirection:n?.readingDirection??t?.readingDirection,renditionLayout:t?.renditionLayout??r?.renditionLayout??i?.renditionLayout,renditionFlow:t?.renditionFlow,renditionSpread:t?.renditionSpread,numberOfPages:n?.numberOfPages,aggregateRating:n?.aggregateRating,identifiers:a.length>0?a:void 0,belongsTo:t?.belongsTo??n?.belongsTo,properties:t?.properties,comicInfo:n?.comicInfo,apple:r?.apple,kobo:i?.kobo})},Et=e=>{let t=[...e.records].sort((e,t)=>(0,n.sortByTitleComparator)(e.uri,t.uri)),r=(e,t,n,i,a)=>{let o=e.find(e=>e.title===t),[s,...c]=n;return o?s?[...e.filter(e=>e!==o),{...o,contents:r(o.contents,s,c,i,a)}]:o.path.split(`/`).length>a.split(`/`).length?[...e.filter(e=>e!==o),{...o,path:a,containerHref:i}]:e:s?[...e,{contents:r([],s,c,i,a),containerHref:i,path:a,title:t}]:[...e,{contents:[],containerHref:i,path:a,title:t}]};return t.reduce((e,t)=>{if(t.dir)return e;let[n,...i]=t.uri.split(`/`).slice(0,-1);if(!n)return e;let a=encodeURI(t.uri).replace(/#/g,`%23`).replace(/\?/g,`%3F`).replace(/\/$/,``),o=t.uri.replace(/\/$/,``);return r(e,n,i,a,o)},[])},Dt=e=>e?e.children.map(e=>e instanceof r.XmlTextNode?e.text:e instanceof r.XmlElement?Dt(e):``).join(``).trim():``,Ot=e=>h(e.properties).includes(`nav`),kt=(e,{basePath:t})=>{let r={contents:[],path:``,containerHref:``,title:``},i=e.childNamed(`span`)||e.childNamed(`a`);r.title=(i?.attr.title||i?.val.trim()||Dt(i))??``;let a=i?.name;a!==`a`&&(i=e.descendantWithPath(`${a}.a`),i&&(a=i.name.toLowerCase())),a===`a`&&i?.attr.href&&(r.path=(0,n.urlJoin)(t,i.attr.href),r.containerHref=r.path);let o=e.childNamed(`ol`);if(o){let e=o.childrenNamed(`li`);e&&e.length>0&&(r.contents=e.map(e=>kt(e,{basePath:t})))}return r},At=(e,{basePath:t})=>{let n=[],i;return e.descendantWithPath(`body.nav.ol`)?i=e.descendantWithPath(`body.nav.ol`)?.children:e.descendantWithPath(`body.section.nav.ol`)&&(i=e.descendantWithPath(`body.section.nav.ol`)?.children),i&&i.length>0&&i.filter(e=>e instanceof r.XmlElement&&e.name===`li`).forEach(e=>{n.push(kt(e,{basePath:t}))}),n},jt=async(e,t)=>{let i=e.manifestItems.find(Ot);if(i?.href){let e=t.records.find(e=>e.uri.endsWith(i.href));if(e&&!e.dir)return At(new r.XmlDocument(await p(e)),{basePath:(0,n.getUriBasePath)(e.uri)})}},Mt=(e,{basePath:t,prefix:r})=>{let i=(0,n.urlJoin)(t,e?.childNamed(`${r}content`)?.attr.src||``),a={title:e?.descendantWithPath(`${r}navLabel.${r}text`)?.val||``,path:i,containerHref:i,contents:[]},o=e.childrenNamed(`${r}navPoint`);return o&&o.length>0&&(a.contents=o.map(e=>Mt(e,{basePath:t,prefix:r}))),a},Nt=(e,{basePath:t})=>{let n=[],r=e.name,i=``;return r.indexOf(`:`)!==-1&&(i=`${r.split(`:`)[0]}:`),e.childNamed(`${i}navMap`)?.childrenNamed(`${i}navPoint`).forEach(e=>{n.push(Mt(e,{basePath:t,prefix:i}))}),n},Pt=async({opf:e,opfBasePath:t,archive:i})=>{let a=e.spineTocIdref;if(a){let o=e.manifestItems.find(e=>e.id===a);if(o){let e=`${t}${t===``?``:`/`}${o.href}`,a=i.records.find(t=>t.uri.endsWith(e));if(a&&!a.dir)return Nt(new r.XmlDocument(await p(a)),{basePath:(0,n.getUriBasePath)(a.uri)})}}},Ft=async(e,{opf:t}={})=>{let n=t??await P(e);if(n)return await jt(n.opf,e)||await Pt({opf:n.opf,opfBasePath:n.basePath,archive:e})||[];let r=Et(e);return r.length===0?void 0:r},It=[`metadata`,`readingOrder`,`toc`],Y=async(t,n)=>{try{return{value:await t(),failed:!1}}catch(t){return e.r.error(`resolveArchive: unable to read ${n}`,t),{value:void 0,failed:!0}}},Lt=e=>{let t=e=>e?.startsWith(`audio/`)===!0||e?.startsWith(`video/`)===!0,n=e.filter(e=>e.renditionLayout===`pre-paginated`&&!t(e.mediaType)).length;return n>0?n:void 0},Rt=({archive:e,opf:t,comicInfo:n,apple:r,kobo:i})=>{let a=[];return t!==void 0&&t.value===void 0&&(t.failed||Be(e))&&a.push(`opf`),n?.failed&&a.push(`comicInfo`),r?.failed&&a.push(`apple`),i?.failed&&a.push(`kobo`),a},zt=3,Bt=async(e,t={})=>{let n=new Set(t.include??It),r=n.has(`metadata`),i=n.has(`sources`),a=n.has(`readingOrder`),o=n.has(`toc`),s=t.layoutScan===!0&&(r||a),c=r||i||a||o?await Y(()=>P(e),`opf`):void 0,l=c?.value,u=r||i||s,d=u?await Y(()=>Ie(e),`comicInfo`):void 0,f=d?.value,p=u?await Y(()=>je(e),`apple`):void 0,m=p?.value,h=u?await Y(()=>Le(e),`kobo`):void 0,g=h?.value,_=r||s?Tt({opf:l?.opf,comicInfo:f,apple:m,kobo:g}):void 0,v=a||s?await R(e,{opf:l}):void 0;if(s&&_!==void 0&&v!==void 0&&_.renditionLayout===`reflowable`&&v.every(e=>e.renditionLayout===`reflowable`)&&await ke(e,v)&&(_={..._,renditionLayout:`pre-paginated`},v=v.map(e=>({...e,renditionLayout:`pre-paginated`}))),r&&_!==void 0){let t=v??await R(e,{opf:l}),n=await De(e,{opf:l,readingOrder:t}),r=_.numberOfPages??Lt(t);_=L({..._,cover:n,numberOfPages:r})}let y=o?(await Y(()=>Ft(e,{opf:l}),`toc`)).value:void 0,b={version:zt,unreadableSources:Rt({archive:e,opf:c,comicInfo:d,apple:p,kobo:h})};return r&&_!==void 0&&(b.metadata=_),a&&v!==void 0&&(b.readingOrder=v),o&&y!==void 0&&(b.toc=y),i&&(b.sources=L({opf:l,comicInfo:f,apple:m,kobo:g})),b},Vt=e=>{let t=e.trim().toLowerCase();return t===`url`||t===`uri`||t===`unknown`},Ht=e=>{try{return decodeURIComponent(e)}catch{return}},Ut=e=>{try{let t=new URL(e.trim());return t.protocol===`http:`||t.protocol===`https:`?t:void 0}catch{return}},X=(e,t)=>{let n=Ut(e);return n!==void 0&&t(n.hostname.toLowerCase())?n:void 0},Wt=/^books\.google\.(?:com|[a-z]{2}|com\.[a-z]{2}|co\.[a-z]{2})$/i,Gt=new Set([`books.googleapis.com`,`www.googleapis.com`]),Kt=/^\/books\/v1\/volumes\/([^/]+)\/?$/i,Z=e=>{let t=e.trim();return/^[a-z0-9_-]+$/i.test(t)?t:void 0},qt=e=>{let t=X(e,e=>Wt.test(e)||Gt.has(e));if(t!==void 0){if(Gt.has(t.hostname.toLowerCase())){let e=Kt.exec(t.pathname)?.[1],n=e===void 0?void 0:Ht(e);return n===void 0?void 0:Z(n)}return Z(t.searchParams.get(`id`)??``)}},Jt=new Set([`gutenberg.org`,`www.gutenberg.org`]),Yt=[/^\/ebooks\/(\d+)(?:[./]|$)/i,/^\/files\/(\d+)(?:\/|$)/i,/^\/cache\/epub\/(\d+)(?:\/|$)/i,/^\/(\d+)(?:\/|$)/],Xt=e=>{let t=e.trim();if(!/^\d+$/.test(t))return;let n=t.replace(/^0+(?=\d)/,``);return n===`0`?void 0:n},Zt=e=>{let t=X(e,e=>Jt.has(e));if(t!==void 0)for(let e of Yt){let n=e.exec(t.pathname)?.[1];if(n!==void 0)return Xt(n)}},Qt=new Set([`openlibrary.org`,`www.openlibrary.org`]),$t=/^\/(works|books|authors)\/(OL\d+[A-Z])(?:\/|$)/i,en=/^OL\d+([MWA])$/i,tn={M:`books`,W:`works`,A:`authors`},nn=e=>{let t=e.trim(),n=$t.exec(t);if(n?.[1]!==void 0&&n[2]!==void 0)return`/${n[1].toLowerCase()}/${n[2].toUpperCase()}`;let r=tn[en.exec(t)?.[1]?.toUpperCase()??``];return r===void 0?void 0:`/${r}/${t.toUpperCase()}`},rn=e=>{let t=X(e,e=>Qt.has(e));return t===void 0?void 0:nn(t.pathname)},an=new Set([`doi.org`,`dx.doi.org`,`www.doi.org`]),on=/^10\.\d{4,9}\/\S+$/,sn=e=>{let t=e.trim().replace(/^doi:/i,``);return on.test(t)?t:void 0},cn=e=>e.split(`/`).map(encodeURIComponent).join(`/`),Q=[{scheme:`GoogleBooks`,normalizeValue:Z,valueFromUrl:qt,toUrl:e=>`https://books.google.com/books?id=${encodeURIComponent(e)}`},{scheme:`ProjectGutenberg`,normalizeValue:Xt,valueFromUrl:Zt,toUrl:e=>`https://www.gutenberg.org/ebooks/${e}`},{scheme:`OpenLibrary`,normalizeValue:nn,valueFromUrl:rn,toUrl:e=>`https://openlibrary.org${e}`},{scheme:`DOI`,normalizeValue:sn,valueFromUrl:e=>{let t=X(e,e=>an.has(e)),n=t===void 0?void 0:Ht(t.pathname.replace(/^\//,``));return n===void 0?void 0:sn(n)},toUrl:e=>`https://doi.org/${cn(e)}`}],ln=Q.map(function(e){return e.scheme}),un=e=>{let t=e.trim().toLowerCase();return Q.find(function(e){return e.scheme.toLowerCase()===t})},dn=e=>un(e)!==void 0,fn=e=>{for(let t of Q){let n=t.valueFromUrl(e);if(n!==void 0)return{value:n,scheme:t.scheme}}},pn=({scheme:e,value:t})=>{let n=un(e),r=n?.normalizeValue(t);if(n===void 0||r===void 0)return;let i=n.toUrl(r);return n.valueFromUrl(i)===r?i:void 0},mn=e=>{let t=Q.find(function(t){return t.scheme===e});if(t===void 0)throw Error(`No catalog rule for scheme ${e}`);return t},hn=e=>{let t=G(e);return t===`ISBN`||t===`GTIN`},gn=e=>({carries:hn,normalizeValue:e}),$=e=>({carries:t=>G(t)===e,...mn(e)}),_n={ISBN:gn(ct),GTIN:gn(W),GoogleBooks:$(`GoogleBooks`),OpenLibrary:$(`OpenLibrary`),ProjectGutenberg:$(`ProjectGutenberg`),DOI:$(`DOI`)},vn=(e,t)=>{let n=_n[t];for(let t of e??[]){if(n.carries(t.scheme)){let e=n.normalizeValue(t.value)??n.valueFromUrl?.(t.value);if(e!==void 0)return e;continue}if(n.valueFromUrl===void 0||!Vt(t.scheme))continue;let e=n.valueFromUrl(t.value);if(e!==void 0)return e}},yn=e=>e?.titles?.[0]?.value;exports.APPLE_IBOOKS_DISPLAY_OPTIONS_FILENAME=F,exports.COMIC_INFO_FILENAME=I,exports.COMIC_INFO_KNOWN_FIELDS=ue,exports.COMIC_INFO_MANGA_VALUES=Pe,exports.KOBO_DISPLAY_OPTIONS_FILENAME=he,exports.METADATA_CATALOG_SCHEMES=ln,exports.OPF_IDENTIFIER_SCHEME_ATTRIBUTES=g,exports.arrayBufferFileAccessors=t.t,exports.blobFileAccessors=t.n,exports.catalogIdentifierFromUrl=fn,exports.catalogUrlFromIdentifier=pn,exports.createArchive=e.n,exports.createArchiveFromArrayBufferList=i,exports.createArchiveFromEntries=e.t,exports.createArchiveFromText=a,exports.createArchiveFromUrls=o,exports.getArchiveFileRecordByUri=l,exports.getArchiveHasComicInfo=Ne,exports.getArchiveImageRecords=f,exports.getArchiveOpfInfo=m,exports.getSpineItemFilesFromArchive=Re,exports.identifierValue=vn,exports.isArchiveEpub=Be,exports.isComicInfoManga=Fe,exports.isDirectoryRecord=c,exports.isFileRecord=s,exports.isImageRecord=d,exports.isIsbnBearingScheme=hn,exports.isMetadataCatalogScheme=dn,exports.mainTitle=yn,exports.normalizeGtin=W,exports.normalizeIdentifierScheme=G,exports.normalizeIsbn=st,exports.opfIdentifierSchemeAttribute=y,exports.opfIdentifierTypeScheme=v,exports.parseAppleDisplayOptionsXml=le,exports.parseComicInfo=me,exports.parseKoboXml=_e,exports.parseOpf=N,exports.parseW3cDtfDate=dt,exports.readArchiveApple=je,exports.readArchiveComicInfo=Ie,exports.readArchiveKobo=Le,exports.readArchiveOpf=P,exports.readRecordAsText=p,exports.readingOrderDocumentsAllHaveViewport=ke,exports.resolveArchive=Bt,exports.resolveArchiveCover=De,exports.resolveArchiveMetadata=wt,exports.resolveArchiveReadingOrder=R,exports.resolveArchiveToc=Ft,exports.resolveMetadata=Tt,exports.tokenizeXmlSpaceSeparatedList=h;
|
|
32
32
|
//# sourceMappingURL=index.cjs.map
|