drizzle-arktype 1.0.0-beta.6-cefee57 → 1.0.0-beta.6-ea4d663

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