| import { getApp, getApps, initializeApp } from 'firebase/app' |
| import { getAuth } from 'firebase/auth' |
| import { getFirestore } from 'firebase/firestore' |
| import { getStorage } from 'firebase/storage' |
|
|
| const firebaseConfig = { |
| apiKey: process.env.NEXT_PUBLIC_FIREBASE_API_KEY, |
| authDomain: process.env.NEXT_PUBLIC_FIREBASE_AUTH_DOMAIN, |
| projectId: process.env.NEXT_PUBLIC_FIREBASE_PROJECT_ID, |
| storageBucket: process.env.NEXT_PUBLIC_FIREBASE_STORAGE_BUCKET, |
| messagingSenderId: process.env.NEXT_PUBLIC_FIREBASE_MESSAGING_SENDER_ID, |
| appId: process.env.NEXT_PUBLIC_FIREBASE_APP_ID, |
| } |
|
|
| const requiredFirebaseConfig = [ |
| ['NEXT_PUBLIC_FIREBASE_API_KEY', firebaseConfig.apiKey], |
| ['NEXT_PUBLIC_FIREBASE_AUTH_DOMAIN', firebaseConfig.authDomain], |
| ['NEXT_PUBLIC_FIREBASE_PROJECT_ID', firebaseConfig.projectId], |
| ['NEXT_PUBLIC_FIREBASE_STORAGE_BUCKET', firebaseConfig.storageBucket], |
| ['NEXT_PUBLIC_FIREBASE_MESSAGING_SENDER_ID', firebaseConfig.messagingSenderId], |
| ['NEXT_PUBLIC_FIREBASE_APP_ID', firebaseConfig.appId], |
| ] as const |
|
|
| function getMissingFirebaseConfig() { |
| return requiredFirebaseConfig |
| .filter(([, value]) => !value) |
| .map(([key]) => key) |
| } |
|
|
| function getFirebaseApp() { |
| const missingConfig = getMissingFirebaseConfig() |
| if (missingConfig.length > 0) { |
| throw new Error(`Firebase is not configured. Missing: ${missingConfig.join(', ')}`) |
| } |
|
|
| return getApps().length ? getApp() : initializeApp(firebaseConfig) |
| } |
|
|
| export function getFirebaseAuth() { |
| return getAuth(getFirebaseApp()) |
| } |
|
|
| export function getFirebaseDb() { |
| return getFirestore(getFirebaseApp()) |
| } |
|
|
| export function getFirebaseStorage() { |
| return getStorage(getFirebaseApp()) |
| } |
|
|