in src/main/java/org/apache/sling/scripting/esx/Module.java [120:161]
private ScriptObjectMirror decorateScript(String source, boolean es6)
throws ScriptException {
String filename = (String) get("filename");
if (filename.indexOf("node_modules") == -1 && es6) {
try {
source = factory.getSandboxService().compileSource(source);
} catch (ScriptException e) {
log.error("Could not transpile script", e);
throw new ScriptException("could not load " + get("filename"));
}
}
// TODO: refactor polyfill for window, global and make require outside the wrapper as function parameter
source = "//@sourceURL=" + (String) get("filename") + "\n"
+ "(function (exports, Require, module, __filename,"
+ " __dirname, currentNode, console, properties, sling, simpleResource) { "
+ "var window = (this.window == 'undefined' || this.window == null) ? this : this.window;"
+ "var global = (global == 'undefined') ? this : global;"
+ "function require(id) { return Require.require(id); } require.resolve = function (id) { return Require.resolve(id, currentNode.resource, 1); };"
+ source
+ "})";
// use load + filenane for older JDK versions, @sourceURL is working for latest JDK version
source = "load( { name : \"" + get("filename") + "\","
+ " script: \""
+ StringEscapeUtils.escapeEcmaScript(source)
+ "\" } )";
ScriptObjectMirror function = null;
try {
function = (ScriptObjectMirror) factory.getNashornEngine().eval(
source
);
if (function == null) {
log.error("Function is null !");
}
} catch (ScriptException ex) {
// todo: better handling in future
throw ex;
}
return function;
}