@zivue/zuuid 0.2.1 → 0.2.3

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 (59) hide show
  1. package/CHANGELOG.md +15 -0
  2. package/README.md +104 -16
  3. package/dist/client.d.ts +31 -0
  4. package/dist/client.d.ts.map +1 -1
  5. package/dist/client.js +90 -0
  6. package/dist/identity.d.ts +1 -1
  7. package/dist/identity.d.ts.map +1 -1
  8. package/dist/identity.js +1 -0
  9. package/dist/index.d.ts +1 -0
  10. package/dist/index.d.ts.map +1 -1
  11. package/dist/index.js +1 -0
  12. package/dist/providers/gamesdb/client.d.ts +19 -0
  13. package/dist/providers/gamesdb/client.d.ts.map +1 -0
  14. package/dist/providers/gamesdb/client.js +57 -0
  15. package/dist/providers/gamesdb/constants.d.ts +2 -0
  16. package/dist/providers/gamesdb/constants.d.ts.map +1 -1
  17. package/dist/providers/gamesdb/constants.js +2 -0
  18. package/dist/providers/gamesdb/game.d.ts +7 -5
  19. package/dist/providers/gamesdb/game.d.ts.map +1 -1
  20. package/dist/providers/gamesdb/game.js +203 -22
  21. package/dist/providers/gamesdb/index.d.ts +2 -0
  22. package/dist/providers/gamesdb/index.d.ts.map +1 -1
  23. package/dist/providers/gamesdb/index.js +2 -0
  24. package/dist/providers/gamesdb/platform.d.ts +5 -2
  25. package/dist/providers/gamesdb/platform.d.ts.map +1 -1
  26. package/dist/providers/gamesdb/platform.js +87 -4
  27. package/dist/providers/gamesdb/types.d.ts +21 -0
  28. package/dist/providers/gamesdb/types.d.ts.map +1 -0
  29. package/dist/providers/gamesdb/types.js +1 -0
  30. package/dist/providers/imdb/client.d.ts +17 -0
  31. package/dist/providers/imdb/client.d.ts.map +1 -0
  32. package/dist/providers/imdb/client.js +31 -0
  33. package/dist/providers/imdb/constants.d.ts +5 -0
  34. package/dist/providers/imdb/constants.d.ts.map +1 -0
  35. package/dist/providers/imdb/constants.js +4 -0
  36. package/dist/providers/imdb/index.d.ts +4 -0
  37. package/dist/providers/imdb/index.d.ts.map +1 -0
  38. package/dist/providers/imdb/index.js +3 -0
  39. package/dist/providers/imdb/movie.d.ts +16 -0
  40. package/dist/providers/imdb/movie.d.ts.map +1 -0
  41. package/dist/providers/imdb/movie.js +228 -0
  42. package/dist/providers/imdb/types.d.ts +12 -0
  43. package/dist/providers/imdb/types.d.ts.map +1 -0
  44. package/dist/providers/imdb/types.js +1 -0
  45. package/dist/providers/musicbrainz/client.d.ts +41 -0
  46. package/dist/providers/musicbrainz/client.d.ts.map +1 -0
  47. package/dist/providers/musicbrainz/client.js +169 -0
  48. package/dist/providers/musicbrainz/constants.d.ts +2 -0
  49. package/dist/providers/musicbrainz/constants.d.ts.map +1 -1
  50. package/dist/providers/musicbrainz/constants.js +2 -0
  51. package/dist/providers/musicbrainz/index.d.ts +2 -0
  52. package/dist/providers/musicbrainz/index.d.ts.map +1 -1
  53. package/dist/providers/musicbrainz/index.js +2 -0
  54. package/dist/providers/musicbrainz/types.d.ts +21 -0
  55. package/dist/providers/musicbrainz/types.d.ts.map +1 -0
  56. package/dist/providers/musicbrainz/types.js +1 -0
  57. package/dist/providers/tmdb/tv.d.ts.map +1 -1
  58. package/dist/providers/tmdb/tv.js +0 -1
  59. package/package.json +17 -1
