drizzle-arktype 1.0.0-beta.6-7aaf14b → 1.0.0-beta.6-da87e04

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,334 +1,390 @@
1
- let arktype = require("arktype");
2
- let drizzle_orm = require("drizzle-orm");
1
+ 'use strict';
2
+
3
+ var arktype = require('arktype');
4
+ var drizzleOrm = require('drizzle-orm');
3
5
 
4
- //#region src/constants.ts
5
6
  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
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,
24
25
  };
25
26
 
26
- //#endregion
27
- //#region src/column.ts
28
27
  const literalSchema = arktype.type.string.or(arktype.type.number).or(arktype.type.boolean).or(arktype.type.null);
29
28
  const jsonSchema = literalSchema.or(arktype.type.unknown.as().array()).or(arktype.type.object.as());
30
- const bufferSchema = arktype.type.unknown.narrow((value) => value instanceof Buffer).as().describe("a Buffer instance");
29
+ const bufferSchema = arktype.type.unknown.narrow((value) => value instanceof Buffer).as().describe('a Buffer instance');
31
30
  function columnToSchema(column) {
32
- let schema;
33
- const dimensions = column.dimensions;
34
- if (typeof dimensions === "number" && dimensions > 0) return pgArrayColumnToSchema(column, dimensions);
35
- const { type: columnType, constraint } = (0, drizzle_orm.extractExtendedColumnType)(column);
36
- switch (columnType) {
37
- case "array":
38
- schema = arrayColumnToSchema(column, constraint);
39
- break;
40
- case "object":
41
- schema = objectColumnToSchema(column, constraint);
42
- break;
43
- case "number":
44
- schema = numberColumnToSchema(column, constraint);
45
- break;
46
- case "bigint":
47
- schema = bigintColumnToSchema(column, constraint);
48
- break;
49
- case "boolean":
50
- schema = arktype.type.boolean;
51
- break;
52
- case "string":
53
- schema = stringColumnToSchema(column, constraint);
54
- break;
55
- case "custom":
56
- schema = arktype.type.unknown;
57
- break;
58
- default: schema = arktype.type.unknown;
59
- }
60
- return schema;
31
+ let schema;
32
+ const { type: columnType, constraint } = drizzleOrm.extractExtendedColumnType(column);
33
+ switch (columnType) {
34
+ case 'array': {
35
+ schema = arrayColumnToSchema(column, constraint);
36
+ break;
37
+ }
38
+ case 'object': {
39
+ schema = objectColumnToSchema(column, constraint);
40
+ break;
41
+ }
42
+ case 'number': {
43
+ schema = numberColumnToSchema(column, constraint);
44
+ break;
45
+ }
46
+ case 'bigint': {
47
+ schema = bigintColumnToSchema(column, constraint);
48
+ break;
49
+ }
50
+ case 'boolean': {
51
+ schema = arktype.type.boolean;
52
+ break;
53
+ }
54
+ case 'string': {
55
+ schema = stringColumnToSchema(column, constraint);
56
+ break;
57
+ }
58
+ case 'custom': {
59
+ schema = arktype.type.unknown;
60
+ break;
61
+ }
62
+ default: {
63
+ schema = arktype.type.unknown;
64
+ }
65
+ }
66
+ return schema;
61
67
  }
