dbgraph 0.1.3 → 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/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/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":";AAAA;;;;;;GAMG;;AAoBH,8BAKC;AAyXD,4CAiBC;AAKD,gCAQC;AA7aD,sCAA4C;AAa5C,gFAAgF;AAChF,UAAU;AACV,gFAAgF;AAEhF,SAAgB,SAAS,CAAC,IAAa;IACrC,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,CAAC;IAC1C,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IAC9B,IAAI,GAAG,KAAK,CAAC,CAAC;QAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;IACtC,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,QAAQ,EAAE,IAAI,CAAC,SAAS,CAAC,GAAG,GAAG,CAAC,CAAC,EAAE,CAAC;AAC7E,CAAC;AAED,gFAAgF;AAChF,6BAA6B;AAC7B,gFAAgF;AAEhF,IAAI,QAAa,CAAC;AAClB,IAAI,CAAC;IACH,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;AAC3B,CAAC;AAAC,MAAM,CAAC;IACP,+BAA+B;AACjC,CAAC;AAED,MAAM,YAAY;IACR,MAAM,CAAM;IAEpB,YAAoB,MAAW;QAC7B,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;IACvB,CAAC;IAED,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,MAA0B;QAC5C,IAAI,CAAC,QAAQ,EAAE,CAAC;YACd,MAAM,IAAI,wBAAe,CACvB,gCAAgC;gBAChC,cAAc,MAAM,CAAC,KAAK,KAAK,MAAM,CAAC,MAAM,8BAA8B,EAC1E,MAAM,CAAC,KAAK,CACb,CAAC;QACJ,CAAC;QAED,MAAM,IAAI,GAAG,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QACpC,MAAM,MAAM,GAAG,IAAI,QAAQ,CAAC,MAAM,CAAC;YACjC,IAAI,EAAE,MAAM,CAAC,IAAI,IAAI,WAAW;YAChC,IAAI,EAAE,MAAM,CAAC,IAAI,IAAI,IAAI;YACzB,QAAQ,EAAE,MAAM,CAAC,QAAQ;YACzB,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,QAAQ,EAAE,IAAI,CAAC,QAAQ;YACvB,GAAG,EAAE,MAAM,CAAC,GAAG,IAAI,KAAK;YACxB,uBAAuB,EAAE,MAAM;SAChC,CAAC,CAAC;QAEH,IAAI,CAAC;YACH,MAAM,MAAM,CAAC,OAAO,EAAE,CAAC;QACzB,CAAC;QAAC,OAAO,GAAQ,EAAE,CAAC;YAClB,MAAM,IAAI,wBAAe,CACvB,sCAAsC,MAAM,CAAC,IAAI,IAAI,WAAW,IAAI,MAAM,CAAC,IAAI,IAAI,IAAI,IAAI,MAAM,CAAC,QAAQ,KAAK,GAAG,CAAC,OAAO,EAAE,EAC5H,MAAM,CAAC,KAAK,EACZ,GAAG,CACJ,CAAC;QACJ,CAAC;QAED,OAAO,IAAI,YAAY,CAAC,MAAM,CAAC,CAAC;IAClC,CAAC;IAED,KAAK,CAAC,KAAK,CAAC,GAAW,EAAE,MAAc;QACrC,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;YACpD,OAAO,MAAM,CAAC,IAAI,CAAC;QACrB,CAAC;QAAC,OAAO,GAAQ,EAAE,CAAC;YAClB,MAAM,IAAI,wBAAe,CACvB,iBAAiB,GAAG,CAAC,OAAO,UAAU,GAAG,CAAC,SAAS,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,EAC7D,OAAO,EACP,GAAG,CACJ,CAAC;QACJ,CAAC;IACH,CAAC;IAED,KAAK,CAAC,KAAK;QACT,IAAI,CAAC;YACH,MAAM,IAAI,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC;QAC1B,CAAC;QAAC,MAAM,CAAC;YACP,6CAA6C;QAC/C,CAAC;IACH,CAAC;CACF;AAED,gFAAgF;AAChF,sCAAsC;AACtC,gFAAgF;AAEhF,IAAI,WAAgB,CAAC;AACrB,IAAI,CAAC;IACH,WAAW,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAAC;AAC1C,CAAC;AAAC,MAAM,CAAC;IACP,+BAA+B;AACjC,CAAC;AAED,MAAM,eAAe;IACX,IAAI,CAAM;IAElB,YAAoB,IAAS;QAC3B,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;IACnB,CAAC;IAED,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,MAA0B;QAC5C,IAAI,CAAC,WAAW,EAAE,CAAC;YACjB,MAAM,IAAI,wBAAe,CACvB,oCAAoC;gBACpC,cAAc,MAAM,CAAC,KAAK,KAAK,MAAM,CAAC,MAAM,kCAAkC,EAC9E,MAAM,CAAC,KAAK,CACb,CAAC;QACJ,CAAC;QAED,MAAM,IAAI,GAAG,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QACpC,MAAM,IAAI,GAAG,WAAW,CAAC,UAAU,CAAC;YAClC,IAAI,EAAE,MAAM,CAAC,IAAI,IAAI,WAAW;YAChC,IAAI,EAAE,MAAM,CAAC,IAAI,IAAI,IAAI;YACzB,QAAQ,EAAE,MAAM,CAAC,QAAQ;YACzB,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,QAAQ,EAAE,IAAI,CAAC,QAAQ;YACvB,GAAG,EAAE,MAAM,CAAC,GAAG,IAAI,SAAS;YAC5B,kBAAkB,EAAE,IAAI;YACxB,eAAe,EAAE,CAAC;YAClB,UAAU,EAAE,CAAC;SACd,CAAC,CAAC;QAEH,+CAA+C;QAC/C,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,aAAa,EAAE,CAAC;YACxC,IAAI,CAAC,OAAO,EAAE,CAAC;QACjB,CAAC;QAAC,OAAO,GAAQ,EAAE,CAAC;YAClB,MAAM,IAAI,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;YACjC,MAAM,IAAI,wBAAe,CACvB,iCAAiC,MAAM,CAAC,IAAI,IAAI,WAAW,IAAI,MAAM,CAAC,IAAI,IAAI,IAAI,IAAI,MAAM,CAAC,QAAQ,KAAK,GAAG,CAAC,OAAO,EAAE,EACvH,MAAM,CAAC,KAAK,EACZ,GAAG,CACJ,CAAC;QACJ,CAAC;QAED,OAAO,IAAI,eAAe,CAAC,IAAI,CAAC,CAAC;IACnC,CAAC;IAED,KAAK,CAAC,KAAK,CAAC,GAAW,EAAE,MAAc;QACrC,IAAI,CAAC;YACH,MAAM,CAAC,IAAI,CAAC,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;YAClD,OAAO,IAAa,CAAC;QACvB,CAAC;QAAC,OAAO,GAAQ,EAAE,CAAC;YAClB,MAAM,IAAI,wBAAe,CACvB,iBAAiB,GAAG,CAAC,OAAO,UAAU,GAAG,CAAC,SAAS,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,EAC7D,OAAO,EACP,GAAG,CACJ,CAAC;QACJ,CAAC;IACH,CAAC;IAED,KAAK,CAAC,KAAK;QACT,IAAI,CAAC;YACH,MAAM,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC;QACxB,CAAC;QAAC,MAAM,CAAC;YACP,cAAc;QAChB,CAAC;IACH,CAAC;CACF;AAED,gFAAgF;AAChF,wDAAwD;AACxD,gFAAgF;AAEhF,IAAI,YAAiB,CAAC;AACtB,IAAI,CAAC;IACH,YAAY,GAAG,OAAO,CAAC,aAAa,CAAC,CAAC;AACxC,CAAC;AAAC,MAAM,CAAC;IACP,+BAA+B;AACjC,CAAC;AAED,MAAM,gBAAgB;IACZ,EAAE,CAAM;IAEhB,YAAoB,EAAO;QACzB,IAAI,CAAC,EAAE,GAAG,EAAE,CAAC;IACf,CAAC;IAED,MAAM,CAAC,MAAM,CAAC,MAA0B;QACtC,IAAI,CAAC,YAAY,EAAE,CAAC;YAClB,MAAM,IAAI,wBAAe,CACvB,8DAA8D,EAC9D,MAAM,CAAC,KAAK,CACb,CAAC;QACJ,CAAC;QAED,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;YACjB,MAAM,IAAI,wBAAe,CACvB,qEAAqE;gBACrE,0EAA0E,EAC1E,MAAM,CAAC,KAAK,CACb,CAAC;QACJ,CAAC;QAED,IAAI,CAAC;YACH,MAAM,EAAE,GAAG,IAAI,YAAY,CAAC,YAAY,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;YACtD,yDAAyD;YACzD,EAAE,CAAC,IAAI,CAAC,2BAA2B,CAAC,CAAC;YACrC,EAAE,CAAC,IAAI,CAAC,0BAA0B,CAAC,CAAC;YACpC,OAAO,IAAI,gBAAgB,CAAC,EAAE,CAAC,CAAC;QAClC,CAAC;QAAC,OAAO,GAAQ,EAAE,CAAC;YAClB,MAAM,IAAI,wBAAe,CACvB,qCAAqC,MAAM,CAAC,IAAI,KAAK,GAAG,CAAC,OAAO,EAAE,EAClE,MAAM,CAAC,KAAK,EACZ,GAAG,CACJ,CAAC;QACJ,CAAC;IACH,CAAC;IAED,KAAK,CAAC,KAAK,CAAC,GAAW,EAAE,MAAc;QACrC,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;YAClC,OAAO,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC;QACnD,CAAC;QAAC,OAAO,GAAQ,EAAE,CAAC;YAClB,MAAM,IAAI,wBAAe,CACvB,iBAAiB,GAAG,CAAC,OAAO,UAAU,GAAG,CAAC,SAAS,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,EAC7D,OAAO,EACP,GAAG,CACJ,CAAC;QACJ,CAAC;IACH,CAAC;IAED,KAAK,CAAC,KAAK;QACT,IAAI,CAAC;YACH,IAAI,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC;QAClB,CAAC;QAAC,MAAM,CAAC;YACP,cAAc;QAChB,CAAC;IACH,CAAC;CACF;AAED,gFAAgF;AAChF,2CAA2C;AAC3C,gFAAgF;AAEhF,IAAI,WAAgB,CAAC;AACrB,IAAI,CAAC;IACH,WAAW,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;AACjC,CAAC;AAAC,MAAM,CAAC;IACP,+BAA+B;AACjC,CAAC;AAED,IAAI,eAAoB,CAAC;AACzB,IAAI,CAAC;IACH,eAAe,GAAG,OAAO,CAAC,mBAAmB,CAAC,CAAC;AACjD,CAAC;AAAC,MAAM,CAAC;IACP,+BAA+B;AACjC,CAAC;AAED,MAAM,eAAe;IACX,IAAI,CAAM;IAElB,YAAoB,IAAS;QAC3B,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;IACnB,CAAC;IAED,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,MAA0B;QAC5C,IAAI,MAAM,CAAC,QAAQ,KAAK,YAAY,EAAE,CAAC;YACrC,gEAAgE;YAChE,IAAI,CAAC,eAAe,EAAE,CAAC;gBACrB,MAAM,IAAI,wBAAe,CACvB,yCAAyC;oBACzC,2DAA2D,EAC3D,MAAM,CAAC,KAAK,CACb,CAAC;YACJ,CAAC;YAED,MAAM,WAAW,GAAQ;gBACvB,MAAM,EAAE,MAAM,CAAC,IAAI,IAAI,WAAW;gBAClC,IAAI,EAAE,MAAM,CAAC,IAAI,IAAI,IAAI;gBACzB,QAAQ,EAAE,MAAM,CAAC,QAAQ;gBACzB,OAAO,EAAE;oBACP,iBAAiB,EAAE,IAAI;oBACvB,OAAO,EAAE,MAAM,CAAC,GAAG,IAAI,KAAK;oBAC5B,sBAAsB,EAAE,MAAM,CAAC,GAAG,IAAI,KAAK;iBAC5C;gBACD,iBAAiB,EAAE,MAAM;gBACzB,IAAI,EAAE;oBACJ,GAAG,EAAE,CAAC;oBACN,GAAG,EAAE,CAAC;oBACN,iBAAiB,EAAE,MAAM;iBAC1B;aACF,CAAC;YAEF,IAAI,CAAC;gBACH,MAAM,IAAI,GAAG,IAAI,eAAe,CAAC,cAAc,CAAC,WAAW,CAAC,CAAC;gBAC7D,MAAM,IAAI,CAAC,OAAO,EAAE,CAAC;gBACrB,OAAO,IAAI,eAAe,CAAC,IAAI,CAAC,CAAC;YACnC,CAAC;YAAC,OAAO,GAAQ,EAAE,CAAC;gBAClB,MAAM,IAAI,wBAAe,CACvB,iCAAiC,MAAM,CAAC,IAAI,IAAI,WAAW,IAAI,MAAM,CAAC,IAAI,IAAI,IAAI,IAAI,MAAM,CAAC,QAAQ,KAAK,GAAG,CAAC,OAAO,EAAE,EACvH,MAAM,CAAC,KAAK,EACZ,GAAG,CACJ,CAAC;YACJ,CAAC;QACH,CAAC;QAED,qDAAqD;QACrD,IAAI,CAAC,WAAW,EAAE,CAAC;YACjB,MAAM,IAAI,wBAAe,CACvB,mCAAmC;gBACnC,cAAc,MAAM,CAAC,KAAK,KAAK,MAAM,CAAC,MAAM,iCAAiC,EAC7E,MAAM,CAAC,KAAK,CACb,CAAC;QACJ,CAAC;QAED,MAAM,IAAI,GAAG,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QACpC,MAAM,WAAW,GAAQ;YACvB,MAAM,EAAE,MAAM,CAAC,IAAI,IAAI,WAAW;YAClC,IAAI,EAAE,MAAM,CAAC,IAAI,IAAI,IAAI;YACzB,QAAQ,EAAE,MAAM,CAAC,QAAQ;YACzB,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,QAAQ,EAAE,IAAI,CAAC,QAAQ;YACvB,OAAO,EAAE;gBACP,OAAO,EAAE,MAAM,CAAC,GAAG,IAAI,KAAK;gBAC5B,sBAAsB,EAAE,MAAM,CAAC,GAAG,IAAI,KAAK;aAC5C;YACD,iBAAiB,EAAE,MAAM;YACzB,IAAI,EAAE;gBACJ,GAAG,EAAE,CAAC;gBACN,GAAG,EAAE,CAAC;gBACN,iBAAiB,EAAE,MAAM;aAC1B;SACF,CAAC;QAEF,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,IAAI,WAAW,CAAC,cAAc,CAAC,WAAW,CAAC,CAAC;YACzD,MAAM,IAAI,CAAC,OAAO,EAAE,CAAC;YACrB,OAAO,IAAI,eAAe,CAAC,IAAI,CAAC,CAAC;QACnC,CAAC;QAAC,OAAO,GAAQ,EAAE,CAAC;YAClB,MAAM,IAAI,wBAAe,CACvB,iCAAiC,MAAM,CAAC,IAAI,IAAI,WAAW,IAAI,MAAM,CAAC,IAAI,IAAI,IAAI,IAAI,MAAM,CAAC,QAAQ,KAAK,GAAG,CAAC,OAAO,EAAE,EACvH,MAAM,CAAC,KAAK,EACZ,GAAG,CACJ,CAAC;QACJ,CAAC;IACH,CAAC;IAED,KAAK,CAAC,KAAK,CAAC,GAAW,EAAE,MAAc;QACrC,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;YACpC,IAAI,MAAM,EAAE,CAAC;gBACX,IAAI,GAAG,GAAG,CAAC,CAAC;gBACZ,uDAAuD;gBACvD,GAAG,GAAG,GAAG,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,EAAE,CAAC,KAAK,GAAG,EAAE,EAAE,CAAC,CAAC;gBAC7C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;oBACvC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;gBACpC,CAAC;YACH,CAAC;YACD,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;YACxC,OAAO,MAAM,CAAC,SAAS,CAAC;QAC1B,CAAC;QAAC,OAAO,GAAQ,EAAE,CAAC;YAClB,MAAM,IAAI,wBAAe,CACvB,iBAAiB,GAAG,CAAC,OAAO,UAAU,GAAG,CAAC,SAAS,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,EAC7D,OAAO,EACP,GAAG,CACJ,CAAC;QACJ,CAAC;IACH,CAAC;IAED,KAAK,CAAC,KAAK;QACT,IAAI,CAAC;YACH,MAAM,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;QAC1B,CAAC;QAAC,MAAM,CAAC;YACP,cAAc;QAChB,CAAC;IACH,CAAC;CACF;AAED,gFAAgF;AAChF,UAAU;AACV,gFAAgF;AAEhF;;;;;;;;;;GAUG;AACI,KAAK,UAAU,gBAAgB,CAAC,MAA0B;IAC/D,QAAQ,MAAM,CAAC,MAAM,EAAE,CAAC;QACtB,KAAK,YAAY;YACf,OAAO,MAAM,YAAY,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QAC3C,KAAK,OAAO,CAAC;QACb,KAAK,SAAS;YACZ,OAAO,MAAM,eAAe,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QAC9C,KAAK,QAAQ;YACX,OAAO,gBAAgB,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QACzC,KAAK,OAAO;YACV,OAAO,MAAM,eAAe,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QAC9C;YACE,MAAM,IAAI,wBAAe,CACvB,wBAAwB,MAAM,CAAC,MAAM,iEAAiE,EACtG,MAAM,CAAC,KAAK,CACb,CAAC;IACN,CAAC;AACH,CAAC;AAED;;GAEG;AACI,KAAK,UAAU,UAAU,CAAC,MAA0B;IACzD,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,MAAM,gBAAgB,CAAC,MAAM,CAAC,CAAC;QAC5C,MAAM,IAAI,CAAC,KAAK,EAAE,CAAC;QACnB,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC"}
|
|
@@ -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"}
|
|
@@ -0,0 +1,255 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* MongoDB Introspector
|
|
4
|
+
*
|
|
5
|
+
* Extracts collections, views, indexes, and schema validation rules
|
|
6
|
+
* from a MongoDB database. No document sampling — field-level schema
|
|
7
|
+
* is inferred from $jsonSchema validation rules only.
|
|
8
|
+
*
|
|
9
|
+
* Connection: manages its own MongoClient lifecycle (does NOT use the
|
|
10
|
+
* SQL-centric createConnection() factory in connection.ts).
|
|
11
|
+
* The driver import is guarded so a missing `mongodb` is reported at
|
|
12
|
+
* connect() time, not at module load time.
|
|
13
|
+
*/
|
|
14
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
15
|
+
exports.MongoDBIntrospector = void 0;
|
|
16
|
+
const base_1 = require("./base");
|
|
17
|
+
const connection_1 = require("./connection");
|
|
18
|
+
// =============================================================================
|
|
19
|
+
// Lazy MongoDB Driver Import
|
|
20
|
+
// =============================================================================
|
|
21
|
+
let mongoModule;
|
|
22
|
+
try {
|
|
23
|
+
mongoModule = require('mongodb');
|
|
24
|
+
}
|
|
25
|
+
catch {
|
|
26
|
+
/* handled at connect() time — see private importMongoDriver() */
|
|
27
|
+
}
|
|
28
|
+
// =============================================================================
|
|
29
|
+
// MongoDBIntrospector
|
|
30
|
+
// =============================================================================
|
|
31
|
+
class MongoDBIntrospector extends base_1.BaseIntrospector {
|
|
32
|
+
constructor(config) {
|
|
33
|
+
super(config);
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Override testConnection() — MongoDB does not use the
|
|
37
|
+
* SQL-centric createConnection() factory from connection.ts.
|
|
38
|
+
*/
|
|
39
|
+
async testConnection() {
|
|
40
|
+
try {
|
|
41
|
+
const client = await this.connectClient();
|
|
42
|
+
await client.close();
|
|
43
|
+
return true;
|
|
44
|
+
}
|
|
45
|
+
catch {
|
|
46
|
+
return false;
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Full schema introspection.
|
|
51
|
+
*
|
|
52
|
+
* 1. Connect to MongoDB
|
|
53
|
+
* 2. List collections (collecting regular collections and views)
|
|
54
|
+
* 3. For each collection: indexes + estimatedDocumentCount
|
|
55
|
+
* 4. Build Node[] + Edge[] with schema→collection→index hierarchy
|
|
56
|
+
* 5. Close connection and return IntrospectResult
|
|
57
|
+
*/
|
|
58
|
+
async extractAll() {
|
|
59
|
+
const startTime = Date.now();
|
|
60
|
+
const errors = [];
|
|
61
|
+
const nodes = [];
|
|
62
|
+
const edges = [];
|
|
63
|
+
let client;
|
|
64
|
+
try {
|
|
65
|
+
client = await this.connectClient();
|
|
66
|
+
}
|
|
67
|
+
catch (err) {
|
|
68
|
+
return {
|
|
69
|
+
nodes: [],
|
|
70
|
+
edges: [],
|
|
71
|
+
durationMs: Date.now() - startTime,
|
|
72
|
+
errors: [err.message],
|
|
73
|
+
};
|
|
74
|
+
}
|
|
75
|
+
try {
|
|
76
|
+
const db = client.db(this.config.database);
|
|
77
|
+
const dbName = this.config.database;
|
|
78
|
+
// NOTE: config.schemas is silently ignored — MongoDB has no schema layer.
|
|
79
|
+
// -----------------------------------------------------------------------
|
|
80
|
+
// 1. List all collections (non-system, user-accessible)
|
|
81
|
+
// -----------------------------------------------------------------------
|
|
82
|
+
const collectionsRaw = await db
|
|
83
|
+
.listCollections({}, { nameOnly: false, authorizedCollections: true })
|
|
84
|
+
.toArray();
|
|
85
|
+
// Separate regular collections, timeseries, and views;
|
|
86
|
+
// exclude system collections (system.*)
|
|
87
|
+
const collections = collectionsRaw.filter((c) => !c.name.startsWith('system.') &&
|
|
88
|
+
(!c.type || c.type === 'collection' || c.type === 'timeseries'));
|
|
89
|
+
const views = collectionsRaw.filter((c) => c.type === 'view');
|
|
90
|
+
if (collections.length === 0 && views.length === 0) {
|
|
91
|
+
errors.push('No collections or views found in database');
|
|
92
|
+
return { nodes, edges, durationMs: Date.now() - startTime, errors };
|
|
93
|
+
}
|
|
94
|
+
// -----------------------------------------------------------------------
|
|
95
|
+
// 2. Create schema (database) node
|
|
96
|
+
// -----------------------------------------------------------------------
|
|
97
|
+
const schemaNode = this.makeNode('schema', dbName, this.qn(dbName), this.schemaFilePath(dbName));
|
|
98
|
+
nodes.push(schemaNode);
|
|
99
|
+
// -----------------------------------------------------------------------
|
|
100
|
+
// 3. Process each collection
|
|
101
|
+
// -----------------------------------------------------------------------
|
|
102
|
+
for (const coll of collections) {
|
|
103
|
+
const collName = coll.name;
|
|
104
|
+
const collQual = this.qn(dbName, collName);
|
|
105
|
+
const collFp = this.schemaFilePath(dbName);
|
|
106
|
+
// Gather indexes and document count for this collection
|
|
107
|
+
let indexes = [];
|
|
108
|
+
let docCount;
|
|
109
|
+
const mongoColl = db.collection(collName);
|
|
110
|
+
try {
|
|
111
|
+
indexes = await mongoColl.indexes();
|
|
112
|
+
}
|
|
113
|
+
catch (err) {
|
|
114
|
+
errors.push(`Skipping indexes for ${collName}: ${err.message}`);
|
|
115
|
+
}
|
|
116
|
+
try {
|
|
117
|
+
// estimatedDocumentCount() — fast metadata read.
|
|
118
|
+
// NOTE: on sharded clusters this may be approximate.
|
|
119
|
+
docCount = await mongoColl.estimatedDocumentCount();
|
|
120
|
+
}
|
|
121
|
+
catch (err) {
|
|
122
|
+
errors.push(`Skipping document count for ${collName}: ${err.message}`);
|
|
123
|
+
}
|
|
124
|
+
// Build metadata from collection options and validator
|
|
125
|
+
const collOptions = coll.options || {};
|
|
126
|
+
const validator = collOptions.validator;
|
|
127
|
+
const validationSchema = validator && validator.$jsonSchema
|
|
128
|
+
? {
|
|
129
|
+
$jsonSchema: validator.$jsonSchema,
|
|
130
|
+
...(collOptions.validationAction ? { validationAction: collOptions.validationAction } : {}),
|
|
131
|
+
...(collOptions.validationLevel ? { validationLevel: collOptions.validationLevel } : {}),
|
|
132
|
+
}
|
|
133
|
+
: undefined;
|
|
134
|
+
const collNode = this.makeNode('table', collName, collQual, collFp, {
|
|
135
|
+
metadata: {
|
|
136
|
+
documentCount: docCount,
|
|
137
|
+
...(validationSchema ? { validation: validationSchema } : {}),
|
|
138
|
+
...(collOptions.capped || collOptions.size || collOptions.max || collOptions.collation || collOptions.timeseries
|
|
139
|
+
? {
|
|
140
|
+
collectionOptions: {
|
|
141
|
+
...(collOptions.capped !== undefined ? { capped: collOptions.capped } : {}),
|
|
142
|
+
...(collOptions.size !== undefined ? { size: collOptions.size } : {}),
|
|
143
|
+
...(collOptions.max !== undefined ? { max: collOptions.max } : {}),
|
|
144
|
+
...(collOptions.collation ? { collation: collOptions.collation } : {}),
|
|
145
|
+
...(collOptions.timeseries ? { timeseries: collOptions.timeseries } : {}),
|
|
146
|
+
},
|
|
147
|
+
}
|
|
148
|
+
: {}),
|
|
149
|
+
},
|
|
150
|
+
});
|
|
151
|
+
nodes.push(collNode);
|
|
152
|
+
edges.push(this.containEdge(schemaNode.id, collNode.id));
|
|
153
|
+
// Create index nodes
|
|
154
|
+
for (const idx of indexes) {
|
|
155
|
+
const idxName = idx.name;
|
|
156
|
+
const idxQual = this.qn(dbName, collName, idxName);
|
|
157
|
+
// Determine index type from key values
|
|
158
|
+
const keyValues = Object.values(idx.key || {});
|
|
159
|
+
const SPECIAL_KEY_TYPES = new Set(['text', '2dsphere', '2d', 'hashed']);
|
|
160
|
+
const idxType = keyValues.find((v) => SPECIAL_KEY_TYPES.has(v)) || 'regular';
|
|
161
|
+
const idxNode = this.makeNode('index', idxName, idxQual, collFp, {
|
|
162
|
+
metadata: {
|
|
163
|
+
key: idx.key,
|
|
164
|
+
unique: idx.unique || false,
|
|
165
|
+
sparse: idx.sparse || undefined,
|
|
166
|
+
indexType: idxType,
|
|
167
|
+
partialFilterExpression: idx.partialFilterExpression || undefined,
|
|
168
|
+
ttl: idx.expireAfterSeconds || undefined,
|
|
169
|
+
automatic: idxName === '_id_' ? true : undefined,
|
|
170
|
+
},
|
|
171
|
+
});
|
|
172
|
+
nodes.push(idxNode);
|
|
173
|
+
edges.push(this.containEdge(collNode.id, idxNode.id));
|
|
174
|
+
edges.push(this.makeEdge(collNode.id, idxNode.id, 'indexed_by'));
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
// -----------------------------------------------------------------------
|
|
178
|
+
// 4. Process views
|
|
179
|
+
// -----------------------------------------------------------------------
|
|
180
|
+
for (const view of views) {
|
|
181
|
+
const viewName = view.name;
|
|
182
|
+
const viewQual = this.qn(dbName, viewName);
|
|
183
|
+
const viewFp = this.schemaFilePath(dbName);
|
|
184
|
+
const viewOptions = view.options || {};
|
|
185
|
+
const viewNode = this.makeNode('view', viewName, viewQual, viewFp, {
|
|
186
|
+
signature: JSON.stringify(viewOptions.pipeline || [], null, 2),
|
|
187
|
+
metadata: {
|
|
188
|
+
viewOn: viewOptions.viewOn,
|
|
189
|
+
},
|
|
190
|
+
});
|
|
191
|
+
nodes.push(viewNode);
|
|
192
|
+
edges.push(this.containEdge(schemaNode.id, viewNode.id));
|
|
193
|
+
}
|
|
194
|
+
}
|
|
195
|
+
catch (err) {
|
|
196
|
+
errors.push(`Introspection error: ${err.message}`);
|
|
197
|
+
}
|
|
198
|
+
finally {
|
|
199
|
+
if (client)
|
|
200
|
+
await client.close();
|
|
201
|
+
}
|
|
202
|
+
return {
|
|
203
|
+
nodes,
|
|
204
|
+
edges,
|
|
205
|
+
durationMs: Date.now() - startTime,
|
|
206
|
+
errors,
|
|
207
|
+
};
|
|
208
|
+
}
|
|
209
|
+
// ===========================================================================
|
|
210
|
+
// Private Helpers
|
|
211
|
+
// ===========================================================================
|
|
212
|
+
/**
|
|
213
|
+
* Lazy-import the mongodb driver and throw a helpful error if absent.
|
|
214
|
+
*/
|
|
215
|
+
importMongoDriver() {
|
|
216
|
+
if (!mongoModule) {
|
|
217
|
+
throw new Error(`mongodb package is not installed.\n` +
|
|
218
|
+
`Connect to ${this.config.alias} (mongodb) by running: npm install mongodb`);
|
|
219
|
+
}
|
|
220
|
+
return mongoModule;
|
|
221
|
+
}
|
|
222
|
+
/**
|
|
223
|
+
* Build a MongoDB connection URI from the config.
|
|
224
|
+
* NOTE: encodeURIComponent() is required for passwords containing
|
|
225
|
+
* special characters (@, :, /, ?, #, %). parseAuth() does raw split only.
|
|
226
|
+
*/
|
|
227
|
+
buildUri() {
|
|
228
|
+
const auth = (0, connection_1.parseAuth)(this.config.auth);
|
|
229
|
+
const host = this.config.host || 'localhost';
|
|
230
|
+
const port = this.config.port || 27017;
|
|
231
|
+
const encodedDb = encodeURIComponent(this.config.database);
|
|
232
|
+
if (auth.user && auth.password) {
|
|
233
|
+
return `mongodb://${encodeURIComponent(auth.user)}:${encodeURIComponent(auth.password)}@${host}:${port}/${encodedDb}`;
|
|
234
|
+
}
|
|
235
|
+
if (auth.user) {
|
|
236
|
+
return `mongodb://${encodeURIComponent(auth.user)}@${host}:${port}/${encodedDb}`;
|
|
237
|
+
}
|
|
238
|
+
return `mongodb://${host}:${port}/${encodedDb}`;
|
|
239
|
+
}
|
|
240
|
+
/**
|
|
241
|
+
* Connect to MongoDB and return the MongoClient.
|
|
242
|
+
*/
|
|
243
|
+
async connectClient() {
|
|
244
|
+
const mongodb = this.importMongoDriver();
|
|
245
|
+
const uri = this.buildUri();
|
|
246
|
+
return mongodb.MongoClient.connect(uri, {
|
|
247
|
+
tls: this.config.ssl ?? false,
|
|
248
|
+
tlsAllowInvalidCertificates: this.config.tlsInsecure ?? false,
|
|
249
|
+
connectTimeoutMS: 10_000,
|
|
250
|
+
serverSelectionTimeoutMS: 10_000,
|
|
251
|
+
});
|
|
252
|
+
}
|
|
253
|
+
}
|
|
254
|
+
exports.MongoDBIntrospector = MongoDBIntrospector;
|
|
255
|
+
//# sourceMappingURL=mongodb.js.map
|