@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
@@ -0,0 +1,32 @@
1
+ import { createDbContext } from "@simplysm/orm-common";
2
+ import { NodeDbContextExecutor } from "./node-db-context-executor.js";
3
+ function createOrm(dbContextDef, config, options) {
4
+ function _createDbContext() {
5
+ const database = options?.database ?? ("database" in config ? config.database : void 0);
6
+ if (database == null || database === "") {
7
+ throw new Error("database is required");
8
+ }
9
+ const schema = options?.schema ?? ("schema" in config ? config.schema : void 0);
10
+ return createDbContext(dbContextDef, new NodeDbContextExecutor(config), {
11
+ database,
12
+ schema
13
+ });
14
+ }
15
+ return {
16
+ dbContextDef,
17
+ config,
18
+ options,
19
+ async connect(callback, isolationLevel) {
20
+ const db = _createDbContext();
21
+ return db.connect(async () => callback(db), isolationLevel);
22
+ },
23
+ async connectWithoutTransaction(callback) {
24
+ const db = _createDbContext();
25
+ return db.connectWithoutTransaction(async () => callback(db));
26
+ }
27
+ };
28
+ }
29
+ export {
30
+ createOrm
31
+ };
32
+ //# sourceMappingURL=create-orm.js.map
@@ -0,0 +1,6 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../src/create-orm.ts"],
4
+ "mappings": "AAAA,SAAS,uBAAuF;AAEhG,SAAS,6BAA6B;AAiF/B,SAAS,UACd,cACA,QACA,SACW;AACX,WAAS,mBAA4C;AAEnD,UAAM,WAAW,SAAS,aAAa,cAAc,SAAS,OAAO,WAAW;AAChF,QAAI,YAAY,QAAQ,aAAa,IAAI;AACvC,YAAM,IAAI,MAAM,sBAAsB;AAAA,IACxC;AAGA,UAAM,SAAS,SAAS,WAAW,YAAY,SAAS,OAAO,SAAS;AAExE,WAAO,gBAAgB,cAAc,IAAI,sBAAsB,MAAM,GAAG;AAAA,MACtE;AAAA,MACA;AAAA,IACF,CAAC;AAAA,EACH;AAEA,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,IACA,MAAM,QAAQ,UAAU,gBAAiB;AACvC,YAAM,KAAK,iBAAiB;AAC5B,aAAO,GAAG,QAAQ,YAAY,SAAS,EAAE,GAAG,cAAc;AAAA,IAC5D;AAAA,IACA,MAAM,0BAA0B,UAAU;AACxC,YAAM,KAAK,iBAAiB;AAC5B,aAAO,GAAG,0BAA0B,YAAY,SAAS,EAAE,CAAC;AAAA,IAC9D;AAAA,EACF;AACF;",
5
+ "names": []
6
+ }
@@ -2,8 +2,8 @@ export * from "./types/db-conn";
2
2
  export * from "./connections/mssql-db-conn";
3
3
  export * from "./connections/mysql-db-conn";
4
4
  export * from "./connections/postgresql-db-conn";
5
- export * from "./db-conn-factory";
5
+ export * from "./create-db-conn";
6
6
  export * from "./node-db-context-executor";
7
7
  export * from "./pooled-db-conn";
8
- export * from "./sd-orm";
8
+ export * from "./create-orm";
9
9
  //# sourceMappingURL=index.d.ts.map
@@ -0,0 +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"}
package/dist/index.js CHANGED
@@ -1,9 +1,9 @@
1
- export * from "./types/db-conn";
2
- export * from "./connections/mssql-db-conn";
3
- export * from "./connections/mysql-db-conn";
4
- export * from "./connections/postgresql-db-conn";
5
- export * from "./db-conn-factory";
6
- export * from "./node-db-context-executor";
7
- export * from "./pooled-db-conn";
8
- export * from "./sd-orm";
1
+ export * from "./types/db-conn.js";
2
+ export * from "./connections/mssql-db-conn.js";
3
+ export * from "./connections/mysql-db-conn.js";
4
+ export * from "./connections/postgresql-db-conn.js";
5
+ export * from "./create-db-conn.js";
6
+ export * from "./node-db-context-executor.js";
7
+ export * from "./pooled-db-conn.js";
8
+ export * from "./create-orm.js";
9
9
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1,7 +1,6 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../src/index.ts"],
4
- "sourcesContent": ["// Types\nexport * from \"./types/db-conn\";\n\n// Connections\nexport * from \"./connections/mssql-db-conn\";\nexport * from \"./connections/mysql-db-conn\";\nexport * from \"./connections/postgresql-db-conn\";\n\n// Core\nexport * from \"./db-conn-factory\";\nexport * from \"./node-db-context-executor\";\nexport * from \"./pooled-db-conn\";\nexport * from \"./sd-orm\";\n"],
5
4
  "mappings": "AACA,cAAc;AAGd,cAAc;AACd,cAAc;AACd,cAAc;AAGd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;",
6
5
  "names": []
7
6
  }
@@ -0,0 +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,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC;IAKlF;;;;;;;OAOG;IACG,UAAU,CAAC,SAAS,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,EAAE,OAAO,EAAE,UAAU,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAKlH;;;;;;;;;OASG;IACG,WAAW,CAAC,CAAC,GAAG,UAAU,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,WAAW,CAAC,EAAE,CAAC,UAAU,GAAG,SAAS,CAAC,EAAE,GAAG,OAAO,CAAC,CAAC,EAAE,EAAE,CAAC;IAqC7G,OAAO,CAAC,YAAY;CAMrB"}
@@ -1,7 +1,7 @@
1
1
  import { SdError } from "@simplysm/core-common";
2
2
  import { createQueryBuilder, parseQueryResult } from "@simplysm/orm-common";
