SLING-9320 - Allow precompiled units to access objects from the same bundle through the Use API
* Only use the commonsjs module if the script eval didn't return a result
diff --git a/src/main/java/org/apache/sling/scripting/sightly/js/impl/JsEnvironment.java b/src/main/java/org/apache/sling/scripting/sightly/js/impl/JsEnvironment.java
index d87bbc7..1dbb3de 100644
--- a/src/main/java/org/apache/sling/scripting/sightly/js/impl/JsEnvironment.java
+++ b/src/main/java/org/apache/sling/scripting/sightly/js/impl/JsEnvironment.java
@@ -114,10 +114,12 @@
} else {
result = jsEngine.eval(reader, scriptContext);
}
- CommonJsModule commonJsModule =
+ if (result == null) {
+ CommonJsModule commonJsModule =
(CommonJsModule) scriptContext.getBindings(ScriptContext.ENGINE_SCOPE).get(Variables.MODULE);
- if (commonJsModule != null && commonJsModule.isModified()) {
- result = commonJsModule.getExports();
+ if (commonJsModule != null && commonJsModule.isModified()) {
+ result = commonJsModule.getExports();
+ }
}
if (result instanceof AsyncContainer) {
((AsyncContainer) result).addListener(callback);
diff --git a/src/main/java/org/apache/sling/scripting/sightly/js/impl/use/UseFunction.java b/src/main/java/org/apache/sling/scripting/sightly/js/impl/use/UseFunction.java
index 71fd2c7..85c80d8 100644
--- a/src/main/java/org/apache/sling/scripting/sightly/js/impl/use/UseFunction.java
+++ b/src/main/java/org/apache/sling/scripting/sightly/js/impl/use/UseFunction.java
@@ -27,6 +27,7 @@
import javax.script.Bindings;
import javax.script.ScriptEngine;
+import org.apache.sling.api.scripting.LazyBindings;
import org.apache.sling.scripting.core.ScriptNameAwareReader;
import org.apache.sling.scripting.sightly.SightlyException;
import org.apache.sling.scripting.sightly.js.impl.JsEnvironment;
@@ -89,20 +90,15 @@
if (dependencyReader == null) {
throw new SightlyException("Cannot locate script " + dependency);
}
- final String previousScript = (String) globalBindings.get(ScriptEngine.FILENAME);
- globalBindings.put(ScriptEngine.FILENAME, dependencyReader.getScriptName());
- jsEnvironment.runScript(dependencyReader, globalBindings, Utils.EMPTY_BINDINGS, arg -> {
+ Bindings bindings = new LazyBindings();
+ bindings.putAll(globalBindings);
+ bindings.put(ScriptEngine.FILENAME, dependencyReader.getScriptName());
+ jsEnvironment.runScript(dependencyReader, bindings, Utils.EMPTY_BINDINGS, arg -> {
counter[0]--;
dependencies[dependencyPos] = arg;
- try {
- if (counter[0] == 0) {
- Object result = JsUtils.callFn(callback, cx, scope, thisObj, dependencies);
- asyncContainer.complete(result);
- }
- } finally {
- if (previousScript != null) {
- globalBindings.put(ScriptEngine.FILENAME, previousScript);
- }
+ if (counter[0] == 0) {
+ Object result = JsUtils.callFn(callback, cx, scope, thisObj, dependencies);
+ asyncContainer.complete(result);
}
});
}