diff --git a/changelog.txt b/changelog.txt index 5b2eaac2e3c..097ecb61f26 100644 --- a/changelog.txt +++ b/changelog.txt @@ -6,3 +6,4 @@ fixed - Functions emulator fails to provide correct req.path fixed - Functions emulator fails on various malformed body requests fixed - Fixed race condition where downloading emulators would sometimes resolve too early and fail. fixed - Fixed a number of issues that broke functions:shell. +fixed - Fixed an issue where Firestore emulator would not start if rules file can't be found. \ No newline at end of file diff --git a/src/emulator/controller.ts b/src/emulator/controller.ts index 44ce83068e0..e1bb2500f9c 100644 --- a/src/emulator/controller.ts +++ b/src/emulator/controller.ts @@ -1,5 +1,6 @@ import * as _ from "lodash"; import * as clc from "cli-color"; +import * as fs from "fs"; import * as pf from "portfinder"; import * as utils from "../utils"; @@ -10,7 +11,7 @@ import { ALL_EMULATORS, EmulatorInstance, Emulators } from "../emulator/types"; import { Constants } from "../emulator/constants"; import { FunctionsEmulator } from "../emulator/functionsEmulator"; import { DatabaseEmulator } from "../emulator/databaseEmulator"; -import { FirestoreEmulator } from "../emulator/firestoreEmulator"; +import { FirestoreEmulator, FirestoreEmulatorArgs } from "../emulator/firestoreEmulator"; import { HostingEmulator } from "../emulator/hostingEmulator"; import * as FirebaseError from "../error"; import * as path from "path"; @@ -123,13 +124,24 @@ export async function startAll(options: any): Promise { if (targets.indexOf(Emulators.FIRESTORE) > -1) { const firestoreAddr = Constants.getAddress(Emulators.FIRESTORE, options); - const rules = path.join(options.projectRoot, options.config.get("firestore.rules")); - const firestoreEmulator = new FirestoreEmulator({ + const args: FirestoreEmulatorArgs = { host: firestoreAddr.host, port: firestoreAddr.port, - rules, - }); + }; + + const rules: string = path.join(options.projectRoot, options.config.get("firestore.rules")); + if (fs.existsSync(rules)) { + args.rules = rules; + } else { + utils.logWarning( + `Firestore rules file ${clc.bold( + rules + )} specified in firebase.json does not exist, starting Firestore emulator without rules.` + ); + } + + const firestoreEmulator = new FirestoreEmulator(args); await startEmulator(firestoreEmulator); utils.logLabeledBullet( diff --git a/src/emulator/firestoreEmulator.ts b/src/emulator/firestoreEmulator.ts index 91defa578a7..54c149bb6f1 100644 --- a/src/emulator/firestoreEmulator.ts +++ b/src/emulator/firestoreEmulator.ts @@ -3,7 +3,7 @@ import { EmulatorInfo, EmulatorInstance, Emulators } from "../emulator/types"; import { EmulatorRegistry } from "./registry"; import { Constants } from "./constants"; -interface FirestoreEmulatorArgs { +export interface FirestoreEmulatorArgs { port?: number; host?: string; rules?: string;