@prose-reader/streamer 1.318.0 → 1.320.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.
@@ -1,7 +1,7 @@
1
1
  import { a as e, i as t, n, o as r, r as i, s as a, t as o } from "../createArchiveFromEntries-CNz716dm.js";
2
2
  import { n as s, t as c } from "../fileAccessors-etcCPnpQ.js";
3
3
  import { detectMimeTypeFromName as l, escapeXmlAttributeValue as u, isMediaContentMimeType as d, isXmlBasedMimeType as f, parseContentType as p, urlJoin as m } from "@prose-reader/shared";
4
- import { APPLE_IBOOKS_DISPLAY_OPTIONS_FILENAME as h, COMIC_INFO_FILENAME as g, KOBO_DISPLAY_OPTIONS_FILENAME as _, parseAppleDisplayOptionsXml as ee, parseComicInfo as te, parseKoboXml as ne, parseOpf as re, resolveArchiveMetadata as v, tokenizeXmlSpaceSeparatedList as ie } from "@prose-reader/archive-parser";
4
+ import { APPLE_IBOOKS_DISPLAY_OPTIONS_FILENAME as h, COMIC_INFO_FILENAME as g, KOBO_DISPLAY_OPTIONS_FILENAME as _, parseAppleDisplayOptionsXml as ee, parseComicInfo as te, parseKoboXml as ne, parseOpf as re, resolveArchiveMetadata as v, tokenizeXmlSpaceSeparatedList as ie } from "@prose-reader/archive-reader";
5
5
  import { XmlDocument as y, XmlElement as ae, XmlTextNode as oe } from "xmldoc";
6
6
  import { BehaviorSubject as se, EMPTY as b, NEVER as x, Subject as S, catchError as C, distinctUntilChanged as ce, filter as w, finalize as le, first as T, from as E, ignoreElements as ue, lastValueFrom as de, map as D, merge as O, mergeMap as k, of as fe, pairwise as pe, shareReplay as me, startWith as he, switchMap as A, takeUntil as ge, tap as j, timer as _e } from "rxjs";
7
7
  //#region src/archives/createArchiveFromArrayBufferList.ts
@@ -158,11 +158,11 @@ var ke = h.toLowerCase(), Ae = ({ archive: e }) => async (t) => {
158
158
  } catch (e) {
159
159
  return console.error(`Unable to parse ${g} for content\n`, i), console.error(e), r;
160
160
  }
