require('dotenv/config'); const airbnb = require('@neutrinojs/airbnb'); const clean = require('@neutrinojs/clean'); const copy = require('@neutrinojs/copy'); const mocha = require('@neutrinojs/mocha'); const node = require('@neutrinojs/node'); const {EnvironmentPlugin} = require('webpack'); const nodeExternals = require('webpack-node-externals'); module.exports = { options: { root: __dirname, }, use: [ airbnb({ eslint: { cache: false, baseConfig: require('./.eslint.defaults'), }, }), clean({ cleanOnceBeforeBuildPatterns: ['**/*.hot-update.*'], }), copy({ patterns: ['flakes.png'].map((path) => ({ from: `src/assets/${path}`, to: 'assets', })), }), mocha(), node(), (neutrino) => { [ 'components', 'context', 'fonts', 'hooks', 'images', 'scss', ].forEach((path) => { neutrino.config.resolve.alias .set(path, `${neutrino.options.source}/react/${path}`); }); if (process.env.LATUS_LINTING) { return; } neutrino.config.module .rule('compile') .use('babel') .get('options').plugins.push( [ 'babel-plugin-webpack-alias', { config: `${__dirname}/webpack.config.js`, }, ], ); neutrino.config .plugin('environment') .use(EnvironmentPlugin, [{ SIDE: 'server', }]); neutrino.config .entry('index') .prepend('@latus/core/start'); if ('production' !== neutrino.config.get('mode')) { neutrino.config .entry('index') .prepend('dotenv/config'); neutrino.config .plugin('start-server') .tap((args) => { const options = args[0]; const inspectArg = process.argv.find((arg) => -1 !== arg.indexOf('--inspect')); if (inspectArg) { options.nodeArgs.push(inspectArg); } const profArg = process.argv.find((arg) => -1 !== arg.indexOf('--prof')); if (profArg) { options.nodeArgs.push(profArg); } options.nodeArgs.push('--experimental-repl-await'); return args; }); } neutrino.config .externals(nodeExternals({ })); }, ], };