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

bson-compilers

Package Overview
Dependencies
Maintainers
36
Versions
21
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

bson-compilers

Source to source compilers using ANTLR

  • 0.7.3
  • latest
  • npm
  • Socket score

Version published
Weekly downloads
0
decreased by-100%
Maintainers
36
Weekly downloads
 
Created
Source

BSON-Compilers

npm version build status downloads

Transpilers for building BSON documents in any language. Current support provided for shell and javascript as inputs. java, c# and python as outputs.

Usage

const compiler = require('bson-compilers');

const input = 'javascript';
const output = 'java';

const string =`
{ item: "book", qty: Binary(Buffer.from("5")), tags: ["red", "blank"], dim_cm: [14, Int32("81")] }`;

try {
  const compiledString = compiler[input][output].compile(string);
  console.log(compiledCode);
  // new Document("item", "book").append("qty", new Binary("5".getBytes("UTF-8")))
  // .append("tags", Arrays.asList("red", "blank"))
  // .append("dim_cm", Arrays.asList(14L, 81")))
} catch (error) {
  console.error(error);
}

API

compiledString = compiler[inputLang][outputLang].compile(codeString)

Output a compiled string given input and output languages.

  • inputLang: Input language of the code string. shell and javascript are currently supported.
  • outputLang: The language you would like the output to be. java, python, shell, javascript, and csharp are currently supported.
  • codeString: The code string you would like to be compiled to your selected output language.

importsString = compiler[inputLang][outputLang].getImports()

Output a string containing the set of import statements for the generated code to compile. These are all the packages that the compiled code could use so that the compiler output will be runnable.

catch (error)

Any compiler errors that occur will be thrown. To catch them, wrap the compiler in a try/catch block.

  • error.message: Message bson-compilers will send back letting you know the compiler error.
  • error.stack: The usual error stacktrace.
  • error.code: Error code that bson-compilers adds to the error object to help you distinguish error types.
  • error.line: If it is a syntax error, will have the line.
  • error.column: If it is a syntax error, will have the column.
  • error.symbol: If it is a syntax error, will have the symbol associated with the error.

Errors

There are a few different error classes thrown by bson-compilers, each with their own error code:

BsonCompilersArgumentError
code: E_BSONCOMPILERS_ARGUMENT

This will occur when you're using a method with a wrong number of arguments, or the arguments are of the wrong type. For example, ObjectId().equals() requires one argument and it will throw if anything other than one argument is provided:

// ✘: this will throw a BsonCompilersArgumentError.
ObjectId().equals(ObjectId(), ObjectId());

// ✔: this won't throw
ObjectId().equals(ObjectId());
// ✘: this will throw a BsonCompilersArgumentError.
ObjectId({});

// ✔: this won't throw
ObjectId();
BsonCompilersAttributeError
code: E_BSONCOMPILERS_ATTRIBUTE

Will be thrown if an invalid method or property is used on a BSON object. For example, since new DBRef() doesn't have a method .foo(), compiler will throw:

// ✘: method foo doesn't exist, so this will throw a BsonCompilersAttributeError .
new DBRef('newCollection', new ObjectId()).foo()

// ✔: this won't throw, since .toString() method exists
new DBRef('newCollection', new ObjectId()).toString(10)
BsonCompilersSyntaxError
code: E_BSONCOMPILERS_SYNTAX

This will throw if you have a syntax error. For example missing a colon in Object assignment, or forgetting a comma in array definition:

// ✘: this is not a proper object definition; will throw E_SYNTAX_GENERIC
{ key 'beep' }

// ✘: this is not a proper array definition, will throw E_SYNTAX_GENERIC
[ 'beep'; 'boop' 'beepBoop' ]

// ✔: neither of these will throw 
{ key: 'beep' }
[ 'beep', 'boop', 'beepBoop' ]
BsonCompilersTypeError
code: E_BSONCOMPILERS_TYPE

This error will occur if a symbol is treated as the wrong type. For example, if a non-function is called:

// ✘: MAX_VALUE is a constant, not a function
Long.MAX_VALUE()

// ✔: MAX_VALUE without a call will not throw
Long.MAX_VALUE
BsonCompilersRangeError
code: E_BSONCOMPILERS_RANGE

If an argument has been passed that is not in the range of expected values.

BsonCompilersUnimplementedError
code: E_BSONCOMPILERS_UNIMPLEMENTED

If there is a feature in the input code that is not currently supported by the compiler.

BsonCompilersRuntimeError
code: E_BSONCOMPILERS_RUNTIME

A generic runtime error will be thrown for all errors that are not covered by the above list of errors. These are usually constructor requirements, for example when using a RegExp() an unsupported flag is given:

// ✘: these are not proper 'RegExp()' flags, a BsonCompilersRuntimeError will be thrown.
new RegExp('ab+c', 'beep')

// ✔: 'im' are proper 'RegExp()' flags
new RegExp('ab+c', 'im')
BsonCompilersInternalError
code: E_BSONCOMPILERS_INTERNAL

In the case where something has gone wrong within compilation, and an error has occured. If you see this error, please create an issue on Github!

Install

npm install -S bson-compilers

Contributing

Head over to the readme on contributing to find out more information on project structure and setting up your environment.

Authors

License

Apache-2.0

FAQs

Package last updated on 01 Aug 2018

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