@prose-reader/metadata-fetcher 1.338.0 → 1.339.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
@@ -39,10 +39,77 @@ var n = (e) => {
39
39
  main: r,
40
40
  hasSubtitle: i.length > 0
41
41
  };
42
- }, p = .9, m = (e, t) => {
42
+ }, p = .9, m = [
43
+ "volume",
44
+ "part",
45
+ "book"
46
+ ], h = /\b(volumes?|vols?|parts?|books?)\s+([\p{L}\p{N}]+)\b/gu, g = {
47
+ one: 1,
48
+ first: 1,
49
+ two: 2,
50
+ second: 2,
51
+ three: 3,
52
+ third: 3,
53
+ four: 4,
54
+ fourth: 4,
55
+ five: 5,
56
+ fifth: 5,
57
+ six: 6,
58
+ sixth: 6,
59
+ seven: 7,
60
+ seventh: 7,
61
+ eight: 8,
62
+ eighth: 8,
63
+ nine: 9,
64
+ ninth: 9,
65
+ ten: 10,
66
+ tenth: 10,
67
+ eleven: 11,
68
+ eleventh: 11,
69
+ twelve: 12,
70
+ twelfth: 12
71
+ }, _ = {
72
+ i: 1,
73
+ v: 5,
74
+ x: 10,
75
+ l: 50,
76
+ c: 100,
77
+ d: 500,
78
+ m: 1e3
79
+ }, v = (e) => {
80
+ 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;
81
+ let t = 0, n = 0;
82
+ for (let r of [...e.toLowerCase()].reverse()) {
83
+ let e = _[r];
84
+ if (e === void 0) return;
85
+ e < n ? t -= e : (t += e, n = e);
86
+ }
87
+ return t > 0 ? t : void 0;
88
+ }, y = (e) => /^\d+$/.test(e) ? Number.parseInt(e, 10) : g[e] ?? v(e), b = (e) => {
89
+ if (e.startsWith("vol")) return "volume";
90
+ if (e.startsWith("part")) return "part";
91
+ if (e.startsWith("book")) return "book";
92
+ }, x = (e) => {
93
+ let t = /* @__PURE__ */ new Map();
94
+ for (let n of c(e).matchAll(h)) {
95
+ let e = n[1] === void 0 ? void 0 : b(n[1]), r = n[2] === void 0 ? void 0 : y(n[2]);
96
+ if (e === void 0 || r === void 0) continue;
97
+ let i = t.get(e) ?? /* @__PURE__ */ new Set();
98
+ i.add(r), t.set(e, i);
99
+ }
100
+ return t;
101
+ }, S = (e, t) => {
102
+ let n = x(e), r = x(t);
103
+ for (let e of m) {
104
+ let t = n.get(e), i = r.get(e);
105
+ if (!(t === void 0 || i === void 0) && [...t].every((e) => !i.has(e))) return !0;
106
+ }
107
+ return !1;
108
+ }, C = (e, t) => {
109
+ if (S(e, t)) return 0;
43
110
  let n = u(e, t), r = f(e), i = f(t);
44
111
  return r.hasSubtitle === i.hasSubtitle ? n : Math.max(n, u(r.main, i.main) * p);
45
- }, h = (e) => c(e).split(" ").filter((e) => e.length > 0).sort().join(" "), g = (e, t) => u(h(e), h(t)), _ = {
112
+ }, w = (e) => c(e).split(" ").filter((e) => e.length > 0).sort().join(" "), T = (e, t) => u(w(e), w(t)), E = {
46
113
  isbn: 1,
47
114
  gtin: 1,
48
115
  identifiers: .6,
@@ -53,96 +120,96 @@ var n = (e) => {
53
120
  publisher: .15,
54
121
  languages: .15,
55
122
  numberOfPages: .15
56
- }, v = /* @__PURE__ */ new Set(["isbn", "gtin"]), y = (e) => {
123
+ }, D = /* @__PURE__ */ new Set(["isbn", "gtin"]), O = (e) => {
57
124
  let t = e?.trim();
58
125
  return t !== void 0 && t.length > 0 ? t : void 0;
59
- }, b = (e) => e.value.trim().toLowerCase(), x = (e) => e.scheme === void 0 ? e.value : `${e.scheme}:${e.value}`, S = (e, t) => b(e) === b(t) ? e.scheme === void 0 || t.scheme === void 0 || e.scheme.trim().toLowerCase() === t.scheme.trim().toLowerCase() : !1, C = (e) => e.trim().toLowerCase().split("-")[0] ?? "", w = (e, t) => {
126
+ }, k = (e) => e.value.trim().toLowerCase(), A = (e) => e.scheme === void 0 ? e.value : `${e.scheme}:${e.value}`, j = (e, t) => k(e) === k(t) ? e.scheme === void 0 || t.scheme === void 0 || e.scheme.trim().toLowerCase() === t.scheme.trim().toLowerCase() : !1, M = (e) => e.trim().toLowerCase().split("-")[0] ?? "", N = (e, t) => {
60
127
  let n = Math.abs(e - t);
61
128
  return n === 0 ? 1 : n === 1 ? .6 : n <= 3 ? .3 : 0;
62
- }, T = (e, t) => {
129
+ }, ee = (e, t) => {
63
130
  let n = Math.max(e, t);
64
131
  return n <= 0 ? 0 : Math.max(0, 1 - Math.abs(e - t) / n * 2);
65
- }, E = (e, t, n) => e.reduce((e, r) => t.reduce((e, t) => Math.max(e, n(r, t)), e), 0), D = (e, t) => {
132
+ }, P = (e, t, n) => e.reduce((e, r) => t.reduce((e, t) => Math.max(e, n(r, t)), e), 0), F = (e, t) => {
66
133
  let r = [], i = (e, t) => {
67
134
  t !== void 0 && r.push({
68
135
  field: e,
69
- weight: _[e],
136
+ weight: E[e],
70
137
  score: Math.min(1, Math.max(0, t.score)),
71
138
  query: t.query,
72
139
  candidate: t.candidate
73
140
  });
74
141
  }, o = (e, t, n, r = u) => {
75
- let a = y(t), o = y(n);
142
+ let a = O(t), o = O(n);
76
143
  a === void 0 || o === void 0 || i(e, {
77
144
  score: r(a, o),
78
145
  query: a,
79
146
  candidate: o
80
147
  });
81
- }, s = y(e.isbn), c = y(t.isbn), l = s === void 0 ? void 0 : a(s), d = c === void 0 ? void 0 : a(c);
148
+ }, s = O(e.isbn), c = O(t.isbn), l = s === void 0 ? void 0 : a(s), d = c === void 0 ? void 0 : a(c);
82
149
  s !== void 0 && c !== void 0 && l !== void 0 && d !== void 0 && i("isbn", {
83
150
  score: +(l === d),
84
151
  query: s,
85
152
  candidate: c
86
153
  });
87
- let f = y(e.gtin), p = y(t.gtin);
154
+ let f = O(e.gtin), p = O(t.gtin);
88
155
  f !== void 0 && p !== void 0 && i("gtin", {
89
156
  score: +(f === p),
90
157
  query: f,
91
158
  candidate: p
92
159
  });
93
- let h = e.identifiers ?? [], b = t.identifiers ?? [];
94
- h.length > 0 && b.length > 0 && i("identifiers", {
95
- score: +!!h.some((e) => b.some((t) => S(e, t))),
96
- query: h.map(x).join(", "),
97
- candidate: b.map(x).join(", ")
98
- }), o("title", e.title, t.title, m), o("publisher", e.publisher, t.publisher), o("series", e.belongsTo?.series?.[0]?.name, t.belongsTo?.series?.[0]?.name);
99
- let D = n(t), O = n(e);
100
- O.length > 0 && D.length > 0 && i("contributors", {
101
- score: E(O, D, g),
102
- query: O.join(", "),
103
- candidate: D.join(", ")
160
+ let m = e.identifiers ?? [], h = t.identifiers ?? [];
161
+ m.length > 0 && h.length > 0 && i("identifiers", {
162
+ score: +!!m.some((e) => h.some((t) => j(e, t))),
163
+ query: m.map(A).join(", "),
164
+ candidate: h.map(A).join(", ")
165
+ }), o("title", e.title, t.title, C), o("publisher", e.publisher, t.publisher), o("series", e.belongsTo?.series?.[0]?.name, t.belongsTo?.series?.[0]?.name);
166
+ let g = n(t), _ = n(e);
167
+ _.length > 0 && g.length > 0 && i("contributors", {
168
+ score: P(_, g, T),
169
+ query: _.join(", "),
170
+ candidate: g.join(", ")
104
171
  });
105
- let k = e.published?.year, A = t.published?.year;
106
- k !== void 0 && A !== void 0 && i("published", {
107
- score: w(k, A),
108
- query: String(k),
109
- candidate: String(A)
172
+ let v = e.published?.year, y = t.published?.year;
173
+ v !== void 0 && y !== void 0 && i("published", {
174
+ score: N(v, y),
175
+ query: String(v),
176
+ candidate: String(y)
110
177
  });
111
- let j = e.languages ?? [], M = t.languages ?? [];
112
- if (j.length > 0 && M.length > 0) {
113
- let e = new Set(M.map(C));
178
+ let b = e.languages ?? [], x = t.languages ?? [];
179
+ if (b.length > 0 && x.length > 0) {
180
+ let e = new Set(x.map(M));
114
181
  i("languages", {
115
- score: +!!j.some((t) => e.has(C(t))),
116
- query: j.join(", "),
117
- candidate: M.join(", ")
182
+ score: +!!b.some((t) => e.has(M(t))),
183
+ query: b.join(", "),
184
+ candidate: x.join(", ")
118
185
  });
119
186
  }
120
187
  e.numberOfPages !== void 0 && t.numberOfPages !== void 0 && i("numberOfPages", {
121
- score: T(e.numberOfPages, t.numberOfPages),
188
+ score: ee(e.numberOfPages, t.numberOfPages),
122
189
  query: String(e.numberOfPages),
123
190
  candidate: String(t.numberOfPages)
124
191
  });
125
- let N = r.filter((e) => v.has(e.field));
126
- if (N.some((e) => e.score === 0)) return {
192
+ let S = r.filter((e) => D.has(e.field));
193
+ if (S.some((e) => e.score === 0)) return {
127
194
  score: 0,
128
195
  signals: r
129
196
  };
130
- if (N.some((e) => e.score === 1)) return {
197
+ if (S.some((e) => e.score === 1)) return {
131
198
  score: 1,
132
199
  signals: r
133
200
  };
134
- let P = r.reduce((e, t) => e + t.weight, 0);
135
- return P === 0 ? {
201
+ let w = r.reduce((e, t) => e + t.weight, 0);
202
+ return w === 0 ? {
136
203
  score: 0,
137
204
  signals: r
138
205
  } : {
139
- score: r.reduce((e, t) => e + t.score * t.weight, 0) / P,
206
+ score: r.reduce((e, t) => e + t.score * t.weight, 0) / w,
140
207
  signals: r
141
208
  };
142
- }, O = (e) => {
209
+ }, I = (e) => {
143
210
  let t = Object.entries(e).filter(([, e]) => e !== void 0);
144
211
  return Object.fromEntries(t);
145
- }, k = (e) => {
212
+ }, te = (e) => {
146
213
  let t = /* @__PURE__ */ new Map();
147
214
  for (let n of e) {
148
215
  let e = `${n.scheme?.trim().toLowerCase() ?? ""}:${n.value.trim().toLowerCase()}`, r = t.get(e);
@@ -156,17 +223,17 @@ var n = (e) => {
156
223
  });
157
224
  }
158
225
  return [...t.values()];
159
- }, A = (...e) => {
226
+ }, L = (...e) => {
160
227
  let t = e.filter((e) => e !== void 0), n = (e) => {
161
228
  for (let n of t) {
162
229
  let t = n[e];
163
230
  if (t !== void 0) return t;
164
231
  }
165
- }, r = k(t.flatMap((e) => e.identifiers ?? [])), i = O({
232
+ }, r = te(t.flatMap((e) => e.identifiers ?? [])), i = I({
166
233
  series: t.find((e) => e.belongsTo?.series !== void 0)?.belongsTo?.series,
167
234
  collection: t.find((e) => e.belongsTo?.collection !== void 0)?.belongsTo?.collection
168
235
  });
169
- return O({
236
+ return I({
170
237
  title: n("title"),
171
238
  cover: n("cover"),
172
239
  description: n("description"),
@@ -191,16 +258,16 @@ var n = (e) => {
191
258
  apple: n("apple"),
192
259
  kobo: n("kobo")
193
260
  });
194
- }, j = class extends Error {
261
+ }, R = class extends Error {
195
262
  status;
196
263
  constructor(e, t) {
197
264
  super(t ?? `Provider responded with status ${e}`), this.name = "MetadataProviderResponseError", this.status = e;
198
265
  }
199
- }, M = (e) => {
266
+ }, z = (e) => {
200
267
  if (typeof e != "object" || !e || !("status" in e)) return;
201
268
  let { status: t } = e;
202
269
  if (!(typeof t != "number" || !Number.isInteger(t))) return t >= 100 && t <= 599 ? t : void 0;
203
- }, N = t.namespace("@prose-reader/metadata-fetcher", void 0, { color: "#b06642" }), P = 5, F = .5, I = 1, L = ({ candidate: e, providerId: t, score: n, signals: r, accepted: i, includeRaw: a }) => O({
270
+ }, B = t.namespace("@prose-reader/metadata-fetcher", void 0, { color: "#b06642" }), ne = 5, re = .5, ie = 1, ae = ({ candidate: e, providerId: t, score: n, signals: r, accepted: i, includeRaw: a }) => I({
204
271
  providerId: t,
205
272
  score: n,
206
273
  signals: r,
@@ -209,8 +276,8 @@ var n = (e) => {
209
276
  id: e.id,
210
277
  url: e.url,
211
278
  raw: a ? e.raw : void 0
212
- }), R = async (e, t) => {
213
- let n = "metadata" in e ? e.metadata : e, r = t.limit ?? P, i = t.minScore ?? F, a = t.includeRaw === !0, o = await Promise.all(t.providers.map(async (e) => {
279
+ }), V = async (e, t) => {
280
+ let n = "metadata" in e ? e.metadata : e, r = t.limit ?? ne, i = t.minScore ?? re, a = t.includeRaw === !0, o = await Promise.all(t.providers.map(async (e) => {
214
281
  try {
215
282
  return {
216
283
  provider: e,
@@ -222,12 +289,12 @@ var n = (e) => {
222
289
  };
223
290
  } catch (n) {
224
291
  if (t.signal?.aborted === !0) throw n;
225
- return N.error(`fetchMetadata: provider "${e.id}" failed`, n), {
292
+ return B.error(`fetchMetadata: provider "${e.id}" failed`, n), {
226
293
  provider: e,
227
294
  candidates: void 0,
228
- failure: O({
295
+ failure: I({
229
296
  id: e.id,
230
- status: M(n)
297
+ status: z(n)
231
298
  })
232
299
  };
233
300
  }
@@ -235,8 +302,8 @@ var n = (e) => {
235
302
  for (let { provider: e, candidates: t } of o) {
236
303
  if (t === void 0) continue;
237
304
  let o = t.map((t) => {
238
- let { score: r, signals: o } = D(n, t.metadata);
239
- return L({
305
+ let { score: r, signals: o } = F(n, t.metadata);
306
+ return ae({
240
307
  candidate: t,
241
308
  providerId: e.id,
242
309
  score: r,
@@ -245,7 +312,7 @@ var n = (e) => {
245
312
  includeRaw: a
246
313
  });
247
314
  }).sort((e, t) => t.score - e.score).slice(0, r);
248
- c[e.id] !== void 0 && N.warn(`fetchMetadata: several providers share the id "${e.id}"`), c[e.id] = {
315
+ c[e.id] !== void 0 && B.warn(`fetchMetadata: several providers share the id "${e.id}"`), c[e.id] = {
249
316
  provider: {
250
317
  id: e.id,
251
318
  name: e.name
@@ -255,40 +322,70 @@ var n = (e) => {
255
322
  }
256
323
  let u = [...l].sort((e, t) => t.score - e.score);
257
324
  return {
258
- version: I,
259
- metadata: A(...u.filter((e) => e.accepted).map((e) => e.metadata)),
325
+ version: ie,
326
+ metadata: L(...u.filter((e) => e.accepted).map((e) => e.metadata)),
260
327
  matches: u,
261
328
  sources: c,
262
329
  failedProviders: s
263
330
  };
264
- }, z = (e) => typeof e == "object" && !!e && !Array.isArray(e), B = (e, t) => {
331
+ }, H = (e) => typeof e == "object" && !!e && !Array.isArray(e), U = (e, t) => {
265
332
  let n = e[t];
266
333
  if (typeof n != "string") return;
267
334
  let r = n.trim();
268
335
  return r.length > 0 ? r : void 0;
269
- }, V = (e, t) => {
336
+ }, W = (e, t) => {
270
337
  let n = e[t];
271
338
  return typeof n == "number" && Number.isFinite(n) ? n : void 0;
272
- }, H = (e, t) => {
339
+ }, G = (e, t) => {
273
340
  let n = e[t];
274
341
  if (!Array.isArray(n)) return;
275
342
  let r = n.filter((e) => typeof e == "string").map((e) => e.trim()).filter((e) => e.length > 0);
276
343
  return r.length > 0 ? r : void 0;
277
- }, U = (e, t) => {
344
+ }, K = (e, t) => {
278
345
  let n = e[t];
279
- return Array.isArray(n) ? n.filter(z) : [];
280
- }, W = (e) => ({
281
- key: B(e, "key"),
282
- title: B(e, "title"),
283
- subtitle: B(e, "subtitle"),
284
- author_name: H(e, "author_name"),
285
- first_publish_year: V(e, "first_publish_year"),
286
- publisher: H(e, "publisher"),
287
- language: H(e, "language"),
288
- subject: H(e, "subject"),
289
- number_of_pages_median: V(e, "number_of_pages_median"),
290
- cover_i: V(e, "cover_i")
291
- }), G = (e) => z(e) ? U(e, "docs").map(W) : [], K = {
346
+ return Array.isArray(n) ? n.filter(H) : [];
347
+ }, q = (e) => ({
348
+ key: U(e, "key"),
349
+ title: U(e, "title"),
350
+ subtitle: U(e, "subtitle"),
351
+ author_name: G(e, "author_name"),
352
+ first_publish_year: W(e, "first_publish_year"),
353
+ publisher: G(e, "publisher"),
354
+ language: G(e, "language"),
355
+ subject: G(e, "subject"),
356
+ number_of_pages_median: W(e, "number_of_pages_median"),
357
+ cover_i: W(e, "cover_i"),
358
+ id_project_gutenberg: G(e, "id_project_gutenberg")
359
+ }), J = (e) => H(e) ? K(e, "docs").map(q) : [], oe = /* @__PURE__ */ new Set(["gutenberg.org", "www.gutenberg.org"]), se = [
360
+ /^\/ebooks\/(\d+)(?:[./]|$)/i,
361
+ /^\/files\/(\d+)(?:\/|$)/i,
362
+ /^\/cache\/epub\/(\d+)(?:\/|$)/i,
363
+ /^\/(\d+)(?:\/|$)/
364
+ ], ce = (e) => {
365
+ try {
366
+ let t = new URL(e.trim());
367
+ if (t.protocol !== "http:" && t.protocol !== "https:" || !oe.has(t.hostname.toLowerCase())) return;
368
+ for (let e of se) {
369
+ let n = e.exec(t.pathname)?.[1];
370
+ if (n !== void 0) return n;
371
+ }
372
+ } catch {
373
+ return;
374
+ }
375
+ }, le = (e) => {
376
+ for (let t of e.identifiers ?? []) {
377
+ let e = t.scheme?.trim().toLowerCase();
378
+ if (e !== void 0 && e !== "url" && e !== "uri") continue;
379
+ let n = ce(t.value);
380
+ if (n !== void 0) return {
381
+ id: n,
382
+ identifier: {
383
+ value: t.value,
384
+ ...t.scheme === void 0 ? {} : { scheme: t.scheme }
385
+ }
386
+ };
387
+ }
388
+ }, ue = {
292
389
  afr: "af",
293
390
  alb: "sq",
294
391
  amh: "am",
@@ -393,15 +490,15 @@ var n = (e) => {
393
490
  wel: "cy",
394
491
  yid: "yi",
395
492
  zho: "zh"
396
- }, q = /* @__PURE__ */ new Set([
493
+ }, de = /* @__PURE__ */ new Set([
397
494
  "mul",
398
495
  "und",
399
496
  "zxx",
400
497
  "sgn"
401
- ]), J = (e) => {
498
+ ]), Y = (e) => {
402
499
  let t = e.trim().toLowerCase();
403
- if (t.length !== 0 && !q.has(t)) return K[t] ?? t;
404
- }, Y = 25, ee = {
500
+ if (t.length !== 0 && !de.has(t)) return ue[t] ?? t;
501
+ }, fe = 25, pe = {
405
502
  key: "identifiers",
406
503
  title: "title",
407
504
  subtitle: "title",
@@ -411,16 +508,25 @@ var n = (e) => {
411
508
  language: "languages",
412
509
  subject: "subjects",
413
510
  number_of_pages_median: "numberOfPages",
414
- cover_i: "cover"
415
- }, X = "OpenLibrary", Z = (e) => e.length > 0 ? e : void 0, Q = (e, t) => {
416
- let n = e.title !== void 0 && e.subtitle !== void 0 ? `${e.title}: ${e.subtitle}` : e.title, r = Z([...new Set((e.language ?? []).map(J).filter((e) => e !== void 0))]), i = [...t.isbn === void 0 ? [] : [{
417
- value: t.isbn,
418
- scheme: "ISBN"
419
- }], ...e.key === void 0 ? [] : [{
420
- value: e.key,
421
- scheme: X
422
- }]];
423
- return O({
511
+ cover_i: "cover",
512
+ id_project_gutenberg: "identifiers"
513
+ }, X = "OpenLibrary", me = "ProjectGutenberg", Z = (e) => e.length > 0 ? e : void 0, Q = (e, t) => {
514
+ let n = e.title !== void 0 && e.subtitle !== void 0 ? `${e.title}: ${e.subtitle}` : e.title, r = Z([...new Set((e.language ?? []).map(Y).filter((e) => e !== void 0))]), i = [
515
+ ...t.isbn === void 0 ? [] : [{
516
+ value: t.isbn,
517
+ scheme: "ISBN"
518
+ }],
519
+ ...t.matchedProjectGutenbergIdentifier === void 0 ? [] : [t.matchedProjectGutenbergIdentifier],
520
+ ...(e.id_project_gutenberg ?? []).map((e) => ({
521
+ value: e,
522
+ scheme: me
523
+ })),
524
+ ...e.key === void 0 ? [] : [{
525
+ value: e.key,
526
+ scheme: X
527
+ }]
528
+ ];
529
+ return I({
424
530
  title: n,
425
531
  cover: e.cover_i === void 0 ? void 0 : {
426
532
  uri: `${t.coversBaseUrl}/b/id/${e.cover_i}-L.jpg`,
@@ -439,7 +545,7 @@ var n = (e) => {
439
545
  isbn: t.isbn,
440
546
  identifiers: Z(i)
441
547
  });
442
- }, $ = "openLibrary", te = "https://openlibrary.org", ne = "https://covers.openlibrary.org", re = [
548
+ }, $ = "openLibrary", he = "https://openlibrary.org", ge = "https://covers.openlibrary.org", _e = [
443
549
  "key",
444
550
  "title",
445
551
  "subtitle",
@@ -449,8 +555,9 @@ var n = (e) => {
449
555
  "language",
450
556
  "subject",
451
557
  "number_of_pages_median",
452
- "cover_i"
453
- ].join(","), ie = (e) => {
558
+ "cover_i",
559
+ "id_project_gutenberg"
560
+ ].join(","), ve = (e) => {
454
561
  let t = e.title?.trim();
455
562
  if (t === void 0 || t.length === 0) return;
456
563
  let r = n(e)[0];
@@ -458,11 +565,11 @@ var n = (e) => {
458
565
  title: t,
459
566
  ...r === void 0 ? {} : { author: r }
460
567
  };
461
- }, ae = (e = {}) => {
462
- let t = e.baseUrl ?? te, n = e.coversBaseUrl ?? ne, r = async (n, r) => {
568
+ }, ye = (e = {}) => {
569
+ let t = e.baseUrl ?? he, n = e.coversBaseUrl ?? ge, r = async (n, r) => {
463
570
  let i = new URL("/search.json", t);
464
571
  for (let [e, t] of Object.entries(n)) i.searchParams.set(e, t);
465
- i.searchParams.set("fields", re), i.searchParams.set("limit", String(r.limit));
572
+ i.searchParams.set("fields", _e), i.searchParams.set("limit", String(r.limit));
466
573
  let a = await (e.fetch ?? globalThis.fetch)(i.toString(), {
467
574
  signal: r.signal,
468
575
  headers: {
@@ -470,12 +577,13 @@ var n = (e) => {
470
577
  ...e.userAgent === void 0 ? {} : { "User-Agent": e.userAgent }
471
578
  }
472
579
  });
473
- if (!a.ok) throw new j(a.status, `Open Library search failed with status ${a.status}`);
474
- return G(await a.json());
475
- }, i = (e, r) => e.map((e) => ({
580
+ if (!a.ok) throw new R(a.status, `Open Library search failed with status ${a.status}`);
581
+ return J(await a.json());
582
+ }, i = (e, r = {}) => e.map((e) => ({
476
583
  metadata: Q(e, {
477
584
  coversBaseUrl: n,
478
- isbn: r
585
+ isbn: r.isbn,
586
+ matchedProjectGutenbergIdentifier: r.confirmedProjectGutenberg?.identifier
479
587
  }),
480
588
  id: e.key,
481
589
  url: e.key === void 0 ? void 0 : `${t}${e.key}`,
@@ -485,22 +593,26 @@ var n = (e) => {
485
593
  id: $,
486
594
  name: "Open Library",
487
595
  search: async (e, t) => {
488
- let n = e.isbn?.trim() || void 0;
596
+ let n = e.isbn?.trim() || void 0, a = le(e);
489
597
  if (n !== void 0) {
490
598
  let e = await r({ isbn: n }, t);
491
- if (e.length > 0) return i(e, n);
599
+ if (e.length > 0) return i(e, { isbn: n });
600
+ }
601
+ if (a !== void 0) {
602
+ let e = await r({ q: `id_project_gutenberg:${a.id}` }, t);
603
+ if (e.length > 0) return i(e, { confirmedProjectGutenberg: a });
492
604
  }
493
- let a = ie(e);
494
- return a === void 0 ? [] : i(await r(a, t), void 0);
605
+ let o = ve(e);
606
+ return o === void 0 ? [] : i(await r(o, t));
495
607
  }
496
608
  };
497
- }, oe = (e) => [
609
+ }, be = (e) => [
498
610
  e.title,
499
611
  e.isbn,
500
612
  e.gtin,
501
613
  e.belongsTo?.series?.[0]?.name
502
614
  ].some((e) => e !== void 0 && e.trim().length > 0) || (e.identifiers ?? []).length > 0 || n(e).length > 0;
503
615
  //#endregion
504
- export { _ as METADATA_MATCH_WEIGHTS, j as MetadataProviderResponseError, X as OPEN_LIBRARY_IDENTIFIER_SCHEME, Y as OPEN_LIBRARY_MAX_SUBJECTS, $ as OPEN_LIBRARY_PROVIDER_ID, ae as createOpenLibraryProvider, R as fetchMetadata, oe as hasSearchTerms, J as marcLanguageToBcp47, A as mergeResolvedMetadata, n as metadataAuthors, c as normalizeForComparison, ee as openLibraryMetadataHomes, G as parseOpenLibrarySearchResponse, g as personNameSimilarity, Q as resolveOpenLibraryDoc, M as responseErrorStatus, D as scoreMetadataCandidate, u as textSimilarity, m as titleSimilarity, a as toIsbn13 };
616
+ export { E as METADATA_MATCH_WEIGHTS, R as MetadataProviderResponseError, X as OPEN_LIBRARY_IDENTIFIER_SCHEME, fe as OPEN_LIBRARY_MAX_SUBJECTS, $ as OPEN_LIBRARY_PROVIDER_ID, ye as createOpenLibraryProvider, V as fetchMetadata, be as hasSearchTerms, Y as marcLanguageToBcp47, L as mergeResolvedMetadata, n as metadataAuthors, c as normalizeForComparison, pe as openLibraryMetadataHomes, J as parseOpenLibrarySearchResponse, T as personNameSimilarity, Q as resolveOpenLibraryDoc, z as responseErrorStatus, F as scoreMetadataCandidate, u as textSimilarity, C as titleSimilarity, a as toIsbn13 };
505
617
 
506
618
  //# sourceMappingURL=index.js.map