@prose-reader/streamer 1.319.0 → 1.321.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (82) hide show
  1. package/dist/Streamer.d.ts +2 -2
  2. package/dist/{archives/archiveLoader.d.ts → archiveLoader.d.ts} +1 -1
  3. package/dist/generators/manifest/hooks/apple.d.ts +1 -1
  4. package/dist/generators/manifest/hooks/audiobookToc.d.ts +1 -1
  5. package/dist/generators/manifest/hooks/comicInfo.d.ts +1 -1
  6. package/dist/generators/manifest/hooks/default.d.ts +1 -1
  7. package/dist/generators/manifest/hooks/epub/epub.d.ts +1 -2
  8. package/dist/generators/manifest/hooks/epubOptimizer.d.ts +1 -2
  9. package/dist/generators/manifest/hooks/kobo.d.ts +1 -1
  10. package/dist/generators/manifest/hooks/nonEpub.d.ts +1 -1
  11. package/dist/generators/manifest/hooks/toc.d.ts +1 -2
  12. package/dist/generators/manifest/index.d.ts +1 -1
  13. package/dist/generators/resources/hooks/calibreFixHook.d.ts +1 -1
  14. package/dist/generators/resources/hooks/cssFixHook.d.ts +1 -1
  15. package/dist/generators/resources/hooks/defaultHook.d.ts +1 -1
  16. package/dist/generators/resources/hooks/selfClosingTagsFixHook.d.ts +1 -1
  17. package/dist/generators/resources/index.d.ts +1 -1
  18. package/dist/hooks.d.ts +1 -1
  19. package/dist/index/index.cjs +1 -31
  20. package/dist/index/index.cjs.map +1 -1
  21. package/dist/index/index.js +196 -423
  22. package/dist/index/index.js.map +1 -1
  23. package/dist/index.d.ts +1 -14
  24. package/package.json +5 -63
  25. package/dist/archives/createArchive.d.ts +0 -10
  26. package/dist/archives/createArchiveFromArrayBufferList.d.ts +0 -11
  27. package/dist/archives/createArchiveFromEntries.d.ts +0 -29
  28. package/dist/archives/createArchiveFromJszip/index.cjs +0 -2
  29. package/dist/archives/createArchiveFromJszip/index.cjs.map +0 -1
  30. package/dist/archives/createArchiveFromJszip/index.js +0 -19
  31. package/dist/archives/createArchiveFromJszip/index.js.map +0 -1
  32. package/dist/archives/createArchiveFromJszip.d.ts +0 -7
  33. package/dist/archives/createArchiveFromLibArchive/index.cjs +0 -2
  34. package/dist/archives/createArchiveFromLibArchive/index.cjs.map +0 -1
  35. package/dist/archives/createArchiveFromLibArchive/index.js +0 -16
  36. package/dist/archives/createArchiveFromLibArchive/index.js.map +0 -1
  37. package/dist/archives/createArchiveFromLibArchive.d.ts +0 -7
  38. package/dist/archives/createArchiveFromNodeUnrarJs/index.cjs +0 -2
  39. package/dist/archives/createArchiveFromNodeUnrarJs/index.cjs.map +0 -1
  40. package/dist/archives/createArchiveFromNodeUnrarJs/index.js +0 -27
  41. package/dist/archives/createArchiveFromNodeUnrarJs/index.js.map +0 -1
  42. package/dist/archives/createArchiveFromNodeUnrarJs.d.ts +0 -7
  43. package/dist/archives/createArchiveFromText.d.ts +0 -7
  44. package/dist/archives/createArchiveFromUnzipper/index.cjs +0 -2
  45. package/dist/archives/createArchiveFromUnzipper/index.cjs.map +0 -1
  46. package/dist/archives/createArchiveFromUnzipper/index.js +0 -23
  47. package/dist/archives/createArchiveFromUnzipper/index.js.map +0 -1
  48. package/dist/archives/createArchiveFromUnzipper.d.ts +0 -7
  49. package/dist/archives/createArchiveFromUrls.d.ts +0 -9
  50. package/dist/archives/createArchiveFromZipJs/index.cjs +0 -2
  51. package/dist/archives/createArchiveFromZipJs/index.cjs.map +0 -1
  52. package/dist/archives/createArchiveFromZipJs/index.js +0 -20
  53. package/dist/archives/createArchiveFromZipJs/index.js.map +0 -1
  54. package/dist/archives/createArchiveFromZipJs.d.ts +0 -7
  55. package/dist/archives/fileAccessors.d.ts +0 -15
  56. package/dist/archives/getArchiveHasComicInfo.d.ts +0 -2
  57. package/dist/archives/printTree.d.ts +0 -1
  58. package/dist/archives/readRecordAsText.d.ts +0 -7
  59. package/dist/archives/types.d.ts +0 -42
  60. package/dist/createArchiveFromEntries-CNz716dm.js +0 -68
  61. package/dist/createArchiveFromEntries-CNz716dm.js.map +0 -1
  62. package/dist/createArchiveFromEntries-DL9Q2cPL.cjs +0 -3
  63. package/dist/createArchiveFromEntries-DL9Q2cPL.cjs.map +0 -1
  64. package/dist/epubs/getArchiveOpfInfo.d.ts +0 -5
  65. package/dist/epubs/getSpineItemFilesFromArchive.d.ts +0 -6
  66. package/dist/epubs/isArchiveEpub.d.ts +0 -2
  67. package/dist/epubs/readArchiveOpf.d.ts +0 -17
  68. package/dist/fileAccessors-DWVChFUB.cjs +0 -2
  69. package/dist/fileAccessors-DWVChFUB.cjs.map +0 -1
  70. package/dist/fileAccessors-etcCPnpQ.js +0 -12
  71. package/dist/fileAccessors-etcCPnpQ.js.map +0 -1
  72. package/dist/parsers/nav.d.ts +0 -5
  73. package/dist/parsers/nav.test.d.ts +0 -1
  74. package/dist/parsers/xml.d.ts +0 -2
  75. package/dist/tests/setupTests.d.ts +0 -0
  76. package/dist/utils/createXmlSafeId.d.ts +0 -3
  77. package/dist/utils/createXmlSafeId.test.d.ts +0 -1
  78. package/dist/utils/sortByTitleComparator.d.ts +0 -1
  79. package/dist/utils/sortByTitleComparator.test.d.ts +0 -1
  80. package/dist/utils/uri.d.ts +0 -3
  81. package/dist/utils/uri.test.d.ts +0 -1
  82. /package/dist/{archives/archiveLoader.test.d.ts → archiveLoader.test.d.ts} +0 -0
