This commit is contained in:
@@ -1,7 +1,8 @@
|
|||||||
|
import { Pipe, Tuples } from "hotscript"
|
||||||
import { AbstractClass, Class } from "type-fest"
|
import { AbstractClass, Class } from "type-fest"
|
||||||
import { Trait } from "./Trait"
|
import { Trait } from "./Trait"
|
||||||
import { Implements, ImplementsStatic, TraitExpression } from "./TraitExpression"
|
import { TraitExpression } from "./TraitExpression"
|
||||||
import { StaticMembers } from "./util"
|
import { ExtendFn, SimplifyFn, StaticMembers } from "./util"
|
||||||
|
|
||||||
|
|
||||||
export type TraitApplierSuperTag = "@thilawyn/traitify-ts/Super"
|
export type TraitApplierSuperTag = "@thilawyn/traitify-ts/Super"
|
||||||
@@ -49,7 +50,17 @@ export class TraitBuilder<
|
|||||||
}
|
}
|
||||||
|
|
||||||
extendAbstract<A extends Abstract>(
|
extendAbstract<A extends Abstract>(
|
||||||
_: (Super: AbstractClass<Implements<SuperExpression> & Abstract>) => AbstractClass<A, []>
|
_: (
|
||||||
|
Super: AbstractClass<
|
||||||
|
Pipe<SuperExpression, [
|
||||||
|
TraitExpression.TraitsFn,
|
||||||
|
Tuples.Map<Trait.OwnAbstractFn>,
|
||||||
|
Tuples.Append<Abstract>,
|
||||||
|
ExtendFn,
|
||||||
|
SimplifyFn,
|
||||||
|
]>
|
||||||
|
>
|
||||||
|
) => AbstractClass<A, []>
|
||||||
) {
|
) {
|
||||||
return new TraitBuilder(
|
return new TraitBuilder(
|
||||||
this.traitSuperExpression,
|
this.traitSuperExpression,
|
||||||
@@ -69,7 +80,15 @@ export class TraitBuilder<
|
|||||||
}
|
}
|
||||||
|
|
||||||
extendStaticAbstract<A extends StaticAbstract>(
|
extendStaticAbstract<A extends StaticAbstract>(
|
||||||
_: (Super: AbstractClass<ImplementsStatic<SuperExpression> & StaticAbstract>) => AbstractClass<A, []>
|
_: (Super: AbstractClass<
|
||||||
|
Pipe<SuperExpression, [
|
||||||
|
TraitExpression.TraitsFn,
|
||||||
|
Tuples.Map<Trait.OwnStaticAbstractFn>,
|
||||||
|
Tuples.Append<StaticAbstract>,
|
||||||
|
ExtendFn,
|
||||||
|
SimplifyFn,
|
||||||
|
]>
|
||||||
|
>) => AbstractClass<A, []>
|
||||||
) {
|
) {
|
||||||
return new TraitBuilder(
|
return new TraitBuilder(
|
||||||
this.traitSuperExpression,
|
this.traitSuperExpression,
|
||||||
|
|||||||
@@ -5,13 +5,6 @@ import { TraitBuilder } from "./TraitBuilder"
|
|||||||
import { ExtendFn, SimplifyFn, StaticMembersFn } from "./util"
|
import { ExtendFn, SimplifyFn, StaticMembersFn } from "./util"
|
||||||
|
|
||||||
|
|
||||||
// type RemoveSupertraitsAbstractFromAbstract<Left, Right> = {
|
|
||||||
// [Key in Extract<keyof Left, keyof Right>]: Left[Key]
|
|
||||||
// } & {
|
|
||||||
// [Key in Exclude<keyof Left, keyof Right>]: Left[Key]
|
|
||||||
// }
|
|
||||||
|
|
||||||
|
|
||||||
export class TraitExpression<
|
export class TraitExpression<
|
||||||
Superclass extends AbstractClass<object>,
|
Superclass extends AbstractClass<object>,
|
||||||
const Traits extends Trait<any, any, any, any>[],
|
const Traits extends Trait<any, any, any, any>[],
|
||||||
|
|||||||
@@ -62,7 +62,7 @@ type ActiveStatefulSubscriptionClass = Trait.Class<typeof ActiveStatefulSubscrip
|
|||||||
|
|
||||||
class TestSuperclass {
|
class TestSuperclass {
|
||||||
// id: number = 69
|
// id: number = 69
|
||||||
// static test = 69
|
static test = 69
|
||||||
}
|
}
|
||||||
|
|
||||||
const exp = expression
|
const exp = expression
|
||||||
|
|||||||
Reference in New Issue
Block a user