@fett/sql-translator 0.0.1-beta

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 (199) hide show
  1. package/README.md +191 -0
  2. package/lib/client/client.d.ts +59 -0
  3. package/lib/client/client.d.ts.map +1 -0
  4. package/lib/client/client.js +201 -0
  5. package/lib/client/client.js.map +1 -0
  6. package/lib/client/index.d.ts +15 -0
  7. package/lib/client/index.d.ts.map +1 -0
  8. package/lib/client/index.js +15 -0
  9. package/lib/client/index.js.map +1 -0
  10. package/lib/client/manager.d.ts +27 -0
  11. package/lib/client/manager.d.ts.map +1 -0
  12. package/lib/client/manager.js +73 -0
  13. package/lib/client/manager.js.map +1 -0
  14. package/lib/client/registry.d.ts +31 -0
  15. package/lib/client/registry.d.ts.map +1 -0
  16. package/lib/client/registry.js +128 -0
  17. package/lib/client/registry.js.map +1 -0
  18. package/lib/core/cache.d.ts +28 -0
  19. package/lib/core/cache.d.ts.map +1 -0
  20. package/lib/core/cache.js +58 -0
  21. package/lib/core/cache.js.map +1 -0
  22. package/lib/core/config.d.ts +16 -0
  23. package/lib/core/config.d.ts.map +1 -0
  24. package/lib/core/config.js +47 -0
  25. package/lib/core/config.js.map +1 -0
  26. package/lib/core/field-mapper/mysql.d.ts +42 -0
  27. package/lib/core/field-mapper/mysql.d.ts.map +1 -0
  28. package/lib/core/field-mapper/mysql.js +129 -0
  29. package/lib/core/field-mapper/mysql.js.map +1 -0
  30. package/lib/core/field-mapper/postgresql.d.ts +25 -0
  31. package/lib/core/field-mapper/postgresql.d.ts.map +1 -0
  32. package/lib/core/field-mapper/postgresql.js +121 -0
  33. package/lib/core/field-mapper/postgresql.js.map +1 -0
  34. package/lib/core/sql/normalize.d.ts +10 -0
  35. package/lib/core/sql/normalize.d.ts.map +1 -0
  36. package/lib/core/sql/normalize.js +121 -0
  37. package/lib/core/sql/normalize.js.map +1 -0
  38. package/lib/core/sql/pagination.d.ts +22 -0
  39. package/lib/core/sql/pagination.d.ts.map +1 -0
  40. package/lib/core/sql/pagination.js +61 -0
  41. package/lib/core/sql/pagination.js.map +1 -0
  42. package/lib/core/sql/statement.d.ts +28 -0
  43. package/lib/core/sql/statement.d.ts.map +1 -0
  44. package/lib/core/sql/statement.js +155 -0
  45. package/lib/core/sql/statement.js.map +1 -0
  46. package/lib/core/sql/table-mapper.d.ts +24 -0
  47. package/lib/core/sql/table-mapper.d.ts.map +1 -0
  48. package/lib/core/sql/table-mapper.js +113 -0
  49. package/lib/core/sql/table-mapper.js.map +1 -0
  50. package/lib/core/task-queue.d.ts +31 -0
  51. package/lib/core/task-queue.d.ts.map +1 -0
  52. package/lib/core/task-queue.js +185 -0
  53. package/lib/core/task-queue.js.map +1 -0
  54. package/lib/core/worker/bun-worker.d.ts +21 -0
  55. package/lib/core/worker/bun-worker.d.ts.map +1 -0
  56. package/lib/core/worker/bun-worker.js +93 -0
  57. package/lib/core/worker/bun-worker.js.map +1 -0
  58. package/lib/core/worker/index.d.ts +16 -0
  59. package/lib/core/worker/index.d.ts.map +1 -0
  60. package/lib/core/worker/index.js +16 -0
  61. package/lib/core/worker/index.js.map +1 -0
  62. package/lib/core/worker/node-worker.d.ts +19 -0
  63. package/lib/core/worker/node-worker.d.ts.map +1 -0
  64. package/lib/core/worker/node-worker.js +94 -0
  65. package/lib/core/worker/node-worker.js.map +1 -0
  66. package/lib/core/worker/task-runner-bun.d.ts +2 -0
  67. package/lib/core/worker/task-runner-bun.d.ts.map +1 -0
  68. package/lib/core/worker/task-runner-bun.js +18 -0
  69. package/lib/core/worker/task-runner-bun.js.map +1 -0
  70. package/lib/core/worker/task-runner.d.ts +2 -0
  71. package/lib/core/worker/task-runner.d.ts.map +1 -0
  72. package/lib/core/worker/task-runner.js +21 -0
  73. package/lib/core/worker/task-runner.js.map +1 -0
  74. package/lib/driver/index.d.ts +3 -0
  75. package/lib/driver/index.d.ts.map +1 -0
  76. package/lib/driver/index.js +16 -0
  77. package/lib/driver/index.js.map +1 -0
  78. package/lib/driver/interface.d.ts +39 -0
  79. package/lib/driver/interface.d.ts.map +1 -0
  80. package/lib/driver/interface.js +2 -0
  81. package/lib/driver/interface.js.map +1 -0
  82. package/lib/driver/mongodb/dml-translator.d.ts +21 -0
  83. package/lib/driver/mongodb/dml-translator.d.ts.map +1 -0
  84. package/lib/driver/mongodb/dml-translator.js +127 -0
  85. package/lib/driver/mongodb/dml-translator.js.map +1 -0
  86. package/lib/driver/mongodb/index.d.ts +27 -0
  87. package/lib/driver/mongodb/index.d.ts.map +1 -0
  88. package/lib/driver/mongodb/index.js +263 -0
  89. package/lib/driver/mongodb/index.js.map +1 -0
  90. package/lib/driver/mongodb/pool.d.ts +31 -0
  91. package/lib/driver/mongodb/pool.d.ts.map +1 -0
  92. package/lib/driver/mongodb/pool.js +96 -0
  93. package/lib/driver/mongodb/pool.js.map +1 -0
  94. package/lib/driver/mongodb/schema.d.ts +37 -0
  95. package/lib/driver/mongodb/schema.d.ts.map +1 -0
  96. package/lib/driver/mongodb/schema.js +238 -0
  97. package/lib/driver/mongodb/schema.js.map +1 -0
  98. package/lib/driver/mongodb/sql-translator.d.ts +19 -0
  99. package/lib/driver/mongodb/sql-translator.d.ts.map +1 -0
  100. package/lib/driver/mongodb/sql-translator.js +30 -0
  101. package/lib/driver/mongodb/sql-translator.js.map +1 -0
  102. package/lib/driver/mysql/index.d.ts +41 -0
  103. package/lib/driver/mysql/index.d.ts.map +1 -0
  104. package/lib/driver/mysql/index.js +338 -0
  105. package/lib/driver/mysql/index.js.map +1 -0
  106. package/lib/driver/mysql/pool.d.ts +46 -0
  107. package/lib/driver/mysql/pool.d.ts.map +1 -0
  108. package/lib/driver/mysql/pool.js +141 -0
  109. package/lib/driver/mysql/pool.js.map +1 -0
  110. package/lib/driver/mysql/version.d.ts +27 -0
  111. package/lib/driver/mysql/version.d.ts.map +1 -0
  112. package/lib/driver/mysql/version.js +77 -0
  113. package/lib/driver/mysql/version.js.map +1 -0
  114. package/lib/driver/postgresql/index.d.ts +34 -0
  115. package/lib/driver/postgresql/index.d.ts.map +1 -0
  116. package/lib/driver/postgresql/index.js +383 -0
  117. package/lib/driver/postgresql/index.js.map +1 -0
  118. package/lib/driver/postgresql/pool.d.ts +33 -0
  119. package/lib/driver/postgresql/pool.d.ts.map +1 -0
  120. package/lib/driver/postgresql/pool.js +104 -0
  121. package/lib/driver/postgresql/pool.js.map +1 -0
  122. package/lib/driver/registry.d.ts +16 -0
  123. package/lib/driver/registry.d.ts.map +1 -0
  124. package/lib/driver/registry.js +27 -0
  125. package/lib/driver/registry.js.map +1 -0
  126. package/lib/driver/sqlite/backend.d.ts +19 -0
  127. package/lib/driver/sqlite/backend.d.ts.map +1 -0
  128. package/lib/driver/sqlite/backend.js +5 -0
  129. package/lib/driver/sqlite/backend.js.map +1 -0
  130. package/lib/driver/sqlite/bun.d.ts +10 -0
  131. package/lib/driver/sqlite/bun.d.ts.map +1 -0
  132. package/lib/driver/sqlite/bun.js +36 -0
  133. package/lib/driver/sqlite/bun.js.map +1 -0
  134. package/lib/driver/sqlite/index.d.ts +49 -0
  135. package/lib/driver/sqlite/index.d.ts.map +1 -0
  136. package/lib/driver/sqlite/index.js +421 -0
  137. package/lib/driver/sqlite/index.js.map +1 -0
  138. package/lib/driver/sqlite/node.d.ts +10 -0
  139. package/lib/driver/sqlite/node.d.ts.map +1 -0
  140. package/lib/driver/sqlite/node.js +37 -0
  141. package/lib/driver/sqlite/node.js.map +1 -0
  142. package/lib/driver/sqlite/store.d.ts +13 -0
  143. package/lib/driver/sqlite/store.d.ts.map +1 -0
  144. package/lib/driver/sqlite/store.js +57 -0
  145. package/lib/driver/sqlite/store.js.map +1 -0
  146. package/lib/errors.d.ts +18 -0
  147. package/lib/errors.d.ts.map +1 -0
  148. package/lib/errors.js +24 -0
  149. package/lib/errors.js.map +1 -0
  150. package/lib/facade/engine.d.ts +29 -0
  151. package/lib/facade/engine.d.ts.map +1 -0
  152. package/lib/facade/engine.js +107 -0
  153. package/lib/facade/engine.js.map +1 -0
  154. package/lib/index.d.ts +41 -0
  155. package/lib/index.d.ts.map +1 -0
  156. package/lib/index.js +40 -0
  157. package/lib/index.js.map +1 -0
  158. package/lib/optional/static-source.d.ts +36 -0
  159. package/lib/optional/static-source.d.ts.map +1 -0
  160. package/lib/optional/static-source.js +141 -0
  161. package/lib/optional/static-source.js.map +1 -0
  162. package/lib/runtime.d.ts +12 -0
  163. package/lib/runtime.d.ts.map +1 -0
  164. package/lib/runtime.js +26 -0
  165. package/lib/runtime.js.map +1 -0
  166. package/lib/types/config.d.ts +146 -0
  167. package/lib/types/config.d.ts.map +1 -0
  168. package/lib/types/config.js +5 -0
  169. package/lib/types/config.js.map +1 -0
  170. package/lib/types/index.d.ts +7 -0
  171. package/lib/types/index.d.ts.map +1 -0
  172. package/lib/types/index.js +7 -0
  173. package/lib/types/index.js.map +1 -0
  174. package/lib/types/manager.d.ts +37 -0
  175. package/lib/types/manager.d.ts.map +1 -0
  176. package/lib/types/manager.js +5 -0
  177. package/lib/types/manager.js.map +1 -0
  178. package/lib/types/queue.d.ts +45 -0
  179. package/lib/types/queue.d.ts.map +1 -0
  180. package/lib/types/queue.js +5 -0
  181. package/lib/types/queue.js.map +1 -0
  182. package/lib/types/result.d.ts +61 -0
  183. package/lib/types/result.d.ts.map +1 -0
  184. package/lib/types/result.js +16 -0
  185. package/lib/types/result.js.map +1 -0
  186. package/lib/types/schema.d.ts +51 -0
  187. package/lib/types/schema.d.ts.map +1 -0
  188. package/lib/types/schema.js +5 -0
  189. package/lib/types/schema.js.map +1 -0
  190. package/lib/types/task.d.ts +48 -0
  191. package/lib/types/task.d.ts.map +1 -0
  192. package/lib/types/task.js +136 -0
  193. package/lib/types/task.js.map +1 -0
  194. package/lib/types/transaction.d.ts +13 -0
  195. package/lib/types/transaction.d.ts.map +1 -0
  196. package/lib/types/transaction.js +2 -0
  197. package/lib/types/transaction.js.map +1 -0
  198. package/package.json +93 -0
  199. package/patches/bson@7.3.2.patch +105 -0
