@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,315 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.DateParser = void 0;
4
+ const tokenizer_1 = require("./tokenizer");
5
+ const base_parser_1 = require("./base_parser");
6
+ class DateParser extends base_parser_1.BaseParser {
7
+ constructor(input) {
8
+ super(input);
9
+ }
10
+ tokenize() {
11
+ const specialSubstrings = [{ type: ',', value: ',' }];
12
+ const specialWords = [
13
+ {
14
+ type: 'UNITOFTIME',
15
+ value: /^(second|minute|hour|day|week|month|quarter|year)s?$/i,
16
+ ignoreCase: true,
17
+ },
18
+ {
19
+ type: 'DAYOFWEEK',
20
+ value: /^(monday|tuesday|wednesday|thursday|friday|saturday|sunday)$/i,
21
+ ignoreCase: true,
22
+ },
23
+ { type: 'DATE', value: /^\d\d\d\d-\d\d-\d\d$/ },
24
+ { type: 'DATE', value: /^\d\d\d\d-\d\d$/ },
25
+ { type: 'TIME', value: /^\d\d:\d\d:\d\d\.\d+$/ },
26
+ { type: 'TIME', value: /^\d\d:\d\d:\d\d$/ },
27
+ { type: 'TIME', value: /^\d\d:\d\d$/ },
28
+ { type: 'NOTNULL', value: '-null', ignoreCase: true },
29
+ { type: 'NULL', value: 'null', ignoreCase: true },
30
+ { type: 'PREFIX', value: /^(before|after)/i, ignoreCase: true },
31
+ { type: 'TODAY', value: 'today', ignoreCase: true },
32
+ { type: 'YESTERDAY', value: 'yesterday', ignoreCase: true },
33
+ { type: 'TOMORROW', value: 'tomorrow', ignoreCase: true },
34
+ { type: 'NOW', value: 'now', ignoreCase: true },
35
+ { type: 'THIS', value: 'this', ignoreCase: true },
36
+ { type: 'LAST', value: 'last', ignoreCase: true },
37
+ { type: 'NEXT', value: 'next', ignoreCase: true },
38
+ { type: 'AGO', value: 'ago', ignoreCase: true },
39
+ { type: 'FROM', value: 'from', ignoreCase: true },
40
+ { type: 'FOR', value: 'for', ignoreCase: true },
41
+ { type: 'TO', value: 'to', ignoreCase: true },
42
+ { type: 'YEARORNUMBER', value: /^\d\d\d\d$/ },
43
+ { type: 'NUMBER', value: /^[\d.]+/, ignoreCase: true },
44
+ ];
45
+ const params = {
46
+ trimWordWhitespace: true,
47
+ splitOnWhitespace: true,
48
+ specialSubstrings,
49
+ specialWords,
50
+ };
51
+ const tokenizer = new tokenizer_1.Tokenizer(this.inputString, params);
52
+ this.tokens = tokenizer.parse();
53
+ // console.log('Tokens before moments ', ...this.tokens);
54
+ this.tokens = this.mergeMomentTokens();
55
+ }
56
+ mergeMomentTokens() {
57
+ const output = [];
58
+ this.index = 0;
59
+ while (this.index < this.tokens.length) {
60
+ if (this.matchAndMerge('LAST|UNITOFTIME', this.tokens, output) ||
61
+ this.matchAndMerge('LAST|DAYOFWEEK', this.tokens, output) ||
62
+ this.matchAndMerge('LAST|NUMBER|UNITOFTIME', this.tokens, output) ||
63
+ this.matchAndMerge('LAST|YEARORNUMBER|UNITOFTIME', this.tokens, output) ||
64
+ this.matchAndMerge('THIS|UNITOFTIME', this.tokens, output) ||
65
+ this.matchAndMerge('NEXT|UNITOFTIME', this.tokens, output) ||
66
+ this.matchAndMerge('NEXT|DAYOFWEEK', this.tokens, output) ||
67
+ this.matchAndMerge('NEXT|NUMBER|UNITOFTIME', this.tokens, output) ||
68
+ this.matchAndMerge('NEXT|YEARORNUMBER|UNITOFTIME', this.tokens, output) ||
69
+ this.matchAndMerge('NUMBER|UNITOFTIME|AGO', this.tokens, output) ||
70
+ this.matchAndMerge('YEARORNUMBER|UNITOFTIME|AGO', this.tokens, output) ||
71
+ this.matchAndMerge('NUMBER|UNITOFTIME|FROM|NOW', this.tokens, output) ||
72
+ this.matchAndMerge('YEARORNUMBER|UNITOFTIME|FROM|NOW', this.tokens, output) ||
73
+ this.matchAndMerge('NUMBER|UNITOFTIME', this.tokens, output) ||
74
+ this.matchAndMerge('YEARORNUMBER|UNITOFTIME', this.tokens, output) ||
75
+ this.matchAndMerge('DATE|TIME', this.tokens, output) ||
76
+ this.matchAndMerge('TODAY', this.tokens, output) ||
77
+ this.matchAndMerge('YESTERDAY', this.tokens, output) ||
78
+ this.matchAndMerge('TOMORROW', this.tokens, output) ||
79
+ this.matchAndMerge('DATE', this.tokens, output) ||
80
+ this.matchAndMerge('YEARORNUMBER', this.tokens, output) ||
81
+ this.matchAndMerge('NOW', this.tokens, output)) {
82
+ continue;
83
+ }
84
+ else {
85
+ output.push(this.tokens[this.index]);
86
+ this.index++;
87
+ }
88
+ }
89
+ return output;
90
+ }
91
+ matchAndMerge(types, tokens, output) {
92
+ const idx = this.index;
93
+ const matchedTokens = tokenizer_1.Tokenizer.matchTypes(types, tokens, idx);
94
+ if (matchedTokens) {
95
+ output.push({
96
+ type: 'MOMENT:' + types,
97
+ value: '',
98
+ values: matchedTokens,
99
+ startIndex: matchedTokens[0].startIndex,
100
+ endIndex: matchedTokens[matchedTokens.length - 1].endIndex,
101
+ });
102
+ this.index += matchedTokens.length;
103
+ return true;
104
+ }
105
+ return false;
106
+ }
107
+ parse() {
108
+ this.tokenize();
109
+ let prefix = undefined;
110
+ const clauses = [];
111
+ const errors = [];
112
+ this.index = 0;
113
+ while (this.index < this.tokens.length) {
114
+ const token = this.getNext();
115
+ if (token.type === ',') {
116
+ if (prefix) {
117
+ errors.push({
118
+ message: 'Invalid ' + prefix,
119
+ startIndex: token.startIndex,
120
+ endIndex: token.endIndex,
121
+ });
122
+ }
123
+ this.index++;
124
+ }
125
+ else if (token.type === 'PREFIX') {
126
+ prefix = token.value;
127
+ this.index++;
128
+ }
129
+ else if (this.handleRange(clauses)) {
130
+ if (prefix) {
131
+ errors.push({
132
+ message: 'Invalid ' + prefix,
133
+ startIndex: token.startIndex,
134
+ endIndex: token.endIndex,
135
+ });
136
+ this.index++;
137
+ }
138
+ }
139
+ else if (this.handleMoment(prefix, clauses)) {
140
+ prefix = undefined;
141
+ }
142
+ else {
143
+ errors.push({
144
+ message: 'Invalid token ' + token.value,
145
+ startIndex: token.startIndex,
146
+ endIndex: token.endIndex,
147
+ });
148
+ prefix = undefined;
149
+ this.index++;
150
+ }
151
+ }
152
+ return { clauses, errors };
153
+ }
154
+ // LAST|DAYOFWEEK
155
+ static createMomentInterval(prefix, tokens) {
156
+ const operator = tokens[0]
157
+ .type;
158
+ const unit = tokens[1].value;
159
+ const moment = { operator, unit };
160
+ if (prefix) {
161
+ moment.prefix = prefix;
162
+ }
163
+ return moment;
164
+ }
165
+ // LAST|NUMBER|UNITOFTIME
166
+ static createMomentNumberInterval(prefix, tokens) {
167
+ const type0 = tokens[0].type;
168
+ const operator = type0 === 'LAST' ? 'LASTN' : 'NEXTN';
169
+ const value = tokens[1].value;
170
+ const unit = tokens[2].value;
171
+ const moment = { operator, value, unit };
172
+ if (prefix) {
173
+ moment.prefix = prefix;
174
+ }
175
+ return moment;
176
+ }
177
+ // NUMBER|UNITOFTIME|AGO
178
+ static createMomentNumberIntervalAgo(prefix, tokens) {
179
+ const operator = 'AGO';
180
+ const value = tokens[0].value;
181
+ const unit = tokens[1].value;
182
+ const moment = { operator, value, unit };
183
+ if (prefix) {
184
+ moment.prefix = prefix;
185
+ }
186
+ return moment;
187
+ }
188
+ // NUMBER|UNITOFTIME|FROM|NOW
189
+ static createMomentNumberIntervalFromNow(prefix, tokens) {
190
+ const operator = 'FROMNOW';
191
+ const value = tokens[0].value;
192
+ const unit = tokens[1].value;
193
+ const moment = { operator, value, unit };
194
+ if (prefix) {
195
+ moment.prefix = prefix;
196
+ }
197
+ return moment;
198
+ }
199
+ // NUMBER|UNITOFTIME
200
+ static createMomentNumberUnit(prefix, tokens) {
201
+ const operator = 'TIMEBLOCK';
202
+ const value = tokens[0].value;
203
+ const unit = tokens[1].value;
204
+ const moment = { operator, value, unit };
205
+ if (prefix) {
206
+ moment.prefix = prefix;
207
+ }
208
+ return moment;
209
+ }
210
+ // DATE DATE|TIME
211
+ static createMomentNumber(prefix, tokens) {
212
+ const operator = tokens.length === 2 ? 'DATETIME' : 'DATE';
213
+ const moment = { operator, date: tokens[0].value };
214
+ if (tokens.length === 2) {
215
+ moment.time = tokens[1].value;
216
+ }
217
+ if (prefix) {
218
+ moment.prefix = prefix;
219
+ }
220
+ return moment;
221
+ }
222
+ // NOW YESTERDAY TODAY TOMORROW
223
+ static createMomentNow(prefix, tokens) {
224
+ const operator = tokens[0]
225
+ .type;
226
+ const moment = { operator };
227
+ if (prefix) {
228
+ moment.prefix = prefix;
229
+ }
230
+ return moment;
231
+ }
232
+ static createMomentFromToken(prefix, token) {
233
+ const tokens = token.values || [];
234
+ switch (token.type) {
235
+ case 'MOMENT:LAST|UNITOFTIME':
236
+ case 'MOMENT:LAST|DAYOFWEEK':
237
+ case 'MOMENT:THIS|UNITOFTIME':
238
+ case 'MOMENT:NEXT|UNITOFTIME':
239
+ case 'MOMENT:NEXT|DAYOFWEEK':
240
+ return this.createMomentInterval(prefix, tokens);
241
+ case 'MOMENT:LAST|NUMBER|UNITOFTIME':
242
+ case 'MOMENT:LAST|YEARORNUMBER|UNITOFTIME':
243
+ case 'MOMENT:NEXT|NUMBER|UNITOFTIME':
244
+ case 'MOMENT:NEXT|YEARORNUMBER|UNITOFTIME':
245
+ return this.createMomentNumberInterval(prefix, tokens);
246
+ case 'MOMENT:NUMBER|UNITOFTIME|AGO':
247
+ case 'MOMENT:YEARORNUMBER|UNITOFTIME|AGO':
248
+ return this.createMomentNumberIntervalAgo(prefix, tokens);
249
+ case 'MOMENT:NUMBER|UNITOFTIME|FROM|NOW':
250
+ case 'MOMENT:YEARORNUMBER|UNITOFTIME|FROM|NOW':
251
+ return this.createMomentNumberIntervalFromNow(prefix, tokens);
252
+ case 'MOMENT:NUMBER|UNITOFTIME':
253
+ case 'MOMENT:YEARORNUMBER|UNITOFTIME':
254
+ return this.createMomentNumberUnit(prefix, tokens);
255
+ case 'MOMENT:DATE|TIME':
256
+ case 'MOMENT:DATE':
257
+ case 'MOMENT:YEARORNUMBER':
258
+ return this.createMomentNumber(prefix, tokens);
259
+ case 'MOMENT:NOW':
260
+ case 'MOMENT:TODAY':
261
+ case 'MOMENT:YESTERDAY':
262
+ case 'MOMENT:TOMORROW':
263
+ return this.createMomentNow(prefix, tokens);
264
+ default:
265
+ return undefined;
266
+ }
267
+ }
268
+ isMatchingToken(position, value, exactMatch) {
269
+ if (position < 0 || position >= this.tokens.length) {
270
+ return false;
271
+ }
272
+ return exactMatch
273
+ ? this.tokens[position].type === value
274
+ : this.tokens[position].type.startsWith(value);
275
+ }
276
+ handleRange(clauses) {
277
+ if (this.isMatchingToken(this.index, 'MOMENT', false) &&
278
+ (this.isMatchingToken(this.index + 1, 'TO', true) ||
279
+ this.isMatchingToken(this.index + 1, 'FOR', true)) &&
280
+ this.isMatchingToken(this.index + 2, 'MOMENT', false)) {
281
+ const startMoment = DateParser.createMomentFromToken(undefined, this.tokens[this.index]);
282
+ const endMoment = DateParser.createMomentFromToken(undefined, this.tokens[this.index + 2]);
283
+ const operator = this.tokens[this.index + 1].type;
284
+ this.index += 3;
285
+ if (startMoment === undefined || endMoment === undefined) {
286
+ return false;
287
+ }
288
+ const dateRange = {
289
+ start: startMoment,
290
+ operator,
291
+ end: endMoment,
292
+ };
293
+ clauses.push(dateRange);
294
+ return true;
295
+ }
296
+ return false;
297
+ }
298
+ handleMoment(prefix, clauses) {
299
+ const token = this.getNext();
300
+ if (token.type.startsWith('MOMENT')) {
301
+ const clause = DateParser.createMomentFromToken(prefix, token);
302
+ this.index++;
303
+ if (clause === undefined) {
304
+ return false;
305
+ }
306
+ clauses.push(clause);
307
+ return true;
308
+ }
309
+ return false;
310
+ }
311
+ }
312
+ exports.DateParser = DateParser;
313
+ DateParser.yearRegex = /[%_]/;
314
+ DateParser.negatedStartRegex = /^-(.+)$/;
315
+ //# sourceMappingURL=date_parser.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"date_parser.js","sourceRoot":"","sources":["../src/date_parser.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ import { Clause } from './clause_types';
2
+ import { BaseSerializer } from './base_serializer';
3
+ export declare class DateSerializer extends BaseSerializer {
4
+ constructor(clauses: Clause[]);
5
+ serialize(): string;
6
+ private static dateMomentToString;
7
+ private static dateRangeToString;
8
+ private static clauseToString;
9
+ private static clausesToString;
10
+ }
@@ -0,0 +1,100 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.DateSerializer = void 0;
4
+ const base_serializer_1 = require("./base_serializer");
5
+ class DateSerializer extends base_serializer_1.BaseSerializer {
6
+ constructor(clauses) {
7
+ super(clauses);
8
+ }
9
+ serialize() {
10
+ const result = DateSerializer.clausesToString(this.clauses);
11
+ return result.trim().replace(/,$/, '');
12
+ }
13
+ static dateMomentToString(operator, clause) {
14
+ if (operator === 'NOW' ||
15
+ operator === 'TODAY' ||
16
+ operator === 'YESTERDAY' ||
17
+ operator === 'TOMORROW') {
18
+ const custom = clause;
19
+ return custom.prefix ? custom.prefix + ' ' + operator : operator;
20
+ }
21
+ else if (operator === 'LAST' ||
22
+ operator === 'THIS' ||
23
+ operator === 'NEXT') {
24
+ const custom = clause;
25
+ let value = custom.operator + ' ' + custom.unit;
26
+ if (custom.prefix) {
27
+ value = custom.prefix + ' ' + value;
28
+ }
29
+ return value;
30
+ }
31
+ else if (operator === 'LASTN' || operator === 'NEXTN') {
32
+ const custom = clause;
33
+ operator = operator.substring(0, 4); // Strip "N"
34
+ let value = operator + ' ' + custom.value + ' ' + custom.unit;
35
+ if (custom.prefix) {
36
+ value = custom.prefix + ' ' + value;
37
+ }
38
+ return value;
39
+ }
40
+ else if (operator === 'AGO' || operator === 'FROMNOW') {
41
+ const custom = clause;
42
+ if (operator === 'FROMNOW')
43
+ operator = 'FROM NOW';
44
+ let value = custom.value + ' ' + custom.unit + ' ' + operator;
45
+ if (custom.prefix) {
46
+ value = custom.prefix + ' ' + value;
47
+ }
48
+ return value;
49
+ }
50
+ else if (operator === 'TIMEBLOCK') {
51
+ const custom = clause;
52
+ let value = custom.value + ' ' + custom.unit;
53
+ if (custom.prefix) {
54
+ value = custom.prefix + ' ' + value;
55
+ }
56
+ return value;
57
+ }
58
+ else if (operator === 'DATE' || operator === 'DATETIME') {
59
+ const custom = clause;
60
+ let value = custom.date;
61
+ if (custom.time) {
62
+ value = value + ' ' + custom.time;
63
+ }
64
+ if (custom.prefix) {
65
+ value = custom.prefix + ' ' + value;
66
+ }
67
+ return value;
68
+ }
69
+ return '';
70
+ }
71
+ static dateRangeToString(operator, clause) {
72
+ return (DateSerializer.dateMomentToString(clause.start.operator, clause.start) +
73
+ ' ' +
74
+ clause.operator +
75
+ ' ' +
76
+ DateSerializer.dateMomentToString(clause.end.operator, clause.end));
77
+ }
78
+ static clauseToString(operator, clause) {
79
+ if (operator === 'TO' || operator === 'FOR') {
80
+ const custom = clause;
81
+ return DateSerializer.dateRangeToString(operator, custom);
82
+ }
83
+ return DateSerializer.dateMomentToString(operator, clause);
84
+ }
85
+ static clausesToString(clauses) {
86
+ let result = '';
87
+ for (const clause of clauses) {
88
+ if ('operator' in clause) {
89
+ result += DateSerializer.clauseToString(clause.operator, clause);
90
+ result += ', ';
91
+ }
92
+ else {
93
+ throw new Error('Invalid date clause ' + JSON.stringify(clause));
94
+ }
95
+ }
96
+ return result;
97
+ }
98
+ }
99
+ exports.DateSerializer = DateSerializer;
100
+ //# sourceMappingURL=date_serializer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"date_serializer.js","sourceRoot":"","sources":["../src/date_serializer.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ import { FilterParserResponse } from './filter_types';
2
+ import { Token } from './token_types';
3
+ export type FilterType = 'boolean' | 'number' | 'string' | 'date';
4
+ export declare class FilterParser {
5
+ private input;
6
+ private type;
7
+ constructor(input: string, type: FilterType);
8
+ private initParser;
9
+ getTokens(): Token[];
10
+ private makeErrorMessage;
11
+ parse(): FilterParserResponse;
12
+ }
@@ -0,0 +1,66 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.FilterParser = void 0;
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
+ class FilterParser {
9
+ constructor(input, type) {
10
+ this.input = input;
11
+ this.type = type;
12
+ this.input = input;
13
+ this.type = type;
14
+ }
15
+ initParser() {
16
+ switch (this.type) {
17
+ case 'boolean':
18
+ return new boolean_parser_1.BooleanParser(this.input);
19
+ case 'number':
20
+ return new number_parser_1.NumberParser(this.input);
21
+ case 'string':
22
+ return new string_parser_1.StringParser(this.input);
23
+ case 'date':
24
+ return new date_parser_1.DateParser(this.input);
25
+ }
26
+ }
27
+ /* eslint-disable no-console */
28
+ getTokens() {
29
+ let tokens = [];
30
+ try {
31
+ const parser = this.initParser();
32
+ tokens = parser.getTokens();
33
+ }
34
+ catch (ex) {
35
+ if (ex instanceof Error)
36
+ console.error('Error: ', ex.message, '\n');
37
+ else {
38
+ console.error('Unknown error: ', ex, '\n');
39
+ }
40
+ }
41
+ return tokens;
42
+ }
43
+ /* eslint-enable no-console */
44
+ makeErrorMessage(message) {
45
+ return { message, startIndex: 0, endIndex: this.input.length };
46
+ }
47
+ parse() {
48
+ try {
49
+ const parser = this.initParser();
50
+ return parser.parse();
51
+ }
52
+ catch (ex) {
53
+ if (ex instanceof Error) {
54
+ return { clauses: [], errors: [this.makeErrorMessage(ex.message)] };
55
+ }
56
+ else {
57
+ return {
58
+ clauses: [],
59
+ errors: [this.makeErrorMessage('Unknown error ' + ex)],
60
+ };
61
+ }
62
+ }
63
+ }
64
+ }
65
+ exports.FilterParser = FilterParser;
66
+ //# sourceMappingURL=filter_parser.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"filter_parser.js","sourceRoot":"","sources":["../src/filter_parser.ts"],"names":[],"mappings":";;;AAEA,qDAA+C;AAC/C,mDAA6C;AAC7C,mDAA6C;AAC7C,+CAAyC;AAKzC,MAAa,YAAY;IACvB,YACU,KAAa,EACb,IAAgB;QADhB,UAAK,GAAL,KAAK,CAAQ;QACb,SAAI,GAAJ,IAAI,CAAY;QAExB,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;QACnB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;IACnB,CAAC;IAEO,UAAU;QAChB,QAAQ,IAAI,CAAC,IAAI,EAAE;YACjB,KAAK,SAAS;gBACZ,OAAO,IAAI,8BAAa,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACvC,KAAK,QAAQ;gBACX,OAAO,IAAI,4BAAY,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACtC,KAAK,QAAQ;gBACX,OAAO,IAAI,4BAAY,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACtC,KAAK,MAAM;gBACT,OAAO,IAAI,wBAAU,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;SACrC;IACH,CAAC;IAED,+BAA+B;IACxB,SAAS;QACd,IAAI,MAAM,GAAY,EAAE,CAAC;QACzB,IAAI;YACF,MAAM,MAAM,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC;YACjC,MAAM,GAAG,MAAM,CAAC,SAAS,EAAE,CAAC;SAC7B;QAAC,OAAO,EAAmB,EAAE;YAC5B,IAAI,EAAE,YAAY,KAAK;gBAAE,OAAO,CAAC,KAAK,CAAC,SAAS,EAAE,EAAE,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;iBAC/D;gBACH,OAAO,CAAC,KAAK,CAAC,iBAAiB,EAAE,EAAE,EAAE,IAAI,CAAC,CAAC;aAC5C;SACF;QACD,OAAO,MAAM,CAAC;IAChB,CAAC;IACD,8BAA8B;IAEtB,gBAAgB,CAAC,OAAe;QACtC,OAAO,EAAC,OAAO,EAAE,UAAU,EAAE,CAAC,EAAE,QAAQ,EAAE,IAAI,CAAC,KAAK,CAAC,MAAM,EAAC,CAAC;IAC/D,CAAC;IAEM,KAAK;QACV,IAAI;YACF,MAAM,MAAM,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC;YACjC,OAAO,MAAM,CAAC,KAAK,EAAE,CAAC;SACvB;QAAC,OAAO,EAAmB,EAAE;YAC5B,IAAI,EAAE,YAAY,KAAK,EAAE;gBACvB,OAAO,EAAC,OAAO,EAAE,EAAE,EAAE,MAAM,EAAE,CAAC,IAAI,CAAC,gBAAgB,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC,EAAC,CAAC;aACnE;iBAAM;gBACL,OAAO;oBACL,OAAO,EAAE,EAAE;oBACX,MAAM,EAAE,CAAC,IAAI,CAAC,gBAAgB,CAAC,gBAAgB,GAAG,EAAE,CAAC,CAAC;iBACvD,CAAC;aACH;SACF;IACH,CAAC;CACF;AAzDD,oCAyDC"}
@@ -0,0 +1,13 @@
1
+ import { Clause } from './clause_types';
2
+ export type FilterType = 'boolean' | 'number' | 'string' | 'date';
3
+ export interface FilterSerializerResponse {
4
+ result: string;
5
+ error?: string;
6
+ }
7
+ export declare class FilterSerializer {
8
+ private input;
9
+ private type;
10
+ constructor(input: Clause[], type: FilterType);
11
+ private initSerializer;
12
+ serialize(): FilterSerializerResponse;
13
+ }
@@ -0,0 +1,43 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.FilterSerializer = void 0;
4
+ const boolean_serializer_1 = require("./boolean_serializer");
5
+ const string_serializer_1 = require("./string_serializer");
6
+ const number_serializer_1 = require("./number_serializer");
7
+ const date_serializer_1 = require("./date_serializer");
8
+ class FilterSerializer {
9
+ constructor(input, type) {
10
+ this.input = input;
11
+ this.type = type;
12
+ this.input = input;
13
+ this.type = type;
14
+ }
15
+ initSerializer() {
16
+ switch (this.type) {
17
+ case 'boolean':
18
+ return new boolean_serializer_1.BooleanSerializer(this.input);
19
+ case 'number':
20
+ return new number_serializer_1.NumberSerializer(this.input);
21
+ case 'string':
22
+ return new string_serializer_1.StringSerializer(this.input);
23
+ case 'date':
24
+ return new date_serializer_1.DateSerializer(this.input);
25
+ }
26
+ }
27
+ serialize() {
28
+ try {
29
+ const serializer = this.initSerializer();
30
+ return { result: serializer.serialize() };
31
+ }
32
+ catch (ex) {
33
+ if (ex instanceof Error) {
34
+ return { result: '', error: ex.message };
35
+ }
36
+ else {
37
+ return { result: '', error: 'Unknown error ' + ex };
38
+ }
39
+ }
40
+ }
41
+ }
42
+ exports.FilterSerializer = FilterSerializer;
43
+ //# sourceMappingURL=filter_serializer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"filter_serializer.js","sourceRoot":"","sources":["../src/filter_serializer.ts"],"names":[],"mappings":";;;AACA,6DAAuD;AACvD,2DAAqD;AACrD,2DAAqD;AACrD,uDAAiD;AAUjD,MAAa,gBAAgB;IAC3B,YACU,KAAe,EACf,IAAgB;QADhB,UAAK,GAAL,KAAK,CAAU;QACf,SAAI,GAAJ,IAAI,CAAY;QAExB,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;QACnB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;IACnB,CAAC;IAEO,cAAc;QACpB,QAAQ,IAAI,CAAC,IAAI,EAAE;YACjB,KAAK,SAAS;gBACZ,OAAO,IAAI,sCAAiB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YAC3C,KAAK,QAAQ;gBACX,OAAO,IAAI,oCAAgB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YAC1C,KAAK,QAAQ;gBACX,OAAO,IAAI,oCAAgB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YAC1C,KAAK,MAAM;gBACT,OAAO,IAAI,gCAAc,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;SACzC;IACH,CAAC;IAEM,SAAS;QACd,IAAI;YACF,MAAM,UAAU,GAAG,IAAI,CAAC,cAAc,EAAE,CAAC;YACzC,OAAO,EAAC,MAAM,EAAE,UAAU,CAAC,SAAS,EAAE,EAAC,CAAC;SACzC;QAAC,OAAO,EAAmB,EAAE;YAC5B,IAAI,EAAE,YAAY,KAAK,EAAE;gBACvB,OAAO,EAAC,MAAM,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,CAAC,OAAO,EAAC,CAAC;aACxC;iBAAM;gBACL,OAAO,EAAC,MAAM,EAAE,EAAE,EAAE,KAAK,EAAE,gBAAgB,GAAG,EAAE,EAAC,CAAC;aACnD;SACF;IACH,CAAC;CACF;AAlCD,4CAkCC"}
@@ -0,0 +1,10 @@
1
+ import { Clause } from './clause_types';
2
+ export interface FilterError {
3
+ message: string;
4
+ startIndex: number;
5
+ endIndex: number;
6
+ }
7
+ export interface FilterParserResponse {
8
+ clauses: Clause[];
9
+ errors: FilterError[];
10
+ }
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=filter_types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"filter_types.js","sourceRoot":"","sources":["../src/filter_types.ts"],"names":[],"mappings":""}
@@ -0,0 +1 @@
1
+ export {};