diff --git a/package-lock.json b/package-lock.json index 679dd133f8d..d1d7461e001 100644 --- a/package-lock.json +++ b/package-lock.json @@ -41,7 +41,7 @@ "reselect": "^4.1.5", "serialize-error": "^8.1.0", "sha.js": "^2.4.11", - "swagger-client": "^3.18.5", + "swagger-client": "=3.19.0-alpha.4", "url-parse": "^1.5.8", "xml": "=1.0.1", "xml-but-prettier": "^1.0.1", @@ -69,7 +69,7 @@ "autoprefixer": "^10.4.12", "babel-loader": "^8.2.3", "babel-plugin-lodash": "=3.3.4", - "babel-plugin-module-resolver": "=4.1.0", + "babel-plugin-module-resolver": "=5.0.0", "babel-plugin-transform-react-remove-prop-types": "=0.4.24", "body-parser": "^1.19.0", "buffer": "^6.0.3", @@ -6395,19 +6395,59 @@ } }, "node_modules/babel-plugin-module-resolver": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/babel-plugin-module-resolver/-/babel-plugin-module-resolver-4.1.0.tgz", - "integrity": "sha512-MlX10UDheRr3lb3P0WcaIdtCSRlxdQsB1sBqL7W0raF070bGl1HQQq5K3T2vf2XAYie+ww+5AKC/WrkjRO2knA==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/babel-plugin-module-resolver/-/babel-plugin-module-resolver-5.0.0.tgz", + "integrity": "sha512-g0u+/ChLSJ5+PzYwLwP8Rp8Rcfowz58TJNCe+L/ui4rpzE/mg//JVX0EWBUYoxaextqnwuGHzfGp2hh0PPV25Q==", "dev": true, "dependencies": { - "find-babel-config": "^1.2.0", - "glob": "^7.1.6", + "find-babel-config": "^2.0.0", + "glob": "^8.0.3", "pkg-up": "^3.1.0", - "reselect": "^4.0.0", - "resolve": "^1.13.1" + "reselect": "^4.1.7", + "resolve": "^1.22.1" }, "engines": { - "node": ">= 8.0.0" + "node": ">= 16" + } + }, + "node_modules/babel-plugin-module-resolver/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/babel-plugin-module-resolver/node_modules/glob": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz", + "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==", + "dev": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^5.0.1", + "once": "^1.3.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/babel-plugin-module-resolver/node_modules/minimatch": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", + "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", + "dev": true, + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=10" } }, "node_modules/babel-plugin-polyfill-corejs2": { @@ -8921,9 +8961,9 @@ "dev": true }, "node_modules/deepmerge": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.2.2.tgz", - "integrity": "sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==", + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.0.tgz", + "integrity": "sha512-z2wJZXrmeHdvYJp/Ux55wIjqo81G5Bp4c+oELTW+7ar6SogWHajt5a9gO3s3IDaGSAXjDk0vlQKN3rms8ab3og==", "engines": { "node": ">=0.10.0" } @@ -11195,25 +11235,25 @@ } }, "node_modules/find-babel-config": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/find-babel-config/-/find-babel-config-1.2.0.tgz", - "integrity": "sha512-jB2CHJeqy6a820ssiqwrKMeyC6nNdmrcgkKWJWmpoxpE8RKciYJXCcXRq1h2AzCo5I5BJeN2tkGEO3hLTuePRA==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/find-babel-config/-/find-babel-config-2.0.0.tgz", + "integrity": "sha512-dOKT7jvF3hGzlW60Gc3ONox/0rRZ/tz7WCil0bqA1In/3I8f1BctpXahRnEKDySZqci7u+dqq93sZST9fOJpFw==", "dev": true, "dependencies": { - "json5": "^0.5.1", - "path-exists": "^3.0.0" + "json5": "^2.1.1", + "path-exists": "^4.0.0" }, "engines": { - "node": ">=4.0.0" + "node": ">=16.0.0" } }, - "node_modules/find-babel-config/node_modules/json5": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-0.5.1.tgz", - "integrity": "sha1-Hq3nrMASA0rYTiOWdn6tn6VJWCE=", + "node_modules/find-babel-config/node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", "dev": true, - "bin": { - "json5": "lib/cli.js" + "engines": { + "node": ">=8" } }, "node_modules/find-cache-dir": { @@ -11377,9 +11417,9 @@ "dev": true }, "node_modules/follow-redirects": { - "version": "1.14.9", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.14.9.tgz", - "integrity": "sha512-MQDfihBQYMcyy5dhRDJUHcw7lb2Pv/TuE6xP1vyraLukNDHKbDxDNaOE3NbCAdKQApno+GPRyo1YAp89yCjK4w==", + "version": "1.15.2", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.2.tgz", + "integrity": "sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA==", "dev": true, "funding": [ { @@ -11433,12 +11473,12 @@ } }, "node_modules/formdata-node": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/formdata-node/-/formdata-node-4.3.2.tgz", - "integrity": "sha512-k7lYJyzDOSL6h917favP8j1L0/wNyylzU+x+1w4p5haGVHNlP58dbpdJhiCUsDbWsa9HwEtLp89obQgXl2e0qg==", + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/formdata-node/-/formdata-node-4.4.1.tgz", + "integrity": "sha512-0iirZp3uVDjVGt9p49aTaqjk84TrglENEDuqfdlZQ1roC9CWlPk6Avf8EEnZNcAqPonwkG35x4n3ww/1THYAeQ==", "dependencies": { "node-domexception": "1.0.0", - "web-streams-polyfill": "4.0.0-beta.1" + "web-streams-polyfill": "4.0.0-beta.3" }, "engines": { "node": ">= 12.20" @@ -12471,9 +12511,9 @@ } }, "node_modules/http-cache-semantics": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz", - "integrity": "sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ==", + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz", + "integrity": "sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==", "dev": true }, "node_modules/http-deceiver": { @@ -13373,9 +13413,9 @@ } }, "node_modules/is-core-module": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.8.0.tgz", - "integrity": "sha512-vd15qHsaqrRL7dtH6QNuy0ndJmRDrS9HAM1CAiSifNUFv4x1a0CCVsj18hJ1mShxIG6T2i1sO78MkP56r0nYRw==", + "version": "2.11.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.11.0.tgz", + "integrity": "sha512-RRjxlvLDkD1YJwDbroBHMb+cukurkDWNyHx7D3oNB5x9rb5ogcksMC5wHCadcXoo67gVr/+3GFySh3134zi6rw==", "dev": true, "dependencies": { "has": "^1.0.3" @@ -18143,13 +18183,10 @@ "dev": true }, "node_modules/json5": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.0.tgz", - "integrity": "sha512-f+8cldu7X/y7RAJurMEJmdoKXGB/X550w2Nr3tTbezL6RwEE/iMcm+tZnXeoZtKuOq6ft8+CqzEkrIgx1fPoQA==", + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", "dev": true, - "dependencies": { - "minimist": "^1.2.5" - }, "bin": { "json5": "lib/cli.js" }, @@ -18911,9 +18948,9 @@ } }, "node_modules/loader-utils/node_modules/json5": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", - "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz", + "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==", "dev": true, "dependencies": { "minimist": "^1.2.0" @@ -23580,7 +23617,7 @@ "node_modules/querystring": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz", - "integrity": "sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA=", + "integrity": "sha512-X/xY82scca2tau62i9mDyU9K+I+djTMUsvwf7xnUX5GLvVzgJybOJf4Y6o9Zx3oJK/LSXg5tTZBjwzqVPaPO2g==", "deprecated": "The querystring API is considered Legacy. new code should use the URLSearchParams API instead.", "engines": { "node": ">=0.4.x" @@ -25107,18 +25144,22 @@ "integrity": "sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8=" }, "node_modules/reselect": { - "version": "4.1.5", - "resolved": "https://registry.npmjs.org/reselect/-/reselect-4.1.5.tgz", - "integrity": "sha512-uVdlz8J7OO+ASpBYoz1Zypgx0KasCY20H+N8JD13oUMtPvSHQuscrHop4KbXrbsBcdB9Ds7lVK7eRkBIfO43vQ==" + "version": "4.1.7", + "resolved": "https://registry.npmjs.org/reselect/-/reselect-4.1.7.tgz", + "integrity": "sha512-Zu1xbUt3/OPwsXL46hvOOoQrap2azE7ZQbokq61BQfiXvhewsKDwhMeZjTX9sX0nvw1t/U5Audyn1I9P/m9z0A==" }, "node_modules/resolve": { - "version": "1.20.0", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.20.0.tgz", - "integrity": "sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A==", + "version": "1.22.1", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz", + "integrity": "sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==", "dev": true, "dependencies": { - "is-core-module": "^2.2.0", - "path-parse": "^1.0.6" + "is-core-module": "^2.9.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -26831,6 +26872,18 @@ "node": ">=8" } }, + "node_modules/supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/svgo": { "version": "2.8.0", "resolved": "https://registry.npmjs.org/svgo/-/svgo-2.8.0.tgz", @@ -26862,14 +26915,24 @@ } }, "node_modules/swagger-client": { - "version": "3.18.5", - "resolved": "https://registry.npmjs.org/swagger-client/-/swagger-client-3.18.5.tgz", - "integrity": "sha512-c0txGDtfQTJnaIBaEKCwtRNcUaaAfj+RXI4QVV9p3WW+AUCQqp4naCjaDNNsOfMkE4ySyhnblbL+jGqAVC7snw==", + "version": "3.19.0-alpha.4", + "resolved": "https://registry.npmjs.org/swagger-client/-/swagger-client-3.19.0-alpha.4.tgz", + "integrity": "sha512-Wfi/DHCRNQ2+hBqW/nUptdqU6rDIqa1bzZu6lN50qL6sstEnR0OXPowtVpAW8jVVUF2BzEUMCkyZtQKKTeJO6Q==", + "bundleDependencies": [ + "@swagger-api/apidom-core", + "@swagger-api/apidom-reference", + "@swagger-api/apidom-ns-openapi-3-1", + "@swagger-api/apidom-json-pointer" + ], "dependencies": { "@babel/runtime-corejs3": "^7.11.2", + "@swagger-api/apidom-core": "*", + "@swagger-api/apidom-json-pointer": "*", + "@swagger-api/apidom-ns-openapi-3-1": "*", + "@swagger-api/apidom-reference": "*", "cookie": "~0.5.0", "cross-fetch": "^3.1.5", - "deepmerge": "~4.2.2", + "deepmerge": "~4.3.0", "fast-json-patch": "^3.0.0-1", "form-data-encoder": "^1.4.3", "formdata-node": "^4.0.0", @@ -26881,6 +26944,303 @@ "url": "~0.11.0" } }, + "node_modules/swagger-client/node_modules/@swagger-api/apidom-ast": { + "version": "0.66.0", + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@babel/runtime-corejs3": "=7.20.7", + "@types/ramda": "=0.28.21", + "ramda": "=0.28.0", + "ramda-adjunct": "=3.4.0", + "stampit": "=4.3.2", + "unraw": "=2.0.1" + } + }, + "node_modules/swagger-client/node_modules/@swagger-api/apidom-ast/node_modules/@babel/runtime-corejs3": { + "version": "7.20.7", + "inBundle": true, + "license": "MIT", + "dependencies": { + "core-js-pure": "^3.25.1", + "regenerator-runtime": "^0.13.11" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/swagger-client/node_modules/@swagger-api/apidom-core": { + "version": "0.66.0", + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@babel/runtime-corejs3": "=7.20.7", + "@swagger-api/apidom-ast": "^0.66.0", + "@types/ramda": "=0.28.21", + "minim": "=0.23.8", + "ramda": "=0.28.0", + "ramda-adjunct": "=3.4.0", + "short-unique-id": "=4.4.4", + "stampit": "=4.3.2" + } + }, + "node_modules/swagger-client/node_modules/@swagger-api/apidom-core/node_modules/@babel/runtime-corejs3": { + "version": "7.20.7", + "inBundle": true, + "license": "MIT", + "dependencies": { + "core-js-pure": "^3.25.1", + "regenerator-runtime": "^0.13.11" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/swagger-client/node_modules/@swagger-api/apidom-json-pointer": { + "version": "0.66.0", + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@babel/runtime-corejs3": "=7.20.7", + "@swagger-api/apidom-core": "^0.66.0", + "ramda": "=0.28.0", + "ramda-adjunct": "=3.4.0" + } + }, + "node_modules/swagger-client/node_modules/@swagger-api/apidom-json-pointer/node_modules/@babel/runtime-corejs3": { + "version": "7.20.7", + "inBundle": true, + "license": "MIT", + "dependencies": { + "core-js-pure": "^3.25.1", + "regenerator-runtime": "^0.13.11" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/swagger-client/node_modules/@swagger-api/apidom-ns-asyncapi-2": { + "name": "-", + "version": "0.0.1", + "inBundle": true, + "license": "UNLICENSED" + }, + "node_modules/swagger-client/node_modules/@swagger-api/apidom-ns-json-schema-draft-4": { + "version": "0.66.0", + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@babel/runtime-corejs3": "=7.20.7", + "@swagger-api/apidom-core": "^0.66.0", + "@types/ramda": "=0.28.21", + "ramda": "=0.28.0", + "ramda-adjunct": "=3.4.0", + "stampit": "=4.3.2" + } + }, + "node_modules/swagger-client/node_modules/@swagger-api/apidom-ns-json-schema-draft-4/node_modules/@babel/runtime-corejs3": { + "version": "7.20.7", + "inBundle": true, + "license": "MIT", + "dependencies": { + "core-js-pure": "^3.25.1", + "regenerator-runtime": "^0.13.11" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/swagger-client/node_modules/@swagger-api/apidom-ns-openapi-3-0": { + "version": "0.66.0", + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@babel/runtime-corejs3": "=7.20.7", + "@swagger-api/apidom-core": "^0.66.0", + "@swagger-api/apidom-ns-json-schema-draft-4": "^0.66.0", + "@types/ramda": "=0.28.21", + "ramda": "=0.28.0", + "ramda-adjunct": "=3.4.0", + "stampit": "=4.3.2" + } + }, + "node_modules/swagger-client/node_modules/@swagger-api/apidom-ns-openapi-3-0/node_modules/@babel/runtime-corejs3": { + "version": "7.20.7", + "inBundle": true, + "license": "MIT", + "dependencies": { + "core-js-pure": "^3.25.1", + "regenerator-runtime": "^0.13.11" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/swagger-client/node_modules/@swagger-api/apidom-ns-openapi-3-1": { + "version": "0.66.0", + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@babel/runtime-corejs3": "=7.20.7", + "@swagger-api/apidom-core": "^0.66.0", + "@swagger-api/apidom-ns-openapi-3-0": "^0.66.0", + "@types/ramda": "=0.28.21", + "ramda": "=0.28.0", + "ramda-adjunct": "=3.4.0", + "stampit": "=4.3.2" + } + }, + "node_modules/swagger-client/node_modules/@swagger-api/apidom-ns-openapi-3-1/node_modules/@babel/runtime-corejs3": { + "version": "7.20.7", + "inBundle": true, + "license": "MIT", + "dependencies": { + "core-js-pure": "^3.25.1", + "regenerator-runtime": "^0.13.11" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/swagger-client/node_modules/@swagger-api/apidom-parser-adapter-api-design-systems-json": { + "name": "-", + "version": "0.0.1", + "inBundle": true, + "license": "UNLICENSED" + }, + "node_modules/swagger-client/node_modules/@swagger-api/apidom-parser-adapter-api-design-systems-yaml": { + "name": "-", + "version": "0.0.1", + "inBundle": true, + "license": "UNLICENSED" + }, + "node_modules/swagger-client/node_modules/@swagger-api/apidom-parser-adapter-asyncapi-json-2": { + "name": "-", + "version": "0.0.1", + "inBundle": true, + "license": "UNLICENSED" + }, + "node_modules/swagger-client/node_modules/@swagger-api/apidom-parser-adapter-asyncapi-yaml-2": { + "name": "-", + "version": "0.0.1", + "inBundle": true, + "license": "UNLICENSED" + }, + "node_modules/swagger-client/node_modules/@swagger-api/apidom-parser-adapter-json": { + "name": "-", + "version": "0.0.1", + "inBundle": true, + "license": "UNLICENSED" + }, + "node_modules/swagger-client/node_modules/@swagger-api/apidom-parser-adapter-openapi-json-3-0": { + "name": "-", + "version": "0.0.1", + "inBundle": true, + "license": "UNLICENSED" + }, + "node_modules/swagger-client/node_modules/@swagger-api/apidom-parser-adapter-openapi-json-3-1": { + "name": "-", + "version": "0.0.1", + "inBundle": true, + "license": "UNLICENSED" + }, + "node_modules/swagger-client/node_modules/@swagger-api/apidom-parser-adapter-openapi-yaml-3-0": { + "name": "-", + "version": "0.0.1", + "inBundle": true, + "license": "UNLICENSED" + }, + "node_modules/swagger-client/node_modules/@swagger-api/apidom-parser-adapter-openapi-yaml-3-1": { + "name": "-", + "version": "0.0.1", + "inBundle": true, + "license": "UNLICENSED" + }, + "node_modules/swagger-client/node_modules/@swagger-api/apidom-parser-adapter-yaml-1-2": { + "name": "-", + "version": "0.0.1", + "inBundle": true, + "license": "UNLICENSED" + }, + "node_modules/swagger-client/node_modules/@swagger-api/apidom-reference": { + "version": "0.66.0", + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@babel/runtime-corejs3": "=7.20.7", + "@swagger-api/apidom-core": "^0.66.0", + "@swagger-api/apidom-json-pointer": "^0.66.0", + "@swagger-api/apidom-ns-asyncapi-2": "=0.0.1", + "@swagger-api/apidom-ns-openapi-3-0": "^0.66.0", + "@swagger-api/apidom-ns-openapi-3-1": "^0.66.0", + "@swagger-api/apidom-parser-adapter-api-design-systems-json": "=0.0.1", + "@swagger-api/apidom-parser-adapter-api-design-systems-yaml": "=0.0.1", + "@swagger-api/apidom-parser-adapter-asyncapi-json-2": "=0.0.1", + "@swagger-api/apidom-parser-adapter-asyncapi-yaml-2": "=0.0.1", + "@swagger-api/apidom-parser-adapter-json": "=0.0.1", + "@swagger-api/apidom-parser-adapter-openapi-json-3-0": "=0.0.1", + "@swagger-api/apidom-parser-adapter-openapi-json-3-1": "=0.0.1", + "@swagger-api/apidom-parser-adapter-openapi-yaml-3-0": "=0.0.1", + "@swagger-api/apidom-parser-adapter-openapi-yaml-3-1": "=0.0.1", + "@swagger-api/apidom-parser-adapter-yaml-1-2": "=0.0.1", + "@types/ramda": "=0.28.21", + "axios": "=1.2.4", + "minimatch": "=6.1.6", + "process": "=0.11.10", + "ramda": "=0.28.0", + "ramda-adjunct": "=3.4.0", + "stampit": "=4.3.2" + } + }, + "node_modules/swagger-client/node_modules/@swagger-api/apidom-reference/node_modules/@babel/runtime-corejs3": { + "version": "7.20.7", + "inBundle": true, + "license": "MIT", + "dependencies": { + "core-js-pure": "^3.25.1", + "regenerator-runtime": "^0.13.11" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/swagger-client/node_modules/@types/ramda": { + "version": "0.28.21", + "inBundle": true, + "license": "MIT", + "dependencies": { + "ts-toolbelt": "^6.15.1" + } + }, + "node_modules/swagger-client/node_modules/axios": { + "name": "-", + "version": "0.0.1", + "inBundle": true, + "license": "UNLICENSED" + }, + "node_modules/swagger-client/node_modules/balanced-match": { + "version": "1.0.2", + "inBundle": true, + "license": "MIT" + }, + "node_modules/swagger-client/node_modules/brace-expansion": { + "version": "2.0.1", + "inBundle": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/swagger-client/node_modules/core-js-pure": { + "version": "3.27.2", + "hasInstallScript": true, + "inBundle": true, + "license": "MIT", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/core-js" + } + }, "node_modules/swagger-client/node_modules/is-plain-object": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz", @@ -26889,6 +27249,97 @@ "node": ">=0.10.0" } }, + "node_modules/swagger-client/node_modules/lodash": { + "version": "4.17.21", + "inBundle": true, + "license": "MIT" + }, + "node_modules/swagger-client/node_modules/minim": { + "version": "0.23.8", + "inBundle": true, + "license": "MIT", + "dependencies": { + "lodash": "^4.15.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/swagger-client/node_modules/minimatch": { + "version": "6.1.6", + "inBundle": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/swagger-client/node_modules/process": { + "version": "0.11.10", + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">= 0.6.0" + } + }, + "node_modules/swagger-client/node_modules/ramda": { + "version": "0.28.0", + "inBundle": true, + "license": "MIT", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/ramda" + } + }, + "node_modules/swagger-client/node_modules/ramda-adjunct": { + "version": "3.4.0", + "inBundle": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.3" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/ramda-adjunct" + }, + "peerDependencies": { + "ramda": ">= 0.28.0 <= 0.28.0" + } + }, + "node_modules/swagger-client/node_modules/regenerator-runtime": { + "version": "0.13.11", + "inBundle": true, + "license": "MIT" + }, + "node_modules/swagger-client/node_modules/short-unique-id": { + "version": "4.4.4", + "inBundle": true, + "license": "Apache-2.0", + "bin": { + "short-unique-id": "bin/short-unique-id", + "suid": "bin/short-unique-id" + } + }, + "node_modules/swagger-client/node_modules/stampit": { + "version": "4.3.2", + "inBundle": true, + "license": "MIT" + }, + "node_modules/swagger-client/node_modules/ts-toolbelt": { + "version": "6.15.5", + "inBundle": true, + "license": "Apache-2.0" + }, + "node_modules/swagger-client/node_modules/unraw": { + "version": "2.0.1", + "inBundle": true, + "license": "MIT" + }, "node_modules/symbol-tree": { "version": "3.2.4", "resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz", @@ -27208,9 +27659,12 @@ } }, "node_modules/traverse": { - "version": "0.6.6", - "resolved": "https://registry.npmjs.org/traverse/-/traverse-0.6.6.tgz", - "integrity": "sha1-y99WD9e5r2MlAv7UD5GMFX6pcTc=" + "version": "0.6.7", + "resolved": "https://registry.npmjs.org/traverse/-/traverse-0.6.7.tgz", + "integrity": "sha512-/y956gpUo9ZNCb99YjxG7OaslxZWHfCHAUUfshwqOXmxUIvqLjVO581BT+gM59+QV9tFe6/CGG53tsA1Y7RSdg==", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } }, "node_modules/treeify": { "version": "1.1.0", @@ -27304,9 +27758,9 @@ } }, "node_modules/tsconfig-paths/node_modules/json5": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", - "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz", + "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==", "dev": true, "dependencies": { "minimist": "^1.2.0" @@ -27749,7 +28203,7 @@ "node_modules/url": { "version": "0.11.0", "resolved": "https://registry.npmjs.org/url/-/url-0.11.0.tgz", - "integrity": "sha1-ODjpfPxgUh63PFJajlW/3Z4uKPE=", + "integrity": "sha512-kbailJa29QrtXnxgq+DdCEGlbTeYM2eJUxsz6vjZavrCYPMIFHMKQmSKYAIuUK2i7hgPm28a8piX5NTUtM/LKQ==", "dependencies": { "punycode": "1.3.2", "querystring": "0.2.0" @@ -27788,7 +28242,7 @@ "node_modules/url/node_modules/punycode": { "version": "1.3.2", "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz", - "integrity": "sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0=" + "integrity": "sha512-RofWgt/7fL5wP1Y7fxE7/EmTLzQVnB0ycyibJ0OOHIlJqTNzglYFxVwETOcIoJqJmpDXJ9xImDv+Fq34F/d4Dw==" }, "node_modules/util-deprecate": { "version": "1.0.2", @@ -28001,11 +28455,11 @@ } }, "node_modules/web-streams-polyfill": { - "version": "4.0.0-beta.1", - "resolved": "https://registry.npmjs.org/web-streams-polyfill/-/web-streams-polyfill-4.0.0-beta.1.tgz", - "integrity": "sha512-3ux37gEX670UUphBF9AMCq8XM6iQ8Ac6A+DSRRjDoRBm1ufCkaCDdNVbaqq60PsEkdNlLKrGtv/YBP4EJXqNtQ==", + "version": "4.0.0-beta.3", + "resolved": "https://registry.npmjs.org/web-streams-polyfill/-/web-streams-polyfill-4.0.0-beta.3.tgz", + "integrity": "sha512-QW95TCTaHmsYfHDybGMwO5IJIM93I/6vTRk+daHTWFPhwh+C8Cg7j7XyKrwrj8Ib6vYXe0ocYNrmzY4xAAN6ug==", "engines": { - "node": ">= 12" + "node": ">= 14" } }, "node_modules/webidl-conversions": { @@ -33791,16 +34245,49 @@ } }, "babel-plugin-module-resolver": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/babel-plugin-module-resolver/-/babel-plugin-module-resolver-4.1.0.tgz", - "integrity": "sha512-MlX10UDheRr3lb3P0WcaIdtCSRlxdQsB1sBqL7W0raF070bGl1HQQq5K3T2vf2XAYie+ww+5AKC/WrkjRO2knA==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/babel-plugin-module-resolver/-/babel-plugin-module-resolver-5.0.0.tgz", + "integrity": "sha512-g0u+/ChLSJ5+PzYwLwP8Rp8Rcfowz58TJNCe+L/ui4rpzE/mg//JVX0EWBUYoxaextqnwuGHzfGp2hh0PPV25Q==", "dev": true, "requires": { - "find-babel-config": "^1.2.0", - "glob": "^7.1.6", + "find-babel-config": "^2.0.0", + "glob": "^8.0.3", "pkg-up": "^3.1.0", - "reselect": "^4.0.0", - "resolve": "^1.13.1" + "reselect": "^4.1.7", + "resolve": "^1.22.1" + }, + "dependencies": { + "brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "requires": { + "balanced-match": "^1.0.0" + } + }, + "glob": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz", + "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==", + "dev": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^5.0.1", + "once": "^1.3.0" + } + }, + "minimatch": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", + "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", + "dev": true, + "requires": { + "brace-expansion": "^2.0.1" + } + } } }, "babel-plugin-polyfill-corejs2": { @@ -35681,9 +36168,9 @@ "dev": true }, "deepmerge": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.2.2.tgz", - "integrity": "sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==" + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.0.tgz", + "integrity": "sha512-z2wJZXrmeHdvYJp/Ux55wIjqo81G5Bp4c+oELTW+7ar6SogWHajt5a9gO3s3IDaGSAXjDk0vlQKN3rms8ab3og==" }, "default-gateway": { "version": "6.0.3", @@ -37444,19 +37931,19 @@ } }, "find-babel-config": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/find-babel-config/-/find-babel-config-1.2.0.tgz", - "integrity": "sha512-jB2CHJeqy6a820ssiqwrKMeyC6nNdmrcgkKWJWmpoxpE8RKciYJXCcXRq1h2AzCo5I5BJeN2tkGEO3hLTuePRA==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/find-babel-config/-/find-babel-config-2.0.0.tgz", + "integrity": "sha512-dOKT7jvF3hGzlW60Gc3ONox/0rRZ/tz7WCil0bqA1In/3I8f1BctpXahRnEKDySZqci7u+dqq93sZST9fOJpFw==", "dev": true, "requires": { - "json5": "^0.5.1", - "path-exists": "^3.0.0" + "json5": "^2.1.1", + "path-exists": "^4.0.0" }, "dependencies": { - "json5": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-0.5.1.tgz", - "integrity": "sha1-Hq3nrMASA0rYTiOWdn6tn6VJWCE=", + "path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", "dev": true } } @@ -37586,9 +38073,9 @@ "dev": true }, "follow-redirects": { - "version": "1.14.9", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.14.9.tgz", - "integrity": "sha512-MQDfihBQYMcyy5dhRDJUHcw7lb2Pv/TuE6xP1vyraLukNDHKbDxDNaOE3NbCAdKQApno+GPRyo1YAp89yCjK4w==", + "version": "1.15.2", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.2.tgz", + "integrity": "sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA==", "dev": true }, "forever-agent": { @@ -37619,12 +38106,12 @@ "integrity": "sha1-1hcBB+nv3E7TDJ3DkBbflCtctYs=" }, "formdata-node": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/formdata-node/-/formdata-node-4.3.2.tgz", - "integrity": "sha512-k7lYJyzDOSL6h917favP8j1L0/wNyylzU+x+1w4p5haGVHNlP58dbpdJhiCUsDbWsa9HwEtLp89obQgXl2e0qg==", + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/formdata-node/-/formdata-node-4.4.1.tgz", + "integrity": "sha512-0iirZp3uVDjVGt9p49aTaqjk84TrglENEDuqfdlZQ1roC9CWlPk6Avf8EEnZNcAqPonwkG35x4n3ww/1THYAeQ==", "requires": { "node-domexception": "1.0.0", - "web-streams-polyfill": "4.0.0-beta.1" + "web-streams-polyfill": "4.0.0-beta.3" } }, "formdata-polyfill": { @@ -38419,9 +38906,9 @@ } }, "http-cache-semantics": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz", - "integrity": "sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ==", + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz", + "integrity": "sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==", "dev": true }, "http-deceiver": { @@ -39045,9 +39532,9 @@ } }, "is-core-module": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.8.0.tgz", - "integrity": "sha512-vd15qHsaqrRL7dtH6QNuy0ndJmRDrS9HAM1CAiSifNUFv4x1a0CCVsj18hJ1mShxIG6T2i1sO78MkP56r0nYRw==", + "version": "2.11.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.11.0.tgz", + "integrity": "sha512-RRjxlvLDkD1YJwDbroBHMb+cukurkDWNyHx7D3oNB5x9rb5ogcksMC5wHCadcXoo67gVr/+3GFySh3134zi6rw==", "dev": true, "requires": { "has": "^1.0.3" @@ -42703,13 +43190,10 @@ "dev": true }, "json5": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.0.tgz", - "integrity": "sha512-f+8cldu7X/y7RAJurMEJmdoKXGB/X550w2Nr3tTbezL6RwEE/iMcm+tZnXeoZtKuOq6ft8+CqzEkrIgx1fPoQA==", - "dev": true, - "requires": { - "minimist": "^1.2.5" - } + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", + "dev": true }, "jsonfile": { "version": "6.1.0", @@ -43329,9 +43813,9 @@ }, "dependencies": { "json5": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", - "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz", + "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==", "dev": true, "requires": { "minimist": "^1.2.0" @@ -46770,7 +47254,7 @@ "querystring": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz", - "integrity": "sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA=" + "integrity": "sha512-X/xY82scca2tau62i9mDyU9K+I+djTMUsvwf7xnUX5GLvVzgJybOJf4Y6o9Zx3oJK/LSXg5tTZBjwzqVPaPO2g==" }, "querystringify": { "version": "2.2.0", @@ -47865,18 +48349,19 @@ "integrity": "sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8=" }, "reselect": { - "version": "4.1.5", - "resolved": "https://registry.npmjs.org/reselect/-/reselect-4.1.5.tgz", - "integrity": "sha512-uVdlz8J7OO+ASpBYoz1Zypgx0KasCY20H+N8JD13oUMtPvSHQuscrHop4KbXrbsBcdB9Ds7lVK7eRkBIfO43vQ==" + "version": "4.1.7", + "resolved": "https://registry.npmjs.org/reselect/-/reselect-4.1.7.tgz", + "integrity": "sha512-Zu1xbUt3/OPwsXL46hvOOoQrap2azE7ZQbokq61BQfiXvhewsKDwhMeZjTX9sX0nvw1t/U5Audyn1I9P/m9z0A==" }, "resolve": { - "version": "1.20.0", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.20.0.tgz", - "integrity": "sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A==", + "version": "1.22.1", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz", + "integrity": "sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==", "dev": true, "requires": { - "is-core-module": "^2.2.0", - "path-parse": "^1.0.6" + "is-core-module": "^2.9.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" } }, "resolve-alpn": { @@ -49227,6 +49712,12 @@ } } }, + "supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "dev": true + }, "svgo": { "version": "2.8.0", "resolved": "https://registry.npmjs.org/svgo/-/svgo-2.8.0.tgz", @@ -49251,14 +49742,18 @@ } }, "swagger-client": { - "version": "3.18.5", - "resolved": "https://registry.npmjs.org/swagger-client/-/swagger-client-3.18.5.tgz", - "integrity": "sha512-c0txGDtfQTJnaIBaEKCwtRNcUaaAfj+RXI4QVV9p3WW+AUCQqp4naCjaDNNsOfMkE4ySyhnblbL+jGqAVC7snw==", + "version": "3.19.0-alpha.4", + "resolved": "https://registry.npmjs.org/swagger-client/-/swagger-client-3.19.0-alpha.4.tgz", + "integrity": "sha512-Wfi/DHCRNQ2+hBqW/nUptdqU6rDIqa1bzZu6lN50qL6sstEnR0OXPowtVpAW8jVVUF2BzEUMCkyZtQKKTeJO6Q==", "requires": { "@babel/runtime-corejs3": "^7.11.2", + "@swagger-api/apidom-core": "*", + "@swagger-api/apidom-json-pointer": "*", + "@swagger-api/apidom-ns-openapi-3-1": "*", + "@swagger-api/apidom-reference": "*", "cookie": "~0.5.0", "cross-fetch": "^3.1.5", - "deepmerge": "~4.2.2", + "deepmerge": "~4.3.0", "fast-json-patch": "^3.0.0-1", "form-data-encoder": "^1.4.3", "formdata-node": "^4.0.0", @@ -49270,10 +49765,304 @@ "url": "~0.11.0" }, "dependencies": { + "@swagger-api/apidom-ast": { + "version": "0.66.0", + "bundled": true, + "requires": { + "@babel/runtime-corejs3": "=7.20.7", + "@types/ramda": "=0.28.21", + "ramda": "=0.28.0", + "ramda-adjunct": "=3.4.0", + "stampit": "=4.3.2", + "unraw": "=2.0.1" + }, + "dependencies": { + "@babel/runtime-corejs3": { + "version": "7.20.7", + "bundled": true, + "requires": { + "core-js-pure": "^3.25.1", + "regenerator-runtime": "^0.13.11" + } + } + } + }, + "@swagger-api/apidom-core": { + "version": "0.66.0", + "bundled": true, + "requires": { + "@babel/runtime-corejs3": "=7.20.7", + "@swagger-api/apidom-ast": "^0.66.0", + "@types/ramda": "=0.28.21", + "minim": "=0.23.8", + "ramda": "=0.28.0", + "ramda-adjunct": "=3.4.0", + "short-unique-id": "=4.4.4", + "stampit": "=4.3.2" + }, + "dependencies": { + "@babel/runtime-corejs3": { + "version": "7.20.7", + "bundled": true, + "requires": { + "core-js-pure": "^3.25.1", + "regenerator-runtime": "^0.13.11" + } + } + } + }, + "@swagger-api/apidom-json-pointer": { + "version": "0.66.0", + "bundled": true, + "requires": { + "@babel/runtime-corejs3": "=7.20.7", + "@swagger-api/apidom-core": "^0.66.0", + "ramda": "=0.28.0", + "ramda-adjunct": "=3.4.0" + }, + "dependencies": { + "@babel/runtime-corejs3": { + "version": "7.20.7", + "bundled": true, + "requires": { + "core-js-pure": "^3.25.1", + "regenerator-runtime": "^0.13.11" + } + } + } + }, + "@swagger-api/apidom-ns-asyncapi-2": { + "version": "npm:-@0.0.1", + "bundled": true + }, + "@swagger-api/apidom-ns-json-schema-draft-4": { + "version": "0.66.0", + "bundled": true, + "requires": { + "@babel/runtime-corejs3": "=7.20.7", + "@swagger-api/apidom-core": "^0.66.0", + "@types/ramda": "=0.28.21", + "ramda": "=0.28.0", + "ramda-adjunct": "=3.4.0", + "stampit": "=4.3.2" + }, + "dependencies": { + "@babel/runtime-corejs3": { + "version": "7.20.7", + "bundled": true, + "requires": { + "core-js-pure": "^3.25.1", + "regenerator-runtime": "^0.13.11" + } + } + } + }, + "@swagger-api/apidom-ns-openapi-3-0": { + "version": "0.66.0", + "bundled": true, + "requires": { + "@babel/runtime-corejs3": "=7.20.7", + "@swagger-api/apidom-core": "^0.66.0", + "@swagger-api/apidom-ns-json-schema-draft-4": "^0.66.0", + "@types/ramda": "=0.28.21", + "ramda": "=0.28.0", + "ramda-adjunct": "=3.4.0", + "stampit": "=4.3.2" + }, + "dependencies": { + "@babel/runtime-corejs3": { + "version": "7.20.7", + "bundled": true, + "requires": { + "core-js-pure": "^3.25.1", + "regenerator-runtime": "^0.13.11" + } + } + } + }, + "@swagger-api/apidom-ns-openapi-3-1": { + "version": "0.66.0", + "bundled": true, + "requires": { + "@babel/runtime-corejs3": "=7.20.7", + "@swagger-api/apidom-core": "^0.66.0", + "@swagger-api/apidom-ns-openapi-3-0": "^0.66.0", + "@types/ramda": "=0.28.21", + "ramda": "=0.28.0", + "ramda-adjunct": "=3.4.0", + "stampit": "=4.3.2" + }, + "dependencies": { + "@babel/runtime-corejs3": { + "version": "7.20.7", + "bundled": true, + "requires": { + "core-js-pure": "^3.25.1", + "regenerator-runtime": "^0.13.11" + } + } + } + }, + "@swagger-api/apidom-parser-adapter-api-design-systems-json": { + "version": "npm:-@0.0.1", + "bundled": true + }, + "@swagger-api/apidom-parser-adapter-api-design-systems-yaml": { + "version": "npm:-@0.0.1", + "bundled": true + }, + "@swagger-api/apidom-parser-adapter-asyncapi-json-2": { + "version": "npm:-@0.0.1", + "bundled": true + }, + "@swagger-api/apidom-parser-adapter-asyncapi-yaml-2": { + "version": "npm:-@0.0.1", + "bundled": true + }, + "@swagger-api/apidom-parser-adapter-json": { + "version": "npm:-@0.0.1", + "bundled": true + }, + "@swagger-api/apidom-parser-adapter-openapi-json-3-0": { + "version": "npm:-@0.0.1", + "bundled": true + }, + "@swagger-api/apidom-parser-adapter-openapi-json-3-1": { + "version": "npm:-@0.0.1", + "bundled": true + }, + "@swagger-api/apidom-parser-adapter-openapi-yaml-3-0": { + "version": "npm:-@0.0.1", + "bundled": true + }, + "@swagger-api/apidom-parser-adapter-openapi-yaml-3-1": { + "version": "npm:-@0.0.1", + "bundled": true + }, + "@swagger-api/apidom-parser-adapter-yaml-1-2": { + "version": "npm:-@0.0.1", + "bundled": true + }, + "@swagger-api/apidom-reference": { + "version": "0.66.0", + "bundled": true, + "requires": { + "@babel/runtime-corejs3": "=7.20.7", + "@swagger-api/apidom-core": "^0.66.0", + "@swagger-api/apidom-json-pointer": "^0.66.0", + "@swagger-api/apidom-ns-asyncapi-2": "=0.0.1", + "@swagger-api/apidom-ns-openapi-3-0": "^0.66.0", + "@swagger-api/apidom-ns-openapi-3-1": "^0.66.0", + "@swagger-api/apidom-parser-adapter-api-design-systems-json": "=0.0.1", + "@swagger-api/apidom-parser-adapter-api-design-systems-yaml": "=0.0.1", + "@swagger-api/apidom-parser-adapter-asyncapi-json-2": "=0.0.1", + "@swagger-api/apidom-parser-adapter-asyncapi-yaml-2": "=0.0.1", + "@swagger-api/apidom-parser-adapter-json": "=0.0.1", + "@swagger-api/apidom-parser-adapter-openapi-json-3-0": "=0.0.1", + "@swagger-api/apidom-parser-adapter-openapi-json-3-1": "=0.0.1", + "@swagger-api/apidom-parser-adapter-openapi-yaml-3-0": "=0.0.1", + "@swagger-api/apidom-parser-adapter-openapi-yaml-3-1": "=0.0.1", + "@swagger-api/apidom-parser-adapter-yaml-1-2": "=0.0.1", + "@types/ramda": "=0.28.21", + "axios": "npm:-@0.0.1", + "minimatch": "=6.1.6", + "process": "=0.11.10", + "ramda": "=0.28.0", + "ramda-adjunct": "=3.4.0", + "stampit": "=4.3.2" + }, + "dependencies": { + "@babel/runtime-corejs3": { + "version": "7.20.7", + "bundled": true, + "requires": { + "core-js-pure": "^3.25.1", + "regenerator-runtime": "^0.13.11" + } + } + } + }, + "@types/ramda": { + "version": "0.28.21", + "bundled": true, + "requires": { + "ts-toolbelt": "^6.15.1" + } + }, + "axios": { + "version": "npm:-@0.0.1", + "bundled": true + }, + "balanced-match": { + "version": "1.0.2", + "bundled": true + }, + "brace-expansion": { + "version": "2.0.1", + "bundled": true, + "requires": { + "balanced-match": "^1.0.0" + } + }, + "core-js-pure": { + "version": "3.27.2", + "bundled": true + }, "is-plain-object": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz", "integrity": "sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==" + }, + "lodash": { + "version": "4.17.21", + "bundled": true + }, + "minim": { + "version": "0.23.8", + "bundled": true, + "requires": { + "lodash": "^4.15.0" + } + }, + "minimatch": { + "version": "6.1.6", + "bundled": true, + "requires": { + "brace-expansion": "^2.0.1" + } + }, + "process": { + "version": "0.11.10", + "bundled": true + }, + "ramda": { + "version": "0.28.0", + "bundled": true + }, + "ramda-adjunct": { + "version": "3.4.0", + "bundled": true, + "requires": {} + }, + "regenerator-runtime": { + "version": "0.13.11", + "bundled": true + }, + "short-unique-id": { + "version": "4.4.4", + "bundled": true + }, + "stampit": { + "version": "4.3.2", + "bundled": true + }, + "ts-toolbelt": { + "version": "6.15.5", + "bundled": true + }, + "unraw": { + "version": "2.0.1", + "bundled": true } } }, @@ -49523,9 +50312,9 @@ } }, "traverse": { - "version": "0.6.6", - "resolved": "https://registry.npmjs.org/traverse/-/traverse-0.6.6.tgz", - "integrity": "sha1-y99WD9e5r2MlAv7UD5GMFX6pcTc=" + "version": "0.6.7", + "resolved": "https://registry.npmjs.org/traverse/-/traverse-0.6.7.tgz", + "integrity": "sha512-/y956gpUo9ZNCb99YjxG7OaslxZWHfCHAUUfshwqOXmxUIvqLjVO581BT+gM59+QV9tFe6/CGG53tsA1Y7RSdg==" }, "treeify": { "version": "1.1.0", @@ -49587,9 +50376,9 @@ }, "dependencies": { "json5": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", - "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz", + "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==", "dev": true, "requires": { "minimist": "^1.2.0" @@ -49910,7 +50699,7 @@ "url": { "version": "0.11.0", "resolved": "https://registry.npmjs.org/url/-/url-0.11.0.tgz", - "integrity": "sha1-ODjpfPxgUh63PFJajlW/3Z4uKPE=", + "integrity": "sha512-kbailJa29QrtXnxgq+DdCEGlbTeYM2eJUxsz6vjZavrCYPMIFHMKQmSKYAIuUK2i7hgPm28a8piX5NTUtM/LKQ==", "requires": { "punycode": "1.3.2", "querystring": "0.2.0" @@ -49919,7 +50708,7 @@ "punycode": { "version": "1.3.2", "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz", - "integrity": "sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0=" + "integrity": "sha512-RofWgt/7fL5wP1Y7fxE7/EmTLzQVnB0ycyibJ0OOHIlJqTNzglYFxVwETOcIoJqJmpDXJ9xImDv+Fq34F/d4Dw==" } } }, @@ -50120,9 +50909,9 @@ } }, "web-streams-polyfill": { - "version": "4.0.0-beta.1", - "resolved": "https://registry.npmjs.org/web-streams-polyfill/-/web-streams-polyfill-4.0.0-beta.1.tgz", - "integrity": "sha512-3ux37gEX670UUphBF9AMCq8XM6iQ8Ac6A+DSRRjDoRBm1ufCkaCDdNVbaqq60PsEkdNlLKrGtv/YBP4EJXqNtQ==" + "version": "4.0.0-beta.3", + "resolved": "https://registry.npmjs.org/web-streams-polyfill/-/web-streams-polyfill-4.0.0-beta.3.tgz", + "integrity": "sha512-QW95TCTaHmsYfHDybGMwO5IJIM93I/6vTRk+daHTWFPhwh+C8Cg7j7XyKrwrj8Ib6vYXe0ocYNrmzY4xAAN6ug==" }, "webidl-conversions": { "version": "7.0.0", diff --git a/package.json b/package.json index 35a80e8b818..57ebd491dce 100644 --- a/package.json +++ b/package.json @@ -40,6 +40,7 @@ "deps-license": "license-checker --production --csv --out $npm_package_config_deps_check_dir/licenses.csv && license-checker --development --csv --out $npm_package_config_deps_check_dir/licenses-dev.csv", "deps-size": "webpack -p --config webpack/bundle.babel.js --json | webpack-bundle-size-analyzer >| $npm_package_config_deps_check_dir/sizes.txt", "deps-check": "run-s deps-license deps-size", + "link:apidom": "npm link @swagger-api/apidom-core @swagger-api/apidom-reference @swagger-api/apidom-ns-openapi-3-1 @swagger-api/apidom-ns-openapi-3-0 @swagger-api/apidom-ns-json-schema-draft-4 @swagger-api/apidom-json-pointer", "lint": "eslint --ext \".js,.jsx\" src test dev-helpers flavors", "lint-errors": "eslint --quiet --ext \".js,.jsx\" src test dev-helpers flavors", "lint-fix": "eslint --ext \".js,.jsx\" src test dev-helpers flavors --fix", @@ -94,7 +95,7 @@ "reselect": "^4.1.5", "serialize-error": "^8.1.0", "sha.js": "^2.4.11", - "swagger-client": "^3.18.5", + "swagger-client": "=3.19.0-alpha.4", "url-parse": "^1.5.8", "xml": "=1.0.1", "xml-but-prettier": "^1.0.1", @@ -122,7 +123,7 @@ "autoprefixer": "^10.4.12", "babel-loader": "^8.2.3", "babel-plugin-lodash": "=3.3.4", - "babel-plugin-module-resolver": "=4.1.0", + "babel-plugin-module-resolver": "=5.0.0", "babel-plugin-transform-react-remove-prop-types": "=0.4.24", "body-parser": "^1.19.0", "buffer": "^6.0.3", @@ -187,6 +188,13 @@ "webpack-node-externals": "=3.0.0", "webpack-stats-plugin": "=1.0.3" }, + "overrides": { + "swagger-client": { + "@swagger-api/apidom-reference": { + "axios": "npm:-@0.0.1" + } + } + }, "config": { "deps_check_dir": ".deps_check" } diff --git a/src/core/components/info.jsx b/src/core/components/info.jsx index 43465a4fe88..1922239a990 100644 --- a/src/core/components/info.jsx +++ b/src/core/components/info.jsx @@ -23,7 +23,7 @@ export class InfoBasePath extends React.Component { } -class Contact extends React.Component { +export class Contact extends React.Component { static propTypes = { data: PropTypes.object, getComponent: PropTypes.func.isRequired, @@ -53,7 +53,7 @@ class Contact extends React.Component { } } -class License extends React.Component { +export class License extends React.Component { static propTypes = { license: PropTypes.object, getComponent: PropTypes.func.isRequired, @@ -64,7 +64,6 @@ class License extends React.Component { render(){ let { license, getComponent, selectedServer, url: specUrl } = this.props - const Link = getComponent("Link") let name = license.get("name") || "License" let url = safeBuildUrl(license.get("url"), specUrl, {selectedServer}) @@ -125,6 +124,7 @@ export default class Info extends React.Component { const VersionStamp = getComponent("VersionStamp") const InfoUrl = getComponent("InfoUrl") const InfoBasePath = getComponent("InfoBasePath") + const License = getComponent("License") return (
diff --git a/src/core/components/layouts/base.jsx b/src/core/components/layouts/base.jsx index 007008d1bf7..c6f0a7bfd91 100644 --- a/src/core/components/layouts/base.jsx +++ b/src/core/components/layouts/base.jsx @@ -20,6 +20,7 @@ export default class BaseLayout extends React.Component { let VersionPragmaFilter = getComponent("VersionPragmaFilter") let Operations = getComponent("operations", true) let Models = getComponent("Models", true) + let Webhooks = getComponent("Webhooks", true) let Row = getComponent("Row") let Col = getComponent("Col") let Errors = getComponent("errors", true) @@ -30,6 +31,7 @@ export default class BaseLayout extends React.Component { const FilterContainer = getComponent("FilterContainer", true) let isSwagger2 = specSelectors.isSwagger2() let isOAS3 = specSelectors.isOAS3() + const isOpenAPI31 = specSelectors.selectIsOpenAPI31() const isSpecEmpty = !specSelectors.specStr() @@ -112,6 +114,13 @@ export default class BaseLayout extends React.Component { + { isOpenAPI31 && + + + + + + } diff --git a/src/core/plugins/oas3/components/index.js b/src/core/plugins/oas3/components/index.js index 59258d4efce..49cf84601da 100644 --- a/src/core/plugins/oas3/components/index.js +++ b/src/core/plugins/oas3/components/index.js @@ -6,6 +6,7 @@ import ServersContainer from "./servers-container" import RequestBodyEditor from "./request-body-editor" import HttpAuth from "./http-auth" import OperationServers from "./operation-servers" +import Webhooks from "./webhooks" export default { Callbacks, @@ -15,5 +16,6 @@ export default { ServersContainer, RequestBodyEditor, OperationServers, - operationLink: OperationLink + operationLink: OperationLink, + Webhooks } diff --git a/src/core/plugins/oas3/components/request-body.jsx b/src/core/plugins/oas3/components/request-body.jsx index df3159fba93..1f9905a7786 100644 --- a/src/core/plugins/oas3/components/request-body.jsx +++ b/src/core/plugins/oas3/components/request-body.jsx @@ -6,13 +6,13 @@ import { getCommonExtensions, getSampleSchema, stringify, isEmptyValue } from "c import { getKnownSyntaxHighlighterLanguage } from "core/utils/jsonParse" export const getDefaultRequestBodyValue = (requestBody, mediaType, activeExamplesKey) => { - const mediaTypeValue = requestBody.getIn(["content", mediaType]) - const schema = mediaTypeValue.get("schema").toJS() + const mediaTypeValue = requestBody?.getIn(["content", mediaType]) + const schema = mediaTypeValue?.get("schema").toJS() - const hasExamplesKey = mediaTypeValue.get("examples") !== undefined - const exampleSchema = mediaTypeValue.get("example") + const hasExamplesKey = mediaTypeValue?.get("examples") !== undefined + const exampleSchema = mediaTypeValue?.get("example") const mediaTypeExample = hasExamplesKey - ? mediaTypeValue.getIn([ + ? mediaTypeValue?.getIn([ "examples", activeExamplesKey, "value" diff --git a/src/core/plugins/oas3/components/webhooks.jsx b/src/core/plugins/oas3/components/webhooks.jsx new file mode 100644 index 00000000000..9bd3e8e66dc --- /dev/null +++ b/src/core/plugins/oas3/components/webhooks.jsx @@ -0,0 +1,60 @@ +// OpenAPI 3.1 feature +import React from "react" +import PropTypes from "prop-types" +import { fromJS } from "immutable" +import ImPropTypes from "react-immutable-proptypes" + +// Todo: nice to have: similar to operation-tags, could have an expand/collapse button +// to show/hide all webhook items +const Webhooks = (props) => { + const { specSelectors, getComponent, specPath } = props + + const webhooksPathItems = specSelectors.selectWebhooks() // OrderedMap + if (!webhooksPathItems || webhooksPathItems?.size < 1) { + return null + } + const OperationContainer = getComponent("OperationContainer", true) + + const pathItemsElements = webhooksPathItems.entrySeq().map(([pathItemName, pathItem], i) => { + const operationsElements = pathItem.entrySeq().map(([operationMethod, operation], j) => { + const op = fromJS({ + operation + }) + // using defaultProps for `specPath`; may want to remove from props + // and/or if extract to separate PathItem component, allow for use + // with both OAS3.1 "webhooks" and "components.pathItems" features + return + }) + return
+ {operationsElements} +
+ }) + + return ( +
+

Webhooks

+ {pathItemsElements} +
+ ) +} + +Webhooks.propTypes = { + specSelectors: PropTypes.object.isRequired, + getComponent: PropTypes.func.isRequired, + specPath: ImPropTypes.list, +} + +Webhooks.defaultProps = { + specPath: fromJS([]) +} + +export default Webhooks diff --git a/src/core/plugins/oas3/helpers.jsx b/src/core/plugins/oas3/helpers.jsx index d11052c375b..253973a5fa5 100644 --- a/src/core/plugins/oas3/helpers.jsx +++ b/src/core/plugins/oas3/helpers.jsx @@ -1,16 +1,27 @@ import React from "react" -export function isOAS3(jsSpec) { +export function isOpenAPI30(jsSpec) { const oasVersion = jsSpec.get("openapi") - if(typeof oasVersion !== "string") { + if (typeof oasVersion !== "string") { return false } + return oasVersion.startsWith("3.0.") && oasVersion.length > 4 +} - // we gate against `3.1` because we want to explicitly opt into supporting it - // at some point in the future -- KS, 7/2018 +export function isOpenAPI31(jsSpec) { + const oasVersion = jsSpec.get("openapi") + if (typeof oasVersion !== "string") { + return false + } + return oasVersion.startsWith("3.1.") && oasVersion.length > 4 +} - // starts with, but is not `3.0.` exactly - return oasVersion.startsWith("3.0.") && oasVersion.length > 4 +export function isOAS3(jsSpec) { + const oasVersion = jsSpec.get("openapi") + if(typeof oasVersion !== "string") { + return false + } + return isOpenAPI30(jsSpec) || isOpenAPI31(jsSpec) } export function isSwagger2(jsSpec) { diff --git a/src/core/plugins/oas3/spec-extensions/selectors.js b/src/core/plugins/oas3/spec-extensions/selectors.js index e8911423fa0..b7c85ee0eaa 100644 --- a/src/core/plugins/oas3/spec-extensions/selectors.js +++ b/src/core/plugins/oas3/spec-extensions/selectors.js @@ -1,10 +1,11 @@ import { createSelector } from "reselect" import { Map } from "immutable" -import { isOAS3 as isOAS3Helper, isSwagger2 as isSwagger2Helper } from "../helpers" +import { isOAS3 as isOAS3Helper, isOpenAPI31 as isOpenAPI31Helper, isSwagger2 as isSwagger2Helper } from "../helpers" // Helpers +// 1/2023: as of now, more accurately, isAnyOAS3 function onlyOAS3(selector) { return () => (system, ...args) => { const spec = system.getSystem().specSelectors.specJson() @@ -16,6 +17,17 @@ function onlyOAS3(selector) { } } +function isOpenAPI31(selector) { + return () => (system, ...args) => { + const spec = system.getSystem().specSelectors.specJson() + if (isOpenAPI31Helper(spec)) { + return selector(...args) + } else { + return null + } + } +} + const state = state => { return state || Map() } @@ -48,3 +60,13 @@ export const isSwagger2 = (ori, system) => () => { const spec = system.getSystem().specSelectors.specJson() return isSwagger2Helper(spec) } + +export const selectIsOpenAPI31 = (ori, system) => () => { + const spec = system.getSystem().specSelectors.specJson() + return isOpenAPI31Helper(spec) +} + +export const selectWebhooks = isOpenAPI31(createSelector( + spec, + spec => spec.getIn(["webhooks"]) || Map() +)) diff --git a/src/core/plugins/oas3/spec-extensions/wrap-selectors.js b/src/core/plugins/oas3/spec-extensions/wrap-selectors.js index 19a18317487..8e82572d4ed 100644 --- a/src/core/plugins/oas3/spec-extensions/wrap-selectors.js +++ b/src/core/plugins/oas3/spec-extensions/wrap-selectors.js @@ -1,11 +1,11 @@ import { createSelector } from "reselect" import { specJsonWithResolvedSubtrees } from "../../spec/selectors" import { Map } from "immutable" -import { isOAS3 as isOAS3Helper, isSwagger2 as isSwagger2Helper } from "../helpers" +import { isOAS3 as isOAS3Helper, isOpenAPI31 as isOpenAPI31Helper, isSwagger2 as isSwagger2Helper } from "../helpers" // Helpers - +// 1/2023: as of now, more accurately, isAnyOAS3 function onlyOAS3(selector) { return (ori, system) => (...args) => { const spec = system.getSystem().specSelectors.specJson() @@ -17,6 +17,17 @@ function onlyOAS3(selector) { } } +function isOpenAPI31(selector) { + return (ori, system) => (...args) => { + const spec = system.getSystem().specSelectors.specJson() + if (isOpenAPI31Helper(spec)) { + return selector(...args) + } else { + return null + } + } +} + const state = state => { return state || Map() } @@ -83,3 +94,14 @@ export const isSwagger2 = (ori, system) => () => { const spec = system.getSystem().specSelectors.specJson() return isSwagger2Helper(Map.isMap(spec) ? spec : Map()) } + +export const selectIsOpenAPI31 = (ori, system) => () => { + const spec = system.getSystem().specSelectors.specJson() + return isOpenAPI31Helper(Map.isMap(spec) ? spec : Map()) +} + +export const selectWebhooks = isOpenAPI31(createSelector( + spec, + spec => spec.getIn(["webhooks"]) || Map() +)) + diff --git a/src/core/plugins/oas3/wrap-components/index.js b/src/core/plugins/oas3/wrap-components/index.js index 2c421add245..cd0c627aa2d 100644 --- a/src/core/plugins/oas3/wrap-components/index.js +++ b/src/core/plugins/oas3/wrap-components/index.js @@ -4,6 +4,8 @@ import VersionStamp from "./version-stamp" import OnlineValidatorBadge from "./online-validator-badge" import Model from "./model" import JsonSchema_string from "./json-schema-string" +import License from "./license" +import info from "./info" export default { Markdown, @@ -12,4 +14,6 @@ export default { VersionStamp, model: Model, onlineValidatorBadge: OnlineValidatorBadge, + License, + info, } diff --git a/src/core/plugins/oas3/wrap-components/info.jsx b/src/core/plugins/oas3/wrap-components/info.jsx new file mode 100644 index 00000000000..42112b9701f --- /dev/null +++ b/src/core/plugins/oas3/wrap-components/info.jsx @@ -0,0 +1,78 @@ +import React from "react" +import PropTypes from "prop-types" +import ImPropTypes from "react-immutable-proptypes" +import { sanitizeUrl } from "core/utils" +import { safeBuildUrl } from "core/utils/url" +import { OAS3ComponentWrapFactory } from "../helpers" + +const Info = (props) => { + const { info, url, host, basePath, getComponent, specSelectors, externalDocs, selectedServer, url: specUrl } = props + const isOpenAPI31 = specSelectors.selectIsOpenAPI31() + const version = info.get("version") + const description = info.get("description") + const title = info.get("title") + const termsOfServiceUrl = safeBuildUrl(info.get("termsOfService"), specUrl, { selectedServer }) + const contact = info.get("contact") + const license = info.get("license") + // note that ux may want to move summary to a sub-heading, as summary is a string that does not need to be Markdown + const summary = info.get("summary") // OAS3.1 field + const rawExternalDocsUrl = externalDocs && externalDocs.get("url") + const externalDocsUrl = safeBuildUrl(rawExternalDocsUrl, specUrl, { selectedServer }) + const externalDocsDescription = externalDocs && externalDocs.get("description") + + const Markdown = getComponent("Markdown", true) + const Link = getComponent("Link") + const VersionStamp = getComponent("VersionStamp") + const InfoUrl = getComponent("InfoUrl") + const InfoBasePath = getComponent("InfoBasePath") + const License = getComponent("License") + const Contact = getComponent("Contact") + + return ( +
+
+

{title} + {version && } +

+ {host || basePath ? : null} + {url && } +
+ + { + isOpenAPI31 && summary &&
+ +
+ } +
+ +
+ + { + termsOfServiceUrl &&
+ Terms of service +
+ } + + {contact && contact.size ? : null} + {license && license.size ? : null} + {externalDocsUrl ? + {externalDocsDescription || externalDocsUrl} + : null} + +
+ ) +} + +Info.propTypes = { + info: PropTypes.object, + url: PropTypes.string, + host: PropTypes.string, + basePath: PropTypes.string, + externalDocs: ImPropTypes.map, + getComponent: PropTypes.func.isRequired, + specSelectors: PropTypes.object.isRequired, + oas3selectors: PropTypes.func, + selectedServer: PropTypes.string, +} + +export default OAS3ComponentWrapFactory(Info) \ No newline at end of file diff --git a/src/core/plugins/oas3/wrap-components/license.jsx b/src/core/plugins/oas3/wrap-components/license.jsx new file mode 100644 index 00000000000..7560a6b8131 --- /dev/null +++ b/src/core/plugins/oas3/wrap-components/license.jsx @@ -0,0 +1,49 @@ +import React from "react" +import PropTypes from "prop-types" +import { sanitizeUrl } from "core/utils" +import { safeBuildUrl } from "core/utils/url" +import { OAS3ComponentWrapFactory } from "../helpers" + +const baseSPDXurl = "https://spdx.org/licenses" +const createSPDXurl = (identifier) => { + return `${baseSPDXurl}/${identifier}.html` +} + +const License = (props) => { + const { license, getComponent, selectedServer, url: specUrl, specSelectors } = props + const Link = getComponent("Link") + const name = license.get("name") || "License" + const url = safeBuildUrl(license.get("url"), specUrl, { selectedServer }) + const identifier = license.get("identifier") || "" // OAS3.1 field + const identifierUrl = createSPDXurl(identifier) + const isOpenAPI31 = specSelectors.selectIsOpenAPI31() + + return ( +
+ { + !isOpenAPI31 && url &&
{name}
+ } + { + isOpenAPI31 && url && !identifier &&
{name}
+ } + { + isOpenAPI31 && identifier && !url &&
SPDX License: {identifier}
+ } + {/* { + isOpenAPI31 && identifier && url &&
Render Error: License.url and License.identifier are mutually exclusive fields
+ } */} +
+ ) +} + +License.propTypes = { + license: PropTypes.shape({ + get: PropTypes.func, + }), + getComponent: PropTypes.func.isRequired, + specSelectors: PropTypes.object.isRequired, + selectedServer: PropTypes.string, + url: PropTypes.string.isRequired, +} + +export default OAS3ComponentWrapFactory(License) \ No newline at end of file diff --git a/src/core/presets/base.js b/src/core/presets/base.js index ddfe33313f7..43662c49a1f 100644 --- a/src/core/presets/base.js +++ b/src/core/presets/base.js @@ -59,7 +59,9 @@ import Overview from "core/components/overview" import InitializedInput from "core/components/initialized-input" import Info, { InfoUrl, - InfoBasePath + InfoBasePath, + License, + Contact, } from "core/components/info" import InfoContainer from "core/containers/info" import JumpToPath from "core/components/jump-to-path" @@ -163,6 +165,8 @@ export default function() { DeepLink, InfoUrl, InfoBasePath, + License, + Contact, SvgAssets, Example, ExamplesSelect, diff --git a/test/e2e-cypress/static/documents/features/info-openAPI2.yaml b/test/e2e-cypress/static/documents/features/info-openAPI2.yaml new file mode 100644 index 00000000000..05d62de0ecf --- /dev/null +++ b/test/e2e-cypress/static/documents/features/info-openAPI2.yaml @@ -0,0 +1,6 @@ +swagger: 2.0.0 +info: + title: OpenAPI 2.0 Info Object + version: 1.0.0 + summary: This 3.1.x field should not render in OpenAPI2.x.x + description: This is a sample server for a pet store. diff --git a/test/e2e-cypress/static/documents/features/info-openAPI30.yaml b/test/e2e-cypress/static/documents/features/info-openAPI30.yaml new file mode 100644 index 00000000000..dbe8527ec45 --- /dev/null +++ b/test/e2e-cypress/static/documents/features/info-openAPI30.yaml @@ -0,0 +1,6 @@ +openapi: 3.1.0 +info: + title: OpenAPI 3.0 Info Object + version: 1.0.0 + summary: This 3.1.x field should not render in OpenAPI3.0.x + description: This is a sample server for a pet store. diff --git a/test/e2e-cypress/static/documents/features/info-openAPI31.yaml b/test/e2e-cypress/static/documents/features/info-openAPI31.yaml new file mode 100644 index 00000000000..d98204240cb --- /dev/null +++ b/test/e2e-cypress/static/documents/features/info-openAPI31.yaml @@ -0,0 +1,7 @@ +openapi: 3.1.0 +info: + title: OpenAPI 3.1 Info Object + version: 1.0.0 + summary: a new 3.1.x specific field for summary + description: This is a sample server for a pet store. + \ No newline at end of file diff --git a/test/e2e-cypress/static/documents/features/license-openAPI2.yaml b/test/e2e-cypress/static/documents/features/license-openAPI2.yaml new file mode 100644 index 00000000000..4ef770504df --- /dev/null +++ b/test/e2e-cypress/static/documents/features/license-openAPI2.yaml @@ -0,0 +1,8 @@ +swagger: 2.0.0 +info: + title: OpenAPI 2.0 License with only url present + version: 1.0.0 + description: This is a sample server for a pet store. + license: + name: Apache 2.0 + url: https://www.apache.org/licenses/LICENSE-2.0.html diff --git a/test/e2e-cypress/static/documents/features/license-openAPI30.yaml b/test/e2e-cypress/static/documents/features/license-openAPI30.yaml new file mode 100644 index 00000000000..85220a835ef --- /dev/null +++ b/test/e2e-cypress/static/documents/features/license-openAPI30.yaml @@ -0,0 +1,8 @@ +openapi: 3.0.0 +info: + title: OpenAPI 3.0 License with only url present + version: 1.0.0 + description: This is a sample server for a pet store. + license: + name: Apache 2.0 + url: https://www.apache.org/licenses/LICENSE-2.0.html diff --git a/test/e2e-cypress/static/documents/features/license-openAPI31-error-both-identifier-and-url.yaml b/test/e2e-cypress/static/documents/features/license-openAPI31-error-both-identifier-and-url.yaml new file mode 100644 index 00000000000..8ccb9ab3e2d --- /dev/null +++ b/test/e2e-cypress/static/documents/features/license-openAPI31-error-both-identifier-and-url.yaml @@ -0,0 +1,9 @@ +openapi: 3.1.0 +info: + title: OpenAPI 3.1 License with only identifier present + version: 1.0.0 + description: This is a sample server for a pet store. + license: + name: Apache 2.0 + url: https://www.apache.org/licenses/LICENSE-2.0.html + identifier: Apache-2.0 # mutually exclusive of url; separately, for json_schema, consider const, prefix, array items can be of a different type (current assumption is all array items are the same) diff --git a/test/e2e-cypress/static/documents/features/license-openAPI31-identifier.yaml b/test/e2e-cypress/static/documents/features/license-openAPI31-identifier.yaml new file mode 100644 index 00000000000..9a777a5a9f9 --- /dev/null +++ b/test/e2e-cypress/static/documents/features/license-openAPI31-identifier.yaml @@ -0,0 +1,9 @@ +openapi: 3.1.0 +info: + title: OpenAPI 3.1 License with only identifier present + version: 1.0.0 + description: This is a sample server for a pet store. + license: + name: Apache 2.0 + # url: https://www.apache.org/licenses/LICENSE-2.0.html + identifier: Apache-2.0 # mutually exclusive of url; separately, for json_schema, consider const, prefix, array items can be of a different type (current assumption is all array items are the same) diff --git a/test/e2e-cypress/static/documents/features/license-openAPI31-url.yaml b/test/e2e-cypress/static/documents/features/license-openAPI31-url.yaml new file mode 100644 index 00000000000..79bd0c1cce2 --- /dev/null +++ b/test/e2e-cypress/static/documents/features/license-openAPI31-url.yaml @@ -0,0 +1,9 @@ +openapi: 3.1.0 +info: + title: OpenAPI 3.1 License with only url present + version: 1.0.0 + description: This is a sample server for a pet store. + license: + name: Apache 2.0 + url: https://www.apache.org/licenses/LICENSE-2.0.html + # identifier: Apache-2.0 # mutually exclusive of url; separately, for json_schema, consider const, prefix, array items can be of a different type (current assumption is all array items are the same) diff --git a/test/e2e-cypress/static/documents/features/webhooks-openAPI30.yaml b/test/e2e-cypress/static/documents/features/webhooks-openAPI30.yaml new file mode 100644 index 00000000000..8c7f37cee21 --- /dev/null +++ b/test/e2e-cypress/static/documents/features/webhooks-openAPI30.yaml @@ -0,0 +1,24 @@ +openapi: 3.0.0 +info: + title: Webhooks does not exist in OpenAPI 3.0 and should not render + version: 1.0.0 + summary: a new 3.1.x specific field for summary + description: This is a sample server for a pet store. + termsOfService: https://example.com/terms/ +webhooks: + newPet: + post: + summary: summary for newPet--post + requestBody: + description: Information about a new pet in the system + content: + application/json: + schema: + $ref: "#/components/schemas/foo" + responses: + "200": + description: Return a 200 status to indicate that the data was received successfully +components: + schemas: + foo: + type: string diff --git a/test/e2e-cypress/static/documents/features/webhooks-openAPI31.yaml b/test/e2e-cypress/static/documents/features/webhooks-openAPI31.yaml new file mode 100644 index 00000000000..190f27b1f81 --- /dev/null +++ b/test/e2e-cypress/static/documents/features/webhooks-openAPI31.yaml @@ -0,0 +1,50 @@ +openapi: 3.1.0 +info: + title: OpenAPI 3.1 Webhooks + version: 1.0.0 + summary: a new 3.1.x specific field for summary + description: This is a sample server for a pet store. + termsOfService: https://example.com/terms/ + license: + name: Apache 2.0 + identifier: Apache-2.0 +webhooks: + newPet: + post: + summary: summary for newPet--post + requestBody: + description: Information about a new pet in the system + content: + application/json: + schema: + $ref: "#/components/schemas/foo" + responses: + "200": + description: Return a 200 status to indicate that the data was received successfully + put: + summary: summary for newPet--put + requestBody: + description: Information about a new pet in the system + content: + application/json: + schema: + $ref: "#/components/schemas/foo" + responses: + "200": + description: Return a 200 status to indicate that the data was received successfully + oldPet: + post: + summary: summary for oldPet--post + requestBody: + description: Information about a new pet in the system + content: + application/json: + schema: + $ref: "#/components/schemas/foo" + responses: + "200": + description: Return a 200 status to indicate that the data was received successfully +components: + schemas: + foo: + type: string diff --git a/test/e2e-cypress/tests/features/info.js b/test/e2e-cypress/tests/features/info.js new file mode 100644 index 00000000000..499d4c28d67 --- /dev/null +++ b/test/e2e-cypress/tests/features/info.js @@ -0,0 +1,74 @@ +describe("Render Info Component", () => { + describe("OpenAPI 2.x", () => { + const baseUrl = "/?url=/documents/features/info-openAPI2.yaml" + it("should render Info Description", () => { + cy.visit(baseUrl) + .get(".info .description") + .should("contains.text", "This is a sample") + }) + it("should render Info Main anchor target xss link with safe `rel` attributes", () => { + cy.visit(baseUrl) + .get(".info .main > a") + .should("have.attr", "rel") + .and("include", "noopener") + .and("include", "noreferrer") + .get(".info .main > a") + .should("have.attr", "target") + .and("equal", "_blank") + }) + it("should not render Info Summary (an OpenAPI 3.1 field)", () => { + cy.visit(baseUrl) + .get(".info__summary") + .should("not.exist") + }) + }) + describe("OpenAPI 3.0.x", () => { + const baseUrl = "/?url=/documents/features/info-openAPI30.yaml" + it("should render Info Description", () => { + cy.visit(baseUrl) + .get(".info .description") + .should("contains.text", "This is a sample") + }) + it("should render Info Main anchor target xss link with safe `rel` attributes", () => { + cy.visit(baseUrl) + .get(".info .main > a") + .should("have.attr", "rel") + .and("include", "noopener") + .and("include", "noreferrer") + .get(".info .main > a") + .should("have.attr", "target") + .and("equal", "_blank") + }) + it("should not render Info Summary (an OpenAPI 3.1 field)", () => { + cy.visit(baseUrl) + .get(".info__summary") + .should("not.exist") + }) + }) + describe("OpenAPI 3.1.x", () => { + const baseUrl = "/?url=/documents/features/info-openAPI31.yaml" + it("should render Info Description", () => { + cy.visit(baseUrl) + .get(".info .description") + .should("contains.text", "This is a sample") + }) + it("should render Info Main anchor target xss link with safe `rel` attributes", () => { + cy.visit(baseUrl) + .get(".info .main > a") + .should("have.attr", "rel") + .and("include", "noopener") + .and("include", "noreferrer") + .get(".info .main > a") + .should("have.attr", "target") + .and("equal", "_blank") + }) + it("should render Info Summary", () => { + cy.visit(baseUrl) + .get(".info__summary") + .should("exist") + .should("contains.text", "new 3.1.x specific field") + .get(".info .description") + .should("contains.text", "This is a sample") + }) + }) +}) diff --git a/test/e2e-cypress/tests/features/license.js b/test/e2e-cypress/tests/features/license.js new file mode 100644 index 00000000000..009cb101c79 --- /dev/null +++ b/test/e2e-cypress/tests/features/license.js @@ -0,0 +1,105 @@ +describe("Render License Component", () => { + describe("OpenAPI 2", () =>{ + const baseUrl = "/?url=/documents/features/license-openAPI2.yaml" + it("should render License URL", () => { + cy.visit(baseUrl) + .get(".info__license") + .should("exist") + .should("contains.text", "Apache 2.0") + .should("not.contains.text", "SPDX License") + .get(".info__license__identifier") + .should("not.exist") + }) + it("should render License URL anchor target xss link with safe `rel` attributes ", () => { + cy.visit(baseUrl) + .get(".info__license > .link") + .should("have.attr", "rel") + .and("include", "noopener") + .and("include", "noreferrer") + .get(".info .main > a") + .should("have.attr", "target") + .and("equal", "_blank") + }) + }) + describe("OpenAPI 3.0.x", () => { + const baseUrl = "/?url=/documents/features/license-openAPI30.yaml" + it("should render License URL", () => { + cy.visit(baseUrl) + .get(".info__license__url") + .should("exist") + .should("contains.text", "Apache 2.0") + .should("not.contains.text", "SPDX License") + .get(".info__license__identifier") + .should("not.exist") + }) + it("should render URL anchor target xss link with safe `rel` attributes ", () => { + cy.visit(baseUrl) + .get(".info__license__url > a") + .should("have.attr", "rel") + .and("include", "noopener") + .and("include", "noreferrer") + .get(".info .main > a") + .should("have.attr", "target") + .and("equal", "_blank") + }) + }) + describe("OpenAPI 3.1.x", () => { + describe("only URL", () => { + const baseUrl = "/?url=/documents/features/license-openAPI31-url.yaml" + it("should render URL", () => { + cy.visit(baseUrl) + .get(".info__license__url") + .should("exist") + .should("contains.text", "Apache 2.0") + .should("not.contains.text", "SPDX License") + .get(".info__license__identifier") + .should("not.exist") + }) + it("should render URL anchor target xss link with safe `rel` attributes ", () => { + cy.visit(baseUrl) + .get(".info__license__url > a") + .should("have.attr", "rel") + .and("include", "noopener") + .and("include", "noreferrer") + .get(".info .main > a") + .should("have.attr", "target") + .and("equal", "_blank") + }) + }) + describe("only SPDX Identifier", () => { + const baseUrl = "/?url=/documents/features/license-openAPI31-identifier.yaml" + it("should render SPDX Identifier", () => { + cy.visit(baseUrl) + .get(".info__license__identifier") + .should("exist") + .should("contains.text", "Apache-2.0") + .should("contains.text", "SPDX License") + .get(".info__license__url") + .should("not.exist") + }) + it("should render SPDX and Identifier anchor target xss links with safe `rel` attributes ", () => { + cy.visit(baseUrl) + .get(".info__license__identifier > a") + .each(($el) => { + cy.get($el) + .should("have.attr", "rel") + .and("include", "noopener") + .and("include", "noreferrer") + cy.get($el) + .should("have.attr", "target") + .and("equal", "_blank") + }) + }) + }) + describe("URL and SPX are mutually exclusive", () => { + it("should render nothing if both URL & SPDX exists", () => { + const baseUrl = "/?url=/documents/features/license-openAPI31-error-both-identifier-and-url.yaml" + cy.visit(baseUrl) + .get(".info__license__identifier") + .should("not.exist") + .get(".info__license__url") + .should("not.exist") + }) + }) + }) +}) diff --git a/test/e2e-cypress/tests/features/schema-form-enum-boolean.js b/test/e2e-cypress/tests/features/schema-form-enum-boolean.js index d05da03f8dd..10c76723734 100644 --- a/test/e2e-cypress/tests/features/schema-form-enum-boolean.js +++ b/test/e2e-cypress/tests/features/schema-form-enum-boolean.js @@ -101,7 +101,7 @@ describe("JSON Schema Form: Enum & Boolean in a Parameter", () => { .should("not.have.class", "invalid") .should("not.contains.text", "expectIsOptional") // cURL component - cy.get(".responses-wrapper .curl-command") + cy.get(".responses-wrapper .curl-command") // hangs browser here .should("exist") .get(".responses-wrapper .curl-command span") .should("contains.text", "expectIsOptional=false") @@ -120,7 +120,7 @@ describe("JSON Schema Form: Enum & Boolean in a Parameter", () => { .should("not.have.class", "invalid") .should("not.contains.text", "expectIsOptional") // cURL component - cy.get(".responses-wrapper .curl-command") + cy.get(".responses-wrapper .curl-command") // hangs browser here .should("exist") .get(".responses-wrapper .curl-command span") .should("not.contains.text", "expectIsOptional") diff --git a/test/e2e-cypress/tests/features/webhooks.js b/test/e2e-cypress/tests/features/webhooks.js new file mode 100644 index 00000000000..a86d44bdfab --- /dev/null +++ b/test/e2e-cypress/tests/features/webhooks.js @@ -0,0 +1,26 @@ +describe("Render Webhooks Component", () => { + describe("OpenAPI 3.1.x", () => { + const baseUrl = "/?url=/documents/features/webhooks-openAPI31.yaml" + it("should render a heading", () => { + cy.visit(baseUrl) + .get(".webhooks") + .should("exist") + .should("contains.text", "Webhooks") + }) + it("should render an operation component", () => { + cy.visit(baseUrl) + .get(".webhooks #operations--postnewPet > .opblock-summary") + .should("exist") + .should("contains.text", "POST") + .should("contains.text", "newPet") + }) + }) + describe("OpenAPI 3.0.x", () => { + const baseUrl = "/?url=/documents/features/webhooks-openAPI31.yaml" + it("should render nothing", () => { + cy.visit(baseUrl) + .get(".webhooks") + .should("not.exist") + }) + }) +}) \ No newline at end of file diff --git a/test/unit/xss/anchor-target-rel/info.jsx b/test/unit/xss/anchor-target-rel/info.jsx index 085b9f079d6..75f2f15acd2 100644 --- a/test/unit/xss/anchor-target-rel/info.jsx +++ b/test/unit/xss/anchor-target-rel/info.jsx @@ -1,7 +1,7 @@ import React from "react" import { render } from "enzyme" import { fromJS } from "immutable" -import Info, { InfoUrl } from "components/info" +import Info, { InfoUrl, License } from "components/info" import { Link } from "components/layout-utils" import Markdown from "components/providers/markdown" @@ -10,6 +10,7 @@ describe(" Anchor Target Safety", function(){ const components = { Markdown, InfoUrl, + License, Link } const baseProps = { diff --git a/webpack/_config-builder.js b/webpack/_config-builder.js index 19f4a2949b2..1e85aaa466b 100644 --- a/webpack/_config-builder.js +++ b/webpack/_config-builder.js @@ -125,8 +125,8 @@ export default function buildConfig( performance: { hints: "error", - maxEntrypointSize: 1153434, - maxAssetSize: 1153434, + maxEntrypointSize: 13312000, + maxAssetSize: 133312000, }, optimization: {