@prose-reader/streamer 1.96.0 → 1.97.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.
package/dist/index.js CHANGED
@@ -1,6 +1,6 @@
1
1
  import { urlJoin as S, PROSE_READER_RESOURCE_ERROR_INJECTED_META_NAME as oe, isXmlBasedMimeType as ce, detectMimeTypeFromName as X } from "@prose-reader/shared";
2
2
  import $, { XmlDocument as de } from "xmldoc";
3
- import { Subject as I, mergeMap as k, EMPTY as le, from as A, map as v, catchError as T, NEVER as B, shareReplay as _, switchMap as C, startWith as me, distinctUntilChanged as pe, withLatestFrom as fe, timer as ue, of as P, tap as E, merge as H, takeUntil as he, BehaviorSubject as ge, filter as be, ignoreElements as ye, first as we, finalize as G, lastValueFrom as J } from "rxjs";
3
+ import { Subject as k, mergeMap as I, EMPTY as B, from as T, map as v, catchError as A, shareReplay as _, switchMap as C, startWith as le, distinctUntilChanged as me, withLatestFrom as pe, NEVER as ue, timer as fe, of as P, tap as H, merge as E, takeUntil as he, BehaviorSubject as ge, filter as be, ignoreElements as ye, first as we, finalize as G, lastValueFrom as J } from "rxjs";
4
4
  let N = !1;
