npm.io
3.0.0 • Published yesterday

funcwork

Licence
MIT
Version
3.0.0
Deps
0
Size
43 kB
Vulns
0
Weekly
0
Stars
7

FuncWork

npm version CI License: MIT

Run pure functions in Web Worker easily. Add functions to a Web Worker dynamically — no preset worker files, no build config.

Why

Web Workers are powerful but verbose: you need a separate file, bundler wiring, message-passing boilerplate, and request/response id matching. FuncWork removes all of it — pass a function, get a Promise.

Install

npm i funcwork

Usage

import { FuncWork } from 'funcwork'

const fw = new FuncWork()

function fib(n) {
  return n <= 1 ? n : fib(n - 1) + fib(n - 2)
}

fw.add(fib)

// Runs inside a Web Worker — the main thread stays free
const result = await fw.invoke(fib, [30])
console.log(result) // 832040
Multiple functions & chaining
fw.add(add, sub)
   .add(function mul(a, b) { return a * b })
Invoke by name or reference
await fw.invoke('add', [1, 2]) // 3
await fw.invoke(add, [1, 2])   // 3
Async functions

The resolved value of a returned Promise is awaited automatically:

async function fetchJson(url) {
  const res = await fetch(url)
  return res.json()
}

fw.add(fetchJson)
const data = await fw.invoke(fetchJson, ['https://api.example.com/data'])
Error handling

Errors thrown inside the Worker reject the invocation Promise:

try {
  await fw.invoke(riskyFn)
} catch (err) {
  console.error(err.message)
}
Lifecycle
fw.list()    // 'fib | add | sub'
fw.remove(add)
fw.clear()
fw.destroy() // terminate the Worker and release resources

See the API Reference for details.

Constraints

Functions are serialized via Function.prototype.toString() and re-created inside the Worker, so they must be:

  • Named — declared as function name() (anonymous arrows cannot be registered)
  • Pure — no closure over outer variables
  • Connected only through arguments and return value
  • Dependent only on globals available inside a Worker (fetch, self, etc.)

Development

pnpm install

pnpm test          # run tests (vitest)
pnpm lint          # eslint
pnpm typecheck     # tsc
pnpm build         # build library (ESM / CJS / IIFE + types)

pnpm docs:dev      # docs site with live demo
pnpm docs:build    # build docs site

Built with Vite (Rolldown-powered), tested with Vitest, documented with VitePress. Docs deploy to GitHub Pages on every push to master.

License

MIT

Keywords