@fsai-flow/workflow 0.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (113) hide show
  1. package/.eslintrc.json +33 -0
  2. package/README.md +11 -0
  3. package/dist/README.md +11 -0
  4. package/dist/package.json +42 -0
  5. package/dist/src/index.d.ts +21 -0
  6. package/dist/src/index.js +33 -0
  7. package/dist/src/index.js.map +1 -0
  8. package/dist/src/lib/Constants.d.ts +68 -0
  9. package/dist/src/lib/Constants.js +106 -0
  10. package/dist/src/lib/Constants.js.map +1 -0
  11. package/dist/src/lib/DeferredPromise.d.ts +6 -0
  12. package/dist/src/lib/DeferredPromise.js +11 -0
  13. package/dist/src/lib/DeferredPromise.js.map +1 -0
  14. package/dist/src/lib/Expression.d.ts +65 -0
  15. package/dist/src/lib/Expression.js +215 -0
  16. package/dist/src/lib/Expression.js.map +1 -0
  17. package/dist/src/lib/Interfaces.d.ts +1569 -0
  18. package/dist/src/lib/Interfaces.js +44 -0
  19. package/dist/src/lib/Interfaces.js.map +1 -0
  20. package/dist/src/lib/LoggerProxy.d.ts +9 -0
  21. package/dist/src/lib/LoggerProxy.js +40 -0
  22. package/dist/src/lib/LoggerProxy.js.map +1 -0
  23. package/dist/src/lib/MetadataUtils.d.ts +4 -0
  24. package/dist/src/lib/MetadataUtils.js +27 -0
  25. package/dist/src/lib/MetadataUtils.js.map +1 -0
  26. package/dist/src/lib/NodeErrors.d.ts +82 -0
  27. package/dist/src/lib/NodeErrors.js +289 -0
  28. package/dist/src/lib/NodeErrors.js.map +1 -0
  29. package/dist/src/lib/NodeHelpers.d.ts +198 -0
  30. package/dist/src/lib/NodeHelpers.js +1348 -0
  31. package/dist/src/lib/NodeHelpers.js.map +1 -0
  32. package/dist/src/lib/ObservableObject.d.ts +5 -0
  33. package/dist/src/lib/ObservableObject.js +61 -0
  34. package/dist/src/lib/ObservableObject.js.map +1 -0
  35. package/dist/src/lib/RoutingNode.d.ts +18 -0
  36. package/dist/src/lib/RoutingNode.js +508 -0
  37. package/dist/src/lib/RoutingNode.js.map +1 -0
  38. package/dist/src/lib/TelemetryHelpers.d.ts +3 -0
  39. package/dist/src/lib/TelemetryHelpers.js +69 -0
  40. package/dist/src/lib/TelemetryHelpers.js.map +1 -0
  41. package/dist/src/lib/TypeValidation.d.ts +21 -0
  42. package/dist/src/lib/TypeValidation.js +385 -0
  43. package/dist/src/lib/TypeValidation.js.map +1 -0
  44. package/dist/src/lib/VersionedNodeType.d.ts +9 -0
  45. package/dist/src/lib/VersionedNodeType.js +26 -0
  46. package/dist/src/lib/VersionedNodeType.js.map +1 -0
  47. package/dist/src/lib/Workflow.d.ts +248 -0
  48. package/dist/src/lib/Workflow.js +901 -0
  49. package/dist/src/lib/Workflow.js.map +1 -0
  50. package/dist/src/lib/WorkflowDataProxy.d.ts +87 -0
  51. package/dist/src/lib/WorkflowDataProxy.js +556 -0
  52. package/dist/src/lib/WorkflowDataProxy.js.map +1 -0
  53. package/dist/src/lib/WorkflowErrors.d.ts +9 -0
  54. package/dist/src/lib/WorkflowErrors.js +18 -0
  55. package/dist/src/lib/WorkflowErrors.js.map +1 -0
  56. package/dist/src/lib/WorkflowHooks.d.ts +11 -0
  57. package/dist/src/lib/WorkflowHooks.js +34 -0
  58. package/dist/src/lib/WorkflowHooks.js.map +1 -0
  59. package/dist/src/lib/errors/base/base.error.d.ts +30 -0
  60. package/dist/src/lib/errors/base/base.error.js +45 -0
  61. package/dist/src/lib/errors/base/base.error.js.map +1 -0
  62. package/dist/src/lib/errors/base/operational.error.d.ts +15 -0
  63. package/dist/src/lib/errors/base/operational.error.js +19 -0
  64. package/dist/src/lib/errors/base/operational.error.js.map +1 -0
  65. package/dist/src/lib/errors/error.types.d.ts +11 -0
  66. package/dist/src/lib/errors/error.types.js +3 -0
  67. package/dist/src/lib/errors/error.types.js.map +1 -0
  68. package/dist/src/lib/errors/index.d.ts +1 -0
  69. package/dist/src/lib/errors/index.js +6 -0
  70. package/dist/src/lib/errors/index.js.map +1 -0
  71. package/dist/src/lib/result.d.ts +19 -0
  72. package/dist/src/lib/result.js +36 -0
  73. package/dist/src/lib/result.js.map +1 -0
  74. package/dist/src/lib/utils.d.ts +50 -0
  75. package/dist/src/lib/utils.js +110 -0
  76. package/dist/src/lib/utils.js.map +1 -0
  77. package/eslint.config.js +19 -0
  78. package/jest.config.ts +10 -0
  79. package/package.json +40 -0
  80. package/project.json +19 -0
  81. package/src/index.ts +33 -0
  82. package/src/lib/Constants.ts +124 -0
  83. package/src/lib/DeferredPromise.ts +14 -0
  84. package/src/lib/Expression.ts +375 -0
  85. package/src/lib/Interfaces.ts +2229 -0
  86. package/src/lib/LoggerProxy.ts +43 -0
  87. package/src/lib/MetadataUtils.ts +34 -0
  88. package/src/lib/NodeErrors.ts +332 -0
  89. package/src/lib/NodeHelpers.ts +1666 -0
  90. package/src/lib/ObservableObject.ts +77 -0
  91. package/src/lib/RoutingNode.ts +862 -0
  92. package/src/lib/TelemetryHelpers.ts +86 -0
  93. package/src/lib/TypeValidation.ts +431 -0
  94. package/src/lib/VersionedNodeType.ts +30 -0
  95. package/src/lib/Workflow.ts +1266 -0
  96. package/src/lib/WorkflowDataProxy.ts +708 -0
  97. package/src/lib/WorkflowErrors.ts +18 -0
  98. package/src/lib/WorkflowHooks.ts +51 -0
  99. package/src/lib/errors/base/base.error.ts +68 -0
  100. package/src/lib/errors/base/operational.error.ts +21 -0
  101. package/src/lib/errors/error.types.ts +14 -0
  102. package/src/lib/errors/index.ts +1 -0
  103. package/src/lib/result.ts +34 -0
  104. package/src/lib/utils.ts +132 -0
  105. package/tests/Helpers.ts +667 -0
  106. package/tests/NodeHelpers.test.ts +3053 -0
  107. package/tests/ObservableObject.test.ts +171 -0
  108. package/tests/RoutingNode.test.ts +1680 -0
  109. package/tests/Workflow.test.ts +1284 -0
  110. package/tests/WorkflowDataProxy.test.ts +199 -0
  111. package/tsconfig.json +27 -0
  112. package/tsconfig.lib.json +11 -0
  113. package/tsconfig.spec.json +14 -0
