@@ -1047,16 +1047,24 @@ function makeSync<T>(
10471047 ast : SchemaAST . AST ,
10481048 options ?: SchemaAST . ParseOptions
10491049) : ( input : unknown , options ?: SchemaAST . ParseOptions ) => T {
1050- let entry : CompilerRegistry . Entry | undefined
1050+ let run : ( ( input : unknown , options ?: SchemaAST . ParseOptions ) => T ) | undefined
1051+ return ( input , overrideOptions ) =>
1052+ ( run ??= makeSyncEntry < T > ( CompilerRegistry . resolve ( ast ) , options ) ) ( input , overrideOptions )
1053+ }
1054+
1055+ function makeSyncEntry < T > (
1056+ entry : CompilerRegistry . Entry ,
1057+ options ?: SchemaAST . ParseOptions
1058+ ) : ( input : unknown , options ?: SchemaAST . ParseOptions ) => T {
1059+ const validate = entry . validate
10511060 let detailed : ( ( input : unknown , options ?: SchemaAST . ParseOptions ) => T ) | undefined
1052- let parser : Parser | undefined
1053- return ( input , overrideOptions ) => {
1054- entry ??= CompilerRegistry . resolve ( ast )
1055- const parseOptions = options === undefined
1056- ? overrideOptions ?? SchemaAST . defaultParseOptions
1057- : mergeParseOptions ( options , overrideOptions )
1058- const validate = entry . validate
1059- if ( validate !== undefined && input !== InternalParser . missing ) {
1061+ const run = validate === undefined
1062+ ? ( input : unknown , parseOptions = SchemaAST . defaultParseOptions ) : T =>
1063+ ( detailed ??= makeDetailedSync < T > ( entry ) ) ( input , parseOptions )
1064+ : ( input : unknown , parseOptions = SchemaAST . defaultParseOptions ) : T => {
1065+ if ( input === InternalParser . missing ) {
1066+ return ( detailed ??= makeDetailedSync < T > ( entry ) ) ( input , parseOptions )
1067+ }
10601068 let output : unknown
10611069 try {
10621070 output = validate ( input , parseOptions )
@@ -1065,13 +1073,17 @@ function makeSync<T>(
10651073 throw error
10661074 }
10671075 if ( output !== CompilerRegistry . invalid ) return output as T
1076+ return ( detailed ??= makeDetailedSync < T > ( entry ) ) ( input , parseOptions )
10681077 }
1069- if ( entry . source === undefined ) {
1070- const result = ( parser ??= entry . decodeEffect ) ( input , parseOptions )
1071- return runSync ( parserResult < T , never > ( result , input ) , "Sync adapter can only throw schema issues" )
1072- }
1073- return ( detailed ??= asSync ( runWithCompiler < T , never > ( ( ) => entry ! . decodeEffect , ast ) ) ) ( input , parseOptions )
1074- }
1078+ return options === undefined
1079+ ? run
1080+ : ( input , overrideOptions ) => run ( input , mergeParseOptions ( options , overrideOptions ) )
1081+ }
1082+
1083+ function makeDetailedSync < T > (
1084+ entry : CompilerRegistry . Entry
1085+ ) : ( input : unknown , options ?: SchemaAST . ParseOptions ) => T {
1086+ return asSync ( runWithCompiler < T , never > ( ( ) => entry . decodeEffect , entry . ast ) )
10751087}
10761088
10771089function asSync < T , E > (
0 commit comments