@prose-reader/metadata-fetcher 1.354.0 → 1.356.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.cjs +1 -1
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +90 -89
- package/dist/index.js.map +1 -1
- package/dist/providers/googleBooks/search.d.ts +3 -0
- package/package.json +4 -4
package/dist/index.js
CHANGED
|
@@ -584,34 +584,34 @@ var c = (e) => {
|
|
|
584
584
|
identifiers: w,
|
|
585
585
|
cover: D
|
|
586
586
|
});
|
|
587
|
-
}, Qe = (e) => G(e.volumeInfo?.canonicalVolumeLink) ?? G(e.volumeInfo?.infoLink) ?? (e.id === void 0 ? void 0 : `https://books.google.com/books?id=${encodeURIComponent(e.id)}`), $e = 40, et =
|
|
587
|
+
}, Qe = (e) => G(e.volumeInfo?.canonicalVolumeLink) ?? G(e.volumeInfo?.infoLink) ?? (e.id === void 0 ? void 0 : `https://books.google.com/books?id=${encodeURIComponent(e.id)}`), $e = 40, et = 1, tt = 4, nt = 3, rt = 1e3, it = 3e3, at = /* @__PURE__ */ new Set([
|
|
588
588
|
500,
|
|
589
589
|
502,
|
|
590
590
|
503,
|
|
591
591
|
504
|
|
592
|
-
]),
|
|
593
|
-
let t = e.title
|
|
594
|
-
if (t
|
|
595
|
-
let n = e.authors?.
|
|
592
|
+
]), ot = /["\\]+/g, st = /:/g, ct = /(^|\s)-+/g, lt = /\s+/g, ut = (e) => e.replace(ot, " ").replace(st, " ").replace(ct, " ").replace(lt, " ").trim(), dt = (e) => e.length > 0, ft = (e) => {
|
|
593
|
+
let t = ut(e.title ?? "");
|
|
594
|
+
if (t.length === 0) return;
|
|
595
|
+
let n = e.authors?.map(ut).find(dt);
|
|
596
596
|
return {
|
|
597
597
|
title: t,
|
|
598
598
|
...n === void 0 ? {} : { author: n }
|
|
599
599
|
};
|
|
600
|
-
},
|
|
600
|
+
}, pt = (e) => {
|
|
601
601
|
let t = U(e);
|
|
602
602
|
return t === void 0 ? void 0 : {
|
|
603
603
|
volume: t,
|
|
604
604
|
raw: e
|
|
605
605
|
};
|
|
606
|
-
},
|
|
607
|
-
let t =
|
|
606
|
+
}, mt = (e) => F(e) ? z(e, "items").flatMap((e) => {
|
|
607
|
+
let t = pt(e);
|
|
608
608
|
return t === void 0 ? [] : [t];
|
|
609
609
|
}) : [], K = (e, t = {}) => e.map(({ volume: e, raw: n }) => ({
|
|
610
610
|
metadata: Ze(e, t),
|
|
611
611
|
id: e.id,
|
|
612
612
|
url: Qe(e),
|
|
613
613
|
raw: n
|
|
614
|
-
})),
|
|
614
|
+
})), ht = (e) => {
|
|
615
615
|
let t = `${e.baseUrl.replace(/\/+$/, "")}/volumes`, r = async (t, n, r = !1) => (t.searchParams.set("key", e.apiKey), je(async () => {
|
|
616
616
|
let i = await e.fetch(t.toString(), {
|
|
617
617
|
signal: n.signal,
|
|
@@ -622,26 +622,27 @@ var c = (e) => {
|
|
|
622
622
|
return i;
|
|
623
623
|
}
|
|
624
624
|
}, {
|
|
625
|
-
attempts:
|
|
626
|
-
initialDelayMs:
|
|
627
|
-
maxDelayMs:
|
|
625
|
+
attempts: nt,
|
|
626
|
+
initialDelayMs: rt,
|
|
627
|
+
maxDelayMs: it,
|
|
628
628
|
signal: n.signal,
|
|
629
629
|
shouldRetry: (e) => {
|
|
630
630
|
let t = N(e);
|
|
631
|
-
return t === void 0 ||
|
|
631
|
+
return t === void 0 || at.has(t);
|
|
632
632
|
}
|
|
633
633
|
})), i = async (e, n) => {
|
|
634
634
|
let i = await r(new URL(`${t}/${encodeURIComponent(e)}`), n, !0);
|
|
635
635
|
if (i === void 0) return;
|
|
636
|
-
let a =
|
|
636
|
+
let a = pt(await i.json());
|
|
637
637
|
if (a?.volume.id !== e) throw Error(`Google Books response did not contain the requested volume ${e}`);
|
|
638
638
|
return a;
|
|
639
|
-
}, a = async (e, n) => {
|
|
640
|
-
|
|
641
|
-
|
|
642
|
-
|
|
643
|
-
|
|
644
|
-
|
|
639
|
+
}, a = async (e, n, i) => {
|
|
640
|
+
let a = Math.min(Math.ceil(n.limit * i), $e);
|
|
641
|
+
if (a <= 0) return [];
|
|
642
|
+
let o = new URL(t);
|
|
643
|
+
o.searchParams.set("q", e), o.searchParams.set("maxResults", String(a)), o.searchParams.set("orderBy", "relevance"), o.searchParams.set("printType", "books");
|
|
644
|
+
let s = await r(o, n);
|
|
645
|
+
return s === void 0 ? [] : mt(await s.json());
|
|
645
646
|
};
|
|
646
647
|
return async (e, t) => {
|
|
647
648
|
let r = Fe(e);
|
|
@@ -651,50 +652,50 @@ var c = (e) => {
|
|
|
651
652
|
}
|
|
652
653
|
let o = n(e.identifiers);
|
|
653
654
|
if (o !== void 0) {
|
|
654
|
-
let e = await a(`isbn:${o}`, t);
|
|
655
|
+
let e = await a(`isbn:${o}`, t, et);
|
|
655
656
|
if (e.length > 0) return K(e, { matchedIsbn: o });
|
|
656
657
|
}
|
|
657
|
-
let s =
|
|
658
|
+
let s = ft(e);
|
|
658
659
|
if (s === void 0) return [];
|
|
659
|
-
let c = `intitle:${
|
|
660
|
-
return u.length > 0 || s.author === void 0 ? K(u) : K(await a(c, t));
|
|
660
|
+
let c = `intitle:${s.title}`, l = s.author === void 0 ? c : `${c} inauthor:${s.author}`, u = await a(l, t, tt);
|
|
661
|
+
return u.length > 0 || s.author === void 0 ? K(u) : K(await a(c, t, tt));
|
|
661
662
|
};
|
|
662
|
-
},
|
|
663
|
+
}, gt = "googleBooks", _t = "https://www.googleapis.com/books/v1", vt = (e) => {
|
|
663
664
|
let t = e.apiKey.trim();
|
|
664
665
|
if (t.length === 0) throw Error("createGoogleBooksProvider requires a non-empty apiKey");
|
|
665
666
|
return {
|
|
666
|
-
id:
|
|
667
|
+
id: gt,
|
|
667
668
|
name: "Google Books",
|
|
668
|
-
search:
|
|
669
|
+
search: ht({
|
|
669
670
|
apiKey: t,
|
|
670
|
-
baseUrl: e.baseUrl ??
|
|
671
|
+
baseUrl: e.baseUrl ?? _t,
|
|
671
672
|
fetch: e.fetch ?? globalThis.fetch
|
|
672
673
|
})
|
|
673
674
|
};
|
|
674
|
-
},
|
|
675
|
+
}, yt = "ProjectGutenberg", bt = /* @__PURE__ */ new Set(["gutenberg.org", "www.gutenberg.org"]), xt = [
|
|
675
676
|
/^\/ebooks\/(\d+)(?:[./]|$)/i,
|
|
676
677
|
/^\/files\/(\d+)(?:\/|$)/i,
|
|
677
678
|
/^\/cache\/epub\/(\d+)(?:\/|$)/i,
|
|
678
679
|
/^\/(\d+)(?:\/|$)/
|
|
679
|
-
],
|
|
680
|
+
], St = (e) => {
|
|
680
681
|
let t = e.trim();
|
|
681
682
|
if (!/^\d+$/.test(t)) return;
|
|
682
683
|
let n = t.replace(/^0+(?=\d)/, "");
|
|
683
684
|
return n === "0" ? void 0 : n;
|
|
684
|
-
},
|
|
685
|
+
}, Ct = (e) => {
|
|
685
686
|
try {
|
|
686
687
|
let t = new URL(e.trim());
|
|
687
|
-
if (t.protocol !== "http:" && t.protocol !== "https:" || !
|
|
688
|
-
for (let e of
|
|
688
|
+
if (t.protocol !== "http:" && t.protocol !== "https:" || !bt.has(t.hostname.toLowerCase())) return;
|
|
689
|
+
for (let e of xt) {
|
|
689
690
|
let n = e.exec(t.pathname)?.[1];
|
|
690
|
-
if (n !== void 0) return
|
|
691
|
+
if (n !== void 0) return St(n);
|
|
691
692
|
}
|
|
692
693
|
} catch {
|
|
693
694
|
return;
|
|
694
695
|
}
|
|
695
|
-
},
|
|
696
|
+
}, wt = (e) => {
|
|
696
697
|
for (let t of e.identifiers ?? []) {
|
|
697
|
-
let e = t.scheme.trim().toLowerCase(), n = e === "projectgutenberg" ?
|
|
698
|
+
let e = t.scheme.trim().toLowerCase(), n = e === "projectgutenberg" ? St(t.value) : e === "unknown" || e === "url" || e === "uri" ? Ct(t.value) : void 0;
|
|
698
699
|
if (n !== void 0) return {
|
|
699
700
|
id: n,
|
|
700
701
|
identifier: {
|
|
@@ -703,7 +704,7 @@ var c = (e) => {
|
|
|
703
704
|
}
|
|
704
705
|
};
|
|
705
706
|
}
|
|
706
|
-
},
|
|
707
|
+
}, Tt = (e) => ({
|
|
707
708
|
key: I(e, "key"),
|
|
708
709
|
title: I(e, "title"),
|
|
709
710
|
subtitle: I(e, "subtitle"),
|
|
@@ -716,7 +717,7 @@ var c = (e) => {
|
|
|
716
717
|
ratings_count: L(e, "ratings_count"),
|
|
717
718
|
cover_i: L(e, "cover_i"),
|
|
718
719
|
id_project_gutenberg: R(e, "id_project_gutenberg")
|
|
719
|
-
}),
|
|
720
|
+
}), Et = (e) => F(e) ? z(e, "docs").map(Tt) : [], Dt = {
|
|
720
721
|
afr: "af",
|
|
721
722
|
alb: "sq",
|
|
722
723
|
amh: "am",
|
|
@@ -821,19 +822,19 @@ var c = (e) => {
|
|
|
821
822
|
wel: "cy",
|
|
822
823
|
yid: "yi",
|
|
823
824
|
zho: "zh"
|
|
824
|
-
},
|
|
825
|
+
}, Ot = /* @__PURE__ */ new Set([
|
|
825
826
|
"mul",
|
|
826
827
|
"und",
|
|
827
828
|
"zxx",
|
|
828
829
|
"sgn"
|
|
829
|
-
]),
|
|
830
|
+
]), kt = (e) => {
|
|
830
831
|
let t = e.trim().toLowerCase();
|
|
831
|
-
if (t.length !== 0 && !
|
|
832
|
-
},
|
|
832
|
+
if (t.length !== 0 && !Ot.has(t)) return Dt[t] ?? t;
|
|
833
|
+
}, At = 25, jt = "OpenLibrary", Mt = "ProjectGutenberg", q = (e) => e.length > 0 ? e : void 0, Nt = (e, t) => {
|
|
833
834
|
let { title: n, subtitle: r, language: i, key: a, author_name: o, first_publish_year: s, subject: c, number_of_pages_median: l, ratings_average: u, ratings_count: d, cover_i: f, id_project_gutenberg: p, ...m } = e, h = q([...n === void 0 ? [] : [{ value: n }], ...r === void 0 ? [] : [{
|
|
834
835
|
value: r,
|
|
835
836
|
type: "subtitle"
|
|
836
|
-
}]]), g = q([...new Set((i ?? []).map(
|
|
837
|
+
}]]), g = q([...new Set((i ?? []).map(kt).filter((e) => e !== void 0))]), _ = [
|
|
837
838
|
...t.isbn === void 0 ? [] : [{
|
|
838
839
|
value: t.isbn,
|
|
839
840
|
scheme: "ISBN"
|
|
@@ -841,11 +842,11 @@ var c = (e) => {
|
|
|
841
842
|
...t.matchedProjectGutenbergIdentifier === void 0 ? [] : [t.matchedProjectGutenbergIdentifier],
|
|
842
843
|
...(p ?? []).map((e) => ({
|
|
843
844
|
value: e,
|
|
844
|
-
scheme:
|
|
845
|
+
scheme: Mt
|
|
845
846
|
})),
|
|
846
847
|
...a === void 0 ? [] : [{
|
|
847
848
|
value: a,
|
|
848
|
-
scheme:
|
|
849
|
+
scheme: jt
|
|
849
850
|
}]
|
|
850
851
|
];
|
|
851
852
|
return P({
|
|
@@ -866,7 +867,7 @@ var c = (e) => {
|
|
|
866
867
|
aggregateRating: He(u, d),
|
|
867
868
|
identifiers: q(_)
|
|
868
869
|
});
|
|
869
|
-
},
|
|
870
|
+
}, Pt = "openLibrary", Ft = "https://openlibrary.org", It = "https://covers.openlibrary.org", Lt = [
|
|
870
871
|
"key",
|
|
871
872
|
"title",
|
|
872
873
|
"subtitle",
|
|
@@ -879,7 +880,7 @@ var c = (e) => {
|
|
|
879
880
|
"ratings_count",
|
|
880
881
|
"cover_i",
|
|
881
882
|
"id_project_gutenberg"
|
|
882
|
-
].join(","),
|
|
883
|
+
].join(","), Rt = (e) => {
|
|
883
884
|
let t = e.title?.trim();
|
|
884
885
|
if (t === void 0 || t.length === 0) return;
|
|
885
886
|
let n = e.authors?.find((e) => e.trim().length > 0)?.trim();
|
|
@@ -887,11 +888,11 @@ var c = (e) => {
|
|
|
887
888
|
title: t,
|
|
888
889
|
...n === void 0 ? {} : { author: n }
|
|
889
890
|
};
|
|
890
|
-
},
|
|
891
|
-
let t = e.baseUrl ??
|
|
891
|
+
}, zt = (e = {}) => {
|
|
892
|
+
let t = e.baseUrl ?? Ft, r = e.coversBaseUrl ?? It, i = async (n, r) => {
|
|
892
893
|
let i = new URL("/search.json", t);
|
|
893
894
|
for (let [e, t] of Object.entries(n)) i.searchParams.set(e, t);
|
|
894
|
-
i.searchParams.set("fields",
|
|
895
|
+
i.searchParams.set("fields", Lt), i.searchParams.set("limit", String(r.limit));
|
|
895
896
|
let a = await (e.fetch ?? globalThis.fetch)(i.toString(), {
|
|
896
897
|
signal: r.signal,
|
|
897
898
|
headers: {
|
|
@@ -900,9 +901,9 @@ var c = (e) => {
|
|
|
900
901
|
}
|
|
901
902
|
});
|
|
902
903
|
if (!a.ok) throw new M(a.status, `Open Library search failed with status ${a.status}`);
|
|
903
|
-
return
|
|
904
|
+
return Et(await a.json());
|
|
904
905
|
}, a = (e, n = {}) => e.map((e) => ({
|
|
905
|
-
metadata:
|
|
906
|
+
metadata: Nt(e, {
|
|
906
907
|
coversBaseUrl: r,
|
|
907
908
|
isbn: n.isbn,
|
|
908
909
|
matchedProjectGutenbergIdentifier: n.confirmedProjectGutenberg?.identifier
|
|
@@ -912,10 +913,10 @@ var c = (e) => {
|
|
|
912
913
|
raw: e
|
|
913
914
|
}));
|
|
914
915
|
return {
|
|
915
|
-
id:
|
|
916
|
+
id: Pt,
|
|
916
917
|
name: "Open Library",
|
|
917
918
|
search: async (e, t) => {
|
|
918
|
-
let r = n(e.identifiers), o =
|
|
919
|
+
let r = n(e.identifiers), o = wt(e);
|
|
919
920
|
if (r !== void 0) {
|
|
920
921
|
let e = await i({ isbn: r }, t);
|
|
921
922
|
if (e.length > 0) return a(e, { isbn: r });
|
|
@@ -924,7 +925,7 @@ var c = (e) => {
|
|
|
924
925
|
let e = await i({ q: `id_project_gutenberg:${o.id}` }, t);
|
|
925
926
|
if (e.length > 0) return a(e, { confirmedProjectGutenberg: o });
|
|
926
927
|
}
|
|
927
|
-
let s =
|
|
928
|
+
let s = Rt(e);
|
|
928
929
|
if (s === void 0) return [];
|
|
929
930
|
let c = await i(s, t);
|
|
930
931
|
if (c.length > 0) return a(c);
|
|
@@ -932,7 +933,7 @@ var c = (e) => {
|
|
|
932
933
|
return a(await i({ q: l }, t));
|
|
933
934
|
}
|
|
934
935
|
};
|
|
935
|
-
}, J = (e) => e.includes(":") ? e.slice(e.lastIndexOf(":") + 1) : e,
|
|
936
|
+
}, J = (e) => e.includes(":") ? e.slice(e.lastIndexOf(":") + 1) : e, Bt = (e) => e.type === "element", Y = (e, t) => e.children.filter((e) => Bt(e) && J(e.name).toLowerCase() === t.toLowerCase()), X = (e, t) => Y(e, t)[0], Z = (e) => {
|
|
936
937
|
let t = e?.val.trim();
|
|
937
938
|
return t !== void 0 && t.length > 0 ? t : void 0;
|
|
938
939
|
}, Q = (e, t) => {
|
|
@@ -941,18 +942,18 @@ var c = (e) => {
|
|
|
941
942
|
let e = r.trim();
|
|
942
943
|
if (e.length > 0) return e;
|
|
943
944
|
}
|
|
944
|
-
},
|
|
945
|
+
}, Vt = (e, t) => Y(e, t).flatMap((e) => {
|
|
945
946
|
let t = Z(X(X(e, "Description") ?? e, "value"));
|
|
946
947
|
return t === void 0 ? [] : [t];
|
|
947
|
-
}),
|
|
948
|
+
}), Ht = (e) => {
|
|
948
949
|
let t = Q(e, "about"), n = t === void 0 ? void 0 : /(?:^|\/)ebooks\/(\d+)$/.exec(t)?.[1];
|
|
949
950
|
if (n === void 0) return;
|
|
950
951
|
let r = n.replace(/^0+(?=\d)/, "");
|
|
951
952
|
return r === "0" ? void 0 : r;
|
|
952
|
-
},
|
|
953
|
+
}, Ut = (e) => {
|
|
953
954
|
let t = [];
|
|
954
955
|
for (let n of e.children) {
|
|
955
|
-
if (!
|
|
956
|
+
if (!Bt(n)) continue;
|
|
956
957
|
let e = n.name.toLowerCase() === "dcterms:creator", r = n.name.toLowerCase().startsWith("marcrel:");
|
|
957
958
|
if (!e && !r) continue;
|
|
958
959
|
let i = Z(X(X(n, "agent") ?? n, "name"));
|
|
@@ -962,10 +963,10 @@ var c = (e) => {
|
|
|
962
963
|
});
|
|
963
964
|
}
|
|
964
965
|
return t;
|
|
965
|
-
},
|
|
966
|
+
}, Wt = (e) => Y(e, "subject").flatMap((e) => {
|
|
966
967
|
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"));
|
|
967
968
|
return r !== void 0 && n?.endsWith("/LCSH") === !0 ? [r] : [];
|
|
968
|
-
}),
|
|
969
|
+
}), Gt = (e) => {
|
|
969
970
|
let t = Y(e, "hasFormat").flatMap((e) => {
|
|
970
971
|
let t = X(e, "file");
|
|
971
972
|
if (t === void 0) return [];
|
|
@@ -976,7 +977,7 @@ var c = (e) => {
|
|
|
976
977
|
}];
|
|
977
978
|
});
|
|
978
979
|
return t.find((e) => /\.cover\.medium\./i.test(e.uri)) ?? t[0];
|
|
979
|
-
}, $ = (e) => e.length > 0 ? e : void 0,
|
|
980
|
+
}, $ = (e) => e.length > 0 ? e : void 0, Kt = (e) => {
|
|
980
981
|
let t;
|
|
981
982
|
try {
|
|
982
983
|
t = new s(e);
|
|
@@ -987,9 +988,9 @@ var c = (e) => {
|
|
|
987
988
|
if (J(t.name).toLowerCase() !== "rdf") return;
|
|
988
989
|
let n = X(t, "ebook");
|
|
989
990
|
if (n === void 0) return;
|
|
990
|
-
let r =
|
|
991
|
+
let r = Ht(n);
|
|
991
992
|
if (r === void 0) return;
|
|
992
|
-
let i = [...new Set(
|
|
993
|
+
let i = [...new Set(Vt(n, "language"))], a = [...new Set(Wt(n))], o = [...new Set(Vt(n, "bookshelf"))], c = Ut(n);
|
|
993
994
|
return {
|
|
994
995
|
id: r,
|
|
995
996
|
title: Z(X(n, "title")),
|
|
@@ -1003,9 +1004,9 @@ var c = (e) => {
|
|
|
1003
1004
|
subjects: $(a),
|
|
1004
1005
|
bookshelves: $(o),
|
|
1005
1006
|
contributors: $(c),
|
|
1006
|
-
cover:
|
|
1007
|
+
cover: Gt(n)
|
|
1007
1008
|
};
|
|
1008
|
-
},
|
|
1009
|
+
}, qt = 25, Jt = {
|
|
1009
1010
|
art: "artist",
|
|
1010
1011
|
aut: "author",
|
|
1011
1012
|
clr: "colorist",
|
|
@@ -1014,17 +1015,17 @@ var c = (e) => {
|
|
|
1014
1015
|
ill: "illustrator",
|
|
1015
1016
|
nrt: "narrator",
|
|
1016
1017
|
trl: "translator"
|
|
1017
|
-
},
|
|
1018
|
+
}, Yt = (e) => {
|
|
1018
1019
|
let t = /* @__PURE__ */ new Map();
|
|
1019
1020
|
for (let n of e.contributors ?? []) {
|
|
1020
|
-
let e = n.name.trim().toLowerCase(), r =
|
|
1021
|
+
let e = n.name.trim().toLowerCase(), r = Jt[n.role.trim().toLowerCase()] ?? n.role, i = t.get(e);
|
|
1021
1022
|
i === void 0 ? t.set(e, {
|
|
1022
1023
|
name: n.name,
|
|
1023
1024
|
roles: [r]
|
|
1024
1025
|
}) : i.roles.includes(r) || i.roles.push(r);
|
|
1025
1026
|
}
|
|
1026
1027
|
return t.size > 0 ? [...t.values()] : void 0;
|
|
1027
|
-
},
|
|
1028
|
+
}, Xt = (e) => {
|
|
1028
1029
|
if (e === void 0) return;
|
|
1029
1030
|
let t = /^(\d{4})(?:-(\d{2})(?:-(\d{2}))?)?$/.exec(e.trim());
|
|
1030
1031
|
if (t === null) return;
|
|
@@ -1034,33 +1035,33 @@ var c = (e) => {
|
|
|
1034
1035
|
...r === void 0 ? {} : { month: r },
|
|
1035
1036
|
...i === void 0 ? {} : { day: i }
|
|
1036
1037
|
};
|
|
1037
|
-
},
|
|
1038
|
+
}, Zt = (e, t) => e.split("$").slice(1).flatMap((e) => e[0]?.toLowerCase() === t.toLowerCase() ? [e.slice(1).trim()] : []).filter((e) => e.length > 0), Qt = (e) => {
|
|
1038
1039
|
if (e === void 0) return;
|
|
1039
|
-
let t =
|
|
1040
|
+
let t = Zt(e, "b"), n = (t.length === 1 ? t[0] : void 0)?.replace(/[\s,;:/]+$/u, "").trim(), r = Zt(e, "c"), i = [...new Set(r.flatMap((e) => [...e.matchAll(/\d{4}/g)].flatMap((e) => e[0] === void 0 ? [] : [Number(e[0])])))], a = P({
|
|
1040
1041
|
date: i.length === 1 ? { year: i[0] } : void 0,
|
|
1041
1042
|
publisher: n !== void 0 && n.length > 0 && !/^\[?s\.n\.?\]?$/i.test(n) ? n : void 0
|
|
1042
1043
|
});
|
|
1043
1044
|
return a.date !== void 0 || a.publisher !== void 0 ? a : void 0;
|
|
1044
|
-
},
|
|
1045
|
+
}, $t = (e, t) => {
|
|
1045
1046
|
try {
|
|
1046
1047
|
let n = new URL(e, t);
|
|
1047
1048
|
return n.protocol === "http:" || n.protocol === "https:" ? n.toString() : void 0;
|
|
1048
1049
|
} catch {
|
|
1049
1050
|
return;
|
|
1050
1051
|
}
|
|
1051
|
-
},
|
|
1052
|
+
}, en = (e) => e.length > 0 ? e : void 0, tn = (e, t) => {
|
|
1052
1053
|
let { id: n, title: r, publisher: i, issued: a, originalPublication: o, rights: s, description: c, summary: l, languages: u, subjects: d, bookshelves: f, contributors: p, cover: m, ...h } = e, g = [t.matchedIdentifier, {
|
|
1053
1054
|
value: n,
|
|
1054
|
-
scheme:
|
|
1055
|
-
}].filter((e, t, n) => n.findIndex((t) => t.value.trim().toLowerCase() === e.value.trim().toLowerCase() && t.scheme.trim().toLowerCase() === e.scheme.trim().toLowerCase()) === t), _ = [.../* @__PURE__ */ new Set([...d ?? [], ...f ?? []])].slice(0, 25), v = m === void 0 ? void 0 :
|
|
1055
|
+
scheme: yt
|
|
1056
|
+
}].filter((e, t, n) => n.findIndex((t) => t.value.trim().toLowerCase() === e.value.trim().toLowerCase() && t.scheme.trim().toLowerCase() === e.scheme.trim().toLowerCase()) === t), _ = [.../* @__PURE__ */ new Set([...d ?? [], ...f ?? []])].slice(0, 25), v = m === void 0 ? void 0 : $t(m.uri, t.baseUrl), y = v === void 0 ? void 0 : {
|
|
1056
1057
|
uri: v,
|
|
1057
1058
|
mediaType: m?.mediaType,
|
|
1058
1059
|
confidence: "derived"
|
|
1059
1060
|
}, b = P({
|
|
1060
|
-
date:
|
|
1061
|
+
date: Xt(a),
|
|
1061
1062
|
publisher: i
|
|
1062
1063
|
}), x = P({
|
|
1063
|
-
original:
|
|
1064
|
+
original: Qt(o),
|
|
1064
1065
|
edition: b.date !== void 0 || b.publisher !== void 0 ? b : void 0
|
|
1065
1066
|
});
|
|
1066
1067
|
return P({
|
|
@@ -1068,19 +1069,19 @@ var c = (e) => {
|
|
|
1068
1069
|
publication: x.original !== void 0 || x.edition !== void 0 ? x : void 0,
|
|
1069
1070
|
description: l ?? c,
|
|
1070
1071
|
rights: s,
|
|
1071
|
-
languages:
|
|
1072
|
-
subjects:
|
|
1073
|
-
contributors:
|
|
1072
|
+
languages: en([...new Set(u ?? [])]),
|
|
1073
|
+
subjects: en(_),
|
|
1074
|
+
contributors: Yt(e),
|
|
1074
1075
|
identifiers: g,
|
|
1075
1076
|
cover: y
|
|
1076
1077
|
});
|
|
1077
|
-
},
|
|
1078
|
-
let t = e.baseUrl ??
|
|
1078
|
+
}, nn = "projectGutenberg", rn = "https://www.gutenberg.org", an = (e = {}) => {
|
|
1079
|
+
let t = e.baseUrl ?? rn;
|
|
1079
1080
|
return {
|
|
1080
|
-
id:
|
|
1081
|
+
id: nn,
|
|
1081
1082
|
name: "Project Gutenberg",
|
|
1082
1083
|
search: async (n, r) => {
|
|
1083
|
-
let i =
|
|
1084
|
+
let i = wt(n);
|
|
1084
1085
|
if (i === void 0) return [];
|
|
1085
1086
|
let a = new URL(`/cache/epub/${i.id}/pg${i.id}.rdf`, t), o = await (e.fetch ?? globalThis.fetch)(a.toString(), {
|
|
1086
1087
|
signal: r.signal,
|
|
@@ -1091,22 +1092,22 @@ var c = (e) => {
|
|
|
1091
1092
|
});
|
|
1092
1093
|
if (o.status === 404) return [];
|
|
1093
1094
|
if (!o.ok) throw new M(o.status, `Project Gutenberg metadata lookup failed with status ${o.status}`);
|
|
1094
|
-
let s =
|
|
1095
|
+
let s = Kt(await o.text());
|
|
1095
1096
|
if (s === void 0 || s.id !== i.id) throw Error(`Project Gutenberg RDF did not contain the requested eBook ${i.id}`);
|
|
1096
1097
|
let c = new URL(`/ebooks/${i.id}`, t).toString();
|
|
1097
1098
|
return [{
|
|
1098
1099
|
id: s.id,
|
|
1099
1100
|
url: c,
|
|
1100
1101
|
raw: s,
|
|
1101
|
-
metadata:
|
|
1102
|
+
metadata: tn(s, {
|
|
1102
1103
|
baseUrl: t,
|
|
1103
1104
|
matchedIdentifier: i.identifier
|
|
1104
1105
|
})
|
|
1105
1106
|
}];
|
|
1106
1107
|
}
|
|
1107
1108
|
};
|
|
1108
|
-
},
|
|
1109
|
+
}, on = (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);
|
|
1109
1110
|
//#endregion
|
|
1110
|
-
export { B as GOOGLE_BOOKS_IDENTIFIER_SCHEME, Ue as GOOGLE_BOOKS_MAX_SUBJECTS,
|
|
1111
|
+
export { B as GOOGLE_BOOKS_IDENTIFIER_SCHEME, Ue as GOOGLE_BOOKS_MAX_SUBJECTS, gt as GOOGLE_BOOKS_PROVIDER_ID, ie as METADATA_MATCH_WEIGHTS, M as MetadataProviderResponseError, jt as OPEN_LIBRARY_IDENTIFIER_SCHEME, At as OPEN_LIBRARY_MAX_SUBJECTS, Pt as OPEN_LIBRARY_PROVIDER_ID, yt as PROJECT_GUTENBERG_IDENTIFIER_SCHEME, qt as PROJECT_GUTENBERG_MAX_SUBJECTS, nn as PROJECT_GUTENBERG_PROVIDER_ID, vt as createGoogleBooksProvider, zt as createOpenLibraryProvider, an as createProjectGutenbergProvider, we as fetchMetadata, Ye as googleBooksCoverUrl, Fe as googleBooksLookupFromInput, Qe as googleBooksVolumeUrl, on as hasSearchTerms, kt as marcLanguageToBcp47, c as metadataAuthors, Te as metadataInputFromResolvedArchive, m as normalizeForComparison, U as parseGoogleBooksVolume, Be as parseGoogleBooksVolumesResponse, Et as parseOpenLibrarySearchResponse, Kt as parseProjectGutenbergRdf, re as personNameSimilarity, wt as projectGutenbergLookupFromInput, Ze as resolveGoogleBooksVolume, Nt as resolveOpenLibraryDoc, tn as resolveProjectGutenbergRecord, N as responseErrorStatus, je as retryWithBackoff, ve as scoreMetadataCandidate, g as textSimilarity, ee as titleSimilarity, d as toIsbn13 };
|
|
1111
1112
|
|
|
1112
1113
|
//# sourceMappingURL=index.js.map
|