@tanstack/query-core 4.36.1 → 4.39.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 (181) hide show
  1. package/build/lib/queryCache.d.ts +14 -4
  2. package/build/lib/queryClient.d.ts +83 -20
  3. package/build/lib/tests/queryClient.types.test.d.ts +2 -0
  4. package/build/lib/tests/utils.d.ts +1 -0
  5. package/build/lib/types.d.ts +8 -0
  6. package/package.json +2 -9
  7. package/src/mutationObserver.ts +3 -1
  8. package/src/queryCache.ts +37 -6
  9. package/src/queryClient.ts +202 -37
  10. package/src/tests/mutations.test.tsx +8 -0
  11. package/src/tests/queryClient.types.test.tsx +13 -0
  12. package/src/tests/utils.ts +2 -0
  13. package/src/types.ts +20 -0
  14. package/build/lib/focusManager.d.ts.map +0 -1
  15. package/build/lib/focusManager.esm.js +0 -91
  16. package/build/lib/focusManager.esm.js.map +0 -1
  17. package/build/lib/focusManager.js +0 -96
  18. package/build/lib/focusManager.js.map +0 -1
  19. package/build/lib/focusManager.mjs +0 -91
  20. package/build/lib/focusManager.mjs.map +0 -1
  21. package/build/lib/hydration.d.ts.map +0 -1
  22. package/build/lib/hydration.esm.js +0 -109
  23. package/build/lib/hydration.esm.js.map +0 -1
  24. package/build/lib/hydration.js +0 -116
  25. package/build/lib/hydration.js.map +0 -1
  26. package/build/lib/hydration.mjs +0 -109
  27. package/build/lib/hydration.mjs.map +0 -1
  28. package/build/lib/index.d.ts.map +0 -1
  29. package/build/lib/index.esm.js +0 -15
  30. package/build/lib/index.esm.js.map +0 -1
  31. package/build/lib/index.js +0 -48
  32. package/build/lib/index.js.map +0 -1
  33. package/build/lib/index.mjs +0 -15
  34. package/build/lib/index.mjs.map +0 -1
  35. package/build/lib/infiniteQueryBehavior.d.ts.map +0 -1
  36. package/build/lib/infiniteQueryBehavior.esm.js +0 -146
  37. package/build/lib/infiniteQueryBehavior.esm.js.map +0 -1
  38. package/build/lib/infiniteQueryBehavior.js +0 -154
  39. package/build/lib/infiniteQueryBehavior.js.map +0 -1
  40. package/build/lib/infiniteQueryBehavior.mjs +0 -146
  41. package/build/lib/infiniteQueryBehavior.mjs.map +0 -1
  42. package/build/lib/infiniteQueryObserver.d.ts.map +0 -1
  43. package/build/lib/infiniteQueryObserver.esm.js +0 -85
  44. package/build/lib/infiniteQueryObserver.esm.js.map +0 -1
  45. package/build/lib/infiniteQueryObserver.js +0 -89
  46. package/build/lib/infiniteQueryObserver.js.map +0 -1
  47. package/build/lib/infiniteQueryObserver.mjs +0 -85
  48. package/build/lib/infiniteQueryObserver.mjs.map +0 -1
  49. package/build/lib/logger.d.ts.map +0 -1
  50. package/build/lib/logger.esm.js +0 -4
  51. package/build/lib/logger.esm.js.map +0 -1
  52. package/build/lib/logger.js +0 -8
  53. package/build/lib/logger.js.map +0 -1
  54. package/build/lib/logger.mjs +0 -4
  55. package/build/lib/logger.mjs.map +0 -1
  56. package/build/lib/logger.native.d.ts.map +0 -1
  57. package/build/lib/logger.native.esm.js +0 -12
  58. package/build/lib/logger.native.esm.js.map +0 -1
  59. package/build/lib/logger.native.js +0 -16
  60. package/build/lib/logger.native.js.map +0 -1
  61. package/build/lib/logger.native.mjs +0 -12
  62. package/build/lib/logger.native.mjs.map +0 -1
  63. package/build/lib/mutation.d.ts.map +0 -1
  64. package/build/lib/mutation.esm.js +0 -261
  65. package/build/lib/mutation.esm.js.map +0 -1
  66. package/build/lib/mutation.js +0 -266
  67. package/build/lib/mutation.js.map +0 -1
  68. package/build/lib/mutation.mjs +0 -261
  69. package/build/lib/mutation.mjs.map +0 -1
  70. package/build/lib/mutationCache.d.ts.map +0 -1
  71. package/build/lib/mutationCache.esm.js +0 -93
  72. package/build/lib/mutationCache.esm.js.map +0 -1
  73. package/build/lib/mutationCache.js +0 -97
  74. package/build/lib/mutationCache.js.map +0 -1
  75. package/build/lib/mutationCache.mjs +0 -93
  76. package/build/lib/mutationCache.mjs.map +0 -1
  77. package/build/lib/mutationObserver.d.ts.map +0 -1
  78. package/build/lib/mutationObserver.esm.js +0 -132
  79. package/build/lib/mutationObserver.esm.js.map +0 -1
  80. package/build/lib/mutationObserver.js +0 -136
  81. package/build/lib/mutationObserver.js.map +0 -1
  82. package/build/lib/mutationObserver.mjs +0 -132
  83. package/build/lib/mutationObserver.mjs.map +0 -1
  84. package/build/lib/notifyManager.d.ts.map +0 -1
  85. package/build/lib/notifyManager.esm.js +0 -99
  86. package/build/lib/notifyManager.esm.js.map +0 -1
  87. package/build/lib/notifyManager.js +0 -104
  88. package/build/lib/notifyManager.js.map +0 -1
  89. package/build/lib/notifyManager.mjs +0 -99
  90. package/build/lib/notifyManager.mjs.map +0 -1
  91. package/build/lib/onlineManager.d.ts.map +0 -1
  92. package/build/lib/onlineManager.esm.js +0 -93
  93. package/build/lib/onlineManager.esm.js.map +0 -1
  94. package/build/lib/onlineManager.js +0 -98
  95. package/build/lib/onlineManager.js.map +0 -1
  96. package/build/lib/onlineManager.mjs +0 -93
  97. package/build/lib/onlineManager.mjs.map +0 -1
  98. package/build/lib/queriesObserver.d.ts.map +0 -1
  99. package/build/lib/queriesObserver.esm.js +0 -168
  100. package/build/lib/queriesObserver.esm.js.map +0 -1
  101. package/build/lib/queriesObserver.js +0 -172
  102. package/build/lib/queriesObserver.js.map +0 -1
  103. package/build/lib/queriesObserver.mjs +0 -168
  104. package/build/lib/queriesObserver.mjs.map +0 -1
  105. package/build/lib/query.d.ts.map +0 -1
  106. package/build/lib/query.esm.js +0 -475
  107. package/build/lib/query.esm.js.map +0 -1
  108. package/build/lib/query.js +0 -479
  109. package/build/lib/query.js.map +0 -1
  110. package/build/lib/query.mjs +0 -475
  111. package/build/lib/query.mjs.map +0 -1
  112. package/build/lib/queryCache.d.ts.map +0 -1
  113. package/build/lib/queryCache.esm.js +0 -127
  114. package/build/lib/queryCache.esm.js.map +0 -1
  115. package/build/lib/queryCache.js +0 -131
  116. package/build/lib/queryCache.js.map +0 -1
  117. package/build/lib/queryCache.mjs +0 -127
  118. package/build/lib/queryCache.mjs.map +0 -1
  119. package/build/lib/queryClient.d.ts.map +0 -1
  120. package/build/lib/queryClient.esm.js +0 -356
  121. package/build/lib/queryClient.esm.js.map +0 -1
  122. package/build/lib/queryClient.js +0 -360
  123. package/build/lib/queryClient.js.map +0 -1
  124. package/build/lib/queryClient.mjs +0 -356
  125. package/build/lib/queryClient.mjs.map +0 -1
  126. package/build/lib/queryObserver.d.ts.map +0 -1
  127. package/build/lib/queryObserver.esm.js +0 -580
  128. package/build/lib/queryObserver.esm.js.map +0 -1
  129. package/build/lib/queryObserver.js +0 -584
  130. package/build/lib/queryObserver.js.map +0 -1
  131. package/build/lib/queryObserver.mjs +0 -580
  132. package/build/lib/queryObserver.mjs.map +0 -1
  133. package/build/lib/removable.d.ts.map +0 -1
  134. package/build/lib/removable.esm.js +0 -33
  135. package/build/lib/removable.esm.js.map +0 -1
  136. package/build/lib/removable.js +0 -37
  137. package/build/lib/removable.js.map +0 -1
  138. package/build/lib/removable.mjs +0 -33
  139. package/build/lib/removable.mjs.map +0 -1
  140. package/build/lib/retryer.d.ts.map +0 -1
  141. package/build/lib/retryer.esm.js +0 -167
  142. package/build/lib/retryer.esm.js.map +0 -1
  143. package/build/lib/retryer.js +0 -174
  144. package/build/lib/retryer.js.map +0 -1
  145. package/build/lib/retryer.mjs +0 -167
  146. package/build/lib/retryer.mjs.map +0 -1
  147. package/build/lib/subscribable.d.ts.map +0 -1
  148. package/build/lib/subscribable.esm.js +0 -32
  149. package/build/lib/subscribable.esm.js.map +0 -1
  150. package/build/lib/subscribable.js +0 -36
  151. package/build/lib/subscribable.js.map +0 -1
  152. package/build/lib/subscribable.mjs +0 -32
  153. package/build/lib/subscribable.mjs.map +0 -1
  154. package/build/lib/tests/focusManager.test.d.ts.map +0 -1
  155. package/build/lib/tests/hydration.test.d.ts.map +0 -1
  156. package/build/lib/tests/infiniteQueryBehavior.test.d.ts.map +0 -1
  157. package/build/lib/tests/infiniteQueryObserver.test.d.ts.map +0 -1
  158. package/build/lib/tests/mutationCache.test.d.ts.map +0 -1
  159. package/build/lib/tests/mutationObserver.test.d.ts.map +0 -1
  160. package/build/lib/tests/mutations.test.d.ts.map +0 -1
  161. package/build/lib/tests/notifyManager.test.d.ts.map +0 -1
  162. package/build/lib/tests/onlineManager.test.d.ts.map +0 -1
  163. package/build/lib/tests/queriesObserver.test.d.ts.map +0 -1
  164. package/build/lib/tests/query.test.d.ts.map +0 -1
  165. package/build/lib/tests/queryCache.test.d.ts.map +0 -1
  166. package/build/lib/tests/queryClient.test.d.ts.map +0 -1
  167. package/build/lib/tests/queryObserver.test.d.ts.map +0 -1
  168. package/build/lib/tests/utils.d.ts.map +0 -1
  169. package/build/lib/tests/utils.test.d.ts.map +0 -1
  170. package/build/lib/types.d.ts.map +0 -1
  171. package/build/lib/utils.d.ts.map +0 -1
  172. package/build/lib/utils.esm.js +0 -320
  173. package/build/lib/utils.esm.js.map +0 -1
  174. package/build/lib/utils.js +0 -350
  175. package/build/lib/utils.js.map +0 -1
  176. package/build/lib/utils.mjs +0 -320
  177. package/build/lib/utils.mjs.map +0 -1
  178. package/build/umd/index.development.js +0 -3307
  179. package/build/umd/index.development.js.map +0 -1
  180. package/build/umd/index.production.js +0 -2
  181. package/build/umd/index.production.js.map +0 -1
