22// Compensation
33type As < T , _Infer extends T > = unknown ;
44type Head < T extends unknown [ ] > = T [ 0 ] ;
5- type Tail < T extends unknown [ ] > = T extends [ infer _ , ...infer MyTail ]
6- ? MyTail
5+ type Tail < T extends unknown [ ] > = T extends [ infer _ , ...infer Rest ]
6+ ? Rest
77 : never
88;
99type AsLinked <
1010 T extends unknown [ ] ,
11- InferFirst extends Head < T > ,
11+ _InferFirst extends Head < T > ,
1212 InferRest extends Tail < T >
1313> = InferRest extends unknown [ ]
1414 ? unknown
@@ -229,7 +229,7 @@ type Token = IsSatisfied<{ type: string },
229229 inner : Token
230230 } & IsSatisfied < { isCaptured : boolean } ,
231231 { isCaptured : false } |
232- ( { isCaptured : true , isNamed : boolean } & IsSatisfied < { isNamed : boolean } ,
232+ ( { isCaptured : true } & IsSatisfied < { isNamed : boolean } ,
233233 { isNamed : false } |
234234 { isNamed : true , name : string }
235235 > )
@@ -240,7 +240,11 @@ type Groups = (Token & {type: 'groups'})['groups'];
240240// Indexification (DFS)
241241// Utils
242242type FlattenGroups < TGroups extends Groups > = unknown extends AsLinked < TGroups , infer First , infer Rest >
243- ? [ First , ...FlattenToken < First [ 'inner' ] > , ...FlattenGroups < Rest > ]
243+ ? [
244+ First ,
245+ ...FlattenToken < First [ 'inner' ] > ,
246+ ...FlattenGroups < Rest >
247+ ]
244248 : [ ]
245249;
246250type FlattenTokenInternal < TToken extends Token , Limit extends unknown [ ] > = Limit extends [ unknown , ...infer L ]
@@ -309,7 +313,9 @@ type ContextualValue<T extends GroupWithIndex, TValue> = Record<T['index'], {
309313 reference : T [ 'value' ]
310314} > ;
311315type UnsetGroups < TGroups extends GroupWithIndexes > = unknown extends AsLinked < TGroups , infer First , infer Rest >
312- ? ContextualValue < First , never > & UnsetToken < First [ 'value' ] [ 'inner' ] > & UnsetGroups < Rest >
316+ ? ContextualValue < First , never >
317+ & UnsetToken < First [ 'value' ] [ 'inner' ] >
318+ & UnsetGroups < Rest >
313319 : { }
314320;
315321type UnsetToken < TToken extends TokenWithIndex > = TToken extends { type : 'alternation' }
@@ -347,8 +353,12 @@ type Distribute<T extends Record<keyof T & GroupWithIndex['index'], { value: str
347353 ? {
348354 captures : ToTuple < { [ K in keyof CaptureRecord ] : Fallback < CaptureRecord [ K ] [ 'value' ] , undefined > } > ,
349355 namedCaptures : {
350- [ K in keyof CaptureRecord as CaptureRecord [ K ] [ 'reference' ] extends { name : infer Name }
351- ? Name & string
356+ [ K in keyof CaptureRecord as CaptureRecord [ K ] [ 'reference' ] extends {
357+ isCaptured : true ,
358+ isNamed : true ,
359+ name : infer Name extends string
360+ }
361+ ? Name
352362 : never
353363 ] : Fallback < CaptureRecord [ K ] [ 'value' ] , undefined >
354364 }
0 commit comments