diff --git a/.flowconfig b/.flowconfig
index 87598b62..945dfd07 100644
--- a/.flowconfig
+++ b/.flowconfig
@@ -3,7 +3,7 @@
.*/*[.]android.js
; Ignore "BUCK" generated dirs
-.*/node_modules/react-native/\.buckd/
+/\.buckd/
; Ignore unexpected extra "@providesModule"
.*/node_modules/.*/node_modules/fbjs/.*
@@ -16,22 +16,8 @@
; Ignore polyfills
.*/Libraries/polyfills/.*
-# React Native problems
-.*/node_modules/metro-bundler/src/DeltaBundler/DeltaCalculator.js.flow
-.*/node_modules/metro-bundler/src/DeltaBundler/DeltaPatcher.js.flow
-.*/node_modules/metro-bundler/src/node-haste/AssetResolutionCache.js.flow
-.*/node_modules/metro-bundler/src/node-haste/DependencyGraph.js.flow
-#.*/node_modules/react-native/Libraries/Animated/src/nodes/AnimatedStyle.js
-#.*/node_modules/react-native/Libraries/Components/ScrollView/ScrollViewStickyHeader.js
-#.*/node_modules/react-native/Libraries/Experimental/SwipeableRow/SwipeableFlatList.js
-#.*/node_modules/react-native/Libraries/Experimental/SwipeableRow/SwipeableListView.js
-#.*/node_modules/react-native/Libraries/Image/ImageBackground.js
-#.*/node_modules/react-native/Libraries/Lists/FlatList.js
-#.*/node_modules/react-native/Libraries/Lists/MetroListView.js
-#.*/node_modules/react-native/Libraries/Lists/SectionList.js
-#.*/node_modules/react-native/Libraries/Lists/ViewabilityHelper.js
-#.*/node_modules/react-native/Libraries/Lists/VirtualizedList.js
-#.*/node_modules/react-native/Libraries/Lists/VirtualizedSectionList.js
+; Ignore metro
+.*/node_modules/metro/.*
# Ignore dist folder
.*/dist/.*
@@ -44,12 +30,13 @@
[libs]
node_modules/react-native/Libraries/react-native/react-native-interface.js
node_modules/react-native/flow/
+node_modules/react-native/flow-github/
[options]
-module.system=haste
-
emoji=true
+module.system=haste
+
munge_underscores=true
module.name_mapper='^[./a-zA-Z0-9$_-]+\.\(bmp\|gif\|jpg\|jpeg\|png\|psd\|svg\|webp\|m4v\|mov\|mp4\|mpeg\|mpg\|webm\|aac\|aiff\|caf\|m4a\|mp3\|wav\|html\|pdf\)$' -> 'RelativeImageStub'
@@ -63,10 +50,9 @@ suppress_type=$FlowIssue
suppress_type=$FlowFixMe
suppress_type=$FlowFixMeProps
suppress_type=$FlowFixMeState
-suppress_type=$FixMe
-suppress_comment=\\(.\\|\n\\)*\\$FlowFixMe\\($\\|[^(]\\|(\\(>=0\\.\\(5[0-6]\\|[1-4][0-9]\\|[0-9]\\).[0-9]\\)? *\\(site=[a-z,_]*react_native[a-z,_]*\\)?)\\)
-suppress_comment=\\(.\\|\n\\)*\\$FlowIssue\\((\\(>=0\\.\\(5[0-6]\\|[1-4][0-9]\\|[0-9]\\).[0-9]\\)? *\\(site=[a-z,_]*react_native[a-z,_]*\\)?)\\)?:? #[0-9]+
+suppress_comment=\\(.\\|\n\\)*\\$FlowFixMe\\($\\|[^(]\\|(\\(\\)? *\\(site=[a-z,_]*react_native[a-z,_]*\\)?)\\)
+suppress_comment=\\(.\\|\n\\)*\\$FlowIssue\\((\\(\\)? *\\(site=[a-z,_]*react_native[a-z,_]*\\)?)\\)?:? #[0-9]+
suppress_comment=\\(.\\|\n\\)*\\$FlowFixedInNextDeploy
suppress_comment=\\(.\\|\n\\)*\\$FlowExpectedError
suppress_comment=\\(.\\|\n\\)*\\$FlowBug.*
diff --git a/.github/ISSUE_TEMPLATE.md b/.github/ISSUE_TEMPLATE.md
index d4d824c0..20e69af5 100644
--- a/.github/ISSUE_TEMPLATE.md
+++ b/.github/ISSUE_TEMPLATE.md
@@ -5,7 +5,7 @@ The issue list of this repo is exclusively for bug reports.
1) For feature requests, please use our Canny board: https://react-native-firebase.canny.io/feature-requests
-2) For questions and support please use our Discord chat: https://discord.gg/t6bdqMs or Stack Overflow: https://stackoverflow.com/questions/tagged/react-native-firebase
+2) For questions and support please use our Discord chat: https://discord.gg/C9aK28N or Stack Overflow: https://stackoverflow.com/questions/tagged/react-native-firebase
3) If this is a setup issue then please make sure you've correctly followed the setup guides, most setup issues such as 'duplicate dex files', 'default app has not been initialized' etc are all down to an incorrect setup as the guides haven't been correctly followed.
-->
@@ -14,27 +14,31 @@ The issue list of this repo is exclusively for bug reports.
-
-
### Environment
-1. Application Target Platform:
+
+1. Application Target Platform:
-2. Development Operating System:
+
+2. Development Operating System:
-3. Build Tools:
+
+3. Build Tools:
-4. React Native version:
+
+4. React Native version:
-5. RNFirebase Version:
+
+5. RNFirebase Version:
-6. Firebase Module:
+
+6. Firebase Module:
diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md
index 295cfb85..79b02ec8 100644
--- a/CONTRIBUTING.md
+++ b/CONTRIBUTING.md
@@ -4,16 +4,17 @@
First, thank you for considering contributing to react-native-firebase! It's people like you that make the open source community such a great community! 😊
-We welcome any type of contribution, not only code. You can help with
-- **QA**: file bug reports, the more details you can give the better (e.g. screenshots with the console open)
-- **Marketing**: writing blog posts, howto's, printing stickers, ...
-- **Community**: presenting the project at meetups, organizing a dedicated meetup for the local community, ...
-- **Code**: take a look at the [open issues](issues). Even if you can't write code, commenting on them, showing that you care about a given issue matters. It helps us triage them.
-- **Money**: we welcome financial contributions in full transparency on our [open collective](https://opencollective.com/react-native-firebase).
+We welcome any type of contribution, not only code. You can help with
+
+* **QA**: file bug reports, the more details you can give the better (e.g. screenshots with the console open)
+* **Marketing**: writing blog posts, howto's, printing stickers, ...
+* **Community**: presenting the project at meetups, organizing a dedicated meetup for the local community, ...
+* **Code**: take a look at the [open issues](issues). Even if you can't write code, commenting on them, showing that you care about a given issue matters. It helps us triage them.
+* **Money**: we welcome financial contributions in full transparency on our [open collective](https://opencollective.com/react-native-firebase).
## Your First Contribution
-Working on your first Pull Request? You can learn how from this *free* series, [How to Contribute to an Open Source Project on GitHub](https://egghead.io/series/how-to-contribute-to-an-open-source-project-on-github).
+Working on your first Pull Request? You can learn how from this _free_ series, [How to Contribute to an Open Source Project on GitHub](https://egghead.io/series/how-to-contribute-to-an-open-source-project-on-github).
## Submitting code
@@ -41,14 +42,12 @@ You can also reach us at oss@invertase.io
Thank you to all the people who have already contributed to react-native-firebase!
-
### Backers
Thank you to all our backers! [[Become a backer](https://opencollective.com/react-native-firebase#backer)]
-
### Sponsors
Thank you to all our sponsors! (please ask your company to also support this open source project by [becoming a sponsor](https://opencollective.com/react-native-firebase#sponsor))
diff --git a/README.md b/README.md
index c96fe625..2aa8743e 100644
--- a/README.md
+++ b/README.md
@@ -11,7 +11,7 @@
-
+
@@ -30,43 +30,44 @@ All in all, RNFirebase provides much faster performance (~2x) over the web SDK a
---
## Supported Firebase Features
-> The Web SDK column indicates what modules/functionality from the Web SDK are usable within React Native.
+> The Web SDK column indicates what modules/functionality from the Web SDK are usable within React Native.
> '**?**' indicates partial support
-| Firebase Features | v1.x.x | v2.x.x | v3.x.x | v3.1.x | v3.2.x | Web SDK |
-| ---------------------- | :---: | :---: | :---: | :---: | :---: | :---: |
-| **AdMob** | ❌ | ✅ | ✅ | ✅ | ✅ | ❌ |
-| **Analytics** | ✅ | ✅ | ✅ | ✅ | ✅ | ❌ |
-| **App Indexing** | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ |
-| **Authentication** | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
-| _-- Phone Auth_ | ❌ | ❌ | ✅ | ✅ | ✅ | ❌ |
-| **Core** | ❌ |**?**| ✅ | ✅ | ✅ | ✅ |
-| _-- Multiple Apps_ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ |
-| **Cloud Firestore** | ❌ | ❌ | ✅ | ✅ | ✅ |**?**|
-| **Cloud Messaging (FCM)** | ✅ | ✅ | ✅ | ✅ | ✅ |**?**|
-| **Crashlytics** | ❌ | ❌ | ❌ | ❌ | ✅ | ❌ |
-| **Crash Reporting** | ✅ | ✅ | ✅ | ✅ | ✅ | ❌ |
-| **Dynamic Links** | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ |
-| **Invites** | ❌ | ❌ | ❌ |**?**|**?**| ❌ |
-| **Performance Monitoring** | ✅ | ✅ | ✅ | ✅ | ✅ | ❌ |
-| **Realtime Database** | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
-| _-- Offline Persistence_ | ✅ | ✅ | ✅ | ✅ | ✅ |**?**|
-| _-- Transactions_ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
-| **Remote Config** | ✅ | ✅ | ✅ | ✅ | ✅ | ❌ |
-| **Storage** | ✅ | ✅ | ✅ | ✅ | ✅ |**?**|
+| Firebase Features | v1.x.x | v2.x.x | v3.x.x | v3.1.x | v3.2.x | Web SDK |
+| -------------------------- | :----: | :----: | :----: | :----: | :----: | :-----: |
+| **AdMob** | ❌ | ✅ | ✅ | ✅ | ✅ | ❌ |
+| **Analytics** | ✅ | ✅ | ✅ | ✅ | ✅ | ❌ |
+| **App Indexing** | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ |
+| **Authentication** | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
+| _-- Phone Auth_ | ❌ | ❌ | ✅ | ✅ | ✅ | ❌ |
+| **Core** | ❌ | **?** | ✅ | ✅ | ✅ | ✅ |
+| _-- Multiple Apps_ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ |
+| **Cloud Firestore** | ❌ | ❌ | ✅ | ✅ | ✅ | **?** |
+| **Cloud Messaging (FCM)** | ✅ | ✅ | ✅ | ✅ | ✅ | **?** |
+| **Crashlytics** | ❌ | ❌ | ❌ | ❌ | ✅ | ❌ |
+| **Crash Reporting** | ✅ | ✅ | ✅ | ✅ | ✅ | ❌ |
+| **Dynamic Links** | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ |
+| **Invites** | ❌ | ❌ | ❌ | **?** | **?** | ❌ |
+| **Performance Monitoring** | ✅ | ✅ | ✅ | ✅ | ✅ | ❌ |
+| **Realtime Database** | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
+| _-- Offline Persistence_ | ✅ | ✅ | ✅ | ✅ | ✅ | **?** |
+| _-- Transactions_ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
+| **Remote Config** | ✅ | ✅ | ✅ | ✅ | ✅ | ❌ |
+| **Storage** | ✅ | ✅ | ✅ | ✅ | ✅ | **?** |
---
+
### Supported versions - React Native / Firebase
> The table below shows the supported versions of React Native and the Firebase SDKs for different versions of `react-native-firebase`
-| | 1.X.X | 2.0.X | 2.1.X / 2.2.X | 3.0.X | 3.1.X | 3.2.X |
-|------------------------|-------------|-------------|-----------------|----------|-------------|----------|
-| React Native | 0.36 - 0.39 | 0.40 - 0.46 | 0.47 + | 0.48 + | 0.48 - 0.49 | 0.50 + |
-| Firebase Android SDK | 10.2.0 + | 11.0.0 + | 11.0.0 + | 11.4.2 + | 11.6.0 + | 11.6.2 + |
-| Firebase iOS SDK | 3.15.0 + | 4.0.0 + | 4.0.0 + | 4.3.0 + | 4.5.0 + | 4.7.0 + |
+| | 1.X.X | 2.0.X | 2.1.X / 2.2.X | 3.0.X | 3.1.X | 3.2.X |
+| -------------------- | ----------- | ----------- | ------------- | -------- | ----------- | -------- |
+| React Native | 0.36 - 0.39 | 0.40 - 0.46 | 0.47 + | 0.48 + | 0.48 - 0.49 | 0.50 + |
+| Firebase Android SDK | 10.2.0 + | 11.0.0 + | 11.0.0 + | 11.4.2 + | 11.6.0 + | 11.6.2 + |
+| Firebase iOS SDK | 3.15.0 + | 4.0.0 + | 4.0.0 + | 4.3.0 + | 4.5.0 + | 4.7.0 + |
---
@@ -76,7 +77,7 @@ To check out our latest docs, visit [rnfirebase.io](https://rnfirebase.io)
## Questions
-For questions and support please use our [Discord chat](https://discord.gg/t6bdqMs) or [Stack Overflow](https://stackoverflow.com/questions/tagged/react-native-firebase). The issue list of this repo is **exclusively** for bug reports.
+For questions and support please use our [Discord chat](https://discord.gg/C9aK28N) or [Stack Overflow](https://stackoverflow.com/questions/tagged/react-native-firebase). The issue list of this repo is **exclusively** for bug reports.
## Issues
@@ -96,7 +97,7 @@ Detailed changes for each release are documented in the [releases notes](https:/
RNFirebase is an Apache-2.0 licensed open source project. It's an independent project with its ongoing development made possible entirely thanks to the support by these awesome [sponsors](#sponsors) and [backers](#backers). If you'd like to join them, please consider:
-- [Become a backer or sponsor on Open Collective](https://opencollective.com/react-native-firebase).
+* [Become a backer or sponsor on Open Collective](https://opencollective.com/react-native-firebase).
### Sponsors
@@ -131,4 +132,4 @@ Thank you to all the people who have already contributed to RNFirebase!
## License
-- See [LICENSE](/LICENSE)
+* See [LICENSE](/LICENSE)
diff --git a/jsconfig.json b/jsconfig.json
index c98b6e08..c11a3996 100644
--- a/jsconfig.json
+++ b/jsconfig.json
@@ -1,9 +1,7 @@
{
- "compilerOptions": {
- "allowJs": true,
- "allowSyntheticDefaultImports": true
- },
- "exclude": [
- "node_modules"
- ]
-}
\ No newline at end of file
+ "compilerOptions": {
+ "allowJs": true,
+ "allowSyntheticDefaultImports": true
+ },
+ "exclude": ["node_modules"]
+}
diff --git a/lib/index.d.ts b/lib/index.d.ts
index 8d300c6f..4f239a9e 100644
--- a/lib/index.d.ts
+++ b/lib/index.d.ts
@@ -5,88 +5,77 @@
declare module "react-native-firebase" {
- type AuthProvider = {
- PROVIDER_ID: string,
- credential: (token: string, secret?: string) => AuthCredential,
- };
-
- export default class FireBase {
- constructor(config?: RNFirebase.configurationOptions)
-
- log: any;
-
- analytics(): RNFirebase.Analytics;
-
- on(type: string, handler: (msg: any) => void): any;
-
- database: {
- (): RNFirebase.database.Database
- ServerValue: {
- TIMESTAMP: number
- }
- };
-
- auth: {
- (): RNFirebase.auth.Auth
- EmailAuthProvider: AuthProvider,
- PhoneAuthProvider: AuthProvider,
- GoogleAuthProvider: AuthProvider,
- GithubAuthProvider: AuthProvider,
- TwitterAuthProvider: AuthProvider,
- FacebookAuthProvider: AuthProvider,
- PhoneAuthState: {
- CODE_SENT: string,
- AUTO_VERIFY_TIMEOUT: string,
- AUTO_VERIFIED: string,
- ERROR: string,
- },
- };
-
- /**RNFirebase mimics the Web Firebase SDK Storage,
- * whilst providing some iOS and Android specific functionality.
- */
- storage(): RNFirebase.storage.Storage;
-
- /**
- * Firebase Cloud Messaging (FCM) allows you to send push messages at no cost to both Android & iOS platforms.
- * Assuming the installation instructions have been followed, FCM is ready to go.
- * As the Firebase Web SDK has limited messaging functionality,
- * the following methods within react-native-firebase have been created to handle FCM in the React Native environment.
- */
- messaging(): RNFirebase.messaging.Messaging;
-
- /**
- * RNFirebase provides crash reporting for your app out of the box.
- * Please note crashes do not appear in real-time on the console,
- * they tend to take a number of hours to appear
- * If you want to manually report a crash,
- * such as a pre-caught exception this is possible by using the report method.
- */
- crash(): RNFirebase.crash.Crash;
-
- /**
- * Firebase Dynamic Links are links that work the way you want, on multiple
- * platforms, and whether or not your app is already installed.
- * See the official Firebase docs:
- * https://firebase.google.com/docs/dynamic-links/
- */
- links(): RNFirebase.links.Links;
-
- static fabric: {
- crashlytics(): RNFirebase.crashlytics.Crashlytics;
- };
-
- apps: Array;
- googleApiAvailability: RNFirebase.GoogleApiAvailabilityType;
-
- static initializeApp(options?: any | RNFirebase.configurationOptions, name?: string): FireBase;
-
- static app(name?: string): FireBase;
-
- [key: string]: any;
+ /** 3rd party provider Credentials */
+ type AuthCredential = {
+ providerId: string,
+ token: string,
+ secret: string
}
- namespace RNFirebase {
+ type FirebaseModuleAndStatics = {
+ (): M;
+ nativeModuleExists: boolean;
+ } & S
+
+ // Modules commented-out do not currently have type definitions
+ export class Firebase {
+ private constructor();
+ // admob: FirebaseModuleAndStatics;
+ analytics: FirebaseModuleAndStatics;
+ auth: FirebaseModuleAndStatics;
+ // config: FirebaseModule;
+ crash: FirebaseModuleAndStatics;
+ database: FirebaseModuleAndStatics;
+ fabric: {
+ crashlytics: FirebaseModuleAndStatics;
+ };
+ firestore: FirebaseModuleAndStatics;
+ links: FirebaseModuleAndStatics;
+ messaging: FirebaseModuleAndStatics;
+ // perf: FirebaseModuleAndStatics;
+ storage: FirebaseModuleAndStatics;
+ // utils: FirebaseModuleAndStatics;
+ initializeApp(options: Firebase.Options, name: string): App;
+ app(name?: string): App;
+ readonly apps: App[];
+ readonly SDK_VERSION: string;
+ }
+ namespace Firebase {
+ interface Options {
+ apiKey: string;
+ appId: string;
+ databaseURL: string;
+ messagingSenderId: string;
+ projectId: string;
+ storageBucket: string;
+ }
+ }
+ const firebase: Firebase;
+ export default firebase;
+
+ // Modules commented-out do not currently have type definitions
+ export class App {
+ private constructor();
+ // admob(): RNFirebase.admob.AdMob;
+ analytics(): RNFirebase.Analytics;
+ auth(): RNFirebase.auth.Auth;
+ // config(): RNFirebase.config.Config;
+ crash(): RNFirebase.crash.Crash;
+ database(): RNFirebase.database.Database;
+ fabric: {
+ crashlytics(): RNFirebase.crashlytics.Crashlytics,
+ };
+ firestore(): RNFirebase.firestore.Firestore;
+ links(): RNFirebase.links.Links;
+ messaging(): RNFirebase.messaging.Messaging;
+ // perf(): RNFirebase.perf.Performance;
+ storage(): RNFirebase.storage.Storage;
+ // utils(): RNFirebase.utils.Utils;
+ readonly name: string;
+ readonly options: Firebase.Options;
+ }
+
+ export namespace RNFirebase {
interface RnError extends Error {
code?: string;
}
@@ -484,6 +473,15 @@ declare module "react-native-firebase" {
update(values: Object, onComplete?: (a: RnError | null) => any): Promise;
}
+
+ interface DatabaseStatics {
+ /** @see https://www.firebase.com/docs/java-api/javadoc/com/firebase/client/ServerValue.html#TIMESTAMP */
+ ServerValue: {
+ TIMESTAMP: {
+ [key: string]: string
+ }
+ }
+ }
}
/**
@@ -533,13 +531,25 @@ declare module "react-native-firebase" {
[key: string]: any;
}
+ type AdditionalUserInfo = {
+ isNewUser: boolean,
+ profile?: Object,
+ providerId: string,
+ username?: string,
+ }
+
+ type UserCredential = {
+ additionalUserInfo?: AdditionalUserInfo,
+ user: User,
+ }
+
type UserInfo = {
- displayName?: string,
- email?: string,
- phoneNumber?: string,
- photoURL?: string,
- providerId: string,
- uid: string,
+ displayName?: string,
+ email?: string,
+ phoneNumber?: string,
+ photoURL?: string,
+ providerId: string,
+ uid: string,
}
type UpdateProfile = {
@@ -547,6 +557,11 @@ declare module "react-native-firebase" {
photoURL?: string,
}
+ type UserMetadata = {
+ creationTime?: string,
+ lastSignInTime?: string,
+ }
+
interface User {
/**
* The user's display name (if available).
@@ -565,6 +580,8 @@ declare module "react-native-firebase" {
*/
isAnonymous: boolean
+ metadata: UserMetadata
+
phoneNumber: string | null
/**
* - The URL of the user's profile picture (if available).
@@ -594,13 +611,19 @@ declare module "react-native-firebase" {
*
* @param forceRefresh: boolean - default to false
*/
- getIdToken(forceRefresh: boolean?): Promise
+ getIdToken(forceRefresh?: boolean): Promise
+
+ getToken(forceRefresh?: boolean): Promise
+
+ linkAndRetrieveDataWithCredential(credential: AuthCredential): Promise
/**
* Link the user with a 3rd party credential provider.
*/
linkWithCredential(credential: AuthCredential): Promise
+ reauthenticateAndRetrieveDataWithCredential(credential: AuthCredential): Promise
+
/**
* Re-authenticate a user with a third-party authentication provider
*/
@@ -642,13 +665,6 @@ declare module "react-native-firebase" {
updateProfile(updates: UpdateProfile): Promise
}
- /** 3rd party provider Credentials */
- type AuthCredential {
- providerId: string,
- token: string,
- secret: string
- }
-
type ActionCodeSettings = {
android: {
installApp?: boolean,
@@ -663,12 +679,11 @@ declare module "react-native-firebase" {
}
interface ActionCodeInfo {
- email: string,
- error: string,
- fromEmail: string,
- verifyEmail: string,
- recoverEmail: string,
- passwordReset: string
+ data: {
+ email?: string,
+ fromEmail?: string
+ },
+ operation: 'PASSWORD_RESET' | 'VERIFY_EMAIL' | 'RECOVER_EMAIL'
}
interface ConfirmationResult {
@@ -705,13 +720,18 @@ declare module "react-native-firebase" {
}
namespace auth {
-
type AuthResult = {
authenticated: boolean,
user: object | null
} | null;
+ type AuthProvider = {
+ PROVIDER_ID: string,
+ credential: (token: string, secret?: string) => AuthCredential,
+ };
+
interface Auth {
+ readonly app: App;
/**
* Returns the current Firebase authentication state.
*/
@@ -719,7 +739,7 @@ declare module "react-native-firebase" {
/**
* Returns the currently signed-in user (or null). See the User class documentation for further usage.
*/
- user: User | null
+ currentUser: User | null
/**
* Gets/Sets the language for the app instance
@@ -749,12 +769,15 @@ declare module "react-native-firebase" {
signOut(): Promise
+ signInAnonymouslyAndRetrieveData(): Promise
+
/**
* Sign an anonymous user.
* If the user has already signed in, that user will be returned
*/
signInAnonymously(): Promise
+ createUserAndRetrieveDataWithEmailAndPassword(email: string, password: string): Promise
/**
* We can create a user by calling the createUserWithEmailAndPassword() function.
@@ -762,12 +785,16 @@ declare module "react-native-firebase" {
*/
createUserWithEmailAndPassword(email: string, password: string): Promise
+ signInAndRetrieveDataWithEmailAndPassword(email: string, password: string): Promise
+
/**
* To sign a user in with their email and password, use the signInWithEmailAndPassword() function.
* It accepts two parameters, the user's email and password:
*/
signInWithEmailAndPassword(email: string, password: string): Promise
+ signInAndRetrieveDataWithCustomToken(token: string): Promise
+
/**
* Sign a user in with a self-signed JWT token.
* To sign a user using a self-signed custom token,
@@ -776,6 +803,8 @@ declare module "react-native-firebase" {
*/
signInWithCustomToken(token: string): Promise
+ signInAndRetrieveDataWithCredential(credential: AuthCredential): Promise
+
/**
* Sign in the user with a 3rd party credential provider.
* credential requires the following properties:
@@ -816,18 +845,31 @@ declare module "react-native-firebase" {
*/
checkActionCode(code: string): Promise
- /**
- * Get the currently signed in user
- */
- getCurrentUser(): Promise
-
/**
* Returns a list of authentication providers that can be used to sign in a given user (identified by its main email address).
*/
fetchProvidersForEmail(email: string): Promise>
+ verifyPasswordResetCode(code: string): Promise
+
[key: string]: any;
}
+
+ interface AuthStatics {
+ EmailAuthProvider: AuthProvider;
+ PhoneAuthProvider: AuthProvider;
+ GoogleAuthProvider: AuthProvider;
+ GithubAuthProvider: AuthProvider;
+ OAuthProvider: AuthProvider;
+ TwitterAuthProvider: AuthProvider;
+ FacebookAuthProvider: AuthProvider;
+ PhoneAuthState: {
+ CODE_SENT: string;
+ AUTO_VERIFY_TIMEOUT: string;
+ AUTO_VERIFIED: string;
+ ERROR: string;
+ };
+ }
}
namespace messaging {
@@ -1032,9 +1074,9 @@ declare module "react-native-firebase" {
* Returns an unsubscribe function, call the returned function to
* unsubscribe from all future events.
*/
- onLink(listener: (url) => void): () => void;
+ onLink(listener: (url: string) => void): () => void;
}
-
+
/**
* Configuration when creating a Dynamic Link (standard or short). For
* more information about each parameter, see the official Firebase docs:
@@ -1067,5 +1109,260 @@ declare module "react-native-firebase" {
},
}
}
+
+ namespace firestore {
+ interface Firestore {
+ readonly app: App;
+ batch(): WriteBatch;
+ collection(collectionPath: string): CollectionReference;
+ doc(documentPath: string): DocumentReference;
+
+ /** NOT SUPPORTED YET */
+ // enablePersistence(): Promise;
+ /** NOT SUPPORTED YET */
+ // runTransaction(): Promise;
+ /** NOT SUPPORTED YET */
+ // settings(): void;
+ }
+
+ interface FirestoreStatics {
+ FieldPath: typeof FieldPath;
+ FieldValue: typeof FieldValue;
+ GeoPoint: typeof GeoPoint;
+ enableLogging(enabled: boolean): void;
+ }
+
+ interface CollectionReference {
+ readonly firestore: Firestore;
+ readonly id: string;
+ readonly parent: DocumentReference;
+ add(data: object): Promise;
+ doc(documentPath?: string): DocumentReference;
+ endAt(snapshot: DocumentSnapshot): Query;
+ endAt(...varargs: any[]): Query;
+ endBefore(snapshot: DocumentSnapshot): Query;
+ endBefore(...varargs: any[]): Query;
+ get(): Promise;
+ limit(limit: number): Query;
+ onSnapshot(onNext: Query.ObserverOnNext, onError?: Query.ObserverOnError): () => void;
+ onSnapshot(observer: Query.Observer): () => void;
+ onSnapshot(queryListenOptions: Query.QueryListenOptions, onNext: Query.ObserverOnNext, onError?: Query.ObserverOnError): () => void;
+ onSnapshot(queryListenOptions: Query.QueryListenOptions, observer: Query.Observer): () => void;
+ orderBy(fieldPath: string | FieldPath, directionStr?: Types.QueryDirection): Query;
+ startAfter(snapshot: DocumentSnapshot): Query;
+ startAfter(...varargs: any[]): Query;
+ startAt(snapshot: DocumentSnapshot): Query;
+ startAt(...varargs: any[]): Query;
+ where(fieldPath: string, op: Types.QueryOperator, value: any): Query;
+ }
+
+ interface DocumentChange {
+ readonly doc: DocumentSnapshot;
+ readonly newIndex: number;
+ readonly oldIndex: number;
+ readonly type: string;
+ }
+
+ interface DocumentReference {
+ readonly firestore: Firestore;
+ readonly id: string | null;
+ readonly parent: CollectionReference;
+ readonly path: string;
+ collection(collectionPath: string): CollectionReference;
+ delete(): Promise;
+ get(): Promise;
+ onSnapshot(onNext: DocumentReference.ObserverOnNext, onError?: DocumentReference.ObserverOnError): () => void;
+ onSnapshot(observer: DocumentReference.Observer): () => void;
+ onSnapshot(documentListenOptions: DocumentReference.DocumentListenOptions, onNext: DocumentReference.ObserverOnNext, onError?: DocumentReference.ObserverOnError): () => void;
+ onSnapshot(documentListenOptions: DocumentReference.DocumentListenOptions, observer: DocumentReference.Observer): () => void;
+ set(data: object, writeOptions?: Types.WriteOptions): Promise;
+ update(obj: object): Promise;
+ update(key1: Types.UpdateKey, val1: any): Promise;
+ update(key1: Types.UpdateKey, val1: any, key2: Types.UpdateKey, val2: any): Promise;
+ update(key1: Types.UpdateKey, val1: any, key2: Types.UpdateKey, val2: any, key3: Types.UpdateKey, val3: any): Promise;
+ update(key1: Types.UpdateKey, val1: any, key2: Types.UpdateKey, val2: any, key3: Types.UpdateKey, val3: any, key4: Types.UpdateKey, val4: any): Promise;
+ update(key1: Types.UpdateKey, val1: any, key2: Types.UpdateKey, val2: any, key3: Types.UpdateKey, val3: any, key4: Types.UpdateKey, val4: any, key5: Types.UpdateKey, val5: any): Promise;
+ }
+ namespace DocumentReference {
+ interface DocumentListenOptions {
+ includeMetadataChanges: boolean;
+ }
+
+ type ObserverOnNext = (documentSnapshot: DocumentSnapshot) => void;
+ type ObserverOnError = (err: object) => void;
+ interface Observer {
+ next: ObserverOnNext;
+ error?: ObserverOnError;
+ }
+ }
+
+ interface DocumentSnapshot {
+ readonly exists: boolean;
+ readonly id: string | null;
+ readonly metadata: Types.SnapshotMetadata;
+ readonly ref: DocumentReference;
+ data(): object | void;
+ get(fieldPath: string | FieldPath): any | undefined;
+ }
+
+ class FieldPath {
+ static documentId(): FieldPath;
+ constructor(...segments: string[]);
+ }
+
+ class FieldValue {
+ static delete(): FieldValue;
+ static serverTimestamp(): FieldValue;
+ }
+
+ class GeoPoint {
+ constructor(latitude: number, longitude: number);
+ readonly latitude: number;
+ readonly longitude: number;
+ }
+
+ class Path {
+ static fromName(name: string): Path;
+ constructor(pathComponents: string[]);
+ readonly id: string | null;
+ readonly isDocument: boolean;
+ readonly isCollection: boolean;
+ readonly relativeName: string;
+ child(relativePath: string): Path;
+ parent(): Path | null;
+ }
+
+ interface Query {
+ readonly firestore: Firestore;
+ endAt(snapshot: DocumentSnapshot): Query;
+ endAt(...varargs: any[]): Query;
+ endBefore(snapshot: DocumentSnapshot): Query;
+ endBefore(...varargs: any[]): Query;
+ get(): Promise;
+ limit(limit: number): Query;
+ onSnapshot(onNext: Query.ObserverOnNext, onError?: Query.ObserverOnError): () => void;
+ onSnapshot(observer: Query.Observer): () => void;
+ onSnapshot(queryListenOptions: Query.QueryListenOptions, onNext: Query.ObserverOnNext, onError?: Query.ObserverOnError): () => void;
+ onSnapshot(queryListenOptions: Query.QueryListenOptions, observer: Query.Observer): () => void;
+ orderBy(fieldPath: string | FieldPath, directionStr?: Types.QueryDirection): Query;
+ startAfter(snapshot: DocumentSnapshot): Query;
+ startAfter(...varargs: any[]): Query;
+ startAt(snapshot: DocumentSnapshot): Query;
+ startAt(...varargs: any[]): Query;
+ where(fieldPath: string, op: Types.QueryOperator, value: any): Query;
+ }
+ namespace Query {
+ interface NativeFieldPath {
+ elements?: string[];
+ string?: string;
+ type: 'fieldpath' | 'string';
+ }
+
+ interface FieldFilter {
+ fieldPath: NativeFieldPath;
+ operator: string;
+ value: any;
+ }
+
+ interface FieldOrder {
+ direction: string;
+ fieldPath: NativeFieldPath;
+ }
+
+ interface QueryOptions {
+ endAt?: any[];
+ endBefore?: any[];
+ limit?: number;
+ offset?: number;
+ selectFields?: string[];
+ startAfter?: any[];
+ startAt?: any[];
+ }
+
+ // The JS code expects at least one of 'includeDocumentMetadataChanges'
+ // or 'includeQueryMetadataChanges' to be defined.
+ interface _IncludeDocumentMetadataChanges {
+ includeDocumentMetadataChanges: boolean;
+ }
+ interface _IncludeQueryMetadataChanges {
+ includeQueryMetadataChanges: boolean;
+ }
+ type QueryListenOptions = _IncludeDocumentMetadataChanges | _IncludeQueryMetadataChanges | (_IncludeDocumentMetadataChanges & _IncludeQueryMetadataChanges);
+
+ type ObserverOnNext = (querySnapshot: QuerySnapshot) => void;
+ type ObserverOnError = (err: object) => void;
+ interface Observer {
+ next: ObserverOnNext;
+ error?: ObserverOnError;
+ }
+ }
+
+ interface QuerySnapshot {
+ readonly docChanges: DocumentChange[];
+ readonly docs: DocumentSnapshot[];
+ readonly empty: boolean;
+ readonly metadata: Types.SnapshotMetadata;
+ readonly query: Query;
+ readonly size: number;
+ forEach(callback: (snapshot: DocumentSnapshot) => any): void;
+ }
+ namespace QuerySnapshot {
+ interface NativeData {
+ changes: Types.NativeDocumentChange[];
+ documents: Types.NativeDocumentSnapshot[];
+ metadata: Types.SnapshotMetadata;
+ }
+ }
+
+ interface WriteBatch {
+ commit(): Promise;
+ delete(docRef: DocumentReference): WriteBatch;
+ set(docRef: DocumentReference, data: object, options?: Types.WriteOptions): WriteBatch;
+ // multiple overrides for update() to allow strong-typed var_args
+ update(docRef: DocumentReference, obj: object): WriteBatch;
+ update(docRef: DocumentReference, key1: Types.UpdateKey, val1: any): WriteBatch;
+ update(docRef: DocumentReference, key1: Types.UpdateKey, val1: any, key2: Types.UpdateKey, val2: any): WriteBatch;
+ update(docRef: DocumentReference, key1: Types.UpdateKey, val1: any, key2: Types.UpdateKey, val2: any, key3: Types.UpdateKey, val3: any): WriteBatch;
+ update(docRef: DocumentReference, key1: Types.UpdateKey, val1: any, key2: Types.UpdateKey, val2: any, key3: Types.UpdateKey, val3: any, key4: Types.UpdateKey, val4: any): WriteBatch;
+ update(docRef: DocumentReference, key1: Types.UpdateKey, val1: any, key2: Types.UpdateKey, val2: any, key3: Types.UpdateKey, val3: any, key4: Types.UpdateKey, val4: any, key5: Types.UpdateKey, val5: any): WriteBatch;
+ }
+
+ namespace Types {
+ interface NativeDocumentChange {
+ document: NativeDocumentSnapshot;
+ newIndex: number;
+ oldIndex: number;
+ type: string;
+ }
+
+ interface NativeDocumentSnapshot {
+ data: {
+ [key: string]: TypeMap;
+ };
+ metadata: SnapshotMetadata;
+ path: string;
+ }
+
+ interface SnapshotMetadata {
+ fromCache: boolean;
+ hasPendingWrites: boolean;
+ }
+
+ type QueryDirection = 'asc' | 'ASC' | 'desc' | 'DESC';
+ type QueryOperator = '=' | '==' | '>' | '>=' | '<' | '<=';
+
+ interface TypeMap {
+ type: 'array' | 'boolean' | 'date' | 'documentid' | 'fieldvalue' | 'geopoint' | 'null' | 'number' | 'object' | 'reference' | 'string';
+ value: any;
+ }
+
+ /** The key in update() function for DocumentReference and WriteBatch. */
+ type UpdateKey = string | FieldPath
+
+ interface WriteOptions {
+ merge?: boolean;
+ }
+ }
+ }
}
}
diff --git a/lib/index.js b/lib/index.js
index dda8d832..82323cc9 100644
--- a/lib/index.js
+++ b/lib/index.js
@@ -3,7 +3,65 @@
*/
import firebase from './modules/core/firebase';
+export default firebase;
+
+/*
+ * Export App types
+ */
+export type { default as App } from './modules/core/app';
+
+/*
+ * Export Auth types
+ */
+export type {
+ ActionCodeInfo,
+ ActionCodeSettings,
+ AdditionalUserInfo,
+ AuthCredential,
+ UserCredential,
+ UserInfo,
+ UserMetadata,
+} from './modules/auth/types';
+export type {
+ default as ConfirmationResult,
+} from './modules/auth/ConfirmationResult';
export type { default as User } from './modules/auth/User';
export type { default as Message } from './modules/messaging/Message';
-export default firebase;
+/*
+ * Export Database types
+ */
+export type { default as DataSnapshot } from './modules/database/DataSnapshot';
+export type { default as OnDisconnect } from './modules/database/OnDisconnect';
+export type { default as Reference } from './modules/database/Reference';
+export type { default as DataQuery } from './modules/database/Query';
+
+/*
+ * Export Firestore types
+ */
+export type {
+ DocumentListenOptions,
+ QueryListenOptions,
+ SetOptions,
+ SnapshotMetadata,
+} from './modules/firestore/types';
+export type {
+ default as CollectionReference,
+} from './modules/firestore/CollectionReference';
+export type {
+ default as DocumentChange,
+} from './modules/firestore/DocumentChange';
+export type {
+ default as DocumentReference,
+} from './modules/firestore/DocumentReference';
+export type {
+ default as DocumentSnapshot,
+} from './modules/firestore/DocumentSnapshot';
+export type { default as FieldPath } from './modules/firestore/FieldPath';
+export type { default as FieldValue } from './modules/firestore/FieldValue';
+export type { default as GeoPoint } from './modules/firestore/GeoPoint';
+export type { default as Query } from './modules/firestore/Query';
+export type {
+ default as QuerySnapshot,
+} from './modules/firestore/QuerySnapshot';
+export type { default as WriteBatch } from './modules/firestore/WriteBatch';
diff --git a/lib/modules/admob/EventTypes.js b/lib/modules/admob/EventTypes.js
index 1afdd1f0..510f62e3 100644
--- a/lib/modules/admob/EventTypes.js
+++ b/lib/modules/admob/EventTypes.js
@@ -1,3 +1,6 @@
+/**
+ * @flow
+ */
export default {
onAdLoaded: 'onAdLoaded',
onAdOpened: 'onAdOpened',
diff --git a/lib/modules/admob/Interstitial.js b/lib/modules/admob/Interstitial.js
index 74fcd5d2..a2f4c821 100644
--- a/lib/modules/admob/Interstitial.js
+++ b/lib/modules/admob/Interstitial.js
@@ -1,18 +1,20 @@
-import { NativeModules, Platform } from 'react-native';
+import { Platform } from 'react-native';
import { statics } from './';
import AdRequest from './AdRequest';
import { SharedEventEmitter } from '../../utils/events';
+import { getNativeModule } from '../../utils/native';
import { nativeToJSError } from '../../utils';
-
-const FirebaseAdMob = NativeModules.RNFirebaseAdMob;
+import type AdMob from './';
let subscriptions = [];
export default class Interstitial {
- constructor(admob: Object, adUnit: string) {
+ _admob: AdMob;
+
+ constructor(admob: AdMob, adUnit: string) {
// Interstitials on iOS require a new instance each time
if (Platform.OS === 'ios') {
- FirebaseAdMob.clearInterstitial(adUnit);
+ getNativeModule(admob).clearInterstitial(adUnit);
}
for (let i = 0, len = subscriptions.length; i < len; i++) {
@@ -20,7 +22,7 @@ export default class Interstitial {
}
subscriptions = [];
- this.admob = admob;
+ this._admob = admob;
this.adUnit = adUnit;
this.loaded = false;
SharedEventEmitter.removeAllListeners(`interstitial_${adUnit}`);
@@ -67,7 +69,10 @@ export default class Interstitial {
adRequest = new AdRequest().addTestDevice().build();
}
- return FirebaseAdMob.interstitialLoadAd(this.adUnit, adRequest);
+ return getNativeModule(this._admob).interstitialLoadAd(
+ this.adUnit,
+ adRequest
+ );
}
/**
@@ -84,7 +89,7 @@ export default class Interstitial {
*/
show() {
if (this.loaded) {
- FirebaseAdMob.interstitialShowAd(this.adUnit);
+ getNativeModule(this._admob).interstitialShowAd(this.adUnit);
}
}
diff --git a/lib/modules/admob/RewardedVideo.js b/lib/modules/admob/RewardedVideo.js
index 601e5a78..f5f6e0db 100644
--- a/lib/modules/admob/RewardedVideo.js
+++ b/lib/modules/admob/RewardedVideo.js
@@ -1,21 +1,22 @@
-import { NativeModules } from 'react-native';
import { statics } from './';
import AdRequest from './AdRequest';
import { SharedEventEmitter } from '../../utils/events';
+import { getNativeModule } from '../../utils/native';
import { nativeToJSError } from '../../utils';
-
-const FirebaseAdMob = NativeModules.RNFirebaseAdMob;
+import type AdMob from './';
let subscriptions = [];
export default class RewardedVideo {
- constructor(admob: Object, adUnit: string) {
+ _admob: AdMob;
+
+ constructor(admob: AdMob, adUnit: string) {
for (let i = 0, len = subscriptions.length; i < len; i++) {
subscriptions[i].remove();
}
subscriptions = [];
- this.admob = admob;
+ this._admob = admob;
this.adUnit = adUnit;
this.loaded = false;
SharedEventEmitter.removeAllListeners(`rewarded_video_${adUnit}`);
@@ -62,7 +63,10 @@ export default class RewardedVideo {
adRequest = new AdRequest().addTestDevice().build();
}
- return FirebaseAdMob.rewardedVideoLoadAd(this.adUnit, adRequest);
+ return getNativeModule(this._admob).rewardedVideoLoadAd(
+ this.adUnit,
+ adRequest
+ );
}
/**
@@ -79,7 +83,7 @@ export default class RewardedVideo {
*/
show() {
if (this.loaded) {
- FirebaseAdMob.rewardedVideoShowAd(this.adUnit);
+ getNativeModule(this._admob).rewardedVideoShowAd(this.adUnit);
}
}
diff --git a/lib/modules/admob/index.js b/lib/modules/admob/index.js
index 22c26e4b..795099a3 100644
--- a/lib/modules/admob/index.js
+++ b/lib/modules/admob/index.js
@@ -19,7 +19,7 @@ import EventTypes, {
RewardedVideoEventTypes,
} from './EventTypes';
-import type App from '../core/firebase-app';
+import type App from '../core/app';
type NativeEvent = {
adUnit: string,
@@ -29,7 +29,7 @@ type NativeEvent = {
const NATIVE_EVENTS = ['interstitial_event', 'rewarded_video_event'];
-export const MODULE_NAME = 'RNFirebaseAdmob';
+export const MODULE_NAME = 'RNFirebaseAdMob';
export const NAMESPACE = 'admob';
export default class AdMob extends ModuleBase {
@@ -61,7 +61,7 @@ export default class AdMob extends ModuleBase {
const { adUnit } = event;
const jsEventType = `interstitial_${adUnit}`;
- if (!SharedEventEmitter.hasListeners(jsEventType)) {
+ if (SharedEventEmitter.listeners(jsEventType).length === 0) {
// TODO
}
@@ -72,7 +72,7 @@ export default class AdMob extends ModuleBase {
const { adUnit } = event;
const jsEventType = `rewarded_video_${adUnit}`;
- if (!SharedEventEmitter.hasListeners(jsEventType)) {
+ if (SharedEventEmitter.listeners(jsEventType).length === 0) {
// TODO
}
diff --git a/lib/modules/analytics/index.js b/lib/modules/analytics/index.js
index 373753d3..94588b93 100644
--- a/lib/modules/analytics/index.js
+++ b/lib/modules/analytics/index.js
@@ -5,7 +5,7 @@
import ModuleBase from '../../utils/ModuleBase';
import { getNativeModule } from '../../utils/native';
-import type App from '../core/firebase-app';
+import type App from '../core/app';
const AlphaNumericUnderscore = /^[a-zA-Z0-9_]+$/;
diff --git a/lib/modules/auth/User.js b/lib/modules/auth/User.js
index cd3b3af6..e509bb94 100644
--- a/lib/modules/auth/User.js
+++ b/lib/modules/auth/User.js
@@ -11,18 +11,10 @@ import type {
AuthCredential,
NativeUser,
UserCredential,
+ UserInfo,
UserMetadata,
} from './types';
-type UserInfo = {
- displayName?: string,
- email?: string,
- phoneNumber?: string,
- photoURL?: string,
- providerId: string,
- uid: string,
-};
-
type UpdateProfile = {
displayName?: string,
photoURL?: string,
diff --git a/lib/modules/auth/index.js b/lib/modules/auth/index.js
index 2b18b9df..e7cbe2ed 100644
--- a/lib/modules/auth/index.js
+++ b/lib/modules/auth/index.js
@@ -22,26 +22,19 @@ import FacebookAuthProvider from './providers/FacebookAuthProvider';
import PhoneAuthListener from './PhoneAuthListener';
import type {
+ ActionCodeInfo,
ActionCodeSettings,
AuthCredential,
NativeUser,
NativeUserCredential,
UserCredential,
} from './types';
-import type App from '../core/firebase-app';
+import type App from '../core/app';
type AuthState = {
user?: NativeUser,
};
-type ActionCodeInfo = {
- data: {
- email?: string,
- fromEmail?: string,
- },
- operation: 'PASSWORD_RESET' | 'VERIFY_EMAIL' | 'RECOVER_EMAIL',
-};
-
const NATIVE_EVENTS = [
'auth_state_changed',
'auth_id_token_changed',
diff --git a/lib/modules/auth/types.js b/lib/modules/auth/types.js
index 8f40d619..64655509 100644
--- a/lib/modules/auth/types.js
+++ b/lib/modules/auth/types.js
@@ -3,6 +3,14 @@
*/
import type User from './User';
+export type ActionCodeInfo = {
+ data: {
+ email?: string,
+ fromEmail?: string,
+ },
+ operation: 'PASSWORD_RESET' | 'VERIFY_EMAIL' | 'RECOVER_EMAIL',
+};
+
export type ActionCodeSettings = {
android: {
installApp?: boolean,
@@ -16,7 +24,7 @@ export type ActionCodeSettings = {
url: string,
};
-type AdditionalUserInfo = {
+export type AdditionalUserInfo = {
isNewUser: boolean,
profile?: Object,
providerId: string,
diff --git a/lib/modules/config/index.js b/lib/modules/config/index.js
index f6535d6d..c07f18c8 100644
--- a/lib/modules/config/index.js
+++ b/lib/modules/config/index.js
@@ -6,7 +6,7 @@ import { getLogger } from '../../utils/log';
import ModuleBase from '../../utils/ModuleBase';
import { getNativeModule } from '../../utils/native';
-import type App from '../core/firebase-app';
+import type App from '../core/app';
type NativeValue = {
stringValue?: string,
diff --git a/lib/modules/core/firebase-app.js b/lib/modules/core/app.js
similarity index 100%
rename from lib/modules/core/firebase-app.js
rename to lib/modules/core/app.js
diff --git a/lib/modules/core/firebase.js b/lib/modules/core/firebase.js
index a8647ba8..a5d4ca6b 100644
--- a/lib/modules/core/firebase.js
+++ b/lib/modules/core/firebase.js
@@ -6,7 +6,7 @@ import { NativeModules } from 'react-native';
import APPS from '../../utils/apps';
import INTERNALS from '../../utils/internals';
-import App from './firebase-app';
+import App from './app';
import VERSION from '../../version';
// module imports
diff --git a/lib/modules/crash/index.js b/lib/modules/crash/index.js
index 314d910a..e18ec36b 100644
--- a/lib/modules/crash/index.js
+++ b/lib/modules/crash/index.js
@@ -5,7 +5,7 @@
import ModuleBase from '../../utils/ModuleBase';
import { getNativeModule } from '../../utils/native';
-import type App from '../core/firebase-app';
+import type App from '../core/app';
import type { FirebaseError } from '../../types';
export const MODULE_NAME = 'RNFirebaseCrash';
diff --git a/lib/modules/database/snapshot.js b/lib/modules/database/DataSnapshot.js
similarity index 95%
rename from lib/modules/database/snapshot.js
rename to lib/modules/database/DataSnapshot.js
index 572ea85b..31597cbf 100644
--- a/lib/modules/database/snapshot.js
+++ b/lib/modules/database/DataSnapshot.js
@@ -1,15 +1,15 @@
/**
* @flow
- * Snapshot representation wrapper
+ * DataSnapshot representation wrapper
*/
import { isObject, deepGet, deepExists } from './../../utils';
-import type Reference from './reference';
+import type Reference from './Reference';
/**
* @class DataSnapshot
* @link https://firebase.google.com/docs/reference/js/firebase.database.DataSnapshot
*/
-export default class Snapshot {
+export default class DataSnapshot {
ref: Reference;
key: string;
@@ -50,10 +50,10 @@ export default class Snapshot {
* @link https://firebase.google.com/docs/reference/js/firebase.database.DataSnapshot#forEach
* @returns {Snapshot}
*/
- child(path: string): Snapshot {
+ child(path: string): DataSnapshot {
const value = deepGet(this._value, path);
const childRef = this.ref.child(path);
- return new Snapshot(childRef, {
+ return new DataSnapshot(childRef, {
value,
key: childRef.key,
exists: value !== null,
diff --git a/lib/modules/database/disconnect.js b/lib/modules/database/OnDisconnect.js
similarity index 91%
rename from lib/modules/database/disconnect.js
rename to lib/modules/database/OnDisconnect.js
index 3ec940b6..1662b085 100644
--- a/lib/modules/database/disconnect.js
+++ b/lib/modules/database/OnDisconnect.js
@@ -1,17 +1,17 @@
/**
* @flow
- * Disconnect representation wrapper
+ * OnDisconnect representation wrapper
*/
import { typeOf } from '../../utils';
import { getNativeModule } from '../../utils/native';
import type Database from './';
-import type Reference from './reference';
+import type Reference from './Reference';
/**
* @url https://firebase.google.com/docs/reference/js/firebase.database.OnDisconnect
- * @class Disconnect
+ * @class OmDisconnect
*/
-export default class Disconnect {
+export default class OnDisconnect {
_database: Database;
ref: Reference;
path: string;
diff --git a/lib/modules/database/query.js b/lib/modules/database/Query.js
similarity index 97%
rename from lib/modules/database/query.js
rename to lib/modules/database/Query.js
index 974dba85..b58388be 100644
--- a/lib/modules/database/query.js
+++ b/lib/modules/database/Query.js
@@ -5,7 +5,7 @@
import { objectToUniqueId } from '../../utils';
import type { DatabaseModifier } from '../../types';
-import type Reference from './reference';
+import type Reference from './Reference';
// todo doc methods
diff --git a/lib/modules/database/reference.js b/lib/modules/database/Reference.js
similarity index 97%
rename from lib/modules/database/reference.js
rename to lib/modules/database/Reference.js
index b91e6f13..76e502e7 100644
--- a/lib/modules/database/reference.js
+++ b/lib/modules/database/Reference.js
@@ -2,9 +2,9 @@
* @flow
* Database Reference representation wrapper
*/
-import Query from './query';
-import Snapshot from './snapshot';
-import Disconnect from './disconnect';
+import Query from './Query';
+import DataSnapshot from './DataSnapshot';
+import OnDisconnect from './OnDisconnect';
import { getLogger } from '../../utils/log';
import { getNativeModule } from '../../utils/native';
import ReferenceBase from '../../utils/ReferenceBase';
@@ -218,7 +218,11 @@ export default class Reference extends ReferenceBase {
*/
transaction(
transactionUpdate: Function,
- onComplete: (error: ?Error, committed: boolean, snapshot: ?Snapshot) => *,
+ onComplete: (
+ error: ?Error,
+ committed: boolean,
+ snapshot: ?DataSnapshot
+ ) => *,
applyLocally: boolean = false
) {
if (!isFunction(transactionUpdate)) {
@@ -233,14 +237,14 @@ export default class Reference extends ReferenceBase {
if (error) {
onComplete(error, committed, null);
} else {
- onComplete(null, committed, new Snapshot(this, snapshotData));
+ onComplete(null, committed, new DataSnapshot(this, snapshotData));
}
}
if (error) return reject(error);
return resolve({
committed,
- snapshot: new Snapshot(this, snapshotData),
+ snapshot: new DataSnapshot(this, snapshotData),
});
};
@@ -264,14 +268,14 @@ export default class Reference extends ReferenceBase {
*/
once(
eventName: string = 'value',
- successCallback: (snapshot: Object) => void,
+ successCallback: (snapshot: DataSnapshot) => void,
cancelOrContext: (error: FirebaseError) => void,
context?: Object
) {
return getNativeModule(this._database)
.once(this._getRefKey(), this.path, this._query.getModifiers(), eventName)
.then(({ snapshot }) => {
- const _snapshot = new Snapshot(this, snapshot);
+ const _snapshot = new DataSnapshot(this, snapshot);
if (isFunction(successCallback)) {
if (isObject(cancelOrContext))
@@ -470,10 +474,10 @@ export default class Reference extends ReferenceBase {
/**
*
- * @returns {Disconnect}
+ * @returns {OnDisconnect}
*/
- onDisconnect(): Disconnect {
- return new Disconnect(this);
+ onDisconnect(): OnDisconnect {
+ return new OnDisconnect(this);
}
/**
@@ -691,7 +695,7 @@ export default class Reference extends ReferenceBase {
*/
on(
eventType: string,
- callback: Snapshot => any,
+ callback: DataSnapshot => any,
cancelCallbackOrContext?: Object => any | Object,
context?: Object
): Function {
diff --git a/lib/modules/database/index.js b/lib/modules/database/index.js
index c921c565..4967e0e8 100644
--- a/lib/modules/database/index.js
+++ b/lib/modules/database/index.js
@@ -4,12 +4,12 @@
*/
import { NativeModules } from 'react-native';
-import Reference from './reference';
+import Reference from './Reference';
import TransactionHandler from './transaction';
import ModuleBase from '../../utils/ModuleBase';
import { getNativeModule } from '../../utils/native';
-import type App from '../core/firebase-app';
+import type App from '../core/app';
const NATIVE_EVENTS = [
'database_transaction_event',
diff --git a/lib/modules/fabric/crashlytics/index.js b/lib/modules/fabric/crashlytics/index.js
index b95b9d2d..6b8a4484 100644
--- a/lib/modules/fabric/crashlytics/index.js
+++ b/lib/modules/fabric/crashlytics/index.js
@@ -5,7 +5,7 @@
import ModuleBase from '../../../utils/ModuleBase';
import { getNativeModule } from '../../../utils/native';
-import type App from '../../core/firebase-app';
+import type App from '../../core/app';
export const MODULE_NAME = 'RNFirebaseCrashlytics';
export const NAMESPACE = 'crashlytics';
diff --git a/lib/modules/firestore/CollectionReference.js b/lib/modules/firestore/CollectionReference.js
index 19807680..57e6d2a3 100644
--- a/lib/modules/firestore/CollectionReference.js
+++ b/lib/modules/firestore/CollectionReference.js
@@ -8,17 +8,13 @@ import { firestoreAutoId } from '../../utils';
import type Firestore from './';
import type {
- FirestoreQueryDirection,
- FirestoreQueryOperator,
-} from '../../types';
+ QueryDirection,
+ QueryListenOptions,
+ QueryOperator,
+} from './types';
import type FieldPath from './FieldPath';
import type Path from './Path';
-import type {
- Observer,
- ObserverOnError,
- ObserverOnNext,
- QueryListenOptions,
-} from './Query';
+import type { Observer, ObserverOnError, ObserverOnNext } from './Query';
import type QuerySnapshot from './QuerySnapshot';
/**
@@ -95,10 +91,7 @@ export default class CollectionReference {
);
}
- orderBy(
- fieldPath: string | FieldPath,
- directionStr?: FirestoreQueryDirection
- ): Query {
+ orderBy(fieldPath: string | FieldPath, directionStr?: QueryDirection): Query {
return this._query.orderBy(fieldPath, directionStr);
}
@@ -110,7 +103,7 @@ export default class CollectionReference {
return this._query.startAt(snapshotOrVarArgs);
}
- where(fieldPath: string, opStr: FirestoreQueryOperator, value: any): Query {
+ where(fieldPath: string, opStr: QueryOperator, value: any): Query {
return this._query.where(fieldPath, opStr, value);
}
}
diff --git a/lib/modules/firestore/DocumentChange.js b/lib/modules/firestore/DocumentChange.js
index c0656d0a..6adf9577 100644
--- a/lib/modules/firestore/DocumentChange.js
+++ b/lib/modules/firestore/DocumentChange.js
@@ -5,7 +5,7 @@
import DocumentSnapshot from './DocumentSnapshot';
import type Firestore from './';
-import type { FirestoreNativeDocumentChange } from '../../types';
+import type { NativeDocumentChange } from './types';
/**
* @class DocumentChange
@@ -16,7 +16,7 @@ export default class DocumentChange {
_oldIndex: number;
_type: string;
- constructor(firestore: Firestore, nativeData: FirestoreNativeDocumentChange) {
+ constructor(firestore: Firestore, nativeData: NativeDocumentChange) {
this._document = new DocumentSnapshot(firestore, nativeData.document);
this._newIndex = nativeData.newIndex;
this._oldIndex = nativeData.oldIndex;
diff --git a/lib/modules/firestore/DocumentReference.js b/lib/modules/firestore/DocumentReference.js
index 9fb9ac9c..de5bd8d0 100644
--- a/lib/modules/firestore/DocumentReference.js
+++ b/lib/modules/firestore/DocumentReference.js
@@ -14,15 +14,12 @@ import { getNativeModule } from '../../utils/native';
import type Firestore from './';
import type {
- FirestoreNativeDocumentSnapshot,
- FirestoreWriteOptions,
-} from '../../types';
+ DocumentListenOptions,
+ NativeDocumentSnapshot,
+ SetOptions,
+} from './types';
import type Path from './Path';
-type DocumentListenOptions = {
- includeMetadataChanges: boolean,
-};
-
type ObserverOnError = Object => void;
type ObserverOnNext = DocumentSnapshot => void;
@@ -189,9 +186,7 @@ export default class DocumentReference {
}
const listenerId = firestoreAutoId();
- const listener = (
- nativeDocumentSnapshot: FirestoreNativeDocumentSnapshot
- ) => {
+ const listener = (nativeDocumentSnapshot: NativeDocumentSnapshot) => {
const documentSnapshot = new DocumentSnapshot(
this.firestore,
nativeDocumentSnapshot
@@ -227,12 +222,12 @@ export default class DocumentReference {
return this._offDocumentSnapshot.bind(this, listenerId, listener);
}
- set(data: Object, writeOptions?: FirestoreWriteOptions): Promise {
+ set(data: Object, options?: SetOptions): Promise {
const nativeData = buildNativeMap(data);
return getNativeModule(this._firestore).documentSet(
this.path,
nativeData,
- writeOptions
+ options
);
}
diff --git a/lib/modules/firestore/DocumentSnapshot.js b/lib/modules/firestore/DocumentSnapshot.js
index 691c82c4..23e8ef10 100644
--- a/lib/modules/firestore/DocumentSnapshot.js
+++ b/lib/modules/firestore/DocumentSnapshot.js
@@ -9,10 +9,7 @@ import { isObject } from '../../utils';
import { parseNativeMap } from './utils/serialize';
import type Firestore from './';
-import type {
- FirestoreNativeDocumentSnapshot,
- FirestoreSnapshotMetadata,
-} from '../../types';
+import type { NativeDocumentSnapshot, SnapshotMetadata } from './types';
const extractFieldPathData = (data: Object | void, segments: string[]): any => {
if (!data || !isObject(data)) {
@@ -30,13 +27,10 @@ const extractFieldPathData = (data: Object | void, segments: string[]): any => {
*/
export default class DocumentSnapshot {
_data: Object | void;
- _metadata: FirestoreSnapshotMetadata;
+ _metadata: SnapshotMetadata;
_ref: DocumentReference;
- constructor(
- firestore: Firestore,
- nativeData: FirestoreNativeDocumentSnapshot
- ) {
+ constructor(firestore: Firestore, nativeData: NativeDocumentSnapshot) {
this._data = parseNativeMap(firestore, nativeData.data);
this._metadata = nativeData.metadata;
this._ref = new DocumentReference(
@@ -53,7 +47,7 @@ export default class DocumentSnapshot {
return this._ref.id;
}
- get metadata(): FirestoreSnapshotMetadata {
+ get metadata(): SnapshotMetadata {
return this._metadata;
}
diff --git a/lib/modules/firestore/Query.js b/lib/modules/firestore/Query.js
index 176a1dcc..a162d9ec 100644
--- a/lib/modules/firestore/Query.js
+++ b/lib/modules/firestore/Query.js
@@ -12,20 +12,21 @@ import { firestoreAutoId, isFunction, isObject } from '../../utils';
import { getNativeModule } from '../../utils/native';
import type Firestore from './';
-import type {
- FirestoreQueryDirection,
- FirestoreQueryOperator,
-} from '../../types';
import type Path from './Path';
+import type {
+ QueryDirection,
+ QueryOperator,
+ QueryListenOptions,
+} from './types';
-const DIRECTIONS: { [FirestoreQueryDirection]: string } = {
+const DIRECTIONS: { [QueryDirection]: string } = {
ASC: 'ASCENDING',
asc: 'ASCENDING',
DESC: 'DESCENDING',
desc: 'DESCENDING',
};
-const OPERATORS: { [FirestoreQueryOperator]: string } = {
+const OPERATORS: { [QueryOperator]: string } = {
'=': 'EQUAL',
'==': 'EQUAL',
'>': 'GREATER_THAN',
@@ -58,11 +59,6 @@ type QueryOptions = {
startAt?: any[],
};
-export type QueryListenOptions = {|
- includeDocumentMetadataChanges: boolean,
- includeQueryMetadataChanges: boolean,
-|};
-
export type ObserverOnError = Object => void;
export type ObserverOnNext = QuerySnapshot => void;
@@ -320,7 +316,7 @@ export default class Query {
orderBy(
fieldPath: string | FieldPath,
- directionStr?: FirestoreQueryDirection = 'asc'
+ directionStr?: QueryDirection = 'asc'
): Query {
// TODO: Validation
// validate.isFieldPath('fieldPath', fieldPath);
@@ -379,7 +375,7 @@ export default class Query {
where(
fieldPath: string | FieldPath,
- opStr: FirestoreQueryOperator,
+ opStr: QueryOperator,
value: any
): Query {
// TODO: Validation
diff --git a/lib/modules/firestore/QuerySnapshot.js b/lib/modules/firestore/QuerySnapshot.js
index 3ff070db..d7748cf8 100644
--- a/lib/modules/firestore/QuerySnapshot.js
+++ b/lib/modules/firestore/QuerySnapshot.js
@@ -7,16 +7,16 @@ import DocumentSnapshot from './DocumentSnapshot';
import type Firestore from './';
import type {
- FirestoreNativeDocumentChange,
- FirestoreNativeDocumentSnapshot,
- FirestoreSnapshotMetadata,
-} from '../../types';
+ NativeDocumentChange,
+ NativeDocumentSnapshot,
+ SnapshotMetadata,
+} from './types';
import type Query from './Query';
-type QuerySnapshotNativeData = {
- changes: FirestoreNativeDocumentChange[],
- documents: FirestoreNativeDocumentSnapshot[],
- metadata: FirestoreSnapshotMetadata,
+type NativeQuerySnapshot = {
+ changes: NativeDocumentChange[],
+ documents: NativeDocumentSnapshot[],
+ metadata: SnapshotMetadata,
};
/**
@@ -25,13 +25,13 @@ type QuerySnapshotNativeData = {
export default class QuerySnapshot {
_changes: DocumentChange[];
_docs: DocumentSnapshot[];
- _metadata: FirestoreSnapshotMetadata;
+ _metadata: SnapshotMetadata;
_query: Query;
constructor(
firestore: Firestore,
query: Query,
- nativeData: QuerySnapshotNativeData
+ nativeData: NativeQuerySnapshot
) {
this._changes = nativeData.changes.map(
change => new DocumentChange(firestore, change)
@@ -55,7 +55,7 @@ export default class QuerySnapshot {
return this._docs.length === 0;
}
- get metadata(): FirestoreSnapshotMetadata {
+ get metadata(): SnapshotMetadata {
return this._metadata;
}
diff --git a/lib/modules/firestore/WriteBatch.js b/lib/modules/firestore/WriteBatch.js
index afb3dc47..fe4f15a9 100644
--- a/lib/modules/firestore/WriteBatch.js
+++ b/lib/modules/firestore/WriteBatch.js
@@ -10,7 +10,7 @@ import { getNativeModule } from '../../utils/native';
import type DocumentReference from './DocumentReference';
import type Firestore from './';
-import type { FirestoreWriteOptions } from '../../types';
+import type { SetOptions } from './types';
type DocumentWrite = {
data?: Object,
@@ -47,19 +47,15 @@ export default class WriteBatch {
return this;
}
- set(
- docRef: DocumentReference,
- data: Object,
- writeOptions?: FirestoreWriteOptions
- ) {
+ set(docRef: DocumentReference, data: Object, options?: SetOptions) {
// TODO: Validation
// validate.isDocumentReference('docRef', docRef);
// validate.isDocument('data', data);
- // validate.isOptionalPrecondition('writeOptions', writeOptions);
+ // validate.isOptionalPrecondition('options', writeOptions);
const nativeData = buildNativeMap(data);
this._writes.push({
data: nativeData,
- options: writeOptions,
+ options,
path: docRef.path,
type: 'SET',
});
diff --git a/lib/modules/firestore/index.js b/lib/modules/firestore/index.js
index 7b5a185e..d9d02b74 100644
--- a/lib/modules/firestore/index.js
+++ b/lib/modules/firestore/index.js
@@ -16,7 +16,7 @@ import WriteBatch from './WriteBatch';
import INTERNALS from '../../utils/internals';
import type DocumentSnapshot from './DocumentSnapshot';
-import type App from '../core/firebase-app';
+import type App from '../core/app';
import type QuerySnapshot from './QuerySnapshot';
type CollectionSyncEvent = {
diff --git a/lib/modules/firestore/types.js b/lib/modules/firestore/types.js
new file mode 100644
index 00000000..6ed935dc
--- /dev/null
+++ b/lib/modules/firestore/types.js
@@ -0,0 +1,54 @@
+/*
+ * @flow
+ */
+
+export type DocumentListenOptions = {
+ includeMetadataChanges: boolean,
+};
+
+export type QueryDirection = 'DESC' | 'desc' | 'ASC' | 'asc';
+
+export type QueryListenOptions = {|
+ includeDocumentMetadataChanges: boolean,
+ includeQueryMetadataChanges: boolean,
+|};
+
+export type QueryOperator = '<' | '<=' | '=' | '==' | '>' | '>=';
+
+export type SetOptions = {
+ merge?: boolean,
+};
+
+export type SnapshotMetadata = {
+ fromCache: boolean,
+ hasPendingWrites: boolean,
+};
+
+export type NativeDocumentChange = {
+ document: NativeDocumentSnapshot,
+ newIndex: number,
+ oldIndex: number,
+ type: string,
+};
+
+export type NativeDocumentSnapshot = {
+ data: { [string]: NativeTypeMap },
+ metadata: SnapshotMetadata,
+ path: string,
+};
+
+export type NativeTypeMap = {
+ type:
+ | 'array'
+ | 'boolean'
+ | 'date'
+ | 'documentid'
+ | 'fieldvalue'
+ | 'geopoint'
+ | 'null'
+ | 'number'
+ | 'object'
+ | 'reference'
+ | 'string',
+ value: any,
+};
diff --git a/lib/modules/firestore/utils/serialize.js b/lib/modules/firestore/utils/serialize.js
index 24b8f0a5..90e4d936 100644
--- a/lib/modules/firestore/utils/serialize.js
+++ b/lib/modules/firestore/utils/serialize.js
@@ -13,7 +13,7 @@ import Path from '../Path';
import { typeOf } from '../../../utils';
import type Firestore from '../';
-import type { FirestoreTypeMap } from '../../../types';
+import type { NativeTypeMap } from '../types';
/*
* Functions that build up the data needed to represent
@@ -21,9 +21,7 @@ import type { FirestoreTypeMap } from '../../../types';
* for transmission to the native side
*/
-export const buildNativeMap = (
- data: Object
-): { [string]: FirestoreTypeMap } => {
+export const buildNativeMap = (data: Object): { [string]: NativeTypeMap } => {
const nativeData = {};
if (data) {
Object.keys(data).forEach(key => {
@@ -36,7 +34,7 @@ export const buildNativeMap = (
return nativeData;
};
-export const buildNativeArray = (array: Object[]): FirestoreTypeMap[] => {
+export const buildNativeArray = (array: Object[]): NativeTypeMap[] => {
const nativeArray = [];
if (array) {
array.forEach(value => {
@@ -49,7 +47,7 @@ export const buildNativeArray = (array: Object[]): FirestoreTypeMap[] => {
return nativeArray;
};
-export const buildTypeMap = (value: any): FirestoreTypeMap | null => {
+export const buildTypeMap = (value: any): NativeTypeMap | null => {
const type = typeOf(value);
if (value === null || value === undefined) {
return {
@@ -117,7 +115,7 @@ export const buildTypeMap = (value: any): FirestoreTypeMap | null => {
export const parseNativeMap = (
firestore: Firestore,
- nativeData: { [string]: FirestoreTypeMap }
+ nativeData: { [string]: NativeTypeMap }
): Object | void => {
let data;
if (nativeData) {
@@ -131,7 +129,7 @@ export const parseNativeMap = (
const parseNativeArray = (
firestore: Firestore,
- nativeArray: FirestoreTypeMap[]
+ nativeArray: NativeTypeMap[]
): any[] => {
const array = [];
if (nativeArray) {
@@ -142,7 +140,7 @@ const parseNativeArray = (
return array;
};
-const parseTypeMap = (firestore: Firestore, typeMap: FirestoreTypeMap): any => {
+const parseTypeMap = (firestore: Firestore, typeMap: NativeTypeMap): any => {
const { type, value } = typeMap;
if (type === 'null') {
return null;
diff --git a/lib/modules/links/index.js b/lib/modules/links/index.js
index ae475204..28c31879 100644
--- a/lib/modules/links/index.js
+++ b/lib/modules/links/index.js
@@ -7,7 +7,7 @@ import ModuleBase from '../../utils/ModuleBase';
import { areObjectKeysContainedInOther, isObject, isString } from '../../utils';
import { getNativeModule } from '../../utils/native';
-import type App from '../core/firebase-app';
+import type App from '../core/app';
const EVENT_TYPE = {
Link: 'dynamic_link_received',
diff --git a/lib/modules/messaging/index.js b/lib/modules/messaging/index.js
index 7b27249d..b4b2abc8 100644
--- a/lib/modules/messaging/index.js
+++ b/lib/modules/messaging/index.js
@@ -16,7 +16,7 @@ import {
RemoteNotificationResult,
} from './types';
-import type App from '../core/firebase-app';
+import type App from '../core/app';
import type { NativeMessage } from './types';
type OnMessage = Message => any;
diff --git a/lib/modules/perf/index.js b/lib/modules/perf/index.js
index 8b0eac38..e394d370 100644
--- a/lib/modules/perf/index.js
+++ b/lib/modules/perf/index.js
@@ -6,7 +6,7 @@ import Trace from './Trace';
import ModuleBase from '../../utils/ModuleBase';
import { getNativeModule } from '../../utils/native';
-import type App from '../core/firebase-app';
+import type App from '../core/app';
export const MODULE_NAME = 'RNFirebasePerformance';
export const NAMESPACE = 'perf';
diff --git a/lib/modules/storage/index.js b/lib/modules/storage/index.js
index f2fce5f2..3803feb9 100644
--- a/lib/modules/storage/index.js
+++ b/lib/modules/storage/index.js
@@ -10,7 +10,7 @@ import { getLogger } from '../../utils/log';
import ModuleBase from '../../utils/ModuleBase';
import { getNativeModule } from '../../utils/native';
-import type App from '../core/firebase-app';
+import type App from '../core/app';
const FirebaseStorage = NativeModules.RNFirebaseStorage;
diff --git a/lib/modules/utils/index.js b/lib/modules/utils/index.js
index f42fbf94..7215f2b1 100644
--- a/lib/modules/utils/index.js
+++ b/lib/modules/utils/index.js
@@ -3,7 +3,7 @@ import { NativeModules } from 'react-native';
import INTERNALS from '../../utils/internals';
import { isIOS } from '../../utils';
import ModuleBase from '../../utils/ModuleBase';
-import type App from '../core/firebase-app';
+import type App from '../core/app';
const FirebaseCoreModule = NativeModules.RNFirebase;
diff --git a/lib/types/index.js b/lib/types/index.js
index 3b94966d..f48b3a5c 100644
--- a/lib/types/index.js
+++ b/lib/types/index.js
@@ -52,7 +52,7 @@ export type FirebaseModuleConfig = {
};
export type FirebaseModuleName =
- | 'RNFirebaseAdmob'
+ | 'RNFirebaseAdMob'
| 'RNFirebaseAnalytics'
| 'RNFirebaseAuth'
| 'RNFirebaseRemoteConfig'
@@ -170,52 +170,11 @@ export type FirestoreModule = {
nativeModuleExists: boolean,
} & FirestoreStatics;
-export type FirestoreNativeDocumentChange = {
- document: FirestoreNativeDocumentSnapshot,
- newIndex: number,
- oldIndex: number,
- type: string,
-};
-
-export type FirestoreNativeDocumentSnapshot = {
- data: { [string]: FirestoreTypeMap },
- metadata: FirestoreSnapshotMetadata,
- path: string,
-};
-
-export type FirestoreSnapshotMetadata = {
- fromCache: boolean,
- hasPendingWrites: boolean,
-};
-
-export type FirestoreQueryDirection = 'DESC' | 'desc' | 'ASC' | 'asc';
-export type FirestoreQueryOperator = '<' | '<=' | '=' | '==' | '>' | '>=';
-
-export type FirestoreTypeMap = {
- type:
- | 'array'
- | 'boolean'
- | 'date'
- | 'documentid'
- | 'fieldvalue'
- | 'geopoint'
- | 'null'
- | 'number'
- | 'object'
- | 'reference'
- | 'string',
- value: any,
-};
-
-export type FirestoreWriteOptions = {
- merge?: boolean,
-};
-
/* InstanceId types */
export type InstanceIdModule = {
- (): InstanceId,
- nativeModuleExists: boolean,
+ (): InstanceId,
+nativeModuleExists: boolean,
} & InstanceIdStatics;
/* Links types */
diff --git a/lib/utils/ModuleBase.js b/lib/utils/ModuleBase.js
index 8b68c7fd..83dd5f48 100644
--- a/lib/utils/ModuleBase.js
+++ b/lib/utils/ModuleBase.js
@@ -4,7 +4,7 @@
import { initialiseLogger } from './log';
import { initialiseNativeModule } from './native';
-import type App from '../modules/core/firebase-app';
+import type App from '../modules/core/app';
import type { FirebaseModuleConfig, FirebaseNamespace } from '../types';
export default class ModuleBase {
diff --git a/lib/utils/SyncTree.js b/lib/utils/SyncTree.js
index 17de49e3..7c72b7b6 100644
--- a/lib/utils/SyncTree.js
+++ b/lib/utils/SyncTree.js
@@ -4,11 +4,11 @@
import { NativeEventEmitter, NativeModules } from 'react-native';
import { SharedEventEmitter } from './events';
-import DatabaseSnapshot from '../modules/database/snapshot';
-import DatabaseReference from '../modules/database/reference';
+import DataSnapshot from '../modules/database/DataSnapshot';
+import DatabaseReference from '../modules/database/Reference';
import { isString, nativeToJSError } from '../utils';
-type Listener = DatabaseSnapshot => any;
+type Listener = DataSnapshot => any;
type Registration = {
key: string,
@@ -83,7 +83,7 @@ class SyncTree {
// forward on to users .on(successCallback <-- listener
return SharedEventEmitter.emit(
eventRegistrationKey,
- new DatabaseSnapshot(registration.ref, snapshot),
+ new DataSnapshot(registration.ref, snapshot),
previousChildName
);
}
diff --git a/lib/utils/apps.js b/lib/utils/apps.js
index 7ff37b34..253265e2 100644
--- a/lib/utils/apps.js
+++ b/lib/utils/apps.js
@@ -2,7 +2,7 @@
* @flow
*/
import { NativeModules } from 'react-native';
-import App from '../modules/core/firebase-app';
+import App from '../modules/core/app';
import INTERNALS from './internals';
import { isAndroid, isObject, isString } from './';
diff --git a/package-lock.json b/package-lock.json
index 554b27bd..2628af9a 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -1,6 +1,6 @@
{
"name": "react-native-firebase",
- "version": "3.2.2",
+ "version": "3.2.5",
"lockfileVersion": 1,
"requires": true,
"dependencies": {
@@ -8086,6 +8086,12 @@
"integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=",
"dev": true
},
+ "typescript": {
+ "version": "2.6.2",
+ "resolved": "https://registry.npmjs.org/typescript/-/typescript-2.6.2.tgz",
+ "integrity": "sha1-PFtv1/beCRQmkCfwPAlGdY92c6Q=",
+ "dev": true
+ },
"ua-parser-js": {
"version": "0.7.17",
"resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-0.7.17.tgz",
diff --git a/package.json b/package.json
index 55cf3c33..2fa4c641 100644
--- a/package.json
+++ b/package.json
@@ -1,17 +1,18 @@
{
"name": "react-native-firebase",
- "version": "3.2.2",
+ "version": "3.2.5",
"author": "Invertase (http://invertase.io)",
"description": "A well tested, feature rich Firebase implementation for React Native, supporting iOS & Android. Individual module support for Admob, Analytics, Auth, Crash Reporting, Cloud Firestore, Database, Dynamic Links, Messaging (FCM), Remote Config, Storage and Performance.",
"main": "dist/index.js",
"types": "dist/index.d.ts",
"scripts": {
- "build": "genversion lib/version.js && npm run build-lib && npm run build-flow",
+ "build": "genversion lib/version.js && npm run validate-ts-declarations && npm run build-lib && npm run build-flow",
"build-flow": "flow-copy-source -i */__tests__* lib dist",
"build-lib": "BABEL_ENV=publish babel lib -d dist --ignore __tests__ --copy-files",
"clean": "rimraf dist/",
"flow": "flow",
- "format": "eslint --fix ./lib ./tests/src ./tests/lib",
+ "format:assets": "prettier --ignore-path .gitignore --write \"**/*.{json,md}\"",
+ "format": "npm run format:assets && npm run lint -- --fix",
"lint": "eslint ./lib ./tests/src ./tests/lib",
"precommit": "lint-staged",
"prepublish": "npm run clean && npm run build",
@@ -21,7 +22,8 @@
"tests-npm-install": "cd tests && npm install",
"tests-pod-install": "cd tests && npm run ios:pod:install",
"tests-watch-start": "npm run test-cli watch init start",
- "tests-watch-stop": "npm run test-cli watch stop"
+ "tests-watch-stop": "npm run test-cli watch stop",
+ "validate-ts-declarations": "tsc --project ./"
},
"repository": {
"type": "git",
@@ -44,6 +46,7 @@
"auth",
"config",
"digits",
+ "fabric",
"phone-auth",
"sms",
"firestore",
@@ -101,6 +104,7 @@
"react-native": "^0.52.0",
"rimraf": "^2.6.2",
"shelljs": "^0.7.8",
+ "typescript": "^2.6.2",
"wml": "0.0.82"
},
"dependencies": {
@@ -129,12 +133,12 @@
"eslint --fix",
"git add"
],
- "tests/src/**/*.js": [
+ "tests/{src|lib}/**/*.js": [
"eslint --fix",
"git add"
],
- "tests/lib/**/*.js": [
- "eslint --fix",
+ "*.{json,md,scss}": [
+ "prettier --write",
"git add"
]
}
diff --git a/prettier.config.js b/prettier.config.js
index 87d39087..ee3c8d52 100644
--- a/prettier.config.js
+++ b/prettier.config.js
@@ -1,4 +1,12 @@
module.exports = {
trailingComma: 'es5',
singleQuote: true,
+ overrides: [
+ {
+ files: '*.json',
+ options: {
+ printWidth: 400,
+ },
+ },
+ ],
};
diff --git a/tests/android/app/build.gradle b/tests/android/app/build.gradle
index 0fd2e4f2..39b6b646 100644
--- a/tests/android/app/build.gradle
+++ b/tests/android/app/build.gradle
@@ -143,11 +143,10 @@ android {
project.ext.firebaseVersion = '11.8.0'
dependencies {
-// compile(project(':react-native-firebase')) {
-// transitive = false
-// }
compile project(':react-native-vector-icons')
- compile project(':react-native-firebase')
+ compile(project(':react-native-firebase')) {
+ transitive = false
+ }
compile fileTree(dir: "libs", include: ["*.jar"])
compile "com.google.android.gms:play-services-base:$firebaseVersion"
compile "com.google.firebase:firebase-ads:$firebaseVersion"
diff --git a/tests/ios/Podfile.lock b/tests/ios/Podfile.lock
index 0addb5eb..22babbd1 100644
--- a/tests/ios/Podfile.lock
+++ b/tests/ios/Podfile.lock
@@ -164,7 +164,7 @@ PODS:
- React/Core
- React/fishhook
- React/RCTBlob
- - RNFirebase (3.2.2):
+ - RNFirebase (3.2.4):
- React
- yoga (0.52.0.React)
@@ -228,7 +228,7 @@ SPEC CHECKSUMS:
nanopb: 5601e6bca2dbf1ed831b519092ec110f66982ca3
Protobuf: 8a9838fba8dae3389230e1b7f8c104aa32389c03
React: 61a6bdf17a9ff16875c230e6ff278d9de274e16c
- RNFirebase: 5cf5405d1b67c9720ce63a2da3d6d5346415d0f7
+ RNFirebase: 011e47909cf54070f72d50b8d61eb7b347774d29
yoga: 646606bf554d54a16711f35596178522fbc00480
PODFILE CHECKSUM: 67c98bcb203cb992da590bcab6f690f727653ca5
diff --git a/tests/ios/ReactNativeFirebaseDemo/Images.xcassets/AppIcon.appiconset/Contents.json b/tests/ios/ReactNativeFirebaseDemo/Images.xcassets/AppIcon.appiconset/Contents.json
index c9202920..664ab6ca 100644
--- a/tests/ios/ReactNativeFirebaseDemo/Images.xcassets/AppIcon.appiconset/Contents.json
+++ b/tests/ios/ReactNativeFirebaseDemo/Images.xcassets/AppIcon.appiconset/Contents.json
@@ -1,79 +1,79 @@
{
- "images" : [
+ "images": [
{
- "size" : "20x20",
- "idiom" : "iphone",
- "filename" : "Icon-20@2x.png",
- "scale" : "2x"
+ "size": "20x20",
+ "idiom": "iphone",
+ "filename": "Icon-20@2x.png",
+ "scale": "2x"
},
{
- "size" : "20x20",
- "idiom" : "iphone",
- "filename" : "Icon-20@3x.png",
- "scale" : "3x"
+ "size": "20x20",
+ "idiom": "iphone",
+ "filename": "Icon-20@3x.png",
+ "scale": "3x"
},
{
- "size" : "29x29",
- "idiom" : "iphone",
- "filename" : "Icon-29.png",
- "scale" : "1x"
+ "size": "29x29",
+ "idiom": "iphone",
+ "filename": "Icon-29.png",
+ "scale": "1x"
},
{
- "size" : "29x29",
- "idiom" : "iphone",
- "filename" : "Icon-29@2x.png",
- "scale" : "2x"
+ "size": "29x29",
+ "idiom": "iphone",
+ "filename": "Icon-29@2x.png",
+ "scale": "2x"
},
{
- "size" : "29x29",
- "idiom" : "iphone",
- "filename" : "Icon-29@3x.png",
- "scale" : "3x"
+ "size": "29x29",
+ "idiom": "iphone",
+ "filename": "Icon-29@3x.png",
+ "scale": "3x"
},
{
- "size" : "40x40",
- "idiom" : "iphone",
- "filename" : "Icon-40@2x.png",
- "scale" : "2x"
+ "size": "40x40",
+ "idiom": "iphone",
+ "filename": "Icon-40@2x.png",
+ "scale": "2x"
},
{
- "size" : "40x40",
- "idiom" : "iphone",
- "filename" : "Icon-40@3x.png",
- "scale" : "3x"
+ "size": "40x40",
+ "idiom": "iphone",
+ "filename": "Icon-40@3x.png",
+ "scale": "3x"
},
{
- "size" : "57x57",
- "idiom" : "iphone",
- "filename" : "Icon-57.png",
- "scale" : "1x"
+ "size": "57x57",
+ "idiom": "iphone",
+ "filename": "Icon-57.png",
+ "scale": "1x"
},
{
- "size" : "57x57",
- "idiom" : "iphone",
- "filename" : "Icon-57@2x.png",
- "scale" : "2x"
+ "size": "57x57",
+ "idiom": "iphone",
+ "filename": "Icon-57@2x.png",
+ "scale": "2x"
},
{
- "size" : "60x60",
- "idiom" : "iphone",
- "filename" : "Icon-60@2x.png",
- "scale" : "2x"
+ "size": "60x60",
+ "idiom": "iphone",
+ "filename": "Icon-60@2x.png",
+ "scale": "2x"
},
{
- "size" : "60x60",
- "idiom" : "iphone",
- "filename" : "Icon-60@3x.png",
- "scale" : "3x"
+ "size": "60x60",
+ "idiom": "iphone",
+ "filename": "Icon-60@3x.png",
+ "scale": "3x"
},
{
- "idiom" : "ios-marketing",
- "size" : "1024x1024",
- "scale" : "1x"
+ "idiom": "ios-marketing",
+ "size": "1024x1024",
+ "scale": "1x"
}
],
- "info" : {
- "version" : 1,
- "author" : "xcode"
+ "info": {
+ "version": 1,
+ "author": "xcode"
}
-}
\ No newline at end of file
+}
diff --git a/tests/ios/ReactNativeFirebaseDemo/Images.xcassets/Contents.json b/tests/ios/ReactNativeFirebaseDemo/Images.xcassets/Contents.json
index da4a164c..97a8662e 100644
--- a/tests/ios/ReactNativeFirebaseDemo/Images.xcassets/Contents.json
+++ b/tests/ios/ReactNativeFirebaseDemo/Images.xcassets/Contents.json
@@ -1,6 +1,6 @@
{
- "info" : {
- "version" : 1,
- "author" : "xcode"
+ "info": {
+ "version": 1,
+ "author": "xcode"
}
-}
\ No newline at end of file
+}
diff --git a/tsconfig.json b/tsconfig.json
new file mode 100644
index 00000000..2d1dc9e1
--- /dev/null
+++ b/tsconfig.json
@@ -0,0 +1,18 @@
+{
+ "compilerOptions": {
+ "target": "es5",
+ "module": "commonjs",
+ "jsx": "react",
+ "sourceMap": true,
+ "strict": true,
+ "noUnusedLocals": true,
+ "noUnusedParameters": true,
+ "noImplicitReturns": true,
+ "noFallthroughCasesInSwitch": true,
+ "moduleResolution": "node",
+ "experimentalDecorators": true,
+ "emitDecoratorMetadata": true,
+ "lib": ["es2015", "es2016", "esnext", "dom"]
+ },
+ "files": ["./lib/index.d.ts"]
+}