实现示例function validName(n: string): boolean {
if (n.length < 1 || n.length > 214) return false
if (/\s/.test(n)) return false
if (n.startsWith('.')) return false
if (/^[._]/.test(n)) return false
if (/[A-Z]/.test(n)) return false
if (/[^a-z0-9@_\-./]/.test(n)) return false
if (n.includes('..')) return false
if (/^@/.test(n)) {
const parts = n.split('/')
if (parts.length !== 2) return false
if (!/^@[a-z0-9_\-]+$/.test(parts[0])) return false
if (!/^[a-z0-9_\-][a-z0-9_\-./]*$/.test(parts[1])) return false
}
return true
}
function evaluate(names: string[]): { ok: boolean; errors: string[] } {
const errors: string[] = []
for (const n of names) if (!validName(n)) errors.push(n)
return { ok: errors.length === 0, errors }
}
审计与发布治理审计不合规包名并阻断;产线仅接受规范化的作用域与名称。名称策略变更需审批与回归校验。

发表评论 取消回复