@prose-reader/metadata-fetcher 1.340.0 → 1.341.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
@@ -44,7 +44,7 @@ var r = (e) => {
44
44
  "volume",
45
45
  "part",
46
46
  "book"
47
- ], ee = /\b(volumes?|vols?|parts?|books?)\s+([\p{L}\p{N}]+)\b/gu, g = {
47
+ ], g = /\b(volumes?|vols?|parts?|books?)\s+([\p{L}\p{N}]+)\b/gu, _ = {
48
48
  one: 1,
49
49
  first: 1,
50
50
  two: 2,
@@ -69,7 +69,7 @@ var r = (e) => {
69
69
  eleventh: 11,
70
70
  twelve: 12,
71
71
  twelfth: 12
72
- }, _ = {
72
+ }, v = {
73
73
  i: 1,
74
74
  v: 5,
75
75
  x: 10,
@@ -77,40 +77,40 @@ var r = (e) => {
77
77
  c: 100,
78
78
  d: 500,
79
79
  m: 1e3
80
- }, v = (e) => {
80
+ }, y = (e) => {
81
81
  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;
82
82
  let t = 0, n = 0;
83
83
  for (let r of [...e.toLowerCase()].reverse()) {
84
- let e = _[r];
84
+ let e = v[r];
85
85
  if (e === void 0) return;
86
86
  e < n ? t -= e : (t += e, n = e);
87
87
  }
88
88
  return t > 0 ? t : void 0;
89
- }, y = (e) => /^\d+$/.test(e) ? Number.parseInt(e, 10) : g[e] ?? v(e), b = (e) => {
89
+ }, b = (e) => /^\d+$/.test(e) ? Number.parseInt(e, 10) : _[e] ?? y(e), x = (e) => {
90
90
  if (e.startsWith("vol")) return "volume";
91
91
  if (e.startsWith("part")) return "part";
92
92
  if (e.startsWith("book")) return "book";
93
- }, x = (e) => {
93
+ }, S = (e) => {
94
94
  let t = /* @__PURE__ */ new Map();
95
- for (let n of l(e).matchAll(ee)) {
96
- let e = n[1] === void 0 ? void 0 : b(n[1]), r = n[2] === void 0 ? void 0 : y(n[2]);
95
+ for (let n of l(e).matchAll(g)) {
96
+ let e = n[1] === void 0 ? void 0 : x(n[1]), r = n[2] === void 0 ? void 0 : b(n[2]);
97
97
  if (e === void 0 || r === void 0) continue;
98
98
  let i = t.get(e) ?? /* @__PURE__ */ new Set();
99
99
  i.add(r), t.set(e, i);
100
100
  }
101
101
  return t;
102
- }, S = (e, t) => {
103
- let n = x(e), r = x(t);
102
+ }, C = (e, t) => {
103
+ let n = S(e), r = S(t);
104
104
  for (let e of h) {
105
105
  let t = n.get(e), i = r.get(e);
106
106
  if (!(t === void 0 || i === void 0) && [...t].every((e) => !i.has(e))) return !0;
107
107
  }
108
108
  return !1;
109
- }, C = (e, t) => {
110
- if (S(e, t)) return 0;
109
+ }, w = (e, t) => {
110
+ if (C(e, t)) return 0;
111
111
  let n = d(e, t), r = p(e), i = p(t);
112
112
  return r.hasSubtitle === i.hasSubtitle ? n : Math.max(n, d(r.main, i.main) * m);
113
- }, w = (e) => l(e).split(" ").filter((e) => e.length > 0).sort().join(" "), T = (e, t) => d(w(e), w(t)), E = {
113
+ }, T = (e) => l(e).split(" ").filter((e) => e.length > 0).sort().join(" "), E = (e, t) => d(T(e), T(t)), D = {
114
114
  isbn: 1,
115
115
  gtin: 1,
116
116
  identifiers: .6,
@@ -123,175 +123,118 @@ var r = (e) => {
123
123
  "publication.edition.publisher": .15,
124
124
  languages: .15,
125
125
  numberOfPages: .15
126
- }, te = /* @__PURE__ */ new Set(["isbn", "gtin"]), D = (e) => {
126
+ }, ee = /* @__PURE__ */ new Set(["isbn", "gtin"]), O = (e) => {
127
127
  let t = e?.trim();
128
128
  return t !== void 0 && t.length > 0 ? t : void 0;
129
- }, ne = (e, t) => {
130
- let n = D(e.value)?.toLowerCase();
131
- return n !== void 0 && n === D(t.value)?.toLowerCase();
132
- }, O = (e) => D(e.scheme)?.toLowerCase(), re = (e) => e.scheme === void 0 ? e.value : `${e.scheme}:${e.value}`, ie = (e, t) => {
133
- if (!ne(e, t)) return !1;
134
- let n = O(e), r = O(t);
129
+ }, k = (e, t) => {
130
+ let n = O(e.value)?.toLowerCase();
131
+ return n !== void 0 && n === O(t.value)?.toLowerCase();
132
+ }, A = (e) => O(e.scheme)?.toLowerCase(), te = (e) => e.scheme === void 0 ? e.value : `${e.scheme}:${e.value}`, ne = (e, t) => {
133
+ if (!k(e, t)) return !1;
134
+ let n = A(e), r = A(t);
135
135
  return n === void 0 || r === void 0 || n === r;
136
- }, ae = (e, t) => {
137
- if (!ne(e, t)) return !1;
138
- let n = O(e), r = O(t);
136
+ }, re = (e, t) => {
137
+ if (!k(e, t)) return !1;
138
+ let n = A(e), r = A(t);
139
139
  return n !== void 0 && n === r;
140
- }, k = (e) => e.trim().toLowerCase().split("-")[0] ?? "", oe = (e, t) => {
140
+ }, ie = (e) => e.trim().toLowerCase().split("-")[0] ?? "", ae = (e, t) => {
141
141
  let n = Math.abs(e - t);
142
142
  return n === 0 ? 1 : n === 1 ? .6 : n <= 3 ? .3 : 0;
143
- }, se = (e, t) => {
143
+ }, oe = (e, t) => {
144
144
  let n = Math.max(e, t);
145
145
  return n <= 0 ? 0 : Math.max(0, 1 - Math.abs(e - t) / n * 2);
146
- }, ce = (e, t, n) => e.reduce((e, r) => t.reduce((e, t) => Math.max(e, n(r, t)), e), 0), A = (e, t) => {
146
+ }, se = (e, t, n) => e.reduce((e, r) => t.reduce((e, t) => Math.max(e, n(r, t)), e), 0), ce = (e, t) => {
147
147
  let n = [], i = (e, t) => {
148
148
  t !== void 0 && n.push({
149
149
  field: e,
150
- weight: E[e],
150
+ weight: D[e],
151
151
  score: Math.min(1, Math.max(0, t.score)),
152
152
  query: t.query,
153
153
  candidate: t.candidate
154
154
  });
155
155
  }, a = (e, t, n, r = d) => {
156
- let a = D(t), o = D(n);
156
+ let a = O(t), o = O(n);
157
157
  a === void 0 || o === void 0 || i(e, {
158
158
  score: r(a, o),
159
159
  query: a,
160
160
  candidate: o
161
161
  });
162
- }, s = D(e.isbn), c = D(t.isbn), l = s === void 0 ? void 0 : o(s), u = c === void 0 ? void 0 : o(c);
162
+ }, s = O(e.isbn), c = O(t.isbn), l = s === void 0 ? void 0 : o(s), u = c === void 0 ? void 0 : o(c);
163
163
  s !== void 0 && c !== void 0 && l !== void 0 && u !== void 0 && i("isbn", {
164
164
  score: +(l === u),
165
165
  query: s,
166
166
  candidate: c
167
167
  });
168
- let f = D(e.gtin), p = D(t.gtin);
168
+ let f = O(e.gtin), p = O(t.gtin);
169
169
  f !== void 0 && p !== void 0 && i("gtin", {
170
170
  score: +(f === p),
171
171
  query: f,
172
172
  candidate: p
173
173
  });
174
- let m = e.identifiers ?? [], h = t.identifiers ?? [], ee = m.some((e) => h.some((t) => ae(e, t)));
174
+ let m = e.identifiers ?? [], h = t.identifiers ?? [], g = m.some((e) => h.some((t) => re(e, t)));
175
175
  m.length > 0 && h.length > 0 && i("identifiers", {
176
- score: +!!m.some((e) => h.some((t) => ie(e, t))),
177
- query: m.map(re).join(", "),
178
- candidate: h.map(re).join(", ")
179
- }), a("title", e.title, t.title, C), a("publication.original.publisher", e.publication?.original?.publisher, t.publication?.original?.publisher), a("publication.edition.publisher", e.publication?.edition?.publisher, t.publication?.edition?.publisher), a("series", e.belongsTo?.series?.[0]?.name, t.belongsTo?.series?.[0]?.name);
180
- let g = r(t), _ = r(e);
181
- _.length > 0 && g.length > 0 && i("contributors", {
182
- score: ce(_, g, T),
183
- query: _.join(", "),
184
- candidate: g.join(", ")
176
+ score: +!!m.some((e) => h.some((t) => ne(e, t))),
177
+ query: m.map(te).join(", "),
178
+ candidate: h.map(te).join(", ")
179
+ }), a("title", e.title, t.title, w), a("publication.original.publisher", e.publication?.original?.publisher, t.publication?.original?.publisher), a("publication.edition.publisher", e.publication?.edition?.publisher, t.publication?.edition?.publisher), a("series", e.belongsTo?.series?.[0]?.name, t.belongsTo?.series?.[0]?.name);
180
+ let _ = r(t), v = r(e);
181
+ v.length > 0 && _.length > 0 && i("contributors", {
182
+ score: se(v, _, E),
183
+ query: v.join(", "),
184
+ candidate: _.join(", ")
185
185
  });
186
- let v = (e, t, n) => {
186
+ let y = (e, t, n) => {
187
187
  t === void 0 || n === void 0 || i(e, {
188
- score: oe(t, n),
188
+ score: ae(t, n),
189
189
  query: String(t),
190
190
  candidate: String(n)
191
191
  });
192
192
  };
193
- v("publication.original.date", e.publication?.original?.date?.year, t.publication?.original?.date?.year), v("publication.edition.date", e.publication?.edition?.date?.year, t.publication?.edition?.date?.year);
194
- let y = e.languages ?? [], b = t.languages ?? [];
195
- if (y.length > 0 && b.length > 0) {
196
- let e = new Set(b.map(k));
193
+ y("publication.original.date", e.publication?.original?.date?.year, t.publication?.original?.date?.year), y("publication.edition.date", e.publication?.edition?.date?.year, t.publication?.edition?.date?.year);
194
+ let b = e.languages ?? [], x = t.languages ?? [];
195
+ if (b.length > 0 && x.length > 0) {
196
+ let e = new Set(x.map(ie));
197
197
  i("languages", {
198
- score: +!!y.some((t) => e.has(k(t))),
199
- query: y.join(", "),
200
- candidate: b.join(", ")
198
+ score: +!!b.some((t) => e.has(ie(t))),
199
+ query: b.join(", "),
200
+ candidate: x.join(", ")
201
201
  });
202
202
  }
203
203
  e.numberOfPages !== void 0 && t.numberOfPages !== void 0 && i("numberOfPages", {
204
- score: se(e.numberOfPages, t.numberOfPages),
204
+ score: oe(e.numberOfPages, t.numberOfPages),
205
205
  query: String(e.numberOfPages),
206
206
  candidate: String(t.numberOfPages)
207
207
  });
208
- let x = n.filter((e) => te.has(e.field));
209
- if (x.some((e) => e.score === 0)) return {
208
+ let S = n.filter((e) => ee.has(e.field));
209
+ if (S.some((e) => e.score === 0)) return {
210
210
  score: 0,
211
211
  signals: n
212
212
  };
213
- if (ee || x.some((e) => e.score === 1)) return {
213
+ if (g || S.some((e) => e.score === 1)) return {
214
214
  score: 1,
215
215
  signals: n
216
216
  };
217
- let S = n.reduce((e, t) => e + t.weight, 0);
218
- return S === 0 ? {
217
+ let C = n.reduce((e, t) => e + t.weight, 0);
218
+ return C === 0 ? {
219
219
  score: 0,
220
220
  signals: n
221
221
  } : {
222
- score: n.reduce((e, t) => e + t.score * t.weight, 0) / S,
222
+ score: n.reduce((e, t) => e + t.score * t.weight, 0) / C,
223
223
  signals: n
224
224
  };
225
- }, j = (e) => {
226
- let t = Object.entries(e).filter(([, e]) => e !== void 0);
227
- return Object.fromEntries(t);
228
- }, le = (e) => {
229
- let t = /* @__PURE__ */ new Map();
230
- for (let n of e) {
231
- let e = `${n.scheme?.trim().toLowerCase() ?? ""}:${n.value.trim().toLowerCase()}`, r = t.get(e);
232
- if (r === void 0) {
233
- t.set(e, n);
234
- continue;
235
- }
236
- n.unique === !0 && r.unique !== !0 && t.set(e, {
237
- ...r,
238
- unique: !0
239
- });
240
- }
241
- return [...t.values()];
242
- }, M = (...e) => {
243
- let t = e.filter((e) => e !== void 0), n = (e) => {
244
- for (let n of t) {
245
- let t = n[e];
246
- if (t !== void 0) return t;
247
- }
248
- }, r = le(t.flatMap((e) => e.identifiers ?? [])), i = j({
249
- series: t.find((e) => e.belongsTo?.series !== void 0)?.belongsTo?.series,
250
- collection: t.find((e) => e.belongsTo?.collection !== void 0)?.belongsTo?.collection
251
- }), a = (e) => {
252
- let n = j({
253
- date: t.find((t) => t.publication?.[e]?.date !== void 0)?.publication?.[e]?.date,
254
- publisher: t.find((t) => t.publication?.[e]?.publisher !== void 0)?.publication?.[e]?.publisher,
255
- imprint: t.find((t) => t.publication?.[e]?.imprint !== void 0)?.publication?.[e]?.imprint
256
- });
257
- return n.date !== void 0 || n.publisher !== void 0 || n.imprint !== void 0 ? n : void 0;
258
- }, o = j({
259
- original: a("original"),
260
- edition: a("edition")
261
- });
262
- return j({
263
- title: n("title"),
264
- cover: n("cover"),
265
- description: n("description"),
266
- publication: o.original !== void 0 || o.edition !== void 0 ? o : void 0,
267
- rights: n("rights"),
268
- languages: n("languages"),
269
- subjects: n("subjects"),
270
- contributors: n("contributors"),
271
- readingDirection: n("readingDirection"),
272
- renditionLayout: n("renditionLayout"),
273
- renditionFlow: n("renditionFlow"),
274
- renditionSpread: n("renditionSpread"),
275
- numberOfPages: n("numberOfPages"),
276
- gtin: n("gtin"),
277
- isbn: n("isbn"),
278
- identifiers: r.length > 0 ? r : void 0,
279
- belongsTo: Object.keys(i).length > 0 ? i : void 0,
280
- properties: n("properties"),
281
- comic: n("comic"),
282
- apple: n("apple"),
283
- kobo: n("kobo")
284
- });
285
- }, N = class extends Error {
225
+ }, j = class extends Error {
286
226
  status;
287
227
  constructor(e, t) {
288
228
  super(t ?? `Provider responded with status ${e}`), this.name = "MetadataProviderResponseError", this.status = e;
289
229
  }
290
- }, ue = (e) => {
230
+ }, M = (e) => {
291
231
  if (typeof e != "object" || !e || !("status" in e)) return;
292
232
  let { status: t } = e;
293
233
  if (!(typeof t != "number" || !Number.isInteger(t))) return t >= 100 && t <= 599 ? t : void 0;
294
- }, de = t.namespace("@prose-reader/metadata-fetcher", void 0, { color: "#b06642" }), fe = 5, pe = .5, me = 2, he = ({ candidate: e, providerId: t, score: n, signals: r, accepted: i, includeRaw: a }) => j({
234
+ }, N = t.namespace("@prose-reader/metadata-fetcher", void 0, { color: "#b06642" }), P = (e) => {
235
+ let t = Object.entries(e).filter(([, e]) => e !== void 0);
236
+ return Object.fromEntries(t);
237
+ }, le = 5, ue = .5, de = 3, fe = ({ candidate: e, providerId: t, score: n, signals: r, accepted: i, includeRaw: a }) => P({
295
238
  providerId: t,
296
239
  score: n,
297
240
  signals: r,
@@ -300,8 +243,8 @@ var r = (e) => {
300
243
  id: e.id,
301
244
  url: e.url,
302
245
  raw: a ? e.raw : void 0
303
- }), ge = async (e, t) => {
304
- let n = "metadata" in e ? e.metadata : e, r = t.limit ?? fe, i = t.minScore ?? pe, a = t.includeRaw === !0, o = await Promise.all(t.providers.map(async (e) => {
246
+ }), pe = async (e, t) => {
247
+ let n = "metadata" in e ? e.metadata : e, r = t.limit ?? le, i = t.minScore ?? ue, a = t.includeRaw === !0, o = await Promise.all(t.providers.map(async (e) => {
305
248
  try {
306
249
  return {
307
250
  provider: e,
@@ -313,12 +256,12 @@ var r = (e) => {
313
256
  };
314
257
  } catch (n) {
315
258
  if (t.signal?.aborted === !0) throw n;
316
- return de.error(`fetchMetadata: provider "${e.id}" failed`, n), {
259
+ return N.error(`fetchMetadata: provider "${e.id}" failed`, n), {
317
260
  provider: e,
318
261
  candidates: void 0,
319
- failure: j({
262
+ failure: P({
320
263
  id: e.id,
321
- status: ue(n)
264
+ status: M(n)
322
265
  })
323
266
  };
324
267
  }
@@ -326,8 +269,8 @@ var r = (e) => {
326
269
  for (let { provider: e, candidates: t } of o) {
327
270
  if (t === void 0) continue;
328
271
  let o = t.map((t) => {
329
- let { score: r, signals: o } = A(n, t.metadata);
330
- return he({
272
+ let { score: r, signals: o } = ce(n, t.metadata);
273
+ return fe({
331
274
  candidate: t,
332
275
  providerId: e.id,
333
276
  score: r,
@@ -336,7 +279,7 @@ var r = (e) => {
336
279
  includeRaw: a
337
280
  });
338
281
  }).sort((e, t) => t.score - e.score).slice(0, r);
339
- c[e.id] !== void 0 && de.warn(`fetchMetadata: several providers share the id "${e.id}"`), c[e.id] = {
282
+ c[e.id] !== void 0 && N.warn(`fetchMetadata: several providers share the id "${e.id}"`), c[e.id] = {
340
283
  provider: {
341
284
  id: e.id,
342
285
  name: e.name
@@ -344,38 +287,36 @@ var r = (e) => {
344
287
  matches: o
345
288
  }, l.push(...o);
346
289
  }
347
- let u = [...l].sort((e, t) => t.score - e.score);
348
290
  return {
349
- version: me,
350
- metadata: M(...u.filter((e) => e.accepted).map((e) => e.metadata)),
351
- matches: u,
291
+ version: de,
292
+ matches: [...l].sort((e, t) => t.score - e.score),
352
293
  sources: c,
353
294
  failedProviders: s
354
295
  };
355
- }, P = "ProjectGutenberg", _e = /* @__PURE__ */ new Set(["gutenberg.org", "www.gutenberg.org"]), ve = [
296
+ }, F = "ProjectGutenberg", me = /* @__PURE__ */ new Set(["gutenberg.org", "www.gutenberg.org"]), he = [
356
297
  /^\/ebooks\/(\d+)(?:[./]|$)/i,
357
298
  /^\/files\/(\d+)(?:\/|$)/i,
358
299
  /^\/cache\/epub\/(\d+)(?:\/|$)/i,
359
300
  /^\/(\d+)(?:\/|$)/
360
- ], F = (e) => {
301
+ ], I = (e) => {
361
302
  let t = e.trim();
362
303
  if (!/^\d+$/.test(t)) return;
363
304
  let n = t.replace(/^0+(?=\d)/, "");
364
305
  return n === "0" ? void 0 : n;
365
- }, ye = (e) => {
306
+ }, ge = (e) => {
366
307
  try {
367
308
  let t = new URL(e.trim());
368
- if (t.protocol !== "http:" && t.protocol !== "https:" || !_e.has(t.hostname.toLowerCase())) return;
369
- for (let e of ve) {
309
+ if (t.protocol !== "http:" && t.protocol !== "https:" || !me.has(t.hostname.toLowerCase())) return;
310
+ for (let e of he) {
370
311
  let n = e.exec(t.pathname)?.[1];
371
- if (n !== void 0) return F(n);
312
+ if (n !== void 0) return I(n);
372
313
  }
373
314
  } catch {
374
315
  return;
375
316
  }
376
- }, I = (e) => {
317
+ }, L = (e) => {
377
318
  for (let t of e.identifiers ?? []) {
378
- let e = t.scheme?.trim().toLowerCase(), n = e === "projectgutenberg" ? F(t.value) : e === void 0 || e === "url" || e === "uri" ? ye(t.value) : void 0;
319
+ let e = t.scheme?.trim().toLowerCase(), n = e === "projectgutenberg" ? I(t.value) : e === void 0 || e === "url" || e === "uri" ? ge(t.value) : void 0;
379
320
  if (n !== void 0) return {
380
321
  id: n,
381
322
  identifier: {
@@ -384,34 +325,34 @@ var r = (e) => {
384
325
  }
385
326
  };
386
327
  }
387
- }, L = (e) => typeof e == "object" && !!e && !Array.isArray(e), R = (e, t) => {
328
+ }, R = (e) => typeof e == "object" && !!e && !Array.isArray(e), z = (e, t) => {
388
329
  let n = e[t];
389
330
  if (typeof n != "string") return;
390
331
  let r = n.trim();
391
332
  return r.length > 0 ? r : void 0;
392
- }, z = (e, t) => {
333
+ }, B = (e, t) => {
393
334
  let n = e[t];
394
335
  return typeof n == "number" && Number.isFinite(n) ? n : void 0;
395
- }, B = (e, t) => {
336
+ }, V = (e, t) => {
396
337
  let n = e[t];
397
338
  if (!Array.isArray(n)) return;
398
339
  let r = n.filter((e) => typeof e == "string").map((e) => e.trim()).filter((e) => e.length > 0);
399
340
  return r.length > 0 ? r : void 0;
400
- }, be = (e, t) => {
341
+ }, _e = (e, t) => {
401
342
  let n = e[t];
402
- return Array.isArray(n) ? n.filter(L) : [];
403
- }, xe = (e) => ({
404
- key: R(e, "key"),
405
- title: R(e, "title"),
406
- subtitle: R(e, "subtitle"),
407
- author_name: B(e, "author_name"),
408
- first_publish_year: z(e, "first_publish_year"),
409
- language: B(e, "language"),
410
- subject: B(e, "subject"),
411
- number_of_pages_median: z(e, "number_of_pages_median"),
412
- cover_i: z(e, "cover_i"),
413
- id_project_gutenberg: B(e, "id_project_gutenberg")
414
- }), V = (e) => L(e) ? be(e, "docs").map(xe) : [], Se = {
343
+ return Array.isArray(n) ? n.filter(R) : [];
344
+ }, ve = (e) => ({
345
+ key: z(e, "key"),
346
+ title: z(e, "title"),
347
+ subtitle: z(e, "subtitle"),
348
+ author_name: V(e, "author_name"),
349
+ first_publish_year: B(e, "first_publish_year"),
350
+ language: V(e, "language"),
351
+ subject: V(e, "subject"),
352
+ number_of_pages_median: B(e, "number_of_pages_median"),
353
+ cover_i: B(e, "cover_i"),
354
+ id_project_gutenberg: V(e, "id_project_gutenberg")
355
+ }), H = (e) => R(e) ? _e(e, "docs").map(ve) : [], ye = {
415
356
  afr: "af",
416
357
  alb: "sq",
417
358
  amh: "am",
@@ -516,15 +457,15 @@ var r = (e) => {
516
457
  wel: "cy",
517
458
  yid: "yi",
518
459
  zho: "zh"
519
- }, Ce = /* @__PURE__ */ new Set([
460
+ }, be = /* @__PURE__ */ new Set([
520
461
  "mul",
521
462
  "und",
522
463
  "zxx",
523
464
  "sgn"
524
- ]), H = (e) => {
465
+ ]), U = (e) => {
525
466
  let t = e.trim().toLowerCase();
526
- if (t.length !== 0 && !Ce.has(t)) return Se[t] ?? t;
527
- }, we = 25, Te = {
467
+ if (t.length !== 0 && !be.has(t)) return ye[t] ?? t;
468
+ }, xe = 25, Se = {
528
469
  key: "identifiers",
529
470
  title: "title",
530
471
  subtitle: "title",
@@ -535,8 +476,8 @@ var r = (e) => {
535
476
  number_of_pages_median: "numberOfPages",
536
477
  cover_i: "cover",
537
478
  id_project_gutenberg: "identifiers"
538
- }, U = "OpenLibrary", Ee = "ProjectGutenberg", W = (e) => e.length > 0 ? e : void 0, G = (e, t) => {
539
- let n = e.title !== void 0 && e.subtitle !== void 0 ? `${e.title}: ${e.subtitle}` : e.title, r = W([...new Set((e.language ?? []).map(H).filter((e) => e !== void 0))]), i = [
479
+ }, W = "OpenLibrary", Ce = "ProjectGutenberg", G = (e) => e.length > 0 ? e : void 0, K = (e, t) => {
480
+ let n = e.title !== void 0 && e.subtitle !== void 0 ? `${e.title}: ${e.subtitle}` : e.title, r = G([...new Set((e.language ?? []).map(U).filter((e) => e !== void 0))]), i = [
540
481
  ...t.isbn === void 0 ? [] : [{
541
482
  value: t.isbn,
542
483
  scheme: "ISBN"
@@ -544,14 +485,14 @@ var r = (e) => {
544
485
  ...t.matchedProjectGutenbergIdentifier === void 0 ? [] : [t.matchedProjectGutenbergIdentifier],
545
486
  ...(e.id_project_gutenberg ?? []).map((e) => ({
546
487
  value: e,
547
- scheme: Ee
488
+ scheme: Ce
548
489
  })),
549
490
  ...e.key === void 0 ? [] : [{
550
491
  value: e.key,
551
- scheme: U
492
+ scheme: W
552
493
  }]
553
494
  ];
554
- return j({
495
+ return P({
555
496
  title: n,
556
497
  cover: e.cover_i === void 0 ? void 0 : {
557
498
  uri: `${t.coversBaseUrl}/b/id/${e.cover_i}-L.jpg`,
@@ -560,16 +501,16 @@ var r = (e) => {
560
501
  },
561
502
  publication: e.first_publish_year === void 0 ? void 0 : { original: { date: { year: e.first_publish_year } } },
562
503
  languages: r,
563
- subjects: W((e.subject ?? []).slice(0, 25)),
564
- contributors: W((e.author_name ?? []).map((e) => ({
504
+ subjects: G((e.subject ?? []).slice(0, 25)),
505
+ contributors: G((e.author_name ?? []).map((e) => ({
565
506
  name: e,
566
507
  roles: ["author"]
567
508
  }))),
568
509
  numberOfPages: e.number_of_pages_median,
569
510
  isbn: t.isbn,
570
- identifiers: W(i)
511
+ identifiers: G(i)
571
512
  });
572
- }, K = "openLibrary", De = "https://openlibrary.org", Oe = "https://covers.openlibrary.org", ke = [
513
+ }, we = "openLibrary", Te = "https://openlibrary.org", Ee = "https://covers.openlibrary.org", De = [
573
514
  "key",
574
515
  "title",
575
516
  "subtitle",
@@ -580,7 +521,7 @@ var r = (e) => {
580
521
  "number_of_pages_median",
581
522
  "cover_i",
582
523
  "id_project_gutenberg"
583
- ].join(","), Ae = (e) => {
524
+ ].join(","), Oe = (e) => {
584
525
  let t = e.title?.trim();
585
526
  if (t === void 0 || t.length === 0) return;
586
527
  let n = r(e)[0];
@@ -588,11 +529,11 @@ var r = (e) => {
588
529
  title: t,
589
530
  ...n === void 0 ? {} : { author: n }
590
531
  };
591
- }, je = (e = {}) => {
592
- let t = e.baseUrl ?? De, n = e.coversBaseUrl ?? Oe, r = async (n, r) => {
532
+ }, ke = (e = {}) => {
533
+ let t = e.baseUrl ?? Te, n = e.coversBaseUrl ?? Ee, r = async (n, r) => {
593
534
  let i = new URL("/search.json", t);
594
535
  for (let [e, t] of Object.entries(n)) i.searchParams.set(e, t);
595
- i.searchParams.set("fields", ke), i.searchParams.set("limit", String(r.limit));
536
+ i.searchParams.set("fields", De), i.searchParams.set("limit", String(r.limit));
596
537
  let a = await (e.fetch ?? globalThis.fetch)(i.toString(), {
597
538
  signal: r.signal,
598
539
  headers: {
@@ -600,10 +541,10 @@ var r = (e) => {
600
541
  ...e.userAgent === void 0 ? {} : { "User-Agent": e.userAgent }
601
542
  }
602
543
  });
603
- if (!a.ok) throw new N(a.status, `Open Library search failed with status ${a.status}`);
604
- return V(await a.json());
544
+ if (!a.ok) throw new j(a.status, `Open Library search failed with status ${a.status}`);
545
+ return H(await a.json());
605
546
  }, i = (e, r = {}) => e.map((e) => ({
606
- metadata: G(e, {
547
+ metadata: K(e, {
607
548
  coversBaseUrl: n,
608
549
  isbn: r.isbn,
609
550
  matchedProjectGutenbergIdentifier: r.confirmedProjectGutenberg?.identifier
@@ -613,10 +554,10 @@ var r = (e) => {
613
554
  raw: e
614
555
  }));
615
556
  return {
616
- id: K,
557
+ id: we,
617
558
  name: "Open Library",
618
559
  search: async (e, t) => {
619
- let n = e.isbn?.trim() || void 0, a = I(e);
560
+ let n = e.isbn?.trim() || void 0, a = L(e);
620
561
  if (n !== void 0) {
621
562
  let e = await r({ isbn: n }, t);
622
563
  if (e.length > 0) return i(e, { isbn: n });
@@ -625,11 +566,11 @@ var r = (e) => {
625
566
  let e = await r({ q: `id_project_gutenberg:${a.id}` }, t);
626
567
  if (e.length > 0) return i(e, { confirmedProjectGutenberg: a });
627
568
  }
628
- let o = Ae(e);
569
+ let o = Oe(e);
629
570
  return o === void 0 ? [] : i(await r(o, t));
630
571
  }
631
572
  };
632
- }, q = (e) => e.includes(":") ? e.slice(e.lastIndexOf(":") + 1) : e, Me = (e) => e.type === "element", J = (e, t) => e.children.filter((e) => Me(e) && q(e.name).toLowerCase() === t.toLowerCase()), Y = (e, t) => J(e, t)[0], X = (e) => {
573
+ }, q = (e) => e.includes(":") ? e.slice(e.lastIndexOf(":") + 1) : e, Ae = (e) => e.type === "element", J = (e, t) => e.children.filter((e) => Ae(e) && q(e.name).toLowerCase() === t.toLowerCase()), Y = (e, t) => J(e, t)[0], X = (e) => {
633
574
  let t = e?.val.trim();
634
575
  return t !== void 0 && t.length > 0 ? t : void 0;
635
576
  }, Z = (e, t) => {
@@ -638,18 +579,18 @@ var r = (e) => {
638
579
  let e = r.trim();
639
580
  if (e.length > 0) return e;
640
581
  }
641
- }, Ne = (e, t) => J(e, t).flatMap((e) => {
582
+ }, je = (e, t) => J(e, t).flatMap((e) => {
642
583
  let t = X(Y(Y(e, "Description") ?? e, "value"));
643
584
  return t === void 0 ? [] : [t];
644
- }), Pe = (e) => {
585
+ }), Me = (e) => {
645
586
  let t = Z(e, "about"), n = t === void 0 ? void 0 : /(?:^|\/)ebooks\/(\d+)$/.exec(t)?.[1];
646
587
  if (n === void 0) return;
647
588
  let r = n.replace(/^0+(?=\d)/, "");
648
589
  return r === "0" ? void 0 : r;
649
- }, Fe = (e) => {
590
+ }, Ne = (e) => {
650
591
  let t = [];
651
592
  for (let n of e.children) {
652
- if (!Me(n)) continue;
593
+ if (!Ae(n)) continue;
653
594
  let e = n.name.toLowerCase() === "dcterms:creator", r = n.name.toLowerCase().startsWith("marcrel:");
654
595
  if (!e && !r) continue;
655
596
  let i = X(Y(Y(n, "agent") ?? n, "name"));
@@ -659,10 +600,10 @@ var r = (e) => {
659
600
  });
660
601
  }
661
602
  return t;
662
- }, Ie = (e) => J(e, "subject").flatMap((e) => {
603
+ }, Pe = (e) => J(e, "subject").flatMap((e) => {
663
604
  let t = Y(e, "Description"), n = t === void 0 ? void 0 : Z(Y(t, "memberOf") ?? t, "resource"), r = X(t === void 0 ? void 0 : Y(t, "value"));
664
605
  return r !== void 0 && n?.endsWith("/LCSH") === !0 ? [r] : [];
665
- }), Le = (e) => {
606
+ }), Fe = (e) => {
666
607
  let t = J(e, "hasFormat").flatMap((e) => {
667
608
  let t = Y(e, "file");
668
609
  if (t === void 0) return [];
@@ -673,7 +614,7 @@ var r = (e) => {
673
614
  }];
674
615
  });
675
616
  return t.find((e) => /\.cover\.medium\./i.test(e.uri)) ?? t[0];
676
- }, Q = (e) => e.length > 0 ? e : void 0, Re = (e) => {
617
+ }, Q = (e) => e.length > 0 ? e : void 0, Ie = (e) => {
677
618
  let t;
678
619
  try {
679
620
  t = new n(e);
@@ -684,9 +625,9 @@ var r = (e) => {
684
625
  if (q(t.name).toLowerCase() !== "rdf") return;
685
626
  let r = Y(t, "ebook");
686
627
  if (r === void 0) return;
687
- let i = Pe(r);
628
+ let i = Me(r);
688
629
  if (i === void 0) return;
689
- let a = [...new Set(Ne(r, "language"))], o = [...new Set(Ie(r))], s = [...new Set(Ne(r, "bookshelf"))], c = Fe(r);
630
+ let a = [...new Set(je(r, "language"))], o = [...new Set(Pe(r))], s = [...new Set(je(r, "bookshelf"))], c = Ne(r);
690
631
  return {
691
632
  id: i,
692
633
  title: X(Y(r, "title")),
@@ -700,9 +641,9 @@ var r = (e) => {
700
641
  subjects: Q(o),
701
642
  bookshelves: Q(s),
702
643
  contributors: Q(c),
703
- cover: Le(r)
644
+ cover: Fe(r)
704
645
  };
705
- }, ze = 25, Be = {
646
+ }, Le = 25, Re = {
706
647
  id: "identifiers",
707
648
  title: "title",
708
649
  publisher: "publication.edition.publisher",
@@ -716,7 +657,7 @@ var r = (e) => {
716
657
  bookshelves: "subjects",
717
658
  contributors: "contributors",
718
659
  cover: "cover"
719
- }, Ve = {
660
+ }, ze = {
720
661
  art: "artist",
721
662
  aut: "author",
722
663
  clr: "colorist",
@@ -725,17 +666,17 @@ var r = (e) => {
725
666
  ill: "illustrator",
726
667
  nrt: "narrator",
727
668
  trl: "translator"
728
- }, He = (e) => {
669
+ }, Be = (e) => {
729
670
  let t = /* @__PURE__ */ new Map();
730
671
  for (let n of e.contributors ?? []) {
731
- let e = n.name.trim().toLowerCase(), r = Ve[n.role.trim().toLowerCase()] ?? n.role, i = t.get(e);
672
+ let e = n.name.trim().toLowerCase(), r = ze[n.role.trim().toLowerCase()] ?? n.role, i = t.get(e);
732
673
  i === void 0 ? t.set(e, {
733
674
  name: n.name,
734
675
  roles: [r]
735
676
  }) : i.roles.includes(r) || i.roles.push(r);
736
677
  }
737
678
  return t.size > 0 ? [...t.values()] : void 0;
738
- }, Ue = (e) => {
679
+ }, Ve = (e) => {
739
680
  if (e === void 0) return;
740
681
  let t = /^(\d{4})(?:-(\d{2})(?:-(\d{2}))?)?$/.exec(e.trim());
741
682
  if (t === null) return;
@@ -745,53 +686,53 @@ var r = (e) => {
745
686
  ...r === void 0 ? {} : { month: r },
746
687
  ...i === void 0 ? {} : { day: i }
747
688
  };
748
- }, We = (e, t) => e.split("$").slice(1).flatMap((e) => e[0]?.toLowerCase() === t.toLowerCase() ? [e.slice(1).trim()] : []).filter((e) => e.length > 0), Ge = (e) => {
689
+ }, $ = (e, t) => e.split("$").slice(1).flatMap((e) => e[0]?.toLowerCase() === t.toLowerCase() ? [e.slice(1).trim()] : []).filter((e) => e.length > 0), He = (e) => {
749
690
  if (e === void 0) return;
750
- let t = We(e, "b"), n = (t.length === 1 ? t[0] : void 0)?.replace(/[\s,;:/]+$/u, "").trim(), r = We(e, "c"), i = [...new Set(r.flatMap((e) => [...e.matchAll(/\d{4}/g)].flatMap((e) => e[0] === void 0 ? [] : [Number(e[0])])))], a = j({
691
+ let t = $(e, "b"), n = (t.length === 1 ? t[0] : void 0)?.replace(/[\s,;:/]+$/u, "").trim(), r = $(e, "c"), i = [...new Set(r.flatMap((e) => [...e.matchAll(/\d{4}/g)].flatMap((e) => e[0] === void 0 ? [] : [Number(e[0])])))], a = P({
751
692
  date: i.length === 1 ? { year: i[0] } : void 0,
752
693
  publisher: n !== void 0 && n.length > 0 && !/^\[?s\.n\.?\]?$/i.test(n) ? n : void 0
753
694
  });
754
695
  return a.date !== void 0 || a.publisher !== void 0 ? a : void 0;
755
- }, Ke = (e, t) => {
696
+ }, Ue = (e, t) => {
756
697
  try {
757
698
  let n = new URL(e, t);
758
699
  return n.protocol === "http:" || n.protocol === "https:" ? n.toString() : void 0;
759
700
  } catch {
760
701
  return;
761
702
  }
762
- }, qe = (e) => e.length > 0 ? e : void 0, Je = (e, t) => {
703
+ }, We = (e) => e.length > 0 ? e : void 0, Ge = (e, t) => {
763
704
  let n = [t.matchedIdentifier, {
764
705
  value: e.id,
765
- scheme: P
766
- }].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 : Ke(e.cover.uri, t.baseUrl), a = i === void 0 ? void 0 : {
706
+ scheme: F
707
+ }].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 : Ue(e.cover.uri, t.baseUrl), a = i === void 0 ? void 0 : {
767
708
  uri: i,
768
709
  mediaType: e.cover?.mediaType,
769
710
  confidence: "derived"
770
- }, o = j({
771
- date: Ue(e.issued),
711
+ }, o = P({
712
+ date: Ve(e.issued),
772
713
  publisher: e.publisher
773
- }), s = j({
774
- original: Ge(e.originalPublication),
714
+ }), s = P({
715
+ original: He(e.originalPublication),
775
716
  edition: o.date !== void 0 || o.publisher !== void 0 ? o : void 0
776
717
  });
777
- return j({
718
+ return P({
778
719
  title: e.title,
779
720
  publication: s.original !== void 0 || s.edition !== void 0 ? s : void 0,
780
721
  description: e.summary ?? e.description,
781
722
  rights: e.rights,
782
- languages: qe([...new Set(e.languages ?? [])]),
783
- subjects: qe(r),
784
- contributors: He(e),
723
+ languages: We([...new Set(e.languages ?? [])]),
724
+ subjects: We(r),
725
+ contributors: Be(e),
785
726
  identifiers: n,
786
727
  cover: a
787
728
  });
788
- }, $ = "projectGutenberg", Ye = "https://www.gutenberg.org", Xe = (e = {}) => {
789
- let t = e.baseUrl ?? Ye;
729
+ }, Ke = "projectGutenberg", qe = "https://www.gutenberg.org", Je = (e = {}) => {
730
+ let t = e.baseUrl ?? qe;
790
731
  return {
791
- id: $,
732
+ id: Ke,
792
733
  name: "Project Gutenberg",
793
734
  search: async (n, r) => {
794
- let i = I(n);
735
+ let i = L(n);
795
736
  if (i === void 0) return [];
796
737
  let a = new URL(`/cache/epub/${i.id}/pg${i.id}.rdf`, t), o = await (e.fetch ?? globalThis.fetch)(a.toString(), {
797
738
  signal: r.signal,
@@ -801,28 +742,28 @@ var r = (e) => {
801
742
  }
802
743
  });
803
744
  if (o.status === 404) return [];
804
- if (!o.ok) throw new N(o.status, `Project Gutenberg metadata lookup failed with status ${o.status}`);
805
- let s = Re(await o.text());
745
+ if (!o.ok) throw new j(o.status, `Project Gutenberg metadata lookup failed with status ${o.status}`);
746
+ let s = Ie(await o.text());
806
747
  if (s === void 0 || s.id !== i.id) throw Error(`Project Gutenberg RDF did not contain the requested eBook ${i.id}`);
807
748
  let c = new URL(`/ebooks/${i.id}`, t).toString();
808
749
  return [{
809
750
  id: s.id,
810
751
  url: c,
811
752
  raw: s,
812
- metadata: Je(s, {
753
+ metadata: Ge(s, {
813
754
  baseUrl: t,
814
755
  matchedIdentifier: i.identifier
815
756
  })
816
757
  }];
817
758
  }
818
759
  };
819
- }, Ze = (e) => [
760
+ }, Ye = (e) => [
820
761
  e.title,
821
762
  e.isbn,
822
763
  e.gtin,
823
764
  e.belongsTo?.series?.[0]?.name
824
765
  ].some((e) => e !== void 0 && e.trim().length > 0) || (e.identifiers ?? []).length > 0 || r(e).length > 0;
825
766
  //#endregion
826
- export { E as METADATA_MATCH_WEIGHTS, N as MetadataProviderResponseError, U as OPEN_LIBRARY_IDENTIFIER_SCHEME, we as OPEN_LIBRARY_MAX_SUBJECTS, K as OPEN_LIBRARY_PROVIDER_ID, P as PROJECT_GUTENBERG_IDENTIFIER_SCHEME, ze as PROJECT_GUTENBERG_MAX_SUBJECTS, $ as PROJECT_GUTENBERG_PROVIDER_ID, je as createOpenLibraryProvider, Xe as createProjectGutenbergProvider, ge as fetchMetadata, Ze as hasSearchTerms, H as marcLanguageToBcp47, M as mergeResolvedMetadata, r as metadataAuthors, l as normalizeForComparison, Te as openLibraryMetadataHomes, V as parseOpenLibrarySearchResponse, Re as parseProjectGutenbergRdf, T as personNameSimilarity, I as projectGutenbergLookupFromMetadata, Be as projectGutenbergMetadataHomes, G as resolveOpenLibraryDoc, Je as resolveProjectGutenbergRecord, ue as responseErrorStatus, A as scoreMetadataCandidate, d as textSimilarity, C as titleSimilarity, o as toIsbn13 };
767
+ export { D as METADATA_MATCH_WEIGHTS, j as MetadataProviderResponseError, W as OPEN_LIBRARY_IDENTIFIER_SCHEME, xe as OPEN_LIBRARY_MAX_SUBJECTS, we as OPEN_LIBRARY_PROVIDER_ID, F as PROJECT_GUTENBERG_IDENTIFIER_SCHEME, Le as PROJECT_GUTENBERG_MAX_SUBJECTS, Ke as PROJECT_GUTENBERG_PROVIDER_ID, ke as createOpenLibraryProvider, Je as createProjectGutenbergProvider, pe as fetchMetadata, Ye as hasSearchTerms, U as marcLanguageToBcp47, r as metadataAuthors, l as normalizeForComparison, Se as openLibraryMetadataHomes, H as parseOpenLibrarySearchResponse, Ie as parseProjectGutenbergRdf, E as personNameSimilarity, L as projectGutenbergLookupFromMetadata, Re as projectGutenbergMetadataHomes, K as resolveOpenLibraryDoc, Ge as resolveProjectGutenbergRecord, M as responseErrorStatus, ce as scoreMetadataCandidate, d as textSimilarity, w as titleSimilarity, o as toIsbn13 };
827
768
 
828
769
  //# sourceMappingURL=index.js.map