This commit is contained in:
@@ -8,7 +8,10 @@ import { Extend } from "../util"
|
|||||||
export class EffectSchemaTraitExpression<
|
export class EffectSchemaTraitExpression<
|
||||||
Superclass extends S.Class<unknown, Fields, A, I, R, C, Inherited, Proto>,
|
Superclass extends S.Class<unknown, Fields, A, I, R, C, Inherited, Proto>,
|
||||||
Fields extends S.Struct.Fields,
|
Fields extends S.Struct.Fields,
|
||||||
A, I, R, C,
|
A,
|
||||||
|
I,
|
||||||
|
R,
|
||||||
|
C,
|
||||||
Inherited extends object,
|
Inherited extends object,
|
||||||
Proto,
|
Proto,
|
||||||
|
|
||||||
@@ -24,7 +27,10 @@ export class EffectSchemaTraitExpression<
|
|||||||
S.Class<
|
S.Class<
|
||||||
Self,
|
Self,
|
||||||
Fields,
|
Fields,
|
||||||
A, I, R, C,
|
A,
|
||||||
|
I,
|
||||||
|
R,
|
||||||
|
C,
|
||||||
Simplify<
|
Simplify<
|
||||||
Extend<[
|
Extend<[
|
||||||
Inherited,
|
Inherited,
|
||||||
|
|||||||
@@ -1,14 +1,84 @@
|
|||||||
import { Schema as S } from "@effect/schema"
|
import { Schema as S } from "@effect/schema"
|
||||||
|
import { Simplify } from "effect/Types"
|
||||||
import { Trait } from "../Trait"
|
import { Trait } from "../Trait"
|
||||||
import { TraitExpression } from "../TraitExpression"
|
import { TraitExpression } from "../TraitExpression"
|
||||||
import { TraitExpressionBuilder } from "../TraitExpressionBuilder"
|
import { TraitExpressionBuilder } from "../TraitExpressionBuilder"
|
||||||
import { spreadSupertraits } from "../spreadSupertraits"
|
import { spreadSupertraits } from "../spreadSupertraits"
|
||||||
import { traitsUnique } from "../traitsUnique"
|
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<
|
export class EffectSchemaTraitExpressionBuilder<
|
||||||
Fields extends S.Struct.Fields,
|
Fields extends S.Struct.Fields,
|
||||||
A, I, R, C,
|
A,
|
||||||
|
I,
|
||||||
|
R,
|
||||||
|
C,
|
||||||
Inherited extends object,
|
Inherited extends object,
|
||||||
Proto,
|
Proto,
|
||||||
Static extends object,
|
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<
|
expresses<
|
||||||
const T extends readonly Trait<
|
const T extends readonly Trait<
|
||||||
TraitExpression<
|
TraitExpression<
|
||||||
@@ -71,7 +105,10 @@ export class EffectSchemaTraitExpressionBuilder<
|
|||||||
...traits: T
|
...traits: T
|
||||||
): EffectSchemaTraitExpressionBuilder<
|
): EffectSchemaTraitExpressionBuilder<
|
||||||
Fields,
|
Fields,
|
||||||
A, I, R, C,
|
A,
|
||||||
|
I,
|
||||||
|
R,
|
||||||
|
C,
|
||||||
Inherited,
|
Inherited,
|
||||||
Proto,
|
Proto,
|
||||||
Static,
|
Static,
|
||||||
@@ -88,3 +125,6 @@ export class EffectSchemaTraitExpressionBuilder<
|
|||||||
)
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
export const effectSchemaExpression = new EffectSchemaInitialTraitExpressionBuilder()
|
||||||
|
|||||||
Reference in New Issue
Block a user