8000 GitHub - jviotti/jsonbinpack-poc at v1.1.1
[go: up one dir, main page]
More Web Proxy on the site http://driver.im/
Skip to content
This repository was archived by the owner on Jul 22, 2022. It is now read-only.

jviotti/jsonbinpack-poc

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

GitHub Actions License PRs Welcome

JSON BinPack

JSON BinPack is an open-source binary JSON serialization format with a strong focus on space efficiency. It can run in schema-driven and schema-less mode to encode any JSON document given a matching JSON Schema 2020-12 definition.

Documentation

Installation

npm install --save jsonbinpack

Example

const jsonbinpack = require('jsonbinpack')

// Declare a JSON Schema definition
const schema = {
  $schema: 'https://json-schema.org/draft/2020-12/schema',
  type: 'object',
  properties: {
    foo: { type: 'string' }
  }
}

// (1) Compile the JSON Schema definition into an Encoding schema
const encodingSchema = await jsonbinpack.compileSchema(schema)

// (2) Serialize a matching JSON document using the Encoding schema
const buffer = jsonbinpack.serialize(encodingSchema, {
  foo: 'bar'
})

// (3) Deserialize the buffer into the original JSON document
const result = jsonbinpack.deserialize(encodingSchema, buffer)

console.log(result)
> { foo: 'bar' }

Reference

jsonbinpack.compileSchema(JSON Schema): Promise<Encoding>

Convert a JSON Schema definition into an Encoding schema for use with the .serialize() and .deserialize() functions.

jsonbinpack.serialize(Encoding, JSON): Buffer

Serialize a JSON value according to an Encoding schema.

jsonbinpack.deserialize(Encoding, Buffer): JSON

Deserialize a buffer according to an Encoding schema.

Building from source

Requirements:

  • Node.js
  • npm
  • GNU Make

Installing dependencies:

npm install

Compiling the project:

make
# Run tests
make test
# Run linter
make lint

Contributing

Thanks for your interest in contributing to the project. We welcome contributions in any of the following areas:

  • Add more JSON + JSON Schema test cases in the test/e2e directory
  • Improve the documentation at docs
  • Suggesting new encodings to make JSON BinPack more space-efficient
  • Performance improvements, primarily in the encoder
  • General bug fixes

Additionally, we are tracking the following major changes:

  • Re-write the encoders in C++ and compile to WebAssembly
  • Generate serialization and deserialization C++ code that does not dynamically traverses the encoding schema for runtime performance reasons
  • Support recursive JSON Schema documents
  • Implement support for the if, then, and else JSON Schema keywords
  • Implement support for the anyOf JSON keyword
  • Implement support for inline binary blobs defined with the contentEncoding JSON Schema keyword

Don't hesitate in getting in touch by creating a ticket if you require any guidance on contributing to the project.

License

This project is released under the terms specified in the license.

Contributors 2

  •  
  •  

Languages

0