From efae2acd79257f4fbc75760a8af6e204fb19f04c Mon Sep 17 00:00:00 2001 From: Salakar Date: Mon, 15 Jul 2019 01:27:25 +0100 Subject: [PATCH] [types][links] rework types --- packages/links/.npmignore | 1 + packages/links/lib/index.d.ts | 58 ++++++++++++----------------------- packages/links/type-test.ts | 26 ++++++++++++++++ 3 files changed, 46 insertions(+), 39 deletions(-) create mode 100644 packages/links/type-test.ts diff --git a/packages/links/.npmignore b/packages/links/.npmignore index d9fa30e5..0907fcc1 100644 --- a/packages/links/.npmignore +++ b/packages/links/.npmignore @@ -63,3 +63,4 @@ android/.settings *.coverage.json .circleci .eslintignore +test-types.ts diff --git a/packages/links/lib/index.d.ts b/packages/links/lib/index.d.ts index 165f932c..c2044a73 100644 --- a/packages/links/lib/index.d.ts +++ b/packages/links/lib/index.d.ts @@ -15,11 +15,7 @@ * */ -import { - ReactNativeFirebaseModule, - ReactNativeFirebaseNamespace, - ReactNativeFirebaseModuleAndStatics, -} from '@react-native-firebase/app-types'; +import { ReactNativeFirebase } from '@react-native-firebase/app'; /** * Links @@ -27,6 +23,8 @@ import { * @firebase links */ export namespace Links { + import FirebaseModule = ReactNativeFirebase.FirebaseModule; + /** * The DynamicLinkAnalyticsParameters interface provides functionality to add Google Analytic * based parameters to a dynamic link. @@ -407,7 +405,7 @@ export namespace Links { * const links = firebase.links(); * ``` */ - export class Module extends ReactNativeFirebaseModule { + export class Module extends FirebaseModule { /** * Creates new parameters which enhance the functionality of a created link. * @@ -547,45 +545,27 @@ export namespace Links { } declare module '@react-native-firebase/links' { - import { ReactNativeFirebaseNamespace } from '@react-native-firebase/app-types'; + import ReactNativeFirebaseModule = ReactNativeFirebase.Module; + import FirebaseModuleWithStatics = ReactNativeFirebase.FirebaseModuleWithStatics; - const FirebaseNamespaceExport: {} & ReactNativeFirebaseNamespace; + const firebaseNamedExport: {} & ReactNativeFirebaseModule; + export const firebase = firebaseNamedExport; - /** - * @example - * ```js - * import { firebase } from '@react-native-firebase/links'; - * firebase.links().X(...); - * ``` - */ - export const firebase = FirebaseNamespaceExport; - - const LinksDefaultExport: ReactNativeFirebaseModuleAndStatics; - /** - * @example - * ```js - * import links from '@react-native-firebase/links'; - * links().X(...); - * ``` - */ - export default LinksDefaultExport; + const module: FirebaseModuleWithStatics; + export default module; } /** * Attach namespace to `firebase.` and `FirebaseApp.`. */ -declare module '@react-native-firebase/app-types' { - interface ReactNativeFirebaseNamespace { - /** - * Links - */ - links: ReactNativeFirebaseModuleAndStatics; - } - - interface FirebaseApp { - /** - * Links - */ - links(): Links.Module; +declare module '@react-native-firebase/app' { + namespace ReactNativeFirebase { + import FirebaseModuleWithStatics = ReactNativeFirebase.FirebaseModuleWithStatics; + interface Module { + links: FirebaseModuleWithStatics; + } + interface FirebaseApp { + links(): Links.Module; + } } } diff --git a/packages/links/type-test.ts b/packages/links/type-test.ts new file mode 100644 index 00000000..8b956106 --- /dev/null +++ b/packages/links/type-test.ts @@ -0,0 +1,26 @@ +import firebase from '@react-native-firebase/app'; +import defaultExport, { firebase as firebaseFromModule } from '@react-native-firebase/links'; + +// checks module exists at root +console.log(firebase.links().app.name); + +// checks module exists at app level +console.log(firebase.app().links().app.name); + +// checks statics exist +console.log(firebase.links.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.links(firebase.app()).app.name); + +// checks default export supports app arg +// console.log(defaultExport(firebase.app()).app.name);