From 0c87fab550d03712294994c39e2d6513c981727c Mon Sep 17 00:00:00 2001 From: Elian Doran Date: Thu, 18 Jul 2024 22:18:10 +0300 Subject: [PATCH] server-esm: Fix wonderful token type mismatch --- spec/search/parens.spec.ts | 28 ++++++++++--------- src/services/search/services/handle_parens.ts | 4 +-- src/services/search/services/parse.ts | 4 +-- src/services/search/services/search.ts | 4 +-- src/services/search/services/types.ts | 2 ++ 5 files changed, 23 insertions(+), 19 deletions(-) diff --git a/spec/search/parens.spec.ts b/spec/search/parens.spec.ts index ae1ac5b2f..bf1482356 100644 --- a/spec/search/parens.spec.ts +++ b/spec/search/parens.spec.ts @@ -1,24 +1,26 @@ -const handleParens = require('../../src/services/search/services/handle_parens'); +import handleParens from "../../src/services/search/services/handle_parens"; +import { TokenStructure } from "../../src/services/search/services/types"; describe("Parens handler", () => { it("handles parens", () => { const input = ["(", "hello", ")", "and", "(", "(", "pick", "one", ")", "and", "another", ")"] .map(token => ({token})); - expect(handleParens(input)) - .toEqual([ + const actual: TokenStructure = [ + [ + {token: "hello"} + ], + {token: "and"}, + [ [ - {token: "hello"} + {token: "pick"}, + {token: "one"} ], {token: "and"}, - [ - [ - {token: "pick"}, - {token: "one"} - ], - {token: "and"}, - {token: "another"} - ] - ]); + {token: "another"} + ] + ]; + + expect(handleParens(input)).toEqual(actual); }); }); diff --git a/src/services/search/services/handle_parens.ts b/src/services/search/services/handle_parens.ts index c33bde37f..a5fb1f227 100644 --- a/src/services/search/services/handle_parens.ts +++ b/src/services/search/services/handle_parens.ts @@ -1,9 +1,9 @@ -import { TokenData } from "./types"; +import { TokenData, TokenStructure } from "./types"; /** * This will create a recursive object from a list of tokens - tokens between parenthesis are grouped in a single array */ -function handleParens(tokens: (TokenData | TokenData[])[]) { +function handleParens(tokens: TokenStructure) { if (tokens.length === 0) { return []; } diff --git a/src/services/search/services/parse.ts b/src/services/search/services/parse.ts index 65a923dc7..f78e6a55a 100644 --- a/src/services/search/services/parse.ts +++ b/src/services/search/services/parse.ts @@ -21,7 +21,7 @@ import utils from "../../utils.js"; import TrueExp from "../expressions/true.js"; import IsHiddenExp from "../expressions/is_hidden.js"; import SearchContext from "../search_context.js"; -import { TokenData } from "./types"; +import { TokenData, TokenStructure } from "./types"; import Expression from "../expressions/expression.js"; function getFulltext(_tokens: TokenData[], searchContext: SearchContext) { @@ -448,7 +448,7 @@ function getExpression(tokens: TokenData[], searchContext: SearchContext, level function parse({fulltextTokens, expressionTokens, searchContext}: { fulltextTokens: TokenData[], - expressionTokens: (TokenData | TokenData[])[], + expressionTokens: TokenStructure, searchContext: SearchContext, originalQuery: string }) { diff --git a/src/services/search/services/search.ts b/src/services/search/services/search.ts index 7be34cbaf..755034477 100644 --- a/src/services/search/services/search.ts +++ b/src/services/search/services/search.ts @@ -13,7 +13,7 @@ import log from "../../log.js"; import hoistedNoteService from "../../hoisted_note.js"; import BNote from "../../../becca/entities/bnote.js"; import BAttribute from "../../../becca/entities/battribute.js"; -import { SearchParams, TokenData } from "./types"; +import { SearchParams, TokenStructure } from "./types"; import Expression from "../expressions/expression.js"; import sql from "../../sql.js"; @@ -273,7 +273,7 @@ function parseQueryToExpression(query: string, searchContext: SearchContext) { const {fulltextQuery, fulltextTokens, expressionTokens} = lex(query); searchContext.fulltextQuery = fulltextQuery; - let structuredExpressionTokens: (TokenData | TokenData[])[]; + let structuredExpressionTokens: TokenStructure; try { structuredExpressionTokens = handleParens(expressionTokens); diff --git a/src/services/search/services/types.ts b/src/services/search/services/types.ts index 09450f760..2b12a3c65 100644 --- a/src/services/search/services/types.ts +++ b/src/services/search/services/types.ts @@ -1,3 +1,5 @@ +export type TokenStructure = (TokenData | TokenStructure)[]; + export interface TokenData { token: string; inQuotes?: boolean;