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

@bitfinexorg/lib-js-util-marshal

v0.9.1

Published

nodejs library for serialization/deserialization of data based on ruby marshal protocol

Downloads

26

Readme

lib-js-util-marshal

Simple library for serializing and deserializing Ruby's Marshal byte sequences in NodeJS.

Supported features

  • dumping integers
  • dumping raw strings (ivar strings don't exist in js so raw strings are encoded in utf-8)
  • dumping floats (1.0 is dumped as int type due to NodeJS number type)
  • dumping nil values (null values)
  • dumping boolean values
  • dumping symbols (js symbols are converted to ruby symbols)
  • dumping symbol links (each js symbol is converted to symbol link when necessary)
  • dumping arrays
  • dumping hashes (non plain objects will throw)
  • loading integers
  • loading raw strings
  • loading ivar strings
  • loading floats (1.0 is loaded as int type due to NodeJS number type)
  • loading nil values (are converted to null on js)
  • loading boolean values
  • loading symbols (in js are converted to strings)
  • loading symbol links (in js are converted to strings)
  • loading arrays
  • loading hashes

Unsupported features

  • bumping/loading bignums
  • bumping/loading objects
  • bumping/loading object links
  • bumping/loading classes
  • bumping/loading modules
  • bumping/loading regular expressions
  • and bumping/loading other types

Installing

npm install @bitfinex/lib-js-util-marshal

Testing

npm test

Usage

'use strict'

const { inspect } = require('util')
const marshal = require('@bitfinex/lib-js-util-marshal')

const myObj = {
  foo: 'bar',
  1: true,
  data: [
    'a', null, false, -3.14,
    [1, 2, { name: 'joe' }]
  ]
}

const serialized = marshal.dump(myObj).toString('hex')
console.log(serialized)
/* prints
0408 7b08 3a06 3154 3a08 666f 6f22 0862 6172 3a09 6461 7461 5b0a 2206 6130 
4666 0a2d 332e 3134 5b08 6906 6907 7b06 3a09 6e61 6d65 2208 6a6f 65
*/

const deserialized = marshal.load(Buffer.from(serialized, 'hex'))
console.log(inspect(deserialized, false, 10, true))
/* prints
{
  '1': true,
  foo: 'bar',
  data: [ 'a', null, false, -3.14, [ 1, 2, { name: 'joe' } ] ]
}
*/

Notes

Detailed info on how object marshaling works in ruby can be found this blog series.