3
- import { DB_CONN_ERRORS, getDialectFromConfig } from "./types/db-conn";
4
- import { DbConnFactory } from "./db-conn-factory";
3
+ import { DB_CONN_ERRORS, getDialectFromConfig } from "./types/db-conn.js";
4
+ import { createDbConn } from "./create-db-conn.js";
5
5
  class NodeDbContextExecutor {
6
6
  constructor(_config) {
7
7
  this._config = _config;
@@ -15,7 +15,7 @@ class NodeDbContextExecutor {
15
15
  * 커넥션 풀에서 연결을 획득하고 연결 상태를 활성화한다.
16
16
  */
17
17
  async connect() {
18
- this._conn = await DbConnFactory.create(this._config);
18
+ this._conn = await createDbConn(this._config);
19
19
  await this._conn.connect();
20
20
  }
21
21
  /**
@@ -1,7 +1,6 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../src/node-db-context-executor.ts"],
4
- "sourcesContent": ["import { SdError } from \"@simplysm/core-common\";\nimport type {\n DbContextExecutor,\n IsolationLevel,\n QueryDef,\n ResultMeta,\n Dialect,\n ColumnMeta,\n DataRecord,\n} from \"@simplysm/orm-common\";\nimport { createQueryBuilder, parseQueryResult } from \"@simplysm/orm-common\";\nimport type { DbConn, DbConnConfig } from \"./types/db-conn\";\nimport { DB_CONN_ERRORS, getDialectFromConfig } from \"./types/db-conn\";\nimport { DbConnFactory } from \"./db-conn-factory\";\n\n/**\n * Node.js \uD658\uACBD\uC6A9 DbContextExecutor\n *\n * DbContext\uC5D0\uC11C \uC0AC\uC6A9\uD558\uB294 \uC2E4\uD589\uAE30\uB85C, \uC2E4\uC81C DB \uC5F0\uACB0\uC744 \uB2F4\uB2F9\uD55C\uB2E4.\n */\nexport class NodeDbContextExecutor implements DbContextExecutor {\n private _conn?: DbConn;\n private readonly _dialect: Dialect;\n\n constructor(private readonly _config: DbConnConfig) {\n this._dialect = getDialectFromConfig(_config);\n }\n\n /**\n * DB \uC5F0\uACB0 \uC218\uB9BD\n *\n * \uCEE4\uB125\uC158 \uD480\uC5D0\uC11C \uC5F0\uACB0\uC744 \uD68D\uB4DD\uD558\uACE0 \uC5F0\uACB0 \uC0C1\uD0DC\uB97C \uD65C\uC131\uD654\uD55C\uB2E4.\n */\n async connect(): Promise<void> {\n this._conn = await DbConnFactory.create(this._config);\n await this._conn.connect();\n }\n\n /**\n * DB \uC5F0\uACB0 \uC885\uB8CC\n *\n * \uCEE4\uB125\uC158 \uD480\uC5D0 \uC5F0\uACB0\uC744 \uBC18\uD658\uD55C\uB2E4.\n *\n * @throws {Error} \uC5F0\uACB0\uB418\uC9C0 \uC54A\uC740 \uC0C1\uD0DC\uC77C \uB54C\n */\n async close(): Promise<void> {\n const conn = this._requireConn();\n await conn.close();\n this._conn = undefined;\n }\n\n /**\n * \uD2B8\uB79C\uC7AD\uC158 \uC2DC\uC791\n *\n * @param isolationLevel - \uD2B8\uB79C\uC7AD\uC158 \uACA9\uB9AC \uC218\uC900\n * @throws {Error} \uC5F0\uACB0\uB418\uC9C0 \uC54A\uC740 \uC0C1\uD0DC\uC77C \uB54C\n */\n async beginTransaction(isolationLevel?: IsolationLevel): Promise<void> {\n const conn = this._requireConn();\n await conn.beginTransaction(isolationLevel);\n }\n\n /**\n * \uD2B8\uB79C\uC7AD\uC158 \uCEE4\uBC0B\n *\n * @throws {Error} \uC5F0\uACB0\uB418\uC9C0 \uC54A\uC740 \uC0C1\uD0DC\uC77C \uB54C\n */\n async commitTransaction(): Promise<void> {\n const conn = this._requireConn();\n await conn.commitTransaction();\n }\n\n /**\n * \uD2B8\uB79C\uC7AD\uC158 \uB864\uBC31\n *\n * @throws {Error} \uC5F0\uACB0\uB418\uC9C0 \uC54A\uC740 \uC0C1\uD0DC\uC77C \uB54C\n */\n async rollbackTransaction(): Promise<void> {\n const conn = this._requireConn();\n await conn.rollbackTransaction();\n }\n\n /**\n * \uD30C\uB77C\uBBF8\uD130\uD654\uB41C \uCFFC\uB9AC \uC2E4\uD589\n *\n * @param query - SQL \uCFFC\uB9AC \uBB38\uC790\uC5F4\n * @param params - \uCFFC\uB9AC \uD30C\uB77C\uBBF8\uD130 \uBC30\uC5F4\n * @returns \uCFFC\uB9AC \uACB0\uACFC \uBC30\uC5F4\n * @throws {Error} \uC5F0\uACB0\uB418\uC9C0 \uC54A\uC740 \uC0C1\uD0DC\uC77C \uB54C\n */\n async executeParametrized(query: string, params?: unknown[]): Promise<unknown[][]> {\n const conn = this._requireConn();\n return conn.executeParametrized(query, params);\n }\n\n /**\n * \uB300\uB7C9 \uB370\uC774\uD130 \uC0BD\uC785 (\uB124\uC774\uD2F0\uBE0C \uBC8C\uD06C API \uC0AC\uC6A9)\n *\n * @param tableName - \uB300\uC0C1 \uD14C\uC774\uBE14\uBA85\n * @param columnMetas - \uCEEC\uB7FC \uBA54\uD0C0\uB370\uC774\uD130\n * @param records - \uC0BD\uC785\uD560 \uB808\uCF54\uB4DC \uBC30\uC5F4\n * @throws {Error} \uC5F0\uACB0\uB418\uC9C0 \uC54A\uC740 \uC0C1\uD0DC\uC77C \uB54C\n */\n async bulkInsert(tableName: string, columnMetas: Record<string, ColumnMeta>, records: DataRecord[]): Promise<void> {\n const conn = this._requireConn();\n await conn.bulkInsert(tableName, columnMetas, records);\n }\n\n /**\n * QueryDef \uBC30\uC5F4 \uC2E4\uD589\n *\n * QueryDef\uB97C SQL\uB85C \uBCC0\uD658\uD558\uC5EC \uC2E4\uD589\uD558\uACE0, ResultMeta\uB97C \uC0AC\uC6A9\uD558\uC5EC \uACB0\uACFC\uB97C \uD30C\uC2F1\uD55C\uB2E4.\n *\n * @param defs - \uC2E4\uD589\uD560 QueryDef \uBC30\uC5F4\n * @param resultMetas - \uACB0\uACFC \uD30C\uC2F1\uC6A9 \uBA54\uD0C0\uB370\uC774\uD130 \uBC30\uC5F4 (\uD0C0\uC785 \uBCC0\uD658\uC5D0 \uC0AC\uC6A9)\n * @returns \uAC01 QueryDef\uC758 \uC2E4\uD589 \uACB0\uACFC \uBC30\uC5F4\n * @throws {Error} \uC5F0\uACB0\uB418\uC9C0 \uC54A\uC740 \uC0C1\uD0DC\uC77C \uB54C\n */\n async executeDefs<T = DataRecord>(defs: QueryDef[], resultMetas?: (ResultMeta | undefined)[]): Promise<T[][]> {\n const conn = this._requireConn();\n\n const builder = createQueryBuilder(this._dialect);\n\n // \uAC00\uC838\uC62C \uB370\uC774\uD130\uAC00 \uC5C6\uB294 \uAC83\uC73C\uB85C \uC635\uC158 \uC124\uC815\uC744 \uD588\uC744 \uB54C, \uD558\uB098\uC758 \uCFFC\uB9AC\uB85C \uD55C\uBC88\uC758 \uC694\uCCAD \uBCF4\uB0C4\n // \uACB0\uACFC\uAC00 \uD544\uC694 \uC5C6\uC73C\uBBC0\uB85C defs.length\uAC1C\uC758 \uBE48 \uBC30\uC5F4\uC744 \uBC18\uD658\uD558\uC5EC \uC778\uD130\uD398\uC774\uC2A4 \uACC4\uC57D \uC720\uC9C0\n if (resultMetas != null && resultMetas.every((item) => item == null)) {\n const combinedSql = defs.map((def) => builder.build(def).sql).join(\"\\n\");\n await conn.execute([combinedSql]);\n return defs.map(() => []) as T[][];\n }\n\n // \uAC01 def\uB97C \uAC1C\uBCC4 \uC2E4\uD589\n const results: T[][] = [];\n for (let i = 0; i < defs.length; i++) {\n const def = defs[i];\n const meta = resultMetas?.[i];\n const buildResult = builder.build(def);\n\n const rawResults = await conn.execute([buildResult.sql]);\n\n // resultSetIndex\uAC00 \uC9C0\uC815\uB41C \uACBD\uC6B0 \uD574\uB2F9 \uC778\uB371\uC2A4\uC758 \uACB0\uACFC\uC14B \uC0AC\uC6A9\n const targetResultSet =\n buildResult.resultSetIndex != null ? rawResults[buildResult.resultSetIndex] : rawResults[0];\n\n if (meta != null) {\n const parsed = await parseQueryResult<T>(targetResultSet as Record<string, unknown>[], meta);\n results.push(parsed ?? []);\n } else {\n results.push(targetResultSet as T[]);\n }\n }\n\n return results;\n }\n\n private _requireConn(): DbConn {\n if (this._conn == null) {\n throw new SdError(DB_CONN_ERRORS.NOT_CONNECTED);\n }\n return this._conn;\n }\n}\n"],
5
- "mappings": "AAAA,SAAS,eAAe;AAUxB,SAAS,oBAAoB,wBAAwB;AAErD,SAAS,gBAAgB,4BAA4B;AACrD,SAAS,qBAAqB;AAOvB,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,cAAc,OAAO,KAAK,OAAO;AACpD,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,oBAAoB,OAAe,QAA0C;AACjF,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,WAAW,WAAmB,aAAyC,SAAsC;AACjH,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,YAA4B,MAAkB,aAA0D;AAC5G,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,iBAA8C,IAAI;AAC3F,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;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,oBAAoB,OAAe,QAA0C;AACjF,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,WAAW,WAAmB,aAAyC,SAAsC;AACjH,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,YAA4B,MAAkB,aAA0D;AAC5G,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,iBAA8C,IAAI;AAC3F,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;",
6
5
  "names": []
7
6
  }
@@ -0,0 +1 @@
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;IAJjC,OAAO,CAAC,QAAQ,CAAC,CAAS;gBAGP,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,EACnB,cAAc,EAAE,YAAY;IAM/C,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;IAa9B;;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,OAAO,EAAE,EAAE,CAAC;IAKtD;;;;;;;OAOG;IACG,mBAAmB,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC;IAKlF;;;;;;;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,7 +1,7 @@
1
- import { createConsola } from "consola";
1
+ import consola from "consola";
2
2
  import { SdError, EventEmitter } from "@simplysm/core-common";
3
- import { DB_CONN_ERRORS } from "./types/db-conn";
4
- const logger = createConsola().withTag("pooled-db-conn");
3
+ import { DB_CONN_ERRORS } from "./types/db-conn.js";
4
+ const logger = consola.withTag("pooled-db-conn");
5
5
  class PooledDbConn extends EventEmitter {
6
6
  constructor(_pool, _initialConfig) {
7
7
  super();
@@ -1,7 +1,6 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../src/pooled-db-conn.ts"],
4
- "sourcesContent": ["import { createConsola } from \"consola\";\nimport { SdError, EventEmitter } from \"@simplysm/core-common\";\nimport type { Pool } from \"generic-pool\";\nimport type { ColumnMeta, IsolationLevel } from \"@simplysm/orm-common\";\nimport { DB_CONN_ERRORS, type DbConn, type DbConnConfig } from \"./types/db-conn\";\n\nconst logger = createConsola().withTag(\"pooled-db-conn\");\n\n/**\n * \uCEE4\uB125\uC158 \uD480\uC5D0\uC11C \uAD00\uB9AC\uB418\uB294 DB \uC5F0\uACB0 \uB798\uD37C\n *\n * generic-pool \uB77C\uC774\uBE0C\uB7EC\uB9AC\uB97C \uC0AC\uC6A9\uD558\uC5EC \uCEE4\uB125\uC158 \uD480\uB9C1\uC744 \uC9C0\uC6D0\uD55C\uB2E4.\n * \uC2E4\uC81C \uBB3C\uB9AC \uC5F0\uACB0\uC740 \uD480\uC5D0\uC11C \uD68D\uB4DD\uD558\uACE0 \uBC18\uD658\uD55C\uB2E4.\n */\nexport class PooledDbConn extends EventEmitter<{ close: void }> implements DbConn {\n // \uD480\uC5D0\uC11C \uBE4C\uB824\uC628 \uC2E4\uC81C \uBB3C\uB9AC \uCEE4\uB125\uC158\n private _rawConn?: DbConn;\n\n constructor(\n private readonly _pool: Pool<DbConn>,\n private readonly _initialConfig: DbConnConfig,\n ) {\n super();\n }\n\n // [Property] config\n get config(): DbConnConfig {\n return this._rawConn?.config ?? this._initialConfig;\n }\n\n // [Property] isConnected\n get isConnected(): boolean {\n return this._rawConn?.isConnected ?? false;\n }\n\n // [Property] isOnTransaction\n get isOnTransaction(): boolean {\n return this._rawConn?.isOnTransaction ?? false;\n }\n\n /**\n * \uD480\uC5D0\uC11C DB \uC5F0\uACB0\uC744 \uD68D\uB4DD\uD55C\uB2E4.\n *\n * @throws {SdError} \uC774\uBBF8 \uC5F0\uACB0\uB41C \uC0C1\uD0DC\uC77C \uB54C\n */\n async connect(): Promise<void> {\n if (this._rawConn != null) {\n throw new SdError(DB_CONN_ERRORS.ALREADY_CONNECTED);\n }\n\n // 1. \uD480\uC5D0\uC11C \uCEE4\uB125\uC158 \uD68D\uB4DD\n this._rawConn = await this._pool.acquire();\n\n // 2. \uBB3C\uB9AC \uC5F0\uACB0\uC774 (\uD0C0\uC784\uC544\uC6C3 \uB4F1\uC73C\uB85C) \uB04A\uC5B4\uC9C8 \uACBD\uC6B0\uB97C \uB300\uBE44\uD574 \uB9AC\uC2A4\uB108 \uB4F1\uB85D\n // \uB9CC\uC57D \uC0AC\uC6A9 \uC911\uC5D0 \uB04A\uAE30\uBA74 PooledDbConn\uB3C4 close \uC774\uBCA4\uD2B8\uB97C \uBC1C\uC0DD\uC2DC\uCF1C\uC57C \uD568\n this._rawConn.on(\"close\", this._onRawConnClose);\n }\n\n /**\n * \uD480\uC5D0 DB \uC5F0\uACB0\uC744 \uBC18\uD658\uD55C\uB2E4. (\uC2E4\uC81C \uC5F0\uACB0\uC744 \uC885\uB8CC\uD558\uC9C0 \uC54A\uC74C)\n */\n async close(): Promise<void> {\n if (this._rawConn != null) {\n // 1. \uD2B8\uB79C\uC7AD\uC158 \uC9C4\uD589 \uC911\uC774\uBA74 \uB864\uBC31\uD558\uC5EC \uAE68\uB057\uD55C \uC0C1\uD0DC\uB85C \uD480\uC5D0 \uBC18\uD658\n if (this._rawConn.isOnTransaction) {\n try {\n await this._rawConn.rollbackTransaction();\n } catch (err) {\n // \uB864\uBC31 \uC2E4\uD328 \uC2DC \uB85C\uADF8\uB9CC \uB0A8\uAE30\uACE0 \uACC4\uC18D \uC9C4\uD589 (\uC5F0\uACB0\uC774 \uC774\uBBF8 \uB04A\uAE34 \uACBD\uC6B0 \uB4F1)\n logger.warn(\"\uD480 \uBC18\uD658 \uC2DC \uB864\uBC31 \uC2E4\uD328\", err instanceof Error ? err.message : String(err));\n }\n }\n\n // 2. \uB9AC\uC2A4\uB108 \uD574\uC81C (Pool\uC5D0 \uB3CC\uC544\uAC00\uC11C \uB2E4\uB978 \uB798\uD37C\uC5D0 \uC758\uD574 \uC7AC\uC0AC\uC6A9\uB420 \uB54C \uC601\uD5A5 \uC8FC\uC9C0 \uC54A\uB3C4\uB85D)\n this._rawConn.off(\"close\", this._onRawConnClose);\n\n // 3. \uD480\uC5D0 \uCEE4\uB125\uC158 \uBC18\uD658 (\uC2E4\uC81C\uB85C \uB04A\uC9C0 \uC54A\uC74C)\n await this._pool.release(this._rawConn);\n this._rawConn = undefined;\n\n // 4. \uC18C\uBE44\uC790\uC5D0\uAC8C \uB17C\uB9AC\uC801\uC73C\uB85C \uC5F0\uACB0\uC774 \uB2EB\uD614\uC74C\uC744 \uC54C\uB9BC\n this.emit(\"close\");\n }\n }\n\n // \uBB3C\uB9AC \uC5F0\uACB0\uC774 \uB04A\uACBC\uC744 \uB54C \uCC98\uB9AC \uD578\uB4E4\uB7EC\n private readonly _onRawConnClose = () => {\n // \uBB3C\uB9AC \uC5F0\uACB0\uC774 \uB04A\uACBC\uC73C\uBBC0\uB85C \uCC38\uC870 \uC81C\uAC70 (Pool\uC5D0\uC11C\uB294 validate \uC2DC\uC810\uC5D0 \uAC78\uB7EC\uB0BC \uAC83\uC784)\n this._rawConn = undefined;\n // \uC18C\uBE44\uC790\uC5D0\uAC8C \uC54C\uB9BC\n this.emit(\"close\");\n };\n\n // --- \uC544\uB798\uB294 \uC704\uC784(Delegation) \uBA54\uC18C\uB4DC ---\n\n /**\n * \uD2B8\uB79C\uC7AD\uC158 \uC2DC\uC791\n *\n * @param isolationLevel - \uD2B8\uB79C\uC7AD\uC158 \uACA9\uB9AC \uC218\uC900\n * @throws {SdError} \uC5F0\uACB0\uC774 \uD68D\uB4DD\uB418\uC9C0 \uC54A\uC740 \uC0C1\uD0DC\uC77C \uB54C\n */\n async beginTransaction(isolationLevel?: IsolationLevel): Promise<void> {\n const conn = this._requireRawConn();\n await conn.beginTransaction(isolationLevel);\n }\n\n /**\n * \uD2B8\uB79C\uC7AD\uC158 \uCEE4\uBC0B\n *\n * @throws {SdError} \uC5F0\uACB0\uC774 \uD68D\uB4DD\uB418\uC9C0 \uC54A\uC740 \uC0C1\uD0DC\uC77C \uB54C\n */\n async commitTransaction(): Promise<void> {\n const conn = this._requireRawConn();\n await conn.commitTransaction();\n }\n\n /**\n * \uD2B8\uB79C\uC7AD\uC158 \uB864\uBC31\n *\n * @throws {SdError} \uC5F0\uACB0\uC774 \uD68D\uB4DD\uB418\uC9C0 \uC54A\uC740 \uC0C1\uD0DC\uC77C \uB54C\n */\n async rollbackTransaction(): Promise<void> {\n const conn = this._requireRawConn();\n await conn.rollbackTransaction();\n }\n\n /**\n * SQL \uCFFC\uB9AC \uC2E4\uD589\n *\n * @param queries - \uC2E4\uD589\uD560 SQL \uCFFC\uB9AC \uBC30\uC5F4\n * @returns \uAC01 \uCFFC\uB9AC\uC758 \uACB0\uACFC \uBC30\uC5F4\n * @throws {SdError} \uC5F0\uACB0\uC774 \uD68D\uB4DD\uB418\uC9C0 \uC54A\uC740 \uC0C1\uD0DC\uC77C \uB54C\n */\n async execute(queries: string[]): Promise<unknown[][]> {\n const conn = this._requireRawConn();\n return conn.execute(queries);\n }\n\n /**\n * \uD30C\uB77C\uBBF8\uD130\uD654\uB41C SQL \uCFFC\uB9AC \uC2E4\uD589\n *\n * @param query - SQL \uCFFC\uB9AC \uBB38\uC790\uC5F4\n * @param params - \uCFFC\uB9AC \uD30C\uB77C\uBBF8\uD130 \uBC30\uC5F4\n * @returns \uCFFC\uB9AC \uACB0\uACFC \uBC30\uC5F4\n * @throws {SdError} \uC5F0\uACB0\uC774 \uD68D\uB4DD\uB418\uC9C0 \uC54A\uC740 \uC0C1\uD0DC\uC77C \uB54C\n */\n async executeParametrized(query: string, params?: unknown[]): Promise<unknown[][]> {\n const conn = this._requireRawConn();\n return conn.executeParametrized(query, params);\n }\n\n /**\n * \uB300\uB7C9 \uB370\uC774\uD130 \uC0BD\uC785 (\uB124\uC774\uD2F0\uBE0C \uBC8C\uD06C API \uC0AC\uC6A9)\n *\n * @param tableName - \uB300\uC0C1 \uD14C\uC774\uBE14\uBA85\n * @param columnMetas - \uCEEC\uB7FC \uBA54\uD0C0\uB370\uC774\uD130\n * @param records - \uC0BD\uC785\uD560 \uB808\uCF54\uB4DC \uBC30\uC5F4\n * @throws {SdError} \uC5F0\uACB0\uC774 \uD68D\uB4DD\uB418\uC9C0 \uC54A\uC740 \uC0C1\uD0DC\uC77C \uB54C\n */\n async bulkInsert(\n tableName: string,\n columnMetas: Record<string, ColumnMeta>,\n records: Record<string, unknown>[],\n ): Promise<void> {\n const conn = this._requireRawConn();\n await conn.bulkInsert(tableName, columnMetas, records);\n }\n\n private _requireRawConn(): DbConn {\n if (this._rawConn == null) {\n throw new SdError(`${DB_CONN_ERRORS.NOT_CONNECTED} (Pool Connection is not acquired)`);\n }\n return this._rawConn;\n }\n}\n"],
5
- "mappings": "AAAA,SAAS,qBAAqB;AAC9B,SAAS,SAAS,oBAAoB;AAGtC,SAAS,sBAAsD;AAE/D,MAAM,SAAS,cAAc,EAAE,QAAQ,gBAAgB;AAQhD,MAAM,qBAAqB,aAAgD;AAAA,EAIhF,YACmB,OACA,gBACjB;AACA,UAAM;AAHW;AACA;AAAA,EAGnB;AAAA;AAAA,EAPQ;AAAA;AAAA,EAUR,IAAI,SAAuB;AACzB,WAAO,KAAK,UAAU,UAAU,KAAK;AAAA,EACvC;AAAA;AAAA,EAGA,IAAI,cAAuB;AACzB,WAAO,KAAK,UAAU,eAAe;AAAA,EACvC;AAAA;AAAA,EAGA,IAAI,kBAA2B;AAC7B,WAAO,KAAK,UAAU,mBAAmB;AAAA,EAC3C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,MAAM,UAAyB;AAC7B,QAAI,KAAK,YAAY,MAAM;AACzB,YAAM,IAAI,QAAQ,eAAe,iBAAiB;AAAA,IACpD;AAGA,SAAK,WAAW,MAAM,KAAK,MAAM,QAAQ;AAIzC,SAAK,SAAS,GAAG,SAAS,KAAK,eAAe;AAAA,EAChD;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,QAAuB;AAC3B,QAAI,KAAK,YAAY,MAAM;AAEzB,UAAI,KAAK,SAAS,iBAAiB;AACjC,YAAI;AACF,gBAAM,KAAK,SAAS,oBAAoB;AAAA,QAC1C,SAAS,KAAK;AAEZ,iBAAO,KAAK,wDAAgB,eAAe,QAAQ,IAAI,UAAU,OAAO,GAAG,CAAC;AAAA,QAC9E;AAAA,MACF;AAGA,WAAK,SAAS,IAAI,SAAS,KAAK,eAAe;AAG/C,YAAM,KAAK,MAAM,QAAQ,KAAK,QAAQ;AACtC,WAAK,WAAW;AAGhB,WAAK,KAAK,OAAO;AAAA,IACnB;AAAA,EACF;AAAA;AAAA,EAGiB,kBAAkB,MAAM;AAEvC,SAAK,WAAW;AAEhB,SAAK,KAAK,OAAO;AAAA,EACnB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUA,MAAM,iBAAiB,gBAAgD;AACrE,UAAM,OAAO,KAAK,gBAAgB;AAClC,UAAM,KAAK,iBAAiB,cAAc;AAAA,EAC5C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,MAAM,oBAAmC;AACvC,UAAM,OAAO,KAAK,gBAAgB;AAClC,UAAM,KAAK,kBAAkB;AAAA,EAC/B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,MAAM,sBAAqC;AACzC,UAAM,OAAO,KAAK,gBAAgB;AAClC,UAAM,KAAK,oBAAoB;AAAA,EACjC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,MAAM,QAAQ,SAAyC;AACrD,UAAM,OAAO,KAAK,gBAAgB;AAClC,WAAO,KAAK,QAAQ,OAAO;AAAA,EAC7B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUA,MAAM,oBAAoB,OAAe,QAA0C;AACjF,UAAM,OAAO,KAAK,gBAAgB;AAClC,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,gBAAgB;AAClC,UAAM,KAAK,WAAW,WAAW,aAAa,OAAO;AAAA,EACvD;AAAA,EAEQ,kBAA0B;AAChC,QAAI,KAAK,YAAY,MAAM;AACzB,YAAM,IAAI,QAAQ,GAAG,eAAe,aAAa,oCAAoC;AAAA,IACvF;AACA,WAAO,KAAK;AAAA,EACd;AACF;",
4
+ "mappings": "AAAA,OAAO,aAAa;AACpB,SAAS,SAAS,oBAAoB;AAGtC,SAAS,sBAAsD;AAE/D,MAAM,SAAS,QAAQ,QAAQ,gBAAgB;AAQxC,MAAM,qBAAqB,aAAgD;AAAA,EAIhF,YACmB,OACA,gBACjB;AACA,UAAM;AAHW;AACA;AAAA,EAGnB;AAAA;AAAA,EAPQ;AAAA;AAAA,EAUR,IAAI,SAAuB;AACzB,WAAO,KAAK,UAAU,UAAU,KAAK;AAAA,EACvC;AAAA;AAAA,EAGA,IAAI,cAAuB;AACzB,WAAO,KAAK,UAAU,eAAe;AAAA,EACvC;AAAA;AAAA,EAGA,IAAI,kBAA2B;AAC7B,WAAO,KAAK,UAAU,mBAAmB;AAAA,EAC3C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,MAAM,UAAyB;AAC7B,QAAI,KAAK,YAAY,MAAM;AACzB,YAAM,IAAI,QAAQ,eAAe,iBAAiB;AAAA,IACpD;AAGA,SAAK,WAAW,MAAM,KAAK,MAAM,QAAQ;AAIzC,SAAK,SAAS,GAAG,SAAS,KAAK,eAAe;AAAA,EAChD;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,QAAuB;AAC3B,QAAI,KAAK,YAAY,MAAM;AAEzB,UAAI,KAAK,SAAS,iBAAiB;AACjC,YAAI;AACF,gBAAM,KAAK,SAAS,oBAAoB;AAAA,QAC1C,SAAS,KAAK;AAEZ,iBAAO,KAAK,wDAAgB,eAAe,QAAQ,IAAI,UAAU,OAAO,GAAG,CAAC;AAAA,QAC9E;AAAA,MACF;AAGA,WAAK,SAAS,IAAI,SAAS,KAAK,eAAe;AAG/C,YAAM,KAAK,MAAM,QAAQ,KAAK,QAAQ;AACtC,WAAK,WAAW;AAGhB,WAAK,KAAK,OAAO;AAAA,IACnB;AAAA,EACF;AAAA;AAAA,EAGiB,kBAAkB,MAAM;AAEvC,SAAK,WAAW;AAEhB,SAAK,KAAK,OAAO;AAAA,EACnB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUA,MAAM,iBAAiB,gBAAgD;AACrE,UAAM,OAAO,KAAK,gBAAgB;AAClC,UAAM,KAAK,iBAAiB,cAAc;AAAA,EAC5C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,MAAM,oBAAmC;AACvC,UAAM,OAAO,KAAK,gBAAgB;AAClC,UAAM,KAAK,kBAAkB;AAAA,EAC/B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,MAAM,sBAAqC;AACzC,UAAM,OAAO,KAAK,gBAAgB;AAClC,UAAM,KAAK,oBAAoB;AAAA,EACjC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,MAAM,QAAQ,SAAyC;AACrD,UAAM,OAAO,KAAK,gBAAgB;AAClC,WAAO,KAAK,QAAQ,OAAO;AAAA,EAC7B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUA,MAAM,oBAAoB,OAAe,QAA0C;AACjF,UAAM,OAAO,KAAK,gBAAgB;AAClC,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,gBAAgB;AAClC,UAAM,KAAK,WAAW,WAAW,aAAa,OAAO;AAAA,EACvD;AAAA,EAEQ,kBAA0B;AAChC,QAAI,KAAK,YAAY,MAAM;AACzB,YAAM,IAAI,QAAQ,GAAG,eAAe,aAAa,oCAAoC;AAAA,IACvF;AACA,WAAO,KAAK;AAAA,EACd;AACF;",
6
5
  "names": []
7
6
  }
@@ -0,0 +1 @@
1
+ {"version":3,"file":"db-conn.d.ts","sourceRoot":"","sources":["../../src/types/db-conn.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAC1D,OAAO,KAAK,EAAE,UAAU,EAAE,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAMhF;;GAEG;AACH,eAAO,MAAM,uBAAuB,QAAiB,CAAC;AAEtD;;GAEG;AACH,eAAO,MAAM,cAAc;;;CAGjB,CAAC;AAMX;;;;;;;;;;GAUG;AACH,MAAM,WAAW,MAAO,SAAQ,YAAY,CAAC;IAAE,KAAK,EAAE,IAAI,CAAA;CAAE,CAAC;IAC3D;;OAEG;IACH,MAAM,EAAE,YAAY,CAAC;IAErB;;OAEG;IACH,WAAW,EAAE,OAAO,CAAC;IAErB;;OAEG;IACH,eAAe,EAAE,OAAO,CAAC;IAEzB;;OAEG;IACH,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IAEzB;;OAEG;IACH,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IAEvB;;;;OAIG;IACH,gBAAgB,CAAC,cAAc,CAAC,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAEjE;;OAEG;IACH,iBAAiB,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IAEnC;;OAEG;IACH,mBAAmB,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IAErC;;;;;OAKG;IACH,OAAO,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;IAEjD;;;;;;OAMG;IACH,mBAAmB,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;IAE7E;;;;;;;;;;OAUG;IACH,UAAU,CACR,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,CAAC;CAClB;AAMD;;;;;;;;;GASG;AACH,MAAM,WAAW,YAAY;IAC3B,sBAAsB;IACtB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,uBAAuB;IACvB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,kCAAkC;IAClC,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,kCAAkC;IAClC,iBAAiB,CAAC,EAAE,MAAM,CAAC;CAC5B;AAED;;GAEG;AACH,MAAM,MAAM,YAAY,GAAG,iBAAiB,GAAG,iBAAiB,GAAG,sBAAsB,CAAC;AAE1F;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,OAAO,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,qBAAqB,CAAC,EAAE,cAAc,CAAC;IACvC,IAAI,CAAC,EAAE,YAAY,CAAC;CACrB;AAED;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,OAAO,GAAG,aAAa,CAAC;IACjC,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,qBAAqB,CAAC,EAAE,cAAc,CAAC;IACvC,IAAI,CAAC,EAAE,YAAY,CAAC;CACrB;AAED;;GAEG;AACH,MAAM,WAAW,sBAAsB;IACrC,OAAO,EAAE,YAAY,CAAC;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,qBAAqB,CAAC,EAAE,cAAc,CAAC;IACvC,IAAI,CAAC,EAAE,YAAY,CAAC;CACrB;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,YAAY,GAAG,OAAO,CAKlE"}
@@ -1,7 +1,6 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../src/types/db-conn.ts"],
4
- "sourcesContent": ["import type { EventEmitter } from \"@simplysm/core-common\";\nimport type { ColumnMeta, Dialect, IsolationLevel } from \"@simplysm/orm-common\";\n\n// ============================================\n// \uACF5\uD1B5 \uC0C1\uC218\n// ============================================\n\n/**\n * DB \uC5F0\uACB0 \uAE30\uBCF8 \uD0C0\uC784\uC544\uC6C3 (10\uBD84)\n */\nexport const DB_CONN_DEFAULT_TIMEOUT = 10 * 60 * 1000;\n\n/**\n * DB \uC5F0\uACB0 \uC5D0\uB7EC \uBA54\uC2DC\uC9C0\n */\nexport const DB_CONN_ERRORS = {\n NOT_CONNECTED: \"'Connection'\uC774 \uC5F0\uACB0\uB418\uC5B4\uC788\uC9C0 \uC54A\uC2B5\uB2C8\uB2E4.\",\n ALREADY_CONNECTED: \"\uC774\uBBF8 'Connection'\uC774 \uC5F0\uACB0\uB418\uC5B4\uC788\uC2B5\uB2C8\uB2E4.\",\n} as const;\n\n// ============================================\n// IDbConn Interface\n// ============================================\n\n/**\n * \uC800\uC218\uC900 DB \uC5F0\uACB0 \uC778\uD130\uD398\uC774\uC2A4\n *\n * \uAC01 DBMS\uBCC4 \uAD6C\uD604\uCCB4\uAC00 \uC774 \uC778\uD130\uD398\uC774\uC2A4\uB97C \uAD6C\uD604\uD569\uB2C8\uB2E4.\n * - {@link MysqlDbConn} - MySQL \uC5F0\uACB0\n * - {@link MssqlDbConn} - MSSQL \uC5F0\uACB0\n * - {@link PostgresqlDbConn} - PostgreSQL \uC5F0\uACB0\n *\n * @remarks\n * SdEventEmitter\uB97C \uC0C1\uC18D\uD558\uC5EC 'close' \uC774\uBCA4\uD2B8\uB97C \uBC1C\uC0DD\uC2DC\uD0B5\uB2C8\uB2E4.\n */\nexport interface DbConn extends EventEmitter<{ close: void }> {\n /**\n * \uC5F0\uACB0 \uC124\uC815\n */\n config: DbConnConfig;\n\n /**\n * \uC5F0\uACB0 \uC5EC\uBD80\n */\n isConnected: boolean;\n\n /**\n * \uD2B8\uB79C\uC7AD\uC158 \uC9C4\uD589 \uC5EC\uBD80\n */\n isOnTransaction: boolean;\n\n /**\n * DB \uC5F0\uACB0 \uC218\uB9BD\n */\n connect(): Promise<void>;\n\n /**\n * DB \uC5F0\uACB0 \uC885\uB8CC\n */\n close(): Promise<void>;\n\n /**\n * \uD2B8\uB79C\uC7AD\uC158 \uC2DC\uC791\n *\n * @param isolationLevel - \uACA9\uB9AC \uC218\uC900 (\uC120\uD0DD)\n */\n beginTransaction(isolationLevel?: IsolationLevel): Promise<void>;\n\n /**\n * \uD2B8\uB79C\uC7AD\uC158 \uCEE4\uBC0B\n */\n commitTransaction(): Promise<void>;\n\n /**\n * \uD2B8\uB79C\uC7AD\uC158 \uB864\uBC31\n */\n rollbackTransaction(): Promise<void>;\n\n /**\n * SQL \uCFFC\uB9AC \uBC30\uC5F4 \uC2E4\uD589\n *\n * @param queries - \uC2E4\uD589\uD560 SQL \uBB38\uC790\uC5F4 \uBC30\uC5F4\n * @returns \uAC01 \uCFFC\uB9AC\uBCC4 \uACB0\uACFC \uBC30\uC5F4\uC758 \uBC30\uC5F4\n */\n execute(queries: string[]): Promise<unknown[][]>;\n\n /**\n * \uD30C\uB77C\uBBF8\uD130\uD654\uB41C \uCFFC\uB9AC \uC2E4\uD589\n *\n * @param query - SQL \uCFFC\uB9AC \uBB38\uC790\uC5F4\n * @param params - \uBC14\uC778\uB529 \uD30C\uB77C\uBBF8\uD130 (\uC120\uD0DD)\n * @returns \uACB0\uACFC \uBC30\uC5F4\uC758 \uBC30\uC5F4\n */\n executeParametrized(query: string, params?: unknown[]): Promise<unknown[][]>;\n\n /**\n * \uB300\uB7C9 INSERT (\uB124\uC774\uD2F0\uBE0C \uBC8C\uD06C API \uC0AC\uC6A9)\n *\n * - MSSQL: tedious BulkLoad\n * - MySQL: LOAD DATA LOCAL INFILE (\uC784\uC2DC \uD30C\uC77C)\n * - PostgreSQL: COPY FROM STDIN\n *\n * @param tableName - \uD14C\uC774\uBE14\uBA85 (database.table \uB610\uB294 database.schema.table)\n * @param columnMetas - \uCEEC\uB7FC\uBA85 \u2192 ColumnMeta \uB9E4\uD551\n * @param records - \uC0BD\uC785\uD560 \uB808\uCF54\uB4DC \uBC30\uC5F4\n */\n bulkInsert(\n tableName: string,\n columnMetas: Record<string, ColumnMeta>,\n records: Record<string, unknown>[],\n ): Promise<void>;\n}\n\n// ============================================\n// DbConnConfig Types\n// ============================================\n\n/**\n * \uCEE4\uB125\uC158 \uD480 \uC124\uC815\n *\n * @remarks\n * \uAC01 \uAC12\uC758 \uAE30\uBCF8\uAC12:\n * - min: 1 (\uCD5C\uC18C \uC5F0\uACB0 \uC218)\n * - max: 10 (\uCD5C\uB300 \uC5F0\uACB0 \uC218)\n * - acquireTimeoutMillis: 30000 (\uC5F0\uACB0 \uD68D\uB4DD \uD0C0\uC784\uC544\uC6C3)\n * - idleTimeoutMillis: 30000 (\uC720\uD734 \uC5F0\uACB0 \uD0C0\uC784\uC544\uC6C3)\n */\nexport interface DbPoolConfig {\n /** \uCD5C\uC18C \uC5F0\uACB0 \uC218 (\uAE30\uBCF8: 1) */\n min?: number;\n /** \uCD5C\uB300 \uC5F0\uACB0 \uC218 (\uAE30\uBCF8: 10) */\n max?: number;\n /** \uC5F0\uACB0 \uD68D\uB4DD \uD0C0\uC784\uC544\uC6C3 (\uBC00\uB9AC\uCD08, \uAE30\uBCF8: 30000) */\n acquireTimeoutMillis?: number;\n /** \uC720\uD734 \uC5F0\uACB0 \uD0C0\uC784\uC544\uC6C3 (\uBC00\uB9AC\uCD08, \uAE30\uBCF8: 30000) */\n idleTimeoutMillis?: number;\n}\n\n/**\n * DB \uC5F0\uACB0 \uC124\uC815 \uD0C0\uC785 (dialect\uBCC4 \uBD84\uAE30)\n */\nexport type DbConnConfig = MysqlDbConnConfig | MssqlDbConnConfig | PostgresqlDbConnConfig;\n\n/**\n * MySQL \uC5F0\uACB0 \uC124\uC815\n */\nexport interface MysqlDbConnConfig {\n dialect: \"mysql\";\n host: string;\n port?: number;\n username: string;\n password: string;\n database?: string;\n defaultIsolationLevel?: IsolationLevel;\n pool?: DbPoolConfig;\n}\n\n/**\n * MSSQL \uC5F0\uACB0 \uC124\uC815\n */\nexport interface MssqlDbConnConfig {\n dialect: \"mssql\" | \"mssql-azure\";\n host: string;\n port?: number;\n username: string;\n password: string;\n database?: string;\n schema?: string;\n defaultIsolationLevel?: IsolationLevel;\n pool?: DbPoolConfig;\n}\n\n/**\n * PostgreSQL \uC5F0\uACB0 \uC124\uC815\n */\nexport interface PostgresqlDbConnConfig {\n dialect: \"postgresql\";\n host: string;\n port?: number;\n username: string;\n password: string;\n database?: string;\n schema?: string;\n defaultIsolationLevel?: IsolationLevel;\n pool?: DbPoolConfig;\n}\n\n/**\n * DbConnConfig\uC5D0\uC11C Dialect \uCD94\uCD9C\n */\nexport function getDialectFromConfig(config: DbConnConfig): Dialect {\n if (config.dialect === \"mssql-azure\") {\n return \"mssql\";\n }\n return config.dialect;\n}\n"],
5
4
  "mappings": "AAUO,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;",
6
5
  "names": []
7
6
  }
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@simplysm/orm-node",
3
3
  "sideEffects": false,
4
- "version": "13.0.0-beta.6",
4
+ "version": "13.0.2",
5
5
  "description": "심플리즘 패키지 - ORM 모듈 (node)",
6
6
  "author": "김석래",
7
7
  "repository": {
@@ -13,19 +13,23 @@
13
13
  "type": "module",
14
14
  "main": "./dist/index.js",
15
15
  "types": "./dist/index.d.ts",
16
+ "files": [
17
+ "dist",
18
+ "src"
19
+ ],
16
20
  "dependencies": {
17
- "@simplysm/core-common": "workspace:*",
18
- "@simplysm/orm-common": "workspace:*",
19
21
  "consola": "^3.4.2",
20
- "generic-pool": "^3.9.0"
22
+ "generic-pool": "^3.9.0",
23
+ "@simplysm/core-common": "13.0.2",
24
+ "@simplysm/orm-common": "13.0.2"
21
25
  },
22
26
  "devDependencies": {
23
27
  "@types/pg": "^8.16.0",
24
28
  "@types/pg-copy-streams": "^1.2.5",
25
- "mysql2": "^3.16.1",
26
- "pg": "^8.17.2",
29
+ "mysql2": "^3.17.0",
30
+ "pg": "^8.18.0",
27
31
  "pg-copy-streams": "^7.0.0",
28
- "tedious": "^19.2.0"
32
+ "tedious": "^19.2.1"
29
33
  },
30
34
  "peerDependencies": {
31
35
  "mysql2": "^3.16.0",
@@ -47,4 +51,4 @@
47
51
  "optional": true
48
52
  }
49
53
  }
50
- }
54
+ }
@@ -1,4 +1,4 @@
1
- import { createConsola } from "consola";
1
+ import consola from "consola";
2
2
  import {
3
3
  DateOnly,
4
4
  DateTime,
@@ -15,7 +15,7 @@ import { DB_CONN_DEFAULT_TIMEOUT, DB_CONN_ERRORS, type DbConn, type MssqlDbConnC
15
15
  import type tediousType from "tedious";
16
16
  import type { DataType as TediousDataType } from "tedious/lib/data-type";
17
17
 
18
- const logger = createConsola().withTag("mssql-db-conn");
18
+ const logger = consola.withTag("mssql-db-conn");
19
19
 
20
20
  /**
21
21
  * MSSQL 데이터베이스 연결 클래스
@@ -3,7 +3,7 @@ import fs from "fs";
3
3
  import os from "os";
4
4
  import path from "path";
5
5
  import type { Connection } from "mysql2/promise";
6
- import { createConsola } from "consola";
6
+ import consola from "consola";
7
7
  import {
8
8
  bytesToHex,
9
9
  DateOnly,
@@ -17,7 +17,7 @@ import {
17
17
  import type { ColumnMeta, DataType, IsolationLevel } from "@simplysm/orm-common";
18
18
  import { DB_CONN_DEFAULT_TIMEOUT, DB_CONN_ERRORS, type DbConn, type MysqlDbConnConfig } from "../types/db-conn";
19
19
 
20
- const logger = createConsola().withTag("mysql-db-conn");
20
+ const logger = consola.withTag("mysql-db-conn");
21
21
 
22
22
  /**
23
23
  * MySQL 데이터베이스 연결 클래스
@@ -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,
@@ -15,7 +15,7 @@ import { DB_CONN_DEFAULT_TIMEOUT, DB_CONN_ERRORS, type DbConn, type PostgresqlDb
15
15
  import type { Client } from "pg";
16
16
  import type { CopyStreamQuery } from "pg-copy-streams";
17
17
 
18
- const logger = createConsola().withTag("postgresql-db-conn");
18
+ const logger = consola.withTag("postgresql-db-conn");
19
19
 
20
20
  /**
21
21
  * PostgreSQL 데이터베이스 연결 클래스
@@ -0,0 +1,111 @@
1
+ import type { Pool } from "generic-pool";
2
+ import { createPool } from "generic-pool";
3
+ import type { DbConn, DbConnConfig } from "./types/db-conn";
4
+ import { PooledDbConn } from "./pooled-db-conn";
5
+ import { MysqlDbConn } from "./connections/mysql-db-conn";
6
+ import { MssqlDbConn } from "./connections/mssql-db-conn";
7
+ import { PostgresqlDbConn } from "./connections/postgresql-db-conn";
8
+
9
+ /**
10
+ * DB 연결 팩토리
11
+ *
12
+ * 데이터베이스 연결 인스턴스를 생성하고 풀링을 관리한다.
13
+ * MSSQL, MySQL, PostgreSQL을 지원한다.
14
+ */
15
+
16
+ // 설정별 커넥션 풀 캐싱
17
+ const poolMap = new Map<string, Pool<DbConn>>();
18
+
19
+ // 지연 로딩 모듈 캐시
20
+ const modules: {
21
+ tedious?: typeof import("tedious");
22
+ mysql?: typeof import("mysql2/promise");
23
+ pg?: typeof import("pg");
24
+ pgCopyStreams?: typeof import("pg-copy-streams");
25
+ } = {};
26
+
27
+ /**
28
+ * DB 연결 생성
29
+ *
30
+ * 커넥션 풀에서 연결을 획득하여 반환한다.
31
+ * 풀이 없는 경우 새로 생성한다.
32
+ *
33
+ * @param config - 데이터베이스 연결 설정
34
+ * @returns 풀링된 DB 연결 객체
35
+ */
36
+ export function createDbConn(config: DbConnConfig): Promise<DbConn> {
37
+ // 1. 풀 가져오기 (없으면 생성)
38
+ const pool = getOrCreatePool(config);
39
+
40
+ // 2. 래퍼 객체 반환
41
+ return Promise.resolve(new PooledDbConn(pool, config));
42
+ }
43
+
44
+ function getOrCreatePool(config: DbConnConfig): Pool<DbConn> {
45
+ // 객체를 키로 쓰기 위해 문자열 변환 (중첩 객체도 정렬하여 동일 설정의 일관된 키 보장)
46
+ const configKey = JSON.stringify(config, (_, value: unknown) =>
47
+ value != null && typeof value === "object" && !Array.isArray(value)
48
+ ? Object.fromEntries(Object.entries(value).sort(([a], [b]) => a.localeCompare(b)))
49
+ : value,
50
+ );
51
+
52
+ if (!poolMap.has(configKey)) {
53
+ const pool = createPool<DbConn>(
54
+ {
55
+ create: async () => {
56
+ const conn = await createRawConnection(config);
57
+ await conn.connect();
58
+ return conn;
59
+ },
60
+ destroy: async (conn) => {
61
+ await conn.close(); // 풀에서 제거될 때 실제 연결 종료
62
+ },
63
+ validate: (conn) => {
64
+ // 획득 시 연결 상태 확인 (끊겨있으면 Pool이 폐기하고 새로 만듦)
65
+ return Promise.resolve(conn.isConnected);
66
+ },
67
+ },
68
+ {
69
+ min: config.pool?.min ?? 1,
70
+ max: config.pool?.max ?? 10,
71
+ acquireTimeoutMillis: config.pool?.acquireTimeoutMillis ?? 30000,
72
+ idleTimeoutMillis: config.pool?.idleTimeoutMillis ?? 30000,
73
+ testOnBorrow: true, // [중요] 빌려줄 때 validate 실행 여부
74
+ },
75
+ );
76
+
77
+ poolMap.set(configKey, pool);
78
+ }
79
+
80
+ return poolMap.get(configKey)!;
81
+ }
82
+
83
+ async function createRawConnection(config: DbConnConfig): Promise<DbConn> {
84
+ if (config.dialect === "mysql") {
85
+ const mysql = await ensureModule("mysql");
86
+ return new MysqlDbConn(mysql, config);
87
+ } else if (config.dialect === "postgresql") {
88
+ const pg = await ensureModule("pg");
89
+ const pgCopyStreams = await ensureModule("pgCopyStreams");
90
+ return new PostgresqlDbConn(pg, pgCopyStreams.from, config);
91
+ } else {
92
+ // mssql, mssql-azure
93
+ const tedious = await ensureModule("tedious");
94
+ return new MssqlDbConn(tedious, config);
95
+ }
96
+ }
97
+
98
+ async function ensureModule<K extends keyof typeof modules>(name: K): Promise<NonNullable<(typeof modules)[K]>> {
99
+ if (modules[name] == null) {
100
+ if (name === "mysql") {
101
+ modules.mysql = await import("mysql2/promise");
102
+ } else if (name === "pg") {
103
+ modules.pg = await import("pg");
104
+ } else if (name === "pgCopyStreams") {
105
+ modules.pgCopyStreams = await import("pg-copy-streams");
106
+ } else {
107
+ modules.tedious = await import("tedious");
108
+ }
109
+ }
110
+ return modules[name]!;
111
+ }
@@ -0,0 +1,118 @@
1
+ import { createDbContext, type DbContextDef, type DbContextInstance, type IsolationLevel } from "@simplysm/orm-common";
2
+ import type { DbConnConfig } from "./types/db-conn";
3
+ import { NodeDbContextExecutor } from "./node-db-context-executor";
4
+
5
+ /**
6
+ * Orm 옵션
7
+ *
8
+ * DbConnConfig보다 우선 적용되는 DbContext 옵션
9
+ */
10
+ export interface OrmOptions {
11
+ /**
12
+ * 데이터베이스 이름 (DbConnConfig의 database 대신 사용)
13
+ */
14
+ database?: string;
15
+
16
+ /**
17
+ * 스키마 이름 (MSSQL: dbo, PostgreSQL: public)
18
+ */
19
+ schema?: string;
20
+ }
21
+
22
+ /**
23
+ * Orm 인스턴스 타입
24
+ *
25
+ * createOrm에서 반환되는 객체의 타입
26
+ */
27
+ export interface Orm<TDef extends DbContextDef<any, any, any>> {
28
+ readonly dbContextDef: TDef;
29
+ readonly config: DbConnConfig;
30
+ readonly options?: OrmOptions;
31
+
32
+ /**
33
+ * 트랜잭션 내에서 콜백 실행
34
+ *
35
+ * @param callback - DB 연결 후 실행할 콜백
36
+ * @param isolationLevel - 트랜잭션 격리 수준
37
+ * @returns 콜백 결과
38
+ */
39
+ connect<R>(callback: (conn: DbContextInstance<TDef>) => Promise<R>, isolationLevel?: IsolationLevel): Promise<R>;
40
+
41
+ /**
42
+ * 트랜잭션 없이 콜백 실행
43
+ *
44
+ * @param callback - DB 연결 후 실행할 콜백
45
+ * @returns 콜백 결과
46
+ */
47
+ connectWithoutTransaction<R>(callback: (conn: DbContextInstance<TDef>) => Promise<R>): Promise<R>;
48
+ }
49
+
50
+ /**
51
+ * Node.js ORM 팩토리 함수
52
+ *
53
+ * DbContext와 DB 연결을 관리하는 인스턴스를 생성합니다.
54
+ * DbContext 정의와 연결 설정을 받아 트랜잭션을 관리합니다.
55
+ *
56
+ * @example
57
+ * ```typescript
58
+ * const MyDb = defineDbContext({
59
+ * user: (db) => queryable(db, User),
60
+ * });
61
+ *
62
+ * const orm = createOrm(MyDb, {
63
+ * dialect: "mysql",
64
+ * host: "localhost",
65
+ * port: 3306,
66
+ * username: "root",
67
+ * password: "password",
68
+ * database: "mydb",
69
+ * });
70
+ *
71
+ * // 트랜잭션 내에서 실행
72
+ * await orm.connect(async (db) => {
73
+ * const users = await db.user().result();
74
+ * return users;
75
+ * });
76
+ *
77
+ * // 트랜잭션 없이 실행
78
+ * await orm.connectWithoutTransaction(async (db) => {
79
+ * const users = await db.user().result();
80
+ * return users;
81
+ * });
82
+ * ```
83
+ */
84
+ export function createOrm<TDef extends DbContextDef<any, any, any>>(
85
+ dbContextDef: TDef,
86
+ config: DbConnConfig,
87
+ options?: OrmOptions,
88
+ ): Orm<TDef> {
89
+ function _createDbContext(): DbContextInstance<TDef> {
90
+ // database는 options에서 우선, 없으면 config에서
91
+ const database = options?.database ?? ("database" in config ? config.database : undefined);
92
+ if (database == null || database === "") {
93
+ throw new Error("database is required");
94
+ }
95
+
96
+ // schema는 options에서 우선, 없으면 config에서
97
+ const schema = options?.schema ?? ("schema" in config ? config.schema : undefined);
98
+
99
+ return createDbContext(dbContextDef, new NodeDbContextExecutor(config), {
100
+ database,
101
+ schema,
102
+ });
103
+ }
104
+
105
+ return {
106
+ dbContextDef,
107
+ config,
108
+ options,
109
+ async connect(callback, isolationLevel?) {
110
+ const db = _createDbContext();
111
+ return db.connect(async () => callback(db), isolationLevel);
112
+ },
113
+ async connectWithoutTransaction(callback) {
114
+ const db = _createDbContext();
115
+ return db.connectWithoutTransaction(async () => callback(db));
116
+ },
117
+ };
118
+ }
package/src/index.ts CHANGED
@@ -7,7 +7,7 @@ export * from "./connections/mysql-db-conn";
7
7
  export * from "./connections/postgresql-db-conn";
8
8
 
9
9
  // Core
10
- export * from "./db-conn-factory";
10
+ export * from "./create-db-conn";
11
11
  export * from "./node-db-context-executor";
12
12
  export * from "./pooled-db-conn";
13
- export * from "./sd-orm";
13
+ export * from "./create-orm";
@@ -11,7 +11,7 @@ import type {
11
11
  import { createQueryBuilder, parseQueryResult } from "@simplysm/orm-common";
12
12
  import type { DbConn, DbConnConfig } from "./types/db-conn";
13
13
  import { DB_CONN_ERRORS, getDialectFromConfig } from "./types/db-conn";
14
- import { DbConnFactory } from "./db-conn-factory";
14
+ import { createDbConn } from "./create-db-conn";
15
15
 
16
16
  /**
17
17
  * Node.js 환경용 DbContextExecutor
@@ -32,7 +32,7 @@ export class NodeDbContextExecutor implements DbContextExecutor {
32
32
  * 커넥션 풀에서 연결을 획득하고 연결 상태를 활성화한다.
33
33
  */
34
34
  async connect(): Promise<void> {
35
- this._conn = await DbConnFactory.create(this._config);
35
+ this._conn = await createDbConn(this._config);
36
36
  await this._conn.connect();
37
37
  }
38
38
 
@@ -1,10 +1,10 @@
1
- import { createConsola } from "consola";
1
+ import consola from "consola";
2
2
  import { SdError, EventEmitter } from "@simplysm/core-common";
3
3
  import type { Pool } from "generic-pool";
4
4
  import type { ColumnMeta, IsolationLevel } from "@simplysm/orm-common";
5
5
  import { DB_CONN_ERRORS, type DbConn, type DbConnConfig } from "./types/db-conn";
6
6
 
7
- const logger = createConsola().withTag("pooled-db-conn");
7
+ const logger = consola.withTag("pooled-db-conn");
8
8
 
9
9
  /**
10
10
  * 커넥션 풀에서 관리되는 DB 연결 래퍼