remix-nlux
Version:
Remix IDE NLUX integration. Remix IDE is the leading IDE for building and deploying smart contracts on Ethereum. NLUX is a JavaScript and React library for building conversational AI experiences.
64 lines (55 loc) • 1.87 kB
text/typescript
type EventFromChunk = {
event: string;
data?: string;
};
const parseEvent = (event: string): EventFromChunk | undefined => {
const regEx = /^event:\s+(?<event>[\w]+)(\ndata: (?<data>[\W\w]*$)){0,1}/g;
const match = regEx.exec(event);
if (!match) {
return undefined;
}
const {event: eventName, data} = match.groups || {};
if (!eventName) {
return undefined;
}
return {event: eventName, data};
};
const parseEventData = (eventData: string): {[key: string]: any} | undefined => {
try {
return JSON.parse(eventData);
} catch (_error) {
return undefined;
}
};
export const parseChunk = (chunk: any): Array<any> | Error | undefined => {
if (typeof chunk !== 'string' || !chunk) {
return undefined;
}
// Extract the line that contains the event name
const regEx = /((?<=(\n*|^))event:\s+(\w+)\n)/g;
const eventStartPositions: number[] = [];
let match = regEx.exec(chunk);
while (match) {
eventStartPositions.push(match.index);
match = regEx.exec(chunk);
}
const eventChunks = eventStartPositions
.map((startPosition, index) => {
const endPosition = eventStartPositions[index + 1] || chunk.length;
return chunk.substring(startPosition, endPosition);
})
.map(parseEvent)
.filter((event) => event !== undefined)
.map((event) => event!)
.filter((event) => event.event === 'data')
.map((event) => event.data)
.filter((data) => data !== undefined)
.map((data) => data!)
.map(parseEventData)
.filter((data) => data !== undefined)
.map((data) => data!)
.map((data) => data.content as string | undefined)
.filter((data) => data !== undefined)
.map((data) => data!);
return eventChunks;
};