15 Commits

Author SHA1 Message Date
Julien Valverdé
d81a9fcd91 Fix
All checks were successful
Lint / lint (push) Successful in 15s
2025-06-23 08:32:48 +02:00
Julien Valverdé
45ce747ff0 Merge branch 'next' of git.valverde.cloud:Thilawyn/reffuse into next
All checks were successful
Lint / lint (push) Successful in 13s
2025-06-18 00:14:05 +02:00
Julien Valverdé
e089bf9fee 0.1.13 (#18)
All checks were successful
Publish / publish (push) Successful in 22s
Lint / lint (push) Successful in 15s
Co-authored-by: Julien Valverdé <julien.valverde@mailo.com>
Reviewed-on: https://gitea:3000/Thilawyn/reffuse/pulls/18
2025-06-18 00:12:19 +02:00
Julien Valverdé
c2a1a7b212 Version bump
All checks were successful
Lint / lint (push) Successful in 13s
Test build / test-build (pull_request) Successful in 16s
2025-06-18 00:09:34 +02:00
Julien Valverdé
4dc336fbf4 Fix
All checks were successful
Lint / lint (push) Successful in 13s
2025-06-18 00:08:57 +02:00
Julien Valverdé
1fe2fec325 Fix
All checks were successful
Lint / lint (push) Successful in 14s
2025-06-18 00:06:51 +02:00
Julien Valverdé
d8b40088cb Fix
All checks were successful
Lint / lint (push) Successful in 14s
2025-06-17 23:22:39 +02:00
Julien Valverdé
38bf3f99ea Merge branch 'next' of git.valverde.cloud:Thilawyn/reffuse into next
All checks were successful
Lint / lint (push) Successful in 13s
2025-06-17 23:07:50 +02:00
Julien Valverdé
30b72b5b52 0.1.12 (#17)
All checks were successful
Publish / publish (push) Successful in 22s
Lint / lint (push) Successful in 14s
Co-authored-by: Julien Valverdé <julien.valverde@mailo.com>
Reviewed-on: https://gitea:3000/Thilawyn/reffuse/pulls/17
2025-06-17 23:06:08 +02:00
Julien Valverdé
3a8a1ed0c3 Version bump
All checks were successful
Lint / lint (push) Successful in 13s
Test build / test-build (pull_request) Successful in 16s
2025-06-17 23:03:20 +02:00
Julien Valverdé
7013bed037 Fix
All checks were successful
Lint / lint (push) Successful in 14s
2025-06-17 23:01:26 +02:00
Julien Valverdé
0b7a2dbe92 Fix
All checks were successful
Lint / lint (push) Successful in 14s
2025-06-17 22:24:02 +02:00
Julien Valverdé
0d3e09354e Fix
All checks were successful
Lint / lint (push) Successful in 13s
2025-06-17 21:14:25 +02:00
Julien Valverdé
dc46d03aab PropertyPath recursive fix
All checks were successful
Lint / lint (push) Successful in 14s
2025-06-17 21:12:32 +02:00
Julien Valverdé
37ffc161d3 SubRef tests
All checks were successful
Lint / lint (push) Successful in 16s
2025-06-17 20:34:23 +02:00
4 changed files with 31 additions and 11 deletions

View File

@@ -6,6 +6,16 @@ import { Console, Effect, Option } from "effect"
import { useEffect, useState } from "react" import { useEffect, useState } from "react"
interface Node {
value: string
left?: Leaf
right?: Leaf
}
interface Leaf {
node: Node
}
const makeUuid = Effect.provide(makeUuid4, GetRandomValues.CryptoRandom) const makeUuid = Effect.provide(makeUuid4, GetRandomValues.CryptoRandom)
@@ -32,6 +42,11 @@ function RouteComponent() {
runSync, runSync,
), [scopeLayer, runSync]) ), [scopeLayer, runSync])
const nodeRef = R.useRef(() => Effect.succeed<Node>({ value: "prout" }))
const nodeValueRef = R.useSubRefFromPath(nodeRef, ["value"])
return ( return (
<Flex direction="column" justify="center" align="center" gap="2"> <Flex direction="column" justify="center" align="center" gap="2">
<Text>{uuid}</Text> <Text>{uuid}</Text>

View File

@@ -1,6 +1,6 @@
{ {
"name": "reffuse", "name": "reffuse",
"version": "0.1.11", "version": "0.1.13",
"type": "module", "type": "module",
"files": [ "files": [
"./README.md", "./README.md",

View File

@@ -426,7 +426,7 @@ export abstract class ReffuseNamespace<R> {
): SubscriptionSubRef.SubscriptionSubRef<PropertyPath.ValueFromPath<B, P>, B> { ): SubscriptionSubRef.SubscriptionSubRef<PropertyPath.ValueFromPath<B, P>, B> {
return React.useMemo( return React.useMemo(
() => SubscriptionSubRef.makeFromPath(parent, path), () => SubscriptionSubRef.makeFromPath(parent, path),
[parent], [parent, ...path],
) )
} }

View File

@@ -1,24 +1,29 @@
import { Array, Function, Option, Predicate } from "effect" import { Array, Function, Option, Predicate } from "effect"
export type Paths<T> = [] | ( type Prev = readonly [never, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
T extends readonly any[] ? ArrayPaths<T> :
T extends object ? ObjectPaths<T> : export type Paths<T, D extends number = 5, Seen = never> = [] | (
D extends never ? [] :
T extends Seen ? [] :
T extends readonly any[] ? ArrayPaths<T, D, Seen | T> :
T extends object ? ObjectPaths<T, D, Seen | T> :
never never
) )
export type ArrayPaths<T extends readonly any[]> = { export type ArrayPaths<T extends readonly any[], D extends number, Seen> = {
[K in keyof T as K extends number ? K : never]: [K in keyof T as K extends number ? K : never]:
| [K] | [K]
| [K, ...Paths<T[K]>] | [K, ...Paths<T[K], Prev[D], Seen>]
} extends infer O } extends infer O
? O[keyof O] ? O[keyof O]
: never : never
export type ObjectPaths<T extends object> = { export type ObjectPaths<T extends object, D extends number, Seen> = {
[K in keyof T as K extends string | number | symbol ? K : never]: [K in keyof T as K extends string | number | symbol ? K : never]-?:
| [K] NonNullable<T[K]> extends infer V
| [K, ...Paths<T[K]>] ? [K] | [K, ...Paths<V, Prev[D], Seen>]
: never
} extends infer O } extends infer O
? O[keyof O] ? O[keyof O]
: never : never