@malloydata/malloy-filter 0.0.237-dev250222012247 → 0.0.237-dev250222034547

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 (65) hide show
  1. package/dist/a_simple_parser.js +12 -9
  2. package/dist/a_simple_parser.js.map +1 -1
  3. package/dist/base_parser.d.ts +0 -2
  4. package/dist/base_parser.js.map +1 -1
  5. package/dist/boolean_parser.d.ts +2 -2
  6. package/dist/boolean_parser.js.map +1 -1
  7. package/dist/boolean_serializer.d.ts +4 -4
  8. package/dist/boolean_serializer.js +3 -3
  9. package/dist/boolean_serializer.js.map +1 -1
  10. package/dist/clause_types.d.ts +15 -41
  11. package/dist/date_parser.d.ts +13 -11
  12. package/dist/date_parser.js +187 -130
  13. package/dist/date_parser.js.map +1 -1
  14. package/dist/date_serializer.d.ts +6 -5
  15. package/dist/date_serializer.js +53 -71
  16. package/dist/date_serializer.js.map +1 -1
  17. package/dist/date_types.d.ts +69 -0
  18. package/dist/{filter_types.js → date_types.js} +1 -1
  19. package/dist/date_types.js.map +1 -0
  20. package/dist/generate_samples.js +154 -85
  21. package/dist/generate_samples.js.map +1 -1
  22. package/dist/number_parser.d.ts +2 -2
  23. package/dist/number_parser.js.map +1 -1
  24. package/dist/number_serializer.d.ts +4 -4
  25. package/dist/number_serializer.js +3 -3
  26. package/dist/number_serializer.js.map +1 -1
  27. package/dist/string_parser.d.ts +2 -2
  28. package/dist/string_parser.js.map +1 -1
  29. package/dist/string_serializer.d.ts +5 -5
  30. package/dist/string_serializer.js +5 -5
  31. package/dist/string_serializer.js.map +1 -1
  32. package/package.json +1 -2
  33. package/src/a_simple_parser.ts +12 -9
  34. package/src/base_parser.ts +0 -3
  35. package/src/boolean_parser.ts +7 -3
  36. package/src/boolean_serializer.ts +5 -6
  37. package/src/clause_types.ts +15 -97
  38. package/src/date_parser.ts +224 -191
  39. package/src/date_serializer.ts +55 -87
  40. package/src/date_types.ts +149 -0
  41. package/src/generate_samples.ts +170 -107
  42. package/src/number_parser.ts +5 -5
  43. package/src/number_serializer.ts +5 -6
  44. package/src/string_parser.ts +14 -9
  45. package/src/string_serializer.ts +8 -9
  46. package/tsconfig.json +1 -6
  47. package/dist/a_simple_serializer.d.ts +0 -1
  48. package/dist/a_simple_serializer.js +0 -31
  49. package/dist/a_simple_serializer.js.map +0 -1
  50. package/dist/base_serializer.d.ts +0 -6
  51. package/dist/base_serializer.js +0 -11
  52. package/dist/base_serializer.js.map +0 -1
  53. package/dist/filter_parser.d.ts +0 -12
  54. package/dist/filter_parser.js +0 -66
  55. package/dist/filter_parser.js.map +0 -1
  56. package/dist/filter_serializer.d.ts +0 -13
  57. package/dist/filter_serializer.js +0 -43
  58. package/dist/filter_serializer.js.map +0 -1
  59. package/dist/filter_types.d.ts +0 -10
  60. package/dist/filter_types.js.map +0 -1
  61. package/src/a_simple_serializer.ts +0 -40
  62. package/src/base_serializer.ts +0 -9
  63. package/src/filter_parser.ts +0 -68
  64. package/src/filter_serializer.ts +0 -49
  65. package/src/filter_types.ts +0 -12
