drizzle-typebox 1.0.0-beta.6-cefee57 → 1.0.0-beta.6-7419dcb

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/index.mjs CHANGED
@@ -1,405 +1,449 @@
1
- import { Kind, Type, TypeRegistry } from "@sinclair/typebox";
2
- import { Column, SQL, extractExtendedColumnType, getColumnTable, getTableColumns, getTableName, getViewSelectedFields, is, isTable, isView } from "drizzle-orm";
1
+ import { Type, TypeRegistry, Kind } from '@sinclair/typebox';
2
+ import { extractExtendedColumnType, getTableName, getColumnTable, isTable, getTableColumns, getViewSelectedFields, is, Column, SQL, isView } from 'drizzle-orm';
3
3
 
4
- //#region src/constants.ts
5
4
  const CONSTANTS = {
6
- INT8_MIN: -128,
7
- INT8_MAX: 127,
8
- INT8_UNSIGNED_MAX: 255,
9
- INT16_MIN: -32768,
10
- INT16_MAX: 32767,
11
- INT16_UNSIGNED_MAX: 65535,
12
- INT24_MIN: -8388608,
13
- INT24_MAX: 8388607,
14
- INT24_UNSIGNED_MAX: 16777215,
15
- INT32_MIN: -2147483648,
16
- INT32_MAX: 2147483647,
17
- INT32_UNSIGNED_MAX: 4294967295,
18
- INT48_MIN: -0x800000000000,
19
- INT48_MAX: 0x7fffffffffff,
20
- INT48_UNSIGNED_MAX: 0xffffffffffff,
21
- INT64_MIN: -9223372036854775808n,
22
- INT64_MAX: 9223372036854775807n,
23
- INT64_UNSIGNED_MAX: 18446744073709551615n
5
+ INT8_MIN: -128,
6
+ INT8_MAX: 127,
7
+ INT8_UNSIGNED_MAX: 255,
8
+ INT16_MIN: -32768,
9
+ INT16_MAX: 32767,
10
+ INT16_UNSIGNED_MAX: 65535,
11
+ INT24_MIN: -8388608,
12
+ INT24_MAX: 8388607,
13
+ INT24_UNSIGNED_MAX: 16777215,
14
+ INT32_MIN: -2147483648,
15
+ INT32_MAX: 2147483647,
16
+ INT32_UNSIGNED_MAX: 4294967295,
17
+ INT48_MIN: -140737488355328,
18
+ INT48_MAX: 140737488355327,
19
+ INT48_UNSIGNED_MAX: 281474976710655,
20
+ INT64_MIN: -9223372036854775808n,
21
+ INT64_MAX: 9223372036854775807n,
22
+ INT64_UNSIGNED_MAX: 18446744073709551615n,
24
23
  };
25
24
 
26
- //#endregion
27
- //#region src/column.ts
28
- const literalSchema = Type.Union([
29
- Type.String(),
30
- Type.Number(),
31
- Type.Boolean(),
32
- Type.Null()
33
- ]);
34
- const jsonSchema = Type.Union([
35
- literalSchema,
36
- Type.Array(Type.Any()),
37
- Type.Record(Type.String(), Type.Any())
38
- ]);
39
- TypeRegistry.Set("Buffer", (_, value) => value instanceof Buffer);
40
- const bufferSchema = {
41
- [Kind]: "Buffer",
42
- type: "buffer"
43
- };
25
+ const literalSchema = Type.Union([Type.String(), Type.Number(), Type.Boolean(), Type.Null()]);
26
+ const jsonSchema = Type.Union([literalSchema, Type.Array(Type.Any()), Type.Record(Type.String(), Type.Any())]);
27
+ TypeRegistry.Set('Buffer', (_, value) => value instanceof Buffer);
28
+ const bufferSchema = { [Kind]: 'Buffer', type: 'buffer' };
44
29
  function mapEnumValues(values) {
45
- return Object.fromEntries(values.map((value) => [value, value]));
30
+ return Object.fromEntries(values.map((value) => [value, value]));
46
31
  }
