submodule-version 2.1.3 → 2.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/runner/handleErrors/handleBuildGraphError.js +2 -2
- package/dist/runner/handleErrors/handleBuildGraphError.js.map +1 -1
- package/dist/src/__tests__/versionUtil.test.js +14 -0
- package/dist/src/__tests__/versionUtil.test.js.map +1 -1
- package/dist/src/buildGraph/GraphError.js.map +1 -0
- package/dist/src/buildGraph/buildGraph.d.ts +8 -0
- package/dist/src/buildGraph/buildGraph.js +100 -0
- package/dist/src/buildGraph/buildGraph.js.map +1 -0
- package/dist/src/{Graph → buildGraph}/index.d.ts +1 -1
- package/dist/src/buildGraph/index.js +8 -0
- package/dist/src/buildGraph/index.js.map +1 -0
- package/dist/src/git/git.d.ts +19 -0
- package/dist/src/git/git.js +215 -2
- package/dist/src/git/git.js.map +1 -1
- package/dist/src/index.d.ts +1 -0
- package/dist/src/index.js +3 -1
- package/dist/src/index.js.map +1 -1
- package/dist/src/{PkgJSONManager.d.ts → pkgJSONManager.d.ts} +2 -4
- package/dist/src/pkgJSONManager.js +41 -0
- package/dist/src/pkgJSONManager.js.map +1 -0
- package/dist/src/sv.d.ts +16 -3
- package/dist/src/sv.js +179 -16
- package/dist/src/sv.js.map +1 -1
- package/dist/src/versionUtil.d.ts +1 -0
- package/dist/src/versionUtil.js +9 -0
- package/dist/src/versionUtil.js.map +1 -1
- package/package.json +1 -1
- package/runner/handleErrors/handleBuildGraphError.ts +1 -1
- package/src/__tests__/versionUtil.test.ts +17 -0
- package/src/buildGraph/buildGraph.ts +150 -0
- package/src/{Graph → buildGraph}/index.ts +1 -1
- package/src/git/git.ts +331 -2
- package/src/index.ts +1 -0
- package/src/{PkgJSONManager.ts → pkgJSONManager.ts} +6 -20
- package/src/sv.ts +220 -21
- package/src/versionUtil.ts +13 -0
- package/dist/src/Graph/Graph.d.ts +0 -12
- package/dist/src/Graph/Graph.js +0 -85
- package/dist/src/Graph/Graph.js.map +0 -1
- package/dist/src/Graph/GraphError.js.map +0 -1
- package/dist/src/Graph/index.js +0 -8
- package/dist/src/Graph/index.js.map +0 -1
- package/dist/src/PkgJSONManager.js +0 -53
- package/dist/src/PkgJSONManager.js.map +0 -1
- package/src/Graph/Graph.ts +0 -121
- /package/dist/src/{Graph → buildGraph}/GraphError.d.ts +0 -0
- /package/dist/src/{Graph → buildGraph}/GraphError.js +0 -0
- /package/src/{Graph → buildGraph}/GraphError.ts +0 -0
|
@@ -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
|
-
}
|
package/dist/src/Graph/Graph.js
DELETED
|
@@ -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"}
|
package/dist/src/Graph/index.js
DELETED
|
@@ -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"}
|
package/src/Graph/Graph.ts
DELETED
|
@@ -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
|