import { CustomError } from '../lib/errors'; import * as Parsers from '../parsers'; import { AnalyzerId } from './analyzerService'; export declare const edmString: "Edm.String"; export declare const edmInt32: "Edm.Int32"; export declare const edmInt64: "Edm.Int64"; export declare const edmDouble: "Edm.Double"; export declare const edmBoolean: "Edm.Boolean"; export declare const edmDateTimeOffset: "Edm.DateTimeOffset"; export declare const edmGeographyPoint: "Edm.GeographyPoint"; export declare const edmComplexType: "Edm.ComplexType"; export declare type EdmString = typeof edmString; export declare type EdmInt32 = typeof edmInt32; export declare type EdmInt64 = typeof edmInt64; export declare type EdmDouble = typeof edmDouble; export declare type EdmBoolean = typeof edmBoolean; export declare type EdmDateTimeOffset = typeof edmDateTimeOffset; export declare type EdmGeographyPoint = typeof edmGeographyPoint; export declare type EdmComplexType = typeof edmComplexType; export declare type EdmCollection = `Collection(${EdmT})`; export declare const edmCollection: (edm: TEdm) => `Collection(${TEdm})`; export interface KeyFieldDefinition { name: string; type: EdmString; key: true; searchable?: boolean; filterable?: boolean; sortable?: boolean; facetable?: boolean; retrievable?: true; analyzer?: AnalyzerId; searchAnalyzer?: AnalyzerId; indexAnalyzer?: AnalyzerId; } export interface StringFieldDefinition { name: string; type: EdmString; key?: false; searchable?: boolean; filterable?: boolean; sortable?: boolean; facetable?: boolean; retrievable?: boolean; analyzer?: AnalyzerId; searchAnalyzer?: AnalyzerId; indexAnalyzer?: AnalyzerId; } export interface Int32FieldDefinition { name: string; type: EdmInt32; key?: false; searchable?: false; filterable?: boolean; sortable?: boolean; facetable?: boolean; retrievable?: boolean; } export interface Int64FieldDefinition { name: string; type: EdmInt64; key?: false; searchable?: false; filterable?: boolean; sortable?: boolean; facetable?: boolean; retrievable?: boolean; } export interface DoubleFieldDefinition { name: string; type: EdmDouble; key?: false; searchable?: false; filterable?: boolean; sortable?: boolean; facetable?: boolean; retrievable?: boolean; } export interface BooleanFieldDefinition { name: string; type: EdmBoolean; key?: false; searchable?: false; filterable?: boolean; sortable?: boolean; facetable?: boolean; retrievable?: boolean; } export interface DateTimeOffsetFieldDefinition { name: string; type: EdmDateTimeOffset; key?: false; searchable?: false; filterable?: boolean; sortable?: boolean; facetable?: boolean; retrievable?: boolean; } export interface GeographyPointFieldDefinition { name: string; type: EdmGeographyPoint; key?: false; searchable?: false; filterable?: boolean; sortable?: boolean; facetable?: false; retrievable?: boolean; } export interface ComplexTypeFieldDefinition { name: string; type: EdmComplexType; fields: BasicFieldDefinition[]; } export interface StringCollectionFieldDefinition { name: string; type: EdmCollection; key?: false; searchable?: boolean; filterable?: boolean; sortable?: boolean; facetable?: false; retrievable?: boolean; analyzer?: AnalyzerId; searchAnalyzer?: AnalyzerId; indexAnalyzer?: AnalyzerId; } export interface Int32CollectionFieldDefinition { name: string; type: EdmCollection; key?: false; searchable?: false; filterable?: boolean; sortable?: false; facetable?: boolean; retrievable?: boolean; } export interface Int64CollectionFieldDefinition { name: string; type: EdmCollection; key?: false; searchable?: false; filterable?: boolean; sortable?: false; facetable?: boolean; retrievable?: boolean; } export interface DoubleCollectionFieldDefinition { name: string; type: EdmCollection; key?: false; searchable?: false; filterable?: boolean; sortable?: false; facetable?: boolean; retrievable?: boolean; } export interface BooleanCollectionFieldDefinition { name: string; type: EdmCollection; key?: false; searchable?: false; filterable?: boolean; sortable?: false; facetable?: boolean; retrievable?: boolean; } export interface DateTimeOffsetCollectionFieldDefinition { name: string; type: EdmCollection; key?: false; searchable?: false; filterable?: boolean; sortable?: false; facetable?: boolean; retrievable?: boolean; } export interface GeographyPointCollectionFieldDefinition { name: string; type: EdmCollection; key?: false; searchable?: false; filterable?: boolean; sortable?: false; facetable?: false; retrievable?: boolean; } export interface ComplexTypeCollectionFieldDefinition { name: string; type: EdmCollection; searchable?: false; filterable?: boolean; sortable?: false; facetable?: boolean; retrievable?: boolean; fields: BasicFieldDefinition[]; } export declare type BasicFieldDefinition = StringFieldDefinition | Int32FieldDefinition | Int64FieldDefinition | DoubleFieldDefinition | BooleanFieldDefinition | DateTimeOffsetFieldDefinition | GeographyPointFieldDefinition | ComplexTypeFieldDefinition | StringCollectionFieldDefinition | Int32CollectionFieldDefinition | Int64CollectionFieldDefinition | DoubleCollectionFieldDefinition | BooleanCollectionFieldDefinition | DateTimeOffsetCollectionFieldDefinition | GeographyPointCollectionFieldDefinition | ComplexTypeCollectionFieldDefinition; export declare type FieldDefinition = KeyFieldDefinition | BasicFieldDefinition; export declare type Schema = FieldDefinition[]; export declare type AllStringField = KeyFieldDefinition | StringFieldDefinition | StringCollectionFieldDefinition; export declare type AllComplexField = ComplexTypeFieldDefinition | ComplexTypeCollectionFieldDefinition; export declare type RetrievableField = Exclude; export declare type SearchableField = AllStringField; export declare type FilterableField = Exclude; export declare type SortableField = KeyFieldDefinition | StringFieldDefinition | Int32FieldDefinition | Int64FieldDefinition | DoubleFieldDefinition | BooleanFieldDefinition | DateTimeOffsetFieldDefinition | GeographyPointFieldDefinition; export declare type FacetableField = Exclude; export declare type SuggestableField = SearchableField; export declare type Retrievable = { name: string; path: string[]; field: RetrievableField | AllComplexField; }; export declare type Searchable = { name: string; path: string[]; field: SearchableField; }; export declare type Filterable = { name: string; path: string[]; field: FilterableField; }; export declare type Sortable = { name: string; path: string[]; field: SortableField; }; export declare type Facetable = { name: string; path: string[]; field: FacetableField; }; export declare type Suggestable = { name: string; path: string[]; field: SuggestableField; }; export declare type AnalyzableBasic = { name: string; path: string[]; field: SearchableField | FilterableField; isFullText: false; }; export declare type AnalyzableFullText = { name: string; path: string[]; field: SearchableField; isFullText: true; }; export declare type Analyzable = AnalyzableBasic | AnalyzableFullText; export declare function isKeyFieldDefinition(field: FieldDefinition): field is KeyFieldDefinition; export declare class SchemaError extends CustomError { json?: any; constructor(message: string, json?: any); } export declare function validateSchema(schema: Schema): { keyField: KeyFieldDefinition; retrievableSchema: Retrievable[]; searchableSchema: Searchable[]; filterableSchema: Filterable[]; sortableSchema: Sortable[]; facetableSchema: Facetable[]; suggestableSchema: Suggestable[]; analyzableSchema: (AnalyzableBasic | AnalyzableFullText)[]; }; export declare class SchemaService { readonly keyField: KeyFieldDefinition; readonly retrievableSchema: Retrievable[]; readonly searchableSchema: Searchable[]; readonly filtrableSchema: Filterable[]; readonly sortableSchema: Sortable[]; readonly facetableSchema: Facetable[]; readonly suggestableSchema: Suggestable[]; readonly analyzableSchema: Analyzable[]; readonly assertDocumentSchema: (document: Record) => T; static createSchemaService(schema: Schema): SchemaService; constructor(keyField: KeyFieldDefinition, retrievableSchema: Retrievable[], searchableSchema: Searchable[], filtrableSchema: Filterable[], sortableSchema: Sortable[], facetableSchema: Facetable[], suggestableSchema: Suggestable[], analyzableSchema: Analyzable[], assertDocumentSchema: (document: Record) => T); assertCommands(request: { selectCommand?: Parsers.SelectParserResult; searchFieldsCommand?: Parsers.SelectParserResult; filterCommand?: Parsers.FilterParserResult; orderByCommand?: Parsers.OrderByParserResult; highlightCommand?: Parsers.HighlighParserResult; facetCommands?: Parsers.FacetParserResult[]; }): void; }