npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

irc-message-ts

v3.0.6

Published

Performant, streaming IRC message parser based off of github.com/sigkell/irc-message

Downloads

143

Readme

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!"
 * }
 */