summaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorjoonhoekim <26rote@gmail.com>2025-11-03 10:39:51 +0900
committerjoonhoekim <26rote@gmail.com>2025-11-03 10:39:51 +0900
commit1c5dd9c10ce4264ab157f4a2479e2055a3487de4 (patch)
treee05cefb406b87d6152a7c08a5b96057528c796b5 /lib
parent98d178c8fe20a61a87e5d8f20e7d310ff6fefd6b (diff)
(김준회) 벤더 로그인화면 영상 더 크게 변경
Diffstat (limited to 'lib')
-rw-r--r--lib/service-worker/register.ts118
1 files changed, 118 insertions, 0 deletions
diff --git a/lib/service-worker/register.ts b/lib/service-worker/register.ts
new file mode 100644
index 00000000..0ae9ab2b
--- /dev/null
+++ b/lib/service-worker/register.ts
@@ -0,0 +1,118 @@
+/**
+ * Service Worker 등록 유틸리티
+ *
+ * 클라이언트 측에서 Service Worker를 등록하고
+ * 캐시 상태를 확인할 수 있는 헬퍼 함수들
+ */
+
+export interface CacheStatus {
+ total: number;
+ cached: number;
+ urls: Array<{ url: string; cached: boolean }>;
+}
+
+/**
+ * Service Worker 등록
+ */
+export async function registerServiceWorker(): Promise<ServiceWorkerRegistration | null> {
+ if (typeof window === 'undefined' || !('serviceWorker' in navigator)) {
+ console.log('Service Worker not supported');
+ return null;
+ }
+
+ try {
+ const registration = await navigator.serviceWorker.register('/service-worker.js', {
+ scope: '/',
+ });
+
+ console.log('Service Worker registered:', registration);
+
+ // 업데이트 확인
+ registration.addEventListener('updatefound', () => {
+ const newWorker = registration.installing;
+ console.log('Service Worker update found');
+
+ newWorker?.addEventListener('statechange', () => {
+ if (newWorker.state === 'installed' && navigator.serviceWorker.controller) {
+ console.log('New Service Worker available. Refresh to update.');
+ // 필요시 사용자에게 알림 표시 가능
+ }
+ });
+ });
+
+ return registration;
+ } catch (error) {
+ console.error('Service Worker registration failed:', error);
+ return null;
+ }
+}
+
+/**
+ * Service Worker 캐시 상태 확인
+ */
+export async function getCacheStatus(): Promise<CacheStatus | null> {
+ if (typeof window === 'undefined' || !navigator.serviceWorker.controller) {
+ return null;
+ }
+
+ return new Promise((resolve) => {
+ const messageChannel = new MessageChannel();
+
+ messageChannel.port1.onmessage = (event) => {
+ resolve(event.data);
+ };
+
+ navigator.serviceWorker.controller.postMessage(
+ { type: 'GET_CACHE_STATUS' },
+ [messageChannel.port2]
+ );
+
+ // 타임아웃 설정 (3초)
+ setTimeout(() => resolve(null), 3000);
+ });
+}
+
+/**
+ * Service Worker 캐시 삭제
+ */
+export async function clearCache(): Promise<boolean> {
+ if (typeof window === 'undefined' || !navigator.serviceWorker.controller) {
+ return false;
+ }
+
+ return new Promise((resolve) => {
+ const messageChannel = new MessageChannel();
+
+ messageChannel.port1.onmessage = (event) => {
+ resolve(event.data.success);
+ };
+
+ navigator.serviceWorker.controller.postMessage(
+ { type: 'CLEAR_CACHE' },
+ [messageChannel.port2]
+ );
+
+ setTimeout(() => resolve(false), 3000);
+ });
+}
+
+/**
+ * Service Worker 등록 해제
+ */
+export async function unregisterServiceWorker(): Promise<boolean> {
+ if (typeof window === 'undefined' || !('serviceWorker' in navigator)) {
+ return false;
+ }
+
+ try {
+ const registrations = await navigator.serviceWorker.getRegistrations();
+ for (const registration of registrations) {
+ await registration.unregister();
+ }
+ return true;
+ } catch (error) {
+ console.error('Service Worker unregistration failed:', error);
+ return false;
+ }
+}
+