side-effect-manager
Advanced tools
Comparing version 0.1.4 to 0.1.5
@@ -1,2 +0,2 @@ | ||
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports[Symbol.toStringTag]="Module";exports.SideEffectManager=class{constructor(){this.disposers=new Map,this.disposerIDGenCount=-1}add(e,s=this.genDisposerID()){return this.flush(s),this.disposers.set(s,e()),s}addEventListener(e,s,t,r,o=this.genDisposerID()){return this.add((()=>(e.addEventListener(s,t,r),()=>e.removeEventListener(s,t,r))),o),o}setTimeout(e,s,t=this.genDisposerID()){return this.add((()=>{const r=window.setTimeout((()=>{this.remove(t),e()}),s);return()=>window.clearTimeout(r)}),t)}setInterval(e,s,t=this.genDisposerID()){return this.add((()=>{const t=window.setInterval(e,s);return()=>window.clearInterval(t)}),t)}remove(e){const s=this.disposers.get(e);return this.disposers.delete(e),s}flush(e){const s=this.remove(e);if(s)try{s()}catch(t){console.error(t)}}flushAll(){this.disposers.forEach((e=>{try{e()}catch(s){console.error(s)}})),this.disposers.clear()}genDisposerID(){const{MAX_SAFE_INTEGER:e=9007199254740991}=Number;return this.disposerIDGenCount=(this.disposerIDGenCount+1)%e,`disposer-${this.disposerIDGenCount}`}}; | ||
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports[Symbol.toStringTag]="Module";const e="!#%()*+,-./:;=?@[]^_`{|}~ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789",t=e.length,s=Array(20),r=()=>{for(let r=0;r<20;r++)s[r]=e.charAt(Math.random()*t);return s.join("")};exports.SideEffectManager=class{constructor(){this.disposers=new Map}add(e,t=r()){return this.flush(t),this.disposers.set(t,e()),t}addDisposer(e,t=r()){return this.flush(t),this.disposers.set(t,e),t}addEventListener(e,t,s,o,i=r()){return this.add((()=>(e.addEventListener(t,s,o),()=>e.removeEventListener(t,s,o))),i),i}setTimeout(e,t,s=r()){return this.add((()=>{const r=window.setTimeout((()=>{this.remove(s),e()}),t);return()=>window.clearTimeout(r)}),s)}setInterval(e,t,s=r()){return this.add((()=>{const s=window.setInterval(e,t);return()=>window.clearInterval(s)}),s)}remove(e){const t=this.disposers.get(e);return this.disposers.delete(e),t}flush(e){const t=this.remove(e);if(t)try{t()}catch(s){console.error(s)}}flushAll(){this.disposers.forEach((e=>{try{e()}catch(t){console.error(t)}})),this.disposers.clear()}},exports.genUID=r; | ||
//# sourceMappingURL=side-effect-manager.cjs.js.map |
@@ -0,1 +1,2 @@ | ||
export { genUID } from "./gen-uid"; | ||
export declare type SideEffectDisposer = () => void; | ||
@@ -11,2 +12,9 @@ export declare class SideEffectManager { | ||
/** | ||
* Add a disposer directly. | ||
* @param disposer a disposer | ||
* @param disposerID Optional id for the disposer | ||
* @returns disposerID | ||
*/ | ||
addDisposer(disposer: SideEffectDisposer, disposerID?: string): string; | ||
/** | ||
* Sugar for addEventListener. | ||
@@ -57,7 +65,2 @@ * @param el | ||
readonly disposers: Map<string, SideEffectDisposer>; | ||
/** | ||
* Generate a disposerID. | ||
*/ | ||
genDisposerID(): string; | ||
private disposerIDGenCount; | ||
} |
@@ -1,2 +0,2 @@ | ||
class s{constructor(){this.disposers=new Map,this.disposerIDGenCount=-1}add(s,e=this.genDisposerID()){return this.flush(e),this.disposers.set(e,s()),e}addEventListener(s,e,t,r,i=this.genDisposerID()){return this.add((()=>(s.addEventListener(e,t,r),()=>s.removeEventListener(e,t,r))),i),i}setTimeout(s,e,t=this.genDisposerID()){return this.add((()=>{const r=window.setTimeout((()=>{this.remove(t),s()}),e);return()=>window.clearTimeout(r)}),t)}setInterval(s,e,t=this.genDisposerID()){return this.add((()=>{const t=window.setInterval(s,e);return()=>window.clearInterval(t)}),t)}remove(s){const e=this.disposers.get(s);return this.disposers.delete(s),e}flush(s){const e=this.remove(s);if(e)try{e()}catch(t){console.error(t)}}flushAll(){this.disposers.forEach((s=>{try{s()}catch(e){console.error(e)}})),this.disposers.clear()}genDisposerID(){const{MAX_SAFE_INTEGER:s=9007199254740991}=Number;return this.disposerIDGenCount=(this.disposerIDGenCount+1)%s,`disposer-${this.disposerIDGenCount}`}}export{s as SideEffectManager}; | ||
const e="!#%()*+,-./:;=?@[]^_`{|}~ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789",s=e.length,t=Array(20),r=()=>{for(let r=0;r<20;r++)t[r]=e.charAt(Math.random()*s);return t.join("")};class o{constructor(){this.disposers=new Map}add(e,s=r()){return this.flush(s),this.disposers.set(s,e()),s}addDisposer(e,s=r()){return this.flush(s),this.disposers.set(s,e),s}addEventListener(e,s,t,o,i=r()){return this.add((()=>(e.addEventListener(s,t,o),()=>e.removeEventListener(s,t,o))),i),i}setTimeout(e,s,t=r()){return this.add((()=>{const r=window.setTimeout((()=>{this.remove(t),e()}),s);return()=>window.clearTimeout(r)}),t)}setInterval(e,s,t=r()){return this.add((()=>{const t=window.setInterval(e,s);return()=>window.clearInterval(t)}),t)}remove(e){const s=this.disposers.get(e);return this.disposers.delete(e),s}flush(e){const s=this.remove(e);if(s)try{s()}catch(t){console.error(t)}}flushAll(){this.disposers.forEach((e=>{try{e()}catch(s){console.error(s)}})),this.disposers.clear()}}export{o as SideEffectManager,r as genUID}; | ||
//# sourceMappingURL=side-effect-manager.es.js.map |
{ | ||
"name": "side-effect-manager", | ||
"version": "0.1.4", | ||
"version": "0.1.5", | ||
"private": false, | ||
@@ -5,0 +5,0 @@ "description": "A tiny library to encapsulate side effects in a compact, reusable and testable style.", |
@@ -24,2 +24,17 @@ import { genUID } from "./gen-uid"; | ||
/** | ||
* Add a disposer directly. | ||
* @param disposer a disposer | ||
* @param disposerID Optional id for the disposer | ||
* @returns disposerID | ||
*/ | ||
public addDisposer( | ||
disposer: SideEffectDisposer, | ||
disposerID: string = genUID() | ||
): string { | ||
this.flush(disposerID); | ||
this.disposers.set(disposerID, disposer); | ||
return disposerID; | ||
} | ||
/** | ||
* Sugar for addEventListener. | ||
@@ -26,0 +41,0 @@ * @param el |
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
28986
11
260