UNPKG

mongoose-management

Version:
71 lines (70 loc) 2.9 kB
"use strict"; 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; };