@trungtamcongnghedigital/vsaf 1.2.0 → 1.3.0-rc.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +4 -3
- package/packages/cli/dist/commands/install/credentials.d.ts +19 -0
- package/packages/cli/dist/commands/install/credentials.d.ts.map +1 -1
- package/packages/cli/dist/commands/install/credentials.js +35 -1
- package/packages/cli/dist/commands/install/credentials.js.map +1 -1
- package/packages/cli/dist/commands/install/flow-home.d.ts +54 -3
- package/packages/cli/dist/commands/install/flow-home.d.ts.map +1 -1
- package/packages/cli/dist/commands/install/flow-home.js +108 -26
- package/packages/cli/dist/commands/install/flow-home.js.map +1 -1
- package/packages/cli/dist/commands/install/flow-name.d.ts +11 -0
- package/packages/cli/dist/commands/install/flow-name.d.ts.map +1 -0
- package/packages/cli/dist/commands/install/flow-name.js +22 -0
- package/packages/cli/dist/commands/install/flow-name.js.map +1 -0
- package/packages/cli/dist/commands/install/flow-script.d.ts +14 -0
- package/packages/cli/dist/commands/install/flow-script.d.ts.map +1 -1
- package/packages/cli/dist/commands/install/flow-script.js +25 -4
- package/packages/cli/dist/commands/install/flow-script.js.map +1 -1
- package/packages/cli/dist/commands/install/flow-source.d.ts +24 -33
- package/packages/cli/dist/commands/install/flow-source.d.ts.map +1 -1
- package/packages/cli/dist/commands/install/flow-source.js +230 -148
- package/packages/cli/dist/commands/install/flow-source.js.map +1 -1
- package/packages/cli/dist/commands/install/registry.d.ts +60 -0
- package/packages/cli/dist/commands/install/registry.d.ts.map +1 -0
- package/packages/cli/dist/commands/install/registry.js +251 -0
- package/packages/cli/dist/commands/install/registry.js.map +1 -0
- package/packages/cli/dist/commands/install.js +3 -0
- package/packages/cli/dist/commands/install.js.map +1 -1
- package/packages/cli/dist/commands/skill.d.ts.map +1 -1
- package/packages/cli/dist/commands/skill.js +54 -4
- package/packages/cli/dist/commands/skill.js.map +1 -1
- package/packages/cli/dist/commands/sync.d.ts.map +1 -1
- package/packages/cli/dist/commands/sync.js +19 -1
- package/packages/cli/dist/commands/sync.js.map +1 -1
- package/packages/cli/dist/index.js +2 -2
- package/packages/cli/dist/index.js.map +1 -1
- package/scripts/autotest-drift-report.mjs +128 -0
- package/scripts/fetch-autotest-upstream.mjs +100 -0
- package/scripts/postinstall.cjs +117 -0
- package/scripts/telemetry-smoke.mjs +82 -0
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@trungtamcongnghedigital/vsaf",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.3.0-rc.2",
|
|
4
4
|
"description": "is it ready to use ?",
|
|
5
5
|
"main": "packages/core/dist/index.js",
|
|
6
6
|
"types": "packages/core/dist/index.d.ts",
|
|
@@ -24,11 +24,12 @@
|
|
|
24
24
|
"workflows",
|
|
25
25
|
"commands",
|
|
26
26
|
"skills",
|
|
27
|
-
"telemetry.defaults.json"
|
|
27
|
+
"telemetry.defaults.json",
|
|
28
|
+
"scripts"
|
|
28
29
|
],
|
|
29
30
|
"scripts": {
|
|
30
31
|
"build": "npm run build --workspaces",
|
|
31
|
-
"postinstall": "node
|
|
32
|
+
"postinstall": "node scripts/postinstall.cjs",
|
|
32
33
|
"prepack": "cp package.json package.json.bak && node -e \"const f='package.json',j=JSON.parse(require('fs').readFileSync(f));delete j.workspaces;require('fs').writeFileSync(f,JSON.stringify(j,null,2)+'\\n')\"",
|
|
33
34
|
"postpack": "mv package.json.bak package.json",
|
|
34
35
|
"test": "vitest run",
|
|
@@ -54,6 +54,25 @@ export declare function authorizationHeader(credential: Credential, scheme?: Aut
|
|
|
54
54
|
* leaves behind, since `<token>` is a redirection, and treating it as present produced a
|
|
55
55
|
* 401 that sent people hunting for a permissions problem they did not have.
|
|
56
56
|
*/
|
|
57
|
+
/**
|
|
58
|
+
* Máy chủ Bitbucket nội bộ của đơn vị.
|
|
59
|
+
*
|
|
60
|
+
* `BITBUCKET_TOKEN` chỉ đi tới đúng host này. Trước đây engine chỉ biết một repo nên tên
|
|
61
|
+
* biến luôn khớp host; từ khi registry trỏ được bất kỳ đâu, một dòng trong file cấu hình
|
|
62
|
+
* là đủ để token nội bộ đi sang máy chủ của người khác — và người viết dòng đó không nhất
|
|
63
|
+
* thiết là người đã đặt biến môi trường.
|
|
64
|
+
*/
|
|
65
|
+
export declare const INTERNAL_BITBUCKET_HOST = "bitbucket.digital.vn";
|
|
66
|
+
/**
|
|
67
|
+
* Địa chỉ này có trỏ vào máy chủ Bitbucket nội bộ hay không.
|
|
68
|
+
*
|
|
69
|
+
* So BẰNG NHAU trên host đã tách ra khỏi địa chỉ, không phải "có chứa": một host như
|
|
70
|
+
* `bitbucket.digital.vn.doi-tac.example` chứa đủ tên nội bộ mà lại là máy của người khác.
|
|
71
|
+
* Chữ hoa chữ thường không tính — tên miền vốn không phân biệt.
|
|
72
|
+
*
|
|
73
|
+
* Chỉ http(s): `file://` không có gì để xác thực, còn `ssh://` đi bằng khoá.
|
|
74
|
+
*/
|
|
75
|
+
export declare function isInternalBitbucketUrl(url: string): boolean;
|
|
57
76
|
export declare function credentialFromEnv(env?: NodeJS.ProcessEnv): Credential | undefined;
|
|
58
77
|
/** Drop what this run remembered. For tests, which must not leak into each other. */
|
|
59
78
|
export declare function forgetCredentials(): void;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"credentials.d.ts","sourceRoot":"","sources":["../../../src/commands/install/credentials.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAgBH,iFAAiF;AACjF,MAAM,WAAW,UAAU;IACzB,uFAAuF;IACvF,MAAM,EAAE,MAAM,CAAC;IACf,+DAA+D;IAC/D,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,mFAAmF;IACnF,MAAM,EAAE,KAAK,GAAG,KAAK,CAAC;CACvB;AAED,uFAAuF;AACvF,MAAM,MAAM,SAAS,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,KAAK,EAAE,MAAM,KAAK,MAAM,CAAC;AAElE,yDAAyD;AACzD,MAAM,MAAM,UAAU,GAAG,QAAQ,GAAG,OAAO,CAAC;AAE5C;;;;;;;;;;;GAWG;AACH,wBAAgB,mBAAmB,CAAC,UAAU,EAAE,UAAU,EAAE,MAAM,CAAC,EAAE,UAAU,GAAG,MAAM,CAKvF;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,iBAAiB,CAAC,GAAG,GAAE,MAAM,CAAC,UAAwB,GAAG,UAAU,GAAG,SAAS,CAG9F;AA+CD,qFAAqF;AACrF,wBAAgB,iBAAiB,IAAI,IAAI,CAExC;AAoCD;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,GAAE,SAAkB,GAAG,UAAU,GAAG,SAAS,CAkB9F;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,YAAY,CAC1B,GAAG,EAAE,MAAM,EAAE,UAAU,EAAE,UAAU,EAAE,GAAG,GAAE,SAAkB,GAC3D,OAAO,CAkBT;AAED;;;;;;;GAOG;AACH,wBAAgB,gBAAgB,CAAC,GAAG,GAAE,SAAkB,GAAG,MAAM,GAAG,SAAS,CAO5E;AAED,mEAAmE;AACnE,wBAAgB,eAAe,CAAC,QAAQ,GAAE,MAAyB,GAAG,MAAM,GAAG,SAAS,CAMvF;AAED,uFAAuF;AACvF,wBAAgB,YAAY,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,GAAE,SAAkB,GAAG,OAAO,CAO7E;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,iBAAiB,CAC/B,GAAG,EAAE,MAAM,EACX,OAAO,GAAE;IACP,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC;IACxB,GAAG,CAAC,EAAE,SAAS,CAAC;IAChB,2DAA2D;IAC3D,MAAM,CAAC,EAAE,SAAS,CAAC;IACnB,KAAK,CAAC,EAAE,OAAO,CAAC;CACZ,GACL,UAAU,GAAG,SAAS,
|
|
1
|
+
{"version":3,"file":"credentials.d.ts","sourceRoot":"","sources":["../../../src/commands/install/credentials.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAgBH,iFAAiF;AACjF,MAAM,WAAW,UAAU;IACzB,uFAAuF;IACvF,MAAM,EAAE,MAAM,CAAC;IACf,+DAA+D;IAC/D,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,mFAAmF;IACnF,MAAM,EAAE,KAAK,GAAG,KAAK,CAAC;CACvB;AAED,uFAAuF;AACvF,MAAM,MAAM,SAAS,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,KAAK,EAAE,MAAM,KAAK,MAAM,CAAC;AAElE,yDAAyD;AACzD,MAAM,MAAM,UAAU,GAAG,QAAQ,GAAG,OAAO,CAAC;AAE5C;;;;;;;;;;;GAWG;AACH,wBAAgB,mBAAmB,CAAC,UAAU,EAAE,UAAU,EAAE,MAAM,CAAC,EAAE,UAAU,GAAG,MAAM,CAKvF;AAED;;;;;;;;;;;GAWG;AACH;;;;;;;GAOG;AACH,eAAO,MAAM,uBAAuB,yBAAyB,CAAC;AAE9D;;;;;;;;GAQG;AACH,wBAAgB,sBAAsB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAS3D;AAED,wBAAgB,iBAAiB,CAAC,GAAG,GAAE,MAAM,CAAC,UAAwB,GAAG,UAAU,GAAG,SAAS,CAG9F;AA+CD,qFAAqF;AACrF,wBAAgB,iBAAiB,IAAI,IAAI,CAExC;AAoCD;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,GAAE,SAAkB,GAAG,UAAU,GAAG,SAAS,CAkB9F;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,YAAY,CAC1B,GAAG,EAAE,MAAM,EAAE,UAAU,EAAE,UAAU,EAAE,GAAG,GAAE,SAAkB,GAC3D,OAAO,CAkBT;AAED;;;;;;;GAOG;AACH,wBAAgB,gBAAgB,CAAC,GAAG,GAAE,SAAkB,GAAG,MAAM,GAAG,SAAS,CAO5E;AAED,mEAAmE;AACnE,wBAAgB,eAAe,CAAC,QAAQ,GAAE,MAAyB,GAAG,MAAM,GAAG,SAAS,CAMvF;AAED,uFAAuF;AACvF,wBAAgB,YAAY,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,GAAE,SAAkB,GAAG,OAAO,CAO7E;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,iBAAiB,CAC/B,GAAG,EAAE,MAAM,EACX,OAAO,GAAE;IACP,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC;IACxB,GAAG,CAAC,EAAE,SAAS,CAAC;IAChB,2DAA2D;IAC3D,MAAM,CAAC,EAAE,SAAS,CAAC;IACnB,KAAK,CAAC,EAAE,OAAO,CAAC;CACZ,GACL,UAAU,GAAG,SAAS,CAkBxB;AAED;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAC/B,GAAG,EAAE,MAAM,EACX,OAAO,GAAE,UAAU,CAAC,OAAO,iBAAiB,CAAC,CAAC,CAAC,CAAM,GACpD,UAAU,GAAG,SAAS,CAcxB"}
|
|
@@ -18,7 +18,9 @@
|
|
|
18
18
|
* already served by `git clone`, which asks and stores through the OS itself.
|
|
19
19
|
*/
|
|
20
20
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
21
|
+
exports.INTERNAL_BITBUCKET_HOST = void 0;
|
|
21
22
|
exports.authorizationHeader = authorizationHeader;
|
|
23
|
+
exports.isInternalBitbucketUrl = isInternalBitbucketUrl;
|
|
22
24
|
exports.credentialFromEnv = credentialFromEnv;
|
|
23
25
|
exports.forgetCredentials = forgetCredentials;
|
|
24
26
|
exports.credentialFromGit = credentialFromGit;
|
|
@@ -70,6 +72,36 @@ function authorizationHeader(credential, scheme) {
|
|
|
70
72
|
* leaves behind, since `<token>` is a redirection, and treating it as present produced a
|
|
71
73
|
* 401 that sent people hunting for a permissions problem they did not have.
|
|
72
74
|
*/
|
|
75
|
+
/**
|
|
76
|
+
* Máy chủ Bitbucket nội bộ của đơn vị.
|
|
77
|
+
*
|
|
78
|
+
* `BITBUCKET_TOKEN` chỉ đi tới đúng host này. Trước đây engine chỉ biết một repo nên tên
|
|
79
|
+
* biến luôn khớp host; từ khi registry trỏ được bất kỳ đâu, một dòng trong file cấu hình
|
|
80
|
+
* là đủ để token nội bộ đi sang máy chủ của người khác — và người viết dòng đó không nhất
|
|
81
|
+
* thiết là người đã đặt biến môi trường.
|
|
82
|
+
*/
|
|
83
|
+
exports.INTERNAL_BITBUCKET_HOST = 'bitbucket.digital.vn';
|
|
84
|
+
/**
|
|
85
|
+
* Địa chỉ này có trỏ vào máy chủ Bitbucket nội bộ hay không.
|
|
86
|
+
*
|
|
87
|
+
* So BẰNG NHAU trên host đã tách ra khỏi địa chỉ, không phải "có chứa": một host như
|
|
88
|
+
* `bitbucket.digital.vn.doi-tac.example` chứa đủ tên nội bộ mà lại là máy của người khác.
|
|
89
|
+
* Chữ hoa chữ thường không tính — tên miền vốn không phân biệt.
|
|
90
|
+
*
|
|
91
|
+
* Chỉ http(s): `file://` không có gì để xác thực, còn `ssh://` đi bằng khoá.
|
|
92
|
+
*/
|
|
93
|
+
function isInternalBitbucketUrl(url) {
|
|
94
|
+
let parsed;
|
|
95
|
+
try {
|
|
96
|
+
parsed = new URL(url);
|
|
97
|
+
}
|
|
98
|
+
catch {
|
|
99
|
+
return false;
|
|
100
|
+
}
|
|
101
|
+
if (parsed.protocol !== 'http:' && parsed.protocol !== 'https:')
|
|
102
|
+
return false;
|
|
103
|
+
return parsed.hostname.toLowerCase() === exports.INTERNAL_BITBUCKET_HOST;
|
|
104
|
+
}
|
|
73
105
|
function credentialFromEnv(env = process.env) {
|
|
74
106
|
const fromEnv = env[ENV_KEY]?.trim();
|
|
75
107
|
return fromEnv ? { secret: fromEnv, source: 'env' } : undefined;
|
|
@@ -263,7 +295,9 @@ function enableHelper(helper, run = runGit) {
|
|
|
263
295
|
*/
|
|
264
296
|
function resolveCredential(url, options = {}) {
|
|
265
297
|
const env = options.env ?? process.env;
|
|
266
|
-
|
|
298
|
+
// Biến môi trường chỉ áp cho máy chủ nội bộ. Host khác thì bỏ qua nó và đi tiếp xuống
|
|
299
|
+
// kho credential của hệ điều hành — nơi mỗi host có cặp riêng của nó.
|
|
300
|
+
const fromEnv = isInternalBitbucketUrl(url) ? credentialFromEnv(env) : undefined;
|
|
267
301
|
if (fromEnv)
|
|
268
302
|
return fromEnv;
|
|
269
303
|
const stored = credentialFromGit(url, options.run ?? runGit);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"credentials.js","sourceRoot":"","sources":["../../../src/commands/install/credentials.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;;GAiBG
|
|
1
|
+
{"version":3,"file":"credentials.js","sourceRoot":"","sources":["../../../src/commands/install/credentials.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { assertFlowName } from './flow-name.js';
|
|
1
2
|
/**
|
|
2
3
|
* Nơi cache flow nằm trên máy, và những flow đã có trong đó.
|
|
3
4
|
*
|
|
@@ -6,11 +7,54 @@
|
|
|
6
7
|
* chung vào `flow-source.ts` thì `skill.ts` phải import nó, mà nó lại import `skill.ts`
|
|
7
8
|
* — một vòng import, và cách vòng đó hỏng phụ thuộc vào thứ tự nạp module.
|
|
8
9
|
*
|
|
10
|
+
* Thư mục cache mang tên băm của (địa chỉ, nhánh), nên một thư mục cache đời cũ mang tên
|
|
11
|
+
* flow nằm lại ở đây là vô hại: không hàm nào dưới đây nhìn thấy nó.
|
|
12
|
+
*
|
|
9
13
|
* Chỉ đọc đĩa. Không lệnh git nào ở đây, nên gọi từ đâu cũng an toàn.
|
|
10
14
|
*/
|
|
11
|
-
|
|
12
|
-
|
|
15
|
+
export { assertFlowName };
|
|
16
|
+
/**
|
|
17
|
+
* Địa chỉ repo rút về một dạng chuẩn, để năm cách viết cùng một repo không thành năm
|
|
18
|
+
* bản clone.
|
|
19
|
+
*
|
|
20
|
+
* Chuẩn hoá đúng bốn thứ đo được là đủ, và không hơn: bỏ khoảng trắng, bỏ `/` cuối, bỏ
|
|
21
|
+
* hậu tố `.git`, bỏ tiền tố `file://`. Không đụng tới chữ hoa chữ thường hay cổng — đó
|
|
22
|
+
* là chỗ hai địa chỉ có thể thật sự khác nhau.
|
|
23
|
+
*/
|
|
24
|
+
export declare function canonUrl(url: string): string;
|
|
25
|
+
/**
|
|
26
|
+
* Tên thư mục cache cho một cặp (repo, nhánh).
|
|
27
|
+
*
|
|
28
|
+
* Băm chứ không ghép tên repo cho dễ đọc: địa chỉ chứa `/`, `:` và có thể chứa ký tự
|
|
29
|
+
* không hợp lệ cho tên thư mục trên Windows. Đổi lại thư mục khó đọc bằng mắt, nên mỗi
|
|
30
|
+
* thư mục slug mang theo một `origin.json` ghi địa chỉ và nhánh ở dạng chữ.
|
|
31
|
+
*
|
|
32
|
+
* Nhánh nằm TRONG khoá băm, không chỉ trong phép so sánh: hai nhánh của cùng một repo
|
|
33
|
+
* là hai nội dung khác nhau, và để chung một thư mục thì đổi nhánh là dựng lại cache —
|
|
34
|
+
* mất luôn bản nhánh cũ mà lần sau còn phải kéo lại.
|
|
35
|
+
*/
|
|
36
|
+
export declare function repoSlug(url: string, branch: string | undefined): string;
|
|
37
|
+
/** Thư mục chứa bản clone của một cặp (repo, nhánh). */
|
|
38
|
+
export declare function repoCacheDir(url: string, branch: string | undefined): string;
|
|
13
39
|
export declare function flowsCacheDir(): string;
|
|
40
|
+
/**
|
|
41
|
+
* Những thứ nằm trong thư mục cache mà KHÔNG mang hình dạng tên băm.
|
|
42
|
+
*
|
|
43
|
+
* KHÔNG xoá gì. Trước đây hàm này `rmSync` mọi mục không khớp `/^[0-9a-f]{12}$/`, suy từ
|
|
44
|
+
* "không phải slug thì là cache bố cục đời cũ". Suy luận đó sai trên máy thật: bố cục cũ
|
|
45
|
+
* ĐÃ phát hành (engine 6.x dùng `~/.vsaf/flows` làm bản làm việc git thật), nên thư mục
|
|
46
|
+
* đó thường chứa `.git`, `README.md` và các thư mục flow người dùng đang sửa. Quét một
|
|
47
|
+
* máy thật thấy 4 mục, không mục nào khớp slug — tức cả 18 MB, kể cả repo git, sẽ bị xoá.
|
|
48
|
+
*
|
|
49
|
+
* Tệ hơn: hàm được gọi từ móc `postinstall`, nơi npm nuốt output ở chế độ mặc định, nên
|
|
50
|
+
* việc xoá diễn ra im lặng. Và câu lỗi lúc thiếu registry lại khuyên "cài lại bằng
|
|
51
|
+
* npm i -g …" — làm theo là mất dữ liệu.
|
|
52
|
+
*
|
|
53
|
+
* Nay chỉ NHẬN DIỆN rồi báo, để người dùng tự quyết. Ghi chú ở đầu file này vốn đã nói
|
|
54
|
+
* đúng điều đó: thư mục lạ nằm lại là vô hại, không hàm nào dưới đây nhìn thấy nó. Dọn
|
|
55
|
+
* đĩa là việc đáng làm, nhưng không đáng đánh đổi bằng rủi ro xoá nhầm dữ liệu thật.
|
|
56
|
+
*/
|
|
57
|
+
export declare function findLegacyCacheDirs(): string[];
|
|
14
58
|
/**
|
|
15
59
|
* Bản flow đã có sẵn trong cache trên máy, hoặc rỗng nếu chưa từng kéo về.
|
|
16
60
|
*
|
|
@@ -19,6 +63,13 @@ export declare function flowsCacheDir(): string;
|
|
|
19
63
|
* trả giá một lượt clone qua mạng cho một lệnh vốn chỉ để đọc.
|
|
20
64
|
*/
|
|
21
65
|
export declare function cachedFlowDir(flow: string): string | null;
|
|
22
|
-
/**
|
|
66
|
+
/**
|
|
67
|
+
* Những flow đã kéo về máy — thư mục có `pack.yaml`, nằm dưới một tầng slug.
|
|
68
|
+
*
|
|
69
|
+
* Quét hai tầng chứ không một: mỗi cặp (repo, nhánh) có thư mục riêng, nên một flow
|
|
70
|
+
* nằm ở `<cache>/<slug>/<flow>`. Hai nguồn cùng mang một tên flow thì tên đó chỉ kể
|
|
71
|
+
* một lần — danh sách này trả lời "máy biết những flow nào", không phải "có bao nhiêu
|
|
72
|
+
* bản clone".
|
|
73
|
+
*/
|
|
23
74
|
export declare function cachedFlowNames(): string[];
|
|
24
75
|
//# sourceMappingURL=flow-home.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"flow-home.d.ts","sourceRoot":"","sources":["../../../src/commands/install/flow-home.ts"],"names":[],"mappings":"AAIA
|
|
1
|
+
{"version":3,"file":"flow-home.d.ts","sourceRoot":"","sources":["../../../src/commands/install/flow-home.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAGhD;;;;;;;;;;;;GAYG;AAEH,OAAO,EAAE,cAAc,EAAE,CAAC;AAK1B;;;;;;;GAOG;AACH,wBAAgB,QAAQ,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAO5C;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,QAAQ,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,CAGxE;AAED,wDAAwD;AACxD,wBAAgB,YAAY,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,CAE5E;AAED,wBAAgB,aAAa,IAAI,MAAM,CAMtC;AAWD;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,mBAAmB,IAAI,MAAM,EAAE,CAQ9C;AAED;;;;;;GAMG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAiBzD;AAED;;;;;;;GAOG;AACH,wBAAgB,eAAe,IAAI,MAAM,EAAE,CAe1C"}
|
|
@@ -1,31 +1,56 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.assertFlowName =
|
|
3
|
+
exports.assertFlowName = void 0;
|
|
4
|
+
exports.canonUrl = canonUrl;
|
|
5
|
+
exports.repoSlug = repoSlug;
|
|
6
|
+
exports.repoCacheDir = repoCacheDir;
|
|
4
7
|
exports.flowsCacheDir = flowsCacheDir;
|
|
8
|
+
exports.findLegacyCacheDirs = findLegacyCacheDirs;
|
|
5
9
|
exports.cachedFlowDir = cachedFlowDir;
|
|
6
10
|
exports.cachedFlowNames = cachedFlowNames;
|
|
11
|
+
const crypto_1 = require("crypto");
|
|
7
12
|
const fs_1 = require("fs");
|
|
8
13
|
const os_1 = require("os");
|
|
9
14
|
const path_1 = require("path");
|
|
15
|
+
const flow_name_js_1 = require("./flow-name.js");
|
|
16
|
+
Object.defineProperty(exports, "assertFlowName", { enumerable: true, get: function () { return flow_name_js_1.assertFlowName; } });
|
|
17
|
+
const registry_js_1 = require("./registry.js");
|
|
18
|
+
/** File nhận diện một thư mục là nội dung flow. */
|
|
19
|
+
const PACK_FILE = 'pack.yaml';
|
|
10
20
|
/**
|
|
11
|
-
*
|
|
21
|
+
* Địa chỉ repo rút về một dạng chuẩn, để năm cách viết cùng một repo không thành năm
|
|
22
|
+
* bản clone.
|
|
12
23
|
*
|
|
13
|
-
*
|
|
14
|
-
*
|
|
15
|
-
*
|
|
16
|
-
|
|
24
|
+
* Chuẩn hoá đúng bốn thứ đo được là đủ, và không hơn: bỏ khoảng trắng, bỏ `/` cuối, bỏ
|
|
25
|
+
* hậu tố `.git`, bỏ tiền tố `file://`. Không đụng tới chữ hoa chữ thường hay cổng — đó
|
|
26
|
+
* là chỗ hai địa chỉ có thể thật sự khác nhau.
|
|
27
|
+
*/
|
|
28
|
+
function canonUrl(url) {
|
|
29
|
+
return url
|
|
30
|
+
.trim()
|
|
31
|
+
.replace(/^file:\/\//, '')
|
|
32
|
+
.replace(/\/+$/, '')
|
|
33
|
+
.replace(/(\/?)\.git$/, '')
|
|
34
|
+
.replace(/\/+$/, '');
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* Tên thư mục cache cho một cặp (repo, nhánh).
|
|
38
|
+
*
|
|
39
|
+
* Băm chứ không ghép tên repo cho dễ đọc: địa chỉ chứa `/`, `:` và có thể chứa ký tự
|
|
40
|
+
* không hợp lệ cho tên thư mục trên Windows. Đổi lại thư mục khó đọc bằng mắt, nên mỗi
|
|
41
|
+
* thư mục slug mang theo một `origin.json` ghi địa chỉ và nhánh ở dạng chữ.
|
|
17
42
|
*
|
|
18
|
-
*
|
|
43
|
+
* Nhánh nằm TRONG khoá băm, không chỉ trong phép so sánh: hai nhánh của cùng một repo
|
|
44
|
+
* là hai nội dung khác nhau, và để chung một thư mục thì đổi nhánh là dựng lại cache —
|
|
45
|
+
* mất luôn bản nhánh cũ mà lần sau còn phải kéo lại.
|
|
19
46
|
*/
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
+ ' Tên flow là tên một thư mục ở gốc repo flows — không chứa "/", "\\" hay "..".');
|
|
28
|
-
}
|
|
47
|
+
function repoSlug(url, branch) {
|
|
48
|
+
const canon = `${canonUrl(url)}\n${branch ?? ''}`;
|
|
49
|
+
return (0, crypto_1.createHash)('sha256').update(canon).digest('hex').slice(0, 12);
|
|
50
|
+
}
|
|
51
|
+
/** Thư mục chứa bản clone của một cặp (repo, nhánh). */
|
|
52
|
+
function repoCacheDir(url, branch) {
|
|
53
|
+
return (0, path_1.join)(flowsCacheDir(), repoSlug(url, branch));
|
|
29
54
|
}
|
|
30
55
|
function flowsCacheDir() {
|
|
31
56
|
// `||` chứ không phải `??`: `VSAF_HOME=""` vẫn phải rơi về mặc định. Nếu không, `cache`
|
|
@@ -34,6 +59,41 @@ function flowsCacheDir() {
|
|
|
34
59
|
const home = process.env.VSAF_HOME || (0, path_1.join)((0, os_1.homedir)(), '.vsaf');
|
|
35
60
|
return (0, path_1.join)(home, 'flows');
|
|
36
61
|
}
|
|
62
|
+
/**
|
|
63
|
+
* Tên thư mục cache bố cục mới: đúng 12 ký tự hex, không gì khác.
|
|
64
|
+
*
|
|
65
|
+
* Dùng để phân biệt với bố cục đời cũ, vốn đặt tên thư mục theo TÊN FLOW.
|
|
66
|
+
*/
|
|
67
|
+
function isSlugDir(name) {
|
|
68
|
+
return /^[0-9a-f]{12}$/.test(name);
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* Những thứ nằm trong thư mục cache mà KHÔNG mang hình dạng tên băm.
|
|
72
|
+
*
|
|
73
|
+
* KHÔNG xoá gì. Trước đây hàm này `rmSync` mọi mục không khớp `/^[0-9a-f]{12}$/`, suy từ
|
|
74
|
+
* "không phải slug thì là cache bố cục đời cũ". Suy luận đó sai trên máy thật: bố cục cũ
|
|
75
|
+
* ĐÃ phát hành (engine 6.x dùng `~/.vsaf/flows` làm bản làm việc git thật), nên thư mục
|
|
76
|
+
* đó thường chứa `.git`, `README.md` và các thư mục flow người dùng đang sửa. Quét một
|
|
77
|
+
* máy thật thấy 4 mục, không mục nào khớp slug — tức cả 18 MB, kể cả repo git, sẽ bị xoá.
|
|
78
|
+
*
|
|
79
|
+
* Tệ hơn: hàm được gọi từ móc `postinstall`, nơi npm nuốt output ở chế độ mặc định, nên
|
|
80
|
+
* việc xoá diễn ra im lặng. Và câu lỗi lúc thiếu registry lại khuyên "cài lại bằng
|
|
81
|
+
* npm i -g …" — làm theo là mất dữ liệu.
|
|
82
|
+
*
|
|
83
|
+
* Nay chỉ NHẬN DIỆN rồi báo, để người dùng tự quyết. Ghi chú ở đầu file này vốn đã nói
|
|
84
|
+
* đúng điều đó: thư mục lạ nằm lại là vô hại, không hàm nào dưới đây nhìn thấy nó. Dọn
|
|
85
|
+
* đĩa là việc đáng làm, nhưng không đáng đánh đổi bằng rủi ro xoá nhầm dữ liệu thật.
|
|
86
|
+
*/
|
|
87
|
+
function findLegacyCacheDirs() {
|
|
88
|
+
const cache = flowsCacheDir();
|
|
89
|
+
try {
|
|
90
|
+
return (0, fs_1.readdirSync)(cache).filter(name => !isSlugDir(name)).sort();
|
|
91
|
+
}
|
|
92
|
+
catch {
|
|
93
|
+
// Chưa có cache. Không phải sự cố, chỉ là máy chưa cài flow nào.
|
|
94
|
+
return [];
|
|
95
|
+
}
|
|
96
|
+
}
|
|
37
97
|
/**
|
|
38
98
|
* Bản flow đã có sẵn trong cache trên máy, hoặc rỗng nếu chưa từng kéo về.
|
|
39
99
|
*
|
|
@@ -42,22 +102,44 @@ function flowsCacheDir() {
|
|
|
42
102
|
* trả giá một lượt clone qua mạng cho một lệnh vốn chỉ để đọc.
|
|
43
103
|
*/
|
|
44
104
|
function cachedFlowDir(flow) {
|
|
45
|
-
assertFlowName(flow);
|
|
46
|
-
|
|
47
|
-
|
|
105
|
+
(0, flow_name_js_1.assertFlowName)(flow);
|
|
106
|
+
// Thư mục cache của một flow phụ thuộc vào nguồn đang khai cho nó, nên phải hỏi
|
|
107
|
+
// registry. Registry hỏng hay chưa khai khoá này thì coi như chưa có gì trong cache:
|
|
108
|
+
// đây là đường chỉ-đọc, và câu lỗi đúng là câu `fetchFlow` ném ra một lát sau.
|
|
109
|
+
let dir;
|
|
110
|
+
try {
|
|
111
|
+
const entry = (0, registry_js_1.registryEntry)(flow);
|
|
112
|
+
// Nội dung flow nằm ở gốc repo, nên thư mục slug CHÍNH LÀ thư mục flow — không còn
|
|
113
|
+
// tầng thư mục con trùng tên khoá (quyết định 14).
|
|
114
|
+
dir = repoCacheDir(entry.repo, entry.branch);
|
|
115
|
+
}
|
|
116
|
+
catch {
|
|
117
|
+
return null;
|
|
118
|
+
}
|
|
119
|
+
return (0, fs_1.existsSync)((0, path_1.join)(dir, PACK_FILE)) ? dir : null;
|
|
48
120
|
}
|
|
49
|
-
/**
|
|
121
|
+
/**
|
|
122
|
+
* Những flow đã kéo về máy — thư mục có `pack.yaml`, nằm dưới một tầng slug.
|
|
123
|
+
*
|
|
124
|
+
* Quét hai tầng chứ không một: mỗi cặp (repo, nhánh) có thư mục riêng, nên một flow
|
|
125
|
+
* nằm ở `<cache>/<slug>/<flow>`. Hai nguồn cùng mang một tên flow thì tên đó chỉ kể
|
|
126
|
+
* một lần — danh sách này trả lời "máy biết những flow nào", không phải "có bao nhiêu
|
|
127
|
+
* bản clone".
|
|
128
|
+
*/
|
|
50
129
|
function cachedFlowNames() {
|
|
51
|
-
|
|
130
|
+
// Thư mục cache mang tên băm, không mang tên flow, nên không đọc ngược ra tên được.
|
|
131
|
+
// Đi từ phía registry: khoá nào có thư mục cache mang `pack.yaml` thì khoá đó đã kéo về.
|
|
132
|
+
let khai;
|
|
52
133
|
try {
|
|
53
|
-
|
|
54
|
-
.filter(entry => entry.isDirectory() && (0, fs_1.existsSync)((0, path_1.join)(cache, entry.name, 'pack.yaml')))
|
|
55
|
-
.map(entry => entry.name)
|
|
56
|
-
.sort();
|
|
134
|
+
khai = (0, registry_js_1.readRegistry)();
|
|
57
135
|
}
|
|
58
136
|
catch {
|
|
59
|
-
//
|
|
137
|
+
// Registry chưa có hoặc hỏng. Không phải sự cố ở đây — câu lỗi đúng thuộc về lượt cài.
|
|
60
138
|
return [];
|
|
61
139
|
}
|
|
140
|
+
return [...khai.entries()]
|
|
141
|
+
.filter(([, entry]) => (0, fs_1.existsSync)((0, path_1.join)(repoCacheDir(entry.repo, entry.branch), PACK_FILE)))
|
|
142
|
+
.map(([flow]) => flow)
|
|
143
|
+
.sort();
|
|
62
144
|
}
|
|
63
145
|
//# sourceMappingURL=flow-home.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"flow-home.js","sourceRoot":"","sources":["../../../src/commands/install/flow-home.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"flow-home.js","sourceRoot":"","sources":["../../../src/commands/install/flow-home.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Ràng buộc hình dạng của một tên flow.
|
|
3
|
+
*
|
|
4
|
+
* Tách thành module lá riêng vì cả `registry.ts` lẫn `flow-home.ts` đều cần nó, mà
|
|
5
|
+
* `flow-home.ts` lại phải đọc registry để biết một flow nằm ở thư mục cache nào. Để
|
|
6
|
+
* hàm này ở `flow-home.ts` là một vòng import giữa hai file, và cách vòng đó hỏng phụ
|
|
7
|
+
* thuộc vào thứ tự nạp module.
|
|
8
|
+
*/
|
|
9
|
+
/** Tên flow phải là một thư mục ở gốc repo, không phải một đường dẫn. */
|
|
10
|
+
export declare function assertFlowName(flow: string): void;
|
|
11
|
+
//# sourceMappingURL=flow-name.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"flow-name.d.ts","sourceRoot":"","sources":["../../../src/commands/install/flow-name.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,yEAAyE;AACzE,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAUjD"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Ràng buộc hình dạng của một tên flow.
|
|
4
|
+
*
|
|
5
|
+
* Tách thành module lá riêng vì cả `registry.ts` lẫn `flow-home.ts` đều cần nó, mà
|
|
6
|
+
* `flow-home.ts` lại phải đọc registry để biết một flow nằm ở thư mục cache nào. Để
|
|
7
|
+
* hàm này ở `flow-home.ts` là một vòng import giữa hai file, và cách vòng đó hỏng phụ
|
|
8
|
+
* thuộc vào thứ tự nạp module.
|
|
9
|
+
*/
|
|
10
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
11
|
+
exports.assertFlowName = assertFlowName;
|
|
12
|
+
/** Tên flow phải là một thư mục ở gốc repo, không phải một đường dẫn. */
|
|
13
|
+
function assertFlowName(flow) {
|
|
14
|
+
// Ba hình dạng, một lý do: tên flow đi thẳng vào `join(cache, flow)` và vào
|
|
15
|
+
// `sparse-checkout add`, nên một tên mang dấu phân cách hay `..` là một đường dẫn
|
|
16
|
+
// trỏ ra ngoài cache — và `--refresh-flows` thì `rmSync` đúng chỗ nó trỏ tới.
|
|
17
|
+
if (flow.trim() === '' || flow.includes('/') || flow.includes('\\') || flow.includes('..')) {
|
|
18
|
+
throw new Error(`"${flow}" không phải tên flow hợp lệ.\n`
|
|
19
|
+
+ ' Tên flow là tên một thư mục ở gốc repo flows — không chứa "/", "\\" hay "..".');
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
//# sourceMappingURL=flow-name.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"flow-name.js","sourceRoot":"","sources":["../../../src/commands/install/flow-name.ts"],"names":[],"mappings":";AAAA;;;;;;;GAOG;;AAGH,wCAUC;AAXD,yEAAyE;AACzE,SAAgB,cAAc,CAAC,IAAY;IACzC,4EAA4E;IAC5E,kFAAkF;IAClF,8EAA8E;IAC9E,IAAI,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,IAAI,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;QAC3F,MAAM,IAAI,KAAK,CACb,IAAI,IAAI,iCAAiC;cACvC,iFAAiF,CACpF,CAAC;IACJ,CAAC;AACH,CAAC"}
|
|
@@ -23,6 +23,12 @@ export interface FlowScriptContext {
|
|
|
23
23
|
* dùng chảy vào lượt cài này.
|
|
24
24
|
*/
|
|
25
25
|
planPath: string;
|
|
26
|
+
/**
|
|
27
|
+
* Đường dẫn file cài do registry khai, hoặc rỗng để theo quy ước.
|
|
28
|
+
*
|
|
29
|
+
* Tương đối so với thư mục flow. Xem `flowScriptPath`.
|
|
30
|
+
*/
|
|
31
|
+
installFile?: string;
|
|
26
32
|
}
|
|
27
33
|
/**
|
|
28
34
|
* Những cờ engine biết mà lượt cài thật cũng phải biết.
|
|
@@ -90,6 +96,14 @@ export declare function tailOfOutput(failure: FlowScriptFailure): string;
|
|
|
90
96
|
* hỏng: sinh 64 MB output chỉ để xem câu chữ có đúng không là cái giá không đáng trả.
|
|
91
97
|
*/
|
|
92
98
|
export declare function describeFlowScriptFailure(flow: string, failure: FlowScriptFailure): string;
|
|
99
|
+
/**
|
|
100
|
+
* Đường dẫn file cài của một flow: chỗ registry khai, hoặc chỗ quy ước.
|
|
101
|
+
*
|
|
102
|
+
* Đường dẫn khai trong registry phải nằm TRONG thư mục flow. Nó là một dòng trong file
|
|
103
|
+
* cấu hình, nhưng thứ nó chỉ tới lại được đem ra chạy — nên `../../..` ở đó là một
|
|
104
|
+
* script tuỳ ý trên máy người dùng được khởi động bởi `vsaf install`.
|
|
105
|
+
*/
|
|
106
|
+
export declare function flowScriptPath(flowDir: string, declared: string | undefined): string;
|
|
93
107
|
export declare function runFlowScript(context: FlowScriptContext & {
|
|
94
108
|
flags: FlowScriptFlags;
|
|
95
109
|
passthrough: string[];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"flow-script.d.ts","sourceRoot":"","sources":["../../../src/commands/install/flow-script.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAGnD;;;;;;;;;GASG;AAEH,MAAM,WAAW,iBAAiB;IAChC,MAAM,EAAE,UAAU,CAAC;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,aAAa,EAAE,MAAM,CAAC;IACtB;;;;;;OAMG;IACH,QAAQ,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"flow-script.d.ts","sourceRoot":"","sources":["../../../src/commands/install/flow-script.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAGnD;;;;;;;;;GASG;AAEH,MAAM,WAAW,iBAAiB;IAChC,MAAM,EAAE,UAAU,CAAC;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,aAAa,EAAE,MAAM,CAAC;IACtB;;;;;;OAMG;IACH,QAAQ,EAAE,MAAM,CAAC;IACjB;;;;OAIG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED;;;;;;;;GAQG;AACH,MAAM,WAAW,eAAe;IAC9B,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,eAAe,EAAE,WAAW,GAAE,MAAM,EAAO,GAAG,MAAM,EAAE,CAQ3F;AAED,wBAAgB,cAAc,CAAC,QAAQ,EAAE,MAAM,CAAC,QAAQ,GAAG,MAAM,CAEhE;AAyBD,wBAAgB,aAAa,CAAC,OAAO,EAAE,iBAAiB,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAkChF;AAaD;;;;;;;;GAQG;AACH,qBAAa,qBAAsB,SAAQ,KAAK;CAAG;AAEnD,MAAM,WAAW,iBAAiB;IAChC,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB;;;;;;;OAOG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC,OAAO,CAAC;IACxB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAqBD,qEAAqE;AACrE,wBAAgB,YAAY,CAAC,OAAO,EAAE,iBAAiB,GAAG,MAAM,CAU/D;AAED;;;;;GAKG;AACH,wBAAgB,yBAAyB,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,iBAAiB,GAAG,MAAM,CA8B1F;AAwBD;;;;;;GAMG;AACH,wBAAgB,cAAc,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,CAWpF;AAED,wBAAgB,aAAa,CAC3B,OAAO,EAAE,iBAAiB,GAAG;IAAE,KAAK,EAAE,eAAe,CAAC;IAAC,WAAW,EAAE,MAAM,EAAE,CAAA;CAAE,GAC7E,IAAI,CAmGN"}
|
|
@@ -6,6 +6,7 @@ exports.flowScriptName = flowScriptName;
|
|
|
6
6
|
exports.flowScriptEnv = flowScriptEnv;
|
|
7
7
|
exports.tailOfOutput = tailOfOutput;
|
|
8
8
|
exports.describeFlowScriptFailure = describeFlowScriptFailure;
|
|
9
|
+
exports.flowScriptPath = flowScriptPath;
|
|
9
10
|
exports.runFlowScript = runFlowScript;
|
|
10
11
|
const child_process_1 = require("child_process");
|
|
11
12
|
const fs_1 = require("fs");
|
|
@@ -205,12 +206,32 @@ function writeInstallLog(projectPath, flow, body) {
|
|
|
205
206
|
}
|
|
206
207
|
catch { /* nothing to do about it */ }
|
|
207
208
|
}
|
|
209
|
+
/**
|
|
210
|
+
* Đường dẫn file cài của một flow: chỗ registry khai, hoặc chỗ quy ước.
|
|
211
|
+
*
|
|
212
|
+
* Đường dẫn khai trong registry phải nằm TRONG thư mục flow. Nó là một dòng trong file
|
|
213
|
+
* cấu hình, nhưng thứ nó chỉ tới lại được đem ra chạy — nên `../../..` ở đó là một
|
|
214
|
+
* script tuỳ ý trên máy người dùng được khởi động bởi `vsaf install`.
|
|
215
|
+
*/
|
|
216
|
+
function flowScriptPath(flowDir, declared) {
|
|
217
|
+
const name = declared ?? flowScriptName(process.platform);
|
|
218
|
+
const path = (0, path_1.resolve)(flowDir, name);
|
|
219
|
+
const trong = (0, path_1.resolve)(flowDir);
|
|
220
|
+
if (path !== trong && !path.startsWith(trong + path_1.sep)) {
|
|
221
|
+
throw new FlowScriptNotRunError(`Đường dẫn file cài "${name}" không được trỏ ra ngoài thư mục flow.\n`
|
|
222
|
+
+ ` Thư mục flow: ${trong}`);
|
|
223
|
+
}
|
|
224
|
+
return path;
|
|
225
|
+
}
|
|
208
226
|
function runFlowScript(context) {
|
|
209
|
-
const name = flowScriptName(process.platform);
|
|
210
|
-
const script = (
|
|
227
|
+
const name = context.installFile ?? flowScriptName(process.platform);
|
|
228
|
+
const script = flowScriptPath(context.source.dir, context.installFile);
|
|
211
229
|
if (!(0, fs_1.existsSync)(script)) {
|
|
212
|
-
throw new FlowScriptNotRunError(
|
|
213
|
-
|
|
230
|
+
throw new FlowScriptNotRunError(context.installFile
|
|
231
|
+
? `Flow "${context.flow}" không có file cài "${name}" mà registry khai.\n`
|
|
232
|
+
+ ` Đã tìm ở: ${script}`
|
|
233
|
+
: `Flow "${context.flow}" chưa có ${name} cho hệ điều hành đang chạy.\n`
|
|
234
|
+
+ ` Đã tìm ở: ${script}`);
|
|
214
235
|
}
|
|
215
236
|
const env = { ...process.env, ...flowScriptEnv(context) };
|
|
216
237
|
const scriptArgs = flowScriptArgs(context.flags, context.passthrough);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"flow-script.js","sourceRoot":"","sources":["../../../src/commands/install/flow-script.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"flow-script.js","sourceRoot":"","sources":["../../../src/commands/install/flow-script.ts"],"names":[],"mappings":"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"}
|