From acc26c7e0cb8f2007a3356851cfc3383d492ce31 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julien=20Valverd=C3=A9?= Date: Fri, 2 Feb 2024 22:42:45 +0100 Subject: [PATCH] Subtrait work --- src/abstract.ts | 8 ++++++++ src/expresses.ts | 30 ++++++++++++++++++++++++++++-- src/index.ts | 1 + 3 files changed, 37 insertions(+), 2 deletions(-) create mode 100644 src/abstract.ts diff --git a/src/abstract.ts b/src/abstract.ts new file mode 100644 index 0000000..ee9dc5e --- /dev/null +++ b/src/abstract.ts @@ -0,0 +1,8 @@ +import { Opaque } from "type-fest" + + +export type AbstractTag = "@thilawyn/traitify-ts/Abstract" + +export function abstract() { + return {} as Opaque +} diff --git a/src/expresses.ts b/src/expresses.ts index ecdcf4e..5b67030 100644 --- a/src/expresses.ts +++ b/src/expresses.ts @@ -1,9 +1,19 @@ import { Call, Pipe, Tuples } from "hotscript" -import { AbstractClass, Opaque } from "type-fest" -import { Trait, TraitAbstractMembersFn, TraitApplierSuperTag, TraitImplClassFn, TraitImplInstanceFn } from "." +import { AbstractClass, Class, Opaque } from "type-fest" +import { AbstractTag, Trait, TraitAbstractMembersFn, TraitApplierSuperTag, TraitImplClassFn, TraitImplInstanceFn } from "." import { ExtendFn, ExtendableFn, SimplifyFn, StaticMembersFn } from "./util" +type SubtraitApplier< + Traits extends Trait[], + Abstract extends object, + ImplWithAbstract extends Class, +> = ( + (Super: Opaque, TraitApplierSuperTag>) => ( + Opaque + ) +) + class TraitExpression< Super extends AbstractClass, Traits extends Trait[], @@ -40,6 +50,22 @@ class TraitExpression< this.superclass as Opaque, ) as any } + + subtrait< + SubtraitAbstract extends object, + SubtraitImpl extends Class, + >( + abstract: ( + abstract: Pipe, + SimplifyFn, + ]> + ) => Opaque, + + // impl: () + ) { + + } } export type Implements> = ( diff --git a/src/index.ts b/src/index.ts index ae86066..b839462 100644 --- a/src/index.ts +++ b/src/index.ts @@ -1,2 +1,3 @@ +export * from "./abstract" export * from "./expresses" export * from "./trait"