aboutsummaryrefslogtreecommitdiffstats
path: root/app/webserver/webserver.ts
diff options
context:
space:
mode:
authorLeonardo Bishop <me@leonardobishop.com>2023-08-20 11:12:25 +0100
committerLeonardo Bishop <me@leonardobishop.com>2023-08-20 11:22:58 +0100
commit19614388ea6298775d08fe19e67fb22bf90a01da (patch)
tree119d7cd65e731983d8cfcd1b996a68987baf9740 /app/webserver/webserver.ts
Replace web server with static site generator
Diffstat (limited to 'app/webserver/webserver.ts')
-rw-r--r--app/webserver/webserver.ts39
1 files changed, 39 insertions, 0 deletions
diff --git a/app/webserver/webserver.ts b/app/webserver/webserver.ts
new file mode 100644
index 0000000..82caa06
--- /dev/null
+++ b/app/webserver/webserver.ts
@@ -0,0 +1,39 @@
+import express from 'express';
+import { logger } from '../logger.js';
+import { AddressInfo } from 'net';
+import { PageDirectory } from '../builder/pages.js';
+
+const app = express();
+
+app.use(express.static(process.env.OUTPUT_DIR, { extensions: ['html'] }));
+
+export const start = (pages: PageDirectory) => {
+ const server = app.listen(process.env.WEBSERVER_PORT, () => {
+ const address = server.address() as AddressInfo;
+ logger.info(`Serving files from: ${process.env.OUTPUT_DIR}`);
+ logger.info(` Address: http://localhost:${address.port}`);
+ logger.info(` ^C to stop`);
+ logger.info('')
+
+ if (process.env.WEBSERVER_AUTOREBUILD === 'true') {
+ import('./watcher.js').then((watcher) => {
+ watcher.start(pages);
+ });
+ }
+ });
+
+ const closeServer = () => {
+ logger.info(`Stopping server...`);
+ server.close();
+ }
+
+ const exitHandler = () => {
+ if (server.listening) {
+ closeServer();
+ }
+ }
+
+ process.on('SIGINT', exitHandler);
+ process.on('SIGTERM', exitHandler);
+
+};