3.0.6 • Published 4 years ago

irc-message-ts v3.0.6

Weekly downloads
2
License
BSD-2-Clause
Repository
github
Last release
4 years ago

irc-message-ts

Performant, streaming IRC message parser - a fork of sigkell/irc-message with a more simplified feature set and TypeScript support.

There are some breaking changes between the original library and this one, namely the lack of stream options, and the tags property will only ever be an object with string values.

This is important to note because there were times when irc-message returned true on a key within the tags object, I have however removed this behaviour in favour of keeping tag types more consistent. This however has the breaking impact that it falls back to an empty string, which is considered falsy in JavaScript. So this means where you may have gotten something like message.tags["my-key"] === true, it will now be message.tags["my-key"] === "", and this equates to a falsy value, if for example used in an if statement. I believe this is a reasonable compromise over supporting two different types in the object.

irc-message-ts provides an object stream capable of parsing RFC1459-compliant IRC messages, with support for IRCv3 message tags. This also includes server-to-server protocols such as TS6, Spanning Tree, and the UnrealIRCd protocol.

Attribution

As previously stated, this is nothing more than a TypeScript version of sigkell's irc-message library. I'd like to give full credit to him for his original creation.

The reason why this isn't a pull request is this makes breaking and opinionated changes to the library that were mainly to suit my own needs, those being the breaking changes listed above.

Installation

yarn add irc-message-ts

Usage

createStream()

Returns an object stream, taking in Buffers/Strings of raw IRC data. Data should not be line-buffered, this stream handles splitting and buffering automatically. and pushing objects containing the following keys.

  • raw - unparsed IRC message (string)
  • tags - IRCv3 message tags
  • prefix - message prefix/source
  • command - message command/verb
  • params - an array of middle and trailing parameters
  • param - the first param in the params array, or an empty string
  • trailing - the last param in the params array, or an empty string

We don't support options like the irc-message library does right now. I felt like these added un-needed bulk and didn't think it was worth adding two extra packages, as it's pretty easy to abstract this on your own. It would also probably involve overloads on the types which I didn't want to add, the goal is to keep the types extremely simple.

import * as net from "net";
import {createStream, IRCMessage} from "irc-message-ts";

net.connect(6667, "irc.freenode.net")
  .pipe(createStream())
  .on("data", (message: IRCMessage) => {
    console.log(message)
  });

parse(data)

You can also access the message parser directly. The parser function expects a string without any CRLF sequences. If the string is malformed, null is returned. Otherwise, an object representing the message is returned (see createStream() for format).

import {parse} from "irc-message-ts";

console.log(parse(":hello!sir@madam PRIVMSG #test :Hello, world!"))
/* {
 *   raw: ":hello!sir@madam PRIVMSG #test :Hello, world!",
 *   tags: {},
 *   prefix: "hello!sir@madam",
 *   command: "PRIVMSG",
 *   params: ["#test", "Hello, world!"],
 *   param: "#test",
 *   trailing: "Hello, world!"
 * }
 */