Skip to content

Typings: Add Observer interface and improve typings for Auth, Storage, and Messaging #56

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 1 commit into from
Jul 5, 2017
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
24 changes: 24 additions & 0 deletions externs/firebase-app-externs.js
Original file line number Diff line number Diff line change
Expand Up @@ -275,3 +275,27 @@ firebase.Promise.reject = function(error) {};
* @return {!firebase.Promise<!Array<*>>}
*/
firebase.Promise.all = function(values) {};

/**
* @template V, E
* @interface
**/
firebase.Observer = function() {};

/**
* @param {?V} value
*/
firebase.Observer.prototype.next = function(value) {};

/**
* @param {!E} error
*/
firebase.Observer.prototype.error = function(error) {};

firebase.Observer.prototype.complete = function() {};

/** @typedef {function(): void} */
firebase.CompleteFn;

/** @typedef {function(): void} */
firebase.Unsubscribe;
14 changes: 1 addition & 13 deletions externs/firebase-app-internal-externs.js
Original file line number Diff line number Diff line change
Expand Up @@ -35,23 +35,11 @@ firebase.INTERNAL.extendNamespace = function(props) {};

firebase.INTERNAL.resetNamespace = function() {};

/** @interface */
firebase.Observer = function() {};
/** @param {*} value */
firebase.Observer.prototype.next = function(value) {};
/** @param {!Error} error */
firebase.Observer.prototype.error = function(error) {};
firebase.Observer.prototype.complete = function() {};

/** @typedef {function(*): void} */
firebase.NextFn;

/** @typedef {function(!Error): void} */
firebase.ErrorFn;
/** @typedef {function(): void} */
firebase.CompleteFn;

/** @typedef {function(): void} */
firebase.Unsubscribe;

/**
* @typedef {function((firebase.NextFn|firebase.Observer)=,
Expand Down
12 changes: 6 additions & 6 deletions externs/firebase-auth-externs.js
Original file line number Diff line number Diff line change
Expand Up @@ -870,13 +870,13 @@ firebase.auth.Auth.prototype.fetchProvidersForEmail = function(email) {};
* }
* });
*
* @param {!Object|function(?firebase.User)}
* @param {!firebase.Observer<firebase.User, firebase.auth.Error>|function(?firebase.User)}
* nextOrObserver An observer object or a function triggered on change.
* @param {function(!firebase.auth.Error)=} error Optional A function
* triggered on auth error.
* @param {function()=} completed Optional A function triggered when the
* @param {firebase.CompleteFn=} completed Optional A function triggered when the
* observer is removed.
* @return {!function()} The unsubscribe function for the observer.
* @return {!firebase.Unsubscribe} The unsubscribe function for the observer.
*/
firebase.auth.Auth.prototype.onAuthStateChanged = function(
nextOrObserver, error, completed) {};
Expand All @@ -894,13 +894,13 @@ firebase.auth.Auth.prototype.onAuthStateChanged = function(
* }
* });
*
* @param {!Object|function(?firebase.User)}
* @param {!firebase.Observer<firebase.User, firebase.auth.Error>|function(?firebase.User)}
* nextOrObserver An observer object or a function triggered on change.
* @param {function(!firebase.auth.Error)=} error Optional A function
* triggered on auth error.
* @param {function()=} completed Optional A function triggered when the
* @param {firebase.CompleteFn=} completed Optional A function triggered when the
* observer is removed.
* @return {!function()} The unsubscribe function for the observer.
* @return {!firebase.Unsubscribe} The unsubscribe function for the observer.
*/
firebase.auth.Auth.prototype.onIdTokenChanged = function(
nextOrObserver, error, completed) {};
Expand Down
16 changes: 8 additions & 8 deletions externs/firebase-messaging-externs.js
Original file line number Diff line number Diff line change
Expand Up @@ -119,10 +119,10 @@ firebase.messaging.Messaging.prototype.getToken = function() {};
* has invalidated your existing token and you need to call `getToken()`
* to get a new token.
*
* @param {(!function(!Object)|!Object)} nextOrObserver This function, or
* observer object with `next` defined, is called when a token refresh
* has occurred.
* @return {function()} To stop listening for token
* @param {!firebase.Observer<Object, void>|!function(!Object)}
* nextOrObserver This function, or observer object with `next` defined,
* is called when a token refresh has occurred.
* @return {firebase.Unsubscribe} To stop listening for token
* refresh events execute this returned function.
*/
firebase.messaging.Messaging.prototype.onTokenRefresh =
Expand All @@ -136,10 +136,10 @@ firebase.messaging.Messaging.prototype.onTokenRefresh =
* NOTE: These events are dispatched when you have called
* `setBackgroundMessageHandler()` in your service worker.
*
* @param {(!function(!Object)|!Object)} nextOrObserver This function, or
* observer object with `next` defined, is called when a message is
* received and the user is currently viewing your page.
* @return {function()} To stop listening for messages
* @param {!firebase.Observer<Object, void>|!function(!Object)}
* nextOrObserver This function, or observer object with `next` defined,
* is called when a message is received and the user is currently viewing your page.
* @return {firebase.Unsubscribe} To stop listening for messages
* execute this returned function.
*/
firebase.messaging.Messaging.prototype.onMessage =
Expand Down
17 changes: 9 additions & 8 deletions externs/firebase-storage-externs.js
Original file line number Diff line number Diff line change
Expand Up @@ -583,18 +583,19 @@ firebase.storage.UploadTask.prototype.catch = function(onRejected) {};
* });
*
* @param {!firebase.storage.TaskEvent} event The event to listen for.
* @param {(?function(!Object)|!Object)=} nextOrObserver The `next` function,
* which gets called for each item in the event stream, or an observer
* object with some or all of these three properties (`next`, `error`,
* `complete`).
* @param {(?firebase.Observer<firebase.storage.UploadTaskSnapshot,Error>|
* ?function(!Object))=} nextOrObserver
* The `next` function, which gets called for each item in
* the event stream, or an observer object with some or all of these three
* properties (`next`, `error`, `complete`).
* @param {?function(!Error)=} error A function that gets called with an Error
* if the event stream ends due to an error.
* @param {?function()=} complete A function that gets called if the
* @param {?firebase.CompleteFn=} complete A function that gets called if the
* event stream ends normally.
* @return {
* !function()|
* !function(?function(!Object),?function(!Error)=,?function()=)
* :!function()}
* !firebase.Unsubscribe|
* !function(?function(!Object),?function(!Error)=,?firebase.CompleteFn=)
* :!firebase.Unsubscribe}
* If only the event argument is passed, returns a function you can use to
* add callbacks (see the examples above). If more than just the event
* argument is passed, returns a function you can call to unregister the
Expand Down
25 changes: 20 additions & 5 deletions typings/app.d.ts
Original file line number Diff line number Diff line change
Expand Up @@ -76,6 +76,20 @@ declare namespace firebase {
uid : string ;
}

