@prose-reader/metadata-fetcher 1.337.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,112 +120,120 @@ 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) => {
146
- let t = /* @__PURE__ */ new Set();
147
- return e.filter((e) => {
148
- let n = `${e.scheme?.trim().toLowerCase() ?? ""}:${e.value.trim().toLowerCase()}`;
149
- return t.has(n) ? !1 : (t.add(n), !0);
150
- });
151
- }, A = (...e) => {
212
+ }, te = (e) => {
213
+ let t = /* @__PURE__ */ new Map();
214
+ for (let n of e) {
215
+ let e = `${n.scheme?.trim().toLowerCase() ?? ""}:${n.value.trim().toLowerCase()}`, r = t.get(e);
216
+ if (r === void 0) {
217
+ t.set(e, n);
218
+ continue;
219
+ }
220
+ n.unique === !0 && r.unique !== !0 && t.set(e, {
221
+ ...r,
222
+ unique: !0
223
+ });
224
+ }
225
+ return [...t.values()];
226
+ }, L = (...e) => {
152
227
  let t = e.filter((e) => e !== void 0), n = (e) => {
153
228
  for (let n of t) {
154
229
  let t = n[e];
155
230
  if (t !== void 0) return t;
156
231
  }
157
- }, r = k(t.flatMap((e) => e.identifiers ?? [])), i = O({
232
+ }, r = te(t.flatMap((e) => e.identifiers ?? [])), i = I({
158
233
  series: t.find((e) => e.belongsTo?.series !== void 0)?.belongsTo?.series,
159
234
  collection: t.find((e) => e.belongsTo?.collection !== void 0)?.belongsTo?.collection
160
235
  });
161
- return O({
236
+ return I({
162
237
  title: n("title"),
163
238
  cover: n("cover"),
164
239
  description: n("description"),
@@ -183,16 +258,16 @@ var n = (e) => {
183
258
  apple: n("apple"),
184
259
  kobo: n("kobo")
185
260
  });
186
- }, j = class extends Error {
261
+ }, R = class extends Error {
187
262
  status;
188
263
  constructor(e, t) {
189
264
  super(t ?? `Provider responded with status ${e}`), this.name = "MetadataProviderResponseError", this.status = e;
190
265
  }
191
- }, M = (e) => {
266
+ }, z = (e) => {
192
267
  if (typeof e != "object" || !e || !("status" in e)) return;
193
268
  let { status: t } = e;
194
269
  if (!(typeof t != "number" || !Number.isInteger(t))) return t >= 100 && t <= 599 ? t : void 0;
195
- }, 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({
196
271
  providerId: t,
197
272
  score: n,
198
273
  signals: r,
@@ -201,8 +276,8 @@ var n = (e) => {
201
276
  id: e.id,
202
277
  url: e.url,
203
278
  raw: a ? e.raw : void 0
204
- }), R = async (e, t) => {
205
- 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) => {
206
281
  try {
207
282
  return {
208
283
  provider: e,
@@ -214,12 +289,12 @@ var n = (e) => {
214
289
  };
215
290
  } catch (n) {
216
291
  if (t.signal?.aborted === !0) throw n;
217
- return N.error(`fetchMetadata: provider "${e.id}" failed`, n), {
292
+ return B.error(`fetchMetadata: provider "${e.id}" failed`, n), {
218
293
  provider: e,
219
294
  candidates: void 0,
220
- failure: O({
295
+ failure: I({
221
296
  id: e.id,
222
- status: M(n)
297
+ status: z(n)
223
298
  })
224
299
  };
225
300
  }
@@ -227,8 +302,8 @@ var n = (e) => {
227
302
  for (let { provider: e, candidates: t } of o) {
228
303
  if (t === void 0) continue;
229
304
  let o = t.map((t) => {
230
- let { score: r, signals: o } = D(n, t.metadata);
231
- return L({
305
+ let { score: r, signals: o } = F(n, t.metadata);
306
+ return ae({
232
307
  candidate: t,
233
308
  providerId: e.id,
234
309
  score: r,
@@ -237,7 +312,7 @@ var n = (e) => {
237
312
  includeRaw: a
238
313
  });
239
314
  }).sort((e, t) => t.score - e.score).slice(0, r);
240
- 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] = {
241
316
  provider: {
242
317
  id: e.id,
243
318
  name: e.name
@@ -247,40 +322,70 @@ var n = (e) => {
247
322
  }
248
323
  let u = [...l].sort((e, t) => t.score - e.score);
249
324
  return {
250
- version: I,
251
- 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)),
252
327
  matches: u,
253
328
  sources: c,
254
329
  failedProviders: s
255
330
  };
256
- }, 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) => {
257
332
  let n = e[t];
258
333
  if (typeof n != "string") return;
259
334
  let r = n.trim();
260
335
  return r.length > 0 ? r : void 0;
261
- }, V = (e, t) => {
336
+ }, W = (e, t) => {
262
337
  let n = e[t];
263
338
  return typeof n == "number" && Number.isFinite(n) ? n : void 0;
264
- }, H = (e, t) => {
339
+ }, G = (e, t) => {
265
340
  let n = e[t];
266
341
  if (!Array.isArray(n)) return;
267
342
  let r = n.filter((e) => typeof e == "string").map((e) => e.trim()).filter((e) => e.length > 0);
268
343
  return r.length > 0 ? r : void 0;
269
- }, U = (e, t) => {
344
+ }, K = (e, t) => {
270
345
  let n = e[t];
271
- return Array.isArray(n) ? n.filter(z) : [];
272
- }, W = (e) => ({
273
- key: B(e, "key"),
274
- title: B(e, "title"),
275
- subtitle: B(e, "subtitle"),
276
- author_name: H(e, "author_name"),
277
- first_publish_year: V(e, "first_publish_year"),
278
- publisher: H(e, "publisher"),
279
- language: H(e, "language"),
280
- subject: H(e, "subject"),
281
- number_of_pages_median: V(e, "number_of_pages_median"),
282
- cover_i: V(e, "cover_i")
283
- }), 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 = {
284
389
  afr: "af",
285
390
  alb: "sq",
286
391
  amh: "am",
@@ -385,15 +490,15 @@ var n = (e) => {
385
490
  wel: "cy",
386
491
  yid: "yi",
387
492
  zho: "zh"
388
- }, q = /* @__PURE__ */ new Set([
493
+ }, de = /* @__PURE__ */ new Set([
389
494
  "mul",
390
495
  "und",
391
496
  "zxx",
392
497
  "sgn"
393
- ]), J = (e) => {
498
+ ]), Y = (e) => {
394
499
  let t = e.trim().toLowerCase();
395
- if (t.length !== 0 && !q.has(t)) return K[t] ?? t;
396
- }, Y = 25, ee = {
500
+ if (t.length !== 0 && !de.has(t)) return ue[t] ?? t;
501
+ }, fe = 25, pe = {
397
502
  key: "identifiers",
398
503
  title: "title",
399
504
  subtitle: "title",
@@ -403,16 +508,25 @@ var n = (e) => {
403
508
  language: "languages",
404
509
  subject: "subjects",
405
510
  number_of_pages_median: "numberOfPages",
406
- cover_i: "cover"
407
- }, X = "OpenLibrary", Z = (e) => e.length > 0 ? e : void 0, Q = (e, t) => {
408
- 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 ? [] : [{
409
- value: t.isbn,
410
- scheme: "ISBN"
411
- }], ...e.key === void 0 ? [] : [{
412
- value: e.key,
413
- scheme: X
414
- }]];
415
- 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({
416
530
  title: n,
417
531
  cover: e.cover_i === void 0 ? void 0 : {
418
532
  uri: `${t.coversBaseUrl}/b/id/${e.cover_i}-L.jpg`,
@@ -431,7 +545,7 @@ var n = (e) => {
431
545
  isbn: t.isbn,
432
546
  identifiers: Z(i)
433
547
  });
434
- }, $ = "openLibrary", te = "https://openlibrary.org", ne = "https://covers.openlibrary.org", re = [
548
+ }, $ = "openLibrary", he = "https://openlibrary.org", ge = "https://covers.openlibrary.org", _e = [
435
549
  "key",
436
550
  "title",
437
551
  "subtitle",
@@ -441,8 +555,9 @@ var n = (e) => {
441
555
  "language",
442
556
  "subject",
443
557
  "number_of_pages_median",
444
- "cover_i"
445
- ].join(","), ie = (e) => {
558
+ "cover_i",
559
+ "id_project_gutenberg"
560
+ ].join(","), ve = (e) => {
446
561
  let t = e.title?.trim();
447
562
  if (t === void 0 || t.length === 0) return;
448
563
  let r = n(e)[0];
@@ -450,11 +565,11 @@ var n = (e) => {
450
565
  title: t,
451
566
  ...r === void 0 ? {} : { author: r }
452
567
  };
453
- }, ae = (e = {}) => {
454
- 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) => {
455
570
  let i = new URL("/search.json", t);
456
571
  for (let [e, t] of Object.entries(n)) i.searchParams.set(e, t);
457
- 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));
458
573
  let a = await (e.fetch ?? globalThis.fetch)(i.toString(), {
459
574
  signal: r.signal,
460
575
  headers: {
@@ -462,12 +577,13 @@ var n = (e) => {
462
577
  ...e.userAgent === void 0 ? {} : { "User-Agent": e.userAgent }
463
578
  }
464
579
  });
465
- if (!a.ok) throw new j(a.status, `Open Library search failed with status ${a.status}`);
466
- return G(await a.json());
467
- }, 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) => ({
468
583
  metadata: Q(e, {
469
584
  coversBaseUrl: n,
470
- isbn: r
585
+ isbn: r.isbn,
586
+ matchedProjectGutenbergIdentifier: r.confirmedProjectGutenberg?.identifier
471
587
  }),
472
588
  id: e.key,
473
589
  url: e.key === void 0 ? void 0 : `${t}${e.key}`,
@@ -477,22 +593,26 @@ var n = (e) => {
477
593
  id: $,
478
594
  name: "Open Library",
479
595
  search: async (e, t) => {
480
- let n = e.isbn?.trim() || void 0;
596
+ let n = e.isbn?.trim() || void 0, a = le(e);
481
597
  if (n !== void 0) {
482
598
  let e = await r({ isbn: n }, t);
483
- 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 });
484
604
  }
485
- let a = ie(e);
486
- 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));
487
607
  }
488
608
  };
489
- }, oe = (e) => [
609
+ }, be = (e) => [
490
610
  e.title,
491
611
  e.isbn,
492
612
  e.gtin,
493
613
  e.belongsTo?.series?.[0]?.name
494
614
  ].some((e) => e !== void 0 && e.trim().length > 0) || (e.identifiers ?? []).length > 0 || n(e).length > 0;
495
615
  //#endregion
496
- 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 };
497
617
 
498
618
  //# sourceMappingURL=index.js.map