forked from dienianindya/gsi_ess_mobile
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
118 lines
4.9 KiB
118 lines
4.9 KiB
"use strict";
|
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
exports.command = void 0;
|
|
const clc = require("colorette");
|
|
const checkMinRequiredVersion_1 = require("../checkMinRequiredVersion");
|
|
const command_1 = require("../command");
|
|
const extensionsApi = require("../extensions/extensionsApi");
|
|
const extensionsHelper_1 = require("../extensions/extensionsHelper");
|
|
const localHelper_1 = require("../extensions/localHelper");
|
|
const logger_1 = 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.command = 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(checkMinRequiredVersion_1.checkMinRequiredVersion, "extMinVersion")
|
|
.action(async (extensionName, options) => {
|
|
var _a, _b;
|
|
let spec;
|
|
if ((0, localHelper_1.isLocalExtension)(extensionName)) {
|
|
if (!options.markdown) {
|
|
utils.logLabeledBullet(extensionsHelper_1.logPrefix, `reading extension from directory: ${extensionName}`);
|
|
}
|
|
spec = await (0, localHelper_1.getLocalExtensionSpec)(extensionName);
|
|
}
|
|
else {
|
|
await (0, requirePermissions_1.requirePermissions)(options, ["firebaseextensions.sources.get"]);
|
|
await (0, extensionsHelper_1.ensureExtensionsApiEnabled)(options);
|
|
const hasPublisherId = extensionName.split("/").length >= 2;
|
|
if (hasPublisherId) {
|
|
const nameAndVersion = extensionName.split("/")[1];
|
|
if (nameAndVersion.split("@").length < 2) {
|
|
extensionName = extensionName + "@latest";
|
|
}
|
|
}
|
|
else {
|
|
const [name, version] = extensionName.split("@");
|
|
extensionName = `firebase/${name}@${version || "latest"}`;
|
|
}
|
|
const version = await extensionsApi.getExtensionVersion(extensionName);
|
|
spec = version.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}`);
|
|
}
|
|
const authorName = (_a = spec.author) === null || _a === void 0 ? void 0 : _a.authorName;
|
|
const url = (_b = spec.author) === null || _b === void 0 ? void 0 : _b.url;
|
|
const urlMarkdown = url ? `(**[${url}](${url})**)` : "";
|
|
lines.push(`**Author**: ${authorName} ${urlMarkdown}`);
|
|
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:**");
|
|
for (const param of spec.params) {
|
|
lines.push(`* ${param.label}` + (param.description ? `: ${param.description}` : ""));
|
|
}
|
|
}
|
|
const functions = [];
|
|
const otherResources = [];
|
|
for (const resource of spec.resources) {
|
|
if (FUNCTION_TYPE_REGEX.test(resource.type)) {
|
|
functions.push(resource);
|
|
}
|
|
else {
|
|
otherResources.push(resource);
|
|
}
|
|
}
|
|
if (functions.length > 0) {
|
|
lines.push("", "**Cloud Functions:**");
|
|
for (const func of functions) {
|
|
lines.push(`* **${func.name}:** ${func.description}`);
|
|
}
|
|
}
|
|
if (otherResources.length > 0) {
|
|
lines.push("", "**Other Resources**:");
|
|
for (const resource of otherResources) {
|
|
lines.push(`* ${resource.name} (${resource.type})`);
|
|
}
|
|
}
|
|
if (spec.apis) {
|
|
lines.push("", "**APIs Used**:");
|
|
for (const api of spec.apis) {
|
|
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:");
|
|
for (const role of spec.roles) {
|
|
lines.push(`* ${role.role}` + (role.reason ? ` (Reason: ${role.reason})` : ""));
|
|
}
|
|
}
|
|
if (options.markdown) {
|
|
logger_1.logger.info(lines.join("\n\n"));
|
|
}
|
|
else {
|
|
marked.setOptions({
|
|
renderer: new TerminalRenderer(),
|
|
});
|
|
logger_1.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`));
|
|
}
|
|
});
|