Skip to content

Commit 52ff208

Browse files
committed
fix(core): improve typings with new Observer interface
1 parent 9a6f0db commit 52ff208

7 files changed

+87
-45
lines changed

externs/firebase-app-externs.js

+23
Original file line numberDiff line numberDiff line change
@@ -275,3 +275,26 @@ firebase.Promise.reject = function(error) {};
275275
* @return {!firebase.Promise<!Array<*>>}
276276
*/
277277
firebase.Promise.all = function(values) {};
278+
279+
/** @interface */
280+
firebase.Observer = function() {};
281+
282+
/**
283+
* @template V
284+
* @param {?V} value
285+
*/
286+
firebase.Observer.prototype.next = function(value) {};
287+
288+
/**
289+
* @template E
290+
* @param {!E} error
291+
*/
292+
firebase.Observer.prototype.error = function(error) {};
293+
294+
firebase.Observer.prototype.complete = function() {};
295+
296+
/** @typedef {function(): void} */
297+
firebase.CompleteFn;
298+
299+
/** @typedef {function(): void} */
300+
firebase.Unsubscribe;

externs/firebase-app-internal-externs.js

+1-13
Original file line numberDiff line numberDiff line change
@@ -35,23 +35,11 @@ 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-
4638
/** @typedef {function(*): void} */
4739
firebase.NextFn;
40+
4841
/** @typedef {function(!Error): void} */
4942
firebase.ErrorFn;
50-
/** @typedef {function(): void} */
51-
firebase.CompleteFn;
52-
53-
/** @typedef {function(): void} */
54-
firebase.Unsubscribe;
5543

5644
/**
5745
* @typedef {function((firebase.NextFn|firebase.Observer)=,

externs/firebase-auth-externs.js

+6-6
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>|function(?firebase.User)}
874874
* nextOrObserver An observer object or a function triggered on change.
875875
* @param {function(!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>|function(?firebase.User)}
898898
* nextOrObserver An observer object or a function triggered on change.
899899
* @param {function(!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>|!function(!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>|!function(!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-8
Original file line numberDiff line numberDiff line change
@@ -583,18 +583,19 @@ 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`).
586+
* @param {(?firebase.Observer<firebase.storage.UploadTaskSnapshot,Error>|
587+
* ?function(!Object))=} nextOrObserver
588+
* The `next` function, which gets called for each item in
589+
* the event stream, or an observer object with some or all of these three
590+
* properties (`next`, `error`, `complete`).
590591
* @param {?function(!Error)=} error A function that gets called with an Error
591592
* if the event stream ends due to an error.
592-
* @param {?function()=} complete A function that gets called if the
593+
* @param {?firebase.CompleteFn=} complete A function that gets called if the
593594
* event stream ends normally.
594595
* @return {
595-
* !function()|
596-
* !function(?function(!Object),?function(!Error)=,?function()=)
597-
* :!function()}
596+
* !firebase.Unsubscribe|
597+
* !function(?function(!Object),?function(!Error)=,?firebase.CompleteFn=)
598+
* :!firebase.Unsubscribe}
598599
* If only the event argument is passed, returns a function you can use to
599600
* add callbacks (see the examples above). If more than just the event
600601
* 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)