aboutsummaryrefslogtreecommitdiff
path: root/packages/server/src/server.ts
diff options
context:
space:
mode:
Diffstat (limited to 'packages/server/src/server.ts')
-rw-r--r--packages/server/src/server.ts70
1 files changed, 42 insertions, 28 deletions
diff --git a/packages/server/src/server.ts b/packages/server/src/server.ts
index 11b3f7f..3056bf5 100644
--- a/packages/server/src/server.ts
+++ b/packages/server/src/server.ts
@@ -1,41 +1,55 @@
-import { readFileSync, readdirSync } from "fs";
+import { readFile, readdir } from "fs/promises";
import { join } from "path";
import { exit } from "process";
import { Settings } from "./types";
import buildApp from "./app";
+import { ServerCache } from "./cache";
-const settings = JSON.parse(readFileSync(join(__dirname, "/../../../settings.json"), "utf-8")) as Settings;
+async function main() {
+ const settings = JSON.parse(await readFile(join(__dirname, "/../../../settings.json"), { encoding: "utf-8" })) as Settings;
-const settings_keys = Object.keys(settings);
+ const settings_keys = Object.keys(settings);
-const mandatory_settings = [ "host", "port", "title", "about", "git_dir" ];
+ const mandatory_settings = [ "host", "port", "title", "about", "git_dir" ];
-// Get missing mandatory settings
-const settings_not_included = mandatory_settings.filter(x => !settings_keys.includes(x));
+ // Get missing mandatory settings
+ const settings_not_included = mandatory_settings.filter(x => !settings_keys.includes(x));
-// Error out and exit if there's any missing settings
-if(settings_not_included.length !== 0) {
- console.log(`Error: settings file is missing ${(settings_not_included.length > 1) ? "keys" : "key"}:`);
- console.log(settings_not_included.join(", "));
- exit(1);
-}
-
-// Make sure that the git directory specified in the settings actually exists
-try {
- readdirSync(settings.git_dir);
-}
-catch {
- console.error(`Error: Git directory ${settings.git_dir} doesn't exist!`);
- exit(1);
-}
-
-const app = buildApp(settings);
+ // Error out and exit if there's any missing settings
+ if(settings_not_included.length !== 0) {
+ console.log(`Error: settings file is missing ${(settings_not_included.length > 1) ? "keys" : "key"}:`);
+ console.log(settings_not_included.join(", "));
+ exit(1);
+ }
-app.listen(settings.port, settings.host, (err: Error, addr: string) => {
- if(err) {
- console.error(err);
+ // Make sure that the git directory specified in the settings actually exists
+ await readdir(settings.git_dir).catch(() => {
+ console.error(`Error: Git directory ${settings.git_dir} doesn't exist!`);
exit(1);
+ });
+
+ const cache = (settings.cache && settings.cache.enabled === true) || settings.cache === undefined || settings.cache.enabled === undefined
+ ? new ServerCache(settings.cache)
+ : null;
+
+ if(cache) {
+ await cache.init(settings.git_dir);
+ if(!cache.ready) {
+ console.error("Error: cache failed to initialize!");
+ return 1;
+ }
}
- console.log(`Githermit is running on ${addr}`);
-}); \ No newline at end of file
+ const app = await buildApp(settings, cache);
+
+ app.listen(settings.port, settings.host, (err: Error, addr: string) => {
+ if(err) {
+ console.error(err);
+ exit(1);
+ }
+
+ console.log(`Githermit is running on ${addr}`);
+ });
+}
+
+main(); \ No newline at end of file