0.3.3 • Published 3 months ago

@hyrious/marshal v0.3.3

Weekly downloads
-
License
MIT
Repository
github
Last release
3 months ago

@hyrious/marshal

version npm package size downloads

Ruby marshal for the browser and Node.js.

Install

npm add @hyrious/marshal

Usage

import { dump, load } from "@hyrious/marshal";
dump(null); // Uint8Array(3) [ 4, 8, 48 ]
load("\x04\b0"); // null

// in Node.js
load(fs.readFileSync("data"));

// in Browser
load(await file.arrayBuffer());

Ruby JavaScript

RubyJavaScript
nilnull
"string""string"
:symbolSymbol("symbol") ^1
123456123456 (number)
123.456123.456 (number)
/cat/im/cat/im (RegExp)
[][] ^2
{}{} (plain object) ^3
Object.newRubyObject { class: Symbol(object) } ^2

^1: Symbols are always decoded in UTF-8 even if they may have other encodings. ^2: Instance variables are stored directly as props, i.e. obj[Symbol(@a)] = 1. ^3: String/symbol/number keys are always decoded as JS object props.

String

Because users may store binary data that cannot be decoded as UTF-8 in Ruby, strings are decoded into Uint8Array firstly, then converted to string using TextDecoder if seeing an instance variable indicating the encoding.

load('\x04\b"\0'); //=> Uint8Array []
load('\x04\bI"\0\x06:\x06ET'); //=> ""

The special instance variables are:

namevalueencoding
:Etrue / falseUTF-8 / ASCII
:encoding"enc"enc

So for strict compatibility, you should check if a string is Uint8Array before using it:

var a = load(data);
if (a instanceof Uint8Array) a = decode(a); // if you know it must be a string
if (typeof a === "string") do_something(a);

Or you can use options.string to control the behavior, see options.string.

Symbols

You can use Symbol.keyFor(sym) in JavaScript to get the symbol name in string.

RegExp

Only i (ignore case) and m (multi-line) flags are preserved.

Hash

This library decodes Hash as plain object by default, which means unusual keys like an object is ignored. However, it is still possible to keep these keys using Map or wrapper classes, see options.hash.

Instance Variables

This library decodes instance variables (often @a = 1) as object props. It is guaranteed that you can retrieve these properties using Object.getOwnPropertySymbols(). It is possible to convert these symbols to strings, see options.ivarToString.

API Reference

FAQ

ChangeLog

Develop

  • Run npm t to run tests.
  • Run npm t clone to only run clone.ts.

Reference

License

MIT @ hyrious

0.3.3

3 months ago

0.3.0

9 months ago

0.3.2

8 months ago

0.3.1

9 months ago

0.2.5

1 year ago

0.2.1

2 years ago

0.2.0

2 years ago

0.2.3

2 years ago

0.2.2

2 years ago

0.2.4

2 years ago

0.1.6

2 years ago

0.1.5-0

3 years ago

0.1.5-1

3 years ago

0.1.5

3 years ago

0.1.4

3 years ago

0.1.3

3 years ago

0.1.2

3 years ago

0.1.1

3 years ago

0.1.0

3 years ago