@prose-reader/archive-reader 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.
@@ -1,2 +1,2 @@
1
- Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("../../createArchiveFromEntries-DcPCGgZW.cjs"),t=require("../../fileAccessors-DWVChFUB.cjs");var n=async(n,r)=>e.t(await n.getFilesArray(),e=>({dir:!1,uri:`${e.path}${e.file.name}`,size:e.file.size,...t.n(()=>e.file.extract())}),{...r,close:()=>n.close()});exports.createArchiveFromLibArchive=n;
1
+ Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("../../createArchiveFromEntries-DcPCGgZW.cjs"),t=require("../../fileAccessors-DWVChFUB.cjs");var n=async(n,r)=>{let i=await n.getFilesArray();return e.t(i,e=>({dir:!1,uri:`${e.path}${e.file.name}`,size:e.file.size,...t.n(()=>e.file.extract())}),{...r,close:()=>n.close()})};exports.createArchiveFromLibArchive=n;
2
2
  //# sourceMappingURL=index.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.cjs","names":[],"sources":["../../../src/archives/createArchiveFromLibArchive.ts"],"sourcesContent":["/**\n * @see https://github.com/nika-begiashvili/libarchivejs.\n *\n * Does not work in service worker due to usage of web worker.\n */\n// libarchive.js only re-exports `Archive` from its package root; the reader and\n// compressed-file types live in the compiled output, so we reach for them there.\nimport type { ArchiveReader } from \"libarchive.js/dist/build/compiled/archive-reader\"\nimport type { CompressedFile } from \"libarchive.js/dist/build/compiled/compressed-file\"\nimport { createArchiveFromEntries } from \"./createArchiveFromEntries.ts\"\nimport { blobFileAccessors } from \"./fileAccessors.ts\"\nimport type { Archive } from \"./types.ts\"\n\nexport const createArchiveFromLibArchive = async (\n libArchive: ArchiveReader,\n options: { orderByAlpha?: boolean; name: string; encodingFormat?: string },\n): Promise<Archive> => {\n const objArray = await libArchive.getFilesArray()\n\n return createArchiveFromEntries(\n objArray,\n (item: { file: CompressedFile; path: string }) => ({\n dir: false,\n uri: `${item.path}${item.file.name}`,\n size: item.file.size,\n // libarchivejs `extract()` is typed `any`; it resolves to a `File`.\n ...blobFileAccessors(() => item.file.extract() as Promise<File>),\n }),\n { ...options, close: () => libArchive.close() },\n )\n}\n"],"mappings":"gLAaA,IAAa,EAA8B,MACzC,EACA,IAIO,EAAA,EACL,MAHqB,EAAW,cAAc,EAI7C,IAAkD,CACjD,IAAK,GACL,IAAK,GAAG,EAAK,OAAO,EAAK,KAAK,OAC9B,KAAM,EAAK,KAAK,KAEhB,GAAG,EAAA,MAAwB,EAAK,KAAK,QAAQ,CAAkB,CACjE,GACA,CAAE,GAAG,EAAS,UAAa,EAAW,MAAM,CAAE,CAChD"}
1
+ {"version":3,"file":"index.cjs","names":[],"sources":["../../../src/archives/createArchiveFromLibArchive.ts"],"sourcesContent":["/**\n * @see https://github.com/nika-begiashvili/libarchivejs.\n *\n * Does not work in service worker due to usage of web worker.\n */\n// libarchive.js only re-exports `Archive` from its package root; the reader and\n// compressed-file types live in the compiled output, so we reach for them there.\nimport type { ArchiveReader } from \"libarchive.js/dist/build/compiled/archive-reader\"\nimport type { CompressedFile } from \"libarchive.js/dist/build/compiled/compressed-file\"\nimport { createArchiveFromEntries } from \"./createArchiveFromEntries.ts\"\nimport { blobFileAccessors } from \"./fileAccessors.ts\"\nimport type { Archive } from \"./types.ts\"\n\nexport const createArchiveFromLibArchive = async (\n libArchive: ArchiveReader,\n options: { orderByAlpha?: boolean; name: string; encodingFormat?: string },\n): Promise<Archive> => {\n const objArray = await libArchive.getFilesArray()\n\n return createArchiveFromEntries(\n objArray,\n (item: { file: CompressedFile; path: string }) => ({\n dir: false,\n uri: `${item.path}${item.file.name}`,\n size: item.file.size,\n // libarchivejs `extract()` is typed `any`; it resolves to a `File`.\n ...blobFileAccessors(() => item.file.extract() as Promise<File>),\n }),\n { ...options, close: () => libArchive.close() },\n )\n}\n"],"mappings":"gLAaA,IAAa,EAA8B,MACzC,EACA,IACqB,CACrB,IAAM,EAAW,MAAM,EAAW,cAAc,EAEhD,OAAO,EAAA,EACL,EACC,IAAkD,CACjD,IAAK,GACL,IAAK,GAAG,EAAK,OAAO,EAAK,KAAK,OAC9B,KAAM,EAAK,KAAK,KAEhB,GAAG,EAAA,MAAwB,EAAK,KAAK,QAAQ,CAAkB,CACjE,GACA,CAAE,GAAG,EAAS,UAAa,EAAW,MAAM,CAAE,CAChD,CACF"}
@@ -1,15 +1,18 @@
1
1
  import { t as e } from "../../createArchiveFromEntries-BiBoi26P.js";
2
2
  import { n as t } from "../../fileAccessors-etcCPnpQ.js";
3
3
  //#region src/archives/createArchiveFromLibArchive.ts
4
- var n = async (n, r) => e(await n.getFilesArray(), (e) => ({
5
- dir: !1,
6
- uri: `${e.path}${e.file.name}`,
7
- size: e.file.size,
8
- ...t(() => e.file.extract())
9
- }), {
10
- ...r,
11
- close: () => n.close()
12
- });
4
+ var n = async (n, r) => {
5
+ let i = await n.getFilesArray();
6
+ return e(i, (e) => ({
7
+ dir: !1,
8
+ uri: `${e.path}${e.file.name}`,
9
+ size: e.file.size,
10
+ ...t(() => e.file.extract())
11
+ }), {
12
+ ...r,
13
+ close: () => n.close()
14
+ });
15
+ };
13
16
  //#endregion
14
17
  export { n as createArchiveFromLibArchive };
