This commit is contained in:
@@ -1,6 +1,6 @@
|
|||||||
import { AbstractClass, Class, Simplify } from "type-fest"
|
import { AbstractClass, Class, Simplify } from "type-fest"
|
||||||
import { TraitExpression } from "./TraitExpression"
|
import { TraitExpression } from "./TraitExpression"
|
||||||
import { ExtendPlain, StaticMembers } from "./util"
|
import { Extend, StaticMembers } from "./util"
|
||||||
|
|
||||||
|
|
||||||
export class Trait<
|
export class Trait<
|
||||||
@@ -103,7 +103,7 @@ export type TraitConcreteClass<T extends Trait<any, any, any, any>> = (
|
|||||||
|
|
||||||
export type TraitInstance<T extends Trait<any, any, any, any>> = (
|
export type TraitInstance<T extends Trait<any, any, any, any>> = (
|
||||||
Simplify<
|
Simplify<
|
||||||
ExtendPlain<[
|
Extend<[
|
||||||
Trait.Abstract<T>,
|
Trait.Abstract<T>,
|
||||||
Trait.ImplInstance<T>,
|
Trait.ImplInstance<T>,
|
||||||
]>
|
]>
|
||||||
@@ -112,7 +112,7 @@ export type TraitInstance<T extends Trait<any, any, any, any>> = (
|
|||||||
|
|
||||||
export type TraitStaticMembers<T extends Trait<any, any, any, any>> = (
|
export type TraitStaticMembers<T extends Trait<any, any, any, any>> = (
|
||||||
Simplify<
|
Simplify<
|
||||||
ExtendPlain<[
|
Extend<[
|
||||||
Trait.StaticAbstract<T>,
|
Trait.StaticAbstract<T>,
|
||||||
Trait.ImplStaticMembers<T>,
|
Trait.ImplStaticMembers<T>,
|
||||||
]>
|
]>
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
import { AbstractClass, Simplify } from "type-fest"
|
import { AbstractClass, Simplify } from "type-fest"
|
||||||
import { Trait } from "./Trait"
|
import { Trait } from "./Trait"
|
||||||
import { TraitExpression } from "./TraitExpression"
|
import { TraitExpression } from "./TraitExpression"
|
||||||
import { ExtendPlain, StaticMembers } from "./util"
|
import { Extend, StaticMembers } from "./util"
|
||||||
|
|
||||||
|
|
||||||
type ImplSuper<This> = (
|
type ImplSuper<This> = (
|
||||||
@@ -14,7 +14,7 @@ type ImplSuper<This> = (
|
|||||||
? (
|
? (
|
||||||
AbstractClass<
|
AbstractClass<
|
||||||
Simplify<
|
Simplify<
|
||||||
ExtendPlain<[
|
Extend<[
|
||||||
Abstract,
|
Abstract,
|
||||||
InstanceType<ImplClass>,
|
InstanceType<ImplClass>,
|
||||||
]>
|
]>
|
||||||
@@ -22,7 +22,7 @@ type ImplSuper<This> = (
|
|||||||
> &
|
> &
|
||||||
|
|
||||||
Simplify<
|
Simplify<
|
||||||
ExtendPlain<[
|
Extend<[
|
||||||
StaticAbstract,
|
StaticAbstract,
|
||||||
StaticMembers<ImplClass>,
|
StaticMembers<ImplClass>,
|
||||||
]>
|
]>
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
import { AbstractClass, Class, Simplify } from "type-fest"
|
import { AbstractClass, Class, Simplify } from "type-fest"
|
||||||
import { Trait, TraitInstance, TraitStaticMembers, TraitTuple } from "./Trait"
|
import { Trait, TraitInstance, TraitStaticMembers, TraitTuple } from "./Trait"
|
||||||
import { TraitBuilder } from "./TraitBuilder"
|
import { TraitBuilder } from "./TraitBuilder"
|
||||||
import { ExtendPlain, StaticMembers } from "./util"
|
import { Extend, StaticMembers } from "./util"
|
||||||
|
|
||||||
|
|
||||||
export class TraitExpression<
|
export class TraitExpression<
|
||||||
@@ -16,7 +16,7 @@ export class TraitExpression<
|
|||||||
get extends(): (
|
get extends(): (
|
||||||
AbstractClass<
|
AbstractClass<
|
||||||
Simplify<
|
Simplify<
|
||||||
ExtendPlain<[
|
Extend<[
|
||||||
InstanceType<Superclass>,
|
InstanceType<Superclass>,
|
||||||
...TraitTuple.MapImplInstance<Traits>,
|
...TraitTuple.MapImplInstance<Traits>,
|
||||||
]>
|
]>
|
||||||
@@ -26,7 +26,7 @@ export class TraitExpression<
|
|||||||
> &
|
> &
|
||||||
|
|
||||||
Simplify<
|
Simplify<
|
||||||
ExtendPlain<[
|
Extend<[
|
||||||
StaticMembers<Superclass>,
|
StaticMembers<Superclass>,
|
||||||
...TraitTuple.MapImplStaticMembers<Traits>,
|
...TraitTuple.MapImplStaticMembers<Traits>,
|
||||||
]>
|
]>
|
||||||
@@ -49,19 +49,19 @@ export class TraitExpression<
|
|||||||
This,
|
This,
|
||||||
|
|
||||||
Simplify<
|
Simplify<
|
||||||
ExtendPlain<TraitTuple.MapAbstract<Traits>>
|
Extend<TraitTuple.MapAbstract<Traits>>
|
||||||
>,
|
>,
|
||||||
Simplify<
|
Simplify<
|
||||||
ExtendPlain<TraitTuple.MapStaticAbstract<Traits>>
|
Extend<TraitTuple.MapStaticAbstract<Traits>>
|
||||||
>,
|
>,
|
||||||
|
|
||||||
AbstractClass<
|
AbstractClass<
|
||||||
Simplify<
|
Simplify<
|
||||||
ExtendPlain<TraitTuple.MapImplInstance<Traits>>
|
Extend<TraitTuple.MapImplInstance<Traits>>
|
||||||
>
|
>
|
||||||
> &
|
> &
|
||||||
Simplify<
|
Simplify<
|
||||||
ExtendPlain<TraitTuple.MapImplStaticMembers<Traits>>
|
Extend<TraitTuple.MapImplStaticMembers<Traits>>
|
||||||
>
|
>
|
||||||
>(
|
>(
|
||||||
this,
|
this,
|
||||||
@@ -96,7 +96,7 @@ export type Implements<
|
|||||||
Exp extends TraitExpression<any, Trait<any, any, any, any>[]>
|
Exp extends TraitExpression<any, Trait<any, any, any, any>[]>
|
||||||
> = (
|
> = (
|
||||||
Simplify<
|
Simplify<
|
||||||
ExtendPlain<
|
Extend<
|
||||||
TraitTuple.MapAbstract<
|
TraitTuple.MapAbstract<
|
||||||
TraitExpression.Traits<Exp>
|
TraitExpression.Traits<Exp>
|
||||||
>
|
>
|
||||||
@@ -108,7 +108,7 @@ export type ImplementsStatic<
|
|||||||
Exp extends TraitExpression<any, Trait<any, any, any, any>[]>
|
Exp extends TraitExpression<any, Trait<any, any, any, any>[]>
|
||||||
> = (
|
> = (
|
||||||
Simplify<
|
Simplify<
|
||||||
ExtendPlain<
|
Extend<
|
||||||
TraitTuple.MapStaticAbstract<
|
TraitTuple.MapStaticAbstract<
|
||||||
TraitExpression.Traits<Exp>
|
TraitExpression.Traits<Exp>
|
||||||
>
|
>
|
||||||
@@ -141,7 +141,7 @@ export type TraitExpressionInstance<
|
|||||||
Exp extends TraitExpression<any, Trait<any, any, any, any>[]>
|
Exp extends TraitExpression<any, Trait<any, any, any, any>[]>
|
||||||
> = (
|
> = (
|
||||||
Simplify<
|
Simplify<
|
||||||
ExtendPlain<[
|
Extend<[
|
||||||
InstanceType<TraitExpression.Superclass<Exp>>,
|
InstanceType<TraitExpression.Superclass<Exp>>,
|
||||||
...MapTraitsInstance<TraitExpression.Traits<Exp>>,
|
...MapTraitsInstance<TraitExpression.Traits<Exp>>,
|
||||||
]>
|
]>
|
||||||
@@ -159,7 +159,7 @@ export type TraitExpressionStaticMembers<
|
|||||||
Exp extends TraitExpression<any, Trait<any, any, any, any>[]>
|
Exp extends TraitExpression<any, Trait<any, any, any, any>[]>
|
||||||
> = (
|
> = (
|
||||||
Simplify<
|
Simplify<
|
||||||
ExtendPlain<[
|
Extend<[
|
||||||
StaticMembers<TraitExpression.Superclass<Exp>>,
|
StaticMembers<TraitExpression.Superclass<Exp>>,
|
||||||
...MapTraitsStaticMembers<TraitExpression.Traits<Exp>>,
|
...MapTraitsStaticMembers<TraitExpression.Traits<Exp>>,
|
||||||
]>
|
]>
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
export { type Trait } from "./Trait"
|
export { Trait, TraitClass, TraitConcreteClass, TraitInstance, TraitStaticMembers, TraitTuple } from "./Trait"
|
||||||
export { trait } from "./TraitBuilder"
|
export { TraitBuilder, trait } from "./TraitBuilder"
|
||||||
export { Implements, ImplementsStatic, type TraitExpression } from "./TraitExpression"
|
export { Implements, ImplementsStatic, TraitExpression, TraitExpressionClass, TraitExpressionConcreteClass, TraitExpressionInstance, TraitExpressionStaticMembers } from "./TraitExpression"
|
||||||
export { expression } from "./TraitExpressionBuilder"
|
export { expression } from "./TraitExpressionBuilder"
|
||||||
|
|||||||
@@ -1,25 +1,22 @@
|
|||||||
import { Call, ComposeLeft, Fn, Match, Tuples } from "hotscript"
|
|
||||||
import { CommonKeys } from "."
|
import { CommonKeys } from "."
|
||||||
|
|
||||||
|
|
||||||
type ExtendReducer<Super, Self> = (
|
// type ExtendReducer<Super, Self> = (
|
||||||
Pick<Self, CommonKeys<Self, Super>> extends Pick<Super, CommonKeys<Self, Super>>
|
// Pick<Self, CommonKeys<Self, Super>> extends Pick<Super, CommonKeys<Self, Super>>
|
||||||
? Omit<Super, CommonKeys<Self, Super>> & Self
|
// ? Omit<Super, CommonKeys<Self, Super>> & Self
|
||||||
: never
|
// : never
|
||||||
)
|
// )
|
||||||
interface ExtendReducerFn extends Fn {
|
// interface ExtendReducerFn extends Fn {
|
||||||
return: ExtendReducer<this["arg0"], this["arg1"]>
|
// return: ExtendReducer<this["arg0"], this["arg1"]>
|
||||||
}
|
// }
|
||||||
|
// export type ExtendFn = Tuples.Reduce<ExtendReducerFn, {}>
|
||||||
export type ExtendFn = Tuples.Reduce<ExtendReducerFn, {}>
|
|
||||||
export type Extend<T extends readonly object[]> = Call<ExtendFn, T>
|
|
||||||
|
|
||||||
|
|
||||||
export type ExtendPlain<T extends readonly object[]> = (
|
export type Extend<T extends readonly object[]> = (
|
||||||
T extends [infer Super, infer Self, ...infer Rest]
|
T extends [infer Super, infer Self, ...infer Rest]
|
||||||
? Rest extends object[]
|
? Rest extends object[]
|
||||||
? Pick<Self, CommonKeys<Self, Super>> extends Pick<Super, CommonKeys<Self, Super>>
|
? Pick<Self, CommonKeys<Self, Super>> extends Pick<Super, CommonKeys<Self, Super>>
|
||||||
? ExtendPlain<[
|
? Extend<[
|
||||||
Omit<Super, CommonKeys<Self, Super>> & Self,
|
Omit<Super, CommonKeys<Self, Super>> & Self,
|
||||||
...Rest,
|
...Rest,
|
||||||
]>
|
]>
|
||||||
@@ -33,11 +30,10 @@ export type ExtendPlain<T extends readonly object[]> = (
|
|||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
export type ExtendableFn = ComposeLeft<[
|
// export type ExtendableFn = ComposeLeft<[
|
||||||
ExtendFn,
|
// ExtendFn,
|
||||||
Match<[
|
// Match<[
|
||||||
Match.With<never, false>,
|
// Match.With<never, false>,
|
||||||
Match.With<any, true>,
|
// Match.With<any, true>,
|
||||||
]>
|
// ]>
|
||||||
]>
|
// ]>
|
||||||
export type Extendable<T extends object[]> = Call<ExtendableFn, T>
|
|
||||||
|
|||||||
Reference in New Issue
Block a user