#!/usr/bin/env node import { argv, IEither, Either } from '@emprespresso/pengueno'; import { runServer } from '@emprespresso/ci_server'; const main = (_argv = process.argv.slice(2)): Promise> => argv( ['--run-server', '--port', '--host'], { '--run-server': { absent: false, unspecified: true, present: () => true }, '--port': { absent: 9000, present: (port) => parseInt(port) }, '--host': { absent: '0.0.0.0', present: (host) => host }, }, _argv, ) .mapRight((args) => ({ server_mode: args['--run-server'], port: args['--port'], host: args['--host'], })) .flatMapAsync((runConfig) => { if (runConfig.server_mode) { return runServer(runConfig.port, runConfig.host); } return Promise.resolve(Either.right(0)); }); if (process.argv[1] === import.meta.filename) { await main().then((eitherDone) => eitherDone.fold(({ isLeft, value }) => { if (!isLeft) return; console.error(`failed to start`, value); process.exit(1); }), ); }