dbgraph 0.1.2 → 0.1.4
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.ZH-cn.md +53 -0
- package/README.md +53 -0
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +2 -0
- package/dist/config.js.map +1 -1
- package/dist/introspect/base.d.ts.map +1 -1
- package/dist/introspect/base.js +8 -1
- package/dist/introspect/base.js.map +1 -1
- package/dist/introspect/connection.d.ts +5 -0
- package/dist/introspect/connection.d.ts.map +1 -1
- package/dist/introspect/connection.js +118 -1
- package/dist/introspect/connection.js.map +1 -1
- package/dist/introspect/index.d.ts +2 -0
- package/dist/introspect/index.d.ts.map +1 -1
- package/dist/introspect/index.js +9 -1
- package/dist/introspect/index.js.map +1 -1
- package/dist/introspect/mongodb.d.ts +47 -0
- package/dist/introspect/mongodb.d.ts.map +1 -0
- package/dist/introspect/mongodb.js +255 -0
- package/dist/introspect/mongodb.js.map +1 -0
- package/dist/introspect/mssql.d.ts +67 -0
- package/dist/introspect/mssql.d.ts.map +1 -0
- package/dist/introspect/mssql.js +399 -0
- package/dist/introspect/mssql.js.map +1 -0
- package/dist/introspect/postgres.d.ts.map +1 -1
- package/dist/introspect/postgres.js +88 -82
- package/dist/introspect/postgres.js.map +1 -1
- package/dist/types.d.ts +4 -0
- package/dist/types.d.ts.map +1 -1
- package/package.json +1 -1
package/README.ZH-cn.md
CHANGED
|
@@ -43,6 +43,59 @@ npx dbgraph serve
|
|
|
43
43
|
|
|
44
44
|
AI 代理连接 MCP 后自动发现 `dbgraph_*` 工具,用于 schema 感知的 SQL 生成。
|
|
45
45
|
|
|
46
|
+
## MCP 配置
|
|
47
|
+
|
|
48
|
+
在 AI 代理的配置文件中添加 DBGraph 作为 MCP 服务器:
|
|
49
|
+
|
|
50
|
+
**opencode**(`~/.config/opencode/opencode.json`):
|
|
51
|
+
```json
|
|
52
|
+
{
|
|
53
|
+
"mcp": {
|
|
54
|
+
"dbgraph": {
|
|
55
|
+
"type": "local",
|
|
56
|
+
"command": ["npx", "dbgraph", "serve", "--auto-refresh"],
|
|
57
|
+
"enabled": true
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
```
|
|
62
|
+
|
|
63
|
+
**Cursor** → 设置 → MCP Servers → 添加:
|
|
64
|
+
```json
|
|
65
|
+
{
|
|
66
|
+
"mcpServers": {
|
|
67
|
+
"dbgraph": {
|
|
68
|
+
"command": "npx",
|
|
69
|
+
"args": ["dbgraph", "serve", "--auto-refresh"]
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
```
|
|
74
|
+
|
|
75
|
+
**Claude Code**(`~/.claude/settings.json`):
|
|
76
|
+
```json
|
|
77
|
+
{
|
|
78
|
+
"mcpServers": {
|
|
79
|
+
"dbgraph": {
|
|
80
|
+
"command": "npx",
|
|
81
|
+
"args": ["dbgraph", "serve", "--auto-refresh"]
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
```
|
|
86
|
+
|
|
87
|
+
**Codex CLI**(`~/.codexclirc.json`):
|
|
88
|
+
```json
|
|
89
|
+
{
|
|
90
|
+
"mcpServers": {
|
|
91
|
+
"dbgraph": {
|
|
92
|
+
"type": "local",
|
|
93
|
+
"command": ["npx", "dbgraph", "serve", "--auto-refresh"]
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
```
|
|
98
|
+
|
|
46
99
|
## 为什么用 DBGraph?
|
|
47
100
|
|
|
48
101
|
LLM 写 SQL 出错的最大原因是**不知道库表结构**——表名靠猜、列名靠蒙、JOIN 条件靠碰运气。DBGraph 把数据库 schema(表、列、类型、外键、约束、索引)提取为**可搜索的知识图谱**存在 `.dbgraph/` 中。AI 代理通过 MCP 工具直接查询,无需数据库直连。
|
package/README.md
CHANGED
|
@@ -43,6 +43,59 @@ npx dbgraph serve
|
|
|
43
43
|
|
|
44
44
|
AI agents connected to MCP automatically discover `dbgraph_*` tools for schema-aware SQL generation.
|
|
45
45
|
|
|
46
|
+
## MCP Configuration
|
|
47
|
+
|
|
48
|
+
Add DBGraph as an MCP server in your agent's config:
|
|
49
|
+
|
|
50
|
+
**opencode** (`~/.config/opencode/opencode.json`):
|
|
51
|
+
```json
|
|
52
|
+
{
|
|
53
|
+
"mcp": {
|
|
54
|
+
"dbgraph": {
|
|
55
|
+
"type": "local",
|
|
56
|
+
"command": ["npx", "dbgraph", "serve", "--auto-refresh"],
|
|
57
|
+
"enabled": true
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
```
|
|
62
|
+
|
|
63
|
+
**Cursor** → Settings → MCP Servers → Add:
|
|
64
|
+
```json
|
|
65
|
+
{
|
|
66
|
+
"mcpServers": {
|
|
67
|
+
"dbgraph": {
|
|
68
|
+
"command": "npx",
|
|
69
|
+
"args": ["dbgraph", "serve", "--auto-refresh"]
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
```
|
|
74
|
+
|
|
75
|
+
**Claude Code** (`~/.claude/settings.json`):
|
|
76
|
+
```json
|
|
77
|
+
{
|
|
78
|
+
"mcpServers": {
|
|
79
|
+
"dbgraph": {
|
|
80
|
+
"command": "npx",
|
|
81
|
+
"args": ["dbgraph", "serve", "--auto-refresh"]
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
```
|
|
86
|
+
|
|
87
|
+
**Codex CLI** (`~/.codexclirc.json`):
|
|
88
|
+
```json
|
|
89
|
+
{
|
|
90
|
+
"mcpServers": {
|
|
91
|
+
"dbgraph": {
|
|
92
|
+
"type": "local",
|
|
93
|
+
"command": ["npx", "dbgraph", "serve", "--auto-refresh"]
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
```
|
|
98
|
+
|
|
46
99
|
## Why DBGraph?
|
|
47
100
|
|
|
48
101
|
LLMs write wrong SQL because they **don't know your schema** — guessing table names, column names, and JOIN conditions. DBGraph extracts your complete database schema (tables, columns, types, foreign keys, constraints, indexes) into a **searchable knowledge graph** stored in `.dbgraph/`. AI agents query it via MCP tools directly — no live database connection needed.
|
package/dist/config.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,OAAO,EAAE,kBAAkB,EAAY,MAAM,SAAS,CAAC;AAGvD,eAAO,MAAM,eAAe,oBAAoB,CAAC;AAEjD,MAAM,WAAW,aAAa;IAC5B,iDAAiD;IACjD,SAAS,EAAE,kBAAkB,EAAE,CAAC;CACjC;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAe/D;AAED;;GAEG;AACH,wBAAgB,UAAU,CAAC,UAAU,EAAE,MAAM,GAAG,aAAa,
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,OAAO,EAAE,kBAAkB,EAAY,MAAM,SAAS,CAAC;AAGvD,eAAO,MAAM,eAAe,oBAAoB,CAAC;AAEjD,MAAM,WAAW,aAAa;IAC5B,iDAAiD;IACjD,SAAS,EAAE,kBAAkB,EAAE,CAAC;CACjC;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAe/D;AAED;;GAEG;AACH,wBAAgB,UAAU,CAAC,UAAU,EAAE,MAAM,GAAG,aAAa,CAmE5D;AAED;;GAEG;AACH,wBAAgB,qBAAqB,IAAI,MAAM,CA2B9C"}
|
package/dist/config.js
CHANGED
package/dist/config.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":";AAAA;;;;;GAKG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAiBH,wCAeC;AAKD,
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"base.d.ts","sourceRoot":"","sources":["../../src/introspect/base.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EACL,gBAAgB,EAChB,QAAQ,EACR,kBAAkB,EAClB,IAAI,EACJ,QAAQ,EACR,IAAI,EACJ,QAAQ,EACT,MAAM,UAAU,CAAC;AAIlB;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,kDAAkD;IAClD,UAAU,IAAI,OAAO,CAAC,gBAAgB,CAAC,CAAC;IAExC,uCAAuC;IACvC,cAAc,IAAI,OAAO,CAAC,OAAO,CAAC,CAAC;IAEnC,qDAAqD;IACrD,aAAa,IAAI,MAAM,CAAC;IAExB,gCAAgC;IAChC,WAAW,IAAI,MAAM,CAAC;IAEtB,sCAAsC;IACtC,SAAS,IAAI,QAAQ,CAAC;CACvB;AAED;;;;;;;;;GASG;AACH,8BAAsB,gBAAiB,YAAW,YAAY;IAChD,SAAS,CAAC,MAAM,EAAE,kBAAkB;gBAA1B,MAAM,EAAE,kBAAkB;IAIhD,QAAQ,CAAC,UAAU,IAAI,OAAO,CAAC,gBAAgB,CAAC;IAEhD,SAAS,IAAI,QAAQ;IAIrB,WAAW,IAAI,MAAM;IAIrB,aAAa,IAAI,MAAM;
|
|
1
|
+
{"version":3,"file":"base.d.ts","sourceRoot":"","sources":["../../src/introspect/base.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EACL,gBAAgB,EAChB,QAAQ,EACR,kBAAkB,EAClB,IAAI,EACJ,QAAQ,EACR,IAAI,EACJ,QAAQ,EACT,MAAM,UAAU,CAAC;AAIlB;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,kDAAkD;IAClD,UAAU,IAAI,OAAO,CAAC,gBAAgB,CAAC,CAAC;IAExC,uCAAuC;IACvC,cAAc,IAAI,OAAO,CAAC,OAAO,CAAC,CAAC;IAEnC,qDAAqD;IACrD,aAAa,IAAI,MAAM,CAAC;IAExB,gCAAgC;IAChC,WAAW,IAAI,MAAM,CAAC;IAEtB,sCAAsC;IACtC,SAAS,IAAI,QAAQ,CAAC;CACvB;AAED;;;;;;;;;GASG;AACH,8BAAsB,gBAAiB,YAAW,YAAY;IAChD,SAAS,CAAC,MAAM,EAAE,kBAAkB;gBAA1B,MAAM,EAAE,kBAAkB;IAIhD,QAAQ,CAAC,UAAU,IAAI,OAAO,CAAC,gBAAgB,CAAC;IAEhD,SAAS,IAAI,QAAQ;IAIrB,WAAW,IAAI,MAAM;IAIrB,aAAa,IAAI,MAAM;IAiBjB,cAAc,IAAI,OAAO,CAAC,OAAO,CAAC;IAYxC,+EAA+E;IAC/E,SAAS,CAAC,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM;IAIhD,iEAAiE;IACjE,SAAS,CAAC,EAAE,CAAC,GAAG,KAAK,EAAE,MAAM,EAAE,GAAG,MAAM;IAIxC,sDAAsD;IACtD,SAAS,CAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM;IAIzD,8DAA8D;IAC9D,SAAS,CAAC,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM;IAM1E;;OAEG;IACH,SAAS,CAAC,QAAQ,CAChB,IAAI,EAAE,QAAQ,EACd,IAAI,EAAE,MAAM,EACZ,aAAa,EAAE,MAAM,EACrB,QAAQ,EAAE,MAAM,EAChB,KAAK,CAAC,EAAE,OAAO,CAAC,IAAI,CAAC,GACpB,IAAI;IAeP;;OAEG;IACH,SAAS,CAAC,QAAQ,CAChB,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,QAAQ,EACd,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GACjC,IAAI;IAUP,gDAAgD;IAChD,SAAS,CAAC,WAAW,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI;CAG/D"}
|
package/dist/introspect/base.js
CHANGED
|
@@ -37,7 +37,14 @@ class BaseIntrospector {
|
|
|
37
37
|
return `${this.config.engine}:${this.config.path}`;
|
|
38
38
|
}
|
|
39
39
|
const h = this.config.host || 'localhost';
|
|
40
|
-
const
|
|
40
|
+
const defaultPorts = {
|
|
41
|
+
postgresql: 5432,
|
|
42
|
+
mysql: 3306,
|
|
43
|
+
mariadb: 3306,
|
|
44
|
+
mssql: 1433,
|
|
45
|
+
mongodb: 27017,
|
|
46
|
+
};
|
|
47
|
+
const defaultPort = defaultPorts[this.config.engine] ?? 3306;
|
|
41
48
|
const p = this.config.port || defaultPort;
|
|
42
49
|
return `${this.config.engine}://${h}:${p}/${this.config.database}`;
|
|
43
50
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"base.js","sourceRoot":"","sources":["../../src/introspect/base.ts"],"names":[],"mappings":";AAAA;;;;;;;GAOG;;;AAWH,6CAAgD;AAChD,oCAAsC;AAsBtC;;;;;;;;;GASG;AACH,MAAsB,gBAAgB;IACd;IAAtB,YAAsB,MAA0B;QAA1B,WAAM,GAAN,MAAM,CAAoB;IAAG,CAAC;IAMpD,SAAS;QACP,OAAO,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC;IAC5B,CAAC;IAED,WAAW;QACT,OAAO,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC;IAC9B,CAAC;IAED,aAAa;QACX,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;YACrB,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;QACrD,CAAC;QACD,MAAM,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,IAAI,WAAW,CAAC;QAC1C,MAAM,
|
|
1
|
+
{"version":3,"file":"base.js","sourceRoot":"","sources":["../../src/introspect/base.ts"],"names":[],"mappings":"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"}
|
|
@@ -12,6 +12,10 @@ export interface DBConnection {
|
|
|
12
12
|
/** Close the connection / release pool resources */
|
|
13
13
|
close(): Promise<void>;
|
|
14
14
|
}
|
|
15
|
+
export declare function parseAuth(auth?: string): {
|
|
16
|
+
user?: string;
|
|
17
|
+
password?: string;
|
|
18
|
+
};
|
|
15
19
|
/**
|
|
16
20
|
* Create a DBConnection for the given config.
|
|
17
21
|
*
|
|
@@ -19,6 +23,7 @@ export interface DBConnection {
|
|
|
19
23
|
* - `postgresql` — via the `pg` package
|
|
20
24
|
* - `mysql` / `mariadb` — via the `mysql2` package
|
|
21
25
|
* - `sqlite` — via built-in `node:sqlite` (Node >= 22.5)
|
|
26
|
+
* - `mssql` — via the `mssql` package
|
|
22
27
|
*
|
|
23
28
|
* @throws ConnectionError if the driver is unavailable or the connection fails.
|
|
24
29
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"connection.d.ts","sourceRoot":"","sources":["../../src/introspect/connection.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,kBAAkB,EAAE,MAAM,UAAU,CAAC;AAO9C,MAAM,WAAW,YAAY;IAC3B,qDAAqD;IACrD,KAAK,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,GAAG,EAAE,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;IACnD,oDAAoD;IACpD,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CACxB;
|
|
1
|
+
{"version":3,"file":"connection.d.ts","sourceRoot":"","sources":["../../src/introspect/connection.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,kBAAkB,EAAE,MAAM,UAAU,CAAC;AAO9C,MAAM,WAAW,YAAY;IAC3B,qDAAqD;IACrD,KAAK,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,GAAG,EAAE,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;IACnD,oDAAoD;IACpD,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CACxB;AAMD,wBAAgB,SAAS,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG;IAAE,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;CAAE,CAK7E;AA8WD;;;;;;;;;;GAUG;AACH,wBAAsB,gBAAgB,CAAC,MAAM,EAAE,kBAAkB,GAAG,OAAO,CAAC,YAAY,CAAC,CAiBxF;AAED;;GAEG;AACH,wBAAsB,UAAU,CAAC,MAAM,EAAE,kBAAkB,GAAG,OAAO,CAAC,OAAO,CAAC,CAQ7E"}
|
|
@@ -7,6 +7,7 @@
|
|
|
7
7
|
* deps fail at connect() time, not at module load time.
|
|
8
8
|
*/
|
|
9
9
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
10
|
+
exports.parseAuth = parseAuth;
|
|
10
11
|
exports.createConnection = createConnection;
|
|
11
12
|
exports.tryConnect = tryConnect;
|
|
12
13
|
const errors_1 = require("../errors");
|
|
@@ -191,6 +192,119 @@ class SQLiteConnection {
|
|
|
191
192
|
}
|
|
192
193
|
}
|
|
193
194
|
// =============================================================================
|
|
195
|
+
// MSSQL Connection (mssql — wraps tedious)
|
|
196
|
+
// =============================================================================
|
|
197
|
+
let mssqlModule;
|
|
198
|
+
try {
|
|
199
|
+
mssqlModule = require('mssql');
|
|
200
|
+
}
|
|
201
|
+
catch {
|
|
202
|
+
/* handled at connect() time */
|
|
203
|
+
}
|
|
204
|
+
let msnodesqlModule;
|
|
205
|
+
try {
|
|
206
|
+
msnodesqlModule = require('mssql/msnodesqlv8');
|
|
207
|
+
}
|
|
208
|
+
catch {
|
|
209
|
+
/* handled at connect() time */
|
|
210
|
+
}
|
|
211
|
+
class MSSQLConnection {
|
|
212
|
+
pool;
|
|
213
|
+
constructor(pool) {
|
|
214
|
+
this.pool = pool;
|
|
215
|
+
}
|
|
216
|
+
static async create(config) {
|
|
217
|
+
if (config.authType === 'integrated') {
|
|
218
|
+
// Windows Integrated Authentication — uses current Windows user
|
|
219
|
+
if (!msnodesqlModule) {
|
|
220
|
+
throw new errors_1.ConnectionError(`msnodesqlv8 package is not installed.\n` +
|
|
221
|
+
`Windows Integrated Auth requires: npm install msnodesqlv8`, config.alias);
|
|
222
|
+
}
|
|
223
|
+
const mssqlConfig = {
|
|
224
|
+
server: config.host || 'localhost',
|
|
225
|
+
port: config.port || 1433,
|
|
226
|
+
database: config.database,
|
|
227
|
+
options: {
|
|
228
|
+
trustedConnection: true,
|
|
229
|
+
encrypt: config.ssl || false,
|
|
230
|
+
trustServerCertificate: config.ssl || false,
|
|
231
|
+
},
|
|
232
|
+
connectionTimeout: 10_000,
|
|
233
|
+
pool: {
|
|
234
|
+
max: 2,
|
|
235
|
+
min: 0,
|
|
236
|
+
idleTimeoutMillis: 30_000,
|
|
237
|
+
},
|
|
238
|
+
};
|
|
239
|
+
try {
|
|
240
|
+
const pool = new msnodesqlModule.ConnectionPool(mssqlConfig);
|
|
241
|
+
await pool.connect();
|
|
242
|
+
return new MSSQLConnection(pool);
|
|
243
|
+
}
|
|
244
|
+
catch (err) {
|
|
245
|
+
throw new errors_1.ConnectionError(`Failed to connect to MSSQL at ${config.host || 'localhost'}:${config.port || 1433}/${config.database}: ${err.message}`, config.alias, err);
|
|
246
|
+
}
|
|
247
|
+
}
|
|
248
|
+
// Default: SQL Server authentication (user/password)
|
|
249
|
+
if (!mssqlModule) {
|
|
250
|
+
throw new errors_1.ConnectionError(`mssql package is not installed.\n` +
|
|
251
|
+
`Connect to ${config.alias} (${config.engine}) by running: npm install mssql`, config.alias);
|
|
252
|
+
}
|
|
253
|
+
const auth = parseAuth(config.auth);
|
|
254
|
+
const mssqlConfig = {
|
|
255
|
+
server: config.host || 'localhost',
|
|
256
|
+
port: config.port || 1433,
|
|
257
|
+
database: config.database,
|
|
258
|
+
user: auth.user,
|
|
259
|
+
password: auth.password,
|
|
260
|
+
options: {
|
|
261
|
+
encrypt: config.ssl || false,
|
|
262
|
+
trustServerCertificate: config.ssl || false,
|
|
263
|
+
},
|
|
264
|
+
connectionTimeout: 10_000,
|
|
265
|
+
pool: {
|
|
266
|
+
max: 2,
|
|
267
|
+
min: 0,
|
|
268
|
+
idleTimeoutMillis: 30_000,
|
|
269
|
+
},
|
|
270
|
+
};
|
|
271
|
+
try {
|
|
272
|
+
const pool = new mssqlModule.ConnectionPool(mssqlConfig);
|
|
273
|
+
await pool.connect();
|
|
274
|
+
return new MSSQLConnection(pool);
|
|
275
|
+
}
|
|
276
|
+
catch (err) {
|
|
277
|
+
throw new errors_1.ConnectionError(`Failed to connect to MSSQL at ${config.host || 'localhost'}:${config.port || 1433}/${config.database}: ${err.message}`, config.alias, err);
|
|
278
|
+
}
|
|
279
|
+
}
|
|
280
|
+
async query(sql, params) {
|
|
281
|
+
try {
|
|
282
|
+
const request = this.pool.request();
|
|
283
|
+
if (params) {
|
|
284
|
+
let idx = 0;
|
|
285
|
+
// Convert ? placeholders to @p0, @p1, ... named params
|
|
286
|
+
sql = sql.replace(/\?/g, () => `@p${idx++}`);
|
|
287
|
+
for (let i = 0; i < params.length; i++) {
|
|
288
|
+
request.input(`p${i}`, params[i]);
|
|
289
|
+
}
|
|
290
|
+
}
|
|
291
|
+
const result = await request.query(sql);
|
|
292
|
+
return result.recordset;
|
|
293
|
+
}
|
|
294
|
+
catch (err) {
|
|
295
|
+
throw new errors_1.ConnectionError(`Query failed: ${err.message}\nSQL: ${sql.substring(0, 200)}`, 'query', err);
|
|
296
|
+
}
|
|
297
|
+
}
|
|
298
|
+
async close() {
|
|
299
|
+
try {
|
|
300
|
+
await this.pool.close();
|
|
301
|
+
}
|
|
302
|
+
catch {
|
|
303
|
+
/* harmless */
|
|
304
|
+
}
|
|
305
|
+
}
|
|
306
|
+
}
|
|
307
|
+
// =============================================================================
|
|
194
308
|
// Factory
|
|
195
309
|
// =============================================================================
|
|
196
310
|
/**
|
|
@@ -200,6 +314,7 @@ class SQLiteConnection {
|
|
|
200
314
|
* - `postgresql` — via the `pg` package
|
|
201
315
|
* - `mysql` / `mariadb` — via the `mysql2` package
|
|
202
316
|
* - `sqlite` — via built-in `node:sqlite` (Node >= 22.5)
|
|
317
|
+
* - `mssql` — via the `mssql` package
|
|
203
318
|
*
|
|
204
319
|
* @throws ConnectionError if the driver is unavailable or the connection fails.
|
|
205
320
|
*/
|
|
@@ -212,8 +327,10 @@ async function createConnection(config) {
|
|
|
212
327
|
return await MySQLConnection.create(config);
|
|
213
328
|
case 'sqlite':
|
|
214
329
|
return SQLiteConnection.create(config);
|
|
330
|
+
case 'mssql':
|
|
331
|
+
return await MSSQLConnection.create(config);
|
|
215
332
|
default:
|
|
216
|
-
throw new errors_1.ConnectionError(`Unsupported engine: "${config.engine}". Supported engines: postgresql, mysql, mariadb, sqlite`, config.alias);
|
|
333
|
+
throw new errors_1.ConnectionError(`Unsupported engine: "${config.engine}". Supported engines: postgresql, mysql, mariadb, sqlite, mssql`, config.alias);
|
|
217
334
|
}
|
|
218
335
|
}
|
|
219
336
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"connection.js","sourceRoot":"","sources":["../../src/introspect/connection.ts"],"names":[],"mappings":";AAAA;;;;;;GAMG;;
|
|
1
|
+
{"version":3,"file":"connection.js","sourceRoot":"","sources":["../../src/introspect/connection.ts"],"names":[],"mappings":"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"}
|
|
@@ -9,6 +9,8 @@
|
|
|
9
9
|
* - PostgresIntrospector (postgres.ts)
|
|
10
10
|
* - MySQLIntrospector (mysql.ts)
|
|
11
11
|
* - SQLiteIntrospector (sqlite.ts)
|
|
12
|
+
* - MSSQLIntrospector (mssql.ts)
|
|
13
|
+
* - MongoDBIntrospector (mongodb.ts)
|
|
12
14
|
*/
|
|
13
15
|
import { DbConnectionConfig } from '../types';
|
|
14
16
|
import { Introspector } from './base';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/introspect/index.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/introspect/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,EAAE,kBAAkB,EAAE,MAAM,UAAU,CAAC;AAM9C,OAAO,EAAE,YAAY,EAAoB,MAAM,QAAQ,CAAC;AAGxD,OAAO,EAAE,YAAY,EAAE,gBAAgB,EAAE,MAAM,QAAQ,CAAC;AAMxD;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,kBAAkB,GAAG,YAAY,CAmB3E"}
|
package/dist/introspect/index.js
CHANGED
|
@@ -10,6 +10,8 @@
|
|
|
10
10
|
* - PostgresIntrospector (postgres.ts)
|
|
11
11
|
* - MySQLIntrospector (mysql.ts)
|
|
12
12
|
* - SQLiteIntrospector (sqlite.ts)
|
|
13
|
+
* - MSSQLIntrospector (mssql.ts)
|
|
14
|
+
* - MongoDBIntrospector (mongodb.ts)
|
|
13
15
|
*/
|
|
14
16
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
15
17
|
exports.BaseIntrospector = void 0;
|
|
@@ -17,6 +19,8 @@ exports.createIntrospector = createIntrospector;
|
|
|
17
19
|
const postgres_1 = require("./postgres");
|
|
18
20
|
const mysql_1 = require("./mysql");
|
|
19
21
|
const sqlite_1 = require("./sqlite");
|
|
22
|
+
const mssql_1 = require("./mssql");
|
|
23
|
+
const mongodb_1 = require("./mongodb");
|
|
20
24
|
// Re-export base types
|
|
21
25
|
var base_1 = require("./base");
|
|
22
26
|
Object.defineProperty(exports, "BaseIntrospector", { enumerable: true, get: function () { return base_1.BaseIntrospector; } });
|
|
@@ -38,9 +42,13 @@ function createIntrospector(config) {
|
|
|
38
42
|
return new mysql_1.MySQLIntrospector(config);
|
|
39
43
|
case 'sqlite':
|
|
40
44
|
return new sqlite_1.SQLiteIntrospector(config);
|
|
45
|
+
case 'mssql':
|
|
46
|
+
return new mssql_1.MSSQLIntrospector(config);
|
|
47
|
+
case 'mongodb':
|
|
48
|
+
return new mongodb_1.MongoDBIntrospector(config);
|
|
41
49
|
default:
|
|
42
50
|
throw new Error(`Unsupported database engine: "${config.engine}". ` +
|
|
43
|
-
`Supported engines: postgresql, mysql, mariadb, sqlite`);
|
|
51
|
+
`Supported engines: postgresql, mysql, mariadb, sqlite, mssql, mongodb`);
|
|
44
52
|
}
|
|
45
53
|
}
|
|
46
54
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/introspect/index.ts"],"names":[],"mappings":";AAAA
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/introspect/index.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;GAaG;;;AAuBH,gDAmBC;AAvCD,yCAAkD;AAClD,mCAA4C;AAC5C,qCAA8C;AAC9C,mCAA4C;AAC5C,uCAAgD;AAGhD,uBAAuB;AACvB,+BAAwD;AAAjC,wGAAA,gBAAgB,OAAA;AAEvC,gFAAgF;AAChF,UAAU;AACV,gFAAgF;AAEhF;;;;;GAKG;AACH,SAAgB,kBAAkB,CAAC,MAA0B;IAC3D,QAAQ,MAAM,CAAC,MAAM,EAAE,CAAC;QACtB,KAAK,YAAY;YACf,OAAO,IAAI,+BAAoB,CAAC,MAAM,CAAC,CAAC;QAC1C,KAAK,OAAO,CAAC;QACb,KAAK,SAAS;YACZ,OAAO,IAAI,yBAAiB,CAAC,MAAM,CAAC,CAAC;QACvC,KAAK,QAAQ;YACX,OAAO,IAAI,2BAAkB,CAAC,MAAM,CAAC,CAAC;QACxC,KAAK,OAAO;YACV,OAAO,IAAI,yBAAiB,CAAC,MAAM,CAAC,CAAC;QACvC,KAAK,SAAS;YACZ,OAAO,IAAI,6BAAmB,CAAC,MAAM,CAAC,CAAC;QACzC;YACE,MAAM,IAAI,KAAK,CACb,iCAAiC,MAAM,CAAC,MAAM,KAAK;gBACnD,uEAAuE,CACxE,CAAC;IACN,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* MongoDB Introspector
|
|
3
|
+
*
|
|
4
|
+
* Extracts collections, views, indexes, and schema validation rules
|
|
5
|
+
* from a MongoDB database. No document sampling — field-level schema
|
|
6
|
+
* is inferred from $jsonSchema validation rules only.
|
|
7
|
+
*
|
|
8
|
+
* Connection: manages its own MongoClient lifecycle (does NOT use the
|
|
9
|
+
* SQL-centric createConnection() factory in connection.ts).
|
|
10
|
+
* The driver import is guarded so a missing `mongodb` is reported at
|
|
11
|
+
* connect() time, not at module load time.
|
|
12
|
+
*/
|
|
13
|
+
import { IntrospectResult, DbConnectionConfig } from '../types';
|
|
14
|
+
import { BaseIntrospector } from './base';
|
|
15
|
+
export declare class MongoDBIntrospector extends BaseIntrospector {
|
|
16
|
+
constructor(config: DbConnectionConfig);
|
|
17
|
+
/**
|
|
18
|
+
* Override testConnection() — MongoDB does not use the
|
|
19
|
+
* SQL-centric createConnection() factory from connection.ts.
|
|
20
|
+
*/
|
|
21
|
+
testConnection(): Promise<boolean>;
|
|
22
|
+
/**
|
|
23
|
+
* Full schema introspection.
|
|
24
|
+
*
|
|
25
|
+
* 1. Connect to MongoDB
|
|
26
|
+
* 2. List collections (collecting regular collections and views)
|
|
27
|
+
* 3. For each collection: indexes + estimatedDocumentCount
|
|
28
|
+
* 4. Build Node[] + Edge[] with schema→collection→index hierarchy
|
|
29
|
+
* 5. Close connection and return IntrospectResult
|
|
30
|
+
*/
|
|
31
|
+
extractAll(): Promise<IntrospectResult>;
|
|
32
|
+
/**
|
|
33
|
+
* Lazy-import the mongodb driver and throw a helpful error if absent.
|
|
34
|
+
*/
|
|
35
|
+
private importMongoDriver;
|
|
36
|
+
/**
|
|
37
|
+
* Build a MongoDB connection URI from the config.
|
|
38
|
+
* NOTE: encodeURIComponent() is required for passwords containing
|
|
39
|
+
* special characters (@, :, /, ?, #, %). parseAuth() does raw split only.
|
|
40
|
+
*/
|
|
41
|
+
private buildUri;
|
|
42
|
+
/**
|
|
43
|
+
* Connect to MongoDB and return the MongoClient.
|
|
44
|
+
*/
|
|
45
|
+
private connectClient;
|
|
46
|
+
}
|
|
47
|
+
//# sourceMappingURL=mongodb.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mongodb.d.ts","sourceRoot":"","sources":["../../src/introspect/mongodb.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,EACL,gBAAgB,EAChB,kBAAkB,EAGnB,MAAM,UAAU,CAAC;AAClB,OAAO,EAAE,gBAAgB,EAAE,MAAM,QAAQ,CAAC;AAkB1C,qBAAa,mBAAoB,SAAQ,gBAAgB;gBAC3C,MAAM,EAAE,kBAAkB;IAItC;;;OAGG;IACG,cAAc,IAAI,OAAO,CAAC,OAAO,CAAC;IAUxC;;;;;;;;OAQG;IACG,UAAU,IAAI,OAAO,CAAC,gBAAgB,CAAC;IA6M7C;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAUzB;;;;OAIG;IACH,OAAO,CAAC,QAAQ;IAgBhB;;OAEG;YACW,aAAa;CAU5B"}
|