hydrogen-web/src/matrix/storage/idb/storage.js
Bruno Windels 89bc0e1696 split up RoomPersister to SyncPersister
also rename stores to timelineEvents and timelineFragments
2019-05-12 20:24:06 +02:00

33 lines
917 B
JavaScript

import Transaction from "./transaction.js";
import { STORE_NAMES } from "../common.js";
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) {
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]}`);
}
}
async readTxn(storeNames) {
this._validateStoreNames(storeNames);
const txn = this._db.transaction(storeNames, "readonly");
return new Transaction(txn, storeNames);
}
async readWriteTxn(storeNames) {
this._validateStoreNames(storeNames);
const txn = this._db.transaction(storeNames, "readwrite");
return new Transaction(txn, storeNames);
}
}