vector-im-hydrogen-web/src/matrix/storage/idb/storage.js

33 lines
917 B
JavaScript
Raw Normal View History

2019-02-07 01:20:27 +01:00
import Transaction from "./transaction.js";
import { STORE_NAMES } from "../common.js";
2019-02-05 00:21:50 +01:00
export default class Storage {
constructor(idbDatabase) {
this._db = idbDatabase;
const nameMap = STORE_NAMES.reduce((nameMap, name) => {
nameMap[name] = name;
return nameMap;
}, {});
this.storeNames = Object.freeze(nameMap);
}
_validateStoreNames(storeNames) {
2019-02-10 21:25:29 +01:00
const idx = storeNames.findIndex(name => !STORE_NAMES.includes(name));
if (idx !== -1) {
throw new Error(`Tried to open a transaction for unknown store ${storeNames[idx]}`);
2019-02-05 00:21:50 +01:00
}
}
async readTxn(storeNames) {
2019-02-05 00:21:50 +01:00
this._validateStoreNames(storeNames);
const txn = this._db.transaction(storeNames, "readonly");
return new Transaction(txn, storeNames);
}
async readWriteTxn(storeNames) {
2019-02-05 00:21:50 +01:00
this._validateStoreNames(storeNames);
const txn = this._db.transaction(storeNames, "readwrite");
return new Transaction(txn, storeNames);
}
}