49 lines
1.2 KiB
TypeScript
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("<") &&
|
|
!str.startsWith("let") &&
|
|
str.length > 0
|
|
)
|
|
.join(" ");
|
|
}
|