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