Skip to content

nextcloud-libraries/nextcloud-event-bus

Repository files navigation

@nextcloud/event-bus

REUSE status Build Status Code coverage npm Documentation

A simple event bus to communicate between Nextcloud components.

Installation

npm install @nextcloud/event-bus --save
yarn add @nextcloud/event-bus

Usage

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:
declare module '@nextcloud/event-bus' {
	interface NextcloudEvents {
		'example-app:awesomeness:increased': { level: number }
	}
}

export {}
  1. Now if you use any of the event bus functions, the parameters will automatically be typed correctly:
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

npm install

npm run build
npm run test

Requirements