1import {
2  QueryEditorExpression,
3  QueryEditorExpressionType,
4  QueryEditorArrayExpression,
5  QueryEditorOperatorExpression,
6  QueryEditorPropertyType,
7  QueryEditorGroupByExpression,
8  QueryEditorFunctionExpression,
9  QueryEditorFunctionParameterExpression,
10  QueryEditorPropertyExpression,
11} from '../expressions';
12
13export function createArray(
14  expressions: QueryEditorExpression[],
15  type: QueryEditorExpressionType.And | QueryEditorExpressionType.Or = QueryEditorExpressionType.And
16): QueryEditorArrayExpression {
17  const array = {
18    type,
19    expressions,
20  };
21
22  return array;
23}
24
25export function createOperator(property: string, operator: string, value?: string): QueryEditorOperatorExpression {
26  return {
27    type: QueryEditorExpressionType.Operator,
28    property: {
29      name: property,
30      type: QueryEditorPropertyType.String,
31    },
32    operator: {
33      name: operator,
34      value: value,
35    },
36  };
37}
38export function createGroupBy(column: string): QueryEditorGroupByExpression {
39  return {
40    type: QueryEditorExpressionType.GroupBy,
41    property: {
42      type: QueryEditorPropertyType.String,
43      name: column,
44    },
45  };
46}
47export function createFunction(name: string): QueryEditorFunctionExpression {
48  return {
49    type: QueryEditorExpressionType.Function,
50    name,
51  };
52}
53
54export function createFunctionWithParameter(functionName: string, params: string[]): QueryEditorFunctionExpression {
55  const reduce = createFunction(functionName);
56  reduce.parameters = params.map((name) => {
57    const param: QueryEditorFunctionParameterExpression = {
58      type: QueryEditorExpressionType.FunctionParameter,
59      name,
60    };
61
62    return param;
63  });
64
65  return reduce;
66}
67
68export function createProperty(name: string): QueryEditorPropertyExpression {
69  return {
70    type: QueryEditorExpressionType.Property,
71    property: {
72      type: QueryEditorPropertyType.String,
73      name: name,
74    },
75  };
76}
77