capacitor-firebase-kit
Version:
Provider-less Firebase Kit - Universal Firebase services integration for React, React Native, and Capacitor apps
72 lines • 2.68 kB
JavaScript
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