@da.li/core-libs
Version:
大沥网络函数库是大沥网络提供的一个公共 TypeScript 函数库,封装了基础操作、缓存、加密、文件处理、HTTP 请求等常用功能模块,旨在提高开发效率。
71 lines (68 loc) • 2.12 kB
JavaScript
import {
hasArray,
isFn,
isString
} from "./chunk-BOVD54NE.js";
// src/eventBus/index.ts
var EventBus = class {
constructor() {
/** 注册的事件 */
this.instance = /* @__PURE__ */ new Map();
/**
* 注册事件,名称如果已经存在则将被覆盖
* @param name 事件名称,忽略大小写
* @param action 事件
* @param duplicate 当注册相同事件时是否允许重复
* @param immediate 是否立即执行一次
*/
this.on = (name, event, duplicate = false, immediate = false, ...args) => {
if (!isString(name) || !name || !isFn(event)) return;
name = name.toLowerCase();
if (this.instance.has(name)) {
const events = this.instance.get(name);
if (duplicate) {
events.push(event);
} else {
!events.includes(event) && events.push(event);
}
} else {
this.instance.set(name, [event]);
}
immediate && event(...args);
};
/**
* 注销指定事件,如果不存在则忽略
* @param name 事件名称,忽略大小写
* @param event 要移除的事件,不设置则所有都移除
*/
this.off = (name, event) => {
if (!isString(name) || !name) return;
name = name.toLowerCase();
if (!this.instance.has(name)) return;
if (!event) this.instance.delete(name);
if (!isFn(event)) return;
const list = this.instance.get(name);
if (!list) return;
const index = list.indexOf(event);
if (index > -1) list.splice(index, 1);
if (!hasArray(list)) this.instance.delete(name);
};
/**
* 执行事件
* @param name 事件名称,忽略大小写
* @param args 提交参数
*/
this.emit = (name, ...args) => {
if (!isString(name) || !name) return;
name = name.toLowerCase();
if (!this.instance.has(name)) return;
const list = this.instance.get(name);
list == null ? void 0 : list.forEach((event) => event(...args));
};
}
};
var createEventBus = () => new EventBus();
export {
EventBus,
createEventBus
};