forked from phcode-dev/staging.phcode.dev
-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathNodeToBracketsInterface.js
More file actions
1 lines (1 loc) · 3.25 KB
/
NodeToBracketsInterface.js
File metadata and controls
1 lines (1 loc) · 3.25 KB
1
!function(){var EventEmitter,bracketsEventHandler=new(require("events"));function _generateUUID(){var result,numericSeed;for(result=numericSeed="";numericSeed++<36;result+=51*numericSeed&52?(15^numericSeed?8^Math.random()*(20^numericSeed?16:4):4).toString(16):"-");return result}function NodeToBracketsInterface(domainManager,domainName){this.domainManager=domainManager,this.domainName=domainName,this.nodeFn={},this._registerDataEvents(domainManager,domainName)}NodeToBracketsInterface.prototype.processRequest=function(params){var methodName=params.method,method;if(this.nodeFn[methodName])return this.nodeFn[methodName].call(null,params.params)},NodeToBracketsInterface.prototype.processAsyncRequest=function(params,resolver){var methodName=params.method,method;this.nodeFn[methodName]&&this.nodeFn[methodName].call(null,params.params).then(function(result){resolver(null,result)}).catch(function(err){resolver(err,null)})},NodeToBracketsInterface.prototype.processResponse=function(params){params.requestId?params.error?bracketsEventHandler.emit(params.requestId,params.error):bracketsEventHandler.emit(params.requestId,!1,params.params):bracketsEventHandler.emit(params.requestId,"error")},NodeToBracketsInterface.prototype.createInterface=function(methodName,respond){var self=this;return function(params){var callObject={method:methodName,params:params},retval=void 0;if(respond){var requestId=_generateUUID();callObject.respond=!0,callObject.requestId=requestId,self.domainManager.emitEvent(self.domainName,"data",callObject),retval=new Promise(function(resolve,reject){bracketsEventHandler.once(requestId,function(err,response){err?reject(err):resolve(response)})})}else self.domainManager.emitEvent(self.domainName,"data",callObject);return retval}},NodeToBracketsInterface.prototype.registerMethod=function(methodName,methodHandle){var self=this;methodName&&methodHandle&&"string"==typeof methodName&&"function"==typeof methodHandle&&(this.nodeFn[methodName]=methodHandle)},NodeToBracketsInterface.prototype.registerMethods=function(methodList){var self=this;methodList.forEach(function(methodObj){self.registerMethod(methodObj.methodName,methodObj.methodHandle)})},NodeToBracketsInterface.prototype._registerDataEvents=function(domainManager,domainName){domainManager.hasDomain(domainName)||domainManager.registerDomain(domainName,{major:0,minor:1}),domainManager.registerCommand(domainName,"data",this.processRequest.bind(this),!1,"Receives sync request from brackets",[{name:"params",type:"object",description:"json object containing message info"}],[]),domainManager.registerCommand(domainName,"response",this.processResponse.bind(this),!1,"Receives response from brackets for an earlier request",[{name:"params",type:"object",description:"json object containing message info"}],[]),domainManager.registerCommand(domainName,"asyncData",this.processAsyncRequest.bind(this),!0,"Receives async call request from brackets",[{name:"params",type:"object",description:"json object containing message info"},{name:"resolver",type:"function",description:"callback required to resolve the async request"}],[]),domainManager.registerEvent(domainName,"data",[{name:"params",type:"object",description:"json object containing message info to pass to brackets"}])},exports.NodeToBracketsInterface=NodeToBracketsInterface}();