From 22ab0ab93efbd6d98e5667e0736ac28e360b00d2 Mon Sep 17 00:00:00 2001 From: Salakar Date: Mon, 15 Jul 2019 01:32:34 +0100 Subject: [PATCH] [internal][types][module-template] rework types --- scripts/_TEMPLATE_/lib/index.d.ts | 45 ++++++++++++++++--------------- scripts/_TEMPLATE_/type-test.ts | 26 ++++++++++++++++++ 2 files changed, 50 insertions(+), 21 deletions(-) create mode 100644 scripts/_TEMPLATE_/type-test.ts diff --git a/scripts/_TEMPLATE_/lib/index.d.ts b/scripts/_TEMPLATE_/lib/index.d.ts index 255f1120..4c65c209 100644 --- a/scripts/_TEMPLATE_/lib/index.d.ts +++ b/scripts/_TEMPLATE_/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'; /** * Firebase _Template_ package for React Native. @@ -58,6 +54,8 @@ import { * @firebase _template_ */ export namespace _Template_ { + import FirebaseModule = ReactNativeFirebase.FirebaseModule; + export interface Statics { // firebase._template_.* static props go here } @@ -99,28 +97,33 @@ export namespace _Template_ { * ``` * */ - export class Module extends ReactNativeFirebaseModule { + export class Module extends FirebaseModule { // firebase._template_().* methods & props go here } } declare module '@react-native-firebase/_template_' { - import { ReactNativeFirebaseNamespace } from '@react-native-firebase/app-types'; - const FirebaseNamespaceExport: {} & ReactNativeFirebaseNamespace; - export const firebase = FirebaseNamespaceExport; - const _Template_DefaultExport: ReactNativeFirebaseModuleAndStatics< - _Template_.Module, - _Template_.Statics - >; - export default _Template_DefaultExport; + import ReactNativeFirebaseModule = ReactNativeFirebase.Module; + import FirebaseModuleWithStaticsAndApp = ReactNativeFirebase.FirebaseModuleWithStaticsAndApp; + + const firebaseNamedExport: {} & ReactNativeFirebaseModule; + export const firebase = firebaseNamedExport; + + const module: FirebaseModuleWithStaticsAndApp<_Template_.Module, _Template_.Statics>; + export default module; } -declare module '@react-native-firebase/app-types' { - interface ReactNativeFirebaseNamespace { - _template_: ReactNativeFirebaseModuleAndStatics<_Template_.Module, _Template_.Statics>; - } - - interface FirebaseApp { - _template_(): _Template_.Module; +/** + * Attach namespace to `firebase.` and `FirebaseApp.`. + */ +declare module '@react-native-firebase/app' { + namespace ReactNativeFirebase { + import FirebaseModuleWithStaticsAndApp = ReactNativeFirebase.FirebaseModuleWithStaticsAndApp; + interface Module { + _template_: FirebaseModuleWithStaticsAndApp<_Template_.Module, _Template_.Statics>; + } + interface FirebaseApp { + _template_(): _Template_.Module; + } } } diff --git a/scripts/_TEMPLATE_/type-test.ts b/scripts/_TEMPLATE_/type-test.ts new file mode 100644 index 00000000..b08e5562 --- /dev/null +++ b/scripts/_TEMPLATE_/type-test.ts @@ -0,0 +1,26 @@ +import firebase from '@react-native-firebase/app'; +import defaultExport, { firebase as firebaseFromModule } from '@react-native-firebase/_Template_'; + +// checks module exists at root +console.log(firebase._Template_().app.name); + +// checks module exists at app level +console.log(firebase.app()._Template_().app.name); + +// checks statics exist +console.log(firebase._Template_.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._Template_(firebase.app()).app.name); + +// checks default export supports app arg +console.log(defaultExport(firebase.app()).app.name);