Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 3 additions & 3 deletions src/emulator/databaseEmulator.ts
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ import * as path from "path";

import * as api from "../api";
import * as utils from "../utils";
import * as javaEmulators from "../serve/javaEmulators";
import * as downloadableEmulators from "./downloadableEmulators";
import { EmulatorInfo, EmulatorInstance, Emulators } from "../emulator/types";
import { Constants } from "./constants";
import { FirebaseError } from "../error";
Expand Down Expand Up @@ -45,15 +45,15 @@ export class DatabaseEmulator implements EmulatorInstance {
});
}

return javaEmulators.start(Emulators.DATABASE, this.args);
return downloadableEmulators.start(Emulators.DATABASE, this.args);
}

async connect(): Promise<void> {
return;
}

async stop(): Promise<void> {
return javaEmulators.stop(Emulators.DATABASE);
return downloadableEmulators.stop(Emulators.DATABASE);
}

getInfo(): EmulatorInfo {
Expand Down
4 changes: 2 additions & 2 deletions src/emulator/download.ts
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ import * as ProgressBar from "progress";
import { FirebaseError } from "../error";
import * as utils from "../utils";
import { Emulators, EmulatorDownloadDetails } from "./types";
import * as javaEmulators from "../serve/javaEmulators";
import * as downloadableEmulators from "./downloadableEmulators";
import * as tmp from "tmp";
import * as fs from "fs-extra";
import * as path from "path";
Expand All @@ -16,7 +16,7 @@ tmp.setGracefulCleanup();
type DownloadableEmulator = Emulators.FIRESTORE | Emulators.DATABASE | Emulators.PUBSUB;

module.exports = async (name: DownloadableEmulator) => {
const emulator = javaEmulators.getDownloadDetails(name);
const emulator = downloadableEmulators.getDownloadDetails(name);
utils.logLabeledBullet(name, `downloading ${path.basename(emulator.downloadPath)}...`);
fs.ensureDirSync(emulator.opts.cacheDir);

Expand Down
Original file line number Diff line number Diff line change
@@ -1,11 +1,11 @@
import {
Emulators,
JavaEmulators,
JavaEmulatorCommand,
JavaEmulatorDetails,
DownloadableEmulators,
DownloadableEmulatorCommand,
DownloadableEmulatorDetails,
EmulatorDownloadDetails,
} from "../emulator/types";
import { Constants } from "../emulator/constants";
} from "./types";
import { Constants } from "./constants";

import { FirebaseError } from "../error";
import * as childProcess from "child_process";
Expand All @@ -25,7 +25,7 @@ const EMULATOR_INSTANCE_KILL_TIMEOUT = 2000; /* ms */
const CACHE_DIR =
process.env.FIREBASE_EMULATORS_PATH || path.join(os.homedir(), ".cache", "firebase", "emulators");

const DownloadDetails: { [s in JavaEmulators]: EmulatorDownloadDetails } = {
const DownloadDetails: { [s in DownloadableEmulators]: EmulatorDownloadDetails } = {
database: {
downloadPath: path.join(CACHE_DIR, "firebase-database-emulator-v4.4.0.jar"),
version: "4.4.0",
Expand Down Expand Up @@ -83,7 +83,7 @@ const DownloadDetails: { [s in JavaEmulators]: EmulatorDownloadDetails } = {
},
};

const EmulatorDetails: { [s in JavaEmulators]: JavaEmulatorDetails } = {
const EmulatorDetails: { [s in DownloadableEmulators]: DownloadableEmulatorDetails } = {
database: {
name: Emulators.DATABASE,
instance: null,
Expand All @@ -106,7 +106,7 @@ const EmulatorDetails: { [s in JavaEmulators]: JavaEmulatorDetails } = {
},
};

const Commands: { [s in JavaEmulators]: JavaEmulatorCommand } = {
const Commands: { [s in DownloadableEmulators]: DownloadableEmulatorCommand } = {
database: {
binary: "java",
args: ["-Duser.language=en", "-jar", getExecPath(Emulators.DATABASE)],
Expand Down Expand Up @@ -140,7 +140,7 @@ const Commands: { [s in JavaEmulators]: JavaEmulatorCommand } = {
},
};

function getExecPath(name: JavaEmulators): string {
function getExecPath(name: DownloadableEmulators): string {
const details = getDownloadDetails(name);
return details.binaryPath || details.downloadPath;
}
Expand All @@ -154,7 +154,10 @@ function _getLogFileName(name: string): string {
* @param emulator - string identifier for the emulator to start.
* @param args - map<string,string> of addittional args
*/
function _getCommand(emulator: JavaEmulators, args: { [s: string]: any }): JavaEmulatorCommand {
function _getCommand(
emulator: DownloadableEmulators,
args: { [s: string]: any }
): DownloadableEmulatorCommand {
const baseCmd = Commands[emulator];

const defaultPort = Constants.getDefaultPort(emulator);
Expand Down Expand Up @@ -193,16 +196,16 @@ function _getCommand(emulator: JavaEmulators, args: { [s: string]: any }): JavaE
};
}

function _fatal(emulator: JavaEmulatorDetails, errorMsg: string): void {
function _fatal(emulator: DownloadableEmulatorDetails, errorMsg: string): void {
if (emulator.instance) {
emulator.instance.kill("SIGINT");
}
throw new FirebaseError(emulator.name + ": " + errorMsg, { exit: 1 });
}

async function _runBinary(
emulator: JavaEmulatorDetails,
command: JavaEmulatorCommand,
emulator: DownloadableEmulatorDetails,
command: DownloadableEmulatorCommand,
extraEnv: NodeJS.ProcessEnv
): Promise<void> {
return new Promise((resolve) => {
Expand Down Expand Up @@ -267,15 +270,15 @@ async function _runBinary(
});
}

export function getDownloadDetails(emulator: JavaEmulators): EmulatorDownloadDetails {
export function getDownloadDetails(emulator: DownloadableEmulators): EmulatorDownloadDetails {
return DownloadDetails[emulator];
}

export function get(emulator: JavaEmulators): JavaEmulatorDetails {
export function get(emulator: DownloadableEmulators): DownloadableEmulatorDetails {
return EmulatorDetails[emulator];
}

export async function stop(targetName: JavaEmulators): Promise<void> {
export async function stop(targetName: DownloadableEmulators): Promise<void> {
const emulator = EmulatorDetails[targetName];
return new Promise((resolve, reject) => {
if (emulator.instance) {
Expand All @@ -298,7 +301,7 @@ export async function stop(targetName: JavaEmulators): Promise<void> {
});
}

export async function downloadIfNecessary(targetName: JavaEmulators): Promise<void> {
export async function downloadIfNecessary(targetName: DownloadableEmulators): Promise<void> {
const hasEmulator = fs.existsSync(getExecPath(targetName));

if (hasEmulator) {
Expand All @@ -309,7 +312,7 @@ export async function downloadIfNecessary(targetName: JavaEmulators): Promise<vo
}

export async function start(
targetName: JavaEmulators,
targetName: DownloadableEmulators,
args: any,
extraEnv: NodeJS.ProcessEnv = {}
): Promise<void> {
Expand Down
6 changes: 3 additions & 3 deletions src/emulator/firestoreEmulator.ts
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ import * as pf from "portfinder";

import * as api from "../api";
import * as utils from "../utils";
import * as javaEmulators from "../serve/javaEmulators";
import * as downloadableEmulators from "./downloadableEmulators";
import { EmulatorInfo, EmulatorInstance, Emulators, Severity } from "../emulator/types";
import { EmulatorRegistry } from "./registry";
import { Constants } from "./constants";
Expand Down Expand Up @@ -85,7 +85,7 @@ export class FirestoreEmulator implements EmulatorInstance {
// serve WebChannel on the main port anyway.
}

return javaEmulators.start(Emulators.FIRESTORE, this.args);
return downloadableEmulators.start(Emulators.FIRESTORE, this.args);
}

async connect(): Promise<void> {
Expand All @@ -97,7 +97,7 @@ export class FirestoreEmulator implements EmulatorInstance {
this.rulesWatcher.close();
}

return javaEmulators.stop(Emulators.FIRESTORE);
return downloadableEmulators.stop(Emulators.FIRESTORE);
}

getInfo(): EmulatorInfo {
Expand Down
6 changes: 3 additions & 3 deletions src/emulator/gui.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import { EmulatorInstance, EmulatorInfo, Emulators } from "./types";
import * as javaEmulators from "../serve/javaEmulators";
import * as downloadableEmulators from "./downloadableEmulators";
import { EmulatorRegistry } from "./registry";
import { EmulatorHub } from "./hub";
import { FirebaseError } from "../error";
Expand Down Expand Up @@ -32,15 +32,15 @@ export class EmulatorGUI implements EmulatorInstance {
[EmulatorHub.EMULATOR_HUB_ENV]: `${hubInfo.host}:${hubInfo.port}`,
};

return javaEmulators.start(Emulators.GUI, { auto_download }, env);
return downloadableEmulators.start(Emulators.GUI, { auto_download }, env);
}

async connect(): Promise<void> {
return;
}

stop(): Promise<void> {
return javaEmulators.stop(Emulators.GUI);
return downloadableEmulators.stop(Emulators.GUI);
}

getInfo(): EmulatorInfo {
Expand Down
2 changes: 1 addition & 1 deletion src/emulator/hubExport.ts
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ import { IMPORT_EXPORT_EMULATORS, Emulators, ALL_EMULATORS } from "./types";
import { EmulatorRegistry } from "./registry";
import { FirebaseError } from "../error";
import { EmulatorHub } from "./hub";
import { getDownloadDetails } from "../serve/javaEmulators";
import { getDownloadDetails } from "./downloadableEmulators";

export interface ExportMetadata {
version: string;
Expand Down
6 changes: 3 additions & 3 deletions src/emulator/pubsubEmulator.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ import * as uuid from "uuid";
import { PubSub, Subscription, Message } from "@google-cloud/pubsub";

import * as api from "../api";
import * as javaEmulators from "../serve/javaEmulators";
import * as downloadableEmulators from "./downloadableEmulators";
import { EmulatorLogger } from "./emulatorLogger";
import { EmulatorInfo, EmulatorInstance, Emulators } from "../emulator/types";
import { Constants } from "./constants";
Expand Down Expand Up @@ -37,15 +37,15 @@ export class PubsubEmulator implements EmulatorInstance {
}

async start(): Promise<void> {
return javaEmulators.start(Emulators.PUBSUB, this.args);
return downloadableEmulators.start(Emulators.PUBSUB, this.args);
}

async connect(): Promise<void> {
return;
}

async stop(): Promise<void> {
await javaEmulators.stop(Emulators.PUBSUB);
await downloadableEmulators.stop(Emulators.PUBSUB);
}

getInfo(): EmulatorInfo {
Expand Down
12 changes: 6 additions & 6 deletions src/emulator/types.ts
Original file line number Diff line number Diff line change
Expand Up @@ -11,12 +11,12 @@ export enum Emulators {
GUI = "gui",
}

export type JavaEmulators =
export type DownloadableEmulators =
| Emulators.FIRESTORE
| Emulators.DATABASE
| Emulators.PUBSUB
| Emulators.GUI;
export const JAVA_EMULATORS = [
export const DOWNLOADABLE_EMULATORS = [
Emulators.FIRESTORE,
Emulators.DATABASE,
Emulators.PUBSUB,
Expand All @@ -39,8 +39,8 @@ export const EMULATORS_SUPPORTED_BY_GUI = [Emulators.DATABASE];
// TODO: Is there a way we can just allow iteration over the enum?
export const ALL_EMULATORS = [Emulators.HUB, Emulators.GUI, ...ALL_SERVICE_EMULATORS];

export function isJavaEmulator(value: string): value is JavaEmulators {
return isEmulator(value) && JAVA_EMULATORS.indexOf(value) >= 0;
export function isDownloadableEmulator(value: string): value is DownloadableEmulators {
return isEmulator(value) && DOWNLOADABLE_EMULATORS.indexOf(value) >= 0;
}

export function isEmulator(value: string): value is Emulators {
Expand Down Expand Up @@ -84,7 +84,7 @@ export interface EmulatorInfo {
port: number;
}

export interface JavaEmulatorCommand {
export interface DownloadableEmulatorCommand {
binary: string;
args: string[];
optionalArgs: string[];
Expand Down Expand Up @@ -117,7 +117,7 @@ export interface EmulatorDownloadDetails {
binaryPath?: string;
}

export interface JavaEmulatorDetails {
export interface DownloadableEmulatorDetails {
name: Emulators;
instance: ChildProcess | null;
stdout: any | null;
Expand Down
6 changes: 3 additions & 3 deletions src/init/features/emulators.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,9 @@ import * as clc from "cli-color";
import * as _ from "lodash";
import * as utils from "../../utils";
import { prompt } from "../../prompt";
import { Emulators, ALL_SERVICE_EMULATORS, isJavaEmulator } from "../../emulator/types";
import { Emulators, ALL_SERVICE_EMULATORS, isDownloadableEmulator } from "../../emulator/types";
import { Constants } from "../../emulator/constants";
import { downloadIfNecessary } from "../../serve/javaEmulators";
import { downloadIfNecessary } from "../../emulator/downloadableEmulators";

interface EmulatorsInitSelections {
emulators?: Emulators[];
Expand Down Expand Up @@ -68,7 +68,7 @@ export async function doSetup(setup: any, config: any) {

if (selections.download) {
for (const selected of selections.emulators) {
if (isJavaEmulator(selected)) {
if (isDownloadableEmulator(selected)) {
await downloadIfNecessary(selected);
}
}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,13 +1,13 @@
import { expect } from "chai";
import * as path from "path";

import * as javaEmulators from "../../serve/javaEmulators";
import * as downloadableEmulators from "../../emulator/downloadableEmulators";
import { Emulators } from "../../emulator/types";

type DownloadableEmulator = Emulators.FIRESTORE | Emulators.DATABASE | Emulators.PUBSUB;

function checkDownloadPath(name: DownloadableEmulator): void {
const emulator = javaEmulators.getDownloadDetails(name);
const emulator = downloadableEmulators.getDownloadDetails(name);
expect(path.basename(emulator.opts.remoteUrl)).to.eq(path.basename(emulator.downloadPath));
}

Expand Down