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

This commit is contained in:
Julien Valverdé
2024-02-19 22:08:24 +01:00
parent eee35e7d59
commit df7e7f3401
5 changed files with 59 additions and 71 deletions

View File

@@ -1,9 +1,9 @@
import { Call, Fn, Pipe, Tuples } from "hotscript"
import { Call, Fn, Tuples } from "hotscript"
import { uniq } from "lodash-es"
import { AbstractClass } from "type-fest"
import { Trait } from "./Trait"
import { Trait, TraitTuple } from "./Trait"
import { TraitExpression } from "./TraitExpression"
import { ExtendableFn, StaticMembersFn } from "./util"
import { Extendable, StaticMembers } from "./util"
type SpreadSupertraits<Traits extends Trait<any, any, any, any>[]> = (
@@ -17,49 +17,35 @@ interface PrependTraitSupertraitsFn extends Fn {
}
type AbstractMembersExtendable<
Superclass extends AbstractClass<{}>,
type InstanceExtendable<
Superclass extends AbstractClass<object>,
Traits extends Trait<any, any, any, any>[],
> = (
Pipe<Traits, [
Tuples.Map<Trait.OwnAbstractFn>,
Tuples.Prepend<InstanceType<Superclass>>,
Extendable<[
InstanceType<Superclass>,
...TraitTuple.MapInstance<Traits>,
]>
)
type ImplInstanceExtendable<
Superclass extends AbstractClass<{}>,
type StaticMembersExtendable<
Superclass extends AbstractClass<object>,
Traits extends Trait<any, any, any, any>[],
> = (
Pipe<Traits, [
Tuples.Map<Trait.OwnImplInstanceFn>,
Tuples.Prepend<InstanceType<Superclass>>,
]>
)
type ImplStaticMembersExtendable<
Superclass extends AbstractClass<{}>,
Traits extends Trait<any, any, any, any>[],
> = (
Pipe<Traits, [
Tuples.Map<Trait.OwnImplClassFn>,
Tuples.Prepend<Superclass>,
Tuples.Map<StaticMembersFn>,
ExtendableFn,
Extendable<[
StaticMembers<Superclass>,
...TraitTuple.MapStaticMembers<Traits>,
]>
)
type BuildTraitExpression<
Superclass extends AbstractClass<{}>,
Superclass extends AbstractClass<object>,
Traits extends Trait<any, any, any, any>[],
> = (
AbstractMembersExtendable<Superclass, Traits> extends false
? "Type conflict between the traits abstract members and/or the superclass instance."
: ImplInstanceExtendable<Superclass, Traits> extends false
? "Type conflict between the traits implementation instances and/or the superclass instance."
: ImplStaticMembersExtendable<Superclass, Traits> extends false
? "Type conflict between the traits implementation static members and/or the superclass static members."
: TraitExpression<Superclass, Traits>
InstanceExtendable<Superclass, Traits> extends false
? "Type conflict on the instance side."
: StaticMembersExtendable<Superclass, Traits> extends false
? "Type conflict on the static side."
: TraitExpression<Superclass, Traits>
)