mirror of
https://github.com/unraid/api.git
synced 2026-01-05 08:00:33 -06:00
46 lines
1.4 KiB
TypeScript
46 lines
1.4 KiB
TypeScript
import DOMPurify from 'isomorphic-dompurify';
|
|
import { Marked, type MarkedExtension } from 'marked';
|
|
|
|
const defaultMarkedExtension: MarkedExtension = {
|
|
hooks: {
|
|
// must define as a function (instead of a lambda) to preserve/reflect bindings downstream
|
|
postprocess(html) {
|
|
return DOMPurify.sanitize(html);
|
|
},
|
|
},
|
|
};
|
|
|
|
/**
|
|
* Helper class to build or conveniently use a markdown parser.
|
|
*
|
|
* - Use `Markdown.create` to extend or customize parsing functionality.
|
|
* - Use `Markdown.parse` to conveniently parse markdown to safe html.
|
|
*/
|
|
// eslint-disable-next-line @typescript-eslint/no-extraneous-class
|
|
export class Markdown {
|
|
private static instance = Markdown.create();
|
|
|
|
/**
|
|
* Creates a `Marked` instance with default MarkedExtension's already added.
|
|
*
|
|
* Default behaviors:
|
|
* - Sanitizes html after parsing
|
|
*
|
|
* @param args any number of Marked Extensions
|
|
* @returns Marked parser instance
|
|
*/
|
|
static create(...args: Parameters<Marked['use']>) {
|
|
return new Marked(defaultMarkedExtension, ...args);
|
|
}
|
|
|
|
/**
|
|
* Parses arbitrary markdown content as sanitized html. May throw if parsing fails.
|
|
*
|
|
* @param markdownContent string of markdown content
|
|
* @returns safe, sanitized html content
|
|
*/
|
|
static async parse(markdownContent: string): Promise<string> {
|
|
return Markdown.instance.parse(markdownContent);
|
|
}
|
|
}
|