15
18
 
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":[],"sources":["../../../src/archives/createArchiveFromLibArchive.ts"],"sourcesContent":["/**\n * @see https://github.com/nika-begiashvili/libarchivejs.\n *\n * Does not work in service worker due to usage of web worker.\n */\n// libarchive.js only re-exports `Archive` from its package root; the reader and\n// compressed-file types live in the compiled output, so we reach for them there.\nimport type { ArchiveReader } from \"libarchive.js/dist/build/compiled/archive-reader\"\nimport type { CompressedFile } from \"libarchive.js/dist/build/compiled/compressed-file\"\nimport { createArchiveFromEntries } from \"./createArchiveFromEntries.ts\"\nimport { blobFileAccessors } from \"./fileAccessors.ts\"\nimport type { Archive } from \"./types.ts\"\n\nexport const createArchiveFromLibArchive = async (\n libArchive: ArchiveReader,\n options: { orderByAlpha?: boolean; name: string; encodingFormat?: string },\n): Promise<Archive> => {\n const objArray = await libArchive.getFilesArray()\n\n return createArchiveFromEntries(\n objArray,\n (item: { file: CompressedFile; path: string }) => ({\n dir: false,\n uri: `${item.path}${item.file.name}`,\n size: item.file.size,\n // libarchivejs `extract()` is typed `any`; it resolves to a `File`.\n ...blobFileAccessors(() => item.file.extract() as Promise<File>),\n }),\n { ...options, close: () => libArchive.close() },\n )\n}\n"],"mappings":";;;AAaA,IAAa,IAA8B,OACzC,GACA,MAIO,EACL,MAHqB,EAAW,cAAc,IAI7C,OAAkD;CACjD,KAAK;CACL,KAAK,GAAG,EAAK,OAAO,EAAK,KAAK;CAC9B,MAAM,EAAK,KAAK;CAEhB,GAAG,QAAwB,EAAK,KAAK,QAAQ,CAAkB;AACjE,IACA;CAAE,GAAG;CAAS,aAAa,EAAW,MAAM;AAAE,CAChD"}
1
+ {"version":3,"file":"index.js","names":[],"sources":["../../../src/archives/createArchiveFromLibArchive.ts"],"sourcesContent":["/**\n * @see https://github.com/nika-begiashvili/libarchivejs.\n *\n * Does not work in service worker due to usage of web worker.\n */\n// libarchive.js only re-exports `Archive` from its package root; the reader and\n// compressed-file types live in the compiled output, so we reach for them there.\nimport type { ArchiveReader } from \"libarchive.js/dist/build/compiled/archive-reader\"\nimport type { CompressedFile } from \"libarchive.js/dist/build/compiled/compressed-file\"\nimport { createArchiveFromEntries } from \"./createArchiveFromEntries.ts\"\nimport { blobFileAccessors } from \"./fileAccessors.ts\"\nimport type { Archive } from \"./types.ts\"\n\nexport const createArchiveFromLibArchive = async (\n libArchive: ArchiveReader,\n options: { orderByAlpha?: boolean; name: string; encodingFormat?: string },\n): Promise<Archive> => {\n const objArray = await libArchive.getFilesArray()\n\n return createArchiveFromEntries(\n objArray,\n (item: { file: CompressedFile; path: string }) => ({\n dir: false,\n uri: `${item.path}${item.file.name}`,\n size: item.file.size,\n // libarchivejs `extract()` is typed `any`; it resolves to a `File`.\n ...blobFileAccessors(() => item.file.extract() as Promise<File>),\n }),\n { ...options, close: () => libArchive.close() },\n )\n}\n"],"mappings":";;;AAaA,IAAa,IAA8B,OACzC,GACA,MACqB;CACrB,IAAM,IAAW,MAAM,EAAW,cAAc;CAEhD,OAAO,EACL,IACC,OAAkD;EACjD,KAAK;EACL,KAAK,GAAG,EAAK,OAAO,EAAK,KAAK;EAC9B,MAAM,EAAK,KAAK;EAEhB,GAAG,QAAwB,EAAK,KAAK,QAAQ,CAAkB;CACjE,IACA;EAAE,GAAG;EAAS,aAAa,EAAW,MAAM;CAAE,CAChD;AACF"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.cjs","names":[],"sources":["../../../src/archives/createArchiveFromNodeUnrarJs.ts"],"sourcesContent":["import { detectMimeTypeFromName } from \"@prose-reader/shared\"\nimport type { Extractor } from \"node-unrar-js\"\nimport { createArchiveFromEntries } from \"./createArchiveFromEntries.ts\"\nimport { arrayBufferFileAccessors } from \"./fileAccessors.ts\"\nimport type { Archive } from \"./types.ts\"\n\n/**\n * `node-unrar-js`'s `extract({ files })` returns a generator that keeps WASM\n * resources alive until it is consumed end-to-end; spreading into an array is\n * the documented way to drain and free it.\n */\nconst extractEntryBytes = (\n extractor: Extractor<Uint8Array>,\n uri: string,\n): Uint8Array => {\n const extracted = extractor.extract({ files: [uri] })\n const files = [...extracted.files]\n const bytes = files[0]?.extraction\n\n if (!bytes) {\n throw new Error(\n `node-unrar-js failed to extract entry \"${uri}\" from the RAR archive`,\n )\n }\n\n return bytes\n}\n\nexport const createArchiveFromNodeUnrarJs = async (\n extractor: Extractor<Uint8Array>,\n options: {\n orderByAlpha?: boolean\n name?: string\n encodingFormat?: string\n } = {},\n): Promise<Archive> =>\n createArchiveFromEntries(\n [...extractor.getFileList().fileHeaders],\n (header) =>\n header.flags.directory\n ? { dir: true, uri: header.name }\n : {\n dir: false,\n uri: header.name,\n size: header.unpSize,\n ...arrayBufferFileAccessors(async () => {\n const bytes = extractEntryBytes(extractor, header.name)\n // node-unrar-js extracts into a regular `Uint8Array`, whose\n // backing store is always an `ArrayBuffer` (never a\n // `SharedArrayBuffer`); the cast only drops the\n // `SharedArrayBuffer` arm that cannot occur here.\n const backing = bytes.buffer as ArrayBuffer\n\n // Each extraction returns a fresh, exactly-sized buffer that the\n // entry owns outright, so when the view spans the whole buffer it\n // can be handed out without copying.\n return bytes.byteOffset === 0 &&\n bytes.byteLength === backing.byteLength\n ? backing\n : backing.slice(\n bytes.byteOffset,\n bytes.byteOffset + bytes.byteLength,\n )\n }, detectMimeTypeFromName(header.name) ?? ``),\n },\n { ...options, close: () => Promise.resolve() },\n )\n"],"mappings":"sNAWA,IAAM,GACJ,EACA,IACe,CAGf,IAAM,EAAQ,CADC,GADG,EAAU,QAAQ,CAAE,MAAO,CAAC,CAAG,CAAE,CACjC,CAAA,CAAU,KACd,CAAA,CAAM,EAAE,EAAE,WAExB,GAAI,CAAC,EACH,MAAU,MACR,0CAA0C,EAAI,uBAChD,EAGF,OAAO,CACT,EAEa,EAA+B,MAC1C,EACA,EAII,CAAC,IAEL,EAAA,EACE,CAAC,GAAG,EAAU,YAAY,CAAC,CAAC,WAAW,EACtC,GACC,EAAO,MAAM,UACT,CAAE,IAAK,GAAM,IAAK,EAAO,IAAK,EAC9B,CACE,IAAK,GACL,IAAK,EAAO,KACZ,KAAM,EAAO,QACb,GAAG,EAAA,EAAyB,SAAY,CACtC,IAAM,EAAQ,EAAkB,EAAW,EAAO,IAAI,EAKhD,EAAU,EAAM,OAKtB,OAAO,EAAM,aAAe,GAC1B,EAAM,aAAe,EAAQ,WAC3B,EACA,EAAQ,MACN,EAAM,WACN,EAAM,WAAa,EAAM,UAC3B,CACN,GAAA,EAAA,EAAA,uBAAA,CAA0B,EAAO,IAAI,GAAK,EAAE,CAC9C,EACN,CAAE,GAAG,EAAS,UAAa,QAAQ,QAAQ,CAAE,CAC/C"}
1
+ {"version":3,"file":"index.cjs","names":[],"sources":["../../../src/archives/createArchiveFromNodeUnrarJs.ts"],"sourcesContent":["import { detectMimeTypeFromName } from \"@prose-reader/shared\"\nimport type { Extractor } from \"node-unrar-js\"\nimport { createArchiveFromEntries } from \"./createArchiveFromEntries.ts\"\nimport { arrayBufferFileAccessors } from \"./fileAccessors.ts\"\nimport type { Archive } from \"./types.ts\"\n\n/**\n * `node-unrar-js`'s `extract({ files })` returns a generator that keeps WASM\n * resources alive until it is consumed end-to-end; spreading into an array is\n * the documented way to drain and free it.\n */\nconst extractEntryBytes = (\n extractor: Extractor<Uint8Array>,\n uri: string,\n): Uint8Array => {\n const extracted = extractor.extract({ files: [uri] })\n const files = [...extracted.files]\n const bytes = files[0]?.extraction\n\n if (!bytes) {\n throw new Error(\n `node-unrar-js failed to extract entry \"${uri}\" from the RAR archive`,\n )\n }\n\n return bytes\n}\n\nexport const createArchiveFromNodeUnrarJs = async (\n extractor: Extractor<Uint8Array>,\n options: {\n orderByAlpha?: boolean\n name?: string\n encodingFormat?: string\n } = {},\n): Promise<Archive> =>\n createArchiveFromEntries(\n [...extractor.getFileList().fileHeaders],\n (header) =>\n header.flags.directory\n ? { dir: true, uri: header.name }\n : {\n dir: false,\n uri: header.name,\n size: header.unpSize,\n ...arrayBufferFileAccessors(async () => {\n const bytes = extractEntryBytes(extractor, header.name)\n // node-unrar-js extracts into a regular `Uint8Array`, whose\n // backing store is always an `ArrayBuffer` (never a\n // `SharedArrayBuffer`); the cast only drops the\n // `SharedArrayBuffer` arm that cannot occur here.\n const backing = bytes.buffer as ArrayBuffer\n\n // Each extraction returns a fresh, exactly-sized buffer that the\n // entry owns outright, so when the view spans the whole buffer it\n // can be handed out without copying.\n return bytes.byteOffset === 0 &&\n bytes.byteLength === backing.byteLength\n ? backing\n : backing.slice(\n bytes.byteOffset,\n bytes.byteOffset + bytes.byteLength,\n )\n }, detectMimeTypeFromName(header.name) ?? ``),\n },\n { ...options, close: () => Promise.resolve() },\n )\n"],"mappings":"sNAWA,IAAM,GACJ,EACA,IACe,CAGf,IAAM,EAAQ,CADC,GADG,EAAU,QAAQ,CAAE,MAAO,CAAC,CAAG,CAAE,CACjC,CAAA,CAAU,KACd,CAAA,CAAM,EAAE,EAAE,WAExB,GAAI,CAAC,EACH,MAAU,MACR,0CAA0C,EAAI,uBAChD,EAGF,OAAO,CACT,EAEa,EAA+B,MAC1C,EACA,EAII,CAAC,IAEL,EAAA,EACE,CAAC,GAAG,EAAU,YAAY,CAAC,CAAC,WAAW,EACtC,GACC,EAAO,MAAM,UACT,CAAE,IAAK,GAAM,IAAK,EAAO,IAAK,EAC9B,CACE,IAAK,GACL,IAAK,EAAO,KACZ,KAAM,EAAO,QACb,GAAG,EAAA,EAAyB,SAAY,CACtC,IAAM,EAAQ,EAAkB,EAAW,EAAO,IAAI,EAKhD,EAAU,EAAM,OAKtB,OAAO,EAAM,aAAe,GAC1B,EAAM,aAAe,EAAQ,WAC3B,EACA,EAAQ,MACN,EAAM,WACN,EAAM,WAAa,EAAM,UAC3B,CACN,GAAA,EAAG,EAAA,uBAAA,CAAuB,EAAO,IAAI,GAAK,EAAE,CAC9C,EACN,CAAE,GAAG,EAAS,UAAa,QAAQ,QAAQ,CAAE,CAC/C"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.cjs","names":[],"sources":["../../../src/archives/createArchiveFromUnzipper.ts"],"sourcesContent":["import { detectMimeTypeFromName } from \"@prose-reader/shared\"\nimport type { CentralDirectory } from \"unzipper\"\nimport { createArchiveFromEntries } from \"./createArchiveFromEntries.ts\"\nimport { arrayBufferFileAccessors } from \"./fileAccessors.ts\"\nimport type { Archive } from \"./types.ts\"\n\nexport const createArchiveFromUnzipper = async (\n directory: CentralDirectory,\n options: {\n orderByAlpha?: boolean\n name?: string\n encodingFormat?: string\n } = {},\n): Promise<Archive> =>\n createArchiveFromEntries(\n directory.files,\n (file) =>\n file.type === `Directory`\n ? { dir: true, uri: file.path }\n : {\n dir: false,\n uri: file.path,\n size: file.uncompressedSize,\n ...arrayBufferFileAccessors(async () => {\n const buffer = await file.buffer()\n // unzipper decodes into a regular Node `Buffer`, whose backing\n // store is always an `ArrayBuffer` (never a `SharedArrayBuffer`);\n // the cast only drops the `SharedArrayBuffer` arm that cannot\n // occur here.\n const backing = buffer.buffer as ArrayBuffer\n\n // Non-pooled (large) allocations own a dedicated, exactly-sized\n // backing buffer, so they can be handed out without copying.\n // Pooled small buffers share their backing store with other\n // entries and must be sliced out.\n return buffer.byteOffset === 0 &&\n buffer.byteLength === backing.byteLength\n ? backing\n : backing.slice(\n buffer.byteOffset,\n buffer.byteOffset + buffer.byteLength,\n )\n }, detectMimeTypeFromName(file.path) ?? ``),\n },\n { ...options, close: () => Promise.resolve() },\n )\n"],"mappings":"sNAMA,IAAa,EAA4B,MACvC,EACA,EAII,CAAC,IAEL,EAAA,EACE,EAAU,MACT,GACC,EAAK,OAAS,YACV,CAAE,IAAK,GAAM,IAAK,EAAK,IAAK,EAC5B,CACE,IAAK,GACL,IAAK,EAAK,KACV,KAAM,EAAK,iBACX,GAAG,EAAA,EAAyB,SAAY,CACtC,IAAM,EAAS,MAAM,EAAK,OAAO,EAK3B,EAAU,EAAO,OAMvB,OAAO,EAAO,aAAe,GAC3B,EAAO,aAAe,EAAQ,WAC5B,EACA,EAAQ,MACN,EAAO,WACP,EAAO,WAAa,EAAO,UAC7B,CACN,GAAA,EAAA,EAAA,uBAAA,CAA0B,EAAK,IAAI,GAAK,EAAE,CAC5C,EACN,CAAE,GAAG,EAAS,UAAa,QAAQ,QAAQ,CAAE,CAC/C"}
1
+ {"version":3,"file":"index.cjs","names":[],"sources":["../../../src/archives/createArchiveFromUnzipper.ts"],"sourcesContent":["import { detectMimeTypeFromName } from \"@prose-reader/shared\"\nimport type { CentralDirectory } from \"unzipper\"\nimport { createArchiveFromEntries } from \"./createArchiveFromEntries.ts\"\nimport { arrayBufferFileAccessors } from \"./fileAccessors.ts\"\nimport type { Archive } from \"./types.ts\"\n\nexport const createArchiveFromUnzipper = async (\n directory: CentralDirectory,\n options: {\n orderByAlpha?: boolean\n name?: string\n encodingFormat?: string\n } = {},\n): Promise<Archive> =>\n createArchiveFromEntries(\n directory.files,\n (file) =>\n file.type === `Directory`\n ? { dir: true, uri: file.path }\n : {\n dir: false,\n uri: file.path,\n size: file.uncompressedSize,\n ...arrayBufferFileAccessors(async () => {\n const buffer = await file.buffer()\n // unzipper decodes into a regular Node `Buffer`, whose backing\n // store is always an `ArrayBuffer` (never a `SharedArrayBuffer`);\n // the cast only drops the `SharedArrayBuffer` arm that cannot\n // occur here.\n const backing = buffer.buffer as ArrayBuffer\n\n // Non-pooled (large) allocations own a dedicated, exactly-sized\n // backing buffer, so they can be handed out without copying.\n // Pooled small buffers share their backing store with other\n // entries and must be sliced out.\n return buffer.byteOffset === 0 &&\n buffer.byteLength === backing.byteLength\n ? backing\n : backing.slice(\n buffer.byteOffset,\n buffer.byteOffset + buffer.byteLength,\n )\n }, detectMimeTypeFromName(file.path) ?? ``),\n },\n { ...options, close: () => Promise.resolve() },\n )\n"],"mappings":"sNAMA,IAAa,EAA4B,MACvC,EACA,EAII,CAAC,IAEL,EAAA,EACE,EAAU,MACT,GACC,EAAK,OAAS,YACV,CAAE,IAAK,GAAM,IAAK,EAAK,IAAK,EAC5B,CACE,IAAK,GACL,IAAK,EAAK,KACV,KAAM,EAAK,iBACX,GAAG,EAAA,EAAyB,SAAY,CACtC,IAAM,EAAS,MAAM,EAAK,OAAO,EAK3B,EAAU,EAAO,OAMvB,OAAO,EAAO,aAAe,GAC3B,EAAO,aAAe,EAAQ,WAC5B,EACA,EAAQ,MACN,EAAO,WACP,EAAO,WAAa,EAAO,UAC7B,CACN,GAAA,EAAG,EAAA,uBAAA,CAAuB,EAAK,IAAI,GAAK,EAAE,CAC5C,EACN,CAAE,GAAG,EAAS,UAAa,QAAQ,QAAQ,CAAE,CAC/C"}
@@ -1,2 +1,2 @@
1
- Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("../../createArchiveFromEntries-DcPCGgZW.cjs"),t=require("../../fileAccessors-DWVChFUB.cjs");let n=require("@prose-reader/shared");var r=async(r,i={})=>e.t(await r.getEntries(),e=>e.directory?{dir:!0,uri:e.filename}:{dir:!1,uri:e.filename,size:e.uncompressedSize,...t.t(()=>e.arrayBuffer(),(0,n.detectMimeTypeFromName)(e.filename)??``)},{...i,close:()=>r.close()});exports.createArchiveFromZipJs=r;
1
+ Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("../../createArchiveFromEntries-DcPCGgZW.cjs"),t=require("../../fileAccessors-DWVChFUB.cjs");let n=require("@prose-reader/shared");var r=async(r,i={})=>{let a=await r.getEntries();return e.t(a,e=>e.directory?{dir:!0,uri:e.filename}:{dir:!1,uri:e.filename,size:e.uncompressedSize,...t.t(()=>e.arrayBuffer(),(0,n.detectMimeTypeFromName)(e.filename)??``)},{...i,close:()=>r.close()})};exports.createArchiveFromZipJs=r;
2
2
  //# sourceMappingURL=index.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.cjs","names":[],"sources":["../../../src/archives/createArchiveFromZipJs.ts"],"sourcesContent":["import { detectMimeTypeFromName } from \"@prose-reader/shared\"\nimport type { ZipReader } from \"@zip.js/zip.js\"\nimport { createArchiveFromEntries } from \"./createArchiveFromEntries.ts\"\nimport { arrayBufferFileAccessors } from \"./fileAccessors.ts\"\nimport type { Archive } from \"./types.ts\"\n\nexport const createArchiveFromZipJs = async (\n zipReader: ZipReader<unknown>,\n options: {\n orderByAlpha?: boolean\n name?: string\n encodingFormat?: string\n } = {},\n): Promise<Archive> => {\n const entries = await zipReader.getEntries()\n\n return createArchiveFromEntries(\n entries,\n (entry) =>\n entry.directory\n ? { dir: true, uri: entry.filename }\n : {\n dir: false,\n uri: entry.filename,\n size: entry.uncompressedSize,\n ...arrayBufferFileAccessors(\n () => entry.arrayBuffer(),\n detectMimeTypeFromName(entry.filename) ?? ``,\n ),\n },\n { ...options, close: () => zipReader.close() },\n )\n}\n"],"mappings":"sNAMA,IAAa,EAAyB,MACpC,EACA,EAII,CAAC,IAIE,EAAA,EACL,MAHoB,EAAU,WAAW,EAIxC,GACC,EAAM,UACF,CAAE,IAAK,GAAM,IAAK,EAAM,QAAS,EACjC,CACE,IAAK,GACL,IAAK,EAAM,SACX,KAAM,EAAM,iBACZ,GAAG,EAAA,MACK,EAAM,YAAY,GAAA,EAAA,EAAA,uBAAA,CACD,EAAM,QAAQ,GAAK,EAC5C,CACF,EACN,CAAE,GAAG,EAAS,UAAa,EAAU,MAAM,CAAE,CAC/C"}