@@ -1,475 +0,0 @@
1
- import { replaceData, noop, timeUntilStale, getAbortController } from './utils.esm.js';
2
- import { defaultLogger } from './logger.esm.js';
3
- import { notifyManager } from './notifyManager.esm.js';
4
- import { createRetryer, isCancelledError, canFetch } from './retryer.esm.js';
5
- import { Removable } from './removable.esm.js';
6
-
7
- // CLASS
8
- class Query extends Removable {
9
- constructor(config) {
10
- super();
11
- this.abortSignalConsumed = false;
12
- this.defaultOptions = config.defaultOptions;
13
- this.setOptions(config.options);
14
- this.observers = [];
15
- this.cache = config.cache;
16
- this.logger = config.logger || defaultLogger;
17
- this.queryKey = config.queryKey;
18
- this.queryHash = config.queryHash;
19
- this.initialState = config.state || getDefaultState(this.options);
20
- this.state = this.initialState;
21
- this.scheduleGc();
22
- }
23
-
24
- get meta() {
25
- return this.options.meta;
26
- }
27
-
28
- setOptions(options) {
29
- this.options = { ...this.defaultOptions,
30
- ...options
31
- };
32
- this.updateCacheTime(this.options.cacheTime);
33
- }
34
-
35
- optionalRemove() {
36
- if (!this.observers.length && this.state.fetchStatus === 'idle') {
37
- this.cache.remove(this);
38
- }
39
- }
40
-
41
- setData(newData, options) {
42
- const data = replaceData(this.state.data, newData, this.options); // Set data and mark it as cached
43
-
44
- this.dispatch({
45
- data,
46
- type: 'success',
47
- dataUpdatedAt: options == null ? void 0 : options.updatedAt,
48
- manual: options == null ? void 0 : options.manual
49
- });
50
- return data;
51
- }
52
-
53
- setState(state, setStateOptions) {
54
- this.dispatch({
55
- type: 'setState',
56
- state,
57
- setStateOptions
58
- });
59
- }
60
-
61
- cancel(options) {
62
- var _this$retryer;
63
-
64
- const promise = this.promise;
65
- (_this$retryer = this.retryer) == null ? void 0 : _this$retryer.cancel(options);
66
- return promise ? promise.then(noop).catch(noop) : Promise.resolve();
67
- }
68
-
69
- destroy() {
70
- super.destroy();
71
- this.cancel({
72
- silent: true
73
- });
74
- }
75
-
76
- reset() {
77
- this.destroy();
78
- this.setState(this.initialState);
79
- }
80
-
81
- isActive() {
82
- return this.observers.some(observer => observer.options.enabled !== false);
83
- }
84
-
85
- isDisabled() {
86
- return this.getObserversCount() > 0 && !this.isActive();
87
- }
88
-
89
- isStale() {
90
- return this.state.isInvalidated || !this.state.dataUpdatedAt || this.observers.some(observer => observer.getCurrentResult().isStale);
91
- }
92
-
93
- isStaleByTime(staleTime = 0) {
94
- return this.state.isInvalidated || !this.state.dataUpdatedAt || !timeUntilStale(this.state.dataUpdatedAt, staleTime);
95
- }
96
-
97
- onFocus() {
98
- var _this$retryer2;
99
-
100
- const observer = this.observers.find(x => x.shouldFetchOnWindowFocus());
101
-
102
- if (observer) {
103
- observer.refetch({
104
- cancelRefetch: false
105
- });
106
- } // Continue fetch if currently paused
107
-
108
-
109
- (_this$retryer2 = this.retryer) == null ? void 0 : _this$retryer2.continue();
110
- }
111
-
112
- onOnline() {
113
- var _this$retryer3;
114
-
115
- const observer = this.observers.find(x => x.shouldFetchOnReconnect());
116
-
117
- if (observer) {
118
- observer.refetch({
119
- cancelRefetch: false
120
- });
121
- } // Continue fetch if currently paused
122
-
123
-
124
- (_this$retryer3 = this.retryer) == null ? void 0 : _this$retryer3.continue();
125
- }
126
-
127
- addObserver(observer) {
128
- if (!this.observers.includes(observer)) {
129
- this.observers.push(observer); // Stop the query from being garbage collected
130
-
131
- this.clearGcTimeout();
132
- this.cache.notify({
133
- type: 'observerAdded',
134
- query: this,
135
- observer
136
- });
137
- }
138
- }
139
-
140
- removeObserver(observer) {
141
- if (this.observers.includes(observer)) {
142
- this.observers = this.observers.filter(x => x !== observer);
143
-
144
- if (!this.observers.length) {
145
- // If the transport layer does not support cancellation
146
- // we'll let the query continue so the result can be cached
147
- if (this.retryer) {
148
- if (this.abortSignalConsumed) {
149
- this.retryer.cancel({
150
- revert: true
151
- });
152
- } else {
153
- this.retryer.cancelRetry();
154
- }
155
- }
156
-
157
- this.scheduleGc();
158
- }
159
-
160
- this.cache.notify({
161
- type: 'observerRemoved',
162
- query: this,
163
- observer
164
- });
165
- }
166
- }
167
-
168
- getObserversCount() {
169
- return this.observers.length;
170
- }
171
-
172
- invalidate() {
173
- if (!this.state.isInvalidated) {
174
- this.dispatch({
175
- type: 'invalidate'
176
- });
177
- }
178
- }
179
-
180
- fetch(options, fetchOptions) {
181
- var _this$options$behavio, _context$fetchOptions;
182
-
183
- if (this.state.fetchStatus !== 'idle') {
184
- if (this.state.dataUpdatedAt && fetchOptions != null && fetchOptions.cancelRefetch) {
185
- // Silently cancel current fetch if the user wants to cancel refetches
186
- this.cancel({
187
- silent: true
188
- });
189
- } else if (this.promise) {
190
- var _this$retryer4;
191
-
192
- // make sure that retries that were potentially cancelled due to unmounts can continue
193
- (_this$retryer4 = this.retryer) == null ? void 0 : _this$retryer4.continueRetry(); // Return current promise if we are already fetching
194
-
195
- return this.promise;
196
- }
197
- } // Update config if passed, otherwise the config from the last execution is used
198
-
199
-
200
- if (options) {
201
- this.setOptions(options);
202
- } // Use the options from the first observer with a query function if no function is found.
203
- // This can happen when the query is hydrated or created with setQueryData.
204
-
205
-
206
- if (!this.options.queryFn) {
207
- const observer = this.observers.find(x => x.options.queryFn);
208
-
209
- if (observer) {
210
- this.setOptions(observer.options);
211
- }
212
- }
213
-
214
- if (process.env.NODE_ENV !== 'production') {
215
- if (!Array.isArray(this.options.queryKey)) {
216
- this.logger.error("As of v4, queryKey needs to be an Array. If you are using a string like 'repoData', please change it to an Array, e.g. ['repoData']");
217
- }
218
- }
219
-
220
- const abortController = getAbortController(); // Create query function context
221
-
222
- const queryFnContext = {
223
- queryKey: this.queryKey,
224
- pageParam: undefined,
225
- meta: this.meta
226
- }; // Adds an enumerable signal property to the object that
227
- // which sets abortSignalConsumed to true when the signal
228
- // is read.
229
-
230
- const addSignalProperty = object => {
231
- Object.defineProperty(object, 'signal', {
232
- enumerable: true,
233
- get: () => {
234
- if (abortController) {
235
- this.abortSignalConsumed = true;
236
- return abortController.signal;
237
- }
238
-
239
- return undefined;
240
- }
241
- });
242
- };
243
-
244
- addSignalProperty(queryFnContext); // Create fetch function
245
-
246
- const fetchFn = () => {
247
- if (!this.options.queryFn) {
248
- return Promise.reject("Missing queryFn for queryKey '" + this.options.queryHash + "'");
249
- }
250
-
251
- this.abortSignalConsumed = false;
252
- return this.options.queryFn(queryFnContext);
253
- }; // Trigger behavior hook
254
-
255
-
256
- const context = {
257
- fetchOptions,
258
- options: this.options,
259
- queryKey: this.queryKey,
260
- state: this.state,
261
- fetchFn
262
- };
263
- addSignalProperty(context);
264
- (_this$options$behavio = this.options.behavior) == null ? void 0 : _this$options$behavio.onFetch(context); // Store state in case the current fetch needs to be reverted
265
-
266
- this.revertState = this.state; // Set to fetching state if not already in it
267
-
268
- if (this.state.fetchStatus === 'idle' || this.state.fetchMeta !== ((_context$fetchOptions = context.fetchOptions) == null ? void 0 : _context$fetchOptions.meta)) {
269
- var _context$fetchOptions2;
270
-
271
- this.dispatch({
272
- type: 'fetch',
273
- meta: (_context$fetchOptions2 = context.fetchOptions) == null ? void 0 : _context$fetchOptions2.meta
274
- });
275
- }
276
-
277
- const onError = error => {
278
- // Optimistically update state if needed
279
- if (!(isCancelledError(error) && error.silent)) {
280
- this.dispatch({
281
- type: 'error',
282
- error: error
283
- });
284
- }
285
-
286
- if (!isCancelledError(error)) {
287
- var _this$cache$config$on, _this$cache$config, _this$cache$config$on2, _this$cache$config2;
288
-
289
- // Notify cache callback
290
- (_this$cache$config$on = (_this$cache$config = this.cache.config).onError) == null ? void 0 : _this$cache$config$on.call(_this$cache$config, error, this);
291
- (_this$cache$config$on2 = (_this$cache$config2 = this.cache.config).onSettled) == null ? void 0 : _this$cache$config$on2.call(_this$cache$config2, this.state.data, error, this);
292
-
293
- if (process.env.NODE_ENV !== 'production') {
294
- this.logger.error(error);
295
- }
296
- }
297
-
298
- if (!this.isFetchingOptimistic) {
299
- // Schedule query gc after fetching
300
- this.scheduleGc();
301
- }
302
-
303
- this.isFetchingOptimistic = false;
304
- }; // Try to fetch the data
305
-
306
-
307
- this.retryer = createRetryer({
308
- fn: context.fetchFn,
309
- abort: abortController == null ? void 0 : abortController.abort.bind(abortController),
310
- onSuccess: data => {
311
- var _this$cache$config$on3, _this$cache$config3, _this$cache$config$on4, _this$cache$config4;
312
-
313
- if (typeof data === 'undefined') {
314
- if (process.env.NODE_ENV !== 'production') {
315
- this.logger.error("Query data cannot be undefined. Please make sure to return a value other than undefined from your query function. Affected query key: " + this.queryHash);
316
- }
317
-
318
- onError(new Error(this.queryHash + " data is undefined"));
319
- return;
320
- }
321
-
322
- this.setData(data); // Notify cache callback
323
-
324
- (_this$cache$config$on3 = (_this$cache$config3 = this.cache.config).onSuccess) == null ? void 0 : _this$cache$config$on3.call(_this$cache$config3, data, this);
325
- (_this$cache$config$on4 = (_this$cache$config4 = this.cache.config).onSettled) == null ? void 0 : _this$cache$config$on4.call(_this$cache$config4, data, this.state.error, this);
326
-
327
- if (!this.isFetchingOptimistic) {
328
- // Schedule query gc after fetching
329
- this.scheduleGc();
330
- }
331
-
332
- this.isFetchingOptimistic = false;
333
- },
334
- onError,
335
- onFail: (failureCount, error) => {
336
- this.dispatch({
337
- type: 'failed',
338
- failureCount,
339
- error
340
- });
341
- },
342
- onPause: () => {
343
- this.dispatch({
344
- type: 'pause'
345
- });
346
- },
347
- onContinue: () => {
348
- this.dispatch({
349
- type: 'continue'
350
- });
351
- },
352
- retry: context.options.retry,
353
- retryDelay: context.options.retryDelay,
354
- networkMode: context.options.networkMode
355
- });
356
- this.promise = this.retryer.promise;
357
- return this.promise;
358
- }
359
-
360
- dispatch(action) {
361
- const reducer = state => {
362
- var _action$meta, _action$dataUpdatedAt;
363
-
364
- switch (action.type) {
365
- case 'failed':
366
- return { ...state,
367
- fetchFailureCount: action.failureCount,
368
- fetchFailureReason: action.error
369
- };
370
-
371
- case 'pause':
372
- return { ...state,
373
- fetchStatus: 'paused'
374
- };
375
-
376
- case 'continue':
377
- return { ...state,
378
- fetchStatus: 'fetching'
379
- };
380
-
381
- case 'fetch':
382
- return { ...state,
383
- fetchFailureCount: 0,
384
- fetchFailureReason: null,
385
- fetchMeta: (_action$meta = action.meta) != null ? _action$meta : null,
386
- fetchStatus: canFetch(this.options.networkMode) ? 'fetching' : 'paused',
387
- ...(!state.dataUpdatedAt && {
388
- error: null,
389
- status: 'loading'
390
- })
391
- };
392
-
393
- case 'success':
394
- return { ...state,
395
- data: action.data,
396
- dataUpdateCount: state.dataUpdateCount + 1,
397
- dataUpdatedAt: (_action$dataUpdatedAt = action.dataUpdatedAt) != null ? _action$dataUpdatedAt : Date.now(),
398
- error: null,
399
- isInvalidated: false,
400
- status: 'success',
401
- ...(!action.manual && {
402
- fetchStatus: 'idle',
403
- fetchFailureCount: 0,
404
- fetchFailureReason: null
405
- })
406
- };
407
-
408
- case 'error':
409
- const error = action.error;
410
-
411
- if (isCancelledError(error) && error.revert && this.revertState) {
412
- return { ...this.revertState,
413
- fetchStatus: 'idle'
414
- };
415
- }
416
-
417
- return { ...state,
418
- error: error,
419
- errorUpdateCount: state.errorUpdateCount + 1,
420
- errorUpdatedAt: Date.now(),
421
- fetchFailureCount: state.fetchFailureCount + 1,
422
- fetchFailureReason: error,
423
- fetchStatus: 'idle',
424
- status: 'error'
425
- };
426
-
427
- case 'invalidate':
428
- return { ...state,
429
- isInvalidated: true
430
- };
431
-
432
- case 'setState':
433
- return { ...state,
434
- ...action.state
435
- };
436
- }
437
- };
438
-
439
- this.state = reducer(this.state);
440
- notifyManager.batch(() => {
441
- this.observers.forEach(observer => {
442
- observer.onQueryUpdate(action);
443
- });
444
- this.cache.notify({
445
- query: this,
446
- type: 'updated',
447
- action
448
- });
449
- });
450
- }
451
-
452
- }
453
-
454
- function getDefaultState(options) {
455
- const data = typeof options.initialData === 'function' ? options.initialData() : options.initialData;
456
- const hasData = typeof data !== 'undefined';
457
- const initialDataUpdatedAt = hasData ? typeof options.initialDataUpdatedAt === 'function' ? options.initialDataUpdatedAt() : options.initialDataUpdatedAt : 0;
458
- return {
459
- data,
460
- dataUpdateCount: 0,
461
- dataUpdatedAt: hasData ? initialDataUpdatedAt != null ? initialDataUpdatedAt : Date.now() : 0,
462
- error: null,
463
- errorUpdateCount: 0,
464
- errorUpdatedAt: 0,
465
- fetchFailureCount: 0,
466
- fetchFailureReason: null,
467
- fetchMeta: null,
468
- isInvalidated: false,
469
- status: hasData ? 'success' : 'loading',
470
- fetchStatus: 'idle'
471
- };
472
- }
473
-
474
- export { Query };
475
- //# sourceMappingURL=query.esm.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"query.esm.js","sources":["../../src/query.ts"],"sourcesContent":["import { getAbortController, noop, replaceData, timeUntilStale } from './utils'\nimport { defaultLogger } from './logger'\nimport { notifyManager } from './notifyManager'\nimport { canFetch, createRetryer, isCancelledError } from './retryer'\nimport { Removable } from './removable'\nimport type {\n CancelOptions,\n FetchStatus,\n InitialDataFunction,\n QueryFunctionContext,\n QueryKey,\n QueryMeta,\n QueryOptions,\n QueryStatus,\n SetDataOptions,\n} from './types'\nimport type { QueryCache } from './queryCache'\nimport type { QueryObserver } from './queryObserver'\nimport type { Logger } from './logger'\nimport type { Retryer } from './retryer'\n\n// TYPES\n\ninterface QueryConfig<\n TQueryFnData,\n TError,\n TData,\n TQueryKey extends QueryKey = QueryKey,\n> {\n cache: QueryCache\n queryKey: TQueryKey\n queryHash: string\n logger?: Logger\n options?: QueryOptions<TQueryFnData, TError, TData, TQueryKey>\n defaultOptions?: QueryOptions<TQueryFnData, TError, TData, TQueryKey>\n state?: QueryState<TData, TError>\n}\n\nexport interface QueryState<TData = unknown, TError = unknown> {\n data: TData | undefined\n dataUpdateCount: number\n dataUpdatedAt: number\n error: TError | null\n errorUpdateCount: number\n errorUpdatedAt: number\n fetchFailureCount: number\n fetchFailureReason: TError | null\n fetchMeta: any\n isInvalidated: boolean\n status: QueryStatus\n fetchStatus: FetchStatus\n}\n\nexport interface FetchContext<\n TQueryFnData,\n TError,\n TData,\n TQueryKey extends QueryKey = QueryKey,\n> {\n fetchFn: () => unknown | Promise<unknown>\n fetchOptions?: FetchOptions\n signal?: AbortSignal\n options: QueryOptions<TQueryFnData, TError, TData, any>\n queryKey: TQueryKey\n state: QueryState<TData, TError>\n}\n\nexport interface QueryBehavior<\n TQueryFnData = unknown,\n TError = unknown,\n TData = TQueryFnData,\n TQueryKey extends QueryKey = QueryKey,\n> {\n onFetch: (\n context: FetchContext<TQueryFnData, TError, TData, TQueryKey>,\n ) => void\n}\n\nexport interface FetchOptions {\n cancelRefetch?: boolean\n meta?: any\n}\n\ninterface FailedAction<TError> {\n type: 'failed'\n failureCount: number\n error: TError\n}\n\ninterface FetchAction {\n type: 'fetch'\n meta?: any\n}\n\ninterface SuccessAction<TData> {\n data: TData | undefined\n type: 'success'\n dataUpdatedAt?: number\n manual?: boolean\n}\n\ninterface ErrorAction<TError> {\n type: 'error'\n error: TError\n}\n\ninterface InvalidateAction {\n type: 'invalidate'\n}\n\ninterface PauseAction {\n type: 'pause'\n}\n\ninterface ContinueAction {\n type: 'continue'\n}\n\ninterface SetStateAction<TData, TError> {\n type: 'setState'\n state: Partial<QueryState<TData, TError>>\n setStateOptions?: SetStateOptions\n}\n\nexport type Action<TData, TError> =\n | ContinueAction\n | ErrorAction<TError>\n | FailedAction<TError>\n | FetchAction\n | InvalidateAction\n | PauseAction\n | SetStateAction<TData, TError>\n | SuccessAction<TData>\n\nexport interface SetStateOptions {\n meta?: any\n}\n\n// CLASS\n\nexport class Query<\n TQueryFnData = unknown,\n TError = unknown,\n TData = TQueryFnData,\n TQueryKey extends QueryKey = QueryKey,\n> extends Removable {\n queryKey: TQueryKey\n queryHash: string\n options!: QueryOptions<TQueryFnData, TError, TData, TQueryKey>\n initialState: QueryState<TData, TError>\n revertState?: QueryState<TData, TError>\n state: QueryState<TData, TError>\n isFetchingOptimistic?: boolean\n\n private cache: QueryCache\n private logger: Logger\n private promise?: Promise<TData>\n private retryer?: Retryer<TData>\n private observers: QueryObserver<any, any, any, any, any>[]\n private defaultOptions?: QueryOptions<TQueryFnData, TError, TData, TQueryKey>\n private abortSignalConsumed: boolean\n\n constructor(config: QueryConfig<TQueryFnData, TError, TData, TQueryKey>) {\n super()\n\n this.abortSignalConsumed = false\n this.defaultOptions = config.defaultOptions\n this.setOptions(config.options)\n this.observers = []\n this.cache = config.cache\n this.logger = config.logger || defaultLogger\n this.queryKey = config.queryKey\n this.queryHash = config.queryHash\n this.initialState = config.state || getDefaultState(this.options)\n this.state = this.initialState\n this.scheduleGc()\n }\n\n get meta(): QueryMeta | undefined {\n return this.options.meta\n }\n\n private setOptions(\n options?: QueryOptions<TQueryFnData, TError, TData, TQueryKey>,\n ): void {\n this.options = { ...this.defaultOptions, ...options }\n\n this.updateCacheTime(this.options.cacheTime)\n }\n\n protected optionalRemove() {\n if (!this.observers.length && this.state.fetchStatus === 'idle') {\n this.cache.remove(this)\n }\n }\n\n setData(\n newData: TData,\n options?: SetDataOptions & { manual: boolean },\n ): TData {\n const data = replaceData(this.state.data, newData, this.options)\n\n // Set data and mark it as cached\n this.dispatch({\n data,\n type: 'success',\n dataUpdatedAt: options?.updatedAt,\n manual: options?.manual,\n })\n\n return data\n }\n\n setState(\n state: Partial<QueryState<TData, TError>>,\n setStateOptions?: SetStateOptions,\n ): void {\n this.dispatch({ type: 'setState', state, setStateOptions })\n }\n\n cancel(options?: CancelOptions): Promise<void> {\n const promise = this.promise\n this.retryer?.cancel(options)\n return promise ? promise.then(noop).catch(noop) : Promise.resolve()\n }\n\n destroy(): void {\n super.destroy()\n\n this.cancel({ silent: true })\n }\n\n reset(): void {\n this.destroy()\n this.setState(this.initialState)\n }\n\n isActive(): boolean {\n return this.observers.some((observer) => observer.options.enabled !== false)\n }\n\n isDisabled(): boolean {\n return this.getObserversCount() > 0 && !this.isActive()\n }\n\n isStale(): boolean {\n return (\n this.state.isInvalidated ||\n !this.state.dataUpdatedAt ||\n this.observers.some((observer) => observer.getCurrentResult().isStale)\n )\n }\n\n isStaleByTime(staleTime = 0): boolean {\n return (\n this.state.isInvalidated ||\n !this.state.dataUpdatedAt ||\n !timeUntilStale(this.state.dataUpdatedAt, staleTime)\n )\n }\n\n onFocus(): void {\n const observer = this.observers.find((x) => x.shouldFetchOnWindowFocus())\n\n if (observer) {\n observer.refetch({ cancelRefetch: false })\n }\n\n // Continue fetch if currently paused\n this.retryer?.continue()\n }\n\n onOnline(): void {\n const observer = this.observers.find((x) => x.shouldFetchOnReconnect())\n\n if (observer) {\n observer.refetch({ cancelRefetch: false })\n }\n\n // Continue fetch if currently paused\n this.retryer?.continue()\n }\n\n addObserver(observer: QueryObserver<any, any, any, any, any>): void {\n if (!this.observers.includes(observer)) {\n this.observers.push(observer)\n\n // Stop the query from being garbage collected\n this.clearGcTimeout()\n\n this.cache.notify({ type: 'observerAdded', query: this, observer })\n }\n }\n\n removeObserver(observer: QueryObserver<any, any, any, any, any>): void {\n if (this.observers.includes(observer)) {\n this.observers = this.observers.filter((x) => x !== observer)\n\n if (!this.observers.length) {\n // If the transport layer does not support cancellation\n // we'll let the query continue so the result can be cached\n if (this.retryer) {\n if (this.abortSignalConsumed) {\n this.retryer.cancel({ revert: true })\n } else {\n this.retryer.cancelRetry()\n }\n }\n\n this.scheduleGc()\n }\n\n this.cache.notify({ type: 'observerRemoved', query: this, observer })\n }\n }\n\n getObserversCount(): number {\n return this.observers.length\n }\n\n invalidate(): void {\n if (!this.state.isInvalidated) {\n this.dispatch({ type: 'invalidate' })\n }\n }\n\n fetch(\n options?: QueryOptions<TQueryFnData, TError, TData, TQueryKey>,\n fetchOptions?: FetchOptions,\n ): Promise<TData> {\n if (this.state.fetchStatus !== 'idle') {\n if (this.state.dataUpdatedAt && fetchOptions?.cancelRefetch) {\n // Silently cancel current fetch if the user wants to cancel refetches\n this.cancel({ silent: true })\n } else if (this.promise) {\n // make sure that retries that were potentially cancelled due to unmounts can continue\n this.retryer?.continueRetry()\n // Return current promise if we are already fetching\n return this.promise\n }\n }\n\n // Update config if passed, otherwise the config from the last execution is used\n if (options) {\n this.setOptions(options)\n }\n\n // Use the options from the first observer with a query function if no function is found.\n // This can happen when the query is hydrated or created with setQueryData.\n if (!this.options.queryFn) {\n const observer = this.observers.find((x) => x.options.queryFn)\n if (observer) {\n this.setOptions(observer.options)\n }\n }\n\n if (process.env.NODE_ENV !== 'production') {\n if (!Array.isArray(this.options.queryKey)) {\n this.logger.error(\n `As of v4, queryKey needs to be an Array. If you are using a string like 'repoData', please change it to an Array, e.g. ['repoData']`,\n )\n }\n }\n\n const abortController = getAbortController()\n\n // Create query function context\n const queryFnContext: QueryFunctionContext<TQueryKey> = {\n queryKey: this.queryKey,\n pageParam: undefined,\n meta: this.meta,\n }\n\n // Adds an enumerable signal property to the object that\n // which sets abortSignalConsumed to true when the signal\n // is read.\n const addSignalProperty = (object: unknown) => {\n Object.defineProperty(object, 'signal', {\n enumerable: true,\n get: () => {\n if (abortController) {\n this.abortSignalConsumed = true\n return abortController.signal\n }\n return undefined\n },\n })\n }\n\n addSignalProperty(queryFnContext)\n\n // Create fetch function\n const fetchFn = () => {\n if (!this.options.queryFn) {\n return Promise.reject(\n `Missing queryFn for queryKey '${this.options.queryHash}'`,\n )\n }\n this.abortSignalConsumed = false\n return this.options.queryFn(queryFnContext)\n }\n\n // Trigger behavior hook\n const context: FetchContext<TQueryFnData, TError, TData, TQueryKey> = {\n fetchOptions,\n options: this.options,\n queryKey: this.queryKey,\n state: this.state,\n fetchFn,\n }\n\n addSignalProperty(context)\n\n this.options.behavior?.onFetch(context)\n\n // Store state in case the current fetch needs to be reverted\n this.revertState = this.state\n\n // Set to fetching state if not already in it\n if (\n this.state.fetchStatus === 'idle' ||\n this.state.fetchMeta !== context.fetchOptions?.meta\n ) {\n this.dispatch({ type: 'fetch', meta: context.fetchOptions?.meta })\n }\n\n const onError = (error: TError | { silent?: boolean }) => {\n // Optimistically update state if needed\n if (!(isCancelledError(error) && error.silent)) {\n this.dispatch({\n type: 'error',\n error: error as TError,\n })\n }\n\n if (!isCancelledError(error)) {\n // Notify cache callback\n this.cache.config.onError?.(error, this as Query<any, any, any, any>)\n this.cache.config.onSettled?.(\n this.state.data,\n error,\n this as Query<any, any, any, any>,\n )\n\n if (process.env.NODE_ENV !== 'production') {\n this.logger.error(error)\n }\n }\n\n if (!this.isFetchingOptimistic) {\n // Schedule query gc after fetching\n this.scheduleGc()\n }\n this.isFetchingOptimistic = false\n }\n\n // Try to fetch the data\n this.retryer = createRetryer({\n fn: context.fetchFn as () => TData,\n abort: abortController?.abort.bind(abortController),\n onSuccess: (data) => {\n if (typeof data === 'undefined') {\n if (process.env.NODE_ENV !== 'production') {\n this.logger.error(\n `Query data cannot be undefined. Please make sure to return a value other than undefined from your query function. Affected query key: ${this.queryHash}`,\n )\n }\n onError(new Error(`${this.queryHash} data is undefined`) as any)\n return\n }\n\n this.setData(data as TData)\n\n // Notify cache callback\n this.cache.config.onSuccess?.(data, this as Query<any, any, any, any>)\n this.cache.config.onSettled?.(\n data,\n this.state.error,\n this as Query<any, any, any, any>,\n )\n\n if (!this.isFetchingOptimistic) {\n // Schedule query gc after fetching\n this.scheduleGc()\n }\n this.isFetchingOptimistic = false\n },\n onError,\n onFail: (failureCount, error) => {\n this.dispatch({ type: 'failed', failureCount, error })\n },\n onPause: () => {\n this.dispatch({ type: 'pause' })\n },\n onContinue: () => {\n this.dispatch({ type: 'continue' })\n },\n retry: context.options.retry,\n retryDelay: context.options.retryDelay,\n networkMode: context.options.networkMode,\n })\n\n this.promise = this.retryer.promise\n\n return this.promise\n }\n\n private dispatch(action: Action<TData, TError>): void {\n const reducer = (\n state: QueryState<TData, TError>,\n ): QueryState<TData, TError> => {\n switch (action.type) {\n case 'failed':\n return {\n ...state,\n fetchFailureCount: action.failureCount,\n fetchFailureReason: action.error,\n }\n case 'pause':\n return {\n ...state,\n fetchStatus: 'paused',\n }\n case 'continue':\n return {\n ...state,\n fetchStatus: 'fetching',\n }\n case 'fetch':\n return {\n ...state,\n fetchFailureCount: 0,\n fetchFailureReason: null,\n fetchMeta: action.meta ?? null,\n fetchStatus: canFetch(this.options.networkMode)\n ? 'fetching'\n : 'paused',\n ...(!state.dataUpdatedAt && {\n error: null,\n status: 'loading',\n }),\n }\n case 'success':\n return {\n ...state,\n data: action.data,\n dataUpdateCount: state.dataUpdateCount + 1,\n dataUpdatedAt: action.dataUpdatedAt ?? Date.now(),\n error: null,\n isInvalidated: false,\n status: 'success',\n ...(!action.manual && {\n fetchStatus: 'idle',\n fetchFailureCount: 0,\n fetchFailureReason: null,\n }),\n }\n case 'error':\n const error = action.error as unknown\n\n if (isCancelledError(error) && error.revert && this.revertState) {\n return { ...this.revertState, fetchStatus: 'idle' }\n }\n\n return {\n ...state,\n error: error as TError,\n errorUpdateCount: state.errorUpdateCount + 1,\n errorUpdatedAt: Date.now(),\n fetchFailureCount: state.fetchFailureCount + 1,\n fetchFailureReason: error as TError,\n fetchStatus: 'idle',\n status: 'error',\n }\n case 'invalidate':\n return {\n ...state,\n isInvalidated: true,\n }\n case 'setState':\n return {\n ...state,\n ...action.state,\n }\n }\n }\n\n this.state = reducer(this.state)\n\n notifyManager.batch(() => {\n this.observers.forEach((observer) => {\n observer.onQueryUpdate(action)\n })\n\n this.cache.notify({ query: this, type: 'updated', action })\n })\n }\n}\n\nfunction getDefaultState<\n TQueryFnData,\n TError,\n TData,\n TQueryKey extends QueryKey,\n>(\n options: QueryOptions<TQueryFnData, TError, TData, TQueryKey>,\n): QueryState<TData, TError> {\n const data =\n typeof options.initialData === 'function'\n ? (options.initialData as InitialDataFunction<TData>)()\n : options.initialData\n\n const hasData = typeof data !== 'undefined'\n\n const initialDataUpdatedAt = hasData\n ? typeof options.initialDataUpdatedAt === 'function'\n ? (options.initialDataUpdatedAt as () => number | undefined)()\n : options.initialDataUpdatedAt\n : 0\n\n return {\n data,\n dataUpdateCount: 0,\n dataUpdatedAt: hasData ? initialDataUpdatedAt ?? Date.now() : 0,\n error: null,\n errorUpdateCount: 0,\n errorUpdatedAt: 0,\n fetchFailureCount: 0,\n fetchFailureReason: null,\n fetchMeta: null,\n isInvalidated: false,\n status: hasData ? 'success' : 'loading',\n fetchStatus: 'idle',\n }\n}\n"],"names":["Query","Removable","constructor","config","abortSignalConsumed","defaultOptions","setOptions","options","observers","cache","logger","defaultLogger","queryKey","queryHash","initialState","state","getDefaultState","scheduleGc","meta","updateCacheTime","cacheTime","optionalRemove","length","fetchStatus","remove","setData","newData","data","replaceData","dispatch","type","dataUpdatedAt","updatedAt","manual","setState","setStateOptions","cancel","promise","retryer","then","noop","catch","Promise","resolve","destroy","silent","reset","isActive","some","observer","enabled","isDisabled","getObserversCount","isStale","isInvalidated","getCurrentResult","isStaleByTime","staleTime","timeUntilStale","onFocus","find","x","shouldFetchOnWindowFocus","refetch","cancelRefetch","continue","onOnline","shouldFetchOnReconnect","addObserver","includes","push","clearGcTimeout","notify","query","removeObserver","filter","revert","cancelRetry","invalidate","fetch","fetchOptions","continueRetry","queryFn","process","env","NODE_ENV","Array","isArray","error","abortController","getAbortController","queryFnContext","pageParam","undefined","addSignalProperty","object","Object","defineProperty","enumerable","get","signal","fetchFn","reject","context","behavior","onFetch","revertState","fetchMeta","onError","isCancelledError","onSettled","isFetchingOptimistic","createRetryer","fn","abort","bind","onSuccess","Error","onFail","failureCount","onPause","onContinue","retry","retryDelay","networkMode","action","reducer","fetchFailureCount","fetchFailureReason","canFetch","status","dataUpdateCount","Date","now","errorUpdateCount","errorUpdatedAt","notifyManager","batch","forEach","onQueryUpdate","initialData","hasData","initialDataUpdatedAt"],"mappings":";;;;;;AA0IA;AAEO,MAAMA,KAAN,SAKGC,SALH,CAKa;EAiBlBC,WAAW,CAACC,MAAD,EAA8D;AACvE,IAAA,KAAA,EAAA,CAAA;IAEA,IAAKC,CAAAA,mBAAL,GAA2B,KAA3B,CAAA;AACA,IAAA,IAAA,CAAKC,cAAL,GAAsBF,MAAM,CAACE,cAA7B,CAAA;AACA,IAAA,IAAA,CAAKC,UAAL,CAAgBH,MAAM,CAACI,OAAvB,CAAA,CAAA;IACA,IAAKC,CAAAA,SAAL,GAAiB,EAAjB,CAAA;AACA,IAAA,IAAA,CAAKC,KAAL,GAAaN,MAAM,CAACM,KAApB,CAAA;AACA,IAAA,IAAA,CAAKC,MAAL,GAAcP,MAAM,CAACO,MAAP,IAAiBC,aAA/B,CAAA;AACA,IAAA,IAAA,CAAKC,QAAL,GAAgBT,MAAM,CAACS,QAAvB,CAAA;AACA,IAAA,IAAA,CAAKC,SAAL,GAAiBV,MAAM,CAACU,SAAxB,CAAA;IACA,IAAKC,CAAAA,YAAL,GAAoBX,MAAM,CAACY,KAAP,IAAgBC,eAAe,CAAC,IAAKT,CAAAA,OAAN,CAAnD,CAAA;IACA,IAAKQ,CAAAA,KAAL,GAAa,IAAA,CAAKD,YAAlB,CAAA;AACA,IAAA,IAAA,CAAKG,UAAL,EAAA,CAAA;AACD,GAAA;;AAEO,EAAA,IAAJC,IAAI,GAA0B;IAChC,OAAO,IAAA,CAAKX,OAAL,CAAaW,IAApB,CAAA;AACD,GAAA;;EAEOZ,UAAU,CAChBC,OADgB,EAEV;AACN,IAAA,IAAA,CAAKA,OAAL,GAAe,EAAE,GAAG,KAAKF,cAAV;MAA0B,GAAGE,OAAAA;KAA5C,CAAA;AAEA,IAAA,IAAA,CAAKY,eAAL,CAAqB,IAAKZ,CAAAA,OAAL,CAAaa,SAAlC,CAAA,CAAA;AACD,GAAA;;AAESC,EAAAA,cAAc,GAAG;AACzB,IAAA,IAAI,CAAC,IAAA,CAAKb,SAAL,CAAec,MAAhB,IAA0B,IAAKP,CAAAA,KAAL,CAAWQ,WAAX,KAA2B,MAAzD,EAAiE;AAC/D,MAAA,IAAA,CAAKd,KAAL,CAAWe,MAAX,CAAkB,IAAlB,CAAA,CAAA;AACD,KAAA;AACF,GAAA;;AAEDC,EAAAA,OAAO,CACLC,OADK,EAELnB,OAFK,EAGE;AACP,IAAA,MAAMoB,IAAI,GAAGC,WAAW,CAAC,KAAKb,KAAL,CAAWY,IAAZ,EAAkBD,OAAlB,EAA2B,IAAA,CAAKnB,OAAhC,CAAxB,CADO;;AAIP,IAAA,IAAA,CAAKsB,QAAL,CAAc;MACZF,IADY;AAEZG,MAAAA,IAAI,EAAE,SAFM;AAGZC,MAAAA,aAAa,EAAExB,OAAF,IAAEA,IAAAA,GAAAA,KAAAA,CAAAA,GAAAA,OAAO,CAAEyB,SAHZ;AAIZC,MAAAA,MAAM,EAAE1B,OAAF,IAAEA,IAAAA,GAAAA,KAAAA,CAAAA,GAAAA,OAAO,CAAE0B,MAAAA;KAJnB,CAAA,CAAA;AAOA,IAAA,OAAON,IAAP,CAAA;AACD,GAAA;;AAEDO,EAAAA,QAAQ,CACNnB,KADM,EAENoB,eAFM,EAGA;AACN,IAAA,IAAA,CAAKN,QAAL,CAAc;AAAEC,MAAAA,IAAI,EAAE,UAAR;MAAoBf,KAApB;AAA2BoB,MAAAA,eAAAA;KAAzC,CAAA,CAAA;AACD,GAAA;;EAEDC,MAAM,CAAC7B,OAAD,EAAyC;AAAA,IAAA,IAAA,aAAA,CAAA;;IAC7C,MAAM8B,OAAO,GAAG,IAAA,CAAKA,OAArB,CAAA;AACA,IAAA,CAAA,aAAA,GAAA,IAAA,CAAKC,OAAL,KAAA,IAAA,GAAA,KAAA,CAAA,GAAA,aAAA,CAAcF,MAAd,CAAqB7B,OAArB,CAAA,CAAA;AACA,IAAA,OAAO8B,OAAO,GAAGA,OAAO,CAACE,IAAR,CAAaC,IAAb,CAAA,CAAmBC,KAAnB,CAAyBD,IAAzB,CAAH,GAAoCE,OAAO,CAACC,OAAR,EAAlD,CAAA;AACD,GAAA;;AAEDC,EAAAA,OAAO,GAAS;AACd,IAAA,KAAA,CAAMA,OAAN,EAAA,CAAA;AAEA,IAAA,IAAA,CAAKR,MAAL,CAAY;AAAES,MAAAA,MAAM,EAAE,IAAA;KAAtB,CAAA,CAAA;AACD,GAAA;;AAEDC,EAAAA,KAAK,GAAS;AACZ,IAAA,IAAA,CAAKF,OAAL,EAAA,CAAA;IACA,IAAKV,CAAAA,QAAL,CAAc,IAAA,CAAKpB,YAAnB,CAAA,CAAA;AACD,GAAA;;AAEDiC,EAAAA,QAAQ,GAAY;AAClB,IAAA,OAAO,IAAKvC,CAAAA,SAAL,CAAewC,IAAf,CAAqBC,QAAD,IAAcA,QAAQ,CAAC1C,OAAT,CAAiB2C,OAAjB,KAA6B,KAA/D,CAAP,CAAA;AACD,GAAA;;AAEDC,EAAAA,UAAU,GAAY;IACpB,OAAO,IAAA,CAAKC,iBAAL,EAA2B,GAAA,CAA3B,IAAgC,CAAC,IAAA,CAAKL,QAAL,EAAxC,CAAA;AACD,GAAA;;AAEDM,EAAAA,OAAO,GAAY;IACjB,OACE,IAAA,CAAKtC,KAAL,CAAWuC,aAAX,IACA,CAAC,IAAA,CAAKvC,KAAL,CAAWgB,aADZ,IAEA,KAAKvB,SAAL,CAAewC,IAAf,CAAqBC,QAAD,IAAcA,QAAQ,CAACM,gBAAT,EAA4BF,CAAAA,OAA9D,CAHF,CAAA;AAKD,GAAA;;AAEDG,EAAAA,aAAa,CAACC,SAAS,GAAG,CAAb,EAAyB;IACpC,OACE,IAAA,CAAK1C,KAAL,CAAWuC,aAAX,IACA,CAAC,IAAA,CAAKvC,KAAL,CAAWgB,aADZ,IAEA,CAAC2B,cAAc,CAAC,IAAK3C,CAAAA,KAAL,CAAWgB,aAAZ,EAA2B0B,SAA3B,CAHjB,CAAA;AAKD,GAAA;;AAEDE,EAAAA,OAAO,GAAS;AAAA,IAAA,IAAA,cAAA,CAAA;;AACd,IAAA,MAAMV,QAAQ,GAAG,IAAKzC,CAAAA,SAAL,CAAeoD,IAAf,CAAqBC,CAAD,IAAOA,CAAC,CAACC,wBAAF,EAA3B,CAAjB,CAAA;;AAEA,IAAA,IAAIb,QAAJ,EAAc;MACZA,QAAQ,CAACc,OAAT,CAAiB;AAAEC,QAAAA,aAAa,EAAE,KAAA;OAAlC,CAAA,CAAA;AACD,KALa;;;IAQd,CAAK1B,cAAAA,GAAAA,IAAAA,CAAAA,OAAL,oCAAc2B,QAAd,EAAA,CAAA;AACD,GAAA;;AAEDC,EAAAA,QAAQ,GAAS;AAAA,IAAA,IAAA,cAAA,CAAA;;AACf,IAAA,MAAMjB,QAAQ,GAAG,IAAKzC,CAAAA,SAAL,CAAeoD,IAAf,CAAqBC,CAAD,IAAOA,CAAC,CAACM,sBAAF,EAA3B,CAAjB,CAAA;;AAEA,IAAA,IAAIlB,QAAJ,EAAc;MACZA,QAAQ,CAACc,OAAT,CAAiB;AAAEC,QAAAA,aAAa,EAAE,KAAA;OAAlC,CAAA,CAAA;AACD,KALc;;;IAQf,CAAK1B,cAAAA,GAAAA,IAAAA,CAAAA,OAAL,oCAAc2B,QAAd,EAAA,CAAA;AACD,GAAA;;EAEDG,WAAW,CAACnB,QAAD,EAAyD;IAClE,IAAI,CAAC,KAAKzC,SAAL,CAAe6D,QAAf,CAAwBpB,QAAxB,CAAL,EAAwC;AACtC,MAAA,IAAA,CAAKzC,SAAL,CAAe8D,IAAf,CAAoBrB,QAApB,EADsC;;AAItC,MAAA,IAAA,CAAKsB,cAAL,EAAA,CAAA;MAEA,IAAK9D,CAAAA,KAAL,CAAW+D,MAAX,CAAkB;AAAE1C,QAAAA,IAAI,EAAE,eAAR;AAAyB2C,QAAAA,KAAK,EAAE,IAAhC;AAAsCxB,QAAAA,QAAAA;OAAxD,CAAA,CAAA;AACD,KAAA;AACF,GAAA;;EAEDyB,cAAc,CAACzB,QAAD,EAAyD;AACrE,IAAA,IAAI,KAAKzC,SAAL,CAAe6D,QAAf,CAAwBpB,QAAxB,CAAJ,EAAuC;AACrC,MAAA,IAAA,CAAKzC,SAAL,GAAiB,IAAKA,CAAAA,SAAL,CAAemE,MAAf,CAAuBd,CAAD,IAAOA,CAAC,KAAKZ,QAAnC,CAAjB,CAAA;;AAEA,MAAA,IAAI,CAAC,IAAA,CAAKzC,SAAL,CAAec,MAApB,EAA4B;AAC1B;AACA;QACA,IAAI,IAAA,CAAKgB,OAAT,EAAkB;UAChB,IAAI,IAAA,CAAKlC,mBAAT,EAA8B;YAC5B,IAAKkC,CAAAA,OAAL,CAAaF,MAAb,CAAoB;AAAEwC,cAAAA,MAAM,EAAE,IAAA;aAA9B,CAAA,CAAA;AACD,WAFD,MAEO;YACL,IAAKtC,CAAAA,OAAL,CAAauC,WAAb,EAAA,CAAA;AACD,WAAA;AACF,SAAA;;AAED,QAAA,IAAA,CAAK5D,UAAL,EAAA,CAAA;AACD,OAAA;;MAED,IAAKR,CAAAA,KAAL,CAAW+D,MAAX,CAAkB;AAAE1C,QAAAA,IAAI,EAAE,iBAAR;AAA2B2C,QAAAA,KAAK,EAAE,IAAlC;AAAwCxB,QAAAA,QAAAA;OAA1D,CAAA,CAAA;AACD,KAAA;AACF,GAAA;;AAEDG,EAAAA,iBAAiB,GAAW;IAC1B,OAAO,IAAA,CAAK5C,SAAL,CAAec,MAAtB,CAAA;AACD,GAAA;;AAEDwD,EAAAA,UAAU,GAAS;AACjB,IAAA,IAAI,CAAC,IAAA,CAAK/D,KAAL,CAAWuC,aAAhB,EAA+B;AAC7B,MAAA,IAAA,CAAKzB,QAAL,CAAc;AAAEC,QAAAA,IAAI,EAAE,YAAA;OAAtB,CAAA,CAAA;AACD,KAAA;AACF,GAAA;;AAEDiD,EAAAA,KAAK,CACHxE,OADG,EAEHyE,YAFG,EAGa;AAAA,IAAA,IAAA,qBAAA,EAAA,qBAAA,CAAA;;AAChB,IAAA,IAAI,KAAKjE,KAAL,CAAWQ,WAAX,KAA2B,MAA/B,EAAuC;MACrC,IAAI,IAAA,CAAKR,KAAL,CAAWgB,aAAX,IAA4BiD,YAA5B,IAA4BA,IAAAA,IAAAA,YAAY,CAAEhB,aAA9C,EAA6D;AAC3D;AACA,QAAA,IAAA,CAAK5B,MAAL,CAAY;AAAES,UAAAA,MAAM,EAAE,IAAA;SAAtB,CAAA,CAAA;AACD,OAHD,MAGO,IAAI,IAAKR,CAAAA,OAAT,EAAkB;AAAA,QAAA,IAAA,cAAA,CAAA;;AACvB;AACA,QAAA,CAAA,cAAA,GAAA,IAAA,CAAKC,OAAL,KAAA,IAAA,GAAA,KAAA,CAAA,GAAA,cAAA,CAAc2C,aAAd,EAAA,CAFuB;;AAIvB,QAAA,OAAO,KAAK5C,OAAZ,CAAA;AACD,OAAA;AACF,KAXe;;;AAchB,IAAA,IAAI9B,OAAJ,EAAa;MACX,IAAKD,CAAAA,UAAL,CAAgBC,OAAhB,CAAA,CAAA;AACD,KAhBe;AAmBhB;;;AACA,IAAA,IAAI,CAAC,IAAA,CAAKA,OAAL,CAAa2E,OAAlB,EAA2B;AACzB,MAAA,MAAMjC,QAAQ,GAAG,IAAKzC,CAAAA,SAAL,CAAeoD,IAAf,CAAqBC,CAAD,IAAOA,CAAC,CAACtD,OAAF,CAAU2E,OAArC,CAAjB,CAAA;;AACA,MAAA,IAAIjC,QAAJ,EAAc;AACZ,QAAA,IAAA,CAAK3C,UAAL,CAAgB2C,QAAQ,CAAC1C,OAAzB,CAAA,CAAA;AACD,OAAA;AACF,KAAA;;AAED,IAAA,IAAI4E,OAAO,CAACC,GAAR,CAAYC,QAAZ,KAAyB,YAA7B,EAA2C;MACzC,IAAI,CAACC,KAAK,CAACC,OAAN,CAAc,KAAKhF,OAAL,CAAaK,QAA3B,CAAL,EAA2C;QACzC,IAAKF,CAAAA,MAAL,CAAY8E,KAAZ,CAAA,qIAAA,CAAA,CAAA;AAGD,OAAA;AACF,KAAA;;AAED,IAAA,MAAMC,eAAe,GAAGC,kBAAkB,EAA1C,CAnCgB;;AAsChB,IAAA,MAAMC,cAA+C,GAAG;MACtD/E,QAAQ,EAAE,KAAKA,QADuC;AAEtDgF,MAAAA,SAAS,EAAEC,SAF2C;AAGtD3E,MAAAA,IAAI,EAAE,IAAKA,CAAAA,IAAAA;AAH2C,KAAxD,CAtCgB;AA6ChB;AACA;;IACA,MAAM4E,iBAAiB,GAAIC,MAAD,IAAqB;AAC7CC,MAAAA,MAAM,CAACC,cAAP,CAAsBF,MAAtB,EAA8B,QAA9B,EAAwC;AACtCG,QAAAA,UAAU,EAAE,IAD0B;AAEtCC,QAAAA,GAAG,EAAE,MAAM;AACT,UAAA,IAAIV,eAAJ,EAAqB;YACnB,IAAKrF,CAAAA,mBAAL,GAA2B,IAA3B,CAAA;YACA,OAAOqF,eAAe,CAACW,MAAvB,CAAA;AACD,WAAA;;AACD,UAAA,OAAOP,SAAP,CAAA;AACD,SAAA;OARH,CAAA,CAAA;KADF,CAAA;;AAaAC,IAAAA,iBAAiB,CAACH,cAAD,CAAjB,CA5DgB;;IA+DhB,MAAMU,OAAO,GAAG,MAAM;AACpB,MAAA,IAAI,CAAC,IAAA,CAAK9F,OAAL,CAAa2E,OAAlB,EAA2B;QACzB,OAAOxC,OAAO,CAAC4D,MAAR,CAAA,gCAAA,GAC4B,KAAK/F,OAAL,CAAaM,SADzC,GAAP,GAAA,CAAA,CAAA;AAGD,OAAA;;MACD,IAAKT,CAAAA,mBAAL,GAA2B,KAA3B,CAAA;AACA,MAAA,OAAO,KAAKG,OAAL,CAAa2E,OAAb,CAAqBS,cAArB,CAAP,CAAA;AACD,KARD,CA/DgB;;;AA0EhB,IAAA,MAAMY,OAA6D,GAAG;MACpEvB,YADoE;MAEpEzE,OAAO,EAAE,KAAKA,OAFsD;MAGpEK,QAAQ,EAAE,KAAKA,QAHqD;MAIpEG,KAAK,EAAE,KAAKA,KAJwD;AAKpEsF,MAAAA,OAAAA;KALF,CAAA;IAQAP,iBAAiB,CAACS,OAAD,CAAjB,CAAA;IAEA,CAAKhG,qBAAAA,GAAAA,IAAAA,CAAAA,OAAL,CAAaiG,QAAb,KAAA,IAAA,GAAA,KAAA,CAAA,GAAA,qBAAA,CAAuBC,OAAvB,CAA+BF,OAA/B,EApFgB;;AAuFhB,IAAA,IAAA,CAAKG,WAAL,GAAmB,IAAK3F,CAAAA,KAAxB,CAvFgB;;AA0FhB,IAAA,IACE,KAAKA,KAAL,CAAWQ,WAAX,KAA2B,MAA3B,IACA,IAAKR,CAAAA,KAAL,CAAW4F,SAAX,MAAA,CAAA,qBAAA,GAAyBJ,OAAO,CAACvB,YAAjC,qBAAyB,qBAAsB9D,CAAAA,IAA/C,CAFF,EAGE;AAAA,MAAA,IAAA,sBAAA,CAAA;;AACA,MAAA,IAAA,CAAKW,QAAL,CAAc;AAAEC,QAAAA,IAAI,EAAE,OAAR;AAAiBZ,QAAAA,IAAI,EAAEqF,CAAAA,sBAAAA,GAAAA,OAAO,CAACvB,YAAV,qBAAE,sBAAsB9D,CAAAA,IAAAA;OAA3D,CAAA,CAAA;AACD,KAAA;;IAED,MAAM0F,OAAO,GAAIpB,KAAD,IAA0C;AACxD;MACA,IAAI,EAAEqB,gBAAgB,CAACrB,KAAD,CAAhB,IAA2BA,KAAK,CAAC3C,MAAnC,CAAJ,EAAgD;AAC9C,QAAA,IAAA,CAAKhB,QAAL,CAAc;AACZC,UAAAA,IAAI,EAAE,OADM;AAEZ0D,UAAAA,KAAK,EAAEA,KAAAA;SAFT,CAAA,CAAA;AAID,OAAA;;AAED,MAAA,IAAI,CAACqB,gBAAgB,CAACrB,KAAD,CAArB,EAA8B;AAAA,QAAA,IAAA,qBAAA,EAAA,kBAAA,EAAA,sBAAA,EAAA,mBAAA,CAAA;;AAC5B;QACA,CAAK/E,qBAAAA,GAAAA,CAAAA,kBAAAA,GAAAA,IAAAA,CAAAA,KAAL,CAAWN,MAAX,EAAkByG,OAAlB,KAA4BpB,IAAAA,GAAAA,KAAAA,CAAAA,GAAAA,qBAAAA,CAAAA,IAAAA,CAAAA,kBAAAA,EAAAA,KAA5B,EAAmC,IAAnC,CAAA,CAAA;AACA,QAAA,CAAA,sBAAA,GAAA,CAAA,mBAAA,GAAA,IAAA,CAAK/E,KAAL,CAAWN,MAAX,EAAkB2G,SAAlB,KAAA,IAAA,GAAA,KAAA,CAAA,GAAA,sBAAA,CAAA,IAAA,CAAA,mBAAA,EACE,IAAK/F,CAAAA,KAAL,CAAWY,IADb,EAEE6D,KAFF,EAGE,IAHF,CAAA,CAAA;;AAMA,QAAA,IAAIL,OAAO,CAACC,GAAR,CAAYC,QAAZ,KAAyB,YAA7B,EAA2C;AACzC,UAAA,IAAA,CAAK3E,MAAL,CAAY8E,KAAZ,CAAkBA,KAAlB,CAAA,CAAA;AACD,SAAA;AACF,OAAA;;MAED,IAAI,CAAC,IAAKuB,CAAAA,oBAAV,EAAgC;AAC9B;AACA,QAAA,IAAA,CAAK9F,UAAL,EAAA,CAAA;AACD,OAAA;;MACD,IAAK8F,CAAAA,oBAAL,GAA4B,KAA5B,CAAA;AACD,KA5BD,CAjGgB;;;IAgIhB,IAAKzE,CAAAA,OAAL,GAAe0E,aAAa,CAAC;MAC3BC,EAAE,EAAEV,OAAO,CAACF,OADe;MAE3Ba,KAAK,EAAEzB,eAAF,IAAA,IAAA,GAAA,KAAA,CAAA,GAAEA,eAAe,CAAEyB,KAAjB,CAAuBC,IAAvB,CAA4B1B,eAA5B,CAFoB;MAG3B2B,SAAS,EAAGzF,IAAD,IAAU;AAAA,QAAA,IAAA,sBAAA,EAAA,mBAAA,EAAA,sBAAA,EAAA,mBAAA,CAAA;;AACnB,QAAA,IAAI,OAAOA,IAAP,KAAgB,WAApB,EAAiC;AAC/B,UAAA,IAAIwD,OAAO,CAACC,GAAR,CAAYC,QAAZ,KAAyB,YAA7B,EAA2C;AACzC,YAAA,IAAA,CAAK3E,MAAL,CAAY8E,KAAZ,CAAA,wIAAA,GAC2I,KAAK3E,SADhJ,CAAA,CAAA;AAGD,WAAA;;AACD+F,UAAAA,OAAO,CAAC,IAAIS,KAAJ,CAAa,IAAKxG,CAAAA,SAAlB,wBAAD,CAAP,CAAA;AACA,UAAA,OAAA;AACD,SAAA;;AAED,QAAA,IAAA,CAAKY,OAAL,CAAaE,IAAb,CAAA,CAXmB;;QAcnB,CAAKlB,sBAAAA,GAAAA,CAAAA,mBAAAA,GAAAA,IAAAA,CAAAA,KAAL,CAAWN,MAAX,EAAkBiH,SAAlB,KAA8BzF,IAAAA,GAAAA,KAAAA,CAAAA,GAAAA,sBAAAA,CAAAA,IAAAA,CAAAA,mBAAAA,EAAAA,IAA9B,EAAoC,IAApC,CAAA,CAAA;AACA,QAAA,CAAA,sBAAA,GAAA,CAAA,mBAAA,GAAA,IAAA,CAAKlB,KAAL,CAAWN,MAAX,EAAkB2G,SAAlB,KAAA,IAAA,GAAA,KAAA,CAAA,GAAA,sBAAA,CAAA,IAAA,CAAA,mBAAA,EACEnF,IADF,EAEE,IAAKZ,CAAAA,KAAL,CAAWyE,KAFb,EAGE,IAHF,CAAA,CAAA;;QAMA,IAAI,CAAC,IAAKuB,CAAAA,oBAAV,EAAgC;AAC9B;AACA,UAAA,IAAA,CAAK9F,UAAL,EAAA,CAAA;AACD,SAAA;;QACD,IAAK8F,CAAAA,oBAAL,GAA4B,KAA5B,CAAA;OA5ByB;MA8B3BH,OA9B2B;AA+B3BU,MAAAA,MAAM,EAAE,CAACC,YAAD,EAAe/B,KAAf,KAAyB;AAC/B,QAAA,IAAA,CAAK3D,QAAL,CAAc;AAAEC,UAAAA,IAAI,EAAE,QAAR;UAAkByF,YAAlB;AAAgC/B,UAAAA,KAAAA;SAA9C,CAAA,CAAA;OAhCyB;AAkC3BgC,MAAAA,OAAO,EAAE,MAAM;AACb,QAAA,IAAA,CAAK3F,QAAL,CAAc;AAAEC,UAAAA,IAAI,EAAE,OAAA;SAAtB,CAAA,CAAA;OAnCyB;AAqC3B2F,MAAAA,UAAU,EAAE,MAAM;AAChB,QAAA,IAAA,CAAK5F,QAAL,CAAc;AAAEC,UAAAA,IAAI,EAAE,UAAA;SAAtB,CAAA,CAAA;OAtCyB;AAwC3B4F,MAAAA,KAAK,EAAEnB,OAAO,CAAChG,OAAR,CAAgBmH,KAxCI;AAyC3BC,MAAAA,UAAU,EAAEpB,OAAO,CAAChG,OAAR,CAAgBoH,UAzCD;AA0C3BC,MAAAA,WAAW,EAAErB,OAAO,CAAChG,OAAR,CAAgBqH,WAAAA;AA1CF,KAAD,CAA5B,CAAA;AA6CA,IAAA,IAAA,CAAKvF,OAAL,GAAe,IAAKC,CAAAA,OAAL,CAAaD,OAA5B,CAAA;AAEA,IAAA,OAAO,KAAKA,OAAZ,CAAA;AACD,GAAA;;EAEOR,QAAQ,CAACgG,MAAD,EAAsC;IACpD,MAAMC,OAAO,GACX/G,KADc,IAEgB;AAAA,MAAA,IAAA,YAAA,EAAA,qBAAA,CAAA;;MAC9B,QAAQ8G,MAAM,CAAC/F,IAAf;AACE,QAAA,KAAK,QAAL;UACE,OAAO,EACL,GAAGf,KADE;YAELgH,iBAAiB,EAAEF,MAAM,CAACN,YAFrB;YAGLS,kBAAkB,EAAEH,MAAM,CAACrC,KAAAA;WAH7B,CAAA;;AAKF,QAAA,KAAK,OAAL;UACE,OAAO,EACL,GAAGzE,KADE;AAELQ,YAAAA,WAAW,EAAE,QAAA;WAFf,CAAA;;AAIF,QAAA,KAAK,UAAL;UACE,OAAO,EACL,GAAGR,KADE;AAELQ,YAAAA,WAAW,EAAE,UAAA;WAFf,CAAA;;AAIF,QAAA,KAAK,OAAL;UACE,OAAO,EACL,GAAGR,KADE;AAELgH,YAAAA,iBAAiB,EAAE,CAFd;AAGLC,YAAAA,kBAAkB,EAAE,IAHf;AAILrB,YAAAA,SAAS,EAAEkB,CAAAA,YAAAA,GAAAA,MAAM,CAAC3G,IAAT,2BAAiB,IAJrB;YAKLK,WAAW,EAAE0G,QAAQ,CAAC,IAAK1H,CAAAA,OAAL,CAAaqH,WAAd,CAAR,GACT,UADS,GAET,QAPC;AAQL,YAAA,IAAI,CAAC7G,KAAK,CAACgB,aAAP,IAAwB;AAC1ByD,cAAAA,KAAK,EAAE,IADmB;AAE1B0C,cAAAA,MAAM,EAAE,SAAA;aAFV,CAAA;WARF,CAAA;;AAaF,QAAA,KAAK,SAAL;UACE,OAAO,EACL,GAAGnH,KADE;YAELY,IAAI,EAAEkG,MAAM,CAAClG,IAFR;AAGLwG,YAAAA,eAAe,EAAEpH,KAAK,CAACoH,eAAN,GAAwB,CAHpC;YAILpG,aAAa,EAAA,CAAA,qBAAA,GAAE8F,MAAM,CAAC9F,aAAT,oCAA0BqG,IAAI,CAACC,GAAL,EAJlC;AAKL7C,YAAAA,KAAK,EAAE,IALF;AAMLlC,YAAAA,aAAa,EAAE,KANV;AAOL4E,YAAAA,MAAM,EAAE,SAPH;AAQL,YAAA,IAAI,CAACL,MAAM,CAAC5F,MAAR,IAAkB;AACpBV,cAAAA,WAAW,EAAE,MADO;AAEpBwG,cAAAA,iBAAiB,EAAE,CAFC;AAGpBC,cAAAA,kBAAkB,EAAE,IAAA;aAHtB,CAAA;WARF,CAAA;;AAcF,QAAA,KAAK,OAAL;AACE,UAAA,MAAMxC,KAAK,GAAGqC,MAAM,CAACrC,KAArB,CAAA;;UAEA,IAAIqB,gBAAgB,CAACrB,KAAD,CAAhB,IAA2BA,KAAK,CAACZ,MAAjC,IAA2C,IAAK8B,CAAAA,WAApD,EAAiE;YAC/D,OAAO,EAAE,GAAG,IAAA,CAAKA,WAAV;AAAuBnF,cAAAA,WAAW,EAAE,MAAA;aAA3C,CAAA;AACD,WAAA;;UAED,OAAO,EACL,GAAGR,KADE;AAELyE,YAAAA,KAAK,EAAEA,KAFF;AAGL8C,YAAAA,gBAAgB,EAAEvH,KAAK,CAACuH,gBAAN,GAAyB,CAHtC;AAILC,YAAAA,cAAc,EAAEH,IAAI,CAACC,GAAL,EAJX;AAKLN,YAAAA,iBAAiB,EAAEhH,KAAK,CAACgH,iBAAN,GAA0B,CALxC;AAMLC,YAAAA,kBAAkB,EAAExC,KANf;AAOLjE,YAAAA,WAAW,EAAE,MAPR;AAQL2G,YAAAA,MAAM,EAAE,OAAA;WARV,CAAA;;AAUF,QAAA,KAAK,YAAL;UACE,OAAO,EACL,GAAGnH,KADE;AAELuC,YAAAA,aAAa,EAAE,IAAA;WAFjB,CAAA;;AAIF,QAAA,KAAK,UAAL;UACE,OAAO,EACL,GAAGvC,KADE;AAEL,YAAA,GAAG8G,MAAM,CAAC9G,KAAAA;WAFZ,CAAA;AArEJ,OAAA;KAHF,CAAA;;AA+EA,IAAA,IAAA,CAAKA,KAAL,GAAa+G,OAAO,CAAC,IAAA,CAAK/G,KAAN,CAApB,CAAA;IAEAyH,aAAa,CAACC,KAAd,CAAoB,MAAM;AACxB,MAAA,IAAA,CAAKjI,SAAL,CAAekI,OAAf,CAAwBzF,QAAD,IAAc;QACnCA,QAAQ,CAAC0F,aAAT,CAAuBd,MAAvB,CAAA,CAAA;OADF,CAAA,CAAA;MAIA,IAAKpH,CAAAA,KAAL,CAAW+D,MAAX,CAAkB;AAAEC,QAAAA,KAAK,EAAE,IAAT;AAAe3C,QAAAA,IAAI,EAAE,SAArB;AAAgC+F,QAAAA,MAAAA;OAAlD,CAAA,CAAA;KALF,CAAA,CAAA;AAOD,GAAA;;AAnciB,CAAA;;AAscpB,SAAS7G,eAAT,CAMET,OANF,EAO6B;AAC3B,EAAA,MAAMoB,IAAI,GACR,OAAOpB,OAAO,CAACqI,WAAf,KAA+B,UAA/B,GACKrI,OAAO,CAACqI,WAAT,EADJ,GAEIrI,OAAO,CAACqI,WAHd,CAAA;AAKA,EAAA,MAAMC,OAAO,GAAG,OAAOlH,IAAP,KAAgB,WAAhC,CAAA;EAEA,MAAMmH,oBAAoB,GAAGD,OAAO,GAChC,OAAOtI,OAAO,CAACuI,oBAAf,KAAwC,UAAxC,GACGvI,OAAO,CAACuI,oBAAT,EADF,GAEEvI,OAAO,CAACuI,oBAHsB,GAIhC,CAJJ,CAAA;EAMA,OAAO;IACLnH,IADK;AAELwG,IAAAA,eAAe,EAAE,CAFZ;AAGLpG,IAAAA,aAAa,EAAE8G,OAAO,GAAGC,oBAAH,IAAGA,IAAAA,GAAAA,oBAAH,GAA2BV,IAAI,CAACC,GAAL,EAA3B,GAAwC,CAHzD;AAIL7C,IAAAA,KAAK,EAAE,IAJF;AAKL8C,IAAAA,gBAAgB,EAAE,CALb;AAMLC,IAAAA,cAAc,EAAE,CANX;AAOLR,IAAAA,iBAAiB,EAAE,CAPd;AAQLC,IAAAA,kBAAkB,EAAE,IARf;AASLrB,IAAAA,SAAS,EAAE,IATN;AAULrD,IAAAA,aAAa,EAAE,KAVV;AAWL4E,IAAAA,MAAM,EAAEW,OAAO,GAAG,SAAH,GAAe,SAXzB;AAYLtH,IAAAA,WAAW,EAAE,MAAA;GAZf,CAAA;AAcD;;;;"}