Fixed error detection
Some checks failed
continuous-integration/drone/push Build is failing

This commit is contained in:
Julien Valverdé
2024-02-02 05:44:09 +01:00
parent 29148cd42b
commit 7a449c73cc
3 changed files with 23 additions and 19 deletions

View File

@@ -6,18 +6,24 @@ import { ExtendFn, ExtendableFn, SimplifyFn, StaticMembersFn } from "./util"
class TraitExpression<
Super extends AbstractClass<any>,
Traits extends readonly Trait<any, any>[],
Traits extends Trait<any, any>[],
> {
constructor(
readonly superclass: Super,
readonly traits: Traits,
) {}
get implements() {
return {}
get implements(): (
Pipe<Traits, [
Tuples.Map<TraitAbstractMembersFn>,
ExtendFn,
SimplifyFn,
]>
) {
throw new Error("Not meant to be called")
}
extends(): (
get extends(): (
AbstractClass<
Pipe<[
InstanceType<Super>,
@@ -59,7 +65,7 @@ export type Implements<Exp extends TraitExpression<any, any>> = (
class TraitExpressionBuilder<
Super extends AbstractClass<any>,
Traits extends readonly Trait<any, any>[],
Traits extends Trait<any, any>[],
> {
constructor(public expression: TraitExpression<Super, Traits>) {}
@@ -75,7 +81,7 @@ class TraitExpressionBuilder<
}
expresses<
AppendTraits extends readonly Trait<any, any>[]
AppendTraits extends Trait<any, any>[]
>(...traits: AppendTraits) {
return new TraitExpressionBuilder(
new TraitExpression(
@@ -89,15 +95,15 @@ class TraitExpressionBuilder<
return this.expression as GetTraitExpression<Super, Traits>
}
then<V>(fn: (expression: typeof this.expression) => V): V {
return fn(this.expression)
then<V>(fn: (expression: ReturnType<typeof this.get>) => V): V {
return fn(this.get())
}
}
type AbstractMembersExtendable<
Super extends AbstractClass<any>,
Traits extends readonly Trait<any, any>[],
Traits extends Trait<any, any>[],
> = (
Call<ExtendableFn, [
InstanceType<Super>,
@@ -107,7 +113,7 @@ type AbstractMembersExtendable<
type ImplInstanceExtendable<
Super extends AbstractClass<any>,
Traits extends readonly Trait<any, any>[],
Traits extends Trait<any, any>[],
> = (
Call<ExtendableFn, [
InstanceType<Super>,
@@ -117,7 +123,7 @@ type ImplInstanceExtendable<
type ImplStaticMembersExtendable<
Super extends AbstractClass<any>,
Traits extends readonly Trait<any, any>[],
Traits extends Trait<any, any>[],
> = (
Pipe<[
Super,
@@ -130,7 +136,7 @@ type ImplStaticMembersExtendable<
type GetTraitExpression<
Super extends AbstractClass<any>,
Traits extends readonly Trait<any, any>[],
Traits extends Trait<any, any>[],
> = (
Call<Tuples.IsEmpty, Traits> extends true
? "Cannot express an empty list of traits."

View File

@@ -1,3 +1,4 @@
import { Identity, Pipe, Tuples } from "hotscript"
import { Implements, TraitAbstractMembers, expression, trait } from "."
@@ -51,17 +52,14 @@ class TestSuperclass {
const builder = expression
.extends(TestSuperclass)
.expresses(
// PrintsHelloOnNew,
PrintsHelloOnNew,
Identifiable<bigint>(),
// Identifiable<number>(),
)
type Impl = Implements<typeof builder.expression>
const exp = builder.get()
class User extends exp.extends() implements (typeof exp.implements) {
class User extends exp.extends implements (typeof exp.implements) {
// id: bigint = -1n
}

View File

@@ -13,7 +13,7 @@ interface ExtendReducerFn extends Fn {
}
export type ExtendFn = Tuples.Reduce<ExtendReducerFn, {}>
export type Extend<T extends readonly object[]> = Call<ExtendFn, T>
export type Extend<T extends object[]> = Call<ExtendFn, T>
export type ExtendableFn = ComposeLeft<[
@@ -23,4 +23,4 @@ export type ExtendableFn = ComposeLeft<[
Match.With<any, true>,
]>
]>
export type Extendable<T extends readonly object[]> = Call<ExtendableFn, T>
export type Extendable<T extends object[]> = Call<ExtendableFn, T>