1
+ {"version":3,"file":"index.cjs","names":[],"sources":["../../../src/archives/createArchiveFromZipJs.ts"],"sourcesContent":["import { detectMimeTypeFromName } from \"@prose-reader/shared\"\nimport type { ZipReader } from \"@zip.js/zip.js\"\nimport { createArchiveFromEntries } from \"./createArchiveFromEntries.ts\"\nimport { arrayBufferFileAccessors } from \"./fileAccessors.ts\"\nimport type { Archive } from \"./types.ts\"\n\nexport const createArchiveFromZipJs = async (\n zipReader: ZipReader<unknown>,\n options: {\n orderByAlpha?: boolean\n name?: string\n encodingFormat?: string\n } = {},\n): Promise<Archive> => {\n const entries = await zipReader.getEntries()\n\n return createArchiveFromEntries(\n entries,\n (entry) =>\n entry.directory\n ? { dir: true, uri: entry.filename }\n : {\n dir: false,\n uri: entry.filename,\n size: entry.uncompressedSize,\n ...arrayBufferFileAccessors(\n () => entry.arrayBuffer(),\n detectMimeTypeFromName(entry.filename) ?? ``,\n ),\n },\n { ...options, close: () => zipReader.close() },\n )\n}\n"],"mappings":"sNAMA,IAAa,EAAyB,MACpC,EACA,EAII,CAAC,IACgB,CACrB,IAAM,EAAU,MAAM,EAAU,WAAW,EAE3C,OAAO,EAAA,EACL,EACC,GACC,EAAM,UACF,CAAE,IAAK,GAAM,IAAK,EAAM,QAAS,EACjC,CACE,IAAK,GACL,IAAK,EAAM,SACX,KAAM,EAAM,iBACZ,GAAG,EAAA,MACK,EAAM,YAAY,GAAA,EACxB,EAAA,uBAAA,CAAuB,EAAM,QAAQ,GAAK,EAC5C,CACF,EACN,CAAE,GAAG,EAAS,UAAa,EAAU,MAAM,CAAE,CAC/C,CACF"}
@@ -2,18 +2,21 @@ import { t as e } from "../../createArchiveFromEntries-BiBoi26P.js";
2
2
  import { t } from "../../fileAccessors-etcCPnpQ.js";
3
3
  import { detectMimeTypeFromName as n } from "@prose-reader/shared";
4
4
  //#region src/archives/createArchiveFromZipJs.ts
5
- var r = async (r, i = {}) => e(await r.getEntries(), (e) => e.directory ? {
6
- dir: !0,
7
- uri: e.filename
8
- } : {
9
- dir: !1,
10
- uri: e.filename,
11
- size: e.uncompressedSize,
12
- ...t(() => e.arrayBuffer(), n(e.filename) ?? "")
13
- }, {
14
- ...i,
15
- close: () => r.close()
16
- });
5
+ var r = async (r, i = {}) => {
6
+ let a = await r.getEntries();
7
+ return e(a, (e) => e.directory ? {
8
+ dir: !0,
9
+ uri: e.filename
10
+ } : {
11
+ dir: !1,
12
+ uri: e.filename,
13
+ size: e.uncompressedSize,
14
+ ...t(() => e.arrayBuffer(), n(e.filename) ?? "")
15
+ }, {
16
+ ...i,
17
+ close: () => r.close()
18
+ });
19
+ };
17
20
  //#endregion
18
21
  export { r as createArchiveFromZipJs };
