Skip to content

[Enhancement] Improve support for circular $ref pointers#154

Merged
sserrata merged 17 commits intomainfrom
improved-resolver
Jul 14, 2022
Merged

[Enhancement] Improve support for circular $ref pointers#154
sserrata merged 17 commits intomainfrom
improved-resolver

Conversation

@sserrata
Copy link
Member

@sserrata sserrata commented Jul 11, 2022

Description

This PR introduces a new loadAndResolve() helper for resolving circular $ref pointers while ensuring downstream compatibility with supporting libraries can require ability to serialize the OpenAPI object.

Additionally, this PR attempts to extend support for oneOf, anyOf and allOf.

Motivation and Context

Circular $ref pointer support is required for a number of our product APIs and could be leveraged by others in the OpenAPI community.

How Has This Been Tested?

Tested with Petstore and SearchManager API specs.

Additional changes

Previously, the createAnyOneOf module was rendering a details component. This PR uses createRows() to eliminate the unnecessary "Schema" dropdown.

TODO

  • Improve support for Arrays
  • Add support for discriminators // Will open separate issue for this as it will require more research
  • Ensure "circular()" label is applied in all cases // Will open separate issue to resolve corner cases

@github-actions
Copy link

github-actions bot commented Jul 11, 2022

Size Change: +196 kB (+6%) 🔍

Total Size: 3.58 MB

