# @ciklum/xmess

> 1. [Installation and usage](#installation-and-usage) 2. [Usage and API](#usage-and-api) 3. [Working with local copy of module](#working-with-local-copy-of-module) 4. [Publish a package](#publish-a-package) 5. [Links](#links)

Latest version **1.0.4** (published 2019-02-27) · ISC license · 0 weekly downloads

## Install

```sh
npm install @ciklum/xmess
pnpm add @ciklum/xmess
yarn add @ciklum/xmess
bun add @ciklum/xmess
```

## Health

**Score 15/100 (F)** — status: abandoned.

Positive: no vulnerabilities.

Warnings: low downloads; no types; no esm support.

Negative: abandoned; low maintenance score.

## Facts

| | |
|---|---|
| Version | 1.0.4 |
| Published | 2019-02-27 |
| First published | 2018-11-08 |
| Weekly downloads | 0 |
| License | ISC |
| TypeScript types | none |
| Module format | CommonJS |
| Dependencies | 0 |
| Unpacked size | 13.8 KB |
| Known vulnerabilities | 0 |
| Install scripts | no |
| Author | Ciklum Solutions JS Team |
| Maintainers | ciklum |

## Links

- npm: https://www.npmjs.com/package/@ciklum/xmess
- Repository: https://gitlab.ciklum.net/st-js/module-xmess
- npm.io page: https://npm.io/package/@ciklum/xmess

## Recent versions

- 1.0.4 (latest) — 2019-02-27
- 1.0.3 — 2019-02-14
- 1.0.2 — 2019-02-14
- 1.0.1 — 2018-12-27
- 1.0.0 — 2018-12-26
- 0.5.9 — 2018-12-19
- 0.5.8 — 2018-12-19
- 0.5.0 — 2018-11-22
- 0.5.7 — 2018-11-16
- 0.5.6 — 2018-11-08

## README

# XMESS - basic pub/sub pattern implementation
 
## Table of contents
1. [Installation and usage](#installation-and-usage)
2. [Usage and API](#usage-and-api)
3. [Working with local copy of module](#working-with-local-copy-of-module)
4. [Publish a package](#publish-a-package)
5. [Links](#links)


## Installation and usage
Set private registry by adding ```//registry.npmjs.org/:_authToken=7e1daf59-1424-4261-a14b-ab23f404c1db``` to your `.npmrc` file

Install XMESS library by running

```npm i @ciklum/xmess```

Now you can use assets provided by XMESS:

```import { Xmess } from '@ciklum/xmess' ```


## Usage and API
Module exports xmess singleton that implements basic pub/sub pattern.
Generally it is both publisher and subscriber. Every entity represented as 'channel', that stores
last emitted message from corresponding channel and has methods:
  * `subscribe`  - method to register subscriber to a specific channel. Callback function that
                invoked after publish event occurred in the current channel is a parameter to
                `subscribe` method. All data that was published, passed to callback function as an
                argument. Method returns function that unsubscribe current callback from current
                channel.

  * `subscribeWithLatest` - method to register subscriber to a specific channel and immediately fire
                callback with the last message. Callback function that invoked after publish event
                occurred in the current channel is a parameter to `subscribeWithLatestt` method. All
                All data that was published, passed to callback function as an argument. Method
                returns function that unsubscribe current callback from current channel.

  * `publish` - method to publish some data to all subscribers in current channel. Data that will be
                passed to all subscriber's callbacks in current channel, is a parameter to `publish` 
                method.
 
 Example:
 ```javascript
import { Xmess } from '@ciklum/xmess'

// Provide 'xmessId' If you want to use Xmess in conjunction with @ciklum/xmess-repeater 
const xmess = new Xmess('xmessId')
 
const unsubscribe = xmess.channel('some-channel').subscribe(data => handler(data)) 
xmess.channel('some-channel').publish({ data: 'some data' }) // handler called

// handler will be called immediately after subscription
const unsubWithLatest = xmess.channel('some-channel').subscribeWithLatest(data => handler(data))

unsubscribe() // to unsubscribe from the channel
unsubWithLatest() // to unsubscribe from the channel

xmess.destroy() // to remove all subscriptions
```


## Working with local copy of module
When you want to develop new features for module, this section will be helpful for you.
Package linking is a two-step process which solves this need.
You need [npm link](https://docs.npmjs.com/cli/link) for this.

Steps:

*  Create global link. It will be available in folder were your npm modules are.

   ``` npm link ```

* Links to the global installation target from your front end app.

   ``` npm link @ciklum/xmess ```


## Publish a package

Publish a package to the registry by running

```
npm run build
npm publish
```

## Links

* [@ciklum/xmess-repeater](https://gitlab.ciklum.net/st-js/module-xmess-repeater)

---
_Source: https://npm.io/package/@ciklum/xmess · Machine-readable twin of the npm.io package page. Health data is recomputed on every publish._
