diff options
Diffstat (limited to 'packages/idb-bridge/src/BridgeIDBRequest.ts')
-rw-r--r-- | packages/idb-bridge/src/BridgeIDBRequest.ts | 86 |
1 files changed, 86 insertions, 0 deletions
diff --git a/packages/idb-bridge/src/BridgeIDBRequest.ts b/packages/idb-bridge/src/BridgeIDBRequest.ts new file mode 100644 index 000000000..cd0092859 --- /dev/null +++ b/packages/idb-bridge/src/BridgeIDBRequest.ts @@ -0,0 +1,86 @@ +/* + * Copyright 2017 Jeremy Scheff + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the License for the specific language governing + * permissions and limitations under the License. + */ + +import BridgeFDBCursor from "./BridgeIDBCursor"; +import BridgeIDBIndex from "./BridgeIDBIndex"; +import BridgeIDBObjectStore from "./BridgeIDBObjectStore"; +import BridgeIDBTransaction from "./BridgeIDBTransaction"; +import { InvalidStateError } from "./util/errors"; +import FakeEventTarget from "./util/FakeEventTarget"; +import { EventCallback } from "./util/types"; +import FakeEvent from "./util/FakeEvent"; + +class BridgeIDBRequest extends FakeEventTarget { + _result: any = null; + _error: Error | null | undefined = null; + source: BridgeFDBCursor | BridgeIDBIndex | BridgeIDBObjectStore | null = null; + transaction: BridgeIDBTransaction | null = null; + readyState: "done" | "pending" = "pending"; + onsuccess: EventCallback | null = null; + onerror: EventCallback | null = null; + + get error() { + if (this.readyState === "pending") { + throw new InvalidStateError(); + } + return this._error; + } + + set error(value: any) { + this._error = value; + } + + get result() { + if (this.readyState === "pending") { + throw new InvalidStateError(); + } + return this._result; + } + + set result(value: any) { + this._result = value; + } + + toString() { + return "[object IDBRequest]"; + } + + _finishWithError(err: Error) { + this.result = undefined; + this.readyState = "done"; + + this.error = new Error(err.message); + this.error.name = err.name; + + const event = new FakeEvent("error", { + bubbles: true, + cancelable: true, + }); + event.eventPath = []; + this.dispatchEvent(event); + } + + _finishWithResult(result: any) { + this.result = result; + this.readyState = "done"; + + const event = new FakeEvent("success"); + event.eventPath = []; + this.dispatchEvent(event); + } +} + +export default BridgeIDBRequest; |