@malloydata/malloy-filter 0.0.237-dev250221201621

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (87) hide show
  1. package/README.md +81 -0
  2. package/SAMPLES.md +381 -0
  3. package/SERIALIZE_SAMPLES.md +300 -0
  4. package/dist/a_simple_parser.d.ts +1 -0
  5. package/dist/a_simple_parser.js +20 -0
  6. package/dist/a_simple_parser.js.map +1 -0
  7. package/dist/a_simple_serializer.d.ts +1 -0
  8. package/dist/a_simple_serializer.js +31 -0
  9. package/dist/a_simple_serializer.js.map +1 -0
  10. package/dist/base_parser.d.ts +13 -0
  11. package/dist/base_parser.js +33 -0
  12. package/dist/base_parser.js.map +1 -0
  13. package/dist/base_serializer.d.ts +6 -0
  14. package/dist/base_serializer.js +11 -0
  15. package/dist/base_serializer.js.map +1 -0
  16. package/dist/boolean_parser.d.ts +7 -0
  17. package/dist/boolean_parser.js +59 -0
  18. package/dist/boolean_parser.js.map +1 -0
  19. package/dist/boolean_serializer.d.ts +8 -0
  20. package/dist/boolean_serializer.js +31 -0
  21. package/dist/boolean_serializer.js.map +1 -0
  22. package/dist/clause_types.d.ts +70 -0
  23. package/dist/clause_types.js +3 -0
  24. package/dist/clause_types.js.map +1 -0
  25. package/dist/date_parser.d.ts +22 -0
  26. package/dist/date_parser.js +315 -0
  27. package/dist/date_parser.js.map +1 -0
  28. package/dist/date_serializer.d.ts +10 -0
  29. package/dist/date_serializer.js +100 -0
  30. package/dist/date_serializer.js.map +1 -0
  31. package/dist/filter_parser.d.ts +12 -0
  32. package/dist/filter_parser.js +66 -0
  33. package/dist/filter_parser.js.map +1 -0
  34. package/dist/filter_serializer.d.ts +13 -0
  35. package/dist/filter_serializer.js +43 -0
  36. package/dist/filter_serializer.js.map +1 -0
  37. package/dist/filter_types.d.ts +10 -0
  38. package/dist/filter_types.js +3 -0
  39. package/dist/filter_types.js.map +1 -0
  40. package/dist/generate_samples.d.ts +1 -0
  41. package/dist/generate_samples.js +344 -0
  42. package/dist/generate_samples.js.map +1 -0
  43. package/dist/number_parser.d.ts +20 -0
  44. package/dist/number_parser.js +275 -0
  45. package/dist/number_parser.js.map +1 -0
  46. package/dist/number_serializer.d.ts +11 -0
  47. package/dist/number_serializer.js +76 -0
  48. package/dist/number_serializer.js.map +1 -0
  49. package/dist/string_parser.d.ts +18 -0
  50. package/dist/string_parser.js +198 -0
  51. package/dist/string_parser.js.map +1 -0
  52. package/dist/string_serializer.d.ts +11 -0
  53. package/dist/string_serializer.js +77 -0
  54. package/dist/string_serializer.js.map +1 -0
  55. package/dist/token_types.d.ts +7 -0
  56. package/dist/token_types.js +3 -0
  57. package/dist/token_types.js.map +1 -0
  58. package/dist/tokenizer.d.ts +52 -0
  59. package/dist/tokenizer.js +263 -0
  60. package/dist/tokenizer.js.map +1 -0
  61. package/dist/tokenizer.spec.d.ts +1 -0
  62. package/dist/tokenizer.spec.js +255 -0
  63. package/dist/tokenizer.spec.js.map +1 -0
  64. package/jest.config.js +3 -0
  65. package/package.json +21 -0
  66. package/src/DEVELOPING.md +26 -0
  67. package/src/a_simple_parser.ts +22 -0
  68. package/src/a_simple_serializer.ts +40 -0
  69. package/src/base_parser.ts +45 -0
  70. package/src/base_serializer.ts +9 -0
  71. package/src/boolean_parser.ts +60 -0
  72. package/src/boolean_serializer.ts +32 -0
  73. package/src/clause_types.ts +160 -0
  74. package/src/date_parser.ts +413 -0
  75. package/src/date_serializer.ts +114 -0
  76. package/src/filter_parser.ts +68 -0
  77. package/src/filter_serializer.ts +49 -0
  78. package/src/filter_types.ts +12 -0
  79. package/src/generate_samples.ts +387 -0
  80. package/src/number_parser.ts +308 -0
  81. package/src/number_serializer.ts +96 -0
  82. package/src/string_parser.ts +193 -0
  83. package/src/string_serializer.ts +87 -0
  84. package/src/token_types.ts +7 -0
  85. package/src/tokenizer.spec.ts +273 -0
  86. package/src/tokenizer.ts +320 -0
  87. package/tsconfig.json +14 -0
