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 CHANGED
@@ -1,17 +1,77 @@
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 designed 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` 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]`
@@ -1 +1,7 @@
1
- export declare const buildGraph: () => void | {};
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;
@@ -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 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
+ 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 (!jsonPath) {
35
+ if (!isInstalled) {
29
36
  git_1.git.addSumbmodule(url);
30
37
  }
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 || {};
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
- if (!used.length) {
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
- git_1.git.checkout(name, versionUtil_1.versionUtil.latest(used));
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":"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"}
1
+ {"version":3,"file":"buildGraph.js","sourceRoot":"","sources":["../../src/buildGraph.ts"],"names":[],"mappings":"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"}
package/dist/src/git.d.ts CHANGED
@@ -1,5 +1,5 @@
1
1
  export declare const git: {
2
2
  addSumbmodule: (url: string) => void;
3
- checkout: (url: string, version: string) => void;
3
+ checkout: (name: string, version: string) => void;
4
4
  listVersions: (projectName: string) => string[];
5
5
  };
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 = (url, version) => {
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 => {
@@ -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,GAAW,EAAE,OAAe,EAAE,EAAE;IAChD,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,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,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"}
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"}
@@ -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
  };
@@ -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;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"}
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"}
@@ -58,7 +58,7 @@ const latest = (versions) => (cleanup([...versions].sort((v1, v2) => {
58
58
  const v2Val = v2Arr[i];
59
59
  return v2Val - v1Val;
60
60
  }, 0);
61
- })[0]));
61
+ })[0] || ''));
62
62
  exports.versionUtil = {
63
63
  compare,
64
64
  pick,
@@ -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
@@ -1,6 +1,7 @@
1
1
  #!/usr/bin/env ts-node
2
2
 
3
3
  import chalk from 'chalk';
4
+ import { log } from './src/log';
4
5
 
5
- console.log(chalk.bgRed.white.bold(' RUNNED IN DEV MODE '));
6
+ log.message(chalk.bgRed.white.bold(' RUNNED IN DEV MODE '));
6
7
  import './src/submoduleVersion';
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "submodule-version",
3
3
  "description": "Git <S>ubmodule <V>ersioning tool",
4
- "version": "2.0.0",
4
+ "version": "2.0.3",
5
5
  "bin": {
6
6
  "sv": "dist/index.js",
7
7
  "sv-dev": "index-dev.ts"
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 const buildGraph = () => {
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 jsonPath = pkgJsonUtil.getPkgJsonPath(name);
31
- if (!versionUtil.validate(version, true)) {
32
- const em = `<${version}> for [${name}] in [${parent}]`;
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', em);
49
+ return log.error('Unknown version', stV, 'for', stName, 'in', stParent);
35
50
  }
36
- if (!jsonPath) {
51
+
52
+ if (!isInstalled) {
37
53
  git.addSumbmodule(url);
38
54
  }
39
55
 
40
- const exists = baseTree[name] || null;
41
- const mJson = exists ? null : pkgJsonUtil.read(name);
56
+ const existEntry = baseTree[name] || null;
57
+ const mJson = existEntry ? null : pkgJsonUtil.read(name);
42
58
 
43
- if (!version) return log.error('Module', name, 'not installed');
59
+ const meta = {
60
+ version: existEntry?.meta.version || mJson?.version || version || '*',
61
+ sv: existEntry?.meta.sv || mJson?.sv || {},
62
+ };
44
63
 
45
- const meta = exists?.meta || { version: mJson.version, sv: mJson.sv };
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
- if (!used.length) {
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
- git.checkout(name, versionUtil.latest(used));
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 = (url: string, version: string) => {
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
  };
@@ -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',
@@ -71,7 +71,7 @@ const latest = (versions: string[]) => (
71
71
 
72
72
  return v2Val - v1Val;
73
73
  }, 0);
74
- })[0])
74
+ })[0] || '')
75
75
  );
76
76
 
77
77
  export const versionUtil = {