Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
59a6a9b20f | ||
|
|
5b7e422d75 | ||
|
|
9709df82d3 | ||
|
|
4055f51b93 | ||
|
|
8f65483510 | ||
|
|
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]
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -4,14 +4,6 @@ about: Suggest an new feature or enhancement for this project
|
|||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
### Q&A (please complete the following information)
|
|
||||||
- OS: [e.g. macOS]
|
|
||||||
- Browser: [e.g. chrome, safari]
|
|
||||||
- Version: [e.g. 22]
|
|
||||||
- Method of installation: [e.g. npm, dist assets]
|
|
||||||
- Swagger-UI version: [e.g. 3.10.0]
|
|
||||||
- Swagger/OpenAPI version: [e.g. Swagger 2.0, OpenAPI 3.0]
|
|
||||||
|
|
||||||
### Content & configuration
|
### Content & configuration
|
||||||
|
|
||||||
Swagger/OpenAPI definition:
|
Swagger/OpenAPI definition:
|
||||||
|
|||||||
@@ -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.3 | 2018-06-16 | 2.0, 3.0 | [tag v3.17.3](https://github.com/swagger-api/swagger-ui/tree/v3.17.3)
|
||||||
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
+35
-35
@@ -25,13 +25,13 @@ Type notations are formatted like so:
|
|||||||
|
|
||||||
Parameter Name | Description
|
Parameter Name | Description
|
||||||
--- | ---
|
--- | ---
|
||||||
`configUrl` | `String`. URL to fetch external configuration document from.
|
<a name="configUrl"></a>`configUrl` | `String`. URL to fetch external configuration document from.
|
||||||
`dom_id` |`String`, **REQUIRED** if `domNode` is not provided. The id of a dom element inside which SwaggerUi will put the user interface for swagger.
|
<a name="dom_id"></a>`dom_id` |`String`, **REQUIRED** if `domNode` is not provided. The id of a dom element inside which SwaggerUi will put the user interface for swagger.
|
||||||
`domNode` | `Element`, **REQUIRED** if `dom_id` is not provided. The HTML DOM element inside which SwaggerUi will put the user interface for swagger. Overrides `dom_id`.
|
<a name="domNode"></a>`domNode` | `Element`, **REQUIRED** if `dom_id` is not provided. The HTML DOM element inside which SwaggerUi will put the user interface for swagger. Overrides `dom_id`.
|
||||||
`spec` | `Object={}`. A JS object describing the OpenAPI Specification. When used, the `url` parameter will not be parsed. This is useful for testing manually-generated specifications without hosting them.
|
<a name="spec"></a>`spec` | `Object={}`. A JS object describing the OpenAPI Specification. When used, the `url` parameter will not be parsed. This is useful for testing manually-generated specifications without hosting them.
|
||||||
`url` | `String`. The url pointing to API definition (normally `swagger.json` or `swagger.yaml`). Will be ignored if `urls` or `spec` is used.
|
<a name="url"></a>`url` | `String`. The url pointing to API definition (normally `swagger.json` or `swagger.yaml`). Will be ignored if `urls` or `spec` is used.
|
||||||
`urls` | `Array`. An array of API definition objects (`[{url: "<url1>", name: "<name1>"},{url: "<url2>", name: "<name2>"}]`) used by Topbar plugin. When used and Topbar plugin is enabled, the `url` parameter will not be parsed. Names and URLs must be unique among all items in this array, since they're used as identifiers.
|
<a name="urls"></a>`urls` | `Array`. An array of API definition objects (`[{url: "<url1>", name: "<name1>"},{url: "<url2>", name: "<name2>"}]`) used by Topbar plugin. When used and Topbar plugin is enabled, the `url` parameter will not be parsed. Names and URLs must be unique among all items in this array, since they're used as identifiers.
|
||||||
`urls.primaryName` | `String`. When using `urls`, you can use this subparameter. If the value matches the name of a spec provided in `urls`, that spec will be displayed when Swagger-UI loads, instead of defaulting to the first spec in `urls`.
|
<a name="urls.primaryName"></a>`urls.primaryName` | `String`. When using `urls`, you can use this subparameter. If the value matches the name of a spec provided in `urls`, that spec will be displayed when Swagger-UI loads, instead of defaulting to the first spec in `urls`.
|
||||||
|
|
||||||
##### Plugin system
|
##### Plugin system
|
||||||
|
|
||||||
@@ -39,51 +39,51 @@ Read more about the plugin system in the [Customization documentation](/docs/cus
|
|||||||
|
|
||||||
Parameter Name | Description
|
Parameter Name | Description
|
||||||
--- | ---
|
--- | ---
|
||||||
`layout` | `String="BaseLayout"`. The name of a component available via the plugin system to use as the top-level layout for Swagger-UI.
|
<a name="layout"></a>`layout` | `String="BaseLayout"`. The name of a component available via the plugin system to use as the top-level layout for Swagger-UI.
|
||||||
`plugins` | `Array=[]`. An array of plugin functions to use in Swagger-UI.
|
<a name="plugins"></a>`plugins` | `Array=[]`. An array of plugin functions to use in Swagger-UI.
|
||||||
`presets` | `Array=[SwaggerUI.presets.ApisPreset]`. An array of presets to use in Swagger-UI. Usually, you'll want to include `ApisPreset` if you use this option.
|
<a name="presets"></a>`presets` | `Array=[SwaggerUI.presets.ApisPreset]`. An array of presets to use in Swagger-UI. Usually, you'll want to include `ApisPreset` if you use this option.
|
||||||
|
|
||||||
##### Display
|
##### Display
|
||||||
|
|
||||||
Parameter Name | Description
|
Parameter Name | Description
|
||||||
--- | ---
|
--- | ---
|
||||||
`deepLinking` | `Boolean=false`. If set to `true`, enables deep linking for tags and operations. See the [Deep Linking documentation](/docs/usage/deep-linking.md) for more information.
|
<a name="deepLinking"></a>`deepLinking` | `Boolean=false`. If set to `true`, enables deep linking for tags and operations. See the [Deep Linking documentation](/docs/usage/deep-linking.md) for more information.
|
||||||
`displayOperationId` | `Boolean=false`. Controls the display of operationId in operations list. The default is `false`.
|
<a name="displayOperationId"></a>`displayOperationId` | `Boolean=false`. Controls the display of operationId in operations list. The default is `false`.
|
||||||
`defaultModelsExpandDepth` | `Number=1`. The default expansion depth for models (set to -1 completely hide the models).
|
<a name="defaultModelsExpandDepth"></a>`defaultModelsExpandDepth` | `Number=1`. The default expansion depth for models (set to -1 completely hide the models).
|
||||||
`defaultModelExpandDepth` | `Number=1`. The default expansion depth for the model on the model-example section.
|
<a name="defaultModelExpandDepth"></a>`defaultModelExpandDepth` | `Number=1`. The default expansion depth for the model on the model-example section.
|
||||||
`defaultModelRendering` | `String=["example"*, "model"]`. Controls how the model is shown when the API is first rendered. (The user can always switch the rendering for a given model by clicking the 'Model' and 'Example Value' links.)
|
<a name="defaultModelRendering"></a>`defaultModelRendering` | `String=["example"*, "model"]`. Controls how the model is shown when the API is first rendered. (The user can always switch the rendering for a given model by clicking the 'Model' and 'Example Value' links.)
|
||||||
`displayRequestDuration` | `Boolean=false`. Controls the display of the request duration (in milliseconds) for Try-It-Out requests.
|
<a name="displayRequestDuration"></a>`displayRequestDuration` | `Boolean=false`. Controls the display of the request duration (in milliseconds) for Try-It-Out requests.
|
||||||
`docExpansion` | `String=["list"*, "full", "none"]`. Controls the default expansion setting for the operations and tags. It can be 'list' (expands only the tags), 'full' (expands the tags and operations) or 'none' (expands nothing).
|
<a name="docExpansion"></a>`docExpansion` | `String=["list"*, "full", "none"]`. Controls the default expansion setting for the operations and tags. It can be 'list' (expands only the tags), 'full' (expands the tags and operations) or 'none' (expands nothing).
|
||||||
`filter` | `Boolean=false OR String`. If set, enables filtering. The top bar will show an edit box that you can use to filter the tagged operations that are shown. Can be Boolean to enable or disable, or a string, in which case filtering will be enabled using that string as the filter expression. Filtering is case sensitive matching the filter expression anywhere inside the tag.
|
<a name="filter"></a>`filter` | `Boolean=false OR String`. If set, enables filtering. The top bar will show an edit box that you can use to filter the tagged operations that are shown. Can be Boolean to enable or disable, or a string, in which case filtering will be enabled using that string as the filter expression. Filtering is case sensitive matching the filter expression anywhere inside the tag.
|
||||||
`maxDisplayedTags` | `Number`. If set, limits the number of tagged operations displayed to at most this many. The default is to show all operations.
|
<a name="maxDisplayedTags"></a>`maxDisplayedTags` | `Number`. If set, limits the number of tagged operations displayed to at most this many. The default is to show all operations.
|
||||||
`operationsSorter` | `Function=(a => a)`. Apply a sort to the operation list of each API. It can be 'alpha' (sort by paths alphanumerically), 'method' (sort by HTTP method) or a function (see Array.prototype.sort() to know how sort function works). Default is the order returned by the server unchanged.
|
<a name="operationsSorter"></a>`operationsSorter` | `Function=(a => a)`. Apply a sort to the operation list of each API. It can be 'alpha' (sort by paths alphanumerically), 'method' (sort by HTTP method) or a function (see Array.prototype.sort() to know how sort function works). Default is the order returned by the server unchanged.
|
||||||
`showExtensions` | `Boolean=false`. Controls the display of vendor extension (`x-`) fields and values for Operations, Parameters, and Schema.
|
<a name="showExtensions"></a>`showExtensions` | `Boolean=false`. Controls the display of vendor extension (`x-`) fields and values for Operations, Parameters, and Schema.
|
||||||
`showCommonExtensions` | `Boolean=false`. Controls the display of extensions (`pattern`, `maxLength`, `minLength`, `maximum`, `minimum`) fields and values for Parameters.
|
<a name="showCommonExtensions"></a>`showCommonExtensions` | `Boolean=false`. Controls the display of extensions (`pattern`, `maxLength`, `minLength`, `maximum`, `minimum`) fields and values for Parameters.
|
||||||
`tagsSorter` | `Function=(a => a)`. Apply a sort to the tag list of each API. It can be 'alpha' (sort by paths alphanumerically) or a function (see [Array.prototype.sort()](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/sort) to learn how to write a sort function). Two tag name strings are passed to the sorter for each pass. Default is the order determined by Swagger-UI.
|
<a name="tagSorter"></a>`tagsSorter` | `Function=(a => a)`. Apply a sort to the tag list of each API. It can be 'alpha' (sort by paths alphanumerically) or a function (see [Array.prototype.sort()](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/sort) to learn how to write a sort function). Two tag name strings are passed to the sorter for each pass. Default is the order determined by Swagger-UI.
|
||||||
`onComplete` | `Function=NOOP`. Provides a mechanism to be notified when Swagger-UI has finished rendering a newly provided definition.
|
<a name="onComplete"></a>`onComplete` | `Function=NOOP`. Provides a mechanism to be notified when Swagger-UI has finished rendering a newly provided definition.
|
||||||
|
|
||||||
##### Network
|
##### Network
|
||||||
|
|
||||||
Parameter Name | Description
|
Parameter Name | Description
|
||||||
--- | ---
|
--- | ---
|
||||||
`oauth2RedirectUrl` | `String`. OAuth redirect URL.
|
<a name="oauth2RedirectUrl"></a>`oauth2RedirectUrl` | `String`. OAuth redirect URL.
|
||||||
`requestInterceptor` | `Function=(a => a)`. MUST be a function. Function to intercept remote definition, Try-It-Out, and OAuth2 requests. Accepts one argument requestInterceptor(request) and must return the modified request, or a Promise that resolves to the modified request.
|
<a name="requestInteceptor"></a>`requestInterceptor` | `Function=(a => a)`. MUST be a function. Function to intercept remote definition, Try-It-Out, and OAuth2 requests. Accepts one argument requestInterceptor(request) and must return the modified request, or a Promise that resolves to the modified request.
|
||||||
`responseInterceptor` |`Function=(a => a)`. MUST be a function. Function to intercept remote definition, Try-It-Out, and OAuth2 responses. Accepts one argument responseInterceptor(response) and must return the modified response, or a Promise that resolves to the modified response.
|
<a name="responseInterceptor"></a>`responseInterceptor` |`Function=(a => a)`. MUST be a function. Function to intercept remote definition, Try-It-Out, and OAuth2 responses. Accepts one argument responseInterceptor(response) and must return the modified response, or a Promise that resolves to the modified response.
|
||||||
`showMutatedRequest` | `Boolean=true`. If set to `true`, uses the mutated request returned from a requestInterceptor to produce the curl command in the UI, otherwise the request before the requestInterceptor was applied is used.
|
<a name="showMutatedRequest"></a>`showMutatedRequest` | `Boolean=true`. If set to `true`, uses the mutated request returned from a requestInterceptor to produce the curl command in the UI, otherwise the request before the requestInterceptor was applied is used.
|
||||||
`supportedSubmitMethods` | `Array=["get", "put", "post", "delete", "options", "head", "patch", "trace"]`. List of HTTP methods that have the Try it out feature enabled. An empty array disables Try it out for all operations. This does not filter the operations from the display.
|
<a name="supportedSubmitMethods"></a>`supportedSubmitMethods` | `Array=["get", "put", "post", "delete", "options", "head", "patch", "trace"]`. List of HTTP methods that have the Try it out feature enabled. An empty array disables Try it out for all operations. This does not filter the operations from the display.
|
||||||
`validatorUrl` | `String="https://online.swagger.io/validator" OR null`. By default, Swagger-UI attempts to validate specs against swagger.io's online validator. You can use this parameter to set a different validator URL, for example for locally deployed validators ([Validator Badge](https://github.com/swagger-api/validator-badge)). Setting it to `null` will disable validation.
|
<a name="validatorUrl"></a>`validatorUrl` | `String="https://online.swagger.io/validator" OR null`. By default, Swagger-UI attempts to validate specs against swagger.io's online validator. You can use this parameter to set a different validator URL, for example for locally deployed validators ([Validator Badge](https://github.com/swagger-api/validator-badge)). Setting it to `null` will disable validation.
|
||||||
|
|
||||||
##### Macros
|
##### Macros
|
||||||
|
|
||||||
Parameter Name | Description
|
Parameter Name | Description
|
||||||
--- | ---
|
--- | ---
|
||||||
`modelPropertyMacro` | `Function`. Function to set default values to each property in model. Accepts one argument modelPropertyMacro(property), property is immutable
|
<a name="modelPropertyMacro"></a>`modelPropertyMacro` | `Function`. Function to set default values to each property in model. Accepts one argument modelPropertyMacro(property), property is immutable
|
||||||
`parameterMacro` | `Function`. Function to set default value to parameters. Accepts two arguments parameterMacro(operation, parameter). Operation and parameter are objects passed for context, both remain immutable
|
<a name="parameterMacro"></a>`parameterMacro` | `Function`. Function to set default value to parameters. Accepts two arguments parameterMacro(operation, parameter). Operation and parameter are objects passed for context, both remain immutable
|
||||||
|
|
||||||
### Instance methods
|
### Instance methods
|
||||||
|
|
||||||
Method Name | Description
|
Method Name | Description
|
||||||
--- | ---
|
--- | ---
|
||||||
`initOAuth` | `(configObj) => void`. Provide Swagger-UI with information about your OAuth server - see the OAuth2 documentation for more information.
|
<a name="initOAuth"></a>`initOAuth` | `(configObj) => void`. Provide Swagger-UI with information about your OAuth server - see the OAuth2 documentation for more information.
|
||||||
`preauthorizeBasic` | `(authDefinitionKey, username, password) => action`. Programmatically set values for a Basic authorization scheme.
|
<a name="preauthorizeBasic"></a>`preauthorizeBasic` | `(authDefinitionKey, username, password) => action`. Programmatically set values for a Basic authorization scheme.
|
||||||
`preauthorizeApiKey` | `(authDefinitionKey, apiKeyValue) => action`. Programmatically set values for an API key authorization scheme.
|
<a name="preauthorizeApiKey"></a>`preauthorizeApiKey` | `(authDefinitionKey, apiKeyValue) => action`. Programmatically set values for an API key authorization scheme.
|
||||||
|
|||||||
@@ -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.3",
|
||||||
"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,
|
||||||
@@ -35,7 +36,12 @@ const RequestBody = ({
|
|||||||
return null
|
return null
|
||||||
}
|
}
|
||||||
|
|
||||||
if(contentType === "application/octet-stream") {
|
if(
|
||||||
|
contentType === "application/octet-stream"
|
||||||
|
|| contentType.indexOf("image/") === 0
|
||||||
|
|| contentType.indexOf("audio/") === 0
|
||||||
|
|| contentType.indexOf("video/") === 0
|
||||||
|
) {
|
||||||
const Input = getComponent("Input")
|
const Input = getComponent("Input")
|
||||||
|
|
||||||
if(!isExecute) {
|
if(!isExecute) {
|
||||||
@@ -85,6 +91,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 +139,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
|
||||||
|
|||||||
+4
-2
@@ -628,7 +628,9 @@ export const getSampleSchema = (schema, contentType="", config={}) => {
|
|||||||
return memoizedCreateXMLExample(schema, config)
|
return memoizedCreateXMLExample(schema, config)
|
||||||
}
|
}
|
||||||
|
|
||||||
return JSON.stringify(memoizedSampleFromSchema(schema, config), null, 2)
|
const res = memoizedSampleFromSchema(schema, config)
|
||||||
|
|
||||||
|
return typeof res === "object" ? JSON.stringify(res, null, 2) : res
|
||||||
}
|
}
|
||||||
|
|
||||||
export const parseSearch = () => {
|
export const parseSearch = () => {
|
||||||
@@ -742,7 +744,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;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -3,3 +3,4 @@ env:
|
|||||||
rules:
|
rules:
|
||||||
"react/prop-types": 1 # bah humbug
|
"react/prop-types": 1 # bah humbug
|
||||||
"no-unused-vars": 1 # unused vars in tests can be useful for indicating a full signature
|
"no-unused-vars": 1 # unused vars in tests can be useful for indicating a full signature
|
||||||
|
"no-global-assign": 1
|
||||||
|
|||||||
@@ -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"
|
||||||
|
})
|
||||||
|
})
|
||||||
|
})
|
||||||
})
|
})
|
||||||
|
|||||||
+27
-1
@@ -24,7 +24,8 @@ import {
|
|||||||
getCommonExtensions,
|
getCommonExtensions,
|
||||||
sanitizeUrl,
|
sanitizeUrl,
|
||||||
extractFileNameFromContentDispositionHeader,
|
extractFileNameFromContentDispositionHeader,
|
||||||
deeplyStripKey
|
deeplyStripKey,
|
||||||
|
getSampleSchema
|
||||||
} from "core/utils"
|
} from "core/utils"
|
||||||
import win from "core/window"
|
import win from "core/window"
|
||||||
|
|
||||||
@@ -1186,5 +1187,30 @@ describe("utils", function() {
|
|||||||
expect(sanitizeUrl({})).toEqual("")
|
expect(sanitizeUrl({})).toEqual("")
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
|
describe("getSampleSchema", function() {
|
||||||
|
const oriDate = Date
|
||||||
|
|
||||||
|
before(function() {
|
||||||
|
Date = function () {
|
||||||
|
this.toISOString = function () {
|
||||||
|
return "2018-07-07T07:07:05.189Z"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
|
after(function() {
|
||||||
|
Date = oriDate
|
||||||
|
})
|
||||||
|
|
||||||
|
it("should not unnecessarily stringify non-object values", function() {
|
||||||
|
// Given
|
||||||
|
const res = getSampleSchema({
|
||||||
|
type: "string",
|
||||||
|
format: "date-time"
|
||||||
|
})
|
||||||
|
|
||||||
|
// Then
|
||||||
|
expect(res).toEqual(new Date().toISOString())
|
||||||
|
})
|
||||||
|
})
|
||||||
})
|
})
|
||||||
|
|||||||
@@ -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