@reffuse/extension-query 0.1.5 #16

Merged
Thilawyn merged 347 commits from next into master 2025-06-01 05:28:47 +02:00
Showing only changes of commit ba362baf04 - Show all commits

View File

@@ -1,40 +1,34 @@
type SearchPathsV1<T> = T extends object export type Paths<T> = T extends object
? {
[K in keyof T]: [K] | [K, ...SearchPathsV1<T[K]>]
}[keyof T]
: []
type SearchPathsV2<T> = T extends object
? { ? {
[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] | [K]
| [K, ...SearchPathsV2<T[K]>] | [K, ...Paths<T[K]>]
} extends infer O } extends infer O
? O[keyof O] ? O[keyof O]
: never : never
: [] : []
type Get<T, P extends any[]> = type ValueFromPath<T, P extends any[]> = P extends [infer Head, ...infer Tail]
P extends [infer Head, ...infer Tail]
? Head extends keyof T ? Head extends keyof T
? Get<T[Head], Tail> ? ValueFromPath<T[Head], Tail>
: T extends readonly any[] : T extends readonly any[]
? Head extends number ? Head extends number
? Get<T[number], Tail> ? ValueFromPath<T[number], Tail>
: never : never
: never : never
: T; : T
type Persons = { const persons = [
name: string; { name: "Monsieur Poulet" },
}[] { name: "El Chanclador" },
{ name: "AAAYAYAYAYAAY" },
type V = SearchPathsV2<[string, number]> ]
function getFromSearchPath<T, const P extends SearchPathsV2<T>>(obj: T, path: P): Get<T, P> { const getFromPath = <T, const P extends Paths<T>>(value: T, path: P): ValueFromPath<T, P> => (
return path.reduce((acc: any, key: any) => acc?.[key], obj); path.reduce((acc: any, key: any) => acc?.[key], value)
} )
const res = getFromSearchPath([{ name: "prout" }] as const, ["0", "name"]) const res = getFromPath(persons, [1, "name"])
console.log(res)