Files
max-richter.dev/src/helpers/markdown.ts
Max Richter 6230126d38
Some checks failed
Deploy to SFTP Server / build (push) Failing after 1m55s
fix: some image loading
2025-10-24 13:43:34 +02:00

49 lines
1.2 KiB
TypeScript

import MarkdownIt from "markdown-it";
const parser = new MarkdownIt();
export function readDuration(markdown: string): number | undefined {
if (!markdown) return;
const words = markdown.split(" ")?.filter(Boolean)?.length;
if (!words) return;
return words && Math.round(words / 250);
}
export function markdownToHtml(markdown: string): string {
if (!markdown) return "";
const md = new MarkdownIt({
html: false, // set to true only if you trust the source
linkify: true,
typographer: true,
breaks: true,
});
// Convert -> sanitize
const unsafeHtml = md.render(markdown);
return unsafeHtml;
}
export function markdownToText(markdown: string): string {
if (!markdown) return "";
return parser
.render(markdown)
.split("\n")
.map((str) => str.trim())
.map((str) => {
return str.replace(/<\/?[^>]+(>|$)/g, "").split("\n");
})
.flat()
.filter((str) =>
!str.startsWith("import") &&
!str.startsWith("export") &&
!str.startsWith("#") &&
!str.startsWith("const") &&
!str.startsWith("function") &&
!str.startsWith("export") &&
!str.startsWith("import") &&
!str.startsWith("&lt;") &&
!str.startsWith("let") &&
str.length > 0
)
.join(" ");
}