@flowlab/event
Version:
FlowLab event-driven system
1 lines • 8.93 kB
Source Map (JSON)
{"version":3,"sources":["../../src/bus/EventBus.ts","../../src/bus/InMemoryBus.ts","../../src/internal/context.ts","../../src/api/emitEvents.ts","../../src/cli/index.ts","../../package.json"],"sourcesContent":["import { IEventBus, EventHandler, EventPayload } from '../types';\n\n/**\n * EventBus 抽象基类,提供 emit/on/off 的基础能力\n */\nexport abstract class EventBus implements IEventBus {\n protected handlers: Map<string, Set<EventHandler>> = new Map();\n\n /**\n * 触发事件\n * @param eventName - 事件名称\n * @param payload - 事件数据\n */\n async emit(eventName: string, payload: EventPayload): Promise<void> {\n const handlers = this.handlers.get(eventName);\n if (handlers) {\n for (const handler of handlers) {\n try {\n await handler(payload);\n } catch (err) {\n console.error(`[FlowLab EventBus] Error handling event ${eventName}`, err);\n }\n }\n }\n }\n\n /**\n * 绑定事件处理器\n * @param eventName - 事件名称\n * @param handler - 事件处理函数\n */\n on(eventName: string, handler: EventHandler): void {\n if (!this.handlers.has(eventName)) {\n this.handlers.set(eventName, new Set());\n }\n this.handlers.get(eventName)?.add(handler);\n }\n\n /**\n * 解绑事件处理器\n * @param eventName - 事件名称\n * @param handler - 事件处理函数\n */\n off(eventName: string, handler: EventHandler): void {\n this.handlers.get(eventName)?.delete(handler);\n }\n\n /**\n * 启动事件监听(由子类实现)\n */\n abstract start(): Promise<void>;\n\n /**\n * 停止事件监听(由子类实现)\n */\n abstract stop(): Promise<void>;\n}\n","import { EventBus } from './EventBus';\n\n/**\n * InMemoryBus 是默认的事件总线实现,基于内存事件分发\n */\nexport class InMemoryBus extends EventBus {\n private running: boolean = false;\n\n async start(): Promise<void> {\n this.running = true;\n console.log('[FlowLab] ✅ InMemory EventBus started successfully');\n }\n\n async stop(): Promise<void> {\n this.running = false;\n console.log('[FlowLab] 🛑 InMemory EventBus stopped');\n }\n\n isRunning(): boolean {\n return this.running;\n }\n}","import { IEventBus } from '../types';\nimport { InMemoryBus } from '../bus/InMemoryBus';\n\n/**\n * 当前事件总线实例(默认使用内存实现)\n */\nlet currentEventBus: IEventBus = new InMemoryBus();\n\n/**\n * 获取当前事件总线实例\n */\nexport function getCurrentEventBus(): IEventBus {\n return currentEventBus;\n}\n\n/**\n * 替换当前使用的事件总线(可用于 Redis/Kafka)\n * @param bus 自定义实现的事件总线\n */\nexport function useEventBus(bus: IEventBus): void {\n currentEventBus = bus;\n}","// src/api/emitEvent.ts\n\nimport { EventPayload } from '../types';\nimport { getCurrentEventBus } from '../internal/context';\n\n/**\n * 触发事件\n * @param eventName - 事件名称\n * @param payload - 传递的数据\n */\nexport async function emitEvent(eventName: string, payload: EventPayload): Promise<void> {\n const bus = getCurrentEventBus();\n await bus.emit(eventName, payload);\n}\n","import { emitEvent } from '../../src/index';\nimport { cac } from 'cac';\nimport colors from 'picocolors';\nimport packageJson from '../../package.json' assert { type: 'json' };\nimport pc from 'picocolors';\n\nconst cli = cac('flowlab-event');\n\ncli\n .version(packageJson.version)\n .help()\n\n// emit 命令\ncli\n .command('emit <event> [data]', '触发一个事件(JSON 字符串或文件)')\n .option('--pretty', '美化输出')\n .action(async (eventName, data, options) => {\n console.log(colors.cyan(`\\n🚀 正在触发事件: ${colors.bold(eventName)}\\n`));\n\n let parsed: any = {};\n try {\n parsed = JSON.parse(data);\n } catch (e) {\n console.warn(colors.yellow('⚠️ 参数不是有效 JSON,使用空对象替代'));\n }\n\n try {\n await emitEvent(eventName, parsed);\n console.log(colors.green(`✅ 已成功触发事件 ${eventName}`));\n } catch (err) {\n console.error(colors.red(`❌ 触发失败: ${(err as Error).message}`));\n process.exit(1);\n }\n });\n\ncli\n.command('welcome', '显示欢迎信息')\n.action(() => {\n console.log('\\n' + pc.bold(pc.cyan('🎉 欢迎使用 FlowLab CLI - 事件引擎模块')));\n console.log(pc.dim('--------------------------------------------'));\n console.log(pc.blue(`📦 模块名: ${packageJson.name}`));\n console.log(pc.green(`🔧 版本号: v${packageJson.version}`));\n console.log(pc.yellow('👤 作者: Luke'));\n console.log(pc.magenta('📘 文档: https://github.com/countstarss/flowlab'));\n console.log(pc.dim('--------------------------------------------'));\n console.log(pc.cyan('\\n🚀 你可以开始使用如下命令:'));\n console.log(pc.dim(' $ event emit user.signup \\'{\"email\": \"test@example.com\"}\\''));\n console.log('\\n');\n});\n\ncli.parse();","{\n \"name\": \"@flowlab/event\",\n \"version\": \"0.1.0\",\n \"description\": \"FlowLab event-driven system\",\n \"main\": \"dist/index.js\",\n \"types\": \"dist/index.d.ts\",\n \"bin\": {\n \"flow-event\": \"./dist/cli/index.js\"\n },\n \"exports\": {\n \".\": {\n \"import\": \"./dist/index.js\",\n \"require\": \"./dist/index.js\"\n }\n },\n \"files\": [\n \"dist\"\n ],\n \"scripts\": {\n \"build\": \"tsup --config tsup.config.ts\",\n \"dev\": \"tsup src/index.ts --watch\",\n \"test\": \"jest\"\n },\n \"keywords\": [\n \"event\",\n \"event-driven\",\n \"event-bus\",\n \"event-emitter\",\n \"event-handler\",\n \"event-listener\",\n \"event-dispatcher\"\n ],\n \"author\": \"luke king\",\n \"license\": \"MIT\",\n \"dependencies\": {\n \"cac\": \"^6.7.14\",\n \"eventemitter3\": \"^5.0.1\",\n \"ioredis\": \"^5.6.0\",\n \"picocolors\": \"^1.1.1\"\n },\n \"devDependencies\": {\n \"@types/jest\": \"^29.5.14\",\n \"jest\": \"^29.7.0\",\n \"ts-jest\": \"^29.3.0\",\n \"tsup\": \"^7.2.0\",\n \"typescript\": \"^5.3.3\"\n }\n}\n"],"mappings":"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","names":[]}