Skip to content

Commit 725ebcd

Browse files
authored
fix: properly handle ws browser export (#474) (#476)
1 parent 5db9d37 commit 725ebcd

File tree

8 files changed

+1721
-1515
lines changed

8 files changed

+1721
-1515
lines changed

package-lock.json

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

package.json

Lines changed: 16 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -38,29 +38,29 @@
3838
"ci": "run-s test coverage"
3939
},
4040
"dependencies": {
41-
"@supabase/node-fetch": "^2.6.14",
41+
"@supabase/node-fetch": "^2.6.13",
4242
"@types/phoenix": "^1.6.6",
43-
"@types/ws": "^8.5.14",
44-
"ws": "^8.18.0"
43+
"@types/ws": "^8.18.1",
44+
"ws": "^8.18.2"
4545
},
4646
"devDependencies": {
47-
"@arethetypeswrong/cli": "^0.16.2",
48-
"@types/sinon": "^17.0.3",
49-
"@vitest/coverage-v8": "^2.1.9",
50-
"eslint": "^7.0.0",
47+
"@arethetypeswrong/cli": "^0.16.4",
48+
"@types/sinon": "^17.0.4",
49+
"@vitest/coverage-v8": "^3.1.4",
50+
"eslint": "^9.27.0",
5151
"esm": "^3.2.25",
5252
"jsdom": "^16.7.0",
5353
"jsdom-global": "3.0.0",
5454
"jsonwebtoken": "^9.0.2",
5555
"mock-socket": "^9.3.1",
5656
"npm-run-all": "^4.1.5",
5757
"nyc": "^15.1.0",
58-
"prettier": "^2.1.2",
58+
"prettier": "^2.8.8",
5959
"semantic-release-plugin-update-version-in-files": "^1.1.0",
60-
"sinon": "^18.0.0",
61-
"typedoc": "^0.27.6",
62-
"typescript": "^5.7.3",
63-
"vitest": "^2.1.9",
60+
"sinon": "^18.0.1",
61+
"typedoc": "^0.27.9",
62+
"typescript": "^5.8.3",
63+
"vitest": "^3.1.4",
6464
"web-worker": "1.2.0"
6565
},
6666
"exports": {
@@ -69,8 +69,10 @@
6969
"require": "./dist/main/index.js"
7070
},
7171
"./websocket": {
72-
"node": "./src/node.js",
73-
"default": "./src/native.js"
72+
"node": "./dist/WebSocket.js",
73+
"browser": "./dist/WebSocket.native.js",
74+
"types": "./dist/WebSocket.d.ts",
75+
"default": "./dist/WebSocket.native.js"
7476
}
7577
}
7678
}

pnpm-lock.yaml

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

src/RealtimeClient.ts

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,6 @@ import Timer from './lib/timer'
1717
import { httpEndpointURL } from './lib/transformers'
1818
import RealtimeChannel from './RealtimeChannel'
1919
import type { RealtimeChannelOptions } from './RealtimeChannel'
20-
import Push from './lib/push'
2120

2221
type Fetch = typeof fetch
2322

@@ -214,9 +213,16 @@ export default class RealtimeClient {
214213
this.transport = WebSocket
215214
}
216215
if (this.transport) {
217-
this.conn = new this.transport(this.endpointURL(), undefined, {
218-
headers: this.headers,
219-
})
216+
// Detect if using the native browser WebSocket
217+
const isBrowser =
218+
typeof window !== 'undefined' && this.transport === window.WebSocket
219+
if (isBrowser) {
220+
this.conn = new this.transport(this.endpointURL())
221+
} else {
222+
this.conn = new this.transport(this.endpointURL(), undefined, {
223+
headers: this.headers,
224+
})
225+
}
220226
this.setupConnection()
221227
return
222228
}

src/WebSocket.browser.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
// Browser WebSocket implementation
2+
const WebSocketImpl = window.WebSocket
3+
4+
export default WebSocketImpl

src/WebSocket.native.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
// Native/browser WebSocket entry point
2-
const NativeWebSocket = typeof WebSocket !== 'undefined' ? WebSocket : undefined
1+
// React Native/Expo WebSocket implementation
2+
const WebSocketImpl = global.WebSocket
33

4-
export default NativeWebSocket
4+
export default WebSocketImpl

src/WebSocket.node.ts

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
// Node.js WebSocket implementation
2+
let WebSocketImpl: any
3+
4+
// eslint-disable-next-line @typescript-eslint/no-var-requires
5+
WebSocketImpl = require('ws')
6+
7+
export default WebSocketImpl

src/WebSocket.ts

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,14 @@
11
// Node.js WebSocket entry point
2-
import WebSocket from 'ws'
32

4-
export default WebSocket
3+
let WebSocketImpl: any
4+
5+
if (typeof window === 'undefined') {
6+
// Node.js environment
7+
// eslint-disable-next-line @typescript-eslint/no-var-requires
8+
WebSocketImpl = require('ws')
9+
} else {
10+
// Browser environment
11+
WebSocketImpl = window.WebSocket
12+
}
13+
14+
export default WebSocketImpl

0 commit comments

Comments
 (0)