@simplysm/orm-node 14.0.16 → 14.0.18

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.
@@ -1,4 +1,4 @@
1
- import { type DbContextDef, type DbContextInstance, type IsolationLevel } from "@simplysm/orm-common";
1
+ import { DbContext, type DbContextExecutor, type IsolationLevel } from "@simplysm/orm-common";
2
2
  import type { DbConnConfig } from "./types/db-conn";
3
3
  /**
4
4
  * ORM 옵션
@@ -20,8 +20,11 @@ export interface OrmOptions {
20
20
  *
21
21
  * createOrm에서 반환하는 객체의 타입
22
22
  */
23
- export interface Orm<TDef extends DbContextDef<any, any, any>> {
24
- readonly dbContextDef: TDef;
23
+ export interface Orm<T extends DbContext> {
24
+ readonly DbClass: new (executor: DbContextExecutor, opt: {
25
+ database: string;
26
+ schema?: string;
27
+ }) => T;
25
28
  readonly config: DbConnConfig;
26
29
  readonly options?: OrmOptions;
27
30
  /**
@@ -31,26 +34,26 @@ export interface Orm<TDef extends DbContextDef<any, any, any>> {
31
34
  * @param isolationLevel - 트랜잭션 격리 수준
32
35
  * @returns 콜백 결과
33
36
  */
34
- connect<R>(callback: (conn: DbContextInstance<TDef>) => Promise<R>, isolationLevel?: IsolationLevel): Promise<R>;
37
+ connect<R>(callback: (conn: T) => Promise<R>, isolationLevel?: IsolationLevel): Promise<R>;
35
38
  /**
36
39
  * 트랜잭션 없이 콜백을 실행한다
37
40
  *
38
41
  * @param callback - DB 연결 후 실행할 콜백
39
42
  * @returns 콜백 결과
40
43
  */
41
- connectWithoutTransaction<R>(callback: (conn: DbContextInstance<TDef>) => Promise<R>): Promise<R>;
44
+ connectWithoutTransaction<R>(callback: (conn: T) => Promise<R>): Promise<R>;
42
45
  }
43
46
  /**
44
47
  * Node.js ORM 팩토리 함수
45
48
  *
46
49
  * DbContext와 DB 연결을 관리하는 인스턴스를 생성한다.
47
- * DbContext 정의와 연결 설정을 받아 트랜잭션을 관리한다.
50
+ * DbContext 서브클래스와 연결 설정을 받아 트랜잭션을 관리한다.
48
51
  *
49
52
  * @example
50
53
  * ```typescript
51
- * const MyDb = defineDbContext({
52
- * user: (db) => queryable(db, User),
53
- * });
54
+ * class MyDb extends DbContext {
55
+ * user = this.queryable(User);
56
+ * }
54
57
  *
55
58
  * const orm = createOrm(MyDb, {
56
59
  * dialect: "mysql",
@@ -74,5 +77,8 @@ export interface Orm<TDef extends DbContextDef<any, any, any>> {
74
77
  * });
75
78
  * ```
76
79
  */
77
- export declare function createOrm<TDef extends DbContextDef<any, any, any>>(dbContextDef: TDef, config: DbConnConfig, options?: OrmOptions): Orm<TDef>;
80
+ export declare function createOrm<T extends DbContext>(DbClass: new (executor: DbContextExecutor, opt: {
81
+ database: string;
82
+ schema?: string;
83
+ }) => T, config: DbConnConfig, options?: OrmOptions): Orm<T>;
78
84
  //# sourceMappingURL=create-orm.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"create-orm.d.ts","sourceRoot":"","sources":["../src/create-orm.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,YAAY,EACjB,KAAK,iBAAiB,EACtB,KAAK,cAAc,EACpB,MAAM,sBAAsB,CAAC;AAC9B,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,EACP,QAAQ,EAAE,CAAC,IAAI,EAAE,iBAAiB,CAAC,IAAI,CAAC,KAAK,OAAO,CAAC,CAAC,CAAC,EACvD,cAAc,CAAC,EAAE,cAAc,GAC9B,OAAO,CAAC,CAAC,CAAC,CAAC;IAEd;;;;;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"}
1
+ {"version":3,"file":"create-orm.d.ts","sourceRoot":"","sources":["../src/create-orm.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,SAAS,EACT,KAAK,iBAAiB,EACtB,KAAK,cAAc,EACpB,MAAM,sBAAsB,CAAC;AAC9B,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,CAAC,SAAS,SAAS;IACtC,QAAQ,CAAC,OAAO,EAAE,KAChB,QAAQ,EAAE,iBAAiB,EAC3B,GAAG,EAAE;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAA;KAAE,KACvC,CAAC,CAAC;IACP,QAAQ,CAAC,MAAM,EAAE,YAAY,CAAC;IAC9B,QAAQ,CAAC,OAAO,CAAC,EAAE,UAAU,CAAC;IAE9B;;;;;;OAMG;IACH,OAAO,CAAC,CAAC,EACP,QAAQ,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,OAAO,CAAC,CAAC,CAAC,EACjC,cAAc,CAAC,EAAE,cAAc,GAC9B,OAAO,CAAC,CAAC,CAAC,CAAC;IAEd;;;;;OAKG;IACH,yBAAyB,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;CAC7E;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiCG;AACH,wBAAgB,SAAS,CAAC,CAAC,SAAS,SAAS,EAC3C,OAAO,EAAE,KAAK,QAAQ,EAAE,iBAAiB,EAAE,GAAG,EAAE;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,KAAK,CAAC,EAC3F,MAAM,EAAE,YAAY,EACpB,OAAO,CAAC,EAAE,UAAU,GACnB,GAAG,CAAC,CAAC,CAAC,CA8BR"}
@@ -1,16 +1,16 @@
1
- import { createDbContext, } from "@simplysm/orm-common";
1
+ import { DbContext, } from "@simplysm/orm-common";
2
2
  import { NodeDbContextExecutor } from "./node-db-context-executor.js";
3
3
  /**
4
4
  * Node.js ORM 팩토리 함수
5
5
  *
6
6
  * DbContext와 DB 연결을 관리하는 인스턴스를 생성한다.
7
- * DbContext 정의와 연결 설정을 받아 트랜잭션을 관리한다.
7
+ * DbContext 서브클래스와 연결 설정을 받아 트랜잭션을 관리한다.
8
8
  *
9
9
  * @example
10
10
  * ```typescript
11
- * const MyDb = defineDbContext({
12
- * user: (db) => queryable(db, User),
13
- * });
11
+ * class MyDb extends DbContext {
12
+ * user = this.queryable(User);
13
+ * }
14
14
  *
15
15
  * const orm = createOrm(MyDb, {
16
16
  * dialect: "mysql",
@@ -34,8 +34,8 @@ import { NodeDbContextExecutor } from "./node-db-context-executor.js";
34
34
  * });
35
35
  * ```
36
36
  */
37
- export function createOrm(dbContextDef, config, options) {
38
- function _createDbContext() {
37
+ export function createOrm(DbClass, config, options) {
38
+ function _createInstance() {
39
39
  // options의 database를 우선 사용, 없으면 config에서
40
40
  const database = options?.database ?? ("database" in config ? config.database : undefined);
41
41
  if (database == null || database === "") {
@@ -43,21 +43,21 @@ export function createOrm(dbContextDef, config, options) {
43
43
  }
44
44
  // options의 schema를 우선 사용, 없으면 config에서
45
45
  const schema = options?.schema ?? ("schema" in config ? config.schema : undefined);
46
- return createDbContext(dbContextDef, new NodeDbContextExecutor(config), {
46
+ return new DbClass(new NodeDbContextExecutor(config), {
47
47
  database,
48
48
  schema,
49
49
  });
50
50
  }
51
51
  return {
52
- dbContextDef,
52
+ DbClass,
53
53
  config,
54
54
  options,
55
55
  async connect(callback, isolationLevel) {
56
- const db = _createDbContext();
56
+ const db = _createInstance();
57
57
  return db.connect(async () => callback(db), isolationLevel);
58
58
  },
59
59
  async connectWithoutTransaction(callback) {
60
- const db = _createDbContext();
60
+ const db = _createInstance();
61
61
  return db.connectWithoutTransaction(async () => callback(db));
62
62
  },
63
63
  };
@@ -1 +1 @@
1
- {"version":3,"file":"create-orm.js","sourceRoot":"","sources":["../src/create-orm.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,eAAe,GAIhB,MAAM,sBAAsB,CAAC;AAE9B,OAAO,EAAE,qBAAqB,EAAE,MAAM,4BAA4B,CAAC;AAkDnE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiCG;AACH,MAAM,UAAU,SAAS,CACvB,YAAkB,EAClB,MAAoB,EACpB,OAAoB;IAEpB,SAAS,gBAAgB;QACvB,yCAAyC;QACzC,MAAM,QAAQ,GAAG,OAAO,EAAE,QAAQ,IAAI,CAAC,UAAU,IAAI,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;QAC3F,IAAI,QAAQ,IAAI,IAAI,IAAI,QAAQ,KAAK,EAAE,EAAE,CAAC;YACxC,MAAM,IAAI,KAAK,CAAC,iBAAiB,CAAC,CAAC;QACrC,CAAC;QAED,uCAAuC;QACvC,MAAM,MAAM,GAAG,OAAO,EAAE,MAAM,IAAI,CAAC,QAAQ,IAAI,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;QAEnF,OAAO,eAAe,CAAC,YAAY,EAAE,IAAI,qBAAqB,CAAC,MAAM,CAAC,EAAE;YACtE,QAAQ;YACR,MAAM;SACP,CAAC,CAAC;IACL,CAAC;IAED,OAAO;QACL,YAAY;QACZ,MAAM;QACN,OAAO;QACP,KAAK,CAAC,OAAO,CAAC,QAAQ,EAAE,cAAe;YACrC,MAAM,EAAE,GAAG,gBAAgB,EAAE,CAAC;YAC9B,OAAO,EAAE,CAAC,OAAO,CAAC,KAAK,IAAI,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,EAAE,cAAc,CAAC,CAAC;QAC9D,CAAC;QACD,KAAK,CAAC,yBAAyB,CAAC,QAAQ;YACtC,MAAM,EAAE,GAAG,gBAAgB,EAAE,CAAC;YAC9B,OAAO,EAAE,CAAC,yBAAyB,CAAC,KAAK,IAAI,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC;QAChE,CAAC;KACF,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"create-orm.js","sourceRoot":"","sources":["../src/create-orm.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,SAAS,GAGV,MAAM,sBAAsB,CAAC;AAE9B,OAAO,EAAE,qBAAqB,EAAE,MAAM,4BAA4B,CAAC;AAqDnE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiCG;AACH,MAAM,UAAU,SAAS,CACvB,OAA2F,EAC3F,MAAoB,EACpB,OAAoB;IAEpB,SAAS,eAAe;QACtB,yCAAyC;QACzC,MAAM,QAAQ,GAAG,OAAO,EAAE,QAAQ,IAAI,CAAC,UAAU,IAAI,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;QAC3F,IAAI,QAAQ,IAAI,IAAI,IAAI,QAAQ,KAAK,EAAE,EAAE,CAAC;YACxC,MAAM,IAAI,KAAK,CAAC,iBAAiB,CAAC,CAAC;QACrC,CAAC;QAED,uCAAuC;QACvC,MAAM,MAAM,GAAG,OAAO,EAAE,MAAM,IAAI,CAAC,QAAQ,IAAI,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;QAEnF,OAAO,IAAI,OAAO,CAAC,IAAI,qBAAqB,CAAC,MAAM,CAAC,EAAE;YACpD,QAAQ;YACR,MAAM;SACP,CAAC,CAAC;IACL,CAAC;IAED,OAAO;QACL,OAAO;QACP,MAAM;QACN,OAAO;QACP,KAAK,CAAC,OAAO,CAAC,QAAQ,EAAE,cAAe;YACrC,MAAM,EAAE,GAAG,eAAe,EAAE,CAAC;YAC7B,OAAO,EAAE,CAAC,OAAO,CAAC,KAAK,IAAI,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,EAAE,cAAc,CAAC,CAAC;QAC9D,CAAC;QACD,KAAK,CAAC,yBAAyB,CAAC,QAAQ;YACtC,MAAM,EAAE,GAAG,eAAe,EAAE,CAAC;YAC7B,OAAO,EAAE,CAAC,yBAAyB,CAAC,KAAK,IAAI,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC;QAChE,CAAC;KACF,CAAC;AACJ,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@simplysm/orm-node",
3
- "version": "14.0.16",
3
+ "version": "14.0.18",
4
4
  "description": "심플리즘 패키지 - ORM (node)",
5
5
  "author": "심플리즘",
6
6
  "license": "Apache-2.0",
@@ -20,8 +20,8 @@
20
20
  "sideEffects": false,
21
21
  "dependencies": {
22
22
  "consola": "^3.4.2",
23
- "@simplysm/core-common": "14.0.16",
24
- "@simplysm/orm-common": "14.0.16"
23
+ "@simplysm/core-common": "14.0.18",
24
+ "@simplysm/orm-common": "14.0.18"
25
25
  },
26
26
  "devDependencies": {
27
27
  "@types/pg": "^8.20.0",
package/src/create-orm.ts CHANGED
@@ -1,7 +1,6 @@
1
1
  import {
2
- createDbContext,
3
- type DbContextDef,
4
- type DbContextInstance,
2
+ DbContext,
3
+ type DbContextExecutor,
5
4
  type IsolationLevel,
6
5
  } from "@simplysm/orm-common";
7
6
  import type { DbConnConfig } from "./types/db-conn";
@@ -29,8 +28,11 @@ export interface OrmOptions {
29
28
  *
30
29
  * createOrm에서 반환하는 객체의 타입
31
30
  */
32
- export interface Orm<TDef extends DbContextDef<any, any, any>> {
33
- readonly dbContextDef: TDef;
31
+ export interface Orm<T extends DbContext> {
32
+ readonly DbClass: new (
33
+ executor: DbContextExecutor,
34
+ opt: { database: string; schema?: string },
35
+ ) => T;
34
36
  readonly config: DbConnConfig;
35
37
  readonly options?: OrmOptions;
36
38
 
@@ -42,7 +44,7 @@ export interface Orm<TDef extends DbContextDef<any, any, any>> {
42
44
  * @returns 콜백 결과
43
45
  */
44
46
  connect<R>(
45
- callback: (conn: DbContextInstance<TDef>) => Promise<R>,
47
+ callback: (conn: T) => Promise<R>,
46
48
  isolationLevel?: IsolationLevel,
47
49
  ): Promise<R>;
48
50
 
@@ -52,20 +54,20 @@ export interface Orm<TDef extends DbContextDef<any, any, any>> {
52
54
  * @param callback - DB 연결 후 실행할 콜백
53
55
  * @returns 콜백 결과
54
56
  */
55
- connectWithoutTransaction<R>(callback: (conn: DbContextInstance<TDef>) => Promise<R>): Promise<R>;
57
+ connectWithoutTransaction<R>(callback: (conn: T) => Promise<R>): Promise<R>;
56
58
  }
57
59
 
58
60
  /**
59
61
  * Node.js ORM 팩토리 함수
60
62
  *
61
63
  * DbContext와 DB 연결을 관리하는 인스턴스를 생성한다.
62
- * DbContext 정의와 연결 설정을 받아 트랜잭션을 관리한다.
64
+ * DbContext 서브클래스와 연결 설정을 받아 트랜잭션을 관리한다.
63
65
  *
64
66
  * @example
65
67
  * ```typescript
66
- * const MyDb = defineDbContext({
67
- * user: (db) => queryable(db, User),
68
- * });
68
+ * class MyDb extends DbContext {
69
+ * user = this.queryable(User);
70
+ * }
69
71
  *
70
72
  * const orm = createOrm(MyDb, {
71
73
  * dialect: "mysql",
@@ -89,12 +91,12 @@ export interface Orm<TDef extends DbContextDef<any, any, any>> {
89
91
  * });
90
92
  * ```
91
93
  */
92
- export function createOrm<TDef extends DbContextDef<any, any, any>>(
93
- dbContextDef: TDef,
94
+ export function createOrm<T extends DbContext>(
95
+ DbClass: new (executor: DbContextExecutor, opt: { database: string; schema?: string }) => T,
94
96
  config: DbConnConfig,
95
97
  options?: OrmOptions,
96
- ): Orm<TDef> {
97
- function _createDbContext(): DbContextInstance<TDef> {
98
+ ): Orm<T> {
99
+ function _createInstance(): T {
98
100
  // options의 database를 우선 사용, 없으면 config에서
99
101
  const database = options?.database ?? ("database" in config ? config.database : undefined);
100
102
  if (database == null || database === "") {
@@ -104,22 +106,22 @@ export function createOrm<TDef extends DbContextDef<any, any, any>>(
104
106
  // options의 schema를 우선 사용, 없으면 config에서
105
107
  const schema = options?.schema ?? ("schema" in config ? config.schema : undefined);
106
108
 
107
- return createDbContext(dbContextDef, new NodeDbContextExecutor(config), {
109
+ return new DbClass(new NodeDbContextExecutor(config), {
108
110
  database,
109
111
  schema,
110
112
  });
111
113
  }
112
114
 
113
115
  return {
114
- dbContextDef,
116
+ DbClass,
115
117
  config,
116
118
  options,
117
119
  async connect(callback, isolationLevel?) {
118
- const db = _createDbContext();
120
+ const db = _createInstance();
119
121
  return db.connect(async () => callback(db), isolationLevel);
120
122
  },
121
123
  async connectWithoutTransaction(callback) {
122
- const db = _createDbContext();
124
+ const db = _createInstance();
123
125
  return db.connectWithoutTransaction(async () => callback(db));
124
126
  },
125
127
  };