UNPKG

@cobuildlab/8base-chat

Version:

Chat component that uses 8base

56 lines (44 loc) 1.28 kB
// -- CONSTANTS const HTML_ENTITIES = [['&', '&amp;'], ['<', '&lt;'], ['>', '&gt;']]; // -- UTILS export function getMessageTimestamp(ts: string | number | Date) { const date = new Date(ts); const currentDate = new Date(); const timeOpts = { hour: '2-digit', minute: '2-digit', }; const dateOpts = { year: currentDate.getFullYear() === date.getFullYear() ? undefined : '2-digit', month: '2-digit', day: '2-digit', }; return `${date.toLocaleTimeString('default', timeOpts)} ${date.toLocaleDateString( 'default', dateOpts, )}`; } /** * Sanitizes a message by replacing control characters with HTML entities. * @param message */ export function sanitizeMessage(message: string) { for (const [character, entity] of HTML_ENTITIES) { message = message.replace(new RegExp(character, 'g'), entity); } return message; } /** * Replaces HTML entities with characters. * @param message */ export function desanitizeMessage(message: string) { // '&' should be replaced last const htmlEntities = [...HTML_ENTITIES].sort((a, b) => a[0] === '&' ? 1 : b[0] === '&' ? -1 : 0, ); for (const [character, entity] of htmlEntities) { message = message.replace(new RegExp(entity, 'g'), character); } return message; }