typed-worker
Install
npm i typed-worker
Usage
Create a worker.ts
:
import { handleActions } from "typed-worker"
export const actions = {
async sum(a: number, b: number) {
await someHeavyOperation()
return a + b
},
}
export type Actions = typeof actions
handleActions(actions)
In your app.ts
where you want to use the worker:
import { createWorker } from "typed-worker"
import { type Actions } from "./worker"
const worker = createWorker<Actions>(
// Require a bundler like Vite, webpack etc
() =>
new Worker(new URL("./worker.ts", import.meta.url), {
type: "module",
}),
)
const result = await worker.run("sum", 1, 2)
expect(result).toBe(3)
To use the worker.ts
in an iframe instead of a web worker, you only need to return the iframe
element in createWorker
instead:
const iframe = createWorker<Actions>(
() => document.querySelector<HTMLIframeElement>("#your-iframe-element")!,
)
const result = await iframe.run("sum", 1, 2)
Error handling
Errors thrown in the worker will be re-thrown when you call the .run
method:
worker.run("some-problematic-action").catch((err) => {
// err is the error thrown in the worker
})
Sponsors
License
MIT Β© EGOIST