@abyss-project/main 18.1.0 → 18.2.0

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.
Files changed (37) hide show
  1. package/dist/explore/expression.bounds.d.ts +7 -0
  2. package/dist/explore/expression.bounds.js +17 -0
  3. package/dist/explore/expression.bounds.js.map +1 -0
  4. package/dist/explore/expression.parser.d.ts +7 -0
  5. package/dist/explore/expression.parser.js +412 -0
  6. package/dist/explore/expression.parser.js.map +1 -0
  7. package/dist/explore/expression.tokenizer.d.ts +59 -0
  8. package/dist/explore/expression.tokenizer.js +246 -0
  9. package/dist/explore/expression.tokenizer.js.map +1 -0
  10. package/dist/explore/expression.types.d.ts +58 -0
  11. package/dist/explore/expression.types.js +36 -0
  12. package/dist/explore/expression.types.js.map +1 -0
  13. package/dist/explore/index.d.ts +4 -0
  14. package/dist/explore/index.js +24 -0
  15. package/dist/explore/index.js.map +1 -0
  16. package/dist/explore/tests/expression.parser.spec.d.ts +1 -0
  17. package/dist/explore/tests/expression.parser.spec.js +228 -0
  18. package/dist/explore/tests/expression.parser.spec.js.map +1 -0
  19. package/dist/index.d.ts +1 -0
  20. package/dist/index.js +1 -0
  21. package/dist/index.js.map +1 -1
  22. package/dist/server/explore/field-catalog.types.d.ts +21 -0
  23. package/dist/server/explore/field-catalog.types.js +12 -0
  24. package/dist/server/explore/field-catalog.types.js.map +1 -0
  25. package/dist/server/explore/like-escape.d.ts +1 -0
  26. package/dist/server/explore/like-escape.js +7 -0
  27. package/dist/server/explore/like-escape.js.map +1 -0
  28. package/dist/server/explore/sql-translator.d.ts +18 -0
  29. package/dist/server/explore/sql-translator.js +265 -0
  30. package/dist/server/explore/sql-translator.js.map +1 -0
  31. package/dist/server/explore/tests/sql-translator.spec.d.ts +1 -0
  32. package/dist/server/explore/tests/sql-translator.spec.js +281 -0
  33. package/dist/server/explore/tests/sql-translator.spec.js.map +1 -0
  34. package/dist/server/index.d.ts +3 -0
  35. package/dist/server/index.js +3 -0
  36. package/dist/server/index.js.map +1 -1
  37. package/package.json +1 -1