5
5
  const y = {
6
6
  enable: (e) => {
@@ -25,18 +25,18 @@ const y = {
25
25
  N && console.timeEnd(`[prose-reader-streamer] [metric] ${e}`);
26
26
  },
27
27
  metric: (e, n = 1 / 0) => {
28
- const a = typeof e == "number" ? e : e.duration;
28
+ const s = typeof e == "number" ? e : e.duration;
29
29
  N && (e.duration <= n ? console.log(
30
30
  "[prose-reader-streamer] [metric] ",
31
- `${e.name} took ${a}ms`
31
+ `${e.name} took ${s}ms`
32
32
  ) : console.warn(
33
33
  "[prose-reader-streamer] [metric] ",
34
34
  `${e.name} took ${e.duration}ms which is above the ${n}ms target for this function`
35
35
  ));
36
36
  },
37
37
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
38
- measurePerformance: (e, n = 10, a) => (...s) => {
39
- const t = performance.now(), r = a(...s);
38
+ measurePerformance: (e, n = 10, s) => (...a) => {
39
+ const t = performance.now(), r = s(...a);
40
40
  if (r && r.then)
41
41
  return r.then((o) => {
42
42
  const m = performance.now();
@@ -46,77 +46,77 @@ const y = {
46
46
  return y.metric({ name: e, duration: i - t }, n), r;
47
47
  }
48
48
  }, ve = (e) => {
49
- var a;
50
- const n = (a = e.descendantWithPath("head")) == null ? void 0 : a.childrenNamed("meta").find((s) => s.attr.name === "calibre:cover");
49
+ var s;
50
+ const n = (s = e.descendantWithPath("head")) == null ? void 0 : s.childrenNamed("meta").find((a) => a.attr.name === "calibre:cover");
51
51
  return !!(n && n.attr.name === "calibre:cover");
52
52
  }, $e = (e) => {
53
- var n, a, s;
54
- return (s = (a = (n = e.descendantWithPath("body")) == null ? void 0 : n.descendantWithPath("div")) == null ? void 0 : a.childrenNamed("svg")) == null ? void 0 : s.find(
53
+ var n, s, a;
54
+ return (a = (s = (n = e.descendantWithPath("body")) == null ? void 0 : n.descendantWithPath("div")) == null ? void 0 : s.childrenNamed("svg")) == null ? void 0 : a.find(
55
55
  (t) => t.attr.width === "100%" && t.attr.preserveAspectRatio === "none"
56
56
  );
57
- }, xe = ({ archive: e, resourcePath: n }) => async (a) => {
58
- const s = Object.values(e.files).find(
57
+ }, xe = ({ archive: e, resourcePath: n }) => async (s) => {
58
+ const a = Object.values(e.files).find(
59
59
  (t) => t.uri === n
60
60
  );
61
- if (s != null && s.basename.endsWith(".xhtml")) {
62
- const t = a.body ?? await s.string(), r = new de(t);
61
+ if (a != null && a.basename.endsWith(".xhtml")) {
62
+ const t = s.body ?? await a.string(), r = new de(t);
63
63
  if (ve(r)) {
64
64
  const i = $e(r);
65
65
  return i && delete i.attr.preserveAspectRatio, {
66
- ...a,
66
+ ...s,
67
67
  body: r == null ? void 0 : r.toString()
68
68
  };
69
69
  }
70
70
  }
71
- return a;
72
- }, Fe = ({ archive: e, resourcePath: n }) => async (a) => xe({ archive: e, resourcePath: n })(a), Ne = ({ archive: e, resourcePath: n }) => async (a) => {
73
- const s = Object.values(e.files).find(
71
+ return s;
72
+ }, Fe = ({ archive: e, resourcePath: n }) => async (s) => xe({ archive: e, resourcePath: n })(s), Ne = ({ archive: e, resourcePath: n }) => async (s) => {
73
+ const a = Object.values(e.files).find(
74
74
  (t) => t.uri === n
75
75
  );
76
- if (s != null && s.basename.endsWith(".css")) {
77
- const r = (a.body ?? await s.string()).replaceAll(
76
+ if (a != null && a.basename.endsWith(".css")) {
77
+ const r = (s.body ?? await a.string()).replaceAll(
78
78
  "-webkit-writing-mode",
79
79
  "writing-mode"
80
80
  );
81
81
  return {
82
- ...a,
82
+ ...s,
83
83
  body: r
84
84
  };
85
85
  }
86
- return a;
87
- }, L = (e) => {
88
- const a = Object.values(e.files).filter((s) => !s.dir).find((s) => s.uri.endsWith(".opf"));
86
+ return s;
87
+ }, W = (e) => {
88
+ const s = Object.values(e.files).filter((a) => !a.dir).find((a) => a.uri.endsWith(".opf"));
89
89
  return {
90
- data: a,
91
- basePath: (a == null ? void 0 : a.uri.substring(0, a.uri.lastIndexOf("/"))) || ""
90
+ data: s,
91
+ basePath: (s == null ? void 0 : s.uri.substring(0, s.uri.lastIndexOf("/"))) || ""
92
92
  };
93
- }, K = (e, { opfBasePath: n, baseUrl: a }) => {
94
- const s = {
93
+ }, K = (e, { opfBasePath: n, baseUrl: s }) => {
94
+ const a = {
95
95
  contents: [],
96
96
  path: "",
97
97
  href: "",
98
98
  title: ""
99
99
  };
100
100
  let t = e.childNamed("span") || e.childNamed("a");
101
- s.title = (t == null ? void 0 : t.attr.title) || (t == null ? void 0 : t.val.trim()) || s.title;
101
+ a.title = (t == null ? void 0 : t.attr.title) || (t == null ? void 0 : t.val.trim()) || a.title;
102
102
  let r = t == null ? void 0 : t.name;
103
- r !== "a" && (t = e.descendantWithPath(`${r}.a`), t && (r = t.name.toLowerCase())), r === "a" && (t != null && t.attr.href) && (s.path = S(n, t.attr.href), s.href = S(a, n, t.attr.href));
103
+ r !== "a" && (t = e.descendantWithPath(`${r}.a`), t && (r = t.name.toLowerCase())), r === "a" && (t != null && t.attr.href) && (a.path = S(n, t.attr.href), a.href = S(s, n, t.attr.href));
104
104
  const i = e.childNamed("ol");
105
105
  if (i) {
106
106
  const o = i.childrenNamed("li");
107
- o && o.length > 0 && (s.contents = o.map(
108
- (m) => K(m, { opfBasePath: n, baseUrl: a })
107
+ o && o.length > 0 && (a.contents = o.map(
108
+ (m) => K(m, { opfBasePath: n, baseUrl: s })
109
109
  ));
110
110
  }
111
- return s;
112
- }, Te = (e, { opfBasePath: n, baseUrl: a }) => {
111
+ return a;
112
+ }, Se = (e, { opfBasePath: n, baseUrl: s }) => {
113
113
  var r, i;
114
- const s = [];
114
+ const a = [];
115
115
  let t;
116
116
  return e.descendantWithPath("body.nav.ol") ? t = (r = e.descendantWithPath("body.nav.ol")) == null ? void 0 : r.children : e.descendantWithPath("body.section.nav.ol") && (t = (i = e.descendantWithPath("body.section.nav.ol")) == null ? void 0 : i.children), t && t.length > 0 && t.filter((o) => o.name === "li").forEach(
117
- (o) => s.push(K(o, { opfBasePath: n, baseUrl: a }))
118
- ), s;
119
- }, Se = async (e, n, { opfBasePath: a, baseUrl: s }) => {
117
+ (o) => a.push(K(o, { opfBasePath: n, baseUrl: s }))
118
+ ), a;
119
+ }, Te = async (e, n, { opfBasePath: s, baseUrl: a }) => {
120
120
  var r;
121
121
  const t = (r = e.childNamed("manifest")) == null ? void 0 : r.childrenNamed("item").find((i) => i.attr.properties === "nav");
122
122
  if (t) {
@@ -125,68 +125,68 @@ const y = {
125
125
  );
126
126
  if (i) {
127
127
  const o = new $.XmlDocument(await i.string());
128
- return Te(o, { opfBasePath: a, baseUrl: s });
128
+ return Se(o, { opfBasePath: s, baseUrl: a });
129
129
  }
130
130
  }
131
131
  }, Y = (e, {
132
132
  opfBasePath: n,
133
- baseUrl: a,
134
- prefix: s
133
+ baseUrl: s,
134
+ prefix: a
135
135
  }) => {
136
136
  var o, m;
137
- const t = ((o = e == null ? void 0 : e.childNamed(`${s}content`)) == null ? void 0 : o.attr.src) || "", r = {
138
- title: ((m = e == null ? void 0 : e.descendantWithPath(`${s}navLabel.${s}text`)) == null ? void 0 : m.val) || "",
137
+ const t = ((o = e == null ? void 0 : e.childNamed(`${a}content`)) == null ? void 0 : o.attr.src) || "", r = {
138
+ title: ((m = e == null ? void 0 : e.descendantWithPath(`${a}navLabel.${a}text`)) == null ? void 0 : m.val) || "",
139
139
  path: S(n, t),
140
- href: S(a, n, t),
140
+ href: S(s, n, t),
141
141
  contents: []
142
- }, i = e.childrenNamed(`${s}navPoint`);
142
+ }, i = e.childrenNamed(`${a}navPoint`);
143
143
  return i && i.length > 0 && (r.contents = i.map(
144
- (u) => Y(u, { opfBasePath: n, baseUrl: a, prefix: s })
144
+ (f) => Y(f, { opfBasePath: n, baseUrl: s, prefix: a })
145
145
  )), r;
146
- }, Ae = (e, { opfBasePath: n, baseUrl: a }) => {
146
+ }, Ae = (e, { opfBasePath: n, baseUrl: s }) => {
147
147
  var i;
148
- const s = [], t = e.name;
148
+ const a = [], t = e.name;
149
149
  let r = "";
150
150
  return t.indexOf(":") !== -1 && (r = t.split(":")[0] + ":"), (i = e.childNamed(`${r}navMap`)) == null || i.childrenNamed(`${r}navPoint`).forEach(
151
- (o) => s.push(Y(o, { opfBasePath: n, baseUrl: a, prefix: r }))
152
- ), s;
153
- }, Le = async ({
151
+ (o) => a.push(Y(o, { opfBasePath: n, baseUrl: s, prefix: r }))
152
+ ), a;
153
+ }, We = async ({
154
154
  opfData: e,
155
155
  opfBasePath: n,
156
- baseUrl: a,
157
- archive: s
156
+ baseUrl: s,
157
+ archive: a
158
158
  }) => {
159
159
  var i;
160
160
  const t = e.childNamed("spine"), r = t && t.attr.toc;
161
161
  if (r) {
162
162
  const o = (i = e.childNamed("manifest")) == null ? void 0 : i.childrenNamed("item").find((m) => m.attr.id === r);
163
163
  if (o) {
164
- const m = `${n}${n === "" ? "" : "/"}${o.attr.href}`, u = Object.values(s.files).find(
164
+ const m = `${n}${n === "" ? "" : "/"}${o.attr.href}`, f = Object.values(a.files).find(
165
165
  (c) => c.uri.endsWith(m)
166
166
  );
167
- if (u) {
168
- const c = new $.XmlDocument(await u.string());
169
- return Ae(c, { opfBasePath: n, baseUrl: a });
167
+ if (f) {
168
+ const c = new $.XmlDocument(await f.string());
169
+ return Ae(c, { opfBasePath: n, baseUrl: s });
170
170
  }
171
171
  }
172
172
  }
173
- }, Re = async (e, n, { baseUrl: a }) => {
174
- const { basePath: s } = L(n) || {}, t = await Le({
173
+ }, Le = async (e, n, { baseUrl: s }) => {
174
+ const { basePath: a } = W(n) || {}, t = await We({
175
175
  opfData: e,
176
- opfBasePath: s,
176
+ opfBasePath: a,
177
177
  archive: n,
178
- baseUrl: a
178
+ baseUrl: s
179
179
  });
180
- return t || await Se(e, n, { opfBasePath: s, baseUrl: a });
181
- }, We = async (e) => {
180
+ return t || await Te(e, n, { opfBasePath: a, baseUrl: s });
181
+ }, Re = async (e) => {
182
182
  const n = {
183
183
  renditionLayout: void 0
184
184
  };
185
185
  return await Promise.all(
186
- e.files.map(async (a) => {
187
- var s, t;
188
- if (a.uri.endsWith("com.kobobooks.display-options.xml")) {
189
- const i = (s = new $.XmlDocument(await a.string()).childNamed("platform")) == null ? void 0 : s.childNamed("option");
186
+ e.files.map(async (s) => {
187
+ var a, t;
188
+ if (s.uri.endsWith("com.kobobooks.display-options.xml")) {
189
+ const i = (a = new $.XmlDocument(await s.string()).childNamed("platform")) == null ? void 0 : a.childNamed("option");
190
190
  ((t = i == null ? void 0 : i.attr) == null ? void 0 : t.name) === "fixed-layout" && i.val === "true" && (n.renditionLayout = "pre-paginated");
191
191
  }
192
192
  })
@@ -194,33 +194,33 @@ const y = {
194
194
  }, Q = async ({
195
195
  archive: e
196
196
  }) => {
197
- const { data: n, basePath: a } = L(e) || {}, s = await (n == null ? void 0 : n.string());
198
- if (!s) return [];
199
- const t = new $.XmlDocument(s), r = t.childNamed("manifest"), i = t.childNamed("spine"), o = i == null ? void 0 : i.childrenNamed("itemref").map((c) => c.attr.idref), m = (r == null ? void 0 : r.childrenNamed("item").filter((c) => o.includes(c.attr.id || ""))) || [];
200
- return e.files.filter((c) => m.find((d) => a ? `${a}/${d.attr.href}` === c.uri : `${d.attr.href}` === c.uri));
197
+ const { data: n, basePath: s } = W(e) || {}, a = await (n == null ? void 0 : n.string());
198
+ if (!a) return [];
199
+ const t = new $.XmlDocument(a), r = t.childNamed("manifest"), i = t.childNamed("spine"), o = i == null ? void 0 : i.childrenNamed("itemref").map((c) => c.attr.idref), m = (r == null ? void 0 : r.childrenNamed("item").filter((c) => o.includes(c.attr.id || ""))) || [];
200
+ return e.files.filter((c) => m.find((d) => s ? `${s}/${d.attr.href}` === c.uri : `${d.attr.href}` === c.uri));
201
201
  }, Z = (e) => {
202
- var a;
202
+ var s;
203
203
  const n = e.childNamed("manifest");
204
- return ((a = n == null ? void 0 : n.childrenNamed("item")) == null ? void 0 : a.map((s) => ({
205
- href: s.attr.href || "",
206
- id: s.attr.id || "",
207
- mediaType: s.attr["media-type"]
204
+ return ((s = n == null ? void 0 : n.childrenNamed("item")) == null ? void 0 : s.map((a) => ({
205
+ href: a.attr.href || "",
206
+ id: a.attr.id || "",
207
+ mediaType: a.attr["media-type"]
208
208
  }))) || [];
209
- }, Ie = ({ archive: e, baseUrl: n }) => async (a) => {
209
+ }, ke = ({ archive: e, baseUrl: n }) => async (s) => {
210
210
  var j;
211
- const { data: s, basePath: t } = L(e) || {}, r = await We(e);
212
- if (!s)
213
- return a;
214
- const i = await s.string();
211
+ const { data: a, basePath: t } = W(e) || {}, r = await Re(e);
212
+ if (!a)
213
+ return s;
214
+ const i = await a.string();
215
215
  y.log(i, r);
216
- const o = new $.XmlDocument(i), m = await Re(o, e, { baseUrl: n }) || [], u = o.childNamed("metadata"), c = o.childNamed("manifest"), d = o.childNamed("spine"), p = o.childNamed("guide"), b = u == null ? void 0 : u.childNamed("dc:title"), F = (u == null ? void 0 : u.childrenNamed("meta")) || [], g = F.find(
217
- (f) => f.attr.property === "rendition:layout"
216
+ const o = new $.XmlDocument(i), m = await Le(o, e, { baseUrl: n }) || [], f = o.childNamed("metadata"), c = o.childNamed("manifest"), d = o.childNamed("spine"), p = o.childNamed("guide"), b = f == null ? void 0 : f.childNamed("dc:title"), F = (f == null ? void 0 : f.childrenNamed("meta")) || [], g = F.find(
217
+ (u) => u.attr.property === "rendition:layout"
218
218
  ), h = F.find(
219
- (f) => f.attr.property === "rendition:flow"
220
- ), R = F.find(
221
- (f) => f.attr.property === "rendition:spread"
222
- ), O = g == null ? void 0 : g.val, ee = h == null ? void 0 : h.val, te = R == null ? void 0 : R.val, ne = (b == null ? void 0 : b.val) || ((j = e.files.find(({ dir: f }) => f)) == null ? void 0 : j.basename) || "", re = d == null ? void 0 : d.attr["page-progression-direction"], se = (await Q({ archive: e })).reduce(
223
- (f, l) => l.size + f,
219
+ (u) => u.attr.property === "rendition:flow"
220
+ ), L = F.find(
221
+ (u) => u.attr.property === "rendition:spread"
222
+ ), O = g == null ? void 0 : g.val, ee = h == null ? void 0 : h.val, te = L == null ? void 0 : L.val, ne = (b == null ? void 0 : b.val) || ((j = e.files.find(({ dir: u }) => u)) == null ? void 0 : j.basename) || "", re = d == null ? void 0 : d.attr["page-progression-direction"], ae = (await Q({ archive: e })).reduce(
223
+ (u, l) => l.size + u,
224
224
  0
225
225
  );
226
226
  return {
@@ -233,37 +233,37 @@ const y = {
233
233
  renditionSpread: te,
234
234
  title: ne,
235
235
  readingDirection: re || "ltr",
236
- spineItems: (d == null ? void 0 : d.childrenNamed("itemref").map((f) => {
236
+ spineItems: (d == null ? void 0 : d.childrenNamed("itemref").map((u) => {
237
237
  var z, U, V;
238
- const l = c == null ? void 0 : c.childrenNamed("item").find((w) => w.attr.id === (f == null ? void 0 : f.attr.idref)), ae = (l == null ? void 0 : l.attr.href) || "", W = ((z = f == null ? void 0 : f.attr.properties) == null ? void 0 : z.split(" ")) || [], ie = ((U = e.files.find((w) => w.uri.endsWith(ae))) == null ? void 0 : U.size) || 0, M = n ?? "";
238
+ const l = c == null ? void 0 : c.childrenNamed("item").find((w) => w.attr.id === (u == null ? void 0 : u.attr.idref)), se = (l == null ? void 0 : l.attr.href) || "", R = ((z = u == null ? void 0 : u.attr.properties) == null ? void 0 : z.split(" ")) || [], ie = ((U = e.files.find((w) => w.uri.endsWith(se))) == null ? void 0 : U.size) || 0, M = n ?? "";
239
239
  return {
240
240
  id: (l == null ? void 0 : l.attr.id) || "",
241
241
  href: (V = l == null ? void 0 : l.attr.href) != null && V.startsWith("https://") ? l == null ? void 0 : l.attr.href : t ? `${M}${t}/${l == null ? void 0 : l.attr.href}` : `${M}${l == null ? void 0 : l.attr.href}`,
242
242
  renditionLayout: O || "reflowable",
243
- ...W.find(
243
+ ...R.find(
244
244
  (w) => w === "rendition:layout-reflowable"
245
245
  ) && {
246
246
  renditionLayout: "reflowable"
247
247
  },
248
- progressionWeight: ie / se,
249
- pageSpreadLeft: W.some((w) => w === "page-spread-left") || void 0,
250
- pageSpreadRight: W.some((w) => w === "page-spread-right") || void 0,
248
+ progressionWeight: ie / ae,
249
+ pageSpreadLeft: R.some((w) => w === "page-spread-left") || void 0,
250
+ pageSpreadRight: R.some((w) => w === "page-spread-right") || void 0,
251
251
  // size: itemSize
252
252
  mediaType: l == null ? void 0 : l.attr["media-type"]
253
253
  };
254
254
  })) || [],
255
255
  items: Z(o),
256
- guide: p == null ? void 0 : p.childrenNamed("reference").map((f) => ({
257
- href: f.attr.href || "",
258
- title: f.attr.title || "",
259
- type: f.attr.type
256
+ guide: p == null ? void 0 : p.childrenNamed("reference").map((u) => ({
257
+ href: u.attr.href || "",
258
+ title: u.attr.title || "",
259
+ type: u.attr.type
260
260
  }))
261
261
  };
262
- }, ke = async (e, n) => {
262
+ }, Ie = async (e, n) => {
263
263
  var t, r;
264
- const s = await ((t = L(e).data) == null ? void 0 : t.string());
265
- if (s) {
266
- const i = new $.XmlDocument(s);
264
+ const a = await ((t = W(e).data) == null ? void 0 : t.string());
265
+ if (a) {
266
+ const i = new $.XmlDocument(a);
267
267
  return {
268
268
  mediaType: (r = Z(i).find((m) => n.endsWith(m.href))) == null ? void 0 : r.mediaType
269
269
  };
@@ -282,20 +282,20 @@ const y = {
282
282
  return "video/mp4";
283
283
  if (e.endsWith(".svg"))
284
284
  return "image/svg+xml";
285
- }, Pe = ({ archive: e, resourcePath: n }) => async (a) => {
286
- const s = Object.values(e.files).find(
285
+ }, Pe = ({ archive: e, resourcePath: n }) => async (s) => {
286
+ const a = Object.values(e.files).find(
287
287
  (r) => r.uri === n
288
288
  );
289
- if (!s) return a;
290
- const t = await ke(e, n);
289
+ if (!a) return s;
290
+ const t = await Ie(e, n);
291
291
  return {
292
- ...a,
292
+ ...s,
293
293
  params: {
294
- ...a.params,
294
+ ...s.params,
295
295
  status: 200,
296
296
  headers: {
297
- ...(s == null ? void 0 : s.encodingFormat) && {
298
- "Content-Type": s.encodingFormat
297
+ ...(a == null ? void 0 : a.encodingFormat) && {
298
+ "Content-Type": a.encodingFormat
299
299
  },
300
300
  ...t.mediaType && {
301
301
  "Content-Type": t.mediaType
@@ -304,12 +304,12 @@ const y = {
304
304
  }
305
305
  };
306
306
  }, De = async (e, n) => {
307
- const a = Object.values(e.files).find(
307
+ const s = Object.values(e.files).find(
308
308
  (r) => r.uri === n
309
309
  );
310
- if (!a)
310
+ if (!s)
311
311
  throw new Error("no file found");
312
- const s = {
312
+ const a = {
313
313
  params: {
314
314
  status: 200
315
315
  }
@@ -319,10 +319,10 @@ const y = {
319
319
  Fe({ archive: e, resourcePath: n })
320
320
  ];
321
321
  try {
322
- const r = await t.reduce(async (i, o) => await o(await i), Promise.resolve(s));
322
+ const r = await t.reduce(async (i, o) => await o(await i), Promise.resolve(a));
323
323
  return y.log("Generated resource", n, r), {
324
324
  ...r,
325
- body: r.body || await a.blob()
325
+ body: r.body || await s.blob()
326
326
  };
327
327
  } catch (r) {
328
328
  throw y.error(r), r;
@@ -346,71 +346,71 @@ const y = {
346
346
  }
347
347
  }
348
348
  }), Oe = ({ archive: e, baseUrl: n }) => async () => {
349
- var s;
350
- const a = Object.values(e.files).filter((t) => !t.dir);
349
+ var a;
350
+ const s = Object.values(e.files).filter((t) => !t.dir);
351
351
  return {
352
352
  filename: e.filename,
353
- title: ((s = e.files.find(({ dir: t }) => t)) == null ? void 0 : s.basename.replace(/\/$/, "")) || "",
353
+ title: ((a = e.files.find(({ dir: t }) => t)) == null ? void 0 : a.basename.replace(/\/$/, "")) || "",
354
354
  renditionLayout: "pre-paginated",
355
355
  renditionSpread: "auto",
356
356
  readingDirection: "ltr",
357
- spineItems: a.filter((t) => !t.basename.endsWith(".db")).map((t, r) => ({
357
+ spineItems: s.filter((t) => !t.basename.endsWith(".db")).map((t, r) => ({
358
358
  // some books such as cbz can have same basename inside different sub folder
359
359
  // we need to make sure to have unique index
360
360
  // /chap01/01.png, /chap02/01.png, etc
361
361
  id: `${r}.${t.basename}`,
362
362
  href: encodeURI(`${n}${t.uri}`),
363
363
  renditionLayout: "pre-paginated",
364
- progressionWeight: 1 / a.length,
364
+ progressionWeight: 1 / s.length,
365
365
  pageSpreadLeft: void 0,
366
366
  pageSpreadRight: void 0,
367
367
  mediaType: t.encodingFormat
368
368
  })),
369
- items: a.map((t, r) => ({
369
+ items: s.map((t, r) => ({
370
370
  id: `${r}.${t.basename}`,
371
371
  href: `${n}${t.uri}`
372
372
  }))
373
373
  };
374
374
  }, je = ({ archive: e }) => async (n) => {
375
375
  var r;
376
- const a = e.files.find(
376
+ const s = e.files.find(
377
377
  (i) => i.basename.toLowerCase() === "comicinfo.xml"
378
378
  );
379
- if (!a)
379
+ if (!s)
380
380
  return n;
381
- const s = {
381
+ const a = {
382
382
  ...n,
383
383
  spineItems: n.spineItems.filter((i) => !i.id.toLowerCase().endsWith("comicinfo.xml")).map((i, o, m) => ({
384
384
  ...i,
385
385
  progressionWeight: 1 / m.length
386
386
  }))
387
- }, t = await a.string();
387
+ }, t = await s.string();
388
388
  try {
389
389
  const o = ((r = new $.XmlDocument(t).childNamed("Manga")) == null ? void 0 : r.val) || "unknown";
390
390
  return {
391
- ...s,
391
+ ...a,
392
392
  readingDirection: o === "YesAndRightToLeft" ? "rtl" : "ltr"
393
393
  };
394
394
  } catch (i) {
395
395
  return console.error(`Unable to parse comicinfo.xml for content
396
- `, t), console.error(i), s;
396
+ `, t), console.error(i), a;
397
397
  }
398
398
  }, Me = (e) => {
399
- var a;
400
- const n = (a = e.descendantWithPath("head")) == null ? void 0 : a.childrenNamed("meta").find((s) => s.attr.name === "viewport");
399
+ var s;
400
+ const n = (s = e.descendantWithPath("head")) == null ? void 0 : s.childrenNamed("meta").find((a) => a.attr.name === "viewport");
401
401
  return !!(n && n.attr.name === "viewport");
402
- }, ze = (e) => e.reduce(async (n, a) => {
402
+ }, ze = (e) => e.reduce(async (n, s) => {
403
403
  if (!await n || !ce({
404
- mimeType: a.encodingFormat,
405
- uri: a.uri
404
+ mimeType: s.encodingFormat,
405
+ uri: s.uri
406
406
  }))
407
407
  return !1;
408
- const t = await a.string();
408
+ const t = await s.string();
409
409
  return t ? Me(new $.XmlDocument(t)) : !1;
410
410
  }, Promise.resolve(!0)), Ue = ({ archive: e }) => async (n) => {
411
- if (n.renditionLayout === "reflowable" && n.spineItems.every((s) => s.renditionLayout === "reflowable")) {
412
- const s = await Q({ archive: e });
413
- if (await ze(s))
411
+ if (n.renditionLayout === "reflowable" && n.spineItems.every((a) => a.renditionLayout === "reflowable")) {
412
+ const a = await Q({ archive: e });
413
+ if (await ze(a))
414
414
  return {
415
415
  ...n,
416
416
  spineItems: n.spineItems.map((r) => ({
@@ -423,23 +423,23 @@ const y = {
423
423
  return n;
424
424
  }, D = (e, n) => {
425
425
  var t;
426
- const a = e.split(/(\d+)/), s = n.split(/(\d+)/);
427
- for (let r = 0, i = a.length; r < i; r++)
428
- if (a[r] !== s[r])
429
- return (t = a[r]) != null && t.match(/\d/) ? +(a[r] || "") - +(s[r] || "") : (a[r] || "").localeCompare(s[r] || "");
426
+ const s = e.split(/(\d+)/), a = n.split(/(\d+)/);
427
+ for (let r = 0, i = s.length; r < i; r++)
428
+ if (s[r] !== a[r])
429
+ return (t = s[r]) != null && t.match(/\d/) ? +(s[r] || "") - +(a[r] || "") : (s[r] || "").localeCompare(a[r] || "");
430
430
  return 1;
431
- }, Ve = ({ archive: e, baseUrl: n }) => async (a) => {
432
- if (a.nav) return a;
433
- const s = [...e.files].sort(
431
+ }, Ve = ({ archive: e, baseUrl: n }) => async (s) => {
432
+ if (s.nav) return s;
433
+ const a = [...e.files].sort(
434
434
  (r, i) => D(r.uri, i.uri)
435
435
  ), t = Object.values(
436
- s
436
+ a
437
437
  ).reduce(
438
438
  (r, i) => {
439
439
  const o = i.uri.split("/");
440
- return !i.dir && o.length > 1 && o.forEach((u, c) => {
440
+ return !i.dir && o.length > 1 && o.forEach((f, c) => {
441
441
  if (c === o.length - 1) return;
442
- r.find(({ title: b }) => b === u) || r.push({
442
+ r.find(({ title: b }) => b === f) || r.push({
443
443
  contents: [],
444
444
  href: S(n, encodeURI(i.uri)).replace(/\/$/, ""),
445
445
  path: i.uri.replace(/\/$/, ""),
@@ -449,8 +449,8 @@ const y = {
449
449
  },
450
450
  []
451
451
  );
452
- return t.length === 0 ? a : {
453
- ...a,
452
+ return t.length === 0 ? s : {
453
+ ...s,
454
454
  nav: {
455
455
  toc: t
456
456
  }
@@ -467,21 +467,21 @@ const y = {
467
467
  spineItems: [],
468
468
  title: ""
469
469
  }, Be = async (e, { baseUrl: n = "" } = {}) => {
470
- const a = [
470
+ const s = [
471
471
  Oe({ archive: e, baseUrl: n }),
472
- Ie({ archive: e, baseUrl: n }),
472
+ ke({ archive: e, baseUrl: n }),
473
473
  Ue({ archive: e, baseUrl: n }),
474
474
  je({ archive: e, baseUrl: n }),
475
475
  Ve({ archive: e, baseUrl: n })
476
476
  ];
477
477
  try {
478
- const s = await a.reduce(async (t, r) => await r(await t), Promise.resolve(Xe));
479
- return y.log("Generated manifest", s), s;
480
- } catch (s) {
481
- throw y.error(s), s;
478
+ const a = await s.reduce(async (t, r) => await r(await t), Promise.resolve(Xe));
479
+ return y.log("Generated manifest", a), a;
480
+ } catch (a) {
481
+ throw y.error(a), a;
482
482
  }
483
483
  }, x = (e) => e.substring(e.lastIndexOf("/") + 1) || e, q = (e) => e.endsWith("/") ? e.slice(0, -1) : e, Qe = async (e, n) => {
484
- const a = `
484
+ const s = `
485
485
  <?xml version="1.0" encoding="UTF-8"?><package xmlns="http://www.idpf.org/2007/opf" version="2.0" unique-identifier="bookid">
486
486
  <metadata>
487
487
  <meta property="rendition:layout">${n != null && n.useRenditionFlow ? "reflowable" : "pre-paginated"}</meta>
@@ -498,7 +498,7 @@ const y = {
498
498
  `)}
499
499
  </spine>
500
500
  </package>
501
- `, s = e.map((r) => ({
501
+ `, a = e.map((r) => ({
502
502
  dir: !1,
503
503
  basename: x(r),
504
504
  encodingFormat: X(r),
@@ -515,23 +515,23 @@ const y = {
515
515
  basename: "content.opf",
516
516
  uri: "content.opf",
517
517
  size: 0,
518
- base64: async () => a,
518
+ base64: async () => s,
519
519
  blob: async () => new Blob(),
520
- string: async () => a
521
- }, ...s],
520
+ string: async () => s
521
+ }, ...a],
522
522
  close: () => Promise.resolve()
523
523
  };
524
524
  }, _e = async (e) => new Promise((n) => {
525
- const a = new FileReader();
526
- a.readAsDataURL(e), a.onloadend = function() {
527
- const s = a.result;
528
- n(s);
525
+ const s = new FileReader();
526
+ s.readAsDataURL(e), s.onloadend = function() {
527
+ const a = s.result;
528
+ n(a);
529
529
  };
530
530
  }), Ze = async (e, {
531
531
  mimeType: n,
532
- direction: a
532
+ direction: s
533
533
  } = { mimeType: "text/plain" }) => {
534
- const s = `
534
+ const a = `
535
535
  <?xml version="1.0" encoding="UTF-8"?>
536
536
  <package xmlns="http://www.idpf.org/2007/opf" version="3.0" xml:lang="ja" prefix="rendition: http://www.idpf.org/vocab/rendition/#"
537
537
  unique-identifier="ootuya-id">
@@ -542,7 +542,7 @@ const y = {
542
542
  <manifest>
543
543
  <item id="p01" href="p01.txt" media-type="text/plain"/>
544
544
  </manifest>
545
- <spine page-progression-direction="${a ?? "ltr"}">
545
+ <spine page-progression-direction="${s ?? "ltr"}">
546
546
  <itemref idref="p01" />
547
547
  </spine>
548
548
  </package>
@@ -554,9 +554,9 @@ const y = {
554
554
  dir: !1,
555
555
  basename: x("generated.opf"),
556
556
  uri: "generated.opf",
557
- blob: async () => new Blob([s]),
558
- string: async () => s,
559
- base64: async () => btoa(s),
557
+ blob: async () => new Blob([a]),
558
+ string: async () => a,
559
+ base64: async () => btoa(a),
560
560
  size: 0
561
561
  },
562
562
  {
@@ -572,12 +572,12 @@ const y = {
572
572
  ],
573
573
  close: () => Promise.resolve()
574
574
  };
575
- }, et = async (e, { orderByAlpha: n, name: a } = {}) => {
576
- let s = Object.values(e.files);
577
- n && (s = s.slice().sort((r, i) => D(r.name, i.name)));
575
+ }, et = async (e, { orderByAlpha: n, name: s } = {}) => {
576
+ let a = Object.values(e.files);
577
+ n && (a = a.slice().sort((r, i) => D(r.name, i.name)));
578
578
  const t = {
579
- filename: a || "",
580
- files: s.map((r) => ({
579
+ filename: s || "",
580
+ files: a.map((r) => ({
581
581
  dir: r.dir,
582
582
  basename: x(r.name),
583
583
  uri: r.name,
@@ -596,10 +596,10 @@ const y = {
596
596
  };
597
597
  return y.log("Generated archive", t), t;
598
598
  }, tt = async (e, { name: n } = {}) => {
599
- const a = await e.getFilesArray(), s = {
599
+ const s = await e.getFilesArray(), a = {
600
600
  close: () => e.close(),
601
601
  filename: n ?? "",
602
- files: a.map((t) => ({
602
+ files: s.map((t) => ({
603
603
  dir: !1,
604
604
  basename: t.file.name,
605
605
  size: t.file.size,
@@ -609,12 +609,12 @@ const y = {
609
609
  string: async () => (await t.file.extract()).text()
610
610
  }))
611
611
  };
612
- return y.log("Generated archive", s), s;
613
- }, nt = async (e, { orderByAlpha: n, name: a } = {}) => {
614
- let s = e;
615
- return n && (s = s.slice().sort((t, r) => D(t.name, r.name))), {
616
- filename: a || "",
617
- files: s.map((t) => ({
612
+ return y.log("Generated archive", a), a;
613
+ }, nt = async (e, { orderByAlpha: n, name: s } = {}) => {
614
+ let a = e;
615
+ return n && (a = a.slice().sort((t, r) => D(t.name, r.name))), {
616
+ filename: s || "",
617
+ files: a.map((t) => ({
618
618
  dir: t.isDir,
619
619
  basename: x(t.name),
620
620
  uri: t.name,
@@ -635,51 +635,48 @@ const y = {
635
635
  enableReport: e
636
636
  } = {}) => {
637
637
  y.enable(!!e);
638
- }, Ee = ({
638
+ }, He = ({
639
639
  getArchive: e,
640
640
  cleanArchiveAfter: n
641
641
  }) => {
642
- const a = new I(), s = new I(), t = new I(), r = {}, i = a.pipe(
643
- k((c) => {
642
+ const s = new k(), a = new k(), t = new k(), r = {}, i = s.pipe(
643
+ I((c) => {
644
644
  const d = r[c];
645
- return !d || d.getValue().status !== "idle" ? le : (d.next({
645
+ return !d || d.getValue().status !== "idle" ? B : (d.next({
646
646
  ...d.getValue(),
647
647
  status: "loading"
648
- }), A(e(c)).pipe(
648
+ }), T(e(c)).pipe(
649
649
  v((p) => (d.next({
650
650
  ...d.getValue(),
651
651
  archive: p,
652
652
  status: "success"
653
653
  }), { key: c, archiveEntry: d })),
654
- T((p) => {
655
- throw d.next({
656
- ...d.getValue(),
657
- status: "error",
658
- error: p
659
- }), p;
660
- })
654
+ A((p) => (d.next({
655
+ ...d.getValue(),
656
+ status: "error",
657
+ error: p
658
+ }), B))
661
659
  ));
662
660
  }),
663
- T(() => B),
664
661
  _()
665
662
  ), o = i.pipe(
666
663
  C(({ archiveEntry: c, key: d }) => {
667
664
  const p = c.pipe(v(({ locks: g }) => g)), b = t.pipe(
668
665
  v(() => !0),
669
- me(!1),
666
+ le(!1),
670
667
  _()
671
668
  );
672
669
  return p.pipe(
673
670
  v((g) => g <= 0),
674
- pe()
671
+ me()
675
672
  ).pipe(
676
- fe(b),
673
+ pe(b),
677
674
  C(
678
- ([g, h]) => g ? h ? P(null) : ue(n) : B
675
+ ([g, h]) => g ? h ? P(null) : fe(n) : ue
679
676
  ),
680
- E(() => {
677
+ H(() => {
681
678
  var g;
682
- console.log("ARCHIVE DELETED"), delete r[d], (g = c.getValue().archive) == null || g.close();
679
+ delete r[d], (g = c.getValue().archive) == null || g.close();
683
680
  })
684
681
  );
685
682
  })
@@ -701,52 +698,52 @@ const y = {
701
698
  locks: p.getValue().locks - 1
702
699
  }));
703
700
  };
704
- a.next(c);
701
+ s.next(c);
705
702
  const F = p.pipe(
706
703
  v(({ archive: h }) => h),
707
704
  be((h) => !!h)
708
705
  ), g = p.pipe(
709
- E(({ error: h }) => {
706
+ H(({ error: h }) => {
710
707
  if (h)
711
708
  throw h;
712
709
  }),
713
710
  ye()
714
711
  );
715
- return H(F, g).pipe(
712
+ return E(F, g).pipe(
716
713
  we(),
717
714
  v((h) => ({ archive: h, release: b })),
718
- T((h) => {
715
+ A((h) => {
719
716
  throw b(), h;
720
717
  })
721
718
  );
722
- }, u = () => {
719
+ }, f = () => {
723
720
  Object.keys(r).forEach((c) => {
724
721
  delete r[c];
725
722
  }), t.next();
726
723
  };
727
- return H(o, i).pipe(he(s)).subscribe(), {
724
+ return E(o, i).pipe(he(a)).subscribe(), {
728
725
  access: m,
729
- purge: u
726
+ purge: f
730
727
  };
731
728
  };
732
- class He {
729
+ class Ee {
733
730
  constructor({
734
731
  onError: n,
735
- onManifestSuccess: a,
736
- ...s
732
+ onManifestSuccess: s,
733
+ ...a
737
734
  }) {
738
- this.onError = (t) => new Response(String(t), { status: 500 }), this.epubLoader = Ee(s), this.onManifestSuccess = a ?? (({ manifest: t }) => Promise.resolve(t)), this.onError = n ?? this.onError;
735
+ this.onError = (t) => new Response(String(t), { status: 500 }), this.epubLoader = He(a), this.onManifestSuccess = s ?? (({ manifest: t }) => Promise.resolve(t)), this.onError = n ?? this.onError;
739
736
  }
740
737
  accessArchive(n) {
741
738
  return this.lastAccessedKey !== n && this.epubLoader.purge(), this.lastAccessedKey = n, this.epubLoader.access(n);
742
739
  }
743
- fetchManifest({ key: n, baseUrl: a }) {
744
- const s = this.accessArchive(n).pipe(
745
- k(({ archive: t, release: r }) => A(
746
- Be(t, { baseUrl: a })
740
+ fetchManifest({ key: n, baseUrl: s }) {
741
+ const a = this.accessArchive(n).pipe(
742
+ I(({ archive: t, release: r }) => T(
743
+ Be(t, { baseUrl: s })
747
744
  ).pipe(
748
745
  C(
749
- (o) => A(this.onManifestSuccess({ manifest: o, archive: t }))
746
+ (o) => T(this.onManifestSuccess({ manifest: o, archive: t }))
750
747
  ),
751
748
  v(
752
749
  (o) => new Response(JSON.stringify(o), {
@@ -757,55 +754,55 @@ class He {
757
754
  r();
758
755
  })
759
756
  )),
760
- T((t) => P(this.onError(t)))
757
+ A((t) => P(this.onError(t)))
761
758
  );
762
- return J(s);
759
+ return J(a);
763
760
  }
764
761
  fetchResource({
765
762
  key: n,
766
- resourcePath: a
763
+ resourcePath: s
767
764
  }) {
768
- const s = this.accessArchive(n).pipe(
769
- k(({ archive: t, release: r }) => A(
770
- De(t, a)
765
+ const a = this.accessArchive(n).pipe(
766
+ I(({ archive: t, release: r }) => T(
767
+ De(t, s)
771
768
  ).pipe(
772
769
  v((o) => new Response(o.body, { status: 200 })),
773
770
  G(() => {
774
771
  r();
775
772
  })
776
773
  )),
777
- T((t) => P(this.onError(t)))
774
+ A((t) => P(this.onError(t)))
778
775
  );
779
- return J(s);
776
+ return J(a);
780
777
  }
781
778
  }
782
- class st extends He {
779
+ class at extends Ee {
783
780
  constructor({
784
781
  getUriInfo: n,
785
- ...a
782
+ ...s
786
783
  }) {
787
- super(a), this.getUriInfo = n, this.fetchEventListener = this.fetchEventListener.bind(this);
784
+ super(s), this.getUriInfo = n, this.fetchEventListener = this.fetchEventListener.bind(this);
788
785
  }
789
786
  fetchEventListener(n) {
790
787
  try {
791
- const a = this.getUriInfo(n);
792
- if (!a) return;
793
- const s = q(a.baseUrl), t = n.request.url.substring(
794
- s.length + 1
788
+ const s = this.getUriInfo(n);
789
+ if (!s) return;
790
+ const a = q(s.baseUrl), t = n.request.url.substring(
791
+ a.length + 1
795
792
  ), [r = ""] = t.split("/"), i = decodeURIComponent(
796
793
  q(t.substring(r.length + 1))
797
794
  );
798
795
  t.endsWith("/manifest") ? n.respondWith(
799
- this.fetchManifest({ key: r, baseUrl: `${s}/${r}/` })
796
+ this.fetchManifest({ key: r, baseUrl: `${a}/${r}/` })
800
797
  ) : n.respondWith(this.fetchResource({ key: r, resourcePath: i }));
801
- } catch (a) {
802
- n.respondWith(new Response(String(a), { status: 500 }));
798
+ } catch (s) {
799
+ n.respondWith(new Response(String(s), { status: 500 }));
803
800
  }
804
801
  }
805
802
  }
806
803
  export {
807
- st as ServiceWorkerStreamer,
808
- He as Streamer,
804
+ at as ServiceWorkerStreamer,
805
+ Ee as Streamer,
809
806
  rt as configure,
810
807
  nt as createArchiveFromArrayBufferList,
811
808
  et as createArchiveFromJszip,
@@ -815,6 +812,6 @@ export {
815
812
  Be as generateManifestFromArchive,
816
813
  De as generateResourceFromArchive,
817
814
  Ye as generateResourceFromError,
818
- L as getArchiveOpfInfo
815
+ W as getArchiveOpfInfo
819
816
  };
820
817
  //# sourceMappingURL=index.js.map