@@ -0,0 +1,29 @@
1
+ import { type PoolRegistry } from '../client/registry.js';
2
+ import type { ConnectionConfig, SchemaOptions } from '../types/config.js';
3
+ import { type ExecResult, type Field, type RunSqlRequest, type TestResult } from '../types/result.js';
4
+ import type { TableSchema } from '../types/schema.js';
5
+ import type { IntrospectTask } from '../types/task.js';
6
+ export declare class SqlEngine {
7
+ private registry;
8
+ constructor(registry?: PoolRegistry);
9
+ testConnection(config: ConnectionConfig): Promise<TestResult>;
10
+ /** 执行 SQL:SELECT → QueryResult,DML → WriteResult(池按 config 指纹共享)
11
+ * 返回结果统一携带 duration(执行耗时 ms) */
12
+ runSql(config: ConnectionConfig, request: RunSqlRequest): Promise<ExecResult>;
13
+ getTableList(config: ConnectionConfig): Promise<string[]>;
14
+ getTableDDL(config: ConnectionConfig, table: string): Promise<string>;
15
+ getColumns(config: ConnectionConfig, table: string): Promise<Field[]>;
16
+ getRowsCount(config: ConnectionConfig, table: string, whereClause?: string): Promise<number>;
17
+ getPreviewRows(config: ConnectionConfig, table: string, offset?: number, limit?: number, whereClause?: string): Promise<any[]>;
18
+ /** 单表结构 JSON 检出 */
19
+ getTableSchema(config: ConnectionConfig, table: string, opts?: SchemaOptions): Promise<TableSchema>;
20
+ /** 全库批量结构导出(长任务);任务完成后自动释放引用 */
21
+ getAllTableSchemas(config: ConnectionConfig, opts?: SchemaOptions): IntrospectTask<TableSchema[]>;
22
+ /** 事务:fn 内所有查询在同一事务内执行 */
23
+ withTransaction<T>(config: ConnectionConfig, fn: (tx: import('../types/transaction.js').TransactionHandle) => Promise<T>): Promise<T>;
24
+ exportSchemaAsJson(config: ConnectionConfig, opts?: SchemaOptions): Promise<string>;
25
+ /** 全局清理 */
26
+ destroyAll(): Promise<void>;
27
+ private withHandle;
28
+ }
29
+ //# sourceMappingURL=engine.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"engine.d.ts","sourceRoot":"","sources":["../../src/facade/engine.ts"],"names":[],"mappings":"AAQA,OAAO,EAAmB,KAAK,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAC3E,OAAO,KAAK,EAAE,gBAAgB,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAC1E,OAAO,EAAiB,KAAK,UAAU,EAAE,KAAK,KAAK,EAAE,KAAK,aAAa,EAAE,KAAK,UAAU,EAAE,MAAM,oBAAoB,CAAC;AACrH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAGvD,qBAAa,SAAS;IACpB,OAAO,CAAC,QAAQ,CAAe;gBAEnB,QAAQ,CAAC,EAAE,YAAY;IAI7B,cAAc,CAAC,MAAM,EAAE,gBAAgB,GAAG,OAAO,CAAC,UAAU,CAAC;IAInE;oCACgC;IAC1B,MAAM,CAAC,MAAM,EAAE,gBAAgB,EAAE,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,UAAU,CAAC;IAe7E,YAAY,CAAC,MAAM,EAAE,gBAAgB,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;IAIzD,WAAW,CAAC,MAAM,EAAE,gBAAgB,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IASrE,UAAU,CAAC,MAAM,EAAE,gBAAgB,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,KAAK,EAAE,CAAC;IAIrE,YAAY,CAAC,MAAM,EAAE,gBAAgB,EAAE,KAAK,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAM5F,cAAc,CAClB,MAAM,EAAE,gBAAgB,EACxB,KAAK,EAAE,MAAM,EACb,MAAM,SAAI,EACV,KAAK,SAAM,EACX,WAAW,CAAC,EAAE,MAAM,GACnB,OAAO,CAAC,GAAG,EAAE,CAAC;IAMjB,mBAAmB;IACb,cAAc,CAClB,MAAM,EAAE,gBAAgB,EACxB,KAAK,EAAE,MAAM,EACb,IAAI,CAAC,EAAE,aAAa,GACnB,OAAO,CAAC,WAAW,CAAC;IAMvB,gCAAgC;IAChC,kBAAkB,CAAC,MAAM,EAAE,gBAAgB,EAAE,IAAI,CAAC,EAAE,aAAa,GAAG,cAAc,CAAC,WAAW,EAAE,CAAC;IAejG,0BAA0B;IACpB,eAAe,CAAC,CAAC,EACrB,MAAM,EAAE,gBAAgB,EACxB,EAAE,EAAE,CAAC,EAAE,EAAE,OAAO,yBAAyB,EAAE,iBAAiB,KAAK,OAAO,CAAC,CAAC,CAAC,GAC1E,OAAO,CAAC,CAAC,CAAC;IAaP,kBAAkB,CAAC,MAAM,EAAE,gBAAgB,EAAE,IAAI,CAAC,EAAE,aAAa,GAAG,OAAO,CAAC,MAAM,CAAC;IAMzF,WAAW;IACL,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;YAInB,UAAU;CAYzB"}
@@ -0,0 +1,107 @@
1
+ /**
2
+ * SqlEngine:无状态统一入口(多数据源场景,方法级传入 config)
3
+ * 现有 runSql(configuration, {...}) 调用方式同构
4
+ */
5
+ import { SqlEngineError } from '../errors.js';
6
+ import { configKey } from '../core/config.js';
7
+ import { getDriver } from '../driver/registry.js';
8
+ import { defaultRegistry } from '../client/registry.js';
9
+ import { roundDuration } from '../types/result.js';
10
+ import { wrapTask } from '../types/task.js';
11
+ export class SqlEngine {
12
+ registry;
13
+ constructor(registry) {
14
+ this.registry = registry ?? defaultRegistry;
15
+ }
16
+ async testConnection(config) {
17
+ return getDriver(config.type).testConnection(config);
18
+ }
19
+ /** 执行 SQL:SELECT → QueryResult,DML → WriteResult(池按 config 指纹共享)
20
+ * 返回结果统一携带 duration(执行耗时 ms) */
21
+ async runSql(config, request) {
22
+ const start = performance.now();
23
+ const driver = getDriver(config.type);
24
+ const handle = await this.registry.getPool(config);
25
+ try {
26
+ const result = await driver.runSql(handle, request);
27
+ if (result && typeof result === 'object') {
28
+ result.duration = roundDuration(performance.now() - start);
29
+ }
30
+ return result;
31
+ }
32
+ finally {
33
+ this.registry.release(configKey(config));
34
+ }
35
+ }
36
+ async getTableList(config) {
37
+ return this.withHandle(config, (driver, handle) => driver.getTableList(handle));
38
+ }
39
+ async getTableDDL(config, table) {
40
+ return this.withHandle(config, (driver, handle) => {
41
+ if (!driver.getTableDDL) {
42
+ throw new SqlEngineError('QUERY_FAILED', `方言 ${driver.dialect} 不支持 getTableDDL`);
43
+ }
44
+ return driver.getTableDDL(handle, table);
45
+ });
46
+ }
47
+ async getColumns(config, table) {
48
+ return this.withHandle(config, (driver, handle) => driver.getColumns(handle, table));
49
+ }
50
+ async getRowsCount(config, table, whereClause) {
51
+ return this.withHandle(config, (driver, handle) => driver.getRowsCount(handle, table, whereClause));
52
+ }
53
+ async getPreviewRows(config, table, offset = 0, limit = 100, whereClause) {
54
+ return this.withHandle(config, (driver, handle) => driver.getPreviewRows(handle, table, offset, limit, whereClause));
55
+ }
56
+ /** 单表结构 JSON 检出 */
57
+ async getTableSchema(config, table, opts) {
58
+ return this.withHandle(config, (driver, handle) => driver.getTableSchema(handle, table, opts));
59
+ }
60
+ /** 全库批量结构导出(长任务);任务完成后自动释放引用 */
61
+ getAllTableSchemas(config, opts) {
62
+ const driver = getDriver(config.type);
63
+ if (!driver.getAllTableSchemas) {
64
+ throw new SqlEngineError('QUERY_FAILED', `方言 ${driver.dialect} 不支持 getAllTableSchemas`);
65
+ }
66
+ const fingerprint = configKey(config);
67
+ return wrapTask(() => this.registry.getPool(config).then((handle) => {
68
+ const task = driver.getAllTableSchemas(handle, opts);
69
+ task.promise.finally(() => this.registry.release(fingerprint));
70
+ return task;
71
+ }));
72
+ }
73
+ /** 事务:fn 内所有查询在同一事务内执行 */
74
+ async withTransaction(config, fn) {
75
+ const driver = getDriver(config.type);
76
+ if (!driver.withTransaction) {
77
+ throw new SqlEngineError('QUERY_FAILED', `方言 ${driver.dialect} 不支持事务`);
78
+ }
79
+ const handle = await this.registry.getPool(config);
80
+ try {
81
+ return await driver.withTransaction(handle, fn);
82
+ }
83
+ finally {
84
+ this.registry.release(configKey(config));
85
+ }
86
+ }
87
+ async exportSchemaAsJson(config, opts) {
88
+ const task = this.getAllTableSchemas(config, opts);
89
+ const schemas = await task.promise;
90
+ return JSON.stringify(schemas, null, 2);
91
+ }
92
+ /** 全局清理 */
93
+ async destroyAll() {
94
+ await this.registry.destroyAll();
95
+ }
96
+ async withHandle(config, fn) {
97
+ const driver = getDriver(config.type);
98
+ const handle = await this.registry.getPool(config);
99
+ try {
100
+ return await fn(driver, handle);
101
+ }
102
+ finally {
103
+ this.registry.release(configKey(config));
104
+ }
105
+ }
106
+ }
107
+ //# sourceMappingURL=engine.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"engine.js","sourceRoot":"","sources":["../../src/facade/engine.ts"],"names":[],"mappings":"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"}
package/lib/index.d.ts ADDED
@@ -0,0 +1,41 @@
1
+ /**
2
+ * @fett/sql-translator 公共 API 入口
3
+ *
4
+ * 三层使用方式:
5
+ * 1. createClient(config) —— 极简客户端(单/多数据源都可用)
6
+ * 2. createClientManager() —— 多数据源注册表
7
+ * 3. 函数式 API —— runSql(config, req) 等
8
+ */
9
+ import './driver/index.js';
10
+ export * from './types/index.js';
11
+ export { roundDuration } from './types/result.js';
12
+ export type { TransactionHandle } from './types/transaction.js';
13
+ export * from './errors.js';
14
+ export * from './runtime.js';
15
+ export * from './client/index.js';
16
+ export * from './facade/engine.js';
17
+ export * from './driver/index.js';
18
+ export * from './core/task-queue.js';
19
+ export * from './core/worker/index.js';
20
+ export * from './core/sql/normalize.js';
21
+ export * from './core/sql/pagination.js';
22
+ export * from './core/sql/statement.js';
23
+ export { replaceTableNamesInSql, validateTableNameReplacement, stripQuotes, extractTableNamesFromSql as extractMappedTableNames, } from './core/sql/table-mapper.js';
24
+ export * from './optional/static-source.js';
25
+ export * from './core/config.js';
26
+ export * from './core/cache.js';
27
+ import type { ConnectionConfig, SchemaOptions } from './types/config.js';
28
+ import type { ExecResult, Field, RunSqlRequest, TestResult } from './types/result.js';
29
+ import type { TableSchema } from './types/schema.js';
30
+ import type { IntrospectTask } from './types/task.js';
31
+ export declare const testConnection: (config: ConnectionConfig) => Promise<TestResult>;
32
+ export declare const runSql: (config: ConnectionConfig, req: RunSqlRequest) => Promise<ExecResult>;
33
+ export declare const getTableList: (config: ConnectionConfig) => Promise<string[]>;
34
+ export declare const getTableDDL: (config: ConnectionConfig, table: string) => Promise<string>;
35
+ export declare const getColumns: (config: ConnectionConfig, table: string) => Promise<Field[]>;
36
+ export declare const getRowsCount: (config: ConnectionConfig, table: string, whereClause?: string) => Promise<number>;
37
+ export declare const getPreviewRows: (config: ConnectionConfig, table: string, offset?: number, limit?: number, whereClause?: string) => Promise<any[]>;
38
+ export declare const getTableSchema: (config: ConnectionConfig, table: string, opts?: SchemaOptions) => Promise<TableSchema>;
39
+ export declare const getAllTableSchemas: (config: ConnectionConfig, opts?: SchemaOptions) => IntrospectTask<TableSchema[]>;
40
+ export declare const exportSchemaAsJson: (config: ConnectionConfig, opts?: SchemaOptions) => Promise<string>;
41
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,OAAO,mBAAmB,CAAC;AAE3B,cAAc,kBAAkB,CAAC;AACjC,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAClD,YAAY,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAChE,cAAc,aAAa,CAAC;AAC5B,cAAc,cAAc,CAAC;AAC7B,cAAc,mBAAmB,CAAC;AAClC,cAAc,oBAAoB,CAAC;AACnC,cAAc,mBAAmB,CAAC;AAClC,cAAc,sBAAsB,CAAC;AACrC,cAAc,wBAAwB,CAAC;AACvC,cAAc,yBAAyB,CAAC;AACxC,cAAc,0BAA0B,CAAC;AACzC,cAAc,yBAAyB,CAAC;AACxC,OAAO,EACL,sBAAsB,EACtB,4BAA4B,EAC5B,WAAW,EACX,wBAAwB,IAAI,uBAAuB,GACpD,MAAM,4BAA4B,CAAC;AACpC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,kBAAkB,CAAC;AACjC,cAAc,iBAAiB,CAAC;AAGhC,OAAO,KAAK,EAAE,gBAAgB,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AACzE,OAAO,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AACtF,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AACrD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAOtD,eAAO,MAAM,cAAc,GAAI,QAAQ,gBAAgB,KAAG,OAAO,CAAC,UAAU,CACtC,CAAC;AAEvC,eAAO,MAAM,MAAM,GAAI,QAAQ,gBAAgB,EAAE,KAAK,aAAa,KAAG,OAAO,CAAC,UAAU,CACrD,CAAC;AAEpC,eAAO,MAAM,YAAY,GAAI,QAAQ,gBAAgB,KAAG,OAAO,CAAC,MAAM,EAAE,CACpC,CAAC;AAErC,eAAO,MAAM,WAAW,GAAI,QAAQ,gBAAgB,EAAE,OAAO,MAAM,KAAG,OAAO,CAAC,MAAM,CAC1C,CAAC;AAE3C,eAAO,MAAM,UAAU,GAAI,QAAQ,gBAAgB,EAAE,OAAO,MAAM,KAAG,OAAO,CAAC,KAAK,EAAE,CAC3C,CAAC;AAE1C,eAAO,MAAM,YAAY,GACvB,QAAQ,gBAAgB,EACxB,OAAO,MAAM,EACb,cAAc,MAAM,KACnB,OAAO,CAAC,MAAM,CAA2D,CAAC;AAE7E,eAAO,MAAM,cAAc,GACzB,QAAQ,gBAAgB,EACxB,OAAO,MAAM,EACb,eAAU,EACV,cAAW,EACX,cAAc,MAAM,KACnB,OAAO,CAAC,GAAG,EAAE,CAA4E,CAAC;AAE7F,eAAO,MAAM,cAAc,GACzB,QAAQ,gBAAgB,EACxB,OAAO,MAAM,EACb,OAAO,aAAa,KACnB,OAAO,CAAC,WAAW,CAAsD,CAAC;AAE7E,eAAO,MAAM,kBAAkB,GAC7B,QAAQ,gBAAgB,EACxB,OAAO,aAAa,KACnB,cAAc,CAAC,WAAW,EAAE,CAAmD,CAAC;AAEnF,eAAO,MAAM,kBAAkB,GAAI,QAAQ,gBAAgB,EAAE,OAAO,aAAa,KAAG,OAAO,CAAC,MAAM,CAClD,CAAC"}
package/lib/index.js ADDED
@@ -0,0 +1,40 @@
1
+ /**
2
+ * @fett/sql-translator 公共 API 入口
3
+ *
4
+ * 三层使用方式:
5
+ * 1. createClient(config) —— 极简客户端(单/多数据源都可用)
6
+ * 2. createClientManager() —— 多数据源注册表
7
+ * 3. 函数式 API —— runSql(config, req) 等
8
+ */
9
+ import './driver/index.js'; // 注册内置驱动(sqlite)
10
+ export * from './types/index.js';
11
+ export { roundDuration } from './types/result.js';
12
+ export * from './errors.js';
13
+ export * from './runtime.js';
14
+ export * from './client/index.js';
15
+ export * from './facade/engine.js';
16
+ export * from './driver/index.js';
17
+ export * from './core/task-queue.js';
18
+ export * from './core/worker/index.js';
19
+ export * from './core/sql/normalize.js';
20
+ export * from './core/sql/pagination.js';
21
+ export * from './core/sql/statement.js';
22
+ export { replaceTableNamesInSql, validateTableNameReplacement, stripQuotes, extractTableNamesFromSql as extractMappedTableNames, } from './core/sql/table-mapper.js';
23
+ export * from './optional/static-source.js';
24
+ export * from './core/config.js';
25
+ export * from './core/cache.js';
26
+ import { SqlEngine } from './facade/engine.js';
27
+ /** 默认无状态 engine(函数式 API 共享全局池注册表) */
28
+ const defaultEngine = new SqlEngine();
29
+ // ==================== 函数式 API ====================
30
+ export const testConnection = (config) => defaultEngine.testConnection(config);
31
+ export const runSql = (config, req) => defaultEngine.runSql(config, req);
32
+ export const getTableList = (config) => defaultEngine.getTableList(config);
33
+ export const getTableDDL = (config, table) => defaultEngine.getTableDDL(config, table);
34
+ export const getColumns = (config, table) => defaultEngine.getColumns(config, table);
35
+ export const getRowsCount = (config, table, whereClause) => defaultEngine.getRowsCount(config, table, whereClause);
36
+ export const getPreviewRows = (config, table, offset = 0, limit = 100, whereClause) => defaultEngine.getPreviewRows(config, table, offset, limit, whereClause);
37
+ export const getTableSchema = (config, table, opts) => defaultEngine.getTableSchema(config, table, opts);
38
+ export const getAllTableSchemas = (config, opts) => defaultEngine.getAllTableSchemas(config, opts);
39
+ export const exportSchemaAsJson = (config, opts) => defaultEngine.exportSchemaAsJson(config, opts);
40
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,OAAO,mBAAmB,CAAC,CAAC,iBAAiB;AAE7C,cAAc,kBAAkB,CAAC;AACjC,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAElD,cAAc,aAAa,CAAC;AAC5B,cAAc,cAAc,CAAC;AAC7B,cAAc,mBAAmB,CAAC;AAClC,cAAc,oBAAoB,CAAC;AACnC,cAAc,mBAAmB,CAAC;AAClC,cAAc,sBAAsB,CAAC;AACrC,cAAc,wBAAwB,CAAC;AACvC,cAAc,yBAAyB,CAAC;AACxC,cAAc,0BAA0B,CAAC;AACzC,cAAc,yBAAyB,CAAC;AACxC,OAAO,EACL,sBAAsB,EACtB,4BAA4B,EAC5B,WAAW,EACX,wBAAwB,IAAI,uBAAuB,GACpD,MAAM,4BAA4B,CAAC;AACpC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,kBAAkB,CAAC;AACjC,cAAc,iBAAiB,CAAC;AAEhC,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAM/C,qCAAqC;AACrC,MAAM,aAAa,GAAG,IAAI,SAAS,EAAE,CAAC;AAEtC,qDAAqD;AAErD,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,MAAwB,EAAuB,EAAE,CAC9E,aAAa,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC;AAEvC,MAAM,CAAC,MAAM,MAAM,GAAG,CAAC,MAAwB,EAAE,GAAkB,EAAuB,EAAE,CAC1F,aAAa,CAAC,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;AAEpC,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,MAAwB,EAAqB,EAAE,CAC1E,aAAa,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;AAErC,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,MAAwB,EAAE,KAAa,EAAmB,EAAE,CACtF,aAAa,CAAC,WAAW,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;AAE3C,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,MAAwB,EAAE,KAAa,EAAoB,EAAE,CACtF,aAAa,CAAC,UAAU,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;AAE1C,MAAM,CAAC,MAAM,YAAY,GAAG,CAC1B,MAAwB,EACxB,KAAa,EACb,WAAoB,EACH,EAAE,CAAC,aAAa,CAAC,YAAY,CAAC,MAAM,EAAE,KAAK,EAAE,WAAW,CAAC,CAAC;AAE7E,MAAM,CAAC,MAAM,cAAc,GAAG,CAC5B,MAAwB,EACxB,KAAa,EACb,MAAM,GAAG,CAAC,EACV,KAAK,GAAG,GAAG,EACX,WAAoB,EACJ,EAAE,CAAC,aAAa,CAAC,cAAc,CAAC,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,WAAW,CAAC,CAAC;AAE7F,MAAM,CAAC,MAAM,cAAc,GAAG,CAC5B,MAAwB,EACxB,KAAa,EACb,IAAoB,EACE,EAAE,CAAC,aAAa,CAAC,cAAc,CAAC,MAAM,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC;AAE7E,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAChC,MAAwB,EACxB,IAAoB,EACW,EAAE,CAAC,aAAa,CAAC,kBAAkB,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;AAEnF,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,MAAwB,EAAE,IAAoB,EAAmB,EAAE,CACpG,aAAa,CAAC,kBAAkB,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC"}
@@ -0,0 +1,36 @@
1
+ import type { SqlitePoolHandle } from '../driver/sqlite/index.js';
2
+ import { getSqliteBackend, releaseSqliteBackend } from '../driver/sqlite/store.js';
3
+ import type { ConnectionConfig, SqliteConfig } from '../types/config.js';
4
+ import type { ExecResult, RunSqlRequest } from '../types/result.js';
5
+ import type { PoolHandle } from '../driver/interface.js';
6
+ /** 建表并导入数据(表已存在则先删后建) */
7
+ export declare function importDataToSqlite(pool: PoolHandle, tableName: string, rows: Record<string, any>[], fields?: Array<{
8
+ field_name: string;
9
+ field_type: string;
10
+ }>): Promise<void>;
11
+ /** 删除静态表 */
12
+ export declare function dropStaticTable(pool: PoolHandle, tableName: string): Promise<void>;
13
+ export interface StaticTableInfo {
14
+ /** 逻辑表名(用户 SQL 中的名称) */
15
+ name: string;
16
+ /** 数据源名(用于 "数据源名.表名" schema 限定匹配) */
17
+ datasourceName?: string;
18
+ /** SQLite 物理表名 */
19
+ sqliteTableName: string;
20
+ }
21
+ /**
22
+ * 执行静态数据源 SQL:逻辑表名 → 物理表名替换后交给 SQLite 驱动
23
+ * @param pool sqlite 连接池
24
+ * @param request SQL 请求(offset/limit/whereClause 与常规一致)
25
+ * @param tablesInfo 表映射信息
26
+ */
27
+ export declare function runStaticSql(pool: PoolHandle, request: RunSqlRequest, tablesInfo: StaticTableInfo[]): Promise<ExecResult>;
28
+ /** 创建独立 sqlite 池(静态数据源专用,独立于全局注册表) */
29
+ export declare function createStaticSqlitePool(config: SqliteConfig, options?: {
30
+ runtime?: ConnectionConfig['runtime'];
31
+ }): Promise<PoolHandle>;
32
+ /** 释放独立池(仅用于 createStaticSqlitePool 创建的池) */
33
+ export declare function destroyStaticSqlitePool(pool: PoolHandle): Promise<void>;
34
+ export { getSqliteBackend, releaseSqliteBackend };
35
+ export type { SqlitePoolHandle };
36
+ //# sourceMappingURL=static-source.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"static-source.d.ts","sourceRoot":"","sources":["../../src/optional/static-source.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAC;AAClE,OAAO,EAAE,gBAAgB,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AAGnF,OAAO,KAAK,EAAE,gBAAgB,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AACzE,OAAO,KAAK,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACpE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AAwDzD,yBAAyB;AACzB,wBAAsB,kBAAkB,CACtC,IAAI,EAAE,UAAU,EAChB,SAAS,EAAE,MAAM,EACjB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,EAC3B,MAAM,CAAC,EAAE,KAAK,CAAC;IAAE,UAAU,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,MAAM,CAAA;CAAE,CAAC,GACzD,OAAO,CAAC,IAAI,CAAC,CA+Bf;AAED,YAAY;AACZ,wBAAsB,eAAe,CAAC,IAAI,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAIxF;AAID,MAAM,WAAW,eAAe;IAC9B,wBAAwB;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,qCAAqC;IACrC,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,kBAAkB;IAClB,eAAe,EAAE,MAAM,CAAC;CACzB;AAED;;;;;GAKG;AACH,wBAAsB,YAAY,CAChC,IAAI,EAAE,UAAU,EAChB,OAAO,EAAE,aAAa,EACtB,UAAU,EAAE,eAAe,EAAE,GAC5B,OAAO,CAAC,UAAU,CAAC,CAsBrB;AAID,sCAAsC;AACtC,wBAAsB,sBAAsB,CAC1C,MAAM,EAAE,YAAY,EACpB,OAAO,CAAC,EAAE;IAAE,OAAO,CAAC,EAAE,gBAAgB,CAAC,SAAS,CAAC,CAAA;CAAE,GAClD,OAAO,CAAC,UAAU,CAAC,CAIrB;AAED,6CAA6C;AAC7C,wBAAsB,uBAAuB,CAAC,IAAI,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CAE7E;AAED,OAAO,EAAE,gBAAgB,EAAE,oBAAoB,EAAE,CAAC;AAClD,YAAY,EAAE,gBAAgB,EAAE,CAAC"}
@@ -0,0 +1,141 @@
1
+ /**
2
+ * 静态数据源扩展(从 WizBuild 提炼):JSON 数组 → SQLite 表 + SQL 表名映射执行
3
+ * 独立模块(Tree-shake 友好),主包不强制加载
4
+ *
5
+ * 典型场景:Excel/CSV/JSON 数据源导入 SQLite 物理表,
6
+ * 用户 SQL 中的逻辑表名经映射替换为物理表名后执行。
7
+ */
8
+ import { SqlEngineError } from '../errors.js';
9
+ import { getDriver } from '../driver/registry.js';
10
+ import { getSqliteBackend, releaseSqliteBackend } from '../driver/sqlite/store.js';
11
+ import { replaceTableNamesInSql, validateTableNameReplacement } from '../core/sql/table-mapper.js';
12
+ import { wrapWithWhereClause } from '../core/sql/pagination.js';
13
+ // ==================== 表结构推断 ====================
14
+ /** 字段类型 → SQLite 类型 */
15
+ function fieldTypeToSqliteType(fieldType) {
16
+ const typeMap = {
17
+ string: 'TEXT',
18
+ number: 'REAL',
19
+ integer: 'INTEGER',
20
+ float: 'REAL',
21
+ boolean: 'INTEGER',
22
+ date: 'TEXT',
23
+ array: 'TEXT',
24
+ object: 'TEXT',
25
+ };
26
+ return typeMap[fieldType] || 'TEXT';
27
+ }
28
+ /** 值类型推断 */
29
+ function inferValueType(value) {
30
+ if (value === null || value === undefined)
31
+ return 'string';
32
+ if (typeof value === 'number')
33
+ return Number.isInteger(value) ? 'integer' : 'float';
34
+ if (typeof value === 'boolean')
35
+ return 'boolean';
36
+ if (Array.isArray(value))
37
+ return 'array';
38
+ if (typeof value === 'object')
39
+ return 'object';
40
+ return 'string';
41
+ }
42
+ /** 根据字段配置或数据推断表结构 */
43
+ function inferTableSchema(rows, fields) {
44
+ if (fields && fields.length > 0) {
45
+ const columns = fields
46
+ .map((f) => `"${f.field_name}" ${fieldTypeToSqliteType(f.field_type)}`)
47
+ .join(', ');
48
+ return { columns, columnNames: fields.map((f) => f.field_name) };
49
+ }
50
+ if (rows.length === 0) {
51
+ throw new SqlEngineError('QUERY_FAILED', '无法推断数据结构,数据为空');
52
+ }
53
+ const firstRow = rows[0];
54
+ const columnNames = Object.keys(firstRow);
55
+ const columns = columnNames
56
+ .map((name) => {
57
+ const value = firstRow[name];
58
+ return `"${name}" ${fieldTypeToSqliteType(inferValueType(value))}`;
59
+ })
60
+ .join(', ');
61
+ return { columns, columnNames };
62
+ }
63
+ // ==================== 数据导入 ====================
64
+ /** 建表并导入数据(表已存在则先删后建) */
65
+ export async function importDataToSqlite(pool, tableName, rows, fields) {
66
+ const handle = pool;
67
+ const backend = await handle.getBackend();
68
+ const { columns, columnNames } = inferTableSchema(rows, fields);
69
+ backend.exec(`DROP TABLE IF EXISTS "${tableName}"`);
70
+ backend.exec(`CREATE TABLE "${tableName}" (${columns})`);
71
+ const placeholders = columnNames.map(() => '?').join(', ');
72
+ const quotedColumns = columnNames.map((n) => `"${n}"`).join(', ');
73
+ const insertSql = `INSERT INTO "${tableName}" (${quotedColumns}) VALUES (${placeholders})`;
74
+ const stmt = backend.prepare(insertSql);
75
+ backend.exec('BEGIN TRANSACTION');
76
+ try {
77
+ for (const row of rows) {
78
+ const values = columnNames.map((name) => {
79
+ const value = row[name];
80
+ if (Array.isArray(value) || (typeof value === 'object' && value !== null)) {
81
+ return JSON.stringify(value);
82
+ }
83
+ if (typeof value === 'boolean')
84
+ return value ? 1 : 0;
85
+ return value ?? null;
86
+ });
87
+ stmt.run(...values);
88
+ }
89
+ backend.exec('COMMIT');
90
+ }
91
+ catch (err) {
92
+ backend.exec('ROLLBACK');
93
+ throw err;
94
+ }
95
+ }
96
+ /** 删除静态表 */
97
+ export async function dropStaticTable(pool, tableName) {
98
+ const handle = pool;
99
+ const backend = await handle.getBackend();
100
+ backend.exec(`DROP TABLE IF EXISTS "${tableName}"`);
101
+ }
102
+ /**
103
+ * 执行静态数据源 SQL:逻辑表名 → 物理表名替换后交给 SQLite 驱动
104
+ * @param pool sqlite 连接池
105
+ * @param request SQL 请求(offset/limit/whereClause 与常规一致)
106
+ * @param tablesInfo 表映射信息
107
+ */
108
+ export async function runStaticSql(pool, request, tablesInfo) {
109
+ const handle = pool;
110
+ const tableNameMapping = new Map();
111
+ for (const table of tablesInfo) {
112
+ if (table.datasourceName) {
113
+ tableNameMapping.set(`${table.datasourceName}.${table.name}`, table.sqliteTableName);
114
+ }
115
+ tableNameMapping.set(table.name, table.sqliteTableName);
116
+ }
117
+ // 表名替换
118
+ const replacedSql = replaceTableNamesInSql(request.sql, tableNameMapping);
119
+ const validation = validateTableNameReplacement(request.sql, replacedSql, tableNameMapping);
120
+ if (!validation.valid) {
121
+ console.warn('[static-source] SQL 表名替换校验异常:', validation.warnings);
122
+ }
123
+ const sqliteDriver = getDriver('sqlite');
124
+ return sqliteDriver.runSql(pool, {
125
+ ...request,
126
+ sql: replacedSql,
127
+ });
128
+ }
129
+ // ==================== 便捷:SQLite 池获取 ====================
130
+ /** 创建独立 sqlite 池(静态数据源专用,独立于全局注册表) */
131
+ export async function createStaticSqlitePool(config, options) {
132
+ const driver = getDriver('sqlite');
133
+ const cfg = { ...config, ...(options?.runtime ? { runtime: options.runtime } : {}) };
134
+ return driver.createPool(cfg);
135
+ }
136
+ /** 释放独立池(仅用于 createStaticSqlitePool 创建的池) */
137
+ export async function destroyStaticSqlitePool(pool) {
138
+ await pool.destroy();
139
+ }
140
+ export { getSqliteBackend, releaseSqliteBackend };
141
+ //# sourceMappingURL=static-source.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"static-source.js","sourceRoot":"","sources":["../../src/optional/static-source.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ /**
2
+ * 运行时探测:Node / Bun
3
+ */
4
+ import type { RuntimeChoice, RuntimeName } from './types/config.js';
5
+ /** 探测当前运行时 */
6
+ export declare function detectRuntime(): RuntimeName;
7
+ /** 根据 config.runtime(auto 缺省)解析实际运行时 */
8
+ export declare function resolveRuntime(choice?: RuntimeChoice): RuntimeName;
9
+ export type { RuntimeName, RuntimeChoice } from './types/config.js';
10
+ /** 测试辅助:重置探测缓存(改变 process.versions.bun 后调用) */
11
+ export declare function __resetRuntimeCache(): void;
12
+ //# sourceMappingURL=runtime.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runtime.d.ts","sourceRoot":"","sources":["../src/runtime.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAIpE,cAAc;AACd,wBAAgB,aAAa,IAAI,WAAW,CAS3C;AAED,wCAAwC;AACxC,wBAAgB,cAAc,CAAC,MAAM,CAAC,EAAE,aAAa,GAAG,WAAW,CAGlE;AAED,YAAY,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAEpE,+CAA+C;AAC/C,wBAAgB,mBAAmB,IAAI,IAAI,CAE1C"}
package/lib/runtime.js ADDED
@@ -0,0 +1,26 @@
1
+ /**
2
+ * 运行时探测:Node / Bun
3
+ */
4
+ let cached = null;
5
+ /** 探测当前运行时 */
6
+ export function detectRuntime() {
7
+ if (cached)
8
+ return cached;
9
+ const isBun = typeof process !== 'undefined' &&
10
+ typeof process.versions === 'object' &&
11
+ process.versions !== null &&
12
+ typeof process.versions.bun === 'string';
13
+ cached = isBun ? 'bun' : 'node';
14
+ return cached;
15
+ }
16
+ /** 根据 config.runtime(auto 缺省)解析实际运行时 */
17
+ export function resolveRuntime(choice) {
18
+ if (choice === 'node' || choice === 'bun')
19
+ return choice;
20
+ return detectRuntime();
21
+ }
22
+ /** 测试辅助:重置探测缓存(改变 process.versions.bun 后调用) */
23
+ export function __resetRuntimeCache() {
24
+ cached = null;
25
+ }
26
+ //# sourceMappingURL=runtime.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runtime.js","sourceRoot":"","sources":["../src/runtime.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH,IAAI,MAAM,GAAuB,IAAI,CAAC;AAEtC,cAAc;AACd,MAAM,UAAU,aAAa;IAC3B,IAAI,MAAM;QAAE,OAAO,MAAM,CAAC;IAC1B,MAAM,KAAK,GACT,OAAO,OAAO,KAAK,WAAW;QAC9B,OAAQ,OAAe,CAAC,QAAQ,KAAK,QAAQ;QAC5C,OAAe,CAAC,QAAQ,KAAK,IAAI;QAClC,OAAQ,OAAe,CAAC,QAAQ,CAAC,GAAG,KAAK,QAAQ,CAAC;IACpD,MAAM,GAAG,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC;IAChC,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,wCAAwC;AACxC,MAAM,UAAU,cAAc,CAAC,MAAsB;IACnD,IAAI,MAAM,KAAK,MAAM,IAAI,MAAM,KAAK,KAAK;QAAE,OAAO,MAAM,CAAC;IACzD,OAAO,aAAa,EAAE,CAAC;AACzB,CAAC;AAID,+CAA+C;AAC/C,MAAM,UAAU,mBAAmB;IACjC,MAAM,GAAG,IAAI,CAAC;AAChB,CAAC"}
@@ -0,0 +1,146 @@
1
+ /**
2
+ * 连接配置类型(对外唯一入参)
3
+ */
4
+ import type { TaskQueueOptions } from './queue.js';
5
+ /** 支持的数据库方言 */
6
+ export type DialectType = 'mysql' | 'mariadb' | 'postgresql' | 'sqlite' | 'mongodb';
7
+ /** 运行时名称 */
8
+ export type RuntimeName = 'node' | 'bun';
9
+ /** 运行时选择:auto = 自动探测 */
10
+ export type RuntimeChoice = 'auto' | RuntimeName;
11
+ /** SSL 配置(mysql/pg/mongodb 通用) */
12
+ export interface SslOptions {
13
+ enabled?: boolean;
14
+ mode?: string;
15
+ ca?: string;
16
+ cert?: string;
17
+ key?: string;
18
+ rejectUnauthorized?: boolean;
19
+ }
20
+ /** 连接池选项(driver 通用) */
21
+ export interface PoolOptions {
22
+ /** 池上限,默认 20 */
23
+ max?: number;
24
+ /** 常驻连接数,默认 0 */
25
+ min?: number;
26
+ /** 获取连接超时,默认 20000ms */
27
+ acquireTimeoutMs?: number;
28
+ /** 建连超时,默认 15000ms */
29
+ createTimeoutMs?: number;
30
+ /** 空闲回收时间,默认 30000ms */
31
+ idleTimeoutMs?: number;
32
+ /** 连接超时(新建连接时),默认 10000ms */
33
+ connectTimeoutMs?: number;
34
+ /** 是否开启 keepAlive,默认 true */
35
+ keepAlive?: boolean;
36
+ }
37
+ /** DML 安全护栏 */
38
+ export interface DmlOptions {
39
+ /** 禁止无 WHERE 的 UPDATE/DELETE,默认 true */
40
+ requireWhereForUpdateDelete?: boolean;
41
+ /** 单次 INSERT 批量行数上限,默认 10000,0 = 不限制 */
42
+ maxInsertRows?: number;
43
+ /** 返回被写行(PG/SQLite 用 RETURNING;MySQL 回读成本高,默认 false) */
44
+ returning?: boolean;
45
+ }
46
+ /** 查询结果缓存选项(仅缓存幂等 SELECT) */
47
+ export interface QueryCacheOptions {
48
+ /** 是否启用,默认 false */
49
+ enabled?: boolean;
50
+ /** TTL 毫秒,默认 60000 */
51
+ ttlMs?: number;
52
+ /** 最大缓存条目数(LRU),默认 1000 */
53
+ maxEntries?: number;
54
+ }
55
+ /** 结构检出选项(主要影响 MongoDB) */
56
+ export interface SchemaOptions {
57
+ /** Mongo 采样条数,默认 100;0 = 仅集合名/索引(快速模式) */
58
+ sampleSize?: number;
59
+ /** Mongo 嵌套深度上限,默认 3 */
60
+ maxDepth?: number;
61
+ /** 全量扫描(可选) */
62
+ analyzeAll?: boolean;
63
+ /** 是否命中结构缓存,默认 true */
64
+ useCache?: boolean;
65
+ /** 结构缓存 TTL,默认 5 分钟 */
66
+ cacheTtlMs?: number;
67
+ }
68
+ /** 所有方言配置的公共基类 */
69
+ export interface BaseConfig {
70
+ type: DialectType;
71
+ /** 运行时:默认 auto(自动探测) */
72
+ runtime?: RuntimeChoice;
73
+ /** DML 安全策略 */
74
+ dml?: DmlOptions;
75
+ /** 连接池选项 */
76
+ pool?: PoolOptions;
77
+ /** 任务队列选项 */
78
+ queue?: TaskQueueOptions;
79
+ /** 结构检出选项(作为各方法默认值)——注意与 PG 的 schema(schema 名)不冲突 */
80
+ introspect?: SchemaOptions;
81
+ [key: string]: unknown;
82
+ }
83
+ export interface MysqlConfig extends BaseConfig {
84
+ type: 'mysql';
85
+ host: string;
86
+ /** 默认 3306 */
87
+ port?: number;
88
+ user?: string;
89
+ username?: string;
90
+ password?: string;
91
+ database: string;
92
+ /** 方言模式:'5' | '8' | 'auto'(auto = 启动时探测 VERSION()) */
93
+ version?: '5' | '8' | 'auto';
94
+ ssl?: SslOptions;
95
+ }
96
+ /** MariaDB 配置(协议与 MySQL 兼容,能力矩阵不同:10.2+ 支持 CTE) */
97
+ export interface MariadbConfig extends BaseConfig {
98
+ type: 'mariadb';
99
+ host: string;
100
+ /** 默认 3306 */
101
+ port?: number;
102
+ user?: string;
103
+ username?: string;
104
+ password?: string;
105
+ database: string;
106
+ /** 方言模式:'10' | '11' | 'auto'(auto = 启动时探测 VERSION()) */
107
+ version?: '10' | '11' | 'auto';
108
+ ssl?: SslOptions;
109
+ }
110
+ export interface PostgresqlConfig extends BaseConfig {
111
+ type: 'postgresql';
112
+ host: string;
113
+ /** 默认 5432 */
114
+ port?: number;
115
+ user?: string;
116
+ username?: string;
117
+ password?: string;
118
+ database: string;
119
+ /** 默认 public */
120
+ schema?: string;
121
+ ssl?: SslOptions;
122
+ }
123
+ export interface SqliteConfig extends BaseConfig {
124
+ type: 'sqlite';
125
+ /** ':memory:' 用内存库,否则为文件路径 */
126
+ database: string;
127
+ }
128
+ export interface MongodbConfig extends BaseConfig {
129
+ type: 'mongodb';
130
+ /** 优先;未提供则由 host/port/database 拼装 */
131
+ uri?: string;
132
+ host?: string;
133
+ /** 默认 27017 */
134
+ port?: number;
135
+ user?: string;
136
+ username?: string;
137
+ password?: string;
138
+ database?: string;
139
+ /** 默认 admin */
140
+ authSource?: string;
141
+ /** retryable writes(单实例不支持事务需 false,默认 false) */
142
+ retryWrites?: boolean;
143
+ ssl?: SslOptions;
144
+ }
145
+ export type ConnectionConfig = MysqlConfig | MariadbConfig | PostgresqlConfig | SqliteConfig | MongodbConfig;
146
+ //# sourceMappingURL=config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/types/config.ts"],"names":[],"mappings":"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"}