From 3e7a3157638613aadd0eafdf570212ee0207a122 Mon Sep 17 00:00:00 2001 From: Kroese Date: Wed, 25 Sep 2024 00:59:56 +0200 Subject: [PATCH] Create cli.ts --- source/cli.ts | 68 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 68 insertions(+) create mode 100644 source/cli.ts diff --git a/source/cli.ts b/source/cli.ts new file mode 100644 index 0000000..54aae92 --- /dev/null +++ b/source/cli.ts @@ -0,0 +1,68 @@ +#!/usr/bin/env tsx +import process from 'node:process' + +import arg from 'arg' +import camelcaseKeys from 'camelcase-keys' + +import {cliClient} from './modules/cli-client.js' +import Umbreld, {type UmbreldOptions} from './index.js' + +// Quick trpc client for testing +if (process.argv.includes('client')) { + const clientIndex = process.argv.indexOf('client') + const query = process.argv[clientIndex + 1] + const args = process.argv.slice(clientIndex + 2) + + await cliClient({query, args}) + process.exit(0) +} + +const showHelp = () => + console.log(` + Usage + $ umbreld + + Options + --help Shows this help message + --data-directory Your Umbrel data directory + --port The port to listen on + --log-level The logging intensity: silent|normal|verbose + --default-app-store-repo The default app store repository + + Examples + $ umbreld --data-directory ~/umbrel +`) + +const args = camelcaseKeys( + arg({ + '--help': Boolean, + '--data-directory': String, + '--port': Number, + '--log-level': String, + '--default-app-store-repo': String, + }), +) + +if (args.help) { + showHelp() + process.exit(0) +} + +// TODO: Validate these args are valid +const umbreld = new Umbreld(args as UmbreldOptions) + +process.once('uncaughtException', async () => { + umbreld.logger.log(`Received signal, shutting down cleanly...`) + await umbreld.stop() + process.exit(0) +}) + +process.once('SIGINT', () => { throw new Error('SIGINT') }) +process.once('SIGTERM', () => { throw new Error('SIGTERM') }) + +try { + await umbreld.start() +} catch (error) { + console.error(process.env.NODE_ENV === 'production' ? (error as Error).message : error) + process.exit(1) +}