#!/usr/bin/env bash # Tailwind 임의값 토큰 우회 차단 — plan 5대 원칙 #1. # # 새 코드에서 bg-[var(--*)] / text-[var(--*)] / border-[var(--*)] 등을 grep으로 차단. # @theme 토큰을 우회해 임의값을 작성하면 이 스크립트가 fail. # # 예외: # - frontend/src/lib/components/ui/ (프리미티브 정의 자체는 토큰 매핑이 필요할 수 있음) # - frontend/src/app.css (@theme/:root 선언이므로 grep 대상 아님) # # 사용: # npm run -C frontend lint:tokens # # 향후 pre-commit hook에 포함: # .git/hooks/pre-commit → npm run -C frontend lint:tokens set -e # 스크립트 위치 기준으로 frontend 루트로 이동 SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" FRONTEND_DIR="$(dirname "$SCRIPT_DIR")" cd "$FRONTEND_DIR" PATTERNS=( 'bg-\[var\(--' 'text-\[var\(--' 'border-\[var\(--' 'ring-\[var\(--' 'fill-\[var\(--' 'stroke-\[var\(--' ) EXIT=0 TOTAL=0 for p in "${PATTERNS[@]}"; do HITS=$(grep -rEn \ --include='*.svelte' \ --include='*.ts' \ --include='*.js' \ --exclude-dir=node_modules \ --exclude-dir=.svelte-kit \ --exclude-dir=ui \ "$p" src 2>/dev/null || true) if [ -n "$HITS" ]; then COUNT=$(echo "$HITS" | wc -l | tr -d ' ') TOTAL=$((TOTAL + COUNT)) echo "" echo "❌ 금지 패턴 발견: $p ($COUNT 건)" echo "$HITS" | head -20 if [ "$COUNT" -gt 20 ]; then echo "... (이하 $((COUNT - 20)) 건 생략)" fi EXIT=1 fi done if [ $EXIT -eq 0 ]; then echo "✅ 토큰 우회 패턴 없음." else echo "" echo "총 $TOTAL 건의 토큰 우회 패턴이 발견되었습니다." echo "→ @theme 유틸리티 (bg-surface, text-dim, border-default 등)로 교체하세요." fi exit $EXIT