diff --git a/include/JavaScriptContextBase.h b/include/JavaScriptContextBase.h index 412ae26..37f3d6b 100644 --- a/include/JavaScriptContextBase.h +++ b/include/JavaScriptContextBase.h @@ -68,5 +68,9 @@ class JavaScriptContextBase:public IJavaScriptContext, public JavaScriptKeyListe bool mEmbedWebBridge; bool mEnableWebSockerServer; ModuleSettings mModuleSettings; + + static std::string sModulesPath; + static void populateModulesPath(); + }; #endif diff --git a/src/JavaScriptContextBase.cpp b/src/JavaScriptContextBase.cpp index c649c94..fdb6b7e 100644 --- a/src/JavaScriptContextBase.cpp +++ b/src/JavaScriptContextBase.cpp @@ -25,9 +25,12 @@ #ifdef ENABLE_ESSOS #include #endif +#include +#include std::string JavaScriptContextBase::sThunderJSCode = ""; std::string JavaScriptContextBase::sWebBridgeCode = ""; +std::string JavaScriptContextBase::sModulesPath = "" ; JavaScriptContextFeatures::JavaScriptContextFeatures(bool embedThunderJS, bool embedWebBridge, bool enableWebSockerServer, ModuleSettings& moduleSettings):mEmbedThunderJS(embedThunderJS), mEmbedWebBridge(embedWebBridge), mEnableWebSockerServer(enableWebSockerServer), mModuleSettings(moduleSettings) { @@ -35,20 +38,22 @@ JavaScriptContextFeatures::JavaScriptContextFeatures(bool embedThunderJS, bool e JavaScriptContextBase::JavaScriptContextBase(JavaScriptContextFeatures& features, std::string url, IJavaScriptEngine* jsEngine): mApplicationUrl(url), mEngine(jsEngine), mEmbedThunderJS(features.mEmbedThunderJS), mEmbedWebBridge(features.mEmbedWebBridge), mEnableWebSockerServer(features.mEnableWebSockerServer), mModuleSettings(features.mModuleSettings) { + populateModulesPath(); if (mEmbedThunderJS) { if (sThunderJSCode.empty()) - { - sThunderJSCode = readFile("modules/thunderJS.js"); + { + sThunderJSCode = readFile("thunderJS.js"); } } if (mEmbedWebBridge) { if (sWebBridgeCode.empty()) - { - sWebBridgeCode = readFile("modules/webbridgesdk.js"); + { + sWebBridgeCode = readFile("webbridgesdk.js"); } } + #ifdef ENABLE_ESSOS EssosInstance::instance()->registerKeyListener(this); #endif @@ -75,9 +80,23 @@ void JavaScriptContextBase::registerCommonUtils() std::string JavaScriptContextBase::readFile(const char *file) { - std::ifstream src_file(file); + bool isModules = true; + std::ifstream src_file; std::stringstream src_script; - src_script << src_file.rdbuf(); + struct stat path; + if(stat(file, &path) == 0){ + isModules=false; + } + if(!isModules){ + src_file.open(file); + src_script << src_file.rdbuf(); + } + else{ + std::string fileName=sModulesPath; + fileName.append(file); + src_file.open(fileName); + src_script << src_file.rdbuf(); + } return src_script.str(); } @@ -86,24 +105,17 @@ bool JavaScriptContextBase::runFile(const char *file, const char* args, bool isA if (!file) { NativeJSLogger::log(WARN, "%s ... no script given.\n", __PRETTY_FUNCTION__); - fflush(stdout); + fflush(stdout); return false; } - std::string scriptToRun; scriptToRun = readFile(file); + NativeJSLogger::log(INFO, "Checking in [%s]\n", file); if(scriptToRun.empty()) { - std::string fileName("/home/root/"); - fileName.append(file); - scriptToRun = readFile(fileName.c_str()); - NativeJSLogger::log(INFO, "Checking in [%s]\n", fileName.c_str()); - if(scriptToRun.empty()) - { NativeJSLogger::log(ERROR, "%s ... load error / not found. %s\n", __PRETTY_FUNCTION__, file); - fflush(stdout); + fflush(stdout); return false; - } } return evaluateScript(scriptToRun.c_str(), isApplication?file:nullptr, args, isApplication); } @@ -127,3 +139,24 @@ void JavaScriptContextBase::onKeyRelease(struct JavaScriptKeyDetails& details) { processKeyEvent(details, false); } + +void JavaScriptContextBase::populateModulesPath(){ + if(getenv("JSRUNTIME_MODULES_PATH")){ + std::cout<<"JSRUNTIME_MODULES_PATH variable is set"< #endif #endif +#include +#include extern "C" JS_EXPORT void JSSynchronousGarbageCollectForDebugging(JSContextRef); #ifdef ENABLE_AAMP_JSBINDINGS_STATIC @@ -405,48 +407,48 @@ if (mModuleSettings.enablePlayer) injectFun(mContext, "require", requireCallback); if(mModuleSettings.enablePlayer) { - runFile("modules/video.js", nullptr); + runFile("video.js", nullptr); } if (mModuleSettings.enableXHR) { - runFile("modules/xhr.js", nullptr); + runFile("xhr.js", nullptr); } if (mModuleSettings.enableHttp) { - runFile("modules/http.js", nullptr); - runFile("modules/https.js", nullptr); + runFile("http.js", nullptr); + runFile("https.js", nullptr); } if (mModuleSettings.enableFetch) { - runFile("modules/node-fetch.js", nullptr/*, true*/); + runFile("node-fetch.js" , nullptr/*, true*/); } - runFile("modules/utils.js", nullptr); + runFile("utils.js", nullptr); if (mModuleSettings.enableWebSocketEnhanced) { - runFile("modules/event.js", nullptr); - runFile("modules/wsenhanced.js", nullptr); - } + runFile("event.js", nullptr); + runFile("wsenhanced.js", nullptr); +} else if(mModuleSettings.enableWebSocket) { - runFile("modules/ws.js", nullptr); + runFile("ws.js", nullptr); } #ifdef WS_SERVER_ENABLED if (mEnableWebSockerServer) { NativeJSLogger::log(INFO, "enabling websocket server\n"); - runFile("modules/wsserver.js", nullptr); + runFile("wsserver.js", nullptr); } #endif if (mModuleSettings.enableWindow) { - runFile("modules/window.js", nullptr/*, true*/); - runFile("modules/windowwrapper.js", nullptr/*, true*/); + runFile("window.js", nullptr/*, true*/); + runFile("windowwrapper.js", nullptr/*, true*/); } else if (mModuleSettings.enableJSDOM) { - runFile("modules/linkedjsdom.js", nullptr/*, true*/); - runFile("modules/linkedjsdomwrapper.js", nullptr/*, true*/); - runFile("modules/windowwrapper.js", nullptr/*, true*/); + runFile("linkedjsdom.js", nullptr/*, true*/); + runFile("linkedjsdomwrapper.js", nullptr/*, true*/); + runFile("windowwrapper.js", nullptr/*, true*/); if(getenv("FIREBOLT_ENDPOINT")!=NULL) { auto FireboltEndpoint = std::string(getenv("FIREBOLT_ENDPOINT"));