@zivue/zuuid 0.1.0 → 0.2.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.
Files changed (203) hide show
  1. package/CHANGELOG.md +10 -1
  2. package/README.md +210 -227
  3. package/dist/client.d.ts +16 -3
  4. package/dist/client.d.ts.map +1 -1
  5. package/dist/client.js +22 -0
  6. package/dist/entity.d.ts.map +1 -1
  7. package/dist/entity.js +9 -0
  8. package/dist/index.d.ts +11 -0
  9. package/dist/index.d.ts.map +1 -1
  10. package/dist/index.js +11 -0
  11. package/dist/providers/comicvine/character.d.ts +2 -0
  12. package/dist/providers/comicvine/character.d.ts.map +1 -0
  13. package/dist/providers/comicvine/character.js +1 -0
  14. package/dist/providers/comicvine/constants.d.ts +8 -0
  15. package/dist/providers/comicvine/constants.d.ts.map +1 -0
  16. package/dist/providers/comicvine/constants.js +7 -0
  17. package/dist/providers/comicvine/index.d.ts +9 -0
  18. package/dist/providers/comicvine/index.d.ts.map +1 -0
  19. package/dist/providers/comicvine/index.js +8 -0
  20. package/dist/providers/comicvine/issue.d.ts +2 -0
  21. package/dist/providers/comicvine/issue.d.ts.map +1 -0
  22. package/dist/providers/comicvine/issue.js +1 -0
  23. package/dist/providers/comicvine/person.d.ts +2 -0
  24. package/dist/providers/comicvine/person.d.ts.map +1 -0
  25. package/dist/providers/comicvine/person.js +1 -0
  26. package/dist/providers/comicvine/publisher.d.ts +2 -0
  27. package/dist/providers/comicvine/publisher.d.ts.map +1 -0
  28. package/dist/providers/comicvine/publisher.js +1 -0
  29. package/dist/providers/comicvine/story-arc.d.ts +2 -0
  30. package/dist/providers/comicvine/story-arc.d.ts.map +1 -0
  31. package/dist/providers/comicvine/story-arc.js +1 -0
  32. package/dist/providers/comicvine/transform.d.ts +4 -0
  33. package/dist/providers/comicvine/transform.d.ts.map +1 -0
  34. package/dist/providers/comicvine/transform.js +63 -0
  35. package/dist/providers/comicvine/volume.d.ts +2 -0
  36. package/dist/providers/comicvine/volume.d.ts.map +1 -0
  37. package/dist/providers/comicvine/volume.js +1 -0
  38. package/dist/providers/common.d.ts +23 -0
  39. package/dist/providers/common.d.ts.map +1 -0
  40. package/dist/providers/common.js +132 -0
  41. package/dist/providers/gamesdb/constants.d.ts +4 -0
  42. package/dist/providers/gamesdb/constants.d.ts.map +1 -0
  43. package/dist/providers/gamesdb/constants.js +3 -0
  44. package/dist/providers/gamesdb/game.d.ts +7 -0
  45. package/dist/providers/gamesdb/game.d.ts.map +1 -0
  46. package/dist/providers/gamesdb/game.js +59 -0
  47. package/dist/providers/gamesdb/index.d.ts +4 -0
  48. package/dist/providers/gamesdb/index.d.ts.map +1 -0
  49. package/dist/providers/gamesdb/index.js +3 -0
  50. package/dist/providers/gamesdb/platform.d.ts +4 -0
  51. package/dist/providers/gamesdb/platform.d.ts.map +1 -0
  52. package/dist/providers/gamesdb/platform.js +23 -0
  53. package/dist/providers/jikan/anime.d.ts +2 -0
  54. package/dist/providers/jikan/anime.d.ts.map +1 -0
  55. package/dist/providers/jikan/anime.js +1 -0
  56. package/dist/providers/jikan/character.d.ts +2 -0
  57. package/dist/providers/jikan/character.d.ts.map +1 -0
  58. package/dist/providers/jikan/character.js +1 -0
  59. package/dist/providers/jikan/constants.d.ts +8 -0
  60. package/dist/providers/jikan/constants.d.ts.map +1 -0
  61. package/dist/providers/jikan/constants.js +7 -0
  62. package/dist/providers/jikan/index.d.ts +9 -0
  63. package/dist/providers/jikan/index.d.ts.map +1 -0
  64. package/dist/providers/jikan/index.js +8 -0
  65. package/dist/providers/jikan/magazine.d.ts +2 -0
  66. package/dist/providers/jikan/magazine.d.ts.map +1 -0
  67. package/dist/providers/jikan/magazine.js +1 -0
  68. package/dist/providers/jikan/manga.d.ts +2 -0
  69. package/dist/providers/jikan/manga.d.ts.map +1 -0
  70. package/dist/providers/jikan/manga.js +1 -0
  71. package/dist/providers/jikan/person.d.ts +2 -0
  72. package/dist/providers/jikan/person.d.ts.map +1 -0
  73. package/dist/providers/jikan/person.js +1 -0
  74. package/dist/providers/jikan/producer.d.ts +2 -0
  75. package/dist/providers/jikan/producer.d.ts.map +1 -0
  76. package/dist/providers/jikan/producer.js +1 -0
  77. package/dist/providers/jikan/transform.d.ts +8 -0
  78. package/dist/providers/jikan/transform.d.ts.map +1 -0
  79. package/dist/providers/jikan/transform.js +125 -0
  80. package/dist/providers/musicbrainz/artist.d.ts +4 -0
  81. package/dist/providers/musicbrainz/artist.d.ts.map +1 -0
  82. package/dist/providers/musicbrainz/artist.js +28 -0
  83. package/dist/providers/musicbrainz/constants.d.ts +10 -0
  84. package/dist/providers/musicbrainz/constants.d.ts.map +1 -0
  85. package/dist/providers/musicbrainz/constants.js +9 -0
  86. package/dist/providers/musicbrainz/helpers.d.ts +15 -0
  87. package/dist/providers/musicbrainz/helpers.d.ts.map +1 -0
  88. package/dist/providers/musicbrainz/helpers.js +71 -0
  89. package/dist/providers/musicbrainz/index.d.ts +8 -0
  90. package/dist/providers/musicbrainz/index.d.ts.map +1 -0
  91. package/dist/providers/musicbrainz/index.js +7 -0
  92. package/dist/providers/musicbrainz/label.d.ts +4 -0
  93. package/dist/providers/musicbrainz/label.d.ts.map +1 -0
  94. package/dist/providers/musicbrainz/label.js +28 -0
  95. package/dist/providers/musicbrainz/recording.d.ts +4 -0
  96. package/dist/providers/musicbrainz/recording.d.ts.map +1 -0
  97. package/dist/providers/musicbrainz/recording.js +41 -0
  98. package/dist/providers/musicbrainz/release-group.d.ts +7 -0
  99. package/dist/providers/musicbrainz/release-group.d.ts.map +1 -0
  100. package/dist/providers/musicbrainz/release-group.js +28 -0
  101. package/dist/providers/musicbrainz/release.d.ts +7 -0
  102. package/dist/providers/musicbrainz/release.d.ts.map +1 -0
  103. package/dist/providers/musicbrainz/release.js +50 -0
  104. package/dist/providers/musicbrainz/work.d.ts +4 -0
  105. package/dist/providers/musicbrainz/work.d.ts.map +1 -0
  106. package/dist/providers/musicbrainz/work.js +40 -0
  107. package/dist/providers/openfoodfacts/constants.d.ts +3 -0
  108. package/dist/providers/openfoodfacts/constants.d.ts.map +1 -0
  109. package/dist/providers/openfoodfacts/constants.js +2 -0
  110. package/dist/providers/openfoodfacts/index.d.ts +3 -0
  111. package/dist/providers/openfoodfacts/index.d.ts.map +1 -0
  112. package/dist/providers/openfoodfacts/index.js +2 -0
  113. package/dist/providers/openfoodfacts/product.d.ts +4 -0
  114. package/dist/providers/openfoodfacts/product.d.ts.map +1 -0
  115. package/dist/providers/openfoodfacts/product.js +29 -0
  116. package/dist/providers/openlibrary/author.d.ts +65 -0
  117. package/dist/providers/openlibrary/author.d.ts.map +1 -0
  118. package/dist/providers/openlibrary/author.js +228 -0
  119. package/dist/providers/openlibrary/book.d.ts +138 -0
  120. package/dist/providers/openlibrary/book.d.ts.map +1 -0
  121. package/dist/providers/openlibrary/book.js +535 -0
  122. package/dist/providers/openlibrary/client.d.ts +22 -0
  123. package/dist/providers/openlibrary/client.d.ts.map +1 -0
  124. package/dist/providers/openlibrary/client.js +61 -0
  125. package/dist/providers/openlibrary/constants.d.ts +4 -0
  126. package/dist/providers/openlibrary/constants.d.ts.map +1 -0
  127. package/dist/providers/openlibrary/constants.js +3 -0
  128. package/dist/providers/openlibrary/index.d.ts +6 -0
  129. package/dist/providers/openlibrary/index.d.ts.map +1 -0
  130. package/dist/providers/openlibrary/index.js +5 -0
  131. package/dist/providers/openlibrary/types.d.ts +23 -0
  132. package/dist/providers/openlibrary/types.d.ts.map +1 -0
  133. package/dist/providers/openlibrary/types.js +1 -0
  134. package/dist/providers/openstreetmap/constants.d.ts +6 -0
  135. package/dist/providers/openstreetmap/constants.d.ts.map +1 -0
  136. package/dist/providers/openstreetmap/constants.js +5 -0
  137. package/dist/providers/openstreetmap/index.d.ts +4 -0
  138. package/dist/providers/openstreetmap/index.d.ts.map +1 -0
  139. package/dist/providers/openstreetmap/index.js +3 -0
  140. package/dist/providers/openstreetmap/place.d.ts +4 -0
  141. package/dist/providers/openstreetmap/place.d.ts.map +1 -0
  142. package/dist/providers/openstreetmap/place.js +65 -0
  143. package/dist/providers/openstreetmap/venue.d.ts +2 -0
  144. package/dist/providers/openstreetmap/venue.d.ts.map +1 -0
  145. package/dist/providers/openstreetmap/venue.js +1 -0
  146. package/dist/providers/podcast/constants.d.ts +3 -0
  147. package/dist/providers/podcast/constants.d.ts.map +1 -0
  148. package/dist/providers/podcast/constants.js +2 -0
  149. package/dist/providers/podcast/index.d.ts +3 -0
  150. package/dist/providers/podcast/index.d.ts.map +1 -0
  151. package/dist/providers/podcast/index.js +2 -0
  152. package/dist/providers/podcast/podcast.d.ts +4 -0
  153. package/dist/providers/podcast/podcast.d.ts.map +1 -0
  154. package/dist/providers/podcast/podcast.js +30 -0
  155. package/dist/providers/setlistfm/artist.d.ts +2 -0
  156. package/dist/providers/setlistfm/artist.d.ts.map +1 -0
  157. package/dist/providers/setlistfm/artist.js +1 -0
  158. package/dist/providers/setlistfm/constants.d.ts +5 -0
  159. package/dist/providers/setlistfm/constants.d.ts.map +1 -0
  160. package/dist/providers/setlistfm/constants.js +4 -0
  161. package/dist/providers/setlistfm/index.d.ts +6 -0
  162. package/dist/providers/setlistfm/index.d.ts.map +1 -0
  163. package/dist/providers/setlistfm/index.js +5 -0
  164. package/dist/providers/setlistfm/setlist.d.ts +2 -0
  165. package/dist/providers/setlistfm/setlist.d.ts.map +1 -0
  166. package/dist/providers/setlistfm/setlist.js +1 -0
  167. package/dist/providers/setlistfm/transform.d.ts +7 -0
  168. package/dist/providers/setlistfm/transform.d.ts.map +1 -0
  169. package/dist/providers/setlistfm/transform.js +122 -0
  170. package/dist/providers/setlistfm/venue.d.ts +2 -0
  171. package/dist/providers/setlistfm/venue.d.ts.map +1 -0
  172. package/dist/providers/setlistfm/venue.js +1 -0
  173. package/dist/providers/ticketmaster/attraction.d.ts +2 -0
  174. package/dist/providers/ticketmaster/attraction.d.ts.map +1 -0
  175. package/dist/providers/ticketmaster/attraction.js +1 -0
  176. package/dist/providers/ticketmaster/constants.d.ts +5 -0
  177. package/dist/providers/ticketmaster/constants.d.ts.map +1 -0
  178. package/dist/providers/ticketmaster/constants.js +4 -0
  179. package/dist/providers/ticketmaster/event.d.ts +2 -0
  180. package/dist/providers/ticketmaster/event.d.ts.map +1 -0
  181. package/dist/providers/ticketmaster/event.js +1 -0
  182. package/dist/providers/ticketmaster/index.d.ts +6 -0
  183. package/dist/providers/ticketmaster/index.d.ts.map +1 -0
  184. package/dist/providers/ticketmaster/index.js +5 -0
  185. package/dist/providers/ticketmaster/transform.d.ts +7 -0
  186. package/dist/providers/ticketmaster/transform.d.ts.map +1 -0
  187. package/dist/providers/ticketmaster/transform.js +89 -0
  188. package/dist/providers/ticketmaster/venue.d.ts +2 -0
  189. package/dist/providers/ticketmaster/venue.d.ts.map +1 -0
  190. package/dist/providers/ticketmaster/venue.js +1 -0
  191. package/dist/providers/wger/constants.d.ts +4 -0
  192. package/dist/providers/wger/constants.d.ts.map +1 -0
  193. package/dist/providers/wger/constants.js +3 -0
  194. package/dist/providers/wger/equipment.d.ts +4 -0
  195. package/dist/providers/wger/equipment.d.ts.map +1 -0
  196. package/dist/providers/wger/equipment.js +22 -0
  197. package/dist/providers/wger/exercise.d.ts +4 -0
  198. package/dist/providers/wger/exercise.d.ts.map +1 -0
  199. package/dist/providers/wger/exercise.js +42 -0
  200. package/dist/providers/wger/index.d.ts +4 -0
  201. package/dist/providers/wger/index.d.ts.map +1 -0
  202. package/dist/providers/wger/index.js +3 -0
  203. package/package.json +201 -5
