UNPKG

apemanmodule

Version:
62 lines (55 loc) 1.64 kB
/** * @function _datasource */ 'use strict' const fs = require('fs') const path = require('path') const minimatch = require('minimatch') const stringcase = require('stringcase') const evaljson = require('evaljson') const isModule = require('./is_module') /** @lends _datasource */ function _datasource (dirname, options) { options = options || {} let vars = options.vars let pascalPatterns = [].concat(options.pascal || []) function _isPascal (name) { for (let pattern of pascalPatterns) { let hit = minimatch(name, pattern) if (hit) { return true } } return false } let datasource = {} fs.readdirSync(dirname) .filter((filename) => !/^index\./.test(filename)) .filter((filename) => !/\.jsx$/.test(filename)) .filter((filename) => !/^[\.\_]/.test(filename)) .map((filename) => path.resolve(dirname, filename)) .filter(isModule) .forEach((filename) => { let name = path.basename(filename, path.extname(filename)) let isPascal = _isPascal(path.basename(filename)) || _isPascal(name) || _isPascal(stringcase.pascalcase(name)) if (isPascal) { name = stringcase.pascalcase(name) } else { name = stringcase.camelcase(name) } Object.defineProperty(datasource, name, { get: () => { let data = require(filename) if (path.extname(filename) === '.json') { return evaljson(data, vars) } else { return data } }, configurable: true, enumerable: true }) }) return datasource } module.exports = _datasource