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 🙏

© 2026 – Pkg Stats / Ryan Hefner

binary-relation

v0.6.1

Published

Efficient implementation of in-memory relation between two sets of objects

Readme

Binary-Relation

A small library providing a BinaryRelation class which is an efficient representation of a relation between two sets of objects A and B. A typical use case can be keeping track of dynamically chaning relation between integer or string ids of some entities, such as a relation between user ids and and chatroom names. The implementation does not make many assumptions about the type of A and B (thanks to HashMap ability to use any objects as keys) but using large objects (or arrays) instead of their ids can impact performance as it slows down computation of unique hash, and wastes storage for (possibly multiple) copies of their contents. When in doubt do performance tests and read the HashMap source.

The main goal of this library is to provide efficient implementation, that is O(1) time for add(a,b), remove(a,b) and contains(a,b) and output dependent getAs(b), getBs(a). The speed of countAs(b) and countBs(a) greatly depends on HashMap.count() speed, which is reduced to O(1) in a fork of HashMap https://github.com/qbolec/hashmap.

Installation

 npm install binary-relation --save

Usage

var BinaryRelation = require('binary-relation');
var likes = new BinaryRelation();
likes.add('John','Atlas');
likes.add('John','Encyclopedia');  //it can be one-to-many if you want
likes.add('Alice','Encyclopedia');  //it can be many-to-many
likes.add('John','Atlas');  //duplicated add()s are ignored
likes.contains('John','Atlas')===true;
likes.countBs('John')===2;  //sets are refered to as A and B, so countBs counts books
likes.getBs('John');  //returns a permutation of ['Atlas','Encyclopedia']
likes.countAs('Atlas')===1;  //and As refers to users
likes.getAs('Atlas');  //returns (a permutation of) ['John']
likes.remove('John','Atlas');  //single call to remove() is enough, even if there were multiple add()s
likes.contains('John','Atlas')===false;

Tests

npm test

Contributing

The source code is writen in TypeScript and the JS version is a result of compilation. Therefore proposed changes should be applied to the *.ts files. Please, add unit tests for any new or changed functionality.

Release History

  • 0.4.0 Fixed problems with node require vs TypeScript export
  • 0.1.0 Initial release