vue-hooks-plus
Version:
Vue hooks library
74 lines (73 loc) • 2.96 kB
JavaScript
;
var __defProp = Object.defineProperty;
var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
var __publicField = (obj, key, value) => {
__defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
return value;
};
Object.defineProperties(exports, { __esModule: { value: true }, [Symbol.toStringTag]: { value: "Module" } });
const cloneDeep = require("lodash-es/cloneDeep");
const vue = require("vue");
const _interopDefaultLegacy = (e) => e && typeof e === "object" && "default" in e ? e : { default: e };
const cloneDeep__default = /* @__PURE__ */ _interopDefaultLegacy(cloneDeep);
class EventEmitter {
constructor() {
__publicField(this, "subscriptions", /* @__PURE__ */ new Map());
__publicField(this, "emitEffectCache", /* @__PURE__ */ new Map());
__publicField(this, "useSubscription", (event, listener) => {
const callbackRef = vue.ref();
vue.watchEffect((onInvalidate) => {
var _a, _b;
callbackRef.value = listener;
function subscription(val) {
if (callbackRef.value) {
callbackRef.value(val);
}
}
const subscriptions = (_b = (_a = this.subscriptions) == null ? void 0 : _a.get(event)) != null ? _b : [];
subscriptions.push(subscription);
this.subscriptions.set(event, subscriptions);
this.emitEffect(event);
onInvalidate(() => {
this.subscriptions.delete(event);
});
});
});
__publicField(this, "emit", (event, ...args) => {
if (typeof event === "string" || typeof event === "number") {
const subscriptionValuesCallback = this.subscriptions.get(event);
subscriptionValuesCallback == null ? void 0 : subscriptionValuesCallback.forEach((callback) => {
callback == null ? void 0 : callback({
params: cloneDeep__default.default(args),
event
});
});
this.emitEffectCache.set(event, {
params: cloneDeep__default.default(args),
event
});
} else
throw new TypeError("event must be string or number !");
});
__publicField(this, "emitEffect", (event) => {
const emitEffectCache = this.emitEffectCache.get(event);
const listeners = this.subscriptions.get(event);
if (emitEffectCache)
listeners == null ? void 0 : listeners.forEach((listener) => {
listener == null ? void 0 : listener({
...emitEffectCache
});
});
});
__publicField(this, "removeListener", (event) => {
this.subscriptions.delete(event);
});
__publicField(this, "clear", () => {
this.subscriptions.clear();
});
this.clear();
}
}
const eventEmitterOverall = new EventEmitter();
exports.EventEmitter = EventEmitter;
exports.eventEmitterOverall = eventEmitterOverall;