@merkur/cli
Version:
Merkur is tiny and extensible library for creating front-end microservices.
49 lines (38 loc) • 1.46 kB
JavaScript
import { spawn } from 'node:child_process';
import process from 'node:process';
import chalk from 'chalk';
import { createLogger } from './logger.mjs';
export async function runWidgetServer({ merkurConfig, cliConfig, context }) {
const logger = createLogger('widgetServer', cliConfig);
const { watch, inspect } = cliConfig;
const { playground, widgetServer } = merkurConfig;
const { protocol, host, apiRoute } = widgetServer;
const { widgetParamsDefault } = playground;
const args = [`./server/server.js`];
if (watch) {
args.unshift(`--watch-path=./server/`);
args.unshift(`--watch-path=./node_modules/`);
args.unshift(`--watch-preserve-output`);
args.unshift('--watch');
}
if (inspect) {
args.unshift('--inspect');
}
if (watch) logger.debug('Starting widget server with watch mode.');
const server = spawn('node', args, {
env: {
NODE_CONFIG_DIR: './server/config',
NODE_WATCH: watch,
...process.env,
MERKUR_CONFIG: JSON.stringify(merkurConfig),
CLI_CONFIG: JSON.stringify(cliConfig),
},
stdio: cliConfig.silent || cliConfig.quiet ? 'pipe' : 'inherit',
});
const widgetServerUrl = new URL(apiRoute, `${protocol}//${host}`);
widgetServerUrl.search = new URLSearchParams(widgetParamsDefault).toString();
server.on('spawn', () => {
logger.info(`Widget API endpoint: ${chalk.green(`${widgetServerUrl}`)}`);
});
context.process.widgetServer = server;
}