import { IrcMessage } from './types'; /** * Parse IRC message. * * @since 0.1.0 */ export function parseIrc(raw: string): IrcMessage { const msg: IrcMessage = { raw, tags: null, prefix: null, cmd: null, args: [], }; let s = raw.replace(/\r?\n$/, ''); if (!s) return msg; if (s[0] === '@') { const sp = s.indexOf(' '); msg.tags = s.slice(1, sp); s = s.slice(sp + 1); } if (s[0] === ':') { const i = s.indexOf(' '); msg.prefix = s.slice(1, i); s = s.slice(i + 1); } const sp = s.indexOf(' '); if (sp === -1) { msg.cmd = s; return msg; } msg.cmd = s.slice(0, sp); s = s.slice(sp + 1); const trailIdx = s.indexOf(' :'); if (trailIdx !== -1) { const pre = s.slice(0, trailIdx).split(' ').filter(Boolean); msg.args = pre.concat([s.slice(trailIdx + 2)]); } else { msg.args = s.split(' ').filter(Boolean); } return msg; }