@rezakalfane/dc-cli
Version:
Dynamic Content CLI Tool
96 lines (95 loc) • 4.98 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
const file_log_1 = require("../../common/file-log");
const log_helpers_1 = require("../../common/log-helpers");
const archive_helpers_1 = require("../../common/archive/archive-helpers");
const fs_1 = require("fs");
const util_1 = require("util");
const fetch_client_service_class_1 = require("../../services/fetch-client-service-class");
exports.command = 'import <filePath>';
exports.desc = 'Import Indexes';
exports.LOG_FILENAME = (platform = process.platform) => log_helpers_1.getDefaultLogPath('indexes', 'import', platform);
exports.builder = (yargs) => {
yargs
.positional('filePath', {
describe: 'Source file path containing Indexes definition',
type: 'string'
})
.option('logFile', {
type: 'string',
default: exports.LOG_FILENAME,
describe: 'Path to a log file to write to.'
})
.alias('f', 'force')
.option('f', {
type: 'boolean',
boolean: true,
describe: 'Overwrite indexes without asking.'
});
};
exports.handler = async (argv) => {
const { filePath: sourceFile, logFile, force, answer = true } = argv;
const fetchClient = new fetch_client_service_class_1.FetchClientService();
await fetchClient.init(argv);
const publishedIndexes = await fetchClient.getIndexesList();
const log = typeof logFile === 'string' || logFile == null ? new file_log_1.FileLog(logFile) : logFile;
try {
const exportedIndexes = await util_1.promisify(fs_1.readFile)(sourceFile, { encoding: 'utf8' });
let importIndexes = JSON.parse(exportedIndexes);
const publishedIndexesIDs = publishedIndexes.map((x) => x.id);
const importIndexesIDs = importIndexes.map((x) => x.id);
const alreadyExists = publishedIndexesIDs.filter((x) => importIndexesIDs.includes(x));
if (alreadyExists.length > 0) {
const question = !force
? await archive_helpers_1.asyncQuestion(`${alreadyExists.length}/${importIndexesIDs.length} of the indexes being imported already exist in the hub. Would you like to re-create these indexes instead of skipping them? (y/n) `)
: answer;
const updateExisting = question || force;
if (!updateExisting) {
importIndexes = importIndexes.filter((item) => !publishedIndexesIDs.includes(item.id));
}
}
await Promise.all(importIndexes.map(async (item) => {
const exists = publishedIndexesIDs.includes(item.id) ? item.id : undefined;
if (exists) {
console.log(`Deleting index and replicas: ${exists}`);
const deletedIndexIds = await fetchClient.deleteIndexAndReplicas(exists);
console.log(`...Index and replicas deleted for IDs: ${deletedIndexIds}`);
console.log();
log.addAction('DELETE INDEX', deletedIndexIds.join(","));
}
delete item.indexDetails.id;
delete item.indexDetails.replicaCount;
console.log(`Creating index for index name: ${item.indexDetails.name}`);
const createdIndexId = await fetchClient.createIndex(item.indexDetails);
console.log(`...Index created with ID: ${createdIndexId}`);
log.addAction('CREATE INDEX', createdIndexId || '');
console.log(`\nUpdating index settings for ID: ${createdIndexId}`);
const updatedIndexId = await fetchClient.updateIndexSettings(createdIndexId, item.settings);
console.log(`...Index settings updated for ID: ${updatedIndexId}`);
log.addAction('UPDATE INDEX SETTINGS', updatedIndexId || '');
const replicasSettings = item.replicasSettings;
console.log(`\nGetting replica index details from names: ${replicasSettings
.map((x) => x.name)
.join(",")}`);
const replicasIndexes = await Promise.all(replicasSettings.map((item) => fetchClient.getIndexByName(item.name)));
console.log(`...Retrieved replica index details for IDs: ${replicasIndexes
.map((x) => x.id)
.join(",")}`);
console.log(`\nUpdating replicas settings for IDs: ${replicasIndexes
.map((x) => x.id)
.join(",")}`);
const updatedReplicasSettingsIds = await Promise.all(replicasIndexes.map((item, i) => fetchClient.updateIndexSettings(item.id, replicasSettings[i].settings)));
console.log(`...Updated replicas settings for IDs: ${updatedReplicasSettingsIds.join(",")}`);
console.log();
log.addAction('UPDATE INDEX SETTINGS', updatedReplicasSettingsIds.join(",") || '');
}));
log.appendLine('Done!');
if (log) {
await log.close();
}
process.stdout.write('\n');
}
catch (e) {
console.log(e);
}
};