@red-hat-developer-hub/backstage-plugin-orchestrator-backend 8.9.4 → 8.9.5

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.
package/CHANGELOG.md CHANGED
@@ -1,5 +1,11 @@
1
1
  # @red-hat-developer-hub/backstage-plugin-orchestrator-backend
2
2
 
3
+ ## 8.9.5
4
+
5
+ ### Patch Changes
6
+
7
+ - 06ac2d0: Fix an issue where filtering workflow runs by status or date could show an error instead of results.
8
+
3
9
  ## 8.9.4
4
10
 
5
11
  ### Patch Changes
@@ -66,22 +66,40 @@ function handleNestedFilter(introspection, type, filter) {
66
66
  };
67
67
  return filterClause;
68
68
  }
69
- function handleBetweenOperator(filter) {
69
+ function getGraphQLVariableType(fieldName, fieldDef, type, isArray) {
70
+ if (isEnumFilter(fieldName, type)) {
71
+ return isArray ? "[ProcessInstanceState!]" : "ProcessInstanceState";
72
+ }
73
+ if (fieldDef?.type.name === backstagePluginOrchestratorCommon.TypeName.Date) {
74
+ return "DateTime!";
75
+ }
76
+ if (isArray) {
77
+ return "[String!]";
78
+ }
79
+ return "String";
80
+ }
81
+ function handleBetweenOperator(filter, fieldDef) {
70
82
  if (!Array.isArray(filter.value) || filter.value.length !== 2) {
71
83
  throw new Error("Between operator requires an array of two elements");
72
84
  }
85
+ const paramType = getGraphQLVariableType(
86
+ filter.field,
87
+ fieldDef,
88
+ "ProcessInstance",
89
+ false
90
+ );
73
91
  const filterClauseVariableArray = [];
74
92
  const clauseVariableName1 = `clauseVariable${nonSecureRandomAlphaNumeric()}`;
75
93
  const filterClauseVariable1 = {
76
94
  clauseVariableName: clauseVariableName1,
77
95
  formattedValue: filter.value[0],
78
- clauseVariableType: "String"
96
+ clauseVariableType: paramType
79
97
  };
80
98
  const clauseVariableName2 = `clauseVariable${nonSecureRandomAlphaNumeric()}`;
81
99
  const filterClauseVariable2 = {
82
100
  clauseVariableName: clauseVariableName2,
83
101
  formattedValue: filter.value[1],
84
- clauseVariableType: "String"
102
+ clauseVariableType: paramType
85
103
  };
86
104
  const clause = `${filter.field}: {${getGraphQLOperator(
87
105
  backstagePluginOrchestratorCommon.FieldFilterOperatorEnum.Between
@@ -129,12 +147,11 @@ function handleBinaryOperator(binaryFilter, fieldDef, type) {
129
147
  }
130
148
  }
131
149
  let formattedValue;
132
- let paramType;
133
- if (Array.isArray(binaryFilter.value)) {
150
+ const isArray = Array.isArray(binaryFilter.value);
151
+ if (isArray) {
134
152
  formattedValue = binaryFilter.value.map(
135
153
  (v) => formatValue(binaryFilter.field, v, fieldDef, type)
136
154
  );
137
- paramType = isEnumFilter(binaryFilter.field, type) ? "[ProcessInstanceState!]" : "[String!]";
138
155
  } else {
139
156
  formattedValue = formatValue(
140
157
  binaryFilter.field,
@@ -142,8 +159,13 @@ function handleBinaryOperator(binaryFilter, fieldDef, type) {
142
159
  fieldDef,
143
160
  type
144
161
  );
145
- paramType = "String";
146
162
  }
163
+ const paramType = getGraphQLVariableType(
164
+ binaryFilter.field,
165
+ fieldDef,
166
+ type,
167
+ isArray
168
+ );
147
169
  const clauseVariableName = `clauseVariable${nonSecureRandomAlphaNumeric()}`;
148
170
  const clause = `${binaryFilter.field}: {${getGraphQLOperator(binaryFilter.operator)}: $${clauseVariableName}}`;
149
171
  const filterClauseVariable = {
@@ -191,7 +213,7 @@ function buildFilterCondition(introspection, type, filters, isNested) {
191
213
  case backstagePluginOrchestratorCommon.FieldFilterOperatorEnum.IsNull:
192
214
  return handleIsNullOperator(filters);
193
215
  case backstagePluginOrchestratorCommon.FieldFilterOperatorEnum.Between:
194
- return handleBetweenOperator(filters);
216
+ return handleBetweenOperator(filters, fieldDef);
195
217
  case backstagePluginOrchestratorCommon.FieldFilterOperatorEnum.Eq:
196
218
  case backstagePluginOrchestratorCommon.FieldFilterOperatorEnum.Like:
197
219
  case backstagePluginOrchestratorCommon.FieldFilterOperatorEnum.In:
@@ -1 +1 @@
1
- {"version":3,"file":"filterBuilder.cjs.js","sources":["../../src/helpers/filterBuilder.ts"],"sourcesContent":["/*\n * Copyright Red Hat, Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport {\n FieldFilter,\n FieldFilterOperatorEnum,\n Filter,\n IntrospectionField,\n LogicalFilter,\n NestedFilter,\n TypeName,\n} from '@red-hat-developer-hub/backstage-plugin-orchestrator-common';\n\nimport { randomBytes } from 'node:crypto';\n\nimport { FilterClause, FilterClauseVariable } from '../types/filterClause';\n\ntype ProcessType = 'ProcessDefinition' | 'ProcessInstance';\n\nconst supportedOperators = [\n FieldFilterOperatorEnum.Eq,\n FieldFilterOperatorEnum.Like,\n FieldFilterOperatorEnum.In,\n FieldFilterOperatorEnum.IsNull,\n FieldFilterOperatorEnum.Gt,\n FieldFilterOperatorEnum.Gte,\n FieldFilterOperatorEnum.Lt,\n FieldFilterOperatorEnum.Lte,\n FieldFilterOperatorEnum.Between,\n];\n\nconst supportedOperatorsByType: Record<TypeName, FieldFilterOperatorEnum[]> = {\n [TypeName.String]: [\n FieldFilterOperatorEnum.In,\n FieldFilterOperatorEnum.Like,\n FieldFilterOperatorEnum.IsNull,\n FieldFilterOperatorEnum.Eq,\n ],\n [TypeName.Id]: [\n FieldFilterOperatorEnum.In,\n FieldFilterOperatorEnum.IsNull,\n FieldFilterOperatorEnum.Eq,\n ],\n [TypeName.Date]: [\n FieldFilterOperatorEnum.IsNull,\n FieldFilterOperatorEnum.Eq,\n FieldFilterOperatorEnum.Gt,\n FieldFilterOperatorEnum.Gte,\n FieldFilterOperatorEnum.Lt,\n FieldFilterOperatorEnum.Lte,\n FieldFilterOperatorEnum.Between,\n ],\n};\n\nfunction isLogicalFilter(filter: Filter): filter is LogicalFilter {\n return (filter as LogicalFilter).filters !== undefined;\n}\n\nfunction isNestedFilter(filter: Filter): filter is NestedFilter {\n return (filter as NestedFilter).nested !== undefined;\n}\n\nfunction handleLogicalFilter(\n introspection: IntrospectionField[],\n type: ProcessType,\n filter: LogicalFilter,\n): FilterClause {\n if (!filter.operator) return {} as FilterClause;\n\n const subClauses = filter.filters.map(f =>\n buildFilterCondition(introspection, type, f),\n );\n\n const filterClause: FilterClause = {\n clause: `${filter.operator.toLowerCase()}: {${subClauses.map(cl => cl.clause).join(', ')}}`,\n clauseVariable: subClauses.flatMap(cl => cl.clauseVariable),\n };\n return filterClause;\n}\n\nfunction handleNestedFilter(\n introspection: IntrospectionField[],\n type: ProcessType,\n filter: NestedFilter,\n): FilterClause {\n const subClauses = buildFilterCondition(\n introspection,\n type,\n filter.nested,\n true,\n );\n\n const filterClause: FilterClause = {\n clauseVariable: subClauses.clauseVariable,\n clause: `${filter.field}: {${subClauses.clause}}`,\n };\n\n return filterClause;\n}\n\nfunction handleBetweenOperator(filter: FieldFilter): FilterClause {\n if (!Array.isArray(filter.value) || filter.value.length !== 2) {\n throw new Error('Between operator requires an array of two elements');\n }\n const filterClauseVariableArray: FilterClauseVariable[] = [];\n const clauseVariableName1 = `clauseVariable${nonSecureRandomAlphaNumeric()}`;\n const filterClauseVariable1: FilterClauseVariable = {\n clauseVariableName: clauseVariableName1,\n formattedValue: filter.value[0],\n clauseVariableType: 'String',\n };\n\n const clauseVariableName2 = `clauseVariable${nonSecureRandomAlphaNumeric()}`;\n const filterClauseVariable2: FilterClauseVariable = {\n clauseVariableName: clauseVariableName2,\n formattedValue: filter.value[1],\n clauseVariableType: 'String',\n };\n\n const clause = `${filter.field}: {${getGraphQLOperator(\n FieldFilterOperatorEnum.Between,\n )}: {from: $${clauseVariableName1}, to: $${clauseVariableName2}}}`;\n filterClauseVariableArray.push(filterClauseVariable1, filterClauseVariable2);\n const filterClause: FilterClause = {\n clause: clause,\n clauseVariable: filterClauseVariableArray,\n };\n\n return filterClause;\n}\n\nfunction handleIsNullOperator(filter: FieldFilter): FilterClause {\n const clauseVariableName = `clauseVariable${nonSecureRandomAlphaNumeric()}`;\n const clause = `${filter.field}: {${getGraphQLOperator(FieldFilterOperatorEnum.IsNull)}: $${clauseVariableName}}`;\n\n const filterClauseVariable: FilterClauseVariable = {\n clauseVariableName: clauseVariableName,\n formattedValue: convertToBoolean(filter.value),\n clauseVariableType: 'Boolean',\n };\n const filterClauseVariableArray: FilterClauseVariable[] = [];\n filterClauseVariableArray.push(filterClauseVariable);\n const clauseObject: FilterClause = {\n clauseVariable: filterClauseVariableArray,\n clause,\n };\n\n return clauseObject;\n}\n\nfunction isEnumFilter(\n fieldName: string,\n type: 'ProcessDefinition' | 'ProcessInstance',\n): boolean {\n if (type === 'ProcessInstance') {\n if (fieldName === 'state') {\n return true;\n }\n }\n return false;\n}\n\nfunction isValidEnumOperator(operator: FieldFilterOperatorEnum): boolean {\n return (\n operator === FieldFilterOperatorEnum.In ||\n operator === FieldFilterOperatorEnum.Eq\n );\n}\n\nfunction handleBinaryOperator(\n binaryFilter: FieldFilter,\n fieldDef: IntrospectionField | undefined,\n type: 'ProcessDefinition' | 'ProcessInstance',\n): FilterClause {\n if (isEnumFilter(binaryFilter.field, type)) {\n if (!isValidEnumOperator(binaryFilter.operator)) {\n throw new Error(\n `Invalid operator ${binaryFilter.operator} for enum field ${binaryFilter.field} filter`,\n );\n }\n }\n let formattedValue: any;\n let paramType: string;\n if (Array.isArray(binaryFilter.value)) {\n formattedValue = binaryFilter.value.map(v =>\n formatValue(binaryFilter.field, v, fieldDef, type),\n );\n paramType = isEnumFilter(binaryFilter.field, type)\n ? '[ProcessInstanceState!]'\n : '[String!]';\n } else {\n formattedValue = formatValue(\n binaryFilter.field,\n binaryFilter.value,\n fieldDef,\n type,\n );\n paramType = 'String';\n }\n\n const clauseVariableName = `clauseVariable${nonSecureRandomAlphaNumeric()}`;\n const clause = `${binaryFilter.field}: {${getGraphQLOperator(binaryFilter.operator)}: $${clauseVariableName}}`;\n const filterClauseVariable: FilterClauseVariable = {\n clauseVariableName: clauseVariableName,\n formattedValue: formattedValue,\n clauseVariableType: paramType,\n };\n const filterClauseVariableArray: FilterClauseVariable[] = [];\n filterClauseVariableArray.push(filterClauseVariable);\n const clauseObject: FilterClause = {\n clauseVariable: filterClauseVariableArray,\n clause,\n };\n\n return clauseObject;\n}\n\nexport function buildFilterCondition(\n introspection: IntrospectionField[],\n type: ProcessType,\n filters?: Filter,\n isNested?: boolean,\n): FilterClause {\n if (!filters) {\n return {} as FilterClause;\n }\n\n if (isNestedFilter(filters)) {\n return handleNestedFilter(introspection, type, filters);\n }\n\n if (isLogicalFilter(filters)) {\n return handleLogicalFilter(introspection, type, filters);\n }\n\n if (!isOperatorSupported(filters.operator)) {\n throw new Error(\n `Unsupported operator ${filters.operator}. Supported operators are: ${supportedOperators.join(', ')}`,\n );\n }\n\n let fieldDef;\n\n if (!isNested) {\n fieldDef = introspection.find(f => f.name === filters.field);\n if (!fieldDef) {\n throw new Error(`Can't find field \"${filters.field}\" definition`);\n }\n\n if (!isOperatorAllowedForField(filters.operator, fieldDef, type)) {\n const allowedOperators =\n supportedOperatorsByType[fieldDef.type.name] || [];\n throw new Error(\n `Unsupported operator ${filters.operator} for field \"${fieldDef.name}\" of type \"${fieldDef.type.name}\". Allowed operators are: ${allowedOperators.join(', ')}`,\n );\n }\n }\n\n switch (filters.operator) {\n case FieldFilterOperatorEnum.IsNull:\n return handleIsNullOperator(filters);\n case FieldFilterOperatorEnum.Between:\n return handleBetweenOperator(filters);\n case FieldFilterOperatorEnum.Eq:\n case FieldFilterOperatorEnum.Like:\n case FieldFilterOperatorEnum.In:\n case FieldFilterOperatorEnum.Gt:\n case FieldFilterOperatorEnum.Gte:\n case FieldFilterOperatorEnum.Lt:\n case FieldFilterOperatorEnum.Lte:\n return handleBinaryOperator(filters, fieldDef, type);\n\n default:\n throw new Error(`Can't build filter condition`);\n }\n}\n\nfunction isOperatorSupported(operator: FieldFilterOperatorEnum): boolean {\n return supportedOperators.includes(operator);\n}\n\nfunction isFieldFilterSupported(fieldDef: IntrospectionField): boolean {\n return fieldDef?.type.name === TypeName.String;\n}\n\nexport function isOperatorAllowedForField(\n operator: FieldFilterOperatorEnum,\n fieldDef: IntrospectionField,\n type: ProcessType,\n): boolean {\n if (isEnumFilter(fieldDef.name, type) && isValidEnumOperator(operator)) {\n return true;\n }\n\n const allowedForType = supportedOperatorsByType[fieldDef.type.name];\n return allowedForType ? allowedForType.includes(operator) : false;\n}\n\nfunction convertToBoolean(value: any): boolean {\n if (typeof value === 'boolean') {\n return value;\n }\n if (typeof value === 'string') {\n return value.toLowerCase() === 'true';\n }\n if (typeof value === 'number') {\n return value === 1;\n }\n return false; // Default to false for unsupported types\n}\n\nfunction formatValue(\n fieldName: string,\n fieldValue: any,\n fieldDef: IntrospectionField | undefined,\n type: ProcessType,\n): string {\n if (!fieldDef) {\n return `${fieldValue}`;\n }\n\n if (!isFieldFilterSupported) {\n throw new Error(`Unsupported field type ${fieldDef.type.name}`);\n }\n\n if (isEnumFilter(fieldName, type)) {\n return `${fieldValue}`;\n }\n if (\n fieldDef.type.name === TypeName.String ||\n fieldDef.type.name === TypeName.Id ||\n fieldDef.type.name === TypeName.Date\n ) {\n return `${fieldValue}`;\n }\n throw new Error(\n `Failed to format value for ${fieldName} ${fieldValue} with type ${fieldDef.type.name}`,\n );\n}\n\nfunction getGraphQLOperator(operator: FieldFilterOperatorEnum): string {\n switch (operator) {\n case 'EQ':\n return 'equal';\n case 'LIKE':\n return 'like';\n case 'IN':\n return 'in';\n case 'IS_NULL':\n return 'isNull';\n case 'GT':\n return 'greaterThan';\n case 'GTE':\n return 'greaterThanEqual';\n case 'LT':\n return 'lessThan';\n case 'LTE':\n return 'lessThanEqual';\n case 'BETWEEN':\n return 'between';\n default:\n throw new Error(`Operation \"${operator}\" not supported`);\n }\n}\n\n// Function for getting 4 random digits to append to the clause variable name.\n// Not used for any secrets or anything\nfunction nonSecureRandomAlphaNumeric() {\n return randomBytes(8).toString('hex');\n}\n"],"names":["FieldFilterOperatorEnum","TypeName","randomBytes"],"mappings":"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"}
1
+ {"version":3,"file":"filterBuilder.cjs.js","sources":["../../src/helpers/filterBuilder.ts"],"sourcesContent":["/*\n * Copyright Red Hat, Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport {\n FieldFilter,\n FieldFilterOperatorEnum,\n Filter,\n IntrospectionField,\n LogicalFilter,\n NestedFilter,\n TypeName,\n} from '@red-hat-developer-hub/backstage-plugin-orchestrator-common';\n\nimport { randomBytes } from 'node:crypto';\n\nimport { FilterClause, FilterClauseVariable } from '../types/filterClause';\n\ntype ProcessType = 'ProcessDefinition' | 'ProcessInstance';\n\nconst supportedOperators = [\n FieldFilterOperatorEnum.Eq,\n FieldFilterOperatorEnum.Like,\n FieldFilterOperatorEnum.In,\n FieldFilterOperatorEnum.IsNull,\n FieldFilterOperatorEnum.Gt,\n FieldFilterOperatorEnum.Gte,\n FieldFilterOperatorEnum.Lt,\n FieldFilterOperatorEnum.Lte,\n FieldFilterOperatorEnum.Between,\n];\n\nconst supportedOperatorsByType: Record<TypeName, FieldFilterOperatorEnum[]> = {\n [TypeName.String]: [\n FieldFilterOperatorEnum.In,\n FieldFilterOperatorEnum.Like,\n FieldFilterOperatorEnum.IsNull,\n FieldFilterOperatorEnum.Eq,\n ],\n [TypeName.Id]: [\n FieldFilterOperatorEnum.In,\n FieldFilterOperatorEnum.IsNull,\n FieldFilterOperatorEnum.Eq,\n ],\n [TypeName.Date]: [\n FieldFilterOperatorEnum.IsNull,\n FieldFilterOperatorEnum.Eq,\n FieldFilterOperatorEnum.Gt,\n FieldFilterOperatorEnum.Gte,\n FieldFilterOperatorEnum.Lt,\n FieldFilterOperatorEnum.Lte,\n FieldFilterOperatorEnum.Between,\n ],\n};\n\nfunction isLogicalFilter(filter: Filter): filter is LogicalFilter {\n return (filter as LogicalFilter).filters !== undefined;\n}\n\nfunction isNestedFilter(filter: Filter): filter is NestedFilter {\n return (filter as NestedFilter).nested !== undefined;\n}\n\nfunction handleLogicalFilter(\n introspection: IntrospectionField[],\n type: ProcessType,\n filter: LogicalFilter,\n): FilterClause {\n if (!filter.operator) return {} as FilterClause;\n\n const subClauses = filter.filters.map(f =>\n buildFilterCondition(introspection, type, f),\n );\n\n const filterClause: FilterClause = {\n clause: `${filter.operator.toLowerCase()}: {${subClauses.map(cl => cl.clause).join(', ')}}`,\n clauseVariable: subClauses.flatMap(cl => cl.clauseVariable),\n };\n return filterClause;\n}\n\nfunction handleNestedFilter(\n introspection: IntrospectionField[],\n type: ProcessType,\n filter: NestedFilter,\n): FilterClause {\n const subClauses = buildFilterCondition(\n introspection,\n type,\n filter.nested,\n true,\n );\n\n const filterClause: FilterClause = {\n clauseVariable: subClauses.clauseVariable,\n clause: `${filter.field}: {${subClauses.clause}}`,\n };\n\n return filterClause;\n}\n\nfunction getGraphQLVariableType(\n fieldName: string,\n fieldDef: IntrospectionField | undefined,\n type: ProcessType,\n isArray: boolean,\n): string {\n if (isEnumFilter(fieldName, type)) {\n return isArray ? '[ProcessInstanceState!]' : 'ProcessInstanceState';\n }\n\n if (fieldDef?.type.name === TypeName.Date) {\n return 'DateTime!';\n }\n\n if (isArray) {\n return '[String!]';\n }\n\n return 'String';\n}\n\nfunction handleBetweenOperator(\n filter: FieldFilter,\n fieldDef: IntrospectionField | undefined,\n): FilterClause {\n if (!Array.isArray(filter.value) || filter.value.length !== 2) {\n throw new Error('Between operator requires an array of two elements');\n }\n const paramType = getGraphQLVariableType(\n filter.field,\n fieldDef,\n 'ProcessInstance',\n false,\n );\n const filterClauseVariableArray: FilterClauseVariable[] = [];\n const clauseVariableName1 = `clauseVariable${nonSecureRandomAlphaNumeric()}`;\n const filterClauseVariable1: FilterClauseVariable = {\n clauseVariableName: clauseVariableName1,\n formattedValue: filter.value[0],\n clauseVariableType: paramType,\n };\n\n const clauseVariableName2 = `clauseVariable${nonSecureRandomAlphaNumeric()}`;\n const filterClauseVariable2: FilterClauseVariable = {\n clauseVariableName: clauseVariableName2,\n formattedValue: filter.value[1],\n clauseVariableType: paramType,\n };\n\n const clause = `${filter.field}: {${getGraphQLOperator(\n FieldFilterOperatorEnum.Between,\n )}: {from: $${clauseVariableName1}, to: $${clauseVariableName2}}}`;\n filterClauseVariableArray.push(filterClauseVariable1, filterClauseVariable2);\n const filterClause: FilterClause = {\n clause: clause,\n clauseVariable: filterClauseVariableArray,\n };\n\n return filterClause;\n}\n\nfunction handleIsNullOperator(filter: FieldFilter): FilterClause {\n const clauseVariableName = `clauseVariable${nonSecureRandomAlphaNumeric()}`;\n const clause = `${filter.field}: {${getGraphQLOperator(FieldFilterOperatorEnum.IsNull)}: $${clauseVariableName}}`;\n\n const filterClauseVariable: FilterClauseVariable = {\n clauseVariableName: clauseVariableName,\n formattedValue: convertToBoolean(filter.value),\n clauseVariableType: 'Boolean',\n };\n const filterClauseVariableArray: FilterClauseVariable[] = [];\n filterClauseVariableArray.push(filterClauseVariable);\n const clauseObject: FilterClause = {\n clauseVariable: filterClauseVariableArray,\n clause,\n };\n\n return clauseObject;\n}\n\nfunction isEnumFilter(\n fieldName: string,\n type: 'ProcessDefinition' | 'ProcessInstance',\n): boolean {\n if (type === 'ProcessInstance') {\n if (fieldName === 'state') {\n return true;\n }\n }\n return false;\n}\n\nfunction isValidEnumOperator(operator: FieldFilterOperatorEnum): boolean {\n return (\n operator === FieldFilterOperatorEnum.In ||\n operator === FieldFilterOperatorEnum.Eq\n );\n}\n\nfunction handleBinaryOperator(\n binaryFilter: FieldFilter,\n fieldDef: IntrospectionField | undefined,\n type: 'ProcessDefinition' | 'ProcessInstance',\n): FilterClause {\n if (isEnumFilter(binaryFilter.field, type)) {\n if (!isValidEnumOperator(binaryFilter.operator)) {\n throw new Error(\n `Invalid operator ${binaryFilter.operator} for enum field ${binaryFilter.field} filter`,\n );\n }\n }\n let formattedValue: any;\n const isArray = Array.isArray(binaryFilter.value);\n if (isArray) {\n formattedValue = (binaryFilter.value as unknown[]).map((v: unknown) =>\n formatValue(binaryFilter.field, v, fieldDef, type),\n );\n } else {\n formattedValue = formatValue(\n binaryFilter.field,\n binaryFilter.value,\n fieldDef,\n type,\n );\n }\n const paramType = getGraphQLVariableType(\n binaryFilter.field,\n fieldDef,\n type,\n isArray,\n );\n\n const clauseVariableName = `clauseVariable${nonSecureRandomAlphaNumeric()}`;\n const clause = `${binaryFilter.field}: {${getGraphQLOperator(binaryFilter.operator)}: $${clauseVariableName}}`;\n const filterClauseVariable: FilterClauseVariable = {\n clauseVariableName: clauseVariableName,\n formattedValue: formattedValue,\n clauseVariableType: paramType,\n };\n const filterClauseVariableArray: FilterClauseVariable[] = [];\n filterClauseVariableArray.push(filterClauseVariable);\n const clauseObject: FilterClause = {\n clauseVariable: filterClauseVariableArray,\n clause,\n };\n\n return clauseObject;\n}\n\nexport function buildFilterCondition(\n introspection: IntrospectionField[],\n type: ProcessType,\n filters?: Filter,\n isNested?: boolean,\n): FilterClause {\n if (!filters) {\n return {} as FilterClause;\n }\n\n if (isNestedFilter(filters)) {\n return handleNestedFilter(introspection, type, filters);\n }\n\n if (isLogicalFilter(filters)) {\n return handleLogicalFilter(introspection, type, filters);\n }\n\n if (!isOperatorSupported(filters.operator)) {\n throw new Error(\n `Unsupported operator ${filters.operator}. Supported operators are: ${supportedOperators.join(', ')}`,\n );\n }\n\n let fieldDef;\n\n if (!isNested) {\n fieldDef = introspection.find(f => f.name === filters.field);\n if (!fieldDef) {\n throw new Error(`Can't find field \"${filters.field}\" definition`);\n }\n\n if (!isOperatorAllowedForField(filters.operator, fieldDef, type)) {\n const allowedOperators =\n supportedOperatorsByType[fieldDef.type.name] || [];\n throw new Error(\n `Unsupported operator ${filters.operator} for field \"${fieldDef.name}\" of type \"${fieldDef.type.name}\". Allowed operators are: ${allowedOperators.join(', ')}`,\n );\n }\n }\n\n switch (filters.operator) {\n case FieldFilterOperatorEnum.IsNull:\n return handleIsNullOperator(filters);\n case FieldFilterOperatorEnum.Between:\n return handleBetweenOperator(filters, fieldDef);\n case FieldFilterOperatorEnum.Eq:\n case FieldFilterOperatorEnum.Like:\n case FieldFilterOperatorEnum.In:\n case FieldFilterOperatorEnum.Gt:\n case FieldFilterOperatorEnum.Gte:\n case FieldFilterOperatorEnum.Lt:\n case FieldFilterOperatorEnum.Lte:\n return handleBinaryOperator(filters, fieldDef, type);\n\n default:\n throw new Error(`Can't build filter condition`);\n }\n}\n\nfunction isOperatorSupported(operator: FieldFilterOperatorEnum): boolean {\n return supportedOperators.includes(operator);\n}\n\nfunction isFieldFilterSupported(fieldDef: IntrospectionField): boolean {\n return fieldDef?.type.name === TypeName.String;\n}\n\nexport function isOperatorAllowedForField(\n operator: FieldFilterOperatorEnum,\n fieldDef: IntrospectionField,\n type: ProcessType,\n): boolean {\n if (isEnumFilter(fieldDef.name, type) && isValidEnumOperator(operator)) {\n return true;\n }\n\n const allowedForType = supportedOperatorsByType[fieldDef.type.name];\n return allowedForType ? allowedForType.includes(operator) : false;\n}\n\nfunction convertToBoolean(value: any): boolean {\n if (typeof value === 'boolean') {\n return value;\n }\n if (typeof value === 'string') {\n return value.toLowerCase() === 'true';\n }\n if (typeof value === 'number') {\n return value === 1;\n }\n return false; // Default to false for unsupported types\n}\n\nfunction formatValue(\n fieldName: string,\n fieldValue: any,\n fieldDef: IntrospectionField | undefined,\n type: ProcessType,\n): string {\n if (!fieldDef) {\n return `${fieldValue}`;\n }\n\n if (!isFieldFilterSupported) {\n throw new Error(`Unsupported field type ${fieldDef.type.name}`);\n }\n\n if (isEnumFilter(fieldName, type)) {\n return `${fieldValue}`;\n }\n if (\n fieldDef.type.name === TypeName.String ||\n fieldDef.type.name === TypeName.Id ||\n fieldDef.type.name === TypeName.Date\n ) {\n return `${fieldValue}`;\n }\n throw new Error(\n `Failed to format value for ${fieldName} ${fieldValue} with type ${fieldDef.type.name}`,\n );\n}\n\nfunction getGraphQLOperator(operator: FieldFilterOperatorEnum): string {\n switch (operator) {\n case 'EQ':\n return 'equal';\n case 'LIKE':\n return 'like';\n case 'IN':\n return 'in';\n case 'IS_NULL':\n return 'isNull';\n case 'GT':\n return 'greaterThan';\n case 'GTE':\n return 'greaterThanEqual';\n case 'LT':\n return 'lessThan';\n case 'LTE':\n return 'lessThanEqual';\n case 'BETWEEN':\n return 'between';\n default:\n throw new Error(`Operation \"${operator}\" not supported`);\n }\n}\n\n// Function for getting 4 random digits to append to the clause variable name.\n// Not used for any secrets or anything\nfunction nonSecureRandomAlphaNumeric() {\n return randomBytes(8).toString('hex');\n}\n"],"names":["FieldFilterOperatorEnum","TypeName","randomBytes"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@red-hat-developer-hub/backstage-plugin-orchestrator-backend",
3
- "version": "8.9.4",
3
+ "version": "8.9.5",
4
4
  "license": "Apache-2.0",
5
5
  "main": "./dist/index.cjs.js",
6
6
  "types": "./dist/index.d.ts",