private ScriptObjectMirror decorateScript()

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;
    }