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

object-encode

v1.0.3

Published

Encode your objects into simple string hashes that you can then pass around. Then decode them back with ease.

Downloads

2,737

Readme

Object Encode

This module has been used in production a few times already and I haven't had any issues raised so far. The latest update was only to write better tests using jest.

I would love to hear about what you build using Object Encode.

Intro

Sometimes you need to safely encode an object into a string and then decode it back into an object.

My Use Case

My desire to encode/decode objects to and from strings came when I needed time based database tables so that I can easily partition & 'retire' old data but keep it on disk in case I needed it.

For this use case, I decided that users would request for data using a hash id. So I decided to code all the info necessary into the hash (string) i.e {user:1, database:'2016-10-09_data'} translates to a hash id like 'x2YWw6bGV2ZWxfMV9WYWwpKSxudWxsOi0tLHRoaXM6dGhhdCk=' which the user then uses.

You get the point?

OK, How To Use

First install via npm npm install --save object-encode

Then initialize and (en/de)code away!


var objCodec = require('object-encode');

var object = {
  this : 'that',
  foo : 'bar',
  "null" : false,
  nested : {
    "level1" : {
      val : 'level 1 Val',
      "level2" : {
        val : "level 2 Val"
      }
    }
  }
};

var salt = ')*myNewAWESOME-salt254@%^&%';

//encode object using specified algorithm
var encodedString = objCodec.encode_object( object, 'base64', salt );

//decode string back to the object
var decodedObject = objCodec.decode_object(encodedString, 'base64', salt );

console.log(encodedString);
console.log(decodedObject);

API

This module uses juri to encode/decode objects to strings and string-codec to further encode those strings using one of hex, base64, ascii85, base91, rot5, rot13, rot18, rot47, rev, url or punycode algorithms.

.encode_object(object [,algorithm, salt])

Takes an object and encodes it using the algorithm given into a string, and then shuffles the string using the given salt value.

NOTE:

  • encode_object() uses JSON.stringify methods. As such, only pass objects that can be stringified safely. Things like circular references and functions will throw an error.

  • Default algorithm is base64.

  • Salt allows you to mangle your encoded string so that it may not be easily decoded back into the object without one knowing that value.

  • Default algorithm is changeme.

.decode_object(string [,algorithm, salt])

Takes an string, unshuffles it using provided salt and then decodes it using the algorithm given back to an object.

NOTE: (AS ABOVE)

If all you need is string encoding & decoding...

I have also exposed two other methods:

  • encode(string, [algorithm, runs])
  • decode(string, [algorithm, runs])

To help you encode/decode strings.

What's Your Use Case?

I needed hash ids that could be shared via web addresses and therefore required a method that them short and URL-safe. But that might not be what you want to do with your encoded objects.

Depending on your use case, you can choose another algorithm and see how things go.

Install dev dependecies and run test.js to see how they compare.

A Note On Security

The default salt value is 'changeme' so please use your own. Like passwords, choose a strong salt value.

Please do not encode sensitive data like passwords within your objects. This library is not built with security in mind. The ultimate goal was to simply encode objects into strings so be wise & keep your sensitive data safe!