24 lines
918 B
TypeScript
24 lines
918 B
TypeScript
import { Pipe, PipeTransform } from '@angular/core';
|
|
import { DomSanitizer, SafeHtml } from '@angular/platform-browser';
|
|
import DOMPurify from 'dompurify';
|
|
import { marked } from 'marked';
|
|
|
|
/**
|
|
* Pipe markdown → HTML sanitise. Utilise pour le rendu des reponses IA.
|
|
* Combine marked (parser) + DOMPurify (anti-XSS) puis bypass la sanitization
|
|
* Angular puisque le contenu est deja nettoye.
|
|
*
|
|
* Configure en mode synchrone (`async: false`) pour eviter une Promise.
|
|
*/
|
|
@Pipe({ name: 'markdown', standalone: true })
|
|
export class MarkdownPipe implements PipeTransform {
|
|
constructor(private readonly sanitizer: DomSanitizer) {}
|
|
|
|
transform(value: string | null | undefined): SafeHtml {
|
|
if (!value) return '';
|
|
const html = marked.parse(value, { async: false, gfm: true, breaks: true }) as string;
|
|
const clean = DOMPurify.sanitize(html);
|
|
return this.sanitizer.bypassSecurityTrustHtml(clean);
|
|
}
|
|
}
|