@softtechai/quickmcp 1.0.8

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.
Files changed (163) hide show
  1. package/README.md +553 -0
  2. package/dist/client/MCPClient.d.ts +24 -0
  3. package/dist/client/MCPClient.d.ts.map +1 -0
  4. package/dist/client/MCPClient.js +211 -0
  5. package/dist/client/MCPClient.js.map +1 -0
  6. package/dist/client/MCPClientUnified.d.ts +31 -0
  7. package/dist/client/MCPClientUnified.d.ts.map +1 -0
  8. package/dist/client/MCPClientUnified.js +275 -0
  9. package/dist/client/MCPClientUnified.js.map +1 -0
  10. package/dist/client/MCPTestRunner.d.ts +44 -0
  11. package/dist/client/MCPTestRunner.d.ts.map +1 -0
  12. package/dist/client/MCPTestRunner.js +220 -0
  13. package/dist/client/MCPTestRunner.js.map +1 -0
  14. package/dist/client/MCPTestRunnerUnified.d.ts +48 -0
  15. package/dist/client/MCPTestRunnerUnified.d.ts.map +1 -0
  16. package/dist/client/MCPTestRunnerUnified.js +183 -0
  17. package/dist/client/MCPTestRunnerUnified.js.map +1 -0
  18. package/dist/database/json-manager.d.ts +55 -0
  19. package/dist/database/json-manager.d.ts.map +1 -0
  20. package/dist/database/json-manager.js +128 -0
  21. package/dist/database/json-manager.js.map +1 -0
  22. package/dist/database/sqlite-manager.d.ts +53 -0
  23. package/dist/database/sqlite-manager.d.ts.map +1 -0
  24. package/dist/database/sqlite-manager.js +193 -0
  25. package/dist/database/sqlite-manager.js.map +1 -0
  26. package/dist/dynamic-mcp-executor.d.ts +14 -0
  27. package/dist/dynamic-mcp-executor.d.ts.map +1 -0
  28. package/dist/dynamic-mcp-executor.js +274 -0
  29. package/dist/dynamic-mcp-executor.js.map +1 -0
  30. package/dist/generators/MCPServerGenerator-new.d.ts +37 -0
  31. package/dist/generators/MCPServerGenerator-new.d.ts.map +1 -0
  32. package/dist/generators/MCPServerGenerator-new.js +287 -0
  33. package/dist/generators/MCPServerGenerator-new.js.map +1 -0
  34. package/dist/generators/MCPServerGenerator.d.ts +42 -0
  35. package/dist/generators/MCPServerGenerator.d.ts.map +1 -0
  36. package/dist/generators/MCPServerGenerator.js +494 -0
  37. package/dist/generators/MCPServerGenerator.js.map +1 -0
  38. package/dist/generators/database/sqlite-manager.d.ts +52 -0
  39. package/dist/generators/database/sqlite-manager.js +143 -0
  40. package/dist/generators/generators/MCPServerGenerator.d.ts +37 -0
  41. package/dist/generators/generators/MCPServerGenerator.js +396 -0
  42. package/dist/index.d.ts +7 -0
  43. package/dist/index.d.ts.map +1 -0
  44. package/dist/index.js +23 -0
  45. package/dist/index.js.map +1 -0
  46. package/dist/integrated-mcp-server-new.d.ts +12 -0
  47. package/dist/integrated-mcp-server-new.d.ts.map +1 -0
  48. package/dist/integrated-mcp-server-new.js +253 -0
  49. package/dist/integrated-mcp-server-new.js.map +1 -0
  50. package/dist/integrated-mcp-server.d.ts +25 -0
  51. package/dist/integrated-mcp-server.d.ts.map +1 -0
  52. package/dist/integrated-mcp-server.js +541 -0
  53. package/dist/integrated-mcp-server.js.map +1 -0
  54. package/dist/mcp-inspector-server.d.ts +3 -0
  55. package/dist/mcp-inspector-server.d.ts.map +1 -0
  56. package/dist/mcp-inspector-server.js +119 -0
  57. package/dist/mcp-inspector-server.js.map +1 -0
  58. package/dist/mcp-sdk-server.d.ts +3 -0
  59. package/dist/mcp-sdk-server.d.ts.map +1 -0
  60. package/dist/mcp-sdk-server.js +90 -0
  61. package/dist/mcp-sdk-server.js.map +1 -0
  62. package/dist/mcp-server.d.ts +3 -0
  63. package/dist/mcp-server.d.ts.map +1 -0
  64. package/dist/mcp-server.js +300 -0
  65. package/dist/mcp-server.js.map +1 -0
  66. package/dist/parsers/CsvParser.d.ts +7 -0
  67. package/dist/parsers/CsvParser.d.ts.map +1 -0
  68. package/dist/parsers/CsvParser.js +98 -0
  69. package/dist/parsers/CsvParser.js.map +1 -0
  70. package/dist/parsers/DatabaseParser.d.ts +18 -0
  71. package/dist/parsers/DatabaseParser.d.ts.map +1 -0
  72. package/dist/parsers/DatabaseParser.js +372 -0
  73. package/dist/parsers/DatabaseParser.js.map +1 -0
  74. package/dist/parsers/ExcelParser.d.ts +8 -0
  75. package/dist/parsers/ExcelParser.d.ts.map +1 -0
  76. package/dist/parsers/ExcelParser.js +119 -0
  77. package/dist/parsers/ExcelParser.js.map +1 -0
  78. package/dist/parsers/index.d.ts +13 -0
  79. package/dist/parsers/index.d.ts.map +1 -0
  80. package/dist/parsers/index.js +88 -0
  81. package/dist/parsers/index.js.map +1 -0
  82. package/dist/parsers/parsers/ExcelParser.js +118 -0
  83. package/dist/parsers/types/index.js +2 -0
  84. package/dist/quickmcp-unified-bridge.d.ts +13 -0
  85. package/dist/quickmcp-unified-bridge.d.ts.map +1 -0
  86. package/dist/quickmcp-unified-bridge.js +176 -0
  87. package/dist/quickmcp-unified-bridge.js.map +1 -0
  88. package/dist/server/ServerManager.d.ts +37 -0
  89. package/dist/server/ServerManager.d.ts.map +1 -0
  90. package/dist/server/ServerManager.js +376 -0
  91. package/dist/server/ServerManager.js.map +1 -0
  92. package/dist/sqlite-manager.js +145 -0
  93. package/dist/start-new-server.d.ts +3 -0
  94. package/dist/start-new-server.d.ts.map +1 -0
  95. package/dist/start-new-server.js +10 -0
  96. package/dist/start-new-server.js.map +1 -0
  97. package/dist/test-app.d.ts +2 -0
  98. package/dist/test-app.d.ts.map +1 -0
  99. package/dist/test-app.js +119 -0
  100. package/dist/test-app.js.map +1 -0
  101. package/dist/test-new-architecture.d.ts +3 -0
  102. package/dist/test-new-architecture.d.ts.map +1 -0
  103. package/dist/test-new-architecture.js +72 -0
  104. package/dist/test-new-architecture.js.map +1 -0
  105. package/dist/transport/base-transport.d.ts +21 -0
  106. package/dist/transport/base-transport.d.ts.map +1 -0
  107. package/dist/transport/base-transport.js +16 -0
  108. package/dist/transport/base-transport.js.map +1 -0
  109. package/dist/transport/index.d.ts +10 -0
  110. package/dist/transport/index.d.ts.map +1 -0
  111. package/dist/transport/index.js +12 -0
  112. package/dist/transport/index.js.map +1 -0
  113. package/dist/transport/sse-transport.d.ts +13 -0
  114. package/dist/transport/sse-transport.d.ts.map +1 -0
  115. package/dist/transport/sse-transport.js +106 -0
  116. package/dist/transport/sse-transport.js.map +1 -0
  117. package/dist/transport/stdio-transport.d.ts +8 -0
  118. package/dist/transport/stdio-transport.d.ts.map +1 -0
  119. package/dist/transport/stdio-transport.js +53 -0
  120. package/dist/transport/stdio-transport.js.map +1 -0
  121. package/dist/transport/streamable-http-transport.d.ts +15 -0
  122. package/dist/transport/streamable-http-transport.d.ts.map +1 -0
  123. package/dist/transport/streamable-http-transport.js +151 -0
  124. package/dist/transport/streamable-http-transport.js.map +1 -0
  125. package/dist/types/index.d.ts +64 -0
  126. package/dist/types/index.d.ts.map +1 -0
  127. package/dist/types/index.js +3 -0
  128. package/dist/types/index.js.map +1 -0
  129. package/dist/web/client/MCPClient.js +348 -0
  130. package/dist/web/client/MCPTestRunner.js +317 -0
  131. package/dist/web/database/json-manager.js +124 -0
  132. package/dist/web/database/sqlite-manager.js +146 -0
  133. package/dist/web/dynamic-mcp-executor.js +443 -0
  134. package/dist/web/generators/MCPServerGenerator-new.js +284 -0
  135. package/dist/web/generators/MCPServerGenerator.js +566 -0
  136. package/dist/web/integrated-mcp-server-new.js +394 -0
  137. package/dist/web/parsers/CsvParser.js +144 -0
  138. package/dist/web/parsers/DatabaseParser.js +637 -0
  139. package/dist/web/parsers/ExcelParser.js +180 -0
  140. package/dist/web/parsers/index.js +152 -0
  141. package/dist/web/server.d.ts +3 -0
  142. package/dist/web/server.d.ts.map +1 -0
  143. package/dist/web/server.js +790 -0
  144. package/dist/web/server.js.map +1 -0
  145. package/dist/web/types/index.js +2 -0
  146. package/dist/web/web/server.js +860 -0
  147. package/package.json +68 -0
  148. package/quickmcp-direct-stdio.js +328 -0
  149. package/src/web/public/app.js +1795 -0
  150. package/src/web/public/database-tables.html +711 -0
  151. package/src/web/public/how-to-use.html +571 -0
  152. package/src/web/public/how-to-use.js +255 -0
  153. package/src/web/public/images/1-claude-quickmcp-stdio.png +0 -0
  154. package/src/web/public/images/2-claude-tools.png +0 -0
  155. package/src/web/public/images/3-claude-developer-settings.png +0 -0
  156. package/src/web/public/images/4-claude-config.png +0 -0
  157. package/src/web/public/images/5-claude-config-edit.png +0 -0
  158. package/src/web/public/index.html +626 -0
  159. package/src/web/public/manage-servers.html +198 -0
  160. package/src/web/public/modern-styles.css +946 -0
  161. package/src/web/public/shared-styles.css +2091 -0
  162. package/src/web/public/shared.js +93 -0
  163. package/src/web/public/test-servers.html +302 -0