62
68
  function numberColumnToSchema(column, constraint) {
63
- let min;
64
- let max;
65
- let integer = false;
66
- switch (constraint) {
67
- case "int8":
68
- min = CONSTANTS.INT8_MIN;
69
- max = CONSTANTS.INT8_MAX;
70
- integer = true;
71
- break;
72
- case "uint8":
73
- min = 0;
74
- max = CONSTANTS.INT8_UNSIGNED_MAX;
75
- integer = true;
76
- break;
77
- case "int16":
78
- min = CONSTANTS.INT16_MIN;
79
- max = CONSTANTS.INT16_MAX;
80
- integer = true;
81
- break;
82
- case "uint16":
83
- min = 0;
84
- max = CONSTANTS.INT16_UNSIGNED_MAX;
85
- integer = true;
86
- break;
87
- case "int24":
88
- min = CONSTANTS.INT24_MIN;
89
- max = CONSTANTS.INT24_MAX;
90
- integer = true;
91
- break;
92
- case "uint24":
93
- min = 0;
94
- max = CONSTANTS.INT24_UNSIGNED_MAX;
95
- integer = true;
96
- break;
97
- case "int32":
98
- min = CONSTANTS.INT32_MIN;
99
- max = CONSTANTS.INT32_MAX;
100
- integer = true;
101
- break;
102
- case "uint32":
103
- min = 0;
104
- max = CONSTANTS.INT32_UNSIGNED_MAX;
105
- integer = true;
106
- break;
107
- case "int53":
108
- min = Number.MIN_SAFE_INTEGER;
109
- max = Number.MAX_SAFE_INTEGER;
110
- integer = true;
111
- break;
112
- case "uint53":
113
- min = 0;
114
- max = Number.MAX_SAFE_INTEGER;
115
- integer = true;
116
- break;
117
- case "float":
118
- min = CONSTANTS.INT24_MIN;
119
- max = CONSTANTS.INT24_MAX;
120
- break;
121
- case "ufloat":
122
- min = 0;
123
- max = CONSTANTS.INT24_UNSIGNED_MAX;
124
- break;
125
- case "double":
126
- min = CONSTANTS.INT48_MIN;
127
- max = CONSTANTS.INT48_MAX;
128
- break;
129
- case "udouble":
130
- min = 0;
131
- max = CONSTANTS.INT48_UNSIGNED_MAX;
132
- break;
133
- case "year":
134
- min = 1901;
135
- max = 2155;
136
- integer = true;
137
- break;
138
- case "unsigned":
139
- min = 0;
140
- max = Number.MAX_SAFE_INTEGER;
141
- break;
142
- default:
143
- min = Number.MIN_SAFE_INTEGER;
144
- max = Number.MAX_SAFE_INTEGER;
145
- break;
146
- }
147
- return (integer ? arktype.type.keywords.number.integer : arktype.type.number).atLeast(min).atMost(max);
148
- }
149
- function pgArrayColumnToSchema(column, dimensions) {
150
- const [baseType, baseConstraint] = column.dataType.split(" ");
151
- let baseSchema;
152
- switch (baseType) {
153
- case "number":
154
- baseSchema = numberColumnToSchema(column, baseConstraint);
155
- break;
156
- case "bigint":
157
- baseSchema = bigintColumnToSchema(column, baseConstraint);
158
- break;
159
- case "boolean":
160
- baseSchema = arktype.type.boolean;
161
- break;
162
- case "string":
163
- baseSchema = stringColumnToSchema(column, baseConstraint);
164
- break;
165
- case "object":
166
- baseSchema = objectColumnToSchema(column, baseConstraint);
167
- break;
168
- case "array":
169
- baseSchema = arrayColumnToSchema(column, baseConstraint);
170
- break;
171
- default: baseSchema = arktype.type.unknown;
172
- }
173
- let schema = baseSchema.array();
174
- for (let i = 1; i < dimensions; i++) schema = schema.array();
175
- return schema;
69
+ let min;
70
+ let max;
71
+ let integer = false;
72
+ switch (constraint) {
73
+ case 'int8': {
74
+ min = CONSTANTS.INT8_MIN;
75
+ max = CONSTANTS.INT8_MAX;
76
+ integer = true;
77
+ break;
78
+ }
79
+ case 'uint8': {
80
+ min = 0;
81
+ max = CONSTANTS.INT8_UNSIGNED_MAX;
82
+ integer = true;
83
+ break;
84
+ }
85
+ case 'int16': {
86
+ min = CONSTANTS.INT16_MIN;
87
+ max = CONSTANTS.INT16_MAX;
88
+ integer = true;
89
+ break;
90
+ }
91
+ case 'uint16': {
92
+ min = 0;
93
+ max = CONSTANTS.INT16_UNSIGNED_MAX;
94
+ integer = true;
95
+ break;
96
+ }
97
+ case 'int24': {
98
+ min = CONSTANTS.INT24_MIN;
99
+ max = CONSTANTS.INT24_MAX;
100
+ integer = true;
101
+ break;
102
+ }
103
+ case 'uint24': {
104
+ min = 0;
105
+ max = CONSTANTS.INT24_UNSIGNED_MAX;
106
+ integer = true;
107
+ break;
108
+ }
109
+ case 'int32': {
110
+ min = CONSTANTS.INT32_MIN;
111
+ max = CONSTANTS.INT32_MAX;
112
+ integer = true;
113
+ break;
114
+ }
115
+ case 'uint32': {
116
+ min = 0;
117
+ max = CONSTANTS.INT32_UNSIGNED_MAX;
118
+ integer = true;
119
+ break;
120
+ }
121
+ case 'int53': {
122
+ min = Number.MIN_SAFE_INTEGER;
123
+ max = Number.MAX_SAFE_INTEGER;
124
+ integer = true;
125
+ break;
126
+ }
127
+ case 'uint53': {
128
+ min = 0;
129
+ max = Number.MAX_SAFE_INTEGER;
130
+ integer = true;
131
+ break;
132
+ }
133
+ case 'float': {
134
+ min = CONSTANTS.INT24_MIN;
135
+ max = CONSTANTS.INT24_MAX;
136
+ break;
137
+ }
138
+ case 'ufloat': {
139
+ min = 0;
140
+ max = CONSTANTS.INT24_UNSIGNED_MAX;
141
+ break;
142
+ }
143
+ case 'double': {
144
+ min = CONSTANTS.INT48_MIN;
145
+ max = CONSTANTS.INT48_MAX;
146
+ break;
147
+ }
148
+ case 'udouble': {
149
+ min = 0;
150
+ max = CONSTANTS.INT48_UNSIGNED_MAX;
151
+ break;
152
+ }
153
+ case 'year': {
154
+ min = 1901;
155
+ max = 2155;
156
+ integer = true;
157
+ break;
158
+ }
159
+ case 'unsigned': {
160
+ min = 0;
161
+ max = Number.MAX_SAFE_INTEGER;
162
+ break;
163
+ }
164
+ default: {
165
+ min = Number.MIN_SAFE_INTEGER;
166
+ max = Number.MAX_SAFE_INTEGER;
167
+ break;
168
+ }
169
+ }
170
+ return (integer ? arktype.type.keywords.number.integer : arktype.type.number).atLeast(min).atMost(max);
176
171
  }
