UNPKG

@aptpod/iscp-ts

Version:

iSCP 2.0 client library for TypeScript

74 lines 4.01 kB
// cf. https://typescript-jp.gitbook.io/deep-dive/main-1/typed-event var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) { if (kind === "m") throw new TypeError("Private method is not writable"); if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter"); if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot write private member to an object whose class did not declare it"); return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value; }; var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) { if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter"); if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it"); return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver); }; var _TypedEvent_disposed, _TypedEvent_listeners, _TypedEvent_listenersOncer; export const ErrorAlreadyDisposed = new Error('TypedEvent has already been disposed.'); /** passes through events as they happen. You will not get events from before you start listening */ export class TypedEvent { constructor() { _TypedEvent_disposed.set(this, void 0); _TypedEvent_listeners.set(this, void 0); _TypedEvent_listenersOncer.set(this, void 0); __classPrivateFieldSet(this, _TypedEvent_disposed, false, "f"); __classPrivateFieldSet(this, _TypedEvent_listeners, [], "f"); __classPrivateFieldSet(this, _TypedEvent_listenersOncer, [], "f"); } dispose() { __classPrivateFieldSet(this, _TypedEvent_disposed, true, "f"); __classPrivateFieldSet(this, _TypedEvent_listeners, [], "f"); __classPrivateFieldSet(this, _TypedEvent_listenersOncer, [], "f"); } on(listener) { if (__classPrivateFieldGet(this, _TypedEvent_disposed, "f")) { // throw ErrorAlreadyDisposed return { dispose: () => { }, }; } __classPrivateFieldGet(this, _TypedEvent_listeners, "f").push(listener); return { dispose: () => this.off(listener), }; } once(listener) { if (__classPrivateFieldGet(this, _TypedEvent_disposed, "f")) { // throw ErrorAlreadyDisposed return; } __classPrivateFieldGet(this, _TypedEvent_listenersOncer, "f").push(listener); } off(listener) { if (__classPrivateFieldGet(this, _TypedEvent_disposed, "f")) { // throw ErrorAlreadyDisposed return; } __classPrivateFieldSet(this, _TypedEvent_listenersOncer, __classPrivateFieldGet(this, _TypedEvent_listenersOncer, "f").filter((registeredlistener) => registeredlistener !== listener), "f"); __classPrivateFieldSet(this, _TypedEvent_listeners, __classPrivateFieldGet(this, _TypedEvent_listeners, "f").filter((registeredlistener) => registeredlistener !== listener), "f"); } emit(...event) { if (__classPrivateFieldGet(this, _TypedEvent_disposed, "f")) { // throw ErrorAlreadyDisposed return; } /** Update any general listeners */ __classPrivateFieldGet(this, _TypedEvent_listeners, "f").forEach((listener) => { listener(...event); }); /** Clear the `once` queue */ __classPrivateFieldGet(this, _TypedEvent_listenersOncer, "f").forEach((listener) => { listener(...event); }); __classPrivateFieldSet(this, _TypedEvent_listenersOncer, [], "f"); } } _TypedEvent_disposed = new WeakMap(), _TypedEvent_listeners = new WeakMap(), _TypedEvent_listenersOncer = new WeakMap(); //# sourceMappingURL=index.js.map