@aws-amplify/cli-internal
Version:
Amplify CLI
114 lines • 6.16 kB
JavaScript
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
;