Skip to content

Commit

Permalink
Merge pull request #788 from pheromonez/typescript-definitions-static…
Browse files Browse the repository at this point in the history
…-module-fix

[typings][Typescript] Fix TS definitions so modules can be accessed from the default export
  • Loading branch information
chrisbianca authored Jan 30, 2018
2 parents a81ea85 + 9019576 commit 66da0b9
Showing 1 changed file with 96 additions and 98 deletions.
194 changes: 96 additions & 98 deletions lib/index.d.ts
Original file line number Diff line number Diff line change
Expand Up @@ -5,99 +5,68 @@

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,
},
type FirebaseModuleAndStatics<M, S = {}> = {
(): M;
nativeModuleExists: boolean;
} & S

// Modules commented-out do not currently have type definitions
export class Firebase {
private constructor();
// admob: FirebaseModuleAndStatics<RNFirebase.admob.AdMob>;
analytics: FirebaseModuleAndStatics<RNFirebase.Analytics>;
auth: FirebaseModuleAndStatics<RNFirebase.auth.Auth, RNFirebase.auth.AuthStatics>;
// config: FirebaseModule<RNFirebase.config.Config>;
crash: FirebaseModuleAndStatics<RNFirebase.crash.Crash>;
database: FirebaseModuleAndStatics<RNFirebase.database.Database, RNFirebase.database.DatabaseStatics>;
fabric: {
crashlytics: FirebaseModuleAndStatics<RNFirebase.crashlytics.Crashlytics>;
};
firestore: FirebaseModuleAndStatics<RNFirebase.firestore.Firestore, RNFirebase.firestore.FirestoreStatics>;
links: FirebaseModuleAndStatics<RNFirebase.links.Links>;
messaging: FirebaseModuleAndStatics<RNFirebase.messaging.Messaging>;
// perf: FirebaseModuleAndStatics<RNFirebase.perf.Perf>;
storage: FirebaseModuleAndStatics<RNFirebase.storage.Storage>;
// utils: FirebaseModuleAndStatics<RNFirebase.utils.Utils>;
initializeApp(options: Firebase.Options, name: string): App;
app(name?: string): App;
apps(): App[];
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;

/**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.
*/
// 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;

/**
* 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;

/**
* Cloud Firestore is Firebase's new flagship database solution for mobile
* development, however as at the time of this writing (22 Jan 2018) it is
* still a beta product, and may not be as stable as Firebase Realtime
* Database. Comparison of the two products hers:
* https://firebase.google.com/docs/database/rtdb-vs-firestore
*/
static firestore: {
(): RNFirebase.firestore.Firestore;
} & RNFirebase.firestore.FirestoreStatics;

static fabric: {
crashlytics(): RNFirebase.crashlytics.Crashlytics;
database(): RNFirebase.database.Database;
fabric: {
crashlytics(): RNFirebase.crashlytics.Crashlytics,
};

apps: Array<string>;
googleApiAvailability: RNFirebase.GoogleApiAvailabilityType;

static initializeApp(options?: any | RNFirebase.configurationOptions, name?: string): FireBase;

static app(name?: string): FireBase;

[key: string]: any;
firestore(): RNFirebase.firestore.Firestore;
links(): RNFirebase.links.Links;
messaging(): RNFirebase.messaging.Messaging;
// perf(): RNFirebase.perf.Performance;
storage(): RNFirebase.storage.Storage;
// utils(): RNFirebase.utils.Utils;
}

namespace RNFirebase {
export namespace RNFirebase {
interface RnError extends Error {
code?: string;
}
Expand Down Expand Up @@ -495,6 +464,15 @@ declare module "react-native-firebase" {

update(values: Object, onComplete?: (a: RnError | null) => any): Promise<any>;
}

interface DatabaseStatics {
/** @see https://www.firebase.com/docs/java-api/javadoc/com/firebase/client/ServerValue.html#TIMESTAMP */
ServerValue: {
TIMESTAMP: {
[key: string]: string
}
}
}
}

/**
Expand Down Expand Up @@ -605,7 +583,7 @@ declare module "react-native-firebase" {
*
* @param forceRefresh: boolean - default to false
*/
getIdToken(forceRefresh: boolean?): Promise<string>
getIdToken(forceRefresh?: boolean): Promise<string>

/**
* Link the user with a 3rd party credential provider.
Expand Down Expand Up @@ -722,6 +700,11 @@ declare module "react-native-firebase" {
user: object | null
} | null;

type AuthProvider = {
PROVIDER_ID: string,
credential: (token: string, secret?: string) => AuthCredential,
};

interface Auth {
/**
* Returns the current Firebase authentication state.
Expand Down Expand Up @@ -839,6 +822,21 @@ declare module "react-native-firebase" {

[key: string]: any;
}

interface AuthStatics {
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;
};
}
}

namespace messaging {
Expand Down Expand Up @@ -1043,7 +1041,7 @@ 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;
}

/**
Expand Down Expand Up @@ -1098,7 +1096,7 @@ declare module "react-native-firebase" {
FieldValue: typeof FieldValue;
GeoPoint: typeof GeoPoint;
enableLogging(enabled: boolean): void;
};
}

interface CollectionReference {
readonly firestore: Firestore;
Expand All @@ -1113,7 +1111,7 @@ declare module "react-native-firebase" {
get(): Promise<QuerySnapshot>;
limit(limit: number): Query;
onSnapshot(onNext: Query.ObserverOnNext, onError?: Query.ObserverOnError): () => void;
onSnapshot(observer: Observer): () => 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;
Expand Down Expand Up @@ -1185,17 +1183,17 @@ declare module "react-native-firebase" {

class GeoPoint {
constructor(latitude: number, longitude: number);
get latitude(): number;
get longitude(): number;
readonly latitude: number;
readonly longitude: number;
}

class Path {
static fromName(name: string): Path;
constructor(pathComponents: string[]);
get id(): string | null;
get isDocument(): boolean;
get isCollection(): boolean;
get relativeName(): string;
readonly id: string | null;
readonly isDocument: boolean;
readonly isCollection: boolean;
readonly relativeName: string;
child(relativePath: string): Path;
parent(): Path | null;
}
Expand Down Expand Up @@ -1272,7 +1270,7 @@ declare module "react-native-firebase" {
readonly metadata: Types.SnapshotMetadata;
readonly query: Query;
readonly size: number;
forEach(callback: (snapshot: DocumentSnapshot) => any);
forEach(callback: (snapshot: DocumentSnapshot) => any): void;
}
namespace QuerySnapshot {
interface NativeData {
Expand Down

0 comments on commit 66da0b9

Please sign in to comment.