From 691b28427deb8a326823dfdd3150f21acbe14388 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julien=20Valverd=C3=A9?= Date: Thu, 24 Apr 2025 00:52:18 +0200 Subject: [PATCH] SearchPaths work --- packages/reffuse/src/types/SearchPaths.ts | 32 ++++++++++++++++------- 1 file changed, 22 insertions(+), 10 deletions(-) diff --git a/packages/reffuse/src/types/SearchPaths.ts b/packages/reffuse/src/types/SearchPaths.ts index 01b5cb2..806f1be 100644 --- a/packages/reffuse/src/types/SearchPaths.ts +++ b/packages/reffuse/src/types/SearchPaths.ts @@ -4,15 +4,27 @@ import { Array, Option, Predicate, Schema } from "effect" export type Key = string | number | symbol export type Path = readonly Key[] -export type Paths = [] | (T extends object - ? { - [K in keyof T as K extends string | number | symbol ? K : never]: - | [K] - | [K, ...Paths] - } extends infer O - ? O[keyof O] - : never - : never) +export type Paths = [] | ( + T extends readonly any[] ? ArrayPaths : + T extends object ? ObjectPaths : + never +) + +type ArrayPaths = { + [K in keyof T as K extends number ? K : never]: + | [K] + | [K, ...Paths] +} extends infer O + ? O[keyof O] + : never + +type ObjectPaths = { + [K in keyof T as K extends string | number | symbol ? K : never]: + | [K] + | [K, ...Paths] +} extends infer O + ? O[keyof O] + : never export type ValueFromPath = P extends [infer Head, ...infer Tail] ? Head extends keyof T @@ -86,7 +98,7 @@ const persons = [ Person.make({ name: "AAAYAYAYAYAAY" }), ] -const res = get(persons, [1, "name"]) +const res = get(persons, [0, "name"]) const persons2 = Option.getOrThrow(immutableSet(persons, [1, "name"], "El Risitas")) console.log(persons2) console.log(get(persons2, [1, "name"]))