@graphql-ez/client
v0.6.2
Published
Fully feature GraphQL Client for Node.js
Downloads
595
Readme
@graphql-ez/client
Fully feature GraphQL Client for Node.js
Features
- [x] @graphql-typed-document-node support
- [x] High performance HTTP/s using undici
- [x] graphql-ws support
- [x] Legacy subscriptions-transport-ws support
- [x] Defer and Stream support
- [x] graphql-helix SSE support
- [x] GraphQL Upload support
By default if you only use the traditional GraphQL over HTTP, any other external dependency is not imported
Usage
import { EZClient } from '@graphql-ez/client';
export const ezClient = EZClient({
endpoint: 'http://localhost:8080/api/graphql',
});
HTTP
await ezClient.query('query($n: Int!) { hello(n: $n) }', {
variables: {
n: 10,
},
// "POST" by default
method: 'GET',
});
await ezClient.mutation('mutation { hello }', {
headers: {
authorization: 'foo',
},
});
// Automatically throw if any error is returned
await ezClient.assertedQuery('mutation { hello }', {
// ...
});
Websockets
graphql-ws
const { iterator, unsubscribe } = ezClient.websockets.subscribe('subscription{ping}');
for await (const value of iterator) {
console.log(value);
}
await unsubscribe();
(await ezClient.websockets.client).dispose();
Legacy subscriptions-transport-ws
const { iterator, unsubscribe } = ezClient.websockets.legacy.subscribe('subscription{ping}');
for await (const value of iterator) {
console.log(value);
}
await unsubscribe();
(await ezClient.websockets.legacy.client).close();
Defer and Stream
const { iterator } = ezClient.stream('{stream @stream(initialCount: 1)}');
let i = 0;
for await (const value of iterator) {
switch (++i) {
case 1:
expect(value).toContain(`{"data":{"stream":["A"]},"hasNext":true}`);
break;
case 2:
expect(value).toContain(`{"data":"B","path":["stream",1],"hasNext":true}`);
break;
case 3:
expect(value).toContain(`{"data":"C","path":["stream",2],"hasNext":true}`);
break;
}
}
SSE
const { iterator, unsubscribe } = ezClient.sseSubscribe('subscription{ping}');
for await (const value of iterator) {
console.log(value);
}
await unsubscribe();
GraphQL Upload
const { data, errors } = await ezClient.uploadQuery('mutation($file: Upload!) { uploadFile(file:$file) }', {
variables: {
file: Buffer.from('hello-world'),
},
});
LICENSE
MIT