@@ -105,16 +105,22 @@ export function resolveEnumZodSchemaNames(resolver: SchemaResolver) {
105105 nameResolutionIterationsCounter ++ ;
106106 }
107107
108+ if ( ! allEnumZodSchemaNamesAreUnique ( resolver ) ) {
109+ const enumsDuplicateData = resolver . enumZodSchemaData . filter ( ( enumData ) => ! isUnique ( resolver , enumData ) ) ;
110+ enumsDuplicateData . forEach ( ( enumData ) => {
111+ enumData . zodSchemaName = enumData . meta . zodSchemaNameSegments [ 0 ]
112+ . map ( ( name ) => sanitizeName ( capitalize ( name ) ) )
113+ . join ( "" ) ;
114+ } ) ;
115+ }
116+
108117 if ( ! allEnumZodSchemaNamesAreUnique ( resolver ) ) {
109118 throw new Error ( "Failed to resolve unique names for enum zod schemas" ) ;
110119 }
111120}
112121
113122function allEnumZodSchemaNamesAreUnique ( resolver : SchemaResolver ) {
114- return resolver . enumZodSchemaData . every (
115- ( enumData ) =>
116- resolver . enumZodSchemaData . filter ( ( { zodSchemaName } ) => enumData . zodSchemaName === zodSchemaName ) . length == 1 ,
117- ) ;
123+ return resolver . enumZodSchemaData . every ( ( enumData ) => isUnique ( resolver , enumData ) ) ;
118124}
119125
120126function additionalResolveEnumZodSchemaName ( resolver : SchemaResolver , index : number ) {
@@ -136,12 +142,19 @@ function suffixWithPreviousSegmentName(enumsData: EnumZodSchemaData[], index = 2
136142 . map ( ( arr ) => arr [ arr . length - index ] )
137143 . filter ( Boolean ) ;
138144 if ( precedingLastFragments . length === 1 ) {
139- data . zodSchemaName = [ capitalize ( precedingLastFragments [ 0 ] ) , data . zodSchemaName ] . filter ( Boolean ) . join ( "" ) ;
145+ const zodSchemaName = [ sanitizeName ( capitalize ( precedingLastFragments [ 0 ] ) ) , data . zodSchemaName ]
146+ . filter ( Boolean )
147+ . join ( "" ) ;
148+ data . zodSchemaName = zodSchemaName ;
140149 } else {
141150 const secondLastFragmentSplit = getMostCommonAdjacentCombinationSplit ( precedingLastFragments ) ;
142- data . zodSchemaName = [ secondLastFragmentSplit ? capitalize ( secondLastFragmentSplit ) : "" , data . zodSchemaName ]
151+ const zodSchemaName = [
152+ secondLastFragmentSplit ? sanitizeName ( capitalize ( secondLastFragmentSplit ) ) : "" ,
153+ data . zodSchemaName ,
154+ ]
143155 . filter ( Boolean )
144156 . join ( "" ) ;
157+ data . zodSchemaName = zodSchemaName ;
145158 }
146159 } ) ;
147160}
@@ -152,3 +165,13 @@ export function resolveEnumZodSchemaTags(resolver: SchemaResolver) {
152165 enumData . tag = tags . length === 1 ? tags [ 0 ] : resolver . options . defaultTag ;
153166 } ) ;
154167}
168+
169+ function isUnique ( resolver : SchemaResolver , enumData : EnumZodSchemaData ) {
170+ return (
171+ resolver . enumZodSchemaData . filter ( ( { zodSchemaName } ) => enumData . zodSchemaName === zodSchemaName ) . length === 1
172+ ) ;
173+ }
174+
175+ function sanitizeName ( name : string ) {
176+ return name . replace ( / ( D t o | D T O | R e s p o n s e | R e q u e s t ) / g, "" ) ;
177+ }
0 commit comments