@octostar/platform-api 0.5.31 → 0.5.32

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.
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,QAAQ,CAAC;AACvB,cAAc,SAAS,CAAC;AACxB,cAAc,aAAa,CAAC;AAC5B,cAAc,SAAS,CAAC;AACxB,cAAc,eAAe,CAAC;AAC9B,cAAc,cAAc,CAAC;AAC7B,cAAc,mBAAmB,CAAC;AAClC,cAAc,oBAAoB,CAAC;AACnC,cAAc,oBAAoB,CAAC;AACnC,cAAc,aAAa,CAAC;AAC5B,cAAc,qBAAqB,CAAC;AACpC,cAAc,sBAAsB,CAAC;AACrC,cAAc,iBAAiB,CAAC;AAChC,cAAc,oBAAoB,CAAC;AACnC,cAAc,0BAA0B,CAAC;AACzC,cAAc,0BAA0B,CAAC;AACzC,cAAc,sBAAsB,CAAC;AACrC,cAAc,iBAAiB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,QAAQ,CAAC;AACvB,cAAc,SAAS,CAAC;AACxB,cAAc,aAAa,CAAC;AAC5B,cAAc,SAAS,CAAC;AACxB,cAAc,eAAe,CAAC;AAC9B,cAAc,cAAc,CAAC;AAC7B,cAAc,mBAAmB,CAAC;AAClC,cAAc,oBAAoB,CAAC;AACnC,cAAc,oBAAoB,CAAC;AACnC,cAAc,aAAa,CAAC;AAC5B,cAAc,qBAAqB,CAAC;AACpC,cAAc,sBAAsB,CAAC;AACrC,cAAc,iBAAiB,CAAC;AAChC,cAAc,oBAAoB,CAAC;AACnC,cAAc,0BAA0B,CAAC;AACzC,cAAc,0BAA0B,CAAC;AACzC,cAAc,sBAAsB,CAAC;AACrC,cAAc,iBAAiB,CAAC;AAChC,cAAc,wBAAwB,CAAC"}
package/dist/index.js CHANGED
@@ -16,4 +16,5 @@ export * from './lib/ContextApiRegistry';
16
16
  export * from './lib/SearchQueryBuilder';
17
17
  export * from './lib/browserChannel';
18
18
  export * from './lib/ApiConfig';
