diff --git a/package.json b/package.json index ae34fb9..ff0b823 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@thilawyn/traitify-ts", - "version": "0.1.21", + "version": "0.1.22", "type": "module", "publishConfig": { "registry": "https://git.jvalver.de/api/packages/thilawyn/npm/" @@ -30,12 +30,12 @@ "default": "./dist/effect/lib.cjs" } }, - "./traitsUnique-CJ9oW-Fc": { + "./traitsUnique-h-N6REho": { "import": { - "types": "./dist/traitsUnique-CJ9oW-Fc.d.ts" + "types": "./dist/traitsUnique-h-N6REho.d.ts" }, "require": { - "types": "./dist/traitsUnique-CJ9oW-Fc.d.ts" + "types": "./dist/traitsUnique-h-N6REho.d.ts" } } }, diff --git a/src/Trait.ts b/src/Trait.ts index d2f1f2e..54d2992 100644 --- a/src/Trait.ts +++ b/src/Trait.ts @@ -1,4 +1,4 @@ -import { AbstractClass, Class, Simplify } from "type-fest" +import { AbstractConstructor, Constructor, Simplify } from "type-fest" import { TraitExpression } from "./TraitExpression" import { Extend, StaticMembers } from "./util" @@ -10,13 +10,13 @@ export class Trait< >, Abstract extends object, StaticAbstract extends object, - ImplClass extends AbstractClass, + ImplClass extends AbstractConstructor, > { constructor( readonly superExpression: SuperExpression, readonly abstract: Abstract, readonly staticAbstract: StaticAbstract, - readonly apply: (Super: AbstractClass) => ImplClass, + readonly apply: (Super: AbstractConstructor) => ImplClass, ) {} } @@ -118,12 +118,12 @@ export namespace TraitTuple { export type TraitClass> = ( - AbstractClass, any[]> & + AbstractConstructor, any[]> & TraitStaticMembers ) export type TraitConcreteClass> = ( - Class, any[]> & + Constructor, any[]> & TraitStaticMembers ) diff --git a/src/TraitBuilder.ts b/src/TraitBuilder.ts index 76a7b60..6be7003 100644 --- a/src/TraitBuilder.ts +++ b/src/TraitBuilder.ts @@ -1,4 +1,4 @@ -import { AbstractClass, Class, Simplify } from "type-fest" +import { AbstractConstructor, Constructor, Simplify } from "type-fest" import { Trait } from "./Trait" import { TraitExpression } from "./TraitExpression" import { Extend, StaticMembers } from "./util" @@ -14,22 +14,20 @@ export class TraitBuilder< >, Abstract extends object, StaticAbstract extends object, - ImplClass extends AbstractClass, + ImplClass extends AbstractConstructor, > { - declare ["constructor"]: typeof TraitBuilder - constructor( readonly traitSuperExpression: SuperExpression, readonly traitAbstract: Abstract, readonly traitStaticAbstract: StaticAbstract, - readonly traitApply: (Super: AbstractClass) => ImplClass, + readonly traitApply: (Super: AbstractConstructor) => ImplClass, ) {} abstract( - _: (Super: AbstractClass) => AbstractClass + _: (Super: AbstractConstructor) => AbstractConstructor ) { - return new this.constructor( + return new TraitBuilder( this.traitSuperExpression, {} as Simplify, this.traitStaticAbstract, @@ -38,9 +36,9 @@ export class TraitBuilder< } staticAbstract( - _: (Super: AbstractClass) => AbstractClass + _: (Super: AbstractConstructor) => AbstractConstructor ) { - return new this.constructor( + return new TraitBuilder( this.traitSuperExpression, this.traitAbstract, {} as Simplify, @@ -53,13 +51,13 @@ export class TraitBuilder< >( apply: (Super: TraitBuilder.ImplSuper) => ImplClassWithAbstract ) { - return new this.constructor( + return new TraitBuilder( this.traitSuperExpression, this.traitAbstract, this.traitStaticAbstract, - apply as unknown as (Super: AbstractClass) => ( - AbstractClass< + apply as unknown as (Super: AbstractConstructor) => ( + AbstractConstructor< Simplify< Omit< InstanceType, @@ -98,7 +96,7 @@ export namespace TraitBuilder { infer ImplClass > ? ( - AbstractClass< + AbstractConstructor< Simplify< Extend<[ Abstract, @@ -121,7 +119,7 @@ export namespace TraitBuilder { export type ImplStatic< - ImplClass extends AbstractClass & { readonly [implSuperSymbol]: true } + ImplClass extends AbstractConstructor & { readonly [implSuperSymbol]: true } > = ( Simplify< Omit, typeof implSuperSymbol> @@ -129,14 +127,14 @@ export type ImplStatic< ) export function implStaticThis< - ImplClass extends AbstractClass & { readonly [implSuperSymbol]: true }, - This extends AbstractClass, + ImplClass extends AbstractConstructor & { readonly [implSuperSymbol]: true }, + This extends AbstractConstructor, >( _Impl: ImplClass, thisArg: This, ) { return thisArg as unknown as ( - AbstractClass< + AbstractConstructor< InstanceType & InstanceType, ConstructorParameters > & @@ -146,14 +144,14 @@ export function implStaticThis< } export function implStaticInstantiableThis< - ImplClass extends AbstractClass & { readonly [implSuperSymbol]: true }, - This extends Class, + ImplClass extends AbstractConstructor & { readonly [implSuperSymbol]: true }, + This extends Constructor, >( _Impl: ImplClass, thisArg: This, ) { return thisArg as unknown as ( - Class< + Constructor< InstanceType & InstanceType, ConstructorParameters > & @@ -167,5 +165,5 @@ export const trait = new TraitBuilder( new TraitExpression(TraitExpression.NullSuperclass, []), {} as object, {} as object, - Super => class extends Super {} as AbstractClass, + Super => class extends Super {} as AbstractConstructor, ) diff --git a/src/TraitExpression.ts b/src/TraitExpression.ts index 1198170..0021168 100644 --- a/src/TraitExpression.ts +++ b/src/TraitExpression.ts @@ -1,11 +1,11 @@ -import { AbstractClass, Class, Simplify } from "type-fest" +import { AbstractConstructor, Constructor, Simplify } from "type-fest" import { Trait, TraitTuple } from "./Trait" import { TraitBuilder } from "./TraitBuilder" import { Extend, StaticMembers } from "./util" export type TraitExpressionLike< - Superclass extends AbstractClass, + Superclass extends AbstractConstructor, Traits extends readonly Trait[], > = { readonly superclass: Superclass, @@ -14,7 +14,7 @@ export type TraitExpressionLike< export class TraitExpression< - Superclass extends AbstractClass, + Superclass extends AbstractConstructor, const Traits extends readonly Trait[], > implements TraitExpressionLike { @@ -25,7 +25,7 @@ implements TraitExpressionLike { get extends(): ( - AbstractClass< + AbstractConstructor< InstanceType & // Keep the instance of the superclass outside of any kind of type manipulation // as it can accidentely remove abstract properties Simplify< @@ -69,7 +69,7 @@ implements TraitExpressionLike { Extend> >, - AbstractClass< + AbstractConstructor< Simplify< Extend> > @@ -135,7 +135,7 @@ export type StaticImplements< export type TraitExpressionClass< Exp extends TraitExpressionLike[]> > = ( - AbstractClass< + AbstractConstructor< TraitExpressionInstance, ConstructorParameters> > & @@ -145,7 +145,7 @@ export type TraitExpressionClass< export type TraitExpressionConcreteClass< Exp extends TraitExpressionLike[]> > = ( - Class< + Constructor< TraitExpressionInstance, ConstructorParameters> > & diff --git a/src/TraitExpressionBuilder.ts b/src/TraitExpressionBuilder.ts index 464740d..6b1e47b 100644 --- a/src/TraitExpressionBuilder.ts +++ b/src/TraitExpressionBuilder.ts @@ -1,4 +1,4 @@ -import { AbstractClass } from "type-fest" +import { AbstractConstructor } from "type-fest" import { Trait, TraitTuple } from "./Trait" import { TraitExpression } from "./TraitExpression" import { SpreadSupertraits, spreadSupertraits } from "./spreadSupertraits" @@ -7,7 +7,7 @@ import { Extendable, StaticMembers } from "./util" export class TraitExpressionBuilder< - Superclass extends AbstractClass, + Superclass extends AbstractConstructor, const Traits extends readonly Trait[], > { constructor( @@ -17,7 +17,7 @@ export class TraitExpressionBuilder< extends< - Super extends AbstractClass + Super extends AbstractConstructor >( superclass: Super ) { @@ -125,7 +125,7 @@ export namespace TraitExpressionBuilder { ) export type BuildTraitExpression< - Superclass extends AbstractClass, + Superclass extends AbstractConstructor, Traits extends readonly Trait[], > = ( Extendable> extends false diff --git a/src/effect/tests.ts b/src/effect/tests.ts index 5052c90..999243f 100644 --- a/src/effect/tests.ts +++ b/src/effect/tests.ts @@ -1,6 +1,5 @@ import { Schema as S } from "@effect/schema" import { Implements } from "../TraitExpression" -import { EffectSchemaTraitExpression } from "./EffectSchemaTraitExpression" import { effectSchemaExpression } from "./EffectSchemaTraitExpressionBuilder" diff --git a/src/util/misc.ts b/src/util/misc.ts index 175ddfd..c2a1306 100644 --- a/src/util/misc.ts +++ b/src/util/misc.ts @@ -1,4 +1,4 @@ -import { AbstractClass } from "type-fest" +import { AbstractConstructor } from "type-fest" /** @@ -10,8 +10,8 @@ export type CommonKeys = Extract /** * Represents the static members of a class. - * @template Class - A class extending AbstractClass. + * @template Class - A class. */ -export type StaticMembers> = ( +export type StaticMembers> = ( Omit )