@prose-reader/archive-reader 1.345.0 → 1.346.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index/index.cjs +1 -1
- package/dist/index/index.cjs.map +1 -1
- package/dist/index/index.js +238 -201
- package/dist/index/index.js.map +1 -1
- package/dist/index.d.ts +2 -1
- package/dist/metadata/comicInfo/resolve.d.ts +1 -1
- package/dist/metadata/opf/parse.d.ts +5 -1
- package/dist/metadata/opf/resolve.d.ts +1 -1
- package/dist/types/resolvedMetadata.d.ts +11 -2
- package/dist/utils/mainTitle.d.ts +2 -0
- package/package.json +3 -3
package/dist/index/index.js
CHANGED
|
@@ -129,6 +129,18 @@ var v = async (e, t = {}) => n(e, (e) => e.isDir ? {
|
|
|
129
129
|
...o !== void 0 && o === t ? { unique: !0 } : {}
|
|
130
130
|
});
|
|
131
131
|
}), n;
|
|
132
|
+
}, re = (e) => {
|
|
133
|
+
let t = [];
|
|
134
|
+
return e.eachChild((e) => {
|
|
135
|
+
if (A(e.name).toLowerCase() !== "title") return;
|
|
136
|
+
let n = e.val.trim();
|
|
137
|
+
if (n.length === 0) return;
|
|
138
|
+
let r = e.attr.id?.trim();
|
|
139
|
+
t.push({
|
|
140
|
+
value: n,
|
|
141
|
+
...r !== void 0 && r.length > 0 ? { id: r } : {}
|
|
142
|
+
});
|
|
143
|
+
}), t;
|
|
132
144
|
}, P = (e, t) => {
|
|
133
145
|
let n;
|
|
134
146
|
return e.eachChild((e) => {
|
|
@@ -143,18 +155,18 @@ var v = async (e, t = {}) => n(e, (e) => e.isDir ? {
|
|
|
143
155
|
let r = e.val.trim();
|
|
144
156
|
r.length > 0 && n.push(r);
|
|
145
157
|
}), n;
|
|
146
|
-
},
|
|
158
|
+
}, ie = (e) => {
|
|
147
159
|
let t;
|
|
148
160
|
return e.eachChild((e) => {
|
|
149
161
|
if (t !== void 0 || A(e.name).toLowerCase() !== "meta" || e.attr.name?.toLowerCase() !== "cover") return;
|
|
150
162
|
let n = e.attr.content?.trim();
|
|
151
163
|
n !== void 0 && n.length > 0 && (t = n);
|
|
152
164
|
}), t;
|
|
153
|
-
},
|
|
165
|
+
}, ae = ({ manifestItems: e, metadataEl: t }) => {
|
|
154
166
|
let n = (e) => e.mediaType?.toLowerCase().includes("image/") === !0, r = e.find((e) => n(e) ? k(e.properties).includes("cover-image") : !1);
|
|
155
167
|
if (r !== void 0) return r.href;
|
|
156
168
|
if (t !== void 0) {
|
|
157
|
-
let r =
|
|
169
|
+
let r = ie(t);
|
|
158
170
|
if (r !== void 0) {
|
|
159
171
|
let t = e.find((e) => e.id === r && n(e));
|
|
160
172
|
if (t !== void 0) return t.href;
|
|
@@ -164,7 +176,7 @@ var v = async (e, t = {}) => n(e, (e) => e.isDir ? {
|
|
|
164
176
|
}, I = (e, t) => {
|
|
165
177
|
let n = e.attr[t]?.trim();
|
|
166
178
|
return n !== void 0 && n.length > 0 ? n : void 0;
|
|
167
|
-
},
|
|
179
|
+
}, oe = (e) => {
|
|
168
180
|
let t = [];
|
|
169
181
|
return e.eachChild((e) => {
|
|
170
182
|
if (A(e.name).toLowerCase() !== "meta") return;
|
|
@@ -179,14 +191,14 @@ var v = async (e, t = {}) => n(e, (e) => e.isDir ? {
|
|
|
179
191
|
};
|
|
180
192
|
Object.keys(u).length !== 0 && t.push(u);
|
|
181
193
|
}), t;
|
|
182
|
-
},
|
|
194
|
+
}, se = (e, t) => e.replace(/^#/, "") === t, ce = (e, t) => {
|
|
183
195
|
let n = [];
|
|
184
196
|
return e.eachChild((e) => {
|
|
185
197
|
let r = A(e.name).toLowerCase();
|
|
186
198
|
if (r !== "creator" && r !== "contributor") return;
|
|
187
199
|
let i = e.val.trim();
|
|
188
200
|
if (i.length === 0) return;
|
|
189
|
-
let a = I(e, "id"), o = (e) => a === void 0 ? [] : t.flatMap((t) => t.refines !== void 0 &&
|
|
201
|
+
let a = I(e, "id"), o = (e) => a === void 0 ? [] : t.flatMap((t) => t.refines !== void 0 && se(t.refines, a) && t.property === e && t.value !== void 0 ? [t.value] : []), s = I(e, "opf:role") ?? I(e, "role"), c = [...s === void 0 ? [] : [s], ...o("role")], l = I(e, "opf:file-as") ?? I(e, "file-as") ?? o("file-as")[0];
|
|
190
202
|
n.push({
|
|
191
203
|
name: i,
|
|
192
204
|
source: r,
|
|
@@ -198,7 +210,7 @@ var v = async (e, t = {}) => n(e, (e) => e.isDir ? {
|
|
|
198
210
|
}, L = (e, t) => {
|
|
199
211
|
let n = N(e, "meta").find((e) => e.attr.property === t)?.val;
|
|
200
212
|
if (!(n === void 0 || n.trim().length === 0)) return n;
|
|
201
|
-
},
|
|
213
|
+
}, le = (e) => {
|
|
202
214
|
let t = M(e, "guide");
|
|
203
215
|
if (t === void 0) return [];
|
|
204
216
|
let n = [];
|
|
@@ -211,7 +223,7 @@ var v = async (e, t = {}) => n(e, (e) => e.isDir ? {
|
|
|
211
223
|
});
|
|
212
224
|
}
|
|
213
225
|
return n;
|
|
214
|
-
},
|
|
226
|
+
}, ue = (e) => {
|
|
215
227
|
let t = e.attr.id, n = e.attr.href;
|
|
216
228
|
if (t === void 0 || t.length === 0 || n === void 0 || n.length === 0) return;
|
|
217
229
|
let r = e.attr["media-type"], i = e.attr.properties?.trim();
|
|
@@ -221,17 +233,17 @@ var v = async (e, t = {}) => n(e, (e) => e.isDir ? {
|
|
|
221
233
|
...r !== void 0 && r.length > 0 ? { mediaType: r } : {},
|
|
222
234
|
...i !== void 0 && i.length > 0 ? { properties: i } : {}
|
|
223
235
|
};
|
|
224
|
-
},
|
|
236
|
+
}, de = (e) => {
|
|
225
237
|
let t = [], n = /* @__PURE__ */ new Map();
|
|
226
238
|
for (let r of N(e, "item")) {
|
|
227
|
-
let e =
|
|
239
|
+
let e = ue(r);
|
|
228
240
|
e !== void 0 && (t.push(e), n.set(e.id, e));
|
|
229
241
|
}
|
|
230
242
|
return {
|
|
231
243
|
items: t,
|
|
232
244
|
byId: n
|
|
233
245
|
};
|
|
234
|
-
},
|
|
246
|
+
}, fe = (e, t) => {
|
|
235
247
|
let n = [];
|
|
236
248
|
for (let r of N(t, "itemref")) {
|
|
237
249
|
let t = r.attr.idref;
|
|
@@ -252,25 +264,25 @@ var v = async (e, t = {}) => n(e, (e) => e.isDir ? {
|
|
|
252
264
|
});
|
|
253
265
|
}
|
|
254
266
|
return n;
|
|
255
|
-
},
|
|
267
|
+
}, pe = (e) => {
|
|
256
268
|
let t = new h(e), n = M(t, "manifest"), r = M(t, "spine"), i = M(t, "metadata"), a = t.attr["unique-identifier"]?.trim(), o = a !== void 0 && a.length > 0 ? a : void 0, s = [], c = [];
|
|
257
269
|
if (n !== void 0) {
|
|
258
|
-
let { items: e, byId: t } =
|
|
259
|
-
s = e, r !== void 0 && (c =
|
|
270
|
+
let { items: e, byId: t } = de(n);
|
|
271
|
+
s = e, r !== void 0 && (c = fe(t, r));
|
|
260
272
|
}
|
|
261
|
-
let l = r?.attr["page-progression-direction"], u = l !== void 0 && l.trim().length > 0 ? l : void 0, d = r?.attr.toc, f = d !== void 0 && d.trim().length > 0 ? d.trim() : void 0, p, m, g, _, v, y = [], b = [], x = [], S = [], C, w, T, E = [], D = [];
|
|
262
|
-
i !== void 0 && (p =
|
|
263
|
-
let O =
|
|
273
|
+
let l = r?.attr["page-progression-direction"], u = l !== void 0 && l.trim().length > 0 ? l : void 0, d = r?.attr.toc, f = d !== void 0 && d.trim().length > 0 ? d.trim() : void 0, p = [], m, g, _, v, y = [], b = [], x = [], S = [], C, w, T, E = [], D = [];
|
|
274
|
+
i !== void 0 && (p = re(i), m = P(i, "publisher"), g = P(i, "description"), _ = P(i, "rights"), v = P(i, "date"), y = F(i, "creator"), x = F(i, "language"), S = F(i, "subject"), C = L(i, "rendition:layout"), w = L(i, "rendition:flow"), T = L(i, "rendition:spread"), E = oe(i), b = ce(i, E), D.push(...ne(i, o)));
|
|
275
|
+
let O = ae({
|
|
264
276
|
manifestItems: s,
|
|
265
277
|
metadataEl: i
|
|
266
|
-
}), k =
|
|
278
|
+
}), k = le(t);
|
|
267
279
|
return {
|
|
268
280
|
kind: "opf",
|
|
269
281
|
manifestItems: s,
|
|
270
282
|
spineRows: c,
|
|
271
283
|
spineTocIdref: f,
|
|
272
284
|
identifiers: D,
|
|
273
|
-
|
|
285
|
+
titles: p,
|
|
274
286
|
creators: y,
|
|
275
287
|
contributors: b,
|
|
276
288
|
publisher: m,
|
|
@@ -293,24 +305,24 @@ var v = async (e, t = {}) => n(e, (e) => e.isDir ? {
|
|
|
293
305
|
async function R(e) {
|
|
294
306
|
let { data: t, basePath: n } = O(e) || {};
|
|
295
307
|
if (!(!t || t.dir)) return {
|
|
296
|
-
opf:
|
|
308
|
+
opf: pe(await D(t)),
|
|
297
309
|
basePath: n
|
|
298
310
|
};
|
|
299
311
|
}
|
|
300
312
|
//#endregion
|
|
301
313
|
//#region src/metadata/apple/parse.ts
|
|
302
|
-
var z = "com.apple.ibooks.display-options.xml",
|
|
314
|
+
var z = "com.apple.ibooks.display-options.xml", me = (e) => e.childrenNamed("option").map((e) => ({
|
|
303
315
|
name: e.attr?.name,
|
|
304
316
|
value: e.val
|
|
305
|
-
})),
|
|
317
|
+
})), B = (e) => {
|
|
306
318
|
let t = new h(e);
|
|
307
319
|
if (t.name?.toLowerCase() !== "display_options") return { kind: "apple" };
|
|
308
320
|
let n = t.childNamed("platform");
|
|
309
321
|
return {
|
|
310
322
|
kind: "apple",
|
|
311
|
-
displayOptions: { ...n === void 0 ? {} : { platform: { options:
|
|
323
|
+
displayOptions: { ...n === void 0 ? {} : { platform: { options: me(n) } } }
|
|
312
324
|
};
|
|
313
|
-
},
|
|
325
|
+
}, V = "ComicInfo.xml", he = /* @__PURE__ */ "AgeRating.AlternateCount.AlternateNumber.AlternateSeries.BlackAndWhite.Characters.Colorist.CommunityRating.Count.CoverArtist.Day.Editor.Format.Genre.GTIN.Imprint.Inker.LanguageISO.Letterer.Locations.MainCharacterOrTeam.Manga.Month.Notes.Number.PageCount.Penciller.Publisher.Review.ScanInformation.Series.SeriesGroup.StoryArc.StoryArcNumber.Summary.Tags.Teams.Title.Translator.Volume.Web.Writer.Year".split("."), ge = /* @__PURE__ */ new Set(["Pages", "ComicInfo"]), _e = (e) => e.children.some((e) => e.type === "element"), ve = (e) => {
|
|
314
326
|
let t = e.val.trim();
|
|
315
327
|
return t.length > 0 ? t : void 0;
|
|
316
328
|
}, ye = (e) => {
|
|
@@ -319,7 +331,7 @@ var z = "com.apple.ibooks.display-options.xml", pe = (e) => e.childrenNamed("opt
|
|
|
319
331
|
t = new h(e);
|
|
320
332
|
} catch (e) {
|
|
321
333
|
let t = e instanceof Error ? e.message : String(e);
|
|
322
|
-
throw Error(`${
|
|
334
|
+
throw Error(`${V} is malformed: ${t}`, { cause: e });
|
|
323
335
|
}
|
|
324
336
|
let n = {};
|
|
325
337
|
return t.eachChild((e) => {
|
|
@@ -330,21 +342,21 @@ var z = "com.apple.ibooks.display-options.xml", pe = (e) => e.childrenNamed("opt
|
|
|
330
342
|
kind: "comicInfo",
|
|
331
343
|
...n
|
|
332
344
|
};
|
|
333
|
-
},
|
|
345
|
+
}, be = "com.kobobooks.display-options.xml", xe = (e) => {
|
|
334
346
|
let t = e.childNamed("platform");
|
|
335
347
|
if (!t) return {};
|
|
336
348
|
for (let e of t.childrenNamed("option")) if (e.attr?.name === "fixed-layout") return e.val.trim().toLowerCase() === "true" ? { renditionLayout: "pre-paginated" } : {};
|
|
337
349
|
return {};
|
|
338
|
-
},
|
|
350
|
+
}, Se = (e) => {
|
|
339
351
|
let t = new h(e);
|
|
340
352
|
return t.name?.toLowerCase() === "display_options" ? {
|
|
341
353
|
kind: "kobo",
|
|
342
|
-
...
|
|
354
|
+
...xe(t)
|
|
343
355
|
} : { kind: "kobo" };
|
|
344
356
|
}, H = (e) => {
|
|
345
357
|
let t = Object.entries(e).filter(([, e]) => e !== void 0);
|
|
346
358
|
return Object.fromEntries(t);
|
|
347
|
-
},
|
|
359
|
+
}, Ce = (e) => {
|
|
348
360
|
let t = [];
|
|
349
361
|
for (let n of e.split("/")) if (n !== ".") {
|
|
350
362
|
if (n === "..") {
|
|
@@ -354,12 +366,12 @@ var z = "com.apple.ibooks.display-options.xml", pe = (e) => e.childrenNamed("opt
|
|
|
354
366
|
t.push(n);
|
|
355
367
|
}
|
|
356
368
|
return t.join("/");
|
|
357
|
-
},
|
|
369
|
+
}, we = (e, t) => /^https?:\/\//.test(e) ? e : Ce(t ? `${t}/${e}` : e), Te = (e) => {
|
|
358
370
|
let t = e?.trim().toLowerCase();
|
|
359
371
|
return t === "reflowable" || t === "pre-paginated" ? t : void 0;
|
|
360
|
-
},
|
|
361
|
-
let r =
|
|
362
|
-
let r =
|
|
372
|
+
}, Ee = (e, { opf: t, basePath: n }) => {
|
|
373
|
+
let r = Te(t.renditionLayoutMeta), i = t.spineRows.map((t) => {
|
|
374
|
+
let r = we(t.href, n);
|
|
363
375
|
return {
|
|
364
376
|
row: t,
|
|
365
377
|
uri: r,
|
|
@@ -377,11 +389,11 @@ var z = "com.apple.ibooks.display-options.xml", pe = (e) => e.childrenNamed("opt
|
|
|
377
389
|
pageSpreadRight: e.pageSpreadRight,
|
|
378
390
|
progressionWeight: a > 0 ? (i?.size ?? 0) / a : 1 / t.spineRows.length
|
|
379
391
|
}));
|
|
380
|
-
},
|
|
392
|
+
}, De = V.toLowerCase(), Oe = z.toLowerCase(), ke = (e) => {
|
|
381
393
|
let t = e.basename.toLowerCase();
|
|
382
|
-
return t ===
|
|
383
|
-
},
|
|
384
|
-
let t = e.records.filter(x).filter((e) => !
|
|
394
|
+
return t === De || t === Oe || e.uri.endsWith("com.kobobooks.display-options.xml") || t.endsWith(".db");
|
|
395
|
+
}, Ae = (e) => {
|
|
396
|
+
let t = e.records.filter(x).filter((e) => !ke(e));
|
|
385
397
|
return t.map((e) => {
|
|
386
398
|
let n = f(e.encodingFormat ?? "") || o(e.basename);
|
|
387
399
|
return H({
|
|
@@ -394,17 +406,17 @@ var z = "com.apple.ibooks.display-options.xml", pe = (e) => e.childrenNamed("opt
|
|
|
394
406
|
});
|
|
395
407
|
}, U = async (e, { opf: t } = {}) => {
|
|
396
408
|
let n = t ?? await R(e).catch(() => void 0);
|
|
397
|
-
return n ?
|
|
398
|
-
},
|
|
409
|
+
return n ? Ee(e, n) : Ae(e);
|
|
410
|
+
}, je = (e, t) => {
|
|
399
411
|
let n = C(e, t);
|
|
400
412
|
if (n !== void 0) return f(n.encodingFormat ?? "") || o(n.basename);
|
|
401
|
-
},
|
|
413
|
+
}, Me = async (e, { opf: t, readingOrder: n } = {}) => {
|
|
402
414
|
let r = t ?? await R(e).catch(() => void 0);
|
|
403
415
|
if (r !== void 0 && r.opf.coverHref !== void 0) {
|
|
404
|
-
let t =
|
|
416
|
+
let t = we(r.opf.coverHref, r.basePath);
|
|
405
417
|
return H({
|
|
406
418
|
uri: t,
|
|
407
|
-
mediaType:
|
|
419
|
+
mediaType: je(e, t),
|
|
408
420
|
confidence: "derived"
|
|
409
421
|
});
|
|
410
422
|
}
|
|
@@ -414,10 +426,10 @@ var z = "com.apple.ibooks.display-options.xml", pe = (e) => e.childrenNamed("opt
|
|
|
414
426
|
mediaType: i.mediaType,
|
|
415
427
|
confidence: "assumed"
|
|
416
428
|
});
|
|
417
|
-
},
|
|
429
|
+
}, Ne = (e) => {
|
|
418
430
|
let t = e.descendantWithPath("head")?.childrenNamed("meta").find((e) => e.attr.name === "viewport");
|
|
419
431
|
return !!(t && t.attr.name === "viewport");
|
|
420
|
-
},
|
|
432
|
+
}, Pe = async (e, n) => {
|
|
421
433
|
if (n.length === 0) return !1;
|
|
422
434
|
for (let r of n) {
|
|
423
435
|
if (!d({
|
|
@@ -427,20 +439,20 @@ var z = "com.apple.ibooks.display-options.xml", pe = (e) => e.childrenNamed("opt
|
|
|
427
439
|
let n = C(e, r.uri);
|
|
428
440
|
if (!n || !x(n)) return !1;
|
|
429
441
|
try {
|
|
430
|
-
if (!
|
|
442
|
+
if (!Ne(new h(await D(n)))) return !1;
|
|
431
443
|
} catch (e) {
|
|
432
444
|
return t.error(`layout scan: unable to inspect ${r.uri}`, e), !1;
|
|
433
445
|
}
|
|
434
446
|
}
|
|
435
447
|
return !0;
|
|
436
|
-
},
|
|
437
|
-
async function
|
|
438
|
-
let t = e.records.find((e) => x(e) && e.basename.toLowerCase() ===
|
|
439
|
-
if (t) return
|
|
448
|
+
}, Fe = z.toLowerCase();
|
|
449
|
+
async function Ie(e) {
|
|
450
|
+
let t = e.records.find((e) => x(e) && e.basename.toLowerCase() === Fe);
|
|
451
|
+
if (t) return B(await D(t));
|
|
440
452
|
}
|
|
441
453
|
//#endregion
|
|
442
454
|
//#region src/metadata/apple/resolve.ts
|
|
443
|
-
var
|
|
455
|
+
var Le = { displayOptions: "apple.options" }, Re = (e) => {
|
|
444
456
|
let t = e.displayOptions?.platform?.options, n = t?.find((e) => e.name === "fixed-layout")?.value.trim().toLowerCase(), r = n === "true" || n !== "false" && void 0, i = H({
|
|
445
457
|
fixedLayout: r,
|
|
446
458
|
options: t !== void 0 && t.length > 0 ? t.map(({ name: e, value: t }) => H({
|
|
@@ -452,24 +464,24 @@ var Pe = { displayOptions: "apple.options" }, K = (e) => {
|
|
|
452
464
|
renditionLayout: r === !0 ? "pre-paginated" : void 0,
|
|
453
465
|
apple: Object.keys(i).length > 0 ? i : void 0
|
|
454
466
|
});
|
|
455
|
-
},
|
|
467
|
+
}, ze = V.toLowerCase(), W = (e) => e.records.find((e) => x(e) && e.basename.toLowerCase() === ze), Be = [
|
|
456
468
|
"Unknown",
|
|
457
469
|
"No",
|
|
458
470
|
"Yes",
|
|
459
471
|
"YesAndRightToLeft"
|
|
460
|
-
],
|
|
461
|
-
for (let t of
|
|
472
|
+
], Ve = (e) => {
|
|
473
|
+
for (let t of Be) if (t === e) return !0;
|
|
462
474
|
return !1;
|
|
463
475
|
};
|
|
464
476
|
//#endregion
|
|
465
477
|
//#region src/metadata/comicInfo/readArchiveComicInfo.ts
|
|
466
|
-
async function
|
|
467
|
-
let t =
|
|
478
|
+
async function He(e) {
|
|
479
|
+
let t = W(e);
|
|
468
480
|
if (t) return ye(await D(t));
|
|
469
481
|
}
|
|
470
482
|
//#endregion
|
|
471
483
|
//#region src/metadata/comicInfo/resolve.ts
|
|
472
|
-
var
|
|
484
|
+
var Ue = {
|
|
473
485
|
AgeRating: "comic.ageRating",
|
|
474
486
|
AlternateCount: "comic.alternateSeries",
|
|
475
487
|
AlternateNumber: "comic.alternateSeries",
|
|
@@ -507,52 +519,52 @@ var ze = {
|
|
|
507
519
|
Summary: "description",
|
|
508
520
|
Tags: "subjects",
|
|
509
521
|
Teams: "comic.teams",
|
|
510
|
-
Title: "
|
|
522
|
+
Title: "titles",
|
|
511
523
|
Translator: "contributors",
|
|
512
524
|
Volume: "comic.volume",
|
|
513
525
|
Web: "comic.web",
|
|
514
526
|
Writer: "contributors",
|
|
515
527
|
Year: "publication.edition.date"
|
|
516
|
-
},
|
|
528
|
+
}, We = (e) => {
|
|
517
529
|
switch (e.Manga) {
|
|
518
530
|
case "YesAndRightToLeft": return "rtl";
|
|
519
531
|
case "Yes":
|
|
520
532
|
case "No": return "ltr";
|
|
521
533
|
default: return;
|
|
522
534
|
}
|
|
523
|
-
},
|
|
535
|
+
}, G = (e) => {
|
|
524
536
|
if (e === void 0) return;
|
|
525
537
|
let t = e.trim();
|
|
526
538
|
return t.length > 0 ? t : void 0;
|
|
527
|
-
},
|
|
528
|
-
let t =
|
|
539
|
+
}, K = (e) => e === void 0 ? [] : e.split(",").map((e) => e.trim()).filter((e) => e.length > 0), q = (e) => {
|
|
540
|
+
let t = G(e);
|
|
529
541
|
if (t === void 0 || !/^\d+$/.test(t)) return;
|
|
530
542
|
let n = Number.parseInt(t, 10);
|
|
531
543
|
return Number.isFinite(n) ? n : void 0;
|
|
532
|
-
},
|
|
533
|
-
let t =
|
|
544
|
+
}, J = (e) => {
|
|
545
|
+
let t = G(e);
|
|
534
546
|
if (t === void 0 || !/^\d+(\.\d+)?$/.test(t)) return;
|
|
535
547
|
let n = Number.parseFloat(t);
|
|
536
548
|
return Number.isFinite(n) ? n : void 0;
|
|
537
|
-
},
|
|
538
|
-
let t =
|
|
549
|
+
}, Ge = (e) => {
|
|
550
|
+
let t = G(e)?.toLowerCase();
|
|
539
551
|
if (t === "yes") return !0;
|
|
540
552
|
if (t === "no") return !1;
|
|
541
|
-
},
|
|
553
|
+
}, Ke = (e) => {
|
|
542
554
|
switch (e.Manga) {
|
|
543
555
|
case "Yes":
|
|
544
556
|
case "YesAndRightToLeft": return !0;
|
|
545
557
|
case "No": return !1;
|
|
546
558
|
default: return;
|
|
547
559
|
}
|
|
548
|
-
},
|
|
549
|
-
let t =
|
|
560
|
+
}, qe = (e) => {
|
|
561
|
+
let t = q(e.Year), n = q(e.Month), r = q(e.Day);
|
|
550
562
|
if (!(t === void 0 && n === void 0 && r === void 0)) return {
|
|
551
563
|
...t === void 0 ? {} : { year: t },
|
|
552
564
|
...n === void 0 ? {} : { month: n },
|
|
553
565
|
...r === void 0 ? {} : { day: r }
|
|
554
566
|
};
|
|
555
|
-
},
|
|
567
|
+
}, Je = [
|
|
556
568
|
["Writer", "author"],
|
|
557
569
|
["Penciller", "penciler"],
|
|
558
570
|
["Inker", "inker"],
|
|
@@ -561,9 +573,9 @@ var ze = {
|
|
|
561
573
|
["CoverArtist", "coverArtist"],
|
|
562
574
|
["Editor", "editor"],
|
|
563
575
|
["Translator", "translator"]
|
|
564
|
-
],
|
|
576
|
+
], Ye = (e) => {
|
|
565
577
|
let t = /* @__PURE__ */ new Map();
|
|
566
|
-
for (let [n, r] of
|
|
578
|
+
for (let [n, r] of Je) for (let i of K(e[n])) {
|
|
567
579
|
let e = t.get(i);
|
|
568
580
|
e ? e.roles.includes(r) || e.roles.push(r) : t.set(i, {
|
|
569
581
|
name: i,
|
|
@@ -571,100 +583,100 @@ var ze = {
|
|
|
571
583
|
});
|
|
572
584
|
}
|
|
573
585
|
return [...t.values()];
|
|
574
|
-
},
|
|
575
|
-
let t =
|
|
576
|
-
|
|
577
|
-
|
|
578
|
-
|
|
579
|
-
total: X(e.Count)
|
|
586
|
+
}, Xe = (e) => {
|
|
587
|
+
let t = H({
|
|
588
|
+
name: G(e.Series),
|
|
589
|
+
position: J(e.Number),
|
|
590
|
+
total: q(e.Count)
|
|
580
591
|
});
|
|
581
|
-
|
|
582
|
-
|
|
592
|
+
return Object.keys(t).length > 0 ? t : void 0;
|
|
593
|
+
}, Ze = (e) => {
|
|
594
|
+
let t = G(e.AlternateSeries);
|
|
583
595
|
if (t !== void 0) return H({
|
|
584
596
|
name: t,
|
|
585
|
-
position:
|
|
586
|
-
total:
|
|
597
|
+
position: J(e.AlternateNumber),
|
|
598
|
+
total: q(e.AlternateCount)
|
|
587
599
|
});
|
|
588
|
-
},
|
|
589
|
-
let t =
|
|
600
|
+
}, Qe = (e) => {
|
|
601
|
+
let t = K(e.StoryArc);
|
|
590
602
|
if (t.length === 0) return [];
|
|
591
|
-
let n =
|
|
603
|
+
let n = K(e.StoryArcNumber);
|
|
592
604
|
return t.map((e, t) => H({
|
|
593
605
|
name: e,
|
|
594
|
-
position:
|
|
606
|
+
position: J(n[t])
|
|
595
607
|
}));
|
|
596
|
-
},
|
|
608
|
+
}, Y = (e) => e.length > 0 ? e : void 0, $e = (e) => (e.Web ?? "").split(/\s+/).filter((e) => e.length > 0), et = (e) => {
|
|
597
609
|
try {
|
|
598
610
|
let t = new URL(e);
|
|
599
611
|
return (t.protocol === "http:" || t.protocol === "https:") && t.hostname.length > 0;
|
|
600
612
|
} catch {
|
|
601
613
|
return !1;
|
|
602
614
|
}
|
|
603
|
-
},
|
|
615
|
+
}, tt = (e) => e.filter((e, t, n) => et(e) && n.indexOf(e) === t).map((e) => ({
|
|
604
616
|
value: e,
|
|
605
617
|
scheme: "URL"
|
|
606
|
-
})),
|
|
618
|
+
})), nt = (e, t) => {
|
|
607
619
|
let n = H({
|
|
608
|
-
manga:
|
|
609
|
-
blackAndWhite:
|
|
610
|
-
volume:
|
|
611
|
-
format:
|
|
612
|
-
ageRating:
|
|
613
|
-
communityRating:
|
|
614
|
-
notes:
|
|
615
|
-
review:
|
|
616
|
-
web:
|
|
617
|
-
scanInformation:
|
|
618
|
-
mainCharacterOrTeam:
|
|
619
|
-
characters:
|
|
620
|
-
teams:
|
|
621
|
-
locations:
|
|
622
|
-
storyArcs:
|
|
623
|
-
alternateSeries:
|
|
620
|
+
manga: Ke(e),
|
|
621
|
+
blackAndWhite: Ge(e.BlackAndWhite),
|
|
622
|
+
volume: q(e.Volume),
|
|
623
|
+
format: G(e.Format),
|
|
624
|
+
ageRating: G(e.AgeRating),
|
|
625
|
+
communityRating: J(e.CommunityRating),
|
|
626
|
+
notes: G(e.Notes),
|
|
627
|
+
review: G(e.Review),
|
|
628
|
+
web: Y(t),
|
|
629
|
+
scanInformation: G(e.ScanInformation),
|
|
630
|
+
mainCharacterOrTeam: G(e.MainCharacterOrTeam),
|
|
631
|
+
characters: Y(K(e.Characters)),
|
|
632
|
+
teams: Y(K(e.Teams)),
|
|
633
|
+
locations: Y(K(e.Locations)),
|
|
634
|
+
storyArcs: Y(Qe(e)),
|
|
635
|
+
alternateSeries: Ze(e)
|
|
624
636
|
});
|
|
625
637
|
return Object.keys(n).length > 0 ? n : void 0;
|
|
626
|
-
},
|
|
627
|
-
let t =
|
|
638
|
+
}, rt = (e) => {
|
|
639
|
+
let t = Xe(e), n = Y(K(e.SeriesGroup).map((e) => ({ name: e })));
|
|
628
640
|
if (!(t === void 0 && n === void 0)) return H({
|
|
629
641
|
series: t === void 0 ? void 0 : [t],
|
|
630
642
|
collection: n
|
|
631
643
|
});
|
|
632
|
-
},
|
|
633
|
-
let t = e.GTIN, n =
|
|
644
|
+
}, it = (e) => {
|
|
645
|
+
let t = e.GTIN, n = G(t), r = $e(e), i = [...n === void 0 ? [] : [{
|
|
634
646
|
value: n,
|
|
635
647
|
scheme: "GTIN"
|
|
636
|
-
}], ...
|
|
637
|
-
date:
|
|
638
|
-
publisher:
|
|
639
|
-
imprint:
|
|
640
|
-
});
|
|
648
|
+
}], ...tt(r)], a = G(e.LanguageISO), o = [...K(e.Genre), ...K(e.Tags)], s = H({
|
|
649
|
+
date: qe(e),
|
|
650
|
+
publisher: G(e.Publisher),
|
|
651
|
+
imprint: G(e.Imprint)
|
|
652
|
+
}), c = G(e.Title);
|
|
641
653
|
return H({
|
|
642
|
-
|
|
643
|
-
description:
|
|
654
|
+
titles: c === void 0 ? void 0 : [{ value: c }],
|
|
655
|
+
description: G(e.Summary),
|
|
644
656
|
publication: s.date !== void 0 || s.publisher !== void 0 || s.imprint !== void 0 ? { edition: s } : void 0,
|
|
645
657
|
languages: a === void 0 ? void 0 : [a],
|
|
646
|
-
subjects:
|
|
647
|
-
contributors:
|
|
648
|
-
readingDirection:
|
|
649
|
-
numberOfPages:
|
|
650
|
-
identifiers:
|
|
651
|
-
belongsTo:
|
|
652
|
-
comic:
|
|
658
|
+
subjects: Y(o),
|
|
659
|
+
contributors: Y(Ye(e)),
|
|
660
|
+
readingDirection: We(e),
|
|
661
|
+
numberOfPages: q(e.PageCount),
|
|
662
|
+
identifiers: Y(i),
|
|
663
|
+
belongsTo: rt(e),
|
|
664
|
+
comic: nt(e, r)
|
|
653
665
|
});
|
|
654
666
|
};
|
|
655
667
|
//#endregion
|
|
656
668
|
//#region src/metadata/kobo/readArchiveKobo.ts
|
|
657
|
-
async function
|
|
669
|
+
async function at(e) {
|
|
658
670
|
let n = e.records.filter((e) => x(e) && e.uri.endsWith("com.kobobooks.display-options.xml"));
|
|
659
671
|
if (n.length === 0) return;
|
|
660
672
|
let r;
|
|
661
673
|
for (let e of n) {
|
|
662
674
|
let n = await D(e);
|
|
663
675
|
try {
|
|
664
|
-
let { renditionLayout: e } =
|
|
676
|
+
let { renditionLayout: e } = Se(n);
|
|
665
677
|
e && (r = e);
|
|
666
678
|
} catch (n) {
|
|
667
|
-
t.error(`Unable to parse ${
|
|
679
|
+
t.error(`Unable to parse ${be} (${e.uri})`, n);
|
|
668
680
|
}
|
|
669
681
|
}
|
|
670
682
|
return {
|
|
@@ -674,29 +686,29 @@ async function tt(e) {
|
|
|
674
686
|
}
|
|
675
687
|
//#endregion
|
|
676
688
|
//#region src/metadata/kobo/resolve.ts
|
|
677
|
-
var
|
|
689
|
+
var ot = { renditionLayout: "renditionLayout" }, st = (e) => H({
|
|
678
690
|
renditionLayout: e.renditionLayout,
|
|
679
691
|
kobo: e.renditionLayout === void 0 ? void 0 : { fixedLayout: e.renditionLayout === "pre-paginated" }
|
|
680
|
-
}),
|
|
692
|
+
}), ct = async ({ archive: e, archiveOpf: t }) => {
|
|
681
693
|
if (!t) return [];
|
|
682
694
|
let { opf: n, basePath: r } = t, { spineRows: i } = n;
|
|
683
695
|
return e.records.filter((e) => i.find((t) => r ? `${r}/${t.href}` === e.uri : `${t.href}` === e.uri));
|
|
684
|
-
},
|
|
696
|
+
}, lt = (e) => e.toLowerCase().endsWith(".opf"), ut = (e) => e.records.some((e) => !e.dir && (lt(e.basename) || lt(e.uri))), dt = /* @__PURE__ */ new Set([
|
|
685
697
|
8,
|
|
686
698
|
12,
|
|
687
699
|
13,
|
|
688
700
|
14
|
|
689
|
-
]),
|
|
701
|
+
]), ft = (e) => {
|
|
690
702
|
if (e == null) return;
|
|
691
703
|
let t = String(e).replace(/\D/g, "");
|
|
692
|
-
if (!(t.length === 0 || !
|
|
693
|
-
},
|
|
704
|
+
if (!(t.length === 0 || !dt.has(t.length))) return t;
|
|
705
|
+
}, pt = /(?:97[89])?\d{9}[\dXx]/, mt = (e) => {
|
|
694
706
|
if (e == null) return;
|
|
695
707
|
let t = String(e).trim().replace(/^urn:isbn:/i, "").replace(/^isbn[:\s-]*/i, ""), n = t.replace(/[^0-9Xx]/g, "");
|
|
696
708
|
if (n.length === 10 || n.length === 13) return n.toUpperCase();
|
|
697
|
-
let r = t.match(
|
|
709
|
+
let r = t.match(pt);
|
|
698
710
|
if (r) return r[0].toUpperCase();
|
|
699
|
-
},
|
|
711
|
+
}, ht = (e) => {
|
|
700
712
|
if (e === void 0) return;
|
|
701
713
|
let t = e.trim().match(/^(\d{4})(?:-(\d{2})(?:-(\d{2}))?)?/);
|
|
702
714
|
if (t === null) return;
|
|
@@ -706,12 +718,12 @@ var nt = { renditionLayout: "renditionLayout" }, rt = (e) => H({
|
|
|
706
718
|
...r === void 0 ? {} : { month: Number.parseInt(r, 10) },
|
|
707
719
|
...i === void 0 ? {} : { day: Number.parseInt(i, 10) }
|
|
708
720
|
};
|
|
709
|
-
},
|
|
721
|
+
}, gt = {
|
|
710
722
|
manifestItems: "readingOrder",
|
|
711
723
|
spineRows: "readingOrder",
|
|
712
724
|
spineTocIdref: "toc",
|
|
713
725
|
identifiers: "identifiers",
|
|
714
|
-
|
|
726
|
+
titles: "titles",
|
|
715
727
|
creators: "contributors",
|
|
716
728
|
contributors: "contributors",
|
|
717
729
|
publisher: "publication.edition.publisher",
|
|
@@ -727,15 +739,15 @@ var nt = { renditionLayout: "renditionLayout" }, rt = (e) => H({
|
|
|
727
739
|
pageProgressionDirection: "readingDirection",
|
|
728
740
|
guide: "guide",
|
|
729
741
|
metas: "properties"
|
|
730
|
-
},
|
|
742
|
+
}, _t = (e) => {
|
|
731
743
|
let t = e.trim();
|
|
732
744
|
if (/^https?:\/\//i.test(t)) try {
|
|
733
745
|
let e = new URL(t);
|
|
734
746
|
if ((e.protocol === "http:" || e.protocol === "https:") && e.hostname.length > 0) return "URL";
|
|
735
747
|
} catch {}
|
|
736
|
-
let n =
|
|
737
|
-
return n !== void 0 && (n.length === 10 || /^97[89]/.test(n)) ? "ISBN" :
|
|
738
|
-
},
|
|
748
|
+
let n = mt(t);
|
|
749
|
+
return n !== void 0 && (n.length === 10 || /^97[89]/.test(n)) ? "ISBN" : ft(t) === void 0 ? "Unknown" : "GTIN";
|
|
750
|
+
}, vt = (e) => {
|
|
739
751
|
switch (e.trim().toLowerCase()) {
|
|
740
752
|
case "isbn": return "ISBN";
|
|
741
753
|
case "gtin": return "GTIN";
|
|
@@ -747,7 +759,7 @@ var nt = { renditionLayout: "renditionLayout" }, rt = (e) => H({
|
|
|
747
759
|
case "unknown": return "Unknown";
|
|
748
760
|
default: return e.trim();
|
|
749
761
|
}
|
|
750
|
-
},
|
|
762
|
+
}, yt = {
|
|
751
763
|
art: "artist",
|
|
752
764
|
aut: "author",
|
|
753
765
|
clr: "colorist",
|
|
@@ -756,14 +768,14 @@ var nt = { renditionLayout: "renditionLayout" }, rt = (e) => H({
|
|
|
756
768
|
ill: "illustrator",
|
|
757
769
|
nrt: "narrator",
|
|
758
770
|
trl: "translator"
|
|
759
|
-
},
|
|
760
|
-
let t = e.roles.map((e) =>
|
|
771
|
+
}, bt = (e) => e.contributors.map((e) => {
|
|
772
|
+
let t = e.roles.map((e) => yt[e.trim().toLowerCase()] ?? e);
|
|
761
773
|
return H({
|
|
762
774
|
name: e.name,
|
|
763
775
|
roles: t.length > 0 ? t : [e.source === "creator" ? "author" : "contributor"],
|
|
764
776
|
sortAs: e.fileAs
|
|
765
777
|
});
|
|
766
|
-
}),
|
|
778
|
+
}), X = (e, t) => e.refines !== void 0 && e.refines.replace(/^#/, "") === t, xt = {
|
|
767
779
|
"02": "ISBN",
|
|
768
780
|
"03": "GTIN",
|
|
769
781
|
"04": "UPC",
|
|
@@ -779,24 +791,49 @@ var nt = { renditionLayout: "renditionLayout" }, rt = (e) => H({
|
|
|
779
791
|
26: "DOI",
|
|
780
792
|
34: "GTIN",
|
|
781
793
|
35: "ARK"
|
|
782
|
-
},
|
|
794
|
+
}, St = (e) => {
|
|
783
795
|
let t = e?.value?.trim();
|
|
784
|
-
if (!(t === void 0 || t.length === 0)) return e?.scheme?.trim().toLowerCase() === "onix:codelist5" ?
|
|
785
|
-
},
|
|
796
|
+
if (!(t === void 0 || t.length === 0)) return e?.scheme?.trim().toLowerCase() === "onix:codelist5" ? xt[t] ?? t : t;
|
|
797
|
+
}, Ct = (e, t) => {
|
|
786
798
|
let n = e.id;
|
|
787
|
-
if (n !== void 0) return
|
|
788
|
-
},
|
|
799
|
+
if (n !== void 0) return St(t.find((e) => e.property === "identifier-type" && X(e, n) && e.value !== void 0));
|
|
800
|
+
}, wt = (e) => {
|
|
789
801
|
let t = e?.trim();
|
|
790
802
|
if (t === void 0 || !/^\d+(\.\d+)?$/.test(t)) return;
|
|
791
803
|
let n = Number.parseFloat(t);
|
|
792
804
|
return Number.isFinite(n) ? n : void 0;
|
|
793
|
-
},
|
|
805
|
+
}, Tt = (e) => {
|
|
806
|
+
let t = e?.trim();
|
|
807
|
+
if (t === void 0 || !/^\d+$/.test(t)) return;
|
|
808
|
+
let n = Number.parseInt(t, 10);
|
|
809
|
+
return Number.isFinite(n) ? n : void 0;
|
|
810
|
+
}, Z = (e) => {
|
|
811
|
+
let t = e?.trim();
|
|
812
|
+
return t !== void 0 && t.length > 0 ? t : void 0;
|
|
813
|
+
}, Q = (e, t, n) => t === void 0 ? void 0 : e.find((e) => X(e, t) && e.property === n && e.value !== void 0)?.value, Et = (e) => e.titles.map((t) => H({
|
|
814
|
+
value: t.value,
|
|
815
|
+
type: Z(Q(e.metas, t.id, "title-type"))?.toLowerCase(),
|
|
816
|
+
displaySeq: Tt(Q(e.metas, t.id, "display-seq")),
|
|
817
|
+
sortAs: Z(Q(e.metas, t.id, "file-as"))
|
|
818
|
+
})), Dt = (e, t) => {
|
|
819
|
+
if (t === void 0) return;
|
|
820
|
+
let n = e.flatMap((n) => {
|
|
821
|
+
if (!X(n, t) || n.property !== "dcterms:identifier") return [];
|
|
822
|
+
let r = Z(n.value);
|
|
823
|
+
return r === void 0 ? [] : [{
|
|
824
|
+
value: r,
|
|
825
|
+
scheme: vt(St(e.find((e) => n.id !== void 0 && X(e, n.id) && e.property === "identifier-type")) ?? _t(r))
|
|
826
|
+
}];
|
|
827
|
+
});
|
|
828
|
+
return n.length > 0 ? n : void 0;
|
|
829
|
+
}, Ot = (e) => {
|
|
794
830
|
let t = [], n = [];
|
|
795
831
|
for (let r of e) {
|
|
796
832
|
if (r.property !== "belongs-to-collection" || r.value === void 0) continue;
|
|
797
|
-
let i = r.id, a = (t) =>
|
|
833
|
+
let i = r.id, a = (t) => Q(e, i, t), o = a("collection-type")?.trim().toLowerCase(), s = H({
|
|
798
834
|
name: r.value,
|
|
799
|
-
|
|
835
|
+
identifiers: Dt(e, i),
|
|
836
|
+
position: wt(a("group-position"))
|
|
800
837
|
});
|
|
801
838
|
o === "series" ? t.push(s) : n.push(s);
|
|
802
839
|
}
|
|
@@ -804,55 +841,55 @@ var nt = { renditionLayout: "renditionLayout" }, rt = (e) => H({
|
|
|
804
841
|
let n = e.find((e) => e.name?.toLowerCase() === "calibre:series" && e.content !== void 0)?.content;
|
|
805
842
|
n !== void 0 && t.push(H({
|
|
806
843
|
name: n,
|
|
807
|
-
position:
|
|
844
|
+
position: wt(e.find((e) => e.name?.toLowerCase() === "calibre:series_index")?.content)
|
|
808
845
|
}));
|
|
809
846
|
}
|
|
810
847
|
return {
|
|
811
848
|
series: t,
|
|
812
849
|
collection: n
|
|
813
850
|
};
|
|
814
|
-
},
|
|
851
|
+
}, kt = (e) => {
|
|
815
852
|
let t = e?.trim();
|
|
816
853
|
if (t === "scrolled-continuous" || t === "scrolled-doc" || t === "paginated" || t === "auto") return t;
|
|
817
|
-
},
|
|
854
|
+
}, At = (e) => {
|
|
818
855
|
let t = e?.trim();
|
|
819
856
|
if (t === "none" || t === "landscape" || t === "portrait" || t === "both" || t === "auto") return t;
|
|
820
|
-
},
|
|
821
|
-
let t = e.pageProgressionDirection?.trim().toLowerCase(), n = t === "ltr" || t === "rtl" ? t : void 0, r = e.renditionLayoutMeta?.trim().toLowerCase(), i = r === "reflowable" || r === "pre-paginated" ? r : void 0, a =
|
|
822
|
-
series:
|
|
823
|
-
collection:
|
|
824
|
-
}) : void 0,
|
|
825
|
-
date:
|
|
857
|
+
}, jt = (e) => {
|
|
858
|
+
let t = e.pageProgressionDirection?.trim().toLowerCase(), n = t === "ltr" || t === "rtl" ? t : void 0, r = e.renditionLayoutMeta?.trim().toLowerCase(), i = r === "reflowable" || r === "pre-paginated" ? r : void 0, a = bt(e), o = Et(e), { series: s, collection: c } = Ot(e.metas), l = s.length > 0 || c.length > 0 ? H({
|
|
859
|
+
series: s.length > 0 ? s : void 0,
|
|
860
|
+
collection: c.length > 0 ? c : void 0
|
|
861
|
+
}) : void 0, u = H({
|
|
862
|
+
date: ht(e.date),
|
|
826
863
|
publisher: e.publisher
|
|
827
864
|
});
|
|
828
865
|
return H({
|
|
829
|
-
|
|
866
|
+
titles: o.length > 0 ? o : void 0,
|
|
830
867
|
description: e.description,
|
|
831
|
-
publication:
|
|
868
|
+
publication: u.date !== void 0 || u.publisher !== void 0 ? { edition: u } : void 0,
|
|
832
869
|
rights: e.rights,
|
|
833
870
|
languages: e.languages.length > 0 ? [...e.languages] : void 0,
|
|
834
871
|
subjects: e.subjects.length > 0 ? [...e.subjects] : void 0,
|
|
835
872
|
contributors: a.length > 0 ? a : void 0,
|
|
836
873
|
readingDirection: n,
|
|
837
874
|
renditionLayout: i,
|
|
838
|
-
renditionFlow:
|
|
839
|
-
renditionSpread:
|
|
875
|
+
renditionFlow: kt(e.renditionFlowMeta),
|
|
876
|
+
renditionSpread: At(e.renditionSpreadMeta),
|
|
840
877
|
identifiers: e.identifiers.length > 0 ? e.identifiers.map((t) => H({
|
|
841
878
|
value: t.value,
|
|
842
|
-
scheme:
|
|
879
|
+
scheme: vt(t.scheme ?? Ct(t, e.metas) ?? _t(t.value)),
|
|
843
880
|
unique: t.unique
|
|
844
881
|
})) : void 0,
|
|
845
|
-
belongsTo:
|
|
882
|
+
belongsTo: l,
|
|
846
883
|
properties: e.metas.length > 0 ? [...e.metas] : void 0
|
|
847
884
|
});
|
|
848
|
-
},
|
|
849
|
-
let t = e.opf === void 0 ? void 0 :
|
|
885
|
+
}, Mt = (e) => e.kind === "comicInfo" ? it(e) : e.kind === "kobo" ? st(e) : e.kind === "apple" ? Re(e) : jt(e), Nt = (e) => {
|
|
886
|
+
let t = e.opf === void 0 ? void 0 : jt(e.opf), n = e.comicInfo === void 0 ? void 0 : it(e.comicInfo), r = e.apple === void 0 ? void 0 : Re(e.apple), i = e.kobo === void 0 ? void 0 : st(e.kobo), a = [...t?.identifiers ?? [], ...n?.identifiers ?? []], o = H({
|
|
850
887
|
date: t?.publication?.edition?.date ?? n?.publication?.edition?.date,
|
|
851
888
|
publisher: t?.publication?.edition?.publisher ?? n?.publication?.edition?.publisher,
|
|
852
889
|
imprint: t?.publication?.edition?.imprint ?? n?.publication?.edition?.imprint
|
|
853
890
|
});
|
|
854
891
|
return H({
|
|
855
|
-
|
|
892
|
+
titles: t?.titles ?? n?.titles,
|
|
856
893
|
description: t?.description ?? n?.description,
|
|
857
894
|
publication: o.date !== void 0 || o.publisher !== void 0 || o.imprint !== void 0 ? { edition: o } : void 0,
|
|
858
895
|
rights: t?.rights,
|
|
@@ -871,7 +908,7 @@ var nt = { renditionLayout: "renditionLayout" }, rt = (e) => H({
|
|
|
871
908
|
apple: r?.apple,
|
|
872
909
|
kobo: i?.kobo
|
|
873
910
|
});
|
|
874
|
-
},
|
|
911
|
+
}, Pt = (e) => {
|
|
875
912
|
let t = [...e.records].sort((e, t) => p(e.uri, t.uri)), n = (e, t, r, i, a) => {
|
|
876
913
|
let o = e.find((e) => e.title === t), [s, ...c] = r;
|
|
877
914
|
return o ? s ? [...e.filter((e) => e !== o), {
|
|
@@ -900,71 +937,71 @@ var nt = { renditionLayout: "renditionLayout" }, rt = (e) => H({
|
|
|
900
937
|
let a = encodeURI(t.uri).replace(/#/g, "%23").replace(/\?/g, "%3F").replace(/\/$/, ""), o = t.uri.replace(/\/$/, "");
|
|
901
938
|
return n(e, r, i, a, o);
|
|
902
939
|
}, []);
|
|
903
|
-
},
|
|
940
|
+
}, Ft = (e) => e ? e.children.map((e) => e instanceof _ ? e.text : e instanceof g ? Ft(e) : "").join("").trim() : "", It = (e) => k(e.properties).includes("nav"), Lt = (e, { basePath: t }) => {
|
|
904
941
|
let n = {
|
|
905
942
|
contents: [],
|
|
906
943
|
path: "",
|
|
907
944
|
containerHref: "",
|
|
908
945
|
title: ""
|
|
909
946
|
}, r = e.childNamed("span") || e.childNamed("a");
|
|
910
|
-
n.title = (r?.attr.title || r?.val.trim() ||
|
|
947
|
+
n.title = (r?.attr.title || r?.val.trim() || Ft(r)) ?? "";
|
|
911
948
|
let i = r?.name;
|
|
912
949
|
i !== "a" && (r = e.descendantWithPath(`${i}.a`), r && (i = r.name.toLowerCase())), i === "a" && r?.attr.href && (n.path = m(t, r.attr.href), n.containerHref = n.path);
|
|
913
950
|
let a = e.childNamed("ol");
|
|
914
951
|
if (a) {
|
|
915
952
|
let e = a.childrenNamed("li");
|
|
916
|
-
e && e.length > 0 && (n.contents = e.map((e) =>
|
|
953
|
+
e && e.length > 0 && (n.contents = e.map((e) => Lt(e, { basePath: t })));
|
|
917
954
|
}
|
|
918
955
|
return n;
|
|
919
|
-
},
|
|
956
|
+
}, Rt = (e, { basePath: t }) => {
|
|
920
957
|
let n = [], r;
|
|
921
958
|
return e.descendantWithPath("body.nav.ol") ? r = e.descendantWithPath("body.nav.ol")?.children : e.descendantWithPath("body.section.nav.ol") && (r = e.descendantWithPath("body.section.nav.ol")?.children), r && r.length > 0 && r.filter((e) => e instanceof g && e.name === "li").forEach((e) => {
|
|
922
|
-
n.push(
|
|
959
|
+
n.push(Lt(e, { basePath: t }));
|
|
923
960
|
}), n;
|
|
924
|
-
},
|
|
925
|
-
let n = e.manifestItems.find(
|
|
961
|
+
}, zt = async (e, t) => {
|
|
962
|
+
let n = e.manifestItems.find(It);
|
|
926
963
|
if (n?.href) {
|
|
927
964
|
let e = t.records.find((e) => e.uri.endsWith(n.href));
|
|
928
|
-
if (e && !e.dir) return
|
|
965
|
+
if (e && !e.dir) return Rt(new h(await D(e)), { basePath: c(e.uri) });
|
|
929
966
|
}
|
|
930
|
-
},
|
|
967
|
+
}, Bt = (e, { basePath: t, prefix: n }) => {
|
|
931
968
|
let r = m(t, e?.childNamed(`${n}content`)?.attr.src || ""), i = {
|
|
932
969
|
title: e?.descendantWithPath(`${n}navLabel.${n}text`)?.val || "",
|
|
933
970
|
path: r,
|
|
934
971
|
containerHref: r,
|
|
935
972
|
contents: []
|
|
936
973
|
}, a = e.childrenNamed(`${n}navPoint`);
|
|
937
|
-
return a && a.length > 0 && (i.contents = a.map((e) =>
|
|
974
|
+
return a && a.length > 0 && (i.contents = a.map((e) => Bt(e, {
|
|
938
975
|
basePath: t,
|
|
939
976
|
prefix: n
|
|
940
977
|
}))), i;
|
|
941
|
-
},
|
|
978
|
+
}, Vt = (e, { basePath: t }) => {
|
|
942
979
|
let n = [], r = e.name, i = "";
|
|
943
980
|
return r.indexOf(":") !== -1 && (i = `${r.split(":")[0]}:`), e.childNamed(`${i}navMap`)?.childrenNamed(`${i}navPoint`).forEach((e) => {
|
|
944
|
-
n.push(
|
|
981
|
+
n.push(Bt(e, {
|
|
945
982
|
basePath: t,
|
|
946
983
|
prefix: i
|
|
947
984
|
}));
|
|
948
985
|
}), n;
|
|
949
|
-
},
|
|
986
|
+
}, Ht = async ({ opf: e, opfBasePath: t, archive: n }) => {
|
|
950
987
|
let r = e.spineTocIdref;
|
|
951
988
|
if (r) {
|
|
952
989
|
let i = e.manifestItems.find((e) => e.id === r);
|
|
953
990
|
if (i) {
|
|
954
991
|
let e = `${t}${t === "" ? "" : "/"}${i.href}`, r = n.records.find((t) => t.uri.endsWith(e));
|
|
955
|
-
if (r && !r.dir) return
|
|
992
|
+
if (r && !r.dir) return Vt(new h(await D(r)), { basePath: c(r.uri) });
|
|
956
993
|
}
|
|
957
994
|
}
|
|
958
|
-
},
|
|
995
|
+
}, Ut = async (e, { opf: t } = {}) => {
|
|
959
996
|
let n = t ?? await R(e);
|
|
960
|
-
if (n) return await
|
|
997
|
+
if (n) return await zt(n.opf, e) || await Ht({
|
|
961
998
|
opf: n.opf,
|
|
962
999
|
opfBasePath: n.basePath,
|
|
963
1000
|
archive: e
|
|
964
1001
|
}) || [];
|
|
965
|
-
let r =
|
|
1002
|
+
let r = Pt(e);
|
|
966
1003
|
return r.length === 0 ? void 0 : r;
|
|
967
|
-
},
|
|
1004
|
+
}, Wt = [
|
|
968
1005
|
"metadata",
|
|
969
1006
|
"readingOrder",
|
|
970
1007
|
"toc"
|
|
@@ -980,39 +1017,39 @@ var nt = { renditionLayout: "renditionLayout" }, rt = (e) => H({
|
|
|
980
1017
|
failed: !0
|
|
981
1018
|
};
|
|
982
1019
|
}
|
|
983
|
-
},
|
|
1020
|
+
}, Gt = (e) => {
|
|
984
1021
|
let t = (e) => e?.startsWith("audio/") === !0 || e?.startsWith("video/") === !0, n = e.filter((e) => e.renditionLayout === "pre-paginated" && !t(e.mediaType)).length;
|
|
985
1022
|
return n > 0 ? n : void 0;
|
|
986
|
-
},
|
|
1023
|
+
}, Kt = ({ archive: e, opf: t, comicInfo: n, apple: r, kobo: i }) => {
|
|
987
1024
|
let a = [];
|
|
988
|
-
return t !== void 0 && t.value === void 0 && (t.failed ||
|
|
989
|
-
},
|
|
990
|
-
let n = new Set(t.include ??
|
|
1025
|
+
return t !== void 0 && t.value === void 0 && (t.failed || ut(e)) && a.push("opf"), n?.failed && a.push("comicInfo"), r?.failed && a.push("apple"), i?.failed && a.push("kobo"), a;
|
|
1026
|
+
}, qt = 3, Jt = async (e, t = {}) => {
|
|
1027
|
+
let n = new Set(t.include ?? Wt), r = n.has("metadata"), i = n.has("sources"), a = n.has("readingOrder"), o = n.has("toc"), s = t.layoutScan === !0 && (r || a), c = r || i || a || o ? await $(() => R(e), "opf") : void 0, l = c?.value, u = r || i || s, d = u ? await $(() => He(e), "comicInfo") : void 0, f = d?.value, p = u ? await $(() => Ie(e), "apple") : void 0, m = p?.value, h = u ? await $(() => at(e), "kobo") : void 0, g = h?.value, _ = r || s ? Nt({
|
|
991
1028
|
opf: l?.opf,
|
|
992
1029
|
comicInfo: f,
|
|
993
1030
|
apple: m,
|
|
994
1031
|
kobo: g
|
|
995
1032
|
}) : void 0, v = a || s ? await U(e, { opf: l }) : void 0;
|
|
996
|
-
if (s && _ !== void 0 && v !== void 0 && _.renditionLayout === "reflowable" && v.every((e) => e.renditionLayout === "reflowable") && await
|
|
1033
|
+
if (s && _ !== void 0 && v !== void 0 && _.renditionLayout === "reflowable" && v.every((e) => e.renditionLayout === "reflowable") && await Pe(e, v) && (_ = {
|
|
997
1034
|
..._,
|
|
998
1035
|
renditionLayout: "pre-paginated"
|
|
999
1036
|
}, v = v.map((e) => ({
|
|
1000
1037
|
...e,
|
|
1001
1038
|
renditionLayout: "pre-paginated"
|
|
1002
1039
|
}))), r && _ !== void 0) {
|
|
1003
|
-
let t = v ?? await U(e, { opf: l }), n = await
|
|
1040
|
+
let t = v ?? await U(e, { opf: l }), n = await Me(e, {
|
|
1004
1041
|
opf: l,
|
|
1005
1042
|
readingOrder: t
|
|
1006
|
-
}), r = _.numberOfPages ??
|
|
1043
|
+
}), r = _.numberOfPages ?? Gt(t);
|
|
1007
1044
|
_ = H({
|
|
1008
1045
|
..._,
|
|
1009
1046
|
cover: n,
|
|
1010
1047
|
numberOfPages: r
|
|
1011
1048
|
});
|
|
1012
1049
|
}
|
|
1013
|
-
let y = o ? (await $(() =>
|
|
1014
|
-
version:
|
|
1015
|
-
unreadableSources:
|
|
1050
|
+
let y = o ? (await $(() => Ut(e, { opf: l }), "toc")).value : void 0, b = {
|
|
1051
|
+
version: qt,
|
|
1052
|
+
unreadableSources: Kt({
|
|
1016
1053
|
archive: e,
|
|
1017
1054
|
opf: c,
|
|
1018
1055
|
comicInfo: d,
|
|
@@ -1026,8 +1063,8 @@ var nt = { renditionLayout: "renditionLayout" }, rt = (e) => H({
|
|
|
1026
1063
|
apple: m,
|
|
1027
1064
|
kobo: g
|
|
1028
1065
|
})), b;
|
|
1029
|
-
};
|
|
1066
|
+
}, Yt = (e) => e?.titles?.[0]?.value;
|
|
1030
1067
|
//#endregion
|
|
1031
|
-
export { z as APPLE_IBOOKS_DISPLAY_OPTIONS_FILENAME,
|
|
1068
|
+
export { z as APPLE_IBOOKS_DISPLAY_OPTIONS_FILENAME, V as COMIC_INFO_FILENAME, he as COMIC_INFO_KNOWN_FIELDS, Be as COMIC_INFO_MANGA_VALUES, be as KOBO_DISPLAY_OPTIONS_FILENAME, Le as appleMetadataHomes, i as arrayBufferFileAccessors, r as blobFileAccessors, Ue as comicInfoMetadataHomes, e as createArchive, v as createArchiveFromArrayBufferList, n as createArchiveFromEntries, y as createArchiveFromText, b as createArchiveFromUrls, C as getArchiveFileRecordByUri, W as getArchiveHasComicInfo, E as getArchiveImageRecords, O as getArchiveOpfInfo, ct as getSpineItemFilesFromArchive, ut as isArchiveEpub, Ve as isComicInfoManga, S as isDirectoryRecord, x as isFileRecord, T as isImageRecord, ot as koboMetadataHomes, Yt as mainTitle, ft as normalizeGtin, mt as normalizeIsbn, gt as opfMetadataHomes, B as parseAppleDisplayOptionsXml, ye as parseComicInfo, Se as parseKoboXml, pe as parseOpf, ht as parseW3cDtfDate, Ie as readArchiveApple, He as readArchiveComicInfo, at as readArchiveKobo, R as readArchiveOpf, D as readRecordAsText, Pe as readingOrderDocumentsAllHaveViewport, Jt as resolveArchive, Me as resolveArchiveCover, Mt as resolveArchiveMetadata, U as resolveArchiveReadingOrder, Ut as resolveArchiveToc, Nt as resolveMetadata, k as tokenizeXmlSpaceSeparatedList };
|
|
1032
1069
|
|
|
1033
1070
|
//# sourceMappingURL=index.js.map
|