From 9620f520418d542be066939f3804d060334b7f5f Mon Sep 17 00:00:00 2001 From: Maneesh Tewani Date: Tue, 13 Dec 2022 12:33:14 -0800 Subject: [PATCH 1/4] Fixed issue where we call connectDatabaseToEmulator twice --- packages/database/src/api/Database.ts | 8 +++++--- packages/database/test/exp/integration.test.ts | 17 +++++++++++++++++ 2 files changed, 22 insertions(+), 3 deletions(-) diff --git a/packages/database/src/api/Database.ts b/packages/database/src/api/Database.ts index 6c367a87c44..5748c4ef681 100644 --- a/packages/database/src/api/Database.ts +++ b/packages/database/src/api/Database.ts @@ -320,9 +320,11 @@ export function getDatabase( const db = _getProvider(app, 'database').getImmediate({ identifier: url }) as Database; - const emulator = getDefaultEmulatorHostnameAndPort('database'); - if (emulator) { - connectDatabaseEmulator(db, ...emulator); + if(!db._instanceStarted) { + const emulator = getDefaultEmulatorHostnameAndPort('database'); + if (emulator) { + connectDatabaseEmulator(db, ...emulator); + } } return db; } diff --git a/packages/database/test/exp/integration.test.ts b/packages/database/test/exp/integration.test.ts index 3be79d5c447..9e7891baaad 100644 --- a/packages/database/test/exp/integration.test.ts +++ b/packages/database/test/exp/integration.test.ts @@ -77,6 +77,23 @@ describe('Database@exp Tests', () => { const db = getDatabase(defaultApp); expect(db).to.be.ok; }); + it.only('doesn\'t try to connect to emulator after database has already started', async () => { + const db = getDatabase(defaultApp); + const r = ref(db, '.info/connected'); + const deferred = new Deferred(); + onValue(r, (snapshot) => { + if(snapshot.val()) { + deferred.resolve(); + } + }); + await deferred.promise; + process.env.__FIREBASE_DEFAULTS__ = JSON.stringify({ + emulatorHosts: { + database: 'localhost:9000' + }, + }); + expect(() => getDatabase(defaultApp)).to.not.throw(); + }); it('Can get database with custom URL', () => { const db = getDatabase(defaultApp, 'http://foo.bar.com'); From 39bb9d1bbaf396400431f8d01b14fe9c9a906bb6 Mon Sep 17 00:00:00 2001 From: Maneesh Tewani Date: Tue, 13 Dec 2022 12:37:12 -0800 Subject: [PATCH 2/4] Removed only and ran prettier --- packages/database/src/api/Database.ts | 2 +- packages/database/test/exp/integration.test.ts | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/packages/database/src/api/Database.ts b/packages/database/src/api/Database.ts index 5748c4ef681..f1a27492442 100644 --- a/packages/database/src/api/Database.ts +++ b/packages/database/src/api/Database.ts @@ -320,7 +320,7 @@ export function getDatabase( const db = _getProvider(app, 'database').getImmediate({ identifier: url }) as Database; - if(!db._instanceStarted) { + if (!db._instanceStarted) { const emulator = getDefaultEmulatorHostnameAndPort('database'); if (emulator) { connectDatabaseEmulator(db, ...emulator); diff --git a/packages/database/test/exp/integration.test.ts b/packages/database/test/exp/integration.test.ts index 9e7891baaad..09e98acecee 100644 --- a/packages/database/test/exp/integration.test.ts +++ b/packages/database/test/exp/integration.test.ts @@ -77,12 +77,12 @@ describe('Database@exp Tests', () => { const db = getDatabase(defaultApp); expect(db).to.be.ok; }); - it.only('doesn\'t try to connect to emulator after database has already started', async () => { + it("doesn't try to connect to emulator after database has already started", async () => { const db = getDatabase(defaultApp); const r = ref(db, '.info/connected'); const deferred = new Deferred(); - onValue(r, (snapshot) => { - if(snapshot.val()) { + onValue(r, snapshot => { + if (snapshot.val()) { deferred.resolve(); } }); @@ -90,7 +90,7 @@ describe('Database@exp Tests', () => { process.env.__FIREBASE_DEFAULTS__ = JSON.stringify({ emulatorHosts: { database: 'localhost:9000' - }, + } }); expect(() => getDatabase(defaultApp)).to.not.throw(); }); From 93c377135c6fc21a193c887604df4ff1a7d169a3 Mon Sep 17 00:00:00 2001 From: Maneesh Tewani Date: Tue, 13 Dec 2022 13:12:27 -0800 Subject: [PATCH 3/4] Create nervous-ads-pretend.md --- .changeset/nervous-ads-pretend.md | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 .changeset/nervous-ads-pretend.md diff --git a/.changeset/nervous-ads-pretend.md b/.changeset/nervous-ads-pretend.md new file mode 100644 index 00000000000..b375717da3e --- /dev/null +++ b/.changeset/nervous-ads-pretend.md @@ -0,0 +1,5 @@ +--- +"@firebase/database": patch +--- + +Fixed issue where connectDatabaseToEmulator can be called twice during a hot reload From 9fb2ae1e1a07204a7ee663340ff67a47708a97e1 Mon Sep 17 00:00:00 2001 From: Maneesh Tewani Date: Tue, 13 Dec 2022 13:29:28 -0800 Subject: [PATCH 4/4] Removed firebase defaults entry --- packages/database/test/exp/integration.test.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/packages/database/test/exp/integration.test.ts b/packages/database/test/exp/integration.test.ts index 09e98acecee..adf5094f222 100644 --- a/packages/database/test/exp/integration.test.ts +++ b/packages/database/test/exp/integration.test.ts @@ -93,6 +93,7 @@ describe('Database@exp Tests', () => { } }); expect(() => getDatabase(defaultApp)).to.not.throw(); + delete process.env.__FIREBASE_DEFAULTS__; }); it('Can get database with custom URL', () => {