UNPKG

mongoose-management

Version:
92 lines (91 loc) 4.17 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()); }); }; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); const chalk_1 = __importDefault(require("chalk")); const column_1 = __importDefault(require("../dataset/column")); const column_2 = __importDefault(require("../menu/column")); const column_3 = __importDefault(require("../prompts/column")); const abstract_1 = __importDefault(require("./abstract")); class ColumnLevel extends abstract_1.default { constructor(dataset, options) { super(dataset, new column_2.default(options.prompts), options); this.promptCreate = column_3.default; this.promptEdit = column_3.default; } create(action) { const _super = Object.create(null, { create: { get: () => super.create } }); return __awaiter(this, void 0, void 0, function* () { const dataset = yield _super.create.call(this, action); if (dataset && dataset.get('type') !== 'array' && dataset.get('type') !== 'object') { return undefined; } return dataset; }); } remove(dataset) { const _super = Object.create(null, { remove: { get: () => super.remove } }); return __awaiter(this, void 0, void 0, function* () { if (dataset.getColumns().length > 0) { throw new Error('There are still subcolumns. These must be deleted first!'); } const subColumns = dataset.flatColumns().concat(dataset); const populates = dataset .getCollection() .getPopulates() // ignore references from subcolumns .filter((c) => subColumns.indexOf(c) === -1) // ignore columns that are not this column or subcolumns .filter((c) => { const populate = c.getPopulate(); return populate instanceof column_1.default && subColumns.indexOf(populate) >= 0; }) .map((c) => `- ${chalk_1.default.bold(c.getCollection().getName())}.${c.getFullname(false, false)}`); if (populates.length > 0) { throw new Error([ 'This nested schema is referenced by other column(s):', '', ...populates, '', 'The references must first be deleted', ].join('\n')); } const name = dataset.getFullname(false, false); const index = dataset.getIndex(); const indexes = dataset .getCollection() .getIndexes() .filter((i) => i !== index && i.hasColumn(name)); if (indexes.length > 0) { const messages = [ 'Indexes still exist for the column. These must be deleted first!', '', 'The following indexes contain the column:', ].concat(indexes.map((i) => `- ${i.getName()}`)); throw new Error(messages.join('\n')); } const result = yield _super.remove.call(this, dataset); return result; }); } show(dataset) { return __awaiter(this, void 0, void 0, function* () { const level = new ColumnLevel(dataset, this.options); yield level.exec(); }); } } exports.default = ColumnLevel;