@jr200-labs/xstate-nats 0.6.0

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 (55) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +251 -0
  3. package/dist/actions/connection.d.ts +28 -0
  4. package/dist/actions/connection.d.ts.map +1 -0
  5. package/dist/actions/connection.js +102 -0
  6. package/dist/actions/connection.js.map +1 -0
  7. package/dist/actions/kv.d.ts +21 -0
  8. package/dist/actions/kv.d.ts.map +1 -0
  9. package/dist/actions/kv.js +66 -0
  10. package/dist/actions/kv.js.map +1 -0
  11. package/dist/actions/subject.d.ts +39 -0
  12. package/dist/actions/subject.d.ts.map +1 -0
  13. package/dist/actions/subject.js +79 -0
  14. package/dist/actions/subject.js.map +1 -0
  15. package/dist/actions/types.d.ts +8 -0
  16. package/dist/actions/types.d.ts.map +1 -0
  17. package/dist/actions/types.js +2 -0
  18. package/dist/actions/types.js.map +1 -0
  19. package/dist/index.d.ts +8 -0
  20. package/dist/index.d.ts.map +1 -0
  21. package/dist/index.js +6 -0
  22. package/dist/index.js.map +1 -0
  23. package/dist/machines/kv.d.ts +190 -0
  24. package/dist/machines/kv.d.ts.map +1 -0
  25. package/dist/machines/kv.js +273 -0
  26. package/dist/machines/kv.js.map +1 -0
  27. package/dist/machines/root.d.ts +510 -0
  28. package/dist/machines/root.d.ts.map +1 -0
  29. package/dist/machines/root.js +245 -0
  30. package/dist/machines/root.js.map +1 -0
  31. package/dist/machines/subject.d.ts +95 -0
  32. package/dist/machines/subject.d.ts.map +1 -0
  33. package/dist/machines/subject.js +162 -0
  34. package/dist/machines/subject.js.map +1 -0
  35. package/dist/utils.d.ts +10 -0
  36. package/dist/utils.d.ts.map +1 -0
  37. package/dist/utils.js +27 -0
  38. package/dist/utils.js.map +1 -0
  39. package/package.json +55 -0
  40. package/src/actions/connection.test.ts +324 -0
  41. package/src/actions/connection.ts +135 -0
  42. package/src/actions/kv.test.ts +439 -0
  43. package/src/actions/kv.ts +92 -0
  44. package/src/actions/subject.test.ts +460 -0
  45. package/src/actions/subject.ts +127 -0
  46. package/src/actions/types.ts +7 -0
  47. package/src/index.ts +20 -0
  48. package/src/machines/kv.test.ts +720 -0
  49. package/src/machines/kv.ts +327 -0
  50. package/src/machines/root.test.ts +329 -0
  51. package/src/machines/root.ts +286 -0
  52. package/src/machines/subject.test.ts +272 -0
  53. package/src/machines/subject.ts +205 -0
  54. package/src/utils.test.ts +35 -0
  55. package/src/utils.ts +30 -0
