submodule-version 2.4.1 → 3.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 (120) hide show
  1. package/README.md +98 -20
  2. package/dist/runner/handleErrors/handleErrors.d.ts +1 -1
  3. package/dist/runner/handleErrors/handleErrors.js +3 -10
  4. package/dist/runner/handleErrors/handleErrors.js.map +1 -1
  5. package/dist/runner/index.js +0 -0
  6. package/dist/runner/runner.d.ts +4 -0
  7. package/dist/runner/runner.js +91 -37
  8. package/dist/runner/runner.js.map +1 -1
  9. package/dist/src/PubGrub/PubGrub.d.ts +28 -0
  10. package/dist/src/PubGrub/PubGrub.js +366 -0
  11. package/dist/src/PubGrub/PubGrub.js.map +1 -0
  12. package/dist/src/PubGrub/index.d.ts +2 -0
  13. package/dist/src/PubGrub/index.js +7 -0
  14. package/dist/src/PubGrub/index.js.map +1 -0
  15. package/dist/src/PubGrub/types.d.ts +56 -0
  16. package/dist/src/PubGrub/types.js +3 -0
  17. package/dist/src/PubGrub/types.js.map +1 -0
  18. package/dist/src/entryStore.d.ts +16 -0
  19. package/dist/src/entryStore.js +152 -0
  20. package/dist/src/entryStore.js.map +1 -0
  21. package/dist/src/errors.d.ts +28 -0
  22. package/dist/src/errors.js +30 -0
  23. package/dist/src/errors.js.map +1 -0
  24. package/dist/src/git/api/GithubError.d.ts +4 -0
  25. package/dist/src/git/api/GithubError.js +11 -0
  26. package/dist/src/git/api/GithubError.js.map +1 -0
  27. package/dist/src/git/api/api.d.ts +8 -0
  28. package/dist/src/git/api/api.js +133 -0
  29. package/dist/src/git/api/api.js.map +1 -0
  30. package/dist/src/git/api/index.d.ts +3 -0
  31. package/dist/src/git/api/index.js +8 -0
  32. package/dist/src/git/api/index.js.map +1 -0
  33. package/dist/src/git/git.d.ts +30 -23
  34. package/dist/src/git/git.js +8 -258
  35. package/dist/src/git/git.js.map +1 -1
  36. package/dist/src/git/index.d.ts +1 -0
  37. package/dist/src/git/index.js +3 -1
  38. package/dist/src/git/index.js.map +1 -1
  39. package/dist/src/git/local/index.d.ts +1 -0
  40. package/dist/src/git/local/index.js +6 -0
  41. package/dist/src/git/local/index.js.map +1 -0
  42. package/dist/src/git/local/local.d.ts +26 -0
  43. package/dist/src/git/local/local.js +288 -0
  44. package/dist/src/git/local/local.js.map +1 -0
  45. package/dist/src/index.d.ts +7 -0
  46. package/dist/src/index.js +16 -1
  47. package/dist/src/index.js.map +1 -1
  48. package/dist/src/printError.d.ts +1 -0
  49. package/dist/src/printError.js +158 -0
  50. package/dist/src/printError.js.map +1 -0
  51. package/dist/src/sv.d.ts +16 -8
  52. package/dist/src/sv.js +222 -143
  53. package/dist/src/sv.js.map +1 -1
  54. package/dist/src/versionUtil/index.d.ts +2 -0
  55. package/dist/src/versionUtil/index.js +6 -0
  56. package/dist/src/versionUtil/index.js.map +1 -0
  57. package/dist/src/versionUtil/versionUtil.d.ts +16 -0
  58. package/dist/src/versionUtil/versionUtil.js +70 -0
  59. package/dist/src/versionUtil/versionUtil.js.map +1 -0
  60. package/package.json +4 -2
  61. package/runner/handleErrors/handleErrors.ts +3 -10
  62. package/runner/runner.ts +128 -46
  63. package/src/PubGrub/PubGrub.ts +578 -0
  64. package/src/PubGrub/__tests__/PubGrub.test.ts +351 -0
  65. package/src/PubGrub/index.ts +12 -0
  66. package/src/PubGrub/types.ts +72 -0
  67. package/src/__tests__/entryStore.test.ts +248 -0
  68. package/src/__tests__/printError.test.ts +148 -0
  69. package/src/__tests__/sv.test.ts +441 -0
  70. package/src/entryStore.ts +212 -0
  71. package/src/errors.ts +39 -0
  72. package/src/git/api/GithubError.ts +5 -0
  73. package/src/git/api/api.ts +180 -0
  74. package/src/git/api/index.ts +3 -0
  75. package/src/git/git.ts +8 -396
  76. package/src/git/index.ts +1 -0
  77. package/src/git/local/index.ts +1 -0
  78. package/src/git/local/local.ts +430 -0
  79. package/src/index.ts +17 -0
  80. package/src/printError.ts +189 -0
  81. package/src/sv.ts +304 -146
  82. package/src/versionUtil/__tests__/versionUtil.test.ts +62 -0
  83. package/src/versionUtil/index.ts +2 -0
  84. package/src/versionUtil/versionUtil.ts +103 -0
  85. package/tsconfig.json +1 -1
  86. package/dist/runner/handleErrors/handleBuildGraphError.d.ts +0 -1
  87. package/dist/runner/handleErrors/handleBuildGraphError.js +0 -42
  88. package/dist/runner/handleErrors/handleBuildGraphError.js.map +0 -1
  89. package/dist/runner/handleErrors/handleGitError.d.ts +0 -1
  90. package/dist/runner/handleErrors/handleGitError.js +0 -27
  91. package/dist/runner/handleErrors/handleGitError.js.map +0 -1
  92. package/dist/runner/handleErrors/handleInstallError.d.ts +0 -1
  93. package/dist/runner/handleErrors/handleInstallError.js +0 -30
  94. package/dist/runner/handleErrors/handleInstallError.js.map +0 -1
  95. package/dist/src/__tests__/versionUtil.test.d.ts +0 -1
  96. package/dist/src/__tests__/versionUtil.test.js +0 -80
  97. package/dist/src/__tests__/versionUtil.test.js.map +0 -1
  98. package/dist/src/buildGraph/GraphError.d.ts +0 -11
  99. package/dist/src/buildGraph/GraphError.js +0 -11
  100. package/dist/src/buildGraph/GraphError.js.map +0 -1
  101. package/dist/src/buildGraph/buildGraph.d.ts +0 -8
  102. package/dist/src/buildGraph/buildGraph.js +0 -100
  103. package/dist/src/buildGraph/buildGraph.js.map +0 -1
  104. package/dist/src/buildGraph/index.d.ts +0 -2
  105. package/dist/src/buildGraph/index.js +0 -8
  106. package/dist/src/buildGraph/index.js.map +0 -1
  107. package/dist/src/git/__tests__/parseGitUrl.test.d.ts +0 -1
  108. package/dist/src/git/__tests__/parseGitUrl.test.js +0 -30
  109. package/dist/src/git/__tests__/parseGitUrl.test.js.map +0 -1
  110. package/dist/src/versionUtil.d.ts +0 -13
  111. package/dist/src/versionUtil.js +0 -79
  112. package/dist/src/versionUtil.js.map +0 -1
  113. package/runner/handleErrors/handleBuildGraphError.ts +0 -49
  114. package/runner/handleErrors/handleGitError.ts +0 -28
  115. package/runner/handleErrors/handleInstallError.ts +0 -26
  116. package/src/__tests__/versionUtil.test.ts +0 -96
  117. package/src/buildGraph/GraphError.ts +0 -12
  118. package/src/buildGraph/buildGraph.ts +0 -150
  119. package/src/buildGraph/index.ts +0 -2
  120. package/src/versionUtil.ts +0 -97
