@simplysm/orm-node 13.0.0-beta.6 → 13.0.2

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 (186) hide show
  1. package/README.md +28 -23
  2. package/dist/connections/mssql-db-conn.d.ts.map +1 -0
  3. package/dist/connections/mssql-db-conn.js +3 -3
  4. package/dist/connections/mssql-db-conn.js.map +1 -2
  5. package/dist/connections/mysql-db-conn.d.ts.map +1 -0
  6. package/dist/connections/mysql-db-conn.js +3 -3
  7. package/dist/connections/mysql-db-conn.js.map +1 -2
  8. package/dist/connections/postgresql-db-conn.d.ts.map +1 -0
  9. package/dist/connections/postgresql-db-conn.js +3 -3
  10. package/dist/connections/postgresql-db-conn.js.map +1 -2
  11. package/dist/create-db-conn.d.ts +12 -0
  12. package/dist/create-db-conn.d.ts.map +1 -0
  13. package/dist/create-db-conn.js +75 -0
  14. package/dist/create-db-conn.js.map +6 -0
  15. package/dist/{orm-node/src/sd-orm.d.ts → create-orm.d.ts} +37 -37
  16. package/dist/create-orm.d.ts.map +1 -0
  17. package/dist/create-orm.js +32 -0
  18. package/dist/create-orm.js.map +6 -0
  19. package/dist/{orm-node/src/index.d.ts → index.d.ts} +2 -2
  20. package/dist/index.d.ts.map +1 -0
  21. package/dist/index.js +8 -8
  22. package/dist/index.js.map +0 -1
  23. package/dist/node-db-context-executor.d.ts.map +1 -0
  24. package/dist/node-db-context-executor.js +3 -3
  25. package/dist/node-db-context-executor.js.map +1 -2
  26. package/dist/pooled-db-conn.d.ts.map +1 -0
  27. package/dist/pooled-db-conn.js +3 -3
  28. package/dist/pooled-db-conn.js.map +1 -2
  29. package/dist/types/db-conn.d.ts.map +1 -0
  30. package/dist/types/db-conn.js.map +0 -1
  31. package/package.json +12 -8
  32. package/src/connections/mssql-db-conn.ts +2 -2
  33. package/src/connections/mysql-db-conn.ts +2 -2
  34. package/src/connections/postgresql-db-conn.ts +2 -2
  35. package/src/create-db-conn.ts +111 -0
  36. package/src/create-orm.ts +118 -0
  37. package/src/index.ts +2 -2
  38. package/src/node-db-context-executor.ts +2 -2
  39. package/src/pooled-db-conn.ts +2 -2
  40. package/.cache/typecheck-node.tsbuildinfo +0 -1
  41. package/dist/core-common/src/common.types.d.ts +0 -74
  42. package/dist/core-common/src/common.types.d.ts.map +0 -1
  43. package/dist/core-common/src/env.d.ts +0 -6
  44. package/dist/core-common/src/env.d.ts.map +0 -1
  45. package/dist/core-common/src/errors/argument-error.d.ts +0 -25
  46. package/dist/core-common/src/errors/argument-error.d.ts.map +0 -1
  47. package/dist/core-common/src/errors/not-implemented-error.d.ts +0 -29
  48. package/dist/core-common/src/errors/not-implemented-error.d.ts.map +0 -1
  49. package/dist/core-common/src/errors/sd-error.d.ts +0 -27
  50. package/dist/core-common/src/errors/sd-error.d.ts.map +0 -1
  51. package/dist/core-common/src/errors/timeout-error.d.ts +0 -31
  52. package/dist/core-common/src/errors/timeout-error.d.ts.map +0 -1
  53. package/dist/core-common/src/extensions/arr-ext.d.ts +0 -15
  54. package/dist/core-common/src/extensions/arr-ext.d.ts.map +0 -1
  55. package/dist/core-common/src/extensions/arr-ext.helpers.d.ts +0 -19
  56. package/dist/core-common/src/extensions/arr-ext.helpers.d.ts.map +0 -1
  57. package/dist/core-common/src/extensions/arr-ext.types.d.ts +0 -215
  58. package/dist/core-common/src/extensions/arr-ext.types.d.ts.map +0 -1
  59. package/dist/core-common/src/extensions/map-ext.d.ts +0 -57
  60. package/dist/core-common/src/extensions/map-ext.d.ts.map +0 -1
  61. package/dist/core-common/src/extensions/set-ext.d.ts +0 -36
  62. package/dist/core-common/src/extensions/set-ext.d.ts.map +0 -1
  63. package/dist/core-common/src/features/debounce-queue.d.ts +0 -53
  64. package/dist/core-common/src/features/debounce-queue.d.ts.map +0 -1
  65. package/dist/core-common/src/features/event-emitter.d.ts +0 -66
  66. package/dist/core-common/src/features/event-emitter.d.ts.map +0 -1
  67. package/dist/core-common/src/features/serial-queue.d.ts +0 -47
  68. package/dist/core-common/src/features/serial-queue.d.ts.map +0 -1
  69. package/dist/core-common/src/index.d.ts +0 -32
  70. package/dist/core-common/src/index.d.ts.map +0 -1
  71. package/dist/core-common/src/types/date-only.d.ts +0 -152
  72. package/dist/core-common/src/types/date-only.d.ts.map +0 -1
  73. package/dist/core-common/src/types/date-time.d.ts +0 -96
  74. package/dist/core-common/src/types/date-time.d.ts.map +0 -1
  75. package/dist/core-common/src/types/lazy-gc-map.d.ts +0 -80
  76. package/dist/core-common/src/types/lazy-gc-map.d.ts.map +0 -1
  77. package/dist/core-common/src/types/time.d.ts +0 -68
  78. package/dist/core-common/src/types/time.d.ts.map +0 -1
  79. package/dist/core-common/src/types/uuid.d.ts +0 -35
  80. package/dist/core-common/src/types/uuid.d.ts.map +0 -1
  81. package/dist/core-common/src/utils/bytes.d.ts +0 -51
  82. package/dist/core-common/src/utils/bytes.d.ts.map +0 -1
  83. package/dist/core-common/src/utils/date-format.d.ts +0 -90
  84. package/dist/core-common/src/utils/date-format.d.ts.map +0 -1
  85. package/dist/core-common/src/utils/json.d.ts +0 -34
  86. package/dist/core-common/src/utils/json.d.ts.map +0 -1
  87. package/dist/core-common/src/utils/num.d.ts +0 -60
  88. package/dist/core-common/src/utils/num.d.ts.map +0 -1
  89. package/dist/core-common/src/utils/obj.d.ts +0 -258
  90. package/dist/core-common/src/utils/obj.d.ts.map +0 -1
  91. package/dist/core-common/src/utils/path.d.ts +0 -23
  92. package/dist/core-common/src/utils/path.d.ts.map +0 -1
  93. package/dist/core-common/src/utils/primitive.d.ts +0 -18
  94. package/dist/core-common/src/utils/primitive.d.ts.map +0 -1
  95. package/dist/core-common/src/utils/str.d.ts +0 -103
  96. package/dist/core-common/src/utils/str.d.ts.map +0 -1
  97. package/dist/core-common/src/utils/template-strings.d.ts +0 -84
  98. package/dist/core-common/src/utils/template-strings.d.ts.map +0 -1
  99. package/dist/core-common/src/utils/transferable.d.ts +0 -47
  100. package/dist/core-common/src/utils/transferable.d.ts.map +0 -1
  101. package/dist/core-common/src/utils/wait.d.ts +0 -19
  102. package/dist/core-common/src/utils/wait.d.ts.map +0 -1
  103. package/dist/core-common/src/utils/xml.d.ts +0 -36
  104. package/dist/core-common/src/utils/xml.d.ts.map +0 -1
  105. package/dist/core-common/src/zip/sd-zip.d.ts +0 -80
  106. package/dist/core-common/src/zip/sd-zip.d.ts.map +0 -1
  107. package/dist/db-conn-factory.js +0 -88
  108. package/dist/db-conn-factory.js.map +0 -7
  109. package/dist/orm-common/src/db-context.d.ts +0 -669
  110. package/dist/orm-common/src/db-context.d.ts.map +0 -1
  111. package/dist/orm-common/src/errors/db-transaction-error.d.ts +0 -51
  112. package/dist/orm-common/src/errors/db-transaction-error.d.ts.map +0 -1
  113. package/dist/orm-common/src/exec/executable.d.ts +0 -79
  114. package/dist/orm-common/src/exec/executable.d.ts.map +0 -1
  115. package/dist/orm-common/src/exec/queryable.d.ts +0 -708
  116. package/dist/orm-common/src/exec/queryable.d.ts.map +0 -1
  117. package/dist/orm-common/src/exec/search-parser.d.ts +0 -72
  118. package/dist/orm-common/src/exec/search-parser.d.ts.map +0 -1
  119. package/dist/orm-common/src/expr/expr-unit.d.ts +0 -25
  120. package/dist/orm-common/src/expr/expr-unit.d.ts.map +0 -1
  121. package/dist/orm-common/src/expr/expr.d.ts +0 -1369
  122. package/dist/orm-common/src/expr/expr.d.ts.map +0 -1
  123. package/dist/orm-common/src/index.d.ts +0 -32
  124. package/dist/orm-common/src/index.d.ts.map +0 -1
  125. package/dist/orm-common/src/models/system-migration.d.ts +0 -10
  126. package/dist/orm-common/src/models/system-migration.d.ts.map +0 -1
  127. package/dist/orm-common/src/query-builder/base/expr-renderer-base.d.ts +0 -95
  128. package/dist/orm-common/src/query-builder/base/expr-renderer-base.d.ts.map +0 -1
  129. package/dist/orm-common/src/query-builder/base/query-builder-base.d.ts +0 -66
  130. package/dist/orm-common/src/query-builder/base/query-builder-base.d.ts.map +0 -1
  131. package/dist/orm-common/src/query-builder/mssql/mssql-expr-renderer.d.ts +0 -84
  132. package/dist/orm-common/src/query-builder/mssql/mssql-expr-renderer.d.ts.map +0 -1
  133. package/dist/orm-common/src/query-builder/mssql/mssql-query-builder.d.ts +0 -45
  134. package/dist/orm-common/src/query-builder/mssql/mssql-query-builder.d.ts.map +0 -1
  135. package/dist/orm-common/src/query-builder/mysql/mysql-expr-renderer.d.ts +0 -84
  136. package/dist/orm-common/src/query-builder/mysql/mysql-expr-renderer.d.ts.map +0 -1
  137. package/dist/orm-common/src/query-builder/mysql/mysql-query-builder.d.ts +0 -54
  138. package/dist/orm-common/src/query-builder/mysql/mysql-query-builder.d.ts.map +0 -1
  139. package/dist/orm-common/src/query-builder/postgresql/postgresql-expr-renderer.d.ts +0 -84
  140. package/dist/orm-common/src/query-builder/postgresql/postgresql-expr-renderer.d.ts.map +0 -1
  141. package/dist/orm-common/src/query-builder/postgresql/postgresql-query-builder.d.ts +0 -52
  142. package/dist/orm-common/src/query-builder/postgresql/postgresql-query-builder.d.ts.map +0 -1
  143. package/dist/orm-common/src/query-builder/query-builder.d.ts +0 -7
  144. package/dist/orm-common/src/query-builder/query-builder.d.ts.map +0 -1
  145. package/dist/orm-common/src/schema/factory/column-builder.d.ts +0 -394
  146. package/dist/orm-common/src/schema/factory/column-builder.d.ts.map +0 -1
  147. package/dist/orm-common/src/schema/factory/index-builder.d.ts +0 -151
  148. package/dist/orm-common/src/schema/factory/index-builder.d.ts.map +0 -1
  149. package/dist/orm-common/src/schema/factory/relation-builder.d.ts +0 -337
  150. package/dist/orm-common/src/schema/factory/relation-builder.d.ts.map +0 -1
  151. package/dist/orm-common/src/schema/procedure-builder.d.ts +0 -202
  152. package/dist/orm-common/src/schema/procedure-builder.d.ts.map +0 -1
  153. package/dist/orm-common/src/schema/table-builder.d.ts +0 -259
  154. package/dist/orm-common/src/schema/table-builder.d.ts.map +0 -1
  155. package/dist/orm-common/src/schema/view-builder.d.ts +0 -183
  156. package/dist/orm-common/src/schema/view-builder.d.ts.map +0 -1
  157. package/dist/orm-common/src/types/column.d.ts +0 -172
  158. package/dist/orm-common/src/types/column.d.ts.map +0 -1
  159. package/dist/orm-common/src/types/db.d.ts +0 -175
  160. package/dist/orm-common/src/types/db.d.ts.map +0 -1
  161. package/dist/orm-common/src/types/expr.d.ts +0 -474
  162. package/dist/orm-common/src/types/expr.d.ts.map +0 -1
  163. package/dist/orm-common/src/types/query-def.d.ts +0 -351
  164. package/dist/orm-common/src/types/query-def.d.ts.map +0 -1
  165. package/dist/orm-common/src/utils/result-parser.d.ts +0 -38
  166. package/dist/orm-common/src/utils/result-parser.d.ts.map +0 -1
  167. package/dist/orm-node/src/connections/mssql-db-conn.d.ts.map +0 -1
  168. package/dist/orm-node/src/connections/mysql-db-conn.d.ts.map +0 -1
  169. package/dist/orm-node/src/connections/postgresql-db-conn.d.ts.map +0 -1
  170. package/dist/orm-node/src/db-conn-factory.d.ts +0 -25
  171. package/dist/orm-node/src/db-conn-factory.d.ts.map +0 -1
  172. package/dist/orm-node/src/index.d.ts.map +0 -1
  173. package/dist/orm-node/src/node-db-context-executor.d.ts.map +0 -1
  174. package/dist/orm-node/src/pooled-db-conn.d.ts.map +0 -1
  175. package/dist/orm-node/src/sd-orm.d.ts.map +0 -1
  176. package/dist/orm-node/src/types/db-conn.d.ts.map +0 -1
  177. package/dist/sd-orm.js +0 -44
  178. package/dist/sd-orm.js.map +0 -7
  179. package/src/db-conn-factory.ts +0 -114
  180. package/src/sd-orm.ts +0 -102
  181. /package/dist/{orm-node/src/connections → connections}/mssql-db-conn.d.ts +0 -0
  182. /package/dist/{orm-node/src/connections → connections}/mysql-db-conn.d.ts +0 -0
  183. /package/dist/{orm-node/src/connections → connections}/postgresql-db-conn.d.ts +0 -0
  184. /package/dist/{orm-node/src/node-db-context-executor.d.ts → node-db-context-executor.d.ts} +0 -0
  185. /package/dist/{orm-node/src/pooled-db-conn.d.ts → pooled-db-conn.d.ts} +0 -0
  186. /package/dist/{orm-node/src/types → types}/db-conn.d.ts +0 -0
