@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.
- package/README.md +152 -4
- package/dist/gates/contract.d.ts +41 -0
- package/dist/gates/contract.d.ts.map +1 -0
- package/dist/gates/contract.js +264 -0
- package/dist/gates/contract.js.map +1 -0
- package/dist/gates/index.d.ts +20 -0
- package/dist/gates/index.d.ts.map +1 -0
- package/dist/gates/index.js +39 -0
- package/dist/gates/index.js.map +1 -0
- package/dist/gates/performance.d.ts +81 -0
- package/dist/gates/performance.d.ts.map +1 -0
- package/dist/gates/performance.js +336 -0
- package/dist/gates/performance.js.map +1 -0
- package/dist/gates/review.d.ts +37 -0
- package/dist/gates/review.d.ts.map +1 -0
- package/dist/gates/review.js +149 -0
- package/dist/gates/review.js.map +1 -0
- package/dist/gates/security.d.ts +45 -0
- package/dist/gates/security.d.ts.map +1 -0
- package/dist/gates/security.js +221 -0
- package/dist/gates/security.js.map +1 -0
- package/dist/gates/types.d.ts +82 -0
- package/dist/gates/types.d.ts.map +1 -0
- package/dist/gates/types.js +6 -0
- package/dist/gates/types.js.map +1 -0
- package/dist/index.d.ts +9 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +12 -0
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
|
@@ -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 @@
|
|
|
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';
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA
|
|
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
|
|
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"}
|