drizzle-valibot 0.2.0 → 0.3.0-019d9b0
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/README.md +11 -2
- package/column.d.cts +10 -0
- package/column.d.mts +10 -0
- package/column.d.ts +10 -0
- package/column.types.d.cts +62 -0
- package/column.types.d.mts +62 -0
- package/column.types.d.ts +62 -0
- package/constants.d.cts +20 -0
- package/constants.d.mts +20 -0
- package/constants.d.ts +20 -0
- package/index.cjs +330 -1
- package/index.cjs.map +1 -1
- package/index.d.cts +2 -41
- package/index.d.mts +2 -41
- package/index.d.ts +2 -41
- package/index.mjs +307 -1
- package/index.mjs.map +1 -1
- package/package.json +71 -84
- package/schema.d.cts +4 -0
- package/schema.d.mts +4 -0
- package/schema.d.ts +4 -0
- package/schema.types.d.cts +20 -0
- package/schema.types.d.mts +20 -0
- package/schema.types.d.ts +20 -0
- package/schema.types.internal.d.cts +24 -0
- package/schema.types.internal.d.mts +24 -0
- package/schema.types.internal.d.ts +24 -0
- package/utils.d.cts +24 -0
- package/utils.d.mts +24 -0
- package/utils.d.ts +24 -0
package/README.md
CHANGED
|
@@ -1,11 +1,17 @@
|
|
|
1
1
|
`drizzle-valibot` is a plugin for [Drizzle ORM](https://github.com/drizzle-team/drizzle-orm) that allows you to generate [valibot](https://valibot.dev/) schemas from Drizzle ORM schemas.
|
|
2
2
|
|
|
3
|
+
**Features**
|
|
4
|
+
|
|
5
|
+
- Create a select schema for tables, views and enums.
|
|
6
|
+
- Create insert and update schemas for tables.
|
|
7
|
+
- Supports all dialects: PostgreSQL, MySQL and SQLite.
|
|
8
|
+
|
|
3
9
|
# Usage
|
|
4
10
|
|
|
5
11
|
```ts
|
|
6
12
|
import { pgEnum, pgTable, serial, text, timestamp } from 'drizzle-orm/pg-core';
|
|
7
13
|
import { createInsertSchema, createSelectSchema } from 'drizzle-valibot';
|
|
8
|
-
import { string, parse, number } from 'valibot';
|
|
14
|
+
import { string, parse, number, pipe } from 'valibot';
|
|
9
15
|
|
|
10
16
|
const users = pgTable('users', {
|
|
11
17
|
id: serial('id').primaryKey(),
|
|
@@ -18,6 +24,9 @@ const users = pgTable('users', {
|
|
|
18
24
|
// Schema for inserting a user - can be used to validate API requests
|
|
19
25
|
const insertUserSchema = createInsertSchema(users);
|
|
20
26
|
|
|
27
|
+
// Schema for updating a user - can be used to validate API requests
|
|
28
|
+
const updateUserSchema = createUpdateSchema(users);
|
|
29
|
+
|
|
21
30
|
// Schema for selecting a user - can be used to validate API responses
|
|
22
31
|
const selectUserSchema = createSelectSchema(users);
|
|
23
32
|
|
|
@@ -28,7 +37,7 @@ const insertUserSchema = createInsertSchema(users, {
|
|
|
28
37
|
|
|
29
38
|
// Refining the fields - useful if you want to change the fields before they become nullable/optional in the final schema
|
|
30
39
|
const insertUserSchema = createInsertSchema(users, {
|
|
31
|
-
id: (schema) =>
|
|
40
|
+
id: (schema) => pipe([schema, minValue(0)]),
|
|
32
41
|
role: string(),
|
|
33
42
|
});
|
|
34
43
|
|
package/column.d.cts
ADDED
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { Column } from 'drizzle-orm';
|
|
2
|
+
import * as v from 'valibot';
|
|
3
|
+
import type { Json } from "./utils.cjs";
|
|
4
|
+
export declare const literalSchema: v.UnionSchema<[v.StringSchema<undefined>, v.NumberSchema<undefined>, v.BooleanSchema<undefined>, v.NullSchema<undefined>], undefined>;
|
|
5
|
+
export declare const jsonSchema: v.GenericSchema<Json>;
|
|
6
|
+
export declare const bufferSchema: v.GenericSchema<Buffer>;
|
|
7
|
+
export declare function mapEnumValues(values: string[]): {
|
|
8
|
+
[k: string]: string;
|
|
9
|
+
};
|
|
10
|
+
export declare function columnToSchema(column: Column): v.GenericSchema;
|
package/column.d.mts
ADDED
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { Column } from 'drizzle-orm';
|
|
2
|
+
import * as v from 'valibot';
|
|
3
|
+
import type { Json } from "./utils.mjs";
|
|
4
|
+
export declare const literalSchema: v.UnionSchema<[v.StringSchema<undefined>, v.NumberSchema<undefined>, v.BooleanSchema<undefined>, v.NullSchema<undefined>], undefined>;
|
|
5
|
+
export declare const jsonSchema: v.GenericSchema<Json>;
|
|
6
|
+
export declare const bufferSchema: v.GenericSchema<Buffer>;
|
|
7
|
+
export declare function mapEnumValues(values: string[]): {
|
|
8
|
+
[k: string]: string;
|
|
9
|
+
};
|
|
10
|
+
export declare function columnToSchema(column: Column): v.GenericSchema;
|
package/column.d.ts
ADDED
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { Column } from 'drizzle-orm';
|
|
2
|
+
import * as v from 'valibot';
|
|
3
|
+
import type { Json } from './utils.js';
|
|
4
|
+
export declare const literalSchema: v.UnionSchema<[v.StringSchema<undefined>, v.NumberSchema<undefined>, v.BooleanSchema<undefined>, v.NullSchema<undefined>], undefined>;
|
|
5
|
+
export declare const jsonSchema: v.GenericSchema<Json>;
|
|
6
|
+
export declare const bufferSchema: v.GenericSchema<Buffer>;
|
|
7
|
+
export declare function mapEnumValues(values: string[]): {
|
|
8
|
+
[k: string]: string;
|
|
9
|
+
};
|
|
10
|
+
export declare function columnToSchema(column: Column): v.GenericSchema;
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
import type { Assume, Column } from 'drizzle-orm';
|
|
2
|
+
import type * as v from 'valibot';
|
|
3
|
+
import type { ArrayHasAtLeastOneValue, ColumnIsGeneratedAlwaysAs, IsNever, Json, RemoveNeverElements } from "./utils.cjs";
|
|
4
|
+
export type GetEnumValuesFromColumn<TColumn extends Column> = TColumn['_'] extends {
|
|
5
|
+
enumValues: [string, ...string[]];
|
|
6
|
+
} ? TColumn['_']['enumValues'] : undefined;
|
|
7
|
+
export type GetBaseColumn<TColumn extends Column> = TColumn['_'] extends {
|
|
8
|
+
baseColumn: Column | never | undefined;
|
|
9
|
+
} ? IsNever<TColumn['_']['baseColumn']> extends false ? TColumn['_']['baseColumn'] : undefined : undefined;
|
|
10
|
+
export type EnumValuesToEnum<TEnumValues extends [string, ...string[]]> = {
|
|
11
|
+
readonly [K in TEnumValues[number]]: K;
|
|
12
|
+
};
|
|
13
|
+
export type ExtractAdditionalProperties<TColumn extends Column> = {
|
|
14
|
+
max: TColumn['_']['columnType'] extends 'PgVarchar' | 'SQLiteText' | 'PgChar' | 'MySqlChar' | 'SingleStoreChar' ? Assume<TColumn['_'], {
|
|
15
|
+
length: number | undefined;
|
|
16
|
+
}>['length'] : TColumn['_']['columnType'] extends 'MySqlText' | 'MySqlVarChar' | 'SingleStoreText' | 'SingleStoreVarChar' ? number : TColumn['_']['columnType'] extends 'PgBinaryVector' | 'PgHalfVector' | 'PgVector' ? Assume<TColumn['_'], {
|
|
17
|
+
dimensions: number;
|
|
18
|
+
}>['dimensions'] : TColumn['_']['columnType'] extends 'PgArray' ? Assume<TColumn['_'], {
|
|
19
|
+
size: number | undefined;
|
|
20
|
+
}>['size'] : undefined;
|
|
21
|
+
fixedLength: TColumn['_']['columnType'] extends 'PgChar' | 'PgHalfVector' | 'PgVector' | 'PgArray' | 'MySqlChar' | 'SingleStoreChar' ? true : false;
|
|
22
|
+
};
|
|
23
|
+
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'], GetEnumValuesFromColumn<T>, GetBaseColumn<T>, ExtractAdditionalProperties<T>>, undefined>;
|
|
25
|
+
export type GetValibotType<TData, TDataType extends string, TColumnType extends string, TEnumValues extends [string, ...string[]] | undefined, TBaseColumn extends Column | undefined, TAdditionalProperties extends Record<string, any>> = TColumnType extends 'PgHalfVector' | 'PgVector' ? TAdditionalProperties['max'] extends number ? v.SchemaWithPipe<[
|
|
26
|
+
v.ArraySchema<v.NumberSchema<undefined>, undefined>,
|
|
27
|
+
GetLengthAction<TAdditionalProperties, number[]>
|
|
28
|
+
]> : v.ArraySchema<v.NumberSchema<undefined>, undefined> : TColumnType extends 'PgUUID' ? v.SchemaWithPipe<[v.StringSchema<undefined>, v.UuidAction<string, undefined>]> : TColumnType extends 'PgBinaryVector' ? v.SchemaWithPipe<RemoveNeverElements<[
|
|
29
|
+
v.StringSchema<undefined>,
|
|
30
|
+
v.RegexAction<string, undefined>,
|
|
31
|
+
TAdditionalProperties['max'] extends number ? GetLengthAction<TAdditionalProperties, string> : never
|
|
32
|
+
]>> : TBaseColumn extends Column ? TAdditionalProperties['max'] extends number ? v.SchemaWithPipe<[
|
|
33
|
+
GetArraySchema<TBaseColumn>,
|
|
34
|
+
GetLengthAction<TAdditionalProperties, TBaseColumn['_']['data'][]>
|
|
35
|
+
]> : GetArraySchema<TBaseColumn> : ArrayHasAtLeastOneValue<TEnumValues> extends true ? v.EnumSchema<EnumValuesToEnum<Assume<TEnumValues, [string, ...string[]]>>, undefined> : TData extends infer TTuple extends [any, ...any[]] ? v.TupleSchema<Assume<{
|
|
36
|
+
[K in keyof TTuple]: GetValibotType<TTuple[K], string, string, undefined, undefined, {
|
|
37
|
+
noPipe: true;
|
|
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, {
|
|
43
|
+
noPipe: true;
|
|
44
|
+
}>, undefined> : TData extends infer TDict extends Record<string, any> ? v.ObjectSchema<{
|
|
45
|
+
readonly [K in keyof TDict]: GetValibotType<TDict[K], string, string, undefined, undefined, {
|
|
46
|
+
noPipe: true;
|
|
47
|
+
}>;
|
|
48
|
+
}, undefined> : TDataType extends 'json' ? v.GenericSchema<Json> : TData extends number ? TAdditionalProperties['noPipe'] extends true ? v.NumberSchema<undefined> : v.SchemaWithPipe<RemoveNeverElements<[
|
|
49
|
+
v.NumberSchema<undefined>,
|
|
50
|
+
v.MinValueAction<number, number, undefined>,
|
|
51
|
+
v.MaxValueAction<number, number, undefined>,
|
|
52
|
+
TColumnType extends 'MySqlTinyInt' | 'SingleStoreTinyInt' | 'PgSmallInt' | 'PgSmallSerial' | 'MySqlSmallInt' | 'MySqlMediumInt' | 'SingleStoreSmallInt' | 'SingleStoreMediumInt' | 'PgInteger' | 'PgSerial' | 'MySqlInt' | 'SingleStoreInt' | 'PgBigInt53' | 'PgBigSerial53' | 'MySqlBigInt53' | 'MySqlSerial' | 'SingleStoreBigInt53' | 'SingleStoreSerial' | 'SQLiteInteger' | 'MySqlYear' | 'SingleStoreYear' ? v.IntegerAction<number, undefined> : never
|
|
53
|
+
]>> : TData extends bigint ? TAdditionalProperties['noPipe'] extends true ? v.BigintSchema<undefined> : v.SchemaWithPipe<[
|
|
54
|
+
v.BigintSchema<undefined>,
|
|
55
|
+
v.MinValueAction<bigint, bigint, undefined>,
|
|
56
|
+
v.MaxValueAction<bigint, bigint, undefined>
|
|
57
|
+
]> : 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
|
+
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> = ColumnIsGeneratedAlwaysAs<TColumn> extends true ? never : TColumn['_']['notNull'] extends true ? TColumn['_']['hasDefault'] extends true ? v.OptionalSchema<TSchema, undefined> : TSchema : v.OptionalSchema<v.NullableSchema<TSchema, undefined>, undefined>;
|
|
60
|
+
type HandleUpdateColumn<TSchema extends v.GenericSchema, TColumn extends Column> = ColumnIsGeneratedAlwaysAs<TColumn> extends true ? never : TColumn['_']['notNull'] extends true ? v.OptionalSchema<TSchema, undefined> : v.OptionalSchema<v.NullableSchema<TSchema, undefined>, undefined>;
|
|
61
|
+
export type HandleColumn<TType extends 'select' | 'insert' | 'update', TColumn extends Column> = GetValibotType<TColumn['_']['data'], TColumn['_']['dataType'], TColumn['_']['columnType'], GetEnumValuesFromColumn<TColumn>, GetBaseColumn<TColumn>, 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
|
+
export {};
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
import type { Assume, Column } from 'drizzle-orm';
|
|
2
|
+
import type * as v from 'valibot';
|
|
3
|
+
import type { ArrayHasAtLeastOneValue, ColumnIsGeneratedAlwaysAs, IsNever, Json, RemoveNeverElements } from "./utils.mjs";
|
|
4
|
+
export type GetEnumValuesFromColumn<TColumn extends Column> = TColumn['_'] extends {
|
|
5
|
+
enumValues: [string, ...string[]];
|
|
6
|
+
} ? TColumn['_']['enumValues'] : undefined;
|
|
7
|
+
export type GetBaseColumn<TColumn extends Column> = TColumn['_'] extends {
|
|
8
|
+
baseColumn: Column | never | undefined;
|
|
9
|
+
} ? IsNever<TColumn['_']['baseColumn']> extends false ? TColumn['_']['baseColumn'] : undefined : undefined;
|
|
10
|
+
export type EnumValuesToEnum<TEnumValues extends [string, ...string[]]> = {
|
|
11
|
+
readonly [K in TEnumValues[number]]: K;
|
|
12
|
+
};
|
|
13
|
+
export type ExtractAdditionalProperties<TColumn extends Column> = {
|
|
14
|
+
max: TColumn['_']['columnType'] extends 'PgVarchar' | 'SQLiteText' | 'PgChar' | 'MySqlChar' | 'SingleStoreChar' ? Assume<TColumn['_'], {
|
|
15
|
+
length: number | undefined;
|
|
16
|
+
}>['length'] : TColumn['_']['columnType'] extends 'MySqlText' | 'MySqlVarChar' | 'SingleStoreText' | 'SingleStoreVarChar' ? number : TColumn['_']['columnType'] extends 'PgBinaryVector' | 'PgHalfVector' | 'PgVector' ? Assume<TColumn['_'], {
|
|
17
|
+
dimensions: number;
|
|
18
|
+
}>['dimensions'] : TColumn['_']['columnType'] extends 'PgArray' ? Assume<TColumn['_'], {
|
|
19
|
+
size: number | undefined;
|
|
20
|
+
}>['size'] : undefined;
|
|
21
|
+
fixedLength: TColumn['_']['columnType'] extends 'PgChar' | 'PgHalfVector' | 'PgVector' | 'PgArray' | 'MySqlChar' | 'SingleStoreChar' ? true : false;
|
|
22
|
+
};
|
|
23
|
+
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'], GetEnumValuesFromColumn<T>, GetBaseColumn<T>, ExtractAdditionalProperties<T>>, undefined>;
|
|
25
|
+
export type GetValibotType<TData, TDataType extends string, TColumnType extends string, TEnumValues extends [string, ...string[]] | undefined, TBaseColumn extends Column | undefined, TAdditionalProperties extends Record<string, any>> = TColumnType extends 'PgHalfVector' | 'PgVector' ? TAdditionalProperties['max'] extends number ? v.SchemaWithPipe<[
|
|
26
|
+
v.ArraySchema<v.NumberSchema<undefined>, undefined>,
|
|
27
|
+
GetLengthAction<TAdditionalProperties, number[]>
|
|
28
|
+
]> : v.ArraySchema<v.NumberSchema<undefined>, undefined> : TColumnType extends 'PgUUID' ? v.SchemaWithPipe<[v.StringSchema<undefined>, v.UuidAction<string, undefined>]> : TColumnType extends 'PgBinaryVector' ? v.SchemaWithPipe<RemoveNeverElements<[
|
|
29
|
+
v.StringSchema<undefined>,
|
|
30
|
+
v.RegexAction<string, undefined>,
|
|
31
|
+
TAdditionalProperties['max'] extends number ? GetLengthAction<TAdditionalProperties, string> : never
|
|
32
|
+
]>> : TBaseColumn extends Column ? TAdditionalProperties['max'] extends number ? v.SchemaWithPipe<[
|
|
33
|
+
GetArraySchema<TBaseColumn>,
|
|
34
|
+
GetLengthAction<TAdditionalProperties, TBaseColumn['_']['data'][]>
|
|
35
|
+
]> : GetArraySchema<TBaseColumn> : ArrayHasAtLeastOneValue<TEnumValues> extends true ? v.EnumSchema<EnumValuesToEnum<Assume<TEnumValues, [string, ...string[]]>>, undefined> : TData extends infer TTuple extends [any, ...any[]] ? v.TupleSchema<Assume<{
|
|
36
|
+
[K in keyof TTuple]: GetValibotType<TTuple[K], string, string, undefined, undefined, {
|
|
37
|
+
noPipe: true;
|
|
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, {
|
|
43
|
+
noPipe: true;
|
|
44
|
+
}>, undefined> : TData extends infer TDict extends Record<string, any> ? v.ObjectSchema<{
|
|
45
|
+
readonly [K in keyof TDict]: GetValibotType<TDict[K], string, string, undefined, undefined, {
|
|
46
|
+
noPipe: true;
|
|
47
|
+
}>;
|
|
48
|
+
}, undefined> : TDataType extends 'json' ? v.GenericSchema<Json> : TData extends number ? TAdditionalProperties['noPipe'] extends true ? v.NumberSchema<undefined> : v.SchemaWithPipe<RemoveNeverElements<[
|
|
49
|
+
v.NumberSchema<undefined>,
|
|
50
|
+
v.MinValueAction<number, number, undefined>,
|
|
51
|
+
v.MaxValueAction<number, number, undefined>,
|
|
52
|
+
TColumnType extends 'MySqlTinyInt' | 'SingleStoreTinyInt' | 'PgSmallInt' | 'PgSmallSerial' | 'MySqlSmallInt' | 'MySqlMediumInt' | 'SingleStoreSmallInt' | 'SingleStoreMediumInt' | 'PgInteger' | 'PgSerial' | 'MySqlInt' | 'SingleStoreInt' | 'PgBigInt53' | 'PgBigSerial53' | 'MySqlBigInt53' | 'MySqlSerial' | 'SingleStoreBigInt53' | 'SingleStoreSerial' | 'SQLiteInteger' | 'MySqlYear' | 'SingleStoreYear' ? v.IntegerAction<number, undefined> : never
|
|
53
|
+
]>> : TData extends bigint ? TAdditionalProperties['noPipe'] extends true ? v.BigintSchema<undefined> : v.SchemaWithPipe<[
|
|
54
|
+
v.BigintSchema<undefined>,
|
|
55
|
+
v.MinValueAction<bigint, bigint, undefined>,
|
|
56
|
+
v.MaxValueAction<bigint, bigint, undefined>
|
|
57
|
+
]> : 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
|
+
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> = ColumnIsGeneratedAlwaysAs<TColumn> extends true ? never : TColumn['_']['notNull'] extends true ? TColumn['_']['hasDefault'] extends true ? v.OptionalSchema<TSchema, undefined> : TSchema : v.OptionalSchema<v.NullableSchema<TSchema, undefined>, undefined>;
|
|
60
|
+
type HandleUpdateColumn<TSchema extends v.GenericSchema, TColumn extends Column> = ColumnIsGeneratedAlwaysAs<TColumn> extends true ? never : TColumn['_']['notNull'] extends true ? v.OptionalSchema<TSchema, undefined> : v.OptionalSchema<v.NullableSchema<TSchema, undefined>, undefined>;
|
|
61
|
+
export type HandleColumn<TType extends 'select' | 'insert' | 'update', TColumn extends Column> = GetValibotType<TColumn['_']['data'], TColumn['_']['dataType'], TColumn['_']['columnType'], GetEnumValuesFromColumn<TColumn>, GetBaseColumn<TColumn>, 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
|
+
export {};
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
import type { Assume, Column } from 'drizzle-orm';
|
|
2
|
+
import type * as v from 'valibot';
|
|
3
|
+
import type { ArrayHasAtLeastOneValue, ColumnIsGeneratedAlwaysAs, IsNever, Json, RemoveNeverElements } from './utils.js';
|
|
4
|
+
export type GetEnumValuesFromColumn<TColumn extends Column> = TColumn['_'] extends {
|
|
5
|
+
enumValues: [string, ...string[]];
|
|
6
|
+
} ? TColumn['_']['enumValues'] : undefined;
|
|
7
|
+
export type GetBaseColumn<TColumn extends Column> = TColumn['_'] extends {
|
|
8
|
+
baseColumn: Column | never | undefined;
|
|
9
|
+
} ? IsNever<TColumn['_']['baseColumn']> extends false ? TColumn['_']['baseColumn'] : undefined : undefined;
|
|
10
|
+
export type EnumValuesToEnum<TEnumValues extends [string, ...string[]]> = {
|
|
11
|
+
readonly [K in TEnumValues[number]]: K;
|
|
12
|
+
};
|
|
13
|
+
export type ExtractAdditionalProperties<TColumn extends Column> = {
|
|
14
|
+
max: TColumn['_']['columnType'] extends 'PgVarchar' | 'SQLiteText' | 'PgChar' | 'MySqlChar' | 'SingleStoreChar' ? Assume<TColumn['_'], {
|
|
15
|
+
length: number | undefined;
|
|
16
|
+
}>['length'] : TColumn['_']['columnType'] extends 'MySqlText' | 'MySqlVarChar' | 'SingleStoreText' | 'SingleStoreVarChar' ? number : TColumn['_']['columnType'] extends 'PgBinaryVector' | 'PgHalfVector' | 'PgVector' ? Assume<TColumn['_'], {
|
|
17
|
+
dimensions: number;
|
|
18
|
+
}>['dimensions'] : TColumn['_']['columnType'] extends 'PgArray' ? Assume<TColumn['_'], {
|
|
19
|
+
size: number | undefined;
|
|
20
|
+
}>['size'] : undefined;
|
|
21
|
+
fixedLength: TColumn['_']['columnType'] extends 'PgChar' | 'PgHalfVector' | 'PgVector' | 'PgArray' | 'MySqlChar' | 'SingleStoreChar' ? true : false;
|
|
22
|
+
};
|
|
23
|
+
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'], GetEnumValuesFromColumn<T>, GetBaseColumn<T>, ExtractAdditionalProperties<T>>, undefined>;
|
|
25
|
+
export type GetValibotType<TData, TDataType extends string, TColumnType extends string, TEnumValues extends [string, ...string[]] | undefined, TBaseColumn extends Column | undefined, TAdditionalProperties extends Record<string, any>> = TColumnType extends 'PgHalfVector' | 'PgVector' ? TAdditionalProperties['max'] extends number ? v.SchemaWithPipe<[
|
|
26
|
+
v.ArraySchema<v.NumberSchema<undefined>, undefined>,
|
|
27
|
+
GetLengthAction<TAdditionalProperties, number[]>
|
|
28
|
+
]> : v.ArraySchema<v.NumberSchema<undefined>, undefined> : TColumnType extends 'PgUUID' ? v.SchemaWithPipe<[v.StringSchema<undefined>, v.UuidAction<string, undefined>]> : TColumnType extends 'PgBinaryVector' ? v.SchemaWithPipe<RemoveNeverElements<[
|
|
29
|
+
v.StringSchema<undefined>,
|
|
30
|
+
v.RegexAction<string, undefined>,
|
|
31
|
+
TAdditionalProperties['max'] extends number ? GetLengthAction<TAdditionalProperties, string> : never
|
|
32
|
+
]>> : TBaseColumn extends Column ? TAdditionalProperties['max'] extends number ? v.SchemaWithPipe<[
|
|
33
|
+
GetArraySchema<TBaseColumn>,
|
|
34
|
+
GetLengthAction<TAdditionalProperties, TBaseColumn['_']['data'][]>
|
|
35
|
+
]> : GetArraySchema<TBaseColumn> : ArrayHasAtLeastOneValue<TEnumValues> extends true ? v.EnumSchema<EnumValuesToEnum<Assume<TEnumValues, [string, ...string[]]>>, undefined> : TData extends infer TTuple extends [any, ...any[]] ? v.TupleSchema<Assume<{
|
|
36
|
+
[K in keyof TTuple]: GetValibotType<TTuple[K], string, string, undefined, undefined, {
|
|
37
|
+
noPipe: true;
|
|
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, {
|
|
43
|
+
noPipe: true;
|
|
44
|
+
}>, undefined> : TData extends infer TDict extends Record<string, any> ? v.ObjectSchema<{
|
|
45
|
+
readonly [K in keyof TDict]: GetValibotType<TDict[K], string, string, undefined, undefined, {
|
|
46
|
+
noPipe: true;
|
|
47
|
+
}>;
|
|
48
|
+
}, undefined> : TDataType extends 'json' ? v.GenericSchema<Json> : TData extends number ? TAdditionalProperties['noPipe'] extends true ? v.NumberSchema<undefined> : v.SchemaWithPipe<RemoveNeverElements<[
|
|
49
|
+
v.NumberSchema<undefined>,
|
|
50
|
+
v.MinValueAction<number, number, undefined>,
|
|
51
|
+
v.MaxValueAction<number, number, undefined>,
|
|
52
|
+
TColumnType extends 'MySqlTinyInt' | 'SingleStoreTinyInt' | 'PgSmallInt' | 'PgSmallSerial' | 'MySqlSmallInt' | 'MySqlMediumInt' | 'SingleStoreSmallInt' | 'SingleStoreMediumInt' | 'PgInteger' | 'PgSerial' | 'MySqlInt' | 'SingleStoreInt' | 'PgBigInt53' | 'PgBigSerial53' | 'MySqlBigInt53' | 'MySqlSerial' | 'SingleStoreBigInt53' | 'SingleStoreSerial' | 'SQLiteInteger' | 'MySqlYear' | 'SingleStoreYear' ? v.IntegerAction<number, undefined> : never
|
|
53
|
+
]>> : TData extends bigint ? TAdditionalProperties['noPipe'] extends true ? v.BigintSchema<undefined> : v.SchemaWithPipe<[
|
|
54
|
+
v.BigintSchema<undefined>,
|
|
55
|
+
v.MinValueAction<bigint, bigint, undefined>,
|
|
56
|
+
v.MaxValueAction<bigint, bigint, undefined>
|
|
57
|
+
]> : 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
|
+
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> = ColumnIsGeneratedAlwaysAs<TColumn> extends true ? never : TColumn['_']['notNull'] extends true ? TColumn['_']['hasDefault'] extends true ? v.OptionalSchema<TSchema, undefined> : TSchema : v.OptionalSchema<v.NullableSchema<TSchema, undefined>, undefined>;
|
|
60
|
+
type HandleUpdateColumn<TSchema extends v.GenericSchema, TColumn extends Column> = ColumnIsGeneratedAlwaysAs<TColumn> extends true ? never : TColumn['_']['notNull'] extends true ? v.OptionalSchema<TSchema, undefined> : v.OptionalSchema<v.NullableSchema<TSchema, undefined>, undefined>;
|
|
61
|
+
export type HandleColumn<TType extends 'select' | 'insert' | 'update', TColumn extends Column> = GetValibotType<TColumn['_']['data'], TColumn['_']['dataType'], TColumn['_']['columnType'], GetEnumValuesFromColumn<TColumn>, GetBaseColumn<TColumn>, 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
|
+
export {};
|
package/constants.d.cts
ADDED
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
export declare const CONSTANTS: {
|
|
2
|
+
INT8_MIN: number;
|
|
3
|
+
INT8_MAX: number;
|
|
4
|
+
INT8_UNSIGNED_MAX: number;
|
|
5
|
+
INT16_MIN: number;
|
|
6
|
+
INT16_MAX: number;
|
|
7
|
+
INT16_UNSIGNED_MAX: number;
|
|
8
|
+
INT24_MIN: number;
|
|
9
|
+
INT24_MAX: number;
|
|
10
|
+
INT24_UNSIGNED_MAX: number;
|
|
11
|
+
INT32_MIN: number;
|
|
12
|
+
INT32_MAX: number;
|
|
13
|
+
INT32_UNSIGNED_MAX: number;
|
|
14
|
+
INT48_MIN: number;
|
|
15
|
+
INT48_MAX: number;
|
|
16
|
+
INT48_UNSIGNED_MAX: number;
|
|
17
|
+
INT64_MIN: bigint;
|
|
18
|
+
INT64_MAX: bigint;
|
|
19
|
+
INT64_UNSIGNED_MAX: bigint;
|
|
20
|
+
};
|
package/constants.d.mts
ADDED
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
export declare const CONSTANTS: {
|
|
2
|
+
INT8_MIN: number;
|
|
3
|
+
INT8_MAX: number;
|
|
4
|
+
INT8_UNSIGNED_MAX: number;
|
|
5
|
+
INT16_MIN: number;
|
|
6
|
+
INT16_MAX: number;
|
|
7
|
+
INT16_UNSIGNED_MAX: number;
|
|
8
|
+
INT24_MIN: number;
|
|
9
|
+
INT24_MAX: number;
|
|
10
|
+
INT24_UNSIGNED_MAX: number;
|
|
11
|
+
INT32_MIN: number;
|
|
12
|
+
INT32_MAX: number;
|
|
13
|
+
INT32_UNSIGNED_MAX: number;
|
|
14
|
+
INT48_MIN: number;
|
|
15
|
+
INT48_MAX: number;
|
|
16
|
+
INT48_UNSIGNED_MAX: number;
|
|
17
|
+
INT64_MIN: bigint;
|
|
18
|
+
INT64_MAX: bigint;
|
|
19
|
+
INT64_UNSIGNED_MAX: bigint;
|
|
20
|
+
};
|
package/constants.d.ts
ADDED
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
export declare const CONSTANTS: {
|
|
2
|
+
INT8_MIN: number;
|
|
3
|
+
INT8_MAX: number;
|
|
4
|
+
INT8_UNSIGNED_MAX: number;
|
|
5
|
+
INT16_MIN: number;
|
|
6
|
+
INT16_MAX: number;
|
|
7
|
+
INT16_UNSIGNED_MAX: number;
|
|
8
|
+
INT24_MIN: number;
|
|
9
|
+
INT24_MAX: number;
|
|
10
|
+
INT24_UNSIGNED_MAX: number;
|
|
11
|
+
INT32_MIN: number;
|
|
12
|
+
INT32_MAX: number;
|
|
13
|
+
INT32_UNSIGNED_MAX: number;
|
|
14
|
+
INT48_MIN: number;
|
|
15
|
+
INT48_MAX: number;
|
|
16
|
+
INT48_UNSIGNED_MAX: number;
|
|
17
|
+
INT64_MIN: bigint;
|
|
18
|
+
INT64_MAX: bigint;
|
|
19
|
+
INT64_UNSIGNED_MAX: bigint;
|
|
20
|
+
};
|