firebase-tools
Version:
Command-Line Interface for Firebase
101 lines (100 loc) • 4.37 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 clc = require("cli-color");
const _ = require("lodash");
const command_1 = require("../command");
const resolveSource_1 = require("../extensions/resolveSource");
const extensionsApi = require("../extensions/extensionsApi");
const extensionsHelper_1 = require("../extensions/extensionsHelper");
const logger = require("../logger");
const requirePermissions_1 = require("../requirePermissions");
const utils = require("../utils");
const marked = require("marked");
const TerminalRenderer = require("marked-terminal");
const FUNCTION_TYPE_REGEX = /\..+\.function/;
exports.default = new command_1.Command("ext:info <extensionName>")
.description("display information about an extension by name (extensionName@x.y.z for a specific version)")
.option("--markdown", "output info in Markdown suitable for constructing a README file")
.before(requirePermissions_1.requirePermissions, ["firebasemods.sources.get"])
.before(extensionsHelper_1.ensureExtensionsApiEnabled)
.action((extensionName, options) => __awaiter(this, void 0, void 0, function* () {
const sourceUrl = yield resolveSource_1.resolveSource(extensionName);
const source = yield extensionsApi.getSource(sourceUrl);
const spec = source.spec;
if (!options.markdown) {
utils.logLabeledBullet(extensionsHelper_1.logPrefix, `information about ${extensionName}:\n`);
}
const lines = [];
if (options.markdown) {
lines.push(`# ${spec.displayName}`);
}
else {
lines.push(`**Name**: ${spec.displayName}`);
}
if (spec.description) {
lines.push(`**Description**: ${spec.description}`);
}
if (spec.preinstallContent) {
lines.push("", `**Details**: ${spec.preinstallContent}`);
}
if (spec.params && Array.isArray(spec.params) && spec.params.length > 0) {
lines.push("", "**Configuration Parameters:**");
_.forEach(spec.params, (param) => {
lines.push(`* ${param.label}` + (param.description ? `: ${param.description}` : ""));
});
}
const functions = [];
const otherResources = [];
_.forEach(spec.resources, (resource) => {
if (FUNCTION_TYPE_REGEX.test(resource.type)) {
functions.push(resource);
}
else {
otherResources.push(resource);
}
});
if (functions.length > 0) {
lines.push("", "**Cloud Functions:**");
_.forEach(functions, (func) => {
lines.push(`* **${func.name}:** ${func.description}`);
});
}
if (otherResources.length > 0) {
lines.push("", "**Other Resources**:");
_.forEach(otherResources, (resource) => {
lines.push(`* ${resource.name} (${resource.type})`);
});
}
if (spec.apis) {
lines.push("", "**APIs Used**:");
_.forEach(spec.apis, (api) => {
lines.push(`* ${api.apiName}` + (api.reason ? ` (Reason: ${api.reason})` : ""));
});
}
if (spec.roles) {
lines.push("", "**Access Required**:");
lines.push("", "This extension will operate with the following project IAM roles:");
_.forEach(spec.roles, (role) => {
lines.push(`* ${role.role}` + (role.reason ? ` (Reason: ${role.reason})` : ""));
});
}
if (options.markdown) {
logger.info(lines.join("\n\n"));
}
else {
marked.setOptions({
renderer: new TerminalRenderer(),
});
logger.info(marked(lines.join("\n")));
utils.logLabeledBullet(extensionsHelper_1.logPrefix, `to install this extension, type ` +
clc.bold(`firebase ext:install ${extensionName} --project=YOUR_PROJECT`));
}
}));