Skip to content
Open
15 changes: 10 additions & 5 deletions packages/quicktype-core/src/input/JSONSchemaInput.ts
Original file line number Diff line number Diff line change
Expand Up @@ -1139,14 +1139,19 @@ async function addTypesInSchema(
}

let additionalProperties = schema.additionalProperties;
// This is an incorrect hack to fix an issue with a Go->Schema generator:
// https://github.com/quicktype/quicktype/issues/976
if (
additionalProperties === undefined &&
(additionalProperties === undefined ||
additionalProperties === false) &&
typeof schema.patternProperties === "object" &&
hasOwnProperty(schema.patternProperties, ".*")
schema.patternProperties !== null &&
!Array.isArray(schema.patternProperties)
) {
additionalProperties = schema.patternProperties[".*"];
const patternSchemas = Object.values(schema.patternProperties);
if (patternSchemas.length === 1) {
additionalProperties = patternSchemas[0];
} else if (patternSchemas.length > 1) {
additionalProperties = { anyOf: patternSchemas };
}
}

// Handle unevaluatedProperties if additionalProperties is not defined
Expand Down
8 changes: 8 additions & 0 deletions test/inputs/schema/pattern-properties-value.1.fail.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
{
"materials": {
"steel": {
"roughness": "smooth",
"thickness": "not-a-number"
}
}
}
8 changes: 8 additions & 0 deletions test/inputs/schema/pattern-properties-value.1.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
{
"materials": {
"steel": {
"roughness": "smooth",
"thickness": 1.5
}
}
}
22 changes: 22 additions & 0 deletions test/inputs/schema/pattern-properties-value.schema
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
{
"type": "object",
"additionalProperties": false,
"properties": {
"materials": {
"type": "object",
"patternProperties": {
"^.*\\S.*$": {
"type": "object",
"additionalProperties": false,
"properties": {
"roughness": { "type": "string" },
"thickness": { "type": "number" }
},
"required": ["roughness", "thickness"]
}
},
"additionalProperties": false
}
},
"required": ["materials"]
}
1 change: 1 addition & 0 deletions test/languages.ts
Original file line number Diff line number Diff line change
Expand Up @@ -55,6 +55,7 @@ const skipsUntypedUnions = [
// schema whose fail sample relies on rejecting a mistyped map value.
const skipsMapValueValidation = [
"go-schema-pattern-properties.schema",
"pattern-properties-value.schema",
"unevaluated-properties.schema",
];

Expand Down
Loading