Compare commits

...

2 Commits

Author SHA1 Message Date
Julien Valverdé
8d2cb90f52 Moved Trait helper types to a namespace
All checks were successful
continuous-integration/drone/push Build is passing
2024-02-04 22:20:50 +01:00
Julien Valverdé
891db74032 Moved Trait helper types to a namespace 2024-02-04 22:20:19 +01:00
4 changed files with 60 additions and 59 deletions

View File

@@ -39,61 +39,62 @@ export class Trait<
) {} ) {}
} }
export type TraitOwnAbstract<T> = ( export namespace Trait {
export type OwnAbstract<T> = (
T extends Trait<any, infer Abstract, any> T extends Trait<any, infer Abstract, any>
? Abstract ? Abstract
: never : never
) )
export interface TraitOwnAbstractFn extends Fn { export interface OwnAbstractFn extends Fn {
return: TraitOwnAbstract<this["arg0"]> return: Trait.OwnAbstract<this["arg0"]>
} }
export type TraitOwnImplClass<T> = ( export type OwnImplClass<T> = (
T extends Trait<any, any, infer ImplClass> T extends Trait<any, any, infer ImplClass>
? ImplClass ? ImplClass
: never : never
) )
export interface TraitOwnImplClassFn extends Fn { export interface OwnImplClassFn extends Fn {
return: TraitOwnImplClass<this["arg0"]> return: Trait.OwnImplClass<this["arg0"]>
} }
export type TraitOwnImplInstance<T> = ( export type OwnImplInstance<T> = (
T extends Trait<any, any, infer ImplClass> T extends Trait<any, any, infer ImplClass>
? InstanceType<ImplClass> ? InstanceType<ImplClass>
: never : never
) )
export interface TraitOwnImplInstanceFn extends Fn { export interface OwnImplInstanceFn extends Fn {
return: TraitOwnImplInstance<this["arg0"]> return: Trait.OwnImplInstance<this["arg0"]>
} }
export type TraitOwnClass<T> = ( export type OwnClass<T> = (
T extends Trait<any, infer Abstract, infer ImplClass> T extends Trait<any, infer Abstract, infer ImplClass>
? AddAbstractToImplClass<ImplClass, Abstract> ? AddAbstractToImplClass<ImplClass, Abstract>
: never : never
) )
export interface TraitOwnClassFn extends Fn { export interface OwnClassFn extends Fn {
return: TraitOwnClass<this["arg0"]> return: Trait.OwnClass<this["arg0"]>
} }
export type TraitOwnInstance<T> = ( export type OwnInstance<T> = (
T extends Trait<any, infer Abstract, infer ImplClass> T extends Trait<any, infer Abstract, infer ImplClass>
? InstanceType< ? InstanceType<
AddAbstractToImplClass<ImplClass, Abstract> AddAbstractToImplClass<ImplClass, Abstract>
> >
: never : never
) )
export interface TraitOwnInstanceFn extends Fn { export interface OwnInstanceFn extends Fn {
return: TraitOwnInstance<this["arg0"]> return: Trait.OwnInstance<this["arg0"]>
} }
export type Supertraits<T> = (
export type TraitSupertraits<T> = (
T extends Trait<infer Super, any, any> T extends Trait<infer Super, any, any>
? TraitExpressionAllTraits<Super> ? TraitExpressionAllTraits<Super>
: never : never
) )
export interface TraitSupertraitsFn extends Fn { export interface SupertraitsFn extends Fn {
return: TraitSupertraits<this["arg0"]> return: Trait.Supertraits<this["arg0"]>
}
} }

View File

