# wwbridge

> Web Worker Bridge

Latest version **1.0.2** (published 2021-03-02) · MIT license · 0 weekly downloads

## Install

```sh
npm install wwbridge
pnpm add wwbridge
yarn add wwbridge
bun add wwbridge
```

## 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.2 |
| Published | 2021-03-02 |
| First published | 2021-03-02 |
| Weekly downloads | 0 |
| License | MIT |
| TypeScript types | none |
| Module format | CommonJS |
| Dependencies | 0 |
| Unpacked size | 37.4 KB |
| Known vulnerabilities | 0 |
| Install scripts | no |
| Author | Ben Timby |
| Maintainers | bentimby |

## Links

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

## Recent versions

- 1.0.2 (latest) — 2021-03-02
- 1.0.1 — 2021-03-02
- 1.0.0 — 2021-03-02

## README

[![Build Status](https://travis-ci.org/btimby/wwbridge.svg?branch=master)](https://travis-ci.org/btimby/wwbridge)

# wwbridge
Web worker bridge. 

This library's goal is to make working with a web worker as easy as working with any JavaScript module. It aims to handle all of the complexities. You write a module that contains all of the functions you want to run in your worker. Along with all of the functions the worker needs to call in the UI thread. The `Wwb` class wil then build proxy functions for each function. Calling the proxy will invoke the corresponding function on the other side of the worker boundary. The class also starts the worker automatically.

All function are converted to Promises, as their return values must be passed using `postMessage()`. The global init() function is called in the frontend and backend. There is also a `foreground.init()` and `background.init()`. State is NOT shared between foreground and background. While `this` is available, you should take care because foreground and background have separate state.

## Demo.

To run the demo, run `make demo`. 100 Promises will be started, some in the foreground and some in the background. You will see results in the `<pre>` area as Promises complete.

## Example.

```javascript
// MyWorker.js

const Wwb = require('wwbridge.js');


const MyWorker = new Wwb({
  // The URL to this script:
  script: 'myworker.js',

  init() {
    // This is called in the frontend and backend.
  },

  foreground: {
    init() {
      // This is called in the foreground.
    },

    async fore1() {
      return await this.fore2();
    },

    async fore2() {
    },
  },

  background: {
    init() {
      // This is called in the background.
    },

    async back1() {
      return await this.fore1();
    },

    async back2() {
    },
  },
});


module.exports = {
    MyWorker,
};
```

![MyWorker Diagram](diagram.png)


To use the above worker, you can include the script in a script tag, or import into your UI code like this:

```javascript
// MyUI.js

const MyWorker = require('MyWorker.js');

// This function will be called directly within your UI thread.
MyWorker
    .fore1()
    .then(console.log)
    .catch(console.error);

// This function will be proxied to the worker thread. The result will be returned as usual,
// and any exception will be re-thrown with the original line number, stack trace etc.
MyWorker
    .back1()
    .then(console.log)
    .catch(console.error);

```

## Limitations / notes.

 - Parameters and return values must be JSON serializable.
 - No memory is shared between the worker and front end. Thus singletons and global instances are not shared.
 - `init()` functions are called on both sides of the barrier, thus state is NOT shared between frontend and backend instances.

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