UNPKG

@onereach/channel-transformer

Version:

Convert data model between different channels (Slack, Microsoft Teams, Generic...)

29 lines (22 loc) 1.05 kB
// const escapeHtml = ( // // eslint-disable-next-line @typescript-eslint/no-var-requires // (mod) => (mod && mod.__esModule) ? mod : { "default": mod })(require("escape-html") // ).default; import { escape as escapeHtml } from 'html-escaper'; const getRegexPattern = (tag: string) => new RegExp(`<\\s*${tag}[^>]*>[\\s\\S]*?(<\\s*\\/\\s*${tag}[^>]*>|$)`, 'gi'); const REGEX_PATTERN = { SCRIPT: getRegexPattern('script'), STYLE: getRegexPattern('style'), }; const findProhibitedTags = (...regexes: Array<RegExp>) => (str: string) => regexes.reduce((acc, regex) => [...acc, ...(str.match(regex) || [])],[]); const getProhibitedTags = (str: string): Array<string> => findProhibitedTags(...Object.values(REGEX_PATTERN))(str); const escapeProhibitedTag = (str: string, match: string) => str.replace(match, escapeHtml(match)); export const escapeHtmlString = (str: string) => { if(!str || typeof str !== 'string') return str; return getProhibitedTags(str). reduce(escapeProhibitedTag, str); };