data-transport
Version:
A simple and responsive transport
3 lines (2 loc) • 28.5 kB
JavaScript
!function(e,n){"object"==typeof exports&&"undefined"!=typeof module?n(exports):"function"==typeof define&&define.amd?define(["exports"],n):n((e="undefined"!=typeof globalThis?globalThis:e||self).DataTransport={})}(this,(function(e){"use strict";var n=Symbol("listener"),t=Symbol("listen"),r=Symbol("sender"),o=Symbol("requestsMap"),i=Symbol("listensMap"),s=Symbol("serializer"),a=Symbol("log"),c=Symbol("verbose"),l=Symbol("originalListensMap"),u=Symbol("callback"),d=Symbol("timeout"),f=Symbol("prefix"),h=Symbol("produce"),v=Symbol("beforeEmit"),p=Symbol("beforeEmitResolve"),m="__DATA_TRANSPORT_UUID__",y="request",b="response",_=function(e,n){return _=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,n){e.__proto__=n}||function(e,n){for(var t in n)Object.prototype.hasOwnProperty.call(n,t)&&(e[t]=n[t])},_(e,n)};function w(e,n){if("function"!=typeof n&&null!==n)throw new TypeError("Class extends value "+String(n)+" is not a constructor or null");function t(){this.constructor=e}_(e,n),e.prototype=null===n?Object.create(n):(t.prototype=n.prototype,new t)}var g=function(){return g=Object.assign||function(e){for(var n,t=1,r=arguments.length;t<r;t++)for(var o in n=arguments[t])Object.prototype.hasOwnProperty.call(n,o)&&(e[o]=n[o]);return e},g.apply(this,arguments)};function C(e,n){var t={};for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&n.indexOf(r)<0&&(t[r]=e[r]);if(null!=e&&"function"==typeof Object.getOwnPropertySymbols){var o=0;for(r=Object.getOwnPropertySymbols(e);o<r.length;o++)n.indexOf(r[o])<0&&Object.prototype.propertyIsEnumerable.call(e,r[o])&&(t[r[o]]=e[r[o]])}return t}function k(e,n,t,r){return new(t||(t=Promise))((function(o,i){function s(e){try{c(r.next(e))}catch(e){i(e)}}function a(e){try{c(r.throw(e))}catch(e){i(e)}}function c(e){var n;e.done?o(e.value):(n=e.value,n instanceof t?n:new t((function(e){e(n)}))).then(s,a)}c((r=r.apply(e,n||[])).next())}))}function E(e,n){var t,r,o,i={label:0,sent:function(){if(1&o[0])throw o[1];return o[1]},trys:[],ops:[]},s=Object.create(("function"==typeof Iterator?Iterator:Object).prototype);return s.next=a(0),s.throw=a(1),s.return=a(2),"function"==typeof Symbol&&(s[Symbol.iterator]=function(){return this}),s;function a(a){return function(c){return function(a){if(t)throw new TypeError("Generator is already executing.");for(;s&&(s=0,a[0]&&(i=0)),i;)try{if(t=1,r&&(o=2&a[0]?r.return:a[0]?r.throw||((o=r.return)&&o.call(r),0):r.next)&&!(o=o.call(r,a[1])).done)return o;switch(r=0,o&&(a=[2&a[0],o.value]),a[0]){case 0:case 1:o=a;break;case 4:return i.label++,{value:a[1],done:!1};case 5:i.label++,r=a[1],a=[0];continue;case 7:a=i.ops.pop(),i.trys.pop();continue;default:if(!(o=i.trys,(o=o.length>0&&o[o.length-1])||6!==a[0]&&2!==a[0])){i=0;continue}if(3===a[0]&&(!o||a[1]>o[0]&&a[1]<o[3])){i.label=a[1];break}if(6===a[0]&&i.label<o[1]){i.label=o[1],o=a;break}if(o&&i.label<o[2]){i.label=o[2],i.ops.push(a);break}o[2]&&i.ops.pop(),i.trys.pop();continue}a=n.call(e,i)}catch(e){a=[6,e],r=0}finally{t=o=0}if(5&a[0])throw a[1];return{value:a[0]?a[1]:void 0,done:!0}}([a,c])}}}function S(e){var n="function"==typeof Symbol&&Symbol.iterator,t=n&&e[n],r=0;if(t)return t.call(e);if(e&&"number"==typeof e.length)return{next:function(){return e&&r>=e.length&&(e=void 0),{value:e&&e[r++],done:!e}}};throw new TypeError(n?"Object is not iterable.":"Symbol.iterator is not defined.")}function T(e,n){var t="function"==typeof Symbol&&e[Symbol.iterator];if(!t)return e;var r,o,i=t.call(e),s=[];try{for(;(void 0===n||n-- >0)&&!(r=i.next()).done;)s.push(r.value)}catch(e){o={error:e}}finally{try{r&&!r.done&&(t=i.return)&&t.call(i)}finally{if(o)throw o.error}}return s}"function"==typeof SuppressedError&&SuppressedError;let M;const O=new Uint8Array(16);function I(){if(!M&&(M="undefined"!=typeof crypto&&crypto.getRandomValues&&crypto.getRandomValues.bind(crypto),!M))throw new Error("crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported");return M(O)}const x=[];for(let e=0;e<256;++e)x.push((e+256).toString(16).slice(1));var L={randomUUID:"undefined"!=typeof crypto&&crypto.randomUUID&&crypto.randomUUID.bind(crypto)};function R(e,n,t){if(L.randomUUID&&!e)return L.randomUUID();const r=(e=e||{}).random||(e.rng||I)();return r[6]=15&r[6]|64,r[8]=63&r[8]|128,function(e,n=0){return(x[e[n+0]]+x[e[n+1]]+x[e[n+2]]+x[e[n+3]]+"-"+x[e[n+4]]+x[e[n+5]]+"-"+x[e[n+6]]+x[e[n+7]]+"-"+x[e[n+8]]+x[e[n+9]]+"-"+x[e[n+10]]+x[e[n+11]]+x[e[n+12]]+x[e[n+13]]+x[e[n+14]]+x[e[n+15]]).toLowerCase()}(r)}var P,D=function(){return/^((?!chrome|android).)*safari/i.test(navigator.userAgent)},W=function(){return R({rng:function(){for(var e,n=new Array(16),t=0;t<16;t++)3&t||(e=4294967296*Math.random()),n[t]=e>>>((3&t)<<3)&255;return n}})},A=function(e,n){return"".concat(e,"-").concat(n.toString())},q=function(){function e(e){var u=e.listener,v=e.sender,p=e.timeout,_=void 0===p?6e4:p,w=e.verbose,C=void 0!==w&&w,k=e.prefix,E=void 0===k?"DataTransport":k,S=e.listenKeys,T=void 0===S?[]:S;e.checkListen;var M,O,I=e.serializer,x=e.logger,L=this;this[P]=new Map,this.id=W(),this[i]=null!==(M=this[i])&&void 0!==M?M:new Map,this[l]=null!==(O=this[l])&&void 0!==O?O:new Map,this[n]=u.bind(this),this[r]=v.bind(this),this[d]=_,this[f]=E,this[s]=I,this[c]=C,this[a]=x,new Set(T).forEach((function(e){var n,t=L[e];L[l].set(e,t),Object.assign(L,((n={})[e]=function(){},n))})),this[l].forEach((function(e,n){L[h](n,e)})),this[t]=function(e){var n,t;if(L[c]&&("function"==typeof L[a]&&e?L[a](e):console.info("DataTransport Receive: ",e)),null==e?void 0:e[m]){var r=function(e,n){return n.replace(new RegExp("^".concat(e,"-")),"")}(L[f],e.action);if(L[r],e.type===b){var l=L[o].get(e[m]);if(l){var u=e.response;l("string"==typeof u&&(null===(n=L[s])||void 0===n?void 0:n.parse)?L[s].parse(u):u)}}else if(e.type===y){var d=L[i].get(e.action);if("function"==typeof d){var h=e.request;d("string"==typeof h&&(null===(t=L[s])||void 0===t?void 0:t.parse)?L[s].parse(h):h,g(g({},e),{transportId:e[m],hasRespond:e.hasRespond}))}}}};var R=this[n](this[t]);this.dispose=function(){if("function"==typeof R)return L[o].clear(),L[i].clear(),L[l].clear(),R()}}return e.prototype[(P=o,h)]=function(e,n){var t=this,o=A(this[f],e);this[i].set(o,(function(i,a){return k(t,void 0,void 0,(function(){var t,c,l,u,d=a.hasRespond,f=a.transportId;a.request;var h=C(a,["hasRespond","transportId","request"]);return E(this,(function(a){switch(a.label){case 0:return"function"!=typeof n?[3,2]:[4,n.apply(this,i)];case 1:return t=a.sent(),d?(c=g(g({},h),((l={action:o,response:void 0!==t&&(null===(u=this[s])||void 0===u?void 0:u.stringify)?this[s].stringify(t):t,hasRespond:d})[m]=f,l.type=b,l.responseId=this.id,l)),this[r](c),[3,3]):[2];case 2:throw new Error("The listener for event ".concat(e," should be a function."));case 3:return[2]}}))}))}))},e.prototype.listen=function(e,n){var t=this;if("string"!=typeof e)throw new Error('The event name "'.concat(e.toString(),'" is not a string, it should be a string.'));if(this[l].get(e))throw new Error('Failed to listen to the event "'.concat(e,'", the event "').concat(e,'" is already listened to.'));if("function"!=typeof n)throw new Error("The listener for event ".concat(e," should be a function."));return this[l].set(e,n),this[h](e,n),function(){t[l].delete(e);var n=A(t[f],e);t[i].delete(n)}},e.prototype.emit=function(e){for(var n=[],t=1;t<arguments.length;t++)n[t-1]=arguments[t];return k(this,void 0,void 0,(function(){var t,i,l,u,h,p,b,_,w,C,S,T,M,O,I,x,L=this;return E(this,(function(R){switch(R.label){case 0:return i=null===(T=(t="object"==typeof e?e:{}).respond)||void 0===T||T,l=null!==(M=t.silent)&&void 0!==M&&M,u=null!==(O=t.timeout)&&void 0!==O?O:this[d],h=null!==(I=t.name)&&void 0!==I?I:e,p=W(),b=A(this[f],h),_=g(g({},t._extra?{_extra:t._extra}:{}),((S={type:y,action:b,request:void 0!==n&&(null===(x=this[s])||void 0===x?void 0:x.stringify)?this[s].stringify(n):n,hasRespond:i})[m]=p,S.requestId=this.id,S)),this[c]&&("function"==typeof this[a]?this[a](_):console.info("DataTransport Send: ",_)),i?[3,3]:!this[v]||t.skipBeforeEmit?[3,2]:[4,this[v]];case 1:R.sent(),R.label=2;case 2:return this[r](_),[2,Promise.resolve(void 0)];case 3:return C=Promise.race([new Promise((function(e){return k(L,void 0,void 0,(function(){return E(this,(function(n){switch(n.label){case 0:return!this[v]||t.skipBeforeEmit?[3,2]:[4,this[v]];case 1:n.sent(),n.label=2;case 2:return this[o].set(p,e),this[r](_),[2]}}))}))})),new Promise((function(e,n){w=setTimeout((function(){n()}),u)}))]),[2,C.then((function(e){return clearTimeout(w),L[o].delete(p),e})).catch((function(e){if(clearTimeout(w),L[o].delete(p),void 0===e){if(l)return;console.warn("The event '".concat(b,"' timed out for ").concat(u," seconds..."),_)}}))]}}))}))},e}(),B="iframe-connect",j=function(e){function n(n){var t=this,r=n.iframe,o=void 0===r?document.querySelector("iframe"):r,i=n.targetOrigin,s=void 0===i?"*":i,a=n.listener,c=void 0===a?function(e){var n=function(n){var t=n.data,r=n.source,i=o.contentWindow;if(i&&i===r)return e(t)};return window.addEventListener("message",n),function(){window.removeEventListener("message",n)}}:a,l=n.sender,u=void 0===l?function(e){o?o.contentWindow.postMessage(e,s):window.frames[0]?window.frames[0].postMessage(e,s):console.error("The current page does not have any iframe elements")}:l,d=n.skipConnectionCheck,f=C(n,["iframe","targetOrigin","listener","sender","skipConnectionCheck"]);if(t=e.call(this,g(g({},f),{listener:c,sender:u}))||this,!d){var h=function(){t.emit({name:B,silent:!0,skipBeforeEmit:!0}).then((function(e){e&&t[p]()}))};h(),t[v]=new Promise((function(e){t[p]=e})),t.listen(B,(function(){return k(t,void 0,void 0,(function(){return E(this,(function(e){return this[p](),[2,!0]}))}))})),null==o||o.addEventListener("load",(function(){t[v]=new Promise((function(e){t[p]=e})),h()}))}return t}return w(n,e),n}(q),U=function(e){function n(n){void 0===n&&(n={});var t=this,r=n.targetOrigin,o=void 0===r?"*":r,i=n.listener,s=void 0===i?function(e){var n=function(n){var t=n.data;return e(t)};return window.addEventListener("message",n),function(){window.removeEventListener("message",n)}}:i,a=n.sender,c=void 0===a?function(e){return window.parent.postMessage(e,o)}:a,l=n.skipConnectionCheck,u=C(n,["targetOrigin","listener","sender","skipConnectionCheck"]);return t=e.call(this,g(g({},u),{listener:s,sender:c}))||this,l||(t.emit({name:B,silent:!0}).then((function(e){e&&t[p]()})),t[v]=new Promise((function(e){t[p]=e})),t.listen(B,(function(){return k(t,void 0,void 0,(function(){return E(this,(function(e){return this[p](),[2,!0]}))}))}))),t}return w(n,e),n}(q),N={Main:j,IFrame:U},F="worker-connect",J=function(e){function n(n){var t=this,r=n.worker,o=n.listener,i=void 0===o?function(e){var n=function(n){var t=n.data;e(t)};return r.addEventListener("message",n),function(){r.removeEventListener("message",n)}}:o,s=n.sender,a=void 0===s?function(e){var n,t=null!==(n=e.transfer)&&void 0!==n?n:[];delete e.transfer,r.postMessage(e,t)}:s,c=C(n,["worker","listener","sender"]);return(t=e.call(this,g(g({},c),{listener:i,sender:a}))||this)._connected=!1,t._handleConnectCallbacks=function(){return k(t,void 0,void 0,(function(){return E(this,(function(e){return this._connected||(this._connected=!0,this._onConnectCallback.forEach((function(e){e()})),this._onConnectCallback.clear()),[2]}))}))},t._onConnectCallback=new Set,t.emit({name:F,respond:!0,silent:!0}).then(t._handleConnectCallbacks),t.listen(F,t._handleConnectCallbacks),t}return w(n,e),n.prototype.onConnect=function(e){var n=this;return this._connected?e():(this._onConnectCallback.add(e),function(){n._onConnectCallback.delete(e)})},n}(q),$=function(e){function n(n){void 0===n&&(n={});var t=this,r=n.listener,o=void 0===r?function(e){var n=function(n){var t=n.data;e(t)};return self.addEventListener("message",n),function(){self.removeEventListener("message",n)}}:r,i=n.sender,s=void 0===i?function(e){var n,t=null!==(n=e.transfer)&&void 0!==n?n:[];delete e.transfer,postMessage(e,t)}:i,a=C(n,["listener","sender"]);return(t=e.call(this,g(g({},a),{listener:o,sender:s}))||this)._handleConnectCallbacks=function(){return k(t,void 0,void 0,(function(){return E(this,(function(e){return this._connected||(this._connected=!0,this._onConnectCallback.forEach((function(e){e()})),this._onConnectCallback.clear()),[2]}))}))},t._connected=!1,t._onConnectCallback=new Set,t.emit({name:F,respond:!0,silent:!0}).then(t._handleConnectCallbacks),t.listen(F,t._handleConnectCallbacks),t}return w(n,e),n.prototype.onConnect=function(e){var n=this;return this._connected?e():(this._onConnectCallback.add(e),function(){n._onConnectCallback.delete(e)})},n}(q),K={Main:J,Worker:$},V="sharedworker-connect",z="sharedworker-disconnect",G=function(e){function n(n){var t=this,r=n.worker,o=n.listener,i=void 0===o?function(e){var n=function(n){var t=n.data;e(t)};return r.port.addEventListener("message",n),r.port.start(),function(){r.port.removeEventListener("message",n)}}:o,s=n.sender,a=void 0===s?function(e){var n,t=null!==(n=e.transfer)&&void 0!==n?n:[];delete e.transfer,r.port.postMessage(e,t)}:s,c=C(n,["worker","listener","sender"]);return(t=e.call(this,g(g({},c),{listener:i,sender:a}))||this)._connected=!1,t._onConnectCallback=new Set,window.addEventListener("pagehide",(function(){t.emit({name:z,respond:!1},t.id)})),t.listen(V,(function(){return k(t,void 0,void 0,(function(){var e=this;return E(this,(function(n){return Promise.resolve().then((function(){e._handleConnect()})),[2,this.id]}))}))})),t.emit({name:V,respond:!1,silent:!0}),t}return w(n,e),n.prototype._handleConnect=function(){this._connected||(this._connected=!0,this._onConnectCallback.forEach((function(e){e()})))},n.prototype.onConnect=function(e){var n=this;return this._onConnectCallback.add(e),function(){n._onConnectCallback.delete(e)}},n}(q),X=function(e){function n(n){void 0===n&&(n={});var t=this,r=n.listener,o=void 0===r?function(e){var n=this;return this[u]=e,function(){n.ports.forEach((function(e){e._handler&&e.removeEventListener("message",e._handler),delete e._handler})),self.close()}}:r,i=n.sender,s=void 0===i?function(e){var n,r,o=null!==(n=e.transfer)&&void 0!==n?n:[];delete e.transfer;var i=null===(r=e._extra)||void 0===r?void 0:r._port;if(i)delete e._extra._port,i.postMessage(e,o);else if("response"===e.type&&t.ports.has(e.requestId)){t.ports.get(e.requestId).postMessage(e,o)}else t.ports.forEach((function(n){try{n.postMessage(e,o)}catch(e){console.error(e)}})),t.tempPorts.forEach((function(n){try{n.postMessage(e,o)}catch(e){console.error(e)}}))}:i,a=C(n,["listener","sender"]);(t=e.call(this,g(g({},a),{listener:o,sender:s}))||this).ports=new Map,t.tempPorts=new Set,t._onConnectCallback=new Set,t._onDisconnectCallback=new Set;var c=A(t[f],z),l=A(t[f],V);return self.addEventListener("connect",(function(e){return k(t,void 0,void 0,(function(){var n,t,r,o=this;return E(this,(function(i){switch(i.label){case 0:(n=e.ports[0])._handler=function(e){var t,r=e.data;r.hasRespond&&(r._extra=null!==(t=r._extra)&&void 0!==t?t:{},r._extra._port=n),r.action===c&&o.ports.has(r.requestId)&&(o.ports.delete(r.requestId),o._onDisconnectCallback.forEach((function(e){e(r.requestId)}))),"request"===r.type&&r.action===l&&(o.emit({name:V,_extra:{_port:n},silent:!0,respond:!1}),o._handleConnect(r.requestId,n)),o[u](r)},n.addEventListener("message",n._handler),n.start(),this.tempPorts.add(n),i.label=1;case 1:return i.trys.push([1,3,,4]),[4,this.emit({name:V,_extra:{_port:n},silent:!0})];case 2:return t=i.sent(),this._handleConnect(t,n),[3,4];case 3:return r=i.sent(),this.tempPorts.delete(n),console.error(r),[3,4];case 4:return[2]}}))}))})),t}return w(n,e),n.prototype.onConnect=function(e){var n=this;return this._onConnectCallback.add(e),function(){n._onConnectCallback.delete(e)}},n.prototype._handleConnect=function(e,n){e&&!this.ports.has(e)&&(this.ports.set(e,n),this.tempPorts.delete(n),this._onConnectCallback.forEach((function(n){n(e)})))},n.prototype.onDisconnect=function(e){var n=this;return this._onDisconnectCallback.add(e),function(){n._onDisconnectCallback.delete(e)}},n}(q),H={Client:G,Worker:X},Q=!0,Y=function(e){function n(n){var t=n.worker,r=n.useOnSafari,o=void 0===r?Q:r,i=n.listener,s=void 0===i?function(e){var n=function(n){var t=n.data;e(function(e,n){try{return"string"==typeof e&&n&&D()?JSON.parse(e):e}catch(n){console.error("Failed to parse:",e)}return e}(t,o))};return navigator.serviceWorker.addEventListener("message",n),function(){navigator.serviceWorker.removeEventListener("message",n)}}:i,a=n.sender,c=void 0===a?function(e){var n,r=null!==(n=e.transfer)&&void 0!==n?n:[];delete e.transfer,t.postMessage(e,r)}:a,l=C(n,["worker","useOnSafari","listener","sender"]);return e.call(this,g(g({},l),{listener:s,sender:c}))||this}return w(n,e),n}(q),Z=function(e){function n(n){void 0===n&&(n={});var t=this,r=n.useOnSafari,o=void 0===r?Q:r,i=n.listener,s=void 0===i?function(e){var n=function(n){var t=n.data,r=n.source;t._clientId=r.id,e(t)};return self.addEventListener("message",n),function(){return self.removeEventListener("message",n)}}:i,a=n.sender,c=void 0===a?function(e){return k(t,void 0,void 0,(function(){var n,t,r,i,s;return E(this,(function(a){switch(a.label){case 0:return n=e.transfer||[],delete e.transfer,t=function(e,n){try{return n&&D()?JSON.stringify(e):e}catch(n){throw console.error("Failed to stringify:",e),n}}(e,o),e._clientId?[4,self.clients.get(e._clientId)]:[3,2];case 1:return(r=a.sent())?(delete e._clientId,r.postMessage(t,n),[2]):(console.warn('The client "'.concat(e._clientId,'" is closed.')),[2]);case 2:return(i=null===(s=e._extra)||void 0===s?void 0:s._client)?(delete e._extra._client,i.postMessage(t,n),[2]):(self.clients.matchAll().then((function(e){return e.map((function(e){return e.postMessage(t,n)}))})),[2])}}))}))}:a,l=C(n,["useOnSafari","listener","sender"]);return t=e.call(this,g(g({},l),{listener:s,sender:c}))||this,self.addEventListener("activate",(function(e){e.waitUntil(self.clients.claim())})),t}return w(n,e),n}(q),ee={Client:Y,Service:Z},ne=function(e){function n(n){void 0===n&&(n={});var t=n.channel,r=void 0===t?"$$BroadcastChannel_Transport$$":t,o=n.broadcastChannel,i=void 0===o?new BroadcastChannel(r):o,s=n.listener,a=void 0===s?function(e){var n=function(n){var t=n.data;e(t)};return i.addEventListener("message",n),function(){i.removeEventListener("message",n)}}:s,c=n.sender,l=void 0===c?function(e){return i.postMessage(e)}:c,u=C(n,["channel","broadcastChannel","listener","sender"]);return e.call(this,g(g({},u),{listener:a,sender:l}))||this}return w(n,e),n}(q),te="$$Electron_Transport$$",re=function(e){function n(n){var t=n.ipcMain,r=n.browserWindow,o=n.channel,i=void 0===o?te:o,s=n.listener,a=void 0===s?function(e){var n=function(n,t){e(t)};return t.on(i,n),function(){t.off(i,n)}}:s,c=n.sender,l=void 0===c?function(e){return r.webContents.send(i,e)}:c,u=C(n,["ipcMain","browserWindow","channel","listener","sender"]);return e.call(this,g(g({},u),{listener:a,sender:l}))||this}return w(n,e),n}(q),oe=function(e){function n(n){var t=n.ipcRenderer,r=n.channel,o=void 0===r?te:r,i=n.listener,s=void 0===i?function(e){var n=function(n,t){e(t)};return t.on(o,n),function(){t.off(o,n)}}:i,a=n.sender,c=void 0===a?function(e){return t.send(o,e)}:a,l=C(n,["ipcRenderer","channel","listener","sender"]);return e.call(this,g(g({},l),{listener:s,sender:c}))||this}return w(n,e),n}(q),ie={Main:re,Renderer:oe},se="undefined"!=typeof window?window:void 0!==se?se:"undefined"!=typeof self?self:{},ae="__DATA_TRANSPORT_BROWSER_EXTENSIONS__",ce=function(e){function n(n){var t;void 0===n&&(n={});var r=n.browser,o=void 0===r?null!==(t=se.browser)&&void 0!==t?t:se.chrome:r,i=n.listener,s=void 0===i?function(e){this[u]=e;var n=function(n,t,r){return n._sendResponse=r,e(n),!0};return o.runtime.onMessage.addListener(n),function(){o.runtime.onMessage.removeListener(n)}}:i,a=n.sender,c=void 0===a?function(e){if(e._sendResponse){var n=e._sendResponse;delete e._sendResponse,n(e)}else o.runtime.sendMessage(e,{},this[u])}:a,l=C(n,["browser","listener","sender"]);return e.call(this,g(g({},l),{listener:s,sender:c}))||this}return w(n,e),n}(q),le="sharedworker-connect",ue=function(e){function n(n){void 0===n&&(n={});var t,r=this,o=n.browser,i=void 0===o?null!==(t=se.browser)&&void 0!==t?t:se.chrome:o,s=n.listener,a=void 0===s?function(e){var n=this;return this[u]=e,function(){n.ports.forEach((function(e){e.disconnect()}))}}:s,c=n.sender,l=void 0===c?function(e){var n,t=null===(n=e._extra)||void 0===n?void 0:n._port;if(t)delete e._port,t.postMessage(e);else if("response"===e.type&&this.ports.has(e.requestId)){this.ports.get(e.requestId).postMessage(e)}else this.ports.forEach((function(n){try{n.postMessage(e)}catch(e){console.error(e)}}))}:c,d=C(n,["browser","listener","sender"]);return(r=e.call(this,g(g({},d),{listener:a,sender:l}))||this).ports=new Map,r._onConnectCallback=new Set,r._onDisconnectCallback=new Set,i.runtime.onConnect.addListener((function(e){return k(r,void 0,void 0,(function(){var n,t,r=this;return E(this,(function(o){switch(o.label){case 0:return e.name!==ae?[3,2]:(n=function(n){var t;n._extra=null!==(t=n._extra)&&void 0!==t?t:{},n._extra._port=e,r[u](n)},e.onMessage.addListener(n),e.onDisconnect.addListener((function(){e.onMessage.removeListener(n),r.ports.forEach((function(n,t){n===e&&r.ports.delete(t)})),r._onDisconnectCallback.forEach((function(e){e(t)}))})),[4,this.emit({name:le,_extra:{_port:e}})]);case 1:t=o.sent(),this.ports.set(t,e),this._onConnectCallback.forEach((function(e){e(t)})),o.label=2;case 2:return[2]}}))}))})),r}return w(n,e),n.prototype.onConnect=function(e){var n=this;return this._onConnectCallback.add(e),function(){n._onConnectCallback.delete(e)}},n.prototype.onDisconnect=function(e){var n=this;return this._onDisconnectCallback.add(e),function(){n._onDisconnectCallback.delete(e)}},n}(q),de=function(e){function n(n){void 0===n&&(n={});var t,r=this,o=n.browser,i=void 0===o?null!==(t=se.browser)&&void 0!==t?t:se.chrome:o,s=n.port,a=void 0===s?i.runtime.connect({name:ae}):s,c=n.listener,l=void 0===c?function(e){var n=function(n){e(n)};return a.onMessage.addListener(n),function(){a.onMessage.removeListener(n)}}:c,u=n.sender,d=void 0===u?function(e){a.postMessage(e)}:u,f=C(n,["browser","port","listener","sender"]);return(r=e.call(this,g(g({},f),{listener:l,sender:d}))||this)._onConnectCallback=new Set,r.listen(le,(function(){return k(r,void 0,void 0,(function(){var e=this;return E(this,(function(n){return Promise.resolve().then((function(){e._onConnectCallback.forEach((function(e){e()}))})),[2,this.id]}))}))})),r}return w(n,e),n.prototype.onConnect=function(e){var n=this;return this._onConnectCallback.add(e),function(){n._onConnectCallback.delete(e)}},n}(q),fe={Main:ue,Client:de},he=61440,ve=function(e){function n(n){var t=this,r=n.peer,o=n.listener,i=void 0===o?function(e){var n=function(n){var r,o,i,s=JSON.parse(n),a=Object.prototype.hasOwnProperty.call(s,"request")?"request":"response",c=null!==(i=t.receiveBuffer.get(s.__DATA_TRANSPORT_UUID__))&&void 0!==i?i:{data:[],timestamp:Date.now()};t.receiveBuffer.set(s.__DATA_TRANSPORT_UUID__,c),c.data[s.chunkId]=s[a],c.data.length=s.length,c.timestamp=Date.now();var l=c.data.filter((function(e){return e})).length===s.length;if(l){var u=JSON.parse(c.data.join(""));s[a]="request"===a?u:u[0],delete s.length,e(s),t.receiveBuffer.delete(s.__DATA_TRANSPORT_UUID__);try{for(var d=S(t.receiveBuffer),f=d.next();!f.done;f=d.next()){var h=T(f.value,2),v=h[0],p=h[1];Date.now()-p.timestamp>6e4&&t.receiveBuffer.delete(v)}}catch(e){r={error:e}}finally{try{f&&!f.done&&(o=d.return)&&o.call(d)}finally{if(r)throw r.error}}}};return r.on("data",n),function(){r.off("data",n)}}:o,s=n.sender,a=void 0===s?function(e){var n,t=Object.prototype.hasOwnProperty.call(e,"request")?"request":"response";e[t]=JSON.stringify("request"===t?e.request:void 0!==e.response?[e.response]:[]);for(var o=0,i=Math.ceil(e[t].length/he);e[t].length>0;){var s=g(g({},e),((n={})[t]=e[t].slice(0,he),n.chunkId=o,n.length=i,n));r.send(JSON.stringify(s)),e[t]=e[t].slice(he),o+=1}}:s,c=C(n,["peer","listener","sender"]);if((t=e.call(this,g(g({},c),{listener:i,sender:a}))||this).receiveBuffer=new Map,r){var l=!1,u=[],d=r.send.bind(r),f=function(){l=!1;for(var e=u.shift(),n=function(){if(r._channel.bufferedAmount&&r._channel.bufferedAmount>65536){l=!0,u.unshift(e);var n=function(){r._channel.removeEventListener("bufferedamountlow",n),f()};return r._channel.addEventListener("bufferedamountlow",n),{value:void 0}}try{d(e),e=u.shift()}catch(e){throw new Error("Error send message to peer: ".concat(e.message))}};e;){var t=n();if("object"==typeof t)return t.value}};r.send=function(e){u.push(e),l||f()}}return t}return w(n,e),n}(q),pe=function(e){function n(n){var t=n.targetOrigin,r=void 0===t?"*":t,o=n.listener,i=void 0===o?function(e){var n=function(n){var t=n.data;return e(t)};return window.addEventListener("message",n),function(){window.removeEventListener("message",n)}}:o,s=n.sender,a=void 0===s?function(e){window.postMessage(e,r)}:s,c=C(n,["targetOrigin","listener","sender"]);return e.call(this,g(g({},c),{listener:i,sender:a}))||this}return w(n,e),n}(q),me=function(e){function n(n){var t=n.child,r=n.listener,o=void 0===r?function(e){var n=function(n){e(n)};return t.on("message",n),function(){t.off("message",n)}}:r,i=n.sender,s=void 0===i?function(e){t.send(e)}:i,a=C(n,["child","listener","sender"]);return e.call(this,g(g({},a),{listener:o,sender:s}))||this}return w(n,e),n}(q),ye=function(e){function n(n){void 0===n&&(n={});var t=n.listener,r=void 0===t?function(e){var n=function(n){e(n)};return process.on("message",n),function(){process.off("message",n)}}:t,o=n.sender,i=void 0===o?function(e){process.send(e)}:o,s=C(n,["listener","sender"]);return e.call(this,g(g({},s),{listener:r,sender:i}))||this}return w(n,e),n}(q),be={Main:me,Child:ye},_e={Base:q,MessageTransport:pe,IFrameMain:N.Main,IFrameInternal:N.IFrame,BrowserExtensions:ce,BrowserExtensionsMain:fe.Main,BrowserExtensionsClient:fe.Client,ElectronMain:ie.Main,ElectronRenderer:ie.Renderer,ServiceWorkerClient:ee.Client,ServiceWorkerService:ee.Service,WebWorkerClient:K.Main,WebWorkerInternal:K.Worker,WebRTC:ve,Broadcast:ne,SharedWorkerClient:H.Client,SharedWorkerInternal:H.Worker,MainProcess:be.Main,ChildProcess:be.Child},we=function(e,n){return new _e[e](n)};e.BroadcastTransport=ne,e.BrowserExtensionsClientTransport=de,e.BrowserExtensionsGenericTransport=ce,e.BrowserExtensionsMainTransport=ue,e.BrowserExtensionsTransport=fe,e.ChildProcessTransport=ye,e.ElectronMainTransport=re,e.ElectronRendererTransport=oe,e.ElectronTransport=ie,e.IFrameInternalTransport=U,e.IFrameMainTransport=j,e.IFrameTransport=N,e.MainProcessTransport=me,e.MessageTransport=pe,e.ProcessTransport=be,e.ServiceWorkerClientTransport=Y,e.ServiceWorkerServiceTransport=Z,e.ServiceWorkerTransport=ee,e.SharedWorkerClientTransport=G,e.SharedWorkerInternalTransport=X,e.SharedWorkerTransport=H,e.Transport=q,e.TransportMap=_e,e.WebRTCTransport=ve,e.WorkerInternalTransport=$,e.WorkerMainTransport=J,e.WorkerTransport=K,e.createTransport=we,e.getAction=A,e.listen=function(e,n,t){var r,o=t.value;return e[l]=null!==(r=e[l])&&void 0!==r?r:new Map,e[l].set(n,o),g(g({},t),{value:function(){return Promise.resolve()}})},e.listenKey=t,e.listenerKey=n,e.logKey=a,e.merge=function(e,t){for(var o=[],i=2;i<arguments.length;i++)o[i-2]=arguments[i];var s=function(e,n,t){if(t||2===arguments.length)for(var r,o=0,i=n.length;o<i;o++)!r&&o in n||(r||(r=Array.prototype.slice.call(n,0,o)),r[o]=n[o]);return e.concat(r||Array.prototype.slice.call(n))}([e,t],T(o),!1);if(void 0===e||void 0===t)throw new Error("Only more than one transports can be merged.");return we("Base",{listener:function(e){var t=function(n){e(n)},r=s.map((function(e){return e[n](t)}));return function(){r.forEach((function(e){return e&&e()}))}},sender:function(e){s.forEach((function(n){n[r](e)}))}})},e.mockPorts=function(){var e=new Set,n=null;return{main:{listener:function(e){return n=e,function(){n=null}},sender:function(n){var t,r;try{for(var o=S(e),i=o.next();!i.done;i=o.next()){(0,i.value)(JSON.parse(JSON.stringify(n)))}}catch(e){t={error:e}}finally{try{i&&!i.done&&(r=o.return)&&r.call(o)}finally{if(t)throw t.error}}}},create:function(){return{listener:function(n){return e.add(n),function(){e.delete(n)}},sender:function(e){null==n||n(JSON.parse(JSON.stringify(e)))}}}}},e.senderKey=r,e.verboseKey=c}));
//# sourceMappingURL=index.umd.production.min.js.map