From 8451e7b8a3754d82f70ae13a58c3c12408205f12 Mon Sep 17 00:00:00 2001 From: Idriss Neumann Date: Tue, 28 Nov 2023 08:20:25 +0100 Subject: [PATCH] Issue #18: add queryParser module --- package-lock.json | 24 ++++++++++++++++++++++++ package.json | 2 ++ src/queryParser.ts | 15 +++++++++++++++ 3 files changed, 41 insertions(+) create mode 100644 src/queryParser.ts diff --git a/package-lock.json b/package-lock.json index 940b05c..e7ebbb0 100644 --- a/package-lock.json +++ b/package-lock.json @@ -15,6 +15,7 @@ "@grafana/runtime": "9.5.14", "@grafana/ui": "9.5.14", "@reduxjs/toolkit": "^1.9.5", + "lucene": "^2.1.1", "react": "17.0.2", "react-dom": "17.0.2", "tslib": "2.5.3" @@ -34,6 +35,7 @@ "@testing-library/user-event": "^14.4.3", "@types/jest": "^29.5.0", "@types/lodash": "^4.14.194", + "@types/lucene": "^2.1.7", "@types/node": "^18.15.11", "@types/react": "17.0.42", "@types/react-dom": "17.0.14", @@ -5720,6 +5722,12 @@ "dev": true, "license": "MIT" }, + "node_modules/@types/lucene": { + "version": "2.1.7", + "resolved": "https://registry.npmjs.org/@types/lucene/-/lucene-2.1.7.tgz", + "integrity": "sha512-i3J0OV0RoJSskOJUa76Hgz09deabWwfJajsUxc1M05HryjPpPEKqtRklKe0+O0XVhdrFIiFO1/SInXpDCacfNA==", + "dev": true + }, "node_modules/@types/node": { "version": "18.16.9", "resolved": "https://registry.npmjs.org/@types/node/-/node-18.16.9.tgz", @@ -13201,6 +13209,11 @@ "node": ">=10" } }, + "node_modules/lucene": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/lucene/-/lucene-2.1.1.tgz", + "integrity": "sha512-l0qCX+pgXEZh/7sYQNG+vzhOIFRPjlJJkQ/irk9n7Ak3d+1MrU6F7IV31KILwFkUn153oLK8a2AIt48DzLdVPg==" + }, "node_modules/lz-string": { "version": "1.4.4", "resolved": "https://registry.npmjs.org/lz-string/-/lz-string-1.4.4.tgz", @@ -23326,6 +23339,12 @@ "integrity": "sha512-r22s9tAS7imvBt2lyHC9B8AGwWnXaYb1tY09oyLkXDs4vArpYJzw09nj8MLx5VfciBPGIb+ZwG0ssYnEPJxn/g==", "dev": true }, + "@types/lucene": { + "version": "2.1.7", + "resolved": "https://registry.npmjs.org/@types/lucene/-/lucene-2.1.7.tgz", + "integrity": "sha512-i3J0OV0RoJSskOJUa76Hgz09deabWwfJajsUxc1M05HryjPpPEKqtRklKe0+O0XVhdrFIiFO1/SInXpDCacfNA==", + "dev": true + }, "@types/node": { "version": "18.16.9", "resolved": "https://registry.npmjs.org/@types/node/-/node-18.16.9.tgz", @@ -28556,6 +28575,11 @@ "yallist": "^4.0.0" } }, + "lucene": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/lucene/-/lucene-2.1.1.tgz", + "integrity": "sha512-l0qCX+pgXEZh/7sYQNG+vzhOIFRPjlJJkQ/irk9n7Ak3d+1MrU6F7IV31KILwFkUn153oLK8a2AIt48DzLdVPg==" + }, "lz-string": { "version": "1.4.4", "resolved": "https://registry.npmjs.org/lz-string/-/lz-string-1.4.4.tgz", diff --git a/package.json b/package.json index 84818f3..1c974aa 100644 --- a/package.json +++ b/package.json @@ -32,6 +32,7 @@ "@testing-library/user-event": "^14.4.3", "@types/jest": "^29.5.0", "@types/lodash": "^4.14.194", + "@types/lucene": "^2.1.7", "@types/node": "^18.15.11", "@types/react": "17.0.42", "@types/react-dom": "17.0.14", @@ -66,6 +67,7 @@ "@grafana/runtime": "9.5.14", "@grafana/ui": "9.5.14", "@reduxjs/toolkit": "^1.9.5", + "lucene": "^2.1.1", "react": "17.0.2", "react-dom": "17.0.2", "tslib": "2.5.3" diff --git a/src/queryParser.ts b/src/queryParser.ts new file mode 100644 index 0000000..4537354 --- /dev/null +++ b/src/queryParser.ts @@ -0,0 +1,15 @@ +import lucene from 'lucene'; + +function normalizeQuery(query: string) { + return query.replace(/(\w+)\s(:)/gi, '$1$2'); +} + +function parseQuery(query: string) { + try { + return lucene.parse(normalizeQuery(query)); + } catch (e) { + return null; + } +} + +export default parseQuery;