From e928a11ee489139319037ddfc7c247916c8bca91 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julien=20Valverd=C3=A9?= Date: Thu, 15 Feb 2024 19:49:11 +0100 Subject: [PATCH] TraitBuilder work --- src/Trait.ts | 2 +- src/TraitBuilder.ts | 51 ++++++++++++++++++++++++++------------------- 2 files changed, 31 insertions(+), 22 deletions(-) diff --git a/src/Trait.ts b/src/Trait.ts index fbc5f90..91df43a 100644 --- a/src/Trait.ts +++ b/src/Trait.ts @@ -4,7 +4,7 @@ import { TraitExpression } from "./TraitExpression" import { ExtendFn, SimplifyFn, StaticMembers, StaticMembersFn } from "./util" -export type AddAbstractToImplClass< +type AddAbstractToImplClass< ImplClass extends Class, Abstract extends object, StaticAbstract extends object, diff --git a/src/TraitBuilder.ts b/src/TraitBuilder.ts index 94f7a53..a825162 100644 --- a/src/TraitBuilder.ts +++ b/src/TraitBuilder.ts @@ -5,9 +5,30 @@ import { TraitExpression } from "./TraitExpression" import { ExtendFn, SimplifyFn, StaticMembers } from "./util" -export type TraitApplierSuperTag = "@thilawyn/traitify-ts/Super" +type SuperAbstract = ( + Pipe, + Tuples.Append, + ExtendFn, + SimplifyFn, + ]> +) -export type RemoveAbstractFromImplClass< +type SuperStaticAbstract = ( + Pipe, + Tuples.Append, + ExtendFn, + SimplifyFn, + ]> +) + + +type TraitApplierSuperTag = "@thilawyn/traitify-ts/Super" + +type RemoveAbstractFromImplClass< ImplClassWithAbstract extends ( Class & StaticAbstract & @@ -40,7 +61,7 @@ export class TraitBuilder< private readonly traitApply: (Super: AbstractClass) => ImplClass, ) {} - abstract() { + abstract>() { return new TraitBuilder( this.traitSuperExpression, {} as A, @@ -49,16 +70,10 @@ export class TraitBuilder< ) } - extendAbstract( + extendAbstract>( _: ( Super: AbstractClass< - Pipe, - Tuples.Append, - ExtendFn, - SimplifyFn, - ]> + SuperAbstract > ) => AbstractClass ) { @@ -70,7 +85,7 @@ export class TraitBuilder< ) } - staticAbstract() { + staticAbstract>() { return new TraitBuilder( this.traitSuperExpression, this.traitAbstract, @@ -79,15 +94,9 @@ export class TraitBuilder< ) } - extendStaticAbstract( + extendStaticAbstract>( _: (Super: AbstractClass< - Pipe, - Tuples.Append, - ExtendFn, - SimplifyFn, - ]> + SuperStaticAbstract >) => AbstractClass ) { return new TraitBuilder( @@ -101,7 +110,7 @@ export class TraitBuilder< implement< ImplClassWithAbstract extends ( Class & - StaticAbstract & + SuperStaticAbstract & { _tag: TraitApplierSuperTag } ) >(