drizzle-typebox 0.3.3 → 1.0.0-beta.10-b5fdd85

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.cjs CHANGED
@@ -1,345 +1,406 @@
1
- 'use strict';
2
-
3
- var typebox = require('@sinclair/typebox');
4
- var drizzleOrm = require('drizzle-orm');
1
+ let _sinclair_typebox = require("@sinclair/typebox");
2
+ let drizzle_orm = require("drizzle-orm");
5
3
 
4
+ //#region src/constants.ts
6
5
  const CONSTANTS = {
7
- INT8_MIN: -128,
8
- INT8_MAX: 127,
9
- INT8_UNSIGNED_MAX: 255,
10
- INT16_MIN: -32768,
11
- INT16_MAX: 32767,
12
- INT16_UNSIGNED_MAX: 65535,
13
- INT24_MIN: -8388608,
14
- INT24_MAX: 8388607,
15
- INT24_UNSIGNED_MAX: 16777215,
16
- INT32_MIN: -2147483648,
17
- INT32_MAX: 2147483647,
18
- INT32_UNSIGNED_MAX: 4294967295,
19
- INT48_MIN: -140737488355328,
20
- INT48_MAX: 140737488355327,
21
- INT48_UNSIGNED_MAX: 281474976710655,
22
- INT64_MIN: -9223372036854775808n,
23
- INT64_MAX: 9223372036854775807n,
24
- INT64_UNSIGNED_MAX: 18446744073709551615n,
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
25
24
  };
26
25
 
