@yume-chan/event
Advanced tools
Comparing version 0.0.16 to 0.0.17
@@ -5,2 +5,8 @@ { | ||
{ | ||
"version": "0.0.17", | ||
"tag": "@yume-chan/event_v0.0.17", | ||
"date": "Tue, 18 Oct 2022 09:32:30 GMT", | ||
"comments": {} | ||
}, | ||
{ | ||
"version": "0.0.16", | ||
@@ -7,0 +13,0 @@ "tag": "@yume-chan/event_v0.0.16", |
# Change Log - @yume-chan/event | ||
This log was last generated on Sat, 28 May 2022 03:56:37 GMT and should not be manually modified. | ||
This log was last generated on Tue, 18 Oct 2022 09:32:30 GMT and should not be manually modified. | ||
## 0.0.17 | ||
Tue, 18 Oct 2022 09:32:30 GMT | ||
_Version update only_ | ||
## 0.0.16 | ||
@@ -6,0 +11,0 @@ Sat, 28 May 2022 03:56:37 GMT |
{ | ||
"name": "@yume-chan/event", | ||
"version": "0.0.16", | ||
"version": "0.0.17", | ||
"description": "Event/EventEmitter", | ||
@@ -16,3 +16,3 @@ "keywords": [ | ||
}, | ||
"homepage": "https://github.com/yume-chan/ya-webadb/tree/master/libraries/event#readme", | ||
"homepage": "https://github.com/yume-chan/ya-webadb/tree/main/libraries/event#readme", | ||
"repository": { | ||
@@ -30,8 +30,8 @@ "type": "git", | ||
"dependencies": { | ||
"@yume-chan/async": "^2.1.4", | ||
"tslib": "^2.3.1" | ||
"@yume-chan/async": "^2.2.0", | ||
"tslib": "^2.4.0" | ||
}, | ||
"devDependencies": { | ||
"jest": "^28.1.0", | ||
"typescript": "4.7.2", | ||
"jest": "^28.1.2", | ||
"typescript": "^4.7.4", | ||
"@yume-chan/ts-package-builder": "^1.0.0" | ||
@@ -43,4 +43,3 @@ }, | ||
"//test": "jest --coverage" | ||
}, | ||
"readme": "# @yume-chan/event\n\nProvides a strongly-typed EventEmitter/Event implementation.\n\nInspired by TypeScript, Visual Studio Code, and more.\n\n- [Disposable](#disposable)\n- [AutoDisposable](#autodisposable)\n- [DisposableList](#disposablelist)\n- [EventEmitter/Event](#eventemitterevent)\n\n## Disposable\n\n```ts\ninterface Disposable {\n dispose(): void;\n}\n```\n\nRepresents anything that need cleanup before the garbage collector recycle it.\n\n## AutoDisposable\n\n```ts\nclass AutoDisposable implements Disposable {\n private disposables;\n constructor();\n protected addDisposable<T extends Disposable>(disposable: T): T;\n dispose(): void;\n}\n```\n\nA base class for objects that need to manage multiple `Disposable`s.\n\nCalling `dispose` on it will automatically dispose all `Disposable`s added via `addDisposable`.\n\nUsually works like:\n\n```ts\nclass MyObject extends AutoDisposable {\n private event1 = this.addDisposable(new EventEmitter<void>());\n\n private event2 = this.addDisposable(new EventEmitter<void>());\n\n public dispose() {\n // If the derived class has its own dispose logic\n // Don't forget to call super's `dispose`\n super.dispose();\n\n // Clean up itself.\n }\n}\n```\n\n## DisposableList\n\n```ts\nclass DisposableList extends AutoDisposable {\n add<T extends Disposable>(disposable: T): T;\n}\n```\n\nAn `AutoDisposable` that can be used alone (i.e. not as a base class).\n\n## EventEmitter/Event\n\n```ts\ninterface EventListener<TEvent, TThis, TArgs extends unknown[], TResult> {\n (this: TThis, e: TEvent, ...args: TArgs): TResult;\n}\n\ninterface RemoveEventListener extends Disposable {\n (): void;\n}\n\ninterface Event<TEvent, TResult = unknown> {\n (listener: EventListener<TEvent, unknown, [], TResult>): RemoveEventListener;\n <TThis, TArgs extends unknown[]>(listener: EventListener<TEvent, TThis, TArgs, TResult>, thisArg: TThis, ...args: TArgs): RemoveEventListener;\n}\n\nclass EventEmitter<TEvent, TResult = unknown> implements Disposable {\n protected readonly listeners: EventListenerInfo<TEvent, TResult>[];\n constructor();\n protected addEventListener(info: EventListenerInfo<TEvent, TResult>): RemoveEventListener;\n event: Event<TEvent, TResult>;\n fire(e: TEvent): void;\n dispose(): void;\n}\n\n```\n\n| | Node.js `EventEmitter` | This `EventEmitter` |\n| ----------------------------------- | ---------------------- | ------------------- |\n| Can emit multiple event types | Yes | No |\n| Only trusted source can emit events | No | Yes |\n| Strongly-typed | No | Yes |\n\nOne `EventEmitter` for one event type. So for classes that have multiple event types, multiple `EventEmitter` can be created and assigned to multiple fields.\n\nUsually classes keep `EventEmitter`s private (using TypeScript's `private` modifier, or ECMAScript private field), only expose the `Event` interface (via `EventEmitter.event`).\n\nEveryone can subscribe to the event using the `Event` interface, but the event can only be emitted from the `EventEmitter` class.\n\n```ts\nconst emitter = new EventEmitter<void>();\nconst subscribe = emitter.event;\nconst unsubscribe = subscribe(() => {});\nemitter.fire();\nunsubscribe();\n```\n\nThe returned `unsubscribe` is both a function and a `Disposable`, so it can be used with `AutoDisposable` or `DisposableList`.\n" | ||
} | ||
} |
302
20955
Updated@yume-chan/async@^2.2.0
Updatedtslib@^2.4.0