@flowlab/event
Version:
FlowLab event-driven system
194 lines (186 loc) • 6.22 kB
JavaScript
;
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