@dommaker/harness 0.7.2 → 0.7.3

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.
@@ -0,0 +1,221 @@
1
+ "use strict";
2
+ /**
3
+ * 安全门禁
4
+ *
5
+ * 检查安全漏洞:
6
+ * - npm audit
7
+ * - 依赖漏洞
8
+ * - 敏感信息泄露
9
+ */
10
+ Object.defineProperty(exports, "__esModule", { value: true });
11
+ exports.SecurityGate = void 0;
12
+ const child_process_1 = require("child_process");
13
+ const util_1 = require("util");
14
+ const execAsync = (0, util_1.promisify)(child_process_1.exec);
15
+ /**
16
+ * 安全门禁
17
+ */
18
+ class SecurityGate {
19
+ config;
20
+ constructor(config = {}) {
21
+ this.config = {
22
+ enabled: config.enabled ?? true,
23
+ scanCommand: config.scanCommand ?? '',
24
+ ignoreWarnings: config.ignoreWarnings ?? false,
25
+ ignoreDevDependencies: config.ignoreDevDependencies ?? false,
26
+ severityThreshold: config.severityThreshold ?? 'high',
27
+ };
28
+ }
29
+ /**
30
+ * 扫描安全漏洞
31
+ */
32
+ async scan(context) {
33
+ const startTime = Date.now();
34
+ if (!this.config.enabled) {
35
+ return {
36
+ gate: 'security',
37
+ passed: true,
38
+ message: '安全门禁已禁用',
39
+ timestamp: new Date().toISOString(),
40
+ duration: Date.now() - startTime,
41
+ };
42
+ }
43
+ try {
44
+ // 使用自定义命令或默认 npm audit
45
+ const scanCommand = context.securityScanCommand ??
46
+ this.config.scanCommand ??
47
+ this.detectScanCommand(context.projectPath);
48
+ const result = await this.runScan(scanCommand, context.projectPath);
49
+ // 分析结果
50
+ const analysis = this.analyzeResult(result);
51
+ const passed = this.isPassed(analysis);
52
+ return {
53
+ gate: 'security',
54
+ passed,
55
+ message: passed
56
+ ? '安全扫描通过'
57
+ : `发现 ${analysis.critical} 个严重漏洞, ${analysis.high} 个高危漏洞`,
58
+ details: {
59
+ critical: analysis.critical,
60
+ high: analysis.high,
61
+ moderate: analysis.moderate,
62
+ low: analysis.low,
63
+ total: analysis.total,
64
+ vulnerabilities: analysis.vulnerabilities.slice(0, 10), // 只返回前 10 个
65
+ scanCommand,
66
+ },
67
+ timestamp: new Date().toISOString(),
68
+ duration: Date.now() - startTime,
69
+ };
70
+ }
71
+ catch (error) {
72
+ return {
73
+ gate: 'security',
74
+ passed: false,
75
+ message: `安全扫描失败: ${error.message}`,
76
+ timestamp: new Date().toISOString(),
77
+ duration: Date.now() - startTime,
78
+ };
79
+ }
80
+ }
81
+ /**
82
+ * 检测扫描命令
83
+ */
84
+ detectScanCommand(projectPath) {
85
+ // 默认使用 npm audit
86
+ return 'npm audit --json';
87
+ }
88
+ /**
89
+ * 运行扫描
90
+ */
91
+ async runScan(command, projectPath) {
92
+ try {
93
+ const { stdout } = await execAsync(command, {
94
+ cwd: projectPath,
95
+ maxBuffer: 10 * 1024 * 1024,
96
+ });
97
+ return stdout;
98
+ }
99
+ catch (error) {
100
+ // npm audit 发现漏洞时会返回非零退出码
101
+ // 但 stdout 仍然包含结果
102
+ if (error.stdout) {
103
+ return error.stdout;
104
+ }
105
+ throw error;
106
+ }
107
+ }
108
+ /**
109
+ * 分析扫描结果
110
+ */
111
+ analyzeResult(output) {
112
+ let critical = 0;
113
+ let high = 0;
114
+ let moderate = 0;
115
+ let low = 0;
116
+ const vulnerabilities = [];
117
+ try {
118
+ const result = JSON.parse(output);
119
+ // npm audit 格式
120
+ if (result.audit) {
121
+ const advisories = result.audit.advisories || {};
122
+ for (const key of Object.keys(advisories)) {
123
+ const advisory = advisories[key];
124
+ const severity = advisory.severity?.toLowerCase() || 'low';
125
+ switch (severity) {
126
+ case 'critical':
127
+ critical++;
128
+ break;
129
+ case 'high':
130
+ high++;
131
+ break;
132
+ case 'moderate':
133
+ moderate++;
134
+ break;
135
+ default: low++;
136
+ }
137
+ vulnerabilities.push({
138
+ name: advisory.name || key,
139
+ severity,
140
+ via: advisory.via?.[0]?.title || advisory.title || 'Unknown',
141
+ });
142
+ }
143
+ }
144
+ // 新版 npm audit 格式
145
+ if (result.vulnerabilities) {
146
+ for (const [name, vuln] of Object.entries(result.vulnerabilities)) {
147
+ const v = vuln;
148
+ const severity = v.severity?.toLowerCase() || 'low';
149
+ switch (severity) {
150
+ case 'critical':
151
+ critical++;
152
+ break;
153
+ case 'high':
154
+ high++;
155
+ break;
156
+ case 'moderate':
157
+ moderate++;
158
+ break;
159
+ default: low++;
160
+ }
161
+ vulnerabilities.push({
162
+ name,
163
+ severity,
164
+ via: v.via?.[0]?.title || v.name || 'Unknown',
165
+ });
166
+ }
167
+ }
168
+ }
169
+ catch {
170
+ // 解析失败,尝试从文本提取
171
+ const criticalMatch = output.match(/(\d+) critical/i);
172
+ const highMatch = output.match(/(\d+) high/i);
173
+ const moderateMatch = output.match(/(\d+) moderate/i);
174
+ const lowMatch = output.match(/(\d+) low/i);
175
+ critical = criticalMatch ? parseInt(criticalMatch[1], 10) : 0;
176
+ high = highMatch ? parseInt(highMatch[1], 10) : 0;
177
+ moderate = moderateMatch ? parseInt(moderateMatch[1], 10) : 0;
178
+ low = lowMatch ? parseInt(lowMatch[1], 10) : 0;
179
+ }
180
+ return {
181
+ critical,
182
+ high,
183
+ moderate,
184
+ low,
185
+ total: critical + high + moderate + low,
186
+ vulnerabilities,
187
+ };
188
+ }
189
+ /**
190
+ * 判断是否通过
191
+ */
192
+ isPassed(analysis) {
193
+ // 根据严重程度阈值判断
194
+ switch (this.config.severityThreshold) {
195
+ case 'critical':
196
+ return analysis.critical === 0;
197
+ case 'high':
198
+ return analysis.critical === 0 && analysis.high === 0;
199
+ case 'moderate':
200
+ return analysis.critical === 0 && analysis.high === 0 && analysis.moderate === 0;
201
+ case 'low':
202
+ return analysis.total === 0;
203
+ default:
204
+ return analysis.critical === 0 && analysis.high === 0;
205
+ }
206
+ }
207
+ /**
208
+ * 设置严重程度阈值
209
+ */
210
+ setSeverityThreshold(threshold) {
211
+ this.config.severityThreshold = threshold;
212
+ }
213
+ /**
214
+ * 获取配置
215
+ */
216
+ getConfig() {
217
+ return { ...this.config };
218
+ }
219
+ }
220
+ exports.SecurityGate = SecurityGate;
221
+ //# sourceMappingURL=security.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"security.js","sourceRoot":"","sources":["../../src/gates/security.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,82 @@
1
+ /**
2
+ * 门禁类型定义
3
+ */
4
+ /**
5
+ * 门禁结果
6
+ */
7
+ export interface GateResult {
8
+ gate: string;
9
+ passed: boolean;
10
+ message: string;
11
+ details?: Record<string, any>;
12
+ timestamp: string;
13
+ duration?: number;
14
+ }
15
+ /**
16
+ * 门禁上下文
17
+ */
18
+ export interface GateContext {
19
+ projectId: string;
20
+ taskId?: string;
21
+ projectPath: string;
22
+ prNumber?: number;
23
+ minReviewers?: number;
24
+ reviewers?: string[];
25
+ securityScanCommand?: string;
26
+ ignoreWarnings?: boolean;
27
+ performanceThresholds?: PerformanceThresholds;
28
+ benchmarkCommand?: string;
29
+ oldContractPath?: string;
30
+ newContractPath?: string;
31
+ openApiSpec?: string;
32
+ timeout?: number;
33
+ }
34
+ /**
35
+ * 性能阈值
36
+ */
37
+ export interface PerformanceThresholds {
38
+ maxResponseTime?: number;
39
+ maxMemoryUsage?: number;
40
+ minCoverage?: number;
41
+ maxBundleSize?: number;
42
+ minThroughput?: number;
43
+ }
44
+ /**
45
+ * 审查门禁配置
46
+ */
47
+ export interface ReviewGateConfig {
48
+ minReviewers: number;
49
+ requireApproval: boolean;
50
+ blockOnChangesRequested: boolean;
51
+ allowedReviewers?: string[];
52
+ }
53
+ /**
54
+ * 安全门禁配置
55
+ */
56
+ export interface SecurityGateConfig {
57
+ enabled: boolean;
58
+ scanCommand?: string;
59
+ ignoreWarnings: boolean;
60
+ ignoreDevDependencies: boolean;
61
+ severityThreshold: 'low' | 'moderate' | 'high' | 'critical';
62
+ }
63
+ /**
64
+ * 性能门禁配置
65
+ */
66
+ export interface PerformanceGateConfig {
67
+ enabled: boolean;
68
+ benchmarkCommand?: string;
69
+ thresholds: PerformanceThresholds;
70
+ warmupRuns: number;
71
+ measureRuns: number;
72
+ }
73
+ /**
74
+ * 契约门禁配置
75
+ */
76
+ export interface ContractGateConfig {
77
+ enabled: boolean;
78
+ strict: boolean;
79
+ allowBreakingChanges: boolean;
80
+ contractPath?: string;
81
+ }
82
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/gates/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,OAAO,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAC9B,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IAGpB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;IAGrB,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,cAAc,CAAC,EAAE,OAAO,CAAC;IAGzB,qBAAqB,CAAC,EAAE,qBAAqB,CAAC;IAC9C,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAG1B,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,WAAW,CAAC,EAAE,MAAM,CAAC;IAGrB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED;;GAEG;AACH,MAAM,WAAW,qBAAqB;IACpC,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,YAAY,EAAE,MAAM,CAAC;IACrB,eAAe,EAAE,OAAO,CAAC;IACzB,uBAAuB,EAAE,OAAO,CAAC;IACjC,gBAAgB,CAAC,EAAE,MAAM,EAAE,CAAC;CAC7B;AAED;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,OAAO,EAAE,OAAO,CAAC;IACjB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,cAAc,EAAE,OAAO,CAAC;IACxB,qBAAqB,EAAE,OAAO,CAAC;IAC/B,iBAAiB,EAAE,KAAK,GAAG,UAAU,GAAG,MAAM,GAAG,UAAU,CAAC;CAC7D;AAED;;GAEG;AACH,MAAM,WAAW,qBAAqB;IACpC,OAAO,EAAE,OAAO,CAAC;IACjB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,UAAU,EAAE,qBAAqB,CAAC;IAClC,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;CACrB;AAED;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,EAAE,OAAO,CAAC;IAChB,oBAAoB,EAAE,OAAO,CAAC;IAC9B,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB"}
@@ -0,0 +1,6 @@
1
+ "use strict";
2
+ /**
3
+ * 门禁类型定义
4
+ */
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/gates/types.ts"],"names":[],"mappings":";AAAA;;GAEG"}
package/dist/index.d.ts CHANGED
@@ -7,9 +7,18 @@
7
7
  * - Iron Laws:绝对禁止,无例外