@@ -0,0 +1,344 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const tokenizer_1 = require("./tokenizer");
4
+ const boolean_parser_1 = require("./boolean_parser");
5
+ const string_parser_1 = require("./string_parser");
6
+ const number_parser_1 = require("./number_parser");
7
+ const date_parser_1 = require("./date_parser");
8
+ const boolean_serializer_1 = require("./boolean_serializer");
9
+ const string_serializer_1 = require("./string_serializer");
10
+ const number_serializer_1 = require("./number_serializer");
11
+ const date_serializer_1 = require("./date_serializer");
12
+ const numberExamples = [
13
+ '5',
14
+ '!=5',
15
+ '1, 3, null , 7',
16
+ '<1, >=100 ',
17
+ '>=1',
18
+ ' <= 10 ',
19
+ 'NULL',
20
+ ' -NULL',
21
+ '(1, 7)',
22
+ '[-5, 90]',
23
+ ' != ( 12, 20 ] ',
24
+ '[.12e-20, 20.0e3)',
25
+ '[0,9],[20,29]',
26
+ '[0,10], 20, NULL, ( 72, 82 ] ',
27
+ ', notanumber,, "null", apple pear orange, nulle, nnull, >=,',
28
+ '[cat, 100], <cat',
29
+ '-5.5 to 10',
30
+ ];
31
+ const stringExamples = [
32
+ 'CAT, DOG,mouse ',
33
+ '-CAT,-DOG , -mouse',
34
+ ' CAT,-"DOG",m o u s e',
35
+ '-CAT,-DOG,mouse, bird, zebra, -horse, -goat',
36
+ 'Missing ,NULL',
37
+ 'CAT%, D%OG, %ous%, %ira_f%, %_oat, ',
38
+ '-CAT%,-D%OG,-%mouse,-%zebra%',
39
+ 'CAT%,-CATALOG',
40
+ '%,_,%%,%a%',
41
+ '%\\_X',
42
+ '_\\_X',
43
+ '_CAT,D_G,mouse_',
44
+ '\\_CAT,D\\%G,\\mouse',
45
+ 'CAT,-NULL',
46
+ 'CAT,-"NULL"',
47
+ 'CAT,NULL',
48
+ 'EMPTY',
49
+ '-EMPTY',
50
+ 'CAT,-EMPTY',
51
+ '"CAT,DOG\',mo`use,zeb\'\'\'ra,g"""t,g\\"ir\\`af\\\'e',
52
+ 'CAT\\,DOG',
53
+ 'CAT,DOG,-, - ',
54
+ '--CAT,DOG,\\',
55
+ 'CAT\\ DOG',
56
+ '_\\_CAT',
57
+ '\\NULL',
58
+ '\\-NULL',
59
+ '-N\\ULL',
60
+ 'CA--,D-G',
61
+ ' hello world, foo="bar baz" , qux=quux',
62
+ 'one ,Null , Empty,E M P T Y Y,EEmpty, emptIEs',
63
+ '',
64
+ ];
65
+ const booleanExamples = [
66
+ 'true',
67
+ 'FALSE',
68
+ 'null',
69
+ '-NULL',
70
+ ' True , faLSE,NULl,-null',
71
+ "-'null'",
72
+ '10',
73
+ 'nnull',
74
+ ' truee ',
75
+ ];
76
+ const dateExamples = [
77
+ 'this month',
78
+ '3 days',
79
+ '3 days ago',
80
+ '3 months ago for 2 days',
81
+ 'after 2025 seconds',
82
+ '2025 weeks ago',
83
+ 'before 3 days ago',
84
+ 'before 2025-08-30 08:30:20',
85
+ 'after 2025-10-05',
86
+ '2025-08-30 12:00:00 to 2025-09-18 14:00:00',
87
+ 'this year',
88
+ 'next tuesday',
89
+ '7 years from now',
90
+ '2025-01-01 12:00:00 for 3 days',
91
+ '2020-08-12',
92
+ '2020-08',
93
+ 'today',
94
+ 'yesterday',
95
+ 'tomorrow',
96
+ 'TODay,Yesterday, TOMORROW , ,TODay ,,',
97
+ '2010 to 2011, 2015 to 2016 , 2018, 2020 ',
98
+ 'next week',
99
+ 'now',
100
+ 'now to next month',
101
+ ' yyesterday ',
102
+ 'before',
103
+ 'for',
104
+ '7',
105
+ 'from now',
106
+ '',
107
+ ];
108
+ /* eslint-disable @typescript-eslint/no-unused-vars */
109
+ /* eslint-disable no-console */
110
+ function testTokenizerSingle(str, params) {
111
+ const tokenizer = new tokenizer_1.Tokenizer(str, params);
112
+ console.log(str, ' -> ', tokenizer.parse(), '\n');
113
+ }
114
+ function testTokenizerString() {
115
+ // Test string parser tokenizer. Do not split on whitespace
116
+ const specialSubstrings = [{ type: ',', value: ',' }];
117
+ const specialWords = [];
118
+ const params = {
119
+ trimWordWhitespace: true,
120
+ combineAdjacentWords: true,
121
+ specialSubstrings,
122
+ specialWords,
123
+ };
124
+ const examples = [
125
+ 'CAT, DOG,mouse ',
126
+ '-CAT,-DOG , -mouse',
127
+ ' CAT,-"DOG",m o u s e',
128
+ '-CAT,-DOG,mouse, bird, zebra, -horse, -goat',
129
+ 'Missing ,NULL',
130
+ 'CAT%,D%OG',
131
+ 'CAT%,-CATALOG',
132
+ '_CAT,D_G',
133
+ 'CAT,-NULL',
134
+ 'CAT,-"NULL"',
135
+ 'EMPTY',
136
+ '-EMPTY',
137
+ 'CAT,-EMPTY',
138
+ '"CAT,DOG"',
139
+ 'CAT\\,DOG',
140
+ 'CAT,DOG,-, - ',
141
+ '--CAT,DOG,\\',
142
+ 'CA--,D-G',
143
+ ' hello world, foo="bar baz" , qux=quux',
144
+ 'one ,Null , Empty,E M P T Y Y,EEmpty, emptIEs',
145
+ '',
146
+ ];
147
+ for (const example of examples) {
148
+ testTokenizerSingle(example, params);
149
+ }
150
+ }
151
+ function testTokenizerNumber() {
152
+ // Test number parser tokenizer, split on whitespace
153
+ const specialSubstrings = [
154
+ { type: ',', value: ',' },
155
+ { type: '[', value: '[' },
156
+ { type: ']', value: ']' },
157
+ { type: '(', value: '(' },
158
+ { type: ')', value: ')' },
159
+ { type: '<=', value: '<=' },
160
+ { type: '>=', value: '>=' },
161
+ { type: '!=', value: '!=' },
162
+ { type: '=', value: '=' },
163
+ { type: '>', value: '>' },
164
+ { type: '<', value: '<' },
165
+ ];
166
+ const specialWords = [
167
+ { type: 'TO', value: 'to', ignoreCase: true },
168
+ { type: '-NULL', value: '-null', ignoreCase: true },
169
+ { type: 'NULL', value: 'null', ignoreCase: true },
170
+ ];
171
+ const params = {
172
+ trimWordWhitespace: true,
173
+ combineAdjacentWords: false,
174
+ splitOnWhitespace: true,
175
+ specialSubstrings,
176
+ specialWords,
177
+ };
178
+ const examples = [
179
+ '5',
180
+ '!=5',
181
+ '1, 3, null , 7',
182
+ '<1, >=100 ',
183
+ '-5.5 to 10',
184
+ '>=1',
185
+ ' <= 10 ',
186
+ 'NULL',
187
+ ' -NULL',
188
+ '(1, 7)',
189
+ '[-5, 90]',
190
+ ' ( 12, 20 ] ',
191
+ '[.12e-20, 20.0e3)',
192
+ '[0,9],[20,29]',
193
+ '[0,10], 20, NULL, ( 72, 82 ] ',
194
+ ', notanumber,, -"-null", apple pear orange, nulle, nnull',
195
+ ];
196
+ for (const example of examples) {
197
+ testTokenizerSingle(example, params);
198
+ }
199
+ }
200
+ function testParserSingle(str, parser, outputFormatter) {
201
+ console.log('Input: ', str);
202
+ try {
203
+ const response = parser.parse();
204
+ // console.log('Tokens: ', parser.getTokens());
205
+ if (response.clauses && response.clauses.length > 0) {
206
+ if (outputFormatter) {
207
+ console.log('Output: ', outputFormatter(response.clauses));
208
+ }
209
+ else {
210
+ console.log('Output: ', ...response.clauses);
211
+ }
212
+ }
213
+ if (response.errors && response.errors.length > 0) {
214
+ console.log('Errors: ', ...response.errors);
215
+ }
216
+ }
217
+ catch (ex) {
218
+ if (ex instanceof Error)
219
+ console.error('Thrown Error: ', ex.message);
220
+ else {
221
+ console.error('Thrown Unknown error: ', ex);
222
+ }
223
+ }
224
+ console.log('');
225
+ }
226
+ function testSerializerRoundtrip(str, parser, serializerFunc) {
227
+ console.log('Input: ' + str);
228
+ try {
229
+ const response = parser.parse();
230
+ // console.log('Clause: ', ...response.clauses, '\n');
231
+ if (response.clauses && response.clauses.length > 0) {
232
+ const result = serializerFunc(response.clauses || []).serialize();
233
+ console.log('Output: ' + result);
234
+ }
235
+ if (response.errors && response.errors.length > 0) {
236
+ console.log('Errors: ', ...response.errors);
237
+ }
238
+ }
239
+ catch (ex) {
240
+ if (ex instanceof Error)
241
+ console.error('Thrown Error: ', ex.message);
242
+ else {
243
+ console.error('Thrown Unknown error: ', ex);
244
+ }
245
+ }
246
+ console.log('');
247
+ }
248
+ function testNumberParser() {
249
+ for (const example of numberExamples) {
250
+ const parser = new number_parser_1.NumberParser(example);
251
+ testParserSingle(example, parser);
252
+ }
253
+ }
254
+ function testStringParser() {
255
+ for (const example of stringExamples) {
256
+ const parser = new string_parser_1.StringParser(example);
257
+ testParserSingle(example, parser);
258
+ }
259
+ }
260
+ function testBooleanParser() {
261
+ for (const example of booleanExamples) {
262
+ const parser = new boolean_parser_1.BooleanParser(example);
263
+ testParserSingle(example, parser);
264
+ }
265
+ }
266
+ function jsonFormatter(clauses) {
267
+ let str = '';
268
+ for (const clause of clauses) {
269
+ str += JSON.stringify(clause, null, ' ');
270
+ }
271
+ return str;
272
+ }
273
+ function testDateParser() {
274
+ for (const example of dateExamples) {
275
+ const parser = new date_parser_1.DateParser(example);
276
+ testParserSingle(example, parser);
277
+ //testParserSingle(example, parser, jsonFormatter);
278
+ }
279
+ }
280
+ function testNumberSerializer() {
281
+ const examples = [
282
+ [{ operator: '>', value: 10 }],
283
+ [{ startOperator: '>=', startValue: 20, endOperator: '<=', endValue: 30 }],
284
+ ];
285
+ for (const example of numberExamples) {
286
+ testSerializerRoundtrip(example, new number_parser_1.NumberParser(example), clauses => new number_serializer_1.NumberSerializer(clauses));
287
+ }
288
+ }
289
+ function testStringSerializer() {
290
+ for (const example of stringExamples) {
291
+ testSerializerRoundtrip(example, new string_parser_1.StringParser(example), clauses => new string_serializer_1.StringSerializer(clauses));
292
+ }
293
+ }
294
+ function testBooleanSerializer() {
295
+ const examples = [[{ operator: 'TRUE' }]];
296
+ for (const example of booleanExamples) {
297
+ testSerializerRoundtrip(example, new boolean_parser_1.BooleanParser(example), clauses => new boolean_serializer_1.BooleanSerializer(clauses));
298
+ }
299
+ }
300
+ function testDateSerializer() {
301
+ const examples = [
302
+ [{ prefix: 'BEFORE', values: [{ type: 'day', value: 'yesterday' }] }],
303
+ [
304
+ {
305
+ start: [{ type: 'day', value: 'today' }],
306
+ operator: 'TO',
307
+ end: [{ type: 'day', value: 'tomorrow' }],
308
+ },
309
+ ],
310
+ [{ type: 'day', value: 'today' }],
311
+ ];
312
+ for (const example of dateExamples) {
313
+ testSerializerRoundtrip(example, new date_parser_1.DateParser(example), clauses => new date_serializer_1.DateSerializer(clauses));
314
+ }
315
+ }
316
+ function printHeader(title) {
317
+ console.log('\n-------------------------------------------------------------------------');
318
+ console.log('## ', title, '\n');
319
+ }
320
+ // Comment or uncomment the following function calls to disable/enable examples.
321
+ function generateSamples() {
322
+ //printHeader('Tokenizer');
323
+ //testTokenizerString();
324
+ //testTokenizerNumber();
325
+ //testTokenizerMatchTypes();
326
+ //printHeader('Numbers');
327
+ //testNumberParser();
328
+ //printHeader('Strings');
329
+ //testStringParser();
330
+ //printHeader('Booleans');
331
+ //testBooleanParser();
332
+ //printHeader('Dates and Times');
333
+ //testDateParser();
334
+ printHeader('Number Serializer');
335
+ testNumberSerializer();
336
+ printHeader('String Serializer');
337
+ testStringSerializer();
338
+ printHeader('Boolean Serializer');
339
+ testBooleanSerializer();
340
+ printHeader('Date and Time Serializer');
341
+ testDateSerializer();
342
+ }
343
+ generateSamples();
344
+ //# sourceMappingURL=generate_samples.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generate_samples.js","sourceRoot":"","sources":["../src/generate_samples.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,20 @@
1
+ import { BaseParser } from './base_parser';
2
+ import { FilterParserResponse } from './filter_types';
3
+ export declare class NumberParser extends BaseParser {
4
+ constructor(input: string);
5
+ private tokenize;
6
+ parse(): FilterParserResponse;
7
+ private static groupClauses;
8
+ private matchTokens;
9
+ private checkRange;
10
+ private isRangeStart;
11
+ private static parseNumber;
12
+ private static isValidNumber;
13
+ private consumeRange;
14
+ private static getNegatedType;
15
+ private static getNumberOperator;
16
+ private static getNumberRnageOperator;
17
+ private checkNumericExpression;
18
+ private checkSimpleNumber;
19
+ private checkNull;
20
+ }
@@ -0,0 +1,275 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.NumberParser = void 0;
4
+ const tokenizer_1 = require("./tokenizer");
5
+ const base_parser_1 = require("./base_parser");
6
+ class NumberParser extends base_parser_1.BaseParser {
7
+ constructor(input) {
8
+ super(input);
9
+ }
10
+ tokenize() {
11
+ const specialSubstrings = [
12
+ { type: ',', value: ',' },
13
+ { type: '[', value: '[' },
14
+ { type: ']', value: ']' },
15
+ { type: '(', value: '(' },
16
+ { type: ')', value: ')' },
17
+ { type: '<=', value: '<=' },
18
+ { type: '>=', value: '>=' },
19
+ { type: '!=', value: '!=' },
20
+ { type: '=', value: '=' },
21
+ { type: '>', value: '>' },
22
+ { type: '<', value: '<' },
23
+ ];
24
+ const specialWords = [
25
+ { type: 'NOTNULL', value: '-null', ignoreCase: true },
26
+ { type: 'NULL', value: 'null', ignoreCase: true },
27
+ ];
28
+ const params = {
29
+ trimWordWhitespace: true,
30
+ combineAdjacentWords: false,
31
+ splitOnWhitespace: true,
32
+ specialSubstrings,
33
+ specialWords,
34
+ };
35
+ const tokenizer = new tokenizer_1.Tokenizer(this.inputString, params);
36
+ this.tokens = tokenizer.parse();
37
+ }
38
+ parse() {
39
+ this.index = 0;
40
+ this.tokenize();
41
+ let clauses = [];
42
+ const errors = [];
43
+ while (this.index < this.tokens.length) {
44
+ const token = this.getNext();
45
+ if (token.type === ',') {
46
+ this.index++;
47
+ }
48
+ else if (this.isRangeStart(this.index)) {
49
+ clauses = this.checkRange(token, false, clauses, errors);
50
+ }
51
+ else if (token.type === '!=' && this.isRangeStart(this.index + 1)) {
52
+ this.index++;
53
+ clauses = this.checkRange(token, true, clauses, errors);
54
+ }
55
+ else if (this.checkNull(clauses)) {
56
+ this.index++;
57
+ }
58
+ else if (this.checkNumericExpression('<=', clauses) ||
59
+ this.checkNumericExpression('>=', clauses) ||
60
+ this.checkNumericExpression('<', clauses) ||
61
+ this.checkNumericExpression('>', clauses) ||
62
+ this.checkNumericExpression('!=', clauses) ||
63
+ this.checkNumericExpression('=', clauses)) {
64
+ this.index += 2;
65
+ }
66
+ else if (this.checkSimpleNumber(clauses)) {
67
+ this.index++;
68
+ }
69
+ else {
70
+ errors.push({
71
+ message: 'Invalid expression',
72
+ startIndex: token.startIndex,
73
+ endIndex: token.endIndex,
74
+ });
75
+ this.index++;
76
+ }
77
+ }
78
+ return { clauses: NumberParser.groupClauses(clauses), errors };
79
+ }
80
+ static groupClauses(clauses) {
81
+ if (clauses.length < 2) {
82
+ return clauses;
83
+ }
84
+ let previous = undefined;
85
+ const outputs = [];
86
+ for (let i = 0; i < clauses.length; i++) {
87
+ const clause = clauses[i];
88
+ if (clause.operator === 'range') {
89
+ previous = undefined;
90
+ outputs.push(clause);
91
+ }
92
+ else if (previous !== undefined &&
93
+ previous.operator === clause.operator) {
94
+ previous.values.push(...clause.values);
95
+ }
96
+ else {
97
+ previous = clause;
98
+ outputs.push(clause);
99
+ }
100
+ }
101
+ return outputs;
102
+ }
103
+ matchTokens(candidates) {
104
+ return base_parser_1.BaseParser.matchTokenTypes(candidates, this.index, this.tokens);
105
+ }
106
+ checkRange(token, negated, clauses, errors) {
107
+ if (this.matchTokens(['[', 'word', ',', 'word', ']'])) {
108
+ return negated
109
+ ? this.consumeRange('<', '>', clauses, errors)
110
+ : this.consumeRange('>=', '<=', clauses, errors);
111
+ }
112
+ else if (this.matchTokens(['[', 'word', ',', 'word', ')'])) {
113
+ return negated
114
+ ? this.consumeRange('<', '>=', clauses, errors)
115
+ : this.consumeRange('>=', '<', clauses, errors);
116
+ }
117
+ else if (this.matchTokens(['(', 'word', ',', 'word', ']'])) {
118
+ return negated
119
+ ? this.consumeRange('<=', '>', clauses, errors)
120
+ : this.consumeRange('>', '<=', clauses, errors);
121
+ }
122
+ else if (this.matchTokens(['(', 'word', ',', 'word', ')'])) {
123
+ return negated
124
+ ? this.consumeRange('<=', '>=', clauses, errors)
125
+ : this.consumeRange('>', '<', clauses, errors);
126
+ }
127
+ else {
128
+ errors.push({
129
+ message: 'Invalid range expression',
130
+ startIndex: token.startIndex,
131
+ endIndex: token.endIndex,
132
+ });
133
+ this.index++;
134
+ }
135
+ return clauses;
136
+ }
137
+ isRangeStart(position) {
138
+ if (position < 0 || position >= this.tokens.length) {
139
+ return false;
140
+ }
141
+ const tokenType = this.tokens[position].type;
142
+ return tokenType === '[' || tokenType === '(';
143
+ }
144
+ static parseNumber(value) {
145
+ if (value.toUpperCase() === 'inf') {
146
+ return Infinity;
147
+ }
148
+ else if (value.toUpperCase() === '-inf') {
149
+ return -Infinity;
150
+ }
151
+ else {
152
+ return Number(value);
153
+ }
154
+ }
155
+ static isValidNumber(value) {
156
+ return Number.isNaN(value) === false;
157
+ }
158
+ consumeRange(startOperator, endOperator, clauses, errors) {
159
+ const startToken = this.getAt(this.index + 1);
160
+ const endToken = this.getAt(this.index + 3);
161
+ const startValue = NumberParser.parseNumber(startToken.value);
162
+ const endValue = NumberParser.parseNumber(endToken.value);
163
+ if (!NumberParser.isValidNumber(startValue)) {
164
+ errors.push({
165
+ message: 'Invalid number',
166
+ startIndex: startToken.startIndex,
167
+ endIndex: startToken.endIndex,
168
+ });
169
+ }
170
+ else if (!NumberParser.isValidNumber(endValue)) {
171
+ errors.push({
172
+ message: 'Invalid number',
173
+ startIndex: endToken.startIndex,
174
+ endIndex: endToken.endIndex,
175
+ });
176
+ }
177
+ else {
178
+ const clause = {
179
+ operator: 'range',
180
+ startOperator: startOperator,
181
+ startValue: startValue,
182
+ endOperator: endOperator,
183
+ endValue: endValue,
184
+ };
185
+ clauses.push(clause);
186
+ }
187
+ this.index += 5;
188
+ return clauses;
189
+ }
190
+ static getNegatedType(tokenType) {
191
+ switch (tokenType) {
192
+ case '<=':
193
+ return '>';
194
+ case '>=':
195
+ return '<';
196
+ case '<':
197
+ return '>';
198
+ case '>':
199
+ return '<';
200
+ case '=':
201
+ return '!=';
202
+ case '!=':
203
+ return '=';
204
+ }
205
+ }
206
+ static getNumberOperator(tokenType) {
207
+ switch (tokenType) {
208
+ case '<=':
209
+ return '<=';
210
+ case '>=':
211
+ return '>=';
212
+ case '<':
213
+ return '<';
214
+ case '>':
215
+ return '>';
216
+ case '=':
217
+ return '=';
218
+ case '!=':
219
+ return '!=';
220
+ }
221
+ return undefined;
222
+ }
223
+ static getNumberRnageOperator(tokenType) {
224
+ switch (tokenType) {
225
+ case '<=':
226
+ return '<=';
227
+ case '>=':
228
+ return '>=';
229
+ case '<':
230
+ return '<';
231
+ case '>':
232
+ return '>';
233
+ }
234
+ return undefined;
235
+ }
236
+ checkNumericExpression(tokenType, clauses) {
237
+ if (this.getNext().type === tokenType &&
238
+ this.index < this.tokens.length - 1) {
239
+ const numericValue = NumberParser.parseNumber(this.getAt(this.index + 1).value);
240
+ if (!NumberParser.isValidNumber(numericValue)) {
241
+ return false;
242
+ }
243
+ const clause = {
244
+ operator: tokenType,
245
+ values: [numericValue],
246
+ };
247
+ clauses.push(clause);
248
+ return true;
249
+ }
250
+ return false;
251
+ }
252
+ checkSimpleNumber(clauses) {
253
+ if (this.getNext().type === 'word') {
254
+ const numericValue = NumberParser.parseNumber(this.getAt(this.index).value);
255
+ if (!NumberParser.isValidNumber(numericValue)) {
256
+ return false;
257
+ }
258
+ const clause = { operator: '=', values: [numericValue] };
259
+ clauses.push(clause);
260
+ return true;
261
+ }
262
+ return false;
263
+ }
264
+ checkNull(clauses) {
265
+ if (this.getNext().type === 'NULL' || this.getNext().type === 'NOTNULL') {
266
+ const tokenType = this.getNext().type === 'NULL' ? '=' : '!=';
267
+ const clause = { operator: tokenType, values: [null] };
268
+ clauses.push(clause);
269
+ return true;
270
+ }
271
+ return false;
272
+ }
273
+ }
274
+ exports.NumberParser = NumberParser;
275
+ //# sourceMappingURL=number_parser.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"number_parser.js","sourceRoot":"","sources":["../src/number_parser.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ import { Clause } from './clause_types';
2
+ import { BaseSerializer } from './base_serializer';
3
+ export declare class NumberSerializer extends BaseSerializer {
4
+ constructor(clauses: Clause[]);
5
+ serialize(): string;
6
+ private static numberConditionToString;
7
+ private static getNegatedType;
8
+ private static isNumberOperator;
9
+ private static rangeToString;
10
+ private static clauseToString;
11
+ }