UNPKG

@botonic/react

Version:

Build Chatbots using React

53 lines 2.42 kB
const MARKDOWN_BOLD_OPTION_1 = '**'; const MARKDOWN_BOLD_OPTION_2 = '__'; const MARKDOWN_WHATSAPP_BOLD = '*'; const MARKDOWN_ITALIC_OPTION_1 = '*'; const MARKDOWN_WHATSAPP_ITALIC = '_'; const MARKDOWN_BOLD_OR_ITALIC_REGEX = /(\*\*|__)(.*?)\1|(\*|_)(.*?)\3/g; const MARKDOWN_NORMALIZED_BOLD_ITALIC_OPEN = '**_'; const MARKDOWN_NORMALIZED_BOLD_ITALIC_CLOSE = '_**'; const MARKDOWN_BOLD_AND_ITALIC_OPTION1 = /(_\*\*)(.*?)(\*\*_)/g; const MARKDOWN_BOLD_AND_ITALIC_OPTION2 = /(\*__)(.*?)(__\*)/g; const MARKDOWN_BOLD_AND_ITALIC_OPTION3 = /(__\*)(.*?)(\*__)/g; export function whatsappMarkdown(text) { const textNormalized = normalizeMarkdown(text); const matches = textNormalized.match(MARKDOWN_BOLD_OR_ITALIC_REGEX); if (matches) { const matchesResult = matches.map(match => { if (match.startsWith(MARKDOWN_BOLD_OPTION_1)) { return replaceAllOccurrences(match, MARKDOWN_BOLD_OPTION_1, MARKDOWN_WHATSAPP_BOLD); } if (match.startsWith(MARKDOWN_BOLD_OPTION_2)) { return replaceAllOccurrences(match, MARKDOWN_BOLD_OPTION_2, MARKDOWN_WHATSAPP_BOLD); } if (match.startsWith(MARKDOWN_ITALIC_OPTION_1)) { return replaceAllOccurrences(match, MARKDOWN_ITALIC_OPTION_1, MARKDOWN_WHATSAPP_ITALIC); } return match; }); let textWhatsapp = textNormalized; for (let i = 0; i < matches.length; i++) { textWhatsapp = replaceAllOccurrences(textWhatsapp, matches[i], matchesResult[i]); } return textWhatsapp; } return text; } function normalizeMarkdown(text) { text = replaceBoldItalic(text, MARKDOWN_BOLD_AND_ITALIC_OPTION1); text = replaceBoldItalic(text, MARKDOWN_BOLD_AND_ITALIC_OPTION2); text = replaceBoldItalic(text, MARKDOWN_BOLD_AND_ITALIC_OPTION3); return text; } function replaceBoldItalic(text, regex) { return text.replace(regex, (match, markdownOpen, textInsideMarkdown, markdownClose) => { if (match.startsWith(markdownOpen) && match.endsWith(markdownClose)) { return `${MARKDOWN_NORMALIZED_BOLD_ITALIC_OPEN}${textInsideMarkdown}${MARKDOWN_NORMALIZED_BOLD_ITALIC_CLOSE}`; } return match; }); } function replaceAllOccurrences(text, searchValue, replaceValue) { return text.split(searchValue).join(replaceValue); } //# sourceMappingURL=markdown.js.map