@onereach/channel-transformer
Version:
Convert data model between different channels (Slack, Microsoft Teams, Generic...)
29 lines (22 loc) • 1.05 kB
text/typescript
// 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);
};