From 257c7bf7496aba9399760d6d2d367a884f3369b9 Mon Sep 17 00:00:00 2001 From: "F. Levi" <55688616+flevi29@users.noreply.github.com> Date: Wed, 4 Dec 2024 09:27:10 +0200 Subject: [PATCH] Fix type issues with multiSearch --- src/meilisearch.ts | 45 ++++++++++++++++++++++++-------------------- src/types/types.ts | 7 ------- tests/search.test.ts | 8 ++++---- 3 files changed, 29 insertions(+), 31 deletions(-) diff --git a/src/meilisearch.ts b/src/meilisearch.ts index be82720d5..2c6446968 100644 --- a/src/meilisearch.ts +++ b/src/meilisearch.ts @@ -30,7 +30,8 @@ import { DeleteTasksQuery, MultiSearchParams, FederatedMultiSearchParams, - MultiSearchResponseOrSearchResponse, + MultiSearchResponse, + SearchResponse, } from "./types"; import { HttpRequests } from "./http-requests"; import { TaskClient, Task } from "./task"; @@ -193,33 +194,37 @@ export class MeiliSearch { /// /** - * Perform multiple search queries. + * https://www.meilisearch.com/docs/reference/api/multi_search * - * It is possible to make multiple search queries on the same index or on - * different ones - * - * @example - * - * ```ts - * client.multiSearch({ - * queries: [ - * { indexUid: "movies", q: "wonder" }, - * { indexUid: "books", q: "flower" }, - * ], - * }); - * ``` + * @param queries - Search queries + * @param config - Additional request configuration options + * @returns Promise containing the search responses + */ + readonly multiSearch = < + T extends Record = Record, + >( + ...params: [queries: MultiSearchParams, config?: Partial] + ) => this.#multiSearch(...params) as Promise>; + + /** + * https://www.meilisearch.com/docs/reference/api/multi_search#federation * * @param queries - Search queries * @param config - Additional request configuration options * @returns Promise containing the search responses */ - async multiSearch< - T1 extends MultiSearchParams | FederatedMultiSearchParams, - T2 extends Record = Record, + readonly federatedMultiSearch = < + T extends Record = Record, + >( + ...params: [queries: FederatedMultiSearchParams, config?: Partial] + ) => this.#multiSearch(...params) as Promise>; + + async #multiSearch< + T extends Record = Record, >( - queries: T1, + queries: MultiSearchParams | FederatedMultiSearchParams, config?: Partial, - ): Promise> { + ): Promise | SearchResponse> { const url = `multi-search`; return await this.httpRequest.post(url, queries, undefined, config); diff --git a/src/types/types.ts b/src/types/types.ts index d1844ccbd..f2d0befb7 100644 --- a/src/types/types.ts +++ b/src/types/types.ts @@ -299,13 +299,6 @@ export type MultiSearchResponse> = { results: Array>; }; -export type MultiSearchResponseOrSearchResponse< - T1 extends FederatedMultiSearchParams | MultiSearchParams, - T2 extends Record = Record, -> = T1 extends FederatedMultiSearchParams - ? SearchResponse - : MultiSearchResponse; - export type FieldDistribution = { [field: string]: number; }; diff --git a/tests/search.test.ts b/tests/search.test.ts index 275b5d1ba..6f68711d0 100644 --- a/tests/search.test.ts +++ b/tests/search.test.ts @@ -175,7 +175,7 @@ describe.each([ test(`${permission} key: Multi index search with federation`, async () => { const client = await getClient(permission); - const response1 = await client.multiSearch< + const response1 = await client.federatedMultiSearch< Books | { id: number; asd: string } >({ federation: {}, @@ -195,7 +195,7 @@ describe.each([ expect(response1.hits.length).toEqual(2); expect(response1.hits[0].id).toEqual(456); - const response2 = await client.multiSearch({ + const response2 = await client.federatedMultiSearch({ federation: {}, queries: [ { @@ -234,7 +234,7 @@ describe.each([ await masterClient.waitForTask(task2); // Make a multi search on both indexes with facetsByIndex - const response = await client.multiSearch({ + const response = await client.federatedMultiSearch({ federation: { limit: 20, offset: 0, @@ -312,7 +312,7 @@ describe.each([ await masterClient.waitForTask(task2); // Make a multi search on both indexes with mergeFacets - const response = await client.multiSearch({ + const response = await client.federatedMultiSearch({ federation: { limit: 20, offset: 0,