@qrvey/formula-lang 0.3.0 → 0.4.0

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 (126) hide show
  1. package/CHANGELOG.md +11 -0
  2. package/__tests__/integration/__mocks__/context.ts +23 -0
  3. package/__tests__/integration/__mocks__/elasticsearchScripts.ts +11 -4
  4. package/__tests__/integration/__mocks__/sqlScripts.ts +3 -2
  5. package/__tests__/integration/elasticsearch.test.ts +17 -3
  6. package/__tests__/integration/expression.test.ts +34 -0
  7. package/__tests__/integration/redshift.test.ts +15 -0
  8. package/__tests__/integration/sonwflake.test.ts +15 -0
  9. package/dist/constants/interfaces.d.ts +8 -8
  10. package/dist/transpiler/columnTranspilation.d.ts +3 -0
  11. package/dist/transpiler/columnTranspilation.js +19 -0
  12. package/dist/transpiler/columnTranspilation.js.map +1 -0
  13. package/dist/transpiler/index.d.ts +3 -2
  14. package/dist/transpiler/index.js +6 -1
  15. package/dist/transpiler/index.js.map +1 -1
  16. package/dist/utils/getVariableType.d.ts +3 -3
  17. package/dist/utils/getVariableType.js.map +1 -1
  18. package/package.json +1 -1
  19. package/pkg/dist/constants/index.d.ts +0 -42
  20. package/pkg/dist/constants/index.js +0 -86
  21. package/pkg/dist/constants/index.js.map +0 -1
  22. package/pkg/dist/constants/interfaces.d.ts +0 -62
  23. package/pkg/dist/constants/interfaces.js +0 -2
  24. package/pkg/dist/constants/interfaces.js.map +0 -1
  25. package/pkg/dist/errors/definitions.d.ts +0 -26
  26. package/pkg/dist/errors/definitions.js +0 -42
  27. package/pkg/dist/errors/definitions.js.map +0 -1
  28. package/pkg/dist/errors/elasticsearch.d.ts +0 -24
  29. package/pkg/dist/errors/elasticsearch.js +0 -27
  30. package/pkg/dist/errors/elasticsearch.js.map +0 -1
  31. package/pkg/dist/errors/engineErrors.d.ts +0 -2
  32. package/pkg/dist/errors/engineErrors.js +0 -21
  33. package/pkg/dist/errors/engineErrors.js.map +0 -1
  34. package/pkg/dist/errors/index.d.ts +0 -2
  35. package/pkg/dist/errors/index.js +0 -5
  36. package/pkg/dist/errors/index.js.map +0 -1
  37. package/pkg/dist/errors/snowflake.d.ts +0 -15
  38. package/pkg/dist/errors/snowflake.js +0 -17
  39. package/pkg/dist/errors/snowflake.js.map +0 -1
  40. package/pkg/dist/functions/abs.d.ts +0 -5
  41. package/pkg/dist/functions/abs.js +0 -35
  42. package/pkg/dist/functions/abs.js.map +0 -1
  43. package/pkg/dist/functions/datedif.d.ts +0 -5
  44. package/pkg/dist/functions/datedif.js +0 -58
  45. package/pkg/dist/functions/datedif.js.map +0 -1
  46. package/pkg/dist/functions/day.d.ts +0 -5
  47. package/pkg/dist/functions/day.js +0 -36
  48. package/pkg/dist/functions/day.js.map +0 -1
  49. package/pkg/dist/functions/hour.d.ts +0 -5
  50. package/pkg/dist/functions/hour.js +0 -36
  51. package/pkg/dist/functions/hour.js.map +0 -1
  52. package/pkg/dist/functions/if.d.ts +0 -5
  53. package/pkg/dist/functions/if.js +0 -49
  54. package/pkg/dist/functions/if.js.map +0 -1
  55. package/pkg/dist/functions/ifs.d.ts +0 -5
  56. package/pkg/dist/functions/ifs.js +0 -71
  57. package/pkg/dist/functions/ifs.js.map +0 -1
  58. package/pkg/dist/functions/index.d.ts +0 -4
  59. package/pkg/dist/functions/index.js +0 -29
  60. package/pkg/dist/functions/index.js.map +0 -1
  61. package/pkg/dist/functions/mid.d.ts +0 -5
  62. package/pkg/dist/functions/mid.js +0 -51
  63. package/pkg/dist/functions/mid.js.map +0 -1
  64. package/pkg/dist/functions/minute.d.ts +0 -5
  65. package/pkg/dist/functions/minute.js +0 -36
  66. package/pkg/dist/functions/minute.js.map +0 -1
  67. package/pkg/dist/functions/month.d.ts +0 -5
  68. package/pkg/dist/functions/month.js +0 -36
  69. package/pkg/dist/functions/month.js.map +0 -1
  70. package/pkg/dist/functions/second.d.ts +0 -5
  71. package/pkg/dist/functions/second.js +0 -36
  72. package/pkg/dist/functions/second.js.map +0 -1
  73. package/pkg/dist/functions/year.d.ts +0 -5
  74. package/pkg/dist/functions/year.js +0 -36
  75. package/pkg/dist/functions/year.js.map +0 -1
  76. package/pkg/dist/grammar/generated/qformula.lang.js +0 -43
  77. package/pkg/dist/grammar/generated/qformula.lang.js.map +0 -1
  78. package/pkg/dist/grammar/qformula.grammar.d.ts +0 -1
  79. package/pkg/dist/grammar/qformula.grammar.js +0 -2
  80. package/pkg/dist/grammar/qformula.grammar.js.map +0 -1
  81. package/pkg/dist/index.js +0 -29
  82. package/pkg/dist/index.js.map +0 -1
  83. package/pkg/dist/parser/json-parser.js +0 -139
  84. package/pkg/dist/parser/json-parser.js.map +0 -1
  85. package/pkg/dist/transpiler/index.d.ts +0 -17
  86. package/pkg/dist/transpiler/index.js +0 -82
  87. package/pkg/dist/transpiler/index.js.map +0 -1
  88. package/pkg/dist/transpiler/validateFuncStructure.d.ts +0 -2
  89. package/pkg/dist/transpiler/validateFuncStructure.js +0 -35
  90. package/pkg/dist/transpiler/validateFuncStructure.js.map +0 -1
  91. package/pkg/dist/utils/customFunctions.d.ts +0 -2
  92. package/pkg/dist/utils/customFunctions.js +0 -11
  93. package/pkg/dist/utils/customFunctions.js.map +0 -1
  94. package/pkg/dist/utils/elasticsearch/index.d.ts +0 -1
  95. package/pkg/dist/utils/elasticsearch/index.js +0 -15
  96. package/pkg/dist/utils/elasticsearch/index.js.map +0 -1
  97. package/pkg/dist/utils/elasticsearch/scripts.d.ts +0 -9
  98. package/pkg/dist/utils/elasticsearch/scripts.js +0 -33
  99. package/pkg/dist/utils/elasticsearch/scripts.js.map +0 -1
  100. package/pkg/dist/utils/getMonthMaxDayAllowed.d.ts +0 -7
  101. package/pkg/dist/utils/getMonthMaxDayAllowed.js +0 -22
  102. package/pkg/dist/utils/getMonthMaxDayAllowed.js.map +0 -1
  103. package/pkg/dist/utils/getNodeValue.d.ts +0 -2
  104. package/pkg/dist/utils/getNodeValue.js +0 -9
  105. package/pkg/dist/utils/getNodeValue.js.map +0 -1
  106. package/pkg/dist/utils/index.d.ts +0 -8
  107. package/pkg/dist/utils/index.js +0 -9
  108. package/pkg/dist/utils/index.js.map +0 -1
  109. package/pkg/dist/utils/isDateParam.d.ts +0 -2
  110. package/pkg/dist/utils/isDateParam.js +0 -10
  111. package/pkg/dist/utils/isDateParam.js.map +0 -1
  112. package/pkg/dist/utils/isNumberParam.d.ts +0 -2
  113. package/pkg/dist/utils/isNumberParam.js +0 -8
  114. package/pkg/dist/utils/isNumberParam.js.map +0 -1
  115. package/pkg/dist/utils/isPositiveNumberParam.d.ts +0 -2
  116. package/pkg/dist/utils/isPositiveNumberParam.js +0 -8
  117. package/pkg/dist/utils/isPositiveNumberParam.js.map +0 -1
  118. package/pkg/dist/utils/isStringParam.d.ts +0 -2
  119. package/pkg/dist/utils/isStringParam.js +0 -8
  120. package/pkg/dist/utils/isStringParam.js.map +0 -1
  121. package/pkg/dist/utils/isValidDate.d.ts +0 -1
  122. package/pkg/dist/utils/isValidDate.js +0 -4
  123. package/pkg/dist/utils/isValidDate.js.map +0 -1
  124. package/pkg/dist/utils/sql/scripts.d.ts +0 -2
  125. package/pkg/dist/utils/sql/scripts.js +0 -39
  126. package/pkg/dist/utils/sql/scripts.js.map +0 -1
