@aws-amplify/pubsub 4.4.9 → 4.4.10-next.20

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 (102) hide show
  1. package/CHANGELOG.md +73 -0
  2. package/dist/aws-amplify-pubsub.js +1260 -2214
  3. package/dist/aws-amplify-pubsub.js.map +1 -1
  4. package/dist/aws-amplify-pubsub.min.js +3 -3
  5. package/dist/aws-amplify-pubsub.min.js.map +1 -1
  6. package/lib/Providers/AWSAppSyncProvider.js +20 -102
  7. package/lib/Providers/AWSAppSyncProvider.js.map +1 -1
  8. package/lib/Providers/AWSAppSyncRealTimeProvider/index.d.ts +10 -2
  9. package/lib/Providers/AWSAppSyncRealTimeProvider/index.js +166 -208
  10. package/lib/Providers/AWSAppSyncRealTimeProvider/index.js.map +1 -1
  11. package/lib/Providers/AWSIotProvider.js +4 -52
  12. package/lib/Providers/AWSIotProvider.js.map +1 -1
  13. package/lib/Providers/MqttOverWSProvider.d.ts +5 -1
  14. package/lib/Providers/MqttOverWSProvider.js +172 -187
  15. package/lib/Providers/MqttOverWSProvider.js.map +1 -1
  16. package/lib/Providers/PubSubProvider.d.ts +1 -1
  17. package/lib/Providers/PubSubProvider.js +3 -13
  18. package/lib/Providers/PubSubProvider.js.map +1 -1
  19. package/lib/Providers/{AWSAppSyncRealTimeProvider/constants.d.ts → constants.d.ts} +9 -0
  20. package/lib/Providers/{AWSAppSyncRealTimeProvider/constants.js → constants.js} +9 -0
  21. package/lib/Providers/constants.js.map +1 -0
  22. package/lib/Providers/index.js +6 -8
  23. package/lib/Providers/index.js.map +1 -1
  24. package/lib/PubSub.js +6 -44
  25. package/lib/PubSub.js.map +1 -1
  26. package/lib/index.d.ts +3 -10
  27. package/lib/index.js +5 -14
  28. package/lib/index.js.map +1 -1
  29. package/lib/types/Provider.d.ts +10 -1
  30. package/lib/types/PubSub.d.ts +22 -8
  31. package/lib/types/PubSub.js +56 -0
  32. package/lib/types/PubSub.js.map +1 -1
  33. package/lib/types/index.d.ts +0 -17
  34. package/lib/types/index.js +2 -36
  35. package/lib/types/index.js.map +1 -1
  36. package/lib/utils/ConnectionStateMonitor.d.ts +2 -1
  37. package/lib/utils/ConnectionStateMonitor.js +25 -30
  38. package/lib/utils/ConnectionStateMonitor.js.map +1 -1
  39. package/lib/utils/ReachabilityMonitor/index.d.ts +3 -0
  40. package/lib/utils/ReachabilityMonitor/index.js +5 -0
  41. package/lib/utils/ReachabilityMonitor/index.js.map +1 -0
  42. package/lib/utils/ReachabilityMonitor/index.native.d.ts +3 -0
  43. package/lib/utils/ReachabilityMonitor/index.native.js +9 -0
  44. package/lib/utils/ReachabilityMonitor/index.native.js.map +1 -0
  45. package/lib/utils/ReconnectionMonitor.d.ts +29 -0
  46. package/lib/utils/ReconnectionMonitor.js +73 -0
  47. package/lib/utils/ReconnectionMonitor.js.map +1 -0
  48. package/lib-esm/Providers/AWSAppSyncProvider.js +1 -80
  49. package/lib-esm/Providers/AWSAppSyncProvider.js.map +1 -1
  50. package/lib-esm/Providers/AWSAppSyncRealTimeProvider/index.d.ts +10 -2
  51. package/lib-esm/Providers/AWSAppSyncRealTimeProvider/index.js +130 -162
  52. package/lib-esm/Providers/AWSAppSyncRealTimeProvider/index.js.map +1 -1
  53. package/lib-esm/Providers/AWSIotProvider.js +1 -49
  54. package/lib-esm/Providers/AWSIotProvider.js.map +1 -1
  55. package/lib-esm/Providers/MqttOverWSProvider.d.ts +5 -1
  56. package/lib-esm/Providers/MqttOverWSProvider.js +154 -159
  57. package/lib-esm/Providers/MqttOverWSProvider.js.map +1 -1
  58. package/lib-esm/Providers/PubSubProvider.d.ts +1 -1
  59. package/lib-esm/Providers/PubSubProvider.js +1 -11
  60. package/lib-esm/Providers/PubSubProvider.js.map +1 -1
  61. package/lib-esm/Providers/{AWSAppSyncRealTimeProvider/constants.d.ts → constants.d.ts} +9 -0
  62. package/lib-esm/Providers/{AWSAppSyncRealTimeProvider/constants.js → constants.js} +9 -0
  63. package/lib-esm/Providers/constants.js.map +1 -0
  64. package/lib-esm/PubSub.js +1 -36
  65. package/lib-esm/PubSub.js.map +1 -1
  66. package/lib-esm/index.d.ts +3 -10
  67. package/lib-esm/index.js +3 -11
  68. package/lib-esm/index.js.map +1 -1
  69. package/lib-esm/types/Provider.d.ts +10 -1
  70. package/lib-esm/types/PubSub.d.ts +22 -8
  71. package/lib-esm/types/PubSub.js +56 -0
  72. package/lib-esm/types/PubSub.js.map +1 -1
  73. package/lib-esm/types/index.d.ts +0 -17
  74. package/lib-esm/types/index.js +1 -36
  75. package/lib-esm/types/index.js.map +1 -1
  76. package/lib-esm/utils/ConnectionStateMonitor.d.ts +2 -1
  77. package/lib-esm/utils/ConnectionStateMonitor.js +14 -16
  78. package/lib-esm/utils/ConnectionStateMonitor.js.map +1 -1
  79. package/lib-esm/utils/ReachabilityMonitor/index.d.ts +3 -0
  80. package/lib-esm/utils/ReachabilityMonitor/index.js +3 -0
  81. package/lib-esm/utils/ReachabilityMonitor/index.js.map +1 -0
  82. package/lib-esm/utils/ReachabilityMonitor/index.native.d.ts +3 -0
  83. package/lib-esm/utils/ReachabilityMonitor/index.native.js +6 -0
  84. package/lib-esm/utils/ReachabilityMonitor/index.native.js.map +1 -0
  85. package/lib-esm/utils/ReconnectionMonitor.d.ts +29 -0
  86. package/lib-esm/utils/ReconnectionMonitor.js +71 -0
  87. package/lib-esm/utils/ReconnectionMonitor.js.map +1 -0
  88. package/package.json +6 -5
  89. package/src/Providers/AWSAppSyncRealTimeProvider/index.ts +154 -90
  90. package/src/Providers/MqttOverWSProvider.ts +120 -53
  91. package/src/Providers/PubSubProvider.ts +1 -1
  92. package/src/Providers/{AWSAppSyncRealTimeProvider/constants.ts → constants.ts} +12 -0
  93. package/src/index.ts +3 -10
  94. package/src/types/Provider.ts +13 -1
  95. package/src/types/PubSub.ts +47 -8
  96. package/src/types/index.ts +0 -43
  97. package/src/utils/ConnectionStateMonitor.ts +20 -5
  98. package/src/utils/ReachabilityMonitor/index.native.ts +5 -0
  99. package/src/utils/ReachabilityMonitor/index.ts +3 -0
  100. package/src/utils/ReconnectionMonitor.ts +74 -0
  101. package/lib/Providers/AWSAppSyncRealTimeProvider/constants.js.map +0 -1
  102. package/lib-esm/Providers/AWSAppSyncRealTimeProvider/constants.js.map +0 -1
