UNPKG

evt

Version:

Type safe replacement for node's EventEmitter

122 lines (99 loc) 4.74 kB
<p align="center"> <img src="https://user-images.githubusercontent.com/6702424/76674598-91ebfc00-65b1-11ea-88df-eb43f04f3cce.png"> </p> <p align="center"> 💧<i>EventEmitter's typesafe replacement</i>💧 <br> <br> <a href="https://github.com/garronej/evt/actions"> <img src="https://github.com/garronej/evt/workflows/ci/badge.svg?branch=main"> </a> <a href="https://deno.land/x/evt"> <img src="https://img.shields.io/endpoint?url=https%3A%2F%2Fdeno-visualizer.danopia.net%2Fshields%2Flatest-version%2Fx%2Fevt%2Fmod.ts"> </a> <a href="https://www.npmjs.com/package/evt"> <img src="https://img.shields.io/npm/v/evt?logo=npm"> </a> <a href="https://bundlephobia.com/package/evt"> <img src="https://img.shields.io/bundlephobia/minzip/evt"> </a> <a href="https://www.npmjs.com/package/evt"> <img src="https://img.shields.io/npm/dm/evt"> </a> <a href="https://github.com/garronej/evt/blob/main/LICENSE"> <img src="https://img.shields.io/npm/l/evt"> </a> </p> </p> <p align="center"> <a href="https://www.evt.land">Home</a> - <a href="https://docs.evt.land">Documentation</a> </p> --- `'evt'` is intended to be a replacement for `'events'`. It makes heavy use of **typescript**'s type inference features to provide **type safety** while keeping things **concise and elegant** 🍸. <b>Suitable for any JS runtime env (deno, node, old browsers, react-native ...)</b> - ✅ It is both a [Deno](https://deno.land/x/evt) and an [NPM](https://www.npmjs.com/evt) module. ( Achieved with [Denoify](https://github.com/garronej/denoify) ) - ✅ No external dependencies ([`tsafe`](https://github.com/garronej/tsafe), [`run-exclusive`](https://github.com/garronej/run_exclusive) and [`minimal-polyfills`](https://github.com/garronej/minimal_polyfills) are all from the same author as EVT). - ✅ [Makes it easy to work with events in React](https://docs.evt.land/react-hooks). Can be imported in TypeScript projects using version TypeScript >= 3.8 (February 20th, 2020) and in any plain JS projects. > NOTE: There is very few breaking changes from v1 to v2. [Check them out](https://docs.evt.land/v1-greater-than-v2). # Who is using it <p align="center"> <a href="https://connext.network"> <img src="https://user-images.githubusercontent.com/6702424/84102640-4e1e5c80-aa11-11ea-9d13-df0a65c8cdaf.png"> </a> <a href="https://www.semasim.com"> <img src="https://user-images.githubusercontent.com/6702424/84102785-aead9980-aa11-11ea-915b-5c4a5282c44e.png"> </a> <br> <a href="https://thegraph.com"> <img src="https://user-images.githubusercontent.com/6702424/179356567-19e2ca0a-9797-4c82-8a45-7e1d0de896a9.png"> </a> <a href="https://insee.fr"> <img src="https://user-images.githubusercontent.com/6702424/117936881-a9358f00-b305-11eb-84b9-e61593632bdd.png"> </a> <a href="https://www.etalab.gouv.fr/"> <img src="https://user-images.githubusercontent.com/6702424/179345089-3aee6170-e7aa-4b38-adf1-f7d132aa7be4.png"> </a> </p> # Install / Import ## In Deno: ```typescript import { Evt } from "https://deno.land/x/evt/mod.ts"; ``` ## Anywhere else: ```bash $ npm install --save evt ``` ```typescript import { Evt } from "evt"; ``` # Try it <p align="center"> <img src="https://user-images.githubusercontent.com/6702424/179363007-582acf54-8f83-42ac-a062-562f8de40d14.gif"> <a href="https://stackblitz.com/edit/evt-playground-gfnidx?file=index.ts">Playground</a> </p> # Motivations There are a lot of things that can't easily be done with `EventEmitter`: * Enforcing **type safety**. * Removing a particular listener ( if the callback is an anonymous function ). * Adding a one-time listener for the next event that meets a condition. * Waiting \(via a Promise\) for one thing or another to happen. _Example: waiting at most one second for the next message, stop waiting if the socket disconnects._ Why would someone pick EVT over RxJS: * EVT's learning curve is not as steep as RxJS's. * Generates code that is easier to grasp for people not familiar with reactive programming. EVT is an attempt to address all these points while trying to remain as accessible as `EventEmitter`. </br> <p align="center"> <a href="https://evt.land">Get Started</a> </p> # The sticker <p align="center"> <img src="https://user-images.githubusercontent.com/6702424/90626180-e3607d00-e21a-11ea-9c88-82880ac9cedf.png"> </p> <p align="center"> <a href="https://teespring.com/fr/evt-sticker">Shop</a> </p>