From 6bcb678c29e7c16c536f14ae8fe412109e1719d6 Mon Sep 17 00:00:00 2001 From: Salakar Date: Mon, 15 Jul 2019 01:27:40 +0100 Subject: [PATCH] [types][messaging] rework types --- packages/messaging/.npmignore | 1 + packages/messaging/lib/index.d.ts | 74 ++++++++++++------------------- packages/messaging/type-test.ts | 26 +++++++++++ 3 files changed, 56 insertions(+), 45 deletions(-) create mode 100644 packages/messaging/type-test.ts diff --git a/packages/messaging/.npmignore b/packages/messaging/.npmignore index d9fa30e5..29e5aa19 100644 --- a/packages/messaging/.npmignore +++ b/packages/messaging/.npmignore @@ -63,3 +63,4 @@ android/.settings *.coverage.json .circleci .eslintignore +type-test.ts diff --git a/packages/messaging/lib/index.d.ts b/packages/messaging/lib/index.d.ts index 03198b6b..ccd1d6d1 100644 --- a/packages/messaging/lib/index.d.ts +++ b/packages/messaging/lib/index.d.ts @@ -15,12 +15,7 @@ * */ -import { - ReactNativeFirebaseModule, - ReactNativeFirebaseNamespace, - ReactNativeFirebaseModuleAndStatics, - NativeFirebaseError, -} from '@react-native-firebase/app-types'; +import { ReactNativeFirebase } from '@react-native-firebase/app'; /** * Firebase Messaging package for React Native. @@ -59,6 +54,9 @@ import { * @firebase messaging */ export namespace Messaging { + import FirebaseModule = ReactNativeFirebase.FirebaseModule; + import NativeFirebaseError = ReactNativeFirebase.NativeFirebaseError; + export interface Statics { // firebase.messaging.* static props go here } @@ -243,7 +241,7 @@ export namespace Messaging { * const defaultAppMessaging = firebase.messaging(); * ``` */ - export class Module extends ReactNativeFirebaseModule { + export class Module extends FirebaseModule { /** * Returns a new `RemoteMessageBuilder` which can be passed to `sendMessage()`. * @@ -658,47 +656,33 @@ export namespace Messaging { } declare module '@react-native-firebase/messaging' { - import { ReactNativeFirebaseNamespace } from '@react-native-firebase/app-types'; - const FirebaseNamespaceExport: {} & ReactNativeFirebaseNamespace; - export const firebase = FirebaseNamespaceExport; - const MessagingDefaultExport: ReactNativeFirebaseModuleAndStatics< - Messaging.Module, - Messaging.Statics - >; - export default MessagingDefaultExport; + import ReactNativeFirebaseModule = ReactNativeFirebase.Module; + import FirebaseModuleWithStatics = ReactNativeFirebase.FirebaseModuleWithStatics; + + const firebaseNamedExport: {} & ReactNativeFirebaseModule; + export const firebase = firebaseNamedExport; + + const module: FirebaseModuleWithStatics; + export default module; } -declare module '@react-native-firebase/app-types' { - interface ReactNativeFirebaseNamespace { - messaging: ReactNativeFirebaseModuleAndStatics; - } +/** + * Attach namespace to `firebase.` and `FirebaseApp.`. + */ +declare module '@react-native-firebase/app' { + namespace ReactNativeFirebase { + import FirebaseModuleWithStatics = ReactNativeFirebase.FirebaseModuleWithStatics; + interface Module { + messaging: FirebaseModuleWithStatics; + } - interface FirebaseJSON { - /** - * Set whether database persistence is enabled or disabled. - * - * This can be overridden in JavaScript, e.g. when requesting permission or on a condition. - * - * #### Example - * - * ```json - * // /firebase.json - * { - * "react-native": { - * "messaging_auto_init_enabled": false - * } - * } - * ``` - * - * ```js - * // Re-enable database persistence - * await firebase.messaging().setAutoInitEnabled(true); - * ``` - */ - messaging_auto_init_enabled: boolean; - } + interface FirebaseApp { + messaging(): Messaging.Module; + } - interface FirebaseApp { - messaging(): Messaging.Module; + interface FirebaseConfig { + messaging_auto_init_enabled: boolean; + messaging_android_headless_task_timeout: number; + } } } diff --git a/packages/messaging/type-test.ts b/packages/messaging/type-test.ts new file mode 100644 index 00000000..4de1f113 --- /dev/null +++ b/packages/messaging/type-test.ts @@ -0,0 +1,26 @@ +import firebase from '@react-native-firebase/app'; +import defaultExport, { firebase as firebaseFromModule } from '@react-native-firebase/messaging'; + +// checks module exists at root +console.log(firebase.messaging().app.name); + +// checks module exists at app level +console.log(firebase.app().messaging().app.name); + +// checks statics exist +console.log(firebase.messaging.SDK_VERSION); + +// checks statics exist on defaultExport +console.log(defaultExport.SDK_VERSION); + +// checks root exists +console.log(firebase.SDK_VERSION); + +// checks firebase named export exists on module +console.log(firebaseFromModule.SDK_VERSION); + +// checks multi-app support exists +// console.log(firebase.messaging(firebase.app()).app.name); +// +// checks default export supports app arg +// console.log(defaultExport(firebase.app()).app.name);