submodule-version 2.3.2 → 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.
- package/README.md +103 -20
- package/dist/runner/handleErrors/handleErrors.d.ts +1 -1
- package/dist/runner/handleErrors/handleErrors.js +3 -10
- package/dist/runner/handleErrors/handleErrors.js.map +1 -1
- package/dist/runner/index.js +0 -0
- package/dist/runner/runner.d.ts +4 -0
- package/dist/runner/runner.js +91 -37
- package/dist/runner/runner.js.map +1 -1
- package/dist/src/PubGrub/PubGrub.d.ts +28 -0
- package/dist/src/PubGrub/PubGrub.js +366 -0
- package/dist/src/PubGrub/PubGrub.js.map +1 -0
- package/dist/src/PubGrub/index.d.ts +2 -0
- package/dist/src/PubGrub/index.js +7 -0
- package/dist/src/PubGrub/index.js.map +1 -0
- package/dist/src/PubGrub/types.d.ts +56 -0
- package/dist/src/PubGrub/types.js +3 -0
- package/dist/src/PubGrub/types.js.map +1 -0
- package/dist/src/entryStore.d.ts +16 -0
- package/dist/src/entryStore.js +152 -0
- package/dist/src/entryStore.js.map +1 -0
- package/dist/src/errors.d.ts +28 -0
- package/dist/src/errors.js +30 -0
- package/dist/src/errors.js.map +1 -0
- package/dist/src/git/api/GithubError.d.ts +4 -0
- package/dist/src/git/api/GithubError.js +11 -0
- package/dist/src/git/api/GithubError.js.map +1 -0
- package/dist/src/git/api/api.d.ts +8 -0
- package/dist/src/git/api/api.js +133 -0
- package/dist/src/git/api/api.js.map +1 -0
- package/dist/src/git/api/index.d.ts +3 -0
- package/dist/src/git/api/index.js +8 -0
- package/dist/src/git/api/index.js.map +1 -0
- package/dist/src/git/git.d.ts +30 -23
- package/dist/src/git/git.js +8 -258
- package/dist/src/git/git.js.map +1 -1
- package/dist/src/git/index.d.ts +1 -0
- package/dist/src/git/index.js +3 -1
- package/dist/src/git/index.js.map +1 -1
- package/dist/src/git/local/index.d.ts +1 -0
- package/dist/src/git/local/index.js +6 -0
- package/dist/src/git/local/index.js.map +1 -0
- package/dist/src/git/local/local.d.ts +26 -0
- package/dist/src/git/local/local.js +288 -0
- package/dist/src/git/local/local.js.map +1 -0
- package/dist/src/index.d.ts +7 -0
- package/dist/src/index.js +16 -1
- package/dist/src/index.js.map +1 -1
- package/dist/src/printError.d.ts +1 -0
- package/dist/src/printError.js +158 -0
- package/dist/src/printError.js.map +1 -0
- package/dist/src/sv.d.ts +18 -8
- package/dist/src/sv.js +235 -131
- package/dist/src/sv.js.map +1 -1
- package/dist/src/versionUtil/index.d.ts +2 -0
- package/dist/src/versionUtil/index.js +6 -0
- package/dist/src/versionUtil/index.js.map +1 -0
- package/dist/src/versionUtil/versionUtil.d.ts +16 -0
- package/dist/src/versionUtil/versionUtil.js +70 -0
- package/dist/src/versionUtil/versionUtil.js.map +1 -0
- package/package.json +4 -2
- package/runner/handleErrors/handleErrors.ts +3 -10
- package/runner/runner.ts +128 -46
- package/src/PubGrub/PubGrub.ts +578 -0
- package/src/PubGrub/__tests__/PubGrub.test.ts +351 -0
- package/src/PubGrub/index.ts +12 -0
- package/src/PubGrub/types.ts +72 -0
- package/src/__tests__/entryStore.test.ts +248 -0
- package/src/__tests__/printError.test.ts +148 -0
- package/src/__tests__/sv.test.ts +441 -0
- package/src/entryStore.ts +212 -0
- package/src/errors.ts +39 -0
- package/src/git/api/GithubError.ts +5 -0
- package/src/git/api/api.ts +180 -0
- package/src/git/api/index.ts +3 -0
- package/src/git/git.ts +8 -396
- package/src/git/index.ts +1 -0
- package/src/git/local/index.ts +1 -0
- package/src/git/local/local.ts +430 -0
- package/src/index.ts +17 -0
- package/src/printError.ts +189 -0
- package/src/sv.ts +321 -134
- package/src/versionUtil/__tests__/versionUtil.test.ts +62 -0
- package/src/versionUtil/index.ts +2 -0
- package/src/versionUtil/versionUtil.ts +103 -0
- package/tsconfig.json +1 -1
- package/dist/runner/handleErrors/handleBuildGraphError.d.ts +0 -1
- package/dist/runner/handleErrors/handleBuildGraphError.js +0 -42
- package/dist/runner/handleErrors/handleBuildGraphError.js.map +0 -1
- package/dist/runner/handleErrors/handleGitError.d.ts +0 -1
- package/dist/runner/handleErrors/handleGitError.js +0 -27
- package/dist/runner/handleErrors/handleGitError.js.map +0 -1
- package/dist/runner/handleErrors/handleInstallError.d.ts +0 -1
- package/dist/runner/handleErrors/handleInstallError.js +0 -30
- package/dist/runner/handleErrors/handleInstallError.js.map +0 -1
- package/dist/src/__tests__/versionUtil.test.d.ts +0 -1
- package/dist/src/__tests__/versionUtil.test.js +0 -80
- package/dist/src/__tests__/versionUtil.test.js.map +0 -1
- package/dist/src/buildGraph/GraphError.d.ts +0 -11
- package/dist/src/buildGraph/GraphError.js +0 -11
- package/dist/src/buildGraph/GraphError.js.map +0 -1
- package/dist/src/buildGraph/buildGraph.d.ts +0 -8
- package/dist/src/buildGraph/buildGraph.js +0 -100
- package/dist/src/buildGraph/buildGraph.js.map +0 -1
- package/dist/src/buildGraph/index.d.ts +0 -2
- package/dist/src/buildGraph/index.js +0 -8
- package/dist/src/buildGraph/index.js.map +0 -1
- package/dist/src/git/__tests__/parseGitUrl.test.d.ts +0 -1
- package/dist/src/git/__tests__/parseGitUrl.test.js +0 -30
- package/dist/src/git/__tests__/parseGitUrl.test.js.map +0 -1
- package/dist/src/versionUtil.d.ts +0 -13
- package/dist/src/versionUtil.js +0 -79
- package/dist/src/versionUtil.js.map +0 -1
- package/runner/handleErrors/handleBuildGraphError.ts +0 -49
- package/runner/handleErrors/handleGitError.ts +0 -28
- package/runner/handleErrors/handleInstallError.ts +0 -26
- package/src/__tests__/versionUtil.test.ts +0 -96
- package/src/buildGraph/GraphError.ts +0 -12
- package/src/buildGraph/buildGraph.ts +0 -150
- package/src/buildGraph/index.ts +0 -2
- 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,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 @@
|
|
|
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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"}
|