@memberjunction/db-auto-doc 2.109.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 +244 -0
- package/bin/run.js +5 -0
- package/dist/ai/simple-ai-client.d.ts +70 -0
- package/dist/ai/simple-ai-client.d.ts.map +1 -0
- package/dist/ai/simple-ai-client.js +181 -0
- package/dist/ai/simple-ai-client.js.map +1 -0
- package/dist/analyzers/analyzer.d.ts +23 -0
- package/dist/analyzers/analyzer.d.ts.map +1 -0
- package/dist/analyzers/analyzer.js +127 -0
- package/dist/analyzers/analyzer.js.map +1 -0
- package/dist/cli-old/cli.d.ts +3 -0
- package/dist/cli-old/cli.d.ts.map +1 -0
- package/dist/cli-old/cli.js +388 -0
- package/dist/cli-old/cli.js.map +1 -0
- package/dist/commands/analyze.d.ts +13 -0
- package/dist/commands/analyze.d.ts.map +1 -0
- package/dist/commands/analyze.js +98 -0
- package/dist/commands/analyze.js.map +1 -0
- package/dist/commands/export.d.ts +13 -0
- package/dist/commands/export.d.ts.map +1 -0
- package/dist/commands/export.js +117 -0
- package/dist/commands/export.js.map +1 -0
- package/dist/commands/init.d.ts +11 -0
- package/dist/commands/init.d.ts.map +1 -0
- package/dist/commands/init.js +163 -0
- package/dist/commands/init.js.map +1 -0
- package/dist/commands/reset.d.ts +10 -0
- package/dist/commands/reset.d.ts.map +1 -0
- package/dist/commands/reset.js +37 -0
- package/dist/commands/reset.js.map +1 -0
- package/dist/commands/review.d.ts +11 -0
- package/dist/commands/review.d.ts.map +1 -0
- package/dist/commands/review.js +82 -0
- package/dist/commands/review.js.map +1 -0
- package/dist/database/connection.d.ts +40 -0
- package/dist/database/connection.d.ts.map +1 -0
- package/dist/database/connection.js +136 -0
- package/dist/database/connection.js.map +1 -0
- package/dist/database/introspection.d.ts +59 -0
- package/dist/database/introspection.d.ts.map +1 -0
- package/dist/database/introspection.js +124 -0
- package/dist/database/introspection.js.map +1 -0
- package/dist/generators/markdown-generator.d.ts +8 -0
- package/dist/generators/markdown-generator.d.ts.map +1 -0
- package/dist/generators/markdown-generator.js +106 -0
- package/dist/generators/markdown-generator.js.map +1 -0
- package/dist/generators/sql-generator.d.ts +20 -0
- package/dist/generators/sql-generator.d.ts.map +1 -0
- package/dist/generators/sql-generator.js +83 -0
- package/dist/generators/sql-generator.js.map +1 -0
- package/dist/index.d.ts +23 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +39 -0
- package/dist/index.js.map +1 -0
- package/dist/state/state-manager.d.ts +95 -0
- package/dist/state/state-manager.d.ts.map +1 -0
- package/dist/state/state-manager.js +236 -0
- package/dist/state/state-manager.js.map +1 -0
- package/dist/types/state-file.d.ts +124 -0
- package/dist/types/state-file.d.ts.map +1 -0
- package/dist/types/state-file.js +79 -0
- package/dist/types/state-file.js.map +1 -0
- package/package.json +62 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"connection.js","sourceRoot":"","sources":["../../src/database/connection.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,2CAA6B;AAC7B,+CAAiC;AAEjC,6BAA6B;AAC7B,MAAM,CAAC,MAAM,EAAE,CAAC;AAYhB;;GAEG;AACH,MAAa,kBAAkB;IAI7B,YAAY,MAAwB;QAClC,IAAI,CAAC,MAAM,GAAG;YACZ,MAAM,EAAE,MAAM,CAAC,MAAM;YACrB,QAAQ,EAAE,MAAM,CAAC,QAAQ;YACzB,IAAI,EAAE,MAAM,CAAC,IAAI;YACjB,QAAQ,EAAE,MAAM,CAAC,QAAQ;YACzB,IAAI,EAAE,MAAM,CAAC,IAAI,IAAI,IAAI;YACzB,OAAO,EAAE;gBACP,OAAO,EAAE,MAAM,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI;gBAC7D,sBAAsB,EAAE,MAAM,CAAC,sBAAsB,KAAK,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,sBAAsB,CAAC,CAAC,CAAC,KAAK;gBAC3G,gBAAgB,EAAE,IAAI;aACvB;YACD,IAAI,EAAE;gBACJ,GAAG,EAAE,EAAE;gBACP,GAAG,EAAE,CAAC;gBACN,iBAAiB,EAAE,KAAK;aACzB;SACF,CAAC;IACJ,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,OAAO;QACZ,MAAM,MAAM,GAAqB;YAC/B,MAAM,EAAE,OAAO,CAAC,GAAG,CAAC,SAAS,IAAI,WAAW;YAC5C,QAAQ,EAAE,OAAO,CAAC,GAAG,CAAC,WAAW,IAAI,QAAQ;YAC7C,IAAI,EAAE,OAAO,CAAC,GAAG,CAAC,OAAO;YACzB,QAAQ,EAAE,OAAO,CAAC,GAAG,CAAC,WAAW;YACjC,IAAI,EAAE,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI;YAChE,OAAO,EAAE,OAAO,CAAC,GAAG,CAAC,UAAU,KAAK,MAAM;YAC1C,sBAAsB,EAAE,OAAO,CAAC,GAAG,CAAC,2BAA2B,KAAK,MAAM;SAC3E,CAAC;QAEF,OAAO,IAAI,kBAAkB,CAAC,MAAM,CAAC,CAAC;IACxC,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,aAAa;QACjB,IAAI,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC;YACrC,OAAO,IAAI,CAAC,IAAI,CAAC;QACnB,CAAC;QAED,IAAI,CAAC,IAAI,GAAG,IAAI,GAAG,CAAC,cAAc,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAChD,MAAM,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;QAC1B,OAAO,IAAI,CAAC,IAAI,CAAC;IACnB,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,KAAK,CAAU,SAAiB,EAAE,MAA4B;QAClE,IAAI,SAA4B,CAAC;QACjC,MAAM,UAAU,GAAG,CAAC,CAAC;QAErB,KAAK,IAAI,OAAO,GAAG,CAAC,EAAE,OAAO,IAAI,UAAU,EAAE,OAAO,EAAE,EAAE,CAAC;YACvD,IAAI,CAAC;gBACH,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,aAAa,EAAE,CAAC;gBACxC,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC;gBAE/B,IAAI,MAAM,EAAE,CAAC;oBACX,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;wBAClD,OAAO,CAAC,KAAK,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;oBAC5B,CAAC;gBACH,CAAC;gBAED,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;gBAC9C,OAAO,MAAM,CAAC,SAAgB,CAAC;YACjC,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,SAAS,GAAG,KAAc,CAAC;gBAE3B,IAAI,SAAS,CAAC,OAAO,CAAC,QAAQ,CAAC,kBAAkB,CAAC,EAAE,CAAC;oBACnD,MAAM,SAAS,CAAC;gBAClB,CAAC;gBAED,IAAI,OAAO,GAAG,UAAU,EAAE,CAAC;oBACzB,MAAM,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,CAAC,GAAG,GAAG,CAAC,CAAC;gBAC/C,CAAC;YACH,CAAC;QACH,CAAC;QAED,MAAM,SAAS,IAAI,IAAI,KAAK,CAAC,4BAA4B,CAAC,CAAC;IAC7D,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,KAAK;QACT,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;YACd,MAAM,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;YACxB,IAAI,CAAC,IAAI,GAAG,SAAS,CAAC;QACxB,CAAC;IACH,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,IAAI;QACR,IAAI,CAAC;YACH,MAAM,IAAI,CAAC,KAAK,CAAC,kBAAkB,CAAC,CAAC;YACrC,OAAO,IAAI,CAAC;QACd,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,KAAK,CAAC;QACf,CAAC;IACH,CAAC;IAEO,KAAK,CAAC,EAAU;QACtB,OAAO,IAAI,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,CAAC;IACzD,CAAC;CACF;AAnHD,gDAmHC"}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
import { DatabaseConnection } from './connection';
|
|
2
|
+
export interface TableInfo {
|
|
3
|
+
schema: string;
|
|
4
|
+
table: string;
|
|
5
|
+
rowCount: number;
|
|
6
|
+
}
|
|
7
|
+
export interface ColumnInfo {
|
|
8
|
+
name: string;
|
|
9
|
+
dataType: string;
|
|
10
|
+
maxLength?: number;
|
|
11
|
+
precision?: number;
|
|
12
|
+
scale?: number;
|
|
13
|
+
isNullable: boolean;
|
|
14
|
+
defaultValue?: string;
|
|
15
|
+
isIdentity: boolean;
|
|
16
|
+
isComputed: boolean;
|
|
17
|
+
isPrimaryKey: boolean;
|
|
18
|
+
isForeignKey: boolean;
|
|
19
|
+
}
|
|
20
|
+
export interface ForeignKeyInfo {
|
|
21
|
+
name: string;
|
|
22
|
+
column: string;
|
|
23
|
+
referencedSchema: string;
|
|
24
|
+
referencedTable: string;
|
|
25
|
+
referencedColumn: string;
|
|
26
|
+
}
|
|
27
|
+
export interface ExtendedPropertyInfo {
|
|
28
|
+
objectType: 'TABLE' | 'COLUMN';
|
|
29
|
+
objectName: string;
|
|
30
|
+
value: string;
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Database introspection - pure SQL Server, no MJ dependencies
|
|
34
|
+
*/
|
|
35
|
+
export declare class DatabaseIntrospector {
|
|
36
|
+
private connection;
|
|
37
|
+
constructor(connection: DatabaseConnection);
|
|
38
|
+
/**
|
|
39
|
+
* Get all tables in database
|
|
40
|
+
*/
|
|
41
|
+
getTables(schemas?: string[], excludeSchemas?: string[]): Promise<TableInfo[]>;
|
|
42
|
+
/**
|
|
43
|
+
* Get columns for a table
|
|
44
|
+
*/
|
|
45
|
+
getColumns(schema: string, table: string): Promise<ColumnInfo[]>;
|
|
46
|
+
/**
|
|
47
|
+
* Get foreign keys for a table
|
|
48
|
+
*/
|
|
49
|
+
getForeignKeys(schema: string, table: string): Promise<ForeignKeyInfo[]>;
|
|
50
|
+
/**
|
|
51
|
+
* Get extended properties (existing descriptions)
|
|
52
|
+
*/
|
|
53
|
+
getExtendedProperties(schema: string, table: string): Promise<ExtendedPropertyInfo[]>;
|
|
54
|
+
/**
|
|
55
|
+
* Sample data from table
|
|
56
|
+
*/
|
|
57
|
+
sampleData(schema: string, table: string, limit?: number): Promise<Record<string, any>[]>;
|
|
58
|
+
}
|
|
59
|
+
//# sourceMappingURL=introspection.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"introspection.d.ts","sourceRoot":"","sources":["../../src/database/introspection.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AAElD,MAAM,WAAW,SAAS;IACxB,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,OAAO,CAAC;IACpB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,UAAU,EAAE,OAAO,CAAC;IACpB,UAAU,EAAE,OAAO,CAAC;IACpB,YAAY,EAAE,OAAO,CAAC;IACtB,YAAY,EAAE,OAAO,CAAC;CACvB;AAED,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,gBAAgB,EAAE,MAAM,CAAC;IACzB,eAAe,EAAE,MAAM,CAAC;IACxB,gBAAgB,EAAE,MAAM,CAAC;CAC1B;AAED,MAAM,WAAW,oBAAoB;IACnC,UAAU,EAAE,OAAO,GAAG,QAAQ,CAAC;IAC/B,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC;CACf;AAED;;GAEG;AACH,qBAAa,oBAAoB;IACnB,OAAO,CAAC,UAAU;gBAAV,UAAU,EAAE,kBAAkB;IAElD;;OAEG;IACG,SAAS,CAAC,OAAO,CAAC,EAAE,MAAM,EAAE,EAAE,cAAc,CAAC,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,SAAS,EAAE,CAAC;IA+BpF;;OAEG;IACG,UAAU,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC;IAgCtE;;OAEG;IACG,cAAc,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,EAAE,CAAC;IAuB9E;;OAEG;IACG,qBAAqB,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,oBAAoB,EAAE,CAAC;IAkB3F;;OAEG;IACG,UAAU,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,GAAE,MAAW,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,CAAC;CAIpG"}
|
|
@@ -0,0 +1,124 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.DatabaseIntrospector = void 0;
|
|
4
|
+
/**
|
|
5
|
+
* Database introspection - pure SQL Server, no MJ dependencies
|
|
6
|
+
*/
|
|
7
|
+
class DatabaseIntrospector {
|
|
8
|
+
constructor(connection) {
|
|
9
|
+
this.connection = connection;
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
* Get all tables in database
|
|
13
|
+
*/
|
|
14
|
+
async getTables(schemas, excludeSchemas) {
|
|
15
|
+
let where = "WHERE t.type = 'U'";
|
|
16
|
+
if (schemas && schemas.length > 0) {
|
|
17
|
+
const schemaList = schemas.map(s => `'${s.replace(/'/g, "''")}'`).join(',');
|
|
18
|
+
where += ` AND s.name IN (${schemaList})`;
|
|
19
|
+
}
|
|
20
|
+
if (excludeSchemas && excludeSchemas.length > 0) {
|
|
21
|
+
const excludeList = excludeSchemas.map(s => `'${s.replace(/'/g, "''")}'`).join(',');
|
|
22
|
+
where += ` AND s.name NOT IN (${excludeList})`;
|
|
23
|
+
}
|
|
24
|
+
where += ` AND s.name NOT IN ('sys', 'INFORMATION_SCHEMA')`;
|
|
25
|
+
const query = `
|
|
26
|
+
SELECT
|
|
27
|
+
s.name AS [schema],
|
|
28
|
+
t.name AS [table],
|
|
29
|
+
SUM(p.rows) AS rowCount
|
|
30
|
+
FROM sys.tables t
|
|
31
|
+
INNER JOIN sys.schemas s ON t.schema_id = s.schema_id
|
|
32
|
+
LEFT JOIN sys.partitions p ON t.object_id = p.object_id AND p.index_id IN (0, 1)
|
|
33
|
+
${where}
|
|
34
|
+
GROUP BY s.name, t.name
|
|
35
|
+
ORDER BY s.name, t.name
|
|
36
|
+
`;
|
|
37
|
+
return await this.connection.query(query);
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* Get columns for a table
|
|
41
|
+
*/
|
|
42
|
+
async getColumns(schema, table) {
|
|
43
|
+
const query = `
|
|
44
|
+
SELECT
|
|
45
|
+
c.name,
|
|
46
|
+
t.name AS dataType,
|
|
47
|
+
c.max_length AS maxLength,
|
|
48
|
+
c.precision,
|
|
49
|
+
c.scale,
|
|
50
|
+
c.is_nullable AS isNullable,
|
|
51
|
+
OBJECT_DEFINITION(c.default_object_id) AS defaultValue,
|
|
52
|
+
c.is_identity AS isIdentity,
|
|
53
|
+
c.is_computed AS isComputed,
|
|
54
|
+
CASE WHEN pk.column_id IS NOT NULL THEN 1 ELSE 0 END AS isPrimaryKey,
|
|
55
|
+
CASE WHEN fk.parent_column_id IS NOT NULL THEN 1 ELSE 0 END AS isForeignKey
|
|
56
|
+
FROM sys.columns c
|
|
57
|
+
INNER JOIN sys.types t ON c.user_type_id = t.user_type_id
|
|
58
|
+
INNER JOIN sys.tables tbl ON c.object_id = tbl.object_id
|
|
59
|
+
INNER JOIN sys.schemas s ON tbl.schema_id = s.schema_id
|
|
60
|
+
LEFT JOIN (
|
|
61
|
+
SELECT ic.object_id, ic.column_id
|
|
62
|
+
FROM sys.index_columns ic
|
|
63
|
+
INNER JOIN sys.indexes i ON ic.object_id = i.object_id AND ic.index_id = i.index_id
|
|
64
|
+
WHERE i.is_primary_key = 1
|
|
65
|
+
) pk ON c.object_id = pk.object_id AND c.column_id = pk.column_id
|
|
66
|
+
LEFT JOIN sys.foreign_key_columns fk ON c.object_id = fk.parent_object_id AND c.column_id = fk.parent_column_id
|
|
67
|
+
WHERE s.name = @schema AND tbl.name = @table
|
|
68
|
+
ORDER BY c.column_id
|
|
69
|
+
`;
|
|
70
|
+
return await this.connection.query(query, { schema, table });
|
|
71
|
+
}
|
|
72
|
+
/**
|
|
73
|
+
* Get foreign keys for a table
|
|
74
|
+
*/
|
|
75
|
+
async getForeignKeys(schema, table) {
|
|
76
|
+
const query = `
|
|
77
|
+
SELECT
|
|
78
|
+
fk.name,
|
|
79
|
+
c1.name AS [column],
|
|
80
|
+
s2.name AS referencedSchema,
|
|
81
|
+
t2.name AS referencedTable,
|
|
82
|
+
c2.name AS referencedColumn
|
|
83
|
+
FROM sys.foreign_keys fk
|
|
84
|
+
INNER JOIN sys.tables t1 ON fk.parent_object_id = t1.object_id
|
|
85
|
+
INNER JOIN sys.schemas s1 ON t1.schema_id = s1.schema_id
|
|
86
|
+
INNER JOIN sys.foreign_key_columns fkc ON fk.object_id = fkc.constraint_object_id
|
|
87
|
+
INNER JOIN sys.columns c1 ON fkc.parent_object_id = c1.object_id AND fkc.parent_column_id = c1.column_id
|
|
88
|
+
INNER JOIN sys.columns c2 ON fkc.referenced_object_id = c2.object_id AND fkc.referenced_column_id = c2.column_id
|
|
89
|
+
INNER JOIN sys.tables t2 ON fkc.referenced_object_id = t2.object_id
|
|
90
|
+
INNER JOIN sys.schemas s2 ON t2.schema_id = s2.schema_id
|
|
91
|
+
WHERE s1.name = @schema AND t1.name = @table
|
|
92
|
+
ORDER BY fk.name
|
|
93
|
+
`;
|
|
94
|
+
return await this.connection.query(query, { schema, table });
|
|
95
|
+
}
|
|
96
|
+
/**
|
|
97
|
+
* Get extended properties (existing descriptions)
|
|
98
|
+
*/
|
|
99
|
+
async getExtendedProperties(schema, table) {
|
|
100
|
+
const query = `
|
|
101
|
+
SELECT
|
|
102
|
+
CASE WHEN ep.minor_id = 0 THEN 'TABLE' ELSE 'COLUMN' END AS objectType,
|
|
103
|
+
COALESCE(c.name, t.name) AS objectName,
|
|
104
|
+
CAST(ep.value AS NVARCHAR(MAX)) AS value
|
|
105
|
+
FROM sys.extended_properties ep
|
|
106
|
+
INNER JOIN sys.tables t ON ep.major_id = t.object_id
|
|
107
|
+
INNER JOIN sys.schemas s ON t.schema_id = s.schema_id
|
|
108
|
+
LEFT JOIN sys.columns c ON ep.major_id = c.object_id AND ep.minor_id = c.column_id
|
|
109
|
+
WHERE s.name = @schema
|
|
110
|
+
AND t.name = @table
|
|
111
|
+
AND ep.name = 'MS_Description'
|
|
112
|
+
`;
|
|
113
|
+
return await this.connection.query(query, { schema, table });
|
|
114
|
+
}
|
|
115
|
+
/**
|
|
116
|
+
* Sample data from table
|
|
117
|
+
*/
|
|
118
|
+
async sampleData(schema, table, limit = 10) {
|
|
119
|
+
const query = `SELECT TOP ${limit} * FROM [${schema}].[${table}]`;
|
|
120
|
+
return await this.connection.query(query);
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
exports.DatabaseIntrospector = DatabaseIntrospector;
|
|
124
|
+
//# sourceMappingURL=introspection.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"introspection.js","sourceRoot":"","sources":["../../src/database/introspection.ts"],"names":[],"mappings":";;;AAoCA;;GAEG;AACH,MAAa,oBAAoB;IAC/B,YAAoB,UAA8B;QAA9B,eAAU,GAAV,UAAU,CAAoB;IAAG,CAAC;IAEtD;;OAEG;IACH,KAAK,CAAC,SAAS,CAAC,OAAkB,EAAE,cAAyB;QAC3D,IAAI,KAAK,GAAG,oBAAoB,CAAC;QAEjC,IAAI,OAAO,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAClC,MAAM,UAAU,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YAC5E,KAAK,IAAI,mBAAmB,UAAU,GAAG,CAAC;QAC5C,CAAC;QAED,IAAI,cAAc,IAAI,cAAc,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAChD,MAAM,WAAW,GAAG,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YACpF,KAAK,IAAI,uBAAuB,WAAW,GAAG,CAAC;QACjD,CAAC;QAED,KAAK,IAAI,kDAAkD,CAAC;QAE5D,MAAM,KAAK,GAAG;;;;;;;;QAQV,KAAK;;;KAGR,CAAC;QAEF,OAAO,MAAM,IAAI,CAAC,UAAU,CAAC,KAAK,CAAY,KAAK,CAAC,CAAC;IACvD,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,UAAU,CAAC,MAAc,EAAE,KAAa;QAC5C,MAAM,KAAK,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;KA0Bb,CAAC;QAEF,OAAO,MAAM,IAAI,CAAC,UAAU,CAAC,KAAK,CAAa,KAAK,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,CAAC;IAC3E,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,cAAc,CAAC,MAAc,EAAE,KAAa;QAChD,MAAM,KAAK,GAAG;;;;;;;;;;;;;;;;;KAiBb,CAAC;QAEF,OAAO,MAAM,IAAI,CAAC,UAAU,CAAC,KAAK,CAAiB,KAAK,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,CAAC;IAC/E,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,qBAAqB,CAAC,MAAc,EAAE,KAAa;QACvD,MAAM,KAAK,GAAG;;;;;;;;;;;;KAYb,CAAC;QAEF,OAAO,MAAM,IAAI,CAAC,UAAU,CAAC,KAAK,CAAuB,KAAK,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,CAAC;IACrF,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,UAAU,CAAC,MAAc,EAAE,KAAa,EAAE,QAAgB,EAAE;QAChE,MAAM,KAAK,GAAG,cAAc,KAAK,YAAY,MAAM,MAAM,KAAK,GAAG,CAAC;QAClE,OAAO,MAAM,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IAC5C,CAAC;CACF;AA9HD,oDA8HC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"markdown-generator.d.ts","sourceRoot":"","sources":["../../src/generators/markdown-generator.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAEhD;;GAEG;AACH,qBAAa,iBAAiB;IAC5B,QAAQ,CAAC,KAAK,EAAE,SAAS,GAAG,MAAM;CA8HnC"}
|
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.MarkdownGenerator = void 0;
|
|
4
|
+
/**
|
|
5
|
+
* Generate Markdown documentation
|
|
6
|
+
*/
|
|
7
|
+
class MarkdownGenerator {
|
|
8
|
+
generate(state) {
|
|
9
|
+
const lines = [];
|
|
10
|
+
lines.push(`# Database Documentation: ${state.database.database}`);
|
|
11
|
+
lines.push('');
|
|
12
|
+
lines.push(`**Server**: ${state.database.server}`);
|
|
13
|
+
lines.push(`**Generated**: ${new Date().toISOString()}`);
|
|
14
|
+
lines.push('');
|
|
15
|
+
if (state.seedContext) {
|
|
16
|
+
lines.push('## Overview');
|
|
17
|
+
if (state.seedContext.overallPurpose) {
|
|
18
|
+
lines.push(state.seedContext.overallPurpose);
|
|
19
|
+
}
|
|
20
|
+
if (state.seedContext.businessDomains) {
|
|
21
|
+
lines.push('');
|
|
22
|
+
lines.push('**Business Domains**: ' + state.seedContext.businessDomains.join(', '));
|
|
23
|
+
}
|
|
24
|
+
lines.push('');
|
|
25
|
+
}
|
|
26
|
+
lines.push('## Schemas');
|
|
27
|
+
lines.push('');
|
|
28
|
+
for (const [schemaName, schema] of Object.entries(state.schemas)) {
|
|
29
|
+
lines.push(`### ${schemaName}`);
|
|
30
|
+
lines.push('');
|
|
31
|
+
if (schema.description) {
|
|
32
|
+
lines.push(schema.description);
|
|
33
|
+
lines.push('');
|
|
34
|
+
}
|
|
35
|
+
if (schema.businessDomain) {
|
|
36
|
+
lines.push(`**Domain**: ${schema.businessDomain}`);
|
|
37
|
+
lines.push('');
|
|
38
|
+
}
|
|
39
|
+
lines.push('#### Tables');
|
|
40
|
+
lines.push('');
|
|
41
|
+
for (const [tableName, table] of Object.entries(schema.tables)) {
|
|
42
|
+
lines.push(`##### ${tableName}`);
|
|
43
|
+
lines.push('');
|
|
44
|
+
if (table.finalDescription) {
|
|
45
|
+
lines.push(table.finalDescription);
|
|
46
|
+
lines.push('');
|
|
47
|
+
}
|
|
48
|
+
if (table.aiGenerated?.businessDomain) {
|
|
49
|
+
lines.push(`**Domain**: ${table.aiGenerated.businessDomain}`);
|
|
50
|
+
lines.push('');
|
|
51
|
+
}
|
|
52
|
+
if (table.userNotes) {
|
|
53
|
+
lines.push(`**Notes**: ${table.userNotes}`);
|
|
54
|
+
lines.push('');
|
|
55
|
+
}
|
|
56
|
+
// Columns table
|
|
57
|
+
const hasColumns = Object.keys(table.columns).length > 0;
|
|
58
|
+
if (hasColumns) {
|
|
59
|
+
lines.push('**Columns**:');
|
|
60
|
+
lines.push('');
|
|
61
|
+
lines.push('| Column | Description |');
|
|
62
|
+
lines.push('|--------|-------------|');
|
|
63
|
+
for (const [columnName, column] of Object.entries(table.columns)) {
|
|
64
|
+
const desc = column.finalDescription || '';
|
|
65
|
+
lines.push(`| ${columnName} | ${desc} |`);
|
|
66
|
+
}
|
|
67
|
+
lines.push('');
|
|
68
|
+
}
|
|
69
|
+
// Relationships
|
|
70
|
+
if (table.aiGenerated?.relationships && table.aiGenerated.relationships.length > 0) {
|
|
71
|
+
lines.push('**Relationships**:');
|
|
72
|
+
lines.push('');
|
|
73
|
+
for (const rel of table.aiGenerated.relationships) {
|
|
74
|
+
lines.push(`- ${rel.type === 'parent' ? '→' : '←'} ${rel.table}: ${rel.description}`);
|
|
75
|
+
}
|
|
76
|
+
lines.push('');
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
// Statistics
|
|
81
|
+
lines.push('---');
|
|
82
|
+
lines.push('');
|
|
83
|
+
lines.push('## Statistics');
|
|
84
|
+
lines.push('');
|
|
85
|
+
const totalSchemas = Object.keys(state.schemas).length;
|
|
86
|
+
const totalTables = Object.values(state.schemas).reduce((sum, s) => sum + Object.keys(s.tables).length, 0);
|
|
87
|
+
const totalColumns = Object.values(state.schemas).reduce((sum, s) => sum + Object.values(s.tables).reduce((s2, t) => s2 + Object.keys(t.columns).length, 0), 0);
|
|
88
|
+
lines.push(`- **Schemas**: ${totalSchemas}`);
|
|
89
|
+
lines.push(`- **Tables**: ${totalTables}`);
|
|
90
|
+
lines.push(`- **Columns**: ${totalColumns}`);
|
|
91
|
+
if (state.runHistory.length > 0) {
|
|
92
|
+
const lastRun = state.runHistory[state.runHistory.length - 1];
|
|
93
|
+
lines.push('');
|
|
94
|
+
lines.push(`**Last Run**: ${lastRun.timestamp}`);
|
|
95
|
+
if (lastRun.tokensUsed) {
|
|
96
|
+
lines.push(`**Tokens Used**: ${lastRun.tokensUsed.toLocaleString()}`);
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
lines.push('');
|
|
100
|
+
lines.push('---');
|
|
101
|
+
lines.push('*Generated by SQL Server Documentation Generator*');
|
|
102
|
+
return lines.join('\n');
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
exports.MarkdownGenerator = MarkdownGenerator;
|
|
106
|
+
//# sourceMappingURL=markdown-generator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"markdown-generator.js","sourceRoot":"","sources":["../../src/generators/markdown-generator.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { StateFile } from '../types/state-file';
|
|
2
|
+
export interface SQLGeneratorOptions {
|
|
3
|
+
approvedOnly?: boolean;
|
|
4
|
+
confidenceThreshold?: number;
|
|
5
|
+
}
|
|
6
|
+
/**
|
|
7
|
+
* Generate SQL scripts with sp_addextendedproperty statements
|
|
8
|
+
*/
|
|
9
|
+
export declare class SQLGenerator {
|
|
10
|
+
generate(state: StateFile, options?: SQLGeneratorOptions): string;
|
|
11
|
+
/**
|
|
12
|
+
* Generate sp_addextendedproperty for table
|
|
13
|
+
*/
|
|
14
|
+
private generateTableProperty;
|
|
15
|
+
/**
|
|
16
|
+
* Generate sp_addextendedproperty for column
|
|
17
|
+
*/
|
|
18
|
+
private generateColumnProperty;
|
|
19
|
+
}
|
|
20
|
+
//# sourceMappingURL=sql-generator.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sql-generator.d.ts","sourceRoot":"","sources":["../../src/generators/sql-generator.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAEhD,MAAM,WAAW,mBAAmB;IAClC,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,mBAAmB,CAAC,EAAE,MAAM,CAAC;CAC9B;AAED;;GAEG;AACH,qBAAa,YAAY;IACvB,QAAQ,CAAC,KAAK,EAAE,SAAS,EAAE,OAAO,GAAE,mBAAwB,GAAG,MAAM;IA4DrE;;OAEG;IACH,OAAO,CAAC,qBAAqB;IAY7B;;OAEG;IACH,OAAO,CAAC,sBAAsB;CAgB/B"}
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.SQLGenerator = void 0;
|
|
4
|
+
/**
|
|
5
|
+
* Generate SQL scripts with sp_addextendedproperty statements
|
|
6
|
+
*/
|
|
7
|
+
class SQLGenerator {
|
|
8
|
+
generate(state, options = {}) {
|
|
9
|
+
const lines = [];
|
|
10
|
+
lines.push('-- Generated by SQL Server Documentation Generator');
|
|
11
|
+
lines.push(`-- Database: ${state.database.server}.${state.database.database}`);
|
|
12
|
+
lines.push(`-- Generated: ${new Date().toISOString()}`);
|
|
13
|
+
lines.push('');
|
|
14
|
+
lines.push('BEGIN TRANSACTION;');
|
|
15
|
+
lines.push('');
|
|
16
|
+
let count = 0;
|
|
17
|
+
for (const [schemaName, schema] of Object.entries(state.schemas)) {
|
|
18
|
+
for (const [tableName, table] of Object.entries(schema.tables)) {
|
|
19
|
+
// Skip if not approved (when approvedOnly is true)
|
|
20
|
+
if (options.approvedOnly && !table.userApproved) {
|
|
21
|
+
continue;
|
|
22
|
+
}
|
|
23
|
+
// Skip if confidence too low
|
|
24
|
+
if (options.confidenceThreshold && table.aiGenerated) {
|
|
25
|
+
if (table.aiGenerated.confidence < options.confidenceThreshold) {
|
|
26
|
+
continue;
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
// Table description
|
|
30
|
+
if (table.finalDescription) {
|
|
31
|
+
lines.push(this.generateTableProperty(schemaName, tableName, table.finalDescription));
|
|
32
|
+
count++;
|
|
33
|
+
}
|
|
34
|
+
// Column descriptions
|
|
35
|
+
for (const [columnName, column] of Object.entries(table.columns)) {
|
|
36
|
+
// Skip if confidence too low
|
|
37
|
+
if (options.confidenceThreshold && column.aiGenerated) {
|
|
38
|
+
if (column.aiGenerated.confidence < options.confidenceThreshold) {
|
|
39
|
+
continue;
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
if (column.finalDescription) {
|
|
43
|
+
lines.push(this.generateColumnProperty(schemaName, tableName, columnName, column.finalDescription));
|
|
44
|
+
count++;
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
lines.push('');
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
lines.push('COMMIT TRANSACTION;');
|
|
51
|
+
lines.push('');
|
|
52
|
+
lines.push(`-- Total properties: ${count}`);
|
|
53
|
+
return lines.join('\n');
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* Generate sp_addextendedproperty for table
|
|
57
|
+
*/
|
|
58
|
+
generateTableProperty(schema, table, description) {
|
|
59
|
+
const escapedDesc = description.replace(/'/g, "''");
|
|
60
|
+
return `
|
|
61
|
+
-- ${schema}.${table}
|
|
62
|
+
EXEC sp_addextendedproperty
|
|
63
|
+
@name = N'MS_Description',
|
|
64
|
+
@value = N'${escapedDesc}',
|
|
65
|
+
@level0type = N'SCHEMA', @level0name = N'${schema}',
|
|
66
|
+
@level1type = N'TABLE', @level1name = N'${table}';`;
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* Generate sp_addextendedproperty for column
|
|
70
|
+
*/
|
|
71
|
+
generateColumnProperty(schema, table, column, description) {
|
|
72
|
+
const escapedDesc = description.replace(/'/g, "''");
|
|
73
|
+
return `
|
|
74
|
+
EXEC sp_addextendedproperty
|
|
75
|
+
@name = N'MS_Description',
|
|
76
|
+
@value = N'${escapedDesc}',
|
|
77
|
+
@level0type = N'SCHEMA', @level0name = N'${schema}',
|
|
78
|
+
@level1type = N'TABLE', @level1name = N'${table}',
|
|
79
|
+
@level2type = N'COLUMN', @level2name = N'${column}';`;
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
exports.SQLGenerator = SQLGenerator;
|
|
83
|
+
//# sourceMappingURL=sql-generator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sql-generator.js","sourceRoot":"","sources":["../../src/generators/sql-generator.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @memberjunction/db-auto-doc - SQL Server Database Auto-Documentation
|
|
3
|
+
*
|
|
4
|
+
* AI-powered documentation generator for SQL Server databases.
|
|
5
|
+
* Works standalone - no MemberJunction runtime required.
|
|
6
|
+
*
|
|
7
|
+
* Use via CLI:
|
|
8
|
+
* db-auto-doc init
|
|
9
|
+
* db-auto-doc analyze --interactive
|
|
10
|
+
* db-auto-doc review
|
|
11
|
+
* db-auto-doc export --format=sql
|
|
12
|
+
*
|
|
13
|
+
* Or programmatically:
|
|
14
|
+
*/
|
|
15
|
+
export * from './types/state-file';
|
|
16
|
+
export * from './database/connection';
|
|
17
|
+
export * from './database/introspection';
|
|
18
|
+
export * from './state/state-manager';
|
|
19
|
+
export * from './ai/simple-ai-client';
|
|
20
|
+
export * from './analyzers/analyzer';
|
|
21
|
+
export * from './generators/sql-generator';
|
|
22
|
+
export * from './generators/markdown-generator';
|
|
23
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,cAAc,oBAAoB,CAAC;AACnC,cAAc,uBAAuB,CAAC;AACtC,cAAc,0BAA0B,CAAC;AACzC,cAAc,uBAAuB,CAAC;AACtC,cAAc,uBAAuB,CAAC;AACtC,cAAc,sBAAsB,CAAC;AACrC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,iCAAiC,CAAC"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* @memberjunction/db-auto-doc - SQL Server Database Auto-Documentation
|
|
4
|
+
*
|
|
5
|
+
* AI-powered documentation generator for SQL Server databases.
|
|
6
|
+
* Works standalone - no MemberJunction runtime required.
|
|
7
|
+
*
|
|
8
|
+
* Use via CLI:
|
|
9
|
+
* db-auto-doc init
|
|
10
|
+
* db-auto-doc analyze --interactive
|
|
11
|
+
* db-auto-doc review
|
|
12
|
+
* db-auto-doc export --format=sql
|
|
13
|
+
*
|
|
14
|
+
* Or programmatically:
|
|
15
|
+
*/
|
|
16
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
17
|
+
if (k2 === undefined) k2 = k;
|
|
18
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
19
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
20
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
21
|
+
}
|
|
22
|
+
Object.defineProperty(o, k2, desc);
|
|
23
|
+
}) : (function(o, m, k, k2) {
|
|
24
|
+
if (k2 === undefined) k2 = k;
|
|
25
|
+
o[k2] = m[k];
|
|
26
|
+
}));
|
|
27
|
+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
28
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
29
|
+
};
|
|
30
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
31
|
+
__exportStar(require("./types/state-file"), exports);
|
|
32
|
+
__exportStar(require("./database/connection"), exports);
|
|
33
|
+
__exportStar(require("./database/introspection"), exports);
|
|
34
|
+
__exportStar(require("./state/state-manager"), exports);
|
|
35
|
+
__exportStar(require("./ai/simple-ai-client"), exports);
|
|
36
|
+
__exportStar(require("./analyzers/analyzer"), exports);
|
|
37
|
+
__exportStar(require("./generators/sql-generator"), exports);
|
|
38
|
+
__exportStar(require("./generators/markdown-generator"), exports);
|
|
39
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;GAaG;;;;;;;;;;;;;;;;AAEH,qDAAmC;AACnC,wDAAsC;AACtC,2DAAyC;AACzC,wDAAsC;AACtC,wDAAsC;AACtC,uDAAqC;AACrC,6DAA2C;AAC3C,kEAAgD"}
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
import { StateFile, RunHistoryEntry } from '../types/state-file';
|
|
2
|
+
export interface StateManagerOptions {
|
|
3
|
+
stateFilePath?: string;
|
|
4
|
+
}
|
|
5
|
+
/**
|
|
6
|
+
* State file manager - handles read/write/merge of db-doc-state.json
|
|
7
|
+
*/
|
|
8
|
+
export declare class StateManager {
|
|
9
|
+
private stateFilePath;
|
|
10
|
+
private state?;
|
|
11
|
+
constructor(options?: StateManagerOptions);
|
|
12
|
+
/**
|
|
13
|
+
* Load state file (or create if doesn't exist)
|
|
14
|
+
*/
|
|
15
|
+
load(server?: string, database?: string): Promise<StateFile>;
|
|
16
|
+
/**
|
|
17
|
+
* Save state file
|
|
18
|
+
*/
|
|
19
|
+
save(): Promise<void>;
|
|
20
|
+
/**
|
|
21
|
+
* Get current state
|
|
22
|
+
*/
|
|
23
|
+
getState(): StateFile;
|
|
24
|
+
/**
|
|
25
|
+
* Update table with AI-generated documentation
|
|
26
|
+
*/
|
|
27
|
+
updateTableAI(schemaName: string, tableName: string, aiDoc: {
|
|
28
|
+
description: string;
|
|
29
|
+
purpose?: string;
|
|
30
|
+
usageNotes?: string;
|
|
31
|
+
businessDomain?: string;
|
|
32
|
+
confidence: number;
|
|
33
|
+
model: string;
|
|
34
|
+
tokensUsed?: number;
|
|
35
|
+
relationships?: Array<{
|
|
36
|
+
type: 'parent' | 'child';
|
|
37
|
+
table: string;
|
|
38
|
+
description: string;
|
|
39
|
+
}>;
|
|
40
|
+
}): void;
|
|
41
|
+
/**
|
|
42
|
+
* Update column with AI-generated documentation
|
|
43
|
+
*/
|
|
44
|
+
updateColumnAI(schemaName: string, tableName: string, columnName: string, aiDoc: {
|
|
45
|
+
description: string;
|
|
46
|
+
purpose?: string;
|
|
47
|
+
validValues?: string;
|
|
48
|
+
usageNotes?: string;
|
|
49
|
+
confidence: number;
|
|
50
|
+
model: string;
|
|
51
|
+
}): void;
|
|
52
|
+
/**
|
|
53
|
+
* Mark table as user approved
|
|
54
|
+
*/
|
|
55
|
+
approveTable(schemaName: string, tableName: string): void;
|
|
56
|
+
/**
|
|
57
|
+
* Mark column as user approved
|
|
58
|
+
*/
|
|
59
|
+
approveColumn(schemaName: string, tableName: string, columnName: string): void;
|
|
60
|
+
/**
|
|
61
|
+
* Add user notes to table
|
|
62
|
+
*/
|
|
63
|
+
addTableNotes(schemaName: string, tableName: string, notes: string): void;
|
|
64
|
+
/**
|
|
65
|
+
* Add user notes to column
|
|
66
|
+
*/
|
|
67
|
+
addColumnNotes(schemaName: string, tableName: string, columnName: string, notes: string): void;
|
|
68
|
+
/**
|
|
69
|
+
* Add run history entry
|
|
70
|
+
*/
|
|
71
|
+
addRunHistory(entry: RunHistoryEntry): void;
|
|
72
|
+
/**
|
|
73
|
+
* Get tables that need processing (no AI generation yet)
|
|
74
|
+
*/
|
|
75
|
+
getTablesNeedingProcessing(schemaName?: string): Array<{
|
|
76
|
+
schema: string;
|
|
77
|
+
table: string;
|
|
78
|
+
}>;
|
|
79
|
+
/**
|
|
80
|
+
* Get unapproved tables
|
|
81
|
+
*/
|
|
82
|
+
getUnapprovedTables(schemaName?: string): Array<{
|
|
83
|
+
schema: string;
|
|
84
|
+
table: string;
|
|
85
|
+
}>;
|
|
86
|
+
/**
|
|
87
|
+
* Check if state file exists
|
|
88
|
+
*/
|
|
89
|
+
exists(): Promise<boolean>;
|
|
90
|
+
/**
|
|
91
|
+
* Reset state file
|
|
92
|
+
*/
|
|
93
|
+
reset(server: string, database: string): Promise<void>;
|
|
94
|
+
}
|
|
95
|
+
//# sourceMappingURL=state-manager.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"state-manager.d.ts","sourceRoot":"","sources":["../../src/state/state-manager.ts"],"names":[],"mappings":"AAEA,OAAO,EACL,SAAS,EAQT,eAAe,EAEhB,MAAM,qBAAqB,CAAC;AAE7B,MAAM,WAAW,mBAAmB;IAClC,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED;;GAEG;AACH,qBAAa,YAAY;IACvB,OAAO,CAAC,aAAa,CAAS;IAC9B,OAAO,CAAC,KAAK,CAAC,CAAY;gBAEd,OAAO,GAAE,mBAAwB;IAI7C;;OAEG;IACG,IAAI,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,CAAC;IAgBlE;;OAEG;IACG,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAU3B;;OAEG;IACH,QAAQ,IAAI,SAAS;IAOrB;;OAEG;IACH,aAAa,CACX,UAAU,EAAE,MAAM,EAClB,SAAS,EAAE,MAAM,EACjB,KAAK,EAAE;QACL,WAAW,EAAE,MAAM,CAAC;QACpB,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,cAAc,CAAC,EAAE,MAAM,CAAC;QACxB,UAAU,EAAE,MAAM,CAAC;QACnB,KAAK,EAAE,MAAM,CAAC;QACd,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,aAAa,CAAC,EAAE,KAAK,CAAC;YACpB,IAAI,EAAE,QAAQ,GAAG,OAAO,CAAC;YACzB,KAAK,EAAE,MAAM,CAAC;YACd,WAAW,EAAE,MAAM,CAAC;SACrB,CAAC,CAAC;KACJ,GACA,IAAI;IA4BP;;OAEG;IACH,cAAc,CACZ,UAAU,EAAE,MAAM,EAClB,SAAS,EAAE,MAAM,EACjB,UAAU,EAAE,MAAM,EAClB,KAAK,EAAE;QACL,WAAW,EAAE,MAAM,CAAC;QACpB,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,UAAU,EAAE,MAAM,CAAC;QACnB,KAAK,EAAE,MAAM,CAAC;KACf,GACA,IAAI;IA2BP;;OAEG;IACH,YAAY,CAAC,UAAU,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,IAAI;IAUzD;;OAEG;IACH,aAAa,CAAC,UAAU,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,IAAI;IAW9E;;OAEG;IACH,aAAa,CAAC,UAAU,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI;IAiBzE;;OAEG;IACH,cAAc,CAAC,UAAU,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI;IAkB9F;;OAEG;IACH,aAAa,CAAC,KAAK,EAAE,eAAe,GAAG,IAAI;IAK3C;;OAEG;IACH,0BAA0B,CAAC,UAAU,CAAC,EAAE,MAAM,GAAG,KAAK,CAAC;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC;IAkBzF;;OAEG;IACH,mBAAmB,CAAC,UAAU,CAAC,EAAE,MAAM,GAAG,KAAK,CAAC;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC;IAkBlF;;OAEG;IACG,MAAM,IAAI,OAAO,CAAC,OAAO,CAAC;IAShC;;OAEG;IACG,KAAK,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;CAI7D"}
|