Files
crawler-plugin/admin-frontend-vue/src/pages/records/public-version-contract.ts
T
huangzd1997 a6bc6b80b3 task-139(记录与版本中心): 补充版本接口公开契约回归夹具
新增 public-version-contract.ts:/api/version(/latest) 字段与空语义匹配夹具。

TDD: task-139.test.ts 8 用例 RED→GREEN。
2026-09-05 17:43:24 +08:00

25 lines
1.3 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
/** 客户端公开版本接口回归契约(任务 139,细则见 09 模块):字段名/空语义固定夹具;纯逻辑。 */
/** 公开接口契约键:/api/version {version,desc,url}/api/version/latest {version,file_url}。 */
export function publicContractKeys(): string[] {
return ['version', 'desc', 'url', 'file_url']
}
function hasOwn(record: Record<string, unknown>, key: string): boolean {
return Object.prototype.hasOwnProperty.call(record, key)
}
/** 最新版本契约:顶层必须带 version 与 file_url(允许 null/空串),且不被 success 信封包裹。 */
export function matchesPublicLatestContract(payload: unknown): boolean {
if (!payload || typeof payload !== 'object') return false
const record = payload as Record<string, unknown>
return hasOwn(record, 'version') && hasOwn(record, 'file_url') && !hasOwn(record, 'success')
}
/** 基础版本契约:顶层必须带 version、desc、url,不被 success 信封包裹。 */
export function matchesPublicVersionContract(payload: unknown): boolean {
if (!payload || typeof payload !== 'object') return false
const record = payload as Record<string, unknown>
return hasOwn(record, 'version') && hasOwn(record, 'desc') && hasOwn(record, 'url') && !hasOwn(record, 'success')
}