Skip to content

Commit

Permalink
🐛 fixed apollo integration to respect scalars
Browse files Browse the repository at this point in the history
  • Loading branch information
aexol committed Jun 22, 2022
1 parent dc971c3 commit d9f6368
Show file tree
Hide file tree
Showing 11 changed files with 315 additions and 278 deletions.
2 changes: 1 addition & 1 deletion examples/typescript-node/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -9,13 +9,13 @@
"author": "Aexol <[email protected]> (https://aexol.com)",
"license": "ISC",
"devDependencies": {
"@graphql-typed-document-node/core": "^3.1.1",
"@types/ws": "^8.5.3",
"ts-node": "^8.3.0",
"typescript": "^4.5.5"
},
"dependencies": {
"@apollo/client": "^3.4.16",
"@graphql-typed-document-node/core": "^3.1.1",
"graphql-tag": "^2.12.6",
"node-fetch": "^2.6.0",
"react-query": "^3.27.0",
Expand Down
70 changes: 47 additions & 23 deletions examples/typescript-node/src/zeus/apollo.ts
Original file line number Diff line number Diff line change
@@ -1,35 +1,59 @@
/* eslint-disable */

import { Zeus, GraphQLTypes, InputType, ValueTypes, OperationOptions } from './index';
import { gql, useMutation, useSubscription, useQuery, useLazyQuery } from '@apollo/client';
import type { MutationHookOptions, SubscriptionHookOptions, QueryHookOptions, LazyQueryHookOptions } from '@apollo/client';
import { Zeus, GraphQLTypes, InputType, ValueTypes, OperationOptions, ScalarDefinition } from './index';
import { gql, useQuery, useLazyQuery, useMutation, useSubscription } from '@apollo/client';
import type { QueryHookOptions, LazyQueryHookOptions, MutationHookOptions, SubscriptionHookOptions } from '@apollo/client';


export function useTypedMutation<Z extends ValueTypes[O], O extends "Mutation">(
mutation: Z | ValueTypes[O],
options?: MutationHookOptions<InputType<GraphQLTypes[O], Z>>,
operationOptions?: OperationOptions,
export function useTypedQuery<Z extends ValueTypes[O], O extends "Query", SCLR extends ScalarDefinition>(
query: Z | ValueTypes[O],
options?:{
apolloOptions?: QueryHookOptions<InputType<GraphQLTypes[O], Z, SCLR>>,
operationOptions?: OperationOptions,
scalars?: SCLR
}
) {
return useMutation<InputType<GraphQLTypes[O], Z>>(gql(Zeus("mutation",mutation, {operationOptions})), options);
return useQuery<InputType<GraphQLTypes[O], Z, SCLR>>(gql(Zeus("query",query, {
operationOptions: options?.operationOptions,
scalars: options?.scalars
})), options?.apolloOptions);
}
export function useTypedSubscription<Z extends ValueTypes[O], O extends "Subscription">(
subscription: Z | ValueTypes[O],
options?: SubscriptionHookOptions<InputType<GraphQLTypes[O], Z>>,
operationOptions?: OperationOptions,
export function useTypedLazyQuery<Z extends ValueTypes[O], O extends "Query", SCLR extends ScalarDefinition>(
LazyQuery: Z | ValueTypes[O],
options?:{
apolloOptions?: LazyQueryHookOptions<InputType<GraphQLTypes[O], Z, SCLR>>,
operationOptions?: OperationOptions,
scalars?: SCLR
}
) {
return useSubscription<InputType<GraphQLTypes[O], Z>>(gql(Zeus("subscription",subscription, {operationOptions})), options);
return useLazyQuery<InputType<GraphQLTypes[O], Z, SCLR>>(gql(Zeus("query",LazyQuery, {
operationOptions: options?.operationOptions,
scalars: options?.scalars
})), options?.apolloOptions);
}
export function useTypedQuery<Z extends ValueTypes[O], O extends "Query">(
query: Z | ValueTypes[O],
options?: QueryHookOptions<InputType<GraphQLTypes[O], Z>>,
operationOptions?: OperationOptions,
export function useTypedMutation<Z extends ValueTypes[O], O extends "Mutation", SCLR extends ScalarDefinition>(
mutation: Z | ValueTypes[O],
options?:{
apolloOptions?: MutationHookOptions<InputType<GraphQLTypes[O], Z, SCLR>>,
operationOptions?: OperationOptions,
scalars?: SCLR
}
) {
return useQuery<InputType<GraphQLTypes[O], Z>>(gql(Zeus("query",query, {operationOptions})), options);
return useMutation<InputType<GraphQLTypes[O], Z, SCLR>>(gql(Zeus("mutation",mutation, {
operationOptions: options?.operationOptions,
scalars: options?.scalars
})), options?.apolloOptions);
}
export function useTypedLazyQuery<Z extends ValueTypes[O], O extends "Query">(
LazyQuery: Z | ValueTypes[O],
options?: LazyQueryHookOptions<InputType<GraphQLTypes[O], Z>>,
operationOptions?: OperationOptions,
export function useTypedSubscription<Z extends ValueTypes[O], O extends "Subscription", SCLR extends ScalarDefinition>(
subscription: Z | ValueTypes[O],
options?:{
apolloOptions?: SubscriptionHookOptions<InputType<GraphQLTypes[O], Z, SCLR>>,
operationOptions?: OperationOptions,
scalars?: SCLR
}
) {
return useLazyQuery<InputType<GraphQLTypes[O], Z>>(gql(Zeus("query",LazyQuery, {operationOptions})), options);
return useSubscription<InputType<GraphQLTypes[O], Z, SCLR>>(gql(Zeus("subscription",subscription, {
operationOptions: options?.operationOptions,
scalars: options?.scalars
})), options?.apolloOptions);
}
74 changes: 37 additions & 37 deletions examples/typescript-node/src/zeus/const.ts
Original file line number Diff line number Diff line change
@@ -1,39 +1,32 @@
/* eslint-disable */

export const AllTypesProps: Record<string,any> = {
Mutation:{
addCard:{
card:"createCard"
}
createCard:{
skills:"SpecialSkills"
},
Query:{
cardById:{

}
},
SpecialSkills: "enum" as const,
Mutation:{
addCard:{
card:"createCard"
}
},
JSON: `scalar.JSON` as const,
Card:{
attack:{

}
},
JSON: `scalar.JSON` as const,
createCard:{
skills:"SpecialSkills"
}
}

export const ReturnTypes: Record<string,any> = {
S3Object:{
bucket:"String",
key:"String",
region:"String"
},
Mutation:{
addCard:"Card"
},
Subscription:{
deck:"Card"
EffectCard:{
effectSize:"Float",
name:"String"
},
Query:{
cardById:"Card",
Expand All @@ -43,18 +36,33 @@ export const ReturnTypes: Record<string,any> = {
myStacks:"CardStack",
nameables:"Nameable"
},
CardStack:{
cards:"Card",
name:"String"
},
ChangeCard:{
"...on SpecialCard":"SpecialCard",
"...on EffectCard":"EffectCard"
},
EffectCard:{
effectSize:"Float",
SpecialCard:{
effect:"String",
name:"String"
},
Mutation:{
addCard:"Card"
},
Subscription:{
deck:"Card"
},
Nameable:{
"...on EffectCard": "EffectCard",
"...on SpecialCard": "SpecialCard",
"...on Card": "Card",
"...on CardStack": "CardStack",
name:"String"
},
JSON: `scalar.JSON` as const,
S3Object:{
bucket:"String",
key:"String",
region:"String"
},
Card:{
Attack:"Int",
Children:"Int",
Expand All @@ -68,22 +76,14 @@ export const ReturnTypes: Record<string,any> = {
name:"String",
skills:"SpecialSkills"
},
JSON: `scalar.JSON` as const,
SpecialCard:{
effect:"String",
name:"String"
},
Nameable:{
"...on CardStack": "CardStack",
"...on EffectCard": "EffectCard",
"...on Card": "Card",
"...on SpecialCard": "SpecialCard",
CardStack:{
cards:"Card",
name:"String"
}
}

export const Ops = {
mutation: "Mutation" as const,
subscription: "Subscription" as const,
query: "Query" as const
query: "Query" as const,
mutation: "Mutation" as const,
subscription: "Subscription" as const
}
Loading

0 comments on commit d9f6368

Please sign in to comment.