mirror of https://github.com/dessant/buster
You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
74 lines
1.8 KiB
JavaScript
74 lines
1.8 KiB
JavaScript
import {storageRevisions} from 'utils/config';
|
|
|
|
async function isStorageArea({area = 'local'} = {}) {
|
|
try {
|
|
await browser.storage[area].get('');
|
|
return true;
|
|
} catch (err) {
|
|
return false;
|
|
}
|
|
}
|
|
|
|
const storageReady = {};
|
|
async function isStorageReady({area = 'local'} = {}) {
|
|
if (storageReady[area]) {
|
|
return true;
|
|
} else {
|
|
const {storageVersion} = await browser.storage[area].get('storageVersion');
|
|
if (storageVersion && storageVersion === storageRevisions[area]) {
|
|
storageReady[area] = true;
|
|
return true;
|
|
}
|
|
}
|
|
|
|
return false;
|
|
}
|
|
|
|
async function ensureStorageReady({area = 'local'} = {}) {
|
|
if (!storageReady[area]) {
|
|
return new Promise((resolve, reject) => {
|
|
let stop;
|
|
|
|
const checkStorage = async function () {
|
|
if (await isStorageReady({area})) {
|
|
window.clearTimeout(timeoutId);
|
|
resolve();
|
|
} else if (stop) {
|
|
reject(new Error(`Storage (${area}) is not ready`));
|
|
} else {
|
|
window.setTimeout(checkStorage, 30);
|
|
}
|
|
};
|
|
|
|
const timeoutId = window.setTimeout(function () {
|
|
stop = true;
|
|
}, 60000); // 1 minute
|
|
|
|
checkStorage();
|
|
});
|
|
}
|
|
}
|
|
|
|
async function get(keys = null, {area = 'local'} = {}) {
|
|
await ensureStorageReady({area});
|
|
return browser.storage[area].get(keys);
|
|
}
|
|
|
|
async function set(obj, {area = 'local'} = {}) {
|
|
await ensureStorageReady({area});
|
|
return browser.storage[area].set(obj);
|
|
}
|
|
|
|
async function remove(keys, {area = 'local'} = {}) {
|
|
await ensureStorageReady({area});
|
|
return browser.storage[area].remove(keys);
|
|
}
|
|
|
|
async function clear({area = 'local'} = {}) {
|
|
await ensureStorageReady({area});
|
|
return browser.storage[area].clear();
|
|
}
|
|
|
|
export default {get, set, remove, clear};
|
|
export {isStorageArea, isStorageReady, ensureStorageReady};
|