Skip to content

Commit 21d2264

Browse files
committed
Refactor app and database modules
1 parent c7316fd commit 21d2264

File tree

6 files changed

+302
-155
lines changed

6 files changed

+302
-155
lines changed

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

Lines changed: 20 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -4,33 +4,44 @@
44

55
package dev.gitlive.firebase
66

7+
import dev.gitlive.firebase.externals.getApp
8+
import dev.gitlive.firebase.externals.getApps
9+
import dev.gitlive.firebase.externals.initializeApp
710
import kotlin.js.json
11+
import dev.gitlive.firebase.externals.FirebaseApp as JsFirebaseApp
812

9-
actual val Firebase.app: FirebaseApp
10-
get() = FirebaseApp(firebase.app())
13+
actual val Firebase.app: FirebaseApp get() = FirebaseApp(getApp())
1114

12-
actual fun Firebase.app(name: String): FirebaseApp =
13-
FirebaseApp(firebase.app(name))
15+
actual fun Firebase.app(name: String): FirebaseApp = FirebaseApp(getApp(name))
1416

1517
actual fun Firebase.initialize(context: Any?): FirebaseApp? =
1618
throw UnsupportedOperationException("Cannot initialize firebase without options in JS")
1719

1820
actual fun Firebase.initialize(context: Any?, options: FirebaseOptions, name: String): FirebaseApp =
19-
FirebaseApp(firebase.initializeApp(options.toJson(), name))
21+
FirebaseApp(initializeApp(options.toJson(), name))
2022

2123
actual fun Firebase.initialize(context: Any?, options: FirebaseOptions) =
22-
FirebaseApp(firebase.initializeApp(options.toJson()))
24+
FirebaseApp(initializeApp(options.toJson()))
2325

