Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
20 changes: 13 additions & 7 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -17,16 +17,21 @@ For adding a library only:
<dependency>
<groupId>com.instancify.scriptify</groupId>
<artifactId>core</artifactId>
<version>1.0.1-SNAPSHOT</version>
<version>1.2.0-SNAPSHOT</version>
</dependency>
```

For adding a library with JS:
For adding a library with JS for Rhino or GraalVM:
```xml
<dependency>
<groupId>com.instancify.scriptify</groupId>
<artifactId>script-js</artifactId>
<version>1.0.1-SNAPSHOT</version>
<artifactId>script-js-rhino</artifactId>
<version>1.2.0-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>com.instancify.scriptify</groupId>
<artifactId>script-js-graalvm</artifactId>
<version>1.2.0-SNAPSHOT</version>
</dependency>
```
## Gradle
Expand All @@ -40,10 +45,11 @@ maven {

For adding a library only:
```groovy
implementation "com.instancify.scriptify:core:1.0.1-SNAPSHOT"
implementation "com.instancify.scriptify:core:1.2.0-SNAPSHOT"
```

For adding a library with JS:
For adding a library with JS for Rhino or GraalVM:
```groovy
implementation "com.instancify.scriptify:script-js:1.0.1-SNAPSHOT"
implementation "com.instancify.scriptify:script-js-rhino:1.2.0-SNAPSHOT"
implementation "com.instancify.scriptify:script-js-graalvm:1.2.0-SNAPSHOT"
```
3 changes: 1 addition & 2 deletions build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ java {

allprojects {
group = "com.instancify.scriptify"
version = "1.1.3-SNAPSHOT"
version = "1.2.0-SNAPSHOT"
}

subprojects {
Expand All @@ -30,7 +30,6 @@ subprojects {
annotationProcessor("org.projectlombok:lombok:1.18.36")
testImplementation(platform("org.junit:junit-bom:5.10.0"))
testImplementation("org.junit.jupiter:junit-jupiter")
api(("org.mozilla:rhino:1.7.15"))
}

tasks.test {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,6 @@
import com.instancify.scriptify.api.exception.ScriptFunctionException;
import com.instancify.scriptify.api.script.Script;
import com.instancify.scriptify.api.script.function.ScriptFunction;
import org.mozilla.javascript.NativeArray;

import java.util.ArrayList;
import java.util.Collections;
Expand All @@ -27,8 +26,8 @@ public Object invoke(Script script, Object[] args) throws ScriptFunctionExceptio
throw new ScriptFunctionArgsCountException(1, args.length);
}

if (!(args[0] instanceof NativeArray array)) {
throw new ScriptFunctionArgTypeException(NativeArray.class, args[0].getClass());
if (!(args[0] instanceof List<?> array)) {
throw new ScriptFunctionArgTypeException(List.class, args[0].getClass());
}

List<?> list = new ArrayList<Object>(array);
Expand Down
13 changes: 13 additions & 0 deletions script-js-graalvm/build.gradle.kts
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
plugins {
id("java")
}

repositories {
mavenCentral()
}

dependencies {
api(project(":core"))
api("org.graalvm.polyglot:polyglot:24.1.1")
api("org.graalvm.polyglot:js:24.1.1")
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
package com.instancify.scriptify.script;

import com.instancify.scriptify.api.exception.ScriptFunctionException;
import com.instancify.scriptify.api.script.Script;
import com.instancify.scriptify.api.script.function.ScriptFunction;
import org.graalvm.polyglot.proxy.ProxyExecutable;
import org.graalvm.polyglot.Value;

public class JsFunction implements ProxyExecutable {

private final Script script;
private final ScriptFunction function;

public JsFunction(Script script, ScriptFunction function) {
this.script = script;
this.function = function;
}

@Override
public Object execute(Value... arguments) {
Object[] args = new Object[arguments.length];
for (int i = 0; i < arguments.length; i++) {
args[i] = arguments[i].as(Object.class);
}
try {
return function.invoke(script, args);
} catch (ScriptFunctionException e) {
throw new RuntimeException(e);
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,54 @@
package com.instancify.scriptify.script;

import com.instancify.scriptify.api.script.Script;
import com.instancify.scriptify.api.script.constant.ScriptConstant;
import com.instancify.scriptify.api.script.constant.ScriptConstantManager;
import com.instancify.scriptify.api.script.function.ScriptFunction;
import com.instancify.scriptify.api.script.function.ScriptFunctionManager;
import org.graalvm.polyglot.*;

public class JsScript implements Script {

private final Context context = Context.create();
private ScriptFunctionManager functionManager;
private ScriptConstantManager constantManager;

@Override
public ScriptFunctionManager getFunctionManager() {
return functionManager;
}

@Override
public void setFunctionManager(ScriptFunctionManager functionManager) {
this.functionManager = functionManager;
}

@Override
public ScriptConstantManager getConstantManager() {
return constantManager;
}

@Override
public void setConstantManager(ScriptConstantManager constantManager) {
this.constantManager = constantManager;
}

@Override
public void eval(String script) {
Value bindings = context.getBindings("js");

if (functionManager != null) {
for (ScriptFunction function : functionManager.getFunctions().values()) {
bindings.putMember(function.getName(), new JsFunction(this, function));
}
}

if (constantManager != null) {
for (ScriptConstant constant : constantManager.getConstants().values()) {
bindings.putMember(constant.getName(), constant.getValue());
}
}

context.eval("js", script);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,6 @@ repositories {
}

dependencies {
api("org.jetbrains:annotations:26.0.1")
api(project(":core"))
api("org.mozilla:rhino:1.7.15")
}
Original file line number Diff line number Diff line change
Expand Up @@ -37,12 +37,18 @@ public void setConstantManager(ScriptConstantManager constantManager) {

@Override
public void eval(String script) {
for (ScriptFunction function : functionManager.getFunctions().values()) {
scope.put(function.getName(), scope, new JsFunction(this, function));
if (functionManager != null) {
for (ScriptFunction function : functionManager.getFunctions().values()) {
scope.put(function.getName(), scope, new JsFunction(this, function));
}
}
for (ScriptConstant constant : constantManager.getConstants().values()) {
ScriptableObject.putConstProperty(scope, constant.getName(), constant.getValue());

if (constantManager != null) {
for (ScriptConstant constant : constantManager.getConstants().values()) {
ScriptableObject.putConstProperty(scope, constant.getName(), constant.getValue());
}
}

context.evaluateString(scope, script, null, 1, null);
}
}
3 changes: 2 additions & 1 deletion settings.gradle.kts
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
rootProject.name = "instancify-Scriptify"
include("api")
include("core")
include("script-js")
include("script-js-graalvm")
include("script-js-rhino")
Loading