import BaseStorage, { KEY_PREFIX } from './BaseStorage'; declare var chrome: any; export default class ChromeExtensionStorage extends BaseStorage { static get works(): boolean { return typeof chrome !== 'undefined' && Boolean(chrome?.storage?.local?.set); } protected async load(name: string, defaultValue: T): Promise { return new Promise((resolve) => { chrome.storage.local.get({ [name]: defaultValue }, (result: any) => { if (Object.prototype.hasOwnProperty.call(result, name)) { resolve(result[name]); } else { resolve(defaultValue); } }); }); } protected async save(name: string, value: T): Promise { return new Promise((resolve) => { chrome.storage.local.set({ [name]: value }, resolve); }); } public async getAll(): Promise> { return new Promise((resolve) => { chrome.storage.local.get(null, (obj: Record) => { const result: Record = {}; for (const [key, value] of Object.entries(obj)) { if (key.startsWith(KEY_PREFIX)) { result[key] = value; } } resolve(result); }); }); } public async setAll(obj: Record): Promise { return new Promise((resolve) => { chrome.storage.local.set(obj, resolve); }); } }