@prose-reader/metadata-fetcher 1.346.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(), me = (e) => `${e.scheme}:${e.value}`, he = (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
- }, ge = (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
- }, _e = (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
- }, O = (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
- }, k = (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
237
+ });
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(", ")
211
243
  });
212
- let g = (t.identifiers ?? []).filter((e) => !he(e)), _ = (n.identifiers ?? []).filter((e) => !he(e)), v = g.some((e) => _.some((t) => _e(e, t)));
213
- g.length > 0 && _.length > 0 && i("identifiers", {
214
- score: +!!g.some((e) => _.some((t) => ge(e, t))),
215
- query: g.map(me).join(", "),
216
- candidate: _.map(me).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);
244
+ let b = A(t.title), S = [e(n), xe(n)].flatMap((e) => {
245
+ let t = A(e);
220
246
  return t === void 0 ? [] : [t];
221
247
  });
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(O));
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);
259
+ return t === void 0 ? [] : [t];
260
+ });
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(O(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
- }, A = 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
- }, j = (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
- }, Ce = i.namespace("@prose-reader/metadata-fetcher", void 0, { color: "#b06642" }), M = (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
- }, we = 5, Te = .5, Ee = 5, De = ({ candidate: e, providerId: t, score: n, signals: r, accepted: i, includeRaw: a }) => M({
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
- }), Oe = async (e, t) => {
280
- let n = t.limit ?? we, r = t.minScore ?? Te, 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 Ce.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: M({
334
+ failure: P({
296
335
  id: r.id,
297
- status: j(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 } = k(e, n.metadata);
306
- return De({
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 && Ce.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: Ee,
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
- }, ke = (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 M({
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
- }, N = (e) => typeof e == "object" && !!e && !Array.isArray(e), P = (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
- }, F = (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
- }, I = (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
- }, L = (e, t) => {
396
+ }, z = (e, t) => {
358
397
  let n = e[t];
359
- return Array.isArray(n) ? n.filter(N) : [];
360
- }, Ae = (e) => e.reason ?? new DOMException("The operation was aborted", "AbortError"), je = (e) => {
361
- if (e?.aborted === !0) throw Ae(e);
362
- }, Me = (e, t) => (je(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 : Ae(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
- })), Ne = (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
- }, Pe = (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
- }, Fe = async (e, t) => {
377
- Ne(t);
415
+ }, Le = async (e, t) => {
416
+ Fe(t);
378
417
  for (let n = 1; n <= t.attempts; n += 1) {
379
- je(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 Me(Pe(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
- }, Ie = "GoogleBooks", Le = /* @__PURE__ */ new Set(["books.googleapis.com", "www.googleapis.com"]), Re = /^books\.google\.(?:com|[a-z]{2}|com\.[a-z]{2}|co\.[a-z]{2})$/i, R = (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
- }, ze = (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 (Re.test(n)) return R(t.searchParams.get("id") ?? "");
397
- if (Le.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 : R(decodeURIComponent(e));
438
+ return e === void 0 ? void 0 : V(decodeURIComponent(e));
400
439
  }
401
440
  } catch {
402
441
  return;
403
442
  }
404
- }, z = (e) => {
443
+ }, Ve = (e) => {
405
444
  for (let t of e.identifiers ?? []) {
406
- let e = t.scheme.trim().toLowerCase(), n = e === "googlebooks" ? R(t.value) : e === "unknown" || e === "url" || e === "uri" ? ze(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,97 +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 N(n) ? n : void 0;
418
- }, Be = (e) => {
419
- let t = L(e, "industryIdentifiers").flatMap((e) => {
420
- let t = P(e, "identifier");
421
- return t === void 0 ? [] : [M({
422
- type: P(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 = M({
431
- smallThumbnail: P(t, "smallThumbnail"),
432
- thumbnail: P(t, "thumbnail"),
433
- small: P(t, "small"),
434
- medium: P(t, "medium"),
435
- large: P(t, "large"),
436
- extraLarge: P(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 = P(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 = M({
448
- title: P(t, "title"),
449
- subtitle: P(t, "subtitle"),
450
- authors: I(t, "authors"),
451
- publisher: P(t, "publisher"),
452
- publishedDate: P(t, "publishedDate"),
453
- description: P(t, "description"),
454
- industryIdentifiers: Be(t),
455
- pageCount: F(t, "pageCount"),
456
- categories: I(t, "categories"),
457
- language: P(t, "language"),
458
- imageLinks: Ve(t),
459
- infoLink: P(t, "infoLink"),
460
- canonicalVolumeLink: P(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 (!N(e)) return;
466
- let t = M({
467
- id: P(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) => N(e) ? L(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, Ke = {
475
- id: "identifiers",
476
- volumeInfo: "metadata"
477
- }, qe = {
478
- title: "titles",
479
- subtitle: "titles",
480
- authors: "contributors",
481
- publisher: "publication.edition.publisher",
482
- publishedDate: "publication.edition.date",
483
- description: "description",
484
- industryIdentifiers: "identifiers",
485
- pageCount: "numberOfPages",
486
- categories: "subjects",
487
- language: "languages",
488
- imageLinks: "cover",
489
- infoLink: "candidate.url",
490
- canonicalVolumeLink: "candidate.url",
491
- seriesInfo: "titles"
492
- }, H = (e) => e.length > 0 ? e : void 0, Je = (e) => e === "ISBN_10" || e === "ISBN_13" ? "ISBN" : e ?? "Unknown", Ye = (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)), Xe = (e) => e.map((e) => M({
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({
493
520
  value: e.identifier,
494
521
  scheme: Je(e.type)
495
- })), Ze = (e) => {
496
- 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));
497
- return t === void 0 || n === void 0 || r ? t : `${t} Vol ${n}`;
498
- }, U = (e) => {
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) => {
499
535
  if (e !== void 0) try {
500
536
  let t = new URL(e);
501
537
  return t.protocol !== "http:" && t.protocol !== "https:" ? void 0 : (t.protocol === "http:" && (t.protocol = "https:"), t.toString());
502
538
  } catch {
503
539
  return;
504
540
  }
505
- }, Qe = (e) => {
541
+ }, $e = (e) => {
506
542
  if (e === void 0) return;
507
543
  let t = [
508
544
  e.extraLarge,
@@ -513,48 +549,49 @@ var o = (e, t) => t.has(e.scheme.trim().toLowerCase()), s = (e, t, n) => {
513
549
  e.smallThumbnail
514
550
  ];
515
551
  for (let e of t) {
516
- let t = U(e);
552
+ let t = G(e);
517
553
  if (t !== void 0) return t;
518
554
  }
519
- }, $e = (e) => H(e.map((e) => ({
555
+ }, et = (e) => W(e.map((e) => ({
520
556
  name: e,
521
557
  roles: ["author"]
522
- }))), et = (e, t = {}) => {
523
- let n = e.volumeInfo ?? {}, i = Xe(n.industryIdentifiers ?? []), a = Ye([
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([
524
560
  ...t.matchedIdentifier === void 0 ? [] : [t.matchedIdentifier],
525
561
  ...t.matchedIsbn === void 0 ? [] : [{
526
562
  value: t.matchedIsbn,
527
563
  scheme: "ISBN"
528
564
  }],
529
- ...e.id === void 0 ? [] : [{
530
- value: e.id,
531
- scheme: Ie
565
+ ...n === void 0 ? [] : [{
566
+ value: n,
567
+ scheme: B
532
568
  }],
533
- ...i
534
- ]), o = M({
535
- date: r(n.publishedDate),
536
- publisher: n.publisher
537
- }), s = Qe(n.imageLinks), c = s === void 0 ? void 0 : {
538
- 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,
539
575
  confidence: "derived"
540
- }, l = [...new Set(n.categories ?? [])].slice(0, 25), u = Ze(n);
541
- return M({
542
- titles: u === void 0 ? void 0 : [{ value: u }],
543
- description: n.description,
544
- publication: o.date !== void 0 || o.publisher !== void 0 ? { edition: o } : void 0,
545
- languages: n.language === void 0 ? void 0 : [n.language],
546
- subjects: H(l),
547
- contributors: $e(n.authors ?? []),
548
- numberOfPages: n.pageCount,
549
- identifiers: a,
550
- 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
551
588
  });
552
- }, tt = (e) => U(e.volumeInfo?.canonicalVolumeLink) ?? U(e.volumeInfo?.infoLink) ?? (e.id === void 0 ? void 0 : `https://books.google.com/books?id=${encodeURIComponent(e.id)}`), nt = 40, rt = 3, it = 1e3, at = 3e3, ot = /* @__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([
553
590
  500,
554
591
  502,
555
592
  503,
556
593
  504
557
- ]), st = (e) => `"${e.replace(/["\\]+/g, " ").replace(/\s+/g, " ").trim()}"`, ct = (e) => {
594
+ ]), ct = (e) => `"${e.replace(/["\\]+/g, " ").replace(/\s+/g, " ").trim()}"`, lt = (e) => {
558
595
  let t = e.title?.trim();
559
596
  if (t === void 0 || t.length === 0) return;
560
597
  let n = e.authors?.find((e) => e.trim().length > 0)?.trim();
@@ -562,104 +599,104 @@ var o = (e, t) => t.has(e.scheme.trim().toLowerCase()), s = (e, t, n) => {
562
599
  title: t,
563
600
  ...n === void 0 ? {} : { author: n }
564
601
  };
565
- }, lt = (e) => {
566
- let t = V(e);
602
+ }, ut = (e) => {
603
+ let t = U(e);
567
604
  return t === void 0 ? void 0 : {
568
605
  volume: t,
569
606
  raw: e
570
607
  };
571
- }, ut = (e) => N(e) ? L(e, "items").flatMap((e) => {
572
- let t = lt(e);
608
+ }, dt = (e) => F(e) ? z(e, "items").flatMap((e) => {
609
+ let t = ut(e);
573
610
  return t === void 0 ? [] : [t];
574
- }) : [], W = (e, t = {}) => e.map(({ volume: e, raw: n }) => ({
575
- metadata: et(e, t),
611
+ }) : [], K = (e, t = {}) => e.map(({ volume: e, raw: n }) => ({
612
+ metadata: tt(e, t),
576
613
  id: e.id,
577
- url: tt(e),
614
+ url: nt(e),
578
615
  raw: n
579
- })), dt = (e) => {
580
- let t = `${e.baseUrl.replace(/\/+$/, "")}/volumes`, n = async (t, n, r = !1) => (t.searchParams.set("key", e.apiKey), Fe(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 () => {
581
618
  let i = await e.fetch(t.toString(), {
582
619
  signal: n.signal,
583
620
  headers: { Accept: "application/json" }
584
621
  });
585
622
  if (!(r && i.status === 404)) {
586
- if (!i.ok) throw new A(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}`);
587
624
  return i;
588
625
  }
589
626
  }, {
590
- attempts: rt,
591
- initialDelayMs: it,
592
- maxDelayMs: at,
627
+ attempts: it,
628
+ initialDelayMs: at,
629
+ maxDelayMs: ot,
593
630
  signal: n.signal,
594
631
  shouldRetry: (e) => {
595
- let t = j(e);
596
- return t === void 0 || ot.has(t);
632
+ let t = N(e);
633
+ return t === void 0 || st.has(t);
597
634
  }
598
635
  })), r = async (e, r) => {
599
636
  let i = await n(new URL(`${t}/${encodeURIComponent(e)}`), r, !0);
600
637
  if (i === void 0) return;
601
- let a = lt(await i.json());
638
+ let a = ut(await i.json());
602
639
  if (a?.volume.id !== e) throw Error(`Google Books response did not contain the requested volume ${e}`);
603
640
  return a;
604
641
  }, i = async (e, r) => {
605
642
  if (r.limit <= 0) return [];
606
643
  let i = new URL(t);
607
- i.searchParams.set("q", e), i.searchParams.set("maxResults", String(Math.min(Math.ceil(r.limit), nt))), 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");
608
645
  let a = await n(i, r);
609
- return a === void 0 ? [] : ut(await a.json());
646
+ return a === void 0 ? [] : dt(await a.json());
610
647
  };
611
648
  return async (e, t) => {
612
- let n = z(e);
649
+ let n = Ve(e);
613
650
  if (n !== void 0) {
614
651
  let e = await r(n.id, t);
615
- if (e !== void 0) return W([e], { matchedIdentifier: n.identifier });
652
+ if (e !== void 0) return K([e], { matchedIdentifier: n.identifier });
616
653
  }
617
654
  let a = d(e.identifiers);
618
655
  if (a !== void 0) {
619
656
  let e = await i(`isbn:${a}`, t);
620
- if (e.length > 0) return W(e, { matchedIsbn: a });
657
+ if (e.length > 0) return K(e, { matchedIsbn: a });
621
658
  }
622
- let o = ct(e);
659
+ let o = lt(e);
623
660
  if (o === void 0) return [];
624
- let s = `intitle:${st(o.title)}`, c = o.author === void 0 ? s : `${s} inauthor:${st(o.author)}`, l = await i(c, t);
625
- return l.length > 0 || o.author === void 0 ? W(l) : W(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));
626
663
  };
627
- }, ft = "googleBooks", pt = "https://www.googleapis.com/books/v1", mt = (e) => {
664
+ }, pt = "googleBooks", mt = "https://www.googleapis.com/books/v1", ht = (e) => {
628
665
  let t = e.apiKey.trim();
629
666
  if (t.length === 0) throw Error("createGoogleBooksProvider requires a non-empty apiKey");
630
667
  return {
631
- id: ft,
668
+ id: pt,
632
669
  name: "Google Books",
633
- search: dt({
670
+ search: ft({
634
671
  apiKey: t,
635
- baseUrl: e.baseUrl ?? pt,
672
+ baseUrl: e.baseUrl ?? mt,
636
673
  fetch: e.fetch ?? globalThis.fetch
637
674
  })
638
675
  };
639
- }, ht = "ProjectGutenberg", gt = /* @__PURE__ */ new Set(["gutenberg.org", "www.gutenberg.org"]), _t = [
676
+ }, gt = "ProjectGutenberg", _t = /* @__PURE__ */ new Set(["gutenberg.org", "www.gutenberg.org"]), vt = [
640
677
  /^\/ebooks\/(\d+)(?:[./]|$)/i,
641
678
  /^\/files\/(\d+)(?:\/|$)/i,
642
679
  /^\/cache\/epub\/(\d+)(?:\/|$)/i,
643
680
  /^\/(\d+)(?:\/|$)/
644
- ], vt = (e) => {
681
+ ], yt = (e) => {
645
682
  let t = e.trim();
646
683
  if (!/^\d+$/.test(t)) return;
647
684
  let n = t.replace(/^0+(?=\d)/, "");
648
685
  return n === "0" ? void 0 : n;
649
- }, yt = (e) => {
686
+ }, bt = (e) => {
650
687
  try {
651
688
  let t = new URL(e.trim());
652
- if (t.protocol !== "http:" && t.protocol !== "https:" || !gt.has(t.hostname.toLowerCase())) return;
653
- for (let e of _t) {
689
+ if (t.protocol !== "http:" && t.protocol !== "https:" || !_t.has(t.hostname.toLowerCase())) return;
690
+ for (let e of vt) {
654
691
  let n = e.exec(t.pathname)?.[1];
655
- if (n !== void 0) return vt(n);
692
+ if (n !== void 0) return yt(n);
656
693
  }
657
694
  } catch {
658
695
  return;
659
696
  }
660
- }, G = (e) => {
697
+ }, q = (e) => {
661
698
  for (let t of e.identifiers ?? []) {
662
- let e = t.scheme.trim().toLowerCase(), n = e === "projectgutenberg" ? vt(t.value) : e === "unknown" || e === "url" || e === "uri" ? yt(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;
663
700
  if (n !== void 0) return {
664
701
  id: n,
665
702
  identifier: {
@@ -668,18 +705,18 @@ var o = (e, t) => t.has(e.scheme.trim().toLowerCase()), s = (e, t, n) => {
668
705
  }
669
706
  };
670
707
  }
671
- }, bt = (e) => ({
672
- key: P(e, "key"),
673
- title: P(e, "title"),
674
- subtitle: P(e, "subtitle"),
675
- author_name: I(e, "author_name"),
676
- first_publish_year: F(e, "first_publish_year"),
677
- language: I(e, "language"),
678
- subject: I(e, "subject"),
679
- number_of_pages_median: F(e, "number_of_pages_median"),
680
- cover_i: F(e, "cover_i"),
681
- id_project_gutenberg: I(e, "id_project_gutenberg")
682
- }), xt = (e) => N(e) ? L(e, "docs").map(bt) : [], St = {
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 = {
683
720
  afr: "af",
684
721
  alb: "sq",
685
722
  amh: "am",
@@ -784,57 +821,49 @@ var o = (e, t) => t.has(e.scheme.trim().toLowerCase()), s = (e, t, n) => {
784
821
  wel: "cy",
785
822
  yid: "yi",
786
823
  zho: "zh"
787
- }, Ct = /* @__PURE__ */ new Set([
824
+ }, wt = /* @__PURE__ */ new Set([
788
825
  "mul",
789
826
  "und",
790
827
  "zxx",
791
828
  "sgn"
792
- ]), wt = (e) => {
829
+ ]), Tt = (e) => {
793
830
  let t = e.trim().toLowerCase();
794
- if (t.length !== 0 && !Ct.has(t)) return St[t] ?? t;
795
- }, Tt = 25, Et = {
796
- key: "identifiers",
797
- title: "titles",
798
- subtitle: "titles",
799
- author_name: "contributors",
800
- first_publish_year: "publication.original.date",
801
- language: "languages",
802
- subject: "subjects",
803
- number_of_pages_median: "numberOfPages",
804
- cover_i: "cover",
805
- id_project_gutenberg: "identifiers"
806
- }, Dt = "OpenLibrary", Ot = "ProjectGutenberg", K = (e) => e.length > 0 ? e : void 0, kt = (e, t) => {
807
- let n = e.title !== void 0 && e.subtitle !== void 0 ? `${e.title}: ${e.subtitle}` : e.title, r = K([...new Set((e.language ?? []).map(wt).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 = [
808
837
  ...t.isbn === void 0 ? [] : [{
809
838
  value: t.isbn,
810
839
  scheme: "ISBN"
811
840
  }],
812
841
  ...t.matchedProjectGutenbergIdentifier === void 0 ? [] : [t.matchedProjectGutenbergIdentifier],
813
- ...(e.id_project_gutenberg ?? []).map((e) => ({
842
+ ...(d ?? []).map((e) => ({
814
843
  value: e,
815
844
  scheme: Ot
816
845
  })),
817
- ...e.key === void 0 ? [] : [{
818
- value: e.key,
846
+ ...a === void 0 ? [] : [{
847
+ value: a,
819
848
  scheme: Dt
820
849
  }]
821
850
  ];
822
- return M({
823
- titles: n === void 0 ? void 0 : [{ value: n }],
824
- cover: e.cover_i === void 0 ? void 0 : {
825
- 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`,
826
855
  mediaType: "image/jpeg",
827
856
  confidence: "derived"
828
857
  },
829
- publication: e.first_publish_year === void 0 ? void 0 : { original: { date: { year: e.first_publish_year } } },
830
- languages: r,
831
- subjects: K((e.subject ?? []).slice(0, 25)),
832
- contributors: K((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) => ({
833
862
  name: e,
834
863
  roles: ["author"]
835
864
  }))),
836
- numberOfPages: e.number_of_pages_median,
837
- identifiers: K(i)
865
+ numberOfPages: l,
866
+ identifiers: J(h)
838
867
  });
839
868
  }, At = "openLibrary", jt = "https://openlibrary.org", Mt = "https://covers.openlibrary.org", Nt = [
840
869
  "key",
@@ -867,8 +896,8 @@ var o = (e, t) => t.has(e.scheme.trim().toLowerCase()), s = (e, t, n) => {
867
896
  ...e.userAgent === void 0 ? {} : { "User-Agent": e.userAgent }
868
897
  }
869
898
  });
870
- if (!a.ok) throw new A(a.status, `Open Library search failed with status ${a.status}`);
871
- return xt(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());
872
901
  }, i = (e, r = {}) => e.map((e) => ({
873
902
  metadata: kt(e, {
874
903
  coversBaseUrl: n,
@@ -883,7 +912,7 @@ var o = (e, t) => t.has(e.scheme.trim().toLowerCase()), s = (e, t, n) => {
883
912
  id: At,
884
913
  name: "Open Library",
885
914
  search: async (e, t) => {
886
- let n = d(e.identifiers), a = G(e);
915
+ let n = d(e.identifiers), a = q(e);
887
916
  if (n !== void 0) {
888
917
  let e = await r({ isbn: n }, t);
889
918
  if (e.length > 0) return i(e, { isbn: n });
@@ -900,51 +929,51 @@ var o = (e, t) => t.has(e.scheme.trim().toLowerCase()), s = (e, t, n) => {
900
929
  return i(await r({ q: c }, t));
901
930
  }
902
931
  };
903
- }, q = (e) => e.includes(":") ? e.slice(e.lastIndexOf(":") + 1) : e, J = (e) => e.type === "element", Y = (e, t) => e.children.filter((e) => J(e) && q(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) => {
904
933
  let t = e?.val.trim();
905
934
  return t !== void 0 && t.length > 0 ? t : void 0;
906
- }, Q = (e, t) => {
935
+ }, Lt = (e, t) => {
907
936
  for (let [n, r] of Object.entries(e.attr)) {
908
- if (q(n).toLowerCase() !== t.toLowerCase()) continue;
937
+ if (Y(n).toLowerCase() !== t.toLowerCase()) continue;
909
938
  let e = r.trim();
910
939
  if (e.length > 0) return e;
911
940
  }
912
- }, It = (e, t) => Y(e, t).flatMap((e) => {
913
- 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"));
914
943
  return t === void 0 ? [] : [t];
915
- }), Lt = (e) => {
916
- 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];
917
946
  if (n === void 0) return;
918
947
  let r = n.replace(/^0+(?=\d)/, "");
919
948
  return r === "0" ? void 0 : r;
920
- }, Rt = (e) => {
949
+ }, Bt = (e) => {
921
950
  let t = [];
922
951
  for (let n of e.children) {
923
- if (!J(n)) continue;
952
+ if (!It(n)) continue;
924
953
  let e = n.name.toLowerCase() === "dcterms:creator", r = n.name.toLowerCase().startsWith("marcrel:");
925
954
  if (!e && !r) continue;
926
- let i = Z(X(X(n, "agent") ?? n, "name"));
955
+ let i = Q(Z(Z(n, "agent") ?? n, "name"));
927
956
  i !== void 0 && t.push({
928
957
  name: i,
929
- role: e ? "aut" : q(n.name).toLowerCase()
958
+ role: e ? "aut" : Y(n.name).toLowerCase()
930
959
  });
931
960
  }
932
961
  return t;
933
- }, zt = (e) => Y(e, "subject").flatMap((e) => {
934
- 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"));
935
964
  return r !== void 0 && n?.endsWith("/LCSH") === !0 ? [r] : [];
936
- }), Bt = (e) => {
937
- let t = Y(e, "hasFormat").flatMap((e) => {
938
- let t = X(e, "file");
965
+ }), Ht = (e) => {
966
+ let t = X(e, "hasFormat").flatMap((e) => {
967
+ let t = Z(e, "file");
939
968
  if (t === void 0) return [];
940
- 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);
941
970
  return n === void 0 || r === void 0 || !/\.cover\.(?:medium|small)\.[a-z0-9]+(?:$|[?#])/i.test(n) ? [] : [{
942
971
  uri: n,
943
972
  mediaType: r
944
973
  }];
945
974
  });
946
975
  return t.find((e) => /\.cover\.medium\./i.test(e.uri)) ?? t[0];
947
- }, $ = (e) => e.length > 0 ? e : void 0, Vt = (e) => {
976
+ }, $ = (e) => e.length > 0 ? e : void 0, Ut = (e) => {
948
977
  let t;
949
978
  try {
950
979
  t = new a(e);
@@ -952,42 +981,28 @@ var o = (e, t) => t.has(e.scheme.trim().toLowerCase()), s = (e, t, n) => {
952
981
  let t = e instanceof Error ? e.message : String(e);
953
982
  throw Error(`Project Gutenberg RDF is malformed: ${t}`, { cause: e });
954
983
  }
955
- if (q(t.name).toLowerCase() !== "rdf") return;
956
- let n = X(t, "ebook");
984
+ if (Y(t.name).toLowerCase() !== "rdf") return;
985
+ let n = Z(t, "ebook");
957
986
  if (n === void 0) return;
958
- let r = Lt(n);
987
+ let r = zt(n);
959
988
  if (r === void 0) return;
960
- let i = [...new Set(It(n, "language"))], o = [...new Set(zt(n))], s = [...new Set(It(n, "bookshelf"))], c = Rt(n);
989
+ let i = [...new Set(Rt(n, "language"))], o = [...new Set(Vt(n))], s = [...new Set(Rt(n, "bookshelf"))], c = Bt(n);
961
990
  return {
962
991
  id: r,
963
- title: Z(X(n, "title")),
964
- publisher: Z(X(n, "publisher")),
965
- issued: Z(X(n, "issued")),
966
- originalPublication: Z(X(n, "marc260")),
967
- rights: Z(X(n, "rights")),
968
- description: Z(X(n, "description")),
969
- 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")),
970
999
  languages: $(i),
971
1000
  subjects: $(o),
972
1001
  bookshelves: $(s),
973
1002
  contributors: $(c),
974
- cover: Bt(n)
1003
+ cover: Ht(n)
975
1004
  };
976
- }, Ht = 25, Ut = {
977
- id: "identifiers",
978
- title: "titles",
979
- publisher: "publication.edition.publisher",
980
- issued: "publication.edition.date",
981
- originalPublication: "publication.original",
982
- rights: "rights",
983
- description: "description",
984
- summary: "description",
985
- languages: "languages",
986
- subjects: "subjects",
987
- bookshelves: "subjects",
988
- contributors: "contributors",
989
- cover: "cover"
990
- }, Wt = {
1005
+ }, Wt = 25, Gt = {
991
1006
  art: "artist",
992
1007
  aut: "author",
993
1008
  clr: "colorist",
@@ -996,17 +1011,17 @@ var o = (e, t) => t.has(e.scheme.trim().toLowerCase()), s = (e, t, n) => {
996
1011
  ill: "illustrator",
997
1012
  nrt: "narrator",
998
1013
  trl: "translator"
999
- }, Gt = (e) => {
1014
+ }, Kt = (e) => {
1000
1015
  let t = /* @__PURE__ */ new Map();
1001
1016
  for (let n of e.contributors ?? []) {
1002
- let e = n.name.trim().toLowerCase(), r = Wt[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);
1003
1018
  i === void 0 ? t.set(e, {
1004
1019
  name: n.name,
1005
1020
  roles: [r]
1006
1021
  }) : i.roles.includes(r) || i.roles.push(r);
1007
1022
  }
1008
1023
  return t.size > 0 ? [...t.values()] : void 0;
1009
- }, Kt = (e) => {
1024
+ }, qt = (e) => {
1010
1025
  if (e === void 0) return;
1011
1026
  let t = /^(\d{4})(?:-(\d{2})(?:-(\d{2}))?)?$/.exec(e.trim());
1012
1027
  if (t === null) return;
@@ -1016,53 +1031,53 @@ var o = (e, t) => t.has(e.scheme.trim().toLowerCase()), s = (e, t, n) => {
1016
1031
  ...r === void 0 ? {} : { month: r },
1017
1032
  ...i === void 0 ? {} : { day: i }
1018
1033
  };
1019
- }, qt = (e, t) => e.split("$").slice(1).flatMap((e) => e[0]?.toLowerCase() === t.toLowerCase() ? [e.slice(1).trim()] : []).filter((e) => e.length > 0), Jt = (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) => {
1020
1035
  if (e === void 0) return;
1021
- let t = qt(e, "b"), n = (t.length === 1 ? t[0] : void 0)?.replace(/[\s,;:/]+$/u, "").trim(), r = qt(e, "c"), i = [...new Set(r.flatMap((e) => [...e.matchAll(/\d{4}/g)].flatMap((e) => e[0] === void 0 ? [] : [Number(e[0])])))], a = M({
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({
1022
1037
  date: i.length === 1 ? { year: i[0] } : void 0,
1023
1038
  publisher: n !== void 0 && n.length > 0 && !/^\[?s\.n\.?\]?$/i.test(n) ? n : void 0
1024
1039
  });
1025
1040
  return a.date !== void 0 || a.publisher !== void 0 ? a : void 0;
1026
- }, Yt = (e, t) => {
1041
+ }, Xt = (e, t) => {
1027
1042
  try {
1028
1043
  let n = new URL(e, t);
1029
1044
  return n.protocol === "http:" || n.protocol === "https:" ? n.toString() : void 0;
1030
1045
  } catch {
1031
1046
  return;
1032
1047
  }
1033
- }, Xt = (e) => e.length > 0 ? e : void 0, Zt = (e, t) => {
1034
- let n = [t.matchedIdentifier, {
1035
- value: e.id,
1036
- scheme: ht
1037
- }].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 : Yt(e.cover.uri, t.baseUrl), a = i === void 0 ? void 0 : {
1038
- uri: i,
1039
- 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,
1040
1055
  confidence: "derived"
1041
- }, o = M({
1042
- date: Kt(e.issued),
1043
- publisher: e.publisher
1044
- }), s = M({
1045
- original: Jt(e.originalPublication),
1046
- 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
1047
1062
  });
1048
- return M({
1049
- titles: e.title === void 0 ? void 0 : [{ value: e.title }],
1050
- publication: s.original !== void 0 || s.edition !== void 0 ? s : void 0,
1051
- description: e.summary ?? e.description,
1052
- rights: e.rights,
1053
- languages: Xt([...new Set(e.languages ?? [])]),
1054
- subjects: Xt(r),
1055
- contributors: Gt(e),
1056
- identifiers: n,
1057
- 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
1058
1073
  });
1059
- }, Qt = "projectGutenberg", $t = "https://www.gutenberg.org", en = (e = {}) => {
1060
- let t = e.baseUrl ?? $t;
1074
+ }, $t = "projectGutenberg", en = "https://www.gutenberg.org", tn = (e = {}) => {
1075
+ let t = e.baseUrl ?? en;
1061
1076
  return {
1062
- id: Qt,
1077
+ id: $t,
1063
1078
  name: "Project Gutenberg",
1064
1079
  search: async (n, r) => {
1065
- let i = G(n);
1080
+ let i = q(n);
1066
1081
  if (i === void 0) return [];
1067
1082
  let a = new URL(`/cache/epub/${i.id}/pg${i.id}.rdf`, t), o = await (e.fetch ?? globalThis.fetch)(a.toString(), {
1068
1083
  signal: r.signal,
@@ -1072,23 +1087,23 @@ var o = (e, t) => t.has(e.scheme.trim().toLowerCase()), s = (e, t, n) => {
1072
1087
  }
1073
1088
  });
1074
1089
  if (o.status === 404) return [];
1075
- if (!o.ok) throw new A(o.status, `Project Gutenberg metadata lookup failed with status ${o.status}`);
1076
- let s = Vt(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());
1077
1092
  if (s === void 0 || s.id !== i.id) throw Error(`Project Gutenberg RDF did not contain the requested eBook ${i.id}`);
1078
1093
  let c = new URL(`/ebooks/${i.id}`, t).toString();
1079
1094
  return [{
1080
1095
  id: s.id,
1081
1096
  url: c,
1082
1097
  raw: s,
1083
- metadata: Zt(s, {
1098
+ metadata: Qt(s, {
1084
1099
  baseUrl: t,
1085
1100
  matchedIdentifier: i.identifier
1086
1101
  })
1087
1102
  }];
1088
1103
  }
1089
1104
  };
1090
- }, tn = (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);
1091
1106
  //#endregion
1092
- export { Ie as GOOGLE_BOOKS_IDENTIFIER_SCHEME, Ge as GOOGLE_BOOKS_MAX_SUBJECTS, ft as GOOGLE_BOOKS_PROVIDER_ID, de as METADATA_MATCH_WEIGHTS, A as MetadataProviderResponseError, Dt as OPEN_LIBRARY_IDENTIFIER_SCHEME, Tt as OPEN_LIBRARY_MAX_SUBJECTS, At as OPEN_LIBRARY_PROVIDER_ID, ht as PROJECT_GUTENBERG_IDENTIFIER_SCHEME, Ht as PROJECT_GUTENBERG_MAX_SUBJECTS, Qt as PROJECT_GUTENBERG_PROVIDER_ID, mt as createGoogleBooksProvider, Ft as createOpenLibraryProvider, en as createProjectGutenbergProvider, Oe as fetchMetadata, Qe as googleBooksCoverUrl, z as googleBooksLookupFromInput, qe as googleBooksVolumeInfoMetadataHomes, Ke as googleBooksVolumeMetadataHomes, tt as googleBooksVolumeUrl, tn as hasSearchTerms, wt as marcLanguageToBcp47, f as metadataAuthors, ke as metadataInputFromResolvedArchive, v as normalizeForComparison, Et as openLibraryMetadataHomes, V as parseGoogleBooksVolume, We as parseGoogleBooksVolumesResponse, xt as parseOpenLibrarySearchResponse, Vt as parseProjectGutenbergRdf, ue as personNameSimilarity, G as projectGutenbergLookupFromInput, Ut as projectGutenbergMetadataHomes, et as resolveGoogleBooksVolume, kt as resolveOpenLibraryDoc, Zt as resolveProjectGutenbergRecord, j as responseErrorStatus, Fe as retryWithBackoff, k 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 };
1093
1108
 
1094
1109
  //# sourceMappingURL=index.js.map