From dc46d03aab89de4b70db979485dc782aa2f91872 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julien=20Valverd=C3=A9?= Date: Tue, 17 Jun 2025 21:12:32 +0200 Subject: [PATCH] PropertyPath recursive fix --- packages/reffuse/src/types/PropertyPath.ts | 16 +++++++++------- packages/reffuse/src/utils.ts | 8 ++++++++ 2 files changed, 17 insertions(+), 7 deletions(-) diff --git a/packages/reffuse/src/types/PropertyPath.ts b/packages/reffuse/src/types/PropertyPath.ts index 5806f4e..de8e00c 100644 --- a/packages/reffuse/src/types/PropertyPath.ts +++ b/packages/reffuse/src/types/PropertyPath.ts @@ -1,24 +1,26 @@ import { Array, Function, Option, Predicate } from "effect" +import type { Includes } from "../utils.js" -export type Paths = [] | ( - T extends readonly any[] ? ArrayPaths : - T extends object ? ObjectPaths : +export type Paths = [] | ( + Includes extends true ? [] : + T extends readonly any[] ? ArrayPaths : + T extends object ? ObjectPaths : never ) -export type ArrayPaths = { +export type ArrayPaths = { [K in keyof T as K extends number ? K : never]: | [K] - | [K, ...Paths] + | [K, ...Paths] } extends infer O ? O[keyof O] : never -export type ObjectPaths = { +export type ObjectPaths = { [K in keyof T as K extends string | number | symbol ? K : never]: | [K] - | [K, ...Paths] + | [K, ...Paths] } extends infer O ? O[keyof O] : never diff --git a/packages/reffuse/src/utils.ts b/packages/reffuse/src/utils.ts index d4abd6c..e749c5e 100644 --- a/packages/reffuse/src/utils.ts +++ b/packages/reffuse/src/utils.ts @@ -9,3 +9,11 @@ export type CommonKeys = Extract export type StaticType any> = Omit export type Merge = Omit> & Self + +export type Includes = ( + T extends [infer Head, ...infer Tail] + ? (() => X extends Head ? 1 : 2) extends (() => X extends U ? 1 : 2) + ? true + : Includes + : false +)