@simplysm/orm-common 14.1.2 → 14.1.6

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 (89) hide show
  1. package/dist/db-context.d.ts +11 -10
  2. package/dist/db-context.d.ts.map +1 -1
  3. package/dist/db-context.js +14 -11
  4. package/dist/db-context.js.map +1 -1
  5. package/dist/ddl/initialize.js.map +1 -1
  6. package/dist/ddl/relation-ddl.d.ts +1 -1
  7. package/dist/ddl/relation-ddl.d.ts.map +1 -1
  8. package/dist/ddl/relation-ddl.js.map +1 -1
  9. package/dist/ddl/table-ddl.d.ts +3 -3
  10. package/dist/ddl/table-ddl.d.ts.map +1 -1
  11. package/dist/ddl/table-ddl.js.map +1 -1
  12. package/dist/errors/db-transaction-error.d.ts +4 -5
  13. package/dist/errors/db-transaction-error.d.ts.map +1 -1
  14. package/dist/errors/db-transaction-error.js +5 -6
  15. package/dist/errors/db-transaction-error.js.map +1 -1
  16. package/dist/exec/executable.d.ts +4 -13
  17. package/dist/exec/executable.d.ts.map +1 -1
  18. package/dist/exec/executable.js.map +1 -1
  19. package/dist/exec/queryable.d.ts +11 -9
  20. package/dist/exec/queryable.d.ts.map +1 -1
  21. package/dist/exec/queryable.js +9 -5
  22. package/dist/exec/queryable.js.map +1 -1
  23. package/dist/expr/expr.d.ts +7 -4
  24. package/dist/expr/expr.d.ts.map +1 -1
  25. package/dist/expr/expr.js +5 -2
  26. package/dist/expr/expr.js.map +1 -1
  27. package/dist/models/system-migration.d.ts +1 -1
  28. package/dist/models/system-migration.d.ts.map +1 -1
  29. package/dist/query-builder/base/expr-renderer-base.d.ts +2 -1
  30. package/dist/query-builder/base/expr-renderer-base.d.ts.map +1 -1
  31. package/dist/query-builder/base/expr-renderer-base.js.map +1 -1
  32. package/dist/query-builder/mssql/mssql-expr-renderer.d.ts +2 -2
  33. package/dist/query-builder/mssql/mssql-expr-renderer.d.ts.map +1 -1
  34. package/dist/query-builder/mssql/mssql-expr-renderer.js.map +1 -1
  35. package/dist/query-builder/mysql/mysql-expr-renderer.d.ts +2 -2
  36. package/dist/query-builder/mysql/mysql-expr-renderer.d.ts.map +1 -1
  37. package/dist/query-builder/mysql/mysql-expr-renderer.js.map +1 -1
  38. package/dist/query-builder/postgresql/postgresql-expr-renderer.d.ts +2 -2
  39. package/dist/query-builder/postgresql/postgresql-expr-renderer.d.ts.map +1 -1
  40. package/dist/query-builder/postgresql/postgresql-expr-renderer.js.map +1 -1
  41. package/dist/query-builder/postgresql/postgresql-query-builder.d.ts.map +1 -1
  42. package/dist/query-builder/postgresql/postgresql-query-builder.js.map +1 -1
  43. package/dist/schema/factory/column-builder.d.ts +1 -1
  44. package/dist/schema/factory/column-builder.d.ts.map +1 -1
  45. package/dist/schema/factory/relation-builder.d.ts +55 -49
  46. package/dist/schema/factory/relation-builder.d.ts.map +1 -1
  47. package/dist/schema/factory/relation-builder.js +12 -15
  48. package/dist/schema/factory/relation-builder.js.map +1 -1
  49. package/dist/schema/table-builder.d.ts +35 -18
  50. package/dist/schema/table-builder.d.ts.map +1 -1
  51. package/dist/schema/table-builder.js +32 -15
  52. package/dist/schema/table-builder.js.map +1 -1
  53. package/dist/schema/view-builder.d.ts +28 -24
  54. package/dist/schema/view-builder.d.ts.map +1 -1
  55. package/dist/schema/view-builder.js +18 -14
  56. package/dist/schema/view-builder.js.map +1 -1
  57. package/dist/types/column.d.ts +6 -17
  58. package/dist/types/column.d.ts.map +1 -1
  59. package/dist/types/column.js +3 -19
  60. package/dist/types/column.js.map +1 -1
  61. package/dist/types/db-context-def.d.ts +7 -7
  62. package/dist/types/db-context-def.d.ts.map +1 -1
  63. package/dist/types/query-def.d.ts +1 -1
  64. package/dist/types/query-def.d.ts.map +1 -1
  65. package/dist/utils/result-parser.d.ts.map +1 -1
  66. package/dist/utils/result-parser.js +3 -7
  67. package/dist/utils/result-parser.js.map +1 -1
  68. package/package.json +3 -3
  69. package/src/db-context.ts +23 -20
  70. package/src/ddl/initialize.ts +4 -4
  71. package/src/ddl/relation-ddl.ts +1 -1
  72. package/src/ddl/table-ddl.ts +3 -3
  73. package/src/errors/db-transaction-error.ts +6 -4
  74. package/src/exec/executable.ts +5 -4
  75. package/src/exec/queryable.ts +31 -24
  76. package/src/expr/expr.ts +10 -4
  77. package/src/query-builder/base/expr-renderer-base.ts +2 -1
  78. package/src/query-builder/mssql/mssql-expr-renderer.ts +5 -5
  79. package/src/query-builder/mysql/mysql-expr-renderer.ts +2 -2
  80. package/src/query-builder/postgresql/postgresql-expr-renderer.ts +5 -5
  81. package/src/query-builder/postgresql/postgresql-query-builder.ts +4 -3
  82. package/src/schema/factory/column-builder.ts +3 -3
  83. package/src/schema/factory/relation-builder.ts +350 -346
  84. package/src/schema/table-builder.ts +209 -193
  85. package/src/schema/view-builder.ts +148 -143
  86. package/src/types/column.ts +7 -26
  87. package/src/types/db-context-def.ts +7 -7
  88. package/src/types/query-def.ts +1 -1
  89. package/src/utils/result-parser.ts +11 -19
@@ -10,28 +10,29 @@ import type { ViewBuilder } from "../view-builder";
10
10
  * description 설정은 factory 함수의 opts 파라미터로 전달한다.
11
11
  * 메서드 체이닝(.description())은 TypeScript 순환 참조 시 TS7022를 유발하므로 제거됨.
12
12
  *
13
- * @template TOwner - 소유 Table builder 타입
14
- * @template TTargetFn - 대상 Table builder factory 타입
13
+ * @template TTargetFn - 대상 Table builder factory 타입 (무제약)
14
+ *
15
+ * 대상 타겟을 잡는 제네릭은 **무제약**(`extends () => TableBuilder<...>` 제약 없음)이다.
16
+ * 제약이 있으면 모델 const 형성 중 `() => typeof X` 타겟 화살표를 eager 평가하여
17
+ * TS6 에서 순환 const(TS7022/7024)를 유발하기 때문이다. 대상 해소는 `$inferSelect`
18
+ * 접근 시점에 lazy 하게(`ExtractRelationTarget`) 이루어진다.
15
19
  *
