diff --git a/rollup.config.ts b/rollup.config.ts index 67c2c78..f395890 100644 --- a/rollup.config.ts +++ b/rollup.config.ts @@ -39,6 +39,6 @@ export const createBundleConfig = ( export default [ - createBundleConfig("src/lib.ts", "."), + createBundleConfig("src/index.ts", "."), createBundleConfig("src/util/lib.ts", "./util"), ] diff --git a/src/Trait.ts b/src/Trait.ts index 0d836f9..4de0dc0 100644 --- a/src/Trait.ts +++ b/src/Trait.ts @@ -1,10 +1,12 @@ import { Fn, Pipe, Tuples } from "hotscript" import { AbstractClass, Class, Opaque } from "type-fest" -import { tag } from "type-fest/source/opaque" import { AbstractTag, TraitExpression, emptyTraitExpression } from "." import { ExtendFn, SimplifyFn, StaticMembers, StaticMembersFn } from "./util" +export const isTraitApplierSuper = Symbol("isTraitApplierSuper") + + export type AddAbstractToImplClass< ImplClass extends Class<{}, []>, Abstract extends {}, @@ -17,14 +19,14 @@ export type AddAbstractToImplClass< ) export type RemoveAbstractFromImplClass< - ImplClassWithAbstract extends Opaque, TraitApplierSuperTag>, + ImplClassWithAbstract extends Class & { [isTraitApplierSuper]: true }, Abstract extends {}, > = ( Class< Omit, keyof Abstract>, ConstructorParameters > & - Omit, typeof tag> + Omit, typeof isTraitApplierSuper> ) @@ -139,10 +141,10 @@ export type TraitApplierSuperTag = "@thilawyn/traitify-ts/TraitApplierSuper" export function trait< Abstract extends {}, - ImplClassWithAbstract extends Opaque, TraitApplierSuperTag>, + ImplClassWithAbstract extends Class & { [isTraitApplierSuper]: true }, >( abstract: Opaque, - apply: (Super: Opaque, TraitApplierSuperTag>) => ImplClassWithAbstract, + apply: (Super: AbstractClass & { [isTraitApplierSuper]: true }) => ImplClassWithAbstract, ) { return new Trait( emptyTraitExpression, diff --git a/src/TraitExpression.ts b/src/TraitExpression.ts index cd58e47..8651ca8 100644 --- a/src/TraitExpression.ts +++ b/src/TraitExpression.ts @@ -1,6 +1,6 @@ import { Call, Fn, Pipe, Tuples } from "hotscript" import { AbstractClass, Class, Opaque } from "type-fest" -import { AbstractTag, RemoveAbstractFromImplClass, Trait, TraitApplierSuperTag } from "." +import { AbstractTag, RemoveAbstractFromImplClass, Trait, TraitApplierSuperTag, isTraitApplierSuper } from "." import { ExtendFn, SimplifyFn, StaticMembersFn } from "./util" @@ -53,11 +53,11 @@ export class TraitExpression< subtrait< This extends TraitExpression, SubtraitAbstract extends Implements, - SubtraitImplClassWithAbstract extends Opaque, TraitApplierSuperTag>, + SubtraitImplClassWithAbstract extends Class & { [isTraitApplierSuper]: true }, >( this: This, abstract: (expression: This) => Opaque, - apply: (Super: Opaque, TraitApplierSuperTag>) => SubtraitImplClassWithAbstract, + apply: (Super: AbstractClass & { [isTraitApplierSuper]: true }) => SubtraitImplClassWithAbstract, ) { return new Trait( this, diff --git a/src/lib.ts b/src/lib.ts index 9fc1b8f..8b575d1 100644 --- a/src/lib.ts +++ b/src/lib.ts @@ -5,4 +5,5 @@ export { trait, type Trait, type TraitExpression, + isTraitApplierSuper, } from "."