Skip to content

Commit 6d3b904

Browse files
committed
Refactor remote config
1 parent bd371ed commit 6d3b904

File tree

5 files changed

+61
-54
lines changed

5 files changed

+61
-54
lines changed

firebase-common/src/jsMain/kotlin/dev/gitlive/firebase/externals.kt

Lines changed: 0 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -40,38 +40,6 @@ external object firebase {
4040

4141
}
4242

43-
fun remoteConfig(app: App? = definedExternally): remoteConfig.RemoteConfig
44-
45-
object remoteConfig {
46-
interface RemoteConfig {
47-
var defaultConfig: Any
48-
var fetchTimeMillis: Long
49-
var lastFetchStatus: String
50-
val settings: Settings
51-
fun activate(): Promise<Boolean>
52-
fun ensureInitialized(): Promise<Unit>
53-
fun fetch(): Promise<Unit>
54-
fun fetchAndActivate(): Promise<Boolean>
55-
fun getAll(): Json
56-
fun getBoolean(key: String): Boolean
57-
fun getNumber(key: String): Number
58-
fun getString(key: String): String?
59-
fun getValue(key: String): Value
60-
}
61-
62-
interface Settings {
63-
var fetchTimeoutMillis: Number
64-
var minimumFetchIntervalMillis: Number
65-
}
66-
67-
interface Value {
68-
fun asBoolean(): Boolean
69-
fun asNumber(): Number
70-
fun asString(): String?
71-
fun getSource(): String
72-
}
73-
}
74-
7543
fun installations(app: App? = definedExternally): installations.Installations
7644

