gobserver

A simple implementation of the observer pattern.


Keywords
observer, pattern, publisher, subscriber
License
MIT
Install
npm install gobserver@2.0.1

Documentation

gobserver

Build status Coverage License

A simple implementation of the observer pattern.


Supported browsers

es5 compliant browsers with a Map polyfill.


Installing

When using yarn:

yarn add gobserver

When using npm:

npm install gobserver

When using a script tag:

<script src="gobserver.js"></script>

Importing

When using TypeScript or es2015 modules:

import * as gobserver from "gobserver";

// or

import { create } from "gobserver";

When using CommonJS:

const gobserver = require("gobserver");

When using AMD:

define(["gobserver"], (gobserver) => {
  // code goes here
})

Creating

When using JavaScipt:

const observer = gobserver.create();

When using TypeScript:

type Event = {
  data: any
};

const observer = gobserver.create<Event>();

Subscribing / Publishing

Subscribing:

type Event = {
  data: any
};

const observer = gobserver.create<Event>();
const handler = (evt: Event) => {
  console.log(evt.data);
}

observer.subscribe(handler);

Publishing:

observer.publish({ data: 12 });

Unsubscribing:

observer.unsubscribe(handler);

Pipe / Unpipe

Pipe events from one observer to another:

type Event = {
  data: any
};

const observer = gobserver.create<Event>();
const pipedObserver = gobserver.create<Event>();

pipedObserver.subscribe((evt: Event) => {
  console.log(evt.data); // 12
});

observer.pipe(pipedObserver);
observer.publish({ data: 12 })

Unpipe both observers:

observer.unpipe(pipedObserver);

Chaining

type Event = {
  data: any
};

const observer = gobserver.create<Event>();
const pipedObserver = gobserver.create<Event>();
const handler = (evt: Event) => {
  console.log(evt.data);
}

observer
  .subscribe((evt: Event) => {
    console.log(evt.data);    
  })
  .subscribe(handler)
  .pipe(pipedObserver)
  .publish({ data: 12 });

License

This project is licensed under the MIT License - see the LICENSE.md file for details.