Skip to content

Commit a3293d8

Browse files
mpreveljapgolly
authored andcommitted
feat(idb): Update to newer API
IDB DomString constants have been removed from browser API and replaced by raw String values. Remove IDB DOMString constants that are no more supported and lead to an UndefinedBehaviorError. Add these constants in a typesafe way.
1 parent 32bf717 commit a3293d8

File tree

2 files changed

+129
-44
lines changed

2 files changed

+129
-44
lines changed

src/main/scala/org/scalajs/dom/idb.scala

+2-2
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ package org.scalajs.dom
55
*/
66
object idb {
77
type Cursor = raw.IDBCursor
8-
@inline def Cursor = raw.IDBCursor
8+
@inline def CursorDirection = raw.IDBCursorDirection
99
type CursorWithValue = raw.IDBCursorWithValue
1010
type Database = raw.IDBDatabase
1111
type Factory = raw.IDBFactory
@@ -16,7 +16,7 @@ object idb {
1616
type OpenDBRequest = raw.IDBOpenDBRequest
1717
type Request = raw.IDBRequest
1818
type Transaction = raw.IDBTransaction
19-
@inline def Transaction = raw.IDBTransaction
19+
@inline def TransactionMode = raw.IDBTransactionMode
2020
type VersionChangeEvent = raw.IDBVersionChangeEvent
2121
@deprecated(
2222
"Removed. This feature is no longer recommended. Though some browsers might still support it, it may have already been removed from the relevant web standards, may be in the process of being dropped, or may only be kept for compatibility purposes. Avoid using it, and update existing code if possible. See https://developer.mozilla.org/en-US/docs/Web/API/IDBEnvironment",

src/main/scala/org/scalajs/dom/raw/Idb.scala

+127-42
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,45 @@ package org.scalajs.dom.raw
1111

1212
import scala.scalajs.js
1313
import scala.scalajs.js.annotation._
14+
import scala.scalajs.js.|
15+
16+
/**
17+
* IndexedDB transaction mode
18+
* Provides constants for IDB Transaction modes
19+
* These constants have been removed from browser support
20+
* and replaced by String values
21+
*/
22+
@js.native
23+
sealed trait IDBTransactionMode extends js.Any
24+
25+
object IDBTransactionMode {
26+
27+
/**
28+
* Allows data to be read but not changed.
29+
* It is the default transaction mode.
30+
*
31+
* MDN
32+
*/
33+
val READ_ONLY = "readonly".asInstanceOf[IDBTransactionMode]
34+
35+
/**
36+
* Allows any operation to be performed, including ones that delete and create object
37+
* stores and indexes. This mode is for updating the version number of transactions
38+
* that were started using the setVersion() method of IDBDatabase objects.
39+
* Transactions of this mode cannot run concurrently with other transactions.
40+
*
41+
* MDN
42+
*/
43+
val VERSION_CHANGE = "versionchange".asInstanceOf[IDBTransactionMode]
44+
45+
/**
46+
* Allows reading and writing of data in existing data stores to be changed.
47+
*
48+
* MDN
49+
*/
50+
val READ_WRITE = "readwrite".asInstanceOf[IDBTransactionMode]
51+
52+
}
1453

1554
/**
1655
* The IDBObjectStore interface of the IndexedDB API represents an object store in
@@ -86,8 +125,25 @@ class IDBObjectStore extends js.Object {
86125
*/
87126
def put(value: js.Any, key: js.Any = js.native): IDBRequest = js.native
88127

89-
def openCursor(range: js.Any = js.native,
90-
direction: String = js.native): IDBRequest = js.native
128+
/**
129+
* The method sets the position of the cursor to the appropriate record,
130+
* based on the specified direction.
131+
*
132+
* MDN
133+
*/
134+
def openCursor(range: js.UndefOr[IDBKeyRange | js.Any] = js.undefined,
135+
direction: js.UndefOr[
136+
IDBCursorDirection] = js.undefined): IDBRequest = js.native
137+
138+
/**
139+
* The method sets the position of the cursor to the appropriate key,
140+
* based on the specified direction.
141+
*
142+
* MDN
143+
*/
144+
def openKeyCursor(range: js.UndefOr[IDBKeyRange | js.Any] = js.undefined,
145+
direction: js.UndefOr[
146+
IDBCursorDirection] = js.undefined): IDBRequest = js.native
91147

92148
/**
93149
* Note that this method must be called only from a VersionChange transaction mode
@@ -113,6 +169,32 @@ class IDBObjectStore extends js.Object {
113169
*/
114170
def get(key: js.Any): IDBRequest = js.native
115171

172+
/**
173+
* If a value is successfully found, then a structured clone of it is created and set as
174+
* the result of the request object.
175+
*
176+
* MDN
177+
*/
178+
def getAll(query: js.UndefOr[IDBKeyRange | js.Any] = js.undefined,
179+
count: js.UndefOr[Int] = js.undefined): IDBRequest = js.native
180+
181+
/**
182+
* If a value is successfully found, then a structured clone of it is created and set as
183+
* the result of the request object.
184+
*
185+
* MDN
186+
*/
187+
def getAllKeys(query: js.UndefOr[IDBKeyRange | js.Any] = js.undefined,
188+
count: js.UndefOr[Int] = js.undefined): IDBRequest = js.native
189+
190+
/**
191+
* If a value is successfully found, then a structured clone of it is created and set as
192+
* the result of the request object.
193+
*
194+
* MDN
195+
*/
196+
def getKey(key: js.Any): IDBRequest = js.native
197+
116198
/**
117199
* returns an IDBRequest object, and, in a separate thread, deletes the current
118200
* object store.
@@ -230,7 +312,7 @@ class IDBIndex extends js.Object {
230312
* MDN
231313
*/
232314
def openKeyCursor(range: IDBKeyRange = js.native,
233-
direction: String = js.native): IDBRequest = js.native
315+
direction: IDBCursorDirection = js.native): IDBRequest = js.native
234316

235317
/**
236318
* Returns an IDBRequest object, and, in a separate thread, finds either the value in
@@ -248,7 +330,7 @@ class IDBIndex extends js.Object {
248330
* MDN
249331
*/
250332
def openCursor(range: IDBKeyRange = js.native,
251-
direction: String = js.native): IDBRequest = js.native
333+
direction: IDBCursorDirection = js.native): IDBRequest = js.native
252334
}
253335

