Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

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

Merged
merged 17 commits into from
Jul 14, 2022

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 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.

None yet

2 participants