File size: 2,029 Bytes
d646dd7
 
 
 
 
 
 
 
bb59211
 
 
 
 
 
 
 
 
d646dd7
bb59211
 
d646dd7
 
 
 
 
 
 
 
 
 
bb59211
 
 
 
 
 
 
 
d646dd7
 
 
bb59211
 
d646dd7
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
#!/bin/bash
# 校验:代码中引用的 iconify 图标是否全部在预加载文件里。
# 缺失的图标会在运行时请求 api.iconify.design → 页面图标闪烁/空白。
# 用法: scripts/check_icon_preload.sh ;退出码 0 = 齐全,1 = 有缺失。
ROOT="$(cd "$(dirname "$0")/.." && pwd)"
PRE="$ROOT/web/static/iconify-preload.js"
[ -f "$PRE" ] || { echo "找不到 $PRE"; exit 1; }

# 代码里所有 "前缀:图标名" 引用(ant-design:xxx 等)。
#
# ★ app/processing/modules/ 也必须扫 —— 工作流节点的 icon 是在 Python 里声明的
#   (如 data_cleaning.py 的 ``icon = "ant-design:check-circle-outlined"``),
#   这些图标和前端硬编码的一样会被调色板渲染。曾经漏扫这里,导致新增节点
#   用了白名单外的图标而检查脚本仍报"全部已预加载"。
#
#   Python 文件里会有 ``cuda:0`` / ``-c:v`` 之类的噪声,但下面只认 ant-design:
#   前缀,噪声会被过滤掉。
USED="$(grep -rhoE "[a-z0-9-]+:[a-z0-9-]+" \
  "$ROOT/web/workflow-studio/src" "$ROOT/web/static/js" "$ROOT/web/templates" \
  "$ROOT/app/processing/modules" 2>/dev/null \
  | sort -u)"

MISSING=""
while IFS= read -r ref; do
  # 只检查 ant-design 前缀(预加载文件目前只包含 ant-design)
  case "$ref" in
    ant-design:*) ;;
    *) continue ;;
  esac
  name="${ref#ant-design:}"
  if ! grep -q "'${name}': { body" "$PRE"; then
    # 指出是谁声明的,便于补齐
    WHERE="$(grep -rlE "[\"']?${ref}[\"']?" \
      "$ROOT/web/workflow-studio/src" "$ROOT/web/static/js" "$ROOT/web/templates" \
      "$ROOT/app/processing/modules" 2>/dev/null \
      | sed "s|^$ROOT/||" | paste -sd, -)"
    MISSING="$MISSING"$'\n'"  $ref    ← ${WHERE:-未知位置}"
  fi
done <<< "$USED"

if [ -n "$MISSING" ]; then
  echo "以下图标未预加载(iconify-icon 会去 api.iconify.design 拉,页面卡顿/空白)。"
  echo "请改用 $PRE 白名单里的图标,或把图标数据补进去:"
  echo "$MISSING"
  exit 1
fi
echo "全部引用图标均已预加载 ✓"