@plq/use-persisted-state
Version:
useState hook with persistence in storage
50 lines • 1.46 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.managed = exports.sync = exports.local = void 0;
const listeners = {
local: new Set(),
sync: new Set(),
managed: new Set(),
};
function fireStorageEvent(changes, area) {
listeners[area].forEach(listener => {
listener(changes);
});
}
chrome.storage.onChanged.addListener((changes, area) => {
fireStorageEvent(changes, area);
});
function createOnChanged(area) {
return {
addListener(listener) {
listeners[area].add(listener);
},
removeListener(listener) {
listeners[area].delete(listener);
},
hasListener(listener) {
return listeners[area].has(listener);
},
};
}
const createStorage = (storage, area) => ({
get: keys => new Promise(resolve => {
storage.get(keys, items => {
resolve(items);
});
}),
set: items => new Promise(resolve => {
storage.set(items, resolve);
}),
remove: keys => new Promise(resolve => {
storage.remove(keys, resolve);
}),
onChanged: createOnChanged(area),
});
const local = createStorage(chrome.storage.local, 'local');
exports.local = local;
const sync = createStorage(chrome.storage.sync, 'sync');
exports.sync = sync;
const managed = createStorage(chrome.storage.managed, 'managed');
exports.managed = managed;
//# sourceMappingURL=chrome-storage.js.map