Skip to content

Commit

Permalink
fix(client): Don't show $ws when not used WebSockets (#2532)
Browse files Browse the repository at this point in the history
* fix(client): Don't show `$ws` when not used ws

* test(client): add types test

* chore: format code

* chore: remove no used arg
  • Loading branch information
nakasyou authored Apr 21, 2024
1 parent 9f9a41c commit 5c9d8b4
Show file tree
Hide file tree
Showing 5 changed files with 39 additions and 16 deletions.
13 changes: 6 additions & 7 deletions deno_dist/client/types.ts
Original file line number Diff line number Diff line change
Expand Up @@ -33,14 +33,13 @@ export type ClientRequest<S extends Schema> = {
: {}
: {}
) => URL
} & {
// WebSocket
$ws: S['$get'] extends { input: { json: UpgradedWebSocketResponseInputJSONType } }
} & (S['$get'] extends { input: { json: UpgradedWebSocketResponseInputJSONType } }
? S['$get'] extends { input: infer I }
? (args?: Omit<I, 'json'>) => WebSocket
: never
: never
}
? {
$ws: (args?: Omit<I, 'json'>) => WebSocket
}
: {}
: {})

// eslint-disable-next-line @typescript-eslint/no-explicit-any
type BlankRecordToNever<T> = T extends any
Expand Down
2 changes: 1 addition & 1 deletion deno_dist/helper/websocket/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ export interface WSEvents {
onError?: (evt: Event, ws: WSContext) => void
}

export type UpgradedWebSocketResponseInputJSONType = '__websocket' | undefined
export type UpgradedWebSocketResponseInputJSONType = '__websocket'

/**
* Upgrade WebSocket Type
Expand Down
25 changes: 25 additions & 0 deletions src/client/types.test.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
import { expectTypeOf } from 'vitest'
import { Hono } from '..'
import { upgradeWebSocket } from '../helper'
import { hc } from '.'

describe('WebSockets', () => {
const app = new Hono()
.get(
'/ws',
upgradeWebSocket(() => ({}))
)
.get('/', (c) => c.json({}))
const client = hc<typeof app>('/')

it('WebSocket route', () => {
expectTypeOf(client.ws).toMatchTypeOf<{
$ws: () => WebSocket
}>()
})
it('Not WebSocket Route', () => {
expectTypeOf<
typeof client.index extends { $ws: () => WebSocket } ? false : true
>().toEqualTypeOf(true)
})
})
13 changes: 6 additions & 7 deletions src/client/types.ts
Original file line number Diff line number Diff line change
Expand Up @@ -33,14 +33,13 @@ export type ClientRequest<S extends Schema> = {
: {}
: {}
) => URL
} & {
// WebSocket
$ws: S['$get'] extends { input: { json: UpgradedWebSocketResponseInputJSONType } }
} & (S['$get'] extends { input: { json: UpgradedWebSocketResponseInputJSONType } }
? S['$get'] extends { input: infer I }
? (args?: Omit<I, 'json'>) => WebSocket
: never
: never
}
? {
$ws: (args?: Omit<I, 'json'>) => WebSocket
}
: {}
: {})

// eslint-disable-next-line @typescript-eslint/no-explicit-any
type BlankRecordToNever<T> = T extends any
Expand Down
2 changes: 1 addition & 1 deletion src/helper/websocket/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ export interface WSEvents {
onError?: (evt: Event, ws: WSContext) => void
}

export type UpgradedWebSocketResponseInputJSONType = '__websocket' | undefined
export type UpgradedWebSocketResponseInputJSONType = '__websocket'

/**
* Upgrade WebSocket Type
Expand Down

0 comments on commit 5c9d8b4

Please sign in to comment.