https://github.com/rwv/browser-web-worker
👷 Run Web Workers in Node.js using a real Chrome browser via Puppeteer.
https://github.com/rwv/browser-web-worker
web-workers worker
Last synced: about 1 year ago
JSON representation
👷 Run Web Workers in Node.js using a real Chrome browser via Puppeteer.
- Host: GitHub
- URL: https://github.com/rwv/browser-web-worker
- Owner: rwv
- License: mit
- Created: 2024-11-11T13:17:20.000Z (over 1 year ago)
- Default Branch: main
- Last Pushed: 2025-04-10T14:56:15.000Z (about 1 year ago)
- Last Synced: 2025-04-19T23:49:36.171Z (about 1 year ago)
- Topics: web-workers, worker
- Language: TypeScript
- Homepage: https://www.npmjs.com/package/browser-web-worker
- Size: 274 KB
- Stars: 0
- Watchers: 0
- Forks: 0
- Open Issues: 5
-
Metadata Files:
- Readme: README.md
- Changelog: CHANGELOG.md
- License: LICENSE
Awesome Lists containing this project
README
# Browser Web Worker
[](https://github.com/rwv/browser-web-worker/actions/workflows/build.yml)
[](https://www.npmjs.com/package/browser-web-worker)
[](https://github.com/rwv/browser-web-worker/blob/main/LICENSE)
Run Web Workers in Node.js using a real Chrome browser via Puppeteer.
## Features
- Create Web Workers from strings, files, or URLs
- Full Web Worker API support including message passing
- Event handling (message, error, etc.)
- Built on top of Puppeteer for real browser compatibility
- TypeScript support
- Comprehensive test coverage
## Installation
```bash
pnpm add browser-web-worker puppeteer
```
## Usage
### Basic Example
```typescript
import { createWorkerFromString } from "browser-web-worker";
import puppeteer from "puppeteer";
// Launch browser
const browser = await puppeteer.launch();
const page = await browser.newPage();
await page.goto("about:blank");
// Create a worker from a string
const workerScript = `self.addEventListener('message', (event) => { self.postMessage(event.data); });`;
const worker = await createWorkerFromString(workerScript, page);
// Set up message handler
worker.onmessage = (event) => {
console.log("Received:", event.data);
};
// Send a message to the worker
worker.postMessage({ hello: "world" });
// Clean up
await worker.terminate();
await browser.close();
```
### Creating Workers
You can create workers in three ways:
```typescript
import {
createWorkerFromString,
createWorkerFromFile,
createWorkerFromURL,
} from "browser-web-worker";
// 1. From a string
const worker1 = await createWorkerFromString(workerScript, page);
// 2. From a file
const worker2 = await createWorkerFromFile("./path/to/worker.js", page);
// 3. From a URL, make sure the worker url is the same origin as the page
const worker3 = await createWorkerFromURL(
"https://example.com/worker.js",
page,
);
```
## TODOs
- Fix origin check to allow worker from `file://` scheme and handle cross-origin worker scripts securely
- Add support for transferable objects in postMessage (Blob, ArrayBuffer, MessagePort, etc.)
- Implement proper worker termination with cleanup of all resources and event listeners
- Add examples for common use cases in documentation
## License
MIT