UNPKG

@paroicms/server

Version:
75 lines 2.32 kB
import { ApiError } from "@paroicms/public-server-lib"; export function getPaSiteContext(req) { if (!req.paSiteContext) { throw new Error("site context missing in request"); } return req.paSiteContext; } export function getRouteParameter(params, parameterName, options = {}) { const value = params[parameterName]; if (value) return value; if (options.optional) return; throw new ApiError(`missing parameter "${parameterName}"`, 400); } export function serveTextContent(httpContext, { status, contentType, text, or304, }) { const { req, res } = httpContext; const cacheControl = "max-age=0"; if (or304) { if (req.headers["if-none-match"] === or304.etag) { return serve304NotModified(httpContext, { cacheControl, etag: or304.etag, }); } res.append("Cache-Control", cacheControl); res.append("Etag", or304.etag); } else { res.append("Cache-Control", cacheControl); } const buf = Buffer.from(text, "utf-8"); res.append("Content-Type", contentType ?? "text/html; charset=utf-8"); res.append("Content-Length", buf.byteLength.toString()); res.status(status ?? 200); res.send(buf); } export function serve500Html(httpContext) { const html = `<!DOCTYPE html> <p>Internal error</p>`; serveTextContent(httpContext, { status: 500, text: html, }); } export function serve404SimpleHtml(httpContext) { const html = `<!DOCTYPE html> <p>404 Not Found</p>`; serveTextContent(httpContext, { status: 404, text: html, }); } export function serve304NotModified(httpContext, headers) { const { res } = httpContext; res.append("Cache-Control", headers.cacheControl); res.append("Etag", headers.etag); res.status(304); res.send(); } export function serve301Redirect(httpContext, redirectTo) { const { res } = httpContext; res.append("location", redirectTo); res.status(301); res.send(); } export function serve503ServiceUnavailable(httpContext, message) { const html = `<!DOCTYPE html> <p>${message ?? "Service Unavailable"}</p>`; serveTextContent(httpContext, { status: 503, text: html, }); } //# sourceMappingURL=http-helpers.js.map