@livequery/client 2.0.31 → 2.0.105

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 (51) hide show
  1. package/README.md +477 -0
  2. package/dist/LivequeryClient.d.ts +67 -0
  3. package/dist/LivequeryClient.d.ts.map +1 -0
  4. package/dist/LivequeryClient.js +343 -0
  5. package/dist/LivequeryClient.js.map +1 -0
  6. package/dist/LivequeryCollection.d.ts +92 -0
  7. package/dist/LivequeryCollection.d.ts.map +1 -0
  8. package/dist/LivequeryCollection.js +231 -0
  9. package/dist/LivequeryCollection.js.map +1 -0
  10. package/dist/LivequeryDocument.d.ts +23 -0
  11. package/dist/LivequeryDocument.d.ts.map +1 -0
  12. package/dist/LivequeryDocument.js +22 -0
  13. package/dist/LivequeryDocument.js.map +1 -0
  14. package/dist/LivequeryMemoryStorage.d.ts +14 -0
  15. package/dist/LivequeryMemoryStorage.d.ts.map +1 -0
  16. package/dist/LivequeryMemoryStorage.js +89 -0
  17. package/dist/LivequeryMemoryStorage.js.map +1 -0
  18. package/dist/LivequeryStorge.d.ts +12 -0
  19. package/dist/LivequeryStorge.d.ts.map +1 -0
  20. package/dist/LivequeryStorge.js +2 -0
  21. package/dist/LivequeryStorge.js.map +1 -0
  22. package/dist/LivequeryTransporter.d.ts +22 -0
  23. package/dist/LivequeryTransporter.d.ts.map +1 -0
  24. package/dist/LivequeryTransporter.js +2 -0
  25. package/dist/LivequeryTransporter.js.map +1 -0
  26. package/dist/helpers/filterDocs.d.ts +5 -0
  27. package/dist/helpers/filterDocs.d.ts.map +1 -0
  28. package/dist/helpers/filterDocs.js +80 -0
  29. package/dist/helpers/filterDocs.js.map +1 -0
  30. package/dist/helpers/tryCatch.d.ts +2 -0
  31. package/dist/helpers/tryCatch.d.ts.map +1 -0
  32. package/dist/helpers/tryCatch.js +10 -0
  33. package/dist/helpers/tryCatch.js.map +1 -0
  34. package/dist/helpers/whenCompleted.d.ts +3 -0
  35. package/dist/helpers/whenCompleted.d.ts.map +1 -0
  36. package/dist/helpers/whenCompleted.js +5 -0
  37. package/dist/helpers/whenCompleted.js.map +1 -0
  38. package/dist/index.d.ts +9 -0
  39. package/dist/index.d.ts.map +1 -0
  40. package/dist/index.js +9 -0
  41. package/dist/index.js.map +1 -0
  42. package/dist/types.d.ts +70 -0
  43. package/dist/types.d.ts.map +1 -0
  44. package/dist/types.js +2 -0
  45. package/dist/types.js.map +1 -0
  46. package/package.json +95 -18
  47. package/build/Collection.d.ts +0 -52
  48. package/build/Collection.js +0 -366
  49. package/build/index.d.ts +0 -1
  50. package/build/index.js +0 -1
  51. package/build/tsconfig.tsbuildinfo +0 -1
