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 +371 -310
- 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 +371 -308
- package/index.mjs.map +1 -1
- package/package.json +71 -72
- package/column.d.cts +0 -10
- package/column.d.mts +0 -10
- package/column.d.ts +0 -10
- package/column.types.d.cts +0 -25
- package/column.types.d.mts +0 -25
- package/column.types.d.ts +0 -25
- 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 -23
- package/schema.types.d.mts +0 -23
- package/schema.types.d.ts +0 -23
- 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 -30
- package/utils.d.mts +0 -30
- package/utils.d.ts +0 -30
package/index.cjs
CHANGED
|
@@ -1,345 +1,406 @@
|
|
|
1
|
-
|
|
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
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
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
|
-
|
|
28
|
-
|
|
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
|
|
31
|
-
|
|
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
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
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
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
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
|
-
|
|
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
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
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
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
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
|
|
205
|
-
|
|
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
|
-
|
|
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
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
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
|
-
|
|
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
|
-
|
|
296
|
-
|
|
297
|
-
|
|
361
|
+
never: () => false,
|
|
362
|
+
optional: () => false,
|
|
363
|
+
nullable: (column) => !column.notNull
|
|
298
364
|
};
|
|
299
365
|
const insertConditions = {
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
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
|
-
|
|
306
|
-
|
|
307
|
-
|
|
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
|
-
|
|
311
|
-
|
|
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
|
-
|
|
318
|
-
return handleColumns(columns, refine ?? {}, insertConditions);
|
|
380
|
+
return handleColumns(getColumns(entity), refine ?? {}, insertConditions);
|
|
319
381
|
};
|
|
320
382
|
const createUpdateSchema = (entity, refine) => {
|
|
321
|
-
|
|
322
|
-
return handleColumns(columns, refine ?? {}, updateConditions);
|
|
383
|
+
return handleColumns(getColumns(entity), refine ?? {}, updateConditions);
|
|
323
384
|
};
|
|
324
385
|
function createSchemaFactory(options) {
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
|
|
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
|