177
172
  function arrayColumnToSchema(column, constraint) {
178
- switch (constraint) {
179
- case "geometry":
180
- case "point": return (0, arktype.type)([arktype.type.number, arktype.type.number]);
181
- case "line": return (0, arktype.type)([
182
- arktype.type.number,
183
- arktype.type.number,
184
- arktype.type.number
185
- ]);
186
- case "vector":
187
- case "halfvector": {
188
- const length = column.length;
189
- return length ? arktype.type.number.array().exactlyLength(length) : arktype.type.number.array();
190
- }
191
- case "int64vector": {
192
- const length = column.length;
193
- return length ? arktype.type.bigint.array().exactlyLength(length) : arktype.type.bigint.array();
194
- }
195
- case "basecolumn": {
196
- const baseColumn = column.baseColumn;
197
- if (baseColumn) {
198
- const length = column.length;
199
- const schema = columnToSchema(baseColumn).array();
200
- if (length) return schema.exactlyLength(length);
201
- return schema;
202
- }
203
- return arktype.type.unknown.array();
204
- }
205
- default: return arktype.type.unknown.array();
206
- }
173
+ switch (constraint) {
174
+ case 'geometry':
175
+ case 'point': {
176
+ return arktype.type([arktype.type.number, arktype.type.number]);
177
+ }
178
+ case 'line': {
179
+ return arktype.type([arktype.type.number, arktype.type.number, arktype.type.number]);
180
+ }
181
+ case 'vector':
182
+ case 'halfvector': {
183
+ const length = column.length;
184
+ return length ? arktype.type.number.array().exactlyLength(length) : arktype.type.number.array();
185
+ }
186
+ case 'int64vector': {
187
+ const length = column.length;
188
+ // TODO - INT64 number range
189
+ return length ? arktype.type.bigint.array().exactlyLength(length) : arktype.type.bigint.array();
190
+ }
191
+ case 'basecolumn': {
192
+ const length = column.length;
193
+ const schema = column.baseColumn
194
+ ? columnToSchema(column.baseColumn).array()
195
+ : arktype.type.unknown.array();
196
+ if (length)
197
+ return schema.exactlyLength(length);
198
+ return schema;
199
+ }
200
+ default: {
201
+ return arktype.type.unknown.array();
202
+ }
203
+ }
207
204
  }