@@ -1,6 +1,6 @@
import { Call, Fn, Pipe, Tuples } from "hotscript" import { Call, Fn, Pipe, Tuples } from "hotscript"
import { AbstractClass, Class, Opaque } from "type-fest" import { AbstractClass, Class, Opaque } from "type-fest"
import { AbstractTag, Trait, TraitApplierSuperTag, TraitOwnAbstractFn, TraitOwnImplClassFn, TraitOwnImplInstanceFn } from "." import { AbstractTag, Trait, TraitApplierSuperTag } from "."
import { ExtendFn, SimplifyFn, StaticMembersFn } from "./util" import { ExtendFn, SimplifyFn, StaticMembersFn } from "./util"
@@ -21,7 +21,7 @@ export class TraitExpression<
AbstractClass< AbstractClass<
Pipe<[ Pipe<[
InstanceType<Super>, InstanceType<Super>,
...Call<Tuples.Map<TraitOwnImplInstanceFn>, OwnTraits>, ...Call<Tuples.Map<Trait.OwnImplInstanceFn>, OwnTraits>,
], [ ], [
ExtendFn, ExtendFn,
SimplifyFn, SimplifyFn,
@@ -32,7 +32,7 @@ export class TraitExpression<
Pipe<[ Pipe<[
Super, Super,
...Call<Tuples.Map<TraitOwnImplClassFn>, OwnTraits>, ...Call<Tuples.Map<Trait.OwnImplClassFn>, OwnTraits>,
], [ ], [
Tuples.Map<StaticMembersFn>, Tuples.Map<StaticMembersFn>,
ExtendFn, ExtendFn,
@@ -92,7 +92,7 @@ export interface TraitExpressionAllTraitsFn extends Fn {
export type Implements<Exp extends TraitExpression<any, any, any>> = ( export type Implements<Exp extends TraitExpression<any, any, any>> = (
Exp extends TraitExpression<any, infer AllTraits, any> Exp extends TraitExpression<any, infer AllTraits, any>
? Pipe<AllTraits, [ ? Pipe<AllTraits, [
Tuples.Map<TraitOwnAbstractFn>, Tuples.Map<Trait.OwnAbstractFn>,
ExtendFn, ExtendFn,
SimplifyFn, SimplifyFn,
]> ]>

View File

@@ -1,6 +1,6 @@
import { Call, Fn, Pipe, Tuples } from "hotscript" import { Call, Fn, Pipe, Tuples } from "hotscript"
import { AbstractClass } from "type-fest" import { AbstractClass } from "type-fest"
import { Trait, TraitExpression, TraitOwnAbstractFn, TraitOwnImplClassFn, TraitOwnImplInstanceFn, emptyTraitExpression } from "." import { Trait, TraitExpression, emptyTraitExpression } from "."
import { ExtendableFn, StaticMembersFn } from "./util" import { ExtendableFn, StaticMembersFn } from "./util"
@@ -87,7 +87,7 @@ type AbstractMembersExtendable<
> = ( > = (
Call<ExtendableFn, [ Call<ExtendableFn, [
InstanceType<Super>, InstanceType<Super>,
...Call<Tuples.Map<TraitOwnAbstractFn>, Traits>, ...Call<Tuples.Map<Trait.OwnAbstractFn>, Traits>,
]> ]>
) )
@@ -97,7 +97,7 @@ type ImplInstanceExtendable<
> = ( > = (
Call<ExtendableFn, [ Call<ExtendableFn, [
InstanceType<Super>, InstanceType<Super>,
...Call<Tuples.Map<TraitOwnImplInstanceFn>, Traits>, ...Call<Tuples.Map<Trait.OwnImplInstanceFn>, Traits>,
]> ]>
) )
@@ -107,7 +107,7 @@ type ImplStaticMembersExtendable<
> = ( > = (
Pipe<[ Pipe<[
Super, Super,
...Call<Tuples.Map<TraitOwnImplClassFn>, Traits>, ...Call<Tuples.Map<Trait.OwnImplClassFn>, Traits>,
], [ ], [
Tuples.Map<StaticMembersFn>, Tuples.Map<StaticMembersFn>,
ExtendableFn, ExtendableFn,

View File

@@ -1,4 +1,4 @@
import { Implements, abstract, expression, trait } from "." import { Implements, Trait, abstract, expression, trait } from "."
const PrintsHelloOnNew = trait( const PrintsHelloOnNew = trait(