@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,356 @@
|
|
|
1
|
+
import { fetchJson } from "../shared/index.js";
|
|
2
|
+
const PROVIDER_NAME = "wikidata";
|
|
3
|
+
const DEFAULT_BASE_URL = "https://www.wikidata.org";
|
|
4
|
+
const DEFAULT_SPARQL_URL = "https://query.wikidata.org/sparql";
|
|
5
|
+
const DEFAULT_LANGUAGE = "en";
|
|
6
|
+
const DEFAULT_SEARCH_LIMIT = 8;
|
|
7
|
+
const DEFAULT_USER_AGENT = "MediaEngine/0.0.0 (https://github.com/Yaneart/media-engine)";
|
|
8
|
+
const MOVIE_INSTANCE_IDS = new Set(["Q11424", "Q506240"]);
|
|
9
|
+
const SERIES_INSTANCE_IDS = new Set(["Q5398426", "Q1259759", "Q15416"]);
|
|
10
|
+
// Creates a Wikidata metadata provider for basic movie and series lookup.
|
|
11
|
+
// Создает metadata-провайдер Wikidata для базового поиска фильмов и сериалов.
|
|
12
|
+
export function wikidataProvider(options = {}) {
|
|
13
|
+
const config = createWikidataConfig(options);
|
|
14
|
+
return {
|
|
15
|
+
name: PROVIDER_NAME,
|
|
16
|
+
version: options.version,
|
|
17
|
+
kind: "metadata",
|
|
18
|
+
capabilities: {
|
|
19
|
+
mediaTypes: ["movie", "series"],
|
|
20
|
+
search: {
|
|
21
|
+
byTitle: true,
|
|
22
|
+
byExternalIds: ["imdb"],
|
|
23
|
+
},
|
|
24
|
+
details: {
|
|
25
|
+
byExternalIds: ["imdb"],
|
|
26
|
+
},
|
|
27
|
+
features: ["posters"],
|
|
28
|
+
},
|
|
29
|
+
async search(query, context) {
|
|
30
|
+
return searchWikidata(config, query, context);
|
|
31
|
+
},
|
|
32
|
+
async getDetails(query, context) {
|
|
33
|
+
return getWikidataDetails(config, query, context);
|
|
34
|
+
},
|
|
35
|
+
};
|
|
36
|
+
}
|
|
37
|
+
// Builds provider config with conservative defaults for public Wikimedia APIs.
|
|
38
|
+
// Собирает конфигурацию с консервативными defaults для публичных Wikimedia API.
|
|
39
|
+
function createWikidataConfig(options) {
|
|
40
|
+
return {
|
|
41
|
+
baseUrl: trimTrailingSlash(options.baseUrl ?? DEFAULT_BASE_URL),
|
|
42
|
+
sparqlUrl: options.sparqlUrl ?? DEFAULT_SPARQL_URL,
|
|
43
|
+
language: normalizeLanguage(options.language ?? DEFAULT_LANGUAGE),
|
|
44
|
+
userAgent: options.userAgent ?? DEFAULT_USER_AGENT,
|
|
45
|
+
fetch: options.fetch,
|
|
46
|
+
searchLimit: options.searchLimit ?? DEFAULT_SEARCH_LIMIT,
|
|
47
|
+
};
|
|
48
|
+
}
|
|
49
|
+
// Runs title or IMDb ID search through Wikidata without requiring credentials.
|
|
50
|
+
// Выполняет поиск по названию или IMDb ID через Wikidata без credentials.
|
|
51
|
+
async function searchWikidata(config, query, context) {
|
|
52
|
+
if (query.type === "anime") {
|
|
53
|
+
return [];
|
|
54
|
+
}
|
|
55
|
+
if (query.ids?.imdb) {
|
|
56
|
+
const details = await getDetailsByImdbId(config, query.ids.imdb, query.type, context);
|
|
57
|
+
return details ? [detailsToSearchResult(details, context.debug)] : [];
|
|
58
|
+
}
|
|
59
|
+
if (!query.title?.trim()) {
|
|
60
|
+
return [];
|
|
61
|
+
}
|
|
62
|
+
const entityIds = await searchEntityIds(config, query, context);
|
|
63
|
+
const entities = await getEntities(config, entityIds, context);
|
|
64
|
+
return entities
|
|
65
|
+
.map((entity) => mapEntityToItem(config, entity, query, context))
|
|
66
|
+
.filter((item) => item !== undefined)
|
|
67
|
+
.map((item) => createSearchResult(item, context.debug));
|
|
68
|
+
}
|
|
69
|
+
// Loads details by IMDb ID when the selected search result exposes one.
|
|
70
|
+
// Загружает детали по IMDb ID, если выбранный результат поиска его содержит.
|
|
71
|
+
async function getWikidataDetails(config, query, context) {
|
|
72
|
+
if (!query.ids?.imdb || query.type === "anime") {
|
|
73
|
+
return null;
|
|
74
|
+
}
|
|
75
|
+
const details = await getDetailsByImdbId(config, query.ids.imdb, query.type, context);
|
|
76
|
+
return details
|
|
77
|
+
? {
|
|
78
|
+
provider: PROVIDER_NAME,
|
|
79
|
+
details,
|
|
80
|
+
source: createProviderSource(details.ids),
|
|
81
|
+
raw: context.debug ? details : undefined,
|
|
82
|
+
confidence: 0.9,
|
|
83
|
+
}
|
|
84
|
+
: null;
|
|
85
|
+
}
|
|
86
|
+
// Resolves one Wikidata entity through an exact IMDb ID SPARQL lookup.
|
|
87
|
+
// Находит одну Wikidata entity через точный SPARQL lookup по IMDb ID.
|
|
88
|
+
async function getDetailsByImdbId(config, imdbId, type, context) {
|
|
89
|
+
const entityId = await findEntityIdByImdbId(config, imdbId, context);
|
|
90
|
+
if (!entityId) {
|
|
91
|
+
return null;
|
|
92
|
+
}
|
|
93
|
+
const [entity] = await getEntities(config, [entityId], context);
|
|
94
|
+
const item = entity
|
|
95
|
+
? mapEntityToItem(config, entity, { ids: { imdb: imdbId }, type }, context)
|
|
96
|
+
: undefined;
|
|
97
|
+
return item ? itemToDetails(item) : null;
|
|
98
|
+
}
|
|
99
|
+
// Searches Wikidata item IDs using the public Action API search endpoint.
|
|
100
|
+
// Ищет Wikidata item IDs через публичный search endpoint Action API.
|
|
101
|
+
async function searchEntityIds(config, query, context) {
|
|
102
|
+
const url = new URL(`${config.baseUrl}/w/api.php`);
|
|
103
|
+
const language = normalizeLanguage(query.language ?? context.language ?? config.language);
|
|
104
|
+
url.searchParams.set("action", "wbsearchentities");
|
|
105
|
+
url.searchParams.set("format", "json");
|
|
106
|
+
url.searchParams.set("type", "item");
|
|
107
|
+
url.searchParams.set("language", language);
|
|
108
|
+
url.searchParams.set("uselang", language);
|
|
109
|
+
url.searchParams.set("search", query.title ?? "");
|
|
110
|
+
url.searchParams.set("limit", String(config.searchLimit));
|
|
111
|
+
const response = await requestJson(config, url, context);
|
|
112
|
+
return (response.search ?? [])
|
|
113
|
+
.map((result) => result.id)
|
|
114
|
+
.filter((id) => Boolean(id));
|
|
115
|
+
}
|
|
116
|
+
// Loads full Wikidata entity JSON for candidate IDs.
|
|
117
|
+
// Загружает полный JSON Wikidata entity для candidate IDs.
|
|
118
|
+
async function getEntities(config, entityIds, context) {
|
|
119
|
+
if (!entityIds.length) {
|
|
120
|
+
return [];
|
|
121
|
+
}
|
|
122
|
+
const url = new URL(`${config.baseUrl}/w/api.php`);
|
|
123
|
+
url.searchParams.set("action", "wbgetentities");
|
|
124
|
+
url.searchParams.set("format", "json");
|
|
125
|
+
url.searchParams.set("ids", entityIds.join("|"));
|
|
126
|
+
url.searchParams.set("props", "labels|descriptions|claims");
|
|
127
|
+
const response = await requestJson(config, url, context);
|
|
128
|
+
return Object.values(response.entities ?? {}).filter(isKnownEntity);
|
|
129
|
+
}
|
|
130
|
+
// Finds one Wikidata item ID by exact IMDb title ID.
|
|
131
|
+
// Находит один Wikidata item ID по точному IMDb title ID.
|
|
132
|
+
async function findEntityIdByImdbId(config, imdbId, context) {
|
|
133
|
+
const url = new URL(config.sparqlUrl);
|
|
134
|
+
const query = `SELECT ?item WHERE { ?item wdt:P345 "${escapeSparqlString(imdbId)}". } LIMIT 1`;
|
|
135
|
+
url.searchParams.set("format", "json");
|
|
136
|
+
url.searchParams.set("query", query);
|
|
137
|
+
const response = await requestJson(config, url, context);
|
|
138
|
+
const itemUrl = response.results?.bindings?.[0]?.item?.value;
|
|
139
|
+
return itemUrl?.split("/").at(-1);
|
|
140
|
+
}
|
|
141
|
+
// Maps a Wikidata entity into the normalized compact media model.
|
|
142
|
+
// Преобразует Wikidata entity в нормализованную compact media model.
|
|
143
|
+
function mapEntityToItem(config, entity, query, context) {
|
|
144
|
+
const type = getMediaType(entity);
|
|
145
|
+
if (!type || (query.type && query.type !== type)) {
|
|
146
|
+
return undefined;
|
|
147
|
+
}
|
|
148
|
+
const title = getLabel(entity, context.language ?? config.language);
|
|
149
|
+
if (!title || (query.title && !isRelevantTitleMatch(title, query.title))) {
|
|
150
|
+
return undefined;
|
|
151
|
+
}
|
|
152
|
+
const releaseDate = getTimeClaim(entity, "P577");
|
|
153
|
+
const year = getYear(releaseDate);
|
|
154
|
+
if (query.year !== undefined && year !== undefined && query.year !== year) {
|
|
155
|
+
return undefined;
|
|
156
|
+
}
|
|
157
|
+
const ids = createIds(entity, query.ids);
|
|
158
|
+
return {
|
|
159
|
+
id: `${PROVIDER_NAME}-${type}-${entity.id}`,
|
|
160
|
+
type,
|
|
161
|
+
title,
|
|
162
|
+
originalTitle: getMonolingualTextClaim(entity, "P1476"),
|
|
163
|
+
year,
|
|
164
|
+
releaseDate,
|
|
165
|
+
description: getDescription(entity, context.language ?? config.language),
|
|
166
|
+
poster: getImage(entity),
|
|
167
|
+
ids,
|
|
168
|
+
};
|
|
169
|
+
}
|
|
170
|
+
// Converts compact Wikidata item data into basic details.
|
|
171
|
+
// Преобразует compact данные Wikidata item в базовые details.
|
|
172
|
+
function itemToDetails(item) {
|
|
173
|
+
const sourceProviders = [createProviderSource(item.ids)];
|
|
174
|
+
if (item.type === "series") {
|
|
175
|
+
const details = {
|
|
176
|
+
...item,
|
|
177
|
+
type: "series",
|
|
178
|
+
sourceProviders,
|
|
179
|
+
};
|
|
180
|
+
return details;
|
|
181
|
+
}
|
|
182
|
+
const details = {
|
|
183
|
+
...item,
|
|
184
|
+
type: "movie",
|
|
185
|
+
sourceProviders,
|
|
186
|
+
};
|
|
187
|
+
return details;
|
|
188
|
+
}
|
|
189
|
+
// Creates a provider search result wrapper with source attribution.
|
|
190
|
+
// Создает search result wrapper с атрибуцией источника.
|
|
191
|
+
function createSearchResult(item, debug) {
|
|
192
|
+
return {
|
|
193
|
+
provider: PROVIDER_NAME,
|
|
194
|
+
item,
|
|
195
|
+
source: createProviderSource(item.ids),
|
|
196
|
+
raw: debug ? item : undefined,
|
|
197
|
+
confidence: item.ids?.imdb ? 0.8 : 0.65,
|
|
198
|
+
};
|
|
199
|
+
}
|
|
200
|
+
// Converts details back to a search result for IMDb ID searches.
|
|
201
|
+
// Преобразует details обратно в search result для поиска по IMDb ID.
|
|
202
|
+
function detailsToSearchResult(details, debug) {
|
|
203
|
+
return createSearchResult({
|
|
204
|
+
id: details.id,
|
|
205
|
+
type: details.type,
|
|
206
|
+
title: details.title,
|
|
207
|
+
originalTitle: details.originalTitle,
|
|
208
|
+
year: details.year,
|
|
209
|
+
releaseDate: details.releaseDate,
|
|
210
|
+
description: details.description,
|
|
211
|
+
poster: details.poster,
|
|
212
|
+
ids: details.ids,
|
|
213
|
+
}, debug);
|
|
214
|
+
}
|
|
215
|
+
// Creates source attribution for Wikidata results.
|
|
216
|
+
// Создает атрибуцию источника для результатов Wikidata.
|
|
217
|
+
function createProviderSource(ids) {
|
|
218
|
+
const imdbId = ids?.imdb;
|
|
219
|
+
return {
|
|
220
|
+
provider: PROVIDER_NAME,
|
|
221
|
+
ids,
|
|
222
|
+
url: imdbId ? `https://www.imdb.com/title/${imdbId}/` : undefined,
|
|
223
|
+
};
|
|
224
|
+
}
|
|
225
|
+
// Creates normalized external IDs from Wikidata claims.
|
|
226
|
+
// Создает нормализованные external IDs из Wikidata claims.
|
|
227
|
+
function createIds(entity, extraIds) {
|
|
228
|
+
return {
|
|
229
|
+
...extraIds,
|
|
230
|
+
imdb: extraIds?.imdb ?? getStringClaim(entity, "P345"),
|
|
231
|
+
};
|
|
232
|
+
}
|
|
233
|
+
// Determines whether a Wikidata entity is a movie or a series.
|
|
234
|
+
// Определяет, является ли Wikidata entity фильмом или сериалом.
|
|
235
|
+
function getMediaType(entity) {
|
|
236
|
+
const instanceIds = getItemClaimIds(entity, "P31");
|
|
237
|
+
if (instanceIds.some((id) => MOVIE_INSTANCE_IDS.has(id))) {
|
|
238
|
+
return "movie";
|
|
239
|
+
}
|
|
240
|
+
if (instanceIds.some((id) => SERIES_INSTANCE_IDS.has(id))) {
|
|
241
|
+
return "series";
|
|
242
|
+
}
|
|
243
|
+
return undefined;
|
|
244
|
+
}
|
|
245
|
+
// Reads localized entity label with English fallback.
|
|
246
|
+
// Читает локализованный label entity с fallback на English.
|
|
247
|
+
function getLabel(entity, language) {
|
|
248
|
+
return entity.labels?.[normalizeLanguage(language)]?.value ?? entity.labels?.en?.value;
|
|
249
|
+
}
|
|
250
|
+
// Reads localized entity description with English fallback.
|
|
251
|
+
// Читает локализованное description entity с fallback на English.
|
|
252
|
+
function getDescription(entity, language) {
|
|
253
|
+
return (entity.descriptions?.[normalizeLanguage(language)]?.value ?? entity.descriptions?.en?.value);
|
|
254
|
+
}
|
|
255
|
+
// Reads one string-valued claim.
|
|
256
|
+
// Читает один claim со строковым значением.
|
|
257
|
+
function getStringClaim(entity, property) {
|
|
258
|
+
return getClaimValues(entity, property).find((value) => typeof value === "string");
|
|
259
|
+
}
|
|
260
|
+
// Reads one monolingual text claim.
|
|
261
|
+
// Читает один monolingual text claim.
|
|
262
|
+
function getMonolingualTextClaim(entity, property) {
|
|
263
|
+
return getClaimValues(entity, property)
|
|
264
|
+
.map((value) => (typeof value === "object" ? value.text : undefined))
|
|
265
|
+
.find((value) => Boolean(value));
|
|
266
|
+
}
|
|
267
|
+
// Reads one Wikidata time claim and converts it to an ISO-like date.
|
|
268
|
+
// Читает один Wikidata time claim и преобразует его в ISO-like date.
|
|
269
|
+
function getTimeClaim(entity, property) {
|
|
270
|
+
const time = getClaimValues(entity, property)
|
|
271
|
+
.map((value) => (typeof value === "object" ? value.time : undefined))
|
|
272
|
+
.find((value) => Boolean(value));
|
|
273
|
+
return time?.replace(/^\+/, "").slice(0, 10);
|
|
274
|
+
}
|
|
275
|
+
// Reads item IDs from entity-valued claims.
|
|
276
|
+
// Читает item IDs из entity-valued claims.
|
|
277
|
+
function getItemClaimIds(entity, property) {
|
|
278
|
+
return getClaimValues(entity, property)
|
|
279
|
+
.map((value) => (typeof value === "object" ? value.id : undefined))
|
|
280
|
+
.filter((value) => Boolean(value));
|
|
281
|
+
}
|
|
282
|
+
// Reads raw claim values for one property.
|
|
283
|
+
// Читает raw claim values для одного свойства.
|
|
284
|
+
function getClaimValues(entity, property) {
|
|
285
|
+
return (entity.claims?.[property] ?? [])
|
|
286
|
+
.map((claim) => claim.mainsnak?.datavalue?.value)
|
|
287
|
+
.filter((value) => value !== undefined);
|
|
288
|
+
}
|
|
289
|
+
// Creates a Wikimedia image URL from a Commons filename claim.
|
|
290
|
+
// Создает Wikimedia image URL из Commons filename claim.
|
|
291
|
+
function getImage(entity) {
|
|
292
|
+
const filename = getStringClaim(entity, "P18");
|
|
293
|
+
return filename
|
|
294
|
+
? {
|
|
295
|
+
url: `https://commons.wikimedia.org/wiki/Special:FilePath/${encodeURIComponent(filename.replaceAll(" ", "_"))}`,
|
|
296
|
+
type: "poster",
|
|
297
|
+
source: PROVIDER_NAME,
|
|
298
|
+
}
|
|
299
|
+
: undefined;
|
|
300
|
+
}
|
|
301
|
+
// Sends provider JSON requests with Wikimedia-friendly headers.
|
|
302
|
+
// Отправляет JSON-запросы провайдера с Wikimedia-friendly headers.
|
|
303
|
+
function requestJson(config, url, context) {
|
|
304
|
+
return fetchJson({
|
|
305
|
+
provider: PROVIDER_NAME,
|
|
306
|
+
url,
|
|
307
|
+
context,
|
|
308
|
+
fetch: config.fetch,
|
|
309
|
+
init: {
|
|
310
|
+
headers: {
|
|
311
|
+
accept: "application/json",
|
|
312
|
+
"user-agent": config.userAgent,
|
|
313
|
+
},
|
|
314
|
+
},
|
|
315
|
+
});
|
|
316
|
+
}
|
|
317
|
+
// Checks that entity data has a stable ID.
|
|
318
|
+
// Проверяет, что entity data содержит стабильный ID.
|
|
319
|
+
function isKnownEntity(entity) {
|
|
320
|
+
return Boolean(entity.id);
|
|
321
|
+
}
|
|
322
|
+
// Keeps title matching conservative so generic search noise is dropped.
|
|
323
|
+
// Держит matching названия консервативным, чтобы отсечь шум generic search.
|
|
324
|
+
function isRelevantTitleMatch(title, queryTitle) {
|
|
325
|
+
const normalizedTitle = normalizeSearchText(title);
|
|
326
|
+
const normalizedQuery = normalizeSearchText(queryTitle);
|
|
327
|
+
return normalizedTitle.includes(normalizedQuery) || normalizedQuery.includes(normalizedTitle);
|
|
328
|
+
}
|
|
329
|
+
// Normalizes text for loose local comparisons.
|
|
330
|
+
// Нормализует текст для мягких локальных сравнений.
|
|
331
|
+
function normalizeSearchText(value) {
|
|
332
|
+
return value
|
|
333
|
+
.toLocaleLowerCase()
|
|
334
|
+
.replaceAll(/[^\p{L}\p{N}]+/gu, " ")
|
|
335
|
+
.trim();
|
|
336
|
+
}
|
|
337
|
+
// Extracts a four-digit year from an ISO-like date.
|
|
338
|
+
// Достает четырехзначный год из ISO-like date.
|
|
339
|
+
function getYear(date) {
|
|
340
|
+
const year = date?.slice(0, 4);
|
|
341
|
+
return year && /^\d{4}$/.test(year) ? Number(year) : undefined;
|
|
342
|
+
}
|
|
343
|
+
// Normalizes BCP-style language tags to Wikidata language codes.
|
|
344
|
+
// Нормализует BCP-style language tags в language codes Wikidata.
|
|
345
|
+
function normalizeLanguage(language) {
|
|
346
|
+
return language.split("-")[0]?.trim().toLocaleLowerCase() || DEFAULT_LANGUAGE;
|
|
347
|
+
}
|
|
348
|
+
// Escapes a literal string for the narrow SPARQL query used here.
|
|
349
|
+
// Экранирует literal string для узкого SPARQL-запроса здесь.
|
|
350
|
+
function escapeSparqlString(value) {
|
|
351
|
+
return value.replaceAll("\\", "\\\\").replaceAll('"', '\\"');
|
|
352
|
+
}
|
|
353
|
+
function trimTrailingSlash(value) {
|
|
354
|
+
return value.replace(/\/+$/, "");
|
|
355
|
+
}
|
|
356
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/wikidata/index.ts"],"names":[],"mappings":"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"}
|
package/package.json
ADDED
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@media-engine/providers",
|
|
3
|
+
"version": "0.1.0",
|
|
4
|
+
"description": "Provider implementations for Media Engine.",
|
|
5
|
+
"license": "MIT",
|
|
6
|
+
"homepage": "https://github.com/Yaneart/media-engine#readme",
|
|
7
|
+
"repository": {
|
|
8
|
+
"type": "git",
|
|
9
|
+
"url": "git+ssh://git@github.com:Yaneart/media-engine.git",
|
|
10
|
+
"directory": "packages/providers"
|
|
11
|
+
},
|
|
12
|
+
"bugs": {
|
|
13
|
+
"url": "https://github.com/Yaneart/media-engine/issues"
|
|
14
|
+
},
|
|
15
|
+
"keywords": [
|
|
16
|
+
"media",
|
|
17
|
+
"metadata",
|
|
18
|
+
"movies",
|
|
19
|
+
"series",
|
|
20
|
+
"anime",
|
|
21
|
+
"kinobd",
|
|
22
|
+
"cinemeta",
|
|
23
|
+
"imdb",
|
|
24
|
+
"shikimori",
|
|
25
|
+
"anilist",
|
|
26
|
+
"wikidata",
|
|
27
|
+
"no-token"
|
|
28
|
+
],
|
|
29
|
+
"type": "module",
|
|
30
|
+
"engines": {
|
|
31
|
+
"node": ">=20"
|
|
32
|
+
},
|
|
33
|
+
"sideEffects": false,
|
|
34
|
+
"main": "./dist/index.js",
|
|
35
|
+
"types": "./dist/index.d.ts",
|
|
36
|
+
"exports": {
|
|
37
|
+
".": {
|
|
38
|
+
"types": "./dist/index.d.ts",
|
|
39
|
+
"import": "./dist/index.js"
|
|
40
|
+
}
|
|
41
|
+
},
|
|
42
|
+
"files": [
|
|
43
|
+
"dist",
|
|
44
|
+
"!dist/**/*.test.d.ts",
|
|
45
|
+
"!dist/**/*.test.js",
|
|
46
|
+
"!dist/**/*.test.js.map",
|
|
47
|
+
"!dist/kodik",
|
|
48
|
+
"!dist/tmdb",
|
|
49
|
+
"README.md"
|
|
50
|
+
],
|
|
51
|
+
"publishConfig": {
|
|
52
|
+
"access": "public"
|
|
53
|
+
},
|
|
54
|
+
"dependencies": {
|
|
55
|
+
"@media-engine/core": "0.1.0"
|
|
56
|
+
},
|
|
57
|
+
"scripts": {
|
|
58
|
+
"build": "tsc -p tsconfig.json",
|
|
59
|
+
"typecheck": "tsc -p tsconfig.json --noEmit",
|
|
60
|
+
"test": "pnpm build && node --test dist/shared/http.test.js dist/kinobd/index.test.js dist/cinemeta/index.test.js dist/shikimori/index.test.js dist/anilist/index.test.js dist/wikidata/index.test.js dist/imdb-dataset/index.test.js dist/experimental-streaming/index.test.js dist/kinobd-streaming/index.test.js dist/flixhq-streaming/index.test.js"
|
|
61
|
+
}
|
|
62
|
+
}
|