Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
62785d11ad | ||
|
|
d6d32267fe | ||
|
|
afcb7d3e82 | ||
|
|
7a86c1bf40 | ||
|
|
01ae2f5605 | ||
|
|
ebe9f9b7f4 | ||
|
|
344f28bf22 | ||
|
|
556ff037dc | ||
|
|
754a93c14e | ||
|
|
eccc26da1b | ||
|
|
99600df0f1 | ||
|
|
1cab4984e0 | ||
|
|
acff34e1d4 | ||
|
|
129129be97 | ||
|
|
00745bca38 | ||
|
|
1bd1190749 | ||
|
|
667976ca67 | ||
|
|
0345f66ee2 | ||
|
|
7d24a95d78 | ||
|
|
ce16666b57 | ||
|
|
3cfda13cfe | ||
|
|
a54d6fa2bc | ||
|
|
c24a07c523 | ||
|
|
db57ee0dfe | ||
|
|
99a525eac2 | ||
|
|
3e71861712 | ||
|
|
5f8ffb870c | ||
|
|
3311f3e95f | ||
|
|
b5b00953e9 | ||
|
|
873cb2892f | ||
|
|
df149c543b | ||
|
|
d6d5b1d06e | ||
|
|
234e6d5d57 | ||
|
|
212396f24d | ||
|
|
f4a253461e | ||
|
|
b3e476f476 | ||
|
|
c5a23e584c |
@@ -20,8 +20,7 @@ The OpenAPI Specification has undergone 4 revisions since initial creation in 20
|
||||
|
||||
Swagger UI Version | Release Date | OpenAPI Spec compatibility | Notes | Status
|
||||
------------------ | ------------ | -------------------------- | ----- | ------
|
||||
3.0.14 | 2017-06-09 | 2.0 | [tag
|
||||
v3.0.14](https://github.com/swagger-api/swagger-ui/tree/v3.0.14) |
|
||||
3.0.16 | 2017-06-17 | 2.0 | [tag v3.0.16](https://github.com/swagger-api/swagger-ui/tree/v3.0.16) |
|
||||
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.0.24 | 2014-09-12 | 1.1, 1.2 | [tag v2.0.24](https://github.com/swagger-api/swagger-ui/tree/v2.0.24) |
|
||||
|
||||
Vendored
+40
-40
File diff suppressed because one or more lines are too long
Vendored
+1
-1
@@ -1 +1 @@
|
||||
{"version":3,"file":"swagger-ui-bundle.js","sources":["webpack:///swagger-ui-bundle.js"],"mappings":"AAAA;AAu/FA;AA6+FA;;;;;;;;;;;;;;;;;;;;;;;;;;AA2TA;;;;;;AAoIA;AAi7FA;AAmtCA;AAi0IA;AA0oJA;AAgiGA;AA0/FA;AAqkFA;AAqjFA;AAk9CA;AA+jDA;AAwrCA;AA0gFA;;;;;AA+zBA;AAsyJA;;;;;;;;;;;;;;AA64EA;AA4mIA;AAquJA;AA2qHA;AA2mGA;AAiiEA;AAq4DA;AAg3DA;AA8NA;;;;;;AAw8FA;AA07FA;;;;;AAi8CA;AAgsFA;AAs2CA;AA+kCA;AAg8CA;AAg/EA;AAu/BA;AAk0FA;;;;;;;;;AAomDA;AA2zIA;AAu7FA;AAmrFA;AA20EA","sourceRoot":""}
|
||||
{"version":3,"file":"swagger-ui-bundle.js","sources":["webpack:///swagger-ui-bundle.js"],"mappings":"AAAA;AAu/FA;AA6+FA;;;;;;;;;;;;;;;;;;;;;;;;;;AA2TA;;;;;;AAoIA;AAi7FA;AAmtCA;AAi0IA;AAioJA;AA2iGA;AAs+FA;AA4kFA;AA6jFA;AAm9CA;AA6jDA;AAgrCA;AA+/EA;;;;;AAu3BA;AA0qJA;;;;;;;;;;;;;;AAwoFA;AA+lIA;AA2hJA;AAo2HA;AA8lGA;AAwiEA;AAo4DA;AAk7DA;AAyHA;;;;;;AA6iGA;AA07FA;;;;;AAi8CA;AAgsFA;AAs2CA;AAilCA;AA+7CA;AA85DA;AA4zCA;AAs5FA;;;;;;;;;AAqlCA;AA2zIA;AAu7FA;AAmrFA;AA20EA","sourceRoot":""}
|
||||
Vendored
+6
-6
File diff suppressed because one or more lines are too long
+1
-1
@@ -1 +1 @@
|
||||
{"version":3,"file":"swagger-ui-standalone-preset.js","sources":["webpack:///swagger-ui-standalone-preset.js"],"mappings":"AAAA;;;;;AA8QA;AAmvGA;AAuxFA;;;;;;AAocA;AAkvFA;AAu+CA;AAo+CA;AAgrCA;AAuyEA","sourceRoot":""}
|
||||
{"version":3,"file":"swagger-ui-standalone-preset.js","sources":["webpack:///swagger-ui-standalone-preset.js"],"mappings":"AAAA;;;;;AA0SA;AAgyGA;AAuxFA;;;;;;AAocA;AAkvFA;AAu+CA;AAo+CA;AAgrCA;AAuyEA","sourceRoot":""}
|
||||
Vendored
+5
-5
File diff suppressed because one or more lines are too long
Vendored
+1
-1
@@ -1 +1 @@
|
||||
{"version":3,"file":"swagger-ui.js","sources":["webpack:///swagger-ui.js"],"mappings":"AAAA;;;;;;AA4yCA;AAoyHA;AAmyHA;AAukGA;AA+9BA;AA2jCA;AA0iCA;AAy4BA","sourceRoot":""}
|
||||
{"version":3,"file":"swagger-ui.js","sources":["webpack:///swagger-ui.js"],"mappings":"AAAA;;;;;;AAizCA;AAoyHA;AAmyHA;AAukGA;AA+9BA;AA8jCA;AAyiCA;AAs5BA","sourceRoot":""}
|
||||
+3
-3
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "swagger-ui",
|
||||
"version": "3.0.14",
|
||||
"version": "3.0.16",
|
||||
"main": "dist/swagger-ui.js",
|
||||
"repository": "git@github.com:swagger-api/swagger-ui.git",
|
||||
"contributors": [
|
||||
@@ -32,7 +32,7 @@
|
||||
"test": "npm run lint-errors && npm run just-test-in-node",
|
||||
"test-in-node": "npm run lint-errors && npm run just-test-in-node",
|
||||
"just-test": "karma start --config karma.conf.js",
|
||||
"just-test-in-node": "mocha --recursive --compilers js:babel-core/register test/core test/components test/bugs"
|
||||
"just-test-in-node": "mocha --recursive --compilers js:babel-core/register test/core test/components test/bugs test/swagger-ui-dist-package"
|
||||
},
|
||||
"dependencies": {
|
||||
"babel-polyfill": "^6.23.0",
|
||||
@@ -70,7 +70,7 @@
|
||||
"sanitize-html": "^1.14.1",
|
||||
"serialize-error": "2.0.0",
|
||||
"shallowequal": "0.2.2",
|
||||
"swagger-client": "~3.0.14",
|
||||
"swagger-client": "~3.0.15",
|
||||
"url-parse": "^1.1.8",
|
||||
"whatwg-fetch": "0.11.1",
|
||||
"worker-loader": "^0.7.1",
|
||||
|
||||
@@ -19,7 +19,7 @@ export default class Curl extends React.Component {
|
||||
<div>
|
||||
<h4>Curl</h4>
|
||||
<div className="copy-paste">
|
||||
<textarea onFocus={this.handleFocus} className="curl" style={{ whiteSpace: "normal" }} value={curl}></textarea>
|
||||
<textarea onFocus={this.handleFocus} readOnly="true" className="curl" style={{ whiteSpace: "normal" }} value={curl}></textarea>
|
||||
</div>
|
||||
</div>
|
||||
)
|
||||
|
||||
@@ -22,13 +22,14 @@ export default class LiveResponse extends React.Component {
|
||||
render() {
|
||||
const { request, response, getComponent } = this.props
|
||||
|
||||
const body = response.get("text")
|
||||
const status = response.get("status")
|
||||
const url = response.get("url")
|
||||
const headers = response.get("headers").toJS()
|
||||
const notDocumented = response.get("notDocumented")
|
||||
const isError = response.get("error")
|
||||
|
||||
const body = isError ? response.get("response").get("text") : response.get("text")
|
||||
|
||||
const headersKeys = Object.keys(headers)
|
||||
const contentType = headers["content-type"]
|
||||
|
||||
@@ -37,6 +38,7 @@ export default class LiveResponse extends React.Component {
|
||||
const returnObject = headersKeys.map(key => {
|
||||
return <span className="headerline" key={key}> {key}: {headers[key]} </span>
|
||||
})
|
||||
const hasHeaders = returnObject.length !== 0
|
||||
|
||||
return (
|
||||
<div>
|
||||
@@ -54,28 +56,29 @@ export default class LiveResponse extends React.Component {
|
||||
<td className="col response-col_status">
|
||||
{ status }
|
||||
{
|
||||
!notDocumented ? null :
|
||||
<div className="response-undocumented">
|
||||
<i> Undocumented </i>
|
||||
</div>
|
||||
notDocumented ? <div className="response-undocumented">
|
||||
<i> Undocumented </i>
|
||||
</div>
|
||||
: null
|
||||
}
|
||||
</td>
|
||||
<td className="col response-col_description">
|
||||
{
|
||||
!isError ? null : <span>
|
||||
{`${response.get("name")}: ${response.get("message")}`}
|
||||
</span>
|
||||
isError ? <span>
|
||||
{`${response.get("name")}: ${response.get("message")}`}
|
||||
</span>
|
||||
: null
|
||||
}
|
||||
{
|
||||
!body || isError ? null
|
||||
: <ResponseBody content={ body }
|
||||
contentType={ contentType }
|
||||
url={ url }
|
||||
headers={ headers }
|
||||
getComponent={ getComponent }/>
|
||||
body ? <ResponseBody content={ body }
|
||||
contentType={ contentType }
|
||||
url={ url }
|
||||
headers={ headers }
|
||||
getComponent={ getComponent }/>
|
||||
: null
|
||||
}
|
||||
{
|
||||
!headers ? null : <Headers headers={ returnObject }/>
|
||||
hasHeaders ? <Headers headers={ returnObject }/> : null
|
||||
}
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
@@ -40,6 +40,7 @@ class ObjectModel extends Component {
|
||||
let additionalProperties = schema.get("additionalProperties")
|
||||
let title = schema.get("title") || name
|
||||
let required = schema.get("required")
|
||||
const Markdown = getComponent("Markdown")
|
||||
const JumpToPathSection = ({ name }) => <span className="model-jump-to-path"><JumpToPath path={`definitions.${name}`} /></span>
|
||||
let collapsedContent = (<span>
|
||||
<span>{ braceOpen }</span>...<span>{ braceClose }</span>
|
||||
@@ -66,7 +67,9 @@ class ObjectModel extends Component {
|
||||
{
|
||||
!description ? null : <tr style={{ color: "#999", fontStyle: "italic" }}>
|
||||
<td>description:</td>
|
||||
<td>{ description }</td>
|
||||
<td>
|
||||
<Markdown source={ description } />
|
||||
</td>
|
||||
</tr>
|
||||
}
|
||||
{
|
||||
@@ -114,11 +117,12 @@ class ObjectModel extends Component {
|
||||
class Primitive extends Component {
|
||||
static propTypes = {
|
||||
schema: PropTypes.object.isRequired,
|
||||
getComponent: PropTypes.func.isRequired,
|
||||
required: PropTypes.bool
|
||||
}
|
||||
|
||||
render(){
|
||||
let { schema, required } = this.props
|
||||
let { schema, getComponent, required } = this.props
|
||||
|
||||
if(!schema || !schema.get) {
|
||||
// don't render if schema isn't correctly formed
|
||||
@@ -129,17 +133,23 @@ class Primitive extends Component {
|
||||
let format = schema.get("format")
|
||||
let xml = schema.get("xml")
|
||||
let enumArray = schema.get("enum")
|
||||
let properties = schema.filter( ( v, key) => ["enum", "type", "format", "$$ref"].indexOf(key) === -1 )
|
||||
let description = schema.get("description")
|
||||
let properties = schema.filter( ( v, key) => ["enum", "type", "format", "description", "$$ref"].indexOf(key) === -1 )
|
||||
let style = required ? { fontWeight: "bold" } : {}
|
||||
const Markdown = getComponent("Markdown")
|
||||
|
||||
return <span className="prop">
|
||||
<span className="prop-type" style={ style }>{ type }</span> { required && <span style={{ color: "red" }}>*</span>}
|
||||
{ format && <span className="prop-format">(${format})</span>}
|
||||
{
|
||||
properties.size ? properties.entrySeq().map( ( [ key, v ] ) => <span key={`${key}-${v}`} style={ propStyle }>
|
||||
<br />{ key !== "description" && key + ": " }{ String(v) }</span>)
|
||||
<br />{ key }: { String(v) }</span>)
|
||||
: null
|
||||
}
|
||||
{
|
||||
!description ? null :
|
||||
<Markdown source={ description } />
|
||||
}
|
||||
{
|
||||
xml && xml.size ? (<span><br /><span style={ propStyle }>xml:</span>
|
||||
{
|
||||
@@ -217,7 +227,7 @@ class Model extends Component {
|
||||
}
|
||||
|
||||
render () {
|
||||
let { schema, required, name, isRef } = this.props
|
||||
let { schema, getComponent, required, name, isRef } = this.props
|
||||
let $$ref = schema && schema.get("$$ref")
|
||||
let modelName = $$ref && this.getModelName( $$ref )
|
||||
let modelSchema, type
|
||||
@@ -236,7 +246,7 @@ class Model extends Component {
|
||||
switch(type) {
|
||||
case "object":
|
||||
return <ObjectModel className="object" { ...this.props } schema={ modelSchema }
|
||||
name={ modelName || name }
|
||||
name={ name || modelName }
|
||||
isRef={ isRef!== undefined ? isRef : !!$$ref }/>
|
||||
case "array":
|
||||
return <ArrayModel className="array" { ...this.props } schema={ modelSchema } required={ required } />
|
||||
@@ -245,7 +255,7 @@ class Model extends Component {
|
||||
case "integer":
|
||||
case "boolean":
|
||||
default:
|
||||
return <Primitive schema={ modelSchema } required={ required }/>
|
||||
return <Primitive getComponent={ getComponent } schema={ modelSchema } required={ required }/>
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -8,7 +8,7 @@ const getExampleComponent = ( sampleResponse, examples, HighlightCode ) => {
|
||||
let exampleValue
|
||||
try {
|
||||
exampleValue = example && example.toJS ? example.toJS() : example
|
||||
exampleValue = JSON.stringify(exampleValue)
|
||||
exampleValue = JSON.stringify(exampleValue, null, 2)
|
||||
}
|
||||
catch(e) {
|
||||
exampleValue = String(example)
|
||||
|
||||
+8
-4
@@ -1,3 +1,5 @@
|
||||
import win from "./window"
|
||||
|
||||
export default function curl( request ){
|
||||
let curlified = []
|
||||
let type = ""
|
||||
@@ -18,11 +20,13 @@ export default function curl( request ){
|
||||
if ( request.get("body") ){
|
||||
|
||||
if(type === "multipart/form-data" && request.get("method") === "POST") {
|
||||
let formDataBody = request.get("body").split("&")
|
||||
|
||||
for(var data in formDataBody) {
|
||||
for( let [ k,v ] of request.get("body").values()) {
|
||||
curlified.push( "-F" )
|
||||
curlified.push(formDataBody[data])
|
||||
if (v instanceof win.File) {
|
||||
curlified.push( `"${k}=@${v.name};type=${v.type}"` )
|
||||
} else {
|
||||
curlified.push( `"${k}=${v}"` )
|
||||
}
|
||||
}
|
||||
} else {
|
||||
curlified.push( "-d" )
|
||||
|
||||
@@ -7,6 +7,7 @@ import _memoize from "lodash/memoize"
|
||||
import some from "lodash/some"
|
||||
import eq from "lodash/eq"
|
||||
import { memoizedSampleFromSchema, memoizedCreateXMLExample } from "core/plugins/samples/fn"
|
||||
import win from "./window"
|
||||
|
||||
const DEFAULT_REPONSE_KEY = "default"
|
||||
|
||||
@@ -34,6 +35,9 @@ export function fromJSOrdered (js) {
|
||||
if(isImmutable(js))
|
||||
return js // Can't do much here
|
||||
|
||||
if (js instanceof win.File)
|
||||
return js
|
||||
|
||||
return !isObject(js) ? js :
|
||||
Array.isArray(js) ?
|
||||
Im.Seq(js).map(fromJSOrdered).toList() :
|
||||
|
||||
+2
-1
@@ -3,7 +3,8 @@ function makeWindow() {
|
||||
location: {},
|
||||
history: {},
|
||||
open: () => {},
|
||||
close: () => {}
|
||||
close: () => {},
|
||||
File: function() {}
|
||||
}
|
||||
|
||||
if(typeof window === "undefined") {
|
||||
|
||||
@@ -1,8 +1,22 @@
|
||||
This module, `swagger-ui-dist`, exposes Swagger-UI's entire dist folder as a dependency-free npm module. Use `swagger-ui` instead, if you'd like to have npm install dependencies for you.
|
||||
# Swagger UI Dist
|
||||
[](http://badge.fury.io/js/swagger-ui-dist)
|
||||
|
||||
# API
|
||||
|
||||
This module, `swagger-ui-dist`, exposes Swagger-UI's entire dist folder as a dependency-free npm module.
|
||||
Use `swagger-ui` instead, if you'd like to have npm install dependencies for you.
|
||||
|
||||
`SwaggerUIBundle` and `SwaggerUIStandalonePreset` can be imported:
|
||||
```javascript
|
||||
import { SwaggerUIBundle, SwaggerUIStandalonePreset } from 'swagger-ui-dist'
|
||||
import { SwaggerUIBundle, SwaggerUIStandalonePreset } from "swagger-ui-dist"
|
||||
```
|
||||
|
||||
To get an absolute path to this directory for static file serving, use the exported `getAbsoluteFSPath` method:
|
||||
|
||||
```javascript
|
||||
const swaggerUiAssetPath = require("swagger-ui-dist").getAbsoluteFSPath()
|
||||
|
||||
// then instantiate server that serves files from the swaggerUiAssetPath
|
||||
```
|
||||
|
||||
For anything else, check the [Swagger-UI](https://github.com/swagger-api/swagger-ui) repository.
|
||||
|
||||
@@ -0,0 +1,14 @@
|
||||
/*
|
||||
* getAbsoluteFSPath
|
||||
* @return {string} When run in NodeJS env, returns the absolute path to the current directory
|
||||
* When run outside of NodeJS, will return an error message
|
||||
*/
|
||||
const getAbsoluteFSPath = () => {
|
||||
// detect whether we are running in a browser or nodejs
|
||||
if (typeof module !== "undefined" && module.exports) {
|
||||
return require("path").resolve(__dirname)
|
||||
}
|
||||
throw new Error('getAbsoluteFSPath can only be called within a Nodejs environment');
|
||||
}
|
||||
|
||||
module.exports = getAbsoluteFSPath
|
||||
@@ -1,2 +1,3 @@
|
||||
module.exports.SwaggerUIBundle = require('./swagger-ui-bundle.js')
|
||||
module.exports.SwaggerUIStandalonePreset = require('./swagger-ui-standalone-preset.js')
|
||||
module.exports.SwaggerUIBundle = require("./swagger-ui-bundle.js")
|
||||
module.exports.SwaggerUIStandalonePreset = require("./swagger-ui-standalone-preset.js")
|
||||
module.exports.absolutePath = require("./absolute-path.js")
|
||||
|
||||
+26
-2
@@ -1,6 +1,7 @@
|
||||
import expect from "expect"
|
||||
import Im from "immutable"
|
||||
import curl from "core/curlify"
|
||||
import win from "core/window"
|
||||
|
||||
describe("curlify", function() {
|
||||
|
||||
@@ -131,12 +132,35 @@ describe("curlify", function() {
|
||||
url: "http://example.com",
|
||||
method: "POST",
|
||||
headers: { "content-type": "multipart/form-data" },
|
||||
body: "id=123&name=Sahar"
|
||||
body: [
|
||||
["id", "123"],
|
||||
["name", "Sahar"]
|
||||
]
|
||||
}
|
||||
|
||||
let curlified = curl(Im.fromJS(req))
|
||||
|
||||
expect(curlified).toEqual("curl -X POST \"http://example.com\" -H \"content-type: multipart/form-data\" -F id=123 -F name=Sahar")
|
||||
expect(curlified).toEqual("curl -X POST \"http://example.com\" -H \"content-type: multipart/form-data\" -F \"id=123\" -F \"name=Sahar\"")
|
||||
})
|
||||
|
||||
it("should print a curl with formData and file", function() {
|
||||
var file = new win.File()
|
||||
file.name = "file.txt"
|
||||
file.type = "text/plain"
|
||||
|
||||
var req = {
|
||||
url: "http://example.com",
|
||||
method: "POST",
|
||||
headers: { "content-type": "multipart/form-data" },
|
||||
body: [
|
||||
["id", "123"],
|
||||
["file", file]
|
||||
]
|
||||
}
|
||||
|
||||
let curlified = curl(Im.fromJS(req))
|
||||
|
||||
expect(curlified).toEqual("curl -X POST \"http://example.com\" -H \"content-type: multipart/form-data\" -F \"id=123\" -F \"file=@file.txt;type=text/plain\"")
|
||||
})
|
||||
|
||||
it("prints a curl post statement from an object", function() {
|
||||
|
||||
@@ -0,0 +1,13 @@
|
||||
/* eslint-env mocha */
|
||||
import expect from "expect"
|
||||
import path from "path"
|
||||
import getAbsoluteFSPath from "../../swagger-ui-dist-package/absolute-path"
|
||||
|
||||
describe("swagger-ui-dist", function(){
|
||||
describe("getAbsoluteFSPath", function(){
|
||||
it("returns absolute path", function(){
|
||||
const expectedPath = path.resolve(__dirname, "../../swagger-ui-dist-package")
|
||||
expect(getAbsoluteFSPath()).toEqual(expectedPath)
|
||||
})
|
||||
})
|
||||
})
|
||||
Reference in New Issue
Block a user