@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.
- package/dist/explore/expression.bounds.d.ts +7 -0
- package/dist/explore/expression.bounds.js +17 -0
- package/dist/explore/expression.bounds.js.map +1 -0
- package/dist/explore/expression.parser.d.ts +7 -0
- package/dist/explore/expression.parser.js +412 -0
- package/dist/explore/expression.parser.js.map +1 -0
- package/dist/explore/expression.tokenizer.d.ts +59 -0
- package/dist/explore/expression.tokenizer.js +246 -0
- package/dist/explore/expression.tokenizer.js.map +1 -0
- package/dist/explore/expression.types.d.ts +58 -0
- package/dist/explore/expression.types.js +36 -0
- package/dist/explore/expression.types.js.map +1 -0
- package/dist/explore/index.d.ts +4 -0
- package/dist/explore/index.js +24 -0
- package/dist/explore/index.js.map +1 -0
- package/dist/explore/tests/expression.parser.spec.d.ts +1 -0
- package/dist/explore/tests/expression.parser.spec.js +228 -0
- package/dist/explore/tests/expression.parser.spec.js.map +1 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/server/explore/field-catalog.types.d.ts +21 -0
- package/dist/server/explore/field-catalog.types.js +12 -0
- package/dist/server/explore/field-catalog.types.js.map +1 -0
- package/dist/server/explore/like-escape.d.ts +1 -0
- package/dist/server/explore/like-escape.js +7 -0
- package/dist/server/explore/like-escape.js.map +1 -0
- package/dist/server/explore/sql-translator.d.ts +18 -0
- package/dist/server/explore/sql-translator.js +265 -0
- package/dist/server/explore/sql-translator.js.map +1 -0
- package/dist/server/explore/tests/sql-translator.spec.d.ts +1 -0
- package/dist/server/explore/tests/sql-translator.spec.js +281 -0
- package/dist/server/explore/tests/sql-translator.spec.js.map +1 -0
- package/dist/server/index.d.ts +3 -0
- package/dist/server/index.js +3 -0
- package/dist/server/index.js.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,246 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.ExpressionSyntaxError = exports.ExpressionKeyword = exports.ExpressionTokenType = void 0;
|
|
4
|
+
exports.tokenizeExpression = tokenizeExpression;
|
|
5
|
+
const expression_types_1 = require("./expression.types");
|
|
6
|
+
var ExpressionTokenType;
|
|
7
|
+
(function (ExpressionTokenType) {
|
|
8
|
+
ExpressionTokenType["WORD"] = "WORD";
|
|
9
|
+
ExpressionTokenType["QUOTED"] = "QUOTED";
|
|
10
|
+
ExpressionTokenType["FIELD"] = "FIELD";
|
|
11
|
+
ExpressionTokenType["COMPARATOR"] = "COMPARATOR";
|
|
12
|
+
ExpressionTokenType["REGEX"] = "REGEX";
|
|
13
|
+
ExpressionTokenType["KEYWORD"] = "KEYWORD";
|
|
14
|
+
ExpressionTokenType["MINUS"] = "MINUS";
|
|
15
|
+
ExpressionTokenType["LPAREN"] = "LPAREN";
|
|
16
|
+
ExpressionTokenType["RPAREN"] = "RPAREN";
|
|
17
|
+
ExpressionTokenType["LBRACKET"] = "LBRACKET";
|
|
18
|
+
ExpressionTokenType["RBRACKET"] = "RBRACKET";
|
|
19
|
+
ExpressionTokenType["EOF"] = "EOF";
|
|
20
|
+
})(ExpressionTokenType || (exports.ExpressionTokenType = ExpressionTokenType = {}));
|
|
21
|
+
var ExpressionKeyword;
|
|
22
|
+
(function (ExpressionKeyword) {
|
|
23
|
+
ExpressionKeyword["AND"] = "AND";
|
|
24
|
+
ExpressionKeyword["OR"] = "OR";
|
|
25
|
+
ExpressionKeyword["NOT"] = "NOT";
|
|
26
|
+
ExpressionKeyword["TO"] = "TO";
|
|
27
|
+
})(ExpressionKeyword || (exports.ExpressionKeyword = ExpressionKeyword = {}));
|
|
28
|
+
class ExpressionSyntaxError extends Error {
|
|
29
|
+
constructor(position, expected, message) {
|
|
30
|
+
super(message);
|
|
31
|
+
this.position = position;
|
|
32
|
+
this.expected = expected;
|
|
33
|
+
this.name = 'ExpressionSyntaxError';
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
exports.ExpressionSyntaxError = ExpressionSyntaxError;
|
|
37
|
+
var LexerMode;
|
|
38
|
+
(function (LexerMode) {
|
|
39
|
+
LexerMode["NORMAL"] = "NORMAL";
|
|
40
|
+
LexerMode["AFTER_FIELD"] = "AFTER_FIELD";
|
|
41
|
+
LexerMode["VALUE_GROUP"] = "VALUE_GROUP";
|
|
42
|
+
})(LexerMode || (LexerMode = {}));
|
|
43
|
+
const WHITESPACE = /\s/;
|
|
44
|
+
const WORD_BREAKS = new Set(['(', ')', '[', ']', '"']);
|
|
45
|
+
const NORMAL_KEYWORDS = new Set([
|
|
46
|
+
ExpressionKeyword.AND,
|
|
47
|
+
ExpressionKeyword.OR,
|
|
48
|
+
ExpressionKeyword.NOT,
|
|
49
|
+
]);
|
|
50
|
+
const GROUP_KEYWORDS = new Set([
|
|
51
|
+
ExpressionKeyword.AND,
|
|
52
|
+
ExpressionKeyword.OR,
|
|
53
|
+
ExpressionKeyword.NOT,
|
|
54
|
+
ExpressionKeyword.TO,
|
|
55
|
+
]);
|
|
56
|
+
function isWhitespace(char) {
|
|
57
|
+
return WHITESPACE.test(char);
|
|
58
|
+
}
|
|
59
|
+
function tokenizeExpression(text) {
|
|
60
|
+
const tokens = [];
|
|
61
|
+
const length = text.length;
|
|
62
|
+
let index = 0;
|
|
63
|
+
let mode = LexerMode.NORMAL;
|
|
64
|
+
let afterFieldToken = false;
|
|
65
|
+
const readQuoted = () => {
|
|
66
|
+
const start = index;
|
|
67
|
+
index += 1;
|
|
68
|
+
let value = '';
|
|
69
|
+
while (index < length) {
|
|
70
|
+
const char = text[index];
|
|
71
|
+
if (char === '\\' && index + 1 < length) {
|
|
72
|
+
value += text[index + 1];
|
|
73
|
+
index += 2;
|
|
74
|
+
continue;
|
|
75
|
+
}
|
|
76
|
+
if (char === '"') {
|
|
77
|
+
index += 1;
|
|
78
|
+
tokens.push({ type: ExpressionTokenType.QUOTED, position: start, end: index, value });
|
|
79
|
+
return;
|
|
80
|
+
}
|
|
81
|
+
value += char;
|
|
82
|
+
index += 1;
|
|
83
|
+
}
|
|
84
|
+
throw new ExpressionSyntaxError(length, expression_types_1.ExpressionExpected.CLOSING_QUOTE, `Missing closing quote for the phrase opened at ${start}`);
|
|
85
|
+
};
|
|
86
|
+
const readRegex = () => {
|
|
87
|
+
const start = index;
|
|
88
|
+
index += 1;
|
|
89
|
+
let pattern = '';
|
|
90
|
+
while (index < length) {
|
|
91
|
+
const char = text[index];
|
|
92
|
+
if (char === '\\' && index + 1 < length) {
|
|
93
|
+
const next = text[index + 1];
|
|
94
|
+
pattern += next === '/' ? '/' : `\\${next}`;
|
|
95
|
+
index += 2;
|
|
96
|
+
continue;
|
|
97
|
+
}
|
|
98
|
+
if (char === '/') {
|
|
99
|
+
index += 1;
|
|
100
|
+
tokens.push({ type: ExpressionTokenType.REGEX, position: start, end: index, pattern });
|
|
101
|
+
return;
|
|
102
|
+
}
|
|
103
|
+
pattern += char;
|
|
104
|
+
index += 1;
|
|
105
|
+
}
|
|
106
|
+
throw new ExpressionSyntaxError(length, expression_types_1.ExpressionExpected.CLOSING_QUOTE, `Missing closing "/" for the regular expression opened at ${start}`);
|
|
107
|
+
};
|
|
108
|
+
const readWord = (splitOnColon, keywords) => {
|
|
109
|
+
const start = index;
|
|
110
|
+
const units = [];
|
|
111
|
+
while (index < length) {
|
|
112
|
+
const char = text[index];
|
|
113
|
+
if (char === '\\') {
|
|
114
|
+
const escapedChar = index + 1 < length ? text[index + 1] : '\\';
|
|
115
|
+
units.push({ char: escapedChar, escaped: true });
|
|
116
|
+
index += index + 1 < length ? 2 : 1;
|
|
117
|
+
continue;
|
|
118
|
+
}
|
|
119
|
+
if (isWhitespace(char) || WORD_BREAKS.has(char)) {
|
|
120
|
+
break;
|
|
121
|
+
}
|
|
122
|
+
if (splitOnColon && char === ':') {
|
|
123
|
+
if (units.length === 0 || units.some((unit) => unit.escaped)) {
|
|
124
|
+
throw new ExpressionSyntaxError(start, expression_types_1.ExpressionExpected.FIELD, 'A field name is expected before ":"');
|
|
125
|
+
}
|
|
126
|
+
const raw = units.map((unit) => unit.char).join('');
|
|
127
|
+
const attribute = raw.startsWith('@');
|
|
128
|
+
index += 1;
|
|
129
|
+
tokens.push({
|
|
130
|
+
type: ExpressionTokenType.FIELD,
|
|
131
|
+
position: start,
|
|
132
|
+
end: index,
|
|
133
|
+
name: attribute ? raw.slice(1) : raw,
|
|
134
|
+
attribute,
|
|
135
|
+
});
|
|
136
|
+
mode = LexerMode.AFTER_FIELD;
|
|
137
|
+
afterFieldToken = true;
|
|
138
|
+
return;
|
|
139
|
+
}
|
|
140
|
+
units.push({ char, escaped: false });
|
|
141
|
+
index += 1;
|
|
142
|
+
}
|
|
143
|
+
if (units.length === 0) {
|
|
144
|
+
return;
|
|
145
|
+
}
|
|
146
|
+
const raw = units.map((unit) => unit.char).join('');
|
|
147
|
+
if (keywords && keywords.has(raw) && units.every((unit) => !unit.escaped)) {
|
|
148
|
+
tokens.push({
|
|
149
|
+
type: ExpressionTokenType.KEYWORD,
|
|
150
|
+
position: start,
|
|
151
|
+
end: index,
|
|
152
|
+
keyword: raw,
|
|
153
|
+
});
|
|
154
|
+
return;
|
|
155
|
+
}
|
|
156
|
+
tokens.push({ type: ExpressionTokenType.WORD, position: start, end: index, units });
|
|
157
|
+
};
|
|
158
|
+
const pushSingle = (type) => {
|
|
159
|
+
tokens.push({ type, position: index, end: index + 1 });
|
|
160
|
+
index += 1;
|
|
161
|
+
};
|
|
162
|
+
while (true) {
|
|
163
|
+
if (mode === LexerMode.AFTER_FIELD) {
|
|
164
|
+
const char = index < length ? text[index] : '';
|
|
165
|
+
const wasFieldToken = afterFieldToken;
|
|
166
|
+
afterFieldToken = false;
|
|
167
|
+
if (char === '' || isWhitespace(char) || char === ')' || char === ']') {
|
|
168
|
+
mode = LexerMode.NORMAL;
|
|
169
|
+
continue;
|
|
170
|
+
}
|
|
171
|
+
if (wasFieldToken && char === '/') {
|
|
172
|
+
readRegex();
|
|
173
|
+
mode = LexerMode.NORMAL;
|
|
174
|
+
continue;
|
|
175
|
+
}
|
|
176
|
+
if (wasFieldToken && (char === '>' || char === '<')) {
|
|
177
|
+
const withEqual = text[index + 1] === '=';
|
|
178
|
+
const operator = char === '>'
|
|
179
|
+
? withEqual
|
|
180
|
+
? expression_types_1.ExpressionOperator.GTE
|
|
181
|
+
: expression_types_1.ExpressionOperator.GT
|
|
182
|
+
: withEqual
|
|
183
|
+
? expression_types_1.ExpressionOperator.LTE
|
|
184
|
+
: expression_types_1.ExpressionOperator.LT;
|
|
185
|
+
const width = withEqual ? 2 : 1;
|
|
186
|
+
tokens.push({
|
|
187
|
+
type: ExpressionTokenType.COMPARATOR,
|
|
188
|
+
position: index,
|
|
189
|
+
end: index + width,
|
|
190
|
+
operator,
|
|
191
|
+
});
|
|
192
|
+
index += width;
|
|
193
|
+
continue;
|
|
194
|
+
}
|
|
195
|
+
if (char === '(' || char === '[') {
|
|
196
|
+
pushSingle(char === '(' ? ExpressionTokenType.LPAREN : ExpressionTokenType.LBRACKET);
|
|
197
|
+
mode = LexerMode.VALUE_GROUP;
|
|
198
|
+
continue;
|
|
199
|
+
}
|
|
200
|
+
if (char === '"') {
|
|
201
|
+
readQuoted();
|
|
202
|
+
}
|
|
203
|
+
else {
|
|
204
|
+
readWord(false, null);
|
|
205
|
+
}
|
|
206
|
+
mode = LexerMode.NORMAL;
|
|
207
|
+
continue;
|
|
208
|
+
}
|
|
209
|
+
while (index < length && isWhitespace(text[index])) {
|
|
210
|
+
index += 1;
|
|
211
|
+
}
|
|
212
|
+
if (index >= length) {
|
|
213
|
+
tokens.push({ type: ExpressionTokenType.EOF, position: length, end: length });
|
|
214
|
+
return tokens;
|
|
215
|
+
}
|
|
216
|
+
const char = text[index];
|
|
217
|
+
if (char === '(') {
|
|
218
|
+
pushSingle(ExpressionTokenType.LPAREN);
|
|
219
|
+
}
|
|
220
|
+
else if (char === ')' || char === ']') {
|
|
221
|
+
pushSingle(char === ')' ? ExpressionTokenType.RPAREN : ExpressionTokenType.RBRACKET);
|
|
222
|
+
if (mode === LexerMode.VALUE_GROUP) {
|
|
223
|
+
mode = LexerMode.NORMAL;
|
|
224
|
+
}
|
|
225
|
+
}
|
|
226
|
+
else if (char === '[') {
|
|
227
|
+
pushSingle(ExpressionTokenType.LBRACKET);
|
|
228
|
+
}
|
|
229
|
+
else if (char === '"') {
|
|
230
|
+
readQuoted();
|
|
231
|
+
}
|
|
232
|
+
else if (mode === LexerMode.NORMAL &&
|
|
233
|
+
char === '-' &&
|
|
234
|
+
index + 1 < length &&
|
|
235
|
+
!isWhitespace(text[index + 1])) {
|
|
236
|
+
pushSingle(ExpressionTokenType.MINUS);
|
|
237
|
+
}
|
|
238
|
+
else if (mode === LexerMode.VALUE_GROUP) {
|
|
239
|
+
readWord(false, GROUP_KEYWORDS);
|
|
240
|
+
}
|
|
241
|
+
else {
|
|
242
|
+
readWord(true, NORMAL_KEYWORDS);
|
|
243
|
+
}
|
|
244
|
+
}
|
|
245
|
+
}
|
|
246
|
+
//# sourceMappingURL=expression.tokenizer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"expression.tokenizer.js","sourceRoot":"","sources":["../../src/explore/expression.tokenizer.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
export declare enum ExpressionNodeKind {
|
|
2
|
+
AND = "AND",
|
|
3
|
+
OR = "OR",
|
|
4
|
+
NOT = "NOT",
|
|
5
|
+
TERM = "TERM",
|
|
6
|
+
TEXT = "TEXT"
|
|
7
|
+
}
|
|
8
|
+
export declare enum ExpressionOperator {
|
|
9
|
+
EQ = "EQ",
|
|
10
|
+
GT = "GT",
|
|
11
|
+
GTE = "GTE",
|
|
12
|
+
LT = "LT",
|
|
13
|
+
LTE = "LTE",
|
|
14
|
+
RANGE = "RANGE",
|
|
15
|
+
IN = "IN",
|
|
16
|
+
PREFIX = "PREFIX",
|
|
17
|
+
CONTAINS = "CONTAINS",
|
|
18
|
+
EXISTS = "EXISTS",
|
|
19
|
+
REGEX = "REGEX"
|
|
20
|
+
}
|
|
21
|
+
export type ExpressionNode = {
|
|
22
|
+
kind: ExpressionNodeKind.AND | ExpressionNodeKind.OR;
|
|
23
|
+
children: ExpressionNode[];
|
|
24
|
+
} | {
|
|
25
|
+
kind: ExpressionNodeKind.NOT;
|
|
26
|
+
child: ExpressionNode;
|
|
27
|
+
} | {
|
|
28
|
+
kind: ExpressionNodeKind.TERM;
|
|
29
|
+
field: string;
|
|
30
|
+
attribute: boolean;
|
|
31
|
+
operator: ExpressionOperator;
|
|
32
|
+
values: string[];
|
|
33
|
+
} | {
|
|
34
|
+
kind: ExpressionNodeKind.TEXT;
|
|
35
|
+
value: string;
|
|
36
|
+
phrase: boolean;
|
|
37
|
+
};
|
|
38
|
+
export declare enum ExpressionExpected {
|
|
39
|
+
VALUE = "VALUE",
|
|
40
|
+
FIELD = "FIELD",
|
|
41
|
+
CLOSING_PAREN = "CLOSING_PAREN",
|
|
42
|
+
CLOSING_BRACKET = "CLOSING_BRACKET",
|
|
43
|
+
CLOSING_QUOTE = "CLOSING_QUOTE",
|
|
44
|
+
OPERAND = "OPERAND",
|
|
45
|
+
END = "END"
|
|
46
|
+
}
|
|
47
|
+
export interface IExpressionError {
|
|
48
|
+
position: number;
|
|
49
|
+
expected: ExpressionExpected;
|
|
50
|
+
message: string;
|
|
51
|
+
}
|
|
52
|
+
export type ParseExpressionResult = {
|
|
53
|
+
ok: true;
|
|
54
|
+
ast: ExpressionNode | null;
|
|
55
|
+
} | {
|
|
56
|
+
ok: false;
|
|
57
|
+
error: IExpressionError;
|
|
58
|
+
};
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.ExpressionExpected = exports.ExpressionOperator = exports.ExpressionNodeKind = void 0;
|
|
4
|
+
var ExpressionNodeKind;
|
|
5
|
+
(function (ExpressionNodeKind) {
|
|
6
|
+
ExpressionNodeKind["AND"] = "AND";
|
|
7
|
+
ExpressionNodeKind["OR"] = "OR";
|
|
8
|
+
ExpressionNodeKind["NOT"] = "NOT";
|
|
9
|
+
ExpressionNodeKind["TERM"] = "TERM";
|
|
10
|
+
ExpressionNodeKind["TEXT"] = "TEXT";
|
|
11
|
+
})(ExpressionNodeKind || (exports.ExpressionNodeKind = ExpressionNodeKind = {}));
|
|
12
|
+
var ExpressionOperator;
|
|
13
|
+
(function (ExpressionOperator) {
|
|
14
|
+
ExpressionOperator["EQ"] = "EQ";
|
|
15
|
+
ExpressionOperator["GT"] = "GT";
|
|
16
|
+
ExpressionOperator["GTE"] = "GTE";
|
|
17
|
+
ExpressionOperator["LT"] = "LT";
|
|
18
|
+
ExpressionOperator["LTE"] = "LTE";
|
|
19
|
+
ExpressionOperator["RANGE"] = "RANGE";
|
|
20
|
+
ExpressionOperator["IN"] = "IN";
|
|
21
|
+
ExpressionOperator["PREFIX"] = "PREFIX";
|
|
22
|
+
ExpressionOperator["CONTAINS"] = "CONTAINS";
|
|
23
|
+
ExpressionOperator["EXISTS"] = "EXISTS";
|
|
24
|
+
ExpressionOperator["REGEX"] = "REGEX";
|
|
25
|
+
})(ExpressionOperator || (exports.ExpressionOperator = ExpressionOperator = {}));
|
|
26
|
+
var ExpressionExpected;
|
|
27
|
+
(function (ExpressionExpected) {
|
|
28
|
+
ExpressionExpected["VALUE"] = "VALUE";
|
|
29
|
+
ExpressionExpected["FIELD"] = "FIELD";
|
|
30
|
+
ExpressionExpected["CLOSING_PAREN"] = "CLOSING_PAREN";
|
|
31
|
+
ExpressionExpected["CLOSING_BRACKET"] = "CLOSING_BRACKET";
|
|
32
|
+
ExpressionExpected["CLOSING_QUOTE"] = "CLOSING_QUOTE";
|
|
33
|
+
ExpressionExpected["OPERAND"] = "OPERAND";
|
|
34
|
+
ExpressionExpected["END"] = "END";
|
|
35
|
+
})(ExpressionExpected || (exports.ExpressionExpected = ExpressionExpected = {}));
|
|
36
|
+
//# sourceMappingURL=expression.types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"expression.types.js","sourceRoot":"","sources":["../../src/explore/expression.types.ts"],"names":[],"mappings":";;;AAoBA,IAAY,kBAMX;AAND,WAAY,kBAAkB;IAC5B,iCAAW,CAAA;IACX,+BAAS,CAAA;IACT,iCAAW,CAAA;IACX,mCAAa,CAAA;IACb,mCAAa,CAAA;AACf,CAAC,EANW,kBAAkB,kCAAlB,kBAAkB,QAM7B;AAED,IAAY,kBAYX;AAZD,WAAY,kBAAkB;IAC5B,+BAAS,CAAA;IACT,+BAAS,CAAA;IACT,iCAAW,CAAA;IACX,+BAAS,CAAA;IACT,iCAAW,CAAA;IACX,qCAAe,CAAA;IACf,+BAAS,CAAA;IACT,uCAAiB,CAAA;IACjB,2CAAqB,CAAA;IACrB,uCAAiB,CAAA;IACjB,qCAAe,CAAA;AACjB,CAAC,EAZW,kBAAkB,kCAAlB,kBAAkB,QAY7B;AAwBD,IAAY,kBAQX;AARD,WAAY,kBAAkB;IAC5B,qCAAe,CAAA;IACf,qCAAe,CAAA;IACf,qDAA+B,CAAA;IAC/B,yDAAmC,CAAA;IACnC,qDAA+B,CAAA;IAC/B,yCAAmB,CAAA;IACnB,iCAAW,CAAA;AACb,CAAC,EARW,kBAAkB,kCAAlB,kBAAkB,QAQ7B"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
14
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
|
+
};
|
|
16
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
+
exports.addTermToExpression = exports.stringifyExpression = exports.parseExpression = void 0;
|
|
18
|
+
__exportStar(require("./expression.types"), exports);
|
|
19
|
+
__exportStar(require("./expression.bounds"), exports);
|
|
20
|
+
var expression_parser_1 = require("./expression.parser");
|
|
21
|
+
Object.defineProperty(exports, "parseExpression", { enumerable: true, get: function () { return expression_parser_1.parseExpression; } });
|
|
22
|
+
Object.defineProperty(exports, "stringifyExpression", { enumerable: true, get: function () { return expression_parser_1.stringifyExpression; } });
|
|
23
|
+
Object.defineProperty(exports, "addTermToExpression", { enumerable: true, get: function () { return expression_parser_1.addTermToExpression; } });
|
|
24
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/explore/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;AACA,qDAAmC;AACnC,sDAAoC;AACpC,yDAAgG;AAAvF,oHAAA,eAAe,OAAA;AAAE,wHAAA,mBAAmB,OAAA;AAAE,wHAAA,mBAAmB,OAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,228 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const expression_bounds_1 = require("../expression.bounds");
|
|
4
|
+
const expression_parser_1 = require("../expression.parser");
|
|
5
|
+
const expression_types_1 = require("../expression.types");
|
|
6
|
+
const term = (field, operator, values, attribute = false) => ({ kind: expression_types_1.ExpressionNodeKind.TERM, field, attribute, operator, values });
|
|
7
|
+
const text = (value, phrase = false) => ({
|
|
8
|
+
kind: expression_types_1.ExpressionNodeKind.TEXT,
|
|
9
|
+
value,
|
|
10
|
+
phrase,
|
|
11
|
+
});
|
|
12
|
+
const and = (...children) => ({
|
|
13
|
+
kind: expression_types_1.ExpressionNodeKind.AND,
|
|
14
|
+
children,
|
|
15
|
+
});
|
|
16
|
+
const or = (...children) => ({
|
|
17
|
+
kind: expression_types_1.ExpressionNodeKind.OR,
|
|
18
|
+
children,
|
|
19
|
+
});
|
|
20
|
+
const not = (child) => ({ kind: expression_types_1.ExpressionNodeKind.NOT, child });
|
|
21
|
+
function parseOk(input, allowRegex = false) {
|
|
22
|
+
const result = (0, expression_parser_1.parseExpression)(input, { allowRegex });
|
|
23
|
+
if (!result.ok) {
|
|
24
|
+
throw new Error(`"${input}" did not parse: ${JSON.stringify(result.error)}`);
|
|
25
|
+
}
|
|
26
|
+
return result.ast;
|
|
27
|
+
}
|
|
28
|
+
function parseError(input, allowRegex = false) {
|
|
29
|
+
const result = (0, expression_parser_1.parseExpression)(input, { allowRegex });
|
|
30
|
+
if (result.ok) {
|
|
31
|
+
throw new Error(`"${input}" parsed: ${JSON.stringify(result.ast)}`);
|
|
32
|
+
}
|
|
33
|
+
return { position: result.error.position, expected: result.error.expected };
|
|
34
|
+
}
|
|
35
|
+
describe('parseExpression — every form of §3.1 (A1)', () => {
|
|
36
|
+
const cases = [
|
|
37
|
+
['', null],
|
|
38
|
+
[' ', null],
|
|
39
|
+
['timeout', text('timeout')],
|
|
40
|
+
['"connection reset by peer"', text('connection reset by peer', true)],
|
|
41
|
+
['level:ERROR', term('level', expression_types_1.ExpressionOperator.EQ, ['ERROR'])],
|
|
42
|
+
['env:"my env"', term('env', expression_types_1.ExpressionOperator.EQ, ['my env'])],
|
|
43
|
+
['@user.id:42', term('user.id', expression_types_1.ExpressionOperator.EQ, ['42'], true)],
|
|
44
|
+
['@flag.dark-mode:on', term('flag.dark-mode', expression_types_1.ExpressionOperator.EQ, ['on'], true)],
|
|
45
|
+
['release:1.2*', term('release', expression_types_1.ExpressionOperator.PREFIX, ['1.2'])],
|
|
46
|
+
['message:*timeout*', term('message', expression_types_1.ExpressionOperator.CONTAINS, ['timeout'])],
|
|
47
|
+
['status:>500', term('status', expression_types_1.ExpressionOperator.GT, ['500'])],
|
|
48
|
+
['status:>=500', term('status', expression_types_1.ExpressionOperator.GTE, ['500'])],
|
|
49
|
+
['status:<500', term('status', expression_types_1.ExpressionOperator.LT, ['500'])],
|
|
50
|
+
['status:<=500', term('status', expression_types_1.ExpressionOperator.LTE, ['500'])],
|
|
51
|
+
['status:[400 TO 499]', term('status', expression_types_1.ExpressionOperator.RANGE, ['400', '499'])],
|
|
52
|
+
[
|
|
53
|
+
'createdAt:[2026-10-01 TO "2026-10-15T10:00:00Z"]',
|
|
54
|
+
term('createdAt', expression_types_1.ExpressionOperator.RANGE, ['2026-10-01', '2026-10-15T10:00:00Z']),
|
|
55
|
+
],
|
|
56
|
+
[
|
|
57
|
+
'level:(ERROR OR WARN OR "FATAL")',
|
|
58
|
+
term('level', expression_types_1.ExpressionOperator.IN, ['ERROR', 'WARN', 'FATAL']),
|
|
59
|
+
],
|
|
60
|
+
['-level:DEBUG', not(term('level', expression_types_1.ExpressionOperator.EQ, ['DEBUG']))],
|
|
61
|
+
['NOT level:DEBUG', not(term('level', expression_types_1.ExpressionOperator.EQ, ['DEBUG']))],
|
|
62
|
+
['-timeout', not(text('timeout'))],
|
|
63
|
+
['release:*', term('release', expression_types_1.ExpressionOperator.EXISTS, [])],
|
|
64
|
+
['a b', and(text('a'), text('b'))],
|
|
65
|
+
['a AND b', and(text('a'), text('b'))],
|
|
66
|
+
['a OR b', or(text('a'), text('b'))],
|
|
67
|
+
['a b OR c', or(and(text('a'), text('b')), text('c'))],
|
|
68
|
+
['a OR b c', or(text('a'), and(text('b'), text('c')))],
|
|
69
|
+
['(a OR b) c', and(or(text('a'), text('b')), text('c'))],
|
|
70
|
+
['-(a OR b)', not(or(text('a'), text('b')))],
|
|
71
|
+
['a (b c)', and(text('a'), text('b'), text('c'))],
|
|
72
|
+
['url:http://host/path', term('url', expression_types_1.ExpressionOperator.EQ, ['http://host/path'])],
|
|
73
|
+
['path:a\\ b\\*', term('path', expression_types_1.ExpressionOperator.EQ, ['a b*'])],
|
|
74
|
+
['a\\:b', text('a:b')],
|
|
75
|
+
['\\OR', text('OR')],
|
|
76
|
+
['level:OR', term('level', expression_types_1.ExpressionOperator.EQ, ['OR'])],
|
|
77
|
+
['go TO school', and(text('go'), text('TO'), text('school'))],
|
|
78
|
+
['a - b', and(text('a'), text('-'), text('b'))],
|
|
79
|
+
[
|
|
80
|
+
'env:prod -level:DEBUG @user.id:* "boom"',
|
|
81
|
+
and(term('env', expression_types_1.ExpressionOperator.EQ, ['prod']), not(term('level', expression_types_1.ExpressionOperator.EQ, ['DEBUG'])), term('user.id', expression_types_1.ExpressionOperator.EXISTS, [], true), text('boom', true)),
|
|
82
|
+
],
|
|
83
|
+
];
|
|
84
|
+
it.each(cases)('parses %j', (input, expected) => {
|
|
85
|
+
expect(parseOk(input)).toEqual(expected);
|
|
86
|
+
});
|
|
87
|
+
it('parses a regex only with allowRegex (A26)', () => {
|
|
88
|
+
expect(parseError('message:/a+/')).toEqual({ position: 8, expected: expression_types_1.ExpressionExpected.VALUE });
|
|
89
|
+
expect(parseOk('message:/a+/', true)).toEqual(term('message', expression_types_1.ExpressionOperator.REGEX, ['a+']));
|
|
90
|
+
expect(parseOk('path:/a\\/b\\d/', true)).toEqual(term('path', expression_types_1.ExpressionOperator.REGEX, ['a/b\\d']));
|
|
91
|
+
});
|
|
92
|
+
});
|
|
93
|
+
describe('parseExpression — positioned errors (A1)', () => {
|
|
94
|
+
const cases = [
|
|
95
|
+
['level:', 6, expression_types_1.ExpressionExpected.VALUE],
|
|
96
|
+
['level: ERROR', 6, expression_types_1.ExpressionExpected.VALUE],
|
|
97
|
+
['(a', 2, expression_types_1.ExpressionExpected.CLOSING_PAREN],
|
|
98
|
+
['status:[1 TO', 12, expression_types_1.ExpressionExpected.VALUE],
|
|
99
|
+
['status:[1 TO 2', 14, expression_types_1.ExpressionExpected.CLOSING_BRACKET],
|
|
100
|
+
['status:[1 2]', 10, expression_types_1.ExpressionExpected.VALUE],
|
|
101
|
+
['"abc', 4, expression_types_1.ExpressionExpected.CLOSING_QUOTE],
|
|
102
|
+
['level:(a OR b', 13, expression_types_1.ExpressionExpected.CLOSING_PAREN],
|
|
103
|
+
['a OR', 4, expression_types_1.ExpressionExpected.OPERAND],
|
|
104
|
+
['AND a', 0, expression_types_1.ExpressionExpected.OPERAND],
|
|
105
|
+
['()', 1, expression_types_1.ExpressionExpected.OPERAND],
|
|
106
|
+
['a)', 1, expression_types_1.ExpressionExpected.END],
|
|
107
|
+
[':x', 0, expression_types_1.ExpressionExpected.FIELD],
|
|
108
|
+
['@:x', 0, expression_types_1.ExpressionExpected.FIELD],
|
|
109
|
+
['@a.b..c:x', 0, expression_types_1.ExpressionExpected.FIELD],
|
|
110
|
+
['status:>', 8, expression_types_1.ExpressionExpected.VALUE],
|
|
111
|
+
['release:*1', 8, expression_types_1.ExpressionExpected.VALUE],
|
|
112
|
+
['release:a*b', 9, expression_types_1.ExpressionExpected.VALUE],
|
|
113
|
+
['status:[* TO 5]', 8, expression_types_1.ExpressionExpected.VALUE],
|
|
114
|
+
['message:/a+', 11, expression_types_1.ExpressionExpected.CLOSING_QUOTE],
|
|
115
|
+
];
|
|
116
|
+
it.each(cases)('%j fails at %i', (input, position, expected) => {
|
|
117
|
+
expect(parseError(input)).toEqual({ position, expected });
|
|
118
|
+
});
|
|
119
|
+
it("refuses the trapped key of review n°1: @a'); DROP", () => {
|
|
120
|
+
expect((0, expression_parser_1.parseExpression)("@a'); DROP").ok).toBe(false);
|
|
121
|
+
expect(parseError("@a');DROP:x")).toEqual({ position: 3, expected: expression_types_1.ExpressionExpected.END });
|
|
122
|
+
expect(parseError("@a';DROP:x")).toEqual({ position: 0, expected: expression_types_1.ExpressionExpected.FIELD });
|
|
123
|
+
});
|
|
124
|
+
it('bounds the length', () => {
|
|
125
|
+
const input = 'a'.repeat(expression_bounds_1.EXPRESSION_BOUNDS.maxLength + 1);
|
|
126
|
+
expect(parseError(input)).toEqual({
|
|
127
|
+
position: expression_bounds_1.EXPRESSION_BOUNDS.maxLength,
|
|
128
|
+
expected: expression_types_1.ExpressionExpected.END,
|
|
129
|
+
});
|
|
130
|
+
expect((0, expression_parser_1.parseExpression)('a'.repeat(expression_bounds_1.EXPRESSION_BOUNDS.maxLength)).ok).toBe(true);
|
|
131
|
+
});
|
|
132
|
+
it('bounds the depth', () => {
|
|
133
|
+
const atLimit = `${'('.repeat(16)}a${')'.repeat(16)}`;
|
|
134
|
+
expect(parseOk(atLimit)).toEqual(text('a'));
|
|
135
|
+
const beyond = `${'('.repeat(17)}a${')'.repeat(17)}`;
|
|
136
|
+
expect(parseError(beyond)).toEqual({
|
|
137
|
+
position: 16,
|
|
138
|
+
expected: expression_types_1.ExpressionExpected.CLOSING_PAREN,
|
|
139
|
+
});
|
|
140
|
+
});
|
|
141
|
+
it('bounds the number of terms', () => {
|
|
142
|
+
const words = Array.from({ length: 50 }, (_, index) => `w${index}`);
|
|
143
|
+
expect((0, expression_parser_1.parseExpression)(words.join(' ')).ok).toBe(true);
|
|
144
|
+
const tooMany = [...words, 'level:x'].join(' ');
|
|
145
|
+
expect(parseError(tooMany)).toEqual({
|
|
146
|
+
position: words.join(' ').length + 1,
|
|
147
|
+
expected: expression_types_1.ExpressionExpected.END,
|
|
148
|
+
});
|
|
149
|
+
});
|
|
150
|
+
});
|
|
151
|
+
describe('stringifyExpression — round trip', () => {
|
|
152
|
+
const normalized = [
|
|
153
|
+
'timeout',
|
|
154
|
+
'"connection reset"',
|
|
155
|
+
'level:ERROR',
|
|
156
|
+
'env:"my env"',
|
|
157
|
+
'@user.id:42',
|
|
158
|
+
'@flag.beta:on',
|
|
159
|
+
'release:1.2*',
|
|
160
|
+
'message:*time\\ out*',
|
|
161
|
+
'status:>500',
|
|
162
|
+
'status:>=500',
|
|
163
|
+
'status:<-5',
|
|
164
|
+
'status:<=500',
|
|
165
|
+
'status:[400 TO 499]',
|
|
166
|
+
'level:(ERROR OR WARN OR "two words")',
|
|
167
|
+
'-level:DEBUG',
|
|
168
|
+
'release:*',
|
|
169
|
+
'a b OR c',
|
|
170
|
+
'(a OR b) c',
|
|
171
|
+
'-(a OR b) -"x y"',
|
|
172
|
+
'path:\\/root a\\:b \\OR level:(\\TO OR x) msg:\\*',
|
|
173
|
+
'message:/a\\/b+/',
|
|
174
|
+
];
|
|
175
|
+
it.each(normalized)('stringify(parse(%j)) gives it back', (input) => {
|
|
176
|
+
const ast = parseOk(input, true);
|
|
177
|
+
expect((0, expression_parser_1.stringifyExpression)(ast)).toBe(input);
|
|
178
|
+
expect(parseOk((0, expression_parser_1.stringifyExpression)(ast), true)).toEqual(ast);
|
|
179
|
+
});
|
|
180
|
+
it('normalizes NOT and explicit AND', () => {
|
|
181
|
+
expect((0, expression_parser_1.stringifyExpression)(parseOk('NOT a AND b'))).toBe('-a b');
|
|
182
|
+
expect((0, expression_parser_1.stringifyExpression)(null)).toBe('');
|
|
183
|
+
});
|
|
184
|
+
});
|
|
185
|
+
describe('addTermToExpression', () => {
|
|
186
|
+
it('adds a filter to an empty expression', () => {
|
|
187
|
+
expect((0, expression_parser_1.addTermToExpression)('', 'level', 'ERROR', false)).toBe('level:ERROR');
|
|
188
|
+
});
|
|
189
|
+
it('adds an exclusion with a quoted value', () => {
|
|
190
|
+
expect((0, expression_parser_1.addTermToExpression)('env:prod', 'release', 'v 2', true)).toBe('env:prod -release:"v 2"');
|
|
191
|
+
});
|
|
192
|
+
it('adds an attribute', () => {
|
|
193
|
+
expect((0, expression_parser_1.addTermToExpression)('a', '@user.id', '42', false)).toBe('a @user.id:42');
|
|
194
|
+
});
|
|
195
|
+
it('does not duplicate an existing term', () => {
|
|
196
|
+
expect((0, expression_parser_1.addTermToExpression)('level:ERROR env:prod', 'level', 'ERROR', false)).toBe('level:ERROR env:prod');
|
|
197
|
+
expect((0, expression_parser_1.addTermToExpression)('-level:ERROR', 'level', 'ERROR', true)).toBe('-level:ERROR');
|
|
198
|
+
});
|
|
199
|
+
it('replaces the opposite term', () => {
|
|
200
|
+
expect((0, expression_parser_1.addTermToExpression)('-level:ERROR env:prod', 'level', 'ERROR', false)).toBe('env:prod level:ERROR');
|
|
201
|
+
expect((0, expression_parser_1.addTermToExpression)('level:ERROR', 'level', 'ERROR', true)).toBe('-level:ERROR');
|
|
202
|
+
});
|
|
203
|
+
it('keeps an OR together', () => {
|
|
204
|
+
expect((0, expression_parser_1.addTermToExpression)('a OR b', 'level', 'ERROR', false)).toBe('(a OR b) level:ERROR');
|
|
205
|
+
});
|
|
206
|
+
it('keeps an unparsable input and appends the term', () => {
|
|
207
|
+
expect((0, expression_parser_1.addTermToExpression)('(a ', 'level', 'ERROR', false)).toBe('(a level:ERROR');
|
|
208
|
+
});
|
|
209
|
+
it('throws on an invalid field name', () => {
|
|
210
|
+
expect(() => (0, expression_parser_1.addTermToExpression)('', "@a');DROP", 'x', false)).toThrow(/invalid field name/);
|
|
211
|
+
});
|
|
212
|
+
});
|
|
213
|
+
describe('isValidAttributeKey', () => {
|
|
214
|
+
it.each([
|
|
215
|
+
['user.id', true],
|
|
216
|
+
['flag.dark-mode', true],
|
|
217
|
+
['a'.repeat(64), true],
|
|
218
|
+
['a'.repeat(65), false],
|
|
219
|
+
['a.b..c', false],
|
|
220
|
+
['.a', false],
|
|
221
|
+
['a.', false],
|
|
222
|
+
["a');DROP", false],
|
|
223
|
+
['', false],
|
|
224
|
+
])('%j -> %s', (key, valid) => {
|
|
225
|
+
expect((0, expression_bounds_1.isValidAttributeKey)(key)).toBe(valid);
|
|
226
|
+
});
|
|
227
|
+
});
|
|
228
|
+
//# sourceMappingURL=expression.parser.spec.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"expression.parser.spec.js","sourceRoot":"","sources":["../../../src/explore/tests/expression.parser.spec.ts"],"names":[],"mappings":"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"}
|