Skip to content

Commit 5da4b41

Browse files
committed
Update to support Deno 2
1 parent af40516 commit 5da4b41

File tree

6 files changed

+123
-217
lines changed

6 files changed

+123
-217
lines changed

deno.lock

Lines changed: 72 additions & 66 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

e2e_test.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import { describe, it } from 'jsr:@std/testing@0.225.3/bdd'
22
import { makeFetch } from './mod.ts'
3-
import { GraphQLHTTP } from 'https://deno.land/x/gql@2.0.2/mod.ts'
3+
import { GraphQLHTTP } from 'https://deno.land/x/gql@3.0.1/mod.ts'
44
import { buildSchema } from 'npm:graphql@16.8.1'
55

66
describe('e2e', () => {

example.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
import { makeFetch } from './mod.ts'
2-
import { Handler } from './types.ts'
32

4-
const handler: Handler = (req) => {
3+
const handler: Deno.ServeHandler = (req) => {
54
const url = new URL(req.url).pathname
65
if (url === '/') return new Response('hello')
76
else if (url === '/status') {
@@ -11,7 +10,8 @@ const handler: Handler = (req) => {
1110
status: 418,
1211
headers: { 'Coffee-Allowed': 'No' },
1312
})
14-
} else return new Response('Not Found', { status: 404 })
13+
}
14+
return new Response('Not Found', { status: 404 })
1515
}
1616

1717
const fetch = makeFetch(handler)

mod.ts

Lines changed: 9 additions & 52 deletions
Original file line numberDiff line numberDiff line change
@@ -1,32 +1,10 @@
11
import { assertEquals, assertMatch, parseMediaType } from './deps.ts'
22
import type {
33
FetchFunction,
4-
Handler,
54
HandlerOrListener,
65
MakeFetchResponse,
76
} from './types.ts'
87

9-
// credit - 'https://deno.land/x/free_port@v1.2.0/mod.ts'
10-
function random(min: number, max: number): number {
11-
return Math.round(Math.random() * (max - min)) + min
12-
}
13-
14-
// credit - 'https://deno.land/x/free_port@v1.2.0/mod.ts'
15-
const getFreeListener = (
16-
port: number,
17-
): { listener: Deno.Listener; port: number } => {
18-
try {
19-
const listener = Deno.listen({ port: port })
20-
return { listener, port }
21-
} catch (error) {
22-
if (error instanceof Deno.errors.AddrInUse) {
23-
const newPort = random(1024, 49151)
24-
return getFreeListener(newPort)
25-
}
26-
}
27-
throw new Error('Unable to get free port')
28-
}
29-
308
const fetchEndpoint = async (
319
port: number,
3210
url: string | URL,
@@ -44,52 +22,31 @@ const fetchEndpoint = async (
4422
return { res, data }
4523
}
4624
const makeFetchPromise = (handlerOrListener: HandlerOrListener) => {
47-
if ('rid' in handlerOrListener && 'adr' in handlerOrListener) {
25+
if ('addr' in handlerOrListener) {
4826
// this might never get invoked because of Deno's blocking issue
4927

50-
const port = (handlerOrListener.addr as Deno.NetAddr).port
28+
const port = handlerOrListener.addr.port
5129
if (!port) {
5230
throw new Error('Port cannot be found')
5331
}
54-
const resp = async (url: URL | string = '', params?: RequestInit) => {
55-
const p = new Promise<{ res: Response; data?: unknown }>((resolve) => {
32+
const resp = (url: URL | string = '', params?: RequestInit) => {
33+
return new Promise<{ res: Response; data?: unknown }>((resolve) => {
5634
setTimeout(async () => {
5735
const { res, data } = await fetchEndpoint(port, url, params)
5836
resolve({ res, data })
59-
Deno.close(conn.rid + 1)
60-
handlerOrListener.close()
37+
return handlerOrListener.shutdown()
6138
})
6239
})
63-
const conn = await handlerOrListener.accept()
64-
return p
6540
}
6641
return { resp, port }
6742
} else {
68-
const { listener, port } = getFreeListener(random(1024, 49151))
69-
const serve = async (conn: Deno.Conn) => {
70-
const requests = Deno.serveHttp(conn)
71-
const { request, respondWith } = (await requests.nextRequest())!
72-
73-
const response = await (handlerOrListener as Handler)(request, conn)
74-
if (response) {
75-
respondWith(response)
76-
}
77-
}
78-
43+
const server = Deno.serve({ port: 0 }, handlerOrListener)
7944
const resp = async (url: URL | string = '', params?: RequestInit) => {
80-
const connector = async () => {
81-
const conn = await listener.accept()
82-
await serve(conn)
83-
return conn
84-
}
85-
const connection = connector()
86-
const res = await fetchEndpoint(port, url, params)
87-
await connection
88-
.then((con) => Deno.close(con.rid + 1))
89-
.finally(() => listener.close())
45+
const res = await fetchEndpoint(server.addr.port, url, params)
46+
await server.shutdown()
9047
return res
9148
}
92-
return { resp, port }
49+
return { resp, port: server.addr.port }
9350
}
9451
}
9552

0 commit comments

Comments
 (0)