UNPKG

@snap/camera-kit

Version:
29 lines 1.27 kB
import { TypedCustomEvent } from "./TypedCustomEvent"; import { TypedEventTarget } from "./TypedEventTarget"; export const scan = (seedState) => (source, eventTypes, accumulator) => { let state = seedState; const sink = new TypedEventTarget(); const listener = (event) => { state = accumulator(state, event); sink.dispatchEvent(new TypedCustomEvent("state", state)); }; let hasListener = false; sink.addEventListener = new Proxy(sink.addEventListener, { apply: (target, thisArg, args) => { if (hasListener) throw new Error("Cannot add another event listener. The TypedEventTarget returned by scan only " + "supports a single listener, and one has already been added."); hasListener = true; eventTypes.forEach((eventType) => source.addEventListener(eventType, listener)); target.apply(thisArg, args); }, }); sink.removeEventListener = new Proxy(sink.removeEventListener, { apply: (target, thisArg, args) => { eventTypes.forEach((eventType) => source.removeEventListener(eventType, listener)); target.apply(thisArg, args); }, }); return sink; }; //# sourceMappingURL=scan.js.map