Skip to content

Commit 6ba3fa0

Browse files
authored
Merge pull request #70 from splendo/split-common-into-internals
Move parts of the firebase-common module to new firebase-common-internal
2 parents 828cd98 + a629f9a commit 6ba3fa0

File tree

68 files changed

+577
-265
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

68 files changed

+577
-265
lines changed

firebase-app/package.json

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "@gitlive/firebase-app",
3-
"version": "1.11.1",
3+
"version": "1.12.0",
44
"description": "Wrapper around firebase for usage in Kotlin Multiplatform projects",
55
"main": "firebase-app.js",
66
"scripts": {
@@ -23,7 +23,7 @@
2323
},
2424
"homepage": "https://github.com/GitLiveApp/firebase-kotlin-sdk",
2525
"dependencies": {
26-
"@gitlive/firebase-common": "1.11.1",
26+
"@gitlive/firebase-common": "1.12.0",
2727
"firebase": "9.19.1",
2828
"kotlin": "1.8.20",
2929
"kotlinx-coroutines-core": "1.6.4"

firebase-auth/src/commonTest/kotlin/dev/gitlive/firebase/auth/auth.kt

+6-1
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,12 @@
44

55
package dev.gitlive.firebase.auth
66

7-
import dev.gitlive.firebase.*
7+
import dev.gitlive.firebase.Firebase
8+
import dev.gitlive.firebase.FirebaseOptions
9+
import dev.gitlive.firebase.apps
10+
import dev.gitlive.firebase.initialize
11+
import dev.gitlive.firebase.runBlockingTest
12+
import dev.gitlive.firebase.runTest
813
import kotlin.random.Random
914
import kotlin.test.*
1015

firebase-auth/src/jsMain/kotlin/dev/gitlive/firebase/auth/auth.kt

+3-1
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,10 @@
44

55
package dev.gitlive.firebase.auth
66

7-
import dev.gitlive.firebase.*
7+
import dev.gitlive.firebase.Firebase
88
import dev.gitlive.firebase.FirebaseApp
9+
import dev.gitlive.firebase.FirebaseException
10+
import dev.gitlive.firebase.FirebaseNetworkException
911
import dev.gitlive.firebase.auth.externals.*
1012
import kotlinx.coroutines.await
1113
import kotlinx.coroutines.channels.awaitClose
+182
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,182 @@
1+
import org.jetbrains.kotlin.gradle.plugin.KotlinSourceSetTree
2+
3+
/*
4+
* Copyright (c) 2020 GitLive Ltd. Use of this source code is governed by the Apache 2.0 license.
5+
*/
6+
7+
version = project.property("firebase-common-internal.version") as String
8+
9+
plugins {
10+
id("com.android.library")
11+
kotlin("multiplatform")
12+
kotlin("plugin.serialization")
13+
}
14+
15+
android {
16+
val minSdkVersion: Int by project
17+
val compileSdkVersion: Int by project
18+
19+
compileSdk = compileSdkVersion
20+
namespace = "dev.gitlive.firebase.common.internal"
21+
defaultConfig {
22+
minSdk = minSdkVersion
23+
testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner"
24+
}
25+
26+
compileOptions {
27+
sourceCompatibility = JavaVersion.VERSION_11
28+
targetCompatibility = JavaVersion.VERSION_11
29+
}
30+
31+
testOptions {
32+
unitTests.apply {
33+
isIncludeAndroidResources = true
34+
}
35+
}
36+
37+
packaging {
38+
resources.pickFirsts.add("META-INF/kotlinx-serialization-core.kotlin_module")
39+
resources.pickFirsts.add("META-INF/AL2.0")
40+
resources.pickFirsts.add("META-INF/LGPL2.1")
41+
}
42+
lint {
43+
abortOnError = false
44+
}
45+
}
46+
47+
kotlin {
48+
49+
targets.configureEach {
50+
compilations.configureEach {
51+
kotlinOptions.freeCompilerArgs += "-Xexpect-actual-classes"
52+
}
53+
}
54+
55+
@Suppress("OPT_IN_USAGE")
56+
androidTarget {
57+
instrumentedTestVariant.sourceSetTree.set(KotlinSourceSetTree.test)
58+
unitTestVariant.sourceSetTree.set(KotlinSourceSetTree.test)
59+
publishAllLibraryVariants()
60+
compilations.configureEach {
61+
kotlinOptions {
62+
jvmTarget = "11"
63+
}
64+
}
65+
}
66+
67+
jvm {
68+
compilations.getByName("main") {
69+
kotlinOptions {
70+
jvmTarget = "17"
71+
}
72+
}
73+
compilations.getByName("test") {
74+
kotlinOptions {
75+
jvmTarget = "17"
76+
}
77+
}
78+
}
79+
80+
val supportIosTarget = project.property("skipIosTarget") != "true"
81+
82+
if (supportIosTarget) {
83+
iosArm64()
84+
iosX64()
85+
iosSimulatorArm64()
86+
}
87+
88+
js(IR) {
89+
useCommonJs()
90+
nodejs {
91+
testTask(
92+
Action {
93+
useKarma {
94+
useChromeHeadless()
95+
}
96+
}
97+
)
98+
}
99+
browser {
100+
testTask(
101+
Action {
102+
useKarma {
103+
useChromeHeadless()
104+
}
105+
}
106+
)
107+
}
108+
}
109+
110+
sourceSets {
111+
all {
112+
languageSettings.apply {
113+
val apiVersion: String by project
114+
val languageVersion: String by project
115+
this.apiVersion = apiVersion
116+
this.languageVersion = languageVersion
117+
progressiveMode = true
118+
optIn("kotlinx.coroutines.ExperimentalCoroutinesApi")
119+
optIn("kotlinx.serialization.ExperimentalSerializationApi")
120+
optIn("kotlinx.serialization.InternalSerializationApi")
121+
}
122+
}
123+
124+
getByName("commonMain") {
125+
val serializationVersion: String by project
126+
127+
dependencies {
128+
implementation(project(":firebase-common"))
129+
api("org.jetbrains.kotlinx:kotlinx-serialization-core:$serializationVersion")
130+
}
131+
}
132+
133+
getByName("commonTest") {
134+
dependencies {
135+
implementation(project(":test-utils"))
136+
}
137+
}
138+
139+
getByName("androidMain") {
140+
dependencies {
141+
api("com.google.firebase:firebase-common-ktx")
142+
}
143+
}
144+
145+
getByName("jsMain") {
146+
dependencies {
147+
api(npm("firebase", "10.6.0"))
148+
}
149+
}
150+
151+
getByName("jvmMain") {
152+
kotlin.srcDir("src/androidMain/kotlin")
153+
}
154+
155+
getByName("jvmTest") {
156+
dependencies {
157+
implementation(kotlin("test-junit"))
158+
}
159+
kotlin.srcDir("src/androidAndroidTest/kotlin")
160+
}
161+
}
162+
}
163+
164+
if (project.property("firebase-common.skipIosTests") == "true") {
165+
tasks.forEach {
166+
if (it.name.contains("ios", true) && it.name.contains("test", true)) { it.enabled = false }
167+
}
168+
}
169+
170+
if (project.property("firebase-common.skipJsTests") == "true") {
171+
tasks.forEach {
172+
if (it.name.contains("js", true) && it.name.contains("test", true)) { it.enabled = false }
173+
}
174+
}
175+
176+
signing {
177+
val signingKey: String? by project
178+
val signingPassword: String? by project
179+
useInMemoryPgpKeys(signingKey, signingPassword)
180+
sign(publishing.publications)
181+
}
182+

firebase-common-internal/package.json

+32
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
{
2+
"name": "@gitlive/firebase-common-internal",
3+
"version": "1.12.0",
4+
"description": "Wrapper around firebase for usage in Kotlin Multiplatform projects",
5+
"main": "firebase-common-internal.js",
6+
"scripts": {
7+
"test": "echo \"Error: no test specified\" && exit 1"
8+
},
9+
"repository": {
10+
"type": "git",
11+
"url": "git+https://github.com/GitLiveApp/firebase-kotlin-sdk.git"
12+
},
13+
"keywords": [
14+
"kotlin",
15+
"multiplatform",
16+
"kotlin-js",
17+
"firebase"
18+
],
19+
"author": "dev.gitlive",
20+
"license": "Apache-2.0",
21+
"bugs": {
22+
"url": "https://github.com/GitLiveApp/firebase-kotlin-multiplatform-sdk/issues"
23+
},
24+
"homepage": "https://github.com/GitLiveApp/firebase-kotlin-multiplatform-sdk",
25+
"dependencies": {
26+
"@gitlive/firebase-common": "1.12.0",
27+
"firebase": "9.19.1",
28+
"kotlin": "1.8.20",
29+
"kotlinx-coroutines-core": "1.6.4",
30+
"kotlinx-serialization-kotlinx-serialization-runtime": "1.3.2"
31+
}
32+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
@file:JvmName("AndroidEncodedObject")
2+
package dev.gitlive.firebase.internal
3+
4+
val EncodedObject.android: Map<String, Any?> get() = raw
5+
6+
@PublishedApi
7+
internal actual fun Any.asNativeMap(): Map<*, *>? = this as? Map<*, *>

firebase-common/src/androidMain/kotlin/dev/gitlive/firebase/_decoders.kt renamed to firebase-common-internal/src/androidMain/kotlin/dev/gitlive/firebase/internal/_decoders.kt

+1-1
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
* Copyright (c) 2020 GitLive Ltd. Use of this source code is governed by the Apache 2.0 license.
33
*/
44

5-
package dev.gitlive.firebase
5+
package dev.gitlive.firebase.internal
66

77
import kotlinx.serialization.descriptors.PolymorphicKind
88
import kotlinx.serialization.descriptors.SerialDescriptor

firebase-common/src/androidMain/kotlin/dev/gitlive/firebase/_encoders.kt renamed to firebase-common-internal/src/androidMain/kotlin/dev/gitlive/firebase/internal/_encoders.kt

+1-15
Original file line numberDiff line numberDiff line change
@@ -2,27 +2,13 @@
22
* Copyright (c) 2020 GitLive Ltd. Use of this source code is governed by the Apache 2.0 license.
33
*/
44

5-
package dev.gitlive.firebase
5+
package dev.gitlive.firebase.internal
66

77
import kotlinx.serialization.descriptors.PolymorphicKind
88
import kotlinx.serialization.descriptors.SerialDescriptor
99
import kotlinx.serialization.descriptors.StructureKind
10-
import java.lang.IllegalArgumentException
1110
import kotlin.collections.set
1211

13-
actual interface EncodedObject : Map<String, Any?> {
14-
actual val raw: Map<String, Any?>
15-
}
16-
17-
@PublishedApi
18-
internal data class EncodedObjectImpl internal constructor(override val raw: Map<String, Any?>) : EncodedObject, Map<String, Any?> by raw
19-
20-
@PublishedApi
21-
internal actual fun Map<String, Any?>.asEncodedObject(): EncodedObject = EncodedObjectImpl(this)
22-
23-
@PublishedApi
24-
internal actual fun Any.asNativeMap(): Map<*, *>? = this as? Map<*, *>
25-
2612
actual fun FirebaseEncoder.structureEncoder(descriptor: SerialDescriptor): FirebaseCompositeEncoder = when(descriptor.kind) {
2713
StructureKind.LIST -> mutableListOf<Any?>()
2814
.also { value = it }
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
package dev.gitlive.firebase.internal
2+
3+
import dev.gitlive.firebase.DecodeSettings
4+
import dev.gitlive.firebase.EncodeDecodeSettingsBuilder
5+
import dev.gitlive.firebase.EncodeSettings
6+
import kotlinx.serialization.modules.EmptySerializersModule
7+
import kotlinx.serialization.modules.SerializersModule
8+
9+
@PublishedApi
10+
internal data class EncodeSettingsImpl internal constructor(
11+
override val encodeDefaults: Boolean,
12+
override val serializersModule: SerializersModule,
13+
) : EncodeSettings {
14+
15+
@PublishedApi
16+
internal class Builder : EncodeSettings.Builder {
17+
override var encodeDefaults: Boolean = true
18+
override var serializersModule: SerializersModule = EmptySerializersModule()
19+
}
20+
}
21+
22+
@PublishedApi
23+
internal class DecodeSettingsImpl internal constructor(
24+
override val serializersModule: SerializersModule = EmptySerializersModule(),
25+
) : DecodeSettings {
26+
27+
@PublishedApi
28+
internal class Builder : DecodeSettings.Builder {
29+
override var serializersModule: SerializersModule = EmptySerializersModule()
30+
}
31+
}
32+
33+
@PublishedApi
34+
internal class EncodeDecodeSettingsBuilderImpl : EncodeDecodeSettingsBuilder {
35+
36+
override var encodeDefaults: Boolean = true
37+
override var serializersModule: SerializersModule = EmptySerializersModule()
38+
}
39+
40+
@PublishedApi
41+
internal fun EncodeSettings.Builder.buildEncodeSettings(): EncodeSettings = EncodeSettingsImpl(encodeDefaults, serializersModule)
42+
@PublishedApi
43+
internal fun DecodeSettings.Builder.buildDecodeSettings(): DecodeSettings = DecodeSettingsImpl(serializersModule)
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
package dev.gitlive.firebase.internal
2+
3+
import kotlin.jvm.JvmInline
4+
5+
/**
6+
* Platform specific object for storing encoded data that can be used for methods that explicitly require an object.
7+
* This is essentially a [Map] of [String] and [Any]? (as represented by [raw]) but since [encode] gives a platform specific value, this method wraps that.
8+
*/
9+
sealed interface EncodedObject {
10+
val raw: Map<String, Any?>
11+
}
12+
13+
@JvmInline
14+
@PublishedApi
15+
internal value class EncodedObjectImpl(override val raw: Map<String, Any?>) : EncodedObject
16+
17+
@PublishedApi
18+
internal expect fun Any.asNativeMap(): Map<*, *>?
19+
20+
@PublishedApi
21+
internal fun Map<*, *>.asEncodedObject(): EncodedObject = map { (key, value) ->
22+
if (key is String) {
23+
key to value
24+
} else {
25+
throw IllegalArgumentException("Expected a String key but received $key")
26+
}
27+
}.toMap().let(::EncodedObjectImpl)

firebase-common/src/commonMain/kotlin/dev/gitlive/firebase/Polymorphic.kt renamed to firebase-common-internal/src/commonMain/kotlin/dev/gitlive/firebase/internal/Polymorphic.kt

+2-1
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
1-
package dev.gitlive.firebase
1+
package dev.gitlive.firebase.internal
22

3+
import dev.gitlive.firebase.FirebaseClassDiscriminator
34
import kotlinx.serialization.DeserializationStrategy
45
import kotlinx.serialization.SerializationStrategy
56
import kotlinx.serialization.descriptors.SerialDescriptor

0 commit comments

Comments
 (0)