export type RuntimeNotFoundRecoveryAction = { nextStage: 'platform'; nextPath: '/'; shouldAlert: true; }; /** * 中文注释:直接打开 /runtime/<玩法>?work=<作品号> 时,如果作品不存在, * 弹窗关闭后必须回到首页,避免继续停留在没有运行态数据的空白页面。 */ export function resolveRuntimeNotFoundRecoveryAction( pathname: string, ): RuntimeNotFoundRecoveryAction | null { const normalizedPath = pathname.trim().toLowerCase().replace(/\/+$/u, ''); if ( normalizedPath === '/runtime/puzzle' || normalizedPath === '/runtime/match3d' || normalizedPath === '/runtime/big-fish' || normalizedPath === '/runtime/square-hole' || normalizedPath === '/runtime/visual-novel' ) { return { nextStage: 'platform', nextPath: '/', shouldAlert: true, }; } return null; } /** * 中文注释:公开作品详情页和运行态深链都可能在作品被删除或下架后失效。 * 这类入口没有上一层可回退的详情数据,确认提示后统一回首页,避免空详情页白屏。 */ export function resolveWorkNotFoundRecoveryAction( pathname: string, ): RuntimeNotFoundRecoveryAction | null { const normalizedPath = pathname.trim().toLowerCase().replace(/\/+$/u, ''); if ( normalizedPath === '/works/detail' || normalizedPath === '/gallery/puzzle/detail' || normalizedPath === '/gallery/visual-novel/detail' ) { return { nextStage: 'platform', nextPath: '/', shouldAlert: true, }; } return resolveRuntimeNotFoundRecoveryAction(pathname); }