@autobe/ui 0.30.4-dev.20260324 → 0.30.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (53) hide show
  1. package/LICENSE +661 -661
  2. package/lib/components/AutoBeChatMain.js +5 -5
  3. package/lib/components/AutoBeConfigModal.js +9 -9
  4. package/package.json +2 -2
  5. package/src/components/AutoBeAssistantMessageMovie.tsx +22 -22
  6. package/src/components/AutoBeChatMain.tsx +394 -394
  7. package/src/components/AutoBeChatSidebar.tsx +414 -414
  8. package/src/components/AutoBeConfigButton.tsx +83 -83
  9. package/src/components/AutoBeConfigModal.tsx +443 -443
  10. package/src/components/AutoBeStatusButton.tsx +75 -75
  11. package/src/components/AutoBeStatusModal.tsx +486 -486
  12. package/src/components/AutoBeUserMessageMovie.tsx +27 -27
  13. package/src/components/common/ActionButton.tsx +205 -205
  14. package/src/components/common/ActionButtonGroup.tsx +80 -80
  15. package/src/components/common/AutoBeConfigInput.tsx +185 -185
  16. package/src/components/common/ChatBubble.tsx +119 -119
  17. package/src/components/common/Collapsible.tsx +95 -95
  18. package/src/components/common/CompactSessionIndicator.tsx +73 -73
  19. package/src/components/common/CompactSessionList.tsx +82 -82
  20. package/src/components/common/openai/OpenAIContent.tsx +53 -53
  21. package/src/components/common/openai/OpenAIUserAudioContent.tsx +70 -70
  22. package/src/components/common/openai/OpenAIUserFileContent.tsx +76 -76
  23. package/src/components/common/openai/OpenAIUserImageContent.tsx +34 -34
  24. package/src/components/common/openai/OpenAIUserTextContent.tsx +15 -15
  25. package/src/components/events/AutoBeCompleteEventMovie.tsx +402 -402
  26. package/src/components/events/AutoBeCorrectEventMovie.tsx +354 -354
  27. package/src/components/events/AutoBeEventGroupMovie.tsx +18 -18
  28. package/src/components/events/AutoBeEventMovie.tsx +154 -154
  29. package/src/components/events/AutoBeProgressEventMovie.tsx +207 -207
  30. package/src/components/events/AutoBeScenarioEventMovie.tsx +135 -135
  31. package/src/components/events/AutoBeStartEventMovie.tsx +82 -82
  32. package/src/components/events/AutoBeValidateEventMovie.tsx +249 -249
  33. package/src/components/events/README.md +300 -300
  34. package/src/components/events/common/CollapsibleEventGroup.tsx +211 -211
  35. package/src/components/events/common/EventCard.tsx +61 -61
  36. package/src/components/events/common/EventContent.tsx +31 -31
  37. package/src/components/events/common/EventHeader.tsx +85 -85
  38. package/src/components/events/common/EventIcon.tsx +82 -82
  39. package/src/components/events/common/ProgressBar.tsx +64 -64
  40. package/src/components/events/groups/CorrectEventGroup.tsx +183 -183
  41. package/src/components/events/groups/ValidateEventGroup.tsx +143 -143
  42. package/src/components/events/utils/eventGrouper.tsx +116 -116
  43. package/src/components/upload/AutoBeChatUploadBox.tsx +433 -433
  44. package/src/components/upload/AutoBeChatUploadSendButton.tsx +66 -66
  45. package/src/components/upload/AutoBeFileUploadBox.tsx +123 -123
  46. package/src/components/upload/AutoBeVoiceRecoderButton.tsx +100 -100
  47. package/src/context/AutoBeAgentContext.tsx +301 -301
  48. package/src/context/AutoBeAgentSessionList.tsx +58 -58
  49. package/src/context/SearchParamsContext.tsx +49 -49
  50. package/src/icons/Receipt.tsx +74 -74
  51. package/src/structure/AutoBeListener.ts +368 -368
  52. package/tsconfig.json +9 -9
  53. package/README.md +0 -261
