import type { Meilisearch, SearchCacheInterface, MeilisearchMultiSearchParams, MeilisearchMultiSearchResult, PaginationState, } from '../../types/index.js' /** @param {ResponseCacher} cache */ export function SearchResolver( client: Meilisearch, cache: SearchCacheInterface ) { return { multiSearch: async function ( searchQueries: MeilisearchMultiSearchParams[], instantSearchPagination: PaginationState[] ): Promise { const key = cache.formatKey([searchQueries]) const cachedResponse = cache.getEntry(key) // Check if specific request is already cached with its associated search response. if (cachedResponse) return cachedResponse const searchResponses = await client.multiSearch({ queries: searchQueries, }) const responseWithPagination = searchResponses.results.map( (response, index) => ({ ...response, // TODO: should be removed at one point pagination: instantSearchPagination[index] || {}, }) ) // Cache response cache.setEntry( key, responseWithPagination ) return responseWithPagination }, } }