diff --git a/index.d.ts b/index.d.ts index fa753b7..9af19e3 100644 --- a/index.d.ts +++ b/index.d.ts @@ -195,10 +195,10 @@ declare module "flexsearch" { W extends WorkerType = false, S extends StorageInterface | boolean = false, R extends boolean = true, - D extends DocumentData = undefined + //D extends DocumentData = undefined > = R extends true ? DefaultSearchResults - : Resolver + : Resolver /** * Basic usage and variants: https://github.com/nextapps-de/flexsearch#basic-usage-and-variants \ @@ -210,12 +210,12 @@ declare module "flexsearch" { W extends WorkerType = false, S extends StorageInterface | boolean = false, R extends boolean = true, - D extends DocumentData = undefined + //D extends DocumentData = undefined > = W extends false ? S extends false - ? SearchResults - : Promise> - : Promise> + ? SearchResults + : Promise> + : Promise> export class Index< W extends WorkerType = false, @@ -501,7 +501,7 @@ declare module "flexsearch" { D extends DocumentData = DocumentData, H extends HighlightOptions | boolean = false, R extends boolean = true, - E extends boolean = false + E extends boolean = H extends HighlightOptions ? true : false > = FieldName | DocumentSearchOptions; export type DocumentSearchResults< @@ -509,21 +509,40 @@ declare module "flexsearch" { H extends HighlightOptions | boolean = false, P extends PluckOptions | boolean = false, R extends boolean = true, - E extends boolean = false, + E extends boolean = H extends HighlightOptions ? true : false, + M extends boolean = false + > = P extends false + ? M extends true + ? MergedDocumentSearchResults + : E extends true + ? EnrichedDocumentSearchResults + : H extends false + ? DefaultDocumentSearchResults + : EnrichedDocumentSearchResults + : E extends true + ? EnrichedResults + : DefaultSearchResults; + + export type DocumentSearchResultsWrapper< + D extends DocumentData = DocumentData, + W extends WorkerType = false, + S extends StorageInterface | boolean = false, + H extends HighlightOptions | boolean = false, + P extends PluckOptions | boolean = false, + R extends boolean = true, + E extends boolean = H extends HighlightOptions ? true : false, M extends boolean = false > = R extends true - ? P extends false - ? M extends true - ? MergedDocumentSearchResults - : E extends true - ? EnrichedDocumentSearchResults - : H extends false - ? DefaultDocumentSearchResults - : EnrichedDocumentSearchResults - : E extends true - ? EnrichedResults - : DefaultSearchResults - : Resolver; + ? W extends false + ? S extends false + ? DocumentSearchResults + : Promise> + : Promise> + : W extends false + ? S extends false + ? Resolver + : Promise> + : Promise>; /** * **Document:** @@ -534,7 +553,7 @@ declare module "flexsearch" { H extends HighlightOptions | boolean = false, P extends PluckOptions | boolean = false, R extends boolean = true, - E extends boolean = false, + E extends boolean = H extends HighlightOptions ? true : false, M extends boolean = false, > = SearchOptions & { tag?: {[field: FieldName]: TagName} | Array<{[field: FieldName]: TagName}>; @@ -557,21 +576,6 @@ declare module "flexsearch" { [key: string]: DocumentValue | DocumentValue[]; }; - export type DocumentSearchResultsWrapper< - D extends DocumentData = DocumentData, - W extends WorkerType = false, - S extends StorageInterface | boolean = false, - H extends HighlightOptions | boolean = false, - P extends PluckOptions | boolean = false, - R extends boolean = true, - E extends boolean = false, - M extends boolean = false - > = W extends false - ? S extends false - ? DocumentSearchResults - : Promise> - : Promise> - /** * Basic usage and variants: https://github.com/nextapps-de/flexsearch#basic-usage-and-variants \ * API overview: https://github.com/nextapps-de/flexsearch#api-overview \ @@ -626,7 +630,7 @@ declare module "flexsearch" { H extends HighlightOptions | boolean = false, P extends PluckOptions | boolean = false, R extends boolean = true, - E extends boolean = false, + E extends boolean = H extends HighlightOptions ? true : false, M extends boolean = false >( query: string, @@ -636,7 +640,7 @@ declare module "flexsearch" { H extends HighlightOptions | boolean = false, P extends PluckOptions | boolean = false, R extends boolean = true, - E extends boolean = false, + E extends boolean = H extends HighlightOptions ? true : false, M extends boolean = false >( query: string, @@ -648,7 +652,7 @@ declare module "flexsearch" { H extends HighlightOptions | boolean = false, P extends PluckOptions | boolean = false, R extends boolean = true, - E extends boolean = false, + E extends boolean = H extends HighlightOptions ? true : false, M extends boolean = false >( query: string, @@ -660,7 +664,7 @@ declare module "flexsearch" { H extends HighlightOptions | boolean = false, P extends PluckOptions | boolean = false, R extends boolean = true, - E extends boolean = false, + E extends boolean = H extends HighlightOptions ? true : false, M extends boolean = false >( query: string, @@ -672,7 +676,7 @@ declare module "flexsearch" { H extends HighlightOptions | boolean = false, P extends PluckOptions | boolean = false, R extends boolean = true, - E extends boolean = false, + E extends boolean = H extends HighlightOptions ? true : false, M extends boolean = false >( options: DocumentSearchOptions, @@ -681,7 +685,7 @@ declare module "flexsearch" { H extends HighlightOptions | boolean = false, P extends PluckOptions | boolean = false, R extends boolean = true, - E extends boolean = false, + E extends boolean = H extends HighlightOptions ? true : false, M extends boolean = false >( options: DocumentSearchOptions, @@ -766,118 +770,118 @@ declare module "flexsearch" { H extends HighlightOptions | boolean = false, P extends PluckOptions | boolean = false, R extends boolean = true, - E extends boolean = false, + E extends boolean = H extends HighlightOptions ? true : false, M extends boolean = false >( query: string, - callback?: AsyncCallback>, - ): Promise> + callback?: AsyncCallback>, + ): Promise> searchCacheAsync< H extends HighlightOptions | boolean = false, P extends PluckOptions | boolean = false, R extends boolean = true, - E extends boolean = false, + E extends boolean = H extends HighlightOptions ? true : false, M extends boolean = false >( query: string, - callback?: AsyncCallback>, - ): Promise> + callback?: AsyncCallback>, + ): Promise> /** @deprecated Pass "limit" within options */ searchAsync< H extends HighlightOptions | boolean = false, P extends PluckOptions | boolean = false, R extends boolean = true, - E extends boolean = false, + E extends boolean = H extends HighlightOptions ? true : false, M extends boolean = false >( query: string, limit: Limit, - callback?: AsyncCallback>, - ): Promise> + callback?: AsyncCallback>, + ): Promise> /** @deprecated Pass "limit" within options */ searchCacheAsync< H extends HighlightOptions | boolean = false, P extends PluckOptions | boolean = false, R extends boolean = true, - E extends boolean = false, + E extends boolean = H extends HighlightOptions ? true : false, M extends boolean = false >( query: string, limit: Limit, - callback?: AsyncCallback>, - ): Promise> + callback?: AsyncCallback>, + ): Promise> /** @deprecated Pass "limit" within options */ searchAsync< H extends HighlightOptions | boolean = false, P extends PluckOptions | boolean = false, R extends boolean = true, - E extends boolean = false, + E extends boolean = H extends HighlightOptions ? true : false, M extends boolean = false >( query: string, limit: Limit, options?: DocumentSearchOptions, - callback?: AsyncCallback>, - ): Promise>; + callback?: AsyncCallback>, + ): Promise>; /** @deprecated Pass "limit" within options */ searchCacheAsync< H extends HighlightOptions | boolean = false, P extends PluckOptions | boolean = false, R extends boolean = true, - E extends boolean = false, + E extends boolean = H extends HighlightOptions ? true : false, M extends boolean = false >( query: string, limit: Limit, options?: DocumentSearchOptions, - callback?: AsyncCallback>, - ): Promise>; + callback?: AsyncCallback>, + ): Promise>; searchAsync< H extends HighlightOptions | boolean = false, P extends PluckOptions | boolean = false, R extends boolean = true, - E extends boolean = false, + E extends boolean = H extends HighlightOptions ? true : false, M extends boolean = false >( query: string, options?: DocumentSearchOptions, - callback?: AsyncCallback>, - ): Promise> + callback?: AsyncCallback>, + ): Promise> searchCacheAsync< H extends HighlightOptions | boolean = false, P extends PluckOptions | boolean = false, R extends boolean = true, - E extends boolean = false, + E extends boolean = H extends HighlightOptions ? true : false, M extends boolean = false >( query: string, options?: DocumentSearchOptions, - callback?: AsyncCallback>, - ): Promise> + callback?: AsyncCallback>, + ): Promise> searchAsync< H extends HighlightOptions | boolean = false, P extends PluckOptions | boolean = false, R extends boolean = true, - E extends boolean = false, + E extends boolean = H extends HighlightOptions ? true : false, M extends boolean = false >( options: DocumentSearchOptions, - callback?: AsyncCallback>, - ): Promise>; + callback?: AsyncCallback>, + ): Promise>; searchCacheAsync< H extends HighlightOptions | boolean = false, P extends PluckOptions | boolean = false, R extends boolean = true, - E extends boolean = false, + E extends boolean = H extends HighlightOptions ? true : false, M extends boolean = false >( options: DocumentSearchOptions, - callback?: AsyncCallback>, - ): Promise>; + callback?: AsyncCallback>, + ): Promise>; } type IdType = @@ -902,7 +906,7 @@ declare module "flexsearch" { "uint64" | "bigint"; - type PersistentOptions = { + export type PersistentOptions = { name?: string; type?: IdType; db?: any; @@ -910,7 +914,6 @@ declare module "flexsearch" { export type DefaultResolve< D extends DocumentData = undefined, - H extends HighlightOptions | boolean = false, R extends boolean = true, E extends boolean = false > = { @@ -921,10 +924,6 @@ declare module "flexsearch" { enrich?: D extends DocumentData ? R extends true ? E : false : false; - /** only usable when "resolve" was not set to false */ - highlight?: D extends DocumentData - ? R extends true ? H : false - : false; }; export type ResolverOptions< @@ -933,8 +932,8 @@ declare module "flexsearch" { S extends StorageInterface | boolean = false, H extends HighlightOptions | boolean = false, R extends boolean = false, - E extends boolean = false - > = DefaultResolve & { + E extends boolean = H extends HighlightOptions ? true : false + > = DefaultResolve & { query?: string; index?: Index | Document; pluck?: FieldName; @@ -946,6 +945,10 @@ declare module "flexsearch" { not?: ResolverOptions | Array>; boost?: number; suggest?: boolean; + /** only usable when "resolve" was not set to false */ + highlight?: D extends DocumentData + ? R extends true ? H : false + : false; }; export type HighlightBoundaryOptions = { @@ -988,23 +991,42 @@ declare module "flexsearch" { export class Resolver< D extends DocumentData = undefined, W extends WorkerType = false, - S extends StorageInterface | boolean = false + S extends StorageInterface | boolean = false, + H extends HighlightOptions | boolean = false, + R extends boolean = false, + E extends boolean = H extends HighlightOptions ? true : false > { result: IntermediateSearchResults; constructor(options?: ResolverOptions | IntermediateSearchResults); - and(...args: ResolverOptions[]): - IndexSearchResultsWrapper; + and(...args: ResolverOptions[]): + DocumentSearchResultsWrapper; - or(...args: ResolverOptions[]): - IndexSearchResultsWrapper; + or(...args: ResolverOptions[]): + DocumentSearchResultsWrapper; - xor(...args: ResolverOptions[]): - IndexSearchResultsWrapper; + xor(...args: ResolverOptions[]): + DocumentSearchResultsWrapper; - not(...args: ResolverOptions[]): - IndexSearchResultsWrapper; + not(...args: ResolverOptions[]): + DocumentSearchResultsWrapper; limit(limit: number): Resolver; @@ -1012,7 +1034,7 @@ declare module "flexsearch" { boost(boost: number): Resolver; - resolve(options?: DefaultResolve): IndexSearchResultsWrapper; + resolve(options?: DefaultResolve): DocumentSearchResultsWrapper; } export class StorageInterface { @@ -1067,8 +1089,8 @@ declare module "flexsearch/db/*" { declare module "flexsearch/lang/*" { import { EncoderOptions } from "flexsearch"; - const Options: EncoderOptions; - export default Options; + //const Options: EncoderOptions; + export default EncoderOptions; } // https://www.typescriptlang.org/docs/handbook/jsdoc-supported-types.html diff --git a/test/types.ts b/test/types.ts index c31bf52..80af636 100644 --- a/test/types.ts +++ b/test/types.ts @@ -48,7 +48,7 @@ async function test_index() { const res3: DefaultSearchResults = res2.resolve(); const res4: Resolver = new Resolver({ index: index3 }); - const res5: Promise> = res4.and(); + const res5: Promise> = res4.and({}); const res6: Promise> = res4.and({ index: index3 }); const res7: Promise = (await res6).limit(100).resolve(); @@ -89,14 +89,14 @@ async function test_index() { async function test_document() { - // ---------------------------------------------------------------- - - const document = new Document<{ + type doctype = { id: number, title: string, description: string, tags: string[] - }>({ + }; + + const document = new Document({ encoder: "LatinBalance", resolution: 9, context: false, @@ -108,7 +108,7 @@ async function test_document() { }, }); - type doctype = { + type doctype2 = { id: number, meta: { title: string, @@ -117,7 +117,7 @@ async function test_document() { } }; - const document2 = new Document({ + const document2 = new Document({ document: { id: "id", store: [{ @@ -176,25 +176,25 @@ async function test_document() { const doc11: Promise = document.searchCacheAsync({}); const doc13: DefaultDocumentSearchResults = document.search({ resolve: true }); - const doc14: Resolver = document.search({ resolve: false }); + const doc14: Resolver = document.search({ resolve: false }); const doc15: DefaultSearchResults = doc14.resolve({}); const doc16: DefaultSearchResults = doc14.and({ resolve: true }); const doc17: EnrichedResults = doc14.resolve({ enrich: true }); const doc18: EnrichedResults = doc14.and({ resolve: true, enrich: true }); - const doc19: Resolver = doc14.and({ index: document, field: "title" }); - const doc20: Resolver = doc19.or({ index: document2, pluck: "meta:title" }); + const doc19: Resolver = doc14.and({ index: document, field: "title" }); + const doc20: Resolver = doc19.or({ index: document2, pluck: "meta:title" }); const doc21: DefaultSearchResults = doc20.resolve(); const doc22: EnrichedResults = doc20.resolve({ enrich: true }); // highlight within last resolver stage is work in progress: const doc23: EnrichedResults = doc20.and({ resolve: true, highlight: { template: "", boundary: {} } }); - const doc24: Resolver = new Resolver({ index: document }); - const doc25: EnrichedResults = doc24.and({}, { index: document2, resolve: true, enrich: true }); + const doc24: Resolver = new Resolver({ index: document2 }); + const doc25: EnrichedResults = doc24.and({}, { index: document, resolve: true, enrich: true }); const doc26: EnrichedResults = doc24.and({}, { index: document2 }).resolve({ enrich: true }); // highlight within last resolver stage is work in progress: const doc27: EnrichedResults = doc24.and({}, { index: document2, resolve: true, highlight: "" }); const doc28: DefaultSearchResults = document2.search({ pluck: { field: "meta:title", limit: 10 } }); - const doc30: EnrichedResults = document2.search({ pluck: { field: "meta:title", highlight: true } }); + const doc30: EnrichedResults = document2.search({ highlight: true, enrich: true, pluck: { field: "meta:title"} }); // highlight on .resolve() is never supported: // @ts-expect-error