apemandb
Version:
Database for apeman project.
49 lines (43 loc) • 1.28 kB
JavaScript
/**
* Resolve model module path.
* @function resolveModel
* @param {string} name - Name of model
* @param {Object} [options={}] - Optional settings
* @param {string} [options.modelSearchPath=[]] - Additional search path
*/
const findout = require('findout')
const path = require('path')
const resolveSafely = require('../requiring/resolve_safely')
/** @lends resolveModel */
function resolveModel (name, options = {}) {
let { modelSearchPath = {} } = options
let parsers = resolveModel.getParsers({ modelSearchPath })
for (let parser of parsers) {
let resolved = resolveSafely(parser(name))
if (resolved) {
return Object.assign(require(resolved), {
$$src: resolved
})
}
}
return null
}
Object.assign(resolveModel, {
getParsers ({ modelSearchPath } = {}) {
const { AP_MODEL_SEARCH_PATH } = process.env
return [
(name) => name,
(name) => path.resolve(name),
(name) => findout.resolve(name, { safe: true })
].concat(
String(AP_MODEL_SEARCH_PATH || '').trim().split(',')
.concat(modelSearchPath || [])
.filter((pathname) => !!pathname)
.map((pathname) =>
(name) => path.resolve(pathname, name)
)
)
}
})
module.exports = resolveModel