reduxed-chrome-storage
Version:
Redux interface to chrome.storage (browser.storage). A unified way to use Redux in all modern browser extensions. The only way to get Redux working in Manifest V3 Chrome extensions
65 lines (64 loc) • 1.85 kB
TypeScript
export declare enum StorageAreaName {
local = "local",
sync = "sync"
}
interface StorageChange {
newValue?: any;
oldValue?: any;
}
interface StorageChanges {
[key: string]: StorageChange;
}
export interface StorageListener {
(changes: StorageChanges, area: StorageAreaName): void;
}
export interface StorageAddListener {
(listener: StorageListener): void;
}
export interface StorageData {
[key: string]: any;
}
export declare type StorageGetCallback = (data: StorageData) => void;
export declare type StorageGetKeys = string | string[] | StorageData | null;
export interface StorageAreaQuotas {
QUOTA_BYTES: number;
QUOTA_BYTES_PER_ITEM?: number;
}
export interface StorageAreaCallbacked extends StorageAreaQuotas {
get(callback: StorageGetCallback): void;
get(keys: StorageGetKeys, callback: StorageGetCallback): void;
set(data: StorageData, callback?: () => void): void;
clear(): void;
}
export interface StorageAreaPromised extends StorageAreaQuotas {
get(keys?: StorageGetKeys): Promise<StorageData>;
set(data: StorageData): Promise<void>;
clear(): void;
}
export interface ApisNamespace {
storage: {
onChanged: {
addListener: StorageAddListener;
};
};
runtime: {
lastError?: {
message?: string;
};
};
}
export interface ChromeNamespace extends ApisNamespace {
storage: {
local: StorageAreaCallbacked;
sync: StorageAreaCallbacked;
onChanged: ApisNamespace['storage']['onChanged'];
};
}
export interface BrowserNamespace extends ApisNamespace {
storage: {
local: StorageAreaPromised;
sync: StorageAreaPromised;
onChanged: ApisNamespace['storage']['onChanged'];
};
}
export {};