From 282f6183866779f38ce88ffafe71a1e8be7dfe4c Mon Sep 17 00:00:00 2001 From: fedyna-k Date: Mon, 20 Jan 2025 08:31:12 +0100 Subject: [PATCH] Patched DB creation and added CLI toolchain base --- databases/ensure.ts | 2 ++ deno.json | 1 + toolbox/cli.ts | 60 +++++++++++++++++++++++++++++++++++++++++++++ toolbox/module.ts | 3 +++ 4 files changed, 66 insertions(+) create mode 100644 toolbox/cli.ts create mode 100644 toolbox/module.ts diff --git a/databases/ensure.ts b/databases/ensure.ts index 993fba3..1c56375 100644 --- a/databases/ensure.ts +++ b/databases/ensure.ts @@ -1,6 +1,8 @@ import { Database } from "@db/sqlite"; export default async function ensureDatabases() { + await Deno.mkdir("databases/data", { recursive: true }); + for await (const file of Deno.readDir("databases/init")) { if (!file.isFile) { console.warn(`[WARN] Path ${file.name} is not a file.`); diff --git a/deno.json b/deno.json index 9061960..7c0fd6e 100644 --- a/deno.json +++ b/deno.json @@ -25,6 +25,7 @@ "@db/sqlite": "jsr:@db/sqlite@^0.12.0", "@melvdouc/xml-parser": "jsr:@melvdouc/xml-parser@^0.1.1", "@popov/jwt": "jsr:@popov/jwt@^1.0.1", + "@std/cli": "jsr:@std/cli@^1.0.10", "preact": "https://esm.sh/preact@10.22.0", "preact/": "https://esm.sh/preact@10.22.0/", "@preact/signals": "https://esm.sh/*@preact/signals@1.2.2", diff --git a/toolbox/cli.ts b/toolbox/cli.ts new file mode 100644 index 0000000..4b23d84 --- /dev/null +++ b/toolbox/cli.ts @@ -0,0 +1,60 @@ +import { parseArgs, type ParseOptions } from "@std/cli/parse-args"; +import { createModule } from "$root/toolbox/module.ts"; + +interface CLI { + [command: string]: CLI | (() => void) | (() => Promise); +} + +const argSpec: ParseOptions = {}; + +const cli: CLI = { + help: () => displayHelp(cli), + module: { + create: createModule, + }, +}; + +function displayHelp(cli: CLI, errorMessage?: string): never { + const loggingFunction = errorMessage ? console.error : console.log; + if (errorMessage) { + console.error(errorMessage); + } + + loggingFunction("Commands:"); + +} + +function runCommand(commands: Array, cli: CLI): never | void | Promise { + if (commands.length == 0) { + console.error( + `No command provided. Available commands are ${ + JSON.stringify(Object.keys(cli)) + }.`, + ); + Deno.exit(1); + } + + const command = commands.shift()!.toString(); + + if (cli[command] == undefined) { + console.error( + `Command "${command}" doesn't exist. Available commands are ${ + JSON.stringify(Object.keys(cli)) + }.`, + ); + Deno.exit(1); + } + + if (typeof cli[command] == "object") { + return runCommand(commands, cli[command]); + } + + return cli[command](); +} + +function main() { + const args = parseArgs(Deno.args, argSpec); + runCommand(args._, cli); +} + +main(); diff --git a/toolbox/module.ts b/toolbox/module.ts new file mode 100644 index 0000000..6d8f455 --- /dev/null +++ b/toolbox/module.ts @@ -0,0 +1,3 @@ +export async function createModule() { + +} \ No newline at end of file