UNPKG

firebase-tools

Version:
170 lines (169 loc) 6.72 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.command = exports.setNewActive = void 0; const clc = require("colorette"); const command_1 = require("../command"); const projects_1 = require("../management/projects"); const logger_1 = require("../logger"); const prompt_1 = require("../prompt"); const requireAuth_1 = require("../requireAuth"); const command_2 = require("../command"); const utils = require("../utils"); const error_1 = require("../error"); function listAliases(options) { if (options.rc.hasProjects) { logger_1.logger.info("Project aliases for", clc.bold(options.projectRoot || "") + ":"); logger_1.logger.info(); for (const [alias, projectId] of Object.entries(options.rc.projects)) { const listing = alias + " (" + projectId + ")"; if (options.project === projectId || options.projectAlias === alias) { logger_1.logger.info(clc.cyan(clc.bold("* " + listing))); } else { logger_1.logger.info(" " + listing); } } logger_1.logger.info(); } logger_1.logger.info("Run", clc.bold("firebase use --add"), "to define a new project alias."); } function verifyMessage(name) { return "please verify project " + clc.bold(name) + " exists and you have access."; } async function setNewActive(projectOrAlias, aliasOpt, rc, projectRoot) { let project; const hasAlias = rc.hasProjectAlias(projectOrAlias); const resolvedProject = rc.resolveAlias(projectOrAlias); (0, command_2.validateProjectId)(resolvedProject); try { project = await (0, projects_1.getProject)(resolvedProject); } catch (_a) { throw new error_1.FirebaseError("Invalid project selection, " + verifyMessage(projectOrAlias)); } if (aliasOpt) { if (!project) { throw new error_1.FirebaseError(`Cannot create alias ${clc.bold(aliasOpt)}, ${verifyMessage(projectOrAlias)}`); } rc.addProjectAlias(aliasOpt, projectOrAlias); logger_1.logger.info("Created alias", clc.bold(aliasOpt), "for", resolvedProject + "."); } if (hasAlias) { if (!project) { throw new error_1.FirebaseError(`Unable to use alias ${clc.bold(projectOrAlias)}, ${verifyMessage(resolvedProject)}`); } utils.makeActiveProject(projectRoot, projectOrAlias); logger_1.logger.info("Now using alias", clc.bold(projectOrAlias), "(" + resolvedProject + ")"); } else if (project) { utils.makeActiveProject(projectRoot, projectOrAlias); logger_1.logger.info("Now using project", clc.bold(projectOrAlias)); } else { throw new error_1.FirebaseError(`Invalid project selection, ${verifyMessage(projectOrAlias)}`); } } exports.setNewActive = setNewActive; function unalias(alias, options) { if (options.rc.hasProjectAlias(alias)) { options.rc.removeProjectAlias(alias); logger_1.logger.info("Removed alias", clc.bold(alias)); logger_1.logger.info(); listAliases(options); } } async function addAlias(options) { if (options.nonInteractive) { return utils.reject("Cannot run " + clc.bold("firebase use --add") + " in non-interactive mode. Use " + clc.bold("firebase use <project_id> --alias <alias>") + " instead."); } const projects = await (0, projects_1.listFirebaseProjects)(); const project = await (0, prompt_1.select)({ message: "Which project do you want to add?", choices: projects.map((p) => p.projectId).sort(), }); const alias = await (0, prompt_1.input)({ message: "What alias do you want to use for this project? (e.g. staging)", validate: (input) => { return input && input.length > 0; }, }); const results = { project, alias, }; options.rc.addProjectAlias(alias, project); utils.makeActiveProject(options.projectRoot, results.alias); logger_1.logger.info(); logger_1.logger.info("Created alias", clc.bold(results.alias || ""), "for", results.project + "."); logger_1.logger.info("Now using alias", clc.bold(results.alias || "") + " (" + results.project + ")"); } function clearAlias(options) { utils.makeActiveProject(options.projectRoot, undefined); delete options.projectAlias; delete options.project; logger_1.logger.info("Cleared active project."); logger_1.logger.info(); listAliases(options); } async function genericUse(options) { if (options.nonInteractive || !process.stdout.isTTY) { if (options.project) { logger_1.logger.info(options.project); return options.project; } return utils.reject("No active project"); } if (options.projectAlias) { logger_1.logger.info("Active Project:", clc.bold(clc.cyan(options.projectAlias + " (" + options.project + ")"))); } else if (options.project) { logger_1.logger.info("Active Project:", clc.bold(clc.cyan(options.project))); } else { let msg = "No project is currently active"; if (options.rc.hasProjects) { msg += ", and no aliases have been created."; } logger_1.logger.info(msg + "."); } logger_1.logger.info(); listAliases(options); return options.project; } exports.command = new command_1.Command("use [alias_or_project_id]") .description("set an active Firebase project for your working directory") .option("--add", "create a new project alias interactively") .option("--alias <name>", "create a new alias for the provided project id") .option("--unalias <name>", "remove an already created project alias") .option("--clear", "clear the active project selection") .before(requireAuth_1.requireAuth) .action((newActive, options) => { let aliasOpt; const i = process.argv.indexOf("--alias"); if (i >= 0 && process.argv.length > i + 1) { aliasOpt = process.argv[i + 1]; } if (!options.projectRoot) { return utils.reject(clc.bold("firebase use") + " must be run from a Firebase project directory.\n\nRun " + clc.bold("firebase init") + " to start a project directory in the current folder."); } if (newActive) { return setNewActive(newActive, aliasOpt, options.rc, options.projectRoot); } if (options.unalias) { return unalias(options.unalias, options); } if (options.add) { return addAlias(options); } if (options.clear) { return clearAlias(options); } return genericUse(options); });