From 57249b6c93212c414c7b38d29da81ca403df9358 Mon Sep 17 00:00:00 2001 From: Akhil Meka Date: Thu, 1 May 2025 14:36:03 +0530 Subject: [PATCH] add boolean parsing to queryParser --- src/utils/queryParser.ts | 67 +++++++++++++++++++++------------------- 1 file changed, 36 insertions(+), 31 deletions(-) diff --git a/src/utils/queryParser.ts b/src/utils/queryParser.ts index bbc4b9a..4259627 100644 --- a/src/utils/queryParser.ts +++ b/src/utils/queryParser.ts @@ -1,7 +1,7 @@ -import mongoose from "mongoose"; +import mongoose from 'mongoose'; type ParsedQuery = Array< - Record> + Record> >; function convertValue(value: any) { @@ -14,6 +14,10 @@ function convertValue(value: any) { return parseInt(value); } else if (!isNaN(Date.parse(value))) { return new Date(value); + } else if (value === 'true') { + return true; + } else if (value === 'false') { + return false; } else { return value; } @@ -22,25 +26,25 @@ function convertValue(value: any) { export function parse(query: string, validFields: Array): ParsedQuery { const result = []; - let currentStage = "field"; - let token = ""; - let field = ""; - let op = ""; - let value = ""; + let currentStage = 'field'; + let token = ''; + let field = ''; + let op = ''; + let value = ''; let valueArr = []; for (let i = 0; i < query.length; i++) { let char = query[i]; - if (currentStage === "field") { - if (char === "=" || char === "!") { + if (currentStage === 'field') { + if (char === '=' || char === '!') { field = token; - token = ""; - currentStage = "value"; + token = ''; + currentStage = 'value'; - if (char === "=") { - op = "$eq"; + if (char === '=') { + op = '$eq'; } else { - op = "$ne"; + op = '$ne'; i++; } @@ -50,23 +54,23 @@ export function parse(query: string, validFields: Array): ParsedQuery { token += char; } - if (currentStage === "value") { - if (char === "[") { - currentStage = "valueArr"; + if (currentStage === 'value') { + if (char === '[') { + currentStage = 'valueArr'; continue; } - if (char === "," || i == query.length - 1) { + if (char === ',' || i == query.length - 1) { if (i == query.length - 1) token += char; value = token; result.push({ [field]: { [op]: convertValue(value) } }); - token = ""; - field = ""; - op = ""; + token = ''; + field = ''; + op = ''; - currentStage = "field"; + currentStage = 'field'; continue; } @@ -74,25 +78,25 @@ export function parse(query: string, validFields: Array): ParsedQuery { token += char; } - if (currentStage === "valueArr") { - if (char === ",") { + if (currentStage === 'valueArr') { + if (char === ',') { valueArr.push(convertValue(token)); - token = ""; + token = ''; continue; } - if (char === "]") { + if (char === ']') { valueArr.push(convertValue(token)); result.push({ - [field]: { [op === "$eq" ? "$in" : "$nin"]: valueArr }, + [field]: { [op === '$eq' ? '$in' : '$nin']: valueArr }, }); - token = ""; - field = ""; - op = ""; + token = ''; + field = ''; + op = ''; valueArr = []; - currentStage = "field"; + currentStage = 'field'; i++; continue; @@ -102,5 +106,6 @@ export function parse(query: string, validFields: Array): ParsedQuery { } } + console.log(result); return result; }