mongoose-management
Version:
Mongoose schemas management tool
78 lines (77 loc) • 2.32 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
const abstract_1 = __importDefault(require("./abstract"));
/**
*
*/
class ConverterObject extends abstract_1.default {
/**
*
* @param column
*/
columnToTypes(columns) {
if (columns.length === 0) {
return this.converter.converterCommon.columnToTypes({ name: '', type: 'object' });
}
return this.switchers(columns, 'columnToTypes');
}
/**
*
* @param column
*/
columnToDefinitions(columns) {
if (columns.length === 0) {
return this.converter.converterCommon.columnToDefinitions({ name: '', type: 'object' });
}
return this.switchers(columns, 'columnToDefinitions');
}
/**
*
* @param columns
*/
columnToVirtuals(columns) {
return this.switchers(columns, 'columnToVirtuals');
}
/**
*
* @param columns
* @param funcs
*/
switchers(columns, funcs) {
const items = columns.map((column) => [
column.name,
this.switcher(column, funcs).trim(),
funcs === 'columnToTypes' && !column.required ? '?' : '',
]);
return `{ ${items
.filter((v) => v[1] !== '')
.map(([k, v, r]) => `'${k}'${r}: ${v}`)
.join(', ')} }`;
}
/**
*
* @param column
* @param funcs
*/
switcher(column, funcs) {
switch (column.type) {
case '2dsphere':
return this.converter.converter2dSphere[funcs]();
case 'arrayType':
return this.converter.converterArrayType[funcs](column);
case 'array':
return this.converter.converterArray[funcs](column);
case 'object':
if (!Array.isArray(column.subColumns)) {
throw new Error('SubColumns are not defined!');
}
return this.converter.converterObject[funcs](column.subColumns);
default:
return this.converter.converterCommon[funcs](column);
}
}
}
exports.default = ConverterObject;