Skip to content
/ zer Public

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

License

Notifications You must be signed in to change notification settings

jbmusso/zer

Repository files navigation

zer

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

Installation

npm install zer

Usage

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

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...).

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'
   }
*/

About

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

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published