#!/usr/bin/env node // Requires Ansi.mjs, which can be found here: https://gist.github.com/8c0bb5e172438b6e62dd48587cfeba84#file-ansi-mjs import Ansi from './Helpers/Ansi.mjs'; import show_help from './help.mjs'; import TTNAppServer from './ttn-app-server/TTNAppServer.mjs'; // 1: Setup const ansi = new Ansi(); const settings = { program_name: "LoRaWAN Signal Mapper", version: "v0.1", description: "assists in mapping LoRaWAN signal coverage.", ansi }; // 2: CLI Argument Parsing let args = process.argv.slice(2); // Slice out the node binary name and the filename let extras = []; for(let i = 0; i < args.length; i++) { if(!args[i].startsWith("-")) { extras.push(args[i]); continue; } switch(args[i]) { case "--help": case "-h": show_help(settings); process.exit(); break; case "--version": case "-v": console.log(program.version); break; // Add more arguments here } } // 3: Environment Variable Parsing // process.env.XYZ // 4: Run if(extras.length < 1) { console.error(`${ansi.fred}${ansi.hicol}Error: No subcommand specified.${ansi.reset}`); show_help(settings); process.exit(); } switch(extras[0]) { case "ttn-app-server": let app_server = new TTNAppServer(settings); app_server.run(); break; default: console.error(`${ansi.fred}${ansi.hicol}Error: Subcommand '${extras[0]}' not recognised.${ansi.reset}`); console.error( `${ansi.fred}Perhaps you mistyped it, or it hasn't been implemented yet?`); process.exit(1); break; } // 5: Cleanup