groovy-to-js

0.0.13 • Public • Published

groovy-to-js Build status

Groovy to JS simply tries to convert a Groovy code to JavaScript code.

Features

  • Check types to call methods (subtract, add, multiply, etc.) on arrays
  • Supports [number].times { ... }
  • Supports simple closures
  • Supports ranges ([number]..[number], [identifier]..[number], etc.)
  • Supports triple quotes (simple & double) strings

Roadmap

  • Test on advanced code
  • Provide more functions to dictionnary

Not supported

  • Class definitions
  • array[index < 0]

Using Groovy-To-JS

import groovy_to_js from 'groovy-to-js';
const js = groovy_to_js(my_groovy_code_as_string);

Using the converter

// Import lib
import Analyser from 'groovy-to-js';
 
const groovy = `
    def arr = [1, 2, 3];
    arr -= 1;
 
    def map = [
        a: 0,
        b: [1, 2, 3]
    ];
    map.a = map.b.size();
`;
 
const js = Analyser.convert(groovy);
console.log(js);
// Gives:
    /*
    var arr = [1, 2, 3];
    arr = subtract(arr, 1);
 
    var map = {
        a: 0,
        b: [1, 2, 3]
    };
    map.a = map.b.length
    */
 

Giving a scope to check types

Converting a groovy script would require to know the base scope.

Given this scope:

const scope = {
    member: [1, 2, 3]
};

And this groovy script

const groovy = `
    return myObject.member - 1;
`;

Would return:

`return myObject.member - 1;`;

The problem is, member is an array, so the output should be:

`return subtract(myObject.member, 1);

To prevent this, just build a base scope, that's all!

Example:

// Import scope
import { Analyser, Variable } from 'groovy-to-js';
 
const scope = Variable.buildFrom({
    member: [1, 2, 3]
});
 
const groovy = `
    return myObject.member - 1;
`;
 
const js = Analyser.convert(groovy, scope);
console.log(js);
// Gives:
    /*
    return subtract(myObject.member, 1);
    */

Requiring groovy functions

These are called augmentations that you can import like:

import { augmentations } from 'groovy-to-js';
 
const a = [1, 2, 3];
const b = 2;
const c = [2];
 
console.log(augmentations.subtract(a, b)); // [1, 3]
console.log(augmentations.subtract(a, c)); // [1, 3]
 
console.log(augmentations.add(a, b)); // [1, 2, 3, 2];
console.log(augmentations.add(a, c)); // [1, 2, 3, 2];
 
console.log(augmentations.multiply(a, b)); // [1, 2, 3, 1, 2, 3];
console.log(augmentations.multiply(a, c)); // [1, 2, 3, 1, 2, 3];
 
console.log(augmentations.range(2, 5)); // [2, 3, 4, 5]
 
augmentations.times(3, (it) => {
    console.log(it);
}); // 3 -> 3 -> 3

Readme

Keywords

none

Package Sidebar

Install

npm i groovy-to-js

Weekly Downloads

28

Version

0.0.13

License

none

Unpacked Size

182 kB

Total Files

17

Last publish

Collaborators

  • luaacro
  • samjoch