mirror of
https://github.com/Redocly/redoc.git
synced 2024-11-22 00:26:34 +03:00
chore: fix vulnerabilities and upgrade deps (#2445)
* chore: fix vulnerabilities and upgrade deps * chore: use old version of cypress * fix: additional vulnerabilities
This commit is contained in:
parent
3f3f9551ee
commit
1f11f597c4
|
@ -1,58 +0,0 @@
|
||||||
module.exports = function(config) {
|
|
||||||
const testWebpackConfig = require('./build/webpack.test.js');
|
|
||||||
const travis = process.env.TRAVIS;
|
|
||||||
|
|
||||||
config.set({
|
|
||||||
frameworks: ['jasmine', 'sinon', 'should'],
|
|
||||||
preprocessors: {
|
|
||||||
'./tests/spec-bundle.js': ['coverage', 'webpack', 'sourcemap'],
|
|
||||||
},
|
|
||||||
|
|
||||||
coverageReporter: {
|
|
||||||
type: 'in-memory',
|
|
||||||
},
|
|
||||||
|
|
||||||
remapCoverageReporter: {
|
|
||||||
'text-summary': null,
|
|
||||||
'text-lcov': './coverage/lcov.info',
|
|
||||||
html: './coverage/html',
|
|
||||||
},
|
|
||||||
webpack: testWebpackConfig,
|
|
||||||
webpackMiddleware: {
|
|
||||||
stats: 'errors-only',
|
|
||||||
state: true,
|
|
||||||
},
|
|
||||||
client: {
|
|
||||||
chai: {
|
|
||||||
truncateThreshold: 0,
|
|
||||||
},
|
|
||||||
},
|
|
||||||
files: [
|
|
||||||
{ pattern: './tests/spec-bundle.js', watched: false },
|
|
||||||
{ pattern: 'tests/schemas/**/*.json', included: false },
|
|
||||||
{ pattern: 'tests/schemas/**/*.yml', included: false },
|
|
||||||
{ pattern: 'lib/**/*.html', included: false },
|
|
||||||
],
|
|
||||||
|
|
||||||
proxies: {
|
|
||||||
'/tests/schemas': '/base/tests/schemas',
|
|
||||||
'/lib/': '/base/lib/',
|
|
||||||
'/node_modules/': '/base/node_modules/',
|
|
||||||
},
|
|
||||||
colors: true,
|
|
||||||
singleRun: true,
|
|
||||||
reporters: travis
|
|
||||||
? ['mocha', 'coverage', 'remap-coverage', 'coveralls']
|
|
||||||
: ['mocha', 'coverage', 'remap-coverage'],
|
|
||||||
|
|
||||||
browsers: ['ChromeHeadlessNoSandbox'],
|
|
||||||
customLaunchers: {
|
|
||||||
ChromeHeadlessNoSandbox: {
|
|
||||||
base: 'ChromeHeadless',
|
|
||||||
flags: ['--no-sandbox']
|
|
||||||
}
|
|
||||||
},
|
|
||||||
|
|
||||||
browserNoActivityTimeout: 60000,
|
|
||||||
});
|
|
||||||
};
|
|
7821
package-lock.json
generated
7821
package-lock.json
generated
File diff suppressed because it is too large
Load Diff
36
package.json
36
package.json
|
@ -68,7 +68,7 @@
|
||||||
"@types/dompurify": "^2.2.2",
|
"@types/dompurify": "^2.2.2",
|
||||||
"@types/enzyme": "^3.10.5",
|
"@types/enzyme": "^3.10.5",
|
||||||
"@types/enzyme-to-json": "^1.5.3",
|
"@types/enzyme-to-json": "^1.5.3",
|
||||||
"@types/jest": "^26.0.23",
|
"@types/jest": "^29.5.6",
|
||||||
"@types/json-pointer": "^1.0.30",
|
"@types/json-pointer": "^1.0.30",
|
||||||
"@types/lunr": "^2.3.3",
|
"@types/lunr": "^2.3.3",
|
||||||
"@types/mark.js": "^8.11.5",
|
"@types/mark.js": "^8.11.5",
|
||||||
|
@ -83,14 +83,13 @@
|
||||||
"@types/webpack": "^5.28.0",
|
"@types/webpack": "^5.28.0",
|
||||||
"@types/webpack-env": "^1.18.0",
|
"@types/webpack-env": "^1.18.0",
|
||||||
"@types/yargs": "^17.0.0",
|
"@types/yargs": "^17.0.0",
|
||||||
"@typescript-eslint/eslint-plugin": "^4.26.0",
|
"@typescript-eslint/eslint-plugin": "^5.55.0",
|
||||||
"@typescript-eslint/parser": "^4.26.0",
|
"@typescript-eslint/parser": "^5.55.0",
|
||||||
"@wojtekmaj/enzyme-adapter-react-17": "^0.6.1",
|
"@wojtekmaj/enzyme-adapter-react-17": "^0.8.0",
|
||||||
"beautify-benchmark": "^0.2.4",
|
"beautify-benchmark": "^0.2.4",
|
||||||
"conventional-changelog-cli": "^3.0.0",
|
"conventional-changelog-cli": "^3.0.0",
|
||||||
"copy-webpack-plugin": "^9.0.0",
|
"copy-webpack-plugin": "^9.0.0",
|
||||||
"core-js": "^3.13.1",
|
"core-js": "^3.13.1",
|
||||||
"coveralls": "^3.1.1",
|
|
||||||
"css-loader": "^5.2.6",
|
"css-loader": "^5.2.6",
|
||||||
"cypress": "^13.1.0",
|
"cypress": "^13.1.0",
|
||||||
"enzyme": "^3.11.0",
|
"enzyme": "^3.11.0",
|
||||||
|
@ -103,11 +102,11 @@
|
||||||
"fork-ts-checker-webpack-plugin": "^6.2.10",
|
"fork-ts-checker-webpack-plugin": "^6.2.10",
|
||||||
"html-webpack-plugin": "^5.3.1",
|
"html-webpack-plugin": "^5.3.1",
|
||||||
"husky": "^7.0.0",
|
"husky": "^7.0.0",
|
||||||
"jest": "^27.0.3",
|
"jest": "^29.7.0",
|
||||||
"js-yaml": "^4.1.0",
|
"js-yaml": "^4.1.0",
|
||||||
"license-checker": "^25.0.1",
|
"license-checker": "^25.0.1",
|
||||||
"lodash.noop": "^3.0.1",
|
"lodash.noop": "^3.0.1",
|
||||||
"mobx": "^6.3.2",
|
"mobx": "^6.10.2",
|
||||||
"outdent": "^0.8.0",
|
"outdent": "^0.8.0",
|
||||||
"prettier": "^2.3.2",
|
"prettier": "^2.3.2",
|
||||||
"pretty-quick": "^3.0.0",
|
"pretty-quick": "^3.0.0",
|
||||||
|
@ -120,10 +119,10 @@
|
||||||
"size-limit": "^8.2.6",
|
"size-limit": "^8.2.6",
|
||||||
"style-loader": "^3.3.1",
|
"style-loader": "^3.3.1",
|
||||||
"styled-components": "^5.3.0",
|
"styled-components": "^5.3.0",
|
||||||
"ts-jest": "^27.0.2",
|
"ts-jest": "^29.1.1",
|
||||||
"ts-node": "^10.9.1",
|
"ts-node": "^10.9.1",
|
||||||
"tslib": "^2.4.0",
|
"tslib": "^2.4.0",
|
||||||
"typescript": "^4.8.4",
|
"typescript": "^5.2.2",
|
||||||
"unfetch": "^4.2.0",
|
"unfetch": "^4.2.0",
|
||||||
"url": "^0.11.1",
|
"url": "^0.11.1",
|
||||||
"webpack": "^5.88.2",
|
"webpack": "^5.88.2",
|
||||||
|
@ -140,26 +139,27 @@
|
||||||
"styled-components": "^4.1.1 || ^5.1.1 || ^6.0.5"
|
"styled-components": "^4.1.1 || ^5.1.1 || ^6.0.5"
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@redocly/openapi-core": "^1.0.0-rc.2",
|
"@redocly/openapi-core": "^1.4.0",
|
||||||
"classnames": "^2.3.1",
|
"classnames": "^2.3.2",
|
||||||
"decko": "^1.2.0",
|
"decko": "^1.2.0",
|
||||||
"dompurify": "^2.2.8",
|
"dompurify": "^3.0.6",
|
||||||
"eventemitter3": "^4.0.7",
|
"eventemitter3": "^5.0.1",
|
||||||
|
"jest-environment-jsdom": "^29.7.0",
|
||||||
"json-pointer": "^0.6.2",
|
"json-pointer": "^0.6.2",
|
||||||
"lunr": "^2.3.9",
|
"lunr": "^2.3.9",
|
||||||
"mark.js": "^8.11.1",
|
"mark.js": "^8.11.1",
|
||||||
"marked": "^4.0.15",
|
"marked": "^4.3.0",
|
||||||
"mobx-react": "^7.2.0",
|
"mobx-react": "^7.2.0",
|
||||||
"openapi-sampler": "^1.3.1",
|
"openapi-sampler": "^1.3.1",
|
||||||
"path-browserify": "^1.0.1",
|
"path-browserify": "^1.0.1",
|
||||||
"perfect-scrollbar": "^1.5.5",
|
"perfect-scrollbar": "^1.5.5",
|
||||||
"polished": "^4.1.3",
|
"polished": "^4.2.2",
|
||||||
"prismjs": "^1.27.0",
|
"prismjs": "^1.29.0",
|
||||||
"prop-types": "^15.7.2",
|
"prop-types": "^15.8.1",
|
||||||
"react-tabs": "^4.3.0",
|
"react-tabs": "^4.3.0",
|
||||||
"slugify": "~1.4.7",
|
"slugify": "~1.4.7",
|
||||||
"stickyfill": "^1.1.1",
|
"stickyfill": "^1.1.1",
|
||||||
"swagger2openapi": "^7.0.6",
|
"swagger2openapi": "^7.0.8",
|
||||||
"url-template": "^2.0.8"
|
"url-template": "^2.0.8"
|
||||||
},
|
},
|
||||||
"size-limit": [
|
"size-limit": [
|
||||||
|
|
|
@ -54,7 +54,7 @@ export function SecurityRequirements(props: SecurityRequirementsProps) {
|
||||||
</SecuritiesColumn>
|
</SecuritiesColumn>
|
||||||
</Wrap>
|
</Wrap>
|
||||||
{expanded &&
|
{expanded &&
|
||||||
operationSecuritySchemes?.length &&
|
!!operationSecuritySchemes?.length &&
|
||||||
operationSecuritySchemes.map((scheme, idx) => (
|
operationSecuritySchemes.map((scheme, idx) => (
|
||||||
<SecurityDetailsStyle key={idx}>
|
<SecurityDetailsStyle key={idx}>
|
||||||
<h5>
|
<h5>
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
import { default as classnames } from 'classnames';
|
import * as classnames from 'classnames';
|
||||||
import { darken } from 'polished';
|
import { darken } from 'polished';
|
||||||
|
|
||||||
import { deprecatedCss, ShelfIcon } from '../../common-elements';
|
import { deprecatedCss, ShelfIcon } from '../../common-elements';
|
||||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -1,23 +1,23 @@
|
||||||
// Jest Snapshot v1, https://goo.gl/fbAQLP
|
// Jest Snapshot v1, https://goo.gl/fbAQLP
|
||||||
|
|
||||||
exports[`SecurityRequirement should render SecurityDefs 1`] = `
|
exports[`SecurityRequirement should render SecurityDefs 1`] = `
|
||||||
"<div id=\\"section/Authentication/petstore_auth\\" data-section-id=\\"section/Authentication/petstore_auth\\" class=\\"sc-dcJsrY bBkGhy\\"><div class=\\"sc-kAyceB hBQWIZ\\"><div class=\\"sc-fqkvVR oJKYx\\"><h2 class=\\"sc-jXbUNg fWnwAh\\">petstore_auth</h2><div class=\\"sc-eeDRCY sc-eBMEME gTGgei fMmru\\"><p>Get access to data while protecting your account credentials.
|
"<div id="section/Authentication/petstore_auth" data-section-id="section/Authentication/petstore_auth" class="sc-dcJsrY bBkGhy"><div class="sc-kAyceB hBQWIZ"><div class="sc-fqkvVR oJKYx"><h2 class="sc-jXbUNg fWnwAh">petstore_auth</h2><div class="sc-eeDRCY sc-eBMEME gTGgei fMmru"><p>Get access to data while protecting your account credentials.
|
||||||
OAuth2 is also a safer and more secure way to give you access.</p>
|
OAuth2 is also a safer and more secure way to give you access.</p>
|
||||||
</div><div class=\\"sc-ejfMa-d a-DjBE\\"><div class=\\"sc-dkmUuB hFwAIA\\"><b>Security Scheme Type: </b><span>OAuth2</span></div><div class=\\"sc-eeDRCY sc-eBMEME gTGgei fMmru\\"><div class=\\"sc-dkmUuB hFwAIA\\"><b>Flow type: </b><code>implicit </code></div><div class=\\"sc-dkmUuB hFwAIA\\"><strong> Authorization URL: </strong><code><a target=\\"_blank\\" rel=\\"noopener noreferrer\\" href=\\"http://petstore.swagger.io/api/oauth/dialog\\">http://petstore.swagger.io/api/oauth/dialog</a></code></div><div class=\\"sc-dkmUuB hFwAIA\\"><b> Scopes: </b></div><div class=\\"sc-iEXKAA blExNw container\\" style=\\"height: 4em;\\"><ul><li><code>write:pets</code> - <div class=\\"sc-eeDRCY sc-eBMEME gTGgei fMmru sc-fhzFiK hXtrri redoc-markdown\\"><p>modify pets in your account</p>
|
</div><div class="sc-ejfMa-d a-DjBE"><div class="sc-dkmUuB hFwAIA"><b>Security Scheme Type: </b><span>OAuth2</span></div><div class="sc-eeDRCY sc-eBMEME gTGgei fMmru"><div class="sc-dkmUuB hFwAIA"><b>Flow type: </b><code>implicit </code></div><div class="sc-dkmUuB hFwAIA"><strong> Authorization URL: </strong><code><a target="_blank" rel="noopener noreferrer" href="http://petstore.swagger.io/api/oauth/dialog">http://petstore.swagger.io/api/oauth/dialog</a></code></div><div class="sc-dkmUuB hFwAIA"><b> Scopes: </b></div><div class="sc-iEXKAA blExNw container" style="height: 4em;"><ul><li><code>write:pets</code> - <div class="sc-eeDRCY sc-eBMEME gTGgei fMmru sc-fhzFiK hXtrri redoc-markdown"><p>modify pets in your account</p>
|
||||||
</div></li><li><code>read:pets</code> - <div class=\\"sc-eeDRCY sc-eBMEME gTGgei fMmru sc-fhzFiK hXtrri redoc-markdown\\"><p>read your pets</p>
|
</div></li><li><code>read:pets</code> - <div class="sc-eeDRCY sc-eBMEME gTGgei fMmru sc-fhzFiK hXtrri redoc-markdown"><p>read your pets</p>
|
||||||
</div></li></ul></div><div class=\\"sc-EgOXT bNSpXO\\"></div></div></div></div></div></div><div id=\\"section/Authentication/GitLab_PersonalAccessToken\\" data-section-id=\\"section/Authentication/GitLab_PersonalAccessToken\\" class=\\"sc-dcJsrY bBkGhy\\"><div class=\\"sc-kAyceB hBQWIZ\\"><div class=\\"sc-fqkvVR oJKYx\\"><h2 class=\\"sc-jXbUNg fWnwAh\\">GitLab_PersonalAccessToken</h2><div class=\\"sc-eeDRCY sc-eBMEME gTGgei fMmru\\"><p>GitLab Personal Access Token description</p>
|
</div></li></ul></div><div class="sc-EgOXT bNSpXO"></div></div></div></div></div></div><div id="section/Authentication/GitLab_PersonalAccessToken" data-section-id="section/Authentication/GitLab_PersonalAccessToken" class="sc-dcJsrY bBkGhy"><div class="sc-kAyceB hBQWIZ"><div class="sc-fqkvVR oJKYx"><h2 class="sc-jXbUNg fWnwAh">GitLab_PersonalAccessToken</h2><div class="sc-eeDRCY sc-eBMEME gTGgei fMmru"><p>GitLab Personal Access Token description</p>
|
||||||
</div><div class=\\"sc-ejfMa-d a-DjBE\\"><div class=\\"sc-dkmUuB hFwAIA\\"><b>Security Scheme Type: </b><span>API Key</span></div><div class=\\"sc-eeDRCY sc-eBMEME gTGgei fMmru\\"><div class=\\"sc-dkmUuB hFwAIA\\"><b>Header parameter name: </b><code>PRIVATE-TOKEN</code></div></div></div></div></div></div><div id=\\"section/Authentication/GitLab_OpenIdConnect\\" data-section-id=\\"section/Authentication/GitLab_OpenIdConnect\\" class=\\"sc-dcJsrY bBkGhy\\"><div class=\\"sc-kAyceB hBQWIZ\\"><div class=\\"sc-fqkvVR oJKYx\\"><h2 class=\\"sc-jXbUNg fWnwAh\\">GitLab_OpenIdConnect</h2><div class=\\"sc-eeDRCY sc-eBMEME gTGgei fMmru\\"><p>GitLab OpenIdConnect description</p>
|
</div><div class="sc-ejfMa-d a-DjBE"><div class="sc-dkmUuB hFwAIA"><b>Security Scheme Type: </b><span>API Key</span></div><div class="sc-eeDRCY sc-eBMEME gTGgei fMmru"><div class="sc-dkmUuB hFwAIA"><b>Header parameter name: </b><code>PRIVATE-TOKEN</code></div></div></div></div></div></div><div id="section/Authentication/GitLab_OpenIdConnect" data-section-id="section/Authentication/GitLab_OpenIdConnect" class="sc-dcJsrY bBkGhy"><div class="sc-kAyceB hBQWIZ"><div class="sc-fqkvVR oJKYx"><h2 class="sc-jXbUNg fWnwAh">GitLab_OpenIdConnect</h2><div class="sc-eeDRCY sc-eBMEME gTGgei fMmru"><p>GitLab OpenIdConnect description</p>
|
||||||
</div><div class=\\"sc-ejfMa-d a-DjBE\\"><div class=\\"sc-dkmUuB hFwAIA\\"><b>Security Scheme Type: </b><span>OpenID Connect</span></div><div class=\\"sc-eeDRCY sc-eBMEME gTGgei fMmru\\"><div class=\\"sc-dkmUuB hFwAIA\\"><b>Connect URL: </b><code><a target=\\"_blank\\" rel=\\"noopener noreferrer\\" href=\\"https://gitlab.com/.well-known/openid-configuration\\">https://gitlab.com/.well-known/openid-configuration</a></code></div></div></div></div></div></div><div id=\\"section/Authentication/basicAuth\\" data-section-id=\\"section/Authentication/basicAuth\\" class=\\"sc-dcJsrY bBkGhy\\"><div class=\\"sc-kAyceB hBQWIZ\\"><div class=\\"sc-fqkvVR oJKYx\\"><h2 class=\\"sc-jXbUNg fWnwAh\\">basicAuth</h2><div class=\\"sc-eeDRCY sc-eBMEME gTGgei fMmru\\"></div><div class=\\"sc-ejfMa-d a-DjBE\\"><div class=\\"sc-dkmUuB hFwAIA\\"><b>Security Scheme Type: </b><span>HTTP</span></div><div class=\\"sc-eeDRCY sc-eBMEME gTGgei fMmru\\"><div class=\\"sc-dkmUuB hFwAIA\\"><b>HTTP Authorization Scheme: </b><code>basic</code></div><div class=\\"sc-dkmUuB hFwAIA\\"></div></div></div></div></div></div>"
|
</div><div class="sc-ejfMa-d a-DjBE"><div class="sc-dkmUuB hFwAIA"><b>Security Scheme Type: </b><span>OpenID Connect</span></div><div class="sc-eeDRCY sc-eBMEME gTGgei fMmru"><div class="sc-dkmUuB hFwAIA"><b>Connect URL: </b><code><a target="_blank" rel="noopener noreferrer" href="https://gitlab.com/.well-known/openid-configuration">https://gitlab.com/.well-known/openid-configuration</a></code></div></div></div></div></div></div><div id="section/Authentication/basicAuth" data-section-id="section/Authentication/basicAuth" class="sc-dcJsrY bBkGhy"><div class="sc-kAyceB hBQWIZ"><div class="sc-fqkvVR oJKYx"><h2 class="sc-jXbUNg fWnwAh">basicAuth</h2><div class="sc-eeDRCY sc-eBMEME gTGgei fMmru"></div><div class="sc-ejfMa-d a-DjBE"><div class="sc-dkmUuB hFwAIA"><b>Security Scheme Type: </b><span>HTTP</span></div><div class="sc-eeDRCY sc-eBMEME gTGgei fMmru"><div class="sc-dkmUuB hFwAIA"><b>HTTP Authorization Scheme: </b><code>basic</code></div><div class="sc-dkmUuB hFwAIA"></div></div></div></div></div></div>"
|
||||||
`;
|
`;
|
||||||
|
|
||||||
exports[`SecurityRequirement should render authDefinition 1`] = `"<div class=\\"sc-bDumWk iWBBny\\"><div class=\\"sc-sLsrZ hgeUJn\\"><h5 class=\\"sc-dAlyuH sc-fifgRP jbQuod kWJur\\">Authorizations:</h5><svg class=\\"sc-cwHptR iZRiKW\\" version=\\"1.1\\" viewBox=\\"0 0 24 24\\" x=\\"0\\" xmlns=\\"http://www.w3.org/2000/svg\\" y=\\"0\\" aria-hidden=\\"true\\"><polygon points=\\"17.3 8.3 12 13.6 6.7 8.3 5.3 9.7 12 16.4 18.7 9.7 \\"></polygon></svg></div><div class=\\"sc-dBmzty eoFcYg\\"><span class=\\"sc-kbousE cpXQuZ\\">(<span class=\\"sc-gfoqjT kbvnry\\">API Key: <i>GitLab_PersonalAccessToken</i></span><span class=\\"sc-gfoqjT kbvnry\\">OpenID Connect: <i>GitLab_OpenIdConnect</i></span><span class=\\"sc-gfoqjT kbvnry\\">HTTP: <i>basicAuth</i></span>) </span><span class=\\"sc-kbousE cpXQuZ\\"><span class=\\"sc-gfoqjT kbvnry\\">OAuth2: <i>petstore_auth</i></span></span></div></div>,"`;
|
exports[`SecurityRequirement should render authDefinition 1`] = `"<div class="sc-bDumWk iWBBny"><div class="sc-sLsrZ hgeUJn"><h5 class="sc-dAlyuH sc-fifgRP jbQuod kWJur">Authorizations:</h5><svg class="sc-cwHptR iZRiKW" version="1.1" viewBox="0 0 24 24" x="0" xmlns="http://www.w3.org/2000/svg" y="0" aria-hidden="true"><polygon points="17.3 8.3 12 13.6 6.7 8.3 5.3 9.7 12 16.4 18.7 9.7 "></polygon></svg></div><div class="sc-dBmzty eoFcYg"><span class="sc-kbousE cpXQuZ">(<span class="sc-gfoqjT kbvnry">API Key: <i>GitLab_PersonalAccessToken</i></span><span class="sc-gfoqjT kbvnry">OpenID Connect: <i>GitLab_OpenIdConnect</i></span><span class="sc-gfoqjT kbvnry">HTTP: <i>basicAuth</i></span>) </span><span class="sc-kbousE cpXQuZ"><span class="sc-gfoqjT kbvnry">OAuth2: <i>petstore_auth</i></span></span></div></div>,"`;
|
||||||
|
|
||||||
exports[`SecurityRequirement should render authDefinition 2`] = `
|
exports[`SecurityRequirement should render authDefinition 2`] = `
|
||||||
"<div class=\\"sc-bDumWk gtsPcy\\"><div class=\\"sc-sLsrZ hgeUJn\\"><h5 class=\\"sc-dAlyuH sc-fifgRP jbQuod kWJur\\">Authorizations:</h5><svg class=\\"sc-cwHptR dSJqIk\\" version=\\"1.1\\" viewBox=\\"0 0 24 24\\" x=\\"0\\" xmlns=\\"http://www.w3.org/2000/svg\\" y=\\"0\\" aria-hidden=\\"true\\"><polygon points=\\"17.3 8.3 12 13.6 6.7 8.3 5.3 9.7 12 16.4 18.7 9.7 \\"></polygon></svg></div><div class=\\"sc-dBmzty llvZdI\\"><span class=\\"sc-kbousE dOwJQz\\">(<span class=\\"sc-gfoqjT kbvnry\\">API Key: <i>GitLab_PersonalAccessToken</i></span><span class=\\"sc-gfoqjT kbvnry\\">OpenID Connect: <i>GitLab_OpenIdConnect</i></span><span class=\\"sc-gfoqjT kbvnry\\">HTTP: <i>basicAuth</i></span>) </span><span class=\\"sc-kbousE dOwJQz\\"><span class=\\"sc-gfoqjT kbvnry\\">OAuth2: <i>petstore_auth</i> (<code class=\\"sc-eyvILC bzHwfc\\">write:pets</code><code class=\\"sc-eyvILC bzHwfc\\">read:pets</code>) </span></span></div></div><div class=\\"sc-ejfMa-d a-DjBE\\"><h5><svg xmlns=\\"http://www.w3.org/2000/svg\\" viewBox=\\"0 0 24 24\\" width=\\"11\\" height=\\"11\\"><path fill=\\"currentColor\\" d=\\"M18 10V6A6 6 0 0 0 6 6v4H3v14h18V10h-3zM8 6c0-2.206 1.794-4 4-4s4 1.794 4 4v4H8V6zm11 16H5V12h14v10z\\"></path></svg> OAuth2: petstore_auth</h5><div class=\\"sc-eeDRCY sc-eBMEME gTGgei fMmru\\"><p>Get access to data while protecting your account credentials.
|
"<div class="sc-bDumWk gtsPcy"><div class="sc-sLsrZ hgeUJn"><h5 class="sc-dAlyuH sc-fifgRP jbQuod kWJur">Authorizations:</h5><svg class="sc-cwHptR dSJqIk" version="1.1" viewBox="0 0 24 24" x="0" xmlns="http://www.w3.org/2000/svg" y="0" aria-hidden="true"><polygon points="17.3 8.3 12 13.6 6.7 8.3 5.3 9.7 12 16.4 18.7 9.7 "></polygon></svg></div><div class="sc-dBmzty llvZdI"><span class="sc-kbousE dOwJQz">(<span class="sc-gfoqjT kbvnry">API Key: <i>GitLab_PersonalAccessToken</i></span><span class="sc-gfoqjT kbvnry">OpenID Connect: <i>GitLab_OpenIdConnect</i></span><span class="sc-gfoqjT kbvnry">HTTP: <i>basicAuth</i></span>) </span><span class="sc-kbousE dOwJQz"><span class="sc-gfoqjT kbvnry">OAuth2: <i>petstore_auth</i> (<code class="sc-eyvILC bzHwfc">write:pets</code><code class="sc-eyvILC bzHwfc">read:pets</code>) </span></span></div></div><div class="sc-ejfMa-d a-DjBE"><h5><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" width="11" height="11"><path fill="currentColor" d="M18 10V6A6 6 0 0 0 6 6v4H3v14h18V10h-3zM8 6c0-2.206 1.794-4 4-4s4 1.794 4 4v4H8V6zm11 16H5V12h14v10z"></path></svg> OAuth2: petstore_auth</h5><div class="sc-eeDRCY sc-eBMEME gTGgei fMmru"><p>Get access to data while protecting your account credentials.
|
||||||
OAuth2 is also a safer and more secure way to give you access.</p>
|
OAuth2 is also a safer and more secure way to give you access.</p>
|
||||||
</div><div class=\\"sc-eeDRCY sc-eBMEME gTGgei fMmru\\"><div class=\\"sc-dkmUuB hFwAIA\\"><b>Flow type: </b><code>implicit </code></div><div class=\\"sc-dkmUuB hFwAIA\\"><strong> Authorization URL: </strong><code><a target=\\"_blank\\" rel=\\"noopener noreferrer\\" href=\\"http://petstore.swagger.io/api/oauth/dialog\\">http://petstore.swagger.io/api/oauth/dialog</a></code></div><div><b>Required scopes: </b><code>write:pets</code> <code>read:pets</code> </div><div class=\\"sc-dkmUuB hFwAIA\\"><b> Scopes: </b></div><div class=\\"sc-iEXKAA blExNw container\\" style=\\"height: 4em;\\"><ul><li><code>write:pets</code> - <div class=\\"sc-eeDRCY sc-eBMEME gTGgei fMmru sc-fhzFiK hXtrri redoc-markdown\\"><p>modify pets in your account</p>
|
</div><div class="sc-eeDRCY sc-eBMEME gTGgei fMmru"><div class="sc-dkmUuB hFwAIA"><b>Flow type: </b><code>implicit </code></div><div class="sc-dkmUuB hFwAIA"><strong> Authorization URL: </strong><code><a target="_blank" rel="noopener noreferrer" href="http://petstore.swagger.io/api/oauth/dialog">http://petstore.swagger.io/api/oauth/dialog</a></code></div><div><b>Required scopes: </b><code>write:pets</code> <code>read:pets</code> </div><div class="sc-dkmUuB hFwAIA"><b> Scopes: </b></div><div class="sc-iEXKAA blExNw container" style="height: 4em;"><ul><li><code>write:pets</code> - <div class="sc-eeDRCY sc-eBMEME gTGgei fMmru sc-fhzFiK hXtrri redoc-markdown"><p>modify pets in your account</p>
|
||||||
</div></li><li><code>read:pets</code> - <div class=\\"sc-eeDRCY sc-eBMEME gTGgei fMmru sc-fhzFiK hXtrri redoc-markdown\\"><p>read your pets</p>
|
</div></li><li><code>read:pets</code> - <div class="sc-eeDRCY sc-eBMEME gTGgei fMmru sc-fhzFiK hXtrri redoc-markdown"><p>read your pets</p>
|
||||||
</div></li></ul></div><div class=\\"sc-EgOXT bNSpXO\\"></div></div></div><div class=\\"sc-ejfMa-d a-DjBE\\"><h5><svg xmlns=\\"http://www.w3.org/2000/svg\\" viewBox=\\"0 0 24 24\\" width=\\"11\\" height=\\"11\\"><path fill=\\"currentColor\\" d=\\"M18 10V6A6 6 0 0 0 6 6v4H3v14h18V10h-3zM8 6c0-2.206 1.794-4 4-4s4 1.794 4 4v4H8V6zm11 16H5V12h14v10z\\"></path></svg> API Key: GitLab_PersonalAccessToken</h5><div class=\\"sc-eeDRCY sc-eBMEME gTGgei fMmru\\"><p>GitLab Personal Access Token description</p>
|
</div></li></ul></div><div class="sc-EgOXT bNSpXO"></div></div></div><div class="sc-ejfMa-d a-DjBE"><h5><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" width="11" height="11"><path fill="currentColor" d="M18 10V6A6 6 0 0 0 6 6v4H3v14h18V10h-3zM8 6c0-2.206 1.794-4 4-4s4 1.794 4 4v4H8V6zm11 16H5V12h14v10z"></path></svg> API Key: GitLab_PersonalAccessToken</h5><div class="sc-eeDRCY sc-eBMEME gTGgei fMmru"><p>GitLab Personal Access Token description</p>
|
||||||
</div><div class=\\"sc-eeDRCY sc-eBMEME gTGgei fMmru\\"><div class=\\"sc-dkmUuB hFwAIA\\"><b>Header parameter name: </b><code>PRIVATE-TOKEN</code></div></div></div><div class=\\"sc-ejfMa-d a-DjBE\\"><h5><svg xmlns=\\"http://www.w3.org/2000/svg\\" viewBox=\\"0 0 24 24\\" width=\\"11\\" height=\\"11\\"><path fill=\\"currentColor\\" d=\\"M18 10V6A6 6 0 0 0 6 6v4H3v14h18V10h-3zM8 6c0-2.206 1.794-4 4-4s4 1.794 4 4v4H8V6zm11 16H5V12h14v10z\\"></path></svg> OpenID Connect: GitLab_OpenIdConnect</h5><div class=\\"sc-eeDRCY sc-eBMEME gTGgei fMmru\\"><p>GitLab OpenIdConnect description</p>
|
</div><div class="sc-eeDRCY sc-eBMEME gTGgei fMmru"><div class="sc-dkmUuB hFwAIA"><b>Header parameter name: </b><code>PRIVATE-TOKEN</code></div></div></div><div class="sc-ejfMa-d a-DjBE"><h5><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" width="11" height="11"><path fill="currentColor" d="M18 10V6A6 6 0 0 0 6 6v4H3v14h18V10h-3zM8 6c0-2.206 1.794-4 4-4s4 1.794 4 4v4H8V6zm11 16H5V12h14v10z"></path></svg> OpenID Connect: GitLab_OpenIdConnect</h5><div class="sc-eeDRCY sc-eBMEME gTGgei fMmru"><p>GitLab OpenIdConnect description</p>
|
||||||
</div><div class=\\"sc-eeDRCY sc-eBMEME gTGgei fMmru\\"><div class=\\"sc-dkmUuB hFwAIA\\"><b>Connect URL: </b><code><a target=\\"_blank\\" rel=\\"noopener noreferrer\\" href=\\"https://gitlab.com/.well-known/openid-configuration\\">https://gitlab.com/.well-known/openid-configuration</a></code></div></div></div><div class=\\"sc-ejfMa-d a-DjBE\\"><h5><svg xmlns=\\"http://www.w3.org/2000/svg\\" viewBox=\\"0 0 24 24\\" width=\\"11\\" height=\\"11\\"><path fill=\\"currentColor\\" d=\\"M18 10V6A6 6 0 0 0 6 6v4H3v14h18V10h-3zM8 6c0-2.206 1.794-4 4-4s4 1.794 4 4v4H8V6zm11 16H5V12h14v10z\\"></path></svg> HTTP: basicAuth</h5><div class=\\"sc-eeDRCY sc-eBMEME gTGgei fMmru\\"></div><div class=\\"sc-eeDRCY sc-eBMEME gTGgei fMmru\\"><div class=\\"sc-dkmUuB hFwAIA\\"><b>HTTP Authorization Scheme: </b><code>basic</code></div><div class=\\"sc-dkmUuB hFwAIA\\"></div></div></div>,"
|
</div><div class="sc-eeDRCY sc-eBMEME gTGgei fMmru"><div class="sc-dkmUuB hFwAIA"><b>Connect URL: </b><code><a target="_blank" rel="noopener noreferrer" href="https://gitlab.com/.well-known/openid-configuration">https://gitlab.com/.well-known/openid-configuration</a></code></div></div></div><div class="sc-ejfMa-d a-DjBE"><h5><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" width="11" height="11"><path fill="currentColor" d="M18 10V6A6 6 0 0 0 6 6v4H3v14h18V10h-3zM8 6c0-2.206 1.794-4 4-4s4 1.794 4 4v4H8V6zm11 16H5V12h14v10z"></path></svg> HTTP: basicAuth</h5><div class="sc-eeDRCY sc-eBMEME gTGgei fMmru"></div><div class="sc-eeDRCY sc-eBMEME gTGgei fMmru"><div class="sc-dkmUuB hFwAIA"><b>HTTP Authorization Scheme: </b><code>basic</code></div><div class="sc-dkmUuB hFwAIA"></div></div></div>,"
|
||||||
`;
|
`;
|
||||||
|
|
|
@ -50,7 +50,7 @@ export class OpenAPIParser {
|
||||||
/**
|
/**
|
||||||
* get spec part by JsonPointer ($ref)
|
* get spec part by JsonPointer ($ref)
|
||||||
*/
|
*/
|
||||||
byRef = <T extends any = any>(ref: string): T | undefined => {
|
byRef = <T = any>(ref: string): T | undefined => {
|
||||||
let res;
|
let res;
|
||||||
if (!this.spec) {
|
if (!this.spec) {
|
||||||
return;
|
return;
|
||||||
|
@ -70,7 +70,7 @@ export class OpenAPIParser {
|
||||||
/**
|
/**
|
||||||
* checks if the object is OpenAPI reference (contains $ref property)
|
* checks if the object is OpenAPI reference (contains $ref property)
|
||||||
*/
|
*/
|
||||||
isRef<T extends unknown>(obj: OpenAPIRef | T): obj is OpenAPIRef {
|
isRef<T>(obj: OpenAPIRef | T): obj is OpenAPIRef {
|
||||||
if (!obj) {
|
if (!obj) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
@ -84,7 +84,7 @@ export class OpenAPIParser {
|
||||||
* @param forceCircular whether to dereference even if it is circular ref
|
* @param forceCircular whether to dereference even if it is circular ref
|
||||||
* @param mergeAsAllOf
|
* @param mergeAsAllOf
|
||||||
*/
|
*/
|
||||||
deref<T extends unknown>(
|
deref<T>(
|
||||||
obj: OpenAPIRef | T,
|
obj: OpenAPIRef | T,
|
||||||
baseRefsStack: string[] = [],
|
baseRefsStack: string[] = [],
|
||||||
mergeAsAllOf = false,
|
mergeAsAllOf = false,
|
||||||
|
@ -124,7 +124,7 @@ export class OpenAPIParser {
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
mergeRefs<T extends unknown>(ref: OpenAPIRef, resolved: T, mergeAsAllOf: boolean): T {
|
mergeRefs<T>(ref: OpenAPIRef, resolved: T, mergeAsAllOf: boolean): T {
|
||||||
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
||||||
const { $ref, ...rest } = ref;
|
const { $ref, ...rest } = ref;
|
||||||
const keys = Object.keys(rest);
|
const keys = Object.keys(rest);
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
import { bind } from 'decko';
|
import { bind } from 'decko';
|
||||||
import * as EventEmitter from 'eventemitter3';
|
import { EventEmitter } from 'eventemitter3';
|
||||||
|
|
||||||
import { IS_BROWSER, querySelector, Throttle } from '../utils';
|
import { IS_BROWSER, querySelector, Throttle } from '../utils';
|
||||||
import type { RedocNormalizedOptions } from './RedocNormalizedOptions';
|
import type { RedocNormalizedOptions } from './RedocNormalizedOptions';
|
||||||
|
|
|
@ -1,13 +1,13 @@
|
||||||
// Jest Snapshot v1, https://goo.gl/fbAQLP
|
// Jest Snapshot v1, https://goo.gl/fbAQLP
|
||||||
|
|
||||||
exports[`Models Schema should correct resolve double $ref if no need sibling 1`] = `
|
exports[`Models Schema should correct resolve double $ref if no need sibling 1`] = `
|
||||||
Object {
|
{
|
||||||
"refsStack": Array [
|
"refsStack": [
|
||||||
"#/components/schemas/Parent",
|
"#/components/schemas/Parent",
|
||||||
],
|
],
|
||||||
"resolved": Object {
|
"resolved": {
|
||||||
"properties": Object {
|
"properties": {
|
||||||
"test": Object {
|
"test": {
|
||||||
"type": "string",
|
"type": "string",
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
@ -17,38 +17,38 @@ Object {
|
||||||
`;
|
`;
|
||||||
|
|
||||||
exports[`Models Schema should hoist oneOfs when mergin allOf 1`] = `
|
exports[`Models Schema should hoist oneOfs when mergin allOf 1`] = `
|
||||||
Object {
|
{
|
||||||
"oneOf": Array [
|
"oneOf": [
|
||||||
Object {
|
{
|
||||||
"allOf": Array [
|
"allOf": [
|
||||||
Object {
|
{
|
||||||
"properties": Object {
|
"properties": {
|
||||||
"username": Object {
|
"username": {
|
||||||
"description": "The user's name",
|
"description": "The user's name",
|
||||||
"type": "string",
|
"type": "string",
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
Object {
|
{
|
||||||
"properties": Object {
|
"properties": {
|
||||||
"extra": Object {
|
"extra": {
|
||||||
"type": "string",
|
"type": "string",
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
Object {
|
{
|
||||||
"oneOf": Array [
|
"oneOf": [
|
||||||
Object {
|
{
|
||||||
"properties": Object {
|
"properties": {
|
||||||
"password": Object {
|
"password": {
|
||||||
"description": "The user's password",
|
"description": "The user's password",
|
||||||
"type": "string",
|
"type": "string",
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
Object {
|
{
|
||||||
"properties": Object {
|
"properties": {
|
||||||
"mobile": Object {
|
"mobile": {
|
||||||
"description": "The user's mobile",
|
"description": "The user's mobile",
|
||||||
"type": "string",
|
"type": "string",
|
||||||
},
|
},
|
||||||
|
@ -59,36 +59,36 @@ Object {
|
||||||
],
|
],
|
||||||
"x-refsStack": undefined,
|
"x-refsStack": undefined,
|
||||||
},
|
},
|
||||||
Object {
|
{
|
||||||
"allOf": Array [
|
"allOf": [
|
||||||
Object {
|
{
|
||||||
"properties": Object {
|
"properties": {
|
||||||
"email": Object {
|
"email": {
|
||||||
"description": "The user's email",
|
"description": "The user's email",
|
||||||
"type": "string",
|
"type": "string",
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
Object {
|
{
|
||||||
"properties": Object {
|
"properties": {
|
||||||
"extra": Object {
|
"extra": {
|
||||||
"type": "string",
|
"type": "string",
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
Object {
|
{
|
||||||
"oneOf": Array [
|
"oneOf": [
|
||||||
Object {
|
{
|
||||||
"properties": Object {
|
"properties": {
|
||||||
"password": Object {
|
"password": {
|
||||||
"description": "The user's password",
|
"description": "The user's password",
|
||||||
"type": "string",
|
"type": "string",
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
Object {
|
{
|
||||||
"properties": Object {
|
"properties": {
|
||||||
"mobile": Object {
|
"mobile": {
|
||||||
"description": "The user's mobile",
|
"description": "The user's mobile",
|
||||||
"type": "string",
|
"type": "string",
|
||||||
},
|
},
|
||||||
|
@ -104,11 +104,11 @@ Object {
|
||||||
`;
|
`;
|
||||||
|
|
||||||
exports[`Models Schema should override description from $ref of the referenced component, when sibling description exists 1`] = `
|
exports[`Models Schema should override description from $ref of the referenced component, when sibling description exists 1`] = `
|
||||||
Object {
|
{
|
||||||
"refsStack": Array [
|
"refsStack": [
|
||||||
"#/components/schemas/Test",
|
"#/components/schemas/Test",
|
||||||
],
|
],
|
||||||
"resolved": Object {
|
"resolved": {
|
||||||
"description": "Overriden description",
|
"description": "Overriden description",
|
||||||
"type": "object",
|
"type": "object",
|
||||||
},
|
},
|
||||||
|
|
|
@ -1,3 +1,3 @@
|
||||||
// Jest Snapshot v1, https://goo.gl/fbAQLP
|
// Jest Snapshot v1, https://goo.gl/fbAQLP
|
||||||
|
|
||||||
exports[`prism.js helpers highlight js code 1`] = `"<span class=\\"token keyword\\">const</span> t <span class=\\"token operator\\">=</span> <span class=\\"token number\\">10</span><span class=\\"token punctuation\\">;</span>"`;
|
exports[`prism.js helpers highlight js code 1`] = `"<span class="token keyword">const</span> t <span class="token operator">=</span> <span class="token number">10</span><span class="token punctuation">;</span>"`;
|
||||||
|
|
|
@ -1,11 +1,11 @@
|
||||||
// Jest Snapshot v1, https://goo.gl/fbAQLP
|
// Jest Snapshot v1, https://goo.gl/fbAQLP
|
||||||
|
|
||||||
exports[`Models Schema schemaDefinition should resolve field with conditional operators 1`] = `
|
exports[`Models Schema schemaDefinition should resolve field with conditional operators 1`] = `
|
||||||
Object {
|
{
|
||||||
"allOf": undefined,
|
"allOf": undefined,
|
||||||
"default": undefined,
|
"default": undefined,
|
||||||
"description": undefined,
|
"description": undefined,
|
||||||
"items": Object {
|
"items": {
|
||||||
"allOf": undefined,
|
"allOf": undefined,
|
||||||
"description": undefined,
|
"description": undefined,
|
||||||
"format": "url",
|
"format": "url",
|
||||||
|
@ -14,7 +14,7 @@ Object {
|
||||||
"type": "string",
|
"type": "string",
|
||||||
"writeOnly": undefined,
|
"writeOnly": undefined,
|
||||||
"x-circular-ref": undefined,
|
"x-circular-ref": undefined,
|
||||||
"x-parentRefs": Array [],
|
"x-parentRefs": [],
|
||||||
},
|
},
|
||||||
"maxItems": 20,
|
"maxItems": 20,
|
||||||
"minItems": 1,
|
"minItems": 1,
|
||||||
|
@ -24,16 +24,16 @@ Object {
|
||||||
"writeOnly": undefined,
|
"writeOnly": undefined,
|
||||||
"x-circular-ref": undefined,
|
"x-circular-ref": undefined,
|
||||||
"x-displayName": "isString",
|
"x-displayName": "isString",
|
||||||
"x-parentRefs": Array [],
|
"x-parentRefs": [],
|
||||||
}
|
}
|
||||||
`;
|
`;
|
||||||
|
|
||||||
exports[`Models Schema schemaDefinition should resolve field with conditional operators 2`] = `
|
exports[`Models Schema schemaDefinition should resolve field with conditional operators 2`] = `
|
||||||
Object {
|
{
|
||||||
"allOf": undefined,
|
"allOf": undefined,
|
||||||
"default": undefined,
|
"default": undefined,
|
||||||
"description": undefined,
|
"description": undefined,
|
||||||
"items": Object {
|
"items": {
|
||||||
"allOf": undefined,
|
"allOf": undefined,
|
||||||
"description": undefined,
|
"description": undefined,
|
||||||
"format": "url",
|
"format": "url",
|
||||||
|
@ -42,14 +42,14 @@ Object {
|
||||||
"type": "string",
|
"type": "string",
|
||||||
"writeOnly": undefined,
|
"writeOnly": undefined,
|
||||||
"x-circular-ref": undefined,
|
"x-circular-ref": undefined,
|
||||||
"x-parentRefs": Array [],
|
"x-parentRefs": [],
|
||||||
},
|
},
|
||||||
"maxItems": 10,
|
"maxItems": 10,
|
||||||
"minItems": 1,
|
"minItems": 1,
|
||||||
"pattern": "\\\\d+",
|
"pattern": "\\d+",
|
||||||
"readOnly": undefined,
|
"readOnly": undefined,
|
||||||
"title": "notString",
|
"title": "notString",
|
||||||
"type": Array [
|
"type": [
|
||||||
"string",
|
"string",
|
||||||
"integer",
|
"integer",
|
||||||
"null",
|
"null",
|
||||||
|
@ -57,23 +57,23 @@ Object {
|
||||||
"writeOnly": undefined,
|
"writeOnly": undefined,
|
||||||
"x-circular-ref": undefined,
|
"x-circular-ref": undefined,
|
||||||
"x-displayName": "notString",
|
"x-displayName": "notString",
|
||||||
"x-parentRefs": Array [],
|
"x-parentRefs": [],
|
||||||
}
|
}
|
||||||
`;
|
`;
|
||||||
|
|
||||||
exports[`Models Schema schemaDefinition should resolve schema with conditional operators 1`] = `
|
exports[`Models Schema schemaDefinition should resolve schema with conditional operators 1`] = `
|
||||||
Object {
|
{
|
||||||
"allOf": undefined,
|
"allOf": undefined,
|
||||||
"description": undefined,
|
"description": undefined,
|
||||||
"maxItems": 2,
|
"maxItems": 2,
|
||||||
"properties": Object {
|
"properties": {
|
||||||
"test": Object {
|
"test": {
|
||||||
"allOf": undefined,
|
"allOf": undefined,
|
||||||
"description": "The list of URL to a cute photos featuring pet",
|
"description": "The list of URL to a cute photos featuring pet",
|
||||||
"enum": Array [
|
"enum": [
|
||||||
10,
|
10,
|
||||||
],
|
],
|
||||||
"items": Object {
|
"items": {
|
||||||
"allOf": undefined,
|
"allOf": undefined,
|
||||||
"description": undefined,
|
"description": undefined,
|
||||||
"format": "url",
|
"format": "url",
|
||||||
|
@ -82,21 +82,21 @@ Object {
|
||||||
"type": "string",
|
"type": "string",
|
||||||
"writeOnly": undefined,
|
"writeOnly": undefined,
|
||||||
"x-circular-ref": undefined,
|
"x-circular-ref": undefined,
|
||||||
"x-parentRefs": Array [],
|
"x-parentRefs": [],
|
||||||
},
|
},
|
||||||
"maxItems": 20,
|
"maxItems": 20,
|
||||||
"minItems": 1,
|
"minItems": 1,
|
||||||
"readOnly": undefined,
|
"readOnly": undefined,
|
||||||
"title": undefined,
|
"title": undefined,
|
||||||
"type": Array [
|
"type": [
|
||||||
"string",
|
"string",
|
||||||
"integer",
|
"integer",
|
||||||
"null",
|
"null",
|
||||||
],
|
],
|
||||||
"writeOnly": undefined,
|
"writeOnly": undefined,
|
||||||
"x-circular-ref": undefined,
|
"x-circular-ref": undefined,
|
||||||
"x-parentRefs": Array [],
|
"x-parentRefs": [],
|
||||||
"x-refsStack": Array [
|
"x-refsStack": [
|
||||||
"/oneOf/0",
|
"/oneOf/0",
|
||||||
],
|
],
|
||||||
},
|
},
|
||||||
|
@ -106,30 +106,30 @@ Object {
|
||||||
"type": "object",
|
"type": "object",
|
||||||
"writeOnly": undefined,
|
"writeOnly": undefined,
|
||||||
"x-circular-ref": undefined,
|
"x-circular-ref": undefined,
|
||||||
"x-parentRefs": Array [],
|
"x-parentRefs": [],
|
||||||
}
|
}
|
||||||
`;
|
`;
|
||||||
|
|
||||||
exports[`Models Schema schemaDefinition should resolve schema with conditional operators 2`] = `
|
exports[`Models Schema schemaDefinition should resolve schema with conditional operators 2`] = `
|
||||||
Object {
|
{
|
||||||
"allOf": undefined,
|
"allOf": undefined,
|
||||||
"description": undefined,
|
"description": undefined,
|
||||||
"maxItems": 20,
|
"maxItems": 20,
|
||||||
"properties": Object {
|
"properties": {
|
||||||
"test": Object {
|
"test": {
|
||||||
"description": "The list of URL to a cute photos featuring pet",
|
"description": "The list of URL to a cute photos featuring pet",
|
||||||
"items": Object {
|
"items": {
|
||||||
"format": "url",
|
"format": "url",
|
||||||
"type": "string",
|
"type": "string",
|
||||||
},
|
},
|
||||||
"maxItems": 20,
|
"maxItems": 20,
|
||||||
"minItems": 1,
|
"minItems": 1,
|
||||||
"type": Array [
|
"type": [
|
||||||
"string",
|
"string",
|
||||||
"integer",
|
"integer",
|
||||||
"null",
|
"null",
|
||||||
],
|
],
|
||||||
"x-refsStack": Array [
|
"x-refsStack": [
|
||||||
"/oneOf/1",
|
"/oneOf/1",
|
||||||
],
|
],
|
||||||
},
|
},
|
||||||
|
@ -139,6 +139,6 @@ Object {
|
||||||
"type": "object",
|
"type": "object",
|
||||||
"writeOnly": undefined,
|
"writeOnly": undefined,
|
||||||
"x-circular-ref": undefined,
|
"x-circular-ref": undefined,
|
||||||
"x-parentRefs": Array [],
|
"x-parentRefs": [],
|
||||||
}
|
}
|
||||||
`;
|
`;
|
||||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -15,6 +15,7 @@ function throttle(func, wait) {
|
||||||
return function () {
|
return function () {
|
||||||
const now = new Date().getTime();
|
const now = new Date().getTime();
|
||||||
const remaining = wait - (now - previous);
|
const remaining = wait - (now - previous);
|
||||||
|
// eslint-disable-next-line @typescript-eslint/no-this-alias
|
||||||
context = this;
|
context = this;
|
||||||
// eslint-disable-next-line prefer-rest-params
|
// eslint-disable-next-line prefer-rest-params
|
||||||
args = arguments;
|
args = arguments;
|
||||||
|
|
|
@ -1,138 +0,0 @@
|
||||||
'use strict';
|
|
||||||
const verifyNoBrowserErrors = require('./helpers').verifyNoBrowserErrors;
|
|
||||||
const scrollToEl = require('./helpers').scrollToEl;
|
|
||||||
const fixFFTest = require('./helpers').fixFFTest;
|
|
||||||
const eachNth = require('./helpers').eachNth;
|
|
||||||
const getInnerHtml = require('./helpers').getInnerHtml;
|
|
||||||
|
|
||||||
const URL = 'index.html';
|
|
||||||
|
|
||||||
function waitForInit() {
|
|
||||||
const EC = protractor.ExpectedConditions;
|
|
||||||
const $apiInfo = $('api-info');
|
|
||||||
const $errorMessage = $('.redoc-error');
|
|
||||||
browser.wait(EC.or(EC.visibilityOf($apiInfo), EC.visibilityOf($errorMessage)), 60000);
|
|
||||||
}
|
|
||||||
|
|
||||||
function basicTests(swaggerUrl, title) {
|
|
||||||
describe(`Basic suite for ${title}`, () => {
|
|
||||||
let specUrl = URL;
|
|
||||||
if (swaggerUrl) {
|
|
||||||
specUrl += `?url=${encodeURIComponent(swaggerUrl)}`;
|
|
||||||
}
|
|
||||||
|
|
||||||
beforeEach(done => {
|
|
||||||
browser.get(specUrl);
|
|
||||||
waitForInit();
|
|
||||||
fixFFTest(done);
|
|
||||||
});
|
|
||||||
|
|
||||||
afterEach(() => {
|
|
||||||
verifyNoBrowserErrors();
|
|
||||||
});
|
|
||||||
|
|
||||||
it('should init redoc without errors', done => {
|
|
||||||
const $redoc = $('redoc');
|
|
||||||
expect($redoc.isPresent()).toBe(true);
|
|
||||||
setTimeout(() => {
|
|
||||||
const $operations = $$('operation');
|
|
||||||
expect($operations.count()).toBeGreaterThan(0);
|
|
||||||
done();
|
|
||||||
});
|
|
||||||
});
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
basicTests(null, 'Extended Petstore');
|
|
||||||
|
|
||||||
describe('Scroll sync', () => {
|
|
||||||
const specUrl = URL;
|
|
||||||
|
|
||||||
beforeEach(done => {
|
|
||||||
browser.get(specUrl);
|
|
||||||
waitForInit();
|
|
||||||
fixFFTest(done);
|
|
||||||
});
|
|
||||||
|
|
||||||
it('should update active menu entries on page scroll forwards', () => {
|
|
||||||
scrollToEl('[section="tag/store"]').then(() => {
|
|
||||||
expect(getInnerHtml('.menu-item.menu-item-depth-1.active > .menu-item-header')).toContain(
|
|
||||||
'store',
|
|
||||||
);
|
|
||||||
expect(getInnerHtml('.selected-tag')).toContain('store');
|
|
||||||
});
|
|
||||||
});
|
|
||||||
|
|
||||||
it('should update active menu entries on page scroll backwards', () => {
|
|
||||||
scrollToEl('[operation-id="getPetById"]').then(() => {
|
|
||||||
expect(getInnerHtml('.menu-item.menu-item-depth-1.active .menu-item-header')).toContain(
|
|
||||||
'pet',
|
|
||||||
);
|
|
||||||
expect(getInnerHtml('.selected-tag')).toContain('pet');
|
|
||||||
expect(getInnerHtml('.menu-item.menu-item-depth-2.active .menu-item-header')).toContain(
|
|
||||||
'Find pet by ID',
|
|
||||||
);
|
|
||||||
expect(getInnerHtml('.selected-endpoint')).toContain('Find pet by ID');
|
|
||||||
});
|
|
||||||
});
|
|
||||||
});
|
|
||||||
|
|
||||||
describe('Language tabs sync', () => {
|
|
||||||
const specUrl = URL;
|
|
||||||
|
|
||||||
beforeEach(done => {
|
|
||||||
browser.get(specUrl);
|
|
||||||
waitForInit();
|
|
||||||
fixFFTest(done);
|
|
||||||
});
|
|
||||||
|
|
||||||
// skip as it fails for no reason on IE on sauce-labs
|
|
||||||
// TODO: fixme
|
|
||||||
xit('should sync language tabs', () => {
|
|
||||||
const $item = $$('[operation-id="addPet"] tabs > ul > li').last();
|
|
||||||
// check if correct item
|
|
||||||
expect($item.getText()).toContain('PHP');
|
|
||||||
const EC = protractor.ExpectedConditions;
|
|
||||||
browser.wait(EC.elementToBeClickable($item), 5000);
|
|
||||||
$item.click().then(() => {
|
|
||||||
expect($('[operation-id="updatePet"] li.active').getText()).toContain('PHP');
|
|
||||||
});
|
|
||||||
});
|
|
||||||
});
|
|
||||||
|
|
||||||
if (process.env.JOB === 'e2e-guru') {
|
|
||||||
describe('APIs.guru specs test', () => {
|
|
||||||
// global.apisGuruList was loaded in onPrepare method of protractor config
|
|
||||||
let apisGuruList = global.apisGuruList;
|
|
||||||
|
|
||||||
// Remove certain APIs that are known to cause problems
|
|
||||||
delete apisGuruList['motaword.com']; // invalid (see https://github.com/BigstickCarpet/swagger-parser/issues/26)
|
|
||||||
delete apisGuruList['learnifier.com']; // allof object and no type
|
|
||||||
delete apisGuruList['googleapis.com:mirror']; // bad urls in images
|
|
||||||
delete apisGuruList['googleapis.com:discovery']; // non-string references
|
|
||||||
delete apisGuruList['clarify.io']; // non-string references
|
|
||||||
//delete apisGuruList['pushpay.com']; // https://github.com/Redocly/redoc/issues/30
|
|
||||||
delete apisGuruList['bbci.co.uk']; // too big
|
|
||||||
delete apisGuruList['bbc.com']; // too big
|
|
||||||
delete apisGuruList['osisoft.com']; // too big
|
|
||||||
delete apisGuruList['magento.com']; // too big
|
|
||||||
|
|
||||||
// run quick version of e2e test on all builds except releases
|
|
||||||
if (process.env.TRAVIS && !process.env.TRAVIS_TAG) {
|
|
||||||
console.log('Running on a short APIs guru list');
|
|
||||||
apisGuruList = eachNth(apisGuruList, 20);
|
|
||||||
} else {
|
|
||||||
console.log('Running on full APIs guru list');
|
|
||||||
}
|
|
||||||
|
|
||||||
for (const apiName of Object.keys(apisGuruList)) {
|
|
||||||
const apiInfo = apisGuruList[apiName].versions[apisGuruList[apiName].preferred];
|
|
||||||
let url = apiInfo.swaggerUrl;
|
|
||||||
|
|
||||||
// temporary hack due to this issue: https://github.com/substack/https-browserify/issues/6
|
|
||||||
url = url.replace('https://', 'http://');
|
|
||||||
url = url.replace('apis-guru.github.io/', 'apis-guru.github.io:80/');
|
|
||||||
basicTests(url, `${apiName}:${apiInfo.info.version}\n${url}`);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
Loading…
Reference in New Issue
Block a user