@simplysm/orm-node 13.0.92 → 13.0.95

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 CHANGED
@@ -16,22 +16,20 @@ npm install pg pg-copy-streams # PostgreSQL
16
16
  npm install tedious # MSSQL / Azure SQL
17
17
  ```
18
18
 
19
- **의존성:** `@simplysm/core-common`, `@simplysm/orm-common`, `generic-pool`, `consola`
19
+ **의존성:** `@simplysm/core-common`, `@simplysm/orm-common`, `consola`
20
20
 
21
21
  ## 아키텍처 개요
22
22
 
23
23
  ```
24
24
  createOrm() -- 최상위 팩토리 (ORM 인스턴스)
25
25
  └─ NodeDbContextExecutor -- DbContextExecutor 구현체
26
- └─ createDbConn() -- 커넥션 풀에서 PooledDbConn 획득
27
- └─ PooledDbConn -- 래퍼
28
- └─ MysqlDbConn / PostgresqlDbConn / MssqlDbConn -- 실제 연결
26
+ └─ createDbConn() -- DB 연결 생성
27
+ └─ MysqlDbConn / PostgresqlDbConn / MssqlDbConn -- 실제 연결
29
28
  ```
30
29
 
31
30
  - `createOrm` -- `@simplysm/orm-common`의 `DbContext`와 DB 연결을 결합하는 고수준 API
32
31
  - `NodeDbContextExecutor` -- `QueryDef` → SQL 변환 및 실행을 담당하는 어댑터
33
- - `createDbConn` -- `generic-pool` 기반 커넥션 풀에서 연결을 획득
34
- - `PooledDbConn` -- 풀에서 빌린 물리 연결을 감싸는 래퍼 (반환 시 자동 롤백)
32
+ - `createDbConn` -- DB 연결 인스턴스를 생성
35
33
  - `MysqlDbConn` / `PostgresqlDbConn` / `MssqlDbConn` -- 각 DBMS별 실제 연결 구현
36
34
 
37
35
  ## 주요 사용법
@@ -159,7 +157,7 @@ function createOrm<TDef extends DbContextDef<any, any, any>>(
159
157
 
160
158
  ### `createDbConn(config): Promise<DbConn>`
161
159
 
162
- 커넥션 풀에서 DB 연결을 획득하여 반환한다. 동일 config에 대해 풀이 공유된다.
160
+ DB 연결 인스턴스를 생성하여 반환한다. 반환된 객체에 `connect()`를 호출해야 실제 연결이 수립된다.
163
161
 
164
162
  ```typescript
165
163
  function createDbConn(config: DbConnConfig): Promise<DbConn>;
@@ -209,8 +207,6 @@ type DbConnConfig = MysqlDbConnConfig | MssqlDbConnConfig | PostgresqlDbConnConf
209
207
  | `password` | `string` | 비밀번호 |
210
208
  | `database?` | `string` | 데이터베이스명 |
211
209
  | `defaultIsolationLevel?` | `IsolationLevel` | 기본 격리 수준 |
212
- | `pool?` | `DbPoolConfig` | 커넥션 풀 설정 |
213
-
214
210
  **MSSQL/PostgreSQL 전용:**
215
211
 
216
212
  | 필드 | 타입 | 설명 |
@@ -220,17 +216,6 @@ type DbConnConfig = MysqlDbConnConfig | MssqlDbConnConfig | PostgresqlDbConnConf
220
216
  **MSSQL 특수 dialect:**
221
217
  - `"mssql-azure"`: Azure SQL용. `encrypt: true`가 자동 적용됨.
222
218
 
223
- ### `DbPoolConfig` 인터페이스
224
-
225
- ```typescript
226
- interface DbPoolConfig {
227
- min?: number; // 최소 연결 수 (기본: 1)
228
- max?: number; // 최대 연결 수 (기본: 10)
229
- acquireTimeoutMillis?: number; // 획득 타임아웃 (기본: 30초)
230
- idleTimeoutMillis?: number; // 유휴 타임아웃 (기본: 30초)
231
- }
232
- ```
233
-
234
219
  ### `NodeDbContextExecutor`
235
220
 
236
221
  `@simplysm/orm-common`의 `DbContextExecutor` 인터페이스 구현체. `DbContext`가 내부적으로 사용한다.
