0.1.0 #1

Merged
Thilawyn merged 65 commits from next into master 2024-02-06 03:15:40 +01:00
3 changed files with 37 additions and 2 deletions
Showing only changes of commit acc26c7e0c - Show all commits

8
src/abstract.ts Normal file
View File

@@ -0,0 +1,8 @@
import { Opaque } from "type-fest"
export type AbstractTag = "@thilawyn/traitify-ts/Abstract"
export function abstract<Abstract extends object = {}>() {
return {} as Opaque<Abstract, AbstractTag>
}

View File

@@ -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<any, any>[],
Abstract extends object,
ImplWithAbstract extends Class<Abstract, []>,
> = (
(Super: Opaque<AbstractClass<Abstract>, TraitApplierSuperTag>) => (
Opaque<ImplWithAbstract, TraitApplierSuperTag>
)
)
class TraitExpression<
Super extends AbstractClass<any>,
Traits extends Trait<any, any>[],
@@ -40,6 +50,22 @@ class TraitExpression<
this.superclass as Opaque<Super, TraitApplierSuperTag>,
) as any
}
subtrait<
SubtraitAbstract extends object,
SubtraitImpl extends Class<any>,
>(
abstract: (
abstract: Pipe<Traits, [
Tuples.Map<TraitAbstractMembersFn>,
SimplifyFn,
]>
) => Opaque<SubtraitAbstract, AbstractTag>,
// impl: ()
) {
}
}
export type Implements<Exp extends TraitExpression<any, any>> = (

View File

@@ -1,2 +1,3 @@
export * from "./abstract"
export * from "./expresses"
export * from "./trait"