Files
web-temp/layers/composables/useGetGameAlias.ts
2025-09-19 19:11:01 +09:00

77 lines
2.1 KiB
TypeScript

import { getHeader } from 'h3'
import { useRuntimeConfig, useRequestEvent } from 'nuxt/app'
/**
* 게임 별칭을 추출하는 유틸리티 함수
* @param host 호스트 문자열
* @param baseDomain 기본 도메인
* @returns 게임 별칭 또는 빈 문자열
*/
const extractGameAliasFromHost = (host: string, baseDomain: string): string => {
if (!host || !host.includes(baseDomain)) {
return ''
}
const subdomain = host.split(':')[0]
return subdomain && subdomain !== 'www' ? subdomain : ''
}
/**
* 서버 사이드에서 게임 별칭을 가져오는 함수
* @param baseDomain 기본 도메인
* @returns 게임 별칭 또는 빈 문자열
*/
const getGameAliasFromServer = (baseDomain: string): string => {
try {
const event = useRequestEvent()
if (!event) {
return ''
}
// 미들웨어에서 설정한 gameAlias가 있다면 우선 사용
if (event.context.gameAlias) {
return event.context.gameAlias
}
const host = getHeader(event, 'host') || ''
return extractGameAliasFromHost(host, baseDomain)
} catch (error) {
// eslint-disable-next-line no-console
console.error('useGetGameAlias server error:', error)
return ''
}
}
/**
* 클라이언트 사이드에서 게임 별칭을 가져오는 함수
* @param baseDomain 기본 도메인
* @returns 게임 별칭 또는 빈 문자열
*/
const getGameAliasFromClient = (baseDomain: string): string => {
try {
const host = window.location.host
return extractGameAliasFromHost(host, baseDomain)
} catch (error) {
// eslint-disable-next-line no-console
console.error('useGetGameAlias client error:', error)
return ''
}
}
/**
* 게임 별칭을 가져오는 컴포저블 함수
* 서버와 클라이언트 환경에서 모두 동작
* @returns 게임 별칭 문자열
*/
export const useGetGameAlias = (): string => {
const config = useRuntimeConfig()
const baseDomain = (config.public.baseDomain || '.onstove.com') as string
if (import.meta.client) {
return getGameAliasFromClient(baseDomain)
}
return getGameAliasFromServer(baseDomain)
}