@@ -0,0 +1,228 @@
1
+ import { createSourceRecord } from "../../source.js";
2
+ import { addAlias, addDescription, addDetail, addMedia, addRelation, addTag, baseDataFromSource, datePrefix, finalizeData, normalizeRating, objectPayload, stringField, valueAsString } from "../common.js";
3
+ import { IMDB_PROVIDER } from "./constants.js";
4
+ export async function fetchImdbMovieSourceRecord(provider, input) {
5
+ return fetchImdbTitleSourceRecord(provider, input, "movie");
6
+ }
7
+ export async function fetchImdbTvSourceRecord(provider, input) {
8
+ return fetchImdbTitleSourceRecord(provider, input, "tv");
9
+ }
10
+ export async function transformImdbMovie(source, options = {}) {
11
+ return transformImdbTitle(source, "movie", options);
12
+ }
13
+ export async function transformImdbTv(source, options = {}) {
14
+ return transformImdbTitle(source, "tv", options);
15
+ }
16
+ export async function searchImdbMovies() {
17
+ throw new Error("IMDb search is not implemented; fetch by IMDb title id instead.");
18
+ }
19
+ async function fetchImdbTitleSourceRecord(provider, input, category) {
20
+ const id = normalizeImdbTitleId(input.id);
21
+ const baseUrl = provider.titleBaseUrl?.replace(/\/$/, "");
22
+ if (!baseUrl) {
23
+ throw new Error("IMDb title base URL is disabled");
24
+ }
25
+ const url = `${baseUrl}/${id}/`;
26
+ const response = await provider.fetcher(url, {
27
+ headers: {
28
+ Accept: "text/html,application/xhtml+xml",
29
+ "Accept-Language": "en-US,en;q=0.9",
30
+ "User-Agent": provider.userAgent
31
+ }
32
+ });
33
+ if (response.status === 404) {
34
+ return undefined;
35
+ }
36
+ if (!response.ok) {
37
+ throw new Error(`IMDb title request failed with status ${response.status}`);
38
+ }
39
+ const html = await response.text();
40
+ const pagePayload = extractImdbPayload(url, html);
41
+ const suggestion = await fetchSuggestionPayload(provider, id);
42
+ return createSourceRecord({
43
+ source: { provider: IMDB_PROVIDER, category, externalId: id },
44
+ payload: { ...objectPayload(pagePayload), suggestion: suggestion ?? null }
45
+ });
46
+ }
47
+ async function transformImdbTitle(source, fallbackCategory, options = {}) {
48
+ const payload = objectPayload(source.payload);
49
+ const jsonLd = objectPayload(payload.jsonLd ?? {});
50
+ const externalId = normalizeImdbTitleId(source.source.externalId);
51
+ const suggestion = suggestionItem(payload, externalId);
52
+ const category = source.source.category === "tv" || schemaType(jsonLd).includes("TVSeries") || stringField(suggestion, "qid")?.startsWith("tv") ? "tv" : fallbackCategory;
53
+ const title = stringField(jsonLd, "name") ?? stringField(suggestion, "l") ?? fallbackTitle(payload) ?? externalId;
54
+ const data = await baseDataFromSource(source, IMDB_PROVIDER, category, category, externalId, title);
55
+ data.primaryDate = datePrefix(stringField(jsonLd, "datePublished")) ?? suggestionYearDate(suggestion);
56
+ addAlias(data, title, "primary", true, IMDB_PROVIDER);
57
+ addDescription(data, IMDB_PROVIDER, stringField(jsonLd, "description"));
58
+ addMedia(data, IMDB_PROVIDER, stringField(jsonLd, "image") ?? nestedSuggestionImage(suggestion), "poster");
59
+ const aggregateRating = objectPayload(jsonLd.aggregateRating ?? {});
60
+ const nativeRating = numericValue(aggregateRating.ratingValue);
61
+ const normalizedRating = normalizeRating(nativeRating, 0, 10);
62
+ if (normalizedRating !== undefined) {
63
+ data.rating = normalizedRating;
64
+ }
65
+ addDetail(data, IMDB_PROVIDER, "provider_rating", nativeRating);
66
+ addDetail(data, IMDB_PROVIDER, "rating_count", numericValue(aggregateRating.ratingCount));
67
+ addDetail(data, IMDB_PROVIDER, "best_rating", numericValue(aggregateRating.bestRating));
68
+ addDetail(data, IMDB_PROVIDER, "content_rating", stringField(jsonLd, "contentRating"));
69
+ addDetail(data, IMDB_PROVIDER, "duration", stringField(jsonLd, "duration"));
70
+ addDetail(data, IMDB_PROVIDER, "schema_type", valueAsString(jsonLd["@type"]));
71
+ addDetail(data, IMDB_PROVIDER, "url", stringField(payload, "url") ?? imdbTitleUrl(externalId, options.titleBaseUrl));
72
+ addDetail(data, IMDB_PROVIDER, "page_status", payload.challenge === true ? "challenge" : undefined);
73
+ addDetail(data, IMDB_PROVIDER, "imdb_type", stringField(suggestion, "q"));
74
+ addDetail(data, IMDB_PROVIDER, "imdb_type_id", stringField(suggestion, "qid"));
75
+ addDetail(data, IMDB_PROVIDER, "rank", numericValue(suggestion.rank));
76
+ addDetail(data, IMDB_PROVIDER, "year", numericValue(suggestion.y));
77
+ addDetail(data, IMDB_PROVIDER, "cast_summary", stringField(suggestion, "s"));
78
+ for (const genre of stringArray(jsonLd.genre)) {
79
+ addTag(data, genre);
80
+ }
81
+ for (const actor of personArray(jsonLd.actor)) {
82
+ await addPersonRelation(data, actor, "performed_by");
83
+ }
84
+ for (const director of personArray(jsonLd.director)) {
85
+ await addPersonRelation(data, director, "directed_by");
86
+ }
87
+ for (const creator of personArray(jsonLd.creator)) {
88
+ await addPersonRelation(data, creator, "created_by");
89
+ }
90
+ return finalizeData(data, source);
91
+ }
92
+ function extractImdbPayload(url, html) {
93
+ return {
94
+ url,
95
+ html,
96
+ title: cleanPageTitle(decodeHtml(textFromMatch(html.match(/<title[^>]*>([\s\S]*?)<\/title>/i)?.[1]))) ?? null,
97
+ jsonLd: parseJsonScript(html, /<script[^>]+type=["']application\/ld\+json["'][^>]*>([\s\S]*?)<\/script>/i) ?? null,
98
+ nextData: parseJsonScript(html, /<script[^>]+id=["']__NEXT_DATA__["'][^>]*>([\s\S]*?)<\/script>/i) ?? null,
99
+ challenge: isChallengePage(html)
100
+ };
101
+ }
102
+ async function fetchSuggestionPayload(provider, id) {
103
+ const baseUrl = provider.suggestionBaseUrl?.replace(/\/$/, "");
104
+ if (!baseUrl) {
105
+ return undefined;
106
+ }
107
+ const bucket = id.slice(0, 1);
108
+ const response = await provider.fetcher(`${baseUrl}/${bucket}/${id}.json`, {
109
+ headers: {
110
+ Accept: "application/json",
111
+ "Accept-Language": "en-US,en;q=0.9",
112
+ "User-Agent": provider.userAgent
113
+ }
114
+ });
115
+ if (!response.ok) {
116
+ return undefined;
117
+ }
118
+ return response.json();
119
+ }
120
+ function isChallengePage(html) {
121
+ return html.includes("AwsWafIntegration") || html.includes("awsWafCookieDomainList") || html.includes("challenge-container");
122
+ }
123
+ function parseJsonScript(html, pattern) {
124
+ const raw = html.match(pattern)?.[1];
125
+ const text = textFromMatch(raw);
126
+ if (!text) {
127
+ return undefined;
128
+ }
129
+ try {
130
+ return JSON.parse(decodeHtml(text) ?? text);
131
+ }
132
+ catch {
133
+ try {
134
+ return JSON.parse(text);
135
+ }
136
+ catch {
137
+ return undefined;
138
+ }
139
+ }
140
+ }
141
+ function textFromMatch(value) {
142
+ const normalized = value?.trim();
143
+ return normalized || undefined;
144
+ }
145
+ function normalizeImdbTitleId(value) {
146
+ const raw = String(value).trim();
147
+ const withoutUrl = raw.match(/title\/(tt\d+)/i)?.[1] ?? raw;
148
+ const normalized = withoutUrl.toLowerCase().startsWith("tt") ? withoutUrl : `tt${withoutUrl.padStart(7, "0")}`;
149
+ if (!/^tt\d+$/i.test(normalized)) {
150
+ throw new Error(`Invalid IMDb title id: ${value}`);
151
+ }
152
+ return normalized.toLowerCase();
153
+ }
154
+ function imdbTitleUrl(id, titleBaseUrl) {
155
+ const base = titleBaseUrl?.replace(/\/$/, "");
156
+ return base ? `${base}/${id}/` : undefined;
157
+ }
158
+ function suggestionItem(payload, externalId) {
159
+ const suggestion = objectPayload(payload.suggestion ?? {});
160
+ const items = Array.isArray(suggestion.d) ? suggestion.d : [];
161
+ const matched = items.find((item) => item && typeof item === "object" && !Array.isArray(item) && stringField(item, "id") === externalId);
162
+ return matched && typeof matched === "object" && !Array.isArray(matched) ? matched : {};
163
+ }
164
+ function nestedSuggestionImage(suggestion) {
165
+ const image = objectPayload(suggestion.i ?? {});
166
+ return stringField(image, "imageUrl");
167
+ }
168
+ function suggestionYearDate(suggestion) {
169
+ const year = numericValue(suggestion.y);
170
+ return year ? `${Math.trunc(year)}-01-01` : undefined;
171
+ }
172
+ function schemaType(jsonLd) {
173
+ const value = jsonLd["@type"];
174
+ return Array.isArray(value) ? value.map((item) => valueAsString(item)).filter(Boolean).join(",") : valueAsString(value) ?? "";
175
+ }
176
+ function fallbackTitle(payload) {
177
+ return cleanPageTitle(stringField(payload, "title"));
178
+ }
179
+ function cleanPageTitle(title) {
180
+ return title?.replace(/\s*-\s*IMDb\s*$/i, "").trim() || undefined;
181
+ }
182
+ function numericValue(value) {
183
+ if (typeof value === "number" && Number.isFinite(value)) {
184
+ return value;
185
+ }
186
+ if (typeof value === "string") {
187
+ const parsed = Number(value.replace(/,/g, ""));
188
+ return Number.isFinite(parsed) ? parsed : undefined;
189
+ }
190
+ return undefined;
191
+ }
192
+ function stringArray(value) {
193
+ if (typeof value === "string") {
194
+ return [value];
195
+ }
196
+ if (Array.isArray(value)) {
197
+ return value.filter((item) => typeof item === "string" && item.trim() !== "");
198
+ }
199
+ return [];
200
+ }
201
+ function personArray(value) {
202
+ if (Array.isArray(value)) {
203
+ return value.filter((item) => !!item && typeof item === "object" && !Array.isArray(item));
204
+ }
205
+ return value && typeof value === "object" && !Array.isArray(value) ? [value] : [];
206
+ }
207
+ async function addPersonRelation(data, person, relationType) {
208
+ const name = stringField(person, "name");
209
+ const externalId = imdbNameId(stringField(person, "url"));
210
+ if (!name || !externalId) {
211
+ return;
212
+ }
213
+ await addRelation(data, IMDB_PROVIDER, "person", externalId, relationType, name);
214
+ }
215
+ function imdbNameId(url) {
216
+ return url?.match(/name\/(nm\d+)/i)?.[1]?.toLowerCase();
217
+ }
218
+ function decodeHtml(value) {
219
+ return value
220
+ ?.replace(/&quot;/g, '"')
221
+ .replace(/&#34;/g, '"')
222
+ .replace(/&#x27;/g, "'")
223
+ .replace(/&#39;/g, "'")
224
+ .replace(/&amp;/g, "&")
225
+ .replace(/&lt;/g, "<")
226
+ .replace(/&gt;/g, ">")
227
+ .trim();
228
+ }
@@ -0,0 +1,12 @@
1
+ export type ImdbFetchLike = (input: string | URL, init?: RequestInit) => Promise<Response>;
2
+ export type ImdbProviderOptions = {
3
+ fetch?: ImdbFetchLike;
4
+ titleBaseUrl?: string | null;
5
+ suggestionBaseUrl?: string | null;
6
+ userAgent?: string;
7
+ };
8
+ export type ImdbTransformOptions = {
9
+ titleBaseUrl?: string | null;
10
+ suggestionBaseUrl?: string | null;
11
+ };
12
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/providers/imdb/types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,aAAa,GAAG,CAAC,KAAK,EAAE,MAAM,GAAG,GAAG,EAAE,IAAI,CAAC,EAAE,WAAW,KAAK,OAAO,CAAC,QAAQ,CAAC,CAAC;AAE3F,MAAM,MAAM,mBAAmB,GAAG;IAChC,KAAK,CAAC,EAAE,aAAa,CAAC;IACtB,YAAY,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,iBAAiB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAClC,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,CAAC;AAEF,MAAM,MAAM,oBAAoB,GAAG;IACjC,YAAY,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,iBAAiB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CACnC,CAAC"}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,41 @@
1
+ import type { SearchResponse, ZuuidData, ZuuidSearchResult } from "../../entity.js";
2
+ import { type SourceRecord } from "../../source.js";
3
+ import type { FetchMusicBrainzInput, MusicBrainzProviderOptions, MusicBrainzSearchInput, MusicBrainzProviderTransformOptions } from "./types.js";
4
+ export declare class MusicBrainzProvider {
5
+ readonly apiBase: string;
6
+ readonly coverArtBaseUrl: string | null;
7
+ readonly releaseGroupCoverArtBaseUrl: string | null;
8
+ readonly userAgent: string;
9
+ private readonly fetchImpl;
10
+ constructor(options?: MusicBrainzProviderOptions);
11
+ getJson<T>(path: string, params: Record<string, string>): Promise<T | undefined>;
12
+ transformOptions(): MusicBrainzProviderTransformOptions;
13
+ fetchReleaseSourceRecord(input: FetchMusicBrainzInput): Promise<SourceRecord | undefined>;
14
+ fetchRelease(input: FetchMusicBrainzInput): Promise<ZuuidData | undefined>;
15
+ searchReleaseSourceRecords(input: MusicBrainzSearchInput): Promise<SearchResponse<SourceRecord>>;
16
+ searchReleases(input: MusicBrainzSearchInput): Promise<SearchResponse<ZuuidSearchResult>>;
17
+ fetchReleaseGroupSourceRecord(input: FetchMusicBrainzInput): Promise<SourceRecord | undefined>;
18
+ fetchReleaseGroup(input: FetchMusicBrainzInput): Promise<ZuuidData | undefined>;
19
+ searchReleaseGroupSourceRecords(input: MusicBrainzSearchInput): Promise<SearchResponse<SourceRecord>>;
20
+ searchReleaseGroups(input: MusicBrainzSearchInput): Promise<SearchResponse<ZuuidSearchResult>>;
21
+ fetchRecordingSourceRecord(input: FetchMusicBrainzInput): Promise<SourceRecord | undefined>;
22
+ fetchRecording(input: FetchMusicBrainzInput): Promise<ZuuidData | undefined>;
23
+ searchRecordingSourceRecords(input: MusicBrainzSearchInput): Promise<SearchResponse<SourceRecord>>;
24
+ searchRecordings(input: MusicBrainzSearchInput): Promise<SearchResponse<ZuuidSearchResult>>;
25
+ fetchArtistSourceRecord(input: FetchMusicBrainzInput): Promise<SourceRecord | undefined>;
26
+ fetchArtist(input: FetchMusicBrainzInput): Promise<ZuuidData | undefined>;
27
+ searchArtistSourceRecords(input: MusicBrainzSearchInput): Promise<SearchResponse<SourceRecord>>;
28
+ searchArtists(input: MusicBrainzSearchInput): Promise<SearchResponse<ZuuidSearchResult>>;
29
+ fetchLabelSourceRecord(input: FetchMusicBrainzInput): Promise<SourceRecord | undefined>;
30
+ fetchLabel(input: FetchMusicBrainzInput): Promise<ZuuidData | undefined>;
31
+ searchLabelSourceRecords(input: MusicBrainzSearchInput): Promise<SearchResponse<SourceRecord>>;
32
+ searchLabels(input: MusicBrainzSearchInput): Promise<SearchResponse<ZuuidSearchResult>>;
33
+ fetchWorkSourceRecord(input: FetchMusicBrainzInput): Promise<SourceRecord | undefined>;
34
+ fetchWork(input: FetchMusicBrainzInput): Promise<ZuuidData | undefined>;
35
+ searchWorkSourceRecords(input: MusicBrainzSearchInput): Promise<SearchResponse<SourceRecord>>;
36
+ searchWorks(input: MusicBrainzSearchInput): Promise<SearchResponse<ZuuidSearchResult>>;
37
+ }
38
+ export declare function fetchMusicBrainzSourceRecord(provider: MusicBrainzProvider, category: string, input: FetchMusicBrainzInput): Promise<SourceRecord | undefined>;
39
+ export declare function searchMusicBrainzSourceRecords(provider: MusicBrainzProvider, category: string, input: MusicBrainzSearchInput): Promise<SearchResponse<SourceRecord>>;
40
+ export declare function searchMusicBrainz(provider: MusicBrainzProvider, category: string, input: MusicBrainzSearchInput, options?: MusicBrainzProviderTransformOptions): Promise<SearchResponse<ZuuidSearchResult>>;
41
+ //# sourceMappingURL=client.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../../src/providers/musicbrainz/client.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,SAAS,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AAEpF,OAAO,EAAsB,KAAK,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAsBxE,OAAO,KAAK,EAAE,qBAAqB,EAAwB,0BAA0B,EAAE,sBAAsB,EAAE,mCAAmC,EAAE,MAAM,YAAY,CAAC;AAEvK,qBAAa,mBAAmB;IAC9B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,eAAe,EAAE,MAAM,GAAG,IAAI,CAAC;IACxC,QAAQ,CAAC,2BAA2B,EAAE,MAAM,GAAG,IAAI,CAAC;IACpD,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAuB;gBAErC,OAAO,GAAE,0BAA+B;IAQ9C,OAAO,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,OAAO,CAAC,CAAC,GAAG,SAAS,CAAC;IAatF,gBAAgB,IAAI,mCAAmC;IAIjD,wBAAwB,CAAC,KAAK,EAAE,qBAAqB;IACrD,YAAY,CAAC,KAAK,EAAE,qBAAqB,GAAG,OAAO,CAAC,SAAS,GAAG,SAAS,CAAC;IAC1E,0BAA0B,CAAC,KAAK,EAAE,sBAAsB;IACxD,cAAc,CAAC,KAAK,EAAE,sBAAsB;IAE5C,6BAA6B,CAAC,KAAK,EAAE,qBAAqB;IAC1D,iBAAiB,CAAC,KAAK,EAAE,qBAAqB,GAAG,OAAO,CAAC,SAAS,GAAG,SAAS,CAAC;IAC/E,+BAA+B,CAAC,KAAK,EAAE,sBAAsB;IAC7D,mBAAmB,CAAC,KAAK,EAAE,sBAAsB;IAEjD,0BAA0B,CAAC,KAAK,EAAE,qBAAqB;IACvD,cAAc,CAAC,KAAK,EAAE,qBAAqB,GAAG,OAAO,CAAC,SAAS,GAAG,SAAS,CAAC;IAC5E,4BAA4B,CAAC,KAAK,EAAE,sBAAsB;IAC1D,gBAAgB,CAAC,KAAK,EAAE,sBAAsB;IAE9C,uBAAuB,CAAC,KAAK,EAAE,qBAAqB;IACpD,WAAW,CAAC,KAAK,EAAE,qBAAqB,GAAG,OAAO,CAAC,SAAS,GAAG,SAAS,CAAC;IACzE,yBAAyB,CAAC,KAAK,EAAE,sBAAsB;IACvD,aAAa,CAAC,KAAK,EAAE,sBAAsB;IAE3C,sBAAsB,CAAC,KAAK,EAAE,qBAAqB;IACnD,UAAU,CAAC,KAAK,EAAE,qBAAqB,GAAG,OAAO,CAAC,SAAS,GAAG,SAAS,CAAC;IACxE,wBAAwB,CAAC,KAAK,EAAE,sBAAsB;IACtD,YAAY,CAAC,KAAK,EAAE,sBAAsB;IAE1C,qBAAqB,CAAC,KAAK,EAAE,qBAAqB;IAClD,SAAS,CAAC,KAAK,EAAE,qBAAqB,GAAG,OAAO,CAAC,SAAS,GAAG,SAAS,CAAC;IACvE,uBAAuB,CAAC,KAAK,EAAE,sBAAsB;IACrD,WAAW,CAAC,KAAK,EAAE,sBAAsB;CAChD;AAED,wBAAsB,4BAA4B,CAAC,QAAQ,EAAE,mBAAmB,EAAE,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,qBAAqB,GAAG,OAAO,CAAC,YAAY,GAAG,SAAS,CAAC,CAKnK;AAED,wBAAsB,8BAA8B,CAAC,QAAQ,EAAE,mBAAmB,EAAE,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,sBAAsB,GAAG,OAAO,CAAC,cAAc,CAAC,YAAY,CAAC,CAAC,CAO1K;AAED,wBAAsB,iBAAiB,CAAC,QAAQ,EAAE,mBAAmB,EAAE,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,sBAAsB,EAAE,OAAO,GAAE,mCAAwC,GAAG,OAAO,CAAC,cAAc,CAAC,iBAAiB,CAAC,CAAC,CAwBrN"}
@@ -0,0 +1,169 @@
1
+ import { providerZuuid } from "../../identity.js";
2
+ import { createSourceRecord } from "../../source.js";
3
+ import { datePrefix, nestedString, objectPayload, stringField, valueAsString } from "../common.js";
4
+ import { MUSICBRAINZ_API_BASE, MUSICBRAINZ_ARTIST_CATEGORY, MUSICBRAINZ_COVER_ART_BASE_URL, MUSICBRAINZ_DEFAULT_USER_AGENT, MUSICBRAINZ_LABEL_CATEGORY, MUSICBRAINZ_PROVIDER, MUSICBRAINZ_RECORDING_CATEGORY, MUSICBRAINZ_RELEASE_CATEGORY, MUSICBRAINZ_RELEASE_GROUP_CATEGORY, MUSICBRAINZ_RELEASE_GROUP_COVER_ART_BASE_URL, MUSICBRAINZ_WORK_CATEGORY } from "./constants.js";
5
+ import { transformMusicBrainzArtist } from "./artist.js";
6
+ import { transformMusicBrainzLabel } from "./label.js";
7
+ import { transformMusicBrainzRecording } from "./recording.js";
8
+ import { transformMusicBrainzRelease } from "./release.js";
9
+ import { transformMusicBrainzReleaseGroup } from "./release-group.js";
10
+ import { transformMusicBrainzWork } from "./work.js";
11
+ export class MusicBrainzProvider {
12
+ apiBase;
13
+ coverArtBaseUrl;
14
+ releaseGroupCoverArtBaseUrl;
15
+ userAgent;
16
+ fetchImpl;
17
+ constructor(options = {}) {
18
+ this.apiBase = options.apiBase ?? MUSICBRAINZ_API_BASE;
19
+ this.fetchImpl = options.fetch ?? globalThis.fetch.bind(globalThis);
20
+ this.coverArtBaseUrl = options.coverArtBaseUrl === undefined ? MUSICBRAINZ_COVER_ART_BASE_URL : options.coverArtBaseUrl;
21
+ this.releaseGroupCoverArtBaseUrl = options.releaseGroupCoverArtBaseUrl === undefined ? MUSICBRAINZ_RELEASE_GROUP_COVER_ART_BASE_URL : options.releaseGroupCoverArtBaseUrl;
22
+ this.userAgent = options.userAgent ?? MUSICBRAINZ_DEFAULT_USER_AGENT;
23
+ }
24
+ async getJson(path, params) {
25
+ const url = new URL(`${this.apiBase.replace(/\/$/, "")}/${path.replace(/^\//, "")}`);
26
+ url.searchParams.set("fmt", "json");
27
+ for (const [key, value] of Object.entries(params))
28
+ url.searchParams.set(key, value);
29
+ const response = await this.fetchImpl(url, { headers: { accept: "application/json", "user-agent": this.userAgent } });
30
+ if (response.status === 404)
31
+ return undefined;
32
+ if (!response.ok) {
33
+ const body = await response.text().catch(() => "");
34
+ throw new Error(`MusicBrainz API returned ${response.status}: ${body}`);
35
+ }
36
+ return response.json();
37
+ }
38
+ transformOptions() {
39
+ return { coverArtBaseUrl: this.coverArtBaseUrl, releaseGroupCoverArtBaseUrl: this.releaseGroupCoverArtBaseUrl };
40
+ }
41
+ async fetchReleaseSourceRecord(input) { return fetchMusicBrainzSourceRecord(this, MUSICBRAINZ_RELEASE_CATEGORY, input); }
42
+ async fetchRelease(input) { const source = await this.fetchReleaseSourceRecord(input); return source ? transformMusicBrainzRelease(source, this.transformOptions()) : undefined; }
43
+ async searchReleaseSourceRecords(input) { return searchMusicBrainzSourceRecords(this, MUSICBRAINZ_RELEASE_CATEGORY, input); }
44
+ async searchReleases(input) { return searchMusicBrainz(this, MUSICBRAINZ_RELEASE_CATEGORY, input, this.transformOptions()); }
45
+ async fetchReleaseGroupSourceRecord(input) { return fetchMusicBrainzSourceRecord(this, MUSICBRAINZ_RELEASE_GROUP_CATEGORY, input); }
46
+ async fetchReleaseGroup(input) { const source = await this.fetchReleaseGroupSourceRecord(input); return source ? transformMusicBrainzReleaseGroup(source, { coverArtBaseUrl: this.releaseGroupCoverArtBaseUrl }) : undefined; }
47
+ async searchReleaseGroupSourceRecords(input) { return searchMusicBrainzSourceRecords(this, MUSICBRAINZ_RELEASE_GROUP_CATEGORY, input); }
48
+ async searchReleaseGroups(input) { return searchMusicBrainz(this, MUSICBRAINZ_RELEASE_GROUP_CATEGORY, input, this.transformOptions()); }
49
+ async fetchRecordingSourceRecord(input) { return fetchMusicBrainzSourceRecord(this, MUSICBRAINZ_RECORDING_CATEGORY, input); }
50
+ async fetchRecording(input) { const source = await this.fetchRecordingSourceRecord(input); return source ? transformMusicBrainzRecording(source) : undefined; }
51
+ async searchRecordingSourceRecords(input) { return searchMusicBrainzSourceRecords(this, MUSICBRAINZ_RECORDING_CATEGORY, input); }
52
+ async searchRecordings(input) { return searchMusicBrainz(this, MUSICBRAINZ_RECORDING_CATEGORY, input, this.transformOptions()); }
53
+ async fetchArtistSourceRecord(input) { return fetchMusicBrainzSourceRecord(this, MUSICBRAINZ_ARTIST_CATEGORY, input); }
54
+ async fetchArtist(input) { const source = await this.fetchArtistSourceRecord(input); return source ? transformMusicBrainzArtist(source) : undefined; }
55
+ async searchArtistSourceRecords(input) { return searchMusicBrainzSourceRecords(this, MUSICBRAINZ_ARTIST_CATEGORY, input); }
56
+ async searchArtists(input) { return searchMusicBrainz(this, MUSICBRAINZ_ARTIST_CATEGORY, input, this.transformOptions()); }
57
+ async fetchLabelSourceRecord(input) { return fetchMusicBrainzSourceRecord(this, MUSICBRAINZ_LABEL_CATEGORY, input); }
58
+ async fetchLabel(input) { const source = await this.fetchLabelSourceRecord(input); return source ? transformMusicBrainzLabel(source) : undefined; }
59
+ async searchLabelSourceRecords(input) { return searchMusicBrainzSourceRecords(this, MUSICBRAINZ_LABEL_CATEGORY, input); }
60
+ async searchLabels(input) { return searchMusicBrainz(this, MUSICBRAINZ_LABEL_CATEGORY, input, this.transformOptions()); }
61
+ async fetchWorkSourceRecord(input) { return fetchMusicBrainzSourceRecord(this, MUSICBRAINZ_WORK_CATEGORY, input); }
62
+ async fetchWork(input) { const source = await this.fetchWorkSourceRecord(input); return source ? transformMusicBrainzWork(source) : undefined; }
63
+ async searchWorkSourceRecords(input) { return searchMusicBrainzSourceRecords(this, MUSICBRAINZ_WORK_CATEGORY, input); }
64
+ async searchWorks(input) { return searchMusicBrainz(this, MUSICBRAINZ_WORK_CATEGORY, input, this.transformOptions()); }
65
+ }
66
+ export async function fetchMusicBrainzSourceRecord(provider, category, input) {
67
+ const id = musicBrainzId(input.id);
68
+ const payload = await provider.getJson(`/${entityPath(category)}/${id}`, { inc: lookupIncludes(category) });
69
+ if (!payload)
70
+ return undefined;
71
+ return createSourceRecord({ source: { provider: MUSICBRAINZ_PROVIDER, category, externalId: id }, payload });
72
+ }
73
+ export async function searchMusicBrainzSourceRecords(provider, category, input) {
74
+ const payload = await searchPayload(provider, category, input);
75
+ const results = searchItems(payload, category);
76
+ return {
77
+ results: await Promise.all(results.map((item) => createSourceRecord({ source: { provider: MUSICBRAINZ_PROVIDER, category, externalId: stringField(item, "id") ?? "" }, payload: item }))),
78
+ pagination: pagination(payload)
79
+ };
80
+ }
81
+ export async function searchMusicBrainz(provider, category, input, options = {}) {
82
+ const payload = await searchPayload(provider, category, input);
83
+ const results = [];
84
+ for (const item of searchItems(payload, category)) {
85
+ const externalId = stringField(item, "id");
86
+ const title = titleFor(item, category);
87
+ if (!externalId || !title)
88
+ continue;
89
+ const zuuid = await providerZuuid({ provider: MUSICBRAINZ_PROVIDER, category, externalId });
90
+ results.push({
91
+ id: zuuid,
92
+ zuuid,
93
+ category: publicCategory(category),
94
+ title,
95
+ date: dateFor(item, category),
96
+ cover: coverFor(item, category, options),
97
+ rating: null,
98
+ weight: numberValue(item.score),
99
+ relationType: null,
100
+ attribute: attributeFor(item, category),
101
+ order: null,
102
+ source: { source: MUSICBRAINZ_PROVIDER, category, value: externalId }
103
+ });
104
+ }
105
+ return { results, pagination: pagination(payload) };
106
+ }
107
+ async function searchPayload(provider, category, input) {
108
+ const query = input.query.trim();
109
+ if (!query)
110
+ throw new Error("MusicBrainz search query must not be empty");
111
+ return objectPayload(await provider.getJson(`/${entityPath(category)}`, {
112
+ query,
113
+ limit: String(input.limit ?? 25),
114
+ offset: String(input.offset ?? 0)
115
+ }) ?? {});
116
+ }
117
+ function searchItems(payload, category) {
118
+ const value = payload[searchKey(category)];
119
+ return Array.isArray(value) ? value.filter(isObject) : [];
120
+ }
121
+ function pagination(payload) {
122
+ const count = numberValue(payload.count) ?? 0;
123
+ const offset = numberValue(payload.offset) ?? 0;
124
+ const limit = Array.isArray(payload[searchKeyFromPayload(payload)]) ? payload[searchKeyFromPayload(payload)].length : 0;
125
+ return { page: limit > 0 ? Math.floor(offset / limit) + 1 : 1, totalPages: limit > 0 ? Math.ceil(count / limit) : 0, totalResults: count };
126
+ }
127
+ function searchKeyFromPayload(payload) {
128
+ return ["releases", "release-groups", "recordings", "artists", "labels", "works"].find((key) => Array.isArray(payload[key])) ?? "";
129
+ }
130
+ function lookupIncludes(category) {
131
+ switch (category) {
132
+ case MUSICBRAINZ_RELEASE_CATEGORY:
133
+ return "artists+labels+release-groups+media+recordings+genres+tags+url-rels";
134
+ case MUSICBRAINZ_RELEASE_GROUP_CATEGORY:
135
+ return "artists+releases+genres+tags+url-rels";
136
+ case MUSICBRAINZ_RECORDING_CATEGORY:
137
+ return "artists+releases+isrcs+genres+tags+work-rels+url-rels";
138
+ case MUSICBRAINZ_ARTIST_CATEGORY:
139
+ return "aliases+annotation+genres+tags+area-rels+url-rels";
140
+ case MUSICBRAINZ_LABEL_CATEGORY:
141
+ return "aliases+annotation+genres+tags+area-rels+url-rels";
142
+ case MUSICBRAINZ_WORK_CATEGORY:
143
+ return "aliases+annotation+artists+iswcs+genres+tags+artist-rels+url-rels";
144
+ default:
145
+ return "genres+tags";
146
+ }
147
+ }
148
+ function entityPath(category) { return category === MUSICBRAINZ_RELEASE_GROUP_CATEGORY ? "release-group" : category; }
149
+ function searchKey(category) { return category === MUSICBRAINZ_RELEASE_GROUP_CATEGORY ? "release-groups" : `${category}s`; }
150
+ function publicCategory(category) { return category === MUSICBRAINZ_RELEASE_GROUP_CATEGORY ? "release_group" : category === MUSICBRAINZ_WORK_CATEGORY ? "musical_work" : category; }
151
+ function titleFor(item, category) { return category === MUSICBRAINZ_ARTIST_CATEGORY || category === MUSICBRAINZ_LABEL_CATEGORY ? stringField(item, "name") : stringField(item, "title"); }
152
+ function dateFor(item, category) { return (category === MUSICBRAINZ_RELEASE_GROUP_CATEGORY ? stringField(item, "first-release-date") : category === MUSICBRAINZ_RECORDING_CATEGORY ? stringField(item, "first-release-date") : category === MUSICBRAINZ_ARTIST_CATEGORY || category === MUSICBRAINZ_LABEL_CATEGORY ? nestedString(item, ["life-span", "begin"]) : stringField(item, "date")) ?? null; }
153
+ function attributeFor(item, category) { return category === MUSICBRAINZ_ARTIST_CATEGORY || category === MUSICBRAINZ_LABEL_CATEGORY || category === MUSICBRAINZ_WORK_CATEGORY ? stringField(item, "type") ?? null : stringField(item, "primary-type") ?? stringField(item, "status") ?? null; }
154
+ function coverFor(item, category, options) { const id = stringField(item, "id"); if (!id)
155
+ return null; if (category === MUSICBRAINZ_RELEASE_GROUP_CATEGORY && options.releaseGroupCoverArtBaseUrl)
156
+ return `${options.releaseGroupCoverArtBaseUrl.replace(/\/$/, "")}/${id}/front`; if (category === MUSICBRAINZ_RELEASE_CATEGORY && options.coverArtBaseUrl && objectPayload(item["cover-art-archive"] ?? {}).front === true)
157
+ return `${options.coverArtBaseUrl.replace(/\/$/, "")}/${id}/front`; return null; }
158
+ function numberValue(value) { if (typeof value === "number" && Number.isFinite(value))
159
+ return value; if (typeof value === "string") {
160
+ const parsed = Number(value);
161
+ return Number.isFinite(parsed) ? parsed : null;
162
+ } return null; }
163
+ function isObject(value) { return !!value && typeof value === "object" && !Array.isArray(value); }
164
+ function musicBrainzId(value) {
165
+ const id = value.trim();
166
+ if (!/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i.test(id))
167
+ throw new Error(`Invalid MusicBrainz MBID: ${value}`);
168
+ return id.toLowerCase();
169
+ }
@@ -7,4 +7,6 @@ export declare const MUSICBRAINZ_LABEL_CATEGORY = "label";
7
7
  export declare const MUSICBRAINZ_WORK_CATEGORY = "work";
8
8
  export declare const MUSICBRAINZ_COVER_ART_BASE_URL = "https://coverartarchive.org/release";
9
9
  export declare const MUSICBRAINZ_RELEASE_GROUP_COVER_ART_BASE_URL = "https://coverartarchive.org/release-group";
10
+ export declare const MUSICBRAINZ_API_BASE = "https://musicbrainz.org/ws/2";
11
+ export declare const MUSICBRAINZ_DEFAULT_USER_AGENT = "@zivue/zuuid/0.2.3 (https://github.com/zivue/zuuid)";
10
12
  //# sourceMappingURL=constants.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../../src/providers/musicbrainz/constants.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,oBAAoB,gBAAgB,CAAC;AAClD,eAAO,MAAM,4BAA4B,YAAY,CAAC;AACtD,eAAO,MAAM,kCAAkC,kBAAkB,CAAC;AAClE,eAAO,MAAM,8BAA8B,cAAc,CAAC;AAC1D,eAAO,MAAM,2BAA2B,WAAW,CAAC;AACpD,eAAO,MAAM,0BAA0B,UAAU,CAAC;AAClD,eAAO,MAAM,yBAAyB,SAAS,CAAC;AAChD,eAAO,MAAM,8BAA8B,wCAAwC,CAAC;AACpF,eAAO,MAAM,4CAA4C,8CAA8C,CAAC"}
1
+ {"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../../src/providers/musicbrainz/constants.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,oBAAoB,gBAAgB,CAAC;AAClD,eAAO,MAAM,4BAA4B,YAAY,CAAC;AACtD,eAAO,MAAM,kCAAkC,kBAAkB,CAAC;AAClE,eAAO,MAAM,8BAA8B,cAAc,CAAC;AAC1D,eAAO,MAAM,2BAA2B,WAAW,CAAC;AACpD,eAAO,MAAM,0BAA0B,UAAU,CAAC;AAClD,eAAO,MAAM,yBAAyB,SAAS,CAAC;AAChD,eAAO,MAAM,8BAA8B,wCAAwC,CAAC;AACpF,eAAO,MAAM,4CAA4C,8CAA8C,CAAC;AACxG,eAAO,MAAM,oBAAoB,iCAAiC,CAAC;AACnE,eAAO,MAAM,8BAA8B,wDAAwD,CAAC"}
@@ -7,3 +7,5 @@ export const MUSICBRAINZ_LABEL_CATEGORY = "label";
7
7
  export const MUSICBRAINZ_WORK_CATEGORY = "work";
8
8
  export const MUSICBRAINZ_COVER_ART_BASE_URL = "https://coverartarchive.org/release";
9
9
  export const MUSICBRAINZ_RELEASE_GROUP_COVER_ART_BASE_URL = "https://coverartarchive.org/release-group";
10
+ export const MUSICBRAINZ_API_BASE = "https://musicbrainz.org/ws/2";
11
+ export const MUSICBRAINZ_DEFAULT_USER_AGENT = "@zivue/zuuid/0.2.3 (https://github.com/zivue/zuuid)";
@@ -1,3 +1,4 @@
1
+ export * from "./client.js";
1
2
  export * from "./artist.js";
2
3
  export * from "./constants.js";
3
4
  export * from "./label.js";
@@ -5,4 +6,5 @@ export * from "./recording.js";
5
6
  export * from "./release.js";
6
7
  export * from "./release-group.js";
7
8
  export * from "./work.js";
9
+ export * from "./types.js";
8
10
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/providers/musicbrainz/index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAC;AAC5B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,YAAY,CAAC;AAC3B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,cAAc,CAAC;AAC7B,cAAc,oBAAoB,CAAC;AACnC,cAAc,WAAW,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/providers/musicbrainz/index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAC;AAC5B,cAAc,aAAa,CAAC;AAC5B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,YAAY,CAAC;AAC3B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,cAAc,CAAC;AAC7B,cAAc,oBAAoB,CAAC;AACnC,cAAc,WAAW,CAAC;AAC1B,cAAc,YAAY,CAAC"}
@@ -1,3 +1,4 @@
1
+ export * from "./client.js";
1
2
  export * from "./artist.js";
2
3
  export * from "./constants.js";
3
4
  export * from "./label.js";
@@ -5,3 +6,4 @@ export * from "./recording.js";
5
6
  export * from "./release.js";
6
7
  export * from "./release-group.js";
7
8
  export * from "./work.js";
9
+ export * from "./types.js";
@@ -0,0 +1,21 @@
1
+ export type MusicBrainzFetchLike = (input: string | URL, init?: RequestInit) => Promise<Response>;
2
+ export type MusicBrainzProviderOptions = {
3
+ apiBase?: string;
4
+ fetch?: MusicBrainzFetchLike;
5
+ userAgent?: string;
6
+ coverArtBaseUrl?: string | null;
7
+ releaseGroupCoverArtBaseUrl?: string | null;
8
+ };
9
+ export type MusicBrainzProviderTransformOptions = {
10
+ coverArtBaseUrl?: string | null;
11
+ releaseGroupCoverArtBaseUrl?: string | null;
12
+ };
13
+ export type FetchMusicBrainzInput = {
14
+ id: string;
15
+ };
16
+ export type MusicBrainzSearchInput = {
17
+ query: string;
18
+ limit?: number;
19
+ offset?: number;
20
+ };
21
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/providers/musicbrainz/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,KAAK,CAAC,EAAE,oBAAoB,CAAC;IAC7B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,eAAe,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAChC,2BAA2B,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAC7C,CAAC;AAEF,MAAM,MAAM,mCAAmC,GAAG;IAChD,eAAe,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAChC,2BAA2B,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAC7C,CAAC;AAEF,MAAM,MAAM,qBAAqB,GAAG;IAClC,EAAE,EAAE,MAAM,CAAC;CACZ,CAAC;AAEF,MAAM,MAAM,sBAAsB,GAAG;IACnC,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB,CAAC"}
@@ -0,0 +1 @@
1
+ export {};
@@ -1 +1 @@
1
- {"version":3,"file":"tv.d.ts","sourceRoot":"","sources":["../../../src/providers/tmdb/tv.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"tv.d.ts","sourceRoot":"","sources":["../../../src/providers/tmdb/tv.ts"],"names":[],"mappings":"AAAA,OAAO,EAAmB,KAAK,cAAc,EAAE,KAAK,SAAS,EAAE,KAAK,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AAE/G,OAAO,EAA4C,KAAK,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAC9F,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAGhD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAChD,OAAO,KAAK,EAAE,eAAe,EAAsB,oBAAoB,EAAE,MAAM,YAAY,CAAC;AAE5F,eAAO,MAAM,gBAAgB,OAAO,CAAC;AACrC,eAAO,MAAM,iBAAiB,WAAW,CAAC;AAE1C,MAAM,MAAM,gBAAgB,GAAG;IAC7B,EAAE,EAAE,MAAM,GAAG,MAAM,CAAC;CACrB,CAAC;AAEF,MAAM,MAAM,aAAa,GAAG;IAC1B,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACrB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,MAAM,CAAC,EAAE;QAAE,IAAI,CAAC,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IAC7B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,gBAAgB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC5B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;IACrB,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;IAC1B,oBAAoB,CAAC,EAAE;QAAE,UAAU,CAAC,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IAChE,gBAAgB,CAAC,EAAE;QAAE,YAAY,CAAC,EAAE,MAAM,CAAC;QAAC,SAAS,CAAC,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IAClF,UAAU,CAAC,EAAE;QAAE,EAAE,CAAC,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,YAAY,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;KAAE,EAAE,CAAC;IAC5E,QAAQ,CAAC,EAAE;QAAE,EAAE,CAAC,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;QAAC,cAAc,CAAC,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IAChG,oBAAoB,CAAC,EAAE;QAAE,EAAE,CAAC,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;QAAC,cAAc,CAAC,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IAC5G,OAAO,CAAC,EAAE;QAAE,EAAE,CAAC,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,aAAa,CAAC,EAAE,MAAM,CAAC;QAAC,aAAa,CAAC,EAAE,MAAM,CAAC;QAAC,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;QAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IAC3I,YAAY,CAAC,EAAE;QACb,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;QACxB,OAAO,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAAC;QACjC,SAAS,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAAC;QACnC,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;QAC5B,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;QAC5B,YAAY,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;QAC7B,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;KAC5B,CAAC;IACF,QAAQ,CAAC,EAAE;QAAE,OAAO,CAAC,EAAE;YAAE,EAAE,CAAC,EAAE,MAAM,CAAC;YAAC,IAAI,CAAC,EAAE,MAAM,CAAA;SAAE,EAAE,CAAA;KAAE,CAAC;IAC1D,iBAAiB,CAAC,EAAE;QAClB,IAAI,CAAC,EAAE,iBAAiB,EAAE,CAAC;QAC3B,IAAI,CAAC,EAAE,iBAAiB,EAAE,CAAC;KAC5B,CAAC;IACF,MAAM,CAAC,EAAE;QACP,OAAO,CAAC,EAAE,WAAW,EAAE,CAAC;QACxB,SAAS,CAAC,EAAE,WAAW,EAAE,CAAC;QAC1B,KAAK,CAAC,EAAE,WAAW,EAAE,CAAC;KACvB,CAAC;IACF,eAAe,CAAC,EAAE,kBAAkB,CAAC;IACrC,OAAO,CAAC,EAAE,kBAAkB,CAAC;IAC7B,YAAY,CAAC,EAAE;QACb,YAAY,CAAC,EAAE;YACb,SAAS,CAAC,EAAE,MAAM,CAAC;YACnB,UAAU,CAAC,EAAE,MAAM,CAAC;YACpB,IAAI,CAAC,EAAE;gBAAE,IAAI,CAAC,EAAE,MAAM,CAAC;gBAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;gBAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;aAAE,CAAC;SAChE,EAAE,CAAC;KACL,CAAC;IACF,eAAe,CAAC,EAAE;QAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,CAAA;KAAE,CAAC;IAC1D,eAAe,CAAC,EAAE;QAAE,OAAO,CAAC,EAAE;YAAE,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;YAAC,UAAU,CAAC,EAAE,MAAM,CAAC;YAAC,MAAM,CAAC,EAAE,MAAM,CAAA;SAAE,EAAE,CAAA;KAAE,CAAC;IACnG,mBAAmB,CAAC,EAAE,SAAS,CAAC;IAChC,mBAAmB,CAAC,EAAE,SAAS,CAAC;CACjC,CAAC;AAEF,MAAM,MAAM,iBAAiB,GAAG;IAC9B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB,CAAC;AAEF,MAAM,MAAM,gBAAgB,GAAG;IAC7B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB,CAAC;AAEF,MAAM,MAAM,iBAAiB,GAAG;IAC9B,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,YAAY,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,KAAK,CAAC,EAAE,iBAAiB,EAAE,CAAC;IAC5B,mBAAmB,CAAC,EAAE,MAAM,CAAC;CAC9B,CAAC;AAEF,MAAM,MAAM,iBAAiB,GAAG;IAC9B,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,YAAY,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,IAAI,CAAC,EAAE,gBAAgB,EAAE,CAAC;IAC1B,mBAAmB,CAAC,EAAE,MAAM,CAAC;CAC9B,CAAC;AAEF,MAAM,MAAM,WAAW,GAAG;IACxB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB,CAAC;AAEF,MAAM,MAAM,kBAAkB,GAAG;IAC/B,OAAO,CAAC,EAAE,aAAa,EAAE,CAAC;CAC3B,CAAC;AAEF,MAAM,MAAM,kBAAkB,GAAG,aAAa,GAAG;IAC/C,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,aAAa,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;IACrB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;IAC1B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB,CAAC;AAEF,MAAM,MAAM,aAAa,GAAG;IAC1B,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB,CAAC;AAEF,wBAAsB,uBAAuB,CAC3C,QAAQ,EAAE,YAAY,EACtB,KAAK,EAAE,gBAAgB,GACtB,OAAO,CAAC,YAAY,GAAG,SAAS,CAAC,CAsBnC;AAED,wBAAsB,yBAAyB,CAC7C,QAAQ,EAAE,YAAY,EACtB,KAAK,EAAE,eAAe,GACrB,OAAO,CAAC,cAAc,CAAC,YAAY,CAAC,CAAC,CAMvC;AAED,wBAAsB,YAAY,CAChC,QAAQ,EAAE,YAAY,EACtB,KAAK,EAAE,eAAe,EACtB,OAAO,GAAE,oBAAyB,GACjC,OAAO,CAAC,cAAc,CAAC,iBAAiB,CAAC,CAAC,CAkC5C;AAgBD,wBAAsB,eAAe,CACnC,MAAM,EAAE,YAAY,EACpB,OAAO,GAAE,oBAAyB,GACjC,OAAO,CAAC,SAAS,CAAC,CA4FpB"}
@@ -152,7 +152,6 @@ export async function transformTmdbTv(source, options = {}) {
152
152
  addTvCertifications(data, payload);
153
153
  addStructuredDetail(data, "production_countries", payload.production_countries);
154
154
  addStructuredDetail(data, "spoken_languages", payload.spoken_languages);
155
- addStructuredDetail(data, "content_ratings", payload.content_ratings?.results);
156
155
  addStructuredDetail(data, "last_episode_to_air", payload.last_episode_to_air);
157
156
  addStructuredDetail(data, "next_episode_to_air", payload.next_episode_to_air);
158
157
  addStructuredDetail(data, "watch_providers", payload.watch_providers?.results);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@zivue/zuuid",
3
- "version": "0.2.1",
3
+ "version": "0.2.3",
4
4
  "description": "TypeScript helpers for fetching, searching, and transforming Zuuid datasets.",
5
5
  "type": "module",
6
6
  "license": "MIT",
@@ -243,6 +243,22 @@
243
243
  "./providers/tmdb/person": {
244
244
  "types": "./dist/providers/tmdb/person.d.ts",
245
245
  "import": "./dist/providers/tmdb/person.js"
246
+ },
247
+ "./providers/imdb": {
248
+ "types": "./dist/providers/imdb/index.d.ts",
249
+ "import": "./dist/providers/imdb/index.js"
250
+ },
251
+ "./providers/imdb/movie": {
252
+ "types": "./dist/providers/imdb/movie.d.ts",
253
+ "import": "./dist/providers/imdb/movie.js"
254
+ },
255
+ "./providers/gamesdb/client": {
256
+ "types": "./dist/providers/gamesdb/client.d.ts",
257
+ "import": "./dist/providers/gamesdb/client.js"
258
+ },
259
+ "./providers/musicbrainz/client": {
260
+ "types": "./dist/providers/musicbrainz/client.d.ts",
261
+ "import": "./dist/providers/musicbrainz/client.js"
246
262
  }
247
263
  },
248
264
  "types": "./dist/index.d.ts",