import * as http from 'node:http' import * as Fetch from './Fetch.js' describe('withTimeout', () => { test('aborts a fetch after the configured duration', async () => { const server = http.createServer(() => {}) const url = await listen(server) try { const fetch = Fetch.withTimeout(globalThis.fetch, { timeout: 10 }) await expect(fetch(url)).rejects.toMatchObject({ name: 'TimeoutError' }) } finally { server.closeAllConnections() await close(server) } }) }) describe('resolveSignal', () => { test('preserves caller and Request signals', () => { const signal = AbortSignal.timeout(1_000) const request = new Request('https://api.tempo.xyz', { signal }) expect(Fetch.resolveSignal('https://api.tempo.xyz', { init: { signal }, timeout: 10 })).toBe( signal, ) expect(Fetch.resolveSignal(request, { timeout: 10 })).toBe(request.signal) }) }) function close(server: http.Server): Promise { return new Promise((resolve, reject) => { server.close((error) => (error ? reject(error) : resolve())) }) } function listen(server: http.Server): Promise { return new Promise((resolve) => { server.listen(0, '127.0.0.1', () => { const address = server.address() if (!address || typeof address === 'string') throw new Error('Expected a TCP server address.') resolve(`http://127.0.0.1:${address.port}`) }) }) }