Fixed TraitExpressionBuilder
All checks were successful
continuous-integration/drone/push Build is passing
All checks were successful
continuous-integration/drone/push Build is passing
This commit is contained in:
@@ -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>
|
||||
)
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user