public Object runScript()

in src/main/java/org/apache/sling/scripting/esx/Module.java [167:261]


    public Object runScript() throws ScriptException {
        log.debug("run script with id {}", get("id"));
        ScriptObjectMirror function = factory.getModuleCache().get((String) get(CONTEXT_FIELD_FILENAME));

        Resource moduleResource = (Resource) get(CONTEXT_FIELD_MODULE_RESOURCE);
        Resource resource = (Resource) get(CONTEXT_FIELD_RESOURCE);

        if (function == null) {
            if (moduleScript.isJsFile()) {
                function = Module.this.decorateScript(
                        //readScript(moduleResource)//  
                        readScript(moduleResource)
                );
            }

            if (moduleScript.isJsonFile()) {
                String jsonfile = readScript(moduleResource);
                function = decorateScript(
                        "module.exports = " + jsonfile
                , false);
            }

            if (moduleScript.isResourceFile()) {
                Iterator<Resource> resChildren = moduleResource.listChildren();
                ArrayList<Resource> children = new ArrayList<Resource>();
                resChildren.forEachRemaining(children::add);

                put("children", children);

                /*ValueMap map = moduleResource.adaptTo(ValueMap.class);

                 Invocable invocable = (Invocable) factory.getNashornEngine();
                 Object jsonprop = null;
                 try {
                 jsonprop = invocable.invokeMethod(factory.getNashornEngine().eval("JSON"), "stringify", map);
                 } catch (NoSuchMethodException ex) {
                 throw new ScriptException(ex);
                 }
                 */
                SimpleResource simpleResource = moduleResource.adaptTo(SimpleResource.class);
                put("simpleResource", simpleResource);
                /*   String source = "exports.properties =  " + jsonprop + ";"
                 + "exports.path = currentNode.resource.path;"
                 + "exports.simpleResource = this.simpleResource;"
                 + "exports.children = this.children;";*/
                String source = "module.exports = this.simpleResource;";

                function = decorateScript(source, false);
            }
            if (!moduleScript.isResourceFile()) {
                factory.getModuleCache().put(moduleScript.getResource().getPath(), function);
            }
        } else {
            log.debug("module " + get(CONTEXT_FIELD_ID) + " received from cache");
        }

        if (moduleScript.isTextFile()) {
            log.debug("is textfile loaidng file");
            String source = StringEscapeUtils.escapeEcmaScript(readScript(moduleResource));
            log.debug("sourcE: ");
            source = "module.exports = \"" + source + "\";";
            log.debug(source);
            function = Module.this.decorateScript(source);
            factory.getModuleCache().put(moduleScript.getResource().getPath(), function);
        }
        JSObject process = (JSObject) factory.getNashornEngine().eval("Object");
        process.setMember("domain", log);

        if (function != null) {
            SimpleBindings currentNode = new SimpleBindings();
            if (resource != null) {
                currentNode.put("resource", resource);
                currentNode.put("properties", resource.adaptTo(ValueMap.class));
            } else {
                log.debug("module id {} resource is null", get(CONTEXT_FIELD_ID));
            }

            // changed require to be generated within the wrapper
            // TODO: need to be refactored
            function.call(this, get(CONTEXT_FIELD_EXPORTS), this, this, get(CONTEXT_FIELD_FILENAME),
                    ((Resource) get(CONTEXT_FIELD_MODULE_RESOURCE)).getParent().getPath(), currentNode,
                    (ConsoleLog) get(CONTEXT_FIELD_CONSOLE),
                    null,
                    (SlingScriptHelper) get(CONTEXT_FIELD_SLING),
                    resource.adaptTo(SimpleResource.class)
            );

        } else {
            log.warn("function not called because it is null");
        }

        put(CONTEXT_FIELD_EXPORTS, get(CONTEXT_FIELD_EXPORTS));

        return get(CONTEXT_FIELD_EXPORTS);
    }