@prose-reader/metadata-fetcher 1.340.0 → 1.342.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/fetchMetadata.d.ts +15 -25
- package/dist/index.cjs +1 -1
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.ts +9 -7
- package/dist/index.js +210 -231
- package/dist/index.js.map +1 -1
- package/dist/match/scoreMetadataCandidate.d.ts +5 -6
- package/dist/metadataInputFromResolvedArchive.d.ts +9 -0
- package/dist/providers/projectGutenberg/identifier.d.ts +3 -6
- package/dist/types/fetchMetadataInput.d.ts +30 -0
- package/dist/types/fetchedMetadata.d.ts +7 -21
- package/dist/types/match.d.ts +3 -4
- package/dist/types/provider.d.ts +10 -14
- package/dist/utils/hasSearchTerms.d.ts +2 -2
- package/package.json +4 -4
- package/dist/merge/mergeResolvedMetadata.d.ts +0 -21
- /package/dist/{merge/mergeResolvedMetadata.test.d.ts → metadataInputFromResolvedArchive.test.d.ts} +0 -0
package/dist/index.js
CHANGED
|
@@ -44,7 +44,7 @@ var r = (e) => {
|
|
|
44
44
|
"volume",
|
|
45
45
|
"part",
|
|
46
46
|
"book"
|
|
47
|
-
],
|
|
47
|
+
], g = /\b(volumes?|vols?|parts?|books?)\s+([\p{L}\p{N}]+)\b/gu, _ = {
|
|
48
48
|
one: 1,
|
|
49
49
|
first: 1,
|
|
50
50
|
two: 2,
|
|
@@ -69,7 +69,7 @@ var r = (e) => {
|
|
|
69
69
|
eleventh: 11,
|
|
70
70
|
twelve: 12,
|
|
71
71
|
twelfth: 12
|
|
72
|
-
},
|
|
72
|
+
}, v = {
|
|
73
73
|
i: 1,
|
|
74
74
|
v: 5,
|
|
75
75
|
x: 10,
|
|
@@ -77,140 +77,161 @@ var r = (e) => {
|
|
|
77
77
|
c: 100,
|
|
78
78
|
d: 500,
|
|
79
79
|
m: 1e3
|
|
80
|
-
},
|
|
80
|
+
}, y = (e) => {
|
|
81
81
|
if (!/^m{0,3}(cm|cd|d?c{0,3})(xc|xl|l?x{0,3})(ix|iv|v?i{0,3})$/i.test(e)) return;
|
|
82
82
|
let t = 0, n = 0;
|
|
83
83
|
for (let r of [...e.toLowerCase()].reverse()) {
|
|
84
|
-
let e =
|
|
84
|
+
let e = v[r];
|
|
85
85
|
if (e === void 0) return;
|
|
86
86
|
e < n ? t -= e : (t += e, n = e);
|
|
87
87
|
}
|
|
88
88
|
return t > 0 ? t : void 0;
|
|
89
|
-
},
|
|
89
|
+
}, b = (e) => /^\d+$/.test(e) ? Number.parseInt(e, 10) : _[e] ?? y(e), x = (e) => {
|
|
90
90
|
if (e.startsWith("vol")) return "volume";
|
|
91
91
|
if (e.startsWith("part")) return "part";
|
|
92
92
|
if (e.startsWith("book")) return "book";
|
|
93
|
-
},
|
|
93
|
+
}, S = (e) => {
|
|
94
94
|
let t = /* @__PURE__ */ new Map();
|
|
95
|
-
for (let n of l(e).matchAll(
|
|
96
|
-
let e = n[1] === void 0 ? void 0 :
|
|
95
|
+
for (let n of l(e).matchAll(g)) {
|
|
96
|
+
let e = n[1] === void 0 ? void 0 : x(n[1]), r = n[2] === void 0 ? void 0 : b(n[2]);
|
|
97
97
|
if (e === void 0 || r === void 0) continue;
|
|
98
98
|
let i = t.get(e) ?? /* @__PURE__ */ new Set();
|
|
99
99
|
i.add(r), t.set(e, i);
|
|
100
100
|
}
|
|
101
101
|
return t;
|
|
102
|
-
},
|
|
103
|
-
let n =
|
|
102
|
+
}, ee = (e, t) => {
|
|
103
|
+
let n = S(e), r = S(t);
|
|
104
104
|
for (let e of h) {
|
|
105
105
|
let t = n.get(e), i = r.get(e);
|
|
106
106
|
if (!(t === void 0 || i === void 0) && [...t].every((e) => !i.has(e))) return !0;
|
|
107
107
|
}
|
|
108
108
|
return !1;
|
|
109
|
-
},
|
|
110
|
-
if (
|
|
109
|
+
}, te = (e, t) => {
|
|
110
|
+
if (ee(e, t)) return 0;
|
|
111
111
|
let n = d(e, t), r = p(e), i = p(t);
|
|
112
112
|
return r.hasSubtitle === i.hasSubtitle ? n : Math.max(n, d(r.main, i.main) * m);
|
|
113
|
-
},
|
|
113
|
+
}, C = (e) => l(e).split(" ").filter((e) => e.length > 0).sort().join(" "), w = (e, t) => d(C(e), C(t)), T = {
|
|
114
114
|
isbn: 1,
|
|
115
115
|
gtin: 1,
|
|
116
116
|
identifiers: .6,
|
|
117
117
|
title: .8,
|
|
118
|
-
|
|
118
|
+
authors: .5,
|
|
119
119
|
series: .3,
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
"publication.edition.date": .2,
|
|
123
|
-
"publication.edition.publisher": .15,
|
|
120
|
+
publishedYear: .2,
|
|
121
|
+
publisher: .15,
|
|
124
122
|
languages: .15,
|
|
125
123
|
numberOfPages: .15
|
|
126
|
-
},
|
|
124
|
+
}, ne = /* @__PURE__ */ new Set(["isbn", "gtin"]), E = (e) => {
|
|
127
125
|
let t = e?.trim();
|
|
128
126
|
return t !== void 0 && t.length > 0 ? t : void 0;
|
|
129
|
-
},
|
|
130
|
-
let n =
|
|
131
|
-
return n !== void 0 && n ===
|
|
132
|
-
}, O = (e) =>
|
|
133
|
-
if (!
|
|
127
|
+
}, D = (e, t) => {
|
|
128
|
+
let n = E(e.value)?.toLowerCase();
|
|
129
|
+
return n !== void 0 && n === E(t.value)?.toLowerCase();
|
|
130
|
+
}, O = (e) => E(e.scheme)?.toLowerCase(), re = (e) => e.scheme === void 0 ? e.value : `${e.scheme}:${e.value}`, ie = (e, t) => {
|
|
131
|
+
if (!D(e, t)) return !1;
|
|
134
132
|
let n = O(e), r = O(t);
|
|
135
133
|
return n === void 0 || r === void 0 || n === r;
|
|
136
134
|
}, ae = (e, t) => {
|
|
137
|
-
if (!
|
|
135
|
+
if (!D(e, t)) return !1;
|
|
138
136
|
let n = O(e), r = O(t);
|
|
139
137
|
return n !== void 0 && n === r;
|
|
140
|
-
},
|
|
138
|
+
}, oe = (e) => e.trim().toLowerCase().split("-")[0] ?? "", se = (e, t) => {
|
|
141
139
|
let n = Math.abs(e - t);
|
|
142
140
|
return n === 0 ? 1 : n === 1 ? .6 : n <= 3 ? .3 : 0;
|
|
143
|
-
},
|
|
141
|
+
}, ce = (e, t) => {
|
|
144
142
|
let n = Math.max(e, t);
|
|
145
143
|
return n <= 0 ? 0 : Math.max(0, 1 - Math.abs(e - t) / n * 2);
|
|
146
|
-
},
|
|
144
|
+
}, le = (e, t, n) => e.reduce((e, r) => t.reduce((e, t) => Math.max(e, n(r, t)), e), 0), ue = (e, t, n = d) => {
|
|
145
|
+
let r = E(e);
|
|
146
|
+
if (r === void 0) return;
|
|
147
|
+
let i;
|
|
148
|
+
for (let e of t) {
|
|
149
|
+
let t = E(e);
|
|
150
|
+
if (t === void 0) continue;
|
|
151
|
+
let a = {
|
|
152
|
+
score: n(r, t),
|
|
153
|
+
query: r,
|
|
154
|
+
candidate: t
|
|
155
|
+
};
|
|
156
|
+
(i === void 0 || a.score > i.score) && (i = a);
|
|
157
|
+
}
|
|
158
|
+
return i;
|
|
159
|
+
}, de = (e, t) => {
|
|
160
|
+
if (e === void 0) return;
|
|
161
|
+
let n;
|
|
162
|
+
for (let r of t) {
|
|
163
|
+
if (r === void 0) continue;
|
|
164
|
+
let t = {
|
|
165
|
+
score: se(e, r),
|
|
166
|
+
query: String(e),
|
|
167
|
+
candidate: String(r)
|
|
168
|
+
};
|
|
169
|
+
(n === void 0 || t.score > n.score) && (n = t);
|
|
170
|
+
}
|
|
171
|
+
return n;
|
|
172
|
+
}, k = (e, t) => {
|
|
147
173
|
let n = [], i = (e, t) => {
|
|
148
174
|
t !== void 0 && n.push({
|
|
149
175
|
field: e,
|
|
150
|
-
weight:
|
|
176
|
+
weight: T[e],
|
|
151
177
|
score: Math.min(1, Math.max(0, t.score)),
|
|
152
178
|
query: t.query,
|
|
153
179
|
candidate: t.candidate
|
|
154
180
|
});
|
|
155
181
|
}, a = (e, t, n, r = d) => {
|
|
156
|
-
let a =
|
|
182
|
+
let a = E(t), o = E(n);
|
|
157
183
|
a === void 0 || o === void 0 || i(e, {
|
|
158
184
|
score: r(a, o),
|
|
159
185
|
query: a,
|
|
160
186
|
candidate: o
|
|
161
187
|
});
|
|
162
|
-
}, s =
|
|
188
|
+
}, s = E(e.isbn), c = E(t.isbn), l = s === void 0 ? void 0 : o(s), u = c === void 0 ? void 0 : o(c);
|
|
163
189
|
s !== void 0 && c !== void 0 && l !== void 0 && u !== void 0 && i("isbn", {
|
|
164
190
|
score: +(l === u),
|
|
165
191
|
query: s,
|
|
166
192
|
candidate: c
|
|
167
193
|
});
|
|
168
|
-
let f =
|
|
194
|
+
let f = E(e.gtin), p = E(t.gtin);
|
|
169
195
|
f !== void 0 && p !== void 0 && i("gtin", {
|
|
170
196
|
score: +(f === p),
|
|
171
197
|
query: f,
|
|
172
198
|
candidate: p
|
|
173
199
|
});
|
|
174
|
-
let m = e.identifiers ?? [], h = t.identifiers ?? [],
|
|
200
|
+
let m = e.identifiers ?? [], h = t.identifiers ?? [], g = m.some((e) => h.some((t) => ae(e, t)));
|
|
175
201
|
m.length > 0 && h.length > 0 && i("identifiers", {
|
|
176
202
|
score: +!!m.some((e) => h.some((t) => ie(e, t))),
|
|
177
203
|
query: m.map(re).join(", "),
|
|
178
204
|
candidate: h.map(re).join(", ")
|
|
179
|
-
}), a("title", e.title, t.title,
|
|
180
|
-
let
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
query: _.join(", "),
|
|
184
|
-
candidate: g.join(", ")
|
|
205
|
+
}), a("title", e.title, t.title, te), i("publisher", ue(e.publisher, [t.publication?.original?.publisher, t.publication?.edition?.publisher])), a("series", e.series, t.belongsTo?.series?.[0]?.name);
|
|
206
|
+
let _ = r(t), v = (e.authors ?? []).flatMap((e) => {
|
|
207
|
+
let t = E(e);
|
|
208
|
+
return t === void 0 ? [] : [t];
|
|
185
209
|
});
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
});
|
|
192
|
-
};
|
|
193
|
-
v("publication.original.date", e.publication?.original?.date?.year, t.publication?.original?.date?.year), v("publication.edition.date", e.publication?.edition?.date?.year, t.publication?.edition?.date?.year);
|
|
210
|
+
v.length > 0 && _.length > 0 && i("authors", {
|
|
211
|
+
score: le(v, _, w),
|
|
212
|
+
query: v.join(", "),
|
|
213
|
+
candidate: _.join(", ")
|
|
214
|
+
}), i("publishedYear", de(e.publishedYear, [t.publication?.original?.date?.year, t.publication?.edition?.date?.year]));
|
|
194
215
|
let y = e.languages ?? [], b = t.languages ?? [];
|
|
195
216
|
if (y.length > 0 && b.length > 0) {
|
|
196
|
-
let e = new Set(b.map(
|
|
217
|
+
let e = new Set(b.map(oe));
|
|
197
218
|
i("languages", {
|
|
198
|
-
score: +!!y.some((t) => e.has(
|
|
219
|
+
score: +!!y.some((t) => e.has(oe(t))),
|
|
199
220
|
query: y.join(", "),
|
|
200
221
|
candidate: b.join(", ")
|
|
201
222
|
});
|
|
202
223
|
}
|
|
203
224
|
e.numberOfPages !== void 0 && t.numberOfPages !== void 0 && i("numberOfPages", {
|
|
204
|
-
score:
|
|
225
|
+
score: ce(e.numberOfPages, t.numberOfPages),
|
|
205
226
|
query: String(e.numberOfPages),
|
|
206
227
|
candidate: String(t.numberOfPages)
|
|
207
228
|
});
|
|
208
|
-
let x = n.filter((e) =>
|
|
229
|
+
let x = n.filter((e) => ne.has(e.field));
|
|
209
230
|
if (x.some((e) => e.score === 0)) return {
|
|
210
231
|
score: 0,
|
|
211
232
|
signals: n
|
|
212
233
|
};
|
|
213
|
-
if (
|
|
234
|
+
if (g || x.some((e) => e.score === 1)) return {
|
|
214
235
|
score: 1,
|
|
215
236
|
signals: n
|
|
216
237
|
};
|
|
@@ -222,76 +243,19 @@ var r = (e) => {
|
|
|
222
243
|
score: n.reduce((e, t) => e + t.score * t.weight, 0) / S,
|
|
223
244
|
signals: n
|
|
224
245
|
};
|
|
225
|
-
},
|
|
226
|
-
let t = Object.entries(e).filter(([, e]) => e !== void 0);
|
|
227
|
-
return Object.fromEntries(t);
|
|
228
|
-
}, le = (e) => {
|
|
229
|
-
let t = /* @__PURE__ */ new Map();
|
|
230
|
-
for (let n of e) {
|
|
231
|
-
let e = `${n.scheme?.trim().toLowerCase() ?? ""}:${n.value.trim().toLowerCase()}`, r = t.get(e);
|
|
232
|
-
if (r === void 0) {
|
|
233
|
-
t.set(e, n);
|
|
234
|
-
continue;
|
|
235
|
-
}
|
|
236
|
-
n.unique === !0 && r.unique !== !0 && t.set(e, {
|
|
237
|
-
...r,
|
|
238
|
-
unique: !0
|
|
239
|
-
});
|
|
240
|
-
}
|
|
241
|
-
return [...t.values()];
|
|
242
|
-
}, M = (...e) => {
|
|
243
|
-
let t = e.filter((e) => e !== void 0), n = (e) => {
|
|
244
|
-
for (let n of t) {
|
|
245
|
-
let t = n[e];
|
|
246
|
-
if (t !== void 0) return t;
|
|
247
|
-
}
|
|
248
|
-
}, r = le(t.flatMap((e) => e.identifiers ?? [])), i = j({
|
|
249
|
-
series: t.find((e) => e.belongsTo?.series !== void 0)?.belongsTo?.series,
|
|
250
|
-
collection: t.find((e) => e.belongsTo?.collection !== void 0)?.belongsTo?.collection
|
|
251
|
-
}), a = (e) => {
|
|
252
|
-
let n = j({
|
|
253
|
-
date: t.find((t) => t.publication?.[e]?.date !== void 0)?.publication?.[e]?.date,
|
|
254
|
-
publisher: t.find((t) => t.publication?.[e]?.publisher !== void 0)?.publication?.[e]?.publisher,
|
|
255
|
-
imprint: t.find((t) => t.publication?.[e]?.imprint !== void 0)?.publication?.[e]?.imprint
|
|
256
|
-
});
|
|
257
|
-
return n.date !== void 0 || n.publisher !== void 0 || n.imprint !== void 0 ? n : void 0;
|
|
258
|
-
}, o = j({
|
|
259
|
-
original: a("original"),
|
|
260
|
-
edition: a("edition")
|
|
261
|
-
});
|
|
262
|
-
return j({
|
|
263
|
-
title: n("title"),
|
|
264
|
-
cover: n("cover"),
|
|
265
|
-
description: n("description"),
|
|
266
|
-
publication: o.original !== void 0 || o.edition !== void 0 ? o : void 0,
|
|
267
|
-
rights: n("rights"),
|
|
268
|
-
languages: n("languages"),
|
|
269
|
-
subjects: n("subjects"),
|
|
270
|
-
contributors: n("contributors"),
|
|
271
|
-
readingDirection: n("readingDirection"),
|
|
272
|
-
renditionLayout: n("renditionLayout"),
|
|
273
|
-
renditionFlow: n("renditionFlow"),
|
|
274
|
-
renditionSpread: n("renditionSpread"),
|
|
275
|
-
numberOfPages: n("numberOfPages"),
|
|
276
|
-
gtin: n("gtin"),
|
|
277
|
-
isbn: n("isbn"),
|
|
278
|
-
identifiers: r.length > 0 ? r : void 0,
|
|
279
|
-
belongsTo: Object.keys(i).length > 0 ? i : void 0,
|
|
280
|
-
properties: n("properties"),
|
|
281
|
-
comic: n("comic"),
|
|
282
|
-
apple: n("apple"),
|
|
283
|
-
kobo: n("kobo")
|
|
284
|
-
});
|
|
285
|
-
}, N = class extends Error {
|
|
246
|
+
}, A = class extends Error {
|
|
286
247
|
status;
|
|
287
248
|
constructor(e, t) {
|
|
288
249
|
super(t ?? `Provider responded with status ${e}`), this.name = "MetadataProviderResponseError", this.status = e;
|
|
289
250
|
}
|
|
290
|
-
},
|
|
251
|
+
}, j = (e) => {
|
|
291
252
|
if (typeof e != "object" || !e || !("status" in e)) return;
|
|
292
253
|
let { status: t } = e;
|
|
293
254
|
if (!(typeof t != "number" || !Number.isInteger(t))) return t >= 100 && t <= 599 ? t : void 0;
|
|
294
|
-
},
|
|
255
|
+
}, M = t.namespace("@prose-reader/metadata-fetcher", void 0, { color: "#b06642" }), N = (e) => {
|
|
256
|
+
let t = Object.entries(e).filter(([, e]) => e !== void 0);
|
|
257
|
+
return Object.fromEntries(t);
|
|
258
|
+
}, fe = 5, pe = .5, me = 4, he = ({ candidate: e, providerId: t, score: n, signals: r, accepted: i, includeRaw: a }) => N({
|
|
295
259
|
providerId: t,
|
|
296
260
|
score: n,
|
|
297
261
|
signals: r,
|
|
@@ -301,58 +265,73 @@ var r = (e) => {
|
|
|
301
265
|
url: e.url,
|
|
302
266
|
raw: a ? e.raw : void 0
|
|
303
267
|
}), ge = async (e, t) => {
|
|
304
|
-
let n =
|
|
268
|
+
let n = t.limit ?? fe, r = t.minScore ?? pe, i = t.includeRaw === !0, a = await Promise.all(t.providers.map(async (r) => {
|
|
305
269
|
try {
|
|
306
270
|
return {
|
|
307
|
-
provider:
|
|
308
|
-
candidates: await
|
|
309
|
-
limit:
|
|
271
|
+
provider: r,
|
|
272
|
+
candidates: await r.search(e, {
|
|
273
|
+
limit: n,
|
|
310
274
|
signal: t.signal
|
|
311
275
|
}),
|
|
312
276
|
failure: void 0
|
|
313
277
|
};
|
|
314
|
-
} catch (
|
|
315
|
-
if (t.signal?.aborted === !0) throw
|
|
316
|
-
return
|
|
317
|
-
provider:
|
|
278
|
+
} catch (e) {
|
|
279
|
+
if (t.signal?.aborted === !0) throw e;
|
|
280
|
+
return M.error(`fetchMetadata: provider "${r.id}" failed`, e), {
|
|
281
|
+
provider: r,
|
|
318
282
|
candidates: void 0,
|
|
319
|
-
failure:
|
|
320
|
-
id:
|
|
321
|
-
status:
|
|
283
|
+
failure: N({
|
|
284
|
+
id: r.id,
|
|
285
|
+
status: j(e)
|
|
322
286
|
})
|
|
323
287
|
};
|
|
324
288
|
}
|
|
325
|
-
})),
|
|
326
|
-
for (let { provider:
|
|
327
|
-
if (
|
|
328
|
-
let
|
|
329
|
-
let { score:
|
|
289
|
+
})), o = a.flatMap((e) => e.failure === void 0 ? [] : [e.failure]), s = {}, c = [];
|
|
290
|
+
for (let { provider: t, candidates: o } of a) {
|
|
291
|
+
if (o === void 0) continue;
|
|
292
|
+
let a = o.map((n) => {
|
|
293
|
+
let { score: a, signals: o } = k(e, n.metadata);
|
|
330
294
|
return he({
|
|
331
|
-
candidate:
|
|
332
|
-
providerId:
|
|
333
|
-
score:
|
|
295
|
+
candidate: n,
|
|
296
|
+
providerId: t.id,
|
|
297
|
+
score: a,
|
|
334
298
|
signals: o,
|
|
335
|
-
accepted:
|
|
336
|
-
includeRaw:
|
|
299
|
+
accepted: a >= r,
|
|
300
|
+
includeRaw: i
|
|
337
301
|
});
|
|
338
|
-
}).sort((e, t) => t.score - e.score).slice(0,
|
|
339
|
-
|
|
302
|
+
}).sort((e, t) => t.score - e.score).slice(0, n);
|
|
303
|
+
s[t.id] !== void 0 && M.warn(`fetchMetadata: several providers share the id "${t.id}"`), s[t.id] = {
|
|
340
304
|
provider: {
|
|
341
|
-
id:
|
|
342
|
-
name:
|
|
305
|
+
id: t.id,
|
|
306
|
+
name: t.name
|
|
343
307
|
},
|
|
344
|
-
matches:
|
|
345
|
-
},
|
|
308
|
+
matches: a
|
|
309
|
+
}, c.push(...a);
|
|
346
310
|
}
|
|
347
|
-
let u = [...l].sort((e, t) => t.score - e.score);
|
|
348
311
|
return {
|
|
349
312
|
version: me,
|
|
350
|
-
|
|
351
|
-
|
|
352
|
-
|
|
353
|
-
failedProviders: s
|
|
313
|
+
matches: [...c].sort((e, t) => t.score - e.score),
|
|
314
|
+
sources: s,
|
|
315
|
+
failedProviders: o
|
|
354
316
|
};
|
|
355
|
-
},
|
|
317
|
+
}, _e = (e) => {
|
|
318
|
+
let { metadata: t } = e, n = r(t), i = t.identifiers?.map(({ value: e, scheme: t }) => N({
|
|
319
|
+
value: e,
|
|
320
|
+
scheme: t
|
|
321
|
+
}));
|
|
322
|
+
return N({
|
|
323
|
+
title: t.title,
|
|
324
|
+
authors: n.length > 0 ? n : void 0,
|
|
325
|
+
isbn: t.isbn,
|
|
326
|
+
gtin: t.gtin,
|
|
327
|
+
identifiers: i !== void 0 && i.length > 0 ? i : void 0,
|
|
328
|
+
series: t.belongsTo?.series?.[0]?.name,
|
|
329
|
+
publisher: t.publication?.edition?.publisher ?? t.publication?.original?.publisher,
|
|
330
|
+
publishedYear: t.publication?.edition?.date?.year ?? t.publication?.original?.date?.year,
|
|
331
|
+
languages: t.languages,
|
|
332
|
+
numberOfPages: t.numberOfPages
|
|
333
|
+
});
|
|
334
|
+
}, P = "ProjectGutenberg", ve = /* @__PURE__ */ new Set(["gutenberg.org", "www.gutenberg.org"]), ye = [
|
|
356
335
|
/^\/ebooks\/(\d+)(?:[./]|$)/i,
|
|
357
336
|
/^\/files\/(\d+)(?:\/|$)/i,
|
|
358
337
|
/^\/cache\/epub\/(\d+)(?:\/|$)/i,
|
|
@@ -362,11 +341,11 @@ var r = (e) => {
|
|
|
362
341
|
if (!/^\d+$/.test(t)) return;
|
|
363
342
|
let n = t.replace(/^0+(?=\d)/, "");
|
|
364
343
|
return n === "0" ? void 0 : n;
|
|
365
|
-
},
|
|
344
|
+
}, be = (e) => {
|
|
366
345
|
try {
|
|
367
346
|
let t = new URL(e.trim());
|
|
368
|
-
if (t.protocol !== "http:" && t.protocol !== "https:" || !
|
|
369
|
-
for (let e of
|
|
347
|
+
if (t.protocol !== "http:" && t.protocol !== "https:" || !ve.has(t.hostname.toLowerCase())) return;
|
|
348
|
+
for (let e of ye) {
|
|
370
349
|
let n = e.exec(t.pathname)?.[1];
|
|
371
350
|
if (n !== void 0) return F(n);
|
|
372
351
|
}
|
|
@@ -375,7 +354,7 @@ var r = (e) => {
|
|
|
375
354
|
}
|
|
376
355
|
}, I = (e) => {
|
|
377
356
|
for (let t of e.identifiers ?? []) {
|
|
378
|
-
let e = t.scheme?.trim().toLowerCase(), n = e === "projectgutenberg" ? F(t.value) : e === void 0 || e === "url" || e === "uri" ?
|
|
357
|
+
let e = t.scheme?.trim().toLowerCase(), n = e === "projectgutenberg" ? F(t.value) : e === void 0 || e === "url" || e === "uri" ? be(t.value) : void 0;
|
|
379
358
|
if (n !== void 0) return {
|
|
380
359
|
id: n,
|
|
381
360
|
identifier: {
|
|
@@ -397,10 +376,10 @@ var r = (e) => {
|
|
|
397
376
|
if (!Array.isArray(n)) return;
|
|
398
377
|
let r = n.filter((e) => typeof e == "string").map((e) => e.trim()).filter((e) => e.length > 0);
|
|
399
378
|
return r.length > 0 ? r : void 0;
|
|
400
|
-
},
|
|
379
|
+
}, xe = (e, t) => {
|
|
401
380
|
let n = e[t];
|
|
402
381
|
return Array.isArray(n) ? n.filter(L) : [];
|
|
403
|
-
},
|
|
382
|
+
}, Se = (e) => ({
|
|
404
383
|
key: R(e, "key"),
|
|
405
384
|
title: R(e, "title"),
|
|
406
385
|
subtitle: R(e, "subtitle"),
|
|
@@ -411,7 +390,7 @@ var r = (e) => {
|
|
|
411
390
|
number_of_pages_median: z(e, "number_of_pages_median"),
|
|
412
391
|
cover_i: z(e, "cover_i"),
|
|
413
392
|
id_project_gutenberg: B(e, "id_project_gutenberg")
|
|
414
|
-
}), V = (e) => L(e) ?
|
|
393
|
+
}), V = (e) => L(e) ? xe(e, "docs").map(Se) : [], Ce = {
|
|
415
394
|
afr: "af",
|
|
416
395
|
alb: "sq",
|
|
417
396
|
amh: "am",
|
|
@@ -516,15 +495,15 @@ var r = (e) => {
|
|
|
516
495
|
wel: "cy",
|
|
517
496
|
yid: "yi",
|
|
518
497
|
zho: "zh"
|
|
519
|
-
},
|
|
498
|
+
}, we = /* @__PURE__ */ new Set([
|
|
520
499
|
"mul",
|
|
521
500
|
"und",
|
|
522
501
|
"zxx",
|
|
523
502
|
"sgn"
|
|
524
503
|
]), H = (e) => {
|
|
525
504
|
let t = e.trim().toLowerCase();
|
|
526
|
-
if (t.length !== 0 && !
|
|
527
|
-
},
|
|
505
|
+
if (t.length !== 0 && !we.has(t)) return Ce[t] ?? t;
|
|
506
|
+
}, Te = 25, Ee = {
|
|
528
507
|
key: "identifiers",
|
|
529
508
|
title: "title",
|
|
530
509
|
subtitle: "title",
|
|
@@ -535,7 +514,7 @@ var r = (e) => {
|
|
|
535
514
|
number_of_pages_median: "numberOfPages",
|
|
536
515
|
cover_i: "cover",
|
|
537
516
|
id_project_gutenberg: "identifiers"
|
|
538
|
-
}, U = "OpenLibrary",
|
|
517
|
+
}, U = "OpenLibrary", De = "ProjectGutenberg", W = (e) => e.length > 0 ? e : void 0, G = (e, t) => {
|
|
539
518
|
let n = e.title !== void 0 && e.subtitle !== void 0 ? `${e.title}: ${e.subtitle}` : e.title, r = W([...new Set((e.language ?? []).map(H).filter((e) => e !== void 0))]), i = [
|
|
540
519
|
...t.isbn === void 0 ? [] : [{
|
|
541
520
|
value: t.isbn,
|
|
@@ -544,14 +523,14 @@ var r = (e) => {
|
|
|
544
523
|
...t.matchedProjectGutenbergIdentifier === void 0 ? [] : [t.matchedProjectGutenbergIdentifier],
|
|
545
524
|
...(e.id_project_gutenberg ?? []).map((e) => ({
|
|
546
525
|
value: e,
|
|
547
|
-
scheme:
|
|
526
|
+
scheme: De
|
|
548
527
|
})),
|
|
549
528
|
...e.key === void 0 ? [] : [{
|
|
550
529
|
value: e.key,
|
|
551
530
|
scheme: U
|
|
552
531
|
}]
|
|
553
532
|
];
|
|
554
|
-
return
|
|
533
|
+
return N({
|
|
555
534
|
title: n,
|
|
556
535
|
cover: e.cover_i === void 0 ? void 0 : {
|
|
557
536
|
uri: `${t.coversBaseUrl}/b/id/${e.cover_i}-L.jpg`,
|
|
@@ -569,7 +548,7 @@ var r = (e) => {
|
|
|
569
548
|
isbn: t.isbn,
|
|
570
549
|
identifiers: W(i)
|
|
571
550
|
});
|
|
572
|
-
},
|
|
551
|
+
}, Oe = "openLibrary", ke = "https://openlibrary.org", Ae = "https://covers.openlibrary.org", je = [
|
|
573
552
|
"key",
|
|
574
553
|
"title",
|
|
575
554
|
"subtitle",
|
|
@@ -580,19 +559,19 @@ var r = (e) => {
|
|
|
580
559
|
"number_of_pages_median",
|
|
581
560
|
"cover_i",
|
|
582
561
|
"id_project_gutenberg"
|
|
583
|
-
].join(","),
|
|
562
|
+
].join(","), Me = (e) => {
|
|
584
563
|
let t = e.title?.trim();
|
|
585
564
|
if (t === void 0 || t.length === 0) return;
|
|
586
|
-
let n =
|
|
565
|
+
let n = e.authors?.find((e) => e.trim().length > 0)?.trim();
|
|
587
566
|
return {
|
|
588
567
|
title: t,
|
|
589
568
|
...n === void 0 ? {} : { author: n }
|
|
590
569
|
};
|
|
591
|
-
},
|
|
592
|
-
let t = e.baseUrl ??
|
|
570
|
+
}, Ne = (e = {}) => {
|
|
571
|
+
let t = e.baseUrl ?? ke, n = e.coversBaseUrl ?? Ae, r = async (n, r) => {
|
|
593
572
|
let i = new URL("/search.json", t);
|
|
594
573
|
for (let [e, t] of Object.entries(n)) i.searchParams.set(e, t);
|
|
595
|
-
i.searchParams.set("fields",
|
|
574
|
+
i.searchParams.set("fields", je), i.searchParams.set("limit", String(r.limit));
|
|
596
575
|
let a = await (e.fetch ?? globalThis.fetch)(i.toString(), {
|
|
597
576
|
signal: r.signal,
|
|
598
577
|
headers: {
|
|
@@ -600,7 +579,7 @@ var r = (e) => {
|
|
|
600
579
|
...e.userAgent === void 0 ? {} : { "User-Agent": e.userAgent }
|
|
601
580
|
}
|
|
602
581
|
});
|
|
603
|
-
if (!a.ok) throw new
|
|
582
|
+
if (!a.ok) throw new A(a.status, `Open Library search failed with status ${a.status}`);
|
|
604
583
|
return V(await a.json());
|
|
605
584
|
}, i = (e, r = {}) => e.map((e) => ({
|
|
606
585
|
metadata: G(e, {
|
|
@@ -613,7 +592,7 @@ var r = (e) => {
|
|
|
613
592
|
raw: e
|
|
614
593
|
}));
|
|
615
594
|
return {
|
|
616
|
-
id:
|
|
595
|
+
id: Oe,
|
|
617
596
|
name: "Open Library",
|
|
618
597
|
search: async (e, t) => {
|
|
619
598
|
let n = e.isbn?.trim() || void 0, a = I(e);
|
|
@@ -625,55 +604,55 @@ var r = (e) => {
|
|
|
625
604
|
let e = await r({ q: `id_project_gutenberg:${a.id}` }, t);
|
|
626
605
|
if (e.length > 0) return i(e, { confirmedProjectGutenberg: a });
|
|
627
606
|
}
|
|
628
|
-
let o =
|
|
607
|
+
let o = Me(e);
|
|
629
608
|
return o === void 0 ? [] : i(await r(o, t));
|
|
630
609
|
}
|
|
631
610
|
};
|
|
632
|
-
},
|
|
611
|
+
}, K = (e) => e.includes(":") ? e.slice(e.lastIndexOf(":") + 1) : e, Pe = (e) => e.type === "element", q = (e, t) => e.children.filter((e) => Pe(e) && K(e.name).toLowerCase() === t.toLowerCase()), J = (e, t) => q(e, t)[0], Y = (e) => {
|
|
633
612
|
let t = e?.val.trim();
|
|
634
613
|
return t !== void 0 && t.length > 0 ? t : void 0;
|
|
635
|
-
},
|
|
614
|
+
}, X = (e, t) => {
|
|
636
615
|
for (let [n, r] of Object.entries(e.attr)) {
|
|
637
|
-
if (
|
|
616
|
+
if (K(n).toLowerCase() !== t.toLowerCase()) continue;
|
|
638
617
|
let e = r.trim();
|
|
639
618
|
if (e.length > 0) return e;
|
|
640
619
|
}
|
|
641
|
-
},
|
|
642
|
-
let t =
|
|
620
|
+
}, Fe = (e, t) => q(e, t).flatMap((e) => {
|
|
621
|
+
let t = Y(J(J(e, "Description") ?? e, "value"));
|
|
643
622
|
return t === void 0 ? [] : [t];
|
|
644
|
-
}),
|
|
645
|
-
let t =
|
|
623
|
+
}), Ie = (e) => {
|
|
624
|
+
let t = X(e, "about"), n = t === void 0 ? void 0 : /(?:^|\/)ebooks\/(\d+)$/.exec(t)?.[1];
|
|
646
625
|
if (n === void 0) return;
|
|
647
626
|
let r = n.replace(/^0+(?=\d)/, "");
|
|
648
627
|
return r === "0" ? void 0 : r;
|
|
649
|
-
},
|
|
628
|
+
}, Le = (e) => {
|
|
650
629
|
let t = [];
|
|
651
630
|
for (let n of e.children) {
|
|
652
|
-
if (!
|
|
631
|
+
if (!Pe(n)) continue;
|
|
653
632
|
let e = n.name.toLowerCase() === "dcterms:creator", r = n.name.toLowerCase().startsWith("marcrel:");
|
|
654
633
|
if (!e && !r) continue;
|
|
655
|
-
let i =
|
|
634
|
+
let i = Y(J(J(n, "agent") ?? n, "name"));
|
|
656
635
|
i !== void 0 && t.push({
|
|
657
636
|
name: i,
|
|
658
|
-
role: e ? "aut" :
|
|
637
|
+
role: e ? "aut" : K(n.name).toLowerCase()
|
|
659
638
|
});
|
|
660
639
|
}
|
|
661
640
|
return t;
|
|
662
|
-
},
|
|
663
|
-
let t =
|
|
641
|
+
}, Re = (e) => q(e, "subject").flatMap((e) => {
|
|
642
|
+
let t = J(e, "Description"), n = t === void 0 ? void 0 : X(J(t, "memberOf") ?? t, "resource"), r = Y(t === void 0 ? void 0 : J(t, "value"));
|
|
664
643
|
return r !== void 0 && n?.endsWith("/LCSH") === !0 ? [r] : [];
|
|
665
|
-
}),
|
|
666
|
-
let t =
|
|
667
|
-
let t =
|
|
644
|
+
}), ze = (e) => {
|
|
645
|
+
let t = q(e, "hasFormat").flatMap((e) => {
|
|
646
|
+
let t = J(e, "file");
|
|
668
647
|
if (t === void 0) return [];
|
|
669
|
-
let n =
|
|
648
|
+
let n = X(t, "about"), r = q(t, "format").map((e) => Y(J(J(e, "Description") ?? e, "value"))).find((e) => e?.startsWith("image/") === !0);
|
|
670
649
|
return n === void 0 || r === void 0 || !/\.cover\.(?:medium|small)\.[a-z0-9]+(?:$|[?#])/i.test(n) ? [] : [{
|
|
671
650
|
uri: n,
|
|
672
651
|
mediaType: r
|
|
673
652
|
}];
|
|
674
653
|
});
|
|
675
654
|
return t.find((e) => /\.cover\.medium\./i.test(e.uri)) ?? t[0];
|
|
676
|
-
},
|
|
655
|
+
}, Z = (e) => e.length > 0 ? e : void 0, Be = (e) => {
|
|
677
656
|
let t;
|
|
678
657
|
try {
|
|
679
658
|
t = new n(e);
|
|
@@ -681,28 +660,28 @@ var r = (e) => {
|
|
|
681
660
|
let t = e instanceof Error ? e.message : String(e);
|
|
682
661
|
throw Error(`Project Gutenberg RDF is malformed: ${t}`, { cause: e });
|
|
683
662
|
}
|
|
684
|
-
if (
|
|
685
|
-
let r =
|
|
663
|
+
if (K(t.name).toLowerCase() !== "rdf") return;
|
|
664
|
+
let r = J(t, "ebook");
|
|
686
665
|
if (r === void 0) return;
|
|
687
|
-
let i =
|
|
666
|
+
let i = Ie(r);
|
|
688
667
|
if (i === void 0) return;
|
|
689
|
-
let a = [...new Set(
|
|
668
|
+
let a = [...new Set(Fe(r, "language"))], o = [...new Set(Re(r))], s = [...new Set(Fe(r, "bookshelf"))], c = Le(r);
|
|
690
669
|
return {
|
|
691
670
|
id: i,
|
|
692
|
-
title:
|
|
693
|
-
publisher:
|
|
694
|
-
issued:
|
|
695
|
-
originalPublication:
|
|
696
|
-
rights:
|
|
697
|
-
description:
|
|
698
|
-
summary:
|
|
699
|
-
languages:
|
|
700
|
-
subjects:
|
|
701
|
-
bookshelves:
|
|
702
|
-
contributors:
|
|
703
|
-
cover:
|
|
671
|
+
title: Y(J(r, "title")),
|
|
672
|
+
publisher: Y(J(r, "publisher")),
|
|
673
|
+
issued: Y(J(r, "issued")),
|
|
674
|
+
originalPublication: Y(J(r, "marc260")),
|
|
675
|
+
rights: Y(J(r, "rights")),
|
|
676
|
+
description: Y(J(r, "description")),
|
|
677
|
+
summary: Y(J(r, "marc520")),
|
|
678
|
+
languages: Z(a),
|
|
679
|
+
subjects: Z(o),
|
|
680
|
+
bookshelves: Z(s),
|
|
681
|
+
contributors: Z(c),
|
|
682
|
+
cover: ze(r)
|
|
704
683
|
};
|
|
705
|
-
},
|
|
684
|
+
}, Ve = 25, He = {
|
|
706
685
|
id: "identifiers",
|
|
707
686
|
title: "title",
|
|
708
687
|
publisher: "publication.edition.publisher",
|
|
@@ -716,7 +695,7 @@ var r = (e) => {
|
|
|
716
695
|
bookshelves: "subjects",
|
|
717
696
|
contributors: "contributors",
|
|
718
697
|
cover: "cover"
|
|
719
|
-
},
|
|
698
|
+
}, Ue = {
|
|
720
699
|
art: "artist",
|
|
721
700
|
aut: "author",
|
|
722
701
|
clr: "colorist",
|
|
@@ -725,17 +704,17 @@ var r = (e) => {
|
|
|
725
704
|
ill: "illustrator",
|
|
726
705
|
nrt: "narrator",
|
|
727
706
|
trl: "translator"
|
|
728
|
-
},
|
|
707
|
+
}, We = (e) => {
|
|
729
708
|
let t = /* @__PURE__ */ new Map();
|
|
730
709
|
for (let n of e.contributors ?? []) {
|
|
731
|
-
let e = n.name.trim().toLowerCase(), r =
|
|
710
|
+
let e = n.name.trim().toLowerCase(), r = Ue[n.role.trim().toLowerCase()] ?? n.role, i = t.get(e);
|
|
732
711
|
i === void 0 ? t.set(e, {
|
|
733
712
|
name: n.name,
|
|
734
713
|
roles: [r]
|
|
735
714
|
}) : i.roles.includes(r) || i.roles.push(r);
|
|
736
715
|
}
|
|
737
716
|
return t.size > 0 ? [...t.values()] : void 0;
|
|
738
|
-
},
|
|
717
|
+
}, Ge = (e) => {
|
|
739
718
|
if (e === void 0) return;
|
|
740
719
|
let t = /^(\d{4})(?:-(\d{2})(?:-(\d{2}))?)?$/.exec(e.trim());
|
|
741
720
|
if (t === null) return;
|
|
@@ -745,48 +724,48 @@ var r = (e) => {
|
|
|
745
724
|
...r === void 0 ? {} : { month: r },
|
|
746
725
|
...i === void 0 ? {} : { day: i }
|
|
747
726
|
};
|
|
748
|
-
},
|
|
727
|
+
}, Q = (e, t) => e.split("$").slice(1).flatMap((e) => e[0]?.toLowerCase() === t.toLowerCase() ? [e.slice(1).trim()] : []).filter((e) => e.length > 0), Ke = (e) => {
|
|
749
728
|
if (e === void 0) return;
|
|
750
|
-
let t =
|
|
729
|
+
let t = Q(e, "b"), n = (t.length === 1 ? t[0] : void 0)?.replace(/[\s,;:/]+$/u, "").trim(), r = Q(e, "c"), i = [...new Set(r.flatMap((e) => [...e.matchAll(/\d{4}/g)].flatMap((e) => e[0] === void 0 ? [] : [Number(e[0])])))], a = N({
|
|
751
730
|
date: i.length === 1 ? { year: i[0] } : void 0,
|
|
752
731
|
publisher: n !== void 0 && n.length > 0 && !/^\[?s\.n\.?\]?$/i.test(n) ? n : void 0
|
|
753
732
|
});
|
|
754
733
|
return a.date !== void 0 || a.publisher !== void 0 ? a : void 0;
|
|
755
|
-
},
|
|
734
|
+
}, qe = (e, t) => {
|
|
756
735
|
try {
|
|
757
736
|
let n = new URL(e, t);
|
|
758
737
|
return n.protocol === "http:" || n.protocol === "https:" ? n.toString() : void 0;
|
|
759
738
|
} catch {
|
|
760
739
|
return;
|
|
761
740
|
}
|
|
762
|
-
},
|
|
741
|
+
}, Je = (e) => e.length > 0 ? e : void 0, Ye = (e, t) => {
|
|
763
742
|
let n = [t.matchedIdentifier, {
|
|
764
743
|
value: e.id,
|
|
765
744
|
scheme: P
|
|
766
|
-
}].filter((e, t, n) => n.findIndex((t) => t.value.trim().toLowerCase() === e.value.trim().toLowerCase() && t.scheme?.trim().toLowerCase() === e.scheme?.trim().toLowerCase()) === t), r = [.../* @__PURE__ */ new Set([...e.subjects ?? [], ...e.bookshelves ?? []])].slice(0, 25), i = e.cover === void 0 ? void 0 :
|
|
745
|
+
}].filter((e, t, n) => n.findIndex((t) => t.value.trim().toLowerCase() === e.value.trim().toLowerCase() && t.scheme?.trim().toLowerCase() === e.scheme?.trim().toLowerCase()) === t), r = [.../* @__PURE__ */ new Set([...e.subjects ?? [], ...e.bookshelves ?? []])].slice(0, 25), i = e.cover === void 0 ? void 0 : qe(e.cover.uri, t.baseUrl), a = i === void 0 ? void 0 : {
|
|
767
746
|
uri: i,
|
|
768
747
|
mediaType: e.cover?.mediaType,
|
|
769
748
|
confidence: "derived"
|
|
770
|
-
}, o =
|
|
771
|
-
date:
|
|
749
|
+
}, o = N({
|
|
750
|
+
date: Ge(e.issued),
|
|
772
751
|
publisher: e.publisher
|
|
773
|
-
}), s =
|
|
774
|
-
original:
|
|
752
|
+
}), s = N({
|
|
753
|
+
original: Ke(e.originalPublication),
|
|
775
754
|
edition: o.date !== void 0 || o.publisher !== void 0 ? o : void 0
|
|
776
755
|
});
|
|
777
|
-
return
|
|
756
|
+
return N({
|
|
778
757
|
title: e.title,
|
|
779
758
|
publication: s.original !== void 0 || s.edition !== void 0 ? s : void 0,
|
|
780
759
|
description: e.summary ?? e.description,
|
|
781
760
|
rights: e.rights,
|
|
782
|
-
languages:
|
|
783
|
-
subjects:
|
|
784
|
-
contributors:
|
|
761
|
+
languages: Je([...new Set(e.languages ?? [])]),
|
|
762
|
+
subjects: Je(r),
|
|
763
|
+
contributors: We(e),
|
|
785
764
|
identifiers: n,
|
|
786
765
|
cover: a
|
|
787
766
|
});
|
|
788
|
-
}, $ = "projectGutenberg",
|
|
789
|
-
let t = e.baseUrl ??
|
|
767
|
+
}, $ = "projectGutenberg", Xe = "https://www.gutenberg.org", Ze = (e = {}) => {
|
|
768
|
+
let t = e.baseUrl ?? Xe;
|
|
790
769
|
return {
|
|
791
770
|
id: $,
|
|
792
771
|
name: "Project Gutenberg",
|
|
@@ -801,28 +780,28 @@ var r = (e) => {
|
|
|
801
780
|
}
|
|
802
781
|
});
|
|
803
782
|
if (o.status === 404) return [];
|
|
804
|
-
if (!o.ok) throw new
|
|
805
|
-
let s =
|
|
783
|
+
if (!o.ok) throw new A(o.status, `Project Gutenberg metadata lookup failed with status ${o.status}`);
|
|
784
|
+
let s = Be(await o.text());
|
|
806
785
|
if (s === void 0 || s.id !== i.id) throw Error(`Project Gutenberg RDF did not contain the requested eBook ${i.id}`);
|
|
807
786
|
let c = new URL(`/ebooks/${i.id}`, t).toString();
|
|
808
787
|
return [{
|
|
809
788
|
id: s.id,
|
|
810
789
|
url: c,
|
|
811
790
|
raw: s,
|
|
812
|
-
metadata:
|
|
791
|
+
metadata: Ye(s, {
|
|
813
792
|
baseUrl: t,
|
|
814
793
|
matchedIdentifier: i.identifier
|
|
815
794
|
})
|
|
816
795
|
}];
|
|
817
796
|
}
|
|
818
797
|
};
|
|
819
|
-
},
|
|
798
|
+
}, Qe = (e) => [
|
|
820
799
|
e.title,
|
|
821
800
|
e.isbn,
|
|
822
801
|
e.gtin,
|
|
823
|
-
e.
|
|
824
|
-
].some((e) => e !== void 0 && e.trim().length > 0) || (e.identifiers ?? []).length > 0 ||
|
|
802
|
+
e.series
|
|
803
|
+
].some((e) => e !== void 0 && e.trim().length > 0) || (e.identifiers ?? []).some((e) => e.value.trim().length > 0) || (e.authors ?? []).some((e) => e.trim().length > 0);
|
|
825
804
|
//#endregion
|
|
826
|
-
export {
|
|
805
|
+
export { T as METADATA_MATCH_WEIGHTS, A as MetadataProviderResponseError, U as OPEN_LIBRARY_IDENTIFIER_SCHEME, Te as OPEN_LIBRARY_MAX_SUBJECTS, Oe as OPEN_LIBRARY_PROVIDER_ID, P as PROJECT_GUTENBERG_IDENTIFIER_SCHEME, Ve as PROJECT_GUTENBERG_MAX_SUBJECTS, $ as PROJECT_GUTENBERG_PROVIDER_ID, Ne as createOpenLibraryProvider, Ze as createProjectGutenbergProvider, ge as fetchMetadata, Qe as hasSearchTerms, H as marcLanguageToBcp47, r as metadataAuthors, _e as metadataInputFromResolvedArchive, l as normalizeForComparison, Ee as openLibraryMetadataHomes, V as parseOpenLibrarySearchResponse, Be as parseProjectGutenbergRdf, w as personNameSimilarity, I as projectGutenbergLookupFromInput, He as projectGutenbergMetadataHomes, G as resolveOpenLibraryDoc, Ye as resolveProjectGutenbergRecord, j as responseErrorStatus, k as scoreMetadataCandidate, d as textSimilarity, te as titleSimilarity, o as toIsbn13 };
|
|
827
806
|
|
|
828
807
|
//# sourceMappingURL=index.js.map
|