UNPKG

mongoose-management

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