@canyonjs/babel-plugin 1.0.3 → 1.0.6
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/LICENSE +21 -0
- package/dist/helpers/detect-ci-config.d.ts +1 -1
- package/dist/helpers/detect-ci-config.d.ts.map +1 -1
- package/dist/helpers/detect-ci-config.js +7 -11
- package/dist/helpers/detect-ci-config.js.map +1 -1
- package/dist/helpers/extract-coverage-data.d.ts.map +1 -1
- package/dist/helpers/extract-coverage-data.js.map +1 -1
- package/dist/helpers/generate-build-hash.d.ts +1 -1
- package/dist/helpers/generate-build-hash.d.ts.map +1 -1
- package/dist/helpers/generate-build-hash.js +8 -8
- package/dist/helpers/generate-build-hash.js.map +1 -1
- package/dist/helpers/generate-initial-coverage.d.ts +1 -1
- package/dist/helpers/hash.js +1 -1
- package/dist/helpers/statement-map-hash.d.ts +2 -2
- package/dist/helpers/statement-map-hash.d.ts.map +1 -1
- package/dist/helpers/statement-map-hash.js +11 -11
- package/dist/helpers/statement-map-hash.js.map +1 -1
- package/dist/index.d.ts +2 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +6 -4
- package/dist/index.js.map +1 -1
- package/dist/types.d.ts +1 -0
- package/dist/types.d.ts.map +1 -1
- package/dist/visitor-program-exit.d.ts +2 -2
- package/dist/visitor-program-exit.d.ts.map +1 -1
- package/dist/visitor-program-exit.js +28 -82
- package/dist/visitor-program-exit.js.map +1 -1
- package/package.json +11 -13
- package/dist/helpers/remap-coverage.d.ts +0 -3
- package/dist/helpers/remap-coverage.d.ts.map +0 -1
- package/dist/helpers/remap-coverage.js +0 -80
- package/dist/helpers/remap-coverage.js.map +0 -1
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) Canyon Platforms, Inc. and affiliates.
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"detect-ci-config.d.ts","sourceRoot":"","sources":["../../src/helpers/detect-ci-config.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,UAAU,CAAC;AAExD;;;GAGG;AACH,wBAAgB,cAAc,IAAI,OAAO,CAAC,uBAAuB,CAAC,
|
|
1
|
+
{"version":3,"file":"detect-ci-config.d.ts","sourceRoot":"","sources":["../../src/helpers/detect-ci-config.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,UAAU,CAAC;AAExD;;;GAGG;AACH,wBAAgB,cAAc,IAAI,OAAO,CAAC,uBAAuB,CAAC,CA0BjE"}
|
|
@@ -8,26 +8,22 @@ exports.detectCIConfig = detectCIConfig;
|
|
|
8
8
|
function detectCIConfig() {
|
|
9
9
|
const ciConfig = {};
|
|
10
10
|
// 检测是否在 CI 环境中
|
|
11
|
-
const isCI = !!(process.env.CI ||
|
|
12
|
-
process.env.GITLAB_CI ||
|
|
13
|
-
process.env.GITHUB_ACTIONS);
|
|
11
|
+
const isCI = !!(process.env.CI || process.env.GITLAB_CI || process.env.GITHUB_ACTIONS);
|
|
14
12
|
if (!isCI) {
|
|
15
13
|
return ciConfig;
|
|
16
14
|
}
|
|
17
15
|
ciConfig.ci = true;
|
|
18
16
|
// 检测 GitLab CI
|
|
19
17
|
if (process.env.GITLAB_CI || process.env.CI_PROJECT_ID) {
|
|
20
|
-
ciConfig.provider =
|
|
21
|
-
ciConfig.repoID =
|
|
22
|
-
|
|
23
|
-
ciConfig.sha = process.env.CI_COMMIT_SHA || '';
|
|
18
|
+
ciConfig.provider = "gitlab";
|
|
19
|
+
ciConfig.repoID = process.env.CI_PROJECT_ID || process.env.CI_PROJECT_PATH || "";
|
|
20
|
+
ciConfig.sha = process.env.CI_COMMIT_SHA || "";
|
|
24
21
|
}
|
|
25
22
|
// 检测 GitHub Actions
|
|
26
23
|
else if (process.env.GITHUB_ACTIONS || process.env.GITHUB_REPOSITORY) {
|
|
27
|
-
ciConfig.provider =
|
|
28
|
-
ciConfig.repoID =
|
|
29
|
-
|
|
30
|
-
ciConfig.sha = process.env.GITHUB_SHA || '';
|
|
24
|
+
ciConfig.provider = "github";
|
|
25
|
+
ciConfig.repoID = process.env.GITHUB_REPOSITORY_ID || process.env.GITHUB_REPOSITORY || "";
|
|
26
|
+
ciConfig.sha = process.env.GITHUB_SHA || "";
|
|
31
27
|
}
|
|
32
28
|
return ciConfig;
|
|
33
29
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"detect-ci-config.js","sourceRoot":"","sources":["../../src/helpers/detect-ci-config.ts"],"names":[],"mappings":";;;AAEA;;;GAGG;AACH,0BAAmE;IACjE,MAAM,QAAQ,GAAqC,EAAE,CAAC;IAEtD,+BAAe;IACf,MAAM,IAAI,GAAG,CAAC,CAAC,
|
|
1
|
+
{"version":3,"file":"detect-ci-config.js","sourceRoot":"","sources":["../../src/helpers/detect-ci-config.ts"],"names":[],"mappings":";;;AAEA;;;GAGG;AACH,0BAAmE;IACjE,MAAM,QAAQ,GAAqC,EAAE,CAAC;IAEtD,+BAAe;IACf,MAAM,IAAI,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,IAAI,OAAO,CAAC,GAAG,CAAC,SAAS,IAAI,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;IAEvF,IAAI,CAAC,IAAI,EAAE,CAAC;QACV,OAAO,QAAQ,CAAC;IAClB,CAAC;IAED,QAAQ,CAAC,EAAE,GAAG,IAAI,CAAC;IAEnB,mBAAe;IACf,IAAI,OAAO,CAAC,GAAG,CAAC,SAAS,IAAI,OAAO,CAAC,GAAG,CAAC,aAAa,EAAE,CAAC;QACvD,QAAQ,CAAC,QAAQ,GAAG,QAAQ,CAAC;QAC7B,QAAQ,CAAC,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,aAAa,IAAI,OAAO,CAAC,GAAG,CAAC,eAAe,IAAI,EAAE,CAAC;QACjF,QAAQ,CAAC,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,aAAa,IAAI,EAAE,CAAC;IACjD,CAAC;IACD,wBAAoB;SACf,IAAI,OAAO,CAAC,GAAG,CAAC,cAAc,IAAI,OAAO,CAAC,GAAG,CAAC,iBAAiB,EAAE,CAAC;QACrE,QAAQ,CAAC,QAAQ,GAAG,QAAQ,CAAC;QAC7B,QAAQ,CAAC,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,oBAAoB,IAAI,OAAO,CAAC,GAAG,CAAC,iBAAiB,IAAI,EAAE,CAAC;QAC1F,QAAQ,CAAC,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,UAAU,IAAI,EAAE,CAAC;IAC9C,CAAC;IAED,OAAO,QAAQ,CAAC;AAAA,CACjB"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"extract-coverage-data.d.ts","sourceRoot":"","sources":["../../src/helpers/extract-coverage-data.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AACH,wBAAgB,mBAAmB,
|
|
1
|
+
{"version":3,"file":"extract-coverage-data.d.ts","sourceRoot":"","sources":["../../src/helpers/extract-coverage-data.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AACH,wBAAgB,mBAAmB,CAAC,aAAa,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CA4BzF"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"extract-coverage-data.js","sourceRoot":"","sources":["../../src/helpers/extract-coverage-data.ts"],"names":[],"mappings":";;;AAAA;;;;;;;;GAQG;AACH,
|
|
1
|
+
{"version":3,"file":"extract-coverage-data.js","sourceRoot":"","sources":["../../src/helpers/extract-coverage-data.ts"],"names":[],"mappings":";;;AAAA;;;;;;;;GAQG;AACH,6BAAoC,aAAqB,EAAkC;IACzF,2CAAiC;IACjC,MAAM,mBAAmB,GAAG,wCAAwC,CAAC;IACrE,+CAAqC;IACrC,MAAM,eAAe,GAAG,yDAAyD,CAAC;IAElF,IAAI,CAAC;QACH,8BAAY;QACZ,MAAM,iBAAiB,GAAG,mBAAmB,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;QAClE,IAAI,iBAAiB,EAAE,CAAC;YACtB,MAAM,YAAY,GAAG,iBAAiB,CAAC,CAAC,CAAC,CAAC;YAC1C,OAAO,IAAI,QAAQ,CAAC,UAAU,YAAY,EAAE,CAAC,EAA6B,CAAC;QAC7E,CAAC;QAED,8BAAY;QACZ,MAAM,aAAa,GAAG,eAAe,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;QAC1D,IAAI,aAAa,EAAE,CAAC;YAClB,MAAM,YAAY,GAAG,aAAa,CAAC,CAAC,CAAC,CAAC;YACtC,MAAM,IAAI,GAAG,IAAI,QAAQ,CAAC,GAAG,YAAY,sBAAsB,CAAC,CAAC;YACjE,MAAM,MAAM,GAAG,IAAI,EAAE,CAAC;YACtB,OAAO,MAAiC,CAAC;QAC3C,CAAC;IACH,CAAC;IAAC,OAAO,MAAM,EAAE,CAAC;QAChB,6BAAe;QACf,OAAO,IAAI,CAAC;IACd,CAAC;IAED,OAAO,IAAI,CAAC;AAAA,CACb"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"generate-build-hash.d.ts","sourceRoot":"","sources":["../../src/helpers/generate-build-hash.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,UAAU,CAAC;AAExD;;;;;;GAMG;AACH,wBAAgB,iBAAiB,
|
|
1
|
+
{"version":3,"file":"generate-build-hash.d.ts","sourceRoot":"","sources":["../../src/helpers/generate-build-hash.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,UAAU,CAAC;AAExD;;;;;;GAMG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,QAAQ,CAAC,uBAAuB,CAAC,GAAG,MAAM,CAiBnF"}
|
|
@@ -17,16 +17,16 @@ function generateBuildHash(config) {
|
|
|
17
17
|
// buildHash 包含这些核心字段:
|
|
18
18
|
// provider + repoID + sha + buildTarget + instrumentCwd
|
|
19
19
|
const buildHashFields = {
|
|
20
|
-
provider: config.provider ||
|
|
21
|
-
repoID: config.repoID ||
|
|
22
|
-
sha: config.sha ||
|
|
23
|
-
buildTarget: config.buildTarget ||
|
|
24
|
-
instrumentCwd: config.instrumentCwd ||
|
|
20
|
+
provider: config.provider || "",
|
|
21
|
+
repoID: config.repoID || "",
|
|
22
|
+
sha: config.sha || "",
|
|
23
|
+
buildTarget: config.buildTarget || "",
|
|
24
|
+
instrumentCwd: config.instrumentCwd || "",
|
|
25
25
|
};
|
|
26
26
|
// 使用 json-stable-stringify 确保键顺序稳定,与后端保持一致
|
|
27
|
-
const hash = (0, node_crypto_1.createHash)(
|
|
28
|
-
.update((0, json_stable_stringify_1.default)(buildHashFields) ||
|
|
29
|
-
.digest(
|
|
27
|
+
const hash = (0, node_crypto_1.createHash)("sha1")
|
|
28
|
+
.update((0, json_stable_stringify_1.default)(buildHashFields) || "")
|
|
29
|
+
.digest("hex");
|
|
30
30
|
return hash;
|
|
31
31
|
}
|
|
32
32
|
//# sourceMappingURL=generate-build-hash.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"generate-build-hash.js","sourceRoot":"","sources":["../../src/helpers/generate-build-hash.ts"],"names":[],"mappings":";;;;;;AAAA,6CAAyC;AACzC,kFAA8C;AAG9C;;;;;;GAMG;AACH,
|
|
1
|
+
{"version":3,"file":"generate-build-hash.js","sourceRoot":"","sources":["../../src/helpers/generate-build-hash.ts"],"names":[],"mappings":";;;;;;AAAA,6CAAyC;AACzC,kFAA8C;AAG9C;;;;;;GAMG;AACH,2BAAkC,MAAyC,EAAU;IACnF,wCAAsB;IACtB,wDAAwD;IACxD,MAAM,eAAe,GAA2B;QAC9C,QAAQ,EAAE,MAAM,CAAC,QAAQ,IAAI,EAAE;QAC/B,MAAM,EAAE,MAAM,CAAC,MAAM,IAAI,EAAE;QAC3B,GAAG,EAAE,MAAM,CAAC,GAAG,IAAI,EAAE;QACrB,WAAW,EAAE,MAAM,CAAC,WAAW,IAAI,EAAE;QACrC,aAAa,EAAE,MAAM,CAAC,aAAa,IAAI,EAAE;KAC1C,CAAC;IAEF,6EAA2C;IAC3C,MAAM,IAAI,GAAG,IAAA,wBAAU,EAAC,MAAM,CAAC;SAC5B,MAAM,CAAC,IAAA,+BAAS,EAAC,eAAe,CAAC,IAAI,EAAE,CAAC;SACxC,MAAM,CAAC,KAAK,CAAC,CAAC;IAEjB,OAAO,IAAI,CAAC;AAAA,CACb"}
|
package/dist/helpers/hash.js
CHANGED
|
@@ -9,6 +9,6 @@ const node_crypto_1 = require("node:crypto");
|
|
|
9
9
|
* @returns SHA1 hash 字符串
|
|
10
10
|
*/
|
|
11
11
|
function computeHash(content) {
|
|
12
|
-
return (0, node_crypto_1.createHash)(
|
|
12
|
+
return (0, node_crypto_1.createHash)("sha1").update(content).digest("hex");
|
|
13
13
|
}
|
|
14
14
|
//# sourceMappingURL=hash.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"statement-map-hash.d.ts","sourceRoot":"","sources":["../../src/helpers/statement-map-hash.ts"],"names":[],"mappings":"AAEA;;GAEG;AACH,UAAU,QAAQ;IAChB,KAAK,EAAE;QACL,IAAI,EAAE,MAAM,CAAC;QACb,MAAM,EAAE,MAAM,CAAC;KAChB,CAAC;IACF,GAAG,EAAE;QACH,IAAI,EAAE,MAAM,CAAC;QACb,MAAM,EAAE,MAAM,CAAC;KAChB,CAAC;CACH;AAED;;GAEG;AACH,UAAU,iBAAiB;IACzB,KAAK,EAAE,QAAQ,CAAC,OAAO,CAAC,CAAC;IACzB,GAAG,EAAE,QAAQ,CAAC,KAAK,CAAC,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAgDD;;;;;;GAMG;AACH,wBAAgB,0BAA0B,CACxC,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,iBAAiB,CAAC,EAC/C,UAAU,EAAE,MAAM,GACjB,IAAI,
|
|
1
|
+
{"version":3,"file":"statement-map-hash.d.ts","sourceRoot":"","sources":["../../src/helpers/statement-map-hash.ts"],"names":[],"mappings":"AAEA;;GAEG;AACH,UAAU,QAAQ;IAChB,KAAK,EAAE;QACL,IAAI,EAAE,MAAM,CAAC;QACb,MAAM,EAAE,MAAM,CAAC;KAChB,CAAC;IACF,GAAG,EAAE;QACH,IAAI,EAAE,MAAM,CAAC;QACb,MAAM,EAAE,MAAM,CAAC;KAChB,CAAC;CACH;AAED;;GAEG;AACH,UAAU,iBAAiB;IACzB,KAAK,EAAE,QAAQ,CAAC,OAAO,CAAC,CAAC;IACzB,GAAG,EAAE,QAAQ,CAAC,KAAK,CAAC,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAgDD;;;;;;GAMG;AACH,wBAAgB,0BAA0B,CACxC,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,iBAAiB,CAAC,EAC/C,UAAU,EAAE,MAAM,GACjB,IAAI,CA2BN"}
|
|
@@ -11,18 +11,18 @@ const hash_1 = require("./hash");
|
|
|
11
11
|
* @returns 提取的代码片段
|
|
12
12
|
*/
|
|
13
13
|
function extractCodeSnippet(sourceCode, start, end) {
|
|
14
|
-
const lines = sourceCode.split(
|
|
14
|
+
const lines = sourceCode.split("\n");
|
|
15
15
|
// 行号从 1 开始,数组索引从 0 开始
|
|
16
16
|
const startLineIndex = start.line - 1;
|
|
17
17
|
const endLineIndex = end.line - 1;
|
|
18
18
|
if (startLineIndex < 0 || endLineIndex >= lines.length) {
|
|
19
|
-
return
|
|
19
|
+
return "";
|
|
20
20
|
}
|
|
21
21
|
// 如果是同一行
|
|
22
22
|
if (startLineIndex === endLineIndex) {
|
|
23
23
|
const line = lines[startLineIndex];
|
|
24
24
|
if (!line) {
|
|
25
|
-
return
|
|
25
|
+
return "";
|
|
26
26
|
}
|
|
27
27
|
return line.slice(start.column, end.column);
|
|
28
28
|
}
|
|
@@ -30,12 +30,12 @@ function extractCodeSnippet(sourceCode, start, end) {
|
|
|
30
30
|
const startLine = lines[startLineIndex];
|
|
31
31
|
const endLine = lines[endLineIndex];
|
|
32
32
|
if (!startLine || !endLine) {
|
|
33
|
-
return
|
|
33
|
+
return "";
|
|
34
34
|
}
|
|
35
35
|
const firstLinePart = startLine.slice(start.column);
|
|
36
36
|
const middleLines = lines.slice(startLineIndex + 1, endLineIndex);
|
|
37
37
|
const lastLinePart = endLine.slice(0, end.column);
|
|
38
|
-
return [firstLinePart, ...middleLines, lastLinePart].join(
|
|
38
|
+
return [firstLinePart, ...middleLines, lastLinePart].join("\n");
|
|
39
39
|
}
|
|
40
40
|
/**
|
|
41
41
|
* 为 statementMap 中的每个条目添加 contentHash 字段
|
|
@@ -45,19 +45,19 @@ function extractCodeSnippet(sourceCode, start, end) {
|
|
|
45
45
|
* @param sourceCode - 源代码内容
|
|
46
46
|
*/
|
|
47
47
|
function enrichStatementMapWithHash(statementMap, sourceCode) {
|
|
48
|
-
if (!statementMap || typeof statementMap !==
|
|
48
|
+
if (!statementMap || typeof statementMap !== "object") {
|
|
49
49
|
return;
|
|
50
50
|
}
|
|
51
51
|
Object.keys(statementMap).forEach((key) => {
|
|
52
52
|
const entry = statementMap[key];
|
|
53
53
|
if (entry &&
|
|
54
|
-
typeof entry ===
|
|
54
|
+
typeof entry === "object" &&
|
|
55
55
|
entry.start &&
|
|
56
56
|
entry.end &&
|
|
57
|
-
typeof entry.start.line ===
|
|
58
|
-
typeof entry.start.column ===
|
|
59
|
-
typeof entry.end.line ===
|
|
60
|
-
typeof entry.end.column ===
|
|
57
|
+
typeof entry.start.line === "number" &&
|
|
58
|
+
typeof entry.start.column === "number" &&
|
|
59
|
+
typeof entry.end.line === "number" &&
|
|
60
|
+
typeof entry.end.column === "number") {
|
|
61
61
|
try {
|
|
62
62
|
const codeSnippet = extractCodeSnippet(sourceCode, entry.start, entry.end);
|
|
63
63
|
if (codeSnippet) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"statement-map-hash.js","sourceRoot":"","sources":["../../src/helpers/statement-map-hash.ts"],"names":[],"mappings":";;;AAAA,iCAAqC;AAyBrC;;;;;;;GAOG;AACH,SAAS,kBAAkB,CACzB,UAAkB,EAClB,KAAwB,EACxB,GAAoB,EACZ;IACR,MAAM,KAAK,GAAG,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAErC,gDAAsB;IACtB,MAAM,cAAc,GAAG,KAAK,CAAC,IAAI,GAAG,CAAC,CAAC;IACtC,MAAM,YAAY,GAAG,GAAG,CAAC,IAAI,GAAG,CAAC,CAAC;IAElC,IAAI,cAAc,GAAG,CAAC,IAAI,YAAY,IAAI,KAAK,CAAC,MAAM,EAAE,CAAC;QACvD,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,qBAAS;IACT,IAAI,cAAc,KAAK,YAAY,EAAE,CAAC;QACpC,MAAM,IAAI,GAAG,KAAK,CAAC,cAAc,CAAC,CAAC;QACnC,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,OAAO,EAAE,CAAC;QACZ,CAAC;QACD,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IAC9C,CAAC;IAED,qBAAS;IACT,MAAM,SAAS,GAAG,KAAK,CAAC,cAAc,CAAC,CAAC;IACxC,MAAM,OAAO,GAAG,KAAK,CAAC,YAAY,CAAC,CAAC;IACpC,IAAI,CAAC,SAAS,IAAI,CAAC,OAAO,EAAE,CAAC;QAC3B,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,MAAM,aAAa,GAAG,SAAS,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;IACpD,MAAM,WAAW,GAAG,KAAK,CAAC,KAAK,CAAC,cAAc,GAAG,CAAC,EAAE,YAAY,CAAC,CAAC;IAClE,MAAM,YAAY,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IAElD,OAAO,CAAC,aAAa,EAAE,GAAG,WAAW,EAAE,YAAY,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAAA,CACjE;AAED;;;;;;GAMG;AACH,oCACE,YAA+C,EAC/C,UAAkB,EACZ;IACN,IAAI,CAAC,YAAY,IAAI,OAAO,YAAY,KAAK,QAAQ,EAAE,CAAC;QACtD,OAAO;IACT,CAAC;IAED,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC;QACzC,MAAM,KAAK,GAAG,YAAY,CAAC,GAAG,CAAC,CAAC;QAChC,IACE,KAAK;YACL,OAAO,KAAK,KAAK,QAAQ;YACzB,KAAK,CAAC,KAAK;YACX,KAAK,CAAC,GAAG;YACT,OAAO,KAAK,CAAC,KAAK,CAAC,IAAI,KAAK,QAAQ;YACpC,OAAO,KAAK,CAAC,KAAK,CAAC,MAAM,KAAK,QAAQ;YACtC,OAAO,KAAK,CAAC,GAAG,CAAC,IAAI,KAAK,QAAQ;YAClC,OAAO,KAAK,CAAC,GAAG,CAAC,MAAM,KAAK,QAAQ,EACpC,CAAC;YACD,IAAI,CAAC;gBACH,MAAM,WAAW,GAAG,kBAAkB,
|
|
1
|
+
{"version":3,"file":"statement-map-hash.js","sourceRoot":"","sources":["../../src/helpers/statement-map-hash.ts"],"names":[],"mappings":";;;AAAA,iCAAqC;AAyBrC;;;;;;;GAOG;AACH,SAAS,kBAAkB,CACzB,UAAkB,EAClB,KAAwB,EACxB,GAAoB,EACZ;IACR,MAAM,KAAK,GAAG,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAErC,gDAAsB;IACtB,MAAM,cAAc,GAAG,KAAK,CAAC,IAAI,GAAG,CAAC,CAAC;IACtC,MAAM,YAAY,GAAG,GAAG,CAAC,IAAI,GAAG,CAAC,CAAC;IAElC,IAAI,cAAc,GAAG,CAAC,IAAI,YAAY,IAAI,KAAK,CAAC,MAAM,EAAE,CAAC;QACvD,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,qBAAS;IACT,IAAI,cAAc,KAAK,YAAY,EAAE,CAAC;QACpC,MAAM,IAAI,GAAG,KAAK,CAAC,cAAc,CAAC,CAAC;QACnC,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,OAAO,EAAE,CAAC;QACZ,CAAC;QACD,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IAC9C,CAAC;IAED,qBAAS;IACT,MAAM,SAAS,GAAG,KAAK,CAAC,cAAc,CAAC,CAAC;IACxC,MAAM,OAAO,GAAG,KAAK,CAAC,YAAY,CAAC,CAAC;IACpC,IAAI,CAAC,SAAS,IAAI,CAAC,OAAO,EAAE,CAAC;QAC3B,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,MAAM,aAAa,GAAG,SAAS,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;IACpD,MAAM,WAAW,GAAG,KAAK,CAAC,KAAK,CAAC,cAAc,GAAG,CAAC,EAAE,YAAY,CAAC,CAAC;IAClE,MAAM,YAAY,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IAElD,OAAO,CAAC,aAAa,EAAE,GAAG,WAAW,EAAE,YAAY,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAAA,CACjE;AAED;;;;;;GAMG;AACH,oCACE,YAA+C,EAC/C,UAAkB,EACZ;IACN,IAAI,CAAC,YAAY,IAAI,OAAO,YAAY,KAAK,QAAQ,EAAE,CAAC;QACtD,OAAO;IACT,CAAC;IAED,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC;QACzC,MAAM,KAAK,GAAG,YAAY,CAAC,GAAG,CAAC,CAAC;QAChC,IACE,KAAK;YACL,OAAO,KAAK,KAAK,QAAQ;YACzB,KAAK,CAAC,KAAK;YACX,KAAK,CAAC,GAAG;YACT,OAAO,KAAK,CAAC,KAAK,CAAC,IAAI,KAAK,QAAQ;YACpC,OAAO,KAAK,CAAC,KAAK,CAAC,MAAM,KAAK,QAAQ;YACtC,OAAO,KAAK,CAAC,GAAG,CAAC,IAAI,KAAK,QAAQ;YAClC,OAAO,KAAK,CAAC,GAAG,CAAC,MAAM,KAAK,QAAQ,EACpC,CAAC;YACD,IAAI,CAAC;gBACH,MAAM,WAAW,GAAG,kBAAkB,CAAC,UAAU,EAAE,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC;gBAC3E,IAAI,WAAW,EAAE,CAAC;oBAChB,KAAK,CAAC,WAAW,GAAG,IAAA,kBAAW,EAAC,WAAW,CAAC,CAAC;gBAC/C,CAAC;YACH,CAAC;YAAC,OAAO,MAAM,EAAE,CAAC;gBAChB,0CAAgB;YAClB,CAAC;QACH,CAAC;IAAA,CACF,CAAC,CAAC;AAAA,CACJ"}
|
package/dist/index.d.ts
CHANGED
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAa,QAAQ,EAAE,MAAM,aAAa,CAAC;AAEvD,OAAO,KAAK,KAAK,CAAC,MAAM,cAAc,CAAC;AAgDvC;;;GAGG;;;;;;;;AACH,wBAoBE"}
|
package/dist/index.js
CHANGED
|
@@ -7,12 +7,13 @@ const visitor_program_exit_1 = require("./visitor-program-exit");
|
|
|
7
7
|
* 默认配置对象
|
|
8
8
|
*/
|
|
9
9
|
const defaultConfig = {
|
|
10
|
-
repoID:
|
|
11
|
-
sha:
|
|
12
|
-
provider:
|
|
13
|
-
buildTarget:
|
|
10
|
+
repoID: "",
|
|
11
|
+
sha: "",
|
|
12
|
+
provider: "",
|
|
13
|
+
buildTarget: "",
|
|
14
14
|
ci: false,
|
|
15
15
|
instrumentCwd: process.cwd(),
|
|
16
|
+
keepMap: false,
|
|
16
17
|
};
|
|
17
18
|
/**
|
|
18
19
|
* 合并用户配置、CI 自动检测配置和默认配置
|
|
@@ -32,6 +33,7 @@ function mergeConfig(config) {
|
|
|
32
33
|
buildTarget: config?.buildTarget ?? ciConfig.buildTarget ?? defaultConfig.buildTarget,
|
|
33
34
|
ci: config?.ci ?? ciConfig.ci ?? defaultConfig.ci,
|
|
34
35
|
instrumentCwd: config?.instrumentCwd ?? defaultConfig.instrumentCwd,
|
|
36
|
+
keepMap: config?.keepMap ?? defaultConfig.keepMap,
|
|
35
37
|
// buildProvider:
|
|
36
38
|
// config?.buildProvider ??
|
|
37
39
|
// ciConfig.buildProvider ??
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;AACA,oEAAqD;AAErD,iEAA4D;AAE5D,iEAA4D;AAE5D;;GAEG;AACH,MAAM,aAAa,GAAsC;IACvD,MAAM,EAAE,EAAE;IACV,GAAG,EAAE,EAAE;IACP,QAAQ,EAAE,EAAE;IACZ,WAAW,EAAE,EAAE;IACf,EAAE,EAAE,KAAK;IACT,aAAa,EAAE,OAAO,CAAC,GAAG,EAAE;IAC5B,OAAO,EAAE,KAAK;CACf,CAAC;AAEF;;;;;GAKG;AACH,SAAS,WAAW,CAClB,MAA2C,EACR;IACnC,iDAAqB;IACrB,MAAM,QAAQ,GAAG,IAAA,iCAAc,GAAE,CAAC;IAElC,kEAA8B;IAC9B,OAAO;QACL,MAAM,EAAE,MAAM,EAAE,MAAM,IAAI,QAAQ,CAAC,MAAM,IAAI,aAAa,CAAC,MAAM;QACjE,GAAG,EAAE,MAAM,EAAE,GAAG,IAAI,QAAQ,CAAC,GAAG,IAAI,aAAa,CAAC,GAAG;QACrD,qEAAqE;QACrE,QAAQ,EAAE,MAAM,EAAE,QAAQ,IAAI,QAAQ,CAAC,QAAQ,IAAI,aAAa,CAAC,QAAQ;QACzE,WAAW,EAAE,MAAM,EAAE,WAAW,IAAI,QAAQ,CAAC,WAAW,IAAI,aAAa,CAAC,WAAW;QACrF,EAAE,EAAE,MAAM,EAAE,EAAE,IAAI,QAAQ,CAAC,EAAE,IAAI,aAAa,CAAC,EAAE;QACjD,aAAa,EAAE,MAAM,EAAE,aAAa,IAAI,aAAa,CAAC,aAAa;QACnE,OAAO,EAAE,MAAM,EAAE,OAAO,IAAI,aAAa,CAAC,OAAO;QACjD,iBAAiB;QACjB,6BAA6B;QAC7B,8BAA8B;QAC9B,iCAAiC;QACjC,yEAAyE;KAC1E,CAAC;AAAA,CACH;AAED;;;GAGG;kBACY,IAAA,6BAAO,EACpB,CACE,GAAc,EACd,MAAe,EAGf,EAAE,CAAC;IACH,GAAG,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC;IACrB,MAAM,UAAU,GAAG,MAA6C,CAAC;IACjE,MAAM,eAAe,GAAG,WAAW,CAAC,UAAU,CAAC,CAAC;IAChD,OAAO;QACL,OAAO,EAAE;YACP,OAAO,EAAE;gBACP,IAAI,EAAE,CAAC,WAAgC,EAAE,EAAE,CAAC;oBAC1C,IAAA,yCAAkB,EAAC,GAAG,EAAE,WAAW,EAAE,eAAe,CAAC,CAAC;gBAAA,CACvD;aACF;SACF;KACF,CAAC;AAAA,CACH,CACF"}
|
package/dist/types.d.ts
CHANGED
package/dist/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,WAAW,uBAAuB;IACtC,gBAAY;IACZ,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,qBAAqB;IACrB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,oBAAc;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,mBAAW;IACX,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,0BAAgB;IAChB,EAAE,CAAC,EAAE,OAAO,CAAC;IACb,iDAAqB;IACrB,aAAa,CAAC,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,WAAW,uBAAuB;IACtC,gBAAY;IACZ,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,qBAAqB;IACrB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,oBAAc;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,mBAAW;IACX,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,0BAAgB;IAChB,EAAE,CAAC,EAAE,OAAO,CAAC;IACb,iDAAqB;IACrB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import type { types as BabelTypes, ConfigAPI, NodePath } from
|
|
2
|
-
import type { CanyonBabelPluginConfig } from
|
|
1
|
+
import type { types as BabelTypes, ConfigAPI, NodePath } from "@babel/core";
|
|
2
|
+
import type { CanyonBabelPluginConfig } from "./types";
|
|
3
3
|
/**
|
|
4
4
|
* 覆盖率数据接口
|
|
5
5
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"visitor-program-exit.d.ts","sourceRoot":"","sources":["../src/visitor-program-exit.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"visitor-program-exit.d.ts","sourceRoot":"","sources":["../src/visitor-program-exit.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,KAAK,IAAI,UAAU,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAM5E,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,SAAS,CAAC;AAEvD;;GAEG;AACH,UAAU,YAAY;IACpB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAED;;GAEG;AACH,UAAU,wBAAwB;IAChC,oCAAoC,EAAE,YAAY,GAAG,IAAI,CAAC;CAC3D;AAED;;;;;;;;GAQG;AACH,wBAAgB,kBAAkB,CAChC,GAAG,EAAE,SAAS,EACd,WAAW,EAAE,QAAQ,CAAC,UAAU,CAAC,OAAO,CAAC,EACzC,MAAM,EAAE,QAAQ,CAAC,uBAAuB,CAAC,GACxC,wBAAwB,CAyK1B"}
|
|
@@ -37,7 +37,6 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
37
37
|
};
|
|
38
38
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
39
39
|
exports.visitorProgramExit = visitorProgramExit;
|
|
40
|
-
const console = __importStar(require("node:console"));
|
|
41
40
|
const node_crypto_1 = require("node:crypto");
|
|
42
41
|
const fs = __importStar(require("node:fs"));
|
|
43
42
|
const path = __importStar(require("node:path"));
|
|
@@ -45,7 +44,6 @@ const generator_1 = __importDefault(require("@babel/generator"));
|
|
|
45
44
|
const generate_build_hash_1 = require("./helpers/generate-build-hash");
|
|
46
45
|
const generate_initial_coverage_1 = require("./helpers/generate-initial-coverage");
|
|
47
46
|
const hash_1 = require("./helpers/hash");
|
|
48
|
-
const remap_coverage_1 = require("./helpers/remap-coverage");
|
|
49
47
|
const statement_map_hash_1 = require("./helpers/statement-map-hash");
|
|
50
48
|
/**
|
|
51
49
|
* Program 节点退出时的访问器函数
|
|
@@ -68,7 +66,7 @@ function visitorProgramExit(api, programPath, config) {
|
|
|
68
66
|
try {
|
|
69
67
|
if (initialCoverageData &&
|
|
70
68
|
initialCoverageData.statementMap &&
|
|
71
|
-
typeof initialCoverageData.statementMap ===
|
|
69
|
+
typeof initialCoverageData.statementMap === "object") {
|
|
72
70
|
(0, statement_map_hash_1.enrichStatementMapWithHash)(initialCoverageData.statementMap, originalCode);
|
|
73
71
|
}
|
|
74
72
|
}
|
|
@@ -77,7 +75,7 @@ function visitorProgramExit(api, programPath, config) {
|
|
|
77
75
|
}
|
|
78
76
|
// 基于文件内容计算 contentHash,并写入内存对象
|
|
79
77
|
try {
|
|
80
|
-
if (initialCoverageData && typeof initialCoverageData ===
|
|
78
|
+
if (initialCoverageData && typeof initialCoverageData === "object") {
|
|
81
79
|
const contentHash = (0, hash_1.computeHash)(originalCode);
|
|
82
80
|
initialCoverageData.contentHash = contentHash;
|
|
83
81
|
}
|
|
@@ -89,8 +87,8 @@ function visitorProgramExit(api, programPath, config) {
|
|
|
89
87
|
if (initialCoverageData && !initialCoverageData.inputSourceMap) {
|
|
90
88
|
try {
|
|
91
89
|
if (initialCoverageData.path) {
|
|
92
|
-
const mapFilePath = path.resolve(initialCoverageData.path +
|
|
93
|
-
const pathString = fs.readFileSync(mapFilePath,
|
|
90
|
+
const mapFilePath = path.resolve(initialCoverageData.path + ".map");
|
|
91
|
+
const pathString = fs.readFileSync(mapFilePath, "utf-8");
|
|
94
92
|
initialCoverageData.inputSourceMap = JSON.parse(pathString);
|
|
95
93
|
}
|
|
96
94
|
}
|
|
@@ -101,14 +99,14 @@ function visitorProgramExit(api, programPath, config) {
|
|
|
101
99
|
// CI 环境下生成覆盖率文件
|
|
102
100
|
if (config.ci) {
|
|
103
101
|
// 这里要注意,就在当下生成,插桩路径可以改,但是工作目录不能改
|
|
104
|
-
const outputDir =
|
|
102
|
+
const outputDir = "./.canyon_output";
|
|
105
103
|
if (!fs.existsSync(outputDir)) {
|
|
106
104
|
fs.mkdirSync(outputDir, { recursive: true });
|
|
107
105
|
}
|
|
108
106
|
// 确保覆盖率数据有效
|
|
109
107
|
if (initialCoverageData?.path) {
|
|
110
108
|
// 使用 crypto.randomBytes 生成更安全的随机后缀(16 字节 = 32 个十六进制字符)
|
|
111
|
-
const randomSuffix = (0, node_crypto_1.randomBytes)(16).toString(
|
|
109
|
+
const randomSuffix = (0, node_crypto_1.randomBytes)(16).toString("hex");
|
|
112
110
|
const outputFilePath = `./.canyon_output/coverage-final-init-${randomSuffix}.json`;
|
|
113
111
|
// 添加 buildHash 和核心四字段到 .canyon_output 的产物中
|
|
114
112
|
// 根据架构设计,不再将 repoID、sha、provider 等业务信息直接插桩到代码产物中
|
|
@@ -127,111 +125,59 @@ function visitorProgramExit(api, programPath, config) {
|
|
|
127
125
|
const coverageDataObject = {
|
|
128
126
|
[initialCoverageData.path]: coverageDataWithMetadata,
|
|
129
127
|
};
|
|
130
|
-
fs.writeFileSync(outputFilePath, JSON.stringify(coverageDataObject, null, 2),
|
|
131
|
-
// 如果有 sourceMap,需要对 remap 后的覆盖率数据做 hash 处理
|
|
132
|
-
if (initialCoverageData.inputSourceMap && initialCoverageData.path) {
|
|
133
|
-
// 使用 Promise 处理异步 remap 操作,不阻塞主流程
|
|
134
|
-
(0, remap_coverage_1.remapCoverageByOld)({
|
|
135
|
-
[initialCoverageData.path]: initialCoverageData,
|
|
136
|
-
})
|
|
137
|
-
.then((remappedCoverage) => {
|
|
138
|
-
if (Object.keys(remappedCoverage).length > 0) {
|
|
139
|
-
const originCodePath = Object.keys(remappedCoverage)[0];
|
|
140
|
-
if (!originCodePath) {
|
|
141
|
-
return;
|
|
142
|
-
}
|
|
143
|
-
// 检测源码文件是否存在
|
|
144
|
-
if (fs.existsSync(originCodePath)) {
|
|
145
|
-
// @ts-expect-error
|
|
146
|
-
const remappedCoverageEntry = remappedCoverage[originCodePath];
|
|
147
|
-
if (!remappedCoverageEntry) {
|
|
148
|
-
return;
|
|
149
|
-
}
|
|
150
|
-
const originCodeContent = fs.readFileSync(originCodePath, 'utf-8');
|
|
151
|
-
// 对 remap 后的覆盖率数据做 hash 处理(只对语句维度)
|
|
152
|
-
try {
|
|
153
|
-
if (remappedCoverageEntry.statementMap &&
|
|
154
|
-
typeof remappedCoverageEntry.statementMap === 'object') {
|
|
155
|
-
(0, statement_map_hash_1.enrichStatementMapWithHash)(remappedCoverageEntry.statementMap, originCodeContent);
|
|
156
|
-
}
|
|
157
|
-
}
|
|
158
|
-
catch (_error) {
|
|
159
|
-
// 忽略提取失败,保持现有行为
|
|
160
|
-
}
|
|
161
|
-
// 计算源码文件的 contentHash
|
|
162
|
-
const remappedContentHash = (0, hash_1.computeHash)(originCodeContent);
|
|
163
|
-
try {
|
|
164
|
-
if (typeof remappedCoverageEntry === 'object') {
|
|
165
|
-
remappedCoverageEntry.contentHash = remappedContentHash;
|
|
166
|
-
}
|
|
167
|
-
}
|
|
168
|
-
catch (_error) {
|
|
169
|
-
// 忽略
|
|
170
|
-
}
|
|
171
|
-
// 写入 remap 后的覆盖率文件
|
|
172
|
-
const remapRandomSuffix = (0, node_crypto_1.randomBytes)(16).toString('hex');
|
|
173
|
-
const remapOutputFilePath = `./.canyon_output/cov-final-remap-${remapRandomSuffix}.json`;
|
|
174
|
-
fs.writeFileSync(remapOutputFilePath, JSON.stringify({
|
|
175
|
-
[originCodePath]: remappedCoverageEntry,
|
|
176
|
-
}, null, 2), 'utf-8');
|
|
177
|
-
}
|
|
178
|
-
}
|
|
179
|
-
})
|
|
180
|
-
.catch((_error) => {
|
|
181
|
-
console.log(_error);
|
|
182
|
-
// 忽略 remap 失败,保持现有行为
|
|
183
|
-
});
|
|
184
|
-
}
|
|
128
|
+
fs.writeFileSync(outputFilePath, JSON.stringify(coverageDataObject, null, 2), "utf-8");
|
|
185
129
|
}
|
|
186
130
|
}
|
|
187
131
|
// 处理代码中的 coverageData 变量
|
|
188
|
-
if (sourceCode.includes(
|
|
132
|
+
if (sourceCode.includes("coverageData")) {
|
|
189
133
|
// 使用 api 的 types,Babel 类型定义可能不完整,使用类型断言
|
|
190
134
|
const types = api.types;
|
|
191
135
|
programPath.traverse({
|
|
192
136
|
VariableDeclarator(variablePath) {
|
|
193
137
|
const { id, init } = variablePath.node;
|
|
194
138
|
// 检查是否是 coverageData 变量且初始化为对象表达式
|
|
195
|
-
if (types.isIdentifier(id, { name:
|
|
139
|
+
if (types.isIdentifier(id, { name: "coverageData" }) &&
|
|
196
140
|
init &&
|
|
197
141
|
types.isObjectExpression(init)) {
|
|
198
142
|
const objectExpression = init;
|
|
199
143
|
// 过滤掉 SpreadElement,只处理 ObjectProperty 和 ObjectMethod
|
|
200
|
-
const validProperties = objectExpression.properties.filter((property) => types.isObjectProperty(property) ||
|
|
201
|
-
types.isObjectMethod(property));
|
|
144
|
+
const validProperties = objectExpression.properties.filter((property) => types.isObjectProperty(property) || types.isObjectMethod(property));
|
|
202
145
|
const hasInstrumentation = validProperties.some((property) => types.isObjectProperty(property) &&
|
|
203
|
-
types.isIdentifier(property.key, { name:
|
|
146
|
+
types.isIdentifier(property.key, { name: "_coverageSchema" }));
|
|
204
147
|
if (hasInstrumentation) {
|
|
205
148
|
const objectProperties = objectExpression.properties;
|
|
206
149
|
// 注意:keepMap 属性不在配置接口中,这里保留原逻辑但添加注释说明
|
|
207
|
-
const shouldKeepMap =
|
|
150
|
+
const shouldKeepMap = config.keepMap; // 默认不保留 map
|
|
208
151
|
if (!shouldKeepMap) {
|
|
209
|
-
const keysToRemove = [
|
|
210
|
-
'statementMap',
|
|
211
|
-
'fnMap',
|
|
212
|
-
'branchMap',
|
|
213
|
-
'inputSourceMap',
|
|
214
|
-
];
|
|
152
|
+
const keysToRemove = ["statementMap", "fnMap", "branchMap", "inputSourceMap"];
|
|
215
153
|
keysToRemove.forEach((keyToRemove) => {
|
|
216
|
-
const propertyIndex = objectProperties.findIndex((property) => (types.isObjectProperty(property) ||
|
|
217
|
-
types.isObjectMethod(property)) &&
|
|
154
|
+
const propertyIndex = objectProperties.findIndex((property) => (types.isObjectProperty(property) || types.isObjectMethod(property)) &&
|
|
218
155
|
types.isObjectProperty(property) &&
|
|
219
156
|
types.isIdentifier(property.key, { name: keyToRemove }));
|
|
220
157
|
if (propertyIndex !== -1) {
|
|
221
158
|
objectProperties.splice(propertyIndex, 1);
|
|
222
159
|
}
|
|
223
160
|
});
|
|
224
|
-
// 添加 hasInputSourceMap 属性
|
|
225
|
-
const hasInputSourceMap = !!initialCoverageData?.inputSourceMap;
|
|
226
|
-
const hasInputSourceMapProperty = types.objectProperty(types.identifier('hasInputSourceMap'), types.booleanLiteral(hasInputSourceMap));
|
|
227
|
-
objectProperties.push(hasInputSourceMapProperty);
|
|
228
161
|
}
|
|
229
162
|
// 添加 buildHash 元数据属性
|
|
230
163
|
// 根据架构设计,不再将 repoID、sha、provider 等业务信息直接插桩到产物中
|
|
231
164
|
// 而是生成 buildHash,服务端通过 buildHash 查询对应的构建信息
|
|
232
165
|
const buildHash = (0, generate_build_hash_1.generateBuildHash)(config);
|
|
233
|
-
const buildHashProperty = types.objectProperty(types.identifier(
|
|
166
|
+
const buildHashProperty = types.objectProperty(types.identifier("buildHash"), types.stringLiteral(buildHash));
|
|
234
167
|
objectProperties.push(buildHashProperty);
|
|
168
|
+
const emptyStringMetadataKeys = [
|
|
169
|
+
"sha",
|
|
170
|
+
"instrumentCwd",
|
|
171
|
+
"dsn",
|
|
172
|
+
"reporter",
|
|
173
|
+
"branch",
|
|
174
|
+
"compareTarget",
|
|
175
|
+
"provider",
|
|
176
|
+
"repoID",
|
|
177
|
+
];
|
|
178
|
+
emptyStringMetadataKeys.forEach((key) => {
|
|
179
|
+
objectProperties.push(types.objectProperty(types.identifier(key), types.stringLiteral("")));
|
|
180
|
+
});
|
|
235
181
|
}
|
|
236
182
|
}
|
|
237
183
|
},
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"visitor-program-exit.js","sourceRoot":"","sources":["../src/visitor-program-exit.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,
|
|
1
|
+
{"version":3,"file":"visitor-program-exit.js","sourceRoot":"","sources":["../src/visitor-program-exit.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,31 +1,29 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@canyonjs/babel-plugin",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.6",
|
|
4
4
|
"description": "",
|
|
5
5
|
"keywords": [],
|
|
6
|
-
"
|
|
6
|
+
"license": "ISC",
|
|
7
|
+
"author": "",
|
|
7
8
|
"files": [
|
|
8
9
|
"dist"
|
|
9
10
|
],
|
|
10
|
-
"
|
|
11
|
-
"
|
|
11
|
+
"main": "dist/index.js",
|
|
12
|
+
"dependencies": {
|
|
13
|
+
"@babel/core": "^7.25.6",
|
|
14
|
+
"@babel/helper-plugin-utils": "^7.0.0",
|
|
15
|
+
"@babel/types": "^7.25.6",
|
|
16
|
+
"json-stable-stringify": "^1.3.0"
|
|
17
|
+
},
|
|
12
18
|
"devDependencies": {
|
|
13
19
|
"@babel/cli": "^7.24.1",
|
|
14
20
|
"@types/babel__core": "^7.20.5",
|
|
15
21
|
"@types/babel__generator": "^7.6.8",
|
|
16
22
|
"@types/babel__helper-plugin-utils": "^7.10.3",
|
|
17
23
|
"@types/node": "^24.10.1",
|
|
18
|
-
"@typescript/native-preview": "
|
|
24
|
+
"@typescript/native-preview": "7.0.0-dev.20260223.1",
|
|
19
25
|
"babel-plugin-istanbul": "latest"
|
|
20
26
|
},
|
|
21
|
-
"dependencies": {
|
|
22
|
-
"@babel/core": "^7.25.6",
|
|
23
|
-
"@babel/helper-plugin-utils": "^7.0.0",
|
|
24
|
-
"@babel/types": "^7.25.6",
|
|
25
|
-
"istanbul-lib-coverage": "^3.2.2",
|
|
26
|
-
"istanbul-lib-source-maps": "^4.0.1",
|
|
27
|
-
"json-stable-stringify": "^1.3.0"
|
|
28
|
-
},
|
|
29
27
|
"scripts": {
|
|
30
28
|
"build": "tsgo",
|
|
31
29
|
"release": "tsgo",
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"remap-coverage.d.ts","sourceRoot":"","sources":["../../src/helpers/remap-coverage.ts"],"names":[],"mappings":"AAIA,wBAAsB,aAAa,CAAC,GAAG,EAAE,GAAG,eAe3C;AAcD,wBAAsB,kBAAkB,CAAC,GAAG,EAAE,GAAG,eA2ChD"}
|
|
@@ -1,80 +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.remapCoverage = remapCoverage;
|
|
7
|
-
exports.remapCoverageByOld = remapCoverageByOld;
|
|
8
|
-
// @ts-nocheck // 这行注释会让 TS 忽略当前文件的所有类型检查报错
|
|
9
|
-
const istanbul_lib_coverage_1 = __importDefault(require("istanbul-lib-coverage"));
|
|
10
|
-
const istanbul_lib_source_maps_1 = __importDefault(require("istanbul-lib-source-maps"));
|
|
11
|
-
async function remapCoverage(obj) {
|
|
12
|
-
const res = await istanbul_lib_source_maps_1.default
|
|
13
|
-
.createSourceMapStore()
|
|
14
|
-
.transformCoverage(istanbul_lib_coverage_1.default.createCoverageMap(obj));
|
|
15
|
-
const { data: data_1 } = res;
|
|
16
|
-
const obj_1 = {};
|
|
17
|
-
Object.entries(data_1).forEach(([key, value], index) => {
|
|
18
|
-
// @ts-expect-error
|
|
19
|
-
const x = value['data'];
|
|
20
|
-
// @ts-expect-error
|
|
21
|
-
obj_1[x.path] = {
|
|
22
|
-
...x,
|
|
23
|
-
};
|
|
24
|
-
});
|
|
25
|
-
return obj_1;
|
|
26
|
-
}
|
|
27
|
-
function eee(newMap, oldMap) {
|
|
28
|
-
const o = {};
|
|
29
|
-
Object.entries(newMap).forEach(([key, value]) => {
|
|
30
|
-
o[key] = {
|
|
31
|
-
// @ts-expect-errorr
|
|
32
|
-
...value,
|
|
33
|
-
contentHash: oldMap[key]?.contentHash || '',
|
|
34
|
-
};
|
|
35
|
-
});
|
|
36
|
-
return o;
|
|
37
|
-
}
|
|
38
|
-
async function remapCoverageByOld(obj) {
|
|
39
|
-
const aaa = await Promise.all(Object.values(obj).map((item) => {
|
|
40
|
-
return remapCoverage({
|
|
41
|
-
// @ts-expect-errorr
|
|
42
|
-
[item.path]: item,
|
|
43
|
-
})
|
|
44
|
-
.then((res) => {
|
|
45
|
-
return Object.values(res);
|
|
46
|
-
})
|
|
47
|
-
.then((res) => {
|
|
48
|
-
return res[0];
|
|
49
|
-
})
|
|
50
|
-
.then((res) => {
|
|
51
|
-
const r = {
|
|
52
|
-
// @ts-expect-errorr
|
|
53
|
-
...res,
|
|
54
|
-
// @ts-expect-errorr
|
|
55
|
-
statementMap: eee(res.statementMap, item.statementMap),
|
|
56
|
-
// @ts-expect-errorr
|
|
57
|
-
fnMap: eee(res.fnMap, item.fnMap),
|
|
58
|
-
// @ts-expect-errorr
|
|
59
|
-
oldPath: item.path,
|
|
60
|
-
// @ts-expect-errorr
|
|
61
|
-
contentHash: item.contentHash,
|
|
62
|
-
};
|
|
63
|
-
return r;
|
|
64
|
-
})
|
|
65
|
-
.catch((err) => {
|
|
66
|
-
return {};
|
|
67
|
-
});
|
|
68
|
-
}));
|
|
69
|
-
const obj2 = {};
|
|
70
|
-
// @ts-expect-errorr
|
|
71
|
-
aaa.forEach((item) => {
|
|
72
|
-
// 过滤作用
|
|
73
|
-
if (item.path) {
|
|
74
|
-
// @ts-expect-errorr
|
|
75
|
-
obj2[item.path] = item;
|
|
76
|
-
}
|
|
77
|
-
});
|
|
78
|
-
return obj2;
|
|
79
|
-
}
|
|
80
|
-
//# sourceMappingURL=remap-coverage.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"remap-coverage.js","sourceRoot":"","sources":["../../src/helpers/remap-coverage.ts"],"names":[],"mappings":"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"}
|