Compare commits
15
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
73d2e90e12 | ||
|
|
875caab173 | ||
|
|
ef95d6e00c | ||
|
|
21b0037529 | ||
|
|
3f06bb50fb | ||
|
|
f7001f8011 | ||
|
|
742f4bcfb3 | ||
|
|
bf21ebbc0c | ||
|
|
9d02a7d8ad | ||
|
|
a86fcf312a | ||
|
|
815dbe0b5d | ||
|
|
b78ec5bd9d | ||
|
|
8e295c23a4 | ||
|
|
634615346d | ||
|
|
98d6128375 |
@@ -41,10 +41,6 @@
|
|||||||
{
|
{
|
||||||
"expose": "less",
|
"expose": "less",
|
||||||
"src": "src/less"
|
"src": "src/less"
|
||||||
},
|
|
||||||
{
|
|
||||||
"expose": "base",
|
|
||||||
"src": "npm:getbase/src/less/base"
|
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
]
|
]
|
||||||
|
|||||||
@@ -13,11 +13,15 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
"extends": ["eslint:recommended", "plugin:react/recommended"],
|
"extends": [
|
||||||
|
"eslint:recommended",
|
||||||
|
"plugin:react/recommended"
|
||||||
|
],
|
||||||
|
|
||||||
"plugins": [
|
"plugins": [
|
||||||
"react",
|
"react",
|
||||||
"mocha"
|
"mocha",
|
||||||
|
"import"
|
||||||
],
|
],
|
||||||
|
|
||||||
"rules": {
|
"rules": {
|
||||||
@@ -34,6 +38,7 @@
|
|||||||
"no-console": ["error", { allow: ["warn", "error"] }],
|
"no-console": ["error", { allow: ["warn", "error"] }],
|
||||||
"react/jsx-no-bind": 1,
|
"react/jsx-no-bind": 1,
|
||||||
"react/display-name": 0,
|
"react/display-name": 0,
|
||||||
"mocha/no-exclusive-tests": "error"
|
"mocha/no-exclusive-tests": "error",
|
||||||
|
"import/no-extraneous-dependencies": [2]
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -5,7 +5,6 @@ node_modules
|
|||||||
.nyc_output
|
.nyc_output
|
||||||
npm-debug.log*
|
npm-debug.log*
|
||||||
.eslintcache
|
.eslintcache
|
||||||
package-lock.json
|
|
||||||
*.iml
|
*.iml
|
||||||
selenium-debug.log
|
selenium-debug.log
|
||||||
test/e2e/db.json
|
test/e2e/db.json
|
||||||
|
|||||||
@@ -15,6 +15,8 @@ before_deploy:
|
|||||||
- npm run build
|
- npm run build
|
||||||
env:
|
env:
|
||||||
- DOCKER_IMAGE_NAME=swaggerapi/swagger-ui
|
- DOCKER_IMAGE_NAME=swaggerapi/swagger-ui
|
||||||
|
script:
|
||||||
|
- npm test
|
||||||
deploy:
|
deploy:
|
||||||
- provider: npm
|
- provider: npm
|
||||||
email: apiteam@swagger.io
|
email: apiteam@swagger.io
|
||||||
@@ -52,3 +54,5 @@ after_success:
|
|||||||
docker push $DOCKER_IMAGE_NAME:$DOCKER_IMAGE_TAG;
|
docker push $DOCKER_IMAGE_NAME:$DOCKER_IMAGE_TAG;
|
||||||
fi;
|
fi;
|
||||||
fi;
|
fi;
|
||||||
|
- npm run build-bundle
|
||||||
|
- bundlesize
|
||||||
@@ -20,7 +20,7 @@ The OpenAPI Specification has undergone 5 revisions since initial creation in 20
|
|||||||
|
|
||||||
Swagger UI Version | Release Date | OpenAPI Spec compatibility | Notes
|
Swagger UI Version | Release Date | OpenAPI Spec compatibility | Notes
|
||||||
------------------ | ------------ | -------------------------- | -----
|
------------------ | ------------ | -------------------------- | -----
|
||||||
3.17.1 | 2018-06-16 | 2.0, 3.0 | [tag v3.17.1](https://github.com/swagger-api/swagger-ui/tree/v3.17.1)
|
3.17.2 | 2018-06-16 | 2.0, 3.0 | [tag v3.17.2](https://github.com/swagger-api/swagger-ui/tree/v3.17.2)
|
||||||
3.0.21 | 2017-07-26 | 2.0 | [tag v3.0.21](https://github.com/swagger-api/swagger-ui/tree/v3.0.21)
|
3.0.21 | 2017-07-26 | 2.0 | [tag v3.0.21](https://github.com/swagger-api/swagger-ui/tree/v3.0.21)
|
||||||
2.2.10 | 2017-01-04 | 1.1, 1.2, 2.0 | [tag v2.2.10](https://github.com/swagger-api/swagger-ui/tree/v2.2.10)
|
2.2.10 | 2017-01-04 | 1.1, 1.2, 2.0 | [tag v2.2.10](https://github.com/swagger-api/swagger-ui/tree/v2.2.10)
|
||||||
2.1.5 | 2016-07-20 | 1.1, 1.2, 2.0 | [tag v2.1.5](https://github.com/swagger-api/swagger-ui/tree/v2.1.5)
|
2.1.5 | 2016-07-20 | 1.1, 1.2, 2.0 | [tag v2.1.5](https://github.com/swagger-api/swagger-ui/tree/v2.1.5)
|
||||||
|
|||||||
@@ -5,7 +5,6 @@
|
|||||||
<meta charset="UTF-8">
|
<meta charset="UTF-8">
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||||
<title>Swagger UI</title>
|
<title>Swagger UI</title>
|
||||||
<link href="https://fonts.googleapis.com/css?family=Open+Sans:400,700|Source+Code+Pro:300,600|Titillium+Web:400,600,700" rel="stylesheet">
|
|
||||||
<link rel="stylesheet" type="text/css" href="./swagger-ui.css" >
|
<link rel="stylesheet" type="text/css" href="./swagger-ui.css" >
|
||||||
<link rel="icon" type="image/png" href="./favicon-32x32.png" sizes="32x32" />
|
<link rel="icon" type="image/png" href="./favicon-32x32.png" sizes="32x32" />
|
||||||
<link rel="icon" type="image/png" href="./favicon-16x16.png" sizes="16x16" />
|
<link rel="icon" type="image/png" href="./favicon-16x16.png" sizes="16x16" />
|
||||||
|
|||||||
Vendored
-1
@@ -4,7 +4,6 @@
|
|||||||
<head>
|
<head>
|
||||||
<meta charset="UTF-8">
|
<meta charset="UTF-8">
|
||||||
<title>Swagger UI</title>
|
<title>Swagger UI</title>
|
||||||
<link href="https://fonts.googleapis.com/css?family=Open+Sans:400,700|Source+Code+Pro:300,600|Titillium+Web:400,600,700" rel="stylesheet">
|
|
||||||
<link rel="stylesheet" type="text/css" href="./swagger-ui.css" >
|
<link rel="stylesheet" type="text/css" href="./swagger-ui.css" >
|
||||||
<link rel="icon" type="image/png" href="./favicon-32x32.png" sizes="32x32" />
|
<link rel="icon" type="image/png" href="./favicon-32x32.png" sizes="32x32" />
|
||||||
<link rel="icon" type="image/png" href="./favicon-16x16.png" sizes="16x16" />
|
<link rel="icon" type="image/png" href="./favicon-16x16.png" sizes="16x16" />
|
||||||
|
|||||||
Vendored
+54
-81
File diff suppressed because one or more lines are too long
Vendored
+1
-1
File diff suppressed because one or more lines are too long
Vendored
+3
-3
File diff suppressed because one or more lines are too long
+1
-1
File diff suppressed because one or more lines are too long
Vendored
+1
-1
File diff suppressed because one or more lines are too long
Vendored
+2
-2
File diff suppressed because one or more lines are too long
Vendored
+1
-1
File diff suppressed because one or more lines are too long
@@ -3,9 +3,9 @@ You can configure OAuth2 authorization by calling the `initOAuth` method.
|
|||||||
|
|
||||||
Config Name | Description
|
Config Name | Description
|
||||||
--- | ---
|
--- | ---
|
||||||
client_id | Default clientId. MUST be a string
|
clientId | Default clientId. MUST be a string
|
||||||
client_secret | Default clientSecret. MUST be a string
|
clientSecret | **🚨 Never use this parameter in your production environemnt. It exposes cruicial security information. This feature is intended for dev/test environments only. 🚨** <br>Default clientSecret. MUST be a string
|
||||||
realm | realm query parameter (for oauth1) added to `authorizationUrl` and `tokenUrl` . MUST be a string
|
realm | realm query parameter (for oauth1) added to `authorizationUrl` and `tokenUrl`. MUST be a string
|
||||||
appName | application name, displayed in authorization popup. MUST be a string
|
appName | application name, displayed in authorization popup. MUST be a string
|
||||||
scopeSeparator | scope separator for passing scopes, encoded before calling, default value is a space (encoded value `%20`). MUST be a string
|
scopeSeparator | scope separator for passing scopes, encoded before calling, default value is a space (encoded value `%20`). MUST be a string
|
||||||
additionalQueryStringParams | Additional query parameters added to `authorizationUrl` and `tokenUrl`. MUST be an object
|
additionalQueryStringParams | Additional query parameters added to `authorizationUrl` and `tokenUrl`. MUST be an object
|
||||||
|
|||||||
@@ -73,6 +73,7 @@ module.exports = function(rules, options) {
|
|||||||
uglifyOptions: {
|
uglifyOptions: {
|
||||||
mangle: specialOptions.mangle,
|
mangle: specialOptions.mangle,
|
||||||
beautify: !specialOptions.mangle,
|
beautify: !specialOptions.mangle,
|
||||||
|
keep_fnames: true
|
||||||
},
|
},
|
||||||
sourceMap: true,
|
sourceMap: true,
|
||||||
}),
|
}),
|
||||||
@@ -141,9 +142,7 @@ module.exports = function(rules, options) {
|
|||||||
"node_modules"
|
"node_modules"
|
||||||
],
|
],
|
||||||
extensions: [".web.js", ".js", ".jsx", ".json", ".less"],
|
extensions: [".web.js", ".js", ".jsx", ".json", ".less"],
|
||||||
alias: {
|
alias: {}
|
||||||
base: "getbase/src/less/base",
|
|
||||||
}
|
|
||||||
},
|
},
|
||||||
|
|
||||||
devtool: specialOptions.sourcemaps ? "nosource-source-map" : false,
|
devtool: specialOptions.sourcemaps ? "nosource-source-map" : false,
|
||||||
|
|||||||
Generated
+20131
File diff suppressed because it is too large
Load Diff
+51
-62
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "swagger-ui",
|
"name": "swagger-ui",
|
||||||
"version": "3.17.1",
|
"version": "3.17.2",
|
||||||
"main": "dist/swagger-ui.js",
|
"main": "dist/swagger-ui.js",
|
||||||
"repository": "git@github.com:swagger-api/swagger-ui.git",
|
"repository": "git@github.com:swagger-api/swagger-ui.git",
|
||||||
"contributors": [
|
"contributors": [
|
||||||
@@ -14,7 +14,7 @@
|
|||||||
],
|
],
|
||||||
"license": "Apache-2.0",
|
"license": "Apache-2.0",
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"build": "npm run build-core && npm run build-bundle && npm run build-standalone",
|
"build": "run-p --aggregate-output build-core build-bundle build-standalone",
|
||||||
"build-bundle": "webpack --config webpack-dist-bundle.config.js --colors",
|
"build-bundle": "webpack --config webpack-dist-bundle.config.js --colors",
|
||||||
"build-core": "webpack --config webpack-dist.config.js --colors",
|
"build-core": "webpack --config webpack-dist.config.js --colors",
|
||||||
"build-standalone": "webpack --config webpack-dist-standalone.config.js --colors",
|
"build-standalone": "webpack --config webpack-dist-standalone.config.js --colors",
|
||||||
@@ -24,20 +24,19 @@
|
|||||||
"hot-server": "webpack-dev-server --host 0.0.0.0 --config webpack-hot-dev-server.config.js --inline --hot --progress --content-base dev-helpers/",
|
"hot-server": "webpack-dev-server --host 0.0.0.0 --config webpack-hot-dev-server.config.js --inline --hot --progress --content-base dev-helpers/",
|
||||||
"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-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.check.js --json | webpack-bundle-size-analyzer >| $npm_package_config_deps_check_dir/sizes.txt",
|
"deps-size": "webpack -p --config webpack.check.js --json | webpack-bundle-size-analyzer >| $npm_package_config_deps_check_dir/sizes.txt",
|
||||||
"deps-check": "npm run deps-license && npm run deps-size",
|
"deps-check": "run-s deps-license deps-size",
|
||||||
"lint": "eslint --cache --ext '.js,.jsx' src test",
|
"lint": "eslint --cache --ext '.js,.jsx' src test",
|
||||||
"lint-errors": "eslint --cache --quiet --ext '.js,.jsx' src test",
|
"lint-errors": "eslint --cache --quiet --ext '.js,.jsx' src test",
|
||||||
"lint-fix": "eslint --cache --ext '.js,.jsx' src test --fix",
|
"lint-fix": "eslint --cache --ext '.js,.jsx' src test --fix",
|
||||||
"test": "npm run just-test-in-node && npm run lint-errors",
|
"test": "run-s just-test-in-node lint-errors",
|
||||||
"test-in-node": "npm run lint-errors && npm run just-test-in-node",
|
"test-in-node": "run-s lint-errors just-test-in-node",
|
||||||
"just-test": "karma start --config karma.conf.js",
|
"just-test-in-node": "mocha --require test/setup.js --recursive --compilers js:babel-core/register --require source-map-support test/core test/components test/bugs test/swagger-ui-dist-package test/xss",
|
||||||
"just-test-in-node": "mocha --require test/setup.js --recursive --compilers js:babel-core/register test/core test/components test/bugs test/swagger-ui-dist-package test/xss",
|
|
||||||
"just-check-coverage": "nyc npm run just-test-in-node",
|
"just-check-coverage": "nyc npm run just-test-in-node",
|
||||||
"test-e2e": "sleep 3 && nightwatch test/e2e/scenarios/ --config test/e2e/nightwatch.json",
|
"test-e2e": "sleep 3 && nightwatch test/e2e/scenarios/ --config test/e2e/nightwatch.json",
|
||||||
"e2e-initial-render": "nightwatch test/e2e/scenarios/ --config test/e2e/nightwatch.json --group initial-render",
|
"e2e-initial-render": "nightwatch test/e2e/scenarios/ --config test/e2e/nightwatch.json --group initial-render",
|
||||||
"mock-api": "json-server --watch test/e2e/db.json --port 3204",
|
"mock-api": "json-server --watch test/e2e/db.json --port 3204",
|
||||||
"hot-e2e-server": "webpack-dev-server --port 3230 --content-base test/e2e/helpers --host 0.0.0.0 --config webpack-hot-dev-server.config.js --inline --hot --progress",
|
"hot-e2e-server": "webpack-dev-server --port 3230 --content-base test/e2e/helpers --host 0.0.0.0 --config webpack-hot-dev-server.config.js --inline --hot --progress",
|
||||||
"e2e": "npm-run-all --parallel -r hot-e2e-server mock-api test-e2e",
|
"e2e": "run-p -r hot-e2e-server mock-api test-e2e",
|
||||||
"open-static": "node -e 'require(\"open\")(\"http://localhost:3002\")'",
|
"open-static": "node -e 'require(\"open\")(\"http://localhost:3002\")'",
|
||||||
"serve-static": "http-server dist/ -i -a 0.0.0.0 -p 3002",
|
"serve-static": "http-server dist/ -i -a 0.0.0.0 -p 3002",
|
||||||
"start": "npm-run-all --parallel serve-static open-static"
|
"start": "npm-run-all --parallel serve-static open-static"
|
||||||
@@ -45,59 +44,45 @@
|
|||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@braintree/sanitize-url": "^2.0.2",
|
"@braintree/sanitize-url": "^2.0.2",
|
||||||
"base64-js": "^1.2.0",
|
"base64-js": "^1.2.0",
|
||||||
"brace": "0.7.0",
|
|
||||||
"classnames": "^2.2.5",
|
"classnames": "^2.2.5",
|
||||||
"commonmark": "^0.28.1",
|
"commonmark": "^0.28.1",
|
||||||
"core-js": "^2.5.1",
|
"core-js": "^2.5.1",
|
||||||
"css.escape": "1.5.1",
|
"css.escape": "1.5.1",
|
||||||
"deep-extend": "0.5.1",
|
"deep-extend": "0.5.1",
|
||||||
"dompurify": "^1.0.4",
|
"dompurify": "^1.0.4",
|
||||||
"expect": "1.20.2",
|
|
||||||
"getbase": "^2.8.2",
|
|
||||||
"ieee754": "^1.1.8",
|
"ieee754": "^1.1.8",
|
||||||
"immutable": "^3.x.x",
|
"immutable": "^3.x.x",
|
||||||
"js-file-download": "^0.4.1",
|
"js-file-download": "^0.4.1",
|
||||||
"js-yaml": "^3.5.5",
|
"js-yaml": "^3.5.5",
|
||||||
"lodash": "4.17.5",
|
"lodash": "^4.17.10",
|
||||||
"matcher": "^0.1.2",
|
"memoizee": "^0.4.12",
|
||||||
"memoizee": "0.4.1",
|
|
||||||
"promise-worker": "^1.1.1",
|
|
||||||
"prop-types": "^15.5.10",
|
"prop-types": "^15.5.10",
|
||||||
"react": "^15.6.2",
|
"react": "^15.6.2",
|
||||||
"react-addons-perf": "^15.4.0",
|
"react-addons-perf": "^15.4.0",
|
||||||
"react-addons-shallow-compare": "0.14.8",
|
|
||||||
"react-addons-test-utils": "^15.6.2",
|
|
||||||
"react-collapse": "^4.0.3",
|
"react-collapse": "^4.0.3",
|
||||||
"react-debounce-input": "^3.2.0",
|
"react-debounce-input": "^3.2.0",
|
||||||
"react-dom": "^15.6.2",
|
"react-dom": "^15.6.2",
|
||||||
"react-height": "^2.0.0",
|
|
||||||
"react-hot-loader": "1.3.1",
|
|
||||||
"react-immutable-proptypes": "2.1.0",
|
"react-immutable-proptypes": "2.1.0",
|
||||||
"react-immutable-pure-component": "^1.1.1",
|
"react-immutable-pure-component": "^1.1.1",
|
||||||
|
"react-inspector": "^2.3.0",
|
||||||
"react-markdown": "^2.5.0",
|
"react-markdown": "^2.5.0",
|
||||||
"react-motion": "^0.5.2",
|
"react-motion": "^0.5.2",
|
||||||
"react-object-inspector": "0.2.1",
|
|
||||||
"react-redux": "^4.x.x",
|
"react-redux": "^4.x.x",
|
||||||
"react-split-pane": "0.1.70",
|
"react-split-pane": "^0.1.77",
|
||||||
"redux": "^3.x.x",
|
"redux": "^3.x.x",
|
||||||
"redux-immutable": "3.0.8",
|
"redux-immutable": "3.0.8",
|
||||||
"redux-logger": "*",
|
|
||||||
"remarkable": "^1.7.1",
|
"remarkable": "^1.7.1",
|
||||||
"reselect": "2.5.3",
|
"reselect": "^2.5.4",
|
||||||
"scroll-to-element": "^2.0.0",
|
"serialize-error": "^2.1.0",
|
||||||
"serialize-error": "2.0.0",
|
"swagger-client": "^3.8.7",
|
||||||
"shallowequal": "0.2.2",
|
|
||||||
"swagger-client": "^3.8.5",
|
|
||||||
"url-parse": "^1.1.8",
|
"url-parse": "^1.1.8",
|
||||||
"whatwg-fetch": "0.11.1",
|
|
||||||
"worker-loader": "^0.7.1",
|
|
||||||
"xml": "1.0.1",
|
"xml": "1.0.1",
|
||||||
"xml-but-prettier": "^1.0.1",
|
"xml-but-prettier": "^1.0.1",
|
||||||
"yaml-js": "0.2.0",
|
"yaml-js": "^0.2.3",
|
||||||
"zenscroll": "4.0.1"
|
"zenscroll": "^4.0.2"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"autoprefixer": "7.1.1",
|
"autoprefixer": "^8.4.1",
|
||||||
"babel-core": "^6.23.1",
|
"babel-core": "^6.23.1",
|
||||||
"babel-eslint": "^7.1.1",
|
"babel-eslint": "^7.1.1",
|
||||||
"babel-loader": "^7.1.0",
|
"babel-loader": "^7.1.0",
|
||||||
@@ -109,52 +94,49 @@
|
|||||||
"babel-preset-react": "^6.23.0",
|
"babel-preset-react": "^6.23.0",
|
||||||
"babel-preset-stage-0": "^6.22.0",
|
"babel-preset-stage-0": "^6.22.0",
|
||||||
"babel-runtime": "^6.23.0",
|
"babel-runtime": "^6.23.0",
|
||||||
"chromedriver": "^2.30.1",
|
"bundlesize": "^0.17.0",
|
||||||
|
"chromedriver": "^2.38.3",
|
||||||
"copy-webpack-plugin": "^4.0.1",
|
"copy-webpack-plugin": "^4.0.1",
|
||||||
"css-loader": "0.28.4",
|
"css-loader": "^0.28.11",
|
||||||
"deep-extend": "^0.5.0",
|
"deepmerge": "^2.1.0",
|
||||||
"deepmerge": "^1.3.2",
|
|
||||||
"enzyme": "^2.7.1",
|
"enzyme": "^2.7.1",
|
||||||
"eslint": "^4.1.1",
|
"eslint": "^4.1.1",
|
||||||
"eslint-plugin-import": "^2.6.0",
|
"eslint-plugin-import": "^2.13.0",
|
||||||
"eslint-plugin-mocha": "^4.11.0",
|
"eslint-plugin-mocha": "^4.11.0",
|
||||||
"eslint-plugin-react": "~7.7.0",
|
"eslint-plugin-react": "~7.7.0",
|
||||||
"extract-text-webpack-plugin": "^2.1.2",
|
"expect": "^1.20.2",
|
||||||
"file-loader": "0.11.2",
|
"extract-text-webpack-plugin": "^3.0.2",
|
||||||
|
"file-loader": "^1.1.11",
|
||||||
"git-describe": "^4.0.1",
|
"git-describe": "^4.0.1",
|
||||||
"imports-loader": "0.7.1",
|
"imports-loader": "^0.8.0",
|
||||||
"jsdom": "^11.10.0",
|
"jsdom": "^11.10.0",
|
||||||
"json-loader": "0.5.4",
|
"json-loader": "^0.5.7",
|
||||||
"json-server": "^0.11.0",
|
"json-server": "^0.12.2",
|
||||||
"karma": "^1.7.0",
|
"less": "^3.0.2",
|
||||||
"karma-chrome-launcher": "^2.2.0",
|
"license-checker": "^19.0.0",
|
||||||
"karma-mocha": "^1.3.0",
|
"mocha": "^5.1.1",
|
||||||
"karma-sourcemap-loader": "^0.3.7",
|
|
||||||
"karma-webpack": "2.0.3",
|
|
||||||
"less": "2.7.2",
|
|
||||||
"license-checker": "^11.0.0",
|
|
||||||
"mocha": "^3.4.2",
|
|
||||||
"nightwatch": "^0.9.16",
|
"nightwatch": "^0.9.16",
|
||||||
"node-sass": "^4.5.0",
|
"node-sass": "^4.5.0",
|
||||||
"npm-run-all": "4.0.2",
|
"npm-run-all": "^4.1.2",
|
||||||
"null-loader": "0.1.1",
|
"null-loader": "0.1.1",
|
||||||
"nyc": "^11.3.0",
|
"nyc": "^11.3.0",
|
||||||
"open": "0.0.5",
|
"open": "0.0.5",
|
||||||
"postcss-loader": "2.0.6",
|
"postcss-loader": "^2.1.5",
|
||||||
"raw-loader": "0.5.1",
|
"raw-loader": "0.5.1",
|
||||||
"react-hot-loader": "^1.3.1",
|
|
||||||
"react-test-renderer": "^15.5.4",
|
"react-test-renderer": "^15.5.4",
|
||||||
"rimraf": "^2.6.0",
|
"rimraf": "^2.6.0",
|
||||||
"sass-loader": "^6.0.2",
|
"sass-loader": "^7.0.1",
|
||||||
"selenium-server-standalone-jar": "3.4.0",
|
"selenium-server-standalone-jar": "3.12.0",
|
||||||
"standard": "^10.0.2",
|
"standard": "^11.0.1",
|
||||||
"standard-loader": "^6.0.1",
|
"standard-loader": "^6.0.1",
|
||||||
"style-loader": "0.18.2",
|
"style-loader": "^0.21.0",
|
||||||
"tachyons-sass": "^4.9.2",
|
"tachyons-sass": "^4.9.2",
|
||||||
"uglifyjs-webpack-plugin": "^1.2.5",
|
"uglifyjs-webpack-plugin": "^1.2.5",
|
||||||
"url-loader": "0.5.9",
|
"url-loader": "^1.0.1",
|
||||||
"webpack": "^2.6.1",
|
"webpack": "^3.1.0",
|
||||||
"webpack-bundle-size-analyzer": "^2.5.0"
|
"webpack-bundle-size-analyzer": "^2.5.0",
|
||||||
|
"webpack-cli": "^2.0.4",
|
||||||
|
"worker-loader": "^1.1.1"
|
||||||
},
|
},
|
||||||
"config": {
|
"config": {
|
||||||
"deps_check_dir": ".deps_check"
|
"deps_check_dir": ".deps_check"
|
||||||
@@ -165,12 +147,19 @@
|
|||||||
"IE 11"
|
"IE 11"
|
||||||
],
|
],
|
||||||
"optionalDependencies": {
|
"optionalDependencies": {
|
||||||
"webpack-dev-server": "2.5.0"
|
"webpack-dev-server": "^2.11.1"
|
||||||
},
|
},
|
||||||
"nyc": {
|
"nyc": {
|
||||||
"all": true,
|
"all": true,
|
||||||
"include": [
|
"include": [
|
||||||
"**/src/core/plugins/**.js"
|
"**/src/core/plugins/**.js"
|
||||||
]
|
]
|
||||||
}
|
},
|
||||||
|
"bundlesize": [
|
||||||
|
{
|
||||||
|
"path": "./dist/swagger-ui-bundle.js",
|
||||||
|
"maxSize": "1.5 MB",
|
||||||
|
"compression": "none"
|
||||||
|
}
|
||||||
|
]
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,10 @@
|
|||||||
|
{
|
||||||
|
"rules": {
|
||||||
|
"import/no-extraneous-dependencies": [
|
||||||
|
2,
|
||||||
|
{
|
||||||
|
"devDependencies": false
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -2,7 +2,7 @@ import React from "react"
|
|||||||
import PropTypes from "prop-types"
|
import PropTypes from "prop-types"
|
||||||
import { Collapse } from "react-collapse"
|
import { Collapse } from "react-collapse"
|
||||||
import { presets } from "react-motion"
|
import { presets } from "react-motion"
|
||||||
import ObjectInspector from "react-object-inspector"
|
import ObjectInspector from "react-inspector"
|
||||||
import Perf from "react-addons-perf"
|
import Perf from "react-addons-perf"
|
||||||
|
|
||||||
export default class Debug extends React.Component {
|
export default class Debug extends React.Component {
|
||||||
|
|||||||
@@ -41,6 +41,7 @@ export default class Models extends Component {
|
|||||||
const ModelWrapper = getComponent("ModelWrapper")
|
const ModelWrapper = getComponent("ModelWrapper")
|
||||||
const Collapse = getComponent("Collapse")
|
const Collapse = getComponent("Collapse")
|
||||||
const ModelCollapse = getComponent("ModelCollapse")
|
const ModelCollapse = getComponent("ModelCollapse")
|
||||||
|
const JumpToPath = getComponent("JumpToPath")
|
||||||
|
|
||||||
return <section className={ showModels ? "models is-open" : "models"}>
|
return <section className={ showModels ? "models is-open" : "models"}>
|
||||||
<h4 onClick={() => layoutActions.show("models", !showModels)}>
|
<h4 onClick={() => layoutActions.show("models", !showModels)}>
|
||||||
@@ -64,11 +65,13 @@ export default class Models extends Component {
|
|||||||
this.props.specActions.requestResolvedSubtree([...this.getSchemaBasePath(), name])
|
this.props.specActions.requestResolvedSubtree([...this.getSchemaBasePath(), name])
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const specPath = Im.List([...specPathBase, name])
|
||||||
|
|
||||||
const content = <ModelWrapper name={ name }
|
const content = <ModelWrapper name={ name }
|
||||||
expandDepth={ defaultModelsExpandDepth }
|
expandDepth={ defaultModelsExpandDepth }
|
||||||
schema={ schema || Im.Map() }
|
schema={ schema || Im.Map() }
|
||||||
displayName={displayName}
|
displayName={displayName}
|
||||||
specPath={Im.List([...specPathBase, name])}
|
specPath={specPath}
|
||||||
getComponent={ getComponent }
|
getComponent={ getComponent }
|
||||||
specSelectors={ specSelectors }
|
specSelectors={ specSelectors }
|
||||||
getConfigs = {getConfigs}
|
getConfigs = {getConfigs}
|
||||||
@@ -82,6 +85,7 @@ export default class Models extends Component {
|
|||||||
</span>
|
</span>
|
||||||
|
|
||||||
return <div id={ `model-${name}` } className="model-container" key={ `models-section-${name}` }>
|
return <div id={ `model-${name}` } className="model-container" key={ `models-section-${name}` }>
|
||||||
|
<span className="models-jump-to-path"><JumpToPath specPath={specPath} /></span>
|
||||||
<ModelCollapse
|
<ModelCollapse
|
||||||
classes="model-box"
|
classes="model-box"
|
||||||
collapsedContent={this.getCollapsedContent(name)}
|
collapsedContent={this.getCollapsedContent(name)}
|
||||||
|
|||||||
@@ -46,11 +46,10 @@ export default class ParamBody extends PureComponent {
|
|||||||
}
|
}
|
||||||
|
|
||||||
updateValues = (props) => {
|
updateValues = (props) => {
|
||||||
let { specSelectors, pathMethod, param, isExecute, consumesValue="" } = props
|
let { param, isExecute, consumesValue="" } = props
|
||||||
let parameter = (specSelectors ? specSelectors.parameterWithMeta(pathMethod, param.get("name"), param.get("in")) : fromJS({})) || param
|
|
||||||
let isXml = /xml/i.test(consumesValue)
|
let isXml = /xml/i.test(consumesValue)
|
||||||
let isJson = /json/i.test(consumesValue)
|
let isJson = /json/i.test(consumesValue)
|
||||||
let paramValue = isXml ? parameter.get("value_xml") : parameter.get("value")
|
let paramValue = isXml ? param.get("value_xml") : param.get("value")
|
||||||
|
|
||||||
if ( paramValue !== undefined ) {
|
if ( paramValue !== undefined ) {
|
||||||
let val = !paramValue && isJson ? "{}" : paramValue
|
let val = !paramValue && isJson ? "{}" : paramValue
|
||||||
@@ -79,7 +78,7 @@ export default class ParamBody extends PureComponent {
|
|||||||
this._onChange(value, isXml)
|
this._onChange(value, isXml)
|
||||||
}
|
}
|
||||||
|
|
||||||
_onChange = (val, isXml) => { (this.props.onChange || NOOP)(this.props.param, val, isXml) }
|
_onChange = (val, isXml) => { (this.props.onChange || NOOP)(val, isXml) }
|
||||||
|
|
||||||
handleOnChange = e => {
|
handleOnChange = e => {
|
||||||
const {consumesValue} = this.props
|
const {consumesValue} = this.props
|
||||||
@@ -107,7 +106,7 @@ export default class ParamBody extends PureComponent {
|
|||||||
const HighlightCode = getComponent("highlightCode")
|
const HighlightCode = getComponent("highlightCode")
|
||||||
const ContentType = getComponent("contentType")
|
const ContentType = getComponent("contentType")
|
||||||
// for domains where specSelectors not passed
|
// for domains where specSelectors not passed
|
||||||
let parameter = specSelectors ? specSelectors.parameterWithMeta(pathMethod, param.get("name"), param.get("in")) : param
|
let parameter = specSelectors ? specSelectors.parameterWithMetaByIdentity(pathMethod, param) : param
|
||||||
let errors = parameter.get("errors", List())
|
let errors = parameter.get("errors", List())
|
||||||
let consumesValue = specSelectors.contentTypeValues(pathMethod).get("requestContentType")
|
let consumesValue = specSelectors.contentTypeValues(pathMethod).get("requestContentType")
|
||||||
let consumes = this.props.consumes && this.props.consumes.size ? this.props.consumes : ParamBody.defaultProp.consumes
|
let consumes = this.props.consumes && this.props.consumes.size ? this.props.consumes : ParamBody.defaultProp.consumes
|
||||||
|
|||||||
@@ -9,6 +9,7 @@ export default class ParameterRow extends Component {
|
|||||||
static propTypes = {
|
static propTypes = {
|
||||||
onChange: PropTypes.func.isRequired,
|
onChange: PropTypes.func.isRequired,
|
||||||
param: PropTypes.object.isRequired,
|
param: PropTypes.object.isRequired,
|
||||||
|
rawParam: PropTypes.object.isRequired,
|
||||||
getComponent: PropTypes.func.isRequired,
|
getComponent: PropTypes.func.isRequired,
|
||||||
fn: PropTypes.object.isRequired,
|
fn: PropTypes.object.isRequired,
|
||||||
isExecute: PropTypes.bool,
|
isExecute: PropTypes.bool,
|
||||||
@@ -30,7 +31,7 @@ export default class ParameterRow extends Component {
|
|||||||
let { isOAS3 } = specSelectors
|
let { isOAS3 } = specSelectors
|
||||||
|
|
||||||
let example = param.get("example")
|
let example = param.get("example")
|
||||||
let parameter = specSelectors.parameterWithMeta(pathMethod, param.get("name"), param.get("in")) || param
|
let parameter = specSelectors.parameterWithMetaByIdentity(pathMethod, param) || param
|
||||||
let enumValue
|
let enumValue
|
||||||
|
|
||||||
if(isOAS3()) {
|
if(isOAS3()) {
|
||||||
@@ -56,9 +57,9 @@ export default class ParameterRow extends Component {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
onChangeWrapper = (value) => {
|
onChangeWrapper = (value, isXml = false) => {
|
||||||
let { onChange, param } = this.props
|
let { onChange, rawParam } = this.props
|
||||||
return onChange(param, value)
|
return onChange(rawParam, value, isXml)
|
||||||
}
|
}
|
||||||
|
|
||||||
setDefaultValue = () => {
|
setDefaultValue = () => {
|
||||||
@@ -72,7 +73,7 @@ export default class ParameterRow extends Component {
|
|||||||
|
|
||||||
let defaultValue = schema.get("default")
|
let defaultValue = schema.get("default")
|
||||||
let xExampleValue = param.get("x-example") // Swagger 2 only
|
let xExampleValue = param.get("x-example") // Swagger 2 only
|
||||||
let parameter = specSelectors.parameterWithMeta(pathMethod, param.get("name"), param.get("in"))
|
let parameter = specSelectors.parameterWithMetaByIdentity(pathMethod, param)
|
||||||
let value = parameter ? parameter.get("value") : ""
|
let value = parameter ? parameter.get("value") : ""
|
||||||
|
|
||||||
if( param.get("in") !== "body" ) {
|
if( param.get("in") !== "body" ) {
|
||||||
@@ -85,7 +86,7 @@ export default class ParameterRow extends Component {
|
|||||||
}
|
}
|
||||||
|
|
||||||
render() {
|
render() {
|
||||||
let {param, onChange, getComponent, getConfigs, isExecute, fn, onChangeConsumes, specSelectors, pathMethod, specPath} = this.props
|
let {param, rawParam, getComponent, getConfigs, isExecute, fn, onChangeConsumes, specSelectors, pathMethod, specPath} = this.props
|
||||||
|
|
||||||
let { isOAS3 } = specSelectors
|
let { isOAS3 } = specSelectors
|
||||||
|
|
||||||
@@ -101,7 +102,7 @@ export default class ParameterRow extends Component {
|
|||||||
param={param}
|
param={param}
|
||||||
consumes={ specSelectors.operationConsumes(pathMethod) }
|
consumes={ specSelectors.operationConsumes(pathMethod) }
|
||||||
consumesValue={ specSelectors.contentTypeValues(pathMethod).get("requestContentType") }
|
consumesValue={ specSelectors.contentTypeValues(pathMethod).get("requestContentType") }
|
||||||
onChange={onChange}
|
onChange={this.onChangeWrapper}
|
||||||
onChangeConsumes={onChangeConsumes}
|
onChangeConsumes={onChangeConsumes}
|
||||||
isExecute={ isExecute }
|
isExecute={ isExecute }
|
||||||
specSelectors={ specSelectors }
|
specSelectors={ specSelectors }
|
||||||
@@ -112,7 +113,7 @@ export default class ParameterRow extends Component {
|
|||||||
const Markdown = getComponent("Markdown")
|
const Markdown = getComponent("Markdown")
|
||||||
const ParameterExt = getComponent("ParameterExt")
|
const ParameterExt = getComponent("ParameterExt")
|
||||||
|
|
||||||
let paramWithMeta = specSelectors.parameterWithMeta(pathMethod, param.get("name"), param.get("in"))
|
let paramWithMeta = specSelectors.parameterWithMetaByIdentity(pathMethod, rawParam)
|
||||||
let format = param.get("format")
|
let format = param.get("format")
|
||||||
let schema = isOAS3 && isOAS3() ? param.get("schema") : param
|
let schema = isOAS3 && isOAS3() ? param.get("schema") : param
|
||||||
let type = schema.get("type")
|
let type = schema.get("type")
|
||||||
|
|||||||
@@ -36,11 +36,11 @@ export default class Parameters extends Component {
|
|||||||
|
|
||||||
onChange = ( param, value, isXml ) => {
|
onChange = ( param, value, isXml ) => {
|
||||||
let {
|
let {
|
||||||
specActions: { changeParam },
|
specActions: { changeParamByIdentity },
|
||||||
onChangeKey,
|
onChangeKey,
|
||||||
} = this.props
|
} = this.props
|
||||||
|
|
||||||
changeParam( onChangeKey, param.get("name"), param.get("in"), value, isXml)
|
changeParamByIdentity(onChangeKey, param, value, isXml)
|
||||||
}
|
}
|
||||||
|
|
||||||
onChangeConsumesWrapper = ( val ) => {
|
onChangeConsumesWrapper = ( val ) => {
|
||||||
@@ -101,7 +101,8 @@ export default class Parameters extends Component {
|
|||||||
specPath={specPath.push(i.toString())}
|
specPath={specPath.push(i.toString())}
|
||||||
getComponent={ getComponent }
|
getComponent={ getComponent }
|
||||||
getConfigs={ getConfigs }
|
getConfigs={ getConfigs }
|
||||||
param={ specSelectors.parameterWithMeta(pathMethod, parameter.get("name"), parameter.get("in")) }
|
rawParam={ parameter }
|
||||||
|
param={ specSelectors.parameterWithMetaByIdentity(pathMethod, parameter) }
|
||||||
key={ `${parameter.get( "in" )}.${parameter.get("name")}` }
|
key={ `${parameter.get( "in" )}.${parameter.get("name")}` }
|
||||||
onChange={ this.onChange }
|
onChange={ this.onChange }
|
||||||
onChangeConsumes={this.onChangeConsumesWrapper}
|
onChangeConsumes={this.onChangeConsumesWrapper}
|
||||||
|
|||||||
@@ -21,8 +21,8 @@ export default class TryItOutButton extends React.Component {
|
|||||||
return (
|
return (
|
||||||
<div className="try-out">
|
<div className="try-out">
|
||||||
{
|
{
|
||||||
enabled ? <button className="btn try-out__btn cancel" onClick={ onTryoutClick }>Cancel</button>
|
enabled ? <button className="btn try-out__btn cancel" onClick={ onCancelClick }>Cancel</button>
|
||||||
: <button className="btn try-out__btn" onClick={ onCancelClick }>Try it out </button>
|
: <button className="btn try-out__btn" onClick={ onTryoutClick }>Try it out </button>
|
||||||
}
|
}
|
||||||
</div>
|
</div>
|
||||||
)
|
)
|
||||||
|
|||||||
@@ -113,11 +113,11 @@ export default class OperationContainer extends PureComponent {
|
|||||||
layoutActions.show(["operations", tag, operationId], !isShown)
|
layoutActions.show(["operations", tag, operationId], !isShown)
|
||||||
}
|
}
|
||||||
|
|
||||||
onTryoutClick =() => {
|
onCancelClick=() => {
|
||||||
this.setState({tryItOutEnabled: !this.state.tryItOutEnabled})
|
this.setState({tryItOutEnabled: !this.state.tryItOutEnabled})
|
||||||
}
|
}
|
||||||
|
|
||||||
onCancelClick =() => {
|
onTryoutClick =() => {
|
||||||
let { specActions, path, method } = this.props
|
let { specActions, path, method } = this.props
|
||||||
this.setState({tryItOutEnabled: !this.state.tryItOutEnabled})
|
this.setState({tryItOutEnabled: !this.state.tryItOutEnabled})
|
||||||
specActions.clearValidateParams([path, method])
|
specActions.clearValidateParams([path, method])
|
||||||
|
|||||||
@@ -111,7 +111,7 @@ export class JsonSchema_array extends PureComponent {
|
|||||||
|
|
||||||
constructor(props, context) {
|
constructor(props, context) {
|
||||||
super(props, context)
|
super(props, context)
|
||||||
this.state = {value: props.value}
|
this.state = { value: valueOrEmptyList(props.value)}
|
||||||
}
|
}
|
||||||
|
|
||||||
componentWillReceiveProps(props) {
|
componentWillReceiveProps(props) {
|
||||||
@@ -135,7 +135,7 @@ export class JsonSchema_array extends PureComponent {
|
|||||||
|
|
||||||
addItem = () => {
|
addItem = () => {
|
||||||
this.setState(state => {
|
this.setState(state => {
|
||||||
state.value = state.value || List()
|
state.value = valueOrEmptyList(state.value)
|
||||||
return {
|
return {
|
||||||
value: state.value.push("")
|
value: state.value.push("")
|
||||||
}
|
}
|
||||||
@@ -174,7 +174,7 @@ export class JsonSchema_array extends PureComponent {
|
|||||||
|
|
||||||
return (
|
return (
|
||||||
<div>
|
<div>
|
||||||
{ !value || value.count() < 1 ? null :
|
{ !value || !value.count || value.count() < 1 ? null :
|
||||||
value.map( (item,i) => {
|
value.map( (item,i) => {
|
||||||
let schema = Object.assign({}, itemSchema)
|
let schema = Object.assign({}, itemSchema)
|
||||||
if ( errors.length ) {
|
if ( errors.length ) {
|
||||||
@@ -264,3 +264,7 @@ export class JsonSchema_object extends PureComponent {
|
|||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function valueOrEmptyList(value) {
|
||||||
|
return List.isList(value) ? value : List()
|
||||||
|
}
|
||||||
@@ -10,6 +10,7 @@ const RequestBody = ({
|
|||||||
getComponent,
|
getComponent,
|
||||||
getConfigs,
|
getConfigs,
|
||||||
specSelectors,
|
specSelectors,
|
||||||
|
fn,
|
||||||
contentType,
|
contentType,
|
||||||
isExecute,
|
isExecute,
|
||||||
specPath,
|
specPath,
|
||||||
@@ -85,6 +86,7 @@ const RequestBody = ({
|
|||||||
<td className="col parameters-col_description">
|
<td className="col parameters-col_description">
|
||||||
{isExecute ?
|
{isExecute ?
|
||||||
<JsonSchemaForm
|
<JsonSchemaForm
|
||||||
|
fn={fn}
|
||||||
dispatchInitialValue={!isFile}
|
dispatchInitialValue={!isFile}
|
||||||
schema={prop}
|
schema={prop}
|
||||||
getComponent={getComponent}
|
getComponent={getComponent}
|
||||||
@@ -132,6 +134,7 @@ RequestBody.propTypes = {
|
|||||||
requestBodyValue: ImPropTypes.orderedMap.isRequired,
|
requestBodyValue: ImPropTypes.orderedMap.isRequired,
|
||||||
getComponent: PropTypes.func.isRequired,
|
getComponent: PropTypes.func.isRequired,
|
||||||
getConfigs: PropTypes.func.isRequired,
|
getConfigs: PropTypes.func.isRequired,
|
||||||
|
fn: PropTypes.object.isRequired,
|
||||||
specSelectors: PropTypes.object.isRequired,
|
specSelectors: PropTypes.object.isRequired,
|
||||||
contentType: PropTypes.string,
|
contentType: PropTypes.string,
|
||||||
isExecute: PropTypes.bool.isRequired,
|
isExecute: PropTypes.bool.isRequired,
|
||||||
|
|||||||
@@ -2,16 +2,20 @@ import React from "react"
|
|||||||
|
|
||||||
export function isOAS3(jsSpec) {
|
export function isOAS3(jsSpec) {
|
||||||
const oasVersion = jsSpec.get("openapi")
|
const oasVersion = jsSpec.get("openapi")
|
||||||
if(!oasVersion) {
|
if(typeof oasVersion !== "string") {
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
|
|
||||||
return oasVersion.startsWith("3.0.")
|
// we gate against `3.1` becasue we want to explicitly opt into supporting it
|
||||||
|
// at some point in the future -- KS, 7/2018
|
||||||
|
|
||||||
|
// starts with, but is not `3.0.` exactly
|
||||||
|
return oasVersion.startsWith("3.0.") && oasVersion.length > 4
|
||||||
}
|
}
|
||||||
|
|
||||||
export function isSwagger2(jsSpec) {
|
export function isSwagger2(jsSpec) {
|
||||||
const swaggerVersion = jsSpec.get("swagger")
|
const swaggerVersion = jsSpec.get("swagger")
|
||||||
if(!swaggerVersion) {
|
if(typeof swaggerVersion !== "string") {
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -47,11 +47,11 @@ class Parameters extends Component {
|
|||||||
|
|
||||||
onChange = ( param, value, isXml ) => {
|
onChange = ( param, value, isXml ) => {
|
||||||
let {
|
let {
|
||||||
specActions: { changeParam },
|
specActions: { changeParamByIdentity },
|
||||||
onChangeKey,
|
onChangeKey,
|
||||||
} = this.props
|
} = this.props
|
||||||
|
|
||||||
changeParam( onChangeKey, param.get("name"), param.get("in"), value, isXml)
|
changeParamByIdentity( onChangeKey, param, value, isXml)
|
||||||
}
|
}
|
||||||
|
|
||||||
onChangeConsumesWrapper = ( val ) => {
|
onChangeConsumesWrapper = ( val ) => {
|
||||||
@@ -145,7 +145,8 @@ class Parameters extends Component {
|
|||||||
getComponent={ getComponent }
|
getComponent={ getComponent }
|
||||||
specPath={specPath.push(i)}
|
specPath={specPath.push(i)}
|
||||||
getConfigs={ getConfigs }
|
getConfigs={ getConfigs }
|
||||||
param={ parameter }
|
rawParam={ parameter }
|
||||||
|
param={ specSelectors.parameterWithMetaByIdentity(pathMethod, parameter) }
|
||||||
key={ parameter.get( "name" ) }
|
key={ parameter.get( "name" ) }
|
||||||
onChange={ this.onChange }
|
onChange={ this.onChange }
|
||||||
onChangeConsumes={this.onChangeConsumesWrapper}
|
onChangeConsumes={this.onChangeConsumesWrapper}
|
||||||
|
|||||||
@@ -29,6 +29,7 @@ export const sampleFromSchema = (schema, config={}) => {
|
|||||||
let { type, example, properties, additionalProperties, items } = objectify(schema)
|
let { type, example, properties, additionalProperties, items } = objectify(schema)
|
||||||
let { includeReadOnly, includeWriteOnly } = config
|
let { includeReadOnly, includeWriteOnly } = config
|
||||||
|
|
||||||
|
|
||||||
if(example !== undefined) {
|
if(example !== undefined) {
|
||||||
return deeplyStripKey(example, "$$ref", (val) => {
|
return deeplyStripKey(example, "$$ref", (val) => {
|
||||||
// do a couple of quick sanity tests to ensure the value
|
// do a couple of quick sanity tests to ensure the value
|
||||||
|
|||||||
@@ -234,6 +234,13 @@ export function changeParam( path, paramName, paramIn, value, isXml ){
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export function changeParamByIdentity( pathMethod, param, value, isXml ){
|
||||||
|
return {
|
||||||
|
type: UPDATE_PARAM,
|
||||||
|
payload:{ path: pathMethod, param, value, isXml }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
export const updateResolvedSubtree = (path, value) => {
|
export const updateResolvedSubtree = (path, value) => {
|
||||||
return {
|
return {
|
||||||
type: UPDATE_RESOLVED_SUBTREE,
|
type: UPDATE_RESOLVED_SUBTREE,
|
||||||
|
|||||||
@@ -51,12 +51,21 @@ export default {
|
|||||||
},
|
},
|
||||||
|
|
||||||
[UPDATE_PARAM]: ( state, {payload} ) => {
|
[UPDATE_PARAM]: ( state, {payload} ) => {
|
||||||
let { path: pathMethod, paramName, paramIn, value, isXml } = payload
|
let { path: pathMethod, paramName, paramIn, param, value, isXml } = payload
|
||||||
|
|
||||||
|
let paramKey
|
||||||
|
|
||||||
|
// `hashCode` is an Immutable.js Map method
|
||||||
|
if(param && param.hashCode && !paramIn && !paramName) {
|
||||||
|
paramKey = `${param.get("name")}.${param.get("in")}.hash-${param.hashCode()}`
|
||||||
|
} else {
|
||||||
|
paramKey = `${paramName}.${paramIn}`
|
||||||
|
}
|
||||||
|
|
||||||
const valueKey = isXml ? "value_xml" : "value"
|
const valueKey = isXml ? "value_xml" : "value"
|
||||||
|
|
||||||
return state.setIn(
|
return state.setIn(
|
||||||
["meta", "paths", ...pathMethod, "parameters", `${paramName}.${paramIn}`, valueKey],
|
["meta", "paths", ...pathMethod, "parameters", paramKey, valueKey],
|
||||||
value
|
value
|
||||||
)
|
)
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -294,34 +294,42 @@ export const allowTryItOutFor = () => {
|
|||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
|
|
||||||
export const operationWithMeta = (state, path, method) => {
|
export const parameterWithMetaByIdentity = (state, pathMethod, param) => {
|
||||||
const op = specJsonWithResolvedSubtrees(state).getIn(["paths", path, method], Map())
|
const opParams = specJsonWithResolvedSubtrees(state).getIn(["paths", ...pathMethod, "parameters"], OrderedMap())
|
||||||
const meta = state.getIn(["meta", "paths", path, method], Map())
|
const metaParams = state.getIn(["meta", "paths", ...pathMethod, "parameters"], OrderedMap())
|
||||||
|
|
||||||
const mergedParams = op.get("parameters", List()).map((param) => {
|
const mergedParams = opParams.map((currentParam) => {
|
||||||
return Map().merge(
|
const nameInKeyedMeta = metaParams.get(`${param.get("name")}.${param.get("in")}`)
|
||||||
param,
|
const hashKeyedMeta = metaParams.get(`${param.get("name")}.${param.get("in")}.hash-${param.hashCode()}`)
|
||||||
meta.getIn(["parameters", `${param.get("name")}.${param.get("in")}`])
|
return OrderedMap().merge(
|
||||||
|
currentParam,
|
||||||
|
nameInKeyedMeta,
|
||||||
|
hashKeyedMeta
|
||||||
)
|
)
|
||||||
})
|
})
|
||||||
|
|
||||||
return Map()
|
return mergedParams.find(curr => curr.get("in") === param.get("in") && curr.get("name") === param.get("name"), OrderedMap())
|
||||||
.merge(op, meta)
|
|
||||||
.set("parameters", mergedParams)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
export const parameterWithMeta = (state, pathMethod, paramName, paramIn) => {
|
|
||||||
const opParams = specJsonWithResolvedSubtrees(state).getIn(["paths", ...pathMethod, "parameters"], Map())
|
|
||||||
const metaParams = state.getIn(["meta", "paths", ...pathMethod, "parameters"], Map())
|
|
||||||
|
|
||||||
const mergedParams = opParams.map((param) => {
|
export const parameterWithMeta = (state, pathMethod, paramName, paramIn) => {
|
||||||
return Map().merge(
|
const opParams = specJsonWithResolvedSubtrees(state).getIn(["paths", ...pathMethod, "parameters"], OrderedMap())
|
||||||
param,
|
const currentParam = opParams.find(param => param.get("in") === paramIn && param.get("name") === paramName, OrderedMap())
|
||||||
metaParams.get(`${param.get("name")}.${param.get("in")}`)
|
|
||||||
)
|
return parameterWithMetaByIdentity(state, pathMethod, currentParam)
|
||||||
|
}
|
||||||
|
|
||||||
|
export const operationWithMeta = (state, path, method) => {
|
||||||
|
const op = specJsonWithResolvedSubtrees(state).getIn(["paths", path, method], OrderedMap())
|
||||||
|
const meta = state.getIn(["meta", "paths", path, method], OrderedMap())
|
||||||
|
|
||||||
|
const mergedParams = op.get("parameters", List()).map((param) => {
|
||||||
|
return parameterWithMetaByIdentity(state, [path, method], param)
|
||||||
})
|
})
|
||||||
|
|
||||||
return mergedParams.find(param => param.get("in") === paramIn && param.get("name") === paramName, Map())
|
return OrderedMap()
|
||||||
|
.merge(op, meta)
|
||||||
|
.set("parameters", mergedParams)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Get the parameter value by parameter name
|
// Get the parameter value by parameter name
|
||||||
|
|||||||
+1
-1
@@ -742,7 +742,7 @@ export const getCommonExtensions = (defObj) => defObj.filter((v, k) => /^pattern
|
|||||||
// `predicate` can be used to discriminate the stripping further,
|
// `predicate` can be used to discriminate the stripping further,
|
||||||
// by preserving the key's place in the object based on its value.
|
// by preserving the key's place in the object based on its value.
|
||||||
export function deeplyStripKey(input, keyToStrip, predicate = () => true) {
|
export function deeplyStripKey(input, keyToStrip, predicate = () => true) {
|
||||||
if(typeof input !== "object" || Array.isArray(input) || !keyToStrip) {
|
if(typeof input !== "object" || Array.isArray(input) || input === null || !keyToStrip) {
|
||||||
return input
|
return input
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -166,6 +166,7 @@ section.models
|
|||||||
.model-container
|
.model-container
|
||||||
{
|
{
|
||||||
margin: 0 20px 15px;
|
margin: 0 20px 15px;
|
||||||
|
position: relative;
|
||||||
|
|
||||||
transition: all .5s;
|
transition: all .5s;
|
||||||
|
|
||||||
@@ -186,6 +187,13 @@ section.models
|
|||||||
{
|
{
|
||||||
margin: 0 20px;
|
margin: 0 20px;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.models-jump-to-path {
|
||||||
|
position: absolute;
|
||||||
|
top: 8px;
|
||||||
|
right: 5px;
|
||||||
|
opacity: 0.65;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
.model-box
|
.model-box
|
||||||
|
|||||||
@@ -1,13 +1,13 @@
|
|||||||
@mixin text_body($color: $text-body-default-font-color)
|
@mixin text_body($color: $text-body-default-font-color)
|
||||||
{
|
{
|
||||||
font-family: 'Open Sans', sans-serif;
|
font-family: sans-serif;
|
||||||
|
|
||||||
color: $color;
|
color: $color;
|
||||||
}
|
}
|
||||||
|
|
||||||
@mixin text_code($color: $text-code-default-font-color)
|
@mixin text_code($color: $text-code-default-font-color)
|
||||||
{
|
{
|
||||||
font-family: 'Source Code Pro', monospace;
|
font-family: monospace;
|
||||||
font-weight: 600;
|
font-weight: 600;
|
||||||
|
|
||||||
color: $color;
|
color: $color;
|
||||||
@@ -15,7 +15,7 @@
|
|||||||
|
|
||||||
@mixin text_headline($color: $text-headline-default-font-color)
|
@mixin text_headline($color: $text-headline-default-font-color)
|
||||||
{
|
{
|
||||||
font-family: 'Titillium Web', sans-serif;
|
font-family: sans-serif;
|
||||||
|
|
||||||
color: $color;
|
color: $color;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -18,12 +18,14 @@ describe("bug #4557: default parameter values", function(){
|
|||||||
getComponent: ()=> "div",
|
getComponent: ()=> "div",
|
||||||
specSelectors: {
|
specSelectors: {
|
||||||
security(){},
|
security(){},
|
||||||
parameterWithMeta(){ return paramValue },
|
parameterWithMetaByIdentity(){ return paramValue },
|
||||||
isOAS3(){ return false }
|
isOAS3(){ return false }
|
||||||
},
|
},
|
||||||
|
fn: {},
|
||||||
operation: {get: ()=>{}},
|
operation: {get: ()=>{}},
|
||||||
onChange: createSpy(),
|
onChange: createSpy(),
|
||||||
param: paramValue,
|
param: paramValue,
|
||||||
|
rawParam: paramValue,
|
||||||
onChangeConsumes: () => {},
|
onChangeConsumes: () => {},
|
||||||
pathMethod: [],
|
pathMethod: [],
|
||||||
getConfigs: () => { return {} },
|
getConfigs: () => { return {} },
|
||||||
@@ -32,7 +34,8 @@ describe("bug #4557: default parameter values", function(){
|
|||||||
|
|
||||||
render(<ParameterRow {...props}/>)
|
render(<ParameterRow {...props}/>)
|
||||||
|
|
||||||
expect(props.onChange).toHaveBeenCalledWith(paramValue, "MyDefaultValue")
|
expect(props.onChange).toHaveBeenCalled()
|
||||||
|
expect(props.onChange).toHaveBeenCalledWith(paramValue, "MyDefaultValue", false)
|
||||||
})
|
})
|
||||||
it("should apply an OpenAPI 3.0 default value", function(){
|
it("should apply an OpenAPI 3.0 default value", function(){
|
||||||
|
|
||||||
@@ -48,12 +51,14 @@ describe("bug #4557: default parameter values", function(){
|
|||||||
getComponent: ()=> "div",
|
getComponent: ()=> "div",
|
||||||
specSelectors: {
|
specSelectors: {
|
||||||
security(){},
|
security(){},
|
||||||
parameterWithMeta(){ return paramValue },
|
parameterWithMetaByIdentity(){ return paramValue },
|
||||||
isOAS3(){ return true }
|
isOAS3(){ return true }
|
||||||
},
|
},
|
||||||
|
fn: {},
|
||||||
operation: {get: ()=>{}},
|
operation: {get: ()=>{}},
|
||||||
onChange: createSpy(),
|
onChange: createSpy(),
|
||||||
param: paramValue,
|
param: paramValue,
|
||||||
|
rawParam: paramValue,
|
||||||
onChangeConsumes: () => {},
|
onChangeConsumes: () => {},
|
||||||
pathMethod: [],
|
pathMethod: [],
|
||||||
getConfigs: () => { return {} },
|
getConfigs: () => { return {} },
|
||||||
@@ -62,6 +67,7 @@ describe("bug #4557: default parameter values", function(){
|
|||||||
|
|
||||||
render(<ParameterRow {...props}/>)
|
render(<ParameterRow {...props}/>)
|
||||||
|
|
||||||
expect(props.onChange).toHaveBeenCalledWith(paramValue, "MyDefaultValue")
|
expect(props.onChange).toHaveBeenCalled()
|
||||||
|
expect(props.onChange).toHaveBeenCalledWith(paramValue, "MyDefaultValue", false)
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
|
|||||||
@@ -0,0 +1,68 @@
|
|||||||
|
import { fromJS } from "immutable"
|
||||||
|
import { isOAS3, isSwagger2 } from "corePlugins/oas3/helpers"
|
||||||
|
import expect from "expect"
|
||||||
|
|
||||||
|
const isOAS3Shorthand = (version) => isOAS3(fromJS({
|
||||||
|
openapi: version
|
||||||
|
}))
|
||||||
|
|
||||||
|
const isSwagger2Shorthand = (version) => isSwagger2(fromJS({
|
||||||
|
swagger: version
|
||||||
|
}))
|
||||||
|
|
||||||
|
describe("isOAS3", function () {
|
||||||
|
it("should recognize valid OAS3 version values", function () {
|
||||||
|
expect(isOAS3Shorthand("3.0.0")).toEqual(true)
|
||||||
|
expect(isOAS3Shorthand("3.0.1")).toEqual(true)
|
||||||
|
expect(isOAS3Shorthand("3.0.11111")).toEqual(true)
|
||||||
|
expect(isOAS3Shorthand("3.0.0-rc0")).toEqual(true)
|
||||||
|
})
|
||||||
|
|
||||||
|
it("should fail for invalid OAS3 version values", function () {
|
||||||
|
expect(isOAS3Shorthand("3.0")).toEqual(false)
|
||||||
|
expect(isOAS3Shorthand("3.0.")).toEqual(false)
|
||||||
|
expect(isOAS3Shorthand("2.0")).toEqual(false)
|
||||||
|
})
|
||||||
|
|
||||||
|
it("should gracefully fail for non-string values", function () {
|
||||||
|
expect(isOAS3Shorthand(3.0)).toEqual(false)
|
||||||
|
expect(isOAS3Shorthand(3)).toEqual(false)
|
||||||
|
expect(isOAS3Shorthand({})).toEqual(false)
|
||||||
|
expect(isOAS3Shorthand(null)).toEqual(false)
|
||||||
|
})
|
||||||
|
|
||||||
|
it("should gracefully fail when `openapi` field is missing", function () {
|
||||||
|
expect(isOAS3(fromJS({
|
||||||
|
openApi: "3.0.0"
|
||||||
|
}))).toEqual(false)
|
||||||
|
expect(isOAS3Shorthand(null)).toEqual(false)
|
||||||
|
})
|
||||||
|
})
|
||||||
|
|
||||||
|
describe("isSwagger2", function () {
|
||||||
|
it("should recognize valid Swagger 2.0 version values", function () {
|
||||||
|
expect(isSwagger2Shorthand("2.0")).toEqual(true)
|
||||||
|
expect(isSwagger2Shorthand("2.0-rc0")).toEqual(true)
|
||||||
|
})
|
||||||
|
|
||||||
|
it("should fail for invalid Swagger 2.0 version values", function () {
|
||||||
|
expect(isSwagger2Shorthand("3.0")).toEqual(false)
|
||||||
|
expect(isSwagger2Shorthand("3.0.")).toEqual(false)
|
||||||
|
expect(isSwagger2Shorthand("2.1")).toEqual(false)
|
||||||
|
expect(isSwagger2Shorthand("1.2")).toEqual(false)
|
||||||
|
expect(isSwagger2Shorthand("2")).toEqual(false)
|
||||||
|
})
|
||||||
|
|
||||||
|
it("should gracefully fail for non-string values", function () {
|
||||||
|
expect(isSwagger2Shorthand(2.0)).toEqual(false)
|
||||||
|
expect(isSwagger2Shorthand(2)).toEqual(false)
|
||||||
|
expect(isSwagger2Shorthand({})).toEqual(false)
|
||||||
|
expect(isSwagger2Shorthand(null)).toEqual(false)
|
||||||
|
})
|
||||||
|
|
||||||
|
it("should gracefully fail when `swagger` field is missing", function () {
|
||||||
|
expect(isSwagger2(fromJS({
|
||||||
|
Swagger: "2.0"
|
||||||
|
}))).toEqual(false)
|
||||||
|
})
|
||||||
|
})
|
||||||
@@ -379,6 +379,46 @@ describe("sampleFromSchema", function() {
|
|||||||
|
|
||||||
expect(sampleFromSchema(definition)).toEqual(expected)
|
expect(sampleFromSchema(definition)).toEqual(expected)
|
||||||
})
|
})
|
||||||
|
|
||||||
|
it("returns null for a null example", function() {
|
||||||
|
var definition = {
|
||||||
|
"type": "object",
|
||||||
|
"properties": {
|
||||||
|
"foo": {
|
||||||
|
"type": "string",
|
||||||
|
"nullable": true,
|
||||||
|
"example": null
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
var expected = {
|
||||||
|
foo: null
|
||||||
|
}
|
||||||
|
|
||||||
|
expect(sampleFromSchema(definition)).toEqual(expected)
|
||||||
|
})
|
||||||
|
|
||||||
|
it("returns null for a null object-level example", function() {
|
||||||
|
var definition = {
|
||||||
|
"type": "object",
|
||||||
|
"properties": {
|
||||||
|
"foo": {
|
||||||
|
"type": "string",
|
||||||
|
"nullable": true
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"example": {
|
||||||
|
"foo": null
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
var expected = {
|
||||||
|
foo: null
|
||||||
|
}
|
||||||
|
|
||||||
|
expect(sampleFromSchema(definition)).toEqual(expected)
|
||||||
|
})
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
|
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
/* eslint-env mocha */
|
/* eslint-env mocha */
|
||||||
import expect, { createSpy } from "expect"
|
import expect, { createSpy } from "expect"
|
||||||
import { fromJS } from "immutable"
|
import { fromJS } from "immutable"
|
||||||
import { execute, executeRequest } from "corePlugins/spec/actions"
|
import { execute, executeRequest, changeParamByIdentity } from "corePlugins/spec/actions"
|
||||||
|
|
||||||
describe("spec plugin - actions", function(){
|
describe("spec plugin - actions", function(){
|
||||||
|
|
||||||
@@ -184,4 +184,27 @@ describe("spec plugin - actions", function(){
|
|||||||
it.skip("should call errActions.newErr, if the fn.execute rejects", function(){
|
it.skip("should call errActions.newErr, if the fn.execute rejects", function(){
|
||||||
})
|
})
|
||||||
|
|
||||||
|
describe("changeParamByIdentity", function () {
|
||||||
|
it("should map its arguments to a payload", function () {
|
||||||
|
const pathMethod = ["/one", "get"]
|
||||||
|
const param = fromJS({
|
||||||
|
name: "body",
|
||||||
|
in: "body"
|
||||||
|
})
|
||||||
|
const value = "my value"
|
||||||
|
const isXml = false
|
||||||
|
|
||||||
|
const result = changeParamByIdentity(pathMethod, param, value, isXml)
|
||||||
|
|
||||||
|
expect(result).toEqual({
|
||||||
|
type: "spec_update_param",
|
||||||
|
payload: {
|
||||||
|
path: pathMethod,
|
||||||
|
param,
|
||||||
|
value,
|
||||||
|
isXml
|
||||||
|
}
|
||||||
|
})
|
||||||
|
})
|
||||||
|
})
|
||||||
})
|
})
|
||||||
|
|||||||
@@ -129,4 +129,53 @@ describe("spec plugin - reducer", function(){
|
|||||||
expect(response).toEqual(expectedResult)
|
expect(response).toEqual(expectedResult)
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
|
describe("SPEC_UPDATE_PARAM", function() {
|
||||||
|
it("should store parameter values by name+in", () => {
|
||||||
|
const updateParam = reducer["spec_update_param"]
|
||||||
|
|
||||||
|
const path = "/pet/post"
|
||||||
|
const method = "POST"
|
||||||
|
|
||||||
|
const state = fromJS({})
|
||||||
|
const result = updateParam(state, {
|
||||||
|
payload: {
|
||||||
|
path: [path, method],
|
||||||
|
paramName: "body",
|
||||||
|
paramIn: "body",
|
||||||
|
value: `{ "a": 123 }`,
|
||||||
|
isXml: false
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
|
const response = result.getIn(["meta", "paths", path, method, "parameters", "body.body", "value"])
|
||||||
|
expect(response).toEqual(`{ "a": 123 }`)
|
||||||
|
})
|
||||||
|
it("should store parameter values by identity", () => {
|
||||||
|
const updateParam = reducer["spec_update_param"]
|
||||||
|
|
||||||
|
const path = "/pet/post"
|
||||||
|
const method = "POST"
|
||||||
|
|
||||||
|
const param = fromJS({
|
||||||
|
name: "body",
|
||||||
|
in: "body",
|
||||||
|
schema: {
|
||||||
|
type: "string"
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
|
const state = fromJS({})
|
||||||
|
const result = updateParam(state, {
|
||||||
|
payload: {
|
||||||
|
param,
|
||||||
|
path: [path, method],
|
||||||
|
value: `{ "a": 123 }`,
|
||||||
|
isXml: false
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
|
const value = result.getIn(["meta", "paths", path, method, "parameters", `body.body.hash-${param.hashCode()}`, "value"])
|
||||||
|
expect(value).toEqual(`{ "a": 123 }`)
|
||||||
|
})
|
||||||
|
})
|
||||||
})
|
})
|
||||||
|
|||||||
@@ -11,6 +11,11 @@ import {
|
|||||||
} from "corePlugins/spec/selectors"
|
} from "corePlugins/spec/selectors"
|
||||||
|
|
||||||
import Petstore from "./assets/petstore.json"
|
import Petstore from "./assets/petstore.json"
|
||||||
|
import {
|
||||||
|
operationWithMeta,
|
||||||
|
parameterWithMeta,
|
||||||
|
parameterWithMetaByIdentity
|
||||||
|
} from "../../../../src/core/plugins/spec/selectors"
|
||||||
|
|
||||||
describe("spec plugin - selectors", function(){
|
describe("spec plugin - selectors", function(){
|
||||||
|
|
||||||
@@ -451,4 +456,260 @@ describe("spec plugin - selectors", function(){
|
|||||||
expect(result.getIn(["paths"]).keySeq().toJS()).toEqual(correctOrder)
|
expect(result.getIn(["paths"]).keySeq().toJS()).toEqual(correctOrder)
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
|
|
||||||
|
describe("operationWithMeta", function() {
|
||||||
|
it("should support merging in name+in keyed param metadata", function () {
|
||||||
|
const state = fromJS({
|
||||||
|
json: {
|
||||||
|
paths: {
|
||||||
|
"/": {
|
||||||
|
"get": {
|
||||||
|
parameters: [
|
||||||
|
{
|
||||||
|
name: "body",
|
||||||
|
in: "body"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
meta: {
|
||||||
|
paths: {
|
||||||
|
"/": {
|
||||||
|
"get": {
|
||||||
|
parameters: {
|
||||||
|
"body.body": {
|
||||||
|
value: "abc123"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
|
const result = operationWithMeta(state, "/", "get")
|
||||||
|
|
||||||
|
expect(result.toJS()).toEqual({
|
||||||
|
parameters: [
|
||||||
|
{
|
||||||
|
name: "body",
|
||||||
|
in: "body",
|
||||||
|
value: "abc123"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
})
|
||||||
|
})
|
||||||
|
it("should support merging in hash-keyed param metadata", function () {
|
||||||
|
const bodyParam = fromJS({
|
||||||
|
name: "body",
|
||||||
|
in: "body"
|
||||||
|
})
|
||||||
|
|
||||||
|
const state = fromJS({
|
||||||
|
json: {
|
||||||
|
paths: {
|
||||||
|
"/": {
|
||||||
|
"get": {
|
||||||
|
parameters: [
|
||||||
|
bodyParam
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
meta: {
|
||||||
|
paths: {
|
||||||
|
"/": {
|
||||||
|
"get": {
|
||||||
|
parameters: {
|
||||||
|
[`body.body.hash-${bodyParam.hashCode()}`]: {
|
||||||
|
value: "abc123"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
|
const result = operationWithMeta(state, "/", "get")
|
||||||
|
|
||||||
|
expect(result.toJS()).toEqual({
|
||||||
|
parameters: [
|
||||||
|
{
|
||||||
|
name: "body",
|
||||||
|
in: "body",
|
||||||
|
value: "abc123"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
})
|
||||||
|
})
|
||||||
|
})
|
||||||
|
describe("parameterWithMeta", function() {
|
||||||
|
it("should support merging in name+in keyed param metadata", function () {
|
||||||
|
const state = fromJS({
|
||||||
|
json: {
|
||||||
|
paths: {
|
||||||
|
"/": {
|
||||||
|
"get": {
|
||||||
|
parameters: [
|
||||||
|
{
|
||||||
|
name: "body",
|
||||||
|
in: "body"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
meta: {
|
||||||
|
paths: {
|
||||||
|
"/": {
|
||||||
|
"get": {
|
||||||
|
parameters: {
|
||||||
|
"body.body": {
|
||||||
|
value: "abc123"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
|
const result = parameterWithMeta(state, ["/", "get"], "body", "body")
|
||||||
|
|
||||||
|
expect(result.toJS()).toEqual({
|
||||||
|
name: "body",
|
||||||
|
in: "body",
|
||||||
|
value: "abc123"
|
||||||
|
})
|
||||||
|
})
|
||||||
|
it("should give best-effort when encountering hash-keyed param metadata", function () {
|
||||||
|
const bodyParam = fromJS({
|
||||||
|
name: "body",
|
||||||
|
in: "body"
|
||||||
|
})
|
||||||
|
|
||||||
|
const state = fromJS({
|
||||||
|
json: {
|
||||||
|
paths: {
|
||||||
|
"/": {
|
||||||
|
"get": {
|
||||||
|
parameters: [
|
||||||
|
bodyParam
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
meta: {
|
||||||
|
paths: {
|
||||||
|
"/": {
|
||||||
|
"get": {
|
||||||
|
parameters: {
|
||||||
|
[`body.body.hash-${bodyParam.hashCode()}`]: {
|
||||||
|
value: "abc123"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
|
const result = parameterWithMeta(state, ["/", "get"], "body", "body")
|
||||||
|
|
||||||
|
expect(result.toJS()).toEqual({
|
||||||
|
name: "body",
|
||||||
|
in: "body",
|
||||||
|
value: "abc123"
|
||||||
|
})
|
||||||
|
})
|
||||||
|
|
||||||
|
})
|
||||||
|
describe("parameterWithMetaByIdentity", function() {
|
||||||
|
it("should support merging in name+in keyed param metadata", function () {
|
||||||
|
const bodyParam = fromJS({
|
||||||
|
name: "body",
|
||||||
|
in: "body"
|
||||||
|
})
|
||||||
|
|
||||||
|
const state = fromJS({
|
||||||
|
json: {
|
||||||
|
paths: {
|
||||||
|
"/": {
|
||||||
|
"get": {
|
||||||
|
parameters: [bodyParam]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
meta: {
|
||||||
|
paths: {
|
||||||
|
"/": {
|
||||||
|
"get": {
|
||||||
|
parameters: {
|
||||||
|
"body.body": {
|
||||||
|
value: "abc123"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
|
const result = parameterWithMetaByIdentity(state, ["/", "get"], bodyParam)
|
||||||
|
|
||||||
|
expect(result.toJS()).toEqual({
|
||||||
|
name: "body",
|
||||||
|
in: "body",
|
||||||
|
value: "abc123"
|
||||||
|
})
|
||||||
|
})
|
||||||
|
it("should support merging in hash-keyed param metadata", function () {
|
||||||
|
const bodyParam = fromJS({
|
||||||
|
name: "body",
|
||||||
|
in: "body"
|
||||||
|
})
|
||||||
|
|
||||||
|
const state = fromJS({
|
||||||
|
json: {
|
||||||
|
paths: {
|
||||||
|
"/": {
|
||||||
|
"get": {
|
||||||
|
parameters: [
|
||||||
|
bodyParam
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
meta: {
|
||||||
|
paths: {
|
||||||
|
"/": {
|
||||||
|
"get": {
|
||||||
|
parameters: {
|
||||||
|
[`body.body.hash-${bodyParam.hashCode()}`]: {
|
||||||
|
value: "abc123"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
|
const result = parameterWithMetaByIdentity(state, ["/", "get"], bodyParam)
|
||||||
|
|
||||||
|
expect(result.toJS()).toEqual({
|
||||||
|
name: "body",
|
||||||
|
in: "body",
|
||||||
|
value: "abc123"
|
||||||
|
})
|
||||||
|
})
|
||||||
|
})
|
||||||
})
|
})
|
||||||
|
|||||||
@@ -5,7 +5,6 @@
|
|||||||
<meta charset="UTF-8">
|
<meta charset="UTF-8">
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||||
<title>Swagger UI</title>
|
<title>Swagger UI</title>
|
||||||
<link href="https://fonts.googleapis.com/css?family=Open+Sans:400,700|Source+Code+Pro:300,600|Titillium+Web:400,600,700" rel="stylesheet">
|
|
||||||
<link rel="stylesheet" type="text/css" href="./swagger-ui.css" >
|
<link rel="stylesheet" type="text/css" href="./swagger-ui.css" >
|
||||||
<link rel="icon" type="image/png" href="./favicon-32x32.png" sizes="32x32" />
|
<link rel="icon" type="image/png" href="./favicon-32x32.png" sizes="32x32" />
|
||||||
<link rel="icon" type="image/png" href="./favicon-16x16.png" sizes="16x16" />
|
<link rel="icon" type="image/png" href="./favicon-16x16.png" sizes="16x16" />
|
||||||
|
|||||||
@@ -21,7 +21,7 @@
|
|||||||
|
|
||||||
"selenium" : {
|
"selenium" : {
|
||||||
"start_process" : true,
|
"start_process" : true,
|
||||||
"server_path" : "node_modules/selenium-server-standalone-jar/jar/selenium-server-standalone-3.4.0.jar",
|
"server_path" : "node_modules/selenium-server-standalone-jar/jar/selenium-server-standalone-3.12.0.jar",
|
||||||
"log_path" : "",
|
"log_path" : "",
|
||||||
"host" : "127.0.0.1",
|
"host" : "127.0.0.1",
|
||||||
"port" : 4444,
|
"port" : 4444,
|
||||||
@@ -60,4 +60,4 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user