@prose-reader/archive-reader 1.357.0 → 1.359.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.
@@ -88,17 +88,17 @@ var v = async (e, t = {}) => n(e, (e) => e.isDir ? {
88
88
  }, ...d],
89
89
  close: () => Promise.resolve()
90
90
  });
91
- }, x = (e) => !e.dir, S = (e) => e.dir, C = (e, t) => {
91
+ }, x = (e) => !e.dir, ee = (e) => e.dir, S = (e, t) => {
92
92
  let n = e.recordsByUri.get(t);
93
93
  return n && x(n) ? n : void 0;
94
- }, w = (e) => f(e.encodingFormat ?? "") || o(e.basename), T = (e) => x(e) && w(e)?.startsWith("image/") === !0, E = (e) => e.records.filter(x).filter(T), D = async (e) => new TextDecoder().decode(await e.arrayBuffer()), O = (e) => {
94
+ }, C = (e) => f(e.encodingFormat ?? "") || o(e.basename), w = (e) => x(e) && C(e)?.startsWith("image/") === !0, T = (e) => e.records.filter(x).filter(w), E = async (e) => new TextDecoder().decode(await e.arrayBuffer()), D = (e) => {
95
95
  let t = e.records.filter((e) => !e.dir).find((e) => e.uri.endsWith(".opf"));
96
96
  return {
97
97
  data: t,
98
98
  basePath: t?.uri.substring(0, t.uri.lastIndexOf("/")) || ""
99
99
  };
100
- }, k = (e) => e === void 0 || e.trim().length === 0 ? [] : e.trim().split(/\s+/).filter((e) => e.length > 0), A = (e) => {
101
- let t = k(e);
100
+ }, O = (e) => e === void 0 || e.trim().length === 0 ? [] : e.trim().split(/\s+/).filter((e) => e.length > 0), k = (e) => {
101
+ let t = O(e);
102
102
  if (t.length === 0) return {};
103
103
  let n;
104
104
  t.includes("rendition:layout-reflowable") && (n = "reflowable"), t.includes("rendition:layout-pre-paginated") && (n = "pre-paginated");
@@ -109,16 +109,16 @@ var v = async (e, t = {}) => n(e, (e) => e.isDir ? {
109
109
  ...t.includes("page-spread-left") ? { pageSpreadLeft: !0 } : {},
110
110
  ...t.includes("page-spread-right") ? { pageSpreadRight: !0 } : {}
111
111
  };
112
- }, j = (e) => e.includes(":") ? e.slice(e.lastIndexOf(":") + 1) : e, M = (e, t) => j(e).toLowerCase() === t.toLowerCase(), ee = (e) => e.type === "element", N = (e, t) => {
113
- for (let n of e.children) if (ee(n) && M(n.name, t)) return n;
114
- }, P = (e, t) => {
112
+ }, A = (e) => e.includes(":") ? e.slice(e.lastIndexOf(":") + 1) : e, j = (e, t) => A(e).toLowerCase() === t.toLowerCase(), te = (e) => e.type === "element", M = (e, t) => {
113
+ for (let n of e.children) if (te(n) && j(n.name, t)) return n;
114
+ }, N = (e, t) => {
115
115
  let n = [];
116
- for (let r of e.children) ee(r) && M(r.name, t) && n.push(r);
116
+ for (let r of e.children) te(r) && j(r.name, t) && n.push(r);
117
117
  return n;
118
- }, te = (e, t) => {
118
+ }, ne = (e, t) => {
119
119
  let n = [];
120
120
  return e.eachChild((e) => {
121
- if (j(e.name).toLowerCase() !== "identifier") return;
121
+ if (A(e.name).toLowerCase() !== "identifier") return;
122
122
  let r = e.val.trim();
123
123
  if (r.length === 0) return;
124
124
  let i = (e.attr["opf:scheme"] ?? e.attr["opf:Scheme"] ?? e.attr.scheme)?.trim(), a = e.attr.id?.trim(), o = a !== void 0 && a.length > 0 ? a : void 0;
@@ -129,10 +129,10 @@ var v = async (e, t = {}) => n(e, (e) => e.isDir ? {
129
129
  ...o !== void 0 && o === t ? { unique: !0 } : {}
130
130
  });
131
131
  }), n;
132
- }, ne = (e) => {
132
+ }, re = (e) => {
133
133
  let t = [];
134
134
  return e.eachChild((e) => {
135
- if (j(e.name).toLowerCase() !== "title") return;
135
+ if (A(e.name).toLowerCase() !== "title") return;
136
136
  let n = e.val.trim();
137
137
  if (n.length === 0) return;
138
138
  let r = e.attr.id?.trim();
@@ -141,46 +141,46 @@ var v = async (e, t = {}) => n(e, (e) => e.isDir ? {
141
141
  ...r !== void 0 && r.length > 0 ? { id: r } : {}
142
142
  });
143
143
  }), t;
144
- }, F = (e, t) => {
144
+ }, P = (e, t) => {
145
145
  let n;
146
146
  return e.eachChild((e) => {
147
- if (n !== void 0 || j(e.name).toLowerCase() !== t.toLowerCase()) return;
147
+ if (n !== void 0 || A(e.name).toLowerCase() !== t.toLowerCase()) return;
148
148
  let r = e.val.trim();
149
149
  r.length > 0 && (n = r);
150
150
  }), n;
151
- }, I = (e, t) => {
151
+ }, ie = (e, t) => {
152
152
  let n = [];
153
153
  return e.eachChild((e) => {
154
- if (j(e.name).toLowerCase() !== t.toLowerCase()) return;
154
+ if (A(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
+ }, ae = (e) => {
159
159
  let t;
160
160
  return e.eachChild((e) => {
161
- if (t !== void 0 || j(e.name).toLowerCase() !== "meta" || e.attr.name?.toLowerCase() !== "cover") return;
161
+ if (t !== void 0 || A(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 }) => {
166
- let n = (e) => e.mediaType?.toLowerCase().includes("image/") === !0, r = e.find((e) => n(e) ? k(e.properties).includes("cover-image") : !1);
165
+ }, oe = ({ manifestItems: e, metadataEl: t }) => {
166
+ let n = (e) => e.mediaType?.toLowerCase().includes("image/") === !0, r = e.find((e) => n(e) ? O(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 = ae(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
+ }, F = (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
+ }, se = (e) => {
180
180
  let t = [];
181
181
  return e.eachChild((e) => {
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 = {
182
+ if (A(e.name).toLowerCase() !== "meta") return;
183
+ let n = F(e, "property"), r = F(e, "refines"), i = F(e, "scheme"), a = F(e, "id"), o = F(e, "name"), s = F(e, "content"), c = e.val.trim(), l = c.length > 0 ? c : void 0, u = {
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
+ }, ce = (e, t) => e.replace(/^#/, "") === t, le = (e, t) => {
195
195
  let n = [];
196
196
  return e.eachChild((e) => {
197
- let r = j(e.name).toLowerCase();
197
+ let r = A(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 = F(e, "id"), o = (e) => a === void 0 ? [] : t.flatMap((t) => t.refines !== void 0 && ce(t.refines, a) && t.property === e && t.value !== void 0 ? [t.value] : []), s = F(e, "opf:role") ?? F(e, "role"), c = [...s === void 0 ? [] : [s], ...o("role")], l = F(e, "opf:file-as") ?? F(e, "file-as") ?? o("file-as")[0];
202
202
  n.push({
203
203
  name: i,
204
204
  source: r,
@@ -207,14 +207,14 @@ 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) => {
211
- let n = P(e, "meta").find((e) => e.attr.property === t)?.val;
210
+ }, I = (e, t) => {
211
+ let n = N(e, "meta").find((e) => e.attr.property === t)?.val;
212
212
  if (!(n === void 0 || n.trim().length === 0)) return n;
213
- }, ce = (e) => {
214
- let t = N(e, "guide");
213
+ }, ue = (e) => {
214
+ let t = M(e, "guide");
215
215
  if (t === void 0) return [];
216
216
  let n = [];
217
- for (let e of P(t, "reference")) {
217
+ for (let e of N(t, "reference")) {
218
218
  let t = e.attr.href?.trim();
219
219
  t === void 0 || t.length === 0 || n.push({
220
220
  href: t,
@@ -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
+ }, de = (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,24 +233,24 @@ 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
+ }, fe = (e) => {
237
237
  let t = [], n = /* @__PURE__ */ new Map();
238
- for (let r of P(e, "item")) {
239
- let e = le(r);
238
+ for (let r of N(e, "item")) {
239
+ let e = de(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
+ }, pe = (e, t) => {
247
247
  let n = [];
248
- for (let r of P(t, "itemref")) {
248
+ for (let r of N(t, "itemref")) {
249
249
  let t = r.attr.idref;
250
250
  if (t === void 0 || t.trim().length === 0) continue;
251
251
  let i = e.get(t);
252
252
  if (i === void 0) continue;
253
- let a = A(r.attr.properties);
253
+ let a = k(r.attr.properties);
254
254
  n.push({
255
255
  idref: t,
256
256
  id: i.id,
@@ -264,24 +264,24 @@ var v = async (e, t = {}) => n(e, (e) => e.isDir ? {
264
264
  });
265
265
  }
266
266
  return n;
267
- }, fe = (e) => {
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 = [];
267
+ }, me = (e) => {
268
+ let t = new h(e), n = M(t, "manifest"), r = M(t, "spine"), i = M(t, "metadata"), a = t.attr["unique-identifier"]?.trim(), o = a !== void 0 && a.length > 0 ? a : void 0, s = [], c = [];
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 } = fe(n);
271
+ s = e, r !== void 0 && (c = pe(t, r));
272
272
  }
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({
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 = [], ee = [], S, C, w, T = [], E = [];
274
+ i !== void 0 && (p = re(i), m = P(i, "publisher"), g = P(i, "description"), _ = P(i, "rights"), v = P(i, "date"), y = ie(i, "creator"), x = ie(i, "language"), ee = ie(i, "subject"), S = I(i, "rendition:layout"), C = I(i, "rendition:flow"), w = I(i, "rendition:spread"), T = se(i), b = le(i, T), E.push(...ne(i, o)));
275
+ let D = oe({
276
276
  manifestItems: s,
277
277
  metadataEl: i
278
- }), k = ce(t);
278
+ }), O = ue(t);
279
279
  return {
280
280
  kind: "opf",
281
281
  manifestItems: s,
282
282
  spineRows: c,
283
283
  spineTocIdref: f,
284
- identifiers: D,
284
+ identifiers: E,
285
285
  titles: p,
286
286
  creators: y,
287
287
  contributors: b,
@@ -289,74 +289,74 @@ var v = async (e, t = {}) => n(e, (e) => e.isDir ? {
289
289
  description: g,
290
290
  rights: _,
291
291
  languages: x,
292
- subjects: S,
292
+ subjects: ee,
293
293
  date: v,
294
- coverHref: O,
295
- renditionLayoutMeta: C,
296
- renditionFlowMeta: w,
297
- renditionSpreadMeta: T,
294
+ coverHref: D,
295
+ renditionLayoutMeta: S,
296
+ renditionFlowMeta: C,
297
+ renditionSpreadMeta: w,
298
298
  pageProgressionDirection: u,
299
- guide: k,
300
- metas: E
299
+ guide: O,
300
+ metas: T
301
301
  };
302
302
  };
303
303
  //#endregion
304
304
  //#region src/metadata/opf/readArchiveOpf.ts
305
- async function z(e) {
306
- let { data: t, basePath: n } = O(e) || {};
305
+ async function L(e) {
306
+ let { data: t, basePath: n } = D(e) || {};
307
307
  if (!(!t || t.dir)) return {
308
- opf: fe(await D(t)),
308
+ opf: me(await E(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 R = "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
- record: C(e, r)
378
+ record: S(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 = R.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,82 +404,82 @@ 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) => {
411
- let n = C(e, t);
407
+ }, V = async (e, { opf: t } = {}) => {
408
+ let n = t ?? await L(e).catch(() => void 0);
409
+ return n ? Oe(e, n) : Me(e);
410
+ }, Ne = (e, t) => {
411
+ let n = S(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 L(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({
436
436
  mimeType: r.mediaType,
437
437
  uri: r.uri
438
438
  })) return !1;
439
- let n = C(e, r.uri);
439
+ let n = S(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 E(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 = R.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 E(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 E(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
- let n = await D(e);
477
+ let n = await E(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,122 @@ 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
- ]), ht = (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
- }, gt = (e) => {
668
+ if (!(t.length === 0 || !gt.has(t.length))) return t;
669
+ }, vt = new Map(Object.entries({
670
+ isbn: "ISBN",
671
+ gtin: "GTIN",
672
+ doi: "DOI",
673
+ googlebooks: "GoogleBooks",
674
+ openlibrary: "OpenLibrary",
675
+ projectgutenberg: "ProjectGutenberg",
676
+ url: "URL",
677
+ unknown: "Unknown"
678
+ })), q = (e) => {
679
+ let t = e.trim();
680
+ return vt.get(t.toLowerCase()) ?? t;
681
+ }, yt = (e) => {
670
682
  if (e === void 0) return;
671
683
  let t = e.trim().match(/^(\d{4})(?:-(\d{2})(?:-(\d{2}))?)?/);
672
684
  if (t === null) return;
@@ -676,26 +688,14 @@ var Ue = async ({ archive: e, archiveOpf: t }) => {
676
688
  ...r === void 0 ? {} : { month: Number.parseInt(r, 10) },
677
689
  ...i === void 0 ? {} : { day: Number.parseInt(i, 10) }
678
690
  };
679
- }, _t = (e) => {
691
+ }, bt = (e) => {
680
692
  let t = e.trim();
681
693
  if (/^https?:\/\//i.test(t)) try {
682
694
  let e = new URL(t);
683
695
  if ((e.protocol === "http:" || e.protocol === "https:") && e.hostname.length > 0) return "URL";
684
696
  } catch {}
685
- return pt(t) === void 0 ? ht(t) === void 0 ? "Unknown" : "GTIN" : "ISBN";
686
- }, vt = (e) => {
687
- switch (e.trim().toLowerCase()) {
688
- case "isbn": return "ISBN";
689
- case "gtin": return "GTIN";
690
- case "doi": return "DOI";
691
- case "googlebooks": return "GoogleBooks";
692
- case "openlibrary": return "OpenLibrary";
693
- case "projectgutenberg": return "ProjectGutenberg";
694
- case "url": return "URL";
695
- case "unknown": return "Unknown";
696
- default: return e.trim();
697
- }
698
- }, yt = {
697
+ return ht(t) === void 0 ? _t(t) === void 0 ? "Unknown" : "GTIN" : "ISBN";
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
- }, bt = (e) => e.map((e) => {
708
- let t = e.roles.map((e) => yt[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
- }), Y = (e, t) => e.refines !== void 0 && e.refines.replace(/^#/, "") === t, xt = {
714
+ }), J = (e, t) => e.refines !== void 0 && e.refines.replace(/^#/, "") === t, Ct = {
715
715
  "02": "ISBN",
716
716
  "03": "GTIN",
717
717
  "04": "UPC",
@@ -727,104 +727,104 @@ var Ue = async ({ archive: e, archiveOpf: t }) => {
727
727
  26: "DOI",
728
728
  34: "GTIN",
729
729
  35: "ARK"
730
- }, St = (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" ? xt[t] ?? t : t;
733
- }, Ct = (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 St(t.find((e) => e.property === "identifier-type" && Y(e, n) && e.value !== void 0));
736
- }, wt = (e) => {
735
+ if (n !== void 0) return wt(t.find((e) => e.property === "identifier-type" && J(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
- }, Tt = (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
- }, Et = (e) => {
746
+ }, Ot = (e) => {
747
747
  let t = e?.trim();
748
748
  return t !== void 0 && t.length > 0 ? t : void 0;
749
- }, X = (e, t, n) => t === void 0 ? void 0 : e.find((e) => Y(e, t) && e.property === n && e.value !== void 0)?.value, Dt = (e, t) => e.map((e) => H({
749
+ }, Y = (e, t, n) => t === void 0 ? void 0 : e.find((e) => J(e, t) && e.property === n && e.value !== void 0)?.value, kt = (e, t) => e.map((e) => B({
750
750
  value: e.value,
751
- type: Et(X(t, e.id, "title-type"))?.toLowerCase(),
752
- displaySeq: Tt(X(t, e.id, "display-seq")),
753
- sortAs: Et(X(t, e.id, "file-as"))
754
- })), Ot = (e, t) => {
751
+ type: Ot(Y(t, e.id, "title-type"))?.toLowerCase(),
752
+ displaySeq: Dt(Y(t, e.id, "display-seq")),
753
+ sortAs: Ot(Y(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 (!Y(n, t) || n.property !== "dcterms:identifier") return [];
758
- let r = Et(n.value);
757
+ if (!J(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: vt(St(e.find((e) => n.id !== void 0 && Y(e, n.id) && e.property === "identifier-type")) ?? _t(r))
761
+ scheme: q(wt(e.find((e) => n.id !== void 0 && J(e, n.id) && e.property === "identifier-type")) ?? bt(r))
762
762
  }];
763
763
  });
764
764
  return n.length > 0 ? n : void 0;
765
- }, kt = (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) => X(e, i, t), o = a("collection-type")?.trim().toLowerCase(), s = H({
769
+ let i = r.id, a = (t) => Y(e, i, t), o = a("collection-type")?.trim().toLowerCase(), s = B({
770
770
  name: r.value,
771
- identifiers: Ot(e, i),
772
- position: wt(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: wt(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
- }, At = (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
- }, jt = (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
- }, Mt = (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 = bt(n), O = Dt(t, m), { series: k, collection: A } = kt(m), j = k.length > 0 || A.length > 0 ? H({
795
- series: k.length > 0 ? k : void 0,
796
- collection: A.length > 0 ? A : void 0
797
- }) : void 0, M = H({
798
- date: gt(c),
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, ...ee } = e, S = f?.trim().toLowerCase(), C = S === "ltr" || S === "rtl" ? S : void 0, w = l?.trim().toLowerCase(), T = w === "reflowable" || w === "pre-paginated" ? w : void 0, E = St(n), D = kt(t, m), { series: O, collection: k } = jt(m), A = O.length > 0 || k.length > 0 ? B({
795
+ series: O.length > 0 ? O : void 0,
796
+ collection: k.length > 0 ? k : void 0
797
+ }) : void 0, j = B({
798
+ date: yt(c),
799
799
  publisher: r
800
800
  });
801
- return H({
802
- titles: O.length > 0 ? O : void 0,
801
+ return B({
802
+ titles: D.length > 0 ? D : void 0,
803
803
  description: i,
804
- publication: M.date !== void 0 || M.publisher !== void 0 ? { edition: M } : void 0,
804
+ publication: j.date !== void 0 || j.publisher !== void 0 ? { edition: j } : void 0,
805
805
  rights: a,
806
806
  languages: o.length > 0 ? [...o] : void 0,
807
807
  subjects: s.length > 0 ? [...s] : void 0,
808
- contributors: D.length > 0 ? D : void 0,
809
- readingDirection: w,
810
- renditionLayout: E,
811
- renditionFlow: At(u),
812
- renditionSpread: jt(d),
813
- identifiers: p.length > 0 ? p.map((e) => H({
808
+ contributors: E.length > 0 ? E : void 0,
809
+ readingDirection: C,
810
+ renditionLayout: T,
811
+ renditionFlow: Mt(u),
812
+ renditionSpread: Nt(d),
813
+ identifiers: p.length > 0 ? p.map((e) => B({
814
814
  value: e.value,
815
- scheme: vt(e.scheme ?? Ct(e, m) ?? _t(e.value)),
815
+ scheme: q(e.scheme ?? Tt(e, m) ?? bt(e.value)),
816
816
  unique: e.unique
817
817
  })) : void 0,
818
- belongsTo: j,
818
+ belongsTo: A,
819
819
  properties: m.length > 0 ? [...m] : void 0
820
820
  });
821
- }, Nt = (e) => e.kind === "comicInfo" ? ct(e) : e.kind === "kobo" ? lt(e) : e.kind === "apple" ? Ke(e) : Mt(e), Pt = (e) => {
822
- let t = e.opf === void 0 ? void 0 : Mt(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
- }, Ft = (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
- }, It = (e) => e ? e.children.map((e) => e instanceof _ ? e.text : e instanceof g ? It(e) : "").join("").trim() : "", Lt = (e) => k(e.properties).includes("nav"), Rt = (e, { basePath: t }) => {
877
+ }, Rt = (e) => e ? e.children.map((e) => e instanceof _ ? e.text : e instanceof g ? Rt(e) : "").join("").trim() : "", zt = (e) => O(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() || It(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) => Rt(e, { basePath: t })));
890
+ e && e.length > 0 && (n.contents = e.map((e) => Bt(e, { basePath: t })));
891
891
  }
892
892
  return n;
893
- }, zt = (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(Rt(e, { basePath: t }));
896
+ n.push(Bt(e, { basePath: t }));
897
897
  }), n;
898
- }, Bt = async (e, t) => {
899
- let n = e.manifestItems.find(Lt);
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 zt(new h(await D(e)), { basePath: c(e.uri) });
902
+ if (e && !e.dir) return Vt(new h(await E(e)), { basePath: c(e.uri) });
903
903
  }
904
- }, Vt = (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) => Vt(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
- }, Ht = (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(Vt(e, {
918
+ n.push(Ut(e, {
919
919
  basePath: t,
920
920
  prefix: i
921
921
  }));
922
922
  }), n;
923
- }, Ut = 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 Ht(new h(await D(r)), { basePath: c(r.uri) });
929
+ if (r && !r.dir) return Wt(new h(await E(r)), { basePath: c(r.uri) });
930
930
  }
931
931
  }
932
- }, Wt = async (e, { opf: t } = {}) => {
933
- let n = t ?? await z(e);
934
- if (n) return await Bt(n.opf, e) || await Ut({
932
+ }, Kt = async (e, { opf: t } = {}) => {
933
+ let n = t ?? await L(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 = Ft(e);
939
+ let r = Lt(e);
940
940
  return r.length === 0 ? void 0 : r;
941
- }, Gt = [
941
+ }, qt = [
942
942
  "metadata",
943
943
  "readingOrder",
944
944
  "toc"
945
- ], Z = async (e, n) => {
945
+ ], X = 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
- }, Kt = (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
- }, qt = ({ 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
- }, Jt = 3, Yt = async (e, t = {}) => {
964
- let n = new Set(t.include ?? Gt), 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(() => z(e), "opf") : void 0, l = c?.value, u = r || i || s, d = u ? await Z(() => Ve(e), "comicInfo") : void 0, f = d?.value, p = u ? await Z(() => Ie(e), "apple") : void 0, m = p?.value, h = u ? await Z(() => He(e), "kobo") : void 0, g = h?.value, _ = r || s ? Pt({
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 X(() => L(e), "opf") : void 0, l = c?.value, u = r || i || s, d = u ? await X(() => Ue(e), "comicInfo") : void 0, f = d?.value, p = u ? await X(() => Re(e), "apple") : void 0, m = p?.value, h = u ? await X(() => 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 ?? Kt(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 Z(() => Wt(e, { opf: l }), "toc")).value : void 0, b = {
988
- version: Jt,
989
- unreadableSources: qt({
987
+ let y = o ? (await X(() => 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,143 +994,162 @@ 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
- }, Xt = (e) => {
1003
+ }, Qt = (e) => {
1004
1004
  let t = e.trim().toLowerCase();
1005
1005
  return t === "url" || t === "uri" || t === "unknown";
1006
- }, Zt = (e) => {
1006
+ }, $t = (e) => {
1007
1007
  try {
1008
1008
  return decodeURIComponent(e);
1009
1009
  } catch {
1010
1010
  return;
1011
1011
  }
1012
- }, Qt = (e) => {
1012
+ }, en = (e) => {
1013
1013
  try {
1014
1014
  let t = new URL(e.trim());
1015
1015
  return t.protocol === "http:" || t.protocol === "https:" ? t : void 0;
1016
1016
  } catch {
1017
1017
  return;
1018
1018
  }
1019
- }, Q = (e, t) => {
1020
- let n = Qt(e);
1019
+ }, Z = (e, t) => {
1020
+ let n = en(e);
1021
1021
  return n !== void 0 && t(n.hostname.toLowerCase()) ? n : void 0;
1022
- }, $t = /^books\.google\.(?:com|[a-z]{2}|com\.[a-z]{2}|co\.[a-z]{2})$/i, en = /* @__PURE__ */ new Set(["books.googleapis.com", "www.googleapis.com"]), tn = /^\/books\/v1\/volumes\/([^/]+)\/?$/i, nn = (e) => {
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, an = (e) => {
1023
1023
  let t = e.trim();
1024
1024
  return /^[a-z0-9_-]+$/i.test(t) ? t : void 0;
1025
- }, rn = (e) => {
1026
- let t = Q(e, (e) => $t.test(e) || en.has(e));
1025
+ }, on = (e) => {
1026
+ let t = Z(e, (e) => tn.test(e) || nn.has(e));
1027
1027
  if (t !== void 0) {
1028
- if (en.has(t.hostname.toLowerCase())) {
1029
- let e = tn.exec(t.pathname)?.[1], n = e === void 0 ? void 0 : Zt(e);
1030
- return n === void 0 ? void 0 : nn(n);
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 : an(n);
1031
1031
  }
1032
- return nn(t.searchParams.get("id") ?? "");
1032
+ return an(t.searchParams.get("id") ?? "");
1033
1033
  }
1034
- }, an = /* @__PURE__ */ new Set(["gutenberg.org", "www.gutenberg.org"]), on = [
1034
+ }, sn = /* @__PURE__ */ new Set(["gutenberg.org", "www.gutenberg.org"]), cn = [
1035
1035
  /^\/ebooks\/(\d+)(?:[./]|$)/i,
1036
1036
  /^\/files\/(\d+)(?:\/|$)/i,
1037
1037
  /^\/cache\/epub\/(\d+)(?:\/|$)/i,
1038
1038
  /^\/(\d+)(?:\/|$)/
1039
- ], sn = (e) => {
1039
+ ], ln = (e) => {
1040
1040
  let t = e.trim();
1041
1041
  if (!/^\d+$/.test(t)) return;
1042
1042
  let n = t.replace(/^0+(?=\d)/, "");
1043
1043
  return n === "0" ? void 0 : n;
1044
- }, cn = (e) => {
1045
- let t = Q(e, (e) => an.has(e));
1046
- if (t !== void 0) for (let e of on) {
1044
+ }, un = (e) => {
1045
+ let t = Z(e, (e) => sn.has(e));
1046
+ if (t !== void 0) for (let e of cn) {
1047
1047
  let n = e.exec(t.pathname)?.[1];
1048
- if (n !== void 0) return sn(n);
1048
+ if (n !== void 0) return ln(n);
1049
1049
  }
1050
- }, ln = /* @__PURE__ */ new Set(["openlibrary.org", "www.openlibrary.org"]), un = /^\/(works|books|authors)\/(OL\d+[A-Z])(?:\/|$)/i, dn = /^OL\d+([MWA])$/i, fn = {
1050
+ }, dn = /* @__PURE__ */ new Set(["openlibrary.org", "www.openlibrary.org"]), fn = /^\/(works|books|authors)\/(OL\d+[A-Z])(?:\/|$)/i, pn = /^OL\d+([MWA])$/i, mn = {
1051
1051
  M: "books",
1052
1052
  W: "works",
1053
1053
  A: "authors"
1054
- }, pn = (e) => {
1055
- let t = e.trim(), n = un.exec(t);
1054
+ }, hn = (e) => {
1055
+ let t = e.trim(), n = fn.exec(t);
1056
1056
  if (n?.[1] !== void 0 && n[2] !== void 0) return `/${n[1].toLowerCase()}/${n[2].toUpperCase()}`;
1057
- let r = fn[dn.exec(t)?.[1]?.toUpperCase() ?? ""];
1057
+ let r = mn[pn.exec(t)?.[1]?.toUpperCase() ?? ""];
1058
1058
  return r === void 0 ? void 0 : `/${r}/${t.toUpperCase()}`;
1059
- }, mn = (e) => {
1060
- let t = Q(e, (e) => ln.has(e));
1061
- return t === void 0 ? void 0 : pn(t.pathname);
1062
- }, hn = /* @__PURE__ */ new Set([
1059
+ }, gn = (e) => {
1060
+ let t = Z(e, (e) => dn.has(e));
1061
+ return t === void 0 ? void 0 : hn(t.pathname);
1062
+ }, _n = /* @__PURE__ */ new Set([
1063
1063
  "doi.org",
1064
1064
  "dx.doi.org",
1065
1065
  "www.doi.org"
1066
- ]), gn = /^10\.\d{4,9}\/\S+$/, _n = (e) => {
1066
+ ]), vn = /^10\.\d{4,9}\/\S+$/, yn = (e) => {
1067
1067
  let t = e.trim().replace(/^doi:/i, "");
1068
- return gn.test(t) ? t : void 0;
1069
- }, vn = [
1068
+ return vn.test(t) ? t : void 0;
1069
+ }, bn = (e) => e.split("/").map(encodeURIComponent).join("/"), Q = [
1070
1070
  {
1071
1071
  scheme: "GoogleBooks",
1072
- normalizeValue: nn,
1073
- valueFromUrl: rn
1072
+ normalizeValue: an,
1073
+ valueFromUrl: on,
1074
+ toUrl: (e) => `https://books.google.com/books?id=${encodeURIComponent(e)}`
1074
1075
  },
1075
1076
  {
1076
1077
  scheme: "ProjectGutenberg",
1077
- normalizeValue: sn,
1078
- valueFromUrl: cn
1078
+ normalizeValue: ln,
1079
+ valueFromUrl: un,
1080
+ toUrl: (e) => `https://www.gutenberg.org/ebooks/${e}`
1079
1081
  },
1080
1082
  {
1081
1083
  scheme: "OpenLibrary",
1082
- normalizeValue: pn,
1083
- valueFromUrl: mn
1084
+ normalizeValue: hn,
1085
+ valueFromUrl: gn,
1086
+ toUrl: (e) => `https://openlibrary.org${e}`
1084
1087
  },
1085
1088
  {
1086
1089
  scheme: "DOI",
1087
- normalizeValue: _n,
1090
+ normalizeValue: yn,
1088
1091
  valueFromUrl: (e) => {
1089
- let t = Q(e, (e) => hn.has(e)), n = t === void 0 ? void 0 : Zt(t.pathname.replace(/^\//, ""));
1090
- return n === void 0 ? void 0 : _n(n);
1091
- }
1092
+ let t = Z(e, (e) => _n.has(e)), n = t === void 0 ? void 0 : $t(t.pathname.replace(/^\//, ""));
1093
+ return n === void 0 ? void 0 : yn(n);
1094
+ },
1095
+ toUrl: (e) => `https://doi.org/${bn(e)}`
1092
1096
  }
1093
- ], yn = (e) => {
1094
- for (let t of vn) {
1097
+ ], xn = Q.map(function(e) {
1098
+ return e.scheme;
1099
+ }), Sn = (e) => {
1100
+ let t = e.trim().toLowerCase();
1101
+ return Q.find(function(e) {
1102
+ return e.scheme.toLowerCase() === t;
1103
+ });
1104
+ }, Cn = (e) => Sn(e) !== void 0, wn = (e) => {
1105
+ for (let t of Q) {
1095
1106
  let n = t.valueFromUrl(e);
1096
1107
  if (n !== void 0) return {
1097
1108
  value: n,
1098
1109
  scheme: t.scheme
1099
1110
  };
1100
1111
  }
1101
- }, bn = (e) => {
1102
- let t = vn.find(function(t) {
1112
+ }, Tn = ({ scheme: e, value: t }) => {
1113
+ let n = Sn(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
+ }, En = (e) => {
1118
+ let t = Q.find(function(t) {
1103
1119
  return t.scheme === e;
1104
1120
  });
1105
1121
  if (t === void 0) throw Error(`No catalog rule for scheme ${e}`);
1106
1122
  return t;
1107
- }, xn = (e) => e === "ISBN" || e === "GTIN", Sn = (e) => ({
1108
- carries: xn,
1123
+ }, Dn = (e) => {
1124
+ let t = q(e);
1125
+ return t === "ISBN" || t === "GTIN";
1126
+ }, On = (e) => ({
1127
+ carries: Dn,
1109
1128
  normalizeValue: e
1110
1129
  }), $ = (e) => ({
1111
- carries: (t) => t.trim().toLowerCase() === e.toLowerCase(),
1112
- ...bn(e)
1113
- }), Cn = {
1114
- ISBN: Sn(pt),
1115
- GTIN: Sn(ht),
1130
+ carries: (t) => q(t) === e,
1131
+ ...En(e)
1132
+ }), kn = {
1133
+ ISBN: On(ht),
1134
+ GTIN: On(_t),
1116
1135
  GoogleBooks: $("GoogleBooks"),
1117
1136
  OpenLibrary: $("OpenLibrary"),
1118
1137
  ProjectGutenberg: $("ProjectGutenberg"),
1119
1138
  DOI: $("DOI")
1120
- }, wn = (e, t) => {
1121
- let n = Cn[t];
1139
+ }, An = (e, t) => {
1140
+ let n = kn[t];
1122
1141
  for (let t of e ?? []) {
1123
1142
  if (n.carries(t.scheme)) {
1124
1143
  let e = n.normalizeValue(t.value) ?? n.valueFromUrl?.(t.value);
1125
1144
  if (e !== void 0) return e;
1126
1145
  continue;
1127
1146
  }
1128
- if (n.valueFromUrl === void 0 || !Xt(t.scheme)) continue;
1147
+ if (n.valueFromUrl === void 0 || !Qt(t.scheme)) continue;
1129
1148
  let e = n.valueFromUrl(t.value);
1130
1149
  if (e !== void 0) return e;
1131
1150
  }
1132
- }, Tn = (e) => e?.titles?.[0]?.value;
1151
+ }, jn = (e) => e?.titles?.[0]?.value;
1133
1152
  //#endregion
1134
- 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, yn as catalogIdentifierFromUrl, 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, wn as identifierValue, Ge as isArchiveEpub, Be as isComicInfoManga, S as isDirectoryRecord, x as isFileRecord, T as isImageRecord, xn as isIsbnBearingScheme, Tn as mainTitle, ht as normalizeGtin, ft as normalizeIsbn, me as parseAppleDisplayOptionsXml, ye as parseComicInfo, Se as parseKoboXml, fe as parseOpf, gt as parseW3cDtfDate, Ie as readArchiveApple, Ve as readArchiveComicInfo, He as readArchiveKobo, z as readArchiveOpf, D as readRecordAsText, Pe as readingOrderDocumentsAllHaveViewport, Yt as resolveArchive, Me as resolveArchiveCover, Nt as resolveArchiveMetadata, U as resolveArchiveReadingOrder, Wt as resolveArchiveToc, Pt as resolveMetadata, k as tokenizeXmlSpaceSeparatedList };
1153
+ export { R 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, xn as METADATA_CATALOG_SCHEMES, i as arrayBufferFileAccessors, r as blobFileAccessors, wn as catalogIdentifierFromUrl, Tn as catalogUrlFromIdentifier, e as createArchive, v as createArchiveFromArrayBufferList, n as createArchiveFromEntries, y as createArchiveFromText, b as createArchiveFromUrls, S as getArchiveFileRecordByUri, Be as getArchiveHasComicInfo, T as getArchiveImageRecords, D as getArchiveOpfInfo, Ge as getSpineItemFilesFromArchive, An as identifierValue, qe as isArchiveEpub, He as isComicInfoManga, ee as isDirectoryRecord, x as isFileRecord, w as isImageRecord, Dn as isIsbnBearingScheme, Cn as isMetadataCatalogScheme, jn as mainTitle, _t as normalizeGtin, q as normalizeIdentifierScheme, mt as normalizeIsbn, ge as parseAppleDisplayOptionsXml, xe as parseComicInfo, we as parseKoboXml, me as parseOpf, yt as parseW3cDtfDate, Re as readArchiveApple, Ue as readArchiveComicInfo, We as readArchiveKobo, L as readArchiveOpf, E as readRecordAsText, Ie as readingOrderDocumentsAllHaveViewport, Zt as resolveArchive, Pe as resolveArchiveCover, Ft as resolveArchiveMetadata, V as resolveArchiveReadingOrder, Kt as resolveArchiveToc, It as resolveMetadata, O as tokenizeXmlSpaceSeparatedList };
1135
1154
 
1136
1155
  //# sourceMappingURL=index.js.map