https://github.com/nextcloud-libraries/nextcloud-event-bus
A event bus to communicate between Nextcloud components https://npmjs.org/@nextcloud/event-bus
https://github.com/nextcloud-libraries/nextcloud-event-bus
eventbus events nextcloud-plugin
Last synced: 8 months ago
JSON representation
A event bus to communicate between Nextcloud components https://npmjs.org/@nextcloud/event-bus
- Host: GitHub
- URL: https://github.com/nextcloud-libraries/nextcloud-event-bus
- Owner: nextcloud-libraries
- License: other
- Created: 2019-09-20T12:38:29.000Z (over 6 years ago)
- Default Branch: main
- Last Pushed: 2024-10-26T01:54:17.000Z (over 1 year ago)
- Last Synced: 2024-10-29T20:55:27.531Z (over 1 year ago)
- Topics: eventbus, events, nextcloud-plugin
- Language: TypeScript
- Homepage: https://nextcloud-libraries.github.io/nextcloud-event-bus/
- Size: 3.64 MB
- Stars: 5
- Watchers: 3
- Forks: 3
- Open Issues: 3
-
Metadata Files:
- Readme: README.md
- Changelog: CHANGELOG.md
- License: LICENSE
Awesome Lists containing this project
README
# @nextcloud/event-bus
[](https://api.reuse.software/info/github.com/nextcloud-libraries/nextcloud-event-bus)
[](https://github.com/nextcloud/nextcloud-event-bus/actions/workflows/node.yml?query=branch%3Amaster) [](https://app.codecov.io/gh/nextcloud/nextcloud-event-bus) [](https://www.npmjs.com/package/@nextcloud/event-bus)
[](https://nextcloud.github.io/nextcloud-event-bus/)
A simple event bus to communicate between Nextcloud components.
## Installation
```sh
npm install @nextcloud/event-bus --save
```
```sh
yarn add @nextcloud/event-bus
```
## Usage
```js
import { emit, subscribe, unsubscribe } from '@nextcloud/event-bus'
const h = (e) => console.info(e)
subscribe('a', h)
subscribe('b', h)
emit('a', {
data: 123,
})
unsubscribe('a', h)
unsubscribe('b', h)
```
### Typed events
It is also possible to type events, which allows type infering on the event-bus methods like `emit`, `subscribe` and `unsubscribe`.
To register new events, simply extend the `NextcloudEvents` interface:
1. Create a file like `event-bus.d.ts`:
```ts
declare module '@nextcloud/event-bus' {
interface NextcloudEvents {
'example-app:awesomeness:increased': { level: number }
}
}
export {}
```
2. Now if you use any of the event bus functions, the parameters will automatically be typed correctly:
```ts
import { subscribe } from '@nextcloud/event-bus'
subscribe('example-app:awesomeness:increased', (event) => {
// "event" automatically infers type { level: number}
console.log(event.level)
})
```
## Naming convention
To stay consistent, we encourage you to use the following syntax when declaring events
`app-id:object:verb`
### Examples:
- `nextcloud:unified-search:closed`
- `files:node:uploading`
- `files:node:uploaded`
- `files:node:deleted`
- `contacts:contact:deleted`
- `calendar:event:created`
- `forms:answer:updated`
## Development
```sh
npm install
npm run build
npm run test
```
### Requirements
- [Node 20 or higher](https://nodejs.org/en/download/)
- [NPM 10 or higher](https://www.npmjs.com/package/npm)