Skip to content

Commit cf22937

Browse files
committed
feat: added Script#addExtraScript for adding extra script code
1 parent dd75a16 commit cf22937

File tree

3 files changed

+49
-10
lines changed
  • api/src/main/java/com/instancify/scriptify/api/script
  • script-js-graalvm/src/main/java/com/instancify/scriptify/js/graalvm/script
  • script-js-rhino/src/main/java/com/instancify/scriptify/js/rhino/script

3 files changed

+49
-10
lines changed

api/src/main/java/com/instancify/scriptify/api/script/Script.java

Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,14 @@
1313
*/
1414
public interface Script<T> {
1515

16+
/**
17+
* Retrieves the security manager associated with this script.
18+
*
19+
* @return The ScriptSecurityManager for this script
20+
* @see ScriptSecurityManager
21+
*/
22+
ScriptSecurityManager getSecurityManager();
23+
1624
/**
1725
* Retrieves the function manager associated with this script.
1826
*
@@ -46,12 +54,11 @@ public interface Script<T> {
4654
void setConstantManager(ScriptConstantManager constantManager);
4755

4856
/**
49-
* Retrieves the security manager associated with this script.
57+
* Add an extra script on top of the whole script.
5058
*
51-
* @return The ScriptSecurityManager for this script
52-
* @see ScriptSecurityManager
59+
* @param script Extra script
5360
*/
54-
ScriptSecurityManager getSecurityManager();
61+
void addExtraScript(String script);
5562

5663
/**
5764
* Evaluates and executes this script.

script-js-graalvm/src/main/java/com/instancify/scriptify/js/graalvm/script/JsScript.java

Lines changed: 21 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -15,11 +15,20 @@
1515
import org.graalvm.polyglot.HostAccess;
1616
import org.graalvm.polyglot.Value;
1717

18+
import java.util.ArrayList;
19+
import java.util.List;
20+
1821
public class JsScript implements Script<Value> {
1922

2023
private final ScriptSecurityManager securityManager = new StandardSecurityManager();
2124
private ScriptFunctionManager functionManager = new StandardFunctionManager();
2225
private ScriptConstantManager constantManager = new StandardConstantManager();
26+
private final List<String> extraScript = new ArrayList<>();
27+
28+
@Override
29+
public ScriptConstantManager getConstantManager() {
30+
return constantManager;
31+
}
2332

2433
@Override
2534
public ScriptSecurityManager getSecurityManager() {
@@ -37,13 +46,13 @@ public void setFunctionManager(ScriptFunctionManager functionManager) {
3746
}
3847

3948
@Override
40-
public ScriptConstantManager getConstantManager() {
41-
return constantManager;
49+
public void setConstantManager(ScriptConstantManager constantManager) {
50+
this.constantManager = constantManager;
4251
}
4352

4453
@Override
45-
public void setConstantManager(ScriptConstantManager constantManager) {
46-
this.constantManager = constantManager;
54+
public void addExtraScript(String script) {
55+
this.extraScript.add(script);
4756
}
4857

4958
@Override
@@ -84,8 +93,15 @@ public Value eval(String script) throws ScriptException {
8493
}
8594
}
8695

96+
// Building full script including extra script code
97+
StringBuilder fullScript = new StringBuilder();
98+
for (String extra : extraScript) {
99+
fullScript.append(extra).append("\n");
100+
}
101+
fullScript.append(script);
102+
87103
try {
88-
return context.eval("js", script);
104+
return context.eval("js", fullScript.toString());
89105
} catch (Exception e) {
90106
throw new ScriptException(e);
91107
} finally {

script-js-rhino/src/main/java/com/instancify/scriptify/js/rhino/script/JsScript.java

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,12 +13,16 @@
1313
import org.mozilla.javascript.Context;
1414
import org.mozilla.javascript.ScriptableObject;
1515

16+
import java.util.ArrayList;
17+
import java.util.List;
18+
1619
public class JsScript implements Script<Object> {
1720

1821
private final Context context = Context.enter();
1922
private final ScriptSecurityManager securityManager = new StandardSecurityManager();
2023
private ScriptFunctionManager functionManager = new StandardFunctionManager();
2124
private ScriptConstantManager constantManager = new StandardConstantManager();
25+
private final List<String> extraScript = new ArrayList<>();
2226

2327
public JsScript() {
2428
context.setWrapFactory(new JsWrapFactory());
@@ -49,6 +53,11 @@ public void setConstantManager(ScriptConstantManager constantManager) {
4953
this.constantManager = constantManager;
5054
}
5155

56+
@Override
57+
public void addExtraScript(String script) {
58+
this.extraScript.add(script);
59+
}
60+
5261
@Override
5362
public Object eval(String script) throws ScriptException {
5463
ScriptableObject scope = context.initStandardObjects();
@@ -71,8 +80,15 @@ public Object eval(String script) throws ScriptException {
7180
}
7281
}
7382

83+
// Building full script including extra script code
84+
StringBuilder fullScript = new StringBuilder();
85+
for (String extra : extraScript) {
86+
fullScript.append(extra).append("\n");
87+
}
88+
fullScript.append(script);
89+
7490
try {
75-
return context.evaluateString(scope, script, null, 1, null);
91+
return context.evaluateString(scope, fullScript.toString(), null, 1, null);
7692
} catch (Exception e) {
7793
throw new ScriptException(e);
7894
} finally {

0 commit comments

Comments
 (0)