summaryrefslogtreecommitdiff
path: root/app/lib/md.server.ts
diff options
context:
space:
mode:
Diffstat (limited to 'app/lib/md.server.ts')
-rw-r--r--app/lib/md.server.ts33
1 files changed, 33 insertions, 0 deletions
diff --git a/app/lib/md.server.ts b/app/lib/md.server.ts
new file mode 100644
index 0000000..8f0d6d6
--- /dev/null
+++ b/app/lib/md.server.ts
@@ -0,0 +1,33 @@
+import { marked } from "marked";
+import sanitizeHtml from "sanitize-html";
+
+const ALLOWED_TAGS = [
+ "p", "br",
+ "h1", "h2", "h3", "h4", "h5", "h6",
+ "ul", "ol", "li",
+ "blockquote",
+ "pre", "code",
+ "strong", "em", "del", "s",
+ "a",
+ "hr",
+ "table", "thead", "tbody", "tr", "th", "td",
+ "img",
+];
+
+const ALLOWED_ATTRIBUTES: sanitizeHtml.IOptions["allowedAttributes"] = {
+ a: ["href", "title"],
+ img: ["src", "alt", "title"],
+ code: ["class"],
+ td: ["align"],
+ th: ["align"],
+};
+
+export function renderMarkdown(content: string): string {
+ const raw = marked.parse(content, { async: false }) as string;
+ return sanitizeHtml(raw, {
+ allowedTags: ALLOWED_TAGS,
+ allowedAttributes: ALLOWED_ATTRIBUTES,
+ allowedSchemes: ["http", "https", "mailto"],
+ allowedSchemesByTag: { img: ["http", "https"] },
+ });
+}