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