This commit is contained in:
@@ -8,7 +8,10 @@ import { Extend } from "../util"
|
||||
export class EffectSchemaTraitExpression<
|
||||
Superclass extends S.Class<unknown, Fields, A, I, R, C, Inherited, Proto>,
|
||||
Fields extends S.Struct.Fields,
|
||||
A, I, R, C,
|
||||
A,
|
||||
I,
|
||||
R,
|
||||
C,
|
||||
Inherited extends object,
|
||||
Proto,
|
||||
|
||||
@@ -24,7 +27,10 @@ export class EffectSchemaTraitExpression<
|
||||
S.Class<
|
||||
Self,
|
||||
Fields,
|
||||
A, I, R, C,
|
||||
A,
|
||||
I,
|
||||
R,
|
||||
C,
|
||||
Simplify<
|
||||
Extend<[
|
||||
Inherited,
|
||||
|
||||
@@ -1,14 +1,84 @@
|
||||
import { Schema as S } from "@effect/schema"
|
||||
import { Simplify } from "effect/Types"
|
||||
import { Trait } from "../Trait"
|
||||
import { TraitExpression } from "../TraitExpression"
|
||||
import { TraitExpressionBuilder } from "../TraitExpressionBuilder"
|
||||
import { spreadSupertraits } from "../spreadSupertraits"
|
||||
import { traitsUnique } from "../traitsUnique"
|
||||
import { StaticMembers } from "../util"
|
||||
|
||||
|
||||
export class EffectSchemaInitialTraitExpressionBuilder {
|
||||
class<
|
||||
Fields extends S.Struct.Fields
|
||||
>(
|
||||
identifier: string,
|
||||
fields: Fields,
|
||||
annotations?: S.Annotations.Schema<unknown>,
|
||||
) {
|
||||
return new EffectSchemaTraitExpressionBuilder(
|
||||
S.Class<unknown>(identifier)(fields, annotations),
|
||||
[],
|
||||
)
|
||||
}
|
||||
|
||||
taggedClass<
|
||||
Tag extends string,
|
||||
Fields extends S.Struct.Fields,
|
||||
>(
|
||||
tag: Tag,
|
||||
fields: Fields,
|
||||
annotations?: S.Annotations.Schema<unknown>,
|
||||
) {
|
||||
return new EffectSchemaTraitExpressionBuilder(
|
||||
S.TaggedClass<unknown>()(tag, fields, annotations),
|
||||
[],
|
||||
)
|
||||
}
|
||||
|
||||
extends<
|
||||
Super extends S.Class<any, Fields, A, I, R, C, Inherited, Proto>,
|
||||
|
||||
Fields extends S.Struct.Fields,
|
||||
A,
|
||||
I,
|
||||
R,
|
||||
C,
|
||||
Inherited extends object,
|
||||
Proto,
|
||||
|
||||
NewFields extends S.Struct.Fields,
|
||||
>(
|
||||
superclass: Super | S.Class<any, Fields, A, I, R, C, Inherited, Proto>,
|
||||
identifier: string,
|
||||
fields: NewFields,
|
||||
annotations?: S.Annotations.Schema<unknown>,
|
||||
) {
|
||||
return new EffectSchemaTraitExpressionBuilder<
|
||||
Fields & NewFields,
|
||||
Simplify<A & S.Struct.Type<NewFields>>,
|
||||
Simplify<I & S.Struct.Encoded<NewFields>>,
|
||||
R | S.Struct.Context<NewFields>,
|
||||
Simplify<C & S.Struct.Type<NewFields>>,
|
||||
InstanceType<Super>,
|
||||
Proto,
|
||||
StaticMembers<Super>,
|
||||
|
||||
readonly []
|
||||
>(
|
||||
superclass.extend<unknown>(identifier)(fields, annotations) as any,
|
||||
[],
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
export class EffectSchemaTraitExpressionBuilder<
|
||||
Fields extends S.Struct.Fields,
|
||||
A, I, R, C,
|
||||
A,
|
||||
I,
|
||||
R,
|
||||
C,
|
||||
Inherited extends object,
|
||||
Proto,
|
||||
Static extends object,
|
||||
@@ -21,42 +91,6 @@ export class EffectSchemaTraitExpressionBuilder<
|
||||
) {}
|
||||
|
||||
|
||||
class<NewFields extends S.Struct.Fields>(
|
||||
identifier: string,
|
||||
fields: NewFields,
|
||||
annotations?: S.Annotations.Schema<unknown>
|
||||
) {
|
||||
return new EffectSchemaTraitExpressionBuilder(
|
||||
S.Class<unknown>(identifier)(fields, annotations),
|
||||
this.expressionTraits,
|
||||
)
|
||||
}
|
||||
|
||||
|
||||
extends<
|
||||
Super extends S.Class<unknown, SuperFields, SuperA, SuperI, SuperR, SuperC, SuperInherited, SuperProto>,
|
||||
|
||||
SuperFields extends S.Struct.Fields,
|
||||
SuperA, SuperI, SuperR, SuperC,
|
||||
SuperInherited extends object,
|
||||
SuperProto,
|
||||
>(
|
||||
superclass: Super | S.Class<unknown, SuperFields, SuperA, SuperI, SuperR, SuperC, SuperInherited, SuperProto>
|
||||
) {
|
||||
return new EffectSchemaTraitExpressionBuilder<
|
||||
Super,
|
||||
Traits,
|
||||
|
||||
SuperFields,
|
||||
SuperA, SuperI, SuperR, SuperC,
|
||||
SuperInherited,
|
||||
SuperProto
|
||||
>(
|
||||
superclass as Super,
|
||||
this.expressionTraits,
|
||||
)
|
||||
}
|
||||
|
||||
expresses<
|
||||
const T extends readonly Trait<
|
||||
TraitExpression<
|
||||
@@ -71,7 +105,10 @@ export class EffectSchemaTraitExpressionBuilder<
|
||||
...traits: T
|
||||
): EffectSchemaTraitExpressionBuilder<
|
||||
Fields,
|
||||
A, I, R, C,
|
||||
A,
|
||||
I,
|
||||
R,
|
||||
C,
|
||||
Inherited,
|
||||
Proto,
|
||||
Static,
|
||||
@@ -88,3 +125,6 @@ export class EffectSchemaTraitExpressionBuilder<
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
export const effectSchemaExpression = new EffectSchemaInitialTraitExpressionBuilder()
|
||||
|
||||
Reference in New Issue
Block a user