@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":"types.d.ts","sourceRoot":"","sources":["../../../src/providers/openlibrary/types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,oBAAoB,GAAG,CAAC,KAAK,EAAE,MAAM,GAAG,GAAG,EAAE,IAAI,CAAC,EAAE,WAAW,KAAK,OAAO,CAAC,QAAQ,CAAC,CAAC;AAElG,MAAM,MAAM,0BAA0B,GAAG;IACvC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,YAAY,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,KAAK,CAAC,EAAE,oBAAoB,CAAC;CAC9B,CAAC;AAEF,MAAM,MAAM,2BAA2B,GAAG;IACxC,YAAY,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAC9B,CAAC;AAEF,MAAM,MAAM,sBAAsB,GAAG;IACnC,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;CACnB,CAAC;AAEF,MAAM,MAAM,yBAAyB,CAAC,CAAC,IAAI;IACzC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC;CACZ,CAAC"}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,6 @@
1
+ export declare const OPENSTREETMAP_PROVIDER = "openstreetmap";
2
+ export declare const OPENSTREETMAP_CITY_CATEGORY = "city";
3
+ export declare const OPENSTREETMAP_COUNTRY_CATEGORY = "country";
4
+ export declare const OPENSTREETMAP_PLACE_CATEGORY = "place";
5
+ export declare const OPENSTREETMAP_VENUE_CATEGORY = "venue";
6
+ //# sourceMappingURL=constants.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../../src/providers/openstreetmap/constants.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,sBAAsB,kBAAkB,CAAC;AACtD,eAAO,MAAM,2BAA2B,SAAS,CAAC;AAClD,eAAO,MAAM,8BAA8B,YAAY,CAAC;AACxD,eAAO,MAAM,4BAA4B,UAAU,CAAC;AACpD,eAAO,MAAM,4BAA4B,UAAU,CAAC"}
@@ -0,0 +1,5 @@
1
+ export const OPENSTREETMAP_PROVIDER = "openstreetmap";
2
+ export const OPENSTREETMAP_CITY_CATEGORY = "city";
3
+ export const OPENSTREETMAP_COUNTRY_CATEGORY = "country";
4
+ export const OPENSTREETMAP_PLACE_CATEGORY = "place";
5
+ export const OPENSTREETMAP_VENUE_CATEGORY = "venue";
@@ -0,0 +1,4 @@
1
+ export * from "./constants.js";
2
+ export * from "./place.js";
3
+ export * from "./venue.js";
4
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/providers/openstreetmap/index.ts"],"names":[],"mappings":"AAAA,cAAc,gBAAgB,CAAC;AAC/B,cAAc,YAAY,CAAC;AAC3B,cAAc,YAAY,CAAC"}
@@ -0,0 +1,3 @@
1
+ export * from "./constants.js";
2
+ export * from "./place.js";
3
+ export * from "./venue.js";
@@ -0,0 +1,4 @@
1
+ import type { ZuuidData } from "../../entity.js";
2
+ import type { SourceRecord } from "../../source.js";
3
+ export declare function transformOpenStreetMapPlace(source: SourceRecord): Promise<ZuuidData>;
4
+ //# sourceMappingURL=place.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"place.d.ts","sourceRoot":"","sources":["../../../src/providers/openstreetmap/place.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AACjD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAIpD,wBAAsB,2BAA2B,CAAC,MAAM,EAAE,YAAY,GAAG,OAAO,CAAC,SAAS,CAAC,CAgC1F"}
@@ -0,0 +1,65 @@
1
+ import { addAlias, addDescription, addDetail, addMedia, addTag, arrayField, baseDataFromSource, finalizeData, nestedString, objectPayload, stringField, valueAsString } from "../common.js";
2
+ import { OPENSTREETMAP_CITY_CATEGORY, OPENSTREETMAP_COUNTRY_CATEGORY, OPENSTREETMAP_PLACE_CATEGORY, OPENSTREETMAP_PROVIDER, OPENSTREETMAP_VENUE_CATEGORY } from "./constants.js";
3
+ export async function transformOpenStreetMapPlace(source) {
4
+ if (source.source.provider !== OPENSTREETMAP_PROVIDER || ![OPENSTREETMAP_CITY_CATEGORY, OPENSTREETMAP_COUNTRY_CATEGORY, OPENSTREETMAP_PLACE_CATEGORY, OPENSTREETMAP_VENUE_CATEGORY].includes(source.source.category)) {
5
+ throw new Error(`unsupported OpenStreetMap source: ${source.source.provider}:${source.source.category}`);
6
+ }
7
+ const payload = objectPayload(source.payload);
8
+ const id = source.source.externalId.trim() || osmId(payload) || valueAsString(payload.place_id);
9
+ const title = stringField(payload, "name") ?? stringField(payload, "display_name");
10
+ if (!id)
11
+ throw new Error("missing required OpenStreetMap field: place_id");
12
+ if (!title)
13
+ throw new Error("missing required OpenStreetMap field: name");
14
+ const data = await baseDataFromSource(source, OPENSTREETMAP_PROVIDER, source.source.category, source.source.category, id, title);
15
+ data.rating = typeof payload.importance === "number" ? payload.importance * 10 : undefined;
16
+ addAlias(data, title, "title", true, OPENSTREETMAP_PROVIDER);
17
+ addNamedetailAliases(data, payload, title);
18
+ addDescription(data, OPENSTREETMAP_PROVIDER, stringField(payload, "display_name"), "en");
19
+ addMedia(data, OPENSTREETMAP_PROVIDER, stringField(payload, "icon"), "icon");
20
+ addDetail(data, OPENSTREETMAP_PROVIDER, "osm_type", stringField(payload, "osm_type"));
21
+ addDetail(data, OPENSTREETMAP_PROVIDER, "osm_id", valueAsString(payload.osm_id));
22
+ addDetail(data, OPENSTREETMAP_PROVIDER, "latitude", stringField(payload, "lat"));
23
+ addDetail(data, OPENSTREETMAP_PROVIDER, "longitude", stringField(payload, "lon"));
24
+ for (const [key, path] of [["country", ["address", "country"]], ["country_code", ["address", "country_code"]], ["state", ["address", "state"]], ["postal_code", ["address", "postcode"]]])
25
+ addDetail(data, OPENSTREETMAP_PROVIDER, key, nestedString(payload, [...path]));
26
+ addDetail(data, OPENSTREETMAP_PROVIDER, "city", nestedString(payload, ["address", "city"]) ?? nestedString(payload, ["address", "town"]) ?? nestedString(payload, ["address", "village"]));
27
+ addDetail(data, OPENSTREETMAP_PROVIDER, "road", nestedString(payload, ["address", "road"]));
28
+ addDetail(data, OPENSTREETMAP_PROVIDER, "house_number", nestedString(payload, ["address", "house_number"]));
29
+ addDetail(data, OPENSTREETMAP_PROVIDER, "class", stringField(payload, "class"));
30
+ addDetail(data, OPENSTREETMAP_PROVIDER, "type", stringField(payload, "type"));
31
+ const bbox = arrayField(payload, "boundingbox").filter((value) => typeof value === "string").join(",");
32
+ addDetail(data, OPENSTREETMAP_PROVIDER, "bounding_box", bbox || undefined);
33
+ for (const key of ["population", "wikidata", "wikipedia"])
34
+ addDetail(data, OPENSTREETMAP_PROVIDER, key, nestedString(payload, ["extratags", key]));
35
+ const wikidata = nestedString(payload, ["extratags", "wikidata"]);
36
+ if (wikidata)
37
+ data.externalIds.push({ source: "wikidata", category: source.source.category, value: wikidata });
38
+ addTag(data, "location");
39
+ addTag(data, "place");
40
+ addTag(data, source.source.category);
41
+ addTag(data, nestedString(payload, ["address", "country_code"]));
42
+ return finalizeData(data, source);
43
+ }
44
+ function osmId(payload) {
45
+ const osmType = stringField(payload, "osm_type");
46
+ const id = valueAsString(payload.osm_id);
47
+ if (!osmType || !id)
48
+ return undefined;
49
+ const prefix = osmType === "relation" ? "R" : osmType === "way" ? "W" : osmType === "node" ? "N" : osmType.slice(0, 1) || "O";
50
+ return `${prefix}${id}`;
51
+ }
52
+ function addNamedetailAliases(data, payload, title) {
53
+ const details = payload.namedetails;
54
+ if (!details || typeof details !== "object" || Array.isArray(details))
55
+ return;
56
+ let count = 0;
57
+ for (const [key, value] of Object.entries(details)) {
58
+ if (count >= 10)
59
+ break;
60
+ if (key.startsWith("name:") && typeof value === "string" && value.trim() && value !== title) {
61
+ addAlias(data, value, "title", false, OPENSTREETMAP_PROVIDER, key.slice(5));
62
+ count += 1;
63
+ }
64
+ }
65
+ }
@@ -0,0 +1,2 @@
1
+ export { transformOpenStreetMapPlace as transformOpenStreetMapVenue } from "./place.js";
2
+ //# sourceMappingURL=venue.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"venue.d.ts","sourceRoot":"","sources":["../../../src/providers/openstreetmap/venue.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,2BAA2B,IAAI,2BAA2B,EAAE,MAAM,YAAY,CAAC"}
@@ -0,0 +1 @@
1
+ export { transformOpenStreetMapPlace as transformOpenStreetMapVenue } from "./place.js";
@@ -0,0 +1,3 @@
1
+ export declare const PODCAST_PROVIDER = "podcast";
2
+ export declare const PODCAST_CATEGORY = "podcast";
3
+ //# sourceMappingURL=constants.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../../src/providers/podcast/constants.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,gBAAgB,YAAY,CAAC;AAC1C,eAAO,MAAM,gBAAgB,YAAY,CAAC"}
@@ -0,0 +1,2 @@
1
+ export const PODCAST_PROVIDER = "podcast";
2
+ export const PODCAST_CATEGORY = "podcast";
@@ -0,0 +1,3 @@
1
+ export * from "./constants.js";
2
+ export * from "./podcast.js";
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/providers/podcast/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 "./podcast.js";
@@ -0,0 +1,4 @@
1
+ import type { ZuuidData } from "../../entity.js";
2
+ import type { SourceRecord } from "../../source.js";
3
+ export declare function transformPodcast(source: SourceRecord): Promise<ZuuidData>;
4
+ //# sourceMappingURL=podcast.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"podcast.d.ts","sourceRoot":"","sources":["../../../src/providers/podcast/podcast.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AACjD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAIpD,wBAAsB,gBAAgB,CAAC,MAAM,EAAE,YAAY,GAAG,OAAO,CAAC,SAAS,CAAC,CAsB/E"}
@@ -0,0 +1,30 @@
1
+ import { addAlias, addDescription, addDetail, addMedia, addTag, arrayField, baseDataFromSource, datePrefix, finalizeData, formatNumber, objectPayload, stringField, stripHtml, valueAsString } from "../common.js";
2
+ import { PODCAST_CATEGORY, PODCAST_PROVIDER } from "./constants.js";
3
+ export async function transformPodcast(source) {
4
+ if (source.source.provider !== PODCAST_PROVIDER || source.source.category !== PODCAST_CATEGORY) {
5
+ throw new Error(`unsupported podcast source: ${source.source.provider}:${source.source.category}`);
6
+ }
7
+ const payload = objectPayload(source.payload);
8
+ const id = source.source.externalId.trim() || valueAsString(payload.collectionId) || valueAsString(payload.trackId);
9
+ const title = stringField(payload, "collectionName") ?? stringField(payload, "trackName") ?? stringField(payload, "title") ?? stringField(payload, "name");
10
+ if (!id)
11
+ throw new Error("missing required podcast field: collectionId");
12
+ if (!title)
13
+ throw new Error("missing required podcast field: collectionName");
14
+ const data = await baseDataFromSource(source, PODCAST_PROVIDER, PODCAST_CATEGORY, PODCAST_CATEGORY, id, title);
15
+ data.primaryDate = datePrefix(stringField(payload, "releaseDate"));
16
+ addAlias(data, title, "title", true, PODCAST_PROVIDER, "en");
17
+ const description = stringField(payload, "longDescription") ?? stringField(payload, "description") ?? stringField(payload, "shortDescription");
18
+ addDescription(data, "itunes", description ? stripHtml(description) : undefined, "en");
19
+ addMedia(data, "itunes", stringField(payload, "artworkUrl600") ?? stringField(payload, "artworkUrl100") ?? stringField(payload, "artworkUrl60") ?? stringField(payload, "artworkUrl30"), "cover");
20
+ for (const [key, field] of [["artist", "artistName"], ["country", "country"], ["release_date", "releaseDate"], ["content_rating", "contentAdvisoryRating"], ["feed_url", "feedUrl"], ["explicit", "collectionExplicitness"], ["source_url", "collectionViewUrl"]])
21
+ addDetail(data, PODCAST_PROVIDER, key, stringField(payload, field));
22
+ addDetail(data, PODCAST_PROVIDER, "episode_count", valueAsString(payload.trackCount));
23
+ const price = typeof payload.collectionPrice === "number" && payload.collectionPrice > 0 ? formatNumber(payload.collectionPrice) : undefined;
24
+ addDetail(data, PODCAST_PROVIDER, "price", price);
25
+ addTag(data, stringField(payload, "primaryGenreName"));
26
+ for (const genre of arrayField(payload, "genres"))
27
+ if (typeof genre === "string")
28
+ addTag(data, genre);
29
+ return finalizeData(data, source);
30
+ }
@@ -0,0 +1,2 @@
1
+ export { transformSetlistFmArtist } from "./transform.js";
2
+ //# sourceMappingURL=artist.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"artist.d.ts","sourceRoot":"","sources":["../../../src/providers/setlistfm/artist.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,wBAAwB,EAAE,MAAM,gBAAgB,CAAC"}
@@ -0,0 +1 @@
1
+ export { transformSetlistFmArtist } from "./transform.js";
@@ -0,0 +1,5 @@
1
+ export declare const SETLISTFM_PROVIDER = "setlistfm";
2
+ export declare const SETLISTFM_SETLIST_CATEGORY = "setlist";
3
+ export declare const SETLISTFM_ARTIST_CATEGORY = "artist";
4
+ export declare const SETLISTFM_VENUE_CATEGORY = "venue";
5
+ //# sourceMappingURL=constants.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../../src/providers/setlistfm/constants.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,kBAAkB,cAAc,CAAC;AAC9C,eAAO,MAAM,0BAA0B,YAAY,CAAC;AACpD,eAAO,MAAM,yBAAyB,WAAW,CAAC;AAClD,eAAO,MAAM,wBAAwB,UAAU,CAAC"}
@@ -0,0 +1,4 @@
1
+ export const SETLISTFM_PROVIDER = "setlistfm";
2
+ export const SETLISTFM_SETLIST_CATEGORY = "setlist";
3
+ export const SETLISTFM_ARTIST_CATEGORY = "artist";
4
+ export const SETLISTFM_VENUE_CATEGORY = "venue";
@@ -0,0 +1,6 @@
1
+ export * from "./artist.js";
2
+ export * from "./constants.js";
3
+ export * from "./setlist.js";
4
+ export * from "./transform.js";
5
+ export * from "./venue.js";
6
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/providers/setlistfm/index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAC;AAC5B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,cAAc,CAAC;AAC7B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,YAAY,CAAC"}
@@ -0,0 +1,5 @@
1
+ export * from "./artist.js";
2
+ export * from "./constants.js";
3
+ export * from "./setlist.js";
4
+ export * from "./transform.js";
5
+ export * from "./venue.js";
@@ -0,0 +1,2 @@
1
+ export { transformSetlistFmSetlist } from "./transform.js";
2
+ //# sourceMappingURL=setlist.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"setlist.d.ts","sourceRoot":"","sources":["../../../src/providers/setlistfm/setlist.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,yBAAyB,EAAE,MAAM,gBAAgB,CAAC"}
@@ -0,0 +1 @@
1
+ export { transformSetlistFmSetlist } from "./transform.js";
@@ -0,0 +1,7 @@
1
+ import type { ZuuidData } from "../../entity.js";
2
+ import type { SourceRecord } from "../../source.js";
3
+ export declare function transformSetlistFm(source: SourceRecord): Promise<ZuuidData>;
4
+ export declare function transformSetlistFmSetlist(source: SourceRecord): Promise<ZuuidData>;
5
+ export declare function transformSetlistFmArtist(source: SourceRecord): Promise<ZuuidData>;
6
+ export declare function transformSetlistFmVenue(source: SourceRecord): Promise<ZuuidData>;
7
+ //# sourceMappingURL=transform.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"transform.d.ts","sourceRoot":"","sources":["../../../src/providers/setlistfm/transform.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AACjD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAIpD,wBAAsB,kBAAkB,CAAC,MAAM,EAAE,YAAY,GAAG,OAAO,CAAC,SAAS,CAAC,CAMjF;AAED,wBAAsB,yBAAyB,CAAC,MAAM,EAAE,YAAY,GAAG,OAAO,CAAC,SAAS,CAAC,CA4BxF;AAED,wBAAsB,wBAAwB,CAAC,MAAM,EAAE,YAAY,GAAG,OAAO,CAAC,SAAS,CAAC,CAkBvF;AAED,wBAAsB,uBAAuB,CAAC,MAAM,EAAE,YAAY,GAAG,OAAO,CAAC,SAAS,CAAC,CAYtF"}
@@ -0,0 +1,122 @@
1
+ import { addAlias, addDescription, addDetail, addRelation, addTag, arrayField, baseDataFromSource, datePrefix, finalizeData, formatNumber, nestedString, objectPayload, stringField, valueAsString } from "../common.js";
2
+ import { SETLISTFM_ARTIST_CATEGORY, SETLISTFM_PROVIDER, SETLISTFM_SETLIST_CATEGORY, SETLISTFM_VENUE_CATEGORY } from "./constants.js";
3
+ export async function transformSetlistFm(source) {
4
+ if (source.source.provider !== SETLISTFM_PROVIDER)
5
+ throw new Error(`unsupported Setlist.fm source: ${source.source.provider}:${source.source.category}`);
6
+ if (source.source.category === SETLISTFM_SETLIST_CATEGORY)
7
+ return transformSetlistFmSetlist(source);
8
+ if (source.source.category === SETLISTFM_ARTIST_CATEGORY)
9
+ return transformSetlistFmArtist(source);
10
+ if (source.source.category === SETLISTFM_VENUE_CATEGORY)
11
+ return transformSetlistFmVenue(source);
12
+ throw new Error(`unsupported Setlist.fm source: ${source.source.provider}:${source.source.category}`);
13
+ }
14
+ export async function transformSetlistFmSetlist(source) {
15
+ const payload = objectPayload(source.payload);
16
+ const id = source.source.externalId.trim() || stringField(payload, "id");
17
+ if (!id)
18
+ throw new Error("missing required Setlist.fm field: id");
19
+ const artist = nestedString(payload, ["artist", "name"]) ?? "Unknown Artist";
20
+ const venue = nestedString(payload, ["venue", "name"]) ?? "Unknown Venue";
21
+ const city = nestedString(payload, ["venue", "city", "name"]) ?? "Unknown City";
22
+ const country = nestedString(payload, ["venue", "city", "country", "code"]) ?? "XX";
23
+ const primaryDate = parseSetlistDate(stringField(payload, "eventDate"));
24
+ const title = `${artist} @ ${venue}, ${city} (${country}) - ${primaryDate ?? stringField(payload, "eventDate") ?? ""}`;
25
+ const data = await baseDataFromSource(source, SETLISTFM_PROVIDER, SETLISTFM_SETLIST_CATEGORY, "event", id, title);
26
+ data.primaryDate = primaryDate;
27
+ addAlias(data, title, "title", true, SETLISTFM_PROVIDER, "en");
28
+ const { lines, songs, songCount, encoreCount } = songsFromPayload(payload);
29
+ addDescription(data, SETLISTFM_PROVIDER, lines.join("\n") || undefined, "en");
30
+ addDetail(data, SETLISTFM_PROVIDER, "tour", nestedString(payload, ["tour", "name"]));
31
+ addDetail(data, SETLISTFM_PROVIDER, "song_count", String(songCount));
32
+ addDetail(data, SETLISTFM_PROVIDER, "encore_count", String(encoreCount));
33
+ addDetail(data, SETLISTFM_PROVIDER, "event_date", primaryDate);
34
+ addDetail(data, SETLISTFM_PROVIDER, "source_url", stringField(payload, "url"));
35
+ addDetail(data, SETLISTFM_PROVIDER, "songs", songs.length ? songs.join(", ") : undefined);
36
+ addDetail(data, SETLISTFM_PROVIDER, "info", stringField(payload, "info"));
37
+ await addRelation(data, SETLISTFM_PROVIDER, SETLISTFM_ARTIST_CATEGORY, nestedString(payload, ["artist", "mbid"]), "artist", artist);
38
+ await addRelation(data, SETLISTFM_PROVIDER, SETLISTFM_VENUE_CATEGORY, nestedString(payload, ["venue", "id"]), "venue", venue);
39
+ addTag(data, "concert");
40
+ addTag(data, "live");
41
+ addTag(data, "setlist");
42
+ addTag(data, nestedString(payload, ["tour", "name"]));
43
+ const mbid = nestedString(payload, ["artist", "mbid"]);
44
+ if (mbid)
45
+ data.externalIds.push({ source: "musicbrainz", category: "artist", value: mbid });
46
+ return finalizeData(data, source);
47
+ }
48
+ export async function transformSetlistFmArtist(source) {
49
+ const payload = objectPayload(source.payload);
50
+ const id = source.source.externalId.trim() || stringField(payload, "mbid") || stringField(payload, "id");
51
+ const name = stringField(payload, "name");
52
+ if (!id)
53
+ throw new Error("missing required Setlist.fm artist field: mbid");
54
+ if (!name)
55
+ throw new Error("missing required Setlist.fm artist field: name");
56
+ const title = stringField(payload, "disambiguation") ? `${name} (${stringField(payload, "disambiguation")})` : name;
57
+ const data = await baseDataFromSource(source, SETLISTFM_PROVIDER, SETLISTFM_ARTIST_CATEGORY, "artist", id, title);
58
+ addAlias(data, title, "title", true, SETLISTFM_PROVIDER, "en");
59
+ addAlias(data, stringField(payload, "sortName") === name ? undefined : stringField(payload, "sortName"), "alias", false, SETLISTFM_PROVIDER);
60
+ addDescription(data, SETLISTFM_PROVIDER, stringField(payload, "disambiguation"), "en");
61
+ addDetail(data, SETLISTFM_PROVIDER, "source_url", stringField(payload, "url"));
62
+ addDetail(data, SETLISTFM_PROVIDER, "total_setlists", valueAsString(payload.setlists?.total));
63
+ addTag(data, "artist");
64
+ addTag(data, "musician");
65
+ data.externalIds.push({ source: "musicbrainz", category: "artist", value: id });
66
+ const tmid = stringField(payload, "tmid");
67
+ if (tmid)
68
+ data.externalIds.push({ source: "ticketmaster", category: "artist", value: tmid });
69
+ return finalizeData(data, source);
70
+ }
71
+ export async function transformSetlistFmVenue(source) {
72
+ const payload = objectPayload(source.payload);
73
+ const id = source.source.externalId.trim() || stringField(payload, "id");
74
+ const name = stringField(payload, "name");
75
+ if (!id)
76
+ throw new Error("missing required Setlist.fm venue field: id");
77
+ if (!name)
78
+ throw new Error("missing required Setlist.fm venue field: name");
79
+ const title = `${name}, ${nestedString(payload, ["city", "name"]) ?? "Unknown"}, ${nestedString(payload, ["city", "country", "name"]) ?? "Unknown"}`;
80
+ const data = await baseDataFromSource(source, SETLISTFM_PROVIDER, SETLISTFM_VENUE_CATEGORY, "venue", id, title);
81
+ addAlias(data, title, "title", true, SETLISTFM_PROVIDER, "en");
82
+ for (const [key, value] of [["city", nestedString(payload, ["city", "name"])], ["state", nestedString(payload, ["city", "state"])], ["state_code", nestedString(payload, ["city", "stateCode"])], ["country", nestedString(payload, ["city", "country", "name"])], ["country_code", nestedString(payload, ["city", "country", "code"])], ["latitude", nestedNumber(payload, ["city", "coords", "lat"])], ["longitude", nestedNumber(payload, ["city", "coords", "long"])], ["source_url", stringField(payload, "url")]])
83
+ addDetail(data, SETLISTFM_PROVIDER, key, value);
84
+ addTag(data, "venue");
85
+ addTag(data, "concert hall");
86
+ addTag(data, "live music");
87
+ return finalizeData(data, source);
88
+ }
89
+ function parseSetlistDate(value) {
90
+ const match = /^(\d{2})-(\d{2})-(\d{4})$/.exec(value ?? "");
91
+ return match ? `${match[3]}-${match[2]}-${match[1]}` : datePrefix(value);
92
+ }
93
+ function songsFromPayload(payload) {
94
+ const lines = [];
95
+ const songs = [];
96
+ let songCount = 0;
97
+ let encoreCount = 0;
98
+ const sets = payload.sets && typeof payload.sets === "object" && !Array.isArray(payload.sets) ? arrayField(payload.sets, "set") : [];
99
+ for (const set of sets) {
100
+ if (set && typeof set === "object" && !Array.isArray(set) && typeof set.encore === "number" && set.encore > 0)
101
+ encoreCount += 1;
102
+ if (!set || typeof set !== "object" || Array.isArray(set))
103
+ continue;
104
+ for (const song of arrayField(set, "song")) {
105
+ if (!song || typeof song !== "object" || Array.isArray(song))
106
+ continue;
107
+ const name = stringField(song, "name");
108
+ if (!name)
109
+ continue;
110
+ songCount += 1;
111
+ songs.push(name);
112
+ lines.push(`${songCount}. ${name}${song.tape ? " [tape]" : ""}${stringField(song, "info") ? ` (${stringField(song, "info")})` : ""}`);
113
+ }
114
+ }
115
+ return { lines, songs, songCount, encoreCount };
116
+ }
117
+ function nestedNumber(payload, path) {
118
+ let current = payload;
119
+ for (const key of path)
120
+ current = current && typeof current === "object" && !Array.isArray(current) ? current[key] : undefined;
121
+ return typeof current === "number" ? formatNumber(current) : undefined;
122
+ }
@@ -0,0 +1,2 @@
1
+ export { transformSetlistFmVenue } from "./transform.js";
2
+ //# sourceMappingURL=venue.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"venue.d.ts","sourceRoot":"","sources":["../../../src/providers/setlistfm/venue.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,uBAAuB,EAAE,MAAM,gBAAgB,CAAC"}
@@ -0,0 +1 @@
1
+ export { transformSetlistFmVenue } from "./transform.js";
@@ -0,0 +1,2 @@
1
+ export { transformTicketmasterAttraction } from "./transform.js";
2
+ //# sourceMappingURL=attraction.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"attraction.d.ts","sourceRoot":"","sources":["../../../src/providers/ticketmaster/attraction.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,+BAA+B,EAAE,MAAM,gBAAgB,CAAC"}
@@ -0,0 +1 @@
1
+ export { transformTicketmasterAttraction } from "./transform.js";
@@ -0,0 +1,5 @@
1
+ export declare const TICKETMASTER_PROVIDER = "ticketmaster";
2
+ export declare const TICKETMASTER_EVENT_CATEGORY = "event";
3
+ export declare const TICKETMASTER_ATTRACTION_CATEGORY = "attraction";
4
+ export declare const TICKETMASTER_VENUE_CATEGORY = "venue";
5
+ //# sourceMappingURL=constants.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../../src/providers/ticketmaster/constants.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,qBAAqB,iBAAiB,CAAC;AACpD,eAAO,MAAM,2BAA2B,UAAU,CAAC;AACnD,eAAO,MAAM,gCAAgC,eAAe,CAAC;AAC7D,eAAO,MAAM,2BAA2B,UAAU,CAAC"}
@@ -0,0 +1,4 @@
1
+ export const TICKETMASTER_PROVIDER = "ticketmaster";
2
+ export const TICKETMASTER_EVENT_CATEGORY = "event";
3
+ export const TICKETMASTER_ATTRACTION_CATEGORY = "attraction";
4
+ export const TICKETMASTER_VENUE_CATEGORY = "venue";
@@ -0,0 +1,2 @@
1
+ export { transformTicketmasterEvent } from "./transform.js";
2
+ //# sourceMappingURL=event.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"event.d.ts","sourceRoot":"","sources":["../../../src/providers/ticketmaster/event.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,0BAA0B,EAAE,MAAM,gBAAgB,CAAC"}
@@ -0,0 +1 @@
1
+ export { transformTicketmasterEvent } from "./transform.js";
@@ -0,0 +1,6 @@
1
+ export * from "./attraction.js";
2
+ export * from "./constants.js";
3
+ export * from "./event.js";
4
+ export * from "./transform.js";
5
+ export * from "./venue.js";
6
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/providers/ticketmaster/index.ts"],"names":[],"mappings":"AAAA,cAAc,iBAAiB,CAAC;AAChC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,YAAY,CAAC;AAC3B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,YAAY,CAAC"}
@@ -0,0 +1,5 @@
1
+ export * from "./attraction.js";
2
+ export * from "./constants.js";
3
+ export * from "./event.js";
4
+ export * from "./transform.js";
5
+ export * from "./venue.js";
@@ -0,0 +1,7 @@
1
+ import type { ZuuidData } from "../../entity.js";
2
+ import type { SourceRecord } from "../../source.js";
3
+ export declare function transformTicketmaster(source: SourceRecord): Promise<ZuuidData>;
4
+ export declare function transformTicketmasterEvent(source: SourceRecord): Promise<ZuuidData>;
5
+ export declare function transformTicketmasterAttraction(source: SourceRecord): Promise<ZuuidData>;
6
+ export declare function transformTicketmasterVenue(source: SourceRecord): Promise<ZuuidData>;
7
+ //# sourceMappingURL=transform.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"transform.d.ts","sourceRoot":"","sources":["../../../src/providers/ticketmaster/transform.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AACjD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAIpD,wBAAsB,qBAAqB,CAAC,MAAM,EAAE,YAAY,GAAG,OAAO,CAAC,SAAS,CAAC,CAMpF;AAED,wBAAsB,0BAA0B,CAAC,MAAM,EAAE,YAAY,GAAG,OAAO,CAAC,SAAS,CAAC,CAUzF;AAED,wBAAsB,+BAA+B,CAAC,MAAM,EAAE,YAAY,GAAG,OAAO,CAAC,SAAS,CAAC,CAU9F;AAED,wBAAsB,0BAA0B,CAAC,MAAM,EAAE,YAAY,GAAG,OAAO,CAAC,SAAS,CAAC,CAMzF"}
@@ -0,0 +1,89 @@
1
+ import { addAlias, addDescription, addDetail, addMedia, addRelation, addTag, arrayField, baseDataFromSource, datePrefix, finalizeData, nestedString, objectPayload, stringField, valueAsString } from "../common.js";
2
+ import { TICKETMASTER_ATTRACTION_CATEGORY, TICKETMASTER_EVENT_CATEGORY, TICKETMASTER_PROVIDER, TICKETMASTER_VENUE_CATEGORY } from "./constants.js";
3
+ export async function transformTicketmaster(source) {
4
+ if (source.source.provider !== TICKETMASTER_PROVIDER)
5
+ throw new Error(`unsupported Ticketmaster source: ${source.source.provider}:${source.source.category}`);
6
+ if (source.source.category === TICKETMASTER_EVENT_CATEGORY)
7
+ return transformTicketmasterEvent(source);
8
+ if (source.source.category === TICKETMASTER_ATTRACTION_CATEGORY)
9
+ return transformTicketmasterAttraction(source);
10
+ if (source.source.category === TICKETMASTER_VENUE_CATEGORY)
11
+ return transformTicketmasterVenue(source);
12
+ throw new Error(`unsupported Ticketmaster source: ${source.source.provider}:${source.source.category}`);
13
+ }
14
+ export async function transformTicketmasterEvent(source) {
15
+ const payload = objectPayload(source.payload);
16
+ const data = await baseTicketmaster(source, "event");
17
+ data.primaryDate = datePrefix(nestedString(payload, ["dates", "start", "localDate"]));
18
+ addDescription(data, TICKETMASTER_PROVIDER, stringField(payload, "info") ?? stringField(payload, "pleaseNote") ?? stringField(payload, "please_note"));
19
+ for (const [key, value] of [["type", stringField(payload, "type")], ["locale", stringField(payload, "locale")], ["source_url", stringField(payload, "url")], ["status", nestedString(payload, ["dates", "status", "code"])], ["event_date", nestedString(payload, ["dates", "start", "localDate"])], ["event_time", nestedString(payload, ["dates", "start", "localTime"])], ["timezone", nestedString(payload, ["dates", "timezone"])]])
20
+ addDetail(data, TICKETMASTER_PROVIDER, key, value);
21
+ addImages(data, payload);
22
+ addClassifications(data, payload);
23
+ await addEmbeddedRelations(data, payload, "venues", TICKETMASTER_VENUE_CATEGORY);
24
+ await addEmbeddedRelations(data, payload, "attractions", TICKETMASTER_ATTRACTION_CATEGORY);
25
+ return finalizeData(data, source);
26
+ }
27
+ export async function transformTicketmasterAttraction(source) {
28
+ const payload = objectPayload(source.payload);
29
+ const data = await baseTicketmaster(source, "artist");
30
+ addAlias(data, data.primaryTitle, "title", true, TICKETMASTER_PROVIDER);
31
+ for (const alias of arrayField(payload, "aliases"))
32
+ if (typeof alias === "string")
33
+ addAlias(data, alias, "alias", false, TICKETMASTER_PROVIDER);
34
+ addDetail(data, TICKETMASTER_PROVIDER, "type", stringField(payload, "type"));
35
+ addDetail(data, TICKETMASTER_PROVIDER, "source_url", stringField(payload, "url"));
36
+ addDetail(data, TICKETMASTER_PROVIDER, "upcoming_events", valueAsString(payload.upcomingEvents?._total));
37
+ addImages(data, payload);
38
+ addClassifications(data, payload);
39
+ addTag(data, "attraction");
40
+ return finalizeData(data, source);
41
+ }
42
+ export async function transformTicketmasterVenue(source) {
43
+ const payload = objectPayload(source.payload);
44
+ const data = await baseTicketmaster(source, TICKETMASTER_VENUE_CATEGORY);
45
+ for (const [key, value] of [["type", stringField(payload, "type")], ["timezone", stringField(payload, "timezone")], ["source_url", stringField(payload, "url")], ["postal_code", stringField(payload, "postalCode")], ["city", nestedString(payload, ["city", "name"])], ["state", nestedString(payload, ["state", "name"])], ["country", nestedString(payload, ["country", "name"])], ["latitude", nestedString(payload, ["location", "latitude"])], ["longitude", nestedString(payload, ["location", "longitude"])], ["parking", nestedString(payload, ["parkingDetail"])], ["accessibility", nestedString(payload, ["accessibleSeatingDetail"])]])
46
+ addDetail(data, TICKETMASTER_PROVIDER, key, value);
47
+ addImages(data, payload);
48
+ addTag(data, "venue");
49
+ return finalizeData(data, source);
50
+ }
51
+ async function baseTicketmaster(source, publicCategory) {
52
+ const payload = objectPayload(source.payload);
53
+ const id = source.source.externalId.trim() || stringField(payload, "id");
54
+ const title = stringField(payload, "name") ?? stringField(payload, "title");
55
+ if (!id)
56
+ throw new Error("missing required Ticketmaster field: id");
57
+ if (!title)
58
+ throw new Error("missing required Ticketmaster field: name");
59
+ return baseDataFromSource(source, TICKETMASTER_PROVIDER, source.source.category, publicCategory, id, title);
60
+ }
61
+ function addImages(data, payload) {
62
+ let index = 0;
63
+ for (const value of arrayField(payload, "images")) {
64
+ if (value && typeof value === "object" && !Array.isArray(value)) {
65
+ addMedia(data, TICKETMASTER_PROVIDER, stringField(value, "url"), "image", "image", index === 0);
66
+ index += 1;
67
+ }
68
+ }
69
+ }
70
+ function addClassifications(data, payload) {
71
+ for (const classification of arrayField(payload, "classifications")) {
72
+ if (!classification || typeof classification !== "object" || Array.isArray(classification))
73
+ continue;
74
+ for (const key of ["segment", "genre", "subGenre", "type", "subType"])
75
+ addTag(data, nestedString(classification, [key, "name"]));
76
+ }
77
+ }
78
+ async function addEmbeddedRelations(data, payload, key, category) {
79
+ const embedded = payload._embedded;
80
+ if (!embedded || typeof embedded !== "object" || Array.isArray(embedded))
81
+ return;
82
+ let index = 0;
83
+ for (const value of arrayField(embedded, key)) {
84
+ if (value && typeof value === "object" && !Array.isArray(value)) {
85
+ await addRelation(data, TICKETMASTER_PROVIDER, category, stringField(value, "id"), category, stringField(value, "name"), { order: index });
86
+ index += 1;
87
+ }
88
+ }
89
+ }
@@ -0,0 +1,2 @@
1
+ export { transformTicketmasterVenue } from "./transform.js";
2
+ //# sourceMappingURL=venue.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"venue.d.ts","sourceRoot":"","sources":["../../../src/providers/ticketmaster/venue.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,0BAA0B,EAAE,MAAM,gBAAgB,CAAC"}
@@ -0,0 +1 @@
1
+ export { transformTicketmasterVenue } from "./transform.js";
@@ -0,0 +1,4 @@
1
+ export declare const WGER_PROVIDER = "wger";
2
+ export declare const WGER_EXERCISE_CATEGORY = "exercise";
3
+ export declare const WGER_EQUIPMENT_CATEGORY = "equipment";
4
+ //# sourceMappingURL=constants.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../../src/providers/wger/constants.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,aAAa,SAAS,CAAC;AACpC,eAAO,MAAM,sBAAsB,aAAa,CAAC;AACjD,eAAO,MAAM,uBAAuB,cAAc,CAAC"}
@@ -0,0 +1,3 @@
1
+ export const WGER_PROVIDER = "wger";
2
+ export const WGER_EXERCISE_CATEGORY = "exercise";
3
+ export const WGER_EQUIPMENT_CATEGORY = "equipment";
@@ -0,0 +1,4 @@
1
+ import type { ZuuidData } from "../../entity.js";
2
+ import type { SourceRecord } from "../../source.js";
3
+ export declare function transformWgerEquipment(source: SourceRecord): Promise<ZuuidData>;
4
+ //# sourceMappingURL=equipment.d.ts.map