summaryrefslogtreecommitdiff
path: root/packages/idb-bridge/src/MemoryBackend.ts
diff options
context:
space:
mode:
Diffstat (limited to 'packages/idb-bridge/src/MemoryBackend.ts')
-rw-r--r--packages/idb-bridge/src/MemoryBackend.ts28
1 files changed, 21 insertions, 7 deletions
diff --git a/packages/idb-bridge/src/MemoryBackend.ts b/packages/idb-bridge/src/MemoryBackend.ts
index 531a7f299..6a52a555f 100644
--- a/packages/idb-bridge/src/MemoryBackend.ts
+++ b/packages/idb-bridge/src/MemoryBackend.ts
@@ -36,11 +36,14 @@ import {
} from "./util/errors";
import BTree, { ISortedMapF } from "./tree/b+tree";
import compareKeys from "./util/cmp";
-import { Key, Value, KeyPath, TransactionMode } from "./util/types";
import { StoreKeyResult, makeStoreKeyValue } from "./util/makeStoreKeyValue";
import getIndexKeys from "./util/getIndexKeys";
import openPromise from "./util/openPromise";
-import { BridgeIDBKeyRange } from "./BridgeIDBKeyRange";
+import { IDBKeyPath, IDBKeyRange, IDBTransactionMode, IDBValidKey } from "./idbtypes";
+import { BridgeIDBKeyRange } from "./bridge-idb";
+
+type Key = IDBValidKey;
+type Value = unknown;
enum TransactionLevel {
Disconnected = 0,
@@ -476,7 +479,7 @@ export class MemoryBackend implements Backend {
async beginTransaction(
conn: DatabaseConnection,
objectStores: string[],
- mode: TransactionMode,
+ mode: IDBTransactionMode,
): Promise<DatabaseTransaction> {
if (this.enableTracing) {
console.log(`TRACING: beginTransaction`);
@@ -773,6 +776,9 @@ export class MemoryBackend implements Backend {
if (!schema) {
throw Error("no schema for versionchange tx");
}
+ if (Array.isArray(keyPath)) {
+ throw Error("array key path not supported for object stores");
+ }
schema.objectStores[name] = {
autoIncrement,
keyPath,
@@ -785,7 +791,7 @@ export class MemoryBackend implements Backend {
btx: DatabaseTransaction,
indexName: string,
objectStoreName: string,
- keyPath: KeyPath,
+ keyPath: IDBKeyPath,
multiEntry: boolean,
unique: boolean,
): void {
@@ -843,7 +849,7 @@ export class MemoryBackend implements Backend {
async deleteRecord(
btx: DatabaseTransaction,
objectStoreName: string,
- range: BridgeIDBKeyRange,
+ range: IDBKeyRange,
): Promise<void> {
if (this.enableTracing) {
console.log(`TRACING: deleteRecord from store ${objectStoreName}`);
@@ -900,6 +906,10 @@ export class MemoryBackend implements Backend {
}
}
+ if (currKey === undefined) {
+ throw Error("invariant violated");
+ }
+
// make sure that currKey is either undefined or pointing to an
// existing object.
let firstValue = modifiedData.get(currKey);
@@ -1112,6 +1122,10 @@ export class MemoryBackend implements Backend {
indexPos = forward ? indexData.minKey() : indexData.maxKey();
}
+ if (indexPos === undefined) {
+ throw Error("invariant violated");
+ }
+
let indexEntry: IndexRecord | undefined;
indexEntry = indexData.get(indexPos);
if (!indexEntry) {
@@ -1191,13 +1205,13 @@ export class MemoryBackend implements Backend {
primkeySubPos < 0 ||
primkeySubPos >= indexEntry.primaryKeys.length
) {
- const res = forward
+ const res: any = forward
? indexData.nextHigherPair(indexPos)
: indexData.nextLowerPair(indexPos);
if (res) {
indexPos = res[1].indexKey;
indexEntry = res[1];
- primkeySubPos = forward ? 0 : indexEntry.primaryKeys.length - 1;
+ primkeySubPos = forward ? 0 : indexEntry!.primaryKeys.length - 1;
continue;
} else {
break;