@red-hat-developer-hub/backstage-plugin-orchestrator-backend 8.7.1 → 8.7.3

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,23 @@
1
1
  # @red-hat-developer-hub/backstage-plugin-orchestrator-backend
2
2
 
3
+ ## 8.7.3
4
+
5
+ ### Patch Changes
6
+
7
+ - 91013e2: - Update dependecy @urql/core to fix CVE-2026-3118
8
+ - Reworks the filter and query builder code to use query variables
9
+ - Updated dependencies [5a9d9d8]
10
+ - @red-hat-developer-hub/backstage-plugin-orchestrator-common@3.5.3
11
+ - @red-hat-developer-hub/backstage-plugin-orchestrator-node@1.1.3
12
+
13
+ ## 8.7.2
14
+
15
+ ### Patch Changes
16
+
17
+ - Updated dependencies [309547d]
18
+ - @red-hat-developer-hub/backstage-plugin-orchestrator-common@3.5.2
19
+ - @red-hat-developer-hub/backstage-plugin-orchestrator-node@1.1.2
20
+
3
21
  ## 8.7.1
4
22
 
5
23
  ### Patch Changes
@@ -23,6 +41,22 @@
23
41
  - @red-hat-developer-hub/backstage-plugin-orchestrator-common@3.5.0
24
42
  - @red-hat-developer-hub/backstage-plugin-orchestrator-node@1.1.0
25
43
 
44
+ ## 8.6.3
45
+
46
+ ### Patch Changes
47
+
48
+ - Updated dependencies [ea216c7]
49
+ - @red-hat-developer-hub/backstage-plugin-orchestrator-node@1.0.3
50
+
51
+ ## 8.6.2
52
+
53
+ ### Patch Changes
54
+
55
+ - Updated dependencies [546ccb2]
56
+ - @red-hat-developer-hub/backstage-plugin-orchestrator-common@3.4.2
57
+ - Updated dependencies [02a0552]
58
+ - @red-hat-developer-hub/backstage-plugin-orchestrator-node@1.0.2
59
+
26
60
  ## 8.6.1
27
61
 
28
62
  ### Patch Changes
@@ -1,6 +1,7 @@
1
1
  'use strict';
2
2
 
3
3
  var backstagePluginOrchestratorCommon = require('@red-hat-developer-hub/backstage-plugin-orchestrator-common');
4
+ var node_crypto = require('node:crypto');
4
5
 
