From 4ff193ea96fe24dc44b690248f3f5c82231ba2dd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julien=20Valverd=C3=A9?= Date: Wed, 1 May 2024 02:51:12 +0200 Subject: [PATCH] 0.1.20 (#20) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Julien Valverdé Reviewed-on: https://git.jvalver.de/Thilawyn/traitify-ts/pulls/20 --- bun.lockb | Bin 150793 -> 151871 bytes package.json | 17 +++++++++------ src/TraitExpression.ts | 19 ++++++++++------- src/TraitExpressionBuilder.ts | 20 ++++++++--------- src/effect.ts | 39 ++++++++++++++++++++++++++++++++++ src/lib.ts | 1 + tsup.config.ts | 2 +- 7 files changed, 72 insertions(+), 26 deletions(-) create mode 100644 src/effect.ts diff --git a/bun.lockb b/bun.lockb index 7e6b681fe18818e27ace99d19db34a53d73b23dd..cae4041c9f80f849eb51d54648713cb77556cae3 100755 GIT binary patch delta 25374 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 delta 24992 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 Ys^7SxW?XqObOn*5tt=#7Yp5^!AAHXjp#T5? diff --git a/package.json b/package.json index 946a334..2e38b31 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@thilawyn/traitify-ts", - "version": "0.1.19", + "version": "0.1.20", "type": "module", "publishConfig": { "registry": "https://git.jvalver.de/api/packages/thilawyn/npm/" @@ -29,16 +29,19 @@ "clean:node": "rm -rf node_modules" }, "dependencies": { - "lodash-es": "^4.17.21", - "type-fest": "^4.14.0" + "remeda": "^1.61.0", + "type-fest": "^4.18.0" }, "devDependencies": { - "@types/lodash-es": "^4.17.12", "bun-types": "latest", - "npm-check-updates": "^16.14.17", + "npm-check-updates": "^16.14.20", "npm-sort": "^0.0.4", "tsup": "^8.0.2", - "tsx": "^4.7.1", - "typescript": "^5.4.3" + "tsx": "^4.7.3", + "typescript": "^5.4.5" + }, + "optionalDependencies": { + "@effect/schema": "^0.66.12", + "effect": "^3.1.0" } } diff --git a/src/TraitExpression.ts b/src/TraitExpression.ts index 44367d0..b7a8f80 100644 --- a/src/TraitExpression.ts +++ b/src/TraitExpression.ts @@ -13,14 +13,13 @@ export class TraitExpression< readonly traits: Traits, ) {} + get extends(): ( AbstractClass< InstanceType & // Keep the instance of the superclass outside of any kind of type manipulation // as it can accidentely remove abstract properties Simplify< - Extend< - TraitTuple.MapImplInstance - > + Extend> >, ConstructorParameters @@ -39,16 +38,20 @@ export class TraitExpression< ) as any } - staticImplements(target: StaticImplements, context: any) {} + + staticImplements(_target: StaticImplements, _context: any) {} + + get staticImplementsStage2() { + return (_target: StaticImplements) => {} + } + subtrait< This extends TraitExpression >( this: This ) { - return new TraitBuilder< - This, - + return new TraitBuilder> >, @@ -77,7 +80,7 @@ export namespace TraitExpression { const nullSuperclassSymbol = Symbol() export class NullSuperclass { static readonly [nullSuperclassSymbol]: true - constructor(...args: any[]) {} + constructor(..._args: any[]) {} } export type Superclass = ( diff --git a/src/TraitExpressionBuilder.ts b/src/TraitExpressionBuilder.ts index 60335c9..c563268 100644 --- a/src/TraitExpressionBuilder.ts +++ b/src/TraitExpressionBuilder.ts @@ -1,4 +1,4 @@ -import { uniq } from "lodash-es" +import { unique } from "remeda" import { AbstractClass, IsEqual } from "type-fest" import { Trait, TraitTuple } from "./Trait" import { TraitExpression } from "./TraitExpression" @@ -36,7 +36,7 @@ export class TraitExpressionBuilder< ]) as readonly Trait[] as TraitExpressionBuilder.SpreadSupertraits } - static traitsUniq< + static traitsUnique< const T extends readonly Trait< TraitExpression< typeof TraitExpression.NullSuperclass, @@ -49,7 +49,7 @@ export class TraitExpressionBuilder< >( traits: T ) { - return uniq(traits) as readonly Trait[] as TraitExpressionBuilder.TraitsUniq + return unique(traits) as readonly Trait[] as TraitExpressionBuilder.TraitsUnique } @@ -83,7 +83,7 @@ export class TraitExpressionBuilder< return new this.constructor( this.expressionSuperclass, - this.constructor.traitsUniq([ + this.constructor.traitsUnique([ ...this.expressionTraits, ...this.constructor.spreadSupertraits(traits), ]), @@ -109,7 +109,7 @@ export class TraitExpressionBuilder< return new this.constructor( this.expressionSuperclass, - this.constructor.traitsUniq([ + this.constructor.traitsUnique([ ...this.constructor.spreadSupertraits(traits), ...this.expressionTraits, ]), @@ -154,14 +154,14 @@ export namespace TraitExpressionBuilder { : readonly [] ) - export type TraitsUniq = ( + export type TraitsUnique = ( Traits extends readonly [ ...infer Rest, infer El extends Trait, ] ? IsTraitInTupleFromRight extends true - ? TraitsUniq - : readonly [...TraitsUniq, El] + ? TraitsUnique + : readonly [...TraitsUnique, El] : readonly [] ) type IsTraitInTupleFromRight = ( @@ -176,7 +176,7 @@ export namespace TraitExpressionBuilder { Traits extends readonly Trait[], T extends readonly Trait[], > = ( - TraitExpressionBuilder.TraitsUniq, ]> @@ -186,7 +186,7 @@ export namespace TraitExpressionBuilder { Traits extends readonly Trait[], T extends readonly Trait[], > = ( - TraitExpressionBuilder.TraitsUniq, ...Traits, ]> diff --git a/src/effect.ts b/src/effect.ts new file mode 100644 index 0000000..53736ea --- /dev/null +++ b/src/effect.ts @@ -0,0 +1,39 @@ +import { Schema as S } from "@effect/schema" +import { Simplify } from "type-fest" +import { Trait, TraitTuple } from "./Trait" +import { TraitExpression } from "./TraitExpression" +import { Extend } from "./util" + + +export function extendsEffectSchemaExpression< + Fields extends S.Struct.Fields, + A, I, R, C, + Inherited extends object, + Proto, + + const Traits extends readonly Trait[], +>( + expression: TraitExpression< + S.Class, + Traits + > +) { + return (): ( + S.Class< + Self, + Fields, + A, I, R, C, + Simplify< + Extend<[ + Inherited, + ...TraitTuple.MapImplInstance + ]> + >, + Proto + > & + + Simplify< + Extend> + > + ) => expression.extends as any +} diff --git a/src/lib.ts b/src/lib.ts index a96aa6a..32077ec 100644 --- a/src/lib.ts +++ b/src/lib.ts @@ -2,3 +2,4 @@ export { Trait, TraitClass, TraitConcreteClass, TraitInstance, TraitStaticMember export { ImplStatic, TraitBuilder, implStaticInstantiableThis, implStaticThis, trait } from "./TraitBuilder" export { Implements, StaticImplements, TraitExpression, TraitExpressionClass, TraitExpressionConcreteClass, TraitExpressionInstance, TraitExpressionStaticMembers } from "./TraitExpression" export { TraitExpressionBuilder, expression } from "./TraitExpressionBuilder" +export { extendsEffectSchemaExpression } from "./effect" diff --git a/tsup.config.ts b/tsup.config.ts index 2f051ef..3f59156 100644 --- a/tsup.config.ts +++ b/tsup.config.ts @@ -2,7 +2,7 @@ import { defineConfig } from "tsup" export default defineConfig({ - entry: ["src/lib.ts"], + entry: ["./src/lib.ts"], format: ["esm", "cjs"], dts: true, splitting: false,