drizzle-valibot 0.1.0 → 0.1.1

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.
Files changed (3) hide show
  1. package/index.d.cts +43 -0
  2. package/index.d.mts +43 -0
  3. package/package.json +13 -5
package/index.d.cts ADDED
@@ -0,0 +1,43 @@
1
+ import { type Assume, type DrizzleTypeError, type Equal, type Simplify, type Table, type Column } from 'drizzle-orm';
2
+ import { type AnySchema, type ArraySchema, type BaseSchema, type BigintSchema, type BooleanSchema, type DateSchema, type EnumSchema, type NullableSchema, type NumberSchema, type ObjectSchema, type OptionalSchema, type StringSchema } from 'valibot';
3
+ type Json = typeof jsonSchema;
4
+ export declare const jsonSchema: import("valibot").UnionSchema<[import("valibot").UnionSchema<[StringSchema<string>, NumberSchema<number>, BooleanSchema<boolean>, import("valibot").NullSchema<null>], string | number | boolean | null>, ArraySchema<AnySchema<any>, any[]>, import("valibot").RecordSchema<AnySchema<any>, StringSchema<string>, {
5
+ [x: string]: any;
6
+ }>], string | number | boolean | any[] | {
7
+ [x: string]: any;
8
+ } | null>;
9
+ type MapInsertColumnToValibot<TColumn extends Column, TType extends BaseSchema<any, any>> = TColumn['_']['notNull'] extends false ? OptionalSchema<NullableSchema<TType>> : TColumn['_']['hasDefault'] extends true ? OptionalSchema<TType> : TType;
10
+ type MapSelectColumnToValibot<TColumn extends Column, TType extends BaseSchema<any, any>> = TColumn['_']['notNull'] extends false ? NullableSchema<TType> : TType;
11
+ type MapColumnToValibot<TColumn extends Column, TType extends BaseSchema<any, any>, TMode extends 'insert' | 'select'> = TMode extends 'insert' ? MapInsertColumnToValibot<TColumn, TType> : MapSelectColumnToValibot<TColumn, TType>;
12
+ type MaybeOptional<TColumn extends Column, TType extends BaseSchema<any, any>, TMode extends 'insert' | 'select', TNoOptional extends boolean> = TNoOptional extends true ? TType : MapColumnToValibot<TColumn, TType, TMode>;
13
+ type GetValibotType<TColumn extends Column> = TColumn['_']['dataType'] extends infer TDataType ? TDataType extends 'custom' ? AnySchema : TDataType extends 'json' ? Json : TColumn extends {
14
+ enumValues: [string, ...string[]];
15
+ } ? Equal<TColumn['enumValues'], [string, ...string[]]> extends true ? StringSchema : EnumSchema<TColumn['enumValues'], TColumn['enumValues'][number]> : TDataType extends 'array' ? ArraySchema<GetValibotType<Assume<TColumn['_'], {
16
+ baseColumn: Column;
17
+ }>['baseColumn']>> : TDataType extends 'bigint' ? BigintSchema : TDataType extends 'number' ? NumberSchema : TDataType extends 'string' ? StringSchema : TDataType extends 'boolean' ? BooleanSchema : TDataType extends 'date' ? DateSchema : AnySchema : never;
18
+ type ValueOrUpdater<T, TUpdaterArg> = T | ((arg: TUpdaterArg) => T);
19
+ type UnwrapValueOrUpdater<T> = T extends ValueOrUpdater<infer U, any> ? U : never;
20
+ export type Refine<TTable extends Table, TMode extends 'select' | 'insert'> = {
21
+ [K in keyof TTable['_']['columns']]?: ValueOrUpdater<BaseSchema<any, any>, TMode extends 'select' ? BuildSelectSchema<TTable, {}, true> : BuildInsertSchema<TTable, {}, true>>;
22
+ };
23
+ export type BuildInsertSchema<TTable extends Table, TRefine extends Refine<TTable, 'insert'> | {}, TNoOptional extends boolean = false> = TTable['_']['columns'] extends infer TColumns extends Record<string, Column<any>> ? {
24
+ [K in keyof TColumns & string]: MaybeOptional<TColumns[K], K extends keyof TRefine ? Assume<UnwrapValueOrUpdater<TRefine[K]>, BaseSchema<any>> : GetValibotType<TColumns[K]>, 'insert', TNoOptional>;
25
+ } : never;
26
+ export type BuildSelectSchema<TTable extends Table, TRefine extends Refine<TTable, 'select'>, TNoOptional extends boolean = false> = Simplify<{
27
+ [K in keyof TTable['_']['columns']]: MaybeOptional<TTable['_']['columns'][K], K extends keyof TRefine ? Assume<UnwrapValueOrUpdater<TRefine[K]>, BaseSchema<any, any>> : GetValibotType<TTable['_']['columns'][K]>, 'select', TNoOptional>;
28
+ }>;
29
+ export declare function createInsertSchema<TTable extends Table, TRefine extends Refine<TTable, 'insert'> = Refine<TTable, 'insert'>>(table: TTable,
30
+ /**
31
+ * @param refine Refine schema fields
32
+ */
33
+ refine?: {
34
+ [K in keyof TRefine]: K extends keyof TTable['_']['columns'] ? TRefine[K] : DrizzleTypeError<`Column '${K & string}' does not exist in table '${TTable['_']['name']}'`>;
35
+ }): ObjectSchema<BuildInsertSchema<TTable, Equal<TRefine, Refine<TTable, 'insert'>> extends true ? {} : TRefine>>;
36
+ export declare function createSelectSchema<TTable extends Table, TRefine extends Refine<TTable, 'select'> = Refine<TTable, 'select'>>(table: TTable,
37
+ /**
38
+ * @param refine Refine schema fields
39
+ */
40
+ refine?: {
41
+ [K in keyof TRefine]: K extends keyof TTable['_']['columns'] ? TRefine[K] : DrizzleTypeError<`Column '${K & string}' does not exist in table '${TTable['_']['name']}'`>;
42
+ }): ObjectSchema<BuildSelectSchema<TTable, Equal<TRefine, Refine<TTable, 'select'>> extends true ? {} : TRefine>>;
43
+ export {};
package/index.d.mts ADDED
@@ -0,0 +1,43 @@
1
+ import { type Assume, type DrizzleTypeError, type Equal, type Simplify, type Table, type Column } from 'drizzle-orm';
2
+ import { type AnySchema, type ArraySchema, type BaseSchema, type BigintSchema, type BooleanSchema, type DateSchema, type EnumSchema, type NullableSchema, type NumberSchema, type ObjectSchema, type OptionalSchema, type StringSchema } from 'valibot';
3
+ type Json = typeof jsonSchema;
4
+ export declare const jsonSchema: import("valibot").UnionSchema<[import("valibot").UnionSchema<[StringSchema<string>, NumberSchema<number>, BooleanSchema<boolean>, import("valibot").NullSchema<null>], string | number | boolean | null>, ArraySchema<AnySchema<any>, any[]>, import("valibot").RecordSchema<AnySchema<any>, StringSchema<string>, {
5
+ [x: string]: any;
6
+ }>], string | number | boolean | any[] | {
7
+ [x: string]: any;
8
+ } | null>;
9
+ type MapInsertColumnToValibot<TColumn extends Column, TType extends BaseSchema<any, any>> = TColumn['_']['notNull'] extends false ? OptionalSchema<NullableSchema<TType>> : TColumn['_']['hasDefault'] extends true ? OptionalSchema<TType> : TType;
10
+ type MapSelectColumnToValibot<TColumn extends Column, TType extends BaseSchema<any, any>> = TColumn['_']['notNull'] extends false ? NullableSchema<TType> : TType;
11
+ type MapColumnToValibot<TColumn extends Column, TType extends BaseSchema<any, any>, TMode extends 'insert' | 'select'> = TMode extends 'insert' ? MapInsertColumnToValibot<TColumn, TType> : MapSelectColumnToValibot<TColumn, TType>;
12
+ type MaybeOptional<TColumn extends Column, TType extends BaseSchema<any, any>, TMode extends 'insert' | 'select', TNoOptional extends boolean> = TNoOptional extends true ? TType : MapColumnToValibot<TColumn, TType, TMode>;
13
+ type GetValibotType<TColumn extends Column> = TColumn['_']['dataType'] extends infer TDataType ? TDataType extends 'custom' ? AnySchema : TDataType extends 'json' ? Json : TColumn extends {
14
+ enumValues: [string, ...string[]];
15
+ } ? Equal<TColumn['enumValues'], [string, ...string[]]> extends true ? StringSchema : EnumSchema<TColumn['enumValues'], TColumn['enumValues'][number]> : TDataType extends 'array' ? ArraySchema<GetValibotType<Assume<TColumn['_'], {
16
+ baseColumn: Column;
17
+ }>['baseColumn']>> : TDataType extends 'bigint' ? BigintSchema : TDataType extends 'number' ? NumberSchema : TDataType extends 'string' ? StringSchema : TDataType extends 'boolean' ? BooleanSchema : TDataType extends 'date' ? DateSchema : AnySchema : never;
18
+ type ValueOrUpdater<T, TUpdaterArg> = T | ((arg: TUpdaterArg) => T);
19
+ type UnwrapValueOrUpdater<T> = T extends ValueOrUpdater<infer U, any> ? U : never;
20
+ export type Refine<TTable extends Table, TMode extends 'select' | 'insert'> = {
21
+ [K in keyof TTable['_']['columns']]?: ValueOrUpdater<BaseSchema<any, any>, TMode extends 'select' ? BuildSelectSchema<TTable, {}, true> : BuildInsertSchema<TTable, {}, true>>;
22
+ };
23
+ export type BuildInsertSchema<TTable extends Table, TRefine extends Refine<TTable, 'insert'> | {}, TNoOptional extends boolean = false> = TTable['_']['columns'] extends infer TColumns extends Record<string, Column<any>> ? {
24
+ [K in keyof TColumns & string]: MaybeOptional<TColumns[K], K extends keyof TRefine ? Assume<UnwrapValueOrUpdater<TRefine[K]>, BaseSchema<any>> : GetValibotType<TColumns[K]>, 'insert', TNoOptional>;
25
+ } : never;
26
+ export type BuildSelectSchema<TTable extends Table, TRefine extends Refine<TTable, 'select'>, TNoOptional extends boolean = false> = Simplify<{
27
+ [K in keyof TTable['_']['columns']]: MaybeOptional<TTable['_']['columns'][K], K extends keyof TRefine ? Assume<UnwrapValueOrUpdater<TRefine[K]>, BaseSchema<any, any>> : GetValibotType<TTable['_']['columns'][K]>, 'select', TNoOptional>;
28
+ }>;
29
+ export declare function createInsertSchema<TTable extends Table, TRefine extends Refine<TTable, 'insert'> = Refine<TTable, 'insert'>>(table: TTable,
30
+ /**
31
+ * @param refine Refine schema fields
32
+ */
33
+ refine?: {
34
+ [K in keyof TRefine]: K extends keyof TTable['_']['columns'] ? TRefine[K] : DrizzleTypeError<`Column '${K & string}' does not exist in table '${TTable['_']['name']}'`>;
35
+ }): ObjectSchema<BuildInsertSchema<TTable, Equal<TRefine, Refine<TTable, 'insert'>> extends true ? {} : TRefine>>;
36
+ export declare function createSelectSchema<TTable extends Table, TRefine extends Refine<TTable, 'select'> = Refine<TTable, 'select'>>(table: TTable,
37
+ /**
38
+ * @param refine Refine schema fields
39
+ */
40
+ refine?: {
41
+ [K in keyof TRefine]: K extends keyof TTable['_']['columns'] ? TRefine[K] : DrizzleTypeError<`Column '${K & string}' does not exist in table '${TTable['_']['name']}'`>;
42
+ }): ObjectSchema<BuildSelectSchema<TTable, Equal<TRefine, Refine<TTable, 'select'>> extends true ? {} : TRefine>>;
43
+ export {};
package/package.json CHANGED
@@ -1,10 +1,10 @@
1
1
  {
2
2
  "name": "drizzle-valibot",
3
- "version": "0.1.0",
3
+ "version": "0.1.1",
4
4
  "description": "Generate valibot schemas from Drizzle ORM schemas",
5
5
  "type": "module",
6
6
  "scripts": {
7
- "build": "rimraf dist && rollup --config rollup.config.ts --configPlugin typescript && resolve-tspaths && cp README.md package.json dist/",
7
+ "build": "tsx scripts/build.ts",
8
8
  "b": "pnpm build",
9
9
  "test:types": "cd tests && tsc",
10
10
  "pack": "(cd dist && npm pack --pack-destination ..) && rm -f package.tgz && mv *.tgz package.tgz",
@@ -13,9 +13,15 @@
13
13
  },
14
14
  "exports": {
15
15
  ".": {
16
+ "import": {
17
+ "types": "./index.d.mts",
18
+ "default": "./index.mjs"
19
+ },
20
+ "require": {
21
+ "types": "./index.d.cjs",
22
+ "default": "./index.cjs"
23
+ },
16
24
  "types": "./index.d.ts",
17
- "import": "./index.mjs",
18
- "require": "./index.cjs",
19
25
  "default": "./index.mjs"
20
26
  }
21
27
  },
@@ -69,10 +75,12 @@
69
75
  "@sinclair/typebox": "^0.29.6",
70
76
  "@types/node": "^18.15.10",
71
77
  "ava": "^5.1.0",
78
+ "cpy": "^10.1.0",
72
79
  "drizzle-orm": "link:../drizzle-orm/dist",
73
80
  "rimraf": "^5.0.0",
74
81
  "rollup": "^3.20.7",
75
82
  "tsx": "^3.12.2",
76
- "valibot": "^0.12.0"
83
+ "valibot": "^0.12.0",
84
+ "zx": "^7.2.2"
77
85
  }
78
86
  }