submodule-version 2.3.2 → 3.0.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/README.md +103 -20
- package/dist/runner/handleErrors/handleErrors.d.ts +1 -1
- package/dist/runner/handleErrors/handleErrors.js +3 -10
- package/dist/runner/handleErrors/handleErrors.js.map +1 -1
- package/dist/runner/index.js +0 -0
- package/dist/runner/runner.d.ts +4 -0
- package/dist/runner/runner.js +91 -37
- package/dist/runner/runner.js.map +1 -1
- package/dist/src/PubGrub/PubGrub.d.ts +28 -0
- package/dist/src/PubGrub/PubGrub.js +366 -0
- package/dist/src/PubGrub/PubGrub.js.map +1 -0
- package/dist/src/PubGrub/index.d.ts +2 -0
- package/dist/src/PubGrub/index.js +7 -0
- package/dist/src/PubGrub/index.js.map +1 -0
- package/dist/src/PubGrub/types.d.ts +56 -0
- package/dist/src/PubGrub/types.js +3 -0
- package/dist/src/PubGrub/types.js.map +1 -0
- package/dist/src/entryStore.d.ts +16 -0
- package/dist/src/entryStore.js +152 -0
- package/dist/src/entryStore.js.map +1 -0
- package/dist/src/errors.d.ts +28 -0
- package/dist/src/errors.js +30 -0
- package/dist/src/errors.js.map +1 -0
- package/dist/src/git/api/GithubError.d.ts +4 -0
- package/dist/src/git/api/GithubError.js +11 -0
- package/dist/src/git/api/GithubError.js.map +1 -0
- package/dist/src/git/api/api.d.ts +8 -0
- package/dist/src/git/api/api.js +133 -0
- package/dist/src/git/api/api.js.map +1 -0
- package/dist/src/git/api/index.d.ts +3 -0
- package/dist/src/git/api/index.js +8 -0
- package/dist/src/git/api/index.js.map +1 -0
- package/dist/src/git/git.d.ts +30 -23
- package/dist/src/git/git.js +8 -258
- package/dist/src/git/git.js.map +1 -1
- package/dist/src/git/index.d.ts +1 -0
- package/dist/src/git/index.js +3 -1
- package/dist/src/git/index.js.map +1 -1
- package/dist/src/git/local/index.d.ts +1 -0
- package/dist/src/git/local/index.js +6 -0
- package/dist/src/git/local/index.js.map +1 -0
- package/dist/src/git/local/local.d.ts +26 -0
- package/dist/src/git/local/local.js +288 -0
- package/dist/src/git/local/local.js.map +1 -0
- package/dist/src/index.d.ts +7 -0
- package/dist/src/index.js +16 -1
- package/dist/src/index.js.map +1 -1
- package/dist/src/printError.d.ts +1 -0
- package/dist/src/printError.js +158 -0
- package/dist/src/printError.js.map +1 -0
- package/dist/src/sv.d.ts +18 -8
- package/dist/src/sv.js +235 -131
- package/dist/src/sv.js.map +1 -1
- package/dist/src/versionUtil/index.d.ts +2 -0
- package/dist/src/versionUtil/index.js +6 -0
- package/dist/src/versionUtil/index.js.map +1 -0
- package/dist/src/versionUtil/versionUtil.d.ts +16 -0
- package/dist/src/versionUtil/versionUtil.js +70 -0
- package/dist/src/versionUtil/versionUtil.js.map +1 -0
- package/package.json +4 -2
- package/runner/handleErrors/handleErrors.ts +3 -10
- package/runner/runner.ts +128 -46
- package/src/PubGrub/PubGrub.ts +578 -0
- package/src/PubGrub/__tests__/PubGrub.test.ts +351 -0
- package/src/PubGrub/index.ts +12 -0
- package/src/PubGrub/types.ts +72 -0
- package/src/__tests__/entryStore.test.ts +248 -0
- package/src/__tests__/printError.test.ts +148 -0
- package/src/__tests__/sv.test.ts +441 -0
- package/src/entryStore.ts +212 -0
- package/src/errors.ts +39 -0
- package/src/git/api/GithubError.ts +5 -0
- package/src/git/api/api.ts +180 -0
- package/src/git/api/index.ts +3 -0
- package/src/git/git.ts +8 -396
- package/src/git/index.ts +1 -0
- package/src/git/local/index.ts +1 -0
- package/src/git/local/local.ts +430 -0
- package/src/index.ts +17 -0
- package/src/printError.ts +189 -0
- package/src/sv.ts +321 -134
- package/src/versionUtil/__tests__/versionUtil.test.ts +62 -0
- package/src/versionUtil/index.ts +2 -0
- package/src/versionUtil/versionUtil.ts +103 -0
- package/tsconfig.json +1 -1
- package/dist/runner/handleErrors/handleBuildGraphError.d.ts +0 -1
- package/dist/runner/handleErrors/handleBuildGraphError.js +0 -42
- package/dist/runner/handleErrors/handleBuildGraphError.js.map +0 -1
- package/dist/runner/handleErrors/handleGitError.d.ts +0 -1
- package/dist/runner/handleErrors/handleGitError.js +0 -27
- package/dist/runner/handleErrors/handleGitError.js.map +0 -1
- package/dist/runner/handleErrors/handleInstallError.d.ts +0 -1
- package/dist/runner/handleErrors/handleInstallError.js +0 -30
- package/dist/runner/handleErrors/handleInstallError.js.map +0 -1
- package/dist/src/__tests__/versionUtil.test.d.ts +0 -1
- package/dist/src/__tests__/versionUtil.test.js +0 -80
- package/dist/src/__tests__/versionUtil.test.js.map +0 -1
- package/dist/src/buildGraph/GraphError.d.ts +0 -11
- package/dist/src/buildGraph/GraphError.js +0 -11
- package/dist/src/buildGraph/GraphError.js.map +0 -1
- package/dist/src/buildGraph/buildGraph.d.ts +0 -8
- package/dist/src/buildGraph/buildGraph.js +0 -100
- package/dist/src/buildGraph/buildGraph.js.map +0 -1
- package/dist/src/buildGraph/index.d.ts +0 -2
- package/dist/src/buildGraph/index.js +0 -8
- package/dist/src/buildGraph/index.js.map +0 -1
- package/dist/src/git/__tests__/parseGitUrl.test.d.ts +0 -1
- package/dist/src/git/__tests__/parseGitUrl.test.js +0 -30
- package/dist/src/git/__tests__/parseGitUrl.test.js.map +0 -1
- package/dist/src/versionUtil.d.ts +0 -13
- package/dist/src/versionUtil.js +0 -79
- package/dist/src/versionUtil.js.map +0 -1
- package/runner/handleErrors/handleBuildGraphError.ts +0 -49
- package/runner/handleErrors/handleGitError.ts +0 -28
- package/runner/handleErrors/handleInstallError.ts +0 -26
- package/src/__tests__/versionUtil.test.ts +0 -96
- package/src/buildGraph/GraphError.ts +0 -12
- package/src/buildGraph/buildGraph.ts +0 -150
- package/src/buildGraph/index.ts +0 -2
- package/src/versionUtil.ts +0 -97
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
export declare const ERR: {
|
|
2
|
+
readonly NOT_A_NPM: "NOT_A_NPM";
|
|
3
|
+
readonly NOT_A_GIT_REPO: "NOT_A_GIT_REPO";
|
|
4
|
+
readonly NOT_A_GIT_URL: "NOT_A_GIT_URL";
|
|
5
|
+
readonly NOT_INITIALIZED: "NOT_INITIALIZED";
|
|
6
|
+
readonly NOT_IMPLEMENTED: "NOT_IMPLEMENTED";
|
|
7
|
+
readonly PATH_NOT_FOUND: "PATH_NOT_FOUND";
|
|
8
|
+
readonly ADDON_NOT_FOUND: "ADDON_NOT_FOUND";
|
|
9
|
+
readonly REQUESTED_VERSION_NOT_EXISTS: "REQUESTED_VERSION_NOT_EXISTS";
|
|
10
|
+
readonly VERSION_CONFLICT: "VERSION_CONFLICT";
|
|
11
|
+
readonly CIRCULAR_DEPENDENCY: "CIRCULAR_DEPENDENCY";
|
|
12
|
+
readonly UNKNOWN_VERSION: "UNKNOWN_VERSION";
|
|
13
|
+
readonly GIT_DIRTY_SWITCH_CONFLICT: "GIT_DIRTY_SWITCH_CONFLICT";
|
|
14
|
+
};
|
|
15
|
+
export type TSVErrorCode = keyof typeof ERR;
|
|
16
|
+
export type TSVErrorDetails = {
|
|
17
|
+
chain?: string[];
|
|
18
|
+
requestedVersion?: string;
|
|
19
|
+
installedVersion?: string;
|
|
20
|
+
parents?: Record<string, string>;
|
|
21
|
+
versions?: string[];
|
|
22
|
+
[k: string]: unknown;
|
|
23
|
+
};
|
|
24
|
+
export declare class SVError extends Error {
|
|
25
|
+
error: TSVErrorCode;
|
|
26
|
+
details: TSVErrorDetails;
|
|
27
|
+
constructor(error: TSVErrorCode, details?: TSVErrorDetails);
|
|
28
|
+
}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.SVError = exports.ERR = void 0;
|
|
4
|
+
exports.ERR = {
|
|
5
|
+
NOT_A_NPM: 'NOT_A_NPM',
|
|
6
|
+
NOT_A_GIT_REPO: 'NOT_A_GIT_REPO',
|
|
7
|
+
NOT_A_GIT_URL: 'NOT_A_GIT_URL',
|
|
8
|
+
NOT_INITIALIZED: 'NOT_INITIALIZED',
|
|
9
|
+
NOT_IMPLEMENTED: 'NOT_IMPLEMENTED',
|
|
10
|
+
PATH_NOT_FOUND: 'PATH_NOT_FOUND',
|
|
11
|
+
ADDON_NOT_FOUND: 'ADDON_NOT_FOUND',
|
|
12
|
+
REQUESTED_VERSION_NOT_EXISTS: 'REQUESTED_VERSION_NOT_EXISTS',
|
|
13
|
+
VERSION_CONFLICT: 'VERSION_CONFLICT',
|
|
14
|
+
CIRCULAR_DEPENDENCY: 'CIRCULAR_DEPENDENCY',
|
|
15
|
+
UNKNOWN_VERSION: 'UNKNOWN_VERSION',
|
|
16
|
+
GIT_DIRTY_SWITCH_CONFLICT: 'GIT_DIRTY_SWITCH_CONFLICT',
|
|
17
|
+
};
|
|
18
|
+
/*
|
|
19
|
+
* Единственный тип ошибки, который уходит наружу из методов SV.
|
|
20
|
+
* GitError остаётся во внутреннем git-слое.
|
|
21
|
+
*/
|
|
22
|
+
class SVError extends Error {
|
|
23
|
+
constructor(error, details = {}) {
|
|
24
|
+
super(error);
|
|
25
|
+
this.error = error;
|
|
26
|
+
this.details = details;
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
exports.SVError = SVError;
|
|
30
|
+
//# sourceMappingURL=errors.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"errors.js","sourceRoot":"","sources":["../../src/errors.ts"],"names":[],"mappings":";;;AAAa,QAAA,GAAG,GAAG;IACjB,SAAS,EAAE,WAAW;IACtB,cAAc,EAAE,gBAAgB;IAChC,aAAa,EAAE,eAAe;IAC9B,eAAe,EAAE,iBAAiB;IAClC,eAAe,EAAE,iBAAiB;IAClC,cAAc,EAAE,gBAAgB;IAChC,eAAe,EAAE,iBAAiB;IAClC,4BAA4B,EAAE,8BAA8B;IAC5D,gBAAgB,EAAE,kBAAkB;IACpC,mBAAmB,EAAE,qBAAqB;IAC1C,eAAe,EAAE,iBAAiB;IAClC,yBAAyB,EAAE,2BAA2B;CAC9C,CAAC;AAcX;;;GAGG;AACH,MAAa,OAAQ,SAAQ,KAAK;IAChC,YACS,KAAmB,EACnB,UAA2B,EAAE;QAEpC,KAAK,CAAC,KAAK,CAAC,CAAC;QAHN,UAAK,GAAL,KAAK,CAAc;QACnB,YAAO,GAAP,OAAO,CAAsB;IAGtC,CAAC;CACF;AAPD,0BAOC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.GithubError = void 0;
|
|
4
|
+
class GithubError extends Error {
|
|
5
|
+
constructor(type, details = {}) {
|
|
6
|
+
super(type);
|
|
7
|
+
this.details = details;
|
|
8
|
+
}
|
|
9
|
+
}
|
|
10
|
+
exports.GithubError = GithubError;
|
|
11
|
+
//# sourceMappingURL=GithubError.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"GithubError.js","sourceRoot":"","sources":["../../../../src/git/api/GithubError.ts"],"names":[],"mappings":";;;AAAA,MAAa,WAAY,SAAQ,KAAK;IACpC,YAAa,IAAY,EAAS,UAA+B,EAAE;QACjE,KAAK,CAAC,IAAI,CAAC,CAAC;QADoB,YAAO,GAAP,OAAO,CAA0B;IAEnE,CAAC;CACF;AAJD,kCAIC"}
|
|
@@ -0,0 +1,133 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.api = void 0;
|
|
4
|
+
const versionUtil_1 = require("../../versionUtil");
|
|
5
|
+
const GithubError_1 = require("./GithubError");
|
|
6
|
+
/*
|
|
7
|
+
* GitHub GraphQL API без внешних зависимостей (глобальный fetch, Node 18+).
|
|
8
|
+
* Токен обязателен (GraphQL не работает анонимно): из JS API
|
|
9
|
+
* (git.api.setToken) или GITHUB_TOKEN из env.
|
|
10
|
+
*/
|
|
11
|
+
const ENDPOINT = 'https://api.github.com/graphql';
|
|
12
|
+
/*
|
|
13
|
+
* owner/repo из git-url'а: https/ssh (github.com:owner/repo.git)
|
|
14
|
+
* и github:-shorthand (github:owner/repo).
|
|
15
|
+
*/
|
|
16
|
+
const parseSlug = (url) => {
|
|
17
|
+
const shorthand = /^github:(?<slug>[\w.-]+\/[\w.-]+)$/.exec(url);
|
|
18
|
+
if (shorthand?.groups)
|
|
19
|
+
return shorthand.groups.slug;
|
|
20
|
+
const match = /github\.com[/:](?<slug>[\w.-]+\/[\w.-]+?)(\.git)?$/.exec(url);
|
|
21
|
+
return match?.groups?.slug || null;
|
|
22
|
+
};
|
|
23
|
+
/* Токен, переданный через JS API (SV); без него — GITHUB_TOKEN из env */
|
|
24
|
+
let apiToken;
|
|
25
|
+
const gql = async (query, variables) => {
|
|
26
|
+
const token = apiToken || process.env.GITHUB_TOKEN;
|
|
27
|
+
if (!token) {
|
|
28
|
+
throw new GithubError_1.GithubError('GITHUB_TOKEN_REQUIRED', {});
|
|
29
|
+
}
|
|
30
|
+
const res = await fetch(ENDPOINT, {
|
|
31
|
+
method: 'POST',
|
|
32
|
+
headers: {
|
|
33
|
+
Accept: 'application/vnd.github+json',
|
|
34
|
+
'User-Agent': 'submodule-version',
|
|
35
|
+
Authorization: `Bearer ${token}`,
|
|
36
|
+
},
|
|
37
|
+
body: JSON.stringify({ query, variables }),
|
|
38
|
+
});
|
|
39
|
+
if (!res.ok) {
|
|
40
|
+
throw new GithubError_1.GithubError('GITHUB_API_FAILED', { status: res.status });
|
|
41
|
+
}
|
|
42
|
+
const body = await res.json();
|
|
43
|
+
if (body.errors?.length) {
|
|
44
|
+
/* NOT_FOUND = репо не существует или нет доступа (как 404 в REST) */
|
|
45
|
+
const notFound = body.errors.some(e => e.type === 'NOT_FOUND');
|
|
46
|
+
throw new GithubError_1.GithubError('GITHUB_API_FAILED', {
|
|
47
|
+
status: notFound ? 404 : 400,
|
|
48
|
+
errors: body.errors.map(e => e.message),
|
|
49
|
+
});
|
|
50
|
+
}
|
|
51
|
+
return body.data;
|
|
52
|
+
};
|
|
53
|
+
const TAGS_QUERY = `
|
|
54
|
+
query ($owner: String!, $name: String!, $cursor: String) {
|
|
55
|
+
repository(owner: $owner, name: $name) {
|
|
56
|
+
refs(refPrefix: "refs/tags/", first: 100, after: $cursor) {
|
|
57
|
+
nodes { name }
|
|
58
|
+
pageInfo { hasNextPage endCursor }
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
`;
|
|
63
|
+
/* Все semver-теги репозитория (пагинация по 100) */
|
|
64
|
+
const listTags = async (slug) => {
|
|
65
|
+
const [owner, name] = slug.split('/');
|
|
66
|
+
const tags = [];
|
|
67
|
+
let cursor = null;
|
|
68
|
+
do {
|
|
69
|
+
const data = await gql(TAGS_QUERY, { owner, name, cursor });
|
|
70
|
+
if (!data.repository) {
|
|
71
|
+
throw new GithubError_1.GithubError('GITHUB_API_FAILED', { status: 404, url: slug });
|
|
72
|
+
}
|
|
73
|
+
const { nodes, pageInfo } = data.repository.refs;
|
|
74
|
+
nodes.forEach((node) => {
|
|
75
|
+
if (versionUtil_1.versionUtil.validate(node.name))
|
|
76
|
+
tags.push(node.name);
|
|
77
|
+
});
|
|
78
|
+
cursor = pageInfo.hasNextPage ? pageInfo.endCursor : null;
|
|
79
|
+
} while (cursor);
|
|
80
|
+
return tags;
|
|
81
|
+
};
|
|
82
|
+
/*
|
|
83
|
+
* package.json каждого тега одним запросом: alias v<i> на
|
|
84
|
+
* object(expression: "<tag>:package.json"). Теги отфильтрованы по semver,
|
|
85
|
+
* так что инъекция в expression исключена. Нет файла — null.
|
|
86
|
+
*/
|
|
87
|
+
const listPackages = async (slug, tags) => {
|
|
88
|
+
if (!tags.length)
|
|
89
|
+
return [];
|
|
90
|
+
const [owner, name] = slug.split('/');
|
|
91
|
+
const fields = tags.map((tag, i) => (
|
|
92
|
+
// eslint-disable-next-line max-len
|
|
93
|
+
`v${i}: object(expression: ${JSON.stringify(`${tag}:package.json`)}) { ... on Blob { text } }`)).join('\n');
|
|
94
|
+
const query = `
|
|
95
|
+
query ($owner: String!, $name: String!) {
|
|
96
|
+
repository(owner: $owner, name: $name) {
|
|
97
|
+
${fields}
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
`;
|
|
101
|
+
const data = await gql(query, { owner, name });
|
|
102
|
+
return tags.map((tag, i) => {
|
|
103
|
+
const text = data.repository?.[`v${i}`]?.text;
|
|
104
|
+
if (!text)
|
|
105
|
+
return null;
|
|
106
|
+
try {
|
|
107
|
+
return JSON.parse(text);
|
|
108
|
+
}
|
|
109
|
+
catch {
|
|
110
|
+
return null;
|
|
111
|
+
}
|
|
112
|
+
});
|
|
113
|
+
};
|
|
114
|
+
exports.api = {
|
|
115
|
+
/* Токен из JS API; без него (и при undefined) работает env-переменная */
|
|
116
|
+
setToken: (token) => {
|
|
117
|
+
apiToken = token;
|
|
118
|
+
},
|
|
119
|
+
/*
|
|
120
|
+
* Теги репозитория + package.json каждого тега: 1 запрос на страницу
|
|
121
|
+
* тегов + 1 батч-запрос на deps всех тегов.
|
|
122
|
+
*/
|
|
123
|
+
fetchVersions: async (url) => {
|
|
124
|
+
const slug = parseSlug(url);
|
|
125
|
+
if (!slug) {
|
|
126
|
+
throw new GithubError_1.GithubError('GITHUB_NOT_A_REPO_URL', { url });
|
|
127
|
+
}
|
|
128
|
+
const tags = await listTags(slug);
|
|
129
|
+
const pkgs = await listPackages(slug, tags);
|
|
130
|
+
return tags.map((version, i) => ({ version, pkg: pkgs[i] }));
|
|
131
|
+
},
|
|
132
|
+
};
|
|
133
|
+
//# sourceMappingURL=api.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"api.js","sourceRoot":"","sources":["../../../../src/git/api/api.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.GithubError = exports.api = void 0;
|
|
4
|
+
var api_1 = require("./api");
|
|
5
|
+
Object.defineProperty(exports, "api", { enumerable: true, get: function () { return api_1.api; } });
|
|
6
|
+
var GithubError_1 = require("./GithubError");
|
|
7
|
+
Object.defineProperty(exports, "GithubError", { enumerable: true, get: function () { return GithubError_1.GithubError; } });
|
|
8
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/git/api/index.ts"],"names":[],"mappings":";;;AAAA,6BAA4B;AAAnB,0FAAA,GAAG,OAAA;AAEZ,6CAA4C;AAAnC,0GAAA,WAAW,OAAA"}
|
package/dist/src/git/git.d.ts
CHANGED
|
@@ -1,26 +1,33 @@
|
|
|
1
1
|
export declare const git: {
|
|
2
2
|
parseUrl: (url: string) => import("./parseGitUrl").IParseResult;
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
3
|
+
local: {
|
|
4
|
+
addSubmodule: (url: string) => Promise<void>;
|
|
5
|
+
checkout: (name: string, version: string) => Promise<void>;
|
|
6
|
+
listVersions: (projectName: string) => Promise<string[]>;
|
|
7
|
+
status: (dir: string) => Promise<string>;
|
|
8
|
+
hasChanges: (dir: string) => Promise<boolean>;
|
|
9
|
+
hasUnpushedCommits: (dir: string) => Promise<boolean>;
|
|
10
|
+
isGitRepo: (dir: string) => Promise<boolean>;
|
|
11
|
+
getRemote: (dir: string) => Promise<string | null>;
|
|
12
|
+
init: (dir: string) => Promise<void>;
|
|
13
|
+
addRemote: (dir: string, url: string) => Promise<void>;
|
|
14
|
+
currentBranch: (dir: string) => Promise<string | null>;
|
|
15
|
+
defaultRemoteBranch: (dir: string) => Promise<string | null>;
|
|
16
|
+
ensureBranch: (dir: string) => Promise<void>;
|
|
17
|
+
commitAll: (dir: string, message: string) => Promise<void>;
|
|
18
|
+
addTag: (dir: string, version: string) => Promise<void>;
|
|
19
|
+
push: (dir: string, tag?: string) => Promise<void>;
|
|
20
|
+
fetch: (dir: string) => Promise<void>;
|
|
21
|
+
isRemoteAhead: (dir: string) => Promise<boolean>;
|
|
22
|
+
pullRebaseAutostash: (dir: string) => Promise<void>;
|
|
23
|
+
tagsAtHead: (dir: string) => Promise<string[]>;
|
|
24
|
+
currentVersion: (name: string) => Promise<string | null>;
|
|
25
|
+
listTags: (dir: string) => Promise<string[]>;
|
|
26
|
+
readJSONAtRef: (name: string, ref: string) => Promise<any | null>;
|
|
27
|
+
rm: (submoduleName: string) => Promise<void>;
|
|
28
|
+
};
|
|
29
|
+
api: {
|
|
30
|
+
setToken: (token?: string) => void;
|
|
31
|
+
fetchVersions: (url: string) => Promise<import("./api").IGithubVersion[]>;
|
|
32
|
+
};
|
|
26
33
|
};
|
package/dist/src/git/git.js
CHANGED
|
@@ -1,266 +1,16 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
-
};
|
|
5
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
3
|
exports.git = void 0;
|
|
7
|
-
const child_process_1 = require("child_process");
|
|
8
|
-
const util_1 = require("util");
|
|
9
|
-
const path_1 = __importDefault(require("path"));
|
|
10
4
|
const parseGitUrl_1 = require("./parseGitUrl");
|
|
11
|
-
const
|
|
12
|
-
const
|
|
13
|
-
|
|
14
|
-
|
|
5
|
+
const local_1 = require("./local");
|
|
6
|
+
const api_1 = require("./api");
|
|
7
|
+
/*
|
|
8
|
+
* Единая точка доступа к git: local — операции локального git CLI,
|
|
9
|
+
* api — удалённый GitHub GraphQL API (без клонирования).
|
|
10
|
+
*/
|
|
15
11
|
exports.git = {
|
|
16
12
|
parseUrl: parseGitUrl_1.parseGitUrl,
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
const module = path_1.default.join(runOptions_1.RunOptions.modulesDir, name);
|
|
20
|
-
try {
|
|
21
|
-
await execAsync(`git submodule add ${url} ${module}`, { cwd: runOptions_1.RunOptions.cwd });
|
|
22
|
-
}
|
|
23
|
-
catch {
|
|
24
|
-
throw new GitError_1.GitError('GIT_NOT_A_REPO');
|
|
25
|
-
}
|
|
26
|
-
},
|
|
27
|
-
checkout: async (name, version) => {
|
|
28
|
-
const module = path_1.default.join(runOptions_1.RunOptions.modulesDir, name);
|
|
29
|
-
try {
|
|
30
|
-
await execAsync(`git -C ${module} checkout ${version} -q`, { cwd: runOptions_1.RunOptions.cwd });
|
|
31
|
-
}
|
|
32
|
-
catch {
|
|
33
|
-
throw new GitError_1.GitError('GIT_MODULE_CHECKOUT_FAILED');
|
|
34
|
-
}
|
|
35
|
-
},
|
|
36
|
-
listVersions: async (projectName) => {
|
|
37
|
-
const module = path_1.default.join(runOptions_1.RunOptions.modulesDir, projectName);
|
|
38
|
-
return exports.git.listTags(module);
|
|
39
|
-
},
|
|
40
|
-
status: async (dir) => {
|
|
41
|
-
const res = await execAsync(`git -C ${dir} status --porcelain`, { cwd: runOptions_1.RunOptions.cwd });
|
|
42
|
-
return res.stdout.toString();
|
|
43
|
-
},
|
|
44
|
-
hasChanges: async (dir) => {
|
|
45
|
-
const status = await exports.git.status(dir);
|
|
46
|
-
return status.trim().length > 0;
|
|
47
|
-
},
|
|
48
|
-
hasUnpushedCommits: async (dir) => {
|
|
49
|
-
await exports.git.fetch(dir);
|
|
50
|
-
const branch = await exports.git.currentBranch(dir);
|
|
51
|
-
if (branch) {
|
|
52
|
-
let upstream = null;
|
|
53
|
-
try {
|
|
54
|
-
const res = await execAsync(`git -C ${dir} rev-parse --abbrev-ref --symbolic-full-name @{u}`, { cwd: runOptions_1.RunOptions.cwd });
|
|
55
|
-
upstream = res.stdout.toString().trim() || null;
|
|
56
|
-
}
|
|
57
|
-
catch {
|
|
58
|
-
upstream = null;
|
|
59
|
-
}
|
|
60
|
-
if (!upstream) {
|
|
61
|
-
try {
|
|
62
|
-
await execAsync(`git -C ${dir} rev-parse --verify --quiet origin/${branch}`, { cwd: runOptions_1.RunOptions.cwd });
|
|
63
|
-
upstream = `origin/${branch}`;
|
|
64
|
-
}
|
|
65
|
-
catch {
|
|
66
|
-
upstream = null;
|
|
67
|
-
}
|
|
68
|
-
}
|
|
69
|
-
/* Ветки на remote нет — всё локальное не опубликовано */
|
|
70
|
-
if (!upstream)
|
|
71
|
-
return true;
|
|
72
|
-
const res = await execAsync(`git -C ${dir} rev-list ${upstream}..HEAD --count`, { cwd: runOptions_1.RunOptions.cwd });
|
|
73
|
-
return Number(res.stdout.toString().trim()) > 0;
|
|
74
|
-
}
|
|
75
|
-
/*
|
|
76
|
-
* Detached HEAD (checkout на тег): локальные теги не доказывают публикацию
|
|
77
|
-
* (могут быть не запушены) — сверяем HEAD с фактическими рефами remote.
|
|
78
|
-
*/
|
|
79
|
-
let remoteOutput = '';
|
|
80
|
-
try {
|
|
81
|
-
const res = await execAsync(`git -C ${dir} ls-remote origin`, { cwd: runOptions_1.RunOptions.cwd });
|
|
82
|
-
remoteOutput = res.stdout.toString();
|
|
83
|
-
}
|
|
84
|
-
catch {
|
|
85
|
-
/* Remote недоступен/не настроен — считаем всё неопубликованным */
|
|
86
|
-
return true;
|
|
87
|
-
}
|
|
88
|
-
const remoteShas = remoteOutput.split(/\r?\n/)
|
|
89
|
-
.map(line => line.split(/\s+/)[0])
|
|
90
|
-
.filter(sha => /^[0-9a-f]{40}$/.test(sha));
|
|
91
|
-
for (const sha of remoteShas) {
|
|
92
|
-
try {
|
|
93
|
-
await execAsync(`git -C ${dir} merge-base --is-ancestor HEAD ${sha}`, { cwd: runOptions_1.RunOptions.cwd });
|
|
94
|
-
/* HEAD достижим из remote-рефа — опубликован */
|
|
95
|
-
return false;
|
|
96
|
-
}
|
|
97
|
-
catch {
|
|
98
|
-
// HEAD не предок этого рефа — проверяем остальные
|
|
99
|
-
}
|
|
100
|
-
}
|
|
101
|
-
return true;
|
|
102
|
-
},
|
|
103
|
-
isGitRepo: async (dir) => {
|
|
104
|
-
try {
|
|
105
|
-
await execAsync(`git -C ${dir} rev-parse --is-inside-work-tree`, { cwd: runOptions_1.RunOptions.cwd });
|
|
106
|
-
return true;
|
|
107
|
-
}
|
|
108
|
-
catch {
|
|
109
|
-
return false;
|
|
110
|
-
}
|
|
111
|
-
},
|
|
112
|
-
getRemote: async (dir) => {
|
|
113
|
-
try {
|
|
114
|
-
const res = await execAsync(`git -C ${dir} remote get-url origin`, { cwd: runOptions_1.RunOptions.cwd });
|
|
115
|
-
return res.stdout.toString().trim() || null;
|
|
116
|
-
}
|
|
117
|
-
catch {
|
|
118
|
-
return null;
|
|
119
|
-
}
|
|
120
|
-
},
|
|
121
|
-
init: async (dir) => {
|
|
122
|
-
await execAsync(`git -C ${dir} init`, { cwd: runOptions_1.RunOptions.cwd });
|
|
123
|
-
},
|
|
124
|
-
addRemote: async (dir, url) => {
|
|
125
|
-
const existing = await exports.git.getRemote(dir);
|
|
126
|
-
const command = existing
|
|
127
|
-
? `git -C ${dir} remote set-url origin ${url}`
|
|
128
|
-
: `git -C ${dir} remote add origin ${url}`;
|
|
129
|
-
await execAsync(command, { cwd: runOptions_1.RunOptions.cwd });
|
|
130
|
-
},
|
|
131
|
-
currentBranch: async (dir) => {
|
|
132
|
-
try {
|
|
133
|
-
const res = await execAsync(`git -C ${dir} symbolic-ref --short -q HEAD`, { cwd: runOptions_1.RunOptions.cwd });
|
|
134
|
-
return res.stdout.toString().trim() || null;
|
|
135
|
-
}
|
|
136
|
-
catch {
|
|
137
|
-
return null;
|
|
138
|
-
}
|
|
139
|
-
},
|
|
140
|
-
defaultRemoteBranch: async (dir) => {
|
|
141
|
-
try {
|
|
142
|
-
const res = await execAsync(`git -C ${dir} symbolic-ref --short refs/remotes/origin/HEAD`, { cwd: runOptions_1.RunOptions.cwd });
|
|
143
|
-
return res.stdout.toString().trim().replace(/^origin\//, '') || null;
|
|
144
|
-
}
|
|
145
|
-
catch {
|
|
146
|
-
// origin/HEAD not set - probe common defaults
|
|
147
|
-
}
|
|
148
|
-
for (const candidate of ['main', 'master']) {
|
|
149
|
-
try {
|
|
150
|
-
await execAsync(`git -C ${dir} rev-parse --verify --quiet origin/${candidate}`, { cwd: runOptions_1.RunOptions.cwd });
|
|
151
|
-
return candidate;
|
|
152
|
-
}
|
|
153
|
-
catch {
|
|
154
|
-
// No such remote branch
|
|
155
|
-
}
|
|
156
|
-
}
|
|
157
|
-
return null;
|
|
158
|
-
},
|
|
159
|
-
/*
|
|
160
|
-
* Аддоны checkout'нуты на тег (detached HEAD). Перед коммитом поднимаем
|
|
161
|
-
* локальную ветку на текущем коммите и привязываем её к remote-ветке,
|
|
162
|
-
* чтобы sync/push работали по ветке, а не в оторванной голове.
|
|
163
|
-
*/
|
|
164
|
-
ensureBranch: async (dir) => {
|
|
165
|
-
const branch = await exports.git.currentBranch(dir);
|
|
166
|
-
if (branch)
|
|
167
|
-
return;
|
|
168
|
-
await exports.git.fetch(dir);
|
|
169
|
-
const remoteBranch = await exports.git.defaultRemoteBranch(dir);
|
|
170
|
-
const target = remoteBranch || 'main';
|
|
171
|
-
await execAsync(`git -C ${dir} checkout -B ${target}`, { cwd: runOptions_1.RunOptions.cwd });
|
|
172
|
-
if (remoteBranch) {
|
|
173
|
-
await execAsync(
|
|
174
|
-
// eslint-disable-next-line max-len
|
|
175
|
-
`git -C ${dir} branch --set-upstream-to=origin/${remoteBranch} ${target}`, { cwd: runOptions_1.RunOptions.cwd });
|
|
176
|
-
}
|
|
177
|
-
},
|
|
178
|
-
commitAll: async (dir, message) => {
|
|
179
|
-
await execAsync(`git -C ${dir} add -A`, { cwd: runOptions_1.RunOptions.cwd });
|
|
180
|
-
await execAsync(`git -C ${dir} commit -m ${JSON.stringify(message)}`, { cwd: runOptions_1.RunOptions.cwd });
|
|
181
|
-
},
|
|
182
|
-
addTag: async (dir, version) => {
|
|
183
|
-
await execAsync(`git -C ${dir} tag ${version}`, { cwd: runOptions_1.RunOptions.cwd });
|
|
184
|
-
},
|
|
185
|
-
push: async (dir, tag) => {
|
|
186
|
-
await execAsync(`git -C ${dir} push -u origin HEAD`, { cwd: runOptions_1.RunOptions.cwd });
|
|
187
|
-
if (tag) {
|
|
188
|
-
await execAsync(`git -C ${dir} push origin ${tag}`, { cwd: runOptions_1.RunOptions.cwd });
|
|
189
|
-
}
|
|
190
|
-
},
|
|
191
|
-
fetch: async (dir) => {
|
|
192
|
-
try {
|
|
193
|
-
await execAsync(`git -C ${dir} fetch origin`, { cwd: runOptions_1.RunOptions.cwd });
|
|
194
|
-
}
|
|
195
|
-
catch {
|
|
196
|
-
// Fresh repo without upstream yet - nothing to fetch
|
|
197
|
-
}
|
|
198
|
-
},
|
|
199
|
-
isRemoteAhead: async (dir) => {
|
|
200
|
-
await exports.git.fetch(dir);
|
|
201
|
-
try {
|
|
202
|
-
const res = await execAsync(`git -C ${dir} rev-list HEAD..@{u} --count`, { cwd: runOptions_1.RunOptions.cwd });
|
|
203
|
-
return Number(res.stdout.toString().trim()) > 0;
|
|
204
|
-
}
|
|
205
|
-
catch {
|
|
206
|
-
// No upstream configured - remote is not ahead
|
|
207
|
-
return false;
|
|
208
|
-
}
|
|
209
|
-
},
|
|
210
|
-
pullRebaseAutostash: async (dir) => {
|
|
211
|
-
try {
|
|
212
|
-
await execAsync(`git -C ${dir} pull --rebase --autostash`, { cwd: runOptions_1.RunOptions.cwd });
|
|
213
|
-
}
|
|
214
|
-
catch {
|
|
215
|
-
try {
|
|
216
|
-
await execAsync(`git -C ${dir} rebase --abort`, { cwd: runOptions_1.RunOptions.cwd });
|
|
217
|
-
}
|
|
218
|
-
catch {
|
|
219
|
-
// Best effort - no rebase in progress
|
|
220
|
-
}
|
|
221
|
-
try {
|
|
222
|
-
await execAsync(`git -C ${dir} stash pop`, { cwd: runOptions_1.RunOptions.cwd });
|
|
223
|
-
}
|
|
224
|
-
catch {
|
|
225
|
-
// Best effort - nothing stashed
|
|
226
|
-
}
|
|
227
|
-
throw new GitError_1.GitError('GIT_SYNC_CONFLICT');
|
|
228
|
-
}
|
|
229
|
-
},
|
|
230
|
-
tagsAtHead: async (dir) => {
|
|
231
|
-
try {
|
|
232
|
-
const res = await execAsync(`git -C ${dir} tag --points-at HEAD`, { cwd: runOptions_1.RunOptions.cwd });
|
|
233
|
-
return res.stdout.toString().split(/\r?\n/)
|
|
234
|
-
.filter(tag => tag && versionUtil_1.versionUtil.validate(tag));
|
|
235
|
-
}
|
|
236
|
-
catch {
|
|
237
|
-
return [];
|
|
238
|
-
}
|
|
239
|
-
},
|
|
240
|
-
currentVersion: async (name) => {
|
|
241
|
-
const module = path_1.default.join(runOptions_1.RunOptions.modulesDir, name);
|
|
242
|
-
const tags = await exports.git.tagsAtHead(module);
|
|
243
|
-
return versionUtil_1.versionUtil.latest(tags) || null;
|
|
244
|
-
},
|
|
245
|
-
listTags: async (dir) => {
|
|
246
|
-
try {
|
|
247
|
-
await execAsync(`git -C ${dir} fetch --tags`, { cwd: runOptions_1.RunOptions.cwd });
|
|
248
|
-
}
|
|
249
|
-
catch {
|
|
250
|
-
// Repo without remote - local tags only
|
|
251
|
-
}
|
|
252
|
-
const res = await execAsync(`git -C ${dir} tag -l`, { cwd: runOptions_1.RunOptions.cwd });
|
|
253
|
-
const tagList = res.stdout.toString().split(/\r?\n/);
|
|
254
|
-
return tagList.filter(tag => {
|
|
255
|
-
if (!tag)
|
|
256
|
-
return false;
|
|
257
|
-
return versionUtil_1.versionUtil.validate(tag);
|
|
258
|
-
});
|
|
259
|
-
},
|
|
260
|
-
rm: async (submoduleName) => {
|
|
261
|
-
const modulePath = path_1.default.join(runOptions_1.RunOptions.modulesDir, submoduleName);
|
|
262
|
-
await execAsync(`git rm -rf ${modulePath}`, { cwd: runOptions_1.RunOptions.cwd });
|
|
263
|
-
await execAsync(`rm -rf ${path_1.default.join('.git/modules', modulePath)}`, { cwd: runOptions_1.RunOptions.cwd });
|
|
264
|
-
},
|
|
13
|
+
local: local_1.local,
|
|
14
|
+
api: api_1.api,
|
|
265
15
|
};
|
|
266
16
|
//# sourceMappingURL=git.js.map
|
package/dist/src/git/git.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"git.js","sourceRoot":"","sources":["../../../src/git/git.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"git.js","sourceRoot":"","sources":["../../../src/git/git.ts"],"names":[],"mappings":";;;AAAA,+CAA4C;AAC5C,mCAAgC;AAChC,+BAA4B;AAE5B;;;GAGG;AACU,QAAA,GAAG,GAAG;IACjB,QAAQ,EAAE,yBAAW;IACrB,KAAK,EAAL,aAAK;IACL,GAAG,EAAH,SAAG;CACJ,CAAC"}
|
package/dist/src/git/index.d.ts
CHANGED
package/dist/src/git/index.js
CHANGED
|
@@ -1,8 +1,10 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.GitError = exports.git = void 0;
|
|
3
|
+
exports.GithubError = exports.GitError = exports.git = void 0;
|
|
4
4
|
var git_1 = require("./git");
|
|
5
5
|
Object.defineProperty(exports, "git", { enumerable: true, get: function () { return git_1.git; } });
|
|
6
6
|
var GitError_1 = require("./GitError");
|
|
7
7
|
Object.defineProperty(exports, "GitError", { enumerable: true, get: function () { return GitError_1.GitError; } });
|
|
8
|
+
var api_1 = require("./api");
|
|
9
|
+
Object.defineProperty(exports, "GithubError", { enumerable: true, get: function () { return api_1.GithubError; } });
|
|
8
10
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/git/index.ts"],"names":[],"mappings":";;;AAAA,6BAA4B;AAAnB,0FAAA,GAAG,OAAA;AACZ,uCAAsC;AAA7B,oGAAA,QAAQ,OAAA"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/git/index.ts"],"names":[],"mappings":";;;AAAA,6BAA4B;AAAnB,0FAAA,GAAG,OAAA;AACZ,uCAAsC;AAA7B,oGAAA,QAAQ,OAAA;AACjB,6BAAoC;AAA3B,kGAAA,WAAW,OAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { local } from './local';
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.local = void 0;
|
|
4
|
+
var local_1 = require("./local");
|
|
5
|
+
Object.defineProperty(exports, "local", { enumerable: true, get: function () { return local_1.local; } });
|
|
6
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/git/local/index.ts"],"names":[],"mappings":";;;AAAA,iCAAgC;AAAvB,8FAAA,KAAK,OAAA"}
|