drizzle-typebox 1.0.0-beta.6-ea4d663 → 1.0.0-beta.6-b046b02
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 +356 -402
- package/index.cjs.map +1 -1
- package/index.d.cts +122 -6
- package/index.d.mts +122 -6
- package/index.d.ts +122 -6
- package/index.mjs +350 -394
- package/index.mjs.map +1 -1
- package/package.json +2 -3
- package/column.d.cts +0 -10
- package/column.d.mts +0 -10
- package/column.d.ts +0 -10
- package/column.types.d.cts +0 -27
- package/column.types.d.mts +0 -27
- package/column.types.d.ts +0 -27
- package/constants.d.cts +0 -20
- package/constants.d.mts +0 -20
- package/constants.d.ts +0 -20
- package/schema.d.cts +0 -18
- package/schema.d.mts +0 -18
- package/schema.d.ts +0 -18
- package/schema.types.d.cts +0 -24
- package/schema.types.d.mts +0 -24
- package/schema.types.d.ts +0 -24
- package/schema.types.internal.d.cts +0 -22
- package/schema.types.internal.d.mts +0 -22
- package/schema.types.internal.d.ts +0 -22
- package/utils.d.cts +0 -39
- package/utils.d.mts +0 -39
- package/utils.d.ts +0 -39
package/index.mjs
CHANGED
|
@@ -1,449 +1,405 @@
|
|
|
1
|
-
import { Type, TypeRegistry
|
|
2
|
-
import {
|
|
1
|
+
import { Kind, Type, TypeRegistry } from "@sinclair/typebox";
|
|
2
|
+
import { Column, SQL, extractExtendedColumnType, getColumnTable, getTableColumns, getTableName, getViewSelectedFields, is, isTable, isView } from "drizzle-orm";
|
|
3
3
|
|
|
4
|
+
//#region src/constants.ts
|
|
4
5
|
const CONSTANTS = {
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
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
|
|
23
24
|
};
|
|
24
25
|
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
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
|
+
};
|
|
29
44
|
function mapEnumValues(values) {
|
|
30
|
-
|
|
45
|
+
return Object.fromEntries(values.map((value) => [value, value]));
|
|
31
46
|
}
|
|
32
47
|
function columnToSchema(column, t) {
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
break;
|
|
63
|
-
}
|
|
64
|
-
default: {
|
|
65
|
-
schema = t.Any();
|
|
66
|
-
}
|
|
67
|
-
}
|
|
68
|
-
return schema;
|
|
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;
|
|
69
77
|
}
|
|
70
78
|
function numberColumnToSchema(column, constraint, t) {
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
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
|
-
});
|
|
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
|
+
});
|
|
177
167
|
}
|
|
178
|
-
TypeRegistry.Set(
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
if (bigint < CONSTANTS.INT64_MIN || bigint > CONSTANTS.INT64_MAX) {
|
|
184
|
-
return false;
|
|
185
|
-
}
|
|
186
|
-
return true;
|
|
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;
|
|
187
173
|
});
|
|
188
|
-
TypeRegistry.Set(
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
if (bigint < 0 || bigint > CONSTANTS.INT64_MAX) {
|
|
194
|
-
return false;
|
|
195
|
-
}
|
|
196
|
-
return true;
|
|
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;
|
|
197
179
|
});
|
|
198
180
|
/** @internal */
|
|
199
181
|
const bigintStringModeSchema = {
|
|
200
|
-
|
|
201
|
-
|
|
182
|
+
[Kind]: "BigIntStringMode",
|
|
183
|
+
type: "string"
|
|
202
184
|
};
|
|
203
185
|
/** @internal */
|
|
204
186
|
const unsignedBigintStringModeSchema = {
|
|
205
|
-
|
|
206
|
-
|
|
187
|
+
[Kind]: "UnsignedBigIntStringMode",
|
|
188
|
+
type: "string"
|
|
207
189
|
};
|
|
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
|
+
}
|
|
208
218
|
function arrayColumnToSchema(column, constraint, t) {
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
: t.Array(t.Any(), sizeParam);
|
|
252
|
-
}
|
|
253
|
-
default: {
|
|
254
|
-
return t.Array(t.Any());
|
|
255
|
-
}
|
|
256
|
-
}
|
|
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
|
+
}
|
|
257
261
|
}
|
|
258
262
|
function objectColumnToSchema(column, constraint, t) {
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
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
|
-
}
|
|
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
|
+
}
|
|
287
279
|
}
|
|
288
280
|
function bigintColumnToSchema(column, constraint, t) {
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
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);
|
|
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);
|
|
311
297
|
}
|
|
312
298
|
function stringColumnToSchema(column, constraint, t) {
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
|
|
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);
|
|
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);
|
|
347
316
|
}
|
|
348
317
|
|
|
318
|
+
//#endregion
|
|
319
|
+
//#region src/utils.ts
|
|
349
320
|
function isColumnType(column, columnTypes) {
|
|
350
|
-
|
|
321
|
+
return columnTypes.includes(column.columnType);
|
|
351
322
|
}
|
|
352
323
|
function isWithEnum(column) {
|
|
353
|
-
|
|
324
|
+
return "enumValues" in column && Array.isArray(column.enumValues) && column.enumValues.length > 0;
|
|
354
325
|
}
|
|
355
326
|
const isPgEnum = isWithEnum;
|
|
356
327
|
|
|
328
|
+
//#endregion
|
|
329
|
+
//#region src/schema.ts
|
|
357
330
|
function getColumns(tableLike) {
|
|
358
|
-
|
|
331
|
+
return isTable(tableLike) ? getTableColumns(tableLike) : getViewSelectedFields(tableLike);
|
|
359
332
|
}
|
|
360
333
|
function handleColumns(columns, refinements, conditions, factory) {
|
|
361
|
-
|
|
362
|
-
|
|
363
|
-
|
|
364
|
-
|
|
365
|
-
|
|
366
|
-
|
|
367
|
-
|
|
368
|
-
|
|
369
|
-
|
|
370
|
-
|
|
371
|
-
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
|
|
377
|
-
|
|
378
|
-
|
|
379
|
-
|
|
380
|
-
|
|
381
|
-
|
|
382
|
-
|
|
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);
|
|
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);
|
|
392
356
|
}
|
|
393
357
|
function handleEnum(enum_, factory) {
|
|
394
|
-
|
|
395
|
-
return typebox.Enum(mapEnumValues(enum_.enumValues));
|
|
358
|
+
return (factory?.typeboxInstance ?? Type).Enum(mapEnumValues(enum_.enumValues));
|
|
396
359
|
}
|
|
397
360
|
const selectConditions = {
|
|
398
|
-
|
|
399
|
-
|
|
400
|
-
|
|
361
|
+
never: () => false,
|
|
362
|
+
optional: () => false,
|
|
363
|
+
nullable: (column) => !column.notNull
|
|
401
364
|
};
|
|
402
365
|
const insertConditions = {
|
|
403
|
-
|
|
404
|
-
|
|
405
|
-
|
|
406
|
-
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
|
|
407
369
|
};
|
|
408
370
|
const updateConditions = {
|
|
409
|
-
|
|
410
|
-
|
|
411
|
-
|
|
412
|
-
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
|
|
413
374
|
};
|
|
414
375
|
const createSelectSchema = (entity, refine) => {
|
|
415
|
-
|
|
416
|
-
|
|
417
|
-
}
|
|
418
|
-
const columns = getColumns(entity);
|
|
419
|
-
return handleColumns(columns, refine ?? {}, selectConditions);
|
|
376
|
+
if (isPgEnum(entity)) return handleEnum(entity);
|
|
377
|
+
return handleColumns(getColumns(entity), refine ?? {}, selectConditions);
|
|
420
378
|
};
|
|
421
379
|
const createInsertSchema = (entity, refine) => {
|
|
422
|
-
|
|
423
|
-
return handleColumns(columns, refine ?? {}, insertConditions);
|
|
380
|
+
return handleColumns(getColumns(entity), refine ?? {}, insertConditions);
|
|
424
381
|
};
|
|
425
382
|
const createUpdateSchema = (entity, refine) => {
|
|
426
|
-
|
|
427
|
-
return handleColumns(columns, refine ?? {}, updateConditions);
|
|
383
|
+
return handleColumns(getColumns(entity), refine ?? {}, updateConditions);
|
|
428
384
|
};
|
|
429
385
|
function createSchemaFactory(options) {
|
|
430
|
-
|
|
431
|
-
|
|
432
|
-
|
|
433
|
-
|
|
434
|
-
|
|
435
|
-
|
|
436
|
-
|
|
437
|
-
|
|
438
|
-
|
|
439
|
-
|
|
440
|
-
|
|
441
|
-
|
|
442
|
-
|
|
443
|
-
|
|
444
|
-
|
|
445
|
-
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
|
+
};
|
|
446
401
|
}
|
|
447
402
|
|
|
403
|
+
//#endregion
|
|
448
404
|
export { bufferSchema, createInsertSchema, createSchemaFactory, createSelectSchema, createUpdateSchema, getColumns, handleColumns, handleEnum, isColumnType, isPgEnum, isWithEnum, jsonSchema, literalSchema };
|
|
449
|
-
//# sourceMappingURL=index.mjs.map
|
|
405
|
+
//# sourceMappingURL=index.mjs.map
|