19
22
 
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":[],"sources":["../../../src/archives/createArchiveFromZipJs.ts"],"sourcesContent":["import { detectMimeTypeFromName } from \"@prose-reader/shared\"\nimport type { ZipReader } from \"@zip.js/zip.js\"\nimport { createArchiveFromEntries } from \"./createArchiveFromEntries.ts\"\nimport { arrayBufferFileAccessors } from \"./fileAccessors.ts\"\nimport type { Archive } from \"./types.ts\"\n\nexport const createArchiveFromZipJs = async (\n zipReader: ZipReader<unknown>,\n options: {\n orderByAlpha?: boolean\n name?: string\n encodingFormat?: string\n } = {},\n): Promise<Archive> => {\n const entries = await zipReader.getEntries()\n\n return createArchiveFromEntries(\n entries,\n (entry) =>\n entry.directory\n ? { dir: true, uri: entry.filename }\n : {\n dir: false,\n uri: entry.filename,\n size: entry.uncompressedSize,\n ...arrayBufferFileAccessors(\n () => entry.arrayBuffer(),\n detectMimeTypeFromName(entry.filename) ?? ``,\n ),\n },\n { ...options, close: () => zipReader.close() },\n )\n}\n"],"mappings":";;;;AAMA,IAAa,IAAyB,OACpC,GACA,IAII,CAAC,MAIE,EACL,MAHoB,EAAU,WAAW,IAIxC,MACC,EAAM,YACF;CAAE,KAAK;CAAM,KAAK,EAAM;AAAS,IACjC;CACE,KAAK;CACL,KAAK,EAAM;CACX,MAAM,EAAM;CACZ,GAAG,QACK,EAAM,YAAY,GACxB,EAAuB,EAAM,QAAQ,KAAK,EAC5C;AACF,GACN;CAAE,GAAG;CAAS,aAAa,EAAU,MAAM;AAAE,CAC/C"}
1
+ {"version":3,"file":"index.js","names":[],"sources":["../../../src/archives/createArchiveFromZipJs.ts"],"sourcesContent":["import { detectMimeTypeFromName } from \"@prose-reader/shared\"\nimport type { ZipReader } from \"@zip.js/zip.js\"\nimport { createArchiveFromEntries } from \"./createArchiveFromEntries.ts\"\nimport { arrayBufferFileAccessors } from \"./fileAccessors.ts\"\nimport type { Archive } from \"./types.ts\"\n\nexport const createArchiveFromZipJs = async (\n zipReader: ZipReader<unknown>,\n options: {\n orderByAlpha?: boolean\n name?: string\n encodingFormat?: string\n } = {},\n): Promise<Archive> => {\n const entries = await zipReader.getEntries()\n\n return createArchiveFromEntries(\n entries,\n (entry) =>\n entry.directory\n ? { dir: true, uri: entry.filename }\n : {\n dir: false,\n uri: entry.filename,\n size: entry.uncompressedSize,\n ...arrayBufferFileAccessors(\n () => entry.arrayBuffer(),\n detectMimeTypeFromName(entry.filename) ?? ``,\n ),\n },\n { ...options, close: () => zipReader.close() },\n )\n}\n"],"mappings":";;;;AAMA,IAAa,IAAyB,OACpC,GACA,IAII,CAAC,MACgB;CACrB,IAAM,IAAU,MAAM,EAAU,WAAW;CAE3C,OAAO,EACL,IACC,MACC,EAAM,YACF;EAAE,KAAK;EAAM,KAAK,EAAM;CAAS,IACjC;EACE,KAAK;EACL,KAAK,EAAM;EACX,MAAM,EAAM;EACZ,GAAG,QACK,EAAM,YAAY,GACxB,EAAuB,EAAM,QAAQ,KAAK,EAC5C;CACF,GACN;EAAE,GAAG;EAAS,aAAa,EAAU,MAAM;CAAE,CAC/C;AACF"}
@@ -1 +1 @@
1
- {"version":3,"file":"createArchiveFromEntries-DcPCGgZW.cjs","names":[],"sources":["../src/report.ts","../src/archives/printTree.ts","../src/archives/createArchive.ts","../src/archives/createArchiveFromEntries.ts"],"sourcesContent":["import { Report as SharedReport } from \"@prose-reader/shared\"\n\nconst PACKAGE_NAME = \"@prose-reader/archive-reader\"\n\n// No explicit `enabled`: inherit the shared root, which auto-configures from\n// the `globalThis.__PROSE_READER_DEBUG` flag (works in window, workers, node).\nexport const Report = SharedReport.namespace(PACKAGE_NAME, undefined, {\n color: \"#42b0a5\",\n})\n","interface TreeNode {\n [key: string]: TreeNode\n}\n\nexport const printTree = (paths: string[]): string => {\n // Split and collect all parts for tree reconstruction\n const tree: TreeNode = {}\n for (const path of paths) {\n const parts = path.split(\"/\")\n let node = tree\n for (let i = 0; i < parts.length; i++) {\n const part = parts[i]\n if (part === undefined) continue\n if (!node[part]) {\n node[part] = {}\n }\n node = node[part]\n }\n }\n\n // Recursively build the tree string\n const render = (node: TreeNode, indent = \"\"): string => {\n return Object.keys(node)\n .sort()\n .map((key, i, arr) => {\n const isLast = i === arr.length - 1\n const prefix = indent + (isLast ? \"└── \" : \"├── \")\n const nextIndent = indent + (isLast ? \" \" : \"│ \")\n const value = node[key]\n if (value && Object.keys(value).length > 0) {\n return `${prefix}${key}/\\n${render(value, nextIndent)}`\n }\n return `${prefix}${key}`\n })\n .join(\"\\n\")\n }\n\n return render(tree)\n}\n","import { Report } from \"../report.ts\"\nimport { printTree } from \"./printTree.ts\"\nimport type { Archive, ArchiveRecord } from \"./types.ts\"\n\ntype ArchiveInit = Omit<Archive, \"recordsByUri\">\n\n/**\n * Builds an {@link Archive} from its records and derives the `recordsByUri`\n * lookup index once, so consumers resolve records in O(1) on the hot path\n * instead of scanning {@link Archive.records}. Duplicate URIs keep the first\n * record, matching the previous `Array.prototype.find` semantics.\n */\nexport const createArchive = ({ records, ...rest }: ArchiveInit): Archive => {\n const recordsByUri = new Map<string, ArchiveRecord>()\n\n for (const record of records) {\n if (!recordsByUri.has(record.uri)) {\n recordsByUri.set(record.uri, record)\n }\n }\n\n const archive: Archive = {\n ...rest,\n records,\n recordsByUri,\n }\n\n Report.log(\"Generated archive\", archive)\n\n if (process.env.NODE_ENV === \"development\") {\n if (Report.isEnabled()) {\n const folderStructureStr = printTree(records.map((record) => record.uri))\n Report.groupCollapsed(...Report.getGroupArgs(\"Archive folder structure\"))\n Report.log(`\\n${folderStructureStr}`)\n Report.groupEnd()\n }\n }\n\n return archive\n}\n","import {\n detectMimeTypeFromName,\n getUriBasename,\n sortByTitleComparator,\n} from \"@prose-reader/shared\"\nimport { createArchive } from \"./createArchive.ts\"\nimport type { Archive, ArchiveRecord, FileRecord } from \"./types.ts\"\n\n/**\n * Normalized view of a source entry, shared by every `createArchiveFrom*`\n * creator that enumerates a flat list of records. A source only has to provide\n * each entry's `uri`, whether it is a directory, and (for files) its `size`\n * plus content accessors; everything else (basename derivation, mime\n * detection, ordering, the `recordsByUri` index) is handled centrally here.\n */\nexport type ArchiveEntry =\n | { dir: true; uri: string }\n | ({ dir: false; uri: string; size: number } & Pick<\n FileRecord,\n \"blob\" | \"arrayBuffer\"\n >)\n\nexport type CreateArchiveFromEntriesOptions = {\n orderByAlpha?: boolean\n name?: string\n encodingFormat?: string\n close: () => Promise<void>\n}\n\n/**\n * Builds an {@link Archive} from an arbitrary source list. `toEntry` is invoked\n * once per item, and the resulting records are sorted in place when\n * `orderByAlpha` is set — there is no intermediate array, so construction stays\n * a single map plus an optional sort regardless of the source.\n */\nexport const createArchiveFromEntries = <Item>(\n items: Item[],\n toEntry: (item: Item) => ArchiveEntry,\n {\n orderByAlpha,\n name,\n encodingFormat,\n close,\n }: CreateArchiveFromEntriesOptions,\n): Archive => {\n const records = items.map((item): ArchiveRecord => {\n const entry = toEntry(item)\n const basename = getUriBasename(entry.uri)\n\n if (entry.dir) {\n return { dir: true, basename, uri: entry.uri }\n }\n\n return {\n dir: false,\n basename,\n uri: entry.uri,\n encodingFormat: detectMimeTypeFromName(entry.uri),\n size: entry.size,\n blob: entry.blob,\n arrayBuffer: entry.arrayBuffer,\n }\n })\n\n if (orderByAlpha) {\n records.sort((a, b) => sortByTitleComparator(a.uri, b.uri))\n }\n\n return createArchive({ filename: name, encodingFormat, records, close })\n}\n"],"mappings":"sCAMA,IAAa,EAAS,EAAA,OAAa,UAAU,+BAAc,IAAA,GAAW,CACpE,MAAO,SACT,CAAC,ECJY,EAAa,GAA4B,CAEpD,IAAM,EAAiB,CAAC,EACxB,IAAK,IAAM,KAAQ,EAAO,CACxB,IAAM,EAAQ,EAAK,MAAM,GAAG,EACxB,EAAO,EACX,IAAK,IAAI,EAAI,EAAG,EAAI,EAAM,OAAQ,IAAK,CACrC,IAAM,EAAO,EAAM,GACf,IAAS,IAAA,KACR,EAAK,KACR,EAAK,GAAQ,CAAC,GAEhB,EAAO,EAAK,GACd,CACF,CAGA,IAAM,GAAU,EAAgB,EAAS,KAChC,OAAO,KAAK,CAAI,CAAC,CACrB,KAAK,CAAC,CACN,KAAK,EAAK,EAAG,IAAQ,CACpB,IAAM,EAAS,IAAM,EAAI,OAAS,EAC5B,EAAS,GAAU,EAAS,OAAS,QACrC,EAAa,GAAU,EAAS,OAAS,QACzC,EAAQ,EAAK,GAInB,OAHI,GAAS,OAAO,KAAK,CAAK,CAAC,CAAC,OAAS,EAChC,GAAG,IAAS,EAAI,KAAK,EAAO,EAAO,CAAU,IAE/C,GAAG,IAAS,GACrB,CAAC,CAAC,CACD,KAAK;CAAI,EAGd,OAAO,EAAO,CAAI,CACpB,EC1Ba,GAAiB,CAAE,UAAS,GAAG,KAAiC,CAC3E,IAAM,EAAe,IAAI,IAEzB,IAAK,IAAM,KAAU,EACd,EAAa,IAAI,EAAO,GAAG,GAC9B,EAAa,IAAI,EAAO,IAAK,CAAM,EAIvC,IAAM,EAAmB,CACvB,GAAG,EACH,UACA,cACF,EAIA,GAFA,EAAO,IAAI,oBAAqB,CAAO,EAEvC,QAAA,IAAA,WAA6B,eACvB,EAAO,UAAU,EAAG,CACtB,IAAM,EAAqB,EAAU,EAAQ,IAAK,GAAW,EAAO,GAAG,CAAC,EACxE,EAAO,eAAe,GAAG,EAAO,aAAa,0BAA0B,CAAC,EACxE,EAAO,IAAI,KAAK,GAAoB,EACpC,EAAO,SAAS,CAClB,CAGF,OAAO,CACT,ECJa,GACX,EACA,EACA,CACE,eACA,OACA,iBACA,WAEU,CACZ,IAAM,EAAU,EAAM,IAAK,GAAwB,CACjD,IAAM,EAAQ,EAAQ,CAAI,EACpB,GAAA,EAAA,EAAA,eAAA,CAA0B,EAAM,GAAG,EAMzC,OAJI,EAAM,IACD,CAAE,IAAK,GAAM,WAAU,IAAK,EAAM,GAAI,EAGxC,CACL,IAAK,GACL,WACA,IAAK,EAAM,IACX,gBAAA,EAAA,EAAA,uBAAA,CAAuC,EAAM,GAAG,EAChD,KAAM,EAAM,KACZ,KAAM,EAAM,KACZ,YAAa,EAAM,WACrB,CACF,CAAC,EAMD,OAJI,GACF,EAAQ,MAAM,EAAG,KAAA,EAAA,EAAA,sBAAA,CAA4B,EAAE,IAAK,EAAE,GAAG,CAAC,EAGrD,EAAc,CAAE,SAAU,EAAM,iBAAgB,UAAS,OAAM,CAAC,CACzE"}
1
+ {"version":3,"file":"createArchiveFromEntries-DcPCGgZW.cjs","names":[],"sources":["../src/report.ts","../src/archives/printTree.ts","../src/archives/createArchive.ts","../src/archives/createArchiveFromEntries.ts"],"sourcesContent":["import { Report as SharedReport } from \"@prose-reader/shared\"\n\nconst PACKAGE_NAME = \"@prose-reader/archive-reader\"\n\n// No explicit `enabled`: inherit the shared root, which auto-configures from\n// the `globalThis.__PROSE_READER_DEBUG` flag (works in window, workers, node).\nexport const Report = SharedReport.namespace(PACKAGE_NAME, undefined, {\n color: \"#42b0a5\",\n})\n","interface TreeNode {\n [key: string]: TreeNode\n}\n\nexport const printTree = (paths: string[]): string => {\n // Split and collect all parts for tree reconstruction\n const tree: TreeNode = {}\n for (const path of paths) {\n const parts = path.split(\"/\")\n let node = tree\n for (let i = 0; i < parts.length; i++) {\n const part = parts[i]\n if (part === undefined) continue\n if (!node[part]) {\n node[part] = {}\n }\n node = node[part]\n }\n }\n\n // Recursively build the tree string\n const render = (node: TreeNode, indent = \"\"): string => {\n return Object.keys(node)\n .sort()\n .map((key, i, arr) => {\n const isLast = i === arr.length - 1\n const prefix = indent + (isLast ? \"└── \" : \"├── \")\n const nextIndent = indent + (isLast ? \" \" : \"│ \")\n const value = node[key]\n if (value && Object.keys(value).length > 0) {\n return `${prefix}${key}/\\n${render(value, nextIndent)}`\n }\n return `${prefix}${key}`\n })\n .join(\"\\n\")\n }\n\n return render(tree)\n}\n","import { Report } from \"../report.ts\"\nimport { printTree } from \"./printTree.ts\"\nimport type { Archive, ArchiveRecord } from \"./types.ts\"\n\ntype ArchiveInit = Omit<Archive, \"recordsByUri\">\n\n/**\n * Builds an {@link Archive} from its records and derives the `recordsByUri`\n * lookup index once, so consumers resolve records in O(1) on the hot path\n * instead of scanning {@link Archive.records}. Duplicate URIs keep the first\n * record, matching the previous `Array.prototype.find` semantics.\n */\nexport const createArchive = ({ records, ...rest }: ArchiveInit): Archive => {\n const recordsByUri = new Map<string, ArchiveRecord>()\n\n for (const record of records) {\n if (!recordsByUri.has(record.uri)) {\n recordsByUri.set(record.uri, record)\n }\n }\n\n const archive: Archive = {\n ...rest,\n records,\n recordsByUri,\n }\n\n Report.log(\"Generated archive\", archive)\n\n if (process.env.NODE_ENV === \"development\") {\n if (Report.isEnabled()) {\n const folderStructureStr = printTree(records.map((record) => record.uri))\n Report.groupCollapsed(...Report.getGroupArgs(\"Archive folder structure\"))\n Report.log(`\\n${folderStructureStr}`)\n Report.groupEnd()\n }\n }\n\n return archive\n}\n","import {\n detectMimeTypeFromName,\n getUriBasename,\n sortByTitleComparator,\n} from \"@prose-reader/shared\"\nimport { createArchive } from \"./createArchive.ts\"\nimport type { Archive, ArchiveRecord, FileRecord } from \"./types.ts\"\n\n/**\n * Normalized view of a source entry, shared by every `createArchiveFrom*`\n * creator that enumerates a flat list of records. A source only has to provide\n * each entry's `uri`, whether it is a directory, and (for files) its `size`\n * plus content accessors; everything else (basename derivation, mime\n * detection, ordering, the `recordsByUri` index) is handled centrally here.\n */\nexport type ArchiveEntry =\n | { dir: true; uri: string }\n | ({ dir: false; uri: string; size: number } & Pick<\n FileRecord,\n \"blob\" | \"arrayBuffer\"\n >)\n\nexport type CreateArchiveFromEntriesOptions = {\n orderByAlpha?: boolean\n name?: string\n encodingFormat?: string\n close: () => Promise<void>\n}\n\n/**\n * Builds an {@link Archive} from an arbitrary source list. `toEntry` is invoked\n * once per item, and the resulting records are sorted in place when\n * `orderByAlpha` is set — there is no intermediate array, so construction stays\n * a single map plus an optional sort regardless of the source.\n */\nexport const createArchiveFromEntries = <Item>(\n items: Item[],\n toEntry: (item: Item) => ArchiveEntry,\n {\n orderByAlpha,\n name,\n encodingFormat,\n close,\n }: CreateArchiveFromEntriesOptions,\n): Archive => {\n const records = items.map((item): ArchiveRecord => {\n const entry = toEntry(item)\n const basename = getUriBasename(entry.uri)\n\n if (entry.dir) {\n return { dir: true, basename, uri: entry.uri }\n }\n\n return {\n dir: false,\n basename,\n uri: entry.uri,\n encodingFormat: detectMimeTypeFromName(entry.uri),\n size: entry.size,\n blob: entry.blob,\n arrayBuffer: entry.arrayBuffer,\n }\n })\n\n if (orderByAlpha) {\n records.sort((a, b) => sortByTitleComparator(a.uri, b.uri))\n }\n\n return createArchive({ filename: name, encodingFormat, records, close })\n}\n"],"mappings":"sCAMA,IAAa,EAAS,EAAA,OAAa,UAAU,+BAAc,IAAA,GAAW,CACpE,MAAO,SACT,CAAC,ECJY,EAAa,GAA4B,CAEpD,IAAM,EAAiB,CAAC,EACxB,IAAK,IAAM,KAAQ,EAAO,CACxB,IAAM,EAAQ,EAAK,MAAM,GAAG,EACxB,EAAO,EACX,IAAK,IAAI,EAAI,EAAG,EAAI,EAAM,OAAQ,IAAK,CACrC,IAAM,EAAO,EAAM,GACf,IAAS,IAAA,KACR,EAAK,KACR,EAAK,GAAQ,CAAC,GAEhB,EAAO,EAAK,GACd,CACF,CAGA,IAAM,GAAU,EAAgB,EAAS,KAChC,OAAO,KAAK,CAAI,CAAC,CACrB,KAAK,CAAC,CACN,KAAK,EAAK,EAAG,IAAQ,CACpB,IAAM,EAAS,IAAM,EAAI,OAAS,EAC5B,EAAS,GAAU,EAAS,OAAS,QACrC,EAAa,GAAU,EAAS,OAAS,QACzC,EAAQ,EAAK,GAInB,OAHI,GAAS,OAAO,KAAK,CAAK,CAAC,CAAC,OAAS,EAChC,GAAG,IAAS,EAAI,KAAK,EAAO,EAAO,CAAU,IAE/C,GAAG,IAAS,GACrB,CAAC,CAAC,CACD,KAAK;CAAI,EAGd,OAAO,EAAO,CAAI,CACpB,EC1Ba,GAAiB,CAAE,UAAS,GAAG,KAAiC,CAC3E,IAAM,EAAe,IAAI,IAEzB,IAAK,IAAM,KAAU,EACd,EAAa,IAAI,EAAO,GAAG,GAC9B,EAAa,IAAI,EAAO,IAAK,CAAM,EAIvC,IAAM,EAAmB,CACvB,GAAG,EACH,UACA,cACF,EAIA,GAFA,EAAO,IAAI,oBAAqB,CAAO,EAEvC,QAAA,IAAA,WAA6B,eACvB,EAAO,UAAU,EAAG,CACtB,IAAM,EAAqB,EAAU,EAAQ,IAAK,GAAW,EAAO,GAAG,CAAC,EACxE,EAAO,eAAe,GAAG,EAAO,aAAa,0BAA0B,CAAC,EACxE,EAAO,IAAI,KAAK,GAAoB,EACpC,EAAO,SAAS,CAClB,CAGF,OAAO,CACT,ECJa,GACX,EACA,EACA,CACE,eACA,OACA,iBACA,WAEU,CACZ,IAAM,EAAU,EAAM,IAAK,GAAwB,CACjD,IAAM,EAAQ,EAAQ,CAAI,EACpB,GAAA,EAAW,EAAA,eAAA,CAAe,EAAM,GAAG,EAMzC,OAJI,EAAM,IACD,CAAE,IAAK,GAAM,WAAU,IAAK,EAAM,GAAI,EAGxC,CACL,IAAK,GACL,WACA,IAAK,EAAM,IACX,gBAAA,EAAgB,EAAA,uBAAA,CAAuB,EAAM,GAAG,EAChD,KAAM,EAAM,KACZ,KAAM,EAAM,KACZ,YAAa,EAAM,WACrB,CACF,CAAC,EAMD,OAJI,GACF,EAAQ,MAAM,EAAG,KAAA,EAAM,EAAA,sBAAA,CAAsB,EAAE,IAAK,EAAE,GAAG,CAAC,EAGrD,EAAc,CAAE,SAAU,EAAM,iBAAgB,UAAS,OAAM,CAAC,CACzE"}
@@ -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=`http://www.idpf.org/2007/opf`,_=`opf`,v=`xmlns:`,y=(e,t={})=>{let n;for(let[r,i]of Object.entries(e)){if(!r.startsWith(v))continue;let e=r.slice(6),a=i?.trim();e.length===0||a===void 0||(n??={...t},n[e]=a)}return n??t},b=e=>{let t=Object.keys(e).filter(function(t){return e[t]===g});return e[_]===void 0?[_,...t]:t},x=(e,t,n)=>{for(let r of n)for(let n of t){let t=e[`${n}:${r}`];if(t!==void 0)return t}for(let t of n){let n=e[t];if(n!==void 0)return n}},S=Object.freeze([`scheme`,`Scheme`]),C=Object.freeze([`opf:scheme`,`opf:Scheme`,`scheme`]),w={"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`},T=e=>{let t=e?.value?.trim();if(!(t===void 0||t.length===0))return e?.scheme?.trim().toLowerCase()===`onix:codelist5`?w[t]??t:t},E=(e,t=[`opf`])=>x(e,t,S),D=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}:{}}},O=e=>e.includes(`:`)?e.slice(e.lastIndexOf(`:`)+1):e,k=(e,t)=>O(e).toLowerCase()===t.toLowerCase(),A=e=>e.type===`element`,j=(e,t)=>{for(let n of e.children)if(A(n)&&k(n.name,t))return n},M=(e,t)=>{let n=[];for(let r of e.children)A(r)&&k(r.name,t)&&n.push(r);return n},ee=(e,t,n)=>{let r=[];return e.eachChild(e=>{if(O(e.name).toLowerCase()!==`identifier`)return;let i=e.val.trim();if(i.length===0)return;let a=E(e.attr,b(y(e.attr,n)))?.trim(),o=e.attr.id?.trim(),s=o!==void 0&&o.length>0?o:void 0;r.push({value:i,...a!==void 0&&a.length>0?{scheme:a}:{},...s===void 0?{}:{id:s},...s!==void 0&&s===t?{unique:!0}:{}})}),r},te=e=>{let t=[];return e.eachChild(e=>{if(O(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},N=(e,t)=>{let n;return e.eachChild(e=>{if(n!==void 0||O(e.name).toLowerCase()!==t.toLowerCase())return;let r=e.val.trim();r.length>0&&(n=r)}),n},P=(e,t)=>{let n=[];return e.eachChild(e=>{if(O(e.name).toLowerCase()!==t.toLowerCase())return;let r=e.val.trim();r.length>0&&n.push(r)}),n},ne=e=>{let t;return e.eachChild(e=>{if(t!==void 0||O(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},re=({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=ne(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},F=(e,t)=>{let n=e.attr[t]?.trim();return n!==void 0&&n.length>0?n:void 0},ie=(e,t,n)=>{let r=x(e.attr,t,[n])?.trim();return r!==void 0&&r.length>0?r:void 0},ae=e=>{let t=[];return e.eachChild(e=>{if(O(e.name).toLowerCase()!==`meta`)return;let n=F(e,`property`),r=F(e,`refines`),i=F(e,`scheme`),a=F(e,`id`),o=F(e,`name`),s=F(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},oe=(e,t)=>e.replace(/^#/,``)===t,se=(e,t,n)=>{let r=[];return e.eachChild(e=>{let i=O(e.name).toLowerCase();if(i!==`creator`&&i!==`contributor`)return;let a=e.val.trim();if(a.length===0)return;let o=F(e,`id`),s=e=>o===void 0?[]:t.flatMap(t=>t.refines!==void 0&&oe(t.refines,o)&&t.property===e&&t.value!==void 0?[t.value]:[]),c=b(y(e.attr,n)),l=ie(e,c,`role`),u=[...l===void 0?[]:[l],...s(`role`)],d=ie(e,c,`file-as`)??s(`file-as`)[0];r.push({name:a,source:i,...o===void 0?{}:{id:o},roles:u,...d===void 0?{}:{fileAs:d}})}),r},I=(e,t)=>{let n=M(e,`meta`).find(e=>e.attr.property===t)?.val;if(!(n===void 0||n.trim().length===0))return n},ce=e=>{let t=j(e,`guide`);if(t===void 0)return[];let n=[];for(let e of M(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},le=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}:{}}},ue=e=>{let t=[],n=new Map;for(let r of M(e,`item`)){let e=le(r);e!==void 0&&(t.push(e),n.set(e.id,e))}return{items:t,byId:n}},de=(e,t)=>{let n=[];for(let r of M(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=D(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},fe=e=>{let t=new r.XmlDocument(e),n=j(t,`manifest`),i=j(t,`spine`),a=j(t,`metadata`),o=y(t.attr),s=t.attr[`unique-identifier`]?.trim(),c=s!==void 0&&s.length>0?s:void 0,l=[],u=[];if(n!==void 0){let{items:e,byId:t}=ue(n);l=e,i!==void 0&&(u=de(t,i))}let d=i?.attr[`page-progression-direction`],f=d!==void 0&&d.trim().length>0?d:void 0,p=i?.attr.toc,m=p!==void 0&&p.trim().length>0?p.trim():void 0,h=[],g,_,v,b,x=[],S=[],C=[],w=[],T,E,D,O=[],k=[];if(a!==void 0){let e=y(a.attr,o);h=te(a),g=N(a,`publisher`),_=N(a,`description`),v=N(a,`rights`),b=N(a,`date`),x=P(a,`creator`),C=P(a,`language`),w=P(a,`subject`),T=I(a,`rendition:layout`),E=I(a,`rendition:flow`),D=I(a,`rendition:spread`),O=ae(a),S=se(a,O,e),k.push(...ee(a,c,e))}let A=re({manifestItems:l,metadataEl:a}),M=ce(t);return{kind:`opf`,manifestItems:l,spineRows:u,spineTocIdref:m,identifiers:k,titles:h,creators:x,contributors:S,publisher:g,description:_,rights:v,languages:C,subjects:w,date:b,coverHref:A,renditionLayoutMeta:T,renditionFlowMeta:E,renditionSpreadMeta:D,pageProgressionDirection:f,guide:M,metas:O}};async function L(e){let{data:t,basePath:n}=m(e)||{};if(!(!t||t.dir))return{opf:fe(await p(t)),basePath:n}}var R=`com.apple.ibooks.display-options.xml`,pe=e=>e.childrenNamed(`option`).map(e=>({name:e.attr?.name,value:e.val})),me=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:pe(n)}}}}},z=`ComicInfo.xml`,he=`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(`.`),ge=new Set([`Pages`,`ComicInfo`]),_e=e=>e.children.some(e=>e.type===`element`),ve=e=>{let t=e.val.trim();return t.length>0?t:void 0},ye=e=>{let t;try{t=new r.XmlDocument(e)}catch(e){let t=e instanceof Error?e.message:String(e);throw Error(`${z} is malformed: ${t}`,{cause:e})}let n={};return t.eachChild(e=>{if(e.type!==`element`||ge.has(e.name)||_e(e))return;let t=ve(e);t!==void 0&&n[e.name]===void 0&&(n[e.name]=t)}),{kind:`comicInfo`,...n}},be=`com.kobobooks.display-options.xml`,xe=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{}},Se=e=>{let t=new r.XmlDocument(e);return t.name?.toLowerCase()===`display_options`?{kind:`kobo`,...xe(t)}:{kind:`kobo`}},B=e=>{let t=Object.entries(e).filter(([,e])=>e!==void 0);return Object.fromEntries(t)},Ce=e=>{let t=[];for(let n of e.split(`/`))if(n!==`.`){if(n===`..`){t.pop();continue}t.push(n)}return t.join(`/`)},we=(e,t)=>/^https?:\/\//.test(e)?e:Ce(t?`${t}/${e}`:e),Te=e=>{let t=e?.trim().toLowerCase();return t===`reflowable`||t===`pre-paginated`?t:void 0},Ee=(e,{opf:t,basePath:n})=>{let r=Te(t.renditionLayoutMeta),i=t.spineRows.map(t=>{let r=we(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})=>B({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}))},De=z.toLowerCase(),Oe=R.toLowerCase(),ke=e=>{let t=e.basename.toLowerCase();return t===De||t===Oe||e.uri.endsWith(`com.kobobooks.display-options.xml`)||t.endsWith(`.db`)},Ae=e=>{let t=e.records.filter(s).filter(e=>!ke(e));return t.map(e=>{let r=(0,n.parseContentType)(e.encodingFormat??``)||(0,n.detectMimeTypeFromName)(e.basename);return B({uri:e.uri,mediaType:r,size:e.size,renditionLayout:r!==void 0&&(0,n.isMediaContentMimeType)(r)?`pre-paginated`:void 0,progressionWeight:1/t.length})})},V=async(e,{opf:t}={})=>{let n=t??await L(e).catch(()=>void 0);return n?Ee(e,n):Ae(e)},je=(e,t)=>{let r=l(e,t);if(r!==void 0)return(0,n.parseContentType)(r.encodingFormat??``)||(0,n.detectMimeTypeFromName)(r.basename)},Me=async(e,{opf:t,readingOrder:n}={})=>{let r=t??await L(e).catch(()=>void 0);if(r!==void 0&&r.opf.coverHref!==void 0){let t=we(r.opf.coverHref,r.basePath);return B({uri:t,mediaType:je(e,t),confidence:`derived`})}let i=(n??await V(e,{opf:r})).find(e=>e.mediaType?.startsWith(`image/`)===!0);if(i!==void 0)return B({uri:i.uri,mediaType:i.mediaType,confidence:`assumed`})},Ne=e=>{let t=e.descendantWithPath(`head`)?.childrenNamed(`meta`).find(e=>e.attr.name===`viewport`);return!!(t&&t.attr.name===`viewport`)},Pe=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(!Ne(new r.XmlDocument(e)))return!1}catch(t){return e.r.error(`layout scan: unable to inspect ${a.uri}`,t),!1}}return!0},Fe=R.toLowerCase();async function Ie(e){let t=e.records.find(e=>s(e)&&e.basename.toLowerCase()===Fe);if(t)return me(await p(t))}var Le=z.toLowerCase(),Re=e=>e.records.find(e=>s(e)&&e.basename.toLowerCase()===Le),ze=[`Unknown`,`No`,`Yes`,`YesAndRightToLeft`],Be=e=>{for(let t of ze)if(t===e)return!0;return!1};async function Ve(e){let t=Re(e);if(t)return ye(await p(t))}async function He(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}=Se(n);e&&(r=e)}catch(n){e.r.error(`Unable to parse ${be} (${t.uri})`,n)}}return{kind:`kobo`,...r===void 0?{}:{renditionLayout:r}}}var Ue=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))},We=e=>e.toLowerCase().endsWith(`.opf`),Ge=e=>e.records.some(e=>!e.dir&&(We(e.basename)||We(e.uri))),Ke=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=B({fixedLayout:r,options:t!==void 0&&t.length>0?t.map(({name:e,value:t})=>B({name:e,value:t})):void 0});return B({renditionLayout:r===!0?`pre-paginated`:void 0,apple:Object.keys(i).length>0?i:void 0})},qe=e=>{switch(e.Manga){case`YesAndRightToLeft`:return`rtl`;case`Yes`:case`No`:return`ltr`;default:return}},H=e=>{if(e===void 0)return;let t=e.trim();return t.length>0?t:void 0},U=e=>e===void 0?[]:e.split(`,`).map(e=>e.trim()).filter(e=>e.length>0),W=e=>{let t=H(e);if(t===void 0||!/^\d+$/.test(t))return;let n=Number.parseInt(t,10);return Number.isFinite(n)?n:void 0},G=e=>{let t=H(e);if(t===void 0||!/^\d+(\.\d+)?$/.test(t))return;let n=Number.parseFloat(t);return Number.isFinite(n)?n:void 0},Je=e=>{let t=H(e)?.toLowerCase();if(t===`yes`)return!0;if(t===`no`)return!1},Ye=e=>{switch(e.Manga){case`Yes`:case`YesAndRightToLeft`:return!0;case`No`:return!1;default:return}},Xe=e=>{let t=W(e.Year),n=W(e.Month),r=W(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}}},Ze=[[`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 Ze)for(let i of U(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()]},$e=e=>{let t=B({name:H(e.Series),position:G(e.Number),total:W(e.Count)});return Object.keys(t).length>0?t:void 0},et=e=>{let t=H(e.AlternateSeries);if(t!==void 0)return B({name:t,position:G(e.AlternateNumber),total:W(e.AlternateCount)})},tt=e=>{let t=U(e.StoryArc);if(t.length===0)return[];let n=U(e.StoryArcNumber);return t.map((e,t)=>B({name:e,position:G(n[t])}))},K=e=>e.length>0?e:void 0,nt=e=>(e.Web??``).split(/\s+/).filter(e=>e.length>0),rt=e=>{try{let t=new URL(e);return(t.protocol===`http:`||t.protocol===`https:`)&&t.hostname.length>0}catch{return!1}},it=e=>e.filter((e,t,n)=>rt(e)&&n.indexOf(e)===t).map(e=>({value:e,scheme:`URL`})),at=(e,t)=>{let n=B({manga:Ye(e),blackAndWhite:Je(e.BlackAndWhite),volume:W(e.Volume),format:H(e.Format),ageRating:H(e.AgeRating),notes:H(e.Notes),review:H(e.Review),web:K(t),scanInformation:H(e.ScanInformation),mainCharacterOrTeam:H(e.MainCharacterOrTeam),characters:K(U(e.Characters)),teams:K(U(e.Teams)),locations:K(U(e.Locations)),storyArcs:K(tt(e)),alternateSeries:et(e)});return Object.keys(n).length>0?n:void 0},ot=e=>{let t=G(e.CommunityRating);return t!==void 0&&t<=5?{value:t}:void 0},st=e=>{let t=$e(e),n=K(U(e.SeriesGroup).map(e=>({name:e})));if(!(t===void 0&&n===void 0))return B({series:t===void 0?void 0:[t],collection:n})},ct=e=>{let t=e.GTIN,n=H(t),r=nt(e),i=[...n===void 0?[]:[{value:n,scheme:`GTIN`}],...it(r)],a=H(e.LanguageISO),o=[...U(e.Genre),...U(e.Tags)],s=B({date:Xe(e),publisher:H(e.Publisher),imprint:H(e.Imprint)}),c=H(e.Title);return B({titles:c===void 0?void 0:[{value:c}],description:H(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:K(o),contributors:K(Qe(e)),readingDirection:qe(e),numberOfPages:W(e.PageCount),aggregateRating:ot(e),identifiers:K(i),belongsTo:st(e),comicInfo:at(e,r)})},lt=e=>B({renditionLayout:e.renditionLayout,kobo:e.renditionLayout===void 0?void 0:{fixedLayout:e.renditionLayout===`pre-paginated`}}),ut=/[0-9Xx]+/g,dt=/^(?:97[89])?\d{9}[\dXx]$/,ft=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(ut)??[])if(dt.test(e))return e.toUpperCase()},pt=e=>{let t=ft(e);if(t!==void 0)return t.length===10||/^97[89]/.test(t)?t:void 0},mt=new Set([8,12,13,14]),ht=e=>{if(e==null)return;let t=String(e).replace(/\D/g,``);if(!(t.length===0||!mt.has(t.length)))return t},gt=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 pt(t)===void 0?ht(t)===void 0?`Unknown`:`GTIN`:`ISBN`},_t=new Map(Object.entries({isbn:`ISBN`,gtin:`GTIN`,doi:`DOI`,googlebooks:`GoogleBooks`,openlibrary:`OpenLibrary`,projectgutenberg:`ProjectGutenberg`,url:`URL`,unknown:`Unknown`})),q=e=>{let t=e.trim();return _t.get(t.toLowerCase())??t},vt=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)}}},yt={art:`artist`,aut:`author`,clr:`colorist`,ctb:`contributor`,edt:`editor`,ill:`illustrator`,nrt:`narrator`,trl:`translator`},bt=e=>e.map(e=>{let t=e.roles.map(e=>yt[e.trim().toLowerCase()]??e);return B({name:e.name,roles:t.length>0?t:[e.source===`creator`?`author`:`contributor`],sortAs:e.fileAs})}),J=(e,t)=>e.refines!==void 0&&e.refines.replace(/^#/,``)===t,xt=(e,t)=>{let n=e.id;if(n!==void 0)return T(t.find(e=>e.property===`identifier-type`&&J(e,n)&&e.value!==void 0))},St=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},Ct=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},wt=e=>{let t=e?.trim();return t!==void 0&&t.length>0?t:void 0},Y=(e,t,n)=>t===void 0?void 0:e.find(e=>J(e,t)&&e.property===n&&e.value!==void 0)?.value,Tt=(e,t)=>e.map(e=>B({value:e.value,type:wt(Y(t,e.id,`title-type`))?.toLowerCase(),displaySeq:Ct(Y(t,e.id,`display-seq`)),sortAs:wt(Y(t,e.id,`file-as`))})),Et=(e,t)=>{if(t===void 0)return;let n=e.flatMap(n=>{if(!J(n,t)||n.property!==`dcterms:identifier`)return[];let r=wt(n.value);return r===void 0?[]:[{value:r,scheme:q(T(e.find(e=>n.id!==void 0&&J(e,n.id)&&e.property===`identifier-type`))??gt(r))}]});return n.length>0?n:void 0},Dt=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=>Y(e,i,t),o=a(`collection-type`)?.trim().toLowerCase(),s=B({name:r.value,identifiers:Et(e,i),position:St(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(B({name:n,position:St(e.find(e=>e.name?.toLowerCase()===`calibre:series_index`)?.content)}))}return{series:t,collection:n}},Ot=e=>{let t=e?.trim();if(t===`scrolled-continuous`||t===`scrolled-doc`||t===`paginated`||t===`auto`)return t},kt=e=>{let t=e?.trim();if(t===`none`||t===`landscape`||t===`portrait`||t===`both`||t===`auto`)return t},At=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(),E=T===`reflowable`||T===`pre-paginated`?T:void 0,D=bt(n),O=Tt(t,m),{series:k,collection:A}=Dt(m),j=k.length>0||A.length>0?B({series:k.length>0?k:void 0,collection:A.length>0?A:void 0}):void 0,M=B({date:vt(c),publisher:r});return B({titles:O.length>0?O:void 0,description:i,publication:M.date!==void 0||M.publisher!==void 0?{edition:M}:void 0,rights:a,languages:o.length>0?[...o]:void 0,subjects:s.length>0?[...s]:void 0,contributors:D.length>0?D:void 0,readingDirection:w,renditionLayout:E,renditionFlow:Ot(u),renditionSpread:kt(d),identifiers:p.length>0?p.map(e=>B({value:e.value,scheme:q(e.scheme??xt(e,m)??gt(e.value)),unique:e.unique})):void 0,belongsTo:j,properties:m.length>0?[...m]:void 0})},jt=e=>e.kind===`comicInfo`?ct(e):e.kind===`kobo`?lt(e):e.kind===`apple`?Ke(e):At(e),Mt=e=>{let t=e.opf===void 0?void 0:At(e.opf),n=e.comicInfo===void 0?void 0:ct(e.comicInfo),r=e.apple===void 0?void 0:Ke(e.apple),i=e.kobo===void 0?void 0:lt(e.kobo),a=[...t?.identifiers??[],...n?.identifiers??[]],o=B({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 B({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})},Nt=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)},[])},Pt=e=>e?e.children.map(e=>e instanceof r.XmlTextNode?e.text:e instanceof r.XmlElement?Pt(e):``).join(``).trim():``,Ft=e=>h(e.properties).includes(`nav`),It=(e,{basePath:t})=>{let r={contents:[],path:``,containerHref:``,title:``},i=e.childNamed(`span`)||e.childNamed(`a`);r.title=(i?.attr.title||i?.val.trim()||Pt(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=>It(e,{basePath:t})))}return r},Lt=(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(It(e,{basePath:t}))}),n},Rt=async(e,t)=>{let i=e.manifestItems.find(Ft);if(i?.href){let e=t.records.find(e=>e.uri.endsWith(i.href));if(e&&!e.dir)return Lt(new r.XmlDocument(await p(e)),{basePath:(0,n.getUriBasePath)(e.uri)})}},zt=(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=>zt(e,{basePath:t,prefix:r}))),a},Bt=(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(zt(e,{basePath:t,prefix:i}))}),n},Vt=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 Bt(new r.XmlDocument(await p(a)),{basePath:(0,n.getUriBasePath)(a.uri)})}}},Ht=async(e,{opf:t}={})=>{let n=t??await L(e);if(n)return await Rt(n.opf,e)||await Vt({opf:n.opf,opfBasePath:n.basePath,archive:e})||[];let r=Nt(e);return r.length===0?void 0:r},Ut=[`metadata`,`readingOrder`,`toc`],X=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}}},Wt=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},Gt=({archive:e,opf:t,comicInfo:n,apple:r,kobo:i})=>{let a=[];return t!==void 0&&t.value===void 0&&(t.failed||Ge(e))&&a.push(`opf`),n?.failed&&a.push(`comicInfo`),r?.failed&&a.push(`apple`),i?.failed&&a.push(`kobo`),a},Kt=3,qt=async(e,t={})=>{let n=new Set(t.include??Ut),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 X(()=>L(e),`opf`):void 0,l=c?.value,u=r||i||s,d=u?await X(()=>Ve(e),`comicInfo`):void 0,f=d?.value,p=u?await X(()=>Ie(e),`apple`):void 0,m=p?.value,h=u?await X(()=>He(e),`kobo`):void 0,g=h?.value,_=r||s?Mt({opf:l?.opf,comicInfo:f,apple:m,kobo:g}):void 0,v=a||s?await V(e,{opf:l}):void 0;if(s&&_!==void 0&&v!==void 0&&_.renditionLayout===`reflowable`&&v.every(e=>e.renditionLayout===`reflowable`)&&await Pe(e,v)&&(_={..._,renditionLayout:`pre-paginated`},v=v.map(e=>({...e,renditionLayout:`pre-paginated`}))),r&&_!==void 0){let t=v??await V(e,{opf:l}),n=await Me(e,{opf:l,readingOrder:t}),r=_.numberOfPages??Wt(t);_=B({..._,cover:n,numberOfPages:r})}let y=o?(await X(()=>Ht(e,{opf:l}),`toc`)).value:void 0,b={version:Kt,unreadableSources:Gt({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=B({opf:l,comicInfo:f,apple:m,kobo:g})),b},Jt=e=>{let t=e.trim().toLowerCase();return t===`url`||t===`uri`||t===`unknown`},Yt=e=>{try{return decodeURIComponent(e)}catch{return}},Xt=e=>{try{let t=new URL(e.trim());return t.protocol===`http:`||t.protocol===`https:`?t:void 0}catch{return}},Z=(e,t)=>{let n=Xt(e);return n!==void 0&&t(n.hostname.toLowerCase())?n:void 0},Zt=/^books\.google\.(?:com|[a-z]{2}|com\.[a-z]{2}|co\.[a-z]{2})$/i,Qt=new Set([`books.googleapis.com`,`www.googleapis.com`]),$t=/^\/books\/v1\/volumes\/([^/]+)\/?$/i,en=e=>{let t=e.trim();return/^[a-z0-9_-]+$/i.test(t)?t:void 0},tn=e=>{let t=Z(e,e=>Zt.test(e)||Qt.has(e));if(t!==void 0){if(Qt.has(t.hostname.toLowerCase())){let e=$t.exec(t.pathname)?.[1],n=e===void 0?void 0:Yt(e);return n===void 0?void 0:en(n)}return en(t.searchParams.get(`id`)??``)}},nn=new Set([`gutenberg.org`,`www.gutenberg.org`]),rn=[/^\/ebooks\/(\d+)(?:[./]|$)/i,/^\/files\/(\d+)(?:\/|$)/i,/^\/cache\/epub\/(\d+)(?:\/|$)/i,/^\/(\d+)(?:\/|$)/],an=e=>{let t=e.trim();if(!/^\d+$/.test(t))return;let n=t.replace(/^0+(?=\d)/,``);return n===`0`?void 0:n},on=e=>{let t=Z(e,e=>nn.has(e));if(t!==void 0)for(let e of rn){let n=e.exec(t.pathname)?.[1];if(n!==void 0)return an(n)}},sn=new Set([`openlibrary.org`,`www.openlibrary.org`]),cn=/^\/(works|books|authors)\/(OL\d+[A-Z])(?:\/|$)/i,ln=/^OL\d+([MWA])$/i,un={M:`books`,W:`works`,A:`authors`},dn=e=>{let t=e.trim(),n=cn.exec(t);if(n?.[1]!==void 0&&n[2]!==void 0)return`/${n[1].toLowerCase()}/${n[2].toUpperCase()}`;let r=un[ln.exec(t)?.[1]?.toUpperCase()??``];return r===void 0?void 0:`/${r}/${t.toUpperCase()}`},fn=e=>{let t=Z(e,e=>sn.has(e));return t===void 0?void 0:dn(t.pathname)},pn=new Set([`doi.org`,`dx.doi.org`,`www.doi.org`]),mn=/^10\.\d{4,9}\/\S+$/,hn=e=>{let t=e.trim().replace(/^doi:/i,``);return mn.test(t)?t:void 0},gn=e=>e.split(`/`).map(encodeURIComponent).join(`/`),Q=[{scheme:`GoogleBooks`,normalizeValue:en,valueFromUrl:tn,toUrl:e=>`https://books.google.com/books?id=${encodeURIComponent(e)}`},{scheme:`ProjectGutenberg`,normalizeValue:an,valueFromUrl:on,toUrl:e=>`https://www.gutenberg.org/ebooks/${e}`},{scheme:`OpenLibrary`,normalizeValue:dn,valueFromUrl:fn,toUrl:e=>`https://openlibrary.org${e}`},{scheme:`DOI`,normalizeValue:hn,valueFromUrl:e=>{let t=Z(e,e=>pn.has(e)),n=t===void 0?void 0:Yt(t.pathname.replace(/^\//,``));return n===void 0?void 0:hn(n)},toUrl:e=>`https://doi.org/${gn(e)}`}],_n=Q.map(function(e){return e.scheme}),vn=e=>{let t=e.trim().toLowerCase();return Q.find(function(e){return e.scheme.toLowerCase()===t})},yn=e=>vn(e)!==void 0,bn=e=>{for(let t of Q){let n=t.valueFromUrl(e);if(n!==void 0)return{value:n,scheme:t.scheme}}},xn=({scheme:e,value:t})=>{let n=vn(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},Sn=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},Cn=e=>{let t=q(e);return t===`ISBN`||t===`GTIN`},wn=e=>({carries:Cn,normalizeValue:e}),$=e=>({carries:t=>q(t)===e,...Sn(e)}),Tn={ISBN:wn(pt),GTIN:wn(ht),GoogleBooks:$(`GoogleBooks`),OpenLibrary:$(`OpenLibrary`),ProjectGutenberg:$(`ProjectGutenberg`),DOI:$(`DOI`)},En=(e,t)=>{let n=Tn[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||!Jt(t.scheme))continue;let e=n.valueFromUrl(t.value);if(e!==void 0)return e}},Dn=e=>e?.titles?.[0]?.value;exports.APPLE_IBOOKS_DISPLAY_OPTIONS_FILENAME=R,exports.COMIC_INFO_FILENAME=z,exports.COMIC_INFO_KNOWN_FIELDS=he,exports.COMIC_INFO_MANGA_VALUES=ze,exports.KOBO_DISPLAY_OPTIONS_FILENAME=be,exports.METADATA_CATALOG_SCHEMES=_n,exports.OPF_IDENTIFIER_SCHEME_ATTRIBUTES=C,exports.OPF_IDENTIFIER_SCHEME_LOCAL_NAMES=S,exports.OPF_NAMESPACE=g,exports.arrayBufferFileAccessors=t.t,exports.blobFileAccessors=t.n,exports.catalogIdentifierFromUrl=bn,exports.catalogUrlFromIdentifier=xn,exports.createArchive=e.n,exports.createArchiveFromArrayBufferList=i,exports.createArchiveFromEntries=e.t,exports.createArchiveFromText=a,exports.createArchiveFromUrls=o,exports.getArchiveFileRecordByUri=l,exports.getArchiveHasComicInfo=Re,exports.getArchiveImageRecords=f,exports.getArchiveOpfInfo=m,exports.getSpineItemFilesFromArchive=Ue,exports.identifierValue=En,exports.inferIdentifierScheme=gt,exports.isArchiveEpub=Ge,exports.isComicInfoManga=Be,exports.isDirectoryRecord=c,exports.isFileRecord=s,exports.isImageRecord=d,exports.isIsbnBearingScheme=Cn,exports.isMetadataCatalogScheme=yn,exports.mainTitle=Dn,exports.normalizeGtin=ht,exports.normalizeIdentifierScheme=q,exports.normalizeIsbn=ft,exports.opfIdentifierSchemeAttribute=E,exports.opfIdentifierTypeScheme=T,exports.opfNamespacePrefixes=b,exports.opfNamespacedAttribute=x,exports.parseAppleDisplayOptionsXml=me,exports.parseComicInfo=ye,exports.parseKoboXml=Se,exports.parseOpf=fe,exports.parseW3cDtfDate=vt,exports.readArchiveApple=Ie,exports.readArchiveComicInfo=Ve,exports.readArchiveKobo=He,exports.readArchiveOpf=L,exports.readRecordAsText=p,exports.readingOrderDocumentsAllHaveViewport=Pe,exports.resolveArchive=qt,exports.resolveArchiveCover=Me,exports.resolveArchiveMetadata=jt,exports.resolveArchiveReadingOrder=V,exports.resolveArchiveToc=Ht,exports.resolveMetadata=Mt,exports.tokenizeXmlSpaceSeparatedList=h,exports.xmlNamespaceScope=y;
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())})),l={dir:!1,basename:`content.opf`,uri:`content.opf`,size:0,...t.n(async()=>new Blob([s]))};return e.n({records:[l,...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=`http://www.idpf.org/2007/opf`,_=`opf`,v=`xmlns:`,y=(e,t={})=>{let n;for(let[r,i]of Object.entries(e)){if(!r.startsWith(v))continue;let e=r.slice(6),a=i?.trim();e.length!==0&&a!==void 0&&(n??={...t},n[e]=a)}return n??t},b=e=>{let t=Object.keys(e).filter(function(t){return e[t]===g});return e[_]===void 0?[_,...t]:t},x=(e,t,n)=>{for(let r of n)for(let n of t){let t=e[`${n}:${r}`];if(t!==void 0)return t}for(let t of n){let n=e[t];if(n!==void 0)return n}},S=Object.freeze([`scheme`,`Scheme`]),C=Object.freeze([`opf:scheme`,`opf:Scheme`,`scheme`]),w={"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`},T=e=>{let t=e?.value?.trim();if(t!==void 0&&t.length!==0)return e?.scheme?.trim().toLowerCase()===`onix:codelist5`?w[t]??t:t},E=(e,t=[`opf`])=>x(e,t,S),D=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}:{}}},O=e=>e.includes(`:`)?e.slice(e.lastIndexOf(`:`)+1):e,k=(e,t)=>O(e).toLowerCase()===t.toLowerCase(),A=e=>e.type===`element`,j=(e,t)=>{for(let n of e.children)if(A(n)&&k(n.name,t))return n},M=(e,t)=>{let n=[];for(let r of e.children)A(r)&&k(r.name,t)&&n.push(r);return n},ee=(e,t,n)=>{let r=[];return e.eachChild(e=>{if(O(e.name).toLowerCase()!==`identifier`)return;let i=e.val.trim();if(i.length===0)return;let a=E(e.attr,b(y(e.attr,n)))?.trim(),o=e.attr.id?.trim(),s=o!==void 0&&o.length>0?o:void 0;r.push({value:i,...a!==void 0&&a.length>0?{scheme:a}:{},...s===void 0?{}:{id:s},...s!==void 0&&s===t?{unique:!0}:{}})}),r},te=e=>{let t=[];return e.eachChild(e=>{if(O(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},N=(e,t)=>{let n;return e.eachChild(e=>{if(n!==void 0||O(e.name).toLowerCase()!==t.toLowerCase())return;let r=e.val.trim();r.length>0&&(n=r)}),n},P=(e,t)=>{let n=[];return e.eachChild(e=>{if(O(e.name).toLowerCase()!==t.toLowerCase())return;let r=e.val.trim();r.length>0&&n.push(r)}),n},ne=e=>{let t;return e.eachChild(e=>{if(t!==void 0||O(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},re=({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=ne(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},F=(e,t)=>{let n=e.attr[t]?.trim();return n!==void 0&&n.length>0?n:void 0},ie=(e,t,n)=>{let r=x(e.attr,t,[n])?.trim();return r!==void 0&&r.length>0?r:void 0},ae=e=>{let t=[];return e.eachChild(e=>{if(O(e.name).toLowerCase()!==`meta`)return;let n=F(e,`property`),r=F(e,`refines`),i=F(e,`scheme`),a=F(e,`id`),o=F(e,`name`),s=F(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},oe=(e,t)=>e.replace(/^#/,``)===t,se=(e,t,n)=>{let r=[];return e.eachChild(e=>{let i=O(e.name).toLowerCase();if(i!==`creator`&&i!==`contributor`)return;let a=e.val.trim();if(a.length===0)return;let o=F(e,`id`),s=e=>o===void 0?[]:t.flatMap(t=>t.refines!==void 0&&oe(t.refines,o)&&t.property===e&&t.value!==void 0?[t.value]:[]),c=b(y(e.attr,n)),l=ie(e,c,`role`),u=[...l===void 0?[]:[l],...s(`role`)],d=ie(e,c,`file-as`)??s(`file-as`)[0];r.push({name:a,source:i,...o===void 0?{}:{id:o},roles:u,...d===void 0?{}:{fileAs:d}})}),r},I=(e,t)=>{let n=M(e,`meta`).find(e=>e.attr.property===t)?.val;if(n!==void 0&&n.trim().length!==0)return n},ce=e=>{let t=j(e,`guide`);if(t===void 0)return[];let n=[];for(let e of M(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},le=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}:{}}},ue=e=>{let t=[],n=new Map;for(let r of M(e,`item`)){let e=le(r);e!==void 0&&(t.push(e),n.set(e.id,e))}return{items:t,byId:n}},de=(e,t)=>{let n=[];for(let r of M(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=D(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},fe=e=>{let t=new r.XmlDocument(e),n=j(t,`manifest`),i=j(t,`spine`),a=j(t,`metadata`),o=y(t.attr),s=t.attr[`unique-identifier`]?.trim(),c=s!==void 0&&s.length>0?s:void 0,l=[],u=[];if(n!==void 0){let{items:e,byId:t}=ue(n);l=e,i!==void 0&&(u=de(t,i))}let d=i?.attr[`page-progression-direction`],f=d!==void 0&&d.trim().length>0?d:void 0,p=i?.attr.toc,m=p!==void 0&&p.trim().length>0?p.trim():void 0,h=[],g,_,v,b,x=[],S=[],C=[],w=[],T,E,D,O=[],k=[];if(a!==void 0){let e=y(a.attr,o);h=te(a),g=N(a,`publisher`),_=N(a,`description`),v=N(a,`rights`),b=N(a,`date`),x=P(a,`creator`),C=P(a,`language`),w=P(a,`subject`),T=I(a,`rendition:layout`),E=I(a,`rendition:flow`),D=I(a,`rendition:spread`),O=ae(a),S=se(a,O,e),k.push(...ee(a,c,e))}let A=re({manifestItems:l,metadataEl:a}),M=ce(t);return{kind:`opf`,manifestItems:l,spineRows:u,spineTocIdref:m,identifiers:k,titles:h,creators:x,contributors:S,publisher:g,description:_,rights:v,languages:C,subjects:w,date:b,coverHref:A,renditionLayoutMeta:T,renditionFlowMeta:E,renditionSpreadMeta:D,pageProgressionDirection:f,guide:M,metas:O}};async function L(e){let{data:t,basePath:n}=m(e)||{};return!t||t.dir?void 0:{opf:fe(await p(t)),basePath:n}}var R=`com.apple.ibooks.display-options.xml`,pe=e=>e.childrenNamed(`option`).map(e=>({name:e.attr?.name,value:e.val})),me=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:pe(n)}}}}},z=`ComicInfo.xml`,he=`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(`.`),ge=new Set([`Pages`,`ComicInfo`]),_e=e=>e.children.some(e=>e.type===`element`),ve=e=>{let t=e.val.trim();return t.length>0?t:void 0},ye=e=>{let t;try{t=new r.XmlDocument(e)}catch(e){let t=e instanceof Error?e.message:String(e);throw Error(`${z} is malformed: ${t}`,{cause:e})}let n={};return t.eachChild(e=>{if(e.type!==`element`||ge.has(e.name)||_e(e))return;let t=ve(e);t!==void 0&&n[e.name]===void 0&&(n[e.name]=t)}),{kind:`comicInfo`,...n}},be=`com.kobobooks.display-options.xml`,xe=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{}},Se=e=>{let t=new r.XmlDocument(e);return t.name?.toLowerCase()===`display_options`?{kind:`kobo`,...xe(t)}:{kind:`kobo`}},B=e=>{let t=Object.entries(e).filter(([,e])=>e!==void 0);return Object.fromEntries(t)},Ce=e=>{let t=[];for(let n of e.split(`/`))if(n!==`.`){if(n===`..`){t.pop();continue}t.push(n)}return t.join(`/`)},we=(e,t)=>/^https?:\/\//.test(e)?e:Ce(t?`${t}/${e}`:e),Te=e=>{let t=e?.trim().toLowerCase();return t===`reflowable`||t===`pre-paginated`?t:void 0},Ee=(e,{opf:t,basePath:n})=>{let r=Te(t.renditionLayoutMeta),i=t.spineRows.map(t=>{let r=we(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})=>B({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}))},De=z.toLowerCase(),Oe=R.toLowerCase(),ke=e=>{let t=e.basename.toLowerCase();return t===De||t===Oe||e.uri.endsWith(`com.kobobooks.display-options.xml`)||t.endsWith(`.db`)},Ae=e=>{let t=e.records.filter(s).filter(e=>!ke(e));return t.map(e=>{let r=(0,n.parseContentType)(e.encodingFormat??``)||(0,n.detectMimeTypeFromName)(e.basename);return B({uri:e.uri,mediaType:r,size:e.size,renditionLayout:r!==void 0&&(0,n.isMediaContentMimeType)(r)?`pre-paginated`:void 0,progressionWeight:1/t.length})})},V=async(e,{opf:t}={})=>{let n=t??await L(e).catch(()=>void 0);return n?Ee(e,n):Ae(e)},je=(e,t)=>{let r=l(e,t);if(r!==void 0)return(0,n.parseContentType)(r.encodingFormat??``)||(0,n.detectMimeTypeFromName)(r.basename)},Me=async(e,{opf:t,readingOrder:n}={})=>{let r=t??await L(e).catch(()=>void 0);if(r!==void 0&&r.opf.coverHref!==void 0){let t=we(r.opf.coverHref,r.basePath);return B({uri:t,mediaType:je(e,t),confidence:`derived`})}let i=(n??await V(e,{opf:r})).find(e=>e.mediaType?.startsWith(`image/`)===!0);if(i!==void 0)return B({uri:i.uri,mediaType:i.mediaType,confidence:`assumed`})},Ne=e=>{let t=e.descendantWithPath(`head`)?.childrenNamed(`meta`).find(e=>e.attr.name===`viewport`);return!!(t&&t.attr.name===`viewport`)},Pe=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(!Ne(new r.XmlDocument(e)))return!1}catch(t){return e.r.error(`layout scan: unable to inspect ${a.uri}`,t),!1}}return!0},Fe=R.toLowerCase();async function Ie(e){let t=e.records.find(e=>s(e)&&e.basename.toLowerCase()===Fe);if(t)return me(await p(t))}var Le=z.toLowerCase(),Re=e=>e.records.find(e=>s(e)&&e.basename.toLowerCase()===Le),ze=[`Unknown`,`No`,`Yes`,`YesAndRightToLeft`],Be=e=>{for(let t of ze)if(t===e)return!0;return!1};async function Ve(e){let t=Re(e);if(t)return ye(await p(t))}async function He(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}=Se(n);e&&(r=e)}catch(n){e.r.error(`Unable to parse ${be} (${t.uri})`,n)}}return{kind:`kobo`,...r===void 0?{}:{renditionLayout:r}}}var Ue=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))},We=e=>e.toLowerCase().endsWith(`.opf`),Ge=e=>e.records.some(e=>!e.dir&&(We(e.basename)||We(e.uri))),Ke=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=B({fixedLayout:r,options:t!==void 0&&t.length>0?t.map(({name:e,value:t})=>B({name:e,value:t})):void 0});return B({renditionLayout:r===!0?`pre-paginated`:void 0,apple:Object.keys(i).length>0?i:void 0})},qe=e=>{switch(e.Manga){case`YesAndRightToLeft`:return`rtl`;case`Yes`:case`No`:return`ltr`;default:return}},H=e=>{if(e===void 0)return;let t=e.trim();return t.length>0?t:void 0},U=e=>e===void 0?[]:e.split(`,`).map(e=>e.trim()).filter(e=>e.length>0),W=e=>{let t=H(e);if(t===void 0||!/^\d+$/.test(t))return;let n=Number.parseInt(t,10);return Number.isFinite(n)?n:void 0},G=e=>{let t=H(e);if(t===void 0||!/^\d+(\.\d+)?$/.test(t))return;let n=Number.parseFloat(t);return Number.isFinite(n)?n:void 0},Je=e=>{let t=H(e)?.toLowerCase();if(t===`yes`)return!0;if(t===`no`)return!1},Ye=e=>{switch(e.Manga){case`Yes`:case`YesAndRightToLeft`:return!0;case`No`:return!1;default:return}},Xe=e=>{let t=W(e.Year),n=W(e.Month),r=W(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}}},Ze=[[`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 Ze)for(let i of U(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()]},$e=e=>{let t=B({name:H(e.Series),position:G(e.Number),total:W(e.Count)});return Object.keys(t).length>0?t:void 0},et=e=>{let t=H(e.AlternateSeries);if(t!==void 0)return B({name:t,position:G(e.AlternateNumber),total:W(e.AlternateCount)})},tt=e=>{let t=U(e.StoryArc);if(t.length===0)return[];let n=U(e.StoryArcNumber);return t.map((e,t)=>B({name:e,position:G(n[t])}))},K=e=>e.length>0?e:void 0,nt=e=>(e.Web??``).split(/\s+/).filter(e=>e.length>0),rt=e=>{try{let t=new URL(e);return(t.protocol===`http:`||t.protocol===`https:`)&&t.hostname.length>0}catch{return!1}},it=e=>e.filter((e,t,n)=>rt(e)&&n.indexOf(e)===t).map(e=>({value:e,scheme:`URL`})),at=(e,t)=>{let n=B({manga:Ye(e),blackAndWhite:Je(e.BlackAndWhite),volume:W(e.Volume),format:H(e.Format),ageRating:H(e.AgeRating),notes:H(e.Notes),review:H(e.Review),web:K(t),scanInformation:H(e.ScanInformation),mainCharacterOrTeam:H(e.MainCharacterOrTeam),characters:K(U(e.Characters)),teams:K(U(e.Teams)),locations:K(U(e.Locations)),storyArcs:K(tt(e)),alternateSeries:et(e)});return Object.keys(n).length>0?n:void 0},ot=e=>{let t=G(e.CommunityRating);return t!==void 0&&t<=5?{value:t}:void 0},st=e=>{let t=$e(e),n=K(U(e.SeriesGroup).map(e=>({name:e})));if(t!==void 0||n!==void 0)return B({series:t===void 0?void 0:[t],collection:n})},ct=e=>{let t=e.GTIN,n=H(t),r=nt(e),i=[...n===void 0?[]:[{value:n,scheme:`GTIN`}],...it(r)],a=H(e.LanguageISO),o=[...U(e.Genre),...U(e.Tags)],s=B({date:Xe(e),publisher:H(e.Publisher),imprint:H(e.Imprint)}),c=H(e.Title);return B({titles:c===void 0?void 0:[{value:c}],description:H(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:K(o),contributors:K(Qe(e)),readingDirection:qe(e),numberOfPages:W(e.PageCount),aggregateRating:ot(e),identifiers:K(i),belongsTo:st(e),comicInfo:at(e,r)})},lt=e=>B({renditionLayout:e.renditionLayout,kobo:e.renditionLayout===void 0?void 0:{fixedLayout:e.renditionLayout===`pre-paginated`}}),ut=/[0-9Xx]+/g,dt=/^(?:97[89])?\d{9}[\dXx]$/,ft=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(ut)??[])if(dt.test(e))return e.toUpperCase()},pt=e=>{let t=ft(e);if(t!==void 0)return t.length===10||/^97[89]/.test(t)?t:void 0},mt=new Set([8,12,13,14]),ht=e=>{if(e==null)return;let t=String(e).replace(/\D/g,``);if(t.length!==0&&mt.has(t.length))return t},gt=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 pt(t)===void 0?ht(t)===void 0?`Unknown`:`GTIN`:`ISBN`},_t=new Map(Object.entries({isbn:`ISBN`,gtin:`GTIN`,doi:`DOI`,googlebooks:`GoogleBooks`,openlibrary:`OpenLibrary`,projectgutenberg:`ProjectGutenberg`,url:`URL`,unknown:`Unknown`})),q=e=>{let t=e.trim();return _t.get(t.toLowerCase())??t},vt=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)}}},yt={art:`artist`,aut:`author`,clr:`colorist`,ctb:`contributor`,edt:`editor`,ill:`illustrator`,nrt:`narrator`,trl:`translator`},bt=e=>e.map(e=>{let t=e.roles.map(e=>yt[e.trim().toLowerCase()]??e);return B({name:e.name,roles:t.length>0?t:[e.source===`creator`?`author`:`contributor`],sortAs:e.fileAs})}),J=(e,t)=>e.refines!==void 0&&e.refines.replace(/^#/,``)===t,xt=(e,t)=>{let n=e.id;if(n!==void 0)return T(t.find(e=>e.property===`identifier-type`&&J(e,n)&&e.value!==void 0))},St=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},Ct=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},wt=e=>{let t=e?.trim();return t!==void 0&&t.length>0?t:void 0},Y=(e,t,n)=>t===void 0?void 0:e.find(e=>J(e,t)&&e.property===n&&e.value!==void 0)?.value,Tt=(e,t)=>e.map(e=>B({value:e.value,type:wt(Y(t,e.id,`title-type`))?.toLowerCase(),displaySeq:Ct(Y(t,e.id,`display-seq`)),sortAs:wt(Y(t,e.id,`file-as`))})),Et=(e,t)=>{if(t===void 0)return;let n=e.flatMap(n=>{if(!J(n,t)||n.property!==`dcterms:identifier`)return[];let r=wt(n.value);return r===void 0?[]:[{value:r,scheme:q(T(e.find(e=>n.id!==void 0&&J(e,n.id)&&e.property===`identifier-type`))??gt(r))}]});return n.length>0?n:void 0},Dt=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=>Y(e,i,t),o=a(`collection-type`)?.trim().toLowerCase(),s=B({name:r.value,identifiers:Et(e,i),position:St(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(B({name:n,position:St(e.find(e=>e.name?.toLowerCase()===`calibre:series_index`)?.content)}))}return{series:t,collection:n}},Ot=e=>{let t=e?.trim();if(t===`scrolled-continuous`||t===`scrolled-doc`||t===`paginated`||t===`auto`)return t},kt=e=>{let t=e?.trim();if(t===`none`||t===`landscape`||t===`portrait`||t===`both`||t===`auto`)return t},At=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(),E=T===`reflowable`||T===`pre-paginated`?T:void 0,D=bt(n),O=Tt(t,m),{series:k,collection:A}=Dt(m),j=k.length>0||A.length>0?B({series:k.length>0?k:void 0,collection:A.length>0?A:void 0}):void 0,M=B({date:vt(c),publisher:r});return B({titles:O.length>0?O:void 0,description:i,publication:M.date!==void 0||M.publisher!==void 0?{edition:M}:void 0,rights:a,languages:o.length>0?[...o]:void 0,subjects:s.length>0?[...s]:void 0,contributors:D.length>0?D:void 0,readingDirection:w,renditionLayout:E,renditionFlow:Ot(u),renditionSpread:kt(d),identifiers:p.length>0?p.map(e=>B({value:e.value,scheme:q(e.scheme??xt(e,m)??gt(e.value)),unique:e.unique})):void 0,belongsTo:j,properties:m.length>0?[...m]:void 0})},jt=e=>e.kind===`comicInfo`?ct(e):e.kind===`kobo`?lt(e):e.kind===`apple`?Ke(e):At(e),Mt=e=>{let t=e.opf===void 0?void 0:At(e.opf),n=e.comicInfo===void 0?void 0:ct(e.comicInfo),r=e.apple===void 0?void 0:Ke(e.apple),i=e.kobo===void 0?void 0:lt(e.kobo),a=[...t?.identifiers??[],...n?.identifiers??[]],o=B({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 B({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})},Nt=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)},[])},Pt=e=>e?e.children.map(e=>e instanceof r.XmlTextNode?e.text:e instanceof r.XmlElement?Pt(e):``).join(``).trim():``,Ft=e=>h(e.properties).includes(`nav`),It=(e,{basePath:t})=>{let r={contents:[],path:``,containerHref:``,title:``},i=e.childNamed(`span`)||e.childNamed(`a`);r.title=(i?.attr.title||i?.val.trim()||Pt(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=>It(e,{basePath:t})))}return r},Lt=(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(It(e,{basePath:t}))}),n},Rt=async(e,t)=>{let i=e.manifestItems.find(Ft);if(i?.href){let e=t.records.find(e=>e.uri.endsWith(i.href));if(e&&!e.dir)return Lt(new r.XmlDocument(await p(e)),{basePath:(0,n.getUriBasePath)(e.uri)})}},zt=(e,{basePath:t,prefix:r})=>{let i=e?.childNamed(`${r}content`)?.attr.src||``,a=(0,n.urlJoin)(t,i),o={title:e?.descendantWithPath(`${r}navLabel.${r}text`)?.val||``,path:a,containerHref:a,contents:[]},s=e.childrenNamed(`${r}navPoint`);return s&&s.length>0&&(o.contents=s.map(e=>zt(e,{basePath:t,prefix:r}))),o},Bt=(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(zt(e,{basePath:t,prefix:i}))}),n},Vt=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 Bt(new r.XmlDocument(await p(a)),{basePath:(0,n.getUriBasePath)(a.uri)})}}},Ht=async(e,{opf:t}={})=>{let n=t??await L(e);if(n)return await Rt(n.opf,e)||await Vt({opf:n.opf,opfBasePath:n.basePath,archive:e})||[];let r=Nt(e);return r.length===0?void 0:r},Ut=[`metadata`,`readingOrder`,`toc`],X=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}}},Wt=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},Gt=({archive:e,opf:t,comicInfo:n,apple:r,kobo:i})=>{let a=[];return t!==void 0&&t.value===void 0&&(t.failed||Ge(e))&&a.push(`opf`),n?.failed&&a.push(`comicInfo`),r?.failed&&a.push(`apple`),i?.failed&&a.push(`kobo`),a},Kt=3,qt=async(e,t={})=>{let n=new Set(t.include??Ut),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 X(()=>L(e),`opf`):void 0,l=c?.value,u=r||i||s,d=u?await X(()=>Ve(e),`comicInfo`):void 0,f=d?.value,p=u?await X(()=>Ie(e),`apple`):void 0,m=p?.value,h=u?await X(()=>He(e),`kobo`):void 0,g=h?.value,_=r||s?Mt({opf:l?.opf,comicInfo:f,apple:m,kobo:g}):void 0,v=a||s?await V(e,{opf:l}):void 0;if(s&&_!==void 0&&v!==void 0&&_.renditionLayout===`reflowable`&&v.every(e=>e.renditionLayout===`reflowable`)&&await Pe(e,v)&&(_={..._,renditionLayout:`pre-paginated`},v=v.map(e=>({...e,renditionLayout:`pre-paginated`}))),r&&_!==void 0){let t=v??await V(e,{opf:l}),n=await Me(e,{opf:l,readingOrder:t}),r=_.numberOfPages??Wt(t);_=B({..._,cover:n,numberOfPages:r})}let y=o?(await X(()=>Ht(e,{opf:l}),`toc`)).value:void 0,b={version:Kt,unreadableSources:Gt({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=B({opf:l,comicInfo:f,apple:m,kobo:g})),b},Jt=e=>{let t=e.trim().toLowerCase();return t===`url`||t===`uri`||t===`unknown`},Yt=e=>{try{return decodeURIComponent(e)}catch{return}},Xt=e=>{try{let t=new URL(e.trim());return t.protocol===`http:`||t.protocol===`https:`?t:void 0}catch{return}},Z=(e,t)=>{let n=Xt(e);return n!==void 0&&t(n.hostname.toLowerCase())?n:void 0},Zt=/^books\.google\.(?:com|[a-z]{2}|com\.[a-z]{2}|co\.[a-z]{2})$/i,Qt=new Set([`books.googleapis.com`,`www.googleapis.com`]),$t=/^\/books\/v1\/volumes\/([^/]+)\/?$/i,en=e=>{let t=e.trim();return/^[a-z0-9_-]+$/i.test(t)?t:void 0},tn=e=>{let t=Z(e,e=>Zt.test(e)||Qt.has(e));if(t!==void 0){if(Qt.has(t.hostname.toLowerCase())){let e=$t.exec(t.pathname)?.[1],n=e===void 0?void 0:Yt(e);return n===void 0?void 0:en(n)}return en(t.searchParams.get(`id`)??``)}},nn=new Set([`gutenberg.org`,`www.gutenberg.org`]),rn=[/^\/ebooks\/(\d+)(?:[./]|$)/i,/^\/files\/(\d+)(?:\/|$)/i,/^\/cache\/epub\/(\d+)(?:\/|$)/i,/^\/(\d+)(?:\/|$)/],an=e=>{let t=e.trim();if(!/^\d+$/.test(t))return;let n=t.replace(/^0+(?=\d)/,``);return n===`0`?void 0:n},on=e=>{let t=Z(e,e=>nn.has(e));if(t!==void 0)for(let e of rn){let n=e.exec(t.pathname)?.[1];if(n!==void 0)return an(n)}},sn=new Set([`openlibrary.org`,`www.openlibrary.org`]),cn=/^\/(works|books|authors)\/(OL\d+[A-Z])(?:\/|$)/i,ln=/^OL\d+([MWA])$/i,un={M:`books`,W:`works`,A:`authors`},dn=e=>{let t=e.trim(),n=cn.exec(t);if(n?.[1]!==void 0&&n[2]!==void 0)return`/${n[1].toLowerCase()}/${n[2].toUpperCase()}`;let r=un[ln.exec(t)?.[1]?.toUpperCase()??``];return r===void 0?void 0:`/${r}/${t.toUpperCase()}`},fn=e=>{let t=Z(e,e=>sn.has(e));return t===void 0?void 0:dn(t.pathname)},pn=new Set([`doi.org`,`dx.doi.org`,`www.doi.org`]),mn=/^10\.\d{4,9}\/\S+$/,hn=e=>{let t=e.trim().replace(/^doi:/i,``);return mn.test(t)?t:void 0},gn=e=>e.split(`/`).map(encodeURIComponent).join(`/`),Q=[{scheme:`GoogleBooks`,normalizeValue:en,valueFromUrl:tn,toUrl:e=>`https://books.google.com/books?id=${encodeURIComponent(e)}`},{scheme:`ProjectGutenberg`,normalizeValue:an,valueFromUrl:on,toUrl:e=>`https://www.gutenberg.org/ebooks/${e}`},{scheme:`OpenLibrary`,normalizeValue:dn,valueFromUrl:fn,toUrl:e=>`https://openlibrary.org${e}`},{scheme:`DOI`,normalizeValue:hn,valueFromUrl:e=>{let t=Z(e,e=>pn.has(e)),n=t===void 0?void 0:Yt(t.pathname.replace(/^\//,``));return n===void 0?void 0:hn(n)},toUrl:e=>`https://doi.org/${gn(e)}`}],_n=Q.map(function(e){return e.scheme}),vn=e=>{let t=e.trim().toLowerCase();return Q.find(function(e){return e.scheme.toLowerCase()===t})},yn=e=>vn(e)!==void 0,bn=e=>{for(let t of Q){let n=t.valueFromUrl(e);if(n!==void 0)return{value:n,scheme:t.scheme}}},xn=({scheme:e,value:t})=>{let n=vn(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},Sn=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},Cn=e=>{let t=q(e);return t===`ISBN`||t===`GTIN`},wn=e=>({carries:Cn,normalizeValue:e}),$=e=>({carries:t=>q(t)===e,...Sn(e)}),Tn={ISBN:wn(pt),GTIN:wn(ht),GoogleBooks:$(`GoogleBooks`),OpenLibrary:$(`OpenLibrary`),ProjectGutenberg:$(`ProjectGutenberg`),DOI:$(`DOI`)},En=(e,t)=>{let n=Tn[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||!Jt(t.scheme))continue;let e=n.valueFromUrl(t.value);if(e!==void 0)return e}},Dn=e=>e?.titles?.[0]?.value;exports.APPLE_IBOOKS_DISPLAY_OPTIONS_FILENAME=R,exports.COMIC_INFO_FILENAME=z,exports.COMIC_INFO_KNOWN_FIELDS=he,exports.COMIC_INFO_MANGA_VALUES=ze,exports.KOBO_DISPLAY_OPTIONS_FILENAME=be,exports.METADATA_CATALOG_SCHEMES=_n,exports.OPF_IDENTIFIER_SCHEME_ATTRIBUTES=C,exports.OPF_IDENTIFIER_SCHEME_LOCAL_NAMES=S,exports.OPF_NAMESPACE=g,exports.arrayBufferFileAccessors=t.t,exports.blobFileAccessors=t.n,exports.catalogIdentifierFromUrl=bn,exports.catalogUrlFromIdentifier=xn,exports.createArchive=e.n,exports.createArchiveFromArrayBufferList=i,exports.createArchiveFromEntries=e.t,exports.createArchiveFromText=a,exports.createArchiveFromUrls=o,exports.getArchiveFileRecordByUri=l,exports.getArchiveHasComicInfo=Re,exports.getArchiveImageRecords=f,exports.getArchiveOpfInfo=m,exports.getSpineItemFilesFromArchive=Ue,exports.identifierValue=En,exports.inferIdentifierScheme=gt,exports.isArchiveEpub=Ge,exports.isComicInfoManga=Be,exports.isDirectoryRecord=c,exports.isFileRecord=s,exports.isImageRecord=d,exports.isIsbnBearingScheme=Cn,exports.isMetadataCatalogScheme=yn,exports.mainTitle=Dn,exports.normalizeGtin=ht,exports.normalizeIdentifierScheme=q,exports.normalizeIsbn=ft,exports.opfIdentifierSchemeAttribute=E,exports.opfIdentifierTypeScheme=T,exports.opfNamespacePrefixes=b,exports.opfNamespacedAttribute=x,exports.parseAppleDisplayOptionsXml=me,exports.parseComicInfo=ye,exports.parseKoboXml=Se,exports.parseOpf=fe,exports.parseW3cDtfDate=vt,exports.readArchiveApple=Ie,exports.readArchiveComicInfo=Ve,exports.readArchiveKobo=He,exports.readArchiveOpf=L,exports.readRecordAsText=p,exports.readingOrderDocumentsAllHaveViewport=Pe,exports.resolveArchive=qt,exports.resolveArchiveCover=Me,exports.resolveArchiveMetadata=jt,exports.resolveArchiveReadingOrder=V,exports.resolveArchiveToc=Ht,exports.resolveMetadata=Mt,exports.tokenizeXmlSpaceSeparatedList=h,exports.xmlNamespaceScope=y;
32
32
  //# sourceMappingURL=index.cjs.map