submodule-version 2.0.0 → 2.0.3
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 +69 -9
- package/dist/src/buildGraph.d.ts +7 -1
- package/dist/src/buildGraph.js +28 -13
- package/dist/src/buildGraph.js.map +1 -1
- package/dist/src/git.d.ts +1 -1
- package/dist/src/git.js +8 -2
- package/dist/src/git.js.map +1 -1
- package/dist/src/install.js +2 -2
- package/dist/src/install.js.map +1 -1
- package/dist/src/submoduleVersion.js +15 -0
- package/dist/src/submoduleVersion.js.map +1 -1
- package/dist/src/versionUtil.js +1 -1
- package/dist/src/versionUtil.js.map +1 -1
- package/index-dev.ts +2 -1
- package/package.json +1 -1
- package/src/buildGraph.ts +41 -13
- package/src/git.ts +8 -2
- package/src/install.ts +2 -2
- package/src/submoduleVersion.ts +20 -0
- package/src/versionUtil.ts +1 -1
package/README.md
CHANGED
|
@@ -1,17 +1,77 @@
|
|
|
1
|
-
#
|
|
1
|
+
# Submodule version
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
## Git **S**ubmodule **V**ersion tool
|
|
4
4
|
|
|
5
|
-
|
|
5
|
+
[](https://www.npmjs.com/package/submodule-version)
|
|
6
6
|
|
|
7
|
-
`
|
|
7
|
+
`Submodule version` is a tool to manage git submodules as versioned packages.
|
|
8
8
|
|
|
9
|
-
|
|
9
|
+
This tool designed to split projects in-to submodules *without npm-packages headache*.
|
|
10
10
|
|
|
11
|
-
|
|
11
|
+
With `submodule version` code can be organized like a *single monorepo*, but each submodule can be *easily reused* in another projects like npm-package.
|
|
12
12
|
|
|
13
|
-
|
|
13
|
+
## Problem to solve
|
|
14
14
|
|
|
15
|
-
|
|
15
|
+
Take a look on the next situation:
|
|
16
16
|
|
|
17
|
-
`
|
|
17
|
+
- Project has 2 submodules `ui-button-element` and `render-engine`
|
|
18
|
+
- Package `ui-button-element` dependents on the `render-engine`
|
|
19
|
+
- Third repo `ui-slider-element` dependets on newest version of the `render-engine` and not include in the project
|
|
20
|
+
|
|
21
|
+
This cause next problems:
|
|
22
|
+
|
|
23
|
+
- Add submodule `ui-slider-element` cause difficulties with handle different `render-engine` versions
|
|
24
|
+
- Manual swithing branches in submodules with big codebase can confuse
|
|
25
|
+
- Updated `ui-button-element` with new version of `render-engine` should be used in another project with the same version
|
|
26
|
+
|
|
27
|
+
Submodule version helps to
|
|
28
|
+
|
|
29
|
+
- Handle which project should be updated and which version should be installed
|
|
30
|
+
- Help update submodules and theirs dependencies
|
|
31
|
+
- Install new submodules
|
|
32
|
+
|
|
33
|
+
## Installation
|
|
34
|
+
|
|
35
|
+
- Install sv tool `npm i -D submodule-version`
|
|
36
|
+
- Add `workspaces` section in `package.json`
|
|
37
|
+
```
|
|
38
|
+
"workspaces": [
|
|
39
|
+
"modules/*"
|
|
40
|
+
],
|
|
41
|
+
```
|
|
42
|
+
- Install first submodule `npx sv i <git_repo>`
|
|
43
|
+
- Install npm dependencies `npm i`. Submodule will be linked in node_modules and its dependencies will be installed
|
|
44
|
+
- Use your submodule in code `import submodule from 'submodule-name'` 🔥
|
|
45
|
+
|
|
46
|
+
## How it works
|
|
47
|
+
|
|
48
|
+
- Each submodule and main project has own `package.json` with `sv` object inside. `sv` object will be generated automatically and will contain every dependency version
|
|
49
|
+
```
|
|
50
|
+
"sv": {
|
|
51
|
+
"git@github.com:guljeny/submodule-version.git": "^1.0.0"
|
|
52
|
+
}
|
|
53
|
+
```
|
|
54
|
+
- Each submodule has a [version](#versioning) tags, and `sv` use list of this tags to resolve dependencies
|
|
55
|
+
- `Submodule version` creates a graph of whole project and install only possible and actual versions
|
|
56
|
+
|
|
57
|
+
## Versioning
|
|
58
|
+
|
|
59
|
+
Sumodules without specified version tags will be installed with ref to the latest commit. You should manage them manually.
|
|
60
|
+
|
|
61
|
+
To add new version in submodule:
|
|
62
|
+
- Specify version in `package.json`
|
|
63
|
+
- Add and push git tag with the same version (`git tag 1.0.1`)
|
|
64
|
+
|
|
65
|
+
|
|
66
|
+
## Commands
|
|
67
|
+
|
|
68
|
+
- `npx sv validate` - Validate all dependencis and install missing modules
|
|
69
|
+
- `npx sv install <git_url> [target_submodule]` - Install new dependency
|
|
70
|
+
- `npx sv update` - Update all dependencies to the latest possible versions
|
|
71
|
+
- `npx sv help` - Description of all commands
|
|
72
|
+
|
|
73
|
+
## Submodule dependencies
|
|
74
|
+
|
|
75
|
+
Sumbodules can contains their own dependencies specified in `package.json` as `sv` object.
|
|
76
|
+
|
|
77
|
+
To install submodule in submodule run `npx install <git_url> [target_submodule]`
|
package/dist/src/buildGraph.d.ts
CHANGED
package/dist/src/buildGraph.js
CHANGED
|
@@ -4,6 +4,9 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
4
4
|
};
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
6
|
exports.buildGraph = void 0;
|
|
7
|
+
const fs_1 = __importDefault(require("fs"));
|
|
8
|
+
const path_1 = __importDefault(require("path"));
|
|
9
|
+
const config_1 = require("./config");
|
|
7
10
|
const chalk_1 = __importDefault(require("chalk"));
|
|
8
11
|
const pkgJsonUtil_1 = require("./pkgJsonUtil");
|
|
9
12
|
const log_1 = require("./log");
|
|
@@ -17,23 +20,28 @@ const buildGraph = () => {
|
|
|
17
20
|
return log_1.log.error('Not a npm project');
|
|
18
21
|
if (!baseJson.sv)
|
|
19
22
|
return log_1.log.message('There is no dependencies');
|
|
23
|
+
// First pass of graph creation. Read and validate data w/o networking
|
|
20
24
|
const recursiveBuilder = (dependencies = {}, parent = '*') => {
|
|
21
25
|
Object.entries(dependencies).forEach(([url, version]) => {
|
|
22
26
|
const { name } = (0, parseGitUrl_1.parseGitUrl)(url);
|
|
23
|
-
const
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
+
const moduleDir = path_1.default.join(process.cwd(), config_1.config.dir, name);
|
|
28
|
+
const isInstalled = fs_1.default.existsSync(moduleDir);
|
|
29
|
+
if (version && !versionUtil_1.versionUtil.validate(version, true)) {
|
|
30
|
+
const stV = chalk_1.default.bgRed.bold.white(` ${version} `);
|
|
31
|
+
const stName = chalk_1.default.red.bold(name);
|
|
32
|
+
const stParent = chalk_1.default.green.bold(parent);
|
|
33
|
+
return log_1.log.error('Unknown version', stV, 'for', stName, 'in', stParent);
|
|
27
34
|
}
|
|
28
|
-
if (!
|
|
35
|
+
if (!isInstalled) {
|
|
29
36
|
git_1.git.addSumbmodule(url);
|
|
30
37
|
}
|
|
31
|
-
const
|
|
32
|
-
const mJson =
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
38
|
+
const existEntry = baseTree[name] || null;
|
|
39
|
+
const mJson = existEntry ? null : pkgJsonUtil_1.pkgJsonUtil.read(name);
|
|
40
|
+
const meta = {
|
|
41
|
+
version: existEntry?.meta.version || mJson?.version || version || '*',
|
|
42
|
+
sv: existEntry?.meta.sv || mJson?.sv || {},
|
|
43
|
+
};
|
|
44
|
+
const parents = existEntry?.parents || {};
|
|
37
45
|
baseTree[name] = {
|
|
38
46
|
meta,
|
|
39
47
|
parents: { ...parents, [parent]: version },
|
|
@@ -46,7 +54,8 @@ const buildGraph = () => {
|
|
|
46
54
|
const versions = git_1.git.listVersions(name);
|
|
47
55
|
const { parents, meta } = data;
|
|
48
56
|
const used = Object.entries(parents).reduce((selective, [, v]) => (versionUtil_1.versionUtil.pick(selective, v)), versions);
|
|
49
|
-
|
|
57
|
+
// No comatible version found and module has version tags
|
|
58
|
+
if (!used.length && versions.length) {
|
|
50
59
|
const longestVersion = Object.values(parents).reduce((len, v) => (v.length > len ? v.length : len), 0);
|
|
51
60
|
const formattedName = chalk_1.default.green.bold(name);
|
|
52
61
|
const baseMsg = `${chalk_1.default.red('Confilict')} for ${formattedName}:`;
|
|
@@ -60,7 +69,13 @@ const buildGraph = () => {
|
|
|
60
69
|
log_1.log.error(conflictMsg.join('\n'));
|
|
61
70
|
}
|
|
62
71
|
if (!used.includes(meta.version)) {
|
|
63
|
-
|
|
72
|
+
const latest = versionUtil_1.versionUtil.latest(used);
|
|
73
|
+
if (latest) {
|
|
74
|
+
git_1.git.checkout(name, versionUtil_1.versionUtil.latest(used));
|
|
75
|
+
}
|
|
76
|
+
else {
|
|
77
|
+
log_1.log.message(chalk_1.default.yellow('⚠️ WARN: Module'), chalk_1.default.bgYellow.black(` ${name} `), chalk_1.default.yellow('does not contain any version tag!'));
|
|
78
|
+
}
|
|
64
79
|
}
|
|
65
80
|
return {
|
|
66
81
|
...acc,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"buildGraph.js","sourceRoot":"","sources":["../../src/buildGraph.ts"],"names":[],"mappings":";;;;;;AAAA,kDAA0B;AAC1B,+CAA4C;AAC5C,+BAA4B;AAC5B,+BAA4B;AAC5B,+CAA4C;AAC5C,+CAA4C;
|
|
1
|
+
{"version":3,"file":"buildGraph.js","sourceRoot":"","sources":["../../src/buildGraph.ts"],"names":[],"mappings":"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"}
|
package/dist/src/git.d.ts
CHANGED
package/dist/src/git.js
CHANGED
|
@@ -4,6 +4,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
4
4
|
};
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
6
|
exports.git = void 0;
|
|
7
|
+
const chalk_1 = __importDefault(require("chalk"));
|
|
7
8
|
const child_process_1 = require("child_process");
|
|
8
9
|
const path_1 = __importDefault(require("path"));
|
|
9
10
|
const config_1 = require("./config");
|
|
@@ -20,10 +21,12 @@ const addSumbmodule = (url) => {
|
|
|
20
21
|
log_1.log.error(url, 'Is not a git repo');
|
|
21
22
|
}
|
|
22
23
|
};
|
|
23
|
-
const checkout = (
|
|
24
|
-
const { name } = (0, parseGitUrl_1.parseGitUrl)(url);
|
|
24
|
+
const checkout = (name, version) => {
|
|
25
25
|
const module = path_1.default.join(config_1.config.dir, name);
|
|
26
|
+
const styledName = chalk_1.default.green.bold(name);
|
|
27
|
+
const styledVer = chalk_1.default.green.bold(version);
|
|
26
28
|
try {
|
|
29
|
+
log_1.log.message('Checkout', styledName, 'to', styledVer);
|
|
27
30
|
(0, child_process_1.execSync)(`git -C ${module} checkout ${version} -q`);
|
|
28
31
|
}
|
|
29
32
|
catch {
|
|
@@ -33,6 +36,9 @@ const checkout = (url, version) => {
|
|
|
33
36
|
};
|
|
34
37
|
const listVersions = (projectName) => {
|
|
35
38
|
const module = path_1.default.join(config_1.config.dir, projectName);
|
|
39
|
+
const styledName = chalk_1.default.green.bold(projectName);
|
|
40
|
+
log_1.log.message('Fetching tag list for', styledName);
|
|
41
|
+
(0, child_process_1.execSync)(`git -C ${module} fetch --tags`);
|
|
36
42
|
const res = (0, child_process_1.execSync)(`git -C ${module} tag -l`);
|
|
37
43
|
const tagList = res.toString().split(/\r?\n/);
|
|
38
44
|
return tagList.filter(tag => {
|
package/dist/src/git.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"git.js","sourceRoot":"","sources":["../../src/git.ts"],"names":[],"mappings":";;;;;;AAAA,iDAAyC;AACzC,gDAAwB;AACxB,qCAAkC;AAClC,+BAA4B;AAC5B,+CAA4C;AAC5C,+CAA4C;AAE5C,MAAM,aAAa,GAAG,CAAC,GAAW,EAAE,EAAE;IACpC,MAAM,EAAE,IAAI,EAAE,GAAG,IAAA,yBAAW,EAAC,GAAG,CAAC,CAAC;IAClC,MAAM,MAAM,GAAG,cAAI,CAAC,IAAI,CAAC,eAAM,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;IAE3C,IAAI;QACF,IAAA,wBAAQ,EAAC,qBAAqB,GAAG,IAAI,MAAM,EAAE,CAAC,CAAC;KAChD;IAAC,MAAM;QACN,SAAG,CAAC,KAAK,CAAC,GAAG,EAAE,mBAAmB,CAAC,CAAC;KACrC;AACH,CAAC,CAAC;AAEF,MAAM,QAAQ,GAAG,CAAC,
|
|
1
|
+
{"version":3,"file":"git.js","sourceRoot":"","sources":["../../src/git.ts"],"names":[],"mappings":";;;;;;AAAA,kDAA0B;AAC1B,iDAAyC;AACzC,gDAAwB;AACxB,qCAAkC;AAClC,+BAA4B;AAC5B,+CAA4C;AAC5C,+CAA4C;AAE5C,MAAM,aAAa,GAAG,CAAC,GAAW,EAAE,EAAE;IACpC,MAAM,EAAE,IAAI,EAAE,GAAG,IAAA,yBAAW,EAAC,GAAG,CAAC,CAAC;IAClC,MAAM,MAAM,GAAG,cAAI,CAAC,IAAI,CAAC,eAAM,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;IAE3C,IAAI;QACF,IAAA,wBAAQ,EAAC,qBAAqB,GAAG,IAAI,MAAM,EAAE,CAAC,CAAC;KAChD;IAAC,MAAM;QACN,SAAG,CAAC,KAAK,CAAC,GAAG,EAAE,mBAAmB,CAAC,CAAC;KACrC;AACH,CAAC,CAAC;AAEF,MAAM,QAAQ,GAAG,CAAC,IAAY,EAAE,OAAe,EAAE,EAAE;IACjD,MAAM,MAAM,GAAG,cAAI,CAAC,IAAI,CAAC,eAAM,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;IAC3C,MAAM,UAAU,GAAG,eAAK,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC1C,MAAM,SAAS,GAAG,eAAK,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAE5C,IAAI;QACF,SAAG,CAAC,OAAO,CAAC,UAAU,EAAE,UAAU,EAAE,IAAI,EAAE,SAAS,CAAC,CAAC;QACrD,IAAA,wBAAQ,EAAC,UAAU,MAAM,aAAa,OAAO,KAAK,CAAC,CAAC;KACrD;IAAC,MAAM;QACN,SAAG,CAAC,KAAK,CAAC,kBAAkB,CAAC,CAAC;KAC/B;IAAA,CAAC;AACJ,CAAC,CAAC;AAEF,MAAM,YAAY,GAAG,CAAC,WAAmB,EAAE,EAAE;IAC3C,MAAM,MAAM,GAAG,cAAI,CAAC,IAAI,CAAC,eAAM,CAAC,GAAG,EAAE,WAAW,CAAC,CAAC;IAClD,MAAM,UAAU,GAAG,eAAK,CAAC,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;IACjD,SAAG,CAAC,OAAO,CAAC,uBAAuB,EAAE,UAAU,CAAC,CAAC;IACjD,IAAA,wBAAQ,EAAC,UAAU,MAAM,eAAe,CAAC,CAAC;IAC1C,MAAM,GAAG,GAAG,IAAA,wBAAQ,EAAC,UAAU,MAAM,SAAS,CAAC,CAAC;IAChD,MAAM,OAAO,GAAG,GAAG,CAAC,QAAQ,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IAE9C,OAAO,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE;QAC1B,IAAI,CAAC,GAAG;YAAE,OAAO,KAAK,CAAC;QAEvB,OAAO,yBAAW,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;IACnC,CAAC,CAAC,CAAC;AACL,CAAC,CAAC;AAEW,QAAA,GAAG,GAAG;IACjB,aAAa;IACb,QAAQ;IACR,YAAY;CACb,CAAC"}
|
package/dist/src/install.js
CHANGED
|
@@ -27,7 +27,7 @@ const install = (arg) => {
|
|
|
27
27
|
const versions = git_1.git.listVersions(name);
|
|
28
28
|
const latestVersion = versionUtil_1.versionUtil.latest(versions);
|
|
29
29
|
const requestedVersion = version || latestVersion;
|
|
30
|
-
if (!versions.includes(requestedVersion)) {
|
|
30
|
+
if (!versions.includes(requestedVersion) && versions.length) {
|
|
31
31
|
const styledName = `Package ${chalk_1.default.bold.green(name)}`;
|
|
32
32
|
const styledVer = chalk_1.default.bgRed.bold.white(` ${requestedVersion} `);
|
|
33
33
|
const errMsg = `does not contain version ${styledVer}.`;
|
|
@@ -35,7 +35,7 @@ const install = (arg) => {
|
|
|
35
35
|
const helpMsg = `Use one from [${styledVList}]`;
|
|
36
36
|
log_1.log.error(styledName, errMsg, helpMsg);
|
|
37
37
|
}
|
|
38
|
-
targetPkg.sv[url] = `^${requestedVersion}
|
|
38
|
+
targetPkg.sv[url] = requestedVersion ? `^${requestedVersion}` : '*';
|
|
39
39
|
pkgJsonUtil_1.pkgJsonUtil.write(targetPkg, target);
|
|
40
40
|
(0, buildGraph_1.buildGraph)();
|
|
41
41
|
};
|
package/dist/src/install.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"install.js","sourceRoot":"","sources":["../../src/install.ts"],"names":[],"mappings":";;;;;;AAAA,kDAA0B;AAC1B,+CAA4C;AAC5C,+CAA4C;AAC5C,+BAA4B;AAC5B,+BAA4B;AAC5B,+CAA4C;AAC5C,6CAA0C;AAO1C,wBAAwB;AACjB,MAAM,OAAO,GAAG,CAAC,GAAQ,EAAE,EAAE;IAClC,MAAM,EAAE,MAAM,EAAE,GAAG,GAAW,CAAC;IAC/B,MAAM,EAAE,GAAG,EAAE,OAAO,EAAE,IAAI,EAAE,GAAG,IAAA,yBAAW,EAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IAEpD,IAAI,CAAC,IAAI,EAAE;QACT,OAAO,SAAG,CAAC,KAAK,CAAC,eAAK,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,qBAAqB,CAAC,CAAC;KAC9D;IAED,MAAM,SAAS,GAAG,yBAAW,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IAC3C,IAAI,YAAY,GAAG,yBAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAE1C,IAAI,CAAC,YAAY,EAAE;QACjB,SAAG,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC;QACvB,YAAY,GAAG,yBAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;KACvC;IAED,MAAM,QAAQ,GAAG,SAAG,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;IACxC,MAAM,aAAa,GAAG,yBAAW,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;IACnD,MAAM,gBAAgB,GAAG,OAAO,IAAI,aAAa,CAAC;IAElD,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,gBAAgB,CAAC,EAAE;
|
|
1
|
+
{"version":3,"file":"install.js","sourceRoot":"","sources":["../../src/install.ts"],"names":[],"mappings":";;;;;;AAAA,kDAA0B;AAC1B,+CAA4C;AAC5C,+CAA4C;AAC5C,+BAA4B;AAC5B,+BAA4B;AAC5B,+CAA4C;AAC5C,6CAA0C;AAO1C,wBAAwB;AACjB,MAAM,OAAO,GAAG,CAAC,GAAQ,EAAE,EAAE;IAClC,MAAM,EAAE,MAAM,EAAE,GAAG,GAAW,CAAC;IAC/B,MAAM,EAAE,GAAG,EAAE,OAAO,EAAE,IAAI,EAAE,GAAG,IAAA,yBAAW,EAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IAEpD,IAAI,CAAC,IAAI,EAAE;QACT,OAAO,SAAG,CAAC,KAAK,CAAC,eAAK,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,qBAAqB,CAAC,CAAC;KAC9D;IAED,MAAM,SAAS,GAAG,yBAAW,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IAC3C,IAAI,YAAY,GAAG,yBAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAE1C,IAAI,CAAC,YAAY,EAAE;QACjB,SAAG,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC;QACvB,YAAY,GAAG,yBAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;KACvC;IAED,MAAM,QAAQ,GAAG,SAAG,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;IACxC,MAAM,aAAa,GAAG,yBAAW,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;IACnD,MAAM,gBAAgB,GAAG,OAAO,IAAI,aAAa,CAAC;IAElD,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,gBAAgB,CAAC,IAAI,QAAQ,CAAC,MAAM,EAAE;QAC3D,MAAM,UAAU,GAAG,WAAW,eAAK,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;QACvD,MAAM,SAAS,GAAG,eAAK,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,gBAAgB,GAAG,CAAC,CAAC;QAClE,MAAM,MAAM,GAAG,4BAA4B,SAAS,GAAG,CAAC;QACxD,MAAM,WAAW,GAAG,eAAK,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;QAC1D,MAAM,OAAO,GAAG,iBAAiB,WAAW,GAAG,CAAC;QAChD,SAAG,CAAC,KAAK,CAAC,UAAU,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;KACxC;IAED,SAAS,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,gBAAgB,CAAC,CAAC,CAAC,IAAI,gBAAgB,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC;IACpE,yBAAW,CAAC,KAAK,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;IACrC,IAAA,uBAAU,GAAE,CAAC;AACf,CAAC,CAAC;AAhCW,QAAA,OAAO,WAgClB"}
|
|
@@ -6,16 +6,31 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
6
6
|
const chalk_1 = __importDefault(require("chalk"));
|
|
7
7
|
const yargs_1 = __importDefault(require("yargs"));
|
|
8
8
|
const buildGraph_1 = require("./buildGraph");
|
|
9
|
+
const versionUtil_1 = require("./versionUtil");
|
|
9
10
|
const install_1 = require("./install");
|
|
10
11
|
const log_1 = require("./log");
|
|
12
|
+
const git_1 = require("./git");
|
|
11
13
|
const mainProcess = () => {
|
|
12
14
|
(0, buildGraph_1.buildGraph)();
|
|
13
15
|
log_1.log.message(chalk_1.default.green.bold('Everything is up to date!🔥'));
|
|
14
16
|
};
|
|
17
|
+
const update = () => {
|
|
18
|
+
const graph = (0, buildGraph_1.buildGraph)();
|
|
19
|
+
if (!graph)
|
|
20
|
+
return;
|
|
21
|
+
Object.entries(graph).forEach(([name, data]) => {
|
|
22
|
+
const { version, used } = data;
|
|
23
|
+
const latestVersion = versionUtil_1.versionUtil.latest(used);
|
|
24
|
+
if (latestVersion !== version) {
|
|
25
|
+
git_1.git.checkout(name, latestVersion);
|
|
26
|
+
}
|
|
27
|
+
});
|
|
28
|
+
};
|
|
15
29
|
// eslint-disable-next-line @typescript-eslint/no-unused-expressions
|
|
16
30
|
yargs_1.default.scriptName('sv')
|
|
17
31
|
.usage('$0 <cmd> [args]')
|
|
18
32
|
.command(['validate', '$0', 'v'], 'Validate and install modules', () => { }, mainProcess)
|
|
33
|
+
.command(['update', 'u'], 'Update git modules to actual versions', () => { }, update)
|
|
19
34
|
.command(['install <url> [target]', 'i'], 'Install new submodule', y => y.positional('url', {
|
|
20
35
|
type: 'string',
|
|
21
36
|
describe: 'Git submodule url',
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"submoduleVersion.js","sourceRoot":"","sources":["../../src/submoduleVersion.ts"],"names":[],"mappings":";;;;;AAAA,kDAA0B;AAC1B,kDAA0B;AAC1B,6CAA0C;AAC1C,uCAAoC;AACpC,+BAA4B;AAE5B,MAAM,WAAW,GAAG,GAAG,EAAE;IACvB,IAAA,uBAAU,GAAE,CAAC;IACb,SAAG,CAAC,OAAO,CAAC,eAAK,CAAC,KAAK,CAAC,IAAI,CAAC,6BAA6B,CAAC,CAAC,CAAC;AAC/D,CAAC,CAAC;AAEF,oEAAoE;AACpE,eAAK,CAAC,UAAU,CAAC,IAAI,CAAC;KACnB,KAAK,CAAC,iBAAiB,CAAC;KACxB,OAAO,CACN,CAAC,UAAU,EAAE,IAAI,EAAE,GAAG,CAAC,EACvB,8BAA8B,EAC9B,GAAG,EAAE,GAAE,CAAC,EACR,WAAW,CACZ;KACA,OAAO,CACN,CAAC,wBAAwB,EAAE,GAAG,CAAC,EAC/B,uBAAuB,EACvB,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,KAAK,EAAE;IACvB,IAAI,EAAE,QAAQ;IACd,QAAQ,EAAE,mBAAmB;CAC9B,CAAC,CAAC,UAAU,CAAC,QAAQ,EAAE;IACtB,IAAI,EAAE,QAAQ;IACd,QAAQ,EAAE,oBAAoB;CAC/B,CAAC,EACF,iBAAO,CACR;KACA,IAAI,EAAE;KACN,IAAI,CAAC"}
|
|
1
|
+
{"version":3,"file":"submoduleVersion.js","sourceRoot":"","sources":["../../src/submoduleVersion.ts"],"names":[],"mappings":";;;;;AAAA,kDAA0B;AAC1B,kDAA0B;AAC1B,6CAA0C;AAC1C,+CAA4C;AAC5C,uCAAoC;AACpC,+BAA4B;AAC5B,+BAA4B;AAE5B,MAAM,WAAW,GAAG,GAAG,EAAE;IACvB,IAAA,uBAAU,GAAE,CAAC;IACb,SAAG,CAAC,OAAO,CAAC,eAAK,CAAC,KAAK,CAAC,IAAI,CAAC,6BAA6B,CAAC,CAAC,CAAC;AAC/D,CAAC,CAAC;AAEF,MAAM,MAAM,GAAG,GAAG,EAAE;IAClB,MAAM,KAAK,GAAG,IAAA,uBAAU,GAAE,CAAC;IAC3B,IAAI,CAAC,KAAK;QAAE,OAAO;IACnB,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,EAAE;QAC7C,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,GAAG,IAAI,CAAC;QAC/B,MAAM,aAAa,GAAG,yBAAW,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QAC/C,IAAI,aAAa,KAAK,OAAO,EAAE;YAC7B,SAAG,CAAC,QAAQ,CAAC,IAAI,EAAE,aAAa,CAAC,CAAC;SACnC;IACH,CAAC,CAAC,CAAC;AACL,CAAC,CAAC;AAEF,oEAAoE;AACpE,eAAK,CAAC,UAAU,CAAC,IAAI,CAAC;KACnB,KAAK,CAAC,iBAAiB,CAAC;KACxB,OAAO,CACN,CAAC,UAAU,EAAE,IAAI,EAAE,GAAG,CAAC,EACvB,8BAA8B,EAC9B,GAAG,EAAE,GAAE,CAAC,EACR,WAAW,CACZ;KACA,OAAO,CACN,CAAC,QAAQ,EAAE,GAAG,CAAC,EACf,uCAAuC,EACvC,GAAG,EAAE,GAAE,CAAC,EACR,MAAM,CACP;KACA,OAAO,CACN,CAAC,wBAAwB,EAAE,GAAG,CAAC,EAC/B,uBAAuB,EACvB,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,KAAK,EAAE;IACvB,IAAI,EAAE,QAAQ;IACd,QAAQ,EAAE,mBAAmB;CAC9B,CAAC,CAAC,UAAU,CAAC,QAAQ,EAAE;IACtB,IAAI,EAAE,QAAQ;IACd,QAAQ,EAAE,oBAAoB;CAC/B,CAAC,EACF,iBAAO,CACR;KACA,IAAI,EAAE;KACN,IAAI,CAAC"}
|
package/dist/src/versionUtil.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"versionUtil.js","sourceRoot":"","sources":["../../src/versionUtil.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"versionUtil.js","sourceRoot":"","sources":["../../src/versionUtil.ts"],"names":[],"mappings":"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"}
|
package/index-dev.ts
CHANGED
package/package.json
CHANGED
package/src/buildGraph.ts
CHANGED
|
@@ -1,3 +1,6 @@
|
|
|
1
|
+
import fs from 'fs';
|
|
2
|
+
import path from 'path';
|
|
3
|
+
import { config } from './config';
|
|
1
4
|
import chalk from 'chalk';
|
|
2
5
|
import { pkgJsonUtil } from './pkgJsonUtil';
|
|
3
6
|
import { log } from './log';
|
|
@@ -17,33 +20,48 @@ interface ITreeEntry {
|
|
|
17
20
|
|
|
18
21
|
type TBaseTree = Record<string, ITreeEntry>;
|
|
19
22
|
|
|
20
|
-
export
|
|
23
|
+
export interface IGraphEntry {
|
|
24
|
+
versions: string[];
|
|
25
|
+
parents: Record<string, string>;
|
|
26
|
+
used: string[];
|
|
27
|
+
version: string;
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
export const buildGraph = (): Record<string, IGraphEntry> | void => {
|
|
21
31
|
const baseJson = pkgJsonUtil.read();
|
|
22
32
|
const baseTree: TBaseTree = {};
|
|
23
33
|
|
|
24
34
|
if (!baseJson) return log.error('Not a npm project');
|
|
25
35
|
if (!baseJson.sv) return log.message('There is no dependencies');
|
|
26
36
|
|
|
37
|
+
// First pass of graph creation. Read and validate data w/o networking
|
|
27
38
|
const recursiveBuilder = (dependencies: TSV = {}, parent = '*') => {
|
|
28
39
|
Object.entries(dependencies).forEach(([url, version]) => {
|
|
29
40
|
const { name } = parseGitUrl(url);
|
|
30
|
-
const
|
|
31
|
-
|
|
32
|
-
|
|
41
|
+
const moduleDir = path.join(process.cwd(), config.dir, name);
|
|
42
|
+
const isInstalled = fs.existsSync(moduleDir);
|
|
43
|
+
|
|
44
|
+
if (version && !versionUtil.validate(version, true)) {
|
|
45
|
+
const stV = chalk.bgRed.bold.white(` ${version} `);
|
|
46
|
+
const stName = chalk.red.bold(name);
|
|
47
|
+
const stParent = chalk.green.bold(parent);
|
|
33
48
|
|
|
34
|
-
return log.error('Unknown version',
|
|
49
|
+
return log.error('Unknown version', stV, 'for', stName, 'in', stParent);
|
|
35
50
|
}
|
|
36
|
-
|
|
51
|
+
|
|
52
|
+
if (!isInstalled) {
|
|
37
53
|
git.addSumbmodule(url);
|
|
38
54
|
}
|
|
39
55
|
|
|
40
|
-
const
|
|
41
|
-
const mJson =
|
|
56
|
+
const existEntry = baseTree[name] || null;
|
|
57
|
+
const mJson = existEntry ? null : pkgJsonUtil.read(name);
|
|
42
58
|
|
|
43
|
-
|
|
59
|
+
const meta = {
|
|
60
|
+
version: existEntry?.meta.version || mJson?.version || version || '*',
|
|
61
|
+
sv: existEntry?.meta.sv || mJson?.sv || {},
|
|
62
|
+
};
|
|
44
63
|
|
|
45
|
-
const
|
|
46
|
-
const parents = exists?.parents || {};
|
|
64
|
+
const parents = existEntry?.parents || {};
|
|
47
65
|
|
|
48
66
|
baseTree[name] = {
|
|
49
67
|
meta,
|
|
@@ -64,7 +82,8 @@ export const buildGraph = () => {
|
|
|
64
82
|
versionUtil.pick(selective, v)
|
|
65
83
|
), versions);
|
|
66
84
|
|
|
67
|
-
|
|
85
|
+
// No comatible version found and module has version tags
|
|
86
|
+
if (!used.length && versions.length) {
|
|
68
87
|
const longestVersion = Object.values(parents).reduce((len, v) => (
|
|
69
88
|
v.length > len ? v.length : len
|
|
70
89
|
), 0);
|
|
@@ -85,7 +104,16 @@ export const buildGraph = () => {
|
|
|
85
104
|
}
|
|
86
105
|
|
|
87
106
|
if (!used.includes(meta.version)) {
|
|
88
|
-
|
|
107
|
+
const latest = versionUtil.latest(used);
|
|
108
|
+
if (latest) {
|
|
109
|
+
git.checkout(name, versionUtil.latest(used));
|
|
110
|
+
} else {
|
|
111
|
+
log.message(
|
|
112
|
+
chalk.yellow('⚠️ WARN: Module'),
|
|
113
|
+
chalk.bgYellow.black(` ${name} `),
|
|
114
|
+
chalk.yellow('does not contain any version tag!'),
|
|
115
|
+
);
|
|
116
|
+
}
|
|
89
117
|
}
|
|
90
118
|
|
|
91
119
|
return {
|
package/src/git.ts
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import chalk from 'chalk';
|
|
1
2
|
import { execSync } from 'child_process';
|
|
2
3
|
import path from 'path';
|
|
3
4
|
import { config } from './config';
|
|
@@ -16,11 +17,13 @@ const addSumbmodule = (url: string) => {
|
|
|
16
17
|
}
|
|
17
18
|
};
|
|
18
19
|
|
|
19
|
-
const checkout = (
|
|
20
|
-
const { name } = parseGitUrl(url);
|
|
20
|
+
const checkout = (name: string, version: string) => {
|
|
21
21
|
const module = path.join(config.dir, name);
|
|
22
|
+
const styledName = chalk.green.bold(name);
|
|
23
|
+
const styledVer = chalk.green.bold(version);
|
|
22
24
|
|
|
23
25
|
try {
|
|
26
|
+
log.message('Checkout', styledName, 'to', styledVer);
|
|
24
27
|
execSync(`git -C ${module} checkout ${version} -q`);
|
|
25
28
|
} catch {
|
|
26
29
|
log.error('Checkout failded');
|
|
@@ -29,6 +32,9 @@ const checkout = (url: string, version: string) => {
|
|
|
29
32
|
|
|
30
33
|
const listVersions = (projectName: string) => {
|
|
31
34
|
const module = path.join(config.dir, projectName);
|
|
35
|
+
const styledName = chalk.green.bold(projectName);
|
|
36
|
+
log.message('Fetching tag list for', styledName);
|
|
37
|
+
execSync(`git -C ${module} fetch --tags`);
|
|
32
38
|
const res = execSync(`git -C ${module} tag -l`);
|
|
33
39
|
const tagList = res.toString().split(/\r?\n/);
|
|
34
40
|
|
package/src/install.ts
CHANGED
|
@@ -32,7 +32,7 @@ export const install = (arg: any) => {
|
|
|
32
32
|
const latestVersion = versionUtil.latest(versions);
|
|
33
33
|
const requestedVersion = version || latestVersion;
|
|
34
34
|
|
|
35
|
-
if (!versions.includes(requestedVersion)) {
|
|
35
|
+
if (!versions.includes(requestedVersion) && versions.length) {
|
|
36
36
|
const styledName = `Package ${chalk.bold.green(name)}`;
|
|
37
37
|
const styledVer = chalk.bgRed.bold.white(` ${requestedVersion} `);
|
|
38
38
|
const errMsg = `does not contain version ${styledVer}.`;
|
|
@@ -41,7 +41,7 @@ export const install = (arg: any) => {
|
|
|
41
41
|
log.error(styledName, errMsg, helpMsg);
|
|
42
42
|
}
|
|
43
43
|
|
|
44
|
-
targetPkg.sv[url] = `^${requestedVersion}
|
|
44
|
+
targetPkg.sv[url] = requestedVersion ? `^${requestedVersion}` : '*';
|
|
45
45
|
pkgJsonUtil.write(targetPkg, target);
|
|
46
46
|
buildGraph();
|
|
47
47
|
};
|
package/src/submoduleVersion.ts
CHANGED
|
@@ -1,14 +1,28 @@
|
|
|
1
1
|
import chalk from 'chalk';
|
|
2
2
|
import yargs from 'yargs';
|
|
3
3
|
import { buildGraph } from './buildGraph';
|
|
4
|
+
import { versionUtil } from './versionUtil';
|
|
4
5
|
import { install } from './install';
|
|
5
6
|
import { log } from './log';
|
|
7
|
+
import { git } from './git';
|
|
6
8
|
|
|
7
9
|
const mainProcess = () => {
|
|
8
10
|
buildGraph();
|
|
9
11
|
log.message(chalk.green.bold('Everything is up to date!🔥'));
|
|
10
12
|
};
|
|
11
13
|
|
|
14
|
+
const update = () => {
|
|
15
|
+
const graph = buildGraph();
|
|
16
|
+
if (!graph) return;
|
|
17
|
+
Object.entries(graph).forEach(([name, data]) => {
|
|
18
|
+
const { version, used } = data;
|
|
19
|
+
const latestVersion = versionUtil.latest(used);
|
|
20
|
+
if (latestVersion !== version) {
|
|
21
|
+
git.checkout(name, latestVersion);
|
|
22
|
+
}
|
|
23
|
+
});
|
|
24
|
+
};
|
|
25
|
+
|
|
12
26
|
// eslint-disable-next-line @typescript-eslint/no-unused-expressions
|
|
13
27
|
yargs.scriptName('sv')
|
|
14
28
|
.usage('$0 <cmd> [args]')
|
|
@@ -18,6 +32,12 @@ yargs.scriptName('sv')
|
|
|
18
32
|
() => {},
|
|
19
33
|
mainProcess,
|
|
20
34
|
)
|
|
35
|
+
.command(
|
|
36
|
+
['update', 'u'],
|
|
37
|
+
'Update git modules to actual versions',
|
|
38
|
+
() => {},
|
|
39
|
+
update,
|
|
40
|
+
)
|
|
21
41
|
.command(
|
|
22
42
|
['install <url> [target]', 'i'],
|
|
23
43
|
'Install new submodule',
|