@canyonjs/babel-plugin 1.0.1 → 1.0.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/dist/helpers/hash.d.ts +8 -0
- package/dist/helpers/hash.d.ts.map +1 -0
- package/dist/helpers/hash.js +14 -0
- package/dist/helpers/hash.js.map +1 -0
- package/dist/helpers/statement-map-hash.d.ts +31 -0
- package/dist/helpers/statement-map-hash.d.ts.map +1 -0
- package/dist/helpers/statement-map-hash.js +73 -0
- package/dist/helpers/statement-map-hash.js.map +1 -0
- package/dist/helpers/types.d.ts +13 -0
- package/dist/helpers/types.d.ts.map +1 -0
- package/dist/helpers/types.js +3 -0
- package/dist/helpers/types.js.map +1 -0
- package/dist/visitor-program-exit.d.ts.map +1 -1
- package/dist/visitor-program-exit.js +29 -0
- package/dist/visitor-program-exit.js.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hash.d.ts","sourceRoot":"","sources":["../../src/helpers/hash.ts"],"names":[],"mappings":"AAEA;;;;;GAKG;AACH,wBAAgB,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAEnD"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.computeHash = computeHash;
|
|
4
|
+
const node_crypto_1 = require("node:crypto");
|
|
5
|
+
/**
|
|
6
|
+
* 计算字符串的 SHA1 hash
|
|
7
|
+
*
|
|
8
|
+
* @param content - 要计算 hash 的内容
|
|
9
|
+
* @returns SHA1 hash 字符串
|
|
10
|
+
*/
|
|
11
|
+
function computeHash(content) {
|
|
12
|
+
return (0, node_crypto_1.createHash)('sha1').update(content).digest('hex');
|
|
13
|
+
}
|
|
14
|
+
//# sourceMappingURL=hash.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hash.js","sourceRoot":"","sources":["../../src/helpers/hash.ts"],"names":[],"mappings":";;;AAAA,6CAAyC;AAEzC;;;;;GAKG;AACH,qBAA4B,OAAe,EAAU;IACnD,OAAO,IAAA,wBAAU,EAAC,MAAM,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AAAA,CACzD"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Location 位置信息接口
|
|
3
|
+
*/
|
|
4
|
+
interface Location {
|
|
5
|
+
start: {
|
|
6
|
+
line: number;
|
|
7
|
+
column: number;
|
|
8
|
+
};
|
|
9
|
+
end: {
|
|
10
|
+
line: number;
|
|
11
|
+
column: number;
|
|
12
|
+
};
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* StatementMap 条目接口
|
|
16
|
+
*/
|
|
17
|
+
interface StatementMapEntry {
|
|
18
|
+
start: Location['start'];
|
|
19
|
+
end: Location['end'];
|
|
20
|
+
contentHash?: string;
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* 为 statementMap 中的每个条目添加 contentHash 字段
|
|
24
|
+
* 基于位置信息提取源码片段并计算 hash
|
|
25
|
+
*
|
|
26
|
+
* @param statementMap - StatementMap 对象
|
|
27
|
+
* @param sourceCode - 源代码内容
|
|
28
|
+
*/
|
|
29
|
+
export declare function enrichStatementMapWithHash(statementMap: Record<string, StatementMapEntry>, sourceCode: string): void;
|
|
30
|
+
export {};
|
|
31
|
+
//# sourceMappingURL=statement-map-hash.d.ts.map
|
|
@@ -0,0 +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,CA+BN"}
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.enrichStatementMapWithHash = enrichStatementMapWithHash;
|
|
4
|
+
const hash_1 = require("./hash");
|
|
5
|
+
/**
|
|
6
|
+
* 根据位置信息从源码中提取代码片段
|
|
7
|
+
*
|
|
8
|
+
* @param sourceCode - 源代码内容
|
|
9
|
+
* @param start - 起始位置
|
|
10
|
+
* @param end - 结束位置
|
|
11
|
+
* @returns 提取的代码片段
|
|
12
|
+
*/
|
|
13
|
+
function extractCodeSnippet(sourceCode, start, end) {
|
|
14
|
+
const lines = sourceCode.split('\n');
|
|
15
|
+
// 行号从 1 开始,数组索引从 0 开始
|
|
16
|
+
const startLineIndex = start.line - 1;
|
|
17
|
+
const endLineIndex = end.line - 1;
|
|
18
|
+
if (startLineIndex < 0 || endLineIndex >= lines.length) {
|
|
19
|
+
return '';
|
|
20
|
+
}
|
|
21
|
+
// 如果是同一行
|
|
22
|
+
if (startLineIndex === endLineIndex) {
|
|
23
|
+
const line = lines[startLineIndex];
|
|
24
|
+
if (!line) {
|
|
25
|
+
return '';
|
|
26
|
+
}
|
|
27
|
+
return line.slice(start.column, end.column);
|
|
28
|
+
}
|
|
29
|
+
// 跨多行的情况
|
|
30
|
+
const startLine = lines[startLineIndex];
|
|
31
|
+
const endLine = lines[endLineIndex];
|
|
32
|
+
if (!startLine || !endLine) {
|
|
33
|
+
return '';
|
|
34
|
+
}
|
|
35
|
+
const firstLinePart = startLine.slice(start.column);
|
|
36
|
+
const middleLines = lines.slice(startLineIndex + 1, endLineIndex);
|
|
37
|
+
const lastLinePart = endLine.slice(0, end.column);
|
|
38
|
+
return [firstLinePart, ...middleLines, lastLinePart].join('\n');
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* 为 statementMap 中的每个条目添加 contentHash 字段
|
|
42
|
+
* 基于位置信息提取源码片段并计算 hash
|
|
43
|
+
*
|
|
44
|
+
* @param statementMap - StatementMap 对象
|
|
45
|
+
* @param sourceCode - 源代码内容
|
|
46
|
+
*/
|
|
47
|
+
function enrichStatementMapWithHash(statementMap, sourceCode) {
|
|
48
|
+
if (!statementMap || typeof statementMap !== 'object') {
|
|
49
|
+
return;
|
|
50
|
+
}
|
|
51
|
+
Object.keys(statementMap).forEach((key) => {
|
|
52
|
+
const entry = statementMap[key];
|
|
53
|
+
if (entry &&
|
|
54
|
+
typeof entry === 'object' &&
|
|
55
|
+
entry.start &&
|
|
56
|
+
entry.end &&
|
|
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
|
+
try {
|
|
62
|
+
const codeSnippet = extractCodeSnippet(sourceCode, entry.start, entry.end);
|
|
63
|
+
if (codeSnippet) {
|
|
64
|
+
entry.contentHash = (0, hash_1.computeHash)(codeSnippet);
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
catch (_error) {
|
|
68
|
+
// 忽略提取失败,保持现有行为
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
});
|
|
72
|
+
}
|
|
73
|
+
//# sourceMappingURL=statement-map-hash.js.map
|
|
@@ -0,0 +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,CACpC,UAAU,EACV,KAAK,CAAC,KAAK,EACX,KAAK,CAAC,GAAG,CACV,CAAC;gBACF,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"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 覆盖率数据接口
|
|
3
|
+
*/
|
|
4
|
+
export interface CoverageData {
|
|
5
|
+
path?: string;
|
|
6
|
+
statementMap?: Record<string, unknown>;
|
|
7
|
+
fnMap?: Record<string, unknown>;
|
|
8
|
+
branchMap?: Record<string, unknown>;
|
|
9
|
+
inputSourceMap?: unknown;
|
|
10
|
+
contentHash?: string;
|
|
11
|
+
[key: string]: unknown;
|
|
12
|
+
}
|
|
13
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/helpers/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACvC,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAChC,SAAS,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACpC,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/helpers/types.ts"],"names":[],"mappings":""}
|
|
@@ -1 +1 @@
|
|
|
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;
|
|
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,CAsL1B"}
|
|
@@ -43,6 +43,8 @@ const path = __importStar(require("node:path"));
|
|
|
43
43
|
const generator_1 = __importDefault(require("@babel/generator"));
|
|
44
44
|
const generate_build_hash_1 = require("./helpers/generate-build-hash");
|
|
45
45
|
const generate_initial_coverage_1 = require("./helpers/generate-initial-coverage");
|
|
46
|
+
const hash_1 = require("./helpers/hash");
|
|
47
|
+
const statement_map_hash_1 = require("./helpers/statement-map-hash");
|
|
46
48
|
/**
|
|
47
49
|
* Program 节点退出时的访问器函数
|
|
48
50
|
* 用于处理覆盖率数据,添加元数据并生成初始覆盖率文件
|
|
@@ -55,6 +57,33 @@ const generate_initial_coverage_1 = require("./helpers/generate-initial-coverage
|
|
|
55
57
|
function visitorProgramExit(api, programPath, config) {
|
|
56
58
|
const sourceCode = (0, generator_1.default)(programPath.node).code;
|
|
57
59
|
const initialCoverageData = (0, generate_initial_coverage_1.generateInitialCoverage)(sourceCode, config);
|
|
60
|
+
// 获取原始源码(用于 hash 计算)
|
|
61
|
+
// 优先使用 hub.file.code,如果没有则使用生成的代码
|
|
62
|
+
const hub = programPath.hub;
|
|
63
|
+
const originalCode = hub?.file?.code ?? sourceCode;
|
|
64
|
+
// 这部分代码未经过大规模测试验证,谨防异常错误
|
|
65
|
+
// 基于 statementMap 的位置信息,提取源码片段并写入 contentHash 字段
|
|
66
|
+
try {
|
|
67
|
+
if (initialCoverageData &&
|
|
68
|
+
initialCoverageData.statementMap &&
|
|
69
|
+
typeof initialCoverageData.statementMap === 'object') {
|
|
70
|
+
(0, statement_map_hash_1.enrichStatementMapWithHash)(initialCoverageData.statementMap, originalCode);
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
catch (_error) {
|
|
74
|
+
// 忽略提取失败,保持现有行为
|
|
75
|
+
}
|
|
76
|
+
// 基于文件内容计算 contentHash,并写入内存对象
|
|
77
|
+
try {
|
|
78
|
+
if (initialCoverageData &&
|
|
79
|
+
typeof initialCoverageData === 'object') {
|
|
80
|
+
const contentHash = (0, hash_1.computeHash)(originalCode);
|
|
81
|
+
initialCoverageData.contentHash = contentHash;
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
catch (_error) {
|
|
85
|
+
// 忽略
|
|
86
|
+
}
|
|
58
87
|
// 尝试读取 source map 文件(如果 inputSourceMap 不存在)
|
|
59
88
|
if (initialCoverageData && !initialCoverageData.inputSourceMap) {
|
|
60
89
|
try {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"visitor-program-exit.js","sourceRoot":"","sources":["../src/visitor-program-exit.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,6CAA0C;AAC1C,MAAY,EAAE,oCAAgB;AAC9B,MAAY,IAAI,sCAAkB;AAElC,iEAAwC;AACxC,uEAAkE;AAClE,mFAA8E;
|
|
1
|
+
{"version":3,"file":"visitor-program-exit.js","sourceRoot":"","sources":["../src/visitor-program-exit.ts"],"names":[],"mappings":"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"}
|