Skip to content

Commit 235f061

Browse files
committed
fix(core): improve typings with new Observer interface
1 parent bc94aae commit 235f061

7 files changed

+100
-53
lines changed

externs/firebase-app-externs.js

+35
Original file line numberDiff line numberDiff line change
@@ -273,3 +273,38 @@ firebase.Promise.reject = function(error) {};
273273
* @return {!firebase.Promise<!Array<*>>}
274274
*/
275275
firebase.Promise.all = function(values) {};
276+
277+
/** @interface */
278+
firebase.Observer = function() {};
279+
280+
/**
281+
* @template V
282+
* @param {?V} value
283+
*/
284+
firebase.Observer.prototype.next = function(value) {};
285+
286+
/**
287+
* @template E
288+
* @param {!E} error
289+
*/
290+
firebase.Observer.prototype.error = function(error) {};
291+
292+
firebase.Observer.prototype.complete = function() {};
293+
294+
/**
295+
* @template V
296+
* @typedef {function(?V): void}
297+
*/
298+
firebase.NextFn;
299+
300+
/**
301+
* @template E
302+
* @typedef {function(!E): void}
303+
*/
304+
firebase.ErrorFn;
305+
306+
/** @typedef {function(): void} */
307+
firebase.CompleteFn;
308+
309+
/** @typedef {function(): void} */
310+
firebase.Unsubscribe;

externs/firebase-app-internal-externs.js

-18
Original file line numberDiff line numberDiff line change
@@ -35,24 +35,6 @@ firebase.INTERNAL.extendNamespace = function(props) {};
3535

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

38-
/** @interface */
39-
firebase.Observer = function() {};
40-
/** @param {*} value */
41-
firebase.Observer.prototype.next = function(value) {};
42-
/** @param {!Error} error */
43-
firebase.Observer.prototype.error = function(error) {};
44-
firebase.Observer.prototype.complete = function() {};
45-
46-
/** @typedef {function(*): void} */
47-
firebase.NextFn;
48-
/** @typedef {function(!Error): void} */
49-
firebase.ErrorFn;
50-
/** @typedef {function(): void} */
51-
firebase.CompleteFn;
52-
53-
/** @typedef {function(): void} */
54-
firebase.Unsubscribe;
55-
5638
/**
5739
* @typedef {function((firebase.NextFn|firebase.Observer)=,
5840
* firebase.ErrorFn=,

externs/firebase-auth-externs.js

+8-8
Original file line numberDiff line numberDiff line change
@@ -870,13 +870,13 @@ firebase.auth.Auth.prototype.fetchProvidersForEmail = function(email) {};
870870
* }
871871
* });
872872
*
873-
* @param {!Object|function(?firebase.User)}
873+
* @param {!firebase.Observer<firebase.User, firebase.auth.Error>|firebase.NextFn<firebase.User>}
874874
* nextOrObserver An observer object or a function triggered on change.
875-
* @param {function(!firebase.auth.Error)=} error Optional A function
875+
* @param {firebase.ErrorFn<firebase.auth.Error>=} error Optional A function
876876
* triggered on auth error.
877-
* @param {function()=} completed Optional A function triggered when the
877+
* @param {firebase.CompleteFn=} completed Optional A function triggered when the
878878
* observer is removed.
879-
* @return {!function()} The unsubscribe function for the observer.
879+
* @return {!firebase.Unsubscribe} The unsubscribe function for the observer.
880880
*/
881881
firebase.auth.Auth.prototype.onAuthStateChanged = function(
882882
nextOrObserver, error, completed) {};
@@ -894,13 +894,13 @@ firebase.auth.Auth.prototype.onAuthStateChanged = function(
894894
* }
895895
* });
896896
*
897-
* @param {!Object|function(?firebase.User)}
897+
* @param {!firebase.Observer<firebase.User, firebase.auth.Error>|firebase.NextFn<firebase.User>}
898898
* nextOrObserver An observer object or a function triggered on change.
899-
* @param {function(!firebase.auth.Error)=} error Optional A function
899+
* @param {firebase.ErrorFn<firebase.auth.Error>=} error Optional A function
900900
* triggered on auth error.
901-
* @param {function()=} completed Optional A function triggered when the
901+
* @param {firebase.CompleteFn=} completed Optional A function triggered when the
902902
* observer is removed.
903-
* @return {!function()} The unsubscribe function for the observer.
903+
* @return {!firebase.Unsubscribe} The unsubscribe function for the observer.
904904
*/
905905
firebase.auth.Auth.prototype.onIdTokenChanged = function(
906906
nextOrObserver, error, completed) {};

