UNPKG

apemandb

Version:
41 lines (36 loc) 1.16 kB
/** * Require addons from files. * @function fromFiles */ 'use strict' 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