t3-code-android-nightly/.repos/effect-smol/packages/platform/node/test/NodeWorkerRunner.test.ts
Julius Marminge 6f9cea00ae
chore(refs): sync Effect and Alchemy references to 4.0.1 and beta.80 (#16170)
Co-authored-by: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-10-05 13:22:30 -07:00

31 lines
1.2 KiB
TypeScript

import * as NodeWorker from "@effect/platform-node/NodeWorker"
import { assert, describe, it } from "@effect/vitest"
import * as Deferred from "effect/Deferred"
import * as Effect from "effect/Effect"
import * as Queue from "effect/Queue"
import * as Worker from "effect/workers/Worker"
import { Worker as NativeWorker } from "node:worker_threads"
const fixture = new URL("./fixtures/worker-runner.ts", import.meta.url)
describe("NodeWorkerRunner", () => {
it.live("sendUnsafe preserves reply payloads", () =>
Effect.scoped(
Effect.gen(function*() {
const replies = yield* Queue.unbounded<unknown>()
const ready = yield* Deferred.make<void>()
const native = new NativeWorker(fixture, { execArgv: [] })
const worker = yield* Worker.WorkerPlatform.use((platform) => platform.spawn<unknown, void>(0)).pipe(
Effect.provide(NodeWorker.layer(() => native))
)
yield* worker.run((reply) => Queue.offer(replies, reply), {
onSpawn: Deferred.succeed(ready, undefined)
}).pipe(Effect.forkScoped)
yield* Deferred.await(ready)
yield* worker.send(undefined)
assert.deepStrictEqual(yield* Queue.take(replies), { value: 42 })
})
), { timeout: 20_000 })
})