import { describe, it } from 'vitest'; import { cacheExchange, Resolver as GraphCacheResolver, UpdateResolver as GraphCacheUpdateResolver, OptimisticMutationResolver as GraphCacheOptimisticMutationResolver, } from './index'; type Maybe = T | null; type Scalars = { ID: string; String: string; Boolean: boolean; Int: number; Float: number; }; type Author = { __typename?: 'Author'; id?: Maybe; name?: Maybe; friends?: Maybe>>; friendsPaginated?: Maybe>>; }; type MutationToggleTodoArgs = { id: Scalars['ID']; }; type Query = { __typename?: 'Query'; todos?: Maybe>>; }; type Todo = { __typename?: 'Todo'; id?: Maybe; text?: Maybe; complete?: Maybe; author?: Maybe; }; type WithTypename = { [K in Exclude]?: T[K]; } & { __typename: NonNullable }; type GraphCacheKeysConfig = { Todo?: (data: WithTypename) => null | string; }; type GraphCacheResolvers = { Query?: { todos?: GraphCacheResolver< WithTypename, Record, Array | string> >; }; Todo?: { id?: GraphCacheResolver< WithTypename, Record, Scalars['ID'] | string >; text?: GraphCacheResolver< WithTypename, Record, Scalars['String'] | string >; complete?: GraphCacheResolver< WithTypename, Record, Scalars['Boolean'] | string >; author?: GraphCacheResolver< WithTypename, Record, WithTypename | string >; }; }; type GraphCacheOptimisticUpdaters = { toggleTodo?: GraphCacheOptimisticMutationResolver< MutationToggleTodoArgs, WithTypename >; }; type GraphCacheUpdaters = { Mutation?: { toggleTodo?: GraphCacheUpdateResolver< { toggleTodo: WithTypename }, MutationToggleTodoArgs >; }; Subscription?: {}; }; type GraphCacheConfig = { updates?: GraphCacheUpdaters; keys?: GraphCacheKeysConfig; optimistic?: GraphCacheOptimisticUpdaters; resolvers?: GraphCacheResolvers; }; describe('typings', function () { it('should work with a generic', function () { cacheExchange({ keys: { Todo: data => data.id || null, }, updates: { Mutation: { toggleTodo: result => { result.toggleTodo.author?.name; }, }, }, resolvers: { Todo: { id: parent => parent.id + '_' + parent.complete, }, }, optimistic: { toggleTodo: (args, cache) => { return { __typename: 'Todo', complete: !cache.resolve( { __typename: 'Todo', id: args.id }, 'complete' ), id: args.id, }; }, }, }); }); });