@adaas/a-concept 0.1.18 → 0.1.19

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 (52) hide show
  1. package/dist/index.d.ts +2 -0
  2. package/dist/index.js +5 -2
  3. package/dist/index.js.map +1 -1
  4. package/dist/src/global/A-Abstraction/A-Abstraction-Extend.decorator.js +11 -4
  5. package/dist/src/global/A-Abstraction/A-Abstraction-Extend.decorator.js.map +1 -1
  6. package/dist/src/global/A-Component/A-Component.meta.js +2 -1
  7. package/dist/src/global/A-Component/A-Component.meta.js.map +1 -1
  8. package/dist/src/global/A-Component/A-Component.types.d.ts +2 -11
  9. package/dist/src/global/A-Concept/A-Concept.types.d.ts +4 -21
  10. package/dist/src/global/A-Container/A-Container.meta.js +4 -2
  11. package/dist/src/global/A-Container/A-Container.meta.js.map +1 -1
  12. package/dist/src/global/A-Container/A-Container.types.d.ts +2 -11
  13. package/dist/src/global/A-Feature/A-Feature-Define.decorator.js +1 -1
  14. package/dist/src/global/A-Feature/A-Feature-Define.decorator.js.map +1 -1
  15. package/dist/src/global/A-Feature/A-Feature-Extend.decorator.js +14 -5
  16. package/dist/src/global/A-Feature/A-Feature-Extend.decorator.js.map +1 -1
  17. package/dist/src/global/A-Feature/A-Feature.class.d.ts +2 -1
  18. package/dist/src/global/A-Feature/A-Feature.class.js +7 -3
  19. package/dist/src/global/A-Feature/A-Feature.class.js.map +1 -1
  20. package/dist/src/global/A-Feature/A-Feature.types.d.ts +69 -27
  21. package/dist/src/global/A-Stage/A-Stage.class.d.ts +37 -28
  22. package/dist/src/global/A-Stage/A-Stage.class.js +62 -98
  23. package/dist/src/global/A-Stage/A-Stage.class.js.map +1 -1
  24. package/dist/src/global/A-Stage/A-Stage.types.d.ts +30 -3
  25. package/dist/src/global/A-Stage/A-Stage.types.js.map +1 -1
  26. package/dist/src/global/A-StepManager/A-StepManager.class.d.ts +20 -0
  27. package/dist/src/{helpers/A_StepsManager.class.js → global/A-StepManager/A-StepManager.class.js} +38 -64
  28. package/dist/src/global/A-StepManager/A-StepManager.class.js.map +1 -0
  29. package/dist/src/global/A-StepManager/A-StepManager.error.d.ts +4 -0
  30. package/dist/src/global/A-StepManager/A-StepManager.error.js +9 -0
  31. package/dist/src/global/A-StepManager/A-StepManager.error.js.map +1 -0
  32. package/index.ts +2 -1
  33. package/package.json +3 -3
  34. package/src/global/A-Abstraction/A-Abstraction-Extend.decorator.ts +18 -6
  35. package/src/global/A-Component/A-Component.meta.ts +2 -1
  36. package/src/global/A-Component/A-Component.types.ts +2 -11
  37. package/src/global/A-Concept/A-Concept.types.ts +4 -21
  38. package/src/global/A-Container/A-Container.meta.ts +4 -2
  39. package/src/global/A-Container/A-Container.types.ts +2 -11
  40. package/src/global/A-Feature/A-Feature-Define.decorator.ts +1 -0
  41. package/src/global/A-Feature/A-Feature-Extend.decorator.ts +21 -7
  42. package/src/global/A-Feature/A-Feature.class.ts +8 -1
  43. package/src/global/A-Feature/A-Feature.types.ts +80 -33
  44. package/src/global/A-Stage/A-Stage.class.ts +71 -143
  45. package/src/global/A-Stage/A-Stage.types.ts +34 -3
  46. package/src/{helpers/A_StepsManager.class.ts → global/A-StepManager/A-StepManager.class.ts} +53 -87
  47. package/src/global/A-StepManager/A-StepManager.error.ts +10 -0
  48. package/tests/A-Abstraction.test.ts +273 -255
  49. package/tests/A-Feature.test.ts +270 -271
  50. package/tests/A-StepManager.test.ts +346 -0
  51. package/dist/src/helpers/A_StepsManager.class.d.ts +0 -35
  52. package/dist/src/helpers/A_StepsManager.class.js.map +0 -1