47
32
  function columnToSchema(column, t) {
48
- let schema;
49
- const dimensions = column.dimensions;
50
- if (typeof dimensions === "number" && dimensions > 0) return pgArrayColumnToSchema(column, dimensions, t);
51
- const { type, constraint } = extractExtendedColumnType(column);
52
- switch (type) {
53
- case "array":
54
- schema = arrayColumnToSchema(column, constraint, t);
55
- break;
56
- case "object":
57
- schema = objectColumnToSchema(column, constraint, t);
58
- break;
59
- case "number":
60
- schema = numberColumnToSchema(column, constraint, t);
61
- break;
62
- case "bigint":
63
- schema = bigintColumnToSchema(column, constraint, t);
64
- break;
65
- case "boolean":
66
- schema = t.Boolean();
67
- break;
68
- case "string":
69
- schema = stringColumnToSchema(column, constraint, t);
70
- break;
71
- case "custom":
72
- schema = t.Any();
73
- break;
74
- default: schema = t.Any();
75
- }
76
- return schema;
33
+ let schema;
34
+ const { type, constraint } = extractExtendedColumnType(column);
35
+ switch (type) {
36
+ case 'array': {
37
+ schema = arrayColumnToSchema(column, constraint, t);
38
+ break;
39
+ }
40
+ case 'object': {
41
+ schema = objectColumnToSchema(column, constraint, t);
42
+ break;
43
+ }
44
+ case 'number': {
45
+ schema = numberColumnToSchema(column, constraint, t);
46
+ break;
47
+ }
48
+ case 'bigint': {
49
+ schema = bigintColumnToSchema(column, constraint, t);
50
+ break;
51
+ }
52
+ case 'boolean': {
53
+ schema = t.Boolean();
54
+ break;
55
+ }
56
+ case 'string': {
57
+ schema = stringColumnToSchema(column, constraint, t);
58
+ break;
59
+ }
60
+ case 'custom': {
61
+ schema = t.Any();
62
+ break;
63
+ }
64
+ default: {
65
+ schema = t.Any();
66
+ }
67
+ }
68
+ return schema;
77
69
  }
