From f797f16e2f5b6ccfa5b1301becc07302ab2131a2 Mon Sep 17 00:00:00 2001 From: Florian Dold Date: Thu, 21 Nov 2019 10:43:40 +0100 Subject: [PATCH] improve error reporting --- packages/idb-bridge/package.json | 2 +- packages/idb-bridge/src/MemoryBackend.ts | 27 +++++++++++++++++++----- packages/idb-bridge/src/util/errors.ts | 10 +++++++++ 3 files changed, 33 insertions(+), 6 deletions(-) diff --git a/packages/idb-bridge/package.json b/packages/idb-bridge/package.json index 7ac39726b..3010f1f05 100644 --- a/packages/idb-bridge/package.json +++ b/packages/idb-bridge/package.json @@ -1,6 +1,6 @@ { "name": "idb-bridge", - "version": "0.0.11", + "version": "0.0.12", "description": "IndexedDB implementation that uses SQLite3 as storage", "main": "./build/index.js", "types": "./build/index.d.ts", diff --git a/packages/idb-bridge/src/MemoryBackend.ts b/packages/idb-bridge/src/MemoryBackend.ts index bb13a0223..b19c25cf0 100644 --- a/packages/idb-bridge/src/MemoryBackend.ts +++ b/packages/idb-bridge/src/MemoryBackend.ts @@ -32,6 +32,7 @@ import { InvalidStateError, InvalidAccessError, ConstraintError, + DataError, } from "./util/errors"; import BTree, { ISortedMapF } from "./tree/b+tree"; import compareKeys from "./util/cmp"; @@ -1386,11 +1387,27 @@ export class MemoryBackend implements Backend { ); } let indexData = index.modifiedData || index.originalData; - const indexKeys = getIndexKeys( - value, - indexProperties.keyPath, - indexProperties.multiEntry, - ); + let indexKeys; + try { + indexKeys = getIndexKeys( + value, + indexProperties.keyPath, + indexProperties.multiEntry, + ); + } catch (e) { + if (e instanceof DataError) { + const n = index.modifiedName || index.originalName; + const p = JSON.stringify(indexProperties.keyPath); + const m = `Failed to extract index keys from index ${n} for keyPath ${p}.`; + if (this.enableTracing) { + console.error(m); + console.error("value was", value); + } + throw new DataError(m); + } else { + throw e; + } + } for (const indexKey of indexKeys) { const existingRecord = indexData.get(indexKey); if (existingRecord) { diff --git a/packages/idb-bridge/src/util/errors.ts b/packages/idb-bridge/src/util/errors.ts index bbf9498c1..92de2ea90 100644 --- a/packages/idb-bridge/src/util/errors.ts +++ b/packages/idb-bridge/src/util/errors.ts @@ -42,6 +42,7 @@ const messages = { export class AbortError extends Error { constructor(message = messages.AbortError) { super(); + Object.setPrototypeOf(this, ConstraintError.prototype); this.name = "AbortError"; this.message = message; } @@ -50,6 +51,7 @@ export class AbortError extends Error { export class ConstraintError extends Error { constructor(message = messages.ConstraintError) { super(); + Object.setPrototypeOf(this, ConstraintError.prototype); this.name = "ConstraintError"; this.message = message; } @@ -58,6 +60,7 @@ export class ConstraintError extends Error { export class DataCloneError extends Error { constructor(message = messages.DataCloneError) { super(); + Object.setPrototypeOf(this, DataCloneError.prototype); this.name = "DataCloneError"; this.message = message; } @@ -66,6 +69,7 @@ export class DataCloneError extends Error { export class DataError extends Error { constructor(message = messages.DataError) { super(); + Object.setPrototypeOf(this, DataError.prototype); this.name = "DataError"; this.message = message; } @@ -74,6 +78,7 @@ export class DataError extends Error { export class InvalidAccessError extends Error { constructor(message = messages.InvalidAccessError) { super(); + Object.setPrototypeOf(this, InvalidAccessError.prototype); this.name = "InvalidAccessError"; this.message = message; } @@ -82,6 +87,7 @@ export class InvalidAccessError extends Error { export class InvalidStateError extends Error { constructor(message = messages.InvalidStateError) { super(); + Object.setPrototypeOf(this, InvalidStateError.prototype); this.name = "InvalidStateError"; this.message = message; } @@ -90,6 +96,7 @@ export class InvalidStateError extends Error { export class NotFoundError extends Error { constructor(message = messages.NotFoundError) { super(); + Object.setPrototypeOf(this, NotFoundError.prototype); this.name = "NotFoundError"; this.message = message; } @@ -98,6 +105,7 @@ export class NotFoundError extends Error { export class ReadOnlyError extends Error { constructor(message = messages.ReadOnlyError) { super(); + Object.setPrototypeOf(this, ReadOnlyError.prototype); this.name = "ReadOnlyError"; this.message = message; } @@ -106,6 +114,7 @@ export class ReadOnlyError extends Error { export class TransactionInactiveError extends Error { constructor(message = messages.TransactionInactiveError) { super(); + Object.setPrototypeOf(this, TransactionInactiveError.prototype); this.name = "TransactionInactiveError"; this.message = message; } @@ -114,6 +123,7 @@ export class TransactionInactiveError extends Error { export class VersionError extends Error { constructor(message = messages.VersionError) { super(); + Object.setPrototypeOf(this, VersionError.prototype); this.name = "VersionError"; this.message = message; }