Skip to content

Commit 919d3ab

Browse files
feat(types): introduce generic Hit type (#1191)
1 parent 4daf32c commit 919d3ab

File tree

4 files changed

+52
-4
lines changed

4 files changed

+52
-4
lines changed
Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
type HighlightMatch = {
2+
readonly value: string;
3+
readonly matchLevel: 'none' | 'partial' | 'full';
4+
readonly matchedWords: readonly string[];
5+
readonly fullyHighlighted?: boolean;
6+
};
7+
8+
export type HighlightResult<THit> = THit extends string | number
9+
? HighlightMatch
10+
: {
11+
[KAttribute in keyof THit]: HighlightResult<THit[KAttribute]>;
12+
};
13+
14+
type SnippetMatch = {
15+
readonly value: string;
16+
readonly matchLevel: 'none' | 'partial' | 'full';
17+
};
18+
19+
export type SnippetResult<THit> = THit extends string | number
20+
? SnippetMatch
21+
: {
22+
[KAttribute in keyof THit]: SnippetResult<THit[KAttribute]>;
23+
};
24+
25+
export type Hit<THit> = THit & {
26+
readonly objectID: string;
27+
readonly _highlightResult?: HighlightResult<THit>;
28+
readonly _snippetResult?: SnippetResult<THit>;
29+
readonly _rankingInfo?: {
30+
readonly promoted: boolean;
31+
readonly nbTypos: number;
32+
readonly firstMatchedWord: number;
33+
readonly proximityDistance?: number;
34+
readonly geoDistance: number;
35+
readonly geoPrecision?: number;
36+
readonly nbExactWords: number;
37+
readonly words: number;
38+
readonly filters: number;
39+
readonly userScore: number;
40+
readonly matchedGeoLocation?: {
41+
readonly lat: number;
42+
readonly lng: number;
43+
readonly distance: number;
44+
};
45+
};
46+
readonly _distinctSeqID?: number;
47+
};
Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
1-
import { ObjectWithObjectID, SearchResponse } from '.';
1+
import { SearchResponse } from '.';
22

33
export type MultipleQueriesResponse<TObject> = {
44
/**
55
* The list of results.
66
*/
7-
results: Array<SearchResponse<TObject & ObjectWithObjectID>>;
7+
results: Array<SearchResponse<TObject>>;
88
};

packages/client-search/src/types/SearchResponse.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,12 @@
1-
import { ObjectWithObjectID } from '.';
1+
import { Hit } from '.';
22

33
export type SearchResponse<TObject = {}> = {
44
/**
55
* The hits returned by the search.
66
*
77
* Hits are ordered according to the ranking or sorting of the index being queried.
88
*/
9-
hits: Array<TObject & ObjectWithObjectID>;
9+
hits: Array<Hit<TObject>>;
1010

1111
/**
1212
* Index of the current page (zero-based).

packages/client-search/src/types/index.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@ export * from './GetObjectsResponse';
3636
export * from './GetTopUserIDsResponse';
3737
export * from './HasPendingMappingsOptions';
3838
export * from './HasPendingMappingsResponse';
39+
export * from './Hit';
3940
export * from './IndexOperationResponse';
4041
export * from './Indice';
4142
export * from './ListApiKeysResponse';

0 commit comments

Comments
 (0)