import type { ODataSelect, ODataSelectResult } from '../lib/odata'; import type { FieldDefinition } from './schema'; import { SchemaService } from './schema'; import type { ScoringBases } from './scorer'; import type { StoredDocument } from './dataStore'; import * as Parsers from '../parsers'; export interface SearchFacetBase { count: number; } export interface SearchFacetValue extends SearchFacetBase { value: unknown; } export interface SearchFacetRange extends SearchFacetBase { from: unknown; to: unknown; } export declare type SearchHighlights = Record; export interface SearchFeature { uniqueTokenMatches: number; similarityScore: number; termFrequency: number; } export declare type SearchFeatures = Record; export declare type SearchSuggestions = Record; export interface SearchDocumentMeta { '@search.score'?: number; '@search.highlights': SearchHighlights; '@search.features': SearchFeatures; } export declare type SearchResult = SearchDocumentMeta & T; export interface SuggestDocumentMeta { '@search.text': string; } export interface AutocompleteResult { text: string; queryPlusText: string; } export declare type SuggestResult = SuggestDocumentMeta & T; export interface BackendResults { '@odata.count'?: number; '@search.coverage'?: number; '@search.facets'?: Record; '@search.nextPageParameters'?: Record; value: (SearchResult | SuggestResult | AutocompleteResult)[]; '@odata.nextLink'?: string; } export interface ReductionResults { facets: Parsers.FacetResults; values: (SearchResult | SuggestResult | AutocompleteResult)[]; } export declare type Reducer> = (accumulator: ReductionResults>, current: { document: StoredDocument; selected?: ODataSelectResult; globalScore: number; scores: ScoringBases; suggestions: SearchSuggestions; features: SearchFeatures; }) => ReductionResults>; export declare type DocumentMiddleware> = (next: Reducer, schemaService: SchemaService) => Reducer; export declare type Transformer> = (reduction: ReductionResults>, results: BackendResults>) => BackendResults>; export declare type ResultsMiddleware> = (next: Transformer, schemaService: SchemaService) => Transformer; export declare class SearchBackend { private readonly schemaService; private readonly documentsProvider; constructor(schemaService: SchemaService, documentsProvider: () => StoredDocument[]); search>(request: { documentMiddlewares: DocumentMiddleware[]; resultsMiddlewares: ResultsMiddleware[]; }): BackendResults>; }