externs/firebase-messaging-externs.js

+8-8
Original file line numberDiff line numberDiff line change
@@ -119,10 +119,10 @@ firebase.messaging.Messaging.prototype.getToken = function() {};
119119
* has invalidated your existing token and you need to call `getToken()`
120120
* to get a new token.
121121
*
122-
* @param {(!function(!Object)|!Object)} nextOrObserver This function, or
123-
* observer object with `next` defined, is called when a token refresh
124-
* has occurred.
125-
* @return {function()} To stop listening for token
122+
* @param {!firebase.Observer<Object, void>|!firebase.NextFn<Object>}
123+
* nextOrObserver This function, or observer object with `next` defined,
124+
* is called when a token refresh has occurred.
125+
* @return {firebase.Unsubscribe} To stop listening for token
126126
* refresh events execute this returned function.
127127
*/
128128
firebase.messaging.Messaging.prototype.onTokenRefresh =
@@ -136,10 +136,10 @@ firebase.messaging.Messaging.prototype.onTokenRefresh =
136136
* NOTE: These events are dispatched when you have called
137137
* `setBackgroundMessageHandler()` in your service worker.
138138
*
139-
* @param {(!function(!Object)|!Object)} nextOrObserver This function, or
140-
* observer object with `next` defined, is called when a message is
141-
* received and the user is currently viewing your page.
142-
* @return {function()} To stop listening for messages
139+
* @param {!firebase.Observer<Object, void>|!firebase.NextFn<Object>}
140+
* nextOrObserver This function, or observer object with `next` defined,
141+
* is called when a message is received and the user is currently viewing your page.
142+
* @return {firebase.Unsubscribe} To stop listening for messages
143143
* execute this returned function.
144144
*/
145145
firebase.messaging.Messaging.prototype.onMessage =

externs/firebase-storage-externs.js

+9-9
Original file line numberDiff line numberDiff line change
@@ -583,18 +583,18 @@ firebase.storage.UploadTask.prototype.catch = function(onRejected) {};
583583
* });
584584
*
585585
* @param {!firebase.storage.TaskEvent} event The event to listen for.
586-
* @param {(?function(!Object)|!Object)=} nextOrObserver The `next` function,
587-
* which gets called for each item in the event stream, or an observer
588-
* object with some or all of these three properties (`next`, `error`,
589-
* `complete`).
590-
* @param {?function(!Error)=} error A function that gets called with an Error
586+
* @param {(?firebase.Observer<firebase.storage.UploadTaskSnapshot,Error>|!firebase.NextFn<firebase.storage.UploadTaskSnapshot>)=}
587+
* nextOrObserver The `next` function, which gets called for each item in
588+
* the event stream, or an observer object with some or all of these three
589+
* properties (`next`, `error`, `complete`).
590+
* @param {?firebase.ErrorFn<Error>=} error A function that gets called with an Error
591591
* if the event stream ends due to an error.
592-
* @param {?function()=} complete A function that gets called if the
592+
* @param {?firebase.CompleteFn=} complete A function that gets called if the
593593
* event stream ends normally.
594594
* @return {
595-
* !function()|
596-
* !function(?function(!Object),?function(!Error)=,?function()=)
597-
* :!function()}
595+
* !firebase.Unsubscribe|
596+
* !function(?firebase.NextFn<firebase.storage.UploadTaskSnapshot>=,
597+
* ?firebase.ErrorFn<Error>=,?firebase.CompleteFn=) :!firebase.Unsubscribe}
598598
* If only the event argument is passed, returns a function you can use to
599599
* add callbacks (see the examples above). If more than just the event
600600
* argument is passed, returns a function you can call to unregister the

