@media-engine/core 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.
Files changed (87) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +295 -0
  3. package/dist/cache/index.d.ts +2 -0
  4. package/dist/cache/index.js +2 -0
  5. package/dist/cache/index.js.map +1 -0
  6. package/dist/cache/memory.d.ts +19 -0
  7. package/dist/cache/memory.js +83 -0
  8. package/dist/cache/memory.js.map +1 -0
  9. package/dist/cache/types.d.ts +9 -0
  10. package/dist/cache/types.js +2 -0
  11. package/dist/cache/types.js.map +1 -0
  12. package/dist/details/index.d.ts +1 -0
  13. package/dist/details/index.js +2 -0
  14. package/dist/details/index.js.map +1 -0
  15. package/dist/details/types.d.ts +19 -0
  16. package/dist/details/types.js +2 -0
  17. package/dist/details/types.js.map +1 -0
  18. package/dist/engine/engine.d.ts +29 -0
  19. package/dist/engine/engine.js +1007 -0
  20. package/dist/engine/engine.js.map +1 -0
  21. package/dist/engine/index.d.ts +2 -0
  22. package/dist/engine/index.js +2 -0
  23. package/dist/engine/index.js.map +1 -0
  24. package/dist/engine/types.d.ts +13 -0
  25. package/dist/engine/types.js +2 -0
  26. package/dist/engine/types.js.map +1 -0
  27. package/dist/errors/index.d.ts +1 -0
  28. package/dist/errors/index.js +2 -0
  29. package/dist/errors/index.js.map +1 -0
  30. package/dist/errors/types.d.ts +27 -0
  31. package/dist/errors/types.js +77 -0
  32. package/dist/errors/types.js.map +1 -0
  33. package/dist/index.d.ts +12 -0
  34. package/dist/index.js +7 -0
  35. package/dist/index.js.map +1 -0
  36. package/dist/media/index.d.ts +1 -0
  37. package/dist/media/index.js +2 -0
  38. package/dist/media/index.js.map +1 -0
  39. package/dist/media/types.d.ts +136 -0
  40. package/dist/media/types.js +2 -0
  41. package/dist/media/types.js.map +1 -0
  42. package/dist/merge/index.d.ts +2 -0
  43. package/dist/merge/index.js +2 -0
  44. package/dist/merge/index.js.map +1 -0
  45. package/dist/merge/strategy.d.ts +8 -0
  46. package/dist/merge/strategy.js +1168 -0
  47. package/dist/merge/strategy.js.map +1 -0
  48. package/dist/merge/types.d.ts +18 -0
  49. package/dist/merge/types.js +2 -0
  50. package/dist/merge/types.js.map +1 -0
  51. package/dist/providers/index.d.ts +2 -0
  52. package/dist/providers/index.js +2 -0
  53. package/dist/providers/index.js.map +1 -0
  54. package/dist/providers/registry.d.ts +9 -0
  55. package/dist/providers/registry.js +92 -0
  56. package/dist/providers/registry.js.map +1 -0
  57. package/dist/providers/types.d.ts +63 -0
  58. package/dist/providers/types.js +2 -0
  59. package/dist/providers/types.js.map +1 -0
  60. package/dist/response/index.d.ts +1 -0
  61. package/dist/response/index.js +2 -0
  62. package/dist/response/index.js.map +1 -0
  63. package/dist/response/types.d.ts +32 -0
  64. package/dist/response/types.js +2 -0
  65. package/dist/response/types.js.map +1 -0
  66. package/dist/search/index.d.ts +1 -0
  67. package/dist/search/index.js +2 -0
  68. package/dist/search/index.js.map +1 -0
  69. package/dist/search/types.d.ts +26 -0
  70. package/dist/search/types.js +2 -0
  71. package/dist/search/types.js.map +1 -0
  72. package/dist/streaming/index.d.ts +1 -0
  73. package/dist/streaming/index.js +2 -0
  74. package/dist/streaming/index.js.map +1 -0
  75. package/dist/streaming/types.d.ts +126 -0
  76. package/dist/streaming/types.js +2 -0
  77. package/dist/streaming/types.js.map +1 -0
  78. package/dist/testing/fixtures.d.ts +4 -0
  79. package/dist/testing/fixtures.js +101 -0
  80. package/dist/testing/fixtures.js.map +1 -0
  81. package/dist/testing/index.d.ts +2 -0
  82. package/dist/testing/index.js +3 -0
  83. package/dist/testing/index.js.map +1 -0
  84. package/dist/testing/providers.d.ts +26 -0
  85. package/dist/testing/providers.js +147 -0
  86. package/dist/testing/providers.js.map +1 -0
  87. package/package.json +51 -0
