// utils.ts var utf8Decoder = new TextDecoder("utf-8"); var utf8Encoder = new TextEncoder(); function normalizeURL(url) { let p = new URL(url); p.pathname = p.pathname.replace(/\/+/g, "/"); if (p.pathname.endsWith("/")) p.pathname = p.pathname.slice(0, -1); if (p.port === "80" && p.protocol === "ws:" || p.port === "443" && p.protocol === "wss:") p.port = ""; p.searchParams.sort(); p.hash = ""; return p.toString(); } function insertEventIntoDescendingList(sortedArray, event) { let start = 0; let end = sortedArray.length - 1; let midPoint; let position = start; if (end < 0) { position = 0; } else if (event.created_at < sortedArray[end].created_at) { position = end + 1; } else if (event.created_at >= sortedArray[start].created_at) { position = start; } else while (true) { if (end <= start + 1) { position = end; break; } midPoint = Math.floor(start + (end - start) / 2); if (sortedArray[midPoint].created_at > event.created_at) { start = midPoint; } else if (sortedArray[midPoint].created_at < event.created_at) { end = midPoint; } else { position = midPoint; break; } } if (sortedArray[position]?.id !== event.id) { return [...sortedArray.slice(0, position), event, ...sortedArray.slice(position)]; } return sortedArray; } function insertEventIntoAscendingList(sortedArray, event) { let start = 0; let end = sortedArray.length - 1; let midPoint; let position = start; if (end < 0) { position = 0; } else if (event.created_at > sortedArray[end].created_at) { position = end + 1; } else if (event.created_at <= sortedArray[start].created_at) { position = start; } else while (true) { if (end <= start + 1) { position = end; break; } midPoint = Math.floor(start + (end - start) / 2); if (sortedArray[midPoint].created_at < event.created_at) { start = midPoint; } else if (sortedArray[midPoint].created_at > event.created_at) { end = midPoint; } else { position = midPoint; break; } } if (sortedArray[position]?.id !== event.id) { return [...sortedArray.slice(0, position), event, ...sortedArray.slice(position)]; } return sortedArray; } var MessageNode = class { _value; _next; get value() { return this._value; } set value(message) { this._value = message; } get next() { return this._next; } set next(node) { this._next = node; } constructor(message) { this._value = message; this._next = null; } }; var MessageQueue = class { _first; _last; get first() { return this._first; } set first(messageNode) { this._first = messageNode; } get last() { return this._last; } set last(messageNode) { this._last = messageNode; } _size; get size() { return this._size; } set size(v) { this._size = v; } constructor() { this._first = null; this._last = null; this._size = 0; } enqueue(message) { const newNode = new MessageNode(message); if (this._size === 0 || !this._last) { this._first = newNode; this._last = newNode; } else { this._last.next = newNode; this._last = newNode; } this._size++; return true; } dequeue() { if (this._size === 0 || !this._first) return null; let prev = this._first; this._first = prev.next; prev.next = null; this._size--; return prev.value; } }; export { MessageNode, MessageQueue, insertEventIntoAscendingList, insertEventIntoDescendingList, normalizeURL, utf8Decoder, utf8Encoder };