254336
/**
@@ -282,7 +364,7 @@ class IDBCursor extends js.Object {
282364
*
283365
* MDN
284366
*/
285-
def direction: String = js.native
367+
def direction: IDBCursorDirection = js.native
286368

287369
/**
288370
* Returns the key for the record at the cursor's position. If the cursor is outside its
@@ -336,13 +418,45 @@ class IDBCursor extends js.Object {
336418
}
337419

338420
@js.native
339-
@JSGlobal
340-
object IDBCursor extends js.Object {
421+
sealed trait IDBCursorDirection extends js.Any
422+
423+
object IDBCursorDirection {
424+
425+
/**
426+
* The cursor shows all records, including duplicates.
427+
* It starts at the upper bound of the key range and moves downwards
428+
* (monotonically decreasing in the order of keys).
429+
*
430+
* MDN
431+
*/
432+
val PREV = "prev".asInstanceOf[IDBCursorDirection]
341433

342-
val PREV: String = js.native
343-
val PREV_NO_DUPLICATE: String = js.native
344-
val NEXT: String = js.native
345-
val NEXT_NO_DUPLICATE: String = js.native
434+
/**
435+
* The cursor shows all records, excluding duplicates.
436+
* If multiple records exist with the same key, only the first one iterated is retrieved.
437+
* It starts at the upper bound of the key range and moves downwards.
438+
*
439+
* MDN
440+
*/
441+
val PREV_UNIQUE = "prevunique".asInstanceOf[IDBCursorDirection]
442+
443+
/**
444+
* The cursor shows all records, including duplicates.
445+
* It starts at the lower bound of the key range and moves upwards
446+
* (monotonically increasing in the order of keys).
447+
*
448+
* MDN
449+
*/
450+
val NEXT = "next".asInstanceOf[IDBCursorDirection]
451+
452+
/**
453+
* The cursor shows all records, excluding duplicates.
454+
* If multiple records exist with the same key, only the first one iterated is retrieved.
455+
* It starts at the lower bound of the key range and moves upwards.
456+
*
457+
* MDN
458+
*/
459+
val NEXT_UNIQUE = "nextunique".asInstanceOf[IDBCursorDirection]
346460
}
347461

348462
/**
@@ -476,7 +590,7 @@ class IDBTransaction extends EventTarget {
476590
*
477591
* MDN
478592
*/
479-
def mode: String = js.native
593+
def mode: IDBTransactionMode = js.native
480594

481595
/**
482596
* Returns a DOMException indicating the type of error that occured when there is an
@@ -520,35 +634,6 @@ class IDBTransaction extends EventTarget {
520634
def objectStore(name: String): IDBObjectStore = js.native
521635
}
522636

523-
@js.native
524-
@JSGlobal
525-
object IDBTransaction extends js.Object {
526-
527-
/**
528-
* Allows data to be read but not changed.
529-
*
530-
* MDN
531-
*/
532-
val READ_ONLY: String = js.native
533-
534-
/**
535-
* Allows any operation to be performed, including ones that delete and create object
536-
* stores and indexes. This mode is for updating the version number of transactions
537-
* that were started using the setVersion() method of IDBDatabase objects.
538-
* Transactions of this mode cannot run concurrently with other transactions.
539-
*
540-
* MDN
541-
*/
542-
val VERSION_CHANGE: String = js.native
543-
544-
/**
545-
* Allows reading and writing of data in existing data stores to be changed.
546-
*
547-
* MDN
548-
*/
549-
val READ_WRITE: String = js.native
550-
}
551-
552637
/**
553638
* The IDBDatabase interface of the IndexedDB API provides asynchronous access
554639
* to a connection to a database. Use it to create, manipulate, and delete
@@ -643,7 +728,7 @@ class IDBDatabase extends EventTarget {
643728
* MDN
644729
*/
645730
def transaction(storeNames: js.Any,
646-
mode: String = js.native): IDBTransaction = js.native
731+
mode: IDBTransactionMode = js.native): IDBTransaction = js.native
647732

648733
/**
649734
* As with createObjectStore, this method can be called only within a versionchange

0 commit comments

Comments
 (0)