@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.
- package/README.md +191 -0
- package/lib/client/client.d.ts +59 -0
- package/lib/client/client.d.ts.map +1 -0
- package/lib/client/client.js +201 -0
- package/lib/client/client.js.map +1 -0
- package/lib/client/index.d.ts +15 -0
- package/lib/client/index.d.ts.map +1 -0
- package/lib/client/index.js +15 -0
- package/lib/client/index.js.map +1 -0
- package/lib/client/manager.d.ts +27 -0
- package/lib/client/manager.d.ts.map +1 -0
- package/lib/client/manager.js +73 -0
- package/lib/client/manager.js.map +1 -0
- package/lib/client/registry.d.ts +31 -0
- package/lib/client/registry.d.ts.map +1 -0
- package/lib/client/registry.js +128 -0
- package/lib/client/registry.js.map +1 -0
- package/lib/core/cache.d.ts +28 -0
- package/lib/core/cache.d.ts.map +1 -0
- package/lib/core/cache.js +58 -0
- package/lib/core/cache.js.map +1 -0
- package/lib/core/config.d.ts +16 -0
- package/lib/core/config.d.ts.map +1 -0
- package/lib/core/config.js +47 -0
- package/lib/core/config.js.map +1 -0
- package/lib/core/field-mapper/mysql.d.ts +42 -0
- package/lib/core/field-mapper/mysql.d.ts.map +1 -0
- package/lib/core/field-mapper/mysql.js +129 -0
- package/lib/core/field-mapper/mysql.js.map +1 -0
- package/lib/core/field-mapper/postgresql.d.ts +25 -0
- package/lib/core/field-mapper/postgresql.d.ts.map +1 -0
- package/lib/core/field-mapper/postgresql.js +121 -0
- package/lib/core/field-mapper/postgresql.js.map +1 -0
- package/lib/core/sql/normalize.d.ts +10 -0
- package/lib/core/sql/normalize.d.ts.map +1 -0
- package/lib/core/sql/normalize.js +121 -0
- package/lib/core/sql/normalize.js.map +1 -0
- package/lib/core/sql/pagination.d.ts +22 -0
- package/lib/core/sql/pagination.d.ts.map +1 -0
- package/lib/core/sql/pagination.js +61 -0
- package/lib/core/sql/pagination.js.map +1 -0
- package/lib/core/sql/statement.d.ts +28 -0
- package/lib/core/sql/statement.d.ts.map +1 -0
- package/lib/core/sql/statement.js +155 -0
- package/lib/core/sql/statement.js.map +1 -0
- package/lib/core/sql/table-mapper.d.ts +24 -0
- package/lib/core/sql/table-mapper.d.ts.map +1 -0
- package/lib/core/sql/table-mapper.js +113 -0
- package/lib/core/sql/table-mapper.js.map +1 -0
- package/lib/core/task-queue.d.ts +31 -0
- package/lib/core/task-queue.d.ts.map +1 -0
- package/lib/core/task-queue.js +185 -0
- package/lib/core/task-queue.js.map +1 -0
- package/lib/core/worker/bun-worker.d.ts +21 -0
- package/lib/core/worker/bun-worker.d.ts.map +1 -0
- package/lib/core/worker/bun-worker.js +93 -0
- package/lib/core/worker/bun-worker.js.map +1 -0
- package/lib/core/worker/index.d.ts +16 -0
- package/lib/core/worker/index.d.ts.map +1 -0
- package/lib/core/worker/index.js +16 -0
- package/lib/core/worker/index.js.map +1 -0
- package/lib/core/worker/node-worker.d.ts +19 -0
- package/lib/core/worker/node-worker.d.ts.map +1 -0
- package/lib/core/worker/node-worker.js +94 -0
- package/lib/core/worker/node-worker.js.map +1 -0
- package/lib/core/worker/task-runner-bun.d.ts +2 -0
- package/lib/core/worker/task-runner-bun.d.ts.map +1 -0
- package/lib/core/worker/task-runner-bun.js +18 -0
- package/lib/core/worker/task-runner-bun.js.map +1 -0
- package/lib/core/worker/task-runner.d.ts +2 -0
- package/lib/core/worker/task-runner.d.ts.map +1 -0
- package/lib/core/worker/task-runner.js +21 -0
- package/lib/core/worker/task-runner.js.map +1 -0
- package/lib/driver/index.d.ts +3 -0
- package/lib/driver/index.d.ts.map +1 -0
- package/lib/driver/index.js +16 -0
- package/lib/driver/index.js.map +1 -0
- package/lib/driver/interface.d.ts +39 -0
- package/lib/driver/interface.d.ts.map +1 -0
- package/lib/driver/interface.js +2 -0
- package/lib/driver/interface.js.map +1 -0
- package/lib/driver/mongodb/dml-translator.d.ts +21 -0
- package/lib/driver/mongodb/dml-translator.d.ts.map +1 -0
- package/lib/driver/mongodb/dml-translator.js +127 -0
- package/lib/driver/mongodb/dml-translator.js.map +1 -0
- package/lib/driver/mongodb/index.d.ts +27 -0
- package/lib/driver/mongodb/index.d.ts.map +1 -0
- package/lib/driver/mongodb/index.js +263 -0
- package/lib/driver/mongodb/index.js.map +1 -0
- package/lib/driver/mongodb/pool.d.ts +31 -0
- package/lib/driver/mongodb/pool.d.ts.map +1 -0
- package/lib/driver/mongodb/pool.js +96 -0
- package/lib/driver/mongodb/pool.js.map +1 -0
- package/lib/driver/mongodb/schema.d.ts +37 -0
- package/lib/driver/mongodb/schema.d.ts.map +1 -0
- package/lib/driver/mongodb/schema.js +238 -0
- package/lib/driver/mongodb/schema.js.map +1 -0
- package/lib/driver/mongodb/sql-translator.d.ts +19 -0
- package/lib/driver/mongodb/sql-translator.d.ts.map +1 -0
- package/lib/driver/mongodb/sql-translator.js +30 -0
- package/lib/driver/mongodb/sql-translator.js.map +1 -0
- package/lib/driver/mysql/index.d.ts +41 -0
- package/lib/driver/mysql/index.d.ts.map +1 -0
- package/lib/driver/mysql/index.js +338 -0
- package/lib/driver/mysql/index.js.map +1 -0
- package/lib/driver/mysql/pool.d.ts +46 -0
- package/lib/driver/mysql/pool.d.ts.map +1 -0
- package/lib/driver/mysql/pool.js +141 -0
- package/lib/driver/mysql/pool.js.map +1 -0
- package/lib/driver/mysql/version.d.ts +27 -0
- package/lib/driver/mysql/version.d.ts.map +1 -0
- package/lib/driver/mysql/version.js +77 -0
- package/lib/driver/mysql/version.js.map +1 -0
- package/lib/driver/postgresql/index.d.ts +34 -0
- package/lib/driver/postgresql/index.d.ts.map +1 -0
- package/lib/driver/postgresql/index.js +383 -0
- package/lib/driver/postgresql/index.js.map +1 -0
- package/lib/driver/postgresql/pool.d.ts +33 -0
- package/lib/driver/postgresql/pool.d.ts.map +1 -0
- package/lib/driver/postgresql/pool.js +104 -0
- package/lib/driver/postgresql/pool.js.map +1 -0
- package/lib/driver/registry.d.ts +16 -0
- package/lib/driver/registry.d.ts.map +1 -0
- package/lib/driver/registry.js +27 -0
- package/lib/driver/registry.js.map +1 -0
- package/lib/driver/sqlite/backend.d.ts +19 -0
- package/lib/driver/sqlite/backend.d.ts.map +1 -0
- package/lib/driver/sqlite/backend.js +5 -0
- package/lib/driver/sqlite/backend.js.map +1 -0
- package/lib/driver/sqlite/bun.d.ts +10 -0
- package/lib/driver/sqlite/bun.d.ts.map +1 -0
- package/lib/driver/sqlite/bun.js +36 -0
- package/lib/driver/sqlite/bun.js.map +1 -0
- package/lib/driver/sqlite/index.d.ts +49 -0
- package/lib/driver/sqlite/index.d.ts.map +1 -0
- package/lib/driver/sqlite/index.js +421 -0
- package/lib/driver/sqlite/index.js.map +1 -0
- package/lib/driver/sqlite/node.d.ts +10 -0
- package/lib/driver/sqlite/node.d.ts.map +1 -0
- package/lib/driver/sqlite/node.js +37 -0
- package/lib/driver/sqlite/node.js.map +1 -0
- package/lib/driver/sqlite/store.d.ts +13 -0
- package/lib/driver/sqlite/store.d.ts.map +1 -0
- package/lib/driver/sqlite/store.js +57 -0
- package/lib/driver/sqlite/store.js.map +1 -0
- package/lib/errors.d.ts +18 -0
- package/lib/errors.d.ts.map +1 -0
- package/lib/errors.js +24 -0
- package/lib/errors.js.map +1 -0
- package/lib/facade/engine.d.ts +29 -0
- package/lib/facade/engine.d.ts.map +1 -0
- package/lib/facade/engine.js +107 -0
- package/lib/facade/engine.js.map +1 -0
- package/lib/index.d.ts +41 -0
- package/lib/index.d.ts.map +1 -0
- package/lib/index.js +40 -0
- package/lib/index.js.map +1 -0
- package/lib/optional/static-source.d.ts +36 -0
- package/lib/optional/static-source.d.ts.map +1 -0
- package/lib/optional/static-source.js +141 -0
- package/lib/optional/static-source.js.map +1 -0
- package/lib/runtime.d.ts +12 -0
- package/lib/runtime.d.ts.map +1 -0
- package/lib/runtime.js +26 -0
- package/lib/runtime.js.map +1 -0
- package/lib/types/config.d.ts +146 -0
- package/lib/types/config.d.ts.map +1 -0
- package/lib/types/config.js +5 -0
- package/lib/types/config.js.map +1 -0
- package/lib/types/index.d.ts +7 -0
- package/lib/types/index.d.ts.map +1 -0
- package/lib/types/index.js +7 -0
- package/lib/types/index.js.map +1 -0
- package/lib/types/manager.d.ts +37 -0
- package/lib/types/manager.d.ts.map +1 -0
- package/lib/types/manager.js +5 -0
- package/lib/types/manager.js.map +1 -0
- package/lib/types/queue.d.ts +45 -0
- package/lib/types/queue.d.ts.map +1 -0
- package/lib/types/queue.js +5 -0
- package/lib/types/queue.js.map +1 -0
- package/lib/types/result.d.ts +61 -0
- package/lib/types/result.d.ts.map +1 -0
- package/lib/types/result.js +16 -0
- package/lib/types/result.js.map +1 -0
- package/lib/types/schema.d.ts +51 -0
- package/lib/types/schema.d.ts.map +1 -0
- package/lib/types/schema.js +5 -0
- package/lib/types/schema.js.map +1 -0
- package/lib/types/task.d.ts +48 -0
- package/lib/types/task.d.ts.map +1 -0
- package/lib/types/task.js +136 -0
- package/lib/types/task.js.map +1 -0
- package/lib/types/transaction.d.ts +13 -0
- package/lib/types/transaction.d.ts.map +1 -0
- package/lib/types/transaction.js +2 -0
- package/lib/types/transaction.js.map +1 -0
- package/package.json +93 -0
- package/patches/bson@7.3.2.patch +105 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/types/config.ts"],"names":[],"mappings":"AAAA;;GAEG"}
|
|
@@ -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 @@
|
|
|
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 @@
|
|
|
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 @@
|
|
|
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 @@
|
|
|
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 @@
|
|
|
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
|
+
}
|