@@ -34,10 +34,12 @@ let _staticInstance: RepoManager;
3434 */
3535export class RepoManager {
3636 /**
37- * @private {!Object.<string, ! Repo>}
37+ * @private {!Object.<string, Object<string, !fb.core. Repo> >}
3838 */
3939 private repos_ : {
40- [ name : string ] : Repo ;
40+ [ appName : string ] : {
41+ [ dbUrl : string ] : Repo ;
42+ } ;
4143 } = { } ;
4244
4345 /**
@@ -55,14 +57,18 @@ export class RepoManager {
5557
5658 // TODO(koss): Remove these functions unless used in tests?
5759 interrupt ( ) {
58- for ( const repo in this . repos_ ) {
59- this . repos_ [ repo ] . interrupt ( ) ;
60+ for ( const appName in this . repos_ ) {
61+ for ( const dbUrl in this . repos_ [ appName ] ) {
62+ this . repos_ [ appName ] [ dbUrl ] . interrupt ( ) ;
63+ }
6064 }
6165 }
6266
6367 resume ( ) {
64- for ( const repo in this . repos_ ) {
65- this . repos_ [ repo ] . resume ( ) ;
68+ for ( const appName in this . repos_ ) {
69+ for ( const dbUrl in this . repos_ [ appName ] ) {
70+ this . repos_ [ appName ] [ dbUrl ] . resume ( ) ;
71+ }
6672 }
6773 }
6874
@@ -72,8 +78,8 @@ export class RepoManager {
7278 * @param {!FirebaseApp } app
7379 * @return {!Database }
7480 */
75- databaseFromApp ( app : FirebaseApp ) : Database {
76- const dbUrl : string = app . options [ DATABASE_URL_OPTION ] ;
81+ databaseFromApp ( app : FirebaseApp , url ?: string ) : Database {
82+ const dbUrl : string = url || app . options [ DATABASE_URL_OPTION ] ;
7783 if ( dbUrl === undefined ) {
7884 fatal (
7985 "Can't determine Firebase Database URL. Be sure to include " +
@@ -104,12 +110,15 @@ export class RepoManager {
104110 * @param {!Repo } repo
105111 */
106112 deleteRepo ( repo : Repo ) {
113+ const appRepos = safeGet ( this . repos_ , repo . app . name ) ;
107114 // This should never happen...
108- if ( safeGet ( this . repos_ , repo . app . name ) !== repo ) {
109- fatal ( 'Database ' + repo . app . name + ' has already been deleted.' ) ;
115+ if ( ! appRepos || safeGet ( appRepos , repo . repoInfo_ . toURLString ( ) ) !== repo ) {
116+ fatal (
117+ `Database ${ repo . app . name } (${ repo . repoInfo_ } ) has already been deleted.`
118+ ) ;
110119 }
111120 repo . interrupt ( ) ;
112- delete this . repos_ [ repo . app . name ] ;
121+ delete appRepos [ repo . repoInfo_ . toURLString ( ) ] ;
113122 }
114123
115124 /**
@@ -121,12 +130,21 @@ export class RepoManager {
121130 * @return {!Repo } The Repo object for the specified server / repoName.
122131 */
123132 createRepo ( repoInfo : RepoInfo , app : FirebaseApp ) : Repo {
124- let repo = safeGet ( this . repos_ , app . name ) ;
133+ let appRepos = safeGet ( this . repos_ , app . name ) ;
134+
135+ if ( ! appRepos ) {
136+ appRepos = { } ;
137+ this . repos_ [ app . name ] = appRepos ;
138+ }
139+
140+ let repo = safeGet ( appRepos , repoInfo . toURLString ( ) ) ;
125141 if ( repo ) {
126- fatal ( 'FIREBASE INTERNAL ERROR: Database initialized multiple times.' ) ;
142+ fatal (
143+ 'Database initialized multiple times. Please make sure the format of the database URL matches with each database() call.'
144+ ) ;
127145 }
128146 repo = new Repo ( repoInfo , this . useRestClient_ , app ) ;
129- this . repos_ [ app . name ] = repo ;
147+ appRepos [ repoInfo . toURLString ( ) ] = repo ;
130148
131149 return repo ;
132150 }
0 commit comments