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.
@@ -1,12 +1,11 @@
1
1
  import type { Assume, Column } from 'drizzle-orm';
2
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;
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'], 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<[
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> : 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, {
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 infer TDict extends Record<string, any> ? TColumnType extends 'PgJson' | 'PgJsonb' | 'MySqlJson' | 'SingleStoreJson' | 'SQLiteTextJson' | 'SQLiteBlobJson' ? v.GenericSchema<TDict> : v.ObjectSchema<{
45
- readonly [K in keyof TDict]: GetValibotType<TDict[K], string, string, undefined, undefined, {
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 extends number ? TAdditionalProperties['noPipe'] extends true ? v.NumberSchema<undefined> : v.SchemaWithPipe<RemoveNeverElements<[
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> = 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;
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 {};
@@ -1,12 +1,11 @@
1
1
  import type { Assume, Column } from 'drizzle-orm';
2
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;
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'], 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<[
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> : 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, {
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 infer TDict extends Record<string, any> ? TColumnType extends 'PgJson' | 'PgJsonb' | 'MySqlJson' | 'SingleStoreJson' | 'SQLiteTextJson' | 'SQLiteBlobJson' ? v.GenericSchema<TDict> : v.ObjectSchema<{
45
- readonly [K in keyof TDict]: GetValibotType<TDict[K], string, string, undefined, undefined, {
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 extends number ? TAdditionalProperties['noPipe'] extends true ? v.NumberSchema<undefined> : v.SchemaWithPipe<RemoveNeverElements<[
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> = 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;
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 { 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;
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'], 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<[
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> : 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, {
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 infer TDict extends Record<string, any> ? TColumnType extends 'PgJson' | 'PgJsonb' | 'MySqlJson' | 'SingleStoreJson' | 'SQLiteTextJson' | 'SQLiteBlobJson' ? v.GenericSchema<TDict> : v.ObjectSchema<{
45
- readonly [K in keyof TDict]: GetValibotType<TDict[K], string, string, undefined, undefined, {
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 extends number ? TAdditionalProperties['noPipe'] extends true ? v.NumberSchema<undefined> : v.SchemaWithPipe<RemoveNeverElements<[
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> = 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;
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.1",
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.0",
66
+ "json-rules-engine": "^7.3.1",
67
67
  "rimraf": "^5.0.0",
68
- "rollup": "^3.20.7",
68
+ "rollup": "^3.29.5",
69
69
  "valibot": "1.0.0-beta.7",
70
70
  "vite-tsconfig-paths": "^4.3.2",
71
- "vitest": "^1.6.0",
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, GetBaseColumn, GetEnumValuesFromColumn, GetValibotType, HandleColumn } from "./column.types.cjs";
4
- import type { GetSelection, RemoveNever } from "./utils.cjs";
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
- export type BuildRefineColumns<TColumns extends Record<string, any>> = Simplify<RemoveNever<{
11
- [K in keyof TColumns]: TColumns[K] extends infer TColumn extends Column ? GetValibotType<TColumn['_']['data'], TColumn['_']['dataType'], TColumn['_']['columnType'], GetEnumValuesFromColumn<TColumn>, GetBaseColumn<TColumn>, ExtractAdditionalProperties<TColumn>> extends infer TSchema extends v.GenericSchema ? TSchema : v.AnySchema : TColumns[K] extends infer TObject extends SelectedFieldsFlat<Column> | Table | View ? BuildRefineColumns<GetSelection<TObject>> : TColumns[K];
12
- }>>;
13
- export type BuildRefine<TColumns extends Record<string, any>> = BuildRefineColumns<TColumns> extends infer TBuildColumns ? {
14
- [K in keyof TBuildColumns]?: TBuildColumns[K] extends v.GenericSchema ? ((schema: TBuildColumns[K]) => v.GenericSchema) | v.GenericSchema : TBuildColumns[K] extends Record<string, any> ? Simplify<BuildRefine<TBuildColumns[K]>> : never;
15
- } : never;
16
- type HandleRefinement<TType extends 'select' | 'insert' | 'update', TRefinement extends v.GenericSchema | ((schema: v.GenericSchema) => v.GenericSchema), 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;
17
- type IsRefinementDefined<TRefinements, TKey extends string> = TKey extends keyof TRefinements ? TRefinements[TKey] extends v.GenericSchema | ((schema: any) => any) ? true : false : false;
18
- export type BuildSchema<TType extends 'select' | 'insert' | 'update', TColumns extends Record<string, any>, TRefinements extends Record<string, any> | undefined> = v.ObjectSchema<Simplify<RemoveNever<{
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, GetBaseColumn, GetEnumValuesFromColumn, GetValibotType, HandleColumn } from "./column.types.mjs";
4
- import type { GetSelection, RemoveNever } from "./utils.mjs";
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
- export type BuildRefineColumns<TColumns extends Record<string, any>> = Simplify<RemoveNever<{
11
- [K in keyof TColumns]: TColumns[K] extends infer TColumn extends Column ? GetValibotType<TColumn['_']['data'], TColumn['_']['dataType'], TColumn['_']['columnType'], GetEnumValuesFromColumn<TColumn>, GetBaseColumn<TColumn>, ExtractAdditionalProperties<TColumn>> extends infer TSchema extends v.GenericSchema ? TSchema : v.AnySchema : TColumns[K] extends infer TObject extends SelectedFieldsFlat<Column> | Table | View ? BuildRefineColumns<GetSelection<TObject>> : TColumns[K];
12
- }>>;
13
- export type BuildRefine<TColumns extends Record<string, any>> = BuildRefineColumns<TColumns> extends infer TBuildColumns ? {
14
- [K in keyof TBuildColumns]?: TBuildColumns[K] extends v.GenericSchema ? ((schema: TBuildColumns[K]) => v.GenericSchema) | v.GenericSchema : TBuildColumns[K] extends Record<string, any> ? Simplify<BuildRefine<TBuildColumns[K]>> : never;
15
- } : never;
16
- type HandleRefinement<TType extends 'select' | 'insert' | 'update', TRefinement extends v.GenericSchema | ((schema: v.GenericSchema) => v.GenericSchema), 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;
17
- type IsRefinementDefined<TRefinements, TKey extends string> = TKey extends keyof TRefinements ? TRefinements[TKey] extends v.GenericSchema | ((schema: any) => any) ? true : false : false;
18
- export type BuildSchema<TType extends 'select' | 'insert' | 'update', TColumns extends Record<string, any>, TRefinements extends Record<string, any> | undefined> = v.ObjectSchema<Simplify<RemoveNever<{
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, GetBaseColumn, GetEnumValuesFromColumn, GetValibotType, HandleColumn } from './column.types.js';
4
- import type { GetSelection, RemoveNever } from './utils.js';
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
- export type BuildRefineColumns<TColumns extends Record<string, any>> = Simplify<RemoveNever<{
11
- [K in keyof TColumns]: TColumns[K] extends infer TColumn extends Column ? GetValibotType<TColumn['_']['data'], TColumn['_']['dataType'], TColumn['_']['columnType'], GetEnumValuesFromColumn<TColumn>, GetBaseColumn<TColumn>, ExtractAdditionalProperties<TColumn>> extends infer TSchema extends v.GenericSchema ? TSchema : v.AnySchema : TColumns[K] extends infer TObject extends SelectedFieldsFlat<Column> | Table | View ? BuildRefineColumns<GetSelection<TObject>> : TColumns[K];
12
- }>>;
13
- export type BuildRefine<TColumns extends Record<string, any>> = BuildRefineColumns<TColumns> extends infer TBuildColumns ? {
14
- [K in keyof TBuildColumns]?: TBuildColumns[K] extends v.GenericSchema ? ((schema: TBuildColumns[K]) => v.GenericSchema) | v.GenericSchema : TBuildColumns[K] extends Record<string, any> ? Simplify<BuildRefine<TBuildColumns[K]>> : never;
15
- } : never;
16
- type HandleRefinement<TType extends 'select' | 'insert' | 'update', TRefinement extends v.GenericSchema | ((schema: v.GenericSchema) => v.GenericSchema), 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;
17
- type IsRefinementDefined<TRefinements, TKey extends string> = TKey extends keyof TRefinements ? TRefinements[TKey] extends v.GenericSchema | ((schema: any) => any) ? true : false : false;
18
- export type BuildSchema<TType extends 'select' | 'insert' | 'update', TColumns extends Record<string, any>, TRefinements extends Record<string, any> | undefined> = v.ObjectSchema<Simplify<RemoveNever<{
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 ArrayHasAtLeastOneValue<TEnum extends [any, ...any[]] | undefined> = TEnum extends [infer TString, ...any[]] ? TString extends `${infer TLiteral}` ? TLiteral extends any ? true : false : false : false;
16
- export type ColumnIsGeneratedAlwaysAs<TColumn extends Column> = TColumn['_']['identity'] extends 'always' ? true : TColumn['_']['generated'] extends undefined ? false : TColumn['_']['generated'] extends infer TGenerated extends {
17
- type: string;
18
- } ? TGenerated['type'] extends 'byDefault' ? false : true : true;
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 ArrayHasAtLeastOneValue<TEnum extends [any, ...any[]] | undefined> = TEnum extends [infer TString, ...any[]] ? TString extends `${infer TLiteral}` ? TLiteral extends any ? true : false : false : false;
16
- export type ColumnIsGeneratedAlwaysAs<TColumn extends Column> = TColumn['_']['identity'] extends 'always' ? true : TColumn['_']['generated'] extends undefined ? false : TColumn['_']['generated'] extends infer TGenerated extends {
17
- type: string;
18
- } ? TGenerated['type'] extends 'byDefault' ? false : true : true;
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 ArrayHasAtLeastOneValue<TEnum extends [any, ...any[]] | undefined> = TEnum extends [infer TString, ...any[]] ? TString extends `${infer TLiteral}` ? TLiteral extends any ? true : false : false : false;
16
- export type ColumnIsGeneratedAlwaysAs<TColumn extends Column> = TColumn['_']['identity'] extends 'always' ? true : TColumn['_']['generated'] extends undefined ? false : TColumn['_']['generated'] extends infer TGenerated extends {
17
- type: string;
18
- } ? TGenerated['type'] extends 'byDefault' ? false : true : true;
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
  };