This commit is contained in:
@@ -4,7 +4,7 @@ import { TraitExpression } from "./TraitExpression"
|
||||
import { ExtendFn, SimplifyFn, StaticMembers, StaticMembersFn } from "./util"
|
||||
|
||||
|
||||
export type AddAbstractToImplClass<
|
||||
type AddAbstractToImplClass<
|
||||
ImplClass extends Class<object, []>,
|
||||
Abstract extends object,
|
||||
StaticAbstract extends object,
|
||||
|
||||
@@ -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 }
|
||||
)
|
||||
>(
|
||||
|
||||
Reference in New Issue
Block a user