@@ -16,6 +16,7 @@ import kotlinx.coroutines.selects.select
16
16
import kotlinx.serialization.DeserializationStrategy
17
17
import kotlinx.serialization.SerializationStrategy
18
18
import kotlin.js.Promise
19
+ import kotlin.js.json
19
20
import dev.gitlive.firebase.externals.database.DataSnapshot as JsDataSnapshot
20
21
import dev.gitlive.firebase.externals.database.DatabaseReference as JsDatabaseReference
21
22
import dev.gitlive.firebase.externals.database.OnDisconnect as JsOnDisconnect
@@ -33,19 +34,18 @@ import dev.gitlive.firebase.externals.database.startAt as jsStartAt
33
34
internal inline fun <reified T > encode (value : T , shouldEncodeElementDefault : Boolean ) =
34
35
encode(value, shouldEncodeElementDefault, serverTimestamp())
35
36
36
- internal fun <T > encode (
37
- strategy : SerializationStrategy <T >,
38
- value : T ,
39
- shouldEncodeElementDefault : Boolean
40
- ): Any? = encode(strategy, value, shouldEncodeElementDefault, serverTimestamp())
37
+ internal fun <T > encode (strategy : SerializationStrategy <T >, value : T , shouldEncodeElementDefault : Boolean ): Any? =
38
+ encode(strategy, value, shouldEncodeElementDefault, serverTimestamp())
41
39
42
40
43
- actual val Firebase .database get() = rethrow { FirebaseDatabase (getDatabase()) }
41
+ actual val Firebase .database
42
+ get() = rethrow { FirebaseDatabase (getDatabase()) }
44
43
45
44
actual fun Firebase.database (app : FirebaseApp ) =
46
45
rethrow { FirebaseDatabase (getDatabase(app = app.js)) }
47
46
48
- actual fun Firebase.database (url : String ) = rethrow { FirebaseDatabase (getDatabase(url = url)) }
47
+ actual fun Firebase.database (url : String ) =
48
+ rethrow { FirebaseDatabase (getDatabase(url = url)) }
49
49
50
50
actual fun Firebase.database (app : FirebaseApp , url : String ) =
51
51
rethrow { FirebaseDatabase (getDatabase(app = app.js, url = url)) }
@@ -55,9 +55,7 @@ actual class FirebaseDatabase internal constructor(val js: Database) {
55
55
actual fun reference () = rethrow { DatabaseReference (ref(js)) }
56
56
actual fun setPersistenceEnabled (enabled : Boolean ) {}
57
57
actual fun setLoggingEnabled (enabled : Boolean ) = rethrow { enableLogging(enabled) }
58
-
59
- actual fun useEmulator (host : String , port : Int ) =
60
- rethrow { connectDatabaseEmulator(js, host, port) }
58
+ actual fun useEmulator (host : String , port : Int ) = rethrow { connectDatabaseEmulator(js, host, port) }
61
59
}
62
60
63
61
actual open class Query internal constructor(open val js : JsQuery ) {
@@ -79,7 +77,6 @@ actual open class Query internal constructor(open val js: JsQuery) {
79
77
}
80
78
81
79
actual fun childEvents (vararg types : ChildEvent .Type ) = callbackFlow<ChildEvent > {
82
-
83
80
val unsubscribes = rethrow {
84
81
types.map { type ->
85
82
val callback: ChangeSnapshotCallback = { snapshot, previousChildName ->
@@ -105,48 +102,36 @@ actual open class Query internal constructor(open val js: JsQuery) {
105
102
106
103
}
107
104
}
108
-
109
105
awaitClose { rethrow { unsubscribes.forEach { it.invoke() } } }
110
106
}
111
107
112
- actual fun startAt (value : String , key : String? ) =
113
- Query (query(js, jsStartAt(value, key ? : undefined)))
108
+ actual fun startAt (value : String , key : String? ) = Query (query(js, jsStartAt(value, key ? : undefined)))
114
109
115
- actual fun startAt (value : Double , key : String? ) =
116
- Query (query(js, jsStartAt(value, key ? : undefined)))
110
+ actual fun startAt (value : Double , key : String? ) = Query (query(js, jsStartAt(value, key ? : undefined)))
117
111
118
- actual fun startAt (value : Boolean , key : String? ) =
119
- Query (query(js, jsStartAt(value, key ? : undefined)))
112
+ actual fun startAt (value : Boolean , key : String? ) = Query (query(js, jsStartAt(value, key ? : undefined)))
120
113
121
- actual fun endAt (value : String , key : String? ) =
122
- Query (query(js, jsEndAt(value, key ? : undefined)))
114
+ actual fun endAt (value : String , key : String? ) = Query (query(js, jsEndAt(value, key ? : undefined)))
123
115
124
- actual fun endAt (value : Double , key : String? ) =
125
- Query (query(js, jsEndAt(value, key ? : undefined)))
116
+ actual fun endAt (value : Double , key : String? ) = Query (query(js, jsEndAt(value, key ? : undefined)))
126
117
127
- actual fun endAt (value : Boolean , key : String? ) =
128
- Query (query(js, jsEndAt(value, key ? : undefined)))
118
+ actual fun endAt (value : Boolean , key : String? ) = Query (query(js, jsEndAt(value, key ? : undefined)))
129
119
130
120
actual fun limitToFirst (limit : Int ) = Query (query(js, jsLimitToFirst(limit)))
131
121
132
122
actual fun limitToLast (limit : Int ) = Query (query(js, jsLimitToLast(limit)))
133
123
134
- actual fun equalTo (value : String , key : String? ) =
135
- Query (query(js, jsEqualTo(value, key ? : undefined)))
124
+ actual fun equalTo (value : String , key : String? ) = Query (query(js, jsEqualTo(value, key ? : undefined)))
136
125
137
- actual fun equalTo (value : Double , key : String? ) =
138
- Query (query(js, jsEqualTo(value, key ? : undefined)))
126
+ actual fun equalTo (value : Double , key : String? ) = Query (query(js, jsEqualTo(value, key ? : undefined)))
139
127
140
- actual fun equalTo (value : Boolean , key : String? ) =
141
- Query (query(js, jsEqualTo(value, key ? : undefined)))
128
+ actual fun equalTo (value : Boolean , key : String? ) = Query (query(js, jsEqualTo(value, key ? : undefined)))
142
129
143
130
override fun toString () = js.toString()
144
131
145
132
}
146
133
147
- actual class DatabaseReference internal constructor(
148
- override val js : JsDatabaseReference
149
- ) : Query(js) {
134
+ actual class DatabaseReference internal constructor(override val js : JsDatabaseReference ) : Query(js) {
150
135
151
136
actual val key get() = rethrow { js.key }
152
137
actual fun push () = rethrow { DatabaseReference (push(js)) }
@@ -155,19 +140,16 @@ actual class DatabaseReference internal constructor(
155
140
actual fun onDisconnect () = rethrow { OnDisconnect (onDisconnect(js)) }
156
141
157
142
actual suspend fun updateChildren (update : Map <String , Any ?>, encodeDefaults : Boolean ) =
158
- rethrow { update(js, encode(update, encodeDefaults)!! ).awaitWhileOnline() }
143
+ rethrow { update(js, encode(update, encodeDefaults) ? : json() ).awaitWhileOnline() }
159
144
160
145
actual suspend fun removeValue () = rethrow { remove(js).awaitWhileOnline() }
161
146
162
147
actual suspend inline fun <reified T > setValue (value : T ? , encodeDefaults : Boolean ) = rethrow {
163
148
set(js, encode(value, encodeDefaults)).awaitWhileOnline()
164
149
}
165
150
166
- actual suspend fun <T > setValue (
167
- strategy : SerializationStrategy <T >,
168
- value : T ,
169
- encodeDefaults : Boolean
170
- ) = rethrow { set(js, encode(strategy, value, encodeDefaults)).awaitWhileOnline() }
151
+ actual suspend fun <T > setValue (strategy : SerializationStrategy <T >, value : T , encodeDefaults : Boolean ) =
152
+ rethrow { set(js, encode(strategy, value, encodeDefaults)).awaitWhileOnline() }
171
153
}
172
154
173
155
actual class DataSnapshot internal constructor(val js : JsDataSnapshot ) {
@@ -196,29 +178,20 @@ actual class OnDisconnect internal constructor(val js: JsOnDisconnect) {
196
178
actual suspend fun cancel () = rethrow { js.cancel().awaitWhileOnline() }
197
179
198
180
actual suspend fun updateChildren (update : Map <String , Any ?>, encodeDefaults : Boolean ) =
199
- rethrow { js.update(encode(update, encodeDefaults)!! ).awaitWhileOnline() }
181
+ rethrow { js.update(encode(update, encodeDefaults) ? : json() ).awaitWhileOnline() }
200
182
201
183
actual suspend inline fun <reified T > setValue (value : T , encodeDefaults : Boolean ) =
202
184
rethrow { js.set(encode(value, encodeDefaults)).awaitWhileOnline() }
203
185
204
- actual suspend fun <T > setValue (
205
- strategy : SerializationStrategy <T >,
206
- value : T ,
207
- encodeDefaults : Boolean
208
- ) =
186
+ actual suspend fun <T > setValue (strategy : SerializationStrategy <T >, value : T , encodeDefaults : Boolean ) =
209
187
rethrow { js.set(encode(strategy, value, encodeDefaults)).awaitWhileOnline() }
210
188
}
211
189
212
- actual class DatabaseException actual constructor(message : String? , cause : Throwable ? ) :
213
- RuntimeException (message, cause) {
214
- constructor (error: dynamic ) : this (
215
- " ${error.code ? : " UNKNOWN" } : ${error.message} " ,
216
- error.unsafeCast<Throwable >()
217
- )
190
+ actual class DatabaseException actual constructor(message : String? , cause : Throwable ? ) : RuntimeException(message, cause) {
191
+ constructor (error: dynamic ) : this (" ${error.code ? : " UNKNOWN" } : ${error.message} " , error.unsafeCast<Throwable >())
218
192
}
219
193
220
- inline fun <T , R > T.rethrow (function : T .() -> R ): R =
221
- dev.gitlive.firebase.database.rethrow { function() }
194
+ inline fun <T , R > T.rethrow (function : T .() -> R ): R = dev.gitlive.firebase.database.rethrow { function() }
222
195
223
196
inline fun <R > rethrow (function : () -> R ): R {
224
197
try {
0 commit comments