7745
object installations {
Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
@file:JsModule("firebase/remote-config")
2+
@file:JsNonModule
3+
4+
package dev.gitlive.firebase.externals.remoteconfig
5+
6+
import dev.gitlive.firebase.externals.app.FirebaseApp
7+
import kotlin.js.Json
8+
import kotlin.js.Promise
9+
10+
external fun activate(remoteConfig: RemoteConfig): Promise<Boolean>
11+
12+
external fun ensureInitialized(remoteConfig: RemoteConfig): Promise<Unit>
13+
14+
external fun fetchAndActivate(remoteConfig: RemoteConfig): Promise<Boolean>
15+
16+
external fun fetchConfig(remoteConfig: RemoteConfig): Promise<Unit>
17+
18+
external fun getAll(remoteConfig: RemoteConfig): Json
19+
20+
external fun getBoolean(remoteConfig: RemoteConfig, key: String): Boolean
21+
22+
external fun getNumber(remoteConfig: RemoteConfig, key: String): Number
23+
24+
external fun getRemoteConfig(app: FirebaseApp? = definedExternally): RemoteConfig
25+
26+
external fun getString(remoteConfig: RemoteConfig, key: String): String?
27+
28+
external fun getValue(remoteConfig: RemoteConfig, key: String): Value
29+
30+
external interface RemoteConfig {
31+
var defaultConfig: Any
32+
var fetchTimeMillis: Long
33+
var lastFetchStatus: String
34+
val settings: Settings
35+
}
36+
37+
external interface Settings {
38+
var fetchTimeoutMillis: Number
39+
var minimumFetchIntervalMillis: Number
40+
}
41+
42+
external interface Value {
43+
fun asBoolean(): Boolean
44+
fun asNumber(): Number
45+
fun asString(): String?
46+
fun getSource(): String
47+
}

firebase-common/src/jsMain/kotlin/dev/gitlive/firebase/externals2.kt

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -13,10 +13,6 @@ external object functions
1313

1414
external object installations
1515

16-
@JsModule("firebase/compat/remote-config")
17-
@JsName("default")
18-
external object remoteConfig
19-
2016
typealias ChangeSnapshotCallback = (data: DataSnapshot, previousChildName: String?) -> Unit
2117
typealias ValueSnapshotCallback = (data: DataSnapshot) -> Unit
2218
typealias CancelCallback = (error: Throwable) -> Unit

firebase-config/src/jsMain/kotlin/dev/gitlive/firebase/remoteconfig/FirebaseRemoteConfig.kt

Lines changed: 12 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -3,44 +3,40 @@ package dev.gitlive.firebase.remoteconfig
33
import dev.gitlive.firebase.Firebase
44
import dev.gitlive.firebase.FirebaseApp
55
import dev.gitlive.firebase.FirebaseException
6-
import dev.gitlive.firebase.firebase
6+
import dev.gitlive.firebase.externals.remoteconfig.*
77
import kotlinx.coroutines.await
88
import kotlin.js.json
99

1010
actual val Firebase.remoteConfig: FirebaseRemoteConfig
11-
get() = rethrow {
12-
dev.gitlive.firebase.remoteConfig
13-
FirebaseRemoteConfig(firebase.remoteConfig())
14-
}
11+
get() = rethrow { FirebaseRemoteConfig(getRemoteConfig()) }
1512

1613
actual fun Firebase.remoteConfig(app: FirebaseApp): FirebaseRemoteConfig = rethrow {
17-
dev.gitlive.firebase.remoteConfig
18-
FirebaseRemoteConfig(firebase.remoteConfig(app.js))
14+
FirebaseRemoteConfig(getRemoteConfig(app.js))
1915
}
2016

21-
actual class FirebaseRemoteConfig internal constructor(val js: firebase.remoteConfig.RemoteConfig) {
17+
actual class FirebaseRemoteConfig internal constructor(val js: RemoteConfig) {
2218
actual val all: Map<String, FirebaseRemoteConfigValue>
2319
get() = rethrow { getAllKeys().map { Pair(it, getValue(it)) }.toMap() }
2420

2521
actual val info: FirebaseRemoteConfigInfo
2622
get() = rethrow {
2723
FirebaseRemoteConfigInfo(
28-
configSettings = js.settings.toSettings(),
24+
configSettings = js.settings.toFirebaseRemoteConfigSettings(),
2925
fetchTimeMillis = js.fetchTimeMillis,
3026
lastFetchStatus = js.lastFetchStatus.toFetchStatus()
3127
)
3228
}
3329

34-
actual suspend fun activate(): Boolean = rethrow { js.activate().await() }
35-
actual suspend fun ensureInitialized(): Unit = rethrow { js.activate().await() }
30+
actual suspend fun activate(): Boolean = rethrow { activate(js).await() }
31+
actual suspend fun ensureInitialized(): Unit = rethrow { ensureInitialized(js).await() }
3632

3733
actual suspend fun fetch(minimumFetchIntervalInSeconds: Long?): Unit =
38-
rethrow { js.fetch().await() }
34+
rethrow { fetchConfig(js).await() }
3935

40-
actual suspend fun fetchAndActivate(): Boolean = rethrow { js.fetchAndActivate().await() }
36+
actual suspend fun fetchAndActivate(): Boolean = rethrow { fetchAndActivate(js).await() }
4137

4238
actual fun getValue(key: String): FirebaseRemoteConfigValue = rethrow {
43-
FirebaseRemoteConfigValue(js.getValue(key))
39+
FirebaseRemoteConfigValue(getValue(js, key))
4440
}
4541

4642
actual fun getKeysByPrefix(prefix: String): Set<String> {
@@ -49,7 +45,7 @@ actual class FirebaseRemoteConfig internal constructor(val js: firebase.remoteCo
4945

5046
private fun getAllKeys(): Set<String> {
5147
val objectKeys = js("Object.keys")
52-
return objectKeys(js.getAll()).unsafeCast<Array<String>>().toSet()
48+
return objectKeys(getAll(js)).unsafeCast<Array<String>>().toSet()
5349
}
5450

5551
actual suspend fun reset() {
@@ -68,7 +64,7 @@ actual class FirebaseRemoteConfig internal constructor(val js: firebase.remoteCo
6864
js.defaultConfig = json(*defaults)
6965
}
7066

71-
private fun firebase.remoteConfig.Settings.toSettings(): FirebaseRemoteConfigSettings {
67+
private fun Settings.toFirebaseRemoteConfigSettings(): FirebaseRemoteConfigSettings {
7268
return FirebaseRemoteConfigSettings(
7369
fetchTimeoutInSeconds = fetchTimeoutMillis.toLong() / 1000,
7470
minimumFetchIntervalInSeconds = minimumFetchIntervalMillis.toLong() / 1000

firebase-config/src/jsMain/kotlin/dev/gitlive/firebase/remoteconfig/FirebaseRemoteConfigValue.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
package dev.gitlive.firebase.remoteconfig
22

3-
import dev.gitlive.firebase.firebase
3+
import dev.gitlive.firebase.externals.remoteconfig.Value
44

5-
actual class FirebaseRemoteConfigValue(val js: firebase.remoteConfig.Value) {
5+
actual class FirebaseRemoteConfigValue(val js: Value) {
66
actual fun asBoolean(): Boolean = rethrow { js.asBoolean() }
77
actual fun asByteArray(): ByteArray = rethrow { js.asString()?.encodeToByteArray() ?: byteArrayOf() }
88
actual fun asDouble(): Double = rethrow { js.asNumber().toDouble() }

0 commit comments

Comments
 (0)