@@ -28,11 +28,11 @@ THE SOFTWARE.
2828
2929// deno-fmt-ignore-file
3030
31- import { TUnreachable , Unreachable } from '../../../system/unreachable/index.ts'
3231import { Guard } from '../../../guard/index.ts'
32+ import { TUnreachable , Unreachable } from '../../../system/unreachable/index.ts'
3333
34+ import { type TSchema } from '../../types/schema.ts'
3435import { type TLiteral , type TLiteralValue , Literal , IsLiteral } from '../../types/literal.ts'
35- import { type TSchema , IsSchema } from '../../types/schema.ts'
3636import { type TString , String } from '../../types/string.ts'
3737import { type TTemplateLiteral , IsTemplateLiteral } from '../../types/template-literal.ts'
3838import { type TUnion , Union , IsUnion } from '../../types/union.ts'
@@ -44,14 +44,15 @@ import { TemplateLiteralCreate } from './create.ts'
4444// ------------------------------------------------------------------
4545// FromLiteral
4646// ------------------------------------------------------------------
47- type TFromLiteralPush < Variants extends string [ ] , Value extends TLiteralValue , Result extends string [ ] = [ ] > =
47+ type TFromLiteralPush < Variants extends string [ ] , Value extends TLiteralValue , Result extends string [ ] = [ ] > =
4848 Variants extends [ infer Left extends string , ...infer Right extends string [ ] ]
49- ? TFromLiteralPush < Right , Value , [ ...Result , `${Left } ${Value } `] >
50- : Result
49+ ? TFromLiteralPush < Right , Value , [ ...Result , `${Left } ${Value } `] >
50+ : Result
5151
5252function FromLiteralPush < Variants extends string [ ] , Value extends TLiteralValue > ( variants : [ ...Variants ] , value : Value , result : string [ ] = [ ] ) : TFromLiteralPush < Variants , Value > {
53- const [ left , ...right ] = variants
54- return ( Guard . IsString ( left ) ? FromLiteralPush ( right , value , [ ...result , `${ left } ${ value } ` ] ) : result ) as never
53+ return Guard . TakeLeft ( variants , ( left , right ) =>
54+ FromLiteralPush ( right , value , [ ...result , `${ left } ${ value } ` ] ) ,
55+ ( ) => result ) as never
5556}
5657type TFromLiteral < Variants extends string [ ] , Value extends TLiteralValue > =
5758 Variants extends [ ] ? [ `${Value } `] : TFromLiteralPush < Variants , Value >
@@ -64,14 +65,12 @@ function FromLiteral<Variants extends string[], Value extends TLiteralValue>(var
6465// ------------------------------------------------------------------
6566type TFromUnion < Variants extends string [ ] , Types extends TSchema [ ] , Result extends string [ ] = [ ] > =
6667 Types extends [ infer Left extends TSchema , ...infer Right extends TSchema [ ] ]
67- ? TFromUnion < Variants , Right , [ ...Result , ...TFromType < Variants , Left > ] >
68- : Result
68+ ? TFromUnion < Variants , Right , [ ...Result , ...TFromType < Variants , Left > ] >
69+ : Result
6970function FromUnion < Variants extends string [ ] , Types extends TSchema [ ] > ( variants : [ ...Variants ] , types : [ ...Types ] , result : string [ ] = [ ] ) : TFromUnion < Variants , Types > {
70- const [ left , ...right ] = types
71- return (
72- IsSchema ( left )
73- ? FromUnion ( variants , right , [ ...result , ...FromType ( variants , left ) ] )
74- : result
71+ return Guard . TakeLeft ( types , ( left , right ) =>
72+ FromUnion ( variants , right , [ ...result , ...FromType ( variants , left ) ] ) ,
73+ ( ) => result
7574 ) as never
7675}
7776// ------------------------------------------------------------------
@@ -106,23 +105,22 @@ function FromType<Variants extends string[], Type extends TSchema>(variants: [..
106105// ------------------------------------------------------------------
107106// FromSpan
108107// ------------------------------------------------------------------
109- type TDecodeFromSpan < Variants extends string [ ] , Types extends TSchema [ ] > =
108+ type TDecodeFromSpan < Variants extends string [ ] , Types extends TSchema [ ] > =
110109 Types extends [ infer Left extends TSchema , ...infer Right extends TSchema [ ] ]
111- ? TDecodeFromSpan < TFromType < Variants , Left > , Right >
112- : Variants
110+ ? TDecodeFromSpan < TFromType < Variants , Left > , Right >
111+ : Variants
113112function DecodeFromSpan < Variants extends string [ ] , Types extends TSchema [ ] > ( variants : [ ...Variants ] , types : [ ...Types ] ) : TDecodeFromSpan < Variants , Types > {
114- const [ left , ...right ] = types
115- return (
116- IsSchema ( left ) ? DecodeFromSpan ( FromType ( variants , left ) as string [ ] , right ) : variants
117- ) as never
113+ return Guard . TakeLeft ( types , ( left , right ) =>
114+ DecodeFromSpan ( FromType ( variants , left ) as string [ ] , right ) ,
115+ ( ) => variants ) as never
118116}
119117// ------------------------------------------------------------------
120118// VariantsToLiterals
121119// ------------------------------------------------------------------
122- type TVariantsToLiterals < Variants extends string [ ] , Result extends TSchema [ ] = [ ] > =
120+ type TVariantsToLiterals < Variants extends string [ ] , Result extends TSchema [ ] = [ ] > =
123121 Variants extends [ infer Left extends string , ...infer Right extends string [ ] ]
124- ? TVariantsToLiterals < Right , [ ...Result , TLiteral < Left > ] >
125- : Result
122+ ? TVariantsToLiterals < Right , [ ...Result , TLiteral < Left > ] >
123+ : Result
126124function VariantsToLiterals < Variants extends string [ ] > ( variants : [ ...Variants ] ) : TVariantsToLiterals < Variants > {
127125 return variants . map ( variant => Literal ( variant ) ) as never
128126}
@@ -167,7 +165,7 @@ function DecodeTypes<Types extends TSchema[]>(types: [...Types]): TDecodeTypes<T
167165 Guard . IsEqual ( types . length , 1 ) && IsLiteral ( types [ 0 ] ) ? types [ 0 ] :
168166 DecodeTypesAsUnion ( types )
169167 ) as never
170- }
168+ }
171169// deno-coverage-ignore-stop
172170// ------------------------------------------------------------------
173171// TemplateLiteralDecodeUnsafe
@@ -177,10 +175,10 @@ export type TTemplateLiteralDecodeUnsafe<Pattern extends string,
177175 Types extends TSchema [ ] = TParsePatternIntoTypes < Pattern > ,
178176 Result extends TSchema = (
179177 Types extends [ ] // Failed to Parse | IsTemplateLiteralPattern
180- ? TString
181- : TIsTemplateLiteralFinite < Types > extends true
182- ? TDecodeTypes < Types >
183- : TTemplateLiteral < Pattern >
178+ ? TString
179+ : TIsTemplateLiteralFinite < Types > extends true
180+ ? TDecodeTypes < Types >
181+ : TTemplateLiteral < Pattern >
184182 )
185183> = Result
186184/**
@@ -193,7 +191,7 @@ export function TemplateLiteralDecodeUnsafe<Pattern extends string>(pattern: Pat
193191 const types = ParsePatternIntoTypes ( pattern )
194192 const result = Guard . IsEqual ( types . length , 0 ) // Failed to Parse | IsTemplateLiteralPattern
195193 ? String ( ) // ... Pattern cannot be typed, so discard
196- : IsTemplateLiteralFinite ( types )
194+ : IsTemplateLiteralFinite ( types )
197195 ? DecodeTypes ( types )
198196 : TemplateLiteralCreate ( pattern )
199197 return result as never
0 commit comments