19
+ export * from './lib/RemoteDevManager';
19
20
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,QAAQ,CAAC;AACvB,cAAc,SAAS,CAAC;AACxB,cAAc,aAAa,CAAC;AAC5B,cAAc,SAAS,CAAC;AACxB,cAAc,eAAe,CAAC;AAC9B,cAAc,cAAc,CAAC;AAC7B,cAAc,mBAAmB,CAAC;AAClC,cAAc,oBAAoB,CAAC;AACnC,cAAc,oBAAoB,CAAC;AACnC,cAAc,aAAa,CAAC;AAC5B,cAAc,qBAAqB,CAAC;AACpC,cAAc,sBAAsB,CAAC;AACrC,cAAc,iBAAiB,CAAC;AAChC,cAAc,oBAAoB,CAAC;AACnC,cAAc,0BAA0B,CAAC;AACzC,cAAc,0BAA0B,CAAC;AACzC,cAAc,sBAAsB,CAAC;AACrC,cAAc,iBAAiB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,QAAQ,CAAC;AACvB,cAAc,SAAS,CAAC;AACxB,cAAc,aAAa,CAAC;AAC5B,cAAc,SAAS,CAAC;AACxB,cAAc,eAAe,CAAC;AAC9B,cAAc,cAAc,CAAC;AAC7B,cAAc,mBAAmB,CAAC;AAClC,cAAc,oBAAoB,CAAC;AACnC,cAAc,oBAAoB,CAAC;AACnC,cAAc,aAAa,CAAC;AAC5B,cAAc,qBAAqB,CAAC;AACpC,cAAc,sBAAsB,CAAC;AACrC,cAAc,iBAAiB,CAAC;AAChC,cAAc,oBAAoB,CAAC;AACnC,cAAc,0BAA0B,CAAC;AACzC,cAAc,0BAA0B,CAAC;AACzC,cAAc,sBAAsB,CAAC;AACrC,cAAc,iBAAiB,CAAC;AAChC,cAAc,wBAAwB,CAAC"}
@@ -0,0 +1,79 @@
1
+ /**
2
+ * Singleton manager for remote dev channel ID and app entity mapping.
3
+ * Maintains state in memory and persists to localStorage.
4
+ * Automatically initializes from URL parameter and localStorage on first access.
5
+ */
6
+ import { type Entity } from '@octostar/platform-types';
7
+ /**
8
+ * Singleton manager for remote dev channel ID and app entity mapping.
9
+ * Only one remote dev app can be active at a time.
10
+ */
11
+ export declare class RemoteDevManager {
12
+ private static instance;
13
+ private remoteDevChannelId;
14
+ private appEntity;
15
+ private listeners;
16
+ private initialized;
17
+ private constructor();
18
+ /**
19
+ * Get the singleton instance. Automatically initializes on first call.
20
+ */
21
+ static getInstance(): RemoteDevManager;
22
+ /**
23
+ * Get the current remote dev channel ID.
24
+ */
25
+ getRemoteDevChannelId(): string | null;
26
+ /**
27
+ * Check if the current app is running in remote dev mode.
28
+ */
29
+ isRemoteDevMode(): boolean;
30
+ /**
31
+ * Get the current app entity ID (entity_id from appEntity).
32
+ */
33
+ getAppId(): string | null;
34
+ /**
35
+ * Get the current app entity.
36
+ */
37
+ getAppEntity(): Entity | null;
38
+ /**
39
+ * Set the mapping between remote dev channel ID and app entity.
40
+ * Saves to localStorage and notifies all listeners.
41
+ */
42
+ setMapping(remoteDevChannelId: string, entity: Entity): void;
43
+ /**
44
+ * Clear the current mapping.
45
+ * Removes from localStorage and notifies all listeners.
46
+ */
47
+ clear(): void;
48
+ /**
49
+ * Subscribe to state changes.
50
+ * Returns an unsubscribe function.
51
+ */
52
+ subscribe(listener: () => void): () => void;
53
+ /**
54
+ * Private: Initialize from URL parameter and localStorage.
55
+ * Called automatically on first getInstance() call.
56
+ */
57
+ private initialize;
58
+ /**
59
+ * Private: Get remote dev channel ID from URL search parameters.
60
+ */
61
+ private getRemoteDevChannelIdFromUrl;
62
+ /**
63
+ * Private: Remove remoteDevChannelId from URL search parameters.
64
+ */
65
+ private removeRemoteDevChannelIdFromUrl;
66
+ /**
67
+ * Private: Get app entity from localStorage for a given channel ID.
68
+ */
69
+ private getAppEntityForChannel;
70
+ /**
71
+ * Private: Check if localStorage is available.
72
+ */
73
+ private isLocalStorageAvailable;
74
+ /**
75
+ * Private: Notify all listeners of state changes.
76
+ */
77
+ private notifyListeners;
78
+ }
79
+ //# sourceMappingURL=RemoteDevManager.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RemoteDevManager.d.ts","sourceRoot":"","sources":["../../src/lib/RemoteDevManager.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,KAAK,MAAM,EAAE,MAAM,0BAA0B,CAAC;AAIvD;;;GAGG;AACH,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAmB;IAC1C,OAAO,CAAC,kBAAkB,CAAuB;IACjD,OAAO,CAAC,SAAS,CAAuB;IACxC,OAAO,CAAC,SAAS,CAAyB;IAC1C,OAAO,CAAC,WAAW,CAAS;IAE5B,OAAO;IAIP;;OAEG;IACH,MAAM,CAAC,WAAW,IAAI,gBAAgB;IAUtC;;OAEG;IACH,qBAAqB,IAAI,MAAM,GAAG,IAAI;IAItC;;OAEG;IACH,eAAe,IAAI,OAAO;IAI1B;;OAEG;IACH,QAAQ,IAAI,MAAM,GAAG,IAAI;IAIzB;;OAEG;IACH,YAAY,IAAI,MAAM,GAAG,IAAI;IAI7B;;;OAGG;IACH,UAAU,CAAC,kBAAkB,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI;IA6B5D;;;OAGG;IACH,KAAK,IAAI,IAAI;IAeb;;;OAGG;IACH,SAAS,CAAC,QAAQ,EAAE,MAAM,IAAI,GAAG,MAAM,IAAI;IAO3C;;;OAGG;IACH,OAAO,CAAC,UAAU;IAmBlB;;OAEG;IACH,OAAO,CAAC,4BAA4B;IAUpC;;OAEG;IACH,OAAO,CAAC,+BAA+B;IAavC;;OAEG;IACH,OAAO,CAAC,sBAAsB;IA2B9B;;OAEG;IACH,OAAO,CAAC,uBAAuB;IAW/B;;OAEG;IACH,OAAO,CAAC,eAAe;CASxB"}
@@ -0,0 +1,218 @@
1
+ /**
2
+ * Singleton manager for remote dev channel ID and app entity mapping.
3
+ * Maintains state in memory and persists to localStorage.
4
+ * Automatically initializes from URL parameter and localStorage on first access.
5
+ */
6
+ const STORAGE_PREFIX = 'octostarRemoteDevMapping-';
7
+ /**
8
+ * Singleton manager for remote dev channel ID and app entity mapping.
9
+ * Only one remote dev app can be active at a time.
10
+ */
11
+ export class RemoteDevManager {
12
+ constructor() {
13
+ this.remoteDevChannelId = null;
14
+ this.appEntity = null;
15
+ this.listeners = new Set();
16
+ this.initialized = false;
17
+ // Private constructor for singleton pattern
18
+ }
19
+ /**
20
+ * Get the singleton instance. Automatically initializes on first call.
21
+ */
22
+ static getInstance() {
23
+ if (!RemoteDevManager.instance) {
24
+ RemoteDevManager.instance = new RemoteDevManager();
25
+ }
26
+ if (!RemoteDevManager.instance.initialized) {
27
+ RemoteDevManager.instance.initialize();
28
+ }
29
+ return RemoteDevManager.instance;
30
+ }
31
+ /**
32
+ * Get the current remote dev channel ID.
33
+ */
34
+ getRemoteDevChannelId() {
35
+ return this.remoteDevChannelId;
36
+ }
37
+ /**
38
+ * Check if the current app is running in remote dev mode.
39
+ */
40
+ isRemoteDevMode() {
41
+ return this.remoteDevChannelId !== null;
42
+ }
43
+ /**
44
+ * Get the current app entity ID (entity_id from appEntity).
45
+ */
46
+ getAppId() {
47
+ return this.appEntity?.entity_id ?? null;
48
+ }
49
+ /**
50
+ * Get the current app entity.
51
+ */
52
+ getAppEntity() {
53
+ return this.appEntity;
54
+ }
55
+ /**
56
+ * Set the mapping between remote dev channel ID and app entity.
57
+ * Saves to localStorage and notifies all listeners.
58
+ */
59
+ setMapping(remoteDevChannelId, entity) {
60
+ if (!remoteDevChannelId || !entity || !entity.entity_id || !entity.entity_type || !entity.entity_label) {
61
+ return;
62
+ }
63
+ // Check localStorage accessibility
64
+ if (!this.isLocalStorageAvailable()) {
65
+ return;
66
+ }
67
+ const key = `${STORAGE_PREFIX}${remoteDevChannelId}`;
68
+ // Store the minimal entity object with just the required fields
69
+ const entityToStore = {
70
+ entity_type: entity.entity_type,
71
+ entity_id: entity.entity_id,
72
+ entity_label: entity.entity_label,
73
+ };
74
+ const valueToStore = JSON.stringify(entityToStore);
75
+ try {
76
+ localStorage.setItem(key, valueToStore);
77
+ this.remoteDevChannelId = remoteDevChannelId;
78
+ this.appEntity = entityToStore;
79
+ this.notifyListeners();
80
+ }
81
+ catch (error) {
82
+ // Silently fail if storage is unavailable
83
+ }
84
+ }
85
+ /**
86
+ * Clear the current mapping.
87
+ * Removes from localStorage and notifies all listeners.
88
+ */
89
+ clear() {
90
+ if (this.remoteDevChannelId) {
91
+ const key = `${STORAGE_PREFIX}${this.remoteDevChannelId}`;
92
+ try {
93
+ localStorage.removeItem(key);
94
+ }
95
+ catch (error) {
96
+ // Silently fail if storage is unavailable
97
+ }
98
+ }
99
+ this.remoteDevChannelId = null;
100
+ this.appEntity = null;
101
+ this.notifyListeners();
102
+ }
103
+ /**
104
+ * Subscribe to state changes.
105
+ * Returns an unsubscribe function.
106
+ */
107
+ subscribe(listener) {
108
+ this.listeners.add(listener);
109
+ return () => {
110
+ this.listeners.delete(listener);
111
+ };
112
+ }
113
+ /**
114
+ * Private: Initialize from URL parameter and localStorage.
115
+ * Called automatically on first getInstance() call.
116
+ */
117
+ initialize() {
118
+ if (this.initialized) {
119
+ return;
120
+ }
121
+ this.initialized = true;
122
+ // Get remoteDevChannelId from URL
123
+ const urlChannelId = this.getRemoteDevChannelIdFromUrl();
124
+ if (urlChannelId) {
125
+ // Clear URL parameter immediately
126
+ this.removeRemoteDevChannelIdFromUrl();
127
+ // Always set remoteDevChannelId when present in URL (so modal can show for unrecognised IDs)
128
+ this.remoteDevChannelId = urlChannelId;
129
+ // Load entity from localStorage if we have a cached mapping
130
+ this.appEntity = this.getAppEntityForChannel(urlChannelId);
131
+ }
132
+ }
133
+ /**
134
+ * Private: Get remote dev channel ID from URL search parameters.
135
+ */
136
+ getRemoteDevChannelIdFromUrl() {
137
+ if (typeof window === 'undefined')
138
+ return null;
139
+ try {
140
+ const params = new URLSearchParams(window.location.search);
141
+ return params.get('remoteDevChannelId');
142
+ }
143
+ catch {
144
+ return null;
145
+ }
146
+ }
147
+ /**
148
+ * Private: Remove remoteDevChannelId from URL search parameters.
149
+ */
150
+ removeRemoteDevChannelIdFromUrl() {
151
+ if (typeof window === 'undefined')
152
+ return;
153
+ try {
154
+ const params = new URLSearchParams(window.location.search);
155
+ params.delete('remoteDevChannelId');
156
+ const newUrl = window.location.pathname + (params.toString() ? `?${params.toString()}` : '') + window.location.hash;
157
+ window.history.replaceState({}, '', newUrl);
158
+ }
159
+ catch {
160
+ // Silently fail if URL manipulation fails
161
+ }
162
+ }
163
+ /**
164
+ * Private: Get app entity from localStorage for a given channel ID.
165
+ */
166
+ getAppEntityForChannel(channelId) {
167
+ if (!channelId)
168
+ return null;
169
+ if (!this.isLocalStorageAvailable()) {
170
+ return null;
171
+ }
172
+ const key = `${STORAGE_PREFIX}${channelId}`;
173
+ const stored = localStorage.getItem(key);
174
+ if (!stored) {
175
+ return null;
176
+ }
177
+ try {
178
+ const entity = JSON.parse(stored);
179
+ // Validate it has the required fields
180
+ if (entity?.entity_type && entity.entity_id && entity.entity_label) {
181
+ return entity;
182
+ }
183
+ console.error('Invalid remote dev mapping:', entity);
184
+ }
185
+ catch (error) {
186
+ console.error('Failed to parse remote dev mapping:', error);
187
+ }
188
+ return null;
189
+ }
190
+ /**
191
+ * Private: Check if localStorage is available.
192
+ */
193
+ isLocalStorageAvailable() {
194
+ try {
195
+ const testKey = '__test_storage_access__';
196
+ localStorage.setItem(testKey, 'test');
197
+ localStorage.removeItem(testKey);
198
+ return true;
199
+ }
200
+ catch {
201
+ return false;
202
+ }
203
+ }
204
+ /**
205
+ * Private: Notify all listeners of state changes.
206
+ */
207
+ notifyListeners() {
208
+ this.listeners.forEach(listener => {
209
+ try {
210
+ listener();
211
+ }
212
+ catch (error) {
213
+ console.error('Error in RemoteDevManager listener:', error);
214
+ }
215
+ });
216
+ }
217
+ }
218
+ //# sourceMappingURL=RemoteDevManager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RemoteDevManager.js","sourceRoot":"","sources":["../../src/lib/RemoteDevManager.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,MAAM,cAAc,GAAG,2BAA2B,CAAC;AAEnD;;;GAGG;AACH,MAAM,OAAO,gBAAgB;IAO3B;QALQ,uBAAkB,GAAkB,IAAI,CAAC;QACzC,cAAS,GAAkB,IAAI,CAAC;QAChC,cAAS,GAAG,IAAI,GAAG,EAAc,CAAC;QAClC,gBAAW,GAAG,KAAK,CAAC;QAG1B,4CAA4C;IAC9C,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,WAAW;QAChB,IAAI,CAAC,gBAAgB,CAAC,QAAQ,EAAE,CAAC;YAC/B,gBAAgB,CAAC,QAAQ,GAAG,IAAI,gBAAgB,EAAE,CAAC;QACrD,CAAC;QACD,IAAI,CAAC,gBAAgB,CAAC,QAAQ,CAAC,WAAW,EAAE,CAAC;YAC3C,gBAAgB,CAAC,QAAQ,CAAC,UAAU,EAAE,CAAC;QACzC,CAAC;QACD,OAAO,gBAAgB,CAAC,QAAQ,CAAC;IACnC,CAAC;IAED;;OAEG;IACH,qBAAqB;QACnB,OAAO,IAAI,CAAC,kBAAkB,CAAC;IACjC,CAAC;IAED;;OAEG;IACH,eAAe;QACb,OAAO,IAAI,CAAC,kBAAkB,KAAK,IAAI,CAAC;IAC1C,CAAC;IAED;;OAEG;IACH,QAAQ;QACN,OAAO,IAAI,CAAC,SAAS,EAAE,SAAS,IAAI,IAAI,CAAC;IAC3C,CAAC;IAED;;OAEG;IACH,YAAY;QACV,OAAO,IAAI,CAAC,SAAS,CAAC;IACxB,CAAC;IAED;;;OAGG;IACH,UAAU,CAAC,kBAA0B,EAAE,MAAc;QACnD,IAAI,CAAC,kBAAkB,IAAI,CAAC,MAAM,IAAI,CAAC,MAAM,CAAC,SAAS,IAAI,CAAC,MAAM,CAAC,WAAW,IAAI,CAAC,MAAM,CAAC,YAAY,EAAE,CAAC;YACvG,OAAO;QACT,CAAC;QAED,mCAAmC;QACnC,IAAI,CAAC,IAAI,CAAC,uBAAuB,EAAE,EAAE,CAAC;YACpC,OAAO;QACT,CAAC;QAED,MAAM,GAAG,GAAG,GAAG,cAAc,GAAG,kBAAkB,EAAE,CAAC;QACrD,gEAAgE;QAChE,MAAM,aAAa,GAAW;YAC5B,WAAW,EAAE,MAAM,CAAC,WAAW;YAC/B,SAAS,EAAE,MAAM,CAAC,SAAS;YAC3B,YAAY,EAAE,MAAM,CAAC,YAAY;SAClC,CAAC;QACF,MAAM,YAAY,GAAG,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC,CAAC;QAEnD,IAAI,CAAC;YACH,YAAY,CAAC,OAAO,CAAC,GAAG,EAAE,YAAY,CAAC,CAAC;YACxC,IAAI,CAAC,kBAAkB,GAAG,kBAAkB,CAAC;YAC7C,IAAI,CAAC,SAAS,GAAG,aAAa,CAAC;YAC/B,IAAI,CAAC,eAAe,EAAE,CAAC;QACzB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,0CAA0C;QAC5C,CAAC;IACH,CAAC;IAED;;;OAGG;IACH,KAAK;QACH,IAAI,IAAI,CAAC,kBAAkB,EAAE,CAAC;YAC5B,MAAM,GAAG,GAAG,GAAG,cAAc,GAAG,IAAI,CAAC,kBAAkB,EAAE,CAAC;YAC1D,IAAI,CAAC;gBACH,YAAY,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;YAC/B,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,0CAA0C;YAC5C,CAAC;QACH,CAAC;QAED,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC;QAC/B,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;QACtB,IAAI,CAAC,eAAe,EAAE,CAAC;IACzB,CAAC;IAED;;;OAGG;IACH,SAAS,CAAC,QAAoB;QAC5B,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QAC7B,OAAO,GAAG,EAAE;YACV,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;QAClC,CAAC,CAAC;IACJ,CAAC;IAED;;;OAGG;IACK,UAAU;QAChB,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;YACrB,OAAO;QACT,CAAC;QACD,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;QAExB,kCAAkC;QAClC,MAAM,YAAY,GAAG,IAAI,CAAC,4BAA4B,EAAE,CAAC;QACzD,IAAI,YAAY,EAAE,CAAC;YACjB,kCAAkC;YAClC,IAAI,CAAC,+BAA+B,EAAE,CAAC;YAEvC,6FAA6F;YAC7F,IAAI,CAAC,kBAAkB,GAAG,YAAY,CAAC;YACvC,4DAA4D;YAC5D,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,sBAAsB,CAAC,YAAY,CAAC,CAAC;QAC7D,CAAC;IACH,CAAC;IAED;;OAEG;IACK,4BAA4B;QAClC,IAAI,OAAO,MAAM,KAAK,WAAW;YAAE,OAAO,IAAI,CAAC;QAC/C,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,IAAI,eAAe,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;YAC3D,OAAO,MAAM,CAAC,GAAG,CAAC,oBAAoB,CAAC,CAAC;QAC1C,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,IAAI,CAAC;QACd,CAAC;IACH,CAAC;IAED;;OAEG;IACK,+BAA+B;QACrC,IAAI,OAAO,MAAM,KAAK,WAAW;YAAE,OAAO;QAC1C,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,IAAI,eAAe,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;YAC3D,MAAM,CAAC,MAAM,CAAC,oBAAoB,CAAC,CAAC;YACpC,MAAM,MAAM,GACV,MAAM,CAAC,QAAQ,CAAC,QAAQ,GAAG,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,IAAI,MAAM,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC;YACvG,MAAM,CAAC,OAAO,CAAC,YAAY,CAAC,EAAE,EAAE,EAAE,EAAE,MAAM,CAAC,CAAC;QAC9C,CAAC;QAAC,MAAM,CAAC;YACP,0CAA0C;QAC5C,CAAC;IACH,CAAC;IAED;;OAEG;IACK,sBAAsB,CAAC,SAAiB;QAC9C,IAAI,CAAC,SAAS;YAAE,OAAO,IAAI,CAAC;QAE5B,IAAI,CAAC,IAAI,CAAC,uBAAuB,EAAE,EAAE,CAAC;YACpC,OAAO,IAAI,CAAC;QACd,CAAC;QAED,MAAM,GAAG,GAAG,GAAG,cAAc,GAAG,SAAS,EAAE,CAAC;QAC5C,MAAM,MAAM,GAAG,YAAY,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QAEzC,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,OAAO,IAAI,CAAC;QACd,CAAC;QAED,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;YAClC,sCAAsC;YACtC,IAAI,MAAM,EAAE,WAAW,IAAI,MAAM,CAAC,SAAS,IAAI,MAAM,CAAC,YAAY,EAAE,CAAC;gBACnE,OAAO,MAAgB,CAAC;YAC1B,CAAC;YACD,OAAO,CAAC,KAAK,CAAC,6BAA6B,EAAE,MAAM,CAAC,CAAC;QACvD,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,KAAK,CAAC,qCAAqC,EAAE,KAAK,CAAC,CAAC;QAC9D,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAED;;OAEG;IACK,uBAAuB;QAC7B,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,yBAAyB,CAAC;YAC1C,YAAY,CAAC,OAAO,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;YACtC,YAAY,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;YACjC,OAAO,IAAI,CAAC;QACd,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,KAAK,CAAC;QACf,CAAC;IACH,CAAC;IAED;;OAEG;IACK,eAAe;QACrB,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE;YAChC,IAAI,CAAC;gBACH,QAAQ,EAAE,CAAC;YACb,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,OAAO,CAAC,KAAK,CAAC,qCAAqC,EAAE,KAAK,CAAC,CAAC;YAC9D,CAAC;QACH,CAAC,CAAC,CAAC;IACL,CAAC;CACF"}