From deed58c2fc0f33a92c6ee048d97474e8cc01c63e Mon Sep 17 00:00:00 2001 From: Elian Doran Date: Sun, 18 Feb 2024 01:38:51 +0200 Subject: [PATCH] server-ts: Port services/search/services/handle_parens --- spec/search/parens.spec.js | 2 +- .../{handle_parens.js => handle_parens.ts} | 21 +++++++++++++------ src/services/search/services/search.js | 2 +- 3 files changed, 17 insertions(+), 8 deletions(-) rename src/services/search/services/{handle_parens.js => handle_parens.ts} (65%) diff --git a/spec/search/parens.spec.js b/spec/search/parens.spec.js index d79cfd6ea..ae1ac5b2f 100644 --- a/spec/search/parens.spec.js +++ b/spec/search/parens.spec.js @@ -1,4 +1,4 @@ -const handleParens = require('../../src/services/search/services/handle_parens.js'); +const handleParens = require('../../src/services/search/services/handle_parens'); describe("Parens handler", () => { it("handles parens", () => { diff --git a/src/services/search/services/handle_parens.js b/src/services/search/services/handle_parens.ts similarity index 65% rename from src/services/search/services/handle_parens.js rename to src/services/search/services/handle_parens.ts index 14ff58b0a..3be25bf46 100644 --- a/src/services/search/services/handle_parens.js +++ b/src/services/search/services/handle_parens.ts @@ -1,13 +1,17 @@ +interface Token { + token: string; +} + /** * This will create a recursive object from a list of tokens - tokens between parenthesis are grouped in a single array */ -function handleParens(tokens) { +function handleParens(tokens: (Token | Token[])[]) { if (tokens.length === 0) { return []; } while (true) { - const leftIdx = tokens.findIndex(token => token.token === '('); + const leftIdx = tokens.findIndex(token => "token" in token && token.token === '('); if (leftIdx === -1) { return tokens; @@ -17,13 +21,18 @@ function handleParens(tokens) { let parensLevel = 0 for (rightIdx = leftIdx; rightIdx < tokens.length; rightIdx++) { - if (tokens[rightIdx].token === ')') { + const token = tokens[rightIdx]; + if (!("token" in token)) { + continue; + } + + if (token.token === ')') { parensLevel--; if (parensLevel === 0) { break; } - } else if (tokens[rightIdx].token === '(') { + } else if (token.token === '(') { parensLevel++; } } @@ -36,8 +45,8 @@ function handleParens(tokens) { ...tokens.slice(0, leftIdx), handleParens(tokens.slice(leftIdx + 1, rightIdx)), ...tokens.slice(rightIdx + 1) - ]; + ] as (Token | Token[])[]; } } -module.exports = handleParens; +export = handleParens; diff --git a/src/services/search/services/search.js b/src/services/search/services/search.js index 4c2291a33..a8bf7d591 100644 --- a/src/services/search/services/search.js +++ b/src/services/search/services/search.js @@ -2,7 +2,7 @@ const normalizeString = require("normalize-strings"); const lex = require('./lex.js'); -const handleParens = require('./handle_parens.js'); +const handleParens = require('./handle_parens'); const parse = require('./parse.js'); const SearchResult = require('../search_result'); const SearchContext = require('../search_context');