# multiserver-worker

> A multiserver plugin for Web Workers

Latest version **1.1.0** (published 2018-01-10) · MIT license · 0 weekly downloads

## Install

```sh
npm install multiserver-worker
pnpm add multiserver-worker
yarn add multiserver-worker
bun add multiserver-worker
```

## 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.1.0 |
| Published | 2018-01-10 |
| First published | 2018-01-10 |
| Weekly downloads | 0 |
| License | MIT |
| TypeScript types | none |
| Module format | CommonJS |
| Dependencies | 1 |
| Known vulnerabilities | 0 |
| Install scripts | no |
| Author | staltz.com |
| Maintainers | staltz |

## Links

- npm: https://www.npmjs.com/package/multiserver-worker
- npm.io page: https://npm.io/package/multiserver-worker

## Dependencies (1)

- [pull-worker](https://npm.io/package/pull-worker.md) ^1.1.0

## Recent versions

- 1.1.0 (latest) — 2018-01-10
- 1.0.0 — 2018-01-10

## README

# multiserver-worker

_A [multiserver](https://github.com/ssbc/multiserver) plugin for Web Workers_

```
npm install --save multiserver-worker
```

This module is a multiserver plugin which allows a Web Worker to be a server and the main JS thread to be the client. It is intended **only for UI development**, although it also supports Workers in Node.js such as those from `tiny-worker`.

## Usage

**main.js**

```js
var pull = require('pull-stream');
var MultiServer = require('multiserver');
var workerPlugin = require('multiserver-worker');

var ms = MultiServer([
  workerPlugin({ path: 'worker.js', ctor: Worker })
]);

ms.client('worker:worker.js', function(err, stream) {
  pull(
    pull.values(['alice', 'bob']),
    stream,
    pull.drain(x => {
      console.log(x); // ALICE
                      // BOB
    })
  );
});
```

**worker.js**

```js
const pull = require('pull-stream');
const MultiServer = require('multiserver');
const workerPlugin = require('multiserver-worker');

var ms = MultiServer([
  workerPlugin({ worker: self })
]);

ms.server(function(stream) {
  pull(
    stream,
    pull.map(s => s.toUpperCase()),
    stream
  );
});
```

(Note: you might need to "browserify" or "workerify" the worker.js before running it in the browser)

## Usage with [muxrpc](https://github.com/ssbc/muxrpc)

This module also supports muxrpc, but beware of the codec, use a passthrough codec `x => x`.

**main.js**

```js
// ...
ms.client('worker:worker.js', function(err, stream) {
  var manifest = {
    stuff: 'source'
  };
  var codec = x => x;
  var client = muxrpc(manifest, null, codec)();

  pull(
    client.stuff(),
    pull.drain(x => {
      console.log(x); // 2
                      // 4
                      // 6
                      // 8
    })
  );

  pull(stream, client.createStream(), stream);
});
// ...
```

**worker.js**

```js
// ...
ms.server(function(stream) {
  var manifest = {
    stuff: 'source'
  };
  var codec = x => x;
  var server = muxrpc(null, manifest, codec)({
    stuff: function() {
      return pull.values([2, 4, 6, 8]);
    }
  });

  pull(stream, server.createStream(), stream);
});
// ...
```

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