package/src/index.ts CHANGED
@@ -14,18 +14,11 @@ import { PubSub } from './PubSub';
14
14
 
15
15
  export * from './Providers';
16
16
 
17
- enum CONTROL_MSG {
18
- CONNECTION_CLOSED = 'Connection closed',
19
- CONNECTION_FAILED = 'Connection failed',
20
- REALTIME_SUBSCRIPTION_INIT_ERROR = 'AppSync Realtime subscription init error',
21
- SUBSCRIPTION_ACK = 'Subscription ack',
22
- TIMEOUT_DISCONNECT = 'Timeout disconnect',
23
- }
17
+ export { CONNECTION_STATE_CHANGE } from './Providers/constants';
24
18
 
25
- export const CONNECTION_STATE_CHANGE = 'ConnectionStateChange';
26
- export { ConnectionState } from './types';
19
+ export { ConnectionState, CONTROL_MSG } from './types';
27
20
 
28
- export { PubSub, CONTROL_MSG };
21
+ export { PubSub };
29
22
 
30
23
  /**
31
24
  * @deprecated use named import
@@ -11,7 +11,19 @@
11
11
  * and limitations under the License.
12
12
  */
13
13
  import Observable from 'zen-observable-ts';
14
- import { ProviderOptions } from './PubSub';
14
+
15
+ export interface PubSubOptions {
16
+ [key: string]: any;
17
+ }
18
+
19
+ export interface ProviderOptions {
20
+ [key: string]: any;
21
+ }
22
+
23
+ /**
24
+ * @deprecated Migrated to ProviderOptions
25
+ */
26
+ export type ProvidertOptions = ProviderOptions;
15
27
 
