submodule-version 1.1.4 → 2.0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (55) hide show
  1. package/README.md +52 -9
  2. package/dist/index.d.ts +2 -0
  3. package/dist/index.js +5 -0
  4. package/dist/index.js.map +1 -0
  5. package/dist/src/__tests__/parseGitUrl.test.d.ts +1 -0
  6. package/dist/src/__tests__/parseGitUrl.test.js +30 -0
  7. package/dist/src/__tests__/parseGitUrl.test.js.map +1 -0
  8. package/dist/src/__tests__/versionUtil.test.d.ts +1 -0
  9. package/dist/src/__tests__/versionUtil.test.js +51 -0
  10. package/dist/src/__tests__/versionUtil.test.js.map +1 -0
  11. package/dist/src/buildGraph.d.ts +7 -0
  12. package/dist/src/buildGraph.js +73 -0
  13. package/dist/src/buildGraph.js.map +1 -0
  14. package/dist/src/config.d.ts +4 -0
  15. package/dist/src/config.js +8 -0
  16. package/dist/src/config.js.map +1 -0
  17. package/dist/src/git.d.ts +5 -0
  18. package/dist/src/git.js +54 -0
  19. package/dist/src/git.js.map +1 -0
  20. package/dist/src/install.d.ts +1 -0
  21. package/dist/src/install.js +43 -0
  22. package/dist/src/install.js.map +1 -0
  23. package/dist/src/log.d.ts +4 -0
  24. package/dist/src/log.js +20 -0
  25. package/dist/src/log.js.map +1 -0
  26. package/dist/src/parseGitUrl.d.ts +7 -0
  27. package/dist/src/parseGitUrl.js +26 -0
  28. package/dist/src/parseGitUrl.js.map +1 -0
  29. package/dist/src/pkgJsonUtil.d.ts +5 -0
  30. package/dist/src/pkgJsonUtil.js +38 -0
  31. package/dist/src/pkgJsonUtil.js.map +1 -0
  32. package/dist/src/submoduleVersion.d.ts +1 -0
  33. package/dist/src/submoduleVersion.js +43 -0
  34. package/dist/src/submoduleVersion.js.map +1 -0
  35. package/dist/src/versionUtil.d.ts +12 -0
  36. package/dist/src/versionUtil.js +68 -0
  37. package/dist/src/versionUtil.js.map +1 -0
  38. package/eslint.config.js +5 -0
  39. package/index-dev.ts +7 -0
  40. package/index.ts +3 -0
  41. package/jest.config.js +9 -0
  42. package/package.json +14 -4
  43. package/src/__tests__/parseGitUrl.test.ts +33 -0
  44. package/src/__tests__/versionUtil.test.ts +60 -0
  45. package/src/buildGraph.ts +105 -0
  46. package/src/config.ts +4 -0
  47. package/src/git.ts +51 -0
  48. package/src/install.ts +47 -0
  49. package/src/log.ts +16 -0
  50. package/src/parseGitUrl.ts +31 -0
  51. package/src/pkgJsonUtil.ts +36 -0
  52. package/src/submoduleVersion.ts +54 -0
  53. package/src/versionUtil.ts +82 -0
  54. package/tsconfig.json +30 -0
  55. package/index.js +0 -177
package/README.md CHANGED
@@ -1,17 +1,60 @@
1
- # Install or update
1
+ # Submodule version
2
2
 
3
- `npx sv i repo.git`
3
+ ## Git **S**ubmodule **V**ersion tool
4
4
 
