diff --git a/src/commands/functions-kits-list.ts b/src/commands/functions-kits-list.ts new file mode 100644 index 00000000000..4b34fe1a768 --- /dev/null +++ b/src/commands/functions-kits-list.ts @@ -0,0 +1,27 @@ +import { requireConfig } from "../requireConfig"; +import { Command } from "../command"; +import { listKitConfigs } from "../functions/kits/config"; +import { Options } from "../options"; +import { logLabeledBullet } from "../utils"; +import { logger } from "../logger"; +import * as Table from "cli-table3"; + +export const command = new Command("functions:kits:list") + .description("list all the kits that are installed in your firebase.json") + .before(requireConfig) + .action((options: Options) => { + const firebaseConfig = options.config; + const validatedConfig = firebaseConfig.src; + const kitConfigs = listKitConfigs(validatedConfig); + if (kitConfigs.length < 1) { + logLabeledBullet("functions", `there are no kits in firebase.json`); + return; + } + + const table = new Table({ head: ["Kit", "Instances"], style: { head: ["yellow"] } }); + for (const kitConfig of kitConfigs) { + const instanceIds = Object.keys(kitConfig.instances); + table.push([kitConfig.kit, instanceIds.join(", ")]); + } + logger.info(table.toString()); + }); diff --git a/src/commands/index.ts b/src/commands/index.ts index 213f9b33c84..6108b3b8a38 100644 --- a/src/commands/index.ts +++ b/src/commands/index.ts @@ -201,6 +201,7 @@ export function load(client: CLIClient): CLIClient { if (experiments.isEnabled("kits")) { client.functions.kits = {}; client.functions.kits.install = loadCommand("functions-kits-install"); + client.functions.kits.list = loadCommand("functions-kits-list"); } client.help = loadCommand("help"); client.hosting = {}; diff --git a/src/functions/kits/config.ts b/src/functions/kits/config.ts new file mode 100644 index 00000000000..8e0c74f4d15 --- /dev/null +++ b/src/functions/kits/config.ts @@ -0,0 +1,10 @@ +import { FirebaseConfig } from "../../firebaseConfig"; +import { ValidatedKitSingle, normalizeAndValidate, isKitConfig } from "../projectConfig"; + +/** + * Extracts only the Kit configs from a parsed Firebase.json. + */ +export function listKitConfigs(config: FirebaseConfig): ValidatedKitSingle[] { + const normalized = normalizeAndValidate(config.functions); + return normalized.filter((s) => isKitConfig(s)); +}