From 58752253b3705eca6a3d698990fadd5d88d05bd8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julien=20Valverd=C3=A9?= Date: Tue, 22 Apr 2025 22:36:17 +0200 Subject: [PATCH] SearchPaths work --- packages/reffuse/src/types/SearchPaths.ts | 19 ++++++++++++++++--- 1 file changed, 16 insertions(+), 3 deletions(-) diff --git a/packages/reffuse/src/types/SearchPaths.ts b/packages/reffuse/src/types/SearchPaths.ts index ec4f762..e23d672 100644 --- a/packages/reffuse/src/types/SearchPaths.ts +++ b/packages/reffuse/src/types/SearchPaths.ts @@ -1,3 +1,6 @@ +import { Option, Predicate } from "effect" + + export type Paths = T extends object ? { [K in keyof T as K extends string | number | symbol ? K : never]: @@ -26,9 +29,19 @@ const persons = [ ] -const getFromPath = >(value: T, path: P): ValueFromPath => ( - path.reduce((acc: any, key: any) => acc?.[key], value) +export const get = >(parent: T, path: P): Option.Option> => path.reduce( + (acc: Option.Option, key: any): Option.Option => Option.isSome(acc) + ? Predicate.hasProperty(acc.value, key) + ? Option.some(acc.value[key]) + : Option.none() + : acc, + + Option.some(parent), ) -const res = getFromPath(persons, [1, "name"]) +export const getOrUndefined = >(parent: T, path: P): ValueFromPath => ( + path.reduce((acc: any, key: any) => acc?.[key], parent) +) + +const res = get(persons, [1, "name"]) console.log(res)