Effect.async + Logger.replace hangs
Test case:
This times out for me. If I comment out the
import { WebSocket } from 'ws'
jest.mock('ws')
const testProgram = Effect.scoped(
Effect.gen(function* () {
const v = yield* Effect.async<string>((resume) => {
const ws = new WebSocket('hi')
ws.on('open', () => {
resume(Effect.succeed('hi'))
})
})
return v
}).pipe(
Effect.provide(
Logger.replace(
Logger.defaultLogger,
Logger.make(({ message }) => console.log(message)),
),
),
),
)
it('establishes', async () => {
const s = Effect.runPromise(testProgram)
listenerFor('open')?.()
expect(await s).toEqual('hi')
})
const listenerFor = (event: string) => {
const call = jest
.mocked(WebSocket.prototype.on)
.mock.calls.find((c) => c[0] === event) as
| [string, (...args: unknown[]) => void]
| undefined
if (!call) return undefined
const [, listener] = call
return listener
}import { WebSocket } from 'ws'
jest.mock('ws')
const testProgram = Effect.scoped(
Effect.gen(function* () {
const v = yield* Effect.async<string>((resume) => {
const ws = new WebSocket('hi')
ws.on('open', () => {
resume(Effect.succeed('hi'))
})
})
return v
}).pipe(
Effect.provide(
Logger.replace(
Logger.defaultLogger,
Logger.make(({ message }) => console.log(message)),
),
),
),
)
it('establishes', async () => {
const s = Effect.runPromise(testProgram)
listenerFor('open')?.()
expect(await s).toEqual('hi')
})
const listenerFor = (event: string) => {
const call = jest
.mocked(WebSocket.prototype.on)
.mock.calls.find((c) => c[0] === event) as
| [string, (...args: unknown[]) => void]
| undefined
if (!call) return undefined
const [, listener] = call
return listener
}This times out for me. If I comment out the
.pipe(Effect.provide(...)).pipe(Effect.provide(...)), it passes. What could be going on here?