@forge/cli

12.9.0-next.18-experimental-f76634b12.9.0-next.23
out/command-line/register-webtrigger-commands.js
~out/command-line/register-webtrigger-commands.jsModified
+56−12
Index: package/out/command-line/register-webtrigger-commands.js
===================================================================
--- package/out/command-line/register-webtrigger-commands.js
+++ package/out/command-line/register-webtrigger-commands.js
@@ -12,9 +12,9 @@
         }
     }
     return output;
 };
-async function getValidWebtriggers(configFile) {
+async function getValidManifestWebtriggers(configFile) {
     const manifest = await configFile.readConfig();
     const availableWebTriggers = getAvailableWebTriggers(manifest);
     if (!availableWebTriggers.size) {
         throw new cli_shared_2.ValidationError(cli_shared_1.Text.webtrigger.error.noWebtriggers);
@@ -22,22 +22,27 @@
     return availableWebTriggers;
 }
 function manifestDefinesTriggers(configFile) {
     return async () => {
-        await getValidWebtriggers(configFile);
+        await getValidManifestWebtriggers(configFile);
     };
 }
-async function validateWebtriggerKey(ui, configFile, functionKey) {
-    const availableWebTriggers = await getValidWebtriggers(configFile);
+async function validateWebtriggerKey(ui, configFile, extensionsService, installationId, functionKey) {
+    const deployedWebTriggers = await extensionsService.getWebtriggerExtensions(installationId);
+    const localWebTriggers = await getValidManifestWebtriggers(configFile);
     if (functionKey) {
-        if (!availableWebTriggers.has(functionKey)) {
+        const isDefinedLocally = localWebTriggers.has(functionKey);
+        const isDeployed = deployedWebTriggers.includes(functionKey);
+        if (!isDefinedLocally && !isDeployed) {
             throw new cli_shared_2.ValidationError(cli_shared_1.Text.webtrigger.error.funcKey);
         }
+        if (!isDeployed) {
+            throw new cli_shared_2.ValidationError(cli_shared_1.Text.webtrigger.error.missingWebtriggerForInstallation(functionKey));
+        }
         return functionKey;
     }
     else {
-        const values = [...availableWebTriggers.values()];
-        return await ui.promptForList(cli_shared_1.Text.webtrigger.promptFuncKey, values);
+        return await ui.promptForList(cli_shared_1.Text.webtrigger.promptFuncKey, deployedWebTriggers);
     }
 }
 async function getInstallation(ui, installationsService, context, textConfig) {
     const { site, product, environment } = context;
@@ -60,15 +65,15 @@
         return (0, installation_helper_1.validateInstallationId)(installation.id);
     }
 }
 async function webtriggerCreateAction(deps, { functionKey, site, environment, product }) {
-    const { ui, configFile, services: { installationsService }, commands: { getWebTriggerURLCommand } } = deps;
+    const { ui, configFile, services: { installationsService, extensionsService }, commands: { getWebTriggerURLCommand } } = deps;
     const selectedInstallationId = await getInstallation(ui, installationsService, { site, product, environment }, {
         interactiveTablePrompt: cli_shared_1.Text.webtrigger.promptInstallationTable,
         interactiveTableOverview: cli_shared_1.Text.webtrigger.overViewInstallationTable,
         providedContextOverview: cli_shared_1.Text.webtrigger.overviewFuncKey
     });
-    const url = await getWebTriggerURLCommand.execute(selectedInstallationId, await validateWebtriggerKey(ui, configFile, functionKey));
+    const url = await getWebTriggerURLCommand.execute(selectedInstallationId, await validateWebtriggerKey(ui, configFile, extensionsService, selectedInstallationId, functionKey));
     ui.info(cli_shared_1.Text.webtrigger.copy(url));
 }
 function registerDeprecatedWebtriggerCreateCommand(deps) {
     deps.cmd
@@ -96,9 +101,9 @@
         .action(async (args) => {
         await webtriggerCreateAction(deps, args);
     });
 }
-function registerWebTriggerListCommand({ cmd, configFile, ui, services: { installationsService }, commands: { listWebTriggerURLCommand } }) {
+function registerWebtriggerListCommand({ cmd, configFile, ui, services: { installationsService, extensionsService }, commands: { listWebTriggerURLCommand } }) {
     cmd
         .command('list')
         .requireAppId()
         .description(cli_shared_1.Text.webtrigger.list.cmd)
@@ -114,9 +119,9 @@
         });
         let urls = await listWebTriggerURLCommand.execute(selectedInstallationId);
         let tablePreMessage = cli_shared_1.Text.webtrigger.list.tablePreMessage;
         if (functionKey) {
-            const validatedKey = await validateWebtriggerKey(ui, configFile, functionKey);
+            const validatedKey = await validateWebtriggerKey(ui, configFile, extensionsService, selectedInstallationId, functionKey);
             urls = urls.filter((url) => url.triggerKey === validatedKey);
             tablePreMessage = cli_shared_1.Text.webtrigger.list.listUrlsForKey(validatedKey);
         }
         ui.table([
@@ -125,12 +130,51 @@
             ['url', 'URL']
         ], urls, { preMessage: tablePreMessage, emptyMessage: cli_shared_1.Text.webtrigger.list.noWebtriggerURLs });
     });
 }