208
205
  function objectColumnToSchema(column, constraint) {
209
- switch (constraint) {
210
- case "buffer": return bufferSchema;
211
- case "date": return arktype.type.Date;
212
- case "geometry":
213
- case "point": return (0, arktype.type)({
214
- x: arktype.type.number,
215
- y: arktype.type.number
216
- });
217
- case "json": return jsonSchema;
218
- case "line": return (0, arktype.type)({
219
- a: arktype.type.number,
220
- b: arktype.type.number,
221
- c: arktype.type.number
222
- });
223
- default: return (0, arktype.type)({});
224
- }
206
+ switch (constraint) {
207
+ case 'buffer': {
208
+ return bufferSchema;
209
+ }
210
+ case 'date': {
211
+ return arktype.type.Date;
212
+ }
213
+ case 'geometry':
214
+ case 'point': {
215
+ return arktype.type({
216
+ x: arktype.type.number,
217
+ y: arktype.type.number,
218
+ });
219
+ }
220
+ case 'json': {
221
+ return jsonSchema;
222
+ }
223
+ case 'line': {
224
+ return arktype.type({
225
+ a: arktype.type.number,
226
+ b: arktype.type.number,
227
+ c: arktype.type.number,
228
+ });
229
+ }
230
+ default: {
231
+ return arktype.type({});
232
+ }
233
+ }
225
234
  }
226
235
  /** @internal */
227
- const unsignedBigintNarrow = (v, ctx) => v < 0n ? ctx.mustBe("greater than") : v > CONSTANTS.INT64_UNSIGNED_MAX ? ctx.mustBe("less than") : true;
236
+ const unsignedBigintNarrow = (v, ctx) => v < 0n ? ctx.mustBe('greater than') : v > CONSTANTS.INT64_UNSIGNED_MAX ? ctx.mustBe('less than') : true;
228
237
  /** @internal */
229
- const bigintNarrow = (v, ctx) => v < CONSTANTS.INT64_MIN ? ctx.mustBe("greater than") : v > CONSTANTS.INT64_MAX ? ctx.mustBe("less than") : true;
238
+ const bigintNarrow = (v, ctx) => v < CONSTANTS.INT64_MIN ? ctx.mustBe('greater than') : v > CONSTANTS.INT64_MAX ? ctx.mustBe('less than') : true;
230
239
  /** @internal */
231
240
  const bigintStringModeSchema = arktype.type.string.narrow((v, ctx) => {
232
- if (typeof v !== "string") return ctx.mustBe("a string");
233
- if (!/^-?\d+$/.test(v)) return ctx.mustBe("a string representing a number");
234
- const bigint = BigInt(v);
235
- if (bigint < CONSTANTS.INT64_MIN) return ctx.mustBe("greater than");
236
- if (bigint > CONSTANTS.INT64_MAX) return ctx.mustBe("less than");
237
- return true;
241
+ if (typeof v !== 'string') {
242
+ return ctx.mustBe('a string');
243
+ }
244
+ if (!(/^-?\d+$/.test(v))) {
245
+ return ctx.mustBe('a string representing a number');
246
+ }
247
+ const bigint = BigInt(v);
248
+ if (bigint < CONSTANTS.INT64_MIN) {
249
+ return ctx.mustBe('greater than');
250
+ }
251
+ if (bigint > CONSTANTS.INT64_MAX) {
252
+ return ctx.mustBe('less than');
253
+ }
254
+ return true;
238
255
  });
