drizzle-valibot 0.4.1 → 0.4.2
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/column.types.d.cts +20 -25
- package/column.types.d.mts +20 -25
- package/column.types.d.ts +20 -25
- package/package.json +4 -4
- package/schema.types.internal.d.cts +11 -13
- package/schema.types.internal.d.mts +11 -13
- package/schema.types.internal.d.ts +11 -13
- package/utils.d.cts +4 -4
- package/utils.d.mts +4 -4
- package/utils.d.ts +4 -4
package/column.types.d.cts
CHANGED
|
@@ -1,12 +1,11 @@
|
|
|
1
1
|
import type { Assume, Column } from 'drizzle-orm';
|
|
2
2
|
import type * as v from 'valibot';
|
|
3
|
-
import type {
|
|
4
|
-
export type
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
} ? IsNever<TColumn['_']['baseColumn']> extends false ? TColumn['_']['baseColumn'] : undefined : undefined;
|
|
3
|
+
import type { IsEnumDefined, IsNever, Json, RemoveNeverElements } from "./utils.cjs";
|
|
4
|
+
export type HasBaseColumn<TColumn> = TColumn extends {
|
|
5
|
+
_: {
|
|
6
|
+
baseColumn: Column | undefined;
|
|
7
|
+
};
|
|
8
|
+
} ? IsNever<TColumn['_']['baseColumn']> extends false ? true : false : false;
|
|
10
9
|
export type EnumValuesToEnum<TEnumValues extends [string, ...string[]]> = {
|
|
11
10
|
readonly [K in TEnumValues[number]]: K;
|
|
12
11
|
};
|
|
@@ -21,8 +20,8 @@ export type ExtractAdditionalProperties<TColumn extends Column> = {
|
|
|
21
20
|
fixedLength: TColumn['_']['columnType'] extends 'PgChar' | 'PgHalfVector' | 'PgVector' | 'PgArray' | 'MySqlChar' | 'SingleStoreChar' ? true : false;
|
|
22
21
|
};
|
|
23
22
|
type GetLengthAction<T extends Record<string, any>, TType extends string | ArrayLike<unknown>> = T['fixedLength'] extends true ? v.LengthAction<TType, number, undefined> : v.MaxLengthAction<TType, number, undefined>;
|
|
24
|
-
type GetArraySchema<T extends Column> = v.ArraySchema<GetValibotType<T['_']['data'], T['_']['dataType'], T['_']['columnType'],
|
|
25
|
-
export type GetValibotType<TData, TDataType extends string, TColumnType extends string, TEnumValues extends
|
|
23
|
+
type GetArraySchema<T extends Column> = v.ArraySchema<GetValibotType<T['_']['data'], T['_']['dataType'], T['_']['columnType'], T['_']['enumValues'], HasBaseColumn<T> extends true ? Assume<T['_']['baseColumn'], Column> : undefined, ExtractAdditionalProperties<T>>, undefined>;
|
|
24
|
+
export type GetValibotType<TData, TDataType extends string, TColumnType extends string, TEnumValues extends string[] | undefined, TBaseColumn extends Column | undefined, TAdditionalProperties extends Record<string, any>> = TColumnType extends 'PgHalfVector' | 'PgVector' ? TAdditionalProperties['max'] extends number ? v.SchemaWithPipe<[
|
|
26
25
|
v.ArraySchema<v.NumberSchema<undefined>, undefined>,
|
|
27
26
|
GetLengthAction<TAdditionalProperties, number[]>
|
|
28
27
|
]> : v.ArraySchema<v.NumberSchema<undefined>, undefined> : TColumnType extends 'PgUUID' ? v.SchemaWithPipe<[v.StringSchema<undefined>, v.UuidAction<string, undefined>]> : TColumnType extends 'PgBinaryVector' ? v.SchemaWithPipe<RemoveNeverElements<[
|
|
@@ -30,22 +29,18 @@ export type GetValibotType<TData, TDataType extends string, TColumnType extends
|
|
|
30
29
|
v.RegexAction<string, undefined>,
|
|
31
30
|
TAdditionalProperties['max'] extends number ? GetLengthAction<TAdditionalProperties, string> : never
|
|
32
31
|
]>> : TBaseColumn extends Column ? TAdditionalProperties['max'] extends number ? v.SchemaWithPipe<[
|
|
33
|
-
GetArraySchema<TBaseColumn
|
|
34
|
-
GetLengthAction<TAdditionalProperties, TBaseColumn['_']['data'][]>
|
|
35
|
-
]> : GetArraySchema<TBaseColumn
|
|
36
|
-
[K in
|
|
37
|
-
|
|
38
|
-
}>;
|
|
39
|
-
}, [
|
|
40
|
-
any,
|
|
41
|
-
...any[]
|
|
42
|
-
]>, undefined> : TData extends Date ? v.DateSchema<undefined> : TData extends Buffer ? v.GenericSchema<Buffer> : TDataType extends 'array' ? v.ArraySchema<GetValibotType<Assume<TData, any[]>[number], string, string, undefined, undefined, {
|
|
32
|
+
GetArraySchema<Assume<TBaseColumn, Column>>,
|
|
33
|
+
GetLengthAction<TAdditionalProperties, Assume<TBaseColumn, Column>['_']['data'][]>
|
|
34
|
+
]> : GetArraySchema<Assume<TBaseColumn, Column>> : IsEnumDefined<TEnumValues> extends true ? v.EnumSchema<{
|
|
35
|
+
readonly [K in Assume<TEnumValues, [string, ...string[]]>[number]]: K;
|
|
36
|
+
}, undefined> : TColumnType extends 'PgGeometry' | 'PgPointTuple' ? v.TupleSchema<[v.NumberSchema<undefined>, v.NumberSchema<undefined>], undefined> : TColumnType extends 'PgLine' ? v.TupleSchema<[v.NumberSchema<undefined>, v.NumberSchema<undefined>, v.NumberSchema<undefined>], undefined> : TData extends Date ? v.DateSchema<undefined> : TData extends Buffer ? v.GenericSchema<Buffer> : TDataType extends 'array' ? v.ArraySchema<GetValibotPrimitiveType<Assume<TData, any[]>[number], '', {
|
|
43
37
|
noPipe: true;
|
|
44
|
-
}>, undefined> : TData extends
|
|
45
|
-
readonly [K in keyof
|
|
38
|
+
}>, undefined> : TData extends Record<string, any> ? TColumnType extends 'PgJson' | 'PgJsonb' | 'MySqlJson' | 'SingleStoreJson' | 'SQLiteTextJson' | 'SQLiteBlobJson' ? v.GenericSchema<TData> : v.ObjectSchema<{
|
|
39
|
+
readonly [K in keyof TData]: GetValibotPrimitiveType<TData[K], '', {
|
|
46
40
|
noPipe: true;
|
|
47
41
|
}>;
|
|
48
|
-
}, undefined> : TDataType extends 'json' ? v.GenericSchema<Json> : TData
|
|
42
|
+
}, undefined> : TDataType extends 'json' ? v.GenericSchema<Json> : GetValibotPrimitiveType<TData, TColumnType, TAdditionalProperties>;
|
|
43
|
+
type GetValibotPrimitiveType<TData, TColumnType, TAdditionalProperties extends Record<string, any>> = TData extends number ? TAdditionalProperties['noPipe'] extends true ? v.NumberSchema<undefined> : v.SchemaWithPipe<RemoveNeverElements<[
|
|
49
44
|
v.NumberSchema<undefined>,
|
|
50
45
|
v.MinValueAction<number, number, undefined>,
|
|
51
46
|
v.MaxValueAction<number, number, undefined>,
|
|
@@ -56,7 +51,7 @@ export type GetValibotType<TData, TDataType extends string, TColumnType extends
|
|
|
56
51
|
v.MaxValueAction<bigint, bigint, undefined>
|
|
57
52
|
]> : TData extends boolean ? v.BooleanSchema<undefined> : TData extends string ? TAdditionalProperties['max'] extends number ? v.SchemaWithPipe<[v.StringSchema<undefined>, GetLengthAction<TAdditionalProperties, string>]> : v.StringSchema<undefined> : v.AnySchema;
|
|
58
53
|
type HandleSelectColumn<TSchema extends v.GenericSchema, TColumn extends Column> = TColumn['_']['notNull'] extends true ? TSchema : v.NullableSchema<TSchema, undefined>;
|
|
59
|
-
type HandleInsertColumn<TSchema extends v.GenericSchema, TColumn extends Column> =
|
|
60
|
-
type HandleUpdateColumn<TSchema extends v.GenericSchema, TColumn extends Column> =
|
|
61
|
-
export type HandleColumn<TType extends 'select' | 'insert' | 'update', TColumn extends Column> = GetValibotType<TColumn['_']['data'], TColumn['_']['dataType'], TColumn['_']['columnType'],
|
|
54
|
+
type HandleInsertColumn<TSchema extends v.GenericSchema, TColumn extends Column> = TColumn['_']['notNull'] extends true ? TColumn['_']['hasDefault'] extends true ? v.OptionalSchema<TSchema, undefined> : TSchema : v.OptionalSchema<v.NullableSchema<TSchema, undefined>, undefined>;
|
|
55
|
+
type HandleUpdateColumn<TSchema extends v.GenericSchema, TColumn extends Column> = TColumn['_']['notNull'] extends true ? v.OptionalSchema<TSchema, undefined> : v.OptionalSchema<v.NullableSchema<TSchema, undefined>, undefined>;
|
|
56
|
+
export type HandleColumn<TType extends 'select' | 'insert' | 'update', TColumn extends Column> = GetValibotType<TColumn['_']['data'], TColumn['_']['dataType'], TColumn['_']['columnType'], TColumn['_']['enumValues'], HasBaseColumn<TColumn> extends true ? Assume<TColumn['_']['baseColumn'], Column> : undefined, ExtractAdditionalProperties<TColumn>> extends infer TSchema extends v.GenericSchema ? TSchema extends v.AnySchema ? v.AnySchema : TType extends 'select' ? HandleSelectColumn<TSchema, TColumn> : TType extends 'insert' ? HandleInsertColumn<TSchema, TColumn> : TType extends 'update' ? HandleUpdateColumn<TSchema, TColumn> : TSchema : v.AnySchema;
|
|
62
57
|
export {};
|
package/column.types.d.mts
CHANGED
|
@@ -1,12 +1,11 @@
|
|
|
1
1
|
import type { Assume, Column } from 'drizzle-orm';
|
|
2
2
|
import type * as v from 'valibot';
|
|
3
|
-
import type {
|
|
4
|
-
export type
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
} ? IsNever<TColumn['_']['baseColumn']> extends false ? TColumn['_']['baseColumn'] : undefined : undefined;
|
|
3
|
+
import type { IsEnumDefined, IsNever, Json, RemoveNeverElements } from "./utils.mjs";
|
|
4
|
+
export type HasBaseColumn<TColumn> = TColumn extends {
|
|
5
|
+
_: {
|
|
6
|
+
baseColumn: Column | undefined;
|
|
7
|
+
};
|
|
8
|
+
} ? IsNever<TColumn['_']['baseColumn']> extends false ? true : false : false;
|
|
10
9
|
export type EnumValuesToEnum<TEnumValues extends [string, ...string[]]> = {
|
|
11
10
|
readonly [K in TEnumValues[number]]: K;
|
|
12
11
|
};
|
|
@@ -21,8 +20,8 @@ export type ExtractAdditionalProperties<TColumn extends Column> = {
|
|
|
21
20
|
fixedLength: TColumn['_']['columnType'] extends 'PgChar' | 'PgHalfVector' | 'PgVector' | 'PgArray' | 'MySqlChar' | 'SingleStoreChar' ? true : false;
|
|
22
21
|
};
|
|
23
22
|
type GetLengthAction<T extends Record<string, any>, TType extends string | ArrayLike<unknown>> = T['fixedLength'] extends true ? v.LengthAction<TType, number, undefined> : v.MaxLengthAction<TType, number, undefined>;
|
|
24
|
-
type GetArraySchema<T extends Column> = v.ArraySchema<GetValibotType<T['_']['data'], T['_']['dataType'], T['_']['columnType'],
|
|
25
|
-
export type GetValibotType<TData, TDataType extends string, TColumnType extends string, TEnumValues extends
|
|
23
|
+
type GetArraySchema<T extends Column> = v.ArraySchema<GetValibotType<T['_']['data'], T['_']['dataType'], T['_']['columnType'], T['_']['enumValues'], HasBaseColumn<T> extends true ? Assume<T['_']['baseColumn'], Column> : undefined, ExtractAdditionalProperties<T>>, undefined>;
|
|
24
|
+
export type GetValibotType<TData, TDataType extends string, TColumnType extends string, TEnumValues extends string[] | undefined, TBaseColumn extends Column | undefined, TAdditionalProperties extends Record<string, any>> = TColumnType extends 'PgHalfVector' | 'PgVector' ? TAdditionalProperties['max'] extends number ? v.SchemaWithPipe<[
|
|
26
25
|
v.ArraySchema<v.NumberSchema<undefined>, undefined>,
|
|
27
26
|
GetLengthAction<TAdditionalProperties, number[]>
|
|
28
27
|
]> : v.ArraySchema<v.NumberSchema<undefined>, undefined> : TColumnType extends 'PgUUID' ? v.SchemaWithPipe<[v.StringSchema<undefined>, v.UuidAction<string, undefined>]> : TColumnType extends 'PgBinaryVector' ? v.SchemaWithPipe<RemoveNeverElements<[
|
|
@@ -30,22 +29,18 @@ export type GetValibotType<TData, TDataType extends string, TColumnType extends
|
|
|
30
29
|
v.RegexAction<string, undefined>,
|
|
31
30
|
TAdditionalProperties['max'] extends number ? GetLengthAction<TAdditionalProperties, string> : never
|
|
32
31
|
]>> : TBaseColumn extends Column ? TAdditionalProperties['max'] extends number ? v.SchemaWithPipe<[
|
|
33
|
-
GetArraySchema<TBaseColumn
|
|
34
|
-
GetLengthAction<TAdditionalProperties, TBaseColumn['_']['data'][]>
|
|
35
|
-
]> : GetArraySchema<TBaseColumn
|
|
36
|
-
[K in
|
|
37
|
-
|
|
38
|
-
}>;
|
|
39
|
-
}, [
|
|
40
|
-
any,
|
|
41
|
-
...any[]
|
|
42
|
-
]>, undefined> : TData extends Date ? v.DateSchema<undefined> : TData extends Buffer ? v.GenericSchema<Buffer> : TDataType extends 'array' ? v.ArraySchema<GetValibotType<Assume<TData, any[]>[number], string, string, undefined, undefined, {
|
|
32
|
+
GetArraySchema<Assume<TBaseColumn, Column>>,
|
|
33
|
+
GetLengthAction<TAdditionalProperties, Assume<TBaseColumn, Column>['_']['data'][]>
|
|
34
|
+
]> : GetArraySchema<Assume<TBaseColumn, Column>> : IsEnumDefined<TEnumValues> extends true ? v.EnumSchema<{
|
|
35
|
+
readonly [K in Assume<TEnumValues, [string, ...string[]]>[number]]: K;
|
|
36
|
+
}, undefined> : TColumnType extends 'PgGeometry' | 'PgPointTuple' ? v.TupleSchema<[v.NumberSchema<undefined>, v.NumberSchema<undefined>], undefined> : TColumnType extends 'PgLine' ? v.TupleSchema<[v.NumberSchema<undefined>, v.NumberSchema<undefined>, v.NumberSchema<undefined>], undefined> : TData extends Date ? v.DateSchema<undefined> : TData extends Buffer ? v.GenericSchema<Buffer> : TDataType extends 'array' ? v.ArraySchema<GetValibotPrimitiveType<Assume<TData, any[]>[number], '', {
|
|
43
37
|
noPipe: true;
|
|
44
|
-
}>, undefined> : TData extends
|
|
45
|
-
readonly [K in keyof
|
|
38
|
+
}>, undefined> : TData extends Record<string, any> ? TColumnType extends 'PgJson' | 'PgJsonb' | 'MySqlJson' | 'SingleStoreJson' | 'SQLiteTextJson' | 'SQLiteBlobJson' ? v.GenericSchema<TData> : v.ObjectSchema<{
|
|
39
|
+
readonly [K in keyof TData]: GetValibotPrimitiveType<TData[K], '', {
|
|
46
40
|
noPipe: true;
|
|
47
41
|
}>;
|
|
48
|
-
}, undefined> : TDataType extends 'json' ? v.GenericSchema<Json> : TData
|
|
42
|
+
}, undefined> : TDataType extends 'json' ? v.GenericSchema<Json> : GetValibotPrimitiveType<TData, TColumnType, TAdditionalProperties>;
|
|
43
|
+
type GetValibotPrimitiveType<TData, TColumnType, TAdditionalProperties extends Record<string, any>> = TData extends number ? TAdditionalProperties['noPipe'] extends true ? v.NumberSchema<undefined> : v.SchemaWithPipe<RemoveNeverElements<[
|
|
49
44
|
v.NumberSchema<undefined>,
|
|
50
45
|
v.MinValueAction<number, number, undefined>,
|
|
51
46
|
v.MaxValueAction<number, number, undefined>,
|
|
@@ -56,7 +51,7 @@ export type GetValibotType<TData, TDataType extends string, TColumnType extends
|
|
|
56
51
|
v.MaxValueAction<bigint, bigint, undefined>
|
|
57
52
|
]> : TData extends boolean ? v.BooleanSchema<undefined> : TData extends string ? TAdditionalProperties['max'] extends number ? v.SchemaWithPipe<[v.StringSchema<undefined>, GetLengthAction<TAdditionalProperties, string>]> : v.StringSchema<undefined> : v.AnySchema;
|
|
58
53
|
type HandleSelectColumn<TSchema extends v.GenericSchema, TColumn extends Column> = TColumn['_']['notNull'] extends true ? TSchema : v.NullableSchema<TSchema, undefined>;
|
|
59
|
-
type HandleInsertColumn<TSchema extends v.GenericSchema, TColumn extends Column> =
|
|
60
|
-
type HandleUpdateColumn<TSchema extends v.GenericSchema, TColumn extends Column> =
|
|
61
|
-
export type HandleColumn<TType extends 'select' | 'insert' | 'update', TColumn extends Column> = GetValibotType<TColumn['_']['data'], TColumn['_']['dataType'], TColumn['_']['columnType'],
|
|
54
|
+
type HandleInsertColumn<TSchema extends v.GenericSchema, TColumn extends Column> = TColumn['_']['notNull'] extends true ? TColumn['_']['hasDefault'] extends true ? v.OptionalSchema<TSchema, undefined> : TSchema : v.OptionalSchema<v.NullableSchema<TSchema, undefined>, undefined>;
|
|
55
|
+
type HandleUpdateColumn<TSchema extends v.GenericSchema, TColumn extends Column> = TColumn['_']['notNull'] extends true ? v.OptionalSchema<TSchema, undefined> : v.OptionalSchema<v.NullableSchema<TSchema, undefined>, undefined>;
|
|
56
|
+
export type HandleColumn<TType extends 'select' | 'insert' | 'update', TColumn extends Column> = GetValibotType<TColumn['_']['data'], TColumn['_']['dataType'], TColumn['_']['columnType'], TColumn['_']['enumValues'], HasBaseColumn<TColumn> extends true ? Assume<TColumn['_']['baseColumn'], Column> : undefined, ExtractAdditionalProperties<TColumn>> extends infer TSchema extends v.GenericSchema ? TSchema extends v.AnySchema ? v.AnySchema : TType extends 'select' ? HandleSelectColumn<TSchema, TColumn> : TType extends 'insert' ? HandleInsertColumn<TSchema, TColumn> : TType extends 'update' ? HandleUpdateColumn<TSchema, TColumn> : TSchema : v.AnySchema;
|
|
62
57
|
export {};
|
package/column.types.d.ts
CHANGED
|
@@ -1,12 +1,11 @@
|
|
|
1
1
|
import type { Assume, Column } from 'drizzle-orm';
|
|
2
2
|
import type * as v from 'valibot';
|
|
3
|
-
import type {
|
|
4
|
-
export type
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
} ? IsNever<TColumn['_']['baseColumn']> extends false ? TColumn['_']['baseColumn'] : undefined : undefined;
|
|
3
|
+
import type { IsEnumDefined, IsNever, Json, RemoveNeverElements } from './utils.js';
|
|
4
|
+
export type HasBaseColumn<TColumn> = TColumn extends {
|
|
5
|
+
_: {
|
|
6
|
+
baseColumn: Column | undefined;
|
|
7
|
+
};
|
|
8
|
+
} ? IsNever<TColumn['_']['baseColumn']> extends false ? true : false : false;
|
|
10
9
|
export type EnumValuesToEnum<TEnumValues extends [string, ...string[]]> = {
|
|
11
10
|
readonly [K in TEnumValues[number]]: K;
|
|
12
11
|
};
|
|
@@ -21,8 +20,8 @@ export type ExtractAdditionalProperties<TColumn extends Column> = {
|
|
|
21
20
|
fixedLength: TColumn['_']['columnType'] extends 'PgChar' | 'PgHalfVector' | 'PgVector' | 'PgArray' | 'MySqlChar' | 'SingleStoreChar' ? true : false;
|
|
22
21
|
};
|
|
23
22
|
type GetLengthAction<T extends Record<string, any>, TType extends string | ArrayLike<unknown>> = T['fixedLength'] extends true ? v.LengthAction<TType, number, undefined> : v.MaxLengthAction<TType, number, undefined>;
|
|
24
|
-
type GetArraySchema<T extends Column> = v.ArraySchema<GetValibotType<T['_']['data'], T['_']['dataType'], T['_']['columnType'],
|
|
25
|
-
export type GetValibotType<TData, TDataType extends string, TColumnType extends string, TEnumValues extends
|
|
23
|
+
type GetArraySchema<T extends Column> = v.ArraySchema<GetValibotType<T['_']['data'], T['_']['dataType'], T['_']['columnType'], T['_']['enumValues'], HasBaseColumn<T> extends true ? Assume<T['_']['baseColumn'], Column> : undefined, ExtractAdditionalProperties<T>>, undefined>;
|
|
24
|
+
export type GetValibotType<TData, TDataType extends string, TColumnType extends string, TEnumValues extends string[] | undefined, TBaseColumn extends Column | undefined, TAdditionalProperties extends Record<string, any>> = TColumnType extends 'PgHalfVector' | 'PgVector' ? TAdditionalProperties['max'] extends number ? v.SchemaWithPipe<[
|
|
26
25
|
v.ArraySchema<v.NumberSchema<undefined>, undefined>,
|
|
27
26
|
GetLengthAction<TAdditionalProperties, number[]>
|
|
28
27
|
]> : v.ArraySchema<v.NumberSchema<undefined>, undefined> : TColumnType extends 'PgUUID' ? v.SchemaWithPipe<[v.StringSchema<undefined>, v.UuidAction<string, undefined>]> : TColumnType extends 'PgBinaryVector' ? v.SchemaWithPipe<RemoveNeverElements<[
|
|
@@ -30,22 +29,18 @@ export type GetValibotType<TData, TDataType extends string, TColumnType extends
|
|
|
30
29
|
v.RegexAction<string, undefined>,
|
|
31
30
|
TAdditionalProperties['max'] extends number ? GetLengthAction<TAdditionalProperties, string> : never
|
|
32
31
|
]>> : TBaseColumn extends Column ? TAdditionalProperties['max'] extends number ? v.SchemaWithPipe<[
|
|
33
|
-
GetArraySchema<TBaseColumn
|
|
34
|
-
GetLengthAction<TAdditionalProperties, TBaseColumn['_']['data'][]>
|
|
35
|
-
]> : GetArraySchema<TBaseColumn
|
|
36
|
-
[K in
|
|
37
|
-
|
|
38
|
-
}>;
|
|
39
|
-
}, [
|
|
40
|
-
any,
|
|
41
|
-
...any[]
|
|
42
|
-
]>, undefined> : TData extends Date ? v.DateSchema<undefined> : TData extends Buffer ? v.GenericSchema<Buffer> : TDataType extends 'array' ? v.ArraySchema<GetValibotType<Assume<TData, any[]>[number], string, string, undefined, undefined, {
|
|
32
|
+
GetArraySchema<Assume<TBaseColumn, Column>>,
|
|
33
|
+
GetLengthAction<TAdditionalProperties, Assume<TBaseColumn, Column>['_']['data'][]>
|
|
34
|
+
]> : GetArraySchema<Assume<TBaseColumn, Column>> : IsEnumDefined<TEnumValues> extends true ? v.EnumSchema<{
|
|
35
|
+
readonly [K in Assume<TEnumValues, [string, ...string[]]>[number]]: K;
|
|
36
|
+
}, undefined> : TColumnType extends 'PgGeometry' | 'PgPointTuple' ? v.TupleSchema<[v.NumberSchema<undefined>, v.NumberSchema<undefined>], undefined> : TColumnType extends 'PgLine' ? v.TupleSchema<[v.NumberSchema<undefined>, v.NumberSchema<undefined>, v.NumberSchema<undefined>], undefined> : TData extends Date ? v.DateSchema<undefined> : TData extends Buffer ? v.GenericSchema<Buffer> : TDataType extends 'array' ? v.ArraySchema<GetValibotPrimitiveType<Assume<TData, any[]>[number], '', {
|
|
43
37
|
noPipe: true;
|
|
44
|
-
}>, undefined> : TData extends
|
|
45
|
-
readonly [K in keyof
|
|
38
|
+
}>, undefined> : TData extends Record<string, any> ? TColumnType extends 'PgJson' | 'PgJsonb' | 'MySqlJson' | 'SingleStoreJson' | 'SQLiteTextJson' | 'SQLiteBlobJson' ? v.GenericSchema<TData> : v.ObjectSchema<{
|
|
39
|
+
readonly [K in keyof TData]: GetValibotPrimitiveType<TData[K], '', {
|
|
46
40
|
noPipe: true;
|
|
47
41
|
}>;
|
|
48
|
-
}, undefined> : TDataType extends 'json' ? v.GenericSchema<Json> : TData
|
|
42
|
+
}, undefined> : TDataType extends 'json' ? v.GenericSchema<Json> : GetValibotPrimitiveType<TData, TColumnType, TAdditionalProperties>;
|
|
43
|
+
type GetValibotPrimitiveType<TData, TColumnType, TAdditionalProperties extends Record<string, any>> = TData extends number ? TAdditionalProperties['noPipe'] extends true ? v.NumberSchema<undefined> : v.SchemaWithPipe<RemoveNeverElements<[
|
|
49
44
|
v.NumberSchema<undefined>,
|
|
50
45
|
v.MinValueAction<number, number, undefined>,
|
|
51
46
|
v.MaxValueAction<number, number, undefined>,
|
|
@@ -56,7 +51,7 @@ export type GetValibotType<TData, TDataType extends string, TColumnType extends
|
|
|
56
51
|
v.MaxValueAction<bigint, bigint, undefined>
|
|
57
52
|
]> : TData extends boolean ? v.BooleanSchema<undefined> : TData extends string ? TAdditionalProperties['max'] extends number ? v.SchemaWithPipe<[v.StringSchema<undefined>, GetLengthAction<TAdditionalProperties, string>]> : v.StringSchema<undefined> : v.AnySchema;
|
|
58
53
|
type HandleSelectColumn<TSchema extends v.GenericSchema, TColumn extends Column> = TColumn['_']['notNull'] extends true ? TSchema : v.NullableSchema<TSchema, undefined>;
|
|
59
|
-
type HandleInsertColumn<TSchema extends v.GenericSchema, TColumn extends Column> =
|
|
60
|
-
type HandleUpdateColumn<TSchema extends v.GenericSchema, TColumn extends Column> =
|
|
61
|
-
export type HandleColumn<TType extends 'select' | 'insert' | 'update', TColumn extends Column> = GetValibotType<TColumn['_']['data'], TColumn['_']['dataType'], TColumn['_']['columnType'],
|
|
54
|
+
type HandleInsertColumn<TSchema extends v.GenericSchema, TColumn extends Column> = TColumn['_']['notNull'] extends true ? TColumn['_']['hasDefault'] extends true ? v.OptionalSchema<TSchema, undefined> : TSchema : v.OptionalSchema<v.NullableSchema<TSchema, undefined>, undefined>;
|
|
55
|
+
type HandleUpdateColumn<TSchema extends v.GenericSchema, TColumn extends Column> = TColumn['_']['notNull'] extends true ? v.OptionalSchema<TSchema, undefined> : v.OptionalSchema<v.NullableSchema<TSchema, undefined>, undefined>;
|
|
56
|
+
export type HandleColumn<TType extends 'select' | 'insert' | 'update', TColumn extends Column> = GetValibotType<TColumn['_']['data'], TColumn['_']['dataType'], TColumn['_']['columnType'], TColumn['_']['enumValues'], HasBaseColumn<TColumn> extends true ? Assume<TColumn['_']['baseColumn'], Column> : undefined, ExtractAdditionalProperties<TColumn>> extends infer TSchema extends v.GenericSchema ? TSchema extends v.AnySchema ? v.AnySchema : TType extends 'select' ? HandleSelectColumn<TSchema, TColumn> : TType extends 'insert' ? HandleInsertColumn<TSchema, TColumn> : TType extends 'update' ? HandleUpdateColumn<TSchema, TColumn> : TSchema : v.AnySchema;
|
|
62
57
|
export {};
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "drizzle-valibot",
|
|
3
|
-
"version": "0.4.
|
|
3
|
+
"version": "0.4.2",
|
|
4
4
|
"description": "Generate valibot schemas from Drizzle ORM schemas",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"scripts": {
|
|
@@ -63,12 +63,12 @@
|
|
|
63
63
|
"@types/node": "^18.15.10",
|
|
64
64
|
"cpy": "^10.1.0",
|
|
65
65
|
"drizzle-orm": "link:../drizzle-orm/dist",
|
|
66
|
-
"json-rules-engine": "^7.3.
|
|
66
|
+
"json-rules-engine": "^7.3.1",
|
|
67
67
|
"rimraf": "^5.0.0",
|
|
68
|
-
"rollup": "^3.
|
|
68
|
+
"rollup": "^3.29.5",
|
|
69
69
|
"valibot": "1.0.0-beta.7",
|
|
70
70
|
"vite-tsconfig-paths": "^4.3.2",
|
|
71
|
-
"vitest": "^1.
|
|
71
|
+
"vitest": "^3.1.3",
|
|
72
72
|
"zx": "^7.2.2"
|
|
73
73
|
}
|
|
74
74
|
}
|
|
@@ -1,23 +1,21 @@
|
|
|
1
1
|
import type { Assume, Column, DrizzleTypeError, SelectedFieldsFlat, Simplify, Table, View } from 'drizzle-orm';
|
|
2
2
|
import type * as v from 'valibot';
|
|
3
|
-
import type { ExtractAdditionalProperties,
|
|
4
|
-
import type {
|
|
3
|
+
import type { ExtractAdditionalProperties, GetValibotType, HandleColumn, HasBaseColumn } from "./column.types.cjs";
|
|
4
|
+
import type { ColumnIsGeneratedAlwaysAs, GetSelection } from "./utils.cjs";
|
|
5
5
|
export interface Conditions {
|
|
6
6
|
never: (column?: Column) => boolean;
|
|
7
7
|
optional: (column: Column) => boolean;
|
|
8
8
|
nullable: (column: Column) => boolean;
|
|
9
9
|
}
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
type
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
readonly [K in keyof TColumns]: TColumns[K] extends infer TColumn extends Column ? TRefinements extends object ? IsRefinementDefined<TRefinements, Assume<K, string>> extends true ? HandleRefinement<TType, TRefinements[Assume<K, keyof TRefinements>], TColumn> : HandleColumn<TType, TColumn> : HandleColumn<TType, TColumn> : TColumns[K] extends infer TObject extends SelectedFieldsFlat<Column> | Table | View ? BuildSchema<TType, GetSelection<TObject>, TRefinements extends object ? TRefinements[Assume<K, keyof TRefinements>] extends infer TNestedRefinements extends object ? TNestedRefinements : undefined : undefined> : v.AnySchema;
|
|
20
|
-
}>>, undefined>;
|
|
10
|
+
type BuildRefineField<T> = T extends v.GenericSchema ? ((schema: T) => v.GenericSchema) | v.GenericSchema : never;
|
|
11
|
+
export type BuildRefine<TColumns extends Record<string, any>> = {
|
|
12
|
+
[K in keyof TColumns as TColumns[K] extends Column | SelectedFieldsFlat<Column> | Table | View ? K : never]?: TColumns[K] extends Column ? BuildRefineField<GetValibotType<TColumns[K]['_']['data'], TColumns[K]['_']['dataType'], TColumns[K]['_']['columnType'], TColumns[K]['_']['enumValues'], HasBaseColumn<TColumns[K]> extends true ? Assume<TColumns[K]['_']['baseColumn'], Column> : undefined, ExtractAdditionalProperties<TColumns[K]>>> : BuildRefine<GetSelection<TColumns[K]>>;
|
|
13
|
+
};
|
|
14
|
+
type HandleRefinement<TType extends 'select' | 'insert' | 'update', TRefinement, TColumn extends Column> = TRefinement extends (schema: any) => v.GenericSchema ? (TColumn['_']['notNull'] extends true ? ReturnType<TRefinement> : v.NullableSchema<ReturnType<TRefinement>, undefined>) extends infer TSchema ? TType extends 'update' ? v.OptionalSchema<Assume<TSchema, v.GenericSchema>, undefined> : TSchema : v.AnySchema : TRefinement;
|
|
15
|
+
type IsRefinementDefined<TRefinements extends Record<string | symbol | number, any> | undefined, TKey extends string | symbol | number> = TRefinements extends object ? TRefinements[TKey] extends v.GenericSchema | ((schema: any) => any) ? true : false : false;
|
|
16
|
+
export type BuildSchema<TType extends 'select' | 'insert' | 'update', TColumns extends Record<string, any>, TRefinements extends Record<string, any> | undefined> = v.ObjectSchema<Simplify<{
|
|
17
|
+
readonly [K in keyof TColumns as ColumnIsGeneratedAlwaysAs<TColumns[K]> extends true ? never : K]: TColumns[K] extends infer TColumn extends Column ? IsRefinementDefined<TRefinements, Assume<K, string>> extends true ? Assume<HandleRefinement<TType, TRefinements[K & keyof TRefinements], TColumn>, v.GenericSchema> : HandleColumn<TType, TColumn> : TColumns[K] extends infer TObject extends SelectedFieldsFlat<Column> | Table | View ? BuildSchema<TType, GetSelection<TObject>, TRefinements extends object ? TRefinements[K & keyof TRefinements] : undefined> : v.AnySchema;
|
|
18
|
+
}>, undefined>;
|
|
21
19
|
export type NoUnknownKeys<TRefinement extends Record<string, any>, TCompare extends Record<string, any>> = {
|
|
22
20
|
[K in keyof TRefinement]: K extends keyof TCompare ? TRefinement[K] extends Record<string, v.GenericSchema> ? NoUnknownKeys<TRefinement[K], TCompare[K]> : TRefinement[K] : DrizzleTypeError<`Found unknown key in refinement: "${K & string}"`>;
|
|
23
21
|
};
|
|
@@ -1,23 +1,21 @@
|
|
|
1
1
|
import type { Assume, Column, DrizzleTypeError, SelectedFieldsFlat, Simplify, Table, View } from 'drizzle-orm';
|
|
2
2
|
import type * as v from 'valibot';
|
|
3
|
-
import type { ExtractAdditionalProperties,
|
|
4
|
-
import type {
|
|
3
|
+
import type { ExtractAdditionalProperties, GetValibotType, HandleColumn, HasBaseColumn } from "./column.types.mjs";
|
|
4
|
+
import type { ColumnIsGeneratedAlwaysAs, GetSelection } from "./utils.mjs";
|
|
5
5
|
export interface Conditions {
|
|
6
6
|
never: (column?: Column) => boolean;
|
|
7
7
|
optional: (column: Column) => boolean;
|
|
8
8
|
nullable: (column: Column) => boolean;
|
|
9
9
|
}
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
type
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
readonly [K in keyof TColumns]: TColumns[K] extends infer TColumn extends Column ? TRefinements extends object ? IsRefinementDefined<TRefinements, Assume<K, string>> extends true ? HandleRefinement<TType, TRefinements[Assume<K, keyof TRefinements>], TColumn> : HandleColumn<TType, TColumn> : HandleColumn<TType, TColumn> : TColumns[K] extends infer TObject extends SelectedFieldsFlat<Column> | Table | View ? BuildSchema<TType, GetSelection<TObject>, TRefinements extends object ? TRefinements[Assume<K, keyof TRefinements>] extends infer TNestedRefinements extends object ? TNestedRefinements : undefined : undefined> : v.AnySchema;
|
|
20
|
-
}>>, undefined>;
|
|
10
|
+
type BuildRefineField<T> = T extends v.GenericSchema ? ((schema: T) => v.GenericSchema) | v.GenericSchema : never;
|
|
11
|
+
export type BuildRefine<TColumns extends Record<string, any>> = {
|
|
12
|
+
[K in keyof TColumns as TColumns[K] extends Column | SelectedFieldsFlat<Column> | Table | View ? K : never]?: TColumns[K] extends Column ? BuildRefineField<GetValibotType<TColumns[K]['_']['data'], TColumns[K]['_']['dataType'], TColumns[K]['_']['columnType'], TColumns[K]['_']['enumValues'], HasBaseColumn<TColumns[K]> extends true ? Assume<TColumns[K]['_']['baseColumn'], Column> : undefined, ExtractAdditionalProperties<TColumns[K]>>> : BuildRefine<GetSelection<TColumns[K]>>;
|
|
13
|
+
};
|
|
14
|
+
type HandleRefinement<TType extends 'select' | 'insert' | 'update', TRefinement, TColumn extends Column> = TRefinement extends (schema: any) => v.GenericSchema ? (TColumn['_']['notNull'] extends true ? ReturnType<TRefinement> : v.NullableSchema<ReturnType<TRefinement>, undefined>) extends infer TSchema ? TType extends 'update' ? v.OptionalSchema<Assume<TSchema, v.GenericSchema>, undefined> : TSchema : v.AnySchema : TRefinement;
|
|
15
|
+
type IsRefinementDefined<TRefinements extends Record<string | symbol | number, any> | undefined, TKey extends string | symbol | number> = TRefinements extends object ? TRefinements[TKey] extends v.GenericSchema | ((schema: any) => any) ? true : false : false;
|
|
16
|
+
export type BuildSchema<TType extends 'select' | 'insert' | 'update', TColumns extends Record<string, any>, TRefinements extends Record<string, any> | undefined> = v.ObjectSchema<Simplify<{
|
|
17
|
+
readonly [K in keyof TColumns as ColumnIsGeneratedAlwaysAs<TColumns[K]> extends true ? never : K]: TColumns[K] extends infer TColumn extends Column ? IsRefinementDefined<TRefinements, Assume<K, string>> extends true ? Assume<HandleRefinement<TType, TRefinements[K & keyof TRefinements], TColumn>, v.GenericSchema> : HandleColumn<TType, TColumn> : TColumns[K] extends infer TObject extends SelectedFieldsFlat<Column> | Table | View ? BuildSchema<TType, GetSelection<TObject>, TRefinements extends object ? TRefinements[K & keyof TRefinements] : undefined> : v.AnySchema;
|
|
18
|
+
}>, undefined>;
|
|
21
19
|
export type NoUnknownKeys<TRefinement extends Record<string, any>, TCompare extends Record<string, any>> = {
|
|
22
20
|
[K in keyof TRefinement]: K extends keyof TCompare ? TRefinement[K] extends Record<string, v.GenericSchema> ? NoUnknownKeys<TRefinement[K], TCompare[K]> : TRefinement[K] : DrizzleTypeError<`Found unknown key in refinement: "${K & string}"`>;
|
|
23
21
|
};
|
|
@@ -1,23 +1,21 @@
|
|
|
1
1
|
import type { Assume, Column, DrizzleTypeError, SelectedFieldsFlat, Simplify, Table, View } from 'drizzle-orm';
|
|
2
2
|
import type * as v from 'valibot';
|
|
3
|
-
import type { ExtractAdditionalProperties,
|
|
4
|
-
import type {
|
|
3
|
+
import type { ExtractAdditionalProperties, GetValibotType, HandleColumn, HasBaseColumn } from './column.types.js';
|
|
4
|
+
import type { ColumnIsGeneratedAlwaysAs, GetSelection } from './utils.js';
|
|
5
5
|
export interface Conditions {
|
|
6
6
|
never: (column?: Column) => boolean;
|
|
7
7
|
optional: (column: Column) => boolean;
|
|
8
8
|
nullable: (column: Column) => boolean;
|
|
9
9
|
}
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
type
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
readonly [K in keyof TColumns]: TColumns[K] extends infer TColumn extends Column ? TRefinements extends object ? IsRefinementDefined<TRefinements, Assume<K, string>> extends true ? HandleRefinement<TType, TRefinements[Assume<K, keyof TRefinements>], TColumn> : HandleColumn<TType, TColumn> : HandleColumn<TType, TColumn> : TColumns[K] extends infer TObject extends SelectedFieldsFlat<Column> | Table | View ? BuildSchema<TType, GetSelection<TObject>, TRefinements extends object ? TRefinements[Assume<K, keyof TRefinements>] extends infer TNestedRefinements extends object ? TNestedRefinements : undefined : undefined> : v.AnySchema;
|
|
20
|
-
}>>, undefined>;
|
|
10
|
+
type BuildRefineField<T> = T extends v.GenericSchema ? ((schema: T) => v.GenericSchema) | v.GenericSchema : never;
|
|
11
|
+
export type BuildRefine<TColumns extends Record<string, any>> = {
|
|
12
|
+
[K in keyof TColumns as TColumns[K] extends Column | SelectedFieldsFlat<Column> | Table | View ? K : never]?: TColumns[K] extends Column ? BuildRefineField<GetValibotType<TColumns[K]['_']['data'], TColumns[K]['_']['dataType'], TColumns[K]['_']['columnType'], TColumns[K]['_']['enumValues'], HasBaseColumn<TColumns[K]> extends true ? Assume<TColumns[K]['_']['baseColumn'], Column> : undefined, ExtractAdditionalProperties<TColumns[K]>>> : BuildRefine<GetSelection<TColumns[K]>>;
|
|
13
|
+
};
|
|
14
|
+
type HandleRefinement<TType extends 'select' | 'insert' | 'update', TRefinement, TColumn extends Column> = TRefinement extends (schema: any) => v.GenericSchema ? (TColumn['_']['notNull'] extends true ? ReturnType<TRefinement> : v.NullableSchema<ReturnType<TRefinement>, undefined>) extends infer TSchema ? TType extends 'update' ? v.OptionalSchema<Assume<TSchema, v.GenericSchema>, undefined> : TSchema : v.AnySchema : TRefinement;
|
|
15
|
+
type IsRefinementDefined<TRefinements extends Record<string | symbol | number, any> | undefined, TKey extends string | symbol | number> = TRefinements extends object ? TRefinements[TKey] extends v.GenericSchema | ((schema: any) => any) ? true : false : false;
|
|
16
|
+
export type BuildSchema<TType extends 'select' | 'insert' | 'update', TColumns extends Record<string, any>, TRefinements extends Record<string, any> | undefined> = v.ObjectSchema<Simplify<{
|
|
17
|
+
readonly [K in keyof TColumns as ColumnIsGeneratedAlwaysAs<TColumns[K]> extends true ? never : K]: TColumns[K] extends infer TColumn extends Column ? IsRefinementDefined<TRefinements, Assume<K, string>> extends true ? Assume<HandleRefinement<TType, TRefinements[K & keyof TRefinements], TColumn>, v.GenericSchema> : HandleColumn<TType, TColumn> : TColumns[K] extends infer TObject extends SelectedFieldsFlat<Column> | Table | View ? BuildSchema<TType, GetSelection<TObject>, TRefinements extends object ? TRefinements[K & keyof TRefinements] : undefined> : v.AnySchema;
|
|
18
|
+
}>, undefined>;
|
|
21
19
|
export type NoUnknownKeys<TRefinement extends Record<string, any>, TCompare extends Record<string, any>> = {
|
|
22
20
|
[K in keyof TRefinement]: K extends keyof TCompare ? TRefinement[K] extends Record<string, v.GenericSchema> ? NoUnknownKeys<TRefinement[K], TCompare[K]> : TRefinement[K] : DrizzleTypeError<`Found unknown key in refinement: "${K & string}"`>;
|
|
23
21
|
};
|
package/utils.d.cts
CHANGED
|
@@ -12,10 +12,10 @@ export type Json = Literal | {
|
|
|
12
12
|
[key: string]: any;
|
|
13
13
|
} | any[];
|
|
14
14
|
export type IsNever<T> = [T] extends [never] ? true : false;
|
|
15
|
-
export type
|
|
16
|
-
export type ColumnIsGeneratedAlwaysAs<TColumn extends Column
|
|
17
|
-
type:
|
|
18
|
-
}
|
|
15
|
+
export type IsEnumDefined<TEnum extends string[] | undefined> = [string, ...string[]] extends TEnum ? false : undefined extends TEnum ? false : true;
|
|
16
|
+
export type ColumnIsGeneratedAlwaysAs<TColumn> = TColumn extends Column ? TColumn['_']['identity'] extends 'always' ? true : TColumn['_']['generated'] extends {
|
|
17
|
+
type: 'byDefault';
|
|
18
|
+
} | undefined ? false : true : false;
|
|
19
19
|
export type RemoveNever<T> = {
|
|
20
20
|
[K in keyof T as T[K] extends never ? never : K]: T[K];
|
|
21
21
|
};
|
package/utils.d.mts
CHANGED
|
@@ -12,10 +12,10 @@ export type Json = Literal | {
|
|
|
12
12
|
[key: string]: any;
|
|
13
13
|
} | any[];
|
|
14
14
|
export type IsNever<T> = [T] extends [never] ? true : false;
|
|
15
|
-
export type
|
|
16
|
-
export type ColumnIsGeneratedAlwaysAs<TColumn extends Column
|
|
17
|
-
type:
|
|
18
|
-
}
|
|
15
|
+
export type IsEnumDefined<TEnum extends string[] | undefined> = [string, ...string[]] extends TEnum ? false : undefined extends TEnum ? false : true;
|
|
16
|
+
export type ColumnIsGeneratedAlwaysAs<TColumn> = TColumn extends Column ? TColumn['_']['identity'] extends 'always' ? true : TColumn['_']['generated'] extends {
|
|
17
|
+
type: 'byDefault';
|
|
18
|
+
} | undefined ? false : true : false;
|
|
19
19
|
export type RemoveNever<T> = {
|
|
20
20
|
[K in keyof T as T[K] extends never ? never : K]: T[K];
|
|
21
21
|
};
|
package/utils.d.ts
CHANGED
|
@@ -12,10 +12,10 @@ export type Json = Literal | {
|
|
|
12
12
|
[key: string]: any;
|
|
13
13
|
} | any[];
|
|
14
14
|
export type IsNever<T> = [T] extends [never] ? true : false;
|
|
15
|
-
export type
|
|
16
|
-
export type ColumnIsGeneratedAlwaysAs<TColumn extends Column
|
|
17
|
-
type:
|
|
18
|
-
}
|
|
15
|
+
export type IsEnumDefined<TEnum extends string[] | undefined> = [string, ...string[]] extends TEnum ? false : undefined extends TEnum ? false : true;
|
|
16
|
+
export type ColumnIsGeneratedAlwaysAs<TColumn> = TColumn extends Column ? TColumn['_']['identity'] extends 'always' ? true : TColumn['_']['generated'] extends {
|
|
17
|
+
type: 'byDefault';
|
|
18
|
+
} | undefined ? false : true : false;
|
|
19
19
|
export type RemoveNever<T> = {
|
|
20
20
|
[K in keyof T as T[K] extends never ? never : K]: T[K];
|
|
21
21
|
};
|