@@ -0,0 +1,366 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.pubGrub = exports.PubGrub = void 0;
4
+ const entryStore_1 = require("../entryStore");
5
+ const errors_1 = require("../errors");
6
+ const versionUtil_1 = require("../versionUtil");
7
+ const ROOT = '<root>';
8
+ const ROOT_VERSION = '1.0.0';
9
+ const cloneState = (state) => ({
10
+ selected: new Map(state.selected),
11
+ requirements: new Map([...state.requirements].map(([name, requirements]) => [
12
+ name,
13
+ requirements.map(requirement => ({
14
+ ...requirement,
15
+ chain: [...requirement.chain],
16
+ })),
17
+ ])),
18
+ edges: new Map([...state.edges].map(([name, dependencies]) => [
19
+ name,
20
+ [...dependencies],
21
+ ])),
22
+ });
23
+ const findPath = (edges, from, target, visited = new Set()) => {
24
+ if (from === target)
25
+ return [from];
26
+ if (visited.has(from))
27
+ return null;
28
+ visited.add(from);
29
+ for (const next of edges.get(from) || []) {
30
+ const path = findPath(edges, next, target, visited);
31
+ if (path)
32
+ return [from, ...path];
33
+ }
34
+ return null;
35
+ };
36
+ class PubGrub {
37
+ constructor(source = entryStore_1.entryStore) {
38
+ this.source = source;
39
+ this.entries = new Map();
40
+ this.incompatibilities = [];
41
+ this.incompatibilityKeys = new Set();
42
+ this.resolve = async (rootDependencies) => {
43
+ this.entries = new Map();
44
+ this.incompatibilities = [];
45
+ this.incompatibilityKeys = new Set();
46
+ const state = {
47
+ selected: new Map([[ROOT, ROOT_VERSION]]),
48
+ requirements: new Map(),
49
+ edges: new Map(),
50
+ };
51
+ const roots = await Promise.all(Object.entries(rootDependencies).map(async ([depPath, range]) => ({
52
+ entry: await this.load(depPath),
53
+ range: range || '*',
54
+ })));
55
+ roots.forEach(({ entry, range }) => {
56
+ this.assertConstraint(entry.name, range, ROOT);
57
+ const requirement = this.requirement(entry.name, range, ROOT, [ROOT, entry.name]);
58
+ this.addIncompatibility({
59
+ terms: [
60
+ { module: ROOT, range: ROOT_VERSION, positive: true },
61
+ { module: entry.name, range, positive: false },
62
+ ],
63
+ cause: { type: 'root', requirement },
64
+ });
65
+ });
66
+ const result = await this.search(state);
67
+ if (!result.ok)
68
+ throw this.toError(result.conflict);
69
+ return Object.fromEntries([...result.state.selected]
70
+ .filter(([name]) => name !== ROOT)
71
+ .map(([name, version]) => {
72
+ const entry = this.entries.get(name);
73
+ return [name, {
74
+ ...entry,
75
+ version,
76
+ dependencies: { ...entry.versions[version] },
77
+ }];
78
+ }));
79
+ };
80
+ this.search = async (state) => {
81
+ const propagatedConflict = this.propagate(state);
82
+ if (propagatedConflict) {
83
+ this.learn(state, propagatedConflict);
84
+ return { ok: false, conflict: propagatedConflict };
85
+ }
86
+ const unresolved = [...state.requirements]
87
+ .filter(([name, requirements]) => (name !== ROOT
88
+ && !state.selected.has(name)
89
+ && requirements.some(requirement => requirement.positive)))
90
+ .map(([name]) => name);
91
+ if (!unresolved.length)
92
+ return { ok: true, state };
93
+ const choices = unresolved.map(name => {
94
+ const entry = this.entries.get(name);
95
+ const requirements = state.requirements.get(name) || [];
96
+ const versions = this.candidates(name, state);
97
+ return { name, entry, requirements, versions };
98
+ });
99
+ choices.sort((a, b) => (a.versions.length - b.versions.length || a.name.localeCompare(b.name)));
100
+ const choice = choices[0];
101
+ if (!choice.versions.length) {
102
+ const conflict = this.versionConflict(choice.name, choice.requirements, Object.keys(choice.entry.versions));
103
+ this.learn(state, conflict);
104
+ return { ok: false, conflict };
105
+ }
106
+ let lastConflict;
107
+ for (const version of choice.versions) {
108
+ const next = cloneState(state);
109
+ next.selected.set(choice.name, version);
110
+ const dependencyConflict = await this.addDependencies(next, choice.entry, version);
111
+ const result = dependencyConflict
112
+ ? { ok: false, conflict: dependencyConflict }
113
+ : await this.search(next);
114
+ if (result.ok)
115
+ return result;
116
+ this.learn(next, result.conflict);
117
+ lastConflict = result.conflict;
118
+ /* Решение не участвовало в причине: откатываемся через этот уровень. */
119
+ if (!result.conflict.packages.has(choice.name))
120
+ return result;
121
+ }
122
+ return {
123
+ ok: false,
124
+ conflict: lastConflict || this.versionConflict(choice.name, choice.requirements, Object.keys(choice.entry.versions)),
125
+ };
126
+ };
127
+ /*
128
+ * Unit propagation: если incompatibility почти удовлетворена, добавляем
129
+ * отрицание единственного неопределённого term в partial solution.
130
+ */
131
+ this.propagate = (state) => {
132
+ let changed = true;
133
+ while (changed) {
134
+ changed = false;
135
+ for (const incompatibility of this.incompatibilities) {
136
+ const relations = incompatibility.terms.map(term => (this.relation(term, state)));
137
+ if (relations.includes('contradicted'))
138
+ continue;
139
+ const inconclusive = relations
140
+ .map((relation, index) => ({ relation, index }))
141
+ .filter(({ relation }) => relation === 'inconclusive');
142
+ if (!inconclusive.length) {
143
+ return this.conflictFrom(incompatibility, state);
144
+ }
145
+ if (inconclusive.length !== 1)
146
+ continue;
147
+ const term = incompatibility.terms[inconclusive[0].index];
148
+ const requirement = this.derivedRequirement(term, incompatibility);
149
+ changed = this.addRequirement(state, term.module, requirement) || changed;
150
+ }
151
+ const selectedConflict = this.findSelectedConflict(state);
152
+ if (selectedConflict)
153
+ return selectedConflict;
154
+ }
155
+ return null;
156
+ };
157
+ this.relation = (term, state) => {
158
+ const selected = state.selected.get(term.module);
159
+ if (selected) {
160
+ const matches = versionUtil_1.versionUtil.satisfies(selected, term.range);
161
+ const satisfied = term.positive ? matches : !matches;
162
+ return satisfied ? 'satisfied' : 'contradicted';
163
+ }
164
+ const requirements = state.requirements.get(term.module) || [];
165
+ if (!requirements.length)
166
+ return 'inconclusive';
167
+ const candidates = this.candidates(term.module, state);
168
+ if (!candidates.length)
169
+ return 'inconclusive';
170
+ const matching = candidates.filter(version => (versionUtil_1.versionUtil.satisfies(version, term.range)));
171
+ if (term.positive) {
172
+ if (matching.length === candidates.length)
173
+ return 'satisfied';
174
+ if (!matching.length)
175
+ return 'contradicted';
176
+ }
177
+ else {
178
+ if (!matching.length)
179
+ return 'satisfied';
180
+ if (matching.length === candidates.length)
181
+ return 'contradicted';
182
+ }
183
+ return 'inconclusive';
184
+ };
185
+ this.candidates = (name, state) => {
186
+ const versions = Object.keys(this.entries.get(name)?.versions || {});
187
+ const requirements = state.requirements.get(name) || [];
188
+ return versionUtil_1.versionUtil.sort(versions).filter(version => (requirements.every(requirement => {
189
+ const matches = versionUtil_1.versionUtil.satisfies(version, requirement.range);
190
+ return requirement.positive ? matches : !matches;
191
+ })));
192
+ };
193
+ this.addDependencies = async (state, entry, version) => {
194
+ const dependencies = entry.versions[version] || {};
195
+ const dependencyNames = Object.keys(dependencies);
196
+ Object.entries(dependencies).forEach(([name, range]) => {
197
+ this.assertConstraint(name, range, `${entry.name}@${version}`);
198
+ });
199
+ await Promise.all(dependencyNames.map(name => this.load(name)));
200
+ state.edges.set(entry.name, dependencyNames);
201
+ for (const [name, range] of Object.entries(dependencies)) {
202
+ const path = findPath(state.edges, name, entry.name);
203
+ if (path) {
204
+ const chain = [entry.name, ...path];
205
+ return {
206
+ type: 'circular',
207
+ name: entry.name,
208
+ chain,
209
+ packages: new Set(chain),
210
+ };
211
+ }
212
+ const parentRequirement = [...(state.requirements.get(entry.name) || [])]
213
+ .sort((a, b) => a.chain.length - b.chain.length)[0];
214
+ const requirement = this.requirement(name, range, `${entry.name}@${version}`, [...(parentRequirement?.chain || [ROOT, entry.name]), name]);
215
+ this.addIncompatibility({
216
+ terms: [
217
+ { module: entry.name, range: version, positive: true },
218
+ { module: name, range, positive: false },
219
+ ],
220
+ cause: { type: 'dependency', requirement },
221
+ });
222
+ }
223
+ return null;
224
+ };
225
+ this.load = async (depPath) => {
226
+ const known = this.entries.get(depPath);
227
+ if (known)
228
+ return known;
229
+ const entry = await this.source.fetch(depPath);
230
+ const duplicate = this.entries.get(entry.name);
231
+ if (duplicate && duplicate.url !== entry.url) {
232
+ throw new errors_1.SVError('ADDON_NOT_FOUND', {
233
+ name: entry.name,
234
+ urls: [duplicate.url, entry.url],
235
+ });
236
+ }
237
+ this.entries.set(entry.name, entry);
238
+ return entry;
239
+ };
240
+ this.addIncompatibility = (incompatibility) => {
241
+ const key = incompatibility.terms
242
+ .map(term => `${term.module}:${term.positive}:${term.range}`)
243
+ .sort()
244
+ .join('|');
245
+ if (this.incompatibilityKeys.has(key))
246
+ return;
247
+ this.incompatibilityKeys.add(key);
248
+ this.incompatibilities.push(incompatibility);
249
+ };
250
+ this.learn = (state, conflict) => {
251
+ const terms = [...state.selected]
252
+ .filter(([name]) => name !== ROOT && conflict.packages.has(name))
253
+ .map(([module, range]) => ({ module, range, positive: true }));
254
+ if (!terms.length)
255
+ return;
256
+ this.addIncompatibility({
257
+ terms,
258
+ cause: { type: 'learned', conflict },
259
+ });
260
+ };
261
+ this.conflictFrom = (incompatibility, state) => {
262
+ if (incompatibility.cause.type === 'learned') {
263
+ return incompatibility.cause.conflict;
264
+ }
265
+ const { requirement } = incompatibility.cause;
266
+ const name = requirement.chain[requirement.chain.length - 1];
267
+ this.addRequirement(state, name, requirement);
268
+ return this.versionConflict(name, state.requirements.get(name) || [], Object.keys(this.entries.get(name)?.versions || {}));
269
+ };
270
+ // eslint-disable-next-line class-methods-use-this
271
+ this.derivedRequirement = (term, incompatibility) => {
272
+ if (incompatibility.cause.type !== 'learned') {
273
+ const source = incompatibility.cause.requirement;
274
+ return { ...source, positive: !term.positive };
275
+ }
276
+ return {
277
+ range: term.range,
278
+ positive: !term.positive,
279
+ requiredBy: '<conflict>',
280
+ chain: [ROOT, term.module],
281
+ };
282
+ };
283
+ // eslint-disable-next-line class-methods-use-this
284
+ this.requirement = (name, range, requiredBy, chain) => ({
285
+ range,
286
+ positive: true,
287
+ requiredBy,
288
+ chain: chain[chain.length - 1] === name ? chain : [...chain, name],
289
+ });
290
+ // eslint-disable-next-line class-methods-use-this
291
+ this.addRequirement = (state, name, requirement) => {
292
+ const requirements = state.requirements.get(name) || [];
293
+ const exists = requirements.some(current => (current.range === requirement.range
294
+ && current.positive === requirement.positive
295
+ && current.requiredBy === requirement.requiredBy));
296
+ if (exists)
297
+ return false;
298
+ requirements.push(requirement);
299
+ state.requirements.set(name, requirements);
300
+ return true;
301
+ };
302
+ this.findSelectedConflict = (state) => {
303
+ for (const [name, version] of state.selected) {
304
+ if (name === ROOT)
305
+ continue;
306
+ const requirements = state.requirements.get(name) || [];
307
+ const valid = requirements.every(requirement => {
308
+ const matches = versionUtil_1.versionUtil.satisfies(version, requirement.range);
309
+ return requirement.positive ? matches : !matches;
310
+ });
311
+ if (valid)
312
+ continue;
313
+ return this.versionConflict(name, requirements, Object.keys(this.entries.get(name)?.versions || {}));
314
+ }
315
+ return null;
316
+ };
317
+ // eslint-disable-next-line class-methods-use-this
318
+ this.versionConflict = (name, requirements, versions) => ({
319
+ type: 'version',
320
+ name,
321
+ requirements,
322
+ versions: versionUtil_1.versionUtil.sort(versions),
323
+ packages: new Set([
324
+ name,
325
+ ...requirements.flatMap(requirement => requirement.chain),
326
+ ].filter(packageName => packageName !== ROOT)),
327
+ });
328
+ // eslint-disable-next-line class-methods-use-this
329
+ this.assertConstraint = (name, range, parent) => {
330
+ if (versionUtil_1.versionUtil.validate(range, true))
331
+ return;
332
+ throw new errors_1.SVError('UNKNOWN_VERSION', {
333
+ name,
334
+ parent,
335
+ version: range,
336
+ });
337
+ };
338
+ // eslint-disable-next-line class-methods-use-this
339
+ this.toError = (conflict) => {
340
+ if (conflict.type === 'circular') {
341
+ return new errors_1.SVError('CIRCULAR_DEPENDENCY', {
342
+ name: conflict.name,
343
+ chain: conflict.chain,
344
+ });
345
+ }
346
+ const parents = Object.fromEntries(conflict.requirements.map(requirement => [
347
+ requirement.requiredBy,
348
+ `${requirement.positive ? '' : 'not '}${requirement.range}`,
349
+ ]));
350
+ const chain = [...conflict.requirements]
351
+ .sort((a, b) => a.chain.length - b.chain.length)[0]?.chain;
352
+ return new errors_1.SVError('VERSION_CONFLICT', {
353
+ name: conflict.name,
354
+ parents,
355
+ constraints: conflict.requirements,
356
+ versions: conflict.versions,
357
+ chain,
358
+ });
359
+ };
360
+ }
361
+ }
362
+ exports.PubGrub = PubGrub;
363
+ exports.pubGrub = {
364
+ resolve: (rootDependencies) => (new PubGrub().resolve(rootDependencies)),
365
+ };
366
+ //# sourceMappingURL=PubGrub.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PubGrub.js","sourceRoot":"","sources":["../../../src/PubGrub/PubGrub.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export { PubGrub, pubGrub } from './PubGrub';
2
+ export type { IEntrySource, IIncompatibility, IOverride, IPackageEntry, IRequirement, IResolvedPackage, ITerm, TDependencies, TPubGrubResult, } from './types';
@@ -0,0 +1,7 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.pubGrub = exports.PubGrub = void 0;
4
+ var PubGrub_1 = require("./PubGrub");
5
+ Object.defineProperty(exports, "PubGrub", { enumerable: true, get: function () { return PubGrub_1.PubGrub; } });
6
+ Object.defineProperty(exports, "pubGrub", { enumerable: true, get: function () { return PubGrub_1.pubGrub; } });
7
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/PubGrub/index.ts"],"names":[],"mappings":";;;AAAA,qCAA6C;AAApC,kGAAA,OAAO,OAAA;AAAE,kGAAA,OAAO,OAAA"}
@@ -0,0 +1,56 @@
1
+ export type TDependencies = Record<string, string>;
2
+ export interface IPackageEntry {
3
+ name: string;
4
+ url: string;
5
+ versions: Record<string, TDependencies>;
6
+ }
7
+ export interface IResolvedPackage extends IPackageEntry {
8
+ version: string;
9
+ dependencies: TDependencies;
10
+ }
11
+ export type TPubGrubResult = Record<string, IResolvedPackage>;
12
+ export interface IEntrySource {
13
+ fetch(depPath: string): Promise<IPackageEntry>;
14
+ }
15
+ export interface IOverride {
16
+ parent?: string;
17
+ add?: string;
18
+ version?: string;
19
+ delete?: string;
20
+ }
21
+ export interface IRequirement {
22
+ range: string;
23
+ positive: boolean;
24
+ requiredBy: string;
25
+ chain: string[];
26
+ }
27
+ export interface ITerm {
28
+ module: string;
29
+ range: string;
30
+ positive: boolean;
31
+ }
32
+ export type TIncompatibilityCause = {
33
+ type: 'dependency' | 'root';
34
+ requirement: IRequirement;
35
+ } | {
36
+ type: 'learned';
37
+ conflict: TConflict;
38
+ };
39
+ export interface IIncompatibility {
40
+ terms: ITerm[];
41
+ cause: TIncompatibilityCause;
42
+ }
43
+ export interface IVersionConflict {
44
+ type: 'version';
45
+ name: string;
46
+ requirements: IRequirement[];
47
+ versions: string[];
48
+ packages: Set<string>;
49
+ }
50
+ export interface ICircularConflict {
51
+ type: 'circular';
52
+ name: string;
53
+ chain: string[];
54
+ packages: Set<string>;
55
+ }
56
+ export type TConflict = IVersionConflict | ICircularConflict;
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/PubGrub/types.ts"],"names":[],"mappings":""}
@@ -0,0 +1,16 @@
1
+ import type { IEntrySource, IOverride, IPackageEntry, TDependencies } from './PubGrub/types';
2
+ export declare class EntryStore implements IEntrySource {
3
+ private cache;
4
+ private urlByName;
5
+ private overrides;
6
+ private rememberUrl;
7
+ private normalizeDependencies;
8
+ private load;
9
+ private resolveIdentity;
10
+ private applyOverrides;
11
+ fetch: (depPath: string) => Promise<IPackageEntry>;
12
+ simulate: <T>(overrides: IOverride[], rootDeps: TDependencies, cb: (rootDeps: TDependencies) => Promise<T>) => Promise<T>;
13
+ urlOf: (name: string) => string | undefined;
14
+ clear: () => void;
15
+ }
16
+ export declare const entryStore: EntryStore;
@@ -0,0 +1,152 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.entryStore = exports.EntryStore = void 0;
4
+ const errors_1 = require("./errors");
5
+ const git_1 = require("./git");
6
+ /*
7
+ * Оверрайды без parent применяются к корню: add добавляет/меняет
8
+ * диапазон по url, delete убирает зависимость по имени модуля.
9
+ */
10
+ const applyRootOverrides = (overrides, rootDeps) => {
11
+ const next = { ...rootDeps };
12
+ overrides.forEach(override => {
13
+ if (override.add) {
14
+ const { name } = git_1.git.parseUrl(override.add);
15
+ if (!name) {
16
+ throw new errors_1.SVError('NOT_A_GIT_URL', { url: override.add });
17
+ }
18
+ next[override.add] = override.version || '*';
19
+ }
20
+ if (override.delete) {
21
+ const key = Object.keys(next)
22
+ .find(depUrl => git_1.git.parseUrl(depUrl).name === override.delete);
23
+ if (!key) {
24
+ throw new errors_1.SVError('ADDON_NOT_FOUND', { name: override.delete });
25
+ }
26
+ delete next[key];
27
+ }
28
+ });
29
+ return next;
30
+ };
31
+ class EntryStore {
32
+ constructor() {
33
+ this.cache = new Map();
34
+ this.urlByName = new Map();
35
+ /* Активны только внутри simulate; вне коллбэка оверрайдов не существует */
36
+ this.overrides = null;
37
+ this.rememberUrl = (name, url) => {
38
+ const current = this.urlByName.get(name);
39
+ if (current && current !== url) {
40
+ throw new errors_1.SVError('ADDON_NOT_FOUND', {
41
+ name,
42
+ urls: [current, url],
43
+ });
44
+ }
45
+ this.urlByName.set(name, url);
46
+ };
47
+ this.normalizeDependencies = (dependencies = {}) => Object.fromEntries(Object.entries(dependencies).map(([depUrl, constraint]) => {
48
+ const { name } = git_1.git.parseUrl(depUrl);
49
+ if (!name) {
50
+ throw new errors_1.SVError('NOT_A_GIT_URL', { url: depUrl });
51
+ }
52
+ this.rememberUrl(name, depUrl);
53
+ return [name, constraint];
54
+ }));
55
+ this.load = async (url, name) => {
56
+ const fetched = await git_1.git.api.fetchVersions(url);
57
+ const versions = {};
58
+ fetched.forEach(({ version, pkg }) => {
59
+ versions[version] = this.normalizeDependencies(pkg?.sv || {});
60
+ });
61
+ return { name, url, versions };
62
+ };
63
+ this.resolveIdentity = (depPath) => {
64
+ const parsed = git_1.git.parseUrl(depPath);
65
+ if (parsed.name) {
66
+ this.rememberUrl(parsed.name, parsed.url);
67
+ return { name: parsed.name, url: parsed.url };
68
+ }
69
+ const url = this.urlByName.get(depPath);
70
+ if (!url) {
71
+ throw new errors_1.SVError('ADDON_NOT_FOUND', { name: depPath });
72
+ }
73
+ return { name: depPath, url };
74
+ };
75
+ /*
76
+ * Патчим клон — сырой энтри в кэше остаётся нетронутым, оверрайды
77
+ * не переживают simulate. add/delete применяются к каждой версии
78
+ * родителя: будто модуль установлен (или удалён) в любой версии.
79
+ */
80
+ this.applyOverrides = (entry) => {
81
+ const related = (this.overrides || [])
82
+ .filter(override => override.parent === entry.name);
83
+ if (!related.length)
84
+ return entry;
85
+ const versions = Object.fromEntries(Object.entries(entry.versions).map(([version, deps]) => {
86
+ const patched = { ...deps };
87
+ related.forEach(override => {
88
+ if (override.add) {
89
+ const { name } = git_1.git.parseUrl(override.add);
90
+ if (!name) {
91
+ throw new errors_1.SVError('NOT_A_GIT_URL', { url: override.add });
92
+ }
93
+ this.rememberUrl(name, override.add);
94
+ patched[name] = override.version || '*';
95
+ }
96
+ if (override.delete) {
97
+ delete patched[override.delete];
98
+ }
99
+ });
100
+ return [version, patched];
101
+ }));
102
+ return { ...entry, versions };
103
+ };
104
+ /*
105
+ * Загружает только один модуль: сразу все его semver-теги и зависимости
106
+ * каждого тега. Сами подзависимости здесь не запрашиваются — PubGrub
107
+ * вызовет fetch(name), только если реально рассмотрит нужную версию.
108
+ */
109
+ this.fetch = (depPath) => {
110
+ let identity;
111
+ try {
112
+ identity = this.resolveIdentity(depPath);
113
+ }
114
+ catch (error) {
115
+ return Promise.reject(error);
116
+ }
117
+ const cached = this.cache.get(identity.url);
118
+ if (cached) {
119
+ return this.overrides ? cached.then(this.applyOverrides) : cached;
120
+ }
121
+ const loading = this.load(identity.url, identity.name);
122
+ this.cache.set(identity.url, loading);
123
+ loading.catch(() => this.cache.delete(identity.url));
124
+ return this.overrides ? loading.then(this.applyOverrides) : loading;
125
+ };
126
+ /*
127
+ * Прогон коллбэка с потенциальными изменениями дерева. Оверрайды без
128
+ * parent превращаются в эффективные rootDeps и уходят аргументом
129
+ * в коллбэк, parent-оверрайды перезаписывают модули на всех fetch'ах
130
+ * внутри. После завершения (в т.ч. по ошибке) оверрайды снимаются.
131
+ */
132
+ this.simulate = async (overrides, rootDeps, cb) => {
133
+ this.overrides = overrides.filter(override => override.parent);
134
+ try {
135
+ const rootOverrides = overrides.filter(override => !override.parent);
136
+ return await cb(applyRootOverrides(rootOverrides, rootDeps));
137
+ }
138
+ finally {
139
+ this.overrides = null;
140
+ }
141
+ };
142
+ this.urlOf = (name) => this.urlByName.get(name);
143
+ /* Изоляция тестов и явное обновление remote-каталога. */
144
+ this.clear = () => {
145
+ this.cache.clear();
146
+ this.urlByName.clear();
147
+ };
148
+ }
149
+ }
150
+ exports.EntryStore = EntryStore;
151
+ exports.entryStore = new EntryStore();
152
+ //# sourceMappingURL=entryStore.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"entryStore.js","sourceRoot":"","sources":["../../src/entryStore.ts"],"names":[],"mappings":"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"}