package/CHANGELOG.md CHANGED
@@ -1,3 +1,14 @@
1
+ <a name="0.4.0"></a>
2
+ # [0.4.0](https://bitbucket.org/qrvey/qrvey_formula_lang/compare/v0.3.1...v0.4.0) (2023-04-24)
3
+
4
+
5
+ ### Features
6
+
7
+ * **columns:** add column transpilation from AST ([cd28ff9](https://bitbucket.org/qrvey/qrvey_formula_lang/commits/cd28ff9))
8
+ * **columns:** support columns ([478909c](https://bitbucket.org/qrvey/qrvey_formula_lang/commits/478909c))
9
+
10
+
11
+
1
12
  <a name="0.3.0"></a>
2
13
  # [0.3.0](https://bitbucket.org/qrvey/qrvey_formula_lang/compare/v0.2.0...v0.3.0) (2023-04-24)
3
14
 
@@ -0,0 +1,23 @@
1
+ import { FormulaContext } from '../../../src/constants/interfaces';
2
+
3
+ export const basicContext: FormulaContext = {
4
+ model: [
5
+ {
6
+ id: 'ID123.test',
7
+ label: 'Column String',
8
+ column: 'Origin_String_Column_Test',
9
+ type: 'string',
10
+ },
11
+ {
12
+ id: 'DateID1',
13
+ label: 'Column Date',
14
+ column: 'Origin_Date_Column_Test',
15
+ type: 'date',
16
+ },
17
+ {
18
+ id: 'NOW',
19
+ label: 'NOW',
20
+ type: 'string',
21
+ },
22
+ ],
23
+ };
@@ -7,12 +7,19 @@ export const dateFormatScript = `String DATE_FORMAT_SCRIPT(def date_value, Strin
7
7
  return DateTimeFormatter.ofPattern(format).format(date_value)
8
8
  }`;
9
9
 
10
- export function dateFormatToInt(format: string): string {
11
- return `Integer.parseInt(DATE_FORMAT_SCRIPT(ZonedDateTime.parse("2023-12-31T00:00:00.000Z"), '${format}'))`;
10
+ export function dateFormatToInt(
11
+ format: string,
12
+ column: string | undefined = undefined,
13
+ ): string {
14
+ if (!column) column = `ZonedDateTime.parse("2023-12-31T00:00:00.000Z")`;
15
+ return `Integer.parseInt(DATE_FORMAT_SCRIPT(${column}, '${format}'))`;
12
16
  }
13
17
 
14
- export function dateParser(format: string): string {
15
- const dateToInt = dateFormatToInt(format);
18
+ export function dateParser(
19
+ format: string,
20
+ column: string | undefined = undefined,
21
+ ): string {
22
+ const dateToInt = dateFormatToInt(format, column);
16
23
  return `${dateFormatScript}\n${dateToInt}`;
17
24
  }
18
25
 
@@ -1,5 +1,6 @@
1
- export function datePart(part: string) {
2
- return `DATE_PART('${part}', CAST('2023-12-31T00:00:00.000Z' AS TIMESTAMPTZ))`;
1
+ export function datePart(part: string, column: string | undefined = undefined) {
2
+ if (!column) column = `CAST('2023-12-31T00:00:00.000Z' AS TIMESTAMPTZ)`;
3
+ return `DATE_PART('${part}', ${column})`;
3
4
  }
4
5
 
5
6
  export function dateDif(unit: string): string {
@@ -5,6 +5,7 @@ import {
5
5
  dateFormatToInt,
6
6
  dateFormatScript,
7
7
  } from './__mocks__/elasticsearchScripts';
8
+ import { basicContext } from './__mocks__/context';
8
9
  const currentEngine = ENGINES.ELASTICSEARCH;
9
10
 
10
11
  describe('ELASTICSEARCH Transpile program', () => {
@@ -32,6 +33,13 @@ describe('ELASTICSEARCH Transpile program', () => {
32
33
  expect(result?.expression).toBe(`Math.abs(5)`);
33
34
  });
34
35
 
36
+ test('Cast Date string', () => {
37
+ const result = Transpile('"12/31/2022 13:35:45"', currentEngine);
38
+ expect(result?.expression).toBe(
39
+ `ZonedDateTime.parse("2022-12-31T13:35:45.000Z")`,
40
+ );
41
+ });
42
+
35
43
  test('DAY function', () => {
36
44
  const result = Transpile('DAY("12/31/2023")', currentEngine);
37
45
  const mock = dateParser('dd').replace(/\n/g, '');
@@ -43,13 +51,19 @@ describe('ELASTICSEARCH Transpile program', () => {
43
51
  'DAY("12/31/2023") + DAY("12/31/2023")',
44
52
  currentEngine,
45
53
  );
46
- const concat = `${dateFormatScript}\n(${dateFormatToInt(
47
- 'dd',
48
- )} + ${dateFormatToInt('dd')})`;
54
+ const ddToInt = dateFormatToInt('dd');
55
+ const concat = `${dateFormatScript}\n(${ddToInt} + ${ddToInt})`;
49
56
  const mock = concat.replace(/\n/g, '');
50
57
  expect(result?.expression?.replace(/\n/g, '')).toBe(mock);
51
58
  });
52
59
 
60
+ test('DAY function with a variable Column', () => {
61
+ const result = Transpile('DAY([DateID1])', currentEngine, basicContext);
62
+ const column = 'doc["Origin_Date_Column_Test"]';
63
+ const mock = dateParser('dd', column).replace(/\n/g, '');
64
+ expect(result?.expression?.replace(/\n/g, '')).toBe(mock);
65
+ });
66
+
53
67
  test('MONTH function', () => {
54
68
  const result = Transpile('MONTH("12/31/2023")', currentEngine);
55
69
  const mock = dateParser('MM').replace(/\n/g, '');
@@ -19,4 +19,38 @@ describe('Raw Expression test suite', () => {
19
19
  expect(result?.error).not.toBeUndefined();
20
20
  expect(result?.error instanceof MissingArgumentError).toBeTruthy();
21
21
  });
22
+
23
+ test('Should transpile a column', () => {
24
+ const program = '[8db21fc4]';
25
+ const columnName = 'Origin_Column_Test';
26
+ const result = Transpile(program, ENGINES.ELASTICSEARCH, {
27
+ model: [
28
+ {
29
+ label: 'Text',
30
+ id: '8db21fc4',
31
+ column: columnName,
32
+ type: 'string',
33
+ },
34
+ ],
35
+ });
36
+ expect(result?.valid).toBe(true);
37
+ expect(result?.expression).toBe(`doc["${columnName}"]`);
38
+ });
39
+ /*
40
+ test('Should transpile a column with property', () => {
41
+ const program = '[8db21fc4.country]';
42
+ const columnName = 'Origin_Column_Test';
43
+ const result = Transpile(program, ENGINES.ELASTICSEARCH, {
44
+ model: [
45
+ {
46
+ label: 'Text',
47
+ id: '8db21fc4',
48
+ column: columnName,
49
+ type: 'string',
50
+ },
51
+ ],
52
+ });
53
+ expect(result?.valid).toBe(true);
54
+ expect(result?.expression).toBe(`doc["${columnName}"]`);
55
+ });*/
22
56
  });
@@ -1,5 +1,6 @@
1
1
  import { ENGINES, Transpile } from '../../src';
2
2
  import { datePart, dateDif } from './__mocks__/sqlScripts';
3
+ import { basicContext } from './__mocks__/context';
3
4
  const currentEngine = ENGINES.REDSHIFT;
4
5
 
5
6
  describe('SNOWFLAKE Transpile program', () => {
@@ -27,11 +28,25 @@ describe('SNOWFLAKE Transpile program', () => {
27
28
  expect(result?.expression).toBe(`ABS(5)`);
28
29
  });
29
30
 
31
+ test('Cast Date string', () => {
32
+ const result = Transpile('"12/31/2022 13:35:45"', currentEngine);
33
+ expect(result?.expression).toBe(
34
+ `CAST('2022-12-31T13:35:45.000Z' AS TIMESTAMPTZ)`,
35
+ );
36
+ });
37
+
30
38
  test('DAY function', () => {
31
39
  const result = Transpile('DAY("12/31/2023")', currentEngine);
32
40
  expect(result?.expression).toBe(datePart('day'));
33
41
  });
34
42
 
43
+ test('DAY function with a variable Column', () => {
44
+ const result = Transpile('DAY([DateID1])', currentEngine, basicContext);
45
+ const column = '"Origin_Date_Column_Test"';
46
+ const mock = datePart('day', column).replace(/\n/g, '');
47
+ expect(result?.expression?.replace(/\n/g, '')).toBe(mock);
48
+ });
49
+
35
50
  test('MONTH function', () => {
36
51
  const result = Transpile('MONTH("12/31/2023")', currentEngine);
37
52
  expect(result?.expression).toBe(datePart('month'));
@@ -1,5 +1,6 @@
1
1
  import { ENGINES, Transpile } from '../../src';
2
2
  import { datePart, dateDif } from './__mocks__/sqlScripts';
3
+ import { basicContext } from './__mocks__/context';
3
4
  const currentEngine = ENGINES.SNOWFLAKE;
4
5
 
5
6
  describe('SNOWFLAKE Transpile program', () => {
@@ -27,11 +28,25 @@ describe('SNOWFLAKE Transpile program', () => {
27
28
  expect(result?.expression).toBe(`ABS(5)`);
28
29
  });
29
30
 
31
+ test('Cast Date string', () => {
32
+ const result = Transpile('"12/31/2022 13:35:45"', currentEngine);
33
+ expect(result?.expression).toBe(
34
+ `CAST('2022-12-31T13:35:45.000Z' AS TIMESTAMPTZ)`,
35
+ );
36
+ });
37
+
30
38
  test('DAY function', () => {
31
39
  const result = Transpile('DAY("12/31/2023")', currentEngine);
32
40
  expect(result?.expression).toBe(datePart('day'));
33
41
  });
34
42
 
43
+ test('DAY function with a variable Column', () => {
44
+ const result = Transpile('DAY([DateID1])', currentEngine, basicContext);
45
+ const column = '"Origin_Date_Column_Test"';
46
+ const mock = datePart('day', column).replace(/\n/g, '');
47
+ expect(result?.expression?.replace(/\n/g, '')).toBe(mock);
48
+ });
49
+
35
50
  test('MONTH function', () => {
36
51
  const result = Transpile('MONTH("12/31/2023")', currentEngine);
37
52
  expect(result?.expression).toBe(datePart('month'));
@@ -8,7 +8,7 @@ export interface FunctionDefinition extends FunctionElementDefinition {
8
8
  transpiler: TranspilerEnginesFunction;
9
9
  parameters?: Array<FunctionParameters>;
10
10
  }
11
- type TranspilerEnginesFunction = {
11
+ export type TranspilerEnginesFunction = {
12
12
  [key in ENGINES]: Function;
13
13
  };
14
14
  interface FunctionParameters extends FunctionElementDefinition {
@@ -58,24 +58,24 @@ export interface FunctionCallAST extends CommonAST {
58
58
  arguments: Array<CommonAST>;
59
59
  }
60
60
  export type ValueASTType = string | boolean | number | CommonAST[] | null | Date;
61
- export interface ValueAST extends CommonAST {
61
+ export interface CommonValueAST extends CommonAST {
62
62
  value: ValueASTType;
63
63
  }
64
- export interface VariableAST extends ValueAST {
65
- context?: VariableDefinition;
64
+ export interface VariableAST extends CommonValueAST {
65
+ context?: VariableContextDefinition;
66
66
  }
67
- export interface LiteralAST extends ValueAST {
67
+ export interface LiteralAST extends CommonValueAST {
68
68
  dataType: string;
69
69
  }
70
- export type DateDifUnitParam = 'Y' | 'M' | 'D';
71
- export interface VariableDefinition {
70
+ export interface VariableContextDefinition {
72
71
  label: string;
73
72
  id: string;
74
73
  column?: string;
75
74
  type: string;
76
75
  }
77
76
  export interface FormulaContext {
78
- model?: VariableDefinition[];
77
+ model?: VariableContextDefinition[];
79
78
  }
80
79
  export type VariableASTType = 'Variable' | 'Column' | 'Token';
80
+ export type DateDifUnitParam = 'Y' | 'M' | 'D';
81
81
  export {};
@@ -0,0 +1,3 @@
1
+ import { ENGINES } from '../constants';
2
+ import { ProcessNodeResult, VariableAST } from '../constants/interfaces';
3
+ export declare function columnTranspilation(engine: ENGINES, { value, context }: VariableAST): ProcessNodeResult;
@@ -0,0 +1,19 @@
1
+ import { ENGINES } from '../constants';
2
+ export function columnTranspilation(engine, { value, context }) {
3
+ if (!context || !context.column)
4
+ return { value };
5
+ const columnForEngine = {
6
+ [ENGINES.ELASTICSEARCH]: elasticsearch,
7
+ [ENGINES.SNOWFLAKE]: sql,
8
+ [ENGINES.REDSHIFT]: sql,
9
+ };
10
+ const result = columnForEngine[engine](context);
11
+ return { value: result, dataType: context.type };
12
+ }
13
+ function elasticsearch(context) {
14
+ return `doc["${context.column}"]`;
15
+ }
16
+ function sql(context) {
17
+ return `"${context.column}"`;
18
+ }
19
+ //# sourceMappingURL=columnTranspilation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"columnTranspilation.js","sourceRoot":"","sources":["../../src/transpiler/columnTranspilation.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAOvC,MAAM,UAAU,mBAAmB,CAC/B,MAAe,EACf,EAAE,KAAK,EAAE,OAAO,EAAe;IAE/B,IAAI,CAAC,OAAO,IAAI,CAAC,OAAO,CAAC,MAAM;QAAE,OAAO,EAAE,KAAK,EAAE,CAAC;IAClD,MAAM,eAAe,GAAG;QACpB,CAAC,OAAO,CAAC,aAAa,CAAC,EAAE,aAAa;QACtC,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE,GAAG;QACxB,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,GAAG;KAC1B,CAAC;IACF,MAAM,MAAM,GAAG,eAAe,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,CAAC;IAChD,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,CAAC,IAAI,EAAE,CAAC;AACrD,CAAC;AAED,SAAS,aAAa,CAAC,OAAkC;IACrD,OAAO,QAAQ,OAAO,CAAC,MAAM,IAAI,CAAC;AACtC,CAAC;AAED,SAAS,GAAG,CAAC,OAAkC;IAC3C,OAAO,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC;AACjC,CAAC"}
@@ -1,12 +1,13 @@
1
1
  import { ENGINES } from '../constants';
2
- import { CommonAST, ProgramAST, BinaryExpressionAST, UnaryExpressionAST, FunctionCallAST, LiteralAST, FunctionDefinition, TranspilationResponse, ProcessNodeResult } from '../constants/interfaces';
2
+ import { CommonAST, ProgramAST, BinaryExpressionAST, UnaryExpressionAST, FunctionCallAST, LiteralAST, FunctionDefinition, TranspilationResponse, ProcessNodeResult, VariableAST } from '../constants/interfaces';
3
3
  export declare class Transpiler {
4
- readonly engine: ENGINES;
5
4
  private ast;
5
+ private readonly engine;
6
6
  private customFunctionList;
7
7
  constructor(ast: ProgramAST, engine: ENGINES);
8
8
  get(): TranspilationResponse;
9
9
  processNode(expression: CommonAST): ProcessNodeResult;
10
+ column(data: VariableAST): ProcessNodeResult;
10
11
  literal({ value, dataType }: LiteralAST): ProcessNodeResult;
11
12
  unaryExpression({ operator, right, }: UnaryExpressionAST): ProcessNodeResult;
12
13
  binaryExpression({ left, operator, right, }: BinaryExpressionAST): ProcessNodeResult;
@@ -3,11 +3,12 @@ import { UnknownFunctionError } from '../errors/definitions';
3
3
  import { functionList } from '../functions';
4
4
  import { customFunction as customFunctionUtil, customDateCast } from '../utils';
5
5
  import { validateFuncStructure } from './validateFuncStructure';
6
+ import { columnTranspilation } from './columnTranspilation';
6
7
  export class Transpiler {
7
8
  constructor(ast, engine) {
8
- this.customFunctionList = new Set();
9
9
  this.ast = ast;
10
10
  this.engine = engine;
11
+ this.customFunctionList = new Set();
11
12
  }
12
13
  get() {
13
14
  try {
@@ -30,12 +31,16 @@ export class Transpiler {
30
31
  const nodes = {
31
32
  [AST_TYPES.variable]: this.literal,
32
33
  [AST_TYPES.literal]: this.literal,
34
+ [AST_TYPES.column]: this.column,
33
35
  [AST_TYPES.unaryExpression]: this.unaryExpression,
34
36
  [AST_TYPES.binaryExpression]: this.binaryExpression,
35
37
  [AST_TYPES.functionCall]: this.functionCall,
36
38
  };
37
39
  return nodes[type].call(this, expression);
38
40
  }
41
+ column(data) {
42
+ return columnTranspilation(this.engine, data);
43
+ }
39
44
  literal({ value, dataType }) {
40
45
  if (dataType === 'date')
41
46
  value = customDateCast(this.engine)(value);
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/transpiler/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/transpiler/index.ts"],"names":[],"mappings":"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"}
@@ -1,3 +1,3 @@
1
- import { FormulaContext, VariableASTType, VariableDefinition } from '../constants/interfaces';
2
- export declare function getVariableContext(variableName: string, context?: FormulaContext): VariableDefinition | undefined;
3
- export declare function getVariableType(columnCxt?: VariableDefinition): VariableASTType;
1
+ import { FormulaContext, VariableASTType, VariableContextDefinition } from '../constants/interfaces';
2
+ export declare function getVariableContext(variableName: string, context?: FormulaContext): VariableContextDefinition | undefined;
3
+ export declare function getVariableType(columnCxt?: VariableContextDefinition): VariableASTType;
@@ -1 +1 @@
1
- {"version":3,"file":"getVariableType.js","sourceRoot":"","sources":["../../src/utils/getVariableType.ts"],"names":[],"mappings":"AAMA,MAAM,UAAU,kBAAkB,CAC9B,YAAoB,EACpB,OAAwB;;IAExB,OAAO,MAAA,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,KAAK,0CAAE,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,EAAE,KAAK,YAAY,CAAC,CAAC;AACtE,CAAC;AAED,SAAS,uBAAuB,CAC5B,eAAmC;IAEnC,OAAO,eAAe,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC;AACvD,CAAC;AAED,MAAM,UAAU,eAAe,CAC3B,SAA8B;IAE9B,OAAO,SAAS,KAAK,SAAS;QAC1B,CAAC,CAAC,uBAAuB,CAAC,SAAS,CAAC;QACpC,CAAC,CAAC,UAAU,CAAC;AACrB,CAAC"}
1
+ {"version":3,"file":"getVariableType.js","sourceRoot":"","sources":["../../src/utils/getVariableType.ts"],"names":[],"mappings":"AAMA,MAAM,UAAU,kBAAkB,CAC9B,YAAoB,EACpB,OAAwB;;IAExB,OAAO,MAAA,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,KAAK,0CAAE,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,EAAE,KAAK,YAAY,CAAC,CAAC;AACtE,CAAC;AAED,SAAS,uBAAuB,CAC5B,eAA0C;IAE1C,OAAO,eAAe,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC;AACvD,CAAC;AAED,MAAM,UAAU,eAAe,CAC3B,SAAqC;IAErC,OAAO,SAAS,KAAK,SAAS;QAC1B,CAAC,CAAC,uBAAuB,CAAC,SAAS,CAAC;QACpC,CAAC,CAAC,UAAU,CAAC;AACrB,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@qrvey/formula-lang",
3
- "version": "0.3.0",
3
+ "version": "0.4.0",
4
4
  "description": "QFormula support for qrvey projects",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
@@ -1,42 +0,0 @@
1
- export declare enum ENGINES {
2
- ELASTICSEARCH = "elasticsearch",
3
- SNOWFLAKE = "snowflake",
4
- REDSHIFT = "redshift"
5
- }
6
- export declare enum AST_TYPES {
7
- program = "Program",
8
- binaryExpression = "BinaryExpression",
9
- unaryExpression = "UnaryExpression",
10
- functionCall = "FunctionCall",
11
- variable = "Variable",
12
- literal = "Literal"
13
- }
14
- export declare enum ERROR_LIST {
15
- arguments = "arguments",
16
- nulls = "nulls",
17
- floatingPoint = "floatingPoint",
18
- missingString = "missingString",
19
- missingNumber = "missingNumber",
20
- missingDate = "missingDate",
21
- greaterThanZero = "greaterThanZero",
22
- missingArg = "missingArg",
23
- unknownFunction = "unknownFunction",
24
- unknown = "unknown",
25
- customDateDifParams = "customDateDifParams",
26
- tooManyArguments = "tooManyArguments"
27
- }
28
- type iErrorsType = {
29
- [key in ERROR_LIST]: IErrorDictionary;
30
- };
31
- interface IErrorDictionary {
32
- message: string;
33
- code: string;
34
- }
35
- export declare const ERROR_DICTIONARY: iErrorsType;
36
- export type CustomEngineOperators = {
37
- [key in ENGINES]?: {
38
- [T: string]: string;
39
- };
40
- };
41
- export declare const CustomOperators: CustomEngineOperators;
42
- export {};
@@ -1,86 +0,0 @@
1
- export var ENGINES;
2
- (function (ENGINES) {
3
- ENGINES["ELASTICSEARCH"] = "elasticsearch";
4
- ENGINES["SNOWFLAKE"] = "snowflake";
5
- ENGINES["REDSHIFT"] = "redshift";
6
- })(ENGINES || (ENGINES = {}));
7
- export var AST_TYPES;
8
- (function (AST_TYPES) {
9
- AST_TYPES["program"] = "Program";
10
- AST_TYPES["binaryExpression"] = "BinaryExpression";
11
- AST_TYPES["unaryExpression"] = "UnaryExpression";
12
- AST_TYPES["functionCall"] = "FunctionCall";
13
- AST_TYPES["variable"] = "Variable";
14
- AST_TYPES["literal"] = "Literal";
15
- })(AST_TYPES || (AST_TYPES = {}));
16
- export var ERROR_LIST;
17
- (function (ERROR_LIST) {
18
- ERROR_LIST["arguments"] = "arguments";
19
- ERROR_LIST["nulls"] = "nulls";
20
- ERROR_LIST["floatingPoint"] = "floatingPoint";
21
- ERROR_LIST["missingString"] = "missingString";
22
- ERROR_LIST["missingNumber"] = "missingNumber";
23
- ERROR_LIST["missingDate"] = "missingDate";
24
- ERROR_LIST["greaterThanZero"] = "greaterThanZero";
25
- ERROR_LIST["missingArg"] = "missingArg";
26
- ERROR_LIST["unknownFunction"] = "unknownFunction";
27
- ERROR_LIST["unknown"] = "unknown";
28
- ERROR_LIST["customDateDifParams"] = "customDateDifParams";
29
- ERROR_LIST["tooManyArguments"] = "tooManyArguments";
30
- })(ERROR_LIST || (ERROR_LIST = {}));
31
- export const ERROR_DICTIONARY = {
32
- [ERROR_LIST.arguments]: {
33
- message: 'Ilegal number of arguments for function',
34
- code: 'NUMBER_ARGS',
35
- },
36
- [ERROR_LIST.nulls]: {
37
- message: 'Can not apply function with null values',
38
- code: 'NULL_FOUNDS',
39
- },
40
- [ERROR_LIST.floatingPoint]: {
41
- message: 'Invalid floating point operation to integer',
42
- code: 'FLOATING_POINT',
43
- },
44
- [ERROR_LIST.missingString]: {
45
- message: 'Element has to be a String',
46
- code: 'MISSING_STRING',
47
- },
48
- [ERROR_LIST.missingNumber]: {
49
- message: 'Element has to be a Number',
50
- code: 'MISSING_NUMBER',
51
- },
52
- [ERROR_LIST.missingDate]: {
53
- message: 'Element has to be a Date',
54
- code: 'MISSING_DATE',
55
- },
56
- [ERROR_LIST.greaterThanZero]: {
57
- message: 'Element has to be greater than 0',
58
- code: 'GREATER_THAN_ZERO',
59
- },
60
- [ERROR_LIST.missingArg]: {
61
- message: 'Missing arguments',
62
- code: 'MISSING_ARG',
63
- },
64
- [ERROR_LIST.unknownFunction]: {
65
- message: 'Unknown function',
66
- code: 'UNKNOWN_FUNCTION',
67
- },
68
- [ERROR_LIST.unknown]: {
69
- message: 'Unknown error',
70
- code: 'UNKNOWN',
71
- },
72
- [ERROR_LIST.tooManyArguments]: {
73
- message: 'Too many arguments',
74
- code: 'TOO_MANY_ARGUMENTS',
75
- },
76
- [ERROR_LIST.customDateDifParams]: {
77
- message: 'Unit param have to be equal to: "Y", "M", "D"',
78
- code: 'DATE_DIF_UNIT_PARAM',
79
- },
80
- };
81
- export const CustomOperators = {
82
- [ENGINES.ELASTICSEARCH]: {
83
- '=': '==',
84
- },
85
- };
86
- //# sourceMappingURL=index.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/constants/index.ts"],"names":[],"mappings":"AAAA,MAAM,CAAN,IAAY,OAIX;AAJD,WAAY,OAAO;IACf,0CAA+B,CAAA;IAC/B,kCAAuB,CAAA;IACvB,gCAAqB,CAAA;AACzB,CAAC,EAJW,OAAO,KAAP,OAAO,QAIlB;AAED,MAAM,CAAN,IAAY,SAOX;AAPD,WAAY,SAAS;IACjB,gCAAmB,CAAA;IACnB,kDAAqC,CAAA;IACrC,gDAAmC,CAAA;IACnC,0CAA6B,CAAA;IAC7B,kCAAqB,CAAA;IACrB,gCAAmB,CAAA;AACvB,CAAC,EAPW,SAAS,KAAT,SAAS,QAOpB;AAED,MAAM,CAAN,IAAY,UAaX;AAbD,WAAY,UAAU;IAClB,qCAAuB,CAAA;IACvB,6BAAe,CAAA;IACf,6CAA+B,CAAA;IAC/B,6CAA+B,CAAA;IAC/B,6CAA+B,CAAA;IAC/B,yCAA2B,CAAA;IAC3B,iDAAmC,CAAA;IACnC,uCAAyB,CAAA;IACzB,iDAAmC,CAAA;IACnC,iCAAmB,CAAA;IACnB,yDAA2C,CAAA;IAC3C,mDAAqC,CAAA;AACzC,CAAC,EAbW,UAAU,KAAV,UAAU,QAarB;AAWD,MAAM,CAAC,MAAM,gBAAgB,GAAgB;IACzC,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE;QACpB,OAAO,EAAE,yCAAyC;QAClD,IAAI,EAAE,aAAa;KACtB;IACD,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE;QAChB,OAAO,EAAE,yCAAyC;QAClD,IAAI,EAAE,aAAa;KACtB;IACD,CAAC,UAAU,CAAC,aAAa,CAAC,EAAE;QACxB,OAAO,EAAE,6CAA6C;QACtD,IAAI,EAAE,gBAAgB;KACzB;IACD,CAAC,UAAU,CAAC,aAAa,CAAC,EAAE;QACxB,OAAO,EAAE,4BAA4B;QACrC,IAAI,EAAE,gBAAgB;KACzB;IACD,CAAC,UAAU,CAAC,aAAa,CAAC,EAAE;QACxB,OAAO,EAAE,4BAA4B;QACrC,IAAI,EAAE,gBAAgB;KACzB;IACD,CAAC,UAAU,CAAC,WAAW,CAAC,EAAE;QACtB,OAAO,EAAE,0BAA0B;QACnC,IAAI,EAAE,cAAc;KACvB;IACD,CAAC,UAAU,CAAC,eAAe,CAAC,EAAE;QAC1B,OAAO,EAAE,kCAAkC;QAC3C,IAAI,EAAE,mBAAmB;KAC5B;IACD,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE;QACrB,OAAO,EAAE,mBAAmB;QAC5B,IAAI,EAAE,aAAa;KACtB;IACD,CAAC,UAAU,CAAC,eAAe,CAAC,EAAE;QAC1B,OAAO,EAAE,kBAAkB;QAC3B,IAAI,EAAE,kBAAkB;KAC3B;IACD,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE;QAClB,OAAO,EAAE,eAAe;QACxB,IAAI,EAAE,SAAS;KAClB;IACD,CAAC,UAAU,CAAC,gBAAgB,CAAC,EAAE;QAC3B,OAAO,EAAE,oBAAoB;QAC7B,IAAI,EAAE,oBAAoB;KAC7B;IACD,CAAC,UAAU,CAAC,mBAAmB,CAAC,EAAE;QAC9B,OAAO,EAAE,+CAA+C;QACxD,IAAI,EAAE,qBAAqB;KAC9B;CACJ,CAAC;AAMF,MAAM,CAAC,MAAM,eAAe,GAA0B;IAClD,CAAC,OAAO,CAAC,aAAa,CAAC,EAAE;QACrB,GAAG,EAAE,IAAI;KACZ;CACJ,CAAC"}
@@ -1,62 +0,0 @@
1
- import { ENGINES, AST_TYPES } from '.';
2
- interface FunctionElementDefinition {
3
- identifier: string;
4
- name: string;
5
- }
6
- export interface FunctionDefinition extends FunctionElementDefinition {
7
- recursiveStartIn?: number;
8
- transpiler: TranspilerEnginesFunction;
9
- parameters?: Array<FunctionParameters>;
10
- }
11
- type TranspilerEnginesFunction = {
12
- [key in ENGINES]: Function;
13
- };
14
- interface FunctionParameters extends FunctionElementDefinition {
15
- type: string;
16
- optional: boolean;
17
- validator: Array<ValidatorFunctionParameter>;
18
- }
19
- interface ValidatorFunctionParameter {
20
- (args: any): ValidatorResponse;
21
- }
22
- export interface ValidatorResponse {
23
- valid: boolean;
24
- code?: string;
25
- message?: string;
26
- }
27
- export interface TranspilationResponse {
28
- valid: boolean;
29
- expression?: string;
30
- error?: any;
31
- }
32
- export interface FunctionList {
33
- [identifier: string]: FunctionDefinition;
34
- }
35
- export interface CommonAST {
36
- type: AST_TYPES;
37
- }
38
- export interface ProgramAST extends CommonAST {
39
- exp: string;
40
- lang: string;
41
- version: string;
42
- body?: CommonAST;
43
- }
44
- export interface UnaryExpressionAST extends CommonAST {
45
- operator: string;
46
- right: CommonAST;
47
- }
48
- export interface BinaryExpressionAST extends UnaryExpressionAST {
49
- left: CommonAST;
50
- }
51
- export interface FunctionCallAST extends CommonAST {
52
- name: string;
53
- arguments: Array<CommonAST>;
54
- }
55
- export interface VariableAST extends CommonAST {
56
- value: string | boolean | number | CommonAST[] | null | Date;
57
- }
58
- export interface LiteralAST extends VariableAST {
59
- dataType: string;
60
- }
61
- export type DateDifUnitParam = 'Y' | 'M' | 'D';
62
- export {};
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=interfaces.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"interfaces.js","sourceRoot":"","sources":["../../../src/constants/interfaces.ts"],"names":[],"mappings":""}
@@ -1,26 +0,0 @@
1
- import { FunctionCallAST, ValidatorResponse } from '../constants/interfaces';
2
- export declare class BaseError extends Error {
3
- code: string;
4
- node: FunctionCallAST | undefined;
5
- constructor(code: string, message: string, node?: FunctionCallAST);
6
- toString(): string;
7
- }
8
- export declare class GenericError extends BaseError {
9
- constructor(message?: string);
10
- }
11
- export declare class UnknownFunctionError extends BaseError {
12
- node: FunctionCallAST;
13
- constructor(node: FunctionCallAST);
14
- }
15
- export declare class MissingArgumentError extends BaseError {
16
- node: FunctionCallAST;
17
- constructor(node: FunctionCallAST);
18
- }
19
- export declare class TooManyArgumentsError extends BaseError {
20
- node: FunctionCallAST;
21
- constructor(node: FunctionCallAST);
22
- }
23
- export declare class InvalidArgumentError extends BaseError {
24
- node: FunctionCallAST;
25
- constructor(node: FunctionCallAST, validatorResponse: ValidatorResponse);
26
- }