strata-storage
Version:
Zero-dependency universal storage plugin providing a unified API for all storage operations across web, Android, and iOS platforms
65 lines (64 loc) • 3.17 kB
JavaScript
// Core exports - zero dependencies, works everywhere
export { Strata } from "./core/Strata.js";
export { BaseAdapter } from "./core/BaseAdapter.js";
export { AdapterRegistry } from "./core/AdapterRegistry.js";
// Web adapters - work in any JavaScript environment
export { LocalStorageAdapter } from "./adapters/web/LocalStorageAdapter.js";
export { SessionStorageAdapter } from "./adapters/web/SessionStorageAdapter.js";
export { IndexedDBAdapter } from "./adapters/web/IndexedDBAdapter.js";
export { CookieAdapter } from "./adapters/web/CookieAdapter.js";
export { CacheAdapter } from "./adapters/web/CacheAdapter.js";
export { MemoryAdapter } from "./adapters/web/MemoryAdapter.js";
// Core features
export { EncryptionManager } from "./features/encryption.js";
export { CompressionManager } from "./features/compression.js";
export { TTLManager } from "./features/ttl.js";
export { QueryEngine } from "./features/query.js";
export { SyncManager } from "./features/sync.js";
export { StorageObserver } from "./features/observer.js";
// Utils
export { isValidKey, isValidValue, serializeValue, deserializeValue, generateId, createError, retry, debounce, throttle, } from "./utils/index.js";
// Create and export a default storage instance that works immediately
import { Strata } from "./core/Strata.js";
import { LocalStorageAdapter } from "./adapters/web/LocalStorageAdapter.js";
import { SessionStorageAdapter } from "./adapters/web/SessionStorageAdapter.js";
import { IndexedDBAdapter } from "./adapters/web/IndexedDBAdapter.js";
import { CookieAdapter } from "./adapters/web/CookieAdapter.js";
import { CacheAdapter } from "./adapters/web/CacheAdapter.js";
import { MemoryAdapter } from "./adapters/web/MemoryAdapter.js";
// Create a singleton instance with web adapters pre-registered
const storage = new Strata({
defaultStorages: ['memory', 'localStorage', 'sessionStorage', 'indexedDB'], // Order of preference
autoInitialize: false, // We'll initialize it ourselves
});
// Register only web adapters by default
try {
// Memory adapter should always be available as fallback
storage.registerAdapter(new MemoryAdapter());
// Browser storage adapters
storage.registerAdapter(new LocalStorageAdapter());
storage.registerAdapter(new SessionStorageAdapter());
storage.registerAdapter(new IndexedDBAdapter());
storage.registerAdapter(new CookieAdapter());
storage.registerAdapter(new CacheAdapter());
}
catch (error) {
console.warn('Strata Storage adapter registration warning:', error);
}
// Initialize the storage instance
let initializationPromise = null;
const ensureInitialized = async () => {
if (!initializationPromise) {
initializationPromise = storage.initialize().catch((error) => {
console.warn('Strata Storage initialization warning:', error);
// Continue working even if some adapters fail
});
}
return initializationPromise;
};
// Start initialization immediately but don't block module loading
ensureInitialized();
// Export the ready-to-use storage instance
export { storage, ensureInitialized };
// Default export for convenience
export default storage;