5
- `npx sv i repo.git@1.0.0`
5
+ [![NPM](https://nodei.co/npm/submodule-version.png?mini=true)](https://www.npmjs.com/package/submodule-version)
6
6
 
7
- `npx sv install repo.git@1.0.0`
7
+ `Submodule version` is a tool to manage git submodules as versioned packages.
8
8
 
9
- `npx sv i repo.git@master`
9
+ This tool designet to split projects in-to submodules *without npm-packages headache*.
10
10
 
11
- # Validate
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
- `npx sv`
13
+ ## Problem to solve
14
14
 
15
- `npx sv v`
15
+ Take a look on the next situation:
16
16
 
17
- `npx sv validate`
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`
20
+
21
+ This cause next problems:
22
+
23
+ - Add `ui-slider-element` cause difficulties with handle different `render-engine` versions
24
+ - How to update `ui-button-element` if it's repo contains new version?
25
+
26
+ Submodule version helps to
27
+
28
+ - Take a look which project should be updated and which version should be installed
29
+ - Help update submodules and theirs dependencies
30
+ - Install new submodules
31
+
32
+ ## Installation
33
+
34
+ - Install sv tool `npm i -D submodule-version`
35
+ - Add `workspaces` section in `package.json`
36
+ ```
37
+ "workspaces": [
38
+ "modules/*"
39
+ ],
40
+ ```
41
+ - Install first submodule `npx sv i <git_repo>`
42
+ - Install npm dependencies `npm i`. Submodule will be linked in node_modules and its dependencies will be installed
43
+ - Use your submodule in code `import submodule from 'submodule-name'` 🔥
44
+
45
+ ## How it works
46
+
47
+ - 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
48
+ ```
49
+ "sv": {
50
+ "git@github.com:guljeny/submodule-version.git": "^1.0.0"
51
+ }
52
+ ```
53
+ - `Submodule version` creates a graph of whole project and install only possible and actual versions
54
+
55
+ ## Commands
56
+
57
+ - `sv validate` - Validate all dependencis and install missing modules
58
+ - `sv install <git_url> [target_submodule]` - Install new dependency
59
+ - `sv update` - Update all dependencies to the latest possible versions
60
+ - `sv help` - Description of all commands
@@ -0,0 +1,2 @@
1
+ #!/usr/bin/env node
2
+ import './src/submoduleVersion';
package/dist/index.js ADDED
@@ -0,0 +1,5 @@
1
+ #!/usr/bin/env node
2
+ "use strict";
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ require("./src/submoduleVersion");
5
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":";;;AAEA,kCAAgC"}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,30 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const parseGitUrl_1 = require("../parseGitUrl");
4
+ describe('Parse git url', () => {
5
+ it('Without version', () => {
6
+ const url = 'git@github.com:Casique-front/audio-mixer.git';
7
+ expect((0, parseGitUrl_1.parseGitUrl)(url)).toEqual({
8
+ url: 'git@github.com:Casique-front/audio-mixer.git',
9
+ version: undefined,
10
+ name: 'audio-mixer',
11
+ });
12
+ });
13
+ it('With version', () => {
14
+ const url = 'git@github.com:Casique-front/audio-mixer.git@1.0.1';
15
+ expect((0, parseGitUrl_1.parseGitUrl)(url)).toEqual({
16
+ url: 'git@github.com:Casique-front/audio-mixer.git',
17
+ version: '1.0.1',
18
+ name: 'audio-mixer',
19
+ });
20
+ });
21
+ it('Wrong string', () => {
22
+ const url = 'xxx@version';
23
+ expect((0, parseGitUrl_1.parseGitUrl)(url)).toEqual({
24
+ url: 'xxx@version',
25
+ version: null,
26
+ name: '',
27
+ });
28
+ });
29
+ });
30
+ //# sourceMappingURL=parseGitUrl.test.js.map
@@ -0,0 +1 @@
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"}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,51 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const versionUtil_1 = require("../versionUtil");
4
+ describe('Latest', () => {
5
+ it('Single version', () => {
6
+ const v = versionUtil_1.versionUtil.latest(['1.0.0']);
7
+ expect(v).toBe('1.0.0');
8
+ });
9
+ it('Path versions', () => {
10
+ const v = versionUtil_1.versionUtil.latest(['^1.0.0', '^1.0.1']);
11
+ expect(v).toBe('1.0.1');
12
+ });
13
+ it('Minor versions', () => {
14
+ const v = versionUtil_1.versionUtil.latest(['^1.1.0', '^1.0.23']);
15
+ expect(v).toBe('1.1.0');
16
+ });
17
+ it('Major versions', () => {
18
+ const v = versionUtil_1.versionUtil.latest(['^2.0.0', '^1.10.23']);
19
+ expect(v).toBe('2.0.0');
20
+ });
21
+ });
22
+ describe('Validate', () => {
23
+ it('Pass', () => {
24
+ expect(versionUtil_1.versionUtil.validate('')).toBe(false);
25
+ expect(versionUtil_1.versionUtil.validate('123')).toBe(false);
26
+ expect(versionUtil_1.versionUtil.validate('1.2.3')).toBe(true);
27
+ expect(versionUtil_1.versionUtil.validate('1.2.3', true)).toBe(true);
28
+ expect(versionUtil_1.versionUtil.validate('^1.2.3', true)).toBe(true);
29
+ expect(versionUtil_1.versionUtil.validate('^1.2.3')).toBe(false);
30
+ expect(versionUtil_1.versionUtil.validate('*')).toBe(false);
31
+ expect(versionUtil_1.versionUtil.validate('*', true)).toBe(true);
32
+ });
33
+ });
34
+ describe('Compare', () => {
35
+ it('Major mode', () => {
36
+ expect(versionUtil_1.versionUtil.compare([1, 2, 3], [1, 3, 4], 0)).toBe(true);
37
+ expect(versionUtil_1.versionUtil.compare([1, 3, 3], [1, 2, 4], 0)).toBe(false);
38
+ expect(versionUtil_1.versionUtil.compare([1, 2, 3], [1, 2, 4], 1)).toBe(true);
39
+ expect(versionUtil_1.versionUtil.compare([1, 2, 4], [1, 2, 3], 1)).toBe(false);
40
+ });
41
+ it('Minor mode', () => {
42
+ expect(versionUtil_1.versionUtil.compare([1, 2, 3], [1, 2, 4], 1)).toBe(true);
43
+ expect(versionUtil_1.versionUtil.compare([1, 2, 4], [1, 2, 3], 1)).toBe(false);
44
+ });
45
+ it('Path mode', () => {
46
+ expect(versionUtil_1.versionUtil.compare([1, 2, 3], [1, 2, 3], 2)).toBe(true);
47
+ expect(versionUtil_1.versionUtil.compare([1, 2, 4], [1, 2, 3], 2)).toBe(false);
48
+ expect(versionUtil_1.versionUtil.compare([1, 2, 3], [1, 2, 4], 2)).toBe(false);
49
+ });
50
+ });
51
+ //# sourceMappingURL=versionUtil.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"versionUtil.test.js","sourceRoot":"","sources":["../../../src/__tests__/versionUtil.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ export interface IGraphEntry {
2
+ versions: string[];
3
+ parents: Record<string, string>;
4
+ used: string[];
5
+ version: string;
6
+ }
7
+ export declare const buildGraph: () => Record<string, IGraphEntry> | void;
@@ -0,0 +1,73 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.buildGraph = void 0;
7
+ const chalk_1 = __importDefault(require("chalk"));
8
+ const pkgJsonUtil_1 = require("./pkgJsonUtil");
9
+ const log_1 = require("./log");
10
+ const git_1 = require("./git");
11
+ const parseGitUrl_1 = require("./parseGitUrl");
12
+ const versionUtil_1 = require("./versionUtil");
13
+ const buildGraph = () => {
14
+ const baseJson = pkgJsonUtil_1.pkgJsonUtil.read();
15
+ const baseTree = {};
16
+ if (!baseJson)
17
+ return log_1.log.error('Not a npm project');
18
+ if (!baseJson.sv)
19
+ return log_1.log.message('There is no dependencies');
20
+ const recursiveBuilder = (dependencies = {}, parent = '*') => {
21
+ Object.entries(dependencies).forEach(([url, version]) => {
22
+ const { name } = (0, parseGitUrl_1.parseGitUrl)(url);
23
+ const jsonPath = pkgJsonUtil_1.pkgJsonUtil.getPkgJsonPath(name);
24
+ if (!versionUtil_1.versionUtil.validate(version, true)) {
25
+ const em = `<${version}> for [${name}] in [${parent}]`;
26
+ return log_1.log.error('Unknown version', em);
27
+ }
28
+ if (!jsonPath) {
29
+ git_1.git.addSumbmodule(url);
30
+ }
31
+ const exists = baseTree[name] || null;
32
+ const mJson = exists ? null : pkgJsonUtil_1.pkgJsonUtil.read(name);
33
+ if (!version)
34
+ return log_1.log.error('Module', name, 'not installed');
35
+ const meta = exists?.meta || { version: mJson.version, sv: mJson.sv };
36
+ const parents = exists?.parents || {};
37
+ baseTree[name] = {
38
+ meta,
39
+ parents: { ...parents, [parent]: version },
40
+ };
41
+ recursiveBuilder(meta.sv, name);
42
+ });
43
+ };
44
+ recursiveBuilder(baseJson.sv, baseJson.name);
45
+ const graph = Object.entries(baseTree).reduce((acc, [name, data]) => {
46
+ const versions = git_1.git.listVersions(name);
47
+ const { parents, meta } = data;
48
+ const used = Object.entries(parents).reduce((selective, [, v]) => (versionUtil_1.versionUtil.pick(selective, v)), versions);
49
+ if (!used.length) {
50
+ const longestVersion = Object.values(parents).reduce((len, v) => (v.length > len ? v.length : len), 0);
51
+ const formattedName = chalk_1.default.green.bold(name);
52
+ const baseMsg = `${chalk_1.default.red('Confilict')} for ${formattedName}:`;
53
+ const conflictMsg = Object.entries(parents).reduce((msg, [pName, v]) => {
54
+ const formatedV = chalk_1.default.bold.red(String(v).padEnd(longestVersion, ' '));
55
+ return [
56
+ ...msg,
57
+ ` - Version ${formatedV} used in ${chalk_1.default.green.bold(pName)}`,
58
+ ];
59
+ }, [baseMsg]);
60
+ log_1.log.error(conflictMsg.join('\n'));
61
+ }
62
+ if (!used.includes(meta.version)) {
63
+ git_1.git.checkout(name, versionUtil_1.versionUtil.latest(used));
64
+ }
65
+ return {
66
+ ...acc,
67
+ [name]: { versions, parents, used, version: meta.version },
68
+ };
69
+ }, {});
70
+ return graph;
71
+ };
72
+ exports.buildGraph = buildGraph;
73
+ //# sourceMappingURL=buildGraph.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"buildGraph.js","sourceRoot":"","sources":["../../src/buildGraph.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ export declare const config: {
2
+ dir: string;
3
+ tag: string;
4
+ };
@@ -0,0 +1,8 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.config = void 0;
4
+ exports.config = {
5
+ dir: 'modules',
6
+ tag: 'master',
7
+ };
8
+ //# sourceMappingURL=config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/config.ts"],"names":[],"mappings":";;;AAAa,QAAA,MAAM,GAAG;IACpB,GAAG,EAAE,SAAS;IACd,GAAG,EAAE,QAAQ;CACd,CAAC"}
@@ -0,0 +1,5 @@
1
+ export declare const git: {
2
+ addSumbmodule: (url: string) => void;
3
+ checkout: (name: string, version: string) => void;
4
+ listVersions: (projectName: string) => string[];
5
+ };
@@ -0,0 +1,54 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.git = void 0;
7
+ const chalk_1 = __importDefault(require("chalk"));
8
+ const child_process_1 = require("child_process");
9
+ const path_1 = __importDefault(require("path"));
10
+ const config_1 = require("./config");
11
+ const log_1 = require("./log");
12
+ const parseGitUrl_1 = require("./parseGitUrl");
13
+ const versionUtil_1 = require("./versionUtil");
14
+ const addSumbmodule = (url) => {
15
+ const { name } = (0, parseGitUrl_1.parseGitUrl)(url);
16
+ const module = path_1.default.join(config_1.config.dir, name);
17
+ try {
18
+ (0, child_process_1.execSync)(`git submodule add ${url} ${module}`);
19
+ }
20
+ catch {
21
+ log_1.log.error(url, 'Is not a git repo');
22
+ }
23
+ };
24
+ const checkout = (name, version) => {
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);
28
+ log_1.log.message('Checkout', styledName, 'to', styledVer);
29
+ try {
30
+ (0, child_process_1.execSync)(`git -C ${module} fetch`);
31
+ (0, child_process_1.execSync)(`git -C ${module} checkout ${version} -q`);
32
+ }
33
+ catch {
34
+ log_1.log.error('Checkout failded');
35
+ }
36
+ ;
37
+ };
38
+ const listVersions = (projectName) => {
39
+ const module = path_1.default.join(config_1.config.dir, projectName);
40
+ (0, child_process_1.execSync)(`git -C ${module} fetch`);
41
+ const res = (0, child_process_1.execSync)(`git -C ${module} tag -l`);
42
+ const tagList = res.toString().split(/\r?\n/);
43
+ return tagList.filter(tag => {
44
+ if (!tag)
45
+ return false;
46
+ return versionUtil_1.versionUtil.validate(tag);
47
+ });
48
+ };
49
+ exports.git = {
50
+ addSumbmodule,
51
+ checkout,
52
+ listVersions,
53
+ };
54
+ //# sourceMappingURL=git.js.map
@@ -0,0 +1 @@
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;IAC5C,SAAG,CAAC,OAAO,CAAC,UAAU,EAAE,UAAU,EAAE,IAAI,EAAE,SAAS,CAAC,CAAC;IAErD,IAAI;QACF,IAAA,wBAAQ,EAAC,UAAU,MAAM,QAAQ,CAAC,CAAC;QACnC,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,IAAA,wBAAQ,EAAC,UAAU,MAAM,QAAQ,CAAC,CAAC;IACnC,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"}
@@ -0,0 +1 @@
1
+ export declare const install: (arg: any) => void;
@@ -0,0 +1,43 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.install = void 0;
7
+ const chalk_1 = __importDefault(require("chalk"));
8
+ const parseGitUrl_1 = require("./parseGitUrl");
9
+ const pkgJsonUtil_1 = require("./pkgJsonUtil");
10
+ const log_1 = require("./log");
11
+ const git_1 = require("./git");
12
+ const versionUtil_1 = require("./versionUtil");
13
+ const buildGraph_1 = require("./buildGraph");
14
+ /* Yargs typed as any */
15
+ const install = (arg) => {
16
+ const { target } = arg;
17
+ const { url, version, name } = (0, parseGitUrl_1.parseGitUrl)(arg.url);
18
+ if (!name) {
19
+ return log_1.log.error(chalk_1.default.red.bold(url), '- is not a git url!');
20
+ }
21
+ const targetPkg = pkgJsonUtil_1.pkgJsonUtil.read(target);
22
+ let installedPkg = pkgJsonUtil_1.pkgJsonUtil.read(name);
23
+ if (!installedPkg) {
24
+ git_1.git.addSumbmodule(url);
25
+ installedPkg = pkgJsonUtil_1.pkgJsonUtil.read(name);
26
+ }
27
+ const versions = git_1.git.listVersions(name);
28
+ const latestVersion = versionUtil_1.versionUtil.latest(versions);
29
+ const requestedVersion = version || latestVersion;
30
+ if (!versions.includes(requestedVersion)) {
31
+ const styledName = `Package ${chalk_1.default.bold.green(name)}`;
32
+ const styledVer = chalk_1.default.bgRed.bold.white(` ${requestedVersion} `);
33
+ const errMsg = `does not contain version ${styledVer}.`;
34
+ const styledVList = chalk_1.default.bold.green(versions.join(', '));
35
+ const helpMsg = `Use one from [${styledVList}]`;
36
+ log_1.log.error(styledName, errMsg, helpMsg);
37
+ }
38
+ targetPkg.sv[url] = `^${requestedVersion}`;
39
+ pkgJsonUtil_1.pkgJsonUtil.write(targetPkg, target);
40
+ (0, buildGraph_1.buildGraph)();
41
+ };
42
+ exports.install = install;
43
+ //# sourceMappingURL=install.js.map
@@ -0,0 +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;QACxC,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,IAAI,gBAAgB,EAAE,CAAC;IAC3C,yBAAW,CAAC,KAAK,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;IACrC,IAAA,uBAAU,GAAE,CAAC;AACf,CAAC,CAAC;AAhCW,QAAA,OAAO,WAgClB"}
@@ -0,0 +1,4 @@
1
+ export declare const log: {
2
+ message: (...args: string[]) => void;
3
+ error: (...args: string[]) => void;
4
+ };
@@ -0,0 +1,20 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.log = void 0;
7
+ const yargs_1 = __importDefault(require("yargs"));
8
+ const message = (...args) => {
9
+ // eslint-disable-next-line no-console
10
+ console.log(...args);
11
+ };
12
+ const error = (...args) => {
13
+ message(...args);
14
+ yargs_1.default.exit(1, new Error(args.join(' ')));
15
+ };
16
+ exports.log = {
17
+ message,
18
+ error,
19
+ };
20
+ //# sourceMappingURL=log.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"log.js","sourceRoot":"","sources":["../../src/log.ts"],"names":[],"mappings":";;;;;;AAAA,kDAA0B;AAE1B,MAAM,OAAO,GAAG,CAAC,GAAG,IAAc,EAAE,EAAE;IACpC,sCAAsC;IACtC,OAAO,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,CAAC;AACvB,CAAC,CAAC;AAEF,MAAM,KAAK,GAAG,CAAC,GAAG,IAAc,EAAE,EAAE;IAClC,OAAO,CAAC,GAAG,IAAI,CAAC,CAAC;IACjB,eAAK,CAAC,IAAI,CAAC,CAAC,EAAE,IAAI,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;AAC3C,CAAC,CAAC;AAEW,QAAA,GAAG,GAAG;IACjB,OAAO;IACP,KAAK;CACN,CAAC"}
@@ -0,0 +1,7 @@
1
+ interface IParseResult {
2
+ name: string;
3
+ url: string;
4
+ version: string | null;
5
+ }
6
+ export declare const parseGitUrl: (url: string) => IParseResult;
7
+ export {};
@@ -0,0 +1,26 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.parseGitUrl = void 0;
4
+ const PARSE_REGEX = /^(?<url>.*\.git)(@(?<version>.*))?$/;
5
+ const NAME_REGEX = /\/(?<name>.*)\.git/;
6
+ const makeEmptyObject = (url) => ({
7
+ name: '',
8
+ url,
9
+ version: null,
10
+ });
11
+ const parseGitUrl = (url) => {
12
+ const { groups } = PARSE_REGEX.exec(url) || {};
13
+ if (!groups || !groups.url)
14
+ return makeEmptyObject(url);
15
+ const { groups: nameGroups } = NAME_REGEX.exec(url) || {};
16
+ const { name } = nameGroups || {};
17
+ if (!name)
18
+ return makeEmptyObject(url);
19
+ return {
20
+ url: groups.url,
21
+ version: groups.version,
22
+ name,
23
+ };
24
+ };
25
+ exports.parseGitUrl = parseGitUrl;
26
+ //# sourceMappingURL=parseGitUrl.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parseGitUrl.js","sourceRoot":"","sources":["../../src/parseGitUrl.ts"],"names":[],"mappings":";;;AAMA,MAAM,WAAW,GAAG,qCAAqC,CAAC;AAC1D,MAAM,UAAU,GAAG,oBAAoB,CAAC;AAExC,MAAM,eAAe,GAAG,CAAC,GAAW,EAAE,EAAE,CAAC,CAAC;IACxC,IAAI,EAAE,EAAE;IACR,GAAG;IACH,OAAO,EAAE,IAAI;CACd,CAAC,CAAC;AAEI,MAAM,WAAW,GAAG,CAAC,GAAW,EAAgB,EAAE;IACvD,MAAM,EAAE,MAAM,EAAE,GAAG,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC;IAE/C,IAAI,CAAC,MAAM,IAAI,CAAC,MAAM,CAAC,GAAG;QAAE,OAAO,eAAe,CAAC,GAAG,CAAC,CAAC;IAExD,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,GAAG,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC;IAC1D,MAAM,EAAE,IAAI,EAAE,GAAG,UAAU,IAAI,EAAE,CAAC;IAElC,IAAI,CAAC,IAAI;QAAE,OAAO,eAAe,CAAC,GAAG,CAAC,CAAC;IAEvC,OAAO;QACL,GAAG,EAAE,MAAM,CAAC,GAAG;QACf,OAAO,EAAE,MAAM,CAAC,OAAO;QACvB,IAAI;KACL,CAAC;AACJ,CAAC,CAAC;AAfW,QAAA,WAAW,eAetB"}
@@ -0,0 +1,5 @@
1
+ export declare const pkgJsonUtil: {
2
+ getPkgJsonPath: (name?: string) => string | null;
3
+ read: (name?: string) => any;
4
+ write: (data: Object, name?: string) => null | undefined;
5
+ };
@@ -0,0 +1,38 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.pkgJsonUtil = void 0;
7
+ const fs_1 = __importDefault(require("fs"));
8
+ const path_1 = __importDefault(require("path"));
9
+ const config_1 = require("./config");
10
+ const JSON_NAME = 'package.json';
11
+ const getPkgJsonPath = (name) => {
12
+ const folder = name ? [config_1.config.dir, name] : [];
13
+ const jsonPath = path_1.default.join(process.cwd(), ...folder, JSON_NAME);
14
+ const isJsonExists = fs_1.default.existsSync(jsonPath);
15
+ if (!isJsonExists)
16
+ return null;
17
+ return jsonPath;
18
+ };
19
+ const read = (name) => {
20
+ const jsonPath = getPkgJsonPath(name);
21
+ if (!jsonPath)
22
+ return null;
23
+ const jsonString = fs_1.default.readFileSync(jsonPath, 'utf-8');
24
+ return JSON.parse(jsonString);
25
+ };
26
+ const write = (data, name) => {
27
+ const jsonPath = getPkgJsonPath(name);
28
+ if (!jsonPath)
29
+ return null;
30
+ fs_1.default.writeFileSync(jsonPath, JSON.stringify(data, null, 2));
31
+ };
32
+ exports.pkgJsonUtil = {
33
+ getPkgJsonPath,
34
+ read,
35
+ write,
36
+ };
37
+ module.exports = { pkgJsonUtil: exports.pkgJsonUtil };
38
+ //# sourceMappingURL=pkgJsonUtil.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pkgJsonUtil.js","sourceRoot":"","sources":["../../src/pkgJsonUtil.ts"],"names":[],"mappings":";;;;;;AAAA,4CAAoB;AACpB,gDAAwB;AACxB,qCAAkC;AAElC,MAAM,SAAS,GAAG,cAAc,CAAC;AAEjC,MAAM,cAAc,GAAG,CAAC,IAAa,EAAE,EAAE;IACvC,MAAM,MAAM,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,eAAM,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IAC9C,MAAM,QAAQ,GAAG,cAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,GAAG,MAAM,EAAE,SAAS,CAAC,CAAC;IAChE,MAAM,YAAY,GAAG,YAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;IAC7C,IAAI,CAAC,YAAY;QAAE,OAAO,IAAI,CAAC;IAE/B,OAAO,QAAQ,CAAC;AAClB,CAAC,CAAC;AAEF,MAAM,IAAI,GAAG,CAAC,IAAa,EAAE,EAAE;IAC7B,MAAM,QAAQ,GAAG,cAAc,CAAC,IAAI,CAAC,CAAC;IACtC,IAAI,CAAC,QAAQ;QAAE,OAAO,IAAI,CAAC;IAC3B,MAAM,UAAU,GAAG,YAAE,CAAC,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;IAEtD,OAAO,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;AAChC,CAAC,CAAC;AAEF,MAAM,KAAK,GAAG,CAAC,IAAY,EAAE,IAAa,EAAE,EAAE;IAC5C,MAAM,QAAQ,GAAG,cAAc,CAAC,IAAI,CAAC,CAAC;IACtC,IAAI,CAAC,QAAQ;QAAE,OAAO,IAAI,CAAC;IAC3B,YAAE,CAAC,aAAa,CAAC,QAAQ,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;AAC5D,CAAC,CAAC;AAEW,QAAA,WAAW,GAAG;IACzB,cAAc;IACd,IAAI;IACJ,KAAK;CACN,CAAC;AAEF,MAAM,CAAC,OAAO,GAAG,EAAE,WAAW,EAAX,mBAAW,EAAE,CAAC"}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,43 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ const chalk_1 = __importDefault(require("chalk"));
7
+ const yargs_1 = __importDefault(require("yargs"));
8
+ const buildGraph_1 = require("./buildGraph");
9
+ const versionUtil_1 = require("./versionUtil");
10
+ const install_1 = require("./install");
11
+ const log_1 = require("./log");
12
+ const git_1 = require("./git");
13
+ const mainProcess = () => {
14
+ (0, buildGraph_1.buildGraph)();
15
+ log_1.log.message(chalk_1.default.green.bold('Everything is up to date!🔥'));
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
+ };
29
+ // eslint-disable-next-line @typescript-eslint/no-unused-expressions
30
+ yargs_1.default.scriptName('sv')
31
+ .usage('$0 <cmd> [args]')
32
+ .command(['validate', '$0', 'v'], 'Validate and install modules', () => { }, mainProcess)
33
+ .command(['update', 'u'], 'Update git modules to actual versions', () => { }, update)
34
+ .command(['install <url> [target]', 'i'], 'Install new submodule', y => y.positional('url', {
35
+ type: 'string',
36
+ describe: 'Git submodule url',
37
+ }).positional('target', {
38
+ type: 'string',
39
+ describe: 'Target module name',
40
+ }), install_1.install)
41
+ .help()
42
+ .argv;
43
+ //# sourceMappingURL=submoduleVersion.js.map
@@ -0,0 +1 @@
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"}
@@ -0,0 +1,12 @@
1
+ declare enum ComapreMode {
2
+ major = 0,
3
+ minor = 1,
4
+ path = 2
5
+ }
6
+ export declare const versionUtil: {
7
+ compare: (baseVer: number[], actualVer: number[], compareMode: ComapreMode) => any;
8
+ pick: (allVersions: string[], v: string) => string[];
9
+ validate: (v: string, relative?: boolean) => boolean;
10
+ latest: (versions: string[]) => string;
11
+ };
12
+ export {};