1
0
mirror of https://github.com/nextapps-de/flexsearch.git synced 2025-08-28 08:10:54 +02:00

resolver types within index.d.ts

This commit is contained in:
Thomas Wilkerling
2025-05-10 12:10:38 +02:00
parent 5c341e4295
commit 32f08a2439
2 changed files with 127 additions and 105 deletions

206
index.d.ts vendored
View File

@@ -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<D, W, S>
: Resolver<undefined, W, S>
/**
* 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<W, S, R, D>
: Promise<SearchResults<W, S, R, D>>
: Promise<SearchResults<W, S, R, D>>
? SearchResults<W, S, R>
: Promise<SearchResults<W, S, R>>
: Promise<SearchResults<W, S, R>>
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<D> | DocumentSearchOptions<D, H, true, R, E>;
export type DocumentSearchResults<
@@ -509,21 +509,40 @@ declare module "flexsearch" {
H extends HighlightOptions | boolean = false,
P extends PluckOptions<D, H, R, E> | 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<D>
: E extends true
? EnrichedDocumentSearchResults<D>
: H extends false
? DefaultDocumentSearchResults<D>
: EnrichedDocumentSearchResults<D>
: E extends true
? EnrichedResults<D>
: 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<D, H, R, E> | 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<D>
: E extends true
? EnrichedDocumentSearchResults<D>
: H extends false
? DefaultDocumentSearchResults<D>
: EnrichedDocumentSearchResults<D>
: E extends true
? EnrichedResults<D>
: DefaultSearchResults
: Resolver;
? W extends false
? S extends false
? DocumentSearchResults<D, H, P, R, E, M>
: Promise<DocumentSearchResults<D, H, P, R, E, M>>
: Promise<DocumentSearchResults<D, H, P, R, E, M>>
: W extends false
? S extends false
? Resolver<D, W, S, H, R, E>
: Promise<Resolver<D, W, S, H, R, E>>
: Promise<Resolver<D, W, S, H, R, E>>;
/**
* **Document:**
@@ -534,7 +553,7 @@ declare module "flexsearch" {
H extends HighlightOptions | boolean = false,
P extends PluckOptions<D, H, R, E> | boolean = false,
R extends boolean = true,
E extends boolean = false,
E extends boolean = H extends HighlightOptions ? true : false,
M extends boolean = false,
> = SearchOptions<R> & {
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<D, H, R, E> | boolean = false,
R extends boolean = true,
E extends boolean = false,
M extends boolean = false
> = W extends false
? S extends false
? DocumentSearchResults<D, H, P, R, E, M>
: Promise<DocumentSearchResults<D, H, P, R, E, M>>
: Promise<DocumentSearchResults<D, H, P, R, E, M>>
/**
* 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<D, H, R, E> | 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<D, H, R, E> | 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<D, H, R, E> | 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<D, H, R, E> | 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<D, H, R, E> | boolean = false,
R extends boolean = true,
E extends boolean = false,
E extends boolean = H extends HighlightOptions ? true : false,
M extends boolean = false
>(
options: DocumentSearchOptions<D, H, P, R, E, M>,
@@ -681,7 +685,7 @@ declare module "flexsearch" {
H extends HighlightOptions | boolean = false,
P extends PluckOptions<D, H, R, E> | boolean = false,
R extends boolean = true,
E extends boolean = false,
E extends boolean = H extends HighlightOptions ? true : false,
M extends boolean = false
>(
options: DocumentSearchOptions<D, H, P, R, E, M>,
@@ -766,118 +770,118 @@ declare module "flexsearch" {
H extends HighlightOptions | boolean = false,
P extends PluckOptions<D, H, R, E> | 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<DocumentSearchResults<D, H, P, R, E, M>>,
): Promise<DocumentSearchResults<D, H, P, R, E, M>>
callback?: AsyncCallback<DocumentSearchResultsWrapper<D, W, S, H, P, R, E, M>>,
): Promise<DocumentSearchResultsWrapper<D, W, S, H, P, R, E, M>>
searchCacheAsync<
H extends HighlightOptions | boolean = false,
P extends PluckOptions<D, H, R, E> | 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<DocumentSearchResults<D, H, P, R, E, M>>,
): Promise<DocumentSearchResults<D, H, P, R, E, M>>
callback?: AsyncCallback<DocumentSearchResultsWrapper<D, W, S, H, P, R, E, M>>,
): Promise<DocumentSearchResultsWrapper<D, W, S, H, P, R, E, M>>
/** @deprecated Pass "limit" within options */
searchAsync<
H extends HighlightOptions | boolean = false,
P extends PluckOptions<D, H, R, E> | 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<DocumentSearchResults<D, H, P, R, E, M>>,
): Promise<DocumentSearchResults<D, H, P, R, E, M>>
callback?: AsyncCallback<DocumentSearchResultsWrapper<D, W, S, H, P, R, E, M>>,
): Promise<DocumentSearchResultsWrapper<D, W, S, H, P, R, E, M>>
/** @deprecated Pass "limit" within options */
searchCacheAsync<
H extends HighlightOptions | boolean = false,
P extends PluckOptions<D, H, R, E> | 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<DocumentSearchResults<D, H, P, R, E, M>>,
): Promise<DocumentSearchResults<D, H, P, R, E, M>>
callback?: AsyncCallback<DocumentSearchResultsWrapper<D, W, S, H, P, R, E, M>>,
): Promise<DocumentSearchResultsWrapper<D, W, S, H, P, R, E, M>>
/** @deprecated Pass "limit" within options */
searchAsync<
H extends HighlightOptions | boolean = false,
P extends PluckOptions<D, H, R, E> | 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<D, H, P, R, E, M>,
callback?: AsyncCallback<DocumentSearchResults<D, H, P, R, E, M>>,
): Promise<DocumentSearchResults<D, H, P, R, E, M>>;
callback?: AsyncCallback<DocumentSearchResultsWrapper<D, W, S, H, P, R, E, M>>,
): Promise<DocumentSearchResultsWrapper<D, W, S, H, P, R, E, M>>;
/** @deprecated Pass "limit" within options */
searchCacheAsync<
H extends HighlightOptions | boolean = false,
P extends PluckOptions<D, H, R, E> | 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<D, H, P, R, E, M>,
callback?: AsyncCallback<DocumentSearchResults<D, H, P, R, E, M>>,
): Promise<DocumentSearchResults<D, H, P, R, E, M>>;
callback?: AsyncCallback<DocumentSearchResultsWrapper<D, W, S, H, P, R, E, M>>,
): Promise<DocumentSearchResultsWrapper<D, W, S, H, P, R, E, M>>;
searchAsync<
H extends HighlightOptions | boolean = false,
P extends PluckOptions<D, H, R, E> | 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<D, H, P, R, E, M>,
callback?: AsyncCallback<DocumentSearchResults<D, H, P, R, E, M>>,
): Promise<DocumentSearchResults<D, H, P, R, E, M>>
callback?: AsyncCallback<DocumentSearchResultsWrapper<D, W, S, H, P, R, E, M>>,
): Promise<DocumentSearchResultsWrapper<D, W, S, H, P, R, E, M>>
searchCacheAsync<
H extends HighlightOptions | boolean = false,
P extends PluckOptions<D, H, R, E> | 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<D, H, P, R, E, M>,
callback?: AsyncCallback<DocumentSearchResults<D, H, P, R, E, M>>,
): Promise<DocumentSearchResults<D, H, P, R, E, M>>
callback?: AsyncCallback<DocumentSearchResultsWrapper<D, W, S, H, P, R, E, M>>,
): Promise<DocumentSearchResultsWrapper<D, W, S, H, P, R, E, M>>
searchAsync<
H extends HighlightOptions | boolean = false,
P extends PluckOptions<D, H, R, E> | boolean = false,
R extends boolean = true,
E extends boolean = false,
E extends boolean = H extends HighlightOptions ? true : false,
M extends boolean = false
>(
options: DocumentSearchOptions<D, H, P, R, E, M>,
callback?: AsyncCallback<DocumentSearchResults<D, H, P, R, E, M>>,
): Promise<DocumentSearchResults<D, H, P, R, E, M>>;
callback?: AsyncCallback<DocumentSearchResultsWrapper<D, W, S, H, P, R, E, M>>,
): Promise<DocumentSearchResultsWrapper<D, W, S, H, P, R, E, M>>;
searchCacheAsync<
H extends HighlightOptions | boolean = false,
P extends PluckOptions<D, H, R, E> | boolean = false,
R extends boolean = true,
E extends boolean = false,
E extends boolean = H extends HighlightOptions ? true : false,
M extends boolean = false
>(
options: DocumentSearchOptions<D, H, P, R, E, M>,
callback?: AsyncCallback<DocumentSearchResults<D, H, P, R, E, M>>,
): Promise<DocumentSearchResults<D, H, P, R, E, M>>;
callback?: AsyncCallback<DocumentSearchResultsWrapper<D, W, S, H, P, R, E, M>>,
): Promise<DocumentSearchResultsWrapper<D, W, S, H, P, R, E, M>>;
}
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<D, H, R, E> & {
E extends boolean = H extends HighlightOptions ? true : false
> = DefaultResolve<D, R, E> & {
query?: string;
index?: Index<W, S> | Document<D, W, S>;
pluck?: FieldName<D>;
@@ -946,6 +945,10 @@ declare module "flexsearch" {
not?: ResolverOptions<D, W, S, H, R, E> | Array<ResolverOptions<D, W, S, H, R, E>>;
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<D, W, S> | IntermediateSearchResults);
and<R extends boolean = false>(...args: ResolverOptions<D, W, S, false, R>[]):
IndexSearchResultsWrapper<W, S, R, D>;
and<d extends DocumentData = D,
h extends HighlightOptions | boolean = H,
r extends boolean = R,
e extends boolean = h extends HighlightOptions ? true : E
>(...args: ResolverOptions<d, W, S, h, r, e>[]):
DocumentSearchResultsWrapper<d, W, S, h, true, r, e>;
or<R extends boolean = false>(...args: ResolverOptions<D, W, S, false, R>[]):
IndexSearchResultsWrapper<W, S, R, D>;
or<d extends DocumentData = D,
h extends HighlightOptions | boolean = H,
r extends boolean = R,
e extends boolean = h extends HighlightOptions ? true : E
>(...args: ResolverOptions<d, W, S, h, r, e>[]):
DocumentSearchResultsWrapper<d, W, S, h, true, r, e>;
xor<R extends boolean = false>(...args: ResolverOptions<D, W, S, false, R>[]):
IndexSearchResultsWrapper<W, S, R, D>;
xor<d extends DocumentData = D,
h extends HighlightOptions | boolean = H,
r extends boolean = R,
e extends boolean = h extends HighlightOptions ? true : E
>(...args: ResolverOptions<d, W, S, h, r, e>[]):
DocumentSearchResultsWrapper<d, W, S, h, true, r, e>;
not<R extends boolean = false>(...args: ResolverOptions<D, W, S, false, R>[]):
IndexSearchResultsWrapper<W, S, R, D>;
not<d extends DocumentData = D,
h extends HighlightOptions | boolean = H,
r extends boolean = R,
e extends boolean = h extends HighlightOptions ? true : E
>(...args: ResolverOptions<d, W, S, h, r, e>[]):
DocumentSearchResultsWrapper<d, W, S, h, true, r, e>;
limit(limit: number): Resolver<D, W, S>;
@@ -1012,7 +1034,7 @@ declare module "flexsearch" {
boost(boost: number): Resolver<D, W, S>;
resolve(options?: DefaultResolve<D>): IndexSearchResultsWrapper<W, S, true, D>;
resolve<e extends boolean = E>(options?: DefaultResolve<D, true, e>): DocumentSearchResultsWrapper<D, W, S, false, true, true, e>;
}
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

View File

@@ -48,7 +48,7 @@ async function test_index() {
const res3: DefaultSearchResults = res2.resolve();
const res4: Resolver<undefined, false, IndexedDB> = new Resolver({ index: index3 });
const res5: Promise<Resolver<undefined, false, IndexedDB>> = res4.and();
const res5: Promise<Resolver<undefined, false, IndexedDB>> = res4.and({});
const res6: Promise<Resolver<undefined, false, IndexedDB>> = res4.and({ index: index3 });
const res7: Promise<DefaultSearchResults> = (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<doctype>({
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<doctype>({
const document2 = new Document<doctype2>({
document: {
id: "id",
store: [{
@@ -176,25 +176,25 @@ async function test_document() {
const doc11: Promise<DefaultDocumentSearchResults> = document.searchCacheAsync({});
const doc13: DefaultDocumentSearchResults = document.search({ resolve: true });
const doc14: Resolver = document.search({ resolve: false });
const doc14: Resolver<doctype> = 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<doctype> = doc14.and({ index: document, field: "title" });
const doc20: Resolver<doctype2> = 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<doctype2> = 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