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