From 4272b71d4a6a920ab5f6f7f007c86f2b50f35627 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julien=20Valverd=C3=A9?= Date: Sun, 17 Mar 2024 11:14:05 +0100 Subject: [PATCH 1/3] Tests --- src/tests.ts | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/src/tests.ts b/src/tests.ts index af9b93f..7d7278c 100644 --- a/src/tests.ts +++ b/src/tests.ts @@ -28,6 +28,15 @@ const Identifiable = () => trait }) .build() +const ImplementsIdentifiable = (defaultID: ID) => expression + .expresses(Identifiable()) + .build() + .subtrait() + .implement(Super => class ImplementsIdentifiable extends Super { + readonly id = defaultID + }) + .build() + const StatefulSubscription = trait .abstract(Super => class extends Super { declare readonly isStatefulSubscription: true -- 2.49.1 From 049336fb572c01fb68997a211295b81884a3d114 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julien=20Valverd=C3=A9?= Date: Fri, 22 Mar 2024 22:43:47 +0100 Subject: [PATCH 2/3] implStaticThis --- src/TraitBuilder.ts | 36 +++++++++++++++++++++++++++++++++++- src/lib.ts | 2 +- 2 files changed, 36 insertions(+), 2 deletions(-) diff --git a/src/TraitBuilder.ts b/src/TraitBuilder.ts index a01f933..76a7b60 100644 --- a/src/TraitBuilder.ts +++ b/src/TraitBuilder.ts @@ -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 & { readonly [implSuperSymbol]: true }, + This extends AbstractClass, +>( + _Impl: ImplClass, + thisArg: This, +) { + return thisArg as unknown as ( + AbstractClass< + InstanceType & InstanceType, + ConstructorParameters + > & + ImplStatic & + StaticMembers + ) +} + +export function implStaticInstantiableThis< + ImplClass extends AbstractClass & { readonly [implSuperSymbol]: true }, + This extends Class, +>( + _Impl: ImplClass, + thisArg: This, +) { + return thisArg as unknown as ( + Class< + InstanceType & InstanceType, + ConstructorParameters + > & + ImplStatic & + StaticMembers + ) +} + export const trait = new TraitBuilder( new TraitExpression(TraitExpression.NullSuperclass, []), diff --git a/src/lib.ts b/src/lib.ts index 3e9f23b..a96aa6a 100644 --- a/src/lib.ts +++ b/src/lib.ts @@ -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" -- 2.49.1 From 41c3fb649afbafa82070d12346a34b3a7f37668a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julien=20Valverd=C3=A9?= Date: Sat, 23 Mar 2024 00:47:12 +0100 Subject: [PATCH 3/3] Upgraded dependencies --- bun.lockb | Bin 156807 -> 156807 bytes package.json | 10 +++++----- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/bun.lockb b/bun.lockb index f44c7202706d479fd5424ab987a2c25f29a6810d..77b93b10dbc7b9f75b4bd7f3ddfb964222b840cc 100755 GIT binary patch delta 2150 zcmZXV3piAHAIHxbV=frCR?UoJOyf2g%nT9HC~6~&vZaYv?zxm@8o zYuXT2nPjV{-Pjam-F7O|pcJ88aw!vgh<3d1d7kt9&+qsB{=fgv`JeNglhlY$YQ$$4 zQ*txvhY6`BnJ=^rD;Pn_@e=VR*xc<>v$|@JQ7?ZgvC3s78G7w&24#`C5Y65I;*xRI zL`@|PkN~NX*UguZhpCcGl_gsdG$;VD4*=rP004ZQq00PD#_hpeHg{PiT2>KRvQCeG zD}6k4fu*>Z*}{@dC$g93WYF=@UiOk}o;r)o1=Wyy(1$X1;HybyW`P`VErs3Z{p|M< zrN>c*f+8lTb-&TUNKRvQ(@?Nm+=a9Mp+1ba&pR*F9p;xyvrc6*EExWCCjEYNL1*sT z!~O4}w2OQWy;|Hgb`f`bW~8C`lo9?Cp>};Z78S&|h{zqRFQEnaxNX{ ziPdS>PC5&`OzJ*g^DdXr&)OxWNp!JUiV_`siS*-o)hlyVbsQ;)H764ZQ)7}v;|8<*3L6+F64HG<3BXHEg5TYR=mO;qArVrmm+Ju^nH zysGj%4bl90KM8(r(=m7yTGXmz8>p*D#Fl+tm51QW)5Rkr@^XAT(A?s7PUn*@c7D?h z{u(;3C8j6AfM97Y$(yJUap4Oe2vRwRSalVWX=u9ZYhy$4(P^#7`W$RD6mWH>jmZd! zgHF^E<979WHiX-_v1+G6pNTGq2|Ek7&h=D);#}!7Yg2XW7U)n5bl$Rb;~3wlV!Rtmtrv~*O zRPItFIVU)1O^&_sak#Z(Tc|X?MD*SP`GrySaTwh*cye2Yr8E zB(?p|=dLGJe{FwjRP1Za$Yap-GDCM2gyRwM*OqdH?s<#z`E1uKeN`Wy$-f5^9(S)_|cMn74)SEae*hUM9_u5K>B zC`|XIG_%J;G9k@R-TsY%;Gmt;g&eopnweJ8rp-fzEV)XGgY_9deXr)hCVE*>?)G{G z0c7(VF-~6Zxk9ispu|zkQH|bx-EoGeXBnXMed`-F4foTB~Yof zrA3_Rf7)eU-!xqKG@_=>%lgwI-TbFAK$gyGYVzm=Z&T^YJ|_Y3__^=j#lP!tjJ@$^ z)Qi9e{;S(*Euq{>$yh20$3#=~?8526KjM4XSh?2=BNjGRua_-uXw3v6? z(JD4S->@;HI_J*dkR03C6h3~wJxTkIb!nE~J(qEL_+3;l9S)=bORB?Z>1S)>_3^45P{lcNj(s}ZwG?_W$K>0{}V z82~&HWeuVvM`r7bleZJTD)7r%kR;5h0ezUD1w8i_OoUh1qo{C6Kj;s#g-Qb;Mhn*Q zKsubypbDIeMJd3}SQKS>&p@UmOo4_VQ>Jn6BZ!3$O@ZWPT_gzu-}_%LX&PMj|F&b( zAVa20hF?#ERGG#C7Y1f1pkzT7R!CJq>B+E6egsuvc^pa=mVN{k&kem82Mty}%hIKU|Cq--t zd80H5l!p8?wU#90p(ib-QpFX4qzV9D0Ki290Pt^xEJHyo?ZNn}_AAx%l_E36lOF#m zIu1%>O0D$lWQunu>#x@Ew&Ea9{ngYGb*jD-CRQWRk^pH+G>7{4M9k z4@N0a%8#e4=EDX%-PyldAGge9pRkrCM7=r-NzYXmobdCc?aCRlmsjTu5pD5hwWYW> zKEvp?!1(a)duQM3GlZcx=Yn$EO3c$mO0nPKd0Q7^EgB+7d2oDE_q9zq;}1Hpr9ko1 zM`y+wdOFq#!k%p0GuJNS1Jq|NJm+%yqXSA+Q0wT<*mpLkKnrBMK>)zYBBLjAuU_bh z>F$8LV3y=+SB@am8hp|qS^3MevTBM%QH?TjHYA{`bTTF} z+IWh&`S4xe z(X#gV`|>G$(4o4V1*(@`f=?lERx9c~dOLp6EOp9$G5S27mEe9UMA`8nW$fM=!YKbhah$TN+{nRKi93okW!Xv( z(_cZHDspUY>I?cMs$c_m(&Kn0dcB$a1J?k8ndjE`i&gi6Bt^F$b_tYjCQJRQ<|F!8 zY*Uy_I%vFzImef(s;IeTSuAitcn~^ZY43d2*Z=@s9F^Typ7;ZFglG};>CNNp5c7|6 z*vV*?dQK>C)iRF@nm#SfsB@yUnd68FOyceg= z{r!ufN}cyMzuILw)H2;+ak@&1UeMKSiG8*)uT|KudPd~KeMddn2K?R&e|fb!GYvQA z(Ut#j;!%$LWaQpyWginZym!V}vD#MC+Vbhe#pg#kP(MQV9qW3_12rR#U1BpccK5|? zaaq$Ci|IiZ+I4o&>l^uhejMT?PxrZ0G;NDdJC`#uzTfEW{zJPiiW(L!cMK3+Qu}qnaGvCw%GhYKGeO8I0IT!^V(@58xAN1NyiQs46r-h@9 z1BOcF>a!)WM@qW|5;aH16QGnDa;)%ST~O#Tb%IY4L{U_0VSMx2=*6&kNSW#z%qqxZ~V zzcjQTPSVzP1HUiIF~4${b;mk+P-}Lut7MG9m*~IQ)Mda)gg{iZu5Ml&AXkO zu+zJ(AFqZ1;19%6McQnq|7^^h@3dKUU~2ga&E$VHRzv_$Lc%gbLWcH2>%wXn0K5@L z8F8+Jr_=kd>?5o?@L(0Vp(3Lk^kaaA@ZTd~BK*k+r4Hwhg2zB+h4dIGNrg{aqBLM0 z21SNh7?kRoG+LVxVZto91!RaV2&O;`d~z046kAn*1^)faI(U@k+S3%^WISr~nk2$AQ=lv?fknx}3sWE-t%ID2n2U6zi!~#{2&*)l hFNIRXB8Q{ky!Q)b>^PpixpfpO=;~z6YAy@za diff --git a/package.json b/package.json index ce1af94..6cd1b12 100644 --- a/package.json +++ b/package.json @@ -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" } } -- 2.49.1