@@ -0,0 +1,215 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Expression = void 0;
4
+ const tslib_1 = require("tslib");
5
+ // @ts-ignore
6
+ const tmpl = tslib_1.__importStar(require("riot-tmpl"));
7
+ const luxon_1 = require("luxon");
8
+ // eslint-disable-next-line import/no-cycle
9
+ const __1 = require("..");
10
+ // @ts-ignore
11
+ // Set it to use double curly brackets instead of single ones
12
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access, @typescript-eslint/no-unsafe-call
13
+ tmpl.brackets.set('{{ }}');
14
+ // Make sure that it does not always print an error when it could not resolve
15
+ // a variable
16
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access
17
+ tmpl.tmpl.errorHandler = () => { };
18
+ class Expression {
19
+ workflow;
20
+ constructor(workflow) {
21
+ this.workflow = workflow;
22
+ }
23
+ /**
24
+ * Converts an object to a string in a way to make it clear that
25
+ * the value comes from an object
26
+ *
27
+ * @param {object} value
28
+ * @returns {string}
29
+ * @memberof Workflow
30
+ */
31
+ convertObjectValueToString(value) {
32
+ const typeName = Array.isArray(value) ? 'Array' : 'Object';
33
+ return `[${typeName}: ${JSON.stringify(value)}]`;
34
+ }
35
+ /**
36
+ * Resolves the paramter value. If it is an expression it will execute it and
37
+ * return the result. For everything simply the supplied value will be returned.
38
+ *
39
+ * @param {NodeParameterValue} parameterValue
40
+ * @param {(IRunExecutionData | null)} runExecutionData
41
+ * @param {number} runIndex
42
+ * @param {number} itemIndex
43
+ * @param {string} activeNodeName
44
+ * @param {INodeExecutionData[]} connectionInputData
45
+ * @param {boolean} [returnObjectAsString=false]
46
+ * @returns {(NodeParameterValue | INodeParameters | NodeParameterValue[] | INodeParameters[])}
47
+ * @memberof Workflow
48
+ */
49
+ resolveSimpleParameterValue(parameterValue, siblingParameters, runExecutionData, runIndex, itemIndex, activeNodeName, connectionInputData, mode, additionalKeys, returnObjectAsString = false, selfData = {}) {
50
+ // Check if it is an expression
51
+ if (typeof parameterValue !== 'string' || parameterValue.charAt(0) !== '=') {
52
+ // Is no expression so return value
53
+ return parameterValue;
54
+ }
55
+ // Is an expression
56
+ // Remove the equal sign
57
+ // eslint-disable-next-line no-param-reassign
58
+ parameterValue = parameterValue.substr(1);
59
+ // Generate a data proxy which allows to query workflow data
60
+ const dataProxy = new __1.WorkflowDataProxy(this.workflow, runExecutionData, runIndex, itemIndex, activeNodeName, connectionInputData, siblingParameters, mode, additionalKeys, -1, selfData);
61
+ const data = dataProxy.getDataProxy();
62
+ // Support only a subset of process properties
63
+ // @ts-ignore
64
+ data.process = {
65
+ arch: process.arch,
66
+ env: process.env,
67
+ platform: process.platform,
68
+ pid: process.pid,
69
+ ppid: process.ppid,
70
+ release: process.release,
71
+ version: process.pid,
72
+ versions: process.versions,
73
+ };
74
+ // @ts-ignore
75
+ data.document = {};
76
+ // @ts-ignore
77
+ data.DateTime = luxon_1.DateTime;
78
+ data['Interval'] = luxon_1.Interval;
79
+ data['Duration'] = luxon_1.Duration;
80
+ // @ts-ignore
81
+ data.constructor = {};
82
+ // Execute the expression
83
+ try {
84
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-member-access, @typescript-eslint/no-unsafe-call
85
+ const returnValue = tmpl.tmpl(parameterValue, data);
86
+ if (typeof returnValue === 'function') {
87
+ throw new Error('Expression resolved to a function. Please add "()"');
88
+ }
89
+ else if (returnValue !== null && typeof returnValue === 'object') {
90
+ if (returnObjectAsString) {
91
+ return this.convertObjectValueToString(returnValue);
92
+ }
93
+ }
94
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-return
95
+ return returnValue;
96
+ }
97
+ catch (e) {
98
+ // eslint-disable-next-line @typescript-eslint/restrict-template-expressions, @typescript-eslint/no-unsafe-member-access
99
+ throw new Error(`Expression is not valid: ${e.message}`);
100
+ }
101
+ }
102
+ /**
103
+ * Resolves value of parameter. But does not work for workflow-data.
104
+ *
105
+ * @param {INode} node
106
+ * @param {(string | undefined)} parameterValue
107
+ * @param {string} [defaultValue]
108
+ * @returns {(string | undefined)}
109
+ * @memberof Workflow
110
+ */
111
+ getSimpleParameterValue(node, parameterValue, mode, additionalKeys, defaultValue) {
112
+ if (parameterValue === undefined) {
113
+ // Value is not set so return the default
114
+ return defaultValue;
115
+ }
116
+ // Get the value of the node (can be an expression)
117
+ const runIndex = 0;
118
+ const itemIndex = 0;
119
+ const connectionInputData = [];
120
+ const runData = {
121
+ resultData: {
122
+ runData: {},
123
+ },
124
+ };
125
+ return this.getParameterValue(parameterValue, runData, runIndex, itemIndex, node.name, connectionInputData, mode, additionalKeys);
126
+ }
127
+ /**
128
+ * Resolves value of complex parameter. But does not work for workflow-data.
129
+ *
130
+ * @param {INode} node
131
+ * @param {(NodeParameterValue | INodeParameters | NodeParameterValue[] | INodeParameters[])} parameterValue
132
+ * @param {(NodeParameterValue | INodeParameters | NodeParameterValue[] | INodeParameters[] | undefined)} [defaultValue]
133
+ * @returns {(NodeParameterValue | INodeParameters | NodeParameterValue[] | INodeParameters[] | undefined)}
134
+ * @memberof Workflow
135
+ */
136
+ getComplexParameterValue(node, parameterValue, mode, additionalKeys, defaultValue = undefined, selfData = {}) {
137
+ if (parameterValue === undefined) {
138
+ // Value is not set so return the default
139
+ return defaultValue;
140
+ }
141
+ // Get the value of the node (can be an expression)
142
+ const runIndex = 0;
143
+ const itemIndex = 0;
144
+ const connectionInputData = [];
145
+ const runData = {
146
+ resultData: {
147
+ runData: {},
148
+ },
149
+ };
150
+ // Resolve the "outer" main values
151
+ const returnData = this.getParameterValue(parameterValue, runData, runIndex, itemIndex, node.name, connectionInputData, mode, additionalKeys, false, selfData);
152
+ // Resolve the "inner" values
153
+ return this.getParameterValue(returnData, runData, runIndex, itemIndex, node.name, connectionInputData, mode, additionalKeys, false, selfData);
154
+ }
155
+ /**
156
+ * Returns the resolved node parameter value. If it is an expression it will execute it and
157
+ * return the result. If the value to resolve is an array or object it will do the same
158
+ * for all of the items and values.
159
+ *
160
+ * @param {(NodeParameterValue | INodeParameters | NodeParameterValue[] | INodeParameters[])} parameterValue
161
+ * @param {(IRunExecutionData | null)} runExecutionData
162
+ * @param {number} runIndex
163
+ * @param {number} itemIndex
164
+ * @param {string} activeNodeName
165
+ * @param {INodeExecutionData[]} connectionInputData
166
+ * @param {boolean} [returnObjectAsString=false]
167
+ * @returns {(NodeParameterValue | INodeParameters | NodeParameterValue[] | INodeParameters[])}
168
+ * @memberof Workflow
169
+ */
170
+ getParameterValue(parameterValue, runExecutionData, runIndex, itemIndex, activeNodeName, connectionInputData, mode, additionalKeys, returnObjectAsString = false, selfData = {}) {
171
+ // Helper function which returns true when the parameter is a complex one or array
172
+ const isComplexParameter = (value) => {
173
+ return typeof value === 'object';
174
+ };
175
+ // Helper function which resolves a parameter value depending on if it is simply or not
176
+ const resolveParameterValue = (value, siblingParameters) => {
177
+ if (isComplexParameter(value)) {
178
+ return this.getParameterValue(value, runExecutionData, runIndex, itemIndex, activeNodeName, connectionInputData, mode, additionalKeys, returnObjectAsString, selfData);
179
+ }
180
+ return this.resolveSimpleParameterValue(value, siblingParameters, runExecutionData, runIndex, itemIndex, activeNodeName, connectionInputData, mode, additionalKeys, returnObjectAsString, selfData);
181
+ };
182
+ // Check if it value is a simple one that we can get it resolved directly
183
+ if (!isComplexParameter(parameterValue)) {
184
+ return this.resolveSimpleParameterValue(parameterValue, {}, runExecutionData, runIndex, itemIndex, activeNodeName, connectionInputData, mode, additionalKeys, returnObjectAsString, selfData);
185
+ }
186
+ // The parameter value is complex so resolve depending on type
187
+ if (Array.isArray(parameterValue)) {
188
+ // Data is an array
189
+ const returnData = [];
190
+ // eslint-disable-next-line no-restricted-syntax
191
+ for (const item of parameterValue) {
192
+ returnData.push(resolveParameterValue(item, {}));
193
+ }
194
+ if (returnObjectAsString && typeof returnData === 'object') {
195
+ return this.convertObjectValueToString(returnData);
196
+ }
197
+ return returnData;
198
+ }
199
+ if (parameterValue === null || parameterValue === undefined) {
200
+ return parameterValue;
201
+ }
202
+ // Data is an object
203
+ const returnData = {};
204
+ // eslint-disable-next-line no-restricted-syntax
205
+ for (const key of Object.keys(parameterValue)) {
206
+ returnData[key] = resolveParameterValue(parameterValue[key], parameterValue);
207
+ }
208
+ if (returnObjectAsString && typeof returnData === 'object') {
209
+ return this.convertObjectValueToString(returnData);
210
+ }
211
+ return returnData;
212
+ }
213
+ }
214
+ exports.Expression = Expression;
215
+ //# sourceMappingURL=Expression.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Expression.js","sourceRoot":"","sources":["../../../src/lib/Expression.ts"],"names":[],"mappings":";;;;AAAA,aAAa;AACb,wDAAkC;AAClC,iCAAqD;AAErD,2CAA2C;AAC3C,0BAUY;AAEZ,aAAa;AAEb,6DAA6D;AAC7D,yGAAyG;AACzG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;AAE3B,6EAA6E;AAC7E,aAAa;AACb,sEAAsE;AACtE,IAAI,CAAC,IAAI,CAAC,YAAY,GAAG,GAAG,EAAE,GAAG,CAAC,CAAC;AAEnC,MAAa,UAAU;IACtB,QAAQ,CAAW;IAEnB,YAAY,QAAkB;QAC7B,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;IAC1B,CAAC;IAED;;;;;;;OAOG;IACH,0BAA0B,CAAC,KAAa;QACvC,MAAM,QAAQ,GAAG,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC;QAC3D,OAAO,IAAI,QAAQ,KAAK,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,GAAG,CAAC;IAClD,CAAC;IAED;;;;;;;;;;;;;OAaG;IACH,2BAA2B,CAC1B,cAAkC,EAClC,iBAAkC,EAClC,gBAA0C,EAC1C,QAAgB,EAChB,SAAiB,EACjB,cAAsB,EACtB,mBAAyC,EACzC,IAAyB,EACzB,cAAgD,EAChD,oBAAoB,GAAG,KAAK,EAC5B,QAAQ,GAAG,EAAE;QAEb,+BAA+B;QAC/B,IAAI,OAAO,cAAc,KAAK,QAAQ,IAAI,cAAc,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,GAAG,EAAE,CAAC;YAC5E,mCAAmC;YACnC,OAAO,cAAc,CAAC;QACvB,CAAC;QAED,mBAAmB;QAEnB,wBAAwB;QACxB,6CAA6C;QAC7C,cAAc,GAAG,cAAc,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;QAE1C,4DAA4D;QAC5D,MAAM,SAAS,GAAG,IAAI,qBAAiB,CACtC,IAAI,CAAC,QAAQ,EACb,gBAAgB,EAChB,QAAQ,EACR,SAAS,EACT,cAAc,EACd,mBAAmB,EACnB,iBAAiB,EACjB,IAAI,EACJ,cAAc,EACd,CAAC,CAAC,EACF,QAAQ,CACR,CAAC;QACF,MAAM,IAAI,GAAG,SAAS,CAAC,YAAY,EAAE,CAAC;QAEtC,8CAA8C;QAC9C,aAAa;QACb,IAAI,CAAC,OAAO,GAAG;YACd,IAAI,EAAE,OAAO,CAAC,IAAI;YAClB,GAAG,EAAE,OAAO,CAAC,GAAG;YAChB,QAAQ,EAAE,OAAO,CAAC,QAAQ;YAC1B,GAAG,EAAE,OAAO,CAAC,GAAG;YAChB,IAAI,EAAE,OAAO,CAAC,IAAI;YAClB,OAAO,EAAE,OAAO,CAAC,OAAO;YACxB,OAAO,EAAE,OAAO,CAAC,GAAG;YACpB,QAAQ,EAAE,OAAO,CAAC,QAAQ;SAC1B,CAAC;QAEF,aAAa;QACb,IAAI,CAAC,QAAQ,GAAG,EAAE,CAAC;QAEnB,aAAa;QACb,IAAI,CAAC,QAAQ,GAAG,gBAAQ,CAAC;QACzB,IAAI,CAAC,UAAU,CAAC,GAAG,gBAAQ,CAAC;QAC5B,IAAI,CAAC,UAAU,CAAC,GAAG,gBAAQ,CAAC;QAE5B,aAAa;QACb,IAAI,CAAC,WAAW,GAAG,EAAE,CAAC;QAEtB,yBAAyB;QACzB,IAAI,CAAC;YACJ,kJAAkJ;YAClJ,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE,IAAI,CAAC,CAAC;YACpD,IAAI,OAAO,WAAW,KAAK,UAAU,EAAE,CAAC;gBACvC,MAAM,IAAI,KAAK,CAAC,oDAAoD,CAAC,CAAC;YACvE,CAAC;iBAAM,IAAI,WAAW,KAAK,IAAI,IAAI,OAAO,WAAW,KAAK,QAAQ,EAAE,CAAC;gBACpE,IAAI,oBAAoB,EAAE,CAAC;oBAC1B,OAAO,IAAI,CAAC,0BAA0B,CAAC,WAAW,CAAC,CAAC;gBACrD,CAAC;YACF,CAAC;YACD,+DAA+D;YAC/D,OAAO,WAAW,CAAC;QACpB,CAAC;QAAC,OAAO,CAAM,EAAE,CAAC;YACjB,wHAAwH;YACxH,MAAM,IAAI,KAAK,CAAC,4BAA4B,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC;QAC1D,CAAC;IACF,CAAC;IAED;;;;;;;;OAQG;IACH,uBAAuB,CACtB,IAAW,EACX,cAA4C,EAC5C,IAAyB,EACzB,cAAgD,EAChD,YAAwC;QAExC,IAAI,cAAc,KAAK,SAAS,EAAE,CAAC;YAClC,yCAAyC;YACzC,OAAO,YAAY,CAAC;QACrB,CAAC;QAED,mDAAmD;QACnD,MAAM,QAAQ,GAAG,CAAC,CAAC;QACnB,MAAM,SAAS,GAAG,CAAC,CAAC;QACpB,MAAM,mBAAmB,GAAyB,EAAE,CAAC;QACrD,MAAM,OAAO,GAAsB;YAClC,UAAU,EAAE;gBACX,OAAO,EAAE,EAAE;aACX;SACD,CAAC;QAEF,OAAO,IAAI,CAAC,iBAAiB,CAC5B,cAAc,EACd,OAAO,EACP,QAAQ,EACR,SAAS,EACT,IAAI,CAAC,IAAI,EACT,mBAAmB,EACnB,IAAI,EACJ,cAAc,CAC2B,CAAC;IAC5C,CAAC;IAED;;;;;;;;OAQG;IACH,wBAAwB,CACvB,IAAW,EACX,cAA+F,EAC/F,IAAyB,EACzB,cAAgD,EAChD,eAKe,SAAS,EACxB,QAAQ,GAAG,EAAE;QAEb,IAAI,cAAc,KAAK,SAAS,EAAE,CAAC;YAClC,yCAAyC;YACzC,OAAO,YAAY,CAAC;QACrB,CAAC;QAED,mDAAmD;QACnD,MAAM,QAAQ,GAAG,CAAC,CAAC;QACnB,MAAM,SAAS,GAAG,CAAC,CAAC;QACpB,MAAM,mBAAmB,GAAyB,EAAE,CAAC;QACrD,MAAM,OAAO,GAAsB;YAClC,UAAU,EAAE;gBACX,OAAO,EAAE,EAAE;aACX;SACD,CAAC;QAEF,kCAAkC;QAClC,MAAM,UAAU,GAAG,IAAI,CAAC,iBAAiB,CACxC,cAAc,EACd,OAAO,EACP,QAAQ,EACR,SAAS,EACT,IAAI,CAAC,IAAI,EACT,mBAAmB,EACnB,IAAI,EACJ,cAAc,EACd,KAAK,EACL,QAAQ,CACR,CAAC;QAEF,6BAA6B;QAC7B,OAAO,IAAI,CAAC,iBAAiB,CAC5B,UAAU,EACV,OAAO,EACP,QAAQ,EACR,SAAS,EACT,IAAI,CAAC,IAAI,EACT,mBAAmB,EACnB,IAAI,EACJ,cAAc,EACd,KAAK,EACL,QAAQ,CACR,CAAC;IACH,CAAC;IAED;;;;;;;;;;;;;;OAcG;IACH,iBAAiB,CAChB,cAA+F,EAC/F,gBAA0C,EAC1C,QAAgB,EAChB,SAAiB,EACjB,cAAsB,EACtB,mBAAyC,EACzC,IAAyB,EACzB,cAAgD,EAChD,oBAAoB,GAAG,KAAK,EAC5B,QAAQ,GAAG,EAAE;QAEb,kFAAkF;QAClF,MAAM,kBAAkB,GAAG,CAC1B,KAAsF,EACrF,EAAE;YACH,OAAO,OAAO,KAAK,KAAK,QAAQ,CAAC;QAClC,CAAC,CAAC;QAEF,uFAAuF;QACvF,MAAM,qBAAqB,GAAG,CAC7B,KAAsF,EACtF,iBAAkC,EACjC,EAAE;YACH,IAAI,kBAAkB,CAAC,KAAK,CAAC,EAAE,CAAC;gBAC/B,OAAO,IAAI,CAAC,iBAAiB,CAC5B,KAAK,EACL,gBAAgB,EAChB,QAAQ,EACR,SAAS,EACT,cAAc,EACd,mBAAmB,EACnB,IAAI,EACJ,cAAc,EACd,oBAAoB,EACpB,QAAQ,CACR,CAAC;YACH,CAAC;YACD,OAAO,IAAI,CAAC,2BAA2B,CACtC,KAA2B,EAC3B,iBAAiB,EACjB,gBAAgB,EAChB,QAAQ,EACR,SAAS,EACT,cAAc,EACd,mBAAmB,EACnB,IAAI,EACJ,cAAc,EACd,oBAAoB,EACpB,QAAQ,CACR,CAAC;QACH,CAAC,CAAC;QAEF,yEAAyE;QACzE,IAAI,CAAC,kBAAkB,CAAC,cAAc,CAAC,EAAE,CAAC;YACzC,OAAO,IAAI,CAAC,2BAA2B,CACtC,cAAoC,EACpC,EAAE,EACF,gBAAgB,EAChB,QAAQ,EACR,SAAS,EACT,cAAc,EACd,mBAAmB,EACnB,IAAI,EACJ,cAAc,EACd,oBAAoB,EACpB,QAAQ,CACR,CAAC;QACH,CAAC;QAED,8DAA8D;QAE9D,IAAI,KAAK,CAAC,OAAO,CAAC,cAAc,CAAC,EAAE,CAAC;YACnC,mBAAmB;YACnB,MAAM,UAAU,GAAG,EAAE,CAAC;YACtB,gDAAgD;YAChD,KAAK,MAAM,IAAI,IAAI,cAAc,EAAE,CAAC;gBACnC,UAAU,CAAC,IAAI,CAAC,qBAAqB,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,CAAC;YAClD,CAAC;YAED,IAAI,oBAAoB,IAAI,OAAO,UAAU,KAAK,QAAQ,EAAE,CAAC;gBAC5D,OAAO,IAAI,CAAC,0BAA0B,CAAC,UAAU,CAAC,CAAC;YACpD,CAAC;YAED,OAAO,UAAsD,CAAC;QAC/D,CAAC;QACD,IAAI,cAAc,KAAK,IAAI,IAAI,cAAc,KAAK,SAAS,EAAE,CAAC;YAC7D,OAAO,cAAc,CAAC;QACvB,CAAC;QACD,oBAAoB;QACpB,MAAM,UAAU,GAAoB,EAAE,CAAC;QACvC,gDAAgD;QAChD,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,cAAc,CAAC,EAAE,CAAC;YAC/C,UAAU,CAAC,GAAG,CAAC,GAAG,qBAAqB,CACrC,cAAkC,CAAC,GAAG,CAAC,EACxC,cAAiC,CACjC,CAAC;QACH,CAAC;QAED,IAAI,oBAAoB,IAAI,OAAO,UAAU,KAAK,QAAQ,EAAE,CAAC;YAC5D,OAAO,IAAI,CAAC,0BAA0B,CAAC,UAAU,CAAC,CAAC;QACpD,CAAC;QACD,OAAO,UAAU,CAAC;IACnB,CAAC;CACD;AA1VD,gCA0VC"}