239
256
  /** @internal */
240
257
  const unsignedBigintStringModeSchema = arktype.type.string.narrow((v, ctx) => {
241
- if (typeof v !== "string") return ctx.mustBe("a string");
242
- if (!/^\d+$/.test(v)) return ctx.mustBe("a string representing a number");
243
- const bigint = BigInt(v);
244
- if (bigint < 0) return ctx.mustBe("greater than");
245
- if (bigint > CONSTANTS.INT64_MAX) return ctx.mustBe("less than");
246
- return true;
258
+ if (typeof v !== 'string') {
259
+ return ctx.mustBe('a string');
260
+ }
261
+ if (!(/^\d+$/.test(v))) {
262
+ return ctx.mustBe('a string representing a number');
263
+ }
264
+ const bigint = BigInt(v);
265
+ if (bigint < 0) {
266
+ return ctx.mustBe('greater than');
267
+ }
268
+ if (bigint > CONSTANTS.INT64_MAX) {
269
+ return ctx.mustBe('less than');
270
+ }
271
+ return true;
247
272
  });
248
273
  function bigintColumnToSchema(column, constraint) {
249
- switch (constraint) {
250
- case "int64": return arktype.type.bigint.narrow(bigintNarrow);
251
- case "uint64": return arktype.type.bigint.narrow(unsignedBigintNarrow);
252
- }
253
- return arktype.type.bigint;
274
+ switch (constraint) {
275
+ case 'int64': {
276
+ return arktype.type.bigint.narrow(bigintNarrow);
277
+ }
278
+ case 'uint64': {
279
+ return arktype.type.bigint.narrow(unsignedBigintNarrow);
280
+ }
281
+ }
282
+ return arktype.type.bigint;
254
283
  }
255
284
  function stringColumnToSchema(column, constraint) {
256
- const { name: columnName, length, isLengthExact } = column;
257
- if (constraint === "binary") return (0, arktype.type)(`/^[01]${length ? `{${isLengthExact ? length : `0,${length}`}}` : "*"}$/`).describe(`a string containing ones or zeros${length ? ` while being ${isLengthExact ? "" : "up to "}${length} characters long` : ""}`);
258
- if (constraint === "uuid") return (0, arktype.type)(/^[\da-f]{8}(?:-[\da-f]{4}){3}-[\da-f]{12}$/iu).describe("a RFC-4122-compliant UUID");
259
- if (constraint === "enum") {
260
- const enumValues = column.enumValues;
261
- if (!enumValues) throw new Error(`Column "${(0, drizzle_orm.getTableName)((0, drizzle_orm.getColumnTable)(column))}"."${columnName}" is of 'enum' type, but lacks enum values`);
262
- return arktype.type.enumerated(...enumValues);
263
- }
264
- if (constraint === "int64") return bigintStringModeSchema;
265
- if (constraint === "uint64") return unsignedBigintStringModeSchema;
266
- return length && isLengthExact ? arktype.type.string.exactlyLength(length) : length ? arktype.type.string.atMostLength(length) : arktype.type.string;
285
+ const { name: columnName, length, isLengthExact } = column;
286
+ if (constraint === 'binary') {
287
+ return arktype.type(`/^[01]${length ? `{${isLengthExact ? length : `0,${length}`}}` : '*'}$/`)
288
+ .describe(`a string containing ones or zeros${length ? ` while being ${isLengthExact ? '' : 'up to '}${length} characters long` : ''}`);
289
+ }
290
+ if (constraint === 'uuid') {
291
+ return arktype.type(/^[\da-f]{8}(?:-[\da-f]{4}){3}-[\da-f]{12}$/iu).describe('a RFC-4122-compliant UUID');
292
+ }
293
+ if (constraint === 'enum') {
294
+ const enumValues = column.enumValues;
295
+ if (!enumValues) {
296
+ throw new Error(`Column "${drizzleOrm.getTableName(drizzleOrm.getColumnTable(column))}"."${columnName}" is of 'enum' type, but lacks enum values`);
297
+ }
298
+ return arktype.type.enumerated(...enumValues);
299
+ }
300
+ if (constraint === 'int64') {
301
+ return bigintStringModeSchema;
302
+ }
303
+ if (constraint === 'uint64') {
304
+ return unsignedBigintStringModeSchema;
305
+ }
306
+ return length && isLengthExact
307
+ ? arktype.type.string.exactlyLength(length)
308
+ : length
309
+ ? arktype.type.string.atMostLength(length)
310
+ : arktype.type.string;
267
311
  }
