diff --git a/bun.lockb b/bun.lockb index 8f40c8c..65916bf 100755 Binary files a/bun.lockb and b/bun.lockb differ diff --git a/package.json b/package.json index 70f3771..717d67f 100644 --- a/package.json +++ b/package.json @@ -58,7 +58,7 @@ "@tabler/icons-react": "^3.19.0", "@tanstack/react-query": "^5.32.0", "@types/bytes": "^3.1.4", - "@upstash/redis": "1.37.0-rc.12", + "@upstash/redis": "1.37.0", "bytes": "^3.1.2", "cmdk": "^1.1.1", "react-hook-form": "^7.53.0", diff --git a/src/components/databrowser/components/search/generate-schema-type-definitions.tsx b/src/components/databrowser/components/search/generate-schema-type-definitions.tsx index fe0ac8b..acd58dd 100644 --- a/src/components/databrowser/components/search/generate-schema-type-definitions.tsx +++ b/src/components/databrowser/components/search/generate-schema-type-definitions.tsx @@ -116,11 +116,31 @@ declare class DateFieldBuilder = { from: TFrom["from"]; } : { type: "DATE" }; } -declare class KeywordFieldBuilder { - [BUILD](): { type: "KEYWORD" }; +declare class KeywordFieldBuilder = { + from: null; +}> { + private _from; + constructor(from?: TFrom); + from(field: string): KeywordFieldBuilder<{ + from: string; + }>; + [BUILD](): TFrom["from"] extends string ? { + type: "KEYWORD"; + from: TFrom["from"]; + } : { type: "KEYWORD" }; } -declare class FacetFieldBuilder { - [BUILD](): { type: "FACET" }; +declare class FacetFieldBuilder = { + from: null; +}> { + private _from; + constructor(from?: TFrom); + from(field: string): FacetFieldBuilder<{ + from: string; + }>; + [BUILD](): TFrom["from"] extends string ? { + type: "FACET"; + from: TFrom["from"]; + } : { type: "FACET" }; } type FieldBuilder = TextFieldBuilder<{ noTokenize: boolean; @@ -138,7 +158,11 @@ type FieldBuilder = TextFieldBuilder<{ fast: boolean; }, { from: string | null; -}> | KeywordFieldBuilder | FacetFieldBuilder; +}> | KeywordFieldBuilder<{ + from: string | null; +}> | FacetFieldBuilder<{ + from: string | null; +}>; declare const s: { string(): TextFieldBuilder; number(type?: T): NumericFieldBuilder; diff --git a/src/components/databrowser/components/search/schema-parser.ts b/src/components/databrowser/components/search/schema-parser.ts index 5d2e946..be51b14 100644 --- a/src/components/databrowser/components/search/schema-parser.ts +++ b/src/components/databrowser/components/search/schema-parser.ts @@ -338,12 +338,20 @@ function parseFieldBuilder(str: string, fieldName: string): FieldValue | undefin // s.keyword() if (str.startsWith("s.keyword()")) { - return "KEYWORD" + const fromValue = extractFromValue(str) + + if (fromValue === undefined) return "KEYWORD" + + return { type: "KEYWORD", from: fromValue } } // s.facet() if (str.startsWith("s.facet()")) { - return "FACET" + const fromValue = extractFromValue(str) + + if (fromValue === undefined) return "FACET" + + return { type: "FACET", from: fromValue } } // Check if it looks like a field builder but is unrecognized diff --git a/src/components/databrowser/components/search/search-types-file.ts b/src/components/databrowser/components/search/search-types-file.ts index 7a489ba..a08c490 100644 --- a/src/components/databrowser/components/search/search-types-file.ts +++ b/src/components/databrowser/components/search/search-types-file.ts @@ -39,10 +39,12 @@ export type DateField = { export type KeywordField = { type: "KEYWORD"; + from?: string; }; export type FacetField = { type: "FACET"; + from?: string; }; export type DetailedField =