@@ -0,0 +1,7 @@
1
+ export declare const EXPRESSION_BOUNDS: {
2
+ maxLength: 2000;
3
+ maxDepth: 16;
4
+ maxTerms: 50;
5
+ attributeKeyPattern: RegExp;
6
+ };
7
+ export declare function isValidAttributeKey(key: string): boolean;
@@ -0,0 +1,17 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.EXPRESSION_BOUNDS = void 0;
4
+ exports.isValidAttributeKey = isValidAttributeKey;
5
+ exports.EXPRESSION_BOUNDS = Object.freeze({
6
+ maxLength: 2000,
7
+ maxDepth: 16,
8
+ maxTerms: 50,
9
+ attributeKeyPattern: /^[A-Za-z0-9_.-]{1,64}$/,
10
+ });
11
+ function isValidAttributeKey(key) {
12
+ if (!exports.EXPRESSION_BOUNDS.attributeKeyPattern.test(key)) {
13
+ return false;
14
+ }
15
+ return key.split('.').every((segment) => segment.length > 0);
16
+ }
17
+ //# sourceMappingURL=expression.bounds.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"expression.bounds.js","sourceRoot":"","sources":["../../src/explore/expression.bounds.ts"],"names":[],"mappings":";;;AAqBA,kDAKC;AAtBY,QAAA,iBAAiB,GAK1B,MAAM,CAAC,MAAM,CAAC;IAChB,SAAS,EAAE,IAAa;IACxB,QAAQ,EAAE,EAAW;IACrB,QAAQ,EAAE,EAAW;IACrB,mBAAmB,EAAE,wBAAwB;CAC9C,CAAC,CAAC;AAOH,SAAgB,mBAAmB,CAAC,GAAW;IAC7C,IAAI,CAAC,yBAAiB,CAAC,mBAAmB,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;QACrD,OAAO,KAAK,CAAC;IACf,CAAC;IACD,OAAO,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;AAC/D,CAAC"}
@@ -0,0 +1,7 @@
1
+ import { ExpressionNode, ParseExpressionResult } from './expression.types';
2
+ export interface IParseExpressionOptions {
3
+ allowRegex?: boolean;
4
+ }
5
+ export declare function parseExpression(text: string, options?: IParseExpressionOptions): ParseExpressionResult;
6
+ export declare function stringifyExpression(ast: ExpressionNode | null): string;
7
+ export declare function addTermToExpression(text: string, field: string, value: string, exclude: boolean): string;
@@ -0,0 +1,412 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.parseExpression = parseExpression;
4
+ exports.stringifyExpression = stringifyExpression;
5
+ exports.addTermToExpression = addTermToExpression;
6
+ const expression_bounds_1 = require("./expression.bounds");
7
+ const expression_tokenizer_1 = require("./expression.tokenizer");
8
+ const expression_types_1 = require("./expression.types");
9
+ function isKeyword(token, keyword) {
10
+ return token.type === expression_tokenizer_1.ExpressionTokenType.KEYWORD && token.keyword === keyword;
11
+ }
12
+ function joinUnits(units) {
13
+ return units.map((unit) => unit.char).join('');
14
+ }
15
+ function isWildcard(unit) {
16
+ return unit !== undefined && unit.char === '*' && !unit.escaped;
17
+ }
18
+ class ExpressionParser {
19
+ constructor(tokens, allowRegex) {
20
+ this.tokens = tokens;
21
+ this.allowRegex = allowRegex;
22
+ this.cursor = 0;
23
+ this.termCount = 0;
24
+ }
25
+ parse() {
26
+ if (this.peek().type === expression_tokenizer_1.ExpressionTokenType.EOF) {
27
+ return null;
28
+ }
29
+ const ast = this.parseOr(0);
30
+ const next = this.peek();
31
+ if (next.type !== expression_tokenizer_1.ExpressionTokenType.EOF) {
32
+ throw new expression_tokenizer_1.ExpressionSyntaxError(next.position, expression_types_1.ExpressionExpected.END, next.type === expression_tokenizer_1.ExpressionTokenType.RPAREN
33
+ ? 'Unexpected ")" without a matching "("'
34
+ : 'Unexpected token, the expression should end here');
35
+ }
36
+ return ast;
37
+ }
38
+ peek() {
39
+ return this.tokens[this.cursor];
40
+ }
41
+ advance() {
42
+ const token = this.tokens[this.cursor];
43
+ if (token.type !== expression_tokenizer_1.ExpressionTokenType.EOF) {
44
+ this.cursor += 1;
45
+ }
46
+ return token;
47
+ }
48
+ parseOr(depth) {
49
+ const children = [this.parseAnd(depth)];
50
+ while (isKeyword(this.peek(), expression_tokenizer_1.ExpressionKeyword.OR)) {
51
+ this.advance();
52
+ children.push(this.parseAnd(depth));
53
+ }
54
+ return this.combine(expression_types_1.ExpressionNodeKind.OR, children);
55
+ }
56
+ parseAnd(depth) {
57
+ const children = [this.parseUnary(depth)];
58
+ while (true) {
59
+ const next = this.peek();
60
+ if (isKeyword(next, expression_tokenizer_1.ExpressionKeyword.AND)) {
61
+ this.advance();
62
+ children.push(this.parseUnary(depth));
63
+ continue;
64
+ }
65
+ if (this.startsOperand(next)) {
66
+ children.push(this.parseUnary(depth));
67
+ continue;
68
+ }
69
+ break;
70
+ }
71
+ return this.combine(expression_types_1.ExpressionNodeKind.AND, children);
72
+ }
73
+ combine(kind, children) {
74
+ if (children.length === 1) {
75
+ return children[0];
76
+ }
77
+ const flat = [];
78
+ for (const child of children) {
79
+ if (child.kind === kind) {
80
+ flat.push(...child.children);
81
+ }
82
+ else {
83
+ flat.push(child);
84
+ }
85
+ }
86
+ return { kind, children: flat };
87
+ }
88
+ startsOperand(token) {
89
+ return (token.type === expression_tokenizer_1.ExpressionTokenType.WORD ||
90
+ token.type === expression_tokenizer_1.ExpressionTokenType.QUOTED ||
91
+ token.type === expression_tokenizer_1.ExpressionTokenType.FIELD ||
92
+ token.type === expression_tokenizer_1.ExpressionTokenType.LPAREN ||
93
+ token.type === expression_tokenizer_1.ExpressionTokenType.MINUS ||
94
+ isKeyword(token, expression_tokenizer_1.ExpressionKeyword.NOT));
95
+ }
96
+ parseUnary(depth) {
97
+ const token = this.peek();
98
+ if (token.type === expression_tokenizer_1.ExpressionTokenType.MINUS || isKeyword(token, expression_tokenizer_1.ExpressionKeyword.NOT)) {
99
+ this.advance();
100
+ return { kind: expression_types_1.ExpressionNodeKind.NOT, child: this.parseUnary(depth) };
101
+ }
102
+ if (token.type === expression_tokenizer_1.ExpressionTokenType.LPAREN) {
103
+ if (depth + 1 > expression_bounds_1.EXPRESSION_BOUNDS.maxDepth) {
104
+ throw new expression_tokenizer_1.ExpressionSyntaxError(token.position, expression_types_1.ExpressionExpected.CLOSING_PAREN, `Too many nested parentheses (at most ${expression_bounds_1.EXPRESSION_BOUNDS.maxDepth})`);
105
+ }
106
+ this.advance();
107
+ const inner = this.parseOr(depth + 1);
108
+ const closing = this.peek();
109
+ if (closing.type !== expression_tokenizer_1.ExpressionTokenType.RPAREN) {
110
+ throw new expression_tokenizer_1.ExpressionSyntaxError(closing.position, expression_types_1.ExpressionExpected.CLOSING_PAREN, `Missing ")" for the "(" opened at ${token.position}`);
111
+ }
112
+ this.advance();
113
+ return inner;
114
+ }
115
+ if (token.type === expression_tokenizer_1.ExpressionTokenType.FIELD) {
116
+ this.countTerm(token.position);
117
+ this.advance();
118
+ return this.parseTerm(token);
119
+ }
120
+ if (token.type === expression_tokenizer_1.ExpressionTokenType.WORD) {
121
+ this.countTerm(token.position);
122
+ this.advance();
123
+ return { kind: expression_types_1.ExpressionNodeKind.TEXT, value: joinUnits(token.units), phrase: false };
124
+ }
125
+ if (token.type === expression_tokenizer_1.ExpressionTokenType.QUOTED) {
126
+ this.countTerm(token.position);
127
+ this.advance();
128
+ return { kind: expression_types_1.ExpressionNodeKind.TEXT, value: token.value, phrase: true };
129
+ }
130
+ throw new expression_tokenizer_1.ExpressionSyntaxError(token.position, expression_types_1.ExpressionExpected.OPERAND, token.type === expression_tokenizer_1.ExpressionTokenType.EOF
131
+ ? 'A search term is expected'
132
+ : 'A search term is expected before this token');
133
+ }
134
+ countTerm(position) {
135
+ this.termCount += 1;
136
+ if (this.termCount > expression_bounds_1.EXPRESSION_BOUNDS.maxTerms) {
137
+ throw new expression_tokenizer_1.ExpressionSyntaxError(position, expression_types_1.ExpressionExpected.END, `Too many terms (at most ${expression_bounds_1.EXPRESSION_BOUNDS.maxTerms})`);
138
+ }
139
+ }
140
+ parseTerm(field) {
141
+ if (!(0, expression_bounds_1.isValidAttributeKey)(field.name)) {
142
+ throw new expression_tokenizer_1.ExpressionSyntaxError(field.position, expression_types_1.ExpressionExpected.FIELD, 'A field name is made of 1 to 64 letters, digits, "_", "-" and non-empty "."-separated parts');
143
+ }
144
+ const term = (operator, values) => ({
145
+ kind: expression_types_1.ExpressionNodeKind.TERM,
146
+ field: field.name,
147
+ attribute: field.attribute,
148
+ operator,
149
+ values,
150
+ });
151
+ const token = this.peek();
152
+ if (token.position !== field.end) {
153
+ throw new expression_tokenizer_1.ExpressionSyntaxError(field.end, expression_types_1.ExpressionExpected.VALUE, 'A value is expected right after ":"');
154
+ }
155
+ switch (token.type) {
156
+ case expression_tokenizer_1.ExpressionTokenType.COMPARATOR: {
157
+ this.advance();
158
+ const valueToken = this.peek();
159
+ if (valueToken.position !== token.end) {
160
+ throw new expression_tokenizer_1.ExpressionSyntaxError(token.end, expression_types_1.ExpressionExpected.VALUE, 'A value is expected right after the comparator');
161
+ }
162
+ return term(token.operator, [this.parsePlainValue()]);
163
+ }
164
+ case expression_tokenizer_1.ExpressionTokenType.REGEX: {
165
+ if (!this.allowRegex) {
166
+ throw new expression_tokenizer_1.ExpressionSyntaxError(token.position, expression_types_1.ExpressionExpected.VALUE, 'Regular expressions are only allowed in alert rules');
167
+ }
168
+ if (token.pattern.length === 0) {
169
+ throw new expression_tokenizer_1.ExpressionSyntaxError(token.position, expression_types_1.ExpressionExpected.VALUE, 'The regular expression is empty');
170
+ }
171
+ this.advance();
172
+ return term(expression_types_1.ExpressionOperator.REGEX, [token.pattern]);
173
+ }
174
+ case expression_tokenizer_1.ExpressionTokenType.LBRACKET: {
175
+ this.advance();
176
+ const lower = this.parsePlainValue();
177
+ const to = this.peek();
178
+ if (!isKeyword(to, expression_tokenizer_1.ExpressionKeyword.TO)) {
179
+ throw new expression_tokenizer_1.ExpressionSyntaxError(to.position, expression_types_1.ExpressionExpected.VALUE, 'Expected "TO" between the bounds of the range');
180
+ }
181
+ this.advance();
182
+ const upper = this.parsePlainValue();
183
+ const closing = this.peek();
184
+ if (closing.type !== expression_tokenizer_1.ExpressionTokenType.RBRACKET) {
185
+ throw new expression_tokenizer_1.ExpressionSyntaxError(closing.position, expression_types_1.ExpressionExpected.CLOSING_BRACKET, `Missing "]" for the range opened at ${token.position}`);
186
+ }
187
+ this.advance();
188
+ return term(expression_types_1.ExpressionOperator.RANGE, [lower, upper]);
189
+ }
190
+ case expression_tokenizer_1.ExpressionTokenType.LPAREN: {
191
+ this.advance();
192
+ const values = [this.parsePlainValue()];
193
+ while (isKeyword(this.peek(), expression_tokenizer_1.ExpressionKeyword.OR)) {
194
+ this.advance();
195
+ values.push(this.parsePlainValue());
196
+ }
197
+ const closing = this.peek();
198
+ if (closing.type !== expression_tokenizer_1.ExpressionTokenType.RPAREN) {
199
+ throw new expression_tokenizer_1.ExpressionSyntaxError(closing.position, expression_types_1.ExpressionExpected.CLOSING_PAREN, `Missing ")" for the value list opened at ${token.position}`);
200
+ }
201
+ this.advance();
202
+ return term(expression_types_1.ExpressionOperator.IN, values);
203
+ }
204
+ case expression_tokenizer_1.ExpressionTokenType.QUOTED:
205
+ this.advance();
206
+ return term(expression_types_1.ExpressionOperator.EQ, [token.value]);
207
+ case expression_tokenizer_1.ExpressionTokenType.WORD:
208
+ this.advance();
209
+ return this.parseWildcardValue(token, term);
210
+ default:
211
+ throw new expression_tokenizer_1.ExpressionSyntaxError(field.end, expression_types_1.ExpressionExpected.VALUE, 'A value is expected after ":"');
212
+ }
213
+ }
214
+ parseWildcardValue(token, term) {
215
+ const units = token.units;
216
+ const leading = isWildcard(units[0]);
217
+ const trailing = units.length > 1 && isWildcard(units[units.length - 1]);
218
+ if (leading && units.length === 1) {
219
+ return term(expression_types_1.ExpressionOperator.EXISTS, []);
220
+ }
221
+ const inner = units.slice(leading ? 1 : 0, trailing ? units.length - 1 : units.length);
222
+ const innerWildcard = inner.findIndex((unit) => isWildcard(unit));
223
+ if (innerWildcard !== -1) {
224
+ throw new expression_tokenizer_1.ExpressionSyntaxError(token.position + (leading ? 1 : 0) + innerWildcard, expression_types_1.ExpressionExpected.VALUE, 'A wildcard "*" is only allowed at the end (val*) or at both ends (*val*)');
225
+ }
226
+ if (inner.length === 0) {
227
+ throw new expression_tokenizer_1.ExpressionSyntaxError(token.position, expression_types_1.ExpressionExpected.VALUE, 'A value is expected between the wildcards');
228
+ }
229
+ if (leading && !trailing) {
230
+ throw new expression_tokenizer_1.ExpressionSyntaxError(token.position, expression_types_1.ExpressionExpected.VALUE, 'A suffix wildcard (*val) is not supported, use *val*');
231
+ }
232
+ const value = joinUnits(inner);
233
+ if (leading) {
234
+ return term(expression_types_1.ExpressionOperator.CONTAINS, [value]);
235
+ }
236
+ if (trailing) {
237
+ return term(expression_types_1.ExpressionOperator.PREFIX, [value]);
238
+ }
239
+ return term(expression_types_1.ExpressionOperator.EQ, [value]);
240
+ }
241
+ parsePlainValue() {
242
+ const token = this.peek();
243
+ if (token.type === expression_tokenizer_1.ExpressionTokenType.QUOTED) {
244
+ this.advance();
245
+ return token.value;
246
+ }
247
+ if (token.type === expression_tokenizer_1.ExpressionTokenType.WORD) {
248
+ const wildcard = token.units.findIndex((unit) => isWildcard(unit));
249
+ if (wildcard !== -1) {
250
+ throw new expression_tokenizer_1.ExpressionSyntaxError(token.position + wildcard, expression_types_1.ExpressionExpected.VALUE, 'A wildcard "*" is not allowed in a comparison, a range or a list');
251
+ }
252
+ this.advance();
253
+ return joinUnits(token.units);
254
+ }
255
+ throw new expression_tokenizer_1.ExpressionSyntaxError(token.position, expression_types_1.ExpressionExpected.VALUE, 'A value is expected');
256
+ }
257
+ }
258
+ function parseExpression(text, options) {
259
+ if (text.length > expression_bounds_1.EXPRESSION_BOUNDS.maxLength) {
260
+ return {
261
+ ok: false,
262
+ error: {
263
+ position: expression_bounds_1.EXPRESSION_BOUNDS.maxLength,
264
+ expected: expression_types_1.ExpressionExpected.END,
265
+ message: `The expression is too long (at most ${expression_bounds_1.EXPRESSION_BOUNDS.maxLength} characters)`,
266
+ },
267
+ };
268
+ }
269
+ try {
270
+ const tokens = (0, expression_tokenizer_1.tokenizeExpression)(text);
271
+ const ast = new ExpressionParser(tokens, options?.allowRegex === true).parse();
272
+ return { ok: true, ast };
273
+ }
274
+ catch (error) {
275
+ if (error instanceof expression_tokenizer_1.ExpressionSyntaxError) {
276
+ return {
277
+ ok: false,
278
+ error: { position: error.position, expected: error.expected, message: error.message },
279
+ };
280
+ }
281
+ throw error;
282
+ }
283
+ }
284
+ var ValueContext;
285
+ (function (ValueContext) {
286
+ ValueContext["TEXT"] = "TEXT";
287
+ ValueContext["VALUE"] = "VALUE";
288
+ ValueContext["COMPARATOR"] = "COMPARATOR";
289
+ ValueContext["GROUP"] = "GROUP";
290
+ ValueContext["INNER"] = "INNER";
291
+ })(ValueContext || (ValueContext = {}));
292
+ const ALWAYS_ESCAPED = new Set(['\\', '(', ')', '[', ']', '"']);
293
+ const WHITESPACE = /\s/;
294
+ function quote(value) {
295
+ return `"${value.replace(/[\\"]/g, '\\$&')}"`;
296
+ }
297
+ function escapeBare(value, context) {
298
+ const keywords = context === ValueContext.TEXT
299
+ ? [expression_tokenizer_1.ExpressionKeyword.AND, expression_tokenizer_1.ExpressionKeyword.OR, expression_tokenizer_1.ExpressionKeyword.NOT]
300
+ : context === ValueContext.GROUP
301
+ ? [expression_tokenizer_1.ExpressionKeyword.AND, expression_tokenizer_1.ExpressionKeyword.OR, expression_tokenizer_1.ExpressionKeyword.NOT, expression_tokenizer_1.ExpressionKeyword.TO]
302
+ : [];
303
+ let out = '';
304
+ for (let index = 0; index < value.length; index += 1) {
305
+ const char = value[index];
306
+ const first = index === 0;
307
+ const escape = ALWAYS_ESCAPED.has(char) ||
308
+ WHITESPACE.test(char) ||
309
+ (context === ValueContext.TEXT && char === ':') ||
310
+ (context !== ValueContext.TEXT && char === '*') ||
311
+ (first && context === ValueContext.TEXT && char === '-') ||
312
+ (first && context === ValueContext.VALUE && (char === '/' || char === '>' || char === '<')) ||
313
+ (first && context === ValueContext.COMPARATOR && char === '=') ||
314
+ (first && keywords.includes(value));
315
+ out += escape ? `\\${char}` : char;
316
+ }
317
+ return out;
318
+ }
319
+ function formatValue(value, context) {
320
+ if (value.length === 0 || WHITESPACE.test(value)) {
321
+ return quote(value);
322
+ }
323
+ return escapeBare(value, context);
324
+ }
325
+ function stringifyTerm(node) {
326
+ const head = `${node.attribute ? '@' : ''}${node.field}:`;
327
+ const [first, second] = node.values;
328
+ switch (node.operator) {
329
+ case expression_types_1.ExpressionOperator.EQ:
330
+ return head + formatValue(first, ValueContext.VALUE);
331
+ case expression_types_1.ExpressionOperator.PREFIX:
332
+ return `${head}${escapeBare(first, ValueContext.VALUE)}*`;
333
+ case expression_types_1.ExpressionOperator.CONTAINS:
334
+ return `${head}*${escapeBare(first, ValueContext.INNER)}*`;
335
+ case expression_types_1.ExpressionOperator.EXISTS:
336
+ return `${head}*`;
337
+ case expression_types_1.ExpressionOperator.GT:
338
+ return `${head}>${formatValue(first, ValueContext.COMPARATOR)}`;
339
+ case expression_types_1.ExpressionOperator.GTE:
340
+ return `${head}>=${formatValue(first, ValueContext.COMPARATOR)}`;
341
+ case expression_types_1.ExpressionOperator.LT:
342
+ return `${head}<${formatValue(first, ValueContext.COMPARATOR)}`;
343
+ case expression_types_1.ExpressionOperator.LTE:
344
+ return `${head}<=${formatValue(first, ValueContext.COMPARATOR)}`;
345
+ case expression_types_1.ExpressionOperator.RANGE:
346
+ return `${head}[${formatValue(first, ValueContext.GROUP)} TO ${formatValue(second, ValueContext.GROUP)}]`;
347
+ case expression_types_1.ExpressionOperator.IN:
348
+ return `${head}(${node.values
349
+ .map((value) => formatValue(value, ValueContext.GROUP))
350
+ .join(' OR ')})`;
351
+ case expression_types_1.ExpressionOperator.REGEX:
352
+ return `${head}/${first.replace(/\//g, '\\/')}/`;
353
+ }
354
+ }
355
+ function stringifyNode(node) {
356
+ switch (node.kind) {
357
+ case expression_types_1.ExpressionNodeKind.AND:
358
+ return node.children
359
+ .map((child) => child.kind === expression_types_1.ExpressionNodeKind.OR ? `(${stringifyNode(child)})` : stringifyNode(child))
360
+ .join(' ');
361
+ case expression_types_1.ExpressionNodeKind.OR:
362
+ return node.children.map(stringifyNode).join(' OR ');
363
+ case expression_types_1.ExpressionNodeKind.NOT: {
364
+ const child = node.child;
365
+ const inner = stringifyNode(child);
366
+ return child.kind === expression_types_1.ExpressionNodeKind.AND || child.kind === expression_types_1.ExpressionNodeKind.OR
367
+ ? `-(${inner})`
368
+ : `-${inner}`;
369
+ }
370
+ case expression_types_1.ExpressionNodeKind.TERM:
371
+ return stringifyTerm(node);
372
+ case expression_types_1.ExpressionNodeKind.TEXT:
373
+ return node.phrase || node.value.length === 0
374
+ ? quote(node.value)
375
+ : escapeBare(node.value, ValueContext.TEXT);
376
+ }
377
+ }
378
+ function stringifyExpression(ast) {
379
+ return ast === null ? '' : stringifyNode(ast);
380
+ }
381
+ function addTermToExpression(text, field, value, exclude) {
382
+ const attribute = field.startsWith('@');
383
+ const name = attribute ? field.slice(1) : field;
384
+ if (!(0, expression_bounds_1.isValidAttributeKey)(name)) {
385
+ throw new Error(`addTermToExpression: invalid field name "${field}"`);
386
+ }
387
+ const term = {
388
+ kind: expression_types_1.ExpressionNodeKind.TERM,
389
+ field: name,
390
+ attribute,
391
+ operator: expression_types_1.ExpressionOperator.EQ,
392
+ values: [value],
393
+ };
394
+ const added = exclude ? { kind: expression_types_1.ExpressionNodeKind.NOT, child: term } : term;
395
+ const opposite = exclude ? term : { kind: expression_types_1.ExpressionNodeKind.NOT, child: term };
396
+ const addedText = stringifyNode(added);
397
+ const oppositeText = stringifyNode(opposite);
398
+ const parsed = parseExpression(text, { allowRegex: true });
399
+ if (!parsed.ok) {
400
+ const kept = text.trimEnd();
401
+ return kept.length === 0 ? addedText : `${kept} ${addedText}`;
402
+ }
403
+ if (parsed.ast === null) {
404
+ return addedText;
405
+ }
406
+ const operands = parsed.ast.kind === expression_types_1.ExpressionNodeKind.AND ? parsed.ast.children : [parsed.ast];
407
+ const kept = operands.filter((operand) => stringifyNode(operand) !== oppositeText);
408
+ const alreadyThere = kept.some((operand) => stringifyNode(operand) === addedText);
409
+ const children = alreadyThere ? kept : [...kept, added];
410
+ return stringifyExpression(children.length === 1 ? children[0] : { kind: expression_types_1.ExpressionNodeKind.AND, children });
411
+ }
412
+ //# sourceMappingURL=expression.parser.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"expression.parser.js","sourceRoot":"","sources":["../../src/explore/expression.parser.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,59 @@
1
+ import { ExpressionExpected, ExpressionOperator } from './expression.types';
2
+ export declare enum ExpressionTokenType {
3
+ WORD = "WORD",
4
+ QUOTED = "QUOTED",
5
+ FIELD = "FIELD",
6
+ COMPARATOR = "COMPARATOR",
7
+ REGEX = "REGEX",
8
+ KEYWORD = "KEYWORD",
9
+ MINUS = "MINUS",
10
+ LPAREN = "LPAREN",
11
+ RPAREN = "RPAREN",
12
+ LBRACKET = "LBRACKET",
13
+ RBRACKET = "RBRACKET",
14
+ EOF = "EOF"
15
+ }
16
+ export declare enum ExpressionKeyword {
17
+ AND = "AND",
18
+ OR = "OR",
19
+ NOT = "NOT",
20
+ TO = "TO"
21
+ }
22
+ export interface IExpressionCharUnit {
23
+ char: string;
24
+ escaped: boolean;
25
+ }
26
+ interface ITokenSpan {
27
+ position: number;
28
+ end: number;
29
+ }
30
+ export type ComparatorOperator = ExpressionOperator.GT | ExpressionOperator.GTE | ExpressionOperator.LT | ExpressionOperator.LTE;
31
+ export type ExpressionToken = (ITokenSpan & {
32
+ type: ExpressionTokenType.WORD;
33
+ units: IExpressionCharUnit[];
34
+ }) | (ITokenSpan & {
35
+ type: ExpressionTokenType.QUOTED;
36
+ value: string;
37
+ }) | (ITokenSpan & {
38
+ type: ExpressionTokenType.FIELD;
39
+ name: string;
40
+ attribute: boolean;
41
+ }) | (ITokenSpan & {
42
+ type: ExpressionTokenType.COMPARATOR;
43
+ operator: ComparatorOperator;
44
+ }) | (ITokenSpan & {
45
+ type: ExpressionTokenType.REGEX;
46
+ pattern: string;
47
+ }) | (ITokenSpan & {
48
+ type: ExpressionTokenType.KEYWORD;
49
+ keyword: ExpressionKeyword;
50
+ }) | (ITokenSpan & {
51
+ type: ExpressionTokenType.MINUS | ExpressionTokenType.LPAREN | ExpressionTokenType.RPAREN | ExpressionTokenType.LBRACKET | ExpressionTokenType.RBRACKET | ExpressionTokenType.EOF;
52
+ });
53
+ export declare class ExpressionSyntaxError extends Error {
54
+ readonly position: number;
55
+ readonly expected: ExpressionExpected;
56
+ constructor(position: number, expected: ExpressionExpected, message: string);
57
+ }
58
+ export declare function tokenizeExpression(text: string): ExpressionToken[];
59
+ export {};