实现示例type Purl = { type: string; name: string; version?: string; qualifiers?: Record<string,string>; namespace?: string }

const allowTypes = new Set<string>(['npm','maven','pypi','golang','nuget','github'])

function validName(n: string): boolean { return !!n && !/\s/.test(n) }

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

function qualifierAllowed(q?: Record<string,string>): boolean {

if (!q) return true

for (const [k,v] of Object.entries(q)) {

if (!/^[a-z0-9_\-]+$/.test(k)) return false

if (!/^[A-Za-z0-9_.:\-]+$/.test(v)) return false

}

return true

}

function evaluate(p: Purl): { ok: boolean; errors: string[] } {

const errors: string[] = []

if (!allowTypes.has(p.type)) errors.push('type')

if (!validName(p.name)) errors.push('name')

if (!semverLike(p.version)) errors.push('version')

if (!qualifierAllowed(p.qualifiers)) errors.push('qualifiers')

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

}

审计与运行治理审计 PURL 组件的类型、名称、版本与限定符;异常阻断并输出修复建议。与 SBOM 对齐组件标识,确保跨生态一致性。

点赞(0) 打赏

评论列表 共有 0 条评论

暂无评论
立即
投稿

微信公众账号

微信扫一扫加关注

发表
评论
返回
顶部