@prose-reader/metadata-fetcher 1.349.0 → 1.352.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.js CHANGED
@@ -1,47 +1,38 @@
1
- import { mainTitle as e, normalizeGtin as t, normalizeIsbn as n, parseW3cDtfDate as r } from "@prose-reader/archive-reader";
2
- import { Report as i } from "@prose-reader/shared";
3
- import { XmlDocument as a } from "xmldoc";
4
- //#region src/utils/identifierValues.ts
5
- var o = (e, t) => t.has(e.scheme.trim().toLowerCase()), s = (e, t, n) => {
6
- for (let r of e ?? []) {
7
- if (!o(r, t)) continue;
8
- let e = n(r.value);
9
- if (e !== void 0) return e;
10
- }
11
- }, c = /* @__PURE__ */ new Set(["isbn", "gtin"]), l = /* @__PURE__ */ new Set(["gtin", "isbn"]), u = (e) => {
12
- let t = n(e);
13
- return t !== void 0 && (t.length === 10 || /^97[89]/.test(t)) ? t : void 0;
14
- }, d = (e) => s(e, c, u), f = (e) => s(e, l, t), p = (e) => {
1
+ import { gtinIdentifierValue as e, isIsbnBearingScheme as t, isbnIdentifierValue as n, mainTitle as r, normalizeIsbn as i, parseW3cDtfDate as a } from "@prose-reader/archive-reader";
2
+ import { Report as o } from "@prose-reader/shared";
3
+ import { XmlDocument as s } from "xmldoc";
4
+ //#region src/utils/metadataAuthors.ts
5
+ var c = (e) => {
15
6
  let t = e.contributors ?? [], n = t.filter((e) => e.roles.includes("author")), r = (n.length > 0 ? n : t).map((e) => e.name.trim()).filter((e) => e.length > 0);
16
7
  return [...new Set(r)];
17
- }, m = /^\d{13}$/, h = /^\d{9}[\dX]$/, g = (e) => {
18
- let t = n(e);
8
+ }, l = /^\d{13}$/, u = /^\d{9}[\dX]$/, d = (e) => {
9
+ let t = i(e);
19
10
  if (t === void 0) return;
20
- if (m.test(t)) return t;
21
- if (!h.test(t)) return;
22
- let r = `978${t.slice(0, 9)}`, i = 0;
23
- for (let e = 0; e < r.length; e++) {
24
- let t = r.charCodeAt(e) - 48;
25
- i += e % 2 == 0 ? t : t * 3;
11
+ if (l.test(t)) return t;
12
+ if (!u.test(t)) return;
13
+ let n = `978${t.slice(0, 9)}`, r = 0;
14
+ for (let e = 0; e < n.length; e++) {
15
+ let t = n.charCodeAt(e) - 48;
16
+ r += e % 2 == 0 ? t : t * 3;
26
17
  }
27
- return `${r}${(10 - i % 10) % 10}`;
28
- }, _ = /[\u0300-\u036f]/g, v = /[^\p{L}\p{N}]+/gu, y = (e) => e.normalize("NFD").replace(_, "").toLowerCase().replace(v, " ").trim(), b = (e) => {
18
+ return `${n}${(10 - r % 10) % 10}`;
19
+ }, f = /[\u0300-\u036f]/g, p = /[^\p{L}\p{N}]+/gu, m = (e) => e.normalize("NFD").replace(f, "").toLowerCase().replace(p, " ").trim(), h = (e) => {
29
20
  let t = /* @__PURE__ */ new Map();
30
21
  for (let n = 0; n < e.length - 1; n++) {
31
22
  let r = e.slice(n, n + 2);
32
23
  t.set(r, (t.get(r) ?? 0) + 1);
33
24
  }
34
25
  return t;
35
- }, x = (e, t) => {
36
- let n = y(e).replaceAll(" ", ""), r = y(t).replaceAll(" ", "");
26
+ }, g = (e, t) => {
27
+ let n = m(e).replaceAll(" ", ""), r = m(t).replaceAll(" ", "");
37
28
  if (n.length === 0 || r.length === 0) return 0;
38
29
  if (n === r) return 1;
39
30
  if (n.length < 2 || r.length < 2) return 0;
40
- let i = b(n), a = 0;
41
- for (let [e, t] of b(r)) a += Math.min(t, i.get(e) ?? 0);
31
+ let i = h(n), a = 0;
32
+ for (let [e, t] of h(r)) a += Math.min(t, i.get(e) ?? 0);
42
33
  return 2 * a / (n.length - 1 + (r.length - 1));
43
- }, S = /\s*[:;]\s*|\s+[-–—]\s+/, C = (e) => {
44
- let [t = "", ...n] = e.split(S), r = t.trim(), i = n.join(" ").trim();
34
+ }, _ = /\s*[:;]\s*|\s+[-–—]\s+/, v = (e) => {
35
+ let [t = "", ...n] = e.split(_), r = t.trim(), i = n.join(" ").trim();
45
36
  return r.length === 0 ? {
46
37
  main: e,
47
38
  hasSubtitle: !1
@@ -49,11 +40,11 @@ var o = (e, t) => t.has(e.scheme.trim().toLowerCase()), s = (e, t, n) => {
49
40
  main: r,
50
41
  hasSubtitle: i.length > 0
51
42
  };
52
- }, w = .9, T = [
43
+ }, y = .9, b = [
53
44
  "volume",
54
45
  "part",
55
46
  "book"
56
- ], E = /\b(volumes?|vols?|parts?|books?)\s+([\p{L}\p{N}]+)\b/gu, D = {
47
+ ], x = /\b(volumes?|vols?|parts?|books?)\s+([\p{L}\p{N}]+)\b/gu, S = {
57
48
  one: 1,
58
49
  first: 1,
59
50
  two: 2,
@@ -78,7 +69,7 @@ var o = (e, t) => t.has(e.scheme.trim().toLowerCase()), s = (e, t, n) => {
78
69
  eleventh: 11,
79
70
  twelve: 12,
80
71
  twelfth: 12
81
- }, O = {
72
+ }, C = {
82
73
  i: 1,
83
74
  v: 5,
84
75
  x: 10,
@@ -86,58 +77,58 @@ var o = (e, t) => t.has(e.scheme.trim().toLowerCase()), s = (e, t, n) => {
86
77
  c: 100,
87
78
  d: 500,
88
79
  m: 1e3
89
- }, ee = (e) => {
80
+ }, w = (e) => {
90
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;
91
82
  let t = 0, n = 0;
92
83
  for (let r of [...e.toLowerCase()].reverse()) {
93
- let e = O[r];
84
+ let e = C[r];
94
85
  if (e === void 0) return;
95
86
  e < n ? t -= e : (t += e, n = e);
96
87
  }
97
88
  return t > 0 ? t : void 0;
98
- }, te = (e) => /^\d+$/.test(e) ? Number.parseInt(e, 10) : D[e] ?? ee(e), ne = (e) => {
89
+ }, T = (e) => /^\d+$/.test(e) ? Number.parseInt(e, 10) : S[e] ?? w(e), E = (e) => {
99
90
  if (e.startsWith("vol")) return "volume";
100
91
  if (e.startsWith("part")) return "part";
101
92
  if (e.startsWith("book")) return "book";
102
- }, k = (e) => {
93
+ }, D = (e) => {
103
94
  let t = /* @__PURE__ */ new Map();
104
- for (let n of y(e).matchAll(E)) {
105
- let e = n[1] === void 0 ? void 0 : ne(n[1]), r = n[2] === void 0 ? void 0 : te(n[2]);
95
+ for (let n of m(e).matchAll(x)) {
96
+ let e = n[1] === void 0 ? void 0 : E(n[1]), r = n[2] === void 0 ? void 0 : T(n[2]);
106
97
  if (e === void 0 || r === void 0) continue;
107
98
  let i = t.get(e) ?? /* @__PURE__ */ new Set();
108
99
  i.add(r), t.set(e, i);
109
100
  }
110
101
  return t;
111
- }, re = (e, t) => {
112
- let n = k(e), r = k(t);
113
- for (let e of T) {
102
+ }, O = (e, t) => {
103
+ let n = D(e), r = D(t);
104
+ for (let e of b) {
114
105
  let t = n.get(e), i = r.get(e);
115
106
  if (!(t === void 0 || i === void 0) && [...t].every((e) => !i.has(e))) return !0;
116
107
  }
117
108
  return !1;
118
- }, ie = (e) => {
109
+ }, k = (e) => {
119
110
  let t = /* @__PURE__ */ new Set();
120
- for (let n of k(e).values()) for (let e of n) t.add(e);
111
+ for (let n of D(e).values()) for (let e of n) t.add(e);
121
112
  return t;
122
- }, ae = (e, t) => {
123
- if (re(e, t)) return 0;
124
- let n = x(e, t), r = C(e), i = C(t);
125
- return r.hasSubtitle === i.hasSubtitle ? n : Math.max(n, x(r.main, i.main) * w);
126
- }, oe = (e, t) => {
113
+ }, ee = (e, t) => {
114
+ if (O(e, t)) return 0;
115
+ let n = g(e, t), r = v(e), i = v(t);
116
+ return r.hasSubtitle === i.hasSubtitle ? n : Math.max(n, g(r.main, i.main) * y);
117
+ }, te = (e, t) => {
127
118
  let n;
128
119
  for (let r of t) {
129
- if (re(e, r)) return {
120
+ if (O(e, r)) return {
130
121
  score: 0,
131
122
  candidate: r
132
123
  };
133
- let t = ae(e, r);
124
+ let t = ee(e, r);
134
125
  (n === void 0 || t > n.score) && (n = {
135
126
  score: t,
136
127
  candidate: r
137
128
  });
138
129
  }
139
130
  return n;
140
- }, se = (e) => y(e).split(" ").filter((e) => e.length > 0).sort().join(" "), ce = (e, t) => x(se(e), se(t)), le = {
131
+ }, ne = (e) => m(e).split(" ").filter((e) => e.length > 0).sort().join(" "), re = (e, t) => g(ne(e), ne(t)), ie = {
141
132
  isbn: 1,
142
133
  gtin: 1,
143
134
  identifiers: .6,
@@ -148,30 +139,27 @@ var o = (e, t) => t.has(e.scheme.trim().toLowerCase()), s = (e, t, n) => {
148
139
  publisher: .15,
149
140
  languages: .15,
150
141
  numberOfPages: .15
151
- }, ue = /* @__PURE__ */ new Set(["isbn", "gtin"]), A = (e) => {
142
+ }, ae = /* @__PURE__ */ new Set(["isbn", "gtin"]), A = (e) => {
152
143
  let t = e?.trim();
153
144
  return t !== void 0 && t.length > 0 ? t : void 0;
154
- }, de = (e, t) => {
145
+ }, oe = (e, t) => {
155
146
  let n = A(e.value)?.toLowerCase();
156
147
  return n !== void 0 && n === A(t.value)?.toLowerCase();
157
- }, j = (e) => e.scheme.trim().toLowerCase() === "unknown" ? void 0 : A(e.scheme)?.toLowerCase(), fe = (e) => `${e.scheme}:${e.value}`, pe = (e) => {
158
- let t = e.scheme.trim().toLowerCase();
159
- return t === "isbn" || t === "gtin";
160
- }, me = (e, t) => {
161
- if (!de(e, t)) return !1;
148
+ }, j = (e) => e.scheme.trim().toLowerCase() === "unknown" ? void 0 : A(e.scheme)?.toLowerCase(), se = (e) => `${e.scheme}:${e.value}`, ce = (e, t) => {
149
+ if (!oe(e, t)) return !1;
162
150
  let n = j(e), r = j(t);
163
151
  return n === void 0 || r === void 0 || n === r;
164
- }, he = (e, t) => {
165
- if (!de(e, t)) return !1;
152
+ }, le = (e, t) => {
153
+ if (!oe(e, t)) return !1;
166
154
  let n = j(e), r = j(t);
167
155
  return n !== void 0 && n === r;
168
- }, ge = (e) => e.trim().toLowerCase().split("-")[0] ?? "", _e = (e, t) => {
156
+ }, ue = (e) => e.trim().toLowerCase().split("-")[0] ?? "", de = (e, t) => {
169
157
  let n = Math.abs(e - t);
170
158
  return n === 0 ? 1 : n === 1 ? .6 : n <= 3 ? .3 : 0;
171
- }, ve = (e, t) => {
159
+ }, fe = (e, t) => {
172
160
  let n = Math.max(e, t);
173
161
  return n <= 0 ? 0 : Math.max(0, 1 - Math.abs(e - t) / n * 2);
174
- }, ye = (e, t, n) => e.reduce((e, r) => t.reduce((e, t) => Math.max(e, n(r, t)), e), 0), be = (e, t, n = x) => {
162
+ }, pe = (e, t, n) => e.reduce((e, r) => t.reduce((e, t) => Math.max(e, n(r, t)), e), 0), me = (e, t, n = g) => {
175
163
  let r = A(e);
176
164
  if (r === void 0) return;
177
165
  let i;
@@ -186,113 +174,113 @@ var o = (e, t) => t.has(e.scheme.trim().toLowerCase()), s = (e, t, n) => {
186
174
  (i === void 0 || a.score > i.score) && (i = a);
187
175
  }
188
176
  return i;
189
- }, xe = (t) => {
190
- let n = e(t), r = t.titles?.find((e) => e.type === "subtitle")?.value;
191
- return n !== void 0 && r !== void 0 ? `${n}: ${r}` : void 0;
192
- }, Se = (e, t) => {
193
- let n = ie(e);
177
+ }, he = (e) => {
178
+ let t = r(e), n = e.titles?.find((e) => e.type === "subtitle")?.value;
179
+ return t !== void 0 && n !== void 0 ? `${t}: ${n}` : void 0;
180
+ }, ge = (e, t) => {
181
+ let n = k(e);
194
182
  if (n.size === 0) return !1;
195
183
  let r = (t.belongsTo?.series ?? []).flatMap((e) => e.position === void 0 ? [] : [e.position]);
196
184
  return r.length > 0 && r.every((e) => !n.has(e));
197
- }, Ce = (e, t) => {
185
+ }, _e = (e, t) => {
198
186
  if (e === void 0) return;
199
187
  let n;
200
188
  for (let r of t) {
201
189
  if (r === void 0) continue;
202
190
  let t = {
203
- score: _e(e, r),
191
+ score: de(e, r),
204
192
  query: String(e),
205
193
  candidate: String(r)
206
194
  };
207
195
  (n === void 0 || t.score > n.score) && (n = t);
208
196
  }
209
197
  return n;
210
- }, we = (t, n) => {
211
- let r = [], i = (e, t) => {
212
- t !== void 0 && r.push({
198
+ }, ve = (i, a) => {
199
+ let o = [], s = (e, t) => {
200
+ t !== void 0 && o.push({
213
201
  field: e,
214
- weight: le[e],
202
+ weight: ie[e],
215
203
  score: Math.min(1, Math.max(0, t.score)),
216
204
  query: t.query,
217
205
  candidate: t.candidate
218
206
  });
219
- }, a = (e, t, n, r = x) => {
220
- let a = A(t), o = A(n);
221
- a === void 0 || o === void 0 || i(e, {
222
- score: r(a, o),
223
- query: a,
224
- candidate: o
207
+ }, l = (e, t, n, r = g) => {
208
+ let i = A(t), a = A(n);
209
+ i === void 0 || a === void 0 || s(e, {
210
+ score: r(i, a),
211
+ query: i,
212
+ candidate: a
225
213
  });
226
- }, o = d(t.identifiers), s = d(n.identifiers), c = o === void 0 ? void 0 : g(o), l = s === void 0 ? void 0 : g(s), u = o !== void 0 && s !== void 0 && c !== void 0 && l !== void 0;
227
- u && i("isbn", {
228
- score: +(c === l),
229
- query: o,
230
- candidate: s
214
+ }, u = n(i.identifiers), f = n(a.identifiers), p = u === void 0 ? void 0 : d(u), m = f === void 0 ? void 0 : d(f), h = u !== void 0 && f !== void 0 && p !== void 0 && m !== void 0;
215
+ h && s("isbn", {
216
+ score: +(p === m),
217
+ query: u,
218
+ candidate: f
231
219
  });
232
- let m = f(t.identifiers), h = f(n.identifiers);
233
- !u && m !== void 0 && h !== void 0 && i("gtin", {
234
- score: +(m === h),
235
- query: m,
236
- candidate: h
220
+ let _ = e(i.identifiers), v = e(a.identifiers);
221
+ !h && _ !== void 0 && v !== void 0 && s("gtin", {
222
+ score: +(_ === v),
223
+ query: _,
224
+ candidate: v
237
225
  });
238
- let _ = (t.identifiers ?? []).filter((e) => !pe(e)), v = (n.identifiers ?? []).filter((e) => !pe(e)), y = _.some((e) => v.some((t) => he(e, t)));
239
- _.length > 0 && v.length > 0 && i("identifiers", {
240
- score: +!!_.some((e) => v.some((t) => me(e, t))),
241
- query: _.map(fe).join(", "),
242
- candidate: v.map(fe).join(", ")
226
+ let y = (i.identifiers ?? []).filter((e) => !t(e.scheme)), b = (a.identifiers ?? []).filter((e) => !t(e.scheme)), x = y.some((e) => b.some((t) => le(e, t)));
227
+ y.length > 0 && b.length > 0 && s("identifiers", {
228
+ score: +!!y.some((e) => b.some((t) => ce(e, t))),
229
+ query: y.map(se).join(", "),
230
+ candidate: b.map(se).join(", ")
243
231
  });
244
- let b = A(t.title), S = [e(n), xe(n)].flatMap((e) => {
232
+ let S = A(i.title), C = [r(a), he(a)].flatMap((e) => {
245
233
  let t = A(e);
246
234
  return t === void 0 ? [] : [t];
247
235
  });
248
- if (b !== void 0 && S.length > 0) {
249
- let e = oe(b, S);
250
- e !== void 0 && i("title", {
251
- score: Se(b, n) ? 0 : e.score,
252
- query: b,
236
+ if (S !== void 0 && C.length > 0) {
237
+ let e = te(S, C);
238
+ e !== void 0 && s("title", {
239
+ score: ge(S, a) ? 0 : e.score,
240
+ query: S,
253
241
  candidate: e.candidate
254
242
  });
255
243
  }
256
- i("publisher", be(t.publisher, [n.publication?.original?.publisher, n.publication?.edition?.publisher])), a("series", t.series, n.belongsTo?.series?.[0]?.name);
257
- let C = p(n), w = (t.authors ?? []).flatMap((e) => {
244
+ s("publisher", me(i.publisher, [a.publication?.original?.publisher, a.publication?.edition?.publisher])), l("series", i.series, a.belongsTo?.series?.[0]?.name);
245
+ let w = c(a), T = (i.authors ?? []).flatMap((e) => {
258
246
  let t = A(e);
259
247
  return t === void 0 ? [] : [t];
260
248
  });
261
- w.length > 0 && C.length > 0 && i("authors", {
262
- score: ye(w, C, ce),
263
- query: w.join(", "),
264
- candidate: C.join(", ")
265
- }), i("publishedYear", Ce(t.publishedYear, [n.publication?.original?.date?.year, n.publication?.edition?.date?.year]));
266
- let T = t.languages ?? [], E = n.languages ?? [];
267
- if (T.length > 0 && E.length > 0) {
268
- let e = new Set(E.map(ge));
269
- i("languages", {
270
- score: +!!T.some((t) => e.has(ge(t))),
271
- query: T.join(", "),
272
- candidate: E.join(", ")
249
+ T.length > 0 && w.length > 0 && s("authors", {
250
+ score: pe(T, w, re),
251
+ query: T.join(", "),
252
+ candidate: w.join(", ")
253
+ }), s("publishedYear", _e(i.publishedYear, [a.publication?.original?.date?.year, a.publication?.edition?.date?.year]));
254
+ let E = i.languages ?? [], D = a.languages ?? [];
255
+ if (E.length > 0 && D.length > 0) {
256
+ let e = new Set(D.map(ue));
257
+ s("languages", {
258
+ score: +!!E.some((t) => e.has(ue(t))),
259
+ query: E.join(", "),
260
+ candidate: D.join(", ")
273
261
  });
274
262
  }
275
- t.numberOfPages !== void 0 && n.numberOfPages !== void 0 && i("numberOfPages", {
276
- score: ve(t.numberOfPages, n.numberOfPages),
277
- query: String(t.numberOfPages),
278
- candidate: String(n.numberOfPages)
263
+ i.numberOfPages !== void 0 && a.numberOfPages !== void 0 && s("numberOfPages", {
264
+ score: fe(i.numberOfPages, a.numberOfPages),
265
+ query: String(i.numberOfPages),
266
+ candidate: String(a.numberOfPages)
279
267
  });
280
- let D = r.filter((e) => ue.has(e.field));
281
- if (D.some((e) => e.score === 0)) return {
268
+ let O = o.filter((e) => ae.has(e.field));
269
+ if (O.some((e) => e.score === 0)) return {
282
270
  score: 0,
283
- signals: r
271
+ signals: o
284
272
  };
285
- if (y || D.some((e) => e.score === 1)) return {
273
+ if (x || O.some((e) => e.score === 1)) return {
286
274
  score: 1,
287
- signals: r
275
+ signals: o
288
276
  };
289
- let O = r.reduce((e, t) => e + t.weight, 0);
290
- return O === 0 ? {
277
+ let k = o.reduce((e, t) => e + t.weight, 0);
278
+ return k === 0 ? {
291
279
  score: 0,
292
- signals: r
280
+ signals: o
293
281
  } : {
294
- score: r.reduce((e, t) => e + t.score * t.weight, 0) / O,
295
- signals: r
282
+ score: o.reduce((e, t) => e + t.score * t.weight, 0) / k,
283
+ signals: o
296
284
  };
297
285
  }, M = class extends Error {
298
286
  status;
@@ -303,10 +291,10 @@ var o = (e, t) => t.has(e.scheme.trim().toLowerCase()), s = (e, t, n) => {
303
291
  if (typeof e != "object" || !e || !("status" in e)) return;
304
292
  let { status: t } = e;
305
293
  if (!(typeof t != "number" || !Number.isInteger(t))) return t >= 100 && t <= 599 ? t : void 0;
306
- }, Te = i.namespace("@prose-reader/metadata-fetcher", void 0, { color: "#b06642" }), P = (e) => {
294
+ }, ye = o.namespace("@prose-reader/metadata-fetcher", void 0, { color: "#b06642" }), P = (e) => {
307
295
  let t = Object.entries(e).filter(([, e]) => e !== void 0);
308
296
  return Object.fromEntries(t);
309
- }, Ee = 5, De = .5, Oe = 5, ke = ({ candidate: e, providerId: t, score: n, signals: r, accepted: i, includeRaw: a }) => P({
297
+ }, be = 5, xe = .5, Se = 5, Ce = ({ candidate: e, providerId: t, score: n, signals: r, accepted: i, includeRaw: a }) => P({
310
298
  providerId: t,
311
299
  score: n,
312
300
  signals: r,
@@ -315,8 +303,8 @@ var o = (e, t) => t.has(e.scheme.trim().toLowerCase()), s = (e, t, n) => {
315
303
  id: e.id,
316
304
  url: e.url,
317
305
  raw: a ? e.raw : void 0
318
- }), Ae = async (e, t) => {
319
- let n = t.limit ?? Ee, r = t.minScore ?? De, i = t.includeRaw === !0, a = await Promise.all(t.providers.map(async (r) => {
306
+ }), we = async (e, t) => {
307
+ let n = t.limit ?? be, r = t.minScore ?? xe, i = t.includeRaw === !0, a = await Promise.all(t.providers.map(async (r) => {
320
308
  try {
321
309
  return {
322
310
  provider: r,
@@ -328,7 +316,7 @@ var o = (e, t) => t.has(e.scheme.trim().toLowerCase()), s = (e, t, n) => {
328
316
  };
329
317
  } catch (e) {
330
318
  if (t.signal?.aborted === !0) throw e;
331
- return Te.error(`fetchMetadata: provider "${r.id}" failed`, e), {
319
+ return ye.error(`fetchMetadata: provider "${r.id}" failed`, e), {
332
320
  provider: r,
333
321
  candidates: void 0,
334
322
  failure: P({
@@ -341,8 +329,8 @@ var o = (e, t) => t.has(e.scheme.trim().toLowerCase()), s = (e, t, n) => {
341
329
  for (let { provider: t, candidates: o } of a) {
342
330
  if (o === void 0) continue;
343
331
  let a = o.map((n) => {
344
- let { score: a, signals: o } = we(e, n.metadata);
345
- return ke({
332
+ let { score: a, signals: o } = ve(e, n.metadata);
333
+ return Ce({
346
334
  candidate: n,
347
335
  providerId: t.id,
348
336
  score: a,
@@ -351,7 +339,7 @@ var o = (e, t) => t.has(e.scheme.trim().toLowerCase()), s = (e, t, n) => {
351
339
  includeRaw: i
352
340
  });
353
341
  }).sort((e, t) => t.score - e.score).slice(0, n);
354
- s[t.id] !== void 0 && Te.warn(`fetchMetadata: several providers share the id "${t.id}"`), s[t.id] = {
342
+ s[t.id] !== void 0 && ye.warn(`fetchMetadata: several providers share the id "${t.id}"`), s[t.id] = {
355
343
  provider: {
356
344
  id: t.id,
357
345
  name: t.name
@@ -360,25 +348,25 @@ var o = (e, t) => t.has(e.scheme.trim().toLowerCase()), s = (e, t, n) => {
360
348
  }, c.push(...a);
361
349
  }
362
350
  return {
363
- version: Oe,
351
+ version: Se,
364
352
  matches: [...c].sort((e, t) => t.score - e.score),
365
353
  sources: s,
366
354
  failedProviders: o
367
355
  };
368
- }, je = (t) => {
369
- let { metadata: n } = t, r = p(n), i = n.identifiers?.map(({ value: e, scheme: t }) => ({
356
+ }, Te = (e) => {
357
+ let { metadata: t } = e, n = c(t), i = t.identifiers?.map(({ value: e, scheme: t }) => ({
370
358
  value: e,
371
359
  scheme: t
372
360
  }));
373
361
  return P({
374
- title: e(n),
375
- authors: r.length > 0 ? r : void 0,
362
+ title: r(t),
363
+ authors: n.length > 0 ? n : void 0,
376
364
  identifiers: i !== void 0 && i.length > 0 ? i : void 0,
377
- series: n.belongsTo?.series?.[0]?.name,
378
- publisher: n.publication?.edition?.publisher ?? n.publication?.original?.publisher,
379
- publishedYear: n.publication?.edition?.date?.year ?? n.publication?.original?.date?.year,
380
- languages: n.languages,
381
- numberOfPages: n.numberOfPages
365
+ series: t.belongsTo?.series?.[0]?.name,
366
+ publisher: t.publication?.edition?.publisher ?? t.publication?.original?.publisher,
367
+ publishedYear: t.publication?.edition?.date?.year ?? t.publication?.original?.date?.year,
368
+ languages: t.languages,
369
+ numberOfPages: t.numberOfPages
382
370
  });
383
371
  }, F = (e) => typeof e == "object" && !!e && !Array.isArray(e), I = (e, t) => {
384
372
  let n = e[t];
@@ -396,53 +384,53 @@ var o = (e, t) => t.has(e.scheme.trim().toLowerCase()), s = (e, t, n) => {
396
384
  }, z = (e, t) => {
397
385
  let n = e[t];
398
386
  return Array.isArray(n) ? n.filter(F) : [];
399
- }, Me = (e) => e.reason ?? new DOMException("The operation was aborted", "AbortError"), Ne = (e) => {
400
- if (e?.aborted === !0) throw Me(e);
401
- }, Pe = (e, t) => (Ne(t), new Promise((n, r) => {
387
+ }, Ee = (e) => e.reason ?? new DOMException("The operation was aborted", "AbortError"), De = (e) => {
388
+ if (e?.aborted === !0) throw Ee(e);
389
+ }, Oe = (e, t) => (De(t), new Promise((n, r) => {
402
390
  let i = () => {
403
- clearTimeout(a), r(t === void 0 ? void 0 : Me(t));
391
+ clearTimeout(a), r(t === void 0 ? void 0 : Ee(t));
404
392
  }, a = setTimeout(() => {
405
393
  t?.removeEventListener("abort", i), n();
406
394
  }, e);
407
395
  t?.addEventListener("abort", i, { once: !0 });
408
- })), Fe = (e) => {
396
+ })), ke = (e) => {
409
397
  if (!Number.isInteger(e.attempts) || e.attempts < 1) throw RangeError("attempts must be a positive integer");
410
398
  if (!Number.isFinite(e.initialDelayMs) || e.initialDelayMs < 0) throw RangeError("initialDelayMs must be a non-negative finite number");
411
399
  if (e.maxDelayMs !== void 0 && (!Number.isFinite(e.maxDelayMs) || e.maxDelayMs < 0)) throw RangeError("maxDelayMs must be a non-negative finite number");
412
- }, Ie = (e, t) => {
400
+ }, Ae = (e, t) => {
413
401
  let n = t.initialDelayMs * 2 ** (e - 1), r = t.jitter === !1 ? n : n * (1 + Math.random());
414
402
  return Math.min(r, t.maxDelayMs ?? 2 ** 53 - 1);
415
- }, Le = async (e, t) => {
416
- Fe(t);
403
+ }, je = async (e, t) => {
404
+ ke(t);
417
405
  for (let n = 1; n <= t.attempts; n += 1) {
418
- Ne(t.signal);
406
+ De(t.signal);
419
407
  try {
420
408
  return await e(n);
421
409
  } catch (e) {
422
410
  if (n === t.attempts || t.signal?.aborted === !0 || !t.shouldRetry(e, n)) throw e;
423
- await Pe(Ie(n, t), t.signal);
411
+ await Oe(Ae(n, t), t.signal);
424
412
  }
425
413
  }
426
414
  throw Error("retryWithBackoff reached an invalid state");
427
- }, B = "GoogleBooks", Re = /* @__PURE__ */ new Set(["books.googleapis.com", "www.googleapis.com"]), ze = /^books\.google\.(?:com|[a-z]{2}|com\.[a-z]{2}|co\.[a-z]{2})$/i, V = (e) => {
415
+ }, B = "GoogleBooks", Me = /* @__PURE__ */ new Set(["books.googleapis.com", "www.googleapis.com"]), Ne = /^books\.google\.(?:com|[a-z]{2}|com\.[a-z]{2}|co\.[a-z]{2})$/i, V = (e) => {
428
416
  let t = e.trim();
429
417
  return /^[a-z0-9_-]+$/i.test(t) ? t : void 0;
430
- }, Be = (e) => {
418
+ }, Pe = (e) => {
431
419
  try {
432
420
  let t = new URL(e.trim());
433
421
  if (t.protocol !== "http:" && t.protocol !== "https:") return;
434
422
  let n = t.hostname.toLowerCase();
435
- if (ze.test(n)) return V(t.searchParams.get("id") ?? "");
436
- if (Re.has(n)) {
423
+ if (Ne.test(n)) return V(t.searchParams.get("id") ?? "");
424
+ if (Me.has(n)) {
437
425
  let e = /^\/books\/v1\/volumes\/([^/]+)\/?$/i.exec(t.pathname)?.[1];
438
426
  return e === void 0 ? void 0 : V(decodeURIComponent(e));
439
427
  }
440
428
  } catch {
441
429
  return;
442
430
  }
443
- }, Ve = (e) => {
431
+ }, Fe = (e) => {
444
432
  for (let t of e.identifiers ?? []) {
445
- let e = t.scheme.trim().toLowerCase(), n = e === "googlebooks" ? V(t.value) : e === "unknown" || e === "url" || e === "uri" ? Be(t.value) : void 0;
433
+ let e = t.scheme.trim().toLowerCase(), n = e === "googlebooks" ? V(t.value) : e === "unknown" || e === "url" || e === "uri" ? Pe(t.value) : void 0;
446
434
  if (n !== void 0) return {
447
435
  id: n,
448
436
  identifier: {
@@ -454,7 +442,7 @@ var o = (e, t) => t.has(e.scheme.trim().toLowerCase()), s = (e, t, n) => {
454
442
  }, H = (e, t) => {
455
443
  let n = e[t];
456
444
  return F(n) ? n : void 0;
457
- }, He = (e) => {
445
+ }, Ie = (e) => {
458
446
  let t = z(e, "industryIdentifiers").flatMap((e) => {
459
447
  let t = I(e, "identifier");
460
448
  return t === void 0 ? [] : [P({
@@ -463,7 +451,7 @@ var o = (e, t) => t.has(e.scheme.trim().toLowerCase()), s = (e, t, n) => {
463
451
  })];
464
452
  });
465
453
  return t.length > 0 ? t : void 0;
466
- }, Ue = (e) => {
454
+ }, Le = (e) => {
467
455
  let t = H(e, "imageLinks");
468
456
  if (t === void 0) return;
469
457
  let n = P({
@@ -475,7 +463,7 @@ var o = (e, t) => t.has(e.scheme.trim().toLowerCase()), s = (e, t, n) => {
475
463
  extraLarge: I(t, "extraLarge")
476
464
  });
477
465
  return Object.keys(n).length > 0 ? n : void 0;
478
- }, We = (e) => {
466
+ }, Re = (e) => {
479
467
  let t = H(e, "seriesInfo");
480
468
  if (t === void 0) return;
481
469
  let n = z(t, "volumeSeries").flatMap((e) => {
@@ -486,7 +474,7 @@ var o = (e, t) => t.has(e.scheme.trim().toLowerCase()), s = (e, t, n) => {
486
474
  return Object.keys(t).length > 0 ? [t] : [];
487
475
  });
488
476
  return n.length > 0 ? { volumeSeries: n } : void 0;
489
- }, Ge = (e) => {
477
+ }, ze = (e) => {
490
478
  let t = H(e, "volumeInfo");
491
479
  if (t === void 0) return;
492
480
  let n = P({
@@ -496,33 +484,42 @@ var o = (e, t) => t.has(e.scheme.trim().toLowerCase()), s = (e, t, n) => {
496
484
  publisher: I(t, "publisher"),
497
485
  publishedDate: I(t, "publishedDate"),
498
486
  description: I(t, "description"),
499
- industryIdentifiers: He(t),
487
+ industryIdentifiers: Ie(t),
500
488
  pageCount: L(t, "pageCount"),
501
489
  categories: R(t, "categories"),
490
+ averageRating: L(t, "averageRating"),
491
+ ratingsCount: L(t, "ratingsCount"),
502
492
  language: I(t, "language"),
503
- imageLinks: Ue(t),
493
+ imageLinks: Le(t),
504
494
  infoLink: I(t, "infoLink"),
505
495
  canonicalVolumeLink: I(t, "canonicalVolumeLink"),
506
- seriesInfo: We(t)
496
+ seriesInfo: Re(t)
507
497
  });
508
498
  return Object.keys(n).length > 0 ? n : void 0;
509
499
  }, U = (e) => {
510
500
  if (!F(e)) return;
511
501
  let t = P({
512
502
  id: I(e, "id"),
513
- volumeInfo: Ge(e)
503
+ volumeInfo: ze(e)
514
504
  });
515
505
  return Object.keys(t).length > 0 ? t : void 0;
516
- }, Ke = (e) => F(e) ? z(e, "items").flatMap((e) => {
506
+ }, Be = (e) => F(e) ? z(e, "items").flatMap((e) => {
517
507
  let t = U(e);
518
508
  return t === void 0 ? [] : [t];
519
- }) : [], qe = 25, W = (e) => e.length > 0 ? e : void 0, Je = (e) => e === "ISBN_10" || e === "ISBN_13" ? "ISBN" : e ?? "Unknown", Ye = (e) => W(e.filter((e, t, n) => n.findIndex((t) => t.value.trim().toLowerCase() === e.value.trim().toLowerCase() && t.scheme.trim().toLowerCase() === e.scheme.trim().toLowerCase()) === t)), Xe = (e) => e.map((e) => P({
509
+ }) : [], Ve = 5, He = (e, t) => {
510
+ if (e === void 0 || e < 0 || e > Ve) return;
511
+ let n = t !== void 0 && Number.isInteger(t) && t >= 0 ? t : void 0;
512
+ if (n !== 0) return P({
513
+ value: e,
514
+ count: n
515
+ });
516
+ }, Ue = 25, W = (e) => e.length > 0 ? e : void 0, We = (e) => e === "ISBN_10" || e === "ISBN_13" ? "ISBN" : e ?? "Unknown", Ge = (e) => W(e.filter((e, t, n) => n.findIndex((t) => t.value.trim().toLowerCase() === e.value.trim().toLowerCase() && t.scheme.trim().toLowerCase() === e.scheme.trim().toLowerCase()) === t)), Ke = (e) => e.map((e) => P({
520
517
  value: e.identifier,
521
- scheme: Je(e.type)
522
- })), Ze = (e, t) => W([...e === void 0 ? [] : [{ value: e }], ...t === void 0 ? [] : [{
518
+ scheme: We(e.type)
519
+ })), qe = (e, t) => W([...e === void 0 ? [] : [{ value: e }], ...t === void 0 ? [] : [{
523
520
  value: t,
524
521
  type: "subtitle"
525
- }]]), Qe = (e) => W((e?.volumeSeries ?? []).flatMap((e) => {
522
+ }]]), Je = (e) => W((e?.volumeSeries ?? []).flatMap((e) => {
526
523
  let t = P({
527
524
  identifiers: e.seriesId === void 0 ? void 0 : [{
528
525
  value: e.seriesId,
@@ -538,7 +535,7 @@ var o = (e, t) => t.has(e.scheme.trim().toLowerCase()), s = (e, t, n) => {
538
535
  } catch {
539
536
  return;
540
537
  }
541
- }, $e = (e) => {
538
+ }, Ye = (e) => {
542
539
  if (e === void 0) return;
543
540
  let t = [
544
541
  e.extraLarge,
@@ -552,11 +549,11 @@ var o = (e, t) => t.has(e.scheme.trim().toLowerCase()), s = (e, t, n) => {
552
549
  let t = G(e);
553
550
  if (t !== void 0) return t;
554
551
  }
555
- }, et = (e) => W(e.map((e) => ({
552
+ }, Xe = (e) => W(e.map((e) => ({
556
553
  name: e,
557
554
  roles: ["author"]
558
- }))), tt = (e, t = {}) => {
559
- let { id: n, volumeInfo: i, ...a } = e, { title: o, subtitle: s, authors: c, publisher: l, publishedDate: u, description: d, industryIdentifiers: f, pageCount: p, categories: m, language: h, imageLinks: g, seriesInfo: _, infoLink: v, canonicalVolumeLink: y, ...b } = i ?? {}, x = Xe(f ?? []), S = Ye([
555
+ }))), Ze = (e, t = {}) => {
556
+ let { id: n, volumeInfo: r, ...i } = e, { title: o, subtitle: s, authors: c, publisher: l, publishedDate: u, description: d, industryIdentifiers: f, pageCount: p, categories: m, averageRating: h, ratingsCount: g, language: _, imageLinks: v, seriesInfo: y, infoLink: b, canonicalVolumeLink: x, ...S } = r ?? {}, C = Ke(f ?? []), w = Ge([
560
557
  ...t.matchedIdentifier === void 0 ? [] : [t.matchedIdentifier],
561
558
  ...t.matchedIsbn === void 0 ? [] : [{
562
559
  value: t.matchedIsbn,
@@ -566,32 +563,33 @@ var o = (e, t) => t.has(e.scheme.trim().toLowerCase()), s = (e, t, n) => {
566
563
  value: n,
567
564
  scheme: B
568
565
  }],
569
- ...x
570
- ]), C = P({
571
- date: r(u),
566
+ ...C
567
+ ]), T = P({
568
+ date: a(u),
572
569
  publisher: l
573
- }), w = $e(g), T = w === void 0 ? void 0 : {
574
- uri: w,
570
+ }), E = Ye(v), D = E === void 0 ? void 0 : {
571
+ uri: E,
575
572
  confidence: "derived"
576
- }, E = [...new Set(m ?? [])].slice(0, 25), D = Qe(_);
573
+ }, O = [...new Set(m ?? [])].slice(0, 25), k = Je(y);
577
574
  return P({
578
- titles: Ze(o, s),
575
+ titles: qe(o, s),
579
576
  description: d,
580
- belongsTo: D === void 0 ? void 0 : { series: D },
581
- publication: C.date !== void 0 || C.publisher !== void 0 ? { edition: C } : void 0,
582
- languages: h === void 0 ? void 0 : [h],
583
- subjects: W(E),
584
- contributors: et(c ?? []),
577
+ belongsTo: k === void 0 ? void 0 : { series: k },
578
+ publication: T.date !== void 0 || T.publisher !== void 0 ? { edition: T } : void 0,
579
+ languages: _ === void 0 ? void 0 : [_],
580
+ subjects: W(O),
581
+ contributors: Xe(c ?? []),
585
582
  numberOfPages: p,
586
- identifiers: S,
587
- cover: T
583
+ aggregateRating: He(h, g),
584
+ identifiers: w,
585
+ cover: D
588
586
  });
589
- }, nt = (e) => G(e.volumeInfo?.canonicalVolumeLink) ?? G(e.volumeInfo?.infoLink) ?? (e.id === void 0 ? void 0 : `https://books.google.com/books?id=${encodeURIComponent(e.id)}`), rt = 40, it = 3, at = 1e3, ot = 3e3, st = /* @__PURE__ */ new Set([
587
+ }, Qe = (e) => G(e.volumeInfo?.canonicalVolumeLink) ?? G(e.volumeInfo?.infoLink) ?? (e.id === void 0 ? void 0 : `https://books.google.com/books?id=${encodeURIComponent(e.id)}`), $e = 40, et = 3, tt = 1e3, nt = 3e3, rt = /* @__PURE__ */ new Set([
590
588
  500,
591
589
  502,
592
590
  503,
593
591
  504
594
- ]), ct = (e) => `"${e.replace(/["\\]+/g, " ").replace(/\s+/g, " ").trim()}"`, lt = (e) => {
592
+ ]), it = (e) => `"${e.replace(/["\\]+/g, " ").replace(/\s+/g, " ").trim()}"`, at = (e) => {
595
593
  let t = e.title?.trim();
596
594
  if (t === void 0 || t.length === 0) return;
597
595
  let n = e.authors?.find((e) => e.trim().length > 0)?.trim();
@@ -599,22 +597,22 @@ var o = (e, t) => t.has(e.scheme.trim().toLowerCase()), s = (e, t, n) => {
599
597
  title: t,
600
598
  ...n === void 0 ? {} : { author: n }
601
599
  };
602
- }, ut = (e) => {
600
+ }, ot = (e) => {
603
601
  let t = U(e);
604
602
  return t === void 0 ? void 0 : {
605
603
  volume: t,
606
604
  raw: e
607
605
  };
608
- }, dt = (e) => F(e) ? z(e, "items").flatMap((e) => {
609
- let t = ut(e);
606
+ }, st = (e) => F(e) ? z(e, "items").flatMap((e) => {
607
+ let t = ot(e);
610
608
  return t === void 0 ? [] : [t];
611
609
  }) : [], K = (e, t = {}) => e.map(({ volume: e, raw: n }) => ({
612
- metadata: tt(e, t),
610
+ metadata: Ze(e, t),
613
611
  id: e.id,
614
- url: nt(e),
612
+ url: Qe(e),
615
613
  raw: n
616
- })), ft = (e) => {
617
- let t = `${e.baseUrl.replace(/\/+$/, "")}/volumes`, n = async (t, n, r = !1) => (t.searchParams.set("key", e.apiKey), Le(async () => {
614
+ })), ct = (e) => {
615
+ let t = `${e.baseUrl.replace(/\/+$/, "")}/volumes`, r = async (t, n, r = !1) => (t.searchParams.set("key", e.apiKey), je(async () => {
618
616
  let i = await e.fetch(t.toString(), {
619
617
  signal: n.signal,
620
618
  headers: { Accept: "application/json" }
@@ -624,79 +622,79 @@ var o = (e, t) => t.has(e.scheme.trim().toLowerCase()), s = (e, t, n) => {
624
622
  return i;
625
623
  }
626
624
  }, {
627
- attempts: it,
628
- initialDelayMs: at,
629
- maxDelayMs: ot,
625
+ attempts: et,
626
+ initialDelayMs: tt,
627
+ maxDelayMs: nt,
630
628
  signal: n.signal,
631
629
  shouldRetry: (e) => {
632
630
  let t = N(e);
633
- return t === void 0 || st.has(t);
631
+ return t === void 0 || rt.has(t);
634
632
  }
635
- })), r = async (e, r) => {
636
- let i = await n(new URL(`${t}/${encodeURIComponent(e)}`), r, !0);
633
+ })), i = async (e, n) => {
634
+ let i = await r(new URL(`${t}/${encodeURIComponent(e)}`), n, !0);
637
635
  if (i === void 0) return;
638
- let a = ut(await i.json());
636
+ let a = ot(await i.json());
639
637
  if (a?.volume.id !== e) throw Error(`Google Books response did not contain the requested volume ${e}`);
640
638
  return a;
641
- }, i = async (e, r) => {
642
- if (r.limit <= 0) return [];
639
+ }, a = async (e, n) => {
640
+ if (n.limit <= 0) return [];
643
641
  let i = new URL(t);
644
- i.searchParams.set("q", e), i.searchParams.set("maxResults", String(Math.min(Math.ceil(r.limit), rt))), i.searchParams.set("orderBy", "relevance"), i.searchParams.set("printType", "books");
645
- let a = await n(i, r);
646
- return a === void 0 ? [] : dt(await a.json());
642
+ i.searchParams.set("q", e), i.searchParams.set("maxResults", String(Math.min(Math.ceil(n.limit), $e))), i.searchParams.set("orderBy", "relevance"), i.searchParams.set("printType", "books");
643
+ let a = await r(i, n);
644
+ return a === void 0 ? [] : st(await a.json());
647
645
  };
648
646
  return async (e, t) => {
649
- let n = Ve(e);
650
- if (n !== void 0) {
651
- let e = await r(n.id, t);
652
- if (e !== void 0) return K([e], { matchedIdentifier: n.identifier });
647
+ let r = Fe(e);
648
+ if (r !== void 0) {
649
+ let e = await i(r.id, t);
650
+ if (e !== void 0) return K([e], { matchedIdentifier: r.identifier });
653
651
  }
654
- let a = d(e.identifiers);
655
- if (a !== void 0) {
656
- let e = await i(`isbn:${a}`, t);
657
- if (e.length > 0) return K(e, { matchedIsbn: a });
652
+ let o = n(e.identifiers);
653
+ if (o !== void 0) {
654
+ let e = await a(`isbn:${o}`, t);
655
+ if (e.length > 0) return K(e, { matchedIsbn: o });
658
656
  }
659
- let o = lt(e);
660
- if (o === void 0) return [];
661
- let s = `intitle:${ct(o.title)}`, c = o.author === void 0 ? s : `${s} inauthor:${ct(o.author)}`, l = await i(c, t);
662
- return l.length > 0 || o.author === void 0 ? K(l) : K(await i(s, t));
657
+ let s = at(e);
658
+ if (s === void 0) return [];
659
+ let c = `intitle:${it(s.title)}`, l = s.author === void 0 ? c : `${c} inauthor:${it(s.author)}`, u = await a(l, t);
660
+ return u.length > 0 || s.author === void 0 ? K(u) : K(await a(c, t));
663
661
  };
664
- }, pt = "googleBooks", mt = "https://www.googleapis.com/books/v1", ht = (e) => {
662
+ }, lt = "googleBooks", ut = "https://www.googleapis.com/books/v1", dt = (e) => {
665
663
  let t = e.apiKey.trim();
666
664
  if (t.length === 0) throw Error("createGoogleBooksProvider requires a non-empty apiKey");
667
665
  return {
668
- id: pt,
666
+ id: lt,
669
667
  name: "Google Books",
670
- search: ft({
668
+ search: ct({
671
669
  apiKey: t,
672
- baseUrl: e.baseUrl ?? mt,
670
+ baseUrl: e.baseUrl ?? ut,
673
671
  fetch: e.fetch ?? globalThis.fetch
674
672
  })
675
673
  };
676
- }, gt = "ProjectGutenberg", _t = /* @__PURE__ */ new Set(["gutenberg.org", "www.gutenberg.org"]), vt = [
674
+ }, ft = "ProjectGutenberg", pt = /* @__PURE__ */ new Set(["gutenberg.org", "www.gutenberg.org"]), mt = [
677
675
  /^\/ebooks\/(\d+)(?:[./]|$)/i,
678
676
  /^\/files\/(\d+)(?:\/|$)/i,
679
677
  /^\/cache\/epub\/(\d+)(?:\/|$)/i,
680
678
  /^\/(\d+)(?:\/|$)/
681
- ], yt = (e) => {
679
+ ], ht = (e) => {
682
680
  let t = e.trim();
683
681
  if (!/^\d+$/.test(t)) return;
684
682
  let n = t.replace(/^0+(?=\d)/, "");
685
683
  return n === "0" ? void 0 : n;
686
- }, bt = (e) => {
684
+ }, gt = (e) => {
687
685
  try {
688
686
  let t = new URL(e.trim());
689
- if (t.protocol !== "http:" && t.protocol !== "https:" || !_t.has(t.hostname.toLowerCase())) return;
690
- for (let e of vt) {
687
+ if (t.protocol !== "http:" && t.protocol !== "https:" || !pt.has(t.hostname.toLowerCase())) return;
688
+ for (let e of mt) {
691
689
  let n = e.exec(t.pathname)?.[1];
692
- if (n !== void 0) return yt(n);
690
+ if (n !== void 0) return ht(n);
693
691
  }
694
692
  } catch {
695
693
  return;
696
694
  }
697
- }, q = (e) => {
695
+ }, _t = (e) => {
698
696
  for (let t of e.identifiers ?? []) {
699
- let e = t.scheme.trim().toLowerCase(), n = e === "projectgutenberg" ? yt(t.value) : e === "unknown" || e === "url" || e === "uri" ? bt(t.value) : void 0;
697
+ let e = t.scheme.trim().toLowerCase(), n = e === "projectgutenberg" ? ht(t.value) : e === "unknown" || e === "url" || e === "uri" ? gt(t.value) : void 0;
700
698
  if (n !== void 0) return {
701
699
  id: n,
702
700
  identifier: {
@@ -705,7 +703,7 @@ var o = (e, t) => t.has(e.scheme.trim().toLowerCase()), s = (e, t, n) => {
705
703
  }
706
704
  };
707
705
  }
708
- }, xt = (e) => ({
706
+ }, vt = (e) => ({
709
707
  key: I(e, "key"),
710
708
  title: I(e, "title"),
711
709
  subtitle: I(e, "subtitle"),
@@ -714,9 +712,11 @@ var o = (e, t) => t.has(e.scheme.trim().toLowerCase()), s = (e, t, n) => {
714
712
  language: R(e, "language"),
715
713
  subject: R(e, "subject"),
716
714
  number_of_pages_median: L(e, "number_of_pages_median"),
715
+ ratings_average: L(e, "ratings_average"),
716
+ ratings_count: L(e, "ratings_count"),
717
717
  cover_i: L(e, "cover_i"),
718
718
  id_project_gutenberg: R(e, "id_project_gutenberg")
719
- }), St = (e) => F(e) ? z(e, "docs").map(xt) : [], Ct = {
719
+ }), yt = (e) => F(e) ? z(e, "docs").map(vt) : [], bt = {
720
720
  afr: "af",
721
721
  alb: "sq",
722
722
  amh: "am",
@@ -821,51 +821,52 @@ var o = (e, t) => t.has(e.scheme.trim().toLowerCase()), s = (e, t, n) => {
821
821
  wel: "cy",
822
822
  yid: "yi",
823
823
  zho: "zh"
824
- }, wt = /* @__PURE__ */ new Set([
824
+ }, xt = /* @__PURE__ */ new Set([
825
825
  "mul",
826
826
  "und",
827
827
  "zxx",
828
828
  "sgn"
829
- ]), Tt = (e) => {
829
+ ]), St = (e) => {
830
830
  let t = e.trim().toLowerCase();
831
- if (t.length !== 0 && !wt.has(t)) return Ct[t] ?? t;
832
- }, Et = 25, Dt = "OpenLibrary", Ot = "ProjectGutenberg", J = (e) => e.length > 0 ? e : void 0, kt = (e, t) => {
833
- let { title: n, subtitle: r, language: i, key: a, author_name: o, first_publish_year: s, subject: c, number_of_pages_median: l, cover_i: u, id_project_gutenberg: d, ...f } = e, p = J([...n === void 0 ? [] : [{ value: n }], ...r === void 0 ? [] : [{
831
+ if (t.length !== 0 && !xt.has(t)) return bt[t] ?? t;
832
+ }, Ct = 25, wt = "OpenLibrary", Tt = "ProjectGutenberg", q = (e) => e.length > 0 ? e : void 0, Et = (e, t) => {
833
+ let { title: n, subtitle: r, language: i, key: a, author_name: o, first_publish_year: s, subject: c, number_of_pages_median: l, ratings_average: u, ratings_count: d, cover_i: f, id_project_gutenberg: p, ...m } = e, h = q([...n === void 0 ? [] : [{ value: n }], ...r === void 0 ? [] : [{
834
834
  value: r,
835
835
  type: "subtitle"
836
- }]]), m = J([...new Set((i ?? []).map(Tt).filter((e) => e !== void 0))]), h = [
836
+ }]]), g = q([...new Set((i ?? []).map(St).filter((e) => e !== void 0))]), _ = [
837
837
  ...t.isbn === void 0 ? [] : [{
838
838
  value: t.isbn,
839
839
  scheme: "ISBN"
840
840
  }],
841
841
  ...t.matchedProjectGutenbergIdentifier === void 0 ? [] : [t.matchedProjectGutenbergIdentifier],
842
- ...(d ?? []).map((e) => ({
842
+ ...(p ?? []).map((e) => ({
843
843
  value: e,
844
- scheme: Ot
844
+ scheme: Tt
845
845
  })),
846
846
  ...a === void 0 ? [] : [{
847
847
  value: a,
848
- scheme: Dt
848
+ scheme: wt
849
849
  }]
850
850
  ];
851
851
  return P({
852
- titles: p,
853
- cover: u === void 0 ? void 0 : {
854
- uri: `${t.coversBaseUrl}/b/id/${u}-L.jpg`,
852
+ titles: h,
853
+ cover: f === void 0 ? void 0 : {
854
+ uri: `${t.coversBaseUrl}/b/id/${f}-L.jpg`,
855
855
  mediaType: "image/jpeg",
856
856
  confidence: "derived"
857
857
  },
858
858
  publication: s === void 0 ? void 0 : { original: { date: { year: s } } },
859
- languages: m,
860
- subjects: J((c ?? []).slice(0, 25)),
861
- contributors: J((o ?? []).map((e) => ({
859
+ languages: g,
860
+ subjects: q((c ?? []).slice(0, 25)),
861
+ contributors: q((o ?? []).map((e) => ({
862
862
  name: e,
863
863
  roles: ["author"]
864
864
  }))),
865
865
  numberOfPages: l,
866
- identifiers: J(h)
866
+ aggregateRating: He(u, d),
867
+ identifiers: q(_)
867
868
  });
868
- }, At = "openLibrary", jt = "https://openlibrary.org", Mt = "https://covers.openlibrary.org", Nt = [
869
+ }, Dt = "openLibrary", Ot = "https://openlibrary.org", kt = "https://covers.openlibrary.org", At = [
869
870
  "key",
870
871
  "title",
871
872
  "subtitle",
@@ -874,9 +875,11 @@ var o = (e, t) => t.has(e.scheme.trim().toLowerCase()), s = (e, t, n) => {
874
875
  "language",
875
876
  "subject",
876
877
  "number_of_pages_median",
878
+ "ratings_average",
879
+ "ratings_count",
877
880
  "cover_i",
878
881
  "id_project_gutenberg"
879
- ].join(","), Pt = (e) => {
882
+ ].join(","), jt = (e) => {
880
883
  let t = e.title?.trim();
881
884
  if (t === void 0 || t.length === 0) return;
882
885
  let n = e.authors?.find((e) => e.trim().length > 0)?.trim();
@@ -884,11 +887,11 @@ var o = (e, t) => t.has(e.scheme.trim().toLowerCase()), s = (e, t, n) => {
884
887
  title: t,
885
888
  ...n === void 0 ? {} : { author: n }
886
889
  };
887
- }, Ft = (e = {}) => {
888
- let t = e.baseUrl ?? jt, n = e.coversBaseUrl ?? Mt, r = async (n, r) => {
890
+ }, Mt = (e = {}) => {
891
+ let t = e.baseUrl ?? Ot, r = e.coversBaseUrl ?? kt, i = async (n, r) => {
889
892
  let i = new URL("/search.json", t);
890
893
  for (let [e, t] of Object.entries(n)) i.searchParams.set(e, t);
891
- i.searchParams.set("fields", Nt), i.searchParams.set("limit", String(r.limit));
894
+ i.searchParams.set("fields", At), i.searchParams.set("limit", String(r.limit));
892
895
  let a = await (e.fetch ?? globalThis.fetch)(i.toString(), {
893
896
  signal: r.signal,
894
897
  headers: {
@@ -897,112 +900,112 @@ var o = (e, t) => t.has(e.scheme.trim().toLowerCase()), s = (e, t, n) => {
897
900
  }
898
901
  });
899
902
  if (!a.ok) throw new M(a.status, `Open Library search failed with status ${a.status}`);
900
- return St(await a.json());
901
- }, i = (e, r = {}) => e.map((e) => ({
902
- metadata: kt(e, {
903
- coversBaseUrl: n,
904
- isbn: r.isbn,
905
- matchedProjectGutenbergIdentifier: r.confirmedProjectGutenberg?.identifier
903
+ return yt(await a.json());
904
+ }, a = (e, n = {}) => e.map((e) => ({
905
+ metadata: Et(e, {
906
+ coversBaseUrl: r,
907
+ isbn: n.isbn,
908
+ matchedProjectGutenbergIdentifier: n.confirmedProjectGutenberg?.identifier
906
909
  }),
907
910
  id: e.key,
908
911
  url: e.key === void 0 ? void 0 : `${t}${e.key}`,
909
912
  raw: e
910
913
  }));
911
914
  return {
912
- id: At,
915
+ id: Dt,
913
916
  name: "Open Library",
914
917
  search: async (e, t) => {
915
- let n = d(e.identifiers), a = q(e);
916
- if (n !== void 0) {
917
- let e = await r({ isbn: n }, t);
918
- if (e.length > 0) return i(e, { isbn: n });
918
+ let r = n(e.identifiers), o = _t(e);
919
+ if (r !== void 0) {
920
+ let e = await i({ isbn: r }, t);
921
+ if (e.length > 0) return a(e, { isbn: r });
919
922
  }
920
- if (a !== void 0) {
921
- let e = await r({ q: `id_project_gutenberg:${a.id}` }, t);
922
- if (e.length > 0) return i(e, { confirmedProjectGutenberg: a });
923
+ if (o !== void 0) {
924
+ let e = await i({ q: `id_project_gutenberg:${o.id}` }, t);
925
+ if (e.length > 0) return a(e, { confirmedProjectGutenberg: o });
923
926
  }
924
- let o = Pt(e);
925
- if (o === void 0) return [];
926
- let s = await r(o, t);
927
- if (s.length > 0) return i(s);
928
- let c = o.author === void 0 ? o.title : `${o.title} ${o.author}`;
929
- return i(await r({ q: c }, t));
927
+ let s = jt(e);
928
+ if (s === void 0) return [];
929
+ let c = await i(s, t);
930
+ if (c.length > 0) return a(c);
931
+ let l = s.author === void 0 ? s.title : `${s.title} ${s.author}`;
932
+ return a(await i({ q: l }, t));
930
933
  }
931
934
  };
932
- }, Y = (e) => e.includes(":") ? e.slice(e.lastIndexOf(":") + 1) : e, It = (e) => e.type === "element", X = (e, t) => e.children.filter((e) => It(e) && Y(e.name).toLowerCase() === t.toLowerCase()), Z = (e, t) => X(e, t)[0], Q = (e) => {
935
+ }, J = (e) => e.includes(":") ? e.slice(e.lastIndexOf(":") + 1) : e, Nt = (e) => e.type === "element", Y = (e, t) => e.children.filter((e) => Nt(e) && J(e.name).toLowerCase() === t.toLowerCase()), X = (e, t) => Y(e, t)[0], Z = (e) => {
933
936
  let t = e?.val.trim();
934
937
  return t !== void 0 && t.length > 0 ? t : void 0;
935
- }, Lt = (e, t) => {
938
+ }, Q = (e, t) => {
936
939
  for (let [n, r] of Object.entries(e.attr)) {
937
- if (Y(n).toLowerCase() !== t.toLowerCase()) continue;
940
+ if (J(n).toLowerCase() !== t.toLowerCase()) continue;
938
941
  let e = r.trim();
939
942
  if (e.length > 0) return e;
940
943
  }
941
- }, Rt = (e, t) => X(e, t).flatMap((e) => {
942
- let t = Q(Z(Z(e, "Description") ?? e, "value"));
944
+ }, Pt = (e, t) => Y(e, t).flatMap((e) => {
945
+ let t = Z(X(X(e, "Description") ?? e, "value"));
943
946
  return t === void 0 ? [] : [t];
944
- }), zt = (e) => {
945
- let t = Lt(e, "about"), n = t === void 0 ? void 0 : /(?:^|\/)ebooks\/(\d+)$/.exec(t)?.[1];
947
+ }), Ft = (e) => {
948
+ let t = Q(e, "about"), n = t === void 0 ? void 0 : /(?:^|\/)ebooks\/(\d+)$/.exec(t)?.[1];
946
949
  if (n === void 0) return;
947
950
  let r = n.replace(/^0+(?=\d)/, "");
948
951
  return r === "0" ? void 0 : r;
949
- }, Bt = (e) => {
952
+ }, It = (e) => {
950
953
  let t = [];
951
954
  for (let n of e.children) {
952
- if (!It(n)) continue;
955
+ if (!Nt(n)) continue;
953
956
  let e = n.name.toLowerCase() === "dcterms:creator", r = n.name.toLowerCase().startsWith("marcrel:");
954
957
  if (!e && !r) continue;
955
- let i = Q(Z(Z(n, "agent") ?? n, "name"));
958
+ let i = Z(X(X(n, "agent") ?? n, "name"));
956
959
  i !== void 0 && t.push({
957
960
  name: i,
958
- role: e ? "aut" : Y(n.name).toLowerCase()
961
+ role: e ? "aut" : J(n.name).toLowerCase()
959
962
  });
960
963
  }
961
964
  return t;
962
- }, Vt = (e) => X(e, "subject").flatMap((e) => {
963
- let t = Z(e, "Description"), n = t === void 0 ? void 0 : Lt(Z(t, "memberOf") ?? t, "resource"), r = Q(t === void 0 ? void 0 : Z(t, "value"));
965
+ }, Lt = (e) => Y(e, "subject").flatMap((e) => {
966
+ let t = X(e, "Description"), n = t === void 0 ? void 0 : Q(X(t, "memberOf") ?? t, "resource"), r = Z(t === void 0 ? void 0 : X(t, "value"));
964
967
  return r !== void 0 && n?.endsWith("/LCSH") === !0 ? [r] : [];
965
- }), Ht = (e) => {
966
- let t = X(e, "hasFormat").flatMap((e) => {
967
- let t = Z(e, "file");
968
+ }), Rt = (e) => {
969
+ let t = Y(e, "hasFormat").flatMap((e) => {
970
+ let t = X(e, "file");
968
971
  if (t === void 0) return [];
969
- let n = Lt(t, "about"), r = X(t, "format").map((e) => Q(Z(Z(e, "Description") ?? e, "value"))).find((e) => e?.startsWith("image/") === !0);
972
+ let n = Q(t, "about"), r = Y(t, "format").map((e) => Z(X(X(e, "Description") ?? e, "value"))).find((e) => e?.startsWith("image/") === !0);
970
973
  return n === void 0 || r === void 0 || !/\.cover\.(?:medium|small)\.[a-z0-9]+(?:$|[?#])/i.test(n) ? [] : [{
971
974
  uri: n,
972
975
  mediaType: r
973
976
  }];
974
977
  });
975
978
  return t.find((e) => /\.cover\.medium\./i.test(e.uri)) ?? t[0];
976
- }, $ = (e) => e.length > 0 ? e : void 0, Ut = (e) => {
979
+ }, $ = (e) => e.length > 0 ? e : void 0, zt = (e) => {
977
980
  let t;
978
981
  try {
979
- t = new a(e);
982
+ t = new s(e);
980
983
  } catch (e) {
981
984
  let t = e instanceof Error ? e.message : String(e);
982
985
  throw Error(`Project Gutenberg RDF is malformed: ${t}`, { cause: e });
983
986
  }
984
- if (Y(t.name).toLowerCase() !== "rdf") return;
985
- let n = Z(t, "ebook");
987
+ if (J(t.name).toLowerCase() !== "rdf") return;
988
+ let n = X(t, "ebook");
986
989
  if (n === void 0) return;
987
- let r = zt(n);
990
+ let r = Ft(n);
988
991
  if (r === void 0) return;
989
- let i = [...new Set(Rt(n, "language"))], o = [...new Set(Vt(n))], s = [...new Set(Rt(n, "bookshelf"))], c = Bt(n);
992
+ let i = [...new Set(Pt(n, "language"))], a = [...new Set(Lt(n))], o = [...new Set(Pt(n, "bookshelf"))], c = It(n);
990
993
  return {
991
994
  id: r,
992
- title: Q(Z(n, "title")),
993
- publisher: Q(Z(n, "publisher")),
994
- issued: Q(Z(n, "issued")),
995
- originalPublication: Q(Z(n, "marc260")),
996
- rights: Q(Z(n, "rights")),
997
- description: Q(Z(n, "description")),
998
- summary: Q(Z(n, "marc520")),
995
+ title: Z(X(n, "title")),
996
+ publisher: Z(X(n, "publisher")),
997
+ issued: Z(X(n, "issued")),
998
+ originalPublication: Z(X(n, "marc260")),
999
+ rights: Z(X(n, "rights")),
1000
+ description: Z(X(n, "description")),
1001
+ summary: Z(X(n, "marc520")),
999
1002
  languages: $(i),
1000
- subjects: $(o),
1001
- bookshelves: $(s),
1003
+ subjects: $(a),
1004
+ bookshelves: $(o),
1002
1005
  contributors: $(c),
1003
- cover: Ht(n)
1006
+ cover: Rt(n)
1004
1007
  };
1005
- }, Wt = 25, Gt = {
1008
+ }, Bt = 25, Vt = {
1006
1009
  art: "artist",
1007
1010
  aut: "author",
1008
1011
  clr: "colorist",
@@ -1011,17 +1014,17 @@ var o = (e, t) => t.has(e.scheme.trim().toLowerCase()), s = (e, t, n) => {
1011
1014
  ill: "illustrator",
1012
1015
  nrt: "narrator",
1013
1016
  trl: "translator"
1014
- }, Kt = (e) => {
1017
+ }, Ht = (e) => {
1015
1018
  let t = /* @__PURE__ */ new Map();
1016
1019
  for (let n of e.contributors ?? []) {
1017
- let e = n.name.trim().toLowerCase(), r = Gt[n.role.trim().toLowerCase()] ?? n.role, i = t.get(e);
1020
+ let e = n.name.trim().toLowerCase(), r = Vt[n.role.trim().toLowerCase()] ?? n.role, i = t.get(e);
1018
1021
  i === void 0 ? t.set(e, {
1019
1022
  name: n.name,
1020
1023
  roles: [r]
1021
1024
  }) : i.roles.includes(r) || i.roles.push(r);
1022
1025
  }
1023
1026
  return t.size > 0 ? [...t.values()] : void 0;
1024
- }, qt = (e) => {
1027
+ }, Ut = (e) => {
1025
1028
  if (e === void 0) return;
1026
1029
  let t = /^(\d{4})(?:-(\d{2})(?:-(\d{2}))?)?$/.exec(e.trim());
1027
1030
  if (t === null) return;
@@ -1031,33 +1034,33 @@ var o = (e, t) => t.has(e.scheme.trim().toLowerCase()), s = (e, t, n) => {
1031
1034
  ...r === void 0 ? {} : { month: r },
1032
1035
  ...i === void 0 ? {} : { day: i }
1033
1036
  };
1034
- }, Jt = (e, t) => e.split("$").slice(1).flatMap((e) => e[0]?.toLowerCase() === t.toLowerCase() ? [e.slice(1).trim()] : []).filter((e) => e.length > 0), Yt = (e) => {
1037
+ }, Wt = (e, t) => e.split("$").slice(1).flatMap((e) => e[0]?.toLowerCase() === t.toLowerCase() ? [e.slice(1).trim()] : []).filter((e) => e.length > 0), Gt = (e) => {
1035
1038
  if (e === void 0) return;
1036
- let t = Jt(e, "b"), n = (t.length === 1 ? t[0] : void 0)?.replace(/[\s,;:/]+$/u, "").trim(), r = Jt(e, "c"), i = [...new Set(r.flatMap((e) => [...e.matchAll(/\d{4}/g)].flatMap((e) => e[0] === void 0 ? [] : [Number(e[0])])))], a = P({
1039
+ let t = Wt(e, "b"), n = (t.length === 1 ? t[0] : void 0)?.replace(/[\s,;:/]+$/u, "").trim(), r = Wt(e, "c"), i = [...new Set(r.flatMap((e) => [...e.matchAll(/\d{4}/g)].flatMap((e) => e[0] === void 0 ? [] : [Number(e[0])])))], a = P({
1037
1040
  date: i.length === 1 ? { year: i[0] } : void 0,
1038
1041
  publisher: n !== void 0 && n.length > 0 && !/^\[?s\.n\.?\]?$/i.test(n) ? n : void 0
1039
1042
  });
1040
1043
  return a.date !== void 0 || a.publisher !== void 0 ? a : void 0;
1041
- }, Xt = (e, t) => {
1044
+ }, Kt = (e, t) => {
1042
1045
  try {
1043
1046
  let n = new URL(e, t);
1044
1047
  return n.protocol === "http:" || n.protocol === "https:" ? n.toString() : void 0;
1045
1048
  } catch {
1046
1049
  return;
1047
1050
  }
1048
- }, Zt = (e) => e.length > 0 ? e : void 0, Qt = (e, t) => {
1051
+ }, qt = (e) => e.length > 0 ? e : void 0, Jt = (e, t) => {
1049
1052
  let { id: n, title: r, publisher: i, issued: a, originalPublication: o, rights: s, description: c, summary: l, languages: u, subjects: d, bookshelves: f, contributors: p, cover: m, ...h } = e, g = [t.matchedIdentifier, {
1050
1053
  value: n,
1051
- scheme: gt
1052
- }].filter((e, t, n) => n.findIndex((t) => t.value.trim().toLowerCase() === e.value.trim().toLowerCase() && t.scheme.trim().toLowerCase() === e.scheme.trim().toLowerCase()) === t), _ = [.../* @__PURE__ */ new Set([...d ?? [], ...f ?? []])].slice(0, 25), v = m === void 0 ? void 0 : Xt(m.uri, t.baseUrl), y = v === void 0 ? void 0 : {
1054
+ scheme: ft
1055
+ }].filter((e, t, n) => n.findIndex((t) => t.value.trim().toLowerCase() === e.value.trim().toLowerCase() && t.scheme.trim().toLowerCase() === e.scheme.trim().toLowerCase()) === t), _ = [.../* @__PURE__ */ new Set([...d ?? [], ...f ?? []])].slice(0, 25), v = m === void 0 ? void 0 : Kt(m.uri, t.baseUrl), y = v === void 0 ? void 0 : {
1053
1056
  uri: v,
1054
1057
  mediaType: m?.mediaType,
1055
1058
  confidence: "derived"
1056
1059
  }, b = P({
1057
- date: qt(a),
1060
+ date: Ut(a),
1058
1061
  publisher: i
1059
1062
  }), x = P({
1060
- original: Yt(o),
1063
+ original: Gt(o),
1061
1064
  edition: b.date !== void 0 || b.publisher !== void 0 ? b : void 0
1062
1065
  });
1063
1066
  return P({
@@ -1065,19 +1068,19 @@ var o = (e, t) => t.has(e.scheme.trim().toLowerCase()), s = (e, t, n) => {
1065
1068
  publication: x.original !== void 0 || x.edition !== void 0 ? x : void 0,
1066
1069
  description: l ?? c,
1067
1070
  rights: s,
1068
- languages: Zt([...new Set(u ?? [])]),
1069
- subjects: Zt(_),
1070
- contributors: Kt(e),
1071
+ languages: qt([...new Set(u ?? [])]),
1072
+ subjects: qt(_),
1073
+ contributors: Ht(e),
1071
1074
  identifiers: g,
1072
1075
  cover: y
1073
1076
  });
1074
- }, $t = "projectGutenberg", en = "https://www.gutenberg.org", tn = (e = {}) => {
1075
- let t = e.baseUrl ?? en;
1077
+ }, Yt = "projectGutenberg", Xt = "https://www.gutenberg.org", Zt = (e = {}) => {
1078
+ let t = e.baseUrl ?? Xt;
1076
1079
  return {
1077
- id: $t,
1080
+ id: Yt,
1078
1081
  name: "Project Gutenberg",
1079
1082
  search: async (n, r) => {
1080
- let i = q(n);
1083
+ let i = _t(n);
1081
1084
  if (i === void 0) return [];
1082
1085
  let a = new URL(`/cache/epub/${i.id}/pg${i.id}.rdf`, t), o = await (e.fetch ?? globalThis.fetch)(a.toString(), {
1083
1086
  signal: r.signal,
@@ -1088,22 +1091,22 @@ var o = (e, t) => t.has(e.scheme.trim().toLowerCase()), s = (e, t, n) => {
1088
1091
  });
1089
1092
  if (o.status === 404) return [];
1090
1093
  if (!o.ok) throw new M(o.status, `Project Gutenberg metadata lookup failed with status ${o.status}`);
1091
- let s = Ut(await o.text());
1094
+ let s = zt(await o.text());
1092
1095
  if (s === void 0 || s.id !== i.id) throw Error(`Project Gutenberg RDF did not contain the requested eBook ${i.id}`);
1093
1096
  let c = new URL(`/ebooks/${i.id}`, t).toString();
1094
1097
  return [{
1095
1098
  id: s.id,
1096
1099
  url: c,
1097
1100
  raw: s,
1098
- metadata: Qt(s, {
1101
+ metadata: Jt(s, {
1099
1102
  baseUrl: t,
1100
1103
  matchedIdentifier: i.identifier
1101
1104
  })
1102
1105
  }];
1103
1106
  }
1104
1107
  };
1105
- }, nn = (e) => [e.title, e.series].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);
1108
+ }, Qt = (e) => [e.title, e.series].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);
1106
1109
  //#endregion
1107
- export { B as GOOGLE_BOOKS_IDENTIFIER_SCHEME, qe as GOOGLE_BOOKS_MAX_SUBJECTS, pt as GOOGLE_BOOKS_PROVIDER_ID, le as METADATA_MATCH_WEIGHTS, M as MetadataProviderResponseError, Dt as OPEN_LIBRARY_IDENTIFIER_SCHEME, Et as OPEN_LIBRARY_MAX_SUBJECTS, At as OPEN_LIBRARY_PROVIDER_ID, gt as PROJECT_GUTENBERG_IDENTIFIER_SCHEME, Wt as PROJECT_GUTENBERG_MAX_SUBJECTS, $t as PROJECT_GUTENBERG_PROVIDER_ID, ht as createGoogleBooksProvider, Ft as createOpenLibraryProvider, tn as createProjectGutenbergProvider, Ae as fetchMetadata, $e as googleBooksCoverUrl, Ve as googleBooksLookupFromInput, nt as googleBooksVolumeUrl, nn as hasSearchTerms, Tt as marcLanguageToBcp47, p as metadataAuthors, je as metadataInputFromResolvedArchive, y as normalizeForComparison, U as parseGoogleBooksVolume, Ke as parseGoogleBooksVolumesResponse, St as parseOpenLibrarySearchResponse, Ut as parseProjectGutenbergRdf, ce as personNameSimilarity, q as projectGutenbergLookupFromInput, tt as resolveGoogleBooksVolume, kt as resolveOpenLibraryDoc, Qt as resolveProjectGutenbergRecord, N as responseErrorStatus, Le as retryWithBackoff, we as scoreMetadataCandidate, x as textSimilarity, ae as titleSimilarity, g as toIsbn13 };
1110
+ export { B as GOOGLE_BOOKS_IDENTIFIER_SCHEME, Ue as GOOGLE_BOOKS_MAX_SUBJECTS, lt as GOOGLE_BOOKS_PROVIDER_ID, ie as METADATA_MATCH_WEIGHTS, M as MetadataProviderResponseError, wt as OPEN_LIBRARY_IDENTIFIER_SCHEME, Ct as OPEN_LIBRARY_MAX_SUBJECTS, Dt as OPEN_LIBRARY_PROVIDER_ID, ft as PROJECT_GUTENBERG_IDENTIFIER_SCHEME, Bt as PROJECT_GUTENBERG_MAX_SUBJECTS, Yt as PROJECT_GUTENBERG_PROVIDER_ID, dt as createGoogleBooksProvider, Mt as createOpenLibraryProvider, Zt as createProjectGutenbergProvider, we as fetchMetadata, Ye as googleBooksCoverUrl, Fe as googleBooksLookupFromInput, Qe as googleBooksVolumeUrl, Qt as hasSearchTerms, St as marcLanguageToBcp47, c as metadataAuthors, Te as metadataInputFromResolvedArchive, m as normalizeForComparison, U as parseGoogleBooksVolume, Be as parseGoogleBooksVolumesResponse, yt as parseOpenLibrarySearchResponse, zt as parseProjectGutenbergRdf, re as personNameSimilarity, _t as projectGutenbergLookupFromInput, Ze as resolveGoogleBooksVolume, Et as resolveOpenLibraryDoc, Jt as resolveProjectGutenbergRecord, N as responseErrorStatus, je as retryWithBackoff, ve as scoreMetadataCandidate, g as textSimilarity, ee as titleSimilarity, d as toIsbn13 };
1108
1111
 
1109
1112
  //# sourceMappingURL=index.js.map