@media-engine/core 0.1.0 → 1.0.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 (121) hide show
  1. package/README.md +40 -255
  2. package/README.ru.md +80 -0
  3. package/dist/cache/memory.d.ts +5 -0
  4. package/dist/cache/memory.js +43 -3
  5. package/dist/cache/memory.js.map +1 -1
  6. package/dist/cache/types.d.ts +2 -0
  7. package/dist/details/types.d.ts +6 -0
  8. package/dist/engine/availability.d.ts +6 -0
  9. package/dist/engine/availability.js +137 -0
  10. package/dist/engine/availability.js.map +1 -0
  11. package/dist/engine/circuit-breaker.d.ts +37 -0
  12. package/dist/engine/circuit-breaker.js +174 -0
  13. package/dist/engine/circuit-breaker.js.map +1 -0
  14. package/dist/engine/concurrency-limiter.d.ts +13 -0
  15. package/dist/engine/concurrency-limiter.js +109 -0
  16. package/dist/engine/concurrency-limiter.js.map +1 -0
  17. package/dist/engine/engine.d.ts +15 -5
  18. package/dist/engine/engine.js +510 -848
  19. package/dist/engine/engine.js.map +1 -1
  20. package/dist/engine/in-flight.d.ts +15 -0
  21. package/dist/engine/in-flight.js +80 -0
  22. package/dist/engine/in-flight.js.map +1 -0
  23. package/dist/engine/operation.d.ts +7 -0
  24. package/dist/engine/operation.js +49 -0
  25. package/dist/engine/operation.js.map +1 -0
  26. package/dist/engine/provider-calls.d.ts +52 -0
  27. package/dist/engine/provider-calls.js +262 -0
  28. package/dist/engine/provider-calls.js.map +1 -0
  29. package/dist/engine/query.d.ts +26 -0
  30. package/dist/engine/query.js +430 -0
  31. package/dist/engine/query.js.map +1 -0
  32. package/dist/engine/response-meta.d.ts +15 -0
  33. package/dist/engine/response-meta.js +33 -0
  34. package/dist/engine/response-meta.js.map +1 -0
  35. package/dist/engine/runtime.d.ts +5 -0
  36. package/dist/engine/runtime.js +48 -0
  37. package/dist/engine/runtime.js.map +1 -0
  38. package/dist/engine/search-discovery.d.ts +3 -0
  39. package/dist/engine/search-discovery.js +35 -0
  40. package/dist/engine/search-discovery.js.map +1 -0
  41. package/dist/engine/search-enrichment-shared.d.ts +23 -0
  42. package/dist/engine/search-enrichment-shared.js +68 -0
  43. package/dist/engine/search-enrichment-shared.js.map +1 -0
  44. package/dist/engine/search-enrichment.d.ts +42 -0
  45. package/dist/engine/search-enrichment.js +150 -0
  46. package/dist/engine/search-enrichment.js.map +1 -0
  47. package/dist/engine/search-identity-snapshot.d.ts +15 -0
  48. package/dist/engine/search-identity-snapshot.js +101 -0
  49. package/dist/engine/search-identity-snapshot.js.map +1 -0
  50. package/dist/engine/search-outcomes.d.ts +32 -0
  51. package/dist/engine/search-outcomes.js +118 -0
  52. package/dist/engine/search-outcomes.js.map +1 -0
  53. package/dist/engine/search-poster-enrichment.d.ts +31 -0
  54. package/dist/engine/search-poster-enrichment.js +93 -0
  55. package/dist/engine/search-poster-enrichment.js.map +1 -0
  56. package/dist/engine/search-result-freeze.d.ts +13 -0
  57. package/dist/engine/search-result-freeze.js +155 -0
  58. package/dist/engine/search-result-freeze.js.map +1 -0
  59. package/dist/engine/stale-fallback.d.ts +11 -0
  60. package/dist/engine/stale-fallback.js +60 -0
  61. package/dist/engine/stale-fallback.js.map +1 -0
  62. package/dist/engine/timeout-budget.d.ts +7 -0
  63. package/dist/engine/timeout-budget.js +31 -0
  64. package/dist/engine/timeout-budget.js.map +1 -0
  65. package/dist/engine/torrents.d.ts +22 -0
  66. package/dist/engine/torrents.js +188 -0
  67. package/dist/engine/torrents.js.map +1 -0
  68. package/dist/engine/types.d.ts +35 -0
  69. package/dist/errors/types.d.ts +1 -1
  70. package/dist/errors/types.js.map +1 -1
  71. package/dist/index.d.ts +2 -1
  72. package/dist/index.js +1 -1
  73. package/dist/index.js.map +1 -1
  74. package/dist/media/types.d.ts +1 -1
  75. package/dist/merge/details-identity.d.ts +5 -0
  76. package/dist/merge/details-identity.js +63 -0
  77. package/dist/merge/details-identity.js.map +1 -0
  78. package/dist/merge/diversity.d.ts +15 -0
  79. package/dist/merge/diversity.js +52 -0
  80. package/dist/merge/diversity.js.map +1 -0
  81. package/dist/merge/fields.d.ts +25 -0
  82. package/dist/merge/fields.js +364 -0
  83. package/dist/merge/fields.js.map +1 -0
  84. package/dist/merge/grouping.d.ts +3 -0
  85. package/dist/merge/grouping.js +143 -0
  86. package/dist/merge/grouping.js.map +1 -0
  87. package/dist/merge/identity.d.ts +5 -0
  88. package/dist/merge/identity.js +21 -0
  89. package/dist/merge/identity.js.map +1 -0
  90. package/dist/merge/internal.d.ts +22 -0
  91. package/dist/merge/internal.js +15 -0
  92. package/dist/merge/internal.js.map +1 -0
  93. package/dist/merge/media-type.d.ts +5 -0
  94. package/dist/merge/media-type.js +15 -0
  95. package/dist/merge/media-type.js.map +1 -0
  96. package/dist/merge/priority.d.ts +9 -0
  97. package/dist/merge/priority.js +63 -0
  98. package/dist/merge/priority.js.map +1 -0
  99. package/dist/merge/scoring.d.ts +15 -0
  100. package/dist/merge/scoring.js +364 -0
  101. package/dist/merge/scoring.js.map +1 -0
  102. package/dist/merge/strategy.js +66 -955
  103. package/dist/merge/strategy.js.map +1 -1
  104. package/dist/merge/title.d.ts +4 -0
  105. package/dist/merge/title.js +22 -0
  106. package/dist/merge/title.js.map +1 -0
  107. package/dist/providers/registry.d.ts +4 -2
  108. package/dist/providers/registry.js +11 -2
  109. package/dist/providers/registry.js.map +1 -1
  110. package/dist/providers/types.d.ts +4 -0
  111. package/dist/response/types.d.ts +21 -0
  112. package/dist/search/types.d.ts +34 -0
  113. package/dist/testing/providers.js +2 -0
  114. package/dist/testing/providers.js.map +1 -1
  115. package/dist/torrent/index.d.ts +1 -0
  116. package/dist/torrent/index.js +2 -0
  117. package/dist/torrent/index.js.map +1 -0
  118. package/dist/torrent/types.d.ts +132 -0
  119. package/dist/torrent/types.js +2 -0
  120. package/dist/torrent/types.js.map +1 -0
  121. package/package.json +13 -4
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fields.js","sourceRoot":"","sources":["../../src/merge/fields.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import type { ProviderSearchResult } from "../providers/index.js";
2
+ import type { SearchGroup } from "./internal.js";
3
+ export declare function groupSearchResults(results: ProviderSearchResult[]): SearchGroup[];
@@ -0,0 +1,143 @@
1
+ import { hasSharedStrongId, hasStrongIdConflict } from "./identity.js";
2
+ import { STRONG_ID_KEYS } from "./internal.js";
3
+ import { exactTitleKey, normalizeTitle, titleCandidates } from "./title.js";
4
+ // Groups search results by exact IDs first, then by normalized title/year/type.
5
+ // Группирует результаты сначала по точным ID, затем по нормализованным title/year/type.
6
+ export function groupSearchResults(results) {
7
+ const groups = [];
8
+ const groupsByStrongId = new Map();
9
+ const groupsByTitleYearType = new Map();
10
+ results.forEach((result, index) => {
11
+ const entry = { result, index };
12
+ const exactIdGroupIndex = findIndexedGroup(strongIdIndexKeys(result.item), groupsByStrongId, groups, (group) => canJoinByExactId(entry, group));
13
+ if (exactIdGroupIndex !== undefined) {
14
+ const exactIdGroup = groups[exactIdGroupIndex];
15
+ exactIdGroup.entries.push(entry);
16
+ exactIdGroup.matchStrength = "exact_id";
17
+ indexSearchEntry(entry, exactIdGroupIndex, groupsByStrongId, groupsByTitleYearType);
18
+ return;
19
+ }
20
+ const titleGroupIndex = findIndexedGroup(titleYearTypeIndexKeys(result.item), groupsByTitleYearType, groups, (group) => canJoinByTitleYearType(entry, group));
21
+ if (titleGroupIndex !== undefined) {
22
+ const titleGroup = groups[titleGroupIndex];
23
+ const isExactTitleMatch = hasExactTitleYearTypeMatch(entry, titleGroup);
24
+ titleGroup.entries.push(entry);
25
+ titleGroup.matchStrength =
26
+ titleGroup.matchStrength === "exact_title_year_type" || isExactTitleMatch
27
+ ? "exact_title_year_type"
28
+ : "normalized_title_year_type";
29
+ indexSearchEntry(entry, titleGroupIndex, groupsByStrongId, groupsByTitleYearType);
30
+ return;
31
+ }
32
+ const groupIndex = groups.length;
33
+ groups.push({ entries: [entry], matchStrength: "none" });
34
+ indexSearchEntry(entry, groupIndex, groupsByStrongId, groupsByTitleYearType);
35
+ });
36
+ return groups;
37
+ }
38
+ function findIndexedGroup(keys, index, groups, matches) {
39
+ const candidates = new Set();
40
+ for (const key of keys) {
41
+ for (const groupIndex of index.get(key) ?? []) {
42
+ candidates.add(groupIndex);
43
+ }
44
+ }
45
+ return [...candidates]
46
+ .sort((left, right) => left - right)
47
+ .find((groupIndex) => {
48
+ const group = groups[groupIndex];
49
+ return group ? matches(group) : false;
50
+ });
51
+ }
52
+ function indexSearchEntry(entry, groupIndex, groupsByStrongId, groupsByTitleYearType) {
53
+ addGroupIndex(groupsByStrongId, strongIdIndexKeys(entry.result.item), groupIndex);
54
+ addGroupIndex(groupsByTitleYearType, titleYearTypeIndexKeys(entry.result.item), groupIndex);
55
+ }
56
+ function addGroupIndex(index, keys, groupIndex) {
57
+ for (const key of keys) {
58
+ const groupIndexes = index.get(key);
59
+ if (!groupIndexes) {
60
+ index.set(key, [groupIndex]);
61
+ }
62
+ else if (groupIndexes.at(-1) !== groupIndex && !groupIndexes.includes(groupIndex)) {
63
+ groupIndexes.push(groupIndex);
64
+ }
65
+ }
66
+ }
67
+ function strongIdIndexKeys(item) {
68
+ return STRONG_ID_KEYS.flatMap((key) => {
69
+ const value = item.ids?.[key];
70
+ return value ? [`${item.type}:${key}:${value}`] : [];
71
+ });
72
+ }
73
+ function titleYearTypeIndexKeys(item) {
74
+ if (item.year === undefined) {
75
+ return [];
76
+ }
77
+ const typeKey = item.type === "anime" || item.type === "series" ? "series-or-anime" : item.type;
78
+ return [...normalizedTitleCandidateSet(item)].map((title) => `${typeKey}:${item.year}:${title}`);
79
+ }
80
+ // Checks whether an entry can join a group through a shared strong external ID.
81
+ // Проверяет, может ли entry войти в группу по общему сильному внешнему ID.
82
+ function canJoinByExactId(entry, group) {
83
+ return group.entries.some((groupEntry) => {
84
+ return (groupEntry.result.item.type === entry.result.item.type &&
85
+ hasSharedStrongId(groupEntry.result.item.ids, entry.result.item.ids));
86
+ });
87
+ }
88
+ // Checks whether an entry can join a group by normalized title, year, and type.
89
+ // Проверяет, может ли entry войти в группу по нормализованным title, year и type.
90
+ function canJoinByTitleYearType(entry, group) {
91
+ const item = entry.result.item;
92
+ return group.entries.some((groupEntry) => {
93
+ const groupItem = groupEntry.result.item;
94
+ return (areSearchTypesCompatible(item.type, groupItem.type) &&
95
+ item.year !== undefined &&
96
+ item.year === groupItem.year &&
97
+ hasSharedNormalizedTitleCandidate(item, groupItem) &&
98
+ !hasStrongIdConflict(item.ids, groupItem.ids));
99
+ });
100
+ }
101
+ // Checks whether a title/year/type match is exact before normalization.
102
+ // Проверяет, является ли совпадение title/year/type точным до нормализации.
103
+ function hasExactTitleYearTypeMatch(entry, group) {
104
+ const item = entry.result.item;
105
+ return group.entries.some((groupEntry) => {
106
+ const groupItem = groupEntry.result.item;
107
+ return (areSearchTypesCompatible(item.type, groupItem.type) &&
108
+ item.year !== undefined &&
109
+ item.year === groupItem.year &&
110
+ hasSharedExactTitleCandidate(item, groupItem));
111
+ });
112
+ }
113
+ // Treats anime and series as compatible only for strong title/year grouping.
114
+ // Считает anime и series совместимыми только для сильной группировки по title/year.
115
+ function areSearchTypesCompatible(left, right) {
116
+ return (left === right ||
117
+ (left === "anime" && right === "series") ||
118
+ (left === "series" && right === "anime"));
119
+ }
120
+ // Checks title/original/alternative candidates after normalization.
121
+ // Проверяет title/original/alternative кандидаты после нормализации.
122
+ function hasSharedNormalizedTitleCandidate(left, right) {
123
+ const leftTitles = normalizedTitleCandidateSet(left);
124
+ if (leftTitles.size === 0) {
125
+ return false;
126
+ }
127
+ return titleCandidates(right).some((title) => leftTitles.has(normalizeTitle(title)));
128
+ }
129
+ // Checks title/original/alternative candidates without accent/case normalization.
130
+ // Проверяет title/original/alternative кандидаты без accent/case нормализации.
131
+ function hasSharedExactTitleCandidate(left, right) {
132
+ const leftTitles = new Set(titleCandidates(left).map(exactTitleKey).filter(Boolean));
133
+ if (leftTitles.size === 0) {
134
+ return false;
135
+ }
136
+ return titleCandidates(right).some((title) => leftTitles.has(exactTitleKey(title)));
137
+ }
138
+ // Builds normalized non-empty title candidate set for grouping.
139
+ // Собирает набор нормализованных непустых title candidates для группировки.
140
+ function normalizedTitleCandidateSet(item) {
141
+ return new Set(titleCandidates(item).map(normalizeTitle).filter(Boolean));
142
+ }
143
+ //# sourceMappingURL=grouping.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"grouping.js","sourceRoot":"","sources":["../../src/merge/grouping.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,MAAM,eAAe,CAAC;AAEvE,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAC/C,OAAO,EAAE,aAAa,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAE5E,gFAAgF;AAChF,wFAAwF;AACxF,MAAM,UAAU,kBAAkB,CAAC,OAA+B;IAChE,MAAM,MAAM,GAAkB,EAAE,CAAC;IACjC,MAAM,gBAAgB,GAAG,IAAI,GAAG,EAAoB,CAAC;IACrD,MAAM,qBAAqB,GAAG,IAAI,GAAG,EAAoB,CAAC;IAE1D,OAAO,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE;QAChC,MAAM,KAAK,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC;QAChC,MAAM,iBAAiB,GAAG,gBAAgB,CACxC,iBAAiB,CAAC,MAAM,CAAC,IAAI,CAAC,EAC9B,gBAAgB,EAChB,MAAM,EACN,CAAC,KAAK,EAAE,EAAE,CAAC,gBAAgB,CAAC,KAAK,EAAE,KAAK,CAAC,CAC1C,CAAC;QAEF,IAAI,iBAAiB,KAAK,SAAS,EAAE,CAAC;YACpC,MAAM,YAAY,GAAG,MAAM,CAAC,iBAAiB,CAAE,CAAC;YAChD,YAAY,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACjC,YAAY,CAAC,aAAa,GAAG,UAAU,CAAC;YACxC,gBAAgB,CAAC,KAAK,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,qBAAqB,CAAC,CAAC;YACpF,OAAO;QACT,CAAC;QAED,MAAM,eAAe,GAAG,gBAAgB,CACtC,sBAAsB,CAAC,MAAM,CAAC,IAAI,CAAC,EACnC,qBAAqB,EACrB,MAAM,EACN,CAAC,KAAK,EAAE,EAAE,CAAC,sBAAsB,CAAC,KAAK,EAAE,KAAK,CAAC,CAChD,CAAC;QAEF,IAAI,eAAe,KAAK,SAAS,EAAE,CAAC;YAClC,MAAM,UAAU,GAAG,MAAM,CAAC,eAAe,CAAE,CAAC;YAC5C,MAAM,iBAAiB,GAAG,0BAA0B,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC;YAExE,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YAC/B,UAAU,CAAC,aAAa;gBACtB,UAAU,CAAC,aAAa,KAAK,uBAAuB,IAAI,iBAAiB;oBACvE,CAAC,CAAC,uBAAuB;oBACzB,CAAC,CAAC,4BAA4B,CAAC;YACnC,gBAAgB,CAAC,KAAK,EAAE,eAAe,EAAE,gBAAgB,EAAE,qBAAqB,CAAC,CAAC;YAClF,OAAO;QACT,CAAC;QAED,MAAM,UAAU,GAAG,MAAM,CAAC,MAAM,CAAC;QACjC,MAAM,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,CAAC,KAAK,CAAC,EAAE,aAAa,EAAE,MAAM,EAAE,CAAC,CAAC;QACzD,gBAAgB,CAAC,KAAK,EAAE,UAAU,EAAE,gBAAgB,EAAE,qBAAqB,CAAC,CAAC;IAC/E,CAAC,CAAC,CAAC;IAEH,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAS,gBAAgB,CACvB,IAAc,EACd,KAA4B,EAC5B,MAAqB,EACrB,OAAwC;IAExC,MAAM,UAAU,GAAG,IAAI,GAAG,EAAU,CAAC;IAErC,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;QACvB,KAAK,MAAM,UAAU,IAAI,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,EAAE,CAAC;YAC9C,UAAU,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;QAC7B,CAAC;IACH,CAAC;IAED,OAAO,CAAC,GAAG,UAAU,CAAC;SACnB,IAAI,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,IAAI,GAAG,KAAK,CAAC;SACnC,IAAI,CAAC,CAAC,UAAU,EAAE,EAAE;QACnB,MAAM,KAAK,GAAG,MAAM,CAAC,UAAU,CAAC,CAAC;QACjC,OAAO,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;IACxC,CAAC,CAAC,CAAC;AACP,CAAC;AAED,SAAS,gBAAgB,CACvB,KAAkB,EAClB,UAAkB,EAClB,gBAAuC,EACvC,qBAA4C;IAE5C,aAAa,CAAC,gBAAgB,EAAE,iBAAiB,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,UAAU,CAAC,CAAC;IAClF,aAAa,CAAC,qBAAqB,EAAE,sBAAsB,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,UAAU,CAAC,CAAC;AAC9F,CAAC;AAED,SAAS,aAAa,CAAC,KAA4B,EAAE,IAAc,EAAE,UAAkB;IACrF,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;QACvB,MAAM,YAAY,GAAG,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAEpC,IAAI,CAAC,YAAY,EAAE,CAAC;YAClB,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC;QAC/B,CAAC;aAAM,IAAI,YAAY,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,KAAK,UAAU,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE,CAAC;YACpF,YAAY,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAChC,CAAC;IACH,CAAC;AACH,CAAC;AAED,SAAS,iBAAiB,CAAC,IAAe;IACxC,OAAO,cAAc,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,EAAE;QACpC,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC;QAC9B,OAAO,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,IAAI,IAAI,GAAG,IAAI,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IACvD,CAAC,CAAC,CAAC;AACL,CAAC;AAED,SAAS,sBAAsB,CAAC,IAAe;IAC7C,IAAI,IAAI,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;QAC5B,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,KAAK,OAAO,IAAI,IAAI,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,iBAAiB,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;IAEhG,OAAO,CAAC,GAAG,2BAA2B,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,GAAG,OAAO,IAAI,IAAI,CAAC,IAAI,IAAI,KAAK,EAAE,CAAC,CAAC;AACnG,CAAC;AAED,gFAAgF;AAChF,2EAA2E;AAC3E,SAAS,gBAAgB,CAAC,KAAkB,EAAE,KAAkB;IAC9D,OAAO,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,UAAU,EAAE,EAAE;QACvC,OAAO,CACL,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,KAAK,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI;YACtD,iBAAiB,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CACrE,CAAC;IACJ,CAAC,CAAC,CAAC;AACL,CAAC;AAED,gFAAgF;AAChF,kFAAkF;AAClF,SAAS,sBAAsB,CAAC,KAAkB,EAAE,KAAkB;IACpE,MAAM,IAAI,GAAG,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC;IAE/B,OAAO,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,UAAU,EAAE,EAAE;QACvC,MAAM,SAAS,GAAG,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC;QAEzC,OAAO,CACL,wBAAwB,CAAC,IAAI,CAAC,IAAI,EAAE,SAAS,CAAC,IAAI,CAAC;YACnD,IAAI,CAAC,IAAI,KAAK,SAAS;YACvB,IAAI,CAAC,IAAI,KAAK,SAAS,CAAC,IAAI;YAC5B,iCAAiC,CAAC,IAAI,EAAE,SAAS,CAAC;YAClD,CAAC,mBAAmB,CAAC,IAAI,CAAC,GAAG,EAAE,SAAS,CAAC,GAAG,CAAC,CAC9C,CAAC;IACJ,CAAC,CAAC,CAAC;AACL,CAAC;AAED,wEAAwE;AACxE,4EAA4E;AAC5E,SAAS,0BAA0B,CAAC,KAAkB,EAAE,KAAkB;IACxE,MAAM,IAAI,GAAG,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC;IAE/B,OAAO,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,UAAU,EAAE,EAAE;QACvC,MAAM,SAAS,GAAG,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC;QAEzC,OAAO,CACL,wBAAwB,CAAC,IAAI,CAAC,IAAI,EAAE,SAAS,CAAC,IAAI,CAAC;YACnD,IAAI,CAAC,IAAI,KAAK,SAAS;YACvB,IAAI,CAAC,IAAI,KAAK,SAAS,CAAC,IAAI;YAC5B,4BAA4B,CAAC,IAAI,EAAE,SAAS,CAAC,CAC9C,CAAC;IACJ,CAAC,CAAC,CAAC;AACL,CAAC;AAED,6EAA6E;AAC7E,oFAAoF;AACpF,SAAS,wBAAwB,CAAC,IAAe,EAAE,KAAgB;IACjE,OAAO,CACL,IAAI,KAAK,KAAK;QACd,CAAC,IAAI,KAAK,OAAO,IAAI,KAAK,KAAK,QAAQ,CAAC;QACxC,CAAC,IAAI,KAAK,QAAQ,IAAI,KAAK,KAAK,OAAO,CAAC,CACzC,CAAC;AACJ,CAAC;AAED,oEAAoE;AACpE,qEAAqE;AACrE,SAAS,iCAAiC,CAAC,IAAe,EAAE,KAAgB;IAC1E,MAAM,UAAU,GAAG,2BAA2B,CAAC,IAAI,CAAC,CAAC;IAErD,IAAI,UAAU,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC;QAC1B,OAAO,KAAK,CAAC;IACf,CAAC;IAED,OAAO,eAAe,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AACvF,CAAC;AAED,kFAAkF;AAClF,+EAA+E;AAC/E,SAAS,4BAA4B,CAAC,IAAe,EAAE,KAAgB;IACrE,MAAM,UAAU,GAAG,IAAI,GAAG,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC;IAErF,IAAI,UAAU,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC;QAC1B,OAAO,KAAK,CAAC;IACf,CAAC;IAED,OAAO,eAAe,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AACtF,CAAC;AAED,gEAAgE;AAChE,4EAA4E;AAC5E,SAAS,2BAA2B,CAAC,IAAe;IAClD,OAAO,IAAI,GAAG,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC;AAC5E,CAAC"}
@@ -0,0 +1,5 @@
1
+ import type { ExternalIds } from "../media/index.js";
2
+ import { STRONG_ID_KEYS } from "./internal.js";
3
+ export declare function hasSharedStrongId(left: ExternalIds | undefined, right: ExternalIds | undefined): boolean;
4
+ export declare function hasStrongIdConflict(left: ExternalIds | undefined, right: ExternalIds | undefined): boolean;
5
+ export declare function strongIdConflicts(left: ExternalIds | undefined, right: ExternalIds | undefined): Array<(typeof STRONG_ID_KEYS)[number]>;
@@ -0,0 +1,21 @@
1
+ import { STRONG_ID_KEYS } from "./internal.js";
2
+ // Checks whether two ID maps share at least one strong external ID.
3
+ // Проверяет, есть ли у двух карт ID хотя бы один общий сильный внешний ID.
4
+ export function hasSharedStrongId(left, right) {
5
+ if (!left || !right) {
6
+ return false;
7
+ }
8
+ return STRONG_ID_KEYS.some((key) => Boolean(left[key] && right[key] && left[key] === right[key]));
9
+ }
10
+ // Checks whether two ID maps contain conflicting strong external IDs.
11
+ // Проверяет, содержат ли две карты ID конфликтующие сильные внешние ID.
12
+ export function hasStrongIdConflict(left, right) {
13
+ return strongIdConflicts(left, right).length > 0;
14
+ }
15
+ export function strongIdConflicts(left, right) {
16
+ if (!left || !right) {
17
+ return [];
18
+ }
19
+ return STRONG_ID_KEYS.filter((key) => Boolean(left[key] && right[key] && left[key] !== right[key]));
20
+ }
21
+ //# sourceMappingURL=identity.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"identity.js","sourceRoot":"","sources":["../../src/merge/identity.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAE/C,oEAAoE;AACpE,2EAA2E;AAC3E,MAAM,UAAU,iBAAiB,CAC/B,IAA6B,EAC7B,KAA8B;IAE9B,IAAI,CAAC,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;QACpB,OAAO,KAAK,CAAC;IACf,CAAC;IAED,OAAO,cAAc,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,KAAK,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,GAAG,CAAC,KAAK,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;AACpG,CAAC;AAED,sEAAsE;AACtE,wEAAwE;AACxE,MAAM,UAAU,mBAAmB,CACjC,IAA6B,EAC7B,KAA8B;IAE9B,OAAO,iBAAiB,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC;AACnD,CAAC;AAED,MAAM,UAAU,iBAAiB,CAC/B,IAA6B,EAC7B,KAA8B;IAE9B,IAAI,CAAC,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;QACpB,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,OAAO,cAAc,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,CACnC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,KAAK,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,GAAG,CAAC,KAAK,KAAK,CAAC,GAAG,CAAC,CAAC,CAC7D,CAAC;AACJ,CAAC"}
@@ -0,0 +1,22 @@
1
+ import type { ExternalIds } from "../media/index.js";
2
+ import type { ProviderDetailsResult, ProviderSearchResult } from "../providers/index.js";
3
+ import type { MatchStrength } from "./types.js";
4
+ export type ExternalIdKey = keyof ExternalIds;
5
+ export interface SearchEntry {
6
+ result: ProviderSearchResult;
7
+ index: number;
8
+ }
9
+ export interface DetailsEntry {
10
+ result: ProviderDetailsResult;
11
+ index: number;
12
+ }
13
+ export interface SearchGroup {
14
+ entries: SearchEntry[];
15
+ matchStrength: MatchStrength;
16
+ }
17
+ export interface SelectedExternalId {
18
+ value: string;
19
+ provider: string;
20
+ }
21
+ export declare const STRONG_ID_KEYS: readonly ["imdb", "tmdb", "kinopoisk", "shikimori", "myAnimeList"];
22
+ export declare const EXTERNAL_ID_KEYS: readonly ["imdb", "tmdb", "kinopoisk", "shikimori", "myAnimeList", "aniList", "worldArt"];
@@ -0,0 +1,15 @@
1
+ // Strong IDs that can safely prove two results describe the same media.
2
+ // Сильные ID, которые безопасно доказывают, что два результата описывают одно медиа.
3
+ export const STRONG_ID_KEYS = ["imdb", "tmdb", "kinopoisk", "shikimori", "myAnimeList"];
4
+ // All external ID fields copied into a merged media item.
5
+ // Все поля внешних ID, которые копируются в объединенный media item.
6
+ export const EXTERNAL_ID_KEYS = [
7
+ "imdb",
8
+ "tmdb",
9
+ "kinopoisk",
10
+ "shikimori",
11
+ "myAnimeList",
12
+ "aniList",
13
+ "worldArt",
14
+ ];
15
+ //# sourceMappingURL=internal.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"internal.js","sourceRoot":"","sources":["../../src/merge/internal.ts"],"names":[],"mappings":"AAoCA,wEAAwE;AACxE,qFAAqF;AACrF,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,WAAW,EAAE,aAAa,CAAU,CAAC;AAEjG,0DAA0D;AAC1D,qEAAqE;AACrE,MAAM,CAAC,MAAM,gBAAgB,GAAG;IAC9B,MAAM;IACN,MAAM;IACN,WAAW;IACX,WAAW;IACX,aAAa;IACb,SAAS;IACT,UAAU;CACF,CAAC"}
@@ -0,0 +1,5 @@
1
+ import type { MediaItem, MediaType } from "../media/index.js";
2
+ import type { SearchEntry } from "./internal.js";
3
+ export declare function selectMergedSearchType(entries: SearchEntry[]): MediaType | undefined;
4
+ export declare function selectMetadataPriorityType(items: MediaItem[]): MediaType | undefined;
5
+ export declare function selectMergedMediaType(items: MediaItem[]): MediaType | undefined;
@@ -0,0 +1,15 @@
1
+ // Preserves anime semantics when a generic series catalog describes the same animated title.
2
+ // Сохраняет anime-семантику, когда generic series-каталог описывает тот же анимационный тайтл.
3
+ export function selectMergedSearchType(entries) {
4
+ return selectMergedMediaType(entries.map((entry) => entry.result.item));
5
+ }
6
+ // Uses general-series metadata priority for mixed anime/catalog groups without losing anime type.
7
+ // Использует приоритет metadata сериалов для смешанных anime/catalog групп без потери anime-типа.
8
+ export function selectMetadataPriorityType(items) {
9
+ const types = new Set(items.map((item) => item.type));
10
+ return types.has("anime") && types.has("series") ? "series" : items[0]?.type;
11
+ }
12
+ export function selectMergedMediaType(items) {
13
+ return items.some((item) => item.type === "anime") ? "anime" : items[0]?.type;
14
+ }
15
+ //# sourceMappingURL=media-type.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"media-type.js","sourceRoot":"","sources":["../../src/merge/media-type.ts"],"names":[],"mappings":"AAGA,6FAA6F;AAC7F,+FAA+F;AAC/F,MAAM,UAAU,sBAAsB,CAAC,OAAsB;IAC3D,OAAO,qBAAqB,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC;AAC1E,CAAC;AAED,kGAAkG;AAClG,kGAAkG;AAClG,MAAM,UAAU,0BAA0B,CAAC,KAAkB;IAC3D,MAAM,KAAK,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;IACtD,OAAO,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC;AAC/E,CAAC;AAED,MAAM,UAAU,qBAAqB,CAAC,KAAkB;IACtD,OAAO,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,KAAK,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC;AAChF,CAAC"}
@@ -0,0 +1,9 @@
1
+ import type { MediaType } from "../media/index.js";
2
+ import type { MergeContext } from "./types.js";
3
+ export declare const SEARCH_RESULT_PRIORITY: string[];
4
+ export declare function sortEntriesByPriority<T extends {
5
+ result: {
6
+ provider: string;
7
+ };
8
+ }>(entries: T[], context: MergeContext, mediaType?: MediaType): T[];
9
+ export declare function providerRank(provider: string, priority: string[]): number;
@@ -0,0 +1,63 @@
1
+ // Default provider priority for movies and series.
2
+ // Приоритет провайдеров по умолчанию для фильмов и сериалов.
3
+ const DEFAULT_PRIORITY = ["tmdb", "kinobd", "cinemeta", "tvmaze", "imdb", "wikidata", "kinopoisk"];
4
+ // Default provider priority for anime results.
5
+ // Приоритет провайдеров по умолчанию для аниме.
6
+ const ANIME_PRIORITY = [
7
+ "shikimori",
8
+ "anilist",
9
+ "tmdb",
10
+ "kinobd",
11
+ "cinemeta",
12
+ "tvmaze",
13
+ "imdb",
14
+ "wikidata",
15
+ "kinopoisk",
16
+ ];
17
+ // Search-level tie-break priority used when results from different media types have equal scores.
18
+ // Search-level priority для tie-break, когда результаты разных media types имеют одинаковый score.
19
+ export const SEARCH_RESULT_PRIORITY = [
20
+ "tmdb",
21
+ "kinobd",
22
+ "cinemeta",
23
+ "tvmaze",
24
+ "imdb",
25
+ "wikidata",
26
+ "kinopoisk",
27
+ "shikimori",
28
+ "anilist",
29
+ ];
30
+ // Sorts entries by explicit provider priority and then original input order.
31
+ // Сортирует entries по заданному приоритету провайдеров и исходному порядку.
32
+ export function sortEntriesByPriority(entries, context, mediaType) {
33
+ const priority = context.providerPriority ?? defaultPriority(mediaType);
34
+ return [...entries].sort((left, right) => {
35
+ const priorityDiff = providerRank(left.result.provider, priority) - providerRank(right.result.provider, priority);
36
+ if (priorityDiff !== 0) {
37
+ return priorityDiff;
38
+ }
39
+ return getEntryIndex(left) - getEntryIndex(right);
40
+ });
41
+ }
42
+ // Calculates provider priority rank for deterministic sorting.
43
+ // Вычисляет ранг провайдера для детерминированной сортировки.
44
+ export function providerRank(provider, priority) {
45
+ const index = priority.indexOf(provider);
46
+ return index === -1 ? priority.length : index;
47
+ }
48
+ // Returns the default provider priority for a media type.
49
+ // Возвращает приоритет провайдеров по умолчанию для типа медиа.
50
+ function defaultPriority(mediaType) {
51
+ return mediaType === "anime" ? ANIME_PRIORITY : DEFAULT_PRIORITY;
52
+ }
53
+ // Reads an entry index from generic sorted objects.
54
+ // Читает index из обобщенных объектов для сортировки.
55
+ function getEntryIndex(entry) {
56
+ return typeof entry === "object" &&
57
+ entry !== null &&
58
+ "index" in entry &&
59
+ typeof entry.index === "number"
60
+ ? entry.index
61
+ : 0;
62
+ }
63
+ //# sourceMappingURL=priority.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"priority.js","sourceRoot":"","sources":["../../src/merge/priority.ts"],"names":[],"mappings":"AAGA,mDAAmD;AACnD,6DAA6D;AAC7D,MAAM,gBAAgB,GAAG,CAAC,MAAM,EAAE,QAAQ,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,EAAE,UAAU,EAAE,WAAW,CAAC,CAAC;AAEnG,+CAA+C;AAC/C,gDAAgD;AAChD,MAAM,cAAc,GAAG;IACrB,WAAW;IACX,SAAS;IACT,MAAM;IACN,QAAQ;IACR,UAAU;IACV,QAAQ;IACR,MAAM;IACN,UAAU;IACV,WAAW;CACZ,CAAC;AAEF,kGAAkG;AAClG,mGAAmG;AACnG,MAAM,CAAC,MAAM,sBAAsB,GAAG;IACpC,MAAM;IACN,QAAQ;IACR,UAAU;IACV,QAAQ;IACR,MAAM;IACN,UAAU;IACV,WAAW;IACX,WAAW;IACX,SAAS;CACV,CAAC;AAEF,6EAA6E;AAC7E,6EAA6E;AAC7E,MAAM,UAAU,qBAAqB,CACnC,OAAY,EACZ,OAAqB,EACrB,SAAqB;IAErB,MAAM,QAAQ,GAAG,OAAO,CAAC,gBAAgB,IAAI,eAAe,CAAC,SAAS,CAAC,CAAC;IAExE,OAAO,CAAC,GAAG,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE;QACvC,MAAM,YAAY,GAChB,YAAY,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,QAAQ,CAAC,GAAG,YAAY,CAAC,KAAK,CAAC,MAAM,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;QAE/F,IAAI,YAAY,KAAK,CAAC,EAAE,CAAC;YACvB,OAAO,YAAY,CAAC;QACtB,CAAC;QAED,OAAO,aAAa,CAAC,IAAI,CAAC,GAAG,aAAa,CAAC,KAAK,CAAC,CAAC;IACpD,CAAC,CAAC,CAAC;AACL,CAAC;AAED,+DAA+D;AAC/D,8DAA8D;AAC9D,MAAM,UAAU,YAAY,CAAC,QAAgB,EAAE,QAAkB;IAC/D,MAAM,KAAK,GAAG,QAAQ,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;IAEzC,OAAO,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC;AAChD,CAAC;AAED,0DAA0D;AAC1D,gEAAgE;AAChE,SAAS,eAAe,CAAC,SAAqB;IAC5C,OAAO,SAAS,KAAK,OAAO,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,gBAAgB,CAAC;AACnE,CAAC;AAED,oDAAoD;AACpD,sDAAsD;AACtD,SAAS,aAAa,CAAC,KAAc;IACnC,OAAO,OAAO,KAAK,KAAK,QAAQ;QAC9B,KAAK,KAAK,IAAI;QACd,OAAO,IAAI,KAAK;QAChB,OAAO,KAAK,CAAC,KAAK,KAAK,QAAQ;QAC/B,CAAC,CAAC,KAAK,CAAC,KAAK;QACb,CAAC,CAAC,CAAC,CAAC;AACR,CAAC"}
@@ -0,0 +1,15 @@
1
+ import type { SearchRankEvidence, SearchTitleMatchKind } from "../search/index.js";
2
+ import type { SearchEntry, SearchGroup } from "./internal.js";
3
+ import type { MergeContext } from "./types.js";
4
+ export declare function scoreGroup(group: SearchGroup, entries: SearchEntry[], context: MergeContext): number;
5
+ export declare function rankSearchGroup(group: SearchGroup, entries: SearchEntry[], context: MergeContext): {
6
+ score: number;
7
+ evidence: Omit<SearchRankEvidence, "scorePosition" | "diversityPosition" | "finalPosition" | "diversity">;
8
+ };
9
+ export declare function hasExactPrimaryTitle(entries: SearchEntry[], queryTitle: string): boolean;
10
+ export declare function titleRelevanceScore(entries: SearchEntry[], queryTitle: string): number;
11
+ export declare function titleRelevanceEvidence(entries: SearchEntry[], queryTitle: string): {
12
+ kind: SearchTitleMatchKind;
13
+ score: number;
14
+ matchedTitle?: string;
15
+ };