aboutsummaryrefslogblamecommitdiffhomepage
path: root/server/helpers/markdown.ts
blob: 2126bb7526d00054cc5131e5aa56e4f069f2f87b (plain) (tree)
1
2
3
4
5
6
7
8
9
10
11










                                                                                              

                      









                                                                   
                               

                      










                                                                   


                                                                              

               
 
import { SANITIZE_OPTIONS, TEXT_WITH_HTML_RULES } from '@shared/core-utils'

const sanitizeHtml = require('sanitize-html')
const markdownItEmoji = require('markdown-it-emoji/light')
const MarkdownItClass = require('markdown-it')
const markdownIt = new MarkdownItClass('default', { linkify: true, breaks: true, html: true })

markdownIt.enable(TEXT_WITH_HTML_RULES)
markdownIt.use(markdownItEmoji)

const toSafeHtml = text => {
  if (!text) return ''

  // Restore line feed
  const textWithLineFeed = text.replace(/<br.?\/?>/g, '\r\n')

  // Convert possible markdown (emojis, emphasis and lists) to html
  const html = markdownIt.render(textWithLineFeed)

  // Convert to safe Html
  return sanitizeHtml(html, SANITIZE_OPTIONS)
}

const mdToPlainText = text => {
  if (!text) return ''

  // Convert possible markdown (emojis, emphasis and lists) to html
  const html = markdownIt.render(text)

  // Convert to safe Html
  const safeHtml = sanitizeHtml(html, SANITIZE_OPTIONS)

  return safeHtml.replace(/<[^>]+>/g, '')
                 .replace(/\n$/, '')
                 .replace('\n', ', ')
}

// ---------------------------------------------------------------------------

export {
  toSafeHtml,
  mdToPlainText
}