package/README.md CHANGED
@@ -28,28 +28,33 @@ npm install pg pg-copy-streams
28
28
  ## Architecture
29
29
 
30
30
  ```
31
- SdOrm (top-level entry point)
31
+ createOrm() (top-level entry point)
32
32
  └── NodeDbContextExecutor (executor between DbContext and actual DB)
33
- └── DbConnFactory (connection creation and pool management)
33
+ └── createDbConn() (connection creation and pool management)
34
34
  └── PooledDbConn (connection pool wrapper)
35
35
  └── MysqlDbConn / MssqlDbConn / PostgresqlDbConn (DBMS-specific low-level connections)
36
36
  ```
37
37
 
38
- - `SdOrm` is the top-level class that takes a `DbContext` type and connection settings to manage transactions.
38
+ - `createOrm()` is the top-level factory function that takes a `DbContext` type and connection settings to manage transactions.
39
39
  - `NodeDbContextExecutor` is the executor used by `DbContext`, converting `QueryDef` to SQL and executing it.
40
- - `DbConnFactory` is a factory that acquires connections from the connection pool.
40
+ - `createDbConn()` is a factory function that acquires connections from the connection pool.
41
41
  - `PooledDbConn` is a connection pool wrapper based on `generic-pool`, returning connections to the pool instead of closing them after use.
42
42
  - Each DBMS-specific connection class (`MysqlDbConn`, `MssqlDbConn`, `PostgresqlDbConn`) directly uses low-level DB drivers.
43
43
 
44
44
  ## Core Modules
45
45
 
46
+ ### Functions
47
+
48
+ | Function | Description |
49
+ |----------|-------------|
50
+ | `createOrm()` | ORM factory function. Takes `DbContext` type and connection settings to manage transaction-based connections. |
51
+ | `createDbConn()` | Connection factory function. Caches connection pools by configuration and returns `PooledDbConn`. |
52
+
46
53
  ### Classes
47
54
 
48
55
  | Class | Description |
49
56
  |--------|------|
50
- | `SdOrm` | ORM top-level class. Takes `DbContext` type and connection settings to manage transaction-based connections. |
51
57
  | `NodeDbContextExecutor` | `DbContextExecutor` implementation. Converts `QueryDef` to SQL, executes it, and parses results. |
52
- | `DbConnFactory` | Connection factory. Caches connection pools by configuration and returns `PooledDbConn`. |
53
58
  | `PooledDbConn` | Connection pool wrapper. Acquires/returns physical connections from `generic-pool`, implements `DbConn` interface. |
54
59
  | `MysqlDbConn` | MySQL connection class. Uses `mysql2/promise` driver. |
55
60
  | `MssqlDbConn` | MSSQL/Azure SQL connection class. Uses `tedious` driver. |
@@ -65,7 +70,7 @@ SdOrm (top-level entry point)
65
70
  | `MssqlDbConnConfig` | MSSQL connection config. `dialect: "mssql" \| "mssql-azure"`. |
66
71
  | `PostgresqlDbConnConfig` | PostgreSQL connection config. `dialect: "postgresql"`. |
67
72
  | `DbPoolConfig` | Connection pool config (`min`, `max`, `acquireTimeoutMillis`, `idleTimeoutMillis`). |
68
- | `SdOrmOptions` | `SdOrm` options. `database`, `schema` settings that override `DbConnConfig`. |
73
+ | `OrmOptions` | `createOrm()` options. `database`, `schema` settings that override `DbConnConfig`. |
69
74
 
70
75
  ### Constants and Utility Functions
71
76
 
@@ -77,12 +82,12 @@ SdOrm (top-level entry point)
77
82
 
78
83
  ## Usage
79
84
 
80
- ### Basic Usage with SdOrm
85
+ ### Basic Usage with createOrm
81
86
 
82
- `SdOrm` is the top-level entry point used with `DbContext`. It automatically handles transaction management.
87
+ `createOrm()` is the top-level factory function used with `DbContext`. It automatically handles transaction management.
83
88
 
84
89
  ```typescript
85
- import { SdOrm } from "@simplysm/orm-node";
90
+ import { createOrm } from "@simplysm/orm-node";
86
91
  import { DbContext, queryable, Table } from "@simplysm/orm-common";
87
92
 
88
93
  // 1. Define table
@@ -100,8 +105,8 @@ class MyDb extends DbContext {
100
105
  readonly user = queryable(this, User);
101
106
  }
102
107
 
103
- // 3. Create SdOrm instance
104
- const orm = new SdOrm(MyDb, {
108
+ // 3. Create ORM instance
109
+ const orm = createOrm(MyDb, {
105
110
  dialect: "mysql",
106
111
  host: "localhost",
107
112
  port: 3306,
@@ -148,12 +153,12 @@ Supported isolation levels (`IsolationLevel`):
148
153
  - `"REPEATABLE_READ"`
149
154
  - `"SERIALIZABLE"`
150
155
 
151
- ### Overriding database/schema via SdOrmOptions
156
+ ### Overriding database/schema via OrmOptions
152
157
 
153
- Using `SdOrmOptions`, you can use different values instead of the `database`/`schema` set in `DbConnConfig`.
158
+ Using `OrmOptions`, you can use different values instead of the `database`/`schema` set in `DbConnConfig`.
154
159
 
155
160
  ```typescript
