UNPKG

@flowlab/event

Version:

FlowLab event-driven system

161 lines (154 loc) 4.61 kB
#!/usr/bin/env node // src/bus/EventBus.ts var EventBus = class { handlers = /* @__PURE__ */ new Map(); /** * 触发事件 * @param eventName - 事件名称 * @param payload - 事件数据 */ async emit(eventName, payload) { const handlers = this.handlers.get(eventName); if (handlers) { for (const handler of handlers) { try { await handler(payload); } catch (err) { console.error(`[FlowLab EventBus] Error handling event ${eventName}`, err); } } } } /** * 绑定事件处理器 * @param eventName - 事件名称 * @param handler - 事件处理函数 */ on(eventName, handler) { if (!this.handlers.has(eventName)) { this.handlers.set(eventName, /* @__PURE__ */ new Set()); } this.handlers.get(eventName)?.add(handler); } /** * 解绑事件处理器 * @param eventName - 事件名称 * @param handler - 事件处理函数 */ off(eventName, handler) { this.handlers.get(eventName)?.delete(handler); } }; // src/bus/InMemoryBus.ts var InMemoryBus = class extends EventBus { running = false; async start() { this.running = true; console.log("[FlowLab] \u2705 InMemory EventBus started successfully"); } async stop() { this.running = false; console.log("[FlowLab] \u{1F6D1} InMemory EventBus stopped"); } isRunning() { return this.running; } }; // src/internal/context.ts var currentEventBus = new InMemoryBus(); function getCurrentEventBus() { return currentEventBus; } // src/api/emitEvents.ts async function emitEvent(eventName, payload) { const bus = getCurrentEventBus(); await bus.emit(eventName, payload); } // src/cli/index.ts import { cac } from "cac"; import colors from "picocolors"; // package.json var package_default = { name: "@flowlab/event", version: "0.1.0", description: "FlowLab event-driven system", main: "dist/index.js", types: "dist/index.d.ts", bin: { "flow-event": "./dist/cli/index.js" }, exports: { ".": { import: "./dist/index.js", require: "./dist/index.js" } }, files: [ "dist" ], scripts: { build: "tsup --config tsup.config.ts", dev: "tsup src/index.ts --watch", test: "jest" }, keywords: [ "event", "event-driven", "event-bus", "event-emitter", "event-handler", "event-listener", "event-dispatcher" ], author: "luke king", license: "MIT", dependencies: { cac: "^6.7.14", eventemitter3: "^5.0.1", ioredis: "^5.6.0", picocolors: "^1.1.1" }, devDependencies: { "@types/jest": "^29.5.14", jest: "^29.7.0", "ts-jest": "^29.3.0", tsup: "^7.2.0", typescript: "^5.3.3" } }; // src/cli/index.ts import pc from "picocolors"; var cli = cac("flowlab-event"); cli.version(package_default.version).help(); cli.command("emit <event> [data]", "\u89E6\u53D1\u4E00\u4E2A\u4E8B\u4EF6\uFF08JSON \u5B57\u7B26\u4E32\u6216\u6587\u4EF6\uFF09").option("--pretty", "\u7F8E\u5316\u8F93\u51FA").action(async (eventName, data, options) => { console.log(colors.cyan(` \u{1F680} \u6B63\u5728\u89E6\u53D1\u4E8B\u4EF6: ${colors.bold(eventName)} `)); let parsed = {}; try { parsed = JSON.parse(data); } catch (e) { console.warn(colors.yellow("\u26A0\uFE0F \u53C2\u6570\u4E0D\u662F\u6709\u6548 JSON\uFF0C\u4F7F\u7528\u7A7A\u5BF9\u8C61\u66FF\u4EE3")); } try { await emitEvent(eventName, parsed); console.log(colors.green(`\u2705 \u5DF2\u6210\u529F\u89E6\u53D1\u4E8B\u4EF6 ${eventName}`)); } catch (err) { console.error(colors.red(`\u274C \u89E6\u53D1\u5931\u8D25: ${err.message}`)); process.exit(1); } }); cli.command("welcome", "\u663E\u793A\u6B22\u8FCE\u4FE1\u606F").action(() => { console.log("\n" + pc.bold(pc.cyan("\u{1F389} \u6B22\u8FCE\u4F7F\u7528 FlowLab CLI - \u4E8B\u4EF6\u5F15\u64CE\u6A21\u5757"))); console.log(pc.dim("--------------------------------------------")); console.log(pc.blue(`\u{1F4E6} \u6A21\u5757\u540D: ${package_default.name}`)); console.log(pc.green(`\u{1F527} \u7248\u672C\u53F7: v${package_default.version}`)); console.log(pc.yellow("\u{1F464} \u4F5C\u8005: Luke")); console.log(pc.magenta("\u{1F4D8} \u6587\u6863: https://github.com/countstarss/flowlab")); console.log(pc.dim("--------------------------------------------")); console.log(pc.cyan("\n\u{1F680} \u4F60\u53EF\u4EE5\u5F00\u59CB\u4F7F\u7528\u5982\u4E0B\u547D\u4EE4:")); console.log(pc.dim(` $ event emit user.signup '{"email": "test@example.com"}'`)); console.log("\n"); }); cli.parse(); //# sourceMappingURL=index.mjs.map