24-
actual class FirebaseApp internal constructor(val js: firebase.App) {
26+
actual class FirebaseApp internal constructor(val js: JsFirebaseApp) {
2527
actual val name: String
2628
get() = js.name
2729
actual val options: FirebaseOptions
2830
get() = js.options.run {
29-
FirebaseOptions(applicationId, apiKey, databaseUrl, gaTrackingId, storageBucket, projectId, messagingSenderId, authDomain)
31+
FirebaseOptions(
32+
js.options.appId,
33+
js.options.apiKey,
34+
js.options.databaseURL,
35+
js.options.gaTrackingId,
36+
js.options.storageBucket,
37+
js.options.projectId,
38+
js.options.messagingSenderId,
39+
js.options.authDomain
40+
)
3041
}
3142
}
3243

33-
actual fun Firebase.apps(context: Any?) = firebase.apps.map { FirebaseApp(it) }
44+
actual fun Firebase.apps(context: Any?) = getApps().map { FirebaseApp(it) }
3445

3546
private fun FirebaseOptions.toJson() = json(
3647
"apiKey" to apiKey,

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

Lines changed: 0 additions & 73 deletions
Original file line numberDiff line numberDiff line change
@@ -13,27 +13,11 @@ import kotlin.js.Promise
1313
external object firebase {
1414

1515
open class App {
16-
val name: String
17-
val options: Options
1816
fun functions(region: String? = definedExternally): functions.Functions
19-
fun database(url: String? = definedExternally): database.Database
2017
fun firestore(): firestore.Firestore
2118
}
2219

23-
interface Options {
24-
val applicationId: String
25-
val apiKey: String
26-
val databaseUrl: String?
27-
val gaTrackingId: String?
28-
val storageBucket: String?
29-
val projectId: String?
30-
val messagingSenderId: String?
31-
val authDomain: String?
32-
}
33-
34-
val apps : Array<App>
3520
fun app(name: String? = definedExternally): App
36-
fun initializeApp(options: Any, name: String? = definedExternally) : App
3721

3822
interface FirebaseError {
3923
var code: String
@@ -286,63 +270,6 @@ external object firebase {
286270

287271
}
288272

289-
fun database(app: App? = definedExternally): database.Database
290-
291-
object database {
292-
fun enableLogging(logger: Boolean?, persistent: Boolean? = definedExternally)
293-
294-
open class Database {
295-
fun ref(path: String? = definedExternally): Reference
296-
fun useEmulator(host: String, port: Int)
297-
}
298-
open class ThenableReference : Reference
299-
300-
301-
open class Query {
302-
fun on(eventType: String?, callback: SnapshotCallback, cancelCallbackOrContext: (error: Error) -> Unit? = definedExternally, context: Any? = definedExternally): SnapshotCallback
303-
fun off(eventType: String?, callback: SnapshotCallback?, context: Any? = definedExternally)
304-
fun once(eventType: String, callback: SnapshotCallback, failureCallbackOrContext: (error: Error) -> Unit? = definedExternally, context: Any? = definedExternally): SnapshotCallback
305-
fun orderByChild(path: String): Query
306-
fun orderByKey(): Query
307-
fun orderByValue(): Query
308-
fun startAt(value: Any, key: String? = definedExternally): Query
309-
fun endAt(value: Any, key: String? = definedExternally): Query
310-
fun equalTo(value: Any, key: String? = definedExternally): Query
311-
fun limitToFirst(limit: Int): Query
312-
fun limitToLast (limit: Int): Query
313-
}
314-
315-
open class Reference: Query {
316-
val key: String?
317-
fun child(path: String): Reference
318-
fun remove(): Promise<Unit>
319-
fun onDisconnect(): OnDisconnect
320-
fun update(value: Any?): Promise<Unit>
321-
fun set(value: Any?): Promise<Unit>
322-
fun push(): ThenableReference
323-
}
324-
325-
open class DataSnapshot {
326-
val key: String?
327-
fun `val`(): Any
328-
fun exists(): Boolean
329-
fun forEach(action: (a: DataSnapshot) -> Boolean): Boolean
330-
fun numChildren(): Int
331-
fun child(path: String): DataSnapshot
332-
}
333-
334-
open class OnDisconnect {
335-
fun update(value: Any?): Promise<Unit>
336-
fun remove(): Promise<Unit>
337-
fun cancel(): Promise<Unit>
338-
fun set(value: Any?): Promise<Unit>
339-
}
340-
341-
object ServerValue {
342-
val TIMESTAMP: Any
343-
}
344-
}
345-
346273
fun firestore(): firestore.Firestore
347274

348275
object firestore {
Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
@file:JsModule("firebase/app")
2+
@file:JsNonModule
3+
4+
package dev.gitlive.firebase.externals
5+
6+
external fun initializeApp(options: Any, name: String = definedExternally): FirebaseApp
7+
8+
external fun getApp(name: String = definedExternally): FirebaseApp
9+
10+
external fun getApps(): List<FirebaseApp>
11+
12+
external interface FirebaseApp {
13+
val automaticDataCollectionEnabled: Boolean
14+
val name: String
15+
val options: FirebaseOptions
16+
}
17+
18+
external interface FirebaseOptions {
19+
val apiKey: String
20+
val appId : String
21+
val authDomain: String?
22+
val databaseURL: String?
23+
val measurementId: String?
24+
val messagingSenderId: String?
25+
val gaTrackingId: String?
26+
val projectId: String?
27+
val storageBucket: String?
28+
}
Lines changed: 129 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,129 @@
1+
@file:JsModule("firebase/database")
2+
@file:JsNonModule
3+
4+
package dev.gitlive.firebase.externals
5+
6+
import dev.gitlive.firebase.*
7+
import kotlin.js.Promise
8+
9+
external fun child(parent: DatabaseReference, path: String): DatabaseReference
10+
11+
external fun connectDatabaseEmulator(
12+
db: Database,
13+
host: String,
14+
port: Int,
15+
options: Any? = definedExternally
16+
)
17+
18+
external fun enableLogging(enabled: Boolean?, persistent: Boolean? = definedExternally)
19+
20+
external fun endAt(value: Any?, key: String? = definedExternally): QueryConstraint
21+
22+
external fun endBefore(value: Any?, key: String? = definedExternally): QueryConstraint
23+
24+
external fun equalTo(value: Any?, key: String? = definedExternally): QueryConstraint
25+
26+
external fun get(query: Query): Promise<DataSnapshot>
27+
28+
external fun getDatabase(
29+
app: FirebaseApp? = definedExternally,
30+
url: String? = definedExternally
31+
): Database
32+
33+
external fun increment(delta: Long): Any
34+
35+
external fun limitToFirst(limit: Int): QueryConstraint
36+
37+
external fun limitToLast(limit: Int): QueryConstraint
38+
39+
external fun off(query: Query, eventType: String?, callback: Any?)
40+
41+
external fun onChildAdded(
42+
query: Query,
43+
callback: ChangeSnapshotCallback,
44+
cancelCallback: CancelCallback? = definedExternally,
45+
): Unsubscribe
46+
47+
external fun onChildChanged(
48+
query: Query,
49+
callback: ChangeSnapshotCallback,
50+
cancelCallback: CancelCallback? = definedExternally,
51+
): Unsubscribe
52+
53+
external fun onChildMoved(
54+
query: Query,
55+
callback: ChangeSnapshotCallback,
56+
cancelCallback: CancelCallback? = definedExternally,
57+
): Unsubscribe
58+
59+
external fun onChildRemoved(
60+
query: Query,
61+
callback: ChangeSnapshotCallback,
62+
cancelCallback: CancelCallback? = definedExternally,
63+
): Unsubscribe
64+
65+
external fun onValue(
66+
query: Query,
67+
callback: ValueSnapshotCallback,
68+
cancelCallback: CancelCallback? = definedExternally,
69+
): Unsubscribe
70+
71+
external fun onDisconnect(ref: DatabaseReference): OnDisconnect
72+
73+
external fun orderByChild(path: String): QueryConstraint
74+
75+
external fun orderByKey(): QueryConstraint
76+
77+
external fun orderByValue(): QueryConstraint
78+
79+
external fun push(parent: DatabaseReference, value: Any? = definedExternally): ThenableReference
80+
81+
external fun query(query: Query, vararg queryConstraints: QueryConstraint): Query
82+
83+
external fun ref(db: Database, path: String? = definedExternally): DatabaseReference
84+
85+
external fun remove(ref: DatabaseReference): Promise<Unit>
86+
87+
external fun serverTimestamp(): Any
88+
89+
external fun set(ref: DatabaseReference, value: Any?): Promise<Unit>
90+
91+
external fun startAfter(value: Any?, key: String? = definedExternally): QueryConstraint
92+
93+
external fun startAt(value: Any?, key: String? = definedExternally): QueryConstraint
94+
95+
external fun update(ref: DatabaseReference, values: Any): Promise<Unit>
96+
97+
external interface Database {
98+
val app: FirebaseApp
99+
}
100+
101+
external interface Query {
102+
val ref: DatabaseReference
103+
}
104+
105+
external interface QueryConstraint
106+
107+
external interface DatabaseReference : Query {
108+
val key: String?
109+
val parent: DatabaseReference?
110+
val root: DatabaseReference
111+
}
112+
113+
external interface ThenableReference : DatabaseReference
114+
115+
external interface DataSnapshot {
116+
val key: String?
117+
fun `val`(): Any
118+
fun exists(): Boolean
119+
fun forEach(action: (a: DataSnapshot) -> Boolean): Boolean
120+
fun numChildren(): Int
121+
fun child(path: String): DataSnapshot
122+
}
123+
124+
external interface OnDisconnect {
125+
fun cancel(): Promise<Unit>
126+
fun remove(): Promise<Unit>
127+
fun set(value: Any?): Promise<Unit>
128+
fun update(value: Any): Promise<Unit>
129+
}

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

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44

55
package dev.gitlive.firebase
66

7+
import dev.gitlive.firebase.externals.DataSnapshot
78
import kotlin.js.Promise
89

910
@JsModule("firebase/compat/auth")
@@ -28,8 +29,10 @@ external object installations
2829
@JsName("default")
2930
external object remoteConfig
3031

31-
typealias SnapshotCallback = (data: firebase.database.DataSnapshot, b: String?) -> Unit
32+
typealias ChangeSnapshotCallback = (data: DataSnapshot, previousChildName: String?) -> Unit
33+
typealias ValueSnapshotCallback = (data: DataSnapshot) -> Unit
34+
typealias CancelCallback = (error: Throwable) -> Unit
35+
typealias Unsubscribe = () -> Unit
3236

3337
operator fun firebase.functions.HttpsCallable.invoke() = asDynamic()() as Promise<firebase.functions.HttpsCallableResult>
3438
operator fun firebase.functions.HttpsCallable.invoke(data: Any?) = asDynamic()(data) as Promise<firebase.functions.HttpsCallableResult>
35-

0 commit comments

Comments
 (0)