privacy-guides/index.js
2022-03-14 08:53:50 -04:00

73 lines
1.6 KiB
JavaScript

"use strict"
import "dotenv/config"
import express from "express"
import got from "got"
import fsExtra from "fs-extra"
import prettier from "prettier"
import handlebars from "handlebars"
const { pathExists, readFile } = fsExtra
const gfm = handlebars.compile(await readFile("./gfm.hbs", "utf8"))
const app = express()
app.get("/github-markdown.css", async (req, res, next) => {
try {
const path = "./node_modules/github-markdown-css/github-markdown.css"
const exists = await pathExists(path)
if (exists === false) {
return next()
}
const css = await readFile(path, "utf8")
res.setHeader("Content-Type", "text/css")
return res.send(css)
} catch (error) {
console.log(error)
return res.sendStatus(500)
}
})
app.get("*.md", async (req, res, next) => {
try {
const path = `.${req.url}`
const exists = await pathExists(path)
if (exists === false) {
return next()
}
const markdown = await readFile(path, "utf8")
const response = await got.post("https://api.github.com/markdown", {
json: {
mode: "gfm",
text: markdown,
},
})
res.setHeader("Content-Type", "text/html")
return res.send(
prettier.format(
gfm({
markdown: response.body,
}),
{
parser: "html",
}
)
)
} catch (error) {
console.log(error)
return res.sendStatus(500)
}
})
app.use(
express.static(".", {
dotfiles: "ignore",
index: false,
})
)
const server = app.listen(process.env.PORT ?? 8080, () => {
console.info(`Server listening on port ${server.address().port}`)
})