Skip to content

Commit

Permalink
feat: Event Emitter (#300)
Browse files Browse the repository at this point in the history
Co-authored-by: Tasso Evangelista <tasso.evangelista@rocket.chat>
  • Loading branch information
ggazzo and tassoevan committed Oct 20, 2020
1 parent c6acc40 commit 4ec074c
Show file tree
Hide file tree
Showing 23 changed files with 854 additions and 0 deletions.
2 changes: 2 additions & 0 deletions packages/emitter/.eslintignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
/node_modules
/dist
57 changes: 57 additions & 0 deletions packages/emitter/.eslintrc.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,57 @@
module.exports = {
extends: [
'plugin:@typescript-eslint/recommended',
'plugin:@typescript-eslint/eslint-recommended',
'@rocket.chat/eslint-config',
],
parser: '@typescript-eslint/parser',
parserOptions: {
sourceType: 'module',
ecmaVersion: 2018,
warnOnUnsupportedTypeScriptVersion: false,
ecmaFeatures: {
experimentalObjectRestSpread: true,
legacyDecorators: true,
},
},
plugins: ['@typescript-eslint', 'react-hooks'],
rules: {
'func-call-spacing': 'off',
'indent': 'off',
'import/order': ['error', {
'newlines-between': 'always',
groups: ['builtin', 'external', 'internal', ['parent', 'sibling', 'index']],
}],
'no-useless-constructor': 'off',
'no-empty-function': 'off',
'no-spaced-func': 'off',
'react-hooks/rules-of-hooks': 'error',
'react-hooks/exhaustive-deps': 'warn',
'@typescript-eslint/ban-ts-ignore': 'off',
'@typescript-eslint/func-call-spacing': ['error'],
'@typescript-eslint/indent': ['error', 2],
'@typescript-eslint/no-explicit-any': 'off',
'@typescript-eslint/interface-name-prefix': 'off',
'@typescript-eslint/explicit-function-return-type': ['warn', {
allowExpressions: true,
}],
},
env: {
browser: true,
commonjs: true,
es6: true,
node: true,
jest: true
},
settings: {
'import/resolver': {
node: {
extensions: [
'.js',
'.ts',
'.tsx'
],
},
},
},
};
2 changes: 2 additions & 0 deletions packages/emitter/.gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
/node_modules
/dist
6 changes: 6 additions & 0 deletions packages/emitter/.lintstagedrc.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
{
"src/**/*.js": [
"eslint --fix",
"git add"
]
}
Empty file added packages/emitter/CHANGELOG.md
Empty file.
185 changes: 185 additions & 0 deletions packages/emitter/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,185 @@
<p align="center">
<a href="https://rocket.chat" title="Rocket.Chat">
<img src="https://user-images.githubusercontent.com/2263066/87240777-f5b4f300-c3f2-11ea-8a01-cc58fdf9a99a.png" alt="Rocket.Chat" />
</a>
</p>

# @rocket.chat/emitter

> Event emitter built by Rocket.Chat
![License: MIT](https://img.shields.io/github/license/RocketChat/Rocket.Chat.Fuselage?style=flat-square)

![Issues](https://img.shields.io/github/issues/RocketChat/Rocket.Chat.Fuselage/%F0%9F%93%A6%20fuselage-hooks?style=flat-square)
![Pull requests](https://img.shields.io/github/issues-pr/RocketChat/Rocket.Chat.Fuselage/%F0%9F%93%A6%20fuselage-hooks?style=flat-square)
![GitHub commit activity](https://img.shields.io/github/commit-activity/m/RocketChat/Rocket.Chat.Fuselage?style=flat-square)

![npm@latest](https://img.shields.io/npm/v/@rocket.chat/fuselage-emitter/latest?style=flat-square)
![npm@next](https://img.shields.io/npm/v/@rocket.chat/fuselage-emitter/next?style=flat-square)
![dev deps](https://img.shields.io/david/dev/RocketChat/Rocket.Chat.Fuselage?path=packages%2Ffuselage-emitter&style=flat-square)
![optional deps](https://img.shields.io/david/optional/RocketChat/Rocket.Chat.Fuselage?path=packages%2Ffuselage-emitter&style=flat-square)
![peer deps](https://img.shields.io/david/peer/RocketChat/Rocket.Chat.Fuselage?path=packages%2Ffuselage-emitter&style=flat-square)
![npm bundle size](https://img.shields.io/bundlephobia/min/@rocket.chat/fuselage-emitter?style=flat-square)
![npm downloads](https://img.shields.io/npm/dw/@rocket.chat/fuselage-emitter?style=flat-square)
![npm collaborators](https://img.shields.io/npm/collaborators/@rocket.chat/fuselage-emitter?style=flat-square)

## Install

```sh
yarn add @rocket.chat/emitter
```

## API Reference

<!-- Generated by documentation.js. Update this documentation by updating the source code. -->

#### Table of Contents

- [Emitter](#emitter)
- [has](#has)
- [Parameters](#parameters)
- [on](#on)
- [Parameters](#parameters-1)
- [once](#once)
- [Parameters](#parameters-2)
- [off](#off)
- [Parameters](#parameters-3)
- [emit](#emit)
- [Parameters](#parameters-4)
- [Emitter](#emitter-1)
- [has](#has-1)
- [Parameters](#parameters-5)
- [on](#on-1)
- [Parameters](#parameters-6)
- [once](#once-1)
- [Parameters](#parameters-7)
- [off](#off-1)
- [Parameters](#parameters-8)
- [emit](#emit-1)
- [Parameters](#parameters-9)
- [EventType](#eventtype)
- [Handler](#handler)

### Emitter

#### has

Returns `true` if this emmiter has a listener attached to the `key` event type

##### Parameters

- `key` **[EventType](#eventtype)**

Returns **[boolean](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Boolean)**

#### on

Adds the `handler` function to listen events of the `type` type.

##### Parameters

- `type` **[EventType](#eventtype)**
- `handler` **[Handler](#handler)&lt;T>**

Returns **OffCallbackHandler** a function to unsubscribe the handler invoking `this.off(type, handler)`

#### once

Adds a _one-time_ `handler` function for the event of the `type` type.

##### Parameters

- `type` **[EventType](#eventtype)**
- `handler` **[Handler](#handler)&lt;T>**

Returns **OffCallbackHandler** a function to unsubscribe the handler invoking `this.off(type, handler)`

#### off

Removes the specified `handler` from the list of handlers of the event of the `type` type

##### Parameters

- `type` **[EventType](#eventtype)**
- `handler` **[Handler](#handler)&lt;T>**

Returns **void**

#### emit

Calls each of the handlers registered for the event of `type` type, in the
order they were registered, passing the supplied argument `e` to each.

##### Parameters

- `type` **[EventType](#eventtype)**
- `e` **T**

Returns **void**

### Emitter

The event emitter class.

#### has

Returns `true` if this emmiter has a listener attached to the `key` event type

##### Parameters

- `key` **[EventType](#eventtype)**

Returns **[boolean](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Boolean)**

#### on

Adds the `handler` function to listen events of the `type` type.

##### Parameters

- `type` **[EventType](#eventtype)**
- `handler` **[Handler](#handler)&lt;T>**

Returns **OffCallbackHandler** a function to unsubscribe the handler invoking `this.off(type, handler)`

#### once

Adds a _one-time_ `handler` function for the event of the `type` type.

##### Parameters

- `type` **[EventType](#eventtype)**
- `handler` **[Handler](#handler)&lt;T>**

Returns **OffCallbackHandler** a function to unsubscribe the handler invoking `this.off(type, handler)`

#### off

Removes the specified `handler` from the list of handlers of the event of the `type` type

##### Parameters

- `type` **[EventType](#eventtype)**
- `handler` **[Handler](#handler)&lt;T>**

Returns **void**

#### emit

Calls each of the handlers registered for the event of `type` type, in the
order they were registered, passing the supplied argument `e` to each.

##### Parameters

- `type` **[EventType](#eventtype)**
- `e` **T**

Returns **void**

### EventType

Type: ([string](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/String) \| [symbol](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Symbol))

### Handler

Type: function (event: T): void
33 changes: 33 additions & 0 deletions packages/emitter/api-extractor.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
{
"$schema": "https://developer.microsoft.com/json-schemas/api-extractor/v7/api-extractor.schema.json",
"mainEntryPointFilePath": "<projectFolder>/dist/index.d.ts",
"bundledPackages": [],
"compiler": {},
"apiReport": {
"enabled": false
},
"docModel": {
"enabled": true
},
"dtsRollup": {
"enabled": false
},
"tsdocMetadata": {},
"messages": {
"compilerMessageReporting": {
"default": {
"logLevel": "warning"
}
},
"extractorMessageReporting": {
"default": {
"logLevel": "warning"
}
},
"tsdocMessageReporting": {
"default": {
"logLevel": "warning"
}
}
}
}
23 changes: 23 additions & 0 deletions packages/emitter/docs/emitter.emitter.emit.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
<!-- Do not edit this file. It is automatically generated by API Documenter. -->

[Home](./index.md) &gt; [@rocket.chat/emitter](./emitter.md) &gt; [Emitter](./emitter.emitter.md) &gt; [emit](./emitter.emitter.emit.md)

## Emitter.emit() method

<b>Signature:</b>

```typescript
emit<T = any>(type: EventType, event?: T): void;
```
## Parameters
| Parameter | Type | Description |
| --- | --- | --- |
| type | [EventType](./emitter.eventtype.md) | |
| event | T | |
<b>Returns:</b>
void
24 changes: 24 additions & 0 deletions packages/emitter/docs/emitter.emitter.has.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
<!-- Do not edit this file. It is automatically generated by API Documenter. -->

[Home](./index.md) &gt; [@rocket.chat/emitter](./emitter.md) &gt; [Emitter](./emitter.emitter.md) &gt; [has](./emitter.emitter.has.md)

## Emitter.has() method

Returns `true` if this emmiter has a listener attached to the `key` event type

<b>Signature:</b>

```typescript
has(key: EventType): boolean;
```

## Parameters

| Parameter | Type | Description |
| --- | --- | --- |
| key | [EventType](./emitter.eventtype.md) | |

<b>Returns:</b>

boolean

22 changes: 22 additions & 0 deletions packages/emitter/docs/emitter.emitter.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
<!-- Do not edit this file. It is automatically generated by API Documenter. -->

[Home](./index.md) &gt; [@rocket.chat/emitter](./emitter.md) &gt; [Emitter](./emitter.emitter.md)

## Emitter interface


<b>Signature:</b>

```typescript
export interface Emitter
```

## Methods

| Method | Description |
| --- | --- |
| [emit(type, event)](./emitter.emitter.emit.md) | |
| [off(type, handler)](./emitter.emitter.off.md) | |
| [on(type, handler)](./emitter.emitter.on.md) | |
| [once(type, handler)](./emitter.emitter.once.md) | |

23 changes: 23 additions & 0 deletions packages/emitter/docs/emitter.emitter.off.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
<!-- Do not edit this file. It is automatically generated by API Documenter. -->

[Home](./index.md) &gt; [@rocket.chat/emitter](./emitter.md) &gt; [Emitter](./emitter.emitter.md) &gt; [off](./emitter.emitter.off.md)

## Emitter.off() method

<b>Signature:</b>

```typescript
off<T = any>(type: EventType, handler: Handler<T>): void;
```
## Parameters
| Parameter | Type | Description |
| --- | --- | --- |
| type | [EventType](./emitter.eventtype.md) | |
| handler | [Handler](./emitter.handler.md)<!-- -->&lt;T&gt; | |
<b>Returns:</b>
void
Loading

0 comments on commit 4ec074c

Please sign in to comment.