@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.
@@ -0,0 +1,793 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.PrimitiveLiteral = void 0;
4
+ var utils_1 = require("./utils");
5
+ var lexer_1 = require("./lexer");
6
+ var nameOrIdentifier_1 = require("./nameOrIdentifier");
7
+ var PrimitiveLiteral;
8
+ (function (PrimitiveLiteral) {
9
+ function nullValue(value, index) {
10
+ if (utils_1.default.equals(value, index, "null"))
11
+ return lexer_1.default.tokenize(value, index, index + 4, "null", lexer_1.default.TokenType.Literal);
12
+ }
13
+ PrimitiveLiteral.nullValue = nullValue;
14
+ function booleanValue(value, index) {
15
+ if (utils_1.default.equals(value, index, "true"))
16
+ return lexer_1.default.tokenize(value, index, index + 4, "Edm.Boolean", lexer_1.default.TokenType.Literal);
17
+ if (utils_1.default.equals(value, index, "false"))
18
+ return lexer_1.default.tokenize(value, index, index + 5, "Edm.Boolean", lexer_1.default.TokenType.Literal);
19
+ }
20
+ PrimitiveLiteral.booleanValue = booleanValue;
21
+ function guidValue(value, index) {
22
+ if (utils_1.default.required(value, index, lexer_1.default.HEXDIG, 8, 8) &&
23
+ value[index + 8] === 0x2d &&
24
+ utils_1.default.required(value, index + 9, lexer_1.default.HEXDIG, 4, 4) &&
25
+ value[index + 13] === 0x2d &&
26
+ utils_1.default.required(value, index + 14, lexer_1.default.HEXDIG, 4, 4) &&
27
+ value[index + 18] === 0x2d &&
28
+ utils_1.default.required(value, index + 19, lexer_1.default.HEXDIG, 4, 4) &&
29
+ value[index + 23] === 0x2d &&
30
+ utils_1.default.required(value, index + 24, lexer_1.default.HEXDIG, 12))
31
+ return lexer_1.default.tokenize(value, index, index + 36, "Edm.Guid", lexer_1.default.TokenType.Literal);
32
+ }
33
+ PrimitiveLiteral.guidValue = guidValue;
34
+ function sbyteValue(value, index) {
35
+ var start = index;
36
+ var sign = lexer_1.default.SIGN(value, index);
37
+ if (sign)
38
+ index = sign;
39
+ var next = utils_1.default.required(value, index, lexer_1.default.DIGIT, 1, 3);
40
+ if (next) {
41
+ if (lexer_1.default.DIGIT(value[next]))
42
+ return;
43
+ var val = parseInt(utils_1.default.stringify(value, start, next), 10);
44
+ if (val >= -128 && val <= 127)
45
+ return lexer_1.default.tokenize(value, start, next, "Edm.SByte", lexer_1.default.TokenType.Literal);
46
+ }
47
+ }
48
+ PrimitiveLiteral.sbyteValue = sbyteValue;
49
+ function byteValue(value, index) {
50
+ var next = utils_1.default.required(value, index, lexer_1.default.DIGIT, 1, 3);
51
+ if (next) {
52
+ if (lexer_1.default.DIGIT(value[next]))
53
+ return;
54
+ var val = parseInt(utils_1.default.stringify(value, index, next), 10);
55
+ if (val >= 0 && val <= 255)
56
+ return lexer_1.default.tokenize(value, index, next, "Edm.Byte", lexer_1.default.TokenType.Literal);
57
+ }
58
+ }
59
+ PrimitiveLiteral.byteValue = byteValue;
60
+ function int16Value(value, index) {
61
+ var start = index;
62
+ var sign = lexer_1.default.SIGN(value, index);
63
+ if (sign)
64
+ index = sign;
65
+ var next = utils_1.default.required(value, index, lexer_1.default.DIGIT, 1, 5);
66
+ if (next) {
67
+ if (lexer_1.default.DIGIT(value[next]))
68
+ return;
69
+ var val = parseInt(utils_1.default.stringify(value, start, next), 10);
70
+ if (val >= -32768 && val <= 32767)
71
+ return lexer_1.default.tokenize(value, start, next, "Edm.Int16", lexer_1.default.TokenType.Literal);
72
+ }
73
+ }
74
+ PrimitiveLiteral.int16Value = int16Value;
75
+ function int32Value(value, index) {
76
+ var start = index;
77
+ var sign = lexer_1.default.SIGN(value, index);
78
+ if (sign)
79
+ index = sign;
80
+ var next = utils_1.default.required(value, index, lexer_1.default.DIGIT, 1, 10);
81
+ if (next) {
82
+ if (lexer_1.default.DIGIT(value[next]))
83
+ return;
84
+ var val = parseInt(utils_1.default.stringify(value, start, next), 10);
85
+ if (val >= -2147483648 && val <= 2147483647)
86
+ return lexer_1.default.tokenize(value, start, next, "Edm.Int32", lexer_1.default.TokenType.Literal);
87
+ }
88
+ }
89
+ PrimitiveLiteral.int32Value = int32Value;
90
+ function int64Value(value, index) {
91
+ var start = index;
92
+ var sign = lexer_1.default.SIGN(value, index);
93
+ if (sign)
94
+ index = sign;
95
+ var next = utils_1.default.required(value, index, lexer_1.default.DIGIT, 1, 19);
96
+ if (next) {
97
+ if (lexer_1.default.DIGIT(value[next]))
98
+ return;
99
+ var val = utils_1.default.stringify(value, index, next);
100
+ if (val >= "0" && val <= (value[start] === 0x2d ? "9223372036854775808" : "9223372036854775807"))
101
+ return lexer_1.default.tokenize(value, start, next, "Edm.Int64", lexer_1.default.TokenType.Literal);
102
+ }
103
+ }
104
+ PrimitiveLiteral.int64Value = int64Value;
105
+ function decimalValue(value, index) {
106
+ var start = index;
107
+ var sign = lexer_1.default.SIGN(value, index);
108
+ if (sign)
109
+ index = sign;
110
+ var intNext = utils_1.default.required(value, index, lexer_1.default.DIGIT, 1);
111
+ if (!intNext)
112
+ return;
113
+ var end = intNext;
114
+ if (value[intNext] === 0x2e) {
115
+ end = utils_1.default.required(value, intNext + 1, lexer_1.default.DIGIT, 1);
116
+ if (!end || end === intNext + 1)
117
+ return;
118
+ }
119
+ else
120
+ return;
121
+ // TODO: detect only decimal value, no double/single detection here
122
+ if (value[end] === 0x65)
123
+ return;
124
+ return lexer_1.default.tokenize(value, start, end, "Edm.Decimal", lexer_1.default.TokenType.Literal);
125
+ }
126
+ PrimitiveLiteral.decimalValue = decimalValue;
127
+ function doubleValue(value, index) {
128
+ var start = index;
129
+ var end = index;
130
+ var nanInfLen = lexer_1.default.nanInfinity(value, index);
131
+ if (nanInfLen) {
132
+ end += nanInfLen;
133
+ }
134
+ else {
135
+ // TODO: use decimalValue function
136
+ // var token = decimalValue(value, index);
137
+ var sign = lexer_1.default.SIGN(value, index);
138
+ if (sign)
139
+ index = sign;
140
+ var intNext = utils_1.default.required(value, index, lexer_1.default.DIGIT, 1);
141
+ if (!intNext)
142
+ return;
143
+ var decimalNext = intNext;
144
+ if (value[intNext] === 0x2e) {
145
+ decimalNext = utils_1.default.required(value, intNext + 1, lexer_1.default.DIGIT, 1);
146
+ if (decimalNext === intNext + 1)
147
+ return;
148
+ }
149
+ else
150
+ return;
151
+ if (value[decimalNext] === 0x65) {
152
+ var next = decimalNext + 1;
153
+ var sign_1 = lexer_1.default.SIGN(value, next);
154
+ if (sign_1)
155
+ next = sign_1;
156
+ var digitNext = utils_1.default.required(value, next, lexer_1.default.DIGIT, 1);
157
+ if (digitNext) {
158
+ end = digitNext;
159
+ }
160
+ }
161
+ else
162
+ end = decimalNext;
163
+ }
164
+ return lexer_1.default.tokenize(value, start, end, "Edm.Double", lexer_1.default.TokenType.Literal);
165
+ }
166
+ PrimitiveLiteral.doubleValue = doubleValue;
167
+ function singleValue(value, index) {
168
+ var token = PrimitiveLiteral.doubleValue(value, index);
169
+ if (token) {
170
+ token.value = "Edm.Single";
171
+ }
172
+ return token;
173
+ }
174
+ PrimitiveLiteral.singleValue = singleValue;
175
+ function stringValue(value, index) {
176
+ var start = index;
177
+ var squote = lexer_1.default.SQUOTE(value, start);
178
+ if (squote) {
179
+ index = squote;
180
+ while (index < value.length) {
181
+ squote = lexer_1.default.SQUOTE(value, index);
182
+ if (squote) {
183
+ index = squote;
184
+ squote = lexer_1.default.SQUOTE(value, index);
185
+ if (!squote) {
186
+ var close = lexer_1.default.CLOSE(value, index);
187
+ var comma = lexer_1.default.COMMA(value, index);
188
+ var amp = value[index] === 0x26;
189
+ if (lexer_1.default.pcharNoSQUOTE(value, index) > index && !amp && !close && !comma && lexer_1.default.RWS(value, index) === index)
190
+ return;
191
+ break;
192
+ }
193
+ else {
194
+ index = squote;
195
+ }
196
+ }
197
+ else {
198
+ var nextIndex = Math.max(lexer_1.default.RWS(value, index), lexer_1.default.pcharNoSQUOTE(value, index));
199
+ if (nextIndex === index)
200
+ return;
201
+ index = nextIndex;
202
+ }
203
+ }
204
+ squote = lexer_1.default.SQUOTE(value, index - 1) || lexer_1.default.SQUOTE(value, index - 3);
205
+ if (!squote)
206
+ return;
207
+ index = squote;
208
+ return lexer_1.default.tokenize(value, start, index, "Edm.String", lexer_1.default.TokenType.Literal);
209
+ }
210
+ }
211
+ PrimitiveLiteral.stringValue = stringValue;
212
+ function arrayValue(value, index) {
213
+ if (!utils_1.default.equals(value, index, "(") || !utils_1.default.equals(value, index - 3, "in"))
214
+ return;
215
+ var start = index;
216
+ var squote = lexer_1.default.OPEN(value, start);
217
+ if (squote) {
218
+ index = squote;
219
+ while (index < value.length) {
220
+ squote = lexer_1.default.CLOSE(value, index);
221
+ if (squote) {
222
+ index = squote;
223
+ squote = lexer_1.default.OPEN(value, index);
224
+ if (!squote) {
225
+ var close = lexer_1.default.CLOSE(value, index);
226
+ var comma = lexer_1.default.COMMA(value, index);
227
+ var amp = value[index] === 0x26;
228
+ if (lexer_1.default.pcharNoSQUOTE(value, index) > index && !amp && !close && !comma && lexer_1.default.RWS(value, index) === index)
229
+ return;
230
+ break;
231
+ }
232
+ else {
233
+ index = squote;
234
+ }
235
+ }
236
+ else {
237
+ var nextIndex = index + 1;
238
+ if (nextIndex === index)
239
+ return;
240
+ index = nextIndex;
241
+ }
242
+ }
243
+ // console.log(`--->index`, index)
244
+ // squote = Lexer.SQUOTE(value, index - 1) || Lexer.SQUOTE(value, index - 3);
245
+ // console.log(`--->squote`, squote)
246
+ // if (!squote) return;
247
+ // index = squote;
248
+ return lexer_1.default.tokenize(value, start, index, "Edm.Array", lexer_1.default.TokenType.Literal);
249
+ }
250
+ }
251
+ PrimitiveLiteral.arrayValue = arrayValue;
252
+ function durationValue(value, index) {
253
+ if (!utils_1.default.equals(value, index, "duration"))
254
+ return;
255
+ var start = index;
256
+ index += 8;
257
+ var squote = lexer_1.default.SQUOTE(value, index);
258
+ if (!squote)
259
+ return;
260
+ index = squote;
261
+ var sign = lexer_1.default.SIGN(value, index);
262
+ if (sign)
263
+ index = sign;
264
+ if (value[index] !== 0x50)
265
+ return;
266
+ index++;
267
+ var dayNext = utils_1.default.required(value, index, lexer_1.default.DIGIT, 1);
268
+ if (dayNext === index && value[index + 1] !== 0x54)
269
+ return;
270
+ index = dayNext;
271
+ if (value[index] === 0x44)
272
+ index++;
273
+ var end = index;
274
+ if (value[index] === 0x54) {
275
+ index++;
276
+ var parseTimeFn_1 = function () {
277
+ var squote = lexer_1.default.SQUOTE(value, index);
278
+ if (squote)
279
+ return index;
280
+ var digitNext = utils_1.default.required(value, index, lexer_1.default.DIGIT, 1);
281
+ if (digitNext === index)
282
+ return;
283
+ index = digitNext;
284
+ if (value[index] === 0x53) {
285
+ end = index + 1;
286
+ return end;
287
+ }
288
+ else if (value[index] === 0x2e) {
289
+ index++;
290
+ var fractionalSecondsNext = utils_1.default.required(value, index, lexer_1.default.DIGIT, 1);
291
+ if (fractionalSecondsNext === index || value[fractionalSecondsNext] !== 0x53)
292
+ return;
293
+ end = fractionalSecondsNext + 1;
294
+ return end;
295
+ }
296
+ else if (value[index] === 0x48) {
297
+ index++;
298
+ end = index;
299
+ return parseTimeFn_1();
300
+ }
301
+ else if (value[index] === 0x4d) {
302
+ index++;
303
+ end = index;
304
+ return parseTimeFn_1();
305
+ }
306
+ };
307
+ var next = parseTimeFn_1();
308
+ if (!next)
309
+ return;
310
+ }
311
+ squote = lexer_1.default.SQUOTE(value, end);
312
+ if (!squote)
313
+ return;
314
+ end = squote;
315
+ return lexer_1.default.tokenize(value, start, end, "Edm.Duration", lexer_1.default.TokenType.Literal);
316
+ }
317
+ PrimitiveLiteral.durationValue = durationValue;
318
+ function binaryValue(value, index) {
319
+ var start = index;
320
+ if (!utils_1.default.equals(value, index, "binary"))
321
+ return;
322
+ index += 6;
323
+ var squote = lexer_1.default.SQUOTE(value, index);
324
+ if (!squote)
325
+ return;
326
+ index = squote;
327
+ while (index < value.length && !(squote = lexer_1.default.SQUOTE(value, index))) {
328
+ var end = Math.max(lexer_1.default.base64b16(value, index), lexer_1.default.base64b8(value, index));
329
+ if (end > index)
330
+ index = end;
331
+ else if (lexer_1.default.base64char(value[index]) &&
332
+ lexer_1.default.base64char(value[index + 1]) &&
333
+ lexer_1.default.base64char(value[index + 2]) &&
334
+ lexer_1.default.base64char(value[index + 3]))
335
+ index += 4;
336
+ else
337
+ index++;
338
+ }
339
+ index = squote;
340
+ return lexer_1.default.tokenize(value, start, index, "Edm.Binary", lexer_1.default.TokenType.Literal);
341
+ }
342
+ PrimitiveLiteral.binaryValue = binaryValue;
343
+ function dateValue(value, index) {
344
+ var yearNext = lexer_1.default.year(value, index);
345
+ if (yearNext === index || value[yearNext] !== 0x2d)
346
+ return;
347
+ var monthNext = lexer_1.default.month(value, yearNext + 1);
348
+ if ((monthNext === yearNext + 1) || value[monthNext] !== 0x2d)
349
+ return;
350
+ var dayNext = lexer_1.default.day(value, monthNext + 1);
351
+ // TODO: join dateValue and dateTimeOffsetValue for optimalization
352
+ if (dayNext === monthNext + 1 || value[dayNext] === 0x54)
353
+ return;
354
+ return lexer_1.default.tokenize(value, index, dayNext, "Edm.Date", lexer_1.default.TokenType.Literal);
355
+ }
356
+ PrimitiveLiteral.dateValue = dateValue;
357
+ function dateTimeOffsetValue(value, index) {
358
+ var yearNext = lexer_1.default.year(value, index);
359
+ if (yearNext === index || value[yearNext] !== 0x2d)
360
+ return;
361
+ var monthNext = lexer_1.default.month(value, yearNext + 1);
362
+ if ((monthNext === yearNext + 1) || value[monthNext] !== 0x2d)
363
+ return;
364
+ var dayNext = lexer_1.default.day(value, monthNext + 1);
365
+ if (dayNext === monthNext + 1 || value[dayNext] !== 0x54)
366
+ return;
367
+ var hourNext = lexer_1.default.hour(value, dayNext + 1);
368
+ var colon = lexer_1.default.COLON(value, hourNext);
369
+ if (hourNext === colon || !colon)
370
+ return;
371
+ var minuteNext = lexer_1.default.minute(value, hourNext + 1);
372
+ if (minuteNext === hourNext + 1)
373
+ return;
374
+ var end = minuteNext;
375
+ colon = lexer_1.default.COLON(value, minuteNext);
376
+ if (colon) {
377
+ var secondNext = lexer_1.default.second(value, colon);
378
+ if (secondNext === colon)
379
+ return;
380
+ if (value[secondNext] === 0x2e) {
381
+ var fractionalSecondsNext = lexer_1.default.fractionalSeconds(value, secondNext + 1);
382
+ if (fractionalSecondsNext === secondNext + 1)
383
+ return;
384
+ end = fractionalSecondsNext;
385
+ }
386
+ else
387
+ end = secondNext;
388
+ }
389
+ var sign = lexer_1.default.SIGN(value, end);
390
+ if (value[end] === 0x5a) {
391
+ end++;
392
+ }
393
+ else if (sign) {
394
+ var zHourNext = lexer_1.default.hour(value, sign);
395
+ var colon_1 = lexer_1.default.COLON(value, zHourNext);
396
+ if (zHourNext === sign || !colon_1)
397
+ return;
398
+ var zMinuteNext = lexer_1.default.minute(value, colon_1);
399
+ if (zMinuteNext === colon_1)
400
+ return;
401
+ end = zMinuteNext;
402
+ }
403
+ else
404
+ return;
405
+ return lexer_1.default.tokenize(value, index, end, "Edm.DateTimeOffset", lexer_1.default.TokenType.Literal);
406
+ }
407
+ PrimitiveLiteral.dateTimeOffsetValue = dateTimeOffsetValue;
408
+ function timeOfDayValue(value, index) {
409
+ var hourNext = lexer_1.default.hour(value, index);
410
+ var colon = lexer_1.default.COLON(value, hourNext);
411
+ if (hourNext === index || !colon)
412
+ return;
413
+ var minuteNext = lexer_1.default.minute(value, colon);
414
+ if (minuteNext === colon)
415
+ return;
416
+ var end = minuteNext;
417
+ colon = lexer_1.default.COLON(value, minuteNext);
418
+ if (colon) {
419
+ var secondNext = lexer_1.default.second(value, colon);
420
+ if (secondNext === colon)
421
+ return;
422
+ if (value[secondNext] === 0x2e) {
423
+ var fractionalSecondsNext = lexer_1.default.fractionalSeconds(value, secondNext + 1);
424
+ if (fractionalSecondsNext === secondNext + 1)
425
+ return;
426
+ end = fractionalSecondsNext;
427
+ }
428
+ else
429
+ end = secondNext;
430
+ }
431
+ return lexer_1.default.tokenize(value, index, end, "Edm.TimeOfDay", lexer_1.default.TokenType.Literal);
432
+ }
433
+ PrimitiveLiteral.timeOfDayValue = timeOfDayValue;
434
+ // geography and geometry literals
435
+ function positionLiteral(value, index) {
436
+ var longitude = PrimitiveLiteral.doubleValue(value, index);
437
+ if (!longitude)
438
+ return;
439
+ var next = lexer_1.default.RWS(value, longitude.next);
440
+ if (next === longitude.next)
441
+ return;
442
+ var latitude = PrimitiveLiteral.doubleValue(value, next);
443
+ if (!latitude)
444
+ return;
445
+ return lexer_1.default.tokenize(value, index, latitude.next, { longitude: longitude, latitude: latitude }, lexer_1.default.TokenType.Literal);
446
+ }
447
+ PrimitiveLiteral.positionLiteral = positionLiteral;
448
+ function pointData(value, index) {
449
+ var open = lexer_1.default.OPEN(value, index);
450
+ if (!open)
451
+ return;
452
+ var start = index;
453
+ index = open;
454
+ var position = PrimitiveLiteral.positionLiteral(value, index);
455
+ if (!position)
456
+ return;
457
+ index = position.next;
458
+ var close = lexer_1.default.CLOSE(value, index);
459
+ if (!close)
460
+ return;
461
+ index = close;
462
+ return lexer_1.default.tokenize(value, start, index, position, lexer_1.default.TokenType.Literal);
463
+ }
464
+ PrimitiveLiteral.pointData = pointData;
465
+ function lineStringData(value, index) {
466
+ return PrimitiveLiteral.multiGeoLiteralFactory(value, index, "", PrimitiveLiteral.positionLiteral);
467
+ }
468
+ PrimitiveLiteral.lineStringData = lineStringData;
469
+ function ringLiteral(value, index) {
470
+ return PrimitiveLiteral.multiGeoLiteralFactory(value, index, "", PrimitiveLiteral.positionLiteral);
471
+ // Within each ringLiteral, the first and last positionLiteral elements MUST be an exact syntactic match to each other.
472
+ // Within the polygonData, the ringLiterals MUST specify their points in appropriate winding order.
473
+ // In order of traversal, points to the left side of the ring are interpreted as being in the polygon.
474
+ }
475
+ PrimitiveLiteral.ringLiteral = ringLiteral;
476
+ function polygonData(value, index) {
477
+ return PrimitiveLiteral.multiGeoLiteralFactory(value, index, "", PrimitiveLiteral.ringLiteral);
478
+ }
479
+ PrimitiveLiteral.polygonData = polygonData;
480
+ function sridLiteral(value, index) {
481
+ if (!utils_1.default.equals(value, index, "SRID"))
482
+ return;
483
+ var start = index;
484
+ index += 4;
485
+ var eq = lexer_1.default.EQ(value, index);
486
+ if (!eq)
487
+ return;
488
+ index++;
489
+ var digit = utils_1.default.required(value, index, lexer_1.default.DIGIT, 1, 5);
490
+ if (!digit)
491
+ return;
492
+ index = digit;
493
+ var semi = lexer_1.default.SEMI(value, index);
494
+ if (!semi)
495
+ return;
496
+ index = semi;
497
+ return lexer_1.default.tokenize(value, start, index, "SRID", lexer_1.default.TokenType.Literal);
498
+ }
499
+ PrimitiveLiteral.sridLiteral = sridLiteral;
500
+ function pointLiteral(value, index) {
501
+ if (!utils_1.default.equals(value, index, "Point"))
502
+ return;
503
+ var start = index;
504
+ index += 5;
505
+ var data = PrimitiveLiteral.pointData(value, index);
506
+ if (!data)
507
+ return;
508
+ return lexer_1.default.tokenize(value, start, data.next, data, lexer_1.default.TokenType.Literal);
509
+ }
510
+ PrimitiveLiteral.pointLiteral = pointLiteral;
511
+ function polygonLiteral(value, index) {
512
+ if (!utils_1.default.equals(value, index, "Polygon"))
513
+ return;
514
+ var start = index;
515
+ index += 7;
516
+ var data = PrimitiveLiteral.polygonData(value, index);
517
+ if (!data)
518
+ return;
519
+ return lexer_1.default.tokenize(value, start, data.next, data, lexer_1.default.TokenType.Literal);
520
+ }
521
+ PrimitiveLiteral.polygonLiteral = polygonLiteral;
522
+ function collectionLiteral(value, index) {
523
+ return PrimitiveLiteral.multiGeoLiteralFactory(value, index, "Collection", PrimitiveLiteral.geoLiteral);
524
+ }
525
+ PrimitiveLiteral.collectionLiteral = collectionLiteral;
526
+ function lineStringLiteral(value, index) {
527
+ if (!utils_1.default.equals(value, index, "LineString"))
528
+ return;
529
+ var start = index;
530
+ index += 10;
531
+ var data = PrimitiveLiteral.lineStringData(value, index);
532
+ if (!data)
533
+ return;
534
+ index = data.next;
535
+ return lexer_1.default.tokenize(value, start, index, data, lexer_1.default.TokenType.Literal);
536
+ }
537
+ PrimitiveLiteral.lineStringLiteral = lineStringLiteral;
538
+ function multiLineStringLiteral(value, index) {
539
+ return PrimitiveLiteral.multiGeoLiteralOptionalFactory(value, index, "MultiLineString", PrimitiveLiteral.lineStringData);
540
+ }
541
+ PrimitiveLiteral.multiLineStringLiteral = multiLineStringLiteral;
542
+ function multiPointLiteral(value, index) {
543
+ return PrimitiveLiteral.multiGeoLiteralOptionalFactory(value, index, "MultiPoint", PrimitiveLiteral.pointData);
544
+ }
545
+ PrimitiveLiteral.multiPointLiteral = multiPointLiteral;
546
+ function multiPolygonLiteral(value, index) {
547
+ return PrimitiveLiteral.multiGeoLiteralOptionalFactory(value, index, "MultiPolygon", PrimitiveLiteral.polygonData);
548
+ }
549
+ PrimitiveLiteral.multiPolygonLiteral = multiPolygonLiteral;
550
+ function multiGeoLiteralFactory(value, index, prefix, itemLiteral) {
551
+ if (!utils_1.default.equals(value, index, prefix + "("))
552
+ return;
553
+ var start = index;
554
+ index += prefix.length + 1;
555
+ var items = [];
556
+ var geo = itemLiteral(value, index);
557
+ if (!geo)
558
+ return;
559
+ index = geo.next;
560
+ while (geo) {
561
+ items.push(geo);
562
+ var close = lexer_1.default.CLOSE(value, index);
563
+ if (close) {
564
+ index = close;
565
+ break;
566
+ }
567
+ var comma = lexer_1.default.COMMA(value, index);
568
+ if (!comma)
569
+ return;
570
+ index = comma;
571
+ geo = itemLiteral(value, index);
572
+ if (!geo)
573
+ return;
574
+ index = geo.next;
575
+ }
576
+ return lexer_1.default.tokenize(value, start, index, { items: items }, lexer_1.default.TokenType.Literal);
577
+ }
578
+ PrimitiveLiteral.multiGeoLiteralFactory = multiGeoLiteralFactory;
579
+ function multiGeoLiteralOptionalFactory(value, index, prefix, itemLiteral) {
580
+ if (!utils_1.default.equals(value, index, prefix + "("))
581
+ return;
582
+ var start = index;
583
+ index += prefix.length + 1;
584
+ var items = [];
585
+ var close = lexer_1.default.CLOSE(value, index);
586
+ if (!close) {
587
+ var geo = itemLiteral(value, index);
588
+ if (!geo)
589
+ return;
590
+ index = geo.next;
591
+ while (geo) {
592
+ items.push(geo);
593
+ close = lexer_1.default.CLOSE(value, index);
594
+ if (close) {
595
+ index = close;
596
+ break;
597
+ }
598
+ var comma = lexer_1.default.COMMA(value, index);
599
+ if (!comma)
600
+ return;
601
+ index = comma;
602
+ geo = itemLiteral(value, index);
603
+ if (!geo)
604
+ return;
605
+ index = geo.next;
606
+ }
607
+ }
608
+ else
609
+ index++;
610
+ return lexer_1.default.tokenize(value, start, index, { items: items }, lexer_1.default.TokenType.Literal);
611
+ }
612
+ PrimitiveLiteral.multiGeoLiteralOptionalFactory = multiGeoLiteralOptionalFactory;
613
+ function geoLiteral(value, index) {
614
+ return PrimitiveLiteral.collectionLiteral(value, index) ||
615
+ PrimitiveLiteral.lineStringLiteral(value, index) ||
616
+ PrimitiveLiteral.multiPointLiteral(value, index) ||
617
+ PrimitiveLiteral.multiLineStringLiteral(value, index) ||
618
+ PrimitiveLiteral.multiPolygonLiteral(value, index) ||
619
+ PrimitiveLiteral.pointLiteral(value, index) ||
620
+ PrimitiveLiteral.polygonLiteral(value, index);
621
+ }
622
+ PrimitiveLiteral.geoLiteral = geoLiteral;
623
+ function fullPointLiteral(value, index) {
624
+ return PrimitiveLiteral.fullGeoLiteralFactory(value, index, PrimitiveLiteral.pointLiteral);
625
+ }
626
+ PrimitiveLiteral.fullPointLiteral = fullPointLiteral;
627
+ function fullCollectionLiteral(value, index) {
628
+ return PrimitiveLiteral.fullGeoLiteralFactory(value, index, PrimitiveLiteral.collectionLiteral);
629
+ }
630
+ PrimitiveLiteral.fullCollectionLiteral = fullCollectionLiteral;
631
+ function fullLineStringLiteral(value, index) {
632
+ return PrimitiveLiteral.fullGeoLiteralFactory(value, index, PrimitiveLiteral.lineStringLiteral);
633
+ }
634
+ PrimitiveLiteral.fullLineStringLiteral = fullLineStringLiteral;
635
+ function fullMultiLineStringLiteral(value, index) {
636
+ return PrimitiveLiteral.fullGeoLiteralFactory(value, index, PrimitiveLiteral.multiLineStringLiteral);
637
+ }
638
+ PrimitiveLiteral.fullMultiLineStringLiteral = fullMultiLineStringLiteral;
639
+ function fullMultiPointLiteral(value, index) {
640
+ return PrimitiveLiteral.fullGeoLiteralFactory(value, index, PrimitiveLiteral.multiPointLiteral);
641
+ }
642
+ PrimitiveLiteral.fullMultiPointLiteral = fullMultiPointLiteral;
643
+ function fullMultiPolygonLiteral(value, index) {
644
+ return PrimitiveLiteral.fullGeoLiteralFactory(value, index, PrimitiveLiteral.multiPolygonLiteral);
645
+ }
646
+ PrimitiveLiteral.fullMultiPolygonLiteral = fullMultiPolygonLiteral;
647
+ function fullPolygonLiteral(value, index) {
648
+ return PrimitiveLiteral.fullGeoLiteralFactory(value, index, PrimitiveLiteral.polygonLiteral);
649
+ }
650
+ PrimitiveLiteral.fullPolygonLiteral = fullPolygonLiteral;
651
+ function fullGeoLiteralFactory(value, index, literal) {
652
+ var srid = PrimitiveLiteral.sridLiteral(value, index);
653
+ if (!srid)
654
+ return;
655
+ var token = literal(value, srid.next);
656
+ if (!token)
657
+ return;
658
+ return lexer_1.default.tokenize(value, index, token.next, { srid: srid, value: token }, lexer_1.default.TokenType.Literal);
659
+ }
660
+ PrimitiveLiteral.fullGeoLiteralFactory = fullGeoLiteralFactory;
661
+ function geographyCollection(value, index) {
662
+ var prefix = lexer_1.default.geographyPrefix(value, index);
663
+ if (prefix === index)
664
+ return;
665
+ var start = index;
666
+ index = prefix;
667
+ var squote = lexer_1.default.SQUOTE(value, index);
668
+ if (!squote)
669
+ return;
670
+ index = squote;
671
+ var point = PrimitiveLiteral.fullCollectionLiteral(value, index);
672
+ if (!point)
673
+ return;
674
+ index = point.next;
675
+ squote = lexer_1.default.SQUOTE(value, index);
676
+ if (!squote)
677
+ return;
678
+ index = squote;
679
+ return lexer_1.default.tokenize(value, start, index, "Edm.GeographyCollection", lexer_1.default.TokenType.Literal);
680
+ }
681
+ PrimitiveLiteral.geographyCollection = geographyCollection;
682
+ function geographyLineString(value, index) {
683
+ return PrimitiveLiteral.geoLiteralFactory(value, index, "Edm.GeographyLineString", lexer_1.default.geographyPrefix, PrimitiveLiteral.fullLineStringLiteral);
684
+ }
685
+ PrimitiveLiteral.geographyLineString = geographyLineString;
686
+ function geographyMultiLineString(value, index) {
687
+ return PrimitiveLiteral.geoLiteralFactory(value, index, "Edm.GeographyMultiLineString", lexer_1.default.geographyPrefix, PrimitiveLiteral.fullMultiLineStringLiteral);
688
+ }
689
+ PrimitiveLiteral.geographyMultiLineString = geographyMultiLineString;
690
+ function geographyMultiPoint(value, index) {
691
+ return PrimitiveLiteral.geoLiteralFactory(value, index, "Edm.GeographyMultiPoint", lexer_1.default.geographyPrefix, PrimitiveLiteral.fullMultiPointLiteral);
692
+ }
693
+ PrimitiveLiteral.geographyMultiPoint = geographyMultiPoint;
694
+ function geographyMultiPolygon(value, index) {
695
+ return PrimitiveLiteral.geoLiteralFactory(value, index, "Edm.GeographyMultiPolygon", lexer_1.default.geographyPrefix, PrimitiveLiteral.fullMultiPolygonLiteral);
696
+ }
697
+ PrimitiveLiteral.geographyMultiPolygon = geographyMultiPolygon;
698
+ function geographyPoint(value, index) {
699
+ return PrimitiveLiteral.geoLiteralFactory(value, index, "Edm.GeographyPoint", lexer_1.default.geographyPrefix, PrimitiveLiteral.fullPointLiteral);
700
+ }
701
+ PrimitiveLiteral.geographyPoint = geographyPoint;
702
+ function geographyPolygon(value, index) {
703
+ return PrimitiveLiteral.geoLiteralFactory(value, index, "Edm.GeographyPolygon", lexer_1.default.geographyPrefix, PrimitiveLiteral.fullPolygonLiteral);
704
+ }
705
+ PrimitiveLiteral.geographyPolygon = geographyPolygon;
706
+ function geometryCollection(value, index) {
707
+ return PrimitiveLiteral.geoLiteralFactory(value, index, "Edm.GeometryCollection", lexer_1.default.geometryPrefix, PrimitiveLiteral.fullCollectionLiteral);
708
+ }
709
+ PrimitiveLiteral.geometryCollection = geometryCollection;
710
+ function geometryLineString(value, index) {
711
+ return PrimitiveLiteral.geoLiteralFactory(value, index, "Edm.GeometryLineString", lexer_1.default.geometryPrefix, PrimitiveLiteral.fullLineStringLiteral);
712
+ }
713
+ PrimitiveLiteral.geometryLineString = geometryLineString;
714
+ function geometryMultiLineString(value, index) {
715
+ return PrimitiveLiteral.geoLiteralFactory(value, index, "Edm.GeometryMultiLineString", lexer_1.default.geometryPrefix, PrimitiveLiteral.fullMultiLineStringLiteral);
716
+ }
717
+ PrimitiveLiteral.geometryMultiLineString = geometryMultiLineString;
718
+ function geometryMultiPoint(value, index) {
719
+ return PrimitiveLiteral.geoLiteralFactory(value, index, "Edm.GeometryMultiPoint", lexer_1.default.geometryPrefix, PrimitiveLiteral.fullMultiPointLiteral);
720
+ }
721
+ PrimitiveLiteral.geometryMultiPoint = geometryMultiPoint;
722
+ function geometryMultiPolygon(value, index) {
723
+ return PrimitiveLiteral.geoLiteralFactory(value, index, "Edm.GeometryMultiPolygon", lexer_1.default.geometryPrefix, PrimitiveLiteral.fullMultiPolygonLiteral);
724
+ }
725
+ PrimitiveLiteral.geometryMultiPolygon = geometryMultiPolygon;
726
+ function geometryPoint(value, index) {
727
+ return PrimitiveLiteral.geoLiteralFactory(value, index, "Edm.GeometryPoint", lexer_1.default.geometryPrefix, PrimitiveLiteral.fullPointLiteral);
728
+ }
729
+ PrimitiveLiteral.geometryPoint = geometryPoint;
730
+ function geometryPolygon(value, index) {
731
+ return PrimitiveLiteral.geoLiteralFactory(value, index, "Edm.GeometryPolygon", lexer_1.default.geometryPrefix, PrimitiveLiteral.fullPolygonLiteral);
732
+ }
733
+ PrimitiveLiteral.geometryPolygon = geometryPolygon;
734
+ function geoLiteralFactory(value, index, type, prefix, literal) {
735
+ var prefixNext = prefix(value, index);
736
+ if (prefixNext === index)
737
+ return;
738
+ var start = index;
739
+ index = prefixNext;
740
+ var squote = lexer_1.default.SQUOTE(value, index);
741
+ if (!squote)
742
+ return;
743
+ index = squote;
744
+ var data = literal(value, index);
745
+ if (!data)
746
+ return;
747
+ index = data.next;
748
+ squote = lexer_1.default.SQUOTE(value, index);
749
+ if (!squote)
750
+ return;
751
+ index = squote;
752
+ return lexer_1.default.tokenize(value, start, index, type, lexer_1.default.TokenType.Literal);
753
+ }
754
+ PrimitiveLiteral.geoLiteralFactory = geoLiteralFactory;
755
+ function primitiveLiteral(value, index) {
756
+ return PrimitiveLiteral.nullValue(value, index) ||
757
+ PrimitiveLiteral.booleanValue(value, index) ||
758
+ PrimitiveLiteral.guidValue(value, index) ||
759
+ PrimitiveLiteral.dateValue(value, index) ||
760
+ PrimitiveLiteral.dateTimeOffsetValue(value, index) ||
761
+ PrimitiveLiteral.timeOfDayValue(value, index) ||
762
+ PrimitiveLiteral.decimalValue(value, index) ||
763
+ PrimitiveLiteral.doubleValue(value, index) ||
764
+ PrimitiveLiteral.singleValue(value, index) ||
765
+ PrimitiveLiteral.sbyteValue(value, index) ||
766
+ PrimitiveLiteral.byteValue(value, index) ||
767
+ PrimitiveLiteral.int16Value(value, index) ||
768
+ PrimitiveLiteral.int32Value(value, index) ||
769
+ PrimitiveLiteral.int64Value(value, index) ||
770
+ PrimitiveLiteral.arrayValue(value, index) ||
771
+ PrimitiveLiteral.stringValue(value, index) ||
772
+ PrimitiveLiteral.durationValue(value, index) ||
773
+ PrimitiveLiteral.binaryValue(value, index) ||
774
+ nameOrIdentifier_1.default.enumeration(value, index) ||
775
+ PrimitiveLiteral.geographyCollection(value, index) ||
776
+ PrimitiveLiteral.geographyLineString(value, index) ||
777
+ PrimitiveLiteral.geographyMultiLineString(value, index) ||
778
+ PrimitiveLiteral.geographyMultiPoint(value, index) ||
779
+ PrimitiveLiteral.geographyMultiPolygon(value, index) ||
780
+ PrimitiveLiteral.geographyPoint(value, index) ||
781
+ PrimitiveLiteral.geographyPolygon(value, index) ||
782
+ PrimitiveLiteral.geometryCollection(value, index) ||
783
+ PrimitiveLiteral.geometryLineString(value, index) ||
784
+ PrimitiveLiteral.geometryMultiLineString(value, index) ||
785
+ PrimitiveLiteral.geometryMultiPoint(value, index) ||
786
+ PrimitiveLiteral.geometryMultiPolygon(value, index) ||
787
+ PrimitiveLiteral.geometryPoint(value, index) ||
788
+ PrimitiveLiteral.geometryPolygon(value, index);
789
+ }
790
+ PrimitiveLiteral.primitiveLiteral = primitiveLiteral;
791
+ })(PrimitiveLiteral = exports.PrimitiveLiteral || (exports.PrimitiveLiteral = {}));
792
+ exports.default = PrimitiveLiteral;
793
+ //# sourceMappingURL=primitiveLiteral.js.map