78 lines
1.7 KiB
JavaScript
78 lines
1.7 KiB
JavaScript
const {chmod} = require('fs');
|
|
const {join} = require('path');
|
|
|
|
const airbnb = require('@neutrinojs/airbnb');
|
|
const banner = require('@neutrinojs/banner');
|
|
const copy = require('@neutrinojs/copy');
|
|
const glob = require('glob');
|
|
|
|
const fleck = require('../src/bootstrap/fleck');
|
|
|
|
const {
|
|
FLECKS_CORE_ROOT = process.cwd(),
|
|
} = process.env;
|
|
|
|
const config = require('../src/bootstrap/fleck.neutrinorc');
|
|
|
|
// Dotfiles.
|
|
config.use.push(({config}) => {
|
|
['eslintrc', 'eslint.defaults'].forEach((filename) => {
|
|
config
|
|
.entry(`server/build/.${filename}`)
|
|
.clear()
|
|
.add(`./src/server/build/${filename}`);
|
|
})
|
|
});
|
|
|
|
// Tests.
|
|
config.use.push(({config}) => {
|
|
// Test entrypoint.
|
|
const testPaths = glob.sync(join(FLECKS_CORE_ROOT, 'test/*.js'));
|
|
testPaths.push(...glob.sync(join(FLECKS_CORE_ROOT, `test/platforms/server/*.js`)));
|
|
if (testPaths.length > 0) {
|
|
const testEntry = config.entry('test').clear();
|
|
testPaths.forEach((path) => testEntry.add(path));
|
|
}
|
|
});
|
|
|
|
config.use.unshift(fleck());
|
|
|
|
config.use.unshift(
|
|
airbnb({
|
|
eslint: {
|
|
baseConfig: {
|
|
...require('../src/server/build/eslint.defaults'),
|
|
env: {
|
|
mocha: true,
|
|
},
|
|
},
|
|
},
|
|
}),
|
|
);
|
|
|
|
config.use.push(banner({
|
|
banner: '#!/usr/bin/env node',
|
|
include: /^cli\.js$/,
|
|
pluginId: 'shebang',
|
|
raw: true,
|
|
}))
|
|
|
|
config.use.push(({config}) => {
|
|
config
|
|
.plugin('executable')
|
|
.use(class Executable {
|
|
|
|
apply(compiler) {
|
|
compiler.hooks.afterEmit.tapAsync(
|
|
'Executable',
|
|
(compilation, callback) => {
|
|
chmod(join(__dirname, '..', 'dist', 'cli.js'), 0o755, callback);
|
|
},
|
|
)
|
|
}
|
|
|
|
});
|
|
});
|
|
|
|
module.exports = config;
|