type NextFn<V> = (value: V | null) => void;

type ErrorFn<E> = (error: E) => void;

type CompleteFn = () => void;

type Unsubscribe = () => void;

interface Observer<V, E> {
next?: NextFn<V>;
error?: ErrorFn<E>;
complete?: CompleteFn;
}

function app (name ? : string ) : firebase.app.App ;

var apps : ( firebase.app.App | null ) [] ;
Expand Down Expand Up @@ -123,8 +137,8 @@ declare namespace firebase.auth {
currentUser : firebase.User | null ;
fetchProvidersForEmail (email : string ) : firebase.Promise < any > ;
getRedirectResult ( ) : firebase.Promise < any > ;
onAuthStateChanged (nextOrObserver : Object , error ? : (a : firebase.auth.Error ) => any , completed ? : ( ) => any ) : ( ) => any ;
onIdTokenChanged (nextOrObserver : Object , error ? : (a : firebase.auth.Error ) => any , completed ? : ( ) => any ) : ( ) => any ;
onAuthStateChanged (nextOrObserver : firebase.Observer<firebase.User, firebase.auth.Error> | firebase.NextFn<firebase.User>, error ? : firebase.ErrorFn<firebase.auth.Error> , completed ? : firebase.CompleteFn ) : firebase.Unsubscribe ;
onIdTokenChanged (nextOrObserver : firebase.Observer<firebase.User, firebase.auth.Error> | firebase.NextFn<firebase.User>, error ? : firebase.ErrorFn<firebase.auth.Error> , completed ? : firebase.CompleteFn ) : firebase.Unsubscribe ;
sendPasswordResetEmail (email : string ) : firebase.Promise < any > ;
signInAndRetrieveDataWithCredential (credential : firebase.auth.AuthCredential ) : firebase.Promise < any > ;
signInAnonymously ( ) : firebase.Promise < any > ;
Expand Down Expand Up @@ -306,8 +320,8 @@ declare namespace firebase.messaging {
interface Messaging {
deleteToken (token : string ) : firebase.Promise < any > | null ;
getToken ( ) : firebase.Promise < any > | null ;
onMessage (nextOrObserver : Object ) : ( ) => any ;
onTokenRefresh (nextOrObserver : Object ) : ( ) => any ;
onMessage (nextOrObserver : firebase.Observer<Object, void> | firebase.NextFn<Object> ) : firebase.Unsubscribe ;
onTokenRefresh (nextOrObserver : firebase.Observer<Object, void> | firebase.NextFn<Object> ) : firebase.Unsubscribe ;
requestPermission ( ) : firebase.Promise < any > | null ;
setBackgroundMessageHandler (callback : (a : Object ) => any ) : any ;
useServiceWorker (registration : any ) : any ;
Expand Down Expand Up @@ -392,7 +406,8 @@ declare namespace firebase.storage {
interface UploadTask {
cancel ( ) : boolean ;
catch (onRejected : (a : Error ) => any ) : firebase.Promise < any > ;
on (event : firebase.storage.TaskEvent , nextOrObserver ? : null | Object , error ? : ( (a : Error ) => any ) | null , complete ? : ( ( ) => any ) | null ) : Function ;
on (event : firebase.storage.TaskEvent ) : ( nextOrObserver ? : firebase.Observer<firebase.storage.UploadTaskSnapshot, Error> | firebase.NextFn<firebase.storage.UploadTaskSnapshot> , error ? : firebase.ErrorFn<Error> | null , complete ? : firebase.CompleteFn | null ) => firebase.Unsubscribe ;
on (event : firebase.storage.TaskEvent , nextOrObserver ? : firebase.Observer<firebase.storage.UploadTaskSnapshot, Error> | firebase.NextFn<firebase.storage.UploadTaskSnapshot> , error ? : firebase.ErrorFn<Error> | null , complete ? : firebase.CompleteFn | null ) : firebase.Unsubscribe ;
pause ( ) : boolean ;
resume ( ) : boolean ;
snapshot : firebase.storage.UploadTaskSnapshot ;
Expand Down
25 changes: 20 additions & 5 deletions typings/firebase.d.ts
Original file line number Diff line number Diff line change
Expand Up @@ -76,6 +76,20 @@ declare namespace firebase {
uid : string ;
}

type NextFn<V> = (value: V | null) => void;

type ErrorFn<E> = (error: E) => void;

type CompleteFn = () => void;

type Unsubscribe = () => void;

interface Observer<V, E> {
next?: NextFn<V>;
error?: ErrorFn<E>;
complete?: CompleteFn;
}

function app (name ? : string ) : firebase.app.App ;

var apps : ( firebase.app.App | null ) [] ;
Expand Down Expand Up @@ -123,8 +137,8 @@ declare namespace firebase.auth {
currentUser : firebase.User | null ;
fetchProvidersForEmail (email : string ) : firebase.Promise < any > ;
getRedirectResult ( ) : firebase.Promise < any > ;
onAuthStateChanged (nextOrObserver : Object , error ? : (a : firebase.auth.Error ) => any , completed ? : ( ) => any ) : ( ) => any ;
onIdTokenChanged (nextOrObserver : Object , error ? : (a : firebase.auth.Error ) => any , completed ? : ( ) => any ) : ( ) => any ;
onAuthStateChanged (nextOrObserver : firebase.Observer<firebase.User, firebase.auth.Error> | firebase.NextFn<firebase.User>, error ? : firebase.ErrorFn<firebase.auth.Error> , completed ? : firebase.CompleteFn ) : firebase.Unsubscribe ;
onIdTokenChanged (nextOrObserver : firebase.Observer<firebase.User, firebase.auth.Error> | firebase.NextFn<firebase.User>, error ? : firebase.ErrorFn<firebase.auth.Error> , completed ? : firebase.CompleteFn ) : firebase.Unsubscribe ;
sendPasswordResetEmail (email : string ) : firebase.Promise < any > ;
signInAndRetrieveDataWithCredential (credential : firebase.auth.AuthCredential ) : firebase.Promise < any > ;
signInAnonymously ( ) : firebase.Promise < any > ;
Expand Down Expand Up @@ -306,8 +320,8 @@ declare namespace firebase.messaging {
interface Messaging {
deleteToken (token : string ) : firebase.Promise < any > | null ;
getToken ( ) : firebase.Promise < any > | null ;
onMessage (nextOrObserver : Object ) : ( ) => any ;
onTokenRefresh (nextOrObserver : Object ) : ( ) => any ;
onMessage (nextOrObserver : firebase.Observer<Object, void> | firebase.NextFn<Object> ) : firebase.Unsubscribe ;
onTokenRefresh (nextOrObserver : firebase.Observer<Object, void> | firebase.NextFn<Object> ) : firebase.Unsubscribe ;
requestPermission ( ) : firebase.Promise < any > | null ;
setBackgroundMessageHandler (callback : (a : Object ) => any ) : any ;
useServiceWorker (registration : any ) : any ;
Expand Down Expand Up @@ -392,7 +406,8 @@ declare namespace firebase.storage {
interface UploadTask {
cancel ( ) : boolean ;
catch (onRejected : (a : Error ) => any ) : firebase.Promise < any > ;
on (event : firebase.storage.TaskEvent , nextOrObserver ? : null | Object , error ? : ( (a : Error ) => any ) | null , complete ? : ( ( ) => any ) | null ) : Function ;
on (event : firebase.storage.TaskEvent ) : ( nextOrObserver ? : firebase.Observer<firebase.storage.UploadTaskSnapshot, Error> | firebase.NextFn<firebase.storage.UploadTaskSnapshot> , error ? : firebase.ErrorFn<Error> | null , complete ? : firebase.CompleteFn | null ) => firebase.Unsubscribe ;
on (event : firebase.storage.TaskEvent , nextOrObserver ? : firebase.Observer<firebase.storage.UploadTaskSnapshot, Error> | firebase.NextFn<firebase.storage.UploadTaskSnapshot> , error ? : firebase.ErrorFn<Error> | null , complete ? : firebase.CompleteFn | null ) : firebase.Unsubscribe ;
pause ( ) : boolean ;
resume ( ) : boolean ;
snapshot : firebase.storage.UploadTaskSnapshot ;
Expand Down