submodule-version 3.2.0 → 3.2.2
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 +4 -3
- package/dist/runner/runner.js +15 -5
- package/dist/runner/runner.js.map +1 -1
- package/dist/src/sv.d.ts +6 -1
- package/dist/src/sv.js +131 -48
- package/dist/src/sv.js.map +1 -1
- package/package.json +1 -1
- package/runner/runner.ts +21 -5
- package/src/__tests__/sv.test.ts +132 -0
- package/src/sv.ts +172 -62
package/README.md
CHANGED
|
@@ -82,8 +82,8 @@ Or use the [`publish`](#programmatic-api) API, which bumps the version, commits,
|
|
|
82
82
|
## Commands
|
|
83
83
|
|
|
84
84
|
- `npx sv` - Resolve, validate and install/sync all modules (default command)
|
|
85
|
-
- `npx sv put <url> [target] [--ver 1.2.0]` - Install a submodule or change its version (`install`, `i`). Without `target` the module is installed in the project root; `target` is a parent module name. Without `--ver` the highest possible version is selected (as if `'*'` was passed)
|
|
86
|
-
- `npx sv delete <path
|
|
85
|
+
- `npx sv put <url> [target] [--ver 1.2.0] [--no-verify]` - Install a submodule or change its version (`install`, `i`). Without `target` the module is installed in the project root; `target` is a parent module name. Without `--ver` the highest possible version is selected (as if `'*'` was passed). `--no-verify` applies the Git/package.json/npm mutation without PubGrub compatibility checks
|
|
86
|
+
- `npx sv delete <path> [--no-verify]` - Delete a submodule from its parent (project root when the path is a plain name) by path (`remove`, `r`). `--no-verify` skips PubGrub compatibility checks
|
|
87
87
|
- `npx sv list-versions [name] [--installed]` - List available versions of one module, or of every resolved module when `name` is omitted (`ls`). With `--installed` shows the versions actually checked out in the submodules
|
|
88
88
|
- `npx sv update [path]` - Update modules to the latest allowed versions, all of them or a single one by path (`u`)
|
|
89
89
|
- `npx sv publish [module] [--bump release|minor|major] [-m message] [--repo-url git_url]` - Commit, tag and push a new version of a module (or the project itself when `module` is omitted). `--repo-url` is required for the first publish of a module without a git remote (`p`)
|
|
@@ -116,13 +116,14 @@ The constructor accepts `(projectDir, modulesDir?, { githubToken? })`. The modul
|
|
|
116
116
|
|
|
117
117
|
### Installing, updating and deleting modules
|
|
118
118
|
|
|
119
|
-
|
|
119
|
+
By default, `put` and `delete` first run a check resolve and touch the working tree and `package.json` files only when the resolution succeeds. The explicit `dangerous*` variants skip that check.
|
|
120
120
|
|
|
121
121
|
- `sv.put(url, version?, parentName?)` - Install a module or change its version. Instead of `url` you can pass the name of an already installed module. All argument forms are supported: `put(url)`, `put(url, version)`, `put(url, parentName)`, `put(url, version, parentName)`.
|
|
122
122
|
- Without `parentName` the module is installed/updated in the project root and the range is written to the root `package.json#sv`.
|
|
123
123
|
- With `parentName` the module is added to (or updated in) the parent module and the range is written to the parent's own `package.json#sv`, so the change survives publishing the parent.
|
|
124
124
|
- Without `version` the highest possible version is selected, as if `'*'` was passed.
|
|
125
125
|
- `sv.delete(name, parentName?)` - Delete a module from its parent (the project root when `parentName` is omitted); the dependency is removed from the corresponding `package.json#sv` and the submodule is uninstalled.
|
|
126
|
+
- `sv.dangerousPut(url, version?, parentName?)` and `sv.dangerousDelete(name, parentName?)` perform the same Git, `package.json` and `npm install` mutations without running PubGrub. `dangerousPut` checks out the newest local Git tag matching the requested range, ignoring compatibility with the rest of the dependency tree; an untagged module remains on its cloned HEAD.
|
|
126
127
|
- `sv.listVersions(name?)` - With `name` returns the available versions of one package (`string[]`); without it returns `{ [pkgName]: string[] }` for every resolved package.
|
|
127
128
|
|
|
128
129
|
### Simulating changes
|
package/dist/runner/runner.js
CHANGED
|
@@ -19,7 +19,7 @@ const makeEvent = (event, { skipInit = false } = {}) => async (arg) => {
|
|
|
19
19
|
const sv = new src_1.SV(process.cwd(), arg.modulesDir);
|
|
20
20
|
try {
|
|
21
21
|
/* publish умеет работать с ещё не git/npm-инициализированным проектом */
|
|
22
|
-
if (!skipInit) {
|
|
22
|
+
if (!skipInit && arg.verify !== false) {
|
|
23
23
|
await sv.init();
|
|
24
24
|
}
|
|
25
25
|
await event(sv, arg);
|
|
@@ -29,8 +29,9 @@ const makeEvent = (event, { skipInit = false } = {}) => async (arg) => {
|
|
|
29
29
|
}
|
|
30
30
|
};
|
|
31
31
|
const put = makeEvent(async (sv, arg) => {
|
|
32
|
-
const { url: gitUrl, target, ver } = arg;
|
|
33
|
-
|
|
32
|
+
const { url: gitUrl, target, ver, verify } = arg;
|
|
33
|
+
const method = verify === false ? sv.dangerousPut : sv.put;
|
|
34
|
+
await method(gitUrl, ver || target, ver ? target : undefined);
|
|
34
35
|
});
|
|
35
36
|
const update = makeEvent(async (sv, arg) => {
|
|
36
37
|
const { path: modulePath } = arg;
|
|
@@ -46,9 +47,10 @@ const update = makeEvent(async (sv, arg) => {
|
|
|
46
47
|
await sv.put(entry.url, '*', parent);
|
|
47
48
|
});
|
|
48
49
|
const del = makeEvent(async (sv, arg) => {
|
|
49
|
-
const { path: modulePath } = arg;
|
|
50
|
+
const { path: modulePath, verify } = arg;
|
|
50
51
|
const { name, parent } = splitPath(modulePath);
|
|
51
|
-
|
|
52
|
+
const method = verify === false ? sv.dangerousDelete : sv.delete;
|
|
53
|
+
await method(name, parent);
|
|
52
54
|
});
|
|
53
55
|
const listVersions = makeEvent(async (sv, arg) => {
|
|
54
56
|
const { name, installed } = arg;
|
|
@@ -105,10 +107,18 @@ exports.s = yargs_1.default.scriptName('sv')
|
|
|
105
107
|
type: 'string',
|
|
106
108
|
alias: 'v',
|
|
107
109
|
describe: 'Version to install',
|
|
110
|
+
}).option('verify', {
|
|
111
|
+
type: 'boolean',
|
|
112
|
+
default: true,
|
|
113
|
+
describe: 'Verify dependency versions (disable with --no-verify)',
|
|
108
114
|
}), put)
|
|
109
115
|
.command(['delete <path>', 'remove', 'r'], 'Delete submodule by path', y => y.positional('path', {
|
|
110
116
|
type: 'string',
|
|
111
117
|
describe: 'Submodule path (A.B.C)',
|
|
118
|
+
}).option('verify', {
|
|
119
|
+
type: 'boolean',
|
|
120
|
+
default: true,
|
|
121
|
+
describe: 'Verify dependency versions (disable with --no-verify)',
|
|
112
122
|
}), del)
|
|
113
123
|
.command(['list-versions [name]', 'ls'], 'List available versions of all modules or one', y => y.positional('name', {
|
|
114
124
|
type: 'string',
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"runner.js","sourceRoot":"","sources":["../../runner/runner.ts"],"names":[],"mappings":";;;;;;AAAA,kDAA0B;AAC1B,kDAA0B;AAC1B,gCAAqC;AACrC,+BAA4B;AAC5B,iDAA8C;AAE9C,+EAA+E;AAC/E,MAAM,SAAS,GAAG,CAAC,UAAkB,EAAqC,EAAE;IAC1E,MAAM,KAAK,GAAG,UAAU,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IACpC,MAAM,IAAI,GAAG,KAAK,CAAC,GAAG,EAAY,CAAC;IAEnC,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,CAAC,GAAG,EAAE,EAAE,CAAC;AACvC,CAAC,CAAC;AAEF,MAAM,SAAS,GAAG,CAChB,KAA0C,EAC1C,EAAE,QAAQ,GAAG,KAAK,EAAE,GAAG,EAAE,EACzB,EAAE,CAAC,KAAK,EAAE,GAAQ,EAAE,EAAE;IACtB,MAAM,EAAE,GAAG,IAAI,QAAE,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,GAAG,CAAC,UAAU,CAAC,CAAC;IAEjD,IAAI,CAAC;QACH,yEAAyE;QACzE,IAAI,CAAC,QAAQ,EAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"runner.js","sourceRoot":"","sources":["../../runner/runner.ts"],"names":[],"mappings":"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"}
|
package/dist/src/sv.d.ts
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { TPubGrubResult } from './PubGrub';
|
|
2
2
|
export declare class SV {
|
|
3
3
|
private resolution;
|
|
4
|
+
private verifiedResolution;
|
|
4
5
|
private store;
|
|
5
6
|
private explicitModulesDir?;
|
|
6
7
|
constructor(projectDir: string, modulesDir?: string, options?: {
|
|
@@ -9,11 +10,15 @@ export declare class SV {
|
|
|
9
10
|
private syncModulesDir;
|
|
10
11
|
private resolveDeps;
|
|
11
12
|
private syncModules;
|
|
12
|
-
private
|
|
13
|
+
private verify;
|
|
14
|
+
private findModuleUrl;
|
|
15
|
+
private prepareBaseJson;
|
|
13
16
|
init: () => Promise<void>;
|
|
14
17
|
getResolution: () => TPubGrubResult;
|
|
15
18
|
put: (url: string, versionOrParent?: string, parentName?: string) => Promise<void>;
|
|
19
|
+
dangerousPut: (url: string, versionOrParent?: string, parentName?: string) => Promise<void>;
|
|
16
20
|
delete: (name: string, parentName?: string) => Promise<void>;
|
|
21
|
+
dangerousDelete: (name: string, parentName?: string) => Promise<void>;
|
|
17
22
|
listVersions: (name?: string) => Record<string, string[]> | string[];
|
|
18
23
|
hasChanges: (module?: string) => Promise<boolean>;
|
|
19
24
|
hasUncommittedChanges: (module?: string) => Promise<boolean>;
|
package/dist/src/sv.js
CHANGED
|
@@ -19,11 +19,8 @@ const errors_1 = require("./errors");
|
|
|
19
19
|
* мутации обязаны пережить публикацию родителя, поэтому диапазон
|
|
20
20
|
* пишется в его поле sv.
|
|
21
21
|
*/
|
|
22
|
-
const
|
|
23
|
-
const
|
|
24
|
-
if (!parentJson)
|
|
25
|
-
throw new errors_1.SVError('ADDON_NOT_FOUND', { name: parent });
|
|
26
|
-
const sv = { ...(parentJson.sv || {}) };
|
|
22
|
+
const applyOverride = (json, override) => {
|
|
23
|
+
const sv = { ...(json.sv || {}) };
|
|
27
24
|
if (override.add)
|
|
28
25
|
sv[override.add] = override.version || '*';
|
|
29
26
|
if (override.delete) {
|
|
@@ -33,8 +30,7 @@ const updateModuleJson = async (parent, override) => {
|
|
|
33
30
|
throw new errors_1.SVError('ADDON_NOT_FOUND', { name: override.delete });
|
|
34
31
|
delete sv[key];
|
|
35
32
|
}
|
|
36
|
-
|
|
37
|
-
await pkgJSONManager_1.pkgJSONManager.write(parentJson, parent);
|
|
33
|
+
return { ...json, sv };
|
|
38
34
|
};
|
|
39
35
|
/*
|
|
40
36
|
* modulesDir должен быть npm-workspace, иначе сабмодули не попадут
|
|
@@ -61,6 +57,14 @@ const ensureWorkspaces = (baseJson) => {
|
|
|
61
57
|
};
|
|
62
58
|
const MODULES_DIR_FIELD = 'sv-dir';
|
|
63
59
|
const DEFAULT_MODULES_DIR = 'modules';
|
|
60
|
+
const parsePutArgs = (versionOrParent, parentName) => {
|
|
61
|
+
const isVersion = !!versionOrParent
|
|
62
|
+
&& versionUtil_1.versionUtil.validate(versionOrParent, true);
|
|
63
|
+
return {
|
|
64
|
+
range: (isVersion ? versionOrParent : undefined) || '*',
|
|
65
|
+
parent: (isVersion ? parentName : versionOrParent) || undefined,
|
|
66
|
+
};
|
|
67
|
+
};
|
|
64
68
|
/*
|
|
65
69
|
* Уже добавленные сабмодули — источник правды о директории:
|
|
66
70
|
* .gitmodules с единым родителем у всех path (addons/X, addons/Y → addons).
|
|
@@ -79,6 +83,8 @@ const deriveModulesDir = async () => {
|
|
|
79
83
|
class SV {
|
|
80
84
|
constructor(projectDir, modulesDir, options = {}) {
|
|
81
85
|
this.resolution = null;
|
|
86
|
+
/* Safe put передаёт сюда уже выбранную PubGrub версию на время мутации. */
|
|
87
|
+
this.verifiedResolution = null;
|
|
82
88
|
this.store = new entryStore_1.EntryStore();
|
|
83
89
|
/*
|
|
84
90
|
* Директория модулей: явно переданная (CLI/JS) → записанная в
|
|
@@ -127,35 +133,30 @@ class SV {
|
|
|
127
133
|
await Promise.all(removed.map(name => git_1.git.local.rm(name)));
|
|
128
134
|
return changed;
|
|
129
135
|
};
|
|
130
|
-
|
|
131
|
-
* Общий путь мутаций: проверка через resolve внутри simulate, и только
|
|
132
|
-
* если ошибки нет — установка/переключение модулей и правка package.json
|
|
133
|
-
* (корня или родителя).
|
|
134
|
-
*/
|
|
135
|
-
this.apply = async (baseJson, override, parent) => {
|
|
136
|
-
const dirChanged = await this.syncModulesDir(baseJson);
|
|
136
|
+
this.verify = async (baseJson, override) => {
|
|
137
137
|
const rootDeps = (baseJson.sv || {});
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
if (
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
await
|
|
158
|
-
|
|
138
|
+
return this.store.simulate([override], rootDeps, deps => this.resolveDeps(deps));
|
|
139
|
+
};
|
|
140
|
+
this.findModuleUrl = async (urlOrName, parent) => {
|
|
141
|
+
if (git_1.git.parseUrl(urlOrName).name)
|
|
142
|
+
return urlOrName;
|
|
143
|
+
const resolved = this.resolution?.[urlOrName];
|
|
144
|
+
if (resolved)
|
|
145
|
+
return resolved.url;
|
|
146
|
+
const targetJson = await pkgJSONManager_1.pkgJSONManager.read(parent);
|
|
147
|
+
const existing = Object.keys((targetJson?.sv || {}))
|
|
148
|
+
.find(depUrl => git_1.git.parseUrl(depUrl).name === urlOrName);
|
|
149
|
+
if (existing)
|
|
150
|
+
return existing;
|
|
151
|
+
const remote = await git_1.git.local.getRemote(path_1.default.join(runOptions_1.RunOptions.modulesDir, urlOrName));
|
|
152
|
+
if (remote && git_1.git.parseUrl(remote).name)
|
|
153
|
+
return remote;
|
|
154
|
+
throw new errors_1.SVError('NOT_A_GIT_URL', { url: urlOrName });
|
|
155
|
+
};
|
|
156
|
+
this.prepareBaseJson = async (baseJson) => {
|
|
157
|
+
const dirChanged = await this.syncModulesDir(baseJson);
|
|
158
|
+
const workspaceChanged = ensureWorkspaces(baseJson);
|
|
159
|
+
return dirChanged || workspaceChanged;
|
|
159
160
|
};
|
|
160
161
|
this.init = async () => {
|
|
161
162
|
const baseJson = await pkgJSONManager_1.pkgJSONManager.read();
|
|
@@ -193,34 +194,83 @@ class SV {
|
|
|
193
194
|
* версия, если это валидный semver-диапазон, иначе имя родителя.
|
|
194
195
|
*/
|
|
195
196
|
this.put = async (url, versionOrParent, parentName) => {
|
|
196
|
-
const
|
|
197
|
-
&& versionUtil_1.versionUtil.validate(versionOrParent, true);
|
|
198
|
-
const range = (isVersion ? versionOrParent : undefined) || '*';
|
|
199
|
-
const parent = (isVersion ? parentName : versionOrParent) || undefined;
|
|
197
|
+
const { range, parent } = parsePutArgs(versionOrParent, parentName);
|
|
200
198
|
const baseJson = await pkgJSONManager_1.pkgJSONManager.read();
|
|
201
199
|
if (!baseJson)
|
|
202
200
|
throw new errors_1.SVError('NOT_A_NPM');
|
|
201
|
+
await this.syncModulesDir(baseJson);
|
|
203
202
|
/*
|
|
204
203
|
* Вместо url можно передать имя уже установленного модуля —
|
|
205
204
|
* url берём из текущего резолва.
|
|
206
205
|
*/
|
|
207
|
-
|
|
208
|
-
if (!git_1.git.parseUrl(url).name) {
|
|
209
|
-
const existing = this.getResolution()[url];
|
|
210
|
-
if (!existing)
|
|
211
|
-
throw new errors_1.SVError('NOT_A_GIT_URL', { url });
|
|
212
|
-
moduleUrl = existing.url;
|
|
213
|
-
}
|
|
206
|
+
const moduleUrl = await this.findModuleUrl(url, parent);
|
|
214
207
|
if (parent && !this.getResolution()[parent]) {
|
|
215
208
|
throw new errors_1.SVError('ADDON_NOT_FOUND', { name: parent });
|
|
216
209
|
}
|
|
217
|
-
await this.
|
|
210
|
+
const resolution = await this.verify(baseJson, {
|
|
211
|
+
parent,
|
|
212
|
+
add: moduleUrl,
|
|
213
|
+
version: range,
|
|
214
|
+
});
|
|
215
|
+
await this.syncModules(resolution);
|
|
216
|
+
this.verifiedResolution = resolution;
|
|
217
|
+
try {
|
|
218
|
+
await this.dangerousPut(moduleUrl, range, parent);
|
|
219
|
+
this.resolution = resolution;
|
|
220
|
+
}
|
|
221
|
+
finally {
|
|
222
|
+
this.verifiedResolution = null;
|
|
223
|
+
}
|
|
224
|
+
};
|
|
225
|
+
/*
|
|
226
|
+
* Принудительная установка без PubGrub: добавляет отсутствующий git
|
|
227
|
+
* submodule, выбирает подходящий range git-тег, записывает constraint и
|
|
228
|
+
* запускает npm install. Совместимость с остальным деревом не проверяется.
|
|
229
|
+
*/
|
|
230
|
+
this.dangerousPut = async (url, versionOrParent, parentName) => {
|
|
231
|
+
const { range, parent } = parsePutArgs(versionOrParent, parentName);
|
|
232
|
+
const baseJson = await pkgJSONManager_1.pkgJSONManager.read();
|
|
233
|
+
if (!baseJson)
|
|
234
|
+
throw new errors_1.SVError('NOT_A_NPM');
|
|
235
|
+
const baseChanged = await this.prepareBaseJson(baseJson);
|
|
236
|
+
const moduleUrl = await this.findModuleUrl(url, parent);
|
|
237
|
+
const { name } = git_1.git.parseUrl(moduleUrl);
|
|
238
|
+
const targetJson = parent
|
|
239
|
+
? await pkgJSONManager_1.pkgJSONManager.read(parent)
|
|
240
|
+
: baseJson;
|
|
241
|
+
if (!targetJson)
|
|
242
|
+
throw new errors_1.SVError('ADDON_NOT_FOUND', { name: parent });
|
|
243
|
+
/* Проверяем запись до git-мутации, чтобы не оставить лишний submodule. */
|
|
244
|
+
const nextTargetJson = applyOverride(targetJson, { parent, add: moduleUrl, version: range });
|
|
245
|
+
if (!await git_1.git.local.isGitRepo(path_1.default.join(runOptions_1.RunOptions.modulesDir, name))) {
|
|
246
|
+
await git_1.git.local.addSubmodule(moduleUrl);
|
|
247
|
+
}
|
|
248
|
+
const verifiedVersion = this.verifiedResolution?.[name]?.version;
|
|
249
|
+
const versions = verifiedVersion
|
|
250
|
+
? []
|
|
251
|
+
: await git_1.git.local.listVersions(name);
|
|
252
|
+
const version = verifiedVersion
|
|
253
|
+
|| versionUtil_1.versionUtil.latest(versions, [range]);
|
|
254
|
+
if (version && await git_1.git.local.currentVersion(name) !== version) {
|
|
255
|
+
await git_1.git.local.checkout(name, version);
|
|
256
|
+
}
|
|
257
|
+
if (parent) {
|
|
258
|
+
await pkgJSONManager_1.pkgJSONManager.write(nextTargetJson, parent);
|
|
259
|
+
}
|
|
260
|
+
else {
|
|
261
|
+
await pkgJSONManager_1.pkgJSONManager.write(nextTargetJson);
|
|
262
|
+
}
|
|
263
|
+
if (parent && baseChanged)
|
|
264
|
+
await pkgJSONManager_1.pkgJSONManager.write(baseJson);
|
|
265
|
+
this.resolution = null;
|
|
266
|
+
await npm_1.npm.install();
|
|
218
267
|
};
|
|
219
268
|
/* Удаление модуля из родителя (без parentName — из корня проекта). */
|
|
220
269
|
this.delete = async (name, parentName) => {
|
|
221
270
|
const baseJson = await pkgJSONManager_1.pkgJSONManager.read();
|
|
222
271
|
if (!baseJson)
|
|
223
272
|
throw new errors_1.SVError('NOT_A_NPM');
|
|
273
|
+
await this.syncModulesDir(baseJson);
|
|
224
274
|
if (parentName) {
|
|
225
275
|
const parentEntry = this.getResolution()[parentName];
|
|
226
276
|
if (!parentEntry) {
|
|
@@ -230,7 +280,40 @@ class SV {
|
|
|
230
280
|
throw new errors_1.SVError('ADDON_NOT_FOUND', { name });
|
|
231
281
|
}
|
|
232
282
|
}
|
|
233
|
-
|
|
283
|
+
const override = { parent: parentName, delete: name };
|
|
284
|
+
const resolution = await this.verify(baseJson, override);
|
|
285
|
+
await this.syncModules(resolution);
|
|
286
|
+
await this.dangerousDelete(name, parentName);
|
|
287
|
+
this.resolution = resolution;
|
|
288
|
+
};
|
|
289
|
+
/* Принудительное удаление без запуска PubGrub. */
|
|
290
|
+
this.dangerousDelete = async (name, parentName) => {
|
|
291
|
+
const baseJson = await pkgJSONManager_1.pkgJSONManager.read();
|
|
292
|
+
if (!baseJson)
|
|
293
|
+
throw new errors_1.SVError('NOT_A_NPM');
|
|
294
|
+
const baseChanged = await this.prepareBaseJson(baseJson);
|
|
295
|
+
const targetJson = parentName
|
|
296
|
+
? await pkgJSONManager_1.pkgJSONManager.read(parentName)
|
|
297
|
+
: baseJson;
|
|
298
|
+
if (!targetJson) {
|
|
299
|
+
throw new errors_1.SVError('ADDON_NOT_FOUND', { name: parentName });
|
|
300
|
+
}
|
|
301
|
+
const override = { parent: parentName, delete: name };
|
|
302
|
+
/* Проверяем запись до git-мутации, чтобы неизвестное имя было no-op. */
|
|
303
|
+
const nextTargetJson = applyOverride(targetJson, override);
|
|
304
|
+
const dir = path_1.default.join(runOptions_1.RunOptions.modulesDir, name);
|
|
305
|
+
if (await git_1.git.local.isGitRepo(dir))
|
|
306
|
+
await git_1.git.local.rm(name);
|
|
307
|
+
if (parentName) {
|
|
308
|
+
await pkgJSONManager_1.pkgJSONManager.write(nextTargetJson, parentName);
|
|
309
|
+
}
|
|
310
|
+
else {
|
|
311
|
+
await pkgJSONManager_1.pkgJSONManager.write(nextTargetJson);
|
|
312
|
+
}
|
|
313
|
+
if (parentName && baseChanged)
|
|
314
|
+
await pkgJSONManager_1.pkgJSONManager.write(baseJson);
|
|
315
|
+
this.resolution = null;
|
|
316
|
+
await npm_1.npm.install();
|
|
234
317
|
};
|
|
235
318
|
this.listVersions = (name) => {
|
|
236
319
|
const resolution = this.getResolution();
|
package/dist/src/sv.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sv.js","sourceRoot":"","sources":["../../src/sv.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"sv.js","sourceRoot":"","sources":["../../src/sv.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
package/runner/runner.ts
CHANGED
|
@@ -20,7 +20,7 @@ const makeEvent = (
|
|
|
20
20
|
|
|
21
21
|
try {
|
|
22
22
|
/* publish умеет работать с ещё не git/npm-инициализированным проектом */
|
|
23
|
-
if (!skipInit) {
|
|
23
|
+
if (!skipInit && arg.verify !== false) {
|
|
24
24
|
await sv.init();
|
|
25
25
|
}
|
|
26
26
|
|
|
@@ -31,13 +31,16 @@ const makeEvent = (
|
|
|
31
31
|
};
|
|
32
32
|
|
|
33
33
|
const put = makeEvent(async (sv, arg) => {
|
|
34
|
-
const { url: gitUrl, target, ver } = arg as {
|
|
34
|
+
const { url: gitUrl, target, ver, verify } = arg as {
|
|
35
35
|
url: string,
|
|
36
36
|
target?: string,
|
|
37
37
|
ver?: string,
|
|
38
|
+
verify?: boolean,
|
|
38
39
|
};
|
|
39
40
|
|
|
40
|
-
|
|
41
|
+
const method = verify === false ? sv.dangerousPut : sv.put;
|
|
42
|
+
|
|
43
|
+
await method(gitUrl, ver || target, ver ? target : undefined);
|
|
41
44
|
});
|
|
42
45
|
|
|
43
46
|
const update = makeEvent(async (sv, arg) => {
|
|
@@ -59,10 +62,15 @@ const update = makeEvent(async (sv, arg) => {
|
|
|
59
62
|
});
|
|
60
63
|
|
|
61
64
|
const del = makeEvent(async (sv, arg) => {
|
|
62
|
-
const { path: modulePath } = arg as {
|
|
65
|
+
const { path: modulePath, verify } = arg as {
|
|
66
|
+
path: string,
|
|
67
|
+
verify?: boolean,
|
|
68
|
+
};
|
|
63
69
|
const { name, parent } = splitPath(modulePath);
|
|
64
70
|
|
|
65
|
-
|
|
71
|
+
const method = verify === false ? sv.dangerousDelete : sv.delete;
|
|
72
|
+
|
|
73
|
+
await method(name, parent);
|
|
66
74
|
});
|
|
67
75
|
|
|
68
76
|
const listVersions = makeEvent(async (sv, arg) => {
|
|
@@ -162,6 +170,10 @@ export const s = yargs.scriptName('sv')
|
|
|
162
170
|
type: 'string',
|
|
163
171
|
alias: 'v',
|
|
164
172
|
describe: 'Version to install',
|
|
173
|
+
}).option('verify', {
|
|
174
|
+
type: 'boolean',
|
|
175
|
+
default: true,
|
|
176
|
+
describe: 'Verify dependency versions (disable with --no-verify)',
|
|
165
177
|
}),
|
|
166
178
|
put,
|
|
167
179
|
)
|
|
@@ -171,6 +183,10 @@ export const s = yargs.scriptName('sv')
|
|
|
171
183
|
y => y.positional('path', {
|
|
172
184
|
type: 'string',
|
|
173
185
|
describe: 'Submodule path (A.B.C)',
|
|
186
|
+
}).option('verify', {
|
|
187
|
+
type: 'boolean',
|
|
188
|
+
default: true,
|
|
189
|
+
describe: 'Verify dependency versions (disable with --no-verify)',
|
|
174
190
|
}),
|
|
175
191
|
del,
|
|
176
192
|
)
|
package/src/__tests__/sv.test.ts
CHANGED
|
@@ -26,6 +26,8 @@ jest.mock('../git', () => {
|
|
|
26
26
|
checkout: jest.fn(async () => undefined),
|
|
27
27
|
rm: jest.fn(async () => undefined),
|
|
28
28
|
currentVersion: jest.fn(async () => null),
|
|
29
|
+
listVersions: jest.fn(async () => []),
|
|
30
|
+
getRemote: jest.fn(async () => null),
|
|
29
31
|
},
|
|
30
32
|
api: {
|
|
31
33
|
setToken: jest.fn(),
|
|
@@ -76,6 +78,7 @@ beforeEach(() => {
|
|
|
76
78
|
readFileMock.mockRejectedValue(new Error('ENOENT'));
|
|
77
79
|
localMock.isGitRepo.mockResolvedValue(true);
|
|
78
80
|
localMock.currentVersion.mockResolvedValue(null);
|
|
81
|
+
localMock.listVersions.mockResolvedValue([]);
|
|
79
82
|
});
|
|
80
83
|
|
|
81
84
|
afterEach(() => {
|
|
@@ -262,6 +265,7 @@ describe('SV.put', () => {
|
|
|
262
265
|
expect(resolveMock).toHaveBeenCalledWith({ [url('B')]: '^1.2.0' });
|
|
263
266
|
expect(writeMock).toHaveBeenCalledWith({
|
|
264
267
|
sv: { [url('B')]: '^1.2.0' },
|
|
268
|
+
workspaces: ['modules/*'],
|
|
265
269
|
'sv-dir': 'modules',
|
|
266
270
|
});
|
|
267
271
|
expect(localMock.addSubmodule).toHaveBeenCalledWith(url('B'));
|
|
@@ -280,6 +284,7 @@ describe('SV.put', () => {
|
|
|
280
284
|
expect(resolveMock).toHaveBeenCalledWith({ [url('B')]: '*' });
|
|
281
285
|
expect(writeMock).toHaveBeenCalledWith({
|
|
282
286
|
sv: { [url('B')]: '*' },
|
|
287
|
+
workspaces: ['modules/*'],
|
|
283
288
|
'sv-dir': 'modules',
|
|
284
289
|
});
|
|
285
290
|
});
|
|
@@ -387,6 +392,88 @@ describe('SV.put', () => {
|
|
|
387
392
|
|
|
388
393
|
await expect(sv.put(url('B'))).rejects.toThrow('npm failed');
|
|
389
394
|
});
|
|
395
|
+
|
|
396
|
+
it('delegates the verified mutation to dangerousPut', async () => {
|
|
397
|
+
readMock.mockResolvedValue({ sv: {} });
|
|
398
|
+
resolveMock.mockResolvedValue({});
|
|
399
|
+
const sv = new SV('/project');
|
|
400
|
+
|
|
401
|
+
const dangerousPut = jest.spyOn(sv, 'dangerousPut')
|
|
402
|
+
.mockResolvedValue(undefined);
|
|
403
|
+
|
|
404
|
+
await sv.put(url('B'), '^1.0.0');
|
|
405
|
+
|
|
406
|
+
expect(dangerousPut).toHaveBeenCalledWith(
|
|
407
|
+
url('B'),
|
|
408
|
+
'^1.0.0',
|
|
409
|
+
undefined,
|
|
410
|
+
);
|
|
411
|
+
});
|
|
412
|
+
});
|
|
413
|
+
|
|
414
|
+
describe('SV.dangerousPut', () => {
|
|
415
|
+
it('adds and records a module without calling PubGrub', async () => {
|
|
416
|
+
readMock.mockResolvedValue({ sv: {} });
|
|
417
|
+
localMock.isGitRepo.mockResolvedValue(false);
|
|
418
|
+
localMock.listVersions.mockResolvedValue(['1.9.0', '2.0.0', '2.1.0']);
|
|
419
|
+
resolveMock.mockRejectedValue(new Error('version conflict'));
|
|
420
|
+
const sv = new SV('/project');
|
|
421
|
+
|
|
422
|
+
await sv.dangerousPut(url('B'), '^2.0.0');
|
|
423
|
+
|
|
424
|
+
expect(resolveMock).not.toHaveBeenCalled();
|
|
425
|
+
expect(localMock.addSubmodule).toHaveBeenCalledWith(url('B'));
|
|
426
|
+
expect(localMock.checkout).toHaveBeenCalledWith('B', '2.1.0');
|
|
427
|
+
expect(writeMock).toHaveBeenCalledWith({
|
|
428
|
+
sv: { [url('B')]: '^2.0.0' },
|
|
429
|
+
workspaces: ['modules/*'],
|
|
430
|
+
'sv-dir': 'modules',
|
|
431
|
+
});
|
|
432
|
+
expect(npmInstallMock).toHaveBeenCalledTimes(1);
|
|
433
|
+
});
|
|
434
|
+
|
|
435
|
+
it('keeps an untagged module installed when no version matches',
|
|
436
|
+
async () => {
|
|
437
|
+
readMock.mockResolvedValue({ sv: {} });
|
|
438
|
+
localMock.isGitRepo.mockResolvedValue(false);
|
|
439
|
+
localMock.listVersions.mockResolvedValue([]);
|
|
440
|
+
const sv = new SV('/project');
|
|
441
|
+
|
|
442
|
+
await sv.dangerousPut(url('B'), '^2.0.0');
|
|
443
|
+
|
|
444
|
+
expect(localMock.addSubmodule).toHaveBeenCalledWith(url('B'));
|
|
445
|
+
expect(localMock.checkout).not.toHaveBeenCalled();
|
|
446
|
+
expect(writeMock).toHaveBeenCalled();
|
|
447
|
+
expect(npmInstallMock).toHaveBeenCalled();
|
|
448
|
+
});
|
|
449
|
+
|
|
450
|
+
it('resolves an installed module name from package.json without init',
|
|
451
|
+
async () => {
|
|
452
|
+
readMock.mockResolvedValue({ sv: { [url('B')]: '^1.0.0' } });
|
|
453
|
+
const sv = new SV('/project');
|
|
454
|
+
|
|
455
|
+
await sv.dangerousPut('B', '^2.0.0');
|
|
456
|
+
|
|
457
|
+
expect(writeMock).toHaveBeenCalledWith({
|
|
458
|
+
sv: { [url('B')]: '^2.0.0' },
|
|
459
|
+
workspaces: ['modules/*'],
|
|
460
|
+
'sv-dir': 'modules',
|
|
461
|
+
});
|
|
462
|
+
expect(resolveMock).not.toHaveBeenCalled();
|
|
463
|
+
});
|
|
464
|
+
|
|
465
|
+
it('uses the recorded modules dir before touching git', async () => {
|
|
466
|
+
readMock.mockResolvedValue({
|
|
467
|
+
sv: {},
|
|
468
|
+
workspaces: ['addons/*'],
|
|
469
|
+
'sv-dir': 'addons',
|
|
470
|
+
});
|
|
471
|
+
const sv = new SV('/project');
|
|
472
|
+
|
|
473
|
+
await sv.dangerousPut(url('B'));
|
|
474
|
+
|
|
475
|
+
expect(localMock.isGitRepo).toHaveBeenCalledWith('addons/B');
|
|
476
|
+
});
|
|
390
477
|
});
|
|
391
478
|
|
|
392
479
|
describe('SV.delete', () => {
|
|
@@ -463,6 +550,51 @@ describe('SV.delete', () => {
|
|
|
463
550
|
/* resolve не вызывался повторно — только внутри init */
|
|
464
551
|
expect(resolveMock).toHaveBeenCalledTimes(1);
|
|
465
552
|
});
|
|
553
|
+
|
|
554
|
+
it('delegates the verified mutation to dangerousDelete', async () => {
|
|
555
|
+
readMock.mockResolvedValue({ sv: { [url('A')]: '*' } });
|
|
556
|
+
resolveMock.mockResolvedValue({});
|
|
557
|
+
const sv = new SV('/project');
|
|
558
|
+
|
|
559
|
+
const dangerousDelete = jest.spyOn(sv, 'dangerousDelete')
|
|
560
|
+
.mockResolvedValue(undefined);
|
|
561
|
+
|
|
562
|
+
await sv.delete('A');
|
|
563
|
+
|
|
564
|
+
expect(dangerousDelete).toHaveBeenCalledWith('A', undefined);
|
|
565
|
+
});
|
|
566
|
+
});
|
|
567
|
+
|
|
568
|
+
describe('SV.dangerousDelete', () => {
|
|
569
|
+
it('removes and records a module without calling PubGrub', async () => {
|
|
570
|
+
readMock.mockResolvedValue({ sv: { [url('A')]: '*' } });
|
|
571
|
+
resolveMock.mockRejectedValue(new Error('version conflict'));
|
|
572
|
+
const sv = new SV('/project');
|
|
573
|
+
|
|
574
|
+
await sv.dangerousDelete('A');
|
|
575
|
+
|
|
576
|
+
expect(resolveMock).not.toHaveBeenCalled();
|
|
577
|
+
expect(localMock.rm).toHaveBeenCalledWith('A');
|
|
578
|
+
expect(writeMock).toHaveBeenCalledWith({
|
|
579
|
+
sv: {},
|
|
580
|
+
workspaces: ['modules/*'],
|
|
581
|
+
'sv-dir': 'modules',
|
|
582
|
+
});
|
|
583
|
+
expect(npmInstallMock).toHaveBeenCalledTimes(1);
|
|
584
|
+
});
|
|
585
|
+
|
|
586
|
+
it('does not touch git when the dependency is missing', async () => {
|
|
587
|
+
readMock.mockResolvedValue({ sv: {} });
|
|
588
|
+
const sv = new SV('/project');
|
|
589
|
+
|
|
590
|
+
await expect(sv.dangerousDelete('Ghost')).rejects.toMatchObject({
|
|
591
|
+
error: 'ADDON_NOT_FOUND',
|
|
592
|
+
details: { name: 'Ghost' },
|
|
593
|
+
});
|
|
594
|
+
expect(localMock.rm).not.toHaveBeenCalled();
|
|
595
|
+
expect(writeMock).not.toHaveBeenCalled();
|
|
596
|
+
expect(npmInstallMock).not.toHaveBeenCalled();
|
|
597
|
+
});
|
|
466
598
|
});
|
|
467
599
|
|
|
468
600
|
describe('SV.listVersions', () => {
|
package/src/sv.ts
CHANGED
|
@@ -19,15 +19,8 @@ import { SVError } from './errors';
|
|
|
19
19
|
* мутации обязаны пережить публикацию родителя, поэтому диапазон
|
|
20
20
|
* пишется в его поле sv.
|
|
21
21
|
*/
|
|
22
|
-
const
|
|
23
|
-
|
|
24
|
-
override: IOverride,
|
|
25
|
-
): Promise<void> => {
|
|
26
|
-
const parentJson = await pkgJSONManager.read(parent);
|
|
27
|
-
|
|
28
|
-
if (!parentJson) throw new SVError('ADDON_NOT_FOUND', { name: parent });
|
|
29
|
-
|
|
30
|
-
const sv = { ...((parentJson.sv || {}) as TDependencies) };
|
|
22
|
+
const applyOverride = (json: any, override: IOverride): any => {
|
|
23
|
+
const sv = { ...((json.sv || {}) as TDependencies) };
|
|
31
24
|
|
|
32
25
|
if (override.add) sv[override.add] = override.version || '*';
|
|
33
26
|
|
|
@@ -40,8 +33,7 @@ const updateModuleJson = async (
|
|
|
40
33
|
delete sv[key];
|
|
41
34
|
}
|
|
42
35
|
|
|
43
|
-
|
|
44
|
-
await pkgJSONManager.write(parentJson, parent);
|
|
36
|
+
return { ...json, sv };
|
|
45
37
|
};
|
|
46
38
|
|
|
47
39
|
/*
|
|
@@ -78,6 +70,19 @@ const ensureWorkspaces = (baseJson: any): boolean => {
|
|
|
78
70
|
const MODULES_DIR_FIELD = 'sv-dir';
|
|
79
71
|
const DEFAULT_MODULES_DIR = 'modules';
|
|
80
72
|
|
|
73
|
+
const parsePutArgs = (
|
|
74
|
+
versionOrParent?: string,
|
|
75
|
+
parentName?: string,
|
|
76
|
+
): { range: string, parent?: string } => {
|
|
77
|
+
const isVersion = !!versionOrParent
|
|
78
|
+
&& versionUtil.validate(versionOrParent, true);
|
|
79
|
+
|
|
80
|
+
return {
|
|
81
|
+
range: (isVersion ? versionOrParent : undefined) || '*',
|
|
82
|
+
parent: (isVersion ? parentName : versionOrParent) || undefined,
|
|
83
|
+
};
|
|
84
|
+
};
|
|
85
|
+
|
|
81
86
|
/*
|
|
82
87
|
* Уже добавленные сабмодули — источник правды о директории:
|
|
83
88
|
* .gitmodules с единым родителем у всех path (addons/X, addons/Y → addons).
|
|
@@ -103,6 +108,9 @@ const deriveModulesDir = async (): Promise<string | null> => {
|
|
|
103
108
|
export class SV {
|
|
104
109
|
private resolution: TPubGrubResult | null = null;
|
|
105
110
|
|
|
111
|
+
/* Safe put передаёт сюда уже выбранную PubGrub версию на время мутации. */
|
|
112
|
+
private verifiedResolution: TPubGrubResult | null = null;
|
|
113
|
+
|
|
106
114
|
private store = new EntryStore();
|
|
107
115
|
|
|
108
116
|
private explicitModulesDir?: string;
|
|
@@ -183,48 +191,50 @@ export class SV {
|
|
|
183
191
|
return changed;
|
|
184
192
|
};
|
|
185
193
|
|
|
186
|
-
|
|
187
|
-
* Общий путь мутаций: проверка через resolve внутри simulate, и только
|
|
188
|
-
* если ошибки нет — установка/переключение модулей и правка package.json
|
|
189
|
-
* (корня или родителя).
|
|
190
|
-
*/
|
|
191
|
-
private apply = async (
|
|
194
|
+
private verify = async (
|
|
192
195
|
baseJson: any,
|
|
193
196
|
override: IOverride,
|
|
194
|
-
|
|
195
|
-
): Promise<void> => {
|
|
196
|
-
const dirChanged = await this.syncModulesDir(baseJson);
|
|
197
|
+
): Promise<TPubGrubResult> => {
|
|
197
198
|
const rootDeps = (baseJson.sv || {}) as TDependencies;
|
|
198
|
-
let nextRootDeps = rootDeps;
|
|
199
199
|
|
|
200
|
-
|
|
200
|
+
return this.store.simulate(
|
|
201
201
|
[override],
|
|
202
202
|
rootDeps,
|
|
203
|
-
deps =>
|
|
204
|
-
nextRootDeps = deps;
|
|
205
|
-
|
|
206
|
-
return this.resolveDeps(deps);
|
|
207
|
-
},
|
|
203
|
+
deps => this.resolveDeps(deps),
|
|
208
204
|
);
|
|
205
|
+
};
|
|
209
206
|
|
|
210
|
-
|
|
207
|
+
private findModuleUrl = async (
|
|
208
|
+
urlOrName: string,
|
|
209
|
+
parent?: string,
|
|
210
|
+
): Promise<string> => {
|
|
211
|
+
if (git.parseUrl(urlOrName).name) return urlOrName;
|
|
211
212
|
|
|
212
|
-
|
|
213
|
-
await updateModuleJson(parent, override);
|
|
213
|
+
const resolved = this.resolution?.[urlOrName];
|
|
214
214
|
|
|
215
|
-
|
|
216
|
-
} else {
|
|
217
|
-
baseJson.sv = nextRootDeps;
|
|
218
|
-
await pkgJSONManager.write(baseJson);
|
|
219
|
-
}
|
|
215
|
+
if (resolved) return resolved.url;
|
|
220
216
|
|
|
221
|
-
|
|
222
|
-
* package.json уже записан — npm подтянет workspaces и зависимости
|
|
223
|
-
* нового набора модулей.
|
|
224
|
-
*/
|
|
225
|
-
await npm.install();
|
|
217
|
+
const targetJson = await pkgJSONManager.read(parent);
|
|
226
218
|
|
|
227
|
-
|
|
219
|
+
const existing = Object.keys((targetJson?.sv || {}) as TDependencies)
|
|
220
|
+
.find(depUrl => git.parseUrl(depUrl).name === urlOrName);
|
|
221
|
+
|
|
222
|
+
if (existing) return existing;
|
|
223
|
+
|
|
224
|
+
const remote = await git.local.getRemote(
|
|
225
|
+
path.join(RunOptions.modulesDir, urlOrName),
|
|
226
|
+
);
|
|
227
|
+
|
|
228
|
+
if (remote && git.parseUrl(remote).name) return remote;
|
|
229
|
+
|
|
230
|
+
throw new SVError('NOT_A_GIT_URL', { url: urlOrName });
|
|
231
|
+
};
|
|
232
|
+
|
|
233
|
+
private prepareBaseJson = async (baseJson: any): Promise<boolean> => {
|
|
234
|
+
const dirChanged = await this.syncModulesDir(baseJson);
|
|
235
|
+
const workspaceChanged = ensureWorkspaces(baseJson);
|
|
236
|
+
|
|
237
|
+
return dirChanged || workspaceChanged;
|
|
228
238
|
};
|
|
229
239
|
|
|
230
240
|
public init = async (): Promise<void> => {
|
|
@@ -274,38 +284,98 @@ export class SV {
|
|
|
274
284
|
versionOrParent?: string,
|
|
275
285
|
parentName?: string,
|
|
276
286
|
): Promise<void> => {
|
|
277
|
-
const
|
|
278
|
-
&& versionUtil.validate(versionOrParent, true);
|
|
279
|
-
|
|
280
|
-
const range = (isVersion ? versionOrParent : undefined) || '*';
|
|
281
|
-
const parent = (isVersion ? parentName : versionOrParent) || undefined;
|
|
287
|
+
const { range, parent } = parsePutArgs(versionOrParent, parentName);
|
|
282
288
|
const baseJson = await pkgJSONManager.read();
|
|
283
289
|
|
|
284
290
|
if (!baseJson) throw new SVError('NOT_A_NPM');
|
|
285
291
|
|
|
292
|
+
await this.syncModulesDir(baseJson);
|
|
293
|
+
|
|
286
294
|
/*
|
|
287
295
|
* Вместо url можно передать имя уже установленного модуля —
|
|
288
296
|
* url берём из текущего резолва.
|
|
289
297
|
*/
|
|
290
|
-
|
|
298
|
+
const moduleUrl = await this.findModuleUrl(url, parent);
|
|
299
|
+
|
|
300
|
+
if (parent && !this.getResolution()[parent]) {
|
|
301
|
+
throw new SVError('ADDON_NOT_FOUND', { name: parent });
|
|
302
|
+
}
|
|
291
303
|
|
|
292
|
-
|
|
293
|
-
|
|
304
|
+
const resolution = await this.verify(baseJson, {
|
|
305
|
+
parent,
|
|
306
|
+
add: moduleUrl,
|
|
307
|
+
version: range,
|
|
308
|
+
});
|
|
294
309
|
|
|
295
|
-
|
|
310
|
+
await this.syncModules(resolution);
|
|
311
|
+
this.verifiedResolution = resolution;
|
|
296
312
|
|
|
297
|
-
|
|
313
|
+
try {
|
|
314
|
+
await this.dangerousPut(moduleUrl, range, parent);
|
|
315
|
+
this.resolution = resolution;
|
|
316
|
+
} finally {
|
|
317
|
+
this.verifiedResolution = null;
|
|
298
318
|
}
|
|
319
|
+
};
|
|
299
320
|
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
321
|
+
/*
|
|
322
|
+
* Принудительная установка без PubGrub: добавляет отсутствующий git
|
|
323
|
+
* submodule, выбирает подходящий range git-тег, записывает constraint и
|
|
324
|
+
* запускает npm install. Совместимость с остальным деревом не проверяется.
|
|
325
|
+
*/
|
|
326
|
+
public dangerousPut = async (
|
|
327
|
+
url: string,
|
|
328
|
+
versionOrParent?: string,
|
|
329
|
+
parentName?: string,
|
|
330
|
+
): Promise<void> => {
|
|
331
|
+
const { range, parent } = parsePutArgs(versionOrParent, parentName);
|
|
332
|
+
const baseJson = await pkgJSONManager.read();
|
|
333
|
+
|
|
334
|
+
if (!baseJson) throw new SVError('NOT_A_NPM');
|
|
303
335
|
|
|
304
|
-
await this.
|
|
305
|
-
|
|
336
|
+
const baseChanged = await this.prepareBaseJson(baseJson);
|
|
337
|
+
const moduleUrl = await this.findModuleUrl(url, parent);
|
|
338
|
+
const { name } = git.parseUrl(moduleUrl);
|
|
339
|
+
|
|
340
|
+
const targetJson = parent
|
|
341
|
+
? await pkgJSONManager.read(parent)
|
|
342
|
+
: baseJson;
|
|
343
|
+
|
|
344
|
+
if (!targetJson) throw new SVError('ADDON_NOT_FOUND', { name: parent });
|
|
345
|
+
|
|
346
|
+
/* Проверяем запись до git-мутации, чтобы не оставить лишний submodule. */
|
|
347
|
+
const nextTargetJson = applyOverride(
|
|
348
|
+
targetJson,
|
|
306
349
|
{ parent, add: moduleUrl, version: range },
|
|
307
|
-
parent,
|
|
308
350
|
);
|
|
351
|
+
|
|
352
|
+
if (!await git.local.isGitRepo(path.join(RunOptions.modulesDir, name))) {
|
|
353
|
+
await git.local.addSubmodule(moduleUrl);
|
|
354
|
+
}
|
|
355
|
+
|
|
356
|
+
const verifiedVersion = this.verifiedResolution?.[name]?.version;
|
|
357
|
+
|
|
358
|
+
const versions = verifiedVersion
|
|
359
|
+
? []
|
|
360
|
+
: await git.local.listVersions(name);
|
|
361
|
+
|
|
362
|
+
const version = verifiedVersion
|
|
363
|
+
|| versionUtil.latest(versions, [range]);
|
|
364
|
+
|
|
365
|
+
if (version && await git.local.currentVersion(name) !== version) {
|
|
366
|
+
await git.local.checkout(name, version);
|
|
367
|
+
}
|
|
368
|
+
|
|
369
|
+
if (parent) {
|
|
370
|
+
await pkgJSONManager.write(nextTargetJson, parent);
|
|
371
|
+
} else {
|
|
372
|
+
await pkgJSONManager.write(nextTargetJson);
|
|
373
|
+
}
|
|
374
|
+
|
|
375
|
+
if (parent && baseChanged) await pkgJSONManager.write(baseJson);
|
|
376
|
+
|
|
377
|
+
this.resolution = null;
|
|
378
|
+
await npm.install();
|
|
309
379
|
};
|
|
310
380
|
|
|
311
381
|
/* Удаление модуля из родителя (без parentName — из корня проекта). */
|
|
@@ -314,6 +384,8 @@ export class SV {
|
|
|
314
384
|
|
|
315
385
|
if (!baseJson) throw new SVError('NOT_A_NPM');
|
|
316
386
|
|
|
387
|
+
await this.syncModulesDir(baseJson);
|
|
388
|
+
|
|
317
389
|
if (parentName) {
|
|
318
390
|
const parentEntry = this.getResolution()[parentName];
|
|
319
391
|
|
|
@@ -326,11 +398,49 @@ export class SV {
|
|
|
326
398
|
}
|
|
327
399
|
}
|
|
328
400
|
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
);
|
|
401
|
+
const override = { parent: parentName, delete: name };
|
|
402
|
+
const resolution = await this.verify(baseJson, override);
|
|
403
|
+
|
|
404
|
+
await this.syncModules(resolution);
|
|
405
|
+
await this.dangerousDelete(name, parentName);
|
|
406
|
+
this.resolution = resolution;
|
|
407
|
+
};
|
|
408
|
+
|
|
409
|
+
/* Принудительное удаление без запуска PubGrub. */
|
|
410
|
+
public dangerousDelete = async (
|
|
411
|
+
name: string,
|
|
412
|
+
parentName?: string,
|
|
413
|
+
): Promise<void> => {
|
|
414
|
+
const baseJson = await pkgJSONManager.read();
|
|
415
|
+
|
|
416
|
+
if (!baseJson) throw new SVError('NOT_A_NPM');
|
|
417
|
+
|
|
418
|
+
const baseChanged = await this.prepareBaseJson(baseJson);
|
|
419
|
+
|
|
420
|
+
const targetJson = parentName
|
|
421
|
+
? await pkgJSONManager.read(parentName)
|
|
422
|
+
: baseJson;
|
|
423
|
+
|
|
424
|
+
if (!targetJson) {
|
|
425
|
+
throw new SVError('ADDON_NOT_FOUND', { name: parentName });
|
|
426
|
+
}
|
|
427
|
+
|
|
428
|
+
const override = { parent: parentName, delete: name };
|
|
429
|
+
/* Проверяем запись до git-мутации, чтобы неизвестное имя было no-op. */
|
|
430
|
+
const nextTargetJson = applyOverride(targetJson, override);
|
|
431
|
+
const dir = path.join(RunOptions.modulesDir, name);
|
|
432
|
+
|
|
433
|
+
if (await git.local.isGitRepo(dir)) await git.local.rm(name);
|
|
434
|
+
|
|
435
|
+
if (parentName) {
|
|
436
|
+
await pkgJSONManager.write(nextTargetJson, parentName);
|
|
437
|
+
} else {
|
|
438
|
+
await pkgJSONManager.write(nextTargetJson);
|
|
439
|
+
}
|
|
440
|
+
|
|
441
|
+
if (parentName && baseChanged) await pkgJSONManager.write(baseJson);
|
|
442
|
+
this.resolution = null;
|
|
443
|
+
await npm.install();
|
|
334
444
|
};
|
|
335
445
|
|
|
336
446
|
public listVersions = (
|