@media-engine/core 1.1.0 → 1.3.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.
|
@@ -20,15 +20,40 @@ export function selectStreamingProviders(providers, query) {
|
|
|
20
20
|
// Merges availability results without hiding provider attribution.
|
|
21
21
|
// Объединяет availability-результаты, не скрывая атрибуцию провайдеров.
|
|
22
22
|
export function mergeAvailabilityResults(query, results) {
|
|
23
|
+
const episodes = mergeEpisodeAvailability(results);
|
|
24
|
+
const seasons = createSeasonAvailability(episodes);
|
|
23
25
|
return {
|
|
24
26
|
query,
|
|
25
27
|
item: results.find((result) => result.item)?.item,
|
|
26
|
-
|
|
28
|
+
...(seasons ? { seasons } : {}),
|
|
29
|
+
episodes,
|
|
27
30
|
options: uniqueBy(results.flatMap((result) => result.options), (option) => `${option.provider}:${option.id}`),
|
|
28
31
|
sourceProviders: uniqueBy(results.flatMap((result) => result.sourceProviders), (source) => createStreamingSourceKey(source)),
|
|
29
32
|
checkedAt: new Date().toISOString(),
|
|
30
33
|
};
|
|
31
34
|
}
|
|
35
|
+
// Groups a normalized flat episode catalog into selectable seasons.
|
|
36
|
+
// Группирует нормализованный плоский каталог эпизодов в выбираемые сезоны.
|
|
37
|
+
function createSeasonAvailability(episodes) {
|
|
38
|
+
const seasons = new Map();
|
|
39
|
+
for (const episode of episodes ?? []) {
|
|
40
|
+
if (episode.seasonNumber === undefined)
|
|
41
|
+
continue;
|
|
42
|
+
const entries = seasons.get(episode.seasonNumber) ?? [];
|
|
43
|
+
entries.push(episode);
|
|
44
|
+
seasons.set(episode.seasonNumber, entries);
|
|
45
|
+
}
|
|
46
|
+
return seasons.size
|
|
47
|
+
? [...seasons.entries()]
|
|
48
|
+
.sort(([left], [right]) => left - right)
|
|
49
|
+
.map(([seasonNumber, seasonEpisodes]) => ({
|
|
50
|
+
seasonNumber,
|
|
51
|
+
episodes: seasonEpisodes.sort((left, right) => (left.episodeNumber ?? Number.MAX_SAFE_INTEGER) -
|
|
52
|
+
(right.episodeNumber ?? Number.MAX_SAFE_INTEGER)),
|
|
53
|
+
episodesCount: seasonEpisodes.length,
|
|
54
|
+
}))
|
|
55
|
+
: undefined;
|
|
56
|
+
}
|
|
32
57
|
// Keeps cached direct links from outliving the earliest advertised expiration.
|
|
33
58
|
// Не позволяет кешированным прямым ссылкам пережить ближайший заявленный срок действия.
|
|
34
59
|
export function createAvailabilityCacheOptions(availability) {
|
|
@@ -63,6 +88,7 @@ function mergeEpisodeAvailability(results) {
|
|
|
63
88
|
const episodesByKey = new Map();
|
|
64
89
|
for (const episode of results.flatMap((result) => [
|
|
65
90
|
...(result.episodes ?? []),
|
|
91
|
+
...(result.seasons?.flatMap((season) => season.episodes) ?? []),
|
|
66
92
|
...createEpisodeAvailabilityFromOptions(result.options),
|
|
67
93
|
])) {
|
|
68
94
|
const key = createEpisodeKey(episode);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"availability.js","sourceRoot":"","sources":["../../src/engine/availability.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"availability.js","sourceRoot":"","sources":["../../src/engine/availability.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
package/dist/index.js
CHANGED
|
@@ -34,6 +34,11 @@ export interface StreamEpisodeAvailability extends StreamEpisodeRef {
|
|
|
34
34
|
title?: string;
|
|
35
35
|
options: StreamOption[];
|
|
36
36
|
}
|
|
37
|
+
export interface StreamSeasonAvailability {
|
|
38
|
+
seasonNumber: number;
|
|
39
|
+
episodes: StreamEpisodeAvailability[];
|
|
40
|
+
episodesCount: number;
|
|
41
|
+
}
|
|
37
42
|
export type PlayerSourceKind = "embed" | "hls" | "mp4" | "external";
|
|
38
43
|
export interface PlayerSource {
|
|
39
44
|
kind: PlayerSourceKind;
|
|
@@ -95,13 +100,14 @@ export interface StreamingProviderSource {
|
|
|
95
100
|
export interface MediaAvailability {
|
|
96
101
|
query: StreamQuery;
|
|
97
102
|
item?: StreamMediaItem;
|
|
103
|
+
seasons?: StreamSeasonAvailability[];
|
|
98
104
|
episodes?: StreamEpisodeAvailability[];
|
|
99
105
|
options: StreamOption[];
|
|
100
106
|
sourceProviders: StreamingProviderSource[];
|
|
101
107
|
checkedAt: string;
|
|
102
108
|
meta?: ResponseMeta;
|
|
103
109
|
}
|
|
104
|
-
export type StreamingProviderFeature = "embed" | "hls" | "mp4" | "external" | "translations" | "subtitles" | "qualities" | "episode_mapping" | "headers";
|
|
110
|
+
export type StreamingProviderFeature = "embed" | "hls" | "mp4" | "external" | "translations" | "subtitles" | "qualities" | "episode_mapping" | "episode_catalog" | "headers";
|
|
105
111
|
export interface StreamingProviderCapabilities {
|
|
106
112
|
mediaTypes: MediaType[];
|
|
107
113
|
lookup: {
|