ava-typescript-worker

🪄 register shared Typescript workers with AVA

Downloads in past

Stats

StarsIssuesVersionUpdatedCreatedSize
ava-typescript-worker
101.1.07 months agoa year agoMinified + gzip package size for ava-typescript-worker in KB

Readme

ava-typescript-worker
AVA has a really cool feature called shared workers.
But when using TypeScript and AVA with on-the-fly transpilation with something like esbuild-register, loaded worker files are not transpiled--meaning you're limited to just using Javascript.
This library fixes that and allows you to register and load TypeScript workers.

Installation

npm install ava-typescript-worker --save-dev

or
yarn add ava-typescript-worker --dev

Usage

For the most part, shared workers behave identically with a few differences.
Here's an example of what a worker might look like:
test.ts:
import test from "ava"
import { registerSharedTypeScriptWorker } from "ava-typescript-worker"
import path from "path"

const worker = registerSharedTypeScriptWorker({
  filename: path.resolve("echo.worker.ts"),
})

test("is worker available", async (t) => {
  await worker.available()
  t.pass()
})

echo.worker.ts:
import { SharedWorker } from "ava/plugin"

const echo = async (protocol: SharedWorker.Protocol) => {
  for await (const msg of protocol.subscribe()) {
    msg.reply(msg.data)
  }
}

export default echo

Notice that:
  • supportedProtocols cannot be passed as an option to registerSharedTypeScriptWorker()
  • Workers don't need to do protocol negotiation with await negotiateProtocol(["ava-4"]).ready()

This is because TypeScript files are loaded through a Javascript "proxy" loader, which handles protocol negotiations out of necessity.