@@ -0,0 +1,510 @@
1
+ import { ConnectionOptions, NatsConnection } from '@nats-io/nats-core';
2
+ import { ExternalEvents as KvExternalEvents } from './kv';
3
+ import { ExternalEvents as SubjectExternalEvents } from './subject';
4
+ import { type AuthConfig } from '../actions/types';
5
+ export interface NatsConnectionConfig {
6
+ opts: ConnectionOptions;
7
+ auth?: AuthConfig;
8
+ maxRetries: number;
9
+ }
10
+ export interface Context {
11
+ connection: NatsConnection | null;
12
+ error?: Error;
13
+ natsConfig?: NatsConnectionConfig;
14
+ retries: number;
15
+ subjectManagerReady: boolean;
16
+ kvManagerReady: boolean;
17
+ }
18
+ export type ExternalEvents = {
19
+ type: 'CONFIGURE';
20
+ config: NatsConnectionConfig;
21
+ } | {
22
+ type: 'CONNECT';
23
+ } | {
24
+ type: 'DISCONNECT';
25
+ } | {
26
+ type: 'RESET';
27
+ } | SubjectExternalEvents | KvExternalEvents;
28
+ export declare const natsMachine: import("xstate").StateMachine<Context, {
29
+ type: "KV.CONNECT";
30
+ connection: NatsConnection;
31
+ } | {
32
+ type: "KV.CONNECTED";
33
+ } | {
34
+ type: "KV.DISCONNECTED";
35
+ } | {
36
+ type: "KV.BUCKET_LIST";
37
+ bucket?: string;
38
+ onResult: (result: import("@nats-io/kv").KvStatus[] | string[] | {
39
+ error: Error;
40
+ }) => void;
41
+ } | {
42
+ type: "KV.BUCKET_CREATE";
43
+ bucket: string;
44
+ onResult: (result: {
45
+ ok: true;
46
+ } | {
47
+ ok: false;
48
+ } | {
49
+ error: Error;
50
+ }) => void;
51
+ } | {
52
+ type: "KV.BUCKET_DELETE";
53
+ bucket: string;
54
+ onResult: (result: {
55
+ ok: true;
56
+ } | {
57
+ ok: false;
58
+ } | {
59
+ error: Error;
60
+ }) => void;
61
+ } | {
62
+ type: "KV.GET";
63
+ bucket: string;
64
+ key: string;
65
+ onResult: (result: import("@nats-io/kv").KvEntry | null | {
66
+ error: Error;
67
+ }) => void;
68
+ } | {
69
+ type: "KV.PUT";
70
+ bucket: string;
71
+ key: string;
72
+ value: any;
73
+ onResult: (result: {
74
+ ok: true;
75
+ } | {
76
+ error: Error;
77
+ }) => void;
78
+ } | {
79
+ type: "KV.DELETE";
80
+ bucket: string;
81
+ key: string;
82
+ onResult: (result: {
83
+ ok: true;
84
+ } | {
85
+ error: Error;
86
+ }) => void;
87
+ } | {
88
+ type: "KV.SUBSCRIBE";
89
+ config: import("..").KvSubscriptionConfig;
90
+ } | {
91
+ type: "KV.UNSUBSCRIBE";
92
+ bucket: string;
93
+ key: string;
94
+ } | {
95
+ type: "KV.UNSUBSCRIBE_ALL";
96
+ } | {
97
+ type: "NATS_CONNECTION.DISCONNECTED";
98
+ status: import("@nats-io/nats-core").Status;
99
+ } | {
100
+ type: "NATS_CONNECTION.RECONNECT";
101
+ status: import("@nats-io/nats-core").Status;
102
+ } | {
103
+ type: "NATS_CONNECTION.ERROR";
104
+ status: import("@nats-io/nats-core").Status;
105
+ } | {
106
+ type: "NATS_CONNECTION.CLOSE";
107
+ status: import("@nats-io/nats-core").Status;
108
+ } | {
109
+ type: "NATS_CONNECTION.RECONNECTING";
110
+ status: import("@nats-io/nats-core").Status;
111
+ } | {
112
+ type: "SUBJECT.CONNECT";
113
+ connection: NatsConnection;
114
+ } | {
115
+ type: "SUBJECT.CONNECTED";
116
+ } | {
117
+ type: "SUBJECT.DISCONNECTED";
118
+ } | {
119
+ type: "SUBJECT.PUBLISH";
120
+ subject: string;
121
+ payload: any;
122
+ opts?: import("@nats-io/nats-core").PublishOptions;
123
+ onPublishResult?: (result: {
124
+ ok: true;
125
+ } | {
126
+ ok: false;
127
+ error: Error;
128
+ }) => void;
129
+ } | {
130
+ type: "SUBJECT.REQUEST";
131
+ subject: string;
132
+ payload: any;
133
+ opts?: import("@nats-io/nats-core").RequestOptions;
134
+ callback: (data: any) => void;
135
+ } | {
136
+ type: "SUBJECT.SUBSCRIBE";
137
+ config: import("../actions/subject").SubjectSubscriptionConfig;
138
+ } | {
139
+ type: "SUBJECT.UNSUBSCRIBE";
140
+ subject: string;
141
+ } | {
142
+ type: "SUBJECT.UNSUBSCRIBE_ALL";
143
+ } | {
144
+ type: "CONNECTED";
145
+ connection: NatsConnection;
146
+ } | {
147
+ type: "DISCONNECTED";
148
+ } | {
149
+ type: "FAIL";
150
+ error: Error;
151
+ } | {
152
+ type: "RECONNECT";
153
+ } | {
154
+ type: "CLOSE";
155
+ } | {
156
+ type: "CONFIGURE";
157
+ config: NatsConnectionConfig;
158
+ } | {
159
+ type: "CONNECT";
160
+ } | {
161
+ type: "DISCONNECT";
162
+ } | {
163
+ type: "RESET";
164
+ }, {
165
+ [x: string]: import("xstate").ActorRefFromLogic<import("xstate").StateMachine<import("./subject").Context, {
166
+ type: "ERROR";
167
+ error: Error;
168
+ } | {
169
+ type: "SUBJECT.CONNECT";
170
+ connection: NatsConnection;
171
+ } | {
172
+ type: "SUBJECT.CONNECTED";
173
+ } | {
174
+ type: "SUBJECT.DISCONNECTED";
175
+ } | {
176
+ type: "SUBJECT.PUBLISH";
177
+ subject: string;
178
+ payload: any;
179
+ opts?: import("@nats-io/nats-core").PublishOptions;
180
+ onPublishResult?: (result: {
181
+ ok: true;
182
+ } | {
183
+ ok: false;
184
+ error: Error;
185
+ }) => void;
186
+ } | {
187
+ type: "SUBJECT.REQUEST";
188
+ subject: string;
189
+ payload: any;
190
+ opts?: import("@nats-io/nats-core").RequestOptions;
191
+ callback: (data: any) => void;
192
+ } | {
193
+ type: "SUBJECT.SUBSCRIBE";
194
+ config: import("../actions/subject").SubjectSubscriptionConfig;
195
+ } | {
196
+ type: "SUBJECT.UNSUBSCRIBE";
197
+ subject: string;
198
+ } | {
199
+ type: "SUBJECT.UNSUBSCRIBE_ALL";
200
+ }, {}, never, never, {
201
+ type: "hasPendingSync";
202
+ params: unknown;
203
+ }, never, "subject_idle" | "subject_check_sync" | "subject_disconnecting" | "subject_connected" | "subject_syncing" | "subject_error", string, import("xstate").NonReducibleUnknown, import("xstate").NonReducibleUnknown, import("xstate").EventObject, import("xstate").MetaObject, {
204
+ states: {
205
+ readonly subject_idle: {};
206
+ readonly subject_disconnecting: {};
207
+ readonly subject_connected: {};
208
+ readonly subject_check_sync: {};
209
+ readonly subject_syncing: {};
210
+ readonly subject_error: {};
211
+ };
212
+ }>> | import("xstate").ActorRefFromLogic<import("xstate").PromiseActorLogic<NatsConnection, {
213
+ opts: ConnectionOptions;
214
+ auth?: AuthConfig;
215
+ }, import("xstate").EventObject>> | import("xstate").ActorRefFromLogic<import("xstate").PromiseActorLogic<void, {
216
+ connection: NatsConnection | null;
217
+ }, import("xstate").EventObject>> | import("xstate").ActorRefFromLogic<import("xstate").StateMachine<import("./kv").Context, {
218
+ type: "ERROR";
219
+ error: Error;
220
+ } | {
221
+ type: "KV.CONNECT";
222
+ connection: NatsConnection;
223
+ } | {
224
+ type: "KV.CONNECTED";
225
+ } | {
226
+ type: "KV.DISCONNECTED";
227
+ } | {
228
+ type: "KV.BUCKET_LIST";
229
+ bucket?: string;
230
+ onResult: (result: import("@nats-io/kv").KvStatus[] | string[] | {
231
+ error: Error;
232
+ }) => void;
233
+ } | {
234
+ type: "KV.BUCKET_CREATE";
235
+ bucket: string;
236
+ onResult: (result: {
237
+ ok: true;
238
+ } | {
239
+ ok: false;
240
+ } | {
241
+ error: Error;
242
+ }) => void;
243
+ } | {
244
+ type: "KV.BUCKET_DELETE";
245
+ bucket: string;
246
+ onResult: (result: {
247
+ ok: true;
248
+ } | {
249
+ ok: false;
250
+ } | {
251
+ error: Error;
252
+ }) => void;
253
+ } | {
254
+ type: "KV.GET";
255
+ bucket: string;
256
+ key: string;
257
+ onResult: (result: import("@nats-io/kv").KvEntry | null | {
258
+ error: Error;
259
+ }) => void;
260
+ } | {
261
+ type: "KV.PUT";
262
+ bucket: string;
263
+ key: string;
264
+ value: any;
265
+ onResult: (result: {
266
+ ok: true;
267
+ } | {
268
+ error: Error;
269
+ }) => void;
270
+ } | {
271
+ type: "KV.DELETE";
272
+ bucket: string;
273
+ key: string;
274
+ onResult: (result: {
275
+ ok: true;
276
+ } | {
277
+ error: Error;
278
+ }) => void;
279
+ } | {
280
+ type: "KV.SUBSCRIBE";
281
+ config: import("..").KvSubscriptionConfig;
282
+ } | {
283
+ type: "KV.UNSUBSCRIBE";
284
+ bucket: string;
285
+ key: string;
286
+ } | {
287
+ type: "KV.UNSUBSCRIBE_ALL";
288
+ }, {
289
+ [x: string]: import("xstate").ActorRefFromLogic<import("xstate").PromiseActorLogic<{
290
+ subscriptions: Map<string, import("@nats-io/nats-core").QueuedIterator<import("@nats-io/kv").KvWatchEntry>>;
291
+ }, {
292
+ kvm: import("@nats-io/kv").Kvm | null;
293
+ connection: NatsConnection | null;
294
+ currentState: Map<string, import("@nats-io/nats-core").QueuedIterator<import("@nats-io/kv").KvWatchEntry>>;
295
+ targetState: Map<string, import("..").KvSubscriptionConfig>;
296
+ }, import("xstate").EventObject>> | undefined;
297
+ }, {
298
+ src: "kvConsolidateState";
299
+ logic: import("xstate").PromiseActorLogic<{
300
+ subscriptions: Map<string, import("@nats-io/nats-core").QueuedIterator<import("@nats-io/kv").KvWatchEntry>>;
301
+ }, {
302
+ kvm: import("@nats-io/kv").Kvm | null;
303
+ connection: NatsConnection | null;
304
+ currentState: Map<string, import("@nats-io/nats-core").QueuedIterator<import("@nats-io/kv").KvWatchEntry>>;
305
+ targetState: Map<string, import("..").KvSubscriptionConfig>;
306
+ }, import("xstate").EventObject>;
307
+ id: string | undefined;
308
+ }, never, {
309
+ type: "hasPendingSync";
310
+ params: unknown;
311
+ }, never, "kv_idle" | "kv_check_sync" | "kv_disconnecting" | "kv_connected" | "kv_syncing" | "kv_error", string, import("xstate").NonReducibleUnknown, import("xstate").NonReducibleUnknown, import("xstate").EventObject, import("xstate").MetaObject, {
312
+ states: {
313
+ readonly kv_idle: {};
314
+ readonly kv_disconnecting: {};
315
+ readonly kv_connected: {};
316
+ readonly kv_check_sync: {};
317
+ readonly kv_syncing: {};
318
+ readonly kv_error: {};
319
+ };
320
+ }>> | undefined;
321
+ }, {
322
+ src: "subject";
323
+ logic: import("xstate").StateMachine<import("./subject").Context, {
324
+ type: "ERROR";
325
+ error: Error;
326
+ } | {
327
+ type: "SUBJECT.CONNECT";
328
+ connection: NatsConnection;
329
+ } | {
330
+ type: "SUBJECT.CONNECTED";
331
+ } | {
332
+ type: "SUBJECT.DISCONNECTED";
333
+ } | {
334
+ type: "SUBJECT.PUBLISH";
335
+ subject: string;
336
+ payload: any;
337
+ opts?: import("@nats-io/nats-core").PublishOptions;
338
+ onPublishResult?: (result: {
339
+ ok: true;
340
+ } | {
341
+ ok: false;
342
+ error: Error;
343
+ }) => void;
344
+ } | {
345
+ type: "SUBJECT.REQUEST";
346
+ subject: string;
347
+ payload: any;
348
+ opts?: import("@nats-io/nats-core").RequestOptions;
349
+ callback: (data: any) => void;
350
+ } | {
351
+ type: "SUBJECT.SUBSCRIBE";
352
+ config: import("../actions/subject").SubjectSubscriptionConfig;
353
+ } | {
354
+ type: "SUBJECT.UNSUBSCRIBE";
355
+ subject: string;
356
+ } | {
357
+ type: "SUBJECT.UNSUBSCRIBE_ALL";
358
+ }, {}, never, never, {
359
+ type: "hasPendingSync";
360
+ params: unknown;
361
+ }, never, "subject_idle" | "subject_check_sync" | "subject_disconnecting" | "subject_connected" | "subject_syncing" | "subject_error", string, import("xstate").NonReducibleUnknown, import("xstate").NonReducibleUnknown, import("xstate").EventObject, import("xstate").MetaObject, {
362
+ states: {
363
+ readonly subject_idle: {};
364
+ readonly subject_disconnecting: {};
365
+ readonly subject_connected: {};
366
+ readonly subject_check_sync: {};
367
+ readonly subject_syncing: {};
368
+ readonly subject_error: {};
369
+ };
370
+ }>;
371
+ id: string | undefined;
372
+ } | {
373
+ src: "connectToNats";
374
+ logic: import("xstate").PromiseActorLogic<NatsConnection, {
375
+ opts: ConnectionOptions;
376
+ auth?: AuthConfig;
377
+ }, import("xstate").EventObject>;
378
+ id: string | undefined;
379
+ } | {
380
+ src: "disconnectNats";
381
+ logic: import("xstate").PromiseActorLogic<void, {
382
+ connection: NatsConnection | null;
383
+ }, import("xstate").EventObject>;
384
+ id: string | undefined;
385
+ } | {
386
+ src: "kv";
387
+ logic: import("xstate").StateMachine<import("./kv").Context, {
388
+ type: "ERROR";
389
+ error: Error;
390
+ } | {
391
+ type: "KV.CONNECT";
392
+ connection: NatsConnection;
393
+ } | {
394
+ type: "KV.CONNECTED";
395
+ } | {
396
+ type: "KV.DISCONNECTED";
397
+ } | {
398
+ type: "KV.BUCKET_LIST";
399
+ bucket?: string;
400
+ onResult: (result: import("@nats-io/kv").KvStatus[] | string[] | {
401
+ error: Error;
402
+ }) => void;
403
+ } | {
404
+ type: "KV.BUCKET_CREATE";
405
+ bucket: string;
406
+ onResult: (result: {
407
+ ok: true;
408
+ } | {
409
+ ok: false;
410
+ } | {
411
+ error: Error;
412
+ }) => void;
413
+ } | {
414
+ type: "KV.BUCKET_DELETE";
415
+ bucket: string;
416
+ onResult: (result: {
417
+ ok: true;
418
+ } | {
419
+ ok: false;
420
+ } | {
421
+ error: Error;
422
+ }) => void;
423
+ } | {
424
+ type: "KV.GET";
425
+ bucket: string;
426
+ key: string;
427
+ onResult: (result: import("@nats-io/kv").KvEntry | null | {
428
+ error: Error;
429
+ }) => void;
430
+ } | {
431
+ type: "KV.PUT";
432
+ bucket: string;
433
+ key: string;
434
+ value: any;
435
+ onResult: (result: {
436
+ ok: true;
437
+ } | {
438
+ error: Error;
439
+ }) => void;
440
+ } | {
441
+ type: "KV.DELETE";
442
+ bucket: string;
443
+ key: string;
444
+ onResult: (result: {
445
+ ok: true;
446
+ } | {
447
+ error: Error;
448
+ }) => void;
449
+ } | {
450
+ type: "KV.SUBSCRIBE";
451
+ config: import("..").KvSubscriptionConfig;
452
+ } | {
453
+ type: "KV.UNSUBSCRIBE";
454
+ bucket: string;
455
+ key: string;
456
+ } | {
457
+ type: "KV.UNSUBSCRIBE_ALL";
458
+ }, {
459
+ [x: string]: import("xstate").ActorRefFromLogic<import("xstate").PromiseActorLogic<{
460
+ subscriptions: Map<string, import("@nats-io/nats-core").QueuedIterator<import("@nats-io/kv").KvWatchEntry>>;
461
+ }, {
462
+ kvm: import("@nats-io/kv").Kvm | null;
463
+ connection: NatsConnection | null;
464
+ currentState: Map<string, import("@nats-io/nats-core").QueuedIterator<import("@nats-io/kv").KvWatchEntry>>;
465
+ targetState: Map<string, import("..").KvSubscriptionConfig>;
466
+ }, import("xstate").EventObject>> | undefined;
467
+ }, {
468
+ src: "kvConsolidateState";
469
+ logic: import("xstate").PromiseActorLogic<{
470
+ subscriptions: Map<string, import("@nats-io/nats-core").QueuedIterator<import("@nats-io/kv").KvWatchEntry>>;
471
+ }, {
472
+ kvm: import("@nats-io/kv").Kvm | null;
473
+ connection: NatsConnection | null;
474
+ currentState: Map<string, import("@nats-io/nats-core").QueuedIterator<import("@nats-io/kv").KvWatchEntry>>;
475
+ targetState: Map<string, import("..").KvSubscriptionConfig>;
476
+ }, import("xstate").EventObject>;
477
+ id: string | undefined;
478
+ }, never, {
479
+ type: "hasPendingSync";
480
+ params: unknown;
481
+ }, never, "kv_idle" | "kv_check_sync" | "kv_disconnecting" | "kv_connected" | "kv_syncing" | "kv_error", string, import("xstate").NonReducibleUnknown, import("xstate").NonReducibleUnknown, import("xstate").EventObject, import("xstate").MetaObject, {
482
+ states: {
483
+ readonly kv_idle: {};
484
+ readonly kv_disconnecting: {};
485
+ readonly kv_connected: {};
486
+ readonly kv_check_sync: {};
487
+ readonly kv_syncing: {};
488
+ readonly kv_error: {};
489
+ };
490
+ }>;
491
+ id: string | undefined;
492
+ }, {
493
+ type: "doReset";
494
+ params: import("xstate").NonReducibleUnknown;
495
+ }, {
496
+ type: "allManagersReady";
497
+ params: unknown;
498
+ }, never, "error" | "not_configured" | "configured" | "connecting" | "initialise_managers" | "connected" | "closing" | "closed", string, import("xstate").NonReducibleUnknown, import("xstate").NonReducibleUnknown, import("xstate").EventObject, import("xstate").MetaObject, {
499
+ states: {
500
+ readonly not_configured: {};
501
+ readonly configured: {};
502
+ readonly connecting: {};
503
+ readonly initialise_managers: {};
504
+ readonly connected: {};
505
+ readonly closing: {};
506
+ readonly closed: {};
507
+ readonly error: {};
508
+ };
509
+ }>;
510
+ //# sourceMappingURL=root.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"root.d.ts","sourceRoot":"","sources":["../../src/machines/root.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAA;AAEtE,OAAO,EAAkB,cAAc,IAAI,gBAAgB,EAAE,MAAM,MAAM,CAAA;AACzE,OAAO,EAAuB,cAAc,IAAI,qBAAqB,EAAE,MAAM,WAAW,CAAA;AAExF,OAAO,EAAE,KAAK,UAAU,EAAE,MAAM,kBAAkB,CAAA;AAGlD,MAAM,WAAW,oBAAoB;IACnC,IAAI,EAAE,iBAAiB,CAAA;IACvB,IAAI,CAAC,EAAE,UAAU,CAAA;IACjB,UAAU,EAAE,MAAM,CAAA;CACnB;AAED,MAAM,WAAW,OAAO;IACtB,UAAU,EAAE,cAAc,GAAG,IAAI,CAAA;IACjC,KAAK,CAAC,EAAE,KAAK,CAAA;IACb,UAAU,CAAC,EAAE,oBAAoB,CAAA;IACjC,OAAO,EAAE,MAAM,CAAA;IACf,mBAAmB,EAAE,OAAO,CAAA;IAC5B,cAAc,EAAE,OAAO,CAAA;CACxB;AAYD,MAAM,MAAM,cAAc,GACtB;IAAE,IAAI,EAAE,WAAW,CAAC;IAAC,MAAM,EAAE,oBAAoB,CAAA;CAAE,GACnD;IAAE,IAAI,EAAE,SAAS,CAAA;CAAE,GACnB;IAAE,IAAI,EAAE,YAAY,CAAA;CAAE,GACtB;IAAE,IAAI,EAAE,OAAO,CAAA;CAAE,GACjB,qBAAqB,GACrB,gBAAgB,CAAA;AAIpB,eAAO,MAAM,WAAW;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;UAlBZ,WAAW;gBAAc,cAAc;;UACvC,cAAc;;UACd,MAAM;WAAS,KAAK;;UACpB,WAAW;;UACX,OAAO;;UAKP,WAAW;YAAU,oBAAoB;;UACzC,SAAS;;UACT,YAAY;;UACZ,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAwPjB,CAAA"}