78
70
  function numberColumnToSchema(column, constraint, t) {
79
- let min;
80
- let max;
81
- let integer = false;
82
- switch (constraint) {
83
- case "int8":
84
- min = CONSTANTS.INT8_MIN;
85
- max = CONSTANTS.INT8_MAX;
86
- integer = true;
87
- break;
88
- case "uint8":
89
- min = 0;
90
- max = CONSTANTS.INT8_UNSIGNED_MAX;
91
- integer = true;
92
- break;
93
- case "int16":
94
- min = CONSTANTS.INT16_MIN;
95
- max = CONSTANTS.INT16_MAX;
96
- integer = true;
97
- break;
98
- case "uint16":
99
- min = 0;
100
- max = CONSTANTS.INT16_UNSIGNED_MAX;
101
- integer = true;
102
- break;
103
- case "int24":
104
- min = CONSTANTS.INT24_MIN;
105
- max = CONSTANTS.INT24_MAX;
106
- integer = true;
107
- break;
108
- case "uint24":
109
- min = 0;
110
- max = CONSTANTS.INT24_UNSIGNED_MAX;
111
- integer = true;
112
- break;
113
- case "int32":
114
- min = CONSTANTS.INT32_MIN;
115
- max = CONSTANTS.INT32_MAX;
116
- integer = true;
117
- break;
118
- case "uint32":
119
- min = 0;
120
- max = CONSTANTS.INT32_UNSIGNED_MAX;
121
- integer = true;
122
- break;
123
- case "int53":
124
- min = Number.MIN_SAFE_INTEGER;
125
- max = Number.MAX_SAFE_INTEGER;
126
- integer = true;
127
- break;
128
- case "uint53":
129
- min = 0;
130
- max = Number.MAX_SAFE_INTEGER;
131
- integer = true;
132
- break;
133
- case "float":
134
- min = CONSTANTS.INT24_MIN;
135
- max = CONSTANTS.INT24_MAX;
136
- break;
137
- case "ufloat":
138
- min = 0;
139
- max = CONSTANTS.INT24_UNSIGNED_MAX;
140
- break;
141
- case "double":
142
- min = CONSTANTS.INT48_MIN;
143
- max = CONSTANTS.INT48_MAX;
144
- break;
145
- case "udouble":
146
- min = 0;
147
- max = CONSTANTS.INT48_UNSIGNED_MAX;
148
- break;
149
- case "year":
150
- min = 1901;
151
- max = 2155;
152
- integer = true;
153
- break;
154
- case "unsigned":
155
- min = 0;
156
- max = Number.MAX_SAFE_INTEGER;
157
- break;
158
- default:
159
- min = Number.MIN_SAFE_INTEGER;
160
- max = Number.MAX_SAFE_INTEGER;
161
- break;
162
- }
163
- return t[integer ? "Integer" : "Number"]({
164
- minimum: min,
165
- maximum: max
166
- });
71
+ let min;
72
+ let max;
73
+ let integer = false;
74
+ switch (constraint) {
75
+ case 'int8': {
76
+ min = CONSTANTS.INT8_MIN;
77
+ max = CONSTANTS.INT8_MAX;
78
+ integer = true;
79
+ break;
80
+ }
81
+ case 'uint8': {
82
+ min = 0;
83
+ max = CONSTANTS.INT8_UNSIGNED_MAX;
84
+ integer = true;
85
+ break;
86
+ }
87
+ case 'int16': {
88
+ min = CONSTANTS.INT16_MIN;
89
+ max = CONSTANTS.INT16_MAX;
90
+ integer = true;
91
+ break;
92
+ }
93
+ case 'uint16': {
94
+ min = 0;
95
+ max = CONSTANTS.INT16_UNSIGNED_MAX;
96
+ integer = true;
97
+ break;
98
+ }
99
+ case 'int24': {
100
+ min = CONSTANTS.INT24_MIN;
101
+ max = CONSTANTS.INT24_MAX;
102
+ integer = true;
103
+ break;
104
+ }
105
+ case 'uint24': {
106
+ min = 0;
107
+ max = CONSTANTS.INT24_UNSIGNED_MAX;
108
+ integer = true;
109
+ break;
110
+ }
111
+ case 'int32': {
112
+ min = CONSTANTS.INT32_MIN;
113
+ max = CONSTANTS.INT32_MAX;
114
+ integer = true;
115
+ break;
116
+ }
117
+ case 'uint32': {
118
+ min = 0;
119
+ max = CONSTANTS.INT32_UNSIGNED_MAX;
120
+ integer = true;
121
+ break;
122
+ }
123
+ case 'int53': {
124
+ min = Number.MIN_SAFE_INTEGER;
125
+ max = Number.MAX_SAFE_INTEGER;
126
+ integer = true;
127
+ break;
128
+ }
129
+ case 'uint53': {
130
+ min = 0;
131
+ max = Number.MAX_SAFE_INTEGER;
132
+ integer = true;
133
+ break;
134
+ }
135
+ case 'float': {
136
+ min = CONSTANTS.INT24_MIN;
137
+ max = CONSTANTS.INT24_MAX;
138
+ break;
139
+ }
140
+ case 'ufloat': {
141
+ min = 0;
142
+ max = CONSTANTS.INT24_UNSIGNED_MAX;
143
+ break;
144
+ }
145
+ case 'double': {
146
+ min = CONSTANTS.INT48_MIN;
147
+ max = CONSTANTS.INT48_MAX;
148
+ break;
149
+ }
150
+ case 'udouble': {
151
+ min = 0;
152
+ max = CONSTANTS.INT48_UNSIGNED_MAX;
153
+ break;
154
+ }
155
+ case 'year': {
156
+ min = 1901;
157
+ max = 2155;
158
+ integer = true;
159
+ break;
160
+ }
161
+ case 'unsigned': {
162
+ min = 0;
163
+ max = Number.MAX_SAFE_INTEGER;
164
+ break;
165
+ }
166
+ default: {
167
+ min = Number.MIN_SAFE_INTEGER;
168
+ max = Number.MAX_SAFE_INTEGER;
169
+ break;
170
+ }
171
+ }
172
+ const key = integer ? 'Integer' : 'Number';
173
+ return t[key]({
174
+ minimum: min,
175
+ maximum: max,
176
+ });
167
177
  }
