From 30b72b5b52b59a9b694d8bb3ed3f5656b1fceab0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julien=20Valverd=C3=A9?= Date: Tue, 17 Jun 2025 23:06:08 +0200 Subject: [PATCH] 0.1.12 (#17) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Julien Valverdé Reviewed-on: https://gitea:3000/Thilawyn/reffuse/pulls/17 --- packages/example/src/routes/tests.tsx | 15 +++++++++++++++ packages/reffuse/package.json | 2 +- packages/reffuse/src/types/PropertyPath.ts | 20 +++++++++++--------- 3 files changed, 27 insertions(+), 10 deletions(-) diff --git a/packages/example/src/routes/tests.tsx b/packages/example/src/routes/tests.tsx index 8d077ce..82ca80b 100644 --- a/packages/example/src/routes/tests.tsx +++ b/packages/example/src/routes/tests.tsx @@ -6,6 +6,16 @@ import { Console, Effect, Option } from "effect" import { useEffect, useState } from "react" +interface Node { + value: string + left?: Leaf + right?: Leaf +} +interface Leaf { + node: Node +} + + const makeUuid = Effect.provide(makeUuid4, GetRandomValues.CryptoRandom) @@ -32,6 +42,11 @@ function RouteComponent() { runSync, ), [scopeLayer, runSync]) + + const nodeRef = R.useRef(() => Effect.succeed({ value: "prout" })) + const nodeValueRef = R.useSubRefFromPath(nodeRef, ["value"]) + + return ( {uuid} diff --git a/packages/reffuse/package.json b/packages/reffuse/package.json index b11914a..25bab7a 100644 --- a/packages/reffuse/package.json +++ b/packages/reffuse/package.json @@ -1,6 +1,6 @@ { "name": "reffuse", - "version": "0.1.11", + "version": "0.1.12", "type": "module", "files": [ "./README.md", diff --git a/packages/reffuse/src/types/PropertyPath.ts b/packages/reffuse/src/types/PropertyPath.ts index 5806f4e..1cf005f 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" -export type Paths = [] | ( - T extends readonly any[] ? ArrayPaths : - T extends object ? ObjectPaths : +export type Paths = [] | ( + T extends Seen ? [] : + 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 = { - [K in keyof T as K extends string | number | symbol ? K : never]: - | [K] - | [K, ...Paths] +export type ObjectPaths = { + [K in keyof T as K extends string | number | symbol ? K : never]-?: + NonNullable extends infer V + ? [K] | [K, ...Paths] + : never } extends infer O ? O[keyof O] : never