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
15 changes: 11 additions & 4 deletions api/src/main/java/com/instancify/scriptify/api/script/Script.java
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,14 @@
*/
public interface Script<T> {

/**
* Retrieves the security manager associated with this script.
*
* @return The ScriptSecurityManager for this script
* @see ScriptSecurityManager
*/
ScriptSecurityManager getSecurityManager();

/**
* Retrieves the function manager associated with this script.
*
Expand Down Expand Up @@ -46,12 +54,11 @@ public interface Script<T> {
void setConstantManager(ScriptConstantManager constantManager);

/**
* Retrieves the security manager associated with this script.
* Add an extra script on top of the whole script.
*
* @return The ScriptSecurityManager for this script
* @see ScriptSecurityManager
* @param script Extra script
*/
ScriptSecurityManager getSecurityManager();
void addExtraScript(String script);

/**
* Evaluates and executes this script.
Expand Down
2 changes: 1 addition & 1 deletion 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.4.3-SNAPSHOT"
version = "1.4.4-SNAPSHOT"
}

subprojects {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,11 +15,20 @@
import org.graalvm.polyglot.HostAccess;
import org.graalvm.polyglot.Value;

import java.util.ArrayList;
import java.util.List;

public class JsScript implements Script<Value> {

private final ScriptSecurityManager securityManager = new StandardSecurityManager();
private ScriptFunctionManager functionManager = new StandardFunctionManager();
private ScriptConstantManager constantManager = new StandardConstantManager();
private final List<String> extraScript = new ArrayList<>();

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

@Override
public ScriptSecurityManager getSecurityManager() {
Expand All @@ -37,13 +46,13 @@ public void setFunctionManager(ScriptFunctionManager functionManager) {
}

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

@Override
public void setConstantManager(ScriptConstantManager constantManager) {
this.constantManager = constantManager;
public void addExtraScript(String script) {
this.extraScript.add(script);
}

@Override
Expand Down Expand Up @@ -84,8 +93,15 @@ public Value eval(String script) throws ScriptException {
}
}

// Building full script including extra script code
StringBuilder fullScript = new StringBuilder();
for (String extra : extraScript) {
fullScript.append(extra).append("\n");
}
fullScript.append(script);

try {
return context.eval("js", script);
return context.eval("js", fullScript.toString());
} catch (Exception e) {
throw new ScriptException(e);
} finally {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,12 +13,16 @@
import org.mozilla.javascript.Context;
import org.mozilla.javascript.ScriptableObject;

import java.util.ArrayList;
import java.util.List;

public class JsScript implements Script<Object> {

private final Context context = Context.enter();
private final ScriptSecurityManager securityManager = new StandardSecurityManager();
private ScriptFunctionManager functionManager = new StandardFunctionManager();
private ScriptConstantManager constantManager = new StandardConstantManager();
private final List<String> extraScript = new ArrayList<>();

public JsScript() {
context.setWrapFactory(new JsWrapFactory());
Expand Down Expand Up @@ -49,6 +53,11 @@ public void setConstantManager(ScriptConstantManager constantManager) {
this.constantManager = constantManager;
}

@Override
public void addExtraScript(String script) {
this.extraScript.add(script);
}

@Override
public Object eval(String script) throws ScriptException {
ScriptableObject scope = context.initStandardObjects();
Expand All @@ -71,8 +80,15 @@ public Object eval(String script) throws ScriptException {
}
}

// Building full script including extra script code
StringBuilder fullScript = new StringBuilder();
for (String extra : extraScript) {
fullScript.append(extra).append("\n");
}
fullScript.append(script);

try {
return context.evaluateString(scope, script, null, 1, null);
return context.evaluateString(scope, fullScript.toString(), null, 1, null);
} catch (Exception e) {
throw new ScriptException(e);
} finally {
Expand Down