@prose-reader/archive-reader 1.337.0 → 1.338.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (65) hide show
  1. package/dist/apple/readArchiveApple.d.ts +2 -2
  2. package/dist/apple/resolve.d.ts +2 -2
  3. package/dist/archives/createArchive.d.ts +1 -1
  4. package/dist/archives/createArchiveFromArrayBufferList.d.ts +1 -1
  5. package/dist/archives/createArchiveFromEntries.d.ts +1 -1
  6. package/dist/archives/createArchiveFromJszip/index.cjs.map +1 -1
  7. package/dist/archives/createArchiveFromJszip/index.js +1 -1
  8. package/dist/archives/createArchiveFromJszip/index.js.map +1 -1
  9. package/dist/archives/createArchiveFromJszip.d.ts +1 -1
  10. package/dist/archives/createArchiveFromLibArchive/index.cjs.map +1 -1
  11. package/dist/archives/createArchiveFromLibArchive/index.js +1 -1
  12. package/dist/archives/createArchiveFromLibArchive/index.js.map +1 -1
  13. package/dist/archives/createArchiveFromLibArchive.d.ts +1 -1
  14. package/dist/archives/createArchiveFromNodeUnrarJs/index.cjs.map +1 -1
  15. package/dist/archives/createArchiveFromNodeUnrarJs/index.js +1 -1
  16. package/dist/archives/createArchiveFromNodeUnrarJs/index.js.map +1 -1
  17. package/dist/archives/createArchiveFromNodeUnrarJs.d.ts +1 -1
  18. package/dist/archives/createArchiveFromText.d.ts +1 -1
  19. package/dist/archives/createArchiveFromUnzipper/index.cjs.map +1 -1
  20. package/dist/archives/createArchiveFromUnzipper/index.js +1 -1
  21. package/dist/archives/createArchiveFromUnzipper/index.js.map +1 -1
  22. package/dist/archives/createArchiveFromUnzipper.d.ts +1 -1
  23. package/dist/archives/createArchiveFromUrls.d.ts +1 -1
  24. package/dist/archives/createArchiveFromZipJs/index.cjs.map +1 -1
  25. package/dist/archives/createArchiveFromZipJs/index.js +1 -1
  26. package/dist/archives/createArchiveFromZipJs/index.js.map +1 -1
  27. package/dist/archives/createArchiveFromZipJs.d.ts +1 -1
  28. package/dist/archives/fileAccessors.d.ts +1 -1
  29. package/dist/archives/images.d.ts +1 -1
  30. package/dist/archives/readRecordAsText.d.ts +1 -1
  31. package/dist/comicInfo/getArchiveHasComicInfo.d.ts +1 -1
  32. package/dist/comicInfo/parse.d.ts +1 -1
  33. package/dist/comicInfo/readArchiveComicInfo.d.ts +2 -2
  34. package/dist/comicInfo/resolve.d.ts +2 -2
  35. package/dist/cover/resolveArchiveCover.d.ts +4 -4
  36. package/dist/{createArchiveFromEntries-CFG3evXM.js → createArchiveFromEntries-BiBoi26P.js} +1 -3
  37. package/dist/createArchiveFromEntries-BiBoi26P.js.map +1 -0
  38. package/dist/createArchiveFromEntries-DcPCGgZW.cjs.map +1 -1
  39. package/dist/fileAccessors-DWVChFUB.cjs.map +1 -1
  40. package/dist/fileAccessors-etcCPnpQ.js.map +1 -1
  41. package/dist/index/index.cjs +1 -1
  42. package/dist/index/index.cjs.map +1 -1
  43. package/dist/index/index.js +159 -156
  44. package/dist/index/index.js.map +1 -1
  45. package/dist/index.d.ts +50 -50
  46. package/dist/kobo/readArchiveKobo.d.ts +2 -2
  47. package/dist/kobo/resolve.d.ts +2 -2
  48. package/dist/layout/scanReadingOrderDocumentsViewport.d.ts +2 -2
  49. package/dist/opf/getArchiveOpfInfo.d.ts +2 -2
  50. package/dist/opf/getSpineItemFilesFromArchive.d.ts +3 -3
  51. package/dist/opf/isArchiveEpub.d.ts +1 -1
  52. package/dist/opf/parse.d.ts +2 -0
  53. package/dist/opf/readArchiveOpf.d.ts +2 -2
  54. package/dist/opf/resolve.d.ts +2 -2
  55. package/dist/readingOrder/resolveArchiveReadingOrder.d.ts +2 -2
  56. package/dist/resolve.d.ts +5 -5
  57. package/dist/resolveArchive.d.ts +8 -8
  58. package/dist/resolveMetadata.d.ts +5 -5
  59. package/dist/toc/folders.d.ts +2 -2
  60. package/dist/toc/nav.d.ts +3 -3
  61. package/dist/toc/ncx.d.ts +3 -3
  62. package/dist/toc/resolveArchiveToc.d.ts +3 -3
  63. package/dist/types/resolvedMetadata.d.ts +1 -0
  64. package/package.json +10 -3
  65. package/dist/createArchiveFromEntries-CFG3evXM.js.map +0 -1