8
8
  * - Guidelines:优先建议,有例外
9
9
  * - Tips:信息性提示,可忽略
10
+ *
11
+ * 门禁系统:
12
+ * - PassesGate:测试门控
13
+ * - ReviewGate:审查门禁
14
+ * - SecurityGate:安全门禁
15
+ * - PerformanceGate:性能门禁
16
+ * - ContractGate:契约门禁
17
+ * - CheckpointValidator:检查点验证
10
18
  */
11
19
  export * from './types';
12
20
  export * from './core';
21
+ export * from './gates';
13
22
  export * from './monitoring';
14
23
  export * from './presets';
15
24
  export * from './extensions/long-running';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAKH,cAAc,SAAS,CAAC;AAKxB,cAAc,QAAQ,CAAC;AAKvB,cAAc,cAAc,CAAC;AAK7B,cAAc,WAAW,CAAC;AAO1B,cAAc,2BAA2B,CAAC;AAO1C,OAAO,KAAK,EAAE,iBAAiB,EAAE,qBAAqB,EAAoB,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAExH,OAAO,KAAK,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAExE,OAAO,KAAK,EAAE,mBAAmB,EAAyC,aAAa,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AAEzI,eAAO,MAAM,WAAW,wCAAwB,CAAC;AAEjD,wBAAsB,kBAAkB,CACtC,OAAO,EAAE,iBAAiB,EAC1B,OAAO,EAAE,iBAAiB,GACzB,OAAO,CAAC,kBAAkB,CAAC,CAE7B;AAED,wBAAsB,cAAc,CAClC,OAAO,EAAE,iBAAiB,EAC1B,OAAO,EAAE,iBAAiB,GACzB,OAAO,CAAC,IAAI,CAAC,CAEf;AAED,wBAAgB,gBAAgB,CAC9B,aAAa,EAAE,aAAa,EAC5B,QAAQ,EAAE,mBAAmB,EAC7B,MAAM,CAAC,EAAE,MAAM,GACd,IAAI,CAEN;AAED;;GAEG;AACH,wBAAsB,gBAAgB,CACpC,OAAO,EAAE,iBAAiB,GACzB,OAAO,CAAC,qBAAqB,CAAC,CAEhC;AAED;;GAEG;AACH,wBAAsB,oBAAoB,CACxC,OAAO,EAAE,iBAAiB,GACzB,OAAO,CAAC,IAAI,CAAC,CAEf;AAMD;;GAEG;AACH,wBAAsB,aAAa,CACjC,OAAO,EAAE,cAAc,GACtB,OAAO,CAAC,aAAa,EAAE,CAAC,CAG1B"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAKH,cAAc,SAAS,CAAC;AAKxB,cAAc,QAAQ,CAAC;AAKvB,cAAc,SAAS,CAAC;AAKxB,cAAc,cAAc,CAAC;AAK7B,cAAc,WAAW,CAAC;AAO1B,cAAc,2BAA2B,CAAC;AAO1C,OAAO,KAAK,EAAE,iBAAiB,EAAE,qBAAqB,EAAoB,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAExH,OAAO,KAAK,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAExE,OAAO,KAAK,EAAE,mBAAmB,EAAyC,aAAa,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AAEzI,eAAO,MAAM,WAAW,wCAAwB,CAAC;AAEjD,wBAAsB,kBAAkB,CACtC,OAAO,EAAE,iBAAiB,EAC1B,OAAO,EAAE,iBAAiB,GACzB,OAAO,CAAC,kBAAkB,CAAC,CAE7B;AAED,wBAAsB,cAAc,CAClC,OAAO,EAAE,iBAAiB,EAC1B,OAAO,EAAE,iBAAiB,GACzB,OAAO,CAAC,IAAI,CAAC,CAEf;AAED,wBAAgB,gBAAgB,CAC9B,aAAa,EAAE,aAAa,EAC5B,QAAQ,EAAE,mBAAmB,EAC7B,MAAM,CAAC,EAAE,MAAM,GACd,IAAI,CAEN;AAED;;GAEG;AACH,wBAAsB,gBAAgB,CACpC,OAAO,EAAE,iBAAiB,GACzB,OAAO,CAAC,qBAAqB,CAAC,CAEhC;AAED;;GAEG;AACH,wBAAsB,oBAAoB,CACxC,OAAO,EAAE,iBAAiB,GACzB,OAAO,CAAC,IAAI,CAAC,CAEf;AAMD;;GAEG;AACH,wBAAsB,aAAa,CACjC,OAAO,EAAE,cAAc,GACtB,OAAO,CAAC,aAAa,EAAE,CAAC,CAG1B"}