Filename Size Change
demo/build/assets/js/06e5f0f0.********.js 29.2 kB -540 B (-2%)
demo/build/assets/js/081bfb0d.********.js 9.65 kB -262 B (-3%)
demo/build/assets/js/112df51d.********.js 25.7 kB +5.38 kB (+26%) 🚨
demo/build/assets/js/1676ff52.********.js 10 kB -262 B (-3%)
demo/build/assets/js/16ed3e0d.********.js 25.2 kB +5.38 kB (+27%) 🚨
demo/build/assets/js/1e71f858.********.js 25.4 kB +8 kB (+46%) 🚨
demo/build/assets/js/1f3711ab.********.js 25.8 kB +7.87 kB (+44%) 🚨
demo/build/assets/js/1f818248.********.js 11.5 kB -512 B (-4%)
demo/build/assets/js/21b83554.********.js 9.92 kB -234 B (-2%)
demo/build/assets/js/25b7fcf3.********.js 21.4 kB +5.18 kB (+32%) 🚨
demo/build/assets/js/2610c6ee.********.js 17.3 kB -658 B (-4%)
demo/build/assets/js/2a3d8b7d.********.js 11.6 kB -176 B (-1%)
demo/build/assets/js/2b60538e.********.js 21.3 kB +5.25 kB (+33%) 🚨
demo/build/assets/js/2c860537.********.js 6.5 kB -540 B (-8%)
demo/build/assets/js/2da0bfe8.********.js 25.9 kB +7.97 kB (+45%) 🚨
demo/build/assets/js/2ee3fbbb.********.js 11 kB -262 B (-2%)
demo/build/assets/js/36675a4b.********.js 32 kB +9.61 kB (+43%) 🚨
demo/build/assets/js/374f9103.********.js 15.1 kB -474 B (-3%)
demo/build/assets/js/4851c287.********.js 11 kB -262 B (-2%)
demo/build/assets/js/4964e910.********.js 24.7 kB +7.9 kB (+47%) 🚨
demo/build/assets/js/49d625b5.********.js 25.3 kB +7.9 kB (+45%) 🚨
demo/build/assets/js/4bdd3fbe.********.js 14.9 kB -474 B (-3%)
demo/build/assets/js/52efb675.********.js 9.96 kB -262 B (-3%)
demo/build/assets/js/55b55784.********.js 8.64 kB -234 B (-3%)
demo/build/assets/js/58ff8b1e.********.js 20.5 kB -234 B (-1%)
demo/build/assets/js/5fb917be.********.js 2.69 kB +68 B (+3%)
demo/build/assets/js/6102b0bc.********.js 32.1 kB +9.61 kB (+43%) 🚨
demo/build/assets/js/64ad353b.********.js 26.2 kB +5.38 kB (+26%) 🚨
demo/build/assets/js/6b63c616.********.js 26.2 kB +5.53 kB (+27%) 🚨
demo/build/assets/js/6dbe9da1.********.js 25.3 kB +5.53 kB (+28%) 🚨
demo/build/assets/js/6eec44b8.********.js 8.7 kB -234 B (-3%)
demo/build/assets/js/71f1585f.********.js 11.1 kB -262 B (-2%)
demo/build/assets/js/7633a546.********.js 9.84 kB -262 B (-3%)
demo/build/assets/js/7933a256.********.js 25.8 kB +5.53 kB (+27%) 🚨
demo/build/assets/js/7a7d82e8.********.js 25.3 kB +8 kB (+46%) 🚨
demo/build/assets/js/835a9617.********.js 11.1 kB -262 B (-2%)
demo/build/assets/js/840731c0.********.js 10.4 kB -262 B (-2%)
demo/build/assets/js/8463bcfe.********.js 21.5 kB +5.25 kB (+32%) 🚨
demo/build/assets/js/85ec4403.********.js 4.02 kB -540 B (-12%) 👏
demo/build/assets/js/892ce721.********.js 26.3 kB +5.53 kB (+27%) 🚨
demo/build/assets/js/8ab9b16e.********.js 9.47 kB -262 B (-3%)
demo/build/assets/js/935b44fb.********.js 17.4 kB -658 B (-4%)
demo/build/assets/js/97810f3c.********.js 24.8 kB +8 kB (+48%) 🚨
demo/build/assets/js/9c58e5d3.********.js 21.9 kB +5.25 kB (+32%) 🚨
demo/build/assets/js/9e2a7edc.********.js 32 kB +9.42 kB (+42%) 🚨
demo/build/assets/js/a6cd895f.********.js 20.4 kB -234 B (-1%)
demo/build/assets/js/a6f84189.********.js 11.7 kB -176 B (-1%)
demo/build/assets/js/a728d93a.********.js 9.59 kB -262 B (-3%)
demo/build/assets/js/ab09fd5c.********.js 20.5 kB -234 B (-1%)
demo/build/assets/js/b8b62e90.********.js 25.2 kB +5.53 kB (+28%) 🚨
demo/build/assets/js/bceea4ca.********.js 9.85 kB -234 B (-2%)
demo/build/assets/js/bf9a5101.********.js 25.7 kB +7.97 kB (+45%) 🚨
demo/build/assets/js/c2838c41.********.js 25.3 kB +8 kB (+46%) 🚨
demo/build/assets/js/c2b8341d.********.js 25.3 kB +7.9 kB (+45%) 🚨
demo/build/assets/js/c5c41c27.********.js 25.4 kB +8 kB (+46%) 🚨
demo/build/assets/js/common.********.js 128 kB +3.44 kB (+3%)
demo/build/assets/js/d69e68dd.********.js 10.2 kB -262 B (-3%)
demo/build/assets/js/d90c1c35.********.js 10.9 kB -262 B (-2%)
demo/build/assets/js/dbf42779.********.js 17.5 kB -658 B (-4%)
demo/build/assets/js/dd696920.********.js 24.6 kB +8 kB (+48%) 🚨
demo/build/assets/js/e165a18a.********.js 11.1 kB -262 B (-2%)
demo/build/assets/js/e53a20a4.********.js 11.7 kB -176 B (-1%)
demo/build/assets/js/e5e5340c.********.js 2.62 kB +68 B (+3%)
demo/build/assets/js/e65a1271.********.js 15 kB -474 B (-3%)
demo/build/assets/js/e6f78ab2.********.js 8.6 kB -234 B (-3%)
demo/build/assets/js/eff95040.********.js 25.7 kB +5.53 kB (+27%) 🚨
demo/build/assets/js/f30e634b.********.js 22 kB +5.18 kB (+31%) 🚨
demo/build/assets/js/fcb807fc.********.js 10.3 kB -262 B (-2%)
demo/build/assets/js/fdd24af5.********.js 9.74 kB -234 B (-2%)
demo/build/assets/js/ffc99614.********.js 22.1 kB +5.25 kB (+31%) 🚨
ℹ️ View Unchanged
Filename Size
demo/.docusaurus/globalData.json 20.2 kB
demo/build/assets/css/styles.********.css 94.9 kB
demo/build/assets/js/05f64ae1.********.js 2.97 kB
demo/build/assets/js/06b64fc1.********.js 583 B
demo/build/assets/js/09e07b87.********.js 3.16 kB
demo/build/assets/js/14eb3368.********.js 9.5 kB
demo/build/assets/js/1639936b.********.js 4.35 kB
demo/build/assets/js/16577668.********.js 395 B
demo/build/assets/js/18c41134.********.js 14.5 kB
demo/build/assets/js/1be78505.********.js 11.4 kB
demo/build/assets/js/1e4232ab.********.js 3.27 kB
demo/build/assets/js/326c3861.********.js 9.89 kB
demo/build/assets/js/39d00f16.********.js 9.75 kB
demo/build/assets/js/46afcded.********.js 11 kB
demo/build/assets/js/46e5c6ac.********.js 8 kB
demo/build/assets/js/47abaca6.********.js 3.06 kB
demo/build/assets/js/4c5e977b.********.js 31.3 kB
demo/build/assets/js/5103.********.js 1.37 MB
demo/build/assets/js/533a09ca.********.js 2.61 kB
demo/build/assets/js/56717cba.********.js 3.12 kB
demo/build/assets/js/5c868d36.********.js 3.36 kB
demo/build/assets/js/822bd8ab.********.js 2.99 kB
demo/build/assets/js/8287.********.js 1.09 kB
demo/build/assets/js/85d3c400.********.js 3.06 kB
demo/build/assets/js/86c346b0.********.js 546 B
demo/build/assets/js/881db345.********.js 402 B
demo/build/assets/js/8d4e78cd.********.js 2.97 kB
demo/build/assets/js/8f441c78.********.js 9.85 kB
demo/build/assets/js/93304a97.********.js 4.47 kB
demo/build/assets/js/935f2afb.********.js 35.2 kB
demo/build/assets/js/a5491aaa.********.js 400 B
demo/build/assets/js/bead4b8e.********.js 3.21 kB
demo/build/assets/js/bf271e74.********.js 401 B
demo/build/assets/js/c7ded1cb.********.js 3.12 kB
demo/build/assets/js/d63c7029.********.js 3.07 kB
demo/build/assets/js/dff1c289.********.js 4 kB
demo/build/assets/js/e2ce9793.********.js 434 B
demo/build/assets/js/e44a2883.********.js 5.33 kB
demo/build/assets/js/e8b309fb.********.js 585 B
demo/build/assets/js/ecc39b49.********.js 180 B
demo/build/assets/js/f55d3e7a.********.js 2.83 kB
demo/build/assets/js/f8409a7e.********.js 32.5 kB
demo/build/assets/js/main.********.js 409 kB
demo/build/assets/js/runtime~main.********.js 9.01 kB
demo/build/index.html 80.1 kB

