chain-of-responsibility
Version:
Extendable classes for Chain of Responsibility pattern.
2 lines • 6.6 kB
JavaScript
(()=>{"use strict";var e={d:(t,n)=>{for(var r in n)e.o(n,r)&&!e.o(t,r)&&Object.defineProperty(t,r,{enumerable:!0,get:n[r]})},o:(e,t)=>Object.prototype.hasOwnProperty.call(e,t),r:e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})}},t={};function n(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}function r(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}e.r(t),e.d(t,{AbstractChainItem:()=>l,AbstractChainItemContainer:()=>i,AbstractChainItemValueContainer:()=>p});const i=function(){function e(t){var n=this;!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e),r(this,"promises",[]),r(this,"valueContainer",null),r(this,"firstChainItem",null),r(this,"promise",null),this.valueContainer=t,this.firstChainItem=this.getFirstChainItem(),this._createItemsChain(this.firstChainItem),this.promise=new Promise((function(e,t){n.resolve=e}))}var t,i;return t=e,(i=[{key:"_createItemsChain",value:function(e){}},{key:"_getFirstChainItem",value:function(){return null}},{key:"getValueContainer",value:function(){return this.valueContainer}},{key:"getFirstChainItem",value:function(){return this.firstChainItem||(this.firstChainItem=this._getFirstChainItem()),this.firstChainItem}},{key:"addPromise",value:function(e){return this.promises.push(e),this}},{key:"run",value:function(){for(var e=this,t=this.getFirstChainItem();t&&!0===t.shouldSkip(this.getValueContainer());)t=t.getNextChainItem();return t&&!1===t.shouldStopBefore(this.getValueContainer())&&t.execute(),Promise.all(this.promises).then((function(){e.resolve(e.getResult())})),this.promise}},{key:"getResult",value:function(){return this.getValueContainer().getResult()}}])&&n(t.prototype,i),e}();function o(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function u(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}function a(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}const l=function(){function e(t){var n=this,r=arguments.length>1&&void 0!==arguments[1]&&arguments[1];o(this,e),a(this,"chainContainer",null),a(this,"nextChainItem",null),a(this,"promise",null),a(this,"resolve",null),this.chainContainer=t,this.promise=null,this.resolve=null,!0===r&&(this.promise=new Promise((function(e,t){n.resolve=e})),this.getChainContainer().addPromise(this.promise))}var t,n;return t=e,(n=[{key:"hasPromise",value:function(){return!!this.promise}},{key:"getPromise",value:function(){return this.promise}},{key:"setNextChainItem",value:function(e){return this.nextChainItem=e,this}},{key:"getNextChainItem",value:function(){return this.nextChainItem}},{key:"getChainContainer",value:function(){return this.chainContainer}},{key:"getValueContainer",value:function(){return this.getChainContainer().getValueContainer()}},{key:"executeNext",value:function(){var e=this.getNextChainItem();if(e)for(;e&&!0===e.shouldSkip(this.getValueContainer());)e=e.getNextChainItem();return e&&!1===e.shouldStopBefore(this.getValueContainer())?e.execute():this.getValueContainer().getResult()}},{key:"execute",value:function(){var e=this;return this.hasPromise()&&this.getPromise().then((function(){!1===e.shouldStopAfter(e.getValueContainer())&&e.executeNext()})),this._execute(this.getValueContainer(),this.resolve),!0===this.shouldStopAfter(this.getValueContainer())?this.getValueContainer().getResult():this.hasPromise()?void 0:this.executeNext()}},{key:"_execute",value:function(e,t){return!1}},{key:"shouldStopBefore",value:function(e){return!1}},{key:"shouldStopAfter",value:function(e){return!1}},{key:"shouldSkip",value:function(e){return!1}}])&&u(t.prototype,n),e}(),s=function(e,t){for(var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:null,r=t.split("."),i=0;i<r.length;i+=1)if(void 0===(e=e[r[i]]))return n;return e},h=function(e,t,n){for(var r=t.split("."),i=e,o=0;o<r.length-1;o++){var u=r[o];u in i||(i[u]={}),i=i[u]}i[r[r.length-1]]=n};function c(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function f(e){return(f="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function v(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}function y(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}const p=function(){function e(t,n){var r;!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e),y(this,"rawValue",null),y(this,"value",null),y(this,"parameters",{}),r=Array.isArray(t)?t.concat():"object"==f(t)?function(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?c(Object(n),!0).forEach((function(t){y(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):c(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}({},t):t,this.rawValue=r,this.value=this._parseValue(t),this.parameters=n}var t,n;return t=e,(n=[{key:"_parseValue",value:function(e){return e}},{key:"getRawValue",value:function(){return this.rawValue}},{key:"getResult",value:function(){return this.getValue()}},{key:"getParameter",value:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null;return s(this.parameters,e,t)}},{key:"getValue",value:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:null,t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null;if(null===e)return this.value;if("string"==typeof e)return s(this.value,e,t);throw"Wrong usage."}},{key:"setValue",value:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null;return"object"==f(this.value)?(h(this.value,e,t),this):(this.value=e,this)}}])&&v(t.prototype,n),e}();module.exports=t})();
//# sourceMappingURL=chain-of-responsibility.js.map