🪄 register shared Typescript workers with AVA
npm install ava-typescript-workerAVA has a really cool feature called shared workers.
But when using TypeScript and AVA with on-the-fly transpilation with something like tsx, 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.
``bash`
npm install ava-typescript-worker --save-dev
or
`bash`
yarn add ava-typescript-worker --dev
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:
`typescript
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:
`typescript
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()await negotiateProtocol(["ava-4"]).ready()`
- Workers don't need to do protocol negotiation with
This is because TypeScript files are loaded through a Javascript "proxy" loader, which handles protocol negotiations out of necessity.