@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,263 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Tokenizer = void 0;
4
+ class Tokenizer {
5
+ constructor(input, params) {
6
+ this.index = 0;
7
+ this.specialSubstrings = params.specialSubstrings;
8
+ this.specialWords = params.specialWords;
9
+ this.params = params;
10
+ this.input = input;
11
+ }
12
+ tokenize() {
13
+ let tokens = [];
14
+ let wordStart = -1;
15
+ let wordEnd = -1;
16
+ let special;
17
+ while (this.hasMoreInput()) {
18
+ if (this.params.splitOnWhitespace && this.isWhitespace(this.index)) {
19
+ this.maybeConsumeWord(wordStart, wordEnd, tokens);
20
+ wordStart = -1;
21
+ this.consumeWhitespace();
22
+ }
23
+ else if (this.input[this.index] === '\\') {
24
+ if (wordStart === -1) {
25
+ wordStart = this.index;
26
+ }
27
+ wordEnd = this.index;
28
+ this.index++;
29
+ if (this.hasMoreInput()) {
30
+ // Unless backslash is at the end, handle next char.
31
+ wordEnd = this.index;
32
+ this.index++;
33
+ }
34
+ }
35
+ else if ((special = this.isSpecialSubstring())) {
36
+ this.maybeConsumeWord(wordStart, wordEnd, tokens);
37
+ wordStart = -1;
38
+ this.consumeSpecialSubstring(special, tokens);
39
+ }
40
+ else {
41
+ if (wordStart === -1) {
42
+ wordStart = this.index;
43
+ }
44
+ wordEnd = this.index;
45
+ this.index++;
46
+ }
47
+ }
48
+ this.maybeConsumeWord(wordStart, wordEnd, tokens);
49
+ tokens = Tokenizer.convertSpecialWords(tokens, this.specialWords);
50
+ if (this.params.combineAdjacentWords) {
51
+ tokens = Tokenizer.combineAdjacentWords(tokens);
52
+ }
53
+ if (this.params.trimWordWhitespace) {
54
+ tokens = Tokenizer.trimWordWhitespace(tokens);
55
+ }
56
+ return tokens;
57
+ }
58
+ parse() {
59
+ let tokens = this.tokenize();
60
+ if (this.params.trimWordWhitespace) {
61
+ tokens = Tokenizer.trimWordWhitespace(tokens);
62
+ }
63
+ return tokens;
64
+ }
65
+ hasMoreInput() {
66
+ return this.index < this.input.length;
67
+ }
68
+ isWhitespace(idx) {
69
+ return /\s/.test(this.input[idx]);
70
+ }
71
+ consumeWhitespace() {
72
+ while (this.hasMoreInput() && this.isWhitespace(this.index)) {
73
+ this.index++;
74
+ }
75
+ }
76
+ maybeConsumeWord(wordStart, wordEnd, tokens) {
77
+ if (wordStart >= 0 && wordEnd >= wordStart) {
78
+ tokens.push({
79
+ type: 'word',
80
+ value: this.input.substring(wordStart, wordEnd + 1),
81
+ startIndex: wordStart,
82
+ endIndex: wordEnd + 1,
83
+ });
84
+ }
85
+ }
86
+ isSpecialSubstring() {
87
+ for (const special of this.specialSubstrings) {
88
+ if (special.value instanceof RegExp) {
89
+ const shifted = this.input.substring(this.index); // create a substring starting at index.
90
+ const matcher = special.value.exec(shifted);
91
+ if (matcher) {
92
+ return {
93
+ type: special.type,
94
+ value: special.value,
95
+ matchedString: matcher[0],
96
+ };
97
+ }
98
+ }
99
+ else {
100
+ const subString = this.input.slice(this.index, this.index + special.value.length);
101
+ const matches = special.ignoreCase
102
+ ? subString.toLowerCase() === special.value.toLowerCase()
103
+ : subString === special.value;
104
+ if (matches) {
105
+ const value = special.ignoreCase
106
+ ? subString.toUpperCase()
107
+ : subString;
108
+ return {
109
+ type: special.type,
110
+ value: special.value,
111
+ matchedString: value,
112
+ };
113
+ }
114
+ }
115
+ }
116
+ return undefined;
117
+ }
118
+ consumeSpecialSubstring(special, tokens) {
119
+ tokens.push({
120
+ type: special.type,
121
+ value: special.matchedString,
122
+ startIndex: this.index,
123
+ endIndex: this.index + special.matchedString.length,
124
+ });
125
+ this.index += special.matchedString.length;
126
+ }
127
+ static combineAdjacentWords(tokens) {
128
+ const output = [];
129
+ let previousToken = undefined;
130
+ for (let i = 0; i < tokens.length; i++) {
131
+ const currentToken = tokens[i];
132
+ if (currentToken.type === 'word' &&
133
+ previousToken &&
134
+ previousToken.type === 'word') {
135
+ previousToken.value += currentToken.value;
136
+ previousToken.endIndex = currentToken.endIndex;
137
+ }
138
+ else {
139
+ output.push(currentToken);
140
+ }
141
+ previousToken = currentToken;
142
+ }
143
+ return output;
144
+ }
145
+ static trimWordWhitespace(tokens) {
146
+ const output = [];
147
+ for (const token of tokens) {
148
+ if (token.type === 'word') {
149
+ token.value = token.value.trim();
150
+ }
151
+ output.push(token);
152
+ }
153
+ return output;
154
+ }
155
+ static isSpecialWord(token, specials) {
156
+ for (const special of specials) {
157
+ if (special.value instanceof RegExp) {
158
+ const regexp = special.value;
159
+ regexp.lastIndex = 0; // Set the starting index for the search
160
+ if (regexp.test(token.value)) {
161
+ const value = special.ignoreCase
162
+ ? token.value.toUpperCase()
163
+ : token.value;
164
+ return {
165
+ type: special.type,
166
+ value: value,
167
+ startIndex: token.startIndex,
168
+ endIndex: token.endIndex,
169
+ };
170
+ }
171
+ }
172
+ else {
173
+ const matches = special.ignoreCase
174
+ ? token.value.toLowerCase() === special.value.toLowerCase()
175
+ : token.value === special.value;
176
+ if (matches) {
177
+ const value = special.ignoreCase
178
+ ? token.value.toUpperCase()
179
+ : token.value;
180
+ return {
181
+ type: special.type,
182
+ value: value,
183
+ startIndex: token.startIndex,
184
+ endIndex: token.endIndex,
185
+ };
186
+ }
187
+ }
188
+ }
189
+ return undefined;
190
+ }
191
+ static convertSpecialWords(tokens, specials) {
192
+ const output = [];
193
+ let special = undefined;
194
+ for (const token of tokens) {
195
+ if (token.type === 'word' &&
196
+ (special = Tokenizer.isSpecialWord(token, specials))) {
197
+ output.push(special);
198
+ }
199
+ else {
200
+ output.push(token);
201
+ }
202
+ }
203
+ return output;
204
+ }
205
+ /**
206
+ * Checks if the token types starting at the given index match the types in the input string.
207
+ *
208
+ * @param types - A string of types separated by '|'. Eg 'TYPEA|TYPEB|TYPEC'
209
+ * @param tokens - An array of tokens.
210
+ * @param index - The index into the token array to start checking from.
211
+ * @returns True if the token types match, false otherwise.
212
+ */
213
+ static matchTypes(types, tokens, index) {
214
+ const typeArray = types.split('|');
215
+ if (index < 0 || index + typeArray.length > tokens.length) {
216
+ return undefined;
217
+ }
218
+ // Iterate over the types and check if they match the token types
219
+ for (let i = 0; i < typeArray.length; i++) {
220
+ if (index + i >= tokens.length) {
221
+ return undefined;
222
+ }
223
+ if (tokens[index + i].type !== typeArray[i]) {
224
+ return undefined;
225
+ }
226
+ }
227
+ return tokens.slice(index, index + typeArray.length);
228
+ }
229
+ /**
230
+ * Merges tokens that match a given type string into a single token with a specified merge type.
231
+ *
232
+ * @param types - A string of types separated by '|'.
233
+ * @param tokens - An array of tokens.
234
+ * @param mergeType - The type to use for the merged token.
235
+ * @returns The updated token list with merged tokens.
236
+ */
237
+ static mergeTypes(types, tokens, mergeType) {
238
+ const output = [];
239
+ let i = 0;
240
+ while (i < tokens.length) {
241
+ // Check if the current token matches the type string
242
+ const matchedTokens = Tokenizer.matchTypes(types, tokens, i);
243
+ if (matchedTokens && matchedTokens.length > 0) {
244
+ const mergedToken = {
245
+ type: mergeType,
246
+ value: '',
247
+ values: matchedTokens,
248
+ startIndex: matchedTokens[0].startIndex,
249
+ endIndex: matchedTokens[matchedTokens.length - 1].endIndex,
250
+ };
251
+ output.push(mergedToken);
252
+ i += matchedTokens.length;
253
+ }
254
+ else {
255
+ output.push(tokens[i]);
256
+ i++;
257
+ }
258
+ }
259
+ return output;
260
+ }
261
+ }
262
+ exports.Tokenizer = Tokenizer;
263
+ //# sourceMappingURL=tokenizer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tokenizer.js","sourceRoot":"","sources":["../src/tokenizer.ts"],"names":[],"mappings":";;;AAqBA,MAAa,SAAS;IAOpB,YAAY,KAAa,EAAE,MAAuB;QAChD,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC;QACf,IAAI,CAAC,iBAAiB,GAAG,MAAM,CAAC,iBAAiB,CAAC;QAClD,IAAI,CAAC,YAAY,GAAG,MAAM,CAAC,YAAY,CAAC;QACxC,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;IACrB,CAAC;IAEO,QAAQ;QACd,IAAI,MAAM,GAAY,EAAE,CAAC;QACzB,IAAI,SAAS,GAAG,CAAC,CAAC,CAAC;QACnB,IAAI,OAAO,GAAG,CAAC,CAAC,CAAC;QACjB,IAAI,OAAsC,CAAC;QAC3C,OAAO,IAAI,CAAC,YAAY,EAAE,EAAE;YAC1B,IAAI,IAAI,CAAC,MAAM,CAAC,iBAAiB,IAAI,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE;gBAClE,IAAI,CAAC,gBAAgB,CAAC,SAAS,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC;gBAClD,SAAS,GAAG,CAAC,CAAC,CAAC;gBACf,IAAI,CAAC,iBAAiB,EAAE,CAAC;aAC1B;iBAAM,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,IAAI,EAAE;gBAC1C,IAAI,SAAS,KAAK,CAAC,CAAC,EAAE;oBACpB,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC;iBACxB;gBACD,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC;gBACrB,IAAI,CAAC,KAAK,EAAE,CAAC;gBACb,IAAI,IAAI,CAAC,YAAY,EAAE,EAAE;oBACvB,oDAAoD;oBACpD,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC;oBACrB,IAAI,CAAC,KAAK,EAAE,CAAC;iBACd;aACF;iBAAM,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,kBAAkB,EAAE,CAAC,EAAE;gBAChD,IAAI,CAAC,gBAAgB,CAAC,SAAS,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC;gBAClD,SAAS,GAAG,CAAC,CAAC,CAAC;gBACf,IAAI,CAAC,uBAAuB,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;aAC/C;iBAAM;gBACL,IAAI,SAAS,KAAK,CAAC,CAAC,EAAE;oBACpB,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC;iBACxB;gBACD,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC;gBACrB,IAAI,CAAC,KAAK,EAAE,CAAC;aACd;SACF;QACD,IAAI,CAAC,gBAAgB,CAAC,SAAS,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC;QAElD,MAAM,GAAG,SAAS,CAAC,mBAAmB,CAAC,MAAM,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC;QAElE,IAAI,IAAI,CAAC,MAAM,CAAC,oBAAoB,EAAE;YACpC,MAAM,GAAG,SAAS,CAAC,oBAAoB,CAAC,MAAM,CAAC,CAAC;SACjD;QACD,IAAI,IAAI,CAAC,MAAM,CAAC,kBAAkB,EAAE;YAClC,MAAM,GAAG,SAAS,CAAC,kBAAkB,CAAC,MAAM,CAAC,CAAC;SAC/C;QACD,OAAO,MAAM,CAAC;IAChB,CAAC;IAEM,KAAK;QACV,IAAI,MAAM,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC;QAC7B,IAAI,IAAI,CAAC,MAAM,CAAC,kBAAkB,EAAE;YAClC,MAAM,GAAG,SAAS,CAAC,kBAAkB,CAAC,MAAM,CAAC,CAAC;SAC/C;QACD,OAAO,MAAM,CAAC;IAChB,CAAC;IAEO,YAAY;QAClB,OAAO,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC;IACxC,CAAC;IAEO,YAAY,CAAC,GAAW;QAC9B,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC;IACpC,CAAC;IAEO,iBAAiB;QACvB,OAAO,IAAI,CAAC,YAAY,EAAE,IAAI,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE;YAC3D,IAAI,CAAC,KAAK,EAAE,CAAC;SACd;IACH,CAAC;IACO,gBAAgB,CACtB,SAAiB,EACjB,OAAe,EACf,MAAe;QAEf,IAAI,SAAS,IAAI,CAAC,IAAI,OAAO,IAAI,SAAS,EAAE;YAC1C,MAAM,CAAC,IAAI,CAAC;gBACV,IAAI,EAAE,MAAM;gBACZ,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,SAAS,EAAE,OAAO,GAAG,CAAC,CAAC;gBACnD,UAAU,EAAE,SAAS;gBACrB,QAAQ,EAAE,OAAO,GAAG,CAAC;aACtB,CAAC,CAAC;SACJ;IACH,CAAC;IAEO,kBAAkB;QACxB,KAAK,MAAM,OAAO,IAAI,IAAI,CAAC,iBAAiB,EAAE;YAC5C,IAAI,OAAO,CAAC,KAAK,YAAY,MAAM,EAAE;gBACnC,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,wCAAwC;gBAC1F,MAAM,OAAO,GAAG,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;gBAC5C,IAAI,OAAO,EAAE;oBACX,OAAO;wBACL,IAAI,EAAE,OAAO,CAAC,IAAI;wBAClB,KAAK,EAAE,OAAO,CAAC,KAAK;wBACpB,aAAa,EAAE,OAAO,CAAC,CAAC,CAAC;qBAC1B,CAAC;iBACH;aACF;iBAAM;gBACL,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAChC,IAAI,CAAC,KAAK,EACV,IAAI,CAAC,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,MAAM,CAClC,CAAC;gBACF,MAAM,OAAO,GAAG,OAAO,CAAC,UAAU;oBAChC,CAAC,CAAC,SAAS,CAAC,WAAW,EAAE,KAAK,OAAO,CAAC,KAAK,CAAC,WAAW,EAAE;oBACzD,CAAC,CAAC,SAAS,KAAK,OAAO,CAAC,KAAK,CAAC;gBAChC,IAAI,OAAO,EAAE;oBACX,MAAM,KAAK,GAAG,OAAO,CAAC,UAAU;wBAC9B,CAAC,CAAC,SAAS,CAAC,WAAW,EAAE;wBACzB,CAAC,CAAC,SAAS,CAAC;oBACd,OAAO;wBACL,IAAI,EAAE,OAAO,CAAC,IAAI;wBAClB,KAAK,EAAE,OAAO,CAAC,KAAK;wBACpB,aAAa,EAAE,KAAK;qBACrB,CAAC;iBACH;aACF;SACF;QACD,OAAO,SAAS,CAAC;IACnB,CAAC;IAEO,uBAAuB,CAC7B,OAA0B,EAC1B,MAAe;QAEf,MAAM,CAAC,IAAI,CAAC;YACV,IAAI,EAAE,OAAO,CAAC,IAAI;YAClB,KAAK,EAAE,OAAO,CAAC,aAAa;YAC5B,UAAU,EAAE,IAAI,CAAC,KAAK;YACtB,QAAQ,EAAE,IAAI,CAAC,KAAK,GAAG,OAAO,CAAC,aAAa,CAAC,MAAM;SACpD,CAAC,CAAC;QACH,IAAI,CAAC,KAAK,IAAI,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC;IAC7C,CAAC;IAEM,MAAM,CAAC,oBAAoB,CAAC,MAAe;QAChD,MAAM,MAAM,GAAY,EAAE,CAAC;QAC3B,IAAI,aAAa,GAAsB,SAAS,CAAC;QACjD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;YACtC,MAAM,YAAY,GAAU,MAAM,CAAC,CAAC,CAAC,CAAC;YACtC,IACE,YAAY,CAAC,IAAI,KAAK,MAAM;gBAC5B,aAAa;gBACb,aAAa,CAAC,IAAI,KAAK,MAAM,EAC7B;gBACA,aAAa,CAAC,KAAK,IAAI,YAAY,CAAC,KAAK,CAAC;gBAC1C,aAAa,CAAC,QAAQ,GAAG,YAAY,CAAC,QAAQ,CAAC;aAChD;iBAAM;gBACL,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;aAC3B;YACD,aAAa,GAAG,YAAY,CAAC;SAC9B;QACD,OAAO,MAAM,CAAC;IAChB,CAAC;IAEM,MAAM,CAAC,kBAAkB,CAAC,MAAe;QAC9C,MAAM,MAAM,GAAY,EAAE,CAAC;QAC3B,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE;YAC1B,IAAI,KAAK,CAAC,IAAI,KAAK,MAAM,EAAE;gBACzB,KAAK,CAAC,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;aAClC;YACD,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;SACpB;QACD,OAAO,MAAM,CAAC;IAChB,CAAC;IAEM,MAAM,CAAC,aAAa,CACzB,KAAY,EACZ,QAAwB;QAExB,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE;YAC9B,IAAI,OAAO,CAAC,KAAK,YAAY,MAAM,EAAE;gBACnC,MAAM,MAAM,GAAG,OAAO,CAAC,KAAK,CAAC;gBAC7B,MAAM,CAAC,SAAS,GAAG,CAAC,CAAC,CAAC,wCAAwC;gBAC9D,IAAI,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE;oBAC5B,MAAM,KAAK,GAAG,OAAO,CAAC,UAAU;wBAC9B,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,WAAW,EAAE;wBAC3B,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC;oBAChB,OAAO;wBACL,IAAI,EAAE,OAAO,CAAC,IAAI;wBAClB,KAAK,EAAE,KAAK;wBACZ,UAAU,EAAE,KAAK,CAAC,UAAU;wBAC5B,QAAQ,EAAE,KAAK,CAAC,QAAQ;qBACzB,CAAC;iBACH;aACF;iBAAM;gBACL,MAAM,OAAO,GAAG,OAAO,CAAC,UAAU;oBAChC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,WAAW,EAAE,KAAK,OAAO,CAAC,KAAK,CAAC,WAAW,EAAE;oBAC3D,CAAC,CAAC,KAAK,CAAC,KAAK,KAAK,OAAO,CAAC,KAAK,CAAC;gBAClC,IAAI,OAAO,EAAE;oBACX,MAAM,KAAK,GAAG,OAAO,CAAC,UAAU;wBAC9B,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,WAAW,EAAE;wBAC3B,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC;oBAChB,OAAO;wBACL,IAAI,EAAE,OAAO,CAAC,IAAI;wBAClB,KAAK,EAAE,KAAK;wBACZ,UAAU,EAAE,KAAK,CAAC,UAAU;wBAC5B,QAAQ,EAAE,KAAK,CAAC,QAAQ;qBACzB,CAAC;iBACH;aACF;SACF;QACD,OAAO,SAAS,CAAC;IACnB,CAAC;IAEM,MAAM,CAAC,mBAAmB,CAC/B,MAAe,EACf,QAAwB;QAExB,MAAM,MAAM,GAAY,EAAE,CAAC;QAC3B,IAAI,OAAO,GAAsB,SAAS,CAAC;QAC3C,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE;YAC1B,IACE,KAAK,CAAC,IAAI,KAAK,MAAM;gBACrB,CAAC,OAAO,GAAG,SAAS,CAAC,aAAa,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC,EACpD;gBACA,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;aACtB;iBAAM;gBACL,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;aACpB;SACF;QACD,OAAO,MAAM,CAAC;IAChB,CAAC;IAED;;;;;;;OAOG;IACI,MAAM,CAAC,UAAU,CACtB,KAAa,EACb,MAAe,EACf,KAAa;QAEb,MAAM,SAAS,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QACnC,IAAI,KAAK,GAAG,CAAC,IAAI,KAAK,GAAG,SAAS,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE;YACzD,OAAO,SAAS,CAAC;SAClB;QACD,iEAAiE;QACjE,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,SAAS,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;YACzC,IAAI,KAAK,GAAG,CAAC,IAAI,MAAM,CAAC,MAAM,EAAE;gBAC9B,OAAO,SAAS,CAAC;aAClB;YACD,IAAI,MAAM,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE;gBAC3C,OAAO,SAAS,CAAC;aAClB;SACF;QACD,OAAO,MAAM,CAAC,KAAK,CAAC,KAAK,EAAE,KAAK,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC;IACvD,CAAC;IAED;;;;;;;OAOG;IACI,MAAM,CAAC,UAAU,CACtB,KAAa,EACb,MAAe,EACf,SAAiB;QAEjB,MAAM,MAAM,GAAY,EAAE,CAAC;QAC3B,IAAI,CAAC,GAAG,CAAC,CAAC;QACV,OAAO,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE;YACxB,qDAAqD;YACrD,MAAM,aAAa,GAAG,SAAS,CAAC,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC;YAC7D,IAAI,aAAa,IAAI,aAAa,CAAC,MAAM,GAAG,CAAC,EAAE;gBAC7C,MAAM,WAAW,GAAU;oBACzB,IAAI,EAAE,SAAS;oBACf,KAAK,EAAE,EAAE;oBACT,MAAM,EAAE,aAAa;oBACrB,UAAU,EAAE,aAAa,CAAC,CAAC,CAAC,CAAC,UAAU;oBACvC,QAAQ,EAAE,aAAa,CAAC,aAAa,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,QAAQ;iBAC3D,CAAC;gBACF,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;gBACzB,CAAC,IAAI,aAAa,CAAC,MAAM,CAAC;aAC3B;iBAAM;gBACL,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;gBACvB,CAAC,EAAE,CAAC;aACL;SACF;QACD,OAAO,MAAM,CAAC;IAChB,CAAC;CACF;AA1SD,8BA0SC"}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,255 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const tokenizer_1 = require("./tokenizer");
4
+ function makeParams() {
5
+ const specialSubstrings = [
6
+ { type: ',', value: ',' },
7
+ { type: 'VARIABLE', value: /^\$\{[^}]+\}/ },
8
+ ];
9
+ const specialWords = [
10
+ { type: 'NULL', value: 'null', ignoreCase: true },
11
+ { type: 'EMPTY', value: 'empty', ignoreCase: true },
12
+ { type: 'NOTNULL', value: '-null', ignoreCase: true },
13
+ { type: 'NOTEMPTY', value: '-empty', ignoreCase: true },
14
+ {
15
+ type: 'DAYOFWEEK',
16
+ value: /^(monday|tuesday|wednesday|thursday|friday|saturday|sunday)$/i,
17
+ ignoreCase: true,
18
+ },
19
+ { type: 'STATE', value: /^(California|Washington)$/i },
20
+ { type: 'DATE', value: /^\d\d\d\d-\d\d-\d\d$/ },
21
+ { type: 'DATE', value: /^\d\d\d\d-\d\d$/ },
22
+ { type: 'DATE', value: /^\d\d\d\d$/ },
23
+ ];
24
+ return {
25
+ splitOnWhitespace: true,
26
+ trimWordWhitespace: true,
27
+ specialSubstrings,
28
+ specialWords,
29
+ };
30
+ }
31
+ describe('Tokenizer', () => {
32
+ const makeToken = (type, value, startIndex, endIndex) => ({ type, value, startIndex, endIndex });
33
+ it('should tokenize a simple string', () => {
34
+ const input = 'hello world';
35
+ const expectedTokens = [
36
+ makeToken('word', 'hello', 0, 5),
37
+ makeToken('word', 'world', 6, 11),
38
+ ];
39
+ expect(new tokenizer_1.Tokenizer(input, makeParams()).parse()).toEqual(expectedTokens);
40
+ });
41
+ it('should split adjacent characters when no whitespace', () => {
42
+ const specialSubstrings = [
43
+ { type: ',', value: ',' },
44
+ { type: 'exclamation', value: '!' },
45
+ { type: 'bracket', value: '[' },
46
+ ];
47
+ const input = '[hello],big,world!';
48
+ const expectedTokens = [
49
+ makeToken('bracket', '[', 0, 1),
50
+ makeToken('word', 'hello]', 1, 7),
51
+ makeToken(',', ',', 7, 8),
52
+ makeToken('word', 'big', 8, 11),
53
+ makeToken(',', ',', 11, 12),
54
+ makeToken('word', 'world', 12, 17),
55
+ makeToken('exclamation', '!', 17, 18),
56
+ ];
57
+ expect(new tokenizer_1.Tokenizer(input, { ...makeParams(), specialSubstrings }).parse()).toEqual(expectedTokens);
58
+ });
59
+ it('should match special tokens', () => {
60
+ const input = 'hello NULL world,-Null,-\'NULL" ,NULL, NULL , ';
61
+ const expectedTokens = [
62
+ makeToken('word', 'hello', 0, 5),
63
+ makeToken('NULL', 'NULL', 6, 10),
64
+ makeToken('word', 'world', 11, 16),
65
+ makeToken(',', ',', 16, 17),
66
+ makeToken('NOTNULL', '-NULL', 17, 22),
67
+ makeToken(',', ',', 22, 23),
68
+ makeToken('word', '-\'NULL"', 23, 30),
69
+ makeToken(',', ',', 31, 32),
70
+ makeToken('NULL', 'NULL', 32, 36),
71
+ makeToken(',', ',', 36, 37),
72
+ makeToken('NULL', 'NULL', 38, 42),
73
+ makeToken(',', ',', 43, 44),
74
+ ];
75
+ const params = makeParams();
76
+ expect(new tokenizer_1.Tokenizer(input, params).parse()).toEqual(expectedTokens);
77
+ });
78
+ it('should not combine adjacent words', () => {
79
+ const input = 'ABC DEF';
80
+ const expectedTokens = [
81
+ makeToken('word', 'ABC', 0, 3),
82
+ makeToken('word', 'DEF', 4, 7),
83
+ ];
84
+ const params = makeParams();
85
+ expect(new tokenizer_1.Tokenizer(input, params).parse()).toEqual(expectedTokens);
86
+ });
87
+ it('should combine adjacent words when combineAdjacentWords', () => {
88
+ const input = 'ABC DEF';
89
+ const expectedTokens = [makeToken('word', 'ABCDEF', 0, 7)];
90
+ const params = { ...makeParams(), combineAdjacentWords: true };
91
+ expect(new tokenizer_1.Tokenizer(input, params).parse()).toEqual(expectedTokens);
92
+ });
93
+ it('escaping should prevent special token matching', () => {
94
+ const input = 'N\\ULL';
95
+ const expectedTokens = [makeToken('word', 'N\\ULL', 0, 5)];
96
+ expect(new tokenizer_1.Tokenizer(input, makeParams()).parse()).toEqual(expectedTokens);
97
+ });
98
+ it('should match escaped characters', () => {
99
+ const input = 'hello \\n world';
100
+ const expectedTokens = [
101
+ makeToken('word', 'hello', 0, 5),
102
+ makeToken('word', '\\n', 6, 8),
103
+ makeToken('word', 'world', 9, 14),
104
+ ];
105
+ expect(new tokenizer_1.Tokenizer(input, makeParams()).parse()).toEqual(expectedTokens);
106
+ });
107
+ it('should preserve all escaped characters', () => {
108
+ const input = "he'llo \\t \\${w}or\\,ld";
109
+ const expectedTokens = [
110
+ makeToken('word', "he'llo", 0, 6),
111
+ makeToken('word', '\\t', 7, 9),
112
+ makeToken('word', '\\${w}or\\,ld', 10, 21),
113
+ ];
114
+ expect(new tokenizer_1.Tokenizer(input, makeParams()).parse()).toEqual(expectedTokens);
115
+ });
116
+ it('should match regexp and capitalize special matches', () => {
117
+ const input = "hello tuesDAY,ttuesday, tuesdayy ,Tuesday , ttuesday, 'TUESday' ";
118
+ const expectedTokens = [
119
+ makeToken('word', 'hello', 0, 5),
120
+ makeToken('DAYOFWEEK', 'TUESDAY', 6, 13),
121
+ makeToken(',', ',', 13, 14),
122
+ makeToken('word', 'ttuesday', 14, 22),
123
+ makeToken(',', ',', 22, 23),
124
+ makeToken('word', 'tuesdayy', 24, 32),
125
+ makeToken(',', ',', 33, 34),
126
+ makeToken('DAYOFWEEK', 'TUESDAY', 34, 41),
127
+ makeToken(',', ',', 42, 43),
128
+ makeToken('word', 'ttuesday', 44, 52),
129
+ makeToken(',', ',', 52, 53),
130
+ makeToken('word', "'TUESday'", 54, 63),
131
+ ];
132
+ expect(new tokenizer_1.Tokenizer(input, makeParams()).parse()).toEqual(expectedTokens);
133
+ });
134
+ it('should match regexp and not capitalize', () => {
135
+ const input = 'Washington, Washingo,washington,wWashington ';
136
+ const expectedTokens = [
137
+ makeToken('STATE', 'Washington', 0, 10),
138
+ makeToken(',', ',', 10, 11),
139
+ makeToken('word', 'Washingo', 12, 20),
140
+ makeToken(',', ',', 20, 21),
141
+ makeToken('STATE', 'washington', 21, 31),
142
+ makeToken(',', ',', 31, 32),
143
+ makeToken('word', 'wWashington', 32, 43),
144
+ ];
145
+ expect(new tokenizer_1.Tokenizer(input, makeParams()).parse()).toEqual(expectedTokens);
146
+ });
147
+ it('should match substring regexp', () => {
148
+ const input = 'hello \\${var1},aa${var2}bb, cc${var3} dd';
149
+ const expectedTokens = [
150
+ makeToken('word', 'hello', 0, 5),
151
+ makeToken('word', '\\${var1}', 7, 15),
152
+ makeToken(',', ',', 15, 16),
153
+ makeToken('word', 'aa', 16, 18),
154
+ makeToken('VARIABLE', '${var2}', 18, 25),
155
+ makeToken('word', 'bb', 25, 27),
156
+ makeToken(',', ',', 27, 28),
157
+ makeToken('word', 'cc', 29, 31),
158
+ makeToken('VARIABLE', '${var3}', 31, 38),
159
+ makeToken('word', 'dd', 39, 41),
160
+ ];
161
+ expect(new tokenizer_1.Tokenizer(input, makeParams()).parse()).toEqual(expectedTokens);
162
+ });
163
+ describe('mergeTypes', () => {
164
+ it('should return an empty array when input is empty', () => {
165
+ const result = tokenizer_1.Tokenizer.mergeTypes('', [], 'merged');
166
+ expect(result).toEqual([]);
167
+ });
168
+ it('should not merge tokens when no match is found', () => {
169
+ const tokens = [
170
+ { type: 'x', value: '1', startIndex: 0, endIndex: 1 },
171
+ { type: 'y', value: '2', startIndex: 1, endIndex: 2 },
172
+ ];
173
+ const result = tokenizer_1.Tokenizer.mergeTypes('a|b', tokens, 'merged');
174
+ expect(result).toEqual(tokens);
175
+ });
176
+ it('should merge tokens when a single match is found', () => {
177
+ const tokens = [
178
+ { type: 'a', value: '1', startIndex: 0, endIndex: 1 },
179
+ { type: 'b', value: '2', startIndex: 1, endIndex: 2 },
180
+ ];
181
+ const expected = [
182
+ {
183
+ type: 'merged',
184
+ value: '',
185
+ values: [tokens[0], tokens[1]],
186
+ startIndex: 0,
187
+ endIndex: 2,
188
+ },
189
+ ];
190
+ const result = tokenizer_1.Tokenizer.mergeTypes('a|b', tokens, 'merged');
191
+ expect(result).toEqual(expected);
192
+ });
193
+ it('should merge multiple matches', () => {
194
+ const tokens = [
195
+ { type: 'a', value: '1', startIndex: 0, endIndex: 1 },
196
+ { type: 'b', value: '2', startIndex: 1, endIndex: 2 },
197
+ { type: 'a', value: '3', startIndex: 2, endIndex: 3 },
198
+ { type: 'b', value: '4', startIndex: 3, endIndex: 4 },
199
+ ];
200
+ const expected = [
201
+ {
202
+ type: 'merged',
203
+ value: '',
204
+ values: [tokens[0], tokens[1]],
205
+ startIndex: 0,
206
+ endIndex: 2,
207
+ },
208
+ {
209
+ type: 'merged',
210
+ value: '',
211
+ values: [tokens[2], tokens[3]],
212
+ startIndex: 2,
213
+ endIndex: 4,
214
+ },
215
+ ];
216
+ const result = tokenizer_1.Tokenizer.mergeTypes('a|b', tokens, 'merged');
217
+ expect(result).toEqual(expected);
218
+ });
219
+ it('should not merge partial matches', () => {
220
+ const tokens = [
221
+ { type: 'a', value: '1', startIndex: 0, endIndex: 1 },
222
+ { type: 'b', value: '2', startIndex: 1, endIndex: 2 },
223
+ ];
224
+ const result = tokenizer_1.Tokenizer.mergeTypes('a|b|c', tokens, 'merged');
225
+ expect(result).toEqual(tokens);
226
+ });
227
+ });
228
+ describe('matchTypes', () => {
229
+ it('should return tokens when types match', () => {
230
+ const tokens = [makeToken('a', '1', 0, 1), makeToken('b', '2', 1, 2)];
231
+ expect(tokenizer_1.Tokenizer.matchTypes('a|b', tokens, 0)).toEqual(tokens);
232
+ });
233
+ it('should return undefined when types do not match', () => {
234
+ const tokens = [makeToken('x', '1', 0, 1), makeToken('y', '2', 1, 2)];
235
+ expect(tokenizer_1.Tokenizer.matchTypes('a|b', tokens, 0)).toBeUndefined();
236
+ });
237
+ it('should return undefined when index is out of range', () => {
238
+ const tokens = [makeToken('a', '1', 0, 1)];
239
+ expect(tokenizer_1.Tokenizer.matchTypes('a|b', tokens, 1)).toBeUndefined();
240
+ });
241
+ it('should return all matching tokens when multiple types match', () => {
242
+ const tokens = [
243
+ makeToken('a', '1', 0, 1),
244
+ makeToken('b', '2', 1, 2),
245
+ makeToken('c', '3', 2, 3),
246
+ ];
247
+ expect(tokenizer_1.Tokenizer.matchTypes('a|b|c', tokens, 0)).toEqual(tokens);
248
+ });
249
+ it('should return only matching tokens when partial match occurs', () => {
250
+ const tokens = [makeToken('a', '1', 0, 1), makeToken('b', '2', 1, 2)];
251
+ expect(tokenizer_1.Tokenizer.matchTypes('a|b|c', tokens, 0)).toBeUndefined();
252
+ });
253
+ });
254
+ });
255
+ //# sourceMappingURL=tokenizer.spec.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tokenizer.spec.js","sourceRoot":"","sources":["../src/tokenizer.spec.ts"],"names":[],"mappings":"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"}
package/jest.config.js ADDED
@@ -0,0 +1,3 @@
1
+ module.exports = {
2
+ moduleFileExtensions: ['js'],
3
+ };
package/package.json ADDED
@@ -0,0 +1,21 @@
1
+ {
2
+ "name": "@malloydata/malloy-filter",
3
+ "version": "0.0.237-dev250221201621",
4
+ "license": "MIT",
5
+ "description": "",
6
+ "main": "dist/string_parser.js",
7
+ "repository": {
8
+ "type": "git",
9
+ "url": "https://github.com/malloydata/malloy"
10
+ },
11
+ "scripts": {
12
+ "build": "tsc --build",
13
+ "samples": "node dist/generate_samples.js",
14
+ "asimpleparser": "node dist/a_simple_parser.js",
15
+ "asimpleserializer": "node dist/a_simple_serializer.js",
16
+ "test": "jest --runInBand",
17
+ "test:tokenizer": "jest tokenizer.spec.ts"
18
+ },
19
+ "keywords": [],
20
+ "author": ""
21
+ }
@@ -0,0 +1,26 @@
1
+ # Testing
2
+
3
+ The `malloy-filter` tests use Jest. Install Jest using:
4
+
5
+ ```bash
6
+ npm install --save-dev jest @types/jest ts-jest
7
+ ```
8
+
9
+ ## Tokenizer Testing
10
+
11
+ ```bash
12
+ npm run test:tokenizer
13
+ ```
14
+
15
+ # generate_samples
16
+
17
+ The `generate_samples.ts` script creates the suite of examples in ../SAMPLES.md. As such, it is also a terrific tool for testing and validating changes to any of the parsers. Feel free to add new examples to `generate_samples.ts` as new features are added to the parsers.
18
+
19
+ To create the samples:
20
+
21
+ ```bash
22
+ npm run build
23
+ npm run samples
24
+ ```
25
+
26
+ Comment/uncomment individual lines in `generateSamples()` to enable/disable sample generation for the different parsers.
@@ -0,0 +1,22 @@
1
+ import {FilterParser} from './filter_parser';
2
+
3
+ /* eslint-disable no-console */
4
+ function aSimpleParser() {
5
+ let str = 'CAT,DOG';
6
+ let response = new FilterParser(str, 'string').parse();
7
+ console.log(str, '\n', ...response.clauses, '\n');
8
+
9
+ str = '-5.5, 10, 2.3e7';
10
+ response = new FilterParser(str, 'number').parse();
11
+ console.log(str, '\n', ...response.clauses, '\n');
12
+
13
+ str = 'null, false';
14
+ response = new FilterParser(str, 'boolean').parse();
15
+ console.log(str, '\n', ...response.clauses, '\n');
16
+
17
+ str = 'after 2025-10-05';
18
+ response = new FilterParser(str, 'date').parse();
19
+ console.log(str, '\n', ...response.clauses, '\n');
20
+ }
21
+
22
+ aSimpleParser();