@@ -1,171 +1,51 @@
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
- import { n as s, t as c } from "../fileAccessors-etcCPnpQ.js";
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";
5
- import { XmlDocument as y, XmlElement as ae, XmlTextNode as oe } from "xmldoc";
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
- //#region src/archives/createArchiveFromArrayBufferList.ts
8
- var ve = async (e, t = {}) => o(e, (e) => e.isDir ? {
9
- dir: !0,
10
- uri: e.name
11
- } : {
12
- dir: !1,
13
- uri: e.name,
14
- size: e.size,
15
- ...c(e.data, l(e.name) ?? "")
16
- }, {
17
- ...t,
18
- close: () => Promise.resolve()
19
- }), ye = async (e, { mimeType: t, direction: n } = { mimeType: "text/plain" }) => {
20
- let a = `
21
- <?xml version="1.0" encoding="UTF-8"?>
22
- <package xmlns="http://www.idpf.org/2007/opf" version="3.0" xml:lang="ja" prefix="rendition: http://www.idpf.org/vocab/rendition/#"
23
- unique-identifier="ootuya-id">
24
- <metadata xmlns:opf="http://www.idpf.org/2007/opf" xmlns:dc="http://purl.org/dc/elements/1.1/"
25
- xmlns:dcterms="http://purl.org/dc/terms/">
26
- <meta property="rendition:layout">reflowable</meta>
27
- </metadata>
28
- <manifest>
29
- <item id="p01" href="p01.txt" media-type="text/plain"/>
30
- </manifest>
31
- <spine page-progression-direction="${n ?? "ltr"}">
32
- <itemref idref="p01" />
33
- </spine>
34
- </package>
35
- `;
36
- return r({
37
- filename: "content.txt",
38
- encodingFormat: t,
39
- records: [{
40
- dir: !1,
41
- basename: i("generated.opf"),
42
- uri: "generated.opf",
43
- size: 0,
44
- ...s(async () => new Blob([a]))
45
- }, {
46
- dir: !1,
47
- basename: i("p01.txt"),
48
- uri: "p01.txt",
49
- size: typeof e == "string" ? new Blob([e]).size : e.size,
50
- encodingFormat: t,
51
- ...s(async () => typeof e == "string" ? new Blob([e]) : e)
52
- }],
53
- close: () => Promise.resolve()
54
- });
55
- }, be = /^[A-Za-z0-9_][A-Za-z0-9_.-]*$/, xe = /^[A-Za-z0-9_]/, M = /^xml/i, Se = /[^A-Za-z0-9_.-]+/g, N = "_", Ce = (e) => e.replace(/^_+|_+$/g, ""), we = (e) => Ce(e.trim().replaceAll("/", "_").replace(Se, "_")), P = (e) => {
56
- if (be.test(e) && !M.test(e)) return e;
57
- let t = we(e), n = t && !M.test(t) ? t : `${N}${t}`;
58
- return xe.test(n) ? n : `${N}${n}`;
59
- }, F = (e, t) => {
60
- let n = P(e);
61
- if (!t.has(n)) return t.add(n), n;
62
- let r = 2, i = `${n}-${r}`;
63
- for (; t.has(i);) r += 1, i = `${n}-${r}`;
64
- return t.add(i), i;
65
- }, I = () => {
66
- let e = /* @__PURE__ */ new Set();
67
- return (t) => F(t, e);
68
- }, Te = async (e, t) => {
69
- let n = I(), a = e.map((e) => ({
70
- id: n(e),
71
- url: e
72
- })), o = `
73
- <?xml version="1.0" encoding="UTF-8"?><package xmlns="http://www.idpf.org/2007/opf" version="2.0" unique-identifier="bookid">
74
- <metadata>
75
- <meta property="rendition:layout">${t?.useRenditionFlow ? "reflowable" : "pre-paginated"}</meta>
76
- ${t?.useRenditionFlow ? "<meta property=\"rendition:flow\">scrolled-continuous</meta>" : ""}
77
- </metadata>
78
- <manifest>
79
- ${a.map(({ id: e, url: t }) => {
80
- let n = l(t);
81
- return `<item id="${e}" href="${u(t)}" media-type="${u(n ?? "")}"/>`;
82
- }).join("\n")}
83
- </manifest>
84
- <spine>
85
- ${a.map(({ id: e }) => `<itemref idref="${e}" />`).join("\n")}
86
- </spine>
87
- </package>
88
- `, c = e.map((e) => ({
89
- dir: !1,
90
- basename: i(e),
91
- encodingFormat: l(e),
92
- uri: e,
93
- size: 0,
94
- ...s(async () => (await fetch(e)).blob())
95
- }));
96
- return r({
97
- records: [{
98
- dir: !1,
99
- basename: "content.opf",
100
- uri: "content.opf",
101
- size: 0,
102
- ...s(async () => new Blob([o]))
103
- }, ...c],
104
- close: () => Promise.resolve()
105
- });
106
- }, L = (e) => !e.dir, Ee = (e) => e.dir, R = (e, t) => {
107
- let n = e.recordsByUri.get(t);
108
- return n && L(n) ? n : void 0;
109
- }, De = g.toLowerCase(), z = (e) => e.records.find((e) => L(e) && e.basename.toLowerCase() === De), B = async (e) => new TextDecoder().decode(await e.arrayBuffer()), Oe = ({ enableReport: e } = {}) => {
110
- a.enable(!!e);
111
- }, V = (e) => {
112
- let t = e.records.filter((e) => !e.dir).find((e) => e.uri.endsWith(".opf"));
113
- return {
114
- data: t,
115
- basePath: t?.uri.substring(0, t.uri.lastIndexOf("/")) || ""
116
- };
117
- };
118
- //#endregion
119
- //#region src/epubs/readArchiveOpf.ts
120
- async function H(e) {
121
- let { data: t, basePath: n } = V(e) || {};
122
- if (!(!t || t.dir)) return {
123
- opf: re(await B(t)),
124
- basePath: n
125
- };
126
- }
1
+ import { Report as e, createXmlSafeIdFactory as t, detectMimeTypeFromName as n, isMediaContentMimeType as r, isXmlBasedMimeType as i, parseContentType as a, removeTrailingSlash as o, urlJoin as s } from "@prose-reader/shared";
2
+ import { APPLE_IBOOKS_DISPLAY_OPTIONS_FILENAME as c, COMIC_INFO_FILENAME as l, KOBO_DISPLAY_OPTIONS_FILENAME as u, getArchiveFileRecordByUri as d, getArchiveHasComicInfo as f, getArchiveOpfInfo as p, getSpineItemFilesFromArchive as m, isArchiveEpub as h, isFileRecord as g, parseAppleDisplayOptionsXml as ee, parseComicInfo as _, parseKoboXml as te, readArchiveOpf as v, readRecordAsText as y, resolveArchiveMetadata as b, resolveArchiveToc as x } from "@prose-reader/archive-reader";
3
+ import { XmlDocument as S } from "xmldoc";
4
+ import { BehaviorSubject as ne, EMPTY as C, NEVER as w, Subject as T, catchError as E, distinctUntilChanged as re, filter as D, finalize as ie, first as O, from as k, ignoreElements as A, lastValueFrom as ae, map as j, merge as M, mergeMap as N, of as oe, pairwise as se, shareReplay as ce, startWith as le, switchMap as P, takeUntil as ue, tap as F, timer as I } from "rxjs";
127
5
  //#endregion
