@media-engine/providers 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +295 -0
- package/dist/anilist/index.d.ts +9 -0
- package/dist/anilist/index.js +279 -0
- package/dist/anilist/index.js.map +1 -0
- package/dist/cinemeta/index.d.ts +12 -0
- package/dist/cinemeta/index.js +379 -0
- package/dist/cinemeta/index.js.map +1 -0
- package/dist/experimental-streaming/index.d.ts +24 -0
- package/dist/experimental-streaming/index.js +199 -0
- package/dist/experimental-streaming/index.js.map +1 -0
- package/dist/flixhq-streaming/index.d.ts +30 -0
- package/dist/flixhq-streaming/index.js +625 -0
- package/dist/flixhq-streaming/index.js.map +1 -0
- package/dist/imdb-dataset/index.d.ts +9 -0
- package/dist/imdb-dataset/index.js +307 -0
- package/dist/imdb-dataset/index.js.map +1 -0
- package/dist/index.d.ts +10 -0
- package/dist/index.js +11 -0
- package/dist/index.js.map +1 -0
- package/dist/kinobd/index.d.ts +11 -0
- package/dist/kinobd/index.js +405 -0
- package/dist/kinobd/index.js.map +1 -0
- package/dist/kinobd-streaming/index.d.ts +31 -0
- package/dist/kinobd-streaming/index.js +919 -0
- package/dist/kinobd-streaming/index.js.map +1 -0
- package/dist/shared/http.d.ts +17 -0
- package/dist/shared/http.js +264 -0
- package/dist/shared/http.js.map +1 -0
- package/dist/shared/index.d.ts +1 -0
- package/dist/shared/index.js +2 -0
- package/dist/shared/index.js.map +1 -0
- package/dist/shikimori/index.d.ts +12 -0
- package/dist/shikimori/index.js +457 -0
- package/dist/shikimori/index.js.map +1 -0
- package/dist/wikidata/index.d.ts +12 -0
- package/dist/wikidata/index.js +356 -0
- package/dist/wikidata/index.js.map +1 -0
- package/package.json +62 -0
|
@@ -0,0 +1,457 @@
|
|
|
1
|
+
import { fetchJson } from "../shared/index.js";
|
|
2
|
+
const PROVIDER_NAME = "shikimori";
|
|
3
|
+
const DEFAULT_BASE_URL = "https://shikimori.one";
|
|
4
|
+
const DEFAULT_SEARCH_LIMIT = 20;
|
|
5
|
+
const DEFAULT_PERSON_LIMIT = 20;
|
|
6
|
+
// Creates a Shikimori metadata provider for anime data.
|
|
7
|
+
// Создает metadata-провайдер Shikimori для данных аниме.
|
|
8
|
+
export function shikimoriProvider(options = {}) {
|
|
9
|
+
const config = createShikimoriConfig(options);
|
|
10
|
+
return {
|
|
11
|
+
name: PROVIDER_NAME,
|
|
12
|
+
version: options.version,
|
|
13
|
+
kind: "metadata",
|
|
14
|
+
capabilities: {
|
|
15
|
+
mediaTypes: ["anime"],
|
|
16
|
+
search: {
|
|
17
|
+
byTitle: true,
|
|
18
|
+
byExternalIds: ["shikimori"],
|
|
19
|
+
},
|
|
20
|
+
details: {
|
|
21
|
+
byExternalIds: ["shikimori"],
|
|
22
|
+
},
|
|
23
|
+
features: ["posters", "ratings", "genres", "persons", "episodes", "alternative_titles"],
|
|
24
|
+
},
|
|
25
|
+
async search(query, context) {
|
|
26
|
+
return searchShikimori(config, query, context);
|
|
27
|
+
},
|
|
28
|
+
async getDetails(query, context) {
|
|
29
|
+
return getShikimoriDetails(config, query, context);
|
|
30
|
+
},
|
|
31
|
+
};
|
|
32
|
+
}
|
|
33
|
+
// Builds a defensive provider configuration from public options.
|
|
34
|
+
// Собирает защищенную конфигурацию провайдера из публичных опций.
|
|
35
|
+
function createShikimoriConfig(options) {
|
|
36
|
+
return {
|
|
37
|
+
baseUrl: trimTrailingSlash(options.baseUrl ?? DEFAULT_BASE_URL),
|
|
38
|
+
fetch: options.fetch,
|
|
39
|
+
searchLimit: options.searchLimit ?? DEFAULT_SEARCH_LIMIT,
|
|
40
|
+
personLimit: options.personLimit ?? DEFAULT_PERSON_LIMIT,
|
|
41
|
+
userAgent: options.userAgent,
|
|
42
|
+
censored: options.censored ?? false,
|
|
43
|
+
};
|
|
44
|
+
}
|
|
45
|
+
// Runs Shikimori search by title or supported external IDs.
|
|
46
|
+
// Выполняет поиск Shikimori по названию или поддерживаемым внешним ID.
|
|
47
|
+
async function searchShikimori(config, query, context) {
|
|
48
|
+
if (query.type && query.type !== "anime") {
|
|
49
|
+
return [];
|
|
50
|
+
}
|
|
51
|
+
if (query.ids?.shikimori) {
|
|
52
|
+
const details = await getAnimeById(config, query.ids.shikimori, context);
|
|
53
|
+
return details ? [detailsToSearchResult(config, details, context.debug)] : [];
|
|
54
|
+
}
|
|
55
|
+
if (!query.title) {
|
|
56
|
+
return [];
|
|
57
|
+
}
|
|
58
|
+
const response = await requestShikimori(config, "/api/animes", {
|
|
59
|
+
search: query.title,
|
|
60
|
+
limit: String(query.limit ?? config.searchLimit),
|
|
61
|
+
order: "popularity",
|
|
62
|
+
kind: "tv,movie,ova,ona,special,music",
|
|
63
|
+
censored: String(config.censored),
|
|
64
|
+
}, context);
|
|
65
|
+
return response.map((item) => createSearchResult(config, mapAnimeSearchResult(config, item), context.debug));
|
|
66
|
+
}
|
|
67
|
+
// Resolves detailed Shikimori anime metadata by Shikimori ID.
|
|
68
|
+
// Получает подробные metadata Shikimori anime по Shikimori ID.
|
|
69
|
+
async function getShikimoriDetails(config, query, context) {
|
|
70
|
+
if (query.type && query.type !== "anime") {
|
|
71
|
+
return null;
|
|
72
|
+
}
|
|
73
|
+
const details = query.ids?.shikimori
|
|
74
|
+
? await getAnimeById(config, query.ids.shikimori, context)
|
|
75
|
+
: null;
|
|
76
|
+
if (!details) {
|
|
77
|
+
return null;
|
|
78
|
+
}
|
|
79
|
+
return {
|
|
80
|
+
provider: PROVIDER_NAME,
|
|
81
|
+
details,
|
|
82
|
+
source: createProviderSource(config, details.ids),
|
|
83
|
+
raw: context.debug ? details : undefined,
|
|
84
|
+
};
|
|
85
|
+
}
|
|
86
|
+
// Fetches and maps Shikimori anime details.
|
|
87
|
+
// Загружает и преобразует детали anime Shikimori.
|
|
88
|
+
async function getAnimeById(config, shikimoriId, context) {
|
|
89
|
+
const encodedId = encodeURIComponent(shikimoriId);
|
|
90
|
+
const [data, roles, screenshots] = await Promise.all([
|
|
91
|
+
requestShikimori(config, `/api/animes/${encodedId}`, {}, context),
|
|
92
|
+
requestShikimori(config, `/api/animes/${encodedId}/roles`, {}, context).catch(() => []),
|
|
93
|
+
requestShikimori(config, `/api/animes/${encodedId}/screenshots`, {}, context).catch(() => []),
|
|
94
|
+
]);
|
|
95
|
+
return mapAnimeDetails(config, data, roles, screenshots);
|
|
96
|
+
}
|
|
97
|
+
// Performs one Shikimori JSON request.
|
|
98
|
+
// Выполняет один JSON-запрос к Shikimori.
|
|
99
|
+
async function requestShikimori(config, path, params, context) {
|
|
100
|
+
const url = new URL(`${config.baseUrl}${path}`);
|
|
101
|
+
for (const [key, value] of Object.entries(params)) {
|
|
102
|
+
if (value !== undefined && value !== "") {
|
|
103
|
+
url.searchParams.set(key, value);
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
return fetchJson({
|
|
107
|
+
provider: PROVIDER_NAME,
|
|
108
|
+
url,
|
|
109
|
+
context,
|
|
110
|
+
fetch: config.fetch,
|
|
111
|
+
init: {
|
|
112
|
+
headers: createHeaders(config),
|
|
113
|
+
},
|
|
114
|
+
});
|
|
115
|
+
}
|
|
116
|
+
// Maps a Shikimori search item into Media Engine search item.
|
|
117
|
+
// Преобразует результат поиска Shikimori в search item Media Engine.
|
|
118
|
+
function mapAnimeSearchResult(config, item, extraIds = {}) {
|
|
119
|
+
const title = item.russian || item.name || `Shikimori anime ${item.id}`;
|
|
120
|
+
const alternativeTitles = collectUnique([item.russian, item.name]).filter((candidate) => candidate !== title);
|
|
121
|
+
return {
|
|
122
|
+
id: createMediaId(item.id),
|
|
123
|
+
type: "anime",
|
|
124
|
+
title,
|
|
125
|
+
originalTitle: item.name,
|
|
126
|
+
alternativeTitles: alternativeTitles.length > 0 ? alternativeTitles : undefined,
|
|
127
|
+
year: getYear(item.aired_on),
|
|
128
|
+
releaseDate: item.aired_on || undefined,
|
|
129
|
+
description: undefined,
|
|
130
|
+
poster: createImage(config, item.image, "poster"),
|
|
131
|
+
ratings: createRatings(item.score),
|
|
132
|
+
ids: {
|
|
133
|
+
...extraIds,
|
|
134
|
+
shikimori: String(item.id),
|
|
135
|
+
},
|
|
136
|
+
};
|
|
137
|
+
}
|
|
138
|
+
// Maps a Shikimori anime details response into Media Engine details.
|
|
139
|
+
// Преобразует ответ деталей Shikimori anime в details Media Engine.
|
|
140
|
+
function mapAnimeDetails(config, item, roles, screenshots) {
|
|
141
|
+
const ids = createIds(item.id, item.myanimelist_id);
|
|
142
|
+
const details = {
|
|
143
|
+
...mapAnimeSearchResult(config, item, ids),
|
|
144
|
+
type: "anime",
|
|
145
|
+
alternativeTitles: mapAlternativeTitles(item),
|
|
146
|
+
description: normalizeDescription(item.description),
|
|
147
|
+
shortDescription: item.description_source || undefined,
|
|
148
|
+
genres: mapGenres(item.genres),
|
|
149
|
+
ratings: createRatings(item.score, item.rates_scores_stats),
|
|
150
|
+
status: mapStatus(item.status),
|
|
151
|
+
runtimeMinutes: item.duration,
|
|
152
|
+
countries: ["JP"],
|
|
153
|
+
languages: ["ja"],
|
|
154
|
+
images: mapImages(config, item, screenshots),
|
|
155
|
+
persons: mapPersons(config, roles, config.personLimit),
|
|
156
|
+
sourceProviders: [createProviderSource(config, ids)],
|
|
157
|
+
animeKind: mapAnimeKind(item.kind),
|
|
158
|
+
episodes: createEpisodes(item.episodes),
|
|
159
|
+
episodesCount: item.episodes || undefined,
|
|
160
|
+
airedOn: item.aired_on || undefined,
|
|
161
|
+
releasedOn: item.released_on || undefined,
|
|
162
|
+
ageRating: item.rating,
|
|
163
|
+
};
|
|
164
|
+
return details;
|
|
165
|
+
}
|
|
166
|
+
// Removes Shikimori BBCode references that should not leak into public text.
|
|
167
|
+
// Убирает BBCode-ссылки Shikimori, которые не должны попадать в публичный текст.
|
|
168
|
+
function normalizeDescription(description) {
|
|
169
|
+
const normalized = description
|
|
170
|
+
?.replace(/\[(?:character|person|anime|manga)=[^\]]+\]/gi, "")
|
|
171
|
+
.replace(/\[\/(?:character|person|anime|manga)\]/gi, "")
|
|
172
|
+
.trim();
|
|
173
|
+
return normalized || undefined;
|
|
174
|
+
}
|
|
175
|
+
// Converts details back to provider search result for ID searches.
|
|
176
|
+
// Преобразует details обратно в provider search result для поиска по ID.
|
|
177
|
+
function detailsToSearchResult(config, details, debug) {
|
|
178
|
+
return createSearchResult(config, {
|
|
179
|
+
id: details.id,
|
|
180
|
+
type: "anime",
|
|
181
|
+
title: details.title,
|
|
182
|
+
originalTitle: details.originalTitle,
|
|
183
|
+
alternativeTitles: details.alternativeTitles,
|
|
184
|
+
year: details.year,
|
|
185
|
+
releaseDate: details.releaseDate,
|
|
186
|
+
description: details.description,
|
|
187
|
+
poster: details.poster,
|
|
188
|
+
genres: details.genres,
|
|
189
|
+
ratings: details.ratings,
|
|
190
|
+
ids: details.ids,
|
|
191
|
+
}, debug);
|
|
192
|
+
}
|
|
193
|
+
// Wraps a media item into a provider search result.
|
|
194
|
+
// Заворачивает media item в provider search result.
|
|
195
|
+
function createSearchResult(config, item, debug) {
|
|
196
|
+
return {
|
|
197
|
+
provider: PROVIDER_NAME,
|
|
198
|
+
item,
|
|
199
|
+
confidence: item.ids?.shikimori || item.ids?.myAnimeList ? 1 : 0.8,
|
|
200
|
+
source: createProviderSource(config, item.ids),
|
|
201
|
+
raw: debug ? item : undefined,
|
|
202
|
+
};
|
|
203
|
+
}
|
|
204
|
+
// Builds normalized external IDs for Shikimori anime.
|
|
205
|
+
// Собирает нормализованные external IDs для Shikimori anime.
|
|
206
|
+
function createIds(shikimoriId, myAnimeListId) {
|
|
207
|
+
return {
|
|
208
|
+
shikimori: String(shikimoriId),
|
|
209
|
+
myAnimeList: myAnimeListId ? String(myAnimeListId) : undefined,
|
|
210
|
+
};
|
|
211
|
+
}
|
|
212
|
+
// Builds normalized provider attribution.
|
|
213
|
+
// Собирает нормализованную атрибуцию провайдера.
|
|
214
|
+
function createProviderSource(config, ids) {
|
|
215
|
+
return {
|
|
216
|
+
provider: PROVIDER_NAME,
|
|
217
|
+
ids,
|
|
218
|
+
url: ids?.shikimori ? `${config.baseUrl}/animes/${ids.shikimori}` : undefined,
|
|
219
|
+
};
|
|
220
|
+
}
|
|
221
|
+
// Creates an image from Shikimori relative image paths.
|
|
222
|
+
// Создает изображение из относительных путей Shikimori.
|
|
223
|
+
function createImage(config, image, type) {
|
|
224
|
+
const path = image?.original ?? image?.preview ?? image?.x96 ?? image?.x48;
|
|
225
|
+
if (!path) {
|
|
226
|
+
return undefined;
|
|
227
|
+
}
|
|
228
|
+
return {
|
|
229
|
+
url: createAbsoluteUrl(config, path),
|
|
230
|
+
type,
|
|
231
|
+
source: PROVIDER_NAME,
|
|
232
|
+
};
|
|
233
|
+
}
|
|
234
|
+
// Maps all Shikimori detail images into normalized image metadata.
|
|
235
|
+
// Преобразует все detail images Shikimori в нормализованные metadata изображений.
|
|
236
|
+
function mapImages(config, item, screenshots) {
|
|
237
|
+
const images = [
|
|
238
|
+
createImage(config, item.image, "poster"),
|
|
239
|
+
...(screenshots.length ? screenshots : (item.screenshots ?? [])).map((image) => createImage(config, image, "still")),
|
|
240
|
+
].filter(isDefined);
|
|
241
|
+
return images.length ? images : undefined;
|
|
242
|
+
}
|
|
243
|
+
// Maps Shikimori genres into normalized genre labels.
|
|
244
|
+
// Преобразует жанры Shikimori в нормализованные названия жанров.
|
|
245
|
+
function mapGenres(genres) {
|
|
246
|
+
const mapped = (genres ?? []).flatMap((genre) => {
|
|
247
|
+
const name = genre.russian || genre.name;
|
|
248
|
+
if (!name) {
|
|
249
|
+
return [];
|
|
250
|
+
}
|
|
251
|
+
return [
|
|
252
|
+
{
|
|
253
|
+
id: genre.id ? String(genre.id) : undefined,
|
|
254
|
+
name,
|
|
255
|
+
source: PROVIDER_NAME,
|
|
256
|
+
},
|
|
257
|
+
];
|
|
258
|
+
});
|
|
259
|
+
return mapped.length ? mapped : undefined;
|
|
260
|
+
}
|
|
261
|
+
// Maps Shikimori score stats into normalized ratings.
|
|
262
|
+
// Преобразует score stats Shikimori в нормализованные рейтинги.
|
|
263
|
+
function createRatings(score, stats = []) {
|
|
264
|
+
const value = score ? Number.parseFloat(score) : Number.NaN;
|
|
265
|
+
const votes = stats.reduce((total, item) => total + (item.value ?? 0), 0);
|
|
266
|
+
if (!Number.isFinite(value) || value <= 0) {
|
|
267
|
+
return undefined;
|
|
268
|
+
}
|
|
269
|
+
return [
|
|
270
|
+
{
|
|
271
|
+
source: "shikimori",
|
|
272
|
+
value,
|
|
273
|
+
max: 10,
|
|
274
|
+
votes: votes || undefined,
|
|
275
|
+
},
|
|
276
|
+
];
|
|
277
|
+
}
|
|
278
|
+
// Maps Shikimori status into Media Engine lifecycle status.
|
|
279
|
+
// Преобразует status Shikimori в lifecycle status Media Engine.
|
|
280
|
+
function mapStatus(status) {
|
|
281
|
+
switch (status) {
|
|
282
|
+
case "anons":
|
|
283
|
+
return "announced";
|
|
284
|
+
case "ongoing":
|
|
285
|
+
return "ongoing";
|
|
286
|
+
case "released":
|
|
287
|
+
return "ended";
|
|
288
|
+
default:
|
|
289
|
+
return undefined;
|
|
290
|
+
}
|
|
291
|
+
}
|
|
292
|
+
// Maps Shikimori kind into anime release format.
|
|
293
|
+
// Преобразует kind Shikimori в формат релиза аниме.
|
|
294
|
+
function mapAnimeKind(kind) {
|
|
295
|
+
switch (kind) {
|
|
296
|
+
case "tv":
|
|
297
|
+
case "movie":
|
|
298
|
+
case "ova":
|
|
299
|
+
case "ona":
|
|
300
|
+
case "special":
|
|
301
|
+
case "music":
|
|
302
|
+
return kind;
|
|
303
|
+
default:
|
|
304
|
+
return kind ? "unknown" : undefined;
|
|
305
|
+
}
|
|
306
|
+
}
|
|
307
|
+
// Creates placeholder episode entries when Shikimori only returns a count.
|
|
308
|
+
// Создает placeholder episodes, когда Shikimori возвращает только количество.
|
|
309
|
+
function createEpisodes(count) {
|
|
310
|
+
if (!count || count <= 0) {
|
|
311
|
+
return undefined;
|
|
312
|
+
}
|
|
313
|
+
return Array.from({ length: count }, (_, index) => ({
|
|
314
|
+
episodeNumber: index + 1,
|
|
315
|
+
absoluteNumber: index + 1,
|
|
316
|
+
}));
|
|
317
|
+
}
|
|
318
|
+
// Maps character and staff roles into normalized media persons.
|
|
319
|
+
// Преобразует роли characters и staff в нормализованные media persons.
|
|
320
|
+
function mapPersons(config, roles, limit) {
|
|
321
|
+
const characterPersons = roles
|
|
322
|
+
.map((role, index) => mapCharacterRole(config, role, index))
|
|
323
|
+
.filter(isDefined);
|
|
324
|
+
const staffPersons = roles
|
|
325
|
+
.map((role, index) => mapStaffRole(config, role, characterPersons.length + index))
|
|
326
|
+
.filter(isDefined);
|
|
327
|
+
const persons = [...characterPersons, ...staffPersons].slice(0, limit);
|
|
328
|
+
return persons.length ? persons : undefined;
|
|
329
|
+
}
|
|
330
|
+
// Maps a Shikimori character role into a voice actor person.
|
|
331
|
+
// Преобразует character role Shikimori в voice actor person.
|
|
332
|
+
function mapCharacterRole(config, role, order) {
|
|
333
|
+
const person = role.character;
|
|
334
|
+
if (!person?.name && !person?.russian) {
|
|
335
|
+
return undefined;
|
|
336
|
+
}
|
|
337
|
+
return {
|
|
338
|
+
person: mapPerson(config, person),
|
|
339
|
+
roles: ["voice_actor"],
|
|
340
|
+
characterName: person.russian || person.name,
|
|
341
|
+
order,
|
|
342
|
+
};
|
|
343
|
+
}
|
|
344
|
+
// Maps a Shikimori staff role into a normalized media person.
|
|
345
|
+
// Преобразует staff role Shikimori в нормализованную media person.
|
|
346
|
+
function mapStaffRole(config, role, order) {
|
|
347
|
+
const person = role.person;
|
|
348
|
+
if (!person?.name && !person?.russian) {
|
|
349
|
+
return undefined;
|
|
350
|
+
}
|
|
351
|
+
return {
|
|
352
|
+
person: mapPerson(config, person),
|
|
353
|
+
roles: mapPersonRoles(role.roles),
|
|
354
|
+
order,
|
|
355
|
+
};
|
|
356
|
+
}
|
|
357
|
+
// Maps Shikimori person payload into normalized person metadata.
|
|
358
|
+
// Преобразует person payload Shikimori в нормализованные person metadata.
|
|
359
|
+
function mapPerson(config, person) {
|
|
360
|
+
return {
|
|
361
|
+
id: person.id ? createPersonId(person.id) : undefined,
|
|
362
|
+
name: person.russian || person.name || "Unknown",
|
|
363
|
+
originalName: person.name,
|
|
364
|
+
photo: createImage(config, person.image, "profile"),
|
|
365
|
+
ids: {
|
|
366
|
+
shikimori: person.id ? String(person.id) : undefined,
|
|
367
|
+
},
|
|
368
|
+
};
|
|
369
|
+
}
|
|
370
|
+
// Maps Shikimori staff role labels into Media Engine roles.
|
|
371
|
+
// Преобразует staff role labels Shikimori в роли Media Engine.
|
|
372
|
+
function mapPersonRoles(roles) {
|
|
373
|
+
const mapped = (roles ?? []).map((role) => {
|
|
374
|
+
switch (role.toLowerCase()) {
|
|
375
|
+
case "director":
|
|
376
|
+
return "director";
|
|
377
|
+
case "producer":
|
|
378
|
+
return "producer";
|
|
379
|
+
case "mangaka":
|
|
380
|
+
case "original creator":
|
|
381
|
+
case "screenwriter":
|
|
382
|
+
return "writer";
|
|
383
|
+
case "music":
|
|
384
|
+
return "composer";
|
|
385
|
+
default:
|
|
386
|
+
return "unknown";
|
|
387
|
+
}
|
|
388
|
+
});
|
|
389
|
+
return mapped.length ? collectUnique(mapped) : ["unknown"];
|
|
390
|
+
}
|
|
391
|
+
// Collects normalized alternative titles from Shikimori details.
|
|
392
|
+
// Собирает нормализованные alternative titles из деталей Shikimori.
|
|
393
|
+
function mapAlternativeTitles(item) {
|
|
394
|
+
const titles = collectUnique([
|
|
395
|
+
item.name,
|
|
396
|
+
item.russian,
|
|
397
|
+
...(item.english ?? []),
|
|
398
|
+
...(item.japanese ?? []),
|
|
399
|
+
...(item.synonyms ?? []),
|
|
400
|
+
item.license_name_ru ?? undefined,
|
|
401
|
+
]).filter((title) => title !== item.russian);
|
|
402
|
+
return titles.length ? titles : undefined;
|
|
403
|
+
}
|
|
404
|
+
// Creates request headers expected by Shikimori API.
|
|
405
|
+
// Создает headers, ожидаемые Shikimori API.
|
|
406
|
+
function createHeaders(config) {
|
|
407
|
+
const headers = {
|
|
408
|
+
accept: "application/json",
|
|
409
|
+
};
|
|
410
|
+
if (config.userAgent) {
|
|
411
|
+
headers["user-agent"] = config.userAgent;
|
|
412
|
+
}
|
|
413
|
+
return headers;
|
|
414
|
+
}
|
|
415
|
+
// Converts a relative or absolute Shikimori URL into absolute URL.
|
|
416
|
+
// Преобразует относительный или абсолютный Shikimori URL в absolute URL.
|
|
417
|
+
function createAbsoluteUrl(config, path) {
|
|
418
|
+
if (path.startsWith("http://") || path.startsWith("https://")) {
|
|
419
|
+
return path;
|
|
420
|
+
}
|
|
421
|
+
return `${config.baseUrl}${path.startsWith("/") ? "" : "/"}${path}`;
|
|
422
|
+
}
|
|
423
|
+
// Creates stable provider-scoped media ID.
|
|
424
|
+
// Создает стабильный media ID в области провайдера.
|
|
425
|
+
function createMediaId(id) {
|
|
426
|
+
return `${PROVIDER_NAME}:anime:${id}`;
|
|
427
|
+
}
|
|
428
|
+
// Creates stable provider-scoped person ID.
|
|
429
|
+
// Создает стабильный person ID в области провайдера.
|
|
430
|
+
function createPersonId(id) {
|
|
431
|
+
return `${PROVIDER_NAME}:person:${id}`;
|
|
432
|
+
}
|
|
433
|
+
// Extracts year from an ISO-like date string.
|
|
434
|
+
// Извлекает год из ISO-like строки даты.
|
|
435
|
+
function getYear(date) {
|
|
436
|
+
if (!date) {
|
|
437
|
+
return undefined;
|
|
438
|
+
}
|
|
439
|
+
const year = Number.parseInt(date.slice(0, 4), 10);
|
|
440
|
+
return Number.isFinite(year) ? year : undefined;
|
|
441
|
+
}
|
|
442
|
+
// Removes a trailing slash from base URLs.
|
|
443
|
+
// Удаляет завершающий slash из base URL.
|
|
444
|
+
function trimTrailingSlash(value) {
|
|
445
|
+
return value.replace(/\/+$/, "");
|
|
446
|
+
}
|
|
447
|
+
// Checks whether a value is present after filtering arrays.
|
|
448
|
+
// Проверяет, что значение присутствует после фильтрации массивов.
|
|
449
|
+
function isDefined(value) {
|
|
450
|
+
return value !== undefined;
|
|
451
|
+
}
|
|
452
|
+
// Collects unique truthy string values while preserving order.
|
|
453
|
+
// Собирает уникальные truthy строки с сохранением порядка.
|
|
454
|
+
function collectUnique(values) {
|
|
455
|
+
return Array.from(new Set(values.filter((value) => Boolean(value))));
|
|
456
|
+
}
|
|
457
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/shikimori/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { type MediaProvider } from "@media-engine/core";
|
|
2
|
+
import { type ProviderFetch } from "../shared/index.js";
|
|
3
|
+
export interface WikidataProviderOptions {
|
|
4
|
+
baseUrl?: string;
|
|
5
|
+
sparqlUrl?: string;
|
|
6
|
+
language?: string;
|
|
7
|
+
userAgent?: string;
|
|
8
|
+
fetch?: ProviderFetch;
|
|
9
|
+
version?: string;
|
|
10
|
+
searchLimit?: number;
|
|
11
|
+
}
|
|
12
|
+
export declare function wikidataProvider(options?: WikidataProviderOptions): MediaProvider;
|