+function registerWebtriggerDeleteCommand({ cmd, ui, configFile, services: { installationsService }, commands: { deleteWebTriggerURLCommand, listWebTriggerURLCommand } }) {
+    cmd
+        .command('delete')
+        .requireAppId()
+        .description(cli_shared_1.Text.webtrigger.delete.cmd)
+        .option('-i, --webtriggerId <webtriggerId>', cli_shared_1.Text.webtrigger.delete.optionWebtriggerId)
+        .contextOption()
+        .environmentOption()
+        .precondition(manifestDefinesTriggers(configFile))
+        .action(async ({ site, environment, product, webtriggerId }) => {
+        const installation = await getInstallation(ui, installationsService, { site, product, environment }, {
+            interactiveTablePrompt: cli_shared_1.Text.webtrigger.promptInstallationTable,
+            interactiveTableOverview: cli_shared_1.Text.webtrigger.delete.interactive.overviewInstallationTable,
+            providedContextOverview: cli_shared_1.Text.webtrigger.delete.interactive.overviewProvidedContext
+        });
+        const urls = await listWebTriggerURLCommand.execute(installation);
+        let idToDelete = '';
+        if (!webtriggerId) {
+            const selectedUrlIndex = await ui.promptForSingleChoiceTable(cli_shared_1.Text.webtrigger.delete.interactive.desc, cli_shared_1.Text.webtrigger.delete.interactive.progressInfo, ['ID', 'Module Key', 'URL'], urls.map(({ id, triggerKey, url }) => ({
+                names: [id, triggerKey, url],
+                value: id,
+                primary: id
+            })));
+            idToDelete = urls[selectedUrlIndex].id;
+        }
+        else {
+            const targetUrl = urls.find((url) => url.id === webtriggerId);
+            if (!targetUrl) {
+                throw new cli_shared_2.ValidationError(cli_shared_1.Text.webtrigger.error.noMatchingIdForDeletion(webtriggerId));
+            }
+            idToDelete = targetUrl.id;
+        }
+        const { success } = await deleteWebTriggerURLCommand.execute(idToDelete);
+        if (success) {
+            ui.info(cli_shared_1.Text.webtrigger.delete.successfulDelete(idToDelete));
+        }
+    });
+}
 const registerCommands = (deps) => {
     const webtrigger = deps.cmd.command('webtrigger').description(cli_shared_1.Text.webtrigger.cmd);
     registerDeprecatedWebtriggerCreateCommand({ ...deps, cmd: webtrigger });
     registerWebtriggerCreateCommand({ ...deps, cmd: webtrigger });
-    registerWebTriggerListCommand({ ...deps, cmd: webtrigger });
+    registerWebtriggerListCommand({ ...deps, cmd: webtrigger });
+    registerWebtriggerDeleteCommand({ ...deps, cmd: webtrigger });
 };
 exports.registerCommands = registerCommands;
 //# sourceMappingURL=register-webtrigger-commands.js.map
\ No newline at end of file