#!/usr/bin/env bash set -euo pipefail CHECK_INTERVAL_DAYS=7 STATE_FILE=".antd-upgrade-state.json" CURRENT_ANTD="5" TARGET_ANTD="6" TARGET_PRO_COMPONENTS="3" RED='\033[0;31m' GREEN='\033[0;32m' YELLOW='\033[1;33m' NC='\033[0m' log_info() { echo -e "${GREEN}[INFO]${NC} $1"; } log_warn() { echo -e "${YELLOW}[WARN]${NC} $1"; } log_error() { echo -e "${RED}[ERROR]${NC} $1"; } check_npm_version() { local pkg=$1 local version version=$(npm view "$pkg" version 2>/dev/null || echo "unknown") echo "$version" } check_npm_dist_tag() { local pkg=$1 local tag=$2 local version version=$(npm view "$pkg" dist-tags."$tag" 2>/dev/null || echo "unknown") echo "$version" } get_major_version() { local version=$1 echo "$version" | cut -d. -f1 | sed 's/[^0-9]//g' } is_pro_components_v3_ready() { local pro_pkgs=( "@ant-design/pro-components" "@ant-design/pro-layout" "@ant-design/pro-table" "@ant-design/pro-form" "@ant-design/pro-list" "@ant-design/pro-descriptions" ) local all_ready=true for pkg in "${pro_pkgs[@]}"; do local version version=$(check_npm_version "$pkg") local major major=$(get_major_version "$version") if [[ "$major" == "$TARGET_PRO_COMPONENTS" ]]; then log_info "$pkg: v$version ✅ (v3 已发布)" elif [[ "$version" == "unknown" ]]; then log_warn "$pkg: 无法获取版本信息" all_ready=false else log_warn "$pkg: v$version ❌ (当前 v${major},需要 v${TARGET_PRO_COMPONENTS})" all_ready=false fi done $all_ready } check_antd_v6_compatibility() { local antd_version antd_version=$(check_npm_version "antd") local major major=$(get_major_version "$antd_version") if [[ "$major" == "$TARGET_ANTD" ]]; then log_info "antd: v$antd_version ✅ (v6 已正式发布)" return 0 else log_warn "antd: v$antd_version (当前 v${major},目标 v${TARGET_ANTD})" local next_version next_version=$(check_npm_dist_tag "antd" "next") if [[ "$next_version" != "unknown" ]]; then local next_major next_major=$(get_major_version "$next_version") if [[ "$next_major" == "$TARGET_ANTD" ]]; then log_info "antd@next: v$next_version (v6 预览版可用)" fi fi return 1 fi } check_react_compatibility() { local react_version react_version=$(check_npm_version "react") log_info "React: v$react_version" local react_major react_major=$(get_major_version "$react_version") if [[ "$react_major" -ge 19 ]]; then log_info "React v19+ 已发布,antd v5 存在兼容性警告,升级到 antd v6 可解决" fi } save_state() { local antd_v="$1" local pro_v="$2" local ready="$3" cat > "$STATE_FILE" <