From 12a061c8ebab92c1a606a0f55d5ab1dc7fd96a34 Mon Sep 17 00:00:00 2001 From: ochafik Date: Sun, 9 Jun 2024 21:03:52 +0100 Subject: [PATCH] json: default additionalProperty to true --- common/json-schema-to-grammar.cpp | 2 +- examples/json_schema_to_grammar.py | 5 ++++- .../server/public/json-schema-to-grammar.mjs | 6 +++++- tests/test-json-schema-to-grammar.cpp | 20 +++++++++++++++++-- 4 files changed, 28 insertions(+), 5 deletions(-) diff --git a/common/json-schema-to-grammar.cpp b/common/json-schema-to-grammar.cpp index 737bae27c..58f3c2ae9 100644 --- a/common/json-schema-to-grammar.cpp +++ b/common/json-schema-to-grammar.cpp @@ -625,7 +625,7 @@ public: return _add_rule(rule_name, _build_object_rule( properties, required, name, - schema.contains("additionalProperties") ? schema["additionalProperties"] : json())); + schema.contains("additionalProperties") ? schema["additionalProperties"] : json::object())); } else if ((schema_type.is_null() || schema_type == "object") && schema.contains("allOf")) { std::unordered_set required; std::vector> properties; diff --git a/examples/json_schema_to_grammar.py b/examples/json_schema_to_grammar.py index 7d889c3fe..15631d53c 100755 --- a/examples/json_schema_to_grammar.py +++ b/examples/json_schema_to_grammar.py @@ -372,7 +372,10 @@ class SchemaConverter: ('additionalProperties' in schema and schema['additionalProperties'] is not True)): required = set(schema.get('required', [])) properties = list(schema.get('properties', {}).items()) - return self._add_rule(rule_name, self._build_object_rule(properties, required, name, schema.get('additionalProperties'))) + additional_properties = schema.get('additionalProperties', True) + if additional_properties is None: + additional_properties = True + return self._add_rule(rule_name, self._build_object_rule(properties, required, name, additional_properties)) elif schema_type in (None, 'object') and 'allOf' in schema: required = set() diff --git a/examples/server/public/json-schema-to-grammar.mjs b/examples/server/public/json-schema-to-grammar.mjs index cef11eab8..ded37c981 100644 --- a/examples/server/public/json-schema-to-grammar.mjs +++ b/examples/server/public/json-schema-to-grammar.mjs @@ -374,7 +374,11 @@ export class SchemaConverter { ('additionalProperties' in schema && schema.additionalProperties !== true))) { const required = new Set(schema.required || []); const properties = Object.entries(schema.properties ?? {}); - return this._addRule(ruleName, this._buildObjectRule(properties, required, name, schema.additionalProperties)); + let additionalProperties = schema.additionalProperties; + if (additionalProperties === undefined) { + additionalProperties = true; + } + return this._addRule(ruleName, this._buildObjectRule(properties, required, name, additionalProperties)); } else if ((schemaType === undefined || schemaType === 'object') && 'allOf' in schema) { const required = new Set(); const properties = []; diff --git a/tests/test-json-schema-to-grammar.cpp b/tests/test-json-schema-to-grammar.cpp index 052c08073..780e1932a 100755 --- a/tests/test-json-schema-to-grammar.cpp +++ b/tests/test-json-schema-to-grammar.cpp @@ -751,15 +751,31 @@ static void test_all(const std::string & lang, std::function