@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,5 @@
1
+ /**
2
+ * 连接配置类型(对外唯一入参)
3
+ */
4
+ export {};
5
+ //# sourceMappingURL=config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/types/config.ts"],"names":[],"mappings":"AAAA;;GAEG"}
@@ -0,0 +1,7 @@
1
+ export * from './config.js';
2
+ export * from './result.js';
3
+ export * from './schema.js';
4
+ export * from './task.js';
5
+ export * from './queue.js';
6
+ export * from './manager.js';
7
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAC;AAC5B,cAAc,aAAa,CAAC;AAC5B,cAAc,aAAa,CAAC;AAC5B,cAAc,WAAW,CAAC;AAC1B,cAAc,YAAY,CAAC;AAC3B,cAAc,cAAc,CAAC"}
@@ -0,0 +1,7 @@
1
+ export * from './config.js';
2
+ export * from './result.js';
3
+ export * from './schema.js';
4
+ export * from './task.js';
5
+ export * from './queue.js';
6
+ export * from './manager.js';
7
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAC;AAC5B,cAAc,aAAa,CAAC;AAC5B,cAAc,aAAa,CAAC;AAC5B,cAAc,WAAW,CAAC;AAC1B,cAAc,YAAY,CAAC;AAC3B,cAAc,cAAc,CAAC"}
@@ -0,0 +1,37 @@
1
+ /**
2
+ * ClientManager / 连接池注册表类型(多数据源平台)
3
+ */
4
+ import type { PoolOptions } from './config.js';
5
+ /** 每数据源池的实时状态 */
6
+ export interface PoolStats {
7
+ active: number;
8
+ idle: number;
9
+ waiting: number;
10
+ createdTotal: number;
11
+ destroyedTotal: number;
12
+ }
13
+ /** 全局池指标(manager.metrics()) */
14
+ export interface PoolMetrics {
15
+ /** 已登记 client 数 */
16
+ clients: number;
17
+ /** 存活的池数 */
18
+ pools: number;
19
+ active: number;
20
+ idle: number;
21
+ waiting: number;
22
+ createdTotal: number;
23
+ destroyedTotal: number;
24
+ }
25
+ export interface ClientManagerOptions {
26
+ /** 每数据源池默认参数 */
27
+ defaultPool?: PoolOptions;
28
+ /** 全局 client 数上限(防泄漏),默认 500 */
29
+ maxClients?: number;
30
+ /** 空闲池 LRU 淘汰 */
31
+ lru?: {
32
+ enabled?: boolean;
33
+ /** 空闲池数量上限,超过时淘汰最久未用的,默认 50 */
34
+ maxIdlePools?: number;
35
+ };
36
+ }
37
+ //# sourceMappingURL=manager.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"manager.d.ts","sourceRoot":"","sources":["../../src/types/manager.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAE/C,iBAAiB;AACjB,MAAM,WAAW,SAAS;IACxB,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,EAAE,MAAM,CAAC;IACrB,cAAc,EAAE,MAAM,CAAC;CACxB;AAED,+BAA+B;AAC/B,MAAM,WAAW,WAAW;IAC1B,mBAAmB;IACnB,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,EAAE,MAAM,CAAC;IACrB,cAAc,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,oBAAoB;IACnC,gBAAgB;IAChB,WAAW,CAAC,EAAE,WAAW,CAAC;IAC1B,gCAAgC;IAChC,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,iBAAiB;IACjB,GAAG,CAAC,EAAE;QACJ,OAAO,CAAC,EAAE,OAAO,CAAC;QAClB,+BAA+B;QAC/B,YAAY,CAAC,EAAE,MAAM,CAAC;KACvB,CAAC;CACH"}
@@ -0,0 +1,5 @@
1
+ /**
2
+ * ClientManager / 连接池注册表类型(多数据源平台)
3
+ */
4
+ export {};
5
+ //# sourceMappingURL=manager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"manager.js","sourceRoot":"","sources":["../../src/types/manager.ts"],"names":[],"mappings":"AAAA;;GAEG"}
@@ -0,0 +1,45 @@
1
+ /**
2
+ * 任务队列类型(并发 / 优先级 / 超时 / 取消 / worker 多线程)
3
+ */
4
+ import type { IntrospectTask, IntrospectRunner } from './task.js';
5
+ /** 任务队列选项(config.queue 或 TaskQueue 构造参数) */
6
+ export interface TaskQueueOptions {
7
+ /** 进程内异步并发,默认 = os.availableParallelism() */
8
+ concurrency?: number;
9
+ /** worker 线程数(CPU 密集任务池),默认 = min(4, cpu) */
10
+ workerCount?: number;
11
+ /** 是否启用 worker 线程,默认 true */
12
+ useWorkers?: boolean;
13
+ /** 任务默认超时(ms),默认不限制 */
14
+ timeoutMs?: number;
15
+ }
16
+ export interface EnqueueOptions {
17
+ /** 数值越大越先执行,默认 0 */
18
+ priority?: number;
19
+ /** true = offload 到 worker 线程池(CPU 密集任务);需要任务可序列化(见 WorkerTaskSpec) */
20
+ worker?: boolean;
21
+ /** 取消排队中/执行中的任务 */
22
+ signal?: AbortSignal;
23
+ /** 单次任务超时覆盖(ms) */
24
+ timeoutMs?: number;
25
+ }
26
+ /** worker 任务规格:CPU 密集任务必须能以「模块 + 导出函数 + 参数」形式描述 */
27
+ export interface WorkerTaskSpec {
28
+ /** 模块路径(绝对路径或可 import 的 specifier) */
29
+ module: string;
30
+ /** 模块导出的函数名 */
31
+ fn: string;
32
+ /** 序列化参数(structuredClone 兼容) */
33
+ args?: unknown[];
34
+ }
35
+ export interface TaskQueue {
36
+ enqueue<T>(fn: (() => T | Promise<T>) | WorkerTaskSpec, opts?: EnqueueOptions): Promise<T>;
37
+ /** 长任务形态:支持进度上报与取消(内部复用 core/task.ts 执行器) */
38
+ introspect<T>(runner: IntrospectRunner<T>): IntrospectTask<T>;
39
+ waitIdle(): Promise<void>;
40
+ /** 排队中任务数 */
41
+ size(): number;
42
+ /** 关闭队列与 worker 池;close 后 enqueue 报错 */
43
+ close(): Promise<void>;
44
+ }
45
+ //# sourceMappingURL=queue.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"queue.d.ts","sourceRoot":"","sources":["../../src/types/queue.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,WAAW,CAAC;AAElE,4CAA4C;AAC5C,MAAM,WAAW,gBAAgB;IAC/B,6CAA6C;IAC7C,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,6CAA6C;IAC7C,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,6BAA6B;IAC7B,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,uBAAuB;IACvB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,cAAc;IAC7B,oBAAoB;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,uEAAuE;IACvE,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,mBAAmB;IACnB,MAAM,CAAC,EAAE,WAAW,CAAC;IACrB,mBAAmB;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,mDAAmD;AACnD,MAAM,WAAW,cAAc;IAC7B,sCAAsC;IACtC,MAAM,EAAE,MAAM,CAAC;IACf,eAAe;IACf,EAAE,EAAE,MAAM,CAAC;IACX,gCAAgC;IAChC,IAAI,CAAC,EAAE,OAAO,EAAE,CAAC;CAClB;AAED,MAAM,WAAW,SAAS;IACxB,OAAO,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,MAAM,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC,GAAG,cAAc,EAAE,IAAI,CAAC,EAAE,cAAc,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;IAC3F,6CAA6C;IAC7C,UAAU,CAAC,CAAC,EAAE,MAAM,EAAE,gBAAgB,CAAC,CAAC,CAAC,GAAG,cAAc,CAAC,CAAC,CAAC,CAAC;IAC9D,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IAC1B,aAAa;IACb,IAAI,IAAI,MAAM,CAAC;IACf,wCAAwC;IACxC,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CACxB"}
@@ -0,0 +1,5 @@
1
+ /**
2
+ * 任务队列类型(并发 / 优先级 / 超时 / 取消 / worker 多线程)
3
+ */
4
+ export {};
5
+ //# sourceMappingURL=queue.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"queue.js","sourceRoot":"","sources":["../../src/types/queue.ts"],"names":[],"mappings":"AAAA;;GAEG"}
@@ -0,0 +1,61 @@
1
+ /**
2
+ * 统一查询/写操作结果类型
3
+ */
4
+ /** 字段定义(统一展示结构) */
5
+ export interface Field {
6
+ field_name: string;
7
+ custom_name: string;
8
+ field_desc?: string;
9
+ /** 方言原生类型(如 bigint / varchar(255) / int4) */
10
+ field_type: string;
11
+ /** 统一展示类型:string | number | boolean | date | json | binary | object | array */
12
+ display_type: string;
13
+ is_primary?: 0 | 1;
14
+ }
15
+ /** SELECT 查询结果 */
16
+ export interface QueryResult {
17
+ rows: any[];
18
+ fields?: Field[];
19
+ /** 用户 SQL 自带 LIMIT 时为近似值(rows.length) */
20
+ total?: number;
21
+ offset?: number;
22
+ limit?: number;
23
+ /** SQL 执行耗时(ms),由 facade 挂载 */
24
+ duration?: number;
25
+ }
26
+ /** DML 写操作结果 */
27
+ export interface WriteResult {
28
+ /** 受影响行数 */
29
+ affectedRows: number;
30
+ /** 单条插入的自增主键 / Mongo _id */
31
+ insertId?: number | string;
32
+ /** RETURNING 回读行 / Mongo 批量插入 _id 列表 */
33
+ returning?: any[];
34
+ duration?: number;
35
+ }
36
+ export type ExecResult = QueryResult | WriteResult;
37
+ /** SQL 执行请求 */
38
+ export interface RunSqlRequest {
39
+ sql: string;
40
+ offset?: number;
41
+ limit?: number;
42
+ /** 额外过滤,包装为 WITH __t AS (...) SELECT * FROM __t WHERE ... */
43
+ whereClause?: string;
44
+ /** 参数绑定占位符值(? / $1),与 sql 中的占位符一一对应 */
45
+ params?: unknown[];
46
+ /** DML 安全策略(client 层按自身配置注入;池共享时 handle.config.dml 不可靠) */
47
+ dml?: import('./config.js').DmlOptions;
48
+ }
49
+ /** 连接测试结果 */
50
+ export interface TestResult {
51
+ success: boolean;
52
+ message: string;
53
+ version?: string;
54
+ }
55
+ /** 毫秒保留 2 位小数 */
56
+ export declare function roundDuration(ms: number): number;
57
+ /** 类型守卫:是否为写操作结果 */
58
+ export declare function isWriteResult(result: ExecResult): result is WriteResult;
59
+ /** 类型守卫:是否为查询结果 */
60
+ export declare function isQueryResult(result: ExecResult): result is QueryResult;
61
+ //# sourceMappingURL=result.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"result.d.ts","sourceRoot":"","sources":["../../src/types/result.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,mBAAmB;AACnB,MAAM,WAAW,KAAK;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,6CAA6C;IAC7C,UAAU,EAAE,MAAM,CAAC;IACnB,+EAA+E;IAC/E,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;CACpB;AAED,kBAAkB;AAClB,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,GAAG,EAAE,CAAC;IACZ,MAAM,CAAC,EAAE,KAAK,EAAE,CAAC;IACjB,yCAAyC;IACzC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,+BAA+B;IAC/B,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,gBAAgB;AAChB,MAAM,WAAW,WAAW;IAC1B,YAAY;IACZ,YAAY,EAAE,MAAM,CAAC;IACrB,4BAA4B;IAC5B,QAAQ,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IAC3B,wCAAwC;IACxC,SAAS,CAAC,EAAE,GAAG,EAAE,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,MAAM,UAAU,GAAG,WAAW,GAAG,WAAW,CAAC;AAEnD,eAAe;AACf,MAAM,WAAW,aAAa;IAC5B,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,6DAA6D;IAC7D,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,uCAAuC;IACvC,MAAM,CAAC,EAAE,OAAO,EAAE,CAAC;IACnB,2DAA2D;IAC3D,GAAG,CAAC,EAAE,OAAO,aAAa,EAAE,UAAU,CAAC;CACxC;AAED,aAAa;AACb,MAAM,WAAW,UAAU;IACzB,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,iBAAiB;AACjB,wBAAgB,aAAa,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,CAEhD;AAED,oBAAoB;AACpB,wBAAgB,aAAa,CAAC,MAAM,EAAE,UAAU,GAAG,MAAM,IAAI,WAAW,CAEvE;AAED,mBAAmB;AACnB,wBAAgB,aAAa,CAAC,MAAM,EAAE,UAAU,GAAG,MAAM,IAAI,WAAW,CAEvE"}
@@ -0,0 +1,16 @@
1
+ /**
2
+ * 统一查询/写操作结果类型
3
+ */
4
+ /** 毫秒保留 2 位小数 */
5
+ export function roundDuration(ms) {
6
+ return Math.round(ms * 100) / 100;
7
+ }
8
+ /** 类型守卫:是否为写操作结果 */
9
+ export function isWriteResult(result) {
10
+ return 'affectedRows' in result;
11
+ }
12
+ /** 类型守卫:是否为查询结果 */
13
+ export function isQueryResult(result) {
14
+ return 'rows' in result;
15
+ }
16
+ //# sourceMappingURL=result.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"result.js","sourceRoot":"","sources":["../../src/types/result.ts"],"names":[],"mappings":"AAAA;;GAEG;AA2DH,iBAAiB;AACjB,MAAM,UAAU,aAAa,CAAC,EAAU;IACtC,OAAO,IAAI,CAAC,KAAK,CAAC,EAAE,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC;AACpC,CAAC;AAED,oBAAoB;AACpB,MAAM,UAAU,aAAa,CAAC,MAAkB;IAC9C,OAAO,cAAc,IAAI,MAAM,CAAC;AAClC,CAAC;AAED,mBAAmB;AACnB,MAAM,UAAU,aAAa,CAAC,MAAkB;IAC9C,OAAO,MAAM,IAAI,MAAM,CAAC;AAC1B,CAAC"}
@@ -0,0 +1,51 @@
1
+ /**
2
+ * 表结构 JSON 导出类型(DDL 的结构化等价物)
3
+ */
4
+ export interface TableSchema {
5
+ name: string;
6
+ /** PG schema / MySQL database / SQLite 主库 */
7
+ schema?: string;
8
+ kind: 'table' | 'view' | 'collection';
9
+ comment?: string;
10
+ columns: ColumnSchema[];
11
+ indexes?: IndexSchema[];
12
+ foreignKeys?: ForeignKeySchema[];
13
+ /** MySQL: InnoDB 等 */
14
+ engine?: string;
15
+ /** MySQL */
16
+ charset?: string;
17
+ /** 原始 DDL 字符串(与 JSON 双形态) */
18
+ ddl?: string;
19
+ /** 方言原生信息兜底 */
20
+ raw?: Record<string, unknown>;
21
+ }
22
+ export interface ColumnSchema {
23
+ name: string;
24
+ /** 原生类型(含长度/精度,如 varchar(255)、numeric(10,2)) */
25
+ type: string;
26
+ nullable: boolean;
27
+ default?: any;
28
+ comment?: string;
29
+ primaryKey: boolean;
30
+ autoIncrement?: boolean;
31
+ /** 列序号(从 1 开始) */
32
+ ordinal: number;
33
+ }
34
+ export interface IndexSchema {
35
+ name: string;
36
+ unique: boolean;
37
+ /** 按索引内列序 */
38
+ columns: string[];
39
+ /** btree / hash / fulltext / gin 等 */
40
+ type?: string;
41
+ }
42
+ export interface ForeignKeySchema {
43
+ name?: string;
44
+ columns: string[];
45
+ refTable: string;
46
+ refColumns: string[];
47
+ /** CASCADE / SET NULL / RESTRICT ... */
48
+ onDelete?: string;
49
+ onUpdate?: string;
50
+ }
51
+ //# sourceMappingURL=schema.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../src/types/schema.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,6CAA6C;IAC7C,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,OAAO,GAAG,MAAM,GAAG,YAAY,CAAC;IACtC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,YAAY,EAAE,CAAC;IACxB,OAAO,CAAC,EAAE,WAAW,EAAE,CAAC;IACxB,WAAW,CAAC,EAAE,gBAAgB,EAAE,CAAC;IACjC,sBAAsB;IACtB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,YAAY;IACZ,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,6BAA6B;IAC7B,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,eAAe;IACf,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAC/B;AAED,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,gDAAgD;IAChD,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,OAAO,CAAC;IAClB,OAAO,CAAC,EAAE,GAAG,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,OAAO,CAAC;IACpB,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,kBAAkB;IAClB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,OAAO,CAAC;IAChB,aAAa;IACb,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,sCAAsC;IACtC,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,gBAAgB;IAC/B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,wCAAwC;IACxC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB"}
@@ -0,0 +1,5 @@
1
+ /**
2
+ * 表结构 JSON 导出类型(DDL 的结构化等价物)
3
+ */
4
+ export {};
5
+ //# sourceMappingURL=schema.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schema.js","sourceRoot":"","sources":["../../src/types/schema.ts"],"names":[],"mappings":"AAAA;;GAEG"}
@@ -0,0 +1,48 @@
1
+ /**
2
+ * 长任务类型(进度上报 / 取消 / 状态机)
3
+ */
4
+ export type TaskStatus = 'pending' | 'running' | 'done' | 'failed' | 'cancelled';
5
+ export interface TaskProgress {
6
+ /** 阶段名:如 'sampling' | 'analyzing' | 'building' */
7
+ stage: string;
8
+ /** 已处理数(已采样文档 / 已导出表数) */
9
+ processed: number;
10
+ /** 总量(未知时省略) */
11
+ total?: number;
12
+ message?: string;
13
+ }
14
+ /** 长任务执行上下文(runner 内部使用) */
15
+ export interface IntrospectContext {
16
+ /** 上报进度 */
17
+ report(progress: TaskProgress): void;
18
+ /** 取消信号:取消时触发 abort */
19
+ signal: AbortSignal;
20
+ /** 是否已被取消 */
21
+ isCancelled(): boolean;
22
+ }
23
+ /** 长任务执行器 */
24
+ export type IntrospectRunner<T> = (ctx: IntrospectContext) => Promise<T>;
25
+ export interface IntrospectTask<T> {
26
+ readonly id: string;
27
+ readonly status: TaskStatus;
28
+ readonly progress: TaskProgress;
29
+ /** 等待完成;失败 reject SqlEngineError(TASK_CANCELLED / 其他) */
30
+ readonly promise: Promise<T>;
31
+ /** 订阅进度,返回退订函数 */
32
+ onProgress(cb: (p: TaskProgress) => void): () => void;
33
+ /** 取消;promise reject TASK_CANCELLED */
34
+ cancel(): Promise<void>;
35
+ }
36
+ /**
37
+ * 创建长任务
38
+ * @param runner 执行器(内部通过 ctx.report 上报进度、ctx.signal 感知取消)
39
+ */
40
+ export declare function createTask<T>(runner: IntrospectRunner<T>): IntrospectTask<T>;
41
+ /** 构造 TASK_CANCELLED 错误(避免循环依赖 errors.ts,直接导出构造器) */
42
+ export declare function newTaskCancelledError(id: string): Error;
43
+ /**
44
+ * 任务包装:inner 任务异步创建(如先等连接池就绪)时,保证进度事件不丢失
45
+ * - 事件先入缓冲,订阅时立即重放已缓冲进度,再实时转发
46
+ */
47
+ export declare function wrapTask<T>(createInner: () => Promise<IntrospectTask<T>>): IntrospectTask<T>;
48
+ //# sourceMappingURL=task.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"task.d.ts","sourceRoot":"","sources":["../../src/types/task.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,MAAM,MAAM,UAAU,GAAG,SAAS,GAAG,SAAS,GAAG,MAAM,GAAG,QAAQ,GAAG,WAAW,CAAC;AAEjF,MAAM,WAAW,YAAY;IAC3B,kDAAkD;IAClD,KAAK,EAAE,MAAM,CAAC;IACd,0BAA0B;IAC1B,SAAS,EAAE,MAAM,CAAC;IAClB,gBAAgB;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,4BAA4B;AAC5B,MAAM,WAAW,iBAAiB;IAChC,WAAW;IACX,MAAM,CAAC,QAAQ,EAAE,YAAY,GAAG,IAAI,CAAC;IACrC,uBAAuB;IACvB,MAAM,EAAE,WAAW,CAAC;IACpB,aAAa;IACb,WAAW,IAAI,OAAO,CAAC;CACxB;AAED,aAAa;AACb,MAAM,MAAM,gBAAgB,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,iBAAiB,KAAK,OAAO,CAAC,CAAC,CAAC,CAAC;AAEzE,MAAM,WAAW,cAAc,CAAC,CAAC;IAC/B,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,MAAM,EAAE,UAAU,CAAC;IAC5B,QAAQ,CAAC,QAAQ,EAAE,YAAY,CAAC;IAChC,yDAAyD;IACzD,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC;IAC7B,kBAAkB;IAClB,UAAU,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,YAAY,KAAK,IAAI,GAAG,MAAM,IAAI,CAAC;IACtD,uCAAuC;IACvC,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CACzB;AAID;;;GAGG;AACH,wBAAgB,UAAU,CAAC,CAAC,EAAE,MAAM,EAAE,gBAAgB,CAAC,CAAC,CAAC,GAAG,cAAc,CAAC,CAAC,CAAC,CA6E5E;AAED,qDAAqD;AACrD,wBAAgB,qBAAqB,CAAC,EAAE,EAAE,MAAM,GAAG,KAAK,CAIvD;AAED;;;GAGG;AACH,wBAAgB,QAAQ,CAAC,CAAC,EAAE,WAAW,EAAE,MAAM,OAAO,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,GAAG,cAAc,CAAC,CAAC,CAAC,CAuC5F"}
@@ -0,0 +1,136 @@
1
+ /**
2
+ * 长任务类型(进度上报 / 取消 / 状态机)
3
+ */
4
+ let taskSeq = 0;
5
+ /**
6
+ * 创建长任务
7
+ * @param runner 执行器(内部通过 ctx.report 上报进度、ctx.signal 感知取消)
8
+ */
9
+ export function createTask(runner) {
10
+ const id = `task-${++taskSeq}-${Date.now().toString(36)}`;
11
+ let status = 'pending';
12
+ let progress = { stage: 'pending', processed: 0 };
13
+ const listeners = new Set();
14
+ let cancelRequested = false;
15
+ const abort = new AbortController();
16
+ const emit = (p) => {
17
+ progress = p;
18
+ for (const cb of listeners)
19
+ cb(p);
20
+ };
21
+ const promise = new Promise((resolve, reject) => {
22
+ const run = async () => {
23
+ status = 'running';
24
+ emit({ ...progress, stage: 'running' });
25
+ try {
26
+ const result = await runner({
27
+ report: (p) => {
28
+ if (!cancelRequested)
29
+ emit(p);
30
+ },
31
+ signal: abort.signal,
32
+ isCancelled: () => cancelRequested,
33
+ });
34
+ if (cancelRequested) {
35
+ status = 'cancelled';
36
+ emit({ ...progress, stage: 'cancelled' });
37
+ reject(newTaskCancelledError(id));
38
+ return;
39
+ }
40
+ status = 'done';
41
+ emit({ ...progress, stage: 'done' });
42
+ resolve(result);
43
+ }
44
+ catch (err) {
45
+ if (cancelRequested || abort.signal.aborted) {
46
+ status = 'cancelled';
47
+ emit({ ...progress, stage: 'cancelled' });
48
+ reject(newTaskCancelledError(id));
49
+ }
50
+ else {
51
+ status = 'failed';
52
+ emit({ ...progress, stage: 'failed' });
53
+ reject(err);
54
+ }
55
+ }
56
+ };
57
+ // 延迟到微任务执行,保证 pending 状态可观测(订阅者先注册再运行)
58
+ void Promise.resolve().then(run);
59
+ });
60
+ const cancel = async () => {
61
+ if (status === 'done' || status === 'failed' || status === 'cancelled')
62
+ return;
63
+ cancelRequested = true;
64
+ // 延迟到微任务再触发 abort,让 runner 先完成监听器注册
65
+ queueMicrotask(() => abort.abort());
66
+ status = 'cancelled';
67
+ emit({ ...progress, stage: 'cancelled' });
68
+ // 等待 runner 收尾(signal 触发后 runner 应尽快返回)
69
+ await promise.catch(() => undefined);
70
+ };
71
+ return {
72
+ id,
73
+ get status() {
74
+ return status;
75
+ },
76
+ get progress() {
77
+ return progress;
78
+ },
79
+ promise,
80
+ onProgress(cb) {
81
+ listeners.add(cb);
82
+ return () => listeners.delete(cb);
83
+ },
84
+ cancel,
85
+ };
86
+ }
87
+ /** 构造 TASK_CANCELLED 错误(避免循环依赖 errors.ts,直接导出构造器) */
88
+ export function newTaskCancelledError(id) {
89
+ const err = new Error(`Task ${id} cancelled`);
90
+ err.code = 'TASK_CANCELLED';
91
+ return err;
92
+ }
93
+ /**
94
+ * 任务包装:inner 任务异步创建(如先等连接池就绪)时,保证进度事件不丢失
95
+ * - 事件先入缓冲,订阅时立即重放已缓冲进度,再实时转发
96
+ */
97
+ export function wrapTask(createInner) {
98
+ let inner = null;
99
+ let cancelled = false;
100
+ const buffer = [];
101
+ const live = new Set();
102
+ const push = (p) => {
103
+ buffer.push(p);
104
+ for (const cb of live)
105
+ cb(p);
106
+ };
107
+ const promise = createInner().then((task) => {
108
+ inner = task;
109
+ const unsub = task.onProgress(push);
110
+ task.promise.finally(() => unsub());
111
+ // 快照当前进度(含已完成状态),确保订阅者能拿到
112
+ push(task.progress);
113
+ return task.promise;
114
+ });
115
+ return {
116
+ id: `wrapped-${Date.now().toString(36)}`,
117
+ get status() {
118
+ return inner?.status ?? (cancelled ? 'cancelled' : 'pending');
119
+ },
120
+ get progress() {
121
+ return inner?.progress ?? { stage: 'pending', processed: 0 };
122
+ },
123
+ promise,
124
+ onProgress(cb) {
125
+ for (const p of buffer)
126
+ cb(p);
127
+ live.add(cb);
128
+ return () => live.delete(cb);
129
+ },
130
+ cancel() {
131
+ cancelled = true;
132
+ return inner?.cancel() ?? Promise.resolve();
133
+ },
134
+ };
135
+ }
136
+ //# sourceMappingURL=task.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"task.js","sourceRoot":"","sources":["../../src/types/task.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ /**
2
+ * 事务句柄:内部所有查询在同一个事务/连接内执行
3
+ */
4
+ import type { ExecResult, QueryResult, RunSqlRequest, WriteResult } from './result.js';
5
+ export interface TransactionHandle {
6
+ /** 执行 SQL(SELECT → QueryResult,DML → WriteResult) */
7
+ runSql(request: RunSqlRequest): Promise<ExecResult>;
8
+ query<T = any>(sql: string, params?: unknown[]): Promise<QueryResult>;
9
+ execute(sql: string, params?: unknown[]): Promise<WriteResult>;
10
+ commit(): Promise<void>;
11
+ rollback(): Promise<void>;
12
+ }
13
+ //# sourceMappingURL=transaction.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"transaction.d.ts","sourceRoot":"","sources":["../../src/types/transaction.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,KAAK,EAAE,UAAU,EAAE,WAAW,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAEvF,MAAM,WAAW,iBAAiB;IAChC,qDAAqD;IACrD,MAAM,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;IACpD,KAAK,CAAC,CAAC,GAAG,GAAG,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC;IACtE,OAAO,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC;IAC/D,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IACxB,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CAC3B"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=transaction.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"transaction.js","sourceRoot":"","sources":["../../src/types/transaction.ts"],"names":[],"mappings":""}
package/package.json ADDED
@@ -0,0 +1,93 @@
1
+ {
2
+ "name": "@fett/sql-translator",
3
+ "version": "0.0.1-beta",
4
+ "description": "SQL 兼容层:以 SQL 为统一查询语言的数据库兼容层(MySQL 5/8 / PostgreSQL / SQLite / MongoDB),支持 Node ≥ 22.5 与 Bun,内置连接池、任务队列(多线程)、结构检出",
5
+ "license": "ISC",
6
+ "author": "chrissong1994 <18557511748@163.com>",
7
+ "type": "module",
8
+ "main": "./lib/index.js",
9
+ "types": "./lib/index.d.ts",
10
+ "exports": {
11
+ ".": {
12
+ "types": "./lib/index.d.ts",
13
+ "import": "./lib/index.js",
14
+ "default": "./lib/index.js"
15
+ }
16
+ },
17
+ "files": [
18
+ "lib",
19
+ "patches",
20
+ "README.md"
21
+ ],
22
+ "engines": {
23
+ "node": ">=22.5.0",
24
+ "bun": ">=1.1.0"
25
+ },
26
+ "peerDependencies": {
27
+ "@synatic/noql": ">=5",
28
+ "knex": ">=3",
29
+ "mongodb": ">=6",
30
+ "mysql2": ">=3",
31
+ "node-sql-parser": ">=5",
32
+ "pg": ">=8"
33
+ },
34
+ "peerDependenciesMeta": {
35
+ "@synatic/noql": {
36
+ "optional": true
37
+ },
38
+ "knex": {
39
+ "optional": true
40
+ },
41
+ "mongodb": {
42
+ "optional": true
43
+ },
44
+ "mysql2": {
45
+ "optional": true
46
+ },
47
+ "node-sql-parser": {
48
+ "optional": true
49
+ },
50
+ "pg": {
51
+ "optional": true
52
+ }
53
+ },
54
+ "devDependencies": {
55
+ "@types/node": "^24.0.0",
56
+ "typescript": "^5.8.3",
57
+ "vitest": "^4.1.11"
58
+ },
59
+ "devEngines": {
60
+ "packageManager": {
61
+ "name": "pnpm",
62
+ "version": "^11.5.1",
63
+ "onFail": "download"
64
+ }
65
+ },
66
+ "keywords": [
67
+ "sql",
68
+ "database",
69
+ "mysql",
70
+ "postgresql",
71
+ "sqlite",
72
+ "mongodb",
73
+ "compatibility-layer"
74
+ ],
75
+ "publishConfig": {
76
+ "access": "public",
77
+ "registry": "https://registry.npmjs.org"
78
+ },
79
+ "scripts": {
80
+ "build": "tsc -p tsconfig.build.json",
81
+ "typecheck": "tsc -p tsconfig.json --noEmit",
82
+ "test": "vitest run",
83
+ "test:watch": "vitest",
84
+ "test:unit": "vitest run test/unit",
85
+ "test:integration": "vitest run test/integration",
86
+ "test:mysql": "vitest run test/integration/mysql.spec.ts",
87
+ "test:bun": "bun test --timeout 30000 test/unit test/integration",
88
+ "db:up": "docker compose up -d --wait",
89
+ "db:down": "docker compose down",
90
+ "db:init": "node scripts/init-fixtures.mjs",
91
+ "release": "pnpm test && pnpm build && pnpm publish --access public"
92
+ }
93
+ }