123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118 |
- "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`));
- }
- });
|