1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495 |
- "use strict";
- Object.defineProperty(exports, "__esModule", { value: true });
- exports.command = void 0;
- const clc = require("colorette");
- const functionsConfig = require("../functionsConfig");
- const command_1 = require("../command");
- const error_1 = require("../error");
- const projectUtils_1 = require("../projectUtils");
- const prompt_1 = require("../prompt");
- const functional_1 = require("../functional");
- const requirePermissions_1 = require("../requirePermissions");
- const helper = require("../deploy/functions/functionsDeployHelper");
- const utils = require("../utils");
- const backend = require("../deploy/functions/backend");
- const planner = require("../deploy/functions/release/planner");
- const fabricator = require("../deploy/functions/release/fabricator");
- const executor = require("../deploy/functions/release/executor");
- const reporter = require("../deploy/functions/release/reporter");
- const containerCleaner = require("../deploy/functions/containerCleaner");
- const getProjectNumber_1 = require("../getProjectNumber");
- exports.command = new command_1.Command("functions:delete [filters...]")
- .description("delete one or more Cloud Functions by name or group name.")
- .option("--region <region>", "Specify region of the function to be deleted. " +
- "If omitted, functions from all regions whose names match the filters will be deleted. ")
- .withForce()
- .before(requirePermissions_1.requirePermissions, ["cloudfunctions.functions.list", "cloudfunctions.functions.delete"])
- .action(async (filters, options) => {
- if (!filters.length) {
- return utils.reject("Must supply at least function or group name.");
- }
- const context = {
- projectId: (0, projectUtils_1.needProjectId)(options),
- filters: filters.map((f) => ({ idChunks: f.split(/[-.]/) })),
- };
- const [config, existingBackend] = await Promise.all([
- functionsConfig.getFirebaseConfig(options),
- backend.existingBackend(context),
- ]);
- await backend.checkAvailability(context, backend.empty());
- const appEngineLocation = functionsConfig.getAppEngineLocation(config);
- if (options.region) {
- existingBackend.endpoints = { [options.region]: existingBackend.endpoints[options.region] };
- }
- const plan = planner.createDeploymentPlan({
- wantBackend: backend.empty(),
- haveBackend: existingBackend,
- codebase: "",
- filters: context.filters,
- deleteAll: true,
- });
- const allEpToDelete = Object.values(plan)
- .map((changes) => changes.endpointsToDelete)
- .reduce(functional_1.reduceFlat, [])
- .sort(backend.compareFunctions);
- if (allEpToDelete.length === 0) {
- throw new error_1.FirebaseError(`The specified filters do not match any existing functions in project ${clc.bold(context.projectId)}.`);
- }
- const deleteList = allEpToDelete.map((func) => `\t${helper.getFunctionLabel(func)}`).join("\n");
- const confirmDeletion = await (0, prompt_1.promptOnce)({
- type: "confirm",
- name: "force",
- default: false,
- message: "You are about to delete the following Cloud Functions:\n" +
- deleteList +
- "\n Are you sure?",
- }, options);
- if (!confirmDeletion) {
- throw new error_1.FirebaseError("Command aborted.");
- }
- const functionExecutor = new executor.QueueExecutor({
- retries: 30,
- backoff: 20000,
- concurrency: 40,
- maxBackoff: 40000,
- });
- try {
- const fab = new fabricator.Fabricator({
- functionExecutor,
- appEngineLocation,
- executor: new executor.QueueExecutor({}),
- sources: {},
- projectNumber: options.projectNumber || (await (0, getProjectNumber_1.getProjectNumber)({ projectId: context.projectId })),
- });
- const summary = await fab.applyPlan(plan);
- await reporter.logAndTrackDeployStats(summary);
- reporter.printErrors(summary);
- }
- catch (err) {
- throw new error_1.FirebaseError("Failed to delete functions", {
- original: err,
- exit: 1,
- });
- }
- await containerCleaner.cleanupBuildImages([], allEpToDelete);
- });
|