@reffuse/extension-query 0.1.4 #15

Merged
Thilawyn merged 340 commits from next into master 2025-05-26 04:15:01 +02:00
Showing only changes of commit 691b28427d - Show all commits

View File

@@ -4,15 +4,27 @@ import { Array, Option, Predicate, Schema } from "effect"
export type Key = string | number | symbol export type Key = string | number | symbol
export type Path = readonly Key[] export type Path = readonly Key[]
export type Paths<T> = [] | (T extends object export type Paths<T> = [] | (
? { T extends readonly any[] ? ArrayPaths<T> :
[K in keyof T as K extends string | number | symbol ? K : never]: T extends object ? ObjectPaths<T> :
| [K] never
| [K, ...Paths<T[K]>] )
} extends infer O
? O[keyof O] type ArrayPaths<T> = {
: never [K in keyof T as K extends number ? K : never]:
: never) | [K]
| [K, ...Paths<T[K]>]
} extends infer O
? O[keyof O]
: never
type ObjectPaths<T> = {
[K in keyof T as K extends string | number | symbol ? K : never]:
| [K]
| [K, ...Paths<T[K]>]
} extends infer O
? O[keyof O]
: never
export type ValueFromPath<T, P extends any[]> = P extends [infer Head, ...infer Tail] export type ValueFromPath<T, P extends any[]> = P extends [infer Head, ...infer Tail]
? Head extends keyof T ? Head extends keyof T
@@ -86,7 +98,7 @@ const persons = [
Person.make({ name: "AAAYAYAYAYAAY" }), 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")) const persons2 = Option.getOrThrow(immutableSet(persons, [1, "name"], "El Risitas"))
console.log(persons2) console.log(persons2)
console.log(get(persons2, [1, "name"])) console.log(get(persons2, [1, "name"]))