@prose-reader/streamer 0.0.37 → 0.0.38
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/epub/getSpineItemFilesFromArchive.d.ts +14 -0
- package/dist/index.d.ts +2 -2
- package/dist/prose-streamer.js +429 -0
- package/dist/prose-streamer.js.map +1 -0
- package/dist/prose-streamer.umd.cjs +32 -0
- package/dist/prose-streamer.umd.cjs.map +1 -0
- package/package.json +21 -32
- package/dist/index.js +0 -2
- package/dist/index.js.LICENSE.txt +0 -12
- package/dist/tests/setupTests.d.ts +0 -1
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { Archive } from "../archives/types";
|
|
2
|
+
export declare const getSpineItemFilesFromArchive: ({ archive }: {
|
|
3
|
+
archive: Archive;
|
|
4
|
+
}) => Promise<{
|
|
5
|
+
dir: boolean;
|
|
6
|
+
basename: string;
|
|
7
|
+
uri: string;
|
|
8
|
+
blob: () => Promise<Blob>;
|
|
9
|
+
string: () => Promise<string>;
|
|
10
|
+
base64: () => Promise<string>;
|
|
11
|
+
stream?: (() => import("../archives/types").StreamResult) | undefined;
|
|
12
|
+
size: number;
|
|
13
|
+
encodingFormat?: "image/png" | "image/jpg" | "image/jpeg" | "text/plain" | "image/webp" | undefined;
|
|
14
|
+
}[]>;
|
package/dist/index.d.ts
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import xmldoc from "xmldoc";
|
|
2
2
|
export { getResourceFromArchive } from "./generators/resources";
|
|
3
3
|
export { getManifestFromArchive } from "./generators/manifest";
|
|
4
|
-
export type { Manifest } from "@prose-reader/shared";
|
|
5
4
|
export { Report } from "./report";
|
|
6
|
-
export {
|
|
5
|
+
export type { Manifest } from "@prose-reader/shared";
|
|
6
|
+
export type { Archive } from "./archives/types";
|
|
7
7
|
export { getArchiveOpfInfo } from "./archives/getArchiveOpfInfo";
|
|
8
8
|
export { createArchiveFromUrls } from "./archives/createArchiveFromUrls";
|
|
9
9
|
export { createArchiveFromText } from "./archives/createArchiveFromText";
|
|
@@ -0,0 +1,429 @@
|
|
|
1
|
+
import g from "xmldoc";
|
|
2
|
+
import { default as he } from "xmldoc";
|
|
3
|
+
import { detectContentType as z } from "@prose-reader/shared";
|
|
4
|
+
const O = (e, { opfBasePath: n, baseUrl: i }) => {
|
|
5
|
+
const r = {
|
|
6
|
+
contents: [],
|
|
7
|
+
path: "",
|
|
8
|
+
href: "",
|
|
9
|
+
title: ""
|
|
10
|
+
};
|
|
11
|
+
let t = e.childNamed("span") || e.childNamed("a");
|
|
12
|
+
r.title = (t == null ? void 0 : t.attr.title) || (t == null ? void 0 : t.val.trim()) || r.title;
|
|
13
|
+
let a = t == null ? void 0 : t.name;
|
|
14
|
+
a !== "a" && (t = e.descendantWithPath(`${a}.a`), t && (a = t.name.toLowerCase())), a === "a" && (t != null && t.attr.href) && (r.path = n ? `${n}/${t.attr.href}` : `${t.attr.href}`, r.href = n ? `${i}/${n}/${t.attr.href}` : `${i}/${t.attr.href}`);
|
|
15
|
+
const o = e.childNamed("ol");
|
|
16
|
+
if (o) {
|
|
17
|
+
const s = o.childrenNamed("li");
|
|
18
|
+
s && s.length > 0 && (r.contents = s.map((d) => O(d, { opfBasePath: n, baseUrl: i })));
|
|
19
|
+
}
|
|
20
|
+
return r;
|
|
21
|
+
}, J = (e, { opfBasePath: n, baseUrl: i }) => {
|
|
22
|
+
var a, o;
|
|
23
|
+
const r = [];
|
|
24
|
+
let t;
|
|
25
|
+
return e.descendantWithPath("body.nav.ol") ? t = (a = e.descendantWithPath("body.nav.ol")) == null ? void 0 : a.children : e.descendantWithPath("body.section.nav.ol") && (t = (o = e.descendantWithPath("body.section.nav.ol")) == null ? void 0 : o.children), t && t.length > 0 && t.filter((s) => s.name === "li").forEach((s) => r.push(O(s, { opfBasePath: n, baseUrl: i }))), r;
|
|
26
|
+
}, _ = async (e, n, { opfBasePath: i, baseUrl: r }) => {
|
|
27
|
+
var a;
|
|
28
|
+
const t = (a = e.childNamed("manifest")) == null ? void 0 : a.childrenNamed("item").find((o) => o.attr.properties === "nav");
|
|
29
|
+
if (t) {
|
|
30
|
+
const o = Object.values(n.files).find((s) => s.uri.endsWith(t.attr.href || ""));
|
|
31
|
+
if (o) {
|
|
32
|
+
const s = new g.XmlDocument(await o.string());
|
|
33
|
+
return J(s, { opfBasePath: i, baseUrl: r });
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
}, k = (e, { opfBasePath: n, baseUrl: i, prefix: r }) => {
|
|
37
|
+
var s, d;
|
|
38
|
+
const t = ((s = e == null ? void 0 : e.childNamed(`${r}content`)) == null ? void 0 : s.attr.src) || "", a = {
|
|
39
|
+
title: ((d = e == null ? void 0 : e.descendantWithPath(`${r}navLabel.${r}text`)) == null ? void 0 : d.val) || "",
|
|
40
|
+
path: n ? `${n}/${t}` : `${t}`,
|
|
41
|
+
href: n ? `${i}/${n}/${t}` : `${i}/${t}`,
|
|
42
|
+
contents: []
|
|
43
|
+
}, o = e.childrenNamed(`${r}navPoint`);
|
|
44
|
+
return o && o.length > 0 && (a.contents = o.map((p) => k(p, { opfBasePath: n, baseUrl: i, prefix: r }))), a;
|
|
45
|
+
}, K = (e, { opfBasePath: n, baseUrl: i }) => {
|
|
46
|
+
var o;
|
|
47
|
+
const r = [], t = e.name;
|
|
48
|
+
let a = "";
|
|
49
|
+
return t.indexOf(":") !== -1 && (a = t.split(":")[0] + ":"), (o = e.childNamed(`${a}navMap`)) == null || o.childrenNamed(`${a}navPoint`).forEach((s) => r.push(k(s, { opfBasePath: n, baseUrl: i, prefix: a }))), r;
|
|
50
|
+
}, V = async ({
|
|
51
|
+
opfData: e,
|
|
52
|
+
opfBasePath: n,
|
|
53
|
+
baseUrl: i,
|
|
54
|
+
archive: r
|
|
55
|
+
}) => {
|
|
56
|
+
var o;
|
|
57
|
+
const t = e.childNamed("spine"), a = t && t.attr.toc;
|
|
58
|
+
if (a) {
|
|
59
|
+
const s = (o = e.childNamed("manifest")) == null ? void 0 : o.childrenNamed("item").find((d) => d.attr.id === a);
|
|
60
|
+
if (s) {
|
|
61
|
+
const d = `${n}${n === "" ? "" : "/"}${s.attr.href}`, p = Object.values(r.files).find((m) => m.uri.endsWith(d));
|
|
62
|
+
if (p) {
|
|
63
|
+
const m = new g.XmlDocument(await p.string());
|
|
64
|
+
return K(m, { opfBasePath: n, baseUrl: i });
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
}, Y = async (e, n, { baseUrl: i }) => {
|
|
69
|
+
const { basePath: r } = w(n) || {}, t = await V({
|
|
70
|
+
opfData: e,
|
|
71
|
+
opfBasePath: r,
|
|
72
|
+
archive: n,
|
|
73
|
+
baseUrl: i
|
|
74
|
+
});
|
|
75
|
+
return t || await _(e, n, { opfBasePath: r, baseUrl: i });
|
|
76
|
+
}, H = async (e) => {
|
|
77
|
+
const n = {
|
|
78
|
+
renditionLayout: void 0
|
|
79
|
+
};
|
|
80
|
+
return await Promise.all(
|
|
81
|
+
e.files.map(async (i) => {
|
|
82
|
+
var r, t;
|
|
83
|
+
if (i.uri.endsWith("com.kobobooks.display-options.xml")) {
|
|
84
|
+
const o = (r = new g.XmlDocument(await i.string()).childNamed("platform")) == null ? void 0 : r.childNamed("option");
|
|
85
|
+
((t = o == null ? void 0 : o.attr) == null ? void 0 : t.name) === "fixed-layout" && o.val === "true" && (n.renditionLayout = "pre-paginated");
|
|
86
|
+
}
|
|
87
|
+
})
|
|
88
|
+
), n;
|
|
89
|
+
};
|
|
90
|
+
let y = !1;
|
|
91
|
+
const b = {
|
|
92
|
+
enable: (e) => {
|
|
93
|
+
y = e;
|
|
94
|
+
},
|
|
95
|
+
log: (...e) => {
|
|
96
|
+
y && console.log("[prose-reader-streamer]", ...e);
|
|
97
|
+
},
|
|
98
|
+
warn: (...e) => {
|
|
99
|
+
y && console.warn("[prose-reader-streamer]", ...e);
|
|
100
|
+
},
|
|
101
|
+
error: (...e) => {
|
|
102
|
+
console.error(...e);
|
|
103
|
+
},
|
|
104
|
+
time: (e) => {
|
|
105
|
+
y && console.time(`[prose-reader-streamer] [metric] ${e}`);
|
|
106
|
+
},
|
|
107
|
+
timeEnd: (e) => {
|
|
108
|
+
y && console.timeEnd(`[prose-reader-streamer] [metric] ${e}`);
|
|
109
|
+
},
|
|
110
|
+
metric: (e, n = 1 / 0) => {
|
|
111
|
+
const i = typeof e == "number" ? e : e.duration;
|
|
112
|
+
y && (e.duration <= n ? console.log("[prose-reader-streamer] [metric] ", `${e.name} took ${i}ms`) : console.warn(
|
|
113
|
+
"[prose-reader-streamer] [metric] ",
|
|
114
|
+
`${e.name} took ${e.duration}ms which is above the ${n}ms target for this function`
|
|
115
|
+
));
|
|
116
|
+
},
|
|
117
|
+
measurePerformance: (e, n = 10, i) => (...r) => {
|
|
118
|
+
const t = performance.now(), a = i(...r);
|
|
119
|
+
if (a && a.then)
|
|
120
|
+
return a.then((s) => {
|
|
121
|
+
const d = performance.now();
|
|
122
|
+
return b.metric({ name: e, duration: d - t }, n), s;
|
|
123
|
+
});
|
|
124
|
+
const o = performance.now();
|
|
125
|
+
return b.metric({ name: e, duration: o - t }, n), a;
|
|
126
|
+
}
|
|
127
|
+
}, w = (e) => {
|
|
128
|
+
const i = Object.values(e.files).filter((r) => !r.dir).find((r) => r.uri.endsWith(".opf"));
|
|
129
|
+
return {
|
|
130
|
+
data: i,
|
|
131
|
+
basePath: (i == null ? void 0 : i.uri.substring(0, i.uri.lastIndexOf("/"))) || ""
|
|
132
|
+
};
|
|
133
|
+
}, Q = async ({ archive: e }) => {
|
|
134
|
+
const { data: n, basePath: i } = w(e) || {}, r = await (n == null ? void 0 : n.string());
|
|
135
|
+
if (!r)
|
|
136
|
+
return [];
|
|
137
|
+
const t = new g.XmlDocument(r), a = t.childNamed("manifest"), o = t.childNamed("spine"), s = o == null ? void 0 : o.childrenNamed("itemref").map((m) => m.attr.idref), d = (a == null ? void 0 : a.childrenNamed("item").filter((m) => s.includes(m.attr.id || ""))) || [];
|
|
138
|
+
return e.files.filter((m) => d.find((f) => i ? `${i}/${f.attr.href}` === m.uri : `${f.attr.href}` === m.uri));
|
|
139
|
+
}, X = (e) => {
|
|
140
|
+
var i;
|
|
141
|
+
const n = e.childNamed("manifest");
|
|
142
|
+
return ((i = n == null ? void 0 : n.childrenNamed("item")) == null ? void 0 : i.map((r) => ({
|
|
143
|
+
href: r.attr.href || "",
|
|
144
|
+
id: r.attr.id || "",
|
|
145
|
+
mediaType: r.attr["media-type"]
|
|
146
|
+
}))) || [];
|
|
147
|
+
}, Z = ({ archive: e, baseUrl: n }) => async (i) => {
|
|
148
|
+
var L;
|
|
149
|
+
const { data: r, basePath: t } = w(e) || {}, a = await H(e);
|
|
150
|
+
if (!r)
|
|
151
|
+
return i;
|
|
152
|
+
const o = await r.string();
|
|
153
|
+
b.log(o, a);
|
|
154
|
+
const s = new g.XmlDocument(o), d = await Y(s, e, { baseUrl: n }) || [], p = s.childNamed("metadata"), m = s.childNamed("manifest"), f = s.childNamed("spine"), $ = s.childNamed("guide"), v = p == null ? void 0 : p.childNamed("dc:title"), x = (p == null ? void 0 : p.childrenNamed("meta")) || [], F = x.find((l) => l.attr.property === "rendition:layout"), N = x.find((l) => l.attr.property === "rendition:flow"), T = x.find((l) => l.attr.property === "rendition:spread"), C = F == null ? void 0 : F.val, R = N == null ? void 0 : N.val, P = T == null ? void 0 : T.val, I = (v == null ? void 0 : v.val) || ((L = e.files.find(({ dir: l }) => l)) == null ? void 0 : L.basename) || "", M = f == null ? void 0 : f.attr["page-progression-direction"], G = (await Q({ archive: e })).reduce((l, c) => c.size + l, 0);
|
|
155
|
+
return {
|
|
156
|
+
filename: e.filename,
|
|
157
|
+
nav: {
|
|
158
|
+
toc: d
|
|
159
|
+
},
|
|
160
|
+
renditionLayout: C || a.renditionLayout || "reflowable",
|
|
161
|
+
renditionFlow: R || "auto",
|
|
162
|
+
renditionSpread: P,
|
|
163
|
+
title: I,
|
|
164
|
+
readingDirection: M || "ltr",
|
|
165
|
+
spineItems: (f == null ? void 0 : f.childrenNamed("itemref").map((l) => {
|
|
166
|
+
var S, A, W;
|
|
167
|
+
const c = m == null ? void 0 : m.childrenNamed("item").find((u) => u.attr.id === (l == null ? void 0 : l.attr.idref)), q = (c == null ? void 0 : c.attr.href) || "", D = ((S = l == null ? void 0 : l.attr.properties) == null ? void 0 : S.split(" ")) || [], B = ((A = e.files.find((u) => u.uri.endsWith(q))) == null ? void 0 : A.size) || 0;
|
|
168
|
+
return {
|
|
169
|
+
id: (c == null ? void 0 : c.attr.id) || "",
|
|
170
|
+
path: t ? `${t}/${c == null ? void 0 : c.attr.href}` : `${c == null ? void 0 : c.attr.href}`,
|
|
171
|
+
href: (W = c == null ? void 0 : c.attr.href) != null && W.startsWith("https://") ? c == null ? void 0 : c.attr.href : t ? `${n}/${t}/${c == null ? void 0 : c.attr.href}` : n ? `${n}/${c == null ? void 0 : c.attr.href}` : (c == null ? void 0 : c.attr.href) ?? "",
|
|
172
|
+
renditionLayout: C || "reflowable",
|
|
173
|
+
...D.find((u) => u === "rendition:layout-reflowable") && {
|
|
174
|
+
renditionLayout: "reflowable"
|
|
175
|
+
},
|
|
176
|
+
progressionWeight: B / G,
|
|
177
|
+
pageSpreadLeft: D.some((u) => u === "page-spread-left") || void 0,
|
|
178
|
+
pageSpreadRight: D.some((u) => u === "page-spread-right") || void 0,
|
|
179
|
+
mediaType: c == null ? void 0 : c.attr["media-type"]
|
|
180
|
+
};
|
|
181
|
+
})) || [],
|
|
182
|
+
items: X(s),
|
|
183
|
+
guide: $ == null ? void 0 : $.childrenNamed("reference").map((l) => ({
|
|
184
|
+
href: l.attr.href || "",
|
|
185
|
+
title: l.attr.title || "",
|
|
186
|
+
type: l.attr.type
|
|
187
|
+
}))
|
|
188
|
+
};
|
|
189
|
+
}, se = async (e, n) => {
|
|
190
|
+
const i = Object.values(e.files).find((o) => o.uri === n), r = await U(e, n);
|
|
191
|
+
if (!i)
|
|
192
|
+
throw new Error("no file found");
|
|
193
|
+
const t = await i.blob();
|
|
194
|
+
return new Response(t, {
|
|
195
|
+
headers: {
|
|
196
|
+
...t.type && {
|
|
197
|
+
"Content-Type": t.type
|
|
198
|
+
},
|
|
199
|
+
...i.encodingFormat && {
|
|
200
|
+
"Content-Type": i.encodingFormat
|
|
201
|
+
},
|
|
202
|
+
...r.mediaType && {
|
|
203
|
+
"Content-Type": r.mediaType
|
|
204
|
+
}
|
|
205
|
+
}
|
|
206
|
+
});
|
|
207
|
+
}, U = async (e, n) => {
|
|
208
|
+
var t, a;
|
|
209
|
+
const r = await ((t = w(e).data) == null ? void 0 : t.string());
|
|
210
|
+
if (r) {
|
|
211
|
+
const o = new g.XmlDocument(r);
|
|
212
|
+
return {
|
|
213
|
+
mediaType: (a = X(o).find((d) => n.endsWith(d.href))) == null ? void 0 : a.mediaType
|
|
214
|
+
};
|
|
215
|
+
}
|
|
216
|
+
return {
|
|
217
|
+
mediaType: E(n)
|
|
218
|
+
};
|
|
219
|
+
}, E = (e) => {
|
|
220
|
+
if (e.endsWith(".css"))
|
|
221
|
+
return "text/css; charset=UTF-8";
|
|
222
|
+
if (e.endsWith(".jpg"))
|
|
223
|
+
return "image/jpg";
|
|
224
|
+
if (e.endsWith(".xhtml"))
|
|
225
|
+
return "application/xhtml+xml";
|
|
226
|
+
if (e.endsWith(".mp4"))
|
|
227
|
+
return "video/mp4";
|
|
228
|
+
if (e.endsWith(".svg"))
|
|
229
|
+
return "image/svg+xml";
|
|
230
|
+
}, ee = ({ archive: e, baseUrl: n }) => async (i) => {
|
|
231
|
+
var s;
|
|
232
|
+
const r = e.files.find((d) => d.basename.toLowerCase() === "comicinfo.xml");
|
|
233
|
+
if (!r)
|
|
234
|
+
return i;
|
|
235
|
+
const t = await r.string(), o = ((s = new g.XmlDocument(t).childNamed("Manga")) == null ? void 0 : s.val) || "unknown";
|
|
236
|
+
return {
|
|
237
|
+
...i,
|
|
238
|
+
spineItems: i.spineItems.filter((d) => d.id.toLowerCase() !== "comicinfo.xml"),
|
|
239
|
+
readingDirection: o === "YesAndRightToLeft" ? "rtl" : "ltr"
|
|
240
|
+
};
|
|
241
|
+
}, te = ({ archive: e, baseUrl: n }) => async (i) => {
|
|
242
|
+
var t;
|
|
243
|
+
const r = Object.values(e.files).filter((a) => !a.dir);
|
|
244
|
+
return {
|
|
245
|
+
filename: e.filename,
|
|
246
|
+
nav: {
|
|
247
|
+
toc: []
|
|
248
|
+
},
|
|
249
|
+
title: ((t = e.files.find(({ dir: a }) => a)) == null ? void 0 : t.basename.replace(/\/$/, "")) || "",
|
|
250
|
+
renditionLayout: "pre-paginated",
|
|
251
|
+
renditionSpread: "auto",
|
|
252
|
+
readingDirection: "ltr",
|
|
253
|
+
spineItems: r.map((a) => ({
|
|
254
|
+
id: a.basename,
|
|
255
|
+
path: `${a.uri}`,
|
|
256
|
+
href: n ? `${n}/${a.uri}` : a.uri,
|
|
257
|
+
renditionLayout: "pre-paginated",
|
|
258
|
+
progressionWeight: 1 / r.length,
|
|
259
|
+
pageSpreadLeft: void 0,
|
|
260
|
+
pageSpreadRight: void 0,
|
|
261
|
+
mediaType: a.encodingFormat
|
|
262
|
+
})),
|
|
263
|
+
items: r.map((a) => ({
|
|
264
|
+
id: a.basename,
|
|
265
|
+
href: n ? `${n}/${a.uri}` : a.uri
|
|
266
|
+
}))
|
|
267
|
+
};
|
|
268
|
+
}, ne = {
|
|
269
|
+
filename: "",
|
|
270
|
+
items: [],
|
|
271
|
+
nav: {
|
|
272
|
+
toc: []
|
|
273
|
+
},
|
|
274
|
+
readingDirection: "ltr",
|
|
275
|
+
renditionLayout: "pre-paginated",
|
|
276
|
+
renditionSpread: "auto",
|
|
277
|
+
spineItems: [],
|
|
278
|
+
title: ""
|
|
279
|
+
}, ce = async (e, { baseUrl: n = "" } = {}) => {
|
|
280
|
+
const i = [
|
|
281
|
+
te({ archive: e, baseUrl: n }),
|
|
282
|
+
Z({ archive: e, baseUrl: n }),
|
|
283
|
+
ee({ archive: e, baseUrl: n })
|
|
284
|
+
];
|
|
285
|
+
try {
|
|
286
|
+
const r = await i.reduce(async (a, o) => await o(await a), Promise.resolve(ne)), t = JSON.stringify(r);
|
|
287
|
+
return new Response(t, { status: 200 });
|
|
288
|
+
} catch (r) {
|
|
289
|
+
return b.error(r), new Response(r == null ? void 0 : r.message, { status: 500 });
|
|
290
|
+
}
|
|
291
|
+
}, h = (e) => e.substring(e.lastIndexOf("/") + 1) || e, de = async (e, n) => {
|
|
292
|
+
const i = `
|
|
293
|
+
<?xml version="1.0" encoding="UTF-8"?><package xmlns="http://www.idpf.org/2007/opf" version="2.0" unique-identifier="bookid">
|
|
294
|
+
<metadata>
|
|
295
|
+
<meta property="rendition:layout">${n != null && n.useRenditionFlow ? "reflowable" : "pre-paginated"}</meta>
|
|
296
|
+
${n != null && n.useRenditionFlow ? '<meta property="rendition:flow">scrolled-continuous</meta>' : ""}
|
|
297
|
+
</metadata>
|
|
298
|
+
<manifest>
|
|
299
|
+
${e.map((a) => `<item id="${h(a)}" href="${a}" media-type="${z(a)}"/>`).join(`
|
|
300
|
+
`)}
|
|
301
|
+
</manifest>
|
|
302
|
+
<spine>
|
|
303
|
+
${e.map((a) => `<itemref idref="${h(a)}" />`).join(`
|
|
304
|
+
`)}
|
|
305
|
+
</spine>
|
|
306
|
+
</package>
|
|
307
|
+
`, r = e.map((a) => ({
|
|
308
|
+
dir: !1,
|
|
309
|
+
basename: h(a),
|
|
310
|
+
encodingFormat: z(a),
|
|
311
|
+
uri: a,
|
|
312
|
+
size: 100 / e.length,
|
|
313
|
+
base64: async () => "",
|
|
314
|
+
blob: async () => new Blob(),
|
|
315
|
+
string: async () => ""
|
|
316
|
+
}));
|
|
317
|
+
return {
|
|
318
|
+
filename: "",
|
|
319
|
+
files: [{
|
|
320
|
+
dir: !1,
|
|
321
|
+
basename: "content.opf",
|
|
322
|
+
uri: "content.opf",
|
|
323
|
+
size: 0,
|
|
324
|
+
base64: async () => i,
|
|
325
|
+
blob: async () => new Blob(),
|
|
326
|
+
string: async () => i
|
|
327
|
+
}, ...r]
|
|
328
|
+
};
|
|
329
|
+
}, re = async (e) => new Promise((n) => {
|
|
330
|
+
const i = new FileReader();
|
|
331
|
+
i.readAsDataURL(e), i.onloadend = function() {
|
|
332
|
+
const r = i.result;
|
|
333
|
+
n(r);
|
|
334
|
+
};
|
|
335
|
+
}), le = async (e, n) => {
|
|
336
|
+
const i = `
|
|
337
|
+
<?xml version="1.0" encoding="UTF-8"?>
|
|
338
|
+
<package xmlns="http://www.idpf.org/2007/opf" version="3.0" xml:lang="ja" prefix="rendition: http://www.idpf.org/vocab/rendition/#"
|
|
339
|
+
unique-identifier="ootuya-id">
|
|
340
|
+
<metadata xmlns:opf="http://www.idpf.org/2007/opf" xmlns:dc="http://purl.org/dc/elements/1.1/"
|
|
341
|
+
xmlns:dcterms="http://purl.org/dc/terms/">
|
|
342
|
+
<meta property="rendition:layout">reflowable</meta>
|
|
343
|
+
</metadata>
|
|
344
|
+
<manifest>
|
|
345
|
+
<item id="p01" href="p01.txt" media-type="text/plain"/>
|
|
346
|
+
</manifest>
|
|
347
|
+
<spine page-progression-direction="${(n == null ? void 0 : n.direction) || "ltr"}">
|
|
348
|
+
<itemref idref="p01" />
|
|
349
|
+
</spine>
|
|
350
|
+
</package>
|
|
351
|
+
`;
|
|
352
|
+
return {
|
|
353
|
+
filename: "content.txt",
|
|
354
|
+
files: [
|
|
355
|
+
{
|
|
356
|
+
dir: !1,
|
|
357
|
+
basename: h("generated.opf"),
|
|
358
|
+
uri: "generated.opf",
|
|
359
|
+
blob: async () => new Blob([i]),
|
|
360
|
+
string: async () => i,
|
|
361
|
+
base64: async () => btoa(i),
|
|
362
|
+
size: 0
|
|
363
|
+
},
|
|
364
|
+
{
|
|
365
|
+
dir: !1,
|
|
366
|
+
basename: h("p01.txt"),
|
|
367
|
+
uri: "p01.txt",
|
|
368
|
+
blob: async () => typeof e == "string" ? new Blob([e]) : e,
|
|
369
|
+
string: async () => typeof e == "string" ? e : e.text(),
|
|
370
|
+
base64: async () => typeof e == "string" ? btoa(e) : re(e),
|
|
371
|
+
size: typeof e == "string" ? e.length : e.size,
|
|
372
|
+
encodingFormat: "text/plain"
|
|
373
|
+
}
|
|
374
|
+
]
|
|
375
|
+
};
|
|
376
|
+
}, j = (e, n) => {
|
|
377
|
+
var t;
|
|
378
|
+
const i = e.split(/(\d+)/), r = n.split(/(\d+)/);
|
|
379
|
+
for (let a = 0, o = i.length; a < o; a++)
|
|
380
|
+
if (i[a] !== r[a])
|
|
381
|
+
return (t = i[a]) != null && t.match(/\d/) ? +(i[a] || "") - +(r[a] || "") : (i[a] || "").localeCompare(r[a] || "");
|
|
382
|
+
return 1;
|
|
383
|
+
}, me = async (e, { orderByAlpha: n, name: i } = {}) => {
|
|
384
|
+
let r = Object.values(e.files);
|
|
385
|
+
return n && (r = r.sort((t, a) => j(t.name, a.name))), {
|
|
386
|
+
filename: i || "",
|
|
387
|
+
files: r.map((t) => ({
|
|
388
|
+
dir: t.dir,
|
|
389
|
+
basename: h(t.name),
|
|
390
|
+
uri: t.name,
|
|
391
|
+
blob: () => t.async("blob"),
|
|
392
|
+
string: () => t.async("string"),
|
|
393
|
+
base64: () => t.async("base64"),
|
|
394
|
+
...t.internalStream && {
|
|
395
|
+
stream: t.internalStream
|
|
396
|
+
},
|
|
397
|
+
size: t._data.uncompressedSize
|
|
398
|
+
}))
|
|
399
|
+
};
|
|
400
|
+
}, pe = async (e, { orderByAlpha: n, name: i } = {}) => {
|
|
401
|
+
let r = e;
|
|
402
|
+
return n && (r = r.sort((t, a) => j(t.name, a.name))), {
|
|
403
|
+
filename: i || "",
|
|
404
|
+
files: r.map((t) => ({
|
|
405
|
+
dir: t.isDir,
|
|
406
|
+
basename: h(t.name),
|
|
407
|
+
uri: t.name,
|
|
408
|
+
blob: async () => new Blob([await t.data()]),
|
|
409
|
+
string: async () => {
|
|
410
|
+
const a = await t.data();
|
|
411
|
+
return String.fromCharCode.apply(null, Array.from(new Uint16Array(a)));
|
|
412
|
+
},
|
|
413
|
+
base64: async () => "",
|
|
414
|
+
size: t.size
|
|
415
|
+
}))
|
|
416
|
+
};
|
|
417
|
+
};
|
|
418
|
+
export {
|
|
419
|
+
b as Report,
|
|
420
|
+
pe as createArchiveFromArrayBufferList,
|
|
421
|
+
me as createArchiveFromJszip,
|
|
422
|
+
le as createArchiveFromText,
|
|
423
|
+
de as createArchiveFromUrls,
|
|
424
|
+
w as getArchiveOpfInfo,
|
|
425
|
+
ce as getManifestFromArchive,
|
|
426
|
+
se as getResourceFromArchive,
|
|
427
|
+
he as xmldoc
|
|
428
|
+
};
|
|
429
|
+
//# sourceMappingURL=prose-streamer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"prose-streamer.js","sources":["../src/parsers/nav.ts","../src/parsers/kobo.ts","../src/report.ts","../src/archives/getArchiveOpfInfo.ts","../src/epub/getSpineItemFilesFromArchive.ts","../src/generators/manifest/epub.ts","../src/generators/resources.ts","../src/generators/manifest/comicInfo.ts","../src/generators/manifest/default.ts","../src/generators/manifest/index.ts","../src/utils/uri.ts","../src/archives/createArchiveFromUrls.ts","../src/utils/blobToBAse64.ts","../src/archives/createArchiveFromText.ts","../src/utils/sortByTitleComparator.ts","../src/archives/createArchiveFromJszip.ts","../src/archives/createArchiveFromArrayBufferList.ts"],"sourcesContent":["import xmldoc, { XmlElement } from \"xmldoc\"\nimport type { Manifest } from \"@prose-reader/shared\"\nimport { Archive, getArchiveOpfInfo } from \"..\"\n\ntype Toc = Manifest[`nav`][`toc`]\ntype TocItem = Manifest[`nav`][`toc`][number]\n\nconst extractNavChapter = (li: XmlElement, { opfBasePath, baseUrl }: { opfBasePath: string; baseUrl: string }) => {\n const chp: TocItem = {\n contents: [],\n path: ``,\n href: ``,\n title: ``\n }\n let contentNode = li.childNamed(`span`) || li.childNamed(`a`)\n chp.title = contentNode?.attr.title || contentNode?.val.trim() || chp.title\n let node = contentNode?.name\n if (node !== `a`) {\n contentNode = li.descendantWithPath(`${node}.a`)\n if (contentNode) {\n node = contentNode.name.toLowerCase()\n }\n }\n if (node === `a` && contentNode?.attr.href) {\n chp.path = opfBasePath ? `${opfBasePath}/${contentNode.attr.href}` : `${contentNode.attr.href}`\n chp.href = opfBasePath ? `${baseUrl}/${opfBasePath}/${contentNode.attr.href}` : `${baseUrl}/${contentNode.attr.href}`\n }\n const sublistNode = li.childNamed(`ol`)\n if (sublistNode) {\n const children = sublistNode.childrenNamed(`li`)\n if (children && children.length > 0) {\n chp.contents = children.map((child) => extractNavChapter(child, { opfBasePath, baseUrl }))\n }\n }\n\n return chp\n}\n\nconst buildTOCFromNav = (doc: xmldoc.XmlDocument, { opfBasePath, baseUrl }: { opfBasePath: string; baseUrl: string }) => {\n const toc: Toc = []\n\n let navDataChildren\n if (doc.descendantWithPath(`body.nav.ol`)) {\n navDataChildren = doc.descendantWithPath(`body.nav.ol`)?.children\n } else if (doc.descendantWithPath(`body.section.nav.ol`)) {\n navDataChildren = doc.descendantWithPath(`body.section.nav.ol`)?.children\n }\n\n if (navDataChildren && navDataChildren.length > 0) {\n navDataChildren\n .filter((li) => (li as XmlElement).name === `li`)\n .forEach((li) => toc.push(extractNavChapter(li as XmlElement, { opfBasePath, baseUrl })))\n }\n\n return toc\n}\n\nconst parseTocFromNavPath = async (\n opfXmlDoc: xmldoc.XmlDocument,\n archive: Archive,\n { opfBasePath, baseUrl }: { opfBasePath: string; baseUrl: string }\n) => {\n // Try to detect if there is a nav item\n const navItem = opfXmlDoc\n .childNamed(`manifest`)\n ?.childrenNamed(`item`)\n .find((child) => child.attr.properties === `nav`)\n\n if (navItem) {\n const tocFile = Object.values(archive.files).find((item) => item.uri.endsWith(navItem.attr.href || ``))\n if (tocFile) {\n const doc = new xmldoc.XmlDocument(await tocFile.string())\n return buildTOCFromNav(doc, { opfBasePath, baseUrl })\n }\n }\n}\n\nconst mapNcxChapter = (\n point: xmldoc.XmlElement,\n { opfBasePath, baseUrl, prefix }: { opfBasePath: string; baseUrl: string; prefix: string }\n) => {\n const src = point?.childNamed(`${prefix}content`)?.attr.src || ``\n const out: TocItem = {\n title: point?.descendantWithPath(`${prefix}navLabel.${prefix}text`)?.val || ``,\n path: opfBasePath ? `${opfBasePath}/${src}` : `${src}`,\n href: opfBasePath ? `${baseUrl}/${opfBasePath}/${src}` : `${baseUrl}/${src}`,\n contents: []\n }\n const children = point.childrenNamed(`${prefix}navPoint`)\n if (children && children.length > 0) {\n out.contents = children.map((pt) => mapNcxChapter(pt, { opfBasePath, baseUrl, prefix }))\n }\n\n return out\n}\n\nconst buildTOCFromNCX = (ncxData: xmldoc.XmlDocument, { opfBasePath, baseUrl }: { opfBasePath: string; baseUrl: string }) => {\n const toc: Manifest[`nav`][`toc`] = []\n\n const rootTagName = ncxData.name\n let prefix = ``\n if (rootTagName.indexOf(`:`) !== -1) {\n prefix = rootTagName.split(`:`)[0] + `:`\n }\n\n ncxData\n .childNamed(`${prefix}navMap`)\n ?.childrenNamed(`${prefix}navPoint`)\n .forEach((point) => toc.push(mapNcxChapter(point, { opfBasePath, baseUrl, prefix })))\n\n return toc\n}\n\nconst parseTocFromNcx = async ({\n opfData,\n opfBasePath,\n baseUrl,\n archive\n}: {\n opfData: xmldoc.XmlDocument\n opfBasePath: string\n archive: Archive\n baseUrl: string\n}) => {\n const spine = opfData.childNamed(`spine`)\n const ncxId = spine && spine.attr.toc\n\n if (ncxId) {\n const ncxItem = opfData\n .childNamed(`manifest`)\n ?.childrenNamed(`item`)\n .find((item) => item.attr.id === ncxId)\n\n if (ncxItem) {\n const ncxPath = `${opfBasePath}${opfBasePath === `` ? `` : `/`}${ncxItem.attr.href}`\n\n const file = Object.values(archive.files).find((item) => item.uri.endsWith(ncxPath))\n\n if (file) {\n const ncxData = new xmldoc.XmlDocument(await file.string())\n\n return buildTOCFromNCX(ncxData, { opfBasePath, baseUrl })\n }\n }\n }\n}\n\nexport const parseToc = async (opfXmlDoc: xmldoc.XmlDocument, archive: Archive, { baseUrl }: { baseUrl: string }) => {\n const { basePath: opfBasePath } = getArchiveOpfInfo(archive) || {}\n\n const tocFromNcx = await parseTocFromNcx({\n opfData: opfXmlDoc,\n opfBasePath,\n archive,\n baseUrl\n })\n\n if (tocFromNcx) {\n return tocFromNcx\n }\n\n return await parseTocFromNavPath(opfXmlDoc, archive, { opfBasePath, baseUrl })\n}\n","import xmldoc from \"xmldoc\"\nimport { Archive } from \"..\"\n\ntype KoboInformation = {\n renditionLayout?: `reflowable` | `pre-paginated` | undefined\n}\n\nexport const extractKoboInformationFromArchive = async (archive: Archive) => {\n const koboInformation: KoboInformation = {\n renditionLayout: undefined\n }\n\n await Promise.all(\n archive.files.map(async (file) => {\n if (file.uri.endsWith(`com.kobobooks.display-options.xml`)) {\n const opfXmlDoc = new xmldoc.XmlDocument(await file.string())\n const optionElement = opfXmlDoc.childNamed(`platform`)?.childNamed(`option`)\n if (optionElement?.attr?.name === `fixed-layout` && optionElement.val === `true`) {\n koboInformation.renditionLayout = `pre-paginated`\n }\n }\n })\n )\n\n return koboInformation\n}\n","let enabled = false\n\nexport const Report = {\n enable: (enable: boolean) => {\n enabled = enable\n },\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n log: (...data: any[]) => {\n if (enabled) {\n // eslint-disable-next-line no-console\n console.log(`[prose-reader-streamer]`, ...data)\n }\n },\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n warn: (...data: any[]) => {\n if (enabled) {\n // eslint-disable-next-line no-console\n console.warn(`[prose-reader-streamer]`, ...data)\n }\n },\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n error: (...data: any[]) => {\n // eslint-disable-next-line no-console\n console.error(...data)\n },\n time: (label?: string | undefined) => {\n if (enabled) {\n // eslint-disable-next-line no-console\n console.time(`[prose-reader-streamer] [metric] ${label}`)\n }\n },\n timeEnd: (label?: string | undefined) => {\n if (enabled) {\n // eslint-disable-next-line no-console\n console.timeEnd(`[prose-reader-streamer] [metric] ${label}`)\n }\n },\n metric: (performanceEntry: { name: string; duration: number }, targetDuration = Infinity) => {\n const duration = typeof performanceEntry === `number` ? performanceEntry : performanceEntry.duration\n if (enabled) {\n if (performanceEntry.duration <= targetDuration) {\n // eslint-disable-next-line no-console\n console.log(`[prose-reader-streamer] [metric] `, `${performanceEntry.name} took ${duration}ms`)\n } else {\n // eslint-disable-next-line no-console\n console.warn(\n `[prose-reader-streamer] [metric] `,\n `${performanceEntry.name} took ${performanceEntry.duration}ms which is above the ${targetDuration}ms target for this function`\n )\n }\n }\n },\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n measurePerformance: <F extends (...args: any[]) => any>(name: string, targetDuration = 10, functionToMeasure: F) => {\n return (...args: Parameters<F>): ReturnType<F> => {\n const t0 = performance.now()\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const response = functionToMeasure(...(args as any))\n\n if (response && response.then) {\n return response.then((res: any) => {\n const t1 = performance.now()\n Report.metric({ name, duration: t1 - t0 }, targetDuration)\n return res\n })\n }\n\n const t1 = performance.now()\n Report.metric({ name, duration: t1 - t0 }, targetDuration)\n\n return response\n }\n }\n}\n","import { Archive } from \"./types\"\n\nexport const getArchiveOpfInfo = (archive: Archive) => {\n const filesAsArray = Object.values(archive.files).filter((file) => !file.dir)\n const file = filesAsArray.find((file) => file.uri.endsWith(`.opf`))\n\n return {\n data: file,\n basePath: file?.uri.substring(0, file.uri.lastIndexOf(`/`)) || ``\n }\n}\n","import xmldoc from \"xmldoc\"\nimport { getArchiveOpfInfo } from \"../archives/getArchiveOpfInfo\"\nimport { Archive } from \"../archives/types\"\n\nexport const getSpineItemFilesFromArchive = async ({ archive }: { archive: Archive }) => {\n const { data: opsFile, basePath: opfBasePath } = getArchiveOpfInfo(archive) || {}\n\n const data = await opsFile?.string()\n\n if (!data) return []\n\n const _opfXmlDoc = new xmldoc.XmlDocument(data)\n\n const manifestElm = _opfXmlDoc.childNamed(`manifest`)\n const spineElm = _opfXmlDoc.childNamed(`spine`)\n\n const spineItemIds = spineElm?.childrenNamed(`itemref`).map((item) => item.attr.idref) as string[]\n const manifestItemsFromSpine =\n manifestElm?.childrenNamed(`item`).filter((item) => spineItemIds.includes(item.attr.id || ``)) || []\n\n const archiveSpineItems = archive.files.filter((file) => {\n return manifestItemsFromSpine.find((item) => {\n if (!opfBasePath) return `${item.attr.href}` === file.uri\n return `${opfBasePath}/${item.attr.href}` === file.uri\n })\n })\n\n return archiveSpineItems\n}\n","import xmldoc from \"xmldoc\"\nimport { parseToc } from \"../../parsers/nav\"\nimport type { Manifest } from \"@prose-reader/shared\"\nimport { extractKoboInformationFromArchive } from \"../../parsers/kobo\"\nimport { Report } from \"../../report\"\nimport { Archive } from \"../../archives/types\"\nimport { getArchiveOpfInfo } from \"../../archives/getArchiveOpfInfo\"\nimport { getSpineItemFilesFromArchive } from \"../../epub/getSpineItemFilesFromArchive\"\n\ntype SpineItemProperties = `rendition:layout-reflowable` | `page-spread-left` | `page-spread-right`\n\nexport const getItemsFromDoc = (doc: xmldoc.XmlDocument) => {\n const manifestElm = doc.childNamed(`manifest`)\n\n return (\n manifestElm?.childrenNamed(`item`)?.map((el) => ({\n href: el.attr.href || ``,\n id: el.attr.id || ``,\n mediaType: el.attr[`media-type`]\n })) || []\n )\n}\n\nexport const epubGenerator =\n ({ archive, baseUrl }: { archive: Archive; baseUrl: string }) =>\n async (manifest: Manifest): Promise<Manifest> => {\n const { data: opsFile, basePath: opfBasePath } = getArchiveOpfInfo(archive) || {}\n const koboInformation = await extractKoboInformationFromArchive(archive)\n\n if (!opsFile) {\n return manifest\n }\n\n const data = await opsFile.string()\n\n Report.log(data, koboInformation)\n\n const opfXmlDoc = new xmldoc.XmlDocument(data)\n\n const toc = (await parseToc(opfXmlDoc, archive, { baseUrl })) || []\n\n const metadataElm = opfXmlDoc.childNamed(`metadata`)\n const manifestElm = opfXmlDoc.childNamed(`manifest`)\n const spineElm = opfXmlDoc.childNamed(`spine`)\n const guideElm = opfXmlDoc.childNamed(`guide`)\n const titleElm = metadataElm?.childNamed(`dc:title`)\n const metaElmChildren = metadataElm?.childrenNamed(`meta`) || []\n const metaElmWithRendition = metaElmChildren.find((meta) => meta.attr.property === `rendition:layout`)\n const metaElmWithRenditionFlow = metaElmChildren.find((meta) => meta.attr.property === `rendition:flow`)\n const metaElmWithRenditionSpread = metaElmChildren.find((meta) => meta.attr.property === `rendition:spread`)\n\n const publisherRenditionLayout = metaElmWithRendition?.val as `reflowable` | `pre-paginated` | undefined\n const publisherRenditionFlow = metaElmWithRenditionFlow?.val as\n | `scrolled-continuous`\n | `scrolled-doc`\n | `paginated`\n | `auto`\n | undefined\n const renditionSpread = metaElmWithRenditionSpread?.val as `auto` | undefined\n\n const title = titleElm?.val || archive.files.find(({ dir }) => dir)?.basename || ``\n const pageProgressionDirection = spineElm?.attr[`page-progression-direction`] as `ltr` | `rtl` | undefined\n\n const archiveSpineItems = await getSpineItemFilesFromArchive({ archive })\n\n const totalSize = archiveSpineItems.reduce((size, file) => file.size + size, 0)\n\n return {\n filename: archive.filename,\n nav: {\n toc\n },\n renditionLayout: publisherRenditionLayout || koboInformation.renditionLayout || `reflowable`,\n renditionFlow: publisherRenditionFlow || `auto`,\n renditionSpread,\n title,\n readingDirection: pageProgressionDirection || `ltr`,\n spineItems:\n spineElm?.childrenNamed(`itemref`).map((itemrefElm) => {\n const manifestItem = manifestElm?.childrenNamed(`item`).find((item) => item.attr.id === itemrefElm?.attr.idref)\n const href = manifestItem?.attr.href || ``\n const properties = (itemrefElm?.attr.properties?.split(` `) || []) as SpineItemProperties[]\n const itemSize = archive.files.find((file) => file.uri.endsWith(href))?.size || 0\n\n return {\n id: manifestItem?.attr.id || ``,\n path: opfBasePath ? `${opfBasePath}/${manifestItem?.attr.href}` : `${manifestItem?.attr.href}`,\n // href: opfBasePath ? `${baseUrl}/${opfBasePath}/${manifestItem?.attr['href']}` : `${baseUrl}/${manifestItem?.attr['href']}`,\n href: manifestItem?.attr.href?.startsWith(`https://`)\n ? manifestItem?.attr.href\n : opfBasePath\n ? `${baseUrl}/${opfBasePath}/${manifestItem?.attr.href}`\n : baseUrl\n ? `${baseUrl}/${manifestItem?.attr.href}`\n : manifestItem?.attr.href ?? ``,\n renditionLayout: publisherRenditionLayout || `reflowable`,\n ...(properties.find((property) => property === `rendition:layout-reflowable`) && {\n renditionLayout: `reflowable`\n }),\n progressionWeight: itemSize / totalSize,\n pageSpreadLeft: properties.some((property) => property === `page-spread-left`) || undefined,\n pageSpreadRight: properties.some((property) => property === `page-spread-right`) || undefined,\n // size: itemSize\n mediaType: manifestItem?.attr[`media-type`]\n }\n }) || [],\n items: getItemsFromDoc(opfXmlDoc),\n guide: guideElm?.childrenNamed(`reference`).map((elm) => {\n return {\n href: elm.attr.href || ``,\n title: elm.attr.title || ``,\n type: elm.attr.type as NonNullable<Manifest[`guide`]>[number][`type`]\n }\n })\n }\n }\n","import xmldoc from \"xmldoc\"\nimport { Archive, getArchiveOpfInfo } from \"..\"\nimport { getItemsFromDoc } from \"./manifest/epub\"\n\nexport const getResourceFromArchive = async (archive: Archive, resourcePath: string) => {\n const file = Object.values(archive.files).find((file) => file.uri === resourcePath)\n\n const metadata = await getMetadata(archive, resourcePath)\n\n if (!file) {\n throw new Error(`no file found`)\n }\n\n const blob = await file.blob()\n\n // if (file.stream) {\n // const stream = file.stream()\n\n // console.log(file, stream)\n // stream.on(`data`, data => {\n // console.log(`data`, data)\n // })\n // stream.on(`error`, data => {\n // console.error(`error`, data)\n // })\n // stream.on(`end`, () => {\n // console.log(`end`)\n // })\n\n // }\n\n // const stream = file.stream!()\n\n // const readableStream = new ReadableStream({\n // start(controller) {\n // function push() {\n // stream.on(`data`, data => {\n // controller.enqueue(data)\n // })\n // stream.on(`error`, data => {\n // console.error(`error`, data)\n // })\n // stream.on(`end`, () => {\n // controller.close()\n // })\n\n // stream.resume()\n // }\n\n // push();\n // }\n // })\n\n const response = new Response(blob, {\n headers: {\n ...(blob.type && {\n \"Content-Type\": blob.type\n }),\n ...(file.encodingFormat && {\n \"Content-Type\": file.encodingFormat\n }),\n ...(metadata.mediaType && {\n \"Content-Type\": metadata.mediaType\n })\n // 'Cache-Control': `no-cache, no-store, no-transform`\n }\n })\n\n return response\n}\n\nconst getMetadata = async (archive: Archive, resourcePath: string) => {\n const opfInfo = getArchiveOpfInfo(archive)\n const data = await opfInfo.data?.string()\n\n if (data) {\n const opfXmlDoc = new xmldoc.XmlDocument(data)\n const items = getItemsFromDoc(opfXmlDoc)\n\n return {\n mediaType: items.find((item) => resourcePath.endsWith(item.href))?.mediaType\n }\n }\n\n return {\n mediaType: getContentTypeFromExtension(resourcePath)\n }\n}\n\nconst getContentTypeFromExtension = (uri: string) => {\n if (uri.endsWith(`.css`)) {\n return `text/css; charset=UTF-8`\n }\n if (uri.endsWith(`.jpg`)) {\n return `image/jpg`\n }\n if (uri.endsWith(`.xhtml`)) {\n return `application/xhtml+xml`\n }\n if (uri.endsWith(`.mp4`)) {\n return `video/mp4`\n }\n if (uri.endsWith(`.svg`)) {\n return `image/svg+xml`\n }\n}\n","import { Manifest } from \"@prose-reader/shared\"\nimport xmldoc from \"xmldoc\"\nimport { Archive } from \"../../archives/types\"\n\n/**\n * Handle archive which contains ComicInfo.xml. This is a meta file\n * used to define cbz, etc. I believe it comes from some sites or apps.\n */\nexport const comicInfoGenerator =\n ({ archive, baseUrl }: { archive: Archive; baseUrl: string }) =>\n async (manifest: Manifest): Promise<Manifest> => {\n const comicInfoFile = archive.files.find((file) => file.basename.toLowerCase() === `comicinfo.xml`)\n\n if (!comicInfoFile) {\n return manifest\n }\n\n // @todo handle more meta\n const content = await comicInfoFile.string()\n const xmlDoc = new xmldoc.XmlDocument(content)\n\n const mangaVal = (xmlDoc.childNamed(`Manga`)?.val as `YesAndRightToLeft`) || `unknown`\n\n return {\n ...manifest,\n spineItems: manifest.spineItems.filter((item) => item.id.toLowerCase() !== `comicinfo.xml`),\n readingDirection: mangaVal === `YesAndRightToLeft` ? `rtl` : `ltr`\n }\n }\n","import { Manifest } from \"@prose-reader/shared\"\nimport { Archive } from \"../../archives/types\"\n\nexport const defaultGenerator =\n ({ archive, baseUrl }: { archive: Archive; baseUrl: string }) =>\n async (manifest: Manifest): Promise<Manifest> => {\n const files = Object.values(archive.files).filter((file) => !file.dir)\n\n return {\n filename: archive.filename,\n nav: {\n toc: []\n },\n title: archive.files.find(({ dir }) => dir)?.basename.replace(/\\/$/, ``) || ``,\n renditionLayout: `pre-paginated`,\n renditionSpread: `auto`,\n readingDirection: `ltr`,\n spineItems: files.map((file) => ({\n id: file.basename,\n path: `${file.uri}`,\n href: baseUrl ? `${baseUrl}/${file.uri}` : file.uri,\n renditionLayout: `pre-paginated`,\n progressionWeight: 1 / files.length,\n pageSpreadLeft: undefined,\n pageSpreadRight: undefined,\n mediaType: file.encodingFormat\n })),\n items: files.map((file) => ({\n id: file.basename,\n href: baseUrl ? `${baseUrl}/${file.uri}` : file.uri\n }))\n }\n }\n","import type { Manifest } from \"@prose-reader/shared\"\nimport { Report } from \"../../report\"\nimport { Archive } from \"../../archives/types\"\nimport { epubGenerator } from \"./epub\"\nimport { comicInfoGenerator } from \"./comicInfo\"\nimport { defaultGenerator } from \"./default\"\n\nconst baseManifest: Manifest = {\n filename: ``,\n items: [],\n nav: {\n toc: []\n },\n readingDirection: `ltr`,\n renditionLayout: `pre-paginated`,\n renditionSpread: `auto`,\n spineItems: [],\n title: ``\n}\n\nexport const getManifestFromArchive = async (archive: Archive, { baseUrl = `` }: { baseUrl?: string } = {}) => {\n const generators = [\n defaultGenerator({ archive, baseUrl }),\n epubGenerator({ archive, baseUrl }),\n comicInfoGenerator({ archive, baseUrl })\n ]\n\n try {\n const manifest = await generators.reduce(async (manifest, gen) => {\n return await gen(await manifest)\n }, Promise.resolve(baseManifest))\n\n const data = JSON.stringify(manifest)\n\n return new Response(data, { status: 200 })\n } catch (e) {\n Report.error(e)\n return new Response((e as any)?.message, { status: 500 })\n }\n}\n","export const getUriBasename = (uri: string) => uri.substring(uri.lastIndexOf(`/`) + 1) || uri\n","import { detectContentType } from \"@prose-reader/shared\"\nimport { getUriBasename } from \"../utils/uri\"\nimport { Archive } from \"./types\"\n\n/**\n * @important\n * Make sure the urls are on the same origin or the cors header is set otherwise\n * the resource cannot be consumed as it is on the web.\n */\nexport const createArchiveFromUrls = async (urls: string[], options?: { useRenditionFlow: boolean }): Promise<Archive> => {\n const opfFileData = `\n <?xml version=\"1.0\" encoding=\"UTF-8\"?><package xmlns=\"http://www.idpf.org/2007/opf\" version=\"2.0\" unique-identifier=\"bookid\">\n <metadata>\n <meta property=\"rendition:layout\">${options?.useRenditionFlow ? `reflowable` : `pre-paginated`}</meta>\n ${options?.useRenditionFlow ? `<meta property=\"rendition:flow\">scrolled-continuous</meta>` : ``}\n </metadata>\n <manifest>\n ${urls\n .map((url) => `<item id=\"${getUriBasename(url)}\" href=\"${url}\" media-type=\"${detectContentType(url)}\"/>`)\n .join(`\\n`)}\n </manifest>\n <spine>\n ${urls.map((url) => `<itemref idref=\"${getUriBasename(url)}\" />`).join(`\\n`)}\n </spine>\n </package>\n `\n\n const filesFromUrl: Archive[`files`] = urls.map((url) => ({\n dir: false,\n basename: getUriBasename(url),\n encodingFormat: detectContentType(url),\n uri: url,\n size: 100 / urls.length,\n base64: async () => ``,\n blob: async () => new Blob(),\n string: async () => ``\n }))\n\n const opfFile: Archive[`files`][number] = {\n dir: false,\n basename: `content.opf`,\n uri: `content.opf`,\n size: 0,\n base64: async () => opfFileData,\n blob: async () => new Blob(),\n string: async () => opfFileData\n }\n\n return {\n filename: ``,\n files: [opfFile, ...filesFromUrl]\n }\n}\n","export const blobToBase64 = async (blob: Blob) =>\n new Promise<string>((resolve) => {\n const reader = new FileReader()\n reader.readAsDataURL(blob)\n reader.onloadend = function () {\n const base64data = reader.result as string\n resolve(base64data)\n }\n })\n","import { blobToBase64 } from \"../utils/blobToBAse64\"\nimport { getUriBasename } from \"../utils/uri\"\nimport { Archive } from \"./types\"\n\n/**\n * Useful to create archive from txt content\n */\nexport const createArchiveFromText = async (\n content: string | Blob,\n options?: {\n direction: `ltr` | `rtl`\n }\n) => {\n const txtOpfContent = `\n <?xml version=\"1.0\" encoding=\"UTF-8\"?>\n <package xmlns=\"http://www.idpf.org/2007/opf\" version=\"3.0\" xml:lang=\"ja\" prefix=\"rendition: http://www.idpf.org/vocab/rendition/#\"\n unique-identifier=\"ootuya-id\">\n <metadata xmlns:opf=\"http://www.idpf.org/2007/opf\" xmlns:dc=\"http://purl.org/dc/elements/1.1/\"\n xmlns:dcterms=\"http://purl.org/dc/terms/\">\n <meta property=\"rendition:layout\">reflowable</meta>\n </metadata>\n <manifest>\n <item id=\"p01\" href=\"p01.txt\" media-type=\"text/plain\"/>\n </manifest>\n <spine page-progression-direction=\"${options?.direction || `ltr`}\">\n <itemref idref=\"p01\" />\n </spine>\n </package>\n `\n\n const archive: Archive = {\n filename: `content.txt`,\n files: [\n {\n dir: false,\n basename: getUriBasename(`generated.opf`),\n uri: `generated.opf`,\n blob: async () => new Blob([txtOpfContent]),\n string: async () => txtOpfContent,\n base64: async () => btoa(txtOpfContent),\n size: 0\n },\n {\n dir: false,\n basename: getUriBasename(`p01.txt`),\n uri: `p01.txt`,\n blob: async () => {\n if (typeof content === `string`) return new Blob([content])\n return content\n },\n string: async () => {\n if (typeof content === `string`) return content\n return content.text()\n },\n base64: async () => {\n if (typeof content === `string`) return btoa(content)\n return blobToBase64(content)\n },\n size: typeof content === `string` ? content.length : content.size,\n encodingFormat: `text/plain`\n }\n ]\n }\n\n return archive\n}\n","export const sortByTitleComparator = (a: string, b: string) => {\n const alist = a.split(/(\\d+)/)\n const blist = b.split(/(\\d+)/)\n\n for (let i = 0, len = alist.length; i < len; i++) {\n if (alist[i] !== blist[i]) {\n if (alist[i]?.match(/\\d/)) {\n return +(alist[i] || ``) - +(blist[i] || ``)\n } else {\n return (alist[i] || ``).localeCompare(blist[i] || ``)\n }\n }\n }\n\n return 1\n}\n","import { sortByTitleComparator } from \"../utils/sortByTitleComparator\"\nimport { getUriBasename } from \"../utils/uri\"\nimport { Archive, StreamResult } from \"./types\"\n\ninterface OutputByType {\n base64: string\n string: string\n text: string\n binarystring: string\n array: number[]\n uint8array: Uint8Array\n arraybuffer: ArrayBuffer\n blob: Blob\n nodebuffer: Buffer\n}\n\ntype OutputType = keyof OutputByType\ninterface JSZipObject {\n name: string\n dir: boolean\n date: Date\n comment: string\n unixPermissions: number | string | null\n dosPermissions: number | null\n async<T extends OutputType>(type: T): Promise<OutputByType[T]>\n // nodeStream(type?: `nodebuffer`): NodeJS.ReadableStream;\n internalStream?: (type?: `uint8array`) => StreamResult\n}\n\ninterface JSZip {\n files: { [key: string]: JSZipObject }\n}\n\nexport const createArchiveFromJszip = async (\n jszip: JSZip,\n { orderByAlpha, name }: { orderByAlpha?: boolean; name?: string } = {}\n): Promise<Archive> => {\n let files = Object.values(jszip.files)\n\n if (orderByAlpha) {\n files = files.sort((a, b) => sortByTitleComparator(a.name, b.name))\n }\n\n return {\n filename: name || ``,\n files: files.map((file) => ({\n dir: file.dir,\n basename: getUriBasename(file.name),\n uri: file.name,\n blob: () => file.async(`blob`),\n string: () => file.async(`string`),\n base64: () => file.async(`base64`),\n ...(file.internalStream && {\n stream: file.internalStream\n }),\n // this is private API\n // @ts-ignore\n size: file._data.uncompressedSize\n }))\n }\n}\n","import { sortByTitleComparator } from \"../utils/sortByTitleComparator\"\nimport { getUriBasename } from \"../utils/uri\"\nimport { Archive } from \"./types\"\n\nexport const createArchiveFromArrayBufferList = async (\n list: {\n isDir: boolean\n name: string\n size: number\n data: () => Promise<ArrayBuffer>\n }[],\n { orderByAlpha, name }: { orderByAlpha?: boolean; name?: string } = {}\n): Promise<Archive> => {\n let files = list\n\n if (orderByAlpha) {\n files = files.sort((a, b) => sortByTitleComparator(a.name, b.name))\n }\n\n return {\n filename: name || ``,\n files: files.map((file) => ({\n dir: file.isDir,\n basename: getUriBasename(file.name),\n uri: file.name,\n blob: async () => new Blob([await file.data()]),\n string: async () => {\n const data = await file.data()\n return String.fromCharCode.apply(null, Array.from(new Uint16Array(data)))\n },\n base64: async () => {\n // @todo not used for now, lets implement it later if needed\n return ``\n },\n size: file.size\n }))\n }\n}\n"],"names":["extractNavChapter","li","opfBasePath","baseUrl","chp","contentNode","node","sublistNode","children","child","buildTOCFromNav","doc","toc","navDataChildren","_a","_b","parseTocFromNavPath","opfXmlDoc","archive","navItem","tocFile","item","xmldoc","mapNcxChapter","point","prefix","src","out","pt","buildTOCFromNCX","ncxData","rootTagName","parseTocFromNcx","opfData","spine","ncxId","ncxItem","ncxPath","file","parseToc","getArchiveOpfInfo","tocFromNcx","extractKoboInformationFromArchive","koboInformation","optionElement","enabled","Report","enable","data","label","performanceEntry","targetDuration","duration","name","functionToMeasure","args","t0","response","res","t1","getSpineItemFilesFromArchive","opsFile","_opfXmlDoc","manifestElm","spineElm","spineItemIds","manifestItemsFromSpine","getItemsFromDoc","el","epubGenerator","manifest","metadataElm","guideElm","titleElm","metaElmChildren","metaElmWithRendition","meta","metaElmWithRenditionFlow","metaElmWithRenditionSpread","publisherRenditionLayout","publisherRenditionFlow","renditionSpread","title","dir","pageProgressionDirection","totalSize","size","itemrefElm","manifestItem","href","properties","itemSize","_c","property","elm","getResourceFromArchive","resourcePath","metadata","getMetadata","blob","getContentTypeFromExtension","uri","comicInfoGenerator","comicInfoFile","content","mangaVal","defaultGenerator","files","baseManifest","getManifestFromArchive","generators","gen","e","getUriBasename","createArchiveFromUrls","urls","options","opfFileData","url","detectContentType","filesFromUrl","blobToBase64","resolve","reader","base64data","createArchiveFromText","txtOpfContent","sortByTitleComparator","a","b","alist","blist","i","len","createArchiveFromJszip","jszip","orderByAlpha","createArchiveFromArrayBufferList","list"],"mappings":"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"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
(function(m,p){typeof exports=="object"&&typeof module<"u"?p(exports,require("xmldoc"),require("@prose-reader/shared")):typeof define=="function"&&define.amd?define(["exports","xmldoc","@prose-reader/shared"],p):(m=typeof globalThis<"u"?globalThis:m||self,p(m["prose-streamer"]={},m.xmldoc,m["@prose-reader/shared"]))})(this,function(m,p,D){"use strict";const S=(e,{opfBasePath:n,baseUrl:i})=>{const r={contents:[],path:"",href:"",title:""};let t=e.childNamed("span")||e.childNamed("a");r.title=(t==null?void 0:t.attr.title)||(t==null?void 0:t.val.trim())||r.title;let a=t==null?void 0:t.name;a!=="a"&&(t=e.descendantWithPath(`${a}.a`),t&&(a=t.name.toLowerCase())),a==="a"&&(t!=null&&t.attr.href)&&(r.path=n?`${n}/${t.attr.href}`:`${t.attr.href}`,r.href=n?`${i}/${n}/${t.attr.href}`:`${i}/${t.attr.href}`);const o=e.childNamed("ol");if(o){const s=o.childrenNamed("li");s&&s.length>0&&(r.contents=s.map(d=>S(d,{opfBasePath:n,baseUrl:i})))}return r},P=(e,{opfBasePath:n,baseUrl:i})=>{var a,o;const r=[];let t;return e.descendantWithPath("body.nav.ol")?t=(a=e.descendantWithPath("body.nav.ol"))==null?void 0:a.children:e.descendantWithPath("body.section.nav.ol")&&(t=(o=e.descendantWithPath("body.section.nav.ol"))==null?void 0:o.children),t&&t.length>0&&t.filter(s=>s.name==="li").forEach(s=>r.push(S(s,{opfBasePath:n,baseUrl:i}))),r},I=async(e,n,{opfBasePath:i,baseUrl:r})=>{var a;const t=(a=e.childNamed("manifest"))==null?void 0:a.childrenNamed("item").find(o=>o.attr.properties==="nav");if(t){const o=Object.values(n.files).find(s=>s.uri.endsWith(t.attr.href||""));if(o){const s=new p.XmlDocument(await o.string());return P(s,{opfBasePath:i,baseUrl:r})}}},L=(e,{opfBasePath:n,baseUrl:i,prefix:r})=>{var s,d;const t=((s=e==null?void 0:e.childNamed(`${r}content`))==null?void 0:s.attr.src)||"",a={title:((d=e==null?void 0:e.descendantWithPath(`${r}navLabel.${r}text`))==null?void 0:d.val)||"",path:n?`${n}/${t}`:`${t}`,href:n?`${i}/${n}/${t}`:`${i}/${t}`,contents:[]},o=e.childrenNamed(`${r}navPoint`);return o&&o.length>0&&(a.contents=o.map(u=>L(u,{opfBasePath:n,baseUrl:i,prefix:r}))),a},M=(e,{opfBasePath:n,baseUrl:i})=>{var o;const r=[],t=e.name;let a="";return t.indexOf(":")!==-1&&(a=t.split(":")[0]+":"),(o=e.childNamed(`${a}navMap`))==null||o.childrenNamed(`${a}navPoint`).forEach(s=>r.push(L(s,{opfBasePath:n,baseUrl:i,prefix:a}))),r},q=async({opfData:e,opfBasePath:n,baseUrl:i,archive:r})=>{var o;const t=e.childNamed("spine"),a=t&&t.attr.toc;if(a){const s=(o=e.childNamed("manifest"))==null?void 0:o.childrenNamed("item").find(d=>d.attr.id===a);if(s){const d=`${n}${n===""?"":"/"}${s.attr.href}`,u=Object.values(r.files).find(f=>f.uri.endsWith(d));if(u){const f=new p.XmlDocument(await u.string());return M(f,{opfBasePath:n,baseUrl:i})}}}},B=async(e,n,{baseUrl:i})=>{const{basePath:r}=$(n)||{},t=await q({opfData:e,opfBasePath:r,archive:n,baseUrl:i});return t||await I(e,n,{opfBasePath:r,baseUrl:i})},G=async e=>{const n={renditionLayout:void 0};return await Promise.all(e.files.map(async i=>{var r,t;if(i.uri.endsWith("com.kobobooks.display-options.xml")){const o=(r=new p.XmlDocument(await i.string()).childNamed("platform"))==null?void 0:r.childNamed("option");((t=o==null?void 0:o.attr)==null?void 0:t.name)==="fixed-layout"&&o.val==="true"&&(n.renditionLayout="pre-paginated")}})),n};let b=!1;const w={enable:e=>{b=e},log:(...e)=>{b&&console.log("[prose-reader-streamer]",...e)},warn:(...e)=>{b&&console.warn("[prose-reader-streamer]",...e)},error:(...e)=>{console.error(...e)},time:e=>{b&&console.time(`[prose-reader-streamer] [metric] ${e}`)},timeEnd:e=>{b&&console.timeEnd(`[prose-reader-streamer] [metric] ${e}`)},metric:(e,n=1/0)=>{const i=typeof e=="number"?e:e.duration;b&&(e.duration<=n?console.log("[prose-reader-streamer] [metric] ",`${e.name} took ${i}ms`):console.warn("[prose-reader-streamer] [metric] ",`${e.name} took ${e.duration}ms which is above the ${n}ms target for this function`))},measurePerformance:(e,n=10,i)=>(...r)=>{const t=performance.now(),a=i(...r);if(a&&a.then)return a.then(s=>{const d=performance.now();return w.metric({name:e,duration:d-t},n),s});const o=performance.now();return w.metric({name:e,duration:o-t},n),a}},$=e=>{const i=Object.values(e.files).filter(r=>!r.dir).find(r=>r.uri.endsWith(".opf"));return{data:i,basePath:(i==null?void 0:i.uri.substring(0,i.uri.lastIndexOf("/")))||""}},J=async({archive:e})=>{const{data:n,basePath:i}=$(e)||{},r=await(n==null?void 0:n.string());if(!r)return[];const t=new p.XmlDocument(r),a=t.childNamed("manifest"),o=t.childNamed("spine"),s=o==null?void 0:o.childrenNamed("itemref").map(f=>f.attr.idref),d=(a==null?void 0:a.childrenNamed("item").filter(f=>s.includes(f.attr.id||"")))||[];return e.files.filter(f=>d.find(h=>i?`${i}/${h.attr.href}`===f.uri:`${h.attr.href}`===f.uri))},W=e=>{var i;const n=e.childNamed("manifest");return((i=n==null?void 0:n.childrenNamed("item"))==null?void 0:i.map(r=>({href:r.attr.href||"",id:r.attr.id||"",mediaType:r.attr["media-type"]})))||[]},_=({archive:e,baseUrl:n})=>async i=>{var j;const{data:r,basePath:t}=$(e)||{},a=await G(e);if(!r)return i;const o=await r.string();w.log(o,a);const s=new p.XmlDocument(o),d=await B(s,e,{baseUrl:n})||[],u=s.childNamed("metadata"),f=s.childNamed("manifest"),h=s.childNamed("spine"),v=s.childNamed("guide"),F=u==null?void 0:u.childNamed("dc:title"),N=(u==null?void 0:u.childrenNamed("meta"))||[],x=N.find(l=>l.attr.property==="rendition:layout"),T=N.find(l=>l.attr.property==="rendition:flow"),A=N.find(l=>l.attr.property==="rendition:spread"),z=x==null?void 0:x.val,ae=T==null?void 0:T.val,ie=A==null?void 0:A.val,oe=(F==null?void 0:F.val)||((j=e.files.find(({dir:l})=>l))==null?void 0:j.basename)||"",se=h==null?void 0:h.attr["page-progression-direction"],ce=(await J({archive:e})).reduce((l,c)=>c.size+l,0);return{filename:e.filename,nav:{toc:d},renditionLayout:z||a.renditionLayout||"reflowable",renditionFlow:ae||"auto",renditionSpread:ie,title:oe,readingDirection:se||"ltr",spineItems:(h==null?void 0:h.childrenNamed("itemref").map(l=>{var R,k,X;const c=f==null?void 0:f.childrenNamed("item").find(g=>g.attr.id===(l==null?void 0:l.attr.idref)),de=(c==null?void 0:c.attr.href)||"",C=((R=l==null?void 0:l.attr.properties)==null?void 0:R.split(" "))||[],le=((k=e.files.find(g=>g.uri.endsWith(de)))==null?void 0:k.size)||0;return{id:(c==null?void 0:c.attr.id)||"",path:t?`${t}/${c==null?void 0:c.attr.href}`:`${c==null?void 0:c.attr.href}`,href:(X=c==null?void 0:c.attr.href)!=null&&X.startsWith("https://")?c==null?void 0:c.attr.href:t?`${n}/${t}/${c==null?void 0:c.attr.href}`:n?`${n}/${c==null?void 0:c.attr.href}`:(c==null?void 0:c.attr.href)??"",renditionLayout:z||"reflowable",...C.find(g=>g==="rendition:layout-reflowable")&&{renditionLayout:"reflowable"},progressionWeight:le/ce,pageSpreadLeft:C.some(g=>g==="page-spread-left")||void 0,pageSpreadRight:C.some(g=>g==="page-spread-right")||void 0,mediaType:c==null?void 0:c.attr["media-type"]}}))||[],items:W(s),guide:v==null?void 0:v.childrenNamed("reference").map(l=>({href:l.attr.href||"",title:l.attr.title||"",type:l.attr.type}))}},K=async(e,n)=>{const i=Object.values(e.files).find(o=>o.uri===n),r=await V(e,n);if(!i)throw new Error("no file found");const t=await i.blob();return new Response(t,{headers:{...t.type&&{"Content-Type":t.type},...i.encodingFormat&&{"Content-Type":i.encodingFormat},...r.mediaType&&{"Content-Type":r.mediaType}}})},V=async(e,n)=>{var t,a;const r=await((t=$(e).data)==null?void 0:t.string());if(r){const o=new p.XmlDocument(r);return{mediaType:(a=W(o).find(d=>n.endsWith(d.href)))==null?void 0:a.mediaType}}return{mediaType:Y(n)}},Y=e=>{if(e.endsWith(".css"))return"text/css; charset=UTF-8";if(e.endsWith(".jpg"))return"image/jpg";if(e.endsWith(".xhtml"))return"application/xhtml+xml";if(e.endsWith(".mp4"))return"video/mp4";if(e.endsWith(".svg"))return"image/svg+xml"},H=({archive:e,baseUrl:n})=>async i=>{var s;const r=e.files.find(d=>d.basename.toLowerCase()==="comicinfo.xml");if(!r)return i;const t=await r.string(),o=((s=new p.XmlDocument(t).childNamed("Manga"))==null?void 0:s.val)||"unknown";return{...i,spineItems:i.spineItems.filter(d=>d.id.toLowerCase()!=="comicinfo.xml"),readingDirection:o==="YesAndRightToLeft"?"rtl":"ltr"}},Q=({archive:e,baseUrl:n})=>async i=>{var t;const r=Object.values(e.files).filter(a=>!a.dir);return{filename:e.filename,nav:{toc:[]},title:((t=e.files.find(({dir:a})=>a))==null?void 0:t.basename.replace(/\/$/,""))||"",renditionLayout:"pre-paginated",renditionSpread:"auto",readingDirection:"ltr",spineItems:r.map(a=>({id:a.basename,path:`${a.uri}`,href:n?`${n}/${a.uri}`:a.uri,renditionLayout:"pre-paginated",progressionWeight:1/r.length,pageSpreadLeft:void 0,pageSpreadRight:void 0,mediaType:a.encodingFormat})),items:r.map(a=>({id:a.basename,href:n?`${n}/${a.uri}`:a.uri}))}},Z={filename:"",items:[],nav:{toc:[]},readingDirection:"ltr",renditionLayout:"pre-paginated",renditionSpread:"auto",spineItems:[],title:""},U=async(e,{baseUrl:n=""}={})=>{const i=[Q({archive:e,baseUrl:n}),_({archive:e,baseUrl:n}),H({archive:e,baseUrl:n})];try{const r=await i.reduce(async(a,o)=>await o(await a),Promise.resolve(Z)),t=JSON.stringify(r);return new Response(t,{status:200})}catch(r){return w.error(r),new Response(r==null?void 0:r.message,{status:500})}},y=e=>e.substring(e.lastIndexOf("/")+1)||e,E=async(e,n)=>{const i=`
|
|
2
|
+
<?xml version="1.0" encoding="UTF-8"?><package xmlns="http://www.idpf.org/2007/opf" version="2.0" unique-identifier="bookid">
|
|
3
|
+
<metadata>
|
|
4
|
+
<meta property="rendition:layout">${n!=null&&n.useRenditionFlow?"reflowable":"pre-paginated"}</meta>
|
|
5
|
+
${n!=null&&n.useRenditionFlow?'<meta property="rendition:flow">scrolled-continuous</meta>':""}
|
|
6
|
+
</metadata>
|
|
7
|
+
<manifest>
|
|
8
|
+
${e.map(a=>`<item id="${y(a)}" href="${a}" media-type="${D.detectContentType(a)}"/>`).join(`
|
|
9
|
+
`)}
|
|
10
|
+
</manifest>
|
|
11
|
+
<spine>
|
|
12
|
+
${e.map(a=>`<itemref idref="${y(a)}" />`).join(`
|
|
13
|
+
`)}
|
|
14
|
+
</spine>
|
|
15
|
+
</package>
|
|
16
|
+
`,r=e.map(a=>({dir:!1,basename:y(a),encodingFormat:D.detectContentType(a),uri:a,size:100/e.length,base64:async()=>"",blob:async()=>new Blob,string:async()=>""}));return{filename:"",files:[{dir:!1,basename:"content.opf",uri:"content.opf",size:0,base64:async()=>i,blob:async()=>new Blob,string:async()=>i},...r]}},ee=async e=>new Promise(n=>{const i=new FileReader;i.readAsDataURL(e),i.onloadend=function(){const r=i.result;n(r)}}),te=async(e,n)=>{const i=`
|
|
17
|
+
<?xml version="1.0" encoding="UTF-8"?>
|
|
18
|
+
<package xmlns="http://www.idpf.org/2007/opf" version="3.0" xml:lang="ja" prefix="rendition: http://www.idpf.org/vocab/rendition/#"
|
|
19
|
+
unique-identifier="ootuya-id">
|
|
20
|
+
<metadata xmlns:opf="http://www.idpf.org/2007/opf" xmlns:dc="http://purl.org/dc/elements/1.1/"
|
|
21
|
+
xmlns:dcterms="http://purl.org/dc/terms/">
|
|
22
|
+
<meta property="rendition:layout">reflowable</meta>
|
|
23
|
+
</metadata>
|
|
24
|
+
<manifest>
|
|
25
|
+
<item id="p01" href="p01.txt" media-type="text/plain"/>
|
|
26
|
+
</manifest>
|
|
27
|
+
<spine page-progression-direction="${(n==null?void 0:n.direction)||"ltr"}">
|
|
28
|
+
<itemref idref="p01" />
|
|
29
|
+
</spine>
|
|
30
|
+
</package>
|
|
31
|
+
`;return{filename:"content.txt",files:[{dir:!1,basename:y("generated.opf"),uri:"generated.opf",blob:async()=>new Blob([i]),string:async()=>i,base64:async()=>btoa(i),size:0},{dir:!1,basename:y("p01.txt"),uri:"p01.txt",blob:async()=>typeof e=="string"?new Blob([e]):e,string:async()=>typeof e=="string"?e:e.text(),base64:async()=>typeof e=="string"?btoa(e):ee(e),size:typeof e=="string"?e.length:e.size,encodingFormat:"text/plain"}]}},O=(e,n)=>{var t;const i=e.split(/(\d+)/),r=n.split(/(\d+)/);for(let a=0,o=i.length;a<o;a++)if(i[a]!==r[a])return(t=i[a])!=null&&t.match(/\d/)?+(i[a]||"")-+(r[a]||""):(i[a]||"").localeCompare(r[a]||"");return 1},ne=async(e,{orderByAlpha:n,name:i}={})=>{let r=Object.values(e.files);return n&&(r=r.sort((t,a)=>O(t.name,a.name))),{filename:i||"",files:r.map(t=>({dir:t.dir,basename:y(t.name),uri:t.name,blob:()=>t.async("blob"),string:()=>t.async("string"),base64:()=>t.async("base64"),...t.internalStream&&{stream:t.internalStream},size:t._data.uncompressedSize}))}},re=async(e,{orderByAlpha:n,name:i}={})=>{let r=e;return n&&(r=r.sort((t,a)=>O(t.name,a.name))),{filename:i||"",files:r.map(t=>({dir:t.isDir,basename:y(t.name),uri:t.name,blob:async()=>new Blob([await t.data()]),string:async()=>{const a=await t.data();return String.fromCharCode.apply(null,Array.from(new Uint16Array(a)))},base64:async()=>"",size:t.size}))}};m.xmldoc=p,m.Report=w,m.createArchiveFromArrayBufferList=re,m.createArchiveFromJszip=ne,m.createArchiveFromText=te,m.createArchiveFromUrls=E,m.getArchiveOpfInfo=$,m.getManifestFromArchive=U,m.getResourceFromArchive=K,Object.defineProperty(m,Symbol.toStringTag,{value:"Module"})});
|
|
32
|
+
//# sourceMappingURL=prose-streamer.umd.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"prose-streamer.umd.cjs","sources":["../src/parsers/nav.ts","../src/parsers/kobo.ts","../src/report.ts","../src/archives/getArchiveOpfInfo.ts","../src/epub/getSpineItemFilesFromArchive.ts","../src/generators/manifest/epub.ts","../src/generators/resources.ts","../src/generators/manifest/comicInfo.ts","../src/generators/manifest/default.ts","../src/generators/manifest/index.ts","../src/utils/uri.ts","../src/archives/createArchiveFromUrls.ts","../src/utils/blobToBAse64.ts","../src/archives/createArchiveFromText.ts","../src/utils/sortByTitleComparator.ts","../src/archives/createArchiveFromJszip.ts","../src/archives/createArchiveFromArrayBufferList.ts"],"sourcesContent":["import xmldoc, { XmlElement } from \"xmldoc\"\nimport type { Manifest } from \"@prose-reader/shared\"\nimport { Archive, getArchiveOpfInfo } from \"..\"\n\ntype Toc = Manifest[`nav`][`toc`]\ntype TocItem = Manifest[`nav`][`toc`][number]\n\nconst extractNavChapter = (li: XmlElement, { opfBasePath, baseUrl }: { opfBasePath: string; baseUrl: string }) => {\n const chp: TocItem = {\n contents: [],\n path: ``,\n href: ``,\n title: ``\n }\n let contentNode = li.childNamed(`span`) || li.childNamed(`a`)\n chp.title = contentNode?.attr.title || contentNode?.val.trim() || chp.title\n let node = contentNode?.name\n if (node !== `a`) {\n contentNode = li.descendantWithPath(`${node}.a`)\n if (contentNode) {\n node = contentNode.name.toLowerCase()\n }\n }\n if (node === `a` && contentNode?.attr.href) {\n chp.path = opfBasePath ? `${opfBasePath}/${contentNode.attr.href}` : `${contentNode.attr.href}`\n chp.href = opfBasePath ? `${baseUrl}/${opfBasePath}/${contentNode.attr.href}` : `${baseUrl}/${contentNode.attr.href}`\n }\n const sublistNode = li.childNamed(`ol`)\n if (sublistNode) {\n const children = sublistNode.childrenNamed(`li`)\n if (children && children.length > 0) {\n chp.contents = children.map((child) => extractNavChapter(child, { opfBasePath, baseUrl }))\n }\n }\n\n return chp\n}\n\nconst buildTOCFromNav = (doc: xmldoc.XmlDocument, { opfBasePath, baseUrl }: { opfBasePath: string; baseUrl: string }) => {\n const toc: Toc = []\n\n let navDataChildren\n if (doc.descendantWithPath(`body.nav.ol`)) {\n navDataChildren = doc.descendantWithPath(`body.nav.ol`)?.children\n } else if (doc.descendantWithPath(`body.section.nav.ol`)) {\n navDataChildren = doc.descendantWithPath(`body.section.nav.ol`)?.children\n }\n\n if (navDataChildren && navDataChildren.length > 0) {\n navDataChildren\n .filter((li) => (li as XmlElement).name === `li`)\n .forEach((li) => toc.push(extractNavChapter(li as XmlElement, { opfBasePath, baseUrl })))\n }\n\n return toc\n}\n\nconst parseTocFromNavPath = async (\n opfXmlDoc: xmldoc.XmlDocument,\n archive: Archive,\n { opfBasePath, baseUrl }: { opfBasePath: string; baseUrl: string }\n) => {\n // Try to detect if there is a nav item\n const navItem = opfXmlDoc\n .childNamed(`manifest`)\n ?.childrenNamed(`item`)\n .find((child) => child.attr.properties === `nav`)\n\n if (navItem) {\n const tocFile = Object.values(archive.files).find((item) => item.uri.endsWith(navItem.attr.href || ``))\n if (tocFile) {\n const doc = new xmldoc.XmlDocument(await tocFile.string())\n return buildTOCFromNav(doc, { opfBasePath, baseUrl })\n }\n }\n}\n\nconst mapNcxChapter = (\n point: xmldoc.XmlElement,\n { opfBasePath, baseUrl, prefix }: { opfBasePath: string; baseUrl: string; prefix: string }\n) => {\n const src = point?.childNamed(`${prefix}content`)?.attr.src || ``\n const out: TocItem = {\n title: point?.descendantWithPath(`${prefix}navLabel.${prefix}text`)?.val || ``,\n path: opfBasePath ? `${opfBasePath}/${src}` : `${src}`,\n href: opfBasePath ? `${baseUrl}/${opfBasePath}/${src}` : `${baseUrl}/${src}`,\n contents: []\n }\n const children = point.childrenNamed(`${prefix}navPoint`)\n if (children && children.length > 0) {\n out.contents = children.map((pt) => mapNcxChapter(pt, { opfBasePath, baseUrl, prefix }))\n }\n\n return out\n}\n\nconst buildTOCFromNCX = (ncxData: xmldoc.XmlDocument, { opfBasePath, baseUrl }: { opfBasePath: string; baseUrl: string }) => {\n const toc: Manifest[`nav`][`toc`] = []\n\n const rootTagName = ncxData.name\n let prefix = ``\n if (rootTagName.indexOf(`:`) !== -1) {\n prefix = rootTagName.split(`:`)[0] + `:`\n }\n\n ncxData\n .childNamed(`${prefix}navMap`)\n ?.childrenNamed(`${prefix}navPoint`)\n .forEach((point) => toc.push(mapNcxChapter(point, { opfBasePath, baseUrl, prefix })))\n\n return toc\n}\n\nconst parseTocFromNcx = async ({\n opfData,\n opfBasePath,\n baseUrl,\n archive\n}: {\n opfData: xmldoc.XmlDocument\n opfBasePath: string\n archive: Archive\n baseUrl: string\n}) => {\n const spine = opfData.childNamed(`spine`)\n const ncxId = spine && spine.attr.toc\n\n if (ncxId) {\n const ncxItem = opfData\n .childNamed(`manifest`)\n ?.childrenNamed(`item`)\n .find((item) => item.attr.id === ncxId)\n\n if (ncxItem) {\n const ncxPath = `${opfBasePath}${opfBasePath === `` ? `` : `/`}${ncxItem.attr.href}`\n\n const file = Object.values(archive.files).find((item) => item.uri.endsWith(ncxPath))\n\n if (file) {\n const ncxData = new xmldoc.XmlDocument(await file.string())\n\n return buildTOCFromNCX(ncxData, { opfBasePath, baseUrl })\n }\n }\n }\n}\n\nexport const parseToc = async (opfXmlDoc: xmldoc.XmlDocument, archive: Archive, { baseUrl }: { baseUrl: string }) => {\n const { basePath: opfBasePath } = getArchiveOpfInfo(archive) || {}\n\n const tocFromNcx = await parseTocFromNcx({\n opfData: opfXmlDoc,\n opfBasePath,\n archive,\n baseUrl\n })\n\n if (tocFromNcx) {\n return tocFromNcx\n }\n\n return await parseTocFromNavPath(opfXmlDoc, archive, { opfBasePath, baseUrl })\n}\n","import xmldoc from \"xmldoc\"\nimport { Archive } from \"..\"\n\ntype KoboInformation = {\n renditionLayout?: `reflowable` | `pre-paginated` | undefined\n}\n\nexport const extractKoboInformationFromArchive = async (archive: Archive) => {\n const koboInformation: KoboInformation = {\n renditionLayout: undefined\n }\n\n await Promise.all(\n archive.files.map(async (file) => {\n if (file.uri.endsWith(`com.kobobooks.display-options.xml`)) {\n const opfXmlDoc = new xmldoc.XmlDocument(await file.string())\n const optionElement = opfXmlDoc.childNamed(`platform`)?.childNamed(`option`)\n if (optionElement?.attr?.name === `fixed-layout` && optionElement.val === `true`) {\n koboInformation.renditionLayout = `pre-paginated`\n }\n }\n })\n )\n\n return koboInformation\n}\n","let enabled = false\n\nexport const Report = {\n enable: (enable: boolean) => {\n enabled = enable\n },\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n log: (...data: any[]) => {\n if (enabled) {\n // eslint-disable-next-line no-console\n console.log(`[prose-reader-streamer]`, ...data)\n }\n },\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n warn: (...data: any[]) => {\n if (enabled) {\n // eslint-disable-next-line no-console\n console.warn(`[prose-reader-streamer]`, ...data)\n }\n },\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n error: (...data: any[]) => {\n // eslint-disable-next-line no-console\n console.error(...data)\n },\n time: (label?: string | undefined) => {\n if (enabled) {\n // eslint-disable-next-line no-console\n console.time(`[prose-reader-streamer] [metric] ${label}`)\n }\n },\n timeEnd: (label?: string | undefined) => {\n if (enabled) {\n // eslint-disable-next-line no-console\n console.timeEnd(`[prose-reader-streamer] [metric] ${label}`)\n }\n },\n metric: (performanceEntry: { name: string; duration: number }, targetDuration = Infinity) => {\n const duration = typeof performanceEntry === `number` ? performanceEntry : performanceEntry.duration\n if (enabled) {\n if (performanceEntry.duration <= targetDuration) {\n // eslint-disable-next-line no-console\n console.log(`[prose-reader-streamer] [metric] `, `${performanceEntry.name} took ${duration}ms`)\n } else {\n // eslint-disable-next-line no-console\n console.warn(\n `[prose-reader-streamer] [metric] `,\n `${performanceEntry.name} took ${performanceEntry.duration}ms which is above the ${targetDuration}ms target for this function`\n )\n }\n }\n },\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n measurePerformance: <F extends (...args: any[]) => any>(name: string, targetDuration = 10, functionToMeasure: F) => {\n return (...args: Parameters<F>): ReturnType<F> => {\n const t0 = performance.now()\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const response = functionToMeasure(...(args as any))\n\n if (response && response.then) {\n return response.then((res: any) => {\n const t1 = performance.now()\n Report.metric({ name, duration: t1 - t0 }, targetDuration)\n return res\n })\n }\n\n const t1 = performance.now()\n Report.metric({ name, duration: t1 - t0 }, targetDuration)\n\n return response\n }\n }\n}\n","import { Archive } from \"./types\"\n\nexport const getArchiveOpfInfo = (archive: Archive) => {\n const filesAsArray = Object.values(archive.files).filter((file) => !file.dir)\n const file = filesAsArray.find((file) => file.uri.endsWith(`.opf`))\n\n return {\n data: file,\n basePath: file?.uri.substring(0, file.uri.lastIndexOf(`/`)) || ``\n }\n}\n","import xmldoc from \"xmldoc\"\nimport { getArchiveOpfInfo } from \"../archives/getArchiveOpfInfo\"\nimport { Archive } from \"../archives/types\"\n\nexport const getSpineItemFilesFromArchive = async ({ archive }: { archive: Archive }) => {\n const { data: opsFile, basePath: opfBasePath } = getArchiveOpfInfo(archive) || {}\n\n const data = await opsFile?.string()\n\n if (!data) return []\n\n const _opfXmlDoc = new xmldoc.XmlDocument(data)\n\n const manifestElm = _opfXmlDoc.childNamed(`manifest`)\n const spineElm = _opfXmlDoc.childNamed(`spine`)\n\n const spineItemIds = spineElm?.childrenNamed(`itemref`).map((item) => item.attr.idref) as string[]\n const manifestItemsFromSpine =\n manifestElm?.childrenNamed(`item`).filter((item) => spineItemIds.includes(item.attr.id || ``)) || []\n\n const archiveSpineItems = archive.files.filter((file) => {\n return manifestItemsFromSpine.find((item) => {\n if (!opfBasePath) return `${item.attr.href}` === file.uri\n return `${opfBasePath}/${item.attr.href}` === file.uri\n })\n })\n\n return archiveSpineItems\n}\n","import xmldoc from \"xmldoc\"\nimport { parseToc } from \"../../parsers/nav\"\nimport type { Manifest } from \"@prose-reader/shared\"\nimport { extractKoboInformationFromArchive } from \"../../parsers/kobo\"\nimport { Report } from \"../../report\"\nimport { Archive } from \"../../archives/types\"\nimport { getArchiveOpfInfo } from \"../../archives/getArchiveOpfInfo\"\nimport { getSpineItemFilesFromArchive } from \"../../epub/getSpineItemFilesFromArchive\"\n\ntype SpineItemProperties = `rendition:layout-reflowable` | `page-spread-left` | `page-spread-right`\n\nexport const getItemsFromDoc = (doc: xmldoc.XmlDocument) => {\n const manifestElm = doc.childNamed(`manifest`)\n\n return (\n manifestElm?.childrenNamed(`item`)?.map((el) => ({\n href: el.attr.href || ``,\n id: el.attr.id || ``,\n mediaType: el.attr[`media-type`]\n })) || []\n )\n}\n\nexport const epubGenerator =\n ({ archive, baseUrl }: { archive: Archive; baseUrl: string }) =>\n async (manifest: Manifest): Promise<Manifest> => {\n const { data: opsFile, basePath: opfBasePath } = getArchiveOpfInfo(archive) || {}\n const koboInformation = await extractKoboInformationFromArchive(archive)\n\n if (!opsFile) {\n return manifest\n }\n\n const data = await opsFile.string()\n\n Report.log(data, koboInformation)\n\n const opfXmlDoc = new xmldoc.XmlDocument(data)\n\n const toc = (await parseToc(opfXmlDoc, archive, { baseUrl })) || []\n\n const metadataElm = opfXmlDoc.childNamed(`metadata`)\n const manifestElm = opfXmlDoc.childNamed(`manifest`)\n const spineElm = opfXmlDoc.childNamed(`spine`)\n const guideElm = opfXmlDoc.childNamed(`guide`)\n const titleElm = metadataElm?.childNamed(`dc:title`)\n const metaElmChildren = metadataElm?.childrenNamed(`meta`) || []\n const metaElmWithRendition = metaElmChildren.find((meta) => meta.attr.property === `rendition:layout`)\n const metaElmWithRenditionFlow = metaElmChildren.find((meta) => meta.attr.property === `rendition:flow`)\n const metaElmWithRenditionSpread = metaElmChildren.find((meta) => meta.attr.property === `rendition:spread`)\n\n const publisherRenditionLayout = metaElmWithRendition?.val as `reflowable` | `pre-paginated` | undefined\n const publisherRenditionFlow = metaElmWithRenditionFlow?.val as\n | `scrolled-continuous`\n | `scrolled-doc`\n | `paginated`\n | `auto`\n | undefined\n const renditionSpread = metaElmWithRenditionSpread?.val as `auto` | undefined\n\n const title = titleElm?.val || archive.files.find(({ dir }) => dir)?.basename || ``\n const pageProgressionDirection = spineElm?.attr[`page-progression-direction`] as `ltr` | `rtl` | undefined\n\n const archiveSpineItems = await getSpineItemFilesFromArchive({ archive })\n\n const totalSize = archiveSpineItems.reduce((size, file) => file.size + size, 0)\n\n return {\n filename: archive.filename,\n nav: {\n toc\n },\n renditionLayout: publisherRenditionLayout || koboInformation.renditionLayout || `reflowable`,\n renditionFlow: publisherRenditionFlow || `auto`,\n renditionSpread,\n title,\n readingDirection: pageProgressionDirection || `ltr`,\n spineItems:\n spineElm?.childrenNamed(`itemref`).map((itemrefElm) => {\n const manifestItem = manifestElm?.childrenNamed(`item`).find((item) => item.attr.id === itemrefElm?.attr.idref)\n const href = manifestItem?.attr.href || ``\n const properties = (itemrefElm?.attr.properties?.split(` `) || []) as SpineItemProperties[]\n const itemSize = archive.files.find((file) => file.uri.endsWith(href))?.size || 0\n\n return {\n id: manifestItem?.attr.id || ``,\n path: opfBasePath ? `${opfBasePath}/${manifestItem?.attr.href}` : `${manifestItem?.attr.href}`,\n // href: opfBasePath ? `${baseUrl}/${opfBasePath}/${manifestItem?.attr['href']}` : `${baseUrl}/${manifestItem?.attr['href']}`,\n href: manifestItem?.attr.href?.startsWith(`https://`)\n ? manifestItem?.attr.href\n : opfBasePath\n ? `${baseUrl}/${opfBasePath}/${manifestItem?.attr.href}`\n : baseUrl\n ? `${baseUrl}/${manifestItem?.attr.href}`\n : manifestItem?.attr.href ?? ``,\n renditionLayout: publisherRenditionLayout || `reflowable`,\n ...(properties.find((property) => property === `rendition:layout-reflowable`) && {\n renditionLayout: `reflowable`\n }),\n progressionWeight: itemSize / totalSize,\n pageSpreadLeft: properties.some((property) => property === `page-spread-left`) || undefined,\n pageSpreadRight: properties.some((property) => property === `page-spread-right`) || undefined,\n // size: itemSize\n mediaType: manifestItem?.attr[`media-type`]\n }\n }) || [],\n items: getItemsFromDoc(opfXmlDoc),\n guide: guideElm?.childrenNamed(`reference`).map((elm) => {\n return {\n href: elm.attr.href || ``,\n title: elm.attr.title || ``,\n type: elm.attr.type as NonNullable<Manifest[`guide`]>[number][`type`]\n }\n })\n }\n }\n","import xmldoc from \"xmldoc\"\nimport { Archive, getArchiveOpfInfo } from \"..\"\nimport { getItemsFromDoc } from \"./manifest/epub\"\n\nexport const getResourceFromArchive = async (archive: Archive, resourcePath: string) => {\n const file = Object.values(archive.files).find((file) => file.uri === resourcePath)\n\n const metadata = await getMetadata(archive, resourcePath)\n\n if (!file) {\n throw new Error(`no file found`)\n }\n\n const blob = await file.blob()\n\n // if (file.stream) {\n // const stream = file.stream()\n\n // console.log(file, stream)\n // stream.on(`data`, data => {\n // console.log(`data`, data)\n // })\n // stream.on(`error`, data => {\n // console.error(`error`, data)\n // })\n // stream.on(`end`, () => {\n // console.log(`end`)\n // })\n\n // }\n\n // const stream = file.stream!()\n\n // const readableStream = new ReadableStream({\n // start(controller) {\n // function push() {\n // stream.on(`data`, data => {\n // controller.enqueue(data)\n // })\n // stream.on(`error`, data => {\n // console.error(`error`, data)\n // })\n // stream.on(`end`, () => {\n // controller.close()\n // })\n\n // stream.resume()\n // }\n\n // push();\n // }\n // })\n\n const response = new Response(blob, {\n headers: {\n ...(blob.type && {\n \"Content-Type\": blob.type\n }),\n ...(file.encodingFormat && {\n \"Content-Type\": file.encodingFormat\n }),\n ...(metadata.mediaType && {\n \"Content-Type\": metadata.mediaType\n })\n // 'Cache-Control': `no-cache, no-store, no-transform`\n }\n })\n\n return response\n}\n\nconst getMetadata = async (archive: Archive, resourcePath: string) => {\n const opfInfo = getArchiveOpfInfo(archive)\n const data = await opfInfo.data?.string()\n\n if (data) {\n const opfXmlDoc = new xmldoc.XmlDocument(data)\n const items = getItemsFromDoc(opfXmlDoc)\n\n return {\n mediaType: items.find((item) => resourcePath.endsWith(item.href))?.mediaType\n }\n }\n\n return {\n mediaType: getContentTypeFromExtension(resourcePath)\n }\n}\n\nconst getContentTypeFromExtension = (uri: string) => {\n if (uri.endsWith(`.css`)) {\n return `text/css; charset=UTF-8`\n }\n if (uri.endsWith(`.jpg`)) {\n return `image/jpg`\n }\n if (uri.endsWith(`.xhtml`)) {\n return `application/xhtml+xml`\n }\n if (uri.endsWith(`.mp4`)) {\n return `video/mp4`\n }\n if (uri.endsWith(`.svg`)) {\n return `image/svg+xml`\n }\n}\n","import { Manifest } from \"@prose-reader/shared\"\nimport xmldoc from \"xmldoc\"\nimport { Archive } from \"../../archives/types\"\n\n/**\n * Handle archive which contains ComicInfo.xml. This is a meta file\n * used to define cbz, etc. I believe it comes from some sites or apps.\n */\nexport const comicInfoGenerator =\n ({ archive, baseUrl }: { archive: Archive; baseUrl: string }) =>\n async (manifest: Manifest): Promise<Manifest> => {\n const comicInfoFile = archive.files.find((file) => file.basename.toLowerCase() === `comicinfo.xml`)\n\n if (!comicInfoFile) {\n return manifest\n }\n\n // @todo handle more meta\n const content = await comicInfoFile.string()\n const xmlDoc = new xmldoc.XmlDocument(content)\n\n const mangaVal = (xmlDoc.childNamed(`Manga`)?.val as `YesAndRightToLeft`) || `unknown`\n\n return {\n ...manifest,\n spineItems: manifest.spineItems.filter((item) => item.id.toLowerCase() !== `comicinfo.xml`),\n readingDirection: mangaVal === `YesAndRightToLeft` ? `rtl` : `ltr`\n }\n }\n","import { Manifest } from \"@prose-reader/shared\"\nimport { Archive } from \"../../archives/types\"\n\nexport const defaultGenerator =\n ({ archive, baseUrl }: { archive: Archive; baseUrl: string }) =>\n async (manifest: Manifest): Promise<Manifest> => {\n const files = Object.values(archive.files).filter((file) => !file.dir)\n\n return {\n filename: archive.filename,\n nav: {\n toc: []\n },\n title: archive.files.find(({ dir }) => dir)?.basename.replace(/\\/$/, ``) || ``,\n renditionLayout: `pre-paginated`,\n renditionSpread: `auto`,\n readingDirection: `ltr`,\n spineItems: files.map((file) => ({\n id: file.basename,\n path: `${file.uri}`,\n href: baseUrl ? `${baseUrl}/${file.uri}` : file.uri,\n renditionLayout: `pre-paginated`,\n progressionWeight: 1 / files.length,\n pageSpreadLeft: undefined,\n pageSpreadRight: undefined,\n mediaType: file.encodingFormat\n })),\n items: files.map((file) => ({\n id: file.basename,\n href: baseUrl ? `${baseUrl}/${file.uri}` : file.uri\n }))\n }\n }\n","import type { Manifest } from \"@prose-reader/shared\"\nimport { Report } from \"../../report\"\nimport { Archive } from \"../../archives/types\"\nimport { epubGenerator } from \"./epub\"\nimport { comicInfoGenerator } from \"./comicInfo\"\nimport { defaultGenerator } from \"./default\"\n\nconst baseManifest: Manifest = {\n filename: ``,\n items: [],\n nav: {\n toc: []\n },\n readingDirection: `ltr`,\n renditionLayout: `pre-paginated`,\n renditionSpread: `auto`,\n spineItems: [],\n title: ``\n}\n\nexport const getManifestFromArchive = async (archive: Archive, { baseUrl = `` }: { baseUrl?: string } = {}) => {\n const generators = [\n defaultGenerator({ archive, baseUrl }),\n epubGenerator({ archive, baseUrl }),\n comicInfoGenerator({ archive, baseUrl })\n ]\n\n try {\n const manifest = await generators.reduce(async (manifest, gen) => {\n return await gen(await manifest)\n }, Promise.resolve(baseManifest))\n\n const data = JSON.stringify(manifest)\n\n return new Response(data, { status: 200 })\n } catch (e) {\n Report.error(e)\n return new Response((e as any)?.message, { status: 500 })\n }\n}\n","export const getUriBasename = (uri: string) => uri.substring(uri.lastIndexOf(`/`) + 1) || uri\n","import { detectContentType } from \"@prose-reader/shared\"\nimport { getUriBasename } from \"../utils/uri\"\nimport { Archive } from \"./types\"\n\n/**\n * @important\n * Make sure the urls are on the same origin or the cors header is set otherwise\n * the resource cannot be consumed as it is on the web.\n */\nexport const createArchiveFromUrls = async (urls: string[], options?: { useRenditionFlow: boolean }): Promise<Archive> => {\n const opfFileData = `\n <?xml version=\"1.0\" encoding=\"UTF-8\"?><package xmlns=\"http://www.idpf.org/2007/opf\" version=\"2.0\" unique-identifier=\"bookid\">\n <metadata>\n <meta property=\"rendition:layout\">${options?.useRenditionFlow ? `reflowable` : `pre-paginated`}</meta>\n ${options?.useRenditionFlow ? `<meta property=\"rendition:flow\">scrolled-continuous</meta>` : ``}\n </metadata>\n <manifest>\n ${urls\n .map((url) => `<item id=\"${getUriBasename(url)}\" href=\"${url}\" media-type=\"${detectContentType(url)}\"/>`)\n .join(`\\n`)}\n </manifest>\n <spine>\n ${urls.map((url) => `<itemref idref=\"${getUriBasename(url)}\" />`).join(`\\n`)}\n </spine>\n </package>\n `\n\n const filesFromUrl: Archive[`files`] = urls.map((url) => ({\n dir: false,\n basename: getUriBasename(url),\n encodingFormat: detectContentType(url),\n uri: url,\n size: 100 / urls.length,\n base64: async () => ``,\n blob: async () => new Blob(),\n string: async () => ``\n }))\n\n const opfFile: Archive[`files`][number] = {\n dir: false,\n basename: `content.opf`,\n uri: `content.opf`,\n size: 0,\n base64: async () => opfFileData,\n blob: async () => new Blob(),\n string: async () => opfFileData\n }\n\n return {\n filename: ``,\n files: [opfFile, ...filesFromUrl]\n }\n}\n","export const blobToBase64 = async (blob: Blob) =>\n new Promise<string>((resolve) => {\n const reader = new FileReader()\n reader.readAsDataURL(blob)\n reader.onloadend = function () {\n const base64data = reader.result as string\n resolve(base64data)\n }\n })\n","import { blobToBase64 } from \"../utils/blobToBAse64\"\nimport { getUriBasename } from \"../utils/uri\"\nimport { Archive } from \"./types\"\n\n/**\n * Useful to create archive from txt content\n */\nexport const createArchiveFromText = async (\n content: string | Blob,\n options?: {\n direction: `ltr` | `rtl`\n }\n) => {\n const txtOpfContent = `\n <?xml version=\"1.0\" encoding=\"UTF-8\"?>\n <package xmlns=\"http://www.idpf.org/2007/opf\" version=\"3.0\" xml:lang=\"ja\" prefix=\"rendition: http://www.idpf.org/vocab/rendition/#\"\n unique-identifier=\"ootuya-id\">\n <metadata xmlns:opf=\"http://www.idpf.org/2007/opf\" xmlns:dc=\"http://purl.org/dc/elements/1.1/\"\n xmlns:dcterms=\"http://purl.org/dc/terms/\">\n <meta property=\"rendition:layout\">reflowable</meta>\n </metadata>\n <manifest>\n <item id=\"p01\" href=\"p01.txt\" media-type=\"text/plain\"/>\n </manifest>\n <spine page-progression-direction=\"${options?.direction || `ltr`}\">\n <itemref idref=\"p01\" />\n </spine>\n </package>\n `\n\n const archive: Archive = {\n filename: `content.txt`,\n files: [\n {\n dir: false,\n basename: getUriBasename(`generated.opf`),\n uri: `generated.opf`,\n blob: async () => new Blob([txtOpfContent]),\n string: async () => txtOpfContent,\n base64: async () => btoa(txtOpfContent),\n size: 0\n },\n {\n dir: false,\n basename: getUriBasename(`p01.txt`),\n uri: `p01.txt`,\n blob: async () => {\n if (typeof content === `string`) return new Blob([content])\n return content\n },\n string: async () => {\n if (typeof content === `string`) return content\n return content.text()\n },\n base64: async () => {\n if (typeof content === `string`) return btoa(content)\n return blobToBase64(content)\n },\n size: typeof content === `string` ? content.length : content.size,\n encodingFormat: `text/plain`\n }\n ]\n }\n\n return archive\n}\n","export const sortByTitleComparator = (a: string, b: string) => {\n const alist = a.split(/(\\d+)/)\n const blist = b.split(/(\\d+)/)\n\n for (let i = 0, len = alist.length; i < len; i++) {\n if (alist[i] !== blist[i]) {\n if (alist[i]?.match(/\\d/)) {\n return +(alist[i] || ``) - +(blist[i] || ``)\n } else {\n return (alist[i] || ``).localeCompare(blist[i] || ``)\n }\n }\n }\n\n return 1\n}\n","import { sortByTitleComparator } from \"../utils/sortByTitleComparator\"\nimport { getUriBasename } from \"../utils/uri\"\nimport { Archive, StreamResult } from \"./types\"\n\ninterface OutputByType {\n base64: string\n string: string\n text: string\n binarystring: string\n array: number[]\n uint8array: Uint8Array\n arraybuffer: ArrayBuffer\n blob: Blob\n nodebuffer: Buffer\n}\n\ntype OutputType = keyof OutputByType\ninterface JSZipObject {\n name: string\n dir: boolean\n date: Date\n comment: string\n unixPermissions: number | string | null\n dosPermissions: number | null\n async<T extends OutputType>(type: T): Promise<OutputByType[T]>\n // nodeStream(type?: `nodebuffer`): NodeJS.ReadableStream;\n internalStream?: (type?: `uint8array`) => StreamResult\n}\n\ninterface JSZip {\n files: { [key: string]: JSZipObject }\n}\n\nexport const createArchiveFromJszip = async (\n jszip: JSZip,\n { orderByAlpha, name }: { orderByAlpha?: boolean; name?: string } = {}\n): Promise<Archive> => {\n let files = Object.values(jszip.files)\n\n if (orderByAlpha) {\n files = files.sort((a, b) => sortByTitleComparator(a.name, b.name))\n }\n\n return {\n filename: name || ``,\n files: files.map((file) => ({\n dir: file.dir,\n basename: getUriBasename(file.name),\n uri: file.name,\n blob: () => file.async(`blob`),\n string: () => file.async(`string`),\n base64: () => file.async(`base64`),\n ...(file.internalStream && {\n stream: file.internalStream\n }),\n // this is private API\n // @ts-ignore\n size: file._data.uncompressedSize\n }))\n }\n}\n","import { sortByTitleComparator } from \"../utils/sortByTitleComparator\"\nimport { getUriBasename } from \"../utils/uri\"\nimport { Archive } from \"./types\"\n\nexport const createArchiveFromArrayBufferList = async (\n list: {\n isDir: boolean\n name: string\n size: number\n data: () => Promise<ArrayBuffer>\n }[],\n { orderByAlpha, name }: { orderByAlpha?: boolean; name?: string } = {}\n): Promise<Archive> => {\n let files = list\n\n if (orderByAlpha) {\n files = files.sort((a, b) => sortByTitleComparator(a.name, b.name))\n }\n\n return {\n filename: name || ``,\n files: files.map((file) => ({\n dir: file.isDir,\n basename: getUriBasename(file.name),\n uri: file.name,\n blob: async () => new Blob([await file.data()]),\n string: async () => {\n const data = await file.data()\n return String.fromCharCode.apply(null, Array.from(new Uint16Array(data)))\n },\n base64: async () => {\n // @todo not used for now, lets implement it later if needed\n return ``\n },\n size: file.size\n }))\n }\n}\n"],"names":["extractNavChapter","li","opfBasePath","baseUrl","chp","contentNode","node","sublistNode","children","child","buildTOCFromNav","doc","toc","navDataChildren","_a","_b","parseTocFromNavPath","opfXmlDoc","archive","navItem","tocFile","item","xmldoc","mapNcxChapter","point","prefix","src","out","pt","buildTOCFromNCX","ncxData","rootTagName","parseTocFromNcx","opfData","spine","ncxId","ncxItem","ncxPath","file","parseToc","getArchiveOpfInfo","tocFromNcx","extractKoboInformationFromArchive","koboInformation","optionElement","enabled","Report","enable","data","label","performanceEntry","targetDuration","duration","name","functionToMeasure","args","t0","response","res","t1","getSpineItemFilesFromArchive","opsFile","_opfXmlDoc","manifestElm","spineElm","spineItemIds","manifestItemsFromSpine","getItemsFromDoc","el","epubGenerator","manifest","metadataElm","guideElm","titleElm","metaElmChildren","metaElmWithRendition","meta","metaElmWithRenditionFlow","metaElmWithRenditionSpread","publisherRenditionLayout","publisherRenditionFlow","renditionSpread","title","dir","pageProgressionDirection","totalSize","size","itemrefElm","manifestItem","href","properties","itemSize","_c","property","elm","getResourceFromArchive","resourcePath","metadata","getMetadata","blob","getContentTypeFromExtension","uri","comicInfoGenerator","comicInfoFile","content","mangaVal","defaultGenerator","files","baseManifest","getManifestFromArchive","generators","gen","e","getUriBasename","createArchiveFromUrls","urls","options","opfFileData","url","detectContentType","filesFromUrl","blobToBase64","resolve","reader","base64data","createArchiveFromText","txtOpfContent","sortByTitleComparator","a","b","alist","blist","i","len","createArchiveFromJszip","jszip","orderByAlpha","createArchiveFromArrayBufferList","list"],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,46 +1,35 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@prose-reader/streamer",
|
|
3
|
-
"version": "0.0.
|
|
4
|
-
"
|
|
3
|
+
"version": "0.0.38",
|
|
4
|
+
"type": "module",
|
|
5
|
+
"main": "./dist/prose-streamer.umd.cjs",
|
|
6
|
+
"module": "./dist/prose-streamer.js",
|
|
7
|
+
"exports": {
|
|
8
|
+
".": {
|
|
9
|
+
"import": "./dist/prose-streamer.js",
|
|
10
|
+
"require": "./dist/prose-streamer.umd.cjs"
|
|
11
|
+
}
|
|
12
|
+
},
|
|
13
|
+
"types": "./dist/index.d.ts",
|
|
5
14
|
"license": "MIT",
|
|
6
15
|
"files": [
|
|
7
16
|
"/dist"
|
|
8
17
|
],
|
|
9
18
|
"scripts": {
|
|
10
|
-
"start": "
|
|
11
|
-
"
|
|
12
|
-
"start-types": "yarn tsc -w --preserveWatchOutput --declaration --noEmit false --emitDeclarationOnly",
|
|
13
|
-
"build": "concurrently -n src,types \"yarn build-src\" \"yarn build-types\"",
|
|
14
|
-
"build-src": "NODE_ENV=development webpack build --config ./webpack.config.js",
|
|
15
|
-
"build-types": "yarn tsc --declaration --noEmit false --emitDeclarationOnly",
|
|
16
|
-
"build:prod": "NODE_ENV=production webpack build --config ./webpack.config.js && yarn build-types",
|
|
19
|
+
"start": "vite build --watch --mode development",
|
|
20
|
+
"build": "tsc && vite build",
|
|
17
21
|
"lint": "prettier -w . && eslint --fix . --ext .ts,.tsx,.js,.jsx",
|
|
18
|
-
"test": "
|
|
22
|
+
"test": "vitest run --coverage"
|
|
19
23
|
},
|
|
20
|
-
"
|
|
24
|
+
"peerDependencies": {
|
|
21
25
|
"@prose-reader/shared": "^0.0.7",
|
|
22
|
-
"
|
|
23
|
-
"buffer": "6.0.3",
|
|
26
|
+
"buffer": "^6.0.3",
|
|
24
27
|
"xmldoc": "^1.1.2"
|
|
25
28
|
},
|
|
29
|
+
"gitHead": "3de14b1d82c2a66acf153c3586c6d4cda6e49ca2",
|
|
26
30
|
"devDependencies": {
|
|
27
|
-
"
|
|
28
|
-
"
|
|
29
|
-
"
|
|
30
|
-
|
|
31
|
-
"eslint-plugin-import": "^2.25.2",
|
|
32
|
-
"eslint-plugin-jest": "^25.3.2",
|
|
33
|
-
"eslint-plugin-node": "^11.1.0",
|
|
34
|
-
"eslint-plugin-promise": "^5.2.0",
|
|
35
|
-
"isomorphic-fetch": "^3.0.0",
|
|
36
|
-
"jest": "^29.1.2",
|
|
37
|
-
"prettier": "^2.5.1",
|
|
38
|
-
"ts-loader": "^9.2.8",
|
|
39
|
-
"ts-node": "^10.4.0",
|
|
40
|
-
"typescript": "*",
|
|
41
|
-
"webpack": "^5.65.0",
|
|
42
|
-
"webpack-cli": "^4.9.1",
|
|
43
|
-
"webpack-dev-server": "^4.6.0"
|
|
44
|
-
},
|
|
45
|
-
"gitHead": "1f28c007ad5b72e6a131e77aa3438b652d0203c2"
|
|
31
|
+
"buffer": "^6.0.3",
|
|
32
|
+
"vitest": "*",
|
|
33
|
+
"xmldoc": "^1.2.0"
|
|
34
|
+
}
|
|
46
35
|
}
|
package/dist/index.js
DELETED
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
/*! For license information please see index.js.LICENSE.txt */
|
|
2
|
-
(()=>{var t={766:(t,e)=>{"use strict";e.byteLength=function(t){var e=u(t),n=e[0],r=e[1];return 3*(n+r)/4-r},e.toByteArray=function(t){var e,n,o=u(t),a=o[0],s=o[1],c=new i(function(t,e,n){return 3*(e+n)/4-n}(0,a,s)),l=0,f=s>0?a-4:a;for(n=0;n<f;n+=4)e=r[t.charCodeAt(n)]<<18|r[t.charCodeAt(n+1)]<<12|r[t.charCodeAt(n+2)]<<6|r[t.charCodeAt(n+3)],c[l++]=e>>16&255,c[l++]=e>>8&255,c[l++]=255&e;return 2===s&&(e=r[t.charCodeAt(n)]<<2|r[t.charCodeAt(n+1)]>>4,c[l++]=255&e),1===s&&(e=r[t.charCodeAt(n)]<<10|r[t.charCodeAt(n+1)]<<4|r[t.charCodeAt(n+2)]>>2,c[l++]=e>>8&255,c[l++]=255&e),c},e.fromByteArray=function(t){for(var e,r=t.length,i=r%3,o=[],a=16383,s=0,u=r-i;s<u;s+=a)o.push(c(t,s,s+a>u?u:s+a));return 1===i?(e=t[r-1],o.push(n[e>>2]+n[e<<4&63]+"==")):2===i&&(e=(t[r-2]<<8)+t[r-1],o.push(n[e>>10]+n[e>>4&63]+n[e<<2&63]+"=")),o.join("")};for(var n=[],r=[],i="undefined"!=typeof Uint8Array?Uint8Array:Array,o="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",a=0,s=o.length;a<s;++a)n[a]=o[a],r[o.charCodeAt(a)]=a;function u(t){var e=t.length;if(e%4>0)throw new Error("Invalid string. Length must be a multiple of 4");var n=t.indexOf("=");return-1===n&&(n=e),[n,n===e?0:4-n%4]}function c(t,e,r){for(var i,o,a=[],s=e;s<r;s+=3)i=(t[s]<<16&16711680)+(t[s+1]<<8&65280)+(255&t[s+2]),a.push(n[(o=i)>>18&63]+n[o>>12&63]+n[o>>6&63]+n[63&o]);return a.join("")}r["-".charCodeAt(0)]=62,r["_".charCodeAt(0)]=63},250:(t,e,n)=>{"use strict";const r=n(766),i=n(333),o="function"==typeof Symbol&&"function"==typeof Symbol.for?Symbol.for("nodejs.util.inspect.custom"):null;e.Buffer=u,e.SlowBuffer=function(t){return+t!=t&&(t=0),u.alloc(+t)},e.INSPECT_MAX_BYTES=50;const a=2147483647;function s(t){if(t>a)throw new RangeError('The value "'+t+'" is invalid for option "size"');const e=new Uint8Array(t);return Object.setPrototypeOf(e,u.prototype),e}function u(t,e,n){if("number"==typeof t){if("string"==typeof e)throw new TypeError('The "string" argument must be of type string. Received type number');return f(t)}return c(t,e,n)}function c(t,e,n){if("string"==typeof t)return function(t,e){if("string"==typeof e&&""!==e||(e="utf8"),!u.isEncoding(e))throw new TypeError("Unknown encoding: "+e);const n=0|g(t,e);let r=s(n);const i=r.write(t,e);return i!==n&&(r=r.slice(0,i)),r}(t,e);if(ArrayBuffer.isView(t))return function(t){if(H(t,Uint8Array)){const e=new Uint8Array(t);return d(e.buffer,e.byteOffset,e.byteLength)}return h(t)}(t);if(null==t)throw new TypeError("The first argument must be one of type string, Buffer, ArrayBuffer, Array, or Array-like Object. Received type "+typeof t);if(H(t,ArrayBuffer)||t&&H(t.buffer,ArrayBuffer))return d(t,e,n);if("undefined"!=typeof SharedArrayBuffer&&(H(t,SharedArrayBuffer)||t&&H(t.buffer,SharedArrayBuffer)))return d(t,e,n);if("number"==typeof t)throw new TypeError('The "value" argument must not be of type number. Received type number');const r=t.valueOf&&t.valueOf();if(null!=r&&r!==t)return u.from(r,e,n);const i=function(t){if(u.isBuffer(t)){const e=0|p(t.length),n=s(e);return 0===n.length||t.copy(n,0,0,e),n}return void 0!==t.length?"number"!=typeof t.length||Q(t.length)?s(0):h(t):"Buffer"===t.type&&Array.isArray(t.data)?h(t.data):void 0}(t);if(i)return i;if("undefined"!=typeof Symbol&&null!=Symbol.toPrimitive&&"function"==typeof t[Symbol.toPrimitive])return u.from(t[Symbol.toPrimitive]("string"),e,n);throw new TypeError("The first argument must be one of type string, Buffer, ArrayBuffer, Array, or Array-like Object. Received type "+typeof t)}function l(t){if("number"!=typeof t)throw new TypeError('"size" argument must be of type number');if(t<0)throw new RangeError('The value "'+t+'" is invalid for option "size"')}function f(t){return l(t),s(t<0?0:0|p(t))}function h(t){const e=t.length<0?0:0|p(t.length),n=s(e);for(let r=0;r<e;r+=1)n[r]=255&t[r];return n}function d(t,e,n){if(e<0||t.byteLength<e)throw new RangeError('"offset" is outside of buffer bounds');if(t.byteLength<e+(n||0))throw new RangeError('"length" is outside of buffer bounds');let r;return r=void 0===e&&void 0===n?new Uint8Array(t):void 0===n?new Uint8Array(t,e):new Uint8Array(t,e,n),Object.setPrototypeOf(r,u.prototype),r}function p(t){if(t>=a)throw new RangeError("Attempt to allocate Buffer larger than maximum size: 0x"+a.toString(16)+" bytes");return 0|t}function g(t,e){if(u.isBuffer(t))return t.length;if(ArrayBuffer.isView(t)||H(t,ArrayBuffer))return t.byteLength;if("string"!=typeof t)throw new TypeError('The "string" argument must be one of type string, Buffer, or ArrayBuffer. Received type '+typeof t);const n=t.length,r=arguments.length>2&&!0===arguments[2];if(!r&&0===n)return 0;let i=!1;for(;;)switch(e){case"ascii":case"latin1":case"binary":return n;case"utf8":case"utf-8":return Y(t).length;case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return 2*n;case"hex":return n>>>1;case"base64":return q(t).length;default:if(i)return r?-1:Y(t).length;e=(""+e).toLowerCase(),i=!0}}function m(t,e,n){let r=!1;if((void 0===e||e<0)&&(e=0),e>this.length)return"";if((void 0===n||n>this.length)&&(n=this.length),n<=0)return"";if((n>>>=0)<=(e>>>=0))return"";for(t||(t="utf8");;)switch(t){case"hex":return x(this,e,n);case"utf8":case"utf-8":return _(this,e,n);case"ascii":return C(this,e,n);case"latin1":case"binary":return O(this,e,n);case"base64":return I(this,e,n);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return S(this,e,n);default:if(r)throw new TypeError("Unknown encoding: "+t);t=(t+"").toLowerCase(),r=!0}}function y(t,e,n){const r=t[e];t[e]=t[n],t[n]=r}function v(t,e,n,r,i){if(0===t.length)return-1;if("string"==typeof n?(r=n,n=0):n>2147483647?n=2147483647:n<-2147483648&&(n=-2147483648),Q(n=+n)&&(n=i?0:t.length-1),n<0&&(n=t.length+n),n>=t.length){if(i)return-1;n=t.length-1}else if(n<0){if(!i)return-1;n=0}if("string"==typeof e&&(e=u.from(e,r)),u.isBuffer(e))return 0===e.length?-1:b(t,e,n,r,i);if("number"==typeof e)return e&=255,"function"==typeof Uint8Array.prototype.indexOf?i?Uint8Array.prototype.indexOf.call(t,e,n):Uint8Array.prototype.lastIndexOf.call(t,e,n):b(t,[e],n,r,i);throw new TypeError("val must be string, number or Buffer")}function b(t,e,n,r,i){let o,a=1,s=t.length,u=e.length;if(void 0!==r&&("ucs2"===(r=String(r).toLowerCase())||"ucs-2"===r||"utf16le"===r||"utf-16le"===r)){if(t.length<2||e.length<2)return-1;a=2,s/=2,u/=2,n/=2}function c(t,e){return 1===a?t[e]:t.readUInt16BE(e*a)}if(i){let r=-1;for(o=n;o<s;o++)if(c(t,o)===c(e,-1===r?0:o-r)){if(-1===r&&(r=o),o-r+1===u)return r*a}else-1!==r&&(o-=o-r),r=-1}else for(n+u>s&&(n=s-u),o=n;o>=0;o--){let n=!0;for(let r=0;r<u;r++)if(c(t,o+r)!==c(e,r)){n=!1;break}if(n)return o}return-1}function T(t,e,n,r){n=Number(n)||0;const i=t.length-n;r?(r=Number(r))>i&&(r=i):r=i;const o=e.length;let a;for(r>o/2&&(r=o/2),a=0;a<r;++a){const r=parseInt(e.substr(2*a,2),16);if(Q(r))return a;t[n+a]=r}return a}function E(t,e,n,r){return z(Y(e,t.length-n),t,n,r)}function w(t,e,n,r){return z(function(t){const e=[];for(let n=0;n<t.length;++n)e.push(255&t.charCodeAt(n));return e}(e),t,n,r)}function N(t,e,n,r){return z(q(e),t,n,r)}function A(t,e,n,r){return z(function(t,e){let n,r,i;const o=[];for(let a=0;a<t.length&&!((e-=2)<0);++a)n=t.charCodeAt(a),r=n>>8,i=n%256,o.push(i),o.push(r);return o}(e,t.length-n),t,n,r)}function I(t,e,n){return 0===e&&n===t.length?r.fromByteArray(t):r.fromByteArray(t.slice(e,n))}function _(t,e,n){n=Math.min(t.length,n);const r=[];let i=e;for(;i<n;){const e=t[i];let o=null,a=e>239?4:e>223?3:e>191?2:1;if(i+a<=n){let n,r,s,u;switch(a){case 1:e<128&&(o=e);break;case 2:n=t[i+1],128==(192&n)&&(u=(31&e)<<6|63&n,u>127&&(o=u));break;case 3:n=t[i+1],r=t[i+2],128==(192&n)&&128==(192&r)&&(u=(15&e)<<12|(63&n)<<6|63&r,u>2047&&(u<55296||u>57343)&&(o=u));break;case 4:n=t[i+1],r=t[i+2],s=t[i+3],128==(192&n)&&128==(192&r)&&128==(192&s)&&(u=(15&e)<<18|(63&n)<<12|(63&r)<<6|63&s,u>65535&&u<1114112&&(o=u))}}null===o?(o=65533,a=1):o>65535&&(o-=65536,r.push(o>>>10&1023|55296),o=56320|1023&o),r.push(o),i+=a}return function(t){const e=t.length;if(e<=B)return String.fromCharCode.apply(String,t);let n="",r=0;for(;r<e;)n+=String.fromCharCode.apply(String,t.slice(r,r+=B));return n}(r)}e.kMaxLength=a,u.TYPED_ARRAY_SUPPORT=function(){try{const t=new Uint8Array(1),e={foo:function(){return 42}};return Object.setPrototypeOf(e,Uint8Array.prototype),Object.setPrototypeOf(t,e),42===t.foo()}catch(t){return!1}}(),u.TYPED_ARRAY_SUPPORT||"undefined"==typeof console||"function"!=typeof console.error||console.error("This browser lacks typed array (Uint8Array) support which is required by `buffer` v5.x. Use `buffer` v4.x if you require old browser support."),Object.defineProperty(u.prototype,"parent",{enumerable:!0,get:function(){if(u.isBuffer(this))return this.buffer}}),Object.defineProperty(u.prototype,"offset",{enumerable:!0,get:function(){if(u.isBuffer(this))return this.byteOffset}}),u.poolSize=8192,u.from=function(t,e,n){return c(t,e,n)},Object.setPrototypeOf(u.prototype,Uint8Array.prototype),Object.setPrototypeOf(u,Uint8Array),u.alloc=function(t,e,n){return function(t,e,n){return l(t),t<=0?s(t):void 0!==e?"string"==typeof n?s(t).fill(e,n):s(t).fill(e):s(t)}(t,e,n)},u.allocUnsafe=function(t){return f(t)},u.allocUnsafeSlow=function(t){return f(t)},u.isBuffer=function(t){return null!=t&&!0===t._isBuffer&&t!==u.prototype},u.compare=function(t,e){if(H(t,Uint8Array)&&(t=u.from(t,t.offset,t.byteLength)),H(e,Uint8Array)&&(e=u.from(e,e.offset,e.byteLength)),!u.isBuffer(t)||!u.isBuffer(e))throw new TypeError('The "buf1", "buf2" arguments must be one of type Buffer or Uint8Array');if(t===e)return 0;let n=t.length,r=e.length;for(let i=0,o=Math.min(n,r);i<o;++i)if(t[i]!==e[i]){n=t[i],r=e[i];break}return n<r?-1:r<n?1:0},u.isEncoding=function(t){switch(String(t).toLowerCase()){case"hex":case"utf8":case"utf-8":case"ascii":case"latin1":case"binary":case"base64":case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return!0;default:return!1}},u.concat=function(t,e){if(!Array.isArray(t))throw new TypeError('"list" argument must be an Array of Buffers');if(0===t.length)return u.alloc(0);let n;if(void 0===e)for(e=0,n=0;n<t.length;++n)e+=t[n].length;const r=u.allocUnsafe(e);let i=0;for(n=0;n<t.length;++n){let e=t[n];if(H(e,Uint8Array))i+e.length>r.length?(u.isBuffer(e)||(e=u.from(e)),e.copy(r,i)):Uint8Array.prototype.set.call(r,e,i);else{if(!u.isBuffer(e))throw new TypeError('"list" argument must be an Array of Buffers');e.copy(r,i)}i+=e.length}return r},u.byteLength=g,u.prototype._isBuffer=!0,u.prototype.swap16=function(){const t=this.length;if(t%2!=0)throw new RangeError("Buffer size must be a multiple of 16-bits");for(let e=0;e<t;e+=2)y(this,e,e+1);return this},u.prototype.swap32=function(){const t=this.length;if(t%4!=0)throw new RangeError("Buffer size must be a multiple of 32-bits");for(let e=0;e<t;e+=4)y(this,e,e+3),y(this,e+1,e+2);return this},u.prototype.swap64=function(){const t=this.length;if(t%8!=0)throw new RangeError("Buffer size must be a multiple of 64-bits");for(let e=0;e<t;e+=8)y(this,e,e+7),y(this,e+1,e+6),y(this,e+2,e+5),y(this,e+3,e+4);return this},u.prototype.toString=function(){const t=this.length;return 0===t?"":0===arguments.length?_(this,0,t):m.apply(this,arguments)},u.prototype.toLocaleString=u.prototype.toString,u.prototype.equals=function(t){if(!u.isBuffer(t))throw new TypeError("Argument must be a Buffer");return this===t||0===u.compare(this,t)},u.prototype.inspect=function(){let t="";const n=e.INSPECT_MAX_BYTES;return t=this.toString("hex",0,n).replace(/(.{2})/g,"$1 ").trim(),this.length>n&&(t+=" ... "),"<Buffer "+t+">"},o&&(u.prototype[o]=u.prototype.inspect),u.prototype.compare=function(t,e,n,r,i){if(H(t,Uint8Array)&&(t=u.from(t,t.offset,t.byteLength)),!u.isBuffer(t))throw new TypeError('The "target" argument must be one of type Buffer or Uint8Array. Received type '+typeof t);if(void 0===e&&(e=0),void 0===n&&(n=t?t.length:0),void 0===r&&(r=0),void 0===i&&(i=this.length),e<0||n>t.length||r<0||i>this.length)throw new RangeError("out of range index");if(r>=i&&e>=n)return 0;if(r>=i)return-1;if(e>=n)return 1;if(this===t)return 0;let o=(i>>>=0)-(r>>>=0),a=(n>>>=0)-(e>>>=0);const s=Math.min(o,a),c=this.slice(r,i),l=t.slice(e,n);for(let t=0;t<s;++t)if(c[t]!==l[t]){o=c[t],a=l[t];break}return o<a?-1:a<o?1:0},u.prototype.includes=function(t,e,n){return-1!==this.indexOf(t,e,n)},u.prototype.indexOf=function(t,e,n){return v(this,t,e,n,!0)},u.prototype.lastIndexOf=function(t,e,n){return v(this,t,e,n,!1)},u.prototype.write=function(t,e,n,r){if(void 0===e)r="utf8",n=this.length,e=0;else if(void 0===n&&"string"==typeof e)r=e,n=this.length,e=0;else{if(!isFinite(e))throw new Error("Buffer.write(string, encoding, offset[, length]) is no longer supported");e>>>=0,isFinite(n)?(n>>>=0,void 0===r&&(r="utf8")):(r=n,n=void 0)}const i=this.length-e;if((void 0===n||n>i)&&(n=i),t.length>0&&(n<0||e<0)||e>this.length)throw new RangeError("Attempt to write outside buffer bounds");r||(r="utf8");let o=!1;for(;;)switch(r){case"hex":return T(this,t,e,n);case"utf8":case"utf-8":return E(this,t,e,n);case"ascii":case"latin1":case"binary":return w(this,t,e,n);case"base64":return N(this,t,e,n);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return A(this,t,e,n);default:if(o)throw new TypeError("Unknown encoding: "+r);r=(""+r).toLowerCase(),o=!0}},u.prototype.toJSON=function(){return{type:"Buffer",data:Array.prototype.slice.call(this._arr||this,0)}};const B=4096;function C(t,e,n){let r="";n=Math.min(t.length,n);for(let i=e;i<n;++i)r+=String.fromCharCode(127&t[i]);return r}function O(t,e,n){let r="";n=Math.min(t.length,n);for(let i=e;i<n;++i)r+=String.fromCharCode(t[i]);return r}function x(t,e,n){const r=t.length;(!e||e<0)&&(e=0),(!n||n<0||n>r)&&(n=r);let i="";for(let r=e;r<n;++r)i+=Z[t[r]];return i}function S(t,e,n){const r=t.slice(e,n);let i="";for(let t=0;t<r.length-1;t+=2)i+=String.fromCharCode(r[t]+256*r[t+1]);return i}function U(t,e,n){if(t%1!=0||t<0)throw new RangeError("offset is not uint");if(t+e>n)throw new RangeError("Trying to access beyond buffer length")}function D(t,e,n,r,i,o){if(!u.isBuffer(t))throw new TypeError('"buffer" argument must be a Buffer instance');if(e>i||e<o)throw new RangeError('"value" argument is out of bounds');if(n+r>t.length)throw new RangeError("Index out of range")}function P(t,e,n,r,i){k(e,r,i,t,n,7);let o=Number(e&BigInt(4294967295));t[n++]=o,o>>=8,t[n++]=o,o>>=8,t[n++]=o,o>>=8,t[n++]=o;let a=Number(e>>BigInt(32)&BigInt(4294967295));return t[n++]=a,a>>=8,t[n++]=a,a>>=8,t[n++]=a,a>>=8,t[n++]=a,n}function R(t,e,n,r,i){k(e,r,i,t,n,7);let o=Number(e&BigInt(4294967295));t[n+7]=o,o>>=8,t[n+6]=o,o>>=8,t[n+5]=o,o>>=8,t[n+4]=o;let a=Number(e>>BigInt(32)&BigInt(4294967295));return t[n+3]=a,a>>=8,t[n+2]=a,a>>=8,t[n+1]=a,a>>=8,t[n]=a,n+8}function L(t,e,n,r,i,o){if(n+r>t.length)throw new RangeError("Index out of range");if(n<0)throw new RangeError("Index out of range")}function F(t,e,n,r,o){return e=+e,n>>>=0,o||L(t,0,n,4),i.write(t,e,n,r,23,4),n+4}function M(t,e,n,r,o){return e=+e,n>>>=0,o||L(t,0,n,8),i.write(t,e,n,r,52,8),n+8}u.prototype.slice=function(t,e){const n=this.length;(t=~~t)<0?(t+=n)<0&&(t=0):t>n&&(t=n),(e=void 0===e?n:~~e)<0?(e+=n)<0&&(e=0):e>n&&(e=n),e<t&&(e=t);const r=this.subarray(t,e);return Object.setPrototypeOf(r,u.prototype),r},u.prototype.readUintLE=u.prototype.readUIntLE=function(t,e,n){t>>>=0,e>>>=0,n||U(t,e,this.length);let r=this[t],i=1,o=0;for(;++o<e&&(i*=256);)r+=this[t+o]*i;return r},u.prototype.readUintBE=u.prototype.readUIntBE=function(t,e,n){t>>>=0,e>>>=0,n||U(t,e,this.length);let r=this[t+--e],i=1;for(;e>0&&(i*=256);)r+=this[t+--e]*i;return r},u.prototype.readUint8=u.prototype.readUInt8=function(t,e){return t>>>=0,e||U(t,1,this.length),this[t]},u.prototype.readUint16LE=u.prototype.readUInt16LE=function(t,e){return t>>>=0,e||U(t,2,this.length),this[t]|this[t+1]<<8},u.prototype.readUint16BE=u.prototype.readUInt16BE=function(t,e){return t>>>=0,e||U(t,2,this.length),this[t]<<8|this[t+1]},u.prototype.readUint32LE=u.prototype.readUInt32LE=function(t,e){return t>>>=0,e||U(t,4,this.length),(this[t]|this[t+1]<<8|this[t+2]<<16)+16777216*this[t+3]},u.prototype.readUint32BE=u.prototype.readUInt32BE=function(t,e){return t>>>=0,e||U(t,4,this.length),16777216*this[t]+(this[t+1]<<16|this[t+2]<<8|this[t+3])},u.prototype.readBigUInt64LE=J((function(t){W(t>>>=0,"offset");const e=this[t],n=this[t+7];void 0!==e&&void 0!==n||V(t,this.length-8);const r=e+256*this[++t]+65536*this[++t]+this[++t]*2**24,i=this[++t]+256*this[++t]+65536*this[++t]+n*2**24;return BigInt(r)+(BigInt(i)<<BigInt(32))})),u.prototype.readBigUInt64BE=J((function(t){W(t>>>=0,"offset");const e=this[t],n=this[t+7];void 0!==e&&void 0!==n||V(t,this.length-8);const r=e*2**24+65536*this[++t]+256*this[++t]+this[++t],i=this[++t]*2**24+65536*this[++t]+256*this[++t]+n;return(BigInt(r)<<BigInt(32))+BigInt(i)})),u.prototype.readIntLE=function(t,e,n){t>>>=0,e>>>=0,n||U(t,e,this.length);let r=this[t],i=1,o=0;for(;++o<e&&(i*=256);)r+=this[t+o]*i;return i*=128,r>=i&&(r-=Math.pow(2,8*e)),r},u.prototype.readIntBE=function(t,e,n){t>>>=0,e>>>=0,n||U(t,e,this.length);let r=e,i=1,o=this[t+--r];for(;r>0&&(i*=256);)o+=this[t+--r]*i;return i*=128,o>=i&&(o-=Math.pow(2,8*e)),o},u.prototype.readInt8=function(t,e){return t>>>=0,e||U(t,1,this.length),128&this[t]?-1*(255-this[t]+1):this[t]},u.prototype.readInt16LE=function(t,e){t>>>=0,e||U(t,2,this.length);const n=this[t]|this[t+1]<<8;return 32768&n?4294901760|n:n},u.prototype.readInt16BE=function(t,e){t>>>=0,e||U(t,2,this.length);const n=this[t+1]|this[t]<<8;return 32768&n?4294901760|n:n},u.prototype.readInt32LE=function(t,e){return t>>>=0,e||U(t,4,this.length),this[t]|this[t+1]<<8|this[t+2]<<16|this[t+3]<<24},u.prototype.readInt32BE=function(t,e){return t>>>=0,e||U(t,4,this.length),this[t]<<24|this[t+1]<<16|this[t+2]<<8|this[t+3]},u.prototype.readBigInt64LE=J((function(t){W(t>>>=0,"offset");const e=this[t],n=this[t+7];void 0!==e&&void 0!==n||V(t,this.length-8);const r=this[t+4]+256*this[t+5]+65536*this[t+6]+(n<<24);return(BigInt(r)<<BigInt(32))+BigInt(e+256*this[++t]+65536*this[++t]+this[++t]*2**24)})),u.prototype.readBigInt64BE=J((function(t){W(t>>>=0,"offset");const e=this[t],n=this[t+7];void 0!==e&&void 0!==n||V(t,this.length-8);const r=(e<<24)+65536*this[++t]+256*this[++t]+this[++t];return(BigInt(r)<<BigInt(32))+BigInt(this[++t]*2**24+65536*this[++t]+256*this[++t]+n)})),u.prototype.readFloatLE=function(t,e){return t>>>=0,e||U(t,4,this.length),i.read(this,t,!0,23,4)},u.prototype.readFloatBE=function(t,e){return t>>>=0,e||U(t,4,this.length),i.read(this,t,!1,23,4)},u.prototype.readDoubleLE=function(t,e){return t>>>=0,e||U(t,8,this.length),i.read(this,t,!0,52,8)},u.prototype.readDoubleBE=function(t,e){return t>>>=0,e||U(t,8,this.length),i.read(this,t,!1,52,8)},u.prototype.writeUintLE=u.prototype.writeUIntLE=function(t,e,n,r){t=+t,e>>>=0,n>>>=0,r||D(this,t,e,n,Math.pow(2,8*n)-1,0);let i=1,o=0;for(this[e]=255&t;++o<n&&(i*=256);)this[e+o]=t/i&255;return e+n},u.prototype.writeUintBE=u.prototype.writeUIntBE=function(t,e,n,r){t=+t,e>>>=0,n>>>=0,r||D(this,t,e,n,Math.pow(2,8*n)-1,0);let i=n-1,o=1;for(this[e+i]=255&t;--i>=0&&(o*=256);)this[e+i]=t/o&255;return e+n},u.prototype.writeUint8=u.prototype.writeUInt8=function(t,e,n){return t=+t,e>>>=0,n||D(this,t,e,1,255,0),this[e]=255&t,e+1},u.prototype.writeUint16LE=u.prototype.writeUInt16LE=function(t,e,n){return t=+t,e>>>=0,n||D(this,t,e,2,65535,0),this[e]=255&t,this[e+1]=t>>>8,e+2},u.prototype.writeUint16BE=u.prototype.writeUInt16BE=function(t,e,n){return t=+t,e>>>=0,n||D(this,t,e,2,65535,0),this[e]=t>>>8,this[e+1]=255&t,e+2},u.prototype.writeUint32LE=u.prototype.writeUInt32LE=function(t,e,n){return t=+t,e>>>=0,n||D(this,t,e,4,4294967295,0),this[e+3]=t>>>24,this[e+2]=t>>>16,this[e+1]=t>>>8,this[e]=255&t,e+4},u.prototype.writeUint32BE=u.prototype.writeUInt32BE=function(t,e,n){return t=+t,e>>>=0,n||D(this,t,e,4,4294967295,0),this[e]=t>>>24,this[e+1]=t>>>16,this[e+2]=t>>>8,this[e+3]=255&t,e+4},u.prototype.writeBigUInt64LE=J((function(t,e=0){return P(this,t,e,BigInt(0),BigInt("0xffffffffffffffff"))})),u.prototype.writeBigUInt64BE=J((function(t,e=0){return R(this,t,e,BigInt(0),BigInt("0xffffffffffffffff"))})),u.prototype.writeIntLE=function(t,e,n,r){if(t=+t,e>>>=0,!r){const r=Math.pow(2,8*n-1);D(this,t,e,n,r-1,-r)}let i=0,o=1,a=0;for(this[e]=255&t;++i<n&&(o*=256);)t<0&&0===a&&0!==this[e+i-1]&&(a=1),this[e+i]=(t/o>>0)-a&255;return e+n},u.prototype.writeIntBE=function(t,e,n,r){if(t=+t,e>>>=0,!r){const r=Math.pow(2,8*n-1);D(this,t,e,n,r-1,-r)}let i=n-1,o=1,a=0;for(this[e+i]=255&t;--i>=0&&(o*=256);)t<0&&0===a&&0!==this[e+i+1]&&(a=1),this[e+i]=(t/o>>0)-a&255;return e+n},u.prototype.writeInt8=function(t,e,n){return t=+t,e>>>=0,n||D(this,t,e,1,127,-128),t<0&&(t=255+t+1),this[e]=255&t,e+1},u.prototype.writeInt16LE=function(t,e,n){return t=+t,e>>>=0,n||D(this,t,e,2,32767,-32768),this[e]=255&t,this[e+1]=t>>>8,e+2},u.prototype.writeInt16BE=function(t,e,n){return t=+t,e>>>=0,n||D(this,t,e,2,32767,-32768),this[e]=t>>>8,this[e+1]=255&t,e+2},u.prototype.writeInt32LE=function(t,e,n){return t=+t,e>>>=0,n||D(this,t,e,4,2147483647,-2147483648),this[e]=255&t,this[e+1]=t>>>8,this[e+2]=t>>>16,this[e+3]=t>>>24,e+4},u.prototype.writeInt32BE=function(t,e,n){return t=+t,e>>>=0,n||D(this,t,e,4,2147483647,-2147483648),t<0&&(t=4294967295+t+1),this[e]=t>>>24,this[e+1]=t>>>16,this[e+2]=t>>>8,this[e+3]=255&t,e+4},u.prototype.writeBigInt64LE=J((function(t,e=0){return P(this,t,e,-BigInt("0x8000000000000000"),BigInt("0x7fffffffffffffff"))})),u.prototype.writeBigInt64BE=J((function(t,e=0){return R(this,t,e,-BigInt("0x8000000000000000"),BigInt("0x7fffffffffffffff"))})),u.prototype.writeFloatLE=function(t,e,n){return F(this,t,e,!0,n)},u.prototype.writeFloatBE=function(t,e,n){return F(this,t,e,!1,n)},u.prototype.writeDoubleLE=function(t,e,n){return M(this,t,e,!0,n)},u.prototype.writeDoubleBE=function(t,e,n){return M(this,t,e,!1,n)},u.prototype.copy=function(t,e,n,r){if(!u.isBuffer(t))throw new TypeError("argument should be a Buffer");if(n||(n=0),r||0===r||(r=this.length),e>=t.length&&(e=t.length),e||(e=0),r>0&&r<n&&(r=n),r===n)return 0;if(0===t.length||0===this.length)return 0;if(e<0)throw new RangeError("targetStart out of bounds");if(n<0||n>=this.length)throw new RangeError("Index out of range");if(r<0)throw new RangeError("sourceEnd out of bounds");r>this.length&&(r=this.length),t.length-e<r-n&&(r=t.length-e+n);const i=r-n;return this===t&&"function"==typeof Uint8Array.prototype.copyWithin?this.copyWithin(e,n,r):Uint8Array.prototype.set.call(t,this.subarray(n,r),e),i},u.prototype.fill=function(t,e,n,r){if("string"==typeof t){if("string"==typeof e?(r=e,e=0,n=this.length):"string"==typeof n&&(r=n,n=this.length),void 0!==r&&"string"!=typeof r)throw new TypeError("encoding must be a string");if("string"==typeof r&&!u.isEncoding(r))throw new TypeError("Unknown encoding: "+r);if(1===t.length){const e=t.charCodeAt(0);("utf8"===r&&e<128||"latin1"===r)&&(t=e)}}else"number"==typeof t?t&=255:"boolean"==typeof t&&(t=Number(t));if(e<0||this.length<e||this.length<n)throw new RangeError("Out of range index");if(n<=e)return this;let i;if(e>>>=0,n=void 0===n?this.length:n>>>0,t||(t=0),"number"==typeof t)for(i=e;i<n;++i)this[i]=t;else{const o=u.isBuffer(t)?t:u.from(t,r),a=o.length;if(0===a)throw new TypeError('The value "'+t+'" is invalid for argument "value"');for(i=0;i<n-e;++i)this[i+e]=o[i%a]}return this};const $={};function j(t,e,n){$[t]=class extends n{constructor(){super(),Object.defineProperty(this,"message",{value:e.apply(this,arguments),writable:!0,configurable:!0}),this.name=`${this.name} [${t}]`,this.stack,delete this.name}get code(){return t}set code(t){Object.defineProperty(this,"code",{configurable:!0,enumerable:!0,value:t,writable:!0})}toString(){return`${this.name} [${t}]: ${this.message}`}}}function G(t){let e="",n=t.length;const r="-"===t[0]?1:0;for(;n>=r+4;n-=3)e=`_${t.slice(n-3,n)}${e}`;return`${t.slice(0,n)}${e}`}function k(t,e,n,r,i,o){if(t>n||t<e){const r="bigint"==typeof e?"n":"";let i;throw i=o>3?0===e||e===BigInt(0)?`>= 0${r} and < 2${r} ** ${8*(o+1)}${r}`:`>= -(2${r} ** ${8*(o+1)-1}${r}) and < 2 ** ${8*(o+1)-1}${r}`:`>= ${e}${r} and <= ${n}${r}`,new $.ERR_OUT_OF_RANGE("value",i,t)}!function(t,e,n){W(e,"offset"),void 0!==t[e]&&void 0!==t[e+n]||V(e,t.length-(n+1))}(r,i,o)}function W(t,e){if("number"!=typeof t)throw new $.ERR_INVALID_ARG_TYPE(e,"number",t)}function V(t,e,n){if(Math.floor(t)!==t)throw W(t,n),new $.ERR_OUT_OF_RANGE(n||"offset","an integer",t);if(e<0)throw new $.ERR_BUFFER_OUT_OF_BOUNDS;throw new $.ERR_OUT_OF_RANGE(n||"offset",`>= ${n?1:0} and <= ${e}`,t)}j("ERR_BUFFER_OUT_OF_BOUNDS",(function(t){return t?`${t} is outside of buffer bounds`:"Attempt to access memory outside buffer bounds"}),RangeError),j("ERR_INVALID_ARG_TYPE",(function(t,e){return`The "${t}" argument must be of type number. Received type ${typeof e}`}),TypeError),j("ERR_OUT_OF_RANGE",(function(t,e,n){let r=`The value of "${t}" is out of range.`,i=n;return Number.isInteger(n)&&Math.abs(n)>2**32?i=G(String(n)):"bigint"==typeof n&&(i=String(n),(n>BigInt(2)**BigInt(32)||n<-(BigInt(2)**BigInt(32)))&&(i=G(i)),i+="n"),r+=` It must be ${e}. Received ${i}`,r}),RangeError);const X=/[^+/0-9A-Za-z-_]/g;function Y(t,e){let n;e=e||1/0;const r=t.length;let i=null;const o=[];for(let a=0;a<r;++a){if(n=t.charCodeAt(a),n>55295&&n<57344){if(!i){if(n>56319){(e-=3)>-1&&o.push(239,191,189);continue}if(a+1===r){(e-=3)>-1&&o.push(239,191,189);continue}i=n;continue}if(n<56320){(e-=3)>-1&&o.push(239,191,189),i=n;continue}n=65536+(i-55296<<10|n-56320)}else i&&(e-=3)>-1&&o.push(239,191,189);if(i=null,n<128){if((e-=1)<0)break;o.push(n)}else if(n<2048){if((e-=2)<0)break;o.push(n>>6|192,63&n|128)}else if(n<65536){if((e-=3)<0)break;o.push(n>>12|224,n>>6&63|128,63&n|128)}else{if(!(n<1114112))throw new Error("Invalid code point");if((e-=4)<0)break;o.push(n>>18|240,n>>12&63|128,n>>6&63|128,63&n|128)}}return o}function q(t){return r.toByteArray(function(t){if((t=(t=t.split("=")[0]).trim().replace(X,"")).length<2)return"";for(;t.length%4!=0;)t+="=";return t}(t))}function z(t,e,n,r){let i;for(i=0;i<r&&!(i+n>=e.length||i>=t.length);++i)e[i+n]=t[i];return i}function H(t,e){return t instanceof e||null!=t&&null!=t.constructor&&null!=t.constructor.name&&t.constructor.name===e.name}function Q(t){return t!=t}const Z=function(){const t="0123456789abcdef",e=new Array(256);for(let n=0;n<16;++n){const r=16*n;for(let i=0;i<16;++i)e[r+i]=t[n]+t[i]}return e}();function J(t){return"undefined"==typeof BigInt?K:t}function K(){throw new Error("BigInt not supported")}},333:(t,e)=>{e.read=function(t,e,n,r,i){var o,a,s=8*i-r-1,u=(1<<s)-1,c=u>>1,l=-7,f=n?i-1:0,h=n?-1:1,d=t[e+f];for(f+=h,o=d&(1<<-l)-1,d>>=-l,l+=s;l>0;o=256*o+t[e+f],f+=h,l-=8);for(a=o&(1<<-l)-1,o>>=-l,l+=r;l>0;a=256*a+t[e+f],f+=h,l-=8);if(0===o)o=1-c;else{if(o===u)return a?NaN:1/0*(d?-1:1);a+=Math.pow(2,r),o-=c}return(d?-1:1)*a*Math.pow(2,o-r)},e.write=function(t,e,n,r,i,o){var a,s,u,c=8*o-i-1,l=(1<<c)-1,f=l>>1,h=23===i?Math.pow(2,-24)-Math.pow(2,-77):0,d=r?0:o-1,p=r?1:-1,g=e<0||0===e&&1/e<0?1:0;for(e=Math.abs(e),isNaN(e)||e===1/0?(s=isNaN(e)?1:0,a=l):(a=Math.floor(Math.log(e)/Math.LN2),e*(u=Math.pow(2,-a))<1&&(a--,u*=2),(e+=a+f>=1?h/u:h*Math.pow(2,1-f))*u>=2&&(a++,u/=2),a+f>=l?(s=0,a=l):a+f>=1?(s=(e*u-1)*Math.pow(2,i),a+=f):(s=e*Math.pow(2,f-1)*Math.pow(2,i),a=0));i>=8;t[n+d]=255&s,d+=p,s/=256,i-=8);for(a=a<<i|s,c+=i;c>0;t[n+d]=255&a,d+=p,a/=256,c-=8);t[n+d-p]|=128*g}},834:(t,e,n)=>{var r=n(250),i=r.Buffer;function o(t,e){for(var n in t)e[n]=t[n]}function a(t,e,n){return i(t,e,n)}i.from&&i.alloc&&i.allocUnsafe&&i.allocUnsafeSlow?t.exports=r:(o(r,e),e.Buffer=a),a.prototype=Object.create(i.prototype),o(i,a),a.from=function(t,e,n){if("number"==typeof t)throw new TypeError("Argument must not be a number");return i(t,e,n)},a.alloc=function(t,e,n){if("number"!=typeof t)throw new TypeError("Argument must be a number");var r=i(t);return void 0!==e?"string"==typeof n?r.fill(e,n):r.fill(e):r.fill(0),r},a.allocUnsafe=function(t){if("number"!=typeof t)throw new TypeError("Argument must be a number");return i(t)},a.allocUnsafeSlow=function(t){if("number"!=typeof t)throw new TypeError("Argument must be a number");return r.SlowBuffer(t)}},480:(t,e,n)=>{!function(t){t.parser=function(t,e){return new i(t,e)},t.SAXParser=i,t.SAXStream=a,t.createStream=function(t,e){return new a(t,e)},t.MAX_BUFFER_LENGTH=65536;var e,r=["comment","sgmlDecl","textNode","tagName","doctype","procInstName","procInstBody","entity","attribName","attribValue","cdata","script"];function i(e,n){if(!(this instanceof i))return new i(e,n);var o=this;!function(t){for(var e=0,n=r.length;e<n;e++)t[r[e]]=""}(o),o.q=o.c="",o.bufferCheckPosition=t.MAX_BUFFER_LENGTH,o.opt=n||{},o.opt.lowercase=o.opt.lowercase||o.opt.lowercasetags,o.looseCase=o.opt.lowercase?"toLowerCase":"toUpperCase",o.tags=[],o.closed=o.closedRoot=o.sawRoot=!1,o.tag=o.error=null,o.strict=!!e,o.noscript=!(!e&&!o.opt.noscript),o.state=w.BEGIN,o.strictEntities=o.opt.strictEntities,o.ENTITIES=o.strictEntities?Object.create(t.XML_ENTITIES):Object.create(t.ENTITIES),o.attribList=[],o.opt.xmlns&&(o.ns=Object.create(c)),o.trackPosition=!1!==o.opt.position,o.trackPosition&&(o.position=o.line=o.column=0),A(o,"onready")}t.EVENTS=["text","processinginstruction","sgmldeclaration","doctype","comment","opentagstart","attribute","opentag","closetag","opencdata","cdata","closecdata","error","end","ready","script","opennamespace","closenamespace"],Object.create||(Object.create=function(t){function e(){}return e.prototype=t,new e}),Object.keys||(Object.keys=function(t){var e=[];for(var n in t)t.hasOwnProperty(n)&&e.push(n);return e}),i.prototype={end:function(){O(this)},write:function(e){var n=this;if(this.error)throw this.error;if(n.closed)return C(n,"Cannot write after close. Assign an onready handler.");if(null===e)return O(n);"object"==typeof e&&(e=e.toString());for(var i=0,o="";o=M(e,i++),n.c=o,o;)switch(n.trackPosition&&(n.position++,"\n"===o?(n.line++,n.column=0):n.column++),n.state){case w.BEGIN:if(n.state=w.BEGIN_WHITESPACE,"\ufeff"===o)continue;F(n,o);continue;case w.BEGIN_WHITESPACE:F(n,o);continue;case w.TEXT:if(n.sawRoot&&!n.closedRoot){for(var a=i-1;o&&"<"!==o&&"&"!==o;)(o=M(e,i++))&&n.trackPosition&&(n.position++,"\n"===o?(n.line++,n.column=0):n.column++);n.textNode+=e.substring(a,i-1)}"<"!==o||n.sawRoot&&n.closedRoot&&!n.strict?(p(o)||n.sawRoot&&!n.closedRoot||x(n,"Text data outside of root node."),"&"===o?n.state=w.TEXT_ENTITY:n.textNode+=o):(n.state=w.OPEN_WAKA,n.startTagPosition=n.position);continue;case w.SCRIPT:"<"===o?n.state=w.SCRIPT_ENDING:n.script+=o;continue;case w.SCRIPT_ENDING:"/"===o?n.state=w.CLOSE_TAG:(n.script+="<"+o,n.state=w.SCRIPT);continue;case w.OPEN_WAKA:if("!"===o)n.state=w.SGML_DECL,n.sgmlDecl="";else if(p(o));else if(y(l,o))n.state=w.OPEN_TAG,n.tagName=o;else if("/"===o)n.state=w.CLOSE_TAG,n.tagName="";else if("?"===o)n.state=w.PROC_INST,n.procInstName=n.procInstBody="";else{if(x(n,"Unencoded <"),n.startTagPosition+1<n.position){var s=n.position-n.startTagPosition;o=new Array(s).join(" ")+o}n.textNode+="<"+o,n.state=w.TEXT}continue;case w.SGML_DECL:"[CDATA["===(n.sgmlDecl+o).toUpperCase()?(I(n,"onopencdata"),n.state=w.CDATA,n.sgmlDecl="",n.cdata=""):n.sgmlDecl+o==="--"?(n.state=w.COMMENT,n.comment="",n.sgmlDecl=""):"DOCTYPE"===(n.sgmlDecl+o).toUpperCase()?(n.state=w.DOCTYPE,(n.doctype||n.sawRoot)&&x(n,"Inappropriately located doctype declaration"),n.doctype="",n.sgmlDecl=""):">"===o?(I(n,"onsgmldeclaration",n.sgmlDecl),n.sgmlDecl="",n.state=w.TEXT):g(o)?(n.state=w.SGML_DECL_QUOTED,n.sgmlDecl+=o):n.sgmlDecl+=o;continue;case w.SGML_DECL_QUOTED:o===n.q&&(n.state=w.SGML_DECL,n.q=""),n.sgmlDecl+=o;continue;case w.DOCTYPE:">"===o?(n.state=w.TEXT,I(n,"ondoctype",n.doctype),n.doctype=!0):(n.doctype+=o,"["===o?n.state=w.DOCTYPE_DTD:g(o)&&(n.state=w.DOCTYPE_QUOTED,n.q=o));continue;case w.DOCTYPE_QUOTED:n.doctype+=o,o===n.q&&(n.q="",n.state=w.DOCTYPE);continue;case w.DOCTYPE_DTD:n.doctype+=o,"]"===o?n.state=w.DOCTYPE:g(o)&&(n.state=w.DOCTYPE_DTD_QUOTED,n.q=o);continue;case w.DOCTYPE_DTD_QUOTED:n.doctype+=o,o===n.q&&(n.state=w.DOCTYPE_DTD,n.q="");continue;case w.COMMENT:"-"===o?n.state=w.COMMENT_ENDING:n.comment+=o;continue;case w.COMMENT_ENDING:"-"===o?(n.state=w.COMMENT_ENDED,n.comment=B(n.opt,n.comment),n.comment&&I(n,"oncomment",n.comment),n.comment=""):(n.comment+="-"+o,n.state=w.COMMENT);continue;case w.COMMENT_ENDED:">"!==o?(x(n,"Malformed comment"),n.comment+="--"+o,n.state=w.COMMENT):n.state=w.TEXT;continue;case w.CDATA:"]"===o?n.state=w.CDATA_ENDING:n.cdata+=o;continue;case w.CDATA_ENDING:"]"===o?n.state=w.CDATA_ENDING_2:(n.cdata+="]"+o,n.state=w.CDATA);continue;case w.CDATA_ENDING_2:">"===o?(n.cdata&&I(n,"oncdata",n.cdata),I(n,"onclosecdata"),n.cdata="",n.state=w.TEXT):"]"===o?n.cdata+="]":(n.cdata+="]]"+o,n.state=w.CDATA);continue;case w.PROC_INST:"?"===o?n.state=w.PROC_INST_ENDING:p(o)?n.state=w.PROC_INST_BODY:n.procInstName+=o;continue;case w.PROC_INST_BODY:if(!n.procInstBody&&p(o))continue;"?"===o?n.state=w.PROC_INST_ENDING:n.procInstBody+=o;continue;case w.PROC_INST_ENDING:">"===o?(I(n,"onprocessinginstruction",{name:n.procInstName,body:n.procInstBody}),n.procInstName=n.procInstBody="",n.state=w.TEXT):(n.procInstBody+="?"+o,n.state=w.PROC_INST_BODY);continue;case w.OPEN_TAG:y(f,o)?n.tagName+=o:(S(n),">"===o?P(n):"/"===o?n.state=w.OPEN_TAG_SLASH:(p(o)||x(n,"Invalid character in tag name"),n.state=w.ATTRIB));continue;case w.OPEN_TAG_SLASH:">"===o?(P(n,!0),R(n)):(x(n,"Forward-slash in opening tag not followed by >"),n.state=w.ATTRIB);continue;case w.ATTRIB:if(p(o))continue;">"===o?P(n):"/"===o?n.state=w.OPEN_TAG_SLASH:y(l,o)?(n.attribName=o,n.attribValue="",n.state=w.ATTRIB_NAME):x(n,"Invalid attribute name");continue;case w.ATTRIB_NAME:"="===o?n.state=w.ATTRIB_VALUE:">"===o?(x(n,"Attribute without value"),n.attribValue=n.attribName,D(n),P(n)):p(o)?n.state=w.ATTRIB_NAME_SAW_WHITE:y(f,o)?n.attribName+=o:x(n,"Invalid attribute name");continue;case w.ATTRIB_NAME_SAW_WHITE:if("="===o)n.state=w.ATTRIB_VALUE;else{if(p(o))continue;x(n,"Attribute without value"),n.tag.attributes[n.attribName]="",n.attribValue="",I(n,"onattribute",{name:n.attribName,value:""}),n.attribName="",">"===o?P(n):y(l,o)?(n.attribName=o,n.state=w.ATTRIB_NAME):(x(n,"Invalid attribute name"),n.state=w.ATTRIB)}continue;case w.ATTRIB_VALUE:if(p(o))continue;g(o)?(n.q=o,n.state=w.ATTRIB_VALUE_QUOTED):(x(n,"Unquoted attribute value"),n.state=w.ATTRIB_VALUE_UNQUOTED,n.attribValue=o);continue;case w.ATTRIB_VALUE_QUOTED:if(o!==n.q){"&"===o?n.state=w.ATTRIB_VALUE_ENTITY_Q:n.attribValue+=o;continue}D(n),n.q="",n.state=w.ATTRIB_VALUE_CLOSED;continue;case w.ATTRIB_VALUE_CLOSED:p(o)?n.state=w.ATTRIB:">"===o?P(n):"/"===o?n.state=w.OPEN_TAG_SLASH:y(l,o)?(x(n,"No whitespace between attributes"),n.attribName=o,n.attribValue="",n.state=w.ATTRIB_NAME):x(n,"Invalid attribute name");continue;case w.ATTRIB_VALUE_UNQUOTED:if(!m(o)){"&"===o?n.state=w.ATTRIB_VALUE_ENTITY_U:n.attribValue+=o;continue}D(n),">"===o?P(n):n.state=w.ATTRIB;continue;case w.CLOSE_TAG:if(n.tagName)">"===o?R(n):y(f,o)?n.tagName+=o:n.script?(n.script+="</"+n.tagName,n.tagName="",n.state=w.SCRIPT):(p(o)||x(n,"Invalid tagname in closing tag"),n.state=w.CLOSE_TAG_SAW_WHITE);else{if(p(o))continue;v(l,o)?n.script?(n.script+="</"+o,n.state=w.SCRIPT):x(n,"Invalid tagname in closing tag."):n.tagName=o}continue;case w.CLOSE_TAG_SAW_WHITE:if(p(o))continue;">"===o?R(n):x(n,"Invalid characters in closing tag");continue;case w.TEXT_ENTITY:case w.ATTRIB_VALUE_ENTITY_Q:case w.ATTRIB_VALUE_ENTITY_U:var u,c;switch(n.state){case w.TEXT_ENTITY:u=w.TEXT,c="textNode";break;case w.ATTRIB_VALUE_ENTITY_Q:u=w.ATTRIB_VALUE_QUOTED,c="attribValue";break;case w.ATTRIB_VALUE_ENTITY_U:u=w.ATTRIB_VALUE_UNQUOTED,c="attribValue"}";"===o?(n[c]+=L(n),n.entity="",n.state=u):y(n.entity.length?d:h,o)?n.entity+=o:(x(n,"Invalid character in entity name"),n[c]+="&"+n.entity+o,n.entity="",n.state=u);continue;default:throw new Error(n,"Unknown state: "+n.state)}return n.position>=n.bufferCheckPosition&&function(e){for(var n=Math.max(t.MAX_BUFFER_LENGTH,10),i=0,o=0,a=r.length;o<a;o++){var s=e[r[o]].length;if(s>n)switch(r[o]){case"textNode":_(e);break;case"cdata":I(e,"oncdata",e.cdata),e.cdata="";break;case"script":I(e,"onscript",e.script),e.script="";break;default:C(e,"Max buffer length exceeded: "+r[o])}i=Math.max(i,s)}var u=t.MAX_BUFFER_LENGTH-i;e.bufferCheckPosition=u+e.position}(n),n},resume:function(){return this.error=null,this},close:function(){return this.write(null)},flush:function(){var t;_(t=this),""!==t.cdata&&(I(t,"oncdata",t.cdata),t.cdata=""),""!==t.script&&(I(t,"onscript",t.script),t.script="")}};try{e=n(761).F}catch(t){e=function(){}}var o=t.EVENTS.filter((function(t){return"error"!==t&&"end"!==t}));function a(t,n){if(!(this instanceof a))return new a(t,n);e.apply(this),this._parser=new i(t,n),this.writable=!0,this.readable=!0;var r=this;this._parser.onend=function(){r.emit("end")},this._parser.onerror=function(t){r.emit("error",t),r._parser.error=null},this._decoder=null,o.forEach((function(t){Object.defineProperty(r,"on"+t,{get:function(){return r._parser["on"+t]},set:function(e){if(!e)return r.removeAllListeners(t),r._parser["on"+t]=e,e;r.on(t,e)},enumerable:!0,configurable:!1})}))}a.prototype=Object.create(e.prototype,{constructor:{value:a}}),a.prototype.write=function(t){if("function"==typeof Buffer&&"function"==typeof Buffer.isBuffer&&Buffer.isBuffer(t)){if(!this._decoder){var e=n(214).s;this._decoder=new e("utf8")}t=this._decoder.write(t)}return this._parser.write(t.toString()),this.emit("data",t),!0},a.prototype.end=function(t){return t&&t.length&&this.write(t),this._parser.end(),!0},a.prototype.on=function(t,n){var r=this;return r._parser["on"+t]||-1===o.indexOf(t)||(r._parser["on"+t]=function(){var e=1===arguments.length?[arguments[0]]:Array.apply(null,arguments);e.splice(0,0,t),r.emit.apply(r,e)}),e.prototype.on.call(r,t,n)};var s="http://www.w3.org/XML/1998/namespace",u="http://www.w3.org/2000/xmlns/",c={xml:s,xmlns:u},l=/[:_A-Za-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD]/,f=/[:_A-Za-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD\u00B7\u0300-\u036F\u203F-\u2040.\d-]/,h=/[#:_A-Za-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD]/,d=/[#:_A-Za-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD\u00B7\u0300-\u036F\u203F-\u2040.\d-]/;function p(t){return" "===t||"\n"===t||"\r"===t||"\t"===t}function g(t){return'"'===t||"'"===t}function m(t){return">"===t||p(t)}function y(t,e){return t.test(e)}function v(t,e){return!y(t,e)}var b,T,E,w=0;for(var N in t.STATE={BEGIN:w++,BEGIN_WHITESPACE:w++,TEXT:w++,TEXT_ENTITY:w++,OPEN_WAKA:w++,SGML_DECL:w++,SGML_DECL_QUOTED:w++,DOCTYPE:w++,DOCTYPE_QUOTED:w++,DOCTYPE_DTD:w++,DOCTYPE_DTD_QUOTED:w++,COMMENT_STARTING:w++,COMMENT:w++,COMMENT_ENDING:w++,COMMENT_ENDED:w++,CDATA:w++,CDATA_ENDING:w++,CDATA_ENDING_2:w++,PROC_INST:w++,PROC_INST_BODY:w++,PROC_INST_ENDING:w++,OPEN_TAG:w++,OPEN_TAG_SLASH:w++,ATTRIB:w++,ATTRIB_NAME:w++,ATTRIB_NAME_SAW_WHITE:w++,ATTRIB_VALUE:w++,ATTRIB_VALUE_QUOTED:w++,ATTRIB_VALUE_CLOSED:w++,ATTRIB_VALUE_UNQUOTED:w++,ATTRIB_VALUE_ENTITY_Q:w++,ATTRIB_VALUE_ENTITY_U:w++,CLOSE_TAG:w++,CLOSE_TAG_SAW_WHITE:w++,SCRIPT:w++,SCRIPT_ENDING:w++},t.XML_ENTITIES={amp:"&",gt:">",lt:"<",quot:'"',apos:"'"},t.ENTITIES={amp:"&",gt:">",lt:"<",quot:'"',apos:"'",AElig:198,Aacute:193,Acirc:194,Agrave:192,Aring:197,Atilde:195,Auml:196,Ccedil:199,ETH:208,Eacute:201,Ecirc:202,Egrave:200,Euml:203,Iacute:205,Icirc:206,Igrave:204,Iuml:207,Ntilde:209,Oacute:211,Ocirc:212,Ograve:210,Oslash:216,Otilde:213,Ouml:214,THORN:222,Uacute:218,Ucirc:219,Ugrave:217,Uuml:220,Yacute:221,aacute:225,acirc:226,aelig:230,agrave:224,aring:229,atilde:227,auml:228,ccedil:231,eacute:233,ecirc:234,egrave:232,eth:240,euml:235,iacute:237,icirc:238,igrave:236,iuml:239,ntilde:241,oacute:243,ocirc:244,ograve:242,oslash:248,otilde:245,ouml:246,szlig:223,thorn:254,uacute:250,ucirc:251,ugrave:249,uuml:252,yacute:253,yuml:255,copy:169,reg:174,nbsp:160,iexcl:161,cent:162,pound:163,curren:164,yen:165,brvbar:166,sect:167,uml:168,ordf:170,laquo:171,not:172,shy:173,macr:175,deg:176,plusmn:177,sup1:185,sup2:178,sup3:179,acute:180,micro:181,para:182,middot:183,cedil:184,ordm:186,raquo:187,frac14:188,frac12:189,frac34:190,iquest:191,times:215,divide:247,OElig:338,oelig:339,Scaron:352,scaron:353,Yuml:376,fnof:402,circ:710,tilde:732,Alpha:913,Beta:914,Gamma:915,Delta:916,Epsilon:917,Zeta:918,Eta:919,Theta:920,Iota:921,Kappa:922,Lambda:923,Mu:924,Nu:925,Xi:926,Omicron:927,Pi:928,Rho:929,Sigma:931,Tau:932,Upsilon:933,Phi:934,Chi:935,Psi:936,Omega:937,alpha:945,beta:946,gamma:947,delta:948,epsilon:949,zeta:950,eta:951,theta:952,iota:953,kappa:954,lambda:955,mu:956,nu:957,xi:958,omicron:959,pi:960,rho:961,sigmaf:962,sigma:963,tau:964,upsilon:965,phi:966,chi:967,psi:968,omega:969,thetasym:977,upsih:978,piv:982,ensp:8194,emsp:8195,thinsp:8201,zwnj:8204,zwj:8205,lrm:8206,rlm:8207,ndash:8211,mdash:8212,lsquo:8216,rsquo:8217,sbquo:8218,ldquo:8220,rdquo:8221,bdquo:8222,dagger:8224,Dagger:8225,bull:8226,hellip:8230,permil:8240,prime:8242,Prime:8243,lsaquo:8249,rsaquo:8250,oline:8254,frasl:8260,euro:8364,image:8465,weierp:8472,real:8476,trade:8482,alefsym:8501,larr:8592,uarr:8593,rarr:8594,darr:8595,harr:8596,crarr:8629,lArr:8656,uArr:8657,rArr:8658,dArr:8659,hArr:8660,forall:8704,part:8706,exist:8707,empty:8709,nabla:8711,isin:8712,notin:8713,ni:8715,prod:8719,sum:8721,minus:8722,lowast:8727,radic:8730,prop:8733,infin:8734,ang:8736,and:8743,or:8744,cap:8745,cup:8746,int:8747,there4:8756,sim:8764,cong:8773,asymp:8776,ne:8800,equiv:8801,le:8804,ge:8805,sub:8834,sup:8835,nsub:8836,sube:8838,supe:8839,oplus:8853,otimes:8855,perp:8869,sdot:8901,lceil:8968,rceil:8969,lfloor:8970,rfloor:8971,lang:9001,rang:9002,loz:9674,spades:9824,clubs:9827,hearts:9829,diams:9830},Object.keys(t.ENTITIES).forEach((function(e){var n=t.ENTITIES[e],r="number"==typeof n?String.fromCharCode(n):n;t.ENTITIES[e]=r})),t.STATE)t.STATE[t.STATE[N]]=N;function A(t,e,n){t[e]&&t[e](n)}function I(t,e,n){t.textNode&&_(t),A(t,e,n)}function _(t){t.textNode=B(t.opt,t.textNode),t.textNode&&A(t,"ontext",t.textNode),t.textNode=""}function B(t,e){return t.trim&&(e=e.trim()),t.normalize&&(e=e.replace(/\s+/g," ")),e}function C(t,e){return _(t),t.trackPosition&&(e+="\nLine: "+t.line+"\nColumn: "+t.column+"\nChar: "+t.c),e=new Error(e),t.error=e,A(t,"onerror",e),t}function O(t){return t.sawRoot&&!t.closedRoot&&x(t,"Unclosed root tag"),t.state!==w.BEGIN&&t.state!==w.BEGIN_WHITESPACE&&t.state!==w.TEXT&&C(t,"Unexpected end"),_(t),t.c="",t.closed=!0,A(t,"onend"),i.call(t,t.strict,t.opt),t}function x(t,e){if("object"!=typeof t||!(t instanceof i))throw new Error("bad call to strictFail");t.strict&&C(t,e)}function S(t){t.strict||(t.tagName=t.tagName[t.looseCase]());var e=t.tags[t.tags.length-1]||t,n=t.tag={name:t.tagName,attributes:{}};t.opt.xmlns&&(n.ns=e.ns),t.attribList.length=0,I(t,"onopentagstart",n)}function U(t,e){var n=t.indexOf(":")<0?["",t]:t.split(":"),r=n[0],i=n[1];return e&&"xmlns"===t&&(r="xmlns",i=""),{prefix:r,local:i}}function D(t){if(t.strict||(t.attribName=t.attribName[t.looseCase]()),-1!==t.attribList.indexOf(t.attribName)||t.tag.attributes.hasOwnProperty(t.attribName))t.attribName=t.attribValue="";else{if(t.opt.xmlns){var e=U(t.attribName,!0),n=e.prefix,r=e.local;if("xmlns"===n)if("xml"===r&&t.attribValue!==s)x(t,"xml: prefix must be bound to "+s+"\nActual: "+t.attribValue);else if("xmlns"===r&&t.attribValue!==u)x(t,"xmlns: prefix must be bound to "+u+"\nActual: "+t.attribValue);else{var i=t.tag,o=t.tags[t.tags.length-1]||t;i.ns===o.ns&&(i.ns=Object.create(o.ns)),i.ns[r]=t.attribValue}t.attribList.push([t.attribName,t.attribValue])}else t.tag.attributes[t.attribName]=t.attribValue,I(t,"onattribute",{name:t.attribName,value:t.attribValue});t.attribName=t.attribValue=""}}function P(t,e){if(t.opt.xmlns){var n=t.tag,r=U(t.tagName);n.prefix=r.prefix,n.local=r.local,n.uri=n.ns[r.prefix]||"",n.prefix&&!n.uri&&(x(t,"Unbound namespace prefix: "+JSON.stringify(t.tagName)),n.uri=r.prefix);var i=t.tags[t.tags.length-1]||t;n.ns&&i.ns!==n.ns&&Object.keys(n.ns).forEach((function(e){I(t,"onopennamespace",{prefix:e,uri:n.ns[e]})}));for(var o=0,a=t.attribList.length;o<a;o++){var s=t.attribList[o],u=s[0],c=s[1],l=U(u,!0),f=l.prefix,h=l.local,d=""===f?"":n.ns[f]||"",p={name:u,value:c,prefix:f,local:h,uri:d};f&&"xmlns"!==f&&!d&&(x(t,"Unbound namespace prefix: "+JSON.stringify(f)),p.uri=f),t.tag.attributes[u]=p,I(t,"onattribute",p)}t.attribList.length=0}t.tag.isSelfClosing=!!e,t.sawRoot=!0,t.tags.push(t.tag),I(t,"onopentag",t.tag),e||(t.noscript||"script"!==t.tagName.toLowerCase()?t.state=w.TEXT:t.state=w.SCRIPT,t.tag=null,t.tagName=""),t.attribName=t.attribValue="",t.attribList.length=0}function R(t){if(!t.tagName)return x(t,"Weird empty close tag."),t.textNode+="</>",void(t.state=w.TEXT);if(t.script){if("script"!==t.tagName)return t.script+="</"+t.tagName+">",t.tagName="",void(t.state=w.SCRIPT);I(t,"onscript",t.script),t.script=""}var e=t.tags.length,n=t.tagName;t.strict||(n=n[t.looseCase]());for(var r=n;e--&&t.tags[e].name!==r;)x(t,"Unexpected close tag");if(e<0)return x(t,"Unmatched closing tag: "+t.tagName),t.textNode+="</"+t.tagName+">",void(t.state=w.TEXT);t.tagName=n;for(var i=t.tags.length;i-- >e;){var o=t.tag=t.tags.pop();t.tagName=t.tag.name,I(t,"onclosetag",t.tagName);var a={};for(var s in o.ns)a[s]=o.ns[s];var u=t.tags[t.tags.length-1]||t;t.opt.xmlns&&o.ns!==u.ns&&Object.keys(o.ns).forEach((function(e){var n=o.ns[e];I(t,"onclosenamespace",{prefix:e,uri:n})}))}0===e&&(t.closedRoot=!0),t.tagName=t.attribValue=t.attribName="",t.attribList.length=0,t.state=w.TEXT}function L(t){var e,n=t.entity,r=n.toLowerCase(),i="";return t.ENTITIES[n]?t.ENTITIES[n]:t.ENTITIES[r]?t.ENTITIES[r]:("#"===(n=r).charAt(0)&&("x"===n.charAt(1)?(n=n.slice(2),i=(e=parseInt(n,16)).toString(16)):(n=n.slice(1),i=(e=parseInt(n,10)).toString(10))),n=n.replace(/^0+/,""),isNaN(e)||i.toLowerCase()!==n?(x(t,"Invalid character entity"),"&"+t.entity+";"):String.fromCodePoint(e))}function F(t,e){"<"===e?(t.state=w.OPEN_WAKA,t.startTagPosition=t.position):p(e)||(x(t,"Non-whitespace before first tag."),t.textNode=e,t.state=w.TEXT)}function M(t,e){var n="";return e<t.length&&(n=t.charAt(e)),n}w=t.STATE,String.fromCodePoint||(b=String.fromCharCode,T=Math.floor,E=function(){var t,e,n=16384,r=[],i=-1,o=arguments.length;if(!o)return"";for(var a="";++i<o;){var s=Number(arguments[i]);if(!isFinite(s)||s<0||s>1114111||T(s)!==s)throw RangeError("Invalid code point: "+s);s<=65535?r.push(s):(t=55296+((s-=65536)>>10),e=s%1024+56320,r.push(t,e)),(i+1===o||r.length>n)&&(a+=b.apply(null,r),r.length=0)}return a},Object.defineProperty?Object.defineProperty(String,"fromCodePoint",{value:E,configurable:!0,writable:!0}):String.fromCodePoint=E)}(e)},214:(t,e,n)=>{"use strict";var r=n(834).Buffer,i=r.isEncoding||function(t){switch((t=""+t)&&t.toLowerCase()){case"hex":case"utf8":case"utf-8":case"ascii":case"binary":case"base64":case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":case"raw":return!0;default:return!1}};function o(t){var e;switch(this.encoding=function(t){var e=function(t){if(!t)return"utf8";for(var e;;)switch(t){case"utf8":case"utf-8":return"utf8";case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return"utf16le";case"latin1":case"binary":return"latin1";case"base64":case"ascii":case"hex":return t;default:if(e)return;t=(""+t).toLowerCase(),e=!0}}(t);if("string"!=typeof e&&(r.isEncoding===i||!i(t)))throw new Error("Unknown encoding: "+t);return e||t}(t),this.encoding){case"utf16le":this.text=u,this.end=c,e=4;break;case"utf8":this.fillLast=s,e=4;break;case"base64":this.text=l,this.end=f,e=3;break;default:return this.write=h,void(this.end=d)}this.lastNeed=0,this.lastTotal=0,this.lastChar=r.allocUnsafe(e)}function a(t){return t<=127?0:t>>5==6?2:t>>4==14?3:t>>3==30?4:t>>6==2?-1:-2}function s(t){var e=this.lastTotal-this.lastNeed,n=function(t,e,n){if(128!=(192&e[0]))return t.lastNeed=0,"�";if(t.lastNeed>1&&e.length>1){if(128!=(192&e[1]))return t.lastNeed=1,"�";if(t.lastNeed>2&&e.length>2&&128!=(192&e[2]))return t.lastNeed=2,"�"}}(this,t);return void 0!==n?n:this.lastNeed<=t.length?(t.copy(this.lastChar,e,0,this.lastNeed),this.lastChar.toString(this.encoding,0,this.lastTotal)):(t.copy(this.lastChar,e,0,t.length),void(this.lastNeed-=t.length))}function u(t,e){if((t.length-e)%2==0){var n=t.toString("utf16le",e);if(n){var r=n.charCodeAt(n.length-1);if(r>=55296&&r<=56319)return this.lastNeed=2,this.lastTotal=4,this.lastChar[0]=t[t.length-2],this.lastChar[1]=t[t.length-1],n.slice(0,-1)}return n}return this.lastNeed=1,this.lastTotal=2,this.lastChar[0]=t[t.length-1],t.toString("utf16le",e,t.length-1)}function c(t){var e=t&&t.length?this.write(t):"";if(this.lastNeed){var n=this.lastTotal-this.lastNeed;return e+this.lastChar.toString("utf16le",0,n)}return e}function l(t,e){var n=(t.length-e)%3;return 0===n?t.toString("base64",e):(this.lastNeed=3-n,this.lastTotal=3,1===n?this.lastChar[0]=t[t.length-1]:(this.lastChar[0]=t[t.length-2],this.lastChar[1]=t[t.length-1]),t.toString("base64",e,t.length-n))}function f(t){var e=t&&t.length?this.write(t):"";return this.lastNeed?e+this.lastChar.toString("base64",0,3-this.lastNeed):e}function h(t){return t.toString(this.encoding)}function d(t){return t&&t.length?this.write(t):""}e.s=o,o.prototype.write=function(t){if(0===t.length)return"";var e,n;if(this.lastNeed){if(void 0===(e=this.fillLast(t)))return"";n=this.lastNeed,this.lastNeed=0}else n=0;return n<t.length?e?e+this.text(t,n):this.text(t,n):e||""},o.prototype.end=function(t){var e=t&&t.length?this.write(t):"";return this.lastNeed?e+"�":e},o.prototype.text=function(t,e){var n=function(t,e,n){var r=e.length-1;if(r<n)return 0;var i=a(e[r]);return i>=0?(i>0&&(t.lastNeed=i-1),i):--r<n||-2===i?0:(i=a(e[r]))>=0?(i>0&&(t.lastNeed=i-2),i):--r<n||-2===i?0:(i=a(e[r]))>=0?(i>0&&(2===i?i=0:t.lastNeed=i-3),i):0}(this,t,e);if(!this.lastNeed)return t.toString("utf8",e);this.lastTotal=n;var r=t.length-(n-this.lastNeed);return t.copy(this.lastChar,0,r),t.toString("utf8",e,r)},o.prototype.fillLast=function(t){if(this.lastNeed<=t.length)return t.copy(this.lastChar,this.lastTotal-this.lastNeed,0,this.lastNeed),this.lastChar.toString(this.encoding,0,this.lastTotal);t.copy(this.lastChar,this.lastTotal-this.lastNeed,0,t.length),this.lastNeed-=t.length}},668:(t,e,n)=>{t.exports=n(983)},983:(t,e,n)=>{!function(){var e;if(t.exports&&!n.g.xmldocAssumeBrowser)e=n(480);else if(!(e=this.sax))throw new Error("Expected sax to be defined. Make sure you're including sax.js before this file.");function r(t){var e=u[u.length-1].parser;this.name=t.name,this.attr=t.attributes,this.val="",this.children=[],this.firstChild=null,this.lastChild=null,this.line=e.line,this.column=e.column,this.position=e.position,this.startTagPosition=e.startTagPosition}function i(t){this.text=t}function o(t){this.cdata=t}function a(t){this.comment=t}function s(t){if(t&&(t=t.toString().trim()),!t)throw new Error("No XML to parse!");var n;this.doctype="",this.parser=e.parser(!0),(n=this.parser).onopentag=c,n.onclosetag=l,n.ontext=f,n.oncdata=h,n.oncomment=d,n.ondoctype=p,n.onerror=g,u=[this],this.parser.write(t),delete this.parser}r.prototype._addChild=function(t){this.children.push(t),this.firstChild||(this.firstChild=t),this.lastChild=t},r.prototype._opentag=function(t){var e=new r(t);this._addChild(e),u.unshift(e)},r.prototype._closetag=function(){u.shift()},r.prototype._text=function(t){void 0!==this.children&&(this.val+=t,this._addChild(new i(t)))},r.prototype._cdata=function(t){this.val+=t,this._addChild(new o(t))},r.prototype._comment=function(t){void 0!==this.children&&this._addChild(new a(t))},r.prototype._error=function(t){throw t},r.prototype.eachChild=function(t,e){for(var n=0,r=this.children.length;n<r;n++)if("element"===this.children[n].type&&!1===t.call(e,this.children[n],n,this.children))return},r.prototype.childNamed=function(t){for(var e=0,n=this.children.length;e<n;e++){var r=this.children[e];if(r.name===t)return r}},r.prototype.childrenNamed=function(t){for(var e=[],n=0,r=this.children.length;n<r;n++)this.children[n].name===t&&e.push(this.children[n]);return e},r.prototype.childWithAttribute=function(t,e){for(var n=0,r=this.children.length;n<r;n++){var i=this.children[n];if("element"===i.type&&(e&&i.attr[t]===e||!e&&i.attr[t]))return i}},r.prototype.descendantsNamed=function(t){for(var e=[],n=0,r=this.children.length;n<r;n++){var i=this.children[n];"element"===i.type&&(i.name===t&&e.push(i),e=e.concat(i.descendantsNamed(t)))}return e},r.prototype.descendantWithPath=function(t){for(var e=this,n=t.split("."),r=0,i=n.length;r<i;r++){if(!e||"element"!==e.type)return;e=e.childNamed(n[r])}return e},r.prototype.valueWithPath=function(t){var e=t.split("@"),n=this.descendantWithPath(e[0]);return n?e.length>1?n.attr[e[1]]:n.val:void 0},r.prototype.toString=function(t){return this.toStringWithIndent("",t)},r.prototype.toStringWithIndent=function(t,e){var n=t+"<"+this.name,r=e&&e.compressed?"":"\n";for(var i in e&&e.preserveWhitespace,this.attr)Object.prototype.hasOwnProperty.call(this.attr,i)&&(n+=" "+i+'="'+m(this.attr[i])+'"');if(1===this.children.length&&"element"!==this.children[0].type)n+=">"+this.children[0].toString(e)+"</"+this.name+">";else if(this.children.length){n+=">"+r;for(var o=t+(e&&e.compressed?"":" "),a=0,s=this.children.length;a<s;a++)n+=this.children[a].toStringWithIndent(o,e)+r;n+=t+"</"+this.name+">"}else e&&e.html?-1!==["area","base","br","col","embed","frame","hr","img","input","keygen","link","menuitem","meta","param","source","track","wbr"].indexOf(this.name)?n+="/>":n+="></"+this.name+">":n+="/>";return n},i.prototype.toString=function(t){return y(m(this.text),t)},i.prototype.toStringWithIndent=function(t,e){return t+this.toString(e)},o.prototype.toString=function(t){return"<![CDATA["+y(this.cdata,t)+"]]>"},o.prototype.toStringWithIndent=function(t,e){return t+this.toString(e)},a.prototype.toString=function(t){return"\x3c!--"+y(m(this.comment),t)+"--\x3e"},a.prototype.toStringWithIndent=function(t,e){return t+this.toString(e)},r.prototype.type="element",i.prototype.type="text",o.prototype.type="cdata",a.prototype.type="comment",function(t,e){for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n])}(s.prototype,r.prototype),s.prototype._opentag=function(t){void 0===this.children?r.call(this,t):r.prototype._opentag.apply(this,arguments)},s.prototype._doctype=function(t){this.doctype+=t};var u=null;function c(){u[0]&&u[0]._opentag.apply(u[0],arguments)}function l(){u[0]&&u[0]._closetag.apply(u[0],arguments)}function f(){u[0]&&u[0]._text.apply(u[0],arguments)}function h(){u[0]&&u[0]._cdata.apply(u[0],arguments)}function d(){u[0]&&u[0]._comment.apply(u[0],arguments)}function p(){u[0]&&u[0]._doctype.apply(u[0],arguments)}function g(){u[0]&&u[0]._error.apply(u[0],arguments)}function m(t){return t.toString().replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">").replace(/'/g,"'").replace(/"/g,""")}function y(t,e){var n=t;return e&&e.trimmed&&t.length>25&&(n=n.substring(0,25).trim()+"…"),e&&e.preserveWhitespace||(n=n.trim()),n}t.exports&&!n.g.xmldocAssumeBrowser?(t.exports.XmlDocument=s,t.exports.XmlElement=r,t.exports.XmlTextNode=i,t.exports.XmlCDataNode=o,t.exports.XmlCommentNode=a):(this.XmlDocument=s,this.XmlElement=r,this.XmlTextNode=i,this.XmlCDataNode=o,this.XmlCommentNode=a)}()},761:(t,e,n)=>{"use strict";n.d(e,{F:()=>r});const r=function(){}}},e={};function n(r){var i=e[r];if(void 0!==i)return i.exports;var o=e[r]={exports:{}};return t[r](o,o.exports,n),o.exports}n.n=t=>{var e=t&&t.__esModule?()=>t.default:()=>t;return n.d(e,{a:e}),e},n.d=(t,e)=>{for(var r in e)n.o(e,r)&&!n.o(t,r)&&Object.defineProperty(t,r,{enumerable:!0,get:e[r]})},n.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(t){if("object"==typeof window)return window}}(),n.o=(t,e)=>Object.prototype.hasOwnProperty.call(t,e),n.r=t=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})};var r={};(()=>{"use strict";n.r(r),n.d(r,{Report:()=>c,createArchiveFromArrayBufferList:()=>S,createArchiveFromJszip:()=>O,createArchiveFromText:()=>B,createArchiveFromUrls:()=>I,getArchiveOpfInfo:()=>l,getManifestFromArchive:()=>E,getResourceFromArchive:()=>p,xmldoc:()=>e()});var t=n(668),e=n.n(t),i=function(t,e,n,r){return new(n||(n=Promise))((function(i,o){function a(t){try{u(r.next(t))}catch(t){o(t)}}function s(t){try{u(r.throw(t))}catch(t){o(t)}}function u(t){var e;t.done?i(t.value):(e=t.value,e instanceof n?e:new n((function(t){t(e)}))).then(a,s)}u((r=r.apply(t,e||[])).next())}))};const o=(t,{opfBasePath:e,baseUrl:n})=>{const r={contents:[],path:"",href:"",title:""};let i=t.childNamed("span")||t.childNamed("a");r.title=(null==i?void 0:i.attr.title)||(null==i?void 0:i.val.trim())||r.title;let a=null==i?void 0:i.name;"a"!==a&&(i=t.descendantWithPath(`${a}.a`),i&&(a=i.name.toLowerCase())),"a"===a&&(null==i?void 0:i.attr.href)&&(r.path=e?`${e}/${i.attr.href}`:`${i.attr.href}`,r.href=e?`${n}/${e}/${i.attr.href}`:`${n}/${i.attr.href}`);const s=t.childNamed("ol");if(s){const t=s.childrenNamed("li");t&&t.length>0&&(r.contents=t.map((t=>o(t,{opfBasePath:e,baseUrl:n}))))}return r},a=(t,{opfBasePath:e,baseUrl:n,prefix:r})=>{var i,o;const s=(null===(i=null==t?void 0:t.childNamed(`${r}content`))||void 0===i?void 0:i.attr.src)||"",u={title:(null===(o=null==t?void 0:t.descendantWithPath(`${r}navLabel.${r}text`))||void 0===o?void 0:o.val)||"",path:e?`${e}/${s}`:`${s}`,href:e?`${n}/${e}/${s}`:`${n}/${s}`,contents:[]},c=t.childrenNamed(`${r}navPoint`);return c&&c.length>0&&(u.contents=c.map((t=>a(t,{opfBasePath:e,baseUrl:n,prefix:r})))),u};var s=function(t,e,n,r){return new(n||(n=Promise))((function(i,o){function a(t){try{u(r.next(t))}catch(t){o(t)}}function s(t){try{u(r.throw(t))}catch(t){o(t)}}function u(t){var e;t.done?i(t.value):(e=t.value,e instanceof n?e:new n((function(t){t(e)}))).then(a,s)}u((r=r.apply(t,e||[])).next())}))};let u=!1;const c={enable:t=>{u=t},log:(...t)=>{u&&console.log("[prose-reader-streamer]",...t)},warn:(...t)=>{u&&console.warn("[prose-reader-streamer]",...t)},error:(...t)=>{console.error(...t)},time:t=>{u&&console.time(`[prose-reader-streamer] [metric] ${t}`)},timeEnd:t=>{u&&console.timeEnd(`[prose-reader-streamer] [metric] ${t}`)},metric:(t,e=1/0)=>{const n="number"==typeof t?t:t.duration;u&&(t.duration<=e?console.log("[prose-reader-streamer] [metric] ",`${t.name} took ${n}ms`):console.warn("[prose-reader-streamer] [metric] ",`${t.name} took ${t.duration}ms which is above the ${e}ms target for this function`))},measurePerformance:(t,e=10,n)=>(...r)=>{const i=performance.now(),o=n(...r);if(o&&o.then)return o.then((n=>{const r=performance.now();return c.metric({name:t,duration:r-i},e),n}));const a=performance.now();return c.metric({name:t,duration:a-i},e),o}},l=t=>{const e=Object.values(t.files).filter((t=>!t.dir)),n=e.find((t=>t.uri.endsWith(".opf")));return{data:n,basePath:(null==n?void 0:n.uri.substring(0,n.uri.lastIndexOf("/")))||""}};const f=t=>{var e;const n=t.childNamed("manifest");return(null===(e=null==n?void 0:n.childrenNamed("item"))||void 0===e?void 0:e.map((t=>({href:t.attr.href||"",id:t.attr.id||"",mediaType:t.attr["media-type"]}))))||[]},h=({archive:t,baseUrl:n})=>r=>{return u=void 0,h=void 0,p=function*(){var u;const{data:h,basePath:d}=l(t)||{},p=yield(t=>s(void 0,void 0,void 0,(function*(){const n={renditionLayout:void 0};return yield Promise.all(t.files.map((t=>s(void 0,void 0,void 0,(function*(){var r,i;if(t.uri.endsWith("com.kobobooks.display-options.xml")){const o=null===(r=new(e().XmlDocument)(yield t.string()).childNamed("platform"))||void 0===r?void 0:r.childNamed("option");"fixed-layout"===(null===(i=null==o?void 0:o.attr)||void 0===i?void 0:i.name)&&"true"===o.val&&(n.renditionLayout="pre-paginated")}}))))),n})))(t);if(!h)return r;const g=yield h.string();c.log(g,p);const m=new(e().XmlDocument)(g),y=(yield((t,n,{baseUrl:r})=>i(void 0,void 0,void 0,(function*(){const{basePath:s}=l(n)||{};return(yield(({opfData:t,opfBasePath:n,baseUrl:r,archive:o})=>i(void 0,void 0,void 0,(function*(){var i;const s=t.childNamed("spine"),u=s&&s.attr.toc;if(u){const s=null===(i=t.childNamed("manifest"))||void 0===i?void 0:i.childrenNamed("item").find((t=>t.attr.id===u));if(s){const t=`${n}${""===n?"":"/"}${s.attr.href}`,i=Object.values(o.files).find((e=>e.uri.endsWith(t)));if(i)return((t,{opfBasePath:e,baseUrl:n})=>{var r;const i=[],o=t.name;let s="";return-1!==o.indexOf(":")&&(s=o.split(":")[0]+":"),null===(r=t.childNamed(`${s}navMap`))||void 0===r||r.childrenNamed(`${s}navPoint`).forEach((t=>i.push(a(t,{opfBasePath:e,baseUrl:n,prefix:s})))),i})(new(e().XmlDocument)(yield i.string()),{opfBasePath:n,baseUrl:r})}}})))({opfData:t,opfBasePath:s,archive:n,baseUrl:r}))||(yield((t,n,{opfBasePath:r,baseUrl:a})=>i(void 0,void 0,void 0,(function*(){var i;const s=null===(i=t.childNamed("manifest"))||void 0===i?void 0:i.childrenNamed("item").find((t=>"nav"===t.attr.properties));if(s){const t=Object.values(n.files).find((t=>t.uri.endsWith(s.attr.href||"")));if(t)return((t,{opfBasePath:e,baseUrl:n})=>{var r,i;const a=[];let s;return t.descendantWithPath("body.nav.ol")?s=null===(r=t.descendantWithPath("body.nav.ol"))||void 0===r?void 0:r.children:t.descendantWithPath("body.section.nav.ol")&&(s=null===(i=t.descendantWithPath("body.section.nav.ol"))||void 0===i?void 0:i.children),s&&s.length>0&&s.filter((t=>"li"===t.name)).forEach((t=>a.push(o(t,{opfBasePath:e,baseUrl:n})))),a})(new(e().XmlDocument)(yield t.string()),{opfBasePath:r,baseUrl:a})}})))(t,n,{opfBasePath:s,baseUrl:r}))})))(m,t,{baseUrl:n}))||[],v=m.childNamed("metadata"),b=m.childNamed("manifest"),T=m.childNamed("spine"),E=m.childNamed("guide"),w=null==v?void 0:v.childNamed("dc:title"),N=(null==v?void 0:v.childrenNamed("meta"))||[],A=N.find((t=>"rendition:layout"===t.attr.property)),I=N.find((t=>"rendition:flow"===t.attr.property)),_=N.find((t=>"rendition:spread"===t.attr.property)),B=null==A?void 0:A.val,C=null==I?void 0:I.val,O=null==_?void 0:_.val,x=(null==w?void 0:w.val)||(null===(u=t.files.find((({dir:t})=>t)))||void 0===u?void 0:u.basename)||"",S=null==T?void 0:T.attr["page-progression-direction"],U=null==T?void 0:T.childrenNamed("itemref").map((t=>t.attr.idref)),D=(null==b?void 0:b.childrenNamed("item").filter((t=>U.includes(t.attr.id||""))))||[],P=t.files.filter((t=>D.find((e=>d?`${d}/${e.attr.href}`===t.uri:`${e.attr.href}`===t.uri)))).reduce(((t,e)=>e.size+t),0);return{filename:t.filename,nav:{toc:y},renditionLayout:B||p.renditionLayout||"reflowable",renditionFlow:C||"auto",renditionSpread:O,title:x,readingDirection:S||"ltr",spineItems:(null==T?void 0:T.childrenNamed("itemref").map((e=>{var r,i,o;const a=null==b?void 0:b.childrenNamed("item").find((t=>t.attr.id===(null==e?void 0:e.attr.idref))),s=(null==a?void 0:a.attr.href)||"",u=(null===(r=null==e?void 0:e.attr.properties)||void 0===r?void 0:r.split(" "))||[],c=(null===(i=t.files.find((t=>t.uri.endsWith(s))))||void 0===i?void 0:i.size)||0;return Object.assign(Object.assign({id:(null==a?void 0:a.attr.id)||"",path:d?`${d}/${null==a?void 0:a.attr.href}`:`${null==a?void 0:a.attr.href}`,href:(null===(o=null==a?void 0:a.attr.href)||void 0===o?void 0:o.startsWith("https://"))?null==a?void 0:a.attr.href:d?`${n}/${d}/${null==a?void 0:a.attr.href}`:`${n}/${null==a?void 0:a.attr.href}`,renditionLayout:B||"reflowable"},u.find((t=>"rendition:layout-reflowable"===t))&&{renditionLayout:"reflowable"}),{progressionWeight:c/P,pageSpreadLeft:u.some((t=>"page-spread-left"===t))||void 0,pageSpreadRight:u.some((t=>"page-spread-right"===t))||void 0,mediaType:null==a?void 0:a.attr["media-type"]})})))||[],items:f(m),guide:null==E?void 0:E.childrenNamed("reference").map((t=>({href:t.attr.href||"",title:t.attr.title||"",type:t.attr.type})))}},new((d=void 0)||(d=Promise))((function(t,e){function n(t){try{i(p.next(t))}catch(t){e(t)}}function r(t){try{i(p.throw(t))}catch(t){e(t)}}function i(e){var i;e.done?t(e.value):(i=e.value,i instanceof d?i:new d((function(t){t(i)}))).then(n,r)}i((p=p.apply(u,h||[])).next())}));var u,h,d,p};var d=function(t,e,n,r){return new(n||(n=Promise))((function(i,o){function a(t){try{u(r.next(t))}catch(t){o(t)}}function s(t){try{u(r.throw(t))}catch(t){o(t)}}function u(t){var e;t.done?i(t.value):(e=t.value,e instanceof n?e:new n((function(t){t(e)}))).then(a,s)}u((r=r.apply(t,e||[])).next())}))};const p=(t,e)=>d(void 0,void 0,void 0,(function*(){const n=Object.values(t.files).find((t=>t.uri===e)),r=yield g(t,e);if(!n)throw new Error("no file found");const i=yield n.blob();return new Response(i,{headers:Object.assign(Object.assign(Object.assign({},i.type&&{"Content-Type":i.type}),n.encodingFormat&&{"Content-Type":n.encodingFormat}),r.mediaType&&{"Content-Type":r.mediaType})})})),g=(t,n)=>d(void 0,void 0,void 0,(function*(){var r,i;const o=l(t),a=yield null===(r=o.data)||void 0===r?void 0:r.string();if(a){const t=new(e().XmlDocument)(a);return{mediaType:null===(i=f(t).find((t=>n.endsWith(t.href))))||void 0===i?void 0:i.mediaType}}return{mediaType:m(n)}})),m=t=>t.endsWith(".css")?"text/css; charset=UTF-8":t.endsWith(".jpg")?"image/jpg":t.endsWith(".xhtml")?"application/xhtml+xml":t.endsWith(".mp4")?"video/mp4":t.endsWith(".svg")?"image/svg+xml":void 0;const y=({archive:t,baseUrl:n})=>n=>{return r=void 0,i=void 0,a=function*(){var r;const i=t.files.find((t=>"comicinfo.xml"===t.basename.toLowerCase()));if(!i)return n;const o=yield i.string(),a=(null===(r=new(e().XmlDocument)(o).childNamed("Manga"))||void 0===r?void 0:r.val)||"unknown";return Object.assign(Object.assign({},n),{spineItems:n.spineItems.filter((t=>"comicinfo.xml"!==t.id.toLowerCase())),readingDirection:"YesAndRightToLeft"===a?"rtl":"ltr"})},new((o=void 0)||(o=Promise))((function(t,e){function n(t){try{u(a.next(t))}catch(t){e(t)}}function s(t){try{u(a.throw(t))}catch(t){e(t)}}function u(e){var r;e.done?t(e.value):(r=e.value,r instanceof o?r:new o((function(t){t(r)}))).then(n,s)}u((a=a.apply(r,i||[])).next())}));var r,i,o,a};const v=({archive:t,baseUrl:e})=>n=>{return r=void 0,i=void 0,a=function*(){var n;const r=Object.values(t.files).filter((t=>!t.dir));return{filename:t.filename,nav:{toc:[]},title:(null===(n=t.files.find((({dir:t})=>t)))||void 0===n?void 0:n.basename.replace(/\/$/,""))||"",renditionLayout:"pre-paginated",renditionSpread:"auto",readingDirection:"ltr",spineItems:r.map((t=>({id:t.basename,path:`${t.uri}`,href:e?`${e}/${t.uri}`:t.uri,renditionLayout:"pre-paginated",progressionWeight:1/r.length,pageSpreadLeft:void 0,pageSpreadRight:void 0,mediaType:t.encodingFormat}))),items:r.map((t=>({id:t.basename,href:e?`${e}/${t.uri}`:t.uri})))}},new((o=void 0)||(o=Promise))((function(t,e){function n(t){try{u(a.next(t))}catch(t){e(t)}}function s(t){try{u(a.throw(t))}catch(t){e(t)}}function u(e){var r;e.done?t(e.value):(r=e.value,r instanceof o?r:new o((function(t){t(r)}))).then(n,s)}u((a=a.apply(r,i||[])).next())}));var r,i,o,a};var b=function(t,e,n,r){return new(n||(n=Promise))((function(i,o){function a(t){try{u(r.next(t))}catch(t){o(t)}}function s(t){try{u(r.throw(t))}catch(t){o(t)}}function u(t){var e;t.done?i(t.value):(e=t.value,e instanceof n?e:new n((function(t){t(e)}))).then(a,s)}u((r=r.apply(t,e||[])).next())}))};const T={filename:"",items:[],nav:{toc:[]},readingDirection:"ltr",renditionLayout:"pre-paginated",renditionSpread:"auto",spineItems:[],title:""},E=(t,{baseUrl:e=""}={})=>b(void 0,void 0,void 0,(function*(){const n=[v({archive:t,baseUrl:e}),h({archive:t,baseUrl:e}),y({archive:t,baseUrl:e})];try{const t=yield n.reduce(((t,e)=>b(void 0,void 0,void 0,(function*(){return yield e(yield t)}))),Promise.resolve(T)),e=JSON.stringify(t);return new Response(e,{status:200})}catch(t){return c.error(t),new Response(null==t?void 0:t.message,{status:500})}})),w=t=>{var e,n;switch((null===(n=null===(e=t.split(/[#?]/)[0])||void 0===e?void 0:e.split(".").pop())||void 0===n?void 0:n.trim())||""){case"png":return"image/png";case"jpg":return"image/jpg";case"jpeg":return"image/jpeg";case"txt":return"text/plain";case"webp":return"image/webp"}},N=t=>t.substring(t.lastIndexOf("/")+1)||t;var A=function(t,e,n,r){return new(n||(n=Promise))((function(i,o){function a(t){try{u(r.next(t))}catch(t){o(t)}}function s(t){try{u(r.throw(t))}catch(t){o(t)}}function u(t){var e;t.done?i(t.value):(e=t.value,e instanceof n?e:new n((function(t){t(e)}))).then(a,s)}u((r=r.apply(t,e||[])).next())}))};const I=(t,e)=>A(void 0,void 0,void 0,(function*(){const n=`\n <?xml version="1.0" encoding="UTF-8"?><package xmlns="http://www.idpf.org/2007/opf" version="2.0" unique-identifier="bookid">\n <metadata>\n <meta property="rendition:layout">${(null==e?void 0:e.useRenditionFlow)?"reflowable":"pre-paginated"}</meta>\n ${(null==e?void 0:e.useRenditionFlow)?'<meta property="rendition:flow">scrolled-continuous</meta>':""}\n </metadata>\n <manifest>\n ${t.map((t=>`<item id="${N(t)}" href="${t}" media-type="${w(t)}"/>`)).join("\n")}\n </manifest>\n <spine>\n ${t.map((t=>`<itemref idref="${N(t)}" />`)).join("\n")}\n </spine>\n </package>\n `;return{filename:"",files:[{dir:!1,basename:"content.opf",uri:"content.opf",size:0,base64:()=>A(void 0,void 0,void 0,(function*(){return n})),blob:()=>A(void 0,void 0,void 0,(function*(){return new Blob})),string:()=>A(void 0,void 0,void 0,(function*(){return n}))},...t.map((e=>({dir:!1,basename:N(e),encodingFormat:w(e),uri:e,size:100/t.length,base64:()=>A(void 0,void 0,void 0,(function*(){return""})),blob:()=>A(void 0,void 0,void 0,(function*(){return new Blob})),string:()=>A(void 0,void 0,void 0,(function*(){return""}))})))]}}));var _=function(t,e,n,r){return new(n||(n=Promise))((function(i,o){function a(t){try{u(r.next(t))}catch(t){o(t)}}function s(t){try{u(r.throw(t))}catch(t){o(t)}}function u(t){var e;t.done?i(t.value):(e=t.value,e instanceof n?e:new n((function(t){t(e)}))).then(a,s)}u((r=r.apply(t,e||[])).next())}))};const B=(t,e)=>_(void 0,void 0,void 0,(function*(){const n=`\n <?xml version="1.0" encoding="UTF-8"?>\n <package xmlns="http://www.idpf.org/2007/opf" version="3.0" xml:lang="ja" prefix="rendition: http://www.idpf.org/vocab/rendition/#"\n unique-identifier="ootuya-id">\n <metadata xmlns:opf="http://www.idpf.org/2007/opf" xmlns:dc="http://purl.org/dc/elements/1.1/"\n xmlns:dcterms="http://purl.org/dc/terms/">\n <meta property="rendition:layout">reflowable</meta>\n </metadata>\n <manifest>\n <item id="p01" href="p01.txt" media-type="text/plain"/>\n </manifest>\n <spine page-progression-direction="${(null==e?void 0:e.direction)||"ltr"}">\n <itemref idref="p01" />\n </spine>\n </package>\n `;return{filename:"content.txt",files:[{dir:!1,basename:N("generated.opf"),uri:"generated.opf",blob:()=>_(void 0,void 0,void 0,(function*(){return new Blob([n])})),string:()=>_(void 0,void 0,void 0,(function*(){return n})),base64:()=>_(void 0,void 0,void 0,(function*(){return btoa(n)})),size:0},{dir:!1,basename:N("p01.txt"),uri:"p01.txt",blob:()=>_(void 0,void 0,void 0,(function*(){return"string"==typeof t?new Blob([t]):t})),string:()=>_(void 0,void 0,void 0,(function*(){return"string"==typeof t?t:t.text()})),base64:()=>_(void 0,void 0,void 0,(function*(){return"string"==typeof t?btoa(t):(o=t,e=void 0,n=void 0,i=function*(){return new Promise((t=>{const e=new FileReader;e.readAsDataURL(o),e.onloadend=function(){const n=e.result;t(n)}}))},new((r=void 0)||(r=Promise))((function(t,o){function a(t){try{u(i.next(t))}catch(t){o(t)}}function s(t){try{u(i.throw(t))}catch(t){o(t)}}function u(e){var n;e.done?t(e.value):(n=e.value,n instanceof r?n:new r((function(t){t(n)}))).then(a,s)}u((i=i.apply(e,n||[])).next())})));var e,n,r,i,o})),size:"string"==typeof t?t.length:t.size,encodingFormat:"text/plain"}]}})),C=(t,e)=>{var n;const r=t.split(/(\d+)/),i=e.split(/(\d+)/);for(let t=0,e=r.length;t<e;t++)if(r[t]!==i[t])return(null===(n=r[t])||void 0===n?void 0:n.match(/\d/))?+(r[t]||"")-+(i[t]||""):(r[t]||"").localeCompare(i[t]||"");return 1};const O=(t,{orderByAlpha:e,name:n}={})=>{return r=void 0,i=void 0,a=function*(){let r=Object.values(t.files);return e&&(r=r.sort(((t,e)=>C(t.name,e.name)))),{filename:n||"",files:r.map((t=>Object.assign(Object.assign({dir:t.dir,basename:N(t.name),uri:t.name,blob:()=>t.async("blob"),string:()=>t.async("string"),base64:()=>t.async("base64")},t.internalStream&&{stream:t.internalStream}),{size:t._data.uncompressedSize})))}},new((o=void 0)||(o=Promise))((function(t,e){function n(t){try{u(a.next(t))}catch(t){e(t)}}function s(t){try{u(a.throw(t))}catch(t){e(t)}}function u(e){var r;e.done?t(e.value):(r=e.value,r instanceof o?r:new o((function(t){t(r)}))).then(n,s)}u((a=a.apply(r,i||[])).next())}));var r,i,o,a};var x=function(t,e,n,r){return new(n||(n=Promise))((function(i,o){function a(t){try{u(r.next(t))}catch(t){o(t)}}function s(t){try{u(r.throw(t))}catch(t){o(t)}}function u(t){var e;t.done?i(t.value):(e=t.value,e instanceof n?e:new n((function(t){t(e)}))).then(a,s)}u((r=r.apply(t,e||[])).next())}))};const S=(t,{orderByAlpha:e,name:n}={})=>x(void 0,void 0,void 0,(function*(){let r=t;return e&&(r=r.sort(((t,e)=>C(t.name,e.name)))),{filename:n||"",files:r.map((t=>({dir:t.isDir,basename:N(t.name),uri:t.name,blob:()=>x(void 0,void 0,void 0,(function*(){return new Blob([yield t.data()])})),string:()=>x(void 0,void 0,void 0,(function*(){const e=yield t.data();return String.fromCharCode.apply(null,Array.from(new Uint16Array(e)))})),base64:()=>x(void 0,void 0,void 0,(function*(){return""})),size:t.size})))}}))})();var i=exports;for(var o in r)i[o]=r[o];r.__esModule&&Object.defineProperty(i,"__esModule",{value:!0})})();
|
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
/*!
|
|
2
|
-
* The buffer module from node.js, for the browser.
|
|
3
|
-
*
|
|
4
|
-
* @author Feross Aboukhadijeh <https://feross.org>
|
|
5
|
-
* @license MIT
|
|
6
|
-
*/
|
|
7
|
-
|
|
8
|
-
/*! http://mths.be/fromcodepoint v0.1.0 by @mathias */
|
|
9
|
-
|
|
10
|
-
/*! ieee754. BSD-3-Clause License. Feross Aboukhadijeh <https://feross.org/opensource> */
|
|
11
|
-
|
|
12
|
-
/*! safe-buffer. MIT License. Feross Aboukhadijeh <https://feross.org/opensource> */
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import "isomorphic-fetch";
|