@@ -5,11 +5,11 @@ import {
5
5
  NumberOperator,
6
6
  NumberRangeOperator,
7
7
  NumberClause,
8
- Clause,
8
+ NumberParserResponse,
9
+ FilterError,
9
10
  } from './clause_types';
10
11
  import {BaseParser} from './base_parser';
11
12
  import {Token} from './token_types';
12
- import {FilterParserResponse, FilterError} from './filter_types';
13
13
 
14
14
  export class NumberParser extends BaseParser {
15
15
  constructor(input: string) {
@@ -46,7 +46,7 @@ export class NumberParser extends BaseParser {
46
46
  this.tokens = tokenizer.parse();
47
47
  }
48
48
 
49
- public parse(): FilterParserResponse {
49
+ public parse(): NumberParserResponse {
50
50
  this.index = 0;
51
51
  this.tokenize();
52
52
  let clauses: NumberClause[] = [];
@@ -281,7 +281,7 @@ export class NumberParser extends BaseParser {
281
281
  return false;
282
282
  }
283
283
 
284
- private checkSimpleNumber(clauses: Clause[]): boolean {
284
+ private checkSimpleNumber(clauses: NumberClause[]): boolean {
285
285
  if (this.getNext().type === 'word') {
286
286
  const numericValue: number = NumberParser.parseNumber(
287
287
  this.getAt(this.index).value
@@ -296,7 +296,7 @@ export class NumberParser extends BaseParser {
296
296
  return false;
297
297
  }
298
298
 
299
- private checkNull(clauses: Clause[]): boolean {
299
+ private checkNull(clauses: NumberClause[]): boolean {
300
300
  if (this.getNext().type === 'NULL' || this.getNext().type === 'NOTNULL') {
301
301
  const tokenType = this.getNext().type === 'NULL' ? '=' : '!=';
302
302
  const clause: NumberCondition = {operator: tokenType, values: [null]};
@@ -3,13 +3,12 @@ import {
3
3
  NumberRange,
4
4
  NumberOperator,
5
5
  NumberRangeOperator,
6
- Clause,
6
+ NumberClause,
7
7
  } from './clause_types';
8
- import {BaseSerializer} from './base_serializer';
9
8
 
10
- export class NumberSerializer extends BaseSerializer {
11
- constructor(clauses: Clause[]) {
12
- super(clauses);
9
+ export class NumberSerializer {
10
+ constructor(private clauses: NumberClause[]) {
11
+ this.clauses = clauses;
13
12
  }
14
13
 
15
14
  public serialize(): string {
@@ -69,7 +68,7 @@ export class NumberSerializer extends BaseSerializer {
69
68
  );
70
69
  }
71
70
 
72
- private static clauseToString(clauses: Clause[]): string {
71
+ private static clauseToString(clauses: NumberClause[]): string {
73
72
  let result = '';
74
73
  for (const clause of clauses) {
75
74
  if ('operator' in clause && clause.operator === 'range') {
@@ -1,7 +1,12 @@
1
1
  import {SpecialToken, Tokenizer, TokenizerParams} from './tokenizer';
2
- import {StringCondition, StringOperator, QuoteType} from './clause_types';
2
+ import {
3
+ StringClause,
4
+ StringOperator,
5
+ QuoteType,
6
+ FilterError,
7
+ StringParserResponse,
8
+ } from './clause_types';
3
9
  import {BaseParser} from './base_parser';
4
- import {FilterParserResponse, FilterError} from './filter_types';
5
10
 
6
11
  export class StringParser extends BaseParser {
7
12
  private static readonly percentRegex: RegExp = /(?<!\\)%/;
@@ -35,10 +40,10 @@ export class StringParser extends BaseParser {
35
40
  this.tokens = Tokenizer.convertSpecialWords(this.tokens, specialWords);
36
41
  }
37
42
 
38
- public parse(): FilterParserResponse {
43
+ public parse(): StringParserResponse {
39
44
  this.index = 0;
40
45
  this.tokenize();
41
- const clauses: StringCondition[] = [];
46
+ const clauses: StringClause[] = [];
42
47
  const errors: FilterError[] = [];
43
48
  while (this.index < this.tokens.length) {
44
49
  const token = this.getNext();
@@ -119,12 +124,12 @@ export class StringParser extends BaseParser {
119
124
  return Array.from(quotes);
120
125
  }
121
126
 
122
- private static groupClauses(clauses: StringCondition[]): StringCondition[] {
127
+ private static groupClauses(clauses: StringClause[]): StringClause[] {
123
128
  if (clauses.length < 2) {
124
129
  return clauses;
125
130
  }
126
- let previous: StringCondition = clauses[0];
127
- const outputs: StringCondition[] = [previous];
131
+ let previous: StringClause = clauses[0];
132
+ const outputs: StringClause[] = [previous];
128
133
  for (let i = 1; i < clauses.length; i++) {
129
134
  if (previous.operator === clauses[i].operator) {
130
135
  previous.values.push(...clauses[i].values);
@@ -147,7 +152,7 @@ export class StringParser extends BaseParser {
147
152
  return word.replace(StringParser.singleBackslashRegex, _match => '');
148
153
  }
149
154
 
150
- private checkSimpleWord(clauses: StringCondition[]): boolean {
155
+ private checkSimpleWord(clauses: StringClause[]): boolean {
151
156
  const token = this.getNext();
152
157
  if (token.type !== 'word') {
153
158
  return false;
@@ -184,7 +189,7 @@ export class StringParser extends BaseParser {
184
189
  return false;
185
190
  }
186
191
 
187
- const clause: StringCondition = {operator: operator, values: [word]};
192
+ const clause: StringClause = {operator: operator, values: [word]};
188
193
  //const quotes: QuoteType[] = StringParser.findQuotes(word);
189
194
  //if (quotes.length > 0) { clause.quotes = quotes; }
190
195
  clauses.push(clause);
@@ -1,9 +1,8 @@
1
- import {StringCondition, StringOperator, Clause} from './clause_types';
2
- import {BaseSerializer} from './base_serializer';
1
+ import {StringClause, StringOperator} from './clause_types';
3
2
 
4
- export class StringSerializer extends BaseSerializer {
5
- constructor(clauses: Clause[]) {
6
- super(clauses);
3
+ export class StringSerializer {
4
+ constructor(private clauses: StringClause[]) {
5
+ this.clauses = clauses;
7
6
  }
8
7
 
9
8
  public serialize(): string {
@@ -32,7 +31,7 @@ export class StringSerializer extends BaseSerializer {
32
31
 
33
32
  // export type StringOperator = 'EMPTY' | 'NOTEMPTY' | 'starts' | 'ends' | 'contains' | 'notStarts' |
34
33
  // 'notEnds' | 'notContains' | '~' | '=' | '!~' | '!=';
35
- private static stringConditionToString(
34
+ private static StringClauseToString(
36
35
  operator: StringOperator,
37
36
  value: string | null
38
37
  ): string {
@@ -68,12 +67,12 @@ export class StringSerializer extends BaseSerializer {
68
67
  return (negated ? '-' : '') + value;
69
68
  }
70
69
 
71
- private static clauseToString(clauses: Clause[]): string {
70
+ private static clauseToString(clauses: StringClause[]): string {
72
71
  let result = '';
73
72
  for (const genericClause of clauses) {
74
- const clause: StringCondition = genericClause as StringCondition;
73
+ const clause: StringClause = genericClause as StringClause;
75
74
  for (const value of clause.values) {
76
- const word = StringSerializer.stringConditionToString(
75
+ const word = StringSerializer.StringClauseToString(
77
76
  clause.operator,
78
77
  value
79
78
  );
package/tsconfig.json CHANGED
@@ -5,10 +5,5 @@
5
5
  "outDir": "dist",
6
6
  "composite": true,
7
7
  "noImplicitReturns": true,
8
- },
9
- "references": [
10
- {
11
- "path": "../malloy"
12
- }
13
- ]
8
+ }
14
9
  }
@@ -1 +0,0 @@
1
- export {};
@@ -1,31 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- const filter_serializer_1 = require("./filter_serializer");
4
- /* eslint-disable no-console */
5
- function aSimpleSerializer() {
6
- const strings = [{ operator: '=', values: ['CAT', 'DOG'] }];
7
- let response = new filter_serializer_1.FilterSerializer(strings, 'string').serialize();
8
- console.log(...strings, '\n', response.result, '\n');
9
- const numbers = [
10
- {
11
- operator: 'range',
12
- startOperator: '>=',
13
- startValue: -5.5,
14
- endOperator: '<',
15
- endValue: 10,
16
- },
17
- ];
18
- response = new filter_serializer_1.FilterSerializer(numbers, 'number').serialize();
19
- console.log(...numbers, '\n', response.result, '\n');
20
- const booleans = [{ operator: 'NULL' }, { operator: 'TRUE' }];
21
- response = new filter_serializer_1.FilterSerializer(booleans, 'boolean').serialize();
22
- console.log(...booleans, '\n', response.result, '\n');
23
- const dates = [
24
- { operator: 'YESTERDAY' },
25
- { operator: 'NEXT', unit: 'TUESDAY' },
26
- ];
27
- response = new filter_serializer_1.FilterSerializer(dates, 'date').serialize();
28
- console.log(...dates, '\n', response.result, '\n');
29
- }
30
- aSimpleSerializer();
31
- //# sourceMappingURL=a_simple_serializer.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"a_simple_serializer.js","sourceRoot":"","sources":["../src/a_simple_serializer.ts"],"names":[],"mappings":";;AAAA,2DAAqD;AAQrD,+BAA+B;AAC/B,SAAS,iBAAiB;IACxB,MAAM,OAAO,GAAsB,CAAC,EAAC,QAAQ,EAAE,GAAG,EAAE,MAAM,EAAE,CAAC,KAAK,EAAE,KAAK,CAAC,EAAC,CAAC,CAAC;IAC7E,IAAI,QAAQ,GAAG,IAAI,oCAAgB,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC,SAAS,EAAE,CAAC;IACnE,OAAO,CAAC,GAAG,CAAC,GAAG,OAAO,EAAE,IAAI,EAAE,QAAQ,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;IAErD,MAAM,OAAO,GAAmB;QAC9B;YACE,QAAQ,EAAE,OAAO;YACjB,aAAa,EAAE,IAAI;YACnB,UAAU,EAAE,CAAC,GAAG;YAChB,WAAW,EAAE,GAAG;YAChB,QAAQ,EAAE,EAAE;SACb;KACF,CAAC;IACF,QAAQ,GAAG,IAAI,oCAAgB,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC,SAAS,EAAE,CAAC;IAC/D,OAAO,CAAC,GAAG,CAAC,GAAG,OAAO,EAAE,IAAI,EAAE,QAAQ,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;IAErD,MAAM,QAAQ,GAAoB,CAAC,EAAC,QAAQ,EAAE,MAAM,EAAC,EAAE,EAAC,QAAQ,EAAE,MAAM,EAAC,CAAC,CAAC;IAE3E,QAAQ,GAAG,IAAI,oCAAgB,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC,SAAS,EAAE,CAAC;IACjE,OAAO,CAAC,GAAG,CAAC,GAAG,QAAQ,EAAE,IAAI,EAAE,QAAQ,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;IAEtD,MAAM,KAAK,GAAiB;QAC1B,EAAC,QAAQ,EAAE,WAAW,EAAC;QACvB,EAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS,EAAC;KACpC,CAAC;IACF,QAAQ,GAAG,IAAI,oCAAgB,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC,SAAS,EAAE,CAAC;IAC3D,OAAO,CAAC,GAAG,CAAC,GAAG,KAAK,EAAE,IAAI,EAAE,QAAQ,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;AACrD,CAAC;AAED,iBAAiB,EAAE,CAAC"}
@@ -1,6 +0,0 @@
1
- import { Clause } from './clause_types';
2
- export declare abstract class BaseSerializer {
3
- protected clauses: Clause[];
4
- constructor(clauses: Clause[]);
5
- abstract serialize(): string;
6
- }
@@ -1,11 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.BaseSerializer = void 0;
4
- class BaseSerializer {
5
- constructor(clauses) {
6
- this.clauses = clauses;
7
- this.clauses = clauses;
8
- }
9
- }
10
- exports.BaseSerializer = BaseSerializer;
11
- //# sourceMappingURL=base_serializer.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"base_serializer.js","sourceRoot":"","sources":["../src/base_serializer.ts"],"names":[],"mappings":";;;AAEA,MAAsB,cAAc;IAClC,YAAsB,OAAiB;QAAjB,YAAO,GAAP,OAAO,CAAU;QACrC,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;IACzB,CAAC;CAGF;AAND,wCAMC"}
@@ -1,12 +0,0 @@
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
- }
@@ -1,66 +0,0 @@
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
@@ -1 +0,0 @@
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"}
@@ -1,13 +0,0 @@
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
- }
@@ -1,43 +0,0 @@
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
@@ -1 +0,0 @@
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"}
@@ -1,10 +0,0 @@
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
- }
@@ -1 +0,0 @@
1
- {"version":3,"file":"filter_types.js","sourceRoot":"","sources":["../src/filter_types.ts"],"names":[],"mappings":""}
@@ -1,40 +0,0 @@
1
- import {FilterSerializer} from './filter_serializer';
2
- import {
3
- NumberClause,
4
- StringCondition,
5
- BooleanClause,
6
- DateClause,
7
- } from './clause_types';
8
-
9
- /* eslint-disable no-console */
10
- function aSimpleSerializer() {
11
- const strings: StringCondition[] = [{operator: '=', values: ['CAT', 'DOG']}];
12
- let response = new FilterSerializer(strings, 'string').serialize();
13
- console.log(...strings, '\n', response.result, '\n');
14
-
15
- const numbers: NumberClause[] = [
16
- {
17
- operator: 'range',
18
- startOperator: '>=',
19
- startValue: -5.5,
20
- endOperator: '<',
21
- endValue: 10,
22
- },
23
- ];
24
- response = new FilterSerializer(numbers, 'number').serialize();
25
- console.log(...numbers, '\n', response.result, '\n');
26
-
27
- const booleans: BooleanClause[] = [{operator: 'NULL'}, {operator: 'TRUE'}];
28
-
29
- response = new FilterSerializer(booleans, 'boolean').serialize();
30
- console.log(...booleans, '\n', response.result, '\n');
31
-
32
- const dates: DateClause[] = [
33
- {operator: 'YESTERDAY'},
34
- {operator: 'NEXT', unit: 'TUESDAY'},
35
- ];
36
- response = new FilterSerializer(dates, 'date').serialize();
37
- console.log(...dates, '\n', response.result, '\n');
38
- }
39
-
40
- aSimpleSerializer();
@@ -1,9 +0,0 @@
1
- import {Clause} from './clause_types';
2
-
3
- export abstract class BaseSerializer {
4
- constructor(protected clauses: Clause[]) {
5
- this.clauses = clauses;
6
- }
7
-
8
- public abstract serialize(): string;
9
- }
@@ -1,68 +0,0 @@
1
- import {FilterError, FilterParserResponse} from './filter_types';
2
- import {Token} from './token_types';
3
- import {BooleanParser} from './boolean_parser';
4
- import {StringParser} from './string_parser';
5
- import {NumberParser} from './number_parser';
6
- import {DateParser} from './date_parser';
7
- import {BaseParser} from './base_parser';
8
-
9
- export type FilterType = 'boolean' | 'number' | 'string' | 'date';
10
-
11
- export class FilterParser {
12
- constructor(
13
- private input: string,
14
- private type: FilterType
15
- ) {
16
- this.input = input;
17
- this.type = type;
18
- }
19
-
20
- private initParser(): BaseParser {
21
- switch (this.type) {
22
- case 'boolean':
23
- return new BooleanParser(this.input);
24
- case 'number':
25
- return new NumberParser(this.input);
26
- case 'string':
27
- return new StringParser(this.input);
28
- case 'date':
29
- return new DateParser(this.input);
30
- }
31
- }
32
-
33
- /* eslint-disable no-console */
34
- public getTokens(): Token[] {
35
- let tokens: Token[] = [];
36
- try {
37
- const parser = this.initParser();
38
- tokens = parser.getTokens();
39
- } catch (ex: Error | unknown) {
40
- if (ex instanceof Error) console.error('Error: ', ex.message, '\n');
41
- else {
42
- console.error('Unknown error: ', ex, '\n');
43
- }
44
- }
45
- return tokens;
46
- }
47
- /* eslint-enable no-console */
48
-
49
- private makeErrorMessage(message: string): FilterError {
50
- return {message, startIndex: 0, endIndex: this.input.length};
51
- }
52
-
53
- public parse(): FilterParserResponse {
54
- try {
55
- const parser = this.initParser();
56
- return parser.parse();
57
- } catch (ex: Error | unknown) {
58
- if (ex instanceof Error) {
59
- return {clauses: [], errors: [this.makeErrorMessage(ex.message)]};
60
- } else {
61
- return {
62
- clauses: [],
63
- errors: [this.makeErrorMessage('Unknown error ' + ex)],
64
- };
65
- }
66
- }
67
- }
68
- }
@@ -1,49 +0,0 @@
1
- import {Clause} from './clause_types';
2
- import {BooleanSerializer} from './boolean_serializer';
3
- import {StringSerializer} from './string_serializer';
4
- import {NumberSerializer} from './number_serializer';
5
- import {DateSerializer} from './date_serializer';
6
- import {BaseSerializer} from './base_serializer';
7
-
8
- export type FilterType = 'boolean' | 'number' | 'string' | 'date';
9
-
10
- export interface FilterSerializerResponse {
11
- result: string;
12
- error?: string;
13
- }
14
-
15
- export class FilterSerializer {
16
- constructor(
17
- private input: Clause[],
18
- private type: FilterType
19
- ) {
20
- this.input = input;
21
- this.type = type;
22
- }
23
-
24
- private initSerializer(): BaseSerializer {
25
- switch (this.type) {
26
- case 'boolean':
27
- return new BooleanSerializer(this.input);
28
- case 'number':
29
- return new NumberSerializer(this.input);
30
- case 'string':
31
- return new StringSerializer(this.input);
32
- case 'date':
33
- return new DateSerializer(this.input);
34
- }
35
- }
36
-
37
- public serialize(): FilterSerializerResponse {
38
- try {
39
- const serializer = this.initSerializer();
40
- return {result: serializer.serialize()};
41
- } catch (ex: Error | unknown) {
42
- if (ex instanceof Error) {
43
- return {result: '', error: ex.message};
44
- } else {
45
- return {result: '', error: 'Unknown error ' + ex};
46
- }
47
- }
48
- }
49
- }
@@ -1,12 +0,0 @@
1
- import {Clause} from './clause_types';
2
-
3
- export interface FilterError {
4
- message: string;
5
- startIndex: number;
6
- endIndex: number;
7
- }
8
-
9
- export interface FilterParserResponse {
10
- clauses: Clause[];
11
- errors: FilterError[];
12
- }