"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); const fs = require("fs"); const config = require("./config"); const logger = require("./log"); const express = require("express"); function getPageOptions(contentStr) { let pageOptions = {}; try { let lines = contentStr.split("\n"); let firstLine = lines[0]; let pageOptionsStr = firstLine.replace(/^\s*[\s\S]*$/, "\$1"); pageOptions = JSON.parse(pageOptionsStr); } catch (_a) { logger.info("No pageOptions found"); } return pageOptions; } function getToc() { logger.info("building toc"); let toc = ""; let posts = fs.readdirSync('./docroot/posts'); posts.sort().reverse().forEach((v) => { let content = fs.readFileSync(`./docroot/posts/${v}/article.pag`); let contentStr = content.toString(); let pageOptions = getPageOptions(contentStr); toc += `
  • ${v} - ${pageOptions.title}
  • `; }); return toc; } logger.info("Homepage starting"); let app = express(); let masterTmpl; let toc; let cache = {}; app.engine('pag', (filePath, options, callback) => { // logger.info(JSON.stringify(options)) if (!(filePath in cache)) { logger.info(`${filePath} not yet in cache`); fs.readFile(filePath, (err, content) => { if (err) { return callback(new Error(err.message)); } let contentStr = content.toString(); let pageOptions = getPageOptions(contentStr); let renderedPhase1 = contentStr .replace(/#bla#/g, 'blu'); let renderedPhase2 = masterTmpl .replace(/#maincontent#/g, renderedPhase1) .replace(/#base#/g, options.base); for (let key in pageOptions) { let value = pageOptions[key]; if (key == 'toc' && value == 'compute') { value = toc; } renderedPhase2 = renderedPhase2.replace(new RegExp(`#${key}#`, 'g'), value); } cache[filePath] = renderedPhase2; return callback(null, renderedPhase2); }); } else { logger.info(`${filePath} served from cache`); return callback(null, cache[filePath]); } }); app.set('views', './docroot'); app.set('view engine', 'pag'); app.get('/index', (req, res) => { res.render('index', { "base": req.headers['x-proxy-original-url'] || "/" }); }); app.get('/posts/:date', (req, res) => { res.render(`posts/${req.params.date}/article`, { "base": req.headers['x-proxy-original-url'] || "/" }); }); app.get('/pages/:file', (req, res) => { res.render(`pages/${req.params.file}`, { "base": req.headers['x-proxy-original-url'] || "/" }); }); app.get('/', (req, res) => { logger.info('redirecting / to /index'); let base = req.headers['x-proxy-original-url'] || "/"; res.redirect(`${base}index`); }); app.get('/reload', (req, res) => { logger.info('truncating cache'); cache = {}; toc = getToc(); masterTmpl = fs.readFileSync('./docroot/master.tmpl').toString(); let base = req.headers['x-proxy-original-url'] || "/"; res.redirect(`${base}index`); }); app.use('/files', express.static('files')); masterTmpl = fs.readFileSync('./docroot/master.tmpl').toString(); toc = getToc(); app.listen(config.dict.httpPort, () => { logger.info("Homepage is listening"); }); logger.info("Homepage running"); //# sourceMappingURL=main.js.map