@prose-reader/archive-reader 1.356.0 → 1.358.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.
@@ -148,39 +148,39 @@ var v = async (e, t = {}) => n(e, (e) => e.isDir ? {
148
148
  let r = e.val.trim();
149
149
  r.length > 0 && (n = r);
150
150
  }), n;
151
- }, I = (e, t) => {
151
+ }, re = (e, t) => {
152
152
  let n = [];
153
153
  return e.eachChild((e) => {
154
154
  if (j(e.name).toLowerCase() !== t.toLowerCase()) return;
155
155
  let r = e.val.trim();
156
156
  r.length > 0 && n.push(r);
157
157
  }), n;
158
- }, re = (e) => {
158
+ }, ie = (e) => {
159
159
  let t;
160
160
  return e.eachChild((e) => {
161
161
  if (t !== void 0 || j(e.name).toLowerCase() !== "meta" || e.attr.name?.toLowerCase() !== "cover") return;
162
162
  let n = e.attr.content?.trim();
163
163
  n !== void 0 && n.length > 0 && (t = n);
164
164
  }), t;
165
- }, ie = ({ manifestItems: e, metadataEl: t }) => {
165
+ }, ae = ({ manifestItems: e, metadataEl: t }) => {
166
166
  let n = (e) => e.mediaType?.toLowerCase().includes("image/") === !0, r = e.find((e) => n(e) ? k(e.properties).includes("cover-image") : !1);
167
167
  if (r !== void 0) return r.href;
168
168
  if (t !== void 0) {
169
- let r = re(t);
169
+ let r = ie(t);
170
170
  if (r !== void 0) {
171
171
  let t = e.find((e) => e.id === r && n(e));
172
172
  if (t !== void 0) return t.href;
173
173
  }
174
174
  }
175
175
  return e.find((e) => e.id.toLowerCase().includes("cover") && n(e))?.href;
176
- }, L = (e, t) => {
176
+ }, I = (e, t) => {
177
177
  let n = e.attr[t]?.trim();
178
178
  return n !== void 0 && n.length > 0 ? n : void 0;
179
- }, ae = (e) => {
179
+ }, oe = (e) => {
180
180
  let t = [];
181
181
  return e.eachChild((e) => {
182
182
  if (j(e.name).toLowerCase() !== "meta") return;
183
- let n = L(e, "property"), r = L(e, "refines"), i = L(e, "scheme"), a = L(e, "id"), o = L(e, "name"), s = L(e, "content"), c = e.val.trim(), l = c.length > 0 ? c : void 0, u = {
183
+ 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 = {
184
184
  ...n === void 0 ? {} : { property: n },
185
185
  ...r === void 0 ? {} : { refines: r },
186
186
  ...i === void 0 ? {} : { scheme: i },
@@ -191,14 +191,14 @@ var v = async (e, t = {}) => n(e, (e) => e.isDir ? {
191
191
  };
192
192
  Object.keys(u).length !== 0 && t.push(u);
193
193
  }), t;
194
- }, oe = (e, t) => e.replace(/^#/, "") === t, se = (e, t) => {
194
+ }, se = (e, t) => e.replace(/^#/, "") === t, ce = (e, t) => {
195
195
  let n = [];
196
196
  return e.eachChild((e) => {
197
197
  let r = j(e.name).toLowerCase();
198
198
  if (r !== "creator" && r !== "contributor") return;
199
199
  let i = e.val.trim();
200
200
  if (i.length === 0) return;
201
- let a = L(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 = L(e, "opf:role") ?? L(e, "role"), c = [...s === void 0 ? [] : [s], ...o("role")], l = L(e, "opf:file-as") ?? L(e, "file-as") ?? o("file-as")[0];
201
+ let a = I(e, "id"), o = (e) => a === void 0 ? [] : t.flatMap((t) => t.refines !== void 0 && se(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];
202
202
  n.push({
203
203
  name: i,
204
204
  source: r,
@@ -207,10 +207,10 @@ var v = async (e, t = {}) => n(e, (e) => e.isDir ? {
207
207
  ...l === void 0 ? {} : { fileAs: l }
208
208
  });
209
209
  }), n;
210
- }, R = (e, t) => {
210
+ }, L = (e, t) => {
211
211
  let n = P(e, "meta").find((e) => e.attr.property === t)?.val;
212
212
  if (!(n === void 0 || n.trim().length === 0)) return n;
213
- }, ce = (e) => {
213
+ }, le = (e) => {
214
214
  let t = N(e, "guide");
215
215
  if (t === void 0) return [];
216
216
  let n = [];
@@ -223,7 +223,7 @@ var v = async (e, t = {}) => n(e, (e) => e.isDir ? {
223
223
  });
224
224
  }
225
225
  return n;
226
- }, le = (e) => {
226
+ }, ue = (e) => {
227
227
  let t = e.attr.id, n = e.attr.href;
228
228
  if (t === void 0 || t.length === 0 || n === void 0 || n.length === 0) return;
229
229
  let r = e.attr["media-type"], i = e.attr.properties?.trim();
@@ -233,17 +233,17 @@ var v = async (e, t = {}) => n(e, (e) => e.isDir ? {
233
233
  ...r !== void 0 && r.length > 0 ? { mediaType: r } : {},
234
234
  ...i !== void 0 && i.length > 0 ? { properties: i } : {}
235
235
  };
236
- }, ue = (e) => {
236
+ }, de = (e) => {
237
237
  let t = [], n = /* @__PURE__ */ new Map();
238
238
  for (let r of P(e, "item")) {
239
- let e = le(r);
239
+ let e = ue(r);
240
240
  e !== void 0 && (t.push(e), n.set(e.id, e));
241
241
  }
242
242
  return {
243
243
  items: t,
244
244
  byId: n
245
245
  };
246
- }, de = (e, t) => {
246
+ }, fe = (e, t) => {
247
247
  let n = [];
248
248
  for (let r of P(t, "itemref")) {
249
249
  let t = r.attr.idref;
@@ -264,18 +264,18 @@ var v = async (e, t = {}) => n(e, (e) => e.isDir ? {
264
264
  });
265
265
  }
266
266
  return n;
267
- }, fe = (e) => {
267
+ }, pe = (e) => {
268
268
  let t = new h(e), n = N(t, "manifest"), r = N(t, "spine"), i = N(t, "metadata"), a = t.attr["unique-identifier"]?.trim(), o = a !== void 0 && a.length > 0 ? a : void 0, s = [], c = [];
269
269
  if (n !== void 0) {
270
- let { items: e, byId: t } = ue(n);
271
- s = e, r !== void 0 && (c = de(t, r));
270
+ let { items: e, byId: t } = de(n);
271
+ s = e, r !== void 0 && (c = fe(t, r));
272
272
  }
273
273
  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 = [];
274
- i !== void 0 && (p = ne(i), m = F(i, "publisher"), g = F(i, "description"), _ = F(i, "rights"), v = F(i, "date"), y = I(i, "creator"), x = I(i, "language"), S = I(i, "subject"), C = R(i, "rendition:layout"), w = R(i, "rendition:flow"), T = R(i, "rendition:spread"), E = ae(i), b = se(i, E), D.push(...te(i, o)));
275
- let O = ie({
274
+ i !== void 0 && (p = ne(i), m = F(i, "publisher"), g = F(i, "description"), _ = F(i, "rights"), v = F(i, "date"), y = re(i, "creator"), x = re(i, "language"), S = re(i, "subject"), C = L(i, "rendition:layout"), w = L(i, "rendition:flow"), T = L(i, "rendition:spread"), E = oe(i), b = ce(i, E), D.push(...te(i, o)));
275
+ let O = ae({
276
276
  manifestItems: s,
277
277
  metadataEl: i
278
- }), k = ce(t);
278
+ }), k = le(t);
279
279
  return {
280
280
  kind: "opf",
281
281
  manifestItems: s,
@@ -302,61 +302,61 @@ var v = async (e, t = {}) => n(e, (e) => e.isDir ? {
302
302
  };
303
303
  //#endregion
304
304
  //#region src/metadata/opf/readArchiveOpf.ts
305
- async function z(e) {
305
+ async function R(e) {
306
306
  let { data: t, basePath: n } = O(e) || {};
307
307
  if (!(!t || t.dir)) return {
308
- opf: fe(await D(t)),
308
+ opf: pe(await D(t)),
309
309
  basePath: n
310
310
  };
311
311
  }
312
312
  //#endregion
313
313
  //#region src/metadata/apple/parse.ts
314
- var B = "com.apple.ibooks.display-options.xml", pe = (e) => e.childrenNamed("option").map((e) => ({
314
+ var me = "com.apple.ibooks.display-options.xml", he = (e) => e.childrenNamed("option").map((e) => ({
315
315
  name: e.attr?.name,
316
316
  value: e.val
317
- })), me = (e) => {
317
+ })), ge = (e) => {
318
318
  let t = new h(e);
319
319
  if (t.name?.toLowerCase() !== "display_options") return { kind: "apple" };
320
320
  let n = t.childNamed("platform");
321
321
  return {
322
322
  kind: "apple",
323
- displayOptions: { ...n === void 0 ? {} : { platform: { options: pe(n) } } }
323
+ displayOptions: { ...n === void 0 ? {} : { platform: { options: he(n) } } }
324
324
  };
325
- }, V = "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) => {
325
+ }, z = "ComicInfo.xml", _e = /* @__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("."), ve = /* @__PURE__ */ new Set(["Pages", "ComicInfo"]), ye = (e) => e.children.some((e) => e.type === "element"), be = (e) => {
326
326
  let t = e.val.trim();
327
327
  return t.length > 0 ? t : void 0;
328
- }, ye = (e) => {
328
+ }, xe = (e) => {
329
329
  let t;
330
330
  try {
331
331
  t = new h(e);
332
332
  } catch (e) {
333
333
  let t = e instanceof Error ? e.message : String(e);
334
- throw Error(`${V} is malformed: ${t}`, { cause: e });
334
+ throw Error(`${z} is malformed: ${t}`, { cause: e });
335
335
  }
336
336
  let n = {};
337
337
  return t.eachChild((e) => {
338
- if (e.type !== "element" || ge.has(e.name) || _e(e)) return;
339
- let t = ve(e);
338
+ if (e.type !== "element" || ve.has(e.name) || ye(e)) return;
339
+ let t = be(e);
340
340
  t !== void 0 && n[e.name] === void 0 && (n[e.name] = t);
341
341
  }), {
342
342
  kind: "comicInfo",
343
343
  ...n
344
344
  };
345
- }, be = "com.kobobooks.display-options.xml", xe = (e) => {
345
+ }, Se = "com.kobobooks.display-options.xml", Ce = (e) => {
346
346
  let t = e.childNamed("platform");
347
347
  if (!t) return {};
348
348
  for (let e of t.childrenNamed("option")) if (e.attr?.name === "fixed-layout") return e.val.trim().toLowerCase() === "true" ? { renditionLayout: "pre-paginated" } : {};
349
349
  return {};
350
- }, Se = (e) => {
350
+ }, we = (e) => {
351
351
  let t = new h(e);
352
352
  return t.name?.toLowerCase() === "display_options" ? {
353
353
  kind: "kobo",
354
- ...xe(t)
354
+ ...Ce(t)
355
355
  } : { kind: "kobo" };
356
- }, H = (e) => {
356
+ }, B = (e) => {
357
357
  let t = Object.entries(e).filter(([, e]) => e !== void 0);
358
358
  return Object.fromEntries(t);
359
- }, Ce = (e) => {
359
+ }, Te = (e) => {
360
360
  let t = [];
361
361
  for (let n of e.split("/")) if (n !== ".") {
362
362
  if (n === "..") {
@@ -366,19 +366,19 @@ var B = "com.apple.ibooks.display-options.xml", pe = (e) => e.childrenNamed("opt
366
366
  t.push(n);
367
367
  }
368
368
  return t.join("/");
369
- }, we = (e, t) => /^https?:\/\//.test(e) ? e : Ce(t ? `${t}/${e}` : e), Te = (e) => {
369
+ }, Ee = (e, t) => /^https?:\/\//.test(e) ? e : Te(t ? `${t}/${e}` : e), De = (e) => {
370
370
  let t = e?.trim().toLowerCase();
371
371
  return t === "reflowable" || t === "pre-paginated" ? t : void 0;
372
- }, Ee = (e, { opf: t, basePath: n }) => {
373
- let r = Te(t.renditionLayoutMeta), i = t.spineRows.map((t) => {
374
- let r = we(t.href, n);
372
+ }, Oe = (e, { opf: t, basePath: n }) => {
373
+ let r = De(t.renditionLayoutMeta), i = t.spineRows.map((t) => {
374
+ let r = Ee(t.href, n);
375
375
  return {
376
376
  row: t,
377
377
  uri: r,
378
378
  record: C(e, r)
379
379
  };
380
380
  }), a = i.reduce((e, { record: t }) => e + (t?.size ?? 0), 0);
381
- return i.map(({ row: e, uri: n, record: i }) => H({
381
+ return i.map(({ row: e, uri: n, record: i }) => B({
382
382
  uri: n,
383
383
  id: e.id,
384
384
  mediaType: e.mediaType ?? i?.encodingFormat,
@@ -389,14 +389,14 @@ var B = "com.apple.ibooks.display-options.xml", pe = (e) => e.childrenNamed("opt
389
389
  pageSpreadRight: e.pageSpreadRight,
390
390
  progressionWeight: a > 0 ? (i?.size ?? 0) / a : 1 / t.spineRows.length
391
391
  }));
392
- }, De = V.toLowerCase(), Oe = B.toLowerCase(), ke = (e) => {
392
+ }, ke = z.toLowerCase(), Ae = me.toLowerCase(), je = (e) => {
393
393
  let t = e.basename.toLowerCase();
394
- return t === De || t === Oe || e.uri.endsWith("com.kobobooks.display-options.xml") || t.endsWith(".db");
395
- }, Ae = (e) => {
396
- let t = e.records.filter(x).filter((e) => !ke(e));
394
+ return t === ke || t === Ae || e.uri.endsWith("com.kobobooks.display-options.xml") || t.endsWith(".db");
395
+ }, Me = (e) => {
396
+ let t = e.records.filter(x).filter((e) => !je(e));
397
397
  return t.map((e) => {
398
398
  let n = f(e.encodingFormat ?? "") || o(e.basename);
399
- return H({
399
+ return B({
400
400
  uri: e.uri,
401
401
  mediaType: n,
402
402
  size: e.size,
@@ -404,32 +404,32 @@ var B = "com.apple.ibooks.display-options.xml", pe = (e) => e.childrenNamed("opt
404
404
  progressionWeight: 1 / t.length
405
405
  });
406
406
  });
407
- }, U = async (e, { opf: t } = {}) => {
408
- let n = t ?? await z(e).catch(() => void 0);
409
- return n ? Ee(e, n) : Ae(e);
410
- }, je = (e, t) => {
407
+ }, V = async (e, { opf: t } = {}) => {
408
+ let n = t ?? await R(e).catch(() => void 0);
409
+ return n ? Oe(e, n) : Me(e);
410
+ }, Ne = (e, t) => {
411
411
  let n = C(e, t);
412
412
  if (n !== void 0) return f(n.encodingFormat ?? "") || o(n.basename);
413
- }, Me = async (e, { opf: t, readingOrder: n } = {}) => {
414
- let r = t ?? await z(e).catch(() => void 0);
413
+ }, Pe = async (e, { opf: t, readingOrder: n } = {}) => {
414
+ let r = t ?? await R(e).catch(() => void 0);
415
415
  if (r !== void 0 && r.opf.coverHref !== void 0) {
416
- let t = we(r.opf.coverHref, r.basePath);
417
- return H({
416
+ let t = Ee(r.opf.coverHref, r.basePath);
417
+ return B({
418
418
  uri: t,
419
- mediaType: je(e, t),
419
+ mediaType: Ne(e, t),
420
420
  confidence: "derived"
421
421
  });
422
422
  }
423
- let i = (n ?? await U(e, { opf: r })).find((e) => e.mediaType?.startsWith("image/") === !0);
424
- if (i !== void 0) return H({
423
+ let i = (n ?? await V(e, { opf: r })).find((e) => e.mediaType?.startsWith("image/") === !0);
424
+ if (i !== void 0) return B({
425
425
  uri: i.uri,
426
426
  mediaType: i.mediaType,
427
427
  confidence: "assumed"
428
428
  });
429
- }, Ne = (e) => {
429
+ }, Fe = (e) => {
430
430
  let t = e.descendantWithPath("head")?.childrenNamed("meta").find((e) => e.attr.name === "viewport");
431
431
  return !!(t && t.attr.name === "viewport");
432
- }, Pe = async (e, n) => {
432
+ }, Ie = async (e, n) => {
433
433
  if (n.length === 0) return !1;
434
434
  for (let r of n) {
435
435
  if (!d({
@@ -439,47 +439,47 @@ var B = "com.apple.ibooks.display-options.xml", pe = (e) => e.childrenNamed("opt
439
439
  let n = C(e, r.uri);
440
440
  if (!n || !x(n)) return !1;
441
441
  try {
442
- if (!Ne(new h(await D(n)))) return !1;
442
+ if (!Fe(new h(await D(n)))) return !1;
443
443
  } catch (e) {
444
444
  return t.error(`layout scan: unable to inspect ${r.uri}`, e), !1;
445
445
  }
446
446
  }
447
447
  return !0;
448
- }, Fe = B.toLowerCase();
449
- async function Ie(e) {
450
- let t = e.records.find((e) => x(e) && e.basename.toLowerCase() === Fe);
451
- if (t) return me(await D(t));
448
+ }, Le = me.toLowerCase();
449
+ async function Re(e) {
450
+ let t = e.records.find((e) => x(e) && e.basename.toLowerCase() === Le);
451
+ if (t) return ge(await D(t));
452
452
  }
453
453
  //#endregion
454
454
  //#region src/metadata/comicInfo/getArchiveHasComicInfo.ts
455
- var Le = V.toLowerCase(), Re = (e) => e.records.find((e) => x(e) && e.basename.toLowerCase() === Le), ze = [
455
+ var ze = z.toLowerCase(), Be = (e) => e.records.find((e) => x(e) && e.basename.toLowerCase() === ze), Ve = [
456
456
  "Unknown",
457
457
  "No",
458
458
  "Yes",
459
459
  "YesAndRightToLeft"
460
- ], Be = (e) => {
461
- for (let t of ze) if (t === e) return !0;
460
+ ], He = (e) => {
461
+ for (let t of Ve) if (t === e) return !0;
462
462
  return !1;
463
463
  };
464
464
  //#endregion
465
465
  //#region src/metadata/comicInfo/readArchiveComicInfo.ts
466
- async function Ve(e) {
467
- let t = Re(e);
468
- if (t) return ye(await D(t));
466
+ async function Ue(e) {
467
+ let t = Be(e);
468
+ if (t) return xe(await D(t));
469
469
  }
470
470
  //#endregion
471
471
  //#region src/metadata/kobo/readArchiveKobo.ts
472
- async function He(e) {
472
+ async function We(e) {
473
473
  let n = e.records.filter((e) => x(e) && e.uri.endsWith("com.kobobooks.display-options.xml"));
474
474
  if (n.length === 0) return;
475
475
  let r;
476
476
  for (let e of n) {
477
477
  let n = await D(e);
478
478
  try {
479
- let { renditionLayout: e } = Se(n);
479
+ let { renditionLayout: e } = we(n);
480
480
  e && (r = e);
481
481
  } catch (n) {
482
- t.error(`Unable to parse ${be} (${e.uri})`, n);
482
+ t.error(`Unable to parse ${Se} (${e.uri})`, n);
483
483
  }
484
484
  }
485
485
  return {
@@ -489,62 +489,62 @@ async function He(e) {
489
489
  }
490
490
  //#endregion
491
491
  //#region src/metadata/opf/getSpineItemFilesFromArchive.ts
492
- var Ue = async ({ archive: e, archiveOpf: t }) => {
492
+ var Ge = async ({ archive: e, archiveOpf: t }) => {
493
493
  if (!t) return [];
494
494
  let { opf: n, basePath: r } = t, { spineRows: i } = n;
495
495
  return e.records.filter((e) => i.find((t) => r ? `${r}/${t.href}` === e.uri : `${t.href}` === e.uri));
496
- }, We = (e) => e.toLowerCase().endsWith(".opf"), Ge = (e) => e.records.some((e) => !e.dir && (We(e.basename) || We(e.uri))), Ke = (e) => {
497
- 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({
496
+ }, Ke = (e) => e.toLowerCase().endsWith(".opf"), qe = (e) => e.records.some((e) => !e.dir && (Ke(e.basename) || Ke(e.uri))), Je = (e) => {
497
+ let t = e.displayOptions?.platform?.options, n = t?.find((e) => e.name === "fixed-layout")?.value.trim().toLowerCase(), r = n === "true" || n !== "false" && void 0, i = B({
498
498
  fixedLayout: r,
499
- options: t !== void 0 && t.length > 0 ? t.map(({ name: e, value: t }) => H({
499
+ options: t !== void 0 && t.length > 0 ? t.map(({ name: e, value: t }) => B({
500
500
  name: e,
501
501
  value: t
502
502
  })) : void 0
503
503
  });
504
- return H({
504
+ return B({
505
505
  renditionLayout: r === !0 ? "pre-paginated" : void 0,
506
506
  apple: Object.keys(i).length > 0 ? i : void 0
507
507
  });
508
- }, qe = (e) => {
508
+ }, Ye = (e) => {
509
509
  switch (e.Manga) {
510
510
  case "YesAndRightToLeft": return "rtl";
511
511
  case "Yes":
512
512
  case "No": return "ltr";
513
513
  default: return;
514
514
  }
515
- }, W = (e) => {
515
+ }, H = (e) => {
516
516
  if (e === void 0) return;
517
517
  let t = e.trim();
518
518
  return t.length > 0 ? t : void 0;
519
- }, G = (e) => e === void 0 ? [] : e.split(",").map((e) => e.trim()).filter((e) => e.length > 0), K = (e) => {
520
- let t = W(e);
519
+ }, U = (e) => e === void 0 ? [] : e.split(",").map((e) => e.trim()).filter((e) => e.length > 0), W = (e) => {
520
+ let t = H(e);
521
521
  if (t === void 0 || !/^\d+$/.test(t)) return;
522
522
  let n = Number.parseInt(t, 10);
523
523
  return Number.isFinite(n) ? n : void 0;
524
- }, q = (e) => {
525
- let t = W(e);
524
+ }, G = (e) => {
525
+ let t = H(e);
526
526
  if (t === void 0 || !/^\d+(\.\d+)?$/.test(t)) return;
527
527
  let n = Number.parseFloat(t);
528
528
  return Number.isFinite(n) ? n : void 0;
529
- }, Je = (e) => {
530
- let t = W(e)?.toLowerCase();
529
+ }, Xe = (e) => {
530
+ let t = H(e)?.toLowerCase();
531
531
  if (t === "yes") return !0;
532
532
  if (t === "no") return !1;
533
- }, Ye = (e) => {
533
+ }, Ze = (e) => {
534
534
  switch (e.Manga) {
535
535
  case "Yes":
536
536
  case "YesAndRightToLeft": return !0;
537
537
  case "No": return !1;
538
538
  default: return;
539
539
  }
540
- }, Xe = (e) => {
541
- let t = K(e.Year), n = K(e.Month), r = K(e.Day);
540
+ }, Qe = (e) => {
541
+ let t = W(e.Year), n = W(e.Month), r = W(e.Day);
542
542
  if (!(t === void 0 && n === void 0 && r === void 0)) return {
543
543
  ...t === void 0 ? {} : { year: t },
544
544
  ...n === void 0 ? {} : { month: n },
545
545
  ...r === void 0 ? {} : { day: r }
546
546
  };
547
- }, Ze = [
547
+ }, $e = [
548
548
  ["Writer", "author"],
549
549
  ["Penciller", "penciler"],
550
550
  ["Inker", "inker"],
@@ -553,9 +553,9 @@ var Ue = async ({ archive: e, archiveOpf: t }) => {
553
553
  ["CoverArtist", "coverArtist"],
554
554
  ["Editor", "editor"],
555
555
  ["Translator", "translator"]
556
- ], Qe = (e) => {
556
+ ], et = (e) => {
557
557
  let t = /* @__PURE__ */ new Map();
558
- for (let [n, r] of Ze) for (let i of G(e[n])) {
558
+ for (let [n, r] of $e) for (let i of U(e[n])) {
559
559
  let e = t.get(i);
560
560
  e ? e.roles.includes(r) || e.roles.push(r) : t.set(i, {
561
561
  name: i,
@@ -563,110 +563,110 @@ var Ue = async ({ archive: e, archiveOpf: t }) => {
563
563
  });
564
564
  }
565
565
  return [...t.values()];
566
- }, $e = (e) => {
567
- let t = H({
568
- name: W(e.Series),
569
- position: q(e.Number),
570
- total: K(e.Count)
566
+ }, tt = (e) => {
567
+ let t = B({
568
+ name: H(e.Series),
569
+ position: G(e.Number),
570
+ total: W(e.Count)
571
571
  });
572
572
  return Object.keys(t).length > 0 ? t : void 0;
573
- }, et = (e) => {
574
- let t = W(e.AlternateSeries);
575
- if (t !== void 0) return H({
573
+ }, nt = (e) => {
574
+ let t = H(e.AlternateSeries);
575
+ if (t !== void 0) return B({
576
576
  name: t,
577
- position: q(e.AlternateNumber),
578
- total: K(e.AlternateCount)
577
+ position: G(e.AlternateNumber),
578
+ total: W(e.AlternateCount)
579
579
  });
580
- }, tt = (e) => {
581
- let t = G(e.StoryArc);
580
+ }, rt = (e) => {
581
+ let t = U(e.StoryArc);
582
582
  if (t.length === 0) return [];
583
- let n = G(e.StoryArcNumber);
584
- return t.map((e, t) => H({
583
+ let n = U(e.StoryArcNumber);
584
+ return t.map((e, t) => B({
585
585
  name: e,
586
- position: q(n[t])
586
+ position: G(n[t])
587
587
  }));
588
- }, J = (e) => e.length > 0 ? e : void 0, nt = (e) => (e.Web ?? "").split(/\s+/).filter((e) => e.length > 0), rt = (e) => {
588
+ }, K = (e) => e.length > 0 ? e : void 0, it = (e) => (e.Web ?? "").split(/\s+/).filter((e) => e.length > 0), at = (e) => {
589
589
  try {
590
590
  let t = new URL(e);
591
591
  return (t.protocol === "http:" || t.protocol === "https:") && t.hostname.length > 0;
592
592
  } catch {
593
593
  return !1;
594
594
  }
595
- }, it = (e) => e.filter((e, t, n) => rt(e) && n.indexOf(e) === t).map((e) => ({
595
+ }, ot = (e) => e.filter((e, t, n) => at(e) && n.indexOf(e) === t).map((e) => ({
596
596
  value: e,
597
597
  scheme: "URL"
598
- })), at = (e, t) => {
599
- let n = H({
600
- manga: Ye(e),
601
- blackAndWhite: Je(e.BlackAndWhite),
602
- volume: K(e.Volume),
603
- format: W(e.Format),
604
- ageRating: W(e.AgeRating),
605
- notes: W(e.Notes),
606
- review: W(e.Review),
607
- web: J(t),
608
- scanInformation: W(e.ScanInformation),
609
- mainCharacterOrTeam: W(e.MainCharacterOrTeam),
610
- characters: J(G(e.Characters)),
611
- teams: J(G(e.Teams)),
612
- locations: J(G(e.Locations)),
613
- storyArcs: J(tt(e)),
614
- alternateSeries: et(e)
598
+ })), st = (e, t) => {
599
+ let n = B({
600
+ manga: Ze(e),
601
+ blackAndWhite: Xe(e.BlackAndWhite),
602
+ volume: W(e.Volume),
603
+ format: H(e.Format),
604
+ ageRating: H(e.AgeRating),
605
+ notes: H(e.Notes),
606
+ review: H(e.Review),
607
+ web: K(t),
608
+ scanInformation: H(e.ScanInformation),
609
+ mainCharacterOrTeam: H(e.MainCharacterOrTeam),
610
+ characters: K(U(e.Characters)),
611
+ teams: K(U(e.Teams)),
612
+ locations: K(U(e.Locations)),
613
+ storyArcs: K(rt(e)),
614
+ alternateSeries: nt(e)
615
615
  });
616
616
  return Object.keys(n).length > 0 ? n : void 0;
617
- }, ot = (e) => {
618
- let t = q(e.CommunityRating);
617
+ }, ct = (e) => {
618
+ let t = G(e.CommunityRating);
619
619
  return t !== void 0 && t <= 5 ? { value: t } : void 0;
620
- }, st = (e) => {
621
- let t = $e(e), n = J(G(e.SeriesGroup).map((e) => ({ name: e })));
622
- if (!(t === void 0 && n === void 0)) return H({
620
+ }, lt = (e) => {
621
+ let t = tt(e), n = K(U(e.SeriesGroup).map((e) => ({ name: e })));
622
+ if (!(t === void 0 && n === void 0)) return B({
623
623
  series: t === void 0 ? void 0 : [t],
624
624
  collection: n
625
625
  });
626
- }, ct = (e) => {
627
- let t = e.GTIN, n = W(t), r = nt(e), i = [...n === void 0 ? [] : [{
626
+ }, ut = (e) => {
627
+ let t = e.GTIN, n = H(t), r = it(e), i = [...n === void 0 ? [] : [{
628
628
  value: n,
629
629
  scheme: "GTIN"
630
- }], ...it(r)], a = W(e.LanguageISO), o = [...G(e.Genre), ...G(e.Tags)], s = H({
631
- date: Xe(e),
632
- publisher: W(e.Publisher),
633
- imprint: W(e.Imprint)
634
- }), c = W(e.Title);
635
- return H({
630
+ }], ...ot(r)], a = H(e.LanguageISO), o = [...U(e.Genre), ...U(e.Tags)], s = B({
631
+ date: Qe(e),
632
+ publisher: H(e.Publisher),
633
+ imprint: H(e.Imprint)
634
+ }), c = H(e.Title);
635
+ return B({
636
636
  titles: c === void 0 ? void 0 : [{ value: c }],
637
- description: W(e.Summary),
637
+ description: H(e.Summary),
638
638
  publication: s.date !== void 0 || s.publisher !== void 0 || s.imprint !== void 0 ? { edition: s } : void 0,
639
639
  languages: a === void 0 ? void 0 : [a],
640
- subjects: J(o),
641
- contributors: J(Qe(e)),
642
- readingDirection: qe(e),
643
- numberOfPages: K(e.PageCount),
644
- aggregateRating: ot(e),
645
- identifiers: J(i),
646
- belongsTo: st(e),
647
- comicInfo: at(e, r)
640
+ subjects: K(o),
641
+ contributors: K(et(e)),
642
+ readingDirection: Ye(e),
643
+ numberOfPages: W(e.PageCount),
644
+ aggregateRating: ct(e),
645
+ identifiers: K(i),
646
+ belongsTo: lt(e),
647
+ comicInfo: st(e, r)
648
648
  });
649
- }, lt = (e) => H({
649
+ }, dt = (e) => B({
650
650
  renditionLayout: e.renditionLayout,
651
651
  kobo: e.renditionLayout === void 0 ? void 0 : { fixedLayout: e.renditionLayout === "pre-paginated" }
652
- }), ut = /[0-9Xx]+/g, dt = /^(?:97[89])?\d{9}[\dXx]$/, ft = (e) => {
652
+ }), ft = /[0-9Xx]+/g, pt = /^(?:97[89])?\d{9}[\dXx]$/, mt = (e) => {
653
653
  if (e == null) return;
654
654
  let t = String(e).trim().replace(/^urn:isbn:/i, "").replace(/^isbn[:\s-]*/i, ""), n = t.replace(/[^0-9Xx]/g, "");
655
655
  if (n.length === 10 || n.length === 13) return n.toUpperCase();
656
- for (let e of t.match(ut) ?? []) if (dt.test(e)) return e.toUpperCase();
657
- }, pt = (e) => {
658
- let t = ft(e);
656
+ for (let e of t.match(ft) ?? []) if (pt.test(e)) return e.toUpperCase();
657
+ }, ht = (e) => {
658
+ let t = mt(e);
659
659
  if (t !== void 0) return t.length === 10 || /^97[89]/.test(t) ? t : void 0;
660
- }, mt = /* @__PURE__ */ new Set([
660
+ }, gt = /* @__PURE__ */ new Set([
661
661
  8,
662
662
  12,
663
663
  13,
664
664
  14
665
- ]), Y = (e) => {
665
+ ]), _t = (e) => {
666
666
  if (e == null) return;
667
667
  let t = String(e).replace(/\D/g, "");
668
- if (!(t.length === 0 || !mt.has(t.length))) return t;
669
- }, ht = (e) => {
668
+ if (!(t.length === 0 || !gt.has(t.length))) return t;
669
+ }, vt = (e) => {
670
670
  if (e === void 0) return;
671
671
  let t = e.trim().match(/^(\d{4})(?:-(\d{2})(?:-(\d{2}))?)?/);
672
672
  if (t === null) return;
@@ -676,14 +676,14 @@ var Ue = async ({ archive: e, archiveOpf: t }) => {
676
676
  ...r === void 0 ? {} : { month: Number.parseInt(r, 10) },
677
677
  ...i === void 0 ? {} : { day: Number.parseInt(i, 10) }
678
678
  };
679
- }, gt = (e) => {
679
+ }, yt = (e) => {
680
680
  let t = e.trim();
681
681
  if (/^https?:\/\//i.test(t)) try {
682
682
  let e = new URL(t);
683
683
  if ((e.protocol === "http:" || e.protocol === "https:") && e.hostname.length > 0) return "URL";
684
684
  } catch {}
685
- return pt(t) === void 0 ? Y(t) === void 0 ? "Unknown" : "GTIN" : "ISBN";
686
- }, _t = (e) => {
685
+ return ht(t) === void 0 ? _t(t) === void 0 ? "Unknown" : "GTIN" : "ISBN";
686
+ }, bt = (e) => {
687
687
  switch (e.trim().toLowerCase()) {
688
688
  case "isbn": return "ISBN";
689
689
  case "gtin": return "GTIN";
@@ -695,7 +695,7 @@ var Ue = async ({ archive: e, archiveOpf: t }) => {
695
695
  case "unknown": return "Unknown";
696
696
  default: return e.trim();
697
697
  }
698
- }, vt = {
698
+ }, xt = {
699
699
  art: "artist",
700
700
  aut: "author",
701
701
  clr: "colorist",
@@ -704,14 +704,14 @@ var Ue = async ({ archive: e, archiveOpf: t }) => {
704
704
  ill: "illustrator",
705
705
  nrt: "narrator",
706
706
  trl: "translator"
707
- }, yt = (e) => e.map((e) => {
708
- let t = e.roles.map((e) => vt[e.trim().toLowerCase()] ?? e);
709
- return H({
707
+ }, St = (e) => e.map((e) => {
708
+ let t = e.roles.map((e) => xt[e.trim().toLowerCase()] ?? e);
709
+ return B({
710
710
  name: e.name,
711
711
  roles: t.length > 0 ? t : [e.source === "creator" ? "author" : "contributor"],
712
712
  sortAs: e.fileAs
713
713
  });
714
- }), X = (e, t) => e.refines !== void 0 && e.refines.replace(/^#/, "") === t, bt = {
714
+ }), q = (e, t) => e.refines !== void 0 && e.refines.replace(/^#/, "") === t, Ct = {
715
715
  "02": "ISBN",
716
716
  "03": "GTIN",
717
717
  "04": "UPC",
@@ -727,78 +727,78 @@ var Ue = async ({ archive: e, archiveOpf: t }) => {
727
727
  26: "DOI",
728
728
  34: "GTIN",
729
729
  35: "ARK"
730
- }, xt = (e) => {
730
+ }, wt = (e) => {
731
731
  let t = e?.value?.trim();
732
- if (!(t === void 0 || t.length === 0)) return e?.scheme?.trim().toLowerCase() === "onix:codelist5" ? bt[t] ?? t : t;
733
- }, St = (e, t) => {
732
+ if (!(t === void 0 || t.length === 0)) return e?.scheme?.trim().toLowerCase() === "onix:codelist5" ? Ct[t] ?? t : t;
733
+ }, Tt = (e, t) => {
734
734
  let n = e.id;
735
- if (n !== void 0) return xt(t.find((e) => e.property === "identifier-type" && X(e, n) && e.value !== void 0));
736
- }, Ct = (e) => {
735
+ if (n !== void 0) return wt(t.find((e) => e.property === "identifier-type" && q(e, n) && e.value !== void 0));
736
+ }, Et = (e) => {
737
737
  let t = e?.trim();
738
738
  if (t === void 0 || !/^\d+(\.\d+)?$/.test(t)) return;
739
739
  let n = Number.parseFloat(t);
740
740
  return Number.isFinite(n) ? n : void 0;
741
- }, wt = (e) => {
741
+ }, Dt = (e) => {
742
742
  let t = e?.trim();
743
743
  if (t === void 0 || !/^\d+$/.test(t)) return;
744
744
  let n = Number.parseInt(t, 10);
745
745
  return Number.isFinite(n) ? n : void 0;
746
- }, Z = (e) => {
746
+ }, Ot = (e) => {
747
747
  let t = e?.trim();
748
748
  return t !== void 0 && t.length > 0 ? t : void 0;
749
- }, Q = (e, t, n) => t === void 0 ? void 0 : e.find((e) => X(e, t) && e.property === n && e.value !== void 0)?.value, Tt = (e, t) => e.map((e) => H({
749
+ }, J = (e, t, n) => t === void 0 ? void 0 : e.find((e) => q(e, t) && e.property === n && e.value !== void 0)?.value, kt = (e, t) => e.map((e) => B({
750
750
  value: e.value,
751
- type: Z(Q(t, e.id, "title-type"))?.toLowerCase(),
752
- displaySeq: wt(Q(t, e.id, "display-seq")),
753
- sortAs: Z(Q(t, e.id, "file-as"))
754
- })), Et = (e, t) => {
751
+ type: Ot(J(t, e.id, "title-type"))?.toLowerCase(),
752
+ displaySeq: Dt(J(t, e.id, "display-seq")),
753
+ sortAs: Ot(J(t, e.id, "file-as"))
754
+ })), At = (e, t) => {
755
755
  if (t === void 0) return;
756
756
  let n = e.flatMap((n) => {
757
- if (!X(n, t) || n.property !== "dcterms:identifier") return [];
758
- let r = Z(n.value);
757
+ if (!q(n, t) || n.property !== "dcterms:identifier") return [];
758
+ let r = Ot(n.value);
759
759
  return r === void 0 ? [] : [{
760
760
  value: r,
761
- scheme: _t(xt(e.find((e) => n.id !== void 0 && X(e, n.id) && e.property === "identifier-type")) ?? gt(r))
761
+ scheme: bt(wt(e.find((e) => n.id !== void 0 && q(e, n.id) && e.property === "identifier-type")) ?? yt(r))
762
762
  }];
763
763
  });
764
764
  return n.length > 0 ? n : void 0;
765
- }, Dt = (e) => {
765
+ }, jt = (e) => {
766
766
  let t = [], n = [];
767
767
  for (let r of e) {
768
768
  if (r.property !== "belongs-to-collection" || r.value === void 0) continue;
769
- let i = r.id, a = (t) => Q(e, i, t), o = a("collection-type")?.trim().toLowerCase(), s = H({
769
+ let i = r.id, a = (t) => J(e, i, t), o = a("collection-type")?.trim().toLowerCase(), s = B({
770
770
  name: r.value,
771
- identifiers: Et(e, i),
772
- position: Ct(a("group-position"))
771
+ identifiers: At(e, i),
772
+ position: Et(a("group-position"))
773
773
  });
774
774
  o === "series" ? t.push(s) : n.push(s);
775
775
  }
776
776
  if (t.length === 0) {
777
777
  let n = e.find((e) => e.name?.toLowerCase() === "calibre:series" && e.content !== void 0)?.content;
778
- n !== void 0 && t.push(H({
778
+ n !== void 0 && t.push(B({
779
779
  name: n,
780
- position: Ct(e.find((e) => e.name?.toLowerCase() === "calibre:series_index")?.content)
780
+ position: Et(e.find((e) => e.name?.toLowerCase() === "calibre:series_index")?.content)
781
781
  }));
782
782
  }
783
783
  return {
784
784
  series: t,
785
785
  collection: n
786
786
  };
787
- }, Ot = (e) => {
787
+ }, Mt = (e) => {
788
788
  let t = e?.trim();
789
789
  if (t === "scrolled-continuous" || t === "scrolled-doc" || t === "paginated" || t === "auto") return t;
790
- }, kt = (e) => {
790
+ }, Nt = (e) => {
791
791
  let t = e?.trim();
792
792
  if (t === "none" || t === "landscape" || t === "portrait" || t === "both" || t === "auto") return t;
793
- }, At = (e) => {
794
- let { titles: t, contributors: n, publisher: r, description: i, rights: a, languages: o, subjects: s, date: c, renditionLayoutMeta: l, renditionFlowMeta: u, renditionSpreadMeta: d, pageProgressionDirection: f, identifiers: p, metas: m, kind: h, creators: g, manifestItems: _, spineRows: v, spineTocIdref: y, coverHref: b, guide: x, ...S } = e, C = f?.trim().toLowerCase(), w = C === "ltr" || C === "rtl" ? C : void 0, T = l?.trim().toLowerCase(), E = T === "reflowable" || T === "pre-paginated" ? T : void 0, D = yt(n), O = Tt(t, m), { series: k, collection: A } = Dt(m), j = k.length > 0 || A.length > 0 ? H({
793
+ }, Pt = (e) => {
794
+ let { titles: t, contributors: n, publisher: r, description: i, rights: a, languages: o, subjects: s, date: c, renditionLayoutMeta: l, renditionFlowMeta: u, renditionSpreadMeta: d, pageProgressionDirection: f, identifiers: p, metas: m, kind: h, creators: g, manifestItems: _, spineRows: v, spineTocIdref: y, coverHref: b, guide: x, ...S } = e, C = f?.trim().toLowerCase(), w = C === "ltr" || C === "rtl" ? C : void 0, T = l?.trim().toLowerCase(), E = T === "reflowable" || T === "pre-paginated" ? T : void 0, D = St(n), O = kt(t, m), { series: k, collection: A } = jt(m), j = k.length > 0 || A.length > 0 ? B({
795
795
  series: k.length > 0 ? k : void 0,
796
796
  collection: A.length > 0 ? A : void 0
797
- }) : void 0, M = H({
798
- date: ht(c),
797
+ }) : void 0, M = B({
798
+ date: vt(c),
799
799
  publisher: r
800
800
  });
801
- return H({
801
+ return B({
802
802
  titles: O.length > 0 ? O : void 0,
803
803
  description: i,
804
804
  publication: M.date !== void 0 || M.publisher !== void 0 ? { edition: M } : void 0,
@@ -808,23 +808,23 @@ var Ue = async ({ archive: e, archiveOpf: t }) => {
808
808
  contributors: D.length > 0 ? D : void 0,
809
809
  readingDirection: w,
810
810
  renditionLayout: E,
811
- renditionFlow: Ot(u),
812
- renditionSpread: kt(d),
813
- identifiers: p.length > 0 ? p.map((e) => H({
811
+ renditionFlow: Mt(u),
812
+ renditionSpread: Nt(d),
813
+ identifiers: p.length > 0 ? p.map((e) => B({
814
814
  value: e.value,
815
- scheme: _t(e.scheme ?? St(e, m) ?? gt(e.value)),
815
+ scheme: bt(e.scheme ?? Tt(e, m) ?? yt(e.value)),
816
816
  unique: e.unique
817
817
  })) : void 0,
818
818
  belongsTo: j,
819
819
  properties: m.length > 0 ? [...m] : void 0
820
820
  });
821
- }, jt = (e) => e.kind === "comicInfo" ? ct(e) : e.kind === "kobo" ? lt(e) : e.kind === "apple" ? Ke(e) : At(e), Mt = (e) => {
822
- let t = e.opf === void 0 ? void 0 : At(e.opf), n = e.comicInfo === void 0 ? void 0 : ct(e.comicInfo), r = e.apple === void 0 ? void 0 : Ke(e.apple), i = e.kobo === void 0 ? void 0 : lt(e.kobo), a = [...t?.identifiers ?? [], ...n?.identifiers ?? []], o = H({
821
+ }, Ft = (e) => e.kind === "comicInfo" ? ut(e) : e.kind === "kobo" ? dt(e) : e.kind === "apple" ? Je(e) : Pt(e), It = (e) => {
822
+ let t = e.opf === void 0 ? void 0 : Pt(e.opf), n = e.comicInfo === void 0 ? void 0 : ut(e.comicInfo), r = e.apple === void 0 ? void 0 : Je(e.apple), i = e.kobo === void 0 ? void 0 : dt(e.kobo), a = [...t?.identifiers ?? [], ...n?.identifiers ?? []], o = B({
823
823
  date: t?.publication?.edition?.date ?? n?.publication?.edition?.date,
824
824
  publisher: t?.publication?.edition?.publisher ?? n?.publication?.edition?.publisher,
825
825
  imprint: t?.publication?.edition?.imprint ?? n?.publication?.edition?.imprint
826
826
  });
827
- return H({
827
+ return B({
828
828
  titles: t?.titles ?? n?.titles,
829
829
  description: t?.description ?? n?.description,
830
830
  publication: o.date !== void 0 || o.publisher !== void 0 || o.imprint !== void 0 ? { edition: o } : void 0,
@@ -845,7 +845,7 @@ var Ue = async ({ archive: e, archiveOpf: t }) => {
845
845
  apple: r?.apple,
846
846
  kobo: i?.kobo
847
847
  });
848
- }, Nt = (e) => {
848
+ }, Lt = (e) => {
849
849
  let t = [...e.records].sort((e, t) => p(e.uri, t.uri)), n = (e, t, r, i, a) => {
850
850
  let o = e.find((e) => e.title === t), [s, ...c] = r;
851
851
  return o ? s ? [...e.filter((e) => e !== o), {
@@ -874,75 +874,75 @@ var Ue = async ({ archive: e, archiveOpf: t }) => {
874
874
  let a = encodeURI(t.uri).replace(/#/g, "%23").replace(/\?/g, "%3F").replace(/\/$/, ""), o = t.uri.replace(/\/$/, "");
875
875
  return n(e, r, i, a, o);
876
876
  }, []);
877
- }, Pt = (e) => e ? e.children.map((e) => e instanceof _ ? e.text : e instanceof g ? Pt(e) : "").join("").trim() : "", Ft = (e) => k(e.properties).includes("nav"), It = (e, { basePath: t }) => {
877
+ }, Rt = (e) => e ? e.children.map((e) => e instanceof _ ? e.text : e instanceof g ? Rt(e) : "").join("").trim() : "", zt = (e) => k(e.properties).includes("nav"), Bt = (e, { basePath: t }) => {
878
878
  let n = {
879
879
  contents: [],
880
880
  path: "",
881
881
  containerHref: "",
882
882
  title: ""
883
883
  }, r = e.childNamed("span") || e.childNamed("a");
884
- n.title = (r?.attr.title || r?.val.trim() || Pt(r)) ?? "";
884
+ n.title = (r?.attr.title || r?.val.trim() || Rt(r)) ?? "";
885
885
  let i = r?.name;
886
886
  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);
887
887
  let a = e.childNamed("ol");
888
888
  if (a) {
889
889
  let e = a.childrenNamed("li");
890
- e && e.length > 0 && (n.contents = e.map((e) => It(e, { basePath: t })));
890
+ e && e.length > 0 && (n.contents = e.map((e) => Bt(e, { basePath: t })));
891
891
  }
892
892
  return n;
893
- }, Lt = (e, { basePath: t }) => {
893
+ }, Vt = (e, { basePath: t }) => {
894
894
  let n = [], r;
895
895
  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) => {
896
- n.push(It(e, { basePath: t }));
896
+ n.push(Bt(e, { basePath: t }));
897
897
  }), n;
898
- }, Rt = async (e, t) => {
899
- let n = e.manifestItems.find(Ft);
898
+ }, Ht = async (e, t) => {
899
+ let n = e.manifestItems.find(zt);
900
900
  if (n?.href) {
901
901
  let e = t.records.find((e) => e.uri.endsWith(n.href));
902
- if (e && !e.dir) return Lt(new h(await D(e)), { basePath: c(e.uri) });
902
+ if (e && !e.dir) return Vt(new h(await D(e)), { basePath: c(e.uri) });
903
903
  }
904
- }, zt = (e, { basePath: t, prefix: n }) => {
904
+ }, Ut = (e, { basePath: t, prefix: n }) => {
905
905
  let r = m(t, e?.childNamed(`${n}content`)?.attr.src || ""), i = {
906
906
  title: e?.descendantWithPath(`${n}navLabel.${n}text`)?.val || "",
907
907
  path: r,
908
908
  containerHref: r,
909
909
  contents: []
910
910
  }, a = e.childrenNamed(`${n}navPoint`);
911
- return a && a.length > 0 && (i.contents = a.map((e) => zt(e, {
911
+ return a && a.length > 0 && (i.contents = a.map((e) => Ut(e, {
912
912
  basePath: t,
913
913
  prefix: n
914
914
  }))), i;
915
- }, Bt = (e, { basePath: t }) => {
915
+ }, Wt = (e, { basePath: t }) => {
916
916
  let n = [], r = e.name, i = "";
917
917
  return r.indexOf(":") !== -1 && (i = `${r.split(":")[0]}:`), e.childNamed(`${i}navMap`)?.childrenNamed(`${i}navPoint`).forEach((e) => {
918
- n.push(zt(e, {
918
+ n.push(Ut(e, {
919
919
  basePath: t,
920
920
  prefix: i
921
921
  }));
922
922
  }), n;
923
- }, Vt = async ({ opf: e, opfBasePath: t, archive: n }) => {
923
+ }, Gt = async ({ opf: e, opfBasePath: t, archive: n }) => {
924
924
  let r = e.spineTocIdref;
925
925
  if (r) {
926
926
  let i = e.manifestItems.find((e) => e.id === r);
927
927
  if (i) {
928
928
  let e = `${t}${t === "" ? "" : "/"}${i.href}`, r = n.records.find((t) => t.uri.endsWith(e));
929
- if (r && !r.dir) return Bt(new h(await D(r)), { basePath: c(r.uri) });
929
+ if (r && !r.dir) return Wt(new h(await D(r)), { basePath: c(r.uri) });
930
930
  }
931
931
  }
932
- }, Ht = async (e, { opf: t } = {}) => {
933
- let n = t ?? await z(e);
934
- if (n) return await Rt(n.opf, e) || await Vt({
932
+ }, Kt = async (e, { opf: t } = {}) => {
933
+ let n = t ?? await R(e);
934
+ if (n) return await Ht(n.opf, e) || await Gt({
935
935
  opf: n.opf,
936
936
  opfBasePath: n.basePath,
937
937
  archive: e
938
938
  }) || [];
939
- let r = Nt(e);
939
+ let r = Lt(e);
940
940
  return r.length === 0 ? void 0 : r;
941
- }, Ut = [
941
+ }, qt = [
942
942
  "metadata",
943
943
  "readingOrder",
944
944
  "toc"
945
- ], $ = async (e, n) => {
945
+ ], Y = async (e, n) => {
946
946
  try {
947
947
  return {
948
948
  value: await e(),
@@ -954,39 +954,39 @@ var Ue = async ({ archive: e, archiveOpf: t }) => {
954
954
  failed: !0
955
955
  };
956
956
  }
957
- }, Wt = (e) => {
957
+ }, Jt = (e) => {
958
958
  let t = (e) => e?.startsWith("audio/") === !0 || e?.startsWith("video/") === !0, n = e.filter((e) => e.renditionLayout === "pre-paginated" && !t(e.mediaType)).length;
959
959
  return n > 0 ? n : void 0;
960
- }, Gt = ({ archive: e, opf: t, comicInfo: n, apple: r, kobo: i }) => {
960
+ }, Yt = ({ archive: e, opf: t, comicInfo: n, apple: r, kobo: i }) => {
961
961
  let a = [];
962
- return t !== void 0 && t.value === void 0 && (t.failed || Ge(e)) && a.push("opf"), n?.failed && a.push("comicInfo"), r?.failed && a.push("apple"), i?.failed && a.push("kobo"), a;
963
- }, Kt = 3, qt = async (e, t = {}) => {
964
- let n = new Set(t.include ?? Ut), r = n.has("metadata"), i = n.has("sources"), a = n.has("readingOrder"), o = n.has("toc"), s = t.layoutScan === !0 && (r || a), c = r || i || a || o ? await $(() => z(e), "opf") : void 0, l = c?.value, u = r || i || s, d = u ? await $(() => Ve(e), "comicInfo") : void 0, f = d?.value, p = u ? await $(() => Ie(e), "apple") : void 0, m = p?.value, h = u ? await $(() => He(e), "kobo") : void 0, g = h?.value, _ = r || s ? Mt({
962
+ return t !== void 0 && t.value === void 0 && (t.failed || qe(e)) && a.push("opf"), n?.failed && a.push("comicInfo"), r?.failed && a.push("apple"), i?.failed && a.push("kobo"), a;
963
+ }, Xt = 3, Zt = async (e, t = {}) => {
964
+ let n = new Set(t.include ?? qt), r = n.has("metadata"), i = n.has("sources"), a = n.has("readingOrder"), o = n.has("toc"), s = t.layoutScan === !0 && (r || a), c = r || i || a || o ? await Y(() => R(e), "opf") : void 0, l = c?.value, u = r || i || s, d = u ? await Y(() => Ue(e), "comicInfo") : void 0, f = d?.value, p = u ? await Y(() => Re(e), "apple") : void 0, m = p?.value, h = u ? await Y(() => We(e), "kobo") : void 0, g = h?.value, _ = r || s ? It({
965
965
  opf: l?.opf,
966
966
  comicInfo: f,
967
967
  apple: m,
968
968
  kobo: g
969
- }) : void 0, v = a || s ? await U(e, { opf: l }) : void 0;
970
- if (s && _ !== void 0 && v !== void 0 && _.renditionLayout === "reflowable" && v.every((e) => e.renditionLayout === "reflowable") && await Pe(e, v) && (_ = {
969
+ }) : void 0, v = a || s ? await V(e, { opf: l }) : void 0;
970
+ if (s && _ !== void 0 && v !== void 0 && _.renditionLayout === "reflowable" && v.every((e) => e.renditionLayout === "reflowable") && await Ie(e, v) && (_ = {
971
971
  ..._,
972
972
  renditionLayout: "pre-paginated"
973
973
  }, v = v.map((e) => ({
974
974
  ...e,
975
975
  renditionLayout: "pre-paginated"
976
976
  }))), r && _ !== void 0) {
977
- let t = v ?? await U(e, { opf: l }), n = await Me(e, {
977
+ let t = v ?? await V(e, { opf: l }), n = await Pe(e, {
978
978
  opf: l,
979
979
  readingOrder: t
980
- }), r = _.numberOfPages ?? Wt(t);
981
- _ = H({
980
+ }), r = _.numberOfPages ?? Jt(t);
981
+ _ = B({
982
982
  ..._,
983
983
  cover: n,
984
984
  numberOfPages: r
985
985
  });
986
986
  }
987
- let y = o ? (await $(() => Ht(e, { opf: l }), "toc")).value : void 0, b = {
988
- version: Kt,
989
- unreadableSources: Gt({
987
+ let y = o ? (await Y(() => Kt(e, { opf: l }), "toc")).value : void 0, b = {
988
+ version: Xt,
989
+ unreadableSources: Yt({
990
990
  archive: e,
991
991
  opf: c,
992
992
  comicInfo: d,
@@ -994,20 +994,159 @@ var Ue = async ({ archive: e, archiveOpf: t }) => {
994
994
  kobo: h
995
995
  })
996
996
  };
997
- return r && _ !== void 0 && (b.metadata = _), a && v !== void 0 && (b.readingOrder = v), o && y !== void 0 && (b.toc = y), i && (b.sources = H({
997
+ return r && _ !== void 0 && (b.metadata = _), a && v !== void 0 && (b.readingOrder = v), o && y !== void 0 && (b.toc = y), i && (b.sources = B({
998
998
  opf: l,
999
999
  comicInfo: f,
1000
1000
  apple: m,
1001
1001
  kobo: g
1002
1002
  })), b;
1003
- }, Jt = (e) => e === "ISBN" || e === "GTIN", Yt = (e, t) => {
1004
- for (let n of e ?? []) {
1005
- if (!Jt(n.scheme)) continue;
1006
- let e = t(n.value);
1003
+ }, Qt = (e) => {
1004
+ let t = e.trim().toLowerCase();
1005
+ return t === "url" || t === "uri" || t === "unknown";
1006
+ }, $t = (e) => {
1007
+ try {
1008
+ return decodeURIComponent(e);
1009
+ } catch {
1010
+ return;
1011
+ }
1012
+ }, en = (e) => {
1013
+ try {
1014
+ let t = new URL(e.trim());
1015
+ return t.protocol === "http:" || t.protocol === "https:" ? t : void 0;
1016
+ } catch {
1017
+ return;
1018
+ }
1019
+ }, X = (e, t) => {
1020
+ let n = en(e);
1021
+ return n !== void 0 && t(n.hostname.toLowerCase()) ? n : void 0;
1022
+ }, tn = /^books\.google\.(?:com|[a-z]{2}|com\.[a-z]{2}|co\.[a-z]{2})$/i, nn = /* @__PURE__ */ new Set(["books.googleapis.com", "www.googleapis.com"]), rn = /^\/books\/v1\/volumes\/([^/]+)\/?$/i, Z = (e) => {
1023
+ let t = e.trim();
1024
+ return /^[a-z0-9_-]+$/i.test(t) ? t : void 0;
1025
+ }, an = (e) => {
1026
+ let t = X(e, (e) => tn.test(e) || nn.has(e));
1027
+ if (t !== void 0) {
1028
+ if (nn.has(t.hostname.toLowerCase())) {
1029
+ let e = rn.exec(t.pathname)?.[1], n = e === void 0 ? void 0 : $t(e);
1030
+ return n === void 0 ? void 0 : Z(n);
1031
+ }
1032
+ return Z(t.searchParams.get("id") ?? "");
1033
+ }
1034
+ }, on = /* @__PURE__ */ new Set(["gutenberg.org", "www.gutenberg.org"]), sn = [
1035
+ /^\/ebooks\/(\d+)(?:[./]|$)/i,
1036
+ /^\/files\/(\d+)(?:\/|$)/i,
1037
+ /^\/cache\/epub\/(\d+)(?:\/|$)/i,
1038
+ /^\/(\d+)(?:\/|$)/
1039
+ ], cn = (e) => {
1040
+ let t = e.trim();
1041
+ if (!/^\d+$/.test(t)) return;
1042
+ let n = t.replace(/^0+(?=\d)/, "");
1043
+ return n === "0" ? void 0 : n;
1044
+ }, ln = (e) => {
1045
+ let t = X(e, (e) => on.has(e));
1046
+ if (t !== void 0) for (let e of sn) {
1047
+ let n = e.exec(t.pathname)?.[1];
1048
+ if (n !== void 0) return cn(n);
1049
+ }
1050
+ }, un = /* @__PURE__ */ new Set(["openlibrary.org", "www.openlibrary.org"]), dn = /^\/(works|books|authors)\/(OL\d+[A-Z])(?:\/|$)/i, fn = /^OL\d+([MWA])$/i, pn = {
1051
+ M: "books",
1052
+ W: "works",
1053
+ A: "authors"
1054
+ }, mn = (e) => {
1055
+ let t = e.trim(), n = dn.exec(t);
1056
+ if (n?.[1] !== void 0 && n[2] !== void 0) return `/${n[1].toLowerCase()}/${n[2].toUpperCase()}`;
1057
+ let r = pn[fn.exec(t)?.[1]?.toUpperCase() ?? ""];
1058
+ return r === void 0 ? void 0 : `/${r}/${t.toUpperCase()}`;
1059
+ }, hn = (e) => {
1060
+ let t = X(e, (e) => un.has(e));
1061
+ return t === void 0 ? void 0 : mn(t.pathname);
1062
+ }, gn = /* @__PURE__ */ new Set([
1063
+ "doi.org",
1064
+ "dx.doi.org",
1065
+ "www.doi.org"
1066
+ ]), _n = /^10\.\d{4,9}\/\S+$/, vn = (e) => {
1067
+ let t = e.trim().replace(/^doi:/i, "");
1068
+ return _n.test(t) ? t : void 0;
1069
+ }, yn = (e) => e.split("/").map(encodeURIComponent).join("/"), Q = [
1070
+ {
1071
+ scheme: "GoogleBooks",
1072
+ normalizeValue: Z,
1073
+ valueFromUrl: an,
1074
+ toUrl: (e) => `https://books.google.com/books?id=${encodeURIComponent(e)}`
1075
+ },
1076
+ {
1077
+ scheme: "ProjectGutenberg",
1078
+ normalizeValue: cn,
1079
+ valueFromUrl: ln,
1080
+ toUrl: (e) => `https://www.gutenberg.org/ebooks/${e}`
1081
+ },
1082
+ {
1083
+ scheme: "OpenLibrary",
1084
+ normalizeValue: mn,
1085
+ valueFromUrl: hn,
1086
+ toUrl: (e) => `https://openlibrary.org${e}`
1087
+ },
1088
+ {
1089
+ scheme: "DOI",
1090
+ normalizeValue: vn,
1091
+ valueFromUrl: (e) => {
1092
+ let t = X(e, (e) => gn.has(e)), n = t === void 0 ? void 0 : $t(t.pathname.replace(/^\//, ""));
1093
+ return n === void 0 ? void 0 : vn(n);
1094
+ },
1095
+ toUrl: (e) => `https://doi.org/${yn(e)}`
1096
+ }
1097
+ ], bn = Q.map(function(e) {
1098
+ return e.scheme;
1099
+ }), xn = (e) => {
1100
+ let t = e.trim().toLowerCase();
1101
+ return Q.find(function(e) {
1102
+ return e.scheme.toLowerCase() === t;
1103
+ });
1104
+ }, Sn = (e) => xn(e) !== void 0, Cn = (e) => {
1105
+ for (let t of Q) {
1106
+ let n = t.valueFromUrl(e);
1107
+ if (n !== void 0) return {
1108
+ value: n,
1109
+ scheme: t.scheme
1110
+ };
1111
+ }
1112
+ }, wn = ({ scheme: e, value: t }) => {
1113
+ let n = xn(e), r = n?.normalizeValue(t);
1114
+ if (n === void 0 || r === void 0) return;
1115
+ let i = n.toUrl(r);
1116
+ return n.valueFromUrl(i) === r ? i : void 0;
1117
+ }, Tn = (e) => {
1118
+ let t = Q.find(function(t) {
1119
+ return t.scheme === e;
1120
+ });
1121
+ if (t === void 0) throw Error(`No catalog rule for scheme ${e}`);
1122
+ return t;
1123
+ }, En = (e) => e === "ISBN" || e === "GTIN", Dn = (e) => ({
1124
+ carries: En,
1125
+ normalizeValue: e
1126
+ }), $ = (e) => ({
1127
+ carries: (t) => t.trim().toLowerCase() === e.toLowerCase(),
1128
+ ...Tn(e)
1129
+ }), On = {
1130
+ ISBN: Dn(ht),
1131
+ GTIN: Dn(_t),
1132
+ GoogleBooks: $("GoogleBooks"),
1133
+ OpenLibrary: $("OpenLibrary"),
1134
+ ProjectGutenberg: $("ProjectGutenberg"),
1135
+ DOI: $("DOI")
1136
+ }, kn = (e, t) => {
1137
+ let n = On[t];
1138
+ for (let t of e ?? []) {
1139
+ if (n.carries(t.scheme)) {
1140
+ let e = n.normalizeValue(t.value) ?? n.valueFromUrl?.(t.value);
1141
+ if (e !== void 0) return e;
1142
+ continue;
1143
+ }
1144
+ if (n.valueFromUrl === void 0 || !Qt(t.scheme)) continue;
1145
+ let e = n.valueFromUrl(t.value);
1007
1146
  if (e !== void 0) return e;
1008
1147
  }
1009
- }, Xt = (e) => Yt(e, pt), Zt = (e) => Yt(e, Y), Qt = (e) => e?.titles?.[0]?.value;
1148
+ }, An = (e) => e?.titles?.[0]?.value;
1010
1149
  //#endregion
1011
- export { B as APPLE_IBOOKS_DISPLAY_OPTIONS_FILENAME, V as COMIC_INFO_FILENAME, he as COMIC_INFO_KNOWN_FIELDS, ze as COMIC_INFO_MANGA_VALUES, be as KOBO_DISPLAY_OPTIONS_FILENAME, i as arrayBufferFileAccessors, r as blobFileAccessors, e as createArchive, v as createArchiveFromArrayBufferList, n as createArchiveFromEntries, y as createArchiveFromText, b as createArchiveFromUrls, C as getArchiveFileRecordByUri, Re as getArchiveHasComicInfo, E as getArchiveImageRecords, O as getArchiveOpfInfo, Ue as getSpineItemFilesFromArchive, Zt as gtinIdentifierValue, Ge as isArchiveEpub, Be as isComicInfoManga, S as isDirectoryRecord, x as isFileRecord, T as isImageRecord, Jt as isIsbnBearingScheme, Xt as isbnIdentifierValue, Qt as mainTitle, Y as normalizeGtin, ft as normalizeIsbn, me as parseAppleDisplayOptionsXml, ye as parseComicInfo, Se as parseKoboXml, fe as parseOpf, ht as parseW3cDtfDate, Ie as readArchiveApple, Ve as readArchiveComicInfo, He as readArchiveKobo, z as readArchiveOpf, D as readRecordAsText, Pe as readingOrderDocumentsAllHaveViewport, qt as resolveArchive, Me as resolveArchiveCover, jt as resolveArchiveMetadata, U as resolveArchiveReadingOrder, Ht as resolveArchiveToc, Mt as resolveMetadata, k as tokenizeXmlSpaceSeparatedList };
1150
+ export { me as APPLE_IBOOKS_DISPLAY_OPTIONS_FILENAME, z as COMIC_INFO_FILENAME, _e as COMIC_INFO_KNOWN_FIELDS, Ve as COMIC_INFO_MANGA_VALUES, Se as KOBO_DISPLAY_OPTIONS_FILENAME, bn as METADATA_CATALOG_SCHEMES, i as arrayBufferFileAccessors, r as blobFileAccessors, Cn as catalogIdentifierFromUrl, wn as catalogUrlFromIdentifier, e as createArchive, v as createArchiveFromArrayBufferList, n as createArchiveFromEntries, y as createArchiveFromText, b as createArchiveFromUrls, C as getArchiveFileRecordByUri, Be as getArchiveHasComicInfo, E as getArchiveImageRecords, O as getArchiveOpfInfo, Ge as getSpineItemFilesFromArchive, kn as identifierValue, qe as isArchiveEpub, He as isComicInfoManga, S as isDirectoryRecord, x as isFileRecord, T as isImageRecord, En as isIsbnBearingScheme, Sn as isMetadataCatalogScheme, An as mainTitle, _t as normalizeGtin, mt as normalizeIsbn, ge as parseAppleDisplayOptionsXml, xe as parseComicInfo, we as parseKoboXml, pe as parseOpf, vt as parseW3cDtfDate, Re as readArchiveApple, Ue as readArchiveComicInfo, We as readArchiveKobo, R as readArchiveOpf, D as readRecordAsText, Ie as readingOrderDocumentsAllHaveViewport, Zt as resolveArchive, Pe as resolveArchiveCover, Ft as resolveArchiveMetadata, V as resolveArchiveReadingOrder, Kt as resolveArchiveToc, It as resolveMetadata, k as tokenizeXmlSpaceSeparatedList };
1012
1151
 
1013
1152
  //# sourceMappingURL=index.js.map