| // Copyright (c) 2025, the Dart project authors. Please see the AUTHORS file |
| // for details. All rights reserved. Use of this source code is governed by a |
| // BSD-style license that can be found in the LICENSE file. |
| // |
| // API docs from [MDN Web Docs](https://developer.mozilla.org/en-US/docs/Web). |
| // Attributions and copyright licensing by Mozilla Contributors is licensed |
| // under [CC-BY-SA 2.5](https://creativecommons.org/licenses/by-sa/2.5/. |
| |
| // Generated from Web IDL definitions. |
| |
| // ignore_for_file: unintended_html_in_doc_comment |
| |
| @JS() |
| library; |
| |
| import 'dart:js_interop'; |
| |
| import 'dom.dart'; |
| import 'html.dart'; |
| import 'webidl.dart'; |
| |
| typedef IDBRequestReadyState = String; |
| typedef IDBTransactionDurability = String; |
| typedef IDBCursorDirection = String; |
| typedef IDBTransactionMode = String; |
| |
| /// The **`IDBRequest`** interface of the IndexedDB API provides access to |
| /// results of asynchronous requests to databases and database objects using |
| /// event handler attributes. Each reading and writing operation on a database |
| /// is done using a request. |
| /// |
| /// The request object does not initially contain any information about the |
| /// result of the operation, but once information becomes available, an event is |
| /// fired on the request, and the information becomes available through the |
| /// properties of the `IDBRequest` instance. |
| /// |
| /// All asynchronous operations immediately return an `IDBRequest` instance. |
| /// Each request has a `readyState` that is set to the `'pending'` state; this |
| /// changes to `'done'` when the request is completed or fails. When the state |
| /// is set to `done`, every request returns a `result` and an `error`, and an |
| /// event is fired on the request. When the state is still `pending`, any |
| /// attempt to access the `result` or `error` raises an `InvalidStateError` |
| /// exception. |
| /// |
| /// In plain words, all asynchronous methods return a request object. If the |
| /// request has been completed successfully, the result is made available |
| /// through the `result` property and an event indicating success is fired at |
| /// the request ([IDBRequest.success_event]). If an error occurs while |
| /// performing the operation, the exception is made available through the |
| /// `error` property and an error event is fired ([IDBRequest.error_event]). |
| /// |
| /// The interface [IDBOpenDBRequest] is derived from `IDBRequest`. |
| /// |
| /// --- |
| /// |
| /// API documentation sourced from |
| /// [MDN Web Docs](https://developer.mozilla.org/en-US/docs/Web/API/IDBRequest). |
| extension type IDBRequest._(JSObject _) implements EventTarget, JSObject { |
| /// The **`result`** read-only property of the |
| /// [IDBRequest] interface returns the result of the request. |
| external JSAny? get result; |
| |
| /// The **`error`** read-only property of the |
| /// [IDBRequest] interface returns the error in the event of an unsuccessful |
| /// request. |
| external DOMException? get error; |
| |
| /// The **`source`** read-only property of the |
| /// [IDBRequest] interface returns the source of the request, such as an |
| /// Index or an object store. If no source exists (such as when calling |
| /// [IDBFactory.open]), it returns null. |
| external JSObject? get source; |
| |
| /// The **`transaction`** read-only property of the IDBRequest |
| /// interface returns the transaction for the request, that is, the |
| /// transaction the |
| /// request is being made inside. |
| /// |
| /// This property can be `null` for requests not made within transactions, |
| /// such as for requests returned from [IDBFactory.open] — in this case |
| /// you're just connecting to a database, so there is no transaction to |
| /// return. If a |
| /// version upgrade is needed when opening a database then during the |
| /// [IDBOpenDBRequest.upgradeneeded_event] event handler the |
| /// **`transaction`** property will be an |
| /// [IDBTransaction] with [IDBTransaction.mode] equal |
| /// to `"versionchange"`, and can be used to access existing object stores and |
| /// indexes, or abort the upgrade. Following the upgrade, the |
| /// **`transaction`** property will again be `null`. |
| external IDBTransaction? get transaction; |
| |
| /// The **`readyState`** read-only property of the |
| /// [IDBRequest] interface returns the state of the request. |
| /// |
| /// Every request starts in the `pending` state. The state changes to |
| /// `done` when the request completes successfully or when an error |
| /// occurs. |
| external IDBRequestReadyState get readyState; |
| external EventHandler get onsuccess; |
| external set onsuccess(EventHandler value); |
| external EventHandler get onerror; |
| external set onerror(EventHandler value); |
| } |
| |
| /// The **`IDBOpenDBRequest`** interface of the IndexedDB API provides access to |
| /// the results of requests to open or delete databases (performed using |
| /// [IDBFactory.open] and [IDBFactory.deleteDatabase]), using specific event |
| /// handler attributes. |
| /// |
| /// --- |
| /// |
| /// API documentation sourced from |
| /// [MDN Web Docs](https://developer.mozilla.org/en-US/docs/Web/API/IDBOpenDBRequest). |
| extension type IDBOpenDBRequest._(JSObject _) implements IDBRequest, JSObject { |
| external EventHandler get onblocked; |
| external set onblocked(EventHandler value); |
| external EventHandler get onupgradeneeded; |
| external set onupgradeneeded(EventHandler value); |
| } |
| |
| /// The **`IDBVersionChangeEvent`** interface of the |
| /// [IndexedDB API](https://developer.mozilla.org/en-US/docs/Web/API/IndexedDB_API) |
| /// indicates that the version of the database has changed, as the result of an |
| /// [IDBOpenDBRequest.upgradeneeded_event] event handler function. |
| /// |
| /// --- |
| /// |
| /// API documentation sourced from |
| /// [MDN Web Docs](https://developer.mozilla.org/en-US/docs/Web/API/IDBVersionChangeEvent). |
| extension type IDBVersionChangeEvent._(JSObject _) implements Event, JSObject { |
| external factory IDBVersionChangeEvent( |
| String type, [ |
| IDBVersionChangeEventInit eventInitDict, |
| ]); |
| |
| /// The **`oldVersion`** read-only property of the |
| /// [IDBVersionChangeEvent] interface returns the old version number of the |
| /// database. |
| /// |
| /// When the opened database doesn't exist yet, the value of `oldVersion` is |
| /// 0. |
| external int get oldVersion; |
| |
| /// The **`newVersion`** read-only property of the |
| /// [IDBVersionChangeEvent] interface returns the new version number of the |
| /// database. |
| external int? get newVersion; |
| } |
| extension type IDBVersionChangeEventInit._(JSObject _) |
| implements EventInit, JSObject { |
| external factory IDBVersionChangeEventInit({ |
| bool bubbles, |
| bool cancelable, |
| bool composed, |
| int oldVersion, |
| int? newVersion, |
| }); |
| |
| external int get oldVersion; |
| external set oldVersion(int value); |
| external int? get newVersion; |
| external set newVersion(int? value); |
| } |
| |
| /// The **`IDBFactory`** interface of the |
| /// [IndexedDB API](https://developer.mozilla.org/en-US/docs/Web/API/IndexedDB_API) |
| /// lets applications asynchronously access the indexed databases. The object |
| /// that implements the interface is `window.indexedDB`. You open — that is, |
| /// create and access — and delete a database with this object, and not directly |
| /// with `IDBFactory`. |
| /// |
| /// --- |
| /// |
| /// API documentation sourced from |
| /// [MDN Web Docs](https://developer.mozilla.org/en-US/docs/Web/API/IDBFactory). |
| extension type IDBFactory._(JSObject _) implements JSObject { |
| /// The **`open()`** method of the [IDBFactory] interface requests opening a |
| /// [connection to a database](https://developer.mozilla.org/en-US/docs/Web/API/IndexedDB_API/Basic_Terminology#database_connection). |
| /// |
| /// The method returns an [IDBOpenDBRequest] object immediately, and performs |
| /// the open operation asynchronously. |
| /// If the operation is successful, a `success` event is fired on the request |
| /// object that is returned from this method, with its `result` attribute set |
| /// to the new [IDBDatabase] object for the connection. |
| /// |
| /// May trigger `upgradeneeded`, `blocked` or `versionchange` events. |
| external IDBOpenDBRequest open( |
| String name, [ |
| int version, |
| ]); |
| |
| /// The **`deleteDatabase()`** method of the |
| /// [IDBFactory] interface requests the deletion of a database. The method |
| /// returns an [IDBOpenDBRequest] object immediately, and performs the |
| /// deletion |
| /// operation asynchronously. |
| /// |
| /// If the database is successfully deleted, then a `success` event is fired |
| /// on |
| /// the request object returned from this method, with its `result` set to |
| /// `undefined`. If an error occurs while the database is being deleted, then |
| /// an |
| /// `error` event is fired on the request object that is returned from this |
| /// method. |
| /// |
| /// When `deleteDatabase()` is called, any other open connections to this |
| /// particular database will get a |
| /// [versionchange](https://developer.mozilla.org/en-US/docs/Web/API/IDBDatabase/versionchange_event) |
| /// event. |
| external IDBOpenDBRequest deleteDatabase(String name); |
| |
| /// The **`databases`** method of the [IDBFactory] interface returns a |
| /// `Promise` that fulfills with an array of objects containing the name and |
| /// version of all the available databases. |
| /// |
| /// This is a snapshot of the databases, intended primarily to allow web |
| /// applications to check what databases have been created — in order to, for |
| /// example, clean up databases created by earlier versions of application |
| /// code. |
| external JSPromise<JSArray<IDBDatabaseInfo>> databases(); |
| |
| /// The **`cmp()`** method of the [IDBFactory] |
| /// interface compares two values as keys to determine equality and ordering |
| /// for IndexedDB |
| /// operations, such as storing and iterating. |
| /// |
| /// > [!NOTE] |
| /// > Do not use this method for comparing arbitrary JavaScript |
| /// > values, because many JavaScript values are either not valid IndexedDB |
| /// > keys (booleans |
| /// > and objects, for example) or are treated as equivalent IndexedDB keys |
| /// > (for example, |
| /// > since IndexedDB ignores arrays with non-numeric properties and treats |
| /// > them as empty |
| /// > arrays, so any non-numeric arrays are treated as equivalent). This |
| /// > throws an exception |
| /// > if either of the values is not a valid key. |
| external int cmp( |
| JSAny? first, |
| JSAny? second, |
| ); |
| } |
| extension type IDBDatabaseInfo._(JSObject _) implements JSObject { |
| external factory IDBDatabaseInfo({ |
| String name, |
| int version, |
| }); |
| |
| external String get name; |
| external set name(String value); |
| external int get version; |
| external set version(int value); |
| } |
| |
| /// The **`IDBDatabase`** interface of the IndexedDB API provides a |
| /// [connection to a database](https://developer.mozilla.org/en-US/docs/Web/API/IndexedDB_API/Basic_Terminology#database_connection); |
| /// you can use an `IDBDatabase` object to open a |
| /// [transaction](https://developer.mozilla.org/en-US/docs/Web/API/IndexedDB_API/Basic_Terminology#transaction) |
| /// on your database then create, manipulate, and delete objects (data) in that |
| /// database. The interface provides the only way to get and manage versions of |
| /// the database. |
| /// |
| /// > [!NOTE] |
| /// > Everything you do in IndexedDB always happens in the context of a |
| /// > [transaction](https://developer.mozilla.org/en-US/docs/Web/API/IndexedDB_API/Basic_Terminology#transaction), |
| /// > representing interactions with data in the database. All objects in |
| /// > IndexedDB — including object stores, indexes, and cursors — are tied to a |
| /// > particular transaction. Thus, you cannot execute commands, access data, or |
| /// > open anything outside of a transaction. |
| /// |
| /// --- |
| /// |
| /// API documentation sourced from |
| /// [MDN Web Docs](https://developer.mozilla.org/en-US/docs/Web/API/IDBDatabase). |
| extension type IDBDatabase._(JSObject _) implements EventTarget, JSObject { |
| /// The **`transaction`** method of the [IDBDatabase] interface immediately |
| /// returns a transaction object ([IDBTransaction]) containing the |
| /// [IDBTransaction.objectStore] method, which you can use to access your |
| /// object store. |
| external IDBTransaction transaction( |
| JSAny storeNames, [ |
| IDBTransactionMode mode, |
| IDBTransactionOptions options, |
| ]); |
| |
| /// The **`close()`** method of the [IDBDatabase] |
| /// interface returns immediately and closes the connection in a separate |
| /// thread. |
| /// |
| /// The connection is not actually closed until all transactions created using |
| /// this |
| /// connection are complete. No new transactions can be created for this |
| /// connection once |
| /// this method is called. Methods that create transactions throw an exception |
| /// if a closing |
| /// operation is pending. |
| external void close(); |
| |
| /// The **`createObjectStore()`** method of the |
| /// [IDBDatabase] interface creates and returns a new [IDBObjectStore]. |
| /// |
| /// The method takes the name of the store as well as a parameter object that |
| /// lets you |
| /// define important optional properties. You can use the property to uniquely |
| /// identify |
| /// individual objects in the store. As the property is an identifier, it |
| /// should be unique |
| /// to every object, and every object should have that property. |
| /// |
| /// This method can be called _only_ within a |
| /// [`versionchange`](https://developer.mozilla.org/en-US/docs/Web/API/IDBDatabase/versionchange_event) |
| /// transaction. |
| external IDBObjectStore createObjectStore( |
| String name, [ |
| IDBObjectStoreParameters options, |
| ]); |
| |
| /// The **`deleteObjectStore()`** method of the |
| /// [IDBDatabase] interface destroys the object store with the given name in |
| /// the connected database, along with any indexes that reference it. |
| /// |
| /// As with [IDBDatabase.createObjectStore], this method can be called |
| /// _only_ within a |
| /// [`versionchange`](https://developer.mozilla.org/en-US/docs/Web/API/IDBDatabase/versionchange_event) |
| /// transaction. |
| external void deleteObjectStore(String name); |
| |
| /// The **`name`** read-only property of the |
| /// `IDBDatabase` interface is a string that contains the |
| /// name of the connected database. |
| external String get name; |
| |
| /// The **`version`** property of the [IDBDatabase] |
| /// interface is a |
| /// [64-bit integer](https://developer.mozilla.org/en-US/docs/NSPR_API_Reference/Long_Long_%2864-bit%29_Integers) |
| /// that contains the version of the connected database. |
| /// When a database is first created, this attribute is an empty string. |
| external int get version; |
| |
| /// The **`objectStoreNames`** read-only property of the |
| /// [IDBDatabase] interface is a [DOMStringList] containing a |
| /// list of the names of the |
| /// [object stores](https://developer.mozilla.org/en-US/docs/Web/API/IndexedDB_API/Basic_Terminology#object_store) |
| /// currently in the connected database. |
| external DOMStringList get objectStoreNames; |
| external EventHandler get onabort; |
| external set onabort(EventHandler value); |
| external EventHandler get onclose; |
| external set onclose(EventHandler value); |
| external EventHandler get onerror; |
| external set onerror(EventHandler value); |
| external EventHandler get onversionchange; |
| external set onversionchange(EventHandler value); |
| } |
| extension type IDBTransactionOptions._(JSObject _) implements JSObject { |
| external factory IDBTransactionOptions({IDBTransactionDurability durability}); |
| |
| external IDBTransactionDurability get durability; |
| external set durability(IDBTransactionDurability value); |
| } |
| extension type IDBObjectStoreParameters._(JSObject _) implements JSObject { |
| external factory IDBObjectStoreParameters({ |
| JSAny? keyPath, |
| bool autoIncrement, |
| }); |
| |
| external JSAny? get keyPath; |
| external set keyPath(JSAny? value); |
| external bool get autoIncrement; |
| external set autoIncrement(bool value); |
| } |
| |
| /// The **`IDBObjectStore`** interface of the |
| /// [IndexedDB API](https://developer.mozilla.org/en-US/docs/Web/API/IndexedDB_API) |
| /// represents an object store in a database. Records within an object store are |
| /// sorted according to their keys. This sorting enables fast insertion, |
| /// look-up, and ordered retrieval. |
| /// |
| /// --- |
| /// |
| /// API documentation sourced from |
| /// [MDN Web Docs](https://developer.mozilla.org/en-US/docs/Web/API/IDBObjectStore). |
| extension type IDBObjectStore._(JSObject _) implements JSObject { |
| /// The **`put()`** method of the [IDBObjectStore] interface updates a given |
| /// record in a database, or inserts a new record if the given item does not |
| /// already exist. |
| /// |
| /// It returns an [IDBRequest] object, and, in a separate thread, creates a |
| /// [structured clone](https://html.spec.whatwg.org/multipage/common-dom-interfaces.html#structured-clone) |
| /// of the value and stores the cloned value in the object store. This is for |
| /// adding new records, or updating existing records in an object store when |
| /// the transaction's mode is `readwrite`. If the record is successfully |
| /// stored, then a success event is fired on the returned request object with |
| /// the `result` set to the key for the stored record, and the `transaction` |
| /// set to the transaction in which this object store is opened. |
| /// |
| /// The put method is an _update or insert_ method. |
| /// See the [IDBObjectStore.add] method for an _insert only_ method. |
| /// |
| /// Bear in mind that if you have a [IDBCursor] to the record you |
| /// want to update, updating it with [IDBCursor.update] is preferable to |
| /// using `IDBObjectStore.put()`. Doing so makes it clear that an existing |
| /// record will be updated, instead of a new record being inserted. |
| external IDBRequest put( |
| JSAny? value, [ |
| JSAny? key, |
| ]); |
| |
| /// The **`add()`** method of the [IDBObjectStore] interface returns an |
| /// [IDBRequest] object, and, in a separate thread, creates a |
| /// [structured clone](https://html.spec.whatwg.org/multipage/common-dom-interfaces.html#structured-clone) |
| /// of the value, and stores the cloned value in the object store. This is for |
| /// adding new records to an object store. |
| /// |
| /// To determine if the add operation has completed successfully, listen for |
| /// the |
| /// transaction's `complete` event in addition to the |
| /// `IDBObjectStore.add` request's `success` event, because the |
| /// transaction may still fail after the success event fires. In other words, |
| /// the success |
| /// event is only triggered when the transaction has been successfully queued. |
| /// |
| /// The add method is an _insert only_ method. If a |
| /// record already exists in the object store with the `key` parameter as its |
| /// key, then an error `ConstraintError` event is fired on the returned |
| /// request |
| /// object. For updating existing records, you should use the |
| /// [IDBObjectStore.put] method instead. |
| external IDBRequest add( |
| JSAny? value, [ |
| JSAny? key, |
| ]); |
| |
| /// The **`delete()`** method of the |
| /// [IDBObjectStore] interface returns an [IDBRequest] object, |
| /// and, in a separate thread, deletes the specified record or records. |
| /// |
| /// Either a key or an [IDBKeyRange] can be passed, allowing one or multiple |
| /// records to be deleted from a store. To delete all records in a store, use |
| /// [IDBObjectStore.clear]. |
| /// |
| /// Bear in mind that if you are using a [IDBCursor], you can use |
| /// the [IDBCursor.delete] method to more efficiently delete the current |
| /// record — without having to explicitly look up the record's key. |
| external IDBRequest delete(JSAny? query); |
| |
| /// The **`clear()`** method of the [IDBObjectStore] |
| /// interface creates and immediately returns an [IDBRequest] object, and |
| /// clears this object store in a separate thread. This is for deleting all |
| /// the current |
| /// data out of an object store. |
| /// |
| /// Clearing an object store consists of removing all records from the object |
| /// store and |
| /// removing all records in indexes that reference the object store. To remove |
| /// only some of |
| /// the records in a store, use [IDBObjectStore.delete] passing a key |
| /// or [IDBKeyRange]. |
| external IDBRequest clear(); |
| |
| /// The **`get()`** method of the [IDBObjectStore] |
| /// interface returns an [IDBRequest] object, and, in a separate thread, |
| /// returns the object selected by the specified key. This is for retrieving |
| /// specific records from an object store. |
| /// |
| /// If a value is successfully found, then a structured clone of it is created |
| /// and set as |
| /// the |
| /// [`result`](https://developer.mozilla.org/en-US/docs/Web/API/IDBRequest/result) |
| /// of the |
| /// request object. |
| /// |
| /// > [!NOTE] |
| /// > This method produces the same result for: a) a record that doesn't exist |
| /// > in the database and b) a record that has an undefined value. |
| /// > To tell these situations apart, call the `openCursor()` method with the |
| /// > same key. That method provides a cursor if the record exists, and no |
| /// > cursor if it does not. |
| external IDBRequest get(JSAny? query); |
| |
| /// The **`getKey()`** method of the |
| /// [IDBObjectStore] interface returns an [IDBRequest] object, |
| /// and, in a separate thread, returns the key selected by the specified |
| /// query. This is |
| /// for retrieving specific records from an object store. |
| /// |
| /// If a key is successfully found, then a structured clone of it is created |
| /// and set as the |
| /// result of the request object. |
| external IDBRequest getKey(JSAny? query); |
| |
| /// The **`getAll()`** method of the |
| /// [IDBObjectStore] interface returns an [IDBRequest] object |
| /// containing all objects in the object store matching the specified |
| /// parameter or all |
| /// objects in the store if no parameters are given. |
| /// |
| /// If a value is successfully found, then a structured clone of it is created |
| /// and set as |
| /// the result of the request object. |
| /// |
| /// This method produces the same result for: |
| /// |
| /// - a record that doesn't exist in the database |
| /// - a record that has an undefined value |
| /// |
| /// To tell these situations apart, you either call |
| /// |
| /// 1. the [IDBObjectStore.openCursor] method with the same |
| /// key. That method provides a cursor if the record exists, and no cursor if |
| /// it does not. |
| /// 2. the [IDBObjectStore.count] method with the same key, which |
| /// will return 1 if the row exists and 0 if it doesn't. |
| external IDBRequest getAll([ |
| JSAny? query, |
| int count, |
| ]); |
| |
| /// The `getAllKeys()` method of the [IDBObjectStore] |
| /// interface returns an [IDBRequest] object retrieves record keys for all |
| /// objects in the object store matching the specified parameter or all |
| /// objects in the |
| /// store if no parameters are given. |
| /// |
| /// If a value is successfully found, then a structured clone of it is created |
| /// and set as |
| /// the result of the request object. |
| /// |
| /// This method produces the same result for: |
| /// |
| /// - a record that doesn't exist in the database |
| /// - a record that has an undefined value |
| /// |
| /// To tell these situations apart, you need to call the |
| /// [IDBObjectStore.openCursor] method with the same key. That |
| /// method provides a cursor if the record exists, and no cursor if it does |
| /// not. |
| external IDBRequest getAllKeys([ |
| JSAny? query, |
| int count, |
| ]); |
| |
| /// The **`count()`** method of the [IDBObjectStore] |
| /// interface returns an [IDBRequest] object, and, in a separate thread, |
| /// returns the total number of records that match the provided key or |
| /// [IDBKeyRange]. If no arguments are provided, it returns the total number |
| /// of records in the store. |
| external IDBRequest count([JSAny? query]); |
| |
| /// The **`openCursor()`** method of the |
| /// [IDBObjectStore] interface returns an [IDBRequest] object, |
| /// and, in a separate thread, returns a new [IDBCursorWithValue] object. |
| /// Used for iterating through an object store with a cursor. |
| /// |
| /// To determine if the add operation has completed successfully, listen for |
| /// the results's |
| /// `success` event. |
| external IDBRequest openCursor([ |
| JSAny? query, |
| IDBCursorDirection direction, |
| ]); |
| |
| /// The **`openKeyCursor()`** method of the |
| /// [IDBObjectStore] interface returns an [IDBRequest] object |
| /// whose result will be set to an [IDBCursor] that can be used to iterate |
| /// through matching results. Used for iterating through the keys of an object |
| /// store with |
| /// a cursor. |
| /// |
| /// To determine if the add operation has completed successfully, listen for |
| /// the |
| /// results's `success` event. |
| external IDBRequest openKeyCursor([ |
| JSAny? query, |
| IDBCursorDirection direction, |
| ]); |
| |
| /// The **`index()`** method of the [IDBObjectStore] |
| /// interface opens a named index in the current object store, after which it |
| /// can be used |
| /// to, for example, return a series of records sorted by that index using a |
| /// cursor. |
| external IDBIndex index(String name); |
| |
| /// The **`createIndex()`** method of the |
| /// [IDBObjectStore] interface creates and returns a new |
| /// [IDBIndex] object in the connected database. It creates a new |
| /// field/column defining a new data point for each database record to |
| /// contain. |
| /// |
| /// Bear in mind that IndexedDB indexes can contain _any_ JavaScript data |
| /// type; |
| /// IndexedDB uses the |
| /// [structured clone algorithm](https://developer.mozilla.org/en-US/docs/Web/API/Web_Workers_API/Structured_clone_algorithm) |
| /// to serialize stored objects, which allows for storage of simple |
| /// and complex objects. |
| /// |
| /// Note that this method must be called only from a `VersionChange` |
| /// transaction |
| /// mode callback. |
| external IDBIndex createIndex( |
| String name, |
| JSAny keyPath, [ |
| IDBIndexParameters options, |
| ]); |
| |
| /// The **`deleteIndex()`** method of the |
| /// [IDBObjectStore] interface destroys the index with the specified name in |
| /// the connected database, used during a version upgrade. |
| /// |
| /// Note that this method must be called only from a `VersionChange` |
| /// transaction |
| /// mode callback. Note that this method synchronously modifies the |
| /// [IDBObjectStore.indexNames] property. |
| external void deleteIndex(String name); |
| |
| /// The **`name`** property of the [IDBObjectStore] |
| /// interface indicates the name of this object store. |
| external String get name; |
| external set name(String value); |
| |
| /// The **`keyPath`** read-only property of the |
| /// [IDBObjectStore] interface returns the |
| /// [key path](https://developer.mozilla.org/en-US/docs/Web/API/IndexedDB_API/Basic_Terminology#key_path) |
| /// of this object store. |
| /// |
| /// If this property is null, the application must provide a key for each |
| /// modification |
| /// operation. |
| external JSAny? get keyPath; |
| |
| /// The **`indexNames`** read-only property of the |
| /// [IDBObjectStore] interface returns a list of the names of |
| /// [indexes](https://developer.mozilla.org/en-US/docs/Web/API/IndexedDB_API/Basic_Terminology#index) |
| /// on objects |
| /// in this object store. |
| external DOMStringList get indexNames; |
| |
| /// The **`transaction`** read-only property of the |
| /// [IDBObjectStore] interface returns the transaction object to which this |
| /// object store belongs. |
| external IDBTransaction get transaction; |
| |
| /// The **`autoIncrement`** read-only property of the |
| /// [IDBObjectStore] interface returns the value of the auto increment flag |
| /// for this object store. |
| /// |
| /// Note that every object store has its own separate auto increment counter. |
| external bool get autoIncrement; |
| } |
| extension type IDBIndexParameters._(JSObject _) implements JSObject { |
| external factory IDBIndexParameters({ |
| bool unique, |
| bool multiEntry, |
| }); |
| |
| external bool get unique; |
| external set unique(bool value); |
| external bool get multiEntry; |
| external set multiEntry(bool value); |
| } |
| |
| /// `IDBIndex` interface of the |
| /// [IndexedDB API](https://developer.mozilla.org/en-US/docs/Web/API/IndexedDB_API) |
| /// provides asynchronous access to an |
| /// [index](https://developer.mozilla.org/en-US/docs/Web/API/IndexedDB_API/Basic_Terminology#index) |
| /// in a database. An index is a kind of object store for looking up records in |
| /// another object store, called the referenced object store. You use this |
| /// interface to retrieve data. |
| /// |
| /// You can retrieve records in an object store through the primary key or by |
| /// using an index. An index lets you look up records in an object store using |
| /// properties of the values in the object stores records other than the primary |
| /// key |
| /// |
| /// The index is a persistent key-value storage where the value part of its |
| /// records is the key part of a record in the referenced object store. The |
| /// records in an index are automatically populated whenever records in the |
| /// referenced object store are inserted, updated, or deleted. Each record in an |
| /// index can point to only one record in its referenced object store, but |
| /// several indexes can reference the same object store. When the object store |
| /// changes, all indexes that refers to the object store are automatically |
| /// updated. |
| /// |
| /// You can grab a set of keys within a range. To learn more, see [IDBKeyRange]. |
| /// |
| /// --- |
| /// |
| /// API documentation sourced from |
| /// [MDN Web Docs](https://developer.mozilla.org/en-US/docs/Web/API/IDBIndex). |
| extension type IDBIndex._(JSObject _) implements JSObject { |
| /// The **`get()`** method of the [IDBIndex] |
| /// interface returns an [IDBRequest] object, and, in a separate thread, |
| /// finds either the value in the referenced object store that corresponds to |
| /// the given |
| /// key or the first corresponding value, if `key` is set to an |
| /// [IDBKeyRange]. |
| /// |
| /// If a value is found, then a structured clone of it is created and set as |
| /// the |
| /// `result` of the request object: this returns the record the key is |
| /// associated |
| /// with. |
| external IDBRequest get(JSAny? query); |
| |
| /// The **`getKey()`** method of the [IDBIndex] |
| /// interface returns an [IDBRequest] object, and, in a separate thread, |
| /// finds either the primary key that corresponds to the given key in this |
| /// index or the |
| /// first corresponding primary key, if `key` is set to an |
| /// [IDBKeyRange]. |
| /// |
| /// If a primary key is found, it is set as the `result` of the request |
| /// object. |
| /// Note that this doesn't return the whole record as [IDBIndex.get] does. |
| external IDBRequest getKey(JSAny? query); |
| |
| /// The **`getAll()`** method of the [IDBIndex] |
| /// interface retrieves all objects that are inside the index. |
| /// |
| /// There is a performance cost associated with looking at the `value` |
| /// property |
| /// of a cursor, because the object is created lazily. To use a feature |
| /// like `getAll()`, the browser has to create all the objects at once. If you |
| /// are just interested in looking at each of the keys, for instance, it is |
| /// more efficient |
| /// to use a |
| /// [cursor](https://developer.mozilla.org/en-US/docs/Web/API/IDBCursor). If |
| /// you are trying to get an |
| /// array of all the objects in an object store, though, you should |
| /// use `getAll()`. |
| external IDBRequest getAll([ |
| JSAny? query, |
| int count, |
| ]); |
| |
| /// The **`getAllKeys()`** method of the [IDBIndex] |
| /// interface asynchronously retrieves the primary keys of all objects inside |
| /// the index, |
| /// setting them as the `result` of the request object. |
| external IDBRequest getAllKeys([ |
| JSAny? query, |
| int count, |
| ]); |
| |
| /// The **`count()`** method of the [IDBIndex] |
| /// interface returns an [IDBRequest] object, and in a separate thread, |
| /// returns the number of records within a key range. |
| external IDBRequest count([JSAny? query]); |
| |
| /// The **`openCursor()`** method of the [IDBIndex] |
| /// interface returns an [IDBRequest] object, and, in a separate thread, |
| /// creates a |
| /// [cursor](https://developer.mozilla.org/en-US/docs/Web/API/IndexedDB_API/Basic_Terminology#cursor) |
| /// over the specified key |
| /// range. |
| /// |
| /// The method sets the position of the cursor to the appropriate record, |
| /// based on the |
| /// specified direction. |
| /// |
| /// If the key range is not specified or is null, then the range includes all |
| /// the records. |
| external IDBRequest openCursor([ |
| JSAny? query, |
| IDBCursorDirection direction, |
| ]); |
| |
| /// The **`openKeyCursor()`** method of the |
| /// [IDBIndex] interface returns an [IDBRequest] object, and, in |
| /// a separate thread, creates a cursor over the specified key range, as |
| /// arranged by this |
| /// index. |
| /// |
| /// The method sets the position of the cursor to the appropriate key, based |
| /// on the |
| /// specified direction. |
| /// |
| /// If the key range is not specified or is null, then the range includes all |
| /// the keys. |
| /// |
| /// > [!NOTE] |
| /// > Cursors returned by `openKeyCursor()` do not |
| /// > make the referenced value available as |
| /// > [`IDBIndex.openCursor`](https://developer.mozilla.org/en-US/docs/Web/API/IDBIndex/openCursor) |
| /// > does. |
| /// > This makes obtaining a list of keys much more efficient. |
| external IDBRequest openKeyCursor([ |
| JSAny? query, |
| IDBCursorDirection direction, |
| ]); |
| |
| /// The **`name`** property of the [IDBIndex] |
| /// interface contains a string which names the index. |
| external String get name; |
| external set name(String value); |
| |
| /// The **`objectStore`** property of the [IDBIndex] |
| /// interface returns the object store referenced by the current index. |
| external IDBObjectStore get objectStore; |
| |
| /// The **`keyPath`** property of the [IDBIndex] |
| /// interface returns the |
| /// [key path](https://developer.mozilla.org/en-US/docs/Web/API/IndexedDB_API/Basic_Terminology#key_path) |
| /// of the current index. If null, this index is not auto-populated. |
| external JSAny? get keyPath; |
| |
| /// The **`multiEntry`** read-only property of the |
| /// [IDBIndex] interface returns a boolean value that affects how the index |
| /// behaves when the result of evaluating the index's key path yields an |
| /// array. |
| /// |
| /// This is decided when the index is created, using the |
| /// [IDBObjectStore.createIndex] method. This method takes an optional |
| /// `options` parameter whose `multiEntry` property is set to `true`/`false`. |
| external bool get multiEntry; |
| |
| /// The **`unique`** read-only property returns a boolean that |
| /// states whether the index allows duplicate keys. |
| /// |
| /// This is decided when the index is created, using the |
| /// [IDBObjectStore.createIndex] method. This method takes an optional |
| /// parameter, `unique`, which if set to `true` means that the index |
| /// will not be able to accept duplicate entries. |
| external bool get unique; |
| } |
| |
| /// The **`IDBKeyRange`** interface of the |
| /// [IndexedDB API](https://developer.mozilla.org/en-US/docs/Web/API/IndexedDB_API) |
| /// represents a continuous interval over some data type that is used for keys. |
| /// Records can be retrieved from [IDBObjectStore] and [IDBIndex] objects using |
| /// keys or a range of keys. You can limit the range using lower and upper |
| /// bounds. For example, you can iterate over all values of a key in the value |
| /// range A–Z. |
| /// |
| /// A key range can be a single value or a range with upper and lower bounds or |
| /// endpoints. If the key range has both upper and lower bounds, then it is |
| /// _bounded_; if it has no bounds, it is _unbounded_. A bounded key range can |
| /// either be open (the endpoints are excluded) or closed (the endpoints are |
| /// included). To retrieve all keys within a certain range, you can use the |
| /// following code constructs: |
| /// |
| /// | Range | Code | |
| /// | --------------------------- | -------------------------------------- | |
| /// | All keys ≥ **x** | `IDBKeyRange.lowerBound(x)` | |
| /// | All keys > **x** | `IDBKeyRange.lowerBound(x, true)` | |
| /// | All keys ≤ **y** | `IDBKeyRange.upperBound(y)` | |
| /// | All keys < **y** | `IDBKeyRange.upperBound(y, true)` | |
| /// | All keys ≥ **x** && ≤ **y** | `IDBKeyRange.bound(x, y)` | |
| /// | All keys > **x** &&< **y** | `IDBKeyRange.bound(x, y, true, true)` | |
| /// | All keys > **x** && ≤ **y** | `IDBKeyRange.bound(x, y, true, false)` | |
| /// | All keys ≥ **x** &&< **y** | `IDBKeyRange.bound(x, y, false, true)` | |
| /// | The key = **z** | `IDBKeyRange.only(z)` | |
| /// |
| /// A key is in a key range if the following conditions are true: |
| /// |
| /// - The lower value of the key range is one of the following: |
| /// |
| /// - `undefined` |
| /// - Less than key value |
| /// - Equal to key value if `lowerOpen` is `false`. |
| /// |
| /// - The upper value of the key range is one of the following: |
| /// |
| /// - `undefined` |
| /// - Greater than key value |
| /// - Equal to key value if `upperOpen` is `false`. |
| /// |
| /// --- |
| /// |
| /// API documentation sourced from |
| /// [MDN Web Docs](https://developer.mozilla.org/en-US/docs/Web/API/IDBKeyRange). |
| extension type IDBKeyRange._(JSObject _) implements JSObject { |
| /// The **`only()`** static method of the [IDBKeyRange] |
| /// interface creates a new key range containing a single value. |
| external static IDBKeyRange only(JSAny? value); |
| |
| /// The **`lowerBound()`** static method of the |
| /// [IDBKeyRange] interface creates a new key range with only a lower bound. |
| /// By default, it includes the lower endpoint value and is closed. |
| external static IDBKeyRange lowerBound( |
| JSAny? lower, [ |
| bool open, |
| ]); |
| |
| /// The **`upperBound()`** static method of the |
| /// [IDBKeyRange] interface creates a new upper-bound key range. By default, |
| /// it includes the upper endpoint value and is closed. |
| external static IDBKeyRange upperBound( |
| JSAny? upper, [ |
| bool open, |
| ]); |
| |
| /// The **`bound()`** static method of the [IDBKeyRange] |
| /// interface creates a new key range with the specified upper and lower |
| /// bounds. The |
| /// bounds can be open (that is, the bounds exclude the endpoint values) or |
| /// closed (that |
| /// is, the bounds include the endpoint values). By default, the bounds are |
| /// closed. |
| external static IDBKeyRange bound( |
| JSAny? lower, |
| JSAny? upper, [ |
| bool lowerOpen, |
| bool upperOpen, |
| ]); |
| |
| /// The `includes()` method of the [IDBKeyRange] |
| /// interface returns a boolean indicating whether a specified key is inside |
| /// the key |
| /// range. |
| external bool includes(JSAny? key); |
| |
| /// The **`lower`** read-only property of the |
| /// [IDBKeyRange] interface returns the lower bound of the key range. |
| external JSAny? get lower; |
| |
| /// The **`upper`** read-only property of the |
| /// [IDBKeyRange] interface returns the upper bound of the key range. |
| external JSAny? get upper; |
| |
| /// The **`lowerOpen`** read-only property of the |
| /// [IDBKeyRange] interface returns a boolean indicating whether the |
| /// lower-bound value is included in the key range. |
| external bool get lowerOpen; |
| |
| /// The **`upperOpen`** read-only property of the |
| /// [IDBKeyRange] interface returns a boolean indicating whether the |
| /// upper-bound value is included in the key range. |
| external bool get upperOpen; |
| } |
| |
| /// > [!NOTE] |
| /// > Not to be confused with [IDBCursorWithValue] which is just an |
| /// > **`IDBCursor`** interface with an additional **`value`** property. |
| /// |
| /// The **`IDBCursor`** interface of the |
| /// [IndexedDB API](https://developer.mozilla.org/en-US/docs/Web/API/IndexedDB_API) |
| /// represents a |
| /// [cursor](https://developer.mozilla.org/en-US/docs/Web/API/IndexedDB_API/Basic_Terminology#cursor) |
| /// for traversing or iterating over multiple records in a database. |
| /// |
| /// The cursor has a source that indicates which index or object store it is |
| /// iterating over. It has a position within the range, and moves in a direction |
| /// that is increasing or decreasing in the order of record keys. The cursor |
| /// enables an application to asynchronously process all the records in the |
| /// cursor's range. |
| /// |
| /// You can have an unlimited number of cursors at the same time. You always get |
| /// the same `IDBCursor` object representing a given cursor. Operations are |
| /// performed on the underlying index or object store. |
| /// |
| /// --- |
| /// |
| /// API documentation sourced from |
| /// [MDN Web Docs](https://developer.mozilla.org/en-US/docs/Web/API/IDBCursor). |
| extension type IDBCursor._(JSObject _) implements JSObject { |
| /// The **`advance()`** method of the [IDBCursor] |
| /// interface sets the number of times a cursor should move |
| /// its position forward. |
| external void advance(int count); |
| |
| /// The **`continue()`** method of the [IDBCursor] |
| /// interface advances the cursor to the next position along its direction, to |
| /// the item |
| /// whose key matches the optional key parameter. If no key is specified, the |
| /// cursor |
| /// advances to the immediate next position, based on its direction. |
| @JS('continue') |
| external void continue_([JSAny? key]); |
| |
| /// The **`continuePrimaryKey()`** method of the |
| /// [IDBCursor] interface advances the cursor to the item whose key |
| /// matches the key parameter as well as whose primary key matches the primary |
| /// key |
| /// parameter. |
| /// |
| /// A typical use case, is to resume the iteration where a previous cursor has |
| /// been closed, |
| /// without having to compare the keys one by one. |
| /// |
| /// Calling this method more than once before new cursor data has been loaded |
| /// - for |
| /// example, calling `continuePrimaryKey()` twice from the same onsuccess |
| /// handler |
| /// \- results in an `InvalidStateError` being thrown on the second call |
| /// because |
| /// the cursor's got value flag has been unset. |
| /// |
| /// This method is only valid for cursors coming from an index. Using it for |
| /// cursors coming |
| /// from an object store will throw an error. |
| external void continuePrimaryKey( |
| JSAny? key, |
| JSAny? primaryKey, |
| ); |
| |
| /// The **`update()`** method of the [IDBCursor] |
| /// interface returns an [IDBRequest] object, and, in a separate thread, |
| /// updates the value at the current position of the cursor in the object |
| /// store. If the |
| /// cursor points to a record that has just been deleted, a new record is |
| /// created. |
| /// |
| /// Be aware that you can't call `update()` (or |
| /// [IDBCursor.delete]) on cursors obtained from |
| /// [IDBIndex.openKeyCursor]. For such needs, you have to use |
| /// [IDBIndex.openCursor] instead. |
| external IDBRequest update(JSAny? value); |
| |
| /// The **`delete()`** method of the [IDBCursor] |
| /// interface returns an [IDBRequest] object, and, in a separate thread, |
| /// deletes the record at the cursor's position, without changing the cursor's |
| /// position. |
| /// Once the record is deleted, the cursor's value is set to null. |
| /// |
| /// Be aware that you can't call `delete()` (or |
| /// [IDBCursor.update]) on cursors obtained from |
| /// [IDBIndex.openKeyCursor]. For such needs, you have to use |
| /// [IDBIndex.openCursor] instead. |
| external IDBRequest delete(); |
| |
| /// The **`source`** read-only property of the |
| /// [IDBCursor] interface returns the [IDBObjectStore] or |
| /// [IDBIndex] that the cursor is iterating over. This function never returns |
| /// null or throws an exception, even if the cursor is currently being |
| /// iterated, has |
| /// iterated past its end, or its transaction is not active. |
| external JSObject get source; |
| |
| /// The **`direction`** read-only property of the |
| /// [IDBCursor] interface is a string that returns the |
| /// direction of traversal of the cursor (set using |
| /// [IDBObjectStore.openCursor] for example). See the [Value](#value) |
| /// section below for possible values. |
| external IDBCursorDirection get direction; |
| |
| /// The **`key`** read-only property of the |
| /// [IDBCursor] interface returns the key for the record at the cursor's |
| /// position. If the cursor is outside its range, this is set to undefined. |
| /// The cursor's |
| /// key can be any data type. |
| external JSAny? get key; |
| |
| /// The **`primaryKey`** read-only property of the |
| /// [IDBCursor] interface returns the cursor's current effective key. If the |
| /// cursor is currently being iterated or has iterated outside its range, this |
| /// is set to |
| /// undefined. The cursor's primary key can be any data type. |
| external JSAny? get primaryKey; |
| |
| /// The **`request`** read-only property of the [IDBCursor] interface returns |
| /// the [IDBRequest] used to obtain the cursor. |
| external IDBRequest get request; |
| } |
| |
| /// The **`IDBCursorWithValue`** interface of the |
| /// [IndexedDB API](https://developer.mozilla.org/en-US/docs/Web/API/IndexedDB_API) |
| /// represents a |
| /// [cursor](https://developer.mozilla.org/en-US/docs/Web/API/IndexedDB_API/Basic_Terminology#cursor) |
| /// for traversing or iterating over multiple records in a database. It is the |
| /// same as the [IDBCursor], except that it includes the `value` property. |
| /// |
| /// The cursor has a source that indicates which index or object store it is |
| /// iterating over. It has a position within the range, and moves in a direction |
| /// that is increasing or decreasing in the order of record keys. The cursor |
| /// enables an application to asynchronously process all the records in the |
| /// cursor's range. |
| /// |
| /// You can have an unlimited number of cursors at the same time. You always get |
| /// the same `IDBCursorWithValue` object representing a given cursor. Operations |
| /// are performed on the underlying index or object store. |
| /// |
| /// --- |
| /// |
| /// API documentation sourced from |
| /// [MDN Web Docs](https://developer.mozilla.org/en-US/docs/Web/API/IDBCursorWithValue). |
| extension type IDBCursorWithValue._(JSObject _) implements IDBCursor, JSObject { |
| /// The **`value`** read-only property of the |
| /// [IDBCursorWithValue] interface returns the value of the current cursor, |
| /// whatever that is. |
| external JSAny? get value; |
| } |
| |
| /// The **`IDBTransaction`** interface of the |
| /// [IndexedDB API](https://developer.mozilla.org/en-US/docs/Web/API/IndexedDB_API) |
| /// provides a static, asynchronous transaction on a database using event |
| /// handler attributes. All reading and writing of data is done within |
| /// transactions. You use [IDBDatabase] to start transactions, `IDBTransaction` |
| /// to set the mode of the transaction (e.g. is it `readonly` or `readwrite`), |
| /// and you access an [IDBObjectStore] to make a request. You can also use an |
| /// `IDBTransaction` object to abort transactions. |
| /// |
| /// Transactions are started when the transaction is created, not when the first |
| /// request is placed; for example consider this: |
| /// |
| /// ```js |
| /// const trans1 = db.transaction("foo", "readwrite"); |
| /// const trans2 = db.transaction("foo", "readwrite"); |
| /// const objectStore2 = trans2.objectStore("foo"); |
| /// const objectStore1 = trans1.objectStore("foo"); |
| /// objectStore2.put("2", "key"); |
| /// objectStore1.put("1", "key"); |
| /// ``` |
| /// |
| /// After the code is executed the object store should contain the value "2", |
| /// since `trans2` should run after `trans1`. |
| /// |
| /// A transaction alternates between _active_ and _inactive_ states between |
| /// event loop tasks. It's active in the task when it was created, and in each |
| /// task of the requests' |
| /// [`success`](https://developer.mozilla.org/en-US/docs/Web/API/IDBRequest/success_event) |
| /// or |
| /// [`error`](https://developer.mozilla.org/en-US/docs/Web/API/IDBRequest/error_event) |
| /// event handlers. It's inactive in all other tasks, in which case placing |
| /// requests will fail. If no new requests are placed when the transaction is |
| /// active, and there are no other outstanding requests, the transaction will |
| /// automatically commit. |
| /// |
| /// --- |
| /// |
| /// API documentation sourced from |
| /// [MDN Web Docs](https://developer.mozilla.org/en-US/docs/Web/API/IDBTransaction). |
| extension type IDBTransaction._(JSObject _) implements EventTarget, JSObject { |
| /// The **`objectStore()`** method of the |
| /// [IDBTransaction] interface returns an object store that has already been |
| /// added to the scope of this transaction. |
| /// |
| /// Every call to this method on the same transaction object, with the same |
| /// name, returns |
| /// the same [IDBObjectStore] instance. If this method is called on a |
| /// different |
| /// transaction object, a different [IDBObjectStore] instance is returned. |
| external IDBObjectStore objectStore(String name); |
| |
| /// The **`commit()`** method of the [IDBTransaction] interface commits the |
| /// transaction if it is called on an active transaction. |
| /// |
| /// Note that `commit()` doesn't normally _have_ to be called — a transaction |
| /// will automatically commit when all outstanding requests have been |
| /// satisfied and no new requests have been made. `commit()` can be used to |
| /// start the commit process without waiting for events from outstanding |
| /// requests to be dispatched. |
| /// |
| /// If it is called on a transaction that is not active, it throws an |
| /// `InvalidStateError` [DOMException]. |
| external void commit(); |
| |
| /// The **`abort()`** method of the [IDBTransaction] |
| /// interface rolls back all the changes to objects in the database associated |
| /// with this |
| /// transaction. |
| /// |
| /// All pending [IDBRequest] objects created during this transaction have |
| /// their [IDBRequest.error] attribute set to an `AbortError` [DOMException]. |
| external void abort(); |
| |
| /// The **`objectStoreNames`** read-only property of the |
| /// [IDBTransaction] interface returns a [DOMStringList] of names |
| /// of [IDBObjectStore] objects. |
| external DOMStringList get objectStoreNames; |
| |
| /// The **`mode`** read-only property of the |
| /// [IDBTransaction] interface returns the current mode for accessing the |
| /// data in the object stores in the scope of the transaction (i.e. is the |
| /// mode to be |
| /// read-only, or do you want to write to the object stores?) The default |
| /// value is |
| /// `readonly`. |
| external IDBTransactionMode get mode; |
| |
| /// The **`durability`** read-only property of the [IDBTransaction] interface |
| /// returns the durability hint the transaction was created with. |
| /// This is a hint to the user agent of whether to prioritize performance or |
| /// durability when committing the transaction. |
| /// |
| /// The value of this property is defined in the |
| /// [`options.durability`](/en-US/docs/Web/API/IDBDatabase/transaction#options) |
| /// parameter when creating a transaction using [IDBDatabase.transaction]. |
| external IDBTransactionDurability get durability; |
| |
| /// The **`db`** read-only property of the [IDBTransaction] interface returns |
| /// the database connection |
| /// with which this transaction is associated. |
| external IDBDatabase get db; |
| |
| /// The **`IDBTransaction.error`** property of the [IDBTransaction] interface |
| /// returns the type of error when there is an unsuccessful transaction. |
| external DOMException? get error; |
| external EventHandler get onabort; |
| external set onabort(EventHandler value); |
| external EventHandler get oncomplete; |
| external set oncomplete(EventHandler value); |
| external EventHandler get onerror; |
| external set onerror(EventHandler value); |
| } |