firebase-tools
Version:
Command-Line Interface for Firebase
76 lines (75 loc) • 3.89 kB
JavaScript
;
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
Object.defineProperty(exports, "__esModule", { value: true });
const _ = require("lodash");
const clc = require("cli-color");
const marked = require("marked");
const ora = require("ora");
const TerminalRenderer = require("marked-terminal");
const command_1 = require("../command");
const error_1 = require("../error");
const getProjectId = require("../getProjectId");
const extensionsApi = require("../extensions/extensionsApi");
const extensionsHelper_1 = require("../extensions/extensionsHelper");
const paramHelper = require("../extensions/paramHelper");
const requirePermissions_1 = require("../requirePermissions");
const utils = require("../utils");
const logger = require("../logger");
marked.setOptions({
renderer: new TerminalRenderer(),
});
exports.default = new command_1.Command("ext:configure <extensionInstanceId>")
.description("configure an existing extension instance")
.option("--params <paramsFile>", "path of params file with .env format.")
.before(requirePermissions_1.requirePermissions, ["firebasemods.instances.update", "firebasemods.instances.get"])
.action((instanceId, options) => __awaiter(this, void 0, void 0, function* () {
const spinner = ora.default(`Configuring ${clc.bold(instanceId)}. This usually takes 3 to 5 minutes...`);
try {
const projectId = getProjectId(options, false);
let existingInstance;
try {
existingInstance = yield extensionsApi.getInstance(projectId, instanceId);
}
catch (err) {
if (err.status === 404) {
return utils.reject(`No extension instance ${instanceId} found in project ${projectId}.`, {
exit: 1,
});
}
throw err;
}
const paramSpecWithNewDefaults = paramHelper.getParamsWithCurrentValuesAsDefaults(existingInstance);
const removedLocations = _.remove(paramSpecWithNewDefaults, (param) => {
return param.param === "LOCATION";
});
const currentLocation = _.get(existingInstance, "config.params.LOCATION");
const params = yield paramHelper.getParams(projectId, paramSpecWithNewDefaults, options.params);
if (removedLocations.length) {
logger.info(`Location is currently set to ${currentLocation}. This cannot be modified. ` +
`Please uninstall and reinstall this extension to change location.`);
params.LOCATION = currentLocation;
}
spinner.start();
const res = yield extensionsApi.configureInstance(projectId, instanceId, params);
spinner.stop();
utils.logLabeledSuccess(extensionsHelper_1.logPrefix, `successfully configured ${clc.bold(instanceId)}.`);
utils.logLabeledBullet(extensionsHelper_1.logPrefix, marked(`You can view your reconfigured instance in the Firebase console: ${utils.consoleUrl(projectId, `/extensions/instances/${instanceId}?tab=config`)}`));
return res;
}
catch (err) {
spinner.fail();
if (!(err instanceof error_1.FirebaseError)) {
throw new error_1.FirebaseError(`Error occurred while configuring the instance: ${err.message}`, {
original: err,
});
}
throw err;
}
}));