@prose-reader/metadata-fetcher 1.346.0 → 1.347.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
@@ -136,18 +136,18 @@ var o = (e, t) => t.has(e.scheme.trim().toLowerCase()), s = (e, t, n) => {
136
136
  }, pe = (e, t) => {
137
137
  let n = E(e.value)?.toLowerCase();
138
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) => {
139
+ }, D = (e) => e.scheme.trim().toLowerCase() === "unknown" ? void 0 : E(e.scheme)?.toLowerCase(), O = (e) => `${e.scheme}:${e.value}`, me = (e) => {
140
140
  let t = e.scheme.trim().toLowerCase();
141
141
  return t === "isbn" || t === "gtin";
142
- }, ge = (e, t) => {
142
+ }, he = (e, t) => {
143
143
  if (!pe(e, t)) return !1;
144
144
  let n = D(e), r = D(t);
145
145
  return n === void 0 || r === void 0 || n === r;
146
- }, _e = (e, t) => {
146
+ }, ge = (e, t) => {
147
147
  if (!pe(e, t)) return !1;
148
148
  let n = D(e), r = D(t);
149
149
  return n !== void 0 && n === r;
150
- }, O = (e) => e.trim().toLowerCase().split("-")[0] ?? "", ve = (e, t) => {
150
+ }, _e = (e) => e.trim().toLowerCase().split("-")[0] ?? "", ve = (e, t) => {
151
151
  let n = Math.abs(e - t);
152
152
  return n === 0 ? 1 : n === 1 ? .6 : n <= 3 ? .3 : 0;
153
153
  }, ye = (e, t) => {
@@ -181,7 +181,7 @@ var o = (e, t) => t.has(e.scheme.trim().toLowerCase()), s = (e, t, n) => {
181
181
  (n === void 0 || t.score > n.score) && (n = t);
182
182
  }
183
183
  return n;
184
- }, k = (t, n) => {
184
+ }, Ce = (t, n) => {
185
185
  let r = [], i = (e, t) => {
186
186
  t !== void 0 && r.push({
187
187
  field: e,
@@ -209,11 +209,11 @@ var o = (e, t) => t.has(e.scheme.trim().toLowerCase()), s = (e, t, n) => {
209
209
  query: p,
210
210
  candidate: m
211
211
  });
212
- let g = (t.identifiers ?? []).filter((e) => !he(e)), _ = (n.identifiers ?? []).filter((e) => !he(e)), v = g.some((e) => _.some((t) => _e(e, t)));
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
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(", ")
214
+ score: +!!g.some((e) => _.some((t) => he(e, t))),
215
+ query: g.map(O).join(", "),
216
+ candidate: _.map(O).join(", ")
217
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
218
  let y = f(n), x = (t.authors ?? []).flatMap((e) => {
219
219
  let t = E(e);
@@ -226,9 +226,9 @@ var o = (e, t) => t.has(e.scheme.trim().toLowerCase()), s = (e, t, n) => {
226
226
  }), i("publishedYear", Se(t.publishedYear, [n.publication?.original?.date?.year, n.publication?.edition?.date?.year]));
227
227
  let S = t.languages ?? [], C = n.languages ?? [];
228
228
  if (S.length > 0 && C.length > 0) {
229
- let e = new Set(C.map(O));
229
+ let e = new Set(C.map(_e));
230
230
  i("languages", {
231
- score: +!!S.some((t) => e.has(O(t))),
231
+ score: +!!S.some((t) => e.has(_e(t))),
232
232
  query: S.join(", "),
233
233
  candidate: C.join(", ")
234
234
  });
@@ -255,19 +255,19 @@ var o = (e, t) => t.has(e.scheme.trim().toLowerCase()), s = (e, t, n) => {
255
255
  score: r.reduce((e, t) => e + t.score * t.weight, 0) / T,
256
256
  signals: r
257
257
  };
258
- }, A = class extends Error {
258
+ }, k = class extends Error {
259
259
  status;
260
260
  constructor(e, t) {
261
261
  super(t ?? `Provider responded with status ${e}`), this.name = "MetadataProviderResponseError", this.status = e;
262
262
  }
263
- }, j = (e) => {
263
+ }, A = (e) => {
264
264
  if (typeof e != "object" || !e || !("status" in e)) return;
265
265
  let { status: t } = e;
266
266
  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) => {
267
+ }, we = i.namespace("@prose-reader/metadata-fetcher", void 0, { color: "#b06642" }), j = (e) => {
268
268
  let t = Object.entries(e).filter(([, e]) => e !== void 0);
269
269
  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({
270
+ }, Te = 5, Ee = .5, De = 5, Oe = ({ candidate: e, providerId: t, score: n, signals: r, accepted: i, includeRaw: a }) => j({
271
271
  providerId: t,
272
272
  score: n,
273
273
  signals: r,
@@ -276,8 +276,8 @@ var o = (e, t) => t.has(e.scheme.trim().toLowerCase()), s = (e, t, n) => {
276
276
  id: e.id,
277
277
  url: e.url,
278
278
  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) => {
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) => {
281
281
  try {
282
282
  return {
283
283
  provider: r,
@@ -289,12 +289,12 @@ var o = (e, t) => t.has(e.scheme.trim().toLowerCase()), s = (e, t, n) => {
289
289
  };
290
290
  } catch (e) {
291
291
  if (t.signal?.aborted === !0) throw e;
292
- return Ce.error(`fetchMetadata: provider "${r.id}" failed`, e), {
292
+ return we.error(`fetchMetadata: provider "${r.id}" failed`, e), {
293
293
  provider: r,
294
294
  candidates: void 0,
295
- failure: M({
295
+ failure: j({
296
296
  id: r.id,
297
- status: j(e)
297
+ status: A(e)
298
298
  })
299
299
  };
300
300
  }
@@ -302,8 +302,8 @@ var o = (e, t) => t.has(e.scheme.trim().toLowerCase()), s = (e, t, n) => {
302
302
  for (let { provider: t, candidates: o } of a) {
303
303
  if (o === void 0) continue;
304
304
  let a = o.map((n) => {
305
- let { score: a, signals: o } = k(e, n.metadata);
306
- return De({
305
+ let { score: a, signals: o } = Ce(e, n.metadata);
306
+ return Oe({
307
307
  candidate: n,
308
308
  providerId: t.id,
309
309
  score: a,
@@ -312,7 +312,7 @@ var o = (e, t) => t.has(e.scheme.trim().toLowerCase()), s = (e, t, n) => {
312
312
  includeRaw: i
313
313
  });
314
314
  }).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] = {
315
+ s[t.id] !== void 0 && we.warn(`fetchMetadata: several providers share the id "${t.id}"`), s[t.id] = {
316
316
  provider: {
317
317
  id: t.id,
318
318
  name: t.name
@@ -321,17 +321,17 @@ var o = (e, t) => t.has(e.scheme.trim().toLowerCase()), s = (e, t, n) => {
321
321
  }, c.push(...a);
322
322
  }
323
323
  return {
324
- version: Ee,
324
+ version: De,
325
325
  matches: [...c].sort((e, t) => t.score - e.score),
326
326
  sources: s,
327
327
  failedProviders: o
328
328
  };
329
- }, ke = (t) => {
329
+ }, Ae = (t) => {
330
330
  let { metadata: n } = t, r = f(n), i = n.identifiers?.map(({ value: e, scheme: t }) => ({
331
331
  value: e,
332
332
  scheme: t
333
333
  }));
334
- return M({
334
+ return j({
335
335
  title: e(n),
336
336
  authors: r.length > 0 ? r : void 0,
337
337
  identifiers: i !== void 0 && i.length > 0 ? i : void 0,
@@ -341,69 +341,69 @@ var o = (e, t) => t.has(e.scheme.trim().toLowerCase()), s = (e, t, n) => {
341
341
  languages: n.languages,
342
342
  numberOfPages: n.numberOfPages
343
343
  });
344
- }, N = (e) => typeof e == "object" && !!e && !Array.isArray(e), P = (e, t) => {
344
+ }, M = (e) => typeof e == "object" && !!e && !Array.isArray(e), N = (e, t) => {
345
345
  let n = e[t];
346
346
  if (typeof n != "string") return;
347
347
  let r = n.trim();
348
348
  return r.length > 0 ? r : void 0;
349
- }, F = (e, t) => {
349
+ }, P = (e, t) => {
350
350
  let n = e[t];
351
351
  return typeof n == "number" && Number.isFinite(n) ? n : void 0;
352
- }, I = (e, t) => {
352
+ }, F = (e, t) => {
353
353
  let n = e[t];
354
354
  if (!Array.isArray(n)) return;
355
355
  let r = n.filter((e) => typeof e == "string").map((e) => e.trim()).filter((e) => e.length > 0);
356
356
  return r.length > 0 ? r : void 0;
357
- }, L = (e, t) => {
357
+ }, I = (e, t) => {
358
358
  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) => {
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) => {
363
363
  let i = () => {
364
- clearTimeout(a), r(t === void 0 ? void 0 : Ae(t));
364
+ clearTimeout(a), r(t === void 0 ? void 0 : je(t));
365
365
  }, a = setTimeout(() => {
366
366
  t?.removeEventListener("abort", i), n();
367
367
  }, e);
368
368
  t?.addEventListener("abort", i, { once: !0 });
369
- })), Ne = (e) => {
369
+ })), Pe = (e) => {
370
370
  if (!Number.isInteger(e.attempts) || e.attempts < 1) throw RangeError("attempts must be a positive integer");
371
371
  if (!Number.isFinite(e.initialDelayMs) || e.initialDelayMs < 0) throw RangeError("initialDelayMs must be a non-negative finite number");
372
372
  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) => {
373
+ }, Fe = (e, t) => {
374
374
  let n = t.initialDelayMs * 2 ** (e - 1), r = t.jitter === !1 ? n : n * (1 + Math.random());
375
375
  return Math.min(r, t.maxDelayMs ?? 2 ** 53 - 1);
376
- }, Fe = async (e, t) => {
377
- Ne(t);
376
+ }, L = async (e, t) => {
377
+ Pe(t);
378
378
  for (let n = 1; n <= t.attempts; n += 1) {
379
- je(t.signal);
379
+ Me(t.signal);
380
380
  try {
381
381
  return await e(n);
382
382
  } catch (e) {
383
383
  if (n === t.attempts || t.signal?.aborted === !0 || !t.shouldRetry(e, n)) throw e;
384
- await Me(Pe(n, t), t.signal);
384
+ await Ne(Fe(n, t), t.signal);
385
385
  }
386
386
  }
387
387
  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) => {
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) => {
389
389
  let t = e.trim();
390
390
  return /^[a-z0-9_-]+$/i.test(t) ? t : void 0;
391
- }, ze = (e) => {
391
+ }, Re = (e) => {
392
392
  try {
393
393
  let t = new URL(e.trim());
394
394
  if (t.protocol !== "http:" && t.protocol !== "https:") return;
395
395
  let n = t.hostname.toLowerCase();
396
- if (Re.test(n)) return R(t.searchParams.get("id") ?? "");
397
- if (Le.has(n)) {
396
+ if (Le.test(n)) return z(t.searchParams.get("id") ?? "");
397
+ if (Ie.has(n)) {
398
398
  let e = /^\/books\/v1\/volumes\/([^/]+)\/?$/i.exec(t.pathname)?.[1];
399
- return e === void 0 ? void 0 : R(decodeURIComponent(e));
399
+ return e === void 0 ? void 0 : z(decodeURIComponent(e));
400
400
  }
401
401
  } catch {
402
402
  return;
403
403
  }
404
- }, z = (e) => {
404
+ }, ze = (e) => {
405
405
  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;
406
+ let e = t.scheme.trim().toLowerCase(), n = e === "googlebooks" ? z(t.value) : e === "unknown" || e === "url" || e === "uri" ? Re(t.value) : void 0;
407
407
  if (n !== void 0) return {
408
408
  id: n,
409
409
  identifier: {
@@ -414,12 +414,12 @@ var o = (e, t) => t.has(e.scheme.trim().toLowerCase()), s = (e, t, n) => {
414
414
  }
415
415
  }, B = (e, t) => {
416
416
  let n = e[t];
417
- return N(n) ? n : void 0;
417
+ return M(n) ? n : void 0;
418
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"),
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"),
423
423
  identifier: t
424
424
  })];
425
425
  });
@@ -427,72 +427,54 @@ var o = (e, t) => t.has(e.scheme.trim().toLowerCase()), s = (e, t, n) => {
427
427
  }, Ve = (e) => {
428
428
  let t = B(e, "imageLinks");
429
429
  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")
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")
437
437
  });
438
438
  return Object.keys(n).length > 0 ? n : void 0;
439
439
  }, He = (e) => {
440
440
  let t = B(e, "seriesInfo");
441
441
  if (t === void 0) return;
442
- let n = P(t, "bookDisplayNumber");
442
+ let n = N(t, "bookDisplayNumber");
443
443
  return n === void 0 ? void 0 : { bookDisplayNumber: n };
444
444
  }, Ue = (e) => {
445
445
  let t = B(e, "volumeInfo");
446
446
  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"),
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
454
  industryIdentifiers: Be(t),
455
- pageCount: F(t, "pageCount"),
456
- categories: I(t, "categories"),
457
- language: P(t, "language"),
455
+ pageCount: P(t, "pageCount"),
456
+ categories: F(t, "categories"),
457
+ language: N(t, "language"),
458
458
  imageLinks: Ve(t),
459
- infoLink: P(t, "infoLink"),
460
- canonicalVolumeLink: P(t, "canonicalVolumeLink"),
459
+ infoLink: N(t, "infoLink"),
460
+ canonicalVolumeLink: N(t, "canonicalVolumeLink"),
461
461
  seriesInfo: He(t)
462
462
  });
463
463
  return Object.keys(n).length > 0 ? n : void 0;
464
464
  }, V = (e) => {
465
- if (!N(e)) return;
466
- let t = M({
467
- id: P(e, "id"),
465
+ if (!M(e)) return;
466
+ let t = j({
467
+ id: N(e, "id"),
468
468
  volumeInfo: Ue(e)
469
469
  });
470
470
  return Object.keys(t).length > 0 ? t : void 0;
471
- }, We = (e) => N(e) ? L(e, "items").flatMap((e) => {
471
+ }, We = (e) => M(e) ? I(e, "items").flatMap((e) => {
472
472
  let t = V(e);
473
473
  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({
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({
493
475
  value: e.identifier,
494
- scheme: Je(e.type)
495
- })), Ze = (e) => {
476
+ scheme: Ke(e.type)
477
+ })), Ye = (e) => {
496
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));
497
479
  return t === void 0 || n === void 0 || r ? t : `${t} Vol ${n}`;
498
480
  }, U = (e) => {
@@ -502,7 +484,7 @@ var o = (e, t) => t.has(e.scheme.trim().toLowerCase()), s = (e, t, n) => {
502
484
  } catch {
503
485
  return;
504
486
  }
505
- }, Qe = (e) => {
487
+ }, Xe = (e) => {
506
488
  if (e === void 0) return;
507
489
  let t = [
508
490
  e.extraLarge,
@@ -516,11 +498,11 @@ var o = (e, t) => t.has(e.scheme.trim().toLowerCase()), s = (e, t, n) => {
516
498
  let t = U(e);
517
499
  if (t !== void 0) return t;
518
500
  }
519
- }, $e = (e) => H(e.map((e) => ({
501
+ }, Ze = (e) => H(e.map((e) => ({
520
502
  name: e,
521
503
  roles: ["author"]
522
- }))), et = (e, t = {}) => {
523
- let n = e.volumeInfo ?? {}, i = Xe(n.industryIdentifiers ?? []), a = Ye([
504
+ }))), Qe = (e, t = {}) => {
505
+ let n = e.volumeInfo ?? {}, i = Je(n.industryIdentifiers ?? []), a = qe([
524
506
  ...t.matchedIdentifier === void 0 ? [] : [t.matchedIdentifier],
525
507
  ...t.matchedIsbn === void 0 ? [] : [{
526
508
  value: t.matchedIsbn,
@@ -528,33 +510,33 @@ var o = (e, t) => t.has(e.scheme.trim().toLowerCase()), s = (e, t, n) => {
528
510
  }],
529
511
  ...e.id === void 0 ? [] : [{
530
512
  value: e.id,
531
- scheme: Ie
513
+ scheme: R
532
514
  }],
533
515
  ...i
534
- ]), o = M({
516
+ ]), o = j({
535
517
  date: r(n.publishedDate),
536
518
  publisher: n.publisher
537
- }), s = Qe(n.imageLinks), c = s === void 0 ? void 0 : {
519
+ }), s = Xe(n.imageLinks), c = s === void 0 ? void 0 : {
538
520
  uri: s,
539
521
  confidence: "derived"
540
- }, l = [...new Set(n.categories ?? [])].slice(0, 25), u = Ze(n);
541
- return M({
522
+ }, l = [...new Set(n.categories ?? [])].slice(0, 25), u = Ye(n);
523
+ return j({
542
524
  titles: u === void 0 ? void 0 : [{ value: u }],
543
525
  description: n.description,
544
526
  publication: o.date !== void 0 || o.publisher !== void 0 ? { edition: o } : void 0,
545
527
  languages: n.language === void 0 ? void 0 : [n.language],
546
528
  subjects: H(l),
547
- contributors: $e(n.authors ?? []),
529
+ contributors: Ze(n.authors ?? []),
548
530
  numberOfPages: n.pageCount,
549
531
  identifiers: a,
550
532
  cover: c
551
533
  });
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([
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([
553
535
  500,
554
536
  502,
555
537
  503,
556
538
  504
557
- ]), st = (e) => `"${e.replace(/["\\]+/g, " ").replace(/\s+/g, " ").trim()}"`, ct = (e) => {
539
+ ]), at = (e) => `"${e.replace(/["\\]+/g, " ").replace(/\s+/g, " ").trim()}"`, ot = (e) => {
558
540
  let t = e.title?.trim();
559
541
  if (t === void 0 || t.length === 0) return;
560
542
  let n = e.authors?.find((e) => e.trim().length > 0)?.trim();
@@ -562,104 +544,104 @@ var o = (e, t) => t.has(e.scheme.trim().toLowerCase()), s = (e, t, n) => {
562
544
  title: t,
563
545
  ...n === void 0 ? {} : { author: n }
564
546
  };
565
- }, lt = (e) => {
547
+ }, W = (e) => {
566
548
  let t = V(e);
567
549
  return t === void 0 ? void 0 : {
568
550
  volume: t,
569
551
  raw: e
570
552
  };
571
- }, ut = (e) => N(e) ? L(e, "items").flatMap((e) => {
572
- let t = lt(e);
553
+ }, st = (e) => M(e) ? I(e, "items").flatMap((e) => {
554
+ let t = W(e);
573
555
  return t === void 0 ? [] : [t];
574
- }) : [], W = (e, t = {}) => e.map(({ volume: e, raw: n }) => ({
575
- metadata: et(e, t),
556
+ }) : [], G = (e, t = {}) => e.map(({ volume: e, raw: n }) => ({
557
+ metadata: Qe(e, t),
576
558
  id: e.id,
577
- url: tt(e),
559
+ url: $e(e),
578
560
  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 () => {
561
+ })), ct = (e) => {
562
+ let t = `${e.baseUrl.replace(/\/+$/, "")}/volumes`, n = async (t, n, r = !1) => (t.searchParams.set("key", e.apiKey), L(async () => {
581
563
  let i = await e.fetch(t.toString(), {
582
564
  signal: n.signal,
583
565
  headers: { Accept: "application/json" }
584
566
  });
585
567
  if (!(r && i.status === 404)) {
586
- if (!i.ok) throw new A(i.status, `Google Books lookup failed with status ${i.status}`);
568
+ if (!i.ok) throw new k(i.status, `Google Books lookup failed with status ${i.status}`);
587
569
  return i;
588
570
  }
589
571
  }, {
590
- attempts: rt,
591
- initialDelayMs: it,
592
- maxDelayMs: at,
572
+ attempts: tt,
573
+ initialDelayMs: nt,
574
+ maxDelayMs: rt,
593
575
  signal: n.signal,
594
576
  shouldRetry: (e) => {
595
- let t = j(e);
596
- return t === void 0 || ot.has(t);
577
+ let t = A(e);
578
+ return t === void 0 || it.has(t);
597
579
  }
598
580
  })), r = async (e, r) => {
599
581
  let i = await n(new URL(`${t}/${encodeURIComponent(e)}`), r, !0);
600
582
  if (i === void 0) return;
601
- let a = lt(await i.json());
583
+ let a = W(await i.json());
602
584
  if (a?.volume.id !== e) throw Error(`Google Books response did not contain the requested volume ${e}`);
603
585
  return a;
604
586
  }, i = async (e, r) => {
605
587
  if (r.limit <= 0) return [];
606
588
  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");
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");
608
590
  let a = await n(i, r);
609
- return a === void 0 ? [] : ut(await a.json());
591
+ return a === void 0 ? [] : st(await a.json());
610
592
  };
611
593
  return async (e, t) => {
612
- let n = z(e);
594
+ let n = ze(e);
613
595
  if (n !== void 0) {
614
596
  let e = await r(n.id, t);
615
- if (e !== void 0) return W([e], { matchedIdentifier: n.identifier });
597
+ if (e !== void 0) return G([e], { matchedIdentifier: n.identifier });
616
598
  }
617
599
  let a = d(e.identifiers);
618
600
  if (a !== void 0) {
619
601
  let e = await i(`isbn:${a}`, t);
620
- if (e.length > 0) return W(e, { matchedIsbn: a });
602
+ if (e.length > 0) return G(e, { matchedIsbn: a });
621
603
  }
622
- let o = ct(e);
604
+ let o = ot(e);
623
605
  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));
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));
626
608
  };
627
- }, ft = "googleBooks", pt = "https://www.googleapis.com/books/v1", mt = (e) => {
609
+ }, lt = "googleBooks", ut = "https://www.googleapis.com/books/v1", dt = (e) => {
628
610
  let t = e.apiKey.trim();
629
611
  if (t.length === 0) throw Error("createGoogleBooksProvider requires a non-empty apiKey");
630
612
  return {
631
- id: ft,
613
+ id: lt,
632
614
  name: "Google Books",
633
- search: dt({
615
+ search: ct({
634
616
  apiKey: t,
635
- baseUrl: e.baseUrl ?? pt,
617
+ baseUrl: e.baseUrl ?? ut,
636
618
  fetch: e.fetch ?? globalThis.fetch
637
619
  })
638
620
  };
639
- }, ht = "ProjectGutenberg", gt = /* @__PURE__ */ new Set(["gutenberg.org", "www.gutenberg.org"]), _t = [
621
+ }, ft = "ProjectGutenberg", pt = /* @__PURE__ */ new Set(["gutenberg.org", "www.gutenberg.org"]), mt = [
640
622
  /^\/ebooks\/(\d+)(?:[./]|$)/i,
641
623
  /^\/files\/(\d+)(?:\/|$)/i,
642
624
  /^\/cache\/epub\/(\d+)(?:\/|$)/i,
643
625
  /^\/(\d+)(?:\/|$)/
644
- ], vt = (e) => {
626
+ ], ht = (e) => {
645
627
  let t = e.trim();
646
628
  if (!/^\d+$/.test(t)) return;
647
629
  let n = t.replace(/^0+(?=\d)/, "");
648
630
  return n === "0" ? void 0 : n;
649
- }, yt = (e) => {
631
+ }, gt = (e) => {
650
632
  try {
651
633
  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) {
634
+ if (t.protocol !== "http:" && t.protocol !== "https:" || !pt.has(t.hostname.toLowerCase())) return;
635
+ for (let e of mt) {
654
636
  let n = e.exec(t.pathname)?.[1];
655
- if (n !== void 0) return vt(n);
637
+ if (n !== void 0) return ht(n);
656
638
  }
657
639
  } catch {
658
640
  return;
659
641
  }
660
- }, G = (e) => {
642
+ }, K = (e) => {
661
643
  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;
644
+ let e = t.scheme.trim().toLowerCase(), n = e === "projectgutenberg" ? ht(t.value) : e === "unknown" || e === "url" || e === "uri" ? gt(t.value) : void 0;
663
645
  if (n !== void 0) return {
664
646
  id: n,
665
647
  identifier: {
@@ -668,18 +650,18 @@ var o = (e, t) => t.has(e.scheme.trim().toLowerCase()), s = (e, t, n) => {
668
650
  }
669
651
  };
670
652
  }
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 = {
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 = {
683
665
  afr: "af",
684
666
  alb: "sq",
685
667
  amh: "am",
@@ -784,27 +766,16 @@ var o = (e, t) => t.has(e.scheme.trim().toLowerCase()), s = (e, t, n) => {
784
766
  wel: "cy",
785
767
  yid: "yi",
786
768
  zho: "zh"
787
- }, Ct = /* @__PURE__ */ new Set([
769
+ }, bt = /* @__PURE__ */ new Set([
788
770
  "mul",
789
771
  "und",
790
772
  "zxx",
791
773
  "sgn"
792
- ]), wt = (e) => {
774
+ ]), xt = (e) => {
793
775
  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 = [
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 = [
808
779
  ...t.isbn === void 0 ? [] : [{
809
780
  value: t.isbn,
810
781
  scheme: "ISBN"
@@ -812,14 +783,14 @@ var o = (e, t) => t.has(e.scheme.trim().toLowerCase()), s = (e, t, n) => {
812
783
  ...t.matchedProjectGutenbergIdentifier === void 0 ? [] : [t.matchedProjectGutenbergIdentifier],
813
784
  ...(e.id_project_gutenberg ?? []).map((e) => ({
814
785
  value: e,
815
- scheme: Ot
786
+ scheme: wt
816
787
  })),
817
788
  ...e.key === void 0 ? [] : [{
818
789
  value: e.key,
819
- scheme: Dt
790
+ scheme: Ct
820
791
  }]
821
792
  ];
822
- return M({
793
+ return j({
823
794
  titles: n === void 0 ? void 0 : [{ value: n }],
824
795
  cover: e.cover_i === void 0 ? void 0 : {
825
796
  uri: `${t.coversBaseUrl}/b/id/${e.cover_i}-L.jpg`,
@@ -828,15 +799,15 @@ var o = (e, t) => t.has(e.scheme.trim().toLowerCase()), s = (e, t, n) => {
828
799
  },
829
800
  publication: e.first_publish_year === void 0 ? void 0 : { original: { date: { year: e.first_publish_year } } },
830
801
  languages: r,
831
- subjects: K((e.subject ?? []).slice(0, 25)),
832
- contributors: K((e.author_name ?? []).map((e) => ({
802
+ subjects: q((e.subject ?? []).slice(0, 25)),
803
+ contributors: q((e.author_name ?? []).map((e) => ({
833
804
  name: e,
834
805
  roles: ["author"]
835
806
  }))),
836
807
  numberOfPages: e.number_of_pages_median,
837
- identifiers: K(i)
808
+ identifiers: q(i)
838
809
  });
839
- }, At = "openLibrary", jt = "https://openlibrary.org", Mt = "https://covers.openlibrary.org", Nt = [
810
+ }, Et = "openLibrary", Dt = "https://openlibrary.org", Ot = "https://covers.openlibrary.org", kt = [
840
811
  "key",
841
812
  "title",
842
813
  "subtitle",
@@ -847,7 +818,7 @@ var o = (e, t) => t.has(e.scheme.trim().toLowerCase()), s = (e, t, n) => {
847
818
  "number_of_pages_median",
848
819
  "cover_i",
849
820
  "id_project_gutenberg"
850
- ].join(","), Pt = (e) => {
821
+ ].join(","), At = (e) => {
851
822
  let t = e.title?.trim();
852
823
  if (t === void 0 || t.length === 0) return;
853
824
  let n = e.authors?.find((e) => e.trim().length > 0)?.trim();
@@ -855,11 +826,11 @@ var o = (e, t) => t.has(e.scheme.trim().toLowerCase()), s = (e, t, n) => {
855
826
  title: t,
856
827
  ...n === void 0 ? {} : { author: n }
857
828
  };
858
- }, Ft = (e = {}) => {
859
- let t = e.baseUrl ?? jt, n = e.coversBaseUrl ?? Mt, r = async (n, r) => {
829
+ }, jt = (e = {}) => {
830
+ let t = e.baseUrl ?? Dt, n = e.coversBaseUrl ?? Ot, r = async (n, r) => {
860
831
  let i = new URL("/search.json", t);
861
832
  for (let [e, t] of Object.entries(n)) i.searchParams.set(e, t);
862
- i.searchParams.set("fields", Nt), i.searchParams.set("limit", String(r.limit));
833
+ i.searchParams.set("fields", kt), i.searchParams.set("limit", String(r.limit));
863
834
  let a = await (e.fetch ?? globalThis.fetch)(i.toString(), {
864
835
  signal: r.signal,
865
836
  headers: {
@@ -867,10 +838,10 @@ var o = (e, t) => t.has(e.scheme.trim().toLowerCase()), s = (e, t, n) => {
867
838
  ...e.userAgent === void 0 ? {} : { "User-Agent": e.userAgent }
868
839
  }
869
840
  });
870
- if (!a.ok) throw new A(a.status, `Open Library search failed with status ${a.status}`);
871
- return xt(await a.json());
841
+ if (!a.ok) throw new k(a.status, `Open Library search failed with status ${a.status}`);
842
+ return vt(await a.json());
872
843
  }, i = (e, r = {}) => e.map((e) => ({
873
- metadata: kt(e, {
844
+ metadata: Tt(e, {
874
845
  coversBaseUrl: n,
875
846
  isbn: r.isbn,
876
847
  matchedProjectGutenbergIdentifier: r.confirmedProjectGutenberg?.identifier
@@ -880,10 +851,10 @@ var o = (e, t) => t.has(e.scheme.trim().toLowerCase()), s = (e, t, n) => {
880
851
  raw: e
881
852
  }));
882
853
  return {
883
- id: At,
854
+ id: Et,
884
855
  name: "Open Library",
885
856
  search: async (e, t) => {
886
- let n = d(e.identifiers), a = G(e);
857
+ let n = d(e.identifiers), a = K(e);
887
858
  if (n !== void 0) {
888
859
  let e = await r({ isbn: n }, t);
889
860
  if (e.length > 0) return i(e, { isbn: n });
@@ -892,7 +863,7 @@ var o = (e, t) => t.has(e.scheme.trim().toLowerCase()), s = (e, t, n) => {
892
863
  let e = await r({ q: `id_project_gutenberg:${a.id}` }, t);
893
864
  if (e.length > 0) return i(e, { confirmedProjectGutenberg: a });
894
865
  }
895
- let o = Pt(e);
866
+ let o = At(e);
896
867
  if (o === void 0) return [];
897
868
  let s = await r(o, t);
898
869
  if (s.length > 0) return i(s);
@@ -900,40 +871,40 @@ var o = (e, t) => t.has(e.scheme.trim().toLowerCase()), s = (e, t, n) => {
900
871
  return i(await r({ q: c }, t));
901
872
  }
902
873
  };
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) => {
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) => {
904
875
  let t = e?.val.trim();
905
876
  return t !== void 0 && t.length > 0 ? t : void 0;
906
877
  }, Q = (e, t) => {
907
878
  for (let [n, r] of Object.entries(e.attr)) {
908
- if (q(n).toLowerCase() !== t.toLowerCase()) continue;
879
+ if (J(n).toLowerCase() !== t.toLowerCase()) continue;
909
880
  let e = r.trim();
910
881
  if (e.length > 0) return e;
911
882
  }
912
- }, It = (e, t) => Y(e, t).flatMap((e) => {
883
+ }, Nt = (e, t) => Y(e, t).flatMap((e) => {
913
884
  let t = Z(X(X(e, "Description") ?? e, "value"));
914
885
  return t === void 0 ? [] : [t];
915
- }), Lt = (e) => {
886
+ }), Pt = (e) => {
916
887
  let t = Q(e, "about"), n = t === void 0 ? void 0 : /(?:^|\/)ebooks\/(\d+)$/.exec(t)?.[1];
917
888
  if (n === void 0) return;
918
889
  let r = n.replace(/^0+(?=\d)/, "");
919
890
  return r === "0" ? void 0 : r;
920
- }, Rt = (e) => {
891
+ }, Ft = (e) => {
921
892
  let t = [];
922
893
  for (let n of e.children) {
923
- if (!J(n)) continue;
894
+ if (!Mt(n)) continue;
924
895
  let e = n.name.toLowerCase() === "dcterms:creator", r = n.name.toLowerCase().startsWith("marcrel:");
925
896
  if (!e && !r) continue;
926
897
  let i = Z(X(X(n, "agent") ?? n, "name"));
927
898
  i !== void 0 && t.push({
928
899
  name: i,
929
- role: e ? "aut" : q(n.name).toLowerCase()
900
+ role: e ? "aut" : J(n.name).toLowerCase()
930
901
  });
931
902
  }
932
903
  return t;
933
- }, zt = (e) => Y(e, "subject").flatMap((e) => {
904
+ }, It = (e) => Y(e, "subject").flatMap((e) => {
934
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"));
935
906
  return r !== void 0 && n?.endsWith("/LCSH") === !0 ? [r] : [];
936
- }), Bt = (e) => {
907
+ }), Lt = (e) => {
937
908
  let t = Y(e, "hasFormat").flatMap((e) => {
938
909
  let t = X(e, "file");
939
910
  if (t === void 0) return [];
@@ -944,7 +915,7 @@ var o = (e, t) => t.has(e.scheme.trim().toLowerCase()), s = (e, t, n) => {
944
915
  }];
945
916
  });
946
917
  return t.find((e) => /\.cover\.medium\./i.test(e.uri)) ?? t[0];
947
- }, $ = (e) => e.length > 0 ? e : void 0, Vt = (e) => {
918
+ }, $ = (e) => e.length > 0 ? e : void 0, Rt = (e) => {
948
919
  let t;
949
920
  try {
950
921
  t = new a(e);
@@ -952,12 +923,12 @@ var o = (e, t) => t.has(e.scheme.trim().toLowerCase()), s = (e, t, n) => {
952
923
  let t = e instanceof Error ? e.message : String(e);
953
924
  throw Error(`Project Gutenberg RDF is malformed: ${t}`, { cause: e });
954
925
  }
955
- if (q(t.name).toLowerCase() !== "rdf") return;
926
+ if (J(t.name).toLowerCase() !== "rdf") return;
956
927
  let n = X(t, "ebook");
957
928
  if (n === void 0) return;
958
- let r = Lt(n);
929
+ let r = Pt(n);
959
930
  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);
931
+ let i = [...new Set(Nt(n, "language"))], o = [...new Set(It(n))], s = [...new Set(Nt(n, "bookshelf"))], c = Ft(n);
961
932
  return {
962
933
  id: r,
963
934
  title: Z(X(n, "title")),
@@ -971,23 +942,9 @@ var o = (e, t) => t.has(e.scheme.trim().toLowerCase()), s = (e, t, n) => {
971
942
  subjects: $(o),
972
943
  bookshelves: $(s),
973
944
  contributors: $(c),
974
- cover: Bt(n)
945
+ cover: Lt(n)
975
946
  };
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 = {
947
+ }, zt = 25, Bt = {
991
948
  art: "artist",
992
949
  aut: "author",
993
950
  clr: "colorist",
@@ -996,17 +953,17 @@ var o = (e, t) => t.has(e.scheme.trim().toLowerCase()), s = (e, t, n) => {
996
953
  ill: "illustrator",
997
954
  nrt: "narrator",
998
955
  trl: "translator"
999
- }, Gt = (e) => {
956
+ }, Vt = (e) => {
1000
957
  let t = /* @__PURE__ */ new Map();
1001
958
  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);
959
+ let e = n.name.trim().toLowerCase(), r = Bt[n.role.trim().toLowerCase()] ?? n.role, i = t.get(e);
1003
960
  i === void 0 ? t.set(e, {
1004
961
  name: n.name,
1005
962
  roles: [r]
1006
963
  }) : i.roles.includes(r) || i.roles.push(r);
1007
964
  }
1008
965
  return t.size > 0 ? [...t.values()] : void 0;
1009
- }, Kt = (e) => {
966
+ }, Ht = (e) => {
1010
967
  if (e === void 0) return;
1011
968
  let t = /^(\d{4})(?:-(\d{2})(?:-(\d{2}))?)?$/.exec(e.trim());
1012
969
  if (t === null) return;
@@ -1016,53 +973,53 @@ var o = (e, t) => t.has(e.scheme.trim().toLowerCase()), s = (e, t, n) => {
1016
973
  ...r === void 0 ? {} : { month: r },
1017
974
  ...i === void 0 ? {} : { day: i }
1018
975
  };
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) => {
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) => {
1020
977
  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({
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({
1022
979
  date: i.length === 1 ? { year: i[0] } : void 0,
1023
980
  publisher: n !== void 0 && n.length > 0 && !/^\[?s\.n\.?\]?$/i.test(n) ? n : void 0
1024
981
  });
1025
982
  return a.date !== void 0 || a.publisher !== void 0 ? a : void 0;
1026
- }, Yt = (e, t) => {
983
+ }, Gt = (e, t) => {
1027
984
  try {
1028
985
  let n = new URL(e, t);
1029
986
  return n.protocol === "http:" || n.protocol === "https:" ? n.toString() : void 0;
1030
987
  } catch {
1031
988
  return;
1032
989
  }
1033
- }, Xt = (e) => e.length > 0 ? e : void 0, Zt = (e, t) => {
990
+ }, Kt = (e) => e.length > 0 ? e : void 0, qt = (e, t) => {
1034
991
  let n = [t.matchedIdentifier, {
1035
992
  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 : {
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 : {
1038
995
  uri: i,
1039
996
  mediaType: e.cover?.mediaType,
1040
997
  confidence: "derived"
1041
- }, o = M({
1042
- date: Kt(e.issued),
998
+ }, o = j({
999
+ date: Ht(e.issued),
1043
1000
  publisher: e.publisher
1044
- }), s = M({
1045
- original: Jt(e.originalPublication),
1001
+ }), s = j({
1002
+ original: Wt(e.originalPublication),
1046
1003
  edition: o.date !== void 0 || o.publisher !== void 0 ? o : void 0
1047
1004
  });
1048
- return M({
1005
+ return j({
1049
1006
  titles: e.title === void 0 ? void 0 : [{ value: e.title }],
1050
1007
  publication: s.original !== void 0 || s.edition !== void 0 ? s : void 0,
1051
1008
  description: e.summary ?? e.description,
1052
1009
  rights: e.rights,
1053
- languages: Xt([...new Set(e.languages ?? [])]),
1054
- subjects: Xt(r),
1055
- contributors: Gt(e),
1010
+ languages: Kt([...new Set(e.languages ?? [])]),
1011
+ subjects: Kt(r),
1012
+ contributors: Vt(e),
1056
1013
  identifiers: n,
1057
1014
  cover: a
1058
1015
  });
1059
- }, Qt = "projectGutenberg", $t = "https://www.gutenberg.org", en = (e = {}) => {
1060
- let t = e.baseUrl ?? $t;
1016
+ }, Jt = "projectGutenberg", Yt = "https://www.gutenberg.org", Xt = (e = {}) => {
1017
+ let t = e.baseUrl ?? Yt;
1061
1018
  return {
1062
- id: Qt,
1019
+ id: Jt,
1063
1020
  name: "Project Gutenberg",
1064
1021
  search: async (n, r) => {
1065
- let i = G(n);
1022
+ let i = K(n);
1066
1023
  if (i === void 0) return [];
1067
1024
  let a = new URL(`/cache/epub/${i.id}/pg${i.id}.rdf`, t), o = await (e.fetch ?? globalThis.fetch)(a.toString(), {
1068
1025
  signal: r.signal,
@@ -1072,23 +1029,23 @@ var o = (e, t) => t.has(e.scheme.trim().toLowerCase()), s = (e, t, n) => {
1072
1029
  }
1073
1030
  });
1074
1031
  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());
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());
1077
1034
  if (s === void 0 || s.id !== i.id) throw Error(`Project Gutenberg RDF did not contain the requested eBook ${i.id}`);
1078
1035
  let c = new URL(`/ebooks/${i.id}`, t).toString();
1079
1036
  return [{
1080
1037
  id: s.id,
1081
1038
  url: c,
1082
1039
  raw: s,
1083
- metadata: Zt(s, {
1040
+ metadata: qt(s, {
1084
1041
  baseUrl: t,
1085
1042
  matchedIdentifier: i.identifier
1086
1043
  })
1087
1044
  }];
1088
1045
  }
1089
1046
  };
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);
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);
1091
1048
  //#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 };
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 };
1093
1050
 
1094
1051
  //# sourceMappingURL=index.js.map