0.1.21 #21

Merged
Thilawyn merged 23 commits from next into master 2024-05-12 01:11:51 +02:00
2 changed files with 86 additions and 40 deletions
Showing only changes of commit b092fdef58 - Show all commits

View File

@@ -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,

View File

@@ -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()