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