@amplience/dc-cli
Version:
Dynamic Content CLI Tool
92 lines (91 loc) • 4.32 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.handler = exports.processExtensions = exports.builder = exports.coerceLog = exports.LOG_FILENAME = exports.desc = exports.command = void 0;
const log_helpers_1 = require("../../common/log-helpers");
const dynamic_content_client_factory_1 = __importDefault(require("../../services/dynamic-content-client-factory"));
const paginator_1 = __importDefault(require("../../common/dc-management-sdk-js/paginator"));
const export_service_1 = require("../../services/export.service");
const question_helpers_1 = require("../../common/question-helpers");
const progress_bar_1 = require("../../common/progress-bar/progress-bar");
const extension_helpers_1 = require("../../common/extension/extension-helpers");
exports.command = 'delete [id]';
exports.desc = 'Delete Extensions';
const LOG_FILENAME = (platform = process.platform) => (0, log_helpers_1.getDefaultLogPath)('extension', 'delete', platform);
exports.LOG_FILENAME = LOG_FILENAME;
const coerceLog = (logFile) => (0, log_helpers_1.createLog)(logFile, 'Extensions Delete Log');
exports.coerceLog = coerceLog;
const builder = (yargs) => {
yargs
.positional('id', {
type: 'string',
describe: 'The ID of the extension to be deleted. If id is not provided, this command will delete ALL extensions in the hub.'
})
.alias('f', 'force')
.option('f', {
type: 'boolean',
boolean: true,
describe: 'If present, there will be no confirmation prompt before deleting the found extensions.'
})
.option('logFile', {
type: 'string',
default: exports.LOG_FILENAME,
describe: 'Path to a log file to write to.',
coerce: exports.coerceLog
});
};
exports.builder = builder;
const processExtensions = async (extensionsToDelete, log) => {
const failedExtensions = [];
const progress = (0, progress_bar_1.progressBar)(extensionsToDelete.length, 0, {
title: `Deleting ${extensionsToDelete.length} extensions.`
});
for (const [i, extension] of extensionsToDelete.entries()) {
try {
await extension.related.delete();
log.addComment(`Successfully deleted "${extension.label}"`);
progress.increment();
}
catch (e) {
failedExtensions.push(extension);
extensionsToDelete.splice(i, 1);
log.addComment(`Failed to delete ${extension.label}: ${e.toString()}`);
progress.increment();
}
}
progress.stop();
if (failedExtensions.length > 0) {
log.appendLine(`Failed to delete ${failedExtensions.length} extensions`);
}
};
exports.processExtensions = processExtensions;
const handler = async (argv) => {
const { id, logFile, force } = argv;
const client = (0, dynamic_content_client_factory_1.default)(argv);
const allExtensions = !id;
const hub = await client.hubs.get(argv.hubId);
const storedExtensions = await (0, paginator_1.default)(hub.related.extensions.list);
const idArray = id ? (Array.isArray(id) ? id : [id]) : [];
const extensionsToDelete = (0, extension_helpers_1.filterExtensionsById)(storedExtensions, idArray, true);
const log = logFile.open();
if (extensionsToDelete.length === 0) {
(0, export_service_1.nothingExportedExit)(log, 'No extensions to delete from this hub, exiting.');
return;
}
if (!force) {
const baseMessage = 'This action cannot be undone. Are you sure you want to continue? (Y/n)\n';
const yes = await (0, question_helpers_1.asyncQuestion)(allExtensions
? `Providing no ID/s will permanently delete ALL extensions! ${baseMessage}`
: `${extensionsToDelete.length} extensions will be permanently deleted. ${baseMessage}`);
if (!yes) {
return;
}
}
log.addComment(`Deleting ${extensionsToDelete.length} extensions.`);
await (0, exports.processExtensions)(extensionsToDelete, log);
log.appendLine(`Finished successfully deleting ${extensionsToDelete.length} extensions`);
await log.close();
};
exports.handler = handler;