coz-bud-loader
Version:
Bud loader for coz.
47 lines (41 loc) • 1.02 kB
JavaScript
/**
* Require a module.
* @memberof module:coz-bud-loader/lib
* @function requireBud
* @param {Bud} bud - Bud to require.
* @returns {Promise}
*/
const fs = require('fs')
const path = require('path')
/** @lends requireBud */
async function requireBud(buds) {
buds = [].concat(buds || [])
let results = []
for (let bud of buds) {
let src = bud.src || bud
if (typeof src === 'object') {
// Seems already required.
results.push(bud)
continue
}
let filename = path.resolve(src)
let exists = await new Promise((resolve) =>
fs.exists(filename, (exists) => resolve(exists))
)
let name = exists ? filename : src
try {
bud = require(name)
} catch (catched) {
throw new Error(`Failed to load ${name}: ${catched}`)
}
results.push(
[].concat(bud).map((bud) => {
bud.src = path.resolve(src)
return bud
})
)
}
return results.reduce((a, b) => [].concat(a, b), [])
}
module.exports = requireBud