Get dependency injection (basically) working. Hooray!
This commit is contained in:
parent
15a5bf9d03
commit
0d3edd0a93
6 changed files with 37 additions and 31 deletions
|
@ -75,6 +75,4 @@ class Ansi {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
const ansi = new Ansi();
|
export default Ansi;
|
||||||
|
|
||||||
export default ansi;
|
|
||||||
|
|
|
@ -2,14 +2,19 @@
|
||||||
|
|
||||||
import a from 'awilix';
|
import a from 'awilix';
|
||||||
|
|
||||||
import database_init from '../bootstrap/database_init.mjs';
|
import Ansi from '../Helpers/Ansi.mjs';
|
||||||
import TTNAppServer from '../ttn-app-server/TTNAppServer.mjs';
|
import TTNAppServer from '../ttn-app-server/TTNAppServer.mjs';
|
||||||
|
|
||||||
|
import settings from './settings.mjs';
|
||||||
|
import database_init from '../bootstrap/database_init.mjs';
|
||||||
|
|
||||||
const c = a.createContainer({
|
const c = a.createContainer({
|
||||||
injectionMode: a.InjectionMode.PROXY
|
injectionMode: a.InjectionMode.PROXY
|
||||||
});
|
});
|
||||||
|
|
||||||
c.register({
|
c.register({
|
||||||
|
settings: a.asValue(settings),
|
||||||
|
ansi: a.asFunction(() => new Ansi()).singleton(),
|
||||||
database: a.asFunction(database_init).singleton(),
|
database: a.asFunction(database_init).singleton(),
|
||||||
TTNAppServer: a.asClass(TTNAppServer),
|
TTNAppServer: a.asClass(TTNAppServer),
|
||||||
});
|
});
|
||||||
|
|
|
@ -1,26 +1,23 @@
|
||||||
"use strict";
|
"use strict";
|
||||||
|
|
||||||
|
import path from 'path';
|
||||||
import fs from 'fs';
|
import fs from 'fs';
|
||||||
|
|
||||||
import toml from '@iarna/toml';
|
import toml from '@iarna/toml';
|
||||||
|
|
||||||
import c from './container.mjs';
|
import apply_settings from '../Helpers/apply_settings.mjs';
|
||||||
import apply_settings from './Helpers/apply_settings.mjs';
|
|
||||||
|
|
||||||
|
const root_dir = path.dirname(process.argv[1]);
|
||||||
|
|
||||||
let filename_default = "../settings.default.toml",
|
let filename_default = path.resolve(root_dir, "./settings.default.toml"),
|
||||||
filename_custom = "../../settings.toml";
|
filename_custom = path.resolve(root_dir, "../settings.toml");
|
||||||
|
|
||||||
if(!fs.existsSync(filename_custom))
|
if(!fs.existsSync(filename_custom))
|
||||||
fs.writeFileSync(filename_custom, `# Custom settings file. This file overrides server/settings.default.toml - refer there of example of settings you can override.\n\n`);
|
fs.writeFileSync(filename_custom, `# Custom settings file. This file overrides server/settings.default.toml - refer there of example of settings you can override.\n\n`);
|
||||||
|
|
||||||
let settings = toml.parse(fs.readFileSync(filename_default, "utf-8")),
|
let settings = toml.parse(fs.readFileSync(filename_default, "utf-8")),
|
||||||
settings_override = toml.parse(fs.readFileSync("../../settings.custom.toml", "utf-8"));
|
settings_override = toml.parse(fs.readFileSync(filename_custom, "utf-8"));
|
||||||
|
|
||||||
apply_settings(settings, settings_override);
|
apply_settings(settings, settings_override);
|
||||||
|
|
||||||
c.register({
|
|
||||||
settings: a.asValue(settings)
|
|
||||||
});
|
|
||||||
|
|
||||||
export default settings;
|
export default settings;
|
||||||
|
|
|
@ -1,27 +1,30 @@
|
||||||
import path from 'path';
|
import path from 'path';
|
||||||
|
|
||||||
import ansi from './Helpers/Ansi.mjs';
|
import c from './bootstrap/container.mjs';
|
||||||
|
|
||||||
|
const a = c.resolve("ansi");
|
||||||
|
|
||||||
export default function(settings) {
|
export default function(settings) {
|
||||||
|
|
||||||
console.log(`${settings.program_name}, ${settings.version}
|
console.log(`${settings.program_name}, ${settings.version}
|
||||||
${ansi.locol}By Starbeamrainbowlabs${ansi.reset}
|
${a.locol}By Starbeamrainbowlabs${a.reset}
|
||||||
|
|
||||||
${ansi.hicol}This program ${settings.description}.${ansi.reset}
|
${a.hicol}This program ${settings.description}.${a.reset}
|
||||||
|
|
||||||
${ansi.fblue}${ansi.hicol}Usage:${ansi.reset}
|
${a.fblue}${a.hicol}Usage:${a.reset}
|
||||||
node --experimental-modules ${path.relative(process.cwd(), process.argv[1])} {subcommand} {options}
|
node --experimental-modules ${path.relative(process.cwd(), process.argv[1])} {subcommand} {options}
|
||||||
|
|
||||||
${ansi.fblue}${ansi.hicol}Subcommands:${ansi.reset}
|
${a.fblue}${a.hicol}Subcommands:${a.reset}
|
||||||
${ansi.fyellow}ttn-app-server${ansi.reset} Starts the thing network application server
|
${a.fyellow}ttn-app-server${a.reset} Starts the thing network application server
|
||||||
${ansi.fyellow}process-data${ansi.reset} Consolidates collected data from the IoT device and the TTN app server
|
${a.fyellow}process-data${a.reset} Consolidates collected data from the IoT device and the TTN app server
|
||||||
${ansi.fyellow}train-ai${ansi.reset} Trains the AI on the consolidated data
|
${a.fyellow}train-ai${a.reset} Trains the AI on the consolidated data
|
||||||
${ansi.fyellow}serve-map${ansi.reset} Serves the final output map using the trained AI
|
${a.fyellow}serve-map${a.reset} Serves the final output map using the trained AI
|
||||||
|
|
||||||
${ansi.fblue}${ansi.hicol}Options:${ansi.reset}
|
${a.fblue}${a.hicol}Options:${a.reset}
|
||||||
${ansi.fyellow}-h --help ${ansi.reset}Show this message
|
${a.fyellow}-h --help ${a.reset}Show this message
|
||||||
${ansi.fyellow}-v --version ${ansi.reset}Show the version of this program
|
${a.fyellow}-v --version ${a.reset}Show the version of this program
|
||||||
|
|
||||||
${ansi.fblue}${ansi.hicol}Environment Variables:${ansi.reset}
|
${a.fblue}${a.hicol}Environment Variables:${a.reset}
|
||||||
(none yet)
|
(none yet)
|
||||||
`);
|
`);
|
||||||
};
|
};
|
||||||
|
|
|
@ -2,12 +2,13 @@
|
||||||
"use strict";
|
"use strict";
|
||||||
|
|
||||||
// 1: Setup & Imports
|
// 1: Setup & Imports
|
||||||
import ansi from './Helpers/Ansi.mjs';
|
|
||||||
import c from './bootstrap/container.mjs';
|
import c from './bootstrap/container.mjs';
|
||||||
|
|
||||||
import show_help from './help.mjs';
|
import show_help from './help.mjs';
|
||||||
import TTNAppServer from './ttn-app-server/TTNAppServer.mjs';
|
import TTNAppServer from './ttn-app-server/TTNAppServer.mjs';
|
||||||
import settings from './bootstrap/settings.mjs';
|
|
||||||
|
const settings = c.resolve("settings");
|
||||||
|
const a = c.resolve("ansi");
|
||||||
|
|
||||||
// 2: CLI Argument Parsing
|
// 2: CLI Argument Parsing
|
||||||
let args = process.argv.slice(2); // Slice out the node binary name and the filename
|
let args = process.argv.slice(2); // Slice out the node binary name and the filename
|
||||||
|
@ -40,7 +41,7 @@ for(let i = 0; i < args.length; i++) {
|
||||||
|
|
||||||
// 4: Run
|
// 4: Run
|
||||||
if(extras.length < 1) {
|
if(extras.length < 1) {
|
||||||
console.error(`${ansi.fred}${ansi.hicol}Error: No subcommand specified.${ansi.reset}`);
|
console.error(`${a.fred}${a.hicol}Error: No subcommand specified.${a.reset}`);
|
||||||
show_help(settings);
|
show_help(settings);
|
||||||
process.exit();
|
process.exit();
|
||||||
}
|
}
|
||||||
|
@ -52,8 +53,8 @@ switch(extras[0]) {
|
||||||
break;
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
console.error(`${ansi.fred}${ansi.hicol}Error: Subcommand '${extras[0]}' not recognised.${ansi.reset}`);
|
console.error(`${a.fred}${a.hicol}Error: Subcommand '${extras[0]}' not recognised.${a.reset}`);
|
||||||
console.error( `${ansi.fred}Perhaps you mistyped it, or it hasn't been implemented yet?`);
|
console.error( `${a.fred}Perhaps you mistyped it, or it hasn't been implemented yet?`);
|
||||||
process.exit(1);
|
process.exit(1);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
2
settings.toml
Normal file
2
settings.toml
Normal file
|
@ -0,0 +1,2 @@
|
||||||
|
# Custom settings file. This file overrides server/settings.default.toml - refer there of example of settings you can override.
|
||||||
|
|
Loading…
Reference in a new issue