From 1ac7ec5245765f38f25c1401a278d40b330ad69a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julien=20Valverd=C3=A9?= Date: Sun, 25 Feb 2024 03:25:55 +0100 Subject: [PATCH] 0.1.12 (#12) 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/12 --- package.json | 2 +- src/Trait.ts | 14 +++++++------- src/TraitExpressionBuilder.ts | 22 +++++++++++----------- src/util/extend.ts | 20 ++++++++++---------- 4 files changed, 29 insertions(+), 29 deletions(-) diff --git a/package.json b/package.json index bafe7b4..37bfd3b 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@thilawyn/traitify-ts", - "version": "0.1.11", + "version": "0.1.12", "type": "module", "publishConfig": { "registry": "https://git.jvalver.de/api/packages/thilawyn/npm/" diff --git a/src/Trait.ts b/src/Trait.ts index 63109a6..d2f1f2e 100644 --- a/src/Trait.ts +++ b/src/Trait.ts @@ -74,43 +74,43 @@ export namespace Trait { export namespace TraitTuple { export type MapAbstract = { - [K in keyof T]: K extends keyof [] + [K in keyof T]: K extends keyof readonly [] ? T[K] : Trait.Abstract } export type MapStaticAbstract = { - [K in keyof T]: K extends keyof [] + [K in keyof T]: K extends keyof readonly [] ? T[K] : Trait.StaticAbstract } export type MapImplClass = { - [K in keyof T]: K extends keyof [] + [K in keyof T]: K extends keyof readonly [] ? T[K] : Trait.ImplClass } export type MapImplInstance = { - [K in keyof T]: K extends keyof [] + [K in keyof T]: K extends keyof readonly [] ? T[K] : Trait.ImplInstance } export type MapImplStaticMembers = { - [K in keyof T]: K extends keyof [] + [K in keyof T]: K extends keyof readonly [] ? T[K] : Trait.ImplStaticMembers } export type MapInstance = { - [K in keyof T]: K extends keyof [] + [K in keyof T]: K extends keyof readonly [] ? T[K] : Trait.Instance } export type MapStaticMembers = { - [K in keyof T]: K extends keyof [] + [K in keyof T]: K extends keyof readonly [] ? T[K] : Trait.Static } diff --git a/src/TraitExpressionBuilder.ts b/src/TraitExpressionBuilder.ts index 2885fe6..60335c9 100644 --- a/src/TraitExpressionBuilder.ts +++ b/src/TraitExpressionBuilder.ts @@ -33,7 +33,7 @@ export class TraitExpressionBuilder< return traits.flatMap(trait => [ ...trait.superExpression.traits, trait, - ]) as TraitExpressionBuilder.SpreadSupertraits + ]) as readonly Trait[] as TraitExpressionBuilder.SpreadSupertraits } static traitsUniq< @@ -49,7 +49,7 @@ export class TraitExpressionBuilder< >( traits: T ) { - return uniq(traits) as TraitExpressionBuilder.TraitsUniq + return uniq(traits) as readonly Trait[] as TraitExpressionBuilder.TraitsUniq } @@ -142,30 +142,30 @@ export class TraitExpressionBuilder< export namespace TraitExpressionBuilder { export type SpreadSupertraits = ( - Traits extends [ + Traits extends readonly [ infer El extends Trait, ...infer Rest, ] - ? [ + ? readonly [ ...Trait.Supertraits, El, ...SpreadSupertraits, ] - : [] + : readonly [] ) export type TraitsUniq = ( - Traits extends [ + Traits extends readonly [ ...infer Rest, infer El extends Trait, ] ? IsTraitInTupleFromRight extends true ? TraitsUniq - : [...TraitsUniq, El] - : [] + : readonly [...TraitsUniq, El] + : readonly [] ) type IsTraitInTupleFromRight = ( - Traits extends [...infer Rest, infer El] + Traits extends readonly [...infer Rest, infer El] ? IsEqual extends true ? true : IsTraitInTupleFromRight @@ -176,7 +176,7 @@ export namespace TraitExpressionBuilder { Traits extends readonly Trait[], T extends readonly Trait[], > = ( - TraitExpressionBuilder.TraitsUniq<[ + TraitExpressionBuilder.TraitsUniq, ]> @@ -186,7 +186,7 @@ export namespace TraitExpressionBuilder { Traits extends readonly Trait[], T extends readonly Trait[], > = ( - TraitExpressionBuilder.TraitsUniq<[ + TraitExpressionBuilder.TraitsUniq, ...Traits, ]> diff --git a/src/util/extend.ts b/src/util/extend.ts index 1618656..9df1ca1 100644 --- a/src/util/extend.ts +++ b/src/util/extend.ts @@ -22,30 +22,30 @@ import { CommonKeys } from "." // TODO: use OverrideProperties from type-fest? export type Extend = ( - T extends [ + T extends readonly [ infer Super, infer Self, - ...infer Rest extends object[], + ...infer Rest extends readonly object[], ] ? Pick> extends Pick> - ? Extend<[ + ? Extend> & Self, ...Rest, ]> : never - : T extends [infer Self] + : T extends readonly [infer Self] ? Self : {} ) export type Extendable = ( - T extends [ + T extends readonly [ infer Super, infer Self, - ...infer Rest extends object[], + ...infer Rest extends readonly object[], ] ? Pick> extends Pick> - ? Extendable<[ + ? Extendable> & Self, ...Rest, ]> @@ -54,16 +54,16 @@ export type Extendable = ( ) export type NonExtendableKeys = ( - T extends [ + T extends readonly [ infer Super extends object, infer Self extends object, - ...infer Rest extends object[], + ...infer Rest extends readonly object[], ] ? {[K in keyof Super & keyof Self]: Self[K] extends Super[K] ? never : K }[keyof Super & keyof Self] - | NonExtendableKeys<[ + | NonExtendableKeys