Typescript based Hasura GQL client for NodeJS/TS/JS apps.
- π Blazing fast GraphQL
- β‘οΈ Lightning Fast
- π Fully Typed APIs
- π οΈ Rich Features
- π¦ Optimized Build
- π₯΄ No Graphql string mess
yarn add hasura-gql-client
or
npm i hasura-gql-client
import Client from 'hasura-gql-client';
interface TestBook {
id: string;
name: string;
}
interface TestUser {
id: string;
email: string;
books: TestBook[];
book: TestBook;
}
interface Select {
test_user: TestUser;
test_book: TestBook;
}
// Insert type
interface InsertTestUser {
email: string;
}
interface InsertTestBook {
name: string;
}
interface Insert {
test_user: InsertTestUser;
test_book: InsertTestBook;
}
// Update type
interface UpdateTestUser {
email?: string;
}
interface UpdateTestBook {
name: string;
}
interface Update {
test_user: UpdateTestUser;
test_book: UpdateTestBook;
}
const client = new Client<Select, Insert, Update>({
host: process.env.HOST ?? 'err',
customHeaders: { 'x-hasura-admin-secret': process.env.X_HASURA_ADMIN_SECRET ?? 'err' },
debug: true,
});
const start = async (): Promise<void> => {
// select
const usersSelect2 = await client.select('test_user', ['id', 'book.name', 'books.id']);
console.log(usersSelect2[0]?.id);
console.log(usersSelect2[0]?.books[0].id);
console.log(usersSelect2[0]?.book.name);
// insert
const usersInsert = await client.insert('test_user', { email: 'foo@email.com', name: 'foo' }, ['id']);
console.log(usersInsert[0].id);
// update
const usersUpdate = await client.update('test_user', { email: 'foo2@email.com' }, ['id']);
console.log(usersUpdate[0].id);
};
start().catch(console.error);
See example folder for more details.