27
- function isColumnType(column, columnTypes) {
28
- return columnTypes.includes(column.columnType);
26
+ //#endregion
27
+ //#region src/column.ts
28
+ const literalSchema = _sinclair_typebox.Type.Union([
29
+ _sinclair_typebox.Type.String(),
30
+ _sinclair_typebox.Type.Number(),
31
+ _sinclair_typebox.Type.Boolean(),
32
+ _sinclair_typebox.Type.Null()
33
+ ]);
34
+ const jsonSchema = _sinclair_typebox.Type.Union([
35
+ literalSchema,
36
+ _sinclair_typebox.Type.Array(_sinclair_typebox.Type.Any()),
37
+ _sinclair_typebox.Type.Record(_sinclair_typebox.Type.String(), _sinclair_typebox.Type.Any())
38
+ ]);
39
+ _sinclair_typebox.TypeRegistry.Set("Buffer", (_, value) => value instanceof Buffer);
40
+ const bufferSchema = {
41
+ [_sinclair_typebox.Kind]: "Buffer",
42
+ type: "buffer"
43
+ };
44
+ function mapEnumValues(values) {
45
+ return Object.fromEntries(values.map((value) => [value, value]));
29
46
  }
30
- function isWithEnum(column) {
31
- return 'enumValues' in column && Array.isArray(column.enumValues) && column.enumValues.length > 0;
47
+ function columnToSchema(column, t$2) {
48
+ let schema;
49
+ const dimensions = column.dimensions;
50
+ if (typeof dimensions === "number" && dimensions > 0) return pgArrayColumnToSchema(column, dimensions, t$2);
51
+ const { type, constraint } = (0, drizzle_orm.extractExtendedColumnType)(column);
52
+ switch (type) {
53
+ case "array":
54
+ schema = arrayColumnToSchema(column, constraint, t$2);
55
+ break;
56
+ case "object":
57
+ schema = objectColumnToSchema(column, constraint, t$2);
58
+ break;
59
+ case "number":
60
+ schema = numberColumnToSchema(column, constraint, t$2);
61
+ break;
62
+ case "bigint":
63
+ schema = bigintColumnToSchema(column, constraint, t$2);
64
+ break;
65
+ case "boolean":
66
+ schema = t$2.Boolean();
67
+ break;
68
+ case "string":
69
+ schema = stringColumnToSchema(column, constraint, t$2);
70
+ break;
71
+ case "custom":
72
+ schema = t$2.Any();
73
+ break;
74
+ default: schema = t$2.Any();
75
+ }
76
+ return schema;
32
77
  }
33
- const isPgEnum = isWithEnum;
34
-
35
- const literalSchema = typebox.Type.Union([typebox.Type.String(), typebox.Type.Number(), typebox.Type.Boolean(), typebox.Type.Null()]);
36
- const jsonSchema = typebox.Type.Union([literalSchema, typebox.Type.Array(typebox.Type.Any()), typebox.Type.Record(typebox.Type.String(), typebox.Type.Any())]);
37
- typebox.TypeRegistry.Set('Buffer', (_, value) => value instanceof Buffer); // eslint-disable-line no-instanceof/no-instanceof
38
- const bufferSchema = { [typebox.Kind]: 'Buffer', type: 'buffer' };
39
- function mapEnumValues(values) {
40
- return Object.fromEntries(values.map((value) => [value, value]));
78
+ function numberColumnToSchema(column, constraint, t$2) {
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$2[integer ? "Integer" : "Number"]({
164
+ minimum: min,
165
+ maximum: max
166
+ });
41
167
  }
42
- function columnToSchema(column, t) {
43
- let schema;
44
- if (isWithEnum(column)) {
45
- schema = column.enumValues.length ? t.Enum(mapEnumValues(column.enumValues)) : t.String();
46
- }
47
- if (!schema) {
48
- // Handle specific types
49
- if (isColumnType(column, ['PgGeometry', 'PgPointTuple'])) {
50
- schema = t.Tuple([t.Number(), t.Number()]);
51
- }
52
- else if (isColumnType(column, ['PgGeometryObject', 'PgPointObject'])) {
53
- schema = t.Object({ x: t.Number(), y: t.Number() });
54
- }
55
- else if (isColumnType(column, ['PgHalfVector', 'PgVector'])) {
56
- schema = t.Array(t.Number(), column.dimensions
57
- ? {
58
- minItems: column.dimensions,
59
- maxItems: column.dimensions,
60
- }
61
- : undefined);
62
- }
63
- else if (isColumnType(column, ['PgLine'])) {
64
- schema = t.Tuple([t.Number(), t.Number(), t.Number()]);
65
- }
66
- else if (isColumnType(column, ['PgLineABC'])) {
67
- schema = t.Object({
68
- a: t.Number(),
69
- b: t.Number(),
70
- c: t.Number(),
71
- });
72
- } // Handle other types
73
- else if (isColumnType(column, ['PgArray'])) {
74
- schema = t.Array(columnToSchema(column.baseColumn, t), column.size
75
- ? {
76
- minItems: column.size,
77
- maxItems: column.size,
78
- }
79
- : undefined);
80
- }
81
- else if (column.dataType === 'array') {
82
- schema = t.Array(t.Any());
83
- }
84
- else if (column.dataType === 'number') {
85
- schema = numberColumnToSchema(column, t);
86
- }
87
- else if (column.dataType === 'bigint') {
88
- schema = bigintColumnToSchema(column, t);
89
- }
90
- else if (column.dataType === 'boolean') {
91
- schema = t.Boolean();
92
- }
93
- else if (column.dataType === 'date') {
94
- schema = t.Date();
95
- }
96
- else if (column.dataType === 'string') {
97
- schema = stringColumnToSchema(column, t);
98
- }
99
- else if (column.dataType === 'json') {
100
- schema = jsonSchema;
101
- }
102
- else if (column.dataType === 'custom') {
103
- schema = t.Any();
104
- }
105
- else if (column.dataType === 'buffer') {
106
- schema = bufferSchema;
107
- }
108
- }
109
- if (!schema) {
110
- schema = t.Any();
111
- }
112
- return schema;
168
+ _sinclair_typebox.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;
173
+ });
174
+ _sinclair_typebox.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;
179
+ });
180
+ /** @internal */
181
+ const bigintStringModeSchema = {
182
+ [_sinclair_typebox.Kind]: "BigIntStringMode",
183
+ type: "string"
184
+ };
185
+ /** @internal */
186
+ const unsignedBigintStringModeSchema = {
187
+ [_sinclair_typebox.Kind]: "UnsignedBigIntStringMode",
188
+ type: "string"
189
+ };
190
+ function pgArrayColumnToSchema(column, dimensions, t$2) {
191
+ const [baseType, baseConstraint] = column.dataType.split(" ");
192
+ let baseSchema;
193
+ switch (baseType) {
194
+ case "number":
195
+ baseSchema = numberColumnToSchema(column, baseConstraint, t$2);
196
+ break;
197
+ case "bigint":
198
+ baseSchema = bigintColumnToSchema(column, baseConstraint, t$2);
199
+ break;
200
+ case "boolean":
201
+ baseSchema = t$2.Boolean();
202
+ break;
203
+ case "string":
204
+ baseSchema = stringColumnToSchema(column, baseConstraint, t$2);
205
+ break;
206
+ case "object":
207
+ baseSchema = objectColumnToSchema(column, baseConstraint, t$2);
208
+ break;
209
+ case "array":
210
+ baseSchema = arrayColumnToSchema(column, baseConstraint, t$2);
211
+ break;
212
+ default: baseSchema = t$2.Any();
213
+ }
214
+ let schema = t$2.Array(baseSchema);
215
+ for (let i = 1; i < dimensions; i++) schema = t$2.Array(schema);
216
+ return schema;
217
+ }
218
+ function arrayColumnToSchema(column, constraint, t$2) {
219
+ switch (constraint) {
220
+ case "geometry":
221
+ case "point": return t$2.Tuple([t$2.Number(), t$2.Number()]);
222
+ case "line": return t$2.Tuple([
223
+ t$2.Number(),
224
+ t$2.Number(),
225
+ t$2.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$2.Array(t$2.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$2.Array(t$2.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$2.Array(columnToSchema(baseColumn, t$2), sizeParam);
256
+ }
257
+ return t$2.Array(t$2.Any());
258
+ }
259
+ default: return t$2.Array(t$2.Any());
260
+ }
261
+ }
262
+ function objectColumnToSchema(column, constraint, t$2) {
263
+ switch (constraint) {
264
+ case "buffer": return bufferSchema;
265
+ case "date": return t$2.Date();
266
+ case "geometry":
267
+ case "point": return t$2.Object({
268
+ x: t$2.Number(),
269
+ y: t$2.Number()
270
+ });
271
+ case "json": return jsonSchema;
272
+ case "line": return t$2.Object({
273
+ a: t$2.Number(),
274
+ b: t$2.Number(),
275
+ c: t$2.Number()
276
+ });
277
+ default: return t$2.Object({});
278
+ }
279
+ }
280
+ function bigintColumnToSchema(column, constraint, t$2) {
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$2.BigInt(Object.keys(options).length > 0 ? options : void 0);
113
297
  }
114
- function numberColumnToSchema(column, t) {
115
- let unsigned = column.getSQLType().includes('unsigned');
116
- let min;
117
- let max;
118
- let integer = false;
119
- if (isColumnType(column, ['MySqlTinyInt', 'SingleStoreTinyInt'])) {
120
- min = unsigned ? 0 : CONSTANTS.INT8_MIN;
121
- max = unsigned ? CONSTANTS.INT8_UNSIGNED_MAX : CONSTANTS.INT8_MAX;
122
- integer = true;
123
- }
124
- else if (isColumnType(column, [
125
- 'PgSmallInt',
126
- 'PgSmallSerial',
127
- 'MySqlSmallInt',
128
- 'SingleStoreSmallInt',
129
- ])) {
130
- min = unsigned ? 0 : CONSTANTS.INT16_MIN;
131
- max = unsigned ? CONSTANTS.INT16_UNSIGNED_MAX : CONSTANTS.INT16_MAX;
132
- integer = true;
133
- }
134
- else if (isColumnType(column, [
135
- 'PgReal',
136
- 'MySqlFloat',
137
- 'MySqlMediumInt',
138
- 'SingleStoreFloat',
139
- 'SingleStoreMediumInt',
140
- ])) {
141
- min = unsigned ? 0 : CONSTANTS.INT24_MIN;
142
- max = unsigned ? CONSTANTS.INT24_UNSIGNED_MAX : CONSTANTS.INT24_MAX;
143
- integer = isColumnType(column, ['MySqlMediumInt', 'SingleStoreMediumInt']);
144
- }
145
- else if (isColumnType(column, [
146
- 'PgInteger',
147
- 'PgSerial',
148
- 'MySqlInt',
149
- 'SingleStoreInt',
150
- ])) {
151
- min = unsigned ? 0 : CONSTANTS.INT32_MIN;
152
- max = unsigned ? CONSTANTS.INT32_UNSIGNED_MAX : CONSTANTS.INT32_MAX;
153
- integer = true;
154
- }
155
- else if (isColumnType(column, [
156
- 'PgDoublePrecision',
157
- 'MySqlReal',
158
- 'MySqlDouble',
159
- 'SingleStoreReal',
160
- 'SingleStoreDouble',
161
- 'SQLiteReal',
162
- ])) {
163
- min = unsigned ? 0 : CONSTANTS.INT48_MIN;
164
- max = unsigned ? CONSTANTS.INT48_UNSIGNED_MAX : CONSTANTS.INT48_MAX;
165
- }
166
- else if (isColumnType(column, [
167
- 'PgBigInt53',
168
- 'PgBigSerial53',
169
- 'MySqlBigInt53',
170
- 'MySqlSerial',
171
- 'SingleStoreBigInt53',
172
- 'SingleStoreSerial',
173
- 'SQLiteInteger',
174
- ])) {
175
- unsigned = unsigned || isColumnType(column, ['MySqlSerial', 'SingleStoreSerial']);
176
- min = unsigned ? 0 : Number.MIN_SAFE_INTEGER;
177
- max = Number.MAX_SAFE_INTEGER;
178
- integer = true;
179
- }
180
- else if (isColumnType(column, ['MySqlYear', 'SingleStoreYear'])) {
181
- min = 1901;
182
- max = 2155;
183
- integer = true;
184
- }
185
- else {
186
- min = Number.MIN_SAFE_INTEGER;
187
- max = Number.MAX_SAFE_INTEGER;
188
- }
189
- const key = integer ? 'Integer' : 'Number';
190
- return t[key]({
191
- minimum: min,
192
- maximum: max,
193
- });
298
+ function stringColumnToSchema(column, constraint, t$2) {
299
+ const { name: columnName, length, isLengthExact } = column;
300
+ let regex;
301
+ if (constraint === "binary") regex = /^[01]*$/;
302
+ if (constraint === "uuid") return t$2.String({ format: "uuid" });
303
+ if (constraint === "enum") {
304
+ const enumValues = column.enumValues;
305
+ if (!enumValues) throw new Error(`Column "${(0, drizzle_orm.getTableName)((0, drizzle_orm.getColumnTable)(column))}"."${columnName}" is of 'enum' type, but lacks enum values`);
306
+ return t$2.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$2.RegExp(regex, Object.keys(options).length > 0 ? options : void 0) : t$2.String(Object.keys(options).length > 0 ? options : void 0);
194
316
  }
195
- function bigintColumnToSchema(column, t) {
196
- const unsigned = column.getSQLType().includes('unsigned');
197
- const min = unsigned ? 0n : CONSTANTS.INT64_MIN;
198
- const max = unsigned ? CONSTANTS.INT64_UNSIGNED_MAX : CONSTANTS.INT64_MAX;
199
- return t.BigInt({
200
- minimum: min,
201
- maximum: max,
202
- });
317
+
318
+ //#endregion
319
+ //#region src/utils.ts
320
+ function isColumnType(column, columnTypes) {
321
+ return columnTypes.includes(column.columnType);
203
322
  }
204
- function stringColumnToSchema(column, t) {
205
- if (isColumnType(column, ['PgUUID'])) {
206
- return t.String({ format: 'uuid' });
207
- }
208
- else if (isColumnType(column, [
209
- 'PgBinaryVector',
210
- ])) {
211
- return t.RegExp(/^[01]+$/, column.dimensions ? { maxLength: column.dimensions } : undefined);
212
- }
213
- let max;
214
- let fixed = false;
215
- if (isColumnType(column, ['PgVarchar', 'SQLiteText'])) {
216
- max = column.length;
217
- }
218
- else if (isColumnType(column, ['MySqlVarChar', 'SingleStoreVarChar'])) {
219
- max = column.length ?? CONSTANTS.INT16_UNSIGNED_MAX;
220
- }
221
- else if (isColumnType(column, ['MySqlText', 'SingleStoreText'])) {
222
- if (column.textType === 'longtext') {
223
- max = CONSTANTS.INT32_UNSIGNED_MAX;
224
- }
225
- else if (column.textType === 'mediumtext') {
226
- max = CONSTANTS.INT24_UNSIGNED_MAX;
227
- }
228
- else if (column.textType === 'text') {
229
- max = CONSTANTS.INT16_UNSIGNED_MAX;
230
- }
231
- else {
232
- max = CONSTANTS.INT8_UNSIGNED_MAX;
233
- }
234
- }
235
- if (isColumnType(column, [
236
- 'PgChar',
237
- 'MySqlChar',
238
- 'SingleStoreChar',
239
- ])) {
240
- max = column.length;
241
- fixed = true;
242
- }
243
- const options = {};
244
- if (max !== undefined && fixed) {
245
- options.minLength = max;
246
- options.maxLength = max;
247
- }
248
- else if (max !== undefined) {
249
- options.maxLength = max;
250
- }
251
- return t.String(Object.keys(options).length > 0 ? options : undefined);
323
+ function isWithEnum(column) {
324
+ return "enumValues" in column && Array.isArray(column.enumValues) && column.enumValues.length > 0;
252
325
  }
326
+ const isPgEnum = isWithEnum;
253
327
 
328
+ //#endregion
329
+ //#region src/schema.ts
254
330
  function getColumns(tableLike) {
255
- return drizzleOrm.isTable(tableLike) ? drizzleOrm.getTableColumns(tableLike) : drizzleOrm.getViewSelectedFields(tableLike);
331
+ return (0, drizzle_orm.isTable)(tableLike) ? (0, drizzle_orm.getTableColumns)(tableLike) : (0, drizzle_orm.getViewSelectedFields)(tableLike);
256
332
  }
257
333
  function handleColumns(columns, refinements, conditions, factory) {
258
- const columnSchemas = {};
259
- for (const [key, selected] of Object.entries(columns)) {
260
- if (!drizzleOrm.is(selected, drizzleOrm.Column) && !drizzleOrm.is(selected, drizzleOrm.SQL) && !drizzleOrm.is(selected, drizzleOrm.SQL.Aliased) && typeof selected === 'object') {
261
- const columns = drizzleOrm.isTable(selected) || drizzleOrm.isView(selected) ? getColumns(selected) : selected;
262
- columnSchemas[key] = handleColumns(columns, refinements[key] ?? {}, conditions, factory);
263
- continue;
264
- }
265
- const refinement = refinements[key];
266
- if (refinement !== undefined && typeof refinement !== 'function') {
267
- columnSchemas[key] = refinement;
268
- continue;
269
- }
270
- const column = drizzleOrm.is(selected, drizzleOrm.Column) ? selected : undefined;
271
- const schema = column ? columnToSchema(column, factory?.typeboxInstance ?? typebox.Type) : typebox.Type.Any();
272
- const refined = typeof refinement === 'function' ? refinement(schema) : schema;
273
- if (conditions.never(column)) {
274
- continue;
275
- }
276
- else {
277
- columnSchemas[key] = refined;
278
- }
279
- if (column) {
280
- if (conditions.nullable(column)) {
281
- columnSchemas[key] = typebox.Type.Union([columnSchemas[key], typebox.Type.Null()]);
282
- }
283
- if (conditions.optional(column)) {
284
- columnSchemas[key] = typebox.Type.Optional(columnSchemas[key]);
285
- }
286
- }
287
- }
288
- return typebox.Type.Object(columnSchemas);
334
+ const columnSchemas = {};
335
+ for (const [key, selected] of Object.entries(columns)) {
336
+ if (!(0, drizzle_orm.is)(selected, drizzle_orm.Column) && !(0, drizzle_orm.is)(selected, drizzle_orm.SQL) && !(0, drizzle_orm.is)(selected, drizzle_orm.SQL.Aliased) && typeof selected === "object") {
337
+ columnSchemas[key] = handleColumns((0, drizzle_orm.isTable)(selected) || (0, drizzle_orm.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 = (0, drizzle_orm.is)(selected, drizzle_orm.Column) ? selected : void 0;
346
+ const schema = column ? columnToSchema(column, factory?.typeboxInstance ?? _sinclair_typebox.Type) : _sinclair_typebox.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] = _sinclair_typebox.Type.Union([columnSchemas[key], _sinclair_typebox.Type.Null()]);
352
+ if (conditions.optional(column)) columnSchemas[key] = _sinclair_typebox.Type.Optional(columnSchemas[key]);
353
+ }
354
+ }
355
+ return _sinclair_typebox.Type.Object(columnSchemas);
289
356
  }
290
357
  function handleEnum(enum_, factory) {
291
- const typebox$1 = factory?.typeboxInstance ?? typebox.Type;
292
- return typebox$1.Enum(mapEnumValues(enum_.enumValues));
358
+ return (factory?.typeboxInstance ?? _sinclair_typebox.Type).Enum(mapEnumValues(enum_.enumValues));
293
359
  }
294
360
  const selectConditions = {
295
- never: () => false,
296
- optional: () => false,
297
- nullable: (column) => !column.notNull,
361
+ never: () => false,
362
+ optional: () => false,
363
+ nullable: (column) => !column.notNull
298
364
  };
299
365
  const insertConditions = {
300
- never: (column) => column?.generated?.type === 'always' || column?.generatedIdentity?.type === 'always',
301
- optional: (column) => !column.notNull || (column.notNull && column.hasDefault),
302
- nullable: (column) => !column.notNull,
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
303
369
  };
304
370
  const updateConditions = {
305
- never: (column) => column?.generated?.type === 'always' || column?.generatedIdentity?.type === 'always',
306
- optional: () => true,
307
- nullable: (column) => !column.notNull,
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
308
374
  };
309
375
  const createSelectSchema = (entity, refine) => {
310
- if (isPgEnum(entity)) {
311
- return handleEnum(entity);
312
- }
313
- const columns = getColumns(entity);
314
- return handleColumns(columns, refine ?? {}, selectConditions);
376
+ if (isPgEnum(entity)) return handleEnum(entity);
377
+ return handleColumns(getColumns(entity), refine ?? {}, selectConditions);
315
378
  };
316
379
  const createInsertSchema = (entity, refine) => {
317
- const columns = getColumns(entity);
318
- return handleColumns(columns, refine ?? {}, insertConditions);
380
+ return handleColumns(getColumns(entity), refine ?? {}, insertConditions);
319
381
  };
320
382
  const createUpdateSchema = (entity, refine) => {
321
- const columns = getColumns(entity);
322
- return handleColumns(columns, refine ?? {}, updateConditions);
383
+ return handleColumns(getColumns(entity), refine ?? {}, updateConditions);
323
384
  };
324
385
  function createSchemaFactory(options) {
325
- const createSelectSchema = (entity, refine) => {
326
- if (isPgEnum(entity)) {
327
- return handleEnum(entity, options);
328
- }
329
- const columns = getColumns(entity);
330
- return handleColumns(columns, refine ?? {}, selectConditions, options);
331
- };
332
- const createInsertSchema = (entity, refine) => {
333
- const columns = getColumns(entity);
334
- return handleColumns(columns, refine ?? {}, insertConditions, options);
335
- };
336
- const createUpdateSchema = (entity, refine) => {
337
- const columns = getColumns(entity);
338
- return handleColumns(columns, refine ?? {}, updateConditions, options);
339
- };
340
- return { createSelectSchema, createInsertSchema, createUpdateSchema };
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
+ };
341
401
  }
342
402
 
403
+ //#endregion
343
404
  exports.bufferSchema = bufferSchema;
344
405
  exports.createInsertSchema = createInsertSchema;
345
406
  exports.createSchemaFactory = createSchemaFactory;
@@ -353,4 +414,4 @@ exports.isPgEnum = isPgEnum;
353
414
  exports.isWithEnum = isWithEnum;
354
415
  exports.jsonSchema = jsonSchema;
355
416
  exports.literalSchema = literalSchema;
356
- //# sourceMappingURL=index.cjs.map
417
+ //# sourceMappingURL=index.cjs.map