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
This commit was merged in pull request #18.
This commit is contained in:
Julien Valverdé
2025-06-18 00:12:19 +02:00
parent 30b72b5b52
commit e089bf9fee
3 changed files with 15 additions and 12 deletions

View File

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

View File

@@ -1,25 +1,28 @@
import { Array, Function, Option, Predicate } from "effect" import { Array, Function, Option, Predicate } from "effect"
export type Paths<T, Seen = never> = [] | ( 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 Seen ? [] :
T extends readonly any[] ? ArrayPaths<T, Seen | T> : T extends readonly any[] ? ArrayPaths<T, D, Seen | T> :
T extends object ? ObjectPaths<T, Seen | T> : T extends object ? ObjectPaths<T, D, Seen | T> :
never never
) )
export type ArrayPaths<T extends readonly any[], Seen> = { 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], Seen>] | [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, Seen> = { 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]-?:
NonNullable<T[K]> extends infer V NonNullable<T[K]> extends infer V
? [K] | [K, ...Paths<T[K], Seen>] ? [K] | [K, ...Paths<V, Prev[D], Seen>]
: never : never
} extends infer O } extends infer O
? O[keyof O] ? O[keyof O]