Description
Current Behavior:
The diffing mechanism currently handles allOf
/anyOf
and oneOf
differently within composed schemas:
-
allOf
/anyOf
: These schemas are recursively resolved and their properties are merged into the parent schema before the main diffing occurs. This happens inSchemaDiff#resolveComposedSchema
, where properties fromallOf
/anyOf
subschemas are added to the parent usingSchemaDiff#addSchema
. The originalallOf
/anyOf
structure is effectively flattened. -
oneOf
: These schemas are not merged beforehand. Instead, theComposedSchemaDiffResult#diff
method performs a structural comparison of theoneOf
lists between the old and new schemas. It identifies added, removed, or changedoneOf
options, storing the results in aChangedOneOfSchema
object which is then attached to theChangedSchema
.
Suggested Behavior:
This difference in processing leads to an inconsistency. While the merging for allOf
/anyOf
simplifies property comparison later, it loses the structural information about changes within the allOf
/anyOf
lists. Conversely, oneOf
retains this structural information because it's crucial for understanding changes in available options.
Consider unifying the approach. Perhaps allOf
/anyOf
could also be compared structurally, similar to oneOf
, to provide a more consistent and potentially more informative diff result regarding the composition itself, rather than just the flattened outcome. This would allow tracking additions, removals, or modifications within allOf
/anyOf
lists directly.