axiom
Version:
Environment setup/runtime standardization for Node.js applications.
49 lines (35 loc) • 1.49 kB
text/coffeescript
_ = require 'lodash'
getAxiomModules = require '../getAxiomModules'
internal = require './internal'
load = require './load'
logger = require 'torch'
module.exports = (config, retriever) ->
# yay, logging
core = require '../core'
core.wireUpLoggers(config?.loggers)
core.log.coreEntry 'init', {config, retriever}
modules = config?.modules or []
# override base retriever properties with provided retriever
internal.retriever = _.merge {}, require('../retriever'), retriever
# Attempt to load a global 'axiom.*' file from the project root
try
_.merge internal.config, internal.retriever.retrieve('axiom')
# Merge in any programatically-passed config object
_.merge internal.config, config
# Find and load modules
pkg = internal.retriever.retrieve('package')
internal.modules = getAxiomModules(pkg, internal.config.blacklist)
internal.modules = _.union internal.modules, modules
# Load the 'axiom-base'
unless 'base' in internal.modules
load 'base', internal.retriever.retrieveExtension 'base'
# Require each axiom module.
# Pass to load.
for moduleName in internal.modules
# In case we have passed in a blacklisted module
continue if moduleName in internal.config.blacklist
moduleDef = internal.retriever.retrieveExtension(moduleName)
load moduleName, moduleDef
for moduleName, moduleLocation of internal.config.appExtensions
moduleDef = internal.retriever.retrieve(moduleLocation)
load moduleName, moduleDef