UNPKG

@protorians/core

Version:
62 lines (61 loc) 1.68 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.Capability = void 0; exports.createCapability = createCapability; const signal_1 = require("./signal"); class Capability { constructor(signal) { this.signal = signal; } apply(name, callable) { this.signal.listen(name, callable); return this; } call(name, args) { this.signal.dispatch(name, args); return this; } removeEntry(type, index) { this.signal.remove(type, index); return this; } remove(type) { this.signal.removeStack(type); return this; } removeAll(types) { this.signal.removeStacks(types); return this; } removeCallable(callable, type) { this.signal.removeCallable(callable, type); return this; } reset() { this.signal.clear(); return this; } } exports.Capability = Capability; function createCapability(options) { const signal = new signal_1.Signal.Stack(); const initial = {}; const callable = function (key, arg) { signal.dispatch(key, arg); return signal.computed(key); }; const handler = { get(target, prop, receiver) { const value = Reflect.get(target, prop, receiver); if (typeof value === 'function') { return function (arg) { return callable(prop, arg); }; } return value; } }; options.methods.forEach(key => initial[key] = () => signal.computed(key)); return { current: new Proxy(initial, handler), capability: new Capability(signal), }; }