16
28
  export interface PubSubProvider {
17
29
  // configure your provider
@@ -10,15 +10,54 @@
10
10
  * CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions
11
11
  * and limitations under the License.
12
12
  */
13
- export interface PubSubOptions {
14
- [key: string]: any;
13
+
14
+ export interface SubscriptionObserver<T> {
15
+ closed: boolean;
16
+ next(value: T): void;
17
+ error(errorValue: any): void;
18
+ complete(): void;
15
19
  }
16
20
 
17
- export interface ProviderOptions {
18
- [key: string]: any;
21
+ export enum CONTROL_MSG {
22
+ CONNECTION_CLOSED = 'Connection closed',
23
+ CONNECTION_FAILED = 'Connection failed',
24
+ REALTIME_SUBSCRIPTION_INIT_ERROR = 'AppSync Realtime subscription init error',
25
+ SUBSCRIPTION_ACK = 'Subscription ack',
26
+ TIMEOUT_DISCONNECT = 'Timeout disconnect',
19
27
  }
20
28
 
21
- /**
22
- * @deprecated Migrated to ProviderOptions
23
- */
24
- export type ProvidertOptions = ProviderOptions;
29
+ /** @enum {string} */
30
+ export enum ConnectionState {
31
+ /*
32
+ * The connection is alive and healthy
33
+ */
34
+ Connected = 'Connected',
35
+ /*
36
+ * The connection is alive, but the connection is offline
37
+ */
38
+ ConnectedPendingNetwork = 'ConnectedPendingNetwork',
39
+ /*
40
+ * The connection has been disconnected while in use
41
+ */
42
+ ConnectionDisrupted = 'ConnectionDisrupted',
43
+ /*
44
+ * The connection has been disconnected and the network is offline
45
+ */
46
+ ConnectionDisruptedPendingNetwork = 'ConnectionDisruptedPendingNetwork',
47
+ /*
48
+ * The connection is in the process of connecting
49
+ */
50
+ Connecting = 'Connecting',
51
+ /*
52
+ * The connection is not in use and is being disconnected
53
+ */
54
+ ConnectedPendingDisconnect = 'ConnectedPendingDisconnect',
55
+ /*
56
+ * The connection is not in use and has been disconnected
57
+ */
58
+ Disconnected = 'Disconnected',
59
+ /*
60
+ * The connection is alive, but a keep alive message has been missed
61
+ */
62
+ ConnectedPendingKeepAlive = 'ConnectedPendingKeepAlive',
63
+ }
@@ -12,46 +12,3 @@
12
12
  */
13
13
  export * from './Provider';
14
14
  export * from './PubSub';
15
-
16
- export interface SubscriptionObserver<T> {
17
- closed: boolean;
18
- next(value: T): void;
19
- error(errorValue: any): void;
20
- complete(): void;
21
- }
22
-
23
- /** @enum {string} */
24
- export enum ConnectionState {
25
- /*
26
- * The connection is alive and healthy
27
- */
28
- Connected = 'Connected',
29
- /*
30
- * The connection is alive, but the connection is offline
31
- */
32
- ConnectedPendingNetwork = 'ConnectedPendingNetwork',
33
- /*
34
- * The connection has been disconnected while in use
35
- */
36
- ConnectionDisrupted = 'ConnectionDisrupted',
37
- /*
38
- * The connection has been disconnected and the network is offline
39
- */
40
- ConnectionDisruptedPendingNetwork = 'ConnectionDisruptedPendingNetwork',
41
- /*
42
- * The connection is in the process of connecting
43
- */
44
- Connecting = 'Connecting',
45
- /*
46
- * The connection is not in use and is being disconnected
47
- */
48
- ConnectedPendingDisconnect = 'ConnectedPendingDisconnect',
49
- /*
50
- * The connection is not in use and has been disconnected
51
- */
52
- Disconnected = 'Disconnected',
53
- /*
54
- * The connection is alive, but a keep alive message has been missed
55
- */
56
- ConnectedPendingKeepAlive = 'ConnectedPendingKeepAlive',
57
- }
@@ -13,7 +13,8 @@
13
13
 
14
14
  import { Reachability } from '@aws-amplify/core';
15
15
  import Observable, { ZenObservable } from 'zen-observable-ts';
16
- import { ConnectionState } from '../index';
16
+ import { ConnectionState } from '../types/PubSub';
17
+ import { ReachabilityMonitor } from './ReachabilityMonitor';
17
18
 
18
19
  // Internal types for tracking different connection states
19
20
  type LinkedConnectionState = 'connected' | 'disconnected';
@@ -62,6 +63,7 @@ export class ConnectionStateMonitor {
62
63
  private _linkedConnectionStateObservable: Observable<LinkedConnectionStates>;
63
64
  private _linkedConnectionStateObserver: ZenObservable.SubscriptionObserver<LinkedConnectionStates>;
64
65
  private _networkMonitoringSubscription?: ZenObservable.Subscription;
66
+ private _initialNetworkStateSubscription?: ZenObservable.Subscription;
65
67
 
66
68
  constructor() {
67
69
  this._networkMonitoringSubscription = undefined;
@@ -72,6 +74,16 @@ export class ConnectionStateMonitor {
72
74
  keepAliveState: 'healthy',
73
75
  };
74
76
 
77
+ // Attempt to update the state with the current actual network state
78
+ this._initialNetworkStateSubscription = ReachabilityMonitor().subscribe(
79
+ ({ online }) => {
80
+ this.record(
81
+ online ? CONNECTION_CHANGE.ONLINE : CONNECTION_CHANGE.OFFLINE
82
+ );
83
+ this._initialNetworkStateSubscription?.unsubscribe();
84
+ }
85
+ );
86
+
75
87
  this._linkedConnectionStateObservable =
76
88
  new Observable<LinkedConnectionStates>(connectionStateObserver => {
77
89
  connectionStateObserver.next(this._linkedConnectionState);
@@ -83,15 +95,18 @@ export class ConnectionStateMonitor {
83
95
  * Turn network state monitoring on if it isn't on already
84
96
  */
85
97
  private enableNetworkMonitoring() {
98
+ // If no initial network state was discovered, stop trying
99
+ this._initialNetworkStateSubscription?.unsubscribe();
100
+
86
101
  // Maintain the network state based on the reachability monitor
87
102
  if (this._networkMonitoringSubscription === undefined) {
88
- this._networkMonitoringSubscription = new Reachability()
89
- .networkMonitor()
90
- .subscribe(({ online }) => {
103
+ this._networkMonitoringSubscription = ReachabilityMonitor().subscribe(
104
+ ({ online }) => {
91
105
  this.record(
92
106
  online ? CONNECTION_CHANGE.ONLINE : CONNECTION_CHANGE.OFFLINE
93
107
  );
94
- });
108
+ }
109
+ );
95
110
  }
96
111
  }
97
112
 
@@ -0,0 +1,5 @@
1
+ import { Reachability } from '@aws-amplify/core';
2
+ import { default as NetInfo } from '@react-native-community/netinfo';
3
+
4
+ export const ReachabilityMonitor = () =>
5
+ new Reachability().networkMonitor(NetInfo);
@@ -0,0 +1,3 @@
1
+ import { Reachability } from '@aws-amplify/core';
2
+
3
+ export const ReachabilityMonitor = () => new Reachability().networkMonitor();
@@ -0,0 +1,74 @@
1
+ import { Observer } from 'zen-observable-ts';
2
+ import { RECONNECT_DELAY, RECONNECT_INTERVAL } from '../Providers/constants';
3
+
4
+ export enum ReconnectEvent {
5
+ START_RECONNECT = 'START_RECONNECT',
6
+ HALT_RECONNECT = 'HALT_RECONNECT',
7
+ }
8
+
9
+ /**
10
+ * Captures the reconnect event logic used to determine when to reconnect to PubSub providers.
11
+ * Reconnnect attempts are delayed by 5 seconds to let the interface settle.
12
+ * Attempting to reconnect only once creates unrecoverable states when the network state isn't
13
+ * supported by the browser, so this keeps retrying every minute until halted.
14
+ */
15
+ export class ReconnectionMonitor {
16
+ private reconnectObservers: Observer<void>[] = [];
17
+ private reconnectIntervalId?: ReturnType<typeof setInterval>;
18
+ private reconnectSetTimeoutId?: ReturnType<typeof setTimeout>;
19
+
20
+ /**
21
+ * Add reconnect observer to the list of observers to alert on reconnect
22
+ */
23
+ addObserver(reconnectObserver: Observer<void>) {
24
+ this.reconnectObservers.push(reconnectObserver);
25
+ }
26
+
27
+ /**
28
+ * Given a reconnect event, start the appropriate behavior
29
+ */
30
+ record(event: ReconnectEvent) {
31
+ if (event === ReconnectEvent.START_RECONNECT) {
32
+ // If the reconnection hasn't been started
33
+ if (
34
+ this.reconnectSetTimeoutId === undefined &&
35
+ this.reconnectIntervalId === undefined
36
+ ) {
37
+ this.reconnectSetTimeoutId = setTimeout(() => {
38
+ // Reconnect now
39
+ this._triggerReconnect();
40
+ // Retry reconnect every periodically until it works
41
+ this.reconnectIntervalId = setInterval(() => {
42
+ this._triggerReconnect();
43
+ }, RECONNECT_INTERVAL);
44
+ }, RECONNECT_DELAY);
45
+ }
46
+ }
47
+
48
+ if (event === ReconnectEvent.HALT_RECONNECT) {
49
+ if (this.reconnectIntervalId) {
50
+ clearInterval(this.reconnectIntervalId);
51
+ this.reconnectIntervalId = undefined;
52
+ }
53
+ if (this.reconnectSetTimeoutId) {
54
+ clearTimeout(this.reconnectSetTimeoutId);
55
+ this.reconnectSetTimeoutId = undefined;
56
+ }
57
+ }
58
+ }
59
+
60
+ /**
61
+ * Complete all reconnect observers
62
+ */
63
+ close() {
64
+ this.reconnectObservers.forEach(reconnectObserver => {
65
+ reconnectObserver.complete?.();
66
+ });
67
+ }
68
+
69
+ private _triggerReconnect() {
70
+ this.reconnectObservers.forEach(reconnectObserver => {
71
+ reconnectObserver.next?.();
72
+ });
73
+ }
74
+ }
@@ -1 +0,0 @@
1
- {"version":3,"file":"constants.js","sourceRoot":"","sources":["../../../src/Providers/AWSAppSyncRealTimeProvider/constants.ts"],"names":[],"mappings":";;AAAa,QAAA,YAAY,GAAG,IAAI,CAAC;AAEpB,QAAA,mBAAmB,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;AAEnD,IAAY,aAmDX;AAnDD,WAAY,aAAa;IACxB;;;OAGG;IACH,wDAAuC,CAAA;IACvC;;;OAGG;IACH,0DAAyC,CAAA;IACzC;;;OAGG;IACH,sDAAqC,CAAA;IACrC;;;OAGG;IACH,oCAAmB,CAAA;IACnB;;;OAGG;IACH,4CAA2B,CAAA;IAC3B;;;OAGG;IACH,kCAAiB,CAAA;IACjB;;;OAGG;IACH,iDAAgC,CAAA;IAChC;;;OAGG;IACH,kCAAiB,CAAA;IACjB;;;OAGG;IACH,0CAAyB,CAAA;IACzB;;;OAGG;IACH,oCAAmB,CAAA;AACpB,CAAC,EAnDW,aAAa,GAAb,qBAAa,KAAb,qBAAa,QAmDxB;AAED,IAAY,mBAIX;AAJD,WAAY,mBAAmB;IAC9B,mEAAO,CAAA;IACP,uEAAS,CAAA;IACT,iEAAM,CAAA;AACP,CAAC,EAJW,mBAAmB,GAAnB,2BAAmB,KAAnB,2BAAmB,QAI9B;AAED,IAAY,aAIX;AAJD,WAAY,aAAa;IACxB,qDAAM,CAAA;IACN,mDAAK,CAAA;IACL,6DAAU,CAAA;AACX,CAAC,EAJW,aAAa,GAAb,qBAAa,KAAb,qBAAa,QAIxB;AAEY,QAAA,cAAc,GAAG,CAC7B,OAAO,MAAM,KAAK,WAAW,IAAI,OAAO,MAAM,CAAC,GAAG,KAAK,UAAU;IAChE,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,iBAAiB,CAAC;IAC/B,CAAC,CAAC,mBAAmB,CACZ,CAAC;AAEC,QAAA,4BAA4B,GAAG;IAC3C,MAAM,EAAE,mCAAmC;IAC3C,kBAAkB,EAAE,SAAS;IAC7B,cAAc,EAAE,iCAAiC;CACjD,CAAC;AAEF;;GAEG;AACU,QAAA,uBAAuB,GAAG,KAAK,CAAC;AAE7C;;GAEG;AACU,QAAA,iBAAiB,GAAG,KAAK,CAAC;AAEvC;;GAEG;AACU,QAAA,0BAA0B,GAAG,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC;AAExD;;GAEG;AACU,QAAA,gCAAgC,GAAG,EAAE,GAAG,IAAI,CAAC"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"constants.js","sourceRoot":"","sources":["../../../src/Providers/AWSAppSyncRealTimeProvider/constants.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,IAAM,YAAY,GAAG,IAAI,CAAC;AAEjC,MAAM,CAAC,IAAM,mBAAmB,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;AAEnD,MAAM,CAAN,IAAY,aAmDX;AAnDD,WAAY,aAAa;IACxB;;;OAGG;IACH,wDAAuC,CAAA;IACvC;;;OAGG;IACH,0DAAyC,CAAA;IACzC;;;OAGG;IACH,sDAAqC,CAAA;IACrC;;;OAGG;IACH,oCAAmB,CAAA;IACnB;;;OAGG;IACH,4CAA2B,CAAA;IAC3B;;;OAGG;IACH,kCAAiB,CAAA;IACjB;;;OAGG;IACH,iDAAgC,CAAA;IAChC;;;OAGG;IACH,kCAAiB,CAAA;IACjB;;;OAGG;IACH,0CAAyB,CAAA;IACzB;;;OAGG;IACH,oCAAmB,CAAA;AACpB,CAAC,EAnDW,aAAa,KAAb,aAAa,QAmDxB;AAED,MAAM,CAAN,IAAY,mBAIX;AAJD,WAAY,mBAAmB;IAC9B,mEAAO,CAAA;IACP,uEAAS,CAAA;IACT,iEAAM,CAAA;AACP,CAAC,EAJW,mBAAmB,KAAnB,mBAAmB,QAI9B;AAED,MAAM,CAAN,IAAY,aAIX;AAJD,WAAY,aAAa;IACxB,qDAAM,CAAA;IACN,mDAAK,CAAA;IACL,6DAAU,CAAA;AACX,CAAC,EAJW,aAAa,KAAb,aAAa,QAIxB;AAED,MAAM,CAAC,IAAM,cAAc,GAAG,CAC7B,OAAO,MAAM,KAAK,WAAW,IAAI,OAAO,MAAM,CAAC,GAAG,KAAK,UAAU;IAChE,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,iBAAiB,CAAC;IAC/B,CAAC,CAAC,mBAAmB,CACZ,CAAC;AAEZ,MAAM,CAAC,IAAM,4BAA4B,GAAG;IAC3C,MAAM,EAAE,mCAAmC;IAC3C,kBAAkB,EAAE,SAAS;IAC7B,cAAc,EAAE,iCAAiC;CACjD,CAAC;AAEF;;GAEG;AACH,MAAM,CAAC,IAAM,uBAAuB,GAAG,KAAK,CAAC;AAE7C;;GAEG;AACH,MAAM,CAAC,IAAM,iBAAiB,GAAG,KAAK,CAAC;AAEvC;;GAEG;AACH,MAAM,CAAC,IAAM,0BAA0B,GAAG,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC;AAExD;;GAEG;AACH,MAAM,CAAC,IAAM,gCAAgC,GAAG,EAAE,GAAG,IAAI,CAAC"}