Skip to content

Commit 61fc827

Browse files
committed
refactor
1 parent 0171956 commit 61fc827

File tree

1 file changed

+28
-32
lines changed

1 file changed

+28
-32
lines changed

src/index.ts

Lines changed: 28 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,6 @@ type Add<T extends number, T2 extends number> = T2 extends 0
3333
type Prettify<T> = {
3434
[K in keyof T]: T[K];
3535
} & {}; // Thanks Matt!
36-
// To Tuple:
3736
type 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
;
4746
type 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;
5049
type Is<T extends boolean, TIf, TElse> = T extends true
5150
? TIf
5251
: TElse
@@ -240,52 +239,52 @@ type Token = IsSatisfied<{ type: string },
240239
type 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
290289
type 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
;
332331
type 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
;
344343
type 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

383382
type 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
389388
type Flags = ['d', 'g', 'i', 'm', 's', 'u' | 'v', 'y'];
390389
type Flag = Flags[number];
391390
type 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

Comments
 (0)