@@ -434,6 +434,7 @@ function transformSchemaObjectCore(schemaObject: SchemaObject, options: Transfor
434
434
435
435
if (
436
436
( "properties" in schemaObject && schemaObject . properties && Object . keys ( schemaObject . properties ) . length ) ||
437
+ ( "patternProperties" in schemaObject && schemaObject . patternProperties && Object . keys ( schemaObject . patternProperties ) . length ) ||
437
438
( "additionalProperties" in schemaObject && schemaObject . additionalProperties ) ||
438
439
( "$defs" in schemaObject && schemaObject . $defs )
439
440
) {
@@ -526,13 +527,23 @@ function transformSchemaObjectCore(schemaObject: SchemaObject, options: Transfor
526
527
) ;
527
528
}
528
529
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
+
531
534
const hasExplicitAdditionalProperties =
532
535
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
+
536
547
return tsIntersection ( [
537
548
...( coreObjectType . length ? [ ts . factory . createTypeLiteralNode ( coreObjectType ) ] : [ ] ) ,
538
549
ts . factory . createTypeLiteralNode ( [
0 commit comments