feat(client): start to use a better eventemitter

This commit is contained in:
perfectra1n 2025-07-30 20:30:04 -07:00
parent 0fbb106668
commit 08a195edd5
4 changed files with 12 additions and 3 deletions

1
.gitignore vendored
View File

@ -9,3 +9,4 @@ readur_uploads/
readur_watch/
test-results/
uploads/
.claude/settings.local.json

View File

@ -18,6 +18,7 @@
"@types/uuid": "^10.0.0",
"axios": "^1.3.0",
"date-fns": "^4.1.0",
"eventemitter3": "^5.0.1",
"react": "^19.0.0",
"react-dom": "^19.0.0",
"react-dropzone": "^14.2.3",
@ -2785,6 +2786,12 @@
"url": "https://github.com/sponsors/sindresorhus"
}
},
"node_modules/eventemitter3": {
"version": "5.0.1",
"resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-5.0.1.tgz",
"integrity": "sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==",
"license": "MIT"
},
"node_modules/fdir": {
"version": "6.4.6",
"resolved": "https://registry.npmjs.org/fdir/-/fdir-6.4.6.tgz",

View File

@ -29,6 +29,7 @@
"@types/uuid": "^10.0.0",
"axios": "^1.3.0",
"date-fns": "^4.1.0",
"eventemitter3": "^5.0.1",
"react": "^19.0.0",
"react-dom": "^19.0.0",
"react-dropzone": "^14.2.3",

View File

@ -1,4 +1,4 @@
import { EventEmitter } from 'events';
import { EventEmitter } from 'eventemitter3';
import { SyncProgressInfo } from '../api';
export type ConnectionStatus = 'disconnected' | 'connecting' | 'connected' | 'reconnecting' | 'error' | 'failed';
@ -21,7 +21,7 @@ export interface SyncProgressEvents {
* Provides a clean interface for components to consume sync progress data
* without being coupled to WebSocket implementation details
*/
export abstract class SyncProgressManager extends EventEmitter {
export abstract class SyncProgressManager extends EventEmitter<keyof SyncProgressEvents> {
protected state: SyncProgressState = {
progressInfo: null,
connectionStatus: 'disconnected',
@ -30,7 +30,7 @@ export abstract class SyncProgressManager extends EventEmitter {
constructor() {
super();
this.setMaxListeners(20); // Prevent memory leak warnings
// EventEmitter3 doesn't have setMaxListeners, but it handles listeners efficiently
}
/**