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

@nrsk/backpack

v1.0.0

Published

MessagePack implementation with back-referencing.

Downloads

4

Readme

backpack

Build/Test NPM Supported Node Versions Semantic Release Conventional Commits

MessagePack implementation with back-referencing extension.

Features

[!WARNING] This is mostly a learning project and—although it works—it is not ready to be used in production.

BackPack implements MessagePack specification and the following extensions:

Back-referencing

It's a really simple extension that instructs serializer to replace short repeating strings and property names with numeric ids (references) and keep a map of references to strings in a message header. When deserializing, it does the opposite: reads a message header and then replaces references with associated strings.

Notes

  • References implemented as extension formats, specifically fixext1 and fixext2.

  • There is a maximum number of references that can be safely stored: $2^{16} = 65536$. There is no point in storing 32 bit long references, since the overhead makes the whole approach non-viable.

  • Right now all strings that are 2-16 ~~bytes~~ characters long get turned into references. Turning into references only duplicated strings would make gains even more noticeable, but it's not an easy feat.

Usage

Doesn't get any simpler than this:

import { serialize, deserialize } from '@nrsk/backpack'

const data = {
  /* ... */
}

const se = serialize(data)
const de = deserialize(se)

Benchmarks

Benchmarks for both size and performance can be found here.

Todo

This is mostly about public API:

  • [ ] Add options:
    • [ ] Disable built-ins (default: false). If true, disables all built-in extensions;
    • [ ] Use Timestamp extension (default: true);
    • [ ] Use Reference extension (default: true);
    • [ ] Use Map extension (default: true);
    • [ ] Use Set extension (default: true);
    • [ ] Ignore undefined (default: false). If false, it will be encoded as null. Setting to true should theoretically allow one to implement a custom extension to encode undefined as a distinct format/type.
    • [ ] Throw on unknown data type (default: true). Setting to false will just ignore unknown data types and formats.
  • [ ] Rewrite extension system.

License

MIT.