@@ -434,6 +434,9 @@ function transformSchemaObjectCore(schemaObject: SchemaObject, options: Transfor
434434
435435 if (
436436 ( "properties" in schemaObject && schemaObject . properties && Object . keys ( schemaObject . properties ) . length ) ||
437+ ( "patternProperties" in schemaObject &&
438+ schemaObject . patternProperties &&
439+ Object . keys ( schemaObject . patternProperties ) . length ) ||
437440 ( "additionalProperties" in schemaObject && schemaObject . additionalProperties ) ||
438441 ( "$defs" in schemaObject && schemaObject . $defs )
439442 ) {
@@ -526,13 +529,23 @@ function transformSchemaObjectCore(schemaObject: SchemaObject, options: Transfor
526529 ) ;
527530 }
528531
529- // additionalProperties
530- if ( schemaObject . additionalProperties || options . ctx . additionalProperties ) {
532+ // additionalProperties / patternProperties
533+ if ( schemaObject . additionalProperties || options . ctx . additionalProperties || schemaObject . patternProperties ) {
534+ const addlTypes = [ ] ;
535+
531536 const hasExplicitAdditionalProperties =
532537 typeof schemaObject . additionalProperties === "object" && Object . keys ( schemaObject . additionalProperties ) . length ;
533- const addlType = hasExplicitAdditionalProperties
534- ? transformSchemaObject ( schemaObject . additionalProperties as SchemaObject , options )
535- : UNKNOWN ;
538+
539+ if ( hasExplicitAdditionalProperties ) {
540+ addlTypes . push ( transformSchemaObject ( schemaObject . additionalProperties as SchemaObject , options ) ) ;
541+ }
542+
543+ for ( const [ _ , v ] of getEntries ( schemaObject . patternProperties ?? { } , options . ctx ) ) {
544+ addlTypes . push ( transformSchemaObject ( v , options ) ) ;
545+ }
546+
547+ const addlType = addlTypes ? tsUnion ( addlTypes ) : UNKNOWN ;
548+
536549 return tsIntersection ( [
537550 ...( coreObjectType . length ? [ ts . factory . createTypeLiteralNode ( coreObjectType ) ] : [ ] ) ,
538551 ts . factory . createTypeLiteralNode ( [
0 commit comments