UNPKG

rump

Version:

Opinionated flow for assembling client assets

78 lines (67 loc) 1.75 kB
import configs, {rebuild} from './configs' import extend from 'extend' import {EventEmitter} from 'events' import {resolve} from 'path' const lastOptionsKey = Symbol('lastOptions') class Rump extends EventEmitter { configs = { get main() { return configs.main }, get watch() { return configs.watch }, } taskPrefix = '' constructor() { super() this[lastOptionsKey] = {} } addGulpTasks(options = {}) { this.taskPrefix = options.prefix require('./gulp') this.emit('gulp:main', options) return this } autoload() { const pkg = require(resolve('package')), {dependencies = {}} = pkg, {devDependencies = {}} = pkg, {optionalDependencies = {}} = pkg, {peerDependencies = {}} = pkg, keys1 = Object.keys(dependencies), keys2 = Object.keys(devDependencies), keys3 = Object.keys(optionalDependencies), keys4 = Object.keys(peerDependencies), modules = [...keys1, ...keys2, ...keys3, ...keys4] modules.filter(isRumpModule).forEach(require) return this } configure(options) { this[lastOptionsKey] = extend(true, {}, options) rebuild(options) this.emit('update:main') return this } reconfigure(options) { return this.configure(extend(true, this[lastOptionsKey], options)) } taskName(...args) { return [this.taskPrefix] .concat(args) .filter(x => typeof x === 'string') .join(':') .split(':') .filter(x => x) .join(':') } } export default new Rump() function isRumpModule(mod) { if(/^rump-/.test(mod)) { try { require.resolve(mod) return true } catch(e) { return false } } return false }