@amitkhare/indexed-storage
Version:
A modern, localStorage-like API for IndexedDB with instance-based and static APIs, multi-store support, configurable databases, and enhanced capabilities
151 lines (128 loc) • 3.83 kB
TypeScript
/**
* IndexedStorage - A modern, localStorage-like API for IndexedDB operations
*/
export interface IndexedStorageConfig {
/** Enable console logging for debugging (default: false) */
enableLogging?: boolean;
}
export interface StorageManager {
storage: {
getItem(key: string): Promise<any>;
setItem(key: string, value: any): Promise<void>;
removeItem(key: string): Promise<void>;
hasItem(key: string): Promise<boolean>;
clear(): Promise<void>;
getAllKeys(): Promise<string[]>;
testAvailability(): Promise<boolean>;
};
}
export interface IndexedDBManager {
get(key: string): Promise<any>;
save(key: string, data: any): Promise<void>;
remove(key: string): Promise<void>;
clear(): Promise<void>;
getAllKeys(): Promise<string[]>;
testAvailability(): Promise<boolean>;
}
export interface IndexedStorageAPI {
/**
* Configure IndexedStorage options
* @param options - Configuration options
*
* @example
* // Enable logging for debugging
* IndexedStorage.configure({ enableLogging: true });
*
* // Disable logging (default)
* IndexedStorage.configure({ enableLogging: false });
*/
configure(options?: IndexedStorageConfig): void;
/**
* Get current configuration
* @returns Current configuration object
*/
getConfig(): IndexedStorageConfig;
/**
* Retrieve an item from storage
* @param key - The key to retrieve
* @returns The stored value or null if not found
*/
getItem(key: string): Promise<any | null>;
/**
* Store an item in storage
* @param key - The key to store under
* @param value - The value to store (will be serialized)
*/
setItem(key: string, value: any): Promise<void>;
/**
* Remove an item from storage
* @param key - The key to remove
*/
removeItem(key: string): Promise<void>;
/**
* Check if an item exists in storage
* @param key - The key to check
* @returns True if the key exists
*/
hasItem(key: string): Promise<boolean>;
/**
* Clear all items from storage
*/
clear(): Promise<void>;
/**
* Get all keys from storage
* @returns Array of all keys
*/
getAllKeys(): Promise<string[]>;
/**
* Get the number of items in storage
* @returns Number of stored items
*/
length(): Promise<number>;
/**
* Get a key by index (for iteration)
* @param index - The index of the key
* @returns The key at the specified index or null
*/
key(index: number): Promise<string | null>;
/**
* Test if storage is available and working
* @returns True if storage is available
*/
isAvailable(): Promise<boolean>;
/**
* Iterate over all items in storage
* @param callback - Function called for each item (key, value, index)
*/
forEach(callback: (key: string, value: any, index: number) => void | Promise<void>): Promise<void>;
/**
* Get multiple items at once
* @param keys - Array of keys to retrieve
* @returns Object with key-value pairs
*/
getMultiple(keys: string[]): Promise<Record<string, any>>;
/**
* Set multiple items at once
* @param items - Object with key-value pairs to store
*/
setMultiple(items: Record<string, any>): Promise<void>;
/**
* Remove multiple items at once
* @param keys - Array of keys to remove
*/
removeMultiple(keys: string[]): Promise<void>;
}
/**
* Main IndexedStorage instance
*/
declare const IndexedStorage: IndexedStorageAPI;
/**
* Storage manager composable
*/
export function useStorageManager(): StorageManager;
/**
* IndexedDB composable
*/
export function useIndexedDB(): IndexedDBManager;
export default IndexedStorage;
export { IndexedStorage };