apemandb
Version:
Database for apeman project.
37 lines (32 loc) • 1.01 kB
JavaScript
/**
* Require hooks 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 hooks = {}
aglob.sync(pattern)
.filter((filename) => !/^_/.test(path.basename(filename)))
.forEach((filename) => {
let basename = path.basename(filename, path.extname(filename))
let modelName = pascalcase(basename.replace(/[\._]hook$/, ''))
let isKnownModel = models.hasOwnProperty(modelName)
if (!isKnownModel) {
colorprint.warn(`[apemandb] Skip hooking for unknown model: ${modelName}`)
return
}
let Model = models[ modelName ]
let hook = require(path.resolve(filename))
for (let name of Object.keys(hook)) {
Model.hook(name, hook[ name ])
}
hooks[ modelName ] = hook
})
return hooks
}
module.exports = fromFiles