UNPKG

@aws-amplify/cli-internal

Version:
114 lines 6.16 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.removeResource = exports.forceRemoveResource = void 0; const amplify_cli_core_1 = require("@aws-amplify/amplify-cli-core"); const amplify_prompts_1 = require("@aws-amplify/amplify-prompts"); const lodash_1 = __importDefault(require("lodash")); const envResourceParams_1 = require("./envResourceParams"); const update_backend_config_1 = require("./update-backend-config"); async function forceRemoveResource(context, category, resourceName, resourceDir) { const amplifyMeta = amplify_cli_core_1.stateManager.getMeta(); if (!amplifyMeta[category] || Object.keys(amplifyMeta[category]).length === 0) { amplify_prompts_1.printer.error('No resources added for this category'); await context.usageData.emitError(new amplify_cli_core_1.ResourceDoesNotExistError('No resources added for this category')); (0, amplify_cli_core_1.exitOnNextTick)(1); } amplify_prompts_1.printer.info(`Removing resource ${resourceName}...`); let response; try { response = await deleteResourceFiles(context, category, resourceName, resourceDir, true); } catch (e) { amplify_prompts_1.printer.error('Unable to force removal of resource: error deleting files'); } return response; } exports.forceRemoveResource = forceRemoveResource; async function removeResource(context, category, resourceName, options = { headless: false }, resourceNameCallback) { var _a; const amplifyMeta = amplify_cli_core_1.stateManager.getMeta(); if (!amplifyMeta[category] || Object.keys(amplifyMeta[category]).filter((r) => amplifyMeta[category][r].mobileHubMigrated !== true).length === 0) { throw new amplify_cli_core_1.AmplifyError('ResourceRemoveError', { message: 'No resources added for this category' }); } let enabledCategoryResources = Object.keys(amplifyMeta[category]).filter((r) => amplifyMeta[category][r].mobileHubMigrated !== true); if (resourceName) { if (!enabledCategoryResources.includes(resourceName)) { throw new amplify_cli_core_1.AmplifyError('ResourceRemoveError', { message: `Resource ${resourceName} has not been added to ${category}` }); } } else { if (options.serviceSuffix) { enabledCategoryResources = enabledCategoryResources.map((resource) => { const service = lodash_1.default.get(amplifyMeta, [category, resource, 'service']); const suffix = lodash_1.default.get(options, ['serviceSuffix', service], ''); return { name: `${resource} ${suffix}`, value: resource }; }); } resourceName = await amplify_prompts_1.prompter.pick('Choose the resource you would want to remove', enabledCategoryResources); } if (resourceNameCallback) { await resourceNameCallback(resourceName); } const resourceDir = amplify_cli_core_1.pathManager.getResourceDirectoryPath(undefined, category, resourceName); if (options.headless !== true) { amplify_prompts_1.printer.blankLine(); const service = lodash_1.default.get(amplifyMeta, [category, resourceName, 'service']); const serviceType = lodash_1.default.get(amplifyMeta, [category, resourceName, 'serviceType']); if ((_a = options === null || options === void 0 ? void 0 : options.serviceDeletionInfo) === null || _a === void 0 ? void 0 : _a[service]) { amplify_prompts_1.printer.info(options.serviceDeletionInfo[service]); } const confirm = await (0, amplify_cli_core_1.promptConfirmationRemove)(context, serviceType); if (!confirm) { return undefined; } } try { return await deleteResourceFiles(context, category, resourceName, resourceDir); } catch (err) { if (err instanceof amplify_cli_core_1.AmplifyException) { throw err; } throw new amplify_cli_core_1.AmplifyFault('ResourceRemoveFault', { message: 'An error occurred when removing the resources from the local directory' }, err); } } exports.removeResource = removeResource; const deleteResourceFiles = async (context, category, resourceName, resourceDir, force = false) => { const amplifyMeta = amplify_cli_core_1.stateManager.getMeta(); if (!force) { const { allResources } = await context.amplify.getResourceStatus(); allResources.forEach((resourceItem) => { if (resourceItem.dependsOn) { for (const dependsOnItem of resourceItem.dependsOn) { if (dependsOnItem.category === category && dependsOnItem.resourceName === resourceName) { throw new amplify_cli_core_1.AmplifyError('ResourceRemoveError', { message: 'Resource cannot be removed because it has a dependency on another resource', details: `Dependency: ${resourceItem.service} - ${resourceItem.resourceName}. Remove the dependency first.`, }); } } } }); } const serviceName = amplifyMeta[category][resourceName].service; const resourceValues = { service: serviceName, resourceName, }; if (amplifyMeta[category][resourceName] !== undefined) { delete amplifyMeta[category][resourceName]; } amplify_cli_core_1.stateManager.setMeta(undefined, amplifyMeta); const stackBuildDir = amplify_cli_core_1.pathManager.getStackBuildCategoryResourceDirPath('', category, resourceName); context.filesystem.remove(resourceDir); context.filesystem.remove(stackBuildDir); (0, envResourceParams_1.removeResourceParameters)(context, category, resourceName); (0, update_backend_config_1.updateBackendConfigAfterResourceRemove)(category, resourceName); amplify_prompts_1.printer.success('Successfully removed resource'); return resourceValues; }; //# sourceMappingURL=remove-resource.js.map