实现示例type Component = { name: string; version: string }

type Node = { name: string; version: string }

function semverLike(v: string): boolean { return /^(\d+\.\d+\.\d+)(?:[-A-Za-z0-9_.]+)?$/.test(v) }

function align(graph: Node[], sbom: Component[]): { ok: boolean; missing: string[]; mismatched: string[] } {

const sb = new Map<string, string>()

for (const c of sbom) if (c.name && semverLike(c.version)) sb.set(c.name, c.version)

const missing: string[] = []

const mismatched: string[] = []

for (const n of graph) {

const v = sb.get(n.name)

if (!v) missing.push(n.name)

else if (v !== n.version) mismatched.push(`${n.name}:${n.version}->${v}`)

}

return { ok: missing.length === 0 && mismatched.length === 0, missing, mismatched }

}

审计与CI门禁记录缺失与不一致清单;不通过直接阻断并提示修复路径。SBOM与依赖图变更需审批与归档。

点赞(0) 打赏

评论列表 共有 0 条评论

暂无评论
立即
投稿

微信公众账号

微信扫一扫加关注

发表
评论
返回
顶部