hyperscript.org
Version:
a small scripting language for the web
3 lines (2 loc) • 1.99 kB
JavaScript
function e(){return"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g,function(e){var t=16*Math.random()|0;return("x"==e?t:3&t|8).toString(16)})}function t(e){return new WebSocket(e.evaluate())}var n=n=>{var r=["then","catch","length","asyncWrapper","toJSON"];n.addFeature("socket",function(n,i,o){if(o.matchToken("socket")){var a=n.requireElement("dotOrColonPath",o).evaluate().split("."),u=a.pop(),s={},c=n.requireElement("stringLike",o),x=1e4;if(o.matchToken("with")&&(o.requireToken("timeout"),x=n.requireElement("timeExpression",o).evaluate()),o.matchToken("on")){if(o.requireToken("message"),o.matchToken("as")){o.requireToken("json");var f=!0}for(var l=n.requireElement("commandList",o),m={type:"implicitReturn",op:function(e){return i.HALT},execute:function(e){}},d=l;d.next;)d=d.next;d.next=m}var v=t(c),p=function n(i){return new Proxy({},{get:function(o,a){return r.indexOf(a)>=0?null:"noTimeout"===a?n(-1):"timeout"===a?function(e){return n(parseInt(e))}:function(){for(var n=e(),r=[],o=0;o<arguments.length;o++)r.push(arguments[o]);var u={iid:n,function:a,args:r};(v=v||t(c)).send(JSON.stringify(u));var x=new Promise(function(e,t){s[n]={resolve:e,reject:t}});return i>=0&&setTimeout(function(){s[n]&&s[n].reject("Timed out"),delete s[n]},i),x}}})}(x),h={raw:v,dispatchEvent:function(e){var t=e.detail;delete t.sentBy,delete t._namedArgList_,v.send(JSON.stringify(function(e,t){for(var n in t)t.hasOwnProperty(n)&&(e[n]=t[n]);return e}({type:e.type},t)))},rpc:p},g={name:u,socket:h,install:function(e){i.assignToNamespace(e,a,u,h)}};return v.onmessage=function(e){var t=e.data;try{var n=JSON.parse(t)}catch(e){}if(n&&n.iid&&(n.throw?s[n.iid].reject(n.throw):s[n.iid].resolve(n.return),delete s[n.iid]),l){var r=i.makeContext(h,g,h);if(f){if(!n)throw"Received non-JSON message from socket: "+t;r.message=n,r.result=n}else r.message=t,r.result=t;l.execute(r)}},v.addEventListener("close",function(e){v=null}),g}})};export{n as default};
//# sourceMappingURL=socket.modern.js.map