1
0

feat: 基础设施加固 — 修复构建、数据保留、错误边界、bundle 拆分

- 修复 build script 引用已删除的 registerCheckers,恢复生产构建
- 生产入口添加 SIGINT/SIGTERM 优雅关闭(与 dev.ts 一致)
- 新增 runtime.retention 配置(默认 7d),ProbeStore.prune() 定时清理过期数据
- parseDuration 扩展支持 h/d 单位
- 新增前端 ErrorBoundary 组件,防止渲染错误白屏
- Vite codeSplitting.groups 拆分 vendor chunks(业务代码 1180KB → 47KB)
- 同步 delta specs 到主规范
This commit is contained in:
2026-05-13 16:48:56 +08:00
parent 26f0bfe104
commit bcfb907bd3
25 changed files with 458 additions and 26 deletions

View File

@@ -43,6 +43,16 @@ describe("parseDuration", () => {
expect(parseDuration("1.5s")).toBe(1500);
});
test("解析小时", () => {
expect(parseDuration("2h")).toBe(7200000);
expect(parseDuration("1h")).toBe(3600000);
});
test("解析天", () => {
expect(parseDuration("7d")).toBe(604800000);
expect(parseDuration("1d")).toBe(86400000);
});
test("拒绝非正整数毫秒结果", () => {
expect(() => parseDuration("0ms")).toThrow("正整数毫秒");
expect(() => parseDuration("1.5ms")).toThrow("正整数毫秒");
@@ -1214,4 +1224,51 @@ targets:
"expect.status 是未知字段",
);
});
test("retention 默认值为 7d", async () => {
const configPath = join(tempDir, "retention-default.yaml");
await writeFile(
configPath,
`targets:
- name: "test"
type: http
http:
url: "http://example.com"
`,
);
const config = await loadConfig(configPath);
expect(config.retentionMs).toBe(604800000);
});
test("retention 自定义值", async () => {
const configPath = join(tempDir, "retention-custom.yaml");
await writeFile(
configPath,
`runtime:
retention: "24h"
targets:
- name: "test"
type: http
http:
url: "http://example.com"
`,
);
const config = await loadConfig(configPath);
expect(config.retentionMs).toBe(86400000);
});
test("retention 非法格式抛出错误", async () => {
await expectConfigError(
"bad-retention.yaml",
`runtime:
retention: "7x"
targets:
- name: "test"
type: http
http:
url: "http://example.com"
`,
"无效的时长格式",
);
});
});