# event-kit

> Simple library for implementing and consuming evented APIs

Latest version **2.5.3** (published 2018-11-14) · MIT license · 0 weekly downloads

## Install

```sh
npm install event-kit
pnpm add event-kit
yarn add event-kit
bun add event-kit
```

## Health

**Score 23/100 (F)** — status: abandoned.

Positive: has types package; no vulnerabilities; high quality score.

Warnings: low downloads; no esm support.

Negative: abandoned; low maintenance score.

## Facts

| | |
|---|---|
| Version | 2.5.3 |
| Published | 2018-11-14 |
| First published | 2014-08-27 |
| Weekly downloads | 0 |
| License | MIT |
| TypeScript types | separate (@types/event-kit) |
| Module format | CommonJS |
| Dependencies | 0 |
| Unpacked size | 37.1 KB |
| Known vulnerabilities | 0 |
| Install scripts | no |
| GitHub stars | 93 |
| Maintainers | atom-team, benogle, binarymuse, kevinsawicki, maxbrunsfeld, nathansobo, zcbenz |

## Links

- npm: https://www.npmjs.com/package/event-kit
- Repository: https://github.com/atom/event-kit
- Homepage: https://github.com/atom/event-kit#readme
- Issues: https://github.com/atom/event-kit/issues
- npm.io page: https://npm.io/package/event-kit

## Recent versions

- 2.5.3 (latest) — 2018-11-14
- 2.5.2 — 2018-10-23
- 2.5.1 — 2018-09-14
- 2.5.0 — 2018-05-17
- 2.4.0 — 2017-09-12
- 2.3.0 — 2017-04-11
- 2.2.0 — 2016-10-05
- 2.1.0 — 2016-08-08
- 2.0.0 — 2015-12-31
- 1.5.0 — 2015-12-21
- 1.4.1 — 2015-10-09
- 1.3.0 — 2015-08-26
- 1.2.0 — 2015-05-19
- 1.1.1 — 2015-05-07
- 1.1.0 — 2015-04-02
- … 17 more at https://npm.io/package/event-kit/versions

## README

# event-kit
[![OS X Build Status](https://travis-ci.org/atom/event-kit.svg?branch=master)](https://travis-ci.org/atom/event-kit) [![Windows Build Status](https://ci.appveyor.com/api/projects/status/lb32q70204lpmlxo/branch/master?svg=true)](https://ci.appveyor.com/project/Atom/event-kit/branch/master) [![Dependency Status](https://david-dm.org/atom/event-kit.svg)](https://david-dm.org/atom/event-kit)

This is a simple library for implementing event subscription APIs.

## Implementing Event Subscription APIs

```js
const {Emitter} = require('event-kit')

class User {
  constructor() {
    this.emitter = new Emitter()
  }

  onDidChangeName(callback) {
    this.emitter.on('did-change-name', callback)
  }

  setName(name) {
    if (name !== this.name) {
      this.name = name
      this.emitter.emit('did-change-name', name)
    }

    return this.name
  }

  destroy() {
    this.emitter.dispose()
  }
}
```

In the example above, we implement `::onDidChangeName` on the user object, which
will register callbacks to be invoked whenever the user's name changes. To do
so, we make use of an internal `Emitter` instance. We use `::on` to subscribe
the given callback in `::onDidChangeName`, and `::emit` in `::setName` to notify
subscribers. Finally, when the `User` instance is destroyed we call `::dispose`
on the emitter to unsubscribe all subscribers.

## Consuming Event Subscription APIs

`Emitter::on` returns a `Disposable` instance, which has a `::dispose` method.
To unsubscribe, simply call dispose on the returned object.

```js
const subscription = user.onDidChangeName((name) => console.log(`My name is ${name}`))
// Later, to unsubscribe...
subscription.dispose()
```

You can also use `CompositeDisposable` to combine disposable instances together.

```js
const {CompositeDisposable} = require('event-kit')

const subscriptions = new CompositeDisposable()
subscriptions.add(user1.onDidChangeName((name) => console.log(`User 1: ${name}`))
subscriptions.add(user2.onDidChangeName((name) => console.log(`User 2: ${name}`))

// Later, to unsubscribe from *both*...
subscriptions.dispose()
```

## Creating Your Own Disposables

Disposables are convenient ways to represent a resource you will no longer
need at some point. You can instantiate a disposable with an action to take when
no longer needed.

```js
const {Disposable} = require('event-kit')

const disposable = new Disposable(() => this.destroyResource())
```

---
_Source: https://npm.io/package/event-kit · Machine-readable twin of the npm.io package page. Health data is recomputed on every publish._
