diff --git a/package.json b/package.json index 8f4bb09c5..9b2c3cd8c 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": "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 ", 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/providers/database.ts b/src/providers/database.ts index 2aa50b55a..0e4393d05 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 (emuHost) { + const dbInstance = `http://${emuHost}/?ns=${dbInstanceName}`; + return [dbInstance, path]; + } else { + const dbInstance = 'https://' + dbInstanceName + '.' + domain; + return [dbInstance, path]; + } } /**