mongoose-management
Version:
Mongoose schemas management tool
71 lines (70 loc) • 2.9 kB
JavaScript
;
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
Object.defineProperty(exports, "__esModule", { value: true });
const mongo_1 = require("../../mongo");
exports.call = (prompts, answersMain, collection, index) => __awaiter(this, void 0, void 0, function* () {
const questions = exports.getQuestions(answersMain, index);
const answersColumns = yield prompts.call(questions);
const answersNormalize = exports.normalizer(answersColumns);
collection.getIndexes().forEach((i) => {
if (i !== index && exports.equalIndexColumns(answersColumns, i.getColumns())) {
throw new Error(`An index with the column configuration already exists! (duplicate index: "${i.getName()}")`);
}
});
return answersNormalize;
});
exports.getQuestions = (answersMain, index) => {
const columns = index ? index.getColumnsNormalize() : {};
return answersMain.columns.map((column) => {
const name = column.getFullname(false, false);
const dValue = mongo_1.indexColumnValues.indexOf(columns[name]);
const choices = mongo_1.indexColumnValues.map((value) => ({ name: value, value: [column, value], short: value }));
return {
type: 'list',
name,
message: `Choose a index type for "${name}":`,
choices,
default: dValue,
};
});
};
exports.evaluation = (answers) => {
return (index) => {
index.setColumns(Object.values(answers));
return index;
};
};
exports.normalizer = (answers, names = []) => {
let data = {};
Object.keys(answers).forEach((key) => {
const value = answers[key];
if (Array.isArray(value)) {
data[[...names, key].join('.')] = value;
}
else {
data = Object.assign({}, data, exports.normalizer(value, [...names, key]));
}
});
return data;
};
exports.equalIndexColumns = (answers, columns) => {
const keys = Object.keys(answers);
if (keys.length !== columns.length) {
return false;
}
for (const [column, value] of columns) {
const name = column.getFullname(false, false);
const answer = answers[name];
if (!Array.isArray(answer) || answer[0] !== column || answer[1] !== value) {
return false;
}
}
return true;
};