'use strict'; const fs = require('fs'); const path = require('path'); const paths = require('./paths'); const originalConfig = require('./webpack.config.dev.original'); const ROOT = path.join(__dirname, '../../../..'); const UI_ROOT = path.join(ROOT, 'ui'); const FRONTEND_ROOT = process.env.NODE_ENV === 'production' ? path.join(__dirname, '../') : path.join(ROOT, 'frontend'); const MODULES = [ path.join(FRONTEND_ROOT, 'node_modules'), path.join(UI_ROOT, 'node_modules'), 'node_modules' ]; const FRONTEND = path.join(FRONTEND_ROOT, 'src'); const UI = process.env.NODE_ENV === 'production' ? path.join(FRONTEND_ROOT, 'node_modules', '@tomgco/joyent-portal-ui', 'dist') : path.join(UI_ROOT, 'src'); const STATIC = path.join(FRONTEND_ROOT, 'static'); const ESLINT = path.join(__dirname, '.eslintrc'); const rules = originalConfig.module.rules.reduce((loaders, loader, index) => { if(index === 3) { loaders.push({ test: loader.test, include: [loader.include, UI], loader: loader.loader, options: { babelrc: false, presets: [require.resolve('babel-preset-react-app')], plugins: [['inline-react-svg', { ignorePattern: 'libre-franklin' }]], cacheDirectory: true } }) } else if(index === 1) { loaders.push({ exclude: loader.exclude.concat([/\.(graphql|gql)$/]), loader: loader.loader, options: loader.options }) } else if(loader.include) { loaders.push(Object.assign({}, loader, {include: [loader.include, UI]})); } else { loaders.push(loader); } return loaders; }, []); rules.push({ test: /\.(graphql|gql)$/, exclude: /node_modules/, loader: require.resolve('graphql-tag/loader') }); const aliases = Object.assign({}, originalConfig.resolve.alias, fs.readdirSync(FRONTEND) .map((name) => path.join(FRONTEND, name)) .filter((fullpath) => fs.statSync(fullpath).isDirectory()) .reduce((aliases, fullpath) => Object.assign(aliases, { [`@${path.basename(fullpath)}`]: fullpath }), { '@root': FRONTEND, '@ui': UI })); const resolveModules = originalConfig.resolve.modules.concat(MODULES); originalConfig.module.rules = rules; originalConfig.resolve.alias = aliases; originalConfig.resolve.modules = resolveModules; originalConfig.resolve.plugins = []; module.exports = originalConfig;