reltype 0.1.7 → 0.1.8

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -6,6 +6,18 @@ This project adheres to [Semantic Versioning](https://semver.org/).
6
6
 
7
7
  ---
8
8
 
9
+ ## [0.1.7] — 2026-03-19
10
+
11
+ ### Added — Repository Query Debug
12
+
13
+ - `BaseRepo`에 `RepoOpts` 및 쿼리 디버그 모드 추가
14
+ - `new UserRepo(usersTable, { debug: true })` 형태로 생성 시, 이 레포지토리에서 실행되는 **모든 SQL / Params / 실행 시간**이 콘솔에 출력됩니다.
15
+ - `userRepo.debugMode(true | false)` 로 런타임에서도 토글 가능, `userRepo.isDebugMode` 로 현재 상태 조회 가능
16
+ - `LOG_LEVEL` 환경 변수와 무관하게 항상 출력되며, 프로덕션에서는 `debug: false` 유지 권장
17
+ - `select()` 계열은 QueryBuilder 훅(`ExecHooks`)과 자동 합성되어, debug 로그 → 사용자 정의 훅 순서로 실행되도록 개선
18
+
19
+ ---
20
+
9
21
  ## [0.1.6] — 2026-03-19
10
22
 
11
23
  ### Security — SQL Injection 전면 차단
@@ -6,6 +6,29 @@ import { QueryBuilder } from '../query/builder';
6
6
  import { AdvancedWhere, ExecHooks } from '../query/interfaces/Advanced';
7
7
  import { IRepo } from './interfaces/Repo';
8
8
  import { FindOpts } from './interfaces/Find';
9
+ /**
10
+ * `BaseRepo` 생성자 옵션.
11
+ *
12
+ * @example
13
+ * ```ts
14
+ * // 생성 시 debug 활성화
15
+ * const userRepo = new UserRepo(usersTable, { debug: true });
16
+ *
17
+ * // 런타임 토글
18
+ * userRepo.debugMode(true); // 활성화
19
+ * userRepo.debugMode(false); // 비활성화
20
+ * ```
21
+ */
22
+ export interface RepoOpts {
23
+ /**
24
+ * `true` 로 설정하면 이 레포지토리의 모든 SQL 실행 내용을 콘솔에 강제 출력합니다.
25
+ *
26
+ * - `LOG_LEVEL` 환경변수 설정과 무관하게 항상 출력됩니다.
27
+ * - 출력 내용: SQL 쿼리, 파라미터, 실행 시간, 반환 row 수
28
+ * - 개발·디버깅 목적으로만 사용하세요. 프로덕션에서는 `false` 유지를 권장합니다.
29
+ */
30
+ debug?: boolean;
31
+ }
9
32
  /**
10
33
  * 기본 CRUD 레포지토리.
11
34
  *
@@ -19,7 +42,10 @@ export declare class BaseRepo<TDef extends TableDef<string, Cols>> implements IR
19
42
  protected readonly pkKey: string;
20
43
  protected readonly pkCol: string;
21
44
  private _globalHooks?;
22
- constructor(def: TDef);
45
+ private _debugMode;
46
+ /** debug 전용 Logger — LOG_LEVEL 환경변수와 무관하게 항상 출력 */
47
+ private readonly _debugLogger;
48
+ constructor(def: TDef, opts?: RepoOpts);
23
49
  /**
24
50
  * 이 레포지토리의 모든 `select()` 빌더에 적용될 글로벌 훅을 등록합니다.
25
51
  *
@@ -32,6 +58,22 @@ export declare class BaseRepo<TDef extends TableDef<string, Cols>> implements IR
32
58
  * ```
33
59
  */
34
60
  useHooks(h: ExecHooks<InferRow<TDef>>): this;
61
+ /**
62
+ * 쿼리 디버그 모드를 런타임에 토글합니다.
63
+ * `true` 이면 이 레포지토리의 모든 SQL 실행 내용을 콘솔에 강제 출력합니다.
64
+ *
65
+ * @example
66
+ * ```ts
67
+ * userRepo.debugMode(true); // 활성화
68
+ * userRepo.debugMode(false); // 비활성화
69
+ * userRepo.debugMode(); // 인수 생략 시 true (toggle-on)
70
+ * ```
71
+ */
72
+ debugMode(enabled?: boolean): this;
73
+ /**
74
+ * 현재 debug 모드 활성화 여부를 반환합니다.
75
+ */
76
+ get isDebugMode(): boolean;
35
77
  /**
36
78
  * SQL을 실행하고 camelCase 변환된 rows를 반환합니다.
37
79
  *
@@ -75,6 +117,12 @@ export declare class BaseRepo<TDef extends TableDef<string, Cols>> implements IR
75
117
  * ```
76
118
  */
77
119
  select(where?: AdvancedWhere<InferRow<TDef>>): QueryBuilder<InferRow<TDef>>;
120
+ /**
121
+ * debug 훅과 전역 훅을 합성합니다.
122
+ * - debugMode ON: debug 출력 → _globalHooks 순서로 실행
123
+ * - debugMode OFF: _globalHooks 만 실행
124
+ */
125
+ private buildSelectHooks;
78
126
  /**
79
127
  * 단건 조회 (없으면 null). `select(where).one()` 의 단축형입니다.
80
128
  * 전역 훅이 적용됩니다.
@@ -1 +1 @@
1
- {"version":3,"file":"base.d.ts","sourceRoot":"","sources":["../../../src/features/repository/base.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,IAAI,CAAC;AAChC,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,4BAA4B,CAAC;AAC5D,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AAOhF,OAAO,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAC;AACvD,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAChD,OAAO,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,8BAA8B,CAAC;AAMxE,OAAO,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAC1C,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAwB7C;;;;;;GAMG;AACH,qBAAa,QAAQ,CAAC,IAAI,SAAS,QAAQ,CAAC,MAAM,EAAE,IAAI,CAAC,CACvD,YAAW,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,WAAW,CAAC,IAAI,CAAC,EAAE,WAAW,CAAC,IAAI,CAAC,CAAC;IAQ1D,SAAS,CAAC,QAAQ,CAAC,GAAG,EAAE,IAAI;IANxC,SAAS,CAAC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IACrC,SAAS,CAAC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACjC,SAAS,CAAC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IAEjC,OAAO,CAAC,YAAY,CAAC,CAA4B;gBAElB,GAAG,EAAE,IAAI;IAMxC;;;;;;;;;;OAUG;IACH,QAAQ,CAAC,CAAC,EAAE,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,GAAG,IAAI;IAK5C;;;;;OAKG;cACa,IAAI,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACpD,KAAK,EAAE,UAAU,EACjB,MAAM,CAAC,EAAE,UAAU,GAClB,OAAO,CAAC,CAAC,EAAE,CAAC;IA6BT,OAAO,CAAC,IAAI,GAAE,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAM,GAAG,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;IAUvE,QAAQ,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;IAc7D,OAAO,CAAC,KAAK,EAAE,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,GAAG,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;IAWvE,MAAM,CAAC,IAAI,EAAE,WAAW,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;IAWxD,MAAM,CACV,EAAE,EAAE,MAAM,GAAG,MAAM,EACnB,IAAI,EAAE,WAAW,CAAC,IAAI,CAAC,GACtB,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;IAgBjC;;;OAGG;IACG,MAAM,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAYnD;;;OAGG;IACG,MAAM,CACV,IAAI,EAAE,WAAW,CAAC,IAAI,CAAC,EACvB,WAAW,CAAC,EAAE,MAAM,GACnB,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;IAe1B;;;;OAIG;IACG,UAAU,CAAC,IAAI,EAAE,WAAW,CAAC,IAAI,CAAC,EAAE,GAAG,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;IAetE;;;;;;;;;;;;;OAaG;IACH,MAAM,CAAC,KAAK,CAAC,EAAE,aAAa,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,GAAG,YAAY,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;IAM3E;;;;;;;;;OASG;IACG,SAAS,CACb,KAAK,EAAE,aAAa,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,GACnC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;IAQjC;;;;;;;;;;;OAWG;IACG,GAAG,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACnE,GAAG,EAAE,MAAM,EACX,MAAM,CAAC,EAAE,OAAO,EAAE,GACjB,OAAO,CAAC,CAAC,EAAE,CAAC;CAGhB"}
1
+ {"version":3,"file":"base.d.ts","sourceRoot":"","sources":["../../../src/features/repository/base.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,IAAI,CAAC;AAChC,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,4BAA4B,CAAC;AAC5D,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AAOhF,OAAO,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAC;AACvD,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAChD,OAAO,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,8BAA8B,CAAC;AAMxE,OAAO,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAC1C,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAO7C;;;;;;;;;;;;GAYG;AACH,MAAM,WAAW,QAAQ;IACvB;;;;;;OAMG;IACH,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAmBD;;;;;;GAMG;AACH,qBAAa,QAAQ,CAAC,IAAI,SAAS,QAAQ,CAAC,MAAM,EAAE,IAAI,CAAC,CACvD,YAAW,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,WAAW,CAAC,IAAI,CAAC,EAAE,WAAW,CAAC,IAAI,CAAC,CAAC;IAY1D,SAAS,CAAC,QAAQ,CAAC,GAAG,EAAE,IAAI;IAVxC,SAAS,CAAC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IACrC,SAAS,CAAC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACjC,SAAS,CAAC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IAEjC,OAAO,CAAC,YAAY,CAAC,CAA4B;IACjD,OAAO,CAAC,UAAU,CAAU;IAE5B,mDAAmD;IACnD,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAS;gBAEP,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,QAAQ;IAczD;;;;;;;;;;OAUG;IACH,QAAQ,CAAC,CAAC,EAAE,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,GAAG,IAAI;IAK5C;;;;;;;;;;OAUG;IACH,SAAS,CAAC,OAAO,GAAE,OAAc,GAAG,IAAI;IAKxC;;OAEG;IACH,IAAI,WAAW,IAAI,OAAO,CAEzB;IAED;;;;;OAKG;cACa,IAAI,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACpD,KAAK,EAAE,UAAU,EACjB,MAAM,CAAC,EAAE,UAAU,GAClB,OAAO,CAAC,CAAC,EAAE,CAAC;IA6CT,OAAO,CAAC,IAAI,GAAE,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAM,GAAG,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;IAUvE,QAAQ,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;IAc7D,OAAO,CAAC,KAAK,EAAE,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,GAAG,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;IAWvE,MAAM,CAAC,IAAI,EAAE,WAAW,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;IAWxD,MAAM,CACV,EAAE,EAAE,MAAM,GAAG,MAAM,EACnB,IAAI,EAAE,WAAW,CAAC,IAAI,CAAC,GACtB,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;IAgBjC;;;OAGG;IACG,MAAM,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAYnD;;;OAGG;IACG,MAAM,CACV,IAAI,EAAE,WAAW,CAAC,IAAI,CAAC,EACvB,WAAW,CAAC,EAAE,MAAM,GACnB,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;IAe1B;;;;OAIG;IACG,UAAU,CAAC,IAAI,EAAE,WAAW,CAAC,IAAI,CAAC,EAAE,GAAG,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;IAetE;;;;;;;;;;;;;OAaG;IACH,MAAM,CAAC,KAAK,CAAC,EAAE,aAAa,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,GAAG,YAAY,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;IAO3E;;;;OAIG;IACH,OAAO,CAAC,gBAAgB;IAqBxB;;;;;;;;;OASG;IACG,SAAS,CACb,KAAK,EAAE,aAAa,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,GACnC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;IAQjC;;;;;;;;;;;OAWG;IACG,GAAG,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACnE,GAAG,EAAE,MAAM,EACX,MAAM,CAAC,EAAE,OAAO,EAAE,GACjB,OAAO,CAAC,CAAC,EAAE,CAAC;CAGhB"}
@@ -36,11 +36,19 @@ function findPkKey(cols, tableName) {
36
36
  * - 트랜잭션 내에서 사용하려면 `exec(built, client)` 형태로 client를 전달하세요.
37
37
  */
38
38
  class BaseRepo {
39
- constructor(def) {
39
+ constructor(def, opts) {
40
40
  this.def = def;
41
41
  this.tableName = def.qualifiedName ?? def.name;
42
42
  this.pkKey = findPkKey(def.cols, this.tableName);
43
43
  this.pkCol = (0, case_1.toSnake)(this.pkKey);
44
+ this._debugMode = opts?.debug ?? false;
45
+ this._debugLogger = new logger_1.Logger({
46
+ enabled: true,
47
+ level: 'debug',
48
+ format: 'text',
49
+ enableTimestamp: false,
50
+ prefix: `[SQL ${this.tableName}]`,
51
+ });
44
52
  }
45
53
  /**
46
54
  * 이 레포지토리의 모든 `select()` 빌더에 적용될 글로벌 훅을 등록합니다.
@@ -57,6 +65,27 @@ class BaseRepo {
57
65
  this._globalHooks = h;
58
66
  return this;
59
67
  }
68
+ /**
69
+ * 쿼리 디버그 모드를 런타임에 토글합니다.
70
+ * `true` 이면 이 레포지토리의 모든 SQL 실행 내용을 콘솔에 강제 출력합니다.
71
+ *
72
+ * @example
73
+ * ```ts
74
+ * userRepo.debugMode(true); // 활성화
75
+ * userRepo.debugMode(false); // 비활성화
76
+ * userRepo.debugMode(); // 인수 생략 시 true (toggle-on)
77
+ * ```
78
+ */
79
+ debugMode(enabled = true) {
80
+ this._debugMode = enabled;
81
+ return this;
82
+ }
83
+ /**
84
+ * 현재 debug 모드 활성화 여부를 반환합니다.
85
+ */
86
+ get isDebugMode() {
87
+ return this._debugMode;
88
+ }
60
89
  /**
61
90
  * SQL을 실행하고 camelCase 변환된 rows를 반환합니다.
62
91
  *
@@ -70,10 +99,25 @@ class BaseRepo {
70
99
  }
71
100
  const run = async (c) => {
72
101
  const start = Date.now();
73
- logger.debug(`SQL: ${built.sql}`, built.params);
102
+ if (this._debugMode) {
103
+ this._debugLogger.debug(`SQL: ${built.sql}`);
104
+ if (built.params.length > 0) {
105
+ this._debugLogger.debug('Params:', built.params);
106
+ }
107
+ }
108
+ else {
109
+ logger.debug(`SQL: ${built.sql}`, built.params);
110
+ }
74
111
  try {
75
112
  const result = await c.query(built.sql, built.params);
76
- logger.debug(`완료 (${Date.now() - start}ms) rowCount=${result.rowCount ?? 0}`);
113
+ const elapsed = Date.now() - start;
114
+ const count = result.rowCount ?? 0;
115
+ if (this._debugMode) {
116
+ this._debugLogger.debug(`→ ${count} rows in ${elapsed}ms`);
117
+ }
118
+ else {
119
+ logger.debug(`완료 (${elapsed}ms) rowCount=${count}`);
120
+ }
77
121
  return (0, mapper_1.mapRows)(result.rows);
78
122
  }
79
123
  catch (err) {
@@ -195,10 +239,37 @@ class BaseRepo {
195
239
  */
196
240
  select(where) {
197
241
  const qb = new builder_1.QueryBuilder(this.tableName, where);
198
- if (this._globalHooks)
199
- qb.hooks(this._globalHooks);
242
+ const composedHooks = this.buildSelectHooks();
243
+ if (composedHooks)
244
+ qb.hooks(composedHooks);
200
245
  return qb;
201
246
  }
247
+ /**
248
+ * debug 훅과 전역 훅을 합성합니다.
249
+ * - debugMode ON: debug 출력 → _globalHooks 순서로 실행
250
+ * - debugMode OFF: _globalHooks 만 실행
251
+ */
252
+ buildSelectHooks() {
253
+ if (!this._debugMode && !this._globalHooks)
254
+ return undefined;
255
+ if (!this._debugMode)
256
+ return this._globalHooks;
257
+ const dl = this._debugLogger;
258
+ const g = this._globalHooks;
259
+ return {
260
+ beforeExec: async (ctx) => {
261
+ dl.debug(`SQL: ${ctx.sql}`);
262
+ if (ctx.params.length > 0)
263
+ dl.debug('Params:', ctx.params);
264
+ await g?.beforeExec?.(ctx);
265
+ },
266
+ afterExec: async (ctx) => {
267
+ dl.debug(`→ ${ctx.rows.length} rows in ${ctx.elapsed}ms`);
268
+ await g?.afterExec?.(ctx);
269
+ },
270
+ onError: g?.onError,
271
+ };
272
+ }
202
273
  /**
203
274
  * 단건 조회 (없으면 null). `select(where).one()` 의 단축형입니다.
204
275
  * 전역 훅이 적용됩니다.
@@ -25,5 +25,9 @@ export interface IRepo<TRow extends Record<string, unknown>, TInsert = Partial<T
25
25
  raw<R extends Record<string, unknown>>(sql: string, params?: unknown[]): Promise<R[]>;
26
26
  /** 이 레포지토리의 모든 select() 빌더에 적용될 글로벌 훅 등록 */
27
27
  useHooks(h: ExecHooks<TRow>): this;
28
+ /** 런타임 쿼리 디버그 모드 토글 */
29
+ debugMode(enabled?: boolean): this;
30
+ /** 현재 debug 모드 활성화 여부 */
31
+ readonly isDebugMode: boolean;
28
32
  }
29
33
  //# sourceMappingURL=Repo.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"Repo.d.ts","sourceRoot":"","sources":["../../../../src/features/repository/interfaces/Repo.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,QAAQ,CAAC;AAClC,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,iCAAiC,CAAC;AAE3E;;;;;;GAMG;AACH,MAAM,WAAW,KAAK,CACpB,IAAI,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACpC,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,EACvB,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC;IAGvB,OAAO,CAAC,IAAI,CAAC,EAAE,QAAQ,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC;IAChD,QAAQ,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC,IAAI,GAAG,IAAI,CAAC,CAAC;IACpD,OAAO,CAAC,KAAK,EAAE,OAAO,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,IAAI,GAAG,IAAI,CAAC,CAAC;IACpD,MAAM,CAAC,IAAI,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACrC,MAAM,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,EAAE,IAAI,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,GAAG,IAAI,CAAC,CAAC;IACjE,MAAM,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IAC9C,MAAM,CAAC,IAAI,EAAE,OAAO,EAAE,WAAW,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC3D,UAAU,CAAC,IAAI,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC;IAG7C,4EAA4E;IAC5E,MAAM,CAAC,KAAK,CAAC,EAAE,aAAa,CAAC,IAAI,CAAC,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC;IACxD,uBAAuB;IACvB,SAAS,CAAC,KAAK,EAAE,aAAa,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,IAAI,GAAG,IAAI,CAAC,CAAC;IAC5D,sCAAsC;IACtC,GAAG,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC;IACtF,4CAA4C;IAC5C,QAAQ,CAAC,CAAC,EAAE,SAAS,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;CACpC"}
1
+ {"version":3,"file":"Repo.d.ts","sourceRoot":"","sources":["../../../../src/features/repository/interfaces/Repo.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,QAAQ,CAAC;AAClC,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,iCAAiC,CAAC;AAE3E;;;;;;GAMG;AACH,MAAM,WAAW,KAAK,CACpB,IAAI,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACpC,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,EACvB,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC;IAGvB,OAAO,CAAC,IAAI,CAAC,EAAE,QAAQ,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC;IAChD,QAAQ,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC,IAAI,GAAG,IAAI,CAAC,CAAC;IACpD,OAAO,CAAC,KAAK,EAAE,OAAO,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,IAAI,GAAG,IAAI,CAAC,CAAC;IACpD,MAAM,CAAC,IAAI,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACrC,MAAM,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,EAAE,IAAI,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,GAAG,IAAI,CAAC,CAAC;IACjE,MAAM,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IAC9C,MAAM,CAAC,IAAI,EAAE,OAAO,EAAE,WAAW,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC3D,UAAU,CAAC,IAAI,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC;IAG7C,4EAA4E;IAC5E,MAAM,CAAC,KAAK,CAAC,EAAE,aAAa,CAAC,IAAI,CAAC,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC;IACxD,uBAAuB;IACvB,SAAS,CAAC,KAAK,EAAE,aAAa,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,IAAI,GAAG,IAAI,CAAC,CAAC;IAC5D,sCAAsC;IACtC,GAAG,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC;IACtF,4CAA4C;IAC5C,QAAQ,CAAC,CAAC,EAAE,SAAS,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;IACnC,uBAAuB;IACvB,SAAS,CAAC,OAAO,CAAC,EAAE,OAAO,GAAG,IAAI,CAAC;IACnC,yBAAyB;IACzB,QAAQ,CAAC,WAAW,EAAE,OAAO,CAAC;CAC/B"}
package/dist/index.d.ts CHANGED
@@ -6,6 +6,7 @@ export type { TableDef, Cols } from './features/schema/interfaces/Table';
6
6
  export type { InferRow, InferInsert, InferUpdate } from './features/schema/interfaces/Infer';
7
7
  export { createRepo } from './features/repository/create';
8
8
  export { BaseRepo } from './features/repository/base';
9
+ export type { RepoOpts } from './features/repository/base';
9
10
  export type { IRepo } from './features/repository/interfaces/Repo';
10
11
  export type { FindOpts } from './features/repository/interfaces/Find';
11
12
  export { getPool, withClient, closePool, getPoolStatus, checkPoolHealth } from './features/connection/pool';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,MAAe,0BAA0B,CAAC;AAC7D,OAAO,EAAE,WAAW,EAAE,MAAY,yBAAyB,CAAC;AAC5D,YAAY,EAAE,SAAS,EAAE,MAAS,yBAAyB,CAAC;AAC5D,YAAY,EAAE,QAAQ,EAAE,MAAU,qCAAqC,CAAC;AACxE,YAAY,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,oCAAoC,CAAC;AACzE,YAAY,EAAE,QAAQ,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,oCAAoC,CAAC;AAG7F,OAAO,EAAE,UAAU,EAAE,MAAa,8BAA8B,CAAC;AACjE,OAAO,EAAE,QAAQ,EAAE,MAAe,4BAA4B,CAAC;AAC/D,YAAY,EAAE,KAAK,EAAE,MAAa,uCAAuC,CAAC;AAC1E,YAAY,EAAE,QAAQ,EAAE,MAAU,uCAAuC,CAAC;AAG1E,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAC5G,YAAY,EAAE,UAAU,EAAE,MAAQ,4BAA4B,CAAC;AAC/D,OAAO,EAAE,OAAO,EAAE,MAAgB,0BAA0B,CAAC;AAG7D,OAAO,EAAE,WAAW,EAAE,MAAY,yBAAyB,CAAC;AAC5D,OAAO,EAAE,WAAW,EAAE,MAAY,yBAAyB,CAAC;AAC5D,OAAO,EAAE,WAAW,EAAE,MAAY,yBAAyB,CAAC;AAC5D,OAAO,EAAE,WAAW,EAAE,MAAY,yBAAyB,CAAC;AAC5D,OAAO,EAAE,WAAW,EAAE,MAAY,yBAAyB,CAAC;AAC5D,OAAO,EAAE,eAAe,EAAE,MAAQ,6BAA6B,CAAC;AAChE,OAAO,EAAE,UAAU,EAAE,MAAa,wBAAwB,CAAC;AAC3D,YAAY,EAAE,UAAU,EAAE,MAAQ,mCAAmC,CAAC;AACtE,YAAY,EAAE,UAAU,EAAE,MAAQ,mCAAmC,CAAC;AACtE,YAAY,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,mCAAmC,CAAC;AAChF,YAAY,EAAE,UAAU,EAAE,MAAQ,yBAAyB,CAAC;AAG5D,OAAO,EAAE,YAAY,EAAE,MAAW,0BAA0B,CAAC;AAC7D,YAAY,EACV,aAAa,EACb,OAAO,EACP,QAAQ,EACR,UAAU,EACV,QAAQ,EACR,WAAW,EACX,aAAa,EACb,YAAY,EACZ,UAAU,EACV,aAAa,EACb,kBAAkB,EAClB,gBAAgB,EAChB,UAAU,EACV,SAAS,GACV,MAAM,sCAAsC,CAAC;AAG9C,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AACvF,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAQ,6BAA6B,CAAC;AAGhE,OAAO,EAAE,OAAO,EAAE,MAAgB,iBAAiB,CAAC;AACpD,YAAY,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAGnE,OAAO,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAClD,YAAY,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAClE,OAAO,EAAE,cAAc,EAAE,aAAa,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAC;AAGxE,OAAO,EAAE,MAAM,EAAE,MAAiB,gBAAgB,CAAC;AACnD,YAAY,EAAE,QAAQ,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAGxE,OAAO,EACL,eAAe,EACf,sBAAsB,EACtB,gBAAgB,EAChB,mBAAmB,EACnB,gBAAgB,GACjB,MAAM,kBAAkB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,MAAe,0BAA0B,CAAC;AAC7D,OAAO,EAAE,WAAW,EAAE,MAAY,yBAAyB,CAAC;AAC5D,YAAY,EAAE,SAAS,EAAE,MAAS,yBAAyB,CAAC;AAC5D,YAAY,EAAE,QAAQ,EAAE,MAAU,qCAAqC,CAAC;AACxE,YAAY,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,oCAAoC,CAAC;AACzE,YAAY,EAAE,QAAQ,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,oCAAoC,CAAC;AAG7F,OAAO,EAAE,UAAU,EAAE,MAAa,8BAA8B,CAAC;AACjE,OAAO,EAAE,QAAQ,EAAE,MAAe,4BAA4B,CAAC;AAC/D,YAAY,EAAE,QAAQ,EAAE,MAAU,4BAA4B,CAAC;AAC/D,YAAY,EAAE,KAAK,EAAE,MAAa,uCAAuC,CAAC;AAC1E,YAAY,EAAE,QAAQ,EAAE,MAAU,uCAAuC,CAAC;AAG1E,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAC5G,YAAY,EAAE,UAAU,EAAE,MAAQ,4BAA4B,CAAC;AAC/D,OAAO,EAAE,OAAO,EAAE,MAAgB,0BAA0B,CAAC;AAG7D,OAAO,EAAE,WAAW,EAAE,MAAY,yBAAyB,CAAC;AAC5D,OAAO,EAAE,WAAW,EAAE,MAAY,yBAAyB,CAAC;AAC5D,OAAO,EAAE,WAAW,EAAE,MAAY,yBAAyB,CAAC;AAC5D,OAAO,EAAE,WAAW,EAAE,MAAY,yBAAyB,CAAC;AAC5D,OAAO,EAAE,WAAW,EAAE,MAAY,yBAAyB,CAAC;AAC5D,OAAO,EAAE,eAAe,EAAE,MAAQ,6BAA6B,CAAC;AAChE,OAAO,EAAE,UAAU,EAAE,MAAa,wBAAwB,CAAC;AAC3D,YAAY,EAAE,UAAU,EAAE,MAAQ,mCAAmC,CAAC;AACtE,YAAY,EAAE,UAAU,EAAE,MAAQ,mCAAmC,CAAC;AACtE,YAAY,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,mCAAmC,CAAC;AAChF,YAAY,EAAE,UAAU,EAAE,MAAQ,yBAAyB,CAAC;AAG5D,OAAO,EAAE,YAAY,EAAE,MAAW,0BAA0B,CAAC;AAC7D,YAAY,EACV,aAAa,EACb,OAAO,EACP,QAAQ,EACR,UAAU,EACV,QAAQ,EACR,WAAW,EACX,aAAa,EACb,YAAY,EACZ,UAAU,EACV,aAAa,EACb,kBAAkB,EAClB,gBAAgB,EAChB,UAAU,EACV,SAAS,GACV,MAAM,sCAAsC,CAAC;AAG9C,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AACvF,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAQ,6BAA6B,CAAC;AAGhE,OAAO,EAAE,OAAO,EAAE,MAAgB,iBAAiB,CAAC;AACpD,YAAY,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAGnE,OAAO,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAClD,YAAY,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAClE,OAAO,EAAE,cAAc,EAAE,aAAa,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAC;AAGxE,OAAO,EAAE,MAAM,EAAE,MAAiB,gBAAgB,CAAC;AACnD,YAAY,EAAE,QAAQ,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAGxE,OAAO,EACL,eAAe,EACf,sBAAsB,EACtB,gBAAgB,EAChB,mBAAmB,EACnB,gBAAgB,GACjB,MAAM,kBAAkB,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "reltype",
3
- "version": "0.1.7",
3
+ "version": "0.1.8",
4
4
  "description": "Type-first relational modeling for PostgreSQL in TypeScript. Fluent query builder with automatic camelCase ↔ snake_case conversion, CRUD, streaming, cursor pagination, and hooks.",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",