Skip to content

Typescript based Hasura GQL client for NodeJS/TS/JS apps πŸš€

License

Notifications You must be signed in to change notification settings

JaLe29/hasura-gql-client

Repository files navigation

πŸ’€πŸ’€πŸ’€πŸ’€πŸ’€ this project is not maintained anymore πŸ’€πŸ’€πŸ’€πŸ’€πŸ’€

hasura-gql-client

Typescript based Hasura GQL client for NodeJS/TS/JS apps.

npm version

hasura-gql-client image

  • πŸš€ Blazing fast GraphQL
  • ⚑️ Lightning Fast
  • πŸ”‘ Fully Typed APIs
  • πŸ› οΈ Rich Features
  • πŸ“¦ Optimized Build
  • πŸ₯΄ No Graphql string mess

Installation

yarn add hasura-gql-client

or

npm i hasura-gql-client

Settings

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.