UNPKG

kr-observable

Version:
35 lines (34 loc) 910 B
export class Executor { static #stack = []; static report(adm, property, set = false) { if (!this.#stack.length) return; const runnable = this.#stack[this.#stack.length - 1]; if (set) { adm.unsubscribe(property, runnable); } else { adm.subscribe(property, runnable); } } static execute(runnable, ...rest) { runnable.active = true; if (!runnable.deps) { runnable.deps = new Set; } else { this.dispose(runnable); } this.#stack.push(runnable); const result = runnable.run(...rest); this.#stack.pop(); runnable.active = false; return result; } static dispose(runnable) { runnable.deps.forEach(this.unsubscribe, runnable); } static unsubscribe(list) { list.delete(this); } }