Skip to content

Commit 2e48f30

Browse files
committed
fixed "TS2589: Type instantiation is excessively deep and possibly infinite." error on alternation
1 parent 1a57c76 commit 2e48f30

File tree

1 file changed

+8
-6
lines changed

1 file changed

+8
-6
lines changed

src/index.ts

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -243,13 +243,16 @@ type FlattenGroupsDeep<TGroups extends Groups> = unknown extends AsLinked<TGroup
243243
>]
244244
: []
245245
;
246-
type FlattenTokenDeep<TToken extends Token> = TToken extends { type: 'alternation' } ? [
247-
...FlattenTokenDeep<TToken['left']>,
248-
...FlattenTokenDeep<TToken['right']>
249-
] : TToken extends { type: 'groups' }
250-
? FlattenGroupsDeep<TToken['groups']>
246+
type FlattenTokenDeepInternal<TToken extends Token, Limit extends unknown[]> = Limit extends [unknown, ...infer L]
247+
? TToken extends { type: 'alternation' } ? [
248+
...FlattenTokenDeepInternal<TToken['left'], L>,
249+
...FlattenTokenDeepInternal<TToken['right'], L>
250+
] : TToken extends { type: 'groups' }
251+
? FlattenGroupsDeep<TToken['groups']>
252+
: never
251253
: never
252254
;
255+
type FlattenTokenDeep<TToken extends Token> = FlattenTokenDeepInternal<TToken, Range<20>>;
253256
// DFS
254257
type IndexifyGroupsDeep<TGroups extends Groups, TIndex extends number> = unknown extends AsLinked<TGroups, infer First, infer Rest>
255258
? [
@@ -270,7 +273,6 @@ type IndexifyTokenDeepInternal<TToken extends Token, TIndex extends number> = TT
270273
left: IndexifyTokenDeepInternal<TToken['left'], TIndex>,
271274
right: IndexifyTokenDeepInternal<TToken['right'], Add<
272275
TIndex,
273-
// @ts-expect-error: this should terminate
274276
FlattenTokenDeep<TToken['left']>['length']
275277
& number
276278
>>

0 commit comments

Comments
 (0)