package/dist/index.js CHANGED
@@ -8,6 +8,14 @@
8
8
  * - Iron Laws:绝对禁止,无例外
9
9
  * - Guidelines:优先建议,有例外
10
10
  * - Tips:信息性提示,可忽略
11
+ *
12
+ * 门禁系统:
13
+ * - PassesGate:测试门控
14
+ * - ReviewGate:审查门禁
15
+ * - SecurityGate:安全门禁
16
+ * - PerformanceGate:性能门禁
17
+ * - ContractGate:契约门禁
18
+ * - CheckpointValidator:检查点验证
11
19
  */
12
20
  var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
13
21
  if (k2 === undefined) k2 = k;
@@ -40,6 +48,10 @@ __exportStar(require("./types"), exports);
40
48
  // ========================================
41
49
  __exportStar(require("./core"), exports);
42
50
  // ========================================
51
+ // 门禁系统导出
52
+ // ========================================
53
+ __exportStar(require("./gates"), exports);
54
+ // ========================================
43
55
  // 监控导出
44
56
  // ========================================
45
57
  __exportStar(require("./monitoring"), exports);
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAAA;;;;;;;;;GASG;;;;;;;;;;;;;;;;;AA0CH,gDAKC;AAED,wCAKC;AAED,4CAMC;AAKD,4CAIC;AAKD,oDAIC;AASD,sCAKC;AA5FD,2CAA2C;AAC3C,OAAO;AACP,2CAA2C;AAC3C,0CAAwB;AAExB,2CAA2C;AAC3C,SAAS;AACT,2CAA2C;AAC3C,yCAAuB;AAEvB,2CAA2C;AAC3C,OAAO;AACP,2CAA2C;AAC3C,+CAA6B;AAE7B,2CAA2C;AAC3C,OAAO;AACP,2CAA2C;AAC3C,4CAA0B;AAE1B,2CAA2C;AAC3C,SAAS;AACT,2CAA2C;AAE3C,yBAAyB;AACzB,4DAA0C;AAE1C,2CAA2C;AAC3C,SAAS;AACT,2CAA2C;AAE3C,wDAA+D;AAI/D,gEAAuE;AAG1D,QAAA,WAAW,GAAG,mCAAqB,CAAC;AAE1C,KAAK,UAAU,kBAAkB,CACtC,OAA0B,EAC1B,OAA0B;IAE1B,OAAO,mCAAqB,CAAC,SAAS,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;AAC3D,CAAC;AAEM,KAAK,UAAU,cAAc,CAClC,OAA0B,EAC1B,OAA0B;IAE1B,OAAO,mCAAqB,CAAC,KAAK,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;AACvD,CAAC;AAED,SAAgB,gBAAgB,CAC9B,aAA4B,EAC5B,QAA6B,EAC7B,MAAe;IAEf,mCAAqB,CAAC,QAAQ,CAAC,aAAa,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC;AAClE,CAAC;AAED;;GAEG;AACI,KAAK,UAAU,gBAAgB,CACpC,OAA0B;IAE1B,OAAO,2BAAiB,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC;AACrD,CAAC;AAED;;GAEG;AACI,KAAK,UAAU,oBAAoB,CACxC,OAA0B;IAE1B,OAAO,2BAAiB,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC;AACpD,CAAC;AAED,2CAA2C;AAC3C,WAAW;AACX,2CAA2C;AAE3C;;GAEG;AACI,KAAK,UAAU,aAAa,CACjC,OAAuB;IAEvB,MAAM,MAAM,GAAG,MAAM,2BAAiB,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC;IACjE,OAAO,CAAC,GAAG,MAAM,CAAC,QAAQ,EAAE,GAAG,MAAM,CAAC,UAAU,EAAE,GAAG,MAAM,CAAC,IAAI,CAAoB,CAAC;AACvF,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;;GAiBG;;;;;;;;;;;;;;;;;AA+CH,gDAKC;AAED,wCAKC;AAED,4CAMC;AAKD,4CAIC;AAKD,oDAIC;AASD,sCAKC;AAjGD,2CAA2C;AAC3C,OAAO;AACP,2CAA2C;AAC3C,0CAAwB;AAExB,2CAA2C;AAC3C,SAAS;AACT,2CAA2C;AAC3C,yCAAuB;AAEvB,2CAA2C;AAC3C,SAAS;AACT,2CAA2C;AAC3C,0CAAwB;AAExB,2CAA2C;AAC3C,OAAO;AACP,2CAA2C;AAC3C,+CAA6B;AAE7B,2CAA2C;AAC3C,OAAO;AACP,2CAA2C;AAC3C,4CAA0B;AAE1B,2CAA2C;AAC3C,SAAS;AACT,2CAA2C;AAE3C,yBAAyB;AACzB,4DAA0C;AAE1C,2CAA2C;AAC3C,SAAS;AACT,2CAA2C;AAE3C,wDAA+D;AAI/D,gEAAuE;AAG1D,QAAA,WAAW,GAAG,mCAAqB,CAAC;AAE1C,KAAK,UAAU,kBAAkB,CACtC,OAA0B,EAC1B,OAA0B;IAE1B,OAAO,mCAAqB,CAAC,SAAS,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;AAC3D,CAAC;AAEM,KAAK,UAAU,cAAc,CAClC,OAA0B,EAC1B,OAA0B;IAE1B,OAAO,mCAAqB,CAAC,KAAK,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;AACvD,CAAC;AAED,SAAgB,gBAAgB,CAC9B,aAA4B,EAC5B,QAA6B,EAC7B,MAAe;IAEf,mCAAqB,CAAC,QAAQ,CAAC,aAAa,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC;AAClE,CAAC;AAED;;GAEG;AACI,KAAK,UAAU,gBAAgB,CACpC,OAA0B;IAE1B,OAAO,2BAAiB,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC;AACrD,CAAC;AAED;;GAEG;AACI,KAAK,UAAU,oBAAoB,CACxC,OAA0B;IAE1B,OAAO,2BAAiB,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC;AACpD,CAAC;AAED,2CAA2C;AAC3C,WAAW;AACX,2CAA2C;AAE3C;;GAEG;AACI,KAAK,UAAU,aAAa,CACjC,OAAuB;IAEvB,MAAM,MAAM,GAAG,MAAM,2BAAiB,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC;IACjE,OAAO,CAAC,GAAG,MAAM,CAAC,QAAQ,EAAE,GAAG,MAAM,CAAC,UAAU,EAAE,GAAG,MAAM,CAAC,IAAI,CAAoB,CAAC;AACvF,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@dommaker/harness",
3
- "version": "0.7.2",
3
+ "version": "0.7.3",
4
4
  "description": "通用工程约束框架 - 铁律系统、检查点验证、测试门控、拦截器",
5
5
  "keywords": [
6
6
  "harness",