in src/main/java/org/apache/sling/scripting/esx/Module.java [421:484]
public ModuleScript loadAsDirectory(String module, String path, Resource currentResource, String loader) throws ScriptException {
ResourceResolver resolver = currentResource.getResourceResolver();
Resource packageJson = resolver.getResource(path + "/package.json");
if (packageJson != null) {
Node jsonFile = packageJson.adaptTo(Node.class);
try {
boolean isFile = (jsonFile.isNodeType(NodeType.NT_FILE) || jsonFile.isNodeType(NodeType.NT_RESOURCE));
if (isFile) {
InputStream is = packageJson.getChild("jcr:content").adaptTo(InputStream.class);
try {
String jsonData = IOUtils.toString(is);
Invocable invocable = (Invocable) factory.getNashornEngine();
JSObject jsonprop = null;
try {
jsonprop = (JSObject) invocable.invokeMethod(factory.getNashornEngine().eval("JSON"), "parse", jsonData);
} catch (NoSuchMethodException ex) {
throw new ScriptException(ex);
}
Object main = jsonprop.getMember("main");
if (main != null) {
String packageModule = (String) main;
String mainpath = normalizePath(packageModule,
path);
return loadAsFile(packageModule, mainpath, currentResource, loader);
}
} catch (IOException ex) {
throw new ScriptException(ex);
}
}
} catch (RepositoryException ex) {
throw new ScriptException(ex);
}
}
Resource indexjs = resolver.getResource(path + "/index.js");
if (indexjs != null) {
return createModuleScript(indexjs, ModuleScript.JS_FILE);
}
Resource indexjson = resolver.getResource(path + "/index.json");
if (indexjson != null) {
return createModuleScript(indexjson, ModuleScript.JSON_FILE);
}
Resource indexnode = resolver.getResource(path + "/index.node");
if (indexnode != null) {
throw new ScriptException("Node module .node (binary) loading is currently not supported");
}
return null;
}