2.6 KiB
2.6 KiB
MODIFIED Requirements
Requirement: CheckerRegistry 注册中心
系统 SHALL 在 src/server/checker/runner/registry.ts 中提供 CheckerRegistry 类,支持 register(checker)、get(type) 和 supportedTypes。重复注册同一 type SHALL 抛出错误。registry 内部 SHALL 存储 CheckerDefinition(使用默认泛型参数),对外提供类型擦除后的接口。
Scenario: 查询支持的 type 列表
- WHEN 注册了 "http" 和 "cmd" 两个 checker 后查询
registry.supportedTypes - THEN 返回的数组 SHALL 包含
["http", "cmd"](按注册顺序)
Requirement: Command checker 提供契约片段
系统 SHALL 支持 checker 提供自身 TypeBox 配置契约片段,用于描述该 checker 的 defaults 分组、target 领域分组和 expect 分组。
Scenario: Cmd checker 提供契约片段
- WHEN Cmd checker 被注册
- THEN registry SHALL 能提供 Cmd defaults、Cmd target 和 Cmd expect 的 TypeBox 契约片段
Requirement: 配置解析通过 registry 委托 checker
系统 SHALL 在 config-loader.ts 的配置加载流程中通过 checkerRegistry 发现已注册 checker,组合公共 TypeBox 契约与 checker 契约,并将 checker 专属语义校验和解析委托给对应 checker。
Scenario: 配置解析委托 checker
- WHEN config-loader 解析一个 type 为 "cmd" 的 target
- THEN config-loader SHALL 调用
checkerRegistry.get("cmd")获取对应 checker,并委托该 checker 执行语义校验和 resolve
Requirement: Command text 断言位于 Cmd 目录
系统 SHALL 在 checker 专用目录中提供 text 断言函数。
Scenario: Command text 断言位于 Cmd 目录
- WHEN Cmd checker 需要对 stdout/stderr 执行文本规则校验
- THEN SHALL 调用
runner/cmd/text.ts中的checkTextRules(text, rules, phase)
Requirement: Command 专用 expect
系统 SHALL 在 checker 专用目录中提供 exitCode 断言函数。
Scenario: Command 专用 expect
- WHEN Cmd checker 需要校验退出码
- THEN SHALL 调用
runner/cmd/expect.ts中的checkExitCode()
Requirement: Checker 接口定义
系统 SHALL 在 src/server/checker/runner/types.ts 中定义面向扩展的泛型 CheckerDefinition<TResolved extends ResolvedTargetBase = ResolvedTargetBase>,包含 type、configKey、TypeBox 配置契约、启动期语义校验、resolve、execute、serialize 成员。
Scenario: type 与 configKey 默认一致
- WHEN checker 定义
type: "cmd" - THEN checker 的
configKeySHALL 默认使用"cmd",对应 target 的cmd分组和 defaults.cmd 分组