@zivue/zuuid 0.1.0 → 0.2.1

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 (207) hide show
  1. package/CHANGELOG.md +16 -1
  2. package/README.md +291 -215
  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 +24 -0
  39. package/dist/providers/common.d.ts.map +1 -0
  40. package/dist/providers/common.js +140 -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 +61 -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 +127 -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 +536 -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 +67 -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/tmdb/movie.d.ts.map +1 -1
  192. package/dist/providers/tmdb/movie.js +9 -22
  193. package/dist/providers/tmdb/tv.d.ts.map +1 -1
  194. package/dist/providers/tmdb/tv.js +4 -2
  195. package/dist/providers/wger/constants.d.ts +4 -0
  196. package/dist/providers/wger/constants.d.ts.map +1 -0
  197. package/dist/providers/wger/constants.js +3 -0
  198. package/dist/providers/wger/equipment.d.ts +4 -0
  199. package/dist/providers/wger/equipment.d.ts.map +1 -0
  200. package/dist/providers/wger/equipment.js +22 -0
  201. package/dist/providers/wger/exercise.d.ts +4 -0
  202. package/dist/providers/wger/exercise.d.ts.map +1 -0
  203. package/dist/providers/wger/exercise.js +42 -0
  204. package/dist/providers/wger/index.d.ts +4 -0
  205. package/dist/providers/wger/index.d.ts.map +1 -0
  206. package/dist/providers/wger/index.js +3 -0
  207. package/package.json +201 -5