@@ -0,0 +1 @@
1
+ {"version":3,"file":"release.d.ts","sourceRoot":"","sources":["../../../src/providers/musicbrainz/release.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AACjD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAgBpD,MAAM,MAAM,2BAA2B,GAAG;IACxC,eAAe,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CACjC,CAAC;AAEF,wBAAsB,2BAA2B,CAC/C,MAAM,EAAE,YAAY,EACpB,OAAO,GAAE,2BAAgC,GACxC,OAAO,CAAC,SAAS,CAAC,CAiCpB"}
@@ -0,0 +1,50 @@
1
+ import { MUSICBRAINZ_COVER_ART_BASE_URL, MUSICBRAINZ_PROVIDER, MUSICBRAINZ_RELEASE_CATEGORY } from "./constants.js";
2
+ import { addDescription, addDetail, addMedia, addTag, arrayField, baseDataFromSource, finalizeData, nestedString, stringField, valueAsString } from "../common.js";
3
+ import { addArtistCreditDetail, addMusicBrainzDescription, addMusicBrainzTags, musicBrainzId, musicBrainzPayload, requireMusicBrainzTitle } from "./helpers.js";
4
+ export async function transformMusicBrainzRelease(source, options = {}) {
5
+ if (source.source.provider !== MUSICBRAINZ_PROVIDER || source.source.category !== MUSICBRAINZ_RELEASE_CATEGORY) {
6
+ throw new Error(`unsupported MusicBrainz source: ${source.source.provider}:${source.source.category}`);
7
+ }
8
+ const payload = musicBrainzPayload(source.payload);
9
+ const id = musicBrainzId(payload, source.source.externalId);
10
+ const title = requireMusicBrainzTitle(payload);
11
+ if (!id)
12
+ throw new Error("missing required MusicBrainz release field: id");
13
+ if (!title)
14
+ throw new Error("missing required MusicBrainz release field: title");
15
+ const data = await baseDataFromSource(source, MUSICBRAINZ_PROVIDER, MUSICBRAINZ_RELEASE_CATEGORY, MUSICBRAINZ_RELEASE_CATEGORY, id, title);
16
+ const releaseDate = stringField(payload, "date");
17
+ if (releaseDate && /^\d{4}-\d{2}-\d{2}$/.test(releaseDate))
18
+ data.primaryDate = releaseDate;
19
+ addDetail(data, MUSICBRAINZ_PROVIDER, "release_date", releaseDate);
20
+ addArtistCreditDetail(data, payload);
21
+ addDetail(data, MUSICBRAINZ_PROVIDER, "labels", joinedLabels(payload));
22
+ for (const key of ["status", "country", "barcode"])
23
+ addDetail(data, MUSICBRAINZ_PROVIDER, key, stringField(payload, key));
24
+ addDetail(data, MUSICBRAINZ_PROVIDER, "track_count", valueAsString(payload["track-count"]));
25
+ addDetail(data, MUSICBRAINZ_PROVIDER, "media_count", valueAsString(payload["media-count"]));
26
+ addMusicBrainzDescription(data, payload);
27
+ addMusicBrainzTags(data, payload);
28
+ const barcode = stringField(payload, "barcode");
29
+ if (barcode)
30
+ data.externalIds.push({ source: "barcode", category: MUSICBRAINZ_RELEASE_CATEGORY, value: barcode });
31
+ const releaseGroupId = nestedString(payload, ["release-group", "id"]);
32
+ if (releaseGroupId) {
33
+ data.externalIds.push({ source: MUSICBRAINZ_PROVIDER, category: "release_group", value: releaseGroupId });
34
+ addDetail(data, MUSICBRAINZ_PROVIDER, "release_group_id", releaseGroupId);
35
+ }
36
+ const archive = payload["cover-art-archive"];
37
+ const hasFront = !!(archive && typeof archive === "object" && !Array.isArray(archive) && archive.front === true);
38
+ const baseUrl = options.coverArtBaseUrl === undefined ? MUSICBRAINZ_COVER_ART_BASE_URL : options.coverArtBaseUrl;
39
+ if (hasFront && baseUrl)
40
+ addMedia(data, MUSICBRAINZ_PROVIDER, `${baseUrl.replace(/\/$/, "")}/${id}/front`, "cover");
41
+ return finalizeData(data, source);
42
+ }
43
+ function joinedLabels(payload) {
44
+ const names = arrayField(payload, "label-info").map((item) => {
45
+ if (!item || typeof item !== "object" || Array.isArray(item))
46
+ return undefined;
47
+ return nestedString(item, ["label", "name"]);
48
+ }).filter((value) => !!value);
49
+ return names.length ? names.join(", ") : undefined;
50
+ }
@@ -0,0 +1,4 @@
1
+ import type { ZuuidData } from "../../entity.js";
2
+ import type { SourceRecord } from "../../source.js";
3
+ export declare function transformMusicBrainzWork(source: SourceRecord): Promise<ZuuidData>;
4
+ //# sourceMappingURL=work.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"work.d.ts","sourceRoot":"","sources":["../../../src/providers/musicbrainz/work.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AACjD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAKpD,wBAAsB,wBAAwB,CAAC,MAAM,EAAE,YAAY,GAAG,OAAO,CAAC,SAAS,CAAC,CAoBvF"}
@@ -0,0 +1,40 @@
1
+ import { addDetail, addRelation, addTag, arrayField, baseDataFromSource, finalizeData, stringField } from "../common.js";
2
+ import { MUSICBRAINZ_ARTIST_CATEGORY, MUSICBRAINZ_PROVIDER, MUSICBRAINZ_WORK_CATEGORY } from "./constants.js";
3
+ import { addMusicBrainzAliases, addMusicBrainzDescription, addMusicBrainzTags, musicBrainzId, musicBrainzPayload, requireMusicBrainzTitle } from "./helpers.js";
4
+ export async function transformMusicBrainzWork(source) {
5
+ if (source.source.provider !== MUSICBRAINZ_PROVIDER || source.source.category !== MUSICBRAINZ_WORK_CATEGORY) {
6
+ throw new Error(`unsupported MusicBrainz source: ${source.source.provider}:${source.source.category}`);
7
+ }
8
+ const payload = musicBrainzPayload(source.payload);
9
+ const id = musicBrainzId(payload, source.source.externalId);
10
+ const title = requireMusicBrainzTitle(payload);
11
+ if (!id)
12
+ throw new Error("missing required MusicBrainz work field: id");
13
+ if (!title)
14
+ throw new Error("missing required MusicBrainz work field: title");
15
+ const data = await baseDataFromSource(source, MUSICBRAINZ_PROVIDER, MUSICBRAINZ_WORK_CATEGORY, "musical_work", id, title);
16
+ addMusicBrainzAliases(data, payload, title);
17
+ addMusicBrainzDescription(data, payload);
18
+ addDetail(data, MUSICBRAINZ_PROVIDER, "type", stringField(payload, "type"));
19
+ addDetail(data, MUSICBRAINZ_PROVIDER, "iswcs", arrayField(payload, "iswcs").filter((value) => typeof value === "string"));
20
+ for (const iswc of arrayField(payload, "iswcs"))
21
+ if (typeof iswc === "string")
22
+ data.externalIds.push({ source: "iswc", category: MUSICBRAINZ_WORK_CATEGORY, value: iswc });
23
+ await addArtistRelations(data, payload);
24
+ addMusicBrainzTags(data, payload);
25
+ addTag(data, "composition");
26
+ return finalizeData(data, source);
27
+ }
28
+ async function addArtistRelations(data, payload) {
29
+ let index = 0;
30
+ for (const relation of arrayField(payload, "relations")) {
31
+ if (!relation || typeof relation !== "object" || Array.isArray(relation))
32
+ continue;
33
+ const targetType = stringField(relation, "target-type");
34
+ const artist = relation.artist;
35
+ if (targetType !== "artist" || !artist || typeof artist !== "object" || Array.isArray(artist))
36
+ continue;
37
+ await addRelation(data, MUSICBRAINZ_PROVIDER, MUSICBRAINZ_ARTIST_CATEGORY, stringField(artist, "id"), stringField(relation, "type") ?? "artist", stringField(artist, "name"), { order: index });
38
+ index += 1;
39
+ }
40
+ }
@@ -0,0 +1,3 @@
1
+ export declare const OPENFOODFACTS_PROVIDER = "openfoodfacts";
2
+ export declare const OPENFOODFACTS_PRODUCT_CATEGORY = "product";
3
+ //# sourceMappingURL=constants.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../../src/providers/openfoodfacts/constants.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,sBAAsB,kBAAkB,CAAC;AACtD,eAAO,MAAM,8BAA8B,YAAY,CAAC"}
@@ -0,0 +1,2 @@
1
+ export const OPENFOODFACTS_PROVIDER = "openfoodfacts";
2
+ export const OPENFOODFACTS_PRODUCT_CATEGORY = "product";
@@ -0,0 +1,3 @@
1
+ export * from "./constants.js";
2
+ export * from "./product.js";
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/providers/openfoodfacts/index.ts"],"names":[],"mappings":"AAAA,cAAc,gBAAgB,CAAC;AAC/B,cAAc,cAAc,CAAC"}
@@ -0,0 +1,2 @@
1
+ export * from "./constants.js";
2
+ export * from "./product.js";
@@ -0,0 +1,4 @@
1
+ import type { ZuuidData } from "../../entity.js";
2
+ import type { SourceRecord } from "../../source.js";
3
+ export declare function transformOpenFoodFactsProduct(source: SourceRecord): Promise<ZuuidData>;
4
+ //# sourceMappingURL=product.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"product.d.ts","sourceRoot":"","sources":["../../../src/providers/openfoodfacts/product.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AACjD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAIpD,wBAAsB,6BAA6B,CAAC,MAAM,EAAE,YAAY,GAAG,OAAO,CAAC,SAAS,CAAC,CAmB5F"}
@@ -0,0 +1,29 @@
1
+ import { addAlias, addDetail, addMedia, addTag, arrayField, baseDataFromSource, finalizeData, objectPayload, stringField, valueAsString } from "../common.js";
2
+ import { OPENFOODFACTS_PRODUCT_CATEGORY, OPENFOODFACTS_PROVIDER } from "./constants.js";
3
+ export async function transformOpenFoodFactsProduct(source) {
4
+ if (source.source.provider !== OPENFOODFACTS_PROVIDER || source.source.category !== OPENFOODFACTS_PRODUCT_CATEGORY) {
5
+ throw new Error(`unsupported OpenFoodFacts source: ${source.source.provider}:${source.source.category}`);
6
+ }
7
+ const payload = objectPayload(source.payload);
8
+ const id = source.source.externalId.trim() || stringField(payload, "code") || stringField(payload, "_id");
9
+ const title = stringField(payload, "product_name") ?? stringField(payload, "title") ?? stringField(payload, "name");
10
+ if (!id)
11
+ throw new Error("missing required OpenFoodFacts product field: code");
12
+ if (!title)
13
+ throw new Error("missing required OpenFoodFacts product field: product_name");
14
+ const data = await baseDataFromSource(source, OPENFOODFACTS_PROVIDER, OPENFOODFACTS_PRODUCT_CATEGORY, OPENFOODFACTS_PRODUCT_CATEGORY, id, title);
15
+ addAlias(data, title, "title", true, OPENFOODFACTS_PROVIDER, "en");
16
+ addMedia(data, OPENFOODFACTS_PROVIDER, stringField(payload, "image_front_url") ?? stringField(payload, "image_url"), "cover");
17
+ for (const [jsonKey, detailKey] of [["brands", "brands"], ["quantity", "quantity"], ["serving_size", "serving_size"], ["ingredients_text", "ingredients_text"], ["nutriscore_grade", "nutriscore_grade"], ["ecoscore_grade", "ecoscore_grade"], ["allergens", "allergens"]])
18
+ addDetail(data, OPENFOODFACTS_PROVIDER, detailKey, stringField(payload, jsonKey));
19
+ addDetail(data, OPENFOODFACTS_PROVIDER, "barcode", id);
20
+ const nutriments = payload.nutriments && typeof payload.nutriments === "object" && !Array.isArray(payload.nutriments) ? payload.nutriments : {};
21
+ for (const [jsonKey, detailKey] of [["energy-kcal_100g", "calories_100g"], ["fat_100g", "fat_100g"], ["proteins_100g", "protein_100g"], ["carbohydrates_100g", "carbs_100g"], ["sugars_100g", "sugars_100g"], ["fiber_100g", "fiber_100g"], ["salt_100g", "salt_100g"], ["sodium_100g", "sodium_100g"], ["energy-kj_100g", "energy_kj_100g"], ["saturated-fat_100g", "saturated_fat_100g"], ["nutriscore_score", "nutriscore_score"], ["nova-group", "nova_group"]])
22
+ addDetail(data, OPENFOODFACTS_PROVIDER, detailKey, valueAsString(nutriments[jsonKey]));
23
+ addTag(data, "food");
24
+ for (const key of ["categories_tags", "countries_tags"])
25
+ for (const value of arrayField(payload, key))
26
+ if (typeof value === "string")
27
+ addTag(data, value.split(":").at(-1));
28
+ return finalizeData(data, source);
29
+ }
@@ -0,0 +1,65 @@
1
+ import { type SearchResponse, type ZuuidData, type ZuuidSearchResult } from "../../entity.js";
2
+ import { type SourceRecord } from "../../source.js";
3
+ import type { OpenLibraryProvider } from "./client.js";
4
+ import type { OpenLibrarySearchInput, OpenLibraryTransformOptions } from "./types.js";
5
+ export declare const OPEN_LIBRARY_AUTHOR_CATEGORY = "author";
6
+ export type FetchOpenLibraryAuthorInput = {
7
+ id: string;
8
+ workLimit?: number;
9
+ };
10
+ export type OpenLibraryAuthorDescription = string | {
11
+ type?: string;
12
+ value?: string;
13
+ };
14
+ export type OpenLibraryAuthorPayload = {
15
+ key?: string;
16
+ name?: string;
17
+ alternate_names?: string[];
18
+ birth_date?: string;
19
+ death_date?: string;
20
+ date?: string;
21
+ bio?: OpenLibraryAuthorDescription;
22
+ wikipedia?: string;
23
+ links?: {
24
+ title?: string;
25
+ url?: string;
26
+ type?: {
27
+ key?: string;
28
+ };
29
+ }[];
30
+ photos?: number[];
31
+ personal_name?: string;
32
+ remote_ids?: Record<string, string>;
33
+ };
34
+ export type OpenLibraryAuthorWorkPayload = {
35
+ key?: string;
36
+ title?: string;
37
+ first_publish_date?: string;
38
+ covers?: number[];
39
+ };
40
+ export type OpenLibraryAuthorWorksPayload = {
41
+ entries?: OpenLibraryAuthorWorkPayload[];
42
+ size?: number;
43
+ };
44
+ export type OpenLibraryAuthorSourcePayload = {
45
+ author: OpenLibraryAuthorPayload;
46
+ works?: {
47
+ entries: OpenLibraryAuthorWorkPayload[];
48
+ size?: number;
49
+ };
50
+ };
51
+ export type OpenLibraryAuthorSearchDoc = {
52
+ key?: string;
53
+ name?: string;
54
+ alternate_names?: string[];
55
+ birth_date?: string;
56
+ top_work?: string;
57
+ work_count?: number;
58
+ top_subjects?: string[];
59
+ _version_?: number;
60
+ };
61
+ export declare function fetchOpenLibraryAuthorSourceRecord(provider: OpenLibraryProvider, input: FetchOpenLibraryAuthorInput): Promise<SourceRecord | undefined>;
62
+ export declare function searchOpenLibraryAuthorSourceRecords(provider: OpenLibraryProvider, input: OpenLibrarySearchInput): Promise<SearchResponse<SourceRecord>>;
63
+ export declare function searchOpenLibraryAuthors(provider: OpenLibraryProvider, input: OpenLibrarySearchInput): Promise<SearchResponse<ZuuidSearchResult>>;
64
+ export declare function transformOpenLibraryAuthor(source: SourceRecord, options?: OpenLibraryTransformOptions): Promise<ZuuidData>;
65
+ //# sourceMappingURL=author.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"author.d.ts","sourceRoot":"","sources":["../../../src/providers/openlibrary/author.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,228 @@
1
+ import { createZuuidData } from "../../entity.js";
2
+ import { providerZuuid } from "../../identity.js";
3
+ import { attachSourceMetadata, createSourceRecord } from "../../source.js";
4
+ import { OPEN_LIBRARY_COVER_BASE_URL, OPEN_LIBRARY_PROVIDER } from "./constants.js";
5
+ export const OPEN_LIBRARY_AUTHOR_CATEGORY = "author";
6
+ export async function fetchOpenLibraryAuthorSourceRecord(provider, input) {
7
+ const id = normalizeOpenLibraryAuthorId(input.id);
8
+ const author = await provider.getJson(`/authors/${id}.json`, {});
9
+ if (!author) {
10
+ return undefined;
11
+ }
12
+ const works = await provider.getJson(`/authors/${id}/works.json`, {
13
+ limit: String(input.workLimit ?? 20)
14
+ });
15
+ const payload = {
16
+ author,
17
+ ...(works ? { works: { entries: works.entries ?? [], size: works.size } } : {})
18
+ };
19
+ return createSourceRecord({
20
+ source: { provider: OPEN_LIBRARY_PROVIDER, category: OPEN_LIBRARY_AUTHOR_CATEGORY, externalId: id },
21
+ payload: payload
22
+ });
23
+ }
24
+ export async function searchOpenLibraryAuthorSourceRecords(provider, input) {
25
+ const payload = await fetchOpenLibraryAuthorSearchResults(provider, input);
26
+ return {
27
+ results: await sourceRecordsFromSearchResults(payload.docs),
28
+ pagination: paginationFromOpenLibrarySearchResponse(payload, input)
29
+ };
30
+ }
31
+ export async function searchOpenLibraryAuthors(provider, input) {
32
+ const payload = await fetchOpenLibraryAuthorSearchResults(provider, input);
33
+ const results = [];
34
+ for (const item of payload.docs ?? []) {
35
+ const id = normalizeOpenLibraryAuthorIdOrUndefined(item.key);
36
+ const title = stringField(item.name);
37
+ if (!id || !title) {
38
+ continue;
39
+ }
40
+ const zuuid = await providerZuuid({ provider: OPEN_LIBRARY_PROVIDER, category: OPEN_LIBRARY_AUTHOR_CATEGORY, externalId: id });
41
+ results.push({
42
+ id: zuuid,
43
+ zuuid,
44
+ category: OPEN_LIBRARY_AUTHOR_CATEGORY,
45
+ title,
46
+ date: stringField(item.birth_date) ?? null,
47
+ cover: null,
48
+ rating: null,
49
+ weight: typeof item.work_count === "number" ? item.work_count : null,
50
+ relationType: null,
51
+ attribute: stringField(item.top_work) ?? null,
52
+ order: null,
53
+ source: { source: OPEN_LIBRARY_PROVIDER, category: OPEN_LIBRARY_AUTHOR_CATEGORY, value: id }
54
+ });
55
+ }
56
+ return {
57
+ results,
58
+ pagination: paginationFromOpenLibrarySearchResponse(payload, input)
59
+ };
60
+ }
61
+ export async function transformOpenLibraryAuthor(source, options = {}) {
62
+ if (source.source.provider !== OPEN_LIBRARY_PROVIDER || source.source.category !== OPEN_LIBRARY_AUTHOR_CATEGORY) {
63
+ throw new Error(`unsupported Open Library source: ${source.source.provider}:${source.source.category}`);
64
+ }
65
+ const payload = openLibraryAuthorSourcePayload(source.payload);
66
+ const author = payload.author;
67
+ const id = normalizeOpenLibraryAuthorId(source.source.externalId || author.key || "");
68
+ const name = stringField(author.name);
69
+ if (!name) {
70
+ throw new Error("missing required Open Library author field: name");
71
+ }
72
+ const zuuid = await providerZuuid({ provider: OPEN_LIBRARY_PROVIDER, category: OPEN_LIBRARY_AUTHOR_CATEGORY, externalId: id });
73
+ const data = createZuuidData({ zuuid, category: OPEN_LIBRARY_AUTHOR_CATEGORY, primaryTitle: name });
74
+ const birthDate = stringField(author.birth_date ?? author.date);
75
+ if (birthDate) {
76
+ data.primaryDate = birthDate;
77
+ data.details.push({ key: "birth_date", value: birthDate, source: OPEN_LIBRARY_PROVIDER });
78
+ }
79
+ addDetail(data, "death_date", author.death_date);
80
+ addDetail(data, "personal_name", author.personal_name);
81
+ addDetail(data, "wikipedia", author.wikipedia);
82
+ addStructuredDetail(data, "links", author.links);
83
+ addStructuredDetail(data, "remote_ids", author.remote_ids);
84
+ if (typeof payload.works?.size === "number") {
85
+ data.details.push({ key: "work_count", value: payload.works.size, source: OPEN_LIBRARY_PROVIDER });
86
+ }
87
+ const bio = descriptionValue(author.bio);
88
+ if (bio) {
89
+ data.descriptions.push({ value: bio, source: OPEN_LIBRARY_PROVIDER });
90
+ }
91
+ for (const alias of author.alternate_names ?? []) {
92
+ const value = stringField(alias);
93
+ if (value && value !== name && !data.aliases.some((item) => item.value === value)) {
94
+ data.aliases.push({ value, aliasType: "alternate_name", isPrimary: false, source: OPEN_LIBRARY_PROVIDER });
95
+ }
96
+ }
97
+ addPhoto(data, author.photos?.find((photo) => typeof photo === "number"), options.coverBaseUrl ?? OPEN_LIBRARY_COVER_BASE_URL, true);
98
+ for (const [index, work] of (payload.works?.entries ?? []).entries()) {
99
+ await addWorkRelation(data, work, index, options);
100
+ }
101
+ return attachSourceMetadata(data, source);
102
+ }
103
+ async function fetchOpenLibraryAuthorSearchResults(provider, input) {
104
+ const payload = await provider.getJson("/search/authors.json", {
105
+ q: searchQuery(input.query),
106
+ page: String(input.page ?? 1),
107
+ limit: String(input.limit ?? 20)
108
+ });
109
+ return payload ?? {};
110
+ }
111
+ async function sourceRecordsFromSearchResults(results) {
112
+ const records = [];
113
+ for (const result of results ?? []) {
114
+ const id = normalizeOpenLibraryAuthorIdOrUndefined(result.key);
115
+ if (!id) {
116
+ continue;
117
+ }
118
+ records.push(await createSourceRecord({
119
+ source: { provider: OPEN_LIBRARY_PROVIDER, category: OPEN_LIBRARY_AUTHOR_CATEGORY, externalId: id },
120
+ payload: result
121
+ }));
122
+ }
123
+ return records;
124
+ }
125
+ async function addWorkRelation(data, work, index, options) {
126
+ const id = normalizeOpenLibraryWorkIdOrUndefined(work.key);
127
+ const title = stringField(work.title);
128
+ if (!id || !title) {
129
+ return;
130
+ }
131
+ const zuuid = await providerZuuid({ provider: OPEN_LIBRARY_PROVIDER, category: "book", externalId: id });
132
+ data.relations.push({
133
+ id: zuuid,
134
+ zuuid,
135
+ category: "book",
136
+ title,
137
+ date: stringField(work.first_publish_date) ?? null,
138
+ cover: coverUrl(work.covers?.find((cover) => typeof cover === "number"), options.coverBaseUrl ?? OPEN_LIBRARY_COVER_BASE_URL),
139
+ rating: null,
140
+ weight: null,
141
+ relationType: "author_of",
142
+ direction: "outgoing",
143
+ attribute: null,
144
+ order: index,
145
+ source: OPEN_LIBRARY_PROVIDER,
146
+ externalId: id
147
+ });
148
+ }
149
+ function addPhoto(data, photoId, baseUrl, isPrimary) {
150
+ const url = coverUrl(photoId, baseUrl);
151
+ if (!url) {
152
+ return;
153
+ }
154
+ data.cover = data.cover ?? url;
155
+ data.media.push({
156
+ url,
157
+ mediaType: "image",
158
+ mediaCategory: "profile",
159
+ isPrimary,
160
+ source: OPEN_LIBRARY_PROVIDER
161
+ });
162
+ }
163
+ function addDetail(data, key, value) {
164
+ const clean = stringField(value);
165
+ if (clean) {
166
+ data.details.push({ key, value: clean, source: OPEN_LIBRARY_PROVIDER });
167
+ }
168
+ }
169
+ function addStructuredDetail(data, key, value) {
170
+ if (value === undefined || value === null || (Array.isArray(value) && value.length === 0)) {
171
+ return;
172
+ }
173
+ data.details.push({ key, value, source: OPEN_LIBRARY_PROVIDER });
174
+ }
175
+ function paginationFromOpenLibrarySearchResponse(payload, input) {
176
+ const totalResults = payload.numFound ?? payload.num_found ?? 0;
177
+ const limit = input.limit ?? 20;
178
+ return {
179
+ page: input.page ?? 1,
180
+ totalPages: limit > 0 ? Math.ceil(totalResults / limit) : 0,
181
+ totalResults
182
+ };
183
+ }
184
+ function openLibraryAuthorSourcePayload(payload) {
185
+ const value = payload;
186
+ if ("author" in value && value.author) {
187
+ return value;
188
+ }
189
+ return { author: value };
190
+ }
191
+ function normalizeOpenLibraryAuthorId(value) {
192
+ const normalized = stringField(value)?.replace(/^\/authors\//, "").replace(/\.json$/, "");
193
+ if (!normalized) {
194
+ throw new Error("Open Library author id must not be empty");
195
+ }
196
+ if (!/^OL\d+A$/i.test(normalized)) {
197
+ throw new Error(`Open Library author id must look like OL23919A: ${value}`);
198
+ }
199
+ return normalized.toUpperCase();
200
+ }
201
+ function normalizeOpenLibraryAuthorIdOrUndefined(value) {
202
+ const normalized = stringField(value)?.replace(/^\/authors\//, "");
203
+ return normalized && /^OL\d+A$/i.test(normalized) ? normalized.toUpperCase() : undefined;
204
+ }
205
+ function normalizeOpenLibraryWorkIdOrUndefined(value) {
206
+ const normalized = stringField(value)?.replace(/^\/works\//, "");
207
+ return normalized && /^OL\d+W$/i.test(normalized) ? normalized.toUpperCase() : undefined;
208
+ }
209
+ function coverUrl(coverId, baseUrl) {
210
+ if (typeof coverId !== "number" || !baseUrl) {
211
+ return null;
212
+ }
213
+ return `${baseUrl.replace(/\/$/, "")}/${coverId}-L.jpg`;
214
+ }
215
+ function descriptionValue(value) {
216
+ return typeof value === "string" ? stringField(value) : stringField(value?.value);
217
+ }
218
+ function searchQuery(value) {
219
+ const query = stringField(value);
220
+ if (!query) {
221
+ throw new Error("Open Library author search query must not be empty");
222
+ }
223
+ return query;
224
+ }
225
+ function stringField(value) {
226
+ const normalized = value?.trim();
227
+ return normalized ? normalized : undefined;
228
+ }
@@ -0,0 +1,138 @@
1
+ import { type SearchResponse, type ZuuidData, type ZuuidSearchResult } from "../../entity.js";
2
+ import { type SourceRecord } from "../../source.js";
3
+ import type { JsonValue } from "../../types.js";
4
+ import type { OpenLibraryProvider } from "./client.js";
5
+ import type { OpenLibrarySearchInput, OpenLibraryTransformOptions } from "./types.js";
6
+ export declare const OPEN_LIBRARY_BOOK_CATEGORY = "book";
7
+ export type FetchOpenLibraryBookInput = {
8
+ id: string;
9
+ editionLimit?: number;
10
+ };
11
+ export type OpenLibraryDescription = string | {
12
+ type?: string;
13
+ value?: string;
14
+ };
15
+ export type OpenLibraryAuthorRef = {
16
+ author?: {
17
+ key?: string;
18
+ };
19
+ type?: {
20
+ key?: string;
21
+ };
22
+ };
23
+ export type OpenLibraryWorkPayload = {
24
+ key?: string;
25
+ title?: string;
26
+ description?: OpenLibraryDescription;
27
+ covers?: number[];
28
+ subjects?: string[];
29
+ subject_places?: string[];
30
+ subject_people?: string[];
31
+ subject_times?: string[];
32
+ first_publish_date?: string;
33
+ authors?: OpenLibraryAuthorRef[];
34
+ links?: {
35
+ title?: string;
36
+ url?: string;
37
+ type?: {
38
+ key?: string;
39
+ };
40
+ }[];
41
+ excerpts?: {
42
+ excerpt?: string;
43
+ pages?: string;
44
+ comment?: string;
45
+ }[];
46
+ series?: JsonValue[];
47
+ cover_edition?: {
48
+ key?: string;
49
+ };
50
+ created?: JsonValue;
51
+ last_modified?: JsonValue;
52
+ latest_revision?: number;
53
+ revision?: number;
54
+ };
55
+ export type OpenLibraryBookAuthorPayload = {
56
+ key?: string;
57
+ name?: string;
58
+ birth_date?: string;
59
+ death_date?: string;
60
+ bio?: OpenLibraryDescription;
61
+ photos?: number[];
62
+ };
63
+ export type OpenLibraryEditionPayload = {
64
+ key?: string;
65
+ title?: string;
66
+ subtitle?: string;
67
+ full_title?: string;
68
+ edition_name?: string;
69
+ description?: OpenLibraryDescription;
70
+ notes?: OpenLibraryDescription;
71
+ publish_date?: string;
72
+ publishers?: string[];
73
+ number_of_pages?: number;
74
+ physical_format?: string;
75
+ isbn_10?: string[];
76
+ isbn_13?: string[];
77
+ languages?: {
78
+ key?: string;
79
+ }[];
80
+ translated_from?: {
81
+ key?: string;
82
+ }[];
83
+ translation_of?: string;
84
+ covers?: number[];
85
+ contributors?: {
86
+ role?: string;
87
+ name?: string;
88
+ }[];
89
+ identifiers?: Record<string, JsonValue>;
90
+ classifications?: Record<string, JsonValue>;
91
+ local_id?: string[];
92
+ source_records?: string[];
93
+ };
94
+ export type OpenLibraryEditionsPayload = {
95
+ entries?: OpenLibraryEditionPayload[];
96
+ size?: number;
97
+ };
98
+ export type OpenLibraryBookPayload = {
99
+ work: OpenLibraryWorkPayload;
100
+ search?: OpenLibrarySearchDoc;
101
+ editions?: {
102
+ entries: OpenLibraryEditionPayload[];
103
+ size?: number;
104
+ };
105
+ authors?: OpenLibraryBookAuthorPayload[];
106
+ ratings?: OpenLibraryRatingsPayload;
107
+ };
108
+ export type OpenLibraryRatingsPayload = {
109
+ summary?: {
110
+ average?: number;
111
+ count?: number;
112
+ sortable?: number;
113
+ };
114
+ counts?: Record<string, number>;
115
+ };
116
+ export type OpenLibrarySearchDoc = {
117
+ key?: string;
118
+ title?: string;
119
+ author_name?: string[];
120
+ author_key?: string[];
121
+ first_publish_year?: number;
122
+ first_publish_date?: string;
123
+ cover_i?: number;
124
+ ratings_average?: number;
125
+ edition_count?: number;
126
+ language?: string[];
127
+ isbn?: string[];
128
+ ia?: string[];
129
+ subject?: string[];
130
+ ddc?: string[];
131
+ lcc?: string[];
132
+ lccn?: string[];
133
+ };
134
+ export declare function fetchOpenLibraryBookSourceRecord(provider: OpenLibraryProvider, input: FetchOpenLibraryBookInput): Promise<SourceRecord | undefined>;
135
+ export declare function searchOpenLibraryBookSourceRecords(provider: OpenLibraryProvider, input: OpenLibrarySearchInput): Promise<SearchResponse<SourceRecord>>;
136
+ export declare function searchOpenLibraryBooks(provider: OpenLibraryProvider, input: OpenLibrarySearchInput, options?: OpenLibraryTransformOptions): Promise<SearchResponse<ZuuidSearchResult>>;
137
+ export declare function transformOpenLibraryBook(source: SourceRecord, options?: OpenLibraryTransformOptions): Promise<ZuuidData>;
138
+ //# sourceMappingURL=book.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"book.d.ts","sourceRoot":"","sources":["../../../src/providers/openlibrary/book.ts"],"names":[],"mappings":"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"}