UNPKG

capacitor-firebase-kit

Version:

Provider-less Firebase Kit - Universal Firebase services integration for React, React Native, and Capacitor apps

72 lines 2.68 kB
import { platformDetector } from './platform-detector'; class FirebaseKitSingleton { constructor() { this.initialized = false; this.config = null; this.adapter = null; this.serviceInstances = new Map(); } static getInstance() { if (!FirebaseKitSingleton.instance) { FirebaseKitSingleton.instance = new FirebaseKitSingleton(); } return FirebaseKitSingleton.instance; } async initialize(config) { if (this.initialized) { console.warn('FirebaseKit is already initialized'); return; } this.config = config; const platformInfo = platformDetector.detect(); // Dynamically load the appropriate adapter based on platform this.adapter = await this.loadPlatformAdapter(platformInfo.platform); await this.adapter.initialize(config); this.initialized = true; } async loadPlatformAdapter(platform) { switch (platform) { case 'web': const { WebAdapter } = await import('../adapters/web-adapter'); return new WebAdapter(); case 'react-native': const { ReactNativeAdapter } = await import('../adapters/react-native-adapter'); return new ReactNativeAdapter(); case 'capacitor': const { CapacitorAdapter } = await import('../adapters/capacitor-adapter'); return new CapacitorAdapter(); case 'node': const { NodeAdapter } = await import('../adapters/node-adapter'); return new NodeAdapter(); default: throw new Error(`Unsupported platform: ${platform}`); } } async getService(serviceName) { if (!this.initialized || !this.adapter) { throw new Error('FirebaseKit must be initialized before accessing services'); } // Check if service instance already exists if (this.serviceInstances.has(serviceName)) { return this.serviceInstances.get(serviceName); } // Lazy load the service const service = await this.adapter.getService(serviceName); this.serviceInstances.set(serviceName, service); return service; } isInitialized() { return this.initialized; } getConfig() { return this.config; } reset() { this.initialized = false; this.config = null; this.adapter = null; this.serviceInstances.clear(); } } export const firebaseKitSingleton = FirebaseKitSingleton.getInstance(); //# sourceMappingURL=firebase-kit-singleton.js.map