@@ -255,21 +240,6 @@ class NodeDbContextExecutor implements DbContextExecutor {
255
240
  - `resultMetas`가 모두 `undefined`이면 → 결과 없는 쿼리로 판단하여 단일 배치 실행
256
241
  - `ResultMeta`가 있으면 → `parseQueryResult`로 타입 변환 적용
257
242
 
258
- ### `PooledDbConn`
259
-
260
- `generic-pool`의 풀에서 물리 연결을 빌려 사용하는 래퍼 클래스.
261
-
262
- ```typescript
263
- class PooledDbConn extends EventEmitter<{ close: void }> implements DbConn {
264
- constructor(pool: Pool<DbConn>, initialConfig: DbConnConfig, getLastCreateError?: () => Error | undefined);
265
- }
266
- ```
267
-
268
- **특징:**
269
- - `connect()`: 풀에서 물리 연결 획득
270
- - `close()`: 트랜잭션 진행 중이면 자동 롤백 후 풀에 반환 (실제 연결은 닫지 않음)
271
- - 물리 연결이 끊기면 `close` 이벤트 자동 전파
272
-
273
243
  ### DB 연결 구현 클래스
274
244
 
275
245
  | 클래스 | 드라이버 | dialect |
@@ -2,11 +2,8 @@ import type { DbConn, DbConnConfig } from "./types/db-conn";
2
2
  /**
3
3
  * Create DB connection
4
4
  *
5
- * Acquires and returns a connection from the connection pool.
6
- * Creates a new pool if one does not exist.
7
- *
8
5
  * @param config - Database connection configuration
9
- * @returns Pooled DB connection object
6
+ * @returns DB connection object (not yet connected — call connect() separately)
10
7
  */
11
8
  export declare function createDbConn(config: DbConnConfig): Promise<DbConn>;
12
9
  //# sourceMappingURL=create-db-conn.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"create-db-conn.d.ts","sourceRoot":"","sources":["..\\src\\create-db-conn.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AA2B5D;;;;;;;;GAQG;AACH,wBAAgB,YAAY,CAAC,MAAM,EAAE,YAAY,GAAG,OAAO,CAAC,MAAM,CAAC,CAMlE"}
1
+ {"version":3,"file":"create-db-conn.d.ts","sourceRoot":"","sources":["..\\src\\create-db-conn.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAoB5D;;;;;GAKG;AACH,wBAAsB,YAAY,CAAC,MAAM,EAAE,YAAY,GAAG,OAAO,CAAC,MAAM,CAAC,CAaxE"}
@@ -1,55 +1,8 @@
1
- import { createPool } from "generic-pool";
2
- import { PooledDbConn } from "./pooled-db-conn.js";
3
1
  import { MysqlDbConn } from "./connections/mysql-db-conn.js";
4
2
  import { MssqlDbConn } from "./connections/mssql-db-conn.js";
5
3
  import { PostgresqlDbConn } from "./connections/postgresql-db-conn.js";
6
- const poolMap = /* @__PURE__ */ new Map();
7
- const poolLastErrorMap = /* @__PURE__ */ new Map();
8
4
  const modules = {};
9
- function createDbConn(config) {
10
- const { pool, getLastCreateError } = getOrCreatePool(config);
11
- return Promise.resolve(new PooledDbConn(pool, config, getLastCreateError));
12
- }
13
- function getOrCreatePool(config) {
14
- const configKey = JSON.stringify(
15
- config,
16
- (_, value) => value != null && typeof value === "object" && !Array.isArray(value) ? Object.fromEntries(Object.entries(value).sort(([a], [b]) => a.localeCompare(b))) : value
17
- );
18
- if (!poolMap.has(configKey)) {
19
- const pool = createPool(
20
- {
21
- create: async () => {
22
- const conn = await createRawConnection(config);
23
- await conn.connect();
24
- return conn;
25
- },
26
- destroy: async (conn) => {
27
- await conn.close();
28
- },
29
- validate: (conn) => {
30
- return Promise.resolve(conn.isConnected);
31
- }
32
- },
33
- {
34
- min: config.pool?.min ?? 1,
35
- max: config.pool?.max ?? 10,
36
- acquireTimeoutMillis: config.pool?.acquireTimeoutMillis ?? 3e4,
37
- idleTimeoutMillis: config.pool?.idleTimeoutMillis ?? 3e4,
38
- testOnBorrow: true
39
- // [IMPORTANT] Whether to run validate when borrowing
40
- }
41
- );
42
- pool.on("factoryCreateError", (err) => {
43
- poolLastErrorMap.set(configKey, err);
44
- });
45
- poolMap.set(configKey, pool);
46
- }
47
- return {
48
- pool: poolMap.get(configKey),
49
- getLastCreateError: () => poolLastErrorMap.get(configKey)
50
- };
51
- }
52
- async function createRawConnection(config) {
5
+ async function createDbConn(config) {
53
6
  if (config.dialect === "mysql") {
54
7
  const mysql = await ensureModule("mysql");
55
8
  return new MysqlDbConn(mysql, config);
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../src/create-db-conn.ts"],
4
- "mappings": "AACA,SAAS,kBAAkB;AAE3B,SAAS,oBAAoB;AAC7B,SAAS,mBAAmB;AAC5B,SAAS,mBAAmB;AAC5B,SAAS,wBAAwB;AAUjC,MAAM,UAAU,oBAAI,IAA0B;AAG9C,MAAM,mBAAmB,oBAAI,IAAmB;AAGhD,MAAM,UAKF,CAAC;AAWE,SAAS,aAAa,QAAuC;AAElE,QAAM,EAAE,MAAM,mBAAmB,IAAI,gBAAgB,MAAM;AAG3D,SAAO,QAAQ,QAAQ,IAAI,aAAa,MAAM,QAAQ,kBAAkB,CAAC;AAC3E;AAEA,SAAS,gBAAgB,QAGvB;AAEA,QAAM,YAAY,KAAK;AAAA,IAAU;AAAA,IAAQ,CAAC,GAAG,UAC3C,SAAS,QAAQ,OAAO,UAAU,YAAY,CAAC,MAAM,QAAQ,KAAK,IAC9D,OAAO,YAAY,OAAO,QAAQ,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC,CAAC,IAC/E;AAAA,EACN;AAEA,MAAI,CAAC,QAAQ,IAAI,SAAS,GAAG;AAC3B,UAAM,OAAO;AAAA,MACX;AAAA,QACE,QAAQ,YAAY;AAClB,gBAAM,OAAO,MAAM,oBAAoB,MAAM;AAC7C,gBAAM,KAAK,QAAQ;AACnB,iBAAO;AAAA,QACT;AAAA,QACA,SAAS,OAAO,SAAS;AACvB,gBAAM,KAAK,MAAM;AAAA,QACnB;AAAA,QACA,UAAU,CAAC,SAAS;AAElB,iBAAO,QAAQ,QAAQ,KAAK,WAAW;AAAA,QACzC;AAAA,MACF;AAAA,MACA;AAAA,QACE,KAAK,OAAO,MAAM,OAAO;AAAA,QACzB,KAAK,OAAO,MAAM,OAAO;AAAA,QACzB,sBAAsB,OAAO,MAAM,wBAAwB;AAAA,QAC3D,mBAAmB,OAAO,MAAM,qBAAqB;AAAA,QACrD,cAAc;AAAA;AAAA,MAChB;AAAA,IACF;AAEA,SAAK,GAAG,sBAAsB,CAAC,QAAe;AAC5C,uBAAiB,IAAI,WAAW,GAAG;AAAA,IACrC,CAAC;AAED,YAAQ,IAAI,WAAW,IAAI;AAAA,EAC7B;AAEA,SAAO;AAAA,IACL,MAAM,QAAQ,IAAI,SAAS;AAAA,IAC3B,oBAAoB,MAAM,iBAAiB,IAAI,SAAS;AAAA,EAC1D;AACF;AAEA,eAAe,oBAAoB,QAAuC;AACxE,MAAI,OAAO,YAAY,SAAS;AAC9B,UAAM,QAAQ,MAAM,aAAa,OAAO;AACxC,WAAO,IAAI,YAAY,OAAO,MAAM;AAAA,EACtC,WAAW,OAAO,YAAY,cAAc;AAC1C,UAAM,KAAK,MAAM,aAAa,IAAI;AAClC,UAAM,gBAAgB,MAAM,aAAa,eAAe;AACxD,WAAO,IAAI,iBAAiB,IAAI,eAAe,MAAM;AAAA,EACvD,OAAO;AAEL,UAAM,UAAU,MAAM,aAAa,SAAS;AAC5C,WAAO,IAAI,YAAY,SAAS,MAAM;AAAA,EACxC;AACF;AAEA,eAAe,aACb,MAC2C;AAC3C,MAAI,QAAQ,IAAI,KAAK,MAAM;AACzB,QAAI,SAAS,SAAS;AACpB,cAAQ,QAAQ,MAAM,OAAO,gBAAgB;AAAA,IAC/C,WAAW,SAAS,MAAM;AACxB,cAAQ,KAAK,MAAM,OAAO,IAAI;AAAA,IAChC,WAAW,SAAS,iBAAiB;AACnC,cAAQ,gBAAgB,MAAM,OAAO,iBAAiB;AAAA,IACxD,OAAO;AACL,cAAQ,UAAU,MAAM,OAAO,SAAS;AAAA,IAC1C;AAAA,EACF;AACA,SAAO,QAAQ,IAAI;AACrB;",
4
+ "mappings": "AACA,SAAS,mBAAmB;AAC5B,SAAS,mBAAmB;AAC5B,SAAS,wBAAwB;AAUjC,MAAM,UAKF,CAAC;AAQL,eAAsB,aAAa,QAAuC;AACxE,MAAI,OAAO,YAAY,SAAS;AAC9B,UAAM,QAAQ,MAAM,aAAa,OAAO;AACxC,WAAO,IAAI,YAAY,OAAO,MAAM;AAAA,EACtC,WAAW,OAAO,YAAY,cAAc;AAC1C,UAAM,KAAK,MAAM,aAAa,IAAI;AAClC,UAAM,gBAAgB,MAAM,aAAa,eAAe;AACxD,WAAO,IAAI,iBAAiB,IAAI,eAAe,MAAM;AAAA,EACvD,OAAO;AAEL,UAAM,UAAU,MAAM,aAAa,SAAS;AAC5C,WAAO,IAAI,YAAY,SAAS,MAAM;AAAA,EACxC;AACF;AAEA,eAAe,aACb,MAC2C;AAC3C,MAAI,QAAQ,IAAI,KAAK,MAAM;AACzB,QAAI,SAAS,SAAS;AACpB,cAAQ,QAAQ,MAAM,OAAO,gBAAgB;AAAA,IAC/C,WAAW,SAAS,MAAM;AACxB,cAAQ,KAAK,MAAM,OAAO,IAAI;AAAA,IAChC,WAAW,SAAS,iBAAiB;AACnC,cAAQ,gBAAgB,MAAM,OAAO,iBAAiB;AAAA,IACxD,OAAO;AACL,cAAQ,UAAU,MAAM,OAAO,SAAS;AAAA,IAC1C;AAAA,EACF;AACA,SAAO,QAAQ,IAAI;AACrB;",
5
5
  "names": []
6
6
  }
package/dist/index.d.ts CHANGED
@@ -4,6 +4,5 @@ export * from "./connections/mysql-db-conn";
4
4
  export * from "./connections/postgresql-db-conn";
5
5
  export * from "./create-db-conn";
6
6
  export * from "./node-db-context-executor";
7
- export * from "./pooled-db-conn";
8
7
  export * from "./create-orm";
9
8
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["..\\src\\index.ts"],"names":[],"mappings":"AACA,cAAc,iBAAiB,CAAC;AAGhC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,6BAA6B,CAAC;AAC5C,cAAc,kCAAkC,CAAC;AAGjD,cAAc,kBAAkB,CAAC;AACjC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,kBAAkB,CAAC;AACjC,cAAc,cAAc,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["..\\src\\index.ts"],"names":[],"mappings":"AACA,cAAc,iBAAiB,CAAC;AAGhC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,6BAA6B,CAAC;AAC5C,cAAc,kCAAkC,CAAC;AAGjD,cAAc,kBAAkB,CAAC;AACjC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,cAAc,CAAC"}
package/dist/index.js CHANGED
@@ -4,6 +4,5 @@ export * from "./connections/mysql-db-conn.js";
4
4
  export * from "./connections/postgresql-db-conn.js";
5
5
  export * from "./create-db-conn.js";
6
6
  export * from "./node-db-context-executor.js";
7
- export * from "./pooled-db-conn.js";
8
7
  export * from "./create-orm.js";
9
8
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../src/index.ts"],
4
- "mappings": "AACA,cAAc;AAGd,cAAc;AACd,cAAc;AACd,cAAc;AAGd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;",
4
+ "mappings": "AACA,cAAc;AAGd,cAAc;AACd,cAAc;AACd,cAAc;AAGd,cAAc;AACd,cAAc;AACd,cAAc;",
5
5
  "names": []
6
6
  }
@@ -12,15 +12,11 @@ export declare class NodeDbContextExecutor implements DbContextExecutor {
12
12
  constructor(_config: DbConnConfig);
13
13
  /**
14
14
  * Establish DB connection
15
- *
16
- * Acquires connection from connection pool and activates the connection state.
17
15
  */
18
16
  connect(): Promise<void>;
19
17
  /**
20
18
  * Close DB connection
21
19
  *
22
- * Returns connection to the connection pool.
23
- *
24
20
  * @throws {Error} When not connected
25
21
  */
26
22
  close(): Promise<void>;
@@ -1 +1 @@
1
- {"version":3,"file":"node-db-context-executor.d.ts","sourceRoot":"","sources":["..\\src\\node-db-context-executor.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,iBAAiB,EACjB,cAAc,EACd,QAAQ,EACR,UAAU,EAEV,UAAU,EACV,UAAU,EACX,MAAM,sBAAsB,CAAC;AAE9B,OAAO,KAAK,EAAU,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAI5D;;;;GAIG;AACH,qBAAa,qBAAsB,YAAW,iBAAiB;IAIjD,OAAO,CAAC,QAAQ,CAAC,OAAO;IAHpC,OAAO,CAAC,KAAK,CAAC,CAAS;IACvB,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAU;gBAEN,OAAO,EAAE,YAAY;IAIlD;;;;OAIG;IACG,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAK9B;;;;;;OAMG;IACG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAM5B;;;;;OAKG;IACG,gBAAgB,CAAC,cAAc,CAAC,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC;IAKtE;;;;OAIG;IACG,iBAAiB,IAAI,OAAO,CAAC,IAAI,CAAC;IAKxC;;;;OAIG;IACG,mBAAmB,IAAI,OAAO,CAAC,IAAI,CAAC;IAK1C;;;;;;;OAOG;IACG,mBAAmB,CACvB,KAAK,EAAE,MAAM,EACb,MAAM,CAAC,EAAE,OAAO,EAAE,GACjB,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,EAAE,CAAC;IAKvC;;;;;;;OAOG;IACG,UAAU,CACd,SAAS,EAAE,MAAM,EACjB,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,EACvC,OAAO,EAAE,UAAU,EAAE,GACpB,OAAO,CAAC,IAAI,CAAC;IAKhB;;;;;;;;;OASG;IACG,WAAW,CAAC,CAAC,GAAG,UAAU,EAC9B,IAAI,EAAE,QAAQ,EAAE,EAChB,WAAW,CAAC,EAAE,CAAC,UAAU,GAAG,SAAS,CAAC,EAAE,GACvC,OAAO,CAAC,CAAC,EAAE,EAAE,CAAC;IAqCjB,OAAO,CAAC,YAAY;CAMrB"}
1
+ {"version":3,"file":"node-db-context-executor.d.ts","sourceRoot":"","sources":["..\\src\\node-db-context-executor.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,iBAAiB,EACjB,cAAc,EACd,QAAQ,EACR,UAAU,EAEV,UAAU,EACV,UAAU,EACX,MAAM,sBAAsB,CAAC;AAE9B,OAAO,KAAK,EAAU,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAI5D;;;;GAIG;AACH,qBAAa,qBAAsB,YAAW,iBAAiB;IAIjD,OAAO,CAAC,QAAQ,CAAC,OAAO;IAHpC,OAAO,CAAC,KAAK,CAAC,CAAS;IACvB,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAU;gBAEN,OAAO,EAAE,YAAY;IAIlD;;OAEG;IACG,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAK9B;;;;OAIG;IACG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAM5B;;;;;OAKG;IACG,gBAAgB,CAAC,cAAc,CAAC,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC;IAKtE;;;;OAIG;IACG,iBAAiB,IAAI,OAAO,CAAC,IAAI,CAAC;IAKxC;;;;OAIG;IACG,mBAAmB,IAAI,OAAO,CAAC,IAAI,CAAC;IAK1C;;;;;;;OAOG;IACG,mBAAmB,CACvB,KAAK,EAAE,MAAM,EACb,MAAM,CAAC,EAAE,OAAO,EAAE,GACjB,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,EAAE,CAAC;IAKvC;;;;;;;OAOG;IACG,UAAU,CACd,SAAS,EAAE,MAAM,EACjB,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,EACvC,OAAO,EAAE,UAAU,EAAE,GACpB,OAAO,CAAC,IAAI,CAAC;IAKhB;;;;;;;;;OASG;IACG,WAAW,CAAC,CAAC,GAAG,UAAU,EAC9B,IAAI,EAAE,QAAQ,EAAE,EAChB,WAAW,CAAC,EAAE,CAAC,UAAU,GAAG,SAAS,CAAC,EAAE,GACvC,OAAO,CAAC,CAAC,EAAE,EAAE,CAAC;IAqCjB,OAAO,CAAC,YAAY;CAMrB"}
@@ -11,8 +11,6 @@ class NodeDbContextExecutor {
11
11
  _dialect;
12
12
  /**
13
13
  * Establish DB connection
14
- *
15
- * Acquires connection from connection pool and activates the connection state.
16
14
  */
17
15
  async connect() {
18
16
  this._conn = await createDbConn(this._config);
@@ -21,8 +19,6 @@ class NodeDbContextExecutor {
21
19
  /**
22
20
  * Close DB connection
23
21
  *
24
- * Returns connection to the connection pool.
25
- *
26
22
  * @throws {Error} When not connected
27
23
  */
28
24
  async close() {
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../src/node-db-context-executor.ts"],
4
- "mappings": "AAAA,SAAS,eAAe;AAUxB,SAAS,oBAAoB,wBAAwB;AAErD,SAAS,gBAAgB,4BAA4B;AACrD,SAAS,oBAAoB;AAOtB,MAAM,sBAAmD;AAAA,EAI9D,YAA6B,SAAuB;AAAvB;AAC3B,SAAK,WAAW,qBAAqB,OAAO;AAAA,EAC9C;AAAA,EALQ;AAAA,EACS;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAWjB,MAAM,UAAyB;AAC7B,SAAK,QAAQ,MAAM,aAAa,KAAK,OAAO;AAC5C,UAAM,KAAK,MAAM,QAAQ;AAAA,EAC3B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,MAAM,QAAuB;AAC3B,UAAM,OAAO,KAAK,aAAa;AAC/B,UAAM,KAAK,MAAM;AACjB,SAAK,QAAQ;AAAA,EACf;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,MAAM,iBAAiB,gBAAgD;AACrE,UAAM,OAAO,KAAK,aAAa;AAC/B,UAAM,KAAK,iBAAiB,cAAc;AAAA,EAC5C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,MAAM,oBAAmC;AACvC,UAAM,OAAO,KAAK,aAAa;AAC/B,UAAM,KAAK,kBAAkB;AAAA,EAC/B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,MAAM,sBAAqC;AACzC,UAAM,OAAO,KAAK,aAAa;AAC/B,UAAM,KAAK,oBAAoB;AAAA,EACjC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUA,MAAM,oBACJ,OACA,QACsC;AACtC,UAAM,OAAO,KAAK,aAAa;AAC/B,WAAO,KAAK,oBAAoB,OAAO,MAAM;AAAA,EAC/C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUA,MAAM,WACJ,WACA,aACA,SACe;AACf,UAAM,OAAO,KAAK,aAAa;AAC/B,UAAM,KAAK,WAAW,WAAW,aAAa,OAAO;AAAA,EACvD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAYA,MAAM,YACJ,MACA,aACgB;AAChB,UAAM,OAAO,KAAK,aAAa;AAE/B,UAAM,UAAU,mBAAmB,KAAK,QAAQ;AAIhD,QAAI,eAAe,QAAQ,YAAY,MAAM,CAAC,SAAS,QAAQ,IAAI,GAAG;AACpE,YAAM,cAAc,KAAK,IAAI,CAAC,QAAQ,QAAQ,MAAM,GAAG,EAAE,GAAG,EAAE,KAAK,IAAI;AACvE,YAAM,KAAK,QAAQ,CAAC,WAAW,CAAC;AAChC,aAAO,KAAK,IAAI,MAAM,CAAC,CAAC;AAAA,IAC1B;AAGA,UAAM,UAAiB,CAAC;AACxB,aAAS,IAAI,GAAG,IAAI,KAAK,QAAQ,KAAK;AACpC,YAAM,MAAM,KAAK,CAAC;AAClB,YAAM,OAAO,cAAc,CAAC;AAC5B,YAAM,cAAc,QAAQ,MAAM,GAAG;AAErC,YAAM,aAAa,MAAM,KAAK,QAAQ,CAAC,YAAY,GAAG,CAAC;AAGvD,YAAM,kBACJ,YAAY,kBAAkB,OAAO,WAAW,YAAY,cAAc,IAAI,WAAW,CAAC;AAE5F,UAAI,QAAQ,MAAM;AAChB,cAAM,SAAS,MAAM,iBAAoB,iBAAiB,IAAI;AAC9D,gBAAQ,KAAK,UAAU,CAAC,CAAC;AAAA,MAC3B,OAAO;AACL,gBAAQ,KAAK,eAAsB;AAAA,MACrC;AAAA,IACF;AAEA,WAAO;AAAA,EACT;AAAA,EAEQ,eAAuB;AAC7B,QAAI,KAAK,SAAS,MAAM;AACtB,YAAM,IAAI,QAAQ,eAAe,aAAa;AAAA,IAChD;AACA,WAAO,KAAK;AAAA,EACd;AACF;",
4
+ "mappings": "AAAA,SAAS,eAAe;AAUxB,SAAS,oBAAoB,wBAAwB;AAErD,SAAS,gBAAgB,4BAA4B;AACrD,SAAS,oBAAoB;AAOtB,MAAM,sBAAmD;AAAA,EAI9D,YAA6B,SAAuB;AAAvB;AAC3B,SAAK,WAAW,qBAAqB,OAAO;AAAA,EAC9C;AAAA,EALQ;AAAA,EACS;AAAA;AAAA;AAAA;AAAA,EASjB,MAAM,UAAyB;AAC7B,SAAK,QAAQ,MAAM,aAAa,KAAK,OAAO;AAC5C,UAAM,KAAK,MAAM,QAAQ;AAAA,EAC3B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,MAAM,QAAuB;AAC3B,UAAM,OAAO,KAAK,aAAa;AAC/B,UAAM,KAAK,MAAM;AACjB,SAAK,QAAQ;AAAA,EACf;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,MAAM,iBAAiB,gBAAgD;AACrE,UAAM,OAAO,KAAK,aAAa;AAC/B,UAAM,KAAK,iBAAiB,cAAc;AAAA,EAC5C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,MAAM,oBAAmC;AACvC,UAAM,OAAO,KAAK,aAAa;AAC/B,UAAM,KAAK,kBAAkB;AAAA,EAC/B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,MAAM,sBAAqC;AACzC,UAAM,OAAO,KAAK,aAAa;AAC/B,UAAM,KAAK,oBAAoB;AAAA,EACjC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUA,MAAM,oBACJ,OACA,QACsC;AACtC,UAAM,OAAO,KAAK,aAAa;AAC/B,WAAO,KAAK,oBAAoB,OAAO,MAAM;AAAA,EAC/C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUA,MAAM,WACJ,WACA,aACA,SACe;AACf,UAAM,OAAO,KAAK,aAAa;AAC/B,UAAM,KAAK,WAAW,WAAW,aAAa,OAAO;AAAA,EACvD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAYA,MAAM,YACJ,MACA,aACgB;AAChB,UAAM,OAAO,KAAK,aAAa;AAE/B,UAAM,UAAU,mBAAmB,KAAK,QAAQ;AAIhD,QAAI,eAAe,QAAQ,YAAY,MAAM,CAAC,SAAS,QAAQ,IAAI,GAAG;AACpE,YAAM,cAAc,KAAK,IAAI,CAAC,QAAQ,QAAQ,MAAM,GAAG,EAAE,GAAG,EAAE,KAAK,IAAI;AACvE,YAAM,KAAK,QAAQ,CAAC,WAAW,CAAC;AAChC,aAAO,KAAK,IAAI,MAAM,CAAC,CAAC;AAAA,IAC1B;AAGA,UAAM,UAAiB,CAAC;AACxB,aAAS,IAAI,GAAG,IAAI,KAAK,QAAQ,KAAK;AACpC,YAAM,MAAM,KAAK,CAAC;AAClB,YAAM,OAAO,cAAc,CAAC;AAC5B,YAAM,cAAc,QAAQ,MAAM,GAAG;AAErC,YAAM,aAAa,MAAM,KAAK,QAAQ,CAAC,YAAY,GAAG,CAAC;AAGvD,YAAM,kBACJ,YAAY,kBAAkB,OAAO,WAAW,YAAY,cAAc,IAAI,WAAW,CAAC;AAE5F,UAAI,QAAQ,MAAM;AAChB,cAAM,SAAS,MAAM,iBAAoB,iBAAiB,IAAI;AAC9D,gBAAQ,KAAK,UAAU,CAAC,CAAC;AAAA,MAC3B,OAAO;AACL,gBAAQ,KAAK,eAAsB;AAAA,MACrC;AAAA,IACF;AAEA,WAAO;AAAA,EACT;AAAA,EAEQ,eAAuB;AAC7B,QAAI,KAAK,SAAS,MAAM;AACtB,YAAM,IAAI,QAAQ,eAAe,aAAa;AAAA,IAChD;AACA,WAAO,KAAK;AAAA,EACd;AACF;",
5
5
  "names": []
6
6
  }
@@ -91,26 +91,6 @@ export interface DbConn extends EventEmitter<{
91
91
  */
92
92
  bulkInsert(tableName: string, columnMetas: Record<string, ColumnMeta>, records: Record<string, unknown>[]): Promise<void>;
93
93
  }
94
- /**
95
- * Connection pool configuration
96
- *
97
- * @remarks
98
- * Default values for each setting:
99
- * - min: 1 (minimum connection count)
100
- * - max: 10 (maximum connection count)
101
- * - acquireTimeoutMillis: 30000 (connection acquisition timeout)
102
- * - idleTimeoutMillis: 30000 (idle connection timeout)
103
- */
104
- export interface DbPoolConfig {
105
- /** Minimum connection count (default: 1) */
106
- min?: number;
107
- /** Maximum connection count (default: 10) */
108
- max?: number;
109
- /** Connection acquisition timeout (milliseconds, default: 30000) */
110
- acquireTimeoutMillis?: number;
111
- /** Idle connection timeout (milliseconds, default: 30000) */
112
- idleTimeoutMillis?: number;
113
- }
114
94
  /**
115
95
  * DB connection configuration type (branching by dialect)
116
96
  */
@@ -126,7 +106,6 @@ export interface MysqlDbConnConfig {
126
106
  password: string;
127
107
  database?: string;
128
108
  defaultIsolationLevel?: IsolationLevel;
129
- pool?: DbPoolConfig;
130
109
  }
131
110
  /**
132
111
  * MSSQL connection configuration
@@ -140,7 +119,6 @@ export interface MssqlDbConnConfig {
140
119
  database?: string;
141
120
  schema?: string;
142
121
  defaultIsolationLevel?: IsolationLevel;
143
- pool?: DbPoolConfig;
144
122
  }
145
123
  /**
146
124
  * PostgreSQL connection configuration
@@ -154,7 +132,6 @@ export interface PostgresqlDbConnConfig {
154
132
  database?: string;
155
133
  schema?: string;
156
134
  defaultIsolationLevel?: IsolationLevel;
157
- pool?: DbPoolConfig;
158
135
  }
159
136
  /**
160
137
  * Extract Dialect from DbConnConfig
@@ -1 +1 @@
1
- {"version":3,"file":"db-conn.d.ts","sourceRoot":"","sources":["..\\..\\src\\types\\db-conn.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"db-conn.d.ts","sourceRoot":"","sources":["..\\..\\src\\types\\db-conn.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../src/types/db-conn.ts"],
4
- "mappings": "AAUO,MAAM,0BAA0B,KAAK;AAKrC,MAAM,0BAA0B,KAAK,KAAK;AAK1C,MAAM,iBAAiB;AAAA,EAC5B,eAAe;AAAA,EACf,mBAAmB;AACrB;AA4KO,SAAS,qBAAqB,QAA+B;AAClE,MAAI,OAAO,YAAY,eAAe;AACpC,WAAO;AAAA,EACT;AACA,SAAO,OAAO;AAChB;",
4
+ "mappings": "AAUO,MAAM,0BAA0B,KAAK;AAKrC,MAAM,0BAA0B,KAAK,KAAK;AAK1C,MAAM,iBAAiB;AAAA,EAC5B,eAAe;AAAA,EACf,mBAAmB;AACrB;AAoJO,SAAS,qBAAqB,QAA+B;AAClE,MAAI,OAAO,YAAY,eAAe;AACpC,WAAO;AAAA,EACT;AACA,SAAO,OAAO;AAChB;",
5
5
  "names": []
6
6
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@simplysm/orm-node",
3
- "version": "13.0.92",
3
+ "version": "13.0.95",
4
4
  "description": "Simplysm package - ORM module (node)",
5
5
  "author": "simplysm",
6
6
  "license": "Apache-2.0",
@@ -20,9 +20,8 @@
20
20
  "sideEffects": false,
21
21
  "dependencies": {
22
22
  "consola": "^3.4.2",
23
- "generic-pool": "^3.9.0",
24
- "@simplysm/core-common": "13.0.92",
25
- "@simplysm/orm-common": "13.0.92"
23
+ "@simplysm/core-common": "13.0.95",
24
+ "@simplysm/orm-common": "13.0.95"
26
25
  },
27
26
  "devDependencies": {
28
27
  "@types/pg": "^8.18.0",
@@ -1,7 +1,4 @@
1
- import type { Pool } from "generic-pool";
2
- import { createPool } from "generic-pool";
3
1
  import type { DbConn, DbConnConfig } from "./types/db-conn";
4
- import { PooledDbConn } from "./pooled-db-conn";
5
2
  import { MysqlDbConn } from "./connections/mysql-db-conn";
6
3
  import { MssqlDbConn } from "./connections/mssql-db-conn";
7
4
  import { PostgresqlDbConn } from "./connections/postgresql-db-conn";
@@ -9,16 +6,10 @@ import { PostgresqlDbConn } from "./connections/postgresql-db-conn";
9
6
  /**
10
7
  * DB connection factory
11
8
  *
12
- * Creates database connection instances and manages pooling.
9
+ * Creates database connection instances.
13
10
  * Supports MSSQL, MySQL, and PostgreSQL.
14
11
  */
15
12
 
16
- // Cache connection pools by configuration
17
- const poolMap = new Map<string, Pool<DbConn>>();
18
-
19
- // Cache last error when pool creation fails (by configKey)
20
- const poolLastErrorMap = new Map<string, Error>();
21
-
22
13
  // Lazy-loaded module cache
23
14
  const modules: {
24
15
  tedious?: typeof import("tedious");
@@ -30,70 +21,10 @@ const modules: {
30
21
  /**
31
22
  * Create DB connection
32
23
  *
33
- * Acquires and returns a connection from the connection pool.
34
- * Creates a new pool if one does not exist.
35
- *
36
24
  * @param config - Database connection configuration
37
- * @returns Pooled DB connection object
25
+ * @returns DB connection object (not yet connected — call connect() separately)
38
26
  */
39
- export function createDbConn(config: DbConnConfig): Promise<DbConn> {
40
- // 1. Get pool (create if not exists)
41
- const { pool, getLastCreateError } = getOrCreatePool(config);
42
-
43
- // 2. Return wrapper object
44
- return Promise.resolve(new PooledDbConn(pool, config, getLastCreateError));
45
- }
46
-
47
- function getOrCreatePool(config: DbConnConfig): {
48
- pool: Pool<DbConn>;
49
- getLastCreateError: () => Error | undefined;
50
- } {
51
- // Convert object to string key (sort nested objects to ensure consistent keys for identical configurations)
52
- const configKey = JSON.stringify(config, (_, value: unknown) =>
53
- value != null && typeof value === "object" && !Array.isArray(value)
54
- ? Object.fromEntries(Object.entries(value).sort(([a], [b]) => a.localeCompare(b)))
55
- : value,
56
- );
57
-
58
- if (!poolMap.has(configKey)) {
59
- const pool = createPool<DbConn>(
60
- {
61
- create: async () => {
62
- const conn = await createRawConnection(config);
63
- await conn.connect();
64
- return conn;
65
- },
66
- destroy: async (conn) => {
67
- await conn.close(); // Close actual connection when removed from pool
68
- },
69
- validate: (conn) => {
70
- // Check connection status on acquisition (Pool will dispose and recreate if disconnected)
71
- return Promise.resolve(conn.isConnected);
72
- },
73
- },
74
- {
75
- min: config.pool?.min ?? 1,
76
- max: config.pool?.max ?? 10,
77
- acquireTimeoutMillis: config.pool?.acquireTimeoutMillis ?? 30000,
78
- idleTimeoutMillis: config.pool?.idleTimeoutMillis ?? 30000,
79
- testOnBorrow: true, // [IMPORTANT] Whether to run validate when borrowing
80
- },
81
- );
82
-
83
- pool.on("factoryCreateError", (err: Error) => {
84
- poolLastErrorMap.set(configKey, err);
85
- });
86
-
87
- poolMap.set(configKey, pool);
88
- }
89
-
90
- return {
91
- pool: poolMap.get(configKey)!,
92
- getLastCreateError: () => poolLastErrorMap.get(configKey),
93
- };
94
- }
95
-
96
- async function createRawConnection(config: DbConnConfig): Promise<DbConn> {
27
+ export async function createDbConn(config: DbConnConfig): Promise<DbConn> {
97
28
  if (config.dialect === "mysql") {
98
29
  const mysql = await ensureModule("mysql");
99
30
  return new MysqlDbConn(mysql, config);
package/src/index.ts CHANGED
@@ -9,5 +9,4 @@ export * from "./connections/postgresql-db-conn";
9
9
  // Core
10
10
  export * from "./create-db-conn";
11
11
  export * from "./node-db-context-executor";
12
- export * from "./pooled-db-conn";
13
12
  export * from "./create-orm";
@@ -28,8 +28,6 @@ export class NodeDbContextExecutor implements DbContextExecutor {
28
28
 
29
29
  /**
30
30
  * Establish DB connection
31
- *
32
- * Acquires connection from connection pool and activates the connection state.
33
31
  */
34
32
  async connect(): Promise<void> {
35
33
  this._conn = await createDbConn(this._config);
@@ -39,8 +37,6 @@ export class NodeDbContextExecutor implements DbContextExecutor {
39
37
  /**
40
38
  * Close DB connection
41
39
  *
42
- * Returns connection to the connection pool.
43
- *
44
40
  * @throws {Error} When not connected
45
41
  */
46
42
  async close(): Promise<void> {
@@ -120,27 +120,6 @@ export interface DbConn extends EventEmitter<{ close: void }> {
120
120
  // DbConnConfig Types
121
121
  // ============================================
122
122
 
123
- /**
124
- * Connection pool configuration
125
- *
126
- * @remarks
127
- * Default values for each setting:
128
- * - min: 1 (minimum connection count)
129
- * - max: 10 (maximum connection count)
130
- * - acquireTimeoutMillis: 30000 (connection acquisition timeout)
131
- * - idleTimeoutMillis: 30000 (idle connection timeout)
132
- */
133
- export interface DbPoolConfig {
134
- /** Minimum connection count (default: 1) */
135
- min?: number;
136
- /** Maximum connection count (default: 10) */
137
- max?: number;
138
- /** Connection acquisition timeout (milliseconds, default: 30000) */
139
- acquireTimeoutMillis?: number;
140
- /** Idle connection timeout (milliseconds, default: 30000) */
141
- idleTimeoutMillis?: number;
142
- }
143
-
144
123
  /**
145
124
  * DB connection configuration type (branching by dialect)
146
125
  */
@@ -157,7 +136,6 @@ export interface MysqlDbConnConfig {
157
136
  password: string;
158
137
  database?: string;
159
138
  defaultIsolationLevel?: IsolationLevel;
160
- pool?: DbPoolConfig;
161
139
  }
162
140
 
163
141
  /**
@@ -172,7 +150,6 @@ export interface MssqlDbConnConfig {
172
150
  database?: string;
173
151
  schema?: string;
174
152
  defaultIsolationLevel?: IsolationLevel;
175
- pool?: DbPoolConfig;
176
153
  }
177
154
 
178
155
  /**
@@ -187,7 +164,6 @@ export interface PostgresqlDbConnConfig {
187
164
  database?: string;
188
165
  schema?: string;
189
166
  defaultIsolationLevel?: IsolationLevel;
190
- pool?: DbPoolConfig;
191
167
  }
192
168
 
193
169
  /**
@@ -1,80 +0,0 @@
1
- import { EventEmitter } from "@simplysm/core-common";
2
- import type { Pool } from "generic-pool";
3
- import type { ColumnMeta, IsolationLevel } from "@simplysm/orm-common";
4
- import { type DbConn, type DbConnConfig } from "./types/db-conn";
5
- /**
6
- * DB connection wrapper managed by connection pool
7
- *
8
- * Supports connection pooling using the generic-pool library.
9
- * Acquires and returns actual physical connections from/to the pool.
10
- */
11
- export declare class PooledDbConn extends EventEmitter<{
12
- close: void;
13
- }> implements DbConn {
14
- private readonly _pool;
15
- private readonly _initialConfig;
16
- private readonly _getLastCreateError?;
17
- private _rawConn?;
18
- constructor(_pool: Pool<DbConn>, _initialConfig: DbConnConfig, _getLastCreateError?: (() => Error | undefined) | undefined);
19
- get config(): DbConnConfig;
20
- get isConnected(): boolean;
21
- get isInTransaction(): boolean;
22
- /**
23
- * Acquire DB connection from pool
24
- *
25
- * @throws {SdError} When already connected
26
- */
27
- connect(): Promise<void>;
28
- /**
29
- * Return DB connection to pool (does not terminate actual connection)
30
- */
31
- close(): Promise<void>;
32
- private readonly _onRawConnClose;
33
- /**
34
- * Begin transaction
35
- *
36
- * @param isolationLevel - Transaction isolation level
37
- * @throws {SdError} When connection is not acquired
38
- */
39
- beginTransaction(isolationLevel?: IsolationLevel): Promise<void>;
40
- /**
41
- * Commit transaction
42
- *
43
- * @throws {SdError} When connection is not acquired
44
- */
45
- commitTransaction(): Promise<void>;
46
- /**
47
- * Rollback transaction
48
- *
49
- * @throws {SdError} When connection is not acquired
50
- */
51
- rollbackTransaction(): Promise<void>;
52
- /**
53
- * Execute SQL query
54
- *
55
- * @param queries - SQL query array to execute
56
- * @returns Result array for each query
57
- * @throws {SdError} When connection is not acquired
58
- */
59
- execute(queries: string[]): Promise<Record<string, unknown>[][]>;
60
- /**
61
- * Execute parameterized SQL query
62
- *
63
- * @param query - SQL query string
64
- * @param params - Query parameter array
65
- * @returns Query result array
66
- * @throws {SdError} When connection is not acquired
67
- */
68
- executeParametrized(query: string, params?: unknown[]): Promise<Record<string, unknown>[][]>;
69
- /**
70
- * Bulk insert data (using native bulk API)
71
- *
72
- * @param tableName - Target table name
73
- * @param columnMetas - Column metadata
74
- * @param records - Record array to insert
75
- * @throws {SdError} When connection is not acquired
76
- */
77
- bulkInsert(tableName: string, columnMetas: Record<string, ColumnMeta>, records: Record<string, unknown>[]): Promise<void>;
78
- private _requireRawConn;
79
- }
80
- //# sourceMappingURL=pooled-db-conn.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"pooled-db-conn.d.ts","sourceRoot":"","sources":["..\\src\\pooled-db-conn.ts"],"names":[],"mappings":"AACA,OAAO,EAAW,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAC9D,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,cAAc,CAAC;AACzC,OAAO,KAAK,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACvE,OAAO,EAAkB,KAAK,MAAM,EAAE,KAAK,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAIjF;;;;;GAKG;AACH,qBAAa,YAAa,SAAQ,YAAY,CAAC;IAAE,KAAK,EAAE,IAAI,CAAA;CAAE,CAAE,YAAW,MAAM;IAK7E,OAAO,CAAC,QAAQ,CAAC,KAAK;IACtB,OAAO,CAAC,QAAQ,CAAC,cAAc;IAC/B,OAAO,CAAC,QAAQ,CAAC,mBAAmB,CAAC;IALvC,OAAO,CAAC,QAAQ,CAAC,CAAS;gBAGP,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,EACnB,cAAc,EAAE,YAAY,EAC5B,mBAAmB,CAAC,GAAE,MAAM,KAAK,GAAG,SAAS,aAAA;IAMhE,IAAI,MAAM,IAAI,YAAY,CAEzB;IAGD,IAAI,WAAW,IAAI,OAAO,CAEzB;IAGD,IAAI,eAAe,IAAI,OAAO,CAE7B;IAED;;;;OAIG;IACG,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAsB9B;;OAEG;IACG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAyB5B,OAAO,CAAC,QAAQ,CAAC,eAAe,CAK9B;IAIF;;;;;OAKG;IACG,gBAAgB,CAAC,cAAc,CAAC,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC;IAKtE;;;;OAIG;IACG,iBAAiB,IAAI,OAAO,CAAC,IAAI,CAAC;IAKxC;;;;OAIG;IACG,mBAAmB,IAAI,OAAO,CAAC,IAAI,CAAC;IAK1C;;;;;;OAMG;IACG,OAAO,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,EAAE,CAAC;IAKtE;;;;;;;OAOG;IACG,mBAAmB,CACvB,KAAK,EAAE,MAAM,EACb,MAAM,CAAC,EAAE,OAAO,EAAE,GACjB,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,EAAE,CAAC;IAKvC;;;;;;;OAOG;IACG,UAAU,CACd,SAAS,EAAE,MAAM,EACjB,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,EACvC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,GACjC,OAAO,CAAC,IAAI,CAAC;IAKhB,OAAO,CAAC,eAAe;CAMxB"}
@@ -1,144 +0,0 @@
1
- import consola from "consola";
2
- import { SdError, EventEmitter } from "@simplysm/core-common";
3
- import { DB_CONN_ERRORS } from "./types/db-conn.js";
4
- const logger = consola.withTag("pooled-db-conn");
5
- class PooledDbConn extends EventEmitter {
6
- constructor(_pool, _initialConfig, _getLastCreateError) {
7
- super();
8
- this._pool = _pool;
9
- this._initialConfig = _initialConfig;
10
- this._getLastCreateError = _getLastCreateError;
11
- }
12
- // Actual physical connection borrowed from pool
13
- _rawConn;
14
- // [Property] config
15
- get config() {
16
- return this._rawConn?.config ?? this._initialConfig;
17
- }
18
- // [Property] isConnected
19
- get isConnected() {
20
- return this._rawConn?.isConnected ?? false;
21
- }
22
- // [Property] isInTransaction
23
- get isInTransaction() {
24
- return this._rawConn?.isInTransaction ?? false;
25
- }
26
- /**
27
- * Acquire DB connection from pool
28
- *
29
- * @throws {SdError} When already connected
30
- */
31
- async connect() {
32
- if (this._rawConn != null) {
33
- throw new SdError(DB_CONN_ERRORS.ALREADY_CONNECTED);
34
- }
35
- try {
36
- this._rawConn = await this._pool.acquire();
37
- } catch (err) {
38
- const { dialect, host, port, database } = this._initialConfig;
39
- const cause = this._getLastCreateError?.() ?? (err instanceof Error ? err : void 0);
40
- throw new SdError(
41
- ...cause != null ? [cause] : [],
42
- `DB connection failed [${dialect}://${host}:${port ?? ""}/${database ?? ""}]`
43
- );
44
- }
45
- this._rawConn.on("close", this._onRawConnClose);
46
- }
47
- /**
48
- * Return DB connection to pool (does not terminate actual connection)
49
- */
50
- async close() {
51
- if (this._rawConn != null) {
52
- if (this._rawConn.isInTransaction) {
53
- try {
54
- await this._rawConn.rollbackTransaction();
55
- } catch (err) {
56
- logger.warn("Rollback failed when returning to pool", err instanceof Error ? err.message : String(err));
57
- }
58
- }
59
- this._rawConn.off("close", this._onRawConnClose);
60
- await this._pool.release(this._rawConn);
61
- this._rawConn = void 0;
62
- this.emit("close");
63
- }
64
- }
65
- // Handler for physical connection loss
66
- _onRawConnClose = () => {
67
- this._rawConn = void 0;
68
- this.emit("close");
69
- };
70
- // --- Below are delegation methods ---
71
- /**
72
- * Begin transaction
73
- *
74
- * @param isolationLevel - Transaction isolation level
75
- * @throws {SdError} When connection is not acquired
76
- */
77
- async beginTransaction(isolationLevel) {
78
- const conn = this._requireRawConn();
79
- await conn.beginTransaction(isolationLevel);
80
- }
81
- /**
82
- * Commit transaction
83
- *
84
- * @throws {SdError} When connection is not acquired
85
- */
86
- async commitTransaction() {
87
- const conn = this._requireRawConn();
88
- await conn.commitTransaction();
89
- }
90
- /**
91
- * Rollback transaction
92
- *
93
- * @throws {SdError} When connection is not acquired
94
- */
95
- async rollbackTransaction() {
96
- const conn = this._requireRawConn();
97
- await conn.rollbackTransaction();
98
- }
99
- /**
100
- * Execute SQL query
101
- *
102
- * @param queries - SQL query array to execute
103
- * @returns Result array for each query
104
- * @throws {SdError} When connection is not acquired
105
- */
106
- async execute(queries) {
107
- const conn = this._requireRawConn();
108
- return conn.execute(queries);
109
- }
110
- /**
111
- * Execute parameterized SQL query
112
- *
113
- * @param query - SQL query string
114
- * @param params - Query parameter array
115
- * @returns Query result array
116
- * @throws {SdError} When connection is not acquired
117
- */
118
- async executeParametrized(query, params) {
119
- const conn = this._requireRawConn();
120
- return conn.executeParametrized(query, params);
121
- }
122
- /**
123
- * Bulk insert data (using native bulk API)
124
- *
125
- * @param tableName - Target table name
126
- * @param columnMetas - Column metadata
127
- * @param records - Record array to insert
128
- * @throws {SdError} When connection is not acquired
129
- */
130
- async bulkInsert(tableName, columnMetas, records) {
131
- const conn = this._requireRawConn();
132
- await conn.bulkInsert(tableName, columnMetas, records);
133
- }
134
- _requireRawConn() {
135
- if (this._rawConn == null) {
136
- throw new SdError(`${DB_CONN_ERRORS.NOT_CONNECTED} (Pool Connection is not acquired)`);
137
- }
138
- return this._rawConn;
139
- }
140
- }
141
- export {
142
- PooledDbConn
143
- };
144
- //# sourceMappingURL=pooled-db-conn.js.map
@@ -1,6 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../src/pooled-db-conn.ts"],
4
- "mappings": "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",
5
- "names": []
6
- }
@@ -1,188 +0,0 @@
1
- import consola from "consola";
2
- import { SdError, EventEmitter } from "@simplysm/core-common";
3
- import type { Pool } from "generic-pool";
4
- import type { ColumnMeta, IsolationLevel } from "@simplysm/orm-common";
5
- import { DB_CONN_ERRORS, type DbConn, type DbConnConfig } from "./types/db-conn";
6
-
7
- const logger = consola.withTag("pooled-db-conn");
8
-
9
- /**
10
- * DB connection wrapper managed by connection pool
11
- *
12
- * Supports connection pooling using the generic-pool library.
13
- * Acquires and returns actual physical connections from/to the pool.
14
- */
15
- export class PooledDbConn extends EventEmitter<{ close: void }> implements DbConn {
16
- // Actual physical connection borrowed from pool
17
- private _rawConn?: DbConn;
18
-
19
- constructor(
20
- private readonly _pool: Pool<DbConn>,
21
- private readonly _initialConfig: DbConnConfig,
22
- private readonly _getLastCreateError?: () => Error | undefined,
23
- ) {
24
- super();
25
- }
26
-
27
- // [Property] config
28
- get config(): DbConnConfig {
29
- return this._rawConn?.config ?? this._initialConfig;
30
- }
31
-
32
- // [Property] isConnected
33
- get isConnected(): boolean {
34
- return this._rawConn?.isConnected ?? false;
35
- }
36
-
37
- // [Property] isInTransaction
38
- get isInTransaction(): boolean {
39
- return this._rawConn?.isInTransaction ?? false;
40
- }
41
-
42
- /**
43
- * Acquire DB connection from pool
44
- *
45
- * @throws {SdError} When already connected
46
- */
47
- async connect(): Promise<void> {
48
- if (this._rawConn != null) {
49
- throw new SdError(DB_CONN_ERRORS.ALREADY_CONNECTED);
50
- }
51
-
52
- // 1. Acquire connection from pool
53
- try {
54
- this._rawConn = await this._pool.acquire();
55
- } catch (err) {
56
- const { dialect, host, port, database } = this._initialConfig;
57
- const cause = this._getLastCreateError?.() ?? (err instanceof Error ? err : undefined);
58
- throw new SdError(
59
- ...(cause != null ? [cause] : []),
60
- `DB connection failed [${dialect}://${host}:${port ?? ""}/${database ?? ""}]`,
61
- );
62
- }
63
-
64
- // 2. Register listener to handle physical connection loss (timeout, etc.)
65
- // If connection disconnects while in use, PooledDbConn must emit close event
66
- this._rawConn.on("close", this._onRawConnClose);
67
- }
68
-
69
- /**
70
- * Return DB connection to pool (does not terminate actual connection)
71
- */
72
- async close(): Promise<void> {
73
- if (this._rawConn != null) {
74
- // 1. If transaction is in progress, rollback to return clean state to pool
75
- if (this._rawConn.isInTransaction) {
76
- try {
77
- await this._rawConn.rollbackTransaction();
78
- } catch (err) {
79
- // Log failure and continue (connection may already be disconnected)
80
- logger.warn("Rollback failed when returning to pool", err instanceof Error ? err.message : String(err));
81
- }
82
- }
83
-
84
- // 2. Remove listener (so it won't affect reuse by other wrappers when returned to pool)
85
- this._rawConn.off("close", this._onRawConnClose);
86
-
87
- // 3. Return connection to pool (does not actually close it)
88
- await this._pool.release(this._rawConn);
89
- this._rawConn = undefined;
90
-
91
- // 4. Notify consumer that connection is logically closed
92
- this.emit("close");
93
- }
94
- }
95
-
96
- // Handler for physical connection loss
97
- private readonly _onRawConnClose = () => {
98
- // Remove reference since physical connection is lost (will be filtered during pool validation)
99
- this._rawConn = undefined;
100
- // Notify consumer
101
- this.emit("close");
102
- };
103
-
104
- // --- Below are delegation methods ---
105
-
106
- /**
107
- * Begin transaction
108
- *
109
- * @param isolationLevel - Transaction isolation level
110
- * @throws {SdError} When connection is not acquired
111
- */
112
- async beginTransaction(isolationLevel?: IsolationLevel): Promise<void> {
113
- const conn = this._requireRawConn();
114
- await conn.beginTransaction(isolationLevel);
115
- }
116
-
117
- /**
118
- * Commit transaction
119
- *
120
- * @throws {SdError} When connection is not acquired
121
- */
122
- async commitTransaction(): Promise<void> {
123
- const conn = this._requireRawConn();
124
- await conn.commitTransaction();
125
- }
126
-
127
- /**
128
- * Rollback transaction
129
- *
130
- * @throws {SdError} When connection is not acquired
131
- */
132
- async rollbackTransaction(): Promise<void> {
133
- const conn = this._requireRawConn();
134
- await conn.rollbackTransaction();
135
- }
136
-
137
- /**
138
- * Execute SQL query
139
- *
140
- * @param queries - SQL query array to execute
141
- * @returns Result array for each query
142
- * @throws {SdError} When connection is not acquired
143
- */
144
- async execute(queries: string[]): Promise<Record<string, unknown>[][]> {
145
- const conn = this._requireRawConn();
146
- return conn.execute(queries);
147
- }
148
-
149
- /**
150
- * Execute parameterized SQL query
151
- *
152
- * @param query - SQL query string
153
- * @param params - Query parameter array
154
- * @returns Query result array
155
- * @throws {SdError} When connection is not acquired
156
- */
157
- async executeParametrized(
158
- query: string,
159
- params?: unknown[],
160
- ): Promise<Record<string, unknown>[][]> {
161
- const conn = this._requireRawConn();
162
- return conn.executeParametrized(query, params);
163
- }
164
-
165
- /**
166
- * Bulk insert data (using native bulk API)
167
- *
168
- * @param tableName - Target table name
169
- * @param columnMetas - Column metadata
170
- * @param records - Record array to insert
171
- * @throws {SdError} When connection is not acquired
172
- */
173
- async bulkInsert(
174
- tableName: string,
175
- columnMetas: Record<string, ColumnMeta>,
176
- records: Record<string, unknown>[],
177
- ): Promise<void> {
178
- const conn = this._requireRawConn();
179
- await conn.bulkInsert(tableName, columnMetas, records);
180
- }
181
-
182
- private _requireRawConn(): DbConn {
183
- if (this._rawConn == null) {
184
- throw new SdError(`${DB_CONN_ERRORS.NOT_CONNECTED} (Pool Connection is not acquired)`);
185
- }
186
- return this._rawConn;
187
- }
188
- }