forked from phcode-dev/staging.phcode.dev
-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathClientLoader.js
More file actions
1 lines (1 loc) · 3.2 KB
/
ClientLoader.js
File metadata and controls
1 lines (1 loc) · 3.2 KB
1
define(function(require,exports,module){var ToolingInfo=JSON.parse(require("text!languageTools/ToolingInfo.json")),NodeDomain=require("utils/NodeDomain"),FileUtils=require("file/FileUtils"),EventDispatcher=require("utils/EventDispatcher"),BracketsToNodeInterface=require("languageTools/BracketsToNodeInterface").BracketsToNodeInterface;EventDispatcher.makeEventDispatcher(exports);var _bracketsPath=FileUtils.getNativeBracketsDirectoryPath();_bracketsPath=_bracketsPath.replace(/\/test$/,"/src");var _modulePath=FileUtils.getNativeModuleDirectoryPath(module),_nodePath,_domainPath=[_bracketsPath,_modulePath,"node/RegisterLanguageClientInfo"].join("/"),clientInfoDomain=null,clientInfoLoadedPromise=null,pendingClientsToBeLoaded=[];function syncPrefsWithDomain(languageToolsPrefs){clientInfoDomain&&clientInfoDomain.exec("syncPreferences",languageToolsPrefs)}function _createNodeDomain(domainName,domainPath){return new NodeDomain(domainName,domainPath)}function loadLanguageClientDomain(clientName,domainPath){var domainName=clientName,result=$.Deferred(),languageClientDomain=_createNodeDomain(domainName,domainPath);return languageClientDomain?languageClientDomain.promise().done(function(){console.log(domainPath+" domain successfully created"),result.resolve(languageClientDomain)}).fail(function(err){console.error(domainPath+" domain could not be created."),result.reject()}):(console.error(domainPath+" domain could not be created."),result.reject()),result}function createNodeInterfaceForDomain(languageClientDomain){var nodeInterface;return new BracketsToNodeInterface(languageClientDomain)}function _clientLoader(clientName,clientFilePath,clientPromise){loadLanguageClientDomain(clientName,clientFilePath).then(function(languageClientDomain){var languageClientInterface=createNodeInterfaceForDomain(languageClientDomain);clientPromise.resolve({name:clientName,interface:languageClientInterface})},clientPromise.reject)}function initiateLanguageClient(clientName,clientFilePath){var result=$.Deferred();if(clientInfoLoadedPromise&&"pending"!==clientInfoLoadedPromise.state())_clientLoader(clientName,clientFilePath,result);else{var pendingClient={load:_clientLoader.bind(null,clientName,clientFilePath,result)};pendingClientsToBeLoaded.push(pendingClient)}return result}function sendLanguageClientInfo(){function logInitializationError(){console.error("Failed to Initialize LanguageClient Module Information.")}(clientInfoLoadedPromise=clientInfoDomain.exec("initialize",_bracketsPath,ToolingInfo)).then(function(success){success?(Array.isArray(pendingClientsToBeLoaded)?pendingClientsToBeLoaded.forEach(function(pendingClient){pendingClient.load()}):exports.trigger("languageClientModuleInitialized"),pendingClientsToBeLoaded=null):logInitializationError()},function(){logInitializationError()})}function initDomainAndHandleNodeCrash(){(clientInfoDomain=new NodeDomain("LanguageClientInfo",_domainPath)).promise().done(function(){sendLanguageClientInfo(),clientInfoDomain.connection.on("close",function(event,reconnectedPromise){reconnectedPromise.done(sendLanguageClientInfo)})}).fail(function(err){console.error("ClientInfo domain could not be loaded: ",err)})}exports.initiateLanguageClient=initiateLanguageClient,exports.syncPrefsWithDomain=syncPrefsWithDomain});