@dafengzhen/event-bus 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,49 @@
1
+ type EventMap = Record<string, unknown>;
2
+ type Listener<Payload> = Payload extends void ? () => void : (payload: Payload) => void;
3
+ type AnyListener<E extends EventMap> = <K extends keyof E>(event: K, payload: E[K]) => void;
4
+ type PatternKind = 'star' | 'prefix' | 'param';
5
+ type Pattern<_K extends string> = '*' | `${string}:*` | `${string}{${string}}${string}`;
6
+ type PatternToKeyShape<P extends string> = P extends '*' ? string : P extends `${infer Prefix}:*` ? `${Prefix}:${string}` | Prefix : P extends `${infer A}{${string}}${infer B}` ? `${A}${string}${B}` : never;
7
+ type MatchKeys<Keys extends string, P extends Pattern<Keys>> = Extract<Keys, PatternToKeyShape<P>>;
8
+ type EmitContext<E extends EventMap, K extends keyof E> = {
9
+ readonly blocked: boolean;
10
+ readonly event: K;
11
+ readonly payload: E[K];
12
+ readonly matched: readonly PatternListenerInfo<E>[];
13
+ readonly meta: Record<string, unknown>;
14
+ block(): void;
15
+ };
16
+ type Middleware<E extends EventMap> = <K extends keyof E>(ctx: EmitContext<E, K>, next: () => Promise<void>) => Promise<void> | void;
17
+ type PatternMiddleware<E extends EventMap> = (ctx: EmitContext<E, keyof E>, next: () => Promise<void>) => Promise<void> | void;
18
+ type PatternListenerInfo<E extends EventMap> = {
19
+ readonly kind: PatternKind;
20
+ readonly once?: boolean;
21
+ readonly priority: number;
22
+ readonly prefix?: string;
23
+ readonly handler: (event: keyof E, payload: E[keyof E]) => void;
24
+ };
25
+ type PatternOptions = {
26
+ once?: boolean;
27
+ priority?: number;
28
+ };
29
+ /**
30
+ * EventBus.
31
+ *
32
+ * @author dafengzhen
33
+ */
34
+ export class EventBus<E extends EventMap> {
35
+ clear(event?: keyof E): void;
36
+ on<K extends keyof E>(event: K, listener: Listener<E[K]>): () => void;
37
+ off<K extends keyof E>(event: K, listener: Listener<E[K]>): void;
38
+ once<K extends keyof E>(event: K, listener: Listener<E[K]>): () => void;
39
+ onAny(listener: AnyListener<E>): () => void;
40
+ use(mw: Middleware<E>): () => void;
41
+ usePattern(mw: PatternMiddleware<E>): () => void;
42
+ onPattern<P extends Pattern<Extract<keyof E, string>>>(pattern: P, handler: <K extends keyof E & MatchKeys<Extract<keyof E, string>, P>>(event: K, payload: E[K], params?: Record<string, string>) => void, options?: PatternOptions): () => void;
43
+ oncePattern<P extends Pattern<Extract<keyof E, string>>>(pattern: P, handler: <K extends keyof E & MatchKeys<Extract<keyof E, string>, P>>(event: K, payload: E[K], params?: Record<string, string>) => void, options?: Omit<PatternOptions, 'once'>): () => void;
44
+ listenerCount(event: keyof E): number;
45
+ emit<K extends keyof E>(event: K, ...args: E[K] extends void ? [] : [payload: E[K]]): void;
46
+ emitAsync<K extends keyof E>(event: K, ...args: E[K] extends void ? [] : [payload: E[K]]): Promise<void>;
47
+ }
48
+
49
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"mappings":"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","sources":["src/src/types.ts","src/src/event-bus.ts","src/src/index.ts","src/index.ts"],"sourcesContent":[null,null,null,"import { EventBus } from './event-bus.ts';\nimport * as Types from './types.ts';\n\nexport { EventBus, Types };\n"],"names":[],"version":3,"file":"index.d.ts.map"}
package/package.json ADDED
@@ -0,0 +1,160 @@
1
+ {
2
+ "name": "@dafengzhen/event-bus",
3
+ "version": "0.1.0",
4
+ "description": "A lightweight TypeScript event bus with strong typing, middleware pipeline, and pattern-based event listeners.",
5
+ "keywords": [
6
+ "event-bus",
7
+ "event-emitter",
8
+ "events",
9
+ "middleware",
10
+ "observer",
11
+ "pattern-matching",
12
+ "pubsub",
13
+ "typed",
14
+ "typescript"
15
+ ],
16
+ "homepage": "https://github.com/dafengzhen/event-bus#readme",
17
+ "bugs": {
18
+ "url": "https://github.com/dafengzhen/event-bus/issues"
19
+ },
20
+ "license": "MIT",
21
+ "author": "dafengzhen",
22
+ "repository": {
23
+ "type": "git",
24
+ "url": "git+https://github.com/dafengzhen/event-bus.git"
25
+ },
26
+ "source": "./src/index.ts",
27
+ "files": [
28
+ "dist"
29
+ ],
30
+ "type": "module",
31
+ "types": "./dist/types/index.d.ts",
32
+ "exports": {
33
+ ".": {
34
+ "import": {
35
+ "default": "./dist/esm/modern/index.js"
36
+ },
37
+ "require": {
38
+ "default": "./dist/cjs/modern/index.js"
39
+ }
40
+ }
41
+ },
42
+ "scripts": {
43
+ "build": "parcel build",
44
+ "prepare": "husky install",
45
+ "test": "jest",
46
+ "watch": "parcel watch",
47
+ "fmt": "oxfmt",
48
+ "fmt:check": "oxfmt --check",
49
+ "lint": "oxlint",
50
+ "lint:fix": "oxlint --fix",
51
+ "lint:fmt": "npm run lint:fix && npm run fmt"
52
+ },
53
+ "dependencies": {
54
+ "@swc/helpers": "^0.5.18",
55
+ "browserslist-config-baseline": "^0.5.0"
56
+ },
57
+ "devDependencies": {
58
+ "@babel/core": "^7.28.6",
59
+ "@babel/preset-env": "^7.28.6",
60
+ "@babel/preset-typescript": "^7.28.5",
61
+ "@commitlint/cli": "^20.3.1",
62
+ "@commitlint/config-conventional": "^20.3.1",
63
+ "@commitlint/prompt-cli": "^20.3.1",
64
+ "@jest/globals": "^30.2.0",
65
+ "@parcel/packager-ts": "^2.16.3",
66
+ "@parcel/transformer-typescript-types": "^2.16.3",
67
+ "@types/node": "^25.0.10",
68
+ "babel-jest": "^30.2.0",
69
+ "husky": "^9.1.7",
70
+ "jest": "^30.2.0",
71
+ "jest-environment-jsdom": "^30.2.0",
72
+ "oxfmt": "^0.26.0",
73
+ "oxlint": "^1.41.0",
74
+ "parcel": "^2.16.3",
75
+ "ts-node": "^10.9.2",
76
+ "typescript": "^5.9.3"
77
+ },
78
+ "lint-staged": {
79
+ "*.{js,jsx,ts,tsx,mjs,cjs}": "npm run lint",
80
+ "*": "npm run fmt --no-error-on-unmatched-pattern"
81
+ },
82
+ "targets": {
83
+ "legacy-cjs": {
84
+ "distDir": "./dist/cjs/legacy",
85
+ "engines": {
86
+ "browsers": ">0.3%, Chrome >= 87, ChromeAndroid >= 87, Edge >= 87, Firefox >= 83, FirefoxAndroid >= 83, Safari >= 14, iOS >= 14"
87
+ },
88
+ "includeNodeModules": true,
89
+ "isLibrary": true,
90
+ "optimize": true,
91
+ "outputFormat": "commonjs",
92
+ "sourceMap": true
93
+ },
94
+ "legacy-cjs-dev": {
95
+ "distDir": "./dist/cjs/legacy-dev",
96
+ "engines": {
97
+ "browsers": ">0.3%, Chrome >= 87, ChromeAndroid >= 87, Edge >= 87, Firefox >= 83, FirefoxAndroid >= 83, Safari >= 14, iOS >= 14"
98
+ },
99
+ "includeNodeModules": true,
100
+ "isLibrary": true,
101
+ "optimize": false,
102
+ "outputFormat": "commonjs",
103
+ "sourceMap": true
104
+ },
105
+ "legacy-esm": {
106
+ "distDir": "./dist/esm/legacy",
107
+ "engines": {
108
+ "browsers": ">0.3%, Chrome >= 87, ChromeAndroid >= 87, Edge >= 87, Firefox >= 83, FirefoxAndroid >= 83, Safari >= 14, iOS >= 14"
109
+ },
110
+ "includeNodeModules": true,
111
+ "isLibrary": true,
112
+ "optimize": true,
113
+ "outputFormat": "esmodule",
114
+ "sourceMap": true
115
+ },
116
+ "legacy-esm-dev": {
117
+ "distDir": "./dist/esm/legacy-dev",
118
+ "engines": {
119
+ "browsers": ">0.3%, Chrome >= 87, ChromeAndroid >= 87, Edge >= 87, Firefox >= 83, FirefoxAndroid >= 83, Safari >= 14, iOS >= 14"
120
+ },
121
+ "includeNodeModules": true,
122
+ "isLibrary": true,
123
+ "optimize": false,
124
+ "outputFormat": "esmodule",
125
+ "sourceMap": true
126
+ },
127
+ "modern-cjs": {
128
+ "distDir": "./dist/cjs/modern",
129
+ "includeNodeModules": true,
130
+ "isLibrary": true,
131
+ "optimize": true,
132
+ "outputFormat": "commonjs",
133
+ "sourceMap": true
134
+ },
135
+ "modern-cjs-dev": {
136
+ "distDir": "./dist/cjs/modern-dev",
137
+ "includeNodeModules": true,
138
+ "isLibrary": true,
139
+ "optimize": false,
140
+ "outputFormat": "commonjs",
141
+ "sourceMap": true
142
+ },
143
+ "modern-esm": {
144
+ "distDir": "./dist/esm/modern",
145
+ "includeNodeModules": true,
146
+ "isLibrary": true,
147
+ "optimize": true,
148
+ "outputFormat": "esmodule",
149
+ "sourceMap": true
150
+ },
151
+ "modern-esm-dev": {
152
+ "distDir": "./dist/esm/modern-dev",
153
+ "includeNodeModules": true,
154
+ "isLibrary": true,
155
+ "optimize": false,
156
+ "outputFormat": "esmodule",
157
+ "sourceMap": true
158
+ }
159
+ }
160
+ }