@aptpod/iscp-ts
Version:
iSCP 2.0 client library for TypeScript
74 lines • 4.01 kB
JavaScript
// 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