mongoose-management
Version:
Mongoose schemas management tool
72 lines (71 loc) • 2.55 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
const fs_1 = __importDefault(require("fs"));
const util_1 = require("util");
const access = util_1.promisify(fs_1.default.access);
exports.readFile = util_1.promisify(fs_1.default.readFile);
exports.writeFile = util_1.promisify(fs_1.default.writeFile);
exports.copy = util_1.promisify(fs_1.default.copyFile);
exports.mkdir = util_1.promisify(fs_1.default.mkdir);
exports.exists = (path) => access(path, fs_1.default.constants.F_OK);
exports.writable = (path) => access(path, fs_1.default.constants.W_OK);
/**
*
* @param name
* @param definitions
* @param extensions
*/
exports.mergeSchema = (name, definitions, extensions) => {
const keys = Object.keys(definitions);
const schema = {};
for (const key of keys) {
const definition = definitions[key];
const extension = extensions[key];
schema[key] = Array.isArray(definition)
? [exports.mergeSchemaSubdocuments(name, key, definition[0], extension)]
: exports.mergeSchemaDefinition(name, key, definition, extension);
}
return schema;
};
/**
*
* @param name
* @param key
* @param definition
* @param extension
*/
exports.mergeSchemaSubdocuments = (name, key, definition, extension) => {
if (!extension) {
return definition;
}
if (!Array.isArray(extension)) {
throw new Error(`The (sub)column "${key}" in the extended schema object is not an object or array. (collection: ${name})`);
}
if (extension.length !== 1) {
throw new Error(`The array of the column "${key}" for the subschema must contain only one element. (collection: ${name})`);
}
return exports.mergeSchema(name, definition, extension[0]);
};
/**
*
* @param name
* @param key
* @param definition
* @param extension
*/
exports.mergeSchemaDefinition = (name, key, definition, extension) => {
if (!extension) {
// extension is undefined;
return definition;
}
if (typeof extension !== 'object' || Array.isArray(extension)) {
throw new Error(`The (sub)column "${key}" in the extended schema object is not an object or array. (collection: ${name})`);
}
if (extension.type) {
throw new Error(`The object of the column "${key}" must not contain the key "type". (collection: ${name})`);
}
return Object.assign({}, definition, extension);
};