16
20
  * @see {@link ForeignKeyTargetBuilder} 역참조 builder
17
21
  * @see {@link RelationKeyBuilder} DB FK 없는 관계
18
22
  */
19
- export declare class ForeignKeyBuilder<TOwner extends TableBuilder<any, any, any>, TTargetFn extends () => TableBuilder<any, any, any>> {
23
+ export declare class ForeignKeyBuilder<TTargetFn> {
20
24
  readonly meta: {
21
- ownerFn: () => TOwner;
22
25
  columns: string[];
23
26
  targetFn: TTargetFn;
24
27
  description?: string;
25
28
  };
26
29
  /**
27
30
  * @param meta - FK 메타데이터
28
- * @param meta.ownerFn - 소유 Table factory
29
31
  * @param meta.columns - FK column 이름 배열
30
32
  * @param meta.targetFn - 대상 Table factory
31
33
  * @param meta.description - 관계 설명
32
34
  */
33
35
  constructor(meta: {
34
- ownerFn: () => TOwner;
35
36
  columns: string[];
36
37
  targetFn: TTargetFn;
37
38
  description?: string;
@@ -46,12 +47,12 @@ export declare class ForeignKeyBuilder<TOwner extends TableBuilder<any, any, any
46
47
  * description, single 설정은 factory 함수의 opts 파라미터로 전달한다.
47
48
  * 메서드 체이닝(.description(), .single())은 TypeScript 순환 참조 시 TS7022를 유발하므로 제거됨.
48
49
  *
49
- * @template TTargetTableFn - 참조하는 Table builder factory 타입
50
+ * @template TTargetTableFn - 참조하는 Table builder factory 타입 (무제약)
50
51
  * @template TIsSingle - 단일 객체 여부
51
52
  *
52
53
  * @see {@link ForeignKeyBuilder} FK builder
53
54
  */
54
- export declare class ForeignKeyTargetBuilder<TTargetTableFn extends () => TableBuilder<any, any, any>, TIsSingle extends boolean> {
55
+ export declare class ForeignKeyTargetBuilder<TTargetTableFn, TIsSingle> {
55
56
  readonly meta: {
56
57
  targetTableFn: TTargetTableFn;
57
58
  relationName: string;
@@ -80,27 +81,23 @@ export declare class ForeignKeyTargetBuilder<TTargetTableFn extends () => TableB
80
81
  *
81
82
  * description 설정은 factory 함수의 opts 파라미터로 전달한다.
82
83
  *
83
- * @template TOwner - 소유 Table/View builder 타입
84
- * @template TTargetFn - 대상 Table/View builder factory 타입
84
+ * @template TTargetFn - 대상 Table/View builder factory 타입 (무제약)
85
85
  *
86
86
  * @see {@link ForeignKeyBuilder} DB FK 생성 버전
87
87
  */
88
- export declare class RelationKeyBuilder<TOwner extends TableBuilder<any, any, any> | ViewBuilder<any, any, any>, TTargetFn extends () => TableBuilder<any, any, any> | ViewBuilder<any, any, any>> {
88
+ export declare class RelationKeyBuilder<TTargetFn> {
89
89
  readonly meta: {
90
- ownerFn: () => TOwner;
91
90
  columns: string[];
92
91
  targetFn: TTargetFn;
93
92
  description?: string;
94
93
  };
95
94
  /**
96
95
  * @param meta - 관계 메타데이터
97
- * @param meta.ownerFn - 소유 Table/View factory
98
96
  * @param meta.columns - 관계 column 이름 배열
99
97
  * @param meta.targetFn - 대상 Table/View factory
100
98
  * @param meta.description - 관계 설명
101
99
  */
102
100
  constructor(meta: {
103
- ownerFn: () => TOwner;
104
101
  columns: string[];
105
102
  targetFn: TTargetFn;
106
103
  description?: string;
@@ -114,12 +111,12 @@ export declare class RelationKeyBuilder<TOwner extends TableBuilder<any, any, an
114
111
  *
115
112
  * description, single 설정은 factory 함수의 opts 파라미터로 전달한다.
116
113
  *
117
- * @template TTargetTableFn - 참조하는 Table/View builder factory 타입
114
+ * @template TTargetTableFn - 참조하는 Table/View builder factory 타입 (무제약)
118
115
  * @template TIsSingle - 단일 객체 여부
119
116
  *
120
117
  * @see {@link ForeignKeyTargetBuilder} DB FK 생성 버전
121
118
  */
122
- export declare class RelationKeyTargetBuilder<TTargetTableFn extends () => TableBuilder<any, any, any> | ViewBuilder<any, any, any>, TIsSingle extends boolean> {
119
+ export declare class RelationKeyTargetBuilder<TTargetTableFn, TIsSingle> {
123
120
  readonly meta: {
124
121
  targetTableFn: TTargetTableFn;
125
122
  relationName: string;
@@ -143,20 +140,22 @@ export declare class RelationKeyTargetBuilder<TTargetTableFn extends () => Table
143
140
  /**
144
141
  * FK 관계 factory 타입 (table 전용)
145
142
  *
146
- * @template TOwner - 소유 Table builder 타입
143
+ * 컬럼 제약(`TColumnKey extends string`)은 self-contained 하므로 **유지**한다.
144
+ * 대상 타겟을 잡는 제네릭(`TTargetFn`/`TTargetTableFn`)은 **무제약**이다.
145
+ *
147
146
  * @template TColumnKey - Column key 타입
148
147
  */
149
- type RelationFkFactory<TOwner extends TableBuilder<any, any, any>, TColumnKey extends string> = {
148
+ export type RelationFkFactory<TColumnKey extends string> = {
150
149
  /** N:1 FK 관계 정의 (DB FK 생성) */
151
- foreignKey<TTargetFn extends () => TableBuilder<any, any, any>>(columns: TColumnKey[], targetFn: TTargetFn, opts?: {
150
+ foreignKey<TTargetFn>(columns: TColumnKey[], targetFn: TTargetFn, opts?: {
152
151
  description?: string;
153
- }): ForeignKeyBuilder<TOwner, TTargetFn>;
152
+ }): ForeignKeyBuilder<TTargetFn>;
154
153
  /** 1:N FK 역참조 정의 (single: true → 단일 객체) */
155
- foreignKeyTarget<TTargetTableFn extends () => TableBuilder<any, any, any>>(targetTableFn: TTargetTableFn, relationName: string, opts: {
154
+ foreignKeyTarget<TTargetTableFn>(targetTableFn: TTargetTableFn, relationName: string, opts: {
156
155
  single: true;
157
156
  description?: string;
158
157
  }): ForeignKeyTargetBuilder<TTargetTableFn, true>;
159
- foreignKeyTarget<TTargetTableFn extends () => TableBuilder<any, any, any>>(targetTableFn: TTargetTableFn, relationName: string, opts?: {
158
+ foreignKeyTarget<TTargetTableFn>(targetTableFn: TTargetTableFn, relationName: string, opts?: {
160
159
  single?: false;
161
160
  description?: string;
162
161
  }): ForeignKeyTargetBuilder<TTargetTableFn, false>;
@@ -164,68 +163,75 @@ type RelationFkFactory<TOwner extends TableBuilder<any, any, any>, TColumnKey ex
164
163
  /**
165
164
  * 논리적 관계 factory 타입 (table/View 공용)
166
165
  *
167
- * @template TOwner - 소유 Table/View builder 타입
168
166
  * @template TColumnKey - Column key 타입
169
167
  */
170
- type RelationRkFactory<TOwner extends TableBuilder<any, any, any> | ViewBuilder<any, any, any>, TColumnKey extends string> = {
168
+ export type RelationRkFactory<TColumnKey extends string> = {
171
169
  /** N:1 논리적 관계 정의 (DB FK 미생성) */
172
- relationKey<TTargetFn extends () => TableBuilder<any, any, any> | ViewBuilder<any, any, any>>(columns: TColumnKey[], targetFn: TTargetFn, opts?: {
170
+ relationKey<TTargetFn>(columns: TColumnKey[], targetFn: TTargetFn, opts?: {
173
171
  description?: string;
174
- }): RelationKeyBuilder<TOwner, TTargetFn>;
172
+ }): RelationKeyBuilder<TTargetFn>;
175
173
  /** 1:N 논리적 역참조 정의 (single: true → 단일 객체) */
176
- relationKeyTarget<TTargetTableFn extends () => TableBuilder<any, any, any> | ViewBuilder<any, any, any>>(targetTableFn: TTargetTableFn, relationName: string, opts: {
174
+ relationKeyTarget<TTargetTableFn>(targetTableFn: TTargetTableFn, relationName: string, opts: {
177
175
  single: true;
178
176
  description?: string;
179
177
  }): RelationKeyTargetBuilder<TTargetTableFn, true>;
180
- relationKeyTarget<TTargetTableFn extends () => TableBuilder<any, any, any> | ViewBuilder<any, any, any>>(targetTableFn: TTargetTableFn, relationName: string, opts?: {
178
+ relationKeyTarget<TTargetTableFn>(targetTableFn: TTargetTableFn, relationName: string, opts?: {
181
179
  single?: false;
182
180
  description?: string;
183
181
  }): RelationKeyTargetBuilder<TTargetTableFn, false>;
184
182
  };
183
+ /**
184
+ * Table용 관계 factory (FK + RelationKey 모두 사용 가능)
185
+ */
186
+ export type TableRelationFactory<TColumnKey extends string> = RelationFkFactory<TColumnKey> & RelationRkFactory<TColumnKey>;
187
+ /**
188
+ * View용 관계 factory (RelationKey만 사용 가능)
189
+ */
190
+ export type ViewRelationFactory<TColumnKey extends string> = RelationRkFactory<TColumnKey>;
185
191
  /**
186
192
  * 관계 builder factory 생성
187
193
  *
188
- * TableBuilder.relations() ViewBuilder.relations()에서 사용
189
- * Table은 FK + RelationKey 모두 사용 가능, View는 RelationKey만 사용 가능
194
+ * `TableBuilder.relations(fn)` / `ViewBuilder.relations(fn)` 의 콜백 인자로 전달된다.
195
+ * Table은 FK + RelationKey 모두 사용 가능, View는 RelationKey만 사용 가능.
190
196
  *
191
- * @template TOwner - 소유 Table/View builder 타입
192
197
  * @template TColumnKey - Column key 타입
193
- * @param ownerFn - 소유 Table/View factory 함수
194
198
  * @returns 관계 builder factory
195
199
  */
196
- export declare function createRelationFactory<TOwner extends TableBuilder<any, any, any> | ViewBuilder<any, any, any>, TColumnKey extends string>(ownerFn: () => TOwner): TOwner extends TableBuilder<any, any, any> ? RelationFkFactory<TOwner, TColumnKey> & RelationRkFactory<TOwner, TColumnKey> : RelationRkFactory<TOwner, TColumnKey>;
200
+ export declare function createRelationFactory<TColumnKey extends string = string>(): TableRelationFactory<TColumnKey>;
197
201
  /**
198
202
  * 관계 builder 레코드 타입
199
203
  *
200
- * TableBuilder.relations() ViewBuilder.relations() 반환 타입
204
+ * `TableBuilder.relations(fn)` / `ViewBuilder.relations(fn)` 콜백의 반환 타입.
201
205
  */
202
- export type RelationBuilderRecord = Record<string, ForeignKeyBuilder<any, any> | ForeignKeyTargetBuilder<any, any> | RelationKeyBuilder<any, any> | RelationKeyTargetBuilder<any, any>>;
206
+ export type RelationBuilderRecord = Record<string, ForeignKeyBuilder<any> | ForeignKeyTargetBuilder<any, any> | RelationKeyBuilder<any> | RelationKeyTargetBuilder<any, any>>;
203
207
  /**
204
- * FK/RelationKey에서 대상 타입 추출 (단일 객체)
208
+ * FK/RelationKey에서 대상 타입 추출 (단일 객체, N:1)
205
209
  *
206
- * N:1 관계의 대상 타입
210
+ * 대상이 Table이면 컬럼 + 심층 관계, View면 데이터 + 심층 관계를 반환한다.
207
211
  *
208
- * @template T - FK 또는 RelationKey builder 타입
212
+ * @template TRelation - FK 또는 RelationKey builder 타입
213
+ * @template TVisited - 순환 방지를 위한 방문 테이블/뷰명 집합
209
214
  */
210
- export type ExtractRelationTarget<TRelation, TVisited extends string = never> = TRelation extends ForeignKeyBuilder<any, infer TTargetFn> | RelationKeyBuilder<any, infer TTargetFn> ? ReturnType<TTargetFn> extends TableBuilder<infer TName, infer TCols, infer TRels> ? TName extends TVisited ? InferColumns<TCols> : InferColumns<TCols> & InferDeepRelations<TRels, TVisited | TName> : ReturnType<TTargetFn> extends ViewBuilder<any, infer TData, infer TRels> ? TData & InferDeepRelations<TRels, TVisited> : never : never;
215
+ export type ExtractRelationTarget<TRelation, TVisited extends string = never> = TRelation extends ForeignKeyBuilder<infer TTargetFn> | RelationKeyBuilder<infer TTargetFn> ? TTargetFn extends () => infer TTarget ? TTarget extends TableBuilder<infer TName, infer TCols, infer TRels> ? TName extends TVisited ? InferColumns<TCols> : InferColumns<TCols> & InferDeepRelations<TRels, TVisited | TName> : TTarget extends ViewBuilder<any, infer TVName, infer TData, infer TVRels> ? TVName extends TVisited ? TData : TData & InferDeepRelations<TVRels, TVisited | TVName> : never : never : never;
211
216
  /**
212
- * FKTarget/RelationKeyTarget에서 대상 타입 추출 (배열 또는 단일 객체)
217
+ * FKTarget/RelationKeyTarget에서 대상 타입 추출 (배열 또는 단일 객체, 1:N)
213
218
  *
214
- * 1:N 관계의 대상 타입 (opts.single: true 시 단일 객체)
215
- * TTargetTableFn: 순환 참조 방지를 위한 지연 평가용 () => Post 형태
219
+ * opts.single: true 시 단일 객체, 아니면 배열.
216
220
  *
217
- * @template T - FKTarget 또는 RelationKeyTarget builder 타입
221
+ * @template TRelation - FKTarget 또는 RelationKeyTarget builder 타입
222
+ * @template TVisited - 순환 방지를 위한 방문 테이블/뷰명 집합
218
223
  */
219
- export type ExtractRelationTargetResult<TRelation, TVisited extends string = never> = TRelation extends ForeignKeyTargetBuilder<infer TTargetTableFn, infer TIsSingle> | RelationKeyTargetBuilder<infer TTargetTableFn, infer TIsSingle> ? ReturnType<TTargetTableFn> extends TableBuilder<infer TName, infer TCols, infer TRels> ? TName extends TVisited ? TIsSingle extends true ? InferColumns<TCols> : InferColumns<TCols>[] : TIsSingle extends true ? InferColumns<TCols> & InferDeepRelations<TRels, TVisited | TName> : (InferColumns<TCols> & InferDeepRelations<TRels, TVisited | TName>)[] : ReturnType<TTargetTableFn> extends ViewBuilder<any, infer TData, infer TRels> ? TIsSingle extends true ? TData & InferDeepRelations<TRels, TVisited> : (TData & InferDeepRelations<TRels, TVisited>)[] : never : never;
224
+ export type ExtractRelationTargetResult<TRelation, TVisited extends string = never> = TRelation extends ForeignKeyTargetBuilder<infer TTargetTableFn, infer TIsSingle> | RelationKeyTargetBuilder<infer TTargetTableFn, infer TIsSingle> ? TTargetTableFn extends () => infer TTarget ? TTarget extends TableBuilder<infer TName, infer TCols, infer TRels> ? TName extends TVisited ? TIsSingle extends true ? InferColumns<TCols> : InferColumns<TCols>[] : TIsSingle extends true ? InferColumns<TCols> & InferDeepRelations<TRels, TVisited | TName> : (InferColumns<TCols> & InferDeepRelations<TRels, TVisited | TName>)[] : TTarget extends ViewBuilder<any, infer TVName, infer TData, infer TVRels> ? TVName extends TVisited ? TIsSingle extends true ? TData : TData[] : TIsSingle extends true ? TData & InferDeepRelations<TVRels, TVisited | TVName> : (TData & InferDeepRelations<TVRels, TVisited | TVName>)[] : never : never : never;
220
225
  /**
221
- * 관계 정의에서 심층 관계 타입 추론
226
+ * 관계 레코드에서 심층 관계 타입 추론
222
227
  *
223
- * include() 없이 접근 시 undefined가 되도록 모든 관계를 optional로 설정
228
+ * include() 없이 접근 시 undefined가 되도록 모든 관계를 optional로 설정.
229
+ * 입력 제약 없음(무제약) — 관계가 없는(`{}`) 테이블도 안전하게 빈 객체로 해소된다.
224
230
  *
225
- * @template TRelations - 관계 builder 레코드 타입
231
+ * @template TRelations - 관계 builder 레코드 타입 (무제약)
232
+ * @template TVisited - 순환 방지를 위한 방문 테이블/뷰명 집합
226
233
  */
227
- export type InferDeepRelations<TRelations extends RelationBuilderRecord, TVisited extends string = never> = {
234
+ export type InferDeepRelations<TRelations, TVisited extends string = never> = {
228
235
  [K in keyof TRelations]?: ExtractRelationTarget<TRelations[K], TVisited> | ExtractRelationTargetResult<TRelations[K], TVisited>;
229
236
  };
230
- export {};
231
237
  //# sourceMappingURL=relation-builder.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"relation-builder.d.ts","sourceRoot":"","sources":["../../../src/schema/factory/relation-builder.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"relation-builder.d.ts","sourceRoot":"","sources":["../../../src/schema/factory/relation-builder.ts"],"names":[],"mappings":"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"}
@@ -11,8 +11,12 @@ import {} from "./column-builder.js";
11
11
  * description 설정은 factory 함수의 opts 파라미터로 전달한다.
12
12
  * 메서드 체이닝(.description())은 TypeScript 순환 참조 시 TS7022를 유발하므로 제거됨.
13
13
  *
14
- * @template TOwner - 소유 Table builder 타입
15
- * @template TTargetFn - 대상 Table builder factory 타입
14
+ * @template TTargetFn - 대상 Table builder factory 타입 (무제약)
15
+ *
16
+ * 대상 타겟을 잡는 제네릭은 **무제약**(`extends () => TableBuilder<...>` 제약 없음)이다.
17
+ * 제약이 있으면 모델 const 형성 중 `() => typeof X` 타겟 화살표를 eager 평가하여
18
+ * TS6 에서 순환 const(TS7022/7024)를 유발하기 때문이다. 대상 해소는 `$inferSelect`
19
+ * 접근 시점에 lazy 하게(`ExtractRelationTarget`) 이루어진다.
16
20
  *
17
21
  * @see {@link ForeignKeyTargetBuilder} 역참조 builder
18
22
  * @see {@link RelationKeyBuilder} DB FK 없는 관계
@@ -21,7 +25,6 @@ export class ForeignKeyBuilder {
21
25
  meta;
22
26
  /**
23
27
  * @param meta - FK 메타데이터
24
- * @param meta.ownerFn - 소유 Table factory
25
28
  * @param meta.columns - FK column 이름 배열
26
29
  * @param meta.targetFn - 대상 Table factory
27
30
  * @param meta.description - 관계 설명
@@ -39,7 +42,7 @@ export class ForeignKeyBuilder {
39
42
  * description, single 설정은 factory 함수의 opts 파라미터로 전달한다.
40
43
  * 메서드 체이닝(.description(), .single())은 TypeScript 순환 참조 시 TS7022를 유발하므로 제거됨.
41
44
  *
42
- * @template TTargetTableFn - 참조하는 Table builder factory 타입
45
+ * @template TTargetTableFn - 참조하는 Table builder factory 타입 (무제약)
43
46
  * @template TIsSingle - 단일 객체 여부
44
47
  *
45
48
  * @see {@link ForeignKeyBuilder} FK builder
@@ -68,8 +71,7 @@ export class ForeignKeyTargetBuilder {
68
71
  *
69
72
  * description 설정은 factory 함수의 opts 파라미터로 전달한다.
70
73
  *
71
- * @template TOwner - 소유 Table/View builder 타입
72
- * @template TTargetFn - 대상 Table/View builder factory 타입
74
+ * @template TTargetFn - 대상 Table/View builder factory 타입 (무제약)
73
75
  *
74
76
  * @see {@link ForeignKeyBuilder} DB FK 생성 버전
75
77
  */
@@ -77,7 +79,6 @@ export class RelationKeyBuilder {
77
79
  meta;
78
80
  /**
79
81
  * @param meta - 관계 메타데이터
80
- * @param meta.ownerFn - 소유 Table/View factory
81
82
  * @param meta.columns - 관계 column 이름 배열
82
83
  * @param meta.targetFn - 대상 Table/View factory
83
84
  * @param meta.description - 관계 설명
@@ -94,7 +95,7 @@ export class RelationKeyBuilder {
94
95
  *
95
96
  * description, single 설정은 factory 함수의 opts 파라미터로 전달한다.
96
97
  *
97
- * @template TTargetTableFn - 참조하는 Table/View builder factory 타입
98
+ * @template TTargetTableFn - 참조하는 Table/View builder factory 타입 (무제약)
98
99
  * @template TIsSingle - 단일 객체 여부
99
100
  *
100
101
  * @see {@link ForeignKeyTargetBuilder} DB FK 생성 버전
@@ -115,19 +116,16 @@ export class RelationKeyTargetBuilder {
115
116
  /**
116
117
  * 관계 builder factory 생성
117
118
  *
118
- * TableBuilder.relations() ViewBuilder.relations()에서 사용
119
- * Table은 FK + RelationKey 모두 사용 가능, View는 RelationKey만 사용 가능
119
+ * `TableBuilder.relations(fn)` / `ViewBuilder.relations(fn)` 의 콜백 인자로 전달된다.
120
+ * Table은 FK + RelationKey 모두 사용 가능, View는 RelationKey만 사용 가능.
120
121
  *
121
- * @template TOwner - 소유 Table/View builder 타입
122
122
  * @template TColumnKey - Column key 타입
123
- * @param ownerFn - 소유 Table/View factory 함수
124
123
  * @returns 관계 builder factory
125
124
  */
126
- export function createRelationFactory(ownerFn) {
125
+ export function createRelationFactory() {
127
126
  return {
128
127
  foreignKey(columns, targetFn, opts) {
129
128
  return new ForeignKeyBuilder({
130
- ownerFn: ownerFn,
131
129
  columns,
132
130
  targetFn,
133
131
  description: opts?.description,
@@ -143,7 +141,6 @@ export function createRelationFactory(ownerFn) {
143
141
  },
144
142
  relationKey(columns, targetFn, opts) {
145
143
  return new RelationKeyBuilder({
146
- ownerFn: ownerFn,
147
144
  columns,
148
145
  targetFn,
149
146
  description: opts?.description,
@@ -1 +1 @@
1
- {"version":3,"file":"relation-builder.js","sourceRoot":"","sources":["../../../src/schema/factory/relation-builder.ts"],"names":[],"mappings":"AAAA,OAAO,EAAqB,MAAM,kBAAkB,CAAC;AAIrD,+CAA+C;AAC/C,oBAAoB;AACpB,+CAA+C;AAE/C;;;;;;;;;;;;;;GAcG;AACH,MAAM,OAAO,iBAAiB;IAYjB;IARX;;;;;;OAMG;IACH,YACW,IAKR;QALQ,SAAI,GAAJ,IAAI,CAKZ;IACA,CAAC;CACL;AAED;;;;;;;;;;;;;GAaG;AACH,MAAM,OAAO,uBAAuB;IAYvB;IARX;;;;;;OAMG;IACH,YACW,IAKR;QALQ,SAAI,GAAJ,IAAI,CAKZ;IACA,CAAC;CACL;AAED,+CAA+C;AAC/C,iDAAiD;AACjD,+CAA+C;AAE/C;;;;;;;;;;;;GAYG;AACH,MAAM,OAAO,kBAAkB;IAYlB;IARX;;;;;;OAMG;IACH,YACW,IAKR;QALQ,SAAI,GAAJ,IAAI,CAKZ;IACA,CAAC;CACL;AAED;;;;;;;;;;;;GAYG;AACH,MAAM,OAAO,wBAAwB;IAYxB;IARX;;;;;;OAMG;IACH,YACW,IAKR;QALQ,SAAI,GAAJ,IAAI,CAKZ;IACA,CAAC;CACL;AA6DD;;;;;;;;;;GAUG;AACH,MAAM,UAAU,qBAAqB,CAInC,OAAqB;IAIrB,OAAO;QACL,UAAU,CAAC,OAAO,EAAE,QAAQ,EAAE,IAAK;YACjC,OAAO,IAAI,iBAAiB,CAAC;gBAC3B,OAAO,EAAE,OAA4C;gBACrD,OAAO;gBACP,QAAQ;gBACR,WAAW,EAAE,IAAI,EAAE,WAAW;aAC/B,CAAC,CAAC;QACL,CAAC;QACD,gBAAgB,CAAC,aAAa,EAAE,YAAY,EAAE,IAAK;YACjD,OAAO,IAAI,uBAAuB,CAAC;gBACjC,aAAa;gBACb,YAAY;gBACZ,WAAW,EAAE,IAAI,EAAE,WAAW;gBAC9B,QAAQ,EAAE,IAAI,EAAE,MAAM;aACvB,CAAC,CAAC;QACL,CAAC;QACD,WAAW,CAAC,OAAO,EAAE,QAAQ,EAAE,IAAK;YAClC,OAAO,IAAI,kBAAkB,CAAC;gBAC5B,OAAO,EAAE,OAAO;gBAChB,OAAO;gBACP,QAAQ;gBACR,WAAW,EAAE,IAAI,EAAE,WAAW;aAC/B,CAAC,CAAC;QACL,CAAC;QACD,iBAAiB,CAAC,aAAa,EAAE,YAAY,EAAE,IAAK;YAClD,OAAO,IAAI,wBAAwB,CAAC;gBAClC,aAAa;gBACb,YAAY;gBACZ,WAAW,EAAE,IAAI,EAAE,WAAW;gBAC9B,QAAQ,EAAE,IAAI,EAAE,MAAM;aACvB,CAAC,CAAC;QACL,CAAC;KAGsC,CAAC;AAC5C,CAAC"}
1
+ {"version":3,"file":"relation-builder.js","sourceRoot":"","sources":["../../../src/schema/factory/relation-builder.ts"],"names":[],"mappings":"AAAA,OAAO,EAAqB,MAAM,kBAAkB,CAAC;AAIrD,+CAA+C;AAC/C,oBAAoB;AACpB,+CAA+C;AAE/C;;;;;;;;;;;;;;;;;;GAkBG;AACH,MAAM,OAAO,iBAAiB;IAQjB;IAPX;;;;;OAKG;IACH,YACW,IAIR;QAJQ,SAAI,GAAJ,IAAI,CAIZ;IACA,CAAC;CACL;AAED;;;;;;;;;;;;;GAaG;AACH,MAAM,OAAO,uBAAuB;IASvB;IARX;;;;;;OAMG;IACH,YACW,IAKR;QALQ,SAAI,GAAJ,IAAI,CAKZ;IACA,CAAC;CACL;AAED,+CAA+C;AAC/C,iDAAiD;AACjD,+CAA+C;AAE/C;;;;;;;;;;;GAWG;AACH,MAAM,OAAO,kBAAkB;IAQlB;IAPX;;;;;OAKG;IACH,YACW,IAIR;QAJQ,SAAI,GAAJ,IAAI,CAIZ;IACA,CAAC;CACL;AAED;;;;;;;;;;;;GAYG;AACH,MAAM,OAAO,wBAAwB;IASxB;IARX;;;;;;OAMG;IACH,YACW,IAKR;QALQ,SAAI,GAAJ,IAAI,CAKZ;IACA,CAAC;CACL;AAsED;;;;;;;;GAQG;AACH,MAAM,UAAU,qBAAqB;IACnC,OAAO;QACL,UAAU,CAAC,OAAO,EAAE,QAAQ,EAAE,IAAK;YACjC,OAAO,IAAI,iBAAiB,CAAC;gBAC3B,OAAO;gBACP,QAAQ;gBACR,WAAW,EAAE,IAAI,EAAE,WAAW;aAC/B,CAAC,CAAC;QACL,CAAC;QACD,gBAAgB,CAAC,aAAa,EAAE,YAAY,EAAE,IAAK;YACjD,OAAO,IAAI,uBAAuB,CAAC;gBACjC,aAAa;gBACb,YAAY;gBACZ,WAAW,EAAE,IAAI,EAAE,WAAW;gBAC9B,QAAQ,EAAE,IAAI,EAAE,MAAM;aACvB,CAAC,CAAC;QACL,CAAC;QACD,WAAW,CAAC,OAAO,EAAE,QAAQ,EAAE,IAAK;YAClC,OAAO,IAAI,kBAAkB,CAAC;gBAC5B,OAAO;gBACP,QAAQ;gBACR,WAAW,EAAE,IAAI,EAAE,WAAW;aAC/B,CAAC,CAAC;QACL,CAAC;QACD,iBAAiB,CAAC,aAAa,EAAE,YAAY,EAAE,IAAK;YAClD,OAAO,IAAI,wBAAwB,CAAC;gBAClC,aAAa;gBACb,YAAY;gBACZ,WAAW,EAAE,IAAI,EAAE,WAAW;gBAC9B,QAAQ,EAAE,IAAI,EAAE,MAAM;aACvB,CAAC,CAAC;QACL,CAAC;KACkC,CAAC;AACxC,CAAC"}
@@ -1,19 +1,25 @@
1
1
  import { type ColumnBuilderRecord, createColumnFactory, type InferColumns, type InferInsertColumns, type InferUpdateColumns } from "./factory/column-builder";
2
2
  import { createIndexFactory, type IndexBuilder } from "./factory/index-builder";
3
- import { createRelationFactory, type InferDeepRelations, type RelationBuilderRecord } from "./factory/relation-builder";
3
+ import { type InferDeepRelations, type TableRelationFactory } from "./factory/relation-builder";
4
4
  /**
5
5
  * Database Table 정의 builder
6
6
  *
7
7
  * Fluent API로 Table column, PK, index, 관계를 정의
8
8
  * DbContext의 queryable()과 함께 사용하여 타입 안전한 query 구성
9
9
  *
10
+ * 관계는 `.relations((r) => ({ ... }))` 메서드 체이닝으로 정의한다.
11
+ * 관계를 잡는 3번째 제네릭 `TRelations` 는 **무제약**이라, `() => typeof X` 타겟
12
+ * 화살표가 const 형성 중 eager 평가되지 않는다(TS6 순환 회피). 관계 대상 해소는
13
+ * `$inferSelect` 접근 시점에 lazy 하게 이루어진다.
14
+ *
15
+ * @template TName - Table 이름
10
16
  * @template TColumns - Column 정의 레코드 타입
11
- * @template TRelations - 관계 정의 레코드 타입
17
+ * @template TRelations - 관계 정의 레코드 타입 (무제약, 기본값 `{}`)
12
18
  *
13
19
  * @see {@link Table} factory 함수
14
20
  * @see {@link queryable} Queryable 생성
15
21
  */
16
- export declare class TableBuilder<TName extends string, TColumns extends ColumnBuilderRecord, TRelations extends RelationBuilderRecord> {
22
+ export declare class TableBuilder<TName extends string, TColumns extends ColumnBuilderRecord, TRelations = {}> {
17
23
  readonly meta: {
18
24
  name: TName;
19
25
  description?: string;
@@ -24,11 +30,12 @@ export declare class TableBuilder<TName extends string, TColumns extends ColumnB
24
30
  relations?: TRelations;
25
31
  indexes?: IndexBuilder<(keyof TColumns & string)[]>[];
26
32
  };
27
- /** Column 정의 (타입 추론용) */
28
- readonly $columns: TColumns;
29
- /** 관계 정의 (타입 추론용) */
30
- readonly $relations: TRelations;
31
- /** 전체 타입 추론 (column + 관계) — 순환 감지: 같은 테이블 재방문 시 끊김 */
33
+ /**
34
+ * 전체 타입 추론 (column + 관계).
35
+ *
36
+ * 관계는 `TRelations` 를 구조적으로 lazy walk 하여 다단계로 해소된다.
37
+ * (순환 감지: 같은 테이블 재방문 시 컬럼만 반환하여 끊김)
38
+ */
32
39
  readonly $inferSelect: InferColumns<TColumns> & InferDeepRelations<TRelations>;
33
40
  /** Column 전용 타입 추론 */
34
41
  readonly $inferColumns: InferColumns<TColumns>;
@@ -44,7 +51,7 @@ export declare class TableBuilder<TName extends string, TColumns extends ColumnB
44
51
  * @param meta.schema - Schema 이름 (MSSQL/PostgreSQL)
45
52
  * @param meta.columns - Column 정의
46
53
  * @param meta.primaryKey - PK column 배열
47
- * @param meta.relations - 관계 정의
54
+ * @param meta.relations - 관계 정의 (런타임: `.relations(fn)` 호출 시 부착됨)
48
55
  * @param meta.indexes - Index 정의
49
56
  */
50
57
  constructor(meta: {
@@ -105,18 +112,28 @@ export declare class TableBuilder<TName extends string, TColumns extends ColumnB
105
112
  */
106
113
  indexes(fn: (i: ReturnType<typeof createIndexFactory<keyof TColumns & string>>) => IndexBuilder<string[]>[]): TableBuilder<TName, TColumns, TRelations>;
107
114
  /**
108
- * 관계 정의
115
+ * 관계 정의 (FK / FKTarget / RelationKey / RelationKeyTarget)
109
116
  *
110
- * FK, 역참조 Table 관계를 설정
117
+ * 관계 타입 `T` **무제약**으로 추론되며, 내부적으로 런타임 결과를
118
+ * `meta.relations` 에 저장한다(`as any`). 무제약이므로 콜백 안의 `() => typeof X`
119
+ * 타겟 화살표가 const 형성 중 eager 평가되지 않아 TS6 순환을 회피한다.
111
120
  *
112
- * @template T - 관계 정의 타입
113
- * @param fn - 관계 factory를 받아 관계 정의를 반환하는 함수
114
- * @returns TableBuilder 인스턴스
121
+ * @example
122
+ * ```ts
123
+ * export const User = Table("User")
124
+ * .columns((c) => ({ id: c.bigint().autoIncrement(), companyId: c.bigint().nullable() }))
125
+ * .primaryKey("id")
126
+ * .relations((r) => ({
127
+ * company: r.foreignKey(["companyId"], () => Company),
128
+ * posts: r.foreignKeyTarget(() => Post, "user"),
129
+ * }));
130
+ * ```
115
131
  *
116
- * @see {@link ForeignKeyBuilder} FK builder
117
- * @see {@link ForeignKeyTargetBuilder} FK reverse-reference builder
132
+ * @template T - 관계 정의 레코드 타입 (무제약)
133
+ * @param fn - 관계 factory를 받아 관계 정의를 반환하는 함수
134
+ * @returns 관계가 부착된 새 TableBuilder 인스턴스
118
135
  */
119
- relations<T extends RelationBuilderRecord>(fn: (r: ReturnType<typeof createRelationFactory<this, keyof TColumns & string>>) => T): TableBuilder<TName, TColumns, T>;
136
+ relations<T>(fn: (r: TableRelationFactory<keyof TColumns & string>) => T): TableBuilder<TName, TColumns, T>;
120
137
  }
121
138
  /**
122
139
  * Table builder factory 함수
@@ -128,5 +145,5 @@ export declare class TableBuilder<TName extends string, TColumns extends ColumnB
128
145
  *
129
146
  * @see {@link TableBuilder} builder 클래스
130
147
  */
131
- export declare function Table<TName extends string>(name: TName): TableBuilder<TName, ColumnBuilderRecord, RelationBuilderRecord>;
148
+ export declare function Table<TName extends string>(name: TName): TableBuilder<TName, ColumnBuilderRecord, {}>;
132
149
  //# sourceMappingURL=table-builder.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"table-builder.d.ts","sourceRoot":"","sources":["../../src/schema/table-builder.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"table-builder.d.ts","sourceRoot":"","sources":["../../src/schema/table-builder.ts"],"names":[],"mappings":"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"}
@@ -10,19 +10,26 @@ import { createRelationFactory, } from "./factory/relation-builder.js";
10
10
  * Fluent API로 Table column, PK, index, 관계를 정의
11
11
  * DbContext의 queryable()과 함께 사용하여 타입 안전한 query 구성
12
12
  *
13
+ * 관계는 `.relations((r) => ({ ... }))` 메서드 체이닝으로 정의한다.
14
+ * 관계를 잡는 3번째 제네릭 `TRelations` 는 **무제약**이라, `() => typeof X` 타겟
15
+ * 화살표가 const 형성 중 eager 평가되지 않는다(TS6 순환 회피). 관계 대상 해소는
16
+ * `$inferSelect` 접근 시점에 lazy 하게 이루어진다.
17
+ *
18
+ * @template TName - Table 이름
13
19
  * @template TColumns - Column 정의 레코드 타입
14
- * @template TRelations - 관계 정의 레코드 타입
20
+ * @template TRelations - 관계 정의 레코드 타입 (무제약, 기본값 `{}`)
15
21
  *
16
22
  * @see {@link Table} factory 함수
17
23
  * @see {@link queryable} Queryable 생성
18
24
  */
19
25
  export class TableBuilder {
20
26
  meta;
21
- /** Column 정의 (타입 추론용) */
22
- $columns;
23
- /** 관계 정의 (타입 추론용) */
24
- $relations;
25
- /** 전체 타입 추론 (column + 관계) — 순환 감지: 같은 테이블 재방문 시 끊김 */
27
+ /**
28
+ * 전체 타입 추론 (column + 관계).
29
+ *
30
+ * 관계는 `TRelations` 를 구조적으로 lazy walk 하여 다단계로 해소된다.
31
+ * (순환 감지: 같은 테이블 재방문 시 컬럼만 반환하여 끊김)
32
+ */
26
33
  $inferSelect;
27
34
  /** Column 전용 타입 추론 */
28
35
  $inferColumns;
@@ -38,7 +45,7 @@ export class TableBuilder {
38
45
  * @param meta.schema - Schema 이름 (MSSQL/PostgreSQL)
39
46
  * @param meta.columns - Column 정의
40
47
  * @param meta.primaryKey - PK column 배열
41
- * @param meta.relations - 관계 정의
48
+ * @param meta.relations - 관계 정의 (런타임: `.relations(fn)` 호출 시 부착됨)
42
49
  * @param meta.indexes - Index 정의
43
50
  */
44
51
  constructor(meta) {
@@ -113,21 +120,31 @@ export class TableBuilder {
113
120
  });
114
121
  }
115
122
  /**
116
- * 관계 정의
123
+ * 관계 정의 (FK / FKTarget / RelationKey / RelationKeyTarget)
117
124
  *
118
- * FK, 역참조 Table 관계를 설정
125
+ * 관계 타입 `T` **무제약**으로 추론되며, 내부적으로 런타임 결과를
126
+ * `meta.relations` 에 저장한다(`as any`). 무제약이므로 콜백 안의 `() => typeof X`
127
+ * 타겟 화살표가 const 형성 중 eager 평가되지 않아 TS6 순환을 회피한다.
119
128
  *
120
- * @template T - 관계 정의 타입
121
- * @param fn - 관계 factory를 받아 관계 정의를 반환하는 함수
122
- * @returns TableBuilder 인스턴스
129
+ * @example
130
+ * ```ts
131
+ * export const User = Table("User")
132
+ * .columns((c) => ({ id: c.bigint().autoIncrement(), companyId: c.bigint().nullable() }))
133
+ * .primaryKey("id")
134
+ * .relations((r) => ({
135
+ * company: r.foreignKey(["companyId"], () => Company),
136
+ * posts: r.foreignKeyTarget(() => Post, "user"),
137
+ * }));
138
+ * ```
123
139
  *
124
- * @see {@link ForeignKeyBuilder} FK builder
125
- * @see {@link ForeignKeyTargetBuilder} FK reverse-reference builder
140
+ * @template T - 관계 정의 레코드 타입 (무제약)
141
+ * @param fn - 관계 factory를 받아 관계 정의를 반환하는 함수
142
+ * @returns 관계가 부착된 새 TableBuilder 인스턴스
126
143
  */
127
144
  relations(fn) {
128
145
  return new TableBuilder({
129
146
  ...this.meta,
130
- relations: fn(createRelationFactory(() => this)),
147
+ relations: fn(createRelationFactory()),
131
148
  });
132
149
  }
133
150
  }
@@ -1 +1 @@
1
- {"version":3,"file":"table-builder.js","sourceRoot":"","sources":["../../src/schema/table-builder.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,mBAAmB,GAIpB,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAE,kBAAkB,EAAqB,MAAM,yBAAyB,CAAC;AAChF,OAAO,EACL,qBAAqB,GAGtB,MAAM,4BAA4B,CAAC;AAEpC,+CAA+C;AAC/C,eAAe;AACf,+CAA+C;AAE/C;;;;;;;;;;;GAWG;AACH,MAAM,OAAO,YAAY;IA+BZ;IA1BX,yBAAyB;IAChB,QAAQ,CAAY;IAC7B,qBAAqB;IACZ,UAAU,CAAc;IAEjC,sDAAsD;IAC7C,YAAY,CAA2D;IAChF,sBAAsB;IACb,aAAa,CAA0B;IAChD,kEAAkE;IACzD,YAAY,CAAgC;IACrD,oCAAoC;IAC3B,YAAY,CAAgC;IAErD;;;;;;;;;;OAUG;IACH,YACW,IAUR;QAVQ,SAAI,GAAJ,IAAI,CAUZ;IACA,CAAC;IAEJ;;;;;OAKG;IACH,WAAW,CAAC,IAAY;QACtB,OAAO,IAAI,YAAY,CAAC,EAAE,GAAG,IAAI,CAAC,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC,CAAC;IAC/D,CAAC;IAED;;;;;OAKG;IACH,QAAQ,CAAC,EAAU;QACjB,OAAO,IAAI,YAAY,CAAC,EAAE,GAAG,IAAI,CAAC,IAAI,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC,CAAC;IAC1D,CAAC;IAED;;;;;;;OAOG;IACH,MAAM,CAAC,MAAc;QACnB,OAAO,IAAI,YAAY,CAAC,EAAE,GAAG,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC;IACpD,CAAC;IAED;;;;;;;;OAQG;IACH,OAAO,CACL,EAAiE;QAEjE,OAAO,IAAI,YAAY,CAAoC;YACzD,GAAG,IAAI,CAAC,IAAI;YACZ,OAAO,EAAE,EAAE,CAAC,mBAAmB,EAAE,CAAC;SACnC,CAAC,CAAC;IACL,CAAC;IAED;;;;;OAKG;IACH,UAAU,CAAC,GAAG,OAAoC;QAChD,OAAO,IAAI,YAAY,CAAC;YACtB,GAAG,IAAI,CAAC,IAAI;YACZ,UAAU,EAAE,OAAO;SACpB,CAAC,CAAC;IACL,CAAC;IAED;;;;;OAKG;IACH,OAAO,CACL,EAE6B;QAE7B,OAAO,IAAI,YAAY,CAAC;YACtB,GAAG,IAAI,CAAC,IAAI;YACZ,OAAO,EAAE,EAAE,CAAC,kBAAkB,EAA2B,CAAC;SAC3D,CAAC,CAAC;IACL,CAAC;IAED;;;;;;;;;;;OAWG;IACH,SAAS,CACP,EAAqF;QAErF,OAAO,IAAI,YAAY,CAAC;YACtB,GAAG,IAAI,CAAC,IAAI;YACZ,SAAS,EAAE,EAAE,CAAC,qBAAqB,CAAgC,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC;SAChF,CAAC,CAAC;IACL,CAAC;CACF;AAED,+CAA+C;AAC/C,WAAW;AACX,+CAA+C;AAE/C;;;;;;;;;GASG;AACH,MAAM,UAAU,KAAK,CAAuB,IAAW;IACrD,OAAO,IAAI,YAAY,CAAoD,EAAE,IAAI,EAAE,CAAC,CAAC;AACvF,CAAC"}
1
+ {"version":3,"file":"table-builder.js","sourceRoot":"","sources":["../../src/schema/table-builder.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,mBAAmB,GAIpB,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAE,kBAAkB,EAAqB,MAAM,yBAAyB,CAAC;AAChF,OAAO,EACL,qBAAqB,GAGtB,MAAM,4BAA4B,CAAC;AAEpC,+CAA+C;AAC/C,eAAe;AACf,+CAA+C;AAE/C;;;;;;;;;;;;;;;;;GAiBG;AACH,MAAM,OAAO,YAAY;IA+BZ;IA1BX;;;;;OAKG;IACM,YAAY,CAA2D;IAChF,sBAAsB;IACb,aAAa,CAA0B;IAChD,kEAAkE;IACzD,YAAY,CAAgC;IACrD,oCAAoC;IAC3B,YAAY,CAAgC;IAErD;;;;;;;;;;OAUG;IACH,YACW,IAUR;QAVQ,SAAI,GAAJ,IAAI,CAUZ;IACA,CAAC;IAEJ;;;;;OAKG;IACH,WAAW,CAAC,IAAY;QACtB,OAAO,IAAI,YAAY,CAAC,EAAE,GAAG,IAAI,CAAC,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC,CAAC;IAC/D,CAAC;IAED;;;;;OAKG;IACH,QAAQ,CAAC,EAAU;QACjB,OAAO,IAAI,YAAY,CAAC,EAAE,GAAG,IAAI,CAAC,IAAI,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC,CAAC;IAC1D,CAAC;IAED;;;;;;;OAOG;IACH,MAAM,CAAC,MAAc;QACnB,OAAO,IAAI,YAAY,CAAC,EAAE,GAAG,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC;IACpD,CAAC;IAED;;;;;;;;OAQG;IACH,OAAO,CACL,EAAiE;QAEjE,OAAO,IAAI,YAAY,CAAoC;YACzD,GAAG,IAAI,CAAC,IAAI;YACZ,OAAO,EAAE,EAAE,CAAC,mBAAmB,EAAE,CAAC;SACnC,CAAC,CAAC;IACL,CAAC;IAED;;;;;OAKG;IACH,UAAU,CAAC,GAAG,OAAoC;QAChD,OAAO,IAAI,YAAY,CAAC;YACtB,GAAG,IAAI,CAAC,IAAI;YACZ,UAAU,EAAE,OAAO;SACpB,CAAC,CAAC;IACL,CAAC;IAED;;;;;OAKG;IACH,OAAO,CACL,EAE6B;QAE7B,OAAO,IAAI,YAAY,CAAC;YACtB,GAAG,IAAI,CAAC,IAAI;YACZ,OAAO,EAAE,EAAE,CAAC,kBAAkB,EAA2B,CAAC;SAC3D,CAAC,CAAC;IACL,CAAC;IAED;;;;;;;;;;;;;;;;;;;;;OAqBG;IACH,SAAS,CACP,EAA2D;QAE3D,OAAO,IAAI,YAAY,CAAC;YACtB,GAAG,IAAI,CAAC,IAAI;YACZ,SAAS,EAAE,EAAE,CAAC,qBAAqB,EAA2B,CAAQ;SACvE,CAAC,CAAC;IACL,CAAC;CACF;AAED,+CAA+C;AAC/C,WAAW;AACX,+CAA+C;AAE/C;;;;;;;;;GASG;AACH,MAAM,UAAU,KAAK,CAAuB,IAAW;IACrD,OAAO,IAAI,YAAY,CAAiC,EAAE,IAAI,EAAE,CAAC,CAAC;AACpE,CAAC"}