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';