Fixed TraitBuilder
All checks were successful
continuous-integration/drone/push Build is passing

This commit is contained in:
Julien Valverdé
2024-02-19 01:40:24 +01:00
parent 34c91707ae
commit 3c470a63f2

View File

@@ -1,32 +1,34 @@
import { AbstractClass, Simplify } from "type-fest"
import { Trait, Traits } from "./Trait"
import { Trait } from "./Trait"
import { TraitExpression } from "./TraitExpression"
import { ExtendPlain, StaticMembers } from "./util"
type ImplSuper<
SuperExpression extends TraitExpression<
typeof TraitExpression.NullSuperclass,
Trait<any, any, any, any>[]
>,
Abstract extends object,
StaticAbstract extends object,
> = (
type ImplSuper<This> = (
This extends TraitBuilder<
any,
infer Abstract,
infer StaticAbstract,
infer ImplClass
>
? (
AbstractClass<
Simplify<
ExtendPlain<[
...Traits.MapImplInstance<
TraitExpression.Traits<SuperExpression>
>,
Abstract,
InstanceType<ImplClass>,
]>
>
> &
Simplify<
ExtendPlain<[
StaticAbstract,
StaticMembers<ImplClass>,
]>
> &
ExtendPlain<[
...Traits.MapImplStaticMembers<
TraitExpression.Traits<SuperExpression>
>,
StaticAbstract,
]> &
{ readonly _tag: "@thilawyn/traitify-ts/Super" } // TODO: replace with unique symbol?
)
: never
)
@@ -69,15 +71,9 @@ export class TraitBuilder<
}
implement<
ImplClassWithAbstract extends ImplSuper< // TODO: use This instead?
SuperExpression,
Abstract,
StaticAbstract
>
ImplClassWithAbstract extends ImplSuper<typeof this>
>(
apply: (
Super: ImplSuper<SuperExpression, Abstract, StaticAbstract>
) => ImplClassWithAbstract
apply: (Super: ImplSuper<typeof this>) => ImplClassWithAbstract
) {
return new TraitBuilder(
this.traitSuperExpression,
@@ -91,9 +87,7 @@ export class TraitBuilder<
InstanceType<ImplClassWithAbstract>,
keyof Abstract
>
>,
ConstructorParameters<ImplClassWithAbstract>
>
> &
Simplify<
Omit<