submodule-version 2.1.3 → 2.2.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.
Files changed (33) hide show
  1. package/dist/runner/handleErrors/handleBuildGraphError.js +2 -2
  2. package/dist/runner/handleErrors/handleBuildGraphError.js.map +1 -1
  3. package/dist/src/buildGraph/GraphError.js.map +1 -0
  4. package/dist/src/buildGraph/buildGraph.d.ts +7 -0
  5. package/dist/src/buildGraph/buildGraph.js +81 -0
  6. package/dist/src/buildGraph/buildGraph.js.map +1 -0
  7. package/dist/src/{Graph → buildGraph}/index.d.ts +1 -1
  8. package/dist/src/buildGraph/index.js +8 -0
  9. package/dist/src/buildGraph/index.js.map +1 -0
  10. package/dist/src/{PkgJSONManager.d.ts → pkgJSONManager.d.ts} +2 -4
  11. package/dist/src/pkgJSONManager.js +41 -0
  12. package/dist/src/pkgJSONManager.js.map +1 -0
  13. package/dist/src/sv.d.ts +1 -3
  14. package/dist/src/sv.js +16 -16
  15. package/dist/src/sv.js.map +1 -1
  16. package/package.json +1 -1
  17. package/runner/handleErrors/handleBuildGraphError.ts +1 -1
  18. package/src/buildGraph/buildGraph.ts +117 -0
  19. package/src/{Graph → buildGraph}/index.ts +1 -1
  20. package/src/{PkgJSONManager.ts → pkgJSONManager.ts} +6 -20
  21. package/src/sv.ts +16 -21
  22. package/dist/src/Graph/Graph.d.ts +0 -12
  23. package/dist/src/Graph/Graph.js +0 -85
  24. package/dist/src/Graph/Graph.js.map +0 -1
  25. package/dist/src/Graph/GraphError.js.map +0 -1
  26. package/dist/src/Graph/index.js +0 -8
  27. package/dist/src/Graph/index.js.map +0 -1
  28. package/dist/src/PkgJSONManager.js +0 -53
  29. package/dist/src/PkgJSONManager.js.map +0 -1
  30. package/src/Graph/Graph.ts +0 -121
  31. /package/dist/src/{Graph → buildGraph}/GraphError.d.ts +0 -0
  32. /package/dist/src/{Graph → buildGraph}/GraphError.js +0 -0
  33. /package/src/{Graph → buildGraph}/GraphError.ts +0 -0
@@ -4,11 +4,11 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
4
4
  };
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
6
  exports.handleBuildGraphError = void 0;
7
- const Graph_1 = require("../../src/Graph");
7
+ const buildGraph_1 = require("../../src/buildGraph");
8
8
  const log_1 = require("../log");
9
9
  const chalk_1 = __importDefault(require("chalk"));
