{
{
if (!import.meta.client) return
-
+
const runtimeConfig = useRuntimeConfig()
const gameDataStore = useGameDataStore()
diff --git a/layers/utils/youtubeUtil.ts b/layers/utils/youtubeUtil.ts
index 9c0ef64..eb2b445 100644
--- a/layers/utils/youtubeUtil.ts
+++ b/layers/utils/youtubeUtil.ts
@@ -30,27 +30,48 @@ export const getYouTubeId = (url: string): string => {
}
/**
- * 유튜브 임베드 URL을 생성합니다.
+ * 유튜브 URL을 반환합니다.
* @param url - 유튜브 URL
* @param autoplay - 자동재생 여부
* @param rel - 관련 비디오 표시 여부
* @returns 임베드 URL
*/
-/** [TODO] 임베드 형태로 넘어오도록 데이터 수정 후 이부분 사용 필요 없음 */
-export const getYouTubeEmbedUrl = (
+export const getYouTubeUrl = (
url: string,
- autoplay: boolean = false,
+ autoplay: boolean = true,
rel: boolean = false
): string => {
- const videoId = getYouTubeId(url)
- if (!videoId) return ''
+ if (!url) return ''
- const params = new URLSearchParams()
- if (autoplay) params.append('autoplay', '1')
- if (!rel) params.append('rel', '0')
+ try {
+ const urlObj = new URL(url)
+ const params = new URLSearchParams(urlObj.searchParams)
- const queryString = params.toString()
- return `https://www.youtube.com/embed/${videoId}${queryString ? `?${queryString}` : ''}`
+ // 기본 파라미터 보장
+ if (!params.has('autoplay')) {
+ params.set('autoplay', autoplay ? '1' : '0')
+ }
+ if (!params.has('rel')) {
+ params.set('rel', rel ? '1' : '0')
+ }
+
+ const baseUrl = (() => {
+ const isEmbedUrl = urlObj.pathname.startsWith('/embed/')
+ if (isEmbedUrl) {
+ return `${urlObj.origin}${urlObj.pathname}`
+ }
+
+ // 일반 URL이면 id 추출 후 embed URL로 변환
+ const youtubeId = getYouTubeId(url)
+ if (!youtubeId) return ''
+ return `https://www.youtube.com/embed/${youtubeId}`
+ })()
+
+ const queryString = params.toString()
+ return queryString ? `${baseUrl}?${queryString}` : baseUrl
+ } catch {
+ return url
+ }
}
/**
diff --git a/nuxt.config.ts b/nuxt.config.ts
index 82095c9..de79a5f 100644
--- a/nuxt.config.ts
+++ b/nuxt.config.ts
@@ -112,5 +112,10 @@ export default defineNuxtConfig({
allowedHosts: true,
},
base: '/',
+ // 프로덕션에서 hydration mismatch 상세 로그 활성화 (디버깅 후 제거 권장)
+ define: {
+ __VUE_PROD_HYDRATION_MISMATCH_DETAILS__: true,
+ },
+ // 제거
},
})