UNPKG

@flowlab/event

Version:

FlowLab event-driven system

194 lines (186 loc) 6.22 kB
#!/usr/bin/env node "use strict"; var __create = Object.create; var __defProp = Object.defineProperty; var __getOwnPropDesc = Object.getOwnPropertyDescriptor; var __getOwnPropNames = Object.getOwnPropertyNames; var __getProtoOf = Object.getPrototypeOf; var __hasOwnProp = Object.prototype.hasOwnProperty; var __copyProps = (to, from, except, desc) => { if (from && typeof from === "object" || typeof from === "function") { for (let key of __getOwnPropNames(from)) if (!__hasOwnProp.call(to, key) && key !== except) __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); } return to; }; var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps( // If the importer is in node compatibility mode or this is not an ESM // file that has been converted to a CommonJS file using a Babel- // compatible transform (i.e. "__esModule" has not been set), then set // "default" to the CommonJS "module.exports" for node compatibility. isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target, mod )); // src/api/emitEvents.ts async function emitEvent(event, payload, bus) { await bus.emit(event, payload); } // 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); } /** * 启动事件监听(由子类实现) */ // abstract start(): Promise<void>; start() { return Promise.resolve(); } /** * 停止事件监听(由子类实现) */ // abstract stop(): Promise<void>; stop() { return Promise.resolve(); } }; // 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(); // src/cli/index.ts var import_cac = require("cac"); var import_picocolors = __toESM(require("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: "node build.js && tsc --emitDeclarationOnly --declaration --skipLibCheck --outDir dist", 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", esbuild: "^0.25.1", 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 var import_picocolors2 = __toESM(require("picocolors")); var cli = (0, import_cac.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(import_picocolors.default.cyan(` \u{1F680} \u6B63\u5728\u89E6\u53D1\u4E8B\u4EF6: ${import_picocolors.default.bold(eventName)} `)); let parsed = {}; try { parsed = JSON.parse(data); } catch (e) { console.warn(import_picocolors.default.yellow("\u26A0\uFE0F \u53C2\u6570\u4E0D\u662F\u6709\u6548 JSON\uFF0C\u4F7F\u7528\u7A7A\u5BF9\u8C61\u66FF\u4EE3")); } try { await emitEvent(eventName, parsed, options); console.log(import_picocolors.default.green(`\u2705 \u5DF2\u6210\u529F\u89E6\u53D1\u4E8B\u4EF6 ${eventName}`)); } catch (err) { console.error(import_picocolors.default.red(`\u274C \u89E6\u53D1\u5931\u8D25: ${err.message}`)); process.exit(1); } }); cli.command("welcome", "\u663E\u793A\u6B22\u8FCE\u4FE1\u606F").action(() => { console.log("\n" + import_picocolors2.default.bold(import_picocolors2.default.cyan("\u{1F389} \u6B22\u8FCE\u4F7F\u7528 FlowLab CLI - \u4E8B\u4EF6\u5F15\u64CE\u6A21\u5757"))); console.log(import_picocolors2.default.dim("--------------------------------------------")); console.log(import_picocolors2.default.blue(`\u{1F4E6} \u6A21\u5757\u540D: ${package_default.name}`)); console.log(import_picocolors2.default.green(`\u{1F527} \u7248\u672C\u53F7: v${package_default.version}`)); console.log(import_picocolors2.default.yellow("\u{1F464} \u4F5C\u8005: Luke")); console.log(import_picocolors2.default.magenta("\u{1F4D8} \u6587\u6863: https://github.com/countstarss/flowlab")); console.log(import_picocolors2.default.dim("--------------------------------------------")); console.log("\n"); }); cli.parse(); //# sourceMappingURL=index.js.map