156
- const orm = new SdOrm(MyDb, {
161
+ const orm = createOrm(MyDb, {
157
162
  dialect: "postgresql",
158
163
  host: "localhost",
159
164
  port: 5432,
@@ -172,7 +177,7 @@ const orm = new SdOrm(MyDb, {
172
177
  Configure connection pool via the `pool` field in `DbConnConfig`. The pool is based on the `generic-pool` library, and pools are automatically cached for identical configurations.
173
178
 
174
179
  ```typescript
175
- const orm = new SdOrm(MyDb, {
180
+ const orm = createOrm(MyDb, {
176
181
  dialect: "mssql",
177
182
  host: "localhost",
178
183
  port: 1433,
@@ -188,15 +193,15 @@ const orm = new SdOrm(MyDb, {
188
193
  });
189
194
  ```
190
195
 
191
- ### Low-Level Connection with DbConnFactory
196
+ ### Low-Level Connection with createDbConn
192
197
 
193
- You can connect directly to the DB and execute SQL without `SdOrm`/`DbContext`. `DbConnFactory.create()` returns `PooledDbConn` from the connection pool.
198
+ You can connect directly to the DB and execute SQL without `createOrm`/`DbContext`. `createDbConn()` returns `PooledDbConn` from the connection pool.
194
199
 
195
200
  ```typescript
196
- import { DbConnFactory } from "@simplysm/orm-node";
201
+ import { createDbConn } from "@simplysm/orm-node";
197
202
 
198
203
  // Create connection (acquire from pool)
199
- const conn = await DbConnFactory.create({
204
+ const conn = await createDbConn({
200
205
  dialect: "mysql",
201
206
  host: "localhost",
202
207
  port: 3306,
@@ -233,7 +238,7 @@ try {
233
238
  Each connection class supports parameter binding via the `executeParametrized()` method.
234
239
 
235
240
  ```typescript
236
- const conn = await DbConnFactory.create({
241
+ const conn = await createDbConn({
237
242
  dialect: "postgresql",
238
243
  host: "localhost",
239
244
  port: 5432,
@@ -266,7 +271,7 @@ Supports bulk data insertion using native bulk APIs for each DBMS.
266
271
  ```typescript
267
272
  import type { ColumnMeta } from "@simplysm/orm-common";
268
273
 
269
- const conn = await DbConnFactory.create({
274
+ const conn = await createDbConn({
270
275
  dialect: "mysql",
271
276
  host: "localhost",
272
277
  port: 3306,
@@ -398,7 +403,7 @@ The common interface implemented by all DBMS-specific connection classes (`Mysql
398
403
 
399
404
  ### Driver Lazy Loading
400
405
 
401
- DBMS-specific drivers (`mysql2`, `tedious`, `pg`) are lazy-loaded within `DbConnFactory`. Therefore, import errors won't occur even if unused drivers are not installed.
406
+ DBMS-specific drivers (`mysql2`, `tedious`, `pg`) are lazy-loaded within `createDbConn()`. Therefore, import errors won't occur even if unused drivers are not installed.
402
407
 
403
408
  ### PooledDbConn close Behavior
404
409
 
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mssql-db-conn.d.ts","sourceRoot":"","sources":["../../src/connections/mssql-db-conn.ts"],"names":[],"mappings":"AACA,OAAO,EAKL,YAAY,EAKb,MAAM,uBAAuB,CAAC;AAC/B,OAAO,KAAK,EAAE,UAAU,EAAY,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACjF,OAAO,EAA2C,KAAK,MAAM,EAAE,KAAK,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AAMhH;;;;GAIG;AACH,qBAAa,WAAY,SAAQ,YAAY,CAAC;IAAE,KAAK,EAAE,IAAI,CAAA;CAAE,CAAE,YAAW,MAAM;IAW5E,OAAO,CAAC,QAAQ,CAAC,QAAQ;IACzB,QAAQ,CAAC,MAAM,EAAE,iBAAiB;IAXpC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAA2B;IAEpD,OAAO,CAAC,KAAK,CAAC,CAAyB;IACvC,OAAO,CAAC,YAAY,CAAC,CAAgC;IACrD,OAAO,CAAC,SAAS,CAA6B;IAE9C,WAAW,UAAS;IACpB,eAAe,UAAS;gBAGL,QAAQ,EAAE,cAAc,SAAS,CAAC,EAC1C,MAAM,EAAE,iBAAiB;IAK9B,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IA4DxB,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAwBtB,gBAAgB,CAAC,cAAc,CAAC,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC;IAuBhE,iBAAiB,IAAI,OAAO,CAAC,IAAI,CAAC;IAmBlC,mBAAmB,IAAI,OAAO,CAAC,IAAI,CAAC;IAmBpC,OAAO,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC;IAUhD,mBAAmB,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC;IA6F5E,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;IAoDhB,OAAO,CAAC,gBAAgB;IAMxB,OAAO,CAAC,mBAAmB;IAY3B,OAAO,CAAC,WAAW;IAOnB,OAAO,CAAC,YAAY;IAMpB,OAAO,CAAC,aAAa;IASrB,OAAO,CAAC,wCAAwC;IAqBhD,OAAO,CAAC,uCAAuC;IA4C/C;;;;;OAKG;IACH,OAAO,CAAC,iBAAiB;CAmB1B"}
@@ -1,4 +1,4 @@
1
- import { createConsola } from "consola";
1
+ import consola from "consola";
2
2
  import {
3
3
  DateOnly,
4
4
  DateTime,
@@ -10,8 +10,8 @@ import {
10
10
  Uuid,
11
11
  waitUntil
12
12
  } from "@simplysm/core-common";
13
- import { DB_CONN_DEFAULT_TIMEOUT, DB_CONN_ERRORS } from "../types/db-conn";
14
- const logger = createConsola().withTag("mssql-db-conn");
13
+ import { DB_CONN_DEFAULT_TIMEOUT, DB_CONN_ERRORS } from "../types/db-conn.js";
14
+ const logger = consola.withTag("mssql-db-conn");
15
15
  class MssqlDbConn extends EventEmitter {
16
16
  constructor(_tedious, config) {
17
17
  super();
@@ -1,7 +1,6 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../src/connections/mssql-db-conn.ts"],
4
- "sourcesContent": ["import { createConsola } from \"consola\";\nimport {\n DateOnly,\n DateTime,\n jsonStringify,\n SdError,\n EventEmitter,\n strIsNullOrEmpty,\n Time,\n Uuid,\n waitUntil,\n} from \"@simplysm/core-common\";\nimport type { ColumnMeta, DataType, IsolationLevel } from \"@simplysm/orm-common\";\nimport { DB_CONN_DEFAULT_TIMEOUT, DB_CONN_ERRORS, type DbConn, type MssqlDbConnConfig } from \"../types/db-conn\";\nimport type tediousType from \"tedious\";\nimport type { DataType as TediousDataType } from \"tedious/lib/data-type\";\n\nconst logger = createConsola().withTag(\"mssql-db-conn\");\n\n/**\n * MSSQL \uB370\uC774\uD130\uBCA0\uC774\uC2A4 \uC5F0\uACB0 \uD074\uB798\uC2A4\n *\n * tedious \uB77C\uC774\uBE0C\uB7EC\uB9AC\uB97C \uC0AC\uC6A9\uD558\uC5EC MSSQL/Azure SQL \uC5F0\uACB0\uC744 \uAD00\uB9AC\uD569\uB2C8\uB2E4.\n */\nexport class MssqlDbConn extends EventEmitter<{ close: void }> implements DbConn {\n private readonly _timeout = DB_CONN_DEFAULT_TIMEOUT;\n\n private _conn?: tediousType.Connection;\n private _connTimeout?: ReturnType<typeof setTimeout>;\n private _requests: tediousType.Request[] = [];\n\n isConnected = false;\n isOnTransaction = false;\n\n constructor(\n private readonly _tedious: typeof import(\"tedious\"),\n readonly config: MssqlDbConnConfig,\n ) {\n super();\n }\n\n async connect(): Promise<void> {\n if (this.isConnected) {\n throw new SdError(DB_CONN_ERRORS.ALREADY_CONNECTED);\n }\n\n const conn = new this._tedious.Connection({\n server: this.config.host,\n authentication: {\n type: \"default\",\n options: {\n userName: this.config.username,\n password: this.config.password,\n },\n },\n options: {\n database: this.config.database,\n port: this.config.port,\n rowCollectionOnDone: true,\n useUTC: false,\n encrypt: this.config.dialect === \"mssql-azure\",\n requestTimeout: this._timeout,\n trustServerCertificate: true,\n connectTimeout: this._timeout * 5,\n } as tediousType.ConnectionOptions,\n });\n\n conn.on(\"infoMessage\", (info) => {\n logger.debug(\"info\", info.message);\n });\n\n conn.on(\"errorMessage\", (error) => {\n logger.error(\"errorMessage\", error.message);\n });\n\n conn.on(\"error\", (error) => {\n logger.error(\"error\", error.message);\n });\n\n conn.on(\"end\", () => {\n this.emit(\"close\");\n this._resetState();\n });\n\n await new Promise<void>((resolve, reject) => {\n conn.connect((err: Error | undefined) => {\n if (err != null) {\n reject(new SdError(err));\n return;\n }\n\n this._startTimeout();\n this.isConnected = true;\n this.isOnTransaction = false;\n resolve();\n });\n });\n\n this._conn = conn;\n }\n\n async close(): Promise<void> {\n this._stopTimeout();\n\n if (this._conn == null || !this.isConnected) {\n return;\n }\n\n const conn = this._conn;\n\n // \uC9C4\uD589 \uC911\uC778 \uC694\uCCAD \uCDE8\uC18C\n conn.cancel();\n await waitUntil(() => this._requests.length < 1, 30000, 100);\n\n // \uC5F0\uACB0 \uC885\uB8CC \uB300\uAE30\n await new Promise<void>((resolve) => {\n conn.on(\"end\", () => {\n waitUntil(() => this._conn == null, 30000, 100)\n .then(() => resolve())\n .catch(() => resolve());\n });\n conn.close();\n });\n }\n\n async beginTransaction(isolationLevel?: IsolationLevel): Promise<void> {\n this._assertConnected();\n this._startTimeout();\n\n const conn = this._conn!;\n\n await new Promise<void>((resolve, reject) => {\n conn.beginTransaction(\n (err) => {\n if (err != null) {\n reject(new SdError(err));\n return;\n }\n\n this.isOnTransaction = true;\n resolve();\n },\n \"\",\n this._tedious.ISOLATION_LEVEL[isolationLevel ?? this.config.defaultIsolationLevel ?? \"READ_UNCOMMITTED\"],\n );\n });\n }\n\n async commitTransaction(): Promise<void> {\n this._assertConnected();\n this._startTimeout();\n\n const conn = this._conn!;\n\n await new Promise<void>((resolve, reject) => {\n conn.commitTransaction((err) => {\n if (err != null) {\n reject(new SdError(err));\n return;\n }\n\n this.isOnTransaction = false;\n resolve();\n });\n });\n }\n\n async rollbackTransaction(): Promise<void> {\n this._assertConnected();\n this._startTimeout();\n\n const conn = this._conn!;\n\n await new Promise<void>((resolve, reject) => {\n conn.rollbackTransaction((err) => {\n if (err != null) {\n reject(new SdError(err));\n return;\n }\n\n this.isOnTransaction = false;\n resolve();\n });\n });\n }\n\n async execute(queries: string[]): Promise<unknown[][]> {\n const results: unknown[][] = [];\n for (const query of queries.filter((item) => !strIsNullOrEmpty(item))) {\n const resultItems = await this.executeParametrized(query);\n results.push(...resultItems);\n }\n\n return results;\n }\n\n async executeParametrized(query: string, params?: unknown[]): Promise<unknown[][]> {\n this._assertConnected();\n this._startTimeout();\n\n const conn = this._conn!;\n\n const results: unknown[][] = [];\n\n logger.debug(\"\uCFFC\uB9AC \uC2E4\uD589\", { queryLength: query.length, params });\n await new Promise<void>((resolve, reject) => {\n let rejected = false;\n const queryRequest = new this._tedious.Request(query, (err) => {\n if (err != null) {\n rejected = true;\n this._requests = this._requests.filter((r) => r !== queryRequest);\n\n const errRec = err as unknown as Record<string, unknown>;\n if (errRec[\"code\"] === \"ECANCEL\") {\n reject(new SdError(err, \"\uCFFC\uB9AC\uAC00 \uCDE8\uC18C\uB418\uC5C8\uC2B5\uB2C8\uB2E4.\"));\n } else {\n const lineNumber = errRec[\"lineNumber\"] as number | undefined;\n if (lineNumber != null && lineNumber > 0) {\n const splitQuery = query.split(\"\\n\");\n splitQuery[lineNumber - 1] = \"==> \" + splitQuery[lineNumber - 1];\n reject(new SdError(err, `\uCFFC\uB9AC \uC218\uD589\uC911 \uC624\uB958\uBC1C\uC0DD\\n-- query\\n${splitQuery.join(\"\\n\")}\\n--`));\n } else {\n reject(new SdError(err, `\uCFFC\uB9AC \uC218\uD589\uC911 \uC624\uB958\uBC1C\uC0DD\\n-- query\\n${query}\\n--`));\n }\n }\n }\n });\n\n queryRequest\n .on(\"done\", (_rowCount, _more, rst) => {\n this._startTimeout();\n\n if (rejected) {\n return;\n }\n\n results.push(this._parseRowsToRecords(rst));\n })\n .on(\"doneInProc\", (_rowCount, _more, rst) => {\n this._startTimeout();\n\n if (rejected) {\n return;\n }\n\n results.push(this._parseRowsToRecords(rst));\n })\n .on(\"error\", (err) => {\n this._startTimeout();\n\n if (rejected) {\n return;\n }\n\n rejected = true;\n this._requests = this._requests.filter((r) => r !== queryRequest);\n reject(new SdError(err, `\uCFFC\uB9AC \uC218\uD589\uC911 \uC624\uB958\uBC1C\uC0DD\\n-- query\\n${query}\\n--`));\n })\n .on(\"requestCompleted\", () => {\n this._startTimeout();\n\n if (rejected) {\n return;\n }\n\n this._requests = this._requests.filter((r) => r !== queryRequest);\n resolve();\n });\n\n this._requests.push(queryRequest);\n\n if (params != null) {\n for (let i = 0; i < params.length; i++) {\n const paramValue = params[i];\n const paramName = `p${i}`;\n const type = this._guessTediousType(paramValue);\n\n queryRequest.addParameter(paramName, type, paramValue);\n }\n\n conn.execSql(queryRequest);\n } else {\n conn.execSqlBatch(queryRequest);\n }\n });\n\n return results;\n }\n\n async bulkInsert(\n tableName: string,\n columnMetas: Record<string, ColumnMeta>,\n records: Record<string, unknown>[],\n ): Promise<void> {\n if (records.length === 0) return;\n\n this._assertConnected();\n this._startTimeout();\n\n const tediousColumnDefs = Object.entries(columnMetas).map(([name, meta]) =>\n this._convertColumnMetaToTediousBulkColumnDef(name, meta),\n );\n\n await new Promise<void>((resolve, reject) => {\n const bulkLoad = this._conn!.newBulkLoad(tableName, (err) => {\n if (err != null) {\n reject(\n new SdError(\n err,\n `Bulk Insert \uC624\uB958\uBC1C\uC0DD\\n${jsonStringify(tediousColumnDefs)}\\n-- data\\n${jsonStringify(records).substring(0, 10000)}...\\n--`,\n ),\n );\n return;\n }\n resolve();\n });\n\n const colNames = Object.keys(columnMetas);\n\n for (const tediousColumnDef of tediousColumnDefs) {\n bulkLoad.addColumn(tediousColumnDef.name, tediousColumnDef.type, tediousColumnDef.options);\n }\n\n // \uB808\uCF54\uB4DC\uB97C row \uBC30\uC5F4\uB85C \uBCC0\uD658 (\uCEEC\uB7FC \uC21C\uC11C \uC720\uC9C0, \uAC12 \uBCC0\uD658 \uD3EC\uD568)\n const rows = records.map((record) =>\n colNames.map((colName) => {\n const val = record[colName];\n if (val instanceof Uuid) return val.toString();\n // eslint-disable-next-line no-restricted-globals -- tedious \uB77C\uC774\uBE0C\uB7EC\uB9AC\uAC00 Buffer\uB97C \uC694\uAD6C\uD568\n if (val instanceof Uint8Array) return Buffer.from(val);\n if (val instanceof DateTime) return val.date;\n if (val instanceof DateOnly) return val.date;\n if (val instanceof Time) return val.toFormatString(\"HH:mm:ss\");\n return val;\n }),\n );\n\n this._conn!.execBulkLoad(bulkLoad, rows);\n });\n }\n\n // \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n // Private helpers\n // \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\n private _assertConnected(): void {\n if (this._conn == null || !this.isConnected) {\n throw new SdError(DB_CONN_ERRORS.NOT_CONNECTED);\n }\n }\n\n private _parseRowsToRecords(\n rows: Array<Array<{ metadata: { colName: string }; value: unknown }>> | undefined,\n ): Record<string, unknown>[] {\n return (rows ?? []).map((item) => {\n const resultItem: Record<string, unknown> = {};\n for (const col of item) {\n resultItem[col.metadata.colName] = col.value;\n }\n return resultItem;\n });\n }\n\n private _resetState(): void {\n this.isConnected = false;\n this.isOnTransaction = false;\n this._conn = undefined;\n this._requests = [];\n }\n\n private _stopTimeout(): void {\n if (this._connTimeout != null) {\n clearTimeout(this._connTimeout);\n }\n }\n\n private _startTimeout(): void {\n this._stopTimeout();\n this._connTimeout = setTimeout(() => {\n this.close().catch((err) => {\n logger.error(\"close error\", err instanceof Error ? err.message : String(err));\n });\n }, this._timeout * 2);\n }\n\n private _convertColumnMetaToTediousBulkColumnDef(\n name: string,\n meta: ColumnMeta,\n ): {\n name: string;\n type: TediousDataType;\n options: TediousColumnOptions;\n } {\n const tediousDataType = this._convertDataTypeToTediousBulkColumnType(meta.dataType);\n return {\n name,\n type: tediousDataType.type,\n options: {\n length: tediousDataType.length,\n nullable: meta.nullable ?? false,\n precision: tediousDataType.precision,\n scale: tediousDataType.scale,\n },\n };\n }\n\n private _convertDataTypeToTediousBulkColumnType(dataType: DataType): {\n type: TediousDataType;\n length?: number;\n precision?: number;\n scale?: number;\n } {\n switch (dataType.type) {\n case \"int\":\n return { type: this._tedious.TYPES.Int };\n case \"bigint\":\n return { type: this._tedious.TYPES.BigInt };\n case \"float\":\n return { type: this._tedious.TYPES.Real };\n case \"double\":\n return { type: this._tedious.TYPES.Float };\n case \"decimal\":\n return {\n type: this._tedious.TYPES.Decimal,\n precision: dataType.precision,\n scale: dataType.scale,\n };\n case \"varchar\":\n return { type: this._tedious.TYPES.NVarChar, length: dataType.length };\n case \"char\":\n return { type: this._tedious.TYPES.NChar, length: dataType.length };\n case \"text\":\n return { type: this._tedious.TYPES.NText };\n case \"binary\":\n return { type: this._tedious.TYPES.VarBinary, length: Infinity };\n case \"boolean\":\n return { type: this._tedious.TYPES.Bit };\n case \"datetime\":\n return { type: this._tedious.TYPES.DateTime2 };\n case \"date\":\n return { type: this._tedious.TYPES.Date };\n case \"time\":\n return { type: this._tedious.TYPES.Time };\n case \"uuid\":\n return { type: this._tedious.TYPES.UniqueIdentifier };\n default:\n throw new SdError(`\uC9C0\uC6D0\uD558\uC9C0 \uC54A\uB294 DataType: ${JSON.stringify(dataType)}`);\n }\n }\n\n /**\n * \uAC12\uC758 \uD0C0\uC785\uC744 \uCD94\uB860\uD558\uC5EC Tedious \uB370\uC774\uD130 \uD0C0\uC785 \uBC18\uD658\n *\n * @param value - \uD0C0\uC785\uC744 \uCD94\uB860\uD560 \uAC12 (null/undefined \uC804\uB2EC \uC2DC \uC624\uB958 \uBC1C\uC0DD)\n * @throws null/undefined\uAC00 \uC804\uB2EC\uB418\uBA74 \uC624\uB958 \uBC1C\uC0DD\n */\n private _guessTediousType(value: unknown): TediousDataType {\n if (value == null) {\n throw new SdError(\"_guessTediousType: null/undefined \uAC12\uC740 \uC9C0\uC6D0\uD558\uC9C0 \uC54A\uC2B5\uB2C8\uB2E4.\");\n }\n if (typeof value === \"string\") {\n return this._tedious.TYPES.NVarChar;\n }\n if (typeof value === \"number\") {\n return Number.isInteger(value) ? this._tedious.TYPES.BigInt : this._tedious.TYPES.Decimal;\n }\n if (typeof value === \"boolean\") return this._tedious.TYPES.Bit;\n if (value instanceof DateTime) return this._tedious.TYPES.DateTime2;\n if (value instanceof DateOnly) return this._tedious.TYPES.Date;\n if (value instanceof Time) return this._tedious.TYPES.Time;\n if (value instanceof Uuid) return this._tedious.TYPES.UniqueIdentifier;\n if (value instanceof Uint8Array) return this._tedious.TYPES.VarBinary;\n\n throw new SdError(`\uC54C \uC218 \uC5C6\uB294 \uAC12 \uD0C0\uC785: ${typeof value}`);\n }\n}\n\ninterface TediousColumnOptions {\n length?: number;\n precision?: number;\n scale?: number;\n nullable?: boolean;\n}\n"],
5
- "mappings": "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",
4
+ "mappings": "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",
6
5
  "names": []
7
6
  }
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mysql-db-conn.d.ts","sourceRoot":"","sources":["../../src/connections/mysql-db-conn.ts"],"names":[],"mappings":"AAMA,OAAO,EAKL,YAAY,EAIb,MAAM,uBAAuB,CAAC;AAC/B,OAAO,KAAK,EAAE,UAAU,EAAY,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACjF,OAAO,EAA2C,KAAK,MAAM,EAAE,KAAK,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AAIhH;;;;GAIG;AACH,qBAAa,WAAY,SAAQ,YAAY,CAAC;IAAE,KAAK,EAAE,IAAI,CAAA;CAAE,CAAE,YAAW,MAAM;IAW5E,OAAO,CAAC,QAAQ,CAAC,OAAO;IACxB,QAAQ,CAAC,MAAM,EAAE,iBAAiB;IAXpC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,UAAU,CAAU;IAC5C,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAA2B;IAEpD,OAAO,CAAC,KAAK,CAAC,CAAa;IAC3B,OAAO,CAAC,YAAY,CAAC,CAAgC;IAErD,WAAW,UAAS;IACpB,eAAe,UAAS;gBAGL,OAAO,EAAE,cAAc,gBAAgB,CAAC,EAChD,MAAM,EAAE,iBAAiB;IAK9B,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAgCxB,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAatB,gBAAgB,CAAC,cAAc,CAAC,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC;IAiBhE,iBAAiB,IAAI,OAAO,CAAC,IAAI,CAAC;IAMlC,mBAAmB,IAAI,OAAO,CAAC,IAAI,CAAC;IAMpC,OAAO,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC;IAShD,mBAAmB,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC;IAsC5E,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;IAuDhB;;OAEG;IACH,OAAO,CAAC,aAAa;IA4CrB,OAAO,CAAC,gBAAgB;IAQxB,OAAO,CAAC,WAAW;IAMnB,OAAO,CAAC,YAAY;IAMpB,OAAO,CAAC,aAAa;CAQtB"}
@@ -2,7 +2,7 @@ import { randomUUID } from "crypto";
2
2
  import fs from "fs";
3
3
  import os from "os";
4
4
  import path from "path";
5
- import { createConsola } from "consola";
5
+ import consola from "consola";
6
6
  import {
7
7
  bytesToHex,
8
8
  DateOnly,
@@ -13,8 +13,8 @@ import {
13
13
  Time,
14
14
  Uuid
15
15
  } from "@simplysm/core-common";
16
- import { DB_CONN_DEFAULT_TIMEOUT, DB_CONN_ERRORS } from "../types/db-conn";
17
- const logger = createConsola().withTag("mysql-db-conn");
16
+ import { DB_CONN_DEFAULT_TIMEOUT, DB_CONN_ERRORS } from "../types/db-conn.js";
17
+ const logger = consola.withTag("mysql-db-conn");
18
18
  class MysqlDbConn extends EventEmitter {
19
19
  constructor(_mysql2, config) {
20
20
  super();
@@ -1,7 +1,6 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../src/connections/mysql-db-conn.ts"],
4
- "sourcesContent": ["import { randomUUID } from \"crypto\";\nimport fs from \"fs\";\nimport os from \"os\";\nimport path from \"path\";\nimport type { Connection } from \"mysql2/promise\";\nimport { createConsola } from \"consola\";\nimport {\n bytesToHex,\n DateOnly,\n DateTime,\n SdError,\n EventEmitter,\n strIsNullOrEmpty,\n Time,\n Uuid,\n} from \"@simplysm/core-common\";\nimport type { ColumnMeta, DataType, IsolationLevel } from \"@simplysm/orm-common\";\nimport { DB_CONN_DEFAULT_TIMEOUT, DB_CONN_ERRORS, type DbConn, type MysqlDbConnConfig } from \"../types/db-conn\";\n\nconst logger = createConsola().withTag(\"mysql-db-conn\");\n\n/**\n * MySQL \uB370\uC774\uD130\uBCA0\uC774\uC2A4 \uC5F0\uACB0 \uD074\uB798\uC2A4\n *\n * mysql2/promise \uB77C\uC774\uBE0C\uB7EC\uB9AC\uB97C \uC0AC\uC6A9\uD558\uC5EC MySQL \uC5F0\uACB0\uC744 \uAD00\uB9AC\uD569\uB2C8\uB2E4.\n */\nexport class MysqlDbConn extends EventEmitter<{ close: void }> implements DbConn {\n private static readonly _ROOT_USER = \"root\";\n private readonly _timeout = DB_CONN_DEFAULT_TIMEOUT;\n\n private _conn?: Connection;\n private _connTimeout?: ReturnType<typeof setTimeout>;\n\n isConnected = false;\n isOnTransaction = false;\n\n constructor(\n private readonly _mysql2: typeof import(\"mysql2/promise\"),\n readonly config: MysqlDbConnConfig,\n ) {\n super();\n }\n\n async connect(): Promise<void> {\n if (this.isConnected) {\n throw new SdError(DB_CONN_ERRORS.ALREADY_CONNECTED);\n }\n\n const conn = await this._mysql2.createConnection({\n host: this.config.host,\n port: this.config.port,\n user: this.config.username,\n password: this.config.password,\n // root \uC0AC\uC6A9\uC790\uB294 \uD2B9\uC815 database\uC5D0 \uBC14\uC778\uB529\uB418\uC9C0 \uC54A\uACE0 \uC5F0\uACB0\uD558\uC5EC\n // \uBAA8\uB4E0 \uB370\uC774\uD130\uBCA0\uC774\uC2A4\uC5D0 \uC811\uADFC\uD560 \uC218 \uC788\uB3C4\uB85D \uD568 (\uAD00\uB9AC \uC791\uC5C5\uC6A9)\n database: this.config.username === MysqlDbConn._ROOT_USER ? undefined : this.config.database,\n multipleStatements: true,\n charset: \"utf8mb4\",\n infileStreamFactory: (filePath: string) => fs.createReadStream(filePath), // LOAD DATA LOCAL INFILE \uC9C0\uC6D0\n } as Parameters<typeof this._mysql2.createConnection>[0]);\n\n conn.on(\"end\", () => {\n this.emit(\"close\");\n this._resetState();\n });\n\n conn.on(\"error\", (error) => {\n logger.error(\"DB \uC5F0\uACB0 \uC624\uB958\", error.message);\n });\n\n this._conn = conn;\n this._startTimeout();\n this.isConnected = true;\n }\n\n async close(): Promise<void> {\n this._stopTimeout();\n\n if (this._conn == null || !this.isConnected) {\n return;\n }\n\n await this._conn.end();\n\n this.emit(\"close\");\n this._resetState();\n }\n\n async beginTransaction(isolationLevel?: IsolationLevel): Promise<void> {\n const conn = this._assertConnected();\n\n const level = (isolationLevel ?? this.config.defaultIsolationLevel ?? \"READ_UNCOMMITTED\").replace(/_/g, \" \");\n\n // \uACA9\uB9AC \uC218\uC900\uC744 \uBA3C\uC800 \uC124\uC815 (\uB2E4\uC74C \uD2B8\uB79C\uC7AD\uC158\uC5D0 \uC801\uC6A9\uB428)\n await conn.query({\n sql: `SET SESSION TRANSACTION ISOLATION LEVEL ${level}`,\n timeout: this._timeout,\n });\n\n // \uADF8 \uB2E4\uC74C \uD2B8\uB79C\uC7AD\uC158 \uC2DC\uC791\n await conn.beginTransaction();\n\n this.isOnTransaction = true;\n }\n\n async commitTransaction(): Promise<void> {\n const conn = this._assertConnected();\n await conn.commit();\n this.isOnTransaction = false;\n }\n\n async rollbackTransaction(): Promise<void> {\n const conn = this._assertConnected();\n await conn.rollback();\n this.isOnTransaction = false;\n }\n\n async execute(queries: string[]): Promise<unknown[][]> {\n const results: unknown[][] = [];\n for (const query of queries.filter((item) => !strIsNullOrEmpty(item))) {\n const resultItems = await this.executeParametrized(query);\n results.push(...resultItems);\n }\n return results;\n }\n\n async executeParametrized(query: string, params?: unknown[]): Promise<unknown[][]> {\n const conn = this._assertConnected();\n\n logger.debug(\"\uCFFC\uB9AC \uC2E4\uD589\", { queryLength: query.length, params });\n\n try {\n const [queryResults] = await conn.query({\n sql: query,\n timeout: this._timeout,\n values: params,\n });\n\n this._startTimeout();\n\n // MySQL\uC740 INSERT/UPDATE/DELETE \uBB38\uC5D0 \uB300\uD574 ResultSetHeader\uB97C \uBC18\uD658\uD568\n // SELECT \uACB0\uACFC\uB9CC \uCD94\uCD9C\uD558\uAE30 \uC704\uD574 ResultSetHeader \uAC1D\uCCB4\uB97C \uD544\uD130\uB9C1\uD568\n // ResultSetHeader\uB294 affectedRows, fieldCount \uB4F1\uC758 \uD544\uB4DC\uB97C \uAC00\uC9C0\uACE0 \uC788\uC74C\n const result: unknown[] = [];\n if (queryResults instanceof Array) {\n for (const queryResult of queryResults.filter(\n (item: unknown) =>\n !(typeof item === \"object\" && item !== null && \"affectedRows\" in item && \"fieldCount\" in item),\n )) {\n result.push(queryResult);\n }\n }\n\n return [result];\n } catch (err) {\n this._startTimeout();\n const error = err as Error & { sql?: string };\n throw new SdError(\n error,\n \"\uCFFC\uB9AC \uC218\uD589\uC911 \uC624\uB958\uBC1C\uC0DD\" + (error.sql != null ? \"\\n-- query\\n\" + error.sql.trim() + \"\\n--\" : \"\"),\n );\n }\n }\n\n async bulkInsert(\n tableName: string,\n columnMetas: Record<string, ColumnMeta>,\n records: Record<string, unknown>[],\n ): Promise<void> {\n const conn = this._assertConnected();\n\n if (records.length === 0) return;\n\n const colNames = Object.keys(columnMetas);\n\n // \uC784\uC2DC CSV \uD30C\uC77C \uC0DD\uC131\n const tmpDir = os.tmpdir();\n const tmpFile = path.join(tmpDir, `mysql_bulk_${randomUUID()}.csv`);\n\n try {\n // CSV \uB370\uC774\uD130 \uC0DD\uC131\n const csvLines: string[] = [];\n for (const record of records) {\n const row = colNames.map((colName) => this._escapeForCsv(record[colName], columnMetas[colName].dataType));\n csvLines.push(row.join(\"\\t\"));\n }\n const csvContent = csvLines.join(\"\\n\");\n\n // \uD30C\uC77C \uC4F0\uAE30\n await fs.promises.writeFile(tmpFile, csvContent, \"utf8\");\n\n // UUID/binary \uCEEC\uB7FC\uC740 \uC784\uC2DC \uBCC0\uC218\uB85C \uC77D\uACE0 SET \uC808\uC5D0\uC11C UNHEX() \uBCC0\uD658\n const binaryColNames = colNames.filter((c) => {\n const dt = columnMetas[c].dataType.type;\n return dt === \"uuid\" || dt === \"binary\";\n });\n const normalCols = colNames.map((c) => {\n if (binaryColNames.includes(c)) return `@_${c}`;\n return `\\`${c}\\``;\n });\n const setClauses = binaryColNames.map((c) => `\\`${c}\\` = UNHEX(@_${c})`);\n\n // LOAD DATA LOCAL INFILE \uC2E4\uD589\n let query = `LOAD DATA LOCAL INFILE ? INTO TABLE ${tableName} FIELDS TERMINATED BY '\\\\t' LINES TERMINATED BY '\\\\n' (${normalCols.join(\", \")})`;\n if (setClauses.length > 0) {\n query += ` SET ${setClauses.join(\", \")}`;\n }\n\n await conn.query({ sql: query, timeout: this._timeout, values: [tmpFile] });\n } finally {\n // \uC784\uC2DC \uD30C\uC77C \uC0AD\uC81C\n try {\n await fs.promises.unlink(tmpFile);\n } catch {\n // \uC0AD\uC81C \uC2E4\uD328 \uBB34\uC2DC\n }\n }\n }\n\n // \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n // Private helpers\n // \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\n /**\n * MySQL LOAD DATA INFILE\uC6A9 \uAC12 \uC774\uC2A4\uCF00\uC774\uD504\n */\n private _escapeForCsv(value: unknown, dataType: DataType): string {\n if (value == null) {\n return \"\\\\N\"; // MySQL NULL \uD45C\uD604\n }\n\n switch (dataType.type) {\n case \"int\":\n case \"bigint\":\n case \"float\":\n case \"double\":\n case \"decimal\":\n return String(value);\n\n case \"boolean\":\n return (value as boolean) ? \"1\" : \"0\";\n\n case \"varchar\":\n case \"char\":\n case \"text\": {\n const str = value as string;\n // \uD0ED, \uC904\uBC14\uAFC8, \uBC31\uC2AC\uB798\uC2DC \uC774\uC2A4\uCF00\uC774\uD504\n return str.replace(/\\\\/g, \"\\\\\\\\\").replace(/\\t/g, \"\\\\t\").replace(/\\n/g, \"\\\\n\").replace(/\\r/g, \"\\\\r\");\n }\n\n case \"datetime\":\n return (value as DateTime).toFormatString(\"yyyy-MM-dd HH:mm:ss.fff\");\n\n case \"date\":\n return (value as DateOnly).toFormatString(\"yyyy-MM-dd\");\n\n case \"time\":\n return (value as Time).toFormatString(\"HH:mm:ss\");\n\n case \"uuid\":\n return (value as Uuid).toString().replace(/-/g, \"\"); // BINARY(16) \uC800\uC7A5\uC6A9 hex\n\n case \"binary\":\n return bytesToHex(value as Uint8Array);\n\n default:\n throw new SdError(`\uC9C0\uC6D0\uD558\uC9C0 \uC54A\uB294 DataType: ${JSON.stringify(dataType)}`);\n }\n }\n\n private _assertConnected(): Connection {\n if (this._conn == null || !this.isConnected) {\n throw new SdError(DB_CONN_ERRORS.NOT_CONNECTED);\n }\n this._startTimeout();\n return this._conn;\n }\n\n private _resetState(): void {\n this.isConnected = false;\n this.isOnTransaction = false;\n this._conn = undefined;\n }\n\n private _stopTimeout(): void {\n if (this._connTimeout != null) {\n clearTimeout(this._connTimeout);\n }\n }\n\n private _startTimeout(): void {\n this._stopTimeout();\n this._connTimeout = setTimeout(() => {\n this.close().catch((err) => {\n logger.error(\"close error\", err instanceof Error ? err.message : String(err));\n });\n }, this._timeout * 2);\n }\n}\n"],
5
- "mappings": "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",
4
+ "mappings": "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",
6
5
  "names": []
7
6
  }
@@ -0,0 +1 @@
1
+ {"version":3,"file":"postgresql-db-conn.d.ts","sourceRoot":"","sources":["../../src/connections/postgresql-db-conn.ts"],"names":[],"mappings":"AAEA,OAAO,EAKL,YAAY,EAIb,MAAM,uBAAuB,CAAC;AAC/B,OAAO,KAAK,EAAE,UAAU,EAAY,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACjF,OAAO,EAA2C,KAAK,MAAM,EAAE,KAAK,sBAAsB,EAAE,MAAM,kBAAkB,CAAC;AAErH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAIvD;;;;GAIG;AACH,qBAAa,gBAAiB,SAAQ,YAAY,CAAC;IAAE,KAAK,EAAE,IAAI,CAAA;CAAE,CAAE,YAAW,MAAM;IAUjF,OAAO,CAAC,QAAQ,CAAC,GAAG;IACpB,OAAO,CAAC,QAAQ,CAAC,WAAW;IAC5B,QAAQ,CAAC,MAAM,EAAE,sBAAsB;IAXzC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAA2B;IAEpD,OAAO,CAAC,OAAO,CAAC,CAAS;IACzB,OAAO,CAAC,YAAY,CAAC,CAAgC;IAErD,WAAW,UAAS;IACpB,eAAe,UAAS;gBAGL,GAAG,EAAE,cAAc,IAAI,CAAC,EACxB,WAAW,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,eAAe,EAC3D,MAAM,EAAE,sBAAsB;IAKnC,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IA+BxB,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAatB,gBAAgB,CAAC,cAAc,CAAC,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC;IAWhE,iBAAiB,IAAI,OAAO,CAAC,IAAI,CAAC;IAMlC,mBAAmB,IAAI,OAAO,CAAC,IAAI,CAAC;IAMpC,OAAO,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC;IAShD,mBAAmB,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC;IAmB5E,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;IAoChB;;OAEG;IACH,OAAO,CAAC,aAAa;IA+CrB,OAAO,CAAC,gBAAgB;IAOxB,OAAO,CAAC,WAAW;IAMnB,OAAO,CAAC,YAAY;IAMpB,OAAO,CAAC,aAAa;CAQtB"}
@@ -1,5 +1,5 @@
1
1
  import { Readable } from "stream";
2
- import { createConsola } from "consola";
2
+ import consola from "consola";
3
3
  import {
4
4
  bytesToHex,
5
5
  DateOnly,
@@ -10,8 +10,8 @@ import {
10
10
  Time,
11
11
  Uuid
12
12
  } from "@simplysm/core-common";
13
- import { DB_CONN_DEFAULT_TIMEOUT, DB_CONN_ERRORS } from "../types/db-conn";
14
- const logger = createConsola().withTag("postgresql-db-conn");
13
+ import { DB_CONN_DEFAULT_TIMEOUT, DB_CONN_ERRORS } from "../types/db-conn.js";
14
+ const logger = consola.withTag("postgresql-db-conn");
15
15
  class PostgresqlDbConn extends EventEmitter {
16
16
  constructor(_pg, _pgCopyFrom, config) {
17
17
  super();
@@ -1,7 +1,6 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../src/connections/postgresql-db-conn.ts"],
4
- "sourcesContent": ["import { Readable } from \"stream\";\nimport { createConsola } from \"consola\";\nimport {\n bytesToHex,\n DateOnly,\n DateTime,\n SdError,\n EventEmitter,\n strIsNullOrEmpty,\n Time,\n Uuid,\n} from \"@simplysm/core-common\";\nimport type { ColumnMeta, DataType, IsolationLevel } from \"@simplysm/orm-common\";\nimport { DB_CONN_DEFAULT_TIMEOUT, DB_CONN_ERRORS, type DbConn, type PostgresqlDbConnConfig } from \"../types/db-conn\";\nimport type { Client } from \"pg\";\nimport type { CopyStreamQuery } from \"pg-copy-streams\";\n\nconst logger = createConsola().withTag(\"postgresql-db-conn\");\n\n/**\n * PostgreSQL \uB370\uC774\uD130\uBCA0\uC774\uC2A4 \uC5F0\uACB0 \uD074\uB798\uC2A4\n *\n * pg \uB77C\uC774\uBE0C\uB7EC\uB9AC\uB97C \uC0AC\uC6A9\uD558\uC5EC PostgreSQL \uC5F0\uACB0\uC744 \uAD00\uB9AC\uD569\uB2C8\uB2E4.\n */\nexport class PostgresqlDbConn extends EventEmitter<{ close: void }> implements DbConn {\n private readonly _timeout = DB_CONN_DEFAULT_TIMEOUT;\n\n private _client?: Client;\n private _connTimeout?: ReturnType<typeof setTimeout>;\n\n isConnected = false;\n isOnTransaction = false;\n\n constructor(\n private readonly _pg: typeof import(\"pg\"),\n private readonly _pgCopyFrom: (queryText: string) => CopyStreamQuery,\n readonly config: PostgresqlDbConnConfig,\n ) {\n super();\n }\n\n async connect(): Promise<void> {\n if (this.isConnected) {\n throw new SdError(DB_CONN_ERRORS.ALREADY_CONNECTED);\n }\n\n const client = new this._pg.Client({\n host: this.config.host,\n port: this.config.port ?? 5432,\n user: this.config.username,\n password: this.config.password,\n database: this.config.database,\n connectionTimeoutMillis: this._timeout,\n query_timeout: this._timeout,\n });\n\n client.on(\"end\", () => {\n this.emit(\"close\");\n this._resetState();\n });\n\n client.on(\"error\", (error) => {\n logger.error(\"DB \uC5F0\uACB0 \uC624\uB958\", error.message);\n });\n\n await client.connect();\n\n this._client = client;\n this._startTimeout();\n this.isConnected = true;\n }\n\n async close(): Promise<void> {\n this._stopTimeout();\n\n if (this._client == null || !this.isConnected) {\n return;\n }\n\n await this._client.end();\n\n this.emit(\"close\");\n this._resetState();\n }\n\n async beginTransaction(isolationLevel?: IsolationLevel): Promise<void> {\n this._assertConnected();\n\n const level = (isolationLevel ?? this.config.defaultIsolationLevel ?? \"READ_UNCOMMITTED\").replace(/_/g, \" \");\n\n await this._client!.query(\"BEGIN\");\n await this._client!.query(`SET TRANSACTION ISOLATION LEVEL ${level}`);\n\n this.isOnTransaction = true;\n }\n\n async commitTransaction(): Promise<void> {\n this._assertConnected();\n await this._client!.query(\"COMMIT\");\n this.isOnTransaction = false;\n }\n\n async rollbackTransaction(): Promise<void> {\n this._assertConnected();\n await this._client!.query(\"ROLLBACK\");\n this.isOnTransaction = false;\n }\n\n async execute(queries: string[]): Promise<unknown[][]> {\n const results: unknown[][] = [];\n for (const query of queries.filter((item) => !strIsNullOrEmpty(item))) {\n const resultItems = await this.executeParametrized(query);\n results.push(...resultItems);\n }\n return results;\n }\n\n async executeParametrized(query: string, params?: unknown[]): Promise<unknown[][]> {\n this._assertConnected();\n\n logger.debug(\"\uCFFC\uB9AC \uC2E4\uD589\", { queryLength: query.length, params });\n\n try {\n const result = await this._client!.query(query, params);\n\n this._startTimeout();\n\n // PostgreSQL\uC740 \uB2E8\uC77C \uACB0\uACFC\uC14B \uBC18\uD658\n return [result.rows];\n } catch (err) {\n this._startTimeout();\n const error = err instanceof Error ? err : new Error(String(err));\n throw new SdError(error, \"\uCFFC\uB9AC \uC218\uD589\uC911 \uC624\uB958\uBC1C\uC0DD\\n-- query\\n\" + query.trim() + \"\\n--\");\n }\n }\n\n async bulkInsert(\n tableName: string,\n columnMetas: Record<string, ColumnMeta>,\n records: Record<string, unknown>[],\n ): Promise<void> {\n this._assertConnected();\n\n if (records.length === 0) return;\n\n const colNames = Object.keys(columnMetas);\n const wrappedCols = colNames.map((c) => `\"${c}\"`).join(\", \");\n\n // COPY FROM STDIN \uC2A4\uD2B8\uB9BC \uC0DD\uC131\n const copyQuery = `COPY ${tableName} (${wrappedCols}) FROM STDIN WITH (FORMAT csv, NULL '\\\\N')`;\n const stream = this._client!.query(this._pgCopyFrom(copyQuery));\n\n // CSV \uB370\uC774\uD130 \uC0DD\uC131\n const csvLines: string[] = [];\n for (const record of records) {\n const row = colNames.map((colName) => this._escapeForCsv(record[colName], columnMetas[colName].dataType));\n csvLines.push(row.join(\",\"));\n }\n const csvContent = csvLines.join(\"\\n\") + \"\\n\";\n\n // \uC2A4\uD2B8\uB9BC\uC73C\uB85C \uB370\uC774\uD130 \uC804\uC1A1\n await new Promise<void>((resolve, reject) => {\n const readable = Readable.from([csvContent]);\n\n readable.on(\"error\", reject);\n stream.on(\"error\", reject);\n stream.on(\"finish\", resolve);\n\n readable.pipe(stream);\n });\n }\n\n // \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n // Private helpers\n // \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\n /**\n * PostgreSQL COPY CSV\uC6A9 \uAC12 \uC774\uC2A4\uCF00\uC774\uD504\n */\n private _escapeForCsv(value: unknown, dataType: DataType): string {\n if (value == null) {\n return \"\\\\N\"; // NULL \uD45C\uD604\n }\n\n switch (dataType.type) {\n case \"int\":\n case \"bigint\":\n case \"float\":\n case \"double\":\n case \"decimal\":\n return String(value);\n\n case \"boolean\":\n return (value as boolean) ? \"true\" : \"false\";\n\n case \"varchar\":\n case \"char\":\n case \"text\": {\n const str = value as string;\n // CSV \uD615\uC2DD: \uC30D\uB530\uC634\uD45C\uB85C \uAC10\uC2F8\uACE0, \uB0B4\uBD80 \uC30D\uB530\uC634\uD45C\uB294 \uB450 \uBC88\n if (str.includes('\"') || str.includes(\",\") || str.includes(\"\\n\") || str.includes(\"\\r\")) {\n return '\"' + str.replace(/\"/g, '\"\"') + '\"';\n }\n return str;\n }\n\n case \"datetime\":\n return (value as DateTime).toFormatString(\"yyyy-MM-dd HH:mm:ss.fff\");\n\n case \"date\":\n return (value as DateOnly).toFormatString(\"yyyy-MM-dd\");\n\n case \"time\":\n return (value as Time).toFormatString(\"HH:mm:ss\");\n\n case \"uuid\":\n return (value as Uuid).toString();\n\n case \"binary\":\n return '\"\\\\x' + bytesToHex(value as Uint8Array) + '\"'; // PostgreSQL bytea hex \uD615\uC2DD (CSV \uC30D\uB530\uC634\uD45C\uB85C \uAC10\uC308)\n\n default:\n throw new SdError(`\uC9C0\uC6D0\uD558\uC9C0 \uC54A\uB294 DataType: ${JSON.stringify(dataType)}`);\n }\n }\n\n private _assertConnected(): void {\n if (this._client == null || !this.isConnected) {\n throw new SdError(DB_CONN_ERRORS.NOT_CONNECTED);\n }\n this._startTimeout();\n }\n\n private _resetState(): void {\n this.isConnected = false;\n this.isOnTransaction = false;\n this._client = undefined;\n }\n\n private _stopTimeout(): void {\n if (this._connTimeout != null) {\n clearTimeout(this._connTimeout);\n }\n }\n\n private _startTimeout(): void {\n this._stopTimeout();\n this._connTimeout = setTimeout(() => {\n this.close().catch((err) => {\n logger.error(\"close error\", err instanceof Error ? err.message : String(err));\n });\n }, this._timeout * 2);\n }\n}\n"],
5
- "mappings": "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",
4
+ "mappings": "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",
6
5
  "names": []
7
6
  }
@@ -0,0 +1,12 @@
1
+ import type { DbConn, DbConnConfig } from "./types/db-conn";
2
+ /**
3
+ * DB 연결 생성
4
+ *
5
+ * 커넥션 풀에서 연결을 획득하여 반환한다.
6
+ * 풀이 없는 경우 새로 생성한다.
7
+ *
8
+ * @param config - 데이터베이스 연결 설정
9
+ * @returns 풀링된 DB 연결 객체
10
+ */
11
+ export declare function createDbConn(config: DbConnConfig): Promise<DbConn>;
12
+ //# sourceMappingURL=create-db-conn.d.ts.map
@@ -0,0 +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;AAwB5D;;;;;;;;GAQG;AACH,wBAAgB,YAAY,CAAC,MAAM,EAAE,YAAY,GAAG,OAAO,CAAC,MAAM,CAAC,CAMlE"}
@@ -0,0 +1,75 @@
1
+ import { createPool } from "generic-pool";
2
+ import { PooledDbConn } from "./pooled-db-conn.js";
3
+ import { MysqlDbConn } from "./connections/mysql-db-conn.js";
4
+ import { MssqlDbConn } from "./connections/mssql-db-conn.js";
5
+ import { PostgresqlDbConn } from "./connections/postgresql-db-conn.js";
6
+ const poolMap = /* @__PURE__ */ new Map();
7
+ const modules = {};
8
+ function createDbConn(config) {
9
+ const pool = getOrCreatePool(config);
10
+ return Promise.resolve(new PooledDbConn(pool, config));
11
+ }
12
+ function getOrCreatePool(config) {
13
+ const configKey = JSON.stringify(
14
+ config,
15
+ (_, value) => value != null && typeof value === "object" && !Array.isArray(value) ? Object.fromEntries(Object.entries(value).sort(([a], [b]) => a.localeCompare(b))) : value
16
+ );
17
+ if (!poolMap.has(configKey)) {
18
+ const pool = createPool(
19
+ {
20
+ create: async () => {
21
+ const conn = await createRawConnection(config);
22
+ await conn.connect();
23
+ return conn;
24
+ },
25
+ destroy: async (conn) => {
26
+ await conn.close();
27
+ },
28
+ validate: (conn) => {
29
+ return Promise.resolve(conn.isConnected);
30
+ }
31
+ },
32
+ {
33
+ min: config.pool?.min ?? 1,
34
+ max: config.pool?.max ?? 10,
35
+ acquireTimeoutMillis: config.pool?.acquireTimeoutMillis ?? 3e4,
36
+ idleTimeoutMillis: config.pool?.idleTimeoutMillis ?? 3e4,
37
+ testOnBorrow: true
38
+ // [중요] 빌려줄 때 validate 실행 여부
39
+ }
40
+ );
41
+ poolMap.set(configKey, pool);
42
+ }
43
+ return poolMap.get(configKey);
44
+ }
45
+ async function createRawConnection(config) {
46
+ if (config.dialect === "mysql") {
47
+ const mysql = await ensureModule("mysql");
48
+ return new MysqlDbConn(mysql, config);
49
+ } else if (config.dialect === "postgresql") {
50
+ const pg = await ensureModule("pg");
51
+ const pgCopyStreams = await ensureModule("pgCopyStreams");
52
+ return new PostgresqlDbConn(pg, pgCopyStreams.from, config);
53
+ } else {
54
+ const tedious = await ensureModule("tedious");
55
+ return new MssqlDbConn(tedious, config);
56
+ }
57
+ }
58
+ async function ensureModule(name) {
59
+ if (modules[name] == null) {
60
+ if (name === "mysql") {
61
+ modules.mysql = await import("mysql2/promise");
62
+ } else if (name === "pg") {
63
+ modules.pg = await import("pg");
64
+ } else if (name === "pgCopyStreams") {
65
+ modules.pgCopyStreams = await import("pg-copy-streams");
66
+ } else {
67
+ modules.tedious = await import("tedious");
68
+ }
69
+ }
70
+ return modules[name];
71
+ }
72
+ export {
73
+ createDbConn
74
+ };
75
+ //# sourceMappingURL=create-db-conn.js.map
@@ -0,0 +1,6 @@
1
+ {
2
+ "version": 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,UAKF,CAAC;AAWE,SAAS,aAAa,QAAuC;AAElE,QAAM,OAAO,gBAAgB,MAAM;AAGnC,SAAO,QAAQ,QAAQ,IAAI,aAAa,MAAM,MAAM,CAAC;AACvD;AAEA,SAAS,gBAAgB,QAAoC;AAE3D,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,YAAQ,IAAI,WAAW,IAAI;AAAA,EAC7B;AAEA,SAAO,QAAQ,IAAI,SAAS;AAC9B;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,cAAc,MAAM,MAAM;AAAA,EAC5D,OAAO;AAEL,UAAM,UAAU,MAAM,aAAa,SAAS;AAC5C,WAAO,IAAI,YAAY,SAAS,MAAM;AAAA,EACxC;AACF;AAEA,eAAe,aAA6C,MAAoD;AAC9G,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
+ "names": []
6
+ }
@@ -1,12 +1,11 @@
1
- import type { DbContext, IsolationLevel } from "@simplysm/orm-common";
2
- import type { Type } from "@simplysm/core-common";
1
+ import { type DbContextDef, type DbContextInstance, type IsolationLevel } from "@simplysm/orm-common";
3
2
  import type { DbConnConfig } from "./types/db-conn";
4
3
  /**
5
- * SdOrm 옵션
4
+ * Orm 옵션
6
5
  *
7
6
  * DbConnConfig보다 우선 적용되는 DbContext 옵션
8
7
  */
9
- export interface SdOrmOptions {
8
+ export interface OrmOptions {
10
9
  /**
11
10
  * 데이터베이스 이름 (DbConnConfig의 database 대신 사용)
12
11
  */
@@ -17,18 +16,43 @@ export interface SdOrmOptions {
17
16
  schema?: string;
18
17
  }
19
18
  /**
20
- * Node.js ORM 클래스
19
+ * Orm 인스턴스 타입
21
20
  *
22
- * DbContext와 DB 연결을 관리하는 최상위 클래스입니다.
23
- * DbContext 타입과 연결 설정을 받아 트랜잭션을 관리합니다.
21
+ * createOrm에서 반환되는 객체의 타입
22
+ */
23
+ export interface Orm<TDef extends DbContextDef<any, any, any>> {
24
+ readonly dbContextDef: TDef;
25
+ readonly config: DbConnConfig;
26
+ readonly options?: OrmOptions;
27
+ /**
28
+ * 트랜잭션 내에서 콜백 실행
29
+ *
30
+ * @param callback - DB 연결 후 실행할 콜백
31
+ * @param isolationLevel - 트랜잭션 격리 수준
32
+ * @returns 콜백 결과
33
+ */
34
+ connect<R>(callback: (conn: DbContextInstance<TDef>) => Promise<R>, isolationLevel?: IsolationLevel): Promise<R>;
35
+ /**
36
+ * 트랜잭션 없이 콜백 실행
37
+ *
38
+ * @param callback - DB 연결 후 실행할 콜백
39
+ * @returns 콜백 결과
40
+ */
41
+ connectWithoutTransaction<R>(callback: (conn: DbContextInstance<TDef>) => Promise<R>): Promise<R>;
42
+ }
43
+ /**
44
+ * Node.js ORM 팩토리 함수
45
+ *
46
+ * DbContext와 DB 연결을 관리하는 인스턴스를 생성합니다.
47
+ * DbContext 정의와 연결 설정을 받아 트랜잭션을 관리합니다.
24
48
  *
25
49
  * @example
26
50
  * ```typescript
27
- * class MyDb extends DbContext {
28
- * readonly user = queryable(this, User);
29
- * }
51
+ * const MyDb = defineDbContext({
52
+ * user: (db) => queryable(db, User),
53
+ * });
30
54
  *
31
- * const orm = new SdOrm(MyDb, {
55
+ * const orm = createOrm(MyDb, {
32
56
  * dialect: "mysql",
33
57
  * host: "localhost",
34
58
  * port: 3306,
@@ -50,29 +74,5 @@ export interface SdOrmOptions {
50
74
  * });
51
75
  * ```
52
76
  */
53
- export declare class SdOrm<T extends DbContext> {
54
- readonly dbContextType: Type<T>;
55
- readonly config: DbConnConfig;
56
- readonly options?: SdOrmOptions | undefined;
57
- constructor(dbContextType: Type<T>, config: DbConnConfig, options?: SdOrmOptions | undefined);
58
- /**
59
- * 트랜잭션 내에서 콜백 실행
60
- *
61
- * @param callback - DB 연결 후 실행할 콜백
62
- * @param isolationLevel - 트랜잭션 격리 수준
63
- * @returns 콜백 결과
64
- */
65
- connect<R>(callback: (conn: T) => Promise<R>, isolationLevel?: IsolationLevel): Promise<R>;
66
- /**
67
- * 트랜잭션 없이 콜백 실행
68
- *
69
- * @param callback - DB 연결 후 실행할 콜백
70
- * @returns 콜백 결과
71
- */
72
- connectWithoutTransaction<R>(callback: (conn: T) => Promise<R>): Promise<R>;
73
- /**
74
- * DbContext 인스턴스 생성
75
- */
76
- private _createDbContext;
77
- }
78
- //# sourceMappingURL=sd-orm.d.ts.map
77
+ export declare function createOrm<TDef extends DbContextDef<any, any, any>>(dbContextDef: TDef, config: DbConnConfig, options?: OrmOptions): Orm<TDef>;
78
+ //# sourceMappingURL=create-orm.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"create-orm.d.ts","sourceRoot":"","sources":["../src/create-orm.ts"],"names":[],"mappings":"AAAA,OAAO,EAAmB,KAAK,YAAY,EAAE,KAAK,iBAAiB,EAAE,KAAK,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACvH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAGpD;;;;GAIG;AACH,MAAM,WAAW,UAAU;IACzB;;OAEG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;IAElB;;OAEG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED;;;;GAIG;AACH,MAAM,WAAW,GAAG,CAAC,IAAI,SAAS,YAAY,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;IAC3D,QAAQ,CAAC,YAAY,EAAE,IAAI,CAAC;IAC5B,QAAQ,CAAC,MAAM,EAAE,YAAY,CAAC;IAC9B,QAAQ,CAAC,OAAO,CAAC,EAAE,UAAU,CAAC;IAE9B;;;;;;OAMG;IACH,OAAO,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC,IAAI,EAAE,iBAAiB,CAAC,IAAI,CAAC,KAAK,OAAO,CAAC,CAAC,CAAC,EAAE,cAAc,CAAC,EAAE,cAAc,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;IAEjH;;;;;OAKG;IACH,yBAAyB,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC,IAAI,EAAE,iBAAiB,CAAC,IAAI,CAAC,KAAK,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;CACnG;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiCG;AACH,wBAAgB,SAAS,CAAC,IAAI,SAAS,YAAY,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,EAChE,YAAY,EAAE,IAAI,EAClB,MAAM,EAAE,YAAY,EACpB,OAAO,CAAC,EAAE,UAAU,GACnB,GAAG,CAAC,IAAI,CAAC,CA8BX"}