@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