Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/julien-moreau/groovy-to-js
Groovy to JS
https://github.com/julien-moreau/groovy-to-js
converter groovy
Last synced: 2 months ago
JSON representation
Groovy to JS
- Host: GitHub
- URL: https://github.com/julien-moreau/groovy-to-js
- Owner: julien-moreau
- Created: 2017-09-14T19:07:34.000Z (over 7 years ago)
- Default Branch: master
- Last Pushed: 2019-07-25T10:05:40.000Z (over 5 years ago)
- Last Synced: 2024-10-01T14:59:43.039Z (3 months ago)
- Topics: converter, groovy
- Language: TypeScript
- Size: 231 KB
- Stars: 7
- Watchers: 2
- Forks: 3
- Open Issues: 1
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# groovy-to-js ![Build status](https://travis-ci.org/julien-moreau/groovy-to-js.svg?branch=master)
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
```typescript
import groovy_to_js from 'groovy-to-js';
const js = groovy_to_js(my_groovy_code_as_string);
```# Using the converter
```typescript
// 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:
```typescript
const scope = {
member: [1, 2, 3]
};
```And this groovy script
```typescript
const groovy = `
return myObject.member - 1;
`;
```Would return:
```typescript
`return myObject.member - 1;`;
```The problem is, `member` is an array, so the output should be:
```typescript
`return subtract(myObject.member, 1);
```To prevent this, just build a base scope, that's all!
Example:
```typescript
// 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:
```typescript
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
```