Skip to content

Commit 031901a

Browse files
chore(release): 🎉 2.0.0 [skip ci]
# [2.0.0](v1.14.0...v2.0.0) (2020-11-20) ### Features * **server:** Make and use with your own flavour ([#64](#64)) ([38bde87](38bde87)), closes [#61](#61) [#73](#73) [#75](#75) ### BREAKING CHANGES * **server:** You now "make" a ready-to-use server that can be used with _any_ WebSocket implementation! Summary of breaking changes: - No more `keepAlive`. The user should provide its own keep-alive implementation. _(I highly recommend [WebSocket Ping and Pongs](https://developer.mozilla.org/en-US/docs/Web/API/WebSockets_API/Writing_WebSocket_servers#Pings_and_Pongs_The_Heartbeat_of_WebSockets))_ - No more HTTP `request` in the server context. - No more WebSocket in the server context (you're the one that creates it). - You use your own WebSocket server - Server exports only `makeServer` _(no more `createServer`)_ ### Benefits - You're responsible for the server (_any_ optimisation or adjustment can be applied) - Any WebSocket server can be used (or even mocked if necessary) - You control the disposal of the server (close or transfer clients however you wish) - New `extra` field in the `Context` for storing custom values useful for callbacks - Full control of authentication flow - Full control over error handling - True zero-dependency ### Migrating from v1 **Only the server has to be migrated.** Since this release allows you to use your favourite WebSocket library (or your own implementation), using [ws](https://github.com/websockets/ws) is just one way of using `graphql-ws`. This is how to use the implementation shipped with the lib: ```ts /** * ❌ instead of the lib creating a WebSocket server internally with the provided arguments */ import https from 'https'; import { createServer } from 'graphql-ws'; const server = https.createServer(...); createServer( { onConnect(ctx) { // were previously directly on the context ctx.request as IncomingRequest ctx.socket as WebSocket }, ...rest, }, { server, path: '/graphql', }, ); /** * ✅ you have to supply the server yourself */ import https from 'https'; import ws from 'ws'; // yarn add ws import { useServer } from 'graphql-ws/lib/use/ws'; // notice the import path const server = https.createServer(...); const wsServer = new ws.Server({ server, path: '/graphql', }); useServer( { onConnect(ctx) { // are now in the `extra` field ctx.extra.request as IncomingRequest ctx.extra.socket as WebSocket }, ...rest, }, wsServer, // optional keepAlive with ping pongs (defaults to 12 seconds) ); ```
1 parent 38bde87 commit 031901a

File tree

2 files changed

+84
-1
lines changed

2 files changed

+84
-1
lines changed

CHANGELOG.md

+83
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,86 @@
1+
# [2.0.0](https://github.com/enisdenjo/graphql-ws/compare/v1.14.0...v2.0.0) (2020-11-20)
2+
3+
4+
### Features
5+
6+
* **server:** Make and use with your own flavour ([#64](https://github.com/enisdenjo/graphql-ws/issues/64)) ([38bde87](https://github.com/enisdenjo/graphql-ws/commit/38bde87122f4c39b0357c636fd98bfee886dd6e5)), closes [#61](https://github.com/enisdenjo/graphql-ws/issues/61) [#73](https://github.com/enisdenjo/graphql-ws/issues/73) [#75](https://github.com/enisdenjo/graphql-ws/issues/75)
7+
8+
9+
### BREAKING CHANGES
10+
11+
* **server:** You now "make" a ready-to-use server that can be used with _any_ WebSocket implementation!
12+
13+
Summary of breaking changes:
14+
- No more `keepAlive`. The user should provide its own keep-alive implementation. _(I highly recommend [WebSocket Ping and Pongs](https://developer.mozilla.org/en-US/docs/Web/API/WebSockets_API/Writing_WebSocket_servers#Pings_and_Pongs_The_Heartbeat_of_WebSockets))_
15+
- No more HTTP `request` in the server context.
16+
- No more WebSocket in the server context (you're the one that creates it).
17+
- You use your own WebSocket server
18+
- Server exports only `makeServer` _(no more `createServer`)_
19+
20+
### Benefits
21+
- You're responsible for the server (_any_ optimisation or adjustment can be applied)
22+
- Any WebSocket server can be used (or even mocked if necessary)
23+
- You control the disposal of the server (close or transfer clients however you wish)
24+
- New `extra` field in the `Context` for storing custom values useful for callbacks
25+
- Full control of authentication flow
26+
- Full control over error handling
27+
- True zero-dependency
28+
29+
### Migrating from v1
30+
31+
**Only the server has to be migrated.** Since this release allows you to use your favourite WebSocket library (or your own implementation), using [ws](https://github.com/websockets/ws) is just one way of using `graphql-ws`. This is how to use the implementation shipped with the lib:
32+
33+
```ts
34+
/**
35+
* ❌ instead of the lib creating a WebSocket server internally with the provided arguments
36+
*/
37+
import https from 'https';
38+
import { createServer } from 'graphql-ws';
39+
40+
const server = https.createServer(...);
41+
42+
createServer(
43+
{
44+
onConnect(ctx) {
45+
// were previously directly on the context
46+
ctx.request as IncomingRequest
47+
ctx.socket as WebSocket
48+
},
49+
...rest,
50+
},
51+
{
52+
server,
53+
path: '/graphql',
54+
},
55+
);
56+
57+
/**
58+
* ✅ you have to supply the server yourself
59+
*/
60+
import https from 'https';
61+
import ws from 'ws'; // yarn add ws
62+
import { useServer } from 'graphql-ws/lib/use/ws'; // notice the import path
63+
64+
const server = https.createServer(...);
65+
const wsServer = new ws.Server({
66+
server,
67+
path: '/graphql',
68+
});
69+
70+
useServer(
71+
{
72+
onConnect(ctx) {
73+
// are now in the `extra` field
74+
ctx.extra.request as IncomingRequest
75+
ctx.extra.socket as WebSocket
76+
},
77+
...rest,
78+
},
79+
wsServer,
80+
// optional keepAlive with ping pongs (defaults to 12 seconds)
81+
);
82+
```
83+
184
# [1.14.0](https://github.com/enisdenjo/graphql-ws/compare/v1.13.1...v1.14.0) (2020-11-15)
285

386

package.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "graphql-ws",
3-
"version": "1.14.0",
3+
"version": "2.0.0",
44
"description": "Coherent, zero-dependency, lazy, simple, GraphQL over WebSocket Protocol compliant server and client",
55
"keywords": [
66
"protocol",

0 commit comments

Comments
 (0)