@@ -0,0 +1,101 @@
1
+ // Deterministic movie fixture used by core tests and examples.
2
+ // Детерминированная фикстура фильма для core-тестов и примеров.
3
+ export const sampleMovie = {
4
+ id: "sample-movie-interstellar",
5
+ type: "movie",
6
+ title: "Interstellar",
7
+ originalTitle: "Interstellar",
8
+ year: 2014,
9
+ releaseDate: "2014-11-07",
10
+ description: "A team travels through a wormhole in space.",
11
+ ids: {
12
+ imdb: "tt0816692",
13
+ tmdb: "157336",
14
+ },
15
+ genres: [{ name: "Science Fiction" }, { name: "Drama" }],
16
+ ratings: [
17
+ {
18
+ source: "imdb",
19
+ value: 8.7,
20
+ max: 10,
21
+ votes: 2_200_000,
22
+ },
23
+ ],
24
+ poster: {
25
+ url: "https://example.test/images/interstellar-poster.jpg",
26
+ type: "poster",
27
+ width: 1000,
28
+ height: 1500,
29
+ },
30
+ runtimeMinutes: 169,
31
+ status: "released",
32
+ };
33
+ // Deterministic series fixture used by core tests and examples.
34
+ // Детерминированная фикстура сериала для core-тестов и примеров.
35
+ export const sampleSeries = {
36
+ id: "sample-series-breaking-bad",
37
+ type: "series",
38
+ title: "Breaking Bad",
39
+ originalTitle: "Breaking Bad",
40
+ year: 2008,
41
+ releaseDate: "2008-01-20",
42
+ description: "A chemistry teacher turns to crime.",
43
+ ids: {
44
+ imdb: "tt0903747",
45
+ tmdb: "1396",
46
+ },
47
+ genres: [{ name: "Crime" }, { name: "Drama" }],
48
+ ratings: [
49
+ {
50
+ source: "imdb",
51
+ value: 9.5,
52
+ max: 10,
53
+ votes: 2_300_000,
54
+ },
55
+ ],
56
+ seasonsCount: 5,
57
+ episodesCount: 62,
58
+ seasons: [
59
+ {
60
+ number: 1,
61
+ title: "Season 1",
62
+ episodesCount: 7,
63
+ },
64
+ ],
65
+ status: "ended",
66
+ };
67
+ // Deterministic anime fixture used by core tests and examples.
68
+ // Детерминированная фикстура аниме для core-тестов и примеров.
69
+ export const sampleAnime = {
70
+ id: "sample-anime-fullmetal-alchemist-brotherhood",
71
+ type: "anime",
72
+ title: "Fullmetal Alchemist: Brotherhood",
73
+ originalTitle: "Hagane no Renkinjutsushi: Fullmetal Alchemist",
74
+ year: 2009,
75
+ airedOn: "2009-04-05",
76
+ releasedOn: "2010-07-04",
77
+ description: "Two brothers search for the Philosopher's Stone.",
78
+ ids: {
79
+ shikimori: "5114",
80
+ myAnimeList: "5114",
81
+ },
82
+ genres: [{ name: "Action" }, { name: "Adventure" }],
83
+ ratings: [
84
+ {
85
+ source: "myAnimeList",
86
+ value: 9.1,
87
+ max: 10,
88
+ votes: 2_000_000,
89
+ },
90
+ ],
91
+ animeKind: "tv",
92
+ episodesCount: 64,
93
+ episodes: [
94
+ {
95
+ episodeNumber: 1,
96
+ title: "Fullmetal Alchemist",
97
+ },
98
+ ],
99
+ status: "ended",
100
+ };
101
+ //# sourceMappingURL=fixtures.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fixtures.js","sourceRoot":"","sources":["../../src/testing/fixtures.ts"],"names":[],"mappings":"AAEA,+DAA+D;AAC/D,gEAAgE;AAChE,MAAM,CAAC,MAAM,WAAW,GAAiB;IACvC,EAAE,EAAE,2BAA2B;IAC/B,IAAI,EAAE,OAAO;IACb,KAAK,EAAE,cAAc;IACrB,aAAa,EAAE,cAAc;IAC7B,IAAI,EAAE,IAAI;IACV,WAAW,EAAE,YAAY;IACzB,WAAW,EAAE,6CAA6C;IAC1D,GAAG,EAAE;QACH,IAAI,EAAE,WAAW;QACjB,IAAI,EAAE,QAAQ;KACf;IACD,MAAM,EAAE,CAAC,EAAE,IAAI,EAAE,iBAAiB,EAAE,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC;IACxD,OAAO,EAAE;QACP;YACE,MAAM,EAAE,MAAM;YACd,KAAK,EAAE,GAAG;YACV,GAAG,EAAE,EAAE;YACP,KAAK,EAAE,SAAS;SACjB;KACF;IACD,MAAM,EAAE;QACN,GAAG,EAAE,qDAAqD;QAC1D,IAAI,EAAE,QAAQ;QACd,KAAK,EAAE,IAAI;QACX,MAAM,EAAE,IAAI;KACb;IACD,cAAc,EAAE,GAAG;IACnB,MAAM,EAAE,UAAU;CACnB,CAAC;AAEF,gEAAgE;AAChE,iEAAiE;AACjE,MAAM,CAAC,MAAM,YAAY,GAAkB;IACzC,EAAE,EAAE,4BAA4B;IAChC,IAAI,EAAE,QAAQ;IACd,KAAK,EAAE,cAAc;IACrB,aAAa,EAAE,cAAc;IAC7B,IAAI,EAAE,IAAI;IACV,WAAW,EAAE,YAAY;IACzB,WAAW,EAAE,qCAAqC;IAClD,GAAG,EAAE;QACH,IAAI,EAAE,WAAW;QACjB,IAAI,EAAE,MAAM;KACb;IACD,MAAM,EAAE,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC;IAC9C,OAAO,EAAE;QACP;YACE,MAAM,EAAE,MAAM;YACd,KAAK,EAAE,GAAG;YACV,GAAG,EAAE,EAAE;YACP,KAAK,EAAE,SAAS;SACjB;KACF;IACD,YAAY,EAAE,CAAC;IACf,aAAa,EAAE,EAAE;IACjB,OAAO,EAAE;QACP;YACE,MAAM,EAAE,CAAC;YACT,KAAK,EAAE,UAAU;YACjB,aAAa,EAAE,CAAC;SACjB;KACF;IACD,MAAM,EAAE,OAAO;CAChB,CAAC;AAEF,+DAA+D;AAC/D,+DAA+D;AAC/D,MAAM,CAAC,MAAM,WAAW,GAAiB;IACvC,EAAE,EAAE,8CAA8C;IAClD,IAAI,EAAE,OAAO;IACb,KAAK,EAAE,kCAAkC;IACzC,aAAa,EAAE,+CAA+C;IAC9D,IAAI,EAAE,IAAI;IACV,OAAO,EAAE,YAAY;IACrB,UAAU,EAAE,YAAY;IACxB,WAAW,EAAE,kDAAkD;IAC/D,GAAG,EAAE;QACH,SAAS,EAAE,MAAM;QACjB,WAAW,EAAE,MAAM;KACpB;IACD,MAAM,EAAE,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,CAAC;IACnD,OAAO,EAAE;QACP;YACE,MAAM,EAAE,aAAa;YACrB,KAAK,EAAE,GAAG;YACV,GAAG,EAAE,EAAE;YACP,KAAK,EAAE,SAAS;SACjB;KACF;IACD,SAAS,EAAE,IAAI;IACf,aAAa,EAAE,EAAE;IACjB,QAAQ,EAAE;QACR;YACE,aAAa,EAAE,CAAC;YAChB,KAAK,EAAE,qBAAqB;SAC7B;KACF;IACD,MAAM,EAAE,OAAO;CAChB,CAAC"}
@@ -0,0 +1,2 @@
1
+ export * from "./fixtures.js";
2
+ export * from "./providers.js";
@@ -0,0 +1,3 @@
1
+ export * from "./fixtures.js";
2
+ export * from "./providers.js";
3
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/testing/index.ts"],"names":[],"mappings":"AAAA,cAAc,eAAe,CAAC;AAC9B,cAAc,gBAAgB,CAAC"}
@@ -0,0 +1,26 @@
1
+ import { type ProviderErrorCode } from "../errors/index.js";
2
+ import type { MediaDetails, MediaItem } from "../media/index.js";
3
+ import type { MediaProvider, ProviderCapabilities, ProviderContext, ProviderDetailsQuery, ProviderDetailsResult, ProviderSearchQuery, ProviderSearchResult } from "../providers/index.js";
4
+ export interface MockProviderOptions {
5
+ name?: string;
6
+ version?: string;
7
+ capabilities?: Partial<ProviderCapabilities>;
8
+ searchResults?: ProviderSearchResult[];
9
+ detailsResult?: ProviderDetailsResult | null;
10
+ search?: (query: ProviderSearchQuery, context: ProviderContext) => Promise<ProviderSearchResult[]> | ProviderSearchResult[];
11
+ getDetails?: (query: ProviderDetailsQuery, context: ProviderContext) => Promise<ProviderDetailsResult | null> | ProviderDetailsResult | null;
12
+ }
13
+ export interface FailingProviderOptions extends MockProviderOptions {
14
+ code?: ProviderErrorCode;
15
+ message?: string;
16
+ retryable?: boolean;
17
+ }
18
+ export interface TimeoutProviderOptions extends MockProviderOptions {
19
+ delayMs?: number;
20
+ }
21
+ export declare function createMockProvider(options?: MockProviderOptions): MediaProvider;
22
+ export declare function createSuccessProvider(options?: MockProviderOptions): MediaProvider;
23
+ export declare function createFailingProvider(options?: FailingProviderOptions): MediaProvider;
24
+ export declare function createTimeoutProvider(options?: TimeoutProviderOptions): MediaProvider;
25
+ export declare function createSearchResult(provider: string, item?: MediaItem | MediaDetails): ProviderSearchResult;
26
+ export declare function createDetailsResult(provider: string, details?: MediaDetails): ProviderDetailsResult;
@@ -0,0 +1,147 @@
1
+ import { ProviderError } from "../errors/index.js";
2
+ import { sampleMovie } from "./fixtures.js";
3
+ // Creates a deterministic metadata provider for tests.
4
+ // Создает детерминированный metadata-провайдер для тестов.
5
+ export function createMockProvider(options = {}) {
6
+ const providerName = options.name ?? "mock-provider";
7
+ const detailsResult = options.detailsResult ?? createDetailsResult(providerName, sampleMovie);
8
+ const searchResults = options.searchResults ?? [createSearchResult(providerName, sampleMovie)];
9
+ return {
10
+ name: providerName,
11
+ version: options.version,
12
+ kind: "metadata",
13
+ capabilities: createCapabilities(options.capabilities),
14
+ async search(query, context) {
15
+ return options.search ? await options.search(query, context) : searchResults;
16
+ },
17
+ async getDetails(query, context) {
18
+ return options.getDetails ? await options.getDetails(query, context) : detailsResult;
19
+ },
20
+ };
21
+ }
22
+ // Creates a mock provider that always succeeds.
23
+ // Создает mock-провайдер, который всегда успешно отвечает.
24
+ export function createSuccessProvider(options = {}) {
25
+ return createMockProvider({
26
+ name: "success-provider",
27
+ ...options,
28
+ });
29
+ }
30
+ // Creates a mock provider that always fails with ProviderError.
31
+ // Создает mock-провайдер, который всегда падает с ProviderError.
32
+ export function createFailingProvider(options = {}) {
33
+ const providerName = options.name ?? "failing-provider";
34
+ const error = new ProviderError({
35
+ provider: providerName,
36
+ code: options.code ?? "PROVIDER_ERROR",
37
+ message: options.message ?? "Mock provider failed.",
38
+ retryable: options.retryable ?? false,
39
+ });
40
+ return createMockProvider({
41
+ name: providerName,
42
+ capabilities: options.capabilities,
43
+ async search() {
44
+ throw error;
45
+ },
46
+ async getDetails() {
47
+ throw error;
48
+ },
49
+ });
50
+ }
51
+ // Creates a mock provider that resolves only after a delay.
52
+ // Создает mock-провайдер, который отвечает только после задержки.
53
+ export function createTimeoutProvider(options = {}) {
54
+ const providerName = options.name ?? "timeout-provider";
55
+ const delayMs = options.delayMs ?? 60_000;
56
+ return createMockProvider({
57
+ name: providerName,
58
+ capabilities: options.capabilities,
59
+ async search(_, context) {
60
+ await delay(delayMs, context);
61
+ return options.searchResults ?? [createSearchResult(providerName, sampleMovie)];
62
+ },
63
+ async getDetails(_, context) {
64
+ await delay(delayMs, context);
65
+ return options.detailsResult ?? createDetailsResult(providerName, sampleMovie);
66
+ },
67
+ });
68
+ }
69
+ // Creates a provider search result from a media item or details fixture.
70
+ // Создает search result провайдера из media item или details fixture.
71
+ export function createSearchResult(provider, item = sampleMovie) {
72
+ return {
73
+ provider,
74
+ item: {
75
+ id: item.id,
76
+ type: item.type,
77
+ title: item.title,
78
+ originalTitle: item.originalTitle,
79
+ alternativeTitles: item.alternativeTitles,
80
+ year: item.year,
81
+ releaseDate: item.releaseDate,
82
+ description: item.description,
83
+ shortDescription: item.shortDescription,
84
+ poster: item.poster,
85
+ backdrop: item.backdrop,
86
+ genres: item.genres,
87
+ ratings: item.ratings,
88
+ ids: item.ids,
89
+ },
90
+ source: {
91
+ provider,
92
+ ids: item.ids,
93
+ },
94
+ };
95
+ }
96
+ // Creates a provider details result from a details fixture.
97
+ // Создает details result провайдера из details fixture.
98
+ export function createDetailsResult(provider, details = sampleMovie) {
99
+ return {
100
+ provider,
101
+ details,
102
+ source: {
103
+ provider,
104
+ ids: details.ids,
105
+ },
106
+ };
107
+ }
108
+ // Builds provider capabilities with deterministic defaults.
109
+ // Создает capabilities провайдера с детерминированными значениями по умолчанию.
110
+ function createCapabilities(overrides = {}) {
111
+ return {
112
+ mediaTypes: overrides.mediaTypes ?? ["movie", "series", "anime"],
113
+ search: {
114
+ byTitle: overrides.search?.byTitle ?? true,
115
+ byExternalIds: overrides.search?.byExternalIds ?? [
116
+ "imdb",
117
+ "tmdb",
118
+ "shikimori",
119
+ "myAnimeList",
120
+ ],
121
+ },
122
+ details: {
123
+ byExternalIds: overrides.details?.byExternalIds ?? [
124
+ "imdb",
125
+ "tmdb",
126
+ "shikimori",
127
+ "myAnimeList",
128
+ ],
129
+ },
130
+ features: overrides.features,
131
+ };
132
+ }
133
+ // Waits for a delay and rejects if the provider signal is aborted.
134
+ // Ждет задержку и отклоняет promise, если signal провайдера отменен.
135
+ function delay(delayMs, context) {
136
+ if (context.signal?.aborted) {
137
+ return Promise.reject(context.signal.reason);
138
+ }
139
+ return new Promise((resolve, reject) => {
140
+ const timeout = setTimeout(resolve, delayMs);
141
+ context.signal?.addEventListener("abort", () => {
142
+ clearTimeout(timeout);
143
+ reject(context.signal?.reason);
144
+ }, { once: true });
145
+ });
146
+ }
147
+ //# sourceMappingURL=providers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"providers.js","sourceRoot":"","sources":["../../src/testing/providers.ts"],"names":[],"mappings":"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"}
package/package.json ADDED
@@ -0,0 +1,51 @@
1
+ {
2
+ "name": "@media-engine/core",
3
+ "version": "0.1.0",
4
+ "description": "Core TypeScript engine 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/core"
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
+ "shikimori"
22
+ ],
23
+ "type": "module",
24
+ "engines": {
25
+ "node": ">=20"
26
+ },
27
+ "sideEffects": false,
28
+ "main": "./dist/index.js",
29
+ "types": "./dist/index.d.ts",
30
+ "exports": {
31
+ ".": {
32
+ "types": "./dist/index.d.ts",
33
+ "import": "./dist/index.js"
34
+ }
35
+ },
36
+ "files": [
37
+ "dist",
38
+ "!dist/**/*.test.d.ts",
39
+ "!dist/**/*.test.js",
40
+ "!dist/**/*.test.js.map",
41
+ "README.md"
42
+ ],
43
+ "publishConfig": {
44
+ "access": "public"
45
+ },
46
+ "scripts": {
47
+ "build": "tsc -p tsconfig.json",
48
+ "typecheck": "tsc -p tsconfig.json --noEmit",
49
+ "test": "pnpm build && node --test dist/providers/registry.test.js dist/errors/types.test.js dist/merge/strategy.test.js dist/cache/memory.test.js dist/engine/engine.test.js dist/testing/providers.test.js dist/streaming/types.test.js"
50
+ }
51
+ }