5
6
  const supportedOperators = [
6
7
  backstagePluginOrchestratorCommon.FieldFilterOperatorEnum.Eq,
@@ -42,11 +43,15 @@ function isNestedFilter(filter) {
42
43
  return filter.nested !== void 0;
43
44
  }
44
45
  function handleLogicalFilter(introspection, type, filter) {
45
- if (!filter.operator) return "";
46
+ if (!filter.operator) return {};
46
47
  const subClauses = filter.filters.map(
47
48
  (f) => buildFilterCondition(introspection, type, f)
48
49
  );
49
- return `${filter.operator.toLowerCase()}: {${subClauses.join(", ")}}`;
50
+ const filterClause = {
51
+ clause: `${filter.operator.toLowerCase()}: {${subClauses.map((cl) => cl.clause).join(", ")}}`,
52
+ clauseVariable: subClauses.flatMap((cl) => cl.clauseVariable)
53
+ };
54
+ return filterClause;
50
55
  }
51
56
  function handleNestedFilter(introspection, type, filter) {
52
57
  const subClauses = buildFilterCondition(
@@ -55,20 +60,54 @@ function handleNestedFilter(introspection, type, filter) {
55
60
  filter.nested,
56
61
  true
57
62
  );
58
- return `${filter.field}: {${subClauses}}`;
63
+ const filterClause = {
64
+ clauseVariable: subClauses.clauseVariable,
65
+ clause: `${filter.field}: {${subClauses.clause}}`
66
+ };
67
+ return filterClause;
59
68
  }
60
69
  function handleBetweenOperator(filter) {
61
70
  if (!Array.isArray(filter.value) || filter.value.length !== 2) {
62
71
  throw new Error("Between operator requires an array of two elements");
63
72
  }
64
- return `${filter.field}: {${getGraphQLOperator(
73
+ const filterClauseVariableArray = [];
74
+ const clauseVariableName1 = `clauseVariable${nonSecureRandomAlphaNumeric()}`;
75
+ const filterClauseVariable1 = {
76
+ clauseVariableName: clauseVariableName1,
77
+ formattedValue: filter.value[0],
78
+ clauseVariableType: "String"
79
+ };
80
+ const clauseVariableName2 = `clauseVariable${nonSecureRandomAlphaNumeric()}`;
81
+ const filterClauseVariable2 = {
82
+ clauseVariableName: clauseVariableName2,
83
+ formattedValue: filter.value[1],
84
+ clauseVariableType: "String"
85
+ };
86
+ const clause = `${filter.field}: {${getGraphQLOperator(
65
87
  backstagePluginOrchestratorCommon.FieldFilterOperatorEnum.Between
66
- )}: {from: "${filter.value[0]}", to: "${filter.value[1]}"}}`;
88
+ )}: {from: $${clauseVariableName1}, to: $${clauseVariableName2}}}`;
89
+ filterClauseVariableArray.push(filterClauseVariable1, filterClauseVariable2);
90
+ const filterClause = {
91
+ clause,
92
+ clauseVariable: filterClauseVariableArray
93
+ };
94
+ return filterClause;
67
95
  }
68
96
  function handleIsNullOperator(filter) {
69
- return `${filter.field}: {${getGraphQLOperator(
70
- backstagePluginOrchestratorCommon.FieldFilterOperatorEnum.IsNull
71
- )}: ${convertToBoolean(filter.value)}}`;
97
+ const clauseVariableName = `clauseVariable${nonSecureRandomAlphaNumeric()}`;
98
+ const clause = `${filter.field}: {${getGraphQLOperator(backstagePluginOrchestratorCommon.FieldFilterOperatorEnum.IsNull)}: $${clauseVariableName}}`;
99
+ const filterClauseVariable = {
100
+ clauseVariableName,
101
+ formattedValue: convertToBoolean(filter.value),
102
+ clauseVariableType: "Boolean"
103
+ };
104
+ const filterClauseVariableArray = [];
105
+ filterClauseVariableArray.push(filterClauseVariable);
106
+ const clauseObject = {
107
+ clauseVariable: filterClauseVariableArray,
108
+ clause
109
+ };
110
+ return clauseObject;
72
111
  }
73
112
  function isEnumFilter(fieldName, type) {
74
113
  if (type === "ProcessInstance") {
@@ -89,14 +128,40 @@ function handleBinaryOperator(binaryFilter, fieldDef, type) {
89
128
  );
90
129
  }
91
130
  }
92
- const formattedValue = Array.isArray(binaryFilter.value) ? `[${binaryFilter.value.map((v) => formatValue(binaryFilter.field, v, fieldDef, type)).join(", ")}]` : formatValue(binaryFilter.field, binaryFilter.value, fieldDef, type);
93
- return `${binaryFilter.field}: {${getGraphQLOperator(
94
- binaryFilter.operator
95
- )}: ${formattedValue}}`;
131
+ let formattedValue;
132
+ let paramType;
133
+ if (Array.isArray(binaryFilter.value)) {
134
+ formattedValue = binaryFilter.value.map(
135
+ (v) => formatValue(binaryFilter.field, v, fieldDef, type)
136
+ );
137
+ paramType = isEnumFilter(binaryFilter.field, type) ? "[ProcessInstanceState!]" : "[String!]";
138
+ } else {
139
+ formattedValue = formatValue(
140
+ binaryFilter.field,
141
+ binaryFilter.value,
142
+ fieldDef,
143
+ type
144
+ );
145
+ paramType = "String";
146
+ }
147
+ const clauseVariableName = `clauseVariable${nonSecureRandomAlphaNumeric()}`;
148
+ const clause = `${binaryFilter.field}: {${getGraphQLOperator(binaryFilter.operator)}: $${clauseVariableName}}`;
149
+ const filterClauseVariable = {
150
+ clauseVariableName,
151
+ formattedValue,
152
+ clauseVariableType: paramType
153
+ };
154
+ const filterClauseVariableArray = [];
155
+ filterClauseVariableArray.push(filterClauseVariable);
156
+ const clauseObject = {
157
+ clauseVariable: filterClauseVariableArray,
158
+ clause
159
+ };
160
+ return clauseObject;
96
161
  }
97
162
  function buildFilterCondition(introspection, type, filters, isNested) {
98
163
  if (!filters) {
99
- return "";
164
+ return {};
100
165
  }
101
166
  if (isNestedFilter(filters)) {
102
167
  return handleNestedFilter(introspection, type, filters);
@@ -166,7 +231,7 @@ function convertToBoolean(value) {
166
231
  }
167
232
  function formatValue(fieldName, fieldValue, fieldDef, type) {
168
233
  if (!fieldDef) {
169
- return `"${fieldValue}"`;
234
+ return `${fieldValue}`;
170
235
  }
171
236
  if (!isFieldFilterSupported) {
172
237
  throw new Error(`Unsupported field type ${fieldDef.type.name}`);
@@ -175,7 +240,7 @@ function formatValue(fieldName, fieldValue, fieldDef, type) {
175
240
  return `${fieldValue}`;
176
241
  }
177
242
  if (fieldDef.type.name === backstagePluginOrchestratorCommon.TypeName.String || fieldDef.type.name === backstagePluginOrchestratorCommon.TypeName.Id || fieldDef.type.name === backstagePluginOrchestratorCommon.TypeName.Date) {
178
- return `"${fieldValue}"`;
243
+ return `${fieldValue}`;
179
244
  }
180
245
  throw new Error(
181
246
  `Failed to format value for ${fieldName} ${fieldValue} with type ${fieldDef.type.name}`
@@ -205,6 +270,9 @@ function getGraphQLOperator(operator) {
205
270
  throw new Error(`Operation "${operator}" not supported`);
206
271
  }
207
272
  }
273
+ function nonSecureRandomAlphaNumeric() {
274
+ return node_crypto.randomBytes(8).toString("hex");
275
+ }
208
276
 
209
277
  exports.buildFilterCondition = buildFilterCondition;
210
278
  exports.isOperatorAllowedForField = isOperatorAllowedForField;
@@ -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\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): string {\n if (!filter.operator) return '';\n\n const subClauses = filter.filters.map(f =>\n buildFilterCondition(introspection, type, f),\n );\n\n return `${filter.operator.toLowerCase()}: {${subClauses.join(', ')}}`;\n}\n\nfunction handleNestedFilter(\n introspection: IntrospectionField[],\n type: ProcessType,\n filter: NestedFilter,\n): string {\n const subClauses = buildFilterCondition(\n introspection,\n type,\n filter.nested,\n true,\n );\n\n return `${filter.field}: {${subClauses}}`;\n}\n\nfunction handleBetweenOperator(filter: FieldFilter): string {\n if (!Array.isArray(filter.value) || filter.value.length !== 2) {\n throw new Error('Between operator requires an array of two elements');\n }\n return `${filter.field}: {${getGraphQLOperator(\n FieldFilterOperatorEnum.Between,\n )}: {from: \"${filter.value[0]}\", to: \"${filter.value[1]}\"}}`;\n}\n\nfunction handleIsNullOperator(filter: FieldFilter): string {\n return `${filter.field}: {${getGraphQLOperator(\n FieldFilterOperatorEnum.IsNull,\n )}: ${convertToBoolean(filter.value)}}`;\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): string {\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 const formattedValue = Array.isArray(binaryFilter.value)\n ? `[${binaryFilter.value\n .map(v => formatValue(binaryFilter.field, v, fieldDef, type))\n .join(', ')}]`\n : formatValue(binaryFilter.field, binaryFilter.value, fieldDef, type);\n return `${binaryFilter.field}: {${getGraphQLOperator(\n binaryFilter.operator,\n )}: ${formattedValue}}`;\n}\n\nexport function buildFilterCondition(\n introspection: IntrospectionField[],\n type: ProcessType,\n filters?: Filter,\n isNested?: boolean,\n): string {\n if (!filters) {\n return '';\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"],"names":["FieldFilterOperatorEnum","TypeName"],"mappings":";;;;AA4BA,MAAM,kBAAA,GAAqB;AAAA,EACzBA,yDAAA,CAAwB,EAAA;AAAA,EACxBA,yDAAA,CAAwB,IAAA;AAAA,EACxBA,yDAAA,CAAwB,EAAA;AAAA,EACxBA,yDAAA,CAAwB,MAAA;AAAA,EACxBA,yDAAA,CAAwB,EAAA;AAAA,EACxBA,yDAAA,CAAwB,GAAA;AAAA,EACxBA,yDAAA,CAAwB,EAAA;AAAA,EACxBA,yDAAA,CAAwB,GAAA;AAAA,EACxBA,yDAAA,CAAwB;AAC1B,CAAA;AAEA,MAAM,wBAAA,GAAwE;AAAA,EAC5E,CAACC,0CAAA,CAAS,MAAM,GAAG;AAAA,IACjBD,yDAAA,CAAwB,EAAA;AAAA,IACxBA,yDAAA,CAAwB,IAAA;AAAA,IACxBA,yDAAA,CAAwB,MAAA;AAAA,IACxBA,yDAAA,CAAwB;AAAA,GAC1B;AAAA,EACA,CAACC,0CAAA,CAAS,EAAE,GAAG;AAAA,IACbD,yDAAA,CAAwB,EAAA;AAAA,IACxBA,yDAAA,CAAwB,MAAA;AAAA,IACxBA,yDAAA,CAAwB;AAAA,GAC1B;AAAA,EACA,CAACC,0CAAA,CAAS,IAAI,GAAG;AAAA,IACfD,yDAAA,CAAwB,MAAA;AAAA,IACxBA,yDAAA,CAAwB,EAAA;AAAA,IACxBA,yDAAA,CAAwB,EAAA;AAAA,IACxBA,yDAAA,CAAwB,GAAA;AAAA,IACxBA,yDAAA,CAAwB,EAAA;AAAA,IACxBA,yDAAA,CAAwB,GAAA;AAAA,IACxBA,yDAAA,CAAwB;AAAA;AAE5B,CAAA;AAEA,SAAS,gBAAgB,MAAA,EAAyC;AAChE,EAAA,OAAQ,OAAyB,OAAA,KAAY,MAAA;AAC/C;AAEA,SAAS,eAAe,MAAA,EAAwC;AAC9D,EAAA,OAAQ,OAAwB,MAAA,KAAW,MAAA;AAC7C;AAEA,SAAS,mBAAA,CACP,aAAA,EACA,IAAA,EACA,MAAA,EACQ;AACR,EAAA,IAAI,CAAC,MAAA,CAAO,QAAA,EAAU,OAAO,EAAA;AAE7B,EAAA,MAAM,UAAA,GAAa,OAAO,OAAA,CAAQ,GAAA;AAAA,IAAI,CAAA,CAAA,KACpC,oBAAA,CAAqB,aAAA,EAAe,IAAA,EAAM,CAAC;AAAA,GAC7C;AAEA,EAAA,OAAO,CAAA,EAAG,OAAO,QAAA,CAAS,WAAA,EAAa,CAAA,GAAA,EAAM,UAAA,CAAW,IAAA,CAAK,IAAI,CAAC,CAAA,CAAA,CAAA;AACpE;AAEA,SAAS,kBAAA,CACP,aAAA,EACA,IAAA,EACA,MAAA,EACQ;AACR,EAAA,MAAM,UAAA,GAAa,oBAAA;AAAA,IACjB,aAAA;AAAA,IACA,IAAA;AAAA,IACA,MAAA,CAAO,MAAA;AAAA,IACP;AAAA,GACF;AAEA,EAAA,OAAO,CAAA,EAAG,MAAA,CAAO,KAAK,CAAA,GAAA,EAAM,UAAU,CAAA,CAAA,CAAA;AACxC;AAEA,SAAS,sBAAsB,MAAA,EAA6B;AAC1D,EAAA,IAAI,CAAC,MAAM,OAAA,CAAQ,MAAA,CAAO,KAAK,CAAA,IAAK,MAAA,CAAO,KAAA,CAAM,MAAA,KAAW,CAAA,EAAG;AAC7D,IAAA,MAAM,IAAI,MAAM,oDAAoD,CAAA;AAAA,EACtE;AACA,EAAA,OAAO,CAAA,EAAG,MAAA,CAAO,KAAK,CAAA,GAAA,EAAM,kBAAA;AAAA,IAC1BA,yDAAA,CAAwB;AAAA,GACzB,CAAA,UAAA,EAAa,MAAA,CAAO,KAAA,CAAM,CAAC,CAAC,CAAA,QAAA,EAAW,MAAA,CAAO,KAAA,CAAM,CAAC,CAAC,CAAA,GAAA,CAAA;AACzD;AAEA,SAAS,qBAAqB,MAAA,EAA6B;AACzD,EAAA,OAAO,CAAA,EAAG,MAAA,CAAO,KAAK,CAAA,GAAA,EAAM,kBAAA;AAAA,IAC1BA,yDAAA,CAAwB;AAAA,GACzB,CAAA,EAAA,EAAK,gBAAA,CAAiB,MAAA,CAAO,KAAK,CAAC,CAAA,CAAA,CAAA;AACtC;AAEA,SAAS,YAAA,CACP,WACA,IAAA,EACS;AACT,EAAA,IAAI,SAAS,iBAAA,EAAmB;AAC9B,IAAA,IAAI,cAAc,OAAA,EAAS;AACzB,MAAA,OAAO,IAAA;AAAA,IACT;AAAA,EACF;AACA,EAAA,OAAO,KAAA;AACT;AAEA,SAAS,oBAAoB,QAAA,EAA4C;AACvE,EAAA,OACE,QAAA,KAAaA,yDAAA,CAAwB,EAAA,IACrC,QAAA,KAAaA,yDAAA,CAAwB,EAAA;AAEzC;AAEA,SAAS,oBAAA,CACP,YAAA,EACA,QAAA,EACA,IAAA,EACQ;AACR,EAAA,IAAI,YAAA,CAAa,YAAA,CAAa,KAAA,EAAO,IAAI,CAAA,EAAG;AAC1C,IAAA,IAAI,CAAC,mBAAA,CAAoB,YAAA,CAAa,QAAQ,CAAA,EAAG;AAC/C,MAAA,MAAM,IAAI,KAAA;AAAA,QACR,CAAA,iBAAA,EAAoB,YAAA,CAAa,QAAQ,CAAA,gBAAA,EAAmB,aAAa,KAAK,CAAA,OAAA;AAAA,OAChF;AAAA,IACF;AAAA,EACF;AACA,EAAA,MAAM,cAAA,GAAiB,KAAA,CAAM,OAAA,CAAQ,YAAA,CAAa,KAAK,CAAA,GACnD,CAAA,CAAA,EAAI,YAAA,CAAa,KAAA,CACd,GAAA,CAAI,CAAA,CAAA,KAAK,WAAA,CAAY,YAAA,CAAa,KAAA,EAAO,CAAA,EAAG,QAAA,EAAU,IAAI,CAAC,CAAA,CAC3D,IAAA,CAAK,IAAI,CAAC,CAAA,CAAA,CAAA,GACb,WAAA,CAAY,YAAA,CAAa,KAAA,EAAO,YAAA,CAAa,KAAA,EAAO,UAAU,IAAI,CAAA;AACtE,EAAA,OAAO,CAAA,EAAG,YAAA,CAAa,KAAK,CAAA,GAAA,EAAM,kBAAA;AAAA,IAChC,YAAA,CAAa;AAAA,GACd,KAAK,cAAc,CAAA,CAAA,CAAA;AACtB;AAEO,SAAS,oBAAA,CACd,aAAA,EACA,IAAA,EACA,OAAA,EACA,QAAA,EACQ;AACR,EAAA,IAAI,CAAC,OAAA,EAAS;AACZ,IAAA,OAAO,EAAA;AAAA,EACT;AAEA,EAAA,IAAI,cAAA,CAAe,OAAO,CAAA,EAAG;AAC3B,IAAA,OAAO,kBAAA,CAAmB,aAAA,EAAe,IAAA,EAAM,OAAO,CAAA;AAAA,EACxD;AAEA,EAAA,IAAI,eAAA,CAAgB,OAAO,CAAA,EAAG;AAC5B,IAAA,OAAO,mBAAA,CAAoB,aAAA,EAAe,IAAA,EAAM,OAAO,CAAA;AAAA,EACzD;AAEA,EAAA,IAAI,CAAC,mBAAA,CAAoB,OAAA,CAAQ,QAAQ,CAAA,EAAG;AAC1C,IAAA,MAAM,IAAI,KAAA;AAAA,MACR,wBAAwB,OAAA,CAAQ,QAAQ,8BAA8B,kBAAA,CAAmB,IAAA,CAAK,IAAI,CAAC,CAAA;AAAA,KACrG;AAAA,EACF;AAEA,EAAA,IAAI,QAAA;AAEJ,EAAA,IAAI,CAAC,QAAA,EAAU;AACb,IAAA,QAAA,GAAW,cAAc,IAAA,CAAK,CAAA,CAAA,KAAK,CAAA,CAAE,IAAA,KAAS,QAAQ,KAAK,CAAA;AAC3D,IAAA,IAAI,CAAC,QAAA,EAAU;AACb,MAAA,MAAM,IAAI,KAAA,CAAM,CAAA,kBAAA,EAAqB,OAAA,CAAQ,KAAK,CAAA,YAAA,CAAc,CAAA;AAAA,IAClE;AAEA,IAAA,IAAI,CAAC,yBAAA,CAA0B,OAAA,CAAQ,QAAA,EAAU,QAAA,EAAU,IAAI,CAAA,EAAG;AAChE,MAAA,MAAM,mBACJ,wBAAA,CAAyB,QAAA,CAAS,IAAA,CAAK,IAAI,KAAK,EAAC;AACnD,MAAA,MAAM,IAAI,KAAA;AAAA,QACR,CAAA,qBAAA,EAAwB,OAAA,CAAQ,QAAQ,CAAA,YAAA,EAAe,SAAS,IAAI,CAAA,WAAA,EAAc,QAAA,CAAS,IAAA,CAAK,IAAI,CAAA,0BAAA,EAA6B,gBAAA,CAAiB,IAAA,CAAK,IAAI,CAAC,CAAA;AAAA,OAC9J;AAAA,IACF;AAAA,EACF;AAEA,EAAA,QAAQ,QAAQ,QAAA;AAAU,IACxB,KAAKA,yDAAA,CAAwB,MAAA;AAC3B,MAAA,OAAO,qBAAqB,OAAO,CAAA;AAAA,IACrC,KAAKA,yDAAA,CAAwB,OAAA;AAC3B,MAAA,OAAO,sBAAsB,OAAO,CAAA;AAAA,IACtC,KAAKA,yDAAA,CAAwB,EAAA;AAAA,IAC7B,KAAKA,yDAAA,CAAwB,IAAA;AAAA,IAC7B,KAAKA,yDAAA,CAAwB,EAAA;AAAA,IAC7B,KAAKA,yDAAA,CAAwB,EAAA;AAAA,IAC7B,KAAKA,yDAAA,CAAwB,GAAA;AAAA,IAC7B,KAAKA,yDAAA,CAAwB,EAAA;AAAA,IAC7B,KAAKA,yDAAA,CAAwB,GAAA;AAC3B,MAAA,OAAO,oBAAA,CAAqB,OAAA,EAAS,QAAA,EAAU,IAAI,CAAA;AAAA,IAErD;AACE,MAAA,MAAM,IAAI,MAAM,CAAA,4BAAA,CAA8B,CAAA;AAAA;AAEpD;AAEA,SAAS,oBAAoB,QAAA,EAA4C;AACvE,EAAA,OAAO,kBAAA,CAAmB,SAAS,QAAQ,CAAA;AAC7C;AAEA,SAAS,uBAAuB,QAAA,EAAuC;AACrE,EAAA,OAAO,QAAA,EAAU,IAAA,CAAK,IAAA,KAASC,0CAAA,CAAS,MAAA;AAC1C;AAEO,SAAS,yBAAA,CACd,QAAA,EACA,QAAA,EACA,IAAA,EACS;AACT,EAAA,IAAI,aAAa,QAAA,CAAS,IAAA,EAAM,IAAI,CAAA,IAAK,mBAAA,CAAoB,QAAQ,CAAA,EAAG;AACtE,IAAA,OAAO,IAAA;AAAA,EACT;AAEA,EAAA,MAAM,cAAA,GAAiB,wBAAA,CAAyB,QAAA,CAAS,IAAA,CAAK,IAAI,CAAA;AAClE,EAAA,OAAO,cAAA,GAAiB,cAAA,CAAe,QAAA,CAAS,QAAQ,CAAA,GAAI,KAAA;AAC9D;AAEA,SAAS,iBAAiB,KAAA,EAAqB;AAC7C,EAAA,IAAI,OAAO,UAAU,SAAA,EAAW;AAC9B,IAAA,OAAO,KAAA;AAAA,EACT;AACA,EAAA,IAAI,OAAO,UAAU,QAAA,EAAU;AAC7B,IAAA,OAAO,KAAA,CAAM,aAAY,KAAM,MAAA;AAAA,EACjC;AACA,EAAA,IAAI,OAAO,UAAU,QAAA,EAAU;AAC7B,IAAA,OAAO,KAAA,KAAU,CAAA;AAAA,EACnB;AACA,EAAA,OAAO,KAAA;AACT;AAEA,SAAS,WAAA,CACP,SAAA,EACA,UAAA,EACA,QAAA,EACA,IAAA,EACQ;AACR,EAAA,IAAI,CAAC,QAAA,EAAU;AACb,IAAA,OAAO,IAAI,UAAU,CAAA,CAAA,CAAA;AAAA,EACvB;AAEA,EAAA,IAAI,CAAC,sBAAA,EAAwB;AAC3B,IAAA,MAAM,IAAI,KAAA,CAAM,CAAA,uBAAA,EAA0B,QAAA,CAAS,IAAA,CAAK,IAAI,CAAA,CAAE,CAAA;AAAA,EAChE;AAEA,EAAA,IAAI,YAAA,CAAa,SAAA,EAAW,IAAI,CAAA,EAAG;AACjC,IAAA,OAAO,GAAG,UAAU,CAAA,CAAA;AAAA,EACtB;AACA,EAAA,IACE,QAAA,CAAS,IAAA,CAAK,IAAA,KAASA,0CAAA,CAAS,UAChC,QAAA,CAAS,IAAA,CAAK,IAAA,KAASA,0CAAA,CAAS,EAAA,IAChC,QAAA,CAAS,IAAA,CAAK,IAAA,KAASA,2CAAS,IAAA,EAChC;AACA,IAAA,OAAO,IAAI,UAAU,CAAA,CAAA,CAAA;AAAA,EACvB;AACA,EAAA,MAAM,IAAI,KAAA;AAAA,IACR,8BAA8B,SAAS,CAAA,CAAA,EAAI,UAAU,CAAA,WAAA,EAAc,QAAA,CAAS,KAAK,IAAI,CAAA;AAAA,GACvF;AACF;AAEA,SAAS,mBAAmB,QAAA,EAA2C;AACrE,EAAA,QAAQ,QAAA;AAAU,IAChB,KAAK,IAAA;AACH,MAAA,OAAO,OAAA;AAAA,IACT,KAAK,MAAA;AACH,MAAA,OAAO,MAAA;AAAA,IACT,KAAK,IAAA;AACH,MAAA,OAAO,IAAA;AAAA,IACT,KAAK,SAAA;AACH,MAAA,OAAO,QAAA;AAAA,IACT,KAAK,IAAA;AACH,MAAA,OAAO,aAAA;AAAA,IACT,KAAK,KAAA;AACH,MAAA,OAAO,kBAAA;AAAA,IACT,KAAK,IAAA;AACH,MAAA,OAAO,UAAA;AAAA,IACT,KAAK,KAAA;AACH,MAAA,OAAO,eAAA;AAAA,IACT,KAAK,SAAA;AACH,MAAA,OAAO,SAAA;AAAA,IACT;AACE,MAAA,MAAM,IAAI,KAAA,CAAM,CAAA,WAAA,EAAc,QAAQ,CAAA,eAAA,CAAiB,CAAA;AAAA;AAE7D;;;;;"}
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,12 +1,20 @@
1
1
  'use strict';
2
2
 
3
3
  function buildGraphQlQuery(args) {
4
- let query = `{${args.type}`;
4
+ const queryHeaderStart = "query (";
5
+ const queryHeaderEnd = ")";
6
+ const queryHeaderPaginationOrderByParams = `$paginationInfo: Pagination, $orderByInfo: ${args.type.slice(0, -1)}OrderBy`;
7
+ const filterParams = args.filterCondition?.clauseVariable?.map((cl) => {
8
+ return `$${cl.clauseVariableName}: ${cl.clauseVariableType}`;
9
+ }).join(", ");
10
+ const params = [queryHeaderPaginationOrderByParams, filterParams].filter(Boolean).join(", ");
11
+ let query = `${queryHeaderStart}${params}${queryHeaderEnd}{${args.type}`;
5
12
  const whereClause = buildWhereClause(args.whereClause);
6
- const paginationClause = buildPaginationClause(args.pagination);
7
- if (whereClause || paginationClause) {
13
+ const paginationClause = "pagination: $paginationInfo";
14
+ const orderByClause = "orderBy: $orderByInfo";
15
+ {
8
16
  query += " (";
9
- query += [whereClause, paginationClause].filter(Boolean).join(", ");
17
+ query += [whereClause, orderByClause, paginationClause].filter(Boolean).join(", ");
10
18
  query += ") ";
11
19
  }
12
20
  query += ` {${args.queryBody} } }`;
@@ -15,26 +23,36 @@ function buildGraphQlQuery(args) {
15
23
  function buildWhereClause(whereClause) {
16
24
  return whereClause ? `where: {${whereClause}}` : "";
17
25
  }
18
- function buildPaginationClause(pagination) {
19
- if (!pagination) return "";
20
- const parts = [];
21
- if (pagination.sortField !== void 0) {
22
- parts.push(
23
- `orderBy: {${pagination.sortField}: ${pagination.order !== void 0 ? pagination.order?.toUpperCase() : "ASC"}}`
24
- );
26
+ function buildOrderByVariables(pagination) {
27
+ const orderByVariable = {};
28
+ if (pagination?.sortField !== void 0) {
29
+ orderByVariable[pagination.sortField] = pagination.order?.toUpperCase() ?? "ASC";
25
30
  }
26
- const paginationParts = [];
27
- if (pagination.limit !== void 0) {
28
- paginationParts.push(`limit: ${pagination.limit}`);
29
- }
30
- if (pagination.offset !== void 0) {
31
- paginationParts.push(`offset: ${pagination.offset}`);
31
+ return orderByVariable;
32
+ }
33
+ function buildPaginationVariables(pagination) {
34
+ const paginationVariable = {};
35
+ if (pagination?.limit !== void 0) {
36
+ paginationVariable.limit = pagination.limit;
32
37
  }
33
- if (paginationParts.length) {
34
- parts.push(`pagination: {${paginationParts.join(", ")}}`);
38
+ if (pagination?.offset !== void 0) {
39
+ paginationVariable.offset = pagination.offset;
35
40
  }
36
- return parts.join(", ");
41
+ return paginationVariable;
42
+ }
43
+ function buildQueryParamVariable(pagination, filterCondition) {
44
+ const paramVariables = {
45
+ paginationInfo: buildPaginationVariables(pagination),
46
+ orderByInfo: buildOrderByVariables(pagination)
47
+ };
48
+ filterCondition?.clauseVariable?.forEach((p) => {
49
+ paramVariables[p.clauseVariableName] = p.formattedValue;
50
+ });
51
+ return paramVariables;
37
52
  }
38
53
 
39
54
  exports.buildGraphQlQuery = buildGraphQlQuery;
55
+ exports.buildOrderByVariables = buildOrderByVariables;
56
+ exports.buildPaginationVariables = buildPaginationVariables;
57
+ exports.buildQueryParamVariable = buildQueryParamVariable;
40
58
  //# sourceMappingURL=queryBuilder.cjs.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"queryBuilder.cjs.js","sources":["../../src/helpers/queryBuilder.ts"],"sourcesContent":["/*\n * Copyright 2024 The Backstage Authors\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 */\nimport { Pagination } from '../types/pagination';\n\nexport function buildGraphQlQuery(args: {\n type: 'ProcessDefinitions' | 'ProcessInstances' | 'Jobs';\n queryBody: string;\n whereClause?: string;\n pagination?: Pagination;\n}): string {\n let query = `{${args.type}`;\n\n const whereClause = buildWhereClause(args.whereClause);\n const paginationClause = buildPaginationClause(args.pagination);\n\n if (whereClause || paginationClause) {\n query += ' (';\n query += [whereClause, paginationClause].filter(Boolean).join(', ');\n query += ') ';\n }\n\n query += ` {${args.queryBody} } }`;\n\n return query.replace(/\\s+/g, ' ').trim();\n}\n\nfunction buildWhereClause(whereClause?: string): string {\n return whereClause ? `where: {${whereClause}}` : '';\n}\n\nfunction buildPaginationClause(pagination?: Pagination): string {\n if (!pagination) return '';\n\n const parts = [];\n\n if (pagination.sortField !== undefined) {\n parts.push(\n `orderBy: {${pagination.sortField}: ${\n pagination.order !== undefined ? pagination.order?.toUpperCase() : 'ASC'\n }}`,\n );\n }\n\n const paginationParts = [];\n if (pagination.limit !== undefined) {\n paginationParts.push(`limit: ${pagination.limit}`);\n }\n if (pagination.offset !== undefined) {\n paginationParts.push(`offset: ${pagination.offset}`);\n }\n if (paginationParts.length) {\n parts.push(`pagination: {${paginationParts.join(', ')}}`);\n }\n\n return parts.join(', ');\n}\n"],"names":[],"mappings":";;AAiBO,SAAS,kBAAkB,IAAA,EAKvB;AACT,EAAA,IAAI,KAAA,GAAQ,CAAA,CAAA,EAAI,IAAA,CAAK,IAAI,CAAA,CAAA;AAEzB,EAAA,MAAM,WAAA,GAAc,gBAAA,CAAiB,IAAA,CAAK,WAAW,CAAA;AACrD,EAAA,MAAM,gBAAA,GAAmB,qBAAA,CAAsB,IAAA,CAAK,UAAU,CAAA;AAE9D,EAAA,IAAI,eAAe,gBAAA,EAAkB;AACnC,IAAA,KAAA,IAAS,IAAA;AACT,IAAA,KAAA,IAAS,CAAC,aAAa,gBAAgB,CAAA,CAAE,OAAO,OAAO,CAAA,CAAE,KAAK,IAAI,CAAA;AAClE,IAAA,KAAA,IAAS,IAAA;AAAA,EACX;AAEA,EAAA,KAAA,IAAS,CAAA,EAAA,EAAK,KAAK,SAAS,CAAA,IAAA,CAAA;AAE5B,EAAA,OAAO,KAAA,CAAM,OAAA,CAAQ,MAAA,EAAQ,GAAG,EAAE,IAAA,EAAK;AACzC;AAEA,SAAS,iBAAiB,WAAA,EAA8B;AACtD,EAAA,OAAO,WAAA,GAAc,CAAA,QAAA,EAAW,WAAW,CAAA,CAAA,CAAA,GAAM,EAAA;AACnD;AAEA,SAAS,sBAAsB,UAAA,EAAiC;AAC9D,EAAA,IAAI,CAAC,YAAY,OAAO,EAAA;AAExB,EAAA,MAAM,QAAQ,EAAC;AAEf,EAAA,IAAI,UAAA,CAAW,cAAc,MAAA,EAAW;AACtC,IAAA,KAAA,CAAM,IAAA;AAAA,MACJ,CAAA,UAAA,EAAa,UAAA,CAAW,SAAS,CAAA,EAAA,EAC/B,UAAA,CAAW,KAAA,KAAU,MAAA,GAAY,UAAA,CAAW,KAAA,EAAO,WAAA,EAAY,GAAI,KACrE,CAAA,CAAA;AAAA,KACF;AAAA,EACF;AAEA,EAAA,MAAM,kBAAkB,EAAC;AACzB,EAAA,IAAI,UAAA,CAAW,UAAU,MAAA,EAAW;AAClC,IAAA,eAAA,CAAgB,IAAA,CAAK,CAAA,OAAA,EAAU,UAAA,CAAW,KAAK,CAAA,CAAE,CAAA;AAAA,EACnD;AACA,EAAA,IAAI,UAAA,CAAW,WAAW,MAAA,EAAW;AACnC,IAAA,eAAA,CAAgB,IAAA,CAAK,CAAA,QAAA,EAAW,UAAA,CAAW,MAAM,CAAA,CAAE,CAAA;AAAA,EACrD;AACA,EAAA,IAAI,gBAAgB,MAAA,EAAQ;AAC1B,IAAA,KAAA,CAAM,KAAK,CAAA,aAAA,EAAgB,eAAA,CAAgB,IAAA,CAAK,IAAI,CAAC,CAAA,CAAA,CAAG,CAAA;AAAA,EAC1D;AAEA,EAAA,OAAO,KAAA,CAAM,KAAK,IAAI,CAAA;AACxB;;;;"}
1
+ {"version":3,"file":"queryBuilder.cjs.js","sources":["../../src/helpers/queryBuilder.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 { FilterClause } from '../types/filterClause';\nimport { Pagination, PaginationQueryVariable } from '../types/pagination';\n\nexport function buildGraphQlQuery(args: {\n type: 'ProcessDefinitions' | 'ProcessInstances' | 'Jobs';\n queryBody: string;\n whereClause?: string;\n pagination?: Pagination;\n filterCondition?: FilterClause;\n}): string {\n const queryHeaderStart = 'query (';\n const queryHeaderEnd = ')';\n\n const queryHeaderPaginationOrderByParams = `$paginationInfo: Pagination, $orderByInfo: ${args.type.slice(0, -1)}OrderBy`;\n\n const filterParams = args.filterCondition?.clauseVariable\n ?.map(cl => {\n return `$${cl.clauseVariableName}: ${cl.clauseVariableType}`;\n })\n .join(', ');\n\n const params = [queryHeaderPaginationOrderByParams, filterParams]\n .filter(Boolean)\n .join(', ');\n\n let query = `${queryHeaderStart}${params}${queryHeaderEnd}{${args.type}`;\n const whereClause = buildWhereClause(args.whereClause);\n\n const paginationClause = 'pagination: $paginationInfo';\n const orderByClause = 'orderBy: $orderByInfo';\n\n if (whereClause || paginationClause || orderByClause) {\n query += ' (';\n query += [whereClause, orderByClause, paginationClause]\n .filter(Boolean)\n .join(', ');\n query += ') ';\n }\n\n query += ` {${args.queryBody} } }`;\n\n return query.replace(/\\s+/g, ' ').trim();\n}\n\nfunction buildWhereClause(whereClause?: string): string {\n return whereClause ? `where: {${whereClause}}` : '';\n}\n\nexport function buildOrderByVariables(pagination?: Pagination): {\n [key: string]: string;\n} {\n const orderByVariable: { [key: string]: string } = {};\n\n if (pagination?.sortField !== undefined) {\n orderByVariable[pagination.sortField] =\n pagination.order?.toUpperCase() ?? 'ASC';\n }\n\n return orderByVariable;\n}\n\nexport function buildPaginationVariables(\n pagination?: Pagination,\n): PaginationQueryVariable {\n const paginationVariable: PaginationQueryVariable = {};\n\n if (pagination?.limit !== undefined) {\n paginationVariable.limit = pagination.limit;\n }\n\n if (pagination?.offset !== undefined) {\n paginationVariable.offset = pagination.offset;\n }\n return paginationVariable;\n}\n\nexport function buildQueryParamVariable(\n pagination?: Pagination,\n filterCondition?: FilterClause,\n) {\n const paramVariables: any = {\n paginationInfo: buildPaginationVariables(pagination),\n orderByInfo: buildOrderByVariables(pagination),\n };\n\n filterCondition?.clauseVariable?.forEach(p => {\n paramVariables[p.clauseVariableName] = p.formattedValue;\n });\n\n return paramVariables;\n}\n"],"names":[],"mappings":";;AAmBO,SAAS,kBAAkB,IAAA,EAMvB;AACT,EAAA,MAAM,gBAAA,GAAmB,SAAA;AACzB,EAAA,MAAM,cAAA,GAAiB,GAAA;AAEvB,EAAA,MAAM,qCAAqC,CAAA,2CAAA,EAA8C,IAAA,CAAK,KAAK,KAAA,CAAM,CAAA,EAAG,EAAE,CAAC,CAAA,OAAA,CAAA;AAE/G,EAAA,MAAM,YAAA,GAAe,IAAA,CAAK,eAAA,EAAiB,cAAA,EACvC,IAAI,CAAA,EAAA,KAAM;AACV,IAAA,OAAO,CAAA,CAAA,EAAI,EAAA,CAAG,kBAAkB,CAAA,EAAA,EAAK,GAAG,kBAAkB,CAAA,CAAA;AAAA,EAC5D,CAAC,CAAA,CACA,IAAA,CAAK,IAAI,CAAA;AAEZ,EAAA,MAAM,MAAA,GAAS,CAAC,kCAAA,EAAoC,YAAY,EAC7D,MAAA,CAAO,OAAO,CAAA,CACd,IAAA,CAAK,IAAI,CAAA;AAEZ,EAAA,IAAI,KAAA,GAAQ,GAAG,gBAAgB,CAAA,EAAG,MAAM,CAAA,EAAG,cAAc,CAAA,CAAA,EAAI,IAAA,CAAK,IAAI,CAAA,CAAA;AACtE,EAAA,MAAM,WAAA,GAAc,gBAAA,CAAiB,IAAA,CAAK,WAAW,CAAA;AAErD,EAAA,MAAM,gBAAA,GAAmB,6BAAA;AACzB,EAAA,MAAM,aAAA,GAAgB,uBAAA;AAEtB,EAAsD;AACpD,IAAA,KAAA,IAAS,IAAA;AACT,IAAA,KAAA,IAAS,CAAC,aAAa,aAAA,EAAe,gBAAgB,EACnD,MAAA,CAAO,OAAO,CAAA,CACd,IAAA,CAAK,IAAI,CAAA;AACZ,IAAA,KAAA,IAAS,IAAA;AAAA,EACX;AAEA,EAAA,KAAA,IAAS,CAAA,EAAA,EAAK,KAAK,SAAS,CAAA,IAAA,CAAA;AAE5B,EAAA,OAAO,KAAA,CAAM,OAAA,CAAQ,MAAA,EAAQ,GAAG,EAAE,IAAA,EAAK;AACzC;AAEA,SAAS,iBAAiB,WAAA,EAA8B;AACtD,EAAA,OAAO,WAAA,GAAc,CAAA,QAAA,EAAW,WAAW,CAAA,CAAA,CAAA,GAAM,EAAA;AACnD;AAEO,SAAS,sBAAsB,UAAA,EAEpC;AACA,EAAA,MAAM,kBAA6C,EAAC;AAEpD,EAAA,IAAI,UAAA,EAAY,cAAc,MAAA,EAAW;AACvC,IAAA,eAAA,CAAgB,WAAW,SAAS,CAAA,GAClC,UAAA,CAAW,KAAA,EAAO,aAAY,IAAK,KAAA;AAAA,EACvC;AAEA,EAAA,OAAO,eAAA;AACT;AAEO,SAAS,yBACd,UAAA,EACyB;AACzB,EAAA,MAAM,qBAA8C,EAAC;AAErD,EAAA,IAAI,UAAA,EAAY,UAAU,MAAA,EAAW;AACnC,IAAA,kBAAA,CAAmB,QAAQ,UAAA,CAAW,KAAA;AAAA,EACxC;AAEA,EAAA,IAAI,UAAA,EAAY,WAAW,MAAA,EAAW;AACpC,IAAA,kBAAA,CAAmB,SAAS,UAAA,CAAW,MAAA;AAAA,EACzC;AACA,EAAA,OAAO,kBAAA;AACT;AAEO,SAAS,uBAAA,CACd,YACA,eAAA,EACA;AACA,EAAA,MAAM,cAAA,GAAsB;AAAA,IAC1B,cAAA,EAAgB,yBAAyB,UAAU,CAAA;AAAA,IACnD,WAAA,EAAa,sBAAsB,UAAU;AAAA,GAC/C;AAEA,EAAA,eAAA,EAAiB,cAAA,EAAgB,QAAQ,CAAA,CAAA,KAAK;AAC5C,IAAA,cAAA,CAAe,CAAA,CAAE,kBAAkB,CAAA,GAAI,CAAA,CAAE,cAAA;AAAA,EAC3C,CAAC,CAAA;AAED,EAAA,OAAO,cAAA;AACT;;;;;;;"}
@@ -84,8 +84,22 @@ class DataIndexService {
84
84
  return pairs;
85
85
  }
86
86
  async fetchWorkflowInfo(definitionId) {
87
- const graphQlQuery = `{ ProcessDefinitions ( where: {id: {equal: "${definitionId}" } } ) { id, name, version, type, endpoint, serviceUrl, source } }`;
88
- const result = await this.client.query(graphQlQuery, {});
87
+ const graphQlQuery = core.gql`
88
+ query FindProcessInstanceQuery($definitionId: String!) {
89
+ ProcessDefinitions(where: { id: { equal: $definitionId } }) {
90
+ id
91
+ name
92
+ version
93
+ type
94
+ endpoint
95
+ serviceUrl
96
+ source
97
+ }
98
+ }
99
+ `;
100
+ const result = await this.client.query(graphQlQuery, {
101
+ definitionId
102
+ });
89
103
  this.logger.debug(
90
104
  `Get workflow definition result: ${JSON.stringify(result)}`
91
105
  );
@@ -143,9 +157,9 @@ class DataIndexService {
143
157
  ) : void 0;
144
158
  let whereClause;
145
159
  if (definitionIdsCondition && filterCondition) {
146
- whereClause = `and: [{${definitionIdsCondition}}, {${filterCondition}}]`;
160
+ whereClause = `and: [{${definitionIdsCondition}}, {${filterCondition?.clause}}]`;
147
161
  } else if (definitionIdsCondition || filterCondition) {
148
- whereClause = definitionIdsCondition ?? filterCondition;
162
+ whereClause = definitionIdsCondition ?? filterCondition?.clause;
149
163
  } else {
150
164
  whereClause = void 0;
151
165
  }
@@ -153,10 +167,12 @@ class DataIndexService {
153
167
  type: "ProcessDefinitions",
154
168
  queryBody: "id, name, version, type, endpoint, serviceUrl, source, metadata",
155
169
  whereClause,
156
- pagination
170
+ filterCondition
157
171
  });
158
172
  this.logger.debug(`GraphQL query: ${graphQlQuery}`);
159
- const result = await this.client.query(graphQlQuery, {});
173
+ const paramVariables = queryBuilder.buildQueryParamVariable(pagination, filterCondition);
174
+ this.logger.debug(`GraphQL query params:`, paramVariables);
175
+ const result = await this.client.query(graphQlQuery, paramVariables);
160
176
  this.logger.debug(
161
177
  `Get workflow definitions result: ${JSON.stringify(result)}`
162
178
  );
@@ -176,7 +192,7 @@ class DataIndexService {
176
192
  await this.inspectInputArgument(type),
177
193
  type,
178
194
  filter
179
- ) : "";
195
+ ) : void 0;
180
196
  let whereClause = "";
181
197
  const conditions = [];
182
198
  {
@@ -185,8 +201,8 @@ class DataIndexService {
185
201
  if (definitionIdsCondition) {
186
202
  conditions.push(`{${definitionIdsCondition}}`);
187
203
  }
188
- if (filter) {
189
- conditions.push(`{${filterCondition}}`);
204
+ if (filterCondition) {
205
+ conditions.push(`{${filterCondition?.clause}}`);
190
206
  }
191
207
  if (conditions.length === 0) {
192
208
  whereClause = processIdNotNullCondition;
@@ -199,10 +215,12 @@ class DataIndexService {
199
215
  type: "ProcessInstances",
200
216
  queryBody: "id, processName, processId, state, start, end, nodes { id }, variables, executionSummary, parentProcessInstance {id, processName, businessKey}",
201
217
  whereClause,
202
- pagination
218
+ filterCondition
203
219
  });
204
220
  this.logger.debug(`GraphQL query: ${graphQlQuery}`);
205
- const result = await this.client.query(graphQlQuery, {});
221
+ const paramVariables = queryBuilder.buildQueryParamVariable(pagination, filterCondition);
222
+ this.logger.debug(`GraphQL query params:`, paramVariables);
223
+ const result = await this.client.query(graphQlQuery, paramVariables);
206
224
  this.logger.debug(
207
225
  `Fetch process instances result: ${JSON.stringify(result)}`
208
226
  );
@@ -232,7 +250,7 @@ class DataIndexService {
232
250
  type,
233
251
  targetEntityFilter
234
252
  );
235
- const whereClause = `and: [{${processIdNotNullCondition}}, {${filterCondition}}]`;
253
+ const whereClause = `and: [{${processIdNotNullCondition}}, {${filterCondition.clause}}]`;
236
254
  const pagination = {
237
255
  limit: 1e3,
238
256
  offset: 0
@@ -241,10 +259,12 @@ class DataIndexService {
241
259
  type: "ProcessInstances",
242
260
  queryBody: "processId",
243
261
  whereClause,
244
- pagination
262
+ filterCondition
245
263
  });
246
264
  this.logger.debug(`GraphQL query: ${graphQlQuery}`);
247
- const result = await this.client.query(graphQlQuery, {});
265
+ const paramVariables = queryBuilder.buildQueryParamVariable(pagination, filterCondition);
266
+ this.logger.debug(`GraphQL query params:`, paramVariables);
267
+ const result = await this.client.query(graphQlQuery, paramVariables);
248
268
  this.logger.debug(
249
269
  `Fetch definition ids from instances history result: ${JSON.stringify(result)}`
250
270
  );
@@ -271,8 +291,17 @@ class DataIndexService {
271
291
  return instance;
272
292
  }
273
293
  async fetchWorkflowSource(definitionId) {
274
- const graphQlQuery = `{ ProcessDefinitions ( where: {id: {equal: "${definitionId}" } } ) { id, source } }`;
275
- const result = await this.client.query(graphQlQuery, {});
294
+ const graphQlQuery = core.gql`
295
+ query FindProcessInstanceQuery($definitionId: String!) {
296
+ ProcessDefinitions(where: { id: { equal: $definitionId } }) {
297
+ id
298
+ source
299
+ }
300
+ }
301
+ `;
302
+ const result = await this.client.query(graphQlQuery, {
303
+ definitionId
304
+ });
276
305
  this.logger.debug(
277
306
  `Fetch workflow source result: ${JSON.stringify(result)}`
278
307
  );
@@ -288,9 +317,29 @@ class DataIndexService {
288
317
  return processDefinitions[0].source;
289
318
  }
290
319
  async fetchInstancesByDefinitionId(args) {
291
- const targetEntityWhereCondition = args.targetEntity ? `, variables: {targetEntity: {equal: "${args.targetEntity}" } }` : "";
292
- const graphQlQuery = `{ ProcessInstances( where: {processId: {equal: "${args.definitionId}" } ${targetEntityWhereCondition} }, orderBy: {start:DESC}, pagination: {limit: ${args.limit}, offset: ${args.offset}}) { id, processName, state, start, end } }`;
293
- const result = await this.client.query(graphQlQuery, {});
320
+ const targetEntityWhereCondition = args.targetEntity ? `, variables: {targetEntity: {equal: $targetEntity } }` : "";
321
+ const graphQlQuery = core.gql`
322
+ query FindProcessInstanceQuery($definitionId: String!, $limit: Int!, $offset: Int! ${args.targetEntity ? `, $targetEntity: String` : ""}) {
323
+ ProcessInstances(
324
+ where: {processId: {equal: $definitionId } ${targetEntityWhereCondition} },
325
+ orderBy: {start:DESC},
326
+ pagination: {limit: $limit, offset: $offset}
327
+ ) { id, processName, state, start, end }
328
+ }
329
+ `;
330
+ const result = await this.client.query(
331
+ graphQlQuery,
332
+ args.targetEntity ? {
333
+ definitionId: args.definitionId,
334
+ limit: args.limit,
335
+ offset: args.offset,
336
+ targetEntity: args.targetEntity
337
+ } : {
338
+ definitionId: args.definitionId,
339
+ limit: args.limit,
340
+ offset: args.offset
341
+ }
342
+ );
294
343
  this.logger.debug(
295
344
  `Fetch workflow instances result: ${JSON.stringify(result)}`
296
345
  );
@@ -301,8 +350,16 @@ class DataIndexService {
301
350
  return result.data.ProcessInstances;
302
351
  }
303
352
  async fetchInstanceVariables(instanceId) {
304
- const graphQlQuery = `{ ProcessInstances (where: { id: {equal: "${instanceId}" } } ) { variables } }`;
305
- const result = await this.client.query(graphQlQuery, {});
353
+ const graphQlQuery = core.gql`
354
+ query FindProcessInstanceQuery($instanceId: String!) {
355
+ ProcessInstances(where: { id: { equal: $instanceId } }) {
356
+ variables
357
+ }
358
+ }
359
+ `;
360
+ const result = await this.client.query(graphQlQuery, {
361
+ instanceId
362
+ });
306
363
  this.logger.debug(
307
364
  `Fetch process instance variables result: ${JSON.stringify(result)}`
308
365
  );
@@ -317,8 +374,16 @@ class DataIndexService {
317
374
  return backstagePluginOrchestratorCommon.parseWorkflowVariables(processInstances[0].variables);
318
375
  }
319
376
  async fetchDefinitionIdByInstanceId(instanceId) {
320
- const graphQlQuery = `{ ProcessInstances (where: { id: {equal: "${instanceId}" } } ) { processId } }`;
321
- const result = await this.client.query(graphQlQuery, {});
377
+ const graphQlQuery = core.gql`
378
+ query FindProcessInstanceQuery($instanceId: String!) {
379
+ ProcessInstances(where: { id: { equal: $instanceId } }) {
380
+ processId
381
+ }
382
+ }
383
+ `;
384
+ const result = await this.client.query(graphQlQuery, {
385
+ instanceId
386
+ });
322
387
  this.logger.debug(
323
388
  `Fetch process id from instance result: ${JSON.stringify(result)}`
324
389
  );
@@ -1 +1 @@
1
- {"version":3,"file":"DataIndexService.cjs.js","sources":["../../src/service/DataIndexService.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 { LoggerService } from '@backstage/backend-plugin-api';\n\nimport { Client, fetchExchange, gql } from '@urql/core';\n\nimport {\n Filter,\n fromWorkflowSource,\n IntrospectionField,\n NestedFilter,\n parseWorkflowVariables,\n ProcessInstance,\n WorkflowDefinition,\n WorkflowInfo,\n} from '@red-hat-developer-hub/backstage-plugin-orchestrator-common';\n\nimport { ErrorBuilder } from '../helpers/errorBuilder';\nimport { buildFilterCondition } from '../helpers/filterBuilder';\nimport { buildGraphQlQuery } from '../helpers/queryBuilder';\nimport { Pagination } from '../types/pagination';\nimport { FETCH_PROCESS_INSTANCES_SORT_FIELD } from './constants';\n\nexport class DataIndexService {\n private readonly client: Client;\n public processDefinitionArguments: IntrospectionField[] = [];\n public processInstanceArguments: IntrospectionField[] = [];\n\n public constructor(\n private readonly dataIndexUrl: string,\n private readonly logger: LoggerService,\n ) {\n if (!dataIndexUrl.length) {\n throw ErrorBuilder.GET_NO_DATA_INDEX_URL_ERR();\n }\n\n this.client = this.getNewGraphQLClient();\n }\n\n private getNewGraphQLClient(): Client {\n const diURL = `${this.dataIndexUrl}/graphql`;\n return new Client({\n url: diURL,\n exchanges: [fetchExchange],\n });\n }\n\n public async initInputProcessDefinitionArgs(): Promise<IntrospectionField[]> {\n if (this.processDefinitionArguments.length === 0) {\n this.processDefinitionArguments =\n await this.inspectInputArgument('ProcessDefinition');\n }\n return this.processDefinitionArguments; // For testing purposes\n }\n\n public graphQLArgumentQuery(type: string): string {\n return `query ${type}Argument {\n __type(name: \"${type}Argument\") {\n kind\n name\n inputFields {\n name\n type {\n kind\n name\n ofType {\n kind\n name\n ofType {\n kind\n name\n ofType {\n kind\n name\n }\n }\n }\n }\n }\n }\n }`;\n }\n\n public async inspectInputArgument(\n type: string,\n ): Promise<IntrospectionField[]> {\n const result = await this.client.query(this.graphQLArgumentQuery(type), {});\n\n this.logger.debug(`Introspection query result: ${JSON.stringify(result)}`);\n\n this.handleGraphqlClientError(\n 'Error executing introspection query',\n result,\n );\n\n const pairs: IntrospectionField[] = [];\n if (result?.data?.__type?.inputFields) {\n for (const field of result.data.__type.inputFields) {\n if (\n field.name !== 'and' &&\n field.name !== 'or' &&\n field.name !== 'not'\n ) {\n pairs.push({\n name: field.name,\n type: {\n name: field.type.name,\n kind: field.type.kind,\n ofType: field.type.ofType,\n },\n });\n }\n }\n }\n return pairs;\n }\n\n public async fetchWorkflowInfo(\n definitionId: string,\n ): Promise<WorkflowInfo | undefined> {\n const graphQlQuery = `{ ProcessDefinitions ( where: {id: {equal: \"${definitionId}\" } } ) { id, name, version, type, endpoint, serviceUrl, source } }`;\n\n const result = await this.client.query(graphQlQuery, {});\n\n this.logger.debug(\n `Get workflow definition result: ${JSON.stringify(result)}`,\n );\n\n this.handleGraphqlClientError('Error fetching workflow definition', result);\n\n const processDefinitions = result.data.ProcessDefinitions as WorkflowInfo[];\n\n if (processDefinitions.length === 0) {\n this.logger.info(`No workflow definition found for ${definitionId}`);\n return undefined;\n }\n\n return processDefinitions[0];\n }\n\n public async fetchWorkflowServiceUrls(): Promise<Record<string, string>> {\n const graphQlQuery = `{ ProcessDefinitions { id, serviceUrl } }`;\n\n const result = await this.client.query(graphQlQuery, {});\n\n this.logger.debug(\n `Get workflow service urls result: ${JSON.stringify(result)}`,\n );\n\n this.handleGraphqlClientError(\n 'Error fetching workflow service urls',\n result,\n );\n\n const processDefinitions = result.data.ProcessDefinitions as WorkflowInfo[];\n return processDefinitions\n .filter(definition => definition.serviceUrl)\n .map(definition => ({ [definition.id]: definition.serviceUrl! }))\n .reduce((acc, curr) => ({ ...acc, ...curr }), {});\n }\n\n private filterDeletedWorkflows(workflows: WorkflowInfo[]): WorkflowInfo[] {\n // filter deleted workflows, that were deleted via deleting SonataFlow CR, operator marks them as unavailable\n // Note this is different then the isAvailable status in WorkflowOverviewDTO, that is used to mark workflows that are not available on the service for unexpected reasons\n\n const availableWorkflows: WorkflowInfo[] = [];\n const unavailableWorkflows: WorkflowInfo[] = [];\n\n workflows.forEach(workflow => {\n const isUnavailable = workflow.metadata?.status === 'unavailable';\n if (isUnavailable) {\n unavailableWorkflows.push(workflow);\n } else {\n availableWorkflows.push(workflow);\n }\n });\n\n this.logger.debug(\n `filtered deleted workflows when fetching workflow infos: ${JSON.stringify(\n unavailableWorkflows.map(w => ({\n id: w.id,\n name: w.name,\n status: w.metadata?.status,\n })),\n )}`,\n );\n\n return availableWorkflows;\n }\n\n public async fetchWorkflowInfos(args: {\n definitionIds?: string[];\n pagination?: Pagination;\n filter?: Filter;\n }): Promise<WorkflowInfo[]> {\n this.logger.info(`fetchWorkflowInfos() called: ${this.dataIndexUrl}`);\n const { definitionIds, pagination, filter } = args;\n\n const definitionIdsCondition =\n definitionIds !== undefined && definitionIds.length > 0\n ? `id: {in: ${JSON.stringify(definitionIds)}}`\n : undefined;\n\n const filterCondition = filter\n ? buildFilterCondition(\n await this.initInputProcessDefinitionArgs(),\n 'ProcessDefinition',\n filter,\n )\n : undefined;\n\n let whereClause: string | undefined;\n if (definitionIdsCondition && filterCondition) {\n whereClause = `and: [{${definitionIdsCondition}}, {${filterCondition}}]`;\n } else if (definitionIdsCondition || filterCondition) {\n whereClause = definitionIdsCondition ?? filterCondition;\n } else {\n whereClause = undefined;\n }\n\n const graphQlQuery = buildGraphQlQuery({\n type: 'ProcessDefinitions',\n queryBody:\n 'id, name, version, type, endpoint, serviceUrl, source, metadata',\n whereClause,\n pagination,\n });\n this.logger.debug(`GraphQL query: ${graphQlQuery}`);\n const result = await this.client.query(graphQlQuery, {});\n this.logger.debug(\n `Get workflow definitions result: ${JSON.stringify(result)}`,\n );\n\n this.handleGraphqlClientError(\n 'Error fetching data index swf results',\n result,\n );\n\n return this.filterDeletedWorkflows(result.data.ProcessDefinitions);\n }\n\n public async fetchInstances(args: {\n definitionIds?: string[];\n pagination?: Pagination;\n filter?: Filter;\n }): Promise<ProcessInstance[]> {\n const { pagination, definitionIds, filter } = args;\n if (pagination) pagination.sortField ??= FETCH_PROCESS_INSTANCES_SORT_FIELD;\n\n const processIdNotNullCondition = 'processId: {isNull: false}';\n const definitionIdsCondition =\n definitionIds && definitionIds.length > 0\n ? `processId: {in: ${JSON.stringify(definitionIds)}}`\n : undefined;\n const type = 'ProcessInstance';\n const filterCondition = filter\n ? buildFilterCondition(\n await this.inspectInputArgument(type),\n type,\n filter,\n )\n : '';\n\n let whereClause = '';\n const conditions = [];\n\n if (processIdNotNullCondition) {\n conditions.push(`{${processIdNotNullCondition}}`);\n }\n\n if (definitionIdsCondition) {\n conditions.push(`{${definitionIdsCondition}}`);\n }\n\n if (filter) {\n conditions.push(`{${filterCondition}}`);\n }\n\n if (conditions.length === 0) {\n whereClause = processIdNotNullCondition;\n } else if (conditions.length === 1) {\n whereClause = conditions[0].slice(1, -1); // Remove the outer braces\n } else if (conditions.length > 1) {\n whereClause = `and: [${conditions.join(', ')}]`;\n }\n\n const graphQlQuery = buildGraphQlQuery({\n type: 'ProcessInstances',\n queryBody:\n 'id, processName, processId, state, start, end, nodes { id }, variables, executionSummary, parentProcessInstance {id, processName, businessKey}',\n whereClause,\n pagination,\n });\n\n this.logger.debug(`GraphQL query: ${graphQlQuery}`);\n\n const result = await this.client.query<{\n ProcessInstances: ProcessInstance[];\n }>(graphQlQuery, {});\n this.logger.debug(\n `Fetch process instances result: ${JSON.stringify(result)}`,\n );\n\n this.handleGraphqlClientError('Error when fetching instances', result);\n\n const processInstancesSrc = result.data ? result.data.ProcessInstances : [];\n\n const processInstances = await Promise.all(\n processInstancesSrc.map(async instance => {\n return await this.getWorkflowDefinitionFromInstance(instance);\n }),\n );\n return processInstances;\n }\n\n public async fetchDefinitionIdsFromInstances(args: {\n targetEntity: string;\n }): Promise<string[]> {\n const { targetEntity } = args;\n\n const processIdNotNullCondition = 'processId: {isNull: false}';\n\n const type = 'ProcessInstance';\n const targetEntityFilter: NestedFilter = {\n field: 'variables',\n nested: {\n operator: 'EQ',\n field: 'targetEntity',\n value: targetEntity,\n },\n };\n\n const filterCondition = buildFilterCondition(\n await this.inspectInputArgument(type),\n type,\n targetEntityFilter,\n );\n\n const whereClause = `and: [{${processIdNotNullCondition}}, {${filterCondition}}]`;\n\n // Apply a limit to prevent memory exhaustion and network timeouts when entities\n // have thousands of process instances. Entities with more instances than this limit\n // may not see all their associated workflows.\n const pagination = {\n limit: 1000,\n offset: 0,\n };\n\n const graphQlQuery = buildGraphQlQuery({\n type: 'ProcessInstances',\n queryBody: 'processId',\n whereClause,\n pagination,\n });\n\n this.logger.debug(`GraphQL query: ${graphQlQuery}`);\n\n const result = await this.client.query<{\n ProcessInstances: ProcessInstance[];\n }>(graphQlQuery, {});\n this.logger.debug(\n `Fetch definition ids from instances history result: ${JSON.stringify(result)}`,\n );\n\n this.handleGraphqlClientError(\n 'Error when fetching definition ids from instances history',\n result,\n );\n\n const processInstancesSrc = result.data ? result.data.ProcessInstances : [];\n const distinctProcessIds = [\n ...new Set(processInstancesSrc.map(instance => instance.processId)),\n ]; // graphql doesn't support distinct so we need to use a set to get the distinct process ids\n return distinctProcessIds;\n }\n\n private async getWorkflowDefinitionFromInstance(instance: ProcessInstance) {\n const workflowInfo = await this.fetchWorkflowInfo(instance.processId);\n if (!workflowInfo?.source) {\n throw new Error(\n `Workflow defintion is required to fetch instance ${instance.id}`,\n );\n }\n if (workflowInfo) {\n instance.description = workflowInfo.description;\n }\n return instance;\n }\n\n public async fetchWorkflowSource(\n definitionId: string,\n ): Promise<string | undefined> {\n const graphQlQuery = `{ ProcessDefinitions ( where: {id: {equal: \"${definitionId}\" } } ) { id, source } }`;\n\n const result = await this.client.query(graphQlQuery, {});\n\n this.logger.debug(\n `Fetch workflow source result: ${JSON.stringify(result)}`,\n );\n\n this.handleGraphqlClientError(\n 'Error when fetching workflow source',\n result,\n );\n\n const processDefinitions = result.data.ProcessDefinitions as WorkflowInfo[];\n\n if (processDefinitions.length === 0) {\n this.logger.info(`No workflow source found for ${definitionId}`);\n return undefined;\n }\n\n return processDefinitions[0].source;\n }\n\n public async fetchInstancesByDefinitionId(args: {\n definitionId: string;\n limit: number;\n offset: number;\n targetEntity?: string;\n }): Promise<ProcessInstance[]> {\n const targetEntityWhereCondition = args.targetEntity\n ? `, variables: {targetEntity: {equal: \"${args.targetEntity}\" } }`\n : '';\n\n const graphQlQuery = `{ ProcessInstances( where: {processId: {equal: \"${args.definitionId}\" } ${targetEntityWhereCondition} }, orderBy: {start:DESC}, pagination: {limit: ${args.limit}, offset: ${args.offset}}) { id, processName, state, start, end } }`;\n\n const result = await this.client.query(graphQlQuery, {});\n\n this.logger.debug(\n `Fetch workflow instances result: ${JSON.stringify(result)}`,\n );\n\n this.handleGraphqlClientError(\n 'Error when fetching workflow instances',\n result,\n );\n\n return result.data.ProcessInstances;\n }\n\n public async fetchInstanceVariables(\n instanceId: string,\n ): Promise<object | undefined> {\n const graphQlQuery = `{ ProcessInstances (where: { id: {equal: \"${instanceId}\" } } ) { variables } }`;\n\n const result = await this.client.query(graphQlQuery, {});\n\n this.logger.debug(\n `Fetch process instance variables result: ${JSON.stringify(result)}`,\n );\n\n this.handleGraphqlClientError(\n 'Error when fetching process instance variables',\n result,\n );\n\n const processInstances = result.data.ProcessInstances as ProcessInstance[];\n\n if (processInstances.length === 0) {\n return undefined;\n }\n\n return parseWorkflowVariables(processInstances[0].variables as object);\n }\n\n public async fetchDefinitionIdByInstanceId(\n instanceId: string,\n ): Promise<string | undefined> {\n const graphQlQuery = `{ ProcessInstances (where: { id: {equal: \"${instanceId}\" } } ) { processId } }`;\n\n const result = await this.client.query(graphQlQuery, {});\n\n this.logger.debug(\n `Fetch process id from instance result: ${JSON.stringify(result)}`,\n );\n\n this.handleGraphqlClientError(\n 'Error when fetching process id from instance',\n result,\n );\n\n const processInstances = result.data.ProcessInstances as ProcessInstance[];\n\n if (processInstances.length === 0) {\n return undefined;\n }\n\n return processInstances[0].processId;\n }\n\n public async fetchInstance(\n instanceId: string,\n ): Promise<ProcessInstance | undefined> {\n const FindProcessInstanceQuery = gql`\n query FindProcessInstanceQuery($instanceId: String!) {\n ProcessInstances(where: { id: { equal: $instanceId } }) {\n id\n processName\n processId\n serviceUrl\n executionSummary\n state\n start\n end\n nodes {\n id\n nodeId\n definitionId\n type\n name\n enter\n exit\n errorMessage\n }\n variables\n parentProcessInstance {\n id\n processName\n businessKey\n }\n error {\n nodeDefinitionId\n nodeInstanceId\n message\n }\n }\n }\n `;\n\n const result = await this.client.query(FindProcessInstanceQuery, {\n instanceId,\n });\n\n this.logger.debug(\n `Fetch process instance result: ${JSON.stringify(result)}`,\n );\n\n this.handleGraphqlClientError(\n 'Error when fetching process instances',\n result,\n );\n\n const processInstances = result.data.ProcessInstances as ProcessInstance[];\n\n if (processInstances.length === 0) {\n return undefined;\n }\n\n const instance = this.removeNodes(processInstances[0]);\n\n const workflowInfo = await this.fetchWorkflowInfo(instance.processId);\n if (!workflowInfo?.source) {\n throw new Error(\n `Workflow definition is required to fetch instance ${instance.id}`,\n );\n }\n const workflowDefinitionSrc: WorkflowDefinition = fromWorkflowSource(\n workflowInfo.source,\n );\n if (workflowInfo) {\n instance.description = workflowDefinitionSrc.description;\n }\n return instance;\n }\n\n private handleGraphqlClientError(scenario: string, result: any) {\n if (!result?.error) {\n return;\n }\n\n this.logger.error(scenario, result);\n\n const networkError = result.error.networkError?.cause?.message;\n if (networkError) {\n const toThrow = new Error(`${result.error.message}. ${networkError}`);\n toThrow.name = 'Network Error';\n throw toThrow;\n }\n\n const graphQLErrors = result.error.graphQLErrors;\n if (\n result.data &&\n Array.isArray(graphQLErrors) &&\n graphQLErrors.length > 0\n ) {\n const graphQLError = graphQLErrors[0];\n if (\n graphQLError?.extensions?.classification === 'DataFetchingException'\n ) {\n // we have data (perhaps partial) and it is a data fetch error ==> log and ignore\n return;\n }\n }\n\n throw result.error;\n }\n\n private removeNodes(instance: ProcessInstance): ProcessInstance {\n const errorNodeId = instance.error?.nodeInstanceId;\n instance.nodes = instance.nodes.filter(node => {\n return !node.errorMessage || node.id === errorNodeId;\n });\n return instance;\n }\n}\n"],"names":["ErrorBuilder","Client","fetchExchange","buildFilterCondition","buildGraphQlQuery","FETCH_PROCESS_INSTANCES_SORT_FIELD","parseWorkflowVariables","gql","fromWorkflowSource"],"mappings":";;;;;;;;;AAqCO,MAAM,gBAAA,CAAiB;AAAA,EAKrB,WAAA,CACY,cACA,MAAA,EACjB;AAFiB,IAAA,IAAA,CAAA,YAAA,GAAA,YAAA;AACA,IAAA,IAAA,CAAA,MAAA,GAAA,MAAA;AAEjB,IAAA,IAAI,CAAC,aAAa,MAAA,EAAQ;AACxB,MAAA,MAAMA,0BAAa,yBAAA,EAA0B;AAAA,IAC/C;AAEA,IAAA,IAAA,CAAK,MAAA,GAAS,KAAK,mBAAA,EAAoB;AAAA,EACzC;AAAA,EAbiB,MAAA;AAAA,EACV,6BAAmD,EAAC;AAAA,EACpD,2BAAiD,EAAC;AAAA,EAajD,mBAAA,GAA8B;AACpC,IAAA,MAAM,KAAA,GAAQ,CAAA,EAAG,IAAA,CAAK,YAAY,CAAA,QAAA,CAAA;AAClC,IAAA,OAAO,IAAIC,WAAA,CAAO;AAAA,MAChB,GAAA,EAAK,KAAA;AAAA,MACL,SAAA,EAAW,CAACC,kBAAa;AAAA,KAC1B,CAAA;AAAA,EACH;AAAA,EAEA,MAAa,8BAAA,GAAgE;AAC3E,IAAA,IAAI,IAAA,CAAK,0BAAA,CAA2B,MAAA,KAAW,CAAA,EAAG;AAChD,MAAA,IAAA,CAAK,0BAAA,GACH,MAAM,IAAA,CAAK,oBAAA,CAAqB,mBAAmB,CAAA;AAAA,IACvD;AACA,IAAA,OAAO,IAAA,CAAK,0BAAA;AAAA,EACd;AAAA,EAEO,qBAAqB,IAAA,EAAsB;AAChD,IAAA,OAAO,SAAS,IAAI,CAAA;AAAA,sBAAA,EACA,IAAI,CAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,OAAA,CAAA;AAAA,EAwB1B;AAAA,EAEA,MAAa,qBACX,IAAA,EAC+B;AAC/B,IAAA,MAAM,MAAA,GAAS,MAAM,IAAA,CAAK,MAAA,CAAO,KAAA,CAAM,KAAK,oBAAA,CAAqB,IAAI,CAAA,EAAG,EAAE,CAAA;AAE1E,IAAA,IAAA,CAAK,OAAO,KAAA,CAAM,CAAA,4BAAA,EAA+B,KAAK,SAAA,CAAU,MAAM,CAAC,CAAA,CAAE,CAAA;AAEzE,IAAA,IAAA,CAAK,wBAAA;AAAA,MACH,qCAAA;AAAA,MACA;AAAA,KACF;AAEA,IAAA,MAAM,QAA8B,EAAC;AACrC,IAAA,IAAI,MAAA,EAAQ,IAAA,EAAM,MAAA,EAAQ,WAAA,EAAa;AACrC,MAAA,KAAA,MAAW,KAAA,IAAS,MAAA,CAAO,IAAA,CAAK,MAAA,CAAO,WAAA,EAAa;AAClD,QAAA,IACE,KAAA,CAAM,SAAS,KAAA,IACf,KAAA,CAAM,SAAS,IAAA,IACf,KAAA,CAAM,SAAS,KAAA,EACf;AACA,UAAA,KAAA,CAAM,IAAA,CAAK;AAAA,YACT,MAAM,KAAA,CAAM,IAAA;AAAA,YACZ,IAAA,EAAM;AAAA,cACJ,IAAA,EAAM,MAAM,IAAA,CAAK,IAAA;AAAA,cACjB,IAAA,EAAM,MAAM,IAAA,CAAK,IAAA;AAAA,cACjB,MAAA,EAAQ,MAAM,IAAA,CAAK;AAAA;AACrB,WACD,CAAA;AAAA,QACH;AAAA,MACF;AAAA,IACF;AACA,IAAA,OAAO,KAAA;AAAA,EACT;AAAA,EAEA,MAAa,kBACX,YAAA,EACmC;AACnC,IAAA,MAAM,YAAA,GAAe,+CAA+C,YAAY,CAAA,mEAAA,CAAA;AAEhF,IAAA,MAAM,SAAS,MAAM,IAAA,CAAK,OAAO,KAAA,CAAM,YAAA,EAAc,EAAE,CAAA;AAEvD,IAAA,IAAA,CAAK,MAAA,CAAO,KAAA;AAAA,MACV,CAAA,gCAAA,EAAmC,IAAA,CAAK,SAAA,CAAU,MAAM,CAAC,CAAA;AAAA,KAC3D;AAEA,IAAA,IAAA,CAAK,wBAAA,CAAyB,sCAAsC,MAAM,CAAA;AAE1E,IAAA,MAAM,kBAAA,GAAqB,OAAO,IAAA,CAAK,kBAAA;AAEvC,IAAA,IAAI,kBAAA,CAAmB,WAAW,CAAA,EAAG;AACnC,MAAA,IAAA,CAAK,MAAA,CAAO,IAAA,CAAK,CAAA,iCAAA,EAAoC,YAAY,CAAA,CAAE,CAAA;AACnE,MAAA,OAAO,MAAA;AAAA,IACT;AAEA,IAAA,OAAO,mBAAmB,CAAC,CAAA;AAAA,EAC7B;AAAA,EAEA,MAAa,wBAAA,GAA4D;AACvE,IAAA,MAAM,YAAA,GAAe,CAAA,yCAAA,CAAA;AAErB,IAAA,MAAM,SAAS,MAAM,IAAA,CAAK,OAAO,KAAA,CAAM,YAAA,EAAc,EAAE,CAAA;AAEvD,IAAA,IAAA,CAAK,MAAA,CAAO,KAAA;AAAA,MACV,CAAA,kCAAA,EAAqC,IAAA,CAAK,SAAA,CAAU,MAAM,CAAC,CAAA;AAAA,KAC7D;AAEA,IAAA,IAAA,CAAK,wBAAA;AAAA,MACH,sCAAA;AAAA,MACA;AAAA,KACF;AAEA,IAAA,MAAM,kBAAA,GAAqB,OAAO,IAAA,CAAK,kBAAA;AACvC,IAAA,OAAO,kBAAA,CACJ,MAAA,CAAO,CAAA,UAAA,KAAc,UAAA,CAAW,UAAU,CAAA,CAC1C,GAAA,CAAI,CAAA,UAAA,MAAe,EAAE,CAAC,UAAA,CAAW,EAAE,GAAG,UAAA,CAAW,UAAA,EAAY,CAAE,CAAA,CAC/D,MAAA,CAAO,CAAC,GAAA,EAAK,IAAA,MAAU,EAAE,GAAG,GAAA,EAAK,GAAG,IAAA,EAAK,CAAA,EAAI,EAAE,CAAA;AAAA,EACpD;AAAA,EAEQ,uBAAuB,SAAA,EAA2C;AAIxE,IAAA,MAAM,qBAAqC,EAAC;AAC5C,IAAA,MAAM,uBAAuC,EAAC;AAE9C,IAAA,SAAA,CAAU,QAAQ,CAAA,QAAA,KAAY;AAC5B,MAAA,MAAM,aAAA,GAAgB,QAAA,CAAS,QAAA,EAAU,MAAA,KAAW,aAAA;AACpD,MAAA,IAAI,aAAA,EAAe;AACjB,QAAA,oBAAA,CAAqB,KAAK,QAAQ,CAAA;AAAA,MACpC,CAAA,MAAO;AACL,QAAA,kBAAA,CAAmB,KAAK,QAAQ,CAAA;AAAA,MAClC;AAAA,IACF,CAAC,CAAA;AAED,IAAA,IAAA,CAAK,MAAA,CAAO,KAAA;AAAA,MACV,4DAA4D,IAAA,CAAK,SAAA;AAAA,QAC/D,oBAAA,CAAqB,IAAI,CAAA,CAAA,MAAM;AAAA,UAC7B,IAAI,CAAA,CAAE,EAAA;AAAA,UACN,MAAM,CAAA,CAAE,IAAA;AAAA,UACR,MAAA,EAAQ,EAAE,QAAA,EAAU;AAAA,SACtB,CAAE;AAAA,OACH,CAAA;AAAA,KACH;AAEA,IAAA,OAAO,kBAAA;AAAA,EACT;AAAA,EAEA,MAAa,mBAAmB,IAAA,EAIJ;AAC1B,IAAA,IAAA,CAAK,MAAA,CAAO,IAAA,CAAK,CAAA,6BAAA,EAAgC,IAAA,CAAK,YAAY,CAAA,CAAE,CAAA;AACpE,IAAA,MAAM,EAAE,aAAA,EAAe,UAAA,EAAY,MAAA,EAAO,GAAI,IAAA;AAE9C,IAAA,MAAM,sBAAA,GACJ,aAAA,KAAkB,MAAA,IAAa,aAAA,CAAc,MAAA,GAAS,CAAA,GAClD,CAAA,SAAA,EAAY,IAAA,CAAK,SAAA,CAAU,aAAa,CAAC,CAAA,CAAA,CAAA,GACzC,MAAA;AAEN,IAAA,MAAM,kBAAkB,MAAA,GACpBC,kCAAA;AAAA,MACE,MAAM,KAAK,8BAAA,EAA+B;AAAA,MAC1C,mBAAA;AAAA,MACA;AAAA,KACF,GACA,MAAA;AAEJ,IAAA,IAAI,WAAA;AACJ,IAAA,IAAI,0BAA0B,eAAA,EAAiB;AAC7C,MAAA,WAAA,GAAc,CAAA,OAAA,EAAU,sBAAsB,CAAA,IAAA,EAAO,eAAe,CAAA,EAAA,CAAA;AAAA,IACtE,CAAA,MAAA,IAAW,0BAA0B,eAAA,EAAiB;AACpD,MAAA,WAAA,GAAc,sBAAA,IAA0B,eAAA;AAAA,IAC1C,CAAA,MAAO;AACL,MAAA,WAAA,GAAc,MAAA;AAAA,IAChB;AAEA,IAAA,MAAM,eAAeC,8BAAA,CAAkB;AAAA,MACrC,IAAA,EAAM,oBAAA;AAAA,MACN,SAAA,EACE,iEAAA;AAAA,MACF,WAAA;AAAA,MACA;AAAA,KACD,CAAA;AACD,IAAA,IAAA,CAAK,MAAA,CAAO,KAAA,CAAM,CAAA,eAAA,EAAkB,YAAY,CAAA,CAAE,CAAA;AAClD,IAAA,MAAM,SAAS,MAAM,IAAA,CAAK,OAAO,KAAA,CAAM,YAAA,EAAc,EAAE,CAAA;AACvD,IAAA,IAAA,CAAK,MAAA,CAAO,KAAA;AAAA,MACV,CAAA,iCAAA,EAAoC,IAAA,CAAK,SAAA,CAAU,MAAM,CAAC,CAAA;AAAA,KAC5D;AAEA,IAAA,IAAA,CAAK,wBAAA;AAAA,MACH,uCAAA;AAAA,MACA;AAAA,KACF;AAEA,IAAA,OAAO,IAAA,CAAK,sBAAA,CAAuB,MAAA,CAAO,IAAA,CAAK,kBAAkB,CAAA;AAAA,EACnE;AAAA,EAEA,MAAa,eAAe,IAAA,EAIG;AAC7B,IAAA,MAAM,EAAE,UAAA,EAAY,aAAA,EAAe,MAAA,EAAO,GAAI,IAAA;AAC9C,IAAA,IAAI,UAAA,aAAuB,SAAA,KAAcC,4CAAA;AAEzC,IAAA,MAAM,yBAAA,GAA4B,4BAAA;AAClC,IAAA,MAAM,sBAAA,GACJ,aAAA,IAAiB,aAAA,CAAc,MAAA,GAAS,CAAA,GACpC,mBAAmB,IAAA,CAAK,SAAA,CAAU,aAAa,CAAC,CAAA,CAAA,CAAA,GAChD,MAAA;AACN,IAAA,MAAM,IAAA,GAAO,iBAAA;AACb,IAAA,MAAM,kBAAkB,MAAA,GACpBF,kCAAA;AAAA,MACE,MAAM,IAAA,CAAK,oBAAA,CAAqB,IAAI,CAAA;AAAA,MACpC,IAAA;AAAA,MACA;AAAA,KACF,GACA,EAAA;AAEJ,IAAA,IAAI,WAAA,GAAc,EAAA;AAClB,IAAA,MAAM,aAAa,EAAC;AAEpB,IAA+B;AAC7B,MAAA,UAAA,CAAW,IAAA,CAAK,CAAA,CAAA,EAAI,yBAAyB,CAAA,CAAA,CAAG,CAAA;AAAA,IAClD;AAEA,IAAA,IAAI,sBAAA,EAAwB;AAC1B,MAAA,UAAA,CAAW,IAAA,CAAK,CAAA,CAAA,EAAI,sBAAsB,CAAA,CAAA,CAAG,CAAA;AAAA,IAC/C;AAEA,IAAA,IAAI,MAAA,EAAQ;AACV,MAAA,UAAA,CAAW,IAAA,CAAK,CAAA,CAAA,EAAI,eAAe,CAAA,CAAA,CAAG,CAAA;AAAA,IACxC;AAEA,IAAA,IAAI,UAAA,CAAW,WAAW,CAAA,EAAG;AAC3B,MAAA,WAAA,GAAc,yBAAA;AAAA,IAChB,CAAA,MAAA,IAAW,UAAA,CAAW,MAAA,KAAW,CAAA,EAAG;AAClC,MAAA,WAAA,GAAc,UAAA,CAAW,CAAC,CAAA,CAAE,KAAA,CAAM,GAAG,EAAE,CAAA;AAAA,IACzC,CAAA,MAAA,IAAW,UAAA,CAAW,MAAA,GAAS,CAAA,EAAG;AAChC,MAAA,WAAA,GAAc,CAAA,MAAA,EAAS,UAAA,CAAW,IAAA,CAAK,IAAI,CAAC,CAAA,CAAA,CAAA;AAAA,IAC9C;AAEA,IAAA,MAAM,eAAeC,8BAAA,CAAkB;AAAA,MACrC,IAAA,EAAM,kBAAA;AAAA,MACN,SAAA,EACE,gJAAA;AAAA,MACF,WAAA;AAAA,MACA;AAAA,KACD,CAAA;AAED,IAAA,IAAA,CAAK,MAAA,CAAO,KAAA,CAAM,CAAA,eAAA,EAAkB,YAAY,CAAA,CAAE,CAAA;AAElD,IAAA,MAAM,SAAS,MAAM,IAAA,CAAK,OAAO,KAAA,CAE9B,YAAA,EAAc,EAAE,CAAA;AACnB,IAAA,IAAA,CAAK,MAAA,CAAO,KAAA;AAAA,MACV,CAAA,gCAAA,EAAmC,IAAA,CAAK,SAAA,CAAU,MAAM,CAAC,CAAA;AAAA,KAC3D;AAEA,IAAA,IAAA,CAAK,wBAAA,CAAyB,iCAAiC,MAAM,CAAA;AAErE,IAAA,MAAM,sBAAsB,MAAA,CAAO,IAAA,GAAO,MAAA,CAAO,IAAA,CAAK,mBAAmB,EAAC;AAE1E,IAAA,MAAM,gBAAA,GAAmB,MAAM,OAAA,CAAQ,GAAA;AAAA,MACrC,mBAAA,CAAoB,GAAA,CAAI,OAAM,QAAA,KAAY;AACxC,QAAA,OAAO,MAAM,IAAA,CAAK,iCAAA,CAAkC,QAAQ,CAAA;AAAA,MAC9D,CAAC;AAAA,KACH;AACA,IAAA,OAAO,gBAAA;AAAA,EACT;AAAA,EAEA,MAAa,gCAAgC,IAAA,EAEvB;AACpB,IAAA,MAAM,EAAE,cAAa,GAAI,IAAA;AAEzB,IAAA,MAAM,yBAAA,GAA4B,4BAAA;AAElC,IAAA,MAAM,IAAA,GAAO,iBAAA;AACb,IAAA,MAAM,kBAAA,GAAmC;AAAA,MACvC,KAAA,EAAO,WAAA;AAAA,MACP,MAAA,EAAQ;AAAA,QACN,QAAA,EAAU,IAAA;AAAA,QACV,KAAA,EAAO,cAAA;AAAA,QACP,KAAA,EAAO;AAAA;AACT,KACF;AAEA,IAAA,MAAM,eAAA,GAAkBD,kCAAA;AAAA,MACtB,MAAM,IAAA,CAAK,oBAAA,CAAqB,IAAI,CAAA;AAAA,MACpC,IAAA;AAAA,MACA;AAAA,KACF;AAEA,IAAA,MAAM,WAAA,GAAc,CAAA,OAAA,EAAU,yBAAyB,CAAA,IAAA,EAAO,eAAe,CAAA,EAAA,CAAA;AAK7E,IAAA,MAAM,UAAA,GAAa;AAAA,MACjB,KAAA,EAAO,GAAA;AAAA,MACP,MAAA,EAAQ;AAAA,KACV;AAEA,IAAA,MAAM,eAAeC,8BAAA,CAAkB;AAAA,MACrC,IAAA,EAAM,kBAAA;AAAA,MACN,SAAA,EAAW,WAAA;AAAA,MACX,WAAA;AAAA,MACA;AAAA,KACD,CAAA;AAED,IAAA,IAAA,CAAK,MAAA,CAAO,KAAA,CAAM,CAAA,eAAA,EAAkB,YAAY,CAAA,CAAE,CAAA;AAElD,IAAA,MAAM,SAAS,MAAM,IAAA,CAAK,OAAO,KAAA,CAE9B,YAAA,EAAc,EAAE,CAAA;AACnB,IAAA,IAAA,CAAK,MAAA,CAAO,KAAA;AAAA,MACV,CAAA,oDAAA,EAAuD,IAAA,CAAK,SAAA,CAAU,MAAM,CAAC,CAAA;AAAA,KAC/E;AAEA,IAAA,IAAA,CAAK,wBAAA;AAAA,MACH,2DAAA;AAAA,MACA;AAAA,KACF;AAEA,IAAA,MAAM,sBAAsB,MAAA,CAAO,IAAA,GAAO,MAAA,CAAO,IAAA,CAAK,mBAAmB,EAAC;AAC1E,IAAA,MAAM,kBAAA,GAAqB;AAAA,MACzB,GAAG,IAAI,GAAA,CAAI,mBAAA,CAAoB,IAAI,CAAA,QAAA,KAAY,QAAA,CAAS,SAAS,CAAC;AAAA,KACpE;AACA,IAAA,OAAO,kBAAA;AAAA,EACT;AAAA,EAEA,MAAc,kCAAkC,QAAA,EAA2B;AACzE,IAAA,MAAM,YAAA,GAAe,MAAM,IAAA,CAAK,iBAAA,CAAkB,SAAS,SAAS,CAAA;AACpE,IAAA,IAAI,CAAC,cAAc,MAAA,EAAQ;AACzB,MAAA,MAAM,IAAI,KAAA;AAAA,QACR,CAAA,iDAAA,EAAoD,SAAS,EAAE,CAAA;AAAA,OACjE;AAAA,IACF;AACA,IAAA,IAAI,YAAA,EAAc;AAChB,MAAA,QAAA,CAAS,cAAc,YAAA,CAAa,WAAA;AAAA,IACtC;AACA,IAAA,OAAO,QAAA;AAAA,EACT;AAAA,EAEA,MAAa,oBACX,YAAA,EAC6B;AAC7B,IAAA,MAAM,YAAA,GAAe,+CAA+C,YAAY,CAAA,wBAAA,CAAA;AAEhF,IAAA,MAAM,SAAS,MAAM,IAAA,CAAK,OAAO,KAAA,CAAM,YAAA,EAAc,EAAE,CAAA;AAEvD,IAAA,IAAA,CAAK,MAAA,CAAO,KAAA;AAAA,MACV,CAAA,8BAAA,EAAiC,IAAA,CAAK,SAAA,CAAU,MAAM,CAAC,CAAA;AAAA,KACzD;AAEA,IAAA,IAAA,CAAK,wBAAA;AAAA,MACH,qCAAA;AAAA,MACA;AAAA,KACF;AAEA,IAAA,MAAM,kBAAA,GAAqB,OAAO,IAAA,CAAK,kBAAA;AAEvC,IAAA,IAAI,kBAAA,CAAmB,WAAW,CAAA,EAAG;AACnC,MAAA,IAAA,CAAK,MAAA,CAAO,IAAA,CAAK,CAAA,6BAAA,EAAgC,YAAY,CAAA,CAAE,CAAA;AAC/D,MAAA,OAAO,MAAA;AAAA,IACT;AAEA,IAAA,OAAO,kBAAA,CAAmB,CAAC,CAAA,CAAE,MAAA;AAAA,EAC/B;AAAA,EAEA,MAAa,6BAA6B,IAAA,EAKX;AAC7B,IAAA,MAAM,6BAA6B,IAAA,CAAK,YAAA,GACpC,CAAA,qCAAA,EAAwC,IAAA,CAAK,YAAY,CAAA,KAAA,CAAA,GACzD,EAAA;AAEJ,IAAA,MAAM,YAAA,GAAe,CAAA,gDAAA,EAAmD,IAAA,CAAK,YAAY,CAAA,IAAA,EAAO,0BAA0B,CAAA,+CAAA,EAAkD,IAAA,CAAK,KAAK,CAAA,UAAA,EAAa,IAAA,CAAK,MAAM,CAAA,2CAAA,CAAA;AAE9M,IAAA,MAAM,SAAS,MAAM,IAAA,CAAK,OAAO,KAAA,CAAM,YAAA,EAAc,EAAE,CAAA;AAEvD,IAAA,IAAA,CAAK,MAAA,CAAO,KAAA;AAAA,MACV,CAAA,iCAAA,EAAoC,IAAA,CAAK,SAAA,CAAU,MAAM,CAAC,CAAA;AAAA,KAC5D;AAEA,IAAA,IAAA,CAAK,wBAAA;AAAA,MACH,wCAAA;AAAA,MACA;AAAA,KACF;AAEA,IAAA,OAAO,OAAO,IAAA,CAAK,gBAAA;AAAA,EACrB;AAAA,EAEA,MAAa,uBACX,UAAA,EAC6B;AAC7B,IAAA,MAAM,YAAA,GAAe,6CAA6C,UAAU,CAAA,uBAAA,CAAA;AAE5E,IAAA,MAAM,SAAS,MAAM,IAAA,CAAK,OAAO,KAAA,CAAM,YAAA,EAAc,EAAE,CAAA;AAEvD,IAAA,IAAA,CAAK,MAAA,CAAO,KAAA;AAAA,MACV,CAAA,yCAAA,EAA4C,IAAA,CAAK,SAAA,CAAU,MAAM,CAAC,CAAA;AAAA,KACpE;AAEA,IAAA,IAAA,CAAK,wBAAA;AAAA,MACH,gDAAA;AAAA,MACA;AAAA,KACF;AAEA,IAAA,MAAM,gBAAA,GAAmB,OAAO,IAAA,CAAK,gBAAA;AAErC,IAAA,IAAI,gBAAA,CAAiB,WAAW,CAAA,EAAG;AACjC,MAAA,OAAO,MAAA;AAAA,IACT;AAEA,IAAA,OAAOE,wDAAA,CAAuB,gBAAA,CAAiB,CAAC,CAAA,CAAE,SAAmB,CAAA;AAAA,EACvE;AAAA,EAEA,MAAa,8BACX,UAAA,EAC6B;AAC7B,IAAA,MAAM,YAAA,GAAe,6CAA6C,UAAU,CAAA,uBAAA,CAAA;AAE5E,IAAA,MAAM,SAAS,MAAM,IAAA,CAAK,OAAO,KAAA,CAAM,YAAA,EAAc,EAAE,CAAA;AAEvD,IAAA,IAAA,CAAK,MAAA,CAAO,KAAA;AAAA,MACV,CAAA,uCAAA,EAA0C,IAAA,CAAK,SAAA,CAAU,MAAM,CAAC,CAAA;AAAA,KAClE;AAEA,IAAA,IAAA,CAAK,wBAAA;AAAA,MACH,8CAAA;AAAA,MACA;AAAA,KACF;AAEA,IAAA,MAAM,gBAAA,GAAmB,OAAO,IAAA,CAAK,gBAAA;AAErC,IAAA,IAAI,gBAAA,CAAiB,WAAW,CAAA,EAAG;AACjC,MAAA,OAAO,MAAA;AAAA,IACT;AAEA,IAAA,OAAO,gBAAA,CAAiB,CAAC,CAAA,CAAE,SAAA;AAAA,EAC7B;AAAA,EAEA,MAAa,cACX,UAAA,EACsC;AACtC,IAAA,MAAM,wBAAA,GAA2BC,QAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAAA,CAAA;AAoCjC,IAAA,MAAM,MAAA,GAAS,MAAM,IAAA,CAAK,MAAA,CAAO,MAAM,wBAAA,EAA0B;AAAA,MAC/D;AAAA,KACD,CAAA;AAED,IAAA,IAAA,CAAK,MAAA,CAAO,KAAA;AAAA,MACV,CAAA,+BAAA,EAAkC,IAAA,CAAK,SAAA,CAAU,MAAM,CAAC,CAAA;AAAA,KAC1D;AAEA,IAAA,IAAA,CAAK,wBAAA;AAAA,MACH,uCAAA;AAAA,MACA;AAAA,KACF;AAEA,IAAA,MAAM,gBAAA,GAAmB,OAAO,IAAA,CAAK,gBAAA;AAErC,IAAA,IAAI,gBAAA,CAAiB,WAAW,CAAA,EAAG;AACjC,MAAA,OAAO,MAAA;AAAA,IACT;AAEA,IAAA,MAAM,QAAA,GAAW,IAAA,CAAK,WAAA,CAAY,gBAAA,CAAiB,CAAC,CAAC,CAAA;AAErD,IAAA,MAAM,YAAA,GAAe,MAAM,IAAA,CAAK,iBAAA,CAAkB,SAAS,SAAS,CAAA;AACpE,IAAA,IAAI,CAAC,cAAc,MAAA,EAAQ;AACzB,MAAA,MAAM,IAAI,KAAA;AAAA,QACR,CAAA,kDAAA,EAAqD,SAAS,EAAE,CAAA;AAAA,OAClE;AAAA,IACF;AACA,IAAA,MAAM,qBAAA,GAA4CC,oDAAA;AAAA,MAChD,YAAA,CAAa;AAAA,KACf;AACA,IAAA,IAAI,YAAA,EAAc;AAChB,MAAA,QAAA,CAAS,cAAc,qBAAA,CAAsB,WAAA;AAAA,IAC/C;AACA,IAAA,OAAO,QAAA;AAAA,EACT;AAAA,EAEQ,wBAAA,CAAyB,UAAkB,MAAA,EAAa;AAC9D,IAAA,IAAI,CAAC,QAAQ,KAAA,EAAO;AAClB,MAAA;AAAA,IACF;AAEA,IAAA,IAAA,CAAK,MAAA,CAAO,KAAA,CAAM,QAAA,EAAU,MAAM,CAAA;AAElC,IAAA,MAAM,YAAA,GAAe,MAAA,CAAO,KAAA,CAAM,YAAA,EAAc,KAAA,EAAO,OAAA;AACvD,IAAA,IAAI,YAAA,EAAc;AAChB,MAAA,MAAM,OAAA,GAAU,IAAI,KAAA,CAAM,CAAA,EAAG,OAAO,KAAA,CAAM,OAAO,CAAA,EAAA,EAAK,YAAY,CAAA,CAAE,CAAA;AACpE,MAAA,OAAA,CAAQ,IAAA,GAAO,eAAA;AACf,MAAA,MAAM,OAAA;AAAA,IACR;AAEA,IAAA,MAAM,aAAA,GAAgB,OAAO,KAAA,CAAM,aAAA;AACnC,IAAA,IACE,MAAA,CAAO,QACP,KAAA,CAAM,OAAA,CAAQ,aAAa,CAAA,IAC3B,aAAA,CAAc,SAAS,CAAA,EACvB;AACA,MAAA,MAAM,YAAA,GAAe,cAAc,CAAC,CAAA;AACpC,MAAA,IACE,YAAA,EAAc,UAAA,EAAY,cAAA,KAAmB,uBAAA,EAC7C;AAEA,QAAA;AAAA,MACF;AAAA,IACF;AAEA,IAAA,MAAM,MAAA,CAAO,KAAA;AAAA,EACf;AAAA,EAEQ,YAAY,QAAA,EAA4C;AAC9D,IAAA,MAAM,WAAA,GAAc,SAAS,KAAA,EAAO,cAAA;AACpC,IAAA,QAAA,CAAS,KAAA,GAAQ,QAAA,CAAS,KAAA,CAAM,MAAA,CAAO,CAAA,IAAA,KAAQ;AAC7C,MAAA,OAAO,CAAC,IAAA,CAAK,YAAA,IAAgB,IAAA,CAAK,EAAA,KAAO,WAAA;AAAA,IAC3C,CAAC,CAAA;AACD,IAAA,OAAO,QAAA;AAAA,EACT;AACF;;;;"}
1
+ {"version":3,"file":"DataIndexService.cjs.js","sources":["../../src/service/DataIndexService.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 { LoggerService } from '@backstage/backend-plugin-api';\n\nimport { Client, fetchExchange, gql } from '@urql/core';\n\nimport {\n Filter,\n fromWorkflowSource,\n IntrospectionField,\n NestedFilter,\n parseWorkflowVariables,\n ProcessInstance,\n WorkflowDefinition,\n WorkflowInfo,\n} from '@red-hat-developer-hub/backstage-plugin-orchestrator-common';\n\nimport { ErrorBuilder } from '../helpers/errorBuilder';\nimport { buildFilterCondition } from '../helpers/filterBuilder';\nimport {\n buildGraphQlQuery,\n buildQueryParamVariable,\n} from '../helpers/queryBuilder';\nimport { Pagination } from '../types/pagination';\nimport { FETCH_PROCESS_INSTANCES_SORT_FIELD } from './constants';\n\nexport class DataIndexService {\n private readonly client: Client;\n public processDefinitionArguments: IntrospectionField[] = [];\n public processInstanceArguments: IntrospectionField[] = [];\n\n public constructor(\n private readonly dataIndexUrl: string,\n private readonly logger: LoggerService,\n ) {\n if (!dataIndexUrl.length) {\n throw ErrorBuilder.GET_NO_DATA_INDEX_URL_ERR();\n }\n\n this.client = this.getNewGraphQLClient();\n }\n\n private getNewGraphQLClient(): Client {\n const diURL = `${this.dataIndexUrl}/graphql`;\n return new Client({\n url: diURL,\n exchanges: [fetchExchange],\n });\n }\n\n public async initInputProcessDefinitionArgs(): Promise<IntrospectionField[]> {\n if (this.processDefinitionArguments.length === 0) {\n this.processDefinitionArguments =\n await this.inspectInputArgument('ProcessDefinition');\n }\n return this.processDefinitionArguments; // For testing purposes\n }\n\n public graphQLArgumentQuery(type: string): string {\n return `query ${type}Argument {\n __type(name: \"${type}Argument\") {\n kind\n name\n inputFields {\n name\n type {\n kind\n name\n ofType {\n kind\n name\n ofType {\n kind\n name\n ofType {\n kind\n name\n }\n }\n }\n }\n }\n }\n }`;\n }\n\n public async inspectInputArgument(\n type: string,\n ): Promise<IntrospectionField[]> {\n const result = await this.client.query(this.graphQLArgumentQuery(type), {});\n\n this.logger.debug(`Introspection query result: ${JSON.stringify(result)}`);\n\n this.handleGraphqlClientError(\n 'Error executing introspection query',\n result,\n );\n\n const pairs: IntrospectionField[] = [];\n if (result?.data?.__type?.inputFields) {\n for (const field of result.data.__type.inputFields) {\n if (\n field.name !== 'and' &&\n field.name !== 'or' &&\n field.name !== 'not'\n ) {\n pairs.push({\n name: field.name,\n type: {\n name: field.type.name,\n kind: field.type.kind,\n ofType: field.type.ofType,\n },\n });\n }\n }\n }\n return pairs;\n }\n\n public async fetchWorkflowInfo(\n definitionId: string,\n ): Promise<WorkflowInfo | undefined> {\n const graphQlQuery = gql`\n query FindProcessInstanceQuery($definitionId: String!) {\n ProcessDefinitions(where: { id: { equal: $definitionId } }) {\n id\n name\n version\n type\n endpoint\n serviceUrl\n source\n }\n }\n `;\n\n const result = await this.client.query(graphQlQuery, {\n definitionId,\n });\n\n this.logger.debug(\n `Get workflow definition result: ${JSON.stringify(result)}`,\n );\n\n this.handleGraphqlClientError('Error fetching workflow definition', result);\n\n const processDefinitions = result.data.ProcessDefinitions as WorkflowInfo[];\n\n if (processDefinitions.length === 0) {\n this.logger.info(`No workflow definition found for ${definitionId}`);\n return undefined;\n }\n\n return processDefinitions[0];\n }\n\n public async fetchWorkflowServiceUrls(): Promise<Record<string, string>> {\n const graphQlQuery = `{ ProcessDefinitions { id, serviceUrl } }`;\n\n const result = await this.client.query(graphQlQuery, {});\n\n this.logger.debug(\n `Get workflow service urls result: ${JSON.stringify(result)}`,\n );\n\n this.handleGraphqlClientError(\n 'Error fetching workflow service urls',\n result,\n );\n\n const processDefinitions = result.data.ProcessDefinitions as WorkflowInfo[];\n return processDefinitions\n .filter(definition => definition.serviceUrl)\n .map(definition => ({ [definition.id]: definition.serviceUrl! }))\n .reduce((acc, curr) => ({ ...acc, ...curr }), {});\n }\n\n private filterDeletedWorkflows(workflows: WorkflowInfo[]): WorkflowInfo[] {\n // filter deleted workflows, that were deleted via deleting SonataFlow CR, operator marks them as unavailable\n // Note this is different then the isAvailable status in WorkflowOverviewDTO, that is used to mark workflows that are not available on the service for unexpected reasons\n\n const availableWorkflows: WorkflowInfo[] = [];\n const unavailableWorkflows: WorkflowInfo[] = [];\n\n workflows.forEach(workflow => {\n const isUnavailable = workflow.metadata?.status === 'unavailable';\n if (isUnavailable) {\n unavailableWorkflows.push(workflow);\n } else {\n availableWorkflows.push(workflow);\n }\n });\n\n this.logger.debug(\n `filtered deleted workflows when fetching workflow infos: ${JSON.stringify(\n unavailableWorkflows.map(w => ({\n id: w.id,\n name: w.name,\n status: w.metadata?.status,\n })),\n )}`,\n );\n\n return availableWorkflows;\n }\n\n public async fetchWorkflowInfos(args: {\n definitionIds?: string[];\n pagination?: Pagination;\n filter?: Filter;\n }): Promise<WorkflowInfo[]> {\n this.logger.info(`fetchWorkflowInfos() called: ${this.dataIndexUrl}`);\n const { definitionIds, pagination, filter } = args;\n\n const definitionIdsCondition =\n definitionIds !== undefined && definitionIds.length > 0\n ? `id: {in: ${JSON.stringify(definitionIds)}}`\n : undefined;\n\n const filterCondition = filter\n ? buildFilterCondition(\n await this.initInputProcessDefinitionArgs(),\n 'ProcessDefinition',\n filter,\n )\n : undefined;\n\n let whereClause: string | undefined;\n if (definitionIdsCondition && filterCondition) {\n whereClause = `and: [{${definitionIdsCondition}}, {${filterCondition?.clause}}]`;\n } else if (definitionIdsCondition || filterCondition) {\n whereClause = definitionIdsCondition ?? filterCondition?.clause;\n } else {\n whereClause = undefined;\n }\n\n const graphQlQuery = buildGraphQlQuery({\n type: 'ProcessDefinitions',\n queryBody:\n 'id, name, version, type, endpoint, serviceUrl, source, metadata',\n whereClause,\n pagination,\n filterCondition: filterCondition,\n });\n this.logger.debug(`GraphQL query: ${graphQlQuery}`);\n\n const paramVariables = buildQueryParamVariable(pagination, filterCondition);\n\n this.logger.debug(`GraphQL query params:`, paramVariables);\n\n const result = await this.client.query(graphQlQuery, paramVariables);\n this.logger.debug(\n `Get workflow definitions result: ${JSON.stringify(result)}`,\n );\n\n this.handleGraphqlClientError(\n 'Error fetching data index swf results',\n result,\n );\n\n return this.filterDeletedWorkflows(result.data.ProcessDefinitions);\n }\n\n public async fetchInstances(args: {\n definitionIds?: string[];\n pagination?: Pagination;\n filter?: Filter;\n }): Promise<ProcessInstance[]> {\n const { pagination, definitionIds, filter } = args;\n if (pagination) pagination.sortField ??= FETCH_PROCESS_INSTANCES_SORT_FIELD;\n\n const processIdNotNullCondition = 'processId: {isNull: false}';\n const definitionIdsCondition =\n definitionIds && definitionIds.length > 0\n ? `processId: {in: ${JSON.stringify(definitionIds)}}`\n : undefined;\n const type = 'ProcessInstance';\n const filterCondition = filter\n ? buildFilterCondition(\n await this.inspectInputArgument(type),\n type,\n filter,\n )\n : undefined;\n\n let whereClause = '';\n const conditions = [];\n\n if (processIdNotNullCondition) {\n conditions.push(`{${processIdNotNullCondition}}`);\n }\n\n if (definitionIdsCondition) {\n conditions.push(`{${definitionIdsCondition}}`);\n }\n\n if (filterCondition) {\n conditions.push(`{${filterCondition?.clause}}`);\n }\n\n if (conditions.length === 0) {\n whereClause = processIdNotNullCondition;\n } else if (conditions.length === 1) {\n whereClause = conditions[0].slice(1, -1); // Remove the outer braces\n } else if (conditions.length > 1) {\n whereClause = `and: [${conditions.join(', ')}]`;\n }\n\n const graphQlQuery = buildGraphQlQuery({\n type: 'ProcessInstances',\n queryBody:\n 'id, processName, processId, state, start, end, nodes { id }, variables, executionSummary, parentProcessInstance {id, processName, businessKey}',\n whereClause,\n pagination,\n filterCondition: filterCondition,\n });\n\n this.logger.debug(`GraphQL query: ${graphQlQuery}`);\n\n const paramVariables = buildQueryParamVariable(pagination, filterCondition);\n\n this.logger.debug(`GraphQL query params:`, paramVariables);\n\n const result = await this.client.query<{\n ProcessInstances: ProcessInstance[];\n }>(graphQlQuery, paramVariables);\n this.logger.debug(\n `Fetch process instances result: ${JSON.stringify(result)}`,\n );\n\n this.handleGraphqlClientError('Error when fetching instances', result);\n\n const processInstancesSrc = result.data ? result.data.ProcessInstances : [];\n\n const processInstances = await Promise.all(\n processInstancesSrc.map(async instance => {\n return await this.getWorkflowDefinitionFromInstance(instance);\n }),\n );\n return processInstances;\n }\n\n public async fetchDefinitionIdsFromInstances(args: {\n targetEntity: string;\n }): Promise<string[]> {\n const { targetEntity } = args;\n\n const processIdNotNullCondition = 'processId: {isNull: false}';\n\n const type = 'ProcessInstance';\n const targetEntityFilter: NestedFilter = {\n field: 'variables',\n nested: {\n operator: 'EQ',\n field: 'targetEntity',\n value: targetEntity,\n },\n };\n\n const filterCondition = buildFilterCondition(\n await this.inspectInputArgument(type),\n type,\n targetEntityFilter,\n );\n\n const whereClause = `and: [{${processIdNotNullCondition}}, {${filterCondition.clause}}]`;\n\n // Apply a limit to prevent memory exhaustion and network timeouts when entities\n // have thousands of process instances. Entities with more instances than this limit\n // may not see all their associated workflows.\n const pagination = {\n limit: 1000,\n offset: 0,\n };\n\n const graphQlQuery = buildGraphQlQuery({\n type: 'ProcessInstances',\n queryBody: 'processId',\n whereClause,\n pagination,\n filterCondition,\n });\n\n this.logger.debug(`GraphQL query: ${graphQlQuery}`);\n\n const paramVariables = buildQueryParamVariable(pagination, filterCondition);\n\n this.logger.debug(`GraphQL query params:`, paramVariables);\n\n const result = await this.client.query<{\n ProcessInstances: ProcessInstance[];\n }>(graphQlQuery, paramVariables);\n this.logger.debug(\n `Fetch definition ids from instances history result: ${JSON.stringify(result)}`,\n );\n\n this.handleGraphqlClientError(\n 'Error when fetching definition ids from instances history',\n result,\n );\n\n const processInstancesSrc = result.data ? result.data.ProcessInstances : [];\n const distinctProcessIds = [\n ...new Set(processInstancesSrc.map(instance => instance.processId)),\n ]; // graphql doesn't support distinct so we need to use a set to get the distinct process ids\n return distinctProcessIds;\n }\n\n private async getWorkflowDefinitionFromInstance(instance: ProcessInstance) {\n const workflowInfo = await this.fetchWorkflowInfo(instance.processId);\n if (!workflowInfo?.source) {\n throw new Error(\n `Workflow defintion is required to fetch instance ${instance.id}`,\n );\n }\n if (workflowInfo) {\n instance.description = workflowInfo.description;\n }\n return instance;\n }\n\n public async fetchWorkflowSource(\n definitionId: string,\n ): Promise<string | undefined> {\n const graphQlQuery = gql`\n query FindProcessInstanceQuery($definitionId: String!) {\n ProcessDefinitions(where: { id: { equal: $definitionId } }) {\n id\n source\n }\n }\n `;\n\n const result = await this.client.query(graphQlQuery, {\n definitionId,\n });\n\n this.logger.debug(\n `Fetch workflow source result: ${JSON.stringify(result)}`,\n );\n\n this.handleGraphqlClientError(\n 'Error when fetching workflow source',\n result,\n );\n\n const processDefinitions = result.data.ProcessDefinitions as WorkflowInfo[];\n\n if (processDefinitions.length === 0) {\n this.logger.info(`No workflow source found for ${definitionId}`);\n return undefined;\n }\n\n return processDefinitions[0].source;\n }\n\n public async fetchInstancesByDefinitionId(args: {\n definitionId: string;\n limit: number;\n offset: number;\n targetEntity?: string;\n }): Promise<ProcessInstance[]> {\n const targetEntityWhereCondition = args.targetEntity\n ? `, variables: {targetEntity: {equal: $targetEntity } }`\n : '';\n\n const graphQlQuery = gql`\n query FindProcessInstanceQuery($definitionId: String!, $limit: Int!, $offset: Int! ${args.targetEntity ? `, $targetEntity: String` : ''}) {\n ProcessInstances(\n where: {processId: {equal: $definitionId } ${targetEntityWhereCondition} },\n orderBy: {start:DESC},\n pagination: {limit: $limit, offset: $offset}\n ) { id, processName, state, start, end }\n }\n `;\n\n const result = await this.client.query(\n graphQlQuery,\n args.targetEntity\n ? {\n definitionId: args.definitionId,\n limit: args.limit,\n offset: args.offset,\n targetEntity: args.targetEntity,\n }\n : {\n definitionId: args.definitionId,\n limit: args.limit,\n offset: args.offset,\n },\n );\n\n this.logger.debug(\n `Fetch workflow instances result: ${JSON.stringify(result)}`,\n );\n\n this.handleGraphqlClientError(\n 'Error when fetching workflow instances',\n result,\n );\n\n return result.data.ProcessInstances;\n }\n\n public async fetchInstanceVariables(\n instanceId: string,\n ): Promise<object | undefined> {\n const graphQlQuery = gql`\n query FindProcessInstanceQuery($instanceId: String!) {\n ProcessInstances(where: { id: { equal: $instanceId } }) {\n variables\n }\n }\n `;\n\n const result = await this.client.query(graphQlQuery, {\n instanceId,\n });\n\n this.logger.debug(\n `Fetch process instance variables result: ${JSON.stringify(result)}`,\n );\n\n this.handleGraphqlClientError(\n 'Error when fetching process instance variables',\n result,\n );\n\n const processInstances = result.data.ProcessInstances as ProcessInstance[];\n\n if (processInstances.length === 0) {\n return undefined;\n }\n\n return parseWorkflowVariables(processInstances[0].variables as object);\n }\n\n public async fetchDefinitionIdByInstanceId(\n instanceId: string,\n ): Promise<string | undefined> {\n const graphQlQuery = gql`\n query FindProcessInstanceQuery($instanceId: String!) {\n ProcessInstances(where: { id: { equal: $instanceId } }) {\n processId\n }\n }\n `;\n\n const result = await this.client.query(graphQlQuery, {\n instanceId,\n });\n\n this.logger.debug(\n `Fetch process id from instance result: ${JSON.stringify(result)}`,\n );\n\n this.handleGraphqlClientError(\n 'Error when fetching process id from instance',\n result,\n );\n\n const processInstances = result.data.ProcessInstances as ProcessInstance[];\n\n if (processInstances.length === 0) {\n return undefined;\n }\n\n return processInstances[0].processId;\n }\n\n public async fetchInstance(\n instanceId: string,\n ): Promise<ProcessInstance | undefined> {\n const FindProcessInstanceQuery = gql`\n query FindProcessInstanceQuery($instanceId: String!) {\n ProcessInstances(where: { id: { equal: $instanceId } }) {\n id\n processName\n processId\n serviceUrl\n executionSummary\n state\n start\n end\n nodes {\n id\n nodeId\n definitionId\n type\n name\n enter\n exit\n errorMessage\n }\n variables\n parentProcessInstance {\n id\n processName\n businessKey\n }\n error {\n nodeDefinitionId\n nodeInstanceId\n message\n }\n }\n }\n `;\n\n const result = await this.client.query(FindProcessInstanceQuery, {\n instanceId,\n });\n\n this.logger.debug(\n `Fetch process instance result: ${JSON.stringify(result)}`,\n );\n\n this.handleGraphqlClientError(\n 'Error when fetching process instances',\n result,\n );\n\n const processInstances = result.data.ProcessInstances as ProcessInstance[];\n\n if (processInstances.length === 0) {\n return undefined;\n }\n\n const instance = this.removeNodes(processInstances[0]);\n\n const workflowInfo = await this.fetchWorkflowInfo(instance.processId);\n if (!workflowInfo?.source) {\n throw new Error(\n `Workflow definition is required to fetch instance ${instance.id}`,\n );\n }\n const workflowDefinitionSrc: WorkflowDefinition = fromWorkflowSource(\n workflowInfo.source,\n );\n if (workflowInfo) {\n instance.description = workflowDefinitionSrc.description;\n }\n return instance;\n }\n\n private handleGraphqlClientError(scenario: string, result: any) {\n if (!result?.error) {\n return;\n }\n\n this.logger.error(scenario, result);\n\n const networkError = result.error.networkError?.cause?.message;\n if (networkError) {\n const toThrow = new Error(`${result.error.message}. ${networkError}`);\n toThrow.name = 'Network Error';\n throw toThrow;\n }\n\n const graphQLErrors = result.error.graphQLErrors;\n if (\n result.data &&\n Array.isArray(graphQLErrors) &&\n graphQLErrors.length > 0\n ) {\n const graphQLError = graphQLErrors[0];\n if (\n graphQLError?.extensions?.classification === 'DataFetchingException'\n ) {\n // we have data (perhaps partial) and it is a data fetch error ==> log and ignore\n return;\n }\n }\n\n throw result.error;\n }\n\n private removeNodes(instance: ProcessInstance): ProcessInstance {\n const errorNodeId = instance.error?.nodeInstanceId;\n instance.nodes = instance.nodes.filter(node => {\n return !node.errorMessage || node.id === errorNodeId;\n });\n return instance;\n }\n}\n"],"names":["ErrorBuilder","Client","fetchExchange","gql","buildFilterCondition","buildGraphQlQuery","buildQueryParamVariable","FETCH_PROCESS_INSTANCES_SORT_FIELD","parseWorkflowVariables","fromWorkflowSource"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"pagination.cjs.js","sources":["../../src/types/pagination.ts"],"sourcesContent":["/*\n * Copyright 2024 The Backstage Authors\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 */\nimport { Request } from 'express-serve-static-core';\n\nimport { PaginationInfoDTO } from '@red-hat-developer-hub/backstage-plugin-orchestrator-common';\n\nexport interface Pagination {\n offset?: number;\n limit?: number;\n order?: string;\n sortField?: string;\n}\n\nexport function buildPagination(req: Request): Pagination {\n const pagination: Pagination = {\n limit: undefined,\n offset: undefined,\n order: undefined,\n sortField: undefined,\n };\n\n if (!req.body?.paginationInfo) {\n return pagination;\n }\n const { offset, pageSize, orderBy, orderDirection } = req.body\n .paginationInfo as PaginationInfoDTO;\n\n if (!isNaN(Number(offset))) {\n pagination.offset = Number(offset);\n }\n\n if (!isNaN(Number(pageSize))) {\n pagination.limit = Number(pageSize);\n }\n\n if (orderBy) {\n pagination.sortField = String(orderBy);\n }\n\n if (orderDirection) {\n pagination.order = String(orderDirection).toUpperCase();\n }\n return pagination;\n}\n\nexport function buildPaginationTmp(\n paginationInfo?: PaginationInfoDTO,\n): Pagination {\n const pagination: Pagination = {\n limit: undefined,\n offset: undefined,\n order: undefined,\n sortField: undefined,\n };\n\n if (!paginationInfo) {\n return pagination;\n }\n const { offset, pageSize, orderBy, orderDirection } = paginationInfo;\n\n if (!isNaN(Number(offset))) {\n pagination.offset = Number(offset);\n }\n\n if (!isNaN(Number(pageSize))) {\n pagination.limit = Number(pageSize);\n }\n\n if (orderBy) {\n pagination.sortField = String(orderBy);\n }\n\n if (orderDirection) {\n pagination.order = String(orderDirection).toUpperCase();\n }\n return pagination;\n}\n"],"names":[],"mappings":";;AA0BO,SAAS,gBAAgB,GAAA,EAA0B;AACxD,EAAA,MAAM,UAAA,GAAyB;AAAA,IAC7B,KAAA,EAAO,MAAA;AAAA,IACP,MAAA,EAAQ,MAAA;AAAA,IACR,KAAA,EAAO,MAAA;AAAA,IACP,SAAA,EAAW;AAAA,GACb;AAEA,EAAA,IAAI,CAAC,GAAA,CAAI,IAAA,EAAM,cAAA,EAAgB;AAC7B,IAAA,OAAO,UAAA;AAAA,EACT;AACA,EAAA,MAAM,EAAE,MAAA,EAAQ,QAAA,EAAU,SAAS,cAAA,EAAe,GAAI,IAAI,IAAA,CACvD,cAAA;AAEH,EAAA,IAAI,CAAC,KAAA,CAAM,MAAA,CAAO,MAAM,CAAC,CAAA,EAAG;AAC1B,IAAA,UAAA,CAAW,MAAA,GAAS,OAAO,MAAM,CAAA;AAAA,EACnC;AAEA,EAAA,IAAI,CAAC,KAAA,CAAM,MAAA,CAAO,QAAQ,CAAC,CAAA,EAAG;AAC5B,IAAA,UAAA,CAAW,KAAA,GAAQ,OAAO,QAAQ,CAAA;AAAA,EACpC;AAEA,EAAA,IAAI,OAAA,EAAS;AACX,IAAA,UAAA,CAAW,SAAA,GAAY,OAAO,OAAO,CAAA;AAAA,EACvC;AAEA,EAAA,IAAI,cAAA,EAAgB;AAClB,IAAA,UAAA,CAAW,KAAA,GAAQ,MAAA,CAAO,cAAc,CAAA,CAAE,WAAA,EAAY;AAAA,EACxD;AACA,EAAA,OAAO,UAAA;AACT;;;;"}
1
+ {"version":3,"file":"pagination.cjs.js","sources":["../../src/types/pagination.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 { Request } from 'express-serve-static-core';\n\nimport { PaginationInfoDTO } from '@red-hat-developer-hub/backstage-plugin-orchestrator-common';\n\nexport interface Pagination {\n offset?: number;\n limit?: number;\n order?: string;\n sortField?: string;\n}\n\nexport interface PaginationQueryVariable {\n offset?: number;\n limit?: number;\n}\n\nexport function buildPagination(req: Request): Pagination {\n const pagination: Pagination = {\n limit: undefined,\n offset: undefined,\n order: undefined,\n sortField: undefined,\n };\n\n if (!req.body?.paginationInfo) {\n return pagination;\n }\n const { offset, pageSize, orderBy, orderDirection } = req.body\n .paginationInfo as PaginationInfoDTO;\n\n if (!isNaN(Number(offset))) {\n pagination.offset = Number(offset);\n }\n\n if (!isNaN(Number(pageSize))) {\n pagination.limit = Number(pageSize);\n }\n\n if (orderBy) {\n pagination.sortField = String(orderBy);\n }\n\n if (orderDirection) {\n pagination.order = String(orderDirection).toUpperCase();\n }\n return pagination;\n}\n\nexport function buildPaginationTmp(\n paginationInfo?: PaginationInfoDTO,\n): Pagination {\n const pagination: Pagination = {\n limit: undefined,\n offset: undefined,\n order: undefined,\n sortField: undefined,\n };\n\n if (!paginationInfo) {\n return pagination;\n }\n const { offset, pageSize, orderBy, orderDirection } = paginationInfo;\n\n if (!isNaN(Number(offset))) {\n pagination.offset = Number(offset);\n }\n\n if (!isNaN(Number(pageSize))) {\n pagination.limit = Number(pageSize);\n }\n\n if (orderBy) {\n pagination.sortField = String(orderBy);\n }\n\n if (orderDirection) {\n pagination.order = String(orderDirection).toUpperCase();\n }\n return pagination;\n}\n"],"names":[],"mappings":";;AAgCO,SAAS,gBAAgB,GAAA,EAA0B;AACxD,EAAA,MAAM,UAAA,GAAyB;AAAA,IAC7B,KAAA,EAAO,MAAA;AAAA,IACP,MAAA,EAAQ,MAAA;AAAA,IACR,KAAA,EAAO,MAAA;AAAA,IACP,SAAA,EAAW;AAAA,GACb;AAEA,EAAA,IAAI,CAAC,GAAA,CAAI,IAAA,EAAM,cAAA,EAAgB;AAC7B,IAAA,OAAO,UAAA;AAAA,EACT;AACA,EAAA,MAAM,EAAE,MAAA,EAAQ,QAAA,EAAU,SAAS,cAAA,EAAe,GAAI,IAAI,IAAA,CACvD,cAAA;AAEH,EAAA,IAAI,CAAC,KAAA,CAAM,MAAA,CAAO,MAAM,CAAC,CAAA,EAAG;AAC1B,IAAA,UAAA,CAAW,MAAA,GAAS,OAAO,MAAM,CAAA;AAAA,EACnC;AAEA,EAAA,IAAI,CAAC,KAAA,CAAM,MAAA,CAAO,QAAQ,CAAC,CAAA,EAAG;AAC5B,IAAA,UAAA,CAAW,KAAA,GAAQ,OAAO,QAAQ,CAAA;AAAA,EACpC;AAEA,EAAA,IAAI,OAAA,EAAS;AACX,IAAA,UAAA,CAAW,SAAA,GAAY,OAAO,OAAO,CAAA;AAAA,EACvC;AAEA,EAAA,IAAI,cAAA,EAAgB;AAClB,IAAA,UAAA,CAAW,KAAA,GAAQ,MAAA,CAAO,cAAc,CAAA,CAAE,WAAA,EAAY;AAAA,EACxD;AACA,EAAA,OAAO,UAAA;AACT;;;;"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@red-hat-developer-hub/backstage-plugin-orchestrator-backend",
3
- "version": "8.7.1",
3
+ "version": "8.7.3",
4
4
  "license": "Apache-2.0",
5
5
  "main": "./dist/index.cjs.js",
6
6
  "types": "./dist/index.d.ts",
@@ -82,9 +82,9 @@
82
82
  "@backstage/plugin-permission-node": "^0.10.9",
83
83
  "@backstage/plugin-scaffolder-backend": "^3.1.2",
84
84
  "@backstage/plugin-scaffolder-node": "^0.12.4",
85
- "@red-hat-developer-hub/backstage-plugin-orchestrator-common": "^3.5.1",
86
- "@red-hat-developer-hub/backstage-plugin-orchestrator-node": "^1.1.1",
87
- "@urql/core": "^4.1.4",
85
+ "@red-hat-developer-hub/backstage-plugin-orchestrator-common": "^3.5.3",
86
+ "@red-hat-developer-hub/backstage-plugin-orchestrator-node": "^1.1.3",
87
+ "@urql/core": "^6.0.1",
88
88
  "ajv-formats": "^2.1.1",
89
89
  "cloudevents": "^8.0.0",
90
90
  "express": "^4.21.2",