fdb2 1.0.6 → 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 (193) hide show
  1. package/.vscodeignore +45 -0
  2. package/README.md +24 -85
  3. package/dist/package.json +115 -0
  4. package/dist/pnpm-lock.yaml +7447 -0
  5. package/dist/public/explorer.css +244 -111
  6. package/dist/public/explorer.js +523 -278
  7. package/dist/scripts/preinstall.js +112 -0
  8. package/dist/server/index.d.ts.map +1 -1
  9. package/dist/server/index.js +4 -9
  10. package/dist/server/index.js.map +1 -1
  11. package/dist/server/index.ts +5 -10
  12. package/dist/server/service/connection.service.d.ts.map +1 -1
  13. package/dist/server/service/connection.service.js +1 -0
  14. package/dist/server/service/connection.service.js.map +1 -1
  15. package/dist/server/service/connection.service.ts +1 -0
  16. package/dist/server/service/database/base.service.d.ts +4 -0
  17. package/dist/server/service/database/base.service.d.ts.map +1 -1
  18. package/dist/server/service/database/base.service.js +3 -3
  19. package/dist/server/service/database/base.service.js.map +1 -1
  20. package/dist/server/service/database/base.service.ts +8 -3
  21. package/dist/server/service/database/cockroachdb.service.d.ts +5 -0
  22. package/dist/server/service/database/cockroachdb.service.d.ts.map +1 -1
  23. package/dist/server/service/database/cockroachdb.service.js +112 -0
  24. package/dist/server/service/database/cockroachdb.service.js.map +1 -1
  25. package/dist/server/service/database/cockroachdb.service.ts +123 -0
  26. package/dist/server/service/database/database.service.d.ts +4 -0
  27. package/dist/server/service/database/database.service.d.ts.map +1 -1
  28. package/dist/server/service/database/database.service.js +8 -0
  29. package/dist/server/service/database/database.service.js.map +1 -1
  30. package/dist/server/service/database/database.service.ts +9 -0
  31. package/dist/server/service/database/mongodb.service.d.ts +6 -0
  32. package/dist/server/service/database/mongodb.service.d.ts.map +1 -1
  33. package/dist/server/service/database/mongodb.service.js +8 -0
  34. package/dist/server/service/database/mongodb.service.js.map +1 -1
  35. package/dist/server/service/database/mongodb.service.ts +9 -0
  36. package/dist/server/service/database/mssql.service.d.ts +4 -0
  37. package/dist/server/service/database/mssql.service.d.ts.map +1 -1
  38. package/dist/server/service/database/mssql.service.js +105 -0
  39. package/dist/server/service/database/mssql.service.js.map +1 -1
  40. package/dist/server/service/database/mssql.service.ts +118 -0
  41. package/dist/server/service/database/mysql.service.d.ts +4 -0
  42. package/dist/server/service/database/mysql.service.d.ts.map +1 -1
  43. package/dist/server/service/database/mysql.service.js +116 -0
  44. package/dist/server/service/database/mysql.service.js.map +1 -1
  45. package/dist/server/service/database/mysql.service.ts +130 -0
  46. package/dist/server/service/database/oracle.service.d.ts +4 -0
  47. package/dist/server/service/database/oracle.service.d.ts.map +1 -1
  48. package/dist/server/service/database/oracle.service.js +114 -0
  49. package/dist/server/service/database/oracle.service.js.map +1 -1
  50. package/dist/server/service/database/oracle.service.ts +128 -0
  51. package/dist/server/service/database/postgres.service.d.ts +4 -0
  52. package/dist/server/service/database/postgres.service.d.ts.map +1 -1
  53. package/dist/server/service/database/postgres.service.js +120 -0
  54. package/dist/server/service/database/postgres.service.js.map +1 -1
  55. package/dist/server/service/database/postgres.service.ts +131 -0
  56. package/dist/server/service/database/sap.service.d.ts +4 -0
  57. package/dist/server/service/database/sap.service.d.ts.map +1 -1
  58. package/dist/server/service/database/sap.service.js +107 -0
  59. package/dist/server/service/database/sap.service.js.map +1 -1
  60. package/dist/server/service/database/sap.service.ts +120 -0
  61. package/dist/server/service/database/sqlite.service.d.ts +5 -0
  62. package/dist/server/service/database/sqlite.service.d.ts.map +1 -1
  63. package/dist/server/service/database/sqlite.service.js +133 -0
  64. package/dist/server/service/database/sqlite.service.js.map +1 -1
  65. package/dist/server/service/database/sqlite.service.ts +150 -0
  66. package/fdb2.server.pid +1 -0
  67. package/package.json +18 -9
  68. package/packages/vscode/.vscodeignore +44 -0
  69. package/packages/vscode/README.md +62 -0
  70. package/packages/vscode/out/database-services/base.service.js +236 -0
  71. package/packages/vscode/out/database-services/base.service.js.map +1 -0
  72. package/packages/vscode/out/database-services/cockroachdb.service.js +634 -0
  73. package/packages/vscode/out/database-services/cockroachdb.service.js.map +1 -0
  74. package/packages/vscode/out/database-services/connection.service.js +346 -0
  75. package/packages/vscode/out/database-services/connection.service.js.map +1 -0
  76. package/packages/vscode/out/database-services/database.service.js +571 -0
  77. package/packages/vscode/out/database-services/database.service.js.map +1 -0
  78. package/packages/vscode/out/database-services/index.js +18 -0
  79. package/packages/vscode/out/database-services/index.js.map +1 -0
  80. package/packages/vscode/out/database-services/model/connection.entity.js +11 -0
  81. package/packages/vscode/out/database-services/model/connection.entity.js.map +1 -0
  82. package/packages/vscode/out/database-services/model/database.entity.js +35 -0
  83. package/packages/vscode/out/database-services/model/database.entity.js.map +1 -0
  84. package/packages/vscode/out/database-services/mongodb.service.js +458 -0
  85. package/packages/vscode/out/database-services/mongodb.service.js.map +1 -0
  86. package/packages/vscode/out/database-services/mssql.service.js +694 -0
  87. package/packages/vscode/out/database-services/mssql.service.js.map +1 -0
  88. package/packages/vscode/out/database-services/mysql.service.js +735 -0
  89. package/packages/vscode/out/database-services/mysql.service.js.map +1 -0
  90. package/packages/vscode/out/database-services/oracle.service.js +787 -0
  91. package/packages/vscode/out/database-services/oracle.service.js.map +1 -0
  92. package/packages/vscode/out/database-services/postgres.service.js +696 -0
  93. package/packages/vscode/out/database-services/postgres.service.js.map +1 -0
  94. package/packages/vscode/out/database-services/sap.service.js +695 -0
  95. package/packages/vscode/out/database-services/sap.service.js.map +1 -0
  96. package/packages/vscode/out/database-services/sqlite.service.js +532 -0
  97. package/packages/vscode/out/database-services/sqlite.service.js.map +1 -0
  98. package/packages/vscode/out/extension.js +93 -0
  99. package/packages/vscode/out/extension.js.map +1 -0
  100. package/packages/vscode/out/provider/DatabaseTreeProvider.js +159 -0
  101. package/packages/vscode/out/provider/DatabaseTreeProvider.js.map +1 -0
  102. package/packages/vscode/out/provider/WebViewProvider.js +259 -0
  103. package/packages/vscode/out/provider/WebViewProvider.js.map +1 -0
  104. package/packages/vscode/out/service/ConnectionManager.js +105 -0
  105. package/packages/vscode/out/service/ConnectionManager.js.map +1 -0
  106. package/packages/vscode/out/service/DatabaseServiceBridge.js +395 -0
  107. package/packages/vscode/out/service/DatabaseServiceBridge.js.map +1 -0
  108. package/packages/vscode/out/typings/connection.js +3 -0
  109. package/packages/vscode/out/typings/connection.js.map +1 -0
  110. package/packages/vscode/package.json +142 -0
  111. package/packages/vscode/resources/icon.svg +5 -0
  112. package/packages/vscode/resources/webview/_plugin-vue_export-helper.js +6529 -0
  113. package/packages/vscode/resources/webview/_plugin-vue_export-helper.js.map +1 -0
  114. package/packages/vscode/resources/webview/connection.css +69 -0
  115. package/packages/vscode/resources/webview/connection.js +228 -0
  116. package/packages/vscode/resources/webview/connection.js.map +1 -0
  117. package/packages/vscode/resources/webview/database.css +259 -0
  118. package/packages/vscode/resources/webview/database.js +275 -0
  119. package/packages/vscode/resources/webview/database.js.map +1 -0
  120. package/packages/vscode/resources/webview/favicon.ico +0 -0
  121. package/packages/vscode/resources/webview/index.html +9 -0
  122. package/packages/vscode/resources/webview/modules/header.tpl +14 -0
  123. package/packages/vscode/resources/webview/modules/initial_state.tpl +55 -0
  124. package/packages/vscode/resources/webview/query.css +162 -0
  125. package/packages/vscode/resources/webview/query.js +198 -0
  126. package/packages/vscode/resources/webview/query.js.map +1 -0
  127. package/packages/vscode/src/database-services/base.service.js.map +1 -0
  128. package/packages/vscode/src/database-services/base.service.ts +363 -0
  129. package/packages/vscode/src/database-services/cockroachdb.service.js.map +1 -0
  130. package/packages/vscode/src/database-services/cockroachdb.service.ts +659 -0
  131. package/packages/vscode/src/database-services/connection.service.ts +341 -0
  132. package/packages/vscode/src/database-services/database.service.ts +630 -0
  133. package/packages/vscode/src/database-services/index.ts +7 -0
  134. package/packages/vscode/src/database-services/model/connection.entity.js +11 -0
  135. package/packages/vscode/src/database-services/model/connection.entity.js.map +1 -0
  136. package/packages/vscode/src/database-services/model/connection.entity.ts +66 -0
  137. package/packages/vscode/src/database-services/model/database.entity.js +35 -0
  138. package/packages/vscode/src/database-services/model/database.entity.js.map +1 -0
  139. package/packages/vscode/src/database-services/model/database.entity.ts +246 -0
  140. package/packages/vscode/src/database-services/mongodb.service.js.map +1 -0
  141. package/packages/vscode/src/database-services/mongodb.service.ts +454 -0
  142. package/packages/vscode/src/database-services/mssql.service.js.map +1 -0
  143. package/packages/vscode/src/database-services/mssql.service.ts +723 -0
  144. package/packages/vscode/src/database-services/mysql.service.js.map +1 -0
  145. package/packages/vscode/src/database-services/mysql.service.ts +761 -0
  146. package/packages/vscode/src/database-services/oracle.service.js.map +1 -0
  147. package/packages/vscode/src/database-services/oracle.service.ts +832 -0
  148. package/packages/vscode/src/database-services/postgres.service.js.map +1 -0
  149. package/packages/vscode/src/database-services/postgres.service.ts +741 -0
  150. package/packages/vscode/src/database-services/sap.service.js.map +1 -0
  151. package/packages/vscode/src/database-services/sap.service.ts +713 -0
  152. package/packages/vscode/src/database-services/sqlite.service.js.map +1 -0
  153. package/packages/vscode/src/database-services/sqlite.service.ts +559 -0
  154. package/packages/vscode/src/extension.ts +76 -0
  155. package/packages/vscode/src/provider/DatabaseTreeProvider.ts +167 -0
  156. package/packages/vscode/src/provider/WebViewProvider.ts +277 -0
  157. package/packages/vscode/src/service/DatabaseServiceBridge.ts +414 -0
  158. package/packages/vscode/src/typings/connection.ts +90 -0
  159. package/packages/vscode/tsconfig.json +21 -0
  160. package/public/fdb2.png +0 -0
  161. package/server/backups/db_ai_breakout_2026-03-11T08-38-48-677Z.sql +0 -0
  162. package/server/index.ts +5 -10
  163. package/server/model/connection.entity.js +11 -0
  164. package/server/model/connection.entity.js.map +1 -0
  165. package/server/model/database.entity.js +35 -0
  166. package/server/model/database.entity.js.map +1 -0
  167. package/server/service/connection.service.ts +1 -0
  168. package/server/service/database/base.service.ts +8 -3
  169. package/server/service/database/cockroachdb.service.ts +123 -0
  170. package/server/service/database/database.service.ts +9 -0
  171. package/server/service/database/mongodb.service.ts +9 -0
  172. package/server/service/database/mssql.service.ts +118 -0
  173. package/server/service/database/mysql.service.ts +130 -0
  174. package/server/service/database/oracle.service.ts +128 -0
  175. package/server/service/database/postgres.service.ts +131 -0
  176. package/server/service/database/sap.service.ts +120 -0
  177. package/server/service/database/sqlite.service.ts +150 -0
  178. package/server/tsconfig.json +20 -0
  179. package/src/components/connection-editor/index.vue +0 -1
  180. package/src/platform/database/components/db-tools.vue +414 -174
  181. package/src/platform/database/components/table-detail.vue +3 -2
  182. package/src/platform/database/components/table-editor.vue +245 -18
  183. package/src/platform/vscode/bridge.ts +121 -0
  184. package/src/platform/vscode/components/ConnectionPanel.vue +272 -0
  185. package/src/platform/vscode/components/DatabasePanel.vue +532 -0
  186. package/src/platform/vscode/components/QueryPanel.vue +371 -0
  187. package/src/platform/vscode/entry/connection.ts +13 -0
  188. package/src/platform/vscode/entry/database.ts +13 -0
  189. package/src/platform/vscode/entry/query.ts +13 -0
  190. package/src/platform/vscode/index.ts +5 -0
  191. package/src/service/database.ts +2 -6
  192. package/vite.config.ts +46 -6
  193. package/vite.config.vscode.ts +47 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"database.entity.js","sourceRoot":"","sources":["../../../src/database-services/model/database.entity.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;AAEH,MAAa,cAAc;CAmC1B;AAnCD,wCAmCC;AAED;;GAEG;AACH,MAAa,WAAW;CAsEvB;AAtED,kCAsEC;AAED;;GAEG;AACH,MAAa,YAAY;CA4DxB;AA5DD,oCA4DC;AAED;;GAEG;AACH,MAAa,WAAW;CAyBvB;AAzBD,kCAyBC;AAED;;GAEG;AACH,MAAa,gBAAgB;CA8B5B;AA9BD,4CA8BC"}
