@dommaker/harness 0.7.3 → 0.7.4
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 +239 -2
- package/dist/architecture/constraint-engine.d.ts +49 -0
- package/dist/architecture/constraint-engine.d.ts.map +1 -0
- package/dist/architecture/constraint-engine.js +207 -0
- package/dist/architecture/constraint-engine.js.map +1 -0
- package/dist/architecture/cross-project-checker.d.ts +34 -0
- package/dist/architecture/cross-project-checker.d.ts.map +1 -0
- package/dist/architecture/cross-project-checker.js +260 -0
- package/dist/architecture/cross-project-checker.js.map +1 -0
- package/dist/context/progressive-loader.d.ts +110 -0
- package/dist/context/progressive-loader.d.ts.map +1 -0
- package/dist/context/progressive-loader.js +183 -0
- package/dist/context/progressive-loader.js.map +1 -0
- package/dist/context/token-budget.d.ts +144 -0
- package/dist/context/token-budget.d.ts.map +1 -0
- package/dist/context/token-budget.js +264 -0
- package/dist/context/token-budget.js.map +1 -0
- package/dist/core/constraints/definitions.d.ts.map +1 -1
- package/dist/core/constraints/definitions.js +33 -0
- package/dist/core/constraints/definitions.js.map +1 -1
- package/dist/core/index.d.ts +2 -0
- package/dist/core/index.d.ts.map +1 -1
- package/dist/core/index.js +4 -0
- package/dist/core/index.js.map +1 -1
- package/dist/failure/classifier.d.ts +63 -0
- package/dist/failure/classifier.d.ts.map +1 -0
- package/dist/failure/classifier.js +123 -0
- package/dist/failure/classifier.js.map +1 -0
- package/dist/failure/index.d.ts +10 -0
- package/dist/failure/index.d.ts.map +1 -0
- package/dist/failure/index.js +36 -0
- package/dist/failure/index.js.map +1 -0
- package/dist/failure/recorder.d.ts +78 -0
- package/dist/failure/recorder.d.ts.map +1 -0
- package/dist/failure/recorder.js +193 -0
- package/dist/failure/recorder.js.map +1 -0
- package/dist/failure/types.d.ts +89 -0
- package/dist/failure/types.d.ts.map +1 -0
- package/dist/failure/types.js +121 -0
- package/dist/failure/types.js.map +1 -0
- package/dist/gates/acceptance.d.ts +159 -0
- package/dist/gates/acceptance.d.ts.map +1 -0
- package/dist/gates/acceptance.js +368 -0
- package/dist/gates/acceptance.js.map +1 -0
- package/dist/gates/index.d.ts +5 -2
- package/dist/gates/index.d.ts.map +1 -1
- package/dist/gates/index.js +8 -1
- package/dist/gates/index.js.map +1 -1
- package/dist/gates/types.d.ts +33 -0
- package/dist/gates/types.d.ts.map +1 -1
- package/dist/index.d.ts +6 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +18 -5
- package/dist/index.js.map +1 -1
- package/dist/monitoring/index.d.ts +6 -0
- package/dist/monitoring/index.d.ts.map +1 -1
- package/dist/monitoring/index.js +6 -0
- package/dist/monitoring/index.js.map +1 -1
- package/dist/monitoring/performance-analyzer.d.ts +104 -0
- package/dist/monitoring/performance-analyzer.d.ts.map +1 -0
- package/dist/monitoring/performance-analyzer.js +417 -0
- package/dist/monitoring/performance-analyzer.js.map +1 -0
- package/dist/monitoring/performance-collector.d.ts +111 -0
- package/dist/monitoring/performance-collector.d.ts.map +1 -0
- package/dist/monitoring/performance-collector.js +319 -0
- package/dist/monitoring/performance-collector.js.map +1 -0
- package/dist/monitoring/trace-analyzer.js +1 -1
- package/dist/monitoring/trace-analyzer.js.map +1 -1
- package/dist/monitoring/traces.js +1 -1
- package/dist/monitoring/traces.js.map +1 -1
- package/dist/presets/index.d.ts +0 -1
- package/dist/presets/index.d.ts.map +1 -1
- package/dist/presets/index.js +1 -6
- package/dist/presets/index.js.map +1 -1
- package/dist/spec/annotation-checker.d.ts +47 -0
- package/dist/spec/annotation-checker.d.ts.map +1 -0
- package/dist/spec/annotation-checker.js +299 -0
- package/dist/spec/annotation-checker.js.map +1 -0
- package/dist/types/index.d.ts +2 -0
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/index.js +9 -0
- package/dist/types/index.js.map +1 -1
- package/dist/types/performance.d.ts +204 -0
- package/dist/types/performance.d.ts.map +1 -0
- package/dist/types/performance.js +12 -0
- package/dist/types/performance.js.map +1 -0
- package/package.json +3 -1
- package/dist/extensions/long-running/constraints.d.ts +0 -38
- package/dist/extensions/long-running/constraints.d.ts.map +0 -1
- package/dist/extensions/long-running/constraints.js +0 -153
- package/dist/extensions/long-running/constraints.js.map +0 -1
- package/dist/extensions/long-running/index.d.ts +0 -30
- package/dist/extensions/long-running/index.d.ts.map +0 -1
- package/dist/extensions/long-running/index.js +0 -50
- package/dist/extensions/long-running/index.js.map +0 -1
- package/dist/extensions/long-running/types.d.ts +0 -154
- package/dist/extensions/long-running/types.d.ts.map +0 -1
- package/dist/extensions/long-running/types.js +0 -9
- package/dist/extensions/long-running/types.js.map +0 -1
- package/dist/presets/long-running.d.ts +0 -33
- package/dist/presets/long-running.d.ts.map +0 -1
- package/dist/presets/long-running.js +0 -52
- package/dist/presets/long-running.js.map +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/failure/types.ts"],"names":[],"mappings":";AAAA;;;;;GAKG;;;AAEH;;GAEG;AACH,IAAY,SAWX;AAXD,WAAY,SAAS;IACnB,wCAA2B,CAAA;IAC3B,wCAA2B,CAAA;IAC3B,sDAAyC,CAAA;IACzC,kDAAqC,CAAA;IACrC,gCAAmB,CAAA;IACnB,4CAA+B,CAAA;IAC/B,wCAA2B,CAAA;IAC3B,sCAAyB,CAAA;IACzB,kDAAqC,CAAA;IACrC,gCAAmB,CAAA;AACrB,CAAC,EAXW,SAAS,yBAAT,SAAS,QAWpB;AAED;;;;;;;GAOG;AACH,IAAY,YAKX;AALD,WAAY,YAAY;IACtB,yBAAS,CAAA;IACT,yBAAS,CAAA;IACT,yBAAS,CAAA;IACT,yBAAS,CAAA;AACX,CAAC,EALW,YAAY,4BAAZ,YAAY,QAKvB;AAgDD;;;;GAIG;AACU,QAAA,4BAA4B,GAA8B;IACrE,WAAW;IACX;QACE,IAAI,EAAE,SAAS,CAAC,WAAW;QAC3B,QAAQ,EAAE,CAAC,MAAM,EAAE,YAAY,EAAE,YAAY,CAAC;QAC9C,KAAK,EAAE,YAAY,CAAC,EAAE;QACtB,WAAW,EAAE,QAAQ;KACtB;IACD;QACE,IAAI,EAAE,SAAS,CAAC,kBAAkB;QAClC,QAAQ,EAAE,CAAC,YAAY,EAAE,SAAS,EAAE,iBAAiB,CAAC;QACtD,KAAK,EAAE,YAAY,CAAC,EAAE;QACtB,WAAW,EAAE,MAAM;KACpB;IACD;QACE,IAAI,EAAE,SAAS,CAAC,gBAAgB;QAChC,QAAQ,EAAE,CAAC,kBAAkB,EAAE,aAAa,EAAE,gBAAgB,CAAC;QAC/D,KAAK,EAAE,YAAY,CAAC,EAAE;QACtB,WAAW,EAAE,OAAO;KACrB;IACD;QACE,IAAI,EAAE,SAAS,CAAC,OAAO;QACvB,QAAQ,EAAE,CAAC,SAAS,EAAE,WAAW,EAAE,UAAU,CAAC;QAC9C,QAAQ,EAAE,CAAC,UAAU,EAAE,eAAe,CAAC;QACvC,KAAK,EAAE,YAAY,CAAC,EAAE;QACtB,WAAW,EAAE,IAAI;KAClB;IACD;QACE,IAAI,EAAE,SAAS,CAAC,aAAa;QAC7B,QAAQ,EAAE,CAAC,SAAS,EAAE,YAAY,EAAE,cAAc,EAAE,WAAW,EAAE,QAAQ,CAAC;QAC1E,KAAK,EAAE,YAAY,CAAC,EAAE;QACtB,WAAW,EAAE,MAAM;KACpB;IACD;QACE,IAAI,EAAE,SAAS,CAAC,WAAW;QAC3B,QAAQ,EAAE,CAAC,aAAa,EAAE,aAAa,EAAE,YAAY,EAAE,gBAAgB,CAAC;QACxE,KAAK,EAAE,YAAY,CAAC,EAAE;QACtB,WAAW,EAAE,UAAU;KACxB;IACD;QACE,IAAI,EAAE,SAAS,CAAC,UAAU;QAC1B,QAAQ,EAAE,CAAC,YAAY,EAAE,aAAa,EAAE,gBAAgB,CAAC;QACzD,KAAK,EAAE,YAAY,CAAC,EAAE;QACtB,WAAW,EAAE,MAAM;KACpB;IACD;QACE,IAAI,EAAE,SAAS,CAAC,gBAAgB;QAChC,QAAQ,EAAE,CAAC,kBAAkB,EAAE,SAAS,EAAE,cAAc,CAAC;QACzD,KAAK,EAAE,YAAY,CAAC,EAAE;QACtB,WAAW,EAAE,MAAM;KACpB;IACD,WAAW;IACX;QACE,IAAI,EAAE,SAAS,CAAC,WAAW;QAC3B,QAAQ,EAAE,CAAC,MAAM,EAAE,WAAW,EAAE,QAAQ,CAAC;QACzC,QAAQ,EAAE,CAAC,aAAa,EAAE,YAAY,EAAE,eAAe,CAAC;QACxD,KAAK,EAAE,YAAY,CAAC,EAAE;QACtB,WAAW,EAAE,MAAM;KACpB;CACF,CAAC;AAEF;;GAEG;AACU,QAAA,qBAAqB,GAAoC;IACpE,CAAC,SAAS,CAAC,WAAW,CAAC,EAAE,YAAY,CAAC,EAAE;IACxC,CAAC,SAAS,CAAC,WAAW,CAAC,EAAE,YAAY,CAAC,EAAE;IACxC,CAAC,SAAS,CAAC,kBAAkB,CAAC,EAAE,YAAY,CAAC,EAAE;IAC/C,CAAC,SAAS,CAAC,gBAAgB,CAAC,EAAE,YAAY,CAAC,EAAE;IAC7C,CAAC,SAAS,CAAC,OAAO,CAAC,EAAE,YAAY,CAAC,EAAE;IACpC,CAAC,SAAS,CAAC,aAAa,CAAC,EAAE,YAAY,CAAC,EAAE;IAC1C,CAAC,SAAS,CAAC,WAAW,CAAC,EAAE,YAAY,CAAC,EAAE;IACxC,CAAC,SAAS,CAAC,UAAU,CAAC,EAAE,YAAY,CAAC,EAAE;IACvC,CAAC,SAAS,CAAC,gBAAgB,CAAC,EAAE,YAAY,CAAC,EAAE;IAC7C,CAAC,SAAS,CAAC,OAAO,CAAC,EAAE,YAAY,CAAC,EAAE;CACrC,CAAC"}
|
|
@@ -0,0 +1,159 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 验收标准门禁
|
|
3
|
+
*
|
|
4
|
+
* 功能:
|
|
5
|
+
* 1. 验证任务是否满足验收标准
|
|
6
|
+
* 2. 解析 tasks.yml 中的验收条件
|
|
7
|
+
* 3. 检查所有验收条件是否满足
|
|
8
|
+
* 4. 运行关联的 E2E 测试
|
|
9
|
+
*
|
|
10
|
+
* 使用示例:
|
|
11
|
+
* ```typescript
|
|
12
|
+
* const gate = new SpecAcceptanceGate();
|
|
13
|
+
* const result = await gate.check({
|
|
14
|
+
* projectPath: '/path/to/project',
|
|
15
|
+
* taskId: 'TASK-001',
|
|
16
|
+
* });
|
|
17
|
+
* ```
|
|
18
|
+
*/
|
|
19
|
+
/**
|
|
20
|
+
* 验收标准门禁配置
|
|
21
|
+
*/
|
|
22
|
+
export interface SpecAcceptanceGateConfig {
|
|
23
|
+
/** tasks.yml 路径 */
|
|
24
|
+
tasksPath?: string;
|
|
25
|
+
/** 是否检查所有任务 */
|
|
26
|
+
checkAllTasks?: boolean;
|
|
27
|
+
/** 自定义验收条件 */
|
|
28
|
+
customAcceptanceCriteria?: Record<string, (task: any) => Promise<boolean>>;
|
|
29
|
+
/** E2E 测试命令模板 */
|
|
30
|
+
e2eTestCommand?: string;
|
|
31
|
+
/** E2E 测试超时时间(毫秒) */
|
|
32
|
+
e2eTestTimeout?: number;
|
|
33
|
+
/** 项目路径 */
|
|
34
|
+
projectPath?: string;
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* 验收标准门禁上下文
|
|
38
|
+
*/
|
|
39
|
+
export interface AcceptanceGateContext {
|
|
40
|
+
/** 项目路径 */
|
|
41
|
+
projectPath: string;
|
|
42
|
+
/** 任务 ID */
|
|
43
|
+
taskId?: string;
|
|
44
|
+
/** tasks.yml 路径 */
|
|
45
|
+
tasksPath?: string;
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* 验收标准(旧格式,向后兼容)
|
|
49
|
+
*/
|
|
50
|
+
export interface AcceptanceCriteria {
|
|
51
|
+
id: string;
|
|
52
|
+
description: string;
|
|
53
|
+
type: 'manual' | 'automated' | 'test';
|
|
54
|
+
required: boolean;
|
|
55
|
+
checked?: boolean;
|
|
56
|
+
notes?: string;
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* 验收条件(新格式,支持 E2E 测试关联)
|
|
60
|
+
*/
|
|
61
|
+
export interface AcceptanceCondition {
|
|
62
|
+
description: string;
|
|
63
|
+
e2e_test?: string;
|
|
64
|
+
test_name?: string;
|
|
65
|
+
checked?: boolean;
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* 任务定义
|
|
69
|
+
*/
|
|
70
|
+
export interface TaskDefinition {
|
|
71
|
+
id: string;
|
|
72
|
+
title?: string;
|
|
73
|
+
name?: string;
|
|
74
|
+
description?: string;
|
|
75
|
+
/** 旧格式 */
|
|
76
|
+
acceptance_criteria?: AcceptanceCriteria[];
|
|
77
|
+
/** 新格式(支持 E2E 测试) */
|
|
78
|
+
acceptance?: AcceptanceCondition[];
|
|
79
|
+
status?: string;
|
|
80
|
+
completed?: boolean;
|
|
81
|
+
}
|
|
82
|
+
/**
|
|
83
|
+
* Tasks 文件结构
|
|
84
|
+
*/
|
|
85
|
+
export interface TasksFile {
|
|
86
|
+
tasks: TaskDefinition[];
|
|
87
|
+
version?: string;
|
|
88
|
+
}
|
|
89
|
+
/**
|
|
90
|
+
* 验收门禁结果
|
|
91
|
+
*/
|
|
92
|
+
export interface AcceptanceGateResult {
|
|
93
|
+
passed: boolean;
|
|
94
|
+
message: string;
|
|
95
|
+
timestamp: string;
|
|
96
|
+
details?: {
|
|
97
|
+
taskId?: string;
|
|
98
|
+
totalCriteria: number;
|
|
99
|
+
checkedCriteria: number;
|
|
100
|
+
uncheckedCriteria: string[];
|
|
101
|
+
missingCriteria: string[];
|
|
102
|
+
e2eTestResults?: E2ETestResult[];
|
|
103
|
+
};
|
|
104
|
+
}
|
|
105
|
+
/**
|
|
106
|
+
* E2E 测试结果
|
|
107
|
+
*/
|
|
108
|
+
export interface E2ETestResult {
|
|
109
|
+
criteria: string;
|
|
110
|
+
testFile: string;
|
|
111
|
+
testName?: string;
|
|
112
|
+
passed: boolean;
|
|
113
|
+
output?: string;
|
|
114
|
+
error?: string;
|
|
115
|
+
}
|
|
116
|
+
/**
|
|
117
|
+
* 验收标准门禁
|
|
118
|
+
*/
|
|
119
|
+
export declare class SpecAcceptanceGate {
|
|
120
|
+
private config;
|
|
121
|
+
constructor(config?: Partial<SpecAcceptanceGateConfig>);
|
|
122
|
+
/**
|
|
123
|
+
* 检查验收标准
|
|
124
|
+
*/
|
|
125
|
+
check(context: AcceptanceGateContext): Promise<AcceptanceGateResult>;
|
|
126
|
+
/**
|
|
127
|
+
* 加载 tasks.yml
|
|
128
|
+
*/
|
|
129
|
+
private loadTasks;
|
|
130
|
+
/**
|
|
131
|
+
* 检查单个任务
|
|
132
|
+
*/
|
|
133
|
+
private checkSingleTask;
|
|
134
|
+
/**
|
|
135
|
+
* 检查所有任务
|
|
136
|
+
*/
|
|
137
|
+
private checkAllTasks;
|
|
138
|
+
/**
|
|
139
|
+
* 检查已完成的任务
|
|
140
|
+
*/
|
|
141
|
+
private checkCompletedTasks;
|
|
142
|
+
/**
|
|
143
|
+
* 验证任务
|
|
144
|
+
*/
|
|
145
|
+
private validateTask;
|
|
146
|
+
/**
|
|
147
|
+
* 运行 E2E 测试
|
|
148
|
+
*/
|
|
149
|
+
private runE2ETest;
|
|
150
|
+
/**
|
|
151
|
+
* 解析测试输出判断是否通过
|
|
152
|
+
*/
|
|
153
|
+
private parseTestOutput;
|
|
154
|
+
}
|
|
155
|
+
/**
|
|
156
|
+
* 创建验收标准门禁(便捷函数)
|
|
157
|
+
*/
|
|
158
|
+
export declare function createSpecAcceptanceGate(config?: Partial<SpecAcceptanceGateConfig>): SpecAcceptanceGate;
|
|
159
|
+
//# sourceMappingURL=acceptance.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"acceptance.d.ts","sourceRoot":"","sources":["../../src/gates/acceptance.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAYH;;GAEG;AACH,MAAM,WAAW,wBAAwB;IACvC,mBAAmB;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,eAAe;IACf,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,cAAc;IACd,wBAAwB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,GAAG,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC;IAC3E,iBAAiB;IACjB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,qBAAqB;IACrB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,WAAW;IACX,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED;;GAEG;AACH,MAAM,WAAW,qBAAqB;IACpC,WAAW;IACX,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY;IACZ,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,mBAAmB;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,EAAE,EAAE,MAAM,CAAC;IACX,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,QAAQ,GAAG,WAAW,GAAG,MAAM,CAAC;IACtC,QAAQ,EAAE,OAAO,CAAC;IAClB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU;IACV,mBAAmB,CAAC,EAAE,kBAAkB,EAAE,CAAC;IAC3C,qBAAqB;IACrB,UAAU,CAAC,EAAE,mBAAmB,EAAE,CAAC;IACnC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;AAED;;GAEG;AACH,MAAM,WAAW,SAAS;IACxB,KAAK,EAAE,cAAc,EAAE,CAAC;IACxB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACnC,MAAM,EAAE,OAAO,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE;QACR,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,aAAa,EAAE,MAAM,CAAC;QACtB,eAAe,EAAE,MAAM,CAAC;QACxB,iBAAiB,EAAE,MAAM,EAAE,CAAC;QAC5B,eAAe,EAAE,MAAM,EAAE,CAAC;QAC1B,cAAc,CAAC,EAAE,aAAa,EAAE,CAAC;KAClC,CAAC;CACH;AAED;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,OAAO,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAID;;GAEG;AACH,qBAAa,kBAAkB;IAC7B,OAAO,CAAC,MAAM,CAA2B;gBAE7B,MAAM,CAAC,EAAE,OAAO,CAAC,wBAAwB,CAAC;IAUtD;;OAEG;IACG,KAAK,CAAC,OAAO,EAAE,qBAAqB,GAAG,OAAO,CAAC,oBAAoB,CAAC;IAoC1E;;OAEG;YACW,SAAS;IAYvB;;OAEG;YACW,eAAe;IAkB7B;;OAEG;YACW,aAAa;IAuC3B;;OAEG;YACW,mBAAmB;IA0CjC;;OAEG;YACW,YAAY;IAiG1B;;OAEG;YACW,UAAU;IA4CxB;;OAEG;IACH,OAAO,CAAC,eAAe;CAuBxB;AAED;;GAEG;AACH,wBAAgB,wBAAwB,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC,wBAAwB,CAAC,GAAG,kBAAkB,CAEvG"}
|
|
@@ -0,0 +1,368 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* 验收标准门禁
|
|
4
|
+
*
|
|
5
|
+
* 功能:
|
|
6
|
+
* 1. 验证任务是否满足验收标准
|
|
7
|
+
* 2. 解析 tasks.yml 中的验收条件
|
|
8
|
+
* 3. 检查所有验收条件是否满足
|
|
9
|
+
* 4. 运行关联的 E2E 测试
|
|
10
|
+
*
|
|
11
|
+
* 使用示例:
|
|
12
|
+
* ```typescript
|
|
13
|
+
* const gate = new SpecAcceptanceGate();
|
|
14
|
+
* const result = await gate.check({
|
|
15
|
+
* projectPath: '/path/to/project',
|
|
16
|
+
* taskId: 'TASK-001',
|
|
17
|
+
* });
|
|
18
|
+
* ```
|
|
19
|
+
*/
|
|
20
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
21
|
+
if (k2 === undefined) k2 = k;
|
|
22
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
23
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
24
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
25
|
+
}
|
|
26
|
+
Object.defineProperty(o, k2, desc);
|
|
27
|
+
}) : (function(o, m, k, k2) {
|
|
28
|
+
if (k2 === undefined) k2 = k;
|
|
29
|
+
o[k2] = m[k];
|
|
30
|
+
}));
|
|
31
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
32
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
33
|
+
}) : function(o, v) {
|
|
34
|
+
o["default"] = v;
|
|
35
|
+
});
|
|
36
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
37
|
+
var ownKeys = function(o) {
|
|
38
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
39
|
+
var ar = [];
|
|
40
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
41
|
+
return ar;
|
|
42
|
+
};
|
|
43
|
+
return ownKeys(o);
|
|
44
|
+
};
|
|
45
|
+
return function (mod) {
|
|
46
|
+
if (mod && mod.__esModule) return mod;
|
|
47
|
+
var result = {};
|
|
48
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
49
|
+
__setModuleDefault(result, mod);
|
|
50
|
+
return result;
|
|
51
|
+
};
|
|
52
|
+
})();
|
|
53
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
54
|
+
exports.SpecAcceptanceGate = void 0;
|
|
55
|
+
exports.createSpecAcceptanceGate = createSpecAcceptanceGate;
|
|
56
|
+
const fs = __importStar(require("fs/promises"));
|
|
57
|
+
const path = __importStar(require("path"));
|
|
58
|
+
const yaml = __importStar(require("js-yaml"));
|
|
59
|
+
const child_process_1 = require("child_process");
|
|
60
|
+
const util_1 = require("util");
|
|
61
|
+
const execAsync = (0, util_1.promisify)(child_process_1.exec);
|
|
62
|
+
// ==================== SpecAcceptanceGate 类 ====================
|
|
63
|
+
/**
|
|
64
|
+
* 验收标准门禁
|
|
65
|
+
*/
|
|
66
|
+
class SpecAcceptanceGate {
|
|
67
|
+
config;
|
|
68
|
+
constructor(config) {
|
|
69
|
+
this.config = {
|
|
70
|
+
tasksPath: './tasks.yml',
|
|
71
|
+
checkAllTasks: false,
|
|
72
|
+
e2eTestCommand: 'npx playwright test',
|
|
73
|
+
e2eTestTimeout: 120000,
|
|
74
|
+
...config,
|
|
75
|
+
};
|
|
76
|
+
}
|
|
77
|
+
/**
|
|
78
|
+
* 检查验收标准
|
|
79
|
+
*/
|
|
80
|
+
async check(context) {
|
|
81
|
+
try {
|
|
82
|
+
// 确定 tasks.yml 路径
|
|
83
|
+
const tasksPath = context.tasksPath ??
|
|
84
|
+
this.config.tasksPath ??
|
|
85
|
+
path.join(context.projectPath, 'tasks.yml');
|
|
86
|
+
// 加载 tasks 文件
|
|
87
|
+
const tasks = await this.loadTasks(tasksPath);
|
|
88
|
+
if (!tasks || !tasks.tasks || tasks.tasks.length === 0) {
|
|
89
|
+
return {
|
|
90
|
+
passed: true,
|
|
91
|
+
message: 'No tasks.yml found or no tasks defined, skipping',
|
|
92
|
+
timestamp: new Date().toISOString(),
|
|
93
|
+
};
|
|
94
|
+
}
|
|
95
|
+
// 检查特定任务或所有任务
|
|
96
|
+
if (context.taskId) {
|
|
97
|
+
return this.checkSingleTask(tasks, context.taskId, context.projectPath);
|
|
98
|
+
}
|
|
99
|
+
else if (this.config.checkAllTasks) {
|
|
100
|
+
return this.checkAllTasks(tasks, context.projectPath);
|
|
101
|
+
}
|
|
102
|
+
else {
|
|
103
|
+
// 默认只检查已完成任务
|
|
104
|
+
return this.checkCompletedTasks(tasks, context.projectPath);
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
catch (error) {
|
|
108
|
+
return {
|
|
109
|
+
passed: false,
|
|
110
|
+
message: `Acceptance gate error: ${error.message}`,
|
|
111
|
+
timestamp: new Date().toISOString(),
|
|
112
|
+
};
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
/**
|
|
116
|
+
* 加载 tasks.yml
|
|
117
|
+
*/
|
|
118
|
+
async loadTasks(tasksPath) {
|
|
119
|
+
try {
|
|
120
|
+
const content = await fs.readFile(tasksPath, 'utf-8');
|
|
121
|
+
return yaml.load(content);
|
|
122
|
+
}
|
|
123
|
+
catch (error) {
|
|
124
|
+
if (error.code === 'ENOENT') {
|
|
125
|
+
return null;
|
|
126
|
+
}
|
|
127
|
+
throw error;
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
/**
|
|
131
|
+
* 检查单个任务
|
|
132
|
+
*/
|
|
133
|
+
async checkSingleTask(tasks, taskId, projectPath) {
|
|
134
|
+
const task = tasks.tasks.find(t => t.id === taskId);
|
|
135
|
+
if (!task) {
|
|
136
|
+
return {
|
|
137
|
+
passed: false,
|
|
138
|
+
message: `Task not found: ${taskId}`,
|
|
139
|
+
timestamp: new Date().toISOString(),
|
|
140
|
+
};
|
|
141
|
+
}
|
|
142
|
+
return this.validateTask(task, projectPath);
|
|
143
|
+
}
|
|
144
|
+
/**
|
|
145
|
+
* 检查所有任务
|
|
146
|
+
*/
|
|
147
|
+
async checkAllTasks(tasks, projectPath) {
|
|
148
|
+
const results = [];
|
|
149
|
+
for (const task of tasks.tasks) {
|
|
150
|
+
results.push(await this.validateTask(task, projectPath));
|
|
151
|
+
}
|
|
152
|
+
const failedTasks = results.filter(r => !r.passed);
|
|
153
|
+
if (failedTasks.length === 0) {
|
|
154
|
+
return {
|
|
155
|
+
passed: true,
|
|
156
|
+
message: 'All tasks pass acceptance criteria',
|
|
157
|
+
timestamp: new Date().toISOString(),
|
|
158
|
+
details: {
|
|
159
|
+
totalCriteria: results.length,
|
|
160
|
+
checkedCriteria: results.length,
|
|
161
|
+
uncheckedCriteria: [],
|
|
162
|
+
missingCriteria: [],
|
|
163
|
+
},
|
|
164
|
+
};
|
|
165
|
+
}
|
|
166
|
+
return {
|
|
167
|
+
passed: false,
|
|
168
|
+
message: `${failedTasks.length} task(s) fail acceptance criteria`,
|
|
169
|
+
timestamp: new Date().toISOString(),
|
|
170
|
+
details: {
|
|
171
|
+
totalCriteria: results.length,
|
|
172
|
+
checkedCriteria: results.length - failedTasks.length,
|
|
173
|
+
uncheckedCriteria: failedTasks.map(r => r.message),
|
|
174
|
+
missingCriteria: [],
|
|
175
|
+
},
|
|
176
|
+
};
|
|
177
|
+
}
|
|
178
|
+
/**
|
|
179
|
+
* 检查已完成的任务
|
|
180
|
+
*/
|
|
181
|
+
async checkCompletedTasks(tasks, projectPath) {
|
|
182
|
+
const completedTasks = tasks.tasks.filter(t => t.completed || t.status === 'done');
|
|
183
|
+
if (completedTasks.length === 0) {
|
|
184
|
+
return {
|
|
185
|
+
passed: true,
|
|
186
|
+
message: 'No completed tasks to check',
|
|
187
|
+
timestamp: new Date().toISOString(),
|
|
188
|
+
};
|
|
189
|
+
}
|
|
190
|
+
const results = [];
|
|
191
|
+
for (const task of completedTasks) {
|
|
192
|
+
results.push(await this.validateTask(task, projectPath));
|
|
193
|
+
}
|
|
194
|
+
const failedTasks = results.filter(r => !r.passed);
|
|
195
|
+
if (failedTasks.length === 0) {
|
|
196
|
+
return {
|
|
197
|
+
passed: true,
|
|
198
|
+
message: 'All completed tasks pass acceptance criteria',
|
|
199
|
+
timestamp: new Date().toISOString(),
|
|
200
|
+
};
|
|
201
|
+
}
|
|
202
|
+
return {
|
|
203
|
+
passed: false,
|
|
204
|
+
message: `${failedTasks.length} completed task(s) fail acceptance criteria`,
|
|
205
|
+
timestamp: new Date().toISOString(),
|
|
206
|
+
details: {
|
|
207
|
+
totalCriteria: results.length,
|
|
208
|
+
checkedCriteria: results.length - failedTasks.length,
|
|
209
|
+
uncheckedCriteria: failedTasks.map(r => r.message),
|
|
210
|
+
missingCriteria: [],
|
|
211
|
+
},
|
|
212
|
+
};
|
|
213
|
+
}
|
|
214
|
+
/**
|
|
215
|
+
* 验证任务
|
|
216
|
+
*/
|
|
217
|
+
async validateTask(task, projectPath) {
|
|
218
|
+
const e2eResults = [];
|
|
219
|
+
// 优先使用新格式 acceptance
|
|
220
|
+
if (task.acceptance && task.acceptance.length > 0) {
|
|
221
|
+
for (const criteria of task.acceptance) {
|
|
222
|
+
// 如果有关联的 E2E 测试,运行它
|
|
223
|
+
if (criteria.e2e_test && !criteria.checked) {
|
|
224
|
+
const result = await this.runE2ETest(projectPath, criteria.e2e_test, criteria.test_name);
|
|
225
|
+
e2eResults.push(result);
|
|
226
|
+
if (!result.passed) {
|
|
227
|
+
return {
|
|
228
|
+
passed: false,
|
|
229
|
+
message: `E2E test failed for "${criteria.description}": ${criteria.e2e_test}`,
|
|
230
|
+
timestamp: new Date().toISOString(),
|
|
231
|
+
details: {
|
|
232
|
+
taskId: task.id,
|
|
233
|
+
totalCriteria: task.acceptance.length,
|
|
234
|
+
checkedCriteria: task.acceptance.filter(c => c.checked).length,
|
|
235
|
+
uncheckedCriteria: [criteria.description],
|
|
236
|
+
missingCriteria: [],
|
|
237
|
+
e2eTestResults: e2eResults,
|
|
238
|
+
},
|
|
239
|
+
};
|
|
240
|
+
}
|
|
241
|
+
}
|
|
242
|
+
}
|
|
243
|
+
return {
|
|
244
|
+
passed: true,
|
|
245
|
+
message: `Task ${task.id} passes all acceptance criteria`,
|
|
246
|
+
timestamp: new Date().toISOString(),
|
|
247
|
+
details: {
|
|
248
|
+
taskId: task.id,
|
|
249
|
+
totalCriteria: task.acceptance.length,
|
|
250
|
+
checkedCriteria: task.acceptance.length,
|
|
251
|
+
uncheckedCriteria: [],
|
|
252
|
+
missingCriteria: [],
|
|
253
|
+
e2eTestResults: e2eResults.length > 0 ? e2eResults : undefined,
|
|
254
|
+
},
|
|
255
|
+
};
|
|
256
|
+
}
|
|
257
|
+
// 兼容旧格式 acceptance_criteria
|
|
258
|
+
if (!task.acceptance_criteria || task.acceptance_criteria.length === 0) {
|
|
259
|
+
return {
|
|
260
|
+
passed: true,
|
|
261
|
+
message: `Task ${task.id} has no acceptance criteria`,
|
|
262
|
+
timestamp: new Date().toISOString(),
|
|
263
|
+
};
|
|
264
|
+
}
|
|
265
|
+
const unchecked = [];
|
|
266
|
+
for (const criteria of task.acceptance_criteria) {
|
|
267
|
+
if (criteria.required && !criteria.checked) {
|
|
268
|
+
unchecked.push(criteria.id);
|
|
269
|
+
}
|
|
270
|
+
}
|
|
271
|
+
if (unchecked.length === 0) {
|
|
272
|
+
return {
|
|
273
|
+
passed: true,
|
|
274
|
+
message: `Task ${task.id} passes all acceptance criteria`,
|
|
275
|
+
timestamp: new Date().toISOString(),
|
|
276
|
+
details: {
|
|
277
|
+
taskId: task.id,
|
|
278
|
+
totalCriteria: task.acceptance_criteria.length,
|
|
279
|
+
checkedCriteria: task.acceptance_criteria.filter(c => c.checked).length,
|
|
280
|
+
uncheckedCriteria: [],
|
|
281
|
+
missingCriteria: [],
|
|
282
|
+
},
|
|
283
|
+
};
|
|
284
|
+
}
|
|
285
|
+
return {
|
|
286
|
+
passed: false,
|
|
287
|
+
message: `Task ${task.id} has ${unchecked.length} unchecked acceptance criteria`,
|
|
288
|
+
timestamp: new Date().toISOString(),
|
|
289
|
+
details: {
|
|
290
|
+
taskId: task.id,
|
|
291
|
+
totalCriteria: task.acceptance_criteria.length,
|
|
292
|
+
checkedCriteria: task.acceptance_criteria.filter(c => c.checked).length,
|
|
293
|
+
uncheckedCriteria: unchecked,
|
|
294
|
+
missingCriteria: [],
|
|
295
|
+
},
|
|
296
|
+
};
|
|
297
|
+
}
|
|
298
|
+
/**
|
|
299
|
+
* 运行 E2E 测试
|
|
300
|
+
*/
|
|
301
|
+
async runE2ETest(projectPath, testFile, testName) {
|
|
302
|
+
const timeout = this.config.e2eTestTimeout ?? 120000;
|
|
303
|
+
// 构建测试命令
|
|
304
|
+
let command = this.config.e2eTestCommand ?? 'npx playwright test';
|
|
305
|
+
command += ` ${testFile}`;
|
|
306
|
+
if (testName) {
|
|
307
|
+
command += ` -g "${testName}"`;
|
|
308
|
+
}
|
|
309
|
+
try {
|
|
310
|
+
const { stdout, stderr } = await execAsync(command, {
|
|
311
|
+
cwd: projectPath,
|
|
312
|
+
timeout,
|
|
313
|
+
});
|
|
314
|
+
const output = stdout + stderr;
|
|
315
|
+
const passed = this.parseTestOutput(output);
|
|
316
|
+
return {
|
|
317
|
+
criteria: testFile,
|
|
318
|
+
testFile,
|
|
319
|
+
testName,
|
|
320
|
+
passed,
|
|
321
|
+
output: output.substring(0, 2000),
|
|
322
|
+
};
|
|
323
|
+
}
|
|
324
|
+
catch (error) {
|
|
325
|
+
// 超时或执行失败
|
|
326
|
+
return {
|
|
327
|
+
criteria: testFile,
|
|
328
|
+
testFile,
|
|
329
|
+
testName,
|
|
330
|
+
passed: false,
|
|
331
|
+
error: error.message,
|
|
332
|
+
output: error.stdout?.substring(0, 2000) ?? error.message,
|
|
333
|
+
};
|
|
334
|
+
}
|
|
335
|
+
}
|
|
336
|
+
/**
|
|
337
|
+
* 解析测试输出判断是否通过
|
|
338
|
+
*/
|
|
339
|
+
parseTestOutput(output) {
|
|
340
|
+
// Playwright 格式
|
|
341
|
+
if (output.includes('passed')) {
|
|
342
|
+
// 检查是否有失败
|
|
343
|
+
const failedMatch = output.match(/(\d+)\s+failed/);
|
|
344
|
+
if (failedMatch && parseInt(failedMatch[1]) > 0) {
|
|
345
|
+
return false;
|
|
346
|
+
}
|
|
347
|
+
return true;
|
|
348
|
+
}
|
|
349
|
+
// Jest 格式
|
|
350
|
+
if (output.includes('Test Suites:')) {
|
|
351
|
+
const match = output.match(/Test Suites:\s+(\d+)\s+failed/);
|
|
352
|
+
if (match && parseInt(match[1]) > 0) {
|
|
353
|
+
return false;
|
|
354
|
+
}
|
|
355
|
+
return output.includes('passed');
|
|
356
|
+
}
|
|
357
|
+
// 通用格式
|
|
358
|
+
return output.includes('PASS') && !output.includes('FAIL');
|
|
359
|
+
}
|
|
360
|
+
}
|
|
361
|
+
exports.SpecAcceptanceGate = SpecAcceptanceGate;
|
|
362
|
+
/**
|
|
363
|
+
* 创建验收标准门禁(便捷函数)
|
|
364
|
+
*/
|
|
365
|
+
function createSpecAcceptanceGate(config) {
|
|
366
|
+
return new SpecAcceptanceGate(config);
|
|
367
|
+
}
|
|
368
|
+
//# sourceMappingURL=acceptance.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"acceptance.js","sourceRoot":"","sources":["../../src/gates/acceptance.ts"],"names":[],"mappings":"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"}
|
package/dist/gates/index.d.ts
CHANGED
|
@@ -3,18 +3,21 @@
|
|
|
3
3
|
*
|
|
4
4
|
* 统一导出所有门禁类型
|
|
5
5
|
*/
|
|
6
|
-
export type { GateResult, GateContext, PerformanceThresholds, ReviewGateConfig, SecurityGateConfig, PerformanceGateConfig, ContractGateConfig, } from './types';
|
|
6
|
+
export type { GateResult, GateContext, PerformanceThresholds, ReviewGateConfig, SecurityGateConfig, PerformanceGateConfig, ContractGateConfig, SpecAcceptanceGateConfig, AcceptanceGateContext, AcceptanceCriteria, } from './types';
|
|
7
7
|
export { ReviewGate } from './review';
|
|
8
8
|
export { SecurityGate } from './security';
|
|
9
9
|
export { PerformanceGate } from './performance';
|
|
10
10
|
export { ContractGate } from './contract';
|
|
11
|
+
export { SpecAcceptanceGate } from './acceptance';
|
|
11
12
|
import { ReviewGate } from './review';
|
|
12
13
|
import { SecurityGate } from './security';
|
|
13
14
|
import { PerformanceGate } from './performance';
|
|
14
15
|
import { ContractGate } from './contract';
|
|
15
|
-
import
|
|
16
|
+
import { SpecAcceptanceGate } from './acceptance';
|
|
17
|
+
import type { ReviewGateConfig, SecurityGateConfig, PerformanceGateConfig, ContractGateConfig, SpecAcceptanceGateConfig } from './types';
|
|
16
18
|
export declare function createReviewGate(config?: Partial<ReviewGateConfig>): ReviewGate;
|
|
17
19
|
export declare function createSecurityGate(config?: Partial<SecurityGateConfig>): SecurityGate;
|
|
18
20
|
export declare function createPerformanceGate(config?: Partial<PerformanceGateConfig>): PerformanceGate;
|
|
19
21
|
export declare function createContractGate(config?: Partial<ContractGateConfig>): ContractGate;
|
|
22
|
+
export declare function createSpecAcceptanceGate(config?: Partial<SpecAcceptanceGateConfig>): SpecAcceptanceGate;
|
|
20
23
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/gates/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,YAAY,EACV,UAAU,EACV,WAAW,EACX,qBAAqB,EACrB,gBAAgB,EAChB,kBAAkB,EAClB,qBAAqB,EACrB,kBAAkB,GACnB,MAAM,SAAS,CAAC;AAGjB,OAAO,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AACtC,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAC1C,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAChD,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/gates/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,YAAY,EACV,UAAU,EACV,WAAW,EACX,qBAAqB,EACrB,gBAAgB,EAChB,kBAAkB,EAClB,qBAAqB,EACrB,kBAAkB,EAClB,wBAAwB,EACxB,qBAAqB,EACrB,kBAAkB,GACnB,MAAM,SAAS,CAAC;AAGjB,OAAO,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AACtC,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAC1C,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAChD,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAC1C,OAAO,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AAGlD,OAAO,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AACtC,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAC1C,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAChD,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAC1C,OAAO,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AAClD,OAAO,KAAK,EACV,gBAAgB,EAChB,kBAAkB,EAClB,qBAAqB,EACrB,kBAAkB,EAClB,wBAAwB,EACzB,MAAM,SAAS,CAAC;AAEjB,wBAAgB,gBAAgB,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC,gBAAgB,CAAC,GAAG,UAAU,CAE/E;AAED,wBAAgB,kBAAkB,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC,kBAAkB,CAAC,GAAG,YAAY,CAErF;AAED,wBAAgB,qBAAqB,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC,qBAAqB,CAAC,GAAG,eAAe,CAE9F;AAED,wBAAgB,kBAAkB,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC,kBAAkB,CAAC,GAAG,YAAY,CAErF;AAED,wBAAgB,wBAAwB,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC,wBAAwB,CAAC,GAAG,kBAAkB,CAEvG"}
|
package/dist/gates/index.js
CHANGED
|
@@ -5,11 +5,12 @@
|
|
|
5
5
|
* 统一导出所有门禁类型
|
|
6
6
|
*/
|
|
7
7
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
8
|
-
exports.ContractGate = exports.PerformanceGate = exports.SecurityGate = exports.ReviewGate = void 0;
|
|
8
|
+
exports.SpecAcceptanceGate = exports.ContractGate = exports.PerformanceGate = exports.SecurityGate = exports.ReviewGate = void 0;
|
|
9
9
|
exports.createReviewGate = createReviewGate;
|
|
10
10
|
exports.createSecurityGate = createSecurityGate;
|
|
11
11
|
exports.createPerformanceGate = createPerformanceGate;
|
|
12
12
|
exports.createContractGate = createContractGate;
|
|
13
|
+
exports.createSpecAcceptanceGate = createSpecAcceptanceGate;
|
|
13
14
|
// 门禁类导出
|
|
14
15
|
var review_1 = require("./review");
|
|
15
16
|
Object.defineProperty(exports, "ReviewGate", { enumerable: true, get: function () { return review_1.ReviewGate; } });
|
|
@@ -19,11 +20,14 @@ var performance_1 = require("./performance");
|
|
|
19
20
|
Object.defineProperty(exports, "PerformanceGate", { enumerable: true, get: function () { return performance_1.PerformanceGate; } });
|
|
20
21
|
var contract_1 = require("./contract");
|
|
21
22
|
Object.defineProperty(exports, "ContractGate", { enumerable: true, get: function () { return contract_1.ContractGate; } });
|
|
23
|
+
var acceptance_1 = require("./acceptance");
|
|
24
|
+
Object.defineProperty(exports, "SpecAcceptanceGate", { enumerable: true, get: function () { return acceptance_1.SpecAcceptanceGate; } });
|
|
22
25
|
// 便捷工厂函数
|
|
23
26
|
const review_2 = require("./review");
|
|
24
27
|
const security_2 = require("./security");
|
|
25
28
|
const performance_2 = require("./performance");
|
|
26
29
|
const contract_2 = require("./contract");
|
|
30
|
+
const acceptance_2 = require("./acceptance");
|
|
27
31
|
function createReviewGate(config) {
|
|
28
32
|
return new review_2.ReviewGate(config);
|
|
29
33
|
}
|
|
@@ -36,4 +40,7 @@ function createPerformanceGate(config) {
|
|
|
36
40
|
function createContractGate(config) {
|
|
37
41
|
return new contract_2.ContractGate(config);
|
|
38
42
|
}
|
|
43
|
+
function createSpecAcceptanceGate(config) {
|
|
44
|
+
return new acceptance_2.SpecAcceptanceGate(config);
|
|
45
|
+
}
|
|
39
46
|
//# sourceMappingURL=index.js.map
|
package/dist/gates/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/gates/index.ts"],"names":[],"mappings":";AAAA;;;;GAIG;;;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/gates/index.ts"],"names":[],"mappings":";AAAA;;;;GAIG;;;AAqCH,4CAEC;AAED,gDAEC;AAED,sDAEC;AAED,gDAEC;AAED,4DAEC;AAvCD,QAAQ;AACR,mCAAsC;AAA7B,oGAAA,UAAU,OAAA;AACnB,uCAA0C;AAAjC,wGAAA,YAAY,OAAA;AACrB,6CAAgD;AAAvC,8GAAA,eAAe,OAAA;AACxB,uCAA0C;AAAjC,wGAAA,YAAY,OAAA;AACrB,2CAAkD;AAAzC,gHAAA,kBAAkB,OAAA;AAE3B,SAAS;AACT,qCAAsC;AACtC,yCAA0C;AAC1C,+CAAgD;AAChD,yCAA0C;AAC1C,6CAAkD;AASlD,SAAgB,gBAAgB,CAAC,MAAkC;IACjE,OAAO,IAAI,mBAAU,CAAC,MAAM,CAAC,CAAC;AAChC,CAAC;AAED,SAAgB,kBAAkB,CAAC,MAAoC;IACrE,OAAO,IAAI,uBAAY,CAAC,MAAM,CAAC,CAAC;AAClC,CAAC;AAED,SAAgB,qBAAqB,CAAC,MAAuC;IAC3E,OAAO,IAAI,6BAAe,CAAC,MAAM,CAAC,CAAC;AACrC,CAAC;AAED,SAAgB,kBAAkB,CAAC,MAAoC;IACrE,OAAO,IAAI,uBAAY,CAAC,MAAM,CAAC,CAAC;AAClC,CAAC;AAED,SAAgB,wBAAwB,CAAC,MAA0C;IACjF,OAAO,IAAI,+BAAkB,CAAC,MAAM,CAAC,CAAC;AACxC,CAAC"}
|
package/dist/gates/types.d.ts
CHANGED
|
@@ -79,4 +79,37 @@ export interface ContractGateConfig {
|
|
|
79
79
|
allowBreakingChanges: boolean;
|
|
80
80
|
contractPath?: string;
|
|
81
81
|
}
|
|
82
|
+
/**
|
|
83
|
+
* 验收标准门禁配置
|
|
84
|
+
*/
|
|
85
|
+
export interface SpecAcceptanceGateConfig {
|
|
86
|
+
/** tasks.yml 路径 */
|
|
87
|
+
tasksPath?: string;
|
|
88
|
+
/** 是否检查所有任务 */
|
|
89
|
+
checkAllTasks?: boolean;
|
|
90
|
+
/** 自定义验收条件 */
|
|
91
|
+
customAcceptanceCriteria?: Record<string, (task: any) => Promise<boolean>>;
|
|
92
|
+
}
|
|
93
|
+
/**
|
|
94
|
+
* 验收标准门禁上下文
|
|
95
|
+
*/
|
|
96
|
+
export interface AcceptanceGateContext {
|
|
97
|
+
/** 项目路径 */
|
|
98
|
+
projectPath: string;
|
|
99
|
+
/** 任务 ID */
|
|
100
|
+
taskId?: string;
|
|
101
|
+
/** tasks.yml 路径 */
|
|
102
|
+
tasksPath?: string;
|
|
103
|
+
}
|
|
104
|
+
/**
|
|
105
|
+
* 验收标准
|
|
106
|
+
*/
|
|
107
|
+
export interface AcceptanceCriteria {
|
|
108
|
+
id: string;
|
|
109
|
+
description: string;
|
|
110
|
+
type: 'manual' | 'automated' | 'test';
|
|
111
|
+
required: boolean;
|
|
112
|
+
checked?: boolean;
|
|
113
|
+
notes?: string;
|
|
114
|
+
}
|
|
82
115
|
//# sourceMappingURL=types.d.ts.map
|