@cobuildlab/8base-chat
Version:
Chat component that uses 8base
56 lines (44 loc) • 1.28 kB
text/typescript
// -- CONSTANTS
const HTML_ENTITIES = [['&', '&'], ['<', '<'], ['>', '>']];
// -- 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;
}