@steedos/odata-v4-parser 2.2.53-beta.3
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/LICENSE.txt +22 -0
- package/README.md +31 -0
- package/lib/expressions.d.ts +94 -0
- package/lib/expressions.js +942 -0
- package/lib/expressions.js.map +1 -0
- package/lib/json.d.ts +24 -0
- package/lib/json.js +391 -0
- package/lib/json.js.map +1 -0
- package/lib/lexer.d.ts +243 -0
- package/lib/lexer.js +595 -0
- package/lib/lexer.js.map +1 -0
- package/lib/nameOrIdentifier.d.ts +56 -0
- package/lib/nameOrIdentifier.js +850 -0
- package/lib/nameOrIdentifier.js.map +1 -0
- package/lib/odataUri.d.ts +6 -0
- package/lib/odataUri.js +34 -0
- package/lib/odataUri.js.map +1 -0
- package/lib/parser.d.ts +16 -0
- package/lib/parser.js +50 -0
- package/lib/parser.js.map +1 -0
- package/lib/primitiveLiteral.d.ts +63 -0
- package/lib/primitiveLiteral.js +793 -0
- package/lib/primitiveLiteral.js.map +1 -0
- package/lib/query.d.ts +42 -0
- package/lib/query.js +903 -0
- package/lib/query.js.map +1 -0
- package/lib/resourcePath.d.ts +31 -0
- package/lib/resourcePath.js +469 -0
- package/lib/resourcePath.js.map +1 -0
- package/lib/utils.d.ts +8 -0
- package/lib/utils.js +37 -0
- package/lib/utils.js.map +1 -0
- package/package.json +24 -0
- package/src/expressions.ts +825 -0
- package/src/json.ts +372 -0
- package/src/lexer.ts +491 -0
- package/src/nameOrIdentifier.ts +749 -0
- package/src/odataUri.ts +37 -0
- package/src/parser.ts +37 -0
- package/src/primitiveLiteral.ts +684 -0
- package/src/query.ts +884 -0
- package/src/resourcePath.ts +461 -0
- package/src/utils.ts +36 -0
- package/tsconfig.json +33 -0
|
@@ -0,0 +1,942 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.Expressions = void 0;
|
|
4
|
+
var utils_1 = require("./utils");
|
|
5
|
+
var lexer_1 = require("./lexer");
|
|
6
|
+
var primitiveLiteral_1 = require("./primitiveLiteral");
|
|
7
|
+
var nameOrIdentifier_1 = require("./nameOrIdentifier");
|
|
8
|
+
var json_1 = require("./json");
|
|
9
|
+
var Expressions;
|
|
10
|
+
(function (Expressions) {
|
|
11
|
+
function commonExpr(value, index) {
|
|
12
|
+
var token = primitiveLiteral_1.default.primitiveLiteral(value, index) ||
|
|
13
|
+
parameterAlias(value, index) ||
|
|
14
|
+
json_1.default.arrayOrObject(value, index) ||
|
|
15
|
+
rootExpr(value, index) ||
|
|
16
|
+
methodCallExpr(value, index) ||
|
|
17
|
+
firstMemberExpr(value, index) ||
|
|
18
|
+
functionExpr(value, index) ||
|
|
19
|
+
negateExpr(value, index) ||
|
|
20
|
+
parenExpr(value, index) ||
|
|
21
|
+
castExpr(value, index);
|
|
22
|
+
if (!token)
|
|
23
|
+
return;
|
|
24
|
+
var expr = addExpr(value, token.next) ||
|
|
25
|
+
subExpr(value, token.next) ||
|
|
26
|
+
mulExpr(value, token.next) ||
|
|
27
|
+
divExpr(value, token.next) ||
|
|
28
|
+
modExpr(value, token.next);
|
|
29
|
+
if (expr) {
|
|
30
|
+
token.value = {
|
|
31
|
+
left: lexer_1.default.clone(token),
|
|
32
|
+
right: expr.value
|
|
33
|
+
};
|
|
34
|
+
token.next = expr.value.next;
|
|
35
|
+
token.type = expr.type;
|
|
36
|
+
token.raw = utils_1.default.stringify(value, token.position, token.next);
|
|
37
|
+
}
|
|
38
|
+
if (token)
|
|
39
|
+
return lexer_1.default.tokenize(value, token.position, token.next, token, lexer_1.default.TokenType.CommonExpression);
|
|
40
|
+
}
|
|
41
|
+
Expressions.commonExpr = commonExpr;
|
|
42
|
+
function boolCommonExpr(value, index) {
|
|
43
|
+
var token = isofExpr(value, index) ||
|
|
44
|
+
boolMethodCallExpr(value, index) ||
|
|
45
|
+
notExpr(value, index) ||
|
|
46
|
+
commonExpr(value, index) ||
|
|
47
|
+
boolParenExpr(value, index);
|
|
48
|
+
if (!token)
|
|
49
|
+
return;
|
|
50
|
+
var commonMoreExpr = undefined;
|
|
51
|
+
if (token.type === lexer_1.default.TokenType.CommonExpression) {
|
|
52
|
+
commonMoreExpr = eqExpr(value, token.next) ||
|
|
53
|
+
neExpr(value, token.next) ||
|
|
54
|
+
ltExpr(value, token.next) ||
|
|
55
|
+
leExpr(value, token.next) ||
|
|
56
|
+
gtExpr(value, token.next) ||
|
|
57
|
+
geExpr(value, token.next) ||
|
|
58
|
+
hasExpr(value, token.next) ||
|
|
59
|
+
inExpr(value, token.next);
|
|
60
|
+
if (commonMoreExpr) {
|
|
61
|
+
token.value = {
|
|
62
|
+
left: token.value,
|
|
63
|
+
right: commonMoreExpr.value
|
|
64
|
+
};
|
|
65
|
+
token.next = commonMoreExpr.value.next;
|
|
66
|
+
token.type = commonMoreExpr.type;
|
|
67
|
+
token.raw = utils_1.default.stringify(value, token.position, token.next);
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
var expr = andExpr(value, token.next) ||
|
|
71
|
+
orExpr(value, token.next);
|
|
72
|
+
if (expr) {
|
|
73
|
+
var left = lexer_1.default.clone(token);
|
|
74
|
+
token.next = expr.value.next;
|
|
75
|
+
token.value = {
|
|
76
|
+
left: left,
|
|
77
|
+
right: expr.value
|
|
78
|
+
};
|
|
79
|
+
token.type = expr.type;
|
|
80
|
+
token.raw = utils_1.default.stringify(value, token.position, token.next);
|
|
81
|
+
if (token.type === lexer_1.default.TokenType.AndExpression && token.value.right.type === lexer_1.default.TokenType.OrExpression) {
|
|
82
|
+
token.value.left = lexer_1.default.tokenize(value, token.value.left.position, token.value.right.value.left.next, {
|
|
83
|
+
left: token.value.left,
|
|
84
|
+
right: token.value.right.value.left
|
|
85
|
+
}, token.type);
|
|
86
|
+
token.type = token.value.right.type;
|
|
87
|
+
token.value.right = token.value.right.value.right;
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
return token;
|
|
91
|
+
}
|
|
92
|
+
Expressions.boolCommonExpr = boolCommonExpr;
|
|
93
|
+
function andExpr(value, index) {
|
|
94
|
+
var rws = lexer_1.default.RWS(value, index);
|
|
95
|
+
if (rws === index || !utils_1.default.equals(value, rws, "and"))
|
|
96
|
+
return;
|
|
97
|
+
var start = index;
|
|
98
|
+
index = rws + 3;
|
|
99
|
+
rws = lexer_1.default.RWS(value, index);
|
|
100
|
+
if (rws === index)
|
|
101
|
+
return;
|
|
102
|
+
index = rws;
|
|
103
|
+
var token = boolCommonExpr(value, index);
|
|
104
|
+
if (!token)
|
|
105
|
+
return;
|
|
106
|
+
return lexer_1.default.tokenize(value, start, index, token, lexer_1.default.TokenType.AndExpression);
|
|
107
|
+
}
|
|
108
|
+
Expressions.andExpr = andExpr;
|
|
109
|
+
function orExpr(value, index) {
|
|
110
|
+
var rws = lexer_1.default.RWS(value, index);
|
|
111
|
+
if (rws === index || !utils_1.default.equals(value, rws, "or"))
|
|
112
|
+
return;
|
|
113
|
+
var start = index;
|
|
114
|
+
index = rws + 2;
|
|
115
|
+
rws = lexer_1.default.RWS(value, index);
|
|
116
|
+
if (rws === index)
|
|
117
|
+
return;
|
|
118
|
+
index = rws;
|
|
119
|
+
var token = boolCommonExpr(value, index);
|
|
120
|
+
if (!token)
|
|
121
|
+
return;
|
|
122
|
+
return lexer_1.default.tokenize(value, start, index, token, lexer_1.default.TokenType.OrExpression);
|
|
123
|
+
}
|
|
124
|
+
Expressions.orExpr = orExpr;
|
|
125
|
+
function leftRightExpr(value, index, expr, tokenType) {
|
|
126
|
+
var rws = lexer_1.default.RWS(value, index);
|
|
127
|
+
if (rws === index)
|
|
128
|
+
return;
|
|
129
|
+
var start = index;
|
|
130
|
+
index = rws;
|
|
131
|
+
if (!utils_1.default.equals(value, index, expr))
|
|
132
|
+
return;
|
|
133
|
+
index += expr.length;
|
|
134
|
+
rws = lexer_1.default.RWS(value, index);
|
|
135
|
+
if (rws === index)
|
|
136
|
+
return;
|
|
137
|
+
index = rws;
|
|
138
|
+
var token = commonExpr(value, index);
|
|
139
|
+
if (!token)
|
|
140
|
+
return;
|
|
141
|
+
return lexer_1.default.tokenize(value, start, index, token.value, tokenType);
|
|
142
|
+
}
|
|
143
|
+
Expressions.leftRightExpr = leftRightExpr;
|
|
144
|
+
function eqExpr(value, index) { return leftRightExpr(value, index, "eq", lexer_1.default.TokenType.EqualsExpression); }
|
|
145
|
+
Expressions.eqExpr = eqExpr;
|
|
146
|
+
function neExpr(value, index) { return leftRightExpr(value, index, "ne", lexer_1.default.TokenType.NotEqualsExpression); }
|
|
147
|
+
Expressions.neExpr = neExpr;
|
|
148
|
+
function ltExpr(value, index) { return leftRightExpr(value, index, "lt", lexer_1.default.TokenType.LesserThanExpression); }
|
|
149
|
+
Expressions.ltExpr = ltExpr;
|
|
150
|
+
function leExpr(value, index) { return leftRightExpr(value, index, "le", lexer_1.default.TokenType.LesserOrEqualsExpression); }
|
|
151
|
+
Expressions.leExpr = leExpr;
|
|
152
|
+
function gtExpr(value, index) { return leftRightExpr(value, index, "gt", lexer_1.default.TokenType.GreaterThanExpression); }
|
|
153
|
+
Expressions.gtExpr = gtExpr;
|
|
154
|
+
function geExpr(value, index) { return leftRightExpr(value, index, "ge", lexer_1.default.TokenType.GreaterOrEqualsExpression); }
|
|
155
|
+
Expressions.geExpr = geExpr;
|
|
156
|
+
function hasExpr(value, index) { return leftRightExpr(value, index, "has", lexer_1.default.TokenType.HasExpression); }
|
|
157
|
+
Expressions.hasExpr = hasExpr;
|
|
158
|
+
function addExpr(value, index) { return leftRightExpr(value, index, "add", lexer_1.default.TokenType.AddExpression); }
|
|
159
|
+
Expressions.addExpr = addExpr;
|
|
160
|
+
function subExpr(value, index) { return leftRightExpr(value, index, "sub", lexer_1.default.TokenType.SubExpression); }
|
|
161
|
+
Expressions.subExpr = subExpr;
|
|
162
|
+
function mulExpr(value, index) { return leftRightExpr(value, index, "mul", lexer_1.default.TokenType.MulExpression); }
|
|
163
|
+
Expressions.mulExpr = mulExpr;
|
|
164
|
+
function divExpr(value, index) { return leftRightExpr(value, index, "div", lexer_1.default.TokenType.DivExpression); }
|
|
165
|
+
Expressions.divExpr = divExpr;
|
|
166
|
+
function modExpr(value, index) { return leftRightExpr(value, index, "mod", lexer_1.default.TokenType.ModExpression); }
|
|
167
|
+
Expressions.modExpr = modExpr;
|
|
168
|
+
function inExpr(value, index) {
|
|
169
|
+
// return leftRightExpr(value, index, "in", Lexer.TokenType.InExpression);
|
|
170
|
+
var expr = 'in';
|
|
171
|
+
var tokenType = lexer_1.default.TokenType.InExpression;
|
|
172
|
+
var rws = lexer_1.default.RWS(value, index);
|
|
173
|
+
if (rws === index)
|
|
174
|
+
return;
|
|
175
|
+
var start = index;
|
|
176
|
+
index = rws;
|
|
177
|
+
if (!utils_1.default.equals(value, index, expr))
|
|
178
|
+
return;
|
|
179
|
+
index += expr.length;
|
|
180
|
+
rws = lexer_1.default.RWS(value, index);
|
|
181
|
+
if (rws === index)
|
|
182
|
+
return;
|
|
183
|
+
index = rws;
|
|
184
|
+
var token = boolCommonExpr(value, index);
|
|
185
|
+
if (!token)
|
|
186
|
+
return;
|
|
187
|
+
return lexer_1.default.tokenize(value, start, index, token.value, tokenType);
|
|
188
|
+
}
|
|
189
|
+
Expressions.inExpr = inExpr;
|
|
190
|
+
function notExpr(value, index) {
|
|
191
|
+
if (!utils_1.default.equals(value, index, "not"))
|
|
192
|
+
return;
|
|
193
|
+
var start = index;
|
|
194
|
+
index += 3;
|
|
195
|
+
var rws = lexer_1.default.RWS(value, index);
|
|
196
|
+
if (rws === index)
|
|
197
|
+
return;
|
|
198
|
+
index = rws;
|
|
199
|
+
var token = boolCommonExpr(value, index);
|
|
200
|
+
if (!token)
|
|
201
|
+
return;
|
|
202
|
+
return lexer_1.default.tokenize(value, start, token.next, token, lexer_1.default.TokenType.NotExpression);
|
|
203
|
+
}
|
|
204
|
+
Expressions.notExpr = notExpr;
|
|
205
|
+
function boolParenExpr(value, index) {
|
|
206
|
+
var open = lexer_1.default.OPEN(value, index);
|
|
207
|
+
if (!open)
|
|
208
|
+
return;
|
|
209
|
+
var start = index;
|
|
210
|
+
index = open;
|
|
211
|
+
index = lexer_1.default.BWS(value, index);
|
|
212
|
+
var token = boolCommonExpr(value, index);
|
|
213
|
+
if (!token)
|
|
214
|
+
return;
|
|
215
|
+
index = lexer_1.default.BWS(value, token.next);
|
|
216
|
+
var close = lexer_1.default.CLOSE(value, index);
|
|
217
|
+
if (!close)
|
|
218
|
+
return;
|
|
219
|
+
index = close;
|
|
220
|
+
return lexer_1.default.tokenize(value, start, index, token, lexer_1.default.TokenType.BoolParenExpression);
|
|
221
|
+
}
|
|
222
|
+
Expressions.boolParenExpr = boolParenExpr;
|
|
223
|
+
function parenExpr(value, index) {
|
|
224
|
+
var open = lexer_1.default.OPEN(value, index);
|
|
225
|
+
if (!open)
|
|
226
|
+
return;
|
|
227
|
+
var start = index;
|
|
228
|
+
index = open;
|
|
229
|
+
index = lexer_1.default.BWS(value, index);
|
|
230
|
+
var token = commonExpr(value, index);
|
|
231
|
+
if (!token)
|
|
232
|
+
return;
|
|
233
|
+
index = lexer_1.default.BWS(value, token.next);
|
|
234
|
+
var close = lexer_1.default.CLOSE(value, index);
|
|
235
|
+
if (!close)
|
|
236
|
+
return;
|
|
237
|
+
index = close;
|
|
238
|
+
return lexer_1.default.tokenize(value, start, index, token.value, lexer_1.default.TokenType.ParenExpression);
|
|
239
|
+
}
|
|
240
|
+
Expressions.parenExpr = parenExpr;
|
|
241
|
+
function boolMethodCallExpr(value, index) {
|
|
242
|
+
return endsWithMethodCallExpr(value, index) ||
|
|
243
|
+
startsWithMethodCallExpr(value, index) ||
|
|
244
|
+
containsMethodCallExpr(value, index) ||
|
|
245
|
+
intersectsMethodCallExpr(value, index);
|
|
246
|
+
}
|
|
247
|
+
Expressions.boolMethodCallExpr = boolMethodCallExpr;
|
|
248
|
+
function methodCallExpr(value, index) {
|
|
249
|
+
return indexOfMethodCallExpr(value, index) ||
|
|
250
|
+
toLowerMethodCallExpr(value, index) ||
|
|
251
|
+
toUpperMethodCallExpr(value, index) ||
|
|
252
|
+
trimMethodCallExpr(value, index) ||
|
|
253
|
+
substringMethodCallExpr(value, index) ||
|
|
254
|
+
substringOfMethodCallExpr(value, index) ||
|
|
255
|
+
concatMethodCallExpr(value, index) ||
|
|
256
|
+
lengthMethodCallExpr(value, index) ||
|
|
257
|
+
yearMethodCallExpr(value, index) ||
|
|
258
|
+
monthMethodCallExpr(value, index) ||
|
|
259
|
+
dayMethodCallExpr(value, index) ||
|
|
260
|
+
hourMethodCallExpr(value, index) ||
|
|
261
|
+
minuteMethodCallExpr(value, index) ||
|
|
262
|
+
secondMethodCallExpr(value, index) ||
|
|
263
|
+
fractionalsecondsMethodCallExpr(value, index) ||
|
|
264
|
+
totalsecondsMethodCallExpr(value, index) ||
|
|
265
|
+
dateMethodCallExpr(value, index) ||
|
|
266
|
+
timeMethodCallExpr(value, index) ||
|
|
267
|
+
roundMethodCallExpr(value, index) ||
|
|
268
|
+
floorMethodCallExpr(value, index) ||
|
|
269
|
+
ceilingMethodCallExpr(value, index) ||
|
|
270
|
+
distanceMethodCallExpr(value, index) ||
|
|
271
|
+
geoLengthMethodCallExpr(value, index) ||
|
|
272
|
+
totalOffsetMinutesMethodCallExpr(value, index) ||
|
|
273
|
+
minDateTimeMethodCallExpr(value, index) ||
|
|
274
|
+
maxDateTimeMethodCallExpr(value, index) ||
|
|
275
|
+
nowMethodCallExpr(value, index);
|
|
276
|
+
}
|
|
277
|
+
Expressions.methodCallExpr = methodCallExpr;
|
|
278
|
+
function methodCallExprFactory(value, index, method, min, max) {
|
|
279
|
+
if (typeof min === "undefined")
|
|
280
|
+
min = 0;
|
|
281
|
+
if (typeof max === "undefined")
|
|
282
|
+
max = min;
|
|
283
|
+
if (!utils_1.default.equals(value, index, method))
|
|
284
|
+
return;
|
|
285
|
+
var start = index;
|
|
286
|
+
index += method.length;
|
|
287
|
+
var open = lexer_1.default.OPEN(value, index);
|
|
288
|
+
if (!open)
|
|
289
|
+
return;
|
|
290
|
+
index = open;
|
|
291
|
+
index = lexer_1.default.BWS(value, index);
|
|
292
|
+
var parameters;
|
|
293
|
+
if (min > 0) {
|
|
294
|
+
parameters = [];
|
|
295
|
+
while (parameters.length < max) {
|
|
296
|
+
var expr = commonExpr(value, index);
|
|
297
|
+
if (parameters.length < min && !expr)
|
|
298
|
+
return;
|
|
299
|
+
else if (expr) {
|
|
300
|
+
parameters.push(expr.value);
|
|
301
|
+
index = expr.next;
|
|
302
|
+
index = lexer_1.default.BWS(value, index);
|
|
303
|
+
var comma = lexer_1.default.COMMA(value, index);
|
|
304
|
+
if (parameters.length < min && !comma)
|
|
305
|
+
return;
|
|
306
|
+
if (comma)
|
|
307
|
+
index = comma;
|
|
308
|
+
else
|
|
309
|
+
break;
|
|
310
|
+
index = lexer_1.default.BWS(value, index);
|
|
311
|
+
}
|
|
312
|
+
else
|
|
313
|
+
break;
|
|
314
|
+
}
|
|
315
|
+
}
|
|
316
|
+
index = lexer_1.default.BWS(value, index);
|
|
317
|
+
var close = lexer_1.default.CLOSE(value, index);
|
|
318
|
+
if (!close)
|
|
319
|
+
return;
|
|
320
|
+
index = close;
|
|
321
|
+
return lexer_1.default.tokenize(value, start, index, {
|
|
322
|
+
method: method,
|
|
323
|
+
parameters: parameters
|
|
324
|
+
}, lexer_1.default.TokenType.MethodCallExpression);
|
|
325
|
+
}
|
|
326
|
+
Expressions.methodCallExprFactory = methodCallExprFactory;
|
|
327
|
+
function containsMethodCallExpr(value, index) { return methodCallExprFactory(value, index, "contains", 2); }
|
|
328
|
+
Expressions.containsMethodCallExpr = containsMethodCallExpr;
|
|
329
|
+
function startsWithMethodCallExpr(value, index) { return methodCallExprFactory(value, index, "startswith", 2); }
|
|
330
|
+
Expressions.startsWithMethodCallExpr = startsWithMethodCallExpr;
|
|
331
|
+
function endsWithMethodCallExpr(value, index) { return methodCallExprFactory(value, index, "endswith", 2); }
|
|
332
|
+
Expressions.endsWithMethodCallExpr = endsWithMethodCallExpr;
|
|
333
|
+
function lengthMethodCallExpr(value, index) { return methodCallExprFactory(value, index, "length", 1); }
|
|
334
|
+
Expressions.lengthMethodCallExpr = lengthMethodCallExpr;
|
|
335
|
+
function indexOfMethodCallExpr(value, index) { return methodCallExprFactory(value, index, "indexof", 2); }
|
|
336
|
+
Expressions.indexOfMethodCallExpr = indexOfMethodCallExpr;
|
|
337
|
+
function substringMethodCallExpr(value, index) { return methodCallExprFactory(value, index, "substring", 2, 3); }
|
|
338
|
+
Expressions.substringMethodCallExpr = substringMethodCallExpr;
|
|
339
|
+
function substringOfMethodCallExpr(value, index) { return methodCallExprFactory(value, index, "substringof", 2); }
|
|
340
|
+
Expressions.substringOfMethodCallExpr = substringOfMethodCallExpr;
|
|
341
|
+
function toLowerMethodCallExpr(value, index) { return methodCallExprFactory(value, index, "tolower", 1); }
|
|
342
|
+
Expressions.toLowerMethodCallExpr = toLowerMethodCallExpr;
|
|
343
|
+
function toUpperMethodCallExpr(value, index) { return methodCallExprFactory(value, index, "toupper", 1); }
|
|
344
|
+
Expressions.toUpperMethodCallExpr = toUpperMethodCallExpr;
|
|
345
|
+
function trimMethodCallExpr(value, index) { return methodCallExprFactory(value, index, "trim", 1); }
|
|
346
|
+
Expressions.trimMethodCallExpr = trimMethodCallExpr;
|
|
347
|
+
function concatMethodCallExpr(value, index) { return methodCallExprFactory(value, index, "concat", 2); }
|
|
348
|
+
Expressions.concatMethodCallExpr = concatMethodCallExpr;
|
|
349
|
+
function yearMethodCallExpr(value, index) { return methodCallExprFactory(value, index, "year", 1); }
|
|
350
|
+
Expressions.yearMethodCallExpr = yearMethodCallExpr;
|
|
351
|
+
function monthMethodCallExpr(value, index) { return methodCallExprFactory(value, index, "month", 1); }
|
|
352
|
+
Expressions.monthMethodCallExpr = monthMethodCallExpr;
|
|
353
|
+
function dayMethodCallExpr(value, index) { return methodCallExprFactory(value, index, "day", 1); }
|
|
354
|
+
Expressions.dayMethodCallExpr = dayMethodCallExpr;
|
|
355
|
+
function hourMethodCallExpr(value, index) { return methodCallExprFactory(value, index, "hour", 1); }
|
|
356
|
+
Expressions.hourMethodCallExpr = hourMethodCallExpr;
|
|
357
|
+
function minuteMethodCallExpr(value, index) { return methodCallExprFactory(value, index, "minute", 1); }
|
|
358
|
+
Expressions.minuteMethodCallExpr = minuteMethodCallExpr;
|
|
359
|
+
function secondMethodCallExpr(value, index) { return methodCallExprFactory(value, index, "second", 1); }
|
|
360
|
+
Expressions.secondMethodCallExpr = secondMethodCallExpr;
|
|
361
|
+
function fractionalsecondsMethodCallExpr(value, index) { return methodCallExprFactory(value, index, "fractionalseconds", 1); }
|
|
362
|
+
Expressions.fractionalsecondsMethodCallExpr = fractionalsecondsMethodCallExpr;
|
|
363
|
+
function totalsecondsMethodCallExpr(value, index) { return methodCallExprFactory(value, index, "totalseconds", 1); }
|
|
364
|
+
Expressions.totalsecondsMethodCallExpr = totalsecondsMethodCallExpr;
|
|
365
|
+
function dateMethodCallExpr(value, index) { return methodCallExprFactory(value, index, "date", 1); }
|
|
366
|
+
Expressions.dateMethodCallExpr = dateMethodCallExpr;
|
|
367
|
+
function timeMethodCallExpr(value, index) { return methodCallExprFactory(value, index, "time", 1); }
|
|
368
|
+
Expressions.timeMethodCallExpr = timeMethodCallExpr;
|
|
369
|
+
function totalOffsetMinutesMethodCallExpr(value, index) { return methodCallExprFactory(value, index, "totaloffsetminutes", 1); }
|
|
370
|
+
Expressions.totalOffsetMinutesMethodCallExpr = totalOffsetMinutesMethodCallExpr;
|
|
371
|
+
function minDateTimeMethodCallExpr(value, index) { return methodCallExprFactory(value, index, "mindatetime", 0); }
|
|
372
|
+
Expressions.minDateTimeMethodCallExpr = minDateTimeMethodCallExpr;
|
|
373
|
+
function maxDateTimeMethodCallExpr(value, index) { return methodCallExprFactory(value, index, "maxdatetime", 0); }
|
|
374
|
+
Expressions.maxDateTimeMethodCallExpr = maxDateTimeMethodCallExpr;
|
|
375
|
+
function nowMethodCallExpr(value, index) { return methodCallExprFactory(value, index, "now", 0); }
|
|
376
|
+
Expressions.nowMethodCallExpr = nowMethodCallExpr;
|
|
377
|
+
function roundMethodCallExpr(value, index) { return methodCallExprFactory(value, index, "round", 1); }
|
|
378
|
+
Expressions.roundMethodCallExpr = roundMethodCallExpr;
|
|
379
|
+
function floorMethodCallExpr(value, index) { return methodCallExprFactory(value, index, "floor", 1); }
|
|
380
|
+
Expressions.floorMethodCallExpr = floorMethodCallExpr;
|
|
381
|
+
function ceilingMethodCallExpr(value, index) { return methodCallExprFactory(value, index, "ceiling", 1); }
|
|
382
|
+
Expressions.ceilingMethodCallExpr = ceilingMethodCallExpr;
|
|
383
|
+
function distanceMethodCallExpr(value, index) { return methodCallExprFactory(value, index, "geo.distance", 2); }
|
|
384
|
+
Expressions.distanceMethodCallExpr = distanceMethodCallExpr;
|
|
385
|
+
function geoLengthMethodCallExpr(value, index) { return methodCallExprFactory(value, index, "geo.length", 1); }
|
|
386
|
+
Expressions.geoLengthMethodCallExpr = geoLengthMethodCallExpr;
|
|
387
|
+
function intersectsMethodCallExpr(value, index) { return methodCallExprFactory(value, index, "geo.intersects", 2); }
|
|
388
|
+
Expressions.intersectsMethodCallExpr = intersectsMethodCallExpr;
|
|
389
|
+
function isofExpr(value, index) {
|
|
390
|
+
if (!utils_1.default.equals(value, index, "isof"))
|
|
391
|
+
return;
|
|
392
|
+
var start = index;
|
|
393
|
+
index += 4;
|
|
394
|
+
var open = lexer_1.default.OPEN(value, index);
|
|
395
|
+
if (!open)
|
|
396
|
+
return;
|
|
397
|
+
index = open;
|
|
398
|
+
index = lexer_1.default.BWS(value, index);
|
|
399
|
+
var expr = commonExpr(value, index);
|
|
400
|
+
if (expr) {
|
|
401
|
+
index = expr.next;
|
|
402
|
+
index = lexer_1.default.BWS(value, index);
|
|
403
|
+
var comma = lexer_1.default.COMMA(value, index);
|
|
404
|
+
if (!comma)
|
|
405
|
+
return;
|
|
406
|
+
index = comma;
|
|
407
|
+
index = lexer_1.default.BWS(value, index);
|
|
408
|
+
}
|
|
409
|
+
var typeName = nameOrIdentifier_1.default.qualifiedTypeName(value, index);
|
|
410
|
+
if (!typeName)
|
|
411
|
+
return;
|
|
412
|
+
index = typeName.next;
|
|
413
|
+
index = lexer_1.default.BWS(value, index);
|
|
414
|
+
var close = lexer_1.default.CLOSE(value, index);
|
|
415
|
+
if (!close)
|
|
416
|
+
return;
|
|
417
|
+
index = close;
|
|
418
|
+
return lexer_1.default.tokenize(value, start, index, {
|
|
419
|
+
target: expr,
|
|
420
|
+
typename: typeName
|
|
421
|
+
}, lexer_1.default.TokenType.IsOfExpression);
|
|
422
|
+
}
|
|
423
|
+
Expressions.isofExpr = isofExpr;
|
|
424
|
+
function castExpr(value, index) {
|
|
425
|
+
if (!utils_1.default.equals(value, index, "cast"))
|
|
426
|
+
return;
|
|
427
|
+
var start = index;
|
|
428
|
+
index += 4;
|
|
429
|
+
var open = lexer_1.default.OPEN(value, index);
|
|
430
|
+
if (!open)
|
|
431
|
+
return;
|
|
432
|
+
index = open;
|
|
433
|
+
index = lexer_1.default.BWS(value, index);
|
|
434
|
+
var expr = commonExpr(value, index);
|
|
435
|
+
if (expr) {
|
|
436
|
+
index = expr.next;
|
|
437
|
+
index = lexer_1.default.BWS(value, index);
|
|
438
|
+
var comma = lexer_1.default.COMMA(value, index);
|
|
439
|
+
if (!comma)
|
|
440
|
+
return;
|
|
441
|
+
index = comma;
|
|
442
|
+
index = lexer_1.default.BWS(value, index);
|
|
443
|
+
}
|
|
444
|
+
var typeName = nameOrIdentifier_1.default.qualifiedTypeName(value, index);
|
|
445
|
+
if (!typeName)
|
|
446
|
+
return;
|
|
447
|
+
index = typeName.next;
|
|
448
|
+
index = lexer_1.default.BWS(value, index);
|
|
449
|
+
var close = lexer_1.default.CLOSE(value, index);
|
|
450
|
+
if (!close)
|
|
451
|
+
return;
|
|
452
|
+
index = close;
|
|
453
|
+
return lexer_1.default.tokenize(value, start, index, {
|
|
454
|
+
target: expr,
|
|
455
|
+
typename: typeName
|
|
456
|
+
}, lexer_1.default.TokenType.CastExpression);
|
|
457
|
+
}
|
|
458
|
+
Expressions.castExpr = castExpr;
|
|
459
|
+
function negateExpr(value, index) {
|
|
460
|
+
if (value[index] !== 0x2d)
|
|
461
|
+
return;
|
|
462
|
+
var start = index;
|
|
463
|
+
index++;
|
|
464
|
+
index = lexer_1.default.BWS(value, index);
|
|
465
|
+
var expr = commonExpr(value, index);
|
|
466
|
+
if (!expr)
|
|
467
|
+
return;
|
|
468
|
+
return lexer_1.default.tokenize(value, start, expr.next, expr, lexer_1.default.TokenType.NegateExpression);
|
|
469
|
+
}
|
|
470
|
+
Expressions.negateExpr = negateExpr;
|
|
471
|
+
function firstMemberExpr(value, index) {
|
|
472
|
+
var token = inscopeVariableExpr(value, index);
|
|
473
|
+
var member;
|
|
474
|
+
var start = index;
|
|
475
|
+
if (token) {
|
|
476
|
+
if (value[token.next] === 0x2f) {
|
|
477
|
+
index = token.next + 1;
|
|
478
|
+
member = memberExpr(value, index);
|
|
479
|
+
if (!member)
|
|
480
|
+
return;
|
|
481
|
+
return lexer_1.default.tokenize(value, start, member.next, [token, member], lexer_1.default.TokenType.FirstMemberExpression);
|
|
482
|
+
}
|
|
483
|
+
}
|
|
484
|
+
else
|
|
485
|
+
member = memberExpr(value, index);
|
|
486
|
+
token = token || member;
|
|
487
|
+
if (!token)
|
|
488
|
+
return;
|
|
489
|
+
return lexer_1.default.tokenize(value, start, token.next, token, lexer_1.default.TokenType.FirstMemberExpression);
|
|
490
|
+
}
|
|
491
|
+
Expressions.firstMemberExpr = firstMemberExpr;
|
|
492
|
+
function memberExpr(value, index) {
|
|
493
|
+
var start = index;
|
|
494
|
+
var token = nameOrIdentifier_1.default.qualifiedEntityTypeName(value, index);
|
|
495
|
+
if (token) {
|
|
496
|
+
if (value[token.next] !== 0x2f)
|
|
497
|
+
return;
|
|
498
|
+
index = token.next + 1;
|
|
499
|
+
}
|
|
500
|
+
var next = propertyPathExpr(value, index) ||
|
|
501
|
+
boundFunctionExpr(value, index);
|
|
502
|
+
if (!next)
|
|
503
|
+
return;
|
|
504
|
+
return lexer_1.default.tokenize(value, start, next.next, token ? { name: token, value: next } : next, lexer_1.default.TokenType.MemberExpression);
|
|
505
|
+
}
|
|
506
|
+
Expressions.memberExpr = memberExpr;
|
|
507
|
+
function propertyPathExpr(value, index) {
|
|
508
|
+
var token = nameOrIdentifier_1.default.odataIdentifier(value, index);
|
|
509
|
+
var start = index;
|
|
510
|
+
if (token) {
|
|
511
|
+
index = token.next;
|
|
512
|
+
var nav = collectionPathExpr(value, token.next) ||
|
|
513
|
+
collectionNavigationExpr(value, token.next) ||
|
|
514
|
+
singleNavigationExpr(value, token.next) ||
|
|
515
|
+
complexPathExpr(value, token.next) ||
|
|
516
|
+
singlePathExpr(value, token.next);
|
|
517
|
+
if (nav) {
|
|
518
|
+
index = nav.next;
|
|
519
|
+
token = {
|
|
520
|
+
current: lexer_1.default.clone(token),
|
|
521
|
+
next: nav
|
|
522
|
+
};
|
|
523
|
+
}
|
|
524
|
+
}
|
|
525
|
+
else if (!token) {
|
|
526
|
+
token = nameOrIdentifier_1.default.streamProperty(value, index);
|
|
527
|
+
if (token)
|
|
528
|
+
index = token.next;
|
|
529
|
+
}
|
|
530
|
+
if (!token)
|
|
531
|
+
return;
|
|
532
|
+
return lexer_1.default.tokenize(value, start, index, token, lexer_1.default.TokenType.PropertyPathExpression);
|
|
533
|
+
}
|
|
534
|
+
Expressions.propertyPathExpr = propertyPathExpr;
|
|
535
|
+
function inscopeVariableExpr(value, index) {
|
|
536
|
+
return implicitVariableExpr(value, index) ||
|
|
537
|
+
(isLambdaPredicate ? lambdaVariableExpr(value, index) : undefined);
|
|
538
|
+
}
|
|
539
|
+
Expressions.inscopeVariableExpr = inscopeVariableExpr;
|
|
540
|
+
function implicitVariableExpr(value, index) {
|
|
541
|
+
if (utils_1.default.equals(value, index, "$it"))
|
|
542
|
+
return lexer_1.default.tokenize(value, index, index + 3, "$it", lexer_1.default.TokenType.ImplicitVariableExpression);
|
|
543
|
+
}
|
|
544
|
+
Expressions.implicitVariableExpr = implicitVariableExpr;
|
|
545
|
+
var isLambdaPredicate = false;
|
|
546
|
+
var hasLambdaVariableExpr = false;
|
|
547
|
+
function lambdaVariableExpr(value, index) {
|
|
548
|
+
var token = nameOrIdentifier_1.default.odataIdentifier(value, index, lexer_1.default.TokenType.LambdaVariableExpression);
|
|
549
|
+
if (token) {
|
|
550
|
+
hasLambdaVariableExpr = true;
|
|
551
|
+
return token;
|
|
552
|
+
}
|
|
553
|
+
}
|
|
554
|
+
Expressions.lambdaVariableExpr = lambdaVariableExpr;
|
|
555
|
+
function lambdaPredicateExpr(value, index) {
|
|
556
|
+
isLambdaPredicate = true;
|
|
557
|
+
var token = boolCommonExpr(value, index);
|
|
558
|
+
isLambdaPredicate = false;
|
|
559
|
+
if (token && hasLambdaVariableExpr) {
|
|
560
|
+
hasLambdaVariableExpr = false;
|
|
561
|
+
return lexer_1.default.tokenize(value, token.position, token.next, token, lexer_1.default.TokenType.LambdaPredicateExpression);
|
|
562
|
+
}
|
|
563
|
+
}
|
|
564
|
+
Expressions.lambdaPredicateExpr = lambdaPredicateExpr;
|
|
565
|
+
function anyExpr(value, index) {
|
|
566
|
+
if (!utils_1.default.equals(value, index, "any"))
|
|
567
|
+
return;
|
|
568
|
+
var start = index;
|
|
569
|
+
index += 3;
|
|
570
|
+
var open = lexer_1.default.OPEN(value, index);
|
|
571
|
+
if (!open)
|
|
572
|
+
return;
|
|
573
|
+
index = open;
|
|
574
|
+
index = lexer_1.default.BWS(value, index);
|
|
575
|
+
var variable = lambdaVariableExpr(value, index);
|
|
576
|
+
var predicate;
|
|
577
|
+
if (variable) {
|
|
578
|
+
index = variable.next;
|
|
579
|
+
index = lexer_1.default.BWS(value, index);
|
|
580
|
+
var colon = lexer_1.default.COLON(value, index);
|
|
581
|
+
if (!colon)
|
|
582
|
+
return;
|
|
583
|
+
index = colon;
|
|
584
|
+
index = lexer_1.default.BWS(value, index);
|
|
585
|
+
predicate = lambdaPredicateExpr(value, index);
|
|
586
|
+
if (!predicate)
|
|
587
|
+
return;
|
|
588
|
+
index = predicate.next;
|
|
589
|
+
}
|
|
590
|
+
index = lexer_1.default.BWS(value, index);
|
|
591
|
+
var close = lexer_1.default.CLOSE(value, index);
|
|
592
|
+
if (!close)
|
|
593
|
+
return;
|
|
594
|
+
index = close;
|
|
595
|
+
return lexer_1.default.tokenize(value, start, index, {
|
|
596
|
+
variable: variable,
|
|
597
|
+
predicate: predicate
|
|
598
|
+
}, lexer_1.default.TokenType.AnyExpression);
|
|
599
|
+
}
|
|
600
|
+
Expressions.anyExpr = anyExpr;
|
|
601
|
+
function allExpr(value, index) {
|
|
602
|
+
if (!utils_1.default.equals(value, index, "all"))
|
|
603
|
+
return;
|
|
604
|
+
var start = index;
|
|
605
|
+
index += 3;
|
|
606
|
+
var open = lexer_1.default.OPEN(value, index);
|
|
607
|
+
if (!open)
|
|
608
|
+
return;
|
|
609
|
+
index = open;
|
|
610
|
+
index = lexer_1.default.BWS(value, index);
|
|
611
|
+
var variable = lambdaVariableExpr(value, index);
|
|
612
|
+
if (!variable)
|
|
613
|
+
return;
|
|
614
|
+
index = variable.next;
|
|
615
|
+
index = lexer_1.default.BWS(value, index);
|
|
616
|
+
var colon = lexer_1.default.COLON(value, index);
|
|
617
|
+
if (!colon)
|
|
618
|
+
return;
|
|
619
|
+
index = colon;
|
|
620
|
+
index = lexer_1.default.BWS(value, index);
|
|
621
|
+
var predicate = lambdaPredicateExpr(value, index);
|
|
622
|
+
if (!predicate)
|
|
623
|
+
return;
|
|
624
|
+
index = predicate.next;
|
|
625
|
+
index = lexer_1.default.BWS(value, index);
|
|
626
|
+
var close = lexer_1.default.CLOSE(value, index);
|
|
627
|
+
if (!close)
|
|
628
|
+
return;
|
|
629
|
+
index = close;
|
|
630
|
+
return lexer_1.default.tokenize(value, start, index, {
|
|
631
|
+
variable: variable,
|
|
632
|
+
predicate: predicate
|
|
633
|
+
}, lexer_1.default.TokenType.AllExpression);
|
|
634
|
+
}
|
|
635
|
+
Expressions.allExpr = allExpr;
|
|
636
|
+
function collectionNavigationExpr(value, index) {
|
|
637
|
+
var start = index;
|
|
638
|
+
var entity, predicate, navigation, path;
|
|
639
|
+
if (value[index] === 0x2f) {
|
|
640
|
+
index++;
|
|
641
|
+
entity = nameOrIdentifier_1.default.qualifiedEntityTypeName(value, index);
|
|
642
|
+
if (!entity)
|
|
643
|
+
return;
|
|
644
|
+
index = entity.next;
|
|
645
|
+
}
|
|
646
|
+
predicate = keyPredicate(value, index);
|
|
647
|
+
if (predicate) {
|
|
648
|
+
index = predicate.next;
|
|
649
|
+
navigation = singleNavigationExpr(value, index);
|
|
650
|
+
if (navigation)
|
|
651
|
+
index = navigation.next;
|
|
652
|
+
}
|
|
653
|
+
else {
|
|
654
|
+
path = collectionPathExpr(value, index);
|
|
655
|
+
if (path)
|
|
656
|
+
index = path.next;
|
|
657
|
+
}
|
|
658
|
+
if (index > start) {
|
|
659
|
+
return lexer_1.default.tokenize(value, start, index, {
|
|
660
|
+
entity: entity,
|
|
661
|
+
predicate: predicate,
|
|
662
|
+
navigation: navigation,
|
|
663
|
+
path: path
|
|
664
|
+
}, lexer_1.default.TokenType.CollectionNavigationExpression);
|
|
665
|
+
}
|
|
666
|
+
}
|
|
667
|
+
Expressions.collectionNavigationExpr = collectionNavigationExpr;
|
|
668
|
+
function keyPredicate(value, index, metadataContext) {
|
|
669
|
+
return simpleKey(value, index, metadataContext) ||
|
|
670
|
+
compoundKey(value, index);
|
|
671
|
+
}
|
|
672
|
+
Expressions.keyPredicate = keyPredicate;
|
|
673
|
+
function simpleKey(value, index, metadataContext) {
|
|
674
|
+
var open = lexer_1.default.OPEN(value, index);
|
|
675
|
+
if (!open)
|
|
676
|
+
return;
|
|
677
|
+
var start = index;
|
|
678
|
+
index = open;
|
|
679
|
+
var token = keyPropertyValue(value, index);
|
|
680
|
+
if (!token)
|
|
681
|
+
return;
|
|
682
|
+
var close = lexer_1.default.CLOSE(value, token.next);
|
|
683
|
+
if (!close)
|
|
684
|
+
return;
|
|
685
|
+
var key;
|
|
686
|
+
if (typeof metadataContext === "object" &&
|
|
687
|
+
metadataContext.key &&
|
|
688
|
+
metadataContext.key.propertyRefs &&
|
|
689
|
+
metadataContext.key.propertyRefs[0] &&
|
|
690
|
+
metadataContext.key.propertyRefs[0].name) {
|
|
691
|
+
key = metadataContext.key.propertyRefs[0].name;
|
|
692
|
+
}
|
|
693
|
+
return lexer_1.default.tokenize(value, start, close, { key: key, value: token }, lexer_1.default.TokenType.SimpleKey);
|
|
694
|
+
}
|
|
695
|
+
Expressions.simpleKey = simpleKey;
|
|
696
|
+
function compoundKey(value, index) {
|
|
697
|
+
var open = lexer_1.default.OPEN(value, index);
|
|
698
|
+
if (!open)
|
|
699
|
+
return;
|
|
700
|
+
var start = index;
|
|
701
|
+
index = open;
|
|
702
|
+
var pair = keyValuePair(value, index);
|
|
703
|
+
if (!pair)
|
|
704
|
+
return;
|
|
705
|
+
var keys = [];
|
|
706
|
+
while (pair) {
|
|
707
|
+
keys.push(pair);
|
|
708
|
+
var comma = lexer_1.default.COMMA(value, pair.next);
|
|
709
|
+
if (comma)
|
|
710
|
+
pair = keyValuePair(value, comma);
|
|
711
|
+
else
|
|
712
|
+
pair = null;
|
|
713
|
+
}
|
|
714
|
+
index = keys[keys.length - 1].next;
|
|
715
|
+
var close = lexer_1.default.CLOSE(value, index);
|
|
716
|
+
if (!close)
|
|
717
|
+
return;
|
|
718
|
+
index = close;
|
|
719
|
+
return lexer_1.default.tokenize(value, start, index, keys, lexer_1.default.TokenType.CompoundKey);
|
|
720
|
+
}
|
|
721
|
+
Expressions.compoundKey = compoundKey;
|
|
722
|
+
function keyValuePair(value, index) {
|
|
723
|
+
var prop = nameOrIdentifier_1.default.primitiveKeyProperty(value, index) ||
|
|
724
|
+
keyPropertyAlias(value, index);
|
|
725
|
+
if (!prop)
|
|
726
|
+
return;
|
|
727
|
+
var eq = lexer_1.default.EQ(value, prop.next);
|
|
728
|
+
if (!eq)
|
|
729
|
+
return;
|
|
730
|
+
var val = keyPropertyValue(value, eq);
|
|
731
|
+
if (val)
|
|
732
|
+
return lexer_1.default.tokenize(value, index, val.next, {
|
|
733
|
+
key: prop,
|
|
734
|
+
value: val
|
|
735
|
+
}, lexer_1.default.TokenType.KeyValuePair);
|
|
736
|
+
}
|
|
737
|
+
Expressions.keyValuePair = keyValuePair;
|
|
738
|
+
function keyPropertyValue(value, index) {
|
|
739
|
+
var token = primitiveLiteral_1.default.primitiveLiteral(value, index);
|
|
740
|
+
if (token) {
|
|
741
|
+
token.type = lexer_1.default.TokenType.KeyPropertyValue;
|
|
742
|
+
return token;
|
|
743
|
+
}
|
|
744
|
+
}
|
|
745
|
+
Expressions.keyPropertyValue = keyPropertyValue;
|
|
746
|
+
function keyPropertyAlias(value, index) { return nameOrIdentifier_1.default.odataIdentifier(value, index, lexer_1.default.TokenType.KeyPropertyAlias); }
|
|
747
|
+
Expressions.keyPropertyAlias = keyPropertyAlias;
|
|
748
|
+
function singleNavigationExpr(value, index) {
|
|
749
|
+
if (value[index] !== 0x2f)
|
|
750
|
+
return;
|
|
751
|
+
var member = memberExpr(value, index + 1);
|
|
752
|
+
if (member)
|
|
753
|
+
return lexer_1.default.tokenize(value, index, member.next, member, lexer_1.default.TokenType.SingleNavigationExpression);
|
|
754
|
+
}
|
|
755
|
+
Expressions.singleNavigationExpr = singleNavigationExpr;
|
|
756
|
+
function collectionPathExpr(value, index) {
|
|
757
|
+
var token = countExpr(value, index);
|
|
758
|
+
if (!token) {
|
|
759
|
+
if (value[index] === 0x2f) {
|
|
760
|
+
token = boundFunctionExpr(value, index + 1) ||
|
|
761
|
+
anyExpr(value, index + 1) ||
|
|
762
|
+
allExpr(value, index + 1);
|
|
763
|
+
}
|
|
764
|
+
}
|
|
765
|
+
if (token)
|
|
766
|
+
return lexer_1.default.tokenize(value, index, token.next, token, lexer_1.default.TokenType.CollectionPathExpression);
|
|
767
|
+
}
|
|
768
|
+
Expressions.collectionPathExpr = collectionPathExpr;
|
|
769
|
+
function complexPathExpr(value, index) {
|
|
770
|
+
if (value[index] !== 0x2f)
|
|
771
|
+
return;
|
|
772
|
+
var start = index;
|
|
773
|
+
index++;
|
|
774
|
+
var token = nameOrIdentifier_1.default.qualifiedComplexTypeName(value, index);
|
|
775
|
+
if (token) {
|
|
776
|
+
if (value[token.next] !== 0x2f)
|
|
777
|
+
return;
|
|
778
|
+
index = token.next + 1;
|
|
779
|
+
}
|
|
780
|
+
var expr = propertyPathExpr(value, index) ||
|
|
781
|
+
boundFunctionExpr(value, index);
|
|
782
|
+
if (expr)
|
|
783
|
+
return lexer_1.default.tokenize(value, start, expr.next, token ? [token, expr] : [expr], lexer_1.default.TokenType.ComplexPathExpression);
|
|
784
|
+
}
|
|
785
|
+
Expressions.complexPathExpr = complexPathExpr;
|
|
786
|
+
function singlePathExpr(value, index) {
|
|
787
|
+
if (value[index] !== 0x2f)
|
|
788
|
+
return;
|
|
789
|
+
var boundFunction = boundFunctionExpr(value, index + 1);
|
|
790
|
+
if (boundFunction)
|
|
791
|
+
return lexer_1.default.tokenize(value, index, boundFunction.next, boundFunction, lexer_1.default.TokenType.SinglePathExpression);
|
|
792
|
+
}
|
|
793
|
+
Expressions.singlePathExpr = singlePathExpr;
|
|
794
|
+
function functionExpr(value, index) {
|
|
795
|
+
var namespaceNext = nameOrIdentifier_1.default.namespace(value, index);
|
|
796
|
+
if (namespaceNext === index || value[namespaceNext] !== 0x2e)
|
|
797
|
+
return;
|
|
798
|
+
var start = index;
|
|
799
|
+
index = namespaceNext + 1;
|
|
800
|
+
var token = nameOrIdentifier_1.default.odataIdentifier(value, index);
|
|
801
|
+
if (!token)
|
|
802
|
+
return;
|
|
803
|
+
token.position = start;
|
|
804
|
+
token.value.namespace = utils_1.default.stringify(value, start, namespaceNext);
|
|
805
|
+
token.raw = utils_1.default.stringify(value, start, token.next);
|
|
806
|
+
index = token.next;
|
|
807
|
+
var params = functionExprParameters(value, index);
|
|
808
|
+
if (!params)
|
|
809
|
+
return;
|
|
810
|
+
index = params.next;
|
|
811
|
+
var expr = collectionPathExpr(value, index) ||
|
|
812
|
+
collectionNavigationExpr(value, index) ||
|
|
813
|
+
singleNavigationExpr(value, index) ||
|
|
814
|
+
complexPathExpr(value, index) ||
|
|
815
|
+
singlePathExpr(value, index);
|
|
816
|
+
if (expr)
|
|
817
|
+
index = expr.next;
|
|
818
|
+
return lexer_1.default.tokenize(value, start, index, {
|
|
819
|
+
fn: token,
|
|
820
|
+
params: params,
|
|
821
|
+
expression: expr
|
|
822
|
+
}, lexer_1.default.TokenType.FunctionExpression);
|
|
823
|
+
}
|
|
824
|
+
Expressions.functionExpr = functionExpr;
|
|
825
|
+
function boundFunctionExpr(value, index) { return functionExpr(value, index); }
|
|
826
|
+
Expressions.boundFunctionExpr = boundFunctionExpr;
|
|
827
|
+
function functionExprParameters(value, index) {
|
|
828
|
+
var open = lexer_1.default.OPEN(value, index);
|
|
829
|
+
if (!open)
|
|
830
|
+
return;
|
|
831
|
+
var start = index;
|
|
832
|
+
index = open;
|
|
833
|
+
var params = [];
|
|
834
|
+
var expr = functionExprParameter(value, index);
|
|
835
|
+
while (expr) {
|
|
836
|
+
params.push(expr);
|
|
837
|
+
var comma = lexer_1.default.COMMA(value, expr.next);
|
|
838
|
+
if (comma) {
|
|
839
|
+
index = comma;
|
|
840
|
+
expr = functionExprParameter(value, index);
|
|
841
|
+
if (!expr)
|
|
842
|
+
return;
|
|
843
|
+
}
|
|
844
|
+
else {
|
|
845
|
+
index = expr.next;
|
|
846
|
+
expr = null;
|
|
847
|
+
}
|
|
848
|
+
}
|
|
849
|
+
var close = lexer_1.default.CLOSE(value, index);
|
|
850
|
+
if (!close)
|
|
851
|
+
return;
|
|
852
|
+
index = close;
|
|
853
|
+
return lexer_1.default.tokenize(value, start, index, params, lexer_1.default.TokenType.FunctionExpressionParameters);
|
|
854
|
+
}
|
|
855
|
+
Expressions.functionExprParameters = functionExprParameters;
|
|
856
|
+
function functionExprParameter(value, index) {
|
|
857
|
+
var name = parameterName(value, index);
|
|
858
|
+
if (!name)
|
|
859
|
+
return;
|
|
860
|
+
var eq = lexer_1.default.EQ(value, name.next);
|
|
861
|
+
if (!name || !eq)
|
|
862
|
+
return;
|
|
863
|
+
var start = index;
|
|
864
|
+
index = eq;
|
|
865
|
+
var param = parameterAlias(value, index) ||
|
|
866
|
+
parameterValue(value, index);
|
|
867
|
+
if (!param)
|
|
868
|
+
return;
|
|
869
|
+
return lexer_1.default.tokenize(value, start, param.next, {
|
|
870
|
+
name: name,
|
|
871
|
+
value: param
|
|
872
|
+
}, lexer_1.default.TokenType.FunctionExpressionParameter);
|
|
873
|
+
}
|
|
874
|
+
Expressions.functionExprParameter = functionExprParameter;
|
|
875
|
+
function parameterName(value, index) { return nameOrIdentifier_1.default.odataIdentifier(value, index, lexer_1.default.TokenType.ParameterName); }
|
|
876
|
+
Expressions.parameterName = parameterName;
|
|
877
|
+
function parameterAlias(value, index) {
|
|
878
|
+
var at = lexer_1.default.AT(value, index);
|
|
879
|
+
if (!at)
|
|
880
|
+
return;
|
|
881
|
+
var id = nameOrIdentifier_1.default.odataIdentifier(value, at);
|
|
882
|
+
if (id)
|
|
883
|
+
return lexer_1.default.tokenize(value, index, id.next, id.value, lexer_1.default.TokenType.ParameterAlias);
|
|
884
|
+
}
|
|
885
|
+
Expressions.parameterAlias = parameterAlias;
|
|
886
|
+
function parameterValue(value, index) {
|
|
887
|
+
var token = json_1.default.arrayOrObject(value, index) ||
|
|
888
|
+
commonExpr(value, index);
|
|
889
|
+
if (token)
|
|
890
|
+
return lexer_1.default.tokenize(value, index, token.next, token.value, lexer_1.default.TokenType.ParameterValue);
|
|
891
|
+
}
|
|
892
|
+
Expressions.parameterValue = parameterValue;
|
|
893
|
+
function countExpr(value, index) {
|
|
894
|
+
if (utils_1.default.equals(value, index, "/$count"))
|
|
895
|
+
return lexer_1.default.tokenize(value, index, index + 7, "/$count", lexer_1.default.TokenType.CountExpression);
|
|
896
|
+
}
|
|
897
|
+
Expressions.countExpr = countExpr;
|
|
898
|
+
function refExpr(value, index) {
|
|
899
|
+
if (utils_1.default.equals(value, index, "/$ref"))
|
|
900
|
+
return lexer_1.default.tokenize(value, index, index + 5, "/$ref", lexer_1.default.TokenType.RefExpression);
|
|
901
|
+
}
|
|
902
|
+
Expressions.refExpr = refExpr;
|
|
903
|
+
function valueExpr(value, index) {
|
|
904
|
+
if (utils_1.default.equals(value, index, "/$value"))
|
|
905
|
+
return lexer_1.default.tokenize(value, index, index + 7, "/$value", lexer_1.default.TokenType.ValueExpression);
|
|
906
|
+
}
|
|
907
|
+
Expressions.valueExpr = valueExpr;
|
|
908
|
+
function rootExpr(value, index) {
|
|
909
|
+
if (!utils_1.default.equals(value, index, "$root/"))
|
|
910
|
+
return;
|
|
911
|
+
var start = index;
|
|
912
|
+
index += 6;
|
|
913
|
+
var entitySet = nameOrIdentifier_1.default.entitySetName(value, index);
|
|
914
|
+
var predicate, entity, token;
|
|
915
|
+
if (entitySet)
|
|
916
|
+
predicate = keyPredicate(value, entitySet.next);
|
|
917
|
+
if (!(entitySet && predicate)) {
|
|
918
|
+
entity = nameOrIdentifier_1.default.singletonEntity(value, index);
|
|
919
|
+
if (!entity)
|
|
920
|
+
return;
|
|
921
|
+
token = {
|
|
922
|
+
entity: entity
|
|
923
|
+
};
|
|
924
|
+
}
|
|
925
|
+
else
|
|
926
|
+
token = {
|
|
927
|
+
entitySet: entitySet,
|
|
928
|
+
keys: predicate
|
|
929
|
+
};
|
|
930
|
+
index = (predicate || entity).next;
|
|
931
|
+
var nav = singleNavigationExpr(value, index);
|
|
932
|
+
if (nav)
|
|
933
|
+
index = nav.next;
|
|
934
|
+
return lexer_1.default.tokenize(value, start, index, {
|
|
935
|
+
current: token,
|
|
936
|
+
next: nav
|
|
937
|
+
}, lexer_1.default.TokenType.RootExpression);
|
|
938
|
+
}
|
|
939
|
+
Expressions.rootExpr = rootExpr;
|
|
940
|
+
})(Expressions = exports.Expressions || (exports.Expressions = {}));
|
|
941
|
+
exports.default = Expressions;
|
|
942
|
+
//# sourceMappingURL=expressions.js.map
|