Files
AFFiNE-Mirror/packages/data-center/src/provider/affine/idb-kv.ts
2023-02-02 18:45:00 +08:00

26 lines
736 B
TypeScript

import { createStore, keys, setMany, getMany, clear } from 'idb-keyval';
import * as idb from 'lib0/indexeddb.js';
type IDBInstance<T = ArrayBufferLike> = {
keys: () => Promise<string[]>;
clear: () => Promise<void>;
deleteDB: () => Promise<void>;
setMany: (entries: [string, T][]) => Promise<void>;
getMany: (keys: string[]) => Promise<T[]>;
};
export function getDatabase<T = ArrayBufferLike>(
type: string,
database: string
): IDBInstance<T> {
const name = `${database}_${type}`;
const db = createStore(name, type);
return {
keys: () => keys(db),
clear: () => clear(db),
deleteDB: () => idb.deleteDB(name),
setMany: entries => setMany(entries, db),
getMany: keys => getMany(keys, db),
};
}