src/index.js in hauler-0.1.0 vs src/index.js in hauler-0.2.0

- old
+ new

@@ -1,122 +1,43 @@ // @flow -// NOTE: This code is executed in a Gem, which makes any npm package unavailable -const compilerDefaultsFactory = require('./defaults/compiler_config_factory'); -const devServerDefaultsFactory = require('./defaults/dev_server_config_factory'); -const utils = require('./utils'); +import * as utils from './utils'; -function extractLoaders(config: ProjectConfig): Array<WebpackLoader> { - return utils.compact([ - config.javascriptLoader, - config.sassLoader, - config.fontLoader, - config.imageLoader, - ]); +function getProjectConfig(env: string): ProjectConfig { + const projectConfigFactory = require(utils.railsPath('~config/hauler.js')); + return projectConfigFactory(env); } -function extractResolve(config: ProjectConfig): WebpackResolveConfig { - const resolve = config.compiler && config.compiler.resolve; - const modules = resolve && resolve.modules || ['node_modules']; - return utils.deepMerge(resolve, { modules: utils.railsPath(modules) }); +function getProjectDefaults(env: string): ProjectConfig { + const projectDefaultsFactory = require('./defaults/project_config_factory'); + return projectDefaultsFactory.default(env); } -function extractPlugins(config: ProjectConfig): Array<WebpackPlugin> { - const prepend = config.prependPlugins || []; - const plugins = config.plugins || []; - const appendPlugins = config.appendPlugins || []; - return prepend.concat(plugins).concat(appendPlugins); -} - -function extractModule(config: ProjectConfig): WebpackModuleConfig { - const module = config.compiler && config.compiler.module; - return utils.deepMerge(module, { - loaders: extractLoaders(config), - }); -} - -function extractOutput(config: ProjectConfig): WebpackOutputConfig { - const output = config.compiler && config.compiler.output || {}; - const path = output.path || ''; - return utils.deepMerge(output, { - path: utils.railsPath(path), - }); -} - -function parseToCompilerConfig(config: ProjectConfig): WebpackConfig { - return { - entry: utils.railsPath(config.entries), - output: extractOutput(config), - module: extractModule(config), - plugins: extractPlugins(config), - resolve: extractResolve(config), +function getConfigFactory(): ProjectConfigFactory { + return (env: string) => { + const projectDefaults = getProjectDefaults(env); + const projectConfig = getProjectConfig(env); + const config = utils.mergeProjectConfig(projectDefaults, projectConfig); + return config; }; } -function extractPublicPath(config: WebpackDevServerConfig): string { - const publicPath = config.publicPath; - if (publicPath == null) { - return ''; +export function getConfig(env: string, railsRoot?: string) { + if (railsRoot != null) { + utils.setRailsRoot(railsRoot); } - if (publicPath.indexOf('http') !== -1) { - return publicPath; - } - - const host = config.host || 'localhost'; - const port = config.port || 30001; - return `http://${host}:${port}/${publicPath.replace(/^\//, '')}`; + const configFactory = getConfigFactory(); + return configFactory(env); } -function prepareDevServerConfig(config: WebpackDevServerConfig): WebpackDevServerConfig { - const output = Object.assign({}, config, { - publicPath: extractPublicPath(config), - }); - - return output; +export function getDevServerConfig(env: string, railsRoot?: string): WebpackDevServerConfig { + const config = getConfig(env, railsRoot); + return utils.extractDevServerConfig(config); } -const projectConfig: ProjectConfig = require(utils.railsPath('~config/hauler.js')); - -/** - * Returns a factory for getting the project webpack dev server configuration using the - * value of the `devServer` property in the result of `{Rails.root}/config/hauler.js` - */ -function webpackDevServerConfigFactory(defaultsFactory: DevServerConfigFactory) { - return (env: string): WebpackDevServerConfig => { - const defaultDevServerConfig = defaultsFactory(env); - const projectDevServerConfig = projectConfig.devServer; - const devServerConfig = utils.deepMerge(defaultDevServerConfig, projectDevServerConfig); - return prepareDevServerConfig(devServerConfig); - }; +export function getCompilerConfig(env: string, railsRoot?: string): WebpackConfig { + const config = getConfig(env, railsRoot); + return utils.extractCompilerConfig(config); } -function webpackCompilerConfigFactory(defaultsFactory: ProjectConfigFactory) { - return (env: string) => { - const defaultProjectConfig = defaultsFactory(env); - const haulerProjectConfig = utils.deepMerge(defaultProjectConfig, projectConfig); - const webpackConfig = parseToCompilerConfig(haulerProjectConfig); - return utils.deepMerge(webpackConfig, projectConfig.compiler || {}); - }; -} - -const Hauler = { - getCompilerConfigFactory() { - return webpackCompilerConfigFactory(compilerDefaultsFactory); - }, - - getCompilerConfig(env: string) { - const configFactory = Hauler.getCompilerConfigFactory(); - return configFactory(env); - }, - - getDevServerConfig(env: string) { - const configFactory = Hauler.getDevServerConfigFactory(); - return configFactory(env); - }, - - getDevServerConfigFactory() { - return webpackDevServerConfigFactory(devServerDefaultsFactory); - }, -}; - -module.exports = Hauler; +export { getEnvName } from './utils';