Skip to content

Commit 46b49ca

Browse files
committed
fix: limit deep keys to max depth of 10
1 parent 658c8f8 commit 46b49ca

File tree

1 file changed

+11
-5
lines changed

1 file changed

+11
-5
lines changed

packages/form-core/src/utils.ts

Lines changed: 11 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -133,22 +133,28 @@ type AllowedIndexes<
133133
? AllowedIndexes<Tail, Keys | Tail['length']>
134134
: Keys
135135

136-
export type DeepKeys<T> = unknown extends T
136+
export type DeepKeys<T, TDepth extends any[] = []> = TDepth['length'] extends 10
137+
? never
138+
: unknown extends T
137139
? keyof T
138140
: object extends T
139141
? string
140142
: T extends readonly any[] & IsTuple<T>
141-
? AllowedIndexes<T> | DeepKeysPrefix<T, AllowedIndexes<T>>
143+
? AllowedIndexes<T> | DeepKeysPrefix<T, AllowedIndexes<T>, TDepth>
142144
: T extends any[]
143145
? DeepKeys<T[number]>
144146
: T extends Date
145147
? never
146148
: T extends object
147-
? (keyof T & string) | DeepKeysPrefix<T, keyof T>
149+
? (keyof T & string) | DeepKeysPrefix<T, keyof T, TDepth>
148150
: never
149151

150-
type DeepKeysPrefix<T, TPrefix> = TPrefix extends keyof T & (number | string)
151-
? `${TPrefix}.${DeepKeys<T[TPrefix]> & string}`
152+
type DeepKeysPrefix<
153+
T,
154+
TPrefix,
155+
TDepth extends any[],
156+
> = TPrefix extends keyof T & (number | string)
157+
? `${TPrefix}.${DeepKeys<T[TPrefix], [...TDepth, any]> & string}`
152158
: never
153159

154160
export type DeepValue<T, TProp> = T extends Record<string | number, any>

0 commit comments

Comments
 (0)