typings/app.d.ts

+20-5
Original file line numberDiff line numberDiff line change
@@ -76,6 +76,20 @@ declare namespace firebase {
7676
uid : string ;
7777
}
7878

79+
type NextFn<V> = (value: V | null) => void;
80+
81+
type ErrorFn<E> = (error: E) => void;
82+
83+
type CompleteFn = () => void;
84+
85+
type Unsubscribe = () => void;
86+
87+
interface Observer<V, E> {
88+
next?: NextFn<V>;
89+
error?: ErrorFn<E>;
90+
complete?: CompleteFn;
91+
}
92+
7993
function app (name ? : string ) : firebase.app.App ;
8094

8195
var apps : ( firebase.app.App | null ) [] ;
@@ -123,8 +137,8 @@ declare namespace firebase.auth {
123137
currentUser : firebase.User | null ;
124138
fetchProvidersForEmail (email : string ) : firebase.Promise < any > ;
125139
getRedirectResult ( ) : firebase.Promise < any > ;
126-
onAuthStateChanged (nextOrObserver : Object , error ? : (a : firebase.auth.Error ) => any , completed ? : ( ) => any ) : ( ) => any ;
127-
onIdTokenChanged (nextOrObserver : Object , error ? : (a : firebase.auth.Error ) => any , completed ? : ( ) => any ) : ( ) => any ;
140+
onAuthStateChanged (nextOrObserver : firebase.Observer<firebase.User, firebase.auth.Error> | firebase.NextFn<firebase.User>, error ? : firebase.ErrorFn<firebase.auth.Error> , completed ? : firebase.CompleteFn ) : firebase.Unsubscribe ;
141+
onIdTokenChanged (nextOrObserver : firebase.Observer<firebase.User, firebase.auth.Error> | firebase.NextFn<firebase.User>, error ? : firebase.ErrorFn<firebase.auth.Error> , completed ? : firebase.CompleteFn ) : firebase.Unsubscribe ;
128142
sendPasswordResetEmail (email : string ) : firebase.Promise < any > ;
129143
signInAndRetrieveDataWithCredential (credential : firebase.auth.AuthCredential ) : firebase.Promise < any > ;
130144
signInAnonymously ( ) : firebase.Promise < any > ;
@@ -306,8 +320,8 @@ declare namespace firebase.messaging {
306320
interface Messaging {
307321
deleteToken (token : string ) : firebase.Promise < any > | null ;
308322
getToken ( ) : firebase.Promise < any > | null ;
309-
onMessage (nextOrObserver : Object ) : ( ) => any ;
310-
onTokenRefresh (nextOrObserver : Object ) : ( ) => any ;
323+
onMessage (nextOrObserver : firebase.Observer<Object, void> | firebase.NextFn<Object> ) : firebase.Unsubscribe ;
324+
onTokenRefresh (nextOrObserver : firebase.Observer<Object, void> | firebase.NextFn<Object> ) : firebase.Unsubscribe ;
311325
requestPermission ( ) : firebase.Promise < any > | null ;
312326
setBackgroundMessageHandler (callback : (a : Object ) => any ) : any ;
313327
useServiceWorker (registration : any ) : any ;
@@ -392,7 +406,8 @@ declare namespace firebase.storage {
392406
interface UploadTask {
393407
cancel ( ) : boolean ;
394408
catch (onRejected : (a : Error ) => any ) : firebase.Promise < any > ;
395-
on (event : firebase.storage.TaskEvent , nextOrObserver ? : null | Object , error ? : ( (a : Error ) => any ) | null , complete ? : ( ( ) => any ) | null ) : Function ;
409+
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 ;
410+
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 ;
396411
pause ( ) : boolean ;
397412
resume ( ) : boolean ;
398413
snapshot : firebase.storage.UploadTaskSnapshot ;

typings/firebase.d.ts

+20-5
Original file line numberDiff line numberDiff line change
@@ -76,6 +76,20 @@ declare namespace firebase {
7676
uid : string ;
7777
}
7878

79+
type NextFn<V> = (value: V | null) => void;
80+
81+
type ErrorFn<E> = (error: E) => void;
82+
83+
type CompleteFn = () => void;
84+
85+
type Unsubscribe = () => void;
86+
87+
interface Observer<V, E> {
88+
next?: NextFn<V>;
89+
error?: ErrorFn<E>;
90+
complete?: CompleteFn;
91+
}
92+
7993
function app (name ? : string ) : firebase.app.App ;
8094

8195
var apps : ( firebase.app.App | null ) [] ;
@@ -123,8 +137,8 @@ declare namespace firebase.auth {
123137
currentUser : firebase.User | null ;
124138
fetchProvidersForEmail (email : string ) : firebase.Promise < any > ;
125139
getRedirectResult ( ) : firebase.Promise < any > ;
126-
onAuthStateChanged (nextOrObserver : Object , error ? : (a : firebase.auth.Error ) => any , completed ? : ( ) => any ) : ( ) => any ;
127-
onIdTokenChanged (nextOrObserver : Object , error ? : (a : firebase.auth.Error ) => any , completed ? : ( ) => any ) : ( ) => any ;
140+
onAuthStateChanged (nextOrObserver : firebase.Observer<firebase.User, firebase.auth.Error> | firebase.NextFn<firebase.User>, error ? : firebase.ErrorFn<firebase.auth.Error> , completed ? : firebase.CompleteFn ) : firebase.Unsubscribe ;
141+
onIdTokenChanged (nextOrObserver : firebase.Observer<firebase.User, firebase.auth.Error> | firebase.NextFn<firebase.User>, error ? : firebase.ErrorFn<firebase.auth.Error> , completed ? : firebase.CompleteFn ) : firebase.Unsubscribe ;
128142
sendPasswordResetEmail (email : string ) : firebase.Promise < any > ;
129143
signInAndRetrieveDataWithCredential (credential : firebase.auth.AuthCredential ) : firebase.Promise < any > ;
130144
signInAnonymously ( ) : firebase.Promise < any > ;
@@ -306,8 +320,8 @@ declare namespace firebase.messaging {
306320
interface Messaging {
307321
deleteToken (token : string ) : firebase.Promise < any > | null ;
308322
getToken ( ) : firebase.Promise < any > | null ;
309-
onMessage (nextOrObserver : Object ) : ( ) => any ;
310-
onTokenRefresh (nextOrObserver : Object ) : ( ) => any ;
323+
onMessage (nextOrObserver : firebase.Observer<Object, void> | firebase.NextFn<Object> ) : firebase.Unsubscribe ;
324+
onTokenRefresh (nextOrObserver : firebase.Observer<Object, void> | firebase.NextFn<Object> ) : firebase.Unsubscribe ;
311325
requestPermission ( ) : firebase.Promise < any > | null ;
312326
setBackgroundMessageHandler (callback : (a : Object ) => any ) : any ;
313327
useServiceWorker (registration : any ) : any ;
@@ -392,7 +406,8 @@ declare namespace firebase.storage {
392406
interface UploadTask {
393407
cancel ( ) : boolean ;
394408
catch (onRejected : (a : Error ) => any ) : firebase.Promise < any > ;
395-
on (event : firebase.storage.TaskEvent , nextOrObserver ? : null | Object , error ? : ( (a : Error ) => any ) | null , complete ? : ( ( ) => any ) | null ) : Function ;
409+
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 ;
410+
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 ;
396411
pause ( ) : boolean ;
397412
resume ( ) : boolean ;
398413
snapshot : firebase.storage.UploadTaskSnapshot ;

0 commit comments

Comments
 (0)