UNPKG

redux-ws-middleware

Version:

This package makes web socket management much easier with redux

3 lines (2 loc) 12.1 kB
!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)["redux-ws-middleware"]={})}(this,(function(e){"use strict";function n(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);n&&(r=r.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,r)}return t}function t(e,n){if(!(e instanceof n))throw new TypeError("Cannot call a class as a function")}function r(e,n){for(var t=0;t<n.length;t++){var r=n[t];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}function o(e,n,t){return n&&r(e.prototype,n),t&&r(e,t),Object.defineProperty(e,"prototype",{writable:!1}),e}function i(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function c(e,n){if("function"!=typeof n&&null!==n)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(n&&n.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),n&&a(e,n)}function u(e){return u=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)},u(e)}function a(e,n){return a=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,n){return e.__proto__=n,e},a(e,n)}function s(e,n){if(null==e)return{};var t,r,o=function(e,n){if(null==e)return{};var t,r,o={},i=Object.keys(e);for(r=0;r<i.length;r++)t=i[r],n.indexOf(t)>=0||(o[t]=e[t]);return o}(e,n);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r<i.length;r++)t=i[r],n.indexOf(t)>=0||Object.prototype.propertyIsEnumerable.call(e,t)&&(o[t]=e[t])}return o}function l(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}function f(e,n){if(n&&("object"==typeof n||"function"==typeof n))return n;if(void 0!==n)throw new TypeError("Derived constructors may only return object or undefined");return l(e)}function d(e){var n=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}();return function(){var t,r=u(e);if(n){var o=u(this).constructor;t=Reflect.construct(r,arguments,o)}else t=r.apply(this,arguments);return f(this,t)}}function v(e,n){return function(e){if(Array.isArray(e))return e}(e)||function(e,n){var t=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null==t)return;var r,o,i=[],c=!0,u=!1;try{for(t=t.call(e);!(c=(r=t.next()).done)&&(i.push(r.value),!n||i.length!==n);c=!0);}catch(e){u=!0,o=e}finally{try{c||null==t.return||t.return()}finally{if(u)throw o}}return i}(e,n)||p(e,n)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function p(e,n){if(e){if("string"==typeof e)return h(e,n);var t=Object.prototype.toString.call(e).slice(8,-1);return"Object"===t&&e.constructor&&(t=e.constructor.name),"Map"===t||"Set"===t?Array.from(e):"Arguments"===t||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t)?h(e,n):void 0}}function h(e,n){(null==n||n>e.length)&&(n=e.length);for(var t=0,r=new Array(n);t<n;t++)r[t]=e[t];return r}var y,b=o((function e(){var n=this;t(this,e),i(this,"prefix","redux-ws-middleware"),i(this,"log",(function(e,t){console.groupCollapsed("[".concat(n.prefix,"] ").concat(e)),t&&console.log(t),console.groupEnd()})),i(this,"error",(function(e,t){console.error("[".concat(n.prefix,"] ").concat(e),t)}))})),g=o((function e(n){var r=this,o=n.debug;t(this,e),i(this,"loggerService",void 0),i(this,"log",(function(e,n){var t;null===(t=r.loggerService)||void 0===t||t.log(e,n)})),i(this,"error",(function(e,n){var t;null===(t=r.loggerService)||void 0===t||t.error(e,n)})),o&&(this.loggerService=new b)})),O=function(e){c(r,e);var n=d(r);function r(e){var o,c=arguments.length>1&&void 0!==arguments[1]?arguments[1]:1e3,u=arguments.length>2?arguments[2]:void 0;return t(this,r),i(l(o=n.call(this,{debug:u})),"interval",void 0),i(l(o),"callback",void 0),i(l(o),"reconnections",0),i(l(o),"timeout",null),i(l(o),"startJob",(function(){var e=o.getInterval();o.log("Reconnect in ".concat(e,"ms")),o.timeout=setTimeout(o.callback,e),o.incrementReconnections()})),i(l(o),"removeJob",(function(){o.timeout&&(clearTimeout(o.timeout),o.timeout=null),o.resetReconnections()})),i(l(o),"getInterval",(function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:o.interval;if("number"==typeof e)return e;if(!e.length)return 0;var n=e.length-1;return o.reconnections<=n?e[o.reconnections]:e[n]})),i(l(o),"setReconnections",(function(e){o.reconnections=e})),i(l(o),"incrementReconnections",(function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:o.reconnections;o.setReconnections(e+1)})),i(l(o),"resetReconnections",(function(){o.setReconnections(0)})),o.interval=c,o.callback=e,o}return o(r)}(g);!function(e){e[e.CONNECTED=0]="CONNECTED",e[e.DISCONNECTED=1]="DISCONNECTED"}(y||(y={}));var S,w,E=o((function e(r,o){var c=this;t(this,e),i(this,"actionTypes",void 0),i(this,"dispatch",void 0),i(this,"getDispatch",(function(){return c.dispatch})),i(this,"dispatchConnected",(function(){c.dispatch({type:c.actionTypes[y.CONNECTED]})})),i(this,"dispatchDisconnected",(function(e){c.dispatch(function(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?n(Object(r),!0).forEach((function(n){i(e,n,r[n])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):n(Object(r)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(r,n))}))}return e}({type:c.actionTypes[y.DISCONNECTED]},e?{payload:e}:{}))})),this.actionTypes=r,this.dispatch=o})),m=o((function e(n,r){var o=this;t(this,e),i(this,"serializer",void 0),i(this,"deserializer",void 0),i(this,"serialize",(function(e){var n,t=(null===(n=o.serializer)||void 0===n?void 0:n.call(o,e))||e;return"string"==typeof t?t:JSON.stringify(t)})),i(this,"deserialize",(function(e){var n,t;try{t=JSON.parse(e)}catch(n){t=e}return(null===(n=o.deserializer)||void 0===n?void 0:n.call(o,t))||t})),this.serializer=n,this.deserializer=r})),R=function(e){c(r,e);var n=d(r);function r(e){var o;return t(this,r),i(l(o=n.call(this,{debug:e})),"queue",[]),i(l(o),"getValues",(function(){return o.queue.map((function(e){return JSON.parse(e)}))})),i(l(o),"add",(function(e){var n=o.getUniqueRequest(e);n&&(o.queue.push(n),o.log("Added to queue",e))})),i(l(o),"remove",(function(e){var n=JSON.stringify(e);o.queue=o.queue.filter((function(e){return e!==n})),o.log("Removed from queue",e)})),i(l(o),"clear",(function(){o.queue=[],o.log("Queue cleared")})),i(l(o),"getUniqueRequest",(function(e){var n=JSON.stringify(e);return o.queue.includes(n)?(o.log("Already in queue",e),null):n})),o}return o(r)}(g);!function(e){e.OPEN="open",e.ERROR="error",e.CLOSE="close",e.MESSAGE="message"}(S||(S={})),function(e){e[e.FORCE_CLOSE=1005]="FORCE_CLOSE"}(w||(w={}));var C=["shouldReconnect","reconnectionInterval","debug","serialize","deserialize"],j=function(e){c(r,e);var n=d(r);function r(e,o,c){var u;t(this,r),i(l(u=n.call(this,{debug:e.debug})),"options",void 0),i(l(u),"shouldReconnect",void 0),i(l(u),"reconnectService",void 0),i(l(u),"reduxService",void 0),i(l(u),"serializerService",void 0),i(l(u),"queueService",void 0),i(l(u),"ws",null),i(l(u),"open",(function(){if("undefined"!=typeof window&&!u.ws){var e=u.options,n=e.url,t=e.protocols;u.ws=new WebSocket(n,t),u.setListeners()}})),i(l(u),"send",(function(e){var n;if(u.checkOpenStateAndOpenConnection(e)){var t=u.serializerService.serialize(e);null===(n=u.ws)||void 0===n||n.send(t),u.log("Sent",t)}})),i(l(u),"close",(function(e){var n;u.checkOpenStateAndThrowError(),null===(n=u.ws)||void 0===n||n.close(e)})),i(l(u),"setListeners",(function(){u.ws&&(u.ws.addEventListener(S.OPEN,u.handleOpen),u.ws.addEventListener(S.MESSAGE,u.handleMessage),u.ws.addEventListener(S.ERROR,u.handleError),u.ws.addEventListener(S.CLOSE,u.handleClose))})),i(l(u),"removeListeners",(function(){u.ws&&(u.ws.removeEventListener(S.OPEN,u.handleOpen),u.ws.removeEventListener(S.MESSAGE,u.handleMessage),u.ws.removeEventListener(S.ERROR,u.handleError),u.ws.removeEventListener(S.CLOSE,u.handleClose))})),i(l(u),"handleOpen",(function(e){u.log("Connected"),u.reduxService.dispatchConnected(),u.reconnectService.removeJob(),u.sendQueuedRequests()})),i(l(u),"handleMessage",(function(e){var n,t,r=u.serializerService.deserialize(e.data);u.log("Received",r),u.options.onMessage(r,u.reduxService.getDispatch()),null!==(n=(t=u.options).shouldClose)&&void 0!==n&&n.call(t,r)&&u.close(w.FORCE_CLOSE)})),i(l(u),"handleError",(function(e){u.error("Error",e)})),i(l(u),"handleClose",(function(e){var n=e.code,t=e.reason,r=n===w.FORCE_CLOSE;u.log("Disconnected",{code:n,reason:t,forceDisconnection:r}),u.reduxService.dispatchDisconnected({reason:t,forceDisconnection:r,code:n}),u.removeListeners(),u.ws=null,u.checkReconnectAbilityAndStartJob(e,r)})),i(l(u),"sendQueuedRequests",(function(){var e=u.queueService.getValues();if(e.length){var n,t=function(e,n){var t="undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(!t){if(Array.isArray(e)||(t=p(e))||n&&e&&"number"==typeof e.length){t&&(e=t);var r=0,o=function(){};return{s:o,n:function(){return r>=e.length?{done:!0}:{done:!1,value:e[r++]}},e:function(e){throw e},f:o}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var i,c=!0,u=!1;return{s:function(){t=t.call(e)},n:function(){var e=t.next();return c=e.done,e},e:function(e){u=!0,i=e},f:function(){try{c||null==t.return||t.return()}finally{if(u)throw i}}}}(e);try{for(t.s();!(n=t.n()).done;){var r=n.value;u.send(r),u.queueService.remove(r)}}catch(e){t.e(e)}finally{t.f()}}})),i(l(u),"checkReconnectAbilityAndStartJob",(function(e,n){n&&"boolean"==typeof u.shouldReconnect||("boolean"!=typeof u.shouldReconnect?u.shouldReconnect(e)&&u.reconnectService.startJob():u.reconnectService.startJob())})),i(l(u),"checkOpenStateAndOpenConnection",(function(e){if(u.isReadyStateOpen())return!0;if(!u.options.shouldOpen)throw new Error("WebSocket is not connected. Make sure it is connected before triggering an action.");return"boolean"==typeof u.options.shouldOpen||u.options.shouldOpen(e)?(u.queueService.add(e),u.open(),!1):void 0})),i(l(u),"checkOpenStateAndThrowError",(function(){if(!u.isReadyStateOpen())throw new Error("WebSocket is not connected. Make sure it is connected before triggering an action.")})),i(l(u),"isReadyStateOpen",(function(){var e;return(null===(e=u.ws)||void 0===e?void 0:e.readyState)===WebSocket.OPEN||!1}));var a=e.shouldReconnect,f=e.reconnectionInterval,d=e.debug,v=e.serialize,h=e.deserialize,y=s(e,C);return u.options=y,u.shouldReconnect=null==a||a,u.reconnectService=new O(u.open,f,d),u.reduxService=new E(c,o),u.serializerService=new m(v,h),u.queueService=new R(d),!1!==e.autoConnect&&u.open(),d&&u.log("Debug mode is ENABLED",e),u}return o(r)}(g),T=["actionTypes","completedActionTypes"],A=function(e){var n=e instanceof RegExp;return function(t){return n?e.test(t):t===e}};e.createSocketMiddleware=function(e){var n=e.actionTypes,t=e.completedActionTypes,r=s(e,T),o=v(n,3),i=o[0],c=o[1],u=o[2],a=A(i),l=c?A(c):null,f=u?A(u):null;return function(e){var n=e.dispatch,o=new j(r,n,t);return function(e){return function(n){var t,r;(null!=l&&l(n.type)&&o.open(),null!=f&&f(n.type))&&o.close((null===(t=n.data)||void 0===t?void 0:t.code)||(null===(r=n.payload)||void 0===r?void 0:r.code)||n.code);return a(n.type)&&o.send(n.data||n.payload),e(n)}}}}})); //# sourceMappingURL=index.umd.js.map