Refactoring
All checks were successful
continuous-integration/drone/push Build is passing

This commit is contained in:
Julien Valverdé
2023-12-13 19:55:14 +01:00
parent 5b5114e5f5
commit d8e509f540
3 changed files with 110 additions and 60 deletions

View File

@@ -1,5 +1,5 @@
import { AbstractClass, Class, UnionToIntersection } from "type-fest"
import { StaticMembers, copyClassProperties, flattenClass } from "./util/class"
import { StaticMembers, copyProperties, flattenClass, getInheritanceHierarchy } from "./util/class"
export type Trait<T> =
@@ -40,7 +40,7 @@ export const extendAndApplyTraits = <
traits: Traits,
) =>
traits.reduce((class_, trait) => {
copyClassProperties(flattenClass(trait), class_)
copyProperties(flattenClass(trait), class_)
return class_
}, class extends classToExtend {}) as (
AbstractClass<
@@ -61,15 +61,25 @@ export const extendAndApplyTraits = <
)
export const mixTraits = <
export function expresses<
Traits extends readonly Trait<any>[]
>(
...traits: Traits
) =>
traits.reduce((class_, trait) => {
copyClassProperties(flattenClass(trait), class_)
return class_
}, class {}) as (
) {
const class_ = class {}
traits.forEach(trait => {
getInheritanceHierarchy(trait).forEach(current => {
copyProperties(
current,
class_,
["name", "length"],
["constructor"],
)
})
})
return class_ as unknown as (
Trait<
UnionToIntersection<
InstanceType<
@@ -84,3 +94,4 @@ export const mixTraits = <
>
>
)
}