harden-react-markdown
Version:
A security-focused wrapper for react-markdown that filters URLs based on allowed prefixes
13 lines (12 loc) • 866 B
TypeScript
import { ComponentType, ComponentProps } from "react";
import type { Options } from "react-markdown";
interface HardenReactMarkdownOptions {
defaultOrigin?: string;
allowedLinkPrefixes?: string[];
allowedImagePrefixes?: string[];
}
type MarkdownComponentProps<T extends ComponentType<Options>> = ComponentProps<T>;
type ValidateMarkdownComponent<T extends ComponentType<Options>> = ComponentProps<T> extends Options ? T : never;
type StrictMarkdownComponent<T extends ComponentType<Options>> = T extends ComponentType<infer P> ? P extends Options ? ValidateMarkdownComponent<T> : never : never;
export default function hardenReactMarkdown<TMarkdownComponent extends ComponentType<Options>>(MarkdownComponent: StrictMarkdownComponent<TMarkdownComponent>): ComponentType<MarkdownComponentProps<TMarkdownComponent> & HardenReactMarkdownOptions>;
export {};