48 lines
1.3 KiB
TypeScript
48 lines
1.3 KiB
TypeScript
import { readFile } from "node:fs/promises";
|
|
import nunjucks from "nunjucks";
|
|
import { contentTypes } from "./content-types";
|
|
import { executionContext } from "./execution-context";
|
|
import { httpCodes } from "./http-codes";
|
|
import type { RedirectResult, Result } from "./types";
|
|
|
|
// FIXME: Handle the error here
|
|
const loadFile = async (path: string): Promise<string> => {
|
|
// Specifying 'utf8' returns a string; otherwise, it returns a Buffer
|
|
const data = await readFile(path, "utf8");
|
|
|
|
return data;
|
|
};
|
|
|
|
const render = async (path: string, ctx?: object): Promise<string> => {
|
|
const fullPath = `${executionContext.diachron_root}/templates/${path}.html.njk`;
|
|
|
|
const template = await loadFile(fullPath);
|
|
|
|
const c = ctx === undefined ? {} : ctx;
|
|
|
|
const retval = nunjucks.renderString(template, c);
|
|
|
|
return retval;
|
|
};
|
|
|
|
const html = (payload: string): Result => {
|
|
const retval: Result = {
|
|
code: httpCodes.success.OK,
|
|
result: payload,
|
|
contentType: contentTypes.text.html,
|
|
};
|
|
|
|
return retval;
|
|
};
|
|
|
|
const redirect = (location: string): RedirectResult => {
|
|
return {
|
|
code: httpCodes.redirection.SeeOther,
|
|
contentType: contentTypes.text.plain,
|
|
result: "",
|
|
redirect: location,
|
|
};
|
|
};
|
|
|
|
export { render, html, redirect };
|