MCPcopy Create free account
hub / github.com/RealDevSquad/website-backend / RQLQueryParser

Class RQLQueryParser

utils/RQLParser.ts:15–95  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

13const SORT_KEY = "sort";
14
15export class RQLQueryParser {
16 private queryString: string;
17 private parsedQueriesList: Queries[];
18
19 constructor(queryString: string) {
20 this.queryString = queryString;
21 this.parsedQueriesList = this.parseQueries();
22 }
23
24 private parseKeyValue(keyValuePair: string): Queries {
25 const [key, value] = keyValuePair.split(KEY_VALUE_DELIMITER);
26
27 if (!key || !value) {
28 throw TypeError("Expected a value, but found empty string.");
29 }
30 const query: Queries = {
31 operator: Operators.INCLUDE,
32 value: value.trim(),
33 type: QueryTypes.FILTER,
34 key: key.trim(),
35 };
36
37 if (query.key === SORT_KEY) {
38 const [key, value] = query.value.split(SORT_DELIMITER);
39 query.key = key.trim();
40 query.value = value.trim();
41 query.type = QueryTypes.SORT;
42 }
43
44 if (query.type === QueryTypes.FILTER && query.key.charAt(0) === EXCLUDE_SYMBOL) {
45 query.key = query.key.substring(1);
46 query.operator = Operators.EXCLUDE;
47 }
48
49 return query;
50 }
51
52 private parseQueries(): Queries[] {
53 const parsedQueriesList: Queries[] = [];
54 if (!this.queryString) {
55 return parsedQueriesList;
56 }
57 try {
58 const queryList = this.queryString.split(KEY_VALUE_PAIR_DELIMITER_PATTERN);
59
60 for (const query of queryList) {
61 parsedQueriesList.push(this.parseKeyValue(query));
62 }
63 } catch (error) {
64 logger.error(`Error occurred while parsing query params ${error}`);
65 throw Error("Invalid query param format");
66 }
67 return parsedQueriesList;
68 }
69
70 getFilterQueries(): GroupedFilterQueries {
71 const filterQueries: GroupedFilterQueries = {};
72 for (const query of this.parsedQueriesList) {

Callers

nothing calls this directly

Calls

no outgoing calls

Tested by

no test coverage detected