Skip to content
This repository has been archived by the owner on Jul 16, 2024. It is now read-only.

Commit

Permalink
add error messages
Browse files Browse the repository at this point in the history
  • Loading branch information
tim-smart committed Sep 18, 2023
1 parent 1274746 commit 5854173
Show file tree
Hide file tree
Showing 3 changed files with 36 additions and 28 deletions.
4 changes: 2 additions & 2 deletions .changeset/lazy-pigs-cross.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
---
"@effect/schema": minor
"@effect/schema": patch
---

Enforce explicit `Schema.Class` type parameters for better developer experience
Enforce explicit `Schema.Class` type parameters
16 changes: 9 additions & 7 deletions docs/modules/Schema.ts.md
Original file line number Diff line number Diff line change
Expand Up @@ -999,7 +999,9 @@ Added in v1.0.0
```ts
export declare const Class: <Self = never>() => <Fields extends StructFields>(
fields: Fields
) => Self extends never ? never : Class<Simplify<FromStruct<Fields>>, Simplify<ToStruct<Fields>>, Self, Data.Case>
) => [Self] extends [never]
? 'missing Self generic - use `class Self extends Class<Self>()({ ... })`'
: Class<Simplify<FromStruct<Fields>>, Simplify<ToStruct<Fields>>, Self, Data.Case>
```
Added in v1.0.0
Expand All @@ -1016,8 +1018,8 @@ export interface Class<I, A, Self, Inherited = Data.Case> extends Schema<I, Self

readonly extend: <Extended = never>() => <FieldsB extends StructFields>(
fields: FieldsB
) => Extended extends never
? never
) => [Extended] extends [never]
? 'missing Self generic - use `class Self extends Base.extend<Self>()({ ... })`'
: Class<
Simplify<Omit<I, keyof FieldsB> & FromStruct<FieldsB>>,
Simplify<Omit<A, keyof FieldsB> & ToStruct<FieldsB>>,
Expand All @@ -1029,16 +1031,16 @@ export interface Class<I, A, Self, Inherited = Data.Case> extends Schema<I, Self
fields: FieldsB,
decode: (input: A) => ParseResult.ParseResult<Omit<A, keyof FieldsB> & ToStruct<FieldsB>>,
encode: (input: Simplify<Omit<A, keyof FieldsB> & ToStruct<FieldsB>>) => ParseResult.ParseResult<A>
) => Transformed extends never
? never
) => [Transformed] extends [never]
? 'missing Self generic - use `class Self extends Base.transform<Self>()({ ... })`'
: Class<I, Simplify<Omit<A, keyof FieldsB> & ToStruct<FieldsB>>, Transformed, Self>

readonly transformFrom: <Transformed = never>() => <FieldsB extends StructFields>(
fields: FieldsB,
decode: (input: I) => ParseResult.ParseResult<Omit<I, keyof FieldsB> & FromStruct<FieldsB>>,
encode: (input: Simplify<Omit<I, keyof FieldsB> & FromStruct<FieldsB>>) => ParseResult.ParseResult<I>
) => Transformed extends never
? never
) => [Transformed] extends [never]
? 'missing Self generic - use `class Self extends Base.transformFrom<Self>()({ ... })`'
: Class<I, Simplify<Omit<A, keyof FieldsB> & ToStruct<FieldsB>>, Transformed, Self>
}
```
Expand Down
44 changes: 25 additions & 19 deletions src/Schema.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3355,12 +3355,14 @@ export interface Class<I, A, Self, Inherited = Data.Case> extends Schema<I, Self

readonly extend: <Extended = never>() => <FieldsB extends StructFields>(
fields: FieldsB
) => Extended extends never ? never : Class<
Simplify<Omit<I, keyof FieldsB> & FromStruct<FieldsB>>,
Simplify<Omit<A, keyof FieldsB> & ToStruct<FieldsB>>,
Extended,
Self
>
) => [Extended] extends [never]
? "missing Self generic - use `class Self extends Base.extend<Self>()({ ... })`"
: Class<
Simplify<Omit<I, keyof FieldsB> & FromStruct<FieldsB>>,
Simplify<Omit<A, keyof FieldsB> & ToStruct<FieldsB>>,
Extended,
Self
>

readonly transform: <Transformed = never>() => <
FieldsB extends StructFields
Expand All @@ -3372,12 +3374,14 @@ export interface Class<I, A, Self, Inherited = Data.Case> extends Schema<I, Self
encode: (
input: Simplify<Omit<A, keyof FieldsB> & ToStruct<FieldsB>>
) => ParseResult.ParseResult<A>
) => Transformed extends never ? never : Class<
I,
Simplify<Omit<A, keyof FieldsB> & ToStruct<FieldsB>>,
Transformed,
Self
>
) => [Transformed] extends [never]
? "missing Self generic - use `class Self extends Base.transform<Self>()({ ... })`"
: Class<
I,
Simplify<Omit<A, keyof FieldsB> & ToStruct<FieldsB>>,
Transformed,
Self
>

readonly transformFrom: <Transformed = never>() => <
FieldsB extends StructFields
Expand All @@ -3389,12 +3393,14 @@ export interface Class<I, A, Self, Inherited = Data.Case> extends Schema<I, Self
encode: (
input: Simplify<Omit<I, keyof FieldsB> & FromStruct<FieldsB>>
) => ParseResult.ParseResult<I>
) => Transformed extends never ? never : Class<
I,
Simplify<Omit<A, keyof FieldsB> & ToStruct<FieldsB>>,
Transformed,
Self
>
) => [Transformed] extends [never]
? "missing Self generic - use `class Self extends Base.transformFrom<Self>()({ ... })`"
: Class<
I,
Simplify<Omit<A, keyof FieldsB> & ToStruct<FieldsB>>,
Transformed,
Self
>
}

/**
Expand All @@ -3404,7 +3410,7 @@ export interface Class<I, A, Self, Inherited = Data.Case> extends Schema<I, Self
export const Class = <Self = never>() =>
<Fields extends StructFields>(
fields: Fields
): Self extends never ? never
): [Self] extends [never] ? "missing Self generic - use `class Self extends Class<Self>()({ ... })`"
: Class<Simplify<FromStruct<Fields>>, Simplify<ToStruct<Fields>>, Self> =>
makeClass(struct(fields), fields, Data.Class.prototype)

Expand Down

0 comments on commit 5854173

Please sign in to comment.