@@ -0,0 +1,343 @@
1
+ import { concatMap, defer, EMPTY, expand, filter, finalize, forkJoin, from, groupBy, lastValueFrom, map, merge, mergeMap, Observable, of, reduce, scan, shareReplay, Subject, switchMap, takeUntil, takeWhile, tap, toArray } from "rxjs";
2
+ import { tryCatch } from "./helpers/tryCatch.js";
3
+ import { whenCompleted } from "./helpers/whenCompleted.js";
4
+ import { matchesAllFilters } from "./helpers/filterDocs.js";
5
+ export class LivequeryClient {
6
+ config;
7
+ #collections = new Map();
8
+ #refs = new Map();
9
+ #queries$ = new Subject();
10
+ #adding = new Map();
11
+ constructor(config) {
12
+ this.config = config;
13
+ this.#start();
14
+ }
15
+ #cache = new Map();
16
+ #query(e, deduplicate_key) {
17
+ const clear = () => deduplicate_key && this.#cache.delete(deduplicate_key);
18
+ const cached = deduplicate_key && this.#cache.get(deduplicate_key);
19
+ if (cached)
20
+ return Object.assign(cached, { clear });
21
+ const $ = from(Object.values(this.config.transporters)).pipe(mergeMap(transporter => (transporter.query(e).pipe(tap(result => {
22
+ for (const change of result.changes || []) {
23
+ change.type == 'added' && change.data && this.config.storage.add(change.collection_ref, {
24
+ id: change.data.id,
25
+ ...change.data
26
+ });
27
+ change.type == 'modified' && change.data && this.config.storage.update(change.collection_ref, change.id, change.data);
28
+ change.type == 'removed' && this.config.storage.delete(change.collection_ref, change.id);
29
+ }
30
+ }), map((result, index) => ({ result, index })), mergeMap(({ result, index }) => {
31
+ if (index == 0)
32
+ return of(result);
33
+ const changes = result.changes || [];
34
+ if (changes.length === 0)
35
+ return EMPTY;
36
+ const lock$ = this.#adding.get(e.collection.collection_ref);
37
+ if (!lock$) {
38
+ this.#broadcast(e.collection.collection_ref, 'realtime', changes);
39
+ return EMPTY;
40
+ }
41
+ const ok_changes = changes.filter(c => c.type != 'added');
42
+ const delay_changes = changes.filter(c => c.type == 'added');
43
+ this.#broadcast(e.collection.collection_ref, 'realtime', ok_changes);
44
+ return lock$.pipe(tap(() => this.#broadcast(e.collection.collection_ref, 'realtime', delay_changes)), switchMap(() => EMPTY));
45
+ })))), finalize(clear), shareReplay());
46
+ deduplicate_key && this.#cache.set(deduplicate_key, $);
47
+ return Object.assign($, { clear });
48
+ }
49
+ #start() {
50
+ lastValueFrom(merge(
51
+ // Server queries
52
+ this.#queries$.pipe(filter(req => req.collection.mode == 'server-first' || req.collection.mode == 'cache-first'), mergeMap(e => {
53
+ const deduplicate_key = `${e.collection.collection_id}:${JSON.stringify(e.filters)}`;
54
+ const before = e.filters?.[':before'];
55
+ const after = e.filters?.[':after'];
56
+ const around = e.filters?.[':around'];
57
+ const loading = ((!before && !after) || (before && after) || around) ? 'all' : (before ? 'prev' : 'next');
58
+ e.collection.data$.next({
59
+ from: 'query',
60
+ loading: e.collection.document_id ? 'all' : loading
61
+ });
62
+ return this.#query(e, deduplicate_key).pipe(takeUntil(whenCompleted(e.collection.data$)), tap(result => {
63
+ e.collection.data$.next({
64
+ ...result,
65
+ from: 'query',
66
+ loading: null
67
+ });
68
+ }));
69
+ })),
70
+ // Local queries
71
+ this.#queries$.pipe(filter(req => req.collection.mode == 'local-first'), groupBy(e => `${e.collection.collection_ref}/${e.collection.document_id || '::'}`), mergeMap($ => $.pipe(mergeMap((e, index) => {
72
+ index == 0 && e.collection.data$.next({
73
+ from: 'query',
74
+ loading: 'all'
75
+ });
76
+ return merge(of(e), index > 0 ? EMPTY : defer(() => {
77
+ return this.#query(e).pipe(expand(res => {
78
+ const next = res.paging?.next;
79
+ if (!next)
80
+ return EMPTY;
81
+ return this.#query({
82
+ ...e,
83
+ filters: { ':after': next.cursor }
84
+ });
85
+ }), tap(result => {
86
+ this.#broadcast(e.collection.collection_ref, 'query', result.changes || []);
87
+ }));
88
+ }).pipe(switchMap(() => EMPTY)));
89
+ }), scan((p, c) => new Set([...p, c.collection.data$].filter($ => !$.closed)), new Set()), map(set => [...set].map($ => whenCompleted($))), switchMap(list => forkJoin(list)), takeWhile(() => false))))));
90
+ }
91
+ watch(ref, collection_id, mode) {
92
+ const refs = ref.split('/');
93
+ const document_id = refs.length % 2 == 0 ? refs[refs.length - 1] : undefined;
94
+ const collection_ref = refs.length % 2 == 0 ? refs.slice(0, -1).join('/') : ref;
95
+ const collections = this.#refs.get(collection_ref) || new Set();
96
+ collections.add(collection_id);
97
+ this.#refs.set(collection_ref, collections);
98
+ const data$ = new Subject();
99
+ this.#collections.set(collection_id, {
100
+ data$,
101
+ document_id,
102
+ collection_id,
103
+ collection_ref,
104
+ mode,
105
+ filters: {}
106
+ });
107
+ return data$.pipe(finalize(() => {
108
+ this.#collections.delete(collection_id);
109
+ collections.delete(collection_id);
110
+ if (collections.size === 0) {
111
+ this.#refs.delete(collection_ref);
112
+ }
113
+ }));
114
+ }
115
+ async query(req) {
116
+ const collection = this.#collections.get(req.collection_id);
117
+ if (!collection)
118
+ throw new Error(`Collection with id ${req.collection_id} not found`);
119
+ // If document
120
+ if (collection.document_id) {
121
+ const ids = this.#refs.get(collection.collection_ref);
122
+ const collections = ids ? [...ids].map(id => this.#collections.get(id)).filter(c => c && c.document_id) : [];
123
+ const doc = await this.config.storage.get(collection.collection_ref, collection.document_id);
124
+ if (collections.length > 0 && doc)
125
+ return {
126
+ documents: [doc]
127
+ };
128
+ }
129
+ setTimeout(() => this.#queries$.next({
130
+ ...req,
131
+ filters: collection.mode == 'local-first' ? {} : req.filters,
132
+ collection
133
+ }));
134
+ // If collection
135
+ collection.filters = req.filters || {};
136
+ if (collection.mode == 'local-first') {
137
+ return await this.config.storage.query(req.ref, req.filters);
138
+ }
139
+ if (collection.mode == 'cache-first') {
140
+ const before = req.filters?.[':before'];
141
+ const after = req.filters?.[':after'];
142
+ const is_first_query = !before && !after;
143
+ if (is_first_query) {
144
+ return await this.config.storage.query(req.ref, req.filters);
145
+ }
146
+ }
147
+ }
148
+ #broadcast(collection_ref, from, events) {
149
+ const collections = this.#refs.get(collection_ref) || new Set();
150
+ for (const collection_id of collections) {
151
+ const collection = this.#collections.get(collection_id);
152
+ if (!collection)
153
+ continue;
154
+ if (collection.document_id) {
155
+ // Is document
156
+ const change = events.find(c => c.id == collection.document_id);
157
+ change && collection.data$.next({
158
+ changes: [change],
159
+ from,
160
+ loading: null
161
+ });
162
+ continue;
163
+ }
164
+ // If local first collection
165
+ if (collection.mode == 'local-first') {
166
+ const changes = events.filter(e => {
167
+ if (e.type == 'added')
168
+ return e.data && matchesAllFilters(e.data, collection.filters);
169
+ // if (e.type == 'modified') {
170
+ // if (!e.data) return false
171
+ // // TODO: Delete on data not matched
172
+ // if (!matchesAllFilters(e.data, collection.filters)) {
173
+ // e.type = 'removed'
174
+ // }
175
+ // }
176
+ return true;
177
+ });
178
+ // Is collection
179
+ collection.data$.next({
180
+ changes,
181
+ from,
182
+ ...from == 'query' ? { loading: null } : {}
183
+ });
184
+ continue;
185
+ }
186
+ collection.data$.next({
187
+ changes: events,
188
+ from,
189
+ ...from == 'query' ? { loading: null } : {}
190
+ });
191
+ }
192
+ }
193
+ #push(collection_ref, id, doc) {
194
+ const cleanDoc = Object.entries(doc).reduce((p, [k, v]) => {
195
+ if (k.startsWith('_'))
196
+ return p;
197
+ return { ...p, [k]: v };
198
+ }, {});
199
+ return lastValueFrom(from(Object.entries(this.config.transporters)).pipe(concatMap(async ([tid, transporter]) => {
200
+ if (String(id).startsWith('local:')) {
201
+ // lock by collection_ref
202
+ const o = new Subject();
203
+ this.#adding.set(collection_ref, o);
204
+ const [e, data] = await tryCatch(() => transporter.add(collection_ref, cleanDoc));
205
+ // unlock
206
+ if (data && data.id) {
207
+ const fnd = {
208
+ ...data,
209
+ _adding: undefined,
210
+ ...e ? { _adding_error: e } : {}
211
+ };
212
+ await this.config.storage.update(collection_ref, id, fnd);
213
+ this.#broadcast(collection_ref, 'action', [{
214
+ collection_ref,
215
+ type: 'modified',
216
+ id,
217
+ data: fnd
218
+ }]);
219
+ }
220
+ o.next();
221
+ o.complete();
222
+ this.#adding.delete(collection_ref);
223
+ return { [tid]: data };
224
+ }
225
+ // _deleting flag → soft-delete on remote then hard-delete locally
226
+ if (doc._deleting) {
227
+ const [e, data] = await tryCatch(() => transporter.delete(collection_ref, id));
228
+ if (e) {
229
+ const fnd = {
230
+ _deleting: undefined,
231
+ _deleting_error: e
232
+ };
233
+ await this.config.storage.update(collection_ref, id, fnd);
234
+ this.#broadcast(collection_ref, 'action', [{
235
+ collection_ref,
236
+ type: 'modified',
237
+ id,
238
+ data: fnd
239
+ }]);
240
+ }
241
+ else {
242
+ await this.config.storage.delete(collection_ref, id);
243
+ this.#broadcast(collection_ref, 'action', [{
244
+ collection_ref,
245
+ type: 'removed',
246
+ id
247
+ }]);
248
+ }
249
+ return { [tid]: data };
250
+ }
251
+ // _prev present → document was updated locally, push changed fields to remote
252
+ if (doc._prev && Object.keys(doc._prev).length > 0) {
253
+ const changedFields = Object.keys(doc._prev).reduce((acc, key) => ({
254
+ ...acc,
255
+ [key]: doc[key]
256
+ }), {});
257
+ const [e, data] = await tryCatch(() => transporter.update(collection_ref, id, changedFields));
258
+ const fnd = {
259
+ _prev: undefined,
260
+ _updating: undefined,
261
+ _updating_error: e
262
+ };
263
+ await this.config.storage.update(collection_ref, id, fnd);
264
+ this.#broadcast(collection_ref, 'action', [{
265
+ collection_ref,
266
+ type: 'modified',
267
+ id,
268
+ data: fnd
269
+ }]);
270
+ return { [tid]: data };
271
+ }
272
+ return {};
273
+ }), reduce((acc, curr) => ({ ...acc, ...curr }), {})), { defaultValue: {} });
274
+ }
275
+ async add(collection_ref, doc) {
276
+ const local = await this.config.storage.add(collection_ref, { ...doc, _adding: true });
277
+ this.#broadcast(collection_ref, 'action', [{
278
+ collection_ref,
279
+ id: local.id,
280
+ type: 'added',
281
+ data: local
282
+ }]);
283
+ const remotes = await this.#push(collection_ref, local.id, local);
284
+ return {
285
+ local,
286
+ ...remotes
287
+ };
288
+ }
289
+ async update(collection_ref, id, data) {
290
+ const old = await this.config.storage.get(collection_ref, id);
291
+ if (!old)
292
+ return;
293
+ const _prev = Object.keys(data).reduce((acc, key) => {
294
+ if (key in (old._prev || {}))
295
+ return acc;
296
+ return {
297
+ ...acc,
298
+ [key]: old[key]
299
+ };
300
+ }, old._prev || {});
301
+ await this.config.storage.update(collection_ref, id, { _prev, _updating: true, ...data, });
302
+ await this.#broadcast(collection_ref, 'action', [{
303
+ collection_ref,
304
+ id,
305
+ type: 'modified',
306
+ data: {
307
+ _prev,
308
+ _updating: true,
309
+ ...data,
310
+ }
311
+ }]);
312
+ const updated = await this.#push(collection_ref, id, { ...data, _prev, _updating: true });
313
+ return updated;
314
+ }
315
+ async delete(collection_ref, id) {
316
+ const soft = Object.keys(this.config.transporters).length > 0;
317
+ const is_local_doc = id.startsWith('local:');
318
+ if (!soft || is_local_doc) {
319
+ await this.config.storage.delete(collection_ref, id);
320
+ await this.#broadcast(collection_ref, 'action', [{
321
+ collection_ref,
322
+ id,
323
+ type: 'removed'
324
+ }]);
325
+ return;
326
+ }
327
+ await this.config.storage.update(collection_ref, id, { _deleting: true });
328
+ const doc = await this.#broadcast(collection_ref, 'action', [{
329
+ collection_ref,
330
+ id,
331
+ type: 'modified',
332
+ data: {
333
+ _deleting: true
334
+ }
335
+ }]);
336
+ const deleted = await this.#push(collection_ref, id, { _deleting: true });
337
+ return deleted;
338
+ }
339
+ trigger(action) {
340
+ return from(Object.values(this.config.transporters)).pipe(mergeMap(transporter => transporter.trigger(action)));
341
+ }
342
+ }
343
+ //# sourceMappingURL=LivequeryClient.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"LivequeryClient.js","sourceRoot":"","sources":["../src/LivequeryClient.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,92 @@
1
+ import { BehaviorSubject, Observable, Subscription } from "rxjs";
2
+ import { LivequeryClient, type CollectionMetadata, type LivequeryLoadingState } from "./LivequeryClient.js";
3
+ import type { Doc, DocState, LivequeryFilters, LivequeryPaging } from "./types.js";
4
+ import { LivequeryDocument } from "./LivequeryDocument.js";
5
+ export type LivequeryCollectionOptions<T extends Doc> = {
6
+ core: LivequeryClient;
7
+ filters: Partial<LivequeryFilters<T>>;
8
+ lazy: boolean;
9
+ debounce: number;
10
+ mode: CollectionMetadata['mode'];
11
+ };
12
+ export declare class LivequeryCollection<T extends Doc> {
13
+ #private;
14
+ private core;
15
+ private options;
16
+ readonly id: string;
17
+ ref: string | undefined;
18
+ collection_ref: string | undefined;
19
+ readonly items: BehaviorSubject<LivequeryDocument<DocState<T>>[]>;
20
+ readonly summary: BehaviorSubject<Record<string, any>>;
21
+ readonly metadata: BehaviorSubject<Record<string, any>>;
22
+ readonly loading: BehaviorSubject<LivequeryLoadingState | null>;
23
+ readonly filters: BehaviorSubject<Partial<LivequeryFilters<T>>>;
24
+ readonly paging: BehaviorSubject<LivequeryPaging>;
25
+ readonly error: BehaviorSubject<{
26
+ code: string;
27
+ message: string;
28
+ } | null>;
29
+ constructor(core: LivequeryClient, options?: Partial<LivequeryCollectionOptions<T>>);
30
+ initialize(ref: string): Subscription | undefined;
31
+ query(filters: Partial<LivequeryFilters<T>>): Promise<void>;
32
+ debounceQuery(filters: Partial<LivequeryFilters<T>>): Promise<void>;
33
+ loadMore(): Promise<void>;
34
+ loadPrev(): Promise<void>;
35
+ loadAround(cursor: string): Promise<void>;
36
+ add(payload: Partial<T>): Promise<{
37
+ [key: string]: T;
38
+ }>;
39
+ update(id: string, payload: Partial<T>): Promise<{
40
+ [key: string]: {
41
+ id: string;
42
+ } & Partial<T>;
43
+ } | undefined>;
44
+ delete(id: string): Promise<{
45
+ [key: string]: {
46
+ id: string;
47
+ };
48
+ } | undefined>;
49
+ trigger<T>(action: string, payload?: Record<string, any>): Observable<{
50
+ data: T;
51
+ error?: Error;
52
+ }>;
53
+ resetError(): void;
54
+ watch(check: (a: T, b: T) => boolean): Observable<[T & {
55
+ _deleting?: boolean;
56
+ _deleting_error?: import("./types.js").DocError;
57
+ _updating?: boolean;
58
+ _updating_error?: import("./types.js").DocError;
59
+ _adding?: boolean;
60
+ _adding_error?: import("./types.js").DocError;
61
+ _remotes?: Record<string, string | number>;
62
+ _prev?: Partial<T> | undefined;
63
+ } & {
64
+ _deleting?: boolean;
65
+ _deleting_error?: import("./types.js").DocError;
66
+ _updating?: boolean;
67
+ _updating_error?: import("./types.js").DocError;
68
+ _adding?: boolean;
69
+ _adding_error?: import("./types.js").DocError;
70
+ _remotes?: Record<string, string | number>;
71
+ _prev?: Partial<DocState<T>> | undefined;
72
+ }, T & {
73
+ _deleting?: boolean;
74
+ _deleting_error?: import("./types.js").DocError;
75
+ _updating?: boolean;
76
+ _updating_error?: import("./types.js").DocError;
77
+ _adding?: boolean;
78
+ _adding_error?: import("./types.js").DocError;
79
+ _remotes?: Record<string, string | number>;
80
+ _prev?: Partial<T> | undefined;
81
+ } & {
82
+ _deleting?: boolean;
83
+ _deleting_error?: import("./types.js").DocError;
84
+ _updating?: boolean;
85
+ _updating_error?: import("./types.js").DocError;
86
+ _adding?: boolean;
87
+ _adding_error?: import("./types.js").DocError;
88
+ _remotes?: Record<string, string | number>;
89
+ _prev?: Partial<DocState<T>> | undefined;
90
+ }]>;
91
+ }
92
+ //# sourceMappingURL=LivequeryCollection.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"LivequeryCollection.d.ts","sourceRoot":"","sources":["../src/LivequeryCollection.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAgD,UAAU,EAAqB,YAAY,EAAkB,MAAM,MAAM,CAAA;AACjJ,OAAO,EAAE,eAAe,EAAE,KAAK,kBAAkB,EAAE,KAAK,qBAAqB,EAAE,MAAM,sBAAsB,CAAA;AAC3G,OAAO,KAAK,EAAmB,GAAG,EAAE,QAAQ,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,YAAY,CAAA;AACnG,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAA;AAI1D,MAAM,MAAM,0BAA0B,CAAC,CAAC,SAAS,GAAG,IAAI;IACpD,IAAI,EAAE,eAAe,CAAA;IACrB,OAAO,EAAE,OAAO,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,CAAA;IACrC,IAAI,EAAE,OAAO,CAAA;IACb,QAAQ,EAAE,MAAM,CAAA;IAChB,IAAI,EAAE,kBAAkB,CAAC,MAAM,CAAC,CAAA;CACnC,CAAA;AAED,qBAAa,mBAAmB,CAAC,CAAC,SAAS,GAAG;;IAkB9B,OAAO,CAAC,IAAI;IAAmB,OAAO,CAAC,OAAO;IAhB1D,SAAgB,EAAE,SAAsC;IAKjD,GAAG,EAAE,MAAM,GAAG,SAAS,CAAA;IACvB,cAAc,EAAE,MAAM,GAAG,SAAS,CAAA;IAEzC,SAAgB,KAAK,EAAE,eAAe,CAAC,iBAAiB,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAA;IACxE,SAAgB,OAAO,EAAE,eAAe,CAAC,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,CAAA;IAC7D,SAAgB,QAAQ,EAAE,eAAe,CAAC,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,CAAA;IAC9D,SAAgB,OAAO,EAAE,eAAe,CAAC,qBAAqB,GAAG,IAAI,CAAC,CAAA;IACtE,SAAgB,OAAO,EAAE,eAAe,CAAC,OAAO,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;IACtE,SAAgB,MAAM,EAAE,eAAe,CAAC,eAAe,CAAC,CAAA;IACxD,SAAgB,KAAK,EAAE,eAAe,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAC,CAAA;gBAE5D,IAAI,EAAE,eAAe,EAAU,OAAO,GAAE,OAAO,CAAC,0BAA0B,CAAC,CAAC,CAAC,CAAM;IA0BvG,UAAU,CAAC,GAAG,EAAE,MAAM;IA0IhB,KAAK,CAAC,OAAO,EAAE,OAAO,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC;IAI3C,aAAa,CAAC,OAAO,EAAE,OAAO,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC;IAInD,QAAQ;IAWR,QAAQ;IAUR,UAAU,CAAC,MAAM,EAAE,MAAM;IASzB,GAAG,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC;;;IAM7B,MAAM,CAAC,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC;;;;;IAMtC,MAAM,CAAC,EAAE,EAAE,MAAM;;;;;IAKjB,OAAO,CAAC,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAM9C,UAAU,CAAC;QAAE,IAAI,EAAE,CAAC,CAAC;QAAC,KAAK,CAAC,EAAE,KAAK,CAAA;KAAE,CAAC;IAGhD,UAAU;IAIV,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAYvC"}