102 lines
2.1 KiB
JavaScript
102 lines
2.1 KiB
JavaScript
const path = require('path');
|
|
const chalk = require('chalk');
|
|
const rollup = require('rollup');
|
|
const log = console.log; // eslint-disable-line
|
|
const {
|
|
apps_list
|
|
} = require('./rollup.utils');
|
|
|
|
const {
|
|
get_options_for
|
|
} = require('./config');
|
|
|
|
const { get_redis_subscriber } = require('../node_utils');
|
|
const subscriber = get_redis_subscriber();
|
|
|
|
watch_assets();
|
|
|
|
function watch_assets() {
|
|
let watchOptions = [];
|
|
apps_list.map(app => {
|
|
watchOptions.push(...get_watch_options(app));
|
|
});
|
|
log(chalk.green(`\nRollup Watcher Started`));
|
|
let watcher = rollup.watch(watchOptions);
|
|
|
|
watcher.on('event', event => {
|
|
switch(event.code) {
|
|
case 'START': {
|
|
log(chalk.yellow(`\nWatching...`));
|
|
break;
|
|
}
|
|
|
|
case 'BUNDLE_START': {
|
|
const output = event.output[0];
|
|
if (output.endsWith('.js') || output.endsWith('.vue')) {
|
|
log('Rebuilding', path.basename(event.output[0]));
|
|
}
|
|
break;
|
|
}
|
|
|
|
case 'ERROR': {
|
|
log_error(event.error);
|
|
break;
|
|
}
|
|
|
|
case 'FATAL': {
|
|
log_error(event.error);
|
|
break;
|
|
}
|
|
|
|
default: break;
|
|
}
|
|
});
|
|
}
|
|
|
|
function get_watch_options(app) {
|
|
const options = get_options_for(app);
|
|
|
|
return options.map(({ inputOptions, outputOptions, output_file}) => {
|
|
return Object.assign({}, inputOptions, {
|
|
output: outputOptions,
|
|
plugins: [log_css_change({output: output_file})].concat(inputOptions.plugins)
|
|
});
|
|
});
|
|
}
|
|
|
|
function log_css_change({output}) {
|
|
return {
|
|
name: 'log-css-change',
|
|
generateBundle() {
|
|
if (!output.endsWith('.css')) return null;
|
|
log('Rebuilding', path.basename(output));
|
|
return null;
|
|
}
|
|
};
|
|
}
|
|
|
|
function log_error(error) {
|
|
log(chalk.yellow('Error in: ' + error.id));
|
|
if (error.stack) {
|
|
log(chalk.red(error.stack));
|
|
} else {
|
|
log(chalk.red(error.toString()));
|
|
}
|
|
|
|
if (error.frame) {
|
|
log(chalk.red(error.frame));
|
|
}
|
|
|
|
// notify redis which in turns tells socketio to publish this to browser
|
|
const payload = {
|
|
event: 'build_error',
|
|
message: `
|
|
Error in: ${error.id}
|
|
${error.toString()}
|
|
|
|
${error.frame ? error.frame : ''}
|
|
`
|
|
};
|
|
|
|
subscriber.publish('events', JSON.stringify(payload));
|
|
}
|