UNPKG

@meilisearch/instant-meilisearch

Version:
70 lines (64 loc) 2.04 kB
import type { MeilisearchSearchMetadata, MeilisearchSearchResponse, } from '../types/index.js' /** * Get Meilisearch metadata for a specific index from InstantSearch results. * * @example * * ```ts * // Get metadata for a specific index * const metadata = getAnalyticsMetadata(results, { indexUid: 'movies' }) * if (metadata) { * console.log(metadata.queryUid) * } * ``` * * @param results - The InstantSearch results object containing _rawResults * @param options - Options object with indexUid to select a specific index * @returns The metadata for the specified index, or undefined if not found */ export function getAnalyticsMetadata( results: { _rawResults?: MeilisearchSearchResponse[] }, options: { indexUid: string } ): MeilisearchSearchMetadata | undefined /** * Get all Meilisearch metadata from InstantSearch results. * * @example * * ```ts * // Get metadata for all indexes * const allMetadata = getAnalyticsMetadata(results) * allMetadata.forEach((metadata) => { * console.log(`${metadata.indexUid}: ${metadata.queryUid}`) * }) * ``` * * @param results - The InstantSearch results object containing _rawResults * @returns An array of metadata objects from all raw results */ export function getAnalyticsMetadata(results: { _rawResults?: MeilisearchSearchResponse[] }): MeilisearchSearchMetadata[] /** Implementation */ export function getAnalyticsMetadata( results: { _rawResults?: MeilisearchSearchResponse[] }, options?: { indexUid: string } ): MeilisearchSearchMetadata | undefined | MeilisearchSearchMetadata[] { if (!results?._rawResults) { return options ? undefined : [] } if (options?.indexUid) { // Find the specific index const rawResult = results._rawResults.find( (raw) => raw.index === options.indexUid ) return rawResult?._meilisearch?.metadata } // Return all metadata return results._rawResults .map((raw) => raw._meilisearch?.metadata) .filter((metadata): metadata is MeilisearchSearchMetadata => !!metadata) }