@@ -0,0 +1,98 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.CsvParser = void 0;
37
+ const fs = __importStar(require("fs"));
38
+ const csv = __importStar(require("csv-parser"));
39
+ const path = __importStar(require("path"));
40
+ class CsvParser {
41
+ async parse(filePath) {
42
+ return new Promise((resolve, reject) => {
43
+ const rows = [];
44
+ let headers = [];
45
+ fs.createReadStream(filePath)
46
+ .pipe(csv.default())
47
+ .on('headers', (headerList) => {
48
+ headers = headerList;
49
+ })
50
+ .on('data', (data) => {
51
+ rows.push(Object.values(data));
52
+ })
53
+ .on('end', () => {
54
+ const dataTypes = this.inferDataTypes(rows, headers);
55
+ const fileName = path.basename(filePath, path.extname(filePath));
56
+ resolve({
57
+ tableName: fileName,
58
+ headers,
59
+ rows,
60
+ metadata: {
61
+ rowCount: rows.length,
62
+ columnCount: headers.length,
63
+ dataTypes
64
+ }
65
+ });
66
+ })
67
+ .on('error', reject);
68
+ });
69
+ }
70
+ inferDataTypes(rows, headers) {
71
+ const dataTypes = {};
72
+ headers.forEach((header, index) => {
73
+ const sample = rows.slice(0, 100).map(row => row[index]);
74
+ dataTypes[header] = this.inferColumnType(sample);
75
+ });
76
+ return dataTypes;
77
+ }
78
+ inferColumnType(values) {
79
+ const nonNullValues = values.filter(v => v !== null && v !== undefined && v !== '');
80
+ if (nonNullValues.length === 0)
81
+ return 'string';
82
+ const isNumeric = nonNullValues.every(v => !isNaN(Number(v)));
83
+ const isInteger = isNumeric && nonNullValues.every(v => Number.isInteger(Number(v)));
84
+ const isBoolean = nonNullValues.every(v => v === 'true' || v === 'false' || v === '1' || v === '0');
85
+ const isDate = nonNullValues.every(v => !isNaN(Date.parse(v)));
86
+ if (isBoolean)
87
+ return 'boolean';
88
+ if (isInteger)
89
+ return 'integer';
90
+ if (isNumeric)
91
+ return 'number';
92
+ if (isDate)
93
+ return 'date';
94
+ return 'string';
95
+ }
96
+ }
97
+ exports.CsvParser = CsvParser;
98
+ //# sourceMappingURL=CsvParser.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CsvParser.js","sourceRoot":"","sources":["../../src/parsers/CsvParser.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,18 @@
1
+ import { DatabaseConnection, ParsedData } from '../types';
2
+ export declare class DatabaseParser {
3
+ parse(connection: DatabaseConnection, tableName?: string): Promise<ParsedData[]>;
4
+ getTables(connection: DatabaseConnection): Promise<string[]>;
5
+ private parseMySql;
6
+ private parsePostgreSql;
7
+ private parseSqlite;
8
+ private getMySqlTables;
9
+ private getPostgreSqlTables;
10
+ private getSqliteTables;
11
+ private mapMySqlType;
12
+ private mapPostgreSqlType;
13
+ private mapSqliteType;
14
+ private parseMsSql;
15
+ private getMsSqlTables;
16
+ private mapMsSqlType;
17
+ }
18
+ //# sourceMappingURL=DatabaseParser.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DatabaseParser.d.ts","sourceRoot":"","sources":["../../src/parsers/DatabaseParser.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,kBAAkB,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAE1D,qBAAa,cAAc;IACnB,KAAK,CAAC,UAAU,EAAE,kBAAkB,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC;IAehF,SAAS,CAAC,UAAU,EAAE,kBAAkB,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;YAepD,UAAU;YA8CV,eAAe;YAgDf,WAAW;YAwDX,cAAc;YAiBd,mBAAmB;YAqBnB,eAAe;IAmB7B,OAAO,CAAC,YAAY;IASpB,OAAO,CAAC,iBAAiB;IASzB,OAAO,CAAC,aAAa;YASP,UAAU;YAwDV,cAAc;IA2B5B,OAAO,CAAC,YAAY;CASrB"}
@@ -0,0 +1,372 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ var __importDefault = (this && this.__importDefault) || function (mod) {
36
+ return (mod && mod.__esModule) ? mod : { "default": mod };
37
+ };
38
+ Object.defineProperty(exports, "__esModule", { value: true });
39
+ exports.DatabaseParser = void 0;
40
+ const promise_1 = __importDefault(require("mysql2/promise"));
41
+ const pg_1 = require("pg");
42
+ const sqlite3_1 = __importDefault(require("sqlite3"));
43
+ const sql = __importStar(require("mssql"));
44
+ class DatabaseParser {
45
+ async parse(connection, tableName) {
46
+ switch (connection.type) {
47
+ case 'mysql':
48
+ return this.parseMySql(connection, tableName);
49
+ case 'postgresql':
50
+ return this.parsePostgreSql(connection, tableName);
51
+ case 'sqlite':
52
+ return this.parseSqlite(connection, tableName);
53
+ case 'mssql':
54
+ return this.parseMsSql(connection, tableName);
55
+ default:
56
+ throw new Error(`Unsupported database type: ${connection.type}`);
57
+ }
58
+ }
59
+ async getTables(connection) {
60
+ switch (connection.type) {
61
+ case 'mysql':
62
+ return this.getMySqlTables(connection);
63
+ case 'postgresql':
64
+ return this.getPostgreSqlTables(connection);
65
+ case 'sqlite':
66
+ return this.getSqliteTables(connection);
67
+ case 'mssql':
68
+ return this.getMsSqlTables(connection);
69
+ default:
70
+ throw new Error(`Unsupported database type: ${connection.type}`);
71
+ }
72
+ }
73
+ async parseMySql(connection, tableName) {
74
+ const conn = await promise_1.default.createConnection({
75
+ host: connection.host,
76
+ port: connection.port,
77
+ user: connection.username,
78
+ password: connection.password,
79
+ database: connection.database
80
+ });
81
+ try {
82
+ const tables = tableName ? [tableName] : await this.getMySqlTables(connection);
83
+ const results = [];
84
+ for (const table of tables) {
85
+ const [rows] = await conn.execute(`SELECT * FROM \`${table}\` LIMIT 1000`);
86
+ const [columns] = await conn.execute(`SELECT COLUMN_NAME, DATA_TYPE FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA = ? AND TABLE_NAME = ?`, [connection.database, table]);
87
+ const headers = columns.map(col => col.COLUMN_NAME);
88
+ const dataTypes = {};
89
+ columns.forEach((col) => {
90
+ dataTypes[col.COLUMN_NAME] = this.mapMySqlType(col.DATA_TYPE);
91
+ });
92
+ const rowsArray = rows.map((row) => headers.map((header) => row[header]));
93
+ results.push({
94
+ tableName: table,
95
+ headers,
96
+ rows: rowsArray,
97
+ metadata: {
98
+ rowCount: rowsArray.length,
99
+ columnCount: headers.length,
100
+ dataTypes
101
+ }
102
+ });
103
+ }
104
+ return results;
105
+ }
106
+ finally {
107
+ await conn.end();
108
+ }
109
+ }
110
+ async parsePostgreSql(connection, tableName) {
111
+ const client = new pg_1.Client({
112
+ host: connection.host,
113
+ port: connection.port,
114
+ user: connection.username,
115
+ password: connection.password,
116
+ database: connection.database
117
+ });
118
+ await client.connect();
119
+ try {
120
+ const tables = tableName ? [tableName] : await this.getPostgreSqlTables(connection);
121
+ const results = [];
122
+ for (const table of tables) {
123
+ const dataResult = await client.query(`SELECT * FROM "${table}" LIMIT 1000`);
124
+ const columnsResult = await client.query(`SELECT column_name, data_type FROM information_schema.columns WHERE table_name = $1`, [table]);
125
+ const headers = columnsResult.rows.map(col => col.column_name);
126
+ const dataTypes = {};
127
+ columnsResult.rows.forEach(col => {
128
+ dataTypes[col.column_name] = this.mapPostgreSqlType(col.data_type);
129
+ });
130
+ const rowsArray = dataResult.rows.map(row => headers.map(header => row[header]));
131
+ results.push({
132
+ tableName: table,
133
+ headers,
134
+ rows: rowsArray,
135
+ metadata: {
136
+ rowCount: rowsArray.length,
137
+ columnCount: headers.length,
138
+ dataTypes
139
+ }
140
+ });
141
+ }
142
+ return results;
143
+ }
144
+ finally {
145
+ await client.end();
146
+ }
147
+ }
148
+ async parseSqlite(connection, tableName) {
149
+ return new Promise((resolve, reject) => {
150
+ const db = new sqlite3_1.default.Database(connection.database);
151
+ db.serialize(async () => {
152
+ try {
153
+ const tables = tableName ? [tableName] : await this.getSqliteTables(connection);
154
+ const results = [];
155
+ for (const table of tables) {
156
+ const rows = await new Promise((res, rej) => {
157
+ db.all(`SELECT * FROM "${table}" LIMIT 1000`, (err, rows) => {
158
+ if (err)
159
+ rej(err);
160
+ else
161
+ res(rows);
162
+ });
163
+ });
164
+ const columns = await new Promise((res, rej) => {
165
+ db.all(`PRAGMA table_info("${table}")`, (err, cols) => {
166
+ if (err)
167
+ rej(err);
168
+ else
169
+ res(cols);
170
+ });
171
+ });
172
+ if (rows.length > 0) {
173
+ const headers = Object.keys(rows[0]);
174
+ const dataTypes = {};
175
+ columns.forEach((col) => {
176
+ dataTypes[col.name] = this.mapSqliteType(col.type);
177
+ });
178
+ const rowsArray = rows.map(row => headers.map(header => row[header]));
179
+ results.push({
180
+ tableName: table,
181
+ headers,
182
+ rows: rowsArray,
183
+ metadata: {
184
+ rowCount: rowsArray.length,
185
+ columnCount: headers.length,
186
+ dataTypes
187
+ }
188
+ });
189
+ }
190
+ }
191
+ resolve(results);
192
+ }
193
+ catch (error) {
194
+ reject(error);
195
+ }
196
+ });
197
+ db.close();
198
+ });
199
+ }
200
+ async getMySqlTables(connection) {
201
+ const conn = await promise_1.default.createConnection({
202
+ host: connection.host,
203
+ port: connection.port,
204
+ user: connection.username,
205
+ password: connection.password,
206
+ database: connection.database
207
+ });
208
+ try {
209
+ const [rows] = await conn.execute('SHOW TABLES');
210
+ return rows.map(row => Object.values(row)[0]);
211
+ }
212
+ finally {
213
+ await conn.end();
214
+ }
215
+ }
216
+ async getPostgreSqlTables(connection) {
217
+ const client = new pg_1.Client({
218
+ host: connection.host,
219
+ port: connection.port,
220
+ user: connection.username,
221
+ password: connection.password,
222
+ database: connection.database
223
+ });
224
+ await client.connect();
225
+ try {
226
+ const result = await client.query("SELECT tablename FROM pg_catalog.pg_tables WHERE schemaname = 'public'");
227
+ return result.rows.map(row => row.tablename);
228
+ }
229
+ finally {
230
+ await client.end();
231
+ }
232
+ }
233
+ async getSqliteTables(connection) {
234
+ return new Promise((resolve, reject) => {
235
+ const db = new sqlite3_1.default.Database(connection.database);
236
+ db.all("SELECT name FROM sqlite_master WHERE type='table' AND name NOT LIKE 'sqlite_%'", (err, rows) => {
237
+ if (err) {
238
+ reject(err);
239
+ }
240
+ else {
241
+ resolve(rows.map(row => row.name));
242
+ }
243
+ });
244
+ db.close();
245
+ });
246
+ }
247
+ mapMySqlType(type) {
248
+ const lowerType = type.toLowerCase();
249
+ if (lowerType.includes('int') || lowerType.includes('bigint'))
250
+ return 'integer';
251
+ if (lowerType.includes('decimal') || lowerType.includes('float') || lowerType.includes('double'))
252
+ return 'number';
253
+ if (lowerType.includes('bool') || lowerType.includes('tinyint(1)'))
254
+ return 'boolean';
255
+ if (lowerType.includes('date') || lowerType.includes('time'))
256
+ return 'date';
257
+ return 'string';
258
+ }
259
+ mapPostgreSqlType(type) {
260
+ const lowerType = type.toLowerCase();
261
+ if (lowerType.includes('int') || lowerType === 'bigint' || lowerType === 'smallint')
262
+ return 'integer';
263
+ if (lowerType.includes('numeric') || lowerType.includes('decimal') || lowerType === 'real' || lowerType === 'double precision')
264
+ return 'number';
265
+ if (lowerType === 'boolean')
266
+ return 'boolean';
267
+ if (lowerType.includes('timestamp') || lowerType === 'date' || lowerType === 'time')
268
+ return 'date';
269
+ return 'string';
270
+ }
271
+ mapSqliteType(type) {
272
+ const lowerType = type.toLowerCase();
273
+ if (lowerType === 'integer')
274
+ return 'integer';
275
+ if (lowerType === 'real' || lowerType === 'numeric')
276
+ return 'number';
277
+ if (lowerType === 'boolean')
278
+ return 'boolean';
279
+ if (lowerType === 'date' || lowerType === 'datetime')
280
+ return 'date';
281
+ return 'string';
282
+ }
283
+ async parseMsSql(connection, tableName) {
284
+ const config = {
285
+ server: connection.host,
286
+ port: connection.port || 1433,
287
+ user: connection.username,
288
+ password: connection.password,
289
+ database: connection.database,
290
+ options: {
291
+ encrypt: true,
292
+ trustServerCertificate: true
293
+ }
294
+ };
295
+ try {
296
+ await sql.connect(config);
297
+ const tables = tableName ? [tableName] : await this.getMsSqlTables(connection);
298
+ const results = [];
299
+ for (const table of tables) {
300
+ const request = new sql.Request();
301
+ const dataResult = await request.query(`SELECT TOP 1000 * FROM [${table}]`);
302
+ const columnsResult = await request.query(`
303
+ SELECT COLUMN_NAME, DATA_TYPE
304
+ FROM INFORMATION_SCHEMA.COLUMNS
305
+ WHERE TABLE_NAME = '${table}'
306
+ `);
307
+ const headers = columnsResult.recordset.map((col) => col.COLUMN_NAME);
308
+ const dataTypes = {};
309
+ columnsResult.recordset.forEach((col) => {
310
+ dataTypes[col.COLUMN_NAME] = this.mapMsSqlType(col.DATA_TYPE);
311
+ });
312
+ const rowsArray = dataResult.recordset.map((row) => headers.map((header) => row[header]));
313
+ results.push({
314
+ tableName: table,
315
+ headers,
316
+ rows: rowsArray,
317
+ metadata: {
318
+ rowCount: rowsArray.length,
319
+ columnCount: headers.length,
320
+ dataTypes
321
+ }
322
+ });
323
+ }
324
+ return results;
325
+ }
326
+ catch (error) {
327
+ throw error;
328
+ }
329
+ }
330
+ async getMsSqlTables(connection) {
331
+ const config = {
332
+ server: connection.host,
333
+ port: connection.port || 1433,
334
+ user: connection.username,
335
+ password: connection.password,
336
+ database: connection.database,
337
+ options: {
338
+ encrypt: true,
339
+ trustServerCertificate: true
340
+ }
341
+ };
342
+ try {
343
+ await sql.connect(config);
344
+ const request = new sql.Request();
345
+ const result = await request.query(`
346
+ SELECT TABLE_NAME
347
+ FROM INFORMATION_SCHEMA.TABLES
348
+ WHERE TABLE_TYPE = 'BASE TABLE'
349
+ `);
350
+ return result.recordset.map((row) => row.TABLE_NAME);
351
+ }
352
+ catch (error) {
353
+ throw error;
354
+ }
355
+ }
356
+ mapMsSqlType(type) {
357
+ const lowerType = type.toLowerCase();
358
+ if (lowerType.includes('int') || lowerType === 'bigint' || lowerType === 'smallint' || lowerType === 'tinyint')
359
+ return 'integer';
360
+ if (lowerType.includes('decimal') || lowerType.includes('numeric') || lowerType === 'float' || lowerType === 'real' || lowerType === 'money')
361
+ return 'number';
362
+ if (lowerType === 'bit')
363
+ return 'boolean';
364
+ if (lowerType.includes('date') || lowerType.includes('time'))
365
+ return 'date';
366
+ if (lowerType === 'uniqueidentifier')
367
+ return 'string';
368
+ return 'string';
369
+ }
370
+ }
371
+ exports.DatabaseParser = DatabaseParser;
372
+ //# sourceMappingURL=DatabaseParser.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DatabaseParser.js","sourceRoot":"","sources":["../../src/parsers/DatabaseParser.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ import { ParsedData } from '../types';
2
+ export declare class ExcelParser {
3
+ parse(filePath: string, sheetName?: string): Promise<ParsedData>;
4
+ getSheetNames(filePath: string): Promise<string[]>;
5
+ private inferDataTypes;
6
+ private inferColumnType;
7
+ }
8
+ //# sourceMappingURL=ExcelParser.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ExcelParser.d.ts","sourceRoot":"","sources":["../../src/parsers/ExcelParser.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAEtC,qBAAa,WAAW;IAChB,KAAK,CAAC,QAAQ,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC;IA6ChE,aAAa,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;IAMxD,OAAO,CAAC,cAAc;IAWtB,OAAO,CAAC,eAAe;CA0BxB"}
@@ -0,0 +1,119 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.ExcelParser = void 0;
37
+ const ExcelJS = __importStar(require("exceljs"));
38
+ class ExcelParser {
39
+ async parse(filePath, sheetName) {
40
+ const workbook = new ExcelJS.Workbook();
41
+ await workbook.xlsx.readFile(filePath);
42
+ const worksheet = sheetName
43
+ ? workbook.getWorksheet(sheetName)
44
+ : workbook.getWorksheet(1); // First worksheet
45
+ if (!worksheet) {
46
+ throw new Error(`Sheet "${sheetName || 'first sheet'}" not found`);
47
+ }
48
+ const rows = [];
49
+ let headers = [];
50
+ worksheet.eachRow((row, rowNumber) => {
51
+ const values = row.values;
52
+ // Remove the first element (it's undefined in ExcelJS)
53
+ const rowData = values.slice(1);
54
+ if (rowNumber === 1) {
55
+ headers = rowData.map(cell => cell?.toString() || '');
56
+ }
57
+ else {
58
+ rows.push(rowData);
59
+ }
60
+ });
61
+ if (headers.length === 0) {
62
+ throw new Error('No data found in the sheet');
63
+ }
64
+ const dataTypes = this.inferDataTypes(rows, headers);
65
+ return {
66
+ tableName: worksheet.name,
67
+ headers,
68
+ rows,
69
+ metadata: {
70
+ rowCount: rows.length,
71
+ columnCount: headers.length,
72
+ dataTypes
73
+ }
74
+ };
75
+ }
76
+ async getSheetNames(filePath) {
77
+ const workbook = new ExcelJS.Workbook();
78
+ await workbook.xlsx.readFile(filePath);
79
+ return workbook.worksheets.map(sheet => sheet.name);
80
+ }
81
+ inferDataTypes(rows, headers) {
82
+ const dataTypes = {};
83
+ headers.forEach((header, index) => {
84
+ const sample = rows.slice(0, 100).map(row => row[index]);
85
+ dataTypes[header] = this.inferColumnType(sample);
86
+ });
87
+ return dataTypes;
88
+ }
89
+ inferColumnType(values) {
90
+ const nonNullValues = values.filter(v => v !== null && v !== undefined && v !== '');
91
+ if (nonNullValues.length === 0)
92
+ return 'string';
93
+ const isNumeric = nonNullValues.every(v => typeof v === 'number' || !isNaN(Number(v)));
94
+ const isInteger = isNumeric && nonNullValues.every(v => {
95
+ const num = typeof v === 'number' ? v : Number(v);
96
+ return Number.isInteger(num);
97
+ });
98
+ const isBoolean = nonNullValues.every(v => v === true || v === false || v === 'true' || v === 'false' || v === 1 || v === 0);
99
+ const isDate = nonNullValues.every(v => {
100
+ if (v instanceof Date)
101
+ return true;
102
+ // ExcelJS automatically converts Excel dates to Date objects
103
+ if (typeof v === 'string')
104
+ return !isNaN(Date.parse(v));
105
+ return false;
106
+ });
107
+ if (isBoolean)
108
+ return 'boolean';
109
+ if (isInteger)
110
+ return 'integer';
111
+ if (isNumeric)
112
+ return 'number';
113
+ if (isDate)
114
+ return 'date';
115
+ return 'string';
116
+ }
117
+ }
118
+ exports.ExcelParser = ExcelParser;
119
+ //# sourceMappingURL=ExcelParser.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ExcelParser.js","sourceRoot":"","sources":["../../src/parsers/ExcelParser.ts"],"names":[],"mappings":"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"}