# pubsub
ultra-minimal pubsub module written in TypeScript
## install
```sh
pnpm add @rasch/pubsub
# or with bun
bun add @rasch/pubsub
```
## usage
```js
import { publish, subscribe, unsubscribe } from "@rasch/pubsub"
import { welcome, tryagain } from "./fakeCallbackFunctions.js"
subscribe("login", welcome)
subscribe("loginError", tryagain)
if (user.isLoggedIn()) {
publish("login", user.name)
} else {
publish("loginError", `Incorrect username "${user.name}" or password!`)
}
unsubscribe("*")
```
## api
### subscribe
```txt
subscribe :: string -> (...a -> void) -> void
```
Attach a callback function to an event.
```typescript
subscribe("event", myFunction)
```
### publish
```txt
publish :: (string, ...a) -> void
```
Run all of the functions attached to an event with the given arguments.
```typescript
publish("event", arg)
publish("event", arg1, arg2, ...)
```
### unsubscribe
```txt
unsubscribe :: (string, ((...a -> void) | undefined)) -> void
```
Stop listening for events.
```typescript
// stop listening to a single event callback function
unsubscribe("event", myFunction)
// stop listening for all callback functions on event
unsubscribe("event")
// cancel all subscriptions
unsubscribe("*")
```