Skip to content

Commit 6907a36

Browse files
authored
fix: don't fail if graphql-ws is not installed (#79)
* fix: don't fail if graphql-ws is not installed * fix linter
1 parent f429fb3 commit 6907a36

File tree

2 files changed

+12
-13
lines changed

2 files changed

+12
-13
lines changed

examples/websocket.ts

+2-2
Original file line numberDiff line numberDiff line change
@@ -64,7 +64,7 @@ app.use(
6464
'/ws',
6565
startServerAndCreateH3Handler(apollo, {
6666
websocket: {
67-
...defineGraphqlWebSocket({ schema }),
67+
...(await defineGraphqlWebSocket({ schema })),
6868
error(peer, error) {
6969
console.error('[ws] error', peer, error)
7070
// In a real app, you would want to properly log this error
@@ -90,7 +90,7 @@ app.use(
9090
app.use(
9191
'/_ws',
9292
defineWebSocketHandler({
93-
...defineGraphqlWebSocket({ schema }),
93+
...(await defineGraphqlWebSocket({ schema })),
9494
error(peer, error) {
9595
console.log('[ws] error', peer, error)
9696
},

src/websocket.ts

+10-11
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,4 @@
1-
import {
2-
makeServer,
3-
ServerOptions,
4-
ConnectionInitMessage,
5-
GRAPHQL_TRANSPORT_WS_PROTOCOL,
6-
} from 'graphql-ws'
1+
import type { ServerOptions, ConnectionInitMessage } from 'graphql-ws'
72
import {
83
defineWebSocket,
94
defineWebSocketHandler,
@@ -43,10 +38,14 @@ interface Client {
4338
* Use this over {@link defineGraphqlWebSocketHandler} if you need more control over the WebSocket server or
4439
* if you want to add custom hooks (e.g. for authentication or logging).
4540
*/
46-
export function defineGraphqlWebSocket<
41+
export async function defineGraphqlWebSocket<
4742
P extends ConnectionInitMessage['payload'] = ConnectionInitMessage['payload'],
4843
E extends Record<PropertyKey, unknown> = Record<PropertyKey, never>,
49-
>(options: ServerOptions<P, Extra & Partial<E>>): Partial<Hooks> {
44+
>(options: ServerOptions<P, Extra & Partial<E>>): Promise<Partial<Hooks>> {
45+
// Local import since graphql-ws is only an optional peer dependency
46+
const { makeServer, GRAPHQL_TRANSPORT_WS_PROTOCOL } = await import(
47+
'graphql-ws'
48+
)
5049
const server = makeServer(options)
5150
const peers = new WeakMap<Peer, Client>()
5251
return defineWebSocket({
@@ -103,11 +102,11 @@ export function defineGraphqlWebSocket<
103102
*
104103
* @category Server/h3
105104
*/
106-
export function defineGraphqlWebSocketHandler<
105+
export async function defineGraphqlWebSocketHandler<
107106
P extends ConnectionInitMessage['payload'] = ConnectionInitMessage['payload'],
108107
E extends Record<PropertyKey, unknown> = Record<PropertyKey, never>,
109108
>(
110109
options: ServerOptions<P, Extra & Partial<E>>,
111-
): EventHandler<EventHandlerRequest, never> {
112-
return defineWebSocketHandler(defineGraphqlWebSocket(options))
110+
): Promise<EventHandler<EventHandlerRequest, never>> {
111+
return defineWebSocketHandler(await defineGraphqlWebSocket(options))
113112
}

0 commit comments

Comments
 (0)