268
312
 
269
- //#endregion
270
- //#region src/utils.ts
271
313
  function isColumnType(column, columnTypes) {
272
- return columnTypes.includes(column.columnType);
314
+ return columnTypes.includes(column.columnType);
273
315
  }
274
316
  function isWithEnum(column) {
275
- return "enumValues" in column && Array.isArray(column.enumValues) && column.enumValues.length > 0;
317
+ return 'enumValues' in column && Array.isArray(column.enumValues) && column.enumValues.length > 0;
276
318
  }
277
319
  const isPgEnum = isWithEnum;
278
320
 
279
- //#endregion
280
- //#region src/schema.ts
281
321
  function getColumns(tableLike) {
282
- return (0, drizzle_orm.isTable)(tableLike) ? (0, drizzle_orm.getTableColumns)(tableLike) : (0, drizzle_orm.getViewSelectedFields)(tableLike);
322
+ return drizzleOrm.isTable(tableLike) ? drizzleOrm.getTableColumns(tableLike) : drizzleOrm.getViewSelectedFields(tableLike);
283
323
  }
284
324
  function handleColumns(columns, refinements, conditions) {
285
- const columnSchemas = {};
286
- for (const [key, selected] of Object.entries(columns)) {
287
- 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") {
288
- columnSchemas[key] = handleColumns((0, drizzle_orm.isTable)(selected) || (0, drizzle_orm.isView)(selected) ? getColumns(selected) : selected, refinements[key] ?? {}, conditions);
289
- continue;
290
- }
291
- const refinement = refinements[key];
292
- if (refinement !== void 0 && (typeof refinement !== "function" || typeof refinement === "function" && refinement.expression !== void 0)) {
293
- columnSchemas[key] = refinement;
294
- continue;
295
- }
296
- const column = (0, drizzle_orm.is)(selected, drizzle_orm.Column) ? selected : void 0;
297
- const schema = column ? columnToSchema(column) : arktype.type.unknown;
298
- const refined = typeof refinement === "function" ? refinement(schema) : schema;
299
- if (conditions.never(column)) continue;
300
- else columnSchemas[key] = refined;
301
- if (column) {
302
- if (conditions.nullable(column)) columnSchemas[key] = columnSchemas[key].or(arktype.type.null);
303
- if (conditions.optional(column)) columnSchemas[key] = columnSchemas[key].optional();
304
- }
305
- }
306
- return (0, arktype.type)(columnSchemas);
325
+ const columnSchemas = {};
326
+ for (const [key, selected] of Object.entries(columns)) {
327
+ if (!drizzleOrm.is(selected, drizzleOrm.Column) && !drizzleOrm.is(selected, drizzleOrm.SQL) && !drizzleOrm.is(selected, drizzleOrm.SQL.Aliased) && typeof selected === 'object') {
328
+ const columns = drizzleOrm.isTable(selected) || drizzleOrm.isView(selected) ? getColumns(selected) : selected;
329
+ columnSchemas[key] = handleColumns(columns, refinements[key] ?? {}, conditions);
330
+ continue;
331
+ }
332
+ const refinement = refinements[key];
333
+ if (refinement !== undefined
334
+ && (typeof refinement !== 'function' || (typeof refinement === 'function' && refinement.expression !== undefined))) {
335
+ columnSchemas[key] = refinement;
336
+ continue;
337
+ }
338
+ const column = drizzleOrm.is(selected, drizzleOrm.Column) ? selected : undefined;
339
+ const schema = column ? columnToSchema(column) : arktype.type.unknown;
340
+ const refined = typeof refinement === 'function' ? refinement(schema) : schema;
341
+ if (conditions.never(column)) {
342
+ continue;
343
+ }
344
+ else {
345
+ columnSchemas[key] = refined;
346
+ }
347
+ if (column) {
348
+ if (conditions.nullable(column)) {
349
+ columnSchemas[key] = columnSchemas[key].or(arktype.type.null);
350
+ }
351
+ if (conditions.optional(column)) {
352
+ columnSchemas[key] = columnSchemas[key].optional();
353
+ }
354
+ }
355
+ }
356
+ return arktype.type(columnSchemas);
307
357
  }
