No Particular Method

    @qnighy/marshal
    TypeScript icon, indicating that this package has built-in type declarations

    0.1.3 • Public • Published

    @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

    Keywords

    none

    Install

    npm i @qnighy/marshal

    DownloadsWeekly Downloads

    46,722

    Version

    0.1.3

    License

    MIT

    Unpacked Size

    39.5 kB

    Total Files

    23

    Last publish

    Collaborators

    • qnighy