apemandb
Version:
Database for apeman project.
41 lines (36 loc) • 1.16 kB
JavaScript
/**
* Require addons from files.
* @function fromFiles
*/
const aglob = require('aglob')
const colorprint = require('colorprint')
const path = require('path')
const { pascalcase } = require('stringcase')
/** @lends fromFiles */
function fromFiles (models, pattern) {
let addons = {}
aglob.sync(pattern)
.filter((filename) => !/^_/.test(path.basename(filename)))
.forEach((filename) => {
let basename = path.basename(filename, path.extname(filename))
let modelName = pascalcase(basename.replace(/[\._]addon$/, ''))
let isKnownModel = models.hasOwnProperty(modelName)
if (!isKnownModel) {
colorprint.warn(`[apemandb] Skip addon for unknown model: ${modelName}`)
return
}
let Model = models[ modelName ]
let addon = require(path.resolve(filename))
for (let name of Object.keys(addon)) {
let conflict = !!Model[ name ]
if (conflict) {
throw new Error(`"${name}" is already defined in model: ${modelName}`)
}
}
Object.assign(Model, addon)
addons[ modelName ] = addon
})
return addons
}
module.exports = fromFiles