diff --git a/spec/search/lexer.spec.js b/spec/search/lexer.spec.js index 20221e9a0..1533bf56a 100644 --- a/spec/search/lexer.spec.js +++ b/spec/search/lexer.spec.js @@ -1,4 +1,4 @@ -const lex = require('../../src/services/search/services/lex.js'); +const lex = require('../../src/services/search/services/lex'); describe("Lexer fulltext", () => { it("simple lexing", () => { diff --git a/src/services/search/services/lex.js b/src/services/search/services/lex.ts similarity index 87% rename from src/services/search/services/lex.js rename to src/services/search/services/lex.ts index ddee0840f..046fe6870 100644 --- a/src/services/search/services/lex.js +++ b/src/services/search/services/lex.ts @@ -1,16 +1,22 @@ -function lex(str) { +interface TokenData { + token: string; + inQuotes: boolean; + startIndex: number; + endIndex: number; +} + +function lex(str: string) { str = str.toLowerCase(); let fulltextQuery = ""; - const fulltextTokens = []; - const expressionTokens = []; + const fulltextTokens: TokenData[] = []; + const expressionTokens: TokenData[] = []; - /** @type {boolean|string} */ - let quotes = false; // otherwise contains used quote - ', " or ` + let quotes: boolean | string = false; // otherwise contains used quote - ', " or ` let fulltextEnded = false; let currentWord = ''; - function isSymbolAnOperator(chr) { + function isSymbolAnOperator(chr: string) { return ['=', '*', '>', '<', '!', "-", "+", '%', ','].includes(chr); } @@ -23,12 +29,12 @@ function lex(str) { } } - function finishWord(endIndex, createAlsoForEmptyWords = false) { + function finishWord(endIndex: number, createAlsoForEmptyWords = false) { if (currentWord === '' && !createAlsoForEmptyWords) { return; } - const rec = { + const rec: TokenData = { token: currentWord, inQuotes: !!quotes, startIndex: endIndex - currentWord.length + 1, @@ -146,4 +152,4 @@ function lex(str) { } } -module.exports = lex; +export = lex; diff --git a/src/services/search/services/search.js b/src/services/search/services/search.js index a8bf7d591..0ca74eb26 100644 --- a/src/services/search/services/search.js +++ b/src/services/search/services/search.js @@ -1,7 +1,7 @@ "use strict"; const normalizeString = require("normalize-strings"); -const lex = require('./lex.js'); +const lex = require('./lex'); const handleParens = require('./handle_parens'); const parse = require('./parse.js'); const SearchResult = require('../search_result');