@supabase/storage-js 2.85.0 → 2.86.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.
- package/README.md +64 -0
- package/dist/main/lib/helpers.d.ts +16 -0
- package/dist/main/lib/helpers.d.ts.map +1 -1
- package/dist/main/lib/helpers.js +41 -1
- package/dist/main/lib/helpers.js.map +1 -1
- package/dist/main/lib/version.d.ts +1 -1
- package/dist/main/lib/version.js +1 -1
- package/dist/main/packages/StorageAnalyticsClient.d.ts +137 -0
- package/dist/main/packages/StorageAnalyticsClient.d.ts.map +1 -1
- package/dist/main/packages/StorageAnalyticsClient.js +156 -0
- package/dist/main/packages/StorageAnalyticsClient.js.map +1 -1
- package/dist/module/lib/helpers.d.ts +16 -0
- package/dist/module/lib/helpers.d.ts.map +1 -1
- package/dist/module/lib/helpers.js +39 -0
- package/dist/module/lib/helpers.js.map +1 -1
- package/dist/module/lib/version.d.ts +1 -1
- package/dist/module/lib/version.js +1 -1
- package/dist/module/packages/StorageAnalyticsClient.d.ts +137 -0
- package/dist/module/packages/StorageAnalyticsClient.d.ts.map +1 -1
- package/dist/module/packages/StorageAnalyticsClient.js +158 -2
- package/dist/module/packages/StorageAnalyticsClient.js.map +1 -1
- package/dist/tsconfig.module.tsbuildinfo +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/dist/umd/supabase.js +1 -1
- package/package.json +2 -1
- package/src/lib/helpers.ts +44 -0
- package/src/lib/version.ts +1 -1
- package/src/packages/StorageAnalyticsClient.ts +161 -1
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { IcebergRestCatalog } from 'iceberg-js';
|
|
1
2
|
import { StorageError } from '../lib/errors';
|
|
2
3
|
import { Fetch } from '../lib/fetch';
|
|
3
4
|
import { AnalyticBucket } from '../lib/types';
|
|
@@ -184,5 +185,141 @@ export default class StorageAnalyticsClient {
|
|
|
184
185
|
data: null;
|
|
185
186
|
error: StorageError;
|
|
186
187
|
}>;
|
|
188
|
+
/**
|
|
189
|
+
* @alpha
|
|
190
|
+
*
|
|
191
|
+
* Get an Iceberg REST Catalog client configured for a specific analytics bucket
|
|
192
|
+
* Use this to perform advanced table and namespace operations within the bucket
|
|
193
|
+
* The returned client provides full access to the Apache Iceberg REST Catalog API
|
|
194
|
+
*
|
|
195
|
+
* **Public alpha:** This API is part of a public alpha release and may not be available to your account type.
|
|
196
|
+
*
|
|
197
|
+
* @category Analytics Buckets
|
|
198
|
+
* @param bucketName - The name of the analytics bucket (warehouse) to connect to
|
|
199
|
+
* @returns Configured IcebergRestCatalog instance for advanced Iceberg operations
|
|
200
|
+
*
|
|
201
|
+
* @example Get catalog and create table
|
|
202
|
+
* ```js
|
|
203
|
+
* // First, create an analytics bucket
|
|
204
|
+
* const { data: bucket, error: bucketError } = await supabase
|
|
205
|
+
* .storage
|
|
206
|
+
* .analytics
|
|
207
|
+
* .createBucket('analytics-data')
|
|
208
|
+
*
|
|
209
|
+
* // Get the Iceberg catalog for that bucket
|
|
210
|
+
* const catalog = supabase.storage.analytics.from('analytics-data')
|
|
211
|
+
*
|
|
212
|
+
* // Create a namespace
|
|
213
|
+
* await catalog.createNamespace({ namespace: ['default'] })
|
|
214
|
+
*
|
|
215
|
+
* // Create a table with schema
|
|
216
|
+
* await catalog.createTable(
|
|
217
|
+
* { namespace: ['default'] },
|
|
218
|
+
* {
|
|
219
|
+
* name: 'events',
|
|
220
|
+
* schema: {
|
|
221
|
+
* type: 'struct',
|
|
222
|
+
* fields: [
|
|
223
|
+
* { id: 1, name: 'id', type: 'long', required: true },
|
|
224
|
+
* { id: 2, name: 'timestamp', type: 'timestamp', required: true },
|
|
225
|
+
* { id: 3, name: 'user_id', type: 'string', required: false }
|
|
226
|
+
* ],
|
|
227
|
+
* 'schema-id': 0,
|
|
228
|
+
* 'identifier-field-ids': [1]
|
|
229
|
+
* },
|
|
230
|
+
* 'partition-spec': {
|
|
231
|
+
* 'spec-id': 0,
|
|
232
|
+
* fields: []
|
|
233
|
+
* },
|
|
234
|
+
* 'write-order': {
|
|
235
|
+
* 'order-id': 0,
|
|
236
|
+
* fields: []
|
|
237
|
+
* },
|
|
238
|
+
* properties: {
|
|
239
|
+
* 'write.format.default': 'parquet'
|
|
240
|
+
* }
|
|
241
|
+
* }
|
|
242
|
+
* )
|
|
243
|
+
* ```
|
|
244
|
+
*
|
|
245
|
+
* @example List tables in namespace
|
|
246
|
+
* ```js
|
|
247
|
+
* const catalog = supabase.storage.analytics.from('analytics-data')
|
|
248
|
+
*
|
|
249
|
+
* // List all tables in the default namespace
|
|
250
|
+
* const tables = await catalog.listTables({ namespace: ['default'] })
|
|
251
|
+
* console.log(tables) // [{ namespace: ['default'], name: 'events' }]
|
|
252
|
+
* ```
|
|
253
|
+
*
|
|
254
|
+
* @example Working with namespaces
|
|
255
|
+
* ```js
|
|
256
|
+
* const catalog = supabase.storage.analytics.from('analytics-data')
|
|
257
|
+
*
|
|
258
|
+
* // List all namespaces
|
|
259
|
+
* const namespaces = await catalog.listNamespaces()
|
|
260
|
+
*
|
|
261
|
+
* // Create namespace with properties
|
|
262
|
+
* await catalog.createNamespace(
|
|
263
|
+
* { namespace: ['production'] },
|
|
264
|
+
* { properties: { owner: 'data-team', env: 'prod' } }
|
|
265
|
+
* )
|
|
266
|
+
* ```
|
|
267
|
+
*
|
|
268
|
+
* @example Cleanup operations
|
|
269
|
+
* ```js
|
|
270
|
+
* const catalog = supabase.storage.analytics.from('analytics-data')
|
|
271
|
+
*
|
|
272
|
+
* // Drop table with purge option (removes all data)
|
|
273
|
+
* await catalog.dropTable(
|
|
274
|
+
* { namespace: ['default'], name: 'events' },
|
|
275
|
+
* { purge: true }
|
|
276
|
+
* )
|
|
277
|
+
*
|
|
278
|
+
* // Drop namespace (must be empty)
|
|
279
|
+
* await catalog.dropNamespace({ namespace: ['default'] })
|
|
280
|
+
* ```
|
|
281
|
+
*
|
|
282
|
+
* @example Error handling with catalog operations
|
|
283
|
+
* ```js
|
|
284
|
+
* import { IcebergError } from 'iceberg-js'
|
|
285
|
+
*
|
|
286
|
+
* const catalog = supabase.storage.analytics.from('analytics-data')
|
|
287
|
+
*
|
|
288
|
+
* try {
|
|
289
|
+
* await catalog.dropTable({ namespace: ['default'], name: 'events' }, { purge: true })
|
|
290
|
+
* } catch (error) {
|
|
291
|
+
* // Handle 404 errors (resource not found)
|
|
292
|
+
* const is404 =
|
|
293
|
+
* (error instanceof IcebergError && error.status === 404) ||
|
|
294
|
+
* error?.status === 404 ||
|
|
295
|
+
* error?.details?.error?.code === 404
|
|
296
|
+
*
|
|
297
|
+
* if (is404) {
|
|
298
|
+
* console.log('Table does not exist')
|
|
299
|
+
* } else {
|
|
300
|
+
* throw error // Re-throw other errors
|
|
301
|
+
* }
|
|
302
|
+
* }
|
|
303
|
+
* ```
|
|
304
|
+
*
|
|
305
|
+
* @remarks
|
|
306
|
+
* This method provides a bridge between Supabase's bucket management and the standard
|
|
307
|
+
* Apache Iceberg REST Catalog API. The bucket name maps to the Iceberg warehouse parameter.
|
|
308
|
+
* All authentication and configuration is handled automatically using your Supabase credentials.
|
|
309
|
+
*
|
|
310
|
+
* **Error Handling**: Operations may throw `IcebergError` from the iceberg-js library.
|
|
311
|
+
* Always handle 404 errors gracefully when checking for resource existence.
|
|
312
|
+
*
|
|
313
|
+
* **Cleanup Operations**: When using `dropTable`, the `purge: true` option permanently
|
|
314
|
+
* deletes all table data. Without it, the table is marked as deleted but data remains.
|
|
315
|
+
*
|
|
316
|
+
* **Library Dependency**: The returned catalog is an instance of `IcebergRestCatalog`
|
|
317
|
+
* from iceberg-js. For complete API documentation and advanced usage, refer to the
|
|
318
|
+
* [iceberg-js documentation](https://supabase.github.io/iceberg-js/).
|
|
319
|
+
*
|
|
320
|
+
* For advanced Iceberg operations beyond bucket management, you can also install and use
|
|
321
|
+
* the `iceberg-js` package directly with manual configuration.
|
|
322
|
+
*/
|
|
323
|
+
from(bucketName: string): IcebergRestCatalog;
|
|
187
324
|
}
|
|
188
325
|
//# sourceMappingURL=StorageAnalyticsClient.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"StorageAnalyticsClient.d.ts","sourceRoot":"","sources":["../../../src/packages/StorageAnalyticsClient.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"StorageAnalyticsClient.d.ts","sourceRoot":"","sources":["../../../src/packages/StorageAnalyticsClient.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAA;AAE/C,OAAO,EAAkB,YAAY,EAAE,MAAM,eAAe,CAAA;AAC5D,OAAO,EAAE,KAAK,EAAqB,MAAM,cAAc,CAAA;AAEvD,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAA;AAE7C;;;GAGG;AACH,MAAM,CAAC,OAAO,OAAO,sBAAsB;IACzC,SAAS,CAAC,GAAG,EAAE,MAAM,CAAA;IACrB,SAAS,CAAC,OAAO,EAAE;QAAE,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAAA;KAAE,CAAA;IAC5C,SAAS,CAAC,KAAK,EAAE,KAAK,CAAA;IACtB,SAAS,CAAC,kBAAkB,UAAQ;IAEpC;;;;;;;;;;;;;;;;OAgBG;gBACS,GAAG,EAAE,MAAM,EAAE,OAAO,GAAE;QAAE,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAAA;KAAO,EAAE,KAAK,CAAC,EAAE,KAAK;IAM/E;;;;;;;;;;OAUG;IACI,YAAY,IAAI,IAAI;IAK3B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OAiCG;IACG,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CACrC;QACE,IAAI,EAAE,cAAc,CAAA;QACpB,KAAK,EAAE,IAAI,CAAA;KACZ,GACD;QACE,IAAI,EAAE,IAAI,CAAA;QACV,KAAK,EAAE,YAAY,CAAA;KACpB,CACJ;IAgBD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OA6CG;IACG,WAAW,CAAC,OAAO,CAAC,EAAE;QAC1B,KAAK,CAAC,EAAE,MAAM,CAAA;QACd,MAAM,CAAC,EAAE,MAAM,CAAA;QACf,UAAU,CAAC,EAAE,MAAM,GAAG,YAAY,GAAG,YAAY,CAAA;QACjD,SAAS,CAAC,EAAE,KAAK,GAAG,MAAM,CAAA;QAC1B,MAAM,CAAC,EAAE,MAAM,CAAA;KAChB,GAAG,OAAO,CACP;QACE,IAAI,EAAE,cAAc,EAAE,CAAA;QACtB,KAAK,EAAE,IAAI,CAAA;KACZ,GACD;QACE,IAAI,EAAE,IAAI,CAAA;QACV,KAAK,EAAE,YAAY,CAAA;KACpB,CACJ;IA4BD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OA8BG;IACG,YAAY,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAC3C;QACE,IAAI,EAAE;YAAE,OAAO,EAAE,MAAM,CAAA;SAAE,CAAA;QACzB,KAAK,EAAE,IAAI,CAAA;KACZ,GACD;QACE,IAAI,EAAE,IAAI,CAAA;QACV,KAAK,EAAE,YAAY,CAAA;KACpB,CACJ;IAqBD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OAsIG;IACH,IAAI,CAAC,UAAU,EAAE,MAAM,GAAG,kBAAkB;CAuB7C"}
|
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
import { __awaiter } from "tslib";
|
|
2
|
+
import { IcebergRestCatalog } from 'iceberg-js';
|
|
2
3
|
import { DEFAULT_HEADERS } from '../lib/constants';
|
|
3
|
-
import { isStorageError } from '../lib/errors';
|
|
4
|
+
import { isStorageError, StorageError } from '../lib/errors';
|
|
4
5
|
import { get, post, remove } from '../lib/fetch';
|
|
5
|
-
import { resolveFetch } from '../lib/helpers';
|
|
6
|
+
import { isValidBucketName, resolveFetch } from '../lib/helpers';
|
|
6
7
|
/**
|
|
7
8
|
* Client class for managing Analytics Buckets using Iceberg tables
|
|
8
9
|
* Provides methods for creating, listing, and deleting analytics buckets
|
|
@@ -222,5 +223,160 @@ export default class StorageAnalyticsClient {
|
|
|
222
223
|
}
|
|
223
224
|
});
|
|
224
225
|
}
|
|
226
|
+
/**
|
|
227
|
+
* @alpha
|
|
228
|
+
*
|
|
229
|
+
* Get an Iceberg REST Catalog client configured for a specific analytics bucket
|
|
230
|
+
* Use this to perform advanced table and namespace operations within the bucket
|
|
231
|
+
* The returned client provides full access to the Apache Iceberg REST Catalog API
|
|
232
|
+
*
|
|
233
|
+
* **Public alpha:** This API is part of a public alpha release and may not be available to your account type.
|
|
234
|
+
*
|
|
235
|
+
* @category Analytics Buckets
|
|
236
|
+
* @param bucketName - The name of the analytics bucket (warehouse) to connect to
|
|
237
|
+
* @returns Configured IcebergRestCatalog instance for advanced Iceberg operations
|
|
238
|
+
*
|
|
239
|
+
* @example Get catalog and create table
|
|
240
|
+
* ```js
|
|
241
|
+
* // First, create an analytics bucket
|
|
242
|
+
* const { data: bucket, error: bucketError } = await supabase
|
|
243
|
+
* .storage
|
|
244
|
+
* .analytics
|
|
245
|
+
* .createBucket('analytics-data')
|
|
246
|
+
*
|
|
247
|
+
* // Get the Iceberg catalog for that bucket
|
|
248
|
+
* const catalog = supabase.storage.analytics.from('analytics-data')
|
|
249
|
+
*
|
|
250
|
+
* // Create a namespace
|
|
251
|
+
* await catalog.createNamespace({ namespace: ['default'] })
|
|
252
|
+
*
|
|
253
|
+
* // Create a table with schema
|
|
254
|
+
* await catalog.createTable(
|
|
255
|
+
* { namespace: ['default'] },
|
|
256
|
+
* {
|
|
257
|
+
* name: 'events',
|
|
258
|
+
* schema: {
|
|
259
|
+
* type: 'struct',
|
|
260
|
+
* fields: [
|
|
261
|
+
* { id: 1, name: 'id', type: 'long', required: true },
|
|
262
|
+
* { id: 2, name: 'timestamp', type: 'timestamp', required: true },
|
|
263
|
+
* { id: 3, name: 'user_id', type: 'string', required: false }
|
|
264
|
+
* ],
|
|
265
|
+
* 'schema-id': 0,
|
|
266
|
+
* 'identifier-field-ids': [1]
|
|
267
|
+
* },
|
|
268
|
+
* 'partition-spec': {
|
|
269
|
+
* 'spec-id': 0,
|
|
270
|
+
* fields: []
|
|
271
|
+
* },
|
|
272
|
+
* 'write-order': {
|
|
273
|
+
* 'order-id': 0,
|
|
274
|
+
* fields: []
|
|
275
|
+
* },
|
|
276
|
+
* properties: {
|
|
277
|
+
* 'write.format.default': 'parquet'
|
|
278
|
+
* }
|
|
279
|
+
* }
|
|
280
|
+
* )
|
|
281
|
+
* ```
|
|
282
|
+
*
|
|
283
|
+
* @example List tables in namespace
|
|
284
|
+
* ```js
|
|
285
|
+
* const catalog = supabase.storage.analytics.from('analytics-data')
|
|
286
|
+
*
|
|
287
|
+
* // List all tables in the default namespace
|
|
288
|
+
* const tables = await catalog.listTables({ namespace: ['default'] })
|
|
289
|
+
* console.log(tables) // [{ namespace: ['default'], name: 'events' }]
|
|
290
|
+
* ```
|
|
291
|
+
*
|
|
292
|
+
* @example Working with namespaces
|
|
293
|
+
* ```js
|
|
294
|
+
* const catalog = supabase.storage.analytics.from('analytics-data')
|
|
295
|
+
*
|
|
296
|
+
* // List all namespaces
|
|
297
|
+
* const namespaces = await catalog.listNamespaces()
|
|
298
|
+
*
|
|
299
|
+
* // Create namespace with properties
|
|
300
|
+
* await catalog.createNamespace(
|
|
301
|
+
* { namespace: ['production'] },
|
|
302
|
+
* { properties: { owner: 'data-team', env: 'prod' } }
|
|
303
|
+
* )
|
|
304
|
+
* ```
|
|
305
|
+
*
|
|
306
|
+
* @example Cleanup operations
|
|
307
|
+
* ```js
|
|
308
|
+
* const catalog = supabase.storage.analytics.from('analytics-data')
|
|
309
|
+
*
|
|
310
|
+
* // Drop table with purge option (removes all data)
|
|
311
|
+
* await catalog.dropTable(
|
|
312
|
+
* { namespace: ['default'], name: 'events' },
|
|
313
|
+
* { purge: true }
|
|
314
|
+
* )
|
|
315
|
+
*
|
|
316
|
+
* // Drop namespace (must be empty)
|
|
317
|
+
* await catalog.dropNamespace({ namespace: ['default'] })
|
|
318
|
+
* ```
|
|
319
|
+
*
|
|
320
|
+
* @example Error handling with catalog operations
|
|
321
|
+
* ```js
|
|
322
|
+
* import { IcebergError } from 'iceberg-js'
|
|
323
|
+
*
|
|
324
|
+
* const catalog = supabase.storage.analytics.from('analytics-data')
|
|
325
|
+
*
|
|
326
|
+
* try {
|
|
327
|
+
* await catalog.dropTable({ namespace: ['default'], name: 'events' }, { purge: true })
|
|
328
|
+
* } catch (error) {
|
|
329
|
+
* // Handle 404 errors (resource not found)
|
|
330
|
+
* const is404 =
|
|
331
|
+
* (error instanceof IcebergError && error.status === 404) ||
|
|
332
|
+
* error?.status === 404 ||
|
|
333
|
+
* error?.details?.error?.code === 404
|
|
334
|
+
*
|
|
335
|
+
* if (is404) {
|
|
336
|
+
* console.log('Table does not exist')
|
|
337
|
+
* } else {
|
|
338
|
+
* throw error // Re-throw other errors
|
|
339
|
+
* }
|
|
340
|
+
* }
|
|
341
|
+
* ```
|
|
342
|
+
*
|
|
343
|
+
* @remarks
|
|
344
|
+
* This method provides a bridge between Supabase's bucket management and the standard
|
|
345
|
+
* Apache Iceberg REST Catalog API. The bucket name maps to the Iceberg warehouse parameter.
|
|
346
|
+
* All authentication and configuration is handled automatically using your Supabase credentials.
|
|
347
|
+
*
|
|
348
|
+
* **Error Handling**: Operations may throw `IcebergError` from the iceberg-js library.
|
|
349
|
+
* Always handle 404 errors gracefully when checking for resource existence.
|
|
350
|
+
*
|
|
351
|
+
* **Cleanup Operations**: When using `dropTable`, the `purge: true` option permanently
|
|
352
|
+
* deletes all table data. Without it, the table is marked as deleted but data remains.
|
|
353
|
+
*
|
|
354
|
+
* **Library Dependency**: The returned catalog is an instance of `IcebergRestCatalog`
|
|
355
|
+
* from iceberg-js. For complete API documentation and advanced usage, refer to the
|
|
356
|
+
* [iceberg-js documentation](https://supabase.github.io/iceberg-js/).
|
|
357
|
+
*
|
|
358
|
+
* For advanced Iceberg operations beyond bucket management, you can also install and use
|
|
359
|
+
* the `iceberg-js` package directly with manual configuration.
|
|
360
|
+
*/
|
|
361
|
+
from(bucketName) {
|
|
362
|
+
// Validate bucket name using same rules as Supabase Storage API backend
|
|
363
|
+
if (!isValidBucketName(bucketName)) {
|
|
364
|
+
throw new StorageError('Invalid bucket name: File, folder, and bucket names must follow AWS object key naming guidelines ' +
|
|
365
|
+
'and should avoid the use of any other characters.');
|
|
366
|
+
}
|
|
367
|
+
// Construct the Iceberg REST Catalog URL
|
|
368
|
+
// The base URL is /storage/v1/iceberg
|
|
369
|
+
// Note: IcebergRestCatalog from iceberg-js automatically adds /v1/ prefix to API paths
|
|
370
|
+
// so we should NOT append /v1 here (it would cause double /v1/v1/ in the URL)
|
|
371
|
+
return new IcebergRestCatalog({
|
|
372
|
+
baseUrl: this.url,
|
|
373
|
+
catalogName: bucketName, // Maps to the warehouse parameter in Supabase's implementation
|
|
374
|
+
auth: {
|
|
375
|
+
type: 'custom',
|
|
376
|
+
getHeaders: () => __awaiter(this, void 0, void 0, function* () { return this.headers; }),
|
|
377
|
+
},
|
|
378
|
+
fetch: this.fetch,
|
|
379
|
+
});
|
|
380
|
+
}
|
|
225
381
|
}
|
|
226
382
|
//# sourceMappingURL=StorageAnalyticsClient.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"StorageAnalyticsClient.js","sourceRoot":"","sources":["../../../src/packages/StorageAnalyticsClient.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAA;AAClD,OAAO,EAAE,cAAc,
|
|
1
|
+
{"version":3,"file":"StorageAnalyticsClient.js","sourceRoot":"","sources":["../../../src/packages/StorageAnalyticsClient.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAA;AAC/C,OAAO,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAA;AAClD,OAAO,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,eAAe,CAAA;AAC5D,OAAO,EAAS,GAAG,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,cAAc,CAAA;AACvD,OAAO,EAAE,iBAAiB,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAA;AAGhE;;;GAGG;AACH,MAAM,CAAC,OAAO,OAAO,sBAAsB;IAMzC;;;;;;;;;;;;;;;;OAgBG;IACH,YAAY,GAAW,EAAE,UAAqC,EAAE,EAAE,KAAa;QAnBrE,uBAAkB,GAAG,KAAK,CAAA;QAoBlC,IAAI,CAAC,GAAG,GAAG,GAAG,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAA;QACjC,IAAI,CAAC,OAAO,mCAAQ,eAAe,GAAK,OAAO,CAAE,CAAA;QACjD,IAAI,CAAC,KAAK,GAAG,YAAY,CAAC,KAAK,CAAC,CAAA;IAClC,CAAC;IAED;;;;;;;;;;OAUG;IACI,YAAY;QACjB,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAA;QAC9B,OAAO,IAAI,CAAA;IACb,CAAC;IAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OAiCG;IACG,YAAY,CAAC,IAAY;;YAU7B,IAAI,CAAC;gBACH,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,GAAG,IAAI,CAAC,GAAG,SAAS,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,CAAC,CAAA;gBAC9F,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAA;YAC9B,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,IAAI,IAAI,CAAC,kBAAkB,EAAE,CAAC;oBAC5B,MAAM,KAAK,CAAA;gBACb,CAAC;gBACD,IAAI,cAAc,CAAC,KAAK,CAAC,EAAE,CAAC;oBAC1B,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,CAAA;gBAC9B,CAAC;gBAED,MAAM,KAAK,CAAA;YACb,CAAC;QACH,CAAC;KAAA;IAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OA6CG;IACG,WAAW,CAAC,OAMjB;;YAUC,IAAI,CAAC;gBACH,kCAAkC;gBAClC,MAAM,WAAW,GAAG,IAAI,eAAe,EAAE,CAAA;gBACzC,IAAI,CAAA,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,KAAK,MAAK,SAAS;oBAAE,WAAW,CAAC,GAAG,CAAC,OAAO,EAAE,OAAO,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAA;gBACpF,IAAI,CAAA,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,MAAM,MAAK,SAAS;oBAAE,WAAW,CAAC,GAAG,CAAC,QAAQ,EAAE,OAAO,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAA;gBACvF,IAAI,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,UAAU;oBAAE,WAAW,CAAC,GAAG,CAAC,YAAY,EAAE,OAAO,CAAC,UAAU,CAAC,CAAA;gBAC1E,IAAI,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,SAAS;oBAAE,WAAW,CAAC,GAAG,CAAC,WAAW,EAAE,OAAO,CAAC,SAAS,CAAC,CAAA;gBACvE,IAAI,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,MAAM;oBAAE,WAAW,CAAC,GAAG,CAAC,QAAQ,EAAE,OAAO,CAAC,MAAM,CAAC,CAAA;gBAE9D,MAAM,WAAW,GAAG,WAAW,CAAC,QAAQ,EAAE,CAAA;gBAC1C,MAAM,GAAG,GAAG,WAAW,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,WAAW,WAAW,EAAE,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,SAAS,CAAA;gBAEpF,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,IAAI,CAAC,KAAK,EAAE,GAAG,EAAE,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,CAAC,CAAA;gBAElE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAA;YACpC,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,IAAI,IAAI,CAAC,kBAAkB,EAAE,CAAC;oBAC5B,MAAM,KAAK,CAAA;gBACb,CAAC;gBACD,IAAI,cAAc,CAAC,KAAK,CAAC,EAAE,CAAC;oBAC1B,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,CAAA;gBAC9B,CAAC;gBAED,MAAM,KAAK,CAAA;YACb,CAAC;QACH,CAAC;KAAA;IAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OA8BG;IACG,YAAY,CAAC,UAAkB;;YAUnC,IAAI,CAAC;gBACH,MAAM,IAAI,GAAG,MAAM,MAAM,CACvB,IAAI,CAAC,KAAK,EACV,GAAG,IAAI,CAAC,GAAG,WAAW,UAAU,EAAE,EAClC,EAAE,EACF,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,CAC1B,CAAA;gBACD,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAA;YAC9B,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,IAAI,IAAI,CAAC,kBAAkB,EAAE,CAAC;oBAC5B,MAAM,KAAK,CAAA;gBACb,CAAC;gBACD,IAAI,cAAc,CAAC,KAAK,CAAC,EAAE,CAAC;oBAC1B,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,CAAA;gBAC9B,CAAC;gBAED,MAAM,KAAK,CAAA;YACb,CAAC;QACH,CAAC;KAAA;IAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OAsIG;IACH,IAAI,CAAC,UAAkB;QACrB,wEAAwE;QACxE,IAAI,CAAC,iBAAiB,CAAC,UAAU,CAAC,EAAE,CAAC;YACnC,MAAM,IAAI,YAAY,CACpB,mGAAmG;gBACjG,mDAAmD,CACtD,CAAA;QACH,CAAC;QAED,yCAAyC;QACzC,sCAAsC;QACtC,uFAAuF;QACvF,8EAA8E;QAC9E,OAAO,IAAI,kBAAkB,CAAC;YAC5B,OAAO,EAAE,IAAI,CAAC,GAAG;YACjB,WAAW,EAAE,UAAU,EAAE,+DAA+D;YACxF,IAAI,EAAE;gBACJ,IAAI,EAAE,QAAQ;gBACd,UAAU,EAAE,GAAS,EAAE,gDAAC,OAAA,IAAI,CAAC,OAAO,CAAA,GAAA;aACrC;YACD,KAAK,EAAE,IAAI,CAAC,KAAK;SAClB,CAAC,CAAA;IACJ,CAAC;CACF"}
|