ExtendPlain -> Extend
Some checks failed
continuous-integration/drone/push Build is failing

This commit is contained in:
Julien Valverdé
2024-02-19 17:50:34 +01:00
parent 49f0f7b987
commit 8de5750d2e
5 changed files with 38 additions and 42 deletions

View File

@@ -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>,
]> ]>

View File

@@ -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>,
]> ]>

View File

@@ -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>>,
]> ]>

View File

@@ -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"

View File

@@ -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>