12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667 |
- import { v4 as uuidv4 } from 'uuid';
- import sha256 from 'js-sha256';
- //////////////////////////
- // Helper functions
- //////////////////////////
- export const splitStream = (splitOn) => {
- let buffer = '';
- return new TransformStream({
- transform(chunk, controller) {
- buffer += chunk;
- const parts = buffer.split(splitOn);
- parts.slice(0, -1).forEach((part) => controller.enqueue(part));
- buffer = parts[parts.length - 1];
- },
- flush(controller) {
- if (buffer) controller.enqueue(buffer);
- }
- });
- };
- export const convertMessagesToHistory = (messages) => {
- let history = {
- messages: {},
- currentId: null
- };
- let parentMessageId = null;
- let messageId = null;
- for (const message of messages) {
- messageId = uuidv4();
- if (parentMessageId !== null) {
- history.messages[parentMessageId].childrenIds = [
- ...history.messages[parentMessageId].childrenIds,
- messageId
- ];
- }
- history.messages[messageId] = {
- ...message,
- id: messageId,
- parentId: parentMessageId,
- childrenIds: []
- };
- parentMessageId = messageId;
- }
- history.currentId = messageId;
- return history;
- };
- export const getGravatarURL = (email) => {
- // Trim leading and trailing whitespace from
- // an email address and force all characters
- // to lower case
- const address = String(email).trim().toLowerCase();
- // Create a SHA256 hash of the final string
- const hash = sha256(address);
- // Grab the actual image URL
- return `https://www.gravatar.com/avatar/${hash}`;
- };
|