@@ -0,0 +1,458 @@
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.MongoDBService = void 0;
37
+ const base_service_1 = require("./base.service");
38
+ const fs = __importStar(require("fs"));
39
+ const path = __importStar(require("path"));
40
+ /**
41
+ * MongoDB数据库服务实现
42
+ * MongoDB 是一个 NoSQL 文档数据库,与关系型数据库有很大不同
43
+ */
44
+ class MongoDBService extends base_service_1.BaseDatabaseService {
45
+ getDatabaseType() {
46
+ return 'mongodb';
47
+ }
48
+ /**
49
+ * 获取MongoDB数据库列表
50
+ */
51
+ async getDatabases(dataSource) {
52
+ try {
53
+ const result = await dataSource.query(`db.adminCommand({ listDatabases: 1 })`);
54
+ return result.databases.map((db) => db.name).filter((name) => name !== 'admin' && name !== 'local' && name !== 'config');
55
+ }
56
+ catch (error) {
57
+ console.error('获取MongoDB数据库列表失败:', error);
58
+ return [];
59
+ }
60
+ }
61
+ /**
62
+ * 获取MongoDB集合列表(相当于关系型数据库的表)
63
+ */
64
+ async getTables(dataSource, database) {
65
+ try {
66
+ const result = await dataSource.query(`db.getCollectionNames()`);
67
+ return result.map((collectionName) => ({
68
+ name: collectionName,
69
+ type: 'collection',
70
+ rowCount: undefined,
71
+ dataSize: undefined,
72
+ indexSize: undefined
73
+ }));
74
+ }
75
+ catch (error) {
76
+ console.error('获取MongoDB集合列表失败:', error);
77
+ return [];
78
+ }
79
+ }
80
+ /**
81
+ * 获取MongoDB集合的字段信息(文档结构)
82
+ */
83
+ async getColumns(dataSource, database, table) {
84
+ try {
85
+ const result = await dataSource.query(`db.${table}.findOne()`);
86
+ if (!result) {
87
+ return [];
88
+ }
89
+ const fields = Object.keys(result);
90
+ return fields.map(field => ({
91
+ name: field,
92
+ type: this.inferType(result[field]),
93
+ nullable: true,
94
+ defaultValue: undefined,
95
+ isPrimary: field === '_id',
96
+ isAutoIncrement: field === '_id'
97
+ }));
98
+ }
99
+ catch (error) {
100
+ console.error('获取MongoDB集合字段信息失败:', error);
101
+ return [];
102
+ }
103
+ }
104
+ /**
105
+ * 推断字段类型
106
+ */
107
+ inferType(value) {
108
+ if (value === null || value === undefined) {
109
+ return 'null';
110
+ }
111
+ const type = typeof value;
112
+ if (type === 'string') {
113
+ return 'string';
114
+ }
115
+ else if (type === 'number') {
116
+ return Number.isInteger(value) ? 'int' : 'double';
117
+ }
118
+ else if (type === 'boolean') {
119
+ return 'boolean';
120
+ }
121
+ else if (type === 'object') {
122
+ if (Array.isArray(value)) {
123
+ return 'array';
124
+ }
125
+ else if (value instanceof Date) {
126
+ return 'date';
127
+ }
128
+ else if (value instanceof Buffer) {
129
+ return 'binData';
130
+ }
131
+ else if (value instanceof ObjectId) {
132
+ return 'objectId';
133
+ }
134
+ else {
135
+ return 'object';
136
+ }
137
+ }
138
+ return 'unknown';
139
+ }
140
+ /**
141
+ * 获取MongoDB索引信息
142
+ */
143
+ async getIndexes(dataSource, database, table) {
144
+ try {
145
+ const result = await dataSource.query(`db.${table}.getIndexes()`);
146
+ return result.map((index) => ({
147
+ name: index.name,
148
+ type: index.unique ? 'UNIQUE' : 'INDEX',
149
+ columns: Object.keys(index.key),
150
+ unique: index.unique || false
151
+ }));
152
+ }
153
+ catch (error) {
154
+ console.error('获取MongoDB索引信息失败:', error);
155
+ return [];
156
+ }
157
+ }
158
+ /**
159
+ * MongoDB不支持外键
160
+ */
161
+ async getForeignKeys(dataSource, database, table) {
162
+ return [];
163
+ }
164
+ /**
165
+ * 获取MongoDB数据库大小
166
+ */
167
+ async getDatabaseSize(dataSource, database) {
168
+ try {
169
+ const result = await dataSource.query(`db.stats({ scale: 1 })`);
170
+ return result.dataSize || 0;
171
+ }
172
+ catch (error) {
173
+ console.error('获取MongoDB数据库大小失败:', error);
174
+ return 0;
175
+ }
176
+ }
177
+ /**
178
+ * MongoDB不支持视图
179
+ */
180
+ async getViews(dataSource, database) {
181
+ return [];
182
+ }
183
+ /**
184
+ * MongoDB不支持视图
185
+ */
186
+ async getViewDefinition(dataSource, database, viewName) {
187
+ throw new Error('MongoDB不支持视图');
188
+ }
189
+ /**
190
+ * MongoDB不支持存储过程
191
+ */
192
+ async getProcedures(dataSource, database) {
193
+ return [];
194
+ }
195
+ /**
196
+ * MongoDB不支持存储过程
197
+ */
198
+ async getProcedureDefinition(dataSource, database, procedureName) {
199
+ throw new Error('MongoDB不支持存储过程');
200
+ }
201
+ /**
202
+ * 创建MongoDB数据库
203
+ */
204
+ async createDatabase(dataSource, databaseName, options) {
205
+ try {
206
+ await dataSource.query(`db.getSiblingDB('${databaseName}').createCollection('temp')`);
207
+ await dataSource.query(`db.getSiblingDB('${databaseName}').temp.drop()`);
208
+ }
209
+ catch (error) {
210
+ console.error('创建MongoDB数据库失败:', error);
211
+ throw new Error(`创建数据库失败: ${error.message}`);
212
+ }
213
+ }
214
+ /**
215
+ * 删除MongoDB数据库
216
+ */
217
+ async dropDatabase(dataSource, databaseName) {
218
+ try {
219
+ await dataSource.query(`db.getSiblingDB('${databaseName}').dropDatabase()`);
220
+ }
221
+ catch (error) {
222
+ console.error('删除MongoDB数据库失败:', error);
223
+ throw new Error(`删除数据库失败: ${error.message}`);
224
+ }
225
+ }
226
+ /**
227
+ * 导出数据库架构
228
+ */
229
+ async exportSchema(dataSource, databaseName) {
230
+ const collections = await this.getTables(dataSource, databaseName);
231
+ let schemaSql = `-- MongoDB数据库架构导出 - ${databaseName}\n`;
232
+ schemaSql += `-- 导出时间: ${new Date().toISOString()}\n\n`;
233
+ for (const collection of collections) {
234
+ const columns = await this.getColumns(dataSource, databaseName, collection.name);
235
+ const indexes = await this.getIndexes(dataSource, databaseName, collection.name);
236
+ schemaSql += `// 集合: ${collection.name}\n`;
237
+ schemaSql += `// 字段:\n`;
238
+ columns.forEach(column => {
239
+ schemaSql += `// ${column.name}: ${column.type}${column.isPrimary ? ' (主键)' : ''}\n`;
240
+ });
241
+ schemaSql += `\n`;
242
+ if (indexes.length > 0) {
243
+ schemaSql += `// 索引:\n`;
244
+ indexes.forEach(index => {
245
+ schemaSql += `// ${index.name}: ${index.type} (${index.columns.join(', ')})\n`;
246
+ });
247
+ schemaSql += `\n`;
248
+ }
249
+ }
250
+ return schemaSql;
251
+ }
252
+ /**
253
+ * 查看MongoDB日志
254
+ */
255
+ async viewLogs(dataSource, database, limit = 100) {
256
+ try {
257
+ const result = await dataSource.query(`db.getSiblingDB('admin').adminCommand({ getLog: 'global' })`);
258
+ return result.log || [];
259
+ }
260
+ catch (error) {
261
+ console.error('获取MongoDB日志失败:', error);
262
+ return [{ message: 'MongoDB日志功能需要管理员权限,请检查数据库配置' }];
263
+ }
264
+ }
265
+ /**
266
+ * 备份MongoDB数据库
267
+ */
268
+ async backupDatabase(dataSource, databaseName, options) {
269
+ try {
270
+ const backupPath = options?.path || path.join(__dirname, '..', '..', '..', 'data', 'backups');
271
+ if (!fs.existsSync(backupPath)) {
272
+ fs.mkdirSync(backupPath, { recursive: true });
273
+ }
274
+ const timestamp = new Date().toISOString().replace(/[:.]/g, '-');
275
+ const backupFile = path.join(backupPath, `${databaseName}_${timestamp}.json`);
276
+ const collections = await this.getTables(dataSource, databaseName);
277
+ const backupData = {
278
+ database: databaseName,
279
+ exportedAt: new Date().toISOString(),
280
+ collections: {}
281
+ };
282
+ for (const collection of collections) {
283
+ const result = await dataSource.query(`db.${collection.name}.find().toArray()`);
284
+ backupData.collections[collection.name] = result;
285
+ }
286
+ fs.writeFileSync(backupFile, JSON.stringify(backupData, null, 2), 'utf8');
287
+ return `备份成功:${backupFile}`;
288
+ }
289
+ catch (error) {
290
+ console.error('MongoDB备份失败:', error);
291
+ throw new Error(`备份失败: ${error.message}`);
292
+ }
293
+ }
294
+ /**
295
+ * 恢复MongoDB数据库
296
+ */
297
+ async restoreDatabase(dataSource, databaseName, filePath, options) {
298
+ try {
299
+ const backupData = JSON.parse(fs.readFileSync(filePath, 'utf8'));
300
+ for (const collectionName in backupData.collections) {
301
+ const documents = backupData.collections[collectionName];
302
+ if (documents.length > 0) {
303
+ await dataSource.query(`db.${collectionName}.insertMany(${JSON.stringify(documents)})`);
304
+ }
305
+ }
306
+ }
307
+ catch (error) {
308
+ console.error('MongoDB恢复失败:', error);
309
+ throw new Error(`恢复失败: ${error.message}`);
310
+ }
311
+ }
312
+ /**
313
+ * 导出表数据到 SQL 文件(MongoDB不支持SQL)
314
+ */
315
+ async exportTableDataToSQL(dataSource, databaseName, tableName, options) {
316
+ throw new Error('MongoDB不支持导出为SQL格式,请使用JSON格式');
317
+ }
318
+ /**
319
+ * 导出表数据到 CSV 文件
320
+ */
321
+ async exportTableDataToCSV(dataSource, databaseName, tableName, options) {
322
+ try {
323
+ const exportPath = options?.path || path.join(__dirname, '..', '..', '..', 'data', 'exports');
324
+ if (!fs.existsSync(exportPath)) {
325
+ fs.mkdirSync(exportPath, { recursive: true });
326
+ }
327
+ const timestamp = new Date().toISOString().replace(/[:.]/g, '-');
328
+ const exportFile = path.join(exportPath, `${tableName}_data_${timestamp}.csv`);
329
+ const result = await dataSource.query(`db.${tableName}.find().toArray()`);
330
+ if (result.length === 0) {
331
+ fs.writeFileSync(exportFile, '', 'utf8');
332
+ return exportFile;
333
+ }
334
+ const columns = await this.getColumns(dataSource, databaseName, tableName);
335
+ const columnNames = columns.map(column => column.name);
336
+ const bom = Buffer.from([0xEF, 0xBB, 0xBF]);
337
+ fs.writeFileSync(exportFile, bom);
338
+ fs.appendFileSync(exportFile, columnNames.map(name => `"${name}"`).join(',') + '\n', 'utf8');
339
+ let csv = '';
340
+ result.forEach((doc) => {
341
+ const values = columnNames.map(column => {
342
+ const value = doc[column];
343
+ if (value === null || value === undefined) {
344
+ return '';
345
+ }
346
+ else if (typeof value === 'string') {
347
+ return `"${value.replace(/"/g, '""')}"`;
348
+ }
349
+ else if (value instanceof Date) {
350
+ return `"${value.toISOString()}"`;
351
+ }
352
+ else if (typeof value === 'object' && value !== null) {
353
+ try {
354
+ return `"${JSON.stringify(value).replace(/"/g, '""')}"`;
355
+ }
356
+ catch {
357
+ return `"${String(value).replace(/"/g, '""')}"`;
358
+ }
359
+ }
360
+ else {
361
+ return String(value);
362
+ }
363
+ });
364
+ csv += values.join(',') + '\n';
365
+ });
366
+ fs.appendFileSync(exportFile, csv, 'utf8');
367
+ return exportFile;
368
+ }
369
+ catch (error) {
370
+ console.error('MongoDB导出表数据到CSV失败:', error);
371
+ throw new Error(`导出表数据到CSV失败: ${error.message}`);
372
+ }
373
+ }
374
+ /**
375
+ * 导出表数据到 JSON 文件
376
+ */
377
+ async exportTableDataToJSON(dataSource, databaseName, tableName, options) {
378
+ try {
379
+ const exportPath = options?.path || path.join(__dirname, '..', '..', '..', 'data', 'exports');
380
+ if (!fs.existsSync(exportPath)) {
381
+ fs.mkdirSync(exportPath, { recursive: true });
382
+ }
383
+ const timestamp = new Date().toISOString().replace(/[:.]/g, '-');
384
+ const exportFile = path.join(exportPath, `${tableName}_data_${timestamp}.json`);
385
+ const result = await dataSource.query(`db.${tableName}.find().toArray()`);
386
+ fs.writeFileSync(exportFile, JSON.stringify(result, null, 2), 'utf8');
387
+ return exportFile;
388
+ }
389
+ catch (error) {
390
+ console.error('MongoDB导出表数据到JSON失败:', error);
391
+ throw new Error(`导出表数据到JSON失败: ${error.message}`);
392
+ }
393
+ }
394
+ /**
395
+ * 导出表数据到 Excel 文件
396
+ */
397
+ async exportTableDataToExcel(dataSource, databaseName, tableName, options) {
398
+ try {
399
+ const exportPath = options?.path || path.join(__dirname, '..', '..', '..', 'data', 'exports');
400
+ if (!fs.existsSync(exportPath)) {
401
+ fs.mkdirSync(exportPath, { recursive: true });
402
+ }
403
+ const timestamp = new Date().toISOString().replace(/[:.]/g, '-');
404
+ const exportFile = path.join(exportPath, `${tableName}_data_${timestamp}.xlsx`);
405
+ const result = await dataSource.query(`db.${tableName}.find().toArray()`);
406
+ const columns = await this.getColumns(dataSource, databaseName, tableName);
407
+ const columnNames = columns.map(column => column.name);
408
+ const ExcelJS = require('exceljs');
409
+ const workbook = new ExcelJS.Workbook();
410
+ const worksheet = workbook.addWorksheet(tableName);
411
+ worksheet.columns = columnNames.map(name => ({
412
+ header: name,
413
+ key: name
414
+ }));
415
+ const flatData = result.map(doc => {
416
+ const flatDoc = {};
417
+ columnNames.forEach(column => {
418
+ const value = doc[column];
419
+ if (value !== null && value !== undefined && typeof value === 'object' && !Array.isArray(value) && !(value instanceof Date)) {
420
+ flatDoc[column] = JSON.stringify(value);
421
+ }
422
+ else {
423
+ flatDoc[column] = value;
424
+ }
425
+ });
426
+ return flatDoc;
427
+ });
428
+ worksheet.addRows(flatData);
429
+ await workbook.xlsx.writeFile(exportFile);
430
+ return exportFile;
431
+ }
432
+ catch (error) {
433
+ console.error('MongoDB导出表数据到Excel失败:', error);
434
+ throw new Error(`导出表数据到Excel失败: ${error.message}`);
435
+ }
436
+ }
437
+ /**
438
+ * MongoDB使用反引号作为标识符
439
+ */
440
+ quoteIdentifier(identifier) {
441
+ return `\`${identifier}\``;
442
+ }
443
+ }
444
+ exports.MongoDBService = MongoDBService;
445
+ /**
446
+ * ObjectId 类型定义
447
+ */
448
+ class ObjectId {
449
+ constructor(id) {
450
+ if (id) {
451
+ this.id = id;
452
+ }
453
+ }
454
+ toString() {
455
+ return this.id || '';
456
+ }
457
+ }
458
+ //# sourceMappingURL=mongodb.service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mongodb.service.js","sourceRoot":"","sources":["../../src/database-services/mongodb.service.ts"],"names":[],"mappings":"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"}