@@ -0,0 +1,22 @@
1
+ import type { SearchResponse, ZuuidData, ZuuidSearchResult } from "../../entity.js";
2
+ import type { SourceRecord } from "../../source.js";
3
+ import { type FetchOpenLibraryAuthorInput } from "./author.js";
4
+ import { type FetchOpenLibraryBookInput } from "./book.js";
5
+ import type { OpenLibraryProviderOptions, OpenLibrarySearchInput, OpenLibraryTransformOptions } from "./types.js";
6
+ export declare class OpenLibraryProvider {
7
+ readonly apiBase: string;
8
+ readonly coverBaseUrl: string | null;
9
+ private readonly fetchImpl;
10
+ constructor(options?: OpenLibraryProviderOptions);
11
+ getJson<T>(path: string, params: Record<string, string>): Promise<T | undefined>;
12
+ fetchBookSourceRecord(input: FetchOpenLibraryBookInput): Promise<SourceRecord | undefined>;
13
+ fetchBook(input: FetchOpenLibraryBookInput): Promise<ZuuidData | undefined>;
14
+ fetchAuthorSourceRecord(input: FetchOpenLibraryAuthorInput): Promise<SourceRecord | undefined>;
15
+ fetchAuthor(input: FetchOpenLibraryAuthorInput): Promise<ZuuidData | undefined>;
16
+ searchBookSourceRecords(input: OpenLibrarySearchInput): Promise<SearchResponse<SourceRecord>>;
17
+ searchBooks(input: OpenLibrarySearchInput): Promise<SearchResponse<ZuuidSearchResult>>;
18
+ searchAuthorSourceRecords(input: OpenLibrarySearchInput): Promise<SearchResponse<SourceRecord>>;
19
+ searchAuthors(input: OpenLibrarySearchInput): Promise<SearchResponse<ZuuidSearchResult>>;
20
+ transformOptions(): OpenLibraryTransformOptions;
21
+ }
22
+ //# sourceMappingURL=client.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../../src/providers/openlibrary/client.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,SAAS,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AACpF,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AACpD,OAAO,EAKL,KAAK,2BAA2B,EACjC,MAAM,aAAa,CAAC;AACrB,OAAO,EAKL,KAAK,yBAAyB,EAC/B,MAAM,WAAW,CAAC;AAEnB,OAAO,KAAK,EAAwB,0BAA0B,EAAE,sBAAsB,EAAE,2BAA2B,EAAE,MAAM,YAAY,CAAC;AAExI,qBAAa,mBAAmB;IAC9B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAErC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAuB;gBAErC,OAAO,GAAE,0BAA+B;IAM9C,OAAO,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,OAAO,CAAC,CAAC,GAAG,SAAS,CAAC;IAqBhF,qBAAqB,CAAC,KAAK,EAAE,yBAAyB,GAAG,OAAO,CAAC,YAAY,GAAG,SAAS,CAAC;IAI1F,SAAS,CAAC,KAAK,EAAE,yBAAyB,GAAG,OAAO,CAAC,SAAS,GAAG,SAAS,CAAC;IAK3E,uBAAuB,CAAC,KAAK,EAAE,2BAA2B,GAAG,OAAO,CAAC,YAAY,GAAG,SAAS,CAAC;IAI9F,WAAW,CAAC,KAAK,EAAE,2BAA2B,GAAG,OAAO,CAAC,SAAS,GAAG,SAAS,CAAC;IAK/E,uBAAuB,CAAC,KAAK,EAAE,sBAAsB,GAAG,OAAO,CAAC,cAAc,CAAC,YAAY,CAAC,CAAC;IAI7F,WAAW,CAAC,KAAK,EAAE,sBAAsB,GAAG,OAAO,CAAC,cAAc,CAAC,iBAAiB,CAAC,CAAC;IAItF,yBAAyB,CAAC,KAAK,EAAE,sBAAsB,GAAG,OAAO,CAAC,cAAc,CAAC,YAAY,CAAC,CAAC;IAI/F,aAAa,CAAC,KAAK,EAAE,sBAAsB,GAAG,OAAO,CAAC,cAAc,CAAC,iBAAiB,CAAC,CAAC;IAI9F,gBAAgB,IAAI,2BAA2B;CAKhD"}
@@ -0,0 +1,61 @@
1
+ import { fetchOpenLibraryAuthorSourceRecord, searchOpenLibraryAuthors, searchOpenLibraryAuthorSourceRecords, transformOpenLibraryAuthor } from "./author.js";
2
+ import { fetchOpenLibraryBookSourceRecord, searchOpenLibraryBooks, searchOpenLibraryBookSourceRecords, transformOpenLibraryBook } from "./book.js";
3
+ import { OPEN_LIBRARY_API_BASE, OPEN_LIBRARY_COVER_BASE_URL } from "./constants.js";
4
+ export class OpenLibraryProvider {
5
+ apiBase;
6
+ coverBaseUrl;
7
+ fetchImpl;
8
+ constructor(options = {}) {
9
+ this.apiBase = options.apiBase ?? OPEN_LIBRARY_API_BASE;
10
+ this.coverBaseUrl = options.coverBaseUrl === undefined ? OPEN_LIBRARY_COVER_BASE_URL : options.coverBaseUrl;
11
+ this.fetchImpl = options.fetch ?? globalThis.fetch.bind(globalThis);
12
+ }
13
+ async getJson(path, params) {
14
+ const url = new URL(`${this.apiBase.replace(/\/$/, "")}/${path.replace(/^\//, "")}`);
15
+ for (const [key, value] of Object.entries(params)) {
16
+ url.searchParams.set(key, value);
17
+ }
18
+ const headers = new Headers();
19
+ headers.set("accept", "application/json");
20
+ const response = await this.fetchImpl(url, { headers });
21
+ if (response.status === 404) {
22
+ return undefined;
23
+ }
24
+ if (!response.ok) {
25
+ const body = await response.text().catch(() => "");
26
+ throw new Error(`Open Library API returned ${response.status}: ${body}`);
27
+ }
28
+ return response.json();
29
+ }
30
+ async fetchBookSourceRecord(input) {
31
+ return fetchOpenLibraryBookSourceRecord(this, input);
32
+ }
33
+ async fetchBook(input) {
34
+ const source = await this.fetchBookSourceRecord(input);
35
+ return source ? transformOpenLibraryBook(source, this.transformOptions()) : undefined;
36
+ }
37
+ async fetchAuthorSourceRecord(input) {
38
+ return fetchOpenLibraryAuthorSourceRecord(this, input);
39
+ }
40
+ async fetchAuthor(input) {
41
+ const source = await this.fetchAuthorSourceRecord(input);
42
+ return source ? transformOpenLibraryAuthor(source, this.transformOptions()) : undefined;
43
+ }
44
+ async searchBookSourceRecords(input) {
45
+ return searchOpenLibraryBookSourceRecords(this, input);
46
+ }
47
+ async searchBooks(input) {
48
+ return searchOpenLibraryBooks(this, input, this.transformOptions());
49
+ }
50
+ async searchAuthorSourceRecords(input) {
51
+ return searchOpenLibraryAuthorSourceRecords(this, input);
52
+ }
53
+ async searchAuthors(input) {
54
+ return searchOpenLibraryAuthors(this, input);
55
+ }
56
+ transformOptions() {
57
+ return {
58
+ coverBaseUrl: this.coverBaseUrl
59
+ };
60
+ }
61
+ }
@@ -0,0 +1,4 @@
1
+ export declare const OPEN_LIBRARY_PROVIDER = "openlibrary";
2
+ export declare const OPEN_LIBRARY_API_BASE = "https://openlibrary.org";
3
+ export declare const OPEN_LIBRARY_COVER_BASE_URL = "https://covers.openlibrary.org/b/id";
4
+ //# sourceMappingURL=constants.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../../src/providers/openlibrary/constants.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,qBAAqB,gBAAgB,CAAC;AACnD,eAAO,MAAM,qBAAqB,4BAA4B,CAAC;AAC/D,eAAO,MAAM,2BAA2B,wCAAwC,CAAC"}
@@ -0,0 +1,3 @@
1
+ export const OPEN_LIBRARY_PROVIDER = "openlibrary";
2
+ export const OPEN_LIBRARY_API_BASE = "https://openlibrary.org";
3
+ export const OPEN_LIBRARY_COVER_BASE_URL = "https://covers.openlibrary.org/b/id";
@@ -0,0 +1,6 @@
1
+ export * from "./author.js";
2
+ export * from "./book.js";
3
+ export * from "./client.js";
4
+ export * from "./constants.js";
5
+ export * from "./types.js";
6
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/providers/openlibrary/index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAC;AAC5B,cAAc,WAAW,CAAC;AAC1B,cAAc,aAAa,CAAC;AAC5B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,YAAY,CAAC"}
@@ -0,0 +1,5 @@
1
+ export * from "./author.js";
2
+ export * from "./book.js";
3
+ export * from "./client.js";
4
+ export * from "./constants.js";
5
+ export * from "./types.js";
@@ -0,0 +1,23 @@
1
+ export type OpenLibraryFetchLike = (input: string | URL, init?: RequestInit) => Promise<Response>;
2
+ export type OpenLibraryProviderOptions = {
3
+ apiBase?: string;
4
+ coverBaseUrl?: string | null;
5
+ fetch?: OpenLibraryFetchLike;
6
+ };
7
+ export type OpenLibraryTransformOptions = {
8
+ coverBaseUrl?: string | null;
9
+ };
10
+ export type OpenLibrarySearchInput = {
11
+ query: string;
12
+ page?: number;
13
+ limit?: number;
14
+ language?: string;
15
+ fields?: string[];
16
+ };
17
+ export type OpenLibrarySearchResponse<T> = {
18
+ start?: number;
19
+ numFound?: number;
20
+ num_found?: number;
21
+ docs?: T[];
22
+ };
23
+ //# sourceMappingURL=types.d.ts.map
@@ -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,CAkC1F"}
@@ -0,0 +1,67 @@
1
+ import { addAlias, addDescription, addDetail, addMedia, addTag, arrayField, baseDataFromSource, finalizeData, nestedString, normalizeRating, 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
+ const rawImportance = typeof payload.importance === "number" ? payload.importance : undefined;
16
+ data.rating = normalizeRating(rawImportance, 0, 1);
17
+ addDetail(data, OPENSTREETMAP_PROVIDER, "provider_rating", rawImportance);
18
+ addAlias(data, title, "title", true, OPENSTREETMAP_PROVIDER);
19
+ addNamedetailAliases(data, payload, title);
20
+ addDescription(data, OPENSTREETMAP_PROVIDER, stringField(payload, "display_name"), "en");
21
+ addMedia(data, OPENSTREETMAP_PROVIDER, stringField(payload, "icon"), "icon");
22
+ addDetail(data, OPENSTREETMAP_PROVIDER, "osm_type", stringField(payload, "osm_type"));
23
+ addDetail(data, OPENSTREETMAP_PROVIDER, "osm_id", valueAsString(payload.osm_id));
24
+ addDetail(data, OPENSTREETMAP_PROVIDER, "latitude", stringField(payload, "lat"));
25
+ addDetail(data, OPENSTREETMAP_PROVIDER, "longitude", stringField(payload, "lon"));
26
+ for (const [key, path] of [["country", ["address", "country"]], ["country_code", ["address", "country_code"]], ["state", ["address", "state"]], ["postal_code", ["address", "postcode"]]])
27
+ addDetail(data, OPENSTREETMAP_PROVIDER, key, nestedString(payload, [...path]));
28
+ addDetail(data, OPENSTREETMAP_PROVIDER, "city", nestedString(payload, ["address", "city"]) ?? nestedString(payload, ["address", "town"]) ?? nestedString(payload, ["address", "village"]));
29
+ addDetail(data, OPENSTREETMAP_PROVIDER, "road", nestedString(payload, ["address", "road"]));
30
+ addDetail(data, OPENSTREETMAP_PROVIDER, "house_number", nestedString(payload, ["address", "house_number"]));
31
+ addDetail(data, OPENSTREETMAP_PROVIDER, "class", stringField(payload, "class"));
32
+ addDetail(data, OPENSTREETMAP_PROVIDER, "type", stringField(payload, "type"));
33
+ const bbox = arrayField(payload, "boundingbox").filter((value) => typeof value === "string").join(",");
34
+ addDetail(data, OPENSTREETMAP_PROVIDER, "bounding_box", bbox || undefined);
35
+ for (const key of ["population", "wikidata", "wikipedia"])
36
+ addDetail(data, OPENSTREETMAP_PROVIDER, key, nestedString(payload, ["extratags", key]));
37
+ const wikidata = nestedString(payload, ["extratags", "wikidata"]);
38
+ if (wikidata)
39
+ data.externalIds.push({ source: "wikidata", category: source.source.category, value: wikidata });
40
+ addTag(data, "location");
41
+ addTag(data, "place");
42
+ addTag(data, source.source.category);
43
+ addTag(data, nestedString(payload, ["address", "country_code"]));
44
+ return finalizeData(data, source);
45
+ }
46
+ function osmId(payload) {
47
+ const osmType = stringField(payload, "osm_type");
48
+ const id = valueAsString(payload.osm_id);
49
+ if (!osmType || !id)
50
+ return undefined;
51
+ const prefix = osmType === "relation" ? "R" : osmType === "way" ? "W" : osmType === "node" ? "N" : osmType.slice(0, 1) || "O";
52
+ return `${prefix}${id}`;
53
+ }
54
+ function addNamedetailAliases(data, payload, title) {
55
+ const details = payload.namedetails;
56
+ if (!details || typeof details !== "object" || Array.isArray(details))
57
+ return;
58
+ let count = 0;
59
+ for (const [key, value] of Object.entries(details)) {
60
+ if (count >= 10)
61
+ break;
62
+ if (key.startsWith("name:") && typeof value === "string" && value.trim() && value !== title) {
63
+ addAlias(data, value, "title", false, OPENSTREETMAP_PROVIDER, key.slice(5));
64
+ count += 1;
65
+ }
66
+ }
67
+ }
@@ -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"}