diff --git a/server.js b/server.js index 8cc2f07..312e017 100644 --- a/server.js +++ b/server.js @@ -18,7 +18,6 @@ const pdfParse = require('pdf-parse'); // For PDF files const ExcelJS = require('exceljs'); // For Excel files // Markdown and HTML processing -const { marked } = require('marked'); const createDOMPurify = require('dompurify'); const { JSDOM } = require('jsdom'); @@ -26,6 +25,16 @@ const { JSDOM } = require('jsdom'); const window = new JSDOM('').window; const DOMPurify = createDOMPurify(window); +// Dynamic import for marked (ES module) +let marked = null; +async function initializeMarked() { + if (!marked) { + const markedModule = await import('marked'); + marked = markedModule.marked; + } + return marked; +} + // Helper function to extract text from various document formats async function extractTextFromDocument(filePath, fileExtension) { try { @@ -1454,7 +1463,7 @@ app.post('/api/render-revised-content', requireAuth, async (req, res) => { case 'html': if (isMarkdownContent || autoDetect === false) { // Convert markdown to safe HTML - renderedContent = markdownToSafeHtml(content); + renderedContent = await markdownToSafeHtml(content); } else { // Just escape HTML and preserve line breaks for plain text renderedContent = escapeHtml(content).replace(/\n/g, '
'); @@ -2705,10 +2714,13 @@ app.listen(PORT, () => { }); // Helper function to convert markdown to safe HTML -function markdownToSafeHtml(markdownText) { +async function markdownToSafeHtml(markdownText) { try { + // Initialize marked with dynamic import + const markedInstance = await initializeMarked(); + // Configure marked options for better security and features - marked.setOptions({ + markedInstance.setOptions({ gfm: true, // GitHub Flavored Markdown breaks: true, // Convert line breaks to
sanitize: false, // We'll use DOMPurify instead for better control @@ -2718,7 +2730,7 @@ function markdownToSafeHtml(markdownText) { }); // Convert markdown to HTML - const rawHtml = marked.parse(markdownText); + const rawHtml = markedInstance.parse(markdownText); // Sanitize the HTML with DOMPurify const cleanHtml = DOMPurify.sanitize(rawHtml, {