night-query-parser 0.0.1
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/README.md +1 -0
- package/build/ast/field.d.ts +4 -0
- package/build/ast/field.js +155 -0
- package/build/ast/group.d.ts +4 -0
- package/build/ast/group.js +135 -0
- package/build/ast/query.d.ts +2 -0
- package/build/ast/query.js +25 -0
- package/build/ast/tokenizer.d.ts +36 -0
- package/build/ast/tokenizer.js +220 -0
- package/build/ast/types.d.ts +49 -0
- package/build/ast/types.js +22 -0
- package/build/compiler/field.d.ts +3 -0
- package/build/compiler/field.js +78 -0
- package/build/compiler/group.d.ts +3 -0
- package/build/compiler/group.js +38 -0
- package/build/compiler/query.d.ts +3 -0
- package/build/compiler/query.js +9 -0
- package/build/error.d.ts +6 -0
- package/build/error.js +22 -0
- package/build/lib.d.ts +0 -0
- package/build/lib.js +2 -0
- package/package.json +27 -0
package/README.md
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
# night-query-parser
|
|
@@ -0,0 +1,155 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.parseFieldSelector = parseFieldSelector;
|
|
4
|
+
const error_1 = require("../error");
|
|
5
|
+
const tokenizer_1 = require("./tokenizer");
|
|
6
|
+
const types_1 = require("./types");
|
|
7
|
+
// Parse field selector from a collection of tokens.
|
|
8
|
+
// Field selector token pattern is (Reference) + (Operator) + (Value)
|
|
9
|
+
function parseFieldSelector(tokens) {
|
|
10
|
+
const operatorStartIdx = tokens.findIndex((t) => tokenIsFieldOperator(t));
|
|
11
|
+
if (operatorStartIdx == -1) {
|
|
12
|
+
throw new Error('Unable to parse field selector, expected field operator');
|
|
13
|
+
}
|
|
14
|
+
// Parse field selector reference
|
|
15
|
+
const fieldReferenceTokens = tokens.splice(0, operatorStartIdx);
|
|
16
|
+
const fieldSelectorReference = parseFieldSelectorReference(fieldReferenceTokens);
|
|
17
|
+
// Parse field selector operator
|
|
18
|
+
const fieldOperatorTokens = [];
|
|
19
|
+
while (true) {
|
|
20
|
+
const fieldOperator = tokens.shift();
|
|
21
|
+
if (!fieldOperator) {
|
|
22
|
+
throw new error_1.InvalidOrUnexpectedTokens('Unable to parse field selector, invalid operator', tokens);
|
|
23
|
+
}
|
|
24
|
+
if (!tokenIsFieldOperator(fieldOperator)) {
|
|
25
|
+
tokens.unshift(fieldOperator);
|
|
26
|
+
break;
|
|
27
|
+
}
|
|
28
|
+
fieldOperatorTokens.push(fieldOperator);
|
|
29
|
+
}
|
|
30
|
+
const fieldSelectorOperator = parseFieldSelectorOperator(fieldOperatorTokens);
|
|
31
|
+
// Parse field selector value
|
|
32
|
+
const fieldSelectorValue = parseFieldSelectorValue(tokens);
|
|
33
|
+
return {
|
|
34
|
+
type: 'FieldSelector',
|
|
35
|
+
reference: fieldSelectorReference,
|
|
36
|
+
operator: fieldSelectorOperator,
|
|
37
|
+
value: fieldSelectorValue,
|
|
38
|
+
};
|
|
39
|
+
}
|
|
40
|
+
function tokenIsFieldOperator(token) {
|
|
41
|
+
return [
|
|
42
|
+
tokenizer_1.SyntaxTokenTypes.Equal,
|
|
43
|
+
tokenizer_1.SyntaxTokenTypes.Not,
|
|
44
|
+
tokenizer_1.SyntaxTokenTypes.GreaterThan,
|
|
45
|
+
tokenizer_1.SyntaxTokenTypes.LessThan,
|
|
46
|
+
tokenizer_1.SyntaxTokenTypes.ILike,
|
|
47
|
+
tokenizer_1.SyntaxTokenTypes.Regex,
|
|
48
|
+
].includes(token.type);
|
|
49
|
+
}
|
|
50
|
+
function parseFieldSelectorReference(tokens) {
|
|
51
|
+
// Single reference
|
|
52
|
+
if (tokens.length == 1 && tokens[0].type == tokenizer_1.SyntaxTokenTypes.Reference) {
|
|
53
|
+
return { type: 'FieldReference', paths: tokens };
|
|
54
|
+
}
|
|
55
|
+
// Joined references
|
|
56
|
+
const joinedReferencesTokenTypes = [
|
|
57
|
+
tokenizer_1.SyntaxTokenTypes.Reference,
|
|
58
|
+
tokenizer_1.SyntaxTokenTypes.ReferenceJoin,
|
|
59
|
+
];
|
|
60
|
+
if (tokens.length > 1 &&
|
|
61
|
+
tokens.every((t) => joinedReferencesTokenTypes.includes(t.type))) {
|
|
62
|
+
// Ensure references are joined properly
|
|
63
|
+
const joinsIdx = tokens.map((_, idx) => idx);
|
|
64
|
+
if (joinsIdx.every((idx) => idx % 2 == 1)) {
|
|
65
|
+
throw new error_1.InvalidOrUnexpectedTokens('Invalid field reference, invalid reference joins', tokens);
|
|
66
|
+
}
|
|
67
|
+
const references = tokens.filter((t) => t.type == tokenizer_1.SyntaxTokenTypes.Reference);
|
|
68
|
+
return { type: 'FieldReference', paths: references };
|
|
69
|
+
}
|
|
70
|
+
throw new error_1.InvalidOrUnexpectedTokens('Unexpected tokens while parsing field selector reference', tokens);
|
|
71
|
+
}
|
|
72
|
+
function parseFieldSelectorOperator(tokens) {
|
|
73
|
+
if (tokens.length === 1) {
|
|
74
|
+
const operator = tokens[0];
|
|
75
|
+
switch (operator.type) {
|
|
76
|
+
case tokenizer_1.SyntaxTokenTypes.GreaterThan:
|
|
77
|
+
return types_1.FieldOperatorNode.GreaterThan;
|
|
78
|
+
case tokenizer_1.SyntaxTokenTypes.LessThan:
|
|
79
|
+
return types_1.FieldOperatorNode.LessThan;
|
|
80
|
+
case tokenizer_1.SyntaxTokenTypes.Equal:
|
|
81
|
+
return types_1.FieldOperatorNode.Equal;
|
|
82
|
+
case tokenizer_1.SyntaxTokenTypes.Not:
|
|
83
|
+
return types_1.FieldOperatorNode.NotEqual;
|
|
84
|
+
case tokenizer_1.SyntaxTokenTypes.ILike:
|
|
85
|
+
return types_1.FieldOperatorNode.ILike;
|
|
86
|
+
case tokenizer_1.SyntaxTokenTypes.Regex:
|
|
87
|
+
return types_1.FieldOperatorNode.Regex;
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
if (tokens.length === 2) {
|
|
91
|
+
const hasGreaterThan = tokens.some((o) => o.type === tokenizer_1.SyntaxTokenTypes.GreaterThan);
|
|
92
|
+
const hasLessThan = tokens.some((o) => o.type === tokenizer_1.SyntaxTokenTypes.LessThan);
|
|
93
|
+
const hasEqual = tokens.some((o) => o.type === tokenizer_1.SyntaxTokenTypes.Equal);
|
|
94
|
+
const hasNotEqual = tokens.some((o) => o.type === tokenizer_1.SyntaxTokenTypes.Not);
|
|
95
|
+
const hasRegex = tokens.some((o) => o.type === tokenizer_1.SyntaxTokenTypes.Regex);
|
|
96
|
+
if (hasGreaterThan && hasEqual)
|
|
97
|
+
return types_1.FieldOperatorNode.GreaterThanOrEqual;
|
|
98
|
+
if (hasLessThan && hasEqual)
|
|
99
|
+
return types_1.FieldOperatorNode.LessThanOrEqual;
|
|
100
|
+
if (hasRegex && hasEqual)
|
|
101
|
+
return types_1.FieldOperatorNode.Regex;
|
|
102
|
+
if (hasNotEqual && hasEqual)
|
|
103
|
+
return types_1.FieldOperatorNode.NotEqual;
|
|
104
|
+
if (hasEqual &&
|
|
105
|
+
!hasGreaterThan &&
|
|
106
|
+
!hasLessThan &&
|
|
107
|
+
!hasRegex &&
|
|
108
|
+
!hasNotEqual) {
|
|
109
|
+
return types_1.FieldOperatorNode.Equal;
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
throw new error_1.InvalidOrUnexpectedTokens('Unexpected token pattern while parsing field selector operator', tokens);
|
|
113
|
+
}
|
|
114
|
+
function parseFieldSelectorValue(tokens) {
|
|
115
|
+
// Single literal value or reference
|
|
116
|
+
if (tokens.length == 1) {
|
|
117
|
+
const token = tokens[0];
|
|
118
|
+
if ([
|
|
119
|
+
tokenizer_1.SyntaxTokenTypes.QuotedText,
|
|
120
|
+
tokenizer_1.SyntaxTokenTypes.Number,
|
|
121
|
+
tokenizer_1.SyntaxTokenTypes.True,
|
|
122
|
+
tokenizer_1.SyntaxTokenTypes.False,
|
|
123
|
+
].includes(token.type)) {
|
|
124
|
+
return { type: 'FieldSelectorValueLiteral', token };
|
|
125
|
+
}
|
|
126
|
+
else if (token.type == tokenizer_1.SyntaxTokenTypes.Reference) {
|
|
127
|
+
return { type: 'FieldReference', paths: [token] };
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
// Joined references
|
|
131
|
+
const joinedReferencesTokenTypes = [
|
|
132
|
+
tokenizer_1.SyntaxTokenTypes.Reference,
|
|
133
|
+
tokenizer_1.SyntaxTokenTypes.ReferenceJoin,
|
|
134
|
+
];
|
|
135
|
+
if (tokens.length > 1 &&
|
|
136
|
+
tokens.every((t) => joinedReferencesTokenTypes.includes(t.type))) {
|
|
137
|
+
// Ensure references are joined properly
|
|
138
|
+
const joinsIdx = tokens.map((_, idx) => idx);
|
|
139
|
+
if (joinsIdx.every((idx) => idx % 2 == 1)) {
|
|
140
|
+
throw new Error('Invalid field reference, invalid reference joins');
|
|
141
|
+
}
|
|
142
|
+
const references = tokens.filter((t) => t.type == tokenizer_1.SyntaxTokenTypes.Reference);
|
|
143
|
+
return { type: 'FieldReference', paths: references };
|
|
144
|
+
}
|
|
145
|
+
// Subgroups
|
|
146
|
+
if ([
|
|
147
|
+
tokenizer_1.SyntaxTokenTypes.OpenArrayGroup,
|
|
148
|
+
tokenizer_1.SyntaxTokenTypes.OpenSubQuery,
|
|
149
|
+
].includes(tokens[0].type)) {
|
|
150
|
+
// todo
|
|
151
|
+
throw new Error('Not implemented');
|
|
152
|
+
}
|
|
153
|
+
throw new error_1.InvalidOrUnexpectedTokens('Unexpected tokens while parsing field selector value', tokens);
|
|
154
|
+
}
|
|
155
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmllbGQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvYXN0L2ZpZWxkLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBVVMsZ0RBQWtCO0FBVjNCLG9DQUFxRDtBQUVyRCwyQ0FBNEQ7QUFDNUQsbUNBS2lCO0FBSWpCLG9EQUFvRDtBQUNwRCxxRUFBcUU7QUFDckUsU0FBUyxrQkFBa0IsQ0FBQyxNQUFxQjtJQUM3QyxNQUFNLGdCQUFnQixHQUFHLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLG9CQUFvQixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDMUUsSUFBSSxnQkFBZ0IsSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDO1FBQ3pCLE1BQU0sSUFBSSxLQUFLLENBQ1gseURBQXlELENBQzVELENBQUM7SUFDTixDQUFDO0lBRUQsaUNBQWlDO0lBQ2pDLE1BQU0sb0JBQW9CLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsZ0JBQWdCLENBQUMsQ0FBQztJQUNoRSxNQUFNLHNCQUFzQixHQUN4QiwyQkFBMkIsQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDO0lBRXRELGdDQUFnQztJQUNoQyxNQUFNLG1CQUFtQixHQUFrQixFQUFFLENBQUM7SUFDOUMsT0FBTyxJQUFJLEVBQUUsQ0FBQztRQUNWLE1BQU0sYUFBYSxHQUFHLE1BQU0sQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUNyQyxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7WUFDakIsTUFBTSxJQUFJLGlDQUF5QixDQUMvQixrREFBa0QsRUFDbEQsTUFBTSxDQUNULENBQUM7UUFDTixDQUFDO1FBRUQsSUFBSSxDQUFDLG9CQUFvQixDQUFDLGFBQWEsQ0FBQyxFQUFFLENBQUM7WUFDdkMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxhQUFhLENBQUMsQ0FBQztZQUM5QixNQUFNO1FBQ1YsQ0FBQztRQUVELG1CQUFtQixDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQztJQUM1QyxDQUFDO0lBQ0QsTUFBTSxxQkFBcUIsR0FDdkIsMEJBQTBCLENBQUMsbUJBQW1CLENBQUMsQ0FBQztJQUVwRCw2QkFBNkI7SUFDN0IsTUFBTSxrQkFBa0IsR0FBRyx1QkFBdUIsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUUzRCxPQUFPO1FBQ0gsSUFBSSxFQUFFLGVBQWU7UUFDckIsU0FBUyxFQUFFLHNCQUFzQjtRQUNqQyxRQUFRLEVBQUUscUJBQXFCO1FBQy9CLEtBQUssRUFBRSxrQkFBa0I7S0FDNUIsQ0FBQztBQUNOLENBQUM7QUFFRCxTQUFTLG9CQUFvQixDQUFDLEtBQWtCO0lBQzVDLE9BQU87UUFDSCw0QkFBZ0IsQ0FBQyxLQUFLO1FBQ3RCLDRCQUFnQixDQUFDLEdBQUc7UUFDcEIsNEJBQWdCLENBQUMsV0FBVztRQUM1Qiw0QkFBZ0IsQ0FBQyxRQUFRO1FBQ3pCLDRCQUFnQixDQUFDLEtBQUs7UUFDdEIsNEJBQWdCLENBQUMsS0FBSztLQUN6QixDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDM0IsQ0FBQztBQUVELFNBQVMsMkJBQTJCLENBQ2hDLE1BQXFCO0lBRXJCLG1CQUFtQjtJQUNuQixJQUFJLE1BQU0sQ0FBQyxNQUFNLElBQUksQ0FBQyxJQUFJLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLElBQUksNEJBQWdCLENBQUMsU0FBUyxFQUFFLENBQUM7UUFDckUsT0FBTyxFQUFFLElBQUksRUFBRSxnQkFBZ0IsRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLENBQUM7SUFDckQsQ0FBQztJQUVELG9CQUFvQjtJQUNwQixNQUFNLDBCQUEwQixHQUFHO1FBQy9CLDRCQUFnQixDQUFDLFNBQVM7UUFDMUIsNEJBQWdCLENBQUMsYUFBYTtLQUNqQyxDQUFDO0lBQ0YsSUFDSSxNQUFNLENBQUMsTUFBTSxHQUFHLENBQUM7UUFDakIsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsMEJBQTBCLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUNsRSxDQUFDO1FBQ0Msd0NBQXdDO1FBQ3hDLE1BQU0sUUFBUSxHQUFHLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUM3QyxJQUFJLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLEdBQUcsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQztZQUN4QyxNQUFNLElBQUksaUNBQXlCLENBQy9CLGtEQUFrRCxFQUNsRCxNQUFNLENBQ1QsQ0FBQztRQUNOLENBQUM7UUFFRCxNQUFNLFVBQVUsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUM1QixDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksSUFBSSw0QkFBZ0IsQ0FBQyxTQUFTLENBQzlDLENBQUM7UUFDRixPQUFPLEVBQUUsSUFBSSxFQUFFLGdCQUFnQixFQUFFLEtBQUssRUFBRSxVQUFVLEVBQUUsQ0FBQztJQUN6RCxDQUFDO0lBRUQsTUFBTSxJQUFJLGlDQUF5QixDQUMvQiwwREFBMEQsRUFDMUQsTUFBTSxDQUNULENBQUM7QUFDTixDQUFDO0FBRUQsU0FBUywwQkFBMEIsQ0FBQyxNQUFxQjtJQUNyRCxJQUFJLE1BQU0sQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFLENBQUM7UUFDdEIsTUFBTSxRQUFRLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzNCLFFBQVEsUUFBUSxDQUFDLElBQUksRUFBRSxDQUFDO1lBQ3BCLEtBQUssNEJBQWdCLENBQUMsV0FBVztnQkFDN0IsT0FBTyx5QkFBaUIsQ0FBQyxXQUFXLENBQUM7WUFDekMsS0FBSyw0QkFBZ0IsQ0FBQyxRQUFRO2dCQUMxQixPQUFPLHlCQUFpQixDQUFDLFFBQVEsQ0FBQztZQUN0QyxLQUFLLDRCQUFnQixDQUFDLEtBQUs7Z0JBQ3ZCLE9BQU8seUJBQWlCLENBQUMsS0FBSyxDQUFDO1lBQ25DLEtBQUssNEJBQWdCLENBQUMsR0FBRztnQkFDckIsT0FBTyx5QkFBaUIsQ0FBQyxRQUFRLENBQUM7WUFDdEMsS0FBSyw0QkFBZ0IsQ0FBQyxLQUFLO2dCQUN2QixPQUFPLHlCQUFpQixDQUFDLEtBQUssQ0FBQztZQUNuQyxLQUFLLDRCQUFnQixDQUFDLEtBQUs7Z0JBQ3ZCLE9BQU8seUJBQWlCLENBQUMsS0FBSyxDQUFDO1FBQ3ZDLENBQUM7SUFDTCxDQUFDO0lBRUQsSUFBSSxNQUFNLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRSxDQUFDO1FBQ3RCLE1BQU0sY0FBYyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQzlCLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxLQUFLLDRCQUFnQixDQUFDLFdBQVcsQ0FDakQsQ0FBQztRQUNGLE1BQU0sV0FBVyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQzNCLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxLQUFLLDRCQUFnQixDQUFDLFFBQVEsQ0FDOUMsQ0FBQztRQUNGLE1BQU0sUUFBUSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLEtBQUssNEJBQWdCLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDdkUsTUFBTSxXQUFXLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksS0FBSyw0QkFBZ0IsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUN4RSxNQUFNLFFBQVEsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxLQUFLLDRCQUFnQixDQUFDLEtBQUssQ0FBQyxDQUFDO1FBRXZFLElBQUksY0FBYyxJQUFJLFFBQVE7WUFDMUIsT0FBTyx5QkFBaUIsQ0FBQyxrQkFBa0IsQ0FBQztRQUNoRCxJQUFJLFdBQVcsSUFBSSxRQUFRO1lBQUUsT0FBTyx5QkFBaUIsQ0FBQyxlQUFlLENBQUM7UUFDdEUsSUFBSSxRQUFRLElBQUksUUFBUTtZQUFFLE9BQU8seUJBQWlCLENBQUMsS0FBSyxDQUFDO1FBQ3pELElBQUksV0FBVyxJQUFJLFFBQVE7WUFBRSxPQUFPLHlCQUFpQixDQUFDLFFBQVEsQ0FBQztRQUMvRCxJQUNJLFFBQVE7WUFDUixDQUFDLGNBQWM7WUFDZixDQUFDLFdBQVc7WUFDWixDQUFDLFFBQVE7WUFDVCxDQUFDLFdBQVcsRUFDZCxDQUFDO1lBQ0MsT0FBTyx5QkFBaUIsQ0FBQyxLQUFLLENBQUM7UUFDbkMsQ0FBQztJQUNMLENBQUM7SUFFRCxNQUFNLElBQUksaUNBQXlCLENBQy9CLGdFQUFnRSxFQUNoRSxNQUFNLENBQ1QsQ0FBQztBQUNOLENBQUM7QUFFRCxTQUFTLHVCQUF1QixDQUM1QixNQUFxQjtJQUVyQixvQ0FBb0M7SUFDcEMsSUFBSSxNQUFNLENBQUMsTUFBTSxJQUFJLENBQUMsRUFBRSxDQUFDO1FBQ3JCLE1BQU0sS0FBSyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN4QixJQUNJO1lBQ0ksNEJBQWdCLENBQUMsVUFBVTtZQUMzQiw0QkFBZ0IsQ0FBQyxNQUFNO1lBQ3ZCLDRCQUFnQixDQUFDLElBQUk7WUFDckIsNEJBQWdCLENBQUMsS0FBSztTQUN6QixDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEVBQ3hCLENBQUM7WUFDQyxPQUFPLEVBQUUsSUFBSSxFQUFFLDJCQUEyQixFQUFFLEtBQUssRUFBRSxDQUFDO1FBQ3hELENBQUM7YUFBTSxJQUFJLEtBQUssQ0FBQyxJQUFJLElBQUksNEJBQWdCLENBQUMsU0FBUyxFQUFFLENBQUM7WUFDbEQsT0FBTyxFQUFFLElBQUksRUFBRSxnQkFBZ0IsRUFBRSxLQUFLLEVBQUUsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO1FBQ3RELENBQUM7SUFDTCxDQUFDO0lBRUQsb0JBQW9CO0lBQ3BCLE1BQU0sMEJBQTBCLEdBQUc7UUFDL0IsNEJBQWdCLENBQUMsU0FBUztRQUMxQiw0QkFBZ0IsQ0FBQyxhQUFhO0tBQ2pDLENBQUM7SUFDRixJQUNJLE1BQU0sQ0FBQyxNQUFNLEdBQUcsQ0FBQztRQUNqQixNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQywwQkFBMEIsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQ2xFLENBQUM7UUFDQyx3Q0FBd0M7UUFDeEMsTUFBTSxRQUFRLEdBQUcsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQzdDLElBQUksUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsR0FBRyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDO1lBQ3hDLE1BQU0sSUFBSSxLQUFLLENBQUMsa0RBQWtELENBQUMsQ0FBQztRQUN4RSxDQUFDO1FBRUQsTUFBTSxVQUFVLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FDNUIsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLElBQUksNEJBQWdCLENBQUMsU0FBUyxDQUM5QyxDQUFDO1FBQ0YsT0FBTyxFQUFFLElBQUksRUFBRSxnQkFBZ0IsRUFBRSxLQUFLLEVBQUUsVUFBVSxFQUFFLENBQUM7SUFDekQsQ0FBQztJQUVELFlBQVk7SUFDWixJQUNJO1FBQ0ksNEJBQWdCLENBQUMsY0FBYztRQUMvQiw0QkFBZ0IsQ0FBQyxZQUFZO0tBQ2hDLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFDNUIsQ0FBQztRQUNDLE9BQU87UUFDUCxNQUFNLElBQUksS0FBSyxDQUFDLGlCQUFpQixDQUFDLENBQUM7SUFDdkMsQ0FBQztJQUVELE1BQU0sSUFBSSxpQ0FBeUIsQ0FDL0Isc0RBQXNELEVBQ3RELE1BQU0sQ0FDVCxDQUFDO0FBQ04sQ0FBQyJ9
|
|
@@ -0,0 +1,135 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.parseFieldGroup = parseFieldGroup;
|
|
4
|
+
const error_1 = require("../error");
|
|
5
|
+
const field_1 = require("./field");
|
|
6
|
+
const tokenizer_1 = require("./tokenizer");
|
|
7
|
+
const types_1 = require("./types");
|
|
8
|
+
function parseFieldGroup(tokens) {
|
|
9
|
+
// If tokens start and end with group token,
|
|
10
|
+
// remove the group tokens
|
|
11
|
+
const firstOpenGroupToken = tokens.findIndex((t) => t.type == tokenizer_1.SyntaxTokenTypes.OpenGroup);
|
|
12
|
+
const lastOpenGroupToken = tokens.findIndex((t) => t.type == tokenizer_1.SyntaxTokenTypes.CloseGroup);
|
|
13
|
+
if (firstOpenGroupToken == 0 && lastOpenGroupToken == tokens.length - 1) {
|
|
14
|
+
tokens.shift();
|
|
15
|
+
tokens.pop();
|
|
16
|
+
}
|
|
17
|
+
// Extract position of all operators in base depth
|
|
18
|
+
const operators = new Map();
|
|
19
|
+
for (let i = 0; i < tokens.length; i++) {
|
|
20
|
+
const token = tokens[i];
|
|
21
|
+
if (tokenIsPrimaryGroupOperator(token)) {
|
|
22
|
+
const groupOperator = parsePrimaryGroupOperator(token);
|
|
23
|
+
operators.set(groupOperator, [
|
|
24
|
+
...(operators.get(groupOperator) ?? []),
|
|
25
|
+
i,
|
|
26
|
+
]);
|
|
27
|
+
// If next token is a open group token,
|
|
28
|
+
// skip tokens until matching close group token
|
|
29
|
+
const startingGroupToken = tokens[i + 1];
|
|
30
|
+
if (startingGroupToken?.type == tokenizer_1.SyntaxTokenTypes.OpenGroup) {
|
|
31
|
+
const groupTokenEndIdx = (0, tokenizer_1.findClosingGroupTokenIdx)(tokens, i + 2, startingGroupToken.type);
|
|
32
|
+
i = groupTokenEndIdx;
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
// If there are no operators,
|
|
37
|
+
// parse tokens as a single field selector with AND operator.
|
|
38
|
+
// This should only every run at base depth.
|
|
39
|
+
if (operators.size == 0) {
|
|
40
|
+
const fieldSelector = (0, field_1.parseFieldSelector)(tokens);
|
|
41
|
+
return {
|
|
42
|
+
type: 'FieldGroup',
|
|
43
|
+
operator: types_1.FieldGroupOperatorNode.And,
|
|
44
|
+
children: [fieldSelector],
|
|
45
|
+
};
|
|
46
|
+
}
|
|
47
|
+
// Decide what operate for current group based on precedence rules
|
|
48
|
+
const operatorOrder = [
|
|
49
|
+
types_1.FieldGroupOperatorNode.Or,
|
|
50
|
+
types_1.FieldGroupOperatorNode.And,
|
|
51
|
+
];
|
|
52
|
+
let groupOperator;
|
|
53
|
+
for (const op of operatorOrder) {
|
|
54
|
+
if (operators.has(op)) {
|
|
55
|
+
groupOperator = op;
|
|
56
|
+
break;
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
const fieldGroup = {
|
|
60
|
+
type: 'FieldGroup',
|
|
61
|
+
operator: groupOperator,
|
|
62
|
+
children: [],
|
|
63
|
+
};
|
|
64
|
+
// Split tokens between operator
|
|
65
|
+
const operatorTokenPositions = operators.get(fieldGroup.operator);
|
|
66
|
+
const splitOperatorTokens = operatorTokenPositions.flatMap((position, idx) => {
|
|
67
|
+
const split = [];
|
|
68
|
+
if (idx == 0) {
|
|
69
|
+
split.push(tokens.slice(0, position));
|
|
70
|
+
}
|
|
71
|
+
if (idx == operatorTokenPositions.length - 1) {
|
|
72
|
+
split.push(tokens.slice(position + 1));
|
|
73
|
+
}
|
|
74
|
+
if (idx != 0 && idx != operatorTokenPositions.length - 1) {
|
|
75
|
+
split.push(tokens.slice(operatorTokenPositions[idx - 1] + 1, position));
|
|
76
|
+
}
|
|
77
|
+
return split;
|
|
78
|
+
});
|
|
79
|
+
const emptyOperatorTokensIdx = splitOperatorTokens.findIndex((t) => t.length == 0);
|
|
80
|
+
if (emptyOperatorTokensIdx != -1) {
|
|
81
|
+
const operatorToken = tokens[operatorTokenPositions[emptyOperatorTokensIdx]];
|
|
82
|
+
throw new error_1.InvalidOrUnexpectedTokens('Group operator must be followed by a valid expression', [operatorToken]);
|
|
83
|
+
}
|
|
84
|
+
for (const tokens of splitOperatorTokens) {
|
|
85
|
+
// If tokens start and end with group token,
|
|
86
|
+
// remove the group tokens
|
|
87
|
+
const firstOpenGroupToken = tokens.findIndex((t) => t.type == tokenizer_1.SyntaxTokenTypes.OpenGroup);
|
|
88
|
+
const lastOpenGroupToken = tokens.findIndex((t) => t.type == tokenizer_1.SyntaxTokenTypes.CloseGroup);
|
|
89
|
+
if (firstOpenGroupToken == 0 &&
|
|
90
|
+
lastOpenGroupToken == tokens.length - 1) {
|
|
91
|
+
tokens.shift();
|
|
92
|
+
tokens.pop();
|
|
93
|
+
}
|
|
94
|
+
// If token starts with NOT group operator,
|
|
95
|
+
// parse remaining tokens as a group, then add NOT group on top
|
|
96
|
+
if (tokens[0].type == tokenizer_1.SyntaxTokenTypes.Not) {
|
|
97
|
+
tokens.splice(0, 1);
|
|
98
|
+
const group = parseFieldGroup(tokens);
|
|
99
|
+
const notGroup = {
|
|
100
|
+
type: 'FieldGroup',
|
|
101
|
+
operator: types_1.FieldGroupOperatorNode.Not,
|
|
102
|
+
children: [group],
|
|
103
|
+
};
|
|
104
|
+
fieldGroup.children.push(notGroup);
|
|
105
|
+
continue;
|
|
106
|
+
}
|
|
107
|
+
// If tokens contains primary group operator,
|
|
108
|
+
// assume this is another depth and recursively build that group
|
|
109
|
+
const tokensGroupOperator = tokens.find((t) => tokenIsPrimaryGroupOperator(t));
|
|
110
|
+
if (tokensGroupOperator != null) {
|
|
111
|
+
const group = parseFieldGroup(tokens);
|
|
112
|
+
fieldGroup.children.push(group);
|
|
113
|
+
continue;
|
|
114
|
+
}
|
|
115
|
+
// If none of the previous conditions match,
|
|
116
|
+
// assume this is a single field selector and parse it
|
|
117
|
+
const fieldSelector = (0, field_1.parseFieldSelector)(tokens);
|
|
118
|
+
fieldGroup.children.push(fieldSelector);
|
|
119
|
+
}
|
|
120
|
+
return fieldGroup;
|
|
121
|
+
}
|
|
122
|
+
function tokenIsPrimaryGroupOperator(token) {
|
|
123
|
+
return [tokenizer_1.SyntaxTokenTypes.And, tokenizer_1.SyntaxTokenTypes.Or].includes(token.type);
|
|
124
|
+
}
|
|
125
|
+
function parsePrimaryGroupOperator(token) {
|
|
126
|
+
const type = token.type;
|
|
127
|
+
if (type == tokenizer_1.SyntaxTokenTypes.And) {
|
|
128
|
+
return types_1.FieldGroupOperatorNode.And;
|
|
129
|
+
}
|
|
130
|
+
else if (type == tokenizer_1.SyntaxTokenTypes.Or) {
|
|
131
|
+
return types_1.FieldGroupOperatorNode.Or;
|
|
132
|
+
}
|
|
133
|
+
throw new error_1.InvalidOrUnexpectedTokens('Unexpected token, unable to parse group operator', [token]);
|
|
134
|
+
}
|
|
135
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JvdXAuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvYXN0L2dyb3VwLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBVVMsMENBQWU7QUFWeEIsb0NBQXFEO0FBRXJELG1DQUE2QztBQUM3QywyQ0FJcUI7QUFDckIsbUNBQWlFO0FBSWpFLFNBQVMsZUFBZSxDQUFDLE1BQXFCO0lBQzFDLDRDQUE0QztJQUM1QywwQkFBMEI7SUFDMUIsTUFBTSxtQkFBbUIsR0FBRyxNQUFNLENBQUMsU0FBUyxDQUN4QyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksSUFBSSw0QkFBZ0IsQ0FBQyxTQUFTLENBQzlDLENBQUM7SUFDRixNQUFNLGtCQUFrQixHQUFHLE1BQU0sQ0FBQyxTQUFTLENBQ3ZDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxJQUFJLDRCQUFnQixDQUFDLFVBQVUsQ0FDL0MsQ0FBQztJQUNGLElBQUksbUJBQW1CLElBQUksQ0FBQyxJQUFJLGtCQUFrQixJQUFJLE1BQU0sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7UUFDdEUsTUFBTSxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQ2YsTUFBTSxDQUFDLEdBQUcsRUFBRSxDQUFDO0lBQ2pCLENBQUM7SUFFRCxrREFBa0Q7SUFDbEQsTUFBTSxTQUFTLEdBQUcsSUFBSSxHQUFHLEVBQW9DLENBQUM7SUFDOUQsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQztRQUNyQyxNQUFNLEtBQUssR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDeEIsSUFBSSwyQkFBMkIsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQ3JDLE1BQU0sYUFBYSxHQUFHLHlCQUF5QixDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ3ZELFNBQVMsQ0FBQyxHQUFHLENBQUMsYUFBYSxFQUFFO2dCQUN6QixHQUFHLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxhQUFhLENBQUMsSUFBSSxFQUFFLENBQUM7Z0JBQ3ZDLENBQUM7YUFDSixDQUFDLENBQUM7WUFFSCx1Q0FBdUM7WUFDdkMsK0NBQStDO1lBQy9DLE1BQU0sa0JBQWtCLEdBQUcsTUFBTSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztZQUN6QyxJQUFJLGtCQUFrQixFQUFFLElBQUksSUFBSSw0QkFBZ0IsQ0FBQyxTQUFTLEVBQUUsQ0FBQztnQkFDekQsTUFBTSxnQkFBZ0IsR0FBRyxJQUFBLG9DQUF3QixFQUM3QyxNQUFNLEVBQ04sQ0FBQyxHQUFHLENBQUMsRUFDTCxrQkFBa0IsQ0FBQyxJQUFJLENBQzFCLENBQUM7Z0JBQ0YsQ0FBQyxHQUFHLGdCQUFnQixDQUFDO1lBQ3pCLENBQUM7UUFDTCxDQUFDO0lBQ0wsQ0FBQztJQUVELDZCQUE2QjtJQUM3Qiw2REFBNkQ7SUFDN0QsNENBQTRDO0lBQzVDLElBQUksU0FBUyxDQUFDLElBQUksSUFBSSxDQUFDLEVBQUUsQ0FBQztRQUN0QixNQUFNLGFBQWEsR0FBRyxJQUFBLDBCQUFrQixFQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ2pELE9BQU87WUFDSCxJQUFJLEVBQUUsWUFBWTtZQUNsQixRQUFRLEVBQUUsOEJBQXNCLENBQUMsR0FBRztZQUNwQyxRQUFRLEVBQUUsQ0FBQyxhQUFhLENBQUM7U0FDNUIsQ0FBQztJQUNOLENBQUM7SUFFRCxrRUFBa0U7SUFDbEUsTUFBTSxhQUFhLEdBQUc7UUFDbEIsOEJBQXNCLENBQUMsRUFBRTtRQUN6Qiw4QkFBc0IsQ0FBQyxHQUFHO0tBQzdCLENBQUM7SUFDRixJQUFJLGFBQXFDLENBQUM7SUFDMUMsS0FBSyxNQUFNLEVBQUUsSUFBSSxhQUFhLEVBQUUsQ0FBQztRQUM3QixJQUFJLFNBQVMsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQztZQUNwQixhQUFhLEdBQUcsRUFBRSxDQUFDO1lBQ25CLE1BQU07UUFDVixDQUFDO0lBQ0wsQ0FBQztJQUVELE1BQU0sVUFBVSxHQUFtQjtRQUMvQixJQUFJLEVBQUUsWUFBWTtRQUNsQixRQUFRLEVBQUUsYUFBYztRQUN4QixRQUFRLEVBQUUsRUFBRTtLQUNmLENBQUM7SUFFRixnQ0FBZ0M7SUFDaEMsTUFBTSxzQkFBc0IsR0FBRyxTQUFTLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUUsQ0FBQztJQUNuRSxNQUFNLG1CQUFtQixHQUFHLHNCQUFzQixDQUFDLE9BQU8sQ0FDdEQsQ0FBQyxRQUFRLEVBQUUsR0FBRyxFQUFFLEVBQUU7UUFDZCxNQUFNLEtBQUssR0FBb0IsRUFBRSxDQUFDO1FBRWxDLElBQUksR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDO1lBQ1gsS0FBSyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxRQUFRLENBQUMsQ0FBQyxDQUFDO1FBQzFDLENBQUM7UUFDRCxJQUFJLEdBQUcsSUFBSSxzQkFBc0IsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDM0MsS0FBSyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLFFBQVEsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzNDLENBQUM7UUFDRCxJQUFJLEdBQUcsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLHNCQUFzQixDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQztZQUN2RCxLQUFLLENBQUMsSUFBSSxDQUNOLE1BQU0sQ0FBQyxLQUFLLENBQUMsc0JBQXNCLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxRQUFRLENBQUMsQ0FDOUQsQ0FBQztRQUNOLENBQUM7UUFFRCxPQUFPLEtBQUssQ0FBQztJQUNqQixDQUFDLENBQ0osQ0FBQztJQUVGLE1BQU0sc0JBQXNCLEdBQUcsbUJBQW1CLENBQUMsU0FBUyxDQUN4RCxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLE1BQU0sSUFBSSxDQUFDLENBQ3ZCLENBQUM7SUFDRixJQUFJLHNCQUFzQixJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUM7UUFDL0IsTUFBTSxhQUFhLEdBQ2YsTUFBTSxDQUFDLHNCQUFzQixDQUFDLHNCQUFzQixDQUFDLENBQUMsQ0FBQztRQUMzRCxNQUFNLElBQUksaUNBQXlCLENBQy9CLHVEQUF1RCxFQUN2RCxDQUFDLGFBQWEsQ0FBQyxDQUNsQixDQUFDO0lBQ04sQ0FBQztJQUVELEtBQUssTUFBTSxNQUFNLElBQUksbUJBQW1CLEVBQUUsQ0FBQztRQUN2Qyw0Q0FBNEM7UUFDNUMsMEJBQTBCO1FBQzFCLE1BQU0sbUJBQW1CLEdBQUcsTUFBTSxDQUFDLFNBQVMsQ0FDeEMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLElBQUksNEJBQWdCLENBQUMsU0FBUyxDQUM5QyxDQUFDO1FBQ0YsTUFBTSxrQkFBa0IsR0FBRyxNQUFNLENBQUMsU0FBUyxDQUN2QyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksSUFBSSw0QkFBZ0IsQ0FBQyxVQUFVLENBQy9DLENBQUM7UUFDRixJQUNJLG1CQUFtQixJQUFJLENBQUM7WUFDeEIsa0JBQWtCLElBQUksTUFBTSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQ3pDLENBQUM7WUFDQyxNQUFNLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDZixNQUFNLENBQUMsR0FBRyxFQUFFLENBQUM7UUFDakIsQ0FBQztRQUVELDJDQUEyQztRQUMzQywrREFBK0Q7UUFDL0QsSUFBSSxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxJQUFJLDRCQUFnQixDQUFDLEdBQUcsRUFBRSxDQUFDO1lBQ3pDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO1lBQ3BCLE1BQU0sS0FBSyxHQUFHLGVBQWUsQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUN0QyxNQUFNLFFBQVEsR0FBbUI7Z0JBQzdCLElBQUksRUFBRSxZQUFZO2dCQUNsQixRQUFRLEVBQUUsOEJBQXNCLENBQUMsR0FBRztnQkFDcEMsUUFBUSxFQUFFLENBQUMsS0FBSyxDQUFDO2FBQ3BCLENBQUM7WUFDRixVQUFVLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUNuQyxTQUFTO1FBQ2IsQ0FBQztRQUVELDZDQUE2QztRQUM3QyxnRUFBZ0U7UUFDaEUsTUFBTSxtQkFBbUIsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FDMUMsMkJBQTJCLENBQUMsQ0FBQyxDQUFDLENBQ2pDLENBQUM7UUFDRixJQUFJLG1CQUFtQixJQUFJLElBQUksRUFBRSxDQUFDO1lBQzlCLE1BQU0sS0FBSyxHQUFHLGVBQWUsQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUN0QyxVQUFVLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUNoQyxTQUFTO1FBQ2IsQ0FBQztRQUVELDRDQUE0QztRQUM1QyxzREFBc0Q7UUFDdEQsTUFBTSxhQUFhLEdBQUcsSUFBQSwwQkFBa0IsRUFBQyxNQUFNLENBQUMsQ0FBQztRQUNqRCxVQUFVLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQztJQUM1QyxDQUFDO0lBRUQsT0FBTyxVQUFVLENBQUM7QUFDdEIsQ0FBQztBQUVELFNBQVMsMkJBQTJCLENBQUMsS0FBa0I7SUFDbkQsT0FBTyxDQUFDLDRCQUFnQixDQUFDLEdBQUcsRUFBRSw0QkFBZ0IsQ0FBQyxFQUFFLENBQUMsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQzVFLENBQUM7QUFFRCxTQUFTLHlCQUF5QixDQUFDLEtBQWtCO0lBQ2pELE1BQU0sSUFBSSxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUM7SUFDeEIsSUFBSSxJQUFJLElBQUksNEJBQWdCLENBQUMsR0FBRyxFQUFFLENBQUM7UUFDL0IsT0FBTyw4QkFBc0IsQ0FBQyxHQUFHLENBQUM7SUFDdEMsQ0FBQztTQUFNLElBQUksSUFBSSxJQUFJLDRCQUFnQixDQUFDLEVBQUUsRUFBRSxDQUFDO1FBQ3JDLE9BQU8sOEJBQXNCLENBQUMsRUFBRSxDQUFDO0lBQ3JDLENBQUM7SUFFRCxNQUFNLElBQUksaUNBQXlCLENBQy9CLGtEQUFrRCxFQUNsRCxDQUFDLEtBQUssQ0FBQyxDQUNWLENBQUM7QUFDTixDQUFDIn0=
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.parseQuery = parseQuery;
|
|
4
|
+
const group_1 = require("./group");
|
|
5
|
+
const tokenizer_1 = require("./tokenizer");
|
|
6
|
+
const types_1 = require("./types");
|
|
7
|
+
function parseQuery(query) {
|
|
8
|
+
const tokens = (0, tokenizer_1.tokenize)(query);
|
|
9
|
+
if (tokens.length == 0) {
|
|
10
|
+
return {
|
|
11
|
+
type: 'Query',
|
|
12
|
+
groups: {
|
|
13
|
+
type: 'FieldGroup',
|
|
14
|
+
operator: types_1.FieldGroupOperatorNode.And,
|
|
15
|
+
children: [],
|
|
16
|
+
},
|
|
17
|
+
};
|
|
18
|
+
}
|
|
19
|
+
const fieldGroups = (0, group_1.parseFieldGroup)(tokens);
|
|
20
|
+
return {
|
|
21
|
+
type: 'Query',
|
|
22
|
+
groups: fieldGroups,
|
|
23
|
+
};
|
|
24
|
+
}
|
|
25
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicXVlcnkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvYXN0L3F1ZXJ5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBSUEsZ0NBa0JDO0FBdEJELG1DQUEwQztBQUMxQywyQ0FBdUM7QUFDdkMsbUNBQTREO0FBRTVELFNBQWdCLFVBQVUsQ0FBQyxLQUFhO0lBQ3BDLE1BQU0sTUFBTSxHQUFHLElBQUEsb0JBQVEsRUFBQyxLQUFLLENBQUMsQ0FBQztJQUMvQixJQUFJLE1BQU0sQ0FBQyxNQUFNLElBQUksQ0FBQyxFQUFFLENBQUM7UUFDckIsT0FBTztZQUNILElBQUksRUFBRSxPQUFPO1lBQ2IsTUFBTSxFQUFFO2dCQUNKLElBQUksRUFBRSxZQUFZO2dCQUNsQixRQUFRLEVBQUUsOEJBQXNCLENBQUMsR0FBRztnQkFDcEMsUUFBUSxFQUFFLEVBQUU7YUFDZjtTQUNKLENBQUM7SUFDTixDQUFDO0lBRUQsTUFBTSxXQUFXLEdBQUcsSUFBQSx1QkFBZSxFQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQzVDLE9BQU87UUFDSCxJQUFJLEVBQUUsT0FBTztRQUNiLE1BQU0sRUFBRSxXQUFXO0tBQ3RCLENBQUM7QUFDTixDQUFDIn0=
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
export declare enum SyntaxTokenTypes {
|
|
2
|
+
Reference = 0,
|
|
3
|
+
Number = 1,
|
|
4
|
+
Quote = 2,
|
|
5
|
+
QuotedText = 3,
|
|
6
|
+
ReferenceJoin = 4,
|
|
7
|
+
OpenGroup = 5,
|
|
8
|
+
CloseGroup = 6,
|
|
9
|
+
OpenArrayGroup = 7,
|
|
10
|
+
CloseArrayGroup = 8,
|
|
11
|
+
OpenSubQuery = 9,
|
|
12
|
+
CloseSubQuery = 10,
|
|
13
|
+
And = 11,
|
|
14
|
+
Or = 12,
|
|
15
|
+
Not = 13,
|
|
16
|
+
Equal = 14,
|
|
17
|
+
GreaterThan = 15,
|
|
18
|
+
LessThan = 16,
|
|
19
|
+
ILike = 17,
|
|
20
|
+
Regex = 18,
|
|
21
|
+
True = 19,
|
|
22
|
+
False = 20,
|
|
23
|
+
Whitespace = 21,
|
|
24
|
+
InvalidToken = 22
|
|
25
|
+
}
|
|
26
|
+
export interface SyntaxToken {
|
|
27
|
+
type: SyntaxTokenTypes;
|
|
28
|
+
value?: string;
|
|
29
|
+
position: number | [number, number];
|
|
30
|
+
}
|
|
31
|
+
export declare function tokenize(input: string, keepWhitespace?: boolean): SyntaxToken[];
|
|
32
|
+
export declare function findClosingGroupTokenIdx(tokens: SyntaxToken[], startIdx: number, startingGroupToken: SyntaxTokenTypes): number;
|
|
33
|
+
export declare function isGroupToken(tokenType: SyntaxTokenTypes): boolean;
|
|
34
|
+
export declare function isStartingGroupToken(tokenType: SyntaxTokenTypes): boolean;
|
|
35
|
+
export declare function isEndingGroupToken(tokenType: SyntaxTokenTypes): boolean;
|
|
36
|
+
export declare function endingGroupToken(startingGroupTokenType: SyntaxTokenTypes): SyntaxTokenTypes;
|
|
@@ -0,0 +1,220 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.SyntaxTokenTypes = void 0;
|
|
4
|
+
exports.tokenize = tokenize;
|
|
5
|
+
exports.findClosingGroupTokenIdx = findClosingGroupTokenIdx;
|
|
6
|
+
exports.isGroupToken = isGroupToken;
|
|
7
|
+
exports.isStartingGroupToken = isStartingGroupToken;
|
|
8
|
+
exports.isEndingGroupToken = isEndingGroupToken;
|
|
9
|
+
exports.endingGroupToken = endingGroupToken;
|
|
10
|
+
const error_1 = require("../error");
|
|
11
|
+
var SyntaxTokenTypes;
|
|
12
|
+
(function (SyntaxTokenTypes) {
|
|
13
|
+
SyntaxTokenTypes[SyntaxTokenTypes["Reference"] = 0] = "Reference";
|
|
14
|
+
SyntaxTokenTypes[SyntaxTokenTypes["Number"] = 1] = "Number";
|
|
15
|
+
SyntaxTokenTypes[SyntaxTokenTypes["Quote"] = 2] = "Quote";
|
|
16
|
+
SyntaxTokenTypes[SyntaxTokenTypes["QuotedText"] = 3] = "QuotedText";
|
|
17
|
+
SyntaxTokenTypes[SyntaxTokenTypes["ReferenceJoin"] = 4] = "ReferenceJoin";
|
|
18
|
+
SyntaxTokenTypes[SyntaxTokenTypes["OpenGroup"] = 5] = "OpenGroup";
|
|
19
|
+
SyntaxTokenTypes[SyntaxTokenTypes["CloseGroup"] = 6] = "CloseGroup";
|
|
20
|
+
SyntaxTokenTypes[SyntaxTokenTypes["OpenArrayGroup"] = 7] = "OpenArrayGroup";
|
|
21
|
+
SyntaxTokenTypes[SyntaxTokenTypes["CloseArrayGroup"] = 8] = "CloseArrayGroup";
|
|
22
|
+
SyntaxTokenTypes[SyntaxTokenTypes["OpenSubQuery"] = 9] = "OpenSubQuery";
|
|
23
|
+
SyntaxTokenTypes[SyntaxTokenTypes["CloseSubQuery"] = 10] = "CloseSubQuery";
|
|
24
|
+
SyntaxTokenTypes[SyntaxTokenTypes["And"] = 11] = "And";
|
|
25
|
+
SyntaxTokenTypes[SyntaxTokenTypes["Or"] = 12] = "Or";
|
|
26
|
+
SyntaxTokenTypes[SyntaxTokenTypes["Not"] = 13] = "Not";
|
|
27
|
+
SyntaxTokenTypes[SyntaxTokenTypes["Equal"] = 14] = "Equal";
|
|
28
|
+
SyntaxTokenTypes[SyntaxTokenTypes["GreaterThan"] = 15] = "GreaterThan";
|
|
29
|
+
SyntaxTokenTypes[SyntaxTokenTypes["LessThan"] = 16] = "LessThan";
|
|
30
|
+
SyntaxTokenTypes[SyntaxTokenTypes["ILike"] = 17] = "ILike";
|
|
31
|
+
SyntaxTokenTypes[SyntaxTokenTypes["Regex"] = 18] = "Regex";
|
|
32
|
+
SyntaxTokenTypes[SyntaxTokenTypes["True"] = 19] = "True";
|
|
33
|
+
SyntaxTokenTypes[SyntaxTokenTypes["False"] = 20] = "False";
|
|
34
|
+
SyntaxTokenTypes[SyntaxTokenTypes["Whitespace"] = 21] = "Whitespace";
|
|
35
|
+
SyntaxTokenTypes[SyntaxTokenTypes["InvalidToken"] = 22] = "InvalidToken";
|
|
36
|
+
})(SyntaxTokenTypes || (exports.SyntaxTokenTypes = SyntaxTokenTypes = {}));
|
|
37
|
+
const Tokens = {
|
|
38
|
+
'"': SyntaxTokenTypes.Quote,
|
|
39
|
+
"'": SyntaxTokenTypes.Quote,
|
|
40
|
+
'`': SyntaxTokenTypes.Quote,
|
|
41
|
+
'.': SyntaxTokenTypes.ReferenceJoin,
|
|
42
|
+
'(': SyntaxTokenTypes.OpenGroup,
|
|
43
|
+
')': SyntaxTokenTypes.CloseGroup,
|
|
44
|
+
'[': SyntaxTokenTypes.OpenArrayGroup,
|
|
45
|
+
']': SyntaxTokenTypes.CloseArrayGroup,
|
|
46
|
+
'{': SyntaxTokenTypes.OpenSubQuery,
|
|
47
|
+
'}': SyntaxTokenTypes.CloseSubQuery,
|
|
48
|
+
and: SyntaxTokenTypes.And,
|
|
49
|
+
'&': SyntaxTokenTypes.And,
|
|
50
|
+
',': SyntaxTokenTypes.And,
|
|
51
|
+
or: SyntaxTokenTypes.Or,
|
|
52
|
+
'|': SyntaxTokenTypes.Or,
|
|
53
|
+
not: SyntaxTokenTypes.Not,
|
|
54
|
+
'!': SyntaxTokenTypes.Not,
|
|
55
|
+
'=': SyntaxTokenTypes.Equal,
|
|
56
|
+
':': SyntaxTokenTypes.Equal,
|
|
57
|
+
'>': SyntaxTokenTypes.GreaterThan,
|
|
58
|
+
'<': SyntaxTokenTypes.LessThan,
|
|
59
|
+
ilike: SyntaxTokenTypes.ILike,
|
|
60
|
+
'~': SyntaxTokenTypes.Regex,
|
|
61
|
+
true: SyntaxTokenTypes.True,
|
|
62
|
+
false: SyntaxTokenTypes.False,
|
|
63
|
+
' ': SyntaxTokenTypes.Whitespace,
|
|
64
|
+
};
|
|
65
|
+
// Normalize an input string by trimming extra spaces.
|
|
66
|
+
function normalize(input) {
|
|
67
|
+
return input.replace(/\s+/g, ' ').trim();
|
|
68
|
+
}
|
|
69
|
+
// Checks if input is a valid reference value.
|
|
70
|
+
// A reference value is a non-empty string containing either
|
|
71
|
+
// alphabetic characters and underscores OR only numeric characters
|
|
72
|
+
// (but not both).
|
|
73
|
+
function validReferenceValue(input) {
|
|
74
|
+
if (input.length === 0)
|
|
75
|
+
return false;
|
|
76
|
+
return /^[a-zA-Z_]+$/.test(input) || /^[0-9]+$/.test(input);
|
|
77
|
+
}
|
|
78
|
+
function tokenize(input, keepWhitespace = false) {
|
|
79
|
+
input = normalize(input);
|
|
80
|
+
const syntaxTokens = [];
|
|
81
|
+
const tokens = input.split('');
|
|
82
|
+
for (let i = 0; i < tokens.length; i++) {
|
|
83
|
+
const previousSyntaxToken = syntaxTokens[syntaxTokens.length - 1];
|
|
84
|
+
const previousEndPosition = previousSyntaxToken
|
|
85
|
+
? Array.isArray(previousSyntaxToken.position)
|
|
86
|
+
? previousSyntaxToken.position[1]
|
|
87
|
+
: previousSyntaxToken.position
|
|
88
|
+
: null;
|
|
89
|
+
const startPosition = previousEndPosition != null ? previousEndPosition + 1 : 0;
|
|
90
|
+
const tokenValue = tokens[i];
|
|
91
|
+
const token = {
|
|
92
|
+
type: Tokens[tokenValue.toLowerCase()],
|
|
93
|
+
value: tokenValue,
|
|
94
|
+
position: startPosition,
|
|
95
|
+
};
|
|
96
|
+
// Parse full quoted text as a single token
|
|
97
|
+
if (token.type == SyntaxTokenTypes.Quote) {
|
|
98
|
+
const nextTokens = tokens.slice(i + 1);
|
|
99
|
+
const endQuoteTokenIncludedIdx = nextTokens.findIndex((t) => t == token.value);
|
|
100
|
+
if (endQuoteTokenIncludedIdx == -1) {
|
|
101
|
+
// TODO: throw error
|
|
102
|
+
throw new Error('Quote must have a closing token');
|
|
103
|
+
}
|
|
104
|
+
const quoteTokens = [
|
|
105
|
+
tokenValue,
|
|
106
|
+
...tokens.splice(i + 1, endQuoteTokenIncludedIdx + 1),
|
|
107
|
+
];
|
|
108
|
+
const quoteToken = quoteTokens.join('');
|
|
109
|
+
const quoteTokenUnquoted = quoteToken.slice(1, -1);
|
|
110
|
+
token.type = SyntaxTokenTypes.QuotedText;
|
|
111
|
+
token.value = quoteTokenUnquoted;
|
|
112
|
+
token.position = [
|
|
113
|
+
startPosition,
|
|
114
|
+
startPosition + endQuoteTokenIncludedIdx + 1,
|
|
115
|
+
];
|
|
116
|
+
}
|
|
117
|
+
// Attempt to parse multi-character tokens and references
|
|
118
|
+
if (token.type == null) {
|
|
119
|
+
const nextTokens = tokens.slice(i + 1);
|
|
120
|
+
let endWordExcludedIdx = nextTokens.findIndex((t) => {
|
|
121
|
+
return !t.match(/\w/g);
|
|
122
|
+
});
|
|
123
|
+
if (endWordExcludedIdx == -1) {
|
|
124
|
+
endWordExcludedIdx = nextTokens.length;
|
|
125
|
+
}
|
|
126
|
+
const word = tokens.slice(i, i + endWordExcludedIdx + 1).join('');
|
|
127
|
+
const wordTokenType = Tokens[word.toLowerCase()];
|
|
128
|
+
if (wordTokenType != null) {
|
|
129
|
+
tokens.splice(i + 1, endWordExcludedIdx);
|
|
130
|
+
token.type = wordTokenType;
|
|
131
|
+
token.value = word;
|
|
132
|
+
token.position = [
|
|
133
|
+
startPosition,
|
|
134
|
+
startPosition + endWordExcludedIdx,
|
|
135
|
+
];
|
|
136
|
+
}
|
|
137
|
+
else if (!isNaN(parseFloat(word)) &&
|
|
138
|
+
parseFloat(word).toString() == word) {
|
|
139
|
+
tokens.splice(i + 1, endWordExcludedIdx);
|
|
140
|
+
token.type = SyntaxTokenTypes.Number;
|
|
141
|
+
token.value = word;
|
|
142
|
+
token.position = [
|
|
143
|
+
startPosition,
|
|
144
|
+
startPosition + endWordExcludedIdx,
|
|
145
|
+
];
|
|
146
|
+
}
|
|
147
|
+
else if (validReferenceValue(word)) {
|
|
148
|
+
tokens.splice(i + 1, endWordExcludedIdx);
|
|
149
|
+
token.type = SyntaxTokenTypes.Reference;
|
|
150
|
+
token.value = word;
|
|
151
|
+
token.position = [
|
|
152
|
+
startPosition,
|
|
153
|
+
startPosition + endWordExcludedIdx,
|
|
154
|
+
];
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
if (token.type == null) {
|
|
158
|
+
throw new error_1.InvalidOrUnexpectedTokens('Unknown token', [token]);
|
|
159
|
+
}
|
|
160
|
+
if (Array.isArray(token.position) &&
|
|
161
|
+
token.position[0] == token.position[1]) {
|
|
162
|
+
token.position = token.position[0];
|
|
163
|
+
}
|
|
164
|
+
syntaxTokens.push(token);
|
|
165
|
+
}
|
|
166
|
+
if (!keepWhitespace) {
|
|
167
|
+
const syntaxTokensWithoutWhitespace = syntaxTokens.filter((t) => t.type != SyntaxTokenTypes.Whitespace);
|
|
168
|
+
return syntaxTokensWithoutWhitespace;
|
|
169
|
+
}
|
|
170
|
+
else {
|
|
171
|
+
return syntaxTokens;
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
function findClosingGroupTokenIdx(tokens, startIdx, startingGroupToken) {
|
|
175
|
+
const endingTokenType = endingGroupToken(startingGroupToken);
|
|
176
|
+
for (let i = startIdx; i < tokens.length; i++) {
|
|
177
|
+
const token = tokens[i];
|
|
178
|
+
if (isStartingGroupToken(token.type)) {
|
|
179
|
+
const endPosition = findClosingGroupTokenIdx(tokens, i + 1, token.type);
|
|
180
|
+
i = endPosition + 1;
|
|
181
|
+
continue;
|
|
182
|
+
}
|
|
183
|
+
if (isEndingGroupToken(token.type)) {
|
|
184
|
+
if (token.type == endingTokenType) {
|
|
185
|
+
return i;
|
|
186
|
+
}
|
|
187
|
+
throw new error_1.InvalidOrUnexpectedTokens('Unexpected token, no group starting token', [token]);
|
|
188
|
+
}
|
|
189
|
+
}
|
|
190
|
+
throw new error_1.InvalidOrUnexpectedTokens('Invalid tokens, expected group to end', tokens.slice(startIdx));
|
|
191
|
+
}
|
|
192
|
+
function isGroupToken(tokenType) {
|
|
193
|
+
return isStartingGroupToken(tokenType) || isEndingGroupToken(tokenType);
|
|
194
|
+
}
|
|
195
|
+
function isStartingGroupToken(tokenType) {
|
|
196
|
+
return [
|
|
197
|
+
SyntaxTokenTypes.OpenGroup,
|
|
198
|
+
SyntaxTokenTypes.OpenArrayGroup,
|
|
199
|
+
SyntaxTokenTypes.OpenSubQuery,
|
|
200
|
+
].includes(tokenType);
|
|
201
|
+
}
|
|
202
|
+
function isEndingGroupToken(tokenType) {
|
|
203
|
+
return [
|
|
204
|
+
SyntaxTokenTypes.CloseGroup,
|
|
205
|
+
SyntaxTokenTypes.CloseArrayGroup,
|
|
206
|
+
SyntaxTokenTypes.CloseSubQuery,
|
|
207
|
+
].includes(tokenType);
|
|
208
|
+
}
|
|
209
|
+
function endingGroupToken(startingGroupTokenType) {
|
|
210
|
+
switch (startingGroupTokenType) {
|
|
211
|
+
case SyntaxTokenTypes.OpenGroup:
|
|
212
|
+
return SyntaxTokenTypes.CloseGroup;
|
|
213
|
+
case SyntaxTokenTypes.OpenArrayGroup:
|
|
214
|
+
return SyntaxTokenTypes.CloseArrayGroup;
|
|
215
|
+
case SyntaxTokenTypes.OpenSubQuery:
|
|
216
|
+
return SyntaxTokenTypes.CloseSubQuery;
|
|
217
|
+
}
|
|
218
|
+
throw new error_1.InvalidOrUnexpectedTokens(`Unknown starting group token ${startingGroupTokenType}`, []);
|
|
219
|
+
}
|
|
220
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG9rZW5pemVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2FzdC90b2tlbml6ZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBOEVBLDRCQWdIQztBQUVELDREQW1DQztBQUVELG9DQUVDO0FBRUQsb0RBTUM7QUFFRCxnREFNQztBQUVELDRDQWdCQztBQXpRRCxvQ0FBcUQ7QUFFckQsSUFBWSxnQkF3Qlg7QUF4QkQsV0FBWSxnQkFBZ0I7SUFDeEIsaUVBQVMsQ0FBQTtJQUNULDJEQUFNLENBQUE7SUFDTix5REFBSyxDQUFBO0lBQ0wsbUVBQVUsQ0FBQTtJQUNWLHlFQUFhLENBQUE7SUFDYixpRUFBUyxDQUFBO0lBQ1QsbUVBQVUsQ0FBQTtJQUNWLDJFQUFjLENBQUE7SUFDZCw2RUFBZSxDQUFBO0lBQ2YsdUVBQVksQ0FBQTtJQUNaLDBFQUFhLENBQUE7SUFDYixzREFBRyxDQUFBO0lBQ0gsb0RBQUUsQ0FBQTtJQUNGLHNEQUFHLENBQUE7SUFDSCwwREFBSyxDQUFBO0lBQ0wsc0VBQVcsQ0FBQTtJQUNYLGdFQUFRLENBQUE7SUFDUiwwREFBSyxDQUFBO0lBQ0wsMERBQUssQ0FBQTtJQUNMLHdEQUFJLENBQUE7SUFDSiwwREFBSyxDQUFBO0lBQ0wsb0VBQVUsQ0FBQTtJQUNWLHdFQUFZLENBQUE7QUFDaEIsQ0FBQyxFQXhCVyxnQkFBZ0IsZ0NBQWhCLGdCQUFnQixRQXdCM0I7QUFHRCxNQUFNLE1BQU0sR0FBRztJQUNYLEdBQUcsRUFBRSxnQkFBZ0IsQ0FBQyxLQUFLO0lBQzNCLEdBQUcsRUFBRSxnQkFBZ0IsQ0FBQyxLQUFLO0lBQzNCLEdBQUcsRUFBRSxnQkFBZ0IsQ0FBQyxLQUFLO0lBQzNCLEdBQUcsRUFBRSxnQkFBZ0IsQ0FBQyxhQUFhO0lBQ25DLEdBQUcsRUFBRSxnQkFBZ0IsQ0FBQyxTQUFTO0lBQy9CLEdBQUcsRUFBRSxnQkFBZ0IsQ0FBQyxVQUFVO0lBQ2hDLEdBQUcsRUFBRSxnQkFBZ0IsQ0FBQyxjQUFj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
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import { SyntaxToken } from './tokenizer';
|
|
2
|
+
export interface QueryNode {
|
|
3
|
+
type: 'Query';
|
|
4
|
+
groups: FieldGroupNode;
|
|
5
|
+
}
|
|
6
|
+
export declare enum FieldGroupOperatorNode {
|
|
7
|
+
And = 0,
|
|
8
|
+
Or = 1,
|
|
9
|
+
Not = 2
|
|
10
|
+
}
|
|
11
|
+
export interface FieldGroupNode {
|
|
12
|
+
type: 'FieldGroup';
|
|
13
|
+
operator: FieldGroupOperatorNode;
|
|
14
|
+
children: (FieldSelectorNode | FieldGroupNode)[];
|
|
15
|
+
}
|
|
16
|
+
export interface FieldSelectorNode {
|
|
17
|
+
type: 'FieldSelector';
|
|
18
|
+
reference: FieldReferenceNode;
|
|
19
|
+
operator: FieldOperatorNode;
|
|
20
|
+
value: FieldSelectorValueNode;
|
|
21
|
+
}
|
|
22
|
+
export interface FieldReferenceNode {
|
|
23
|
+
type: 'FieldReference';
|
|
24
|
+
paths: SyntaxToken[];
|
|
25
|
+
}
|
|
26
|
+
export declare enum FieldOperatorNode {
|
|
27
|
+
Equal = 0,
|
|
28
|
+
NotEqual = 1,
|
|
29
|
+
GreaterThan = 2,
|
|
30
|
+
GreaterThanOrEqual = 3,
|
|
31
|
+
LessThan = 4,
|
|
32
|
+
LessThanOrEqual = 5,
|
|
33
|
+
ILike = 6,
|
|
34
|
+
Regex = 7,
|
|
35
|
+
Exists = 8
|
|
36
|
+
}
|
|
37
|
+
export type FieldSelectorValueNode = FieldSelectorValueLiteralNode | FieldSelectorValueExistsNode | FieldReferenceNode | SubFieldSelectorsNode | QueryNode;
|
|
38
|
+
export interface FieldSelectorValueLiteralNode {
|
|
39
|
+
type: 'FieldSelectorValueLiteral';
|
|
40
|
+
token: SyntaxToken;
|
|
41
|
+
}
|
|
42
|
+
export interface FieldSelectorValueExistsNode {
|
|
43
|
+
type: 'FieldSelectorValueExists';
|
|
44
|
+
token: SyntaxToken;
|
|
45
|
+
}
|
|
46
|
+
export interface SubFieldSelectorsNode {
|
|
47
|
+
type: 'SubFieldSelectors';
|
|
48
|
+
children: FieldSelectorNode[];
|
|
49
|
+
}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.FieldOperatorNode = exports.FieldGroupOperatorNode = void 0;
|
|
4
|
+
var FieldGroupOperatorNode;
|
|
5
|
+
(function (FieldGroupOperatorNode) {
|
|
6
|
+
FieldGroupOperatorNode[FieldGroupOperatorNode["And"] = 0] = "And";
|
|
7
|
+
FieldGroupOperatorNode[FieldGroupOperatorNode["Or"] = 1] = "Or";
|
|
8
|
+
FieldGroupOperatorNode[FieldGroupOperatorNode["Not"] = 2] = "Not";
|
|
9
|
+
})(FieldGroupOperatorNode || (exports.FieldGroupOperatorNode = FieldGroupOperatorNode = {}));
|
|
10
|
+
var FieldOperatorNode;
|
|
11
|
+
(function (FieldOperatorNode) {
|
|
12
|
+
FieldOperatorNode[FieldOperatorNode["Equal"] = 0] = "Equal";
|
|
13
|
+
FieldOperatorNode[FieldOperatorNode["NotEqual"] = 1] = "NotEqual";
|
|
14
|
+
FieldOperatorNode[FieldOperatorNode["GreaterThan"] = 2] = "GreaterThan";
|
|
15
|
+
FieldOperatorNode[FieldOperatorNode["GreaterThanOrEqual"] = 3] = "GreaterThanOrEqual";
|
|
16
|
+
FieldOperatorNode[FieldOperatorNode["LessThan"] = 4] = "LessThan";
|
|
17
|
+
FieldOperatorNode[FieldOperatorNode["LessThanOrEqual"] = 5] = "LessThanOrEqual";
|
|
18
|
+
FieldOperatorNode[FieldOperatorNode["ILike"] = 6] = "ILike";
|
|
19
|
+
FieldOperatorNode[FieldOperatorNode["Regex"] = 7] = "Regex";
|
|
20
|
+
FieldOperatorNode[FieldOperatorNode["Exists"] = 8] = "Exists";
|
|
21
|
+
})(FieldOperatorNode || (exports.FieldOperatorNode = FieldOperatorNode = {}));
|
|
22
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvYXN0L3R5cGVzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQU9BLElBQVksc0JBSVg7QUFKRCxXQUFZLHNCQUFzQjtJQUM5QixpRUFBRyxDQUFBO0lBQ0gsK0RBQUUsQ0FBQTtJQUNGLGlFQUFHLENBQUE7QUFDUCxDQUFDLEVBSlcsc0JBQXNCLHNDQUF0QixzQkFBc0IsUUFJakM7QUFvQkQsSUFBWSxpQkFVWDtBQVZELFdBQVksaUJBQWlCO0lBQ3pCLDJEQUFLLENBQUE7SUFDTCxpRUFBUSxDQUFBO0lBQ1IsdUVBQVcsQ0FBQTtJQUNYLHFGQUFrQixDQUFBO0lBQ2xCLGlFQUFRLENBQUE7SUFDUiwrRUFBZSxDQUFBO0lBQ2YsMkRBQUssQ0FBQTtJQUNMLDJEQUFLLENBQUE7SUFDTCw2REFBTSxDQUFBO0FBQ1YsQ0FBQyxFQVZXLGlCQUFpQixpQ0FBakIsaUJBQWlCLFFBVTVCIn0=
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.compileFieldSelector = compileFieldSelector;
|
|
4
|
+
const tokenizer_1 = require("../ast/tokenizer");
|
|
5
|
+
const types_1 = require("../ast/types");
|
|
6
|
+
function compileFieldSelector(astFieldSelector, fieldId = 0) {
|
|
7
|
+
// Extract query module id and field path from AST field selector reference
|
|
8
|
+
const reference = astFieldSelector.reference;
|
|
9
|
+
const referencePaths = reference.paths.map((p) => p.value);
|
|
10
|
+
const moduleId = referencePaths.shift();
|
|
11
|
+
const fieldPath = referencePaths;
|
|
12
|
+
// Construct selector based on AST field selector operator and value
|
|
13
|
+
const fieldSelectorOperator = astFieldSelector.operator;
|
|
14
|
+
const fieldSelectorValue = astFieldSelector.value;
|
|
15
|
+
let selector = null;
|
|
16
|
+
if (fieldSelectorValue.type == 'FieldSelectorValueLiteral') {
|
|
17
|
+
const valueToken = fieldSelectorValue.token;
|
|
18
|
+
const value = valueToken.value;
|
|
19
|
+
switch (valueToken.type) {
|
|
20
|
+
case tokenizer_1.SyntaxTokenTypes.QuotedText:
|
|
21
|
+
selector = {
|
|
22
|
+
text: {
|
|
23
|
+
eq: fieldSelectorOperator == types_1.FieldOperatorNode.Equal
|
|
24
|
+
? value
|
|
25
|
+
: undefined,
|
|
26
|
+
ilike: fieldSelectorOperator == types_1.FieldOperatorNode.ILike
|
|
27
|
+
? value
|
|
28
|
+
: undefined,
|
|
29
|
+
regex: fieldSelectorOperator == types_1.FieldOperatorNode.Regex
|
|
30
|
+
? value
|
|
31
|
+
: undefined,
|
|
32
|
+
},
|
|
33
|
+
};
|
|
34
|
+
break;
|
|
35
|
+
case tokenizer_1.SyntaxTokenTypes.False:
|
|
36
|
+
case tokenizer_1.SyntaxTokenTypes.True:
|
|
37
|
+
selector = {
|
|
38
|
+
bool: {
|
|
39
|
+
eq: valueToken.type == tokenizer_1.SyntaxTokenTypes.True,
|
|
40
|
+
},
|
|
41
|
+
};
|
|
42
|
+
break;
|
|
43
|
+
case tokenizer_1.SyntaxTokenTypes.Number: {
|
|
44
|
+
const valueNumber = parseFloat(value);
|
|
45
|
+
selector = {
|
|
46
|
+
number: {
|
|
47
|
+
eq: fieldSelectorOperator == types_1.FieldOperatorNode.Equal
|
|
48
|
+
? valueNumber
|
|
49
|
+
: undefined,
|
|
50
|
+
gt: fieldSelectorOperator ==
|
|
51
|
+
types_1.FieldOperatorNode.GreaterThan
|
|
52
|
+
? valueNumber
|
|
53
|
+
: fieldSelectorOperator ==
|
|
54
|
+
types_1.FieldOperatorNode.GreaterThanOrEqual
|
|
55
|
+
? valueNumber - 1
|
|
56
|
+
: null,
|
|
57
|
+
lt: fieldSelectorOperator == types_1.FieldOperatorNode.LessThan
|
|
58
|
+
? valueNumber
|
|
59
|
+
: fieldSelectorOperator ==
|
|
60
|
+
types_1.FieldOperatorNode.LessThanOrEqual
|
|
61
|
+
? valueNumber + 1
|
|
62
|
+
: undefined,
|
|
63
|
+
},
|
|
64
|
+
};
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
if (!selector) {
|
|
69
|
+
throw new Error('Unable to parse AST, unknown selector');
|
|
70
|
+
}
|
|
71
|
+
return {
|
|
72
|
+
id: fieldId,
|
|
73
|
+
path: fieldPath,
|
|
74
|
+
module_id: moduleId,
|
|
75
|
+
selector: selector,
|
|
76
|
+
};
|
|
77
|
+
}
|
|
78
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmllbGQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvY29tcGlsZXIvZmllbGQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFLQSxvREFzRkM7QUF6RkQsZ0RBQW9EO0FBQ3BELHdDQUFvRTtBQUVwRSxTQUFnQixvQkFBb0IsQ0FDaEMsZ0JBQW1DLEVBQ25DLE9BQU8sR0FBRyxDQUFDO0lBRVgsMkVBQTJFO0lBQzNFLE1BQU0sU0FBUyxHQUFHLGdCQUFnQixDQUFDLFNBQVMsQ0FBQztJQUM3QyxNQUFNLGNBQWMsR0FBRyxTQUFTLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEtBQU0sQ0FBQyxDQUFDO0lBRTVELE1BQU0sUUFBUSxHQUFHLGNBQWMsQ0FBQyxLQUFLLEVBQUcsQ0FBQztJQUN6QyxNQUFNLFNBQVMsR0FBRyxjQUFjLENBQUM7SUFFakMsb0VBQW9FO0lBQ3BFLE1BQU0scUJBQXFCLEdBQUcsZ0JBQWdCLENBQUMsUUFBUSxDQUFDO0lBQ3hELE1BQU0sa0JBQWtCLEdBQUcsZ0JBQWdCLENBQUMsS0FBSyxDQUFDO0lBRWxELElBQUksUUFBUSxHQUE4QixJQUFJLENBQUM7SUFFL0MsSUFBSSxrQkFBa0IsQ0FBQyxJQUFJLElBQUksMkJBQTJCLEVBQUUsQ0FBQztRQUN6RCxNQUFNLFVBQVUsR0FBRyxrQkFBa0IsQ0FBQyxLQUFLLENBQUM7UUFDNUMsTUFBTSxLQUFLLEdBQUcsVUFBVSxDQUFDLEtBQU0sQ0FBQztRQUNoQyxRQUFRLFVBQVUsQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUN0QixLQUFLLDRCQUFnQixDQUFDLFVBQVU7Z0JBQzVCLFFBQVEsR0FBRztvQkFDUCxJQUFJLEVBQUU7d0JBQ0YsRUFBRSxFQUNFLHFCQUFxQixJQUFJLHlCQUFpQixDQUFDLEtBQUs7NEJBQzVDLENBQUMsQ0FBQyxLQUFLOzRCQUNQLENBQUMsQ0FBQyxTQUFTO3dCQUNuQixLQUFLLEVBQ0QscUJBQXFCLElBQUkseUJBQWlCLENBQUMsS0FBSzs0QkFDNUMsQ0FBQyxDQUFDLEtBQUs7NEJBQ1AsQ0FBQyxDQUFDLFNBQVM7d0JBQ25CLEtBQUssRUFDRCxxQkFBcUIsSUFBSSx5QkFBaUIsQ0FBQyxLQUFLOzRCQUM1QyxDQUFDLENBQUMsS0FBSzs0QkFDUCxDQUFDLENBQUMsU0FBUztxQkFDdEI7aUJBQ0osQ0FBQztnQkFDRixNQUFNO1lBQ1YsS0FBSyw0QkFBZ0IsQ0FBQyxLQUFLLENBQUM7WUFDNUIsS0FBSyw0QkFBZ0IsQ0FBQyxJQUFJO2dCQUN0QixRQUFRLEdBQUc7b0JBQ1AsSUFBSSxFQUFFO3dCQUNGLEVBQUUsRUFBRSxVQUFVLENBQUMsSUFBSSxJQUFJLDRCQUFnQixDQUFDLElBQUk7cUJBQy9DO2lCQUNKLENBQUM7Z0JBQ0YsTUFBTTtZQUNWLEtBQUssNEJBQWdCLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztnQkFDM0IsTUFBTSxXQUFXLEdBQUcsVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDO2dCQUN0QyxRQUFRLEdBQUc7b0JBQ1AsTUFBTSxFQUFFO3dCQUNKLEVBQUUsRUFDRSxxQkFBcUIsSUFBSSx5QkFBaUIsQ0FBQyxLQUFLOzRCQUM1QyxDQUFDLENBQUMsV0FBVzs0QkFDYixDQUFDLENBQUMsU0FBUzt3QkFDbkIsRUFBRSxFQUNFLHFCQUFxQjs0QkFDckIseUJBQWlCLENBQUMsV0FBVzs0QkFDekIsQ0FBQyxDQUFDLFdBQVc7NEJBQ2IsQ0FBQyxDQUFDLHFCQUFxQjtnQ0FDbkIseUJBQWlCLENBQUMsa0JBQWtCO2dDQUN0QyxDQUFDLENBQUMsV0FBVyxHQUFHLENBQUM7Z0NBQ2pCLENBQUMsQ0FBQyxJQUFJO3dCQUNoQixFQUFFLEVBQ0UscUJBQXFCLElBQUkseUJBQWlCLENBQUMsUUFBUTs0QkFDL0MsQ0FBQyxDQUFDLFdBQVc7NEJBQ2IsQ0FBQyxDQUFDLHFCQUFxQjtnQ0FDbkIseUJBQWlCLENBQUMsZUFBZTtnQ0FDbkMsQ0FBQyxDQUFDLFdBQVcsR0FBRyxDQUFDO2dDQUNqQixDQUFDLENBQUMsU0FBUztxQkFDeEI7aUJBQ0osQ0FBQztZQUNOLENBQUM7UUFDTCxDQUFDO0lBQ0wsQ0FBQztJQUVELElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUNaLE1BQU0sSUFBSSxLQUFLLENBQUMsdUNBQXVDLENBQUMsQ0FBQztJQUM3RCxDQUFDO0lBRUQsT0FBTztRQUNILEVBQUUsRUFBRSxPQUFPO1FBQ1gsSUFBSSxFQUFFLFNBQVM7UUFDZixTQUFTLEVBQUUsUUFBUTtRQUNuQixRQUFRLEVBQUUsUUFBUztLQUN0QixDQUFDO0FBQ04sQ0FBQyJ9
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.compileFieldGroup = compileFieldGroup;
|
|
4
|
+
const generated_1 = require("night-rest-api/generated");
|
|
5
|
+
const types_1 = require("../ast/types");
|
|
6
|
+
const field_1 = require("./field");
|
|
7
|
+
function compileFieldGroup(fieldGroup, fieldIdStart = 0) {
|
|
8
|
+
const fields = [];
|
|
9
|
+
const children = [];
|
|
10
|
+
// Match operator
|
|
11
|
+
let operator;
|
|
12
|
+
switch (fieldGroup.operator) {
|
|
13
|
+
case types_1.FieldGroupOperatorNode.And:
|
|
14
|
+
operator = generated_1.QueryFieldGroupOperator.AND;
|
|
15
|
+
break;
|
|
16
|
+
case types_1.FieldGroupOperatorNode.Not:
|
|
17
|
+
operator = generated_1.QueryFieldGroupOperator.NOT;
|
|
18
|
+
break;
|
|
19
|
+
case types_1.FieldGroupOperatorNode.Or:
|
|
20
|
+
operator = generated_1.QueryFieldGroupOperator.OR;
|
|
21
|
+
break;
|
|
22
|
+
}
|
|
23
|
+
// Compile children
|
|
24
|
+
for (const child of fieldGroup.children) {
|
|
25
|
+
if (child.type == 'FieldSelector') {
|
|
26
|
+
const field = (0, field_1.compileFieldSelector)(child, fields.length + fieldIdStart);
|
|
27
|
+
fields.push(field);
|
|
28
|
+
children.push(field.id);
|
|
29
|
+
}
|
|
30
|
+
else if (child.type == 'FieldGroup') {
|
|
31
|
+
const [combiledFieldGroup, newFields] = compileFieldGroup(child, fields.length + fieldIdStart);
|
|
32
|
+
children.push(combiledFieldGroup);
|
|
33
|
+
fields.push(...newFields);
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
return [[operator, children], fields];
|
|
37
|
+
}
|
|
38
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JvdXAuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvY29tcGlsZXIvZ3JvdXAudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFXQSw4Q0F5Q0M7QUFwREQsd0RBS2tDO0FBRWxDLHdDQUFzRTtBQUV0RSxtQ0FBK0M7QUFFL0MsU0FBZ0IsaUJBQWlCLENBQzdCLFVBQTBCLEVBQzFCLFlBQVksR0FBRyxDQUFDO0lBRWhCLE1BQU0sTUFBTSxHQUFpQixFQUFFLENBQUM7SUFDaEMsTUFBTSxRQUFRLEdBQXNCLEVBQUUsQ0FBQztJQUV2QyxpQkFBaUI7SUFDakIsSUFBSSxRQUFpQyxDQUFDO0lBQ3RDLFFBQVEsVUFBVSxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQzFCLEtBQUssOEJBQXNCLENBQUMsR0FBRztZQUMzQixRQUFRLEdBQUcsbUNBQXVCLENBQUMsR0FBRyxDQUFDO1lBQ3ZDLE1BQU07UUFDVixLQUFLLDhCQUFzQixDQUFDLEdBQUc7WUFDM0IsUUFBUSxHQUFHLG1DQUF1QixDQUFDLEdBQUcsQ0FBQztZQUN2QyxNQUFNO1FBQ1YsS0FBSyw4QkFBc0IsQ0FBQyxFQUFFO1lBQzFCLFFBQVEsR0FBRyxtQ0FBdUIsQ0FBQyxFQUFFLENBQUM7WUFDdEMsTUFBTTtJQUNkLENBQUM7SUFFRCxtQkFBbUI7SUFDbkIsS0FBSyxNQUFNLEtBQUssSUFBSSxVQUFVLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDdEMsSUFBSSxLQUFLLENBQUMsSUFBSSxJQUFJLGVBQWUsRUFBRSxDQUFDO1lBQ2hDLE1BQU0sS0FBSyxHQUFHLElBQUEsNEJBQW9CLEVBQzlCLEtBQUssRUFDTCxNQUFNLENBQUMsTUFBTSxHQUFHLFlBQVksQ0FDL0IsQ0FBQztZQUNGLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDbkIsUUFBUSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDNUIsQ0FBQzthQUFNLElBQUksS0FBSyxDQUFDLElBQUksSUFBSSxZQUFZLEVBQUUsQ0FBQztZQUNwQyxNQUFNLENBQUMsa0JBQWtCLEVBQUUsU0FBUyxDQUFDLEdBQUcsaUJBQWlCLENBQ3JELEtBQUssRUFDTCxNQUFNLENBQUMsTUFBTSxHQUFHLFlBQVksQ0FDL0IsQ0FBQztZQUNGLFFBQVEsQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsQ0FBQztZQUNsQyxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsU0FBUyxDQUFDLENBQUM7UUFDOUIsQ0FBQztJQUNMLENBQUM7SUFFRCxPQUFPLENBQUMsQ0FBQyxRQUFRLEVBQUUsUUFBUSxDQUFDLEVBQUUsTUFBTSxDQUFDLENBQUM7QUFDMUMsQ0FBQyJ9
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.compileQuery = compileQuery;
|
|
4
|
+
const group_1 = require("./group");
|
|
5
|
+
function compileQuery(query) {
|
|
6
|
+
const [compiledGroups, fields] = (0, group_1.compileFieldGroup)(query.groups);
|
|
7
|
+
return { fields, grouping: compiledGroups };
|
|
8
|
+
}
|
|
9
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicXVlcnkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvY29tcGlsZXIvcXVlcnkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFNQSxvQ0FHQztBQUxELG1DQUE0QztBQUU1QyxTQUFnQixZQUFZLENBQUMsS0FBZ0I7SUFDekMsTUFBTSxDQUFDLGNBQWMsRUFBRSxNQUFNLENBQUMsR0FBRyxJQUFBLHlCQUFpQixFQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUNqRSxPQUFPLEVBQUUsTUFBTSxFQUFFLFFBQVEsRUFBRSxjQUFjLEVBQUUsQ0FBQztBQUNoRCxDQUFDIn0=
|
package/build/error.d.ts
ADDED
package/build/error.js
ADDED
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.InvalidOrUnexpectedTokens = void 0;
|
|
4
|
+
class InvalidOrUnexpectedTokens extends Error {
|
|
5
|
+
tokens;
|
|
6
|
+
constructor(message, tokens) {
|
|
7
|
+
super(message);
|
|
8
|
+
this.tokens = tokens;
|
|
9
|
+
}
|
|
10
|
+
range() {
|
|
11
|
+
const endIndex = this.tokens.length - 1;
|
|
12
|
+
const startRange = Array.isArray(this.tokens[0].position)
|
|
13
|
+
? this.tokens[0].position[0]
|
|
14
|
+
: this.tokens[0].position;
|
|
15
|
+
const endRange = Array.isArray(this.tokens[endIndex].position)
|
|
16
|
+
? this.tokens[endIndex].position[1]
|
|
17
|
+
: this.tokens[endIndex].position;
|
|
18
|
+
return [startRange, endRange + 1];
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
exports.InvalidOrUnexpectedTokens = InvalidOrUnexpectedTokens;
|
|
22
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXJyb3IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvZXJyb3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBRUEsTUFBYSx5QkFBMEIsU0FBUSxLQUFLO0lBQ3pDLE1BQU0sQ0FBZ0I7SUFFN0IsWUFBWSxPQUFlLEVBQUUsTUFBcUI7UUFDOUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ2YsSUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUM7SUFDekIsQ0FBQztJQUVNLEtBQUs7UUFDUixNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7UUFDeEMsTUFBTSxVQUFVLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQztZQUNyRCxDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDO1lBQzVCLENBQUMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQztRQUM5QixNQUFNLFFBQVEsR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMsUUFBUSxDQUFDO1lBQzFELENBQUMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7WUFDbkMsQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMsUUFBUSxDQUFDO1FBQ3JDLE9BQU8sQ0FBQyxVQUFVLEVBQUUsUUFBUSxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQ3RDLENBQUM7Q0FDSjtBQWxCRCw4REFrQkMifQ==
|
package/build/lib.d.ts
ADDED
|
File without changes
|
package/build/lib.js
ADDED
package/package.json
ADDED
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "night-query-parser",
|
|
3
|
+
"version": "0.0.1",
|
|
4
|
+
"exports": {
|
|
5
|
+
"./*": "./build/*.js"
|
|
6
|
+
},
|
|
7
|
+
"files": [
|
|
8
|
+
"build/",
|
|
9
|
+
"package.json",
|
|
10
|
+
"README.md"
|
|
11
|
+
],
|
|
12
|
+
"dependencies": {
|
|
13
|
+
"night-rest-api": "0.0.1"
|
|
14
|
+
},
|
|
15
|
+
"devDependencies": {
|
|
16
|
+
"@jest/globals": "^30.3.0",
|
|
17
|
+
"@types/lodash": "^4.17.24",
|
|
18
|
+
"jest": "^30.3.0",
|
|
19
|
+
"ts-jest": "^29.4.9",
|
|
20
|
+
"typescript": "^6.0.2"
|
|
21
|
+
},
|
|
22
|
+
"scripts": {
|
|
23
|
+
"build": "tsc",
|
|
24
|
+
"test": "jest",
|
|
25
|
+
"prepublish": "pnpm build"
|
|
26
|
+
}
|
|
27
|
+
}
|