typesense
Version:
Javascript Library for Typesense
202 lines (201 loc) • 9.32 kB
TypeScript
import type { AxiosRequestConfig } from "axios";
import type { BaseStreamConfig, StreamConfig } from "./Configuration";
import type { DocumentSchema, SearchParamsWithPreset, SearchOptions, SearchResponse, DocumentWriteParameters, DeleteQuery, DeleteResponse, ImportResponse, DocumentsExportParameters } from "./Documents";
export type DropTokensMode = "right_to_left" | "left_to_right" | "both_sides:3";
export type OperationMode = "off" | "always" | "fallback";
export type CommaSeparated<T extends string, ToExtend, OriginalString extends string = T, Previous extends string[] = []> = T extends `${infer Start},${infer Rest}` ? TrimString<Start> extends ToExtend ? CommaSeparated<Rest, ToExtend, OriginalString, [
...Previous,
TrimString<Start>
]> : {
error: "Invalid operation mode";
value: TrimString<Start>;
} : TrimString<T> extends ToExtend ? OriginalString : {
error: "Invalid operation mode";
value: TrimString<T>;
};
export type MessageChunk = {
message: string;
conversation_id: string;
};
export type UnionArrayKeys<T> = {
[K in keyof T]: T[K] extends undefined ? never : NonNullable<T[K]> extends infer R ? R extends R[] ? never : R extends (infer U)[] | infer U ? U[] extends R ? K : never : never : never;
}[keyof T] & keyof T;
export type UnionArraySearchParams<T extends DocumentSchema = DocumentSchema> = UnionArrayKeys<T>;
export type ArraybleParams<T extends DocumentSchema = DocumentSchema> = {
readonly [K in UnionArraySearchParams<T>]: string;
};
export type ExtractBaseTypes<T> = {
[K in keyof T]: K extends UnionArrayKeys<T> ? T[K] extends (infer U)[] | infer U ? U : T[K] : T[K];
};
export declare const arrayableParams: ArraybleParams;
export interface SearchParams<TDoc extends DocumentSchema, Infix extends string = string> {
q?: "*" | (string & {});
query_by?: string | string[];
query_by_weights?: string | number[];
prefix?: string | boolean | boolean[];
filter_by?: string;
max_filter_by_candidates?: number;
enable_synonyms?: boolean;
enable_analytics?: boolean;
filter_curated_hits?: boolean;
enable_lazy_filter?: boolean;
sort_by?: string | string[];
facet_by?: string | string[];
max_facet_values?: number;
facet_sample_threshold?: number;
facet_sample_percent?: number;
facet_query?: string;
facet_query_num_typos?: number;
facet_return_parent?: string;
facet_strategy?: "exhaustive" | "top_values" | "automatic";
page?: number;
per_page?: number;
group_by?: string | string[];
group_limit?: number;
group_missing_values?: boolean;
include_fields?: string | string[];
exclude_fields?: string | string[];
highlight_fields?: string | string[];
highlight_full_fields?: string | string[];
highlight_affix_num_tokens?: number;
highlight_start_tag?: string;
highlight_end_tag?: string;
enable_highlight_v1?: boolean;
snippet_threshold?: number;
nl_query?: boolean;
nl_model_id?: string;
nl_query_debug?: boolean;
nl_query_prompt_cache_ttl?: number;
num_typos?: string | number | number[];
min_len_1typo?: number;
min_len_2typo?: number;
split_join_tokens?: OperationMode;
exhaustive_search?: boolean;
drop_tokens_threshold?: number;
drop_tokens_mode?: DropTokensMode;
typo_tokens_threshold?: number;
pinned_hits?: string | string[];
synonym_sets?: string[] | string;
hidden_hits?: string | string[];
limit_hits?: number;
pre_segmented_query?: boolean;
enable_overrides?: boolean;
override_tags?: string | string[];
prioritize_exact_match?: boolean;
prioritize_token_position?: boolean;
prioritize_num_matching_fields?: boolean;
search_cutoff_ms?: number;
use_cache?: boolean;
max_candidates?: number;
infix?: CommaSeparated<Infix, OperationMode> | OperationMode[] | OperationMode;
preset?: string;
text_match_type?: "max_score" | "max_weight" | "sum_score";
vector_query?: string;
"x-typesense-api-key"?: string;
"x-typesense-user-id"?: string;
offset?: number;
limit?: number;
stopwords?: string;
conversation?: boolean;
validate_field_names?: boolean;
conversation_stream?: boolean;
conversation_model_id?: string;
conversation_id?: string;
voice_query?: string;
streamConfig?: StreamConfig<TDoc>;
}
export interface SearchResponseRequestParams {
collection_name?: string;
q?: string;
page?: number;
per_page?: number;
first_q?: string;
voice_query?: {
transcribed_query?: string;
};
}
export interface SearchableDocuments<T extends DocumentSchema = DocumentSchema, Infix extends string = string> {
search(searchParameters: SearchParams<T, Infix> | SearchParamsWithPreset<T, Infix>, options: SearchOptions): Promise<SearchResponse<T>>;
clearCache(): void;
}
export interface WriteableDocuments<T> {
create(document: T, options: DocumentWriteParameters): Promise<T>;
upsert(document: T, options: DocumentWriteParameters): Promise<T>;
update(document: T, options: DocumentWriteParameters): Promise<T>;
delete(query: DeleteQuery): Promise<DeleteResponse>;
import(documents: T[] | string, options: DocumentWriteParameters): Promise<string | ImportResponse[]>;
export(options: DocumentsExportParameters): Promise<string>;
}
export interface MultiSearchUnionStreamConfig<T extends DocumentSchema> extends BaseStreamConfig {
onComplete?: (data: UnionSearchResponse<T>) => void;
}
export interface MultiSearchResultsStreamConfig<T extends DocumentSchema[]> extends BaseStreamConfig {
onComplete?: (data: {
results: {
[Index in keyof T]: SearchResponse<T[Index]>;
} & {
length: T["length"];
};
}) => void;
}
export interface RequestParams<T extends DocumentSchema[]> {
path: string;
queryParams?: Record<string, unknown>;
body?: unknown;
headers?: Record<string, string>;
streamConfig?: StreamConfig<T[number]> | MultiSearchResultsStreamConfig<T> | MultiSearchUnionStreamConfig<T[number]>;
abortSignal?: AbortSignal | null;
responseType?: AxiosRequestConfig["responseType"] | undefined;
isStreamingRequest: boolean | undefined;
}
export interface MultiSearchRequestsWithUnionSchema<T extends DocumentSchema, Infix extends string> extends SearchesMultiSearchesRequestSchema<T, Infix> {
union: true;
}
export interface MultiSearchRequestsWithoutUnionSchema<T extends DocumentSchema, Infix extends string> extends SearchesMultiSearchesRequestSchema<T, Infix> {
union?: false | undefined;
}
export type MultiSearchRequestsSchema<T extends DocumentSchema, Infix extends string> = MultiSearchRequestsWithUnionSchema<T, Infix> | MultiSearchRequestsWithoutUnionSchema<T, Infix>;
export interface UnionSearchResponse<T extends DocumentSchema> extends Omit<SearchResponse<T>, "request_params"> {
union_request_params: SearchResponseRequestParams[];
}
export type MultiSearchResponse<T extends DocumentSchema[], Infix extends string, R extends MultiSearchRequestsSchema<T[number], Infix> = MultiSearchRequestsSchema<T[number], Infix>> = R extends MultiSearchRequestsWithUnionSchema<T[number], Infix> ? UnionSearchResponse<T[number]> : {
results: {
[Index in keyof T]: SearchResponse<T[Index]>;
} & {
length: T["length"];
};
};
export interface MultiSearchUnionStreamConfig<T extends DocumentSchema> extends BaseStreamConfig {
onComplete?: (data: UnionSearchResponse<T>) => void;
}
export interface MultiSearchResultsStreamConfig<T extends DocumentSchema[]> extends BaseStreamConfig {
onComplete?: (data: {
results: {
[Index in keyof T]: SearchResponse<T[Index]>;
} & {
length: T["length"];
};
}) => void;
}
interface SearchesMultiSearchesRequestSchema<T extends DocumentSchema, Infix extends string> {
searches: (MultiSearchRequestSchema<T, Infix> | MultiSearchRequestWithPresetSchema<T, Infix>)[];
}
interface BaseMultiSearchRequestSchema {
collection?: string;
rerank_hybrid_matches?: boolean;
"x-typesense-api-key"?: string;
}
type CommonMultiSearchParametersBase<T extends DocumentSchema, Infix extends string> = Partial<BaseMultiSearchRequestSchema & Omit<SearchParams<T, Infix>, "streamConfig">>;
export type MultiSearchRequestSchema<T extends DocumentSchema, Infix extends string> = BaseMultiSearchRequestSchema & Omit<SearchParams<T, Infix>, "streamConfig">;
export type MultiSearchRequestWithPresetSchema<T extends DocumentSchema, Infix extends string> = BaseMultiSearchRequestSchema & Omit<SearchParamsWithPreset<T, Infix>, "streamConfig">;
export type MultiSearchUnionParameters<T extends DocumentSchema, Infix extends string> = CommonMultiSearchParametersBase<T, Infix> & {
streamConfig?: MultiSearchUnionStreamConfig<T>;
use_cache?: boolean;
};
export type MultiSearchResultsParameters<T extends DocumentSchema[], Infix extends string> = CommonMultiSearchParametersBase<T[number], Infix> & {
streamConfig?: MultiSearchResultsStreamConfig<T>;
use_cache?: boolean;
};
type Whitespace = " " | "\n" | "\t";
type TrimString<S extends string> = S extends `${Whitespace}${infer S}` ? TrimString<S> : S extends `${infer S}${Whitespace}` ? TrimString<S> : S;
export {};