From f0ddce4f20271af758a900f2e29cecd3cfd608b1 Mon Sep 17 00:00:00 2001 From: Sam Date: Thu, 31 Dec 2020 12:22:00 +0000 Subject: [PATCH 1/3] Fix emulated database URL parse issue --- package.json | 1 + src/apps.ts | 4 ++++ src/providers/database.ts | 11 +++++++++-- 3 files changed, 14 insertions(+), 2 deletions(-) diff --git a/package.json b/package.json index 8f4bb09c5..22b6562a9 100644 --- a/package.json +++ b/package.json @@ -31,6 +31,7 @@ "build:pack": "rm -rf lib && npm install && tsc -p tsconfig.release.json && npm pack", "build:release": "npm install --production && npm install --no-save typescript firebase-admin && tsc -p tsconfig.release.json", "build": "tsc -p tsconfig.release.json", + "build:watch": "tsc -p tsconfig.release.json -w", "format": "prettier --check '**/*.{json,md,ts,yml,yaml}'", "format:fix": "prettier --write '**/*.{json,md,ts,yml,yaml}'", "lint": "tslint --config tslint.json --project tsconfig.json ", diff --git a/src/apps.ts b/src/apps.ts index 163cd4795..1c7ba9f4e 100644 --- a/src/apps.ts +++ b/src/apps.ts @@ -125,6 +125,10 @@ export namespace apps { this._emulatedAdminApp = app; } + hasEmulatedAdminApp(): boolean { + return !!this._emulatedAdminApp; + } + private get firebaseArgs() { return _.assign({}, firebaseConfig(), { credential: firebase.credential.applicationDefault(), diff --git a/src/providers/database.ts b/src/providers/database.ts index 2aa50b55a..002cb2bb3 100644 --- a/src/providers/database.ts +++ b/src/providers/database.ts @@ -334,8 +334,15 @@ export function extractInstanceAndPath( `Expect project to be '_' in a Firebase Realtime Database event` ); } - const dbInstance = 'https://' + dbInstanceName + '.' + domain; - return [dbInstance, path]; + + const emuHost = process.env.FIREBASE_DATABASE_EMULATOR_HOST; + if (apps().hasEmulatedAdminApp && emuHost) { + const dbInstance = `http://${emuHost}/?ns=${dbInstanceName}`; + return [dbInstance, path]; + } else { + const dbInstance = 'https://' + dbInstanceName + '.' + domain; + return [dbInstance, path]; + } } /** From 418a75ce6fa3d1a91420ed0ce21387d262bde2b5 Mon Sep 17 00:00:00 2001 From: Sam Date: Thu, 31 Dec 2020 12:27:01 +0000 Subject: [PATCH 2/3] Simplify and add test --- spec/providers/database.spec.ts | 11 +++++++++++ src/apps.ts | 4 ---- src/providers/database.ts | 2 +- 3 files changed, 12 insertions(+), 5 deletions(-) diff --git a/spec/providers/database.spec.ts b/spec/providers/database.spec.ts index b764a7ea0..bf7e54b6b 100644 --- a/spec/providers/database.spec.ts +++ b/spec/providers/database.spec.ts @@ -472,6 +472,17 @@ describe('Database Functions', () => { ); }).to.throw(Error); }); + + it('should use the emulator host when present', () => { + process.env.FIREBASE_DATABASE_EMULATOR_HOST = 'localhost:1234'; + const [instance, path] = database.extractInstanceAndPath( + 'projects/_/instances/foo/refs/bar', + 'firebaseio-staging.com' + ); + expect(instance).to.equal('http://localhost:1234/?ns=foo'); + expect(path).to.equal('/bar'); + delete process.env.FIREBASE_DATABASE_EMULATOR_HOST; + }); }); describe('DataSnapshot', () => { diff --git a/src/apps.ts b/src/apps.ts index 1c7ba9f4e..163cd4795 100644 --- a/src/apps.ts +++ b/src/apps.ts @@ -125,10 +125,6 @@ export namespace apps { this._emulatedAdminApp = app; } - hasEmulatedAdminApp(): boolean { - return !!this._emulatedAdminApp; - } - private get firebaseArgs() { return _.assign({}, firebaseConfig(), { credential: firebase.credential.applicationDefault(), diff --git a/src/providers/database.ts b/src/providers/database.ts index 002cb2bb3..0e4393d05 100644 --- a/src/providers/database.ts +++ b/src/providers/database.ts @@ -336,7 +336,7 @@ export function extractInstanceAndPath( } const emuHost = process.env.FIREBASE_DATABASE_EMULATOR_HOST; - if (apps().hasEmulatedAdminApp && emuHost) { + if (emuHost) { const dbInstance = `http://${emuHost}/?ns=${dbInstanceName}`; return [dbInstance, path]; } else { From 7c8e2a74ca30b2153c6be4cda1166cc92abbbfb6 Mon Sep 17 00:00:00 2001 From: Sam Date: Thu, 31 Dec 2020 12:27:51 +0000 Subject: [PATCH 3/3] build:watch --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 22b6562a9..9b2c3cd8c 100644 --- a/package.json +++ b/package.json @@ -31,7 +31,7 @@ "build:pack": "rm -rf lib && npm install && tsc -p tsconfig.release.json && npm pack", "build:release": "npm install --production && npm install --no-save typescript firebase-admin && tsc -p tsconfig.release.json", "build": "tsc -p tsconfig.release.json", - "build:watch": "tsc -p tsconfig.release.json -w", + "build:watch": "npm run build -- -w", "format": "prettier --check '**/*.{json,md,ts,yml,yaml}'", "format:fix": "prettier --write '**/*.{json,md,ts,yml,yaml}'", "lint": "tslint --config tslint.json --project tsconfig.json ",