10
10
  const handleBuildGraphError = (error) => {
11
- if (!(error instanceof Graph_1.GraphError))
11
+ if (!(error instanceof buildGraph_1.GraphError))
12
12
  return;
13
13
  const { message: errorMessage, details } = error;
14
14
  if (errorMessage === 'NOT_A_NPM') {
@@ -1 +1 @@
1
- {"version":3,"file":"handleBuildGraphError.js","sourceRoot":"","sources":["../../../runner/handleErrors/handleBuildGraphError.ts"],"names":[],"mappings":";;;;;;AAAA,2CAA6C;AAC7C,gCAA6B;AAC7B,kDAA0B;AAEnB,MAAM,qBAAqB,GAAG,CAAC,KAAY,EAAE,EAAE;IACpD,IAAI,CAAC,CAAC,KAAK,YAAY,kBAAU,CAAC;QAAE,OAAO;IAE3C,MAAM,EAAE,OAAO,EAAE,YAAY,EAAE,OAAO,EAAE,GAAG,KAAK,CAAC;IAEjD,IAAI,YAAY,KAAK,WAAW,EAAE,CAAC;QACjC,SAAG,CAAC,KAAK,CAAC,mBAAmB,CAAC,CAAC;IACjC,CAAC;IAED,IAAI,YAAY,KAAK,iBAAiB,EAAE,CAAC;QACvC,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC;QAC1C,MAAM,GAAG,GAAG,eAAK,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,OAAO,GAAG,CAAC,CAAC;QACnD,MAAM,MAAM,GAAG,eAAK,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACpC,MAAM,QAAQ,GAAG,eAAK,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAE1C,SAAG,CAAC,KAAK,CAAC,iBAAiB,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,CAAC,CAAC;IACnE,CAAC;IAED,IAAI,YAAY,KAAK,kBAAkB,EAAE,CAAC;QACxC,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,GAAG,OAAO,CAAC;QAElC,MAAM,cAAc,GAAG,MAAM,CAAC,MAAM,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,CACrE,CAAC,CAAC,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,CAChC,EAAE,CAAC,CAAC,CAAC;QAEN,MAAM,aAAa,GAAG,eAAK,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC7C,MAAM,OAAO,GAAG,GAAG,eAAK,CAAC,GAAG,CAAC,WAAW,CAAC,QAAQ,aAAa,GAAG,CAAC;QAElE,MAAM,WAAW,GAAG,MAAM,CAAC,OAAO,CAAC,OAAO,IAAI,EAAE,CAAC;aAC9C,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,KAAK,EAAE,CAAC,CAAC,EAAE,EAAE;YAC1B,MAAM,SAAS,GAAG,eAAK,CAAC,IAAI,CAAC,GAAG,CAC9B,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,cAAc,EAAE,GAAG,CAAC,CACtC,CAAC;YAEF,OAAO;gBACL,GAAG,GAAG;gBACN,eAAe,SAAS,YAAY,eAAK,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE;aAC9D,CAAC;QACJ,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC;QAEhB,SAAG,CAAC,KAAK,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;IACpC,CAAC;IAED,SAAG,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;AAC1B,CAAC,CAAC;AA5CW,QAAA,qBAAqB,yBA4ChC"}
1
+ {"version":3,"file":"handleBuildGraphError.js","sourceRoot":"","sources":["../../../runner/handleErrors/handleBuildGraphError.ts"],"names":[],"mappings":";;;;;;AAAA,qDAAkD;AAClD,gCAA6B;AAC7B,kDAA0B;AAEnB,MAAM,qBAAqB,GAAG,CAAC,KAAY,EAAE,EAAE;IACpD,IAAI,CAAC,CAAC,KAAK,YAAY,uBAAU,CAAC;QAAE,OAAO;IAE3C,MAAM,EAAE,OAAO,EAAE,YAAY,EAAE,OAAO,EAAE,GAAG,KAAK,CAAC;IAEjD,IAAI,YAAY,KAAK,WAAW,EAAE,CAAC;QACjC,SAAG,CAAC,KAAK,CAAC,mBAAmB,CAAC,CAAC;IACjC,CAAC;IAED,IAAI,YAAY,KAAK,iBAAiB,EAAE,CAAC;QACvC,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC;QAC1C,MAAM,GAAG,GAAG,eAAK,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,OAAO,GAAG,CAAC,CAAC;QACnD,MAAM,MAAM,GAAG,eAAK,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACpC,MAAM,QAAQ,GAAG,eAAK,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAE1C,SAAG,CAAC,KAAK,CAAC,iBAAiB,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,CAAC,CAAC;IACnE,CAAC;IAED,IAAI,YAAY,KAAK,kBAAkB,EAAE,CAAC;QACxC,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,GAAG,OAAO,CAAC;QAElC,MAAM,cAAc,GAAG,MAAM,CAAC,MAAM,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,CACrE,CAAC,CAAC,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,CAChC,EAAE,CAAC,CAAC,CAAC;QAEN,MAAM,aAAa,GAAG,eAAK,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC7C,MAAM,OAAO,GAAG,GAAG,eAAK,CAAC,GAAG,CAAC,WAAW,CAAC,QAAQ,aAAa,GAAG,CAAC;QAElE,MAAM,WAAW,GAAG,MAAM,CAAC,OAAO,CAAC,OAAO,IAAI,EAAE,CAAC;aAC9C,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,KAAK,EAAE,CAAC,CAAC,EAAE,EAAE;YAC1B,MAAM,SAAS,GAAG,eAAK,CAAC,IAAI,CAAC,GAAG,CAC9B,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,cAAc,EAAE,GAAG,CAAC,CACtC,CAAC;YAEF,OAAO;gBACL,GAAG,GAAG;gBACN,eAAe,SAAS,YAAY,eAAK,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE;aAC9D,CAAC;QACJ,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC;QAEhB,SAAG,CAAC,KAAK,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;IACpC,CAAC;IAED,SAAG,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;AAC1B,CAAC,CAAC;AA5CW,QAAA,qBAAqB,yBA4ChC"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"GraphError.js","sourceRoot":"","sources":["../../../src/buildGraph/GraphError.ts"],"names":[],"mappings":";;;AAOA,MAAa,UAAW,SAAQ,KAAK;IACnC,YAAa,IAAY,EAAS,OAAiB;QACjD,KAAK,CAAC,IAAI,CAAC,CAAC;QADoB,YAAO,GAAP,OAAO,CAAU;IAEnD,CAAC;CACF;AAJD,gCAIC"}
@@ -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: () => Promise<Record<string, IGraphEntry>>;
@@ -0,0 +1,81 @@
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 fs_1 = __importDefault(require("fs"));
8
+ const path_1 = __importDefault(require("path"));
9
+ const pkgJSONManager_1 = require("../pkgJSONManager");
10
+ const versionUtil_1 = require("../versionUtil");
11
+ const git_1 = require("../git");
12
+ const runOptions_1 = require("../runOptions");
13
+ const GraphError_1 = require("./GraphError");
14
+ const buildGraph = async () => {
15
+ const baseJson = await pkgJSONManager_1.pkgJSONManager.read();
16
+ const baseTree = {};
17
+ if (!baseJson) {
18
+ throw new Error('NOT_A_NPM');
19
+ }
20
+ if (!baseJson.sv) {
21
+ /** There is no dependencies, graph is empty */
22
+ return {};
23
+ }
24
+ const recursiveBuilder = async (dependencies = {}, parent = '*') => {
25
+ await Promise.all(Object.entries(dependencies).map(async ([url, version]) => {
26
+ const { name } = git_1.git.parseUrl(url);
27
+ const { cwd, modulesDir } = runOptions_1.RunOptions;
28
+ const moduleDir = path_1.default.join(cwd, modulesDir, name);
29
+ const isInstalled = fs_1.default.existsSync(moduleDir);
30
+ if (version && !versionUtil_1.versionUtil.validate(version, true)) {
31
+ throw new GraphError_1.GraphError('UNKNOWN_VERSION', { name, version, parent });
32
+ }
33
+ if (!isInstalled) {
34
+ await git_1.git.addSumbmodule(url);
35
+ }
36
+ const existEntry = baseTree[name] || null;
37
+ const mJson = existEntry
38
+ ? null
39
+ : await pkgJSONManager_1.pkgJSONManager.read(name);
40
+ const meta = {
41
+ version: existEntry?.meta.version
42
+ || mJson?.version
43
+ || version
44
+ || '*',
45
+ sv: existEntry?.meta.sv || mJson?.sv || {},
46
+ };
47
+ const parents = existEntry?.parents || {};
48
+ baseTree[name] = {
49
+ meta,
50
+ parents: { ...parents, [parent]: version },
51
+ };
52
+ await recursiveBuilder(meta.sv, name);
53
+ }));
54
+ };
55
+ await recursiveBuilder(baseJson.sv, baseJson.name);
56
+ const graph = await Promise.all(Object.entries(baseTree).map(async ([name, data]) => {
57
+ const versions = await git_1.git.listVersions(name);
58
+ const { parents, meta } = data;
59
+ const used = Object.entries(parents).reduce((selective, [, v]) => (versionUtil_1.versionUtil.pick(selective, v)), versions);
60
+ // No compatible version found and module has version tags
61
+ if (!used.length && versions.length) {
62
+ throw new GraphError_1.GraphError('VERSION_CONFLICT', { parents, name });
63
+ }
64
+ if (!used.includes(meta.version)) {
65
+ const latest = versionUtil_1.versionUtil.latest(used);
66
+ if (latest) {
67
+ await git_1.git.checkout(name, latest);
68
+ }
69
+ }
70
+ return {
71
+ name,
72
+ data: { versions, parents, used, version: meta.version },
73
+ };
74
+ }));
75
+ return graph.reduce((acc, { name, data }) => ({
76
+ ...acc,
77
+ [name]: data,
78
+ }), {});
79
+ };
80
+ exports.buildGraph = buildGraph;
81
+ //# sourceMappingURL=buildGraph.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"buildGraph.js","sourceRoot":"","sources":["../../../src/buildGraph/buildGraph.ts"],"names":[],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- export { Graph } from './Graph';
1
+ export { buildGraph } from './buildGraph';
2
2
  export { GraphError } from './GraphError';
@@ -0,0 +1,8 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.GraphError = exports.buildGraph = void 0;
4
+ var buildGraph_1 = require("./buildGraph");
5
+ Object.defineProperty(exports, "buildGraph", { enumerable: true, get: function () { return buildGraph_1.buildGraph; } });
6
+ var GraphError_1 = require("./GraphError");
7
+ Object.defineProperty(exports, "GraphError", { enumerable: true, get: function () { return GraphError_1.GraphError; } });
8
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/buildGraph/index.ts"],"names":[],"mappings":";;;AAAA,2CAA0C;AAAjC,wGAAA,UAAU,OAAA;AACnB,2CAA0C;AAAjC,wGAAA,UAAU,OAAA"}
@@ -1,6 +1,4 @@
1
- export declare class PkgJSONManager {
2
- private cache;
1
+ export declare const pkgJSONManager: {
3
2
  read: (submoduleName?: string) => Promise<any>;
4
3
  write: (data: Object, submoduleName?: string) => Promise<void>;
5
- clearCache(): void;
6
- }
4
+ };
@@ -0,0 +1,41 @@
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.pkgJSONManager = void 0;
7
+ const fs_1 = __importDefault(require("fs"));
8
+ const util_1 = require("util");
9
+ const path_1 = __importDefault(require("path"));
10
+ const runOptions_1 = require("./runOptions");
11
+ const existsAsync = (0, util_1.promisify)(fs_1.default.exists);
12
+ const readFileAsync = (0, util_1.promisify)(fs_1.default.readFile);
13
+ const writeFileAsync = (0, util_1.promisify)(fs_1.default.writeFile);
14
+ const JSON_NAME = 'package.json';
15
+ const getJsonPath = async (submoduleName) => {
16
+ const folder = submoduleName ? [runOptions_1.RunOptions.modulesDir, submoduleName] : [];
17
+ const jsonPath = path_1.default.join(runOptions_1.RunOptions.cwd, ...folder, JSON_NAME);
18
+ const isJsonExists = await existsAsync(jsonPath);
19
+ if (!isJsonExists)
20
+ return null;
21
+ return jsonPath;
22
+ };
23
+ exports.pkgJSONManager = {
24
+ /* Reads package.json in project folder or in submodule */
25
+ read: async (submoduleName) => {
26
+ const jsonPath = await getJsonPath(submoduleName);
27
+ if (!jsonPath)
28
+ return null;
29
+ const jsonString = await readFileAsync(jsonPath, 'utf-8');
30
+ const parsed = JSON.parse(jsonString);
31
+ return parsed;
32
+ },
33
+ /* Writes package.json in project folder or in submodule */
34
+ write: async (data, submoduleName) => {
35
+ const jsonPath = await getJsonPath(submoduleName);
36
+ if (!jsonPath)
37
+ return;
38
+ await writeFileAsync(jsonPath, JSON.stringify(data, null, 2));
39
+ },
40
+ };
41
+ //# sourceMappingURL=pkgJSONManager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pkgJSONManager.js","sourceRoot":"","sources":["../../src/pkgJSONManager.ts"],"names":[],"mappings":";;;;;;AAAA,4CAAoB;AACpB,+BAAiC;AACjC,gDAAwB;AACxB,6CAA0C;AAE1C,MAAM,WAAW,GAAG,IAAA,gBAAS,EAAC,YAAE,CAAC,MAAM,CAAC,CAAC;AACzC,MAAM,aAAa,GAAG,IAAA,gBAAS,EAAC,YAAE,CAAC,QAAQ,CAAC,CAAC;AAC7C,MAAM,cAAc,GAAG,IAAA,gBAAS,EAAC,YAAE,CAAC,SAAS,CAAC,CAAC;AAC/C,MAAM,SAAS,GAAG,cAAc,CAAC;AAIjC,MAAM,WAAW,GAAG,KAAK,EAAE,aAAsB,EAAsB,EAAE;IACvE,MAAM,MAAM,GAAG,aAAa,CAAC,CAAC,CAAC,CAAC,uBAAU,CAAC,UAAU,EAAE,aAAa,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IAC3E,MAAM,QAAQ,GAAG,cAAI,CAAC,IAAI,CAAC,uBAAU,CAAC,GAAG,EAAE,GAAG,MAAM,EAAE,SAAS,CAAC,CAAC;IACjE,MAAM,YAAY,GAAG,MAAM,WAAW,CAAC,QAAQ,CAAC,CAAC;IACjD,IAAI,CAAC,YAAY;QAAE,OAAO,IAAI,CAAC;IAE/B,OAAO,QAAQ,CAAC;AAClB,CAAC,CAAC;AAEW,QAAA,cAAc,GAAG;IAC5B,0DAA0D;IAC1D,IAAI,EAAE,KAAK,EAAE,aAAsB,EAAE,EAAE;QACrC,MAAM,QAAQ,GAAG,MAAM,WAAW,CAAC,aAAa,CAAC,CAAC;QAElD,IAAI,CAAC,QAAQ;YAAE,OAAO,IAAI,CAAC;QAE3B,MAAM,UAAU,GAAG,MAAM,aAAa,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;QAC1D,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;QAEtC,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,2DAA2D;IAC3D,KAAK,EAAE,KAAK,EAAE,IAAY,EAAE,aAAsB,EAAE,EAAE;QACpD,MAAM,QAAQ,GAAG,MAAM,WAAW,CAAC,aAAa,CAAC,CAAC;QAElD,IAAI,CAAC,QAAQ;YAAE,OAAO;QAEtB,MAAM,cAAc,CAAC,QAAQ,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;IAChE,CAAC;CACF,CAAC"}
package/dist/src/sv.d.ts CHANGED
@@ -1,8 +1,6 @@
1
1
  export declare class SV {
2
- private pkgJSONManager;
3
- private graph;
4
2
  constructor(projectDir: string, modulesDir?: string);
5
- buildGraph: () => Promise<Record<string, import("./Graph/Graph").IGraphEntry>>;
3
+ buildGraph: () => Promise<Record<string, import("./buildGraph/buildGraph").IGraphEntry>>;
6
4
  install: (gitUrl: string, parentModule?: string) => Promise<void>;
7
5
  update: () => Promise<void>;
8
6
  remove: (submoduleName: string, parentModule?: string) => Promise<void>;
package/dist/src/sv.js CHANGED
@@ -1,24 +1,25 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.SV = void 0;
4
- const PkgJSONManager_1 = require("./PkgJSONManager");
5
- const Graph_1 = require("./Graph");
4
+ const pkgJSONManager_1 = require("./pkgJSONManager");
5
+ const buildGraph_1 = require("./buildGraph");
6
6
  const runOptions_1 = require("./runOptions");
7
7
  const versionUtil_1 = require("./versionUtil");
8
8
  const git_1 = require("./git");
9
9
  class SV {
10
10
  constructor(projectDir, modulesDir = 'addons') {
11
- this.buildGraph = () => this.graph.build();
11
+ this.buildGraph = buildGraph_1.buildGraph;
12
+ // eslint-disable-next-line class-methods-use-this
12
13
  this.install = async (gitUrl, parentModule) => {
13
14
  const { url, version, name } = git_1.git.parseUrl(gitUrl);
14
15
  if (!name) {
15
16
  throw new Error('NOT_A_GIT_URL');
16
17
  }
17
- const targetPkg = await this.pkgJSONManager.read(parentModule);
18
- let installedPkg = await this.pkgJSONManager.read(name);
18
+ const targetPkg = await pkgJSONManager_1.pkgJSONManager.read(parentModule);
19
+ let installedPkg = await pkgJSONManager_1.pkgJSONManager.read(name);
19
20
  if (!installedPkg) {
20
21
  await git_1.git.addSumbmodule(url);
21
- installedPkg = this.pkgJSONManager.read(name);
22
+ installedPkg = pkgJSONManager_1.pkgJSONManager.read(name);
22
23
  }
23
24
  const versions = await git_1.git.listVersions(name);
24
25
  const latestVersion = versionUtil_1.versionUtil.latest(versions);
@@ -30,11 +31,12 @@ class SV {
30
31
  targetPkg.sv = {};
31
32
  }
32
33
  targetPkg.sv[url] = requestedVersion ? `^${requestedVersion}` : '*';
33
- await this.pkgJSONManager.write(targetPkg, parentModule);
34
- await this.graph.build();
34
+ await pkgJSONManager_1.pkgJSONManager.write(targetPkg, parentModule);
35
+ await (0, buildGraph_1.buildGraph)();
35
36
  };
37
+ // eslint-disable-next-line class-methods-use-this
36
38
  this.update = async () => {
37
- const graph = await this.graph.build();
39
+ const graph = await (0, buildGraph_1.buildGraph)();
38
40
  if (!graph)
39
41
  return;
40
42
  await Promise.all(Object.entries(graph).map(async ([name, data]) => {
@@ -45,25 +47,23 @@ class SV {
45
47
  }
46
48
  }));
47
49
  };
50
+ // eslint-disable-next-line class-methods-use-this
48
51
  this.remove = async (submoduleName, parentModule) => {
49
52
  await git_1.git.rm(submoduleName);
50
- const json = await this.pkgJSONManager.read(parentModule);
53
+ const json = await pkgJSONManager_1.pkgJSONManager.read(parentModule);
51
54
  if (!json.sv)
52
55
  return;
53
- const sv = Object.keys(json.sv).reduce((acc, k) => {
56
+ json.sv = Object.keys(json.sv).reduce((acc, k) => {
54
57
  if (k.endsWith(`${submoduleName}.git`)) {
55
58
  return acc;
56
59
  }
57
60
  return { ...acc, [k]: json.sv[k] };
58
61
  }, {});
59
- json.sv = sv;
60
- await this.pkgJSONManager.write(json, parentModule);
61
- await this.graph.build();
62
+ await pkgJSONManager_1.pkgJSONManager.write(json, parentModule);
63
+ await (0, buildGraph_1.buildGraph)();
62
64
  };
63
65
  runOptions_1.RunOptions.cwd = projectDir;
64
66
  runOptions_1.RunOptions.modulesDir = modulesDir;
65
- this.pkgJSONManager = new PkgJSONManager_1.PkgJSONManager();
66
- this.graph = new Graph_1.Graph(this.pkgJSONManager);
67
67
  }
68
68
  }
69
69
  exports.SV = SV;
@@ -1 +1 @@
1
- {"version":3,"file":"sv.js","sourceRoot":"","sources":["../../src/sv.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"sv.js","sourceRoot":"","sources":["../../src/sv.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "submodule-version",
3
3
  "description": "Git <S>ubmodule <V>ersioning tool",
4
- "version": "2.1.3",
4
+ "version": "2.2.0",
5
5
  "repository": "github:guljeny/submodule-version",
6
6
  "main": "dist/src/index.js",
7
7
  "bin": {
@@ -1,4 +1,4 @@
1
- import { GraphError } from '../../src/Graph';
1
+ import { GraphError } from '../../src/buildGraph';
2
2
  import { log } from '../log';
3
3
  import chalk from 'chalk';
4
4
 
@@ -0,0 +1,117 @@
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 const buildGraph = async (): Promise<Record<string, IGraphEntry>> => {
29
+ const baseJson = await pkgJSONManager.read();
30
+ const baseTree: TBaseTree = {};
31
+
32
+ if (!baseJson) {
33
+ throw new Error('NOT_A_NPM');
34
+ }
35
+
36
+ if (!baseJson.sv) {
37
+ /** There is no dependencies, graph is empty */
38
+ return {};
39
+ }
40
+
41
+ const recursiveBuilder = async (dependencies: TSV = {}, parent = '*') => {
42
+ await Promise.all(
43
+ Object.entries(dependencies).map(async ([url, version]) => {
44
+ const { name } = git.parseUrl(url);
45
+ const { cwd, modulesDir } = RunOptions;
46
+ const moduleDir = path.join(cwd, modulesDir, name);
47
+ const isInstalled = fs.existsSync(moduleDir);
48
+
49
+ if (version && !versionUtil.validate(version, true)) {
50
+ throw new GraphError('UNKNOWN_VERSION', { name, version, parent });
51
+ }
52
+
53
+ if (!isInstalled) {
54
+ await git.addSumbmodule(url);
55
+ }
56
+
57
+ const existEntry = baseTree[name] || null;
58
+
59
+ const mJson = existEntry
60
+ ? null
61
+ : await pkgJSONManager.read(name);
62
+
63
+ const meta = {
64
+ version: existEntry?.meta.version
65
+ || mJson?.version
66
+ || version
67
+ || '*',
68
+ sv: existEntry?.meta.sv || mJson?.sv || {},
69
+ };
70
+
71
+ const parents = existEntry?.parents || {};
72
+
73
+ baseTree[name] = {
74
+ meta,
75
+ parents: { ...parents, [parent]: version },
76
+ };
77
+
78
+ await recursiveBuilder(meta.sv, name);
79
+ }),
80
+ );
81
+ };
82
+
83
+ await recursiveBuilder(baseJson.sv, baseJson.name);
84
+
85
+ const graph = await Promise.all(
86
+ Object.entries(baseTree).map(async ([name, data]) => {
87
+ const versions = await git.listVersions(name);
88
+ const { parents, meta } = data;
89
+
90
+ const used = Object.entries(parents).reduce((selective, [, v]) => (
91
+ versionUtil.pick(selective, v)
92
+ ), versions);
93
+
94
+ // No compatible version found and module has version tags
95
+ if (!used.length && versions.length) {
96
+ throw new GraphError('VERSION_CONFLICT', { parents, name });
97
+ }
98
+
99
+ if (!used.includes(meta.version)) {
100
+ const latest = versionUtil.latest(used);
101
+ if (latest) {
102
+ await git.checkout(name, latest);
103
+ }
104
+ }
105
+
106
+ return {
107
+ name,
108
+ data: { versions, parents, used, version: meta.version },
109
+ };
110
+ }),
111
+ );
112
+
113
+ return graph.reduce((acc, { name, data }) => ({
114
+ ...acc,
115
+ [name]: data,
116
+ }), {} as Record<string, IGraphEntry>);
117
+ };
@@ -1,2 +1,2 @@
1
- export { Graph } from './Graph';
1
+ export { buildGraph } from './buildGraph';
2
2
  export { GraphError } from './GraphError';
@@ -19,39 +19,25 @@ const getJsonPath = async (submoduleName?: string): Promise<TJSONPath> => {
19
19
  return jsonPath;
20
20
  };
21
21
 
22
- export class PkgJSONManager {
23
- private cache: Map<string, any> = new Map();
24
-
22
+ export const pkgJSONManager = {
25
23
  /* Reads package.json in project folder or in submodule */
26
- public read = async (submoduleName?: string) => {
24
+ read: async (submoduleName?: string) => {
27
25
  const jsonPath = await getJsonPath(submoduleName);
28
26
 
29
27
  if (!jsonPath) return null;
30
28
 
31
- if (this.cache.has(jsonPath)) {
32
- return this.cache.get(jsonPath);
33
- }
34
-
35
29
  const jsonString = await readFileAsync(jsonPath, 'utf-8');
36
30
  const parsed = JSON.parse(jsonString);
37
31
 
38
- this.cache.set(jsonPath, parsed);
39
-
40
32
  return parsed;
41
- };
33
+ },
42
34
 
43
35
  /* Writes package.json in project folder or in submodule */
44
- public write = async (data: Object, submoduleName?: string) => {
36
+ write: async (data: Object, submoduleName?: string) => {
45
37
  const jsonPath = await getJsonPath(submoduleName);
46
38
 
47
39
  if (!jsonPath) return;
48
40
 
49
- this.cache.set(jsonPath, data);
50
-
51
41
  await writeFileAsync(jsonPath, JSON.stringify(data, null, 2));
52
- };
53
-
54
- public clearCache (): void {
55
- this.cache.clear();
56
- }
57
- }
42
+ },
43
+ };
package/src/sv.ts CHANGED
@@ -1,26 +1,21 @@
1
- import { PkgJSONManager } from "./PkgJSONManager";
2
- import { Graph } from "./Graph";
1
+ import { pkgJSONManager } from "./pkgJSONManager";
2
+ import { buildGraph } from "./buildGraph";
3
3
  import { RunOptions } from "./runOptions";
4
4
  import { versionUtil } from "./versionUtil";
5
5
  import { git } from "./git";
6
6
 
7
7
  export class SV {
8
- private pkgJSONManager: PkgJSONManager;
9
- private graph: Graph;
10
-
11
8
  constructor (
12
9
  projectDir: string,
13
10
  modulesDir: string = 'addons',
14
11
  ) {
15
12
  RunOptions.cwd = projectDir;
16
13
  RunOptions.modulesDir = modulesDir;
17
-
18
- this.pkgJSONManager = new PkgJSONManager();
19
- this.graph = new Graph(this.pkgJSONManager);
20
14
  }
21
15
 
22
- public buildGraph = () => this.graph.build();
16
+ public buildGraph = buildGraph;
23
17
 
18
+ // eslint-disable-next-line class-methods-use-this
24
19
  public install = async (gitUrl: string, parentModule?: string) => {
25
20
  const { url, version, name } = git.parseUrl(gitUrl);
26
21
 
@@ -28,12 +23,12 @@ export class SV {
28
23
  throw new Error('NOT_A_GIT_URL');
29
24
  }
30
25
 
31
- const targetPkg = await this.pkgJSONManager.read(parentModule);
32
- let installedPkg = await this.pkgJSONManager.read(name);
26
+ const targetPkg = await pkgJSONManager.read(parentModule);
27
+ let installedPkg = await pkgJSONManager.read(name);
33
28
 
34
29
  if (!installedPkg) {
35
30
  await git.addSumbmodule(url);
36
- installedPkg = this.pkgJSONManager.read(name);
31
+ installedPkg = pkgJSONManager.read(name);
37
32
  }
38
33
 
39
34
  const versions = await git.listVersions(name);
@@ -49,12 +44,13 @@ export class SV {
49
44
  }
50
45
 
51
46
  targetPkg.sv[url] = requestedVersion ? `^${requestedVersion}` : '*';
52
- await this.pkgJSONManager.write(targetPkg, parentModule);
53
- await this.graph.build();
47
+ await pkgJSONManager.write(targetPkg, parentModule);
48
+ await buildGraph();
54
49
  };
55
50
 
51
+ // eslint-disable-next-line class-methods-use-this
56
52
  public update = async () => {
57
- const graph = await this.graph.build();
53
+ const graph = await buildGraph();
58
54
  if (!graph) return;
59
55
  await Promise.all(Object.entries(graph).map(async ([name, data]) => {
60
56
  const { version, used } = data;
@@ -65,13 +61,14 @@ export class SV {
65
61
  }));
66
62
  };
67
63
 
64
+ // eslint-disable-next-line class-methods-use-this
68
65
  public remove = async (submoduleName: string, parentModule?: string) => {
69
66
  await git.rm(submoduleName);
70
- const json = await this.pkgJSONManager.read(parentModule);
67
+ const json = await pkgJSONManager.read(parentModule);
71
68
 
72
69
  if (!json.sv) return;
73
70
 
74
- const sv = Object.keys(json.sv).reduce((acc, k) => {
71
+ json.sv = Object.keys(json.sv).reduce((acc, k) => {
75
72
  if (k.endsWith(`${submoduleName}.git`)) {
76
73
  return acc;
77
74
  }
@@ -79,9 +76,7 @@ export class SV {
79
76
  return { ...acc, [k]: json.sv[k] };
80
77
  }, {});
81
78
 
82
- json.sv = sv;
83
-
84
- await this.pkgJSONManager.write(json, parentModule);
85
- await this.graph.build();
79
+ await pkgJSONManager.write(json, parentModule);
80
+ await buildGraph();
86
81
  };
87
82
  }
@@ -1,12 +0,0 @@
1
- import { PkgJSONManager } from '../PkgJSONManager';
2
- export interface IGraphEntry {
3
- versions: string[];
4
- parents: Record<string, string>;
5
- used: string[];
6
- version: string;
7
- }
8
- export declare class Graph {
9
- private pkgJSONManager;
10
- constructor(pkgJSONManager: PkgJSONManager);
11
- build(): Promise<Record<string, IGraphEntry>>;
12
- }
@@ -1,85 +0,0 @@
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.Graph = void 0;
7
- const fs_1 = __importDefault(require("fs"));
8
- const path_1 = __importDefault(require("path"));
9
- const versionUtil_1 = require("../versionUtil");
10
- const git_1 = require("../git");
11
- const runOptions_1 = require("../runOptions");
12
- const GraphError_1 = require("./GraphError");
13
- class Graph {
14
- constructor(pkgJSONManager) {
15
- this.pkgJSONManager = pkgJSONManager;
16
- }
17
- async build() {
18
- const baseJson = await this.pkgJSONManager.read();
19
- const baseTree = {};
20
- if (!baseJson) {
21
- throw new Error('NOT_A_NPM');
22
- }
23
- if (!baseJson.sv) {
24
- /** There is no dependencies, graph is empty */
25
- return {};
26
- }
27
- const recursiveBuilder = async (dependencies = {}, parent = '*') => {
28
- await Promise.all(Object.entries(dependencies).map(async ([url, version]) => {
29
- const { name } = git_1.git.parseUrl(url);
30
- const { cwd, modulesDir } = runOptions_1.RunOptions;
31
- const moduleDir = path_1.default.join(cwd, modulesDir, name);
32
- const isInstalled = fs_1.default.existsSync(moduleDir);
33
- if (version && !versionUtil_1.versionUtil.validate(version, true)) {
34
- throw new GraphError_1.GraphError('UNKNOWN_VERSION', { name, version, parent });
35
- }
36
- if (!isInstalled) {
37
- await git_1.git.addSumbmodule(url);
38
- }
39
- const existEntry = baseTree[name] || null;
40
- const mJson = existEntry
41
- ? null
42
- : await this.pkgJSONManager.read(name);
43
- const meta = {
44
- version: existEntry?.meta.version
45
- || mJson?.version
46
- || version
47
- || '*',
48
- sv: existEntry?.meta.sv || mJson?.sv || {},
49
- };
50
- const parents = existEntry?.parents || {};
51
- baseTree[name] = {
52
- meta,
53
- parents: { ...parents, [parent]: version },
54
- };
55
- await recursiveBuilder(meta.sv, name);
56
- }));
57
- };
58
- await recursiveBuilder(baseJson.sv, baseJson.name);
59
- const graph = await Promise.all(Object.entries(baseTree).map(async ([name, data]) => {
60
- const versions = await git_1.git.listVersions(name);
61
- const { parents, meta } = data;
62
- const used = Object.entries(parents).reduce((selective, [, v]) => (versionUtil_1.versionUtil.pick(selective, v)), versions);
63
- // No compatible version found and module has version tags
64
- if (!used.length && versions.length) {
65
- throw new GraphError_1.GraphError('VERSION_CONFLICT', { parents, name });
66
- }
67
- if (!used.includes(meta.version)) {
68
- const latest = versionUtil_1.versionUtil.latest(used);
69
- if (latest) {
70
- await git_1.git.checkout(name, latest);
71
- }
72
- }
73
- return {
74
- name,
75
- data: { versions, parents, used, version: meta.version },
76
- };
77
- }));
78
- return graph.reduce((acc, { name, data }) => ({
79
- ...acc,
80
- [name]: data,
81
- }), {});
82
- }
83
- }
84
- exports.Graph = Graph;
85
- //# sourceMappingURL=Graph.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"Graph.js","sourceRoot":"","sources":["../../../src/Graph/Graph.ts"],"names":[],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"GraphError.js","sourceRoot":"","sources":["../../../src/Graph/GraphError.ts"],"names":[],"mappings":";;;AAOA,MAAa,UAAW,SAAQ,KAAK;IACnC,YAAa,IAAY,EAAS,OAAiB;QACjD,KAAK,CAAC,IAAI,CAAC,CAAC;QADoB,YAAO,GAAP,OAAO,CAAU;IAEnD,CAAC;CACF;AAJD,gCAIC"}
@@ -1,8 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.GraphError = exports.Graph = void 0;
4
- var Graph_1 = require("./Graph");
5
- Object.defineProperty(exports, "Graph", { enumerable: true, get: function () { return Graph_1.Graph; } });
6
- var GraphError_1 = require("./GraphError");
7
- Object.defineProperty(exports, "GraphError", { enumerable: true, get: function () { return GraphError_1.GraphError; } });
8
- //# sourceMappingURL=index.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/Graph/index.ts"],"names":[],"mappings":";;;AAAA,iCAAgC;AAAvB,8FAAA,KAAK,OAAA;AACd,2CAA0C;AAAjC,wGAAA,UAAU,OAAA"}
@@ -1,53 +0,0 @@
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.PkgJSONManager = void 0;
7
- const fs_1 = __importDefault(require("fs"));
8
- const util_1 = require("util");
9
- const path_1 = __importDefault(require("path"));
10
- const runOptions_1 = require("./runOptions");
11
- const existsAsync = (0, util_1.promisify)(fs_1.default.exists);
12
- const readFileAsync = (0, util_1.promisify)(fs_1.default.readFile);
13
- const writeFileAsync = (0, util_1.promisify)(fs_1.default.writeFile);
14
- const JSON_NAME = 'package.json';
15
- const getJsonPath = async (submoduleName) => {
16
- const folder = submoduleName ? [runOptions_1.RunOptions.modulesDir, submoduleName] : [];
17
- const jsonPath = path_1.default.join(runOptions_1.RunOptions.cwd, ...folder, JSON_NAME);
18
- const isJsonExists = await existsAsync(jsonPath);
19
- if (!isJsonExists)
20
- return null;
21
- return jsonPath;
22
- };
23
- class PkgJSONManager {
24
- constructor() {
25
- this.cache = new Map();
26
- /* Reads package.json in project folder or in submodule */
27
- this.read = async (submoduleName) => {
28
- const jsonPath = await getJsonPath(submoduleName);
29
- if (!jsonPath)
30
- return null;
31
- if (this.cache.has(jsonPath)) {
32
- return this.cache.get(jsonPath);
33
- }
34
- const jsonString = await readFileAsync(jsonPath, 'utf-8');
35
- const parsed = JSON.parse(jsonString);
36
- this.cache.set(jsonPath, parsed);
37
- return parsed;
38
- };
39
- /* Writes package.json in project folder or in submodule */
40
- this.write = async (data, submoduleName) => {
41
- const jsonPath = await getJsonPath(submoduleName);
42
- if (!jsonPath)
43
- return;
44
- this.cache.set(jsonPath, data);
45
- await writeFileAsync(jsonPath, JSON.stringify(data, null, 2));
46
- };
47
- }
48
- clearCache() {
49
- this.cache.clear();
50
- }
51
- }
52
- exports.PkgJSONManager = PkgJSONManager;
53
- //# sourceMappingURL=PkgJSONManager.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"PkgJSONManager.js","sourceRoot":"","sources":["../../src/PkgJSONManager.ts"],"names":[],"mappings":";;;;;;AAAA,4CAAoB;AACpB,+BAAiC;AACjC,gDAAwB;AACxB,6CAA0C;AAE1C,MAAM,WAAW,GAAG,IAAA,gBAAS,EAAC,YAAE,CAAC,MAAM,CAAC,CAAC;AACzC,MAAM,aAAa,GAAG,IAAA,gBAAS,EAAC,YAAE,CAAC,QAAQ,CAAC,CAAC;AAC7C,MAAM,cAAc,GAAG,IAAA,gBAAS,EAAC,YAAE,CAAC,SAAS,CAAC,CAAC;AAC/C,MAAM,SAAS,GAAG,cAAc,CAAC;AAIjC,MAAM,WAAW,GAAG,KAAK,EAAE,aAAsB,EAAsB,EAAE;IACvE,MAAM,MAAM,GAAG,aAAa,CAAC,CAAC,CAAC,CAAC,uBAAU,CAAC,UAAU,EAAE,aAAa,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IAC3E,MAAM,QAAQ,GAAG,cAAI,CAAC,IAAI,CAAC,uBAAU,CAAC,GAAG,EAAE,GAAG,MAAM,EAAE,SAAS,CAAC,CAAC;IACjE,MAAM,YAAY,GAAG,MAAM,WAAW,CAAC,QAAQ,CAAC,CAAC;IACjD,IAAI,CAAC,YAAY;QAAE,OAAO,IAAI,CAAC;IAE/B,OAAO,QAAQ,CAAC;AAClB,CAAC,CAAC;AAEF,MAAa,cAAc;IAA3B;QACU,UAAK,GAAqB,IAAI,GAAG,EAAE,CAAC;QAE5C,0DAA0D;QACnD,SAAI,GAAG,KAAK,EAAE,aAAsB,EAAE,EAAE;YAC7C,MAAM,QAAQ,GAAG,MAAM,WAAW,CAAC,aAAa,CAAC,CAAC;YAElD,IAAI,CAAC,QAAQ;gBAAE,OAAO,IAAI,CAAC;YAE3B,IAAI,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC;gBAC7B,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;YAClC,CAAC;YAED,MAAM,UAAU,GAAG,MAAM,aAAa,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;YAC1D,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;YAEtC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;YAEjC,OAAO,MAAM,CAAC;QAChB,CAAC,CAAC;QAEF,2DAA2D;QACpD,UAAK,GAAG,KAAK,EAAE,IAAY,EAAE,aAAsB,EAAE,EAAE;YAC5D,MAAM,QAAQ,GAAG,MAAM,WAAW,CAAC,aAAa,CAAC,CAAC;YAElD,IAAI,CAAC,QAAQ;gBAAE,OAAO;YAEtB,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;YAE/B,MAAM,cAAc,CAAC,QAAQ,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;QAChE,CAAC,CAAC;IAKJ,CAAC;IAHQ,UAAU;QACf,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;IACrB,CAAC;CACF;AAnCD,wCAmCC"}
@@ -1,121 +0,0 @@
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
- }
File without changes
File without changes
File without changes