@@ -434,6 +434,7 @@ function transformSchemaObjectCore(schemaObject: SchemaObject, options: Transfor
434434
435435 if (
436436 ( "properties" in schemaObject && schemaObject . properties && Object . keys ( schemaObject . properties ) . length ) ||
437+ ( "patternProperties" in schemaObject && schemaObject . patternProperties && Object . keys ( schemaObject . patternProperties ) . length ) ||
437438 ( "additionalProperties" in schemaObject && schemaObject . additionalProperties ) ||
438439 ( "$defs" in schemaObject && schemaObject . $defs )
439440 ) {
@@ -526,13 +527,23 @@ function transformSchemaObjectCore(schemaObject: SchemaObject, options: Transfor
526527 ) ;
527528 }
528529
529- // additionalProperties
530- if ( schemaObject . additionalProperties || options . ctx . additionalProperties ) {
530+ // additionalProperties / patternProperties
531+ if ( schemaObject . additionalProperties || options . ctx . additionalProperties || schemaObject . patternProperties ) {
532+ const addlTypes = [ ] ;
533+
531534 const hasExplicitAdditionalProperties =
532535 typeof schemaObject . additionalProperties === "object" && Object . keys ( schemaObject . additionalProperties ) . length ;
533- const addlType = hasExplicitAdditionalProperties
534- ? transformSchemaObject ( schemaObject . additionalProperties as SchemaObject , options )
535- : UNKNOWN ;
536+
537+ if ( hasExplicitAdditionalProperties ) {
538+ addlTypes . push ( transformSchemaObject ( schemaObject . additionalProperties as SchemaObject , options ) )
539+ }
540+
541+ for ( const [ _ , v ] of getEntries ( schemaObject . patternProperties ?? { } , options . ctx ) ) {
542+ addlTypes . push ( transformSchemaObject ( v , options ) )
543+ }
544+
545+ const addlType = addlTypes ? tsUnion ( addlTypes ) : UNKNOWN ;
546+
536547 return tsIntersection ( [
537548 ...( coreObjectType . length ? [ ts . factory . createTypeLiteralNode ( coreObjectType ) ] : [ ] ) ,
538549 ts . factory . createTypeLiteralNode ( [
0 commit comments