send-and-receive
Version:
Two small helper methods that simplify communication between nodes in different subtrees of the browser DOM.
1 lines • 1.78 kB
JavaScript
!function(e,n){"object"==typeof exports&&"undefined"!=typeof module?n(exports):"function"==typeof define&&define.amd?define(["exports"],n):n((e=e||self).sar={})}(this,function(e){"use strict";function u(e,n,r){Object.defineProperty(e,n,{get:r,enumerable:!0,configurable:!1})}function i(e,n){return dispatchEvent(new CustomEvent(e,{detail:n}))}var a={limit:Number.POSITIVE_INFINITY};function c(e,n,r){void 0===r&&(r=a);var t=r.limit;if(t<=0)throw new RangeError("limit must be greater than 0");function i(e){c.received<t&&(c.received++,c.remaining--,0===c.remaining&&c.cancel(),n(e.detail))}var c={received:0,remaining:t,cancelled:!1,cancel:function(){c.cancelled||(removeEventListener(e,i,!1),c.cancelled=!0)},paused:!1,pause:function(){if(c.cancelled)throw new Error("cannot pause a cancelled subscription");c.paused||(removeEventListener(e,i,!1),c.paused=!0)},resume:function(){if(c.cancelled)throw new Error("cannot resume a cancelled subscription");c.paused&&(addEventListener(e,i,!1),c.paused=!1)}};return addEventListener(e,i,!1),function(e){var n={};return u(n,"received",function(){return e.received}),u(n,"remaining",function(){return e.remaining}),u(n,"cancelled",function(){return e.cancelled}),u(n,"cancel",function(){return e.cancel}),u(n,"paused",function(){return e.paused}),u(n,"pause",function(){return e.pause}),u(n,"resume",function(){return e.resume}),n}(c)}function n(){for(var e=[],n=arguments.length;n--;)e[n]=arguments[n];return e[0]}e.create=function(r,t){return void 0===t&&(t=n),[function(){for(var e=[],n=arguments.length;n--;)e[n]=arguments[n];return i(r,t.apply(void 0,e))},function(e,n){return void 0===n&&(n=a),c(r,e,n)}]},e.receive=c,e.receiveOnce=function(e,n){return c(e,n,{limit:1})},e.send=i,Object.defineProperty(e,"__esModule",{value:!0})});