UNPKG

@meilisearch/instant-meilisearch

Version:
58 lines 2.61 kB
import { adaptHits } from './hits-adapter.js'; import { adaptTotalHits } from './total-hits-adapter.js'; import { adaptPaginationParameters } from './pagination-adapter.js'; import { adaptFacetDistribution } from './facet-distribution-adapter.js'; import { adaptFacetStats } from './adapt-facet-stats.js'; /** * Adapt multiple search results from Meilisearch to search results compliant * with instantsearch.js * * @param {MeilisearchMultiSearchResult<T>[]} searchResponse * @param {Record<string, FacetDistribution>} initialFacetDistribution * @param {InstantMeiliSearchConfig} config * @returns {{ results: MeilisearchSearchResponse<T>[] }} */ export function adaptSearchResults(meilisearchResults, initialFacetDistribution, config) { const instantSearchResult = meilisearchResults.map((meilisearchResult) => { return adaptSearchResult(meilisearchResult, initialFacetDistribution[meilisearchResult.indexUid], config); }); return { results: instantSearchResult }; } /** * Adapt search result from Meilisearch to search result compliant with * instantsearch.js * * @param {MeilisearchMultiSearchResult<Record<string>>} searchResponse * @param {Record<string, FacetDistribution>} initialFacetDistribution * @param {InstantMeiliSearchConfig} config * @returns {MeilisearchSearchResponse<T>} */ export function adaptSearchResult(meiliSearchResult, initialFacetDistribution, config) { const { processingTimeMs, query, indexUid, facetDistribution: responseFacetDistribution = {}, facetStats = {}, metadata, } = meiliSearchResult; const facets = Object.keys(responseFacetDistribution); const { hitsPerPage, page, nbPages } = adaptPaginationParameters(meiliSearchResult, meiliSearchResult.pagination); const hits = adaptHits(meiliSearchResult, config); const nbHits = adaptTotalHits(meiliSearchResult); const facetDistribution = adaptFacetDistribution(config.keepZeroFacets, facets, initialFacetDistribution, responseFacetDistribution); // Create result object compliant with InstantSearch const adaptedSearchResult = { index: indexUid, hitsPerPage, page, facets: facetDistribution, nbPages, nbHits, processingTimeMS: processingTimeMs, query, hits, params: '', exhaustiveNbHits: false, facets_stats: adaptFacetStats(facetStats), }; // Include Meilisearch analytics metadata if (metadata) { adaptedSearchResult._meilisearch = { metadata }; } return adaptedSearchResult; } //# sourceMappingURL=search-response-adapter.js.map