168
- TypeRegistry.Set("BigIntStringMode", (_, value) => {
169
- if (typeof value !== "string" || !/^-?\d+$/.test(value)) return false;
170
- const bigint = BigInt(value);
171
- if (bigint < CONSTANTS.INT64_MIN || bigint > CONSTANTS.INT64_MAX) return false;
172
- return true;
178
+ TypeRegistry.Set('BigIntStringMode', (_, value) => {
179
+ if (typeof value !== 'string' || !(/^-?\d+$/.test(value))) {
180
+ return false;
181
+ }
182
+ const bigint = BigInt(value);
183
+ if (bigint < CONSTANTS.INT64_MIN || bigint > CONSTANTS.INT64_MAX) {
184
+ return false;
185
+ }
186
+ return true;
173
187
  });
174
- TypeRegistry.Set("UnsignedBigIntStringMode", (_, value) => {
175
- if (typeof value !== "string" || !/^\d+$/.test(value)) return false;
176
- const bigint = BigInt(value);
177
- if (bigint < 0 || bigint > CONSTANTS.INT64_MAX) return false;
178
- return true;
188
+ TypeRegistry.Set('UnsignedBigIntStringMode', (_, value) => {
189
+ if (typeof value !== 'string' || !(/^\d+$/.test(value))) {
190
+ return false;
191
+ }
192
+ const bigint = BigInt(value);
193
+ if (bigint < 0 || bigint > CONSTANTS.INT64_MAX) {
194
+ return false;
195
+ }
196
+ return true;
179
197
  });
180
198
  /** @internal */
181
199
  const bigintStringModeSchema = {
182
- [Kind]: "BigIntStringMode",
183
- type: "string"
200
+ [Kind]: 'BigIntStringMode',
201
+ type: 'string',
184
202
  };
185
203
  /** @internal */
186
204
  const unsignedBigintStringModeSchema = {
187
- [Kind]: "UnsignedBigIntStringMode",
188
- type: "string"
205
+ [Kind]: 'UnsignedBigIntStringMode',
206
+ type: 'string',
189
207
  };
190
- function pgArrayColumnToSchema(column, dimensions, t) {
191
- const [baseType, baseConstraint] = column.dataType.split(" ");
192
- let baseSchema;
193
- switch (baseType) {
194
- case "number":
195
- baseSchema = numberColumnToSchema(column, baseConstraint, t);
196
- break;
197
- case "bigint":
198
- baseSchema = bigintColumnToSchema(column, baseConstraint, t);
199
- break;
200
- case "boolean":
201
- baseSchema = t.Boolean();
202
- break;
203
- case "string":
204
- baseSchema = stringColumnToSchema(column, baseConstraint, t);
205
- break;
206
- case "object":
207
- baseSchema = objectColumnToSchema(column, baseConstraint, t);
208
- break;
209
- case "array":
210
- baseSchema = arrayColumnToSchema(column, baseConstraint, t);
211
- break;
212
- default: baseSchema = t.Any();
213
- }
214
- let schema = t.Array(baseSchema);
215
- for (let i = 1; i < dimensions; i++) schema = t.Array(schema);
216
- return schema;
217
- }
218
208
  function arrayColumnToSchema(column, constraint, t) {
219
- switch (constraint) {
220
- case "geometry":
221
- case "point": return t.Tuple([t.Number(), t.Number()]);
222
- case "line": return t.Tuple([
223
- t.Number(),
224
- t.Number(),
225
- t.Number()
226
- ]);
227
- case "vector":
228
- case "halfvector": {
229
- const length = column.length;
230
- const sizeParam = length ? {
231
- minItems: length,
232
- maxItems: length
233
- } : void 0;
234
- return t.Array(t.Number(), sizeParam);
235
- }
236
- case "int64vector": {
237
- const length = column.length;
238
- const sizeParam = length ? {
239
- minItems: length,
240
- maxItems: length
241
- } : void 0;
242
- return t.Array(t.BigInt({
243
- minimum: CONSTANTS.INT64_MIN,
244
- maximum: CONSTANTS.INT64_MAX
245
- }), sizeParam);
246
- }
247
- case "basecolumn": {
248
- const baseColumn = column.baseColumn;
249
- if (baseColumn) {
250
- const size = column.length;
251
- const sizeParam = size ? {
252
- minItems: size,
253
- maxItems: size
254
- } : void 0;
255
- return t.Array(columnToSchema(baseColumn, t), sizeParam);
256
- }
257
- return t.Array(t.Any());
258
- }
259
- default: return t.Array(t.Any());
260
- }
209
+ switch (constraint) {
210
+ case 'geometry':
211
+ case 'point': {
212
+ return t.Tuple([t.Number(), t.Number()]);
213
+ }
214
+ case 'line': {
215
+ return t.Tuple([t.Number(), t.Number(), t.Number()]);
216
+ }
217
+ case 'vector':
218
+ case 'halfvector': {
219
+ const length = column.length;
220
+ const sizeParam = length
221
+ ? {
222
+ minItems: length,
223
+ maxItems: length,
224
+ }
225
+ : undefined;
226
+ return t.Array(t.Number(), sizeParam);
227
+ }
228
+ case 'int64vector': {
229
+ const length = column.length;
230
+ const sizeParam = length
231
+ ? {
232
+ minItems: length,
233
+ maxItems: length,
234
+ }
235
+ : undefined;
236
+ return t.Array(t.BigInt({
237
+ minimum: CONSTANTS.INT64_MIN,
238
+ maximum: CONSTANTS.INT64_MAX,
239
+ }), sizeParam);
240
+ }
241
+ case 'basecolumn': {
242
+ const size = column.length;
243
+ const sizeParam = size
244
+ ? {
245
+ minItems: size,
246
+ maxItems: size,
247
+ }
248
+ : undefined;
249
+ return column.baseColumn
250
+ ? t.Array(columnToSchema(column.baseColumn, t), sizeParam)
251
+ : t.Array(t.Any(), sizeParam);
252
+ }
253
+ default: {
254
+ return t.Array(t.Any());
255
+ }
256
+ }
261
257
  }
262
258
  function objectColumnToSchema(column, constraint, t) {
263
- switch (constraint) {
264
- case "buffer": return bufferSchema;
265
- case "date": return t.Date();
266
- case "geometry":
267
- case "point": return t.Object({
268
- x: t.Number(),
269
- y: t.Number()
270
- });
271
- case "json": return jsonSchema;
272
- case "line": return t.Object({
273
- a: t.Number(),
274
- b: t.Number(),
275
- c: t.Number()
276
- });
277
- default: return t.Object({});
278
- }
259
+ switch (constraint) {
260
+ case 'buffer': {
261
+ return bufferSchema;
262
+ }
263
+ case 'date': {
264
+ return t.Date();
265
+ }
266
+ case 'geometry':
267
+ case 'point': {
268
+ return t.Object({
269
+ x: t.Number(),
270
+ y: t.Number(),
271
+ });
272
+ }
273
+ case 'json': {
274
+ return jsonSchema;
275
+ }
276
+ case 'line': {
277
+ return t.Object({
278
+ a: t.Number(),
279
+ b: t.Number(),
280
+ c: t.Number(),
281
+ });
282
+ }
283
+ default: {
284
+ return t.Object({});
285
+ }
286
+ }
279
287
  }
280
288
  function bigintColumnToSchema(column, constraint, t) {
281
- let min;
282
- let max;
283
- switch (constraint) {
284
- case "int64":
285
- min = CONSTANTS.INT64_MIN;
286
- max = CONSTANTS.INT64_MAX;
287
- break;
288
- case "uint64":
289
- min = 0n;
290
- max = CONSTANTS.INT64_UNSIGNED_MAX;
291
- break;
292
- }
293
- const options = {};
294
- if (min !== void 0) options.minimum = min;
295
- if (max !== void 0) options.maximum = max;
296
- return t.BigInt(Object.keys(options).length > 0 ? options : void 0);
289
+ let min;
290
+ let max;
291
+ switch (constraint) {
292
+ case 'int64': {
293
+ min = CONSTANTS.INT64_MIN;
294
+ max = CONSTANTS.INT64_MAX;
295
+ break;
296
+ }
297
+ case 'uint64': {
298
+ min = 0n;
299
+ max = CONSTANTS.INT64_UNSIGNED_MAX;
300
+ break;
301
+ }
302
+ }
303
+ const options = {};
304
+ if (min !== undefined) {
305
+ options.minimum = min;
306
+ }
307
+ if (max !== undefined) {
308
+ options.maximum = max;
309
+ }
310
+ return t.BigInt(Object.keys(options).length > 0 ? options : undefined);
297
311
  }
298
312
  function stringColumnToSchema(column, constraint, t) {
299
- const { name: columnName, length, isLengthExact } = column;
300
- let regex;
301
- if (constraint === "binary") regex = /^[01]*$/;
302
- if (constraint === "uuid") return t.String({ format: "uuid" });
303
- if (constraint === "enum") {
304
- const enumValues = column.enumValues;
305
- if (!enumValues) throw new Error(`Column "${getTableName(getColumnTable(column))}"."${columnName}" is of 'enum' type, but lacks enum values`);
306
- return t.Enum(mapEnumValues(enumValues));
307
- }
308
- if (constraint === "int64") return bigintStringModeSchema;
309
- if (constraint === "uint64") return unsignedBigintStringModeSchema;
310
- const options = {};
311
- if (length !== void 0 && isLengthExact) {
312
- options.minLength = length;
313
- options.maxLength = length;
314
- } else if (length !== void 0) options.maxLength = length;
315
- return regex ? t.RegExp(regex, Object.keys(options).length > 0 ? options : void 0) : t.String(Object.keys(options).length > 0 ? options : void 0);
313
+ const { name: columnName, length, isLengthExact } = column;
314
+ let regex;
315
+ if (constraint === 'binary') {
316
+ regex = /^[01]*$/;
317
+ }
318
+ if (constraint === 'uuid') {
319
+ return t.String({
320
+ format: 'uuid',
321
+ });
322
+ }
323
+ if (constraint === 'enum') {
324
+ const enumValues = column.enumValues;
325
+ if (!enumValues) {
326
+ throw new Error(`Column "${getTableName(getColumnTable(column))}"."${columnName}" is of 'enum' type, but lacks enum values`);
327
+ }
328
+ return t.Enum(mapEnumValues(enumValues));
329
+ }
330
+ if (constraint === 'int64') {
331
+ return bigintStringModeSchema;
332
+ }
333
+ if (constraint === 'uint64') {
334
+ return unsignedBigintStringModeSchema;
335
+ }
336
+ const options = {};
337
+ if (length !== undefined && isLengthExact) {
338
+ options.minLength = length;
339
+ options.maxLength = length;
340
+ }
341
+ else if (length !== undefined) {
342
+ options.maxLength = length;
343
+ }
344
+ return regex
345
+ ? t.RegExp(regex, Object.keys(options).length > 0 ? options : undefined)
346
+ : t.String(Object.keys(options).length > 0 ? options : undefined);
316
347
  }
317
348
 
318
- //#endregion
319
- //#region src/utils.ts
320
349
  function isColumnType(column, columnTypes) {
321
- return columnTypes.includes(column.columnType);
350
+ return columnTypes.includes(column.columnType);
322
351
  }
323
352
  function isWithEnum(column) {
324
- return "enumValues" in column && Array.isArray(column.enumValues) && column.enumValues.length > 0;
353
+ return 'enumValues' in column && Array.isArray(column.enumValues) && column.enumValues.length > 0;
325
354
  }
326
355
  const isPgEnum = isWithEnum;
327
356
 
328
- //#endregion
329
- //#region src/schema.ts
330
357
  function getColumns(tableLike) {
331
- return isTable(tableLike) ? getTableColumns(tableLike) : getViewSelectedFields(tableLike);
358
+ return isTable(tableLike) ? getTableColumns(tableLike) : getViewSelectedFields(tableLike);
332
359
  }
333
360
  function handleColumns(columns, refinements, conditions, factory) {
334
- const columnSchemas = {};
335
- for (const [key, selected] of Object.entries(columns)) {
336
- if (!is(selected, Column) && !is(selected, SQL) && !is(selected, SQL.Aliased) && typeof selected === "object") {
337
- columnSchemas[key] = handleColumns(isTable(selected) || isView(selected) ? getColumns(selected) : selected, refinements[key] ?? {}, conditions, factory);
338
- continue;
339
- }
340
- const refinement = refinements[key];
341
- if (refinement !== void 0 && typeof refinement !== "function") {
342
- columnSchemas[key] = refinement;
343
- continue;
344
- }
345
- const column = is(selected, Column) ? selected : void 0;
346
- const schema = column ? columnToSchema(column, factory?.typeboxInstance ?? Type) : Type.Any();
347
- const refined = typeof refinement === "function" ? refinement(schema) : schema;
348
- if (conditions.never(column)) continue;
349
- else columnSchemas[key] = refined;
350
- if (column) {
351
- if (conditions.nullable(column)) columnSchemas[key] = Type.Union([columnSchemas[key], Type.Null()]);
352
- if (conditions.optional(column)) columnSchemas[key] = Type.Optional(columnSchemas[key]);
353
- }
354
- }
355
- return Type.Object(columnSchemas);
361
+ const columnSchemas = {};
362
+ for (const [key, selected] of Object.entries(columns)) {
363
+ if (!is(selected, Column) && !is(selected, SQL) && !is(selected, SQL.Aliased) && typeof selected === 'object') {
364
+ const columns = isTable(selected) || isView(selected) ? getColumns(selected) : selected;
365
+ columnSchemas[key] = handleColumns(columns, refinements[key] ?? {}, conditions, factory);
366
+ continue;
367
+ }
368
+ const refinement = refinements[key];
369
+ if (refinement !== undefined && typeof refinement !== 'function') {
370
+ columnSchemas[key] = refinement;
371
+ continue;
372
+ }
373
+ const column = is(selected, Column) ? selected : undefined;
374
+ const schema = column ? columnToSchema(column, factory?.typeboxInstance ?? Type) : Type.Any();
375
+ const refined = typeof refinement === 'function' ? refinement(schema) : schema;
376
+ if (conditions.never(column)) {
377
+ continue;
378
+ }
379
+ else {
380
+ columnSchemas[key] = refined;
381
+ }
382
+ if (column) {
383
+ if (conditions.nullable(column)) {
384
+ columnSchemas[key] = Type.Union([columnSchemas[key], Type.Null()]);
385
+ }
386
+ if (conditions.optional(column)) {
387
+ columnSchemas[key] = Type.Optional(columnSchemas[key]);
388
+ }
389
+ }
390
+ }
391
+ return Type.Object(columnSchemas);
356
392
  }
357
393
  function handleEnum(enum_, factory) {
358
- return (factory?.typeboxInstance ?? Type).Enum(mapEnumValues(enum_.enumValues));
394
+ const typebox = factory?.typeboxInstance ?? Type;
395
+ return typebox.Enum(mapEnumValues(enum_.enumValues));
359
396
  }
360
397
  const selectConditions = {
361
- never: () => false,
362
- optional: () => false,
363
- nullable: (column) => !column.notNull
398
+ never: () => false,
399
+ optional: () => false,
400
+ nullable: (column) => !column.notNull,
364
401
  };
365
402
  const insertConditions = {
366
- never: (column) => column?.generated?.type === "always" || column?.generatedIdentity?.type === "always" || "identity" in (column ?? {}) && typeof column?.identity !== "undefined",
367
- optional: (column) => !column.notNull || column.notNull && column.hasDefault,
368
- nullable: (column) => !column.notNull
403
+ never: (column) => column?.generated?.type === 'always' || column?.generatedIdentity?.type === 'always'
404
+ || ('identity' in (column ?? {}) && typeof column?.identity !== 'undefined'),
405
+ optional: (column) => !column.notNull || (column.notNull && column.hasDefault),
406
+ nullable: (column) => !column.notNull,
369
407
  };
370
408
  const updateConditions = {
371
- never: (column) => column?.generated?.type === "always" || column?.generatedIdentity?.type === "always" || "identity" in (column ?? {}) && typeof column?.identity !== "undefined",
372
- optional: () => true,
373
- nullable: (column) => !column.notNull
409
+ never: (column) => column?.generated?.type === 'always' || column?.generatedIdentity?.type === 'always'
410
+ || ('identity' in (column ?? {}) && typeof column?.identity !== 'undefined'),
411
+ optional: () => true,
412
+ nullable: (column) => !column.notNull,
374
413
  };
375
414
  const createSelectSchema = (entity, refine) => {
376
- if (isPgEnum(entity)) return handleEnum(entity);
377
- return handleColumns(getColumns(entity), refine ?? {}, selectConditions);
415
+ if (isPgEnum(entity)) {
416
+ return handleEnum(entity);
417
+ }
418
+ const columns = getColumns(entity);
419
+ return handleColumns(columns, refine ?? {}, selectConditions);
378
420
  };
379
421
  const createInsertSchema = (entity, refine) => {
380
- return handleColumns(getColumns(entity), refine ?? {}, insertConditions);
422
+ const columns = getColumns(entity);
423
+ return handleColumns(columns, refine ?? {}, insertConditions);
381
424
  };
382
425
  const createUpdateSchema = (entity, refine) => {
383
- return handleColumns(getColumns(entity), refine ?? {}, updateConditions);
426
+ const columns = getColumns(entity);
427
+ return handleColumns(columns, refine ?? {}, updateConditions);
384
428
  };
385
429
  function createSchemaFactory(options) {
386
- const createSelectSchema$1 = (entity, refine) => {
387
- if (isPgEnum(entity)) return handleEnum(entity, options);
388
- return handleColumns(getColumns(entity), refine ?? {}, selectConditions, options);
389
- };
390
- const createInsertSchema$1 = (entity, refine) => {
391
- return handleColumns(getColumns(entity), refine ?? {}, insertConditions, options);
392
- };
393
- const createUpdateSchema$1 = (entity, refine) => {
394
- return handleColumns(getColumns(entity), refine ?? {}, updateConditions, options);
395
- };
396
- return {
397
- createSelectSchema: createSelectSchema$1,
398
- createInsertSchema: createInsertSchema$1,
399
- createUpdateSchema: createUpdateSchema$1
400
- };
430
+ const createSelectSchema = (entity, refine) => {
431
+ if (isPgEnum(entity)) {
432
+ return handleEnum(entity, options);
433
+ }
434
+ const columns = getColumns(entity);
435
+ return handleColumns(columns, refine ?? {}, selectConditions, options);
436
+ };
437
+ const createInsertSchema = (entity, refine) => {
438
+ const columns = getColumns(entity);
439
+ return handleColumns(columns, refine ?? {}, insertConditions, options);
440
+ };
441
+ const createUpdateSchema = (entity, refine) => {
442
+ const columns = getColumns(entity);
443
+ return handleColumns(columns, refine ?? {}, updateConditions, options);
444
+ };
445
+ return { createSelectSchema, createInsertSchema, createUpdateSchema };
401
446
  }
402
447
 
403
- //#endregion
404
448
  export { bufferSchema, createInsertSchema, createSchemaFactory, createSelectSchema, createUpdateSchema, getColumns, handleColumns, handleEnum, isColumnType, isPgEnum, isWithEnum, jsonSchema, literalSchema };
405
- //# sourceMappingURL=index.mjs.map
449
+ //# sourceMappingURL=index.mjs.map