compressed-size-action

@github-actions
Copy link

github-actions bot commented Jul 11, 2022

Visit the preview URL for this PR (updated for commit 70b31c4):

https://docusaurus-openapi-36b86--pr154-uxbte6ya.web.app

(expires Fri, 12 Aug 2022 15:12:27 GMT)

🔥 via Firebase Hosting GitHub Action 🌎

@sserrata sserrata requested review from blindaa121 and csestito July 11, 2022 21:57
@sserrata sserrata added DO NOT MERGE enhancement New feature or request labels Jul 11, 2022
@sserrata
Copy link
Member Author

Tested with Petstore, CWPP and CSPM APIs. CWPP exposed some gaps in error handling that I addressed with the following commits:

70b31c4

69e5a50

@sserrata sserrata removed the request for review from csestito July 13, 2022 19:26
Copy link
Collaborator

@blindaa121 blindaa121 left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Circular $ref pointers have been resolved. Thanks @sserrata! 🚀

@sserrata
Copy link
Member Author

Will open a new PR to address remaining gaps in schema parsing in createSchemaDetails.

@sserrata sserrata merged commit fde4866 into main Jul 14, 2022
@sserrata sserrata deleted the improved-resolver branch July 14, 2022 18:16
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

DO NOT MERGE enhancement New feature or request

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants