From 7c4e754b24404304a5a6865323533acd5abd7d8d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julien=20Valverd=C3=A9?= Date: Mon, 19 Feb 2024 17:26:44 +0100 Subject: [PATCH] Trait refactoring --- src/Trait.ts | 59 ++++++++++++++---------------------------- src/TraitExpression.ts | 24 ++++++++--------- 2 files changed, 32 insertions(+), 51 deletions(-) diff --git a/src/Trait.ts b/src/Trait.ts index 886fb77..4bff053 100644 --- a/src/Trait.ts +++ b/src/Trait.ts @@ -1,7 +1,6 @@ -import { Fn } from "hotscript" import { AbstractClass, Class, Simplify } from "type-fest" import { TraitExpression } from "./TraitExpression" -import { Extend, ExtendPlain, StaticMembers } from "./util" +import { ExtendPlain, StaticMembers } from "./util" export class Trait< @@ -22,90 +21,72 @@ export class Trait< } export namespace Trait { - export type OwnSuperExpression = ( + export type SuperExpression = ( T extends Trait ? SuperExpression : never ) - export interface OwnSuperExpressionFn extends Fn { - return: Trait.OwnSuperExpression - } - export type OwnAbstract = ( + export type Abstract = ( T extends Trait ? Abstract : never ) - export interface OwnAbstractFn extends Fn { - return: Trait.OwnAbstract - } - export type OwnStaticAbstract = ( + export type StaticAbstract = ( T extends Trait ? StaticAbstract : never ) - export interface OwnStaticAbstractFn extends Fn { - return: Trait.OwnStaticAbstract - } - export type OwnImplClass = ( + export type ImplClass = ( T extends Trait ? ImplClass : never ) - export interface OwnImplClassFn extends Fn { - return: Trait.OwnImplClass - } - export type OwnImplInstance = ( - InstanceType> + export type ImplInstance = ( + InstanceType> ) - export interface OwnImplInstanceFn extends Fn { - return: Trait.OwnImplInstance - } - export type OwnImplStaticMembers = ( - StaticMembers> + export type ImplStaticMembers = ( + StaticMembers> ) export type Supertraits = ( - TraitExpression.Traits> + TraitExpression.Traits> ) - export interface SupertraitsFn extends Fn { - return: Trait.Supertraits - } } -export namespace Traits { +export namespace TraitTuple { export type MapAbstract = { [K in keyof T]: K extends keyof [] ? T[K] - : Trait.OwnAbstract + : Trait.Abstract } export type MapStaticAbstract = { [K in keyof T]: K extends keyof [] ? T[K] - : Trait.OwnStaticAbstract + : Trait.StaticAbstract } export type MapImplClass = { [K in keyof T]: K extends keyof [] ? T[K] - : Trait.OwnImplClass + : Trait.ImplClass } export type MapImplInstance = { [K in keyof T]: K extends keyof [] ? T[K] - : Trait.OwnImplInstance + : Trait.ImplInstance } export type MapImplStaticMembers = { [K in keyof T]: K extends keyof [] ? T[K] - : Trait.OwnImplStaticMembers + : Trait.ImplStaticMembers } } @@ -123,8 +104,8 @@ export type TraitConcreteClass> = ( export type TraitInstance> = ( Simplify< ExtendPlain<[ - Trait.OwnAbstract, - Trait.OwnImplInstance, + Trait.Abstract, + Trait.ImplInstance, ]> > ) @@ -132,8 +113,8 @@ export type TraitInstance> = ( export type TraitStaticMembers> = ( Simplify< ExtendPlain<[ - Trait.OwnStaticAbstract, - StaticMembers>, + Trait.StaticAbstract, + Trait.ImplStaticMembers, ]> > ) diff --git a/src/TraitExpression.ts b/src/TraitExpression.ts index 1a1c4c9..36101fa 100644 --- a/src/TraitExpression.ts +++ b/src/TraitExpression.ts @@ -1,16 +1,16 @@ import { AbstractClass, Class, Simplify } from "type-fest" -import { Trait, TraitInstance, TraitStaticMembers, Traits } from "./Trait" +import { Trait, TraitInstance, TraitStaticMembers, TraitTuple } from "./Trait" import { TraitBuilder } from "./TraitBuilder" import { ExtendPlain, StaticMembers } from "./util" export class TraitExpression< - Superclass extends AbstractClass, - const T extends Trait[], + Superclass extends AbstractClass, + const Traits extends Trait[], > { constructor( readonly superclass: Superclass, - readonly traits: T, + readonly traits: Traits, ) {} get extends(): ( @@ -18,7 +18,7 @@ export class TraitExpression< Simplify< ExtendPlain<[ InstanceType, - ...Traits.MapImplInstance, + ...TraitTuple.MapImplInstance, ]> >, @@ -28,7 +28,7 @@ export class TraitExpression< Simplify< ExtendPlain<[ StaticMembers, - ...Traits.MapImplStaticMembers, + ...TraitTuple.MapImplStaticMembers, ]> > ) { @@ -49,19 +49,19 @@ export class TraitExpression< This, Simplify< - ExtendPlain> + ExtendPlain> >, Simplify< - ExtendPlain> + ExtendPlain> >, AbstractClass< Simplify< - ExtendPlain> + ExtendPlain> > > & Simplify< - ExtendPlain> + ExtendPlain> > >( this, @@ -97,7 +97,7 @@ export type Implements< > = ( Simplify< ExtendPlain< - Traits.MapAbstract< + TraitTuple.MapAbstract< TraitExpression.Traits > > @@ -109,7 +109,7 @@ export type ImplementsStatic< > = ( Simplify< ExtendPlain< - Traits.MapStaticAbstract< + TraitTuple.MapStaticAbstract< TraitExpression.Traits > >