Skip to content

Instantly share code, notes, and snippets.

@dotansimha
dotansimha / fetch-graphql.ts
Last active November 19, 2023 12:17
GraphQL wrapper for `fetch` (based on `TypedDocumentNode`)
async function fetchGraphQL<TResult, TVariables>(
operation: TypedDocumentNode<TResult, TVariables>,
...[variables]: TVariables extends Record<string, never> ? [] : [TVariables]
): Promise<TResult> {
const response = await fetch("http://MY-SERVER/graphql", {
headers: {
'Content-Type': 'application/json',
Accept: 'application/json',
},
method: 'POST',
schema: PATH_OR_URL_TO_SCHEMA
documents: GLOB_EXPRESSION_FOR_OPERATIONS
generates:
./src/types.ts:
plugins:
- typescript
- typescript-operations
codegen/_graphql.tsx:
plugins:
- 'typescript'
- 'typescript-operations'
- 'typescript-resolvers':
avoidOptionals: false
- 'typescript-react-apollo'
config:
withHooks: true
hooksImportFrom: '@apollo/react-hooks'
overwrite: true
schema: schema.graphql
documents: "documents/*.graphql"
generates:
generated/components.tsx:
plugins:
- typescript
- typescript-operations
- typescript-react-apollo
{
"name": "java-app",
"scripts": {
"postinstall": "graphql-codegen"
},
"dependencies": {
"graphql": "14.2.1",
"@graphql-codegen/cli": "1.2.2-beta.0",
"@graphql-codegen/java-resolvers": "1.2.2-beta.0"
}
package com.java.generated;
import com.myapp.models.UserModel;
import com.myapp.models.ChatModel;
import com.myapp.models.BaseModel;
import graphql.schema.TypeResolver;
import graphql.schema.DataFetcher;
public class Resolvers {
public interface Chat {
schema: src/app/resources/schema.graphql
generates:
src/app/graphql/generated/Resolvers.java:
plugins:
- java-resolvers
config:
mappers:
User: com.myapp.models.UserModel#UserModel
Chat: com.myapp.models.ChatModel#ChatModel
Node: com.myapp.models.BaseModel#BaseModel
package com.java.generated;
import graphql.schema.TypeResolver;
import graphql.schema.DataFetcher;
public class Resolvers {
public interface Chat {
public DataFetcher<Object> id();
public DataFetcher<Iterable<Object>> users();
public DataFetcher<String> title();
type Query {
me: User!
}
interface Node {
id: ID!
}
type User implements Node {
id: ID!
schema: schema.graphql
documents: ./src/main/**/*.graphql
generates:
generatedJava/:
preset: java-apollo-android
config:
package: com.app.generated.graphql
plugins:
- java-apollo-android