161
- }, Ne = ({ baseUrl: e = "", resourcePath: t }) => {
161
+ }, U = ({ baseUrl: e = "", resourcePath: t }) => {
162
162
  if (!e && /^https?:\/\//.test(t)) return encodeURI(t);
163
163
  let n = e ? `${e}${e.endsWith("/") ? "" : "/"}` : "file://";
164
164
  return encodeURI(`${n}${t}`);
165
- }, Pe = ({ archive: e, baseUrl: t }) => async () => {
165
+ }, Ne = ({ archive: e, baseUrl: t }) => async () => {
166
166
  let n = e.records.filter((e) => !e.dir), r = I(), i = n.map((e) => ({
167
167
  file: e,
168
168
  id: r(e.uri)
@@ -176,7 +176,7 @@ var ke = h.toLowerCase(), Ae = ({ archive: e }) => async (t) => {
176
176
  spineItems: i.filter(({ file: e }) => !e.basename.endsWith(".db")).map(({ file: e, id: r }, i) => ({
177
177
  id: r,
178
178
  index: i,
179
- href: Ne({
179
+ href: U({
180
180
  baseUrl: t,
181
181
  resourcePath: e.uri
182
182
  }),
@@ -191,11 +191,11 @@ var ke = h.toLowerCase(), Ae = ({ archive: e }) => async (t) => {
191
191
  href: encodeURI(`${t}${e.uri}`)
192
192
  }))
193
193
  };
194
- }, U = async ({ archive: e, archiveOpf: t }) => {
194
+ }, W = async ({ archive: e, archiveOpf: t }) => {
195
195
  if (!t) return [];
196
196
  let { opf: n, basePath: r } = t, { spineRows: i } = n;
197
197
  return e.records.filter((e) => i.find((t) => r ? `${r}/${t.href}` === e.uri : `${t.href}` === e.uri));
198
- }, W = (e, t, n) => {
198
+ }, G = (e, t, n) => {
199
199
  let { basePath: r } = V(t) || {};
200
200
  return e.map((e) => {
201
201
  let t = e.href, i = n?.(t) ?? "";
@@ -205,25 +205,25 @@ var ke = h.toLowerCase(), Ae = ({ archive: e }) => async (t) => {
205
205
  mediaType: e.mediaType
206
206
  };
207
207
  });
208
- }, Fe = (e) => {
208
+ }, Pe = (e) => {
209
209
  let t = e?.trim();
210
210
  return t === "scrolled-continuous" || t === "scrolled-doc" || t === "paginated" || t === "auto" ? t : "auto";
211
- }, Ie = (e) => {
211
+ }, Fe = (e) => {
212
212
  let t = e?.trim();
213
213
  if (t === "none" || t === "landscape" || t === "portrait" || t === "both" || t === "auto") return t;
214
- }, Le = (e) => {
214
+ }, Ie = (e) => {
215
215
  let t = e?.trim();
216
216
  if (t === "cover" || t === "title-page" || t === "copyright-page" || t === "text") return t;
217
- }, Re = ({ archive: e, baseUrl: t, archiveOpf: n }) => async (r) => {
217
+ }, Le = ({ archive: e, baseUrl: t, archiveOpf: n }) => async (r) => {
218
218
  if (!n) return r;
219
219
  let { opf: i, basePath: o } = n, s = v(i);
220
220
  a.groupCollapsed(...a.getGroupArgs("OPF parsed")), a.log("opf", i), a.groupEnd();
221
- let c = i.renditionLayoutMeta?.trim(), l = c === "reflowable" || c === "pre-paginated" ? c : s.renditionLayout, u = i.title?.trim() || e.records.find(({ dir: e }) => e)?.basename || "", d = s.readingDirection ?? r.readingDirection, f = (await U({
221
+ let c = i.renditionLayoutMeta?.trim(), l = c === "reflowable" || c === "pre-paginated" ? c : s.renditionLayout, u = i.title?.trim() || e.records.find(({ dir: e }) => e)?.basename || "", d = s.readingDirection ?? r.readingDirection, f = (await W({
222
222
  archive: e,
223
223
  archiveOpf: n
224
224
  })).filter(L).reduce((e, t) => t.size + e, 0), p = i.guide, m = [];
225
225
  for (let e of p) {
226
- let t = Le(e.type);
226
+ let t = Ie(e.type);
227
227
  t !== void 0 && m.push({
228
228
  href: e.href,
229
229
  title: e.title,
@@ -233,8 +233,8 @@ var ke = h.toLowerCase(), Ae = ({ archive: e }) => async (t) => {
233
233
  return {
234
234
  filename: e.filename ?? "",
235
235
  renditionLayout: l,
236
- renditionFlow: Fe(i.renditionFlowMeta),
237
- renditionSpread: Ie(i.renditionSpreadMeta),
236
+ renditionFlow: Pe(i.renditionFlowMeta),
237
+ renditionSpread: Fe(i.renditionSpreadMeta),
238
238
  title: u,
239
239
  readingDirection: d,
240
240
  spineItems: i.spineRows.map((n, r) => {
@@ -251,20 +251,20 @@ var ke = h.toLowerCase(), Ae = ({ archive: e }) => async (t) => {
251
251
  mediaType: n.mediaType
252
252
  };
253
253
  }),
254
- items: W(i.manifestItems, e, (e) => /^https?:\/\//.test(e) ? "" : t || "file://"),
254
+ items: G(i.manifestItems, e, (e) => /^https?:\/\//.test(e) ? "" : t || "file://"),
255
255
  guide: m.length > 0 ? m : void 0
256
256
  };
257
- }, ze = (e) => {
257
+ }, Re = (e) => {
258
258
  let t = e.descendantWithPath("head")?.childrenNamed("meta").find((e) => e.attr.name === "viewport");
259
259
  return !!(t && t.attr.name === "viewport");
260
- }, Be = (e) => e.reduce(async (e, t) => {
260
+ }, ze = (e) => e.reduce(async (e, t) => {
261
261
  if (!await e || !f({
262
262
  mimeType: L(t) ? t.encodingFormat : void 0,
263
263
  uri: t.uri
264
264
  })) return !1;
265
265
  let n = t.dir ? null : await B(t);
266
- return n ? ze(new y(n)) : !1;
267
- }, Promise.resolve(!0)), Ve = ({ archive: e, archiveOpf: t }) => async (n) => n.renditionLayout === "reflowable" && n.spineItems.every((e) => e.renditionLayout === "reflowable") && await Be(await U({
266
+ return n ? Re(new y(n)) : !1;
267
+ }, Promise.resolve(!0)), Be = ({ archive: e, archiveOpf: t }) => async (n) => n.renditionLayout === "reflowable" && n.spineItems.every((e) => e.renditionLayout === "reflowable") && await ze(await W({
268
268
  archive: e,
269
269
  archiveOpf: t
270
270
  })) ? {
@@ -274,10 +274,10 @@ var ke = h.toLowerCase(), Ae = ({ archive: e }) => async (t) => {
274
274
  renditionLayout: "pre-paginated"
275
275
  })),
276
276
  renditionLayout: "pre-paginated"
277
- } : n, He = () => (e) => ({
277
+ } : n, Ve = () => (e) => ({
278
278
  ...e,
279
279
  readingDirection: e.readingDirection ?? "ltr"
280
- }), Ue = async (e) => {
280
+ }), He = async (e) => {
281
281
  let t;
282
282
  return await Promise.all(e.records.map(async (e) => {
283
283
  if (e.dir || !e.uri.endsWith(_)) return;
@@ -292,13 +292,13 @@ var ke = h.toLowerCase(), Ae = ({ archive: e }) => async (t) => {
292
292
  kind: "kobo",
293
293
  ...t === void 0 ? {} : { renditionLayout: t }
294
294
  };
295
- }, We = ({ archive: e }) => async (t) => {
296
- let { renditionLayout: n } = v(await Ue(e));
295
+ }, Ue = ({ archive: e }) => async (t) => {
296
+ let { renditionLayout: n } = v(await He(e));
297
297
  return {
298
298
  ...t,
299
299
  renditionLayout: t.renditionLayout ?? n
300
300
  };
301
- }, G = (e) => e.toLowerCase().endsWith(".opf"), Ge = (e) => e.records.some((e) => !e.dir && (G(e.basename) || G(e.uri))), Ke = ({ archive: e }) => async (t) => Ge(e) ? t : {
301
+ }, K = (e) => e.toLowerCase().endsWith(".opf"), We = (e) => e.records.some((e) => !e.dir && (K(e.basename) || K(e.uri))), Ge = ({ archive: e }) => async (t) => We(e) ? t : {
302
302
  ...t,
303
303
  spineItems: t.spineItems.map((t) => {
304
304
  let n = e.records.find((e) => decodeURI(t.href).endsWith(e.uri)), r = p((n && L(n) ? n.encodingFormat : void 0) ?? "") || l(n?.basename ?? "");
@@ -307,96 +307,96 @@ var ke = h.toLowerCase(), Ae = ({ archive: e }) => async (t) => {
307
307
  renditionLayout: r && d(r) ? "pre-paginated" : t.renditionLayout
308
308
  };
309
309
  })
310
- }, K = (e) => e ? e.children.map((e) => e instanceof oe ? e.text : e instanceof ae ? K(e) : "").join("").trim() : "", qe = (e) => ie(e.properties).includes("nav"), q = (e, { basePath: t, baseUrl: n }) => {
310
+ }, q = (e) => e ? e.children.map((e) => e instanceof oe ? e.text : e instanceof ae ? q(e) : "").join("").trim() : "", Ke = (e) => ie(e.properties).includes("nav"), J = (e, { basePath: t, baseUrl: n }) => {
311
311
  let r = {
312
312
  contents: [],
313
313
  path: "",
314
314
  href: "",
315
315
  title: ""
316
316
  }, i = e.childNamed("span") || e.childNamed("a");
317
- r.title = (i?.attr.title || i?.val.trim() || K(i)) ?? "";
317
+ r.title = (i?.attr.title || i?.val.trim() || q(i)) ?? "";
318
318
  let a = i?.name;
319
319
  a !== "a" && (i = e.descendantWithPath(`${a}.a`), i && (a = i.name.toLowerCase())), a === "a" && i?.attr.href && (r.path = m(t, i.attr.href), r.href = m(n, t, i.attr.href));
320
320
  let o = e.childNamed("ol");
321
321
  if (o) {
322
322
  let e = o.childrenNamed("li");
323
- e && e.length > 0 && (r.contents = e.map((e) => q(e, {
323
+ e && e.length > 0 && (r.contents = e.map((e) => J(e, {
324
324
  basePath: t,
325
325
  baseUrl: n
326
326
  })));
327
327
  }
328
328
  return r;
329
- }, Je = (e, { basePath: t, baseUrl: n }) => {
329
+ }, qe = (e, { basePath: t, baseUrl: n }) => {
330
330
  let r = [], i;
331
331
  return e.descendantWithPath("body.nav.ol") ? i = e.descendantWithPath("body.nav.ol")?.children : e.descendantWithPath("body.section.nav.ol") && (i = e.descendantWithPath("body.section.nav.ol")?.children), i && i.length > 0 && i.filter((e) => e.name === "li").forEach((e) => {
332
- r.push(q(e, {
332
+ r.push(J(e, {
333
333
  basePath: t,
334
334
  baseUrl: n
335
335
  }));
336
336
  }), r;
337
- }, Ye = async (e, t, { baseUrl: r }) => {
338
- let i = e.manifestItems.find(qe);
337
+ }, Je = async (e, t, { baseUrl: r }) => {
338
+ let i = e.manifestItems.find(Ke);
339
339
  if (i?.href) {
340
340
  let e = t.records.find((e) => e.uri.endsWith(i.href));
341
- if (e && !e.dir) return Je(new y(await B(e)), {
341
+ if (e && !e.dir) return qe(new y(await B(e)), {
342
342
  basePath: n(e.uri),
343
343
  baseUrl: r
344
344
  });
345
345
  }
346
- }, J = (e, { opfBasePath: t, baseUrl: n, prefix: r }) => {
346
+ }, Y = (e, { opfBasePath: t, baseUrl: n, prefix: r }) => {
347
347
  let i = e?.childNamed(`${r}content`)?.attr.src || "", a = {
348
348
  title: e?.descendantWithPath(`${r}navLabel.${r}text`)?.val || "",
349
349
  path: m(t, i),
350
350
  href: m(n, t, i),
351
351
  contents: []
352
352
  }, o = e.childrenNamed(`${r}navPoint`);
353
- return o && o.length > 0 && (a.contents = o.map((e) => J(e, {
353
+ return o && o.length > 0 && (a.contents = o.map((e) => Y(e, {
354
354
  opfBasePath: t,
355
355
  baseUrl: n,
356
356
  prefix: r
357
357
  }))), a;
358
- }, Xe = (e, { opfBasePath: t, baseUrl: n }) => {
358
+ }, Ye = (e, { opfBasePath: t, baseUrl: n }) => {
359
359
  let r = [], i = e.name, a = "";
360
360
  return i.indexOf(":") !== -1 && (a = `${i.split(":")[0]}:`), e.childNamed(`${a}navMap`)?.childrenNamed(`${a}navPoint`).forEach((e) => {
361
- r.push(J(e, {
361
+ r.push(Y(e, {
362
362
  opfBasePath: t,
363
363
  baseUrl: n,
364
364
  prefix: a
365
365
  }));
366
366
  }), r;
367
- }, Ze = async ({ opf: e, opfBasePath: t, baseUrl: n, archive: r }) => {
367
+ }, Xe = async ({ opf: e, opfBasePath: t, baseUrl: n, archive: r }) => {
368
368
  let i = e.spineTocIdref;
369
369
  if (i) {
370
370
  let a = e.manifestItems.find((e) => e.id === i);
371
371
  if (a) {
372
372
  let e = `${t}${t === "" ? "" : "/"}${a.href}`, i = r.records.find((t) => t.uri.endsWith(e));
373
- if (i && !i.dir) return Xe(new y(await B(i)), {
373
+ if (i && !i.dir) return Ye(new y(await B(i)), {
374
374
  opfBasePath: t,
375
375
  baseUrl: n
376
376
  });
377
377
  }
378
378
  }
379
- }, Qe = async (e, t, { baseUrl: n }) => {
380
- let { basePath: r } = V(t) || {}, i = await Ye(e, t, { baseUrl: n });
379
+ }, Ze = async (e, t, { baseUrl: n }) => {
380
+ let { basePath: r } = V(t) || {}, i = await Je(e, t, { baseUrl: n });
381
381
  if (i) return i;
382
- let a = await Ze({
382
+ let a = await Xe({
383
383
  opf: e,
384
384
  opfBasePath: r ?? "",
385
385
  archive: t,
386
386
  baseUrl: n
387
387
  });
388
388
  if (a) return a;
389
- }, $e = (e) => e.replace(/\.[^.]+$/, "").replace(/[_-]/g, " ").replace(/\s+/g, " ").trim(), et = (e, t) => {
389
+ }, Qe = (e) => e.replace(/\.[^.]+$/, "").replace(/[_-]/g, " ").replace(/\s+/g, " ").trim(), $e = (e, t) => {
390
390
  if (e.spineItems.length !== 0 && e.spineItems.every((e) => (p(e.mediaType ?? "") || l(e.href))?.startsWith("audio/"))) return e.spineItems.map((e) => {
391
391
  let n = t.records.find((t) => !t.dir && decodeURI(e.href).endsWith(t.uri));
392
392
  return {
393
- title: $e(n?.basename ?? e.href),
393
+ title: Qe(n?.basename ?? e.href),
394
394
  href: e.href,
395
395
  path: n?.uri ?? e.href,
396
396
  contents: []
397
397
  };
398
398
  });
399
- }, tt = (t, { baseUrl: n }) => {
399
+ }, et = (t, { baseUrl: n }) => {
400
400
  let r = [...t.records].sort((t, n) => e(t.uri, n.uri)), i = (e, t, n, r, a) => {
401
401
  let o = e.find((e) => e.title === t), [s, ...c] = n;
402
402
  return o ? s ? [...e.filter((e) => e !== o), {
@@ -421,17 +421,19 @@ var ke = h.toLowerCase(), Ae = ({ archive: e }) => async (t) => {
421
421
  return r.reduce((e, t) => {
422
422
  if (t.dir) return e;
423
423
  let [r, ...a] = t.uri.split("/").slice(0, -1);
424
- return r ? i(e, r, a, m(n, encodeURI(t.uri)).replace(/\/$/, ""), t.uri.replace(/\/$/, "")) : e;
424
+ if (!r) return e;
425
+ let o = m(n, encodeURI(t.uri)).replace(/\/$/, ""), s = t.uri.replace(/\/$/, "");
426
+ return i(e, r, a, o, s);
425
427
  }, []);
426
- }, nt = async (e, t, { baseUrl: n, archiveOpf: r }) => {
427
- if (r) return await Qe(r.opf, e, { baseUrl: n }) || [];
428
- let i = et(t, e);
428
+ }, tt = async (e, t, { baseUrl: n, archiveOpf: r }) => {
429
+ if (r) return await Ze(r.opf, e, { baseUrl: n }) || [];
430
+ let i = $e(t, e);
429
431
  if (i) return i;
430
- let a = tt(e, { baseUrl: n });
432
+ let a = et(e, { baseUrl: n });
431
433
  if (a.length !== 0) return a;
432
- }, rt = ({ archive: e, baseUrl: t, archiveOpf: n }) => async (r) => {
434
+ }, nt = ({ archive: e, baseUrl: t, archiveOpf: n }) => async (r) => {
433
435
  if (r.nav) return r;
434
- let i = await nt(e, r, {
436
+ let i = await tt(e, r, {
435
437
  baseUrl: t,
436
438
  archiveOpf: n
437
439
  });
@@ -439,13 +441,13 @@ var ke = h.toLowerCase(), Ae = ({ archive: e }) => async (t) => {
439
441
  ...r,
440
442
  nav: { toc: i }
441
443
  } : r;
442
- }, it = (e) => e ? e.endsWith("/") ? e : `${e}/` : "", Y = async (e, { baseUrl: t = "", hooks: n = {} } = {}) => {
444
+ }, rt = (e) => e ? e.endsWith("/") ? e : `${e}/` : "", X = async (e, { baseUrl: t = "", hooks: n = {} } = {}) => {
443
445
  a.log("Generating manifest from archive", e);
444
- let r = await H(e), i = it(t), o = (t) => (t ?? []).map((t) => t({
446
+ let r = await H(e), i = rt(t), o = (t) => (t ?? []).map((t) => t({
445
447
  archive: e,
446
448
  baseUrl: i
447
449
  })), s = [
448
- Re({
450
+ Le({
449
451
  archive: e,
450
452
  baseUrl: i,
451
453
  archiveOpf: r
@@ -458,23 +460,23 @@ var ke = h.toLowerCase(), Ae = ({ archive: e }) => async (t) => {
458
460
  archive: e,
459
461
  baseUrl: i
460
462
  }),
461
- Ke({
463
+ Ge({
462
464
  archive: e,
463
465
  baseUrl: i
464
466
  }),
465
467
  ...o(n.content)
466
468
  ], c = o(n.spine), l = [
467
- Ve({
469
+ Be({
468
470
  archive: e,
469
471
  baseUrl: i,
470
472
  archiveOpf: r
471
473
  }),
472
- We({
474
+ Ue({
473
475
  archive: e,
474
476
  baseUrl: i
475
477
  }),
476
478
  ...o(n.presentation)
477
- ], u = [rt({
479
+ ], u = [nt({
478
480
  archive: e,
479
481
  baseUrl: i,
480
482
  archiveOpf: r
@@ -483,10 +485,10 @@ var ke = h.toLowerCase(), Ae = ({ archive: e }) => async (t) => {
483
485
  ...c,
484
486
  ...l,
485
487
  ...u,
486
- He()
488
+ Ve()
487
489
  ];
488
490
  try {
489
- let t = Pe({
491
+ let t = Ne({
490
492
  archive: e,
491
493
  baseUrl: i
492
494
  })(), n = await d.reduce(async (e, t) => await t(await e), t);
@@ -498,15 +500,15 @@ var ke = h.toLowerCase(), Ae = ({ archive: e }) => async (t) => {
498
500
  } catch (e) {
499
501
  throw a.error(e), e;
500
502
  }
501
- }, at = (e) => {
503
+ }, it = (e) => {
502
504
  let t = e.descendantWithPath("head")?.childrenNamed("meta").find((e) => e.attr.name === "calibre:cover");
503
505
  return !!(t && t.attr.name === "calibre:cover");
504
- }, ot = (e) => e.descendantWithPath("body")?.descendantWithPath("div")?.childrenNamed("svg")?.find((e) => e.attr.width === "100%" && e.attr.preserveAspectRatio === "none"), st = ({ archive: e, resourcePath: t }) => async (n) => {
506
+ }, at = (e) => e.descendantWithPath("body")?.descendantWithPath("div")?.childrenNamed("svg")?.find((e) => e.attr.width === "100%" && e.attr.preserveAspectRatio === "none"), ot = ({ archive: e, resourcePath: t }) => async (n) => {
505
507
  let r = R(e, t);
506
508
  if (r?.basename.endsWith(".xhtml")) {
507
509
  let e = new y(typeof n.body == "string" ? n.body : await B(r));
508
- if (at(e)) {
509
- let t = ot(e);
510
+ if (it(e)) {
511
+ let t = at(e);
510
512
  return t && delete t.attr.preserveAspectRatio, {
511
513
  ...n,
512
514
  body: e?.toString()
@@ -514,10 +516,10 @@ var ke = h.toLowerCase(), Ae = ({ archive: e }) => async (t) => {
514
516
  }
515
517
  }
516
518
  return n;
517
- }, ct = ({ archive: e, resourcePath: t }) => async (n) => st({
519
+ }, st = ({ archive: e, resourcePath: t }) => async (n) => ot({
518
520
  archive: e,
519
521
  resourcePath: t
520
- })(n), lt = ({ archive: e, resourcePath: t }) => async (n) => {
522
+ })(n), ct = ({ archive: e, resourcePath: t }) => async (n) => {
521
523
  let r = R(e, t);
522
524
  if (r?.basename.endsWith(".css")) {
523
525
  let e = (typeof n.body == "string" ? n.body : await B(r)).replaceAll("-webkit-writing-mode", "writing-mode");
@@ -527,23 +529,23 @@ var ke = h.toLowerCase(), Ae = ({ archive: e }) => async (t) => {
527
529
  };
528
530
  }
529
531
  return n;
530
- }, ut = async (e, t) => {
532
+ }, lt = async (e, t) => {
531
533
  let n = await H(e);
532
534
  if (n) {
533
- let { opf: r } = n, i = W(r.manifestItems, e, () => "").find((e) => t.endsWith(e.href))?.mediaType;
535
+ let { opf: r } = n, i = G(r.manifestItems, e, () => "").find((e) => t.endsWith(e.href))?.mediaType;
534
536
  if (i) return { mediaType: i };
535
537
  }
536
- return { mediaType: dt(t) };
537
- }, dt = (e) => {
538
+ return { mediaType: ut(t) };
539
+ }, ut = (e) => {
538
540
  if (e.endsWith(".css")) return "text/css; charset=UTF-8";
539
541
  if (e.endsWith(".jpg")) return "image/jpg";
540
542
  if (e.endsWith(".xhtml")) return "application/xhtml+xml";
541
543
  if (e.endsWith(".mp4")) return "video/mp4";
542
544
  if (e.endsWith(".svg")) return "image/svg+xml";
543
- }, ft = ({ archive: e, resourcePath: t }) => async (n) => {
545
+ }, dt = ({ archive: e, resourcePath: t }) => async (n) => {
544
546
  let r = R(e, t);
545
547
  if (!r) return n;
546
- let i = await ut(e, t);
548
+ let i = await lt(e, t);
547
549
  return {
548
550
  ...n,
549
551
  params: {
@@ -552,37 +554,37 @@ var ke = h.toLowerCase(), Ae = ({ archive: e }) => async (t) => {
552
554
  ...i.mediaType && { contentType: i.mediaType }
553
555
  }
554
556
  };
555
- }, X = /* @__PURE__ */ "div.span.p.a.li.ul.ol.h1.h2.h3.h4.h5.h6.table.tr.td.th.thead.tbody.tfoot.section.article.header.footer.nav.aside.main.figure.figcaption.blockquote.pre.code.form.textarea.select.option.button.label.fieldset.legend.caption.dl.dt.dd.iframe.video.audio.canvas.script.style".split("."), pt = ({ archive: e, resourcePath: t }) => async (n) => {
557
+ }, Z = /* @__PURE__ */ "div.span.p.a.li.ul.ol.h1.h2.h3.h4.h5.h6.table.tr.td.th.thead.tbody.tfoot.section.article.header.footer.nav.aside.main.figure.figcaption.blockquote.pre.code.form.textarea.select.option.button.label.fieldset.legend.caption.dl.dt.dd.iframe.video.audio.canvas.script.style".split("."), ft = ({ archive: e, resourcePath: t }) => async (n) => {
556
558
  let r = R(e, t);
557
559
  if (r?.basename.endsWith(".xhtml")) {
558
560
  let e = typeof n.body == "string" ? n.body : await B(r);
559
- if (!RegExp(`<(${X.join("|")})[\\s/>]`, "i").test(e)) return n;
560
- let t = RegExp(`<(${X.join("|")})(\\s[^>]*)?\\s*/>`, "gi"), i = e.replace(t, (e, t, n = "") => `<${t} ${n.trim()}></${t}>`);
561
+ if (!RegExp(`<(${Z.join("|")})[\\s/>]`, "i").test(e)) return n;
562
+ let t = RegExp(`<(${Z.join("|")})(\\s[^>]*)?\\s*/>`, "gi"), i = e.replace(t, (e, t, n = "") => `<${t} ${n.trim()}></${t}>`);
561
563
  return {
562
564
  ...n,
563
565
  body: i
564
566
  };
565
567
  }
566
568
  return n;
567
- }, Z = async (e, t, { hooks: n = [] } = {}) => {
569
+ }, Q = async (e, t, { hooks: n = [] } = {}) => {
568
570
  let r = { params: {} }, i = [
569
571
  ...n.map((n) => n({
570
572
  archive: e,
571
573
  resourcePath: t
572
574
  })),
573
- ft({
575
+ dt({
574
576
  archive: e,
575
577
  resourcePath: t
576
578
  }),
577
- pt({
579
+ ft({
578
580
  archive: e,
579
581
  resourcePath: t
580
582
  }),
581
- lt({
583
+ ct({
582
584
  archive: e,
583
585
  resourcePath: t
584
586
  }),
585
- ct({
587
+ st({
586
588
  archive: e,
587
589
  resourcePath: t
588
590
  })
@@ -599,7 +601,7 @@ var ke = h.toLowerCase(), Ae = ({ archive: e }) => async (t) => {
599
601
  } catch (e) {
600
602
  throw a.error(e), e;
601
603
  }
602
- }, mt = class {
604
+ }, pt = class {
603
605
  constructor(e) {
604
606
  this.cleanArchiveAfter = e, this.state$ = new se({
605
607
  status: "idle",
@@ -624,11 +626,11 @@ var ke = h.toLowerCase(), Ae = ({ archive: e }) => async (t) => {
624
626
  get overTTL$() {
625
627
  return this.isUnlocked$.pipe(A((e) => e ? this.cleanArchiveAfter === Infinity ? x : _e(this.cleanArchiveAfter) : x));
626
628
  }
627
- }, ht = ({ getArchive: e, cleanArchiveAfter: t = 300 * 1e3 }) => {
629
+ }, mt = ({ getArchive: e, cleanArchiveAfter: t = 300 * 1e3 }) => {
628
630
  let n = new S(), r = new S(), i = new S(), o = {};
629
631
  return n.pipe(k((t) => {
630
632
  let n = o[t];
631
- if (!n || n.state.status !== "idle") return b;
633
+ if (n?.state.status !== "idle") return b;
632
634
  let r = !1, s = (e) => {
633
635
  a.debug(`Cleaning up archive with key: ${e}`);
634
636
  let t = o[e];
@@ -649,7 +651,7 @@ var ke = h.toLowerCase(), Ae = ({ archive: e }) => async (t) => {
649
651
  }))));
650
652
  }), ge(r)).subscribe(), {
651
653
  access: (e) => {
652
- let r = !1, i = o[e] ?? new mt(t);
654
+ let r = !1, i = o[e] ?? new pt(t);
653
655
  o[e] = i, i.update({ locks: i.state.locks + 1 });
654
656
  let a = () => {
655
657
  r || (r = !0, i.update({ locks: i.state.locks - 1 }));
@@ -668,7 +670,7 @@ var ke = h.toLowerCase(), Ae = ({ archive: e }) => async (t) => {
668
670
  },
669
671
  _archives: o
670
672
  };
671
- }, Q = (e) => e ? /^\d+$/.test(e) ? {
673
+ }, $ = (e) => e ? /^\d+$/.test(e) ? {
672
674
  valid: !0,
673
675
  value: Number.parseInt(e, 10)
674
676
  } : {
@@ -677,20 +679,20 @@ var ke = h.toLowerCase(), Ae = ({ archive: e }) => async (t) => {
677
679
  } : {
678
680
  valid: !0,
679
681
  value: void 0
680
- }, gt = (e) => {
682
+ }, ht = (e) => {
681
683
  if (!e.toLowerCase().startsWith("bytes=")) return { kind: "missing" };
682
684
  let t = e.slice(6).trim();
683
685
  if (!t) return { kind: "invalid" };
684
686
  if (t.includes(",")) return { kind: "multi" };
685
687
  let n = /^(\d*)-(\d*)$/.exec(t);
686
688
  if (!n) return { kind: "invalid" };
687
- let [, r = "", i = ""] = n, a = Q(r.trim()), o = Q(i.trim());
689
+ let [, r = "", i = ""] = n, a = $(r.trim()), o = $(i.trim());
688
690
  return !a.valid || !o.valid ? { kind: "invalid" } : {
689
691
  kind: "single",
690
692
  start: a.value,
691
693
  end: o.value
692
694
  };
693
- }, _t = (e) => {
695
+ }, gt = (e) => {
694
696
  if (e instanceof Blob) return {
695
697
  size: e.size,
696
698
  slice: (t, n) => {
@@ -712,18 +714,18 @@ var ke = h.toLowerCase(), Ae = ({ archive: e }) => async (t) => {
712
714
  };
713
715
  }
714
716
  };
715
- }, vt = ({ body: e, contentType: t, rangeHeader: n }) => {
717
+ }, _t = ({ body: e, contentType: t, rangeHeader: n }) => {
716
718
  let r = new Headers();
717
719
  if (t && r.set("Content-Type", t), r.set("Accept-Ranges", "bytes"), !n) return e instanceof Blob && r.set("Content-Length", String(e.size)), new Response(e, {
718
720
  status: 200,
719
721
  headers: r
720
722
  });
721
- let i = gt(n);
723
+ let i = ht(n);
722
724
  if (i.kind === "missing" || i.kind === "multi") return e instanceof Blob && r.set("Content-Length", String(e.size)), new Response(e, {
723
725
  status: 200,
724
726
  headers: r
725
727
  });
726
- let a = _t(e), o = a.size;
728
+ let a = gt(e), o = a.size;
727
729
  if (i.kind === "invalid") return new Response(null, {
728
730
  status: 416,
729
731
  headers: { "Content-Range": `bytes */${o}` }
@@ -738,18 +740,18 @@ var ke = h.toLowerCase(), Ae = ({ archive: e }) => async (t) => {
738
740
  status: 206,
739
741
  headers: r
740
742
  });
741
- }, $ = "file://", yt = /^https?:\/\//, bt = (e) => {
743
+ }, vt = "file://", yt = /^https?:\/\//, bt = (e) => {
742
744
  try {
743
745
  return decodeURIComponent(e);
744
746
  } catch {
745
747
  return e;
746
748
  }
747
- }, xt = (e) => e.startsWith($) ? e.slice($.length) : e, St = (e) => {
749
+ }, xt = (e) => e.startsWith(vt) ? e.slice(vt.length) : e, St = (e) => {
748
750
  let t = xt(e);
749
751
  return yt.test(t) ? t : xt(bt(t));
750
752
  }, Ct = class {
751
753
  constructor({ hooks: e, onError: t, onManifestSuccess: n, ...r }) {
752
- this.onError = (e) => (console.error(e), new Response(String(e), { status: 500 })), this.archiveLoader = ht(r), this.hooks = e ?? {}, this.onManifestSuccess = n ?? (({ manifest: e }) => Promise.resolve(e)), this.onError = t ?? this.onError;
754
+ this.onError = (e) => (console.error(e), new Response(String(e), { status: 500 })), this.archiveLoader = mt(r), this.hooks = e ?? {}, this.onManifestSuccess = n ?? (({ manifest: e }) => Promise.resolve(e)), this.onError = t ?? this.onError;
753
755
  }
754
756
  prune() {
755
757
  this.archiveLoader.purge();
@@ -768,7 +770,7 @@ var ke = h.toLowerCase(), Ae = ({ archive: e }) => async (t) => {
768
770
  fetchManifest({ key: e, baseUrl: t }) {
769
771
  return this.withArchiveResponse({
770
772
  key: e,
771
- getResponse: (e) => E(Y(e, {
773
+ getResponse: (e) => E(X(e, {
772
774
  baseUrl: t,
773
775
  hooks: this.hooks.manifest
774
776
  })).pipe(A((t) => E(this.onManifestSuccess({
@@ -780,7 +782,7 @@ var ke = h.toLowerCase(), Ae = ({ archive: e }) => async (t) => {
780
782
  fetchResource({ key: e, resourcePath: t, request: n }) {
781
783
  return this.withArchiveResponse({
782
784
  key: e,
783
- getResponse: (e) => E(Z(e, St(t), { hooks: this.hooks.resource })).pipe(D((e) => vt({
785
+ getResponse: (e) => E(Q(e, St(t), { hooks: this.hooks.resource })).pipe(D((e) => _t({
784
786
  body: e.body ?? "",
785
787
  contentType: e.params.contentType,
786
788
  rangeHeader: n?.headers.get("range")
@@ -810,6 +812,6 @@ var ke = h.toLowerCase(), Ae = ({ archive: e }) => async (t) => {
810
812
  }
811
813
  };
812
814
  //#endregion
813
- export { wt as ServiceWorkerStreamer, Ct as Streamer, c as arrayBufferFileAccessors, s as blobFileAccessors, Oe as configure, r as createArchive, ve as createArchiveFromArrayBufferList, o as createArchiveFromEntries, ye as createArchiveFromText, Te as createArchiveFromUrls, F as createUniqueXmlSafeId, P as createXmlSafeId, I as createXmlSafeIdFactory, Y as generateManifestFromArchive, Z as generateResourceFromArchive, R as getArchiveFileRecordByUri, z as getArchiveHasComicInfo, V as getArchiveOpfInfo, n as getUriBasePath, i as getUriBasename, Ee as isDirectoryRecord, L as isFileRecord, B as readRecordAsText, t as removeTrailingSlash, e as sortByTitleComparator };
815
+ export { wt as ServiceWorkerStreamer, Ct as Streamer, c as arrayBufferFileAccessors, s as blobFileAccessors, Oe as configure, r as createArchive, ve as createArchiveFromArrayBufferList, o as createArchiveFromEntries, ye as createArchiveFromText, Te as createArchiveFromUrls, U as createManifestResourceHref, F as createUniqueXmlSafeId, P as createXmlSafeId, I as createXmlSafeIdFactory, X as generateManifestFromArchive, Q as generateResourceFromArchive, R as getArchiveFileRecordByUri, z as getArchiveHasComicInfo, V as getArchiveOpfInfo, n as getUriBasePath, i as getUriBasename, Ee as isDirectoryRecord, L as isFileRecord, B as readRecordAsText, t as removeTrailingSlash, e as sortByTitleComparator };
814
816
 
815
817
  //# sourceMappingURL=index.js.map