#!/usr/bin/env bash set -euo pipefail # Phase 8: WebAssembly 마이그레이션 - 기능 우선 아키텍처 (2026-07-03) # # DESIGN DECISION: prerender: false (not true) # # RATIONALE: # - prerender: true = SSR (Server-Side Rendering) - 서버가 정적 HTML 미리 생성 # - InteractiveWebAssembly = CSR (Client-Side Rendering) - 클라이언트에서 동적 렌더링 # - These are contradictory: cannot prerender interactive WebAssembly content # # OBSERVED PROBLEM with prerender: true: # 1. Unauthenticated users see prerendered HTML (no auth context) # 2. AuthorizeRouteView renders nothing (authorized content cannot prerender) # 3. After login, WebAssembly tries to render same component differently # 4. Conflict: static prerendered HTML vs. dynamic WASM runtime # # SOLUTION: prerender: false # - App boots to blank screen briefly (WebAssembly loading ~0.5-2s) # - After load: all protected pages render correctly with auth # - No conflicting render modes # - Functional > Performance optimization # # See CLAUDE.md Phase 8 for architecture details. app_file="TaxBaik.Web.Client/Components/Admin/App.razor" login_file="TaxBaik.Web.Client/Components/Admin/Pages/Login.razor" for file in "$app_file" "$login_file"; do if [ ! -f "$file" ]; then echo "Missing admin render file: $file" >&2 exit 1 fi done # Require WebAssemblyRenderMode (regardless of prerender value) if ! grep -nE "InteractiveWebAssemblyRenderMode" "$app_file" >/dev/null; then echo "Admin shell must use InteractiveWebAssemblyRenderMode." >&2 exit 1 fi # Reject InteractiveServerRenderMode (Blazor Server architecture forbidden) if grep -nE "InteractiveServerRenderMode" "$app_file" >/dev/null; then echo "Admin shell must NOT use InteractiveServerRenderMode (Blazor Server)." >&2 exit 1 fi # Login page also requires WebAssembly mode # Accept both: @rendermode InteractiveWebAssembly OR @rendermode @(new InteractiveWebAssemblyRenderMode(...)) if ! grep -nE "InteractiveWebAssembly" "$login_file" >/dev/null; then echo "Login page must use InteractiveWebAssemblyRenderMode or @rendermode InteractiveWebAssembly." >&2 exit 1 fi echo "✅ Admin render harness passed (WebAssembly mode verified)." echo " ℹ️ Note: prerender: false by design (protects @Authorize content from SSR conflicts)"