Advanced JavaScript Object Serialization

1.0.5 · active · verified Sun Apr 19

replicator is a JavaScript library designed for advanced object serialization, addressing limitations of standard JSON.stringify. It currently stands at version 1.0.5, with an active release cadence indicated by recent patch versions. A key differentiator is its ability to correctly handle circular references within objects, preventing common serialization errors. Beyond standard JSON-serializable types, replicator offers built-in support for a wide array of JavaScript objects including `undefined`, `NaN`, `Date`, `RegExp`, `Error`, `Map`, `Set`, `ArrayBuffer`, and various Typed Arrays. This makes it suitable for complex data structures that would otherwise require manual transformation before serialization. Furthermore, the library is highly extensible, allowing developers to define custom type transforms to serialize and deserialize any bespoke object types. It is also agnostic to the underlying serialization format, enabling its use with JSON, BSON, Protobuf, or other encoders. This flexibility allows it to be adapted for diverse application needs, from IPC in Node.js to storing complex state in the browser.

Common errors

Warnings

Install

Imports

Quickstart

Demonstrates basic encoding and decoding of an object with various built-in types, including Set, RegExp, Date, undefined, NaN, Error, and a circular reference.

const Replicator = require('replicator');

const replicator = new Replicator();

const a = {};
a.b = a; // Create a circular reference

const complexObject = {
    key1: new Set([1, 2, 3]),
    key2: /\s+/ig,
    key3: a,
    key4: new Date(),
    key5: undefined,
    key6: NaN,
    key7: new Error('Something went wrong')
};

console.log('Original object:', complexObject);

const str = replicator.encode(complexObject);
console.log('Encoded string:', str);

const obj = replicator.decode(str);
console.log('Decoded object:', obj);

// Verify circular reference
console.log('Decoded circular reference:', obj.key3.b === obj.key3);
// Verify Set decoding
console.log('Decoded Set:', obj.key1 instanceof Set && obj.key1.has(1));

view raw JSON →