pubs-js

<p align="center"> <a href="https://circleci.com/gh/gunerkaanalkim/pubs/tree/dev"><img src="https://circleci.com/gh/gunerkaanalkim/pubs.svg?style=shield" alt="Build Status"></a> <a href="https://codecov.io/gh/gunerkaanalkim/pub-sub"><img src="http

Usage no npm install needed!

<script type="module">
  import pubsJs from 'https://cdn.skypack.dev/pubs-js';
</script>

README

Build Status

Index


Introduction

Pubs is a client-side message broker written in Typescript. The main idea is to provide state passing of web components between each other. Pubs is completely focused on component communication. To understand how the publisher/subscriber approach works, you can look at the image below.

Build Status

Pubs basically consists of three parts; Eventbus, Publisher and Subscriber. Eventbus stores topic and state. Publisher is message sender for Eventbus that can send any type of message; string, array, number etc. Subscriber is message sink for Eventbust that subscribes to messages sent with the help of a callback method.

Publisher at a glance

Publisher publish a state object to eventbus with its constructor and send method.

let pub = new Publisher({
    topic: 'topic_1',
    state: {
        name: "Patrick",
        surname: "Swayze",
        message: "R.I.P"
    }
});

Topic and state attributes can change later with setter & getter

let pub = new Publisher({
    topic: 'topic_1',
    state: {
        name: "Patrick",
        surname: "Swayze",
        message: "R.I.P"
    }
});

pub.topic = "another_topic"
pub.state = { foo: "bar" }

You can publish the state to the eventbus using the send method.

let eventbus = new Eventbus();

let pub = new Publisher({
    topic: "topic_1",
    state: {}
});

eventbus.publisher.add(pub);

// Foo
// Bar
// Tar

pub.send({
    name: "Patrick",
    surname: "Swayze",
    filmography: ["Ghost"]
});

Publisher's API

Name Type Description
topic string none
state any none

Subscriber at a glance

Subscribers listens to a topic on the eventbus using a callback method. Subscriber initialize with constructor method. Subscribers must have a unique id attribute.

let sub = new Subsciber({
    id: "sub_1",
    topic: "topic_1",
    callback: (state) => {
        console.log(state);
    }
});

Subscribers can be listen multiple topic.

let sub = new Subsciber({
    id: "sub_1",
    topic: ["topic_1", "topic_2", "topic_3"],
    callback: (state) => {
        console.log(state);
    }
});

Different subscribers can listen common topic on eventbus.

let pub_1 = new Publisher({
    topic: "topic_1",
//...

let sub_1 = new Subsciber({
    id: "sub_1",
    topic: ["topic_1"],
    callback: (state) => {
        console.log("It's sub_1");
    }
});

let sub_2 = new Subsciber({
    id: "sub_2",
    topic: ["topic_1"],
    callback: (state) => {
        console.log("It's sub_2");
    }
});

Subscribers's API

Coming soon


Eventbus at a glance

Eventbus stores topic and state. Eventbus initialize with contructor method. Eventbus have two public object; publisher & subscriber

let eventbus = new Eventbus();

Publisher Object

Publishers can register with add method of publisher object.

const eventbus = new Eventbus();

let pub_1 = new Publisher({
    topic: "topic_1",
    state: {name: "Patrick Swayze"}
});

let pub_2 = new Publisher({
    topic: "topic_2",
    state: {name: "Demi Moore"}
});

let pub_3 = new Publisher({
    topic: "topic_3",
    state: {name: "Whoopi Goldberg"}
});

eventbus.publisher.add(pub_1);
eventbus.publisher.add(pub_2);
eventbus.publisher.add(pub_3);

Subscriber Object

Subscribers can register with add method of eventbus.

const eventbus = new Eventbus();

let sub_1 = new Subsciber({
    id: "sub_1",
    topic: "topic_1",
    callback: (state) => console.log(state)
});

let sub_2 = new Subsciber({
    id: "sub_2",
    topic: "topic_2",
    callback: (state) => console.log(state)
});

let sub_3 = new Subsciber({
    id: "sub_3",
    topic: ["topic_1", "topic_2"],
    callback: (state) => console.log(state)
});

eventbus.subscriber.add(sub_1);
eventbus.subscriber.add(sub_2);
eventbus.subscriber.add(sub_3);

Eventbus's API

Coming soon


A Complete Example

Coming soon

With React

Coming soon

With Vue

Coming soon

With Angular

Coming soon