128
- //#region src/generators/manifest/hooks/apple.ts
129
- var ke = h.toLowerCase(), Ae = ({ archive: e }) => async (t) => {
130
- let n = e.records.find((e) => !e.dir && e.basename.toLowerCase() === ke);
6
+ //#region src/report.ts
7
+ var L = e.namespace("@prose-reader/streamer", void 0, { color: "#ffae42" }), R = ({ enableReport: e } = {}) => {
8
+ L.enable(!!e);
9
+ }, z = c.toLowerCase(), B = ({ archive: e }) => async (t) => {
10
+ let n = e.records.find((e) => !e.dir && e.basename.toLowerCase() === z);
131
11
  if (!n || n.dir) return t;
132
- let r = await B(n);
12
+ let r = await y(n);
133
13
  try {
134
- let { renditionLayout: e } = v(ee(r));
14
+ let { renditionLayout: e } = b(ee(r));
135
15
  return {
136
16
  ...t,
137
17
  renditionLayout: t.renditionLayout ?? e
138
18
  };
139
19
  } catch (e) {
140
- return console.error(`Unable to parse ${h} for content\n`, r), console.error(e), t;
20
+ return console.error(`Unable to parse ${c} for content\n`, r), console.error(e), t;
141
21
  }
142
- }, je = g.toLowerCase(), Me = ({ archive: e }) => async (t) => {
143
- let n = z(e);
22
+ }, V = l.toLowerCase(), H = ({ archive: e }) => async (t) => {
23
+ let n = f(e);
144
24
  if (!n) return t;
145
25
  let r = {
146
26
  ...t,
147
- spineItems: t.spineItems.filter((e) => !e.id.toLowerCase().endsWith(je)).map((e, t, n) => ({
27
+ spineItems: t.spineItems.filter((e) => !e.id.toLowerCase().endsWith(V)).map((e, t, n) => ({
148
28
  ...e,
149
29
  progressionWeight: 1 / n.length
150
30
  }))
151
- }, i = await B(n);
31
+ }, i = await y(n);
152
32
  try {
153
- let e = v(te(i));
33
+ let e = b(_(i));
154
34
  return {
155
35
  ...r,
156
36
  readingDirection: e.readingDirection ?? r.readingDirection
157
37
  };
158
38
  } catch (e) {
159
- return console.error(`Unable to parse ${g} for content\n`, i), console.error(e), r;
39
+ return console.error(`Unable to parse ${l} for content\n`, i), console.error(e), r;
160
40
  }
161
- }, Ne = ({ baseUrl: e = "", resourcePath: t }) => {
41
+ }, U = ({ baseUrl: e = "", resourcePath: t }) => {
162
42
  if (!e && /^https?:\/\//.test(t)) return encodeURI(t);
163
43
  let n = e ? `${e}${e.endsWith("/") ? "" : "/"}` : "file://";
164
44
  return encodeURI(`${n}${t}`);
165
- }, Pe = ({ archive: e, baseUrl: t }) => async () => {
166
- let n = e.records.filter((e) => !e.dir), r = I(), i = n.map((e) => ({
45
+ }, de = ({ archive: e, baseUrl: n }) => async () => {
46
+ let r = e.records.filter((e) => !e.dir), i = t(), a = r.map((e) => ({
167
47
  file: e,
168
- id: r(e.uri)
48
+ id: i(e.uri)
169
49
  }));
170
50
  return {
171
51
  filename: e.filename ?? "",
@@ -173,30 +53,26 @@ var ke = h.toLowerCase(), Ae = ({ archive: e }) => async (t) => {
173
53
  renditionLayout: void 0,
174
54
  renditionSpread: "auto",
175
55
  readingDirection: void 0,
176
- spineItems: i.filter(({ file: e }) => !e.basename.endsWith(".db")).map(({ file: e, id: r }, i) => ({
177
- id: r,
56
+ spineItems: a.filter(({ file: e }) => !e.basename.endsWith(".db")).map(({ file: e, id: t }, i) => ({
57
+ id: t,
178
58
  index: i,
179
- href: Ne({
180
- baseUrl: t,
59
+ href: U({
60
+ baseUrl: n,
181
61
  resourcePath: e.uri
182
62
  }),
183
63
  renditionLayout: void 0,
184
- progressionWeight: 1 / n.length,
64
+ progressionWeight: 1 / r.length,
185
65
  pageSpreadLeft: void 0,
186
66
  pageSpreadRight: void 0,
187
67
  mediaType: e.encodingFormat
188
68
  })),
189
- items: i.map(({ file: e, id: n }) => ({
190
- id: n,
191
- href: encodeURI(`${t}${e.uri}`)
69
+ items: a.map(({ file: e, id: t }) => ({
70
+ id: t,
71
+ href: encodeURI(`${n}${e.uri}`)
192
72
  }))
193
73
  };
194
- }, U = async ({ archive: e, archiveOpf: t }) => {
195
- if (!t) return [];
196
- let { opf: n, basePath: r } = t, { spineRows: i } = n;
197
- return e.records.filter((e) => i.find((t) => r ? `${r}/${t.href}` === e.uri : `${t.href}` === e.uri));
198
74
  }, W = (e, t, n) => {
199
- let { basePath: r } = V(t) || {};
75
+ let { basePath: r } = p(t) || {};
200
76
  return e.map((e) => {
201
77
  let t = e.href, i = n?.(t) ?? "";
202
78
  return {
@@ -205,26 +81,26 @@ var ke = h.toLowerCase(), Ae = ({ archive: e }) => async (t) => {
205
81
  mediaType: e.mediaType
206
82
  };
207
83
  });
208
- }, Fe = (e) => {
84
+ }, fe = (e) => {
209
85
  let t = e?.trim();
210
86
  return t === "scrolled-continuous" || t === "scrolled-doc" || t === "paginated" || t === "auto" ? t : "auto";
211
- }, Ie = (e) => {
87
+ }, pe = (e) => {
212
88
  let t = e?.trim();
213
89
  if (t === "none" || t === "landscape" || t === "portrait" || t === "both" || t === "auto") return t;
214
- }, Le = (e) => {
90
+ }, me = (e) => {
215
91
  let t = e?.trim();
216
92
  if (t === "cover" || t === "title-page" || t === "copyright-page" || t === "text") return t;
217
- }, Re = ({ archive: e, baseUrl: t, archiveOpf: n }) => async (r) => {
93
+ }, he = ({ archive: e, baseUrl: t, archiveOpf: n }) => async (r) => {
218
94
  if (!n) return r;
219
- let { opf: i, basePath: o } = n, s = v(i);
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({
95
+ let { opf: i, basePath: a } = n, o = b(i);
96
+ L.groupCollapsed(...L.getGroupArgs("OPF parsed")), L.log("opf", i), L.groupEnd();
97
+ let s = i.renditionLayoutMeta?.trim(), c = s === "reflowable" || s === "pre-paginated" ? s : o.renditionLayout, l = i.title?.trim() || e.records.find(({ dir: e }) => e)?.basename || "", u = o.readingDirection ?? r.readingDirection, f = (await m({
222
98
  archive: e,
223
99
  archiveOpf: n
224
- })).filter(L).reduce((e, t) => t.size + e, 0), p = i.guide, m = [];
100
+ })).filter(g).reduce((e, t) => t.size + e, 0), p = i.guide, h = [];
225
101
  for (let e of p) {
226
- let t = Le(e.type);
227
- t !== void 0 && m.push({
102
+ let t = me(e.type);
103
+ t !== void 0 && h.push({
228
104
  href: e.href,
229
105
  title: e.title,
230
106
  type: t
@@ -232,18 +108,18 @@ var ke = h.toLowerCase(), Ae = ({ archive: e }) => async (t) => {
232
108
  }
233
109
  return {
234
110
  filename: e.filename ?? "",
235
- renditionLayout: l,
236
- renditionFlow: Fe(i.renditionFlowMeta),
237
- renditionSpread: Ie(i.renditionSpreadMeta),
238
- title: u,
239
- readingDirection: d,
111
+ renditionLayout: c,
112
+ renditionFlow: fe(i.renditionFlowMeta),
113
+ renditionSpread: pe(i.renditionSpreadMeta),
114
+ title: l,
115
+ readingDirection: u,
240
116
  spineItems: i.spineRows.map((n, r) => {
241
- let a = R(e, o ? `${o}/${n.href}` : n.href), s = a ? a.size : 0, c = t || (/^https?:\/\//.test(n.href) ? "" : "file://");
117
+ let o = d(e, a ? `${a}/${n.href}` : n.href), s = o ? o.size : 0, l = t || (/^https?:\/\//.test(n.href) ? "" : "file://");
242
118
  return {
243
119
  id: n.id,
244
120
  index: r,
245
- href: n.href.startsWith("https://") ? n.href : o ? `${c}${o}/${n.href}` : `${c}${n.href}`,
246
- renditionLayout: n.renditionLayout ?? l,
121
+ href: n.href.startsWith("https://") ? n.href : a ? `${l}${a}/${n.href}` : `${l}${n.href}`,
122
+ renditionLayout: n.renditionLayout ?? c,
247
123
  ...n.renditionFlow === void 0 ? {} : { renditionFlow: n.renditionFlow },
248
124
  progressionWeight: f > 0 ? s / f : 1 / i.spineRows.length,
249
125
  pageSpreadLeft: n.pageSpreadLeft,
@@ -252,19 +128,19 @@ var ke = h.toLowerCase(), Ae = ({ archive: e }) => async (t) => {
252
128
  };
253
129
  }),
254
130
  items: W(i.manifestItems, e, (e) => /^https?:\/\//.test(e) ? "" : t || "file://"),
255
- guide: m.length > 0 ? m : void 0
131
+ guide: h.length > 0 ? h : void 0
256
132
  };
257
- }, ze = (e) => {
133
+ }, ge = (e) => {
258
134
  let t = e.descendantWithPath("head")?.childrenNamed("meta").find((e) => e.attr.name === "viewport");
259
135
  return !!(t && t.attr.name === "viewport");
260
- }, Be = (e) => e.reduce(async (e, t) => {
261
- if (!await e || !f({
262
- mimeType: L(t) ? t.encodingFormat : void 0,
136
+ }, _e = (e) => e.reduce(async (e, t) => {
137
+ if (!await e || !i({
138
+ mimeType: g(t) ? t.encodingFormat : void 0,
263
139
  uri: t.uri
264
140
  })) return !1;
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({
141
+ let n = t.dir ? null : await y(t);
142
+ return n ? ge(new S(n)) : !1;
143
+ }, Promise.resolve(!0)), ve = ({ archive: e, archiveOpf: t }) => async (n) => n.renditionLayout === "reflowable" && n.spineItems.every((e) => e.renditionLayout === "reflowable") && await _e(await m({
268
144
  archive: e,
269
145
  archiveOpf: t
270
146
  })) ? {
@@ -274,166 +150,63 @@ var ke = h.toLowerCase(), Ae = ({ archive: e }) => async (t) => {
274
150
  renditionLayout: "pre-paginated"
275
151
  })),
276
152
  renditionLayout: "pre-paginated"
277
- } : n, He = () => (e) => ({
153
+ } : n, ye = () => (e) => ({
278
154
  ...e,
279
155
  readingDirection: e.readingDirection ?? "ltr"
280
- }), Ue = async (e) => {
156
+ }), be = async (e) => {
281
157
  let t;
282
158
  return await Promise.all(e.records.map(async (e) => {
283
- if (e.dir || !e.uri.endsWith(_)) return;
284
- let n = await B(e);
159
+ if (e.dir || !e.uri.endsWith(u)) return;
160
+ let n = await y(e);
285
161
  try {
286
- let { renditionLayout: e } = ne(n);
162
+ let { renditionLayout: e } = te(n);
287
163
  e && (t = e);
288
164
  } catch (e) {
289
- console.error(`Unable to parse ${_} for content\n`, n), console.error(e);
165
+ console.error(`Unable to parse ${u} for content\n`, n), console.error(e);
290
166
  }
291
167
  })), {
292
168
  kind: "kobo",
293
169
  ...t === void 0 ? {} : { renditionLayout: t }
294
170
  };
295
- }, We = ({ archive: e }) => async (t) => {
296
- let { renditionLayout: n } = v(await Ue(e));
171
+ }, xe = ({ archive: e }) => async (t) => {
172
+ let { renditionLayout: n } = b(await be(e));
297
173
  return {
298
174
  ...t,
299
175
  renditionLayout: t.renditionLayout ?? n
300
176
  };
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 : {
177
+ }, Se = ({ archive: e }) => async (t) => h(e) ? t : {
302
178
  ...t,
303
179
  spineItems: t.spineItems.map((t) => {
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 ?? "");
180
+ let i = e.records.find((e) => decodeURI(t.href).endsWith(e.uri)), o = a((i && g(i) ? i.encodingFormat : void 0) ?? "") || n(i?.basename ?? "");
305
181
  return {
306
182
  ...t,
307
- renditionLayout: r && d(r) ? "pre-paginated" : t.renditionLayout
183
+ renditionLayout: o && r(o) ? "pre-paginated" : t.renditionLayout
308
184
  };
309
185
  })
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 }) => {
311
- let r = {
312
- contents: [],
313
- path: "",
314
- href: "",
315
- title: ""
316
- }, i = e.childNamed("span") || e.childNamed("a");
317
- r.title = (i?.attr.title || i?.val.trim() || K(i)) ?? "";
318
- let a = i?.name;
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
- let o = e.childNamed("ol");
321
- if (o) {
322
- let e = o.childrenNamed("li");
323
- e && e.length > 0 && (r.contents = e.map((e) => q(e, {
324
- basePath: t,
325
- baseUrl: n
326
- })));
327
- }
328
- return r;
329
- }, Je = (e, { basePath: t, baseUrl: n }) => {
330
- let r = [], i;
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, {
333
- basePath: t,
334
- baseUrl: n
335
- }));
336
- }), r;
337
- }, Ye = async (e, t, { baseUrl: r }) => {
338
- let i = e.manifestItems.find(qe);
339
- if (i?.href) {
340
- let e = t.records.find((e) => e.uri.endsWith(i.href));
341
- if (e && !e.dir) return Je(new y(await B(e)), {
342
- basePath: n(e.uri),
343
- baseUrl: r
344
- });
345
- }
346
- }, J = (e, { opfBasePath: t, baseUrl: n, prefix: r }) => {
347
- let i = e?.childNamed(`${r}content`)?.attr.src || "", a = {
348
- title: e?.descendantWithPath(`${r}navLabel.${r}text`)?.val || "",
349
- path: m(t, i),
350
- href: m(n, t, i),
351
- contents: []
352
- }, o = e.childrenNamed(`${r}navPoint`);
353
- return o && o.length > 0 && (a.contents = o.map((e) => J(e, {
354
- opfBasePath: t,
355
- baseUrl: n,
356
- prefix: r
357
- }))), a;
358
- }, Xe = (e, { opfBasePath: t, baseUrl: n }) => {
359
- let r = [], i = e.name, a = "";
360
- return i.indexOf(":") !== -1 && (a = `${i.split(":")[0]}:`), e.childNamed(`${a}navMap`)?.childrenNamed(`${a}navPoint`).forEach((e) => {
361
- r.push(J(e, {
362
- opfBasePath: t,
363
- baseUrl: n,
364
- prefix: a
365
- }));
366
- }), r;
367
- }, Ze = async ({ opf: e, opfBasePath: t, baseUrl: n, archive: r }) => {
368
- let i = e.spineTocIdref;
369
- if (i) {
370
- let a = e.manifestItems.find((e) => e.id === i);
371
- if (a) {
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)), {
374
- opfBasePath: t,
375
- baseUrl: n
376
- });
377
- }
378
- }
379
- }, Qe = async (e, t, { baseUrl: n }) => {
380
- let { basePath: r } = V(t) || {}, i = await Ye(e, t, { baseUrl: n });
381
- if (i) return i;
382
- let a = await Ze({
383
- opf: e,
384
- opfBasePath: r ?? "",
385
- archive: t,
386
- baseUrl: n
387
- });
388
- if (a) return a;
389
- }, $e = (e) => e.replace(/\.[^.]+$/, "").replace(/[_-]/g, " ").replace(/\s+/g, " ").trim(), et = (e, t) => {
390
- if (e.spineItems.length !== 0 && e.spineItems.every((e) => (p(e.mediaType ?? "") || l(e.href))?.startsWith("audio/"))) return e.spineItems.map((e) => {
186
+ }, Ce = (e) => e.replace(/\.[^.]+$/, "").replace(/[_-]/g, " ").replace(/\s+/g, " ").trim(), we = (e, t) => {
187
+ if (e.spineItems.length !== 0 && e.spineItems.every((e) => (a(e.mediaType ?? "") || n(e.href))?.startsWith("audio/"))) return e.spineItems.map((e) => {
391
188
  let n = t.records.find((t) => !t.dir && decodeURI(e.href).endsWith(t.uri));
392
189
  return {
393
- title: $e(n?.basename ?? e.href),
190
+ title: Ce(n?.basename ?? e.href),
394
191
  href: e.href,
395
192
  path: n?.uri ?? e.href,
396
193
  contents: []
397
194
  };
398
195
  });
399
- }, tt = (t, { baseUrl: n }) => {
400
- let r = [...t.records].sort((t, n) => e(t.uri, n.uri)), i = (e, t, n, r, a) => {
401
- let o = e.find((e) => e.title === t), [s, ...c] = n;
402
- return o ? s ? [...e.filter((e) => e !== o), {
403
- ...o,
404
- contents: [...o.contents, ...i(o.contents, s, c, r, a)]
405
- }] : o.path.split("/").length > a.split("/").length ? [...e.filter((e) => e !== o), {
406
- ...o,
407
- path: a,
408
- href: r
409
- }] : e : s ? [...e, {
410
- contents: i([], s, c, r, a),
411
- href: r,
412
- path: a,
413
- title: t
414
- }] : [...e, {
415
- contents: [],
416
- href: r,
417
- path: a,
418
- title: t
419
- }];
420
- };
421
- return r.reduce((e, t) => {
422
- if (t.dir) return e;
423
- let [r, ...a] = t.uri.split("/").slice(0, -1);
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);
427
- }, []);
428
- }, nt = async (e, t, { baseUrl: n, archiveOpf: r }) => {
429
- if (r) return await Qe(r.opf, e, { baseUrl: n }) || [];
430
- let i = et(t, e);
196
+ }, G = (e) => (t) => ({
197
+ title: t.title,
198
+ path: t.path,
199
+ href: t.containerHref ? s(e, t.containerHref) : "",
200
+ contents: t.contents.map(G(e))
201
+ }), Te = async (e, t, { baseUrl: n, archiveOpf: r }) => {
202
+ if (r) return (await x(e, { opf: r }) ?? []).map(G(n));
203
+ let i = we(t, e);
431
204
  if (i) return i;
432
- let a = tt(e, { baseUrl: n });
433
- if (a.length !== 0) return a;
434
- }, rt = ({ archive: e, baseUrl: t, archiveOpf: n }) => async (r) => {
205
+ let a = await x(e);
206
+ if (a) return a.map(G(n));
207
+ }, Ee = ({ archive: e, baseUrl: t, archiveOpf: n }) => async (r) => {
435
208
  if (r.nav) return r;
436
- let i = await nt(e, r, {
209
+ let i = await Te(e, r, {
437
210
  baseUrl: t,
438
211
  archiveOpf: n
439
212
  });
@@ -441,74 +214,74 @@ var ke = h.toLowerCase(), Ae = ({ archive: e }) => async (t) => {
441
214
  ...r,
442
215
  nav: { toc: i }
443
216
  } : r;
444
- }, it = (e) => e ? e.endsWith("/") ? e : `${e}/` : "", Y = async (e, { baseUrl: t = "", hooks: n = {} } = {}) => {
445
- a.log("Generating manifest from archive", e);
446
- let r = await H(e), i = it(t), o = (t) => (t ?? []).map((t) => t({
217
+ }, De = (e) => e ? e.endsWith("/") ? e : `${e}/` : "", K = async (e, { baseUrl: t = "", hooks: n = {} } = {}) => {
218
+ L.log("Generating manifest from archive", e);
219
+ let r = await v(e), i = De(t), a = (t) => (t ?? []).map((t) => t({
447
220
  archive: e,
448
221
  baseUrl: i
449
- })), s = [
450
- Re({
222
+ })), o = [
223
+ he({
451
224
  archive: e,
452
225
  baseUrl: i,
453
226
  archiveOpf: r
454
227
  }),
455
- Me({
228
+ H({
456
229
  archive: e,
457
230
  baseUrl: i
458
231
  }),
459
- Ae({
232
+ B({
460
233
  archive: e,
461
234
  baseUrl: i
462
235
  }),
463
- Ke({
236
+ Se({
464
237
  archive: e,
465
238
  baseUrl: i
466
239
  }),
467
- ...o(n.content)
468
- ], c = o(n.spine), l = [
469
- Ve({
240
+ ...a(n.content)
241
+ ], s = a(n.spine), c = [
242
+ ve({
470
243
  archive: e,
471
244
  baseUrl: i,
472
245
  archiveOpf: r
473
246
  }),
474
- We({
247
+ xe({
475
248
  archive: e,
476
249
  baseUrl: i
477
250
  }),
478
- ...o(n.presentation)
479
- ], u = [rt({
251
+ ...a(n.presentation)
252
+ ], l = [Ee({
480
253
  archive: e,
481
254
  baseUrl: i,
482
255
  archiveOpf: r
483
- }), ...o(n.navigation)], d = [
256
+ }), ...a(n.navigation)], u = [
257
+ ...o,
484
258
  ...s,
485
259
  ...c,
486
260
  ...l,
487
- ...u,
488
- He()
261
+ ye()
489
262
  ];
490
263
  try {
491
- let t = Pe({
264
+ let t = de({
492
265
  archive: e,
493
266
  baseUrl: i
494
- })(), n = await d.reduce(async (e, t) => await t(await e), t);
495
- if (a.log("Generated manifest", n), process.env.NODE_ENV === "development" && a.isEnabled()) {
267
+ })(), n = await u.reduce(async (e, t) => await t(await e), t);
268
+ if (L.log("Generated manifest", n), process.env.NODE_ENV === "development" && L.isEnabled()) {
496
269
  let e = JSON.stringify(n, null, 2);
497
- a.groupCollapsed(...a.getGroupArgs("Generated manifest")), a.log(`\n${e}`), a.groupEnd();
270
+ L.groupCollapsed(...L.getGroupArgs("Generated manifest")), L.log(`\n${e}`), L.groupEnd();
498
271
  }
499
272
  return n;
500
273
  } catch (e) {
501
- throw a.error(e), e;
274
+ throw L.error(e), e;
502
275
  }
503
- }, at = (e) => {
276
+ }, Oe = (e) => {
504
277
  let t = e.descendantWithPath("head")?.childrenNamed("meta").find((e) => e.attr.name === "calibre:cover");
505
278
  return !!(t && t.attr.name === "calibre:cover");
506
- }, 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) => {
507
- let r = R(e, t);
279
+ }, ke = (e) => e.descendantWithPath("body")?.descendantWithPath("div")?.childrenNamed("svg")?.find((e) => e.attr.width === "100%" && e.attr.preserveAspectRatio === "none"), Ae = ({ archive: e, resourcePath: t }) => async (n) => {
280
+ let r = d(e, t);
508
281
  if (r?.basename.endsWith(".xhtml")) {
509
- let e = new y(typeof n.body == "string" ? n.body : await B(r));
510
- if (at(e)) {
511
- let t = ot(e);
282
+ let e = new S(typeof n.body == "string" ? n.body : await y(r));
283
+ if (Oe(e)) {
284
+ let t = ke(e);
512
285
  return t && delete t.attr.preserveAspectRatio, {
513
286
  ...n,
514
287
  body: e?.toString()
@@ -516,36 +289,36 @@ var ke = h.toLowerCase(), Ae = ({ archive: e }) => async (t) => {
516
289
  }
517
290
  }
518
291
  return n;
519
- }, ct = ({ archive: e, resourcePath: t }) => async (n) => st({
292
+ }, je = ({ archive: e, resourcePath: t }) => async (n) => Ae({
520
293
  archive: e,
521
294
  resourcePath: t
522
- })(n), lt = ({ archive: e, resourcePath: t }) => async (n) => {
523
- let r = R(e, t);
295
+ })(n), Me = ({ archive: e, resourcePath: t }) => async (n) => {
296
+ let r = d(e, t);
524
297
  if (r?.basename.endsWith(".css")) {
525
- let e = (typeof n.body == "string" ? n.body : await B(r)).replaceAll("-webkit-writing-mode", "writing-mode");
298
+ let e = (typeof n.body == "string" ? n.body : await y(r)).replaceAll("-webkit-writing-mode", "writing-mode");
526
299
  return {
527
300
  ...n,
528
301
  body: e
529
302
  };
530
303
  }
531
304
  return n;
532
- }, ut = async (e, t) => {
533
- let n = await H(e);
305
+ }, Ne = async (e, t) => {
306
+ let n = await v(e);
534
307
  if (n) {
535
308
  let { opf: r } = n, i = W(r.manifestItems, e, () => "").find((e) => t.endsWith(e.href))?.mediaType;
536
309
  if (i) return { mediaType: i };
537
310
  }
538
- return { mediaType: dt(t) };
539
- }, dt = (e) => {
311
+ return { mediaType: Pe(t) };
312
+ }, Pe = (e) => {
540
313
  if (e.endsWith(".css")) return "text/css; charset=UTF-8";
541
314
  if (e.endsWith(".jpg")) return "image/jpg";
542
315
  if (e.endsWith(".xhtml")) return "application/xhtml+xml";
543
316
  if (e.endsWith(".mp4")) return "video/mp4";
544
317
  if (e.endsWith(".svg")) return "image/svg+xml";
545
- }, ft = ({ archive: e, resourcePath: t }) => async (n) => {
546
- let r = R(e, t);
318
+ }, Fe = ({ archive: e, resourcePath: t }) => async (n) => {
319
+ let r = d(e, t);
547
320
  if (!r) return n;
548
- let i = await ut(e, t);
321
+ let i = await Ne(e, t);
549
322
  return {
550
323
  ...n,
551
324
  params: {
@@ -554,56 +327,56 @@ var ke = h.toLowerCase(), Ae = ({ archive: e }) => async (t) => {
554
327
  ...i.mediaType && { contentType: i.mediaType }
555
328
  }
556
329
  };
557
- }, 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) => {
558
- let r = R(e, t);
330
+ }, q = /* @__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("."), Ie = ({ archive: e, resourcePath: t }) => async (n) => {
331
+ let r = d(e, t);
559
332
  if (r?.basename.endsWith(".xhtml")) {
560
- let e = typeof n.body == "string" ? n.body : await B(r);
561
- if (!RegExp(`<(${X.join("|")})[\\s/>]`, "i").test(e)) return n;
562
- let t = RegExp(`<(${X.join("|")})(\\s[^>]*)?\\s*/>`, "gi"), i = e.replace(t, (e, t, n = "") => `<${t} ${n.trim()}></${t}>`);
333
+ let e = typeof n.body == "string" ? n.body : await y(r);
334
+ if (!RegExp(`<(${q.join("|")})[\\s/>]`, "i").test(e)) return n;
335
+ let t = RegExp(`<(${q.join("|")})(\\s[^>]*)?\\s*/>`, "gi"), i = e.replace(t, (e, t, n = "") => `<${t} ${n.trim()}></${t}>`);
563
336
  return {
564
337
  ...n,
565
338
  body: i
566
339
  };
567
340
  }
568
341
  return n;
569
- }, Z = async (e, t, { hooks: n = [] } = {}) => {
342
+ }, J = async (e, t, { hooks: n = [] } = {}) => {
570
343
  let r = { params: {} }, i = [
571
344
  ...n.map((n) => n({
572
345
  archive: e,
573
346
  resourcePath: t
574
347
  })),
575
- ft({
348
+ Fe({
576
349
  archive: e,
577
350
  resourcePath: t
578
351
  }),
579
- pt({
352
+ Ie({
580
353
  archive: e,
581
354
  resourcePath: t
582
355
  }),
583
- lt({
356
+ Me({
584
357
  archive: e,
585
358
  resourcePath: t
586
359
  }),
587
- ct({
360
+ je({
588
361
  archive: e,
589
362
  resourcePath: t
590
363
  })
591
364
  ];
592
365
  try {
593
366
  let n = await i.reduce(async (e, t) => await t(await e), Promise.resolve(r));
594
- if (a.log("Generated resource", t, n), n.body !== void 0) return n;
595
- let o = R(e, t);
596
- if (!o) throw Error(`no file found for resourcePath:${t}`);
367
+ if (L.log("Generated resource", t, n), n.body !== void 0) return n;
368
+ let a = d(e, t);
369
+ if (!a) throw Error(`no file found for resourcePath:${t}`);
597
370
  return {
598
371
  ...n,
599
- body: await o.blob()
372
+ body: await a.blob()
600
373
  };
601
374
  } catch (e) {
602
- throw a.error(e), e;
375
+ throw L.error(e), e;
603
376
  }
604
- }, mt = class {
377
+ }, Le = class {
605
378
  constructor(e) {
606
- this.cleanArchiveAfter = e, this.state$ = new se({
379
+ this.cleanArchiveAfter = e, this.state$ = new ne({
607
380
  status: "idle",
608
381
  locks: 0
609
382
  });
@@ -615,62 +388,62 @@ var ke = h.toLowerCase(), Ae = ({ archive: e }) => async (t) => {
615
388
  });
616
389
  }
617
390
  get locks$() {
618
- return this.state$.pipe(D(({ locks: e }) => e));
391
+ return this.state$.pipe(j(({ locks: e }) => e));
619
392
  }
620
393
  get state() {
621
394
  return this.state$.getValue();
622
395
  }
623
396
  get isUnlocked$() {
624
- return this.locks$.pipe(D((e) => e <= 0), ce(), me());
397
+ return this.locks$.pipe(j((e) => e <= 0), re(), ce());
625
398
  }
626
399
  get overTTL$() {
627
- return this.isUnlocked$.pipe(A((e) => e ? this.cleanArchiveAfter === Infinity ? x : _e(this.cleanArchiveAfter) : x));
400
+ return this.isUnlocked$.pipe(P((e) => e ? this.cleanArchiveAfter === Infinity ? w : I(this.cleanArchiveAfter) : w));
628
401
  }
629
- }, ht = ({ getArchive: e, cleanArchiveAfter: t = 300 * 1e3 }) => {
630
- let n = new S(), r = new S(), i = new S(), o = {};
631
- return n.pipe(k((t) => {
632
- let n = o[t];
633
- if (n?.state.status !== "idle") return b;
634
- let r = !1, s = (e) => {
635
- a.debug(`Cleaning up archive with key: ${e}`);
636
- let t = o[e];
637
- delete o[e], r ||= (t?.state.archive?.close(), !0);
402
+ }, Re = ({ getArchive: e, cleanArchiveAfter: t = 300 * 1e3 }) => {
403
+ let n = new T(), r = new T(), i = new T(), a = {};
404
+ return n.pipe(N((t) => {
405
+ let n = a[t];
406
+ if (n?.state.status !== "idle") return C;
407
+ let r = !1, o = (e) => {
408
+ L.debug(`Cleaning up archive with key: ${e}`);
409
+ let t = a[e];
410
+ delete a[e], r ||= (t?.state.archive?.close(), !0);
638
411
  };
639
412
  n.update({ status: "loading" });
640
- let c = n.locks$, l = n.isUnlocked$, u = c.pipe(pe(), w(([e, t]) => t > e), he(!0));
641
- return E(e(t)).pipe(j((e) => {
413
+ let s = n.locks$, c = n.isUnlocked$, l = s.pipe(se(), D(([e, t]) => t > e), le(!0));
414
+ return k(e(t)).pipe(F((e) => {
642
415
  n.update({
643
416
  archive: e,
644
417
  status: "success"
645
418
  });
646
- }), C((e) => (s(t), n.update({
419
+ }), E((e) => (o(t), n.update({
647
420
  status: "error",
648
421
  error: e
649
- }), b)), A(() => O(u.pipe(A(() => i), A(() => l), w((e) => e)), n.overTTL$).pipe(T(), j(() => {
650
- s(t);
422
+ }), C)), P(() => M(l.pipe(P(() => i), P(() => c), D((e) => e)), n.overTTL$).pipe(O(), F(() => {
423
+ o(t);
651
424
  }))));
652
- }), ge(r)).subscribe(), {
425
+ }), ue(r)).subscribe(), {
653
426
  access: (e) => {
654
- let r = !1, i = o[e] ?? new mt(t);
655
- o[e] = i, i.update({ locks: i.state.locks + 1 });
656
- let a = () => {
427
+ let r = !1, i = a[e] ?? new Le(t);
428
+ a[e] = i, i.update({ locks: i.state.locks + 1 });
429
+ let o = () => {
657
430
  r || (r = !0, i.update({ locks: i.state.locks - 1 }));
658
431
  };
659
- return n.next(e), O(i.state$.pipe(D(({ archive: e }) => e), w((e) => !!e)), i.state$.pipe(j(({ error: e }) => {
432
+ return n.next(e), M(i.state$.pipe(j(({ archive: e }) => e), D((e) => !!e)), i.state$.pipe(F(({ error: e }) => {
660
433
  if (e) throw e;
661
- }), ue())).pipe(T(), D((e) => ({
434
+ }), A())).pipe(O(), j((e) => ({
662
435
  archive: e,
663
- release: a
664
- })), C((e) => {
665
- throw a(), e;
436
+ release: o
437
+ })), E((e) => {
438
+ throw o(), e;
666
439
  }));
667
440
  },
668
441
  purge: () => {
669
442
  i.next();
670
443
  },
671
- _archives: o
444
+ _archives: a
672
445
  };
673
- }, Q = (e) => e ? /^\d+$/.test(e) ? {
446
+ }, Y = (e) => e ? /^\d+$/.test(e) ? {
674
447
  valid: !0,
675
448
  value: Number.parseInt(e, 10)
676
449
  } : {
@@ -679,20 +452,20 @@ var ke = h.toLowerCase(), Ae = ({ archive: e }) => async (t) => {
679
452
  } : {
680
453
  valid: !0,
681
454
  value: void 0
682
- }, gt = (e) => {
455
+ }, ze = (e) => {
683
456
  if (!e.toLowerCase().startsWith("bytes=")) return { kind: "missing" };
684
457
  let t = e.slice(6).trim();
685
458
  if (!t) return { kind: "invalid" };
686
459
  if (t.includes(",")) return { kind: "multi" };
687
460
  let n = /^(\d*)-(\d*)$/.exec(t);
688
461
  if (!n) return { kind: "invalid" };
689
- let [, r = "", i = ""] = n, a = Q(r.trim()), o = Q(i.trim());
462
+ let [, r = "", i = ""] = n, a = Y(r.trim()), o = Y(i.trim());
690
463
  return !a.valid || !o.valid ? { kind: "invalid" } : {
691
464
  kind: "single",
692
465
  start: a.value,
693
466
  end: o.value
694
467
  };
695
- }, _t = (e) => {
468
+ }, Be = (e) => {
696
469
  if (e instanceof Blob) return {
697
470
  size: e.size,
698
471
  slice: (t, n) => {
@@ -714,18 +487,18 @@ var ke = h.toLowerCase(), Ae = ({ archive: e }) => async (t) => {
714
487
  };
715
488
  }
716
489
  };
717
- }, vt = ({ body: e, contentType: t, rangeHeader: n }) => {
490
+ }, X = ({ body: e, contentType: t, rangeHeader: n }) => {
718
491
  let r = new Headers();
719
492
  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, {
720
493
  status: 200,
721
494
  headers: r
722
495
  });
723
- let i = gt(n);
496
+ let i = ze(n);
724
497
  if (i.kind === "missing" || i.kind === "multi") return e instanceof Blob && r.set("Content-Length", String(e.size)), new Response(e, {
725
498
  status: 200,
726
499
  headers: r
727
500
  });
728
- let a = _t(e), o = a.size;
501
+ let a = Be(e), o = a.size;
729
502
  if (i.kind === "invalid") return new Response(null, {
730
503
  status: 416,
731
504
  headers: { "Content-Range": `bytes */${o}` }
@@ -740,18 +513,18 @@ var ke = h.toLowerCase(), Ae = ({ archive: e }) => async (t) => {
740
513
  status: 206,
741
514
  headers: r
742
515
  });
743
- }, $ = "file://", yt = /^https?:\/\//, bt = (e) => {
516
+ }, Z = "file://", Ve = /^https?:\/\//, He = (e) => {
744
517
  try {
745
518
  return decodeURIComponent(e);
746
519
  } catch {
747
520
  return e;
748
521
  }
749
- }, xt = (e) => e.startsWith($) ? e.slice($.length) : e, St = (e) => {
750
- let t = xt(e);
751
- return yt.test(t) ? t : xt(bt(t));
752
- }, Ct = class {
522
+ }, Q = (e) => e.startsWith(Z) ? e.slice(Z.length) : e, Ue = (e) => {
523
+ let t = Q(e);
524
+ return Ve.test(t) ? t : Q(He(t));
525
+ }, $ = class {
753
526
  constructor({ hooks: e, onError: t, onManifestSuccess: n, ...r }) {
754
- 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;
527
+ this.onError = (e) => (console.error(e), new Response(String(e), { status: 500 })), this.archiveLoader = Re(r), this.hooks = e ?? {}, this.onManifestSuccess = n ?? (({ manifest: e }) => Promise.resolve(e)), this.onError = t ?? this.onError;
755
528
  }
756
529
  prune() {
757
530
  this.archiveLoader.purge();
@@ -760,50 +533,50 @@ var ke = h.toLowerCase(), Ae = ({ archive: e }) => async (t) => {
760
533
  return this.lastAccessedKey !== void 0 && this.lastAccessedKey !== e && this.archiveLoader.purge(), this.lastAccessedKey = e, this.archiveLoader.access(e);
761
534
  }
762
535
  accessArchiveWithoutLock(e) {
763
- return this.accessArchive(e).pipe(D(({ archive: e, release: t }) => (t(), e)));
536
+ return this.accessArchive(e).pipe(j(({ archive: e, release: t }) => (t(), e)));
764
537
  }
765
538
  withArchiveResponse({ key: e, getResponse: t }) {
766
- return de(this.accessArchive(e).pipe(k(({ archive: e, release: n }) => E(t(e)).pipe(le(() => {
539
+ return ae(this.accessArchive(e).pipe(N(({ archive: e, release: n }) => k(t(e)).pipe(ie(() => {
767
540
  n();
768
- }))), C((e) => fe(this.onError(e)))));
541
+ }))), E((e) => oe(this.onError(e)))));
769
542
  }
770
543
  fetchManifest({ key: e, baseUrl: t }) {
771
544
  return this.withArchiveResponse({
772
545
  key: e,
773
- getResponse: (e) => E(Y(e, {
546
+ getResponse: (e) => k(K(e, {
774
547
  baseUrl: t,
775
548
  hooks: this.hooks.manifest
776
- })).pipe(A((t) => E(this.onManifestSuccess({
549
+ })).pipe(P((t) => k(this.onManifestSuccess({
777
550
  manifest: t,
778
551
  archive: e
779
- }))), D((e) => new Response(JSON.stringify(e), { status: 200 })))
552
+ }))), j((e) => new Response(JSON.stringify(e), { status: 200 })))
780
553
  });
781
554
  }
782
555
  fetchResource({ key: e, resourcePath: t, request: n }) {
783
556
  return this.withArchiveResponse({
784
557
  key: e,
785
- getResponse: (e) => E(Z(e, St(t), { hooks: this.hooks.resource })).pipe(D((e) => vt({
558
+ getResponse: (e) => k(J(e, Ue(t), { hooks: this.hooks.resource })).pipe(j((e) => X({
786
559
  body: e.body ?? "",
787
560
  contentType: e.params.contentType,
788
561
  rangeHeader: n?.headers.get("range")
789
562
  })))
790
563
  });
791
564
  }
792
- }, wt = class extends Ct {
565
+ }, We = class extends $ {
793
566
  constructor({ getUriInfo: e, ...t }) {
794
567
  super(t), this.getUriInfo = e, this.fetchEventListener = this.fetchEventListener.bind(this);
795
568
  }
796
569
  fetchEventListener(e) {
797
570
  try {
798
- let n = this.getUriInfo(e);
799
- if (!n) return;
800
- let r = t(n.baseUrl), i = e.request.url.substring(r.length + 1), [a = ""] = i.split("/"), o = t(i.substring(a.length + 1));
801
- i.endsWith("/manifest") ? e.respondWith(this.fetchManifest({
802
- key: a,
803
- baseUrl: `${r}/${a}/`
571
+ let t = this.getUriInfo(e);
572
+ if (!t) return;
573
+ let n = o(t.baseUrl), r = e.request.url.substring(n.length + 1), [i = ""] = r.split("/"), a = o(r.substring(i.length + 1));
574
+ r.endsWith("/manifest") ? e.respondWith(this.fetchManifest({
575
+ key: i,
576
+ baseUrl: `${n}/${i}/`
804
577
  })) : e.respondWith(this.fetchResource({
805
- key: a,
806
- resourcePath: o,
578
+ key: i,
579
+ resourcePath: a,
807
580
  request: e.request
808
581
  }));
809
582
  } catch (t) {
@@ -812,6 +585,6 @@ var ke = h.toLowerCase(), Ae = ({ archive: e }) => async (t) => {
812
585
  }
813
586
  };
814
587
  //#endregion
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, 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 };
588
+ export { We as ServiceWorkerStreamer, $ as Streamer, R as configure, U as createManifestResourceHref, K as generateManifestFromArchive, J as generateResourceFromArchive };
816
589
 
817
590
  //# sourceMappingURL=index.js.map