实现示例type Entry = { name: string; versions: string[] }

function semverValid(v: string): boolean { return /^(0|[1-9]\d*)\.(0|[1-9]\d*)\.(0|[1-9]\d*)(?:-[0-9A-Za-z-]+(?:\.[0-9A-Za-z-]+)*)?(?:\+[0-9A-Za-z-]+(?:\.[0-9A-Za-z-]+)*)?$/.test(v) }

function canUnify(versions: string[]): boolean { if (versions.length <= 1) return true; return versions.every(semverValid) }

function evaluate(entries: Entry[], maxDistinct: number): { ok: boolean; errors: string[] } {

const errors: string[] = []

for (const e of entries) {

const distinct = new Set(e.versions)

if (distinct.size > maxDistinct) errors.push(`${e.name}:${distinct.size}`)

if (!canUnify(e.versions)) errors.push(`invalid:${e.name}`)

}

return { ok: errors.length === 0, errors }

}

审计与CI门禁审计重复版本与统一策略;超过阈值阻断并输出修复建议。去重策略变更需审批与归档。

点赞(0) 打赏

评论列表 共有 0 条评论

暂无评论
立即
投稿

微信公众账号

微信扫一扫加关注

发表
评论
返回
顶部