TraitBuilder work
Some checks failed
continuous-integration/drone/push Build is failing

This commit is contained in:
Julien Valverdé
2024-02-15 19:49:11 +01:00
parent ceba99326d
commit e928a11ee4
2 changed files with 31 additions and 22 deletions

View File

@@ -4,7 +4,7 @@ import { TraitExpression } from "./TraitExpression"
import { ExtendFn, SimplifyFn, StaticMembers, StaticMembersFn } from "./util" import { ExtendFn, SimplifyFn, StaticMembers, StaticMembersFn } from "./util"
export type AddAbstractToImplClass< type AddAbstractToImplClass<
ImplClass extends Class<object, []>, ImplClass extends Class<object, []>,
Abstract extends object, Abstract extends object,
StaticAbstract extends object, StaticAbstract extends object,

View File

@@ -5,9 +5,30 @@ import { TraitExpression } from "./TraitExpression"
import { ExtendFn, SimplifyFn, StaticMembers } from "./util" import { ExtendFn, SimplifyFn, StaticMembers } from "./util"
export type TraitApplierSuperTag = "@thilawyn/traitify-ts/Super" type SuperAbstract<SuperExpression, Abstract> = (
Pipe<SuperExpression, [
TraitExpression.TraitsFn,
Tuples.Map<Trait.OwnAbstractFn>,
Tuples.Append<Abstract>,
ExtendFn,
SimplifyFn,
]>
)
export type RemoveAbstractFromImplClass< type SuperStaticAbstract<SuperExpression, StaticAbstract> = (
Pipe<SuperExpression, [
TraitExpression.TraitsFn,
Tuples.Map<Trait.OwnStaticAbstractFn>,
Tuples.Append<StaticAbstract>,
ExtendFn,
SimplifyFn,
]>
)
type TraitApplierSuperTag = "@thilawyn/traitify-ts/Super"
type RemoveAbstractFromImplClass<
ImplClassWithAbstract extends ( ImplClassWithAbstract extends (
Class<Abstract, []> & Class<Abstract, []> &
StaticAbstract & StaticAbstract &
@@ -40,7 +61,7 @@ export class TraitBuilder<
private readonly traitApply: (Super: AbstractClass<object>) => ImplClass, private readonly traitApply: (Super: AbstractClass<object>) => ImplClass,
) {} ) {}
abstract<A extends Abstract>() { abstract<A extends SuperAbstract<SuperExpression, Abstract>>() {
return new TraitBuilder( return new TraitBuilder(
this.traitSuperExpression, this.traitSuperExpression,
{} as A, {} as A,
@@ -49,16 +70,10 @@ export class TraitBuilder<
) )
} }
extendAbstract<A extends Abstract>( extendAbstract<A extends SuperAbstract<SuperExpression, Abstract>>(
_: ( _: (
Super: AbstractClass< Super: AbstractClass<
Pipe<SuperExpression, [ SuperAbstract<SuperExpression, Abstract>
TraitExpression.TraitsFn,
Tuples.Map<Trait.OwnAbstractFn>,
Tuples.Append<Abstract>,
ExtendFn,
SimplifyFn,
]>
> >
) => AbstractClass<A, []> ) => AbstractClass<A, []>
) { ) {
@@ -70,7 +85,7 @@ export class TraitBuilder<
) )
} }
staticAbstract<A extends StaticAbstract>() { staticAbstract<A extends SuperStaticAbstract<SuperExpression, StaticAbstract>>() {
return new TraitBuilder( return new TraitBuilder(
this.traitSuperExpression, this.traitSuperExpression,
this.traitAbstract, this.traitAbstract,
@@ -79,15 +94,9 @@ export class TraitBuilder<
) )
} }
extendStaticAbstract<A extends StaticAbstract>( extendStaticAbstract<A extends SuperStaticAbstract<SuperExpression, StaticAbstract>>(
_: (Super: AbstractClass< _: (Super: AbstractClass<
Pipe<SuperExpression, [ SuperStaticAbstract<SuperExpression, StaticAbstract>
TraitExpression.TraitsFn,
Tuples.Map<Trait.OwnStaticAbstractFn>,
Tuples.Append<StaticAbstract>,
ExtendFn,
SimplifyFn,
]>
>) => AbstractClass<A, []> >) => AbstractClass<A, []>
) { ) {
return new TraitBuilder( return new TraitBuilder(
@@ -101,7 +110,7 @@ export class TraitBuilder<
implement< implement<
ImplClassWithAbstract extends ( ImplClassWithAbstract extends (
Class<Abstract, []> & Class<Abstract, []> &
StaticAbstract & SuperStaticAbstract<SuperExpression, StaticAbstract> &
{ _tag: TraitApplierSuperTag } { _tag: TraitApplierSuperTag }
) )
>( >(