Skip to content

Commit

Permalink
Merge branch 'next' into dt-update-templates
Browse files Browse the repository at this point in the history
  • Loading branch information
thechenky committed Jun 10, 2019
2 parents d1926e7 + c9143b9 commit 3bb5e0e
Show file tree
Hide file tree
Showing 40 changed files with 532 additions and 312 deletions.
14 changes: 10 additions & 4 deletions changelog.txt
@@ -1,6 +1,12 @@
* **BREAKING** The CLI no longer supports being run in Node 6 environments.
* **BREAKING** RTDB Emulator comes up with open rules by default
* Modify RTDB emulator to publish triggers to the functions emulator
* Modify functions emulator to invoke RTDB emulator triggers
* **BREAKING** RTDB Emulator comes up with open rules by default.
* Modify RTDB emulator to publish triggers to the functions emulator.
* Modify functions emulator to invoke RTDB emulator triggers.
* Engines field is now required in package.json for functions deploys.
* Update functions init templates to use firebase-functions v3 and firebase-admin v8.
* Fix bug where raw body was missing on HTTPS function request.
* Fix bug with Functions Emulator and `firebase-admin@8.0.0`.
* Fix req.baseUrl in Functions Emulator.
* Add `FUNCTIONS_EMULATOR` environmental variable when running in Functions Emulator.
* Set FIRESTORE_EMULATOR_HOST env var in "emulators:exec".
* Fix bug in printing Function logs when the text payload was undefined.
* Update functions init templates to use firebase-functions v3 and firebase-admin v8.
7 changes: 3 additions & 4 deletions package.json
Expand Up @@ -84,7 +84,7 @@
"fs-extra": "^0.23.1",
"glob": "^7.1.2",
"google-auto-auth": "^0.7.2",
"inquirer": "^0.12.0",
"inquirer": "^6.3.1",
"is": "^3.2.1",
"jsonschema": "^1.0.2",
"jsonwebtoken": "^8.2.1",
Expand Down Expand Up @@ -113,7 +113,7 @@
"@types/express": "^4.16.0",
"@types/fs-extra": "^5.0.5",
"@types/glob": "^7.1.1",
"@types/inquirer": "^6.0.0",
"@types/inquirer": "^6.0.3",
"@types/lodash": "^4.14.118",
"@types/mocha": "^5.2.5",
"@types/nock": "^9.3.0",
Expand All @@ -132,9 +132,8 @@
"coveralls": "^3.0.1",
"eslint": "^5.7.0",
"eslint-plugin-prettier": "^3.0.0",
"firebase-admin": "^7.3.0",
"firebase-admin": "^7.0.0",
"firebase-functions": "^2.2.1",
"firebase-functions-test": "^0.1.6",
"mocha": "^5.0.5",
"nock": "^9.3.3",
"nyc": "^14.0.0",
Expand Down
2 changes: 1 addition & 1 deletion src/RulesDeploy.ts
Expand Up @@ -7,7 +7,7 @@ import logger = require("./logger");
import FirebaseError = require("./error");
import utils = require("./utils");

import * as prompt from "./prompt";
import { prompt } from "./prompt";
import { ListRulesetsEntry, Release, RulesetFile } from "./gcp/rules";

// The status code the Firebase Rules backend sends to indicate too many rulesets.
Expand Down
2 changes: 1 addition & 1 deletion src/auth.js
Expand Up @@ -14,7 +14,7 @@ var api = require("./api");
var configstore = require("./configstore");
var FirebaseError = require("./error");
var logger = require("./logger");
var prompt = require("./prompt");
var { prompt } = require("./prompt");
var scopes = require("./scopes");

portfinder.basePort = 9005;
Expand Down
2 changes: 1 addition & 1 deletion src/commands/database-remove.js
Expand Up @@ -7,7 +7,7 @@ var DatabaseRemove = require("../database/remove").default;
var api = require("../api");

var utils = require("../utils");
var prompt = require("../prompt");
var { prompt } = require("../prompt");
var clc = require("cli-color");
var _ = require("lodash");

Expand Down
2 changes: 1 addition & 1 deletion src/commands/database-set.js
Expand Up @@ -12,7 +12,7 @@ var utils = require("../utils");
var clc = require("cli-color");
var logger = require("../logger");
var fs = require("fs");
var prompt = require("../prompt");
var { prompt } = require("../prompt");
var _ = require("lodash");

module.exports = new Command("database:set <path> [infile]")
Expand Down
2 changes: 1 addition & 1 deletion src/commands/database-update.js
Expand Up @@ -12,7 +12,7 @@ var utils = require("../utils");
var clc = require("cli-color");
var logger = require("../logger");
var fs = require("fs");
var prompt = require("../prompt");
var { prompt } = require("../prompt");
var _ = require("lodash");

module.exports = new Command("database:update <path> [infile]")
Expand Down
6 changes: 4 additions & 2 deletions src/commands/emulators-exec.ts
Expand Up @@ -21,8 +21,10 @@ async function runScript(script: string): Promise<void> {
const firestoreInstance = EmulatorRegistry.get(Emulators.FIRESTORE);
if (firestoreInstance) {
const info = firestoreInstance.getInfo();
const hostString = `${info.host}:${info.port}`;
env[FirestoreEmulator.FIRESTORE_EMULATOR_ENV] = hostString;
const address = `${info.host}:${info.port}`;

env[FirestoreEmulator.FIRESTORE_EMULATOR_ENV] = address;
env[FirestoreEmulator.FIRESTORE_EMULATOR_ENV_ALT] = address;
}

const proc = childProcess.spawn(script, {
Expand Down
2 changes: 1 addition & 1 deletion src/commands/firestore-delete.js
Expand Up @@ -3,7 +3,7 @@
var clc = require("cli-color");
var Command = require("../command");
var FirestoreDelete = require("../firestore/delete");
var prompt = require("../prompt");
var { prompt } = require("../prompt");
var requirePermissions = require("../requirePermissions");
var utils = require("../utils");

Expand Down
2 changes: 1 addition & 1 deletion src/commands/functions-delete.js
Expand Up @@ -9,7 +9,7 @@ var functionsConfig = require("../functionsConfig");
var functionsDelete = require("../functionsDelete");
var getProjectId = require("../getProjectId");
var helper = require("../functionsDeployHelper");
var prompt = require("../prompt");
var { prompt } = require("../prompt");
var requirePermissions = require("../requirePermissions");
var utils = require("../utils");

Expand Down
6 changes: 3 additions & 3 deletions src/commands/functions-log.ts
Expand Up @@ -46,9 +46,9 @@ module.exports = new Command("functions:log")
const entry = entries[i];
logger.info(
entry.timestamp,
entry.severity.substring(0, 1),
entry.resource.labels.function_name + ":",
entry.textPayload
_.get(entry, "severity", "?").substring(0, 1),
_.get(entry, "resource.labels.function_name") + ":",
_.get(entry, "textPayload", "")
);
}
if (_.isEmpty(entries)) {
Expand Down
2 changes: 1 addition & 1 deletion src/commands/hosting-disable.js
Expand Up @@ -5,7 +5,7 @@ var requireInstance = require("../requireInstance");
var requirePermissions = require("../requirePermissions");
var api = require("../api");
var utils = require("../utils");
var prompt = require("../prompt");
var { prompt } = require("../prompt");
var clc = require("cli-color");

module.exports = new Command("hosting:disable")
Expand Down
31 changes: 13 additions & 18 deletions src/commands/init.js
Expand Up @@ -10,7 +10,7 @@ var Config = require("../config");
var fsutils = require("../fsutils");
var init = require("../init");
var logger = require("../logger");
var prompt = require("../prompt");
var { prompt, promptOnce } = require("../prompt");
var requireAuth = require("../requireAuth");
var utils = require("../utils");

Expand Down Expand Up @@ -71,28 +71,28 @@ module.exports = new Command("init [feature]")

var choices = [
{
name: "database",
label: "Database: Deploy Firebase Realtime Database Rules",
value: "database",
name: "Database: Deploy Firebase Realtime Database Rules",
checked: false,
},
{
name: "firestore",
label: "Firestore: Deploy rules and create indexes for Firestore",
value: "firestore",
name: "Firestore: Deploy rules and create indexes for Firestore",
checked: false,
},
{
name: "functions",
label: "Functions: Configure and deploy Cloud Functions",
value: "functions",
name: "Functions: Configure and deploy Cloud Functions",
checked: false,
},
{
name: "hosting",
label: "Hosting: Configure and deploy Firebase Hosting sites",
value: "hosting",
name: "Hosting: Configure and deploy Firebase Hosting sites",
checked: false,
},
{
name: "storage",
label: "Storage: Deploy Cloud Storage security rules",
value: "storage",
name: "Storage: Deploy Cloud Storage security rules",
checked: false,
},
];
Expand All @@ -101,7 +101,7 @@ module.exports = new Command("init [feature]")
// HACK: Windows Node has issues with selectables as the first prompt, so we
// add an extra confirmation prompt that fixes the problem
if (process.platform === "win32") {
next = prompt.once({
next = promptOnce({
type: "confirm",
message: "Are you ready to proceed?",
});
Expand All @@ -128,16 +128,11 @@ module.exports = new Command("init [feature]")
message:
"Which Firebase CLI features do you want to set up for this folder? " +
"Press Space to select features, then Enter to confirm your choices.",
choices: prompt.convertLabeledListChoices(choices),
choices: choices,
},
]);
})
.then(function() {
if (!setup.featureArg) {
setup.features = setup.features.map(function(feat) {
return prompt.listLabelToValue(feat, choices);
});
}
if (setup.features.length === 0) {
return utils.reject(
"Must select at least one feature. Use " +
Expand Down
2 changes: 1 addition & 1 deletion src/commands/login.js
Expand Up @@ -5,7 +5,7 @@ var logger = require("../logger");
var configstore = require("../configstore");
var clc = require("cli-color");
var utils = require("../utils");
var prompt = require("../prompt");
var { prompt } = require("../prompt");

var auth = require("../auth");

Expand Down
2 changes: 1 addition & 1 deletion src/commands/open.js
Expand Up @@ -7,7 +7,7 @@ var open = require("opn");
var api = require("../api");
var Command = require("../command");
var logger = require("../logger");
var prompt = require("../prompt");
var { prompt } = require("../prompt");
var requirePermissions = require("../requirePermissions");
var requireInstance = require("../requireInstance");
var utils = require("../utils");
Expand Down
4 changes: 2 additions & 2 deletions src/commands/tools-migrate.js
Expand Up @@ -7,7 +7,7 @@ var Command = require("../command");
var Config = require("../config");
var identifierToProjectId = require("../identifierToProjectId");
var logger = require("../logger");
var prompt = require("../prompt");
var { promptOnce } = require("../prompt");
var requireAuth = require("../requireAuth");
var utils = require("../utils");

Expand Down Expand Up @@ -83,7 +83,7 @@ module.exports = new Command("tools:migrate")
if (options.confirm) {
next = Promise.resolve(true);
} else {
next = prompt.once({
next = promptOnce({
type: "confirm",
message: "Write new config to " + clc.underline("firebase.json") + "?",
default: true,
Expand Down
2 changes: 1 addition & 1 deletion src/commands/use.js
Expand Up @@ -7,7 +7,7 @@ var firebaseApi = require("../firebaseApi");
var clc = require("cli-color");
var utils = require("../utils");
var _ = require("lodash");
var prompt = require("../prompt");
var { prompt } = require("../prompt");

var listAliases = function(options) {
if (options.rc.hasProjects) {
Expand Down
4 changes: 2 additions & 2 deletions src/config.js
Expand Up @@ -11,7 +11,7 @@ var FirebaseError = require("./error");
var fsutils = require("./fsutils");
var loadCJSON = require("./loadCJSON");
var parseBoltRules = require("./parseBoltRules");
var prompt = require("./prompt");
var { promptOnce } = require("./prompt");
var { resolveProjectPath } = require("./projectPath");
var utils = require("./utils");

Expand Down Expand Up @@ -216,7 +216,7 @@ Config.prototype.askWriteProjectFile = function(p, content) {
var writeTo = this.path(p);
var next;
if (fsutils.fileExistsSync(writeTo)) {
next = prompt.once({
next = promptOnce({
type: "confirm",
message: "File " + clc.underline(p) + " already exists. Overwrite?",
default: false,
Expand Down
4 changes: 2 additions & 2 deletions src/deploy/functions/release.js
Expand Up @@ -15,7 +15,7 @@ var utils = require("../../utils");
var helper = require("../../functionsDeployHelper");
var runtimeSelector = require("../../runtimeChoiceSelector");
var { getAppEngineLocation } = require("../../functionsConfig");
var prompt = require("../../prompt");
var { promptOnce } = require("../../prompt");
var { createOrUpdateSchedulesAndTopics } = require("./createOrUpdateSchedulesAndTopics");

var deploymentTool = require("../../deploymentTool");
Expand Down Expand Up @@ -338,7 +338,7 @@ module.exports = function(context, options, payload) {

const next = options.force
? Promise.resolve(true)
: prompt.once({
: promptOnce({
type: "confirm",
name: "confirm",
default: false,
Expand Down
3 changes: 2 additions & 1 deletion src/emulator/firestoreEmulator.ts
Expand Up @@ -11,7 +11,8 @@ export interface FirestoreEmulatorArgs {
}

export class FirestoreEmulator implements EmulatorInstance {
static FIRESTORE_EMULATOR_ENV = "FIREBASE_FIRESTORE_EMULATOR_ADDRESS";
static FIRESTORE_EMULATOR_ENV = "FIRESTORE_EMULATOR_HOST";
static FIRESTORE_EMULATOR_ENV_ALT = "FIREBASE_FIRESTORE_EMULATOR_ADDRESS";

constructor(private args: FirestoreEmulatorArgs) {}

Expand Down
28 changes: 18 additions & 10 deletions src/emulator/functionsEmulator.ts
Expand Up @@ -27,7 +27,6 @@ import {
import { EmulatorRegistry } from "./registry";
import { EventEmitter } from "events";
import * as stream from "stream";
import { trimFunctionPath } from "./functionsEmulatorUtils";
import { EmulatorLogger, Verbosity } from "./emulatorLogger";

const EVENT_INVOKE = "functions:invoke";
Expand Down Expand Up @@ -177,7 +176,7 @@ export class FunctionsEmulator implements EmulatorInstance {
const runtimeReq = http.request(
{
method,
path: "/" + trimFunctionPath(req.url),
path: req.url || "/",
headers: req.headers,
socketPath: runtime.metadata.socketPath,
},
Expand Down Expand Up @@ -296,9 +295,6 @@ export class FunctionsEmulator implements EmulatorInstance {
}"\n - Learn more at https://firebase.google.com/docs/functions/local-emulator`
);
break;
case "default-admin-app-used":
utils.logBullet(`Your code has been provided a "firebase-admin" instance.`);
break;
case "non-default-admin-app-used":
EmulatorLogger.log(
"WARN",
Expand Down Expand Up @@ -344,17 +340,29 @@ You can probably fix this by running "npm install ${
`The Cloud Functions directory you specified does not have a "package.json" file, so we can't load it.`
);
break;
case "missing-package-json":
utils.logWarning(
`The Cloud Functions directory you specified does not have a "package.json" file, so we can't load it.`
);
break;
case "admin-auto-initialized":
utils.logBullet(
"Your code does not appear to initialize the 'firebase-admin' module, so we've done it automatically.\n" +
" - Learn more: https://firebase.google.com/docs/admin/setup"
);
break;
case "function-code-resolution-failed":
EmulatorLogger.log("WARN", systemLog.data.error);
const helper = ["We were unable to load your functions code. (see above)"];
if (systemLog.data.isPotentially.wrong_directory) {
helper.push(` - There is no "package.json" file in your functions directory.`);
}
if (systemLog.data.isPotentially.typescript) {
helper.push(
" - It appears your code is written in Typescript, which must be compiled before emulation."
);
}
if (systemLog.data.isPotentially.uncompiled) {
helper.push(
` - You may be able to run "npm run build" in your functions directory to resolve this.`
);
}
utils.logWarning(helper.join("\n"));
default:
// Silence
}
Expand Down

0 comments on commit 3bb5e0e

Please sign in to comment.