@nymphjs/query-parser 1.0.0-beta.11 → 1.0.0-beta.110
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +415 -0
- package/README.md +16 -6
- package/dist/index.d.ts +4 -0
- package/dist/index.js +4 -1
- package/dist/index.js.map +1 -1
- package/{lib → dist}/queryParser.js +166 -50
- package/dist/queryParser.js.map +1 -0
- package/{lib → dist}/queryParser.test.js +402 -54
- package/dist/queryParser.test.js.map +1 -0
- package/jest.config.js +11 -2
- package/package.json +22 -29
- package/src/index.ts +2 -2
- package/src/queryParser.test.ts +395 -2
- package/src/queryParser.ts +153 -48
- package/tsconfig.json +6 -4
- package/typedoc.json +4 -0
- package/lib/index.d.ts +0 -4
- package/lib/index.js +0 -25
- package/lib/index.js.map +0 -1
- package/lib/queryParser.js.map +0 -1
- package/lib/queryParser.test.js.map +0 -1
- package/webpack.config.js +0 -28
- /package/{lib → dist}/queryParser.d.ts +0 -0
- /package/{lib → dist}/queryParser.test.d.ts +0 -0
|
@@ -1,10 +1,5 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
-
};
|
|
5
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
const splitn_1 = __importDefault(require("@sciactive/splitn"));
|
|
7
|
-
function queryParser({ query, entityClass, defaultFields = ['name'], qrefMap = {}, bareHandler = (input, _class, defaultFields = ['name']) => {
|
|
1
|
+
import { splitn } from '@sciactive/splitn';
|
|
2
|
+
export default function queryParser({ query, entityClass, defaultFields = ['name'], qrefMap = {}, bareHandler = (input, _class, defaultFields = ['name']) => {
|
|
8
3
|
if (!input.match(/[_%]/)) {
|
|
9
4
|
input = `%${input}%`;
|
|
10
5
|
}
|
|
@@ -30,10 +25,10 @@ function queryParser({ query, entityClass, defaultFields = ['name'], qrefMap = {
|
|
|
30
25
|
}),
|
|
31
26
|
];
|
|
32
27
|
}
|
|
33
|
-
exports.default = queryParser;
|
|
34
28
|
function selectorsParser({ query, entityClass, type, defaultFields, qrefMap, options, bareHandler, }) {
|
|
35
29
|
const selector = { type };
|
|
36
30
|
let curQuery = query;
|
|
31
|
+
// Look for top level selectors inside parens.
|
|
37
32
|
const subSelectorPairs = [];
|
|
38
33
|
let inQuote = false;
|
|
39
34
|
let nesting = 0;
|
|
@@ -51,7 +46,8 @@ function selectorsParser({ query, entityClass, type, defaultFields, qrefMap, opt
|
|
|
51
46
|
continue;
|
|
52
47
|
}
|
|
53
48
|
else if (curQuery[i] === '(') {
|
|
54
|
-
|
|
49
|
+
const searchClause = i !== 0 && !curQuery[i - 1].match(/\s/);
|
|
50
|
+
if (currentStart == null && !searchClause) {
|
|
55
51
|
currentStart = i;
|
|
56
52
|
}
|
|
57
53
|
else {
|
|
@@ -61,6 +57,7 @@ function selectorsParser({ query, entityClass, type, defaultFields, qrefMap, opt
|
|
|
61
57
|
else if (curQuery[i] === ')') {
|
|
62
58
|
if (nesting === 0) {
|
|
63
59
|
if (currentStart == null) {
|
|
60
|
+
// mismatched parens
|
|
64
61
|
}
|
|
65
62
|
else {
|
|
66
63
|
subSelectorPairs.push([currentStart, i + 1]);
|
|
@@ -74,10 +71,14 @@ function selectorsParser({ query, entityClass, type, defaultFields, qrefMap, opt
|
|
|
74
71
|
}
|
|
75
72
|
if (subSelectorPairs.length) {
|
|
76
73
|
selector.selector = [];
|
|
74
|
+
// Reverse order so we can take them out back to front.
|
|
77
75
|
subSelectorPairs.reverse();
|
|
78
76
|
for (let pair of subSelectorPairs) {
|
|
77
|
+
// Slice out in between the parens.
|
|
79
78
|
let selectorQuery = curQuery.slice(pair[0] + 1, pair[1] - 1);
|
|
79
|
+
// Cut the selector out of the query.
|
|
80
80
|
curQuery = curQuery.slice(0, pair[0]) + curQuery.slice(pair[1]);
|
|
81
|
+
// First char inside parens determines type of selector.
|
|
81
82
|
let type = '&';
|
|
82
83
|
if (selectorQuery.startsWith('&')) {
|
|
83
84
|
selectorQuery = selectorQuery.slice(1);
|
|
@@ -127,6 +128,14 @@ function selectorsParser({ query, entityClass, type, defaultFields, qrefMap, opt
|
|
|
127
128
|
options.offset = Number(offsetMatch[1]);
|
|
128
129
|
}
|
|
129
130
|
curQuery = curQuery.replace(offsetRegex, '');
|
|
131
|
+
// JavaScript variable names are ridiculously infeasable to check
|
|
132
|
+
// thoroughly, so this is a "best attempt".
|
|
133
|
+
const sortRegex = /(?: |^)sort:(-|[_$a-zA-Z\xA0-\uFFFF][_$a-zA-Z0-9\xA0-\uFFFF]*)(?= |$)/;
|
|
134
|
+
const sortMatch = curQuery.match(sortRegex);
|
|
135
|
+
if (sortMatch) {
|
|
136
|
+
options.sort = sortMatch[1] === '-' ? null : sortMatch[1];
|
|
137
|
+
}
|
|
138
|
+
curQuery = curQuery.replace(sortRegex, '');
|
|
130
139
|
const reverseRegex = /(?: |^)reverse:(true|false|1|0)(?= |$)/;
|
|
131
140
|
const reverseMatch = curQuery.match(reverseRegex);
|
|
132
141
|
if (reverseMatch) {
|
|
@@ -151,22 +160,53 @@ function selectorsParser({ query, entityClass, type, defaultFields, qrefMap, opt
|
|
|
151
160
|
selector.selector.length === 1 &&
|
|
152
161
|
Object.keys(selector).length === 2 &&
|
|
153
162
|
(selector.type === '&' || selector.type === '|')) {
|
|
163
|
+
// There is only one subselector, and this selector is a positive match
|
|
164
|
+
// type, so just return it as the selector.
|
|
154
165
|
return selector.selector;
|
|
155
166
|
}
|
|
156
167
|
return [selector];
|
|
157
168
|
}
|
|
158
169
|
function selectorParser({ query, selector, qrefMap, bareHandler, }) {
|
|
159
170
|
let curQuery = query;
|
|
160
|
-
|
|
171
|
+
// eg. prop(some search string) or prop!(some search string)
|
|
172
|
+
const searchRegex = /(?: |^)([^\s=\[\]<>{}]+?)!?\([^\)]+\)(?= |$)/g;
|
|
173
|
+
const searchMatch = curQuery.match(searchRegex);
|
|
174
|
+
if (searchMatch) {
|
|
175
|
+
selector.search = [];
|
|
176
|
+
selector['!search'] = [];
|
|
177
|
+
for (let match of searchMatch) {
|
|
178
|
+
try {
|
|
179
|
+
let [name, value] = splitn(match.trim().slice(0, -1), '(', 2);
|
|
180
|
+
if (name.endsWith('!')) {
|
|
181
|
+
selector['!search'].push([name.slice(0, -1), value]);
|
|
182
|
+
}
|
|
183
|
+
else {
|
|
184
|
+
selector.search.push([name, value]);
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
catch (e) {
|
|
188
|
+
continue;
|
|
189
|
+
}
|
|
190
|
+
}
|
|
191
|
+
if (!selector.search.length) {
|
|
192
|
+
delete selector.search;
|
|
193
|
+
}
|
|
194
|
+
if (!selector['!search'].length) {
|
|
195
|
+
delete selector['!search'];
|
|
196
|
+
}
|
|
197
|
+
}
|
|
198
|
+
curQuery = curQuery.replace(searchRegex, '');
|
|
199
|
+
// eg. user<{User name="Hunter"}> or user!<{User name="Hunter"}>
|
|
200
|
+
const qrefRegex = /(?: |^)([^\s=\[\]<>{}]+?)!?<\{(\w+) (.*?[^\\])\}>(?= |$)/g;
|
|
161
201
|
const qrefMatch = curQuery.match(qrefRegex);
|
|
162
202
|
if (qrefMatch) {
|
|
163
203
|
selector.qref = [];
|
|
164
204
|
selector['!qref'] = [];
|
|
165
205
|
for (let match of qrefMatch) {
|
|
166
206
|
try {
|
|
167
|
-
let [name, value] = (
|
|
207
|
+
let [name, value] = splitn(match.trim().slice(0, -1), '<', 2);
|
|
168
208
|
value = unQuoteCurlies(value.slice(1, -1));
|
|
169
|
-
let [className, qrefQuery] = value
|
|
209
|
+
let [className, qrefQuery] = splitn(value, ' ', 2);
|
|
170
210
|
const EntityClass = qrefMap[className].class;
|
|
171
211
|
if (EntityClass == null) {
|
|
172
212
|
continue;
|
|
@@ -197,17 +237,72 @@ function selectorParser({ query, selector, qrefMap, bareHandler, }) {
|
|
|
197
237
|
}
|
|
198
238
|
}
|
|
199
239
|
curQuery = curQuery.replace(qrefRegex, '');
|
|
200
|
-
|
|
240
|
+
// eg. someArray=[1,2] or someObject={"prop":"some value"}
|
|
241
|
+
const equalJsonRegex = /(?: |^)([^\s=\[\]<>{}]+?)!?=(\{|\[)/g;
|
|
242
|
+
const equalJsonMatch = [...curQuery.matchAll(equalJsonRegex)];
|
|
243
|
+
if (equalJsonMatch) {
|
|
244
|
+
if (!('equal' in selector)) {
|
|
245
|
+
selector.equal = [];
|
|
246
|
+
}
|
|
247
|
+
if (!('!equal' in selector)) {
|
|
248
|
+
selector['!equal'] = [];
|
|
249
|
+
}
|
|
250
|
+
// Work backward to find all long JSON values.
|
|
251
|
+
for (let i = equalJsonMatch.length - 1; i >= 0; i--) {
|
|
252
|
+
const match = equalJsonMatch[i];
|
|
253
|
+
let [name, opener] = splitn(match[0].trim(), '=', 2);
|
|
254
|
+
let start = match.index + match[0].length - 1;
|
|
255
|
+
let nextEndToken = curQuery.indexOf(opener === '{' ? '}' : ']', start);
|
|
256
|
+
while (nextEndToken !== -1) {
|
|
257
|
+
try {
|
|
258
|
+
if (name.endsWith('!')) {
|
|
259
|
+
selector['!equal'].unshift([
|
|
260
|
+
name.slice(0, -1),
|
|
261
|
+
JSON.parse(curQuery.substring(start, nextEndToken + 1)),
|
|
262
|
+
]);
|
|
263
|
+
}
|
|
264
|
+
else {
|
|
265
|
+
selector.equal.unshift([
|
|
266
|
+
name,
|
|
267
|
+
JSON.parse(curQuery.substring(start, nextEndToken + 1)),
|
|
268
|
+
]);
|
|
269
|
+
}
|
|
270
|
+
curQuery =
|
|
271
|
+
curQuery.substring(0, match.index) +
|
|
272
|
+
curQuery.substring(nextEndToken + 1);
|
|
273
|
+
break;
|
|
274
|
+
}
|
|
275
|
+
catch (e) {
|
|
276
|
+
nextEndToken = curQuery.indexOf(opener === '{' ? '}' : ']', nextEndToken + 1);
|
|
277
|
+
}
|
|
278
|
+
}
|
|
279
|
+
}
|
|
280
|
+
if (selector.equal == null || !selector.equal.length) {
|
|
281
|
+
delete selector.equal;
|
|
282
|
+
}
|
|
283
|
+
if (selector['!equal'] == null || !selector['!equal'].length) {
|
|
284
|
+
delete selector['!equal'];
|
|
285
|
+
}
|
|
286
|
+
}
|
|
287
|
+
// eg. name=Marty or name="Marty McFly" or enabled=true
|
|
288
|
+
const equalRegex = /(?: |^)([^\s=\[\]<>{}]+?)!?=(""|".*?[^\\]"|[^ ]+)(?= |$)/g;
|
|
201
289
|
const equalMatch = curQuery.match(equalRegex);
|
|
202
290
|
if (equalMatch) {
|
|
203
|
-
|
|
204
|
-
|
|
291
|
+
if (!('equal' in selector)) {
|
|
292
|
+
selector.equal = [];
|
|
293
|
+
}
|
|
294
|
+
if (!('!equal' in selector)) {
|
|
295
|
+
selector['!equal'] = [];
|
|
296
|
+
}
|
|
205
297
|
for (let match of equalMatch) {
|
|
206
298
|
try {
|
|
207
|
-
let [name, value] = match.trim()
|
|
299
|
+
let [name, value] = splitn(match.trim(), '=', 2);
|
|
208
300
|
try {
|
|
209
301
|
if (name.endsWith('!')) {
|
|
210
|
-
selector['!equal'].push([
|
|
302
|
+
selector['!equal'].push([
|
|
303
|
+
name.slice(0, -1),
|
|
304
|
+
JSON.parse(value),
|
|
305
|
+
]);
|
|
211
306
|
}
|
|
212
307
|
else {
|
|
213
308
|
selector.equal.push([name, JSON.parse(value)]);
|
|
@@ -215,10 +310,16 @@ function selectorParser({ query, selector, qrefMap, bareHandler, }) {
|
|
|
215
310
|
}
|
|
216
311
|
catch (e) {
|
|
217
312
|
if (name.endsWith('!')) {
|
|
218
|
-
selector['!equal'].push([
|
|
313
|
+
selector['!equal'].push([
|
|
314
|
+
name.slice(0, -1),
|
|
315
|
+
unQuoteString(value),
|
|
316
|
+
]);
|
|
219
317
|
}
|
|
220
318
|
else {
|
|
221
|
-
selector.equal.push([
|
|
319
|
+
selector.equal.push([
|
|
320
|
+
name,
|
|
321
|
+
unQuoteString(value),
|
|
322
|
+
]);
|
|
222
323
|
}
|
|
223
324
|
}
|
|
224
325
|
}
|
|
@@ -226,22 +327,23 @@ function selectorParser({ query, selector, qrefMap, bareHandler, }) {
|
|
|
226
327
|
continue;
|
|
227
328
|
}
|
|
228
329
|
}
|
|
229
|
-
if (!selector.equal.length) {
|
|
330
|
+
if (selector.equal == null || !selector.equal.length) {
|
|
230
331
|
delete selector.equal;
|
|
231
332
|
}
|
|
232
|
-
if (!selector['!equal'].length) {
|
|
333
|
+
if (selector['!equal'] == null || !selector['!equal'].length) {
|
|
233
334
|
delete selector['!equal'];
|
|
234
335
|
}
|
|
235
336
|
}
|
|
236
337
|
curQuery = curQuery.replace(equalRegex, '');
|
|
237
|
-
|
|
338
|
+
// eg. user<{790274347f9b3a018c2cedee}> or user!<{790274347f9b3a018c2cedee}>
|
|
339
|
+
const refRegex = /(?: |^)([^\s=\[\]<>{}]+?)!?<\{([0-9a-f]{24})\}>(?= |$)/g;
|
|
238
340
|
const refMatch = curQuery.match(refRegex);
|
|
239
341
|
if (refMatch) {
|
|
240
342
|
selector.ref = [];
|
|
241
343
|
selector['!ref'] = [];
|
|
242
344
|
for (let match of refMatch) {
|
|
243
345
|
try {
|
|
244
|
-
let [name, value] = match.trim().slice(0, -1)
|
|
346
|
+
let [name, value] = splitn(match.trim().slice(0, -1), '<', 2);
|
|
245
347
|
if (name.endsWith('!')) {
|
|
246
348
|
selector['!ref'].push([name.slice(0, -1), value.slice(1, -1)]);
|
|
247
349
|
}
|
|
@@ -261,34 +363,35 @@ function selectorParser({ query, selector, qrefMap, bareHandler, }) {
|
|
|
261
363
|
}
|
|
262
364
|
}
|
|
263
365
|
curQuery = curQuery.replace(refRegex, '');
|
|
264
|
-
|
|
366
|
+
// eg. someArrayOfNumbers<10> or someObject!<"some string">
|
|
367
|
+
const containRegex = /(?: |^)([^\s=\[\]<>{}]+?)!?(<(?:[^"][^>]*?|".*?[^\\]"))>(?= |$)/g;
|
|
265
368
|
const containMatch = curQuery.match(containRegex);
|
|
266
369
|
if (containMatch) {
|
|
267
370
|
selector.contain = [];
|
|
268
371
|
selector['!contain'] = [];
|
|
269
372
|
for (let match of containMatch) {
|
|
270
373
|
try {
|
|
271
|
-
let [name, value] = match.trim().slice(0, -1)
|
|
374
|
+
let [name, value] = splitn(match.trim().slice(0, -1), '<', 2);
|
|
272
375
|
try {
|
|
273
376
|
if (name.endsWith('!')) {
|
|
274
377
|
selector['!contain'].push([
|
|
275
378
|
name.slice(0, -1),
|
|
276
|
-
JSON.parse(
|
|
379
|
+
JSON.parse(unQuoteString(value)),
|
|
277
380
|
]);
|
|
278
381
|
}
|
|
279
382
|
else {
|
|
280
|
-
selector.contain.push([name, JSON.parse(
|
|
383
|
+
selector.contain.push([name, JSON.parse(unQuoteString(value))]);
|
|
281
384
|
}
|
|
282
385
|
}
|
|
283
386
|
catch (e) {
|
|
284
387
|
if (name.endsWith('!')) {
|
|
285
388
|
selector['!contain'].push([
|
|
286
389
|
name.slice(0, -1),
|
|
287
|
-
|
|
390
|
+
unQuoteString(value),
|
|
288
391
|
]);
|
|
289
392
|
}
|
|
290
393
|
else {
|
|
291
|
-
selector.contain.push([name,
|
|
394
|
+
selector.contain.push([name, unQuoteString(value)]);
|
|
292
395
|
}
|
|
293
396
|
}
|
|
294
397
|
}
|
|
@@ -304,7 +407,8 @@ function selectorParser({ query, selector, qrefMap, bareHandler, }) {
|
|
|
304
407
|
}
|
|
305
408
|
}
|
|
306
409
|
curQuery = curQuery.replace(containRegex, '');
|
|
307
|
-
|
|
410
|
+
// eg. name~/Hunter/ or name!~/hunter/i
|
|
411
|
+
const posixRegex = /(?: |^)([^\s=\[\]<>{}]+?)!?~(\/\/|\/.*?[^\\]\/)i?(?= |$)/g;
|
|
308
412
|
const posixMatch = curQuery.match(posixRegex);
|
|
309
413
|
if (posixMatch) {
|
|
310
414
|
selector.match = [];
|
|
@@ -313,7 +417,7 @@ function selectorParser({ query, selector, qrefMap, bareHandler, }) {
|
|
|
313
417
|
selector['!imatch'] = [];
|
|
314
418
|
for (let match of posixMatch) {
|
|
315
419
|
try {
|
|
316
|
-
let [name, value] = match.trim()
|
|
420
|
+
let [name, value] = splitn(match.trim(), '~', 2);
|
|
317
421
|
if (name.endsWith('!')) {
|
|
318
422
|
if (value.endsWith('i')) {
|
|
319
423
|
selector['!imatch'].push([
|
|
@@ -355,7 +459,8 @@ function selectorParser({ query, selector, qrefMap, bareHandler, }) {
|
|
|
355
459
|
}
|
|
356
460
|
}
|
|
357
461
|
curQuery = curQuery.replace(posixRegex, '');
|
|
358
|
-
|
|
462
|
+
// eg. name~Hunter or name!~"hunter"i
|
|
463
|
+
const likeRegex = /(?: |^)([^\s=\[\]<>{}]+?)!?~(""i?|".*?[^\\]"i?|[^ ]+)(?= |$)/g;
|
|
359
464
|
const likeMatch = curQuery.match(likeRegex);
|
|
360
465
|
if (likeMatch) {
|
|
361
466
|
selector.like = [];
|
|
@@ -364,7 +469,7 @@ function selectorParser({ query, selector, qrefMap, bareHandler, }) {
|
|
|
364
469
|
selector['!ilike'] = [];
|
|
365
470
|
for (let match of likeMatch) {
|
|
366
471
|
try {
|
|
367
|
-
let [name, value] = match.trim()
|
|
472
|
+
let [name, value] = splitn(match.trim(), '~', 2);
|
|
368
473
|
if (name.endsWith('!')) {
|
|
369
474
|
if (value.endsWith('"i')) {
|
|
370
475
|
selector['!ilike'].push([
|
|
@@ -403,6 +508,7 @@ function selectorParser({ query, selector, qrefMap, bareHandler, }) {
|
|
|
403
508
|
}
|
|
404
509
|
}
|
|
405
510
|
curQuery = curQuery.replace(likeRegex, '');
|
|
511
|
+
// eg. {790274347f9b3a018c2cedee} or {!790274347f9b3a018c2cedee}
|
|
406
512
|
const guidRegex = /(?: |^)\{!?([0-9a-f]{24})\}(?= |$)/g;
|
|
407
513
|
const guidMatch = curQuery.match(guidRegex);
|
|
408
514
|
if (guidMatch) {
|
|
@@ -430,7 +536,8 @@ function selectorParser({ query, selector, qrefMap, bareHandler, }) {
|
|
|
430
536
|
}
|
|
431
537
|
}
|
|
432
538
|
curQuery = curQuery.replace(guidRegex, '');
|
|
433
|
-
|
|
539
|
+
// eg. [enabled] or [!defaultPrimaryGroup]
|
|
540
|
+
const truthyRegex = /(?: |^)\[(!?[^\s=\[\]<>{}]+?)\](?= |$)/g;
|
|
434
541
|
const truthyMatch = curQuery.match(truthyRegex);
|
|
435
542
|
if (truthyMatch) {
|
|
436
543
|
selector.truthy = [];
|
|
@@ -457,6 +564,7 @@ function selectorParser({ query, selector, qrefMap, bareHandler, }) {
|
|
|
457
564
|
}
|
|
458
565
|
}
|
|
459
566
|
curQuery = curQuery.replace(truthyRegex, '');
|
|
567
|
+
// eg. <archived> or <!archived>
|
|
460
568
|
const tagRegex = /(?: |^)<(!?\w+)>(?= |$)/g;
|
|
461
569
|
const tagMatch = curQuery.match(tagRegex);
|
|
462
570
|
if (tagMatch) {
|
|
@@ -484,13 +592,14 @@ function selectorParser({ query, selector, qrefMap, bareHandler, }) {
|
|
|
484
592
|
}
|
|
485
593
|
}
|
|
486
594
|
curQuery = curQuery.replace(tagRegex, '');
|
|
487
|
-
|
|
595
|
+
// eg. cdate>15
|
|
596
|
+
const gtRegex = /(?: |^)([^\s=\[\]<>{}]+?)>(-?\d+(?:\.\d+)?)(?= |$)/g;
|
|
488
597
|
const gtMatch = curQuery.match(gtRegex);
|
|
489
598
|
if (gtMatch) {
|
|
490
599
|
selector.gt = [];
|
|
491
600
|
for (let match of gtMatch) {
|
|
492
601
|
try {
|
|
493
|
-
let [name, value] = match.trim()
|
|
602
|
+
let [name, value] = splitn(match.trim(), '>', 2);
|
|
494
603
|
selector.gt.push([name, Number(value)]);
|
|
495
604
|
}
|
|
496
605
|
catch (e) {
|
|
@@ -502,7 +611,8 @@ function selectorParser({ query, selector, qrefMap, bareHandler, }) {
|
|
|
502
611
|
}
|
|
503
612
|
}
|
|
504
613
|
curQuery = curQuery.replace(gtRegex, '');
|
|
505
|
-
|
|
614
|
+
// eg. cdate>yesterday or cdate>"2 days ago"
|
|
615
|
+
const gtRelativeRegex = /(?: |^)([^\s=\[\]<>{}]+?)>(\w+|"[^"]+")(?= |$)/g;
|
|
506
616
|
const gtRelativeMatch = curQuery.match(gtRelativeRegex);
|
|
507
617
|
if (gtRelativeMatch) {
|
|
508
618
|
if (selector.gt == null) {
|
|
@@ -510,7 +620,7 @@ function selectorParser({ query, selector, qrefMap, bareHandler, }) {
|
|
|
510
620
|
}
|
|
511
621
|
for (let match of gtRelativeMatch) {
|
|
512
622
|
try {
|
|
513
|
-
let [name, value] = match.trim()
|
|
623
|
+
let [name, value] = splitn(match.trim(), '>', 2);
|
|
514
624
|
selector.gt.push([
|
|
515
625
|
name,
|
|
516
626
|
null,
|
|
@@ -526,13 +636,14 @@ function selectorParser({ query, selector, qrefMap, bareHandler, }) {
|
|
|
526
636
|
}
|
|
527
637
|
}
|
|
528
638
|
curQuery = curQuery.replace(gtRelativeRegex, '');
|
|
529
|
-
|
|
639
|
+
// eg. cdate>=15
|
|
640
|
+
const gteRegex = /(?: |^)([^\s=\[\]<>{}]+?)>=(-?\d+(?:\.\d+)?)(?= |$)/g;
|
|
530
641
|
const gteMatch = curQuery.match(gteRegex);
|
|
531
642
|
if (gteMatch) {
|
|
532
643
|
selector.gte = [];
|
|
533
644
|
for (let match of gteMatch) {
|
|
534
645
|
try {
|
|
535
|
-
let [name, value] = match.trim()
|
|
646
|
+
let [name, value] = splitn(match.trim(), '>=', 2);
|
|
536
647
|
selector.gte.push([name, Number(value)]);
|
|
537
648
|
}
|
|
538
649
|
catch (e) {
|
|
@@ -544,7 +655,8 @@ function selectorParser({ query, selector, qrefMap, bareHandler, }) {
|
|
|
544
655
|
}
|
|
545
656
|
}
|
|
546
657
|
curQuery = curQuery.replace(gteRegex, '');
|
|
547
|
-
|
|
658
|
+
// eg. cdate>=yesterday or cdate>="2 days ago"
|
|
659
|
+
const gteRelativeRegex = /(?: |^)([^\s=\[\]<>{}]+?)>=(\w+|"[^"]+")(?= |$)/g;
|
|
548
660
|
const gteRelativeMatch = curQuery.match(gteRelativeRegex);
|
|
549
661
|
if (gteRelativeMatch) {
|
|
550
662
|
if (selector.gte == null) {
|
|
@@ -552,7 +664,7 @@ function selectorParser({ query, selector, qrefMap, bareHandler, }) {
|
|
|
552
664
|
}
|
|
553
665
|
for (let match of gteRelativeMatch) {
|
|
554
666
|
try {
|
|
555
|
-
let [name, value] = match.trim()
|
|
667
|
+
let [name, value] = splitn(match.trim(), '>=', 2);
|
|
556
668
|
selector.gte.push([
|
|
557
669
|
name,
|
|
558
670
|
null,
|
|
@@ -568,13 +680,14 @@ function selectorParser({ query, selector, qrefMap, bareHandler, }) {
|
|
|
568
680
|
}
|
|
569
681
|
}
|
|
570
682
|
curQuery = curQuery.replace(gteRelativeRegex, '');
|
|
571
|
-
|
|
683
|
+
// eg. cdate<15
|
|
684
|
+
const ltRegex = /(?: |^)([^\s=\[\]<>{}]+?)<(-?\d+(?:\.\d+)?)(?= |$)/g;
|
|
572
685
|
const ltMatch = curQuery.match(ltRegex);
|
|
573
686
|
if (ltMatch) {
|
|
574
687
|
selector.lt = [];
|
|
575
688
|
for (let match of ltMatch) {
|
|
576
689
|
try {
|
|
577
|
-
let [name, value] = match.trim()
|
|
690
|
+
let [name, value] = splitn(match.trim(), '<', 2);
|
|
578
691
|
selector.lt.push([name, Number(value)]);
|
|
579
692
|
}
|
|
580
693
|
catch (e) {
|
|
@@ -586,7 +699,8 @@ function selectorParser({ query, selector, qrefMap, bareHandler, }) {
|
|
|
586
699
|
}
|
|
587
700
|
}
|
|
588
701
|
curQuery = curQuery.replace(ltRegex, '');
|
|
589
|
-
|
|
702
|
+
// eg. cdate<yesterday or cdate<"2 days ago"
|
|
703
|
+
const ltRelativeRegex = /(?: |^)([^\s=\[\]<>{}]+?)<(\w+|"[^"]+")(?= |$)/g;
|
|
590
704
|
const ltRelativeMatch = curQuery.match(ltRelativeRegex);
|
|
591
705
|
if (ltRelativeMatch) {
|
|
592
706
|
if (selector.lt == null) {
|
|
@@ -594,7 +708,7 @@ function selectorParser({ query, selector, qrefMap, bareHandler, }) {
|
|
|
594
708
|
}
|
|
595
709
|
for (let match of ltRelativeMatch) {
|
|
596
710
|
try {
|
|
597
|
-
let [name, value] = match.trim()
|
|
711
|
+
let [name, value] = splitn(match.trim(), '<', 2);
|
|
598
712
|
selector.lt.push([
|
|
599
713
|
name,
|
|
600
714
|
null,
|
|
@@ -610,13 +724,14 @@ function selectorParser({ query, selector, qrefMap, bareHandler, }) {
|
|
|
610
724
|
}
|
|
611
725
|
}
|
|
612
726
|
curQuery = curQuery.replace(ltRelativeRegex, '');
|
|
613
|
-
|
|
727
|
+
// eg. cdate<=15
|
|
728
|
+
const lteRegex = /(?: |^)([^\s=\[\]<>{}]+?)<=(-?\d+(?:\.\d+)?)(?= |$)/g;
|
|
614
729
|
const lteMatch = curQuery.match(lteRegex);
|
|
615
730
|
if (lteMatch) {
|
|
616
731
|
selector.lte = [];
|
|
617
732
|
for (let match of lteMatch) {
|
|
618
733
|
try {
|
|
619
|
-
let [name, value] = match.trim()
|
|
734
|
+
let [name, value] = splitn(match.trim(), '<=', 2);
|
|
620
735
|
selector.lte.push([name, Number(value)]);
|
|
621
736
|
}
|
|
622
737
|
catch (e) {
|
|
@@ -628,7 +743,8 @@ function selectorParser({ query, selector, qrefMap, bareHandler, }) {
|
|
|
628
743
|
}
|
|
629
744
|
}
|
|
630
745
|
curQuery = curQuery.replace(lteRegex, '');
|
|
631
|
-
|
|
746
|
+
// eg. cdate<=yesterday or cdate<="2 days ago"
|
|
747
|
+
const lteRelativeRegex = /(?: |^)([^\s=\[\]<>{}]+?)<=(\w+|"[^"]+")(?= |$)/g;
|
|
632
748
|
const lteRelativeMatch = curQuery.match(lteRelativeRegex);
|
|
633
749
|
if (lteRelativeMatch) {
|
|
634
750
|
if (selector.lte == null) {
|
|
@@ -636,7 +752,7 @@ function selectorParser({ query, selector, qrefMap, bareHandler, }) {
|
|
|
636
752
|
}
|
|
637
753
|
for (let match of lteRelativeMatch) {
|
|
638
754
|
try {
|
|
639
|
-
let [name, value] = match.trim()
|
|
755
|
+
let [name, value] = splitn(match.trim(), '<=', 2);
|
|
640
756
|
selector.lte.push([
|
|
641
757
|
name,
|
|
642
758
|
null,
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"queryParser.js","sourceRoot":"","sources":["../src/queryParser.ts"],"names":[],"mappings":"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"}
|