0.1.16 (#16)
All checks were successful
continuous-integration/drone/push Build is passing

Co-authored-by: Julien Valverdé <julien.valverde@mailo.com>
Reviewed-on: https://git.jvalver.de/Thilawyn/traitify-ts/pulls/16
This commit was merged in pull request #16.
This commit is contained in:
Julien Valverdé
2024-03-23 00:51:27 +01:00
parent 82627c88f6
commit e2fbc1558a
5 changed files with 50 additions and 7 deletions

BIN
bun.lockb

Binary file not shown.

View File

@@ -1,6 +1,6 @@
{
"name": "@thilawyn/traitify-ts",
"version": "0.1.15",
"version": "0.1.16",
"type": "module",
"publishConfig": {
"registry": "https://git.jvalver.de/api/packages/thilawyn/npm/"
@@ -29,18 +29,18 @@
},
"dependencies": {
"lodash-es": "^4.17.21",
"type-fest": "^4.12.0"
"type-fest": "^4.13.1"
},
"devDependencies": {
"@rollup/plugin-node-resolve": "^15.2.3",
"@types/lodash-es": "^4.17.12",
"bun-types": "latest",
"npm-check-updates": "^16.14.15",
"npm-check-updates": "^16.14.17",
"npm-sort": "^0.0.4",
"rollup": "^4.12.1",
"rollup": "^4.13.0",
"rollup-plugin-cleanup": "^3.2.1",
"rollup-plugin-ts": "^3.4.5",
"tsx": "^4.7.1",
"typescript": "^5.4.2"
"typescript": "^5.4.3"
}
}

View File

@@ -1,4 +1,4 @@
import { AbstractClass, Simplify } from "type-fest"
import { AbstractClass, Class, Simplify } from "type-fest"
import { Trait } from "./Trait"
import { TraitExpression } from "./TraitExpression"
import { Extend, StaticMembers } from "./util"
@@ -128,6 +128,40 @@ export type ImplStatic<
>
)
export function implStaticThis<
ImplClass extends AbstractClass<object> & { readonly [implSuperSymbol]: true },
This extends AbstractClass<object>,
>(
_Impl: ImplClass,
thisArg: This,
) {
return thisArg as unknown as (
AbstractClass<
InstanceType<ImplClass> & InstanceType<This>,
ConstructorParameters<This>
> &
ImplStatic<ImplClass> &
StaticMembers<This>
)
}
export function implStaticInstantiableThis<
ImplClass extends AbstractClass<object> & { readonly [implSuperSymbol]: true },
This extends Class<object>,
>(
_Impl: ImplClass,
thisArg: This,
) {
return thisArg as unknown as (
Class<
InstanceType<ImplClass> & InstanceType<This>,
ConstructorParameters<This>
> &
ImplStatic<ImplClass> &
StaticMembers<This>
)
}
export const trait = new TraitBuilder(
new TraitExpression(TraitExpression.NullSuperclass, []),

View File

@@ -1,4 +1,4 @@
export { Trait, TraitClass, TraitConcreteClass, TraitInstance, TraitStaticMembers, TraitTuple } from "./Trait"
export { ImplStatic, TraitBuilder, trait } from "./TraitBuilder"
export { ImplStatic, TraitBuilder, implStaticInstantiableThis, implStaticThis, trait } from "./TraitBuilder"
export { Implements, StaticImplements, TraitExpression, TraitExpressionClass, TraitExpressionConcreteClass, TraitExpressionInstance, TraitExpressionStaticMembers } from "./TraitExpression"
export { TraitExpressionBuilder, expression } from "./TraitExpressionBuilder"

View File

@@ -28,6 +28,15 @@ const Identifiable = <ID>() => trait
})
.build()
const ImplementsIdentifiable = <ID>(defaultID: ID) => expression
.expresses(Identifiable<ID>())
.build()
.subtrait()
.implement(Super => class ImplementsIdentifiable extends Super {
readonly id = defaultID
})
.build()
const StatefulSubscription = trait
.abstract(Super => class extends Super {
declare readonly isStatefulSubscription: true