50 lines
1.2 KiB
JavaScript
50 lines
1.2 KiB
JavaScript
import { defineDriver } from "./utils/index.mjs";
|
|
import {
|
|
get,
|
|
set,
|
|
clear,
|
|
del,
|
|
keys,
|
|
createStore
|
|
} from "idb-keyval";
|
|
const DRIVER_NAME = "idb-keyval";
|
|
export default defineDriver((opts = {}) => {
|
|
const base = opts.base && opts.base.length > 0 ? `${opts.base}:` : "";
|
|
const makeKey = (key) => base + key;
|
|
let customStore;
|
|
if (opts.dbName && opts.storeName) {
|
|
customStore = createStore(opts.dbName, opts.storeName);
|
|
}
|
|
return {
|
|
name: DRIVER_NAME,
|
|
options: opts,
|
|
async hasItem(key) {
|
|
const item = await get(makeKey(key), customStore);
|
|
return item === void 0 ? false : true;
|
|
},
|
|
async getItem(key) {
|
|
const item = await get(makeKey(key), customStore);
|
|
return item ?? null;
|
|
},
|
|
async getItemRaw(key) {
|
|
const item = await get(makeKey(key), customStore);
|
|
return item ?? null;
|
|
},
|
|
setItem(key, value) {
|
|
return set(makeKey(key), value, customStore);
|
|
},
|
|
setItemRaw(key, value) {
|
|
return set(makeKey(key), value, customStore);
|
|
},
|
|
removeItem(key) {
|
|
return del(makeKey(key), customStore);
|
|
},
|
|
getKeys() {
|
|
return keys(customStore);
|
|
},
|
|
clear() {
|
|
return clear(customStore);
|
|
}
|
|
};
|
|
});
|