Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

https://github.com/jbmusso/zer

Zer helps you create and serialize generic JavaScript chains to String representations of any languages by leveraging ES2015 Proxy objects.
https://github.com/jbmusso/zer

chain dsl gremlin javascript-chains javascript-proxy serialization serializer sql

Last synced: about 23 hours ago
JSON representation

Zer helps you create and serialize generic JavaScript chains to String representations of any languages by leveraging ES2015 Proxy objects.

Awesome Lists containing this project

README

        

# zer

Zer helps you serialize any JavaScript chains to String representations of any languages by leveraging ES2015 `Proxy` objects.

## Installation

```shell
npm install zer
```

## Usage

Zer is currently useful for generating Gremlin-Groovy graph database queries.

```javascript

import { gremlin, renderChain } from 'zer';

const { g, out, has } = gremlin;

const chain = g.V().has('name', 'Alice').repeat(out('knows')).until(has('name', 'Bob'));
const rendered_chain = renderChain(chain);

console.log(rendered_chain);
/*
{
query: 'g.V().has(p0, p1).repeat(out(p2)).until(has(p3, p4))',
params: {
p0: 'name',
p1: 'Alice',
p2: 'knows',
p3: 'name',
p4: 'Bob'
}
}
*/

console.log(chain.__repr__());
/*
[
ChainStart { name: 'g', type: 'CHAIN_START' },
Step { name: 'V', type: 'STEP' },
Arguments { params: [], type: 'ARGUMENTS' },
Step { name: 'has', type: 'STEP' },
Arguments { params: [ 'name', 'Alice' ], type: 'ARGUMENTS' },
Step { name: 'repeat', type: 'STEP' },
Arguments {
params: [
{
query: 'out(p0)',
params: {
p0: 'knows'
}
}
],
type: 'ARGUMENTS'
},
Step {
name: 'until',
type: 'STEP'
},
Arguments {
params: [
{
query: 'has(p0, p1)',
params: {
p0: 'name',
p1: 'Bob'
}
}
],
type: 'ARGUMENTS'
}
]
*/

```

## Argument escaping

Zer allows you to output Objects, not just Strings. This is especially useful when you wish to escape some arguments from your chain, such as when creating a DSL for a database client (SQL, Gremlin...).

```javascript
const chain = g.V().has('name', 'Alice').repeat(out('knows')).until(has('name', 'Bob'));

console.log(chain.__repr__())

/*
{ query: 'g.V().has(p0, p1).has(p2, p3).repeat(out(p4, p5))',
params:
{
p0: 'name',
p1: 'Alice',
p2: 'age',
p3: 30,
p4: 'firstname',
p5: 'Bob'
}
*/
```