Huge News!Announcing our $40M Series B led by Abstract Ventures.Learn More
Socket
Sign inDemoInstall
Socket

@qnighy/marshal

Package Overview
Dependencies
Maintainers
1
Versions
4
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@qnighy/marshal

Decoder for Ruby's Marshal

  • 0.1.3
  • latest
  • npm
  • Socket score

Version published
Weekly downloads
127K
increased by0.41%
Maintainers
1
Weekly downloads
 
Created
Source

@qnighy/marshal

Parses data exported by Ruby's Marshal.dump.

Quickstart

npm install --save @qnighy/marshal
# OR
yarn add @qnighy/marshal
import { Marshal } from "@qnighy/marshal";
// OR
const { Marshal } = require("@qnighy/marshal");

const buf = Uint8Array.from([
  4, 8, 123, 7, 58, 9, 110, 97, 109, 101, 73, 34, 8, 102, 111, 111, 6, 58, 6,
  69, 84, 58, 12, 110, 117, 109, 98, 101, 114, 115, 91, 8, 105, 6, 105, 7, 105,
  8,
]);
const data = Marshal.parse(buf);
// => { name: 'foo', numbers: [ 1, 2, 3 ] }

API

Marshal.parse

Parses a data exported by Ruby's Marshal.load.

  • Parameters
    • buf: Uint8Array
      a binary data to parse
  • Returns
    • unknown
      the decoded value
  • Throws
    • MarshalError
      when the data contains an invalid format.

parse

Same as Marshal.parse.

MarshalError

An exception raised when loadMarshal encountered an invalid format.

  • Superclass
    • Error

Notes on conversion

Ruby's value structure doesn't correspond to that of JavaScript. Here is how @qnighy/marshal converts values:

  • Fixnums, Bignums, and Floats are all converted to numbers.
  • Strings and Symbols are all converted to strings.
    • Encoding specifications are ignored and all strings are interpreted in UTF-8.
    • Bytes invalid as UTF-8 are replaced by U+FFFD.
  • Hashes are converted to objects.
    • Only keys that are a number or a string (including ones that were Symbols) are picked.
    • Any other keys (nil, [1, 2], etc.) are discarded.
    • If it has default value, it's replaced as the special __ruby_default key.
  • Structs are converted to objects.
  • Regexps are converted to RegExps.
    • Flags are ignored in the current version.
    • Syntax errors in new RegExp(...) are propagated in the current version.
  • Plain Objects are converted to empty objects.
  • Classes and modules are converted to empty objects.
  • All instance variables and class information are discarded. Even instances of subclasses of String, Array, Hash, and Regexp will be recognized the same as instances of their base classes.
  • If two occurrences of objects pointed to the identical object in Ruby, they will be identical in JS.
    • This rule doesn't apply when the object was parsed as a primitive value in JS. Examples include Bignum, Float, and String.
  • Cyclic references are kept as-is.

License

MIT

FAQs

Package last updated on 15 Aug 2021

Did you know?

Socket

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc