@@ -33,7 +33,6 @@ type Add<T extends number, T2 extends number> = T2 extends 0
3333type Prettify < T > = {
3434 [ K in keyof T ] : T [ K ] ;
3535} & { } ; // Thanks Matt!
36- // To Tuple:
3736type ToTupleInternal < TRecord extends Record < number , unknown > , Index extends number > = keyof TRecord extends never
3837 ? [ ]
3938 : [
@@ -46,7 +45,7 @@ type ToTupleInternal<TRecord extends Record<number, unknown>, Index extends numb
4645;
4746type ToTuple < TRecord extends Record < number , unknown > > = ToTupleInternal < TRecord , 0 > ;
4847
49- type IsSatisfied < T , TMember extends T > = TMember ;
48+ type IsSatisfied < T , TCandidate extends T > = TCandidate ;
5049type Is < T extends boolean , TIf , TElse > = T extends true
5150 ? TIf
5251 : TElse
@@ -240,52 +239,52 @@ type Token = IsSatisfied<{ type: string },
240239type Groups = ( Token & { type : 'groups' } ) [ 'groups' ] ;
241240// Indexification (DFS)
242241// Utils
243- type FlattenGroupsDeep < TGroups extends Groups > = unknown extends AsLinked < TGroups , infer First , infer Rest >
244- ? [ First , ...FlattenTokenDeep < First [ 'inner' ] > , ...FlattenGroupsDeep <
242+ type FlattenGroups < TGroups extends Groups > = unknown extends AsLinked < TGroups , infer First , infer Rest >
243+ ? [ First , ...FlattenToken < First [ 'inner' ] > , ...FlattenGroups <
245244 // @ts -expect-error: TS cannot infer that this extends 'Groups'
246245 Rest
247246 > ]
248247 : [ ]
249248;
250- type FlattenTokenDeepInternal < TToken extends Token , Limit extends unknown [ ] > = Limit extends [ unknown , ...infer L ]
249+ type FlattenTokenInternal < TToken extends Token , Limit extends unknown [ ] > = Limit extends [ unknown , ...infer L ]
251250 ? TToken extends { type : 'alternation' } ? [
252- ...FlattenTokenDeepInternal < TToken [ 'left' ] , L > ,
253- ...FlattenTokenDeepInternal < TToken [ 'right' ] , L >
251+ ...FlattenTokenInternal < TToken [ 'left' ] , L > ,
252+ ...FlattenTokenInternal < TToken [ 'right' ] , L >
254253 ] : TToken extends { type : 'groups' }
255- ? FlattenGroupsDeep < TToken [ 'groups' ] >
254+ ? FlattenGroups < TToken [ 'groups' ] >
256255 : never
257256 : never
258257;
259- type FlattenTokenDeep < TToken extends Token > = FlattenTokenDeepInternal < TToken , Range < 20 > > ;
258+ type FlattenToken < TToken extends Token > = FlattenTokenInternal < TToken , Range < 20 > > ;
260259// DFS
261- type IndexifyGroupsDeep < TGroups extends Groups , TIndex extends number > = unknown extends AsLinked < TGroups , infer First , infer Rest >
260+ type IndexGroups < TGroups extends Groups , TIndex extends number > = unknown extends AsLinked < TGroups , infer First , infer Rest >
262261 ? [
263262 {
264263 index : TIndex ,
265- value : Omit < First , 'inner' > & { inner : IndexifyTokenDeepInternal < First [ 'inner' ] , Increment < TIndex > > }
264+ value : Omit < First , 'inner' > & { inner : IndexTokenInternal < First [ 'inner' ] , Increment < TIndex > > }
266265 } ,
267- ...IndexifyGroupsDeep <
266+ ...IndexGroups <
268267 // @ts -expect-error: TS cannot infer that this extends 'Groups'
269268 Rest ,
270- Add < TIndex , FlattenGroupsDeep < [ First ] > [ 'length' ] & number >
269+ Add < TIndex , FlattenGroups < [ First ] > [ 'length' ] & number >
271270 >
272271 ]
273272 : [ ]
274273;
275- type IndexifyTokenDeepInternal < TToken extends Token , TIndex extends number > = TToken extends { type : 'alternation' } ? {
274+ type IndexTokenInternal < TToken extends Token , TIndex extends number > = TToken extends { type : 'alternation' } ? {
276275 type : 'alternation' ,
277- left : IndexifyTokenDeepInternal < TToken [ 'left' ] , TIndex > ,
278- right : IndexifyTokenDeepInternal < TToken [ 'right' ] , Add <
276+ left : IndexTokenInternal < TToken [ 'left' ] , TIndex > ,
277+ right : IndexTokenInternal < TToken [ 'right' ] , Add <
279278 TIndex ,
280- FlattenTokenDeep < TToken [ 'left' ] > [ 'length' ]
279+ FlattenToken < TToken [ 'left' ] > [ 'length' ]
281280 & number
282281 > >
283282} : TToken extends { type : 'groups' } ? {
284283 type : 'groups' ,
285- groups : IndexifyGroupsDeep < TToken [ 'groups' ] , TIndex >
284+ groups : IndexGroups < TToken [ 'groups' ] , TIndex >
286285 } : never
287286;
288- type IndexifyTokenDeep < TToken extends Token > = IndexifyTokenDeepInternal < TToken , 0 > ;
287+ type IndexToken < TToken extends Token > = IndexTokenInternal < TToken , 0 > ;
289288// TokenWithIndex type
290289type TokenWithIndex = IsSatisfied < { type : string } ,
291290{
@@ -316,23 +315,23 @@ type ContextualValue<T extends GroupWithIndex, TValue> = Record<T['index'], {
316315 value : TValue ,
317316 reference : T [ 'value' ]
318317} > ;
319- type DeepUndefinedGroups < TGroups extends GroupWithIndexes > = unknown extends AsLinked < TGroups , infer First , infer Rest >
320- ? ContextualValue < First , never > & DeepUndefinedToken < First [ 'value' ] [ 'inner' ] > & DeepUndefinedGroups <
318+ type UnsetGroups < TGroups extends GroupWithIndexes > = unknown extends AsLinked < TGroups , infer First , infer Rest >
319+ ? ContextualValue < First , never > & UnsetToken < First [ 'value' ] [ 'inner' ] > & UnsetGroups <
321320 // @ts -expect-error: TS cannot infer that this extends 'GroupWithIndexes'
322321 Rest
323322 >
324323 : { }
325324;
326- type DeepUndefinedToken < TToken extends TokenWithIndex > = TToken extends { type : 'alternation' }
327- ? DeepUndefinedToken < TToken [ 'left' ] > & DeepUndefinedToken < TToken [ 'right' ] >
325+ type UnsetToken < TToken extends TokenWithIndex > = TToken extends { type : 'alternation' }
326+ ? UnsetToken < TToken [ 'left' ] > & UnsetToken < TToken [ 'right' ] >
328327 : TToken extends { type : 'groups' }
329- ? DeepUndefinedGroups < TToken [ 'groups' ] >
328+ ? UnsetGroups < TToken [ 'groups' ] >
330329 : never
331330;
332331type ContextualizeGroups < TGroups extends GroupWithIndexes > = unknown extends AsLinked < TGroups , infer First , infer Rest >
333332 ? (
334333 ( First [ 'value' ] [ 'isOptional' ] extends true
335- ? DeepUndefinedGroups < [ First ] >
334+ ? UnsetGroups < [ First ] >
336335 : never
337336 ) | ( ContextualValue < First , string > & ContextualizeToken < First [ 'value' ] [ 'inner' ] > )
338337 ) & ContextualizeGroups <
@@ -343,8 +342,8 @@ type ContextualizeGroups<TGroups extends GroupWithIndexes> = unknown extends AsL
343342;
344343type ContextualizeToken < TToken extends TokenWithIndex > = TToken extends { type : 'alternation' }
345344 ? (
346- ( ContextualizeToken < TToken [ 'left' ] > & DeepUndefinedToken < TToken [ 'right' ] > ) |
347- ( ContextualizeToken < TToken [ 'right' ] > & DeepUndefinedToken < TToken [ 'left' ] > )
345+ ( ContextualizeToken < TToken [ 'left' ] > & UnsetToken < TToken [ 'right' ] > ) |
346+ ( ContextualizeToken < TToken [ 'right' ] > & UnsetToken < TToken [ 'left' ] > )
348347 )
349348 : TToken extends { type : 'groups' }
350349 ? ContextualizeGroups < TToken [ 'groups' ] >
@@ -377,7 +376,7 @@ type Parse<T extends string> = string extends T
377376 namedCaptures : Record < string , string | undefined > ;
378377 }
379378 // @ts -expect-error: this should terminate
380- : Distribute < ContextualizeToken < IndexifyTokenDeep < TokenTree < `(\\\\${T } )`> > > >
379+ : Distribute < ContextualizeToken < IndexToken < TokenTree < `(\\\\${T } )`> > > >
381380;
382381
383382type Remove < Ts extends unknown [ ] , TMatch extends Ts [ number ] > = unknown extends AsLinked < Ts , infer First , infer Rest >
@@ -389,10 +388,7 @@ type Remove<Ts extends unknown[], TMatch extends Ts[number]> = unknown extends A
389388type Flags = [ 'd' , 'g' , 'i' , 'm' , 's' , 'u' | 'v' , 'y' ] ;
390389type Flag = Flags [ number ] ;
391390type GetFlagsInternal < T extends string , TFlags extends Flag [ ] > = unknown extends AsLinked < TFlags , infer First , infer Rest >
392- ? `${FirstMatch < First , T > extends never
393- ? ''
394- : FirstMatch < First , T >
395- } ${GetFlagsInternal <
391+ ? `${Fallback < FirstMatch < First , T > , '' > } ${GetFlagsInternal <
396392 T ,
397393 // @ts -expect-error: TS cannot infer that this extends 'Flag[]'
398394 Rest
0 commit comments