Files
nebula.js/scripts/start-mashup.js

71 lines
1.3 KiB
JavaScript

#! /usr/bin/env node
const yargs = require('yargs');
const mashupServer = require('../test/mashup/server');
const args = yargs.option('start', {
default: true,
type: 'boolean',
describe: 'Start the mashup server',
}).argv;
const { start } = args;
let hasCleanedUp = false;
const services = [];
if (start) {
let m;
services.push({
name: 'Mashup server',
start: async () => {
m = await mashupServer();
process.env.BASE_URL = m.url;
},
stop: async () => {
await m.close();
},
});
}
function cleanup() {
if (hasCleanedUp) {
return;
}
hasCleanedUp = true;
console.log('> Stopping services');
services.forEach(async (service) => {
console.log(`${service.name}`);
await service.stop();
});
}
async function run() {
console.log('> Starting services');
try {
for await (const service of services) {
console.log(`${service.name}`);
await service.start();
}
console.log('> All up and running');
} catch (err) {
console.error(`\x1b[31m${JSON.stringify(err)}\x1b[0m`);
cleanup();
throw err;
}
}
process.on('exit', cleanup);
process.on('SIGINT', process.exit);
process.on('SIGTERM', process.exit);
process.on('uncaughtException', (err) => {
if (!hasCleanedUp) {
console.log(err.stack);
process.exit(1);
}
});
run();