submodule-version 3.1.0 → 3.2.1
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 +5 -3
- package/dist/runner/runner.js +15 -5
- package/dist/runner/runner.js.map +1 -1
- package/dist/src/entryStore.d.ts +1 -0
- package/dist/src/entryStore.js +29 -0
- package/dist/src/entryStore.js.map +1 -1
- package/dist/src/sv.d.ts +5 -1
- package/dist/src/sv.js +114 -48
- package/dist/src/sv.js.map +1 -1
- package/package.json +1 -1
- package/runner/runner.ts +21 -5
- package/src/__tests__/entryStore.test.ts +92 -0
- package/src/__tests__/sv.test.ts +114 -0
- package/src/entryStore.ts +34 -0
- package/src/sv.ts +151 -63
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`)
|
|
@@ -111,17 +111,19 @@ The constructor accepts `(projectDir, modulesDir?, { githubToken? })`. The modul
|
|
|
111
111
|
|
|
112
112
|
- `sv.init()` resolves `package.json#sv` with PubGrub and installs/syncs submodules to the resolved versions. It also adds the modules dir to `workspaces` in `package.json` when it is missing, and runs `npm install` when anything changed. All mutations (`put`, `delete`, updates) run `npm install` automatically after applying.
|
|
113
113
|
- `sv.getResolution()` returns the selected version and selected-version dependencies for every resolved module.
|
|
114
|
+
- The working copy of an installed submodule is the source of truth for its checked-out version: dependencies edited locally but not yet published as a tag take part in the resolution immediately. The overlay applies only to the version tag `HEAD` points at, and only when that version exists on the remote — a `HEAD` without a version tag (mid-publish) or a local-only tag falls back to the remote manifest.
|
|
114
115
|
- `new PubGrub(source).resolve(rootDeps)` runs the resolver with a custom entry source, which is useful for tests and non-GitHub registries.
|
|
115
116
|
|
|
116
117
|
### Installing, updating and deleting modules
|
|
117
118
|
|
|
118
|
-
|
|
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.
|
|
119
120
|
|
|
120
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)`.
|
|
121
122
|
- Without `parentName` the module is installed/updated in the project root and the range is written to the root `package.json#sv`.
|
|
122
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.
|
|
123
124
|
- Without `version` the highest possible version is selected, as if `'*'` was passed.
|
|
124
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` keeps the submodule's current Git HEAD and records the requested range for a later verified resolve.
|
|
125
127
|
- `sv.listVersions(name?)` - With `name` returns the available versions of one package (`string[]`); without it returns `{ [pkgName]: string[] }` for every resolved package.
|
|
126
128
|
|
|
127
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/entryStore.d.ts
CHANGED
package/dist/src/entryStore.js
CHANGED
|
@@ -1,8 +1,15 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
2
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
6
|
exports.entryStore = exports.EntryStore = void 0;
|
|
7
|
+
const path_1 = __importDefault(require("path"));
|
|
4
8
|
const errors_1 = require("./errors");
|
|
5
9
|
const git_1 = require("./git");
|
|
10
|
+
const pkgJSONManager_1 = require("./pkgJSONManager");
|
|
11
|
+
const runOptions_1 = require("./runOptions");
|
|
12
|
+
const versionUtil_1 = require("./versionUtil");
|
|
6
13
|
/*
|
|
7
14
|
* Оверрайды без parent применяются к корню: add добавляет/меняет
|
|
8
15
|
* диапазон по url, delete убирает зависимость по имени модуля.
|
|
@@ -52,12 +59,34 @@ class EntryStore {
|
|
|
52
59
|
this.rememberUrl(name, depUrl);
|
|
53
60
|
return [name, constraint];
|
|
54
61
|
}));
|
|
62
|
+
/*
|
|
63
|
+
* Рабочая копия сабмодуля — источник правды для checkout'нутой версии:
|
|
64
|
+
* зависимости, изменённые локально и ещё не опубликованные тегом,
|
|
65
|
+
* видны резолверу сразу. Применяется только к версии на HEAD (по тегам)
|
|
66
|
+
* и только если такая версия есть в remote-наборе: HEAD без тега
|
|
67
|
+
* (середина publish) или локальный тег вне remote — оверлей пропускается.
|
|
68
|
+
*/
|
|
69
|
+
this.localOverlay = async (name, versions) => {
|
|
70
|
+
if (!runOptions_1.RunOptions.cwd || !runOptions_1.RunOptions.modulesDir)
|
|
71
|
+
return;
|
|
72
|
+
const dir = path_1.default.join(runOptions_1.RunOptions.cwd, runOptions_1.RunOptions.modulesDir, name);
|
|
73
|
+
if (!await git_1.git.local.isGitRepo(dir))
|
|
74
|
+
return;
|
|
75
|
+
const version = versionUtil_1.versionUtil.latest(await git_1.git.local.tagsAtHead(dir));
|
|
76
|
+
if (!version || !versions[version])
|
|
77
|
+
return;
|
|
78
|
+
const pkg = await pkgJSONManager_1.pkgJSONManager.read(name);
|
|
79
|
+
if (!pkg)
|
|
80
|
+
return;
|
|
81
|
+
versions[version] = this.normalizeDependencies(pkg.sv || {});
|
|
82
|
+
};
|
|
55
83
|
this.load = async (url, name) => {
|
|
56
84
|
const fetched = await git_1.git.api.fetchVersions(url);
|
|
57
85
|
const versions = {};
|
|
58
86
|
fetched.forEach(({ version, pkg }) => {
|
|
59
87
|
versions[version] = this.normalizeDependencies(pkg?.sv || {});
|
|
60
88
|
});
|
|
89
|
+
await this.localOverlay(name, versions);
|
|
61
90
|
return { name, url, versions };
|
|
62
91
|
};
|
|
63
92
|
this.resolveIdentity = (depPath) => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"entryStore.js","sourceRoot":"","sources":["../../src/entryStore.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"entryStore.js","sourceRoot":"","sources":["../../src/entryStore.ts"],"names":[],"mappings":"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"}
|
package/dist/src/sv.d.ts
CHANGED
|
@@ -9,11 +9,15 @@ export declare class SV {
|
|
|
9
9
|
private syncModulesDir;
|
|
10
10
|
private resolveDeps;
|
|
11
11
|
private syncModules;
|
|
12
|
-
private
|
|
12
|
+
private verify;
|
|
13
|
+
private findModuleUrl;
|
|
14
|
+
private prepareBaseJson;
|
|
13
15
|
init: () => Promise<void>;
|
|
14
16
|
getResolution: () => TPubGrubResult;
|
|
15
17
|
put: (url: string, versionOrParent?: string, parentName?: string) => Promise<void>;
|
|
18
|
+
dangerousPut: (url: string, versionOrParent?: string, parentName?: string) => Promise<void>;
|
|
16
19
|
delete: (name: string, parentName?: string) => Promise<void>;
|
|
20
|
+
dangerousDelete: (name: string, parentName?: string) => Promise<void>;
|
|
17
21
|
listVersions: (name?: string) => Record<string, string[]> | string[];
|
|
18
22
|
hasChanges: (module?: string) => Promise<boolean>;
|
|
19
23
|
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).
|
|
@@ -127,35 +131,30 @@ class SV {
|
|
|
127
131
|
await Promise.all(removed.map(name => git_1.git.local.rm(name)));
|
|
128
132
|
return changed;
|
|
129
133
|
};
|
|
130
|
-
|
|
131
|
-
* Общий путь мутаций: проверка через resolve внутри simulate, и только
|
|
132
|
-
* если ошибки нет — установка/переключение модулей и правка package.json
|
|
133
|
-
* (корня или родителя).
|
|
134
|
-
*/
|
|
135
|
-
this.apply = async (baseJson, override, parent) => {
|
|
136
|
-
const dirChanged = await this.syncModulesDir(baseJson);
|
|
134
|
+
this.verify = async (baseJson, override) => {
|
|
137
135
|
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
|
-
|
|
136
|
+
return this.store.simulate([override], rootDeps, deps => this.resolveDeps(deps));
|
|
137
|
+
};
|
|
138
|
+
this.findModuleUrl = async (urlOrName, parent) => {
|
|
139
|
+
if (git_1.git.parseUrl(urlOrName).name)
|
|
140
|
+
return urlOrName;
|
|
141
|
+
const resolved = this.resolution?.[urlOrName];
|
|
142
|
+
if (resolved)
|
|
143
|
+
return resolved.url;
|
|
144
|
+
const targetJson = await pkgJSONManager_1.pkgJSONManager.read(parent);
|
|
145
|
+
const existing = Object.keys((targetJson?.sv || {}))
|
|
146
|
+
.find(depUrl => git_1.git.parseUrl(depUrl).name === urlOrName);
|
|
147
|
+
if (existing)
|
|
148
|
+
return existing;
|
|
149
|
+
const remote = await git_1.git.local.getRemote(path_1.default.join(runOptions_1.RunOptions.modulesDir, urlOrName));
|
|
150
|
+
if (remote && git_1.git.parseUrl(remote).name)
|
|
151
|
+
return remote;
|
|
152
|
+
throw new errors_1.SVError('NOT_A_GIT_URL', { url: urlOrName });
|
|
153
|
+
};
|
|
154
|
+
this.prepareBaseJson = async (baseJson) => {
|
|
155
|
+
const dirChanged = await this.syncModulesDir(baseJson);
|
|
156
|
+
const workspaceChanged = ensureWorkspaces(baseJson);
|
|
157
|
+
return dirChanged || workspaceChanged;
|
|
159
158
|
};
|
|
160
159
|
this.init = async () => {
|
|
161
160
|
const baseJson = await pkgJSONManager_1.pkgJSONManager.read();
|
|
@@ -193,34 +192,68 @@ class SV {
|
|
|
193
192
|
* версия, если это валидный semver-диапазон, иначе имя родителя.
|
|
194
193
|
*/
|
|
195
194
|
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;
|
|
195
|
+
const { range, parent } = parsePutArgs(versionOrParent, parentName);
|
|
200
196
|
const baseJson = await pkgJSONManager_1.pkgJSONManager.read();
|
|
201
197
|
if (!baseJson)
|
|
202
198
|
throw new errors_1.SVError('NOT_A_NPM');
|
|
199
|
+
await this.syncModulesDir(baseJson);
|
|
203
200
|
/*
|
|
204
201
|
* Вместо url можно передать имя уже установленного модуля —
|
|
205
202
|
* url берём из текущего резолва.
|
|
206
203
|
*/
|
|
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
|
-
}
|
|
204
|
+
const moduleUrl = await this.findModuleUrl(url, parent);
|
|
214
205
|
if (parent && !this.getResolution()[parent]) {
|
|
215
206
|
throw new errors_1.SVError('ADDON_NOT_FOUND', { name: parent });
|
|
216
207
|
}
|
|
217
|
-
await this.
|
|
208
|
+
const resolution = await this.verify(baseJson, {
|
|
209
|
+
parent,
|
|
210
|
+
add: moduleUrl,
|
|
211
|
+
version: range,
|
|
212
|
+
});
|
|
213
|
+
await this.syncModules(resolution);
|
|
214
|
+
await this.dangerousPut(moduleUrl, range, parent);
|
|
215
|
+
this.resolution = resolution;
|
|
216
|
+
};
|
|
217
|
+
/*
|
|
218
|
+
* Принудительная установка без PubGrub: добавляет отсутствующий git
|
|
219
|
+
* submodule, записывает constraint и запускает npm install. Версию HEAD
|
|
220
|
+
* не переключает — диапазон лишь фиксируется для следующего safe resolve.
|
|
221
|
+
*/
|
|
222
|
+
this.dangerousPut = async (url, versionOrParent, parentName) => {
|
|
223
|
+
const { range, parent } = parsePutArgs(versionOrParent, parentName);
|
|
224
|
+
const baseJson = await pkgJSONManager_1.pkgJSONManager.read();
|
|
225
|
+
if (!baseJson)
|
|
226
|
+
throw new errors_1.SVError('NOT_A_NPM');
|
|
227
|
+
const baseChanged = await this.prepareBaseJson(baseJson);
|
|
228
|
+
const moduleUrl = await this.findModuleUrl(url, parent);
|
|
229
|
+
const { name } = git_1.git.parseUrl(moduleUrl);
|
|
230
|
+
const targetJson = parent
|
|
231
|
+
? await pkgJSONManager_1.pkgJSONManager.read(parent)
|
|
232
|
+
: baseJson;
|
|
233
|
+
if (!targetJson)
|
|
234
|
+
throw new errors_1.SVError('ADDON_NOT_FOUND', { name: parent });
|
|
235
|
+
/* Проверяем запись до git-мутации, чтобы не оставить лишний submodule. */
|
|
236
|
+
const nextTargetJson = applyOverride(targetJson, { parent, add: moduleUrl, version: range });
|
|
237
|
+
if (!await git_1.git.local.isGitRepo(path_1.default.join(runOptions_1.RunOptions.modulesDir, name))) {
|
|
238
|
+
await git_1.git.local.addSubmodule(moduleUrl);
|
|
239
|
+
}
|
|
240
|
+
if (parent) {
|
|
241
|
+
await pkgJSONManager_1.pkgJSONManager.write(nextTargetJson, parent);
|
|
242
|
+
}
|
|
243
|
+
else {
|
|
244
|
+
await pkgJSONManager_1.pkgJSONManager.write(nextTargetJson);
|
|
245
|
+
}
|
|
246
|
+
if (parent && baseChanged)
|
|
247
|
+
await pkgJSONManager_1.pkgJSONManager.write(baseJson);
|
|
248
|
+
this.resolution = null;
|
|
249
|
+
await npm_1.npm.install();
|
|
218
250
|
};
|
|
219
251
|
/* Удаление модуля из родителя (без parentName — из корня проекта). */
|
|
220
252
|
this.delete = async (name, parentName) => {
|
|
221
253
|
const baseJson = await pkgJSONManager_1.pkgJSONManager.read();
|
|
222
254
|
if (!baseJson)
|
|
223
255
|
throw new errors_1.SVError('NOT_A_NPM');
|
|
256
|
+
await this.syncModulesDir(baseJson);
|
|
224
257
|
if (parentName) {
|
|
225
258
|
const parentEntry = this.getResolution()[parentName];
|
|
226
259
|
if (!parentEntry) {
|
|
@@ -230,7 +263,40 @@ class SV {
|
|
|
230
263
|
throw new errors_1.SVError('ADDON_NOT_FOUND', { name });
|
|
231
264
|
}
|
|
232
265
|
}
|
|
233
|
-
|
|
266
|
+
const override = { parent: parentName, delete: name };
|
|
267
|
+
const resolution = await this.verify(baseJson, override);
|
|
268
|
+
await this.syncModules(resolution);
|
|
269
|
+
await this.dangerousDelete(name, parentName);
|
|
270
|
+
this.resolution = resolution;
|
|
271
|
+
};
|
|
272
|
+
/* Принудительное удаление без запуска PubGrub. */
|
|
273
|
+
this.dangerousDelete = async (name, parentName) => {
|
|
274
|
+
const baseJson = await pkgJSONManager_1.pkgJSONManager.read();
|
|
275
|
+
if (!baseJson)
|
|
276
|
+
throw new errors_1.SVError('NOT_A_NPM');
|
|
277
|
+
const baseChanged = await this.prepareBaseJson(baseJson);
|
|
278
|
+
const targetJson = parentName
|
|
279
|
+
? await pkgJSONManager_1.pkgJSONManager.read(parentName)
|
|
280
|
+
: baseJson;
|
|
281
|
+
if (!targetJson) {
|
|
282
|
+
throw new errors_1.SVError('ADDON_NOT_FOUND', { name: parentName });
|
|
283
|
+
}
|
|
284
|
+
const override = { parent: parentName, delete: name };
|
|
285
|
+
/* Проверяем запись до git-мутации, чтобы неизвестное имя было no-op. */
|
|
286
|
+
const nextTargetJson = applyOverride(targetJson, override);
|
|
287
|
+
const dir = path_1.default.join(runOptions_1.RunOptions.modulesDir, name);
|
|
288
|
+
if (await git_1.git.local.isGitRepo(dir))
|
|
289
|
+
await git_1.git.local.rm(name);
|
|
290
|
+
if (parentName) {
|
|
291
|
+
await pkgJSONManager_1.pkgJSONManager.write(nextTargetJson, parentName);
|
|
292
|
+
}
|
|
293
|
+
else {
|
|
294
|
+
await pkgJSONManager_1.pkgJSONManager.write(nextTargetJson);
|
|
295
|
+
}
|
|
296
|
+
if (parentName && baseChanged)
|
|
297
|
+
await pkgJSONManager_1.pkgJSONManager.write(baseJson);
|
|
298
|
+
this.resolution = null;
|
|
299
|
+
await npm_1.npm.install();
|
|
234
300
|
};
|
|
235
301
|
this.listVersions = (name) => {
|
|
236
302
|
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
|
)
|
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
import { entryStore } from '../entryStore';
|
|
2
2
|
import { git } from '../git';
|
|
3
|
+
import { pkgJSONManager } from '../pkgJSONManager';
|
|
4
|
+
import { RunOptions } from '../runOptions';
|
|
3
5
|
|
|
4
6
|
jest.mock('../git', () => {
|
|
5
7
|
const actual = jest.requireActual('../git');
|
|
@@ -9,11 +11,21 @@ jest.mock('../git', () => {
|
|
|
9
11
|
git: {
|
|
10
12
|
...actual.git,
|
|
11
13
|
api: { fetchVersions: jest.fn() },
|
|
14
|
+
local: {
|
|
15
|
+
...actual.git.local,
|
|
16
|
+
isGitRepo: jest.fn(),
|
|
17
|
+
tagsAtHead: jest.fn(),
|
|
18
|
+
},
|
|
12
19
|
},
|
|
13
20
|
};
|
|
14
21
|
});
|
|
15
22
|
|
|
23
|
+
jest.mock('../pkgJSONManager');
|
|
24
|
+
|
|
16
25
|
const fetchVersionsMock = git.api.fetchVersions as jest.Mock;
|
|
26
|
+
const isGitRepoMock = git.local.isGitRepo as jest.Mock;
|
|
27
|
+
const tagsAtHeadMock = git.local.tagsAtHead as jest.Mock;
|
|
28
|
+
const readPkgMock = pkgJSONManager.read as jest.Mock;
|
|
17
29
|
const url = (name: string) => `git@git:repo/${name}.git`;
|
|
18
30
|
|
|
19
31
|
beforeEach(() => {
|
|
@@ -246,3 +258,83 @@ describe('entryStore.simulate', () => {
|
|
|
246
258
|
expect(cb).not.toHaveBeenCalled();
|
|
247
259
|
});
|
|
248
260
|
});
|
|
261
|
+
|
|
262
|
+
describe('entryStore local overlay', () => {
|
|
263
|
+
beforeEach(() => {
|
|
264
|
+
RunOptions.cwd = '/project';
|
|
265
|
+
RunOptions.modulesDir = 'addons';
|
|
266
|
+
});
|
|
267
|
+
|
|
268
|
+
afterEach(() => {
|
|
269
|
+
RunOptions.cwd = '';
|
|
270
|
+
RunOptions.modulesDir = '';
|
|
271
|
+
});
|
|
272
|
+
|
|
273
|
+
it('overlays the local manifest on the checked-out version', async () => {
|
|
274
|
+
fetchVersionsMock.mockResolvedValueOnce([
|
|
275
|
+
{ version: '1.0.0', pkg: { sv: { [url('C')]: '^1.0.0' } } },
|
|
276
|
+
{ version: '2.0.0', pkg: { sv: { [url('C')]: '^2.0.0' } } },
|
|
277
|
+
]);
|
|
278
|
+
isGitRepoMock.mockResolvedValueOnce(true);
|
|
279
|
+
tagsAtHeadMock.mockResolvedValueOnce(['1.0.0']);
|
|
280
|
+
readPkgMock.mockResolvedValueOnce({ sv: { [url('B')]: '^0.2.0' } });
|
|
281
|
+
|
|
282
|
+
const entry = await entryStore.fetch(url('A'));
|
|
283
|
+
|
|
284
|
+
expect(entry.versions['1.0.0']).toEqual({ B: '^0.2.0' });
|
|
285
|
+
expect(entry.versions['2.0.0']).toEqual({ C: '^2.0.0' });
|
|
286
|
+
expect(entryStore.urlOf('B')).toBe(url('B'));
|
|
287
|
+
});
|
|
288
|
+
|
|
289
|
+
it('keeps the remote manifest when HEAD has no version tag', async () => {
|
|
290
|
+
fetchVersionsMock.mockResolvedValueOnce([
|
|
291
|
+
{ version: '1.0.0', pkg: { sv: { [url('C')]: '^1.0.0' } } },
|
|
292
|
+
]);
|
|
293
|
+
isGitRepoMock.mockResolvedValueOnce(true);
|
|
294
|
+
tagsAtHeadMock.mockResolvedValueOnce([]);
|
|
295
|
+
|
|
296
|
+
const entry = await entryStore.fetch(url('A'));
|
|
297
|
+
|
|
298
|
+
expect(entry.versions['1.0.0']).toEqual({ C: '^1.0.0' });
|
|
299
|
+
expect(readPkgMock).not.toHaveBeenCalled();
|
|
300
|
+
});
|
|
301
|
+
|
|
302
|
+
it('keeps the remote manifest when the module is not installed', async () => {
|
|
303
|
+
fetchVersionsMock.mockResolvedValueOnce([
|
|
304
|
+
{ version: '1.0.0', pkg: { sv: { [url('C')]: '^1.0.0' } } },
|
|
305
|
+
]);
|
|
306
|
+
isGitRepoMock.mockResolvedValueOnce(false);
|
|
307
|
+
|
|
308
|
+
const entry = await entryStore.fetch(url('A'));
|
|
309
|
+
|
|
310
|
+
expect(entry.versions['1.0.0']).toEqual({ C: '^1.0.0' });
|
|
311
|
+
expect(tagsAtHeadMock).not.toHaveBeenCalled();
|
|
312
|
+
});
|
|
313
|
+
|
|
314
|
+
it('skips the overlay when the local tag is not on remote', async () => {
|
|
315
|
+
fetchVersionsMock.mockResolvedValueOnce([
|
|
316
|
+
{ version: '1.0.0', pkg: { sv: { [url('C')]: '^1.0.0' } } },
|
|
317
|
+
]);
|
|
318
|
+
isGitRepoMock.mockResolvedValueOnce(true);
|
|
319
|
+
tagsAtHeadMock.mockResolvedValueOnce(['9.9.9']);
|
|
320
|
+
|
|
321
|
+
const entry = await entryStore.fetch(url('A'));
|
|
322
|
+
|
|
323
|
+
expect(entry.versions['1.0.0']).toEqual({ C: '^1.0.0' });
|
|
324
|
+
expect(entry.versions['9.9.9']).toBeUndefined();
|
|
325
|
+
expect(readPkgMock).not.toHaveBeenCalled();
|
|
326
|
+
});
|
|
327
|
+
|
|
328
|
+
it('keeps the remote manifest without a local package.json', async () => {
|
|
329
|
+
fetchVersionsMock.mockResolvedValueOnce([
|
|
330
|
+
{ version: '1.0.0', pkg: { sv: { [url('C')]: '^1.0.0' } } },
|
|
331
|
+
]);
|
|
332
|
+
isGitRepoMock.mockResolvedValueOnce(true);
|
|
333
|
+
tagsAtHeadMock.mockResolvedValueOnce(['1.0.0']);
|
|
334
|
+
readPkgMock.mockResolvedValueOnce(null);
|
|
335
|
+
|
|
336
|
+
const entry = await entryStore.fetch(url('A'));
|
|
337
|
+
|
|
338
|
+
expect(entry.versions['1.0.0']).toEqual({ C: '^1.0.0' });
|
|
339
|
+
});
|
|
340
|
+
});
|
package/src/__tests__/sv.test.ts
CHANGED
|
@@ -26,6 +26,7 @@ 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
|
+
getRemote: jest.fn(async () => null),
|
|
29
30
|
},
|
|
30
31
|
api: {
|
|
31
32
|
setToken: jest.fn(),
|
|
@@ -262,6 +263,7 @@ describe('SV.put', () => {
|
|
|
262
263
|
expect(resolveMock).toHaveBeenCalledWith({ [url('B')]: '^1.2.0' });
|
|
263
264
|
expect(writeMock).toHaveBeenCalledWith({
|
|
264
265
|
sv: { [url('B')]: '^1.2.0' },
|
|
266
|
+
workspaces: ['modules/*'],
|
|
265
267
|
'sv-dir': 'modules',
|
|
266
268
|
});
|
|
267
269
|
expect(localMock.addSubmodule).toHaveBeenCalledWith(url('B'));
|
|
@@ -280,6 +282,7 @@ describe('SV.put', () => {
|
|
|
280
282
|
expect(resolveMock).toHaveBeenCalledWith({ [url('B')]: '*' });
|
|
281
283
|
expect(writeMock).toHaveBeenCalledWith({
|
|
282
284
|
sv: { [url('B')]: '*' },
|
|
285
|
+
workspaces: ['modules/*'],
|
|
283
286
|
'sv-dir': 'modules',
|
|
284
287
|
});
|
|
285
288
|
});
|
|
@@ -387,6 +390,72 @@ describe('SV.put', () => {
|
|
|
387
390
|
|
|
388
391
|
await expect(sv.put(url('B'))).rejects.toThrow('npm failed');
|
|
389
392
|
});
|
|
393
|
+
|
|
394
|
+
it('delegates the verified mutation to dangerousPut', async () => {
|
|
395
|
+
readMock.mockResolvedValue({ sv: {} });
|
|
396
|
+
resolveMock.mockResolvedValue({});
|
|
397
|
+
const sv = new SV('/project');
|
|
398
|
+
|
|
399
|
+
const dangerousPut = jest.spyOn(sv, 'dangerousPut')
|
|
400
|
+
.mockResolvedValue(undefined);
|
|
401
|
+
|
|
402
|
+
await sv.put(url('B'), '^1.0.0');
|
|
403
|
+
|
|
404
|
+
expect(dangerousPut).toHaveBeenCalledWith(
|
|
405
|
+
url('B'),
|
|
406
|
+
'^1.0.0',
|
|
407
|
+
undefined,
|
|
408
|
+
);
|
|
409
|
+
});
|
|
410
|
+
});
|
|
411
|
+
|
|
412
|
+
describe('SV.dangerousPut', () => {
|
|
413
|
+
it('adds and records a module without calling PubGrub', async () => {
|
|
414
|
+
readMock.mockResolvedValue({ sv: {} });
|
|
415
|
+
localMock.isGitRepo.mockResolvedValue(false);
|
|
416
|
+
resolveMock.mockRejectedValue(new Error('version conflict'));
|
|
417
|
+
const sv = new SV('/project');
|
|
418
|
+
|
|
419
|
+
await sv.dangerousPut(url('B'), '^2.0.0');
|
|
420
|
+
|
|
421
|
+
expect(resolveMock).not.toHaveBeenCalled();
|
|
422
|
+
expect(localMock.addSubmodule).toHaveBeenCalledWith(url('B'));
|
|
423
|
+
expect(localMock.checkout).not.toHaveBeenCalled();
|
|
424
|
+
expect(writeMock).toHaveBeenCalledWith({
|
|
425
|
+
sv: { [url('B')]: '^2.0.0' },
|
|
426
|
+
workspaces: ['modules/*'],
|
|
427
|
+
'sv-dir': 'modules',
|
|
428
|
+
});
|
|
429
|
+
expect(npmInstallMock).toHaveBeenCalledTimes(1);
|
|
430
|
+
});
|
|
431
|
+
|
|
432
|
+
it('resolves an installed module name from package.json without init',
|
|
433
|
+
async () => {
|
|
434
|
+
readMock.mockResolvedValue({ sv: { [url('B')]: '^1.0.0' } });
|
|
435
|
+
const sv = new SV('/project');
|
|
436
|
+
|
|
437
|
+
await sv.dangerousPut('B', '^2.0.0');
|
|
438
|
+
|
|
439
|
+
expect(writeMock).toHaveBeenCalledWith({
|
|
440
|
+
sv: { [url('B')]: '^2.0.0' },
|
|
441
|
+
workspaces: ['modules/*'],
|
|
442
|
+
'sv-dir': 'modules',
|
|
443
|
+
});
|
|
444
|
+
expect(resolveMock).not.toHaveBeenCalled();
|
|
445
|
+
});
|
|
446
|
+
|
|
447
|
+
it('uses the recorded modules dir before touching git', async () => {
|
|
448
|
+
readMock.mockResolvedValue({
|
|
449
|
+
sv: {},
|
|
450
|
+
workspaces: ['addons/*'],
|
|
451
|
+
'sv-dir': 'addons',
|
|
452
|
+
});
|
|
453
|
+
const sv = new SV('/project');
|
|
454
|
+
|
|
455
|
+
await sv.dangerousPut(url('B'));
|
|
456
|
+
|
|
457
|
+
expect(localMock.isGitRepo).toHaveBeenCalledWith('addons/B');
|
|
458
|
+
});
|
|
390
459
|
});
|
|
391
460
|
|
|
392
461
|
describe('SV.delete', () => {
|
|
@@ -463,6 +532,51 @@ describe('SV.delete', () => {
|
|
|
463
532
|
/* resolve не вызывался повторно — только внутри init */
|
|
464
533
|
expect(resolveMock).toHaveBeenCalledTimes(1);
|
|
465
534
|
});
|
|
535
|
+
|
|
536
|
+
it('delegates the verified mutation to dangerousDelete', async () => {
|
|
537
|
+
readMock.mockResolvedValue({ sv: { [url('A')]: '*' } });
|
|
538
|
+
resolveMock.mockResolvedValue({});
|
|
539
|
+
const sv = new SV('/project');
|
|
540
|
+
|
|
541
|
+
const dangerousDelete = jest.spyOn(sv, 'dangerousDelete')
|
|
542
|
+
.mockResolvedValue(undefined);
|
|
543
|
+
|
|
544
|
+
await sv.delete('A');
|
|
545
|
+
|
|
546
|
+
expect(dangerousDelete).toHaveBeenCalledWith('A', undefined);
|
|
547
|
+
});
|
|
548
|
+
});
|
|
549
|
+
|
|
550
|
+
describe('SV.dangerousDelete', () => {
|
|
551
|
+
it('removes and records a module without calling PubGrub', async () => {
|
|
552
|
+
readMock.mockResolvedValue({ sv: { [url('A')]: '*' } });
|
|
553
|
+
resolveMock.mockRejectedValue(new Error('version conflict'));
|
|
554
|
+
const sv = new SV('/project');
|
|
555
|
+
|
|
556
|
+
await sv.dangerousDelete('A');
|
|
557
|
+
|
|
558
|
+
expect(resolveMock).not.toHaveBeenCalled();
|
|
559
|
+
expect(localMock.rm).toHaveBeenCalledWith('A');
|
|
560
|
+
expect(writeMock).toHaveBeenCalledWith({
|
|
561
|
+
sv: {},
|
|
562
|
+
workspaces: ['modules/*'],
|
|
563
|
+
'sv-dir': 'modules',
|
|
564
|
+
});
|
|
565
|
+
expect(npmInstallMock).toHaveBeenCalledTimes(1);
|
|
566
|
+
});
|
|
567
|
+
|
|
568
|
+
it('does not touch git when the dependency is missing', async () => {
|
|
569
|
+
readMock.mockResolvedValue({ sv: {} });
|
|
570
|
+
const sv = new SV('/project');
|
|
571
|
+
|
|
572
|
+
await expect(sv.dangerousDelete('Ghost')).rejects.toMatchObject({
|
|
573
|
+
error: 'ADDON_NOT_FOUND',
|
|
574
|
+
details: { name: 'Ghost' },
|
|
575
|
+
});
|
|
576
|
+
expect(localMock.rm).not.toHaveBeenCalled();
|
|
577
|
+
expect(writeMock).not.toHaveBeenCalled();
|
|
578
|
+
expect(npmInstallMock).not.toHaveBeenCalled();
|
|
579
|
+
});
|
|
466
580
|
});
|
|
467
581
|
|
|
468
582
|
describe('SV.listVersions', () => {
|
package/src/entryStore.ts
CHANGED
|
@@ -1,5 +1,9 @@
|
|
|
1
|
+
import path from 'path';
|
|
1
2
|
import { SVError } from './errors';
|
|
2
3
|
import { git } from './git';
|
|
4
|
+
import { pkgJSONManager } from './pkgJSONManager';
|
|
5
|
+
import { RunOptions } from './runOptions';
|
|
6
|
+
import { versionUtil } from './versionUtil';
|
|
3
7
|
import type {
|
|
4
8
|
IEntrySource,
|
|
5
9
|
IOverride,
|
|
@@ -80,6 +84,34 @@ export class EntryStore implements IEntrySource {
|
|
|
80
84
|
}),
|
|
81
85
|
);
|
|
82
86
|
|
|
87
|
+
/*
|
|
88
|
+
* Рабочая копия сабмодуля — источник правды для checkout'нутой версии:
|
|
89
|
+
* зависимости, изменённые локально и ещё не опубликованные тегом,
|
|
90
|
+
* видны резолверу сразу. Применяется только к версии на HEAD (по тегам)
|
|
91
|
+
* и только если такая версия есть в remote-наборе: HEAD без тега
|
|
92
|
+
* (середина publish) или локальный тег вне remote — оверлей пропускается.
|
|
93
|
+
*/
|
|
94
|
+
private localOverlay = async (
|
|
95
|
+
name: string,
|
|
96
|
+
versions: Record<string, TDependencies>,
|
|
97
|
+
): Promise<void> => {
|
|
98
|
+
if (!RunOptions.cwd || !RunOptions.modulesDir) return;
|
|
99
|
+
|
|
100
|
+
const dir = path.join(RunOptions.cwd, RunOptions.modulesDir, name);
|
|
101
|
+
|
|
102
|
+
if (!await git.local.isGitRepo(dir)) return;
|
|
103
|
+
|
|
104
|
+
const version = versionUtil.latest(await git.local.tagsAtHead(dir));
|
|
105
|
+
|
|
106
|
+
if (!version || !versions[version]) return;
|
|
107
|
+
|
|
108
|
+
const pkg = await pkgJSONManager.read(name);
|
|
109
|
+
|
|
110
|
+
if (!pkg) return;
|
|
111
|
+
|
|
112
|
+
versions[version] = this.normalizeDependencies(pkg.sv || {});
|
|
113
|
+
};
|
|
114
|
+
|
|
83
115
|
private load = async (url: string, name: string): Promise<IPackageEntry> => {
|
|
84
116
|
const fetched = await git.api.fetchVersions(url);
|
|
85
117
|
const versions: Record<string, TDependencies> = {};
|
|
@@ -88,6 +120,8 @@ export class EntryStore implements IEntrySource {
|
|
|
88
120
|
versions[version] = this.normalizeDependencies(pkg?.sv || {});
|
|
89
121
|
});
|
|
90
122
|
|
|
123
|
+
await this.localOverlay(name, versions);
|
|
124
|
+
|
|
91
125
|
return { name, url, versions };
|
|
92
126
|
};
|
|
93
127
|
|
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).
|
|
@@ -183,48 +188,50 @@ export class SV {
|
|
|
183
188
|
return changed;
|
|
184
189
|
};
|
|
185
190
|
|
|
186
|
-
|
|
187
|
-
* Общий путь мутаций: проверка через resolve внутри simulate, и только
|
|
188
|
-
* если ошибки нет — установка/переключение модулей и правка package.json
|
|
189
|
-
* (корня или родителя).
|
|
190
|
-
*/
|
|
191
|
-
private apply = async (
|
|
191
|
+
private verify = async (
|
|
192
192
|
baseJson: any,
|
|
193
193
|
override: IOverride,
|
|
194
|
-
|
|
195
|
-
): Promise<void> => {
|
|
196
|
-
const dirChanged = await this.syncModulesDir(baseJson);
|
|
194
|
+
): Promise<TPubGrubResult> => {
|
|
197
195
|
const rootDeps = (baseJson.sv || {}) as TDependencies;
|
|
198
|
-
let nextRootDeps = rootDeps;
|
|
199
196
|
|
|
200
|
-
|
|
197
|
+
return this.store.simulate(
|
|
201
198
|
[override],
|
|
202
199
|
rootDeps,
|
|
203
|
-
deps =>
|
|
204
|
-
nextRootDeps = deps;
|
|
205
|
-
|
|
206
|
-
return this.resolveDeps(deps);
|
|
207
|
-
},
|
|
200
|
+
deps => this.resolveDeps(deps),
|
|
208
201
|
);
|
|
202
|
+
};
|
|
209
203
|
|
|
210
|
-
|
|
204
|
+
private findModuleUrl = async (
|
|
205
|
+
urlOrName: string,
|
|
206
|
+
parent?: string,
|
|
207
|
+
): Promise<string> => {
|
|
208
|
+
if (git.parseUrl(urlOrName).name) return urlOrName;
|
|
211
209
|
|
|
212
|
-
|
|
213
|
-
await updateModuleJson(parent, override);
|
|
210
|
+
const resolved = this.resolution?.[urlOrName];
|
|
214
211
|
|
|
215
|
-
|
|
216
|
-
} else {
|
|
217
|
-
baseJson.sv = nextRootDeps;
|
|
218
|
-
await pkgJSONManager.write(baseJson);
|
|
219
|
-
}
|
|
212
|
+
if (resolved) return resolved.url;
|
|
220
213
|
|
|
221
|
-
|
|
222
|
-
* package.json уже записан — npm подтянет workspaces и зависимости
|
|
223
|
-
* нового набора модулей.
|
|
224
|
-
*/
|
|
225
|
-
await npm.install();
|
|
214
|
+
const targetJson = await pkgJSONManager.read(parent);
|
|
226
215
|
|
|
227
|
-
|
|
216
|
+
const existing = Object.keys((targetJson?.sv || {}) as TDependencies)
|
|
217
|
+
.find(depUrl => git.parseUrl(depUrl).name === urlOrName);
|
|
218
|
+
|
|
219
|
+
if (existing) return existing;
|
|
220
|
+
|
|
221
|
+
const remote = await git.local.getRemote(
|
|
222
|
+
path.join(RunOptions.modulesDir, urlOrName),
|
|
223
|
+
);
|
|
224
|
+
|
|
225
|
+
if (remote && git.parseUrl(remote).name) return remote;
|
|
226
|
+
|
|
227
|
+
throw new SVError('NOT_A_GIT_URL', { url: urlOrName });
|
|
228
|
+
};
|
|
229
|
+
|
|
230
|
+
private prepareBaseJson = async (baseJson: any): Promise<boolean> => {
|
|
231
|
+
const dirChanged = await this.syncModulesDir(baseJson);
|
|
232
|
+
const workspaceChanged = ensureWorkspaces(baseJson);
|
|
233
|
+
|
|
234
|
+
return dirChanged || workspaceChanged;
|
|
228
235
|
};
|
|
229
236
|
|
|
230
237
|
public init = async (): Promise<void> => {
|
|
@@ -274,38 +281,79 @@ export class SV {
|
|
|
274
281
|
versionOrParent?: string,
|
|
275
282
|
parentName?: string,
|
|
276
283
|
): Promise<void> => {
|
|
277
|
-
const
|
|
278
|
-
&& versionUtil.validate(versionOrParent, true);
|
|
279
|
-
|
|
280
|
-
const range = (isVersion ? versionOrParent : undefined) || '*';
|
|
281
|
-
const parent = (isVersion ? parentName : versionOrParent) || undefined;
|
|
284
|
+
const { range, parent } = parsePutArgs(versionOrParent, parentName);
|
|
282
285
|
const baseJson = await pkgJSONManager.read();
|
|
283
286
|
|
|
284
287
|
if (!baseJson) throw new SVError('NOT_A_NPM');
|
|
285
288
|
|
|
289
|
+
await this.syncModulesDir(baseJson);
|
|
290
|
+
|
|
286
291
|
/*
|
|
287
292
|
* Вместо url можно передать имя уже установленного модуля —
|
|
288
293
|
* url берём из текущего резолва.
|
|
289
294
|
*/
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
if (!git.parseUrl(url).name) {
|
|
293
|
-
const existing = this.getResolution()[url];
|
|
294
|
-
|
|
295
|
-
if (!existing) throw new SVError('NOT_A_GIT_URL', { url });
|
|
296
|
-
|
|
297
|
-
moduleUrl = existing.url;
|
|
298
|
-
}
|
|
295
|
+
const moduleUrl = await this.findModuleUrl(url, parent);
|
|
299
296
|
|
|
300
297
|
if (parent && !this.getResolution()[parent]) {
|
|
301
298
|
throw new SVError('ADDON_NOT_FOUND', { name: parent });
|
|
302
299
|
}
|
|
303
300
|
|
|
304
|
-
await this.
|
|
305
|
-
baseJson,
|
|
306
|
-
{ parent, add: moduleUrl, version: range },
|
|
301
|
+
const resolution = await this.verify(baseJson, {
|
|
307
302
|
parent,
|
|
303
|
+
add: moduleUrl,
|
|
304
|
+
version: range,
|
|
305
|
+
});
|
|
306
|
+
|
|
307
|
+
await this.syncModules(resolution);
|
|
308
|
+
await this.dangerousPut(moduleUrl, range, parent);
|
|
309
|
+
this.resolution = resolution;
|
|
310
|
+
};
|
|
311
|
+
|
|
312
|
+
/*
|
|
313
|
+
* Принудительная установка без PubGrub: добавляет отсутствующий git
|
|
314
|
+
* submodule, записывает constraint и запускает npm install. Версию HEAD
|
|
315
|
+
* не переключает — диапазон лишь фиксируется для следующего safe resolve.
|
|
316
|
+
*/
|
|
317
|
+
public dangerousPut = async (
|
|
318
|
+
url: string,
|
|
319
|
+
versionOrParent?: string,
|
|
320
|
+
parentName?: string,
|
|
321
|
+
): Promise<void> => {
|
|
322
|
+
const { range, parent } = parsePutArgs(versionOrParent, parentName);
|
|
323
|
+
const baseJson = await pkgJSONManager.read();
|
|
324
|
+
|
|
325
|
+
if (!baseJson) throw new SVError('NOT_A_NPM');
|
|
326
|
+
|
|
327
|
+
const baseChanged = await this.prepareBaseJson(baseJson);
|
|
328
|
+
const moduleUrl = await this.findModuleUrl(url, parent);
|
|
329
|
+
const { name } = git.parseUrl(moduleUrl);
|
|
330
|
+
|
|
331
|
+
const targetJson = parent
|
|
332
|
+
? await pkgJSONManager.read(parent)
|
|
333
|
+
: baseJson;
|
|
334
|
+
|
|
335
|
+
if (!targetJson) throw new SVError('ADDON_NOT_FOUND', { name: parent });
|
|
336
|
+
|
|
337
|
+
/* Проверяем запись до git-мутации, чтобы не оставить лишний submodule. */
|
|
338
|
+
const nextTargetJson = applyOverride(
|
|
339
|
+
targetJson,
|
|
340
|
+
{ parent, add: moduleUrl, version: range },
|
|
308
341
|
);
|
|
342
|
+
|
|
343
|
+
if (!await git.local.isGitRepo(path.join(RunOptions.modulesDir, name))) {
|
|
344
|
+
await git.local.addSubmodule(moduleUrl);
|
|
345
|
+
}
|
|
346
|
+
|
|
347
|
+
if (parent) {
|
|
348
|
+
await pkgJSONManager.write(nextTargetJson, parent);
|
|
349
|
+
} else {
|
|
350
|
+
await pkgJSONManager.write(nextTargetJson);
|
|
351
|
+
}
|
|
352
|
+
|
|
353
|
+
if (parent && baseChanged) await pkgJSONManager.write(baseJson);
|
|
354
|
+
|
|
355
|
+
this.resolution = null;
|
|
356
|
+
await npm.install();
|
|
309
357
|
};
|
|
310
358
|
|
|
311
359
|
/* Удаление модуля из родителя (без parentName — из корня проекта). */
|
|
@@ -314,6 +362,8 @@ export class SV {
|
|
|
314
362
|
|
|
315
363
|
if (!baseJson) throw new SVError('NOT_A_NPM');
|
|
316
364
|
|
|
365
|
+
await this.syncModulesDir(baseJson);
|
|
366
|
+
|
|
317
367
|
if (parentName) {
|
|
318
368
|
const parentEntry = this.getResolution()[parentName];
|
|
319
369
|
|
|
@@ -326,11 +376,49 @@ export class SV {
|
|
|
326
376
|
}
|
|
327
377
|
}
|
|
328
378
|
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
);
|
|
379
|
+
const override = { parent: parentName, delete: name };
|
|
380
|
+
const resolution = await this.verify(baseJson, override);
|
|
381
|
+
|
|
382
|
+
await this.syncModules(resolution);
|
|
383
|
+
await this.dangerousDelete(name, parentName);
|
|
384
|
+
this.resolution = resolution;
|
|
385
|
+
};
|
|
386
|
+
|
|
387
|
+
/* Принудительное удаление без запуска PubGrub. */
|
|
388
|
+
public dangerousDelete = async (
|
|
389
|
+
name: string,
|
|
390
|
+
parentName?: string,
|
|
391
|
+
): Promise<void> => {
|
|
392
|
+
const baseJson = await pkgJSONManager.read();
|
|
393
|
+
|
|
394
|
+
if (!baseJson) throw new SVError('NOT_A_NPM');
|
|
395
|
+
|
|
396
|
+
const baseChanged = await this.prepareBaseJson(baseJson);
|
|
397
|
+
|
|
398
|
+
const targetJson = parentName
|
|
399
|
+
? await pkgJSONManager.read(parentName)
|
|
400
|
+
: baseJson;
|
|
401
|
+
|
|
402
|
+
if (!targetJson) {
|
|
403
|
+
throw new SVError('ADDON_NOT_FOUND', { name: parentName });
|
|
404
|
+
}
|
|
405
|
+
|
|
406
|
+
const override = { parent: parentName, delete: name };
|
|
407
|
+
/* Проверяем запись до git-мутации, чтобы неизвестное имя было no-op. */
|
|
408
|
+
const nextTargetJson = applyOverride(targetJson, override);
|
|
409
|
+
const dir = path.join(RunOptions.modulesDir, name);
|
|
410
|
+
|
|
411
|
+
if (await git.local.isGitRepo(dir)) await git.local.rm(name);
|
|
412
|
+
|
|
413
|
+
if (parentName) {
|
|
414
|
+
await pkgJSONManager.write(nextTargetJson, parentName);
|
|
415
|
+
} else {
|
|
416
|
+
await pkgJSONManager.write(nextTargetJson);
|
|
417
|
+
}
|
|
418
|
+
|
|
419
|
+
if (parentName && baseChanged) await pkgJSONManager.write(baseJson);
|
|
420
|
+
this.resolution = null;
|
|
421
|
+
await npm.install();
|
|
334
422
|
};
|
|
335
423
|
|
|
336
424
|
public listVersions = (
|