@@ -34,10 +34,12 @@ let _staticInstance: RepoManager;
34
34
*/
35
35
export class RepoManager {
36
36
/**
37
- * @private {!Object.<string, ! Repo>}
37
+ * @private {!Object.<string, Object<string, !fb.core. Repo> >}
38
38
*/
39
39
private repos_ : {
40
- [ name : string ] : Repo ;
40
+ [ appName : string ] : {
41
+ [ dbUrl : string ] : Repo ;
42
+ } ;
41
43
} = { } ;
42
44
43
45
/**
@@ -55,14 +57,18 @@ export class RepoManager {
55
57
56
58
// TODO(koss): Remove these functions unless used in tests?
57
59
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
+ }
60
64
}
61
65
}
62
66
63
67
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
+ }
66
72
}
67
73
}
68
74
@@ -72,8 +78,8 @@ export class RepoManager {
72
78
* @param {!FirebaseApp } app
73
79
* @return {!Database }
74
80
*/
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 ] ;
77
83
if ( dbUrl === undefined ) {
78
84
fatal (
79
85
"Can't determine Firebase Database URL. Be sure to include " +
@@ -104,12 +110,15 @@ export class RepoManager {
104
110
* @param {!Repo } repo
105
111
*/
106
112
deleteRepo ( repo : Repo ) {
113
+ const appRepos = safeGet ( this . repos_ , repo . app . name ) ;
107
114
// 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
+ ) ;
110
119
}
111
120
repo . interrupt ( ) ;
112
- delete this . repos_ [ repo . app . name ] ;
121
+ delete appRepos [ repo . repoInfo_ . toURLString ( ) ] ;
113
122
}
114
123
115
124
/**
@@ -121,12 +130,21 @@ export class RepoManager {
121
130
* @return {!Repo } The Repo object for the specified server / repoName.
122
131
*/
123
132
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 ( ) ) ;
125
141
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
+ ) ;
127
145
}
128
146
repo = new Repo ( repoInfo , this . useRestClient_ , app ) ;
129
- this . repos_ [ app . name ] = repo ;
147
+ appRepos [ repoInfo . toURLString ( ) ] = repo ;
130
148
131
149
return repo ;
132
150
}
0 commit comments