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

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