@@ -1,368 +1,368 @@
1
- import { AutoBeEvent, IAutoBeRpcListener } from "@autobe/interface";
2
- import { List } from "tstl";
3
-
4
- import { AutoBeListenerState } from "./AutoBeListenerState";
5
- import { IAutoBeEventGroup } from "./IAutoBeEventGroup";
6
-
7
- export class AutoBeListener {
8
- private callback_: Set<(eventGroups: IAutoBeEventGroup[]) => Promise<void>>;
9
- private onEnableCallback_: Set<(value: boolean) => Promise<void>>;
10
-
11
- private listener_: Required<IAutoBeRpcListener>;
12
- private events_: List<IAutoBeEventGroup> = new List();
13
- private dict_: Map<AutoBeEvent.Type, List.Iterator<IAutoBeEventGroup>> =
14
- new Map();
15
- private enable_: boolean = false;
16
- private readonly state_: AutoBeListenerState;
17
- private dispatchScheduled_: boolean = false;
18
-
19
- public constructor() {
20
- this.callback_ = new Set();
21
- this.onEnableCallback_ = new Set();
22
-
23
- this.state_ = new AutoBeListenerState();
24
- this.listener_ = {
25
- enable: async (value) => {
26
- this.enable_ = value;
27
- this.onEnableCallback_.forEach((callback) =>
28
- callback(value).catch(() => {}),
29
- );
30
- },
31
- assistantMessage: async (event) => {
32
- this.insert(event);
33
- },
34
- userMessage: async (event) => {
35
- this.insert(event);
36
- },
37
-
38
- // DESCRIBE
39
- imageDescribeStart: async (event) => {
40
- this.dict_.delete("imageDescribeDraft");
41
- this.insert(event);
42
- },
43
- imageDescribeDraft: async (event) => {
44
- this.insert(event);
45
- },
46
- imageDescribeComplete: async (event) => {
47
- this.dict_.delete("imageDescribeDraft");
48
- this.insert(event);
49
- },
50
-
51
- // ANALYZE
52
- analyzeStart: async (event) => {
53
- this.dict_.delete("analyzeWriteModule");
54
- this.dict_.delete("analyzeWriteUnit");
55
- this.dict_.delete("analyzeWriteSection");
56
- this.dict_.delete("analyzeSectionReview");
57
- this.insert(event);
58
- },
59
- analyzeScenario: async (event) => {
60
- this.accumulate(event);
61
- },
62
- analyzeWriteModule: async (event) => {
63
- this.accumulate(event);
64
- },
65
- analyzeWriteUnit: async (event) => {
66
- this.accumulate(event);
67
- },
68
- analyzeWriteSection: async (event) => {
69
- this.accumulate(event);
70
- },
71
- analyzeSectionReview: async (event) => {
72
- this.accumulate(event);
73
- },
74
- analyzeScenarioReview: async (event) => {
75
- this.accumulate(event);
76
- },
77
- analyzeComplete: async (event) => {
78
- this.dict_.delete("analyzeWriteModule");
79
- this.dict_.delete("analyzeWriteUnit");
80
- this.dict_.delete("analyzeWriteSection");
81
- this.dict_.delete("analyzeSectionReview");
82
- this.state_.setAnalyze(event);
83
- this.insert(event);
84
- },
85
-
86
- // PRISMA
87
- databaseStart: async (event) => {
88
- this.dict_.delete("databaseAuthorizationReview");
89
- this.dict_.delete("databaseComponent");
90
- this.dict_.delete("databaseComponentReview");
91
- this.dict_.delete("databaseSchema");
92
- this.dict_.delete("databaseSchemaReview");
93
- this.insert(event);
94
- },
95
- databaseGroup: async (event) => {
96
- this.insert(event);
97
- },
98
- databaseGroupReview: async (event) => {
99
- this.insert(event);
100
- },
101
- databaseAuthorization: async (event) => {
102
- this.accumulate(event);
103
- },
104
- databaseAuthorizationReview: async (event) => {
105
- this.accumulate(event);
106
- },
107
- databaseComponent: async (event) => {
108
- this.accumulate(event);
109
- },
110
- databaseComponentReview: async (event) => {
111
- this.accumulate(event);
112
- },
113
- databaseSchema: async (event) => {
114
- this.accumulate(event);
115
- },
116
- databaseSchemaReview: async (event) => {
117
- this.accumulate(event);
118
- },
119
- databaseValidate: async (event) => {
120
- this.insert(event);
121
- },
122
- databaseCorrect: async (event) => {
123
- this.insert(event);
124
- },
125
- databaseComplete: async (event) => {
126
- this.dict_.delete("databaseAuthorizationReview");
127
- this.dict_.delete("databaseComponent");
128
- this.dict_.delete("databaseComponentReview");
129
- this.dict_.delete("databaseSchema");
130
- this.dict_.delete("databaseSchemaReview");
131
- this.state_.setDatabase(event);
132
- this.insert(event);
133
- },
134
-
135
- // INTERFACE
136
- interfaceStart: async (event) => {
137
- this.dict_.delete("interfaceAuthorization");
138
- this.dict_.delete("interfaceEndpoint");
139
- this.dict_.delete("interfaceOperation");
140
- this.dict_.delete("interfaceOperationReview");
141
- this.dict_.delete("interfaceSchema");
142
- this.dict_.delete("interfaceSchemaCasting");
143
- this.dict_.delete("interfaceSchemaRefine");
144
- this.dict_.delete("interfaceSchemaReview");
145
- this.dict_.delete("interfaceSchemaComplement");
146
- this.dict_.delete("interfaceSchemaRename");
147
- this.dict_.delete("interfacePrerequisite");
148
- this.insert(event);
149
- },
150
- interfaceGroup: async (event) => {
151
- this.insert(event);
152
- },
153
- interfaceEndpoint: async (event) => {
154
- this.accumulate(event);
155
- },
156
- interfaceEndpointReview: async (event) => {
157
- this.accumulate(event);
158
- },
159
- interfaceOperation: async (event) => {
160
- this.accumulate(event);
161
- },
162
- interfaceOperationReview: async (event) => {
163
- this.accumulate(event);
164
- },
165
- interfaceAuthorization: async (event) => {
166
- this.accumulate(event);
167
- },
168
- interfaceSchema: async (event) => {
169
- this.accumulate(event);
170
- },
171
- interfaceSchemaCasting: async (event) => {
172
- this.accumulate(event);
173
- },
174
- interfaceSchemaRefine: async (event) => {
175
- this.accumulate(event);
176
- },
177
- interfaceSchemaReview: async (event) => {
178
- this.accumulate(event);
179
- },
180
- interfaceSchemaRename: async (event) => {
181
- this.accumulate(event);
182
- },
183
- interfaceSchemaComplement: async (event) => {
184
- this.accumulate(event);
185
- },
186
- interfacePrerequisite: async (event) => {
187
- this.accumulate(event);
188
- },
189
- interfaceComplete: async (event) => {
190
- this.dict_.delete("interfaceEndpoint");
191
- this.dict_.delete("interfaceOperation");
192
- this.dict_.delete("interfaceOperationReview");
193
- this.dict_.delete("interfaceAuthorization");
194
- this.dict_.delete("interfaceSchema");
195
- this.dict_.delete("interfaceSchemaCasting");
196
- this.dict_.delete("interfaceSchemaRefine");
197
- this.dict_.delete("interfaceSchemaReview");
198
- this.dict_.delete("interfaceSchemaRename");
199
- this.dict_.delete("interfaceSchemaComplement");
200
- this.dict_.delete("interfacePrerequisite");
201
- this.state_.setInterface(event);
202
- this.insert(event);
203
- },
204
-
205
- // TEST
206
- testStart: async (event) => {
207
- this.dict_.delete("testScenario");
208
- this.dict_.delete("testWrite");
209
- this.dict_.delete("testValidate");
210
- this.dict_.delete("testCorrect");
211
- this.insert(event);
212
- },
213
- testScenario: async (event) => {
214
- this.accumulate(event);
215
- },
216
- testScenarioReview: async (event) => {
217
- this.accumulate(event);
218
- },
219
- testWrite: async (event) => {
220
- this.accumulate(event);
221
- },
222
- testValidate: async (event) => {
223
- this.accumulate(event);
224
- },
225
- testCorrect: async (event) => {
226
- this.accumulate(event);
227
- },
228
- testComplete: async (event) => {
229
- this.dict_.delete("testScenario");
230
- this.dict_.delete("testWrite");
231
- this.dict_.delete("testValidate");
232
- this.dict_.delete("testCorrect");
233
- this.state_.setTest(event);
234
- this.insert(event);
235
- },
236
-
237
- //----
238
- // REALIZE
239
- //----
240
- // REALIZE-MAIN
241
- realizeStart: async (event) => {
242
- this.dict_.delete("realizePlan");
243
- this.dict_.delete("realizeWrite");
244
- this.dict_.delete("realizeValidate");
245
- this.insert(event);
246
- },
247
- realizePlan: async (event) => {
248
- this.accumulate(event);
249
- },
250
- realizeWrite: async (event) => {
251
- this.accumulate(event);
252
- },
253
- realizeCorrect: async (event) => {
254
- this.accumulate(event);
255
- },
256
-
257
- realizeValidate: async (event) => {
258
- this.accumulate(event);
259
- },
260
- realizeComplete: async (event) => {
261
- this.dict_.delete("realizePlan");
262
- this.dict_.delete("realizeWrite");
263
- this.dict_.delete("realizeValidate");
264
- this.state_.setRealize(event);
265
- this.insert(event);
266
- },
267
- // REALIZE-AUTHORIZATION
268
- realizeAuthorizationStart: async (event) => {
269
- this.dict_.delete("realizeAuthorizationWrite");
270
- this.dict_.delete("realizeAuthorizationCorrect");
271
- this.dict_.delete("realizeAuthorizationValidate");
272
- this.insert(event);
273
- },
274
- realizeAuthorizationWrite: async (event) => {
275
- this.accumulate(event);
276
- },
277
- realizeAuthorizationValidate: async (event) => {
278
- this.accumulate(event);
279
- },
280
- realizeAuthorizationCorrect: async (event) => {
281
- this.insert(event);
282
- },
283
- realizeAuthorizationComplete: async (event) => {
284
- this.dict_.delete("realizeAuthorizationWrite");
285
- this.dict_.delete("realizeAuthorizationCorrect");
286
- this.dict_.delete("realizeAuthorizationValidate");
287
- this.insert(event);
288
- },
289
- // REALILZE-TEST
290
- realizeTestStart: async (event) => {
291
- this.dict_.delete("realizeTestOperation");
292
- this.insert(event);
293
- },
294
- realizeTestReset: async (event) => {
295
- this.insert(event);
296
- },
297
- realizeTestOperation: async (event) => {
298
- this.accumulate(event);
299
- },
300
- realizeTestComplete: async (event) => {
301
- this.dict_.delete("realizeTestOperation");
302
- this.insert(event);
303
- },
304
- };
305
- }
306
-
307
- public on(callback: (eventGroups: IAutoBeEventGroup[]) => Promise<void>) {
308
- this.callback_.add(callback);
309
- }
310
-
311
- public off(callback: (eventGroups: IAutoBeEventGroup[]) => Promise<void>) {
312
- this.callback_.delete(callback);
313
- }
314
-
315
- public getListener(): Required<IAutoBeRpcListener> {
316
- return this.listener_;
317
- }
318
-
319
- public getState(): AutoBeListenerState {
320
- return this.state_;
321
- }
322
-
323
- public getEnable(): boolean {
324
- return this.enable_;
325
- }
326
-
327
- public onEnable(callback: (value: boolean) => Promise<void>) {
328
- this.onEnableCallback_.add(callback);
329
- }
330
-
331
- public offEnable(callback: (value: boolean) => Promise<void>) {
332
- this.onEnableCallback_.delete(callback);
333
- }
334
-
335
- private accumulate(event: AutoBeEvent) {
336
- const it: List.Iterator<IAutoBeEventGroup> | undefined = this.dict_.get(
337
- event.type,
338
- );
339
- if (it === undefined)
340
- this.dict_.set(
341
- event.type,
342
- this.events_.insert(this.events_.end(), {
343
- type: event.type,
344
- events: [event],
345
- }),
346
- );
347
- else it.value.events.push(event);
348
- this.dispatch();
349
- }
350
-
351
- private insert(event: AutoBeEvent) {
352
- this.events_.push_back({
353
- type: event.type,
354
- events: [event],
355
- });
356
- this.dispatch();
357
- }
358
-
359
- private dispatch() {
360
- if (this.dispatchScheduled_) return;
361
- this.dispatchScheduled_ = true;
362
- setTimeout(() => {
363
- this.dispatchScheduled_ = false;
364
- const snapshot = this.events_.toJSON();
365
- this.callback_.forEach((callback) => callback(snapshot).catch(() => {}));
366
- }, 0);
367
- }
368
- }
1
+ import { AutoBeEvent, IAutoBeRpcListener } from "@autobe/interface";
2
+ import { List } from "tstl";
3
+
4
+ import { AutoBeListenerState } from "./AutoBeListenerState";
5
+ import { IAutoBeEventGroup } from "./IAutoBeEventGroup";
6
+
7
+ export class AutoBeListener {
8
+ private callback_: Set<(eventGroups: IAutoBeEventGroup[]) => Promise<void>>;
9
+ private onEnableCallback_: Set<(value: boolean) => Promise<void>>;
10
+
11
+ private listener_: Required<IAutoBeRpcListener>;
12
+ private events_: List<IAutoBeEventGroup> = new List();
13
+ private dict_: Map<AutoBeEvent.Type, List.Iterator<IAutoBeEventGroup>> =
14
+ new Map();
15
+ private enable_: boolean = false;
16
+ private readonly state_: AutoBeListenerState;
17
+ private dispatchScheduled_: boolean = false;
18
+
19
+ public constructor() {
20
+ this.callback_ = new Set();
21
+ this.onEnableCallback_ = new Set();
22
+
23
+ this.state_ = new AutoBeListenerState();
24
+ this.listener_ = {
25
+ enable: async (value) => {
26
+ this.enable_ = value;
27
+ this.onEnableCallback_.forEach((callback) =>
28
+ callback(value).catch(() => {}),
29
+ );
30
+ },
31
+ assistantMessage: async (event) => {
32
+ this.insert(event);
33
+ },
34
+ userMessage: async (event) => {
35
+ this.insert(event);
36
+ },
37
+
38
+ // DESCRIBE
39
+ imageDescribeStart: async (event) => {
40
+ this.dict_.delete("imageDescribeDraft");
41
+ this.insert(event);
42
+ },
43
+ imageDescribeDraft: async (event) => {
44
+ this.insert(event);
45
+ },
46
+ imageDescribeComplete: async (event) => {
47
+ this.dict_.delete("imageDescribeDraft");
48
+ this.insert(event);
49
+ },
50
+
51
+ // ANALYZE
52
+ analyzeStart: async (event) => {
53
+ this.dict_.delete("analyzeWriteModule");
54
+ this.dict_.delete("analyzeWriteUnit");
55
+ this.dict_.delete("analyzeWriteSection");
56
+ this.dict_.delete("analyzeSectionReview");
57
+ this.insert(event);
58
+ },
59
+ analyzeScenario: async (event) => {
60
+ this.accumulate(event);
61
+ },
62
+ analyzeWriteModule: async (event) => {
63
+ this.accumulate(event);
64
+ },
65
+ analyzeWriteUnit: async (event) => {
66
+ this.accumulate(event);
67
+ },
68
+ analyzeWriteSection: async (event) => {
69
+ this.accumulate(event);
70
+ },
71
+ analyzeSectionReview: async (event) => {
72
+ this.accumulate(event);
73
+ },
74
+ analyzeScenarioReview: async (event) => {
75
+ this.accumulate(event);
76
+ },
77
+ analyzeComplete: async (event) => {
78
+ this.dict_.delete("analyzeWriteModule");
79
+ this.dict_.delete("analyzeWriteUnit");
80
+ this.dict_.delete("analyzeWriteSection");
81
+ this.dict_.delete("analyzeSectionReview");
82
+ this.state_.setAnalyze(event);
83
+ this.insert(event);
84
+ },
85
+
86
+ // PRISMA
87
+ databaseStart: async (event) => {
88
+ this.dict_.delete("databaseAuthorizationReview");
89
+ this.dict_.delete("databaseComponent");
90
+ this.dict_.delete("databaseComponentReview");
91
+ this.dict_.delete("databaseSchema");
92
+ this.dict_.delete("databaseSchemaReview");
93
+ this.insert(event);
94
+ },
95
+ databaseGroup: async (event) => {
96
+ this.insert(event);
97
+ },
98
+ databaseGroupReview: async (event) => {
99
+ this.insert(event);
100
+ },
101
+ databaseAuthorization: async (event) => {
102
+ this.accumulate(event);
103
+ },
104
+ databaseAuthorizationReview: async (event) => {
105
+ this.accumulate(event);
106
+ },
107
+ databaseComponent: async (event) => {
108
+ this.accumulate(event);
109
+ },
110
+ databaseComponentReview: async (event) => {
111
+ this.accumulate(event);
112
+ },
113
+ databaseSchema: async (event) => {
114
+ this.accumulate(event);
115
+ },
116
+ databaseSchemaReview: async (event) => {
117
+ this.accumulate(event);
118
+ },
119
+ databaseValidate: async (event) => {
120
+ this.insert(event);
121
+ },
122
+ databaseCorrect: async (event) => {
123
+ this.insert(event);
124
+ },
125
+ databaseComplete: async (event) => {
126
+ this.dict_.delete("databaseAuthorizationReview");
127
+ this.dict_.delete("databaseComponent");
128
+ this.dict_.delete("databaseComponentReview");
129
+ this.dict_.delete("databaseSchema");
130
+ this.dict_.delete("databaseSchemaReview");
131
+ this.state_.setDatabase(event);
132
+ this.insert(event);
133
+ },
134
+
135
+ // INTERFACE
136
+ interfaceStart: async (event) => {
137
+ this.dict_.delete("interfaceAuthorization");
138
+ this.dict_.delete("interfaceEndpoint");
139
+ this.dict_.delete("interfaceOperation");
140
+ this.dict_.delete("interfaceOperationReview");
141
+ this.dict_.delete("interfaceSchema");
142
+ this.dict_.delete("interfaceSchemaCasting");
143
+ this.dict_.delete("interfaceSchemaRefine");
144
+ this.dict_.delete("interfaceSchemaReview");
145
+ this.dict_.delete("interfaceSchemaComplement");
146
+ this.dict_.delete("interfaceSchemaRename");
147
+ this.dict_.delete("interfacePrerequisite");
148
+ this.insert(event);
149
+ },
150
+ interfaceGroup: async (event) => {
151
+ this.insert(event);
152
+ },
153
+ interfaceEndpoint: async (event) => {
154
+ this.accumulate(event);
155
+ },
156
+ interfaceEndpointReview: async (event) => {
157
+ this.accumulate(event);
158
+ },
159
+ interfaceOperation: async (event) => {
160
+ this.accumulate(event);
161
+ },
162
+ interfaceOperationReview: async (event) => {
163
+ this.accumulate(event);
164
+ },
165
+ interfaceAuthorization: async (event) => {
166
+ this.accumulate(event);
167
+ },
168
+ interfaceSchema: async (event) => {
169
+ this.accumulate(event);
170
+ },
171
+ interfaceSchemaCasting: async (event) => {
172
+ this.accumulate(event);
173
+ },
174
+ interfaceSchemaRefine: async (event) => {
175
+ this.accumulate(event);
176
+ },
177
+ interfaceSchemaReview: async (event) => {
178
+ this.accumulate(event);
179
+ },
180
+ interfaceSchemaRename: async (event) => {
181
+ this.accumulate(event);
182
+ },
183
+ interfaceSchemaComplement: async (event) => {
184
+ this.accumulate(event);
185
+ },
186
+ interfacePrerequisite: async (event) => {
187
+ this.accumulate(event);
188
+ },
189
+ interfaceComplete: async (event) => {
190
+ this.dict_.delete("interfaceEndpoint");
191
+ this.dict_.delete("interfaceOperation");
192
+ this.dict_.delete("interfaceOperationReview");
193
+ this.dict_.delete("interfaceAuthorization");
194
+ this.dict_.delete("interfaceSchema");
195
+ this.dict_.delete("interfaceSchemaCasting");
196
+ this.dict_.delete("interfaceSchemaRefine");
197
+ this.dict_.delete("interfaceSchemaReview");
198
+ this.dict_.delete("interfaceSchemaRename");
199
+ this.dict_.delete("interfaceSchemaComplement");
200
+ this.dict_.delete("interfacePrerequisite");
201
+ this.state_.setInterface(event);
202
+ this.insert(event);
203
+ },
204
+
205
+ // TEST
206
+ testStart: async (event) => {
207
+ this.dict_.delete("testScenario");
208
+ this.dict_.delete("testWrite");
209
+ this.dict_.delete("testValidate");
210
+ this.dict_.delete("testCorrect");
211
+ this.insert(event);
212
+ },
213
+ testScenario: async (event) => {
214
+ this.accumulate(event);
215
+ },
216
+ testScenarioReview: async (event) => {
217
+ this.accumulate(event);
218
+ },
219
+ testWrite: async (event) => {
220
+ this.accumulate(event);
221
+ },
222
+ testValidate: async (event) => {
223
+ this.accumulate(event);
224
+ },
225
+ testCorrect: async (event) => {
226
+ this.accumulate(event);
227
+ },
228
+ testComplete: async (event) => {
229
+ this.dict_.delete("testScenario");
230
+ this.dict_.delete("testWrite");
231
+ this.dict_.delete("testValidate");
232
+ this.dict_.delete("testCorrect");
233
+ this.state_.setTest(event);
234
+ this.insert(event);
235
+ },
236
+
237
+ //----
238
+ // REALIZE
239
+ //----
240
+ // REALIZE-MAIN
241
+ realizeStart: async (event) => {
242
+ this.dict_.delete("realizePlan");
243
+ this.dict_.delete("realizeWrite");
244
+ this.dict_.delete("realizeValidate");
245
+ this.insert(event);
246
+ },
247
+ realizePlan: async (event) => {
248
+ this.accumulate(event);
249
+ },
250
+ realizeWrite: async (event) => {
251
+ this.accumulate(event);
252
+ },
253
+ realizeCorrect: async (event) => {
254
+ this.accumulate(event);
255
+ },
256
+
257
+ realizeValidate: async (event) => {
258
+ this.accumulate(event);
259
+ },
260
+ realizeComplete: async (event) => {
261
+ this.dict_.delete("realizePlan");
262
+ this.dict_.delete("realizeWrite");
263
+ this.dict_.delete("realizeValidate");
264
+ this.state_.setRealize(event);
265
+ this.insert(event);
266
+ },
267
+ // REALIZE-AUTHORIZATION
268
+ realizeAuthorizationStart: async (event) => {
269
+ this.dict_.delete("realizeAuthorizationWrite");
270
+ this.dict_.delete("realizeAuthorizationCorrect");
271
+ this.dict_.delete("realizeAuthorizationValidate");
272
+ this.insert(event);
273
+ },
274
+ realizeAuthorizationWrite: async (event) => {
275
+ this.accumulate(event);
276
+ },
277
+ realizeAuthorizationValidate: async (event) => {
278
+ this.accumulate(event);
279
+ },
280
+ realizeAuthorizationCorrect: async (event) => {
281
+ this.insert(event);
282
+ },
283
+ realizeAuthorizationComplete: async (event) => {
284
+ this.dict_.delete("realizeAuthorizationWrite");
285
+ this.dict_.delete("realizeAuthorizationCorrect");
286
+ this.dict_.delete("realizeAuthorizationValidate");
287
+ this.insert(event);
288
+ },
289
+ // REALILZE-TEST
290
+ realizeTestStart: async (event) => {
291
+ this.dict_.delete("realizeTestOperation");
292
+ this.insert(event);
293
+ },
294
+ realizeTestReset: async (event) => {
295
+ this.insert(event);
296
+ },
297
+ realizeTestOperation: async (event) => {
298
+ this.accumulate(event);
299
+ },
300
+ realizeTestComplete: async (event) => {
301
+ this.dict_.delete("realizeTestOperation");
302
+ this.insert(event);
303
+ },
304
+ };
305
+ }
306
+
307
+ public on(callback: (eventGroups: IAutoBeEventGroup[]) => Promise<void>) {
308
+ this.callback_.add(callback);
309
+ }
310
+
311
+ public off(callback: (eventGroups: IAutoBeEventGroup[]) => Promise<void>) {
312
+ this.callback_.delete(callback);
313
+ }
314
+
315
+ public getListener(): Required<IAutoBeRpcListener> {
316
+ return this.listener_;
317
+ }
318
+
319
+ public getState(): AutoBeListenerState {
320
+ return this.state_;
321
+ }
322
+
323
+ public getEnable(): boolean {
324
+ return this.enable_;
325
+ }
326
+
327
+ public onEnable(callback: (value: boolean) => Promise<void>) {
328
+ this.onEnableCallback_.add(callback);
329
+ }
330
+
331
+ public offEnable(callback: (value: boolean) => Promise<void>) {
332
+ this.onEnableCallback_.delete(callback);
333
+ }
334
+
335
+ private accumulate(event: AutoBeEvent) {
336
+ const it: List.Iterator<IAutoBeEventGroup> | undefined = this.dict_.get(
337
+ event.type,
338
+ );
339
+ if (it === undefined)
340
+ this.dict_.set(
341
+ event.type,
342
+ this.events_.insert(this.events_.end(), {
343
+ type: event.type,
344
+ events: [event],
345
+ }),
346
+ );
347
+ else it.value.events.push(event);
348
+ this.dispatch();
349
+ }
350
+
351
+ private insert(event: AutoBeEvent) {
352
+ this.events_.push_back({
353
+ type: event.type,
354
+ events: [event],
355
+ });
356
+ this.dispatch();
357
+ }
358
+
359
+ private dispatch() {
360
+ if (this.dispatchScheduled_) return;
361
+ this.dispatchScheduled_ = true;
362
+ setTimeout(() => {
363
+ this.dispatchScheduled_ = false;
364
+ const snapshot = this.events_.toJSON();
365
+ this.callback_.forEach((callback) => callback(snapshot).catch(() => {}));
366
+ }, 0);
367
+ }
368
+ }