@prose-reader/archive-reader 1.360.0 → 1.362.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 +327 -304
- package/dist/index/index.js.map +1 -1
- package/dist/index.d.ts +5 -1
- package/dist/metadata/opf/identifierScheme.d.ts +2 -1
- package/dist/metadata/opf/opfNamespace.d.ts +5 -0
- package/dist/metadata/opf/opfNamespace.test.d.ts +1 -0
- package/dist/utils/inferIdentifierScheme.d.ts +3 -0
- package/dist/utils/inferIdentifierScheme.test.d.ts +1 -0
- package/package.json +3 -3
package/dist/index/index.js
CHANGED
|
@@ -97,11 +97,33 @@ var v = async (e, t = {}) => n(e, (e) => e.isDir ? {
|
|
|
97
97
|
data: t,
|
|
98
98
|
basePath: t?.uri.substring(0, t.uri.lastIndexOf("/")) || ""
|
|
99
99
|
};
|
|
100
|
-
}, O = (e) => e === void 0 || e.trim().length === 0 ? [] : e.trim().split(/\s+/).filter((e) => e.length > 0), k =
|
|
100
|
+
}, O = (e) => e === void 0 || e.trim().length === 0 ? [] : e.trim().split(/\s+/).filter((e) => e.length > 0), k = "http://www.idpf.org/2007/opf", te = "opf", A = "xmlns:", j = (e, t = {}) => {
|
|
101
|
+
let n;
|
|
102
|
+
for (let [r, i] of Object.entries(e)) {
|
|
103
|
+
if (!r.startsWith(A)) continue;
|
|
104
|
+
let e = r.slice(6), a = i?.trim();
|
|
105
|
+
e.length === 0 || a === void 0 || (n ??= { ...t }, n[e] = a);
|
|
106
|
+
}
|
|
107
|
+
return n ?? t;
|
|
108
|
+
}, ne = (e) => {
|
|
109
|
+
let t = Object.keys(e).filter(function(t) {
|
|
110
|
+
return e[t] === k;
|
|
111
|
+
});
|
|
112
|
+
return e[te] === void 0 ? [te, ...t] : t;
|
|
113
|
+
}, re = (e, t, n) => {
|
|
114
|
+
for (let r of n) for (let n of t) {
|
|
115
|
+
let t = e[`${n}:${r}`];
|
|
116
|
+
if (t !== void 0) return t;
|
|
117
|
+
}
|
|
118
|
+
for (let t of n) {
|
|
119
|
+
let n = e[t];
|
|
120
|
+
if (n !== void 0) return n;
|
|
121
|
+
}
|
|
122
|
+
}, ie = Object.freeze(["scheme", "Scheme"]), ae = Object.freeze([
|
|
101
123
|
"opf:scheme",
|
|
102
124
|
"opf:Scheme",
|
|
103
125
|
"scheme"
|
|
104
|
-
]),
|
|
126
|
+
]), oe = {
|
|
105
127
|
"02": "ISBN",
|
|
106
128
|
"03": "GTIN",
|
|
107
129
|
"04": "UPC",
|
|
@@ -117,15 +139,10 @@ var v = async (e, t = {}) => n(e, (e) => e.isDir ? {
|
|
|
117
139
|
26: "DOI",
|
|
118
140
|
34: "GTIN",
|
|
119
141
|
35: "ARK"
|
|
120
|
-
},
|
|
142
|
+
}, se = (e) => {
|
|
121
143
|
let t = e?.value?.trim();
|
|
122
|
-
if (!(t === void 0 || t.length === 0)) return e?.scheme?.trim().toLowerCase() === "onix:codelist5" ?
|
|
123
|
-
},
|
|
124
|
-
for (let t of k) {
|
|
125
|
-
let n = e[t];
|
|
126
|
-
if (n !== void 0) return n;
|
|
127
|
-
}
|
|
128
|
-
}, re = (e) => {
|
|
144
|
+
if (!(t === void 0 || t.length === 0)) return e?.scheme?.trim().toLowerCase() === "onix:codelist5" ? oe[t] ?? t : t;
|
|
145
|
+
}, ce = (e, t = ["opf"]) => re(e, t, ie), le = (e) => {
|
|
129
146
|
let t = O(e);
|
|
130
147
|
if (t.length === 0) return {};
|
|
131
148
|
let n;
|
|
@@ -137,30 +154,30 @@ var v = async (e, t = {}) => n(e, (e) => e.isDir ? {
|
|
|
137
154
|
...t.includes("page-spread-left") ? { pageSpreadLeft: !0 } : {},
|
|
138
155
|
...t.includes("page-spread-right") ? { pageSpreadRight: !0 } : {}
|
|
139
156
|
};
|
|
140
|
-
},
|
|
141
|
-
for (let n of e.children) if (
|
|
142
|
-
},
|
|
157
|
+
}, M = (e) => e.includes(":") ? e.slice(e.lastIndexOf(":") + 1) : e, ue = (e, t) => M(e).toLowerCase() === t.toLowerCase(), de = (e) => e.type === "element", N = (e, t) => {
|
|
158
|
+
for (let n of e.children) if (de(n) && ue(n.name, t)) return n;
|
|
159
|
+
}, P = (e, t) => {
|
|
143
160
|
let n = [];
|
|
144
|
-
for (let r of e.children)
|
|
161
|
+
for (let r of e.children) de(r) && ue(r.name, t) && n.push(r);
|
|
145
162
|
return n;
|
|
146
|
-
},
|
|
147
|
-
let
|
|
163
|
+
}, fe = (e, t, n) => {
|
|
164
|
+
let r = [];
|
|
148
165
|
return e.eachChild((e) => {
|
|
149
|
-
if (
|
|
150
|
-
let
|
|
151
|
-
if (
|
|
152
|
-
let
|
|
153
|
-
|
|
154
|
-
value:
|
|
155
|
-
...
|
|
156
|
-
...
|
|
157
|
-
...
|
|
166
|
+
if (M(e.name).toLowerCase() !== "identifier") return;
|
|
167
|
+
let i = e.val.trim();
|
|
168
|
+
if (i.length === 0) return;
|
|
169
|
+
let a = ce(e.attr, ne(j(e.attr, n)))?.trim(), o = e.attr.id?.trim(), s = o !== void 0 && o.length > 0 ? o : void 0;
|
|
170
|
+
r.push({
|
|
171
|
+
value: i,
|
|
172
|
+
...a !== void 0 && a.length > 0 ? { scheme: a } : {},
|
|
173
|
+
...s === void 0 ? {} : { id: s },
|
|
174
|
+
...s !== void 0 && s === t ? { unique: !0 } : {}
|
|
158
175
|
});
|
|
159
|
-
}),
|
|
160
|
-
},
|
|
176
|
+
}), r;
|
|
177
|
+
}, pe = (e) => {
|
|
161
178
|
let t = [];
|
|
162
179
|
return e.eachChild((e) => {
|
|
163
|
-
if (
|
|
180
|
+
if (M(e.name).toLowerCase() !== "title") return;
|
|
164
181
|
let n = e.val.trim();
|
|
165
182
|
if (n.length === 0) return;
|
|
166
183
|
let r = e.attr.id?.trim();
|
|
@@ -169,46 +186,49 @@ var v = async (e, t = {}) => n(e, (e) => e.isDir ? {
|
|
|
169
186
|
...r !== void 0 && r.length > 0 ? { id: r } : {}
|
|
170
187
|
});
|
|
171
188
|
}), t;
|
|
172
|
-
},
|
|
189
|
+
}, F = (e, t) => {
|
|
173
190
|
let n;
|
|
174
191
|
return e.eachChild((e) => {
|
|
175
|
-
if (n !== void 0 ||
|
|
192
|
+
if (n !== void 0 || M(e.name).toLowerCase() !== t.toLowerCase()) return;
|
|
176
193
|
let r = e.val.trim();
|
|
177
194
|
r.length > 0 && (n = r);
|
|
178
195
|
}), n;
|
|
179
|
-
},
|
|
196
|
+
}, I = (e, t) => {
|
|
180
197
|
let n = [];
|
|
181
198
|
return e.eachChild((e) => {
|
|
182
|
-
if (
|
|
199
|
+
if (M(e.name).toLowerCase() !== t.toLowerCase()) return;
|
|
183
200
|
let r = e.val.trim();
|
|
184
201
|
r.length > 0 && n.push(r);
|
|
185
202
|
}), n;
|
|
186
|
-
},
|
|
203
|
+
}, me = (e) => {
|
|
187
204
|
let t;
|
|
188
205
|
return e.eachChild((e) => {
|
|
189
|
-
if (t !== void 0 ||
|
|
206
|
+
if (t !== void 0 || M(e.name).toLowerCase() !== "meta" || e.attr.name?.toLowerCase() !== "cover") return;
|
|
190
207
|
let n = e.attr.content?.trim();
|
|
191
208
|
n !== void 0 && n.length > 0 && (t = n);
|
|
192
209
|
}), t;
|
|
193
|
-
},
|
|
210
|
+
}, he = ({ manifestItems: e, metadataEl: t }) => {
|
|
194
211
|
let n = (e) => e.mediaType?.toLowerCase().includes("image/") === !0, r = e.find((e) => n(e) ? O(e.properties).includes("cover-image") : !1);
|
|
195
212
|
if (r !== void 0) return r.href;
|
|
196
213
|
if (t !== void 0) {
|
|
197
|
-
let r =
|
|
214
|
+
let r = me(t);
|
|
198
215
|
if (r !== void 0) {
|
|
199
216
|
let t = e.find((e) => e.id === r && n(e));
|
|
200
217
|
if (t !== void 0) return t.href;
|
|
201
218
|
}
|
|
202
219
|
}
|
|
203
220
|
return e.find((e) => e.id.toLowerCase().includes("cover") && n(e))?.href;
|
|
204
|
-
},
|
|
221
|
+
}, L = (e, t) => {
|
|
205
222
|
let n = e.attr[t]?.trim();
|
|
206
223
|
return n !== void 0 && n.length > 0 ? n : void 0;
|
|
207
|
-
},
|
|
224
|
+
}, ge = (e, t, n) => {
|
|
225
|
+
let r = re(e.attr, t, [n])?.trim();
|
|
226
|
+
return r !== void 0 && r.length > 0 ? r : void 0;
|
|
227
|
+
}, _e = (e) => {
|
|
208
228
|
let t = [];
|
|
209
229
|
return e.eachChild((e) => {
|
|
210
|
-
if (
|
|
211
|
-
let n =
|
|
230
|
+
if (M(e.name).toLowerCase() !== "meta") return;
|
|
231
|
+
let n = L(e, "property"), r = L(e, "refines"), i = L(e, "scheme"), a = L(e, "id"), o = L(e, "name"), s = L(e, "content"), c = e.val.trim(), l = c.length > 0 ? c : void 0, u = {
|
|
212
232
|
...n === void 0 ? {} : { property: n },
|
|
213
233
|
...r === void 0 ? {} : { refines: r },
|
|
214
234
|
...i === void 0 ? {} : { scheme: i },
|
|
@@ -219,30 +239,30 @@ var v = async (e, t = {}) => n(e, (e) => e.isDir ? {
|
|
|
219
239
|
};
|
|
220
240
|
Object.keys(u).length !== 0 && t.push(u);
|
|
221
241
|
}), t;
|
|
222
|
-
},
|
|
223
|
-
let
|
|
242
|
+
}, ve = (e, t) => e.replace(/^#/, "") === t, ye = (e, t, n) => {
|
|
243
|
+
let r = [];
|
|
224
244
|
return e.eachChild((e) => {
|
|
225
|
-
let
|
|
226
|
-
if (
|
|
227
|
-
let
|
|
228
|
-
if (
|
|
229
|
-
let
|
|
230
|
-
|
|
231
|
-
name:
|
|
232
|
-
source:
|
|
233
|
-
...
|
|
234
|
-
roles:
|
|
235
|
-
...
|
|
245
|
+
let i = M(e.name).toLowerCase();
|
|
246
|
+
if (i !== "creator" && i !== "contributor") return;
|
|
247
|
+
let a = e.val.trim();
|
|
248
|
+
if (a.length === 0) return;
|
|
249
|
+
let o = L(e, "id"), s = (e) => o === void 0 ? [] : t.flatMap((t) => t.refines !== void 0 && ve(t.refines, o) && t.property === e && t.value !== void 0 ? [t.value] : []), c = ne(j(e.attr, n)), l = ge(e, c, "role"), u = [...l === void 0 ? [] : [l], ...s("role")], d = ge(e, c, "file-as") ?? s("file-as")[0];
|
|
250
|
+
r.push({
|
|
251
|
+
name: a,
|
|
252
|
+
source: i,
|
|
253
|
+
...o === void 0 ? {} : { id: o },
|
|
254
|
+
roles: u,
|
|
255
|
+
...d === void 0 ? {} : { fileAs: d }
|
|
236
256
|
});
|
|
237
|
-
}),
|
|
238
|
-
},
|
|
239
|
-
let n =
|
|
257
|
+
}), r;
|
|
258
|
+
}, be = (e, t) => {
|
|
259
|
+
let n = P(e, "meta").find((e) => e.attr.property === t)?.val;
|
|
240
260
|
if (!(n === void 0 || n.trim().length === 0)) return n;
|
|
241
|
-
},
|
|
242
|
-
let t =
|
|
261
|
+
}, xe = (e) => {
|
|
262
|
+
let t = N(e, "guide");
|
|
243
263
|
if (t === void 0) return [];
|
|
244
264
|
let n = [];
|
|
245
|
-
for (let e of
|
|
265
|
+
for (let e of P(t, "reference")) {
|
|
246
266
|
let t = e.attr.href?.trim();
|
|
247
267
|
t === void 0 || t.length === 0 || n.push({
|
|
248
268
|
href: t,
|
|
@@ -251,7 +271,7 @@ var v = async (e, t = {}) => n(e, (e) => e.isDir ? {
|
|
|
251
271
|
});
|
|
252
272
|
}
|
|
253
273
|
return n;
|
|
254
|
-
},
|
|
274
|
+
}, Se = (e) => {
|
|
255
275
|
let t = e.attr.id, n = e.attr.href;
|
|
256
276
|
if (t === void 0 || t.length === 0 || n === void 0 || n.length === 0) return;
|
|
257
277
|
let r = e.attr["media-type"], i = e.attr.properties?.trim();
|
|
@@ -261,24 +281,24 @@ var v = async (e, t = {}) => n(e, (e) => e.isDir ? {
|
|
|
261
281
|
...r !== void 0 && r.length > 0 ? { mediaType: r } : {},
|
|
262
282
|
...i !== void 0 && i.length > 0 ? { properties: i } : {}
|
|
263
283
|
};
|
|
264
|
-
},
|
|
284
|
+
}, Ce = (e) => {
|
|
265
285
|
let t = [], n = /* @__PURE__ */ new Map();
|
|
266
|
-
for (let r of
|
|
267
|
-
let e =
|
|
286
|
+
for (let r of P(e, "item")) {
|
|
287
|
+
let e = Se(r);
|
|
268
288
|
e !== void 0 && (t.push(e), n.set(e.id, e));
|
|
269
289
|
}
|
|
270
290
|
return {
|
|
271
291
|
items: t,
|
|
272
292
|
byId: n
|
|
273
293
|
};
|
|
274
|
-
},
|
|
294
|
+
}, we = (e, t) => {
|
|
275
295
|
let n = [];
|
|
276
|
-
for (let r of
|
|
296
|
+
for (let r of P(t, "itemref")) {
|
|
277
297
|
let t = r.attr.idref;
|
|
278
298
|
if (t === void 0 || t.trim().length === 0) continue;
|
|
279
299
|
let i = e.get(t);
|
|
280
300
|
if (i === void 0) continue;
|
|
281
|
-
let a =
|
|
301
|
+
let a = le(r.attr.properties);
|
|
282
302
|
n.push({
|
|
283
303
|
idref: t,
|
|
284
304
|
id: i.id,
|
|
@@ -292,68 +312,71 @@ var v = async (e, t = {}) => n(e, (e) => e.isDir ? {
|
|
|
292
312
|
});
|
|
293
313
|
}
|
|
294
314
|
return n;
|
|
295
|
-
},
|
|
296
|
-
let t = new h(e), n =
|
|
315
|
+
}, Te = (e) => {
|
|
316
|
+
let t = new h(e), n = N(t, "manifest"), r = N(t, "spine"), i = N(t, "metadata"), a = j(t.attr), o = t.attr["unique-identifier"]?.trim(), s = o !== void 0 && o.length > 0 ? o : void 0, c = [], l = [];
|
|
297
317
|
if (n !== void 0) {
|
|
298
|
-
let { items: e, byId: t } =
|
|
299
|
-
|
|
318
|
+
let { items: e, byId: t } = Ce(n);
|
|
319
|
+
c = e, r !== void 0 && (l = we(t, r));
|
|
320
|
+
}
|
|
321
|
+
let u = r?.attr["page-progression-direction"], d = u !== void 0 && u.trim().length > 0 ? u : void 0, f = r?.attr.toc, p = f !== void 0 && f.trim().length > 0 ? f.trim() : void 0, m = [], g, _, v, y, b = [], x = [], ee = [], S = [], C, w, T, E = [], D = [];
|
|
322
|
+
if (i !== void 0) {
|
|
323
|
+
let e = j(i.attr, a);
|
|
324
|
+
m = pe(i), g = F(i, "publisher"), _ = F(i, "description"), v = F(i, "rights"), y = F(i, "date"), b = I(i, "creator"), ee = I(i, "language"), S = I(i, "subject"), C = be(i, "rendition:layout"), w = be(i, "rendition:flow"), T = be(i, "rendition:spread"), E = _e(i), x = ye(i, E, e), D.push(...fe(i, s, e));
|
|
300
325
|
}
|
|
301
|
-
let
|
|
302
|
-
|
|
303
|
-
let D = ue({
|
|
304
|
-
manifestItems: s,
|
|
326
|
+
let O = he({
|
|
327
|
+
manifestItems: c,
|
|
305
328
|
metadataEl: i
|
|
306
|
-
}),
|
|
329
|
+
}), k = xe(t);
|
|
307
330
|
return {
|
|
308
331
|
kind: "opf",
|
|
309
|
-
manifestItems:
|
|
310
|
-
spineRows:
|
|
311
|
-
spineTocIdref:
|
|
312
|
-
identifiers:
|
|
313
|
-
titles:
|
|
314
|
-
creators:
|
|
315
|
-
contributors:
|
|
316
|
-
publisher:
|
|
317
|
-
description:
|
|
318
|
-
rights:
|
|
319
|
-
languages:
|
|
320
|
-
subjects:
|
|
321
|
-
date:
|
|
322
|
-
coverHref:
|
|
323
|
-
renditionLayoutMeta:
|
|
324
|
-
renditionFlowMeta:
|
|
325
|
-
renditionSpreadMeta:
|
|
326
|
-
pageProgressionDirection:
|
|
327
|
-
guide:
|
|
328
|
-
metas:
|
|
332
|
+
manifestItems: c,
|
|
333
|
+
spineRows: l,
|
|
334
|
+
spineTocIdref: p,
|
|
335
|
+
identifiers: D,
|
|
336
|
+
titles: m,
|
|
337
|
+
creators: b,
|
|
338
|
+
contributors: x,
|
|
339
|
+
publisher: g,
|
|
340
|
+
description: _,
|
|
341
|
+
rights: v,
|
|
342
|
+
languages: ee,
|
|
343
|
+
subjects: S,
|
|
344
|
+
date: y,
|
|
345
|
+
coverHref: O,
|
|
346
|
+
renditionLayoutMeta: C,
|
|
347
|
+
renditionFlowMeta: w,
|
|
348
|
+
renditionSpreadMeta: T,
|
|
349
|
+
pageProgressionDirection: d,
|
|
350
|
+
guide: k,
|
|
351
|
+
metas: E
|
|
329
352
|
};
|
|
330
353
|
};
|
|
331
354
|
//#endregion
|
|
332
355
|
//#region src/metadata/opf/readArchiveOpf.ts
|
|
333
|
-
async function
|
|
356
|
+
async function R(e) {
|
|
334
357
|
let { data: t, basePath: n } = D(e) || {};
|
|
335
358
|
if (!(!t || t.dir)) return {
|
|
336
|
-
opf:
|
|
359
|
+
opf: Te(await E(t)),
|
|
337
360
|
basePath: n
|
|
338
361
|
};
|
|
339
362
|
}
|
|
340
363
|
//#endregion
|
|
341
364
|
//#region src/metadata/apple/parse.ts
|
|
342
|
-
var
|
|
365
|
+
var Ee = "com.apple.ibooks.display-options.xml", De = (e) => e.childrenNamed("option").map((e) => ({
|
|
343
366
|
name: e.attr?.name,
|
|
344
367
|
value: e.val
|
|
345
|
-
})),
|
|
368
|
+
})), Oe = (e) => {
|
|
346
369
|
let t = new h(e);
|
|
347
370
|
if (t.name?.toLowerCase() !== "display_options") return { kind: "apple" };
|
|
348
371
|
let n = t.childNamed("platform");
|
|
349
372
|
return {
|
|
350
373
|
kind: "apple",
|
|
351
|
-
displayOptions: { ...n === void 0 ? {} : { platform: { options:
|
|
374
|
+
displayOptions: { ...n === void 0 ? {} : { platform: { options: De(n) } } }
|
|
352
375
|
};
|
|
353
|
-
}, z = "ComicInfo.xml",
|
|
376
|
+
}, z = "ComicInfo.xml", ke = /* @__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("."), Ae = /* @__PURE__ */ new Set(["Pages", "ComicInfo"]), je = (e) => e.children.some((e) => e.type === "element"), Me = (e) => {
|
|
354
377
|
let t = e.val.trim();
|
|
355
378
|
return t.length > 0 ? t : void 0;
|
|
356
|
-
},
|
|
379
|
+
}, Ne = (e) => {
|
|
357
380
|
let t;
|
|
358
381
|
try {
|
|
359
382
|
t = new h(e);
|
|
@@ -363,28 +386,28 @@ var R = "com.apple.ibooks.display-options.xml", ye = (e) => e.childrenNamed("opt
|
|
|
363
386
|
}
|
|
364
387
|
let n = {};
|
|
365
388
|
return t.eachChild((e) => {
|
|
366
|
-
if (e.type !== "element" ||
|
|
367
|
-
let t =
|
|
389
|
+
if (e.type !== "element" || Ae.has(e.name) || je(e)) return;
|
|
390
|
+
let t = Me(e);
|
|
368
391
|
t !== void 0 && n[e.name] === void 0 && (n[e.name] = t);
|
|
369
392
|
}), {
|
|
370
393
|
kind: "comicInfo",
|
|
371
394
|
...n
|
|
372
395
|
};
|
|
373
|
-
},
|
|
396
|
+
}, Pe = "com.kobobooks.display-options.xml", Fe = (e) => {
|
|
374
397
|
let t = e.childNamed("platform");
|
|
375
398
|
if (!t) return {};
|
|
376
399
|
for (let e of t.childrenNamed("option")) if (e.attr?.name === "fixed-layout") return e.val.trim().toLowerCase() === "true" ? { renditionLayout: "pre-paginated" } : {};
|
|
377
400
|
return {};
|
|
378
|
-
},
|
|
401
|
+
}, Ie = (e) => {
|
|
379
402
|
let t = new h(e);
|
|
380
403
|
return t.name?.toLowerCase() === "display_options" ? {
|
|
381
404
|
kind: "kobo",
|
|
382
|
-
...
|
|
405
|
+
...Fe(t)
|
|
383
406
|
} : { kind: "kobo" };
|
|
384
407
|
}, B = (e) => {
|
|
385
408
|
let t = Object.entries(e).filter(([, e]) => e !== void 0);
|
|
386
409
|
return Object.fromEntries(t);
|
|
387
|
-
},
|
|
410
|
+
}, Le = (e) => {
|
|
388
411
|
let t = [];
|
|
389
412
|
for (let n of e.split("/")) if (n !== ".") {
|
|
390
413
|
if (n === "..") {
|
|
@@ -394,12 +417,12 @@ var R = "com.apple.ibooks.display-options.xml", ye = (e) => e.childrenNamed("opt
|
|
|
394
417
|
t.push(n);
|
|
395
418
|
}
|
|
396
419
|
return t.join("/");
|
|
397
|
-
},
|
|
420
|
+
}, Re = (e, t) => /^https?:\/\//.test(e) ? e : Le(t ? `${t}/${e}` : e), ze = (e) => {
|
|
398
421
|
let t = e?.trim().toLowerCase();
|
|
399
422
|
return t === "reflowable" || t === "pre-paginated" ? t : void 0;
|
|
400
|
-
},
|
|
401
|
-
let r =
|
|
402
|
-
let r =
|
|
423
|
+
}, Be = (e, { opf: t, basePath: n }) => {
|
|
424
|
+
let r = ze(t.renditionLayoutMeta), i = t.spineRows.map((t) => {
|
|
425
|
+
let r = Re(t.href, n);
|
|
403
426
|
return {
|
|
404
427
|
row: t,
|
|
405
428
|
uri: r,
|
|
@@ -417,11 +440,11 @@ var R = "com.apple.ibooks.display-options.xml", ye = (e) => e.childrenNamed("opt
|
|
|
417
440
|
pageSpreadRight: e.pageSpreadRight,
|
|
418
441
|
progressionWeight: a > 0 ? (i?.size ?? 0) / a : 1 / t.spineRows.length
|
|
419
442
|
}));
|
|
420
|
-
},
|
|
443
|
+
}, Ve = z.toLowerCase(), He = Ee.toLowerCase(), Ue = (e) => {
|
|
421
444
|
let t = e.basename.toLowerCase();
|
|
422
|
-
return t ===
|
|
423
|
-
},
|
|
424
|
-
let t = e.records.filter(x).filter((e) => !
|
|
445
|
+
return t === Ve || t === He || e.uri.endsWith("com.kobobooks.display-options.xml") || t.endsWith(".db");
|
|
446
|
+
}, We = (e) => {
|
|
447
|
+
let t = e.records.filter(x).filter((e) => !Ue(e));
|
|
425
448
|
return t.map((e) => {
|
|
426
449
|
let n = f(e.encodingFormat ?? "") || o(e.basename);
|
|
427
450
|
return B({
|
|
@@ -433,18 +456,18 @@ var R = "com.apple.ibooks.display-options.xml", ye = (e) => e.childrenNamed("opt
|
|
|
433
456
|
});
|
|
434
457
|
});
|
|
435
458
|
}, V = async (e, { opf: t } = {}) => {
|
|
436
|
-
let n = t ?? await
|
|
437
|
-
return n ?
|
|
438
|
-
},
|
|
459
|
+
let n = t ?? await R(e).catch(() => void 0);
|
|
460
|
+
return n ? Be(e, n) : We(e);
|
|
461
|
+
}, Ge = (e, t) => {
|
|
439
462
|
let n = S(e, t);
|
|
440
463
|
if (n !== void 0) return f(n.encodingFormat ?? "") || o(n.basename);
|
|
441
|
-
},
|
|
442
|
-
let r = t ?? await
|
|
464
|
+
}, Ke = async (e, { opf: t, readingOrder: n } = {}) => {
|
|
465
|
+
let r = t ?? await R(e).catch(() => void 0);
|
|
443
466
|
if (r !== void 0 && r.opf.coverHref !== void 0) {
|
|
444
|
-
let t =
|
|
467
|
+
let t = Re(r.opf.coverHref, r.basePath);
|
|
445
468
|
return B({
|
|
446
469
|
uri: t,
|
|
447
|
-
mediaType:
|
|
470
|
+
mediaType: Ge(e, t),
|
|
448
471
|
confidence: "derived"
|
|
449
472
|
});
|
|
450
473
|
}
|
|
@@ -454,10 +477,10 @@ var R = "com.apple.ibooks.display-options.xml", ye = (e) => e.childrenNamed("opt
|
|
|
454
477
|
mediaType: i.mediaType,
|
|
455
478
|
confidence: "assumed"
|
|
456
479
|
});
|
|
457
|
-
},
|
|
480
|
+
}, qe = (e) => {
|
|
458
481
|
let t = e.descendantWithPath("head")?.childrenNamed("meta").find((e) => e.attr.name === "viewport");
|
|
459
482
|
return !!(t && t.attr.name === "viewport");
|
|
460
|
-
},
|
|
483
|
+
}, Je = async (e, n) => {
|
|
461
484
|
if (n.length === 0) return !1;
|
|
462
485
|
for (let r of n) {
|
|
463
486
|
if (!d({
|
|
@@ -467,47 +490,47 @@ var R = "com.apple.ibooks.display-options.xml", ye = (e) => e.childrenNamed("opt
|
|
|
467
490
|
let n = S(e, r.uri);
|
|
468
491
|
if (!n || !x(n)) return !1;
|
|
469
492
|
try {
|
|
470
|
-
if (!
|
|
493
|
+
if (!qe(new h(await E(n)))) return !1;
|
|
471
494
|
} catch (e) {
|
|
472
495
|
return t.error(`layout scan: unable to inspect ${r.uri}`, e), !1;
|
|
473
496
|
}
|
|
474
497
|
}
|
|
475
498
|
return !0;
|
|
476
|
-
},
|
|
477
|
-
async function
|
|
478
|
-
let t = e.records.find((e) => x(e) && e.basename.toLowerCase() ===
|
|
479
|
-
if (t) return
|
|
499
|
+
}, Ye = Ee.toLowerCase();
|
|
500
|
+
async function Xe(e) {
|
|
501
|
+
let t = e.records.find((e) => x(e) && e.basename.toLowerCase() === Ye);
|
|
502
|
+
if (t) return Oe(await E(t));
|
|
480
503
|
}
|
|
481
504
|
//#endregion
|
|
482
505
|
//#region src/metadata/comicInfo/getArchiveHasComicInfo.ts
|
|
483
|
-
var
|
|
506
|
+
var Ze = z.toLowerCase(), Qe = (e) => e.records.find((e) => x(e) && e.basename.toLowerCase() === Ze), $e = [
|
|
484
507
|
"Unknown",
|
|
485
508
|
"No",
|
|
486
509
|
"Yes",
|
|
487
510
|
"YesAndRightToLeft"
|
|
488
|
-
],
|
|
489
|
-
for (let t of
|
|
511
|
+
], et = (e) => {
|
|
512
|
+
for (let t of $e) if (t === e) return !0;
|
|
490
513
|
return !1;
|
|
491
514
|
};
|
|
492
515
|
//#endregion
|
|
493
516
|
//#region src/metadata/comicInfo/readArchiveComicInfo.ts
|
|
494
|
-
async function
|
|
495
|
-
let t =
|
|
496
|
-
if (t) return
|
|
517
|
+
async function tt(e) {
|
|
518
|
+
let t = Qe(e);
|
|
519
|
+
if (t) return Ne(await E(t));
|
|
497
520
|
}
|
|
498
521
|
//#endregion
|
|
499
522
|
//#region src/metadata/kobo/readArchiveKobo.ts
|
|
500
|
-
async function
|
|
523
|
+
async function nt(e) {
|
|
501
524
|
let n = e.records.filter((e) => x(e) && e.uri.endsWith("com.kobobooks.display-options.xml"));
|
|
502
525
|
if (n.length === 0) return;
|
|
503
526
|
let r;
|
|
504
527
|
for (let e of n) {
|
|
505
528
|
let n = await E(e);
|
|
506
529
|
try {
|
|
507
|
-
let { renditionLayout: e } =
|
|
530
|
+
let { renditionLayout: e } = Ie(n);
|
|
508
531
|
e && (r = e);
|
|
509
532
|
} catch (n) {
|
|
510
|
-
t.error(`Unable to parse ${
|
|
533
|
+
t.error(`Unable to parse ${Pe} (${e.uri})`, n);
|
|
511
534
|
}
|
|
512
535
|
}
|
|
513
536
|
return {
|
|
@@ -517,11 +540,11 @@ async function Je(e) {
|
|
|
517
540
|
}
|
|
518
541
|
//#endregion
|
|
519
542
|
//#region src/metadata/opf/getSpineItemFilesFromArchive.ts
|
|
520
|
-
var
|
|
543
|
+
var rt = async ({ archive: e, archiveOpf: t }) => {
|
|
521
544
|
if (!t) return [];
|
|
522
545
|
let { opf: n, basePath: r } = t, { spineRows: i } = n;
|
|
523
546
|
return e.records.filter((e) => i.find((t) => r ? `${r}/${t.href}` === e.uri : `${t.href}` === e.uri));
|
|
524
|
-
},
|
|
547
|
+
}, it = (e) => e.toLowerCase().endsWith(".opf"), at = (e) => e.records.some((e) => !e.dir && (it(e.basename) || it(e.uri))), ot = (e) => {
|
|
525
548
|
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 = B({
|
|
526
549
|
fixedLayout: r,
|
|
527
550
|
options: t !== void 0 && t.length > 0 ? t.map(({ name: e, value: t }) => B({
|
|
@@ -533,7 +556,7 @@ var Ye = async ({ archive: e, archiveOpf: t }) => {
|
|
|
533
556
|
renditionLayout: r === !0 ? "pre-paginated" : void 0,
|
|
534
557
|
apple: Object.keys(i).length > 0 ? i : void 0
|
|
535
558
|
});
|
|
536
|
-
},
|
|
559
|
+
}, st = (e) => {
|
|
537
560
|
switch (e.Manga) {
|
|
538
561
|
case "YesAndRightToLeft": return "rtl";
|
|
539
562
|
case "Yes":
|
|
@@ -554,25 +577,25 @@ var Ye = async ({ archive: e, archiveOpf: t }) => {
|
|
|
554
577
|
if (t === void 0 || !/^\d+(\.\d+)?$/.test(t)) return;
|
|
555
578
|
let n = Number.parseFloat(t);
|
|
556
579
|
return Number.isFinite(n) ? n : void 0;
|
|
557
|
-
},
|
|
580
|
+
}, ct = (e) => {
|
|
558
581
|
let t = H(e)?.toLowerCase();
|
|
559
582
|
if (t === "yes") return !0;
|
|
560
583
|
if (t === "no") return !1;
|
|
561
|
-
},
|
|
584
|
+
}, lt = (e) => {
|
|
562
585
|
switch (e.Manga) {
|
|
563
586
|
case "Yes":
|
|
564
587
|
case "YesAndRightToLeft": return !0;
|
|
565
588
|
case "No": return !1;
|
|
566
589
|
default: return;
|
|
567
590
|
}
|
|
568
|
-
},
|
|
591
|
+
}, ut = (e) => {
|
|
569
592
|
let t = W(e.Year), n = W(e.Month), r = W(e.Day);
|
|
570
593
|
if (!(t === void 0 && n === void 0 && r === void 0)) return {
|
|
571
594
|
...t === void 0 ? {} : { year: t },
|
|
572
595
|
...n === void 0 ? {} : { month: n },
|
|
573
596
|
...r === void 0 ? {} : { day: r }
|
|
574
597
|
};
|
|
575
|
-
},
|
|
598
|
+
}, dt = [
|
|
576
599
|
["Writer", "author"],
|
|
577
600
|
["Penciller", "penciler"],
|
|
578
601
|
["Inker", "inker"],
|
|
@@ -581,9 +604,9 @@ var Ye = async ({ archive: e, archiveOpf: t }) => {
|
|
|
581
604
|
["CoverArtist", "coverArtist"],
|
|
582
605
|
["Editor", "editor"],
|
|
583
606
|
["Translator", "translator"]
|
|
584
|
-
],
|
|
607
|
+
], ft = (e) => {
|
|
585
608
|
let t = /* @__PURE__ */ new Map();
|
|
586
|
-
for (let [n, r] of
|
|
609
|
+
for (let [n, r] of dt) for (let i of U(e[n])) {
|
|
587
610
|
let e = t.get(i);
|
|
588
611
|
e ? e.roles.includes(r) || e.roles.push(r) : t.set(i, {
|
|
589
612
|
name: i,
|
|
@@ -591,21 +614,21 @@ var Ye = async ({ archive: e, archiveOpf: t }) => {
|
|
|
591
614
|
});
|
|
592
615
|
}
|
|
593
616
|
return [...t.values()];
|
|
594
|
-
},
|
|
617
|
+
}, pt = (e) => {
|
|
595
618
|
let t = B({
|
|
596
619
|
name: H(e.Series),
|
|
597
620
|
position: G(e.Number),
|
|
598
621
|
total: W(e.Count)
|
|
599
622
|
});
|
|
600
623
|
return Object.keys(t).length > 0 ? t : void 0;
|
|
601
|
-
},
|
|
624
|
+
}, mt = (e) => {
|
|
602
625
|
let t = H(e.AlternateSeries);
|
|
603
626
|
if (t !== void 0) return B({
|
|
604
627
|
name: t,
|
|
605
628
|
position: G(e.AlternateNumber),
|
|
606
629
|
total: W(e.AlternateCount)
|
|
607
630
|
});
|
|
608
|
-
},
|
|
631
|
+
}, ht = (e) => {
|
|
609
632
|
let t = U(e.StoryArc);
|
|
610
633
|
if (t.length === 0) return [];
|
|
611
634
|
let n = U(e.StoryArcNumber);
|
|
@@ -613,20 +636,20 @@ var Ye = async ({ archive: e, archiveOpf: t }) => {
|
|
|
613
636
|
name: e,
|
|
614
637
|
position: G(n[t])
|
|
615
638
|
}));
|
|
616
|
-
}, K = (e) => e.length > 0 ? e : void 0,
|
|
639
|
+
}, K = (e) => e.length > 0 ? e : void 0, gt = (e) => (e.Web ?? "").split(/\s+/).filter((e) => e.length > 0), _t = (e) => {
|
|
617
640
|
try {
|
|
618
641
|
let t = new URL(e);
|
|
619
642
|
return (t.protocol === "http:" || t.protocol === "https:") && t.hostname.length > 0;
|
|
620
643
|
} catch {
|
|
621
644
|
return !1;
|
|
622
645
|
}
|
|
623
|
-
},
|
|
646
|
+
}, vt = (e) => e.filter((e, t, n) => _t(e) && n.indexOf(e) === t).map((e) => ({
|
|
624
647
|
value: e,
|
|
625
648
|
scheme: "URL"
|
|
626
|
-
})),
|
|
649
|
+
})), yt = (e, t) => {
|
|
627
650
|
let n = B({
|
|
628
|
-
manga:
|
|
629
|
-
blackAndWhite:
|
|
651
|
+
manga: lt(e),
|
|
652
|
+
blackAndWhite: ct(e.BlackAndWhite),
|
|
630
653
|
volume: W(e.Volume),
|
|
631
654
|
format: H(e.Format),
|
|
632
655
|
ageRating: H(e.AgeRating),
|
|
@@ -638,25 +661,25 @@ var Ye = async ({ archive: e, archiveOpf: t }) => {
|
|
|
638
661
|
characters: K(U(e.Characters)),
|
|
639
662
|
teams: K(U(e.Teams)),
|
|
640
663
|
locations: K(U(e.Locations)),
|
|
641
|
-
storyArcs: K(
|
|
642
|
-
alternateSeries:
|
|
664
|
+
storyArcs: K(ht(e)),
|
|
665
|
+
alternateSeries: mt(e)
|
|
643
666
|
});
|
|
644
667
|
return Object.keys(n).length > 0 ? n : void 0;
|
|
645
|
-
},
|
|
668
|
+
}, bt = (e) => {
|
|
646
669
|
let t = G(e.CommunityRating);
|
|
647
670
|
return t !== void 0 && t <= 5 ? { value: t } : void 0;
|
|
648
|
-
},
|
|
649
|
-
let t =
|
|
671
|
+
}, xt = (e) => {
|
|
672
|
+
let t = pt(e), n = K(U(e.SeriesGroup).map((e) => ({ name: e })));
|
|
650
673
|
if (!(t === void 0 && n === void 0)) return B({
|
|
651
674
|
series: t === void 0 ? void 0 : [t],
|
|
652
675
|
collection: n
|
|
653
676
|
});
|
|
654
|
-
},
|
|
655
|
-
let t = e.GTIN, n = H(t), r =
|
|
677
|
+
}, St = (e) => {
|
|
678
|
+
let t = e.GTIN, n = H(t), r = gt(e), i = [...n === void 0 ? [] : [{
|
|
656
679
|
value: n,
|
|
657
680
|
scheme: "GTIN"
|
|
658
|
-
}], ...
|
|
659
|
-
date:
|
|
681
|
+
}], ...vt(r)], a = H(e.LanguageISO), o = [...U(e.Genre), ...U(e.Tags)], s = B({
|
|
682
|
+
date: ut(e),
|
|
660
683
|
publisher: H(e.Publisher),
|
|
661
684
|
imprint: H(e.Imprint)
|
|
662
685
|
}), c = H(e.Title);
|
|
@@ -666,35 +689,42 @@ var Ye = async ({ archive: e, archiveOpf: t }) => {
|
|
|
666
689
|
publication: s.date !== void 0 || s.publisher !== void 0 || s.imprint !== void 0 ? { edition: s } : void 0,
|
|
667
690
|
languages: a === void 0 ? void 0 : [a],
|
|
668
691
|
subjects: K(o),
|
|
669
|
-
contributors: K(
|
|
670
|
-
readingDirection:
|
|
692
|
+
contributors: K(ft(e)),
|
|
693
|
+
readingDirection: st(e),
|
|
671
694
|
numberOfPages: W(e.PageCount),
|
|
672
|
-
aggregateRating:
|
|
695
|
+
aggregateRating: bt(e),
|
|
673
696
|
identifiers: K(i),
|
|
674
|
-
belongsTo:
|
|
675
|
-
comicInfo:
|
|
697
|
+
belongsTo: xt(e),
|
|
698
|
+
comicInfo: yt(e, r)
|
|
676
699
|
});
|
|
677
|
-
},
|
|
700
|
+
}, Ct = (e) => B({
|
|
678
701
|
renditionLayout: e.renditionLayout,
|
|
679
702
|
kobo: e.renditionLayout === void 0 ? void 0 : { fixedLayout: e.renditionLayout === "pre-paginated" }
|
|
680
|
-
}),
|
|
703
|
+
}), wt = /[0-9Xx]+/g, Tt = /^(?:97[89])?\d{9}[\dXx]$/, Et = (e) => {
|
|
681
704
|
if (e == null) return;
|
|
682
705
|
let t = String(e).trim().replace(/^urn:isbn:/i, "").replace(/^isbn[:\s-]*/i, ""), n = t.replace(/[^0-9Xx]/g, "");
|
|
683
706
|
if (n.length === 10 || n.length === 13) return n.toUpperCase();
|
|
684
|
-
for (let e of t.match(
|
|
685
|
-
},
|
|
686
|
-
let t =
|
|
707
|
+
for (let e of t.match(wt) ?? []) if (Tt.test(e)) return e.toUpperCase();
|
|
708
|
+
}, Dt = (e) => {
|
|
709
|
+
let t = Et(e);
|
|
687
710
|
if (t !== void 0) return t.length === 10 || /^97[89]/.test(t) ? t : void 0;
|
|
688
|
-
},
|
|
711
|
+
}, Ot = /* @__PURE__ */ new Set([
|
|
689
712
|
8,
|
|
690
713
|
12,
|
|
691
714
|
13,
|
|
692
715
|
14
|
|
693
|
-
]),
|
|
716
|
+
]), kt = (e) => {
|
|
694
717
|
if (e == null) return;
|
|
695
718
|
let t = String(e).replace(/\D/g, "");
|
|
696
|
-
if (!(t.length === 0 || !
|
|
697
|
-
},
|
|
719
|
+
if (!(t.length === 0 || !Ot.has(t.length))) return t;
|
|
720
|
+
}, At = (e) => {
|
|
721
|
+
let t = e.trim();
|
|
722
|
+
if (/^https?:\/\//i.test(t)) try {
|
|
723
|
+
let e = new URL(t);
|
|
724
|
+
if ((e.protocol === "http:" || e.protocol === "https:") && e.hostname.length > 0) return "URL";
|
|
725
|
+
} catch {}
|
|
726
|
+
return Dt(t) === void 0 ? kt(t) === void 0 ? "Unknown" : "GTIN" : "ISBN";
|
|
727
|
+
}, jt = new Map(Object.entries({
|
|
698
728
|
isbn: "ISBN",
|
|
699
729
|
gtin: "GTIN",
|
|
700
730
|
doi: "DOI",
|
|
@@ -705,8 +735,8 @@ var Ye = async ({ archive: e, archiveOpf: t }) => {
|
|
|
705
735
|
unknown: "Unknown"
|
|
706
736
|
})), q = (e) => {
|
|
707
737
|
let t = e.trim();
|
|
708
|
-
return
|
|
709
|
-
},
|
|
738
|
+
return jt.get(t.toLowerCase()) ?? t;
|
|
739
|
+
}, Mt = (e) => {
|
|
710
740
|
if (e === void 0) return;
|
|
711
741
|
let t = e.trim().match(/^(\d{4})(?:-(\d{2})(?:-(\d{2}))?)?/);
|
|
712
742
|
if (t === null) return;
|
|
@@ -716,14 +746,7 @@ var Ye = async ({ archive: e, archiveOpf: t }) => {
|
|
|
716
746
|
...r === void 0 ? {} : { month: Number.parseInt(r, 10) },
|
|
717
747
|
...i === void 0 ? {} : { day: Number.parseInt(i, 10) }
|
|
718
748
|
};
|
|
719
|
-
},
|
|
720
|
-
let t = e.trim();
|
|
721
|
-
if (/^https?:\/\//i.test(t)) try {
|
|
722
|
-
let e = new URL(t);
|
|
723
|
-
if ((e.protocol === "http:" || e.protocol === "https:") && e.hostname.length > 0) return "URL";
|
|
724
|
-
} catch {}
|
|
725
|
-
return yt(t) === void 0 ? xt(t) === void 0 ? "Unknown" : "GTIN" : "ISBN";
|
|
726
|
-
}, Tt = {
|
|
749
|
+
}, Nt = {
|
|
727
750
|
art: "artist",
|
|
728
751
|
aut: "author",
|
|
729
752
|
clr: "colorist",
|
|
@@ -732,53 +755,53 @@ var Ye = async ({ archive: e, archiveOpf: t }) => {
|
|
|
732
755
|
ill: "illustrator",
|
|
733
756
|
nrt: "narrator",
|
|
734
757
|
trl: "translator"
|
|
735
|
-
},
|
|
736
|
-
let t = e.roles.map((e) =>
|
|
758
|
+
}, Pt = (e) => e.map((e) => {
|
|
759
|
+
let t = e.roles.map((e) => Nt[e.trim().toLowerCase()] ?? e);
|
|
737
760
|
return B({
|
|
738
761
|
name: e.name,
|
|
739
762
|
roles: t.length > 0 ? t : [e.source === "creator" ? "author" : "contributor"],
|
|
740
763
|
sortAs: e.fileAs
|
|
741
764
|
});
|
|
742
|
-
}), J = (e, t) => e.refines !== void 0 && e.refines.replace(/^#/, "") === t,
|
|
765
|
+
}), J = (e, t) => e.refines !== void 0 && e.refines.replace(/^#/, "") === t, Ft = (e, t) => {
|
|
743
766
|
let n = e.id;
|
|
744
|
-
if (n !== void 0) return
|
|
745
|
-
},
|
|
767
|
+
if (n !== void 0) return se(t.find((e) => e.property === "identifier-type" && J(e, n) && e.value !== void 0));
|
|
768
|
+
}, It = (e) => {
|
|
746
769
|
let t = e?.trim();
|
|
747
770
|
if (t === void 0 || !/^\d+(\.\d+)?$/.test(t)) return;
|
|
748
771
|
let n = Number.parseFloat(t);
|
|
749
772
|
return Number.isFinite(n) ? n : void 0;
|
|
750
|
-
},
|
|
773
|
+
}, Lt = (e) => {
|
|
751
774
|
let t = e?.trim();
|
|
752
775
|
if (t === void 0 || !/^\d+$/.test(t)) return;
|
|
753
776
|
let n = Number.parseInt(t, 10);
|
|
754
777
|
return Number.isFinite(n) ? n : void 0;
|
|
755
|
-
},
|
|
778
|
+
}, Rt = (e) => {
|
|
756
779
|
let t = e?.trim();
|
|
757
780
|
return t !== void 0 && t.length > 0 ? t : void 0;
|
|
758
|
-
}, Y = (e, t, n) => t === void 0 ? void 0 : e.find((e) => J(e, t) && e.property === n && e.value !== void 0)?.value,
|
|
781
|
+
}, Y = (e, t, n) => t === void 0 ? void 0 : e.find((e) => J(e, t) && e.property === n && e.value !== void 0)?.value, zt = (e, t) => e.map((e) => B({
|
|
759
782
|
value: e.value,
|
|
760
|
-
type:
|
|
761
|
-
displaySeq:
|
|
762
|
-
sortAs:
|
|
763
|
-
})),
|
|
783
|
+
type: Rt(Y(t, e.id, "title-type"))?.toLowerCase(),
|
|
784
|
+
displaySeq: Lt(Y(t, e.id, "display-seq")),
|
|
785
|
+
sortAs: Rt(Y(t, e.id, "file-as"))
|
|
786
|
+
})), Bt = (e, t) => {
|
|
764
787
|
if (t === void 0) return;
|
|
765
788
|
let n = e.flatMap((n) => {
|
|
766
789
|
if (!J(n, t) || n.property !== "dcterms:identifier") return [];
|
|
767
|
-
let r =
|
|
790
|
+
let r = Rt(n.value);
|
|
768
791
|
return r === void 0 ? [] : [{
|
|
769
792
|
value: r,
|
|
770
|
-
scheme: q(
|
|
793
|
+
scheme: q(se(e.find((e) => n.id !== void 0 && J(e, n.id) && e.property === "identifier-type")) ?? At(r))
|
|
771
794
|
}];
|
|
772
795
|
});
|
|
773
796
|
return n.length > 0 ? n : void 0;
|
|
774
|
-
},
|
|
797
|
+
}, Vt = (e) => {
|
|
775
798
|
let t = [], n = [];
|
|
776
799
|
for (let r of e) {
|
|
777
800
|
if (r.property !== "belongs-to-collection" || r.value === void 0) continue;
|
|
778
801
|
let i = r.id, a = (t) => Y(e, i, t), o = a("collection-type")?.trim().toLowerCase(), s = B({
|
|
779
802
|
name: r.value,
|
|
780
|
-
identifiers:
|
|
781
|
-
position:
|
|
803
|
+
identifiers: Bt(e, i),
|
|
804
|
+
position: It(a("group-position"))
|
|
782
805
|
});
|
|
783
806
|
o === "series" ? t.push(s) : n.push(s);
|
|
784
807
|
}
|
|
@@ -786,25 +809,25 @@ var Ye = async ({ archive: e, archiveOpf: t }) => {
|
|
|
786
809
|
let n = e.find((e) => e.name?.toLowerCase() === "calibre:series" && e.content !== void 0)?.content;
|
|
787
810
|
n !== void 0 && t.push(B({
|
|
788
811
|
name: n,
|
|
789
|
-
position:
|
|
812
|
+
position: It(e.find((e) => e.name?.toLowerCase() === "calibre:series_index")?.content)
|
|
790
813
|
}));
|
|
791
814
|
}
|
|
792
815
|
return {
|
|
793
816
|
series: t,
|
|
794
817
|
collection: n
|
|
795
818
|
};
|
|
796
|
-
},
|
|
819
|
+
}, Ht = (e) => {
|
|
797
820
|
let t = e?.trim();
|
|
798
821
|
if (t === "scrolled-continuous" || t === "scrolled-doc" || t === "paginated" || t === "auto") return t;
|
|
799
|
-
},
|
|
822
|
+
}, Ut = (e) => {
|
|
800
823
|
let t = e?.trim();
|
|
801
824
|
if (t === "none" || t === "landscape" || t === "portrait" || t === "both" || t === "auto") return t;
|
|
802
|
-
},
|
|
803
|
-
let { titles: t, contributors: n, publisher: r, description: i, rights: a, languages: o, subjects: s, date: c, renditionLayoutMeta: l, renditionFlowMeta: u, renditionSpreadMeta: d, pageProgressionDirection: f, identifiers: p, metas: m, kind: h, creators: g, manifestItems: _, spineRows: v, spineTocIdref: y, coverHref: b, guide: x, ...ee } = e, S = f?.trim().toLowerCase(), C = S === "ltr" || S === "rtl" ? S : void 0, w = l?.trim().toLowerCase(), T = w === "reflowable" || w === "pre-paginated" ? w : void 0, E =
|
|
825
|
+
}, Wt = (e) => {
|
|
826
|
+
let { titles: t, contributors: n, publisher: r, description: i, rights: a, languages: o, subjects: s, date: c, renditionLayoutMeta: l, renditionFlowMeta: u, renditionSpreadMeta: d, pageProgressionDirection: f, identifiers: p, metas: m, kind: h, creators: g, manifestItems: _, spineRows: v, spineTocIdref: y, coverHref: b, guide: x, ...ee } = e, S = f?.trim().toLowerCase(), C = S === "ltr" || S === "rtl" ? S : void 0, w = l?.trim().toLowerCase(), T = w === "reflowable" || w === "pre-paginated" ? w : void 0, E = Pt(n), D = zt(t, m), { series: O, collection: k } = Vt(m), te = O.length > 0 || k.length > 0 ? B({
|
|
804
827
|
series: O.length > 0 ? O : void 0,
|
|
805
828
|
collection: k.length > 0 ? k : void 0
|
|
806
829
|
}) : void 0, A = B({
|
|
807
|
-
date:
|
|
830
|
+
date: Mt(c),
|
|
808
831
|
publisher: r
|
|
809
832
|
});
|
|
810
833
|
return B({
|
|
@@ -817,18 +840,18 @@ var Ye = async ({ archive: e, archiveOpf: t }) => {
|
|
|
817
840
|
contributors: E.length > 0 ? E : void 0,
|
|
818
841
|
readingDirection: C,
|
|
819
842
|
renditionLayout: T,
|
|
820
|
-
renditionFlow:
|
|
821
|
-
renditionSpread:
|
|
843
|
+
renditionFlow: Ht(u),
|
|
844
|
+
renditionSpread: Ut(d),
|
|
822
845
|
identifiers: p.length > 0 ? p.map((e) => B({
|
|
823
846
|
value: e.value,
|
|
824
|
-
scheme: q(e.scheme ??
|
|
847
|
+
scheme: q(e.scheme ?? Ft(e, m) ?? At(e.value)),
|
|
825
848
|
unique: e.unique
|
|
826
849
|
})) : void 0,
|
|
827
850
|
belongsTo: te,
|
|
828
851
|
properties: m.length > 0 ? [...m] : void 0
|
|
829
852
|
});
|
|
830
|
-
},
|
|
831
|
-
let t = e.opf === void 0 ? void 0 :
|
|
853
|
+
}, Gt = (e) => e.kind === "comicInfo" ? St(e) : e.kind === "kobo" ? Ct(e) : e.kind === "apple" ? ot(e) : Wt(e), Kt = (e) => {
|
|
854
|
+
let t = e.opf === void 0 ? void 0 : Wt(e.opf), n = e.comicInfo === void 0 ? void 0 : St(e.comicInfo), r = e.apple === void 0 ? void 0 : ot(e.apple), i = e.kobo === void 0 ? void 0 : Ct(e.kobo), a = [...t?.identifiers ?? [], ...n?.identifiers ?? []], o = B({
|
|
832
855
|
date: t?.publication?.edition?.date ?? n?.publication?.edition?.date,
|
|
833
856
|
publisher: t?.publication?.edition?.publisher ?? n?.publication?.edition?.publisher,
|
|
834
857
|
imprint: t?.publication?.edition?.imprint ?? n?.publication?.edition?.imprint
|
|
@@ -854,7 +877,7 @@ var Ye = async ({ archive: e, archiveOpf: t }) => {
|
|
|
854
877
|
apple: r?.apple,
|
|
855
878
|
kobo: i?.kobo
|
|
856
879
|
});
|
|
857
|
-
},
|
|
880
|
+
}, qt = (e) => {
|
|
858
881
|
let t = [...e.records].sort((e, t) => p(e.uri, t.uri)), n = (e, t, r, i, a) => {
|
|
859
882
|
let o = e.find((e) => e.title === t), [s, ...c] = r;
|
|
860
883
|
return o ? s ? [...e.filter((e) => e !== o), {
|
|
@@ -883,71 +906,71 @@ var Ye = async ({ archive: e, archiveOpf: t }) => {
|
|
|
883
906
|
let a = encodeURI(t.uri).replace(/#/g, "%23").replace(/\?/g, "%3F").replace(/\/$/, ""), o = t.uri.replace(/\/$/, "");
|
|
884
907
|
return n(e, r, i, a, o);
|
|
885
908
|
}, []);
|
|
886
|
-
},
|
|
909
|
+
}, Jt = (e) => e ? e.children.map((e) => e instanceof _ ? e.text : e instanceof g ? Jt(e) : "").join("").trim() : "", Yt = (e) => O(e.properties).includes("nav"), Xt = (e, { basePath: t }) => {
|
|
887
910
|
let n = {
|
|
888
911
|
contents: [],
|
|
889
912
|
path: "",
|
|
890
913
|
containerHref: "",
|
|
891
914
|
title: ""
|
|
892
915
|
}, r = e.childNamed("span") || e.childNamed("a");
|
|
893
|
-
n.title = (r?.attr.title || r?.val.trim() ||
|
|
916
|
+
n.title = (r?.attr.title || r?.val.trim() || Jt(r)) ?? "";
|
|
894
917
|
let i = r?.name;
|
|
895
918
|
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);
|
|
896
919
|
let a = e.childNamed("ol");
|
|
897
920
|
if (a) {
|
|
898
921
|
let e = a.childrenNamed("li");
|
|
899
|
-
e && e.length > 0 && (n.contents = e.map((e) =>
|
|
922
|
+
e && e.length > 0 && (n.contents = e.map((e) => Xt(e, { basePath: t })));
|
|
900
923
|
}
|
|
901
924
|
return n;
|
|
902
|
-
},
|
|
925
|
+
}, Zt = (e, { basePath: t }) => {
|
|
903
926
|
let n = [], r;
|
|
904
927
|
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) => {
|
|
905
|
-
n.push(
|
|
928
|
+
n.push(Xt(e, { basePath: t }));
|
|
906
929
|
}), n;
|
|
907
|
-
},
|
|
908
|
-
let n = e.manifestItems.find(
|
|
930
|
+
}, Qt = async (e, t) => {
|
|
931
|
+
let n = e.manifestItems.find(Yt);
|
|
909
932
|
if (n?.href) {
|
|
910
933
|
let e = t.records.find((e) => e.uri.endsWith(n.href));
|
|
911
|
-
if (e && !e.dir) return
|
|
934
|
+
if (e && !e.dir) return Zt(new h(await E(e)), { basePath: c(e.uri) });
|
|
912
935
|
}
|
|
913
|
-
},
|
|
936
|
+
}, $t = (e, { basePath: t, prefix: n }) => {
|
|
914
937
|
let r = m(t, e?.childNamed(`${n}content`)?.attr.src || ""), i = {
|
|
915
938
|
title: e?.descendantWithPath(`${n}navLabel.${n}text`)?.val || "",
|
|
916
939
|
path: r,
|
|
917
940
|
containerHref: r,
|
|
918
941
|
contents: []
|
|
919
942
|
}, a = e.childrenNamed(`${n}navPoint`);
|
|
920
|
-
return a && a.length > 0 && (i.contents = a.map((e) =>
|
|
943
|
+
return a && a.length > 0 && (i.contents = a.map((e) => $t(e, {
|
|
921
944
|
basePath: t,
|
|
922
945
|
prefix: n
|
|
923
946
|
}))), i;
|
|
924
|
-
},
|
|
947
|
+
}, en = (e, { basePath: t }) => {
|
|
925
948
|
let n = [], r = e.name, i = "";
|
|
926
949
|
return r.indexOf(":") !== -1 && (i = `${r.split(":")[0]}:`), e.childNamed(`${i}navMap`)?.childrenNamed(`${i}navPoint`).forEach((e) => {
|
|
927
|
-
n.push(
|
|
950
|
+
n.push($t(e, {
|
|
928
951
|
basePath: t,
|
|
929
952
|
prefix: i
|
|
930
953
|
}));
|
|
931
954
|
}), n;
|
|
932
|
-
},
|
|
955
|
+
}, tn = async ({ opf: e, opfBasePath: t, archive: n }) => {
|
|
933
956
|
let r = e.spineTocIdref;
|
|
934
957
|
if (r) {
|
|
935
958
|
let i = e.manifestItems.find((e) => e.id === r);
|
|
936
959
|
if (i) {
|
|
937
960
|
let e = `${t}${t === "" ? "" : "/"}${i.href}`, r = n.records.find((t) => t.uri.endsWith(e));
|
|
938
|
-
if (r && !r.dir) return
|
|
961
|
+
if (r && !r.dir) return en(new h(await E(r)), { basePath: c(r.uri) });
|
|
939
962
|
}
|
|
940
963
|
}
|
|
941
|
-
},
|
|
942
|
-
let n = t ?? await
|
|
943
|
-
if (n) return await
|
|
964
|
+
}, nn = async (e, { opf: t } = {}) => {
|
|
965
|
+
let n = t ?? await R(e);
|
|
966
|
+
if (n) return await Qt(n.opf, e) || await tn({
|
|
944
967
|
opf: n.opf,
|
|
945
968
|
opfBasePath: n.basePath,
|
|
946
969
|
archive: e
|
|
947
970
|
}) || [];
|
|
948
|
-
let r =
|
|
971
|
+
let r = qt(e);
|
|
949
972
|
return r.length === 0 ? void 0 : r;
|
|
950
|
-
},
|
|
973
|
+
}, rn = [
|
|
951
974
|
"metadata",
|
|
952
975
|
"readingOrder",
|
|
953
976
|
"toc"
|
|
@@ -963,39 +986,39 @@ var Ye = async ({ archive: e, archiveOpf: t }) => {
|
|
|
963
986
|
failed: !0
|
|
964
987
|
};
|
|
965
988
|
}
|
|
966
|
-
},
|
|
989
|
+
}, an = (e) => {
|
|
967
990
|
let t = (e) => e?.startsWith("audio/") === !0 || e?.startsWith("video/") === !0, n = e.filter((e) => e.renditionLayout === "pre-paginated" && !t(e.mediaType)).length;
|
|
968
991
|
return n > 0 ? n : void 0;
|
|
969
|
-
},
|
|
992
|
+
}, on = ({ archive: e, opf: t, comicInfo: n, apple: r, kobo: i }) => {
|
|
970
993
|
let a = [];
|
|
971
|
-
return t !== void 0 && t.value === void 0 && (t.failed ||
|
|
972
|
-
},
|
|
973
|
-
let n = new Set(t.include ??
|
|
994
|
+
return t !== void 0 && t.value === void 0 && (t.failed || at(e)) && a.push("opf"), n?.failed && a.push("comicInfo"), r?.failed && a.push("apple"), i?.failed && a.push("kobo"), a;
|
|
995
|
+
}, sn = 3, cn = async (e, t = {}) => {
|
|
996
|
+
let n = new Set(t.include ?? rn), 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 X(() => R(e), "opf") : void 0, l = c?.value, u = r || i || s, d = u ? await X(() => tt(e), "comicInfo") : void 0, f = d?.value, p = u ? await X(() => Xe(e), "apple") : void 0, m = p?.value, h = u ? await X(() => nt(e), "kobo") : void 0, g = h?.value, _ = r || s ? Kt({
|
|
974
997
|
opf: l?.opf,
|
|
975
998
|
comicInfo: f,
|
|
976
999
|
apple: m,
|
|
977
1000
|
kobo: g
|
|
978
1001
|
}) : void 0, v = a || s ? await V(e, { opf: l }) : void 0;
|
|
979
|
-
if (s && _ !== void 0 && v !== void 0 && _.renditionLayout === "reflowable" && v.every((e) => e.renditionLayout === "reflowable") && await
|
|
1002
|
+
if (s && _ !== void 0 && v !== void 0 && _.renditionLayout === "reflowable" && v.every((e) => e.renditionLayout === "reflowable") && await Je(e, v) && (_ = {
|
|
980
1003
|
..._,
|
|
981
1004
|
renditionLayout: "pre-paginated"
|
|
982
1005
|
}, v = v.map((e) => ({
|
|
983
1006
|
...e,
|
|
984
1007
|
renditionLayout: "pre-paginated"
|
|
985
1008
|
}))), r && _ !== void 0) {
|
|
986
|
-
let t = v ?? await V(e, { opf: l }), n = await
|
|
1009
|
+
let t = v ?? await V(e, { opf: l }), n = await Ke(e, {
|
|
987
1010
|
opf: l,
|
|
988
1011
|
readingOrder: t
|
|
989
|
-
}), r = _.numberOfPages ??
|
|
1012
|
+
}), r = _.numberOfPages ?? an(t);
|
|
990
1013
|
_ = B({
|
|
991
1014
|
..._,
|
|
992
1015
|
cover: n,
|
|
993
1016
|
numberOfPages: r
|
|
994
1017
|
});
|
|
995
1018
|
}
|
|
996
|
-
let y = o ? (await X(() =>
|
|
997
|
-
version:
|
|
998
|
-
unreadableSources:
|
|
1019
|
+
let y = o ? (await X(() => nn(e, { opf: l }), "toc")).value : void 0, b = {
|
|
1020
|
+
version: sn,
|
|
1021
|
+
unreadableSources: on({
|
|
999
1022
|
archive: e,
|
|
1000
1023
|
opf: c,
|
|
1001
1024
|
comicInfo: d,
|
|
@@ -1009,16 +1032,16 @@ var Ye = async ({ archive: e, archiveOpf: t }) => {
|
|
|
1009
1032
|
apple: m,
|
|
1010
1033
|
kobo: g
|
|
1011
1034
|
})), b;
|
|
1012
|
-
},
|
|
1035
|
+
}, ln = (e) => {
|
|
1013
1036
|
let t = e.trim().toLowerCase();
|
|
1014
1037
|
return t === "url" || t === "uri" || t === "unknown";
|
|
1015
|
-
},
|
|
1038
|
+
}, un = (e) => {
|
|
1016
1039
|
try {
|
|
1017
1040
|
return decodeURIComponent(e);
|
|
1018
1041
|
} catch {
|
|
1019
1042
|
return;
|
|
1020
1043
|
}
|
|
1021
|
-
},
|
|
1044
|
+
}, dn = (e) => {
|
|
1022
1045
|
try {
|
|
1023
1046
|
let t = new URL(e.trim());
|
|
1024
1047
|
return t.protocol === "http:" || t.protocol === "https:" ? t : void 0;
|
|
@@ -1026,91 +1049,91 @@ var Ye = async ({ archive: e, archiveOpf: t }) => {
|
|
|
1026
1049
|
return;
|
|
1027
1050
|
}
|
|
1028
1051
|
}, Z = (e, t) => {
|
|
1029
|
-
let n =
|
|
1052
|
+
let n = dn(e);
|
|
1030
1053
|
return n !== void 0 && t(n.hostname.toLowerCase()) ? n : void 0;
|
|
1031
|
-
},
|
|
1054
|
+
}, fn = /^books\.google\.(?:com|[a-z]{2}|com\.[a-z]{2}|co\.[a-z]{2})$/i, pn = /* @__PURE__ */ new Set(["books.googleapis.com", "www.googleapis.com"]), mn = /^\/books\/v1\/volumes\/([^/]+)\/?$/i, hn = (e) => {
|
|
1032
1055
|
let t = e.trim();
|
|
1033
1056
|
return /^[a-z0-9_-]+$/i.test(t) ? t : void 0;
|
|
1034
|
-
},
|
|
1035
|
-
let t = Z(e, (e) =>
|
|
1057
|
+
}, gn = (e) => {
|
|
1058
|
+
let t = Z(e, (e) => fn.test(e) || pn.has(e));
|
|
1036
1059
|
if (t !== void 0) {
|
|
1037
|
-
if (
|
|
1038
|
-
let e =
|
|
1039
|
-
return n === void 0 ? void 0 :
|
|
1060
|
+
if (pn.has(t.hostname.toLowerCase())) {
|
|
1061
|
+
let e = mn.exec(t.pathname)?.[1], n = e === void 0 ? void 0 : un(e);
|
|
1062
|
+
return n === void 0 ? void 0 : hn(n);
|
|
1040
1063
|
}
|
|
1041
|
-
return
|
|
1064
|
+
return hn(t.searchParams.get("id") ?? "");
|
|
1042
1065
|
}
|
|
1043
|
-
},
|
|
1066
|
+
}, _n = /* @__PURE__ */ new Set(["gutenberg.org", "www.gutenberg.org"]), vn = [
|
|
1044
1067
|
/^\/ebooks\/(\d+)(?:[./]|$)/i,
|
|
1045
1068
|
/^\/files\/(\d+)(?:\/|$)/i,
|
|
1046
1069
|
/^\/cache\/epub\/(\d+)(?:\/|$)/i,
|
|
1047
1070
|
/^\/(\d+)(?:\/|$)/
|
|
1048
|
-
],
|
|
1071
|
+
], yn = (e) => {
|
|
1049
1072
|
let t = e.trim();
|
|
1050
1073
|
if (!/^\d+$/.test(t)) return;
|
|
1051
1074
|
let n = t.replace(/^0+(?=\d)/, "");
|
|
1052
1075
|
return n === "0" ? void 0 : n;
|
|
1053
|
-
},
|
|
1054
|
-
let t = Z(e, (e) =>
|
|
1055
|
-
if (t !== void 0) for (let e of
|
|
1076
|
+
}, bn = (e) => {
|
|
1077
|
+
let t = Z(e, (e) => _n.has(e));
|
|
1078
|
+
if (t !== void 0) for (let e of vn) {
|
|
1056
1079
|
let n = e.exec(t.pathname)?.[1];
|
|
1057
|
-
if (n !== void 0) return
|
|
1080
|
+
if (n !== void 0) return yn(n);
|
|
1058
1081
|
}
|
|
1059
|
-
},
|
|
1082
|
+
}, xn = /* @__PURE__ */ new Set(["openlibrary.org", "www.openlibrary.org"]), Sn = /^\/(works|books|authors)\/(OL\d+[A-Z])(?:\/|$)/i, Cn = /^OL\d+([MWA])$/i, wn = {
|
|
1060
1083
|
M: "books",
|
|
1061
1084
|
W: "works",
|
|
1062
1085
|
A: "authors"
|
|
1063
|
-
},
|
|
1064
|
-
let t = e.trim(), n =
|
|
1086
|
+
}, Tn = (e) => {
|
|
1087
|
+
let t = e.trim(), n = Sn.exec(t);
|
|
1065
1088
|
if (n?.[1] !== void 0 && n[2] !== void 0) return `/${n[1].toLowerCase()}/${n[2].toUpperCase()}`;
|
|
1066
|
-
let r =
|
|
1089
|
+
let r = wn[Cn.exec(t)?.[1]?.toUpperCase() ?? ""];
|
|
1067
1090
|
return r === void 0 ? void 0 : `/${r}/${t.toUpperCase()}`;
|
|
1068
|
-
},
|
|
1069
|
-
let t = Z(e, (e) =>
|
|
1070
|
-
return t === void 0 ? void 0 :
|
|
1071
|
-
},
|
|
1091
|
+
}, En = (e) => {
|
|
1092
|
+
let t = Z(e, (e) => xn.has(e));
|
|
1093
|
+
return t === void 0 ? void 0 : Tn(t.pathname);
|
|
1094
|
+
}, Dn = /* @__PURE__ */ new Set([
|
|
1072
1095
|
"doi.org",
|
|
1073
1096
|
"dx.doi.org",
|
|
1074
1097
|
"www.doi.org"
|
|
1075
|
-
]),
|
|
1098
|
+
]), On = /^10\.\d{4,9}\/\S+$/, kn = (e) => {
|
|
1076
1099
|
let t = e.trim().replace(/^doi:/i, "");
|
|
1077
|
-
return
|
|
1078
|
-
},
|
|
1100
|
+
return On.test(t) ? t : void 0;
|
|
1101
|
+
}, An = (e) => e.split("/").map(encodeURIComponent).join("/"), Q = [
|
|
1079
1102
|
{
|
|
1080
1103
|
scheme: "GoogleBooks",
|
|
1081
|
-
normalizeValue:
|
|
1082
|
-
valueFromUrl:
|
|
1104
|
+
normalizeValue: hn,
|
|
1105
|
+
valueFromUrl: gn,
|
|
1083
1106
|
toUrl: (e) => `https://books.google.com/books?id=${encodeURIComponent(e)}`
|
|
1084
1107
|
},
|
|
1085
1108
|
{
|
|
1086
1109
|
scheme: "ProjectGutenberg",
|
|
1087
|
-
normalizeValue:
|
|
1088
|
-
valueFromUrl:
|
|
1110
|
+
normalizeValue: yn,
|
|
1111
|
+
valueFromUrl: bn,
|
|
1089
1112
|
toUrl: (e) => `https://www.gutenberg.org/ebooks/${e}`
|
|
1090
1113
|
},
|
|
1091
1114
|
{
|
|
1092
1115
|
scheme: "OpenLibrary",
|
|
1093
|
-
normalizeValue:
|
|
1094
|
-
valueFromUrl:
|
|
1116
|
+
normalizeValue: Tn,
|
|
1117
|
+
valueFromUrl: En,
|
|
1095
1118
|
toUrl: (e) => `https://openlibrary.org${e}`
|
|
1096
1119
|
},
|
|
1097
1120
|
{
|
|
1098
1121
|
scheme: "DOI",
|
|
1099
|
-
normalizeValue:
|
|
1122
|
+
normalizeValue: kn,
|
|
1100
1123
|
valueFromUrl: (e) => {
|
|
1101
|
-
let t = Z(e, (e) =>
|
|
1102
|
-
return n === void 0 ? void 0 :
|
|
1124
|
+
let t = Z(e, (e) => Dn.has(e)), n = t === void 0 ? void 0 : un(t.pathname.replace(/^\//, ""));
|
|
1125
|
+
return n === void 0 ? void 0 : kn(n);
|
|
1103
1126
|
},
|
|
1104
|
-
toUrl: (e) => `https://doi.org/${
|
|
1127
|
+
toUrl: (e) => `https://doi.org/${An(e)}`
|
|
1105
1128
|
}
|
|
1106
|
-
],
|
|
1129
|
+
], jn = Q.map(function(e) {
|
|
1107
1130
|
return e.scheme;
|
|
1108
|
-
}),
|
|
1131
|
+
}), Mn = (e) => {
|
|
1109
1132
|
let t = e.trim().toLowerCase();
|
|
1110
1133
|
return Q.find(function(e) {
|
|
1111
1134
|
return e.scheme.toLowerCase() === t;
|
|
1112
1135
|
});
|
|
1113
|
-
},
|
|
1136
|
+
}, Nn = (e) => Mn(e) !== void 0, Pn = (e) => {
|
|
1114
1137
|
for (let t of Q) {
|
|
1115
1138
|
let n = t.valueFromUrl(e);
|
|
1116
1139
|
if (n !== void 0) return {
|
|
@@ -1118,47 +1141,47 @@ var Ye = async ({ archive: e, archiveOpf: t }) => {
|
|
|
1118
1141
|
scheme: t.scheme
|
|
1119
1142
|
};
|
|
1120
1143
|
}
|
|
1121
|
-
},
|
|
1122
|
-
let n =
|
|
1144
|
+
}, Fn = ({ scheme: e, value: t }) => {
|
|
1145
|
+
let n = Mn(e), r = n?.normalizeValue(t);
|
|
1123
1146
|
if (n === void 0 || r === void 0) return;
|
|
1124
1147
|
let i = n.toUrl(r);
|
|
1125
1148
|
return n.valueFromUrl(i) === r ? i : void 0;
|
|
1126
|
-
},
|
|
1149
|
+
}, In = (e) => {
|
|
1127
1150
|
let t = Q.find(function(t) {
|
|
1128
1151
|
return t.scheme === e;
|
|
1129
1152
|
});
|
|
1130
1153
|
if (t === void 0) throw Error(`No catalog rule for scheme ${e}`);
|
|
1131
1154
|
return t;
|
|
1132
|
-
},
|
|
1155
|
+
}, Ln = (e) => {
|
|
1133
1156
|
let t = q(e);
|
|
1134
1157
|
return t === "ISBN" || t === "GTIN";
|
|
1135
|
-
},
|
|
1136
|
-
carries:
|
|
1158
|
+
}, Rn = (e) => ({
|
|
1159
|
+
carries: Ln,
|
|
1137
1160
|
normalizeValue: e
|
|
1138
1161
|
}), $ = (e) => ({
|
|
1139
1162
|
carries: (t) => q(t) === e,
|
|
1140
|
-
...
|
|
1141
|
-
}),
|
|
1142
|
-
ISBN:
|
|
1143
|
-
GTIN:
|
|
1163
|
+
...In(e)
|
|
1164
|
+
}), zn = {
|
|
1165
|
+
ISBN: Rn(Dt),
|
|
1166
|
+
GTIN: Rn(kt),
|
|
1144
1167
|
GoogleBooks: $("GoogleBooks"),
|
|
1145
1168
|
OpenLibrary: $("OpenLibrary"),
|
|
1146
1169
|
ProjectGutenberg: $("ProjectGutenberg"),
|
|
1147
1170
|
DOI: $("DOI")
|
|
1148
|
-
},
|
|
1149
|
-
let n =
|
|
1171
|
+
}, Bn = (e, t) => {
|
|
1172
|
+
let n = zn[t];
|
|
1150
1173
|
for (let t of e ?? []) {
|
|
1151
1174
|
if (n.carries(t.scheme)) {
|
|
1152
1175
|
let e = n.normalizeValue(t.value) ?? n.valueFromUrl?.(t.value);
|
|
1153
1176
|
if (e !== void 0) return e;
|
|
1154
1177
|
continue;
|
|
1155
1178
|
}
|
|
1156
|
-
if (n.valueFromUrl === void 0 || !
|
|
1179
|
+
if (n.valueFromUrl === void 0 || !ln(t.scheme)) continue;
|
|
1157
1180
|
let e = n.valueFromUrl(t.value);
|
|
1158
1181
|
if (e !== void 0) return e;
|
|
1159
1182
|
}
|
|
1160
|
-
},
|
|
1183
|
+
}, Vn = (e) => e?.titles?.[0]?.value;
|
|
1161
1184
|
//#endregion
|
|
1162
|
-
export {
|
|
1185
|
+
export { Ee as APPLE_IBOOKS_DISPLAY_OPTIONS_FILENAME, z as COMIC_INFO_FILENAME, ke as COMIC_INFO_KNOWN_FIELDS, $e as COMIC_INFO_MANGA_VALUES, Pe as KOBO_DISPLAY_OPTIONS_FILENAME, jn as METADATA_CATALOG_SCHEMES, ae as OPF_IDENTIFIER_SCHEME_ATTRIBUTES, ie as OPF_IDENTIFIER_SCHEME_LOCAL_NAMES, k as OPF_NAMESPACE, i as arrayBufferFileAccessors, r as blobFileAccessors, Pn as catalogIdentifierFromUrl, Fn as catalogUrlFromIdentifier, e as createArchive, v as createArchiveFromArrayBufferList, n as createArchiveFromEntries, y as createArchiveFromText, b as createArchiveFromUrls, S as getArchiveFileRecordByUri, Qe as getArchiveHasComicInfo, T as getArchiveImageRecords, D as getArchiveOpfInfo, rt as getSpineItemFilesFromArchive, Bn as identifierValue, At as inferIdentifierScheme, at as isArchiveEpub, et as isComicInfoManga, ee as isDirectoryRecord, x as isFileRecord, w as isImageRecord, Ln as isIsbnBearingScheme, Nn as isMetadataCatalogScheme, Vn as mainTitle, kt as normalizeGtin, q as normalizeIdentifierScheme, Et as normalizeIsbn, ce as opfIdentifierSchemeAttribute, se as opfIdentifierTypeScheme, ne as opfNamespacePrefixes, re as opfNamespacedAttribute, Oe as parseAppleDisplayOptionsXml, Ne as parseComicInfo, Ie as parseKoboXml, Te as parseOpf, Mt as parseW3cDtfDate, Xe as readArchiveApple, tt as readArchiveComicInfo, nt as readArchiveKobo, R as readArchiveOpf, E as readRecordAsText, Je as readingOrderDocumentsAllHaveViewport, cn as resolveArchive, Ke as resolveArchiveCover, Gt as resolveArchiveMetadata, V as resolveArchiveReadingOrder, nn as resolveArchiveToc, Kt as resolveMetadata, O as tokenizeXmlSpaceSeparatedList, j as xmlNamespaceScope };
|
|
1163
1186
|
|
|
1164
1187
|
//# sourceMappingURL=index.js.map
|