@prose-reader/streamer 1.322.0 → 1.324.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,287 +1,143 @@
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";
1
+ import { Report as e, createXmlSafeIdFactory as t, detectMimeTypeFromName as n, parseContentType as r, removeTrailingSlash as i, urlJoin as a } from "@prose-reader/shared";
2
+ import { getArchiveFileRecordByUri as o, readArchiveOpf as s, readRecordAsText as c, resolveArchive as l } from "@prose-reader/archive-reader";
3
+ import { XmlDocument as u } from "xmldoc";
4
+ import { BehaviorSubject as d, EMPTY as f, NEVER as p, Subject as m, catchError as h, distinctUntilChanged as g, filter as _, finalize as ee, first as v, from as y, ignoreElements as te, lastValueFrom as ne, map as b, merge as x, mergeMap as S, of as C, pairwise as w, shareReplay as T, startWith as re, switchMap as E, takeUntil as ie, tap as D, timer as ae } from "rxjs";
5
5
  //#endregion
6
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);
11
- if (!n || n.dir) return t;
12
- let r = await y(n);
13
- try {
14
- let { renditionLayout: e } = b(ee(r));
15
- return {
16
- ...t,
17
- renditionLayout: t.renditionLayout ?? e
18
- };
19
- } catch (e) {
20
- return console.error(`Unable to parse ${c} for content\n`, r), console.error(e), t;
21
- }
22
- }, V = l.toLowerCase(), H = ({ archive: e }) => async (t) => {
23
- let n = f(e);
24
- if (!n) return t;
25
- let r = {
26
- ...t,
27
- spineItems: t.spineItems.filter((e) => !e.id.toLowerCase().endsWith(V)).map((e, t, n) => ({
28
- ...e,
29
- progressionWeight: 1 / n.length
30
- }))
31
- }, i = await y(n);
32
- try {
33
- let e = b(_(i));
7
+ var O = e.namespace("@prose-reader/streamer", void 0, { color: "#ffae42" }), oe = ({ enableReport: e } = {}) => {
8
+ O.enable(!!e);
9
+ }, k = (e) => e.replace(/\.[^.]+$/, "").replace(/[_-]/g, " ").replace(/\s+/g, " ").trim(), A = (e, t) => {
10
+ if (e.spineItems.length !== 0 && e.spineItems.every((e) => (r(e.mediaType ?? "") || n(e.href))?.startsWith("audio/"))) return e.spineItems.map((e) => {
11
+ let n = t.records.find((t) => !t.dir && decodeURI(e.href).endsWith(t.uri));
34
12
  return {
35
- ...r,
36
- readingDirection: e.readingDirection ?? r.readingDirection
13
+ title: k(n?.basename ?? e.href),
14
+ href: e.href,
15
+ path: n?.uri ?? e.href,
16
+ contents: []
37
17
  };
38
- } catch (e) {
39
- return console.error(`Unable to parse ${l} for content\n`, i), console.error(e), r;
40
- }
41
- }, U = ({ baseUrl: e = "", resourcePath: t }) => {
18
+ });
19
+ }, j = ({ baseUrl: e = "", resourcePath: t }) => {
42
20
  if (!e && /^https?:\/\//.test(t)) return encodeURI(t);
43
21
  let n = e ? `${e}${e.endsWith("/") ? "" : "/"}` : "file://";
44
22
  return encodeURI(`${n}${t}`);
45
- }, de = ({ archive: e, baseUrl: n }) => async () => {
46
- let r = e.records.filter((e) => !e.dir), i = t(), a = r.map((e) => ({
47
- file: e,
48
- id: i(e.uri)
49
- }));
23
+ }, M = (e) => (t) => ({
24
+ title: t.title,
25
+ path: t.path,
26
+ href: t.containerHref ? a(e, t.containerHref) : "",
27
+ contents: t.contents.map(M(e))
28
+ }), N = (e) => {
29
+ let t = e?.trim();
30
+ if (t === "cover" || t === "title-page" || t === "copyright-page" || t === "text") return t;
31
+ }, P = (e) => /^https?:\/\//.test(e), F = (e) => e.records.find(({ dir: e }) => e)?.basename.replace(/\/$/, ""), I = (e, n, r, i) => {
32
+ let { metadata: a, readingOrder: o } = r, s = i.basePath, c = [];
33
+ for (let e of i.opf.guide) {
34
+ let t = N(e.type);
35
+ t !== void 0 && c.push({
36
+ href: e.href,
37
+ title: e.title,
38
+ type: t
39
+ });
40
+ }
41
+ let l = t();
50
42
  return {
51
43
  filename: e.filename ?? "",
52
- title: e.records.find(({ dir: e }) => e)?.basename.replace(/\/$/, "") || e.filename || "",
53
- renditionLayout: void 0,
44
+ title: a.title || F(e) || "",
45
+ renditionLayout: a.renditionLayout,
46
+ renditionFlow: a.renditionFlow ?? "auto",
47
+ renditionSpread: a.renditionSpread,
48
+ readingDirection: a.readingDirection,
49
+ spineItems: o.map((e, t) => ({
50
+ id: e.id ?? l(e.uri),
51
+ index: t,
52
+ href: P(e.uri) ? e.uri : `${n || "file://"}${e.uri}`,
53
+ renditionLayout: e.renditionLayout,
54
+ ...e.renditionFlow === void 0 ? {} : { renditionFlow: e.renditionFlow },
55
+ progressionWeight: e.progressionWeight,
56
+ pageSpreadLeft: e.pageSpreadLeft,
57
+ pageSpreadRight: e.pageSpreadRight,
58
+ mediaType: e.mediaType
59
+ })),
60
+ items: i.opf.manifestItems.map((e) => ({
61
+ id: e.id,
62
+ href: P(e.href) ? e.href : `${n || "file://"}${s ? `${s}/` : ""}${e.href}`,
63
+ mediaType: e.mediaType
64
+ })),
65
+ guide: c.length > 0 ? c : void 0,
66
+ nav: { toc: (r.toc ?? []).map(M(n)) }
67
+ };
68
+ }, L = (e, n, r) => {
69
+ let { metadata: i, readingOrder: a } = r, o = e.records.filter((e) => !e.dir), s = t(), c = new Map(o.map((e) => [e.uri, s(e.uri)])), l = {
70
+ filename: e.filename ?? "",
71
+ title: i.title || F(e) || e.filename || "",
72
+ renditionLayout: i.renditionLayout,
54
73
  renditionSpread: "auto",
55
- readingDirection: void 0,
56
- spineItems: a.filter(({ file: e }) => !e.basename.endsWith(".db")).map(({ file: e, id: t }, i) => ({
57
- id: t,
58
- index: i,
59
- href: U({
74
+ readingDirection: i.readingDirection,
75
+ spineItems: a.map((e, t) => ({
76
+ id: c.get(e.uri) ?? s(e.uri),
77
+ index: t,
78
+ href: j({
60
79
  baseUrl: n,
61
80
  resourcePath: e.uri
62
81
  }),
63
- renditionLayout: void 0,
64
- progressionWeight: 1 / r.length,
82
+ renditionLayout: e.renditionLayout,
83
+ progressionWeight: e.progressionWeight,
65
84
  pageSpreadLeft: void 0,
66
85
  pageSpreadRight: void 0,
67
- mediaType: e.encodingFormat
86
+ mediaType: e.mediaType
68
87
  })),
69
- items: a.map(({ file: e, id: t }) => ({
70
- id: t,
88
+ items: o.map((e) => ({
89
+ id: c.get(e.uri) ?? s(e.uri),
71
90
  href: encodeURI(`${n}${e.uri}`)
72
91
  }))
73
- };
74
- }, W = (e, t, n) => {
75
- let { basePath: r } = p(t) || {};
76
- return e.map((e) => {
77
- let t = e.href, i = n?.(t) ?? "";
78
- return {
79
- href: r ? `${i}${r}/${t}` : `${i}${t}`,
80
- id: e.id,
81
- mediaType: e.mediaType
82
- };
83
- });
84
- }, fe = (e) => {
85
- let t = e?.trim();
86
- return t === "scrolled-continuous" || t === "scrolled-doc" || t === "paginated" || t === "auto" ? t : "auto";
87
- }, pe = (e) => {
88
- let t = e?.trim();
89
- if (t === "none" || t === "landscape" || t === "portrait" || t === "both" || t === "auto") return t;
90
- }, me = (e) => {
91
- let t = e?.trim();
92
- if (t === "cover" || t === "title-page" || t === "copyright-page" || t === "text") return t;
93
- }, he = ({ archive: e, baseUrl: t, archiveOpf: n }) => async (r) => {
94
- if (!n) return r;
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({
98
- archive: e,
99
- archiveOpf: n
100
- })).filter(g).reduce((e, t) => t.size + e, 0), p = i.guide, h = [];
101
- for (let e of p) {
102
- let t = me(e.type);
103
- t !== void 0 && h.push({
104
- href: e.href,
105
- title: e.title,
106
- type: t
107
- });
108
- }
109
- return {
110
- filename: e.filename ?? "",
111
- renditionLayout: c,
112
- renditionFlow: fe(i.renditionFlowMeta),
113
- renditionSpread: pe(i.renditionSpreadMeta),
114
- title: l,
115
- readingDirection: u,
116
- spineItems: i.spineRows.map((n, r) => {
117
- let o = d(e, a ? `${a}/${n.href}` : n.href), s = o ? o.size : 0, l = t || (/^https?:\/\//.test(n.href) ? "" : "file://");
118
- return {
119
- id: n.id,
120
- index: r,
121
- href: n.href.startsWith("https://") ? n.href : a ? `${l}${a}/${n.href}` : `${l}${n.href}`,
122
- renditionLayout: n.renditionLayout ?? c,
123
- ...n.renditionFlow === void 0 ? {} : { renditionFlow: n.renditionFlow },
124
- progressionWeight: f > 0 ? s / f : 1 / i.spineRows.length,
125
- pageSpreadLeft: n.pageSpreadLeft,
126
- pageSpreadRight: n.pageSpreadRight,
127
- mediaType: n.mediaType
128
- };
129
- }),
130
- items: W(i.manifestItems, e, (e) => /^https?:\/\//.test(e) ? "" : t || "file://"),
131
- guide: h.length > 0 ? h : void 0
132
- };
133
- }, ge = (e) => {
134
- let t = e.descendantWithPath("head")?.childrenNamed("meta").find((e) => e.attr.name === "viewport");
135
- return !!(t && t.attr.name === "viewport");
136
- }, _e = (e) => e.reduce(async (e, t) => {
137
- if (!await e || !i({
138
- mimeType: g(t) ? t.encodingFormat : void 0,
139
- uri: t.uri
140
- })) return !1;
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({
144
- archive: e,
145
- archiveOpf: t
146
- })) ? {
147
- ...n,
148
- spineItems: n.spineItems.map((e) => ({
149
- ...e,
150
- renditionLayout: "pre-paginated"
151
- })),
152
- renditionLayout: "pre-paginated"
153
- } : n, ye = () => (e) => ({
154
- ...e,
155
- readingDirection: e.readingDirection ?? "ltr"
156
- }), be = async (e) => {
157
- let t;
158
- return await Promise.all(e.records.map(async (e) => {
159
- if (e.dir || !e.uri.endsWith(u)) return;
160
- let n = await y(e);
161
- try {
162
- let { renditionLayout: e } = te(n);
163
- e && (t = e);
164
- } catch (e) {
165
- console.error(`Unable to parse ${u} for content\n`, n), console.error(e);
166
- }
167
- })), {
168
- kind: "kobo",
169
- ...t === void 0 ? {} : { renditionLayout: t }
170
- };
171
- }, xe = ({ archive: e }) => async (t) => {
172
- let { renditionLayout: n } = b(await be(e));
173
- return {
174
- ...t,
175
- renditionLayout: t.renditionLayout ?? n
176
- };
177
- }, Se = ({ archive: e }) => async (t) => h(e) ? t : {
178
- ...t,
179
- spineItems: t.spineItems.map((t) => {
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 ?? "");
181
- return {
182
- ...t,
183
- renditionLayout: o && r(o) ? "pre-paginated" : t.renditionLayout
184
- };
185
- })
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) => {
188
- let n = t.records.find((t) => !t.dir && decodeURI(e.href).endsWith(t.uri));
189
- return {
190
- title: Ce(n?.basename ?? e.href),
191
- href: e.href,
192
- path: n?.uri ?? e.href,
193
- contents: []
194
- };
195
- });
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);
204
- if (i) return i;
205
- let a = await x(e);
206
- if (a) return a.map(G(n));
207
- }, Ee = ({ archive: e, baseUrl: t, archiveOpf: n }) => async (r) => {
208
- if (r.nav) return r;
209
- let i = await Te(e, r, {
210
- baseUrl: t,
211
- archiveOpf: n
212
- });
213
- return i ? {
214
- ...r,
215
- nav: { toc: i }
216
- } : r;
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({
220
- archive: e,
221
- baseUrl: i
222
- })), o = [
223
- he({
224
- archive: e,
225
- baseUrl: i,
226
- archiveOpf: r
227
- }),
228
- H({
229
- archive: e,
230
- baseUrl: i
231
- }),
232
- B({
233
- archive: e,
234
- baseUrl: i
235
- }),
236
- Se({
237
- archive: e,
238
- baseUrl: i
239
- }),
240
- ...a(n.content)
241
- ], s = a(n.spine), c = [
242
- ve({
243
- archive: e,
244
- baseUrl: i,
245
- archiveOpf: r
246
- }),
247
- xe({
248
- archive: e,
249
- baseUrl: i
250
- }),
251
- ...a(n.presentation)
252
- ], l = [Ee({
253
- archive: e,
254
- baseUrl: i,
255
- archiveOpf: r
256
- }), ...a(n.navigation)], u = [
257
- ...o,
258
- ...s,
259
- ...c,
92
+ }, u = A(l, e) ?? r.toc?.map(M(n));
93
+ return u === void 0 ? l : {
260
94
  ...l,
261
- ye()
262
- ];
95
+ nav: { toc: u }
96
+ };
97
+ }, R = ({ archive: e, baseUrl: t, resolved: n }) => {
98
+ let r = n.sources.opf;
99
+ return r ? I(e, t, n, r) : L(e, t, n);
100
+ }, z = (e) => e ? e.endsWith("/") ? e : `${e}/` : "", B = async (e, { baseUrl: t = "", hooks: n = [] } = {}) => {
101
+ O.log("Generating manifest from archive", e);
102
+ let r = z(t);
263
103
  try {
264
- let t = de({
104
+ let t = R({
265
105
  archive: e,
266
- baseUrl: i
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()) {
269
- let e = JSON.stringify(n, null, 2);
270
- L.groupCollapsed(...L.getGroupArgs("Generated manifest")), L.log(`\n${e}`), L.groupEnd();
106
+ baseUrl: r,
107
+ resolved: await l(e, {
108
+ include: [
109
+ "metadata",
110
+ "readingOrder",
111
+ "toc",
112
+ "sources"
113
+ ],
114
+ layoutScan: !0
115
+ })
116
+ });
117
+ for (let i of n) t = await i({
118
+ archive: e,
119
+ baseUrl: r
120
+ })(t);
121
+ if (t = {
122
+ ...t,
123
+ readingDirection: t.readingDirection ?? "ltr"
124
+ }, O.log("Generated manifest", t), process.env.NODE_ENV === "development" && O.isEnabled()) {
125
+ let e = JSON.stringify(t, null, 2);
126
+ O.groupCollapsed(...O.getGroupArgs("Generated manifest")), O.log(`\n${e}`), O.groupEnd();
271
127
  }
272
- return n;
128
+ return t;
273
129
  } catch (e) {
274
- throw L.error(e), e;
130
+ throw O.error(e), e;
275
131
  }
276
- }, Oe = (e) => {
132
+ }, V = (e) => {
277
133
  let t = e.descendantWithPath("head")?.childrenNamed("meta").find((e) => e.attr.name === "calibre:cover");
278
134
  return !!(t && t.attr.name === "calibre:cover");
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);
135
+ }, H = (e) => e.descendantWithPath("body")?.descendantWithPath("div")?.childrenNamed("svg")?.find((e) => e.attr.width === "100%" && e.attr.preserveAspectRatio === "none"), U = ({ archive: e, resourcePath: t }) => async (n) => {
136
+ let r = o(e, t);
281
137
  if (r?.basename.endsWith(".xhtml")) {
282
- let e = new S(typeof n.body == "string" ? n.body : await y(r));
283
- if (Oe(e)) {
284
- let t = ke(e);
138
+ let e = new u(typeof n.body == "string" ? n.body : await c(r));
139
+ if (V(e)) {
140
+ let t = H(e);
285
141
  return t && delete t.attr.preserveAspectRatio, {
286
142
  ...n,
287
143
  body: e?.toString()
@@ -289,36 +145,39 @@ var L = e.namespace("@prose-reader/streamer", void 0, { color: "#ffae42" }), R =
289
145
  }
290
146
  }
291
147
  return n;
292
- }, je = ({ archive: e, resourcePath: t }) => async (n) => Ae({
148
+ }, W = ({ archive: e, resourcePath: t }) => async (n) => U({
293
149
  archive: e,
294
150
  resourcePath: t
295
- })(n), Me = ({ archive: e, resourcePath: t }) => async (n) => {
296
- let r = d(e, t);
151
+ })(n), se = ({ archive: e, resourcePath: t }) => async (n) => {
152
+ let r = o(e, t);
297
153
  if (r?.basename.endsWith(".css")) {
298
- let e = (typeof n.body == "string" ? n.body : await y(r)).replaceAll("-webkit-writing-mode", "writing-mode");
154
+ let e = (typeof n.body == "string" ? n.body : await c(r)).replaceAll("-webkit-writing-mode", "writing-mode");
299
155
  return {
300
156
  ...n,
301
157
  body: e
302
158
  };
303
159
  }
304
160
  return n;
305
- }, Ne = async (e, t) => {
306
- let n = await v(e);
161
+ }, G = async (e, t) => {
162
+ let n = await s(e);
307
163
  if (n) {
308
- let { opf: r } = n, i = W(r.manifestItems, e, () => "").find((e) => t.endsWith(e.href))?.mediaType;
164
+ let { opf: e, basePath: r } = n, i = e.manifestItems.find((e) => {
165
+ let n = r ? `${r}/${e.href}` : e.href;
166
+ return t.endsWith(n);
167
+ })?.mediaType;
309
168
  if (i) return { mediaType: i };
310
169
  }
311
- return { mediaType: Pe(t) };
312
- }, Pe = (e) => {
170
+ return { mediaType: K(t) };
171
+ }, K = (e) => {
313
172
  if (e.endsWith(".css")) return "text/css; charset=UTF-8";
314
173
  if (e.endsWith(".jpg")) return "image/jpg";
315
174
  if (e.endsWith(".xhtml")) return "application/xhtml+xml";
316
175
  if (e.endsWith(".mp4")) return "video/mp4";
317
176
  if (e.endsWith(".svg")) return "image/svg+xml";
318
- }, Fe = ({ archive: e, resourcePath: t }) => async (n) => {
319
- let r = d(e, t);
177
+ }, ce = ({ archive: e, resourcePath: t }) => async (n) => {
178
+ let r = o(e, t);
320
179
  if (!r) return n;
321
- let i = await Ne(e, t);
180
+ let i = await G(e, t);
322
181
  return {
323
182
  ...n,
324
183
  params: {
@@ -327,10 +186,10 @@ var L = e.namespace("@prose-reader/streamer", void 0, { color: "#ffae42" }), R =
327
186
  ...i.mediaType && { contentType: i.mediaType }
328
187
  }
329
188
  };
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);
189
+ }, 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("."), le = ({ archive: e, resourcePath: t }) => async (n) => {
190
+ let r = o(e, t);
332
191
  if (r?.basename.endsWith(".xhtml")) {
333
- let e = typeof n.body == "string" ? n.body : await y(r);
192
+ let e = typeof n.body == "string" ? n.body : await c(r);
334
193
  if (!RegExp(`<(${q.join("|")})[\\s/>]`, "i").test(e)) return n;
335
194
  let t = RegExp(`<(${q.join("|")})(\\s[^>]*)?\\s*/>`, "gi"), i = e.replace(t, (e, t, n = "") => `<${t} ${n.trim()}></${t}>`);
336
195
  return {
@@ -345,38 +204,38 @@ var L = e.namespace("@prose-reader/streamer", void 0, { color: "#ffae42" }), R =
345
204
  archive: e,
346
205
  resourcePath: t
347
206
  })),
348
- Fe({
207
+ ce({
349
208
  archive: e,
350
209
  resourcePath: t
351
210
  }),
352
- Ie({
211
+ le({
353
212
  archive: e,
354
213
  resourcePath: t
355
214
  }),
356
- Me({
215
+ se({
357
216
  archive: e,
358
217
  resourcePath: t
359
218
  }),
360
- je({
219
+ W({
361
220
  archive: e,
362
221
  resourcePath: t
363
222
  })
364
223
  ];
365
224
  try {
366
225
  let n = await i.reduce(async (e, t) => await t(await e), Promise.resolve(r));
367
- if (L.log("Generated resource", t, n), n.body !== void 0) return n;
368
- let a = d(e, t);
226
+ if (O.log("Generated resource", t, n), n.body !== void 0) return n;
227
+ let a = o(e, t);
369
228
  if (!a) throw Error(`no file found for resourcePath:${t}`);
370
229
  return {
371
230
  ...n,
372
231
  body: await a.blob()
373
232
  };
374
233
  } catch (e) {
375
- throw L.error(e), e;
234
+ throw O.error(e), e;
376
235
  }
377
- }, Le = class {
236
+ }, ue = class {
378
237
  constructor(e) {
379
- this.cleanArchiveAfter = e, this.state$ = new ne({
238
+ this.cleanArchiveAfter = e, this.state$ = new d({
380
239
  status: "idle",
381
240
  locks: 0
382
241
  });
@@ -388,53 +247,53 @@ var L = e.namespace("@prose-reader/streamer", void 0, { color: "#ffae42" }), R =
388
247
  });
389
248
  }
390
249
  get locks$() {
391
- return this.state$.pipe(j(({ locks: e }) => e));
250
+ return this.state$.pipe(b(({ locks: e }) => e));
392
251
  }
393
252
  get state() {
394
253
  return this.state$.getValue();
395
254
  }
396
255
  get isUnlocked$() {
397
- return this.locks$.pipe(j((e) => e <= 0), re(), ce());
256
+ return this.locks$.pipe(b((e) => e <= 0), g(), T());
398
257
  }
399
258
  get overTTL$() {
400
- return this.isUnlocked$.pipe(P((e) => e ? this.cleanArchiveAfter === Infinity ? w : I(this.cleanArchiveAfter) : w));
259
+ return this.isUnlocked$.pipe(E((e) => e ? this.cleanArchiveAfter === Infinity ? p : ae(this.cleanArchiveAfter) : p));
401
260
  }
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) => {
261
+ }, de = ({ getArchive: e, cleanArchiveAfter: t = 300 * 1e3 }) => {
262
+ let n = new m(), r = new m(), i = new m(), a = {};
263
+ return n.pipe(S((t) => {
405
264
  let n = a[t];
406
- if (n?.state.status !== "idle") return C;
265
+ if (n?.state.status !== "idle") return f;
407
266
  let r = !1, o = (e) => {
408
- L.debug(`Cleaning up archive with key: ${e}`);
267
+ O.debug(`Cleaning up archive with key: ${e}`);
409
268
  let t = a[e];
410
269
  delete a[e], r ||= (t?.state.archive?.close(), !0);
411
270
  };
412
271
  n.update({ status: "loading" });
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) => {
272
+ let s = n.locks$, c = n.isUnlocked$, l = s.pipe(w(), _(([e, t]) => t > e), re(!0));
273
+ return y(e(t)).pipe(D((e) => {
415
274
  n.update({
416
275
  archive: e,
417
276
  status: "success"
418
277
  });
419
- }), E((e) => (o(t), n.update({
278
+ }), h((e) => (o(t), n.update({
420
279
  status: "error",
421
280
  error: e
422
- }), C)), P(() => M(l.pipe(P(() => i), P(() => c), D((e) => e)), n.overTTL$).pipe(O(), F(() => {
281
+ }), f)), E(() => x(l.pipe(E(() => i), E(() => c), _((e) => e)), n.overTTL$).pipe(v(), D(() => {
423
282
  o(t);
424
283
  }))));
425
- }), ue(r)).subscribe(), {
284
+ }), ie(r)).subscribe(), {
426
285
  access: (e) => {
427
- let r = !1, i = a[e] ?? new Le(t);
286
+ let r = !1, i = a[e] ?? new ue(t);
428
287
  a[e] = i, i.update({ locks: i.state.locks + 1 });
429
288
  let o = () => {
430
289
  r || (r = !0, i.update({ locks: i.state.locks - 1 }));
431
290
  };
432
- return n.next(e), M(i.state$.pipe(j(({ archive: e }) => e), D((e) => !!e)), i.state$.pipe(F(({ error: e }) => {
291
+ return n.next(e), x(i.state$.pipe(b(({ archive: e }) => e), _((e) => !!e)), i.state$.pipe(D(({ error: e }) => {
433
292
  if (e) throw e;
434
- }), A())).pipe(O(), j((e) => ({
293
+ }), te())).pipe(v(), b((e) => ({
435
294
  archive: e,
436
295
  release: o
437
- })), E((e) => {
296
+ })), h((e) => {
438
297
  throw o(), e;
439
298
  }));
440
299
  },
@@ -452,7 +311,7 @@ var L = e.namespace("@prose-reader/streamer", void 0, { color: "#ffae42" }), R =
452
311
  } : {
453
312
  valid: !0,
454
313
  value: void 0
455
- }, ze = (e) => {
314
+ }, fe = (e) => {
456
315
  if (!e.toLowerCase().startsWith("bytes=")) return { kind: "missing" };
457
316
  let t = e.slice(6).trim();
458
317
  if (!t) return { kind: "invalid" };
@@ -465,7 +324,7 @@ var L = e.namespace("@prose-reader/streamer", void 0, { color: "#ffae42" }), R =
465
324
  start: a.value,
466
325
  end: o.value
467
326
  };
468
- }, Be = (e) => {
327
+ }, pe = (e) => {
469
328
  if (e instanceof Blob) return {
470
329
  size: e.size,
471
330
  slice: (t, n) => {
@@ -487,18 +346,18 @@ var L = e.namespace("@prose-reader/streamer", void 0, { color: "#ffae42" }), R =
487
346
  };
488
347
  }
489
348
  };
490
- }, X = ({ body: e, contentType: t, rangeHeader: n }) => {
349
+ }, me = ({ body: e, contentType: t, rangeHeader: n }) => {
491
350
  let r = new Headers();
492
351
  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, {
493
352
  status: 200,
494
353
  headers: r
495
354
  });
496
- let i = ze(n);
355
+ let i = fe(n);
497
356
  if (i.kind === "missing" || i.kind === "multi") return e instanceof Blob && r.set("Content-Length", String(e.size)), new Response(e, {
498
357
  status: 200,
499
358
  headers: r
500
359
  });
501
- let a = Be(e), o = a.size;
360
+ let a = pe(e), o = a.size;
502
361
  if (i.kind === "invalid") return new Response(null, {
503
362
  status: 416,
504
363
  headers: { "Content-Range": `bytes */${o}` }
@@ -513,18 +372,18 @@ var L = e.namespace("@prose-reader/streamer", void 0, { color: "#ffae42" }), R =
513
372
  status: 206,
514
373
  headers: r
515
374
  });
516
- }, Z = "file://", Ve = /^https?:\/\//, He = (e) => {
375
+ }, X = "file://", he = /^https?:\/\//, Z = (e) => {
517
376
  try {
518
377
  return decodeURIComponent(e);
519
378
  } catch {
520
379
  return e;
521
380
  }
522
- }, Q = (e) => e.startsWith(Z) ? e.slice(Z.length) : e, Ue = (e) => {
381
+ }, Q = (e) => e.startsWith(X) ? e.slice(X.length) : e, ge = (e) => {
523
382
  let t = Q(e);
524
- return Ve.test(t) ? t : Q(He(t));
383
+ return he.test(t) ? t : Q(Z(t));
525
384
  }, $ = class {
526
385
  constructor({ hooks: e, onError: t, onManifestSuccess: n, ...r }) {
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;
386
+ this.onError = (e) => (console.error(e), new Response(String(e), { status: 500 })), this.archiveLoader = de(r), this.hooks = e ?? {}, this.onManifestSuccess = n ?? (({ manifest: e }) => Promise.resolve(e)), this.onError = t ?? this.onError;
528
387
  }
529
388
  prune() {
530
389
  this.archiveLoader.purge();
@@ -533,36 +392,36 @@ var L = e.namespace("@prose-reader/streamer", void 0, { color: "#ffae42" }), R =
533
392
  return this.lastAccessedKey !== void 0 && this.lastAccessedKey !== e && this.archiveLoader.purge(), this.lastAccessedKey = e, this.archiveLoader.access(e);
534
393
  }
535
394
  accessArchiveWithoutLock(e) {
536
- return this.accessArchive(e).pipe(j(({ archive: e, release: t }) => (t(), e)));
395
+ return this.accessArchive(e).pipe(b(({ archive: e, release: t }) => (t(), e)));
537
396
  }
538
397
  withArchiveResponse({ key: e, getResponse: t }) {
539
- return ae(this.accessArchive(e).pipe(N(({ archive: e, release: n }) => k(t(e)).pipe(ie(() => {
398
+ return ne(this.accessArchive(e).pipe(S(({ archive: e, release: n }) => y(t(e)).pipe(ee(() => {
540
399
  n();
541
- }))), E((e) => oe(this.onError(e)))));
400
+ }))), h((e) => C(this.onError(e)))));
542
401
  }
543
402
  fetchManifest({ key: e, baseUrl: t }) {
544
403
  return this.withArchiveResponse({
545
404
  key: e,
546
- getResponse: (e) => k(K(e, {
405
+ getResponse: (e) => y(B(e, {
547
406
  baseUrl: t,
548
407
  hooks: this.hooks.manifest
549
- })).pipe(P((t) => k(this.onManifestSuccess({
408
+ })).pipe(E((t) => y(this.onManifestSuccess({
550
409
  manifest: t,
551
410
  archive: e
552
- }))), j((e) => new Response(JSON.stringify(e), { status: 200 })))
411
+ }))), b((e) => new Response(JSON.stringify(e), { status: 200 })))
553
412
  });
554
413
  }
555
414
  fetchResource({ key: e, resourcePath: t, request: n }) {
556
415
  return this.withArchiveResponse({
557
416
  key: e,
558
- getResponse: (e) => k(J(e, Ue(t), { hooks: this.hooks.resource })).pipe(j((e) => X({
417
+ getResponse: (e) => y(J(e, ge(t), { hooks: this.hooks.resource })).pipe(b((e) => me({
559
418
  body: e.body ?? "",
560
419
  contentType: e.params.contentType,
561
420
  rangeHeader: n?.headers.get("range")
562
421
  })))
563
422
  });
564
423
  }
565
- }, We = class extends $ {
424
+ }, _e = class extends $ {
566
425
  constructor({ getUriInfo: e, ...t }) {
567
426
  super(t), this.getUriInfo = e, this.fetchEventListener = this.fetchEventListener.bind(this);
568
427
  }
@@ -570,13 +429,13 @@ var L = e.namespace("@prose-reader/streamer", void 0, { color: "#ffae42" }), R =
570
429
  try {
571
430
  let t = this.getUriInfo(e);
572
431
  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));
432
+ let n = i(t.baseUrl), r = e.request.url.substring(n.length + 1), [a = ""] = r.split("/"), o = i(r.substring(a.length + 1));
574
433
  r.endsWith("/manifest") ? e.respondWith(this.fetchManifest({
575
- key: i,
576
- baseUrl: `${n}/${i}/`
434
+ key: a,
435
+ baseUrl: `${n}/${a}/`
577
436
  })) : e.respondWith(this.fetchResource({
578
- key: i,
579
- resourcePath: a,
437
+ key: a,
438
+ resourcePath: o,
580
439
  request: e.request
581
440
  }));
582
441
  } catch (t) {
@@ -585,6 +444,6 @@ var L = e.namespace("@prose-reader/streamer", void 0, { color: "#ffae42" }), R =
585
444
  }
586
445
  };
587
446
  //#endregion
588
- export { We as ServiceWorkerStreamer, $ as Streamer, R as configure, U as createManifestResourceHref, K as generateManifestFromArchive, J as generateResourceFromArchive };
447
+ export { _e as ServiceWorkerStreamer, $ as Streamer, oe as configure, j as createManifestResourceHref, B as generateManifestFromArchive, J as generateResourceFromArchive };
589
448
 
590
449
  //# sourceMappingURL=index.js.map