Mirror: The highly customizable and versatile GraphQL client with which you add on features like normalized caching as you grow.
at main 3.1 kB view raw
1import { describe, it } from 'vitest'; 2import { 3 cacheExchange, 4 Resolver as GraphCacheResolver, 5 UpdateResolver as GraphCacheUpdateResolver, 6 OptimisticMutationResolver as GraphCacheOptimisticMutationResolver, 7} from './index'; 8 9type Maybe<T> = T | null; 10 11type Scalars = { 12 ID: string; 13 String: string; 14 Boolean: boolean; 15 Int: number; 16 Float: number; 17}; 18type Author = { 19 __typename?: 'Author'; 20 id?: Maybe<Scalars['ID']>; 21 name?: Maybe<Scalars['String']>; 22 friends?: Maybe<Array<Maybe<Author>>>; 23 friendsPaginated?: Maybe<Array<Maybe<Author>>>; 24}; 25 26type MutationToggleTodoArgs = { 27 id: Scalars['ID']; 28}; 29 30type Query = { 31 __typename?: 'Query'; 32 todos?: Maybe<Array<Maybe<Todo>>>; 33}; 34 35type Todo = { 36 __typename?: 'Todo'; 37 id?: Maybe<Scalars['ID']>; 38 text?: Maybe<Scalars['String']>; 39 complete?: Maybe<Scalars['Boolean']>; 40 author?: Maybe<Author>; 41}; 42 43type WithTypename<T extends { __typename?: any }> = { 44 [K in Exclude<keyof T, '__typename'>]?: T[K]; 45} & { __typename: NonNullable<T['__typename']> }; 46 47type GraphCacheKeysConfig = { 48 Todo?: (data: WithTypename<Todo>) => null | string; 49}; 50 51type GraphCacheResolvers = { 52 Query?: { 53 todos?: GraphCacheResolver< 54 WithTypename<Query>, 55 Record<string, never>, 56 Array<WithTypename<Todo> | string> 57 >; 58 }; 59 Todo?: { 60 id?: GraphCacheResolver< 61 WithTypename<Todo>, 62 Record<string, never>, 63 Scalars['ID'] | string 64 >; 65 text?: GraphCacheResolver< 66 WithTypename<Todo>, 67 Record<string, never>, 68 Scalars['String'] | string 69 >; 70 complete?: GraphCacheResolver< 71 WithTypename<Todo>, 72 Record<string, never>, 73 Scalars['Boolean'] | string 74 >; 75 author?: GraphCacheResolver< 76 WithTypename<Todo>, 77 Record<string, never>, 78 WithTypename<Author> | string 79 >; 80 }; 81}; 82 83type GraphCacheOptimisticUpdaters = { 84 toggleTodo?: GraphCacheOptimisticMutationResolver< 85 MutationToggleTodoArgs, 86 WithTypename<Todo> 87 >; 88}; 89 90type GraphCacheUpdaters = { 91 Mutation?: { 92 toggleTodo?: GraphCacheUpdateResolver< 93 { toggleTodo: WithTypename<Todo> }, 94 MutationToggleTodoArgs 95 >; 96 }; 97 Subscription?: {}; 98}; 99 100type GraphCacheConfig = { 101 updates?: GraphCacheUpdaters; 102 keys?: GraphCacheKeysConfig; 103 optimistic?: GraphCacheOptimisticUpdaters; 104 resolvers?: GraphCacheResolvers; 105}; 106 107describe('typings', function () { 108 it('should work with a generic', function () { 109 cacheExchange<GraphCacheConfig>({ 110 keys: { 111 Todo: data => data.id || null, 112 }, 113 updates: { 114 Mutation: { 115 toggleTodo: result => { 116 result.toggleTodo.author?.name; 117 }, 118 }, 119 }, 120 resolvers: { 121 Todo: { 122 id: parent => parent.id + '_' + parent.complete, 123 }, 124 }, 125 optimistic: { 126 toggleTodo: (args, cache) => { 127 return { 128 __typename: 'Todo', 129 complete: !cache.resolve( 130 { __typename: 'Todo', id: args.id }, 131 'complete' 132 ), 133 id: args.id, 134 }; 135 }, 136 }, 137 }); 138 }); 139});