// 依赖安全下界守卫：锁定 next/react/react-dom 不得低于修补 RCE / 安全补丁的最低版本。
// dependencyFloors.test.ts 读取 package.json 声明版本比对，回归防止误降级回易受攻击版本（CR-C1）。

export const SECURITY_FLOORS = {
  next: "15.5.20",
  react: "19.2.7",
  "react-dom": "19.2.7",
} as const;

// 语义版本比较：version >= floor（仅比对 major.minor.patch，忽略预发布 / 构建元数据）。
// 去除前导 ^ / ~ 范围符；缺省段按 0 计；非数字段按 0 计。
export function isAtLeast(version: string, floor: string): boolean {
  const a = parseSemver(version);
  const b = parseSemver(floor);
  for (let i = 0; i < 3; i += 1) {
    const av = a[i] ?? 0;
    const bv = b[i] ?? 0;
    if (av > bv) return true;
    if (av < bv) return false;
  }
  return true;
}

function parseSemver(raw: string): number[] {
  const cleaned = raw.trim().replace(/^[\^~]/, "");
  return cleaned.split(".").map((part) => {
    const n = Number.parseInt(part, 10);
    return Number.isNaN(n) ? 0 : n;
  });
}
