mongoose-management
Version:
Mongoose schemas management tool
92 lines (91 loc) • 4.17 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());
});
};
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;