308
358
  const createSelectSchema = ((entity, refine) => {
309
- if (isPgEnum(entity)) return arktype.type.enumerated(...entity.enumValues);
310
- return handleColumns(getColumns(entity), refine ?? {}, {
311
- never: () => false,
312
- optional: () => false,
313
- nullable: (column) => !column.notNull
314
- });
359
+ if (isPgEnum(entity)) {
360
+ return arktype.type.enumerated(...entity.enumValues);
361
+ }
362
+ const columns = getColumns(entity);
363
+ return handleColumns(columns, refine ?? {}, {
364
+ never: () => false,
365
+ optional: () => false,
366
+ nullable: (column) => !column.notNull,
367
+ });
315
368
  });
316
369
  const createInsertSchema = ((entity, refine) => {
317
- return handleColumns(getColumns(entity), refine ?? {}, {
318
- never: (column) => column?.generated?.type === "always" || column?.generatedIdentity?.type === "always" || "identity" in (column ?? {}) && typeof column?.identity !== "undefined",
319
- optional: (column) => !column.notNull || column.notNull && column.hasDefault,
320
- nullable: (column) => !column.notNull
321
- });
370
+ const columns = getColumns(entity);
371
+ return handleColumns(columns, refine ?? {}, {
372
+ never: (column) => column?.generated?.type === 'always' || column?.generatedIdentity?.type === 'always'
373
+ || ('identity' in (column ?? {}) && typeof column?.identity !== 'undefined'),
374
+ optional: (column) => !column.notNull || (column.notNull && column.hasDefault),
375
+ nullable: (column) => !column.notNull,
376
+ });
322
377
  });
323
378
  const createUpdateSchema = ((entity, refine) => {
324
- return handleColumns(getColumns(entity), refine ?? {}, {
325
- never: (column) => column?.generated?.type === "always" || column?.generatedIdentity?.type === "always" || "identity" in (column ?? {}) && typeof column?.identity !== "undefined",
326
- optional: () => true,
327
- nullable: (column) => !column.notNull
328
- });
379
+ const columns = getColumns(entity);
380
+ return handleColumns(columns, refine ?? {}, {
381
+ never: (column) => column?.generated?.type === 'always' || column?.generatedIdentity?.type === 'always'
382
+ || ('identity' in (column ?? {}) && typeof column?.identity !== 'undefined'),
383
+ optional: () => true,
384
+ nullable: (column) => !column.notNull,
385
+ });
329
386
  });
330
387
 
331
- //#endregion
332
388
  exports.bufferSchema = bufferSchema;
333
389
  exports.createInsertSchema = createInsertSchema;
334
390
  exports.createSelectSchema = createSelectSchema;
@@ -338,4 +394,4 @@ exports.isPgEnum = isPgEnum;
338
394
  exports.isWithEnum = isWithEnum;
339
395
  exports.jsonSchema = jsonSchema;
340
396
  exports.literalSchema = literalSchema;
341
- //# sourceMappingURL=index.cjs.map
397
+ //# sourceMappingURL=index.cjs.map