@@ -0,0 +1,346 @@
1
+ import { A_Component } from "@adaas/a-concept/global/A-Component/A-Component.class";
2
+ import { A_StepsManager } from "@adaas/a-concept/global/A-StepManager/A-StepManager.class";
3
+
4
+ describe('A-StepManager tests', () => {
5
+ it('Should Allow to create a step manager', async () => {
6
+ const sm = new A_StepsManager([]);
7
+
8
+ expect(sm).toBeInstanceOf(A_StepsManager);
9
+ });
10
+ it('Should not change original sort if no other rules provided', async () => {
11
+ class ComponentA extends A_Component {
12
+ async step1() { }
13
+ async step2() { }
14
+ async step3() { }
15
+ async step4() { }
16
+ async step5() { }
17
+ async step6() { }
18
+ }
19
+
20
+ const sm = new A_StepsManager([
21
+ {
22
+ name: 'step1',
23
+ component: ComponentA,
24
+ handler: 'step1',
25
+ },
26
+ {
27
+ name: 'step2',
28
+ component: ComponentA,
29
+ handler: 'step2',
30
+ },
31
+ {
32
+ name: 'step3',
33
+ component: ComponentA,
34
+ handler: 'step3',
35
+ },
36
+ {
37
+ name: 'step4',
38
+ component: ComponentA,
39
+ handler: 'step4',
40
+ },
41
+ {
42
+ name: 'step5',
43
+ component: ComponentA,
44
+ handler: 'step5',
45
+ },
46
+ {
47
+ name: 'step6',
48
+ component: ComponentA,
49
+ handler: 'step6',
50
+ },
51
+ ]);
52
+
53
+
54
+ const result = sm.toSortedArray();
55
+
56
+ expect(result).toEqual([
57
+ 'ComponentA.step1',
58
+ 'ComponentA.step2',
59
+ 'ComponentA.step3',
60
+ 'ComponentA.step4',
61
+ 'ComponentA.step5',
62
+ 'ComponentA.step6'
63
+ ]);
64
+ });
65
+
66
+ it('Should change order depending on the before and after dependencies', async () => {
67
+ class ComponentA extends A_Component {
68
+ async step1() { }
69
+ async step2() { }
70
+ async step3() { }
71
+ async step4() { }
72
+ async step5() { }
73
+ async step6() { }
74
+ }
75
+
76
+ const sm = new A_StepsManager([
77
+ {
78
+ name: 'step1',
79
+ component: ComponentA,
80
+ handler: 'step1',
81
+ },
82
+ {
83
+ name: 'step2',
84
+ component: ComponentA,
85
+ handler: 'step2',
86
+ },
87
+ {
88
+ name: 'step3',
89
+ component: ComponentA,
90
+ handler: 'step3',
91
+ },
92
+ {
93
+ name: 'step4',
94
+ component: ComponentA,
95
+ handler: 'step4',
96
+ },
97
+ {
98
+ name: 'step5',
99
+ component: ComponentA,
100
+ handler: 'step5',
101
+ before: ['step2'],
102
+ after: ['step6']
103
+ },
104
+ {
105
+ name: 'step6',
106
+ component: ComponentA,
107
+ handler: 'step6',
108
+ before: ['ComponentA.step2']
109
+ },
110
+ ]);
111
+
112
+
113
+ const result = sm.toSortedArray();
114
+
115
+ expect(result).toEqual([
116
+ 'ComponentA.step1',
117
+ 'ComponentA.step6',
118
+ 'ComponentA.step5',
119
+ 'ComponentA.step2',
120
+ 'ComponentA.step3',
121
+ 'ComponentA.step4'
122
+ ]);
123
+ });
124
+
125
+ it('Should execute first step with * regexp', async () => {
126
+ class ComponentA extends A_Component {
127
+ async step1() { }
128
+ async step2() { }
129
+ async step3() { }
130
+ async step4() { }
131
+ async step5() { }
132
+ async step6() { }
133
+ }
134
+
135
+ const sm = new A_StepsManager([
136
+ {
137
+ name: 'step1',
138
+ component: ComponentA,
139
+ handler: 'step1',
140
+ },
141
+ {
142
+ name: 'step2',
143
+ component: ComponentA,
144
+ handler: 'step2',
145
+ },
146
+ {
147
+ name: 'step3',
148
+ component: ComponentA,
149
+ handler: 'step3',
150
+ },
151
+ {
152
+ name: 'step4',
153
+ component: ComponentA,
154
+ handler: 'step4',
155
+ },
156
+ {
157
+ name: 'step5',
158
+ component: ComponentA,
159
+ handler: 'step5',
160
+ },
161
+ {
162
+ name: 'step6',
163
+ component: ComponentA,
164
+ handler: 'step6',
165
+ before: [new RegExp('.*').source],
166
+ },
167
+ ]);
168
+
169
+
170
+ const result = sm.toSortedArray();
171
+
172
+ expect(result).toEqual([
173
+ 'ComponentA.step6',
174
+ 'ComponentA.step1',
175
+ 'ComponentA.step2',
176
+ 'ComponentA.step3',
177
+ 'ComponentA.step4',
178
+ 'ComponentA.step5'
179
+ ]);
180
+ });
181
+ it('Should execute with multiple * regexps', async () => {
182
+ class ComponentA extends A_Component {
183
+ async step1() { }
184
+ async step2() { }
185
+ async step3() { }
186
+ async step4() { }
187
+ async step5() { }
188
+ async step6() { }
189
+ }
190
+
191
+ const sm = new A_StepsManager([
192
+ {
193
+ name: 'step1',
194
+ component: ComponentA,
195
+ handler: 'step1',
196
+ },
197
+ {
198
+ name: 'step2',
199
+ component: ComponentA,
200
+ handler: 'step2',
201
+ },
202
+ {
203
+ name: 'step3',
204
+ component: ComponentA,
205
+ handler: 'step3',
206
+ },
207
+ {
208
+ name: 'step4',
209
+ component: ComponentA,
210
+ handler: 'step4',
211
+ },
212
+ {
213
+ name: 'step5',
214
+ component: ComponentA,
215
+ handler: 'step5',
216
+ before: [new RegExp('.*').source],
217
+ },
218
+ {
219
+ name: 'step6',
220
+ component: ComponentA,
221
+ handler: 'step6',
222
+ before: [new RegExp('.*').source],
223
+ },
224
+ ]);
225
+
226
+
227
+ const result = sm.toSortedArray();
228
+
229
+ expect(result).toEqual([
230
+ 'ComponentA.step6',
231
+ 'ComponentA.step5',
232
+ 'ComponentA.step1',
233
+ 'ComponentA.step2',
234
+ 'ComponentA.step3',
235
+ 'ComponentA.step4'
236
+ ]);
237
+ });
238
+
239
+ it('Should regexp for correct ordering ', async () => {
240
+ class ComponentA extends A_Component {
241
+ async step1() { }
242
+ async step2() { }
243
+ async step3() { }
244
+ async step4() { }
245
+ async step5() { }
246
+ async test() { }
247
+ }
248
+
249
+ const sm = new A_StepsManager([
250
+ {
251
+ name: 'step1',
252
+ component: ComponentA,
253
+ handler: 'step1',
254
+ },
255
+ {
256
+ name: 'step2',
257
+ component: ComponentA,
258
+ handler: 'step2',
259
+ },
260
+ {
261
+ name: 'step3',
262
+ component: ComponentA,
263
+ handler: 'step3',
264
+ },
265
+ {
266
+ name: 'step4',
267
+ component: ComponentA,
268
+ handler: 'step4',
269
+ },
270
+ {
271
+ name: 'step5',
272
+ component: ComponentA,
273
+ handler: 'step5',
274
+ },
275
+ {
276
+ name: 'test',
277
+ component: ComponentA,
278
+ handler: 'test',
279
+ before: [new RegExp('step(4|5)').source],
280
+ after: [new RegExp('step(1|2)').source],
281
+ },
282
+ ]);
283
+
284
+
285
+ const result = sm.toSortedArray();
286
+
287
+ expect(result).toEqual([
288
+ "ComponentA.step1",
289
+ "ComponentA.step2",
290
+ "ComponentA.step3",
291
+ "ComponentA.test",
292
+ "ComponentA.step4",
293
+ "ComponentA.step5",
294
+ ]);
295
+ });
296
+
297
+ it('Should do proper ordering across multiple components ', async () => {
298
+ class ComponentA extends A_Component {
299
+ async initialize() { }
300
+ async inject() { }
301
+
302
+ }
303
+
304
+ class ComponentB extends A_Component {
305
+ async readFromEnv() { }
306
+ async readFromFile() { }
307
+ }
308
+
309
+ const sm = new A_StepsManager([
310
+ {
311
+ name: 'readFromEnv',
312
+ component: ComponentB,
313
+ handler: 'readFromEnv',
314
+ },
315
+ {
316
+ name: 'readFromFile',
317
+ component: ComponentB,
318
+ handler: 'readFromFile',
319
+ },
320
+ {
321
+ name: 'initialize',
322
+ component: ComponentA,
323
+ handler: 'initialize',
324
+ },
325
+ {
326
+ name: 'inject',
327
+ component: ComponentA,
328
+ handler: 'inject',
329
+ before: [/ComponentB\.read.+/.source],
330
+ after: ['ComponentA.initialize']
331
+ },
332
+ ]);
333
+
334
+
335
+ const result = sm.toSortedArray();
336
+
337
+ expect(result).toEqual([
338
+ "ComponentA.initialize",
339
+ "ComponentA.inject",
340
+ "ComponentB.readFromEnv",
341
+ "ComponentB.readFromFile",
342
+ ]);
343
+ });
344
+
345
+
346
+ });
@@ -1,35 +0,0 @@
1
- import { A_Feature } from "../global/A-Feature/A-Feature.class";
2
- import { A_TYPES__FeatureDefineDecoratorTemplateItem } from "../global/A-Feature/A-Feature.types";
3
- import { A_Stage } from "../global/A-Stage/A-Stage.class";
4
- import { A_TYPES__A_StageStep } from "../global/A-Stage/A-Stage.types";
5
- export declare class A_StepsManager {
6
- entities: A_TYPES__A_StageStep[];
7
- graph: Map<string, Set<string>>;
8
- visited: Set<string>;
9
- tempMark: Set<string>;
10
- sortedEntities: string[];
11
- constructor(entities: Array<A_TYPES__FeatureDefineDecoratorTemplateItem>);
12
- private prepareSteps;
13
- private ID;
14
- private buildGraph;
15
- private matchEntities;
16
- private visit;
17
- toStages(feature: A_Feature): Array<A_Stage>;
18
- }
19
- export declare class A_TmpStage {
20
- readonly name: string;
21
- private readonly _steps;
22
- constructor(_steps?: A_TYPES__A_StageStep[]);
23
- get before(): string[];
24
- get after(): string[];
25
- get steps(): A_TYPES__A_StageStep[];
26
- get asyncSteps(): A_TYPES__A_StageStep[];
27
- get syncSteps(): A_TYPES__A_StageStep[];
28
- /**
29
- * Adds a step to the stage
30
- *
31
- * @param step
32
- * @returns
33
- */
34
- add(step: A_TYPES__A_StageStep): this;
35
- }
@@ -1 +0,0 @@
1
- {"version":3,"file":"A_StepsManager.class.js","sourceRoot":"","sources":["../../../src/helpers/A_StepsManager.class.ts"],"names":[],"mappings":";;;AAAA,mEAA0D;AAG1D,mEAA0D;AAG1D,MAAa,cAAc;IASvB,YAAY,QAA4D;QACpE,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC;QAE5C,IAAI,CAAC,KAAK,GAAG,IAAI,GAAG,EAAE,CAAC;QACvB,IAAI,CAAC,OAAO,GAAG,IAAI,GAAG,EAAE,CAAC;QACzB,IAAI,CAAC,QAAQ,GAAG,IAAI,GAAG,EAAE,CAAC;QAC1B,IAAI,CAAC,cAAc,GAAG,EAAE,CAAC;IAE7B,CAAC;IAEO,YAAY,CAChB,QAA4D;QAE5D,OAAO,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE;YACvB,uCACO,IAAI,KAEP,QAAQ,EAAE,IAAI,CAAC,QAAQ,IAAI,MAAM,EACjC,MAAM,EAAE,IAAI,CAAC,MAAM,IAAI,EAAE,EACzB,KAAK,EAAE,IAAI,CAAC,KAAK,IAAI,EAAE,IACzB;QACN,CAAC,CAAC,CAAC;IACP,CAAC;IAEO,EAAE,CAAC,IAA0B;QACjC,OAAO,GAAG,OAAO,IAAI,CAAC,SAAS,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;IAC1G,CAAC;IAEO,UAAU;QACd,yBAAyB;QACzB,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,MAAM,CAAC,EAAE,IAAI,GAAG,EAAE,CAAC,CAAC,CAAC;QAE5E,mDAAmD;QACnD,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE;YAC3B,MAAM,QAAQ,GAAG,IAAI,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC;YACjC,MAAM,EAAE,MAAM,GAAG,EAAE,EAAE,KAAK,GAAG,EAAE,EAAE,GAAG,MAAM,CAAC;YAE3C,sCAAsC;YACtC,yEAAyE;YACzE,+DAA+D;YAC/D,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE;gBACjB,MAAM,OAAO,GAAG,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC;gBACxC,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE;oBACrB,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC;wBAAE,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,EAAE,IAAI,GAAG,EAAE,CAAC,CAAC;oBAC/D,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAE,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,2BAA2B;gBACtE,CAAC,CAAC,CAAC;YACP,CAAC,CAAC,CAAC;YAEH,uCAAuC;YACvC,yEAAyE;YACzE,+DAA+D;YAC/D,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE;gBAChB,MAAM,OAAO,GAAG,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC;gBAExC,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE;oBACrB,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC;wBAAE,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,EAAE,IAAI,GAAG,EAAE,CAAC,CAAC;oBACnE,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAE,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,2BAA2B;gBACtE,CAAC,CAAC,CAAC;YACP,CAAC,CAAC,CAAC;QACP,CAAC,CAAC,CAAC;IACP,CAAC;IAED,kCAAkC;IAC1B,aAAa,CAAC,OAAe;QACjC,MAAM,KAAK,GAAG,IAAI,MAAM,CAAC,IAAI,OAAO,GAAG,CAAC,CAAC;QACzC,OAAO,IAAI,CAAC,QAAQ;aACf,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC;aAC7C,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC;IACxC,CAAC;IAED,wCAAwC;IAChC,KAAK,CAAC,IAAY;QACtB,IAAI,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC;YAAE,MAAM,IAAI,uBAAO,CAAC,8BAA8B,CAAC,CAAC;QAE/E,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;YAC1B,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;YACxB,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC;YACvE,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;YAC3B,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;YACvB,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACnC,CAAC;IACL,CAAC;IAED,0CAA0C;IAC1C,QAAQ,CAAC,OAAkB;QACvB,IAAI,CAAC,UAAU,EAAE,CAAC;QAElB,yBAAyB;QACzB,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE;YAC3B,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC;gBAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC;QACxE,CAAC,CAAC,CAAC;QAEH,MAAM,MAAM,GAAiB,EAAE,CAAC;QAEhC,0CAA0C;QAC1C,IAAI,CAAC,cAAc;aACd,GAAG,CAAC,EAAE,CAAC,EAAE;YACN,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,MAAM,CAAC,KAAK,EAAE,CAAE,CAAC;YAEnE,IAAI,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE;gBAC5B,OAAO,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;uBACtD,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC;YACrE,CAAC,CAAC,CAAC;YAGH,IAAI,CAAC,KAAK,EAAE,CAAC;gBACT,KAAK,GAAG,IAAI,UAAU,EAAE,CAAC;gBACzB,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACvB,CAAC;YAED,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QACpB,CAAC,CAAC,CAAC;QAEP,OAAO,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,IAAI,uBAAO,CAAC,OAAO,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC;IAClE,CAAC;CACJ;AA5HD,wCA4HC;AAMD,MAAa,UAAU;IAMnB,YACI,SAAiC,EAAE;QAL9B,SAAI,GAAW,YAAY,CAAC;QAOjC,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;IACzB,CAAC;IAGD,IAAI,MAAM;QACN,OAAO,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,IAAI,EAAE,EAAE,CAAC,CAAC;YACtC,GAAG,GAAG;YACN,GAAG,IAAI,CAAC,MAAM;SACjB,CAAC,EAAE,EAAc,CAAC,CAAC;IACxB,CAAC;IAED,IAAI,KAAK;QACL,OAAO,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,IAAI,EAAE,EAAE,CAAC,CAAC;YACtC,GAAG,GAAG;YACN,GAAG,IAAI,CAAC,KAAK;SAChB,CAAC,EAAE,EAAc,CAAC,CAAC;IACxB,CAAC;IAED,IAAI,KAAK;QACL,OAAO,IAAI,CAAC,MAAM,CAAC;IACvB,CAAC;IAGD,IAAI,UAAU;QACV,OAAO,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,QAAQ,KAAK,OAAO,CAAC,CAAC;IACjE,CAAC;IAED,IAAI,SAAS;QACT,OAAO,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,QAAQ,KAAK,MAAM,CAAC,CAAC;IAChE,CAAC;IAGD;;;;;OAKG;IACH,GAAG,CACC,IAA0B;QAE1B,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAEvB,OAAO,IAAI,CAAC;IAChB,CAAC;CACJ;AAtDD,gCAsDC"}