universal-db-mcp 0.3.1 → 0.5.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/EXAMPLES.md +296 -0
- package/README.md +8 -5
- package/dist/adapters/mongodb.d.ts +74 -0
- package/dist/adapters/mongodb.d.ts.map +1 -0
- package/dist/adapters/mongodb.js +402 -0
- package/dist/adapters/mongodb.js.map +1 -0
- package/dist/adapters/sqlserver.d.ts +46 -0
- package/dist/adapters/sqlserver.d.ts.map +1 -0
- package/dist/adapters/sqlserver.js +346 -0
- package/dist/adapters/sqlserver.js.map +1 -0
- package/dist/index.js +29 -4
- package/dist/index.js.map +1 -1
- package/dist/types/adapter.d.ts +3 -3
- package/dist/types/adapter.d.ts.map +1 -1
- package/package.json +9 -1
package/EXAMPLES.md
CHANGED
|
@@ -8,6 +8,9 @@
|
|
|
8
8
|
- [PostgreSQL 使用示例](#postgresql-使用示例)
|
|
9
9
|
- [Redis 使用示例](#redis-使用示例)
|
|
10
10
|
- [Oracle 使用示例](#oracle-使用示例)
|
|
11
|
+
- [达梦 使用示例](#达梦-使用示例)
|
|
12
|
+
- [SQL Server 使用示例](#sql-server-使用示例)
|
|
13
|
+
- [MongoDB 使用示例](#mongodb-使用示例)
|
|
11
14
|
- [Claude Desktop 配置示例](#claude-desktop-配置示例)
|
|
12
15
|
- [常见使用场景](#常见使用场景)
|
|
13
16
|
|
|
@@ -351,6 +354,299 @@ npm install -g dmdb
|
|
|
351
354
|
|
|
352
355
|
---
|
|
353
356
|
|
|
357
|
+
## SQL Server 使用示例
|
|
358
|
+
|
|
359
|
+
### 基础配置(只读模式)
|
|
360
|
+
|
|
361
|
+
```json
|
|
362
|
+
{
|
|
363
|
+
"mcpServers": {
|
|
364
|
+
"sqlserver-db": {
|
|
365
|
+
"command": "npx",
|
|
366
|
+
"args": [
|
|
367
|
+
"universal-db-mcp",
|
|
368
|
+
"--type", "sqlserver",
|
|
369
|
+
"--host", "localhost",
|
|
370
|
+
"--port", "1433",
|
|
371
|
+
"--user", "sa",
|
|
372
|
+
"--password", "YourPassword123",
|
|
373
|
+
"--database", "master"
|
|
374
|
+
]
|
|
375
|
+
}
|
|
376
|
+
}
|
|
377
|
+
}
|
|
378
|
+
```
|
|
379
|
+
|
|
380
|
+
**提示**: 也可以使用 `--type mssql` 作为别名。
|
|
381
|
+
|
|
382
|
+
### 启用写入模式
|
|
383
|
+
|
|
384
|
+
```json
|
|
385
|
+
{
|
|
386
|
+
"mcpServers": {
|
|
387
|
+
"sqlserver-write": {
|
|
388
|
+
"command": "npx",
|
|
389
|
+
"args": [
|
|
390
|
+
"universal-db-mcp",
|
|
391
|
+
"--type", "sqlserver",
|
|
392
|
+
"--host", "localhost",
|
|
393
|
+
"--port", "1433",
|
|
394
|
+
"--user", "sa",
|
|
395
|
+
"--password", "YourPassword123",
|
|
396
|
+
"--database", "MyDatabase",
|
|
397
|
+
"--danger-allow-write"
|
|
398
|
+
]
|
|
399
|
+
}
|
|
400
|
+
}
|
|
401
|
+
}
|
|
402
|
+
```
|
|
403
|
+
|
|
404
|
+
### 连接 Azure SQL Database
|
|
405
|
+
|
|
406
|
+
```json
|
|
407
|
+
{
|
|
408
|
+
"mcpServers": {
|
|
409
|
+
"azure-sql": {
|
|
410
|
+
"command": "npx",
|
|
411
|
+
"args": [
|
|
412
|
+
"universal-db-mcp",
|
|
413
|
+
"--type", "sqlserver",
|
|
414
|
+
"--host", "myserver.database.windows.net",
|
|
415
|
+
"--port", "1433",
|
|
416
|
+
"--user", "myadmin",
|
|
417
|
+
"--password", "MyPassword123!",
|
|
418
|
+
"--database", "mydatabase"
|
|
419
|
+
]
|
|
420
|
+
}
|
|
421
|
+
}
|
|
422
|
+
}
|
|
423
|
+
```
|
|
424
|
+
|
|
425
|
+
**注意**: 连接 Azure SQL Database 时会自动启用加密连接。
|
|
426
|
+
|
|
427
|
+
### 与 Claude 对话示例
|
|
428
|
+
|
|
429
|
+
**用户**: 查看数据库中有哪些表?
|
|
430
|
+
|
|
431
|
+
**Claude 会自动**:
|
|
432
|
+
|
|
433
|
+
1. 调用 `get_schema` 工具
|
|
434
|
+
2. 执行查询: `SELECT TABLE_SCHEMA, TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_TYPE = 'BASE TABLE'`
|
|
435
|
+
3. 返回表列表
|
|
436
|
+
|
|
437
|
+
**用户**: 查看 Users 表的结构
|
|
438
|
+
|
|
439
|
+
**Claude 会自动**:
|
|
440
|
+
|
|
441
|
+
1. 调用 `get_table_info` 工具
|
|
442
|
+
2. 返回列信息、主键、索引等详细信息
|
|
443
|
+
|
|
444
|
+
**用户**: 统计每个部门的员工数量
|
|
445
|
+
|
|
446
|
+
**Claude 会自动**:
|
|
447
|
+
|
|
448
|
+
1. 理解需求
|
|
449
|
+
2. 生成 SQL: `SELECT DepartmentID, COUNT(*) as EmployeeCount FROM Employees GROUP BY DepartmentID ORDER BY EmployeeCount DESC`
|
|
450
|
+
3. 执行并返回结果
|
|
451
|
+
|
|
452
|
+
**用户**: 查找最近一周创建的订单
|
|
453
|
+
|
|
454
|
+
**Claude 会自动**:
|
|
455
|
+
|
|
456
|
+
1. 生成 SQL: `SELECT * FROM Orders WHERE CreatedDate >= DATEADD(day, -7, GETDATE()) ORDER BY CreatedDate DESC`
|
|
457
|
+
2. 执行并返回结果
|
|
458
|
+
|
|
459
|
+
### 注意事项
|
|
460
|
+
|
|
461
|
+
1. **默认端口**: SQL Server 默认端口为 1433
|
|
462
|
+
2. **身份验证**: 支持 SQL Server 身份验证(用户名/密码)
|
|
463
|
+
3. **加密连接**: 连接 Azure SQL 时会自动启用加密,本地 SQL Server 默认不加密
|
|
464
|
+
4. **数据库名**: 必须指定数据库名(如 master、tempdb 或自定义数据库)
|
|
465
|
+
5. **权限**: 确保用户有足够的权限访问系统视图(INFORMATION_SCHEMA)
|
|
466
|
+
6. **参数化查询**: 支持 `?` 占位符,会自动转换为 SQL Server 的 `@param0` 语法
|
|
467
|
+
|
|
468
|
+
---
|
|
469
|
+
|
|
470
|
+
## MongoDB 使用示例
|
|
471
|
+
|
|
472
|
+
### 基础配置(只读模式)
|
|
473
|
+
|
|
474
|
+
```json
|
|
475
|
+
{
|
|
476
|
+
"mcpServers": {
|
|
477
|
+
"mongodb-db": {
|
|
478
|
+
"command": "npx",
|
|
479
|
+
"args": [
|
|
480
|
+
"universal-db-mcp",
|
|
481
|
+
"--type", "mongodb",
|
|
482
|
+
"--host", "localhost",
|
|
483
|
+
"--port", "27017",
|
|
484
|
+
"--user", "admin",
|
|
485
|
+
"--password", "your_password",
|
|
486
|
+
"--database", "myapp"
|
|
487
|
+
]
|
|
488
|
+
}
|
|
489
|
+
}
|
|
490
|
+
}
|
|
491
|
+
```
|
|
492
|
+
|
|
493
|
+
### 无认证连接(开发环境)
|
|
494
|
+
|
|
495
|
+
```json
|
|
496
|
+
{
|
|
497
|
+
"mcpServers": {
|
|
498
|
+
"mongodb-local": {
|
|
499
|
+
"command": "npx",
|
|
500
|
+
"args": [
|
|
501
|
+
"universal-db-mcp",
|
|
502
|
+
"--type", "mongodb",
|
|
503
|
+
"--host", "localhost",
|
|
504
|
+
"--port", "27017",
|
|
505
|
+
"--database", "test"
|
|
506
|
+
]
|
|
507
|
+
}
|
|
508
|
+
}
|
|
509
|
+
}
|
|
510
|
+
```
|
|
511
|
+
|
|
512
|
+
### 启用写入模式
|
|
513
|
+
|
|
514
|
+
```json
|
|
515
|
+
{
|
|
516
|
+
"mcpServers": {
|
|
517
|
+
"mongodb-write": {
|
|
518
|
+
"command": "npx",
|
|
519
|
+
"args": [
|
|
520
|
+
"universal-db-mcp",
|
|
521
|
+
"--type", "mongodb",
|
|
522
|
+
"--host", "localhost",
|
|
523
|
+
"--port", "27017",
|
|
524
|
+
"--user", "dev_user",
|
|
525
|
+
"--password", "dev_password",
|
|
526
|
+
"--database", "development",
|
|
527
|
+
"--danger-allow-write"
|
|
528
|
+
]
|
|
529
|
+
}
|
|
530
|
+
}
|
|
531
|
+
}
|
|
532
|
+
```
|
|
533
|
+
|
|
534
|
+
### 连接 MongoDB Atlas
|
|
535
|
+
|
|
536
|
+
```json
|
|
537
|
+
{
|
|
538
|
+
"mcpServers": {
|
|
539
|
+
"mongodb-atlas": {
|
|
540
|
+
"command": "npx",
|
|
541
|
+
"args": [
|
|
542
|
+
"universal-db-mcp",
|
|
543
|
+
"--type", "mongodb",
|
|
544
|
+
"--host", "cluster0.xxxxx.mongodb.net",
|
|
545
|
+
"--port", "27017",
|
|
546
|
+
"--user", "myuser",
|
|
547
|
+
"--password", "mypassword",
|
|
548
|
+
"--database", "production"
|
|
549
|
+
]
|
|
550
|
+
}
|
|
551
|
+
}
|
|
552
|
+
}
|
|
553
|
+
```
|
|
554
|
+
|
|
555
|
+
### 查询格式
|
|
556
|
+
|
|
557
|
+
MongoDB 适配器支持两种查询格式:
|
|
558
|
+
|
|
559
|
+
#### 1. JSON 格式(推荐)
|
|
560
|
+
|
|
561
|
+
```json
|
|
562
|
+
{
|
|
563
|
+
"collection": "users",
|
|
564
|
+
"operation": "find",
|
|
565
|
+
"query": {"age": {"$gt": 18}},
|
|
566
|
+
"options": {"limit": 10}
|
|
567
|
+
}
|
|
568
|
+
```
|
|
569
|
+
|
|
570
|
+
#### 2. 简化格式
|
|
571
|
+
|
|
572
|
+
```javascript
|
|
573
|
+
db.users.find({"age": {"$gt": 18}})
|
|
574
|
+
```
|
|
575
|
+
|
|
576
|
+
### 与 Claude 对话示例
|
|
577
|
+
|
|
578
|
+
**用户**: 查看数据库中有哪些集合?
|
|
579
|
+
|
|
580
|
+
**Claude 会自动**:
|
|
581
|
+
1. 调用 `get_schema` 工具
|
|
582
|
+
2. 返回所有集合的列表和基本信息
|
|
583
|
+
3. 显示每个集合的文档数量和推断的字段结构
|
|
584
|
+
|
|
585
|
+
**用户**: 查询 users 集合中年龄大于 18 的用户
|
|
586
|
+
|
|
587
|
+
**Claude 会自动**:
|
|
588
|
+
1. 生成查询: `{"collection": "users", "operation": "find", "query": {"age": {"$gt": 18}}}`
|
|
589
|
+
2. 执行并返回结果
|
|
590
|
+
|
|
591
|
+
**用户**: 统计每个城市的用户数量
|
|
592
|
+
|
|
593
|
+
**Claude 会自动**:
|
|
594
|
+
1. 理解需求
|
|
595
|
+
2. 生成聚合查询:
|
|
596
|
+
```json
|
|
597
|
+
{
|
|
598
|
+
"collection": "users",
|
|
599
|
+
"operation": "aggregate",
|
|
600
|
+
"pipeline": [
|
|
601
|
+
{"$group": {"_id": "$city", "count": {"$sum": 1}}},
|
|
602
|
+
{"$sort": {"count": -1}}
|
|
603
|
+
]
|
|
604
|
+
}
|
|
605
|
+
```
|
|
606
|
+
3. 执行并返回结果
|
|
607
|
+
|
|
608
|
+
**用户**: 查找最近创建的 10 个订单
|
|
609
|
+
|
|
610
|
+
**Claude 会自动**:
|
|
611
|
+
1. 生成查询:
|
|
612
|
+
```json
|
|
613
|
+
{
|
|
614
|
+
"collection": "orders",
|
|
615
|
+
"operation": "find",
|
|
616
|
+
"query": {},
|
|
617
|
+
"options": {"sort": {"createdAt": -1}, "limit": 10}
|
|
618
|
+
}
|
|
619
|
+
```
|
|
620
|
+
2. 执行并返回结果
|
|
621
|
+
|
|
622
|
+
### 支持的操作
|
|
623
|
+
|
|
624
|
+
#### 查询操作(只读模式)
|
|
625
|
+
- `find` - 查询文档
|
|
626
|
+
- `findOne` - 查询单个文档
|
|
627
|
+
- `count` / `countDocuments` - 统计文档数量
|
|
628
|
+
- `distinct` - 获取字段的不同值
|
|
629
|
+
- `aggregate` - 聚合管道查询
|
|
630
|
+
|
|
631
|
+
#### 写入操作(需要 --danger-allow-write)
|
|
632
|
+
- `insert` / `insertOne` - 插入单个文档
|
|
633
|
+
- `insertMany` - 插入多个文档
|
|
634
|
+
- `update` / `updateOne` - 更新单个文档
|
|
635
|
+
- `updateMany` - 更新多个文档
|
|
636
|
+
- `delete` / `deleteOne` - 删除单个文档
|
|
637
|
+
- `deleteMany` - 删除多个文档
|
|
638
|
+
|
|
639
|
+
### 注意事项
|
|
640
|
+
|
|
641
|
+
1. **默认端口**: MongoDB 默认端口为 27017
|
|
642
|
+
2. **认证**: 支持用户名/密码认证,默认认证数据库为 admin
|
|
643
|
+
3. **集合结构**: MongoDB 是无模式数据库,Schema 信息通过采样文档推断
|
|
644
|
+
4. **ObjectId**: 查询结果中的 ObjectId 会自动转换为字符串
|
|
645
|
+
5. **查询语法**: 使用 MongoDB 原生查询语法,不是 SQL
|
|
646
|
+
6. **聚合管道**: 支持完整的聚合管道功能
|
|
647
|
+
|
|
648
|
+
---
|
|
649
|
+
|
|
354
650
|
## Claude Desktop 配置示例
|
|
355
651
|
|
|
356
652
|
### 同时连接多个数据库
|
package/README.md
CHANGED
|
@@ -19,7 +19,7 @@
|
|
|
19
19
|
|
|
20
20
|
✅ **智能表结构理解** - 自动获取数据库 Schema,提供精准建议
|
|
21
21
|
|
|
22
|
-
✅ **多数据库支持** - MySQL、PostgreSQL、Redis、Oracle
|
|
22
|
+
✅ **多数据库支持** - MySQL、PostgreSQL、Redis、Oracle、达梦、SQL Server、MongoDB 一键切换
|
|
23
23
|
|
|
24
24
|
✅ **安全第一** - 默认只读模式,防止误操作删库
|
|
25
25
|
|
|
@@ -33,7 +33,7 @@
|
|
|
33
33
|
|
|
34
34
|
- Node.js >= 20
|
|
35
35
|
- Claude Desktop 应用
|
|
36
|
-
- 至少一个数据库实例(MySQL/PostgreSQL/Redis/Oracle
|
|
36
|
+
- 至少一个数据库实例(MySQL/PostgreSQL/Redis/Oracle/达梦/SQL Server/MongoDB)
|
|
37
37
|
|
|
38
38
|
### 安装
|
|
39
39
|
|
|
@@ -113,7 +113,8 @@ Claude 会自动调用数据库工具完成查询!
|
|
|
113
113
|
| Redis | `--type redis` | 6379 | ✅ 已支持 | - |
|
|
114
114
|
| Oracle(12c以上) | `--type oracle` | 1521 | ✅ 已支持 | - |
|
|
115
115
|
| 达梦(DM7/DM8) | `--type dm` | 5236 | ✅ 已支持 | 驱动自动安装 |
|
|
116
|
-
|
|
|
116
|
+
| SQL Server (2012+) | `--type sqlserver` 或 `--type mssql` | 1433 | ✅ 已支持 | 支持 Azure SQL Database |
|
|
117
|
+
| MongoDB | `--type mongodb` | 27017 | ✅ 已支持 | 支持 MongoDB 4.0+ |
|
|
117
118
|
| SQLite | `--type sqlite` | - | 🚧 计划中 | - |
|
|
118
119
|
|
|
119
120
|
**注意**: 达梦数据库驱动 `dmdb` 会作为可选依赖自动安装。如果安装失败,请手动运行 `npm install -g dmdb`。
|
|
@@ -124,7 +125,7 @@ Claude 会自动调用数据库工具完成查询!
|
|
|
124
125
|
universal-db-mcp [选项]
|
|
125
126
|
|
|
126
127
|
选项:
|
|
127
|
-
--type <db> 数据库类型 (mysql|postgres|redis|oracle|dm)
|
|
128
|
+
--type <db> 数据库类型 (mysql|postgres|redis|oracle|dm|sqlserver|mssql|mongodb)
|
|
128
129
|
--host <host> 数据库主机地址 (默认: localhost)
|
|
129
130
|
--port <port> 数据库端口
|
|
130
131
|
--user <user> 用户名
|
|
@@ -145,7 +146,9 @@ src/
|
|
|
145
146
|
│ ├── postgres.ts
|
|
146
147
|
│ ├── redis.ts
|
|
147
148
|
│ ├── oracle.ts
|
|
148
|
-
│
|
|
149
|
+
│ ├── dm.ts
|
|
150
|
+
│ ├── sqlserver.ts
|
|
151
|
+
│ └── mongodb.ts
|
|
149
152
|
├── types/ # TypeScript 类型定义
|
|
150
153
|
│ └── adapter.ts
|
|
151
154
|
├── utils/ # 工具函数
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* MongoDB 数据库适配器
|
|
3
|
+
* 使用 mongodb 驱动实现 DbAdapter 接口
|
|
4
|
+
*
|
|
5
|
+
* 注意:MongoDB 是 NoSQL 文档数据库,没有固定的表结构
|
|
6
|
+
* 本适配器提供集合操作和文档查询功能
|
|
7
|
+
*/
|
|
8
|
+
import type { DbAdapter, QueryResult, SchemaInfo } from '../types/adapter.js';
|
|
9
|
+
export declare class MongoDBAdapter implements DbAdapter {
|
|
10
|
+
private client;
|
|
11
|
+
private db;
|
|
12
|
+
private config;
|
|
13
|
+
constructor(config: {
|
|
14
|
+
host: string;
|
|
15
|
+
port: number;
|
|
16
|
+
user?: string;
|
|
17
|
+
password?: string;
|
|
18
|
+
database?: string;
|
|
19
|
+
authSource?: string;
|
|
20
|
+
});
|
|
21
|
+
/**
|
|
22
|
+
* 连接到 MongoDB 数据库
|
|
23
|
+
*/
|
|
24
|
+
connect(): Promise<void>;
|
|
25
|
+
/**
|
|
26
|
+
* 断开数据库连接
|
|
27
|
+
*/
|
|
28
|
+
disconnect(): Promise<void>;
|
|
29
|
+
/**
|
|
30
|
+
* 执行 MongoDB 查询
|
|
31
|
+
*
|
|
32
|
+
* 支持的查询格式:
|
|
33
|
+
* 1. JSON 格式的 MongoDB 查询:
|
|
34
|
+
* {"collection": "users", "operation": "find", "query": {"age": {"$gt": 18}}}
|
|
35
|
+
* 2. 简化的命令格式:
|
|
36
|
+
* db.users.find({"age": {"$gt": 18}})
|
|
37
|
+
* 3. 聚合管道:
|
|
38
|
+
* {"collection": "users", "operation": "aggregate", "pipeline": [...]}
|
|
39
|
+
*/
|
|
40
|
+
executeQuery(query: string, _params?: unknown[]): Promise<QueryResult>;
|
|
41
|
+
/**
|
|
42
|
+
* 解析查询字符串
|
|
43
|
+
*/
|
|
44
|
+
private parseQuery;
|
|
45
|
+
/**
|
|
46
|
+
* 执行 MongoDB 操作
|
|
47
|
+
*/
|
|
48
|
+
private executeOperation;
|
|
49
|
+
/**
|
|
50
|
+
* 格式化 MongoDB 文档(将 ObjectId 转换为字符串)
|
|
51
|
+
*/
|
|
52
|
+
private formatDocument;
|
|
53
|
+
/**
|
|
54
|
+
* 获取 MongoDB 数据库信息
|
|
55
|
+
*
|
|
56
|
+
* MongoDB 没有固定的表结构,这里通过采样文档来推断集合的字段
|
|
57
|
+
*/
|
|
58
|
+
getSchema(): Promise<SchemaInfo>;
|
|
59
|
+
/**
|
|
60
|
+
* 获取 MongoDB 值的类型
|
|
61
|
+
*/
|
|
62
|
+
private getMongoType;
|
|
63
|
+
/**
|
|
64
|
+
* 检查是否为写操作
|
|
65
|
+
*
|
|
66
|
+
* MongoDB 写操作包括:insert, update, delete, drop 等
|
|
67
|
+
*/
|
|
68
|
+
isWriteOperation(query: string): boolean;
|
|
69
|
+
/**
|
|
70
|
+
* 检查操作名称是否为写操作
|
|
71
|
+
*/
|
|
72
|
+
private isWriteOperationName;
|
|
73
|
+
}
|
|
74
|
+
//# sourceMappingURL=mongodb.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mongodb.d.ts","sourceRoot":"","sources":["../../src/adapters/mongodb.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAGH,OAAO,KAAK,EACV,SAAS,EACT,WAAW,EACX,UAAU,EAGX,MAAM,qBAAqB,CAAC;AAE7B,qBAAa,cAAe,YAAW,SAAS;IAC9C,OAAO,CAAC,MAAM,CAA4B;IAC1C,OAAO,CAAC,EAAE,CAAmB;IAC7B,OAAO,CAAC,MAAM,CAOZ;gBAEU,MAAM,EAAE;QAClB,IAAI,EAAE,MAAM,CAAC;QACb,IAAI,EAAE,MAAM,CAAC;QACb,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,UAAU,CAAC,EAAE,MAAM,CAAC;KACrB;IAID;;OAEG;IACG,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAyC9B;;OAEG;IACG,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAQjC;;;;;;;;;;OAUG;IACG,YAAY,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,WAAW,CAAC;IA+B5E;;OAEG;IACH,OAAO,CAAC,UAAU;IA2ClB;;OAEG;YACW,gBAAgB;IA4H9B;;OAEG;IACH,OAAO,CAAC,cAAc;IAuBtB;;;;OAIG;IACG,SAAS,IAAI,OAAO,CAAC,UAAU,CAAC;IA8FtC;;OAEG;IACH,OAAO,CAAC,YAAY;IAYpB;;;;OAIG;IACH,gBAAgB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO;IAsBxC;;OAEG;IACH,OAAO,CAAC,oBAAoB;CAc7B"}
|