Compare commits
15 Commits
e8a267f4cb
...
next
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
d81a9fcd91 | ||
|
|
45ce747ff0 | ||
|
|
e089bf9fee | ||
|
|
c2a1a7b212 | ||
|
|
4dc336fbf4 | ||
|
|
1fe2fec325 | ||
|
|
d8b40088cb | ||
|
|
38bf3f99ea | ||
|
|
30b72b5b52 | ||
|
|
3a8a1ed0c3 | ||
|
|
7013bed037 | ||
|
|
0b7a2dbe92 | ||
|
|
0d3e09354e | ||
|
|
dc46d03aab | ||
|
|
37ffc161d3 |
@@ -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<Node>({ value: "prout" }))
|
||||
const nodeValueRef = R.useSubRefFromPath(nodeRef, ["value"])
|
||||
|
||||
|
||||
return (
|
||||
<Flex direction="column" justify="center" align="center" gap="2">
|
||||
<Text>{uuid}</Text>
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "reffuse",
|
||||
"version": "0.1.11",
|
||||
"version": "0.1.13",
|
||||
"type": "module",
|
||||
"files": [
|
||||
"./README.md",
|
||||
|
||||
@@ -426,7 +426,7 @@ export abstract class ReffuseNamespace<R> {
|
||||
): SubscriptionSubRef.SubscriptionSubRef<PropertyPath.ValueFromPath<B, P>, B> {
|
||||
return React.useMemo(
|
||||
() => SubscriptionSubRef.makeFromPath(parent, path),
|
||||
[parent],
|
||||
[parent, ...path],
|
||||
)
|
||||
}
|
||||
|
||||
|
||||
@@ -1,24 +1,29 @@
|
||||
import { Array, Function, Option, Predicate } from "effect"
|
||||
|
||||
|
||||
export type Paths<T> = [] | (
|
||||
T extends readonly any[] ? ArrayPaths<T> :
|
||||
T extends object ? ObjectPaths<T> :
|
||||
type Prev = readonly [never, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
|
||||
|
||||
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
|
||||
)
|
||||
|
||||
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]
|
||||
| [K, ...Paths<T[K]>]
|
||||
| [K, ...Paths<T[K], Prev[D], Seen>]
|
||||
} extends infer O
|
||||
? O[keyof O]
|
||||
: never
|
||||
|
||||
export type ObjectPaths<T extends object> = {
|
||||
[K in keyof T as K extends string | number | symbol ? K : never]:
|
||||
| [K]
|
||||
| [K, ...Paths<T[K]>]
|
||||
export type ObjectPaths<T extends object, D extends number, Seen> = {
|
||||
[K in keyof T as K extends string | number | symbol ? K : never]-?:
|
||||
NonNullable<T[K]> extends infer V
|
||||
? [K] | [K, ...Paths<V, Prev[D], Seen>]
|
||||
: never
|
||||
} extends infer O
|
||||
? O[keyof O]
|
||||
: never
|
||||
|
||||
Reference in New Issue
Block a user