All files / src/http html.ts

58.33% Statements 14/24
0% Branches 0/1
50% Functions 3/6
58.33% Lines 14/24

Press n or j to go to the next uncovered block, b, p or k for the previous block.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 485x   5x   5x 6x     6x 6x     6x           6x                       6x             3x 3x 3x 3x       3x      
import express, {Router} from "express";
import {RhizomeNode} from "../node";
import {htmlDocFromMarkdown, MDFiles} from "../util/md-files";
 
export class HttpHtml {
  router = Router();
  mdFiles: MDFiles;
 
  constructor(readonly rhizomeNode: RhizomeNode) {
    this.mdFiles = new MDFiles(this.rhizomeNode);
 
    // Serve README
    this.router.get('/README', (_req: express.Request, res: express.Response) => {
      const html = this.mdFiles.getReadmeHTML();
      res.setHeader('content-type', 'text/html').send(html);
    });
 
    // Serve markdown files as html
    this.router.get('/:name', (req: express.Request, res: express.Response) => {
      const {name} = req.params;
      let html = this.mdFiles.getHtml(name);
      Iif (!html) {
        res.status(404);
        html = htmlDocFromMarkdown(`# 404 Not Found: ${name}\n\n ## [Index](/html)`);
      }
      res.setHeader('content-type', 'text/html');
      res.send(html);
    });
 
    // Serve index
    this.router.get('/', (_req: express.Request, res: express.Response) => {
      res.setHeader('content-type', 'text/html').send(this.mdFiles.indexHtml);
    });
  }
 
  start() {
    // Scan and watch for markdown files
    this.mdFiles.readDir();
    this.mdFiles.readReadme();
    this.mdFiles.watchDir();
    this.mdFiles.watchReadme();
  }
 
  stop() {
    this.mdFiles.stop();
  }
}