summaryrefslogtreecommitdiff
path: root/packages/idb-bridge/src/BridgeIDBRequest.ts
diff options
context:
space:
mode:
Diffstat (limited to 'packages/idb-bridge/src/BridgeIDBRequest.ts')
-rw-r--r--packages/idb-bridge/src/BridgeIDBRequest.ts86
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;