@prose-reader/metadata-fetcher 1.350.0 → 1.353.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
- }, k = (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
- }, ee = (e) => /^\d+$/.test(e) ? Number.parseInt(e, 10) : D[e] ?? k(e), te = (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
- }, A = (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 : te(n[1]), r = n[2] === void 0 ? void 0 : ee(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
- }, ne = (e, t) => {
112
- let n = A(e), r = A(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
- }, re = (e) => {
109
+ }, k = (e) => {
119
110
  let t = /* @__PURE__ */ new Set();
120
- for (let n of A(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
- }, ie = (e, t) => {
123
- if (ne(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
- }, ae = (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 (ne(e, r)) return {
120
+ if (O(e, r)) return {
130
121
  score: 0,
131
122
  candidate: r
132
123
  };
133
- let t = ie(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
- }, oe = (e) => y(e).split(" ").filter((e) => e.length > 0).sort().join(" "), se = (e, t) => x(oe(e), oe(t)), ce = {
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,35 +139,32 @@ 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
- }, le = /* @__PURE__ */ new Set(["isbn", "gtin"]), j = (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
- }, ue = (e, t) => {
155
- let n = j(e.value)?.toLowerCase();
156
- return n !== void 0 && n === j(t.value)?.toLowerCase();
157
- }, M = (e) => e.scheme.trim().toLowerCase() === "unknown" ? void 0 : j(e.scheme)?.toLowerCase(), de = (e) => `${e.scheme}:${e.value}`, fe = (e) => {
158
- let t = e.scheme.trim().toLowerCase();
159
- return t === "isbn" || t === "gtin";
160
- }, pe = (e, t) => {
161
- if (!ue(e, t)) return !1;
162
- let n = M(e), r = M(t);
145
+ }, oe = (e, t) => {
146
+ let n = A(e.value)?.toLowerCase();
147
+ return n !== void 0 && n === A(t.value)?.toLowerCase();
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;
150
+ let n = j(e), r = j(t);
163
151
  return n === void 0 || r === void 0 || n === r;
164
- }, me = (e, t) => {
165
- if (!ue(e, t)) return !1;
166
- let n = M(e), r = M(t);
152
+ }, le = (e, t) => {
153
+ if (!oe(e, t)) return !1;
154
+ let n = j(e), r = j(t);
167
155
  return n !== void 0 && n === r;
168
- }, he = (e) => e.trim().toLowerCase().split("-")[0] ?? "", ge = (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
- }, _e = (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
- }, ve = (e, t, n) => e.reduce((e, r) => t.reduce((e, t) => Math.max(e, n(r, t)), e), 0), ye = (e, t, n = x) => {
175
- let r = j(e);
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) => {
163
+ let r = A(e);
176
164
  if (r === void 0) return;
177
165
  let i;
178
166
  for (let e of t) {
179
- let t = j(e);
167
+ let t = A(e);
180
168
  if (t === void 0) continue;
181
169
  let a = {
182
170
  score: n(r, t),
@@ -186,127 +174,127 @@ 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
- }, be = (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
- }, xe = (e, t) => {
193
- let n = re(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
- }, Se = (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: ge(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
- }, Ce = (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: ce[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 = j(t), o = j(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) => !fe(e)), v = (n.identifiers ?? []).filter((e) => !fe(e)), y = _.some((e) => v.some((t) => me(e, t)));
239
- _.length > 0 && v.length > 0 && i("identifiers", {
240
- score: +!!_.some((e) => v.some((t) => pe(e, t))),
241
- query: _.map(de).join(", "),
242
- candidate: v.map(de).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 = j(t.title), S = [e(n), be(n)].flatMap((e) => {
245
- let t = j(e);
232
+ let S = A(i.title), C = [r(a), he(a)].flatMap((e) => {
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 = ae(b, S);
250
- e !== void 0 && i("title", {
251
- score: xe(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", ye(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) => {
258
- let t = j(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) => {
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: ve(w, C, se),
263
- query: w.join(", "),
264
- candidate: C.join(", ")
265
- }), i("publishedYear", Se(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(he));
269
- i("languages", {
270
- score: +!!T.some((t) => e.has(he(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: _e(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) => le.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
- }, N = class extends Error {
285
+ }, M = class extends Error {
298
286
  status;
299
287
  constructor(e, t) {
300
288
  super(t ?? `Provider responded with status ${e}`), this.name = "MetadataProviderResponseError", this.status = e;
301
289
  }
302
- }, we = (e) => {
290
+ }, N = (e) => {
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,12 +316,12 @@ 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({
335
323
  id: r.id,
336
- status: we(e)
324
+ status: N(e)
337
325
  })
338
326
  };
339
327
  }
@@ -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 } = Ce(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,42 +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"),
502
490
  averageRating: L(t, "averageRating"),
503
491
  ratingsCount: L(t, "ratingsCount"),
504
492
  language: I(t, "language"),
505
- imageLinks: Ue(t),
493
+ imageLinks: Le(t),
506
494
  infoLink: I(t, "infoLink"),
507
495
  canonicalVolumeLink: I(t, "canonicalVolumeLink"),
508
- seriesInfo: We(t)
496
+ seriesInfo: Re(t)
509
497
  });
510
498
  return Object.keys(n).length > 0 ? n : void 0;
511
499
  }, U = (e) => {
512
500
  if (!F(e)) return;
513
501
  let t = P({
514
502
  id: I(e, "id"),
515
- volumeInfo: Ge(e)
503
+ volumeInfo: ze(e)
516
504
  });
517
505
  return Object.keys(t).length > 0 ? t : void 0;
518
- }, Ke = (e) => F(e) ? z(e, "items").flatMap((e) => {
506
+ }, Be = (e) => F(e) ? z(e, "items").flatMap((e) => {
519
507
  let t = U(e);
520
508
  return t === void 0 ? [] : [t];
521
- }) : [], qe = 5, Je = (e, t) => {
522
- if (e === void 0 || e < 0 || e > qe) return;
509
+ }) : [], Ve = 5, He = (e, t) => {
510
+ if (e === void 0 || e < 0 || e > Ve) return;
523
511
  let n = t !== void 0 && Number.isInteger(t) && t >= 0 ? t : void 0;
524
512
  if (n !== 0) return P({
525
513
  value: e,
526
514
  count: n
527
515
  });
528
- }, Ye = 25, W = (e) => e.length > 0 ? e : void 0, Xe = (e) => e === "ISBN_10" || e === "ISBN_13" ? "ISBN" : e ?? "Unknown", Ze = (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)), Qe = (e) => e.map((e) => P({
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({
529
517
  value: e.identifier,
530
- scheme: Xe(e.type)
531
- })), $e = (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 ? [] : [{
532
520
  value: t,
533
521
  type: "subtitle"
534
- }]]), et = (e) => W((e?.volumeSeries ?? []).flatMap((e) => {
522
+ }]]), Je = (e) => W((e?.volumeSeries ?? []).flatMap((e) => {
535
523
  let t = P({
536
524
  identifiers: e.seriesId === void 0 ? void 0 : [{
537
525
  value: e.seriesId,
@@ -547,7 +535,7 @@ var o = (e, t) => t.has(e.scheme.trim().toLowerCase()), s = (e, t, n) => {
547
535
  } catch {
548
536
  return;
549
537
  }
550
- }, tt = (e) => {
538
+ }, Ye = (e) => {
551
539
  if (e === void 0) return;
552
540
  let t = [
553
541
  e.extraLarge,
@@ -561,11 +549,11 @@ var o = (e, t) => t.has(e.scheme.trim().toLowerCase()), s = (e, t, n) => {
561
549
  let t = G(e);
562
550
  if (t !== void 0) return t;
563
551
  }
564
- }, nt = (e) => W(e.map((e) => ({
552
+ }, Xe = (e) => W(e.map((e) => ({
565
553
  name: e,
566
554
  roles: ["author"]
567
- }))), rt = (e, t = {}) => {
568
- 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, averageRating: h, ratingsCount: g, language: _, imageLinks: v, seriesInfo: y, infoLink: b, canonicalVolumeLink: x, ...S } = i ?? {}, C = Qe(f ?? []), w = Ze([
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([
569
557
  ...t.matchedIdentifier === void 0 ? [] : [t.matchedIdentifier],
570
558
  ...t.matchedIsbn === void 0 ? [] : [{
571
559
  value: t.matchedIsbn,
@@ -577,31 +565,31 @@ var o = (e, t) => t.has(e.scheme.trim().toLowerCase()), s = (e, t, n) => {
577
565
  }],
578
566
  ...C
579
567
  ]), T = P({
580
- date: r(u),
568
+ date: a(u),
581
569
  publisher: l
582
- }), E = tt(v), D = E === void 0 ? void 0 : {
570
+ }), E = Ye(v), D = E === void 0 ? void 0 : {
583
571
  uri: E,
584
572
  confidence: "derived"
585
- }, O = [...new Set(m ?? [])].slice(0, 25), k = et(y);
573
+ }, O = [...new Set(m ?? [])].slice(0, 25), k = Je(y);
586
574
  return P({
587
- titles: $e(o, s),
575
+ titles: qe(o, s),
588
576
  description: d,
589
577
  belongsTo: k === void 0 ? void 0 : { series: k },
590
578
  publication: T.date !== void 0 || T.publisher !== void 0 ? { edition: T } : void 0,
591
579
  languages: _ === void 0 ? void 0 : [_],
592
580
  subjects: W(O),
593
- contributors: nt(c ?? []),
581
+ contributors: Xe(c ?? []),
594
582
  numberOfPages: p,
595
- aggregateRating: Je(h, g),
583
+ aggregateRating: He(h, g),
596
584
  identifiers: w,
597
585
  cover: D
598
586
  });
599
- }, it = (e) => G(e.volumeInfo?.canonicalVolumeLink) ?? G(e.volumeInfo?.infoLink) ?? (e.id === void 0 ? void 0 : `https://books.google.com/books?id=${encodeURIComponent(e.id)}`), at = 40, ot = 3, st = 1e3, ct = 3e3, lt = /* @__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([
600
588
  500,
601
589
  502,
602
590
  503,
603
591
  504
604
- ]), ut = (e) => `"${e.replace(/["\\]+/g, " ").replace(/\s+/g, " ").trim()}"`, dt = (e) => {
592
+ ]), it = (e) => `"${e.replace(/["\\]+/g, " ").replace(/\s+/g, " ").trim()}"`, at = (e) => {
605
593
  let t = e.title?.trim();
606
594
  if (t === void 0 || t.length === 0) return;
607
595
  let n = e.authors?.find((e) => e.trim().length > 0)?.trim();
@@ -609,104 +597,104 @@ var o = (e, t) => t.has(e.scheme.trim().toLowerCase()), s = (e, t, n) => {
609
597
  title: t,
610
598
  ...n === void 0 ? {} : { author: n }
611
599
  };
612
- }, ft = (e) => {
600
+ }, ot = (e) => {
613
601
  let t = U(e);
614
602
  return t === void 0 ? void 0 : {
615
603
  volume: t,
616
604
  raw: e
617
605
  };
618
- }, pt = (e) => F(e) ? z(e, "items").flatMap((e) => {
619
- let t = ft(e);
606
+ }, st = (e) => F(e) ? z(e, "items").flatMap((e) => {
607
+ let t = ot(e);
620
608
  return t === void 0 ? [] : [t];
621
609
  }) : [], K = (e, t = {}) => e.map(({ volume: e, raw: n }) => ({
622
- metadata: rt(e, t),
610
+ metadata: Ze(e, t),
623
611
  id: e.id,
624
- url: it(e),
612
+ url: Qe(e),
625
613
  raw: n
626
- })), mt = (e) => {
627
- 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 () => {
628
616
  let i = await e.fetch(t.toString(), {
629
617
  signal: n.signal,
630
618
  headers: { Accept: "application/json" }
631
619
  });
632
620
  if (!(r && i.status === 404)) {
633
- if (!i.ok) throw new N(i.status, `Google Books lookup failed with status ${i.status}`);
621
+ if (!i.ok) throw new M(i.status, `Google Books lookup failed with status ${i.status}`);
634
622
  return i;
635
623
  }
636
624
  }, {
637
- attempts: ot,
638
- initialDelayMs: st,
639
- maxDelayMs: ct,
625
+ attempts: et,
626
+ initialDelayMs: tt,
627
+ maxDelayMs: nt,
640
628
  signal: n.signal,
641
629
  shouldRetry: (e) => {
642
- let t = we(e);
643
- return t === void 0 || lt.has(t);
630
+ let t = N(e);
631
+ return t === void 0 || rt.has(t);
644
632
  }
645
- })), r = async (e, r) => {
646
- 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);
647
635
  if (i === void 0) return;
648
- let a = ft(await i.json());
636
+ let a = ot(await i.json());
649
637
  if (a?.volume.id !== e) throw Error(`Google Books response did not contain the requested volume ${e}`);
650
638
  return a;
651
- }, i = async (e, r) => {
652
- if (r.limit <= 0) return [];
639
+ }, a = async (e, n) => {
640
+ if (n.limit <= 0) return [];
653
641
  let i = new URL(t);
654
- i.searchParams.set("q", e), i.searchParams.set("maxResults", String(Math.min(Math.ceil(r.limit), at))), i.searchParams.set("orderBy", "relevance"), i.searchParams.set("printType", "books");
655
- let a = await n(i, r);
656
- return a === void 0 ? [] : pt(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());
657
645
  };
658
646
  return async (e, t) => {
659
- let n = Ve(e);
660
- if (n !== void 0) {
661
- let e = await r(n.id, t);
662
- 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 });
663
651
  }
664
- let a = d(e.identifiers);
665
- if (a !== void 0) {
666
- let e = await i(`isbn:${a}`, t);
667
- 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 });
668
656
  }
669
- let o = dt(e);
670
- if (o === void 0) return [];
671
- let s = `intitle:${ut(o.title)}`, c = o.author === void 0 ? s : `${s} inauthor:${ut(o.author)}`, l = await i(c, t);
672
- 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));
673
661
  };
674
- }, ht = "googleBooks", gt = "https://www.googleapis.com/books/v1", _t = (e) => {
662
+ }, lt = "googleBooks", ut = "https://www.googleapis.com/books/v1", dt = (e) => {
675
663
  let t = e.apiKey.trim();
676
664
  if (t.length === 0) throw Error("createGoogleBooksProvider requires a non-empty apiKey");
677
665
  return {
678
- id: ht,
666
+ id: lt,
679
667
  name: "Google Books",
680
- search: mt({
668
+ search: ct({
681
669
  apiKey: t,
682
- baseUrl: e.baseUrl ?? gt,
670
+ baseUrl: e.baseUrl ?? ut,
683
671
  fetch: e.fetch ?? globalThis.fetch
684
672
  })
685
673
  };
686
- }, vt = "ProjectGutenberg", yt = /* @__PURE__ */ new Set(["gutenberg.org", "www.gutenberg.org"]), bt = [
674
+ }, ft = "ProjectGutenberg", pt = /* @__PURE__ */ new Set(["gutenberg.org", "www.gutenberg.org"]), mt = [
687
675
  /^\/ebooks\/(\d+)(?:[./]|$)/i,
688
676
  /^\/files\/(\d+)(?:\/|$)/i,
689
677
  /^\/cache\/epub\/(\d+)(?:\/|$)/i,
690
678
  /^\/(\d+)(?:\/|$)/
691
- ], xt = (e) => {
679
+ ], ht = (e) => {
692
680
  let t = e.trim();
693
681
  if (!/^\d+$/.test(t)) return;
694
682
  let n = t.replace(/^0+(?=\d)/, "");
695
683
  return n === "0" ? void 0 : n;
696
- }, St = (e) => {
684
+ }, gt = (e) => {
697
685
  try {
698
686
  let t = new URL(e.trim());
699
- if (t.protocol !== "http:" && t.protocol !== "https:" || !yt.has(t.hostname.toLowerCase())) return;
700
- for (let e of bt) {
687
+ if (t.protocol !== "http:" && t.protocol !== "https:" || !pt.has(t.hostname.toLowerCase())) return;
688
+ for (let e of mt) {
701
689
  let n = e.exec(t.pathname)?.[1];
702
- if (n !== void 0) return xt(n);
690
+ if (n !== void 0) return ht(n);
703
691
  }
704
692
  } catch {
705
693
  return;
706
694
  }
707
- }, q = (e) => {
695
+ }, _t = (e) => {
708
696
  for (let t of e.identifiers ?? []) {
709
- let e = t.scheme.trim().toLowerCase(), n = e === "projectgutenberg" ? xt(t.value) : e === "unknown" || e === "url" || e === "uri" ? St(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;
710
698
  if (n !== void 0) return {
711
699
  id: n,
712
700
  identifier: {
@@ -715,7 +703,7 @@ var o = (e, t) => t.has(e.scheme.trim().toLowerCase()), s = (e, t, n) => {
715
703
  }
716
704
  };
717
705
  }
718
- }, Ct = (e) => ({
706
+ }, vt = (e) => ({
719
707
  key: I(e, "key"),
720
708
  title: I(e, "title"),
721
709
  subtitle: I(e, "subtitle"),
@@ -728,7 +716,7 @@ var o = (e, t) => t.has(e.scheme.trim().toLowerCase()), s = (e, t, n) => {
728
716
  ratings_count: L(e, "ratings_count"),
729
717
  cover_i: L(e, "cover_i"),
730
718
  id_project_gutenberg: R(e, "id_project_gutenberg")
731
- }), wt = (e) => F(e) ? z(e, "docs").map(Ct) : [], Tt = {
719
+ }), yt = (e) => F(e) ? z(e, "docs").map(vt) : [], bt = {
732
720
  afr: "af",
733
721
  alb: "sq",
734
722
  amh: "am",
@@ -833,19 +821,19 @@ var o = (e, t) => t.has(e.scheme.trim().toLowerCase()), s = (e, t, n) => {
833
821
  wel: "cy",
834
822
  yid: "yi",
835
823
  zho: "zh"
836
- }, Et = /* @__PURE__ */ new Set([
824
+ }, xt = /* @__PURE__ */ new Set([
837
825
  "mul",
838
826
  "und",
839
827
  "zxx",
840
828
  "sgn"
841
- ]), Dt = (e) => {
829
+ ]), St = (e) => {
842
830
  let t = e.trim().toLowerCase();
843
- if (t.length !== 0 && !Et.has(t)) return Tt[t] ?? t;
844
- }, Ot = 25, kt = "OpenLibrary", At = "ProjectGutenberg", J = (e) => e.length > 0 ? e : void 0, jt = (e, t) => {
845
- 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 = 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 ? [] : [{
846
834
  value: r,
847
835
  type: "subtitle"
848
- }]]), g = J([...new Set((i ?? []).map(Dt).filter((e) => e !== void 0))]), _ = [
836
+ }]]), g = q([...new Set((i ?? []).map(St).filter((e) => e !== void 0))]), _ = [
849
837
  ...t.isbn === void 0 ? [] : [{
850
838
  value: t.isbn,
851
839
  scheme: "ISBN"
@@ -853,11 +841,11 @@ var o = (e, t) => t.has(e.scheme.trim().toLowerCase()), s = (e, t, n) => {
853
841
  ...t.matchedProjectGutenbergIdentifier === void 0 ? [] : [t.matchedProjectGutenbergIdentifier],
854
842
  ...(p ?? []).map((e) => ({
855
843
  value: e,
856
- scheme: At
844
+ scheme: Tt
857
845
  })),
858
846
  ...a === void 0 ? [] : [{
859
847
  value: a,
860
- scheme: kt
848
+ scheme: wt
861
849
  }]
862
850
  ];
863
851
  return P({
@@ -869,16 +857,16 @@ var o = (e, t) => t.has(e.scheme.trim().toLowerCase()), s = (e, t, n) => {
869
857
  },
870
858
  publication: s === void 0 ? void 0 : { original: { date: { year: s } } },
871
859
  languages: g,
872
- subjects: J((c ?? []).slice(0, 25)),
873
- contributors: J((o ?? []).map((e) => ({
860
+ subjects: q((c ?? []).slice(0, 25)),
861
+ contributors: q((o ?? []).map((e) => ({
874
862
  name: e,
875
863
  roles: ["author"]
876
864
  }))),
877
865
  numberOfPages: l,
878
- aggregateRating: Je(u, d),
879
- identifiers: J(_)
866
+ aggregateRating: He(u, d),
867
+ identifiers: q(_)
880
868
  });
881
- }, Mt = "openLibrary", Nt = "https://openlibrary.org", Pt = "https://covers.openlibrary.org", Ft = [
869
+ }, Dt = "openLibrary", Ot = "https://openlibrary.org", kt = "https://covers.openlibrary.org", At = [
882
870
  "key",
883
871
  "title",
884
872
  "subtitle",
@@ -891,7 +879,7 @@ var o = (e, t) => t.has(e.scheme.trim().toLowerCase()), s = (e, t, n) => {
891
879
  "ratings_count",
892
880
  "cover_i",
893
881
  "id_project_gutenberg"
894
- ].join(","), It = (e) => {
882
+ ].join(","), jt = (e) => {
895
883
  let t = e.title?.trim();
896
884
  if (t === void 0 || t.length === 0) return;
897
885
  let n = e.authors?.find((e) => e.trim().length > 0)?.trim();
@@ -899,11 +887,11 @@ var o = (e, t) => t.has(e.scheme.trim().toLowerCase()), s = (e, t, n) => {
899
887
  title: t,
900
888
  ...n === void 0 ? {} : { author: n }
901
889
  };
902
- }, Lt = (e = {}) => {
903
- let t = e.baseUrl ?? Nt, n = e.coversBaseUrl ?? Pt, r = async (n, r) => {
890
+ }, Mt = (e = {}) => {
891
+ let t = e.baseUrl ?? Ot, r = e.coversBaseUrl ?? kt, i = async (n, r) => {
904
892
  let i = new URL("/search.json", t);
905
893
  for (let [e, t] of Object.entries(n)) i.searchParams.set(e, t);
906
- i.searchParams.set("fields", Ft), i.searchParams.set("limit", String(r.limit));
894
+ i.searchParams.set("fields", At), i.searchParams.set("limit", String(r.limit));
907
895
  let a = await (e.fetch ?? globalThis.fetch)(i.toString(), {
908
896
  signal: r.signal,
909
897
  headers: {
@@ -911,113 +899,113 @@ var o = (e, t) => t.has(e.scheme.trim().toLowerCase()), s = (e, t, n) => {
911
899
  ...e.userAgent === void 0 ? {} : { "User-Agent": e.userAgent }
912
900
  }
913
901
  });
914
- if (!a.ok) throw new N(a.status, `Open Library search failed with status ${a.status}`);
915
- return wt(await a.json());
916
- }, i = (e, r = {}) => e.map((e) => ({
917
- metadata: jt(e, {
918
- coversBaseUrl: n,
919
- isbn: r.isbn,
920
- matchedProjectGutenbergIdentifier: r.confirmedProjectGutenberg?.identifier
902
+ if (!a.ok) throw new M(a.status, `Open Library search failed with status ${a.status}`);
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
921
909
  }),
922
910
  id: e.key,
923
911
  url: e.key === void 0 ? void 0 : `${t}${e.key}`,
924
912
  raw: e
925
913
  }));
926
914
  return {
927
- id: Mt,
915
+ id: Dt,
928
916
  name: "Open Library",
929
917
  search: async (e, t) => {
930
- let n = d(e.identifiers), a = q(e);
931
- if (n !== void 0) {
932
- let e = await r({ isbn: n }, t);
933
- 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 });
934
922
  }
935
- if (a !== void 0) {
936
- let e = await r({ q: `id_project_gutenberg:${a.id}` }, t);
937
- 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 });
938
926
  }
939
- let o = It(e);
940
- if (o === void 0) return [];
941
- let s = await r(o, t);
942
- if (s.length > 0) return i(s);
943
- let c = o.author === void 0 ? o.title : `${o.title} ${o.author}`;
944
- 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));
945
933
  }
946
934
  };
947
- }, Y = (e) => e.includes(":") ? e.slice(e.lastIndexOf(":") + 1) : e, Rt = (e) => e.type === "element", X = (e, t) => e.children.filter((e) => Rt(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) => {
948
936
  let t = e?.val.trim();
949
937
  return t !== void 0 && t.length > 0 ? t : void 0;
950
- }, zt = (e, t) => {
938
+ }, Q = (e, t) => {
951
939
  for (let [n, r] of Object.entries(e.attr)) {
952
- if (Y(n).toLowerCase() !== t.toLowerCase()) continue;
940
+ if (J(n).toLowerCase() !== t.toLowerCase()) continue;
953
941
  let e = r.trim();
954
942
  if (e.length > 0) return e;
955
943
  }
956
- }, Bt = (e, t) => X(e, t).flatMap((e) => {
957
- 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"));
958
946
  return t === void 0 ? [] : [t];
959
- }), Vt = (e) => {
960
- let t = zt(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];
961
949
  if (n === void 0) return;
962
950
  let r = n.replace(/^0+(?=\d)/, "");
963
951
  return r === "0" ? void 0 : r;
964
- }, Ht = (e) => {
952
+ }, It = (e) => {
965
953
  let t = [];
966
954
  for (let n of e.children) {
967
- if (!Rt(n)) continue;
955
+ if (!Nt(n)) continue;
968
956
  let e = n.name.toLowerCase() === "dcterms:creator", r = n.name.toLowerCase().startsWith("marcrel:");
969
957
  if (!e && !r) continue;
970
- let i = Q(Z(Z(n, "agent") ?? n, "name"));
958
+ let i = Z(X(X(n, "agent") ?? n, "name"));
971
959
  i !== void 0 && t.push({
972
960
  name: i,
973
- role: e ? "aut" : Y(n.name).toLowerCase()
961
+ role: e ? "aut" : J(n.name).toLowerCase()
974
962
  });
975
963
  }
976
964
  return t;
977
- }, Ut = (e) => X(e, "subject").flatMap((e) => {
978
- let t = Z(e, "Description"), n = t === void 0 ? void 0 : zt(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"));
979
967
  return r !== void 0 && n?.endsWith("/LCSH") === !0 ? [r] : [];
980
- }), Wt = (e) => {
981
- let t = X(e, "hasFormat").flatMap((e) => {
982
- let t = Z(e, "file");
968
+ }), Rt = (e) => {
969
+ let t = Y(e, "hasFormat").flatMap((e) => {
970
+ let t = X(e, "file");
983
971
  if (t === void 0) return [];
984
- let n = zt(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);
985
973
  return n === void 0 || r === void 0 || !/\.cover\.(?:medium|small)\.[a-z0-9]+(?:$|[?#])/i.test(n) ? [] : [{
986
974
  uri: n,
987
975
  mediaType: r
988
976
  }];
989
977
  });
990
978
  return t.find((e) => /\.cover\.medium\./i.test(e.uri)) ?? t[0];
991
- }, $ = (e) => e.length > 0 ? e : void 0, Gt = (e) => {
979
+ }, $ = (e) => e.length > 0 ? e : void 0, zt = (e) => {
992
980
  let t;
993
981
  try {
994
- t = new a(e);
982
+ t = new s(e);
995
983
  } catch (e) {
996
984
  let t = e instanceof Error ? e.message : String(e);
997
985
  throw Error(`Project Gutenberg RDF is malformed: ${t}`, { cause: e });
998
986
  }
999
- if (Y(t.name).toLowerCase() !== "rdf") return;
1000
- let n = Z(t, "ebook");
987
+ if (J(t.name).toLowerCase() !== "rdf") return;
988
+ let n = X(t, "ebook");
1001
989
  if (n === void 0) return;
1002
- let r = Vt(n);
990
+ let r = Ft(n);
1003
991
  if (r === void 0) return;
1004
- let i = [...new Set(Bt(n, "language"))], o = [...new Set(Ut(n))], s = [...new Set(Bt(n, "bookshelf"))], c = Ht(n);
992
+ let i = [...new Set(Pt(n, "language"))], a = [...new Set(Lt(n))], o = [...new Set(Pt(n, "bookshelf"))], c = It(n);
1005
993
  return {
1006
994
  id: r,
1007
- title: Q(Z(n, "title")),
1008
- publisher: Q(Z(n, "publisher")),
1009
- issued: Q(Z(n, "issued")),
1010
- originalPublication: Q(Z(n, "marc260")),
1011
- rights: Q(Z(n, "rights")),
1012
- description: Q(Z(n, "description")),
1013
- 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")),
1014
1002
  languages: $(i),
1015
- subjects: $(o),
1016
- bookshelves: $(s),
1003
+ subjects: $(a),
1004
+ bookshelves: $(o),
1017
1005
  contributors: $(c),
1018
- cover: Wt(n)
1006
+ cover: Rt(n)
1019
1007
  };
1020
- }, Kt = 25, qt = {
1008
+ }, Bt = 25, Vt = {
1021
1009
  art: "artist",
1022
1010
  aut: "author",
1023
1011
  clr: "colorist",
@@ -1026,17 +1014,17 @@ var o = (e, t) => t.has(e.scheme.trim().toLowerCase()), s = (e, t, n) => {
1026
1014
  ill: "illustrator",
1027
1015
  nrt: "narrator",
1028
1016
  trl: "translator"
1029
- }, Jt = (e) => {
1017
+ }, Ht = (e) => {
1030
1018
  let t = /* @__PURE__ */ new Map();
1031
1019
  for (let n of e.contributors ?? []) {
1032
- let e = n.name.trim().toLowerCase(), r = qt[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);
1033
1021
  i === void 0 ? t.set(e, {
1034
1022
  name: n.name,
1035
1023
  roles: [r]
1036
1024
  }) : i.roles.includes(r) || i.roles.push(r);
1037
1025
  }
1038
1026
  return t.size > 0 ? [...t.values()] : void 0;
1039
- }, Yt = (e) => {
1027
+ }, Ut = (e) => {
1040
1028
  if (e === void 0) return;
1041
1029
  let t = /^(\d{4})(?:-(\d{2})(?:-(\d{2}))?)?$/.exec(e.trim());
1042
1030
  if (t === null) return;
@@ -1046,33 +1034,33 @@ var o = (e, t) => t.has(e.scheme.trim().toLowerCase()), s = (e, t, n) => {
1046
1034
  ...r === void 0 ? {} : { month: r },
1047
1035
  ...i === void 0 ? {} : { day: i }
1048
1036
  };
1049
- }, Xt = (e, t) => e.split("$").slice(1).flatMap((e) => e[0]?.toLowerCase() === t.toLowerCase() ? [e.slice(1).trim()] : []).filter((e) => e.length > 0), Zt = (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) => {
1050
1038
  if (e === void 0) return;
1051
- let t = Xt(e, "b"), n = (t.length === 1 ? t[0] : void 0)?.replace(/[\s,;:/]+$/u, "").trim(), r = Xt(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({
1052
1040
  date: i.length === 1 ? { year: i[0] } : void 0,
1053
1041
  publisher: n !== void 0 && n.length > 0 && !/^\[?s\.n\.?\]?$/i.test(n) ? n : void 0
1054
1042
  });
1055
1043
  return a.date !== void 0 || a.publisher !== void 0 ? a : void 0;
1056
- }, Qt = (e, t) => {
1044
+ }, Kt = (e, t) => {
1057
1045
  try {
1058
1046
  let n = new URL(e, t);
1059
1047
  return n.protocol === "http:" || n.protocol === "https:" ? n.toString() : void 0;
1060
1048
  } catch {
1061
1049
  return;
1062
1050
  }
1063
- }, $t = (e) => e.length > 0 ? e : void 0, en = (e, t) => {
1051
+ }, qt = (e) => e.length > 0 ? e : void 0, Jt = (e, t) => {
1064
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, {
1065
1053
  value: n,
1066
- scheme: vt
1067
- }].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 : Qt(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 : {
1068
1056
  uri: v,
1069
1057
  mediaType: m?.mediaType,
1070
1058
  confidence: "derived"
1071
1059
  }, b = P({
1072
- date: Yt(a),
1060
+ date: Ut(a),
1073
1061
  publisher: i
1074
1062
  }), x = P({
1075
- original: Zt(o),
1063
+ original: Gt(o),
1076
1064
  edition: b.date !== void 0 || b.publisher !== void 0 ? b : void 0
1077
1065
  });
1078
1066
  return P({
@@ -1080,19 +1068,19 @@ var o = (e, t) => t.has(e.scheme.trim().toLowerCase()), s = (e, t, n) => {
1080
1068
  publication: x.original !== void 0 || x.edition !== void 0 ? x : void 0,
1081
1069
  description: l ?? c,
1082
1070
  rights: s,
1083
- languages: $t([...new Set(u ?? [])]),
1084
- subjects: $t(_),
1085
- contributors: Jt(e),
1071
+ languages: qt([...new Set(u ?? [])]),
1072
+ subjects: qt(_),
1073
+ contributors: Ht(e),
1086
1074
  identifiers: g,
1087
1075
  cover: y
1088
1076
  });
1089
- }, tn = "projectGutenberg", nn = "https://www.gutenberg.org", rn = (e = {}) => {
1090
- let t = e.baseUrl ?? nn;
1077
+ }, Yt = "projectGutenberg", Xt = "https://www.gutenberg.org", Zt = (e = {}) => {
1078
+ let t = e.baseUrl ?? Xt;
1091
1079
  return {
1092
- id: tn,
1080
+ id: Yt,
1093
1081
  name: "Project Gutenberg",
1094
1082
  search: async (n, r) => {
1095
- let i = q(n);
1083
+ let i = _t(n);
1096
1084
  if (i === void 0) return [];
1097
1085
  let a = new URL(`/cache/epub/${i.id}/pg${i.id}.rdf`, t), o = await (e.fetch ?? globalThis.fetch)(a.toString(), {
1098
1086
  signal: r.signal,
@@ -1102,23 +1090,23 @@ var o = (e, t) => t.has(e.scheme.trim().toLowerCase()), s = (e, t, n) => {
1102
1090
  }
1103
1091
  });
1104
1092
  if (o.status === 404) return [];
1105
- if (!o.ok) throw new N(o.status, `Project Gutenberg metadata lookup failed with status ${o.status}`);
1106
- let s = Gt(await o.text());
1093
+ if (!o.ok) throw new M(o.status, `Project Gutenberg metadata lookup failed with status ${o.status}`);
1094
+ let s = zt(await o.text());
1107
1095
  if (s === void 0 || s.id !== i.id) throw Error(`Project Gutenberg RDF did not contain the requested eBook ${i.id}`);
1108
1096
  let c = new URL(`/ebooks/${i.id}`, t).toString();
1109
1097
  return [{
1110
1098
  id: s.id,
1111
1099
  url: c,
1112
1100
  raw: s,
1113
- metadata: en(s, {
1101
+ metadata: Jt(s, {
1114
1102
  baseUrl: t,
1115
1103
  matchedIdentifier: i.identifier
1116
1104
  })
1117
1105
  }];
1118
1106
  }
1119
1107
  };
1120
- }, an = (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);
1121
1109
  //#endregion
1122
- export { B as GOOGLE_BOOKS_IDENTIFIER_SCHEME, Ye as GOOGLE_BOOKS_MAX_SUBJECTS, ht as GOOGLE_BOOKS_PROVIDER_ID, ce as METADATA_MATCH_WEIGHTS, N as MetadataProviderResponseError, kt as OPEN_LIBRARY_IDENTIFIER_SCHEME, Ot as OPEN_LIBRARY_MAX_SUBJECTS, Mt as OPEN_LIBRARY_PROVIDER_ID, vt as PROJECT_GUTENBERG_IDENTIFIER_SCHEME, Kt as PROJECT_GUTENBERG_MAX_SUBJECTS, tn as PROJECT_GUTENBERG_PROVIDER_ID, _t as createGoogleBooksProvider, Lt as createOpenLibraryProvider, rn as createProjectGutenbergProvider, Ae as fetchMetadata, tt as googleBooksCoverUrl, Ve as googleBooksLookupFromInput, it as googleBooksVolumeUrl, an as hasSearchTerms, Dt as marcLanguageToBcp47, p as metadataAuthors, je as metadataInputFromResolvedArchive, y as normalizeForComparison, U as parseGoogleBooksVolume, Ke as parseGoogleBooksVolumesResponse, wt as parseOpenLibrarySearchResponse, Gt as parseProjectGutenbergRdf, se as personNameSimilarity, q as projectGutenbergLookupFromInput, rt as resolveGoogleBooksVolume, jt as resolveOpenLibraryDoc, en as resolveProjectGutenbergRecord, we as responseErrorStatus, Le as retryWithBackoff, Ce as scoreMetadataCandidate, x as textSimilarity, ie 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 };
1123
1111
 
1124
1112
  //# sourceMappingURL=index.js.map