@@ -1,4 +1,4 @@
1
- import { n as e, r as t, t as n } from "../createArchiveFromEntries-CFG3evXM.js";
1
+ import { n as e, r as t, t as n } from "../createArchiveFromEntries-BiBoi26P.js";
2
2
  import { n as r, t as i } from "../fileAccessors-etcCPnpQ.js";
3
3
  import { XmlDocument as a, XmlElement as o, XmlTextNode as s } from "xmldoc";
4
4
  import { createXmlSafeIdFactory as c, detectMimeTypeFromName as l, escapeXmlAttributeValue as u, getUriBasePath as d, getUriBasename as f, isMediaContentMimeType as p, isXmlBasedMimeType as m, parseContentType as h, sortByTitleComparator as g, urlJoin as _ } from "@prose-reader/shared";
@@ -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
+ }, O = { displayOptions: "apple.options" }, k = (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
+ }, ee = 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
+ }), te = 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
+ }, ne = 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
- }, ae = (e) => h(e.encodingFormat ?? "") || l(e.basename), O = (e) => S(e) && ae(e)?.startsWith("image/") === !0, oe = (e) => e.records.filter(S).filter(O), k = "ComicInfo.xml", se = /* @__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("."), ce = /* @__PURE__ */ new Set(["Pages", "ComicInfo"]), le = (e) => e.children.some((e) => e.type === "element"), ue = (e) => {
127
+ }, re = (e) => h(e.encodingFormat ?? "") || l(e.basename), A = (e) => S(e) && re(e)?.startsWith("image/") === !0, ie = (e) => e.records.filter(S).filter(A), j = "ComicInfo.xml", ae = /* @__PURE__ */ "AgeRating.AlternateCount.AlternateNumber.AlternateSeries.BlackAndWhite.Characters.Colorist.CommunityRating.Count.CoverArtist.Day.Editor.Format.Genre.GTIN.Imprint.Inker.LanguageISO.Letterer.Locations.MainCharacterOrTeam.Manga.Month.Notes.Number.PageCount.Penciller.Publisher.Review.ScanInformation.Series.SeriesGroup.StoryArc.StoryArcNumber.Summary.Tags.Teams.Title.Translator.Volume.Web.Writer.Year".split("."), oe = /* @__PURE__ */ new Set(["Pages", "ComicInfo"]), se = (e) => e.children.some((e) => e.type === "element"), ce = (e) => {
128
128
  let t = e.val.trim();
129
129
  return t.length > 0 ? t : void 0;
130
- }, de = (e) => {
130
+ }, le = (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(`${k} is malformed: ${t}`, { cause: e });
136
+ throw Error(`${j} is malformed: ${t}`, { cause: e });
137
137
  }
138
138
  let n = {};
139
139
  return t.eachChild((e) => {
140
- if (e.type !== "element" || ce.has(e.name) || le(e)) return;
141
- let t = ue(e);
140
+ if (e.type !== "element" || oe.has(e.name) || se(e)) return;
141
+ let t = ce(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
- }, fe = k.toLowerCase(), pe = (e) => e.records.find((e) => S(e) && e.basename.toLowerCase() === fe), A = [
147
+ }, ue = j.toLowerCase(), de = (e) => e.records.find((e) => S(e) && e.basename.toLowerCase() === ue), fe = [
148
148
  "Unknown",
149
149
  "No",
150
150
  "Yes",
151
151
  "YesAndRightToLeft"
152
- ], me = (e) => {
153
- for (let t of A) if (t === e) return !0;
152
+ ], pe = (e) => {
153
+ for (let t of fe) if (t === e) return !0;
154
154
  return !1;
155
155
  };
156
156
  //#endregion
157
157
  //#region src/comicInfo/readArchiveComicInfo.ts
158
- async function he(e) {
159
- let t = pe(e);
160
- if (t) return de(await x(t));
158
+ async function M(e) {
159
+ let t = de(e);
160
+ if (t) return le(await x(t));
161
161
  }
162
162
  //#endregion
163
163
  //#region src/utils/normalizeGtin.ts
164
- var ge = /* @__PURE__ */ new Set([
164
+ var me = /* @__PURE__ */ new Set([
165
165
  8,
166
166
  12,
167
167
  13,
168
168
  14
169
- ]), j = (e) => {
169
+ ]), N = (e) => {
170
170
  if (e == null) return;
171
171
  let t = String(e).replace(/\D/g, "");
172
- if (!(t.length === 0 || !ge.has(t.length))) return t;
173
- }, _e = /(?:97[89])?\d{9}[\dXx]/, M = (e) => {
172
+ if (!(t.length === 0 || !me.has(t.length))) return t;
173
+ }, he = /(?:97[89])?\d{9}[\dXx]/, P = (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(_e);
177
+ let r = t.match(he);
178
178
  if (r) return r[0].toUpperCase();
179
- }, ve = {
179
+ }, ge = {
180
180
  AgeRating: "comic.ageRating",
181
181
  AlternateCount: "comic.alternateSeries",
182
182
  AlternateNumber: "comic.alternateSeries",
@@ -220,46 +220,46 @@ var ge = /* @__PURE__ */ new Set([
220
220
  Web: "comic.web",
221
221
  Writer: "contributors",
222
222
  Year: "published"
223
- }, ye = (e) => {
223
+ }, _e = (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
- }, N = (e) => {
230
+ }, F = (e) => {
231
231
  if (e === void 0) return;
232
232
  let t = e.trim();
233
233
  return t.length > 0 ? t : void 0;
234
- }, P = (e) => e === void 0 ? [] : e.split(",").map((e) => e.trim()).filter((e) => e.length > 0), F = (e) => {
235
- let t = N(e);
234
+ }, I = (e) => e === void 0 ? [] : e.split(",").map((e) => e.trim()).filter((e) => e.length > 0), L = (e) => {
235
+ let t = F(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
- }, I = (e) => {
240
- let t = N(e);
239
+ }, R = (e) => {
240
+ let t = F(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
- }, be = (e) => {
245
- let t = N(e)?.toLowerCase();
244
+ }, ve = (e) => {
245
+ let t = F(e)?.toLowerCase();
246
246
  if (t === "yes") return !0;
247
247
  if (t === "no") return !1;
248
- }, xe = (e) => {
248
+ }, ye = (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
- }, Se = (e) => {
256
- let t = F(e.Year), n = F(e.Month), r = F(e.Day);
255
+ }, be = (e) => {
256
+ let t = L(e.Year), n = L(e.Month), r = L(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
- }, Ce = [
262
+ }, xe = [
263
263
  ["Writer", "author"],
264
264
  ["Penciller", "penciler"],
265
265
  ["Inker", "inker"],
@@ -268,9 +268,9 @@ var ge = /* @__PURE__ */ new Set([
268
268
  ["CoverArtist", "coverArtist"],
269
269
  ["Editor", "editor"],
270
270
  ["Translator", "translator"]
271
- ], we = (e) => {
271
+ ], Se = (e) => {
272
272
  let t = /* @__PURE__ */ new Map();
273
- for (let [n, r] of Ce) for (let i of P(e[n])) {
273
+ for (let [n, r] of xe) for (let i of I(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,84 +278,84 @@ var ge = /* @__PURE__ */ new Set([
278
278
  });
279
279
  }
280
280
  return [...t.values()];
281
- }, Te = (e) => {
282
- let t = N(e.Series);
281
+ }, Ce = (e) => {
282
+ let t = F(e.Series);
283
283
  if (t !== void 0) return D({
284
284
  name: t,
285
- position: I(e.Number),
286
- total: F(e.Count)
285
+ position: R(e.Number),
286
+ total: L(e.Count)
287
287
  });
288
- }, Ee = (e) => {
289
- let t = N(e.AlternateSeries);
288
+ }, we = (e) => {
289
+ let t = F(e.AlternateSeries);
290
290
  if (t !== void 0) return D({
291
291
  name: t,
292
- position: I(e.AlternateNumber),
293
- total: F(e.AlternateCount)
292
+ position: R(e.AlternateNumber),
293
+ total: L(e.AlternateCount)
294
294
  });
295
- }, De = (e) => {
296
- let t = P(e.StoryArc);
295
+ }, Te = (e) => {
296
+ let t = I(e.StoryArc);
297
297
  if (t.length === 0) return [];
298
- let n = P(e.StoryArcNumber);
298
+ let n = I(e.StoryArcNumber);
299
299
  return t.map((e, t) => D({
300
300
  name: e,
301
- position: I(n[t])
301
+ position: R(n[t])
302
302
  }));
303
- }, L = (e) => e.length > 0 ? e : void 0, Oe = (e) => {
304
- let t = L((e.Web ?? "").split(/\s+/).filter((e) => e.length > 0)), n = D({
305
- manga: xe(e),
306
- blackAndWhite: be(e.BlackAndWhite),
307
- volume: F(e.Volume),
308
- format: N(e.Format),
309
- ageRating: N(e.AgeRating),
310
- communityRating: I(e.CommunityRating),
311
- notes: N(e.Notes),
312
- review: N(e.Review),
303
+ }, z = (e) => e.length > 0 ? e : void 0, Ee = (e) => {
304
+ let t = z((e.Web ?? "").split(/\s+/).filter((e) => e.length > 0)), n = D({
305
+ manga: ye(e),
306
+ blackAndWhite: ve(e.BlackAndWhite),
307
+ volume: L(e.Volume),
308
+ format: F(e.Format),
309
+ ageRating: F(e.AgeRating),
310
+ communityRating: R(e.CommunityRating),
311
+ notes: F(e.Notes),
312
+ review: F(e.Review),
313
313
  web: t,
314
- scanInformation: N(e.ScanInformation),
315
- mainCharacterOrTeam: N(e.MainCharacterOrTeam),
316
- characters: L(P(e.Characters)),
317
- teams: L(P(e.Teams)),
318
- locations: L(P(e.Locations)),
319
- storyArcs: L(De(e)),
320
- alternateSeries: Ee(e)
314
+ scanInformation: F(e.ScanInformation),
315
+ mainCharacterOrTeam: F(e.MainCharacterOrTeam),
316
+ characters: z(I(e.Characters)),
317
+ teams: z(I(e.Teams)),
318
+ locations: z(I(e.Locations)),
319
+ storyArcs: z(Te(e)),
320
+ alternateSeries: we(e)
321
321
  });
322
322
  return Object.keys(n).length > 0 ? n : void 0;
323
- }, ke = (e) => {
324
- let t = Te(e), n = L(P(e.SeriesGroup).map((e) => ({ name: e })));
323
+ }, De = (e) => {
324
+ let t = Ce(e), n = z(I(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
- }, R = (e) => {
330
- let t = e.GTIN, n = N(t), r = N(e.LanguageISO), i = [...P(e.Genre), ...P(e.Tags)];
329
+ }, B = (e) => {
330
+ let t = e.GTIN, n = F(t), r = F(e.LanguageISO), i = [...I(e.Genre), ...I(e.Tags)];
331
331
  return D({
332
- title: N(e.Title),
333
- description: N(e.Summary),
334
- publisher: N(e.Publisher),
335
- imprint: N(e.Imprint),
332
+ title: F(e.Title),
333
+ description: F(e.Summary),
334
+ publisher: F(e.Publisher),
335
+ imprint: F(e.Imprint),
336
336
  languages: r === void 0 ? void 0 : [r],
337
- subjects: L(i),
338
- contributors: L(we(e)),
339
- published: Se(e),
340
- readingDirection: ye(e),
341
- numberOfPages: F(e.PageCount),
342
- gtin: j(t),
343
- isbn: M(t),
337
+ subjects: z(i),
338
+ contributors: z(Se(e)),
339
+ published: be(e),
340
+ readingDirection: _e(e),
341
+ numberOfPages: L(e.PageCount),
342
+ gtin: N(t),
343
+ isbn: P(t),
344
344
  identifiers: n === void 0 ? void 0 : [{
345
345
  value: n,
346
346
  scheme: "GTIN"
347
347
  }],
348
- belongsTo: ke(e),
349
- comic: Oe(e)
348
+ belongsTo: De(e),
349
+ comic: Ee(e)
350
350
  });
351
- }, z = (e) => {
351
+ }, V = (e) => {
352
352
  let t = e.records.filter((e) => !e.dir).find((e) => e.uri.endsWith(".opf"));
353
353
  return {
354
354
  data: t,
355
355
  basePath: t?.uri.substring(0, t.uri.lastIndexOf("/")) || ""
356
356
  };
357
- }, B = (e) => e === void 0 || e.trim().length === 0 ? [] : e.trim().split(/\s+/).filter((e) => e.length > 0), Ae = (e) => {
358
- let t = B(e);
357
+ }, H = (e) => e === void 0 || e.trim().length === 0 ? [] : e.trim().split(/\s+/).filter((e) => e.length > 0), Oe = (e) => {
358
+ let t = H(e);
359
359
  if (t.length === 0) return {};
360
360
  let n;
361
361
  t.includes("rendition:layout-reflowable") && (n = "reflowable"), t.includes("rendition:layout-pre-paginated") && (n = "pre-paginated");
@@ -366,47 +366,49 @@ var ge = /* @__PURE__ */ new Set([
366
366
  ...t.includes("page-spread-left") ? { pageSpreadLeft: !0 } : {},
367
367
  ...t.includes("page-spread-right") ? { pageSpreadRight: !0 } : {}
368
368
  };
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;
369
+ }, U = (e) => e.includes(":") ? e.slice(e.lastIndexOf(":") + 1) : e, ke = (e, t) => U(e).toLowerCase() === t.toLowerCase(), Ae = (e) => e.type === "element", W = (e, t) => {
370
+ for (let n of e.children) if (Ae(n) && ke(n.name, t)) return n;
371
371
  }, G = (e, t) => {
372
372
  let n = [];
373
- for (let r of e.children) U(r) && H(r.name, t) && n.push(r);
373
+ for (let r of e.children) Ae(r) && ke(r.name, t) && n.push(r);
374
374
  return n;
375
- }, je = (e) => {
376
- let t = [];
375
+ }, je = (e, t) => {
376
+ let n = [];
377
377
  return e.eachChild((e) => {
378
- if (V(e.name).toLowerCase() !== "identifier") return;
379
- let n = e.val.trim();
380
- if (n.length === 0) return;
381
- let r = (e.attr["opf:scheme"] ?? e.attr["opf:Scheme"] ?? e.attr.scheme)?.trim();
382
- t.push({
383
- value: n,
384
- ...r !== void 0 && r.length > 0 ? { scheme: r } : {}
378
+ if (U(e.name).toLowerCase() !== "identifier") return;
379
+ let r = e.val.trim();
380
+ if (r.length === 0) return;
381
+ let i = (e.attr["opf:scheme"] ?? e.attr["opf:Scheme"] ?? e.attr.scheme)?.trim(), a = e.attr.id?.trim(), o = a !== void 0 && a.length > 0 ? a : void 0;
382
+ n.push({
383
+ value: r,
384
+ ...i !== void 0 && i.length > 0 ? { scheme: i } : {},
385
+ ...o === void 0 ? {} : { id: o },
386
+ ...o !== void 0 && o === t ? { unique: !0 } : {}
385
387
  });
386
- }), t;
388
+ }), n;
387
389
  }, K = (e, t) => {
388
390
  let n;
389
391
  return e.eachChild((e) => {
390
- if (n !== void 0 || V(e.name).toLowerCase() !== t.toLowerCase()) return;
392
+ if (n !== void 0 || U(e.name).toLowerCase() !== t.toLowerCase()) return;
391
393
  let r = e.val.trim();
392
394
  r.length > 0 && (n = r);
393
395
  }), n;
394
396
  }, q = (e, t) => {
395
397
  let n = [];
396
398
  return e.eachChild((e) => {
397
- if (V(e.name).toLowerCase() !== t.toLowerCase()) return;
399
+ if (U(e.name).toLowerCase() !== t.toLowerCase()) return;
398
400
  let r = e.val.trim();
399
401
  r.length > 0 && n.push(r);
400
402
  }), n;
401
403
  }, Me = (e) => {
402
404
  let t;
403
405
  return e.eachChild((e) => {
404
- if (t !== void 0 || V(e.name).toLowerCase() !== "meta" || e.attr.name?.toLowerCase() !== "cover") return;
406
+ if (t !== void 0 || U(e.name).toLowerCase() !== "meta" || e.attr.name?.toLowerCase() !== "cover") return;
405
407
  let n = e.attr.content?.trim();
406
408
  n !== void 0 && n.length > 0 && (t = n);
407
409
  }), t;
408
410
  }, Ne = ({ 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);
411
+ let n = (e) => e.mediaType?.toLowerCase().includes("image/") === !0, r = e.find((e) => n(e) ? H(e.properties).includes("cover-image") : !1);
410
412
  if (r !== void 0) return r.href;
411
413
  if (t !== void 0) {
412
414
  let r = Me(t);
@@ -422,7 +424,7 @@ var ge = /* @__PURE__ */ new Set([
422
424
  }, Pe = (e) => {
423
425
  let t = [];
424
426
  return e.eachChild((e) => {
425
- if (V(e.name).toLowerCase() !== "meta") return;
427
+ if (U(e.name).toLowerCase() !== "meta") return;
426
428
  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 = {
427
429
  ...n === void 0 ? {} : { property: n },
428
430
  ...r === void 0 ? {} : { refines: r },
@@ -437,7 +439,7 @@ var ge = /* @__PURE__ */ new Set([
437
439
  }, Fe = (e, t) => e.replace(/^#/, "") === t, Ie = (e, t) => {
438
440
  let n = [];
439
441
  return e.eachChild((e) => {
440
- let r = V(e.name).toLowerCase();
442
+ let r = U(e.name).toLowerCase();
441
443
  if (r !== "creator" && r !== "contributor") return;
442
444
  let i = e.val.trim();
443
445
  if (i.length === 0) return;
@@ -493,7 +495,7 @@ var ge = /* @__PURE__ */ new Set([
493
495
  if (t === void 0 || t.trim().length === 0) continue;
494
496
  let i = e.get(t);
495
497
  if (i === void 0) continue;
496
- let a = Ae(r.attr.properties);
498
+ let a = Oe(r.attr.properties);
497
499
  n.push({
498
500
  idref: t,
499
501
  id: i.id,
@@ -507,63 +509,63 @@ var ge = /* @__PURE__ */ new Set([
507
509
  });
508
510
  }
509
511
  return n;
510
- }, Ve = (e) => {
511
- let t = new a(e), n = W(t, "manifest"), r = W(t, "spine"), i = W(t, "metadata"), o = [], s = [];
512
+ }, X = (e) => {
513
+ let t = new a(e), n = W(t, "manifest"), r = W(t, "spine"), i = W(t, "metadata"), o = t.attr["unique-identifier"]?.trim(), s = o !== void 0 && o.length > 0 ? o : void 0, c = [], l = [];
512
514
  if (n !== void 0) {
513
515
  let { items: e, byId: t } = ze(n);
514
- o = e, r !== void 0 && (s = Be(t, r));
516
+ c = e, r !== void 0 && (l = Be(t, r));
515
517
  }
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 = [];
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 = Pe(i), v = Ie(i, w), T.push(...je(i)));
518
- let E = Ne({
519
- manifestItems: o,
518
+ let u = r?.attr["page-progression-direction"], d = u !== void 0 && u.trim().length > 0 ? u : void 0, f = r?.attr.toc, p = f !== void 0 && f.trim().length > 0 ? f.trim() : void 0, m, h, g, _, v, y = [], b = [], x = [], S = [], C, w, T, E = [], D = [];
519
+ i !== void 0 && (m = K(i, "title"), h = K(i, "publisher"), g = K(i, "description"), _ = K(i, "rights"), v = K(i, "date"), y = q(i, "creator"), x = q(i, "language"), S = q(i, "subject"), C = Y(i, "rendition:layout"), w = Y(i, "rendition:flow"), T = Y(i, "rendition:spread"), E = Pe(i), b = Ie(i, E), D.push(...je(i, s)));
520
+ let O = Ne({
521
+ manifestItems: c,
520
522
  metadataEl: i
521
- }), D = Le(t);
523
+ }), k = Le(t);
522
524
  return {
523
525
  kind: "opf",
524
- manifestItems: o,
525
- spineRows: s,
526
- spineTocIdref: d,
527
- identifiers: T,
528
- title: f,
529
- creators: _,
530
- contributors: v,
531
- publisher: p,
532
- description: m,
533
- rights: h,
534
- languages: y,
535
- subjects: b,
536
- date: g,
537
- coverHref: E,
538
- renditionLayoutMeta: x,
539
- renditionFlowMeta: S,
540
- renditionSpreadMeta: C,
541
- pageProgressionDirection: l,
542
- guide: D,
543
- metas: w
526
+ manifestItems: c,
527
+ spineRows: l,
528
+ spineTocIdref: p,
529
+ identifiers: D,
530
+ title: m,
531
+ creators: y,
532
+ contributors: b,
533
+ publisher: h,
534
+ description: g,
535
+ rights: _,
536
+ languages: x,
537
+ subjects: S,
538
+ date: v,
539
+ coverHref: O,
540
+ renditionLayoutMeta: C,
541
+ renditionFlowMeta: w,
542
+ renditionSpreadMeta: T,
543
+ pageProgressionDirection: d,
544
+ guide: k,
545
+ metas: E
544
546
  };
545
547
  };
546
548
  //#endregion
547
549
  //#region src/opf/readArchiveOpf.ts
548
- async function X(e) {
549
- let { data: t, basePath: n } = z(e) || {};
550
+ async function Z(e) {
551
+ let { data: t, basePath: n } = V(e) || {};
550
552
  if (!(!t || t.dir)) return {
551
- opf: Ve(await x(t)),
553
+ opf: X(await x(t)),
552
554
  basePath: n
553
555
  };
554
556
  }
555
557
  //#endregion
556
558
  //#region src/kobo/parse.ts
557
- var He = "com.kobobooks.display-options.xml", Ue = (e) => {
559
+ var Ve = "com.kobobooks.display-options.xml", He = (e) => {
558
560
  let t = e.childNamed("platform");
559
561
  if (!t) return {};
560
562
  for (let e of t.childrenNamed("option")) if (e.attr?.name === "fixed-layout") return e.val.trim().toLowerCase() === "true" ? { renditionLayout: "pre-paginated" } : {};
561
563
  return {};
562
- }, Z = (e) => {
564
+ }, Ue = (e) => {
563
565
  let t = new a(e);
564
566
  return t.name?.toLowerCase() === "display_options" ? {
565
567
  kind: "kobo",
566
- ...Ue(t)
568
+ ...He(t)
567
569
  } : { kind: "kobo" };
568
570
  }, We = (e) => {
569
571
  let t = [];
@@ -598,7 +600,7 @@ var He = "com.kobobooks.display-options.xml", Ue = (e) => {
598
600
  pageSpreadRight: e.pageSpreadRight,
599
601
  progressionWeight: a > 0 ? (i?.size ?? 0) / a : 1 / t.spineRows.length
600
602
  }));
601
- }, Je = k.toLowerCase(), Ye = v.toLowerCase(), Xe = (e) => {
603
+ }, Je = j.toLowerCase(), Ye = v.toLowerCase(), Xe = (e) => {
602
604
  let t = e.basename.toLowerCase();
603
605
  return t === Je || t === Ye || e.uri.endsWith("com.kobobooks.display-options.xml") || t.endsWith(".db");
604
606
  }, Ze = (e) => {
@@ -614,13 +616,13 @@ var He = "com.kobobooks.display-options.xml", Ue = (e) => {
614
616
  });
615
617
  });
616
618
  }, Q = async (e, { opf: t } = {}) => {
617
- let n = t ?? await X(e).catch(() => void 0);
619
+ let n = t ?? await Z(e).catch(() => void 0);
618
620
  return n ? qe(e, n) : Ze(e);
619
621
  }, Qe = (e, t) => {
620
622
  let n = w(e, t);
621
623
  if (n !== void 0) return h(n.encodingFormat ?? "") || l(n.basename);
622
624
  }, $e = async (e, { opf: t, readingOrder: n } = {}) => {
623
- let r = t ?? await X(e).catch(() => void 0);
625
+ let r = t ?? await Z(e).catch(() => void 0);
624
626
  if (r !== void 0 && r.opf.coverHref !== void 0) {
625
627
  let t = Ge(r.opf.coverHref, r.basePath);
626
628
  return D({
@@ -645,10 +647,10 @@ async function et(e) {
645
647
  for (let e of n) {
646
648
  let n = await x(e);
647
649
  try {
648
- let { renditionLayout: e } = Z(n);
650
+ let { renditionLayout: e } = Ue(n);
649
651
  e && (r = e);
650
652
  } catch (n) {
651
- t.error(`Unable to parse ${He} (${e.uri})`, n);
653
+ t.error(`Unable to parse ${Ve} (${e.uri})`, n);
652
654
  }
653
655
  }
654
656
  return {
@@ -716,8 +718,8 @@ var tt = { renditionLayout: "renditionLayout" }, nt = (e) => D({
716
718
  guide: "guide",
717
719
  metas: "properties"
718
720
  }, ut = (e) => {
719
- for (let t of e) if (t.scheme !== void 0 && t.scheme.trim().toLowerCase() === "isbn" && M(t.value) !== void 0) return t.value;
720
- for (let t of e) if (M(t.value) !== void 0) return t.value;
721
+ for (let t of e) if (t.scheme !== void 0 && t.scheme.trim().toLowerCase() === "isbn" && P(t.value) !== void 0) return t.value;
722
+ for (let t of e) if (P(t.value) !== void 0) return t.value;
721
723
  }, dt = {
722
724
  art: "artist",
723
725
  aut: "author",
@@ -784,17 +786,18 @@ var tt = { renditionLayout: "renditionLayout" }, nt = (e) => D({
784
786
  renditionLayout: i,
785
787
  renditionFlow: gt(e.renditionFlowMeta),
786
788
  renditionSpread: _t(e.renditionSpreadMeta),
787
- gtin: j(a),
788
- isbn: M(a),
789
- identifiers: e.identifiers.length > 0 ? e.identifiers.map(({ value: e, scheme: t }) => D({
789
+ gtin: N(a),
790
+ isbn: P(a),
791
+ identifiers: e.identifiers.length > 0 ? e.identifiers.map(({ value: e, scheme: t, unique: n }) => D({
790
792
  value: e,
791
- scheme: t
793
+ scheme: t,
794
+ unique: n
792
795
  })) : void 0,
793
796
  belongsTo: l,
794
797
  properties: e.metas.length > 0 ? [...e.metas] : void 0
795
798
  });
796
- }, yt = (e) => e.kind === "comicInfo" ? R(e) : e.kind === "kobo" ? nt(e) : e.kind === "apple" ? te(e) : vt(e), bt = (e) => {
797
- let t = e.opf === void 0 ? void 0 : vt(e.opf), n = e.comicInfo === void 0 ? void 0 : R(e.comicInfo), r = e.apple === void 0 ? void 0 : te(e.apple), i = e.kobo === void 0 ? void 0 : nt(e.kobo), a = [...t?.identifiers ?? [], ...n?.identifiers ?? []];
799
+ }, yt = (e) => e.kind === "comicInfo" ? B(e) : e.kind === "kobo" ? nt(e) : e.kind === "apple" ? k(e) : vt(e), bt = (e) => {
800
+ let t = e.opf === void 0 ? void 0 : vt(e.opf), n = e.comicInfo === void 0 ? void 0 : B(e.comicInfo), r = e.apple === void 0 ? void 0 : k(e.apple), i = e.kobo === void 0 ? void 0 : nt(e.kobo), a = [...t?.identifiers ?? [], ...n?.identifiers ?? []];
798
801
  return D({
799
802
  title: t?.title ?? n?.title,
800
803
  description: t?.description ?? n?.description,
@@ -848,7 +851,7 @@ var tt = { renditionLayout: "renditionLayout" }, nt = (e) => D({
848
851
  let a = encodeURI(t.uri).replace(/#/g, "%23").replace(/\?/g, "%3F").replace(/\/$/, ""), o = t.uri.replace(/\/$/, "");
849
852
  return n(e, r, i, a, o);
850
853
  }, []);
851
- }, St = (e) => e ? e.children.map((e) => e instanceof s ? e.text : e instanceof o ? St(e) : "").join("").trim() : "", Ct = (e) => B(e.properties).includes("nav"), wt = (e, { basePath: t }) => {
854
+ }, St = (e) => e ? e.children.map((e) => e instanceof s ? e.text : e instanceof o ? St(e) : "").join("").trim() : "", Ct = (e) => H(e.properties).includes("nav"), wt = (e, { basePath: t }) => {
852
855
  let n = {
853
856
  contents: [],
854
857
  path: "",
@@ -904,7 +907,7 @@ var tt = { renditionLayout: "renditionLayout" }, nt = (e) => D({
904
907
  }
905
908
  }
906
909
  }, At = async (e, { opf: t } = {}) => {
907
- let n = t ?? await X(e);
910
+ let n = t ?? await Z(e);
908
911
  if (n) return await Et(n.opf, e) || await kt({
909
912
  opf: n.opf,
910
913
  opfBasePath: n.basePath,
@@ -935,7 +938,7 @@ var tt = { renditionLayout: "renditionLayout" }, nt = (e) => D({
935
938
  let a = [];
936
939
  return t !== void 0 && t.value === void 0 && (t.failed || st(e)) && a.push("opf"), n?.failed && a.push("comicInfo"), r?.failed && a.push("apple"), i?.failed && a.push("kobo"), a;
937
940
  }, Pt = 1, Ft = async (e, t = {}) => {
938
- let n = new Set(t.include ?? jt), 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 = c?.value, u = r || i || s, d = u ? await $(() => he(e), "comicInfo") : void 0, f = d?.value, p = u ? await $(() => E(e), "apple") : void 0, m = p?.value, h = u ? await $(() => et(e), "kobo") : void 0, g = h?.value, _ = r || s ? bt({
941
+ let n = new Set(t.include ?? jt), 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 $(() => M(e), "comicInfo") : void 0, f = d?.value, p = u ? await $(() => E(e), "apple") : void 0, m = p?.value, h = u ? await $(() => et(e), "kobo") : void 0, g = h?.value, _ = r || s ? bt({
939
942
  opf: l?.opf,
940
943
  comicInfo: f,
941
944
  apple: m,
@@ -976,6 +979,6 @@ var tt = { renditionLayout: "renditionLayout" }, nt = (e) => D({
976
979
  })), b;
977
980
  };
978
981
  //#endregion
979
- export { v as APPLE_IBOOKS_DISPLAY_OPTIONS_FILENAME, k as COMIC_INFO_FILENAME, se as COMIC_INFO_KNOWN_FIELDS, A as COMIC_INFO_MANGA_VALUES, He as KOBO_DISPLAY_OPTIONS_FILENAME, ee as appleMetadataHomes, i as arrayBufferFileAccessors, r as blobFileAccessors, ve as comicInfoMetadataHomes, e as createArchive, ne as createArchiveFromArrayBufferList, n as createArchiveFromEntries, re as createArchiveFromText, ie as createArchiveFromUrls, w as getArchiveFileRecordByUri, pe as getArchiveHasComicInfo, oe as getArchiveImageRecords, z as getArchiveOpfInfo, at as getSpineItemFilesFromArchive, st as isArchiveEpub, me as isComicInfoManga, C as isDirectoryRecord, S as isFileRecord, O as isImageRecord, tt as koboMetadataHomes, j as normalizeGtin, M as normalizeIsbn, lt as opfMetadataHomes, b as parseAppleDisplayOptionsXml, de as parseComicInfo, Z as parseKoboXml, Ve as parseOpf, ct as parseW3cDtfDate, E as readArchiveApple, he as readArchiveComicInfo, et as readArchiveKobo, X as readArchiveOpf, x as readRecordAsText, it as readingOrderDocumentsAllHaveViewport, Ft as resolveArchive, $e as resolveArchiveCover, yt as resolveArchiveMetadata, Q as resolveArchiveReadingOrder, At as resolveArchiveToc, bt as resolveMetadata, B as tokenizeXmlSpaceSeparatedList };
982
+ export { v as APPLE_IBOOKS_DISPLAY_OPTIONS_FILENAME, j as COMIC_INFO_FILENAME, ae as COMIC_INFO_KNOWN_FIELDS, fe as COMIC_INFO_MANGA_VALUES, Ve as KOBO_DISPLAY_OPTIONS_FILENAME, O as appleMetadataHomes, i as arrayBufferFileAccessors, r as blobFileAccessors, ge as comicInfoMetadataHomes, e as createArchive, ee as createArchiveFromArrayBufferList, n as createArchiveFromEntries, te as createArchiveFromText, ne as createArchiveFromUrls, w as getArchiveFileRecordByUri, de as getArchiveHasComicInfo, ie as getArchiveImageRecords, V as getArchiveOpfInfo, at as getSpineItemFilesFromArchive, st as isArchiveEpub, pe as isComicInfoManga, C as isDirectoryRecord, S as isFileRecord, A as isImageRecord, tt as koboMetadataHomes, N as normalizeGtin, P as normalizeIsbn, lt as opfMetadataHomes, b as parseAppleDisplayOptionsXml, le as parseComicInfo, Ue as parseKoboXml, X as parseOpf, ct as parseW3cDtfDate, E as readArchiveApple, M as readArchiveComicInfo, et as readArchiveKobo, Z as readArchiveOpf, x as readRecordAsText, it as readingOrderDocumentsAllHaveViewport, Ft as resolveArchive, $e as resolveArchiveCover, yt as resolveArchiveMetadata, Q as resolveArchiveReadingOrder, At as resolveArchiveToc, bt as resolveMetadata, H as tokenizeXmlSpaceSeparatedList };
980
983
 
981
984
  //# sourceMappingURL=index.js.map