@prose-reader/archive-reader 1.344.0 → 1.345.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.
Files changed (47) hide show
  1. package/dist/cover/resolveArchiveCover.d.ts +1 -1
  2. package/dist/index/index.cjs +4 -4
  3. package/dist/index/index.cjs.map +1 -1
  4. package/dist/index/index.js +497 -484
  5. package/dist/index/index.js.map +1 -1
  6. package/dist/index.d.ts +24 -24
  7. package/dist/{apple → metadata/apple}/readArchiveApple.d.ts +1 -1
  8. package/dist/{apple → metadata/apple}/resolve.d.ts +1 -1
  9. package/dist/{comicInfo → metadata/comicInfo}/getArchiveHasComicInfo.d.ts +1 -1
  10. package/dist/{comicInfo → metadata/comicInfo}/readArchiveComicInfo.d.ts +1 -1
  11. package/dist/{comicInfo → metadata/comicInfo}/resolve.d.ts +1 -1
  12. package/dist/{kobo → metadata/kobo}/readArchiveKobo.d.ts +1 -1
  13. package/dist/{kobo → metadata/kobo}/resolve.d.ts +1 -1
  14. package/dist/metadata/opf/getArchiveOpfInfo.d.ts +5 -0
  15. package/dist/{opf → metadata/opf}/getSpineItemFilesFromArchive.d.ts +2 -2
  16. package/dist/{opf → metadata/opf}/isArchiveEpub.d.ts +1 -1
  17. package/dist/{opf → metadata/opf}/readArchiveOpf.d.ts +1 -1
  18. package/dist/{opf → metadata/opf}/resolve.d.ts +1 -1
  19. package/dist/readingOrder/resolveArchiveReadingOrder.d.ts +1 -1
  20. package/dist/resolve.d.ts +4 -4
  21. package/dist/resolveArchive.d.ts +4 -4
  22. package/dist/resolveMetadata.d.ts +4 -4
  23. package/dist/toc/nav.d.ts +1 -1
  24. package/dist/toc/ncx.d.ts +1 -1
  25. package/dist/toc/resolveArchiveToc.d.ts +1 -1
  26. package/dist/types/resolvedMetadata.d.ts +10 -7
  27. package/package.json +3 -3
  28. package/dist/opf/getArchiveOpfInfo.d.ts +0 -5
  29. /package/dist/{apple → metadata/apple}/parse.d.ts +0 -0
  30. /package/dist/{apple → metadata/apple}/parse.test.d.ts +0 -0
  31. /package/dist/{apple → metadata/apple}/readArchiveApple.test.d.ts +0 -0
  32. /package/dist/{apple → metadata/apple}/resolve.test.d.ts +0 -0
  33. /package/dist/{comicInfo → metadata/comicInfo}/manga.d.ts +0 -0
  34. /package/dist/{comicInfo → metadata/comicInfo}/manga.test.d.ts +0 -0
  35. /package/dist/{comicInfo → metadata/comicInfo}/parse.d.ts +0 -0
  36. /package/dist/{comicInfo → metadata/comicInfo}/parse.test.d.ts +0 -0
  37. /package/dist/{comicInfo → metadata/comicInfo}/readArchiveComicInfo.test.d.ts +0 -0
  38. /package/dist/{comicInfo → metadata/comicInfo}/resolve.test.d.ts +0 -0
  39. /package/dist/{kobo → metadata/kobo}/parse.d.ts +0 -0
  40. /package/dist/{kobo → metadata/kobo}/parse.test.d.ts +0 -0
  41. /package/dist/{kobo → metadata/kobo}/readArchiveKobo.test.d.ts +0 -0
  42. /package/dist/{kobo → metadata/kobo}/resolve.test.d.ts +0 -0
  43. /package/dist/{opf → metadata/opf}/parse.d.ts +0 -0
  44. /package/dist/{opf → metadata/opf}/parse.test.d.ts +0 -0
  45. /package/dist/{opf → metadata/opf}/resolve.test.d.ts +0 -0
  46. /package/dist/{opf → metadata/opf}/spineItemrefProperties.d.ts +0 -0
  47. /package/dist/{opf → metadata/opf}/spineItemrefProperties.test.d.ts +0 -0
@@ -1,56 +1,20 @@
1
1
  import { n as e, r as t, t as n } from "../createArchiveFromEntries-BiBoi26P.js";
2
2
  import { n as r, t as i } from "../fileAccessors-etcCPnpQ.js";
3
- import { XmlDocument as a, XmlElement as o, XmlTextNode as s } from "xmldoc";
4
- import { createXmlSafeIdFactory as c, detectMimeTypeFromName as l, escapeXmlAttributeValue as u, getUriBasePath as d, getUriBasename as f, isMediaContentMimeType as p, isXmlBasedMimeType as m, parseContentType as h, sortByTitleComparator as g, urlJoin as _ } from "@prose-reader/shared";
5
- //#region src/apple/parse.ts
6
- var v = "com.apple.ibooks.display-options.xml", y = (e) => e.childrenNamed("option").map((e) => ({
7
- name: e.attr?.name,
8
- value: e.val
9
- })), b = (e) => {
10
- let t = new a(e);
11
- if (t.name?.toLowerCase() !== "display_options") return { kind: "apple" };
12
- let n = t.childNamed("platform");
13
- return {
14
- kind: "apple",
15
- displayOptions: { ...n === void 0 ? {} : { platform: { options: y(n) } } }
16
- };
17
- }, x = async (e) => new TextDecoder().decode(await e.arrayBuffer()), S = (e) => !e.dir, C = (e) => e.dir, w = (e, t) => {
18
- let n = e.recordsByUri.get(t);
19
- return n && S(n) ? n : void 0;
20
- }, T = v.toLowerCase();
21
- async function E(e) {
22
- let t = e.records.find((e) => S(e) && e.basename.toLowerCase() === T);
23
- if (t) return b(await x(t));
24
- }
25
- //#endregion
26
- //#region src/utils/omitUndefined.ts
27
- var D = (e) => {
28
- let t = Object.entries(e).filter(([, e]) => e !== void 0);
29
- return Object.fromEntries(t);
30
- }, O = { displayOptions: "apple.options" }, k = (e) => {
31
- 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 = D({
32
- fixedLayout: r,
33
- options: t !== void 0 && t.length > 0 ? t.map(({ name: e, value: t }) => D({
34
- name: e,
35
- value: t
36
- })) : void 0
37
- });
38
- return D({
39
- renditionLayout: r === !0 ? "pre-paginated" : void 0,
40
- apple: Object.keys(i).length > 0 ? i : void 0
41
- });
42
- }, ee = async (e, t = {}) => n(e, (e) => e.isDir ? {
3
+ import { createXmlSafeIdFactory as a, detectMimeTypeFromName as o, escapeXmlAttributeValue as s, getUriBasePath as c, getUriBasename as l, isMediaContentMimeType as u, isXmlBasedMimeType as d, parseContentType as f, sortByTitleComparator as p, urlJoin as m } from "@prose-reader/shared";
4
+ import { XmlDocument as h, XmlElement as g, XmlTextNode as _ } from "xmldoc";
5
+ //#region src/archives/createArchiveFromArrayBufferList.ts
6
+ var v = async (e, t = {}) => n(e, (e) => e.isDir ? {
43
7
  dir: !0,
44
8
  uri: e.name
45
9
  } : {
46
10
  dir: !1,
47
11
  uri: e.name,
48
12
  size: e.size,
49
- ...i(e.data, l(e.name) ?? "")
13
+ ...i(e.data, o(e.name) ?? "")
50
14
  }, {
51
15
  ...t,
52
16
  close: () => Promise.resolve()
53
- }), te = async (t, { mimeType: n, direction: i } = { mimeType: "text/plain" }) => {
17
+ }), y = async (t, { mimeType: n, direction: i } = { mimeType: "text/plain" }) => {
54
18
  let a = `
55
19
  <?xml version="1.0" encoding="UTF-8"?>
56
20
  <package xmlns="http://www.idpf.org/2007/opf" version="3.0" xml:lang="ja" prefix="rendition: http://www.idpf.org/vocab/rendition/#"
@@ -72,13 +36,13 @@ var D = (e) => {
72
36
  encodingFormat: n,
73
37
  records: [{
74
38
  dir: !1,
75
- basename: f("generated.opf"),
39
+ basename: l("generated.opf"),
76
40
  uri: "generated.opf",
77
41
  size: 0,
78
42
  ...r(async () => new Blob([a]))
79
43
  }, {
80
44
  dir: !1,
81
- basename: f("p01.txt"),
45
+ basename: l("p01.txt"),
82
46
  uri: "p01.txt",
83
47
  size: typeof t == "string" ? new Blob([t]).size : t.size,
84
48
  encodingFormat: n,
@@ -86,30 +50,30 @@ var D = (e) => {
86
50
  }],
87
51
  close: () => Promise.resolve()
88
52
  });
89
- }, ne = async (t, n) => {
90
- let i = c(), a = t.map((e) => ({
53
+ }, b = async (t, n) => {
54
+ let i = a(), c = t.map((e) => ({
91
55
  id: i(e),
92
56
  url: e
93
- })), o = `
57
+ })), u = `
94
58
  <?xml version="1.0" encoding="UTF-8"?><package xmlns="http://www.idpf.org/2007/opf" version="2.0" unique-identifier="bookid">
95
59
  <metadata>
96
60
  <meta property="rendition:layout">${n?.useRenditionFlow ? "reflowable" : "pre-paginated"}</meta>
97
61
  ${n?.useRenditionFlow ? "<meta property=\"rendition:flow\">scrolled-continuous</meta>" : ""}
98
62
  </metadata>
99
63
  <manifest>
100
- ${a.map(({ id: e, url: t }) => {
101
- let n = l(t);
102
- return `<item id="${e}" href="${u(t)}" media-type="${u(n ?? "")}"/>`;
64
+ ${c.map(({ id: e, url: t }) => {
65
+ let n = o(t);
66
+ return `<item id="${e}" href="${s(t)}" media-type="${s(n ?? "")}"/>`;
103
67
  }).join("\n")}
104
68
  </manifest>
105
69
  <spine>
106
- ${a.map(({ id: e }) => `<itemref idref="${e}" />`).join("\n")}
70
+ ${c.map(({ id: e }) => `<itemref idref="${e}" />`).join("\n")}
107
71
  </spine>
108
72
  </package>
109
- `, s = t.map((e) => ({
73
+ `, d = t.map((e) => ({
110
74
  dir: !1,
111
- basename: f(e),
112
- encodingFormat: l(e),
75
+ basename: l(e),
76
+ encodingFormat: o(e),
113
77
  uri: e,
114
78
  size: 0,
115
79
  ...r(async () => (await fetch(e)).blob())
@@ -120,244 +84,21 @@ var D = (e) => {
120
84
  basename: "content.opf",
121
85
  uri: "content.opf",
122
86
  size: 0,
123
- ...r(async () => new Blob([o]))
124
- }, ...s],
87
+ ...r(async () => new Blob([u]))
88
+ }, ...d],
125
89
  close: () => Promise.resolve()
126
90
  });
127
- }, re = (e) => h(e.encodingFormat ?? "") || l(e.basename), A = (e) => S(e) && re(e)?.startsWith("image/") === !0, ie = (e) => e.records.filter(S).filter(A), j = "ComicInfo.xml", ae = /* @__PURE__ */ "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("."), oe = /* @__PURE__ */ new Set(["Pages", "ComicInfo"]), se = (e) => e.children.some((e) => e.type === "element"), ce = (e) => {
128
- let t = e.val.trim();
129
- return t.length > 0 ? t : void 0;
130
- }, le = (e) => {
131
- let t;
132
- try {
133
- t = new a(e);
134
- } catch (e) {
135
- let t = e instanceof Error ? e.message : String(e);
136
- throw Error(`${j} is malformed: ${t}`, { cause: e });
137
- }
138
- let n = {};
139
- return t.eachChild((e) => {
140
- if (e.type !== "element" || oe.has(e.name) || se(e)) return;
141
- let t = ce(e);
142
- t !== void 0 && n[e.name] === void 0 && (n[e.name] = t);
143
- }), {
144
- kind: "comicInfo",
145
- ...n
146
- };
147
- }, ue = j.toLowerCase(), M = (e) => e.records.find((e) => S(e) && e.basename.toLowerCase() === ue), de = [
148
- "Unknown",
149
- "No",
150
- "Yes",
151
- "YesAndRightToLeft"
152
- ], fe = (e) => {
153
- for (let t of de) if (t === e) return !0;
154
- return !1;
155
- };
156
- //#endregion
157
- //#region src/comicInfo/readArchiveComicInfo.ts
158
- async function N(e) {
159
- let t = M(e);
160
- if (t) return le(await x(t));
161
- }
162
- //#endregion
163
- //#region src/utils/normalizeGtin.ts
164
- var pe = /* @__PURE__ */ new Set([
165
- 8,
166
- 12,
167
- 13,
168
- 14
169
- ]), P = (e) => {
170
- if (e == null) return;
171
- let t = String(e).replace(/\D/g, "");
172
- if (!(t.length === 0 || !pe.has(t.length))) return t;
173
- }, me = /(?:97[89])?\d{9}[\dXx]/, F = (e) => {
174
- if (e == null) return;
175
- let t = String(e).trim().replace(/^urn:isbn:/i, "").replace(/^isbn[:\s-]*/i, ""), n = t.replace(/[^0-9Xx]/g, "");
176
- if (n.length === 10 || n.length === 13) return n.toUpperCase();
177
- let r = t.match(me);
178
- if (r) return r[0].toUpperCase();
179
- }, he = {
180
- AgeRating: "comic.ageRating",
181
- AlternateCount: "comic.alternateSeries",
182
- AlternateNumber: "comic.alternateSeries",
183
- AlternateSeries: "comic.alternateSeries",
184
- BlackAndWhite: "comic.blackAndWhite",
185
- Characters: "comic.characters",
186
- Colorist: "contributors",
187
- CommunityRating: "comic.communityRating",
188
- Count: "belongsTo.series",
189
- CoverArtist: "contributors",
190
- Day: "publication.edition.date",
191
- Editor: "contributors",
192
- Format: "comic.format",
193
- Genre: "subjects",
194
- GTIN: "identifiers",
195
- Imprint: "publication.edition.imprint",
196
- Inker: "contributors",
197
- LanguageISO: "languages",
198
- Letterer: "contributors",
199
- Locations: "comic.locations",
200
- MainCharacterOrTeam: "comic.mainCharacterOrTeam",
201
- Manga: "readingDirection",
202
- Month: "publication.edition.date",
203
- Notes: "comic.notes",
204
- Number: "belongsTo.series",
205
- PageCount: "numberOfPages",
206
- Penciller: "contributors",
207
- Publisher: "publication.edition.publisher",
208
- Review: "comic.review",
209
- ScanInformation: "comic.scanInformation",
210
- Series: "belongsTo.series",
211
- SeriesGroup: "belongsTo.collection",
212
- StoryArc: "comic.storyArcs",
213
- StoryArcNumber: "comic.storyArcs",
214
- Summary: "description",
215
- Tags: "subjects",
216
- Teams: "comic.teams",
217
- Title: "title",
218
- Translator: "contributors",
219
- Volume: "comic.volume",
220
- Web: "comic.web",
221
- Writer: "contributors",
222
- Year: "publication.edition.date"
223
- }, ge = (e) => {
224
- switch (e.Manga) {
225
- case "YesAndRightToLeft": return "rtl";
226
- case "Yes":
227
- case "No": return "ltr";
228
- default: return;
229
- }
230
- }, I = (e) => {
231
- if (e === void 0) return;
232
- let t = e.trim();
233
- return t.length > 0 ? t : void 0;
234
- }, L = (e) => e === void 0 ? [] : e.split(",").map((e) => e.trim()).filter((e) => e.length > 0), R = (e) => {
235
- let t = I(e);
236
- if (t === void 0 || !/^\d+$/.test(t)) return;
237
- let n = Number.parseInt(t, 10);
238
- return Number.isFinite(n) ? n : void 0;
239
- }, z = (e) => {
240
- let t = I(e);
241
- if (t === void 0 || !/^\d+(\.\d+)?$/.test(t)) return;
242
- let n = Number.parseFloat(t);
243
- return Number.isFinite(n) ? n : void 0;
244
- }, _e = (e) => {
245
- let t = I(e)?.toLowerCase();
246
- if (t === "yes") return !0;
247
- if (t === "no") return !1;
248
- }, ve = (e) => {
249
- switch (e.Manga) {
250
- case "Yes":
251
- case "YesAndRightToLeft": return !0;
252
- case "No": return !1;
253
- default: return;
254
- }
255
- }, ye = (e) => {
256
- let t = R(e.Year), n = R(e.Month), r = R(e.Day);
257
- if (!(t === void 0 && n === void 0 && r === void 0)) return {
258
- ...t === void 0 ? {} : { year: t },
259
- ...n === void 0 ? {} : { month: n },
260
- ...r === void 0 ? {} : { day: r }
261
- };
262
- }, be = [
263
- ["Writer", "author"],
264
- ["Penciller", "penciler"],
265
- ["Inker", "inker"],
266
- ["Colorist", "colorist"],
267
- ["Letterer", "letterer"],
268
- ["CoverArtist", "coverArtist"],
269
- ["Editor", "editor"],
270
- ["Translator", "translator"]
271
- ], xe = (e) => {
272
- let t = /* @__PURE__ */ new Map();
273
- for (let [n, r] of be) for (let i of L(e[n])) {
274
- let e = t.get(i);
275
- e ? e.roles.includes(r) || e.roles.push(r) : t.set(i, {
276
- name: i,
277
- roles: [r]
278
- });
279
- }
280
- return [...t.values()];
281
- }, Se = (e) => {
282
- let t = I(e.Series);
283
- if (t !== void 0) return D({
284
- name: t,
285
- position: z(e.Number),
286
- total: R(e.Count)
287
- });
288
- }, Ce = (e) => {
289
- let t = I(e.AlternateSeries);
290
- if (t !== void 0) return D({
291
- name: t,
292
- position: z(e.AlternateNumber),
293
- total: R(e.AlternateCount)
294
- });
295
- }, we = (e) => {
296
- let t = L(e.StoryArc);
297
- if (t.length === 0) return [];
298
- let n = L(e.StoryArcNumber);
299
- return t.map((e, t) => D({
300
- name: e,
301
- position: z(n[t])
302
- }));
303
- }, B = (e) => e.length > 0 ? e : void 0, Te = (e) => {
304
- let t = B((e.Web ?? "").split(/\s+/).filter((e) => e.length > 0)), n = D({
305
- manga: ve(e),
306
- blackAndWhite: _e(e.BlackAndWhite),
307
- volume: R(e.Volume),
308
- format: I(e.Format),
309
- ageRating: I(e.AgeRating),
310
- communityRating: z(e.CommunityRating),
311
- notes: I(e.Notes),
312
- review: I(e.Review),
313
- web: t,
314
- scanInformation: I(e.ScanInformation),
315
- mainCharacterOrTeam: I(e.MainCharacterOrTeam),
316
- characters: B(L(e.Characters)),
317
- teams: B(L(e.Teams)),
318
- locations: B(L(e.Locations)),
319
- storyArcs: B(we(e)),
320
- alternateSeries: Ce(e)
321
- });
322
- return Object.keys(n).length > 0 ? n : void 0;
323
- }, Ee = (e) => {
324
- let t = Se(e), n = B(L(e.SeriesGroup).map((e) => ({ name: e })));
325
- if (!(t === void 0 && n === void 0)) return D({
326
- series: t === void 0 ? void 0 : [t],
327
- collection: n
328
- });
329
- }, V = (e) => {
330
- let t = e.GTIN, n = I(t), r = I(e.LanguageISO), i = [...L(e.Genre), ...L(e.Tags)], a = D({
331
- date: ye(e),
332
- publisher: I(e.Publisher),
333
- imprint: I(e.Imprint)
334
- });
335
- return D({
336
- title: I(e.Title),
337
- description: I(e.Summary),
338
- publication: a.date !== void 0 || a.publisher !== void 0 || a.imprint !== void 0 ? { edition: a } : void 0,
339
- languages: r === void 0 ? void 0 : [r],
340
- subjects: B(i),
341
- contributors: B(xe(e)),
342
- readingDirection: ge(e),
343
- numberOfPages: R(e.PageCount),
344
- gtin: P(t),
345
- isbn: F(t),
346
- identifiers: n === void 0 ? void 0 : [{
347
- value: n,
348
- scheme: "GTIN"
349
- }],
350
- belongsTo: Ee(e),
351
- comic: Te(e)
352
- });
353
- }, H = (e) => {
91
+ }, x = (e) => !e.dir, S = (e) => e.dir, C = (e, t) => {
92
+ let n = e.recordsByUri.get(t);
93
+ return n && x(n) ? n : void 0;
94
+ }, w = (e) => f(e.encodingFormat ?? "") || o(e.basename), T = (e) => x(e) && w(e)?.startsWith("image/") === !0, E = (e) => e.records.filter(x).filter(T), D = async (e) => new TextDecoder().decode(await e.arrayBuffer()), O = (e) => {
354
95
  let t = e.records.filter((e) => !e.dir).find((e) => e.uri.endsWith(".opf"));
355
96
  return {
356
97
  data: t,
357
98
  basePath: t?.uri.substring(0, t.uri.lastIndexOf("/")) || ""
358
99
  };
359
- }, U = (e) => e === void 0 || e.trim().length === 0 ? [] : e.trim().split(/\s+/).filter((e) => e.length > 0), De = (e) => {
360
- let t = U(e);
100
+ }, k = (e) => e === void 0 || e.trim().length === 0 ? [] : e.trim().split(/\s+/).filter((e) => e.length > 0), ee = (e) => {
101
+ let t = k(e);
361
102
  if (t.length === 0) return {};
362
103
  let n;
363
104
  t.includes("rendition:layout-reflowable") && (n = "reflowable"), t.includes("rendition:layout-pre-paginated") && (n = "pre-paginated");
@@ -368,16 +109,16 @@ var pe = /* @__PURE__ */ new Set([
368
109
  ...t.includes("page-spread-left") ? { pageSpreadLeft: !0 } : {},
369
110
  ...t.includes("page-spread-right") ? { pageSpreadRight: !0 } : {}
370
111
  };
371
- }, W = (e) => e.includes(":") ? e.slice(e.lastIndexOf(":") + 1) : e, Oe = (e, t) => W(e).toLowerCase() === t.toLowerCase(), ke = (e) => e.type === "element", G = (e, t) => {
372
- for (let n of e.children) if (ke(n) && Oe(n.name, t)) return n;
373
- }, K = (e, t) => {
112
+ }, A = (e) => e.includes(":") ? e.slice(e.lastIndexOf(":") + 1) : e, te = (e, t) => A(e).toLowerCase() === t.toLowerCase(), j = (e) => e.type === "element", M = (e, t) => {
113
+ for (let n of e.children) if (j(n) && te(n.name, t)) return n;
114
+ }, N = (e, t) => {
374
115
  let n = [];
375
- for (let r of e.children) ke(r) && Oe(r.name, t) && n.push(r);
116
+ for (let r of e.children) j(r) && te(r.name, t) && n.push(r);
376
117
  return n;
377
- }, Ae = (e, t) => {
118
+ }, ne = (e, t) => {
378
119
  let n = [];
379
120
  return e.eachChild((e) => {
380
- if (W(e.name).toLowerCase() !== "identifier") return;
121
+ if (A(e.name).toLowerCase() !== "identifier") return;
381
122
  let r = e.val.trim();
382
123
  if (r.length === 0) return;
383
124
  let i = (e.attr["opf:scheme"] ?? e.attr["opf:Scheme"] ?? e.attr.scheme)?.trim(), a = e.attr.id?.trim(), o = a !== void 0 && a.length > 0 ? a : void 0;
@@ -388,46 +129,46 @@ var pe = /* @__PURE__ */ new Set([
388
129
  ...o !== void 0 && o === t ? { unique: !0 } : {}
389
130
  });
390
131
  }), n;
391
- }, q = (e, t) => {
132
+ }, P = (e, t) => {
392
133
  let n;
393
134
  return e.eachChild((e) => {
394
- if (n !== void 0 || W(e.name).toLowerCase() !== t.toLowerCase()) return;
135
+ if (n !== void 0 || A(e.name).toLowerCase() !== t.toLowerCase()) return;
395
136
  let r = e.val.trim();
396
137
  r.length > 0 && (n = r);
397
138
  }), n;
398
- }, J = (e, t) => {
139
+ }, F = (e, t) => {
399
140
  let n = [];
400
141
  return e.eachChild((e) => {
401
- if (W(e.name).toLowerCase() !== t.toLowerCase()) return;
142
+ if (A(e.name).toLowerCase() !== t.toLowerCase()) return;
402
143
  let r = e.val.trim();
403
144
  r.length > 0 && n.push(r);
404
145
  }), n;
405
- }, je = (e) => {
146
+ }, re = (e) => {
406
147
  let t;
407
148
  return e.eachChild((e) => {
408
- if (t !== void 0 || W(e.name).toLowerCase() !== "meta" || e.attr.name?.toLowerCase() !== "cover") return;
149
+ if (t !== void 0 || A(e.name).toLowerCase() !== "meta" || e.attr.name?.toLowerCase() !== "cover") return;
409
150
  let n = e.attr.content?.trim();
410
151
  n !== void 0 && n.length > 0 && (t = n);
411
152
  }), t;
412
- }, Me = ({ manifestItems: e, metadataEl: t }) => {
413
- let n = (e) => e.mediaType?.toLowerCase().includes("image/") === !0, r = e.find((e) => n(e) ? U(e.properties).includes("cover-image") : !1);
153
+ }, ie = ({ manifestItems: e, metadataEl: t }) => {
154
+ let n = (e) => e.mediaType?.toLowerCase().includes("image/") === !0, r = e.find((e) => n(e) ? k(e.properties).includes("cover-image") : !1);
414
155
  if (r !== void 0) return r.href;
415
156
  if (t !== void 0) {
416
- let r = je(t);
157
+ let r = re(t);
417
158
  if (r !== void 0) {
418
159
  let t = e.find((e) => e.id === r && n(e));
419
160
  if (t !== void 0) return t.href;
420
161
  }
421
162
  }
422
163
  return e.find((e) => e.id.toLowerCase().includes("cover") && n(e))?.href;
423
- }, Y = (e, t) => {
164
+ }, I = (e, t) => {
424
165
  let n = e.attr[t]?.trim();
425
166
  return n !== void 0 && n.length > 0 ? n : void 0;
426
- }, Ne = (e) => {
167
+ }, ae = (e) => {
427
168
  let t = [];
428
169
  return e.eachChild((e) => {
429
- if (W(e.name).toLowerCase() !== "meta") return;
430
- let n = Y(e, "property"), r = Y(e, "refines"), i = Y(e, "scheme"), a = Y(e, "id"), o = Y(e, "name"), s = Y(e, "content"), c = e.val.trim(), l = c.length > 0 ? c : void 0, u = {
170
+ if (A(e.name).toLowerCase() !== "meta") return;
171
+ let n = I(e, "property"), r = I(e, "refines"), i = I(e, "scheme"), a = I(e, "id"), o = I(e, "name"), s = I(e, "content"), c = e.val.trim(), l = c.length > 0 ? c : void 0, u = {
431
172
  ...n === void 0 ? {} : { property: n },
432
173
  ...r === void 0 ? {} : { refines: r },
433
174
  ...i === void 0 ? {} : { scheme: i },
@@ -438,14 +179,14 @@ var pe = /* @__PURE__ */ new Set([
438
179
  };
439
180
  Object.keys(u).length !== 0 && t.push(u);
440
181
  }), t;
441
- }, Pe = (e, t) => e.replace(/^#/, "") === t, Fe = (e, t) => {
182
+ }, oe = (e, t) => e.replace(/^#/, "") === t, se = (e, t) => {
442
183
  let n = [];
443
184
  return e.eachChild((e) => {
444
- let r = W(e.name).toLowerCase();
185
+ let r = A(e.name).toLowerCase();
445
186
  if (r !== "creator" && r !== "contributor") return;
446
187
  let i = e.val.trim();
447
188
  if (i.length === 0) return;
448
- let a = Y(e, "id"), o = (e) => a === void 0 ? [] : t.flatMap((t) => t.refines !== void 0 && Pe(t.refines, a) && t.property === e && t.value !== void 0 ? [t.value] : []), s = Y(e, "opf:role") ?? Y(e, "role"), c = [...s === void 0 ? [] : [s], ...o("role")], l = Y(e, "opf:file-as") ?? Y(e, "file-as") ?? o("file-as")[0];
189
+ let a = I(e, "id"), o = (e) => a === void 0 ? [] : t.flatMap((t) => t.refines !== void 0 && oe(t.refines, a) && t.property === e && t.value !== void 0 ? [t.value] : []), s = I(e, "opf:role") ?? I(e, "role"), c = [...s === void 0 ? [] : [s], ...o("role")], l = I(e, "opf:file-as") ?? I(e, "file-as") ?? o("file-as")[0];
449
190
  n.push({
450
191
  name: i,
451
192
  source: r,
@@ -454,14 +195,14 @@ var pe = /* @__PURE__ */ new Set([
454
195
  ...l === void 0 ? {} : { fileAs: l }
455
196
  });
456
197
  }), n;
457
- }, X = (e, t) => {
458
- let n = K(e, "meta").find((e) => e.attr.property === t)?.val;
198
+ }, L = (e, t) => {
199
+ let n = N(e, "meta").find((e) => e.attr.property === t)?.val;
459
200
  if (!(n === void 0 || n.trim().length === 0)) return n;
460
- }, Ie = (e) => {
461
- let t = G(e, "guide");
201
+ }, ce = (e) => {
202
+ let t = M(e, "guide");
462
203
  if (t === void 0) return [];
463
204
  let n = [];
464
- for (let e of K(t, "reference")) {
205
+ for (let e of N(t, "reference")) {
465
206
  let t = e.attr.href?.trim();
466
207
  t === void 0 || t.length === 0 || n.push({
467
208
  href: t,
@@ -470,7 +211,7 @@ var pe = /* @__PURE__ */ new Set([
470
211
  });
471
212
  }
472
213
  return n;
473
- }, Le = (e) => {
214
+ }, le = (e) => {
474
215
  let t = e.attr.id, n = e.attr.href;
475
216
  if (t === void 0 || t.length === 0 || n === void 0 || n.length === 0) return;
476
217
  let r = e.attr["media-type"], i = e.attr.properties?.trim();
@@ -480,24 +221,24 @@ var pe = /* @__PURE__ */ new Set([
480
221
  ...r !== void 0 && r.length > 0 ? { mediaType: r } : {},
481
222
  ...i !== void 0 && i.length > 0 ? { properties: i } : {}
482
223
  };
483
- }, Re = (e) => {
224
+ }, ue = (e) => {
484
225
  let t = [], n = /* @__PURE__ */ new Map();
485
- for (let r of K(e, "item")) {
486
- let e = Le(r);
226
+ for (let r of N(e, "item")) {
227
+ let e = le(r);
487
228
  e !== void 0 && (t.push(e), n.set(e.id, e));
488
229
  }
489
230
  return {
490
231
  items: t,
491
232
  byId: n
492
233
  };
493
- }, ze = (e, t) => {
234
+ }, de = (e, t) => {
494
235
  let n = [];
495
- for (let r of K(t, "itemref")) {
236
+ for (let r of N(t, "itemref")) {
496
237
  let t = r.attr.idref;
497
238
  if (t === void 0 || t.trim().length === 0) continue;
498
239
  let i = e.get(t);
499
240
  if (i === void 0) continue;
500
- let a = De(r.attr.properties);
241
+ let a = ee(r.attr.properties);
501
242
  n.push({
502
243
  idref: t,
503
244
  id: i.id,
@@ -511,28 +252,28 @@ var pe = /* @__PURE__ */ new Set([
511
252
  });
512
253
  }
513
254
  return n;
514
- }, Be = (e) => {
515
- let t = new a(e), n = G(t, "manifest"), r = G(t, "spine"), i = G(t, "metadata"), o = t.attr["unique-identifier"]?.trim(), s = o !== void 0 && o.length > 0 ? o : void 0, c = [], l = [];
255
+ }, fe = (e) => {
256
+ let t = new h(e), n = M(t, "manifest"), r = M(t, "spine"), i = M(t, "metadata"), a = t.attr["unique-identifier"]?.trim(), o = a !== void 0 && a.length > 0 ? a : void 0, s = [], c = [];
516
257
  if (n !== void 0) {
517
- let { items: e, byId: t } = Re(n);
518
- c = e, r !== void 0 && (l = ze(t, r));
258
+ let { items: e, byId: t } = ue(n);
259
+ s = e, r !== void 0 && (c = de(t, r));
519
260
  }
520
- let u = r?.attr["page-progression-direction"], d = u !== void 0 && u.trim().length > 0 ? u : void 0, f = r?.attr.toc, p = f !== void 0 && f.trim().length > 0 ? f.trim() : void 0, m, h, g, _, v, y = [], b = [], x = [], S = [], C, w, T, E = [], D = [];
521
- i !== void 0 && (m = q(i, "title"), h = q(i, "publisher"), g = q(i, "description"), _ = q(i, "rights"), v = q(i, "date"), y = J(i, "creator"), x = J(i, "language"), S = J(i, "subject"), C = X(i, "rendition:layout"), w = X(i, "rendition:flow"), T = X(i, "rendition:spread"), E = Ne(i), b = Fe(i, E), D.push(...Ae(i, s)));
522
- let O = Me({
523
- manifestItems: c,
261
+ let l = r?.attr["page-progression-direction"], u = l !== void 0 && l.trim().length > 0 ? l : void 0, d = r?.attr.toc, f = d !== void 0 && d.trim().length > 0 ? d.trim() : void 0, p, m, g, _, v, y = [], b = [], x = [], S = [], C, w, T, E = [], D = [];
262
+ i !== void 0 && (p = P(i, "title"), m = P(i, "publisher"), g = P(i, "description"), _ = P(i, "rights"), v = P(i, "date"), y = F(i, "creator"), x = F(i, "language"), S = F(i, "subject"), C = L(i, "rendition:layout"), w = L(i, "rendition:flow"), T = L(i, "rendition:spread"), E = ae(i), b = se(i, E), D.push(...ne(i, o)));
263
+ let O = ie({
264
+ manifestItems: s,
524
265
  metadataEl: i
525
- }), k = Ie(t);
266
+ }), k = ce(t);
526
267
  return {
527
268
  kind: "opf",
528
- manifestItems: c,
529
- spineRows: l,
530
- spineTocIdref: p,
269
+ manifestItems: s,
270
+ spineRows: c,
271
+ spineTocIdref: f,
531
272
  identifiers: D,
532
- title: m,
273
+ title: p,
533
274
  creators: y,
534
275
  contributors: b,
535
- publisher: h,
276
+ publisher: m,
536
277
  description: g,
537
278
  rights: _,
538
279
  languages: x,
@@ -542,34 +283,68 @@ var pe = /* @__PURE__ */ new Set([
542
283
  renditionLayoutMeta: C,
543
284
  renditionFlowMeta: w,
544
285
  renditionSpreadMeta: T,
545
- pageProgressionDirection: d,
286
+ pageProgressionDirection: u,
546
287
  guide: k,
547
288
  metas: E
548
289
  };
549
290
  };
550
291
  //#endregion
551
- //#region src/opf/readArchiveOpf.ts
552
- async function Z(e) {
553
- let { data: t, basePath: n } = H(e) || {};
292
+ //#region src/metadata/opf/readArchiveOpf.ts
293
+ async function R(e) {
294
+ let { data: t, basePath: n } = O(e) || {};
554
295
  if (!(!t || t.dir)) return {
555
- opf: Be(await x(t)),
296
+ opf: fe(await D(t)),
556
297
  basePath: n
557
298
  };
558
299
  }
559
300
  //#endregion
560
- //#region src/kobo/parse.ts
561
- var Ve = "com.kobobooks.display-options.xml", He = (e) => {
301
+ //#region src/metadata/apple/parse.ts
302
+ var z = "com.apple.ibooks.display-options.xml", pe = (e) => e.childrenNamed("option").map((e) => ({
303
+ name: e.attr?.name,
304
+ value: e.val
305
+ })), me = (e) => {
306
+ let t = new h(e);
307
+ if (t.name?.toLowerCase() !== "display_options") return { kind: "apple" };
308
+ let n = t.childNamed("platform");
309
+ return {
310
+ kind: "apple",
311
+ displayOptions: { ...n === void 0 ? {} : { platform: { options: pe(n) } } }
312
+ };
313
+ }, B = "ComicInfo.xml", he = /* @__PURE__ */ "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 = /* @__PURE__ */ new Set(["Pages", "ComicInfo"]), _e = (e) => e.children.some((e) => e.type === "element"), ve = (e) => {
314
+ let t = e.val.trim();
315
+ return t.length > 0 ? t : void 0;
316
+ }, ye = (e) => {
317
+ let t;
318
+ try {
319
+ t = new h(e);
320
+ } catch (e) {
321
+ let t = e instanceof Error ? e.message : String(e);
322
+ throw Error(`${B} is malformed: ${t}`, { cause: e });
323
+ }
324
+ let n = {};
325
+ return t.eachChild((e) => {
326
+ if (e.type !== "element" || ge.has(e.name) || _e(e)) return;
327
+ let t = ve(e);
328
+ t !== void 0 && n[e.name] === void 0 && (n[e.name] = t);
329
+ }), {
330
+ kind: "comicInfo",
331
+ ...n
332
+ };
333
+ }, V = "com.kobobooks.display-options.xml", be = (e) => {
562
334
  let t = e.childNamed("platform");
563
335
  if (!t) return {};
564
336
  for (let e of t.childrenNamed("option")) if (e.attr?.name === "fixed-layout") return e.val.trim().toLowerCase() === "true" ? { renditionLayout: "pre-paginated" } : {};
565
337
  return {};
566
- }, Ue = (e) => {
567
- let t = new a(e);
338
+ }, xe = (e) => {
339
+ let t = new h(e);
568
340
  return t.name?.toLowerCase() === "display_options" ? {
569
341
  kind: "kobo",
570
- ...He(t)
342
+ ...be(t)
571
343
  } : { kind: "kobo" };
572
- }, We = (e) => {
344
+ }, H = (e) => {
345
+ let t = Object.entries(e).filter(([, e]) => e !== void 0);
346
+ return Object.fromEntries(t);
347
+ }, Se = (e) => {
573
348
  let t = [];
574
349
  for (let n of e.split("/")) if (n !== ".") {
575
350
  if (n === "..") {
@@ -579,19 +354,19 @@ var Ve = "com.kobobooks.display-options.xml", He = (e) => {
579
354
  t.push(n);
580
355
  }
581
356
  return t.join("/");
582
- }, Ge = (e, t) => /^https?:\/\//.test(e) ? e : We(t ? `${t}/${e}` : e), Ke = (e) => {
357
+ }, Ce = (e, t) => /^https?:\/\//.test(e) ? e : Se(t ? `${t}/${e}` : e), we = (e) => {
583
358
  let t = e?.trim().toLowerCase();
584
359
  return t === "reflowable" || t === "pre-paginated" ? t : void 0;
585
- }, qe = (e, { opf: t, basePath: n }) => {
586
- let r = Ke(t.renditionLayoutMeta), i = t.spineRows.map((t) => {
587
- let r = Ge(t.href, n);
360
+ }, Te = (e, { opf: t, basePath: n }) => {
361
+ let r = we(t.renditionLayoutMeta), i = t.spineRows.map((t) => {
362
+ let r = Ce(t.href, n);
588
363
  return {
589
364
  row: t,
590
365
  uri: r,
591
- record: w(e, r)
366
+ record: C(e, r)
592
367
  };
593
368
  }), a = i.reduce((e, { record: t }) => e + (t?.size ?? 0), 0);
594
- return i.map(({ row: e, uri: n, record: i }) => D({
369
+ return i.map(({ row: e, uri: n, record: i }) => H({
595
370
  uri: n,
596
371
  id: e.id,
597
372
  mediaType: e.mediaType ?? i?.encodingFormat,
@@ -602,57 +377,294 @@ var Ve = "com.kobobooks.display-options.xml", He = (e) => {
602
377
  pageSpreadRight: e.pageSpreadRight,
603
378
  progressionWeight: a > 0 ? (i?.size ?? 0) / a : 1 / t.spineRows.length
604
379
  }));
605
- }, Je = j.toLowerCase(), Ye = v.toLowerCase(), Xe = (e) => {
380
+ }, Ee = B.toLowerCase(), De = z.toLowerCase(), Oe = (e) => {
606
381
  let t = e.basename.toLowerCase();
607
- return t === Je || t === Ye || e.uri.endsWith("com.kobobooks.display-options.xml") || t.endsWith(".db");
608
- }, Ze = (e) => {
609
- let t = e.records.filter(S).filter((e) => !Xe(e));
382
+ return t === Ee || t === De || e.uri.endsWith("com.kobobooks.display-options.xml") || t.endsWith(".db");
383
+ }, ke = (e) => {
384
+ let t = e.records.filter(x).filter((e) => !Oe(e));
610
385
  return t.map((e) => {
611
- let n = h(e.encodingFormat ?? "") || l(e.basename);
612
- return D({
386
+ let n = f(e.encodingFormat ?? "") || o(e.basename);
387
+ return H({
613
388
  uri: e.uri,
614
389
  mediaType: n,
615
390
  size: e.size,
616
- renditionLayout: n !== void 0 && p(n) ? "pre-paginated" : void 0,
391
+ renditionLayout: n !== void 0 && u(n) ? "pre-paginated" : void 0,
617
392
  progressionWeight: 1 / t.length
618
393
  });
619
394
  });
620
- }, Q = async (e, { opf: t } = {}) => {
621
- let n = t ?? await Z(e).catch(() => void 0);
622
- return n ? qe(e, n) : Ze(e);
623
- }, Qe = (e, t) => {
624
- let n = w(e, t);
625
- if (n !== void 0) return h(n.encodingFormat ?? "") || l(n.basename);
626
- }, $e = async (e, { opf: t, readingOrder: n } = {}) => {
627
- let r = t ?? await Z(e).catch(() => void 0);
395
+ }, U = async (e, { opf: t } = {}) => {
396
+ let n = t ?? await R(e).catch(() => void 0);
397
+ return n ? Te(e, n) : ke(e);
398
+ }, Ae = (e, t) => {
399
+ let n = C(e, t);
400
+ if (n !== void 0) return f(n.encodingFormat ?? "") || o(n.basename);
401
+ }, je = async (e, { opf: t, readingOrder: n } = {}) => {
402
+ let r = t ?? await R(e).catch(() => void 0);
628
403
  if (r !== void 0 && r.opf.coverHref !== void 0) {
629
- let t = Ge(r.opf.coverHref, r.basePath);
630
- return D({
404
+ let t = Ce(r.opf.coverHref, r.basePath);
405
+ return H({
631
406
  uri: t,
632
- mediaType: Qe(e, t),
407
+ mediaType: Ae(e, t),
633
408
  confidence: "derived"
634
409
  });
635
410
  }
636
- let i = (n ?? await Q(e, { opf: r })).find((e) => e.mediaType?.startsWith("image/") === !0);
637
- if (i !== void 0) return D({
411
+ let i = (n ?? await U(e, { opf: r })).find((e) => e.mediaType?.startsWith("image/") === !0);
412
+ if (i !== void 0) return H({
638
413
  uri: i.uri,
639
414
  mediaType: i.mediaType,
640
415
  confidence: "assumed"
641
416
  });
417
+ }, Me = (e) => {
418
+ let t = e.descendantWithPath("head")?.childrenNamed("meta").find((e) => e.attr.name === "viewport");
419
+ return !!(t && t.attr.name === "viewport");
420
+ }, W = async (e, n) => {
421
+ if (n.length === 0) return !1;
422
+ for (let r of n) {
423
+ if (!d({
424
+ mimeType: r.mediaType,
425
+ uri: r.uri
426
+ })) return !1;
427
+ let n = C(e, r.uri);
428
+ if (!n || !x(n)) return !1;
429
+ try {
430
+ if (!Me(new h(await D(n)))) return !1;
431
+ } catch (e) {
432
+ return t.error(`layout scan: unable to inspect ${r.uri}`, e), !1;
433
+ }
434
+ }
435
+ return !0;
436
+ }, Ne = z.toLowerCase();
437
+ async function G(e) {
438
+ let t = e.records.find((e) => x(e) && e.basename.toLowerCase() === Ne);
439
+ if (t) return me(await D(t));
440
+ }
441
+ //#endregion
442
+ //#region src/metadata/apple/resolve.ts
443
+ var Pe = { displayOptions: "apple.options" }, K = (e) => {
444
+ 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 = H({
445
+ fixedLayout: r,
446
+ options: t !== void 0 && t.length > 0 ? t.map(({ name: e, value: t }) => H({
447
+ name: e,
448
+ value: t
449
+ })) : void 0
450
+ });
451
+ return H({
452
+ renditionLayout: r === !0 ? "pre-paginated" : void 0,
453
+ apple: Object.keys(i).length > 0 ? i : void 0
454
+ });
455
+ }, Fe = B.toLowerCase(), q = (e) => e.records.find((e) => x(e) && e.basename.toLowerCase() === Fe), Ie = [
456
+ "Unknown",
457
+ "No",
458
+ "Yes",
459
+ "YesAndRightToLeft"
460
+ ], Le = (e) => {
461
+ for (let t of Ie) if (t === e) return !0;
462
+ return !1;
642
463
  };
643
464
  //#endregion
644
- //#region src/kobo/readArchiveKobo.ts
645
- async function et(e) {
646
- let n = e.records.filter((e) => S(e) && e.uri.endsWith("com.kobobooks.display-options.xml"));
465
+ //#region src/metadata/comicInfo/readArchiveComicInfo.ts
466
+ async function Re(e) {
467
+ let t = q(e);
468
+ if (t) return ye(await D(t));
469
+ }
470
+ //#endregion
471
+ //#region src/metadata/comicInfo/resolve.ts
472
+ var ze = {
473
+ AgeRating: "comic.ageRating",
474
+ AlternateCount: "comic.alternateSeries",
475
+ AlternateNumber: "comic.alternateSeries",
476
+ AlternateSeries: "comic.alternateSeries",
477
+ BlackAndWhite: "comic.blackAndWhite",
478
+ Characters: "comic.characters",
479
+ Colorist: "contributors",
480
+ CommunityRating: "comic.communityRating",
481
+ Count: "belongsTo.series",
482
+ CoverArtist: "contributors",
483
+ Day: "publication.edition.date",
484
+ Editor: "contributors",
485
+ Format: "comic.format",
486
+ Genre: "subjects",
487
+ GTIN: "identifiers",
488
+ Imprint: "publication.edition.imprint",
489
+ Inker: "contributors",
490
+ LanguageISO: "languages",
491
+ Letterer: "contributors",
492
+ Locations: "comic.locations",
493
+ MainCharacterOrTeam: "comic.mainCharacterOrTeam",
494
+ Manga: "readingDirection",
495
+ Month: "publication.edition.date",
496
+ Notes: "comic.notes",
497
+ Number: "belongsTo.series",
498
+ PageCount: "numberOfPages",
499
+ Penciller: "contributors",
500
+ Publisher: "publication.edition.publisher",
501
+ Review: "comic.review",
502
+ ScanInformation: "comic.scanInformation",
503
+ Series: "belongsTo.series",
504
+ SeriesGroup: "belongsTo.collection",
505
+ StoryArc: "comic.storyArcs",
506
+ StoryArcNumber: "comic.storyArcs",
507
+ Summary: "description",
508
+ Tags: "subjects",
509
+ Teams: "comic.teams",
510
+ Title: "title",
511
+ Translator: "contributors",
512
+ Volume: "comic.volume",
513
+ Web: "comic.web",
514
+ Writer: "contributors",
515
+ Year: "publication.edition.date"
516
+ }, Be = (e) => {
517
+ switch (e.Manga) {
518
+ case "YesAndRightToLeft": return "rtl";
519
+ case "Yes":
520
+ case "No": return "ltr";
521
+ default: return;
522
+ }
523
+ }, J = (e) => {
524
+ if (e === void 0) return;
525
+ let t = e.trim();
526
+ return t.length > 0 ? t : void 0;
527
+ }, Y = (e) => e === void 0 ? [] : e.split(",").map((e) => e.trim()).filter((e) => e.length > 0), X = (e) => {
528
+ let t = J(e);
529
+ if (t === void 0 || !/^\d+$/.test(t)) return;
530
+ let n = Number.parseInt(t, 10);
531
+ return Number.isFinite(n) ? n : void 0;
532
+ }, Z = (e) => {
533
+ let t = J(e);
534
+ if (t === void 0 || !/^\d+(\.\d+)?$/.test(t)) return;
535
+ let n = Number.parseFloat(t);
536
+ return Number.isFinite(n) ? n : void 0;
537
+ }, Ve = (e) => {
538
+ let t = J(e)?.toLowerCase();
539
+ if (t === "yes") return !0;
540
+ if (t === "no") return !1;
541
+ }, He = (e) => {
542
+ switch (e.Manga) {
543
+ case "Yes":
544
+ case "YesAndRightToLeft": return !0;
545
+ case "No": return !1;
546
+ default: return;
547
+ }
548
+ }, Ue = (e) => {
549
+ let t = X(e.Year), n = X(e.Month), r = X(e.Day);
550
+ if (!(t === void 0 && n === void 0 && r === void 0)) return {
551
+ ...t === void 0 ? {} : { year: t },
552
+ ...n === void 0 ? {} : { month: n },
553
+ ...r === void 0 ? {} : { day: r }
554
+ };
555
+ }, We = [
556
+ ["Writer", "author"],
557
+ ["Penciller", "penciler"],
558
+ ["Inker", "inker"],
559
+ ["Colorist", "colorist"],
560
+ ["Letterer", "letterer"],
561
+ ["CoverArtist", "coverArtist"],
562
+ ["Editor", "editor"],
563
+ ["Translator", "translator"]
564
+ ], Ge = (e) => {
565
+ let t = /* @__PURE__ */ new Map();
566
+ for (let [n, r] of We) for (let i of Y(e[n])) {
567
+ let e = t.get(i);
568
+ e ? e.roles.includes(r) || e.roles.push(r) : t.set(i, {
569
+ name: i,
570
+ roles: [r]
571
+ });
572
+ }
573
+ return [...t.values()];
574
+ }, Ke = (e) => {
575
+ let t = J(e.Series);
576
+ if (t !== void 0) return H({
577
+ name: t,
578
+ position: Z(e.Number),
579
+ total: X(e.Count)
580
+ });
581
+ }, qe = (e) => {
582
+ let t = J(e.AlternateSeries);
583
+ if (t !== void 0) return H({
584
+ name: t,
585
+ position: Z(e.AlternateNumber),
586
+ total: X(e.AlternateCount)
587
+ });
588
+ }, Je = (e) => {
589
+ let t = Y(e.StoryArc);
590
+ if (t.length === 0) return [];
591
+ let n = Y(e.StoryArcNumber);
592
+ return t.map((e, t) => H({
593
+ name: e,
594
+ position: Z(n[t])
595
+ }));
596
+ }, Q = (e) => e.length > 0 ? e : void 0, Ye = (e) => (e.Web ?? "").split(/\s+/).filter((e) => e.length > 0), Xe = (e) => {
597
+ try {
598
+ let t = new URL(e);
599
+ return (t.protocol === "http:" || t.protocol === "https:") && t.hostname.length > 0;
600
+ } catch {
601
+ return !1;
602
+ }
603
+ }, Ze = (e) => e.filter((e, t, n) => Xe(e) && n.indexOf(e) === t).map((e) => ({
604
+ value: e,
605
+ scheme: "URL"
606
+ })), Qe = (e, t) => {
607
+ let n = H({
608
+ manga: He(e),
609
+ blackAndWhite: Ve(e.BlackAndWhite),
610
+ volume: X(e.Volume),
611
+ format: J(e.Format),
612
+ ageRating: J(e.AgeRating),
613
+ communityRating: Z(e.CommunityRating),
614
+ notes: J(e.Notes),
615
+ review: J(e.Review),
616
+ web: Q(t),
617
+ scanInformation: J(e.ScanInformation),
618
+ mainCharacterOrTeam: J(e.MainCharacterOrTeam),
619
+ characters: Q(Y(e.Characters)),
620
+ teams: Q(Y(e.Teams)),
621
+ locations: Q(Y(e.Locations)),
622
+ storyArcs: Q(Je(e)),
623
+ alternateSeries: qe(e)
624
+ });
625
+ return Object.keys(n).length > 0 ? n : void 0;
626
+ }, $e = (e) => {
627
+ let t = Ke(e), n = Q(Y(e.SeriesGroup).map((e) => ({ name: e })));
628
+ if (!(t === void 0 && n === void 0)) return H({
629
+ series: t === void 0 ? void 0 : [t],
630
+ collection: n
631
+ });
632
+ }, et = (e) => {
633
+ let t = e.GTIN, n = J(t), r = Ye(e), i = [...n === void 0 ? [] : [{
634
+ value: n,
635
+ scheme: "GTIN"
636
+ }], ...Ze(r)], a = J(e.LanguageISO), o = [...Y(e.Genre), ...Y(e.Tags)], s = H({
637
+ date: Ue(e),
638
+ publisher: J(e.Publisher),
639
+ imprint: J(e.Imprint)
640
+ });
641
+ return H({
642
+ title: J(e.Title),
643
+ description: J(e.Summary),
644
+ publication: s.date !== void 0 || s.publisher !== void 0 || s.imprint !== void 0 ? { edition: s } : void 0,
645
+ languages: a === void 0 ? void 0 : [a],
646
+ subjects: Q(o),
647
+ contributors: Q(Ge(e)),
648
+ readingDirection: Be(e),
649
+ numberOfPages: X(e.PageCount),
650
+ identifiers: Q(i),
651
+ belongsTo: $e(e),
652
+ comic: Qe(e, r)
653
+ });
654
+ };
655
+ //#endregion
656
+ //#region src/metadata/kobo/readArchiveKobo.ts
657
+ async function tt(e) {
658
+ let n = e.records.filter((e) => x(e) && e.uri.endsWith("com.kobobooks.display-options.xml"));
647
659
  if (n.length === 0) return;
648
660
  let r;
649
661
  for (let e of n) {
650
- let n = await x(e);
662
+ let n = await D(e);
651
663
  try {
652
- let { renditionLayout: e } = Ue(n);
664
+ let { renditionLayout: e } = xe(n);
653
665
  e && (r = e);
654
666
  } catch (n) {
655
- t.error(`Unable to parse ${Ve} (${e.uri})`, n);
667
+ t.error(`Unable to parse ${V} (${e.uri})`, n);
656
668
  }
657
669
  }
658
670
  return {
@@ -661,34 +673,30 @@ async function et(e) {
661
673
  };
662
674
  }
663
675
  //#endregion
664
- //#region src/kobo/resolve.ts
665
- var tt = { renditionLayout: "renditionLayout" }, nt = (e) => D({
676
+ //#region src/metadata/kobo/resolve.ts
677
+ var nt = { renditionLayout: "renditionLayout" }, rt = (e) => H({
666
678
  renditionLayout: e.renditionLayout,
667
679
  kobo: e.renditionLayout === void 0 ? void 0 : { fixedLayout: e.renditionLayout === "pre-paginated" }
668
- }), rt = (e) => {
669
- let t = e.descendantWithPath("head")?.childrenNamed("meta").find((e) => e.attr.name === "viewport");
670
- return !!(t && t.attr.name === "viewport");
671
- }, it = async (e, n) => {
672
- if (n.length === 0) return !1;
673
- for (let r of n) {
674
- if (!m({
675
- mimeType: r.mediaType,
676
- uri: r.uri
677
- })) return !1;
678
- let n = w(e, r.uri);
679
- if (!n || !S(n)) return !1;
680
- try {
681
- if (!rt(new a(await x(n)))) return !1;
682
- } catch (e) {
683
- return t.error(`layout scan: unable to inspect ${r.uri}`, e), !1;
684
- }
685
- }
686
- return !0;
687
- }, at = async ({ archive: e, archiveOpf: t }) => {
680
+ }), it = async ({ archive: e, archiveOpf: t }) => {
688
681
  if (!t) return [];
689
682
  let { opf: n, basePath: r } = t, { spineRows: i } = n;
690
683
  return e.records.filter((e) => i.find((t) => r ? `${r}/${t.href}` === e.uri : `${t.href}` === e.uri));
691
- }, ot = (e) => e.toLowerCase().endsWith(".opf"), st = (e) => e.records.some((e) => !e.dir && (ot(e.basename) || ot(e.uri))), ct = (e) => {
684
+ }, at = (e) => e.toLowerCase().endsWith(".opf"), ot = (e) => e.records.some((e) => !e.dir && (at(e.basename) || at(e.uri))), st = /* @__PURE__ */ new Set([
685
+ 8,
686
+ 12,
687
+ 13,
688
+ 14
689
+ ]), ct = (e) => {
690
+ if (e == null) return;
691
+ let t = String(e).replace(/\D/g, "");
692
+ if (!(t.length === 0 || !st.has(t.length))) return t;
693
+ }, lt = /(?:97[89])?\d{9}[\dXx]/, ut = (e) => {
694
+ if (e == null) return;
695
+ let t = String(e).trim().replace(/^urn:isbn:/i, "").replace(/^isbn[:\s-]*/i, ""), n = t.replace(/[^0-9Xx]/g, "");
696
+ if (n.length === 10 || n.length === 13) return n.toUpperCase();
697
+ let r = t.match(lt);
698
+ if (r) return r[0].toUpperCase();
699
+ }, dt = (e) => {
692
700
  if (e === void 0) return;
693
701
  let t = e.trim().match(/^(\d{4})(?:-(\d{2})(?:-(\d{2}))?)?/);
694
702
  if (t === null) return;
@@ -698,7 +706,7 @@ var tt = { renditionLayout: "renditionLayout" }, nt = (e) => D({
698
706
  ...r === void 0 ? {} : { month: Number.parseInt(r, 10) },
699
707
  ...i === void 0 ? {} : { day: Number.parseInt(i, 10) }
700
708
  };
701
- }, lt = {
709
+ }, ft = {
702
710
  manifestItems: "readingOrder",
703
711
  spineRows: "readingOrder",
704
712
  spineTocIdref: "toc",
@@ -719,18 +727,27 @@ var tt = { renditionLayout: "renditionLayout" }, nt = (e) => D({
719
727
  pageProgressionDirection: "readingDirection",
720
728
  guide: "guide",
721
729
  metas: "properties"
722
- }, ut = (e) => {
723
- for (let t of e) if (t.scheme !== void 0 && t.scheme.trim().toLowerCase() === "isbn" && F(t.value) !== void 0) return t.value;
724
- for (let t of e) if (F(t.value) !== void 0) return t.value;
725
- }, dt = (e) => {
730
+ }, pt = (e) => {
726
731
  let t = e.trim();
727
732
  if (/^https?:\/\//i.test(t)) try {
728
733
  let e = new URL(t);
729
- return (e.protocol === "http:" || e.protocol === "https:") && e.hostname.length > 0 ? "URL" : void 0;
730
- } catch {
731
- return;
734
+ if ((e.protocol === "http:" || e.protocol === "https:") && e.hostname.length > 0) return "URL";
735
+ } catch {}
736
+ let n = ut(t);
737
+ return n !== void 0 && (n.length === 10 || /^97[89]/.test(n)) ? "ISBN" : ct(t) === void 0 ? "Unknown" : "GTIN";
738
+ }, mt = (e) => {
739
+ switch (e.trim().toLowerCase()) {
740
+ case "isbn": return "ISBN";
741
+ case "gtin": return "GTIN";
742
+ case "doi": return "DOI";
743
+ case "googlebooks": return "GoogleBooks";
744
+ case "openlibrary": return "OpenLibrary";
745
+ case "projectgutenberg": return "ProjectGutenberg";
746
+ case "url": return "URL";
747
+ case "unknown": return "Unknown";
748
+ default: return e.trim();
732
749
  }
733
- }, ft = {
750
+ }, ht = {
734
751
  art: "artist",
735
752
  aut: "author",
736
753
  clr: "colorist",
@@ -739,14 +756,14 @@ var tt = { renditionLayout: "renditionLayout" }, nt = (e) => D({
739
756
  ill: "illustrator",
740
757
  nrt: "narrator",
741
758
  trl: "translator"
742
- }, pt = (e) => e.contributors.map((e) => {
743
- let t = e.roles.map((e) => ft[e.trim().toLowerCase()] ?? e);
744
- return D({
759
+ }, gt = (e) => e.contributors.map((e) => {
760
+ let t = e.roles.map((e) => ht[e.trim().toLowerCase()] ?? e);
761
+ return H({
745
762
  name: e.name,
746
763
  roles: t.length > 0 ? t : [e.source === "creator" ? "author" : "contributor"],
747
764
  sortAs: e.fileAs
748
765
  });
749
- }), mt = (e, t) => e.refines !== void 0 && e.refines.replace(/^#/, "") === t, ht = {
766
+ }), _t = (e, t) => e.refines !== void 0 && e.refines.replace(/^#/, "") === t, vt = {
750
767
  "02": "ISBN",
751
768
  "03": "GTIN",
752
769
  "04": "UPC",
@@ -762,81 +779,79 @@ var tt = { renditionLayout: "renditionLayout" }, nt = (e) => D({
762
779
  26: "DOI",
763
780
  34: "GTIN",
764
781
  35: "ARK"
765
- }, gt = (e) => {
782
+ }, yt = (e) => {
766
783
  let t = e?.value?.trim();
767
- if (!(t === void 0 || t.length === 0)) return e?.scheme?.trim().toLowerCase() === "onix:codelist5" ? ht[t] ?? t : t;
768
- }, _t = (e, t) => {
784
+ if (!(t === void 0 || t.length === 0)) return e?.scheme?.trim().toLowerCase() === "onix:codelist5" ? vt[t] ?? t : t;
785
+ }, bt = (e, t) => {
769
786
  let n = e.id;
770
- if (n !== void 0) return gt(t.find((e) => e.property === "identifier-type" && mt(e, n) && e.value !== void 0));
771
- }, vt = (e) => {
787
+ if (n !== void 0) return yt(t.find((e) => e.property === "identifier-type" && _t(e, n) && e.value !== void 0));
788
+ }, xt = (e) => {
772
789
  let t = e?.trim();
773
790
  if (t === void 0 || !/^\d+(\.\d+)?$/.test(t)) return;
774
791
  let n = Number.parseFloat(t);
775
792
  return Number.isFinite(n) ? n : void 0;
776
- }, yt = (e) => {
793
+ }, St = (e) => {
777
794
  let t = [], n = [];
778
795
  for (let r of e) {
779
796
  if (r.property !== "belongs-to-collection" || r.value === void 0) continue;
780
- let i = r.id, a = (t) => i === void 0 ? void 0 : e.find((e) => mt(e, i) && e.property === t && e.value !== void 0)?.value, o = a("collection-type")?.trim().toLowerCase(), s = D({
797
+ let i = r.id, a = (t) => i === void 0 ? void 0 : e.find((e) => _t(e, i) && e.property === t && e.value !== void 0)?.value, o = a("collection-type")?.trim().toLowerCase(), s = H({
781
798
  name: r.value,
782
- position: vt(a("group-position"))
799
+ position: xt(a("group-position"))
783
800
  });
784
801
  o === "series" ? t.push(s) : n.push(s);
785
802
  }
786
803
  if (t.length === 0) {
787
804
  let n = e.find((e) => e.name?.toLowerCase() === "calibre:series" && e.content !== void 0)?.content;
788
- n !== void 0 && t.push(D({
805
+ n !== void 0 && t.push(H({
789
806
  name: n,
790
- position: vt(e.find((e) => e.name?.toLowerCase() === "calibre:series_index")?.content)
807
+ position: xt(e.find((e) => e.name?.toLowerCase() === "calibre:series_index")?.content)
791
808
  }));
792
809
  }
793
810
  return {
794
811
  series: t,
795
812
  collection: n
796
813
  };
797
- }, bt = (e) => {
814
+ }, Ct = (e) => {
798
815
  let t = e?.trim();
799
816
  if (t === "scrolled-continuous" || t === "scrolled-doc" || t === "paginated" || t === "auto") return t;
800
- }, xt = (e) => {
817
+ }, wt = (e) => {
801
818
  let t = e?.trim();
802
819
  if (t === "none" || t === "landscape" || t === "portrait" || t === "both" || t === "auto") return t;
803
- }, St = (e) => {
804
- let t = e.pageProgressionDirection?.trim().toLowerCase(), n = t === "ltr" || t === "rtl" ? t : void 0, r = e.renditionLayoutMeta?.trim().toLowerCase(), i = r === "reflowable" || r === "pre-paginated" ? r : void 0, a = ut(e.identifiers), o = pt(e), { series: s, collection: c } = yt(e.metas), l = s.length > 0 || c.length > 0 ? D({
805
- series: s.length > 0 ? s : void 0,
806
- collection: c.length > 0 ? c : void 0
807
- }) : void 0, u = D({
808
- date: ct(e.date),
820
+ }, Tt = (e) => {
821
+ let t = e.pageProgressionDirection?.trim().toLowerCase(), n = t === "ltr" || t === "rtl" ? t : void 0, r = e.renditionLayoutMeta?.trim().toLowerCase(), i = r === "reflowable" || r === "pre-paginated" ? r : void 0, a = gt(e), { series: o, collection: s } = St(e.metas), c = o.length > 0 || s.length > 0 ? H({
822
+ series: o.length > 0 ? o : void 0,
823
+ collection: s.length > 0 ? s : void 0
824
+ }) : void 0, l = H({
825
+ date: dt(e.date),
809
826
  publisher: e.publisher
810
827
  });
811
- return D({
828
+ return H({
812
829
  title: e.title,
813
830
  description: e.description,
814
- publication: u.date !== void 0 || u.publisher !== void 0 ? { edition: u } : void 0,
831
+ publication: l.date !== void 0 || l.publisher !== void 0 ? { edition: l } : void 0,
815
832
  rights: e.rights,
816
833
  languages: e.languages.length > 0 ? [...e.languages] : void 0,
817
834
  subjects: e.subjects.length > 0 ? [...e.subjects] : void 0,
818
- contributors: o.length > 0 ? o : void 0,
835
+ contributors: a.length > 0 ? a : void 0,
819
836
  readingDirection: n,
820
837
  renditionLayout: i,
821
- renditionFlow: bt(e.renditionFlowMeta),
822
- renditionSpread: xt(e.renditionSpreadMeta),
823
- gtin: P(a),
824
- isbn: F(a),
825
- identifiers: e.identifiers.length > 0 ? e.identifiers.map((t) => D({
838
+ renditionFlow: Ct(e.renditionFlowMeta),
839
+ renditionSpread: wt(e.renditionSpreadMeta),
840
+ identifiers: e.identifiers.length > 0 ? e.identifiers.map((t) => H({
826
841
  value: t.value,
827
- scheme: t.scheme ?? _t(t, e.metas) ?? dt(t.value),
842
+ scheme: mt(t.scheme ?? bt(t, e.metas) ?? pt(t.value)),
828
843
  unique: t.unique
829
844
  })) : void 0,
830
- belongsTo: l,
845
+ belongsTo: c,
831
846
  properties: e.metas.length > 0 ? [...e.metas] : void 0
832
847
  });
833
- }, Ct = (e) => e.kind === "comicInfo" ? V(e) : e.kind === "kobo" ? nt(e) : e.kind === "apple" ? k(e) : St(e), wt = (e) => {
834
- let t = e.opf === void 0 ? void 0 : St(e.opf), n = e.comicInfo === void 0 ? void 0 : V(e.comicInfo), r = e.apple === void 0 ? void 0 : k(e.apple), i = e.kobo === void 0 ? void 0 : nt(e.kobo), a = [...t?.identifiers ?? [], ...n?.identifiers ?? []], o = D({
848
+ }, Et = (e) => e.kind === "comicInfo" ? et(e) : e.kind === "kobo" ? rt(e) : e.kind === "apple" ? K(e) : Tt(e), Dt = (e) => {
849
+ let t = e.opf === void 0 ? void 0 : Tt(e.opf), n = e.comicInfo === void 0 ? void 0 : et(e.comicInfo), r = e.apple === void 0 ? void 0 : K(e.apple), i = e.kobo === void 0 ? void 0 : rt(e.kobo), a = [...t?.identifiers ?? [], ...n?.identifiers ?? []], o = H({
835
850
  date: t?.publication?.edition?.date ?? n?.publication?.edition?.date,
836
851
  publisher: t?.publication?.edition?.publisher ?? n?.publication?.edition?.publisher,
837
852
  imprint: t?.publication?.edition?.imprint ?? n?.publication?.edition?.imprint
838
853
  });
839
- return D({
854
+ return H({
840
855
  title: t?.title ?? n?.title,
841
856
  description: t?.description ?? n?.description,
842
857
  publication: o.date !== void 0 || o.publisher !== void 0 || o.imprint !== void 0 ? { edition: o } : void 0,
@@ -849,8 +864,6 @@ var tt = { renditionLayout: "renditionLayout" }, nt = (e) => D({
849
864
  renditionFlow: t?.renditionFlow,
850
865
  renditionSpread: t?.renditionSpread,
851
866
  numberOfPages: n?.numberOfPages,
852
- gtin: t?.gtin ?? n?.gtin,
853
- isbn: t?.isbn ?? n?.isbn,
854
867
  identifiers: a.length > 0 ? a : void 0,
855
868
  belongsTo: t?.belongsTo ?? n?.belongsTo,
856
869
  properties: t?.properties,
@@ -858,8 +871,8 @@ var tt = { renditionLayout: "renditionLayout" }, nt = (e) => D({
858
871
  apple: r?.apple,
859
872
  kobo: i?.kobo
860
873
  });
861
- }, Tt = (e) => {
862
- let t = [...e.records].sort((e, t) => g(e.uri, t.uri)), n = (e, t, r, i, a) => {
874
+ }, Ot = (e) => {
875
+ let t = [...e.records].sort((e, t) => p(e.uri, t.uri)), n = (e, t, r, i, a) => {
863
876
  let o = e.find((e) => e.title === t), [s, ...c] = r;
864
877
  return o ? s ? [...e.filter((e) => e !== o), {
865
878
  ...o,
@@ -887,71 +900,71 @@ var tt = { renditionLayout: "renditionLayout" }, nt = (e) => D({
887
900
  let a = encodeURI(t.uri).replace(/#/g, "%23").replace(/\?/g, "%3F").replace(/\/$/, ""), o = t.uri.replace(/\/$/, "");
888
901
  return n(e, r, i, a, o);
889
902
  }, []);
890
- }, Et = (e) => e ? e.children.map((e) => e instanceof s ? e.text : e instanceof o ? Et(e) : "").join("").trim() : "", Dt = (e) => U(e.properties).includes("nav"), Ot = (e, { basePath: t }) => {
903
+ }, kt = (e) => e ? e.children.map((e) => e instanceof _ ? e.text : e instanceof g ? kt(e) : "").join("").trim() : "", At = (e) => k(e.properties).includes("nav"), jt = (e, { basePath: t }) => {
891
904
  let n = {
892
905
  contents: [],
893
906
  path: "",
894
907
  containerHref: "",
895
908
  title: ""
896
909
  }, r = e.childNamed("span") || e.childNamed("a");
897
- n.title = (r?.attr.title || r?.val.trim() || Et(r)) ?? "";
910
+ n.title = (r?.attr.title || r?.val.trim() || kt(r)) ?? "";
898
911
  let i = r?.name;
899
- i !== "a" && (r = e.descendantWithPath(`${i}.a`), r && (i = r.name.toLowerCase())), i === "a" && r?.attr.href && (n.path = _(t, r.attr.href), n.containerHref = n.path);
912
+ i !== "a" && (r = e.descendantWithPath(`${i}.a`), r && (i = r.name.toLowerCase())), i === "a" && r?.attr.href && (n.path = m(t, r.attr.href), n.containerHref = n.path);
900
913
  let a = e.childNamed("ol");
901
914
  if (a) {
902
915
  let e = a.childrenNamed("li");
903
- e && e.length > 0 && (n.contents = e.map((e) => Ot(e, { basePath: t })));
916
+ e && e.length > 0 && (n.contents = e.map((e) => jt(e, { basePath: t })));
904
917
  }
905
918
  return n;
906
- }, kt = (e, { basePath: t }) => {
919
+ }, Mt = (e, { basePath: t }) => {
907
920
  let n = [], r;
908
- return e.descendantWithPath("body.nav.ol") ? r = e.descendantWithPath("body.nav.ol")?.children : e.descendantWithPath("body.section.nav.ol") && (r = e.descendantWithPath("body.section.nav.ol")?.children), r && r.length > 0 && r.filter((e) => e instanceof o && e.name === "li").forEach((e) => {
909
- n.push(Ot(e, { basePath: t }));
921
+ return e.descendantWithPath("body.nav.ol") ? r = e.descendantWithPath("body.nav.ol")?.children : e.descendantWithPath("body.section.nav.ol") && (r = e.descendantWithPath("body.section.nav.ol")?.children), r && r.length > 0 && r.filter((e) => e instanceof g && e.name === "li").forEach((e) => {
922
+ n.push(jt(e, { basePath: t }));
910
923
  }), n;
911
- }, At = async (e, t) => {
912
- let n = e.manifestItems.find(Dt);
924
+ }, Nt = async (e, t) => {
925
+ let n = e.manifestItems.find(At);
913
926
  if (n?.href) {
914
927
  let e = t.records.find((e) => e.uri.endsWith(n.href));
915
- if (e && !e.dir) return kt(new a(await x(e)), { basePath: d(e.uri) });
928
+ if (e && !e.dir) return Mt(new h(await D(e)), { basePath: c(e.uri) });
916
929
  }
917
- }, jt = (e, { basePath: t, prefix: n }) => {
918
- let r = _(t, e?.childNamed(`${n}content`)?.attr.src || ""), i = {
930
+ }, Pt = (e, { basePath: t, prefix: n }) => {
931
+ let r = m(t, e?.childNamed(`${n}content`)?.attr.src || ""), i = {
919
932
  title: e?.descendantWithPath(`${n}navLabel.${n}text`)?.val || "",
920
933
  path: r,
921
934
  containerHref: r,
922
935
  contents: []
923
936
  }, a = e.childrenNamed(`${n}navPoint`);
924
- return a && a.length > 0 && (i.contents = a.map((e) => jt(e, {
937
+ return a && a.length > 0 && (i.contents = a.map((e) => Pt(e, {
925
938
  basePath: t,
926
939
  prefix: n
927
940
  }))), i;
928
- }, Mt = (e, { basePath: t }) => {
941
+ }, Ft = (e, { basePath: t }) => {
929
942
  let n = [], r = e.name, i = "";
930
943
  return r.indexOf(":") !== -1 && (i = `${r.split(":")[0]}:`), e.childNamed(`${i}navMap`)?.childrenNamed(`${i}navPoint`).forEach((e) => {
931
- n.push(jt(e, {
944
+ n.push(Pt(e, {
932
945
  basePath: t,
933
946
  prefix: i
934
947
  }));
935
948
  }), n;
936
- }, Nt = async ({ opf: e, opfBasePath: t, archive: n }) => {
949
+ }, It = async ({ opf: e, opfBasePath: t, archive: n }) => {
937
950
  let r = e.spineTocIdref;
938
951
  if (r) {
939
952
  let i = e.manifestItems.find((e) => e.id === r);
940
953
  if (i) {
941
954
  let e = `${t}${t === "" ? "" : "/"}${i.href}`, r = n.records.find((t) => t.uri.endsWith(e));
942
- if (r && !r.dir) return Mt(new a(await x(r)), { basePath: d(r.uri) });
955
+ if (r && !r.dir) return Ft(new h(await D(r)), { basePath: c(r.uri) });
943
956
  }
944
957
  }
945
- }, Pt = async (e, { opf: t } = {}) => {
946
- let n = t ?? await Z(e);
947
- if (n) return await At(n.opf, e) || await Nt({
958
+ }, Lt = async (e, { opf: t } = {}) => {
959
+ let n = t ?? await R(e);
960
+ if (n) return await Nt(n.opf, e) || await It({
948
961
  opf: n.opf,
949
962
  opfBasePath: n.basePath,
950
963
  archive: e
951
964
  }) || [];
952
- let r = Tt(e);
965
+ let r = Ot(e);
953
966
  return r.length === 0 ? void 0 : r;
954
- }, Ft = [
967
+ }, Rt = [
955
968
  "metadata",
956
969
  "readingOrder",
957
970
  "toc"
@@ -967,39 +980,39 @@ var tt = { renditionLayout: "renditionLayout" }, nt = (e) => D({
967
980
  failed: !0
968
981
  };
969
982
  }
970
- }, It = (e) => {
983
+ }, zt = (e) => {
971
984
  let t = (e) => e?.startsWith("audio/") === !0 || e?.startsWith("video/") === !0, n = e.filter((e) => e.renditionLayout === "pre-paginated" && !t(e.mediaType)).length;
972
985
  return n > 0 ? n : void 0;
973
- }, Lt = ({ archive: e, opf: t, comicInfo: n, apple: r, kobo: i }) => {
986
+ }, Bt = ({ archive: e, opf: t, comicInfo: n, apple: r, kobo: i }) => {
974
987
  let a = [];
975
- return t !== void 0 && t.value === void 0 && (t.failed || st(e)) && a.push("opf"), n?.failed && a.push("comicInfo"), r?.failed && a.push("apple"), i?.failed && a.push("kobo"), a;
976
- }, Rt = 2, zt = async (e, t = {}) => {
977
- let n = new Set(t.include ?? Ft), 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 $(() => Z(e), "opf") : void 0, l = c?.value, u = r || i || s, d = u ? await $(() => N(e), "comicInfo") : void 0, f = d?.value, p = u ? await $(() => E(e), "apple") : void 0, m = p?.value, h = u ? await $(() => et(e), "kobo") : void 0, g = h?.value, _ = r || s ? wt({
988
+ return t !== void 0 && t.value === void 0 && (t.failed || ot(e)) && a.push("opf"), n?.failed && a.push("comicInfo"), r?.failed && a.push("apple"), i?.failed && a.push("kobo"), a;
989
+ }, Vt = 3, Ht = async (e, t = {}) => {
990
+ let n = new Set(t.include ?? Rt), 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 $(() => R(e), "opf") : void 0, l = c?.value, u = r || i || s, d = u ? await $(() => Re(e), "comicInfo") : void 0, f = d?.value, p = u ? await $(() => G(e), "apple") : void 0, m = p?.value, h = u ? await $(() => tt(e), "kobo") : void 0, g = h?.value, _ = r || s ? Dt({
978
991
  opf: l?.opf,
979
992
  comicInfo: f,
980
993
  apple: m,
981
994
  kobo: g
982
- }) : void 0, v = a || s ? await Q(e, { opf: l }) : void 0;
983
- if (s && _ !== void 0 && v !== void 0 && _.renditionLayout === "reflowable" && v.every((e) => e.renditionLayout === "reflowable") && await it(e, v) && (_ = {
995
+ }) : void 0, v = a || s ? await U(e, { opf: l }) : void 0;
996
+ if (s && _ !== void 0 && v !== void 0 && _.renditionLayout === "reflowable" && v.every((e) => e.renditionLayout === "reflowable") && await W(e, v) && (_ = {
984
997
  ..._,
985
998
  renditionLayout: "pre-paginated"
986
999
  }, v = v.map((e) => ({
987
1000
  ...e,
988
1001
  renditionLayout: "pre-paginated"
989
1002
  }))), r && _ !== void 0) {
990
- let t = v ?? await Q(e, { opf: l }), n = await $e(e, {
1003
+ let t = v ?? await U(e, { opf: l }), n = await je(e, {
991
1004
  opf: l,
992
1005
  readingOrder: t
993
- }), r = _.numberOfPages ?? It(t);
994
- _ = D({
1006
+ }), r = _.numberOfPages ?? zt(t);
1007
+ _ = H({
995
1008
  ..._,
996
1009
  cover: n,
997
1010
  numberOfPages: r
998
1011
  });
999
1012
  }
1000
- let y = o ? (await $(() => Pt(e, { opf: l }), "toc")).value : void 0, b = {
1001
- version: Rt,
1002
- unreadableSources: Lt({
1013
+ let y = o ? (await $(() => Lt(e, { opf: l }), "toc")).value : void 0, b = {
1014
+ version: Vt,
1015
+ unreadableSources: Bt({
1003
1016
  archive: e,
1004
1017
  opf: c,
1005
1018
  comicInfo: d,
@@ -1007,7 +1020,7 @@ var tt = { renditionLayout: "renditionLayout" }, nt = (e) => D({
1007
1020
  kobo: h
1008
1021
  })
1009
1022
  };
1010
- return r && _ !== void 0 && (b.metadata = _), a && v !== void 0 && (b.readingOrder = v), o && y !== void 0 && (b.toc = y), i && (b.sources = D({
1023
+ return r && _ !== void 0 && (b.metadata = _), a && v !== void 0 && (b.readingOrder = v), o && y !== void 0 && (b.toc = y), i && (b.sources = H({
1011
1024
  opf: l,
1012
1025
  comicInfo: f,
1013
1026
  apple: m,
@@ -1015,6 +1028,6 @@ var tt = { renditionLayout: "renditionLayout" }, nt = (e) => D({
1015
1028
  })), b;
1016
1029
  };
1017
1030
  //#endregion
1018
- export { v as APPLE_IBOOKS_DISPLAY_OPTIONS_FILENAME, j as COMIC_INFO_FILENAME, ae as COMIC_INFO_KNOWN_FIELDS, de as COMIC_INFO_MANGA_VALUES, Ve as KOBO_DISPLAY_OPTIONS_FILENAME, O as appleMetadataHomes, i as arrayBufferFileAccessors, r as blobFileAccessors, he as comicInfoMetadataHomes, e as createArchive, ee as createArchiveFromArrayBufferList, n as createArchiveFromEntries, te as createArchiveFromText, ne as createArchiveFromUrls, w as getArchiveFileRecordByUri, M as getArchiveHasComicInfo, ie as getArchiveImageRecords, H as getArchiveOpfInfo, at as getSpineItemFilesFromArchive, st as isArchiveEpub, fe as isComicInfoManga, C as isDirectoryRecord, S as isFileRecord, A as isImageRecord, tt as koboMetadataHomes, P as normalizeGtin, F as normalizeIsbn, lt as opfMetadataHomes, b as parseAppleDisplayOptionsXml, le as parseComicInfo, Ue as parseKoboXml, Be as parseOpf, ct as parseW3cDtfDate, E as readArchiveApple, N as readArchiveComicInfo, et as readArchiveKobo, Z as readArchiveOpf, x as readRecordAsText, it as readingOrderDocumentsAllHaveViewport, zt as resolveArchive, $e as resolveArchiveCover, Ct as resolveArchiveMetadata, Q as resolveArchiveReadingOrder, Pt as resolveArchiveToc, wt as resolveMetadata, U as tokenizeXmlSpaceSeparatedList };
1031
+ export { z as APPLE_IBOOKS_DISPLAY_OPTIONS_FILENAME, B as COMIC_INFO_FILENAME, he as COMIC_INFO_KNOWN_FIELDS, Ie as COMIC_INFO_MANGA_VALUES, V as KOBO_DISPLAY_OPTIONS_FILENAME, Pe as appleMetadataHomes, i as arrayBufferFileAccessors, r as blobFileAccessors, ze as comicInfoMetadataHomes, e as createArchive, v as createArchiveFromArrayBufferList, n as createArchiveFromEntries, y as createArchiveFromText, b as createArchiveFromUrls, C as getArchiveFileRecordByUri, q as getArchiveHasComicInfo, E as getArchiveImageRecords, O as getArchiveOpfInfo, it as getSpineItemFilesFromArchive, ot as isArchiveEpub, Le as isComicInfoManga, S as isDirectoryRecord, x as isFileRecord, T as isImageRecord, nt as koboMetadataHomes, ct as normalizeGtin, ut as normalizeIsbn, ft as opfMetadataHomes, me as parseAppleDisplayOptionsXml, ye as parseComicInfo, xe as parseKoboXml, fe as parseOpf, dt as parseW3cDtfDate, G as readArchiveApple, Re as readArchiveComicInfo, tt as readArchiveKobo, R as readArchiveOpf, D as readRecordAsText, W as readingOrderDocumentsAllHaveViewport, Ht as resolveArchive, je as resolveArchiveCover, Et as resolveArchiveMetadata, U as resolveArchiveReadingOrder, Lt as resolveArchiveToc, Dt as resolveMetadata, k as tokenizeXmlSpaceSeparatedList };
1019
1032
 
1020
1033
  //# sourceMappingURL=index.js.map