submodule-version 2.0.3 → 2.1.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 +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/src/Graph/Graph.d.ts +12 -0
- package/dist/src/Graph/Graph.js +85 -0
- package/dist/src/Graph/Graph.js.map +1 -0
- package/dist/src/Graph/GraphError.d.ts +11 -0
- package/dist/src/Graph/GraphError.js +11 -0
- package/dist/src/Graph/GraphError.js.map +1 -0
- package/dist/src/Graph/index.d.ts +2 -0
- package/dist/src/Graph/index.js +8 -0
- package/dist/src/Graph/index.js.map +1 -0
- package/dist/src/PkgJSONManager.d.ts +6 -0
- package/dist/src/PkgJSONManager.js +53 -0
- package/dist/src/PkgJSONManager.js.map +1 -0
- package/dist/src/git/__tests__/parseGitUrl.test.js.map +1 -0
- package/dist/src/git/git.d.ts +6 -0
- package/dist/src/git/git.js +53 -0
- package/dist/src/git/git.js.map +1 -0
- package/dist/src/git/index.d.ts +1 -0
- package/dist/src/git/index.js +6 -0
- package/dist/src/git/index.js.map +1 -0
- package/dist/src/{parseGitUrl.d.ts → git/parseGitUrl.d.ts} +1 -2
- package/dist/src/git/parseGitUrl.js.map +1 -0
- package/dist/src/index.d.ts +1 -0
- package/dist/src/index.js +6 -0
- package/dist/src/index.js.map +1 -0
- package/dist/src/runOptions.d.ts +4 -0
- package/dist/src/runOptions.js +9 -0
- package/dist/src/runOptions.js.map +1 -0
- package/dist/src/runner/handleErrors/handleBuildGraphError.d.ts +1 -0
- package/dist/src/runner/handleErrors/handleBuildGraphError.js +42 -0
- package/dist/src/runner/handleErrors/handleBuildGraphError.js.map +1 -0
- package/dist/src/runner/handleErrors/handleErrors.d.ts +1 -0
- package/dist/src/runner/handleErrors/handleErrors.js +13 -0
- package/dist/src/runner/handleErrors/handleErrors.js.map +1 -0
- package/dist/src/runner/handleErrors/handleInstallError.d.ts +1 -0
- package/dist/src/runner/handleErrors/handleInstallError.js +30 -0
- package/dist/src/runner/handleErrors/handleInstallError.js.map +1 -0
- package/dist/src/runner/handleErrors/index.d.ts +1 -0
- package/dist/src/runner/handleErrors/index.js +6 -0
- package/dist/src/runner/handleErrors/index.js.map +1 -0
- package/dist/src/runner/index.d.ts +1 -0
- package/dist/src/runner/index.js +4 -0
- package/dist/src/runner/index.js.map +1 -0
- package/dist/src/runner/runer.js +54 -0
- package/dist/src/runner/runer.js.map +1 -0
- package/dist/src/sv.d.ts +8 -0
- package/dist/src/sv.js +55 -0
- package/dist/src/sv.js.map +1 -0
- package/dist/src/versionUtil.js.map +1 -1
- package/index-dev.ts +1 -1
- package/index.ts +1 -1
- package/package.json +12 -3
- package/src/Graph/Graph.ts +121 -0
- package/src/Graph/GraphError.ts +12 -0
- package/src/Graph/index.ts +2 -0
- package/src/PkgJSONManager.ts +57 -0
- package/src/git/git.ts +64 -0
- package/src/git/index.ts +1 -0
- package/src/{parseGitUrl.ts → git/parseGitUrl.ts} +1 -1
- package/src/index.ts +1 -0
- package/src/runOptions.ts +4 -0
- package/src/runner/handleErrors/handleBuildGraphError.ts +49 -0
- package/src/runner/handleErrors/handleErrors.ts +9 -0
- package/src/runner/handleErrors/handleInstallError.ts +26 -0
- package/src/runner/handleErrors/index.ts +1 -0
- package/src/runner/index.ts +1 -0
- package/src/runner/runer.ts +76 -0
- package/src/sv.ts +67 -0
- package/dist/src/__tests__/parseGitUrl.test.js.map +0 -1
- package/dist/src/buildGraph.d.ts +0 -7
- package/dist/src/buildGraph.js +0 -88
- package/dist/src/buildGraph.js.map +0 -1
- package/dist/src/config.d.ts +0 -4
- package/dist/src/config.js +0 -8
- package/dist/src/config.js.map +0 -1
- package/dist/src/git.d.ts +0 -5
- package/dist/src/git.js +0 -55
- package/dist/src/git.js.map +0 -1
- package/dist/src/install.d.ts +0 -1
- package/dist/src/install.js +0 -43
- package/dist/src/install.js.map +0 -1
- package/dist/src/parseGitUrl.js.map +0 -1
- package/dist/src/pkgJsonUtil.d.ts +0 -5
- package/dist/src/pkgJsonUtil.js +0 -38
- package/dist/src/pkgJsonUtil.js.map +0 -1
- package/dist/src/submoduleVersion.js +0 -43
- package/dist/src/submoduleVersion.js.map +0 -1
- package/src/buildGraph.ts +0 -126
- package/src/config.ts +0 -4
- package/src/git.ts +0 -52
- package/src/install.ts +0 -47
- package/src/pkgJsonUtil.ts +0 -36
- package/src/submoduleVersion.ts +0 -54
- /package/dist/src/{__tests__ → git/__tests__}/parseGitUrl.test.d.ts +0 -0
- /package/dist/src/{__tests__ → git/__tests__}/parseGitUrl.test.js +0 -0
- /package/dist/src/{parseGitUrl.js → git/parseGitUrl.js} +0 -0
- /package/dist/src/{submoduleVersion.d.ts → runner/runer.d.ts} +0 -0
- /package/src/{__tests__ → git/__tests__}/parseGitUrl.test.ts +0 -0
package/dist/src/sv.js
ADDED
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.SV = void 0;
|
|
4
|
+
const PkgJSONManager_1 = require("./PkgJSONManager");
|
|
5
|
+
const Graph_1 = require("./Graph");
|
|
6
|
+
const runOptions_1 = require("./runOptions");
|
|
7
|
+
const versionUtil_1 = require("./versionUtil");
|
|
8
|
+
const git_1 = require("./git");
|
|
9
|
+
class SV {
|
|
10
|
+
constructor(projectDir, modulesDir = 'addons') {
|
|
11
|
+
this.buildGraph = () => this.graph.build();
|
|
12
|
+
this.install = async (gitUrl, parentModule) => {
|
|
13
|
+
const { url, version, name } = git_1.git.parseUrl(gitUrl);
|
|
14
|
+
if (!name) {
|
|
15
|
+
throw new Error('NOT_A_GIT_URL');
|
|
16
|
+
}
|
|
17
|
+
const targetPkg = await this.pkgJSONManager.read(parentModule);
|
|
18
|
+
let installedPkg = await this.pkgJSONManager.read(name);
|
|
19
|
+
if (!installedPkg) {
|
|
20
|
+
await git_1.git.addSumbmodule(url);
|
|
21
|
+
installedPkg = this.pkgJSONManager.read(name);
|
|
22
|
+
}
|
|
23
|
+
const versions = await git_1.git.listVersions(name);
|
|
24
|
+
const latestVersion = versionUtil_1.versionUtil.latest(versions);
|
|
25
|
+
const requestedVersion = version || latestVersion;
|
|
26
|
+
if (!versions.includes(requestedVersion) && versions.length) {
|
|
27
|
+
throw new Error('REQUESTED_VERSION_NOT_EXISTS');
|
|
28
|
+
}
|
|
29
|
+
if (!targetPkg.sv) {
|
|
30
|
+
targetPkg.sv = {};
|
|
31
|
+
}
|
|
32
|
+
targetPkg.sv[url] = requestedVersion ? `^${requestedVersion}` : '*';
|
|
33
|
+
await this.pkgJSONManager.write(targetPkg, parentModule);
|
|
34
|
+
await this.graph.build();
|
|
35
|
+
};
|
|
36
|
+
this.update = async () => {
|
|
37
|
+
const graph = await this.graph.build();
|
|
38
|
+
if (!graph)
|
|
39
|
+
return;
|
|
40
|
+
await Promise.all(Object.entries(graph).map(async ([name, data]) => {
|
|
41
|
+
const { version, used } = data;
|
|
42
|
+
const latestVersion = versionUtil_1.versionUtil.latest(used);
|
|
43
|
+
if (latestVersion !== version) {
|
|
44
|
+
await git_1.git.checkout(name, latestVersion);
|
|
45
|
+
}
|
|
46
|
+
}));
|
|
47
|
+
};
|
|
48
|
+
runOptions_1.RunOptions.cwd = projectDir;
|
|
49
|
+
runOptions_1.RunOptions.modulesDir = modulesDir;
|
|
50
|
+
this.pkgJSONManager = new PkgJSONManager_1.PkgJSONManager();
|
|
51
|
+
this.graph = new Graph_1.Graph(this.pkgJSONManager);
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
exports.SV = SV;
|
|
55
|
+
//# sourceMappingURL=sv.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sv.js","sourceRoot":"","sources":["../../src/sv.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"versionUtil.js","sourceRoot":"","sources":["../../src/versionUtil.ts"],"names":[],"mappings":";;;AAAA,IAAK,WAIJ;AAJD,WAAK,WAAW;IACd,+CAAS,CAAA;IACT,+CAAS,CAAA;IACT,6CAAQ,CAAA;AACV,CAAC,EAJI,WAAW,KAAX,WAAW,QAIf;AAED,MAAM,OAAO,GAAG,CAAC,CAAS,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;AAEvD,MAAM,OAAO,GAAG,CAAC,CAAS,EAAY,EAAE,CAAC,CACvC,OAAO,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAClC,CAAC;AAEF,MAAM,IAAI,GAAG,CAAC,CAAS,EAAE,EAAE;IACzB,wDAAwD;IACxD,IAAI,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC;QAAE,OAAO,WAAW,CAAC,KAAK,CAAC;IAChD,mDAAmD;IACnD,IAAI,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC;QAAE,OAAO,WAAW,CAAC,KAAK,CAAC;IAEhD,4BAA4B;IAC5B,OAAO,WAAW,CAAC,IAAI,CAAC;AAC1B,CAAC,CAAC;AAEF,MAAM,OAAO,GAAG,CACd,OAAiB,EACjB,SAAmB,EACnB,WAAwB,EACxB,EAAE;IACF,MAAM,GAAG,GAAG,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE;QACvD,2BAA2B;QAC3B,IAAI,CAAC,GAAG;YAAE,OAAO,GAAG,CAAC;QACrB,+DAA+D;QAC/D,IAAI,CAAC,GAAG,WAAW;YAAE,OAAO,SAAS,CAAC,CAAC,CAAC,IAAI,OAAO,CAAC,CAAC,CAAC,CAAC;QAEvD,OAAO,OAAO,CAAC,CAAC,CAAC,KAAK,SAAS,CAAC,CAAC,CAAC,CAAC;IACrC,CAAC,EAAE,IAAI,CAAC,CAAC;IAET,OAAO,GAAG,CAAC;AACb,CAAC,CAAC;AAEF,MAAM,IAAI,GAAG,CAAC,WAAqB,EAAE,CAAS,EAAE,EAAE;IAChD,IAAI,CAAC,KAAK,GAAG;QAAE,OAAO,WAAW,CAAC;IAElC,MAAM,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;IACtB,MAAM,IAAI,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;IAExB,OAAO,WAAW,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE;QAC7B,MAAM,KAAK,GAAG,OAAO,CAAC,EAAE,CAAC,CAAC;QAE1B,OAAO,OAAO,CAAC,IAAI,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC;IACrC,CAAC,CAAC,CAAC;AACL,CAAC,CAAC;AAEF,MAAM,QAAQ,GAAG,CAAC,CAAS,EAAE,QAAkB,EAAE,EAAE;IACjD,IAAI,QAAQ,EAAE;
|
|
1
|
+
{"version":3,"file":"versionUtil.js","sourceRoot":"","sources":["../../src/versionUtil.ts"],"names":[],"mappings":"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"}
|
package/index-dev.ts
CHANGED
package/index.ts
CHANGED
package/package.json
CHANGED
|
@@ -1,7 +1,9 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "submodule-version",
|
|
3
3
|
"description": "Git <S>ubmodule <V>ersioning tool",
|
|
4
|
-
"version": "2.0
|
|
4
|
+
"version": "2.1.0",
|
|
5
|
+
"repository": "github:guljeny/submodule-version",
|
|
6
|
+
"main": "dist/src/index.js",
|
|
5
7
|
"bin": {
|
|
6
8
|
"sv": "dist/index.js",
|
|
7
9
|
"sv-dev": "index-dev.ts"
|
|
@@ -9,10 +11,17 @@
|
|
|
9
11
|
"scripts": {
|
|
10
12
|
"prepare": "npm run build",
|
|
11
13
|
"test": "npx jest",
|
|
12
|
-
"build": "npx tsc",
|
|
14
|
+
"build": "rm -rf ./dist && npx tsc",
|
|
13
15
|
"lint": "npx eslint ./src"
|
|
14
16
|
},
|
|
15
|
-
"author": "",
|
|
17
|
+
"author": "Yauheni Hul",
|
|
18
|
+
"keywords": [
|
|
19
|
+
"git",
|
|
20
|
+
"submodules",
|
|
21
|
+
"sv",
|
|
22
|
+
"version",
|
|
23
|
+
"version control"
|
|
24
|
+
],
|
|
16
25
|
"license": "ISC",
|
|
17
26
|
"devDependencies": {
|
|
18
27
|
"@types/jest": "^29.5.13",
|
|
@@ -0,0 +1,121 @@
|
|
|
1
|
+
import fs from 'fs';
|
|
2
|
+
import path from 'path';
|
|
3
|
+
import { PkgJSONManager } from '../PkgJSONManager';
|
|
4
|
+
import { versionUtil } from '../versionUtil';
|
|
5
|
+
import { git } from '../git';
|
|
6
|
+
import { RunOptions } from '../runOptions';
|
|
7
|
+
import { GraphError } from './GraphError';
|
|
8
|
+
|
|
9
|
+
type TSV = Record<string, string>;
|
|
10
|
+
|
|
11
|
+
interface ITreeEntry {
|
|
12
|
+
meta: {
|
|
13
|
+
version: string;
|
|
14
|
+
sv: TSV;
|
|
15
|
+
};
|
|
16
|
+
parents: Record<string, string>;
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
type TBaseTree = Record<string, ITreeEntry>;
|
|
20
|
+
|
|
21
|
+
export interface IGraphEntry {
|
|
22
|
+
versions: string[];
|
|
23
|
+
parents: Record<string, string>;
|
|
24
|
+
used: string[];
|
|
25
|
+
version: string;
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
export class Graph {
|
|
29
|
+
constructor (private pkgJSONManager: PkgJSONManager) {}
|
|
30
|
+
|
|
31
|
+
public async build (): Promise<Record<string, IGraphEntry>> {
|
|
32
|
+
const baseJson = await this.pkgJSONManager.read();
|
|
33
|
+
const baseTree: TBaseTree = {};
|
|
34
|
+
|
|
35
|
+
if (!baseJson) {
|
|
36
|
+
throw new Error('NOT_A_NPM');
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
if (!baseJson.sv) {
|
|
40
|
+
/** There is no dependencies, graph is empty */
|
|
41
|
+
return {};
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
const recursiveBuilder = async (dependencies: TSV = {}, parent = '*') => {
|
|
45
|
+
await Promise.all(
|
|
46
|
+
Object.entries(dependencies).map(async ([url, version]) => {
|
|
47
|
+
const { name } = git.parseUrl(url);
|
|
48
|
+
const { cwd, modulesDir } = RunOptions;
|
|
49
|
+
const moduleDir = path.join(cwd, modulesDir, name);
|
|
50
|
+
const isInstalled = fs.existsSync(moduleDir);
|
|
51
|
+
|
|
52
|
+
if (version && !versionUtil.validate(version, true)) {
|
|
53
|
+
throw new GraphError('UNKNOWN_VERSION', { name, version, parent });
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
if (!isInstalled) {
|
|
57
|
+
await git.addSumbmodule(url);
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
const existEntry = baseTree[name] || null;
|
|
61
|
+
|
|
62
|
+
const mJson = existEntry
|
|
63
|
+
? null
|
|
64
|
+
: await this.pkgJSONManager.read(name);
|
|
65
|
+
|
|
66
|
+
const meta = {
|
|
67
|
+
version: existEntry?.meta.version
|
|
68
|
+
|| mJson?.version
|
|
69
|
+
|| version
|
|
70
|
+
|| '*',
|
|
71
|
+
sv: existEntry?.meta.sv || mJson?.sv || {},
|
|
72
|
+
};
|
|
73
|
+
|
|
74
|
+
const parents = existEntry?.parents || {};
|
|
75
|
+
|
|
76
|
+
baseTree[name] = {
|
|
77
|
+
meta,
|
|
78
|
+
parents: { ...parents, [parent]: version },
|
|
79
|
+
};
|
|
80
|
+
|
|
81
|
+
await recursiveBuilder(meta.sv, name);
|
|
82
|
+
}),
|
|
83
|
+
);
|
|
84
|
+
};
|
|
85
|
+
|
|
86
|
+
await recursiveBuilder(baseJson.sv, baseJson.name);
|
|
87
|
+
|
|
88
|
+
const graph = await Promise.all(
|
|
89
|
+
Object.entries(baseTree).map(async ([name, data]) => {
|
|
90
|
+
const versions = await git.listVersions(name);
|
|
91
|
+
const { parents, meta } = data;
|
|
92
|
+
|
|
93
|
+
const used = Object.entries(parents).reduce((selective, [, v]) => (
|
|
94
|
+
versionUtil.pick(selective, v)
|
|
95
|
+
), versions);
|
|
96
|
+
|
|
97
|
+
// No compatible version found and module has version tags
|
|
98
|
+
if (!used.length && versions.length) {
|
|
99
|
+
throw new GraphError('VERSION_CONFLICT', { parents, name });
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
if (!used.includes(meta.version)) {
|
|
103
|
+
const latest = versionUtil.latest(used);
|
|
104
|
+
if (latest) {
|
|
105
|
+
await git.checkout(name, latest);
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
return {
|
|
110
|
+
name,
|
|
111
|
+
data: { versions, parents, used, version: meta.version },
|
|
112
|
+
};
|
|
113
|
+
}),
|
|
114
|
+
);
|
|
115
|
+
|
|
116
|
+
return graph.reduce((acc, { name, data }) => ({
|
|
117
|
+
...acc,
|
|
118
|
+
[name]: data,
|
|
119
|
+
}), {} as Record<string, IGraphEntry>);
|
|
120
|
+
}
|
|
121
|
+
}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
import fs from 'fs';
|
|
2
|
+
import { promisify } from 'util';
|
|
3
|
+
import path from 'path';
|
|
4
|
+
import { RunOptions } from './runOptions';
|
|
5
|
+
|
|
6
|
+
const existsAsync = promisify(fs.exists);
|
|
7
|
+
const readFileAsync = promisify(fs.readFile);
|
|
8
|
+
const writeFileAsync = promisify(fs.writeFile);
|
|
9
|
+
const JSON_NAME = 'package.json';
|
|
10
|
+
|
|
11
|
+
type TJSONPath = string | null;
|
|
12
|
+
|
|
13
|
+
const getJsonPath = async (submoduleName?: string): Promise<TJSONPath> => {
|
|
14
|
+
const folder = submoduleName ? [RunOptions.modulesDir, submoduleName] : [];
|
|
15
|
+
const jsonPath = path.join(RunOptions.cwd, ...folder, JSON_NAME);
|
|
16
|
+
const isJsonExists = await existsAsync(jsonPath);
|
|
17
|
+
if (!isJsonExists) return null;
|
|
18
|
+
|
|
19
|
+
return jsonPath;
|
|
20
|
+
};
|
|
21
|
+
|
|
22
|
+
export class PkgJSONManager {
|
|
23
|
+
private cache: Map<string, any> = new Map();
|
|
24
|
+
|
|
25
|
+
/* Reads package.json in project folder or in submodule */
|
|
26
|
+
public read = async (submoduleName?: string) => {
|
|
27
|
+
const jsonPath = await getJsonPath(submoduleName);
|
|
28
|
+
|
|
29
|
+
if (!jsonPath) return null;
|
|
30
|
+
|
|
31
|
+
if (this.cache.has(jsonPath)) {
|
|
32
|
+
return this.cache.get(jsonPath);
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
const jsonString = await readFileAsync(jsonPath, 'utf-8');
|
|
36
|
+
const parsed = JSON.parse(jsonString);
|
|
37
|
+
|
|
38
|
+
this.cache.set(jsonPath, parsed);
|
|
39
|
+
|
|
40
|
+
return parsed;
|
|
41
|
+
};
|
|
42
|
+
|
|
43
|
+
/* Writes package.json in project folder or in submodule */
|
|
44
|
+
public write = async (data: Object, submoduleName?: string) => {
|
|
45
|
+
const jsonPath = await getJsonPath(submoduleName);
|
|
46
|
+
|
|
47
|
+
if (!jsonPath) return;
|
|
48
|
+
|
|
49
|
+
this.cache.set(jsonPath, data);
|
|
50
|
+
|
|
51
|
+
await writeFileAsync(jsonPath, JSON.stringify(data, null, 2));
|
|
52
|
+
};
|
|
53
|
+
|
|
54
|
+
public clearCache (): void {
|
|
55
|
+
this.cache.clear();
|
|
56
|
+
}
|
|
57
|
+
}
|
package/src/git/git.ts
ADDED
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
import chalk from 'chalk';
|
|
2
|
+
import { exec } from 'child_process';
|
|
3
|
+
import { promisify } from 'util';
|
|
4
|
+
import path from 'path';
|
|
5
|
+
import { log } from '../log';
|
|
6
|
+
import { parseGitUrl } from './parseGitUrl';
|
|
7
|
+
import { versionUtil } from '../versionUtil';
|
|
8
|
+
import { RunOptions } from '../runOptions';
|
|
9
|
+
|
|
10
|
+
const execAsync = promisify(exec);
|
|
11
|
+
|
|
12
|
+
export const git = {
|
|
13
|
+
parseUrl: parseGitUrl,
|
|
14
|
+
|
|
15
|
+
addSumbmodule: async (url: string): Promise<void> => {
|
|
16
|
+
const { name } = parseGitUrl(url);
|
|
17
|
+
const module = path.join(RunOptions.modulesDir, name);
|
|
18
|
+
|
|
19
|
+
// try {
|
|
20
|
+
await execAsync(
|
|
21
|
+
`git submodule add ${url} ${module}`,
|
|
22
|
+
{ cwd: RunOptions.cwd },
|
|
23
|
+
);
|
|
24
|
+
// } catch {
|
|
25
|
+
// log.error(url, 'Is not a git repo', RunOptions.cwd);
|
|
26
|
+
// }
|
|
27
|
+
},
|
|
28
|
+
|
|
29
|
+
checkout: async (name: string, version: string): Promise<void> => {
|
|
30
|
+
const module = path.join(RunOptions.modulesDir, name);
|
|
31
|
+
const styledName = chalk.green.bold(name);
|
|
32
|
+
const styledVer = chalk.green.bold(version);
|
|
33
|
+
|
|
34
|
+
try {
|
|
35
|
+
log.message('Checkout', styledName, 'to', styledVer);
|
|
36
|
+
await execAsync(
|
|
37
|
+
`git -C ${module} checkout ${version} -q`,
|
|
38
|
+
{ cwd: RunOptions.cwd },
|
|
39
|
+
);
|
|
40
|
+
} catch {
|
|
41
|
+
log.error('Checkout failded');
|
|
42
|
+
}
|
|
43
|
+
},
|
|
44
|
+
|
|
45
|
+
listVersions: async (projectName: string): Promise<string[]> => {
|
|
46
|
+
const module = path.join(RunOptions.modulesDir, projectName);
|
|
47
|
+
const styledName = chalk.green.bold(projectName);
|
|
48
|
+
log.message('Fetching tag list for', styledName);
|
|
49
|
+
await execAsync(`git -C ${module} fetch --tags`, { cwd: RunOptions.cwd });
|
|
50
|
+
|
|
51
|
+
const res = await execAsync(
|
|
52
|
+
`git -C ${module} tag -l`,
|
|
53
|
+
{ cwd: RunOptions.cwd },
|
|
54
|
+
);
|
|
55
|
+
|
|
56
|
+
const tagList = res.stdout.toString().split(/\r?\n/);
|
|
57
|
+
|
|
58
|
+
return tagList.filter(tag => {
|
|
59
|
+
if (!tag) return false;
|
|
60
|
+
|
|
61
|
+
return versionUtil.validate(tag);
|
|
62
|
+
});
|
|
63
|
+
},
|
|
64
|
+
};
|
package/src/git/index.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { git } from './git';
|
package/src/index.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { SV } from './sv';
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import { GraphError } from '../../Graph';
|
|
2
|
+
import { log } from '../../log';
|
|
3
|
+
import chalk from 'chalk';
|
|
4
|
+
|
|
5
|
+
export const handleBuildGraphError = (error: Error) => {
|
|
6
|
+
if (!(error instanceof GraphError)) return;
|
|
7
|
+
|
|
8
|
+
const { message: errorMessage, details } = error;
|
|
9
|
+
|
|
10
|
+
if (errorMessage === 'NOT_A_NPM') {
|
|
11
|
+
log.error('Not a npm project');
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
if (errorMessage === 'UNKNOWN_VERSION') {
|
|
15
|
+
const { name, version, parent } = details;
|
|
16
|
+
const stV = chalk.bgRed.bold.white(` ${version} `);
|
|
17
|
+
const stName = chalk.red.bold(name);
|
|
18
|
+
const stParent = chalk.green.bold(parent);
|
|
19
|
+
|
|
20
|
+
log.error('Unknown version', stV, 'for', stName, 'in', stParent);
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
if (errorMessage === 'VERSION_CONFLICT') {
|
|
24
|
+
const { parents, name } = details;
|
|
25
|
+
|
|
26
|
+
const longestVersion = Object.values(parents ?? {}).reduce((len, v) => (
|
|
27
|
+
v.length > len ? v.length : len
|
|
28
|
+
), 0);
|
|
29
|
+
|
|
30
|
+
const formattedName = chalk.green.bold(name);
|
|
31
|
+
const baseMsg = `${chalk.red('Confilict')} for ${formattedName}:`;
|
|
32
|
+
|
|
33
|
+
const conflictMsg = Object.entries(parents ?? {})
|
|
34
|
+
.reduce((msg, [pName, v]) => {
|
|
35
|
+
const formatedV = chalk.bold.red(
|
|
36
|
+
String(v).padEnd(longestVersion, ' '),
|
|
37
|
+
);
|
|
38
|
+
|
|
39
|
+
return [
|
|
40
|
+
...msg,
|
|
41
|
+
` - Version ${formatedV} used in ${chalk.green.bold(pName)}`,
|
|
42
|
+
];
|
|
43
|
+
}, [baseMsg]);
|
|
44
|
+
|
|
45
|
+
log.error(conflictMsg.join('\n'));
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
log.error(errorMessage);
|
|
49
|
+
};
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { handleBuildGraphError } from './handleBuildGraphError';
|
|
2
|
+
import { handleInstallError } from './handleInstallError';
|
|
3
|
+
|
|
4
|
+
export const handleErrors = async (error: Error, gitUrl: string) => {
|
|
5
|
+
await Promise.all([
|
|
6
|
+
handleBuildGraphError(error),
|
|
7
|
+
handleInstallError(error, gitUrl),
|
|
8
|
+
]);
|
|
9
|
+
};
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import chalk from 'chalk';
|
|
2
|
+
import { versionUtil } from "../../versionUtil";
|
|
3
|
+
import { log } from '../../log';
|
|
4
|
+
import { git } from '../../git';
|
|
5
|
+
|
|
6
|
+
export const handleInstallError = async (error: Error, gitUrl: string) => {
|
|
7
|
+
const { message } = error;
|
|
8
|
+
const { url, version, name } = git.parseUrl(gitUrl);
|
|
9
|
+
|
|
10
|
+
if (message === 'NOT_A_GIT_URL') {
|
|
11
|
+
return log.error(chalk.red.bold(url), '- is not a git url!');
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
if (message === 'REQUESTED_VERSION_NOT_EXISTS') {
|
|
15
|
+
const versions = await git.listVersions(name);
|
|
16
|
+
const latestVersion = versionUtil.latest(versions);
|
|
17
|
+
const requestedVersion = version || latestVersion;
|
|
18
|
+
const styledName = `Package ${chalk.bold.green(name)}`;
|
|
19
|
+
const styledVer = chalk.bgRed.bold.white(` ${requestedVersion} `);
|
|
20
|
+
const errMsg = `does not contain version ${styledVer}.`;
|
|
21
|
+
const styledVList = chalk.bold.green(versions.join(', '));
|
|
22
|
+
const helpMsg = `Use one from [${styledVList}]`;
|
|
23
|
+
|
|
24
|
+
return log.error(styledName, errMsg, helpMsg);
|
|
25
|
+
}
|
|
26
|
+
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { handleErrors } from './handleErrors';
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import './runer';
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
import chalk from 'chalk';
|
|
2
|
+
import yargs from 'yargs';
|
|
3
|
+
import { SV } from '../sv';
|
|
4
|
+
import { log } from '../log';
|
|
5
|
+
import { handleErrors } from './handleErrors';
|
|
6
|
+
|
|
7
|
+
const BASE_DIR = 'modules';
|
|
8
|
+
|
|
9
|
+
const makeEvent = (event: (sv: SV, arg: any) => Promise<void>) => {
|
|
10
|
+
const sv = new SV(process.cwd(), BASE_DIR);
|
|
11
|
+
|
|
12
|
+
return async (arg: any) => {
|
|
13
|
+
const { url: gitUrl } = arg as {url: string};
|
|
14
|
+
|
|
15
|
+
try {
|
|
16
|
+
await event(sv, arg);
|
|
17
|
+
} catch (e) {
|
|
18
|
+
handleErrors(e as Error, gitUrl);
|
|
19
|
+
}
|
|
20
|
+
};
|
|
21
|
+
};
|
|
22
|
+
|
|
23
|
+
const install = makeEvent(async (sv, arg) => {
|
|
24
|
+
const { url: gitUrl, target } = arg as {url: string, target?: string};
|
|
25
|
+
await sv.install(gitUrl, target);
|
|
26
|
+
});
|
|
27
|
+
|
|
28
|
+
const update = makeEvent(async sv => {
|
|
29
|
+
await sv.update();
|
|
30
|
+
});
|
|
31
|
+
|
|
32
|
+
const validate = makeEvent(async sv => {
|
|
33
|
+
const result = await sv.buildGraph();
|
|
34
|
+
|
|
35
|
+
Object.entries(result).forEach(([name, entry]) => {
|
|
36
|
+
if (!entry.used.includes(entry.version) && entry.versions.length === 0) {
|
|
37
|
+
log.message(
|
|
38
|
+
chalk.yellow('⚠️ WARN: Module'),
|
|
39
|
+
chalk.bgYellow.black(` ${name} `),
|
|
40
|
+
chalk.yellow('does not contain any version tag!'),
|
|
41
|
+
);
|
|
42
|
+
}
|
|
43
|
+
});
|
|
44
|
+
|
|
45
|
+
log.message(chalk.green.bold('Everything is up to date!🔥'));
|
|
46
|
+
});
|
|
47
|
+
|
|
48
|
+
// eslint-disable-next-line @typescript-eslint/no-unused-expressions
|
|
49
|
+
yargs.scriptName('sv')
|
|
50
|
+
.usage('$0 <cmd> [args]')
|
|
51
|
+
.command(
|
|
52
|
+
['validate', '$0', 'v'],
|
|
53
|
+
'Validate and install modules',
|
|
54
|
+
() => {},
|
|
55
|
+
validate,
|
|
56
|
+
)
|
|
57
|
+
.command(
|
|
58
|
+
['update', 'u'],
|
|
59
|
+
'Update git modules to actual versions',
|
|
60
|
+
() => {},
|
|
61
|
+
update,
|
|
62
|
+
)
|
|
63
|
+
.command(
|
|
64
|
+
['install <url> [target]', 'i'],
|
|
65
|
+
'Install new submodule',
|
|
66
|
+
y => y.positional('url', {
|
|
67
|
+
type: 'string',
|
|
68
|
+
describe: 'Git submodule url',
|
|
69
|
+
}).positional('target', {
|
|
70
|
+
type: 'string',
|
|
71
|
+
describe: 'Target module name',
|
|
72
|
+
}),
|
|
73
|
+
install,
|
|
74
|
+
)
|
|
75
|
+
.help()
|
|
76
|
+
.argv;
|
package/src/sv.ts
ADDED
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
import { PkgJSONManager } from "./PkgJSONManager";
|
|
2
|
+
import { Graph } from "./Graph";
|
|
3
|
+
import { RunOptions } from "./runOptions";
|
|
4
|
+
import { versionUtil } from "./versionUtil";
|
|
5
|
+
import { git } from "./git";
|
|
6
|
+
|
|
7
|
+
export class SV {
|
|
8
|
+
private pkgJSONManager: PkgJSONManager;
|
|
9
|
+
private graph: Graph;
|
|
10
|
+
|
|
11
|
+
constructor (
|
|
12
|
+
projectDir: string,
|
|
13
|
+
modulesDir: string = 'addons',
|
|
14
|
+
) {
|
|
15
|
+
RunOptions.cwd = projectDir;
|
|
16
|
+
RunOptions.modulesDir = modulesDir;
|
|
17
|
+
|
|
18
|
+
this.pkgJSONManager = new PkgJSONManager();
|
|
19
|
+
this.graph = new Graph(this.pkgJSONManager);
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
public buildGraph = () => this.graph.build();
|
|
23
|
+
|
|
24
|
+
public install = async (gitUrl: string, parentModule?: string) => {
|
|
25
|
+
const { url, version, name } = git.parseUrl(gitUrl);
|
|
26
|
+
|
|
27
|
+
if (!name) {
|
|
28
|
+
throw new Error('NOT_A_GIT_URL');
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
const targetPkg = await this.pkgJSONManager.read(parentModule);
|
|
32
|
+
let installedPkg = await this.pkgJSONManager.read(name);
|
|
33
|
+
|
|
34
|
+
if (!installedPkg) {
|
|
35
|
+
await git.addSumbmodule(url);
|
|
36
|
+
installedPkg = this.pkgJSONManager.read(name);
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
const versions = await git.listVersions(name);
|
|
40
|
+
const latestVersion = versionUtil.latest(versions);
|
|
41
|
+
const requestedVersion = version || latestVersion;
|
|
42
|
+
|
|
43
|
+
if (!versions.includes(requestedVersion) && versions.length) {
|
|
44
|
+
throw new Error('REQUESTED_VERSION_NOT_EXISTS');
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
if (!targetPkg.sv) {
|
|
48
|
+
targetPkg.sv = {};
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
targetPkg.sv[url] = requestedVersion ? `^${requestedVersion}` : '*';
|
|
52
|
+
await this.pkgJSONManager.write(targetPkg, parentModule);
|
|
53
|
+
await this.graph.build();
|
|
54
|
+
};
|
|
55
|
+
|
|
56
|
+
public update = async () => {
|
|
57
|
+
const graph = await this.graph.build();
|
|
58
|
+
if (!graph) return;
|
|
59
|
+
await Promise.all(Object.entries(graph).map(async ([name, data]) => {
|
|
60
|
+
const { version, used } = data;
|
|
61
|
+
const latestVersion = versionUtil.latest(used);
|
|
62
|
+
if (latestVersion !== version) {
|
|
63
|
+
await git.checkout(name, latestVersion);
|
|
64
|
+
}
|
|
65
|
+
}));
|
|
66
|
+
};
|
|
67
|
+
}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"parseGitUrl.test.js","sourceRoot":"","sources":["../../../src/__tests__/parseGitUrl.test.ts"],"names":[],"mappings":";;AAAA,gDAA6C;AAE7C,QAAQ,CAAC,eAAe,EAAE,GAAG,EAAE;IAC7B,EAAE,CAAC,iBAAiB,EAAE,GAAG,EAAE;QACzB,MAAM,GAAG,GAAG,8CAA8C,CAAC;QAE3D,MAAM,CAAC,IAAA,yBAAW,EAAC,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC;YAC/B,GAAG,EAAE,8CAA8C;YACnD,OAAO,EAAE,SAAS;YAClB,IAAI,EAAE,aAAa;SACpB,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,cAAc,EAAE,GAAG,EAAE;QACtB,MAAM,GAAG,GAAG,oDAAoD,CAAC;QAEjE,MAAM,CAAC,IAAA,yBAAW,EAAC,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC;YAC/B,GAAG,EAAE,8CAA8C;YACnD,OAAO,EAAE,OAAO;YAChB,IAAI,EAAE,aAAa;SACpB,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,cAAc,EAAE,GAAG,EAAE;QACtB,MAAM,GAAG,GAAG,aAAa,CAAC;QAE1B,MAAM,CAAC,IAAA,yBAAW,EAAC,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC;YAC/B,GAAG,EAAE,aAAa;YAClB,OAAO,EAAE,IAAI;YACb,IAAI,EAAE,EAAE;SACT,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|