UNPKG

firebase-tools

Version:
96 lines (95 loc) 4.64 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.doSetup = void 0; const clc = require("colorette"); const _ = require("lodash"); const projects_1 = require("../../management/projects"); const logger_1 = require("../../logger"); const utils = require("../../utils"); const prompt = require("../../prompt"); const requireAuth_1 = require("../../requireAuth"); const constants_1 = require("../../emulator/constants"); const error_1 = require("../../error"); const OPTION_NO_PROJECT = "Don't set up a default project"; const OPTION_USE_PROJECT = "Use an existing project"; const OPTION_NEW_PROJECT = "Create a new project"; const OPTION_ADD_FIREBASE = "Add Firebase to an existing Google Cloud Platform project"; async function doSetup(setup, config, options) { var _a, _b; setup.project = {}; logger_1.logger.info(); logger_1.logger.info(`First, let's associate this project directory with a Firebase project.`); logger_1.logger.info(`You can create multiple project aliases by running ${clc.bold("firebase use --add")}, `); logger_1.logger.info(); if (options.project) { if (constants_1.Constants.isDemoProject(options.project)) { logger_1.logger.info(`Skipping Firebase project setup because a demo project is provided`); return; } await (0, requireAuth_1.requireAuth)(options); await usingProject(setup, config, options.project); return; } const projectFromRcFile = (_b = (_a = setup.rcfile) === null || _a === void 0 ? void 0 : _a.projects) === null || _b === void 0 ? void 0 : _b.default; if (projectFromRcFile) { await (0, requireAuth_1.requireAuth)(options); await usingProject(setup, config, projectFromRcFile, ".firebaserc"); return; } const projectEnvVar = utils.envOverride("FIREBASE_PROJECT", ""); if (projectEnvVar) { await (0, requireAuth_1.requireAuth)(options); await usingProject(setup, config, projectEnvVar, "$FIREBASE_PROJECT"); return; } if (options.nonInteractive) { logger_1.logger.info("No default project found. Continuing without a project in non interactive mode."); return; } const choices = [OPTION_USE_PROJECT, OPTION_NEW_PROJECT, OPTION_ADD_FIREBASE, OPTION_NO_PROJECT]; const projectSetupOption = await prompt.select({ message: "Please select an option:", choices, }); switch (projectSetupOption) { case OPTION_USE_PROJECT: { await (0, requireAuth_1.requireAuth)(options); const pm = await (0, projects_1.selectProjectInteractively)(); return await usingProjectMetadata(setup, config, pm); } case OPTION_NEW_PROJECT: { utils.logBullet("If you want to create a project in a Google Cloud organization or folder, please use " + `"firebase projects:create" instead, and return to this command when you've created the project.`); await (0, requireAuth_1.requireAuth)(options); const { projectId, displayName } = await (0, projects_1.promptProjectCreation)(options); const pm = await (0, projects_1.createFirebaseProjectAndLog)(projectId, { displayName }); return await usingProjectMetadata(setup, config, pm); } case OPTION_ADD_FIREBASE: { await (0, requireAuth_1.requireAuth)(options); const pm = await (0, projects_1.addFirebaseToCloudProjectAndLog)(await (0, projects_1.promptAvailableProjectId)()); return await usingProjectMetadata(setup, config, pm); } default: return; } } exports.doSetup = doSetup; async function usingProject(setup, config, projectId, from = "") { const pm = await (0, projects_1.getFirebaseProject)(projectId); const label = `${pm.projectId}` + (pm.displayName ? ` (${pm.displayName})` : ""); utils.logBullet(`Using project ${label} ${from ? "from ${from}" : ""}.`); await usingProjectMetadata(setup, config, pm); } async function usingProjectMetadata(setup, config, pm) { var _a, _b; if (!pm) { throw new error_1.FirebaseError("null FirebaseProjectMetadata"); } _.set(setup.rcfile, "projects.default", pm.projectId); setup.projectId = pm.projectId; setup.projectNumber = pm.projectNumber; setup.instance = (_a = pm.resources) === null || _a === void 0 ? void 0 : _a.realtimeDatabaseInstance; setup.projectLocation = (_b = pm.resources) === null || _b === void 0 ? void 0 : _b.locationId; utils.makeActiveProject(config.projectDir, pm.projectId); }