Merge branch 'master' into patch-1

This commit is contained in:
shockey
2017-07-19 12:02:12 -07:00
committed by GitHub
19 changed files with 101 additions and 492 deletions

View File

@@ -61,7 +61,6 @@ module.exports = function(rules, options) {
} }
if( specialOptions.minimize ) { if( specialOptions.minimize ) {
plugins.push( plugins.push(
new webpack.optimize.UglifyJsPlugin({ new webpack.optimize.UglifyJsPlugin({
sourceMap: true, sourceMap: true,

View File

@@ -109,7 +109,6 @@
"karma-sourcemap-loader": "^0.3.7", "karma-sourcemap-loader": "^0.3.7",
"karma-webpack": "2.0.3", "karma-webpack": "2.0.3",
"less": "2.7.2", "less": "2.7.2",
"less-loader": "4.0.4",
"license-checker": "^11.0.0", "license-checker": "^11.0.0",
"mocha": "^3.4.2", "mocha": "^3.4.2",
"node-sass": "^4.5.0", "node-sass": "^4.5.0",

View File

@@ -1,67 +0,0 @@
import get from "lodash/get"
export function transformPathToArray(property, jsSpec) {
if(property.slice(0,9) === "instance.") {
var str = property.slice(9)
} else { // eslint-disable-next-line no-redeclare
var str = property
}
var pathArr = []
str
.split(".")
.map(item => {
// "key[0]" becomes ["key", "0"]
if(item.includes("[")) {
let index = parseInt(item.match(/\[(.*)\]/)[1])
let keyName = item.slice(0, item.indexOf("["))
return [keyName, index.toString()]
} else {
return item
}
})
.reduce(function(a, b) {
// flatten!
return a.concat(b)
}, [])
.concat([""]) // add an empty item into the array, so we don't get stuck with something in our buffer below
.reduce((buffer, curr) => {
let obj = pathArr.length ? get(jsSpec, pathArr) : jsSpec
if(get(obj, makeAccessArray(buffer, curr))) {
if(buffer.length) {
pathArr.push(buffer)
}
if(curr.length) {
pathArr.push(curr)
}
return ""
} else {
// attach key to buffer
return `${buffer}${buffer.length ? "." : ""}${curr}`
}
}, "")
if(typeof get(jsSpec, pathArr) !== "undefined") {
return pathArr
} else {
// if our path is not correct (there is no value at the path),
// return null
return null
}
}
function makeAccessArray(buffer, curr) {
let arr = []
if(buffer.length) {
arr.push(buffer)
}
if(curr.length) {
arr.push(curr)
}
return arr
}

View File

@@ -1,7 +1,6 @@
import React from "react" import React from "react"
import PropTypes from "prop-types" import PropTypes from "prop-types"
import SplitPane from "react-split-pane" import SplitPane from "react-split-pane"
import "./split-pane-mode.less"
const MODE_KEY = ["split-pane-mode"] const MODE_KEY = ["split-pane-mode"]
const MODE_LEFT = "left" const MODE_LEFT = "left"

View File

@@ -1,5 +0,0 @@
.swagger-ui {
.Resizer.vertical.disabled {
display: none;
}
}

View File

@@ -1,8 +1,7 @@
import { shallowEqualKeys } from "core/utils" import { shallowEqualKeys } from "core/utils"
import { transformPathToArray } from "core/path-translator"
export default function() { export default function() {
return { return {
fn: { shallowEqualKeys, transformPathToArray } fn: { shallowEqualKeys }
} }
} }

View File

@@ -1,52 +0,0 @@
.swagger-ui {
.topbar {
background-color: #89bf04;
}
.topbar-wrapper {
padding: 0.7em;
}
.topbar-logo__img {
float: left;
}
.topbar-logo__title {
display: inline-block;
color: #fff;
font-size: 1.5em;
font-weight: bold;
margin: 0.15em 0 0 0.5em;
}
.download-url-wrapper {
text-align: right;
float: right;
}
.topbar .download-url__text {
width: 28em;
height: 2em;
margin-right: 0.5em;
}
.download-url__btn {
background-color: #547f00;
border-color: #547f00;
text-decoration: none;
font-weight: bold;
padding: 0.2em 0.3em;
color: white;
border-radius: 0.1em;
&:hover {
&:extend(.download-url__btn);
}
}
.center-700 {
display: block;
margin: 0 auto;
width: 45em;
}
}

View File

@@ -1,6 +1,4 @@
import StandaloneLayout from "./layout" import StandaloneLayout from "./layout"
import "../style/main.scss"
import TopbarPlugin from "plugins/topbar" import TopbarPlugin from "plugins/topbar"
import ConfigsPlugin from "plugins/configs" import ConfigsPlugin from "plugins/configs"

View File

@@ -0,0 +1,3 @@
.Resizer.vertical.disabled {
display: none;
}

View File

@@ -14,4 +14,5 @@
@import 'information'; @import 'information';
@import 'authorize'; @import 'authorize';
@import 'errors'; @import 'errors';
@import 'split-pane-mode';
} }

View File

@@ -1,183 +0,0 @@
/* eslint-env mocha */
import expect from "expect"
import { transformPathToArray } from "core/path-translator"
describe("validation plugin - path translator", function(){
describe("string paths", function(){
it("should translate a simple string path to an array", function(){
// Given
let jsSpec = {
one: {
a: "a thing",
b: "another thing",
c: "one more thing"
},
two: 2
}
let path = "instance.one.a"
// Then
expect(transformPathToArray(path, jsSpec)).toEqual(["one", "a"])
})
it("should translate an ambiguous string path to an array", function(){
// Since JSONSchema uses periods to mark different properties,
// a key with a period in it is ambiguous, because it can mean at least two things.
// In our case, the path can mean:
// ["google", "com", "a"] or ["google.com", "a"]
// Given
let jsSpec = {
"google.com": {
a: "a thing",
b: "another thing",
c: "one more thing"
},
"gmail.com": {
d: "more stuff",
e: "even more stuff"
}
}
let path = "instance.google.com.a"
// Then
expect(transformPathToArray(path, jsSpec)).toEqual(["google.com", "a"])
})
it("should translate an doubly ambiguous string path to an array", function(){
// Since JSONSchema uses periods to mark different properties,
// a key with two periods in it (like "www.google.com") is doubly ambiguous,
// because it can mean at least three things.
// Given
let jsSpec = {
"www.google.com": {
a: "a thing",
b: "another thing",
c: "one more thing"
},
"gmail.com": {
d: "more stuff",
e: "even more stuff"
}
}
let path = "instance.www.google.com.a"
// Then
expect(transformPathToArray(path, jsSpec)).toEqual(["www.google.com", "a"])
})
it("should return null for an invalid path", function(){
// Given
let jsSpec = {
"google.com": {
a: "a thing",
b: "another thing",
c: "one more thing"
},
"gmail.com": {
d: "more stuff",
e: "even more stuff"
}
}
let path = "instance.google.net.a"
// Then
expect(transformPathToArray(path, jsSpec)).toEqual(null)
})
it("should return inline array indices in their own value", function(){
// "a[1]" => ["a", "1"]
// Given
let jsSpec = {
"google.com": {
a: [
"hello",
"here is the target"
],
b: "another thing",
c: "one more thing"
},
"gmail.com": {
d: "more stuff",
e: "even more stuff"
}
}
let path = "instance.google.com.a[1]"
// Then
expect(transformPathToArray(path, jsSpec)).toEqual(["google.com", "a", "1"])
})
it("should return the correct path when the last part is ambiguous", function(){
// Given
let jsSpec = {
"google.com": {
a: [
"hello",
{
"gmail.com": 1234
}
],
b: "another thing",
c: "one more thing"
},
"gmail.com": {
d: "more stuff",
e: "even more stuff"
}
}
let path = "instance.google.com.a[1].gmail.com"
// Then
expect(transformPathToArray(path, jsSpec)).toEqual(["google.com", "a", "1", "gmail.com"])
})
it("should return the correct path when the last part is doubly ambiguous", function(){
// Given
let jsSpec = {
"google.com": {
a: [
"hello",
{
"www.gmail.com": 1234
}
],
b: "another thing",
c: "one more thing"
},
"gmail.com": {
d: "more stuff",
e: "even more stuff"
}
}
let path = "instance.google.com.a[1].www.gmail.com"
// Then
expect(transformPathToArray(path, jsSpec)).toEqual(["google.com", "a", "1", "www.gmail.com"])
})
})
})

View File

@@ -1,64 +1,32 @@
var path = require('path') const path = require("path")
var rules = [ const styleRules = require("./webpack.dist-style.config.js")
let rules = [
{ test: /\.(worker\.js)(\?.*)?$/, { test: /\.(worker\.js)(\?.*)?$/,
use: [ use: [
{ {
loader: 'worker-loader', loader: "worker-loader",
options: { options: {
inline: true, inline: true,
name: '[name].js' name: "[name].js"
} }
}, },
{ loader: 'babel-loader' } { loader: "babel-loader" }
]
},
{ test: /\.(css)(\?.*)?$/,
use: [
'style-loader',
'css-loader',
'postcss-loader'
]
},
{ test: /\.(scss)(\?.*)?$/,
use: [
'style-loader',
'css-loader',
{
loader: 'postcss-loader',
options: { sourceMap: true }
},
{ loader: 'sass-loader',
options: {
outputStyle: 'expanded',
sourceMap: true,
sourceMapContents: 'true'
}
}
]
},
{ test: /\.(less)(\?.*)?$/,
use: [
'style-loader',
'css-loader',
{
loader: 'postcss-loader',
},
'less-loader'
] ]
} }
] ]
module.exports = require('./make-webpack-config.js')(rules, { module.exports = require("./make-webpack-config.js")(rules, {
_special: { _special: {
separateStylesheets: false, separateStylesheets: true,
minimize: true, minimize: true,
sourcemaps: true, sourcemaps: true,
}, },
entry: { entry: {
'swagger-ui-bundle': [ "swagger-ui-bundle": [
'./src/polyfills', "./src/polyfills",
'./src/core/index.js' "./src/core/index.js"
] ]
}, },

View File

@@ -1,65 +1,32 @@
var path = require('path') const path = require("path")
const styleRules = require("./webpack.dist-style.config.js")
var rules = [ let rules = [
{ test: /\.(worker\.js)(\?.*)?$/, { test: /\.(worker\.js)(\?.*)?$/,
use: [ use: [
{ {
loader: 'worker-loader', loader: "worker-loader",
options: { options: {
inline: true, inline: true,
name: '[name].js' name: "[name].js"
} }
}, },
{ loader: 'babel-loader' } { loader: "babel-loader" }
]
},
{ test: /\.(css)(\?.*)?$/,
use: [
'style-loader',
'css-loader',
'postcss-loader'
]
},
{ test: /\.(scss)(\?.*)?$/,
use: [
'style-loader',
'css-loader',
{
loader: 'postcss-loader',
options: { sourceMap: true }
},
{ loader: 'sass-loader',
options: {
outputStyle: 'expanded',
sourceMap: true,
sourceMapContents: 'true'
}
}
]
},
{ test: /\.(less)(\?.*)?$/,
use: [
'style-loader',
'css-loader',
{
loader: 'postcss-loader',
},
'less-loader'
] ]
} }
] ]
module.exports = require('./make-webpack-config.js')(rules, { module.exports = require("./make-webpack-config.js")(rules, {
_special: { _special: {
separateStylesheets: false, separateStylesheets: true,
minimize: true, minimize: true,
sourcemaps: true, sourcemaps: true,
}, },
entry: { entry: {
'swagger-ui-standalone-preset': [ "swagger-ui-standalone-preset": [
'./src/polyfills', "./src/polyfills",
'./src/standalone/index.js' "./src/standalone/index.js"
] ]
}, },

View File

@@ -1,66 +1,25 @@
var path = require('path') const path = require("path")
var fs = require('fs') const fs = require("fs")
const nodeModules = fs.readdirSync("node_modules").filter(function(x) { return x !== ".bin" }) const nodeModules = fs.readdirSync("node_modules").filter(function(x) { return x !== ".bin" })
var ExtractTextPlugin = require('extract-text-webpack-plugin') const styleRules = require("./webpack.dist-style.config.js")
var rules = [ let rules = [
{ test: /\.(worker\.js)(\?.*)?$/, { test: /\.(worker\.js)(\?.*)?$/,
use: [ use: [
{ {
loader: 'worker-loader', loader: "worker-loader",
options: { options: {
inline: true, inline: true,
name: '[name].js' name: "[name].js"
} }
}, },
{ loader: 'babel-loader' } { loader: "babel-loader" }
] ]
},
{ test: /\.(css)(\?.*)?$/,
use: ExtractTextPlugin.extract({
fallback: 'style-loader',
use: [
'css-loader',
'postcss-loader'
]
})
},
{ test: /\.(scss)(\?.*)?$/,
use: ExtractTextPlugin.extract({
fallback: 'style-loader',
use: [
{
loader: 'css-loader',
options: { minimize: true }
},
{
loader: 'postcss-loader',
options: { sourceMap: true }
},
{ loader: 'sass-loader',
options: {
outputStyle: 'expanded',
sourceMap: true,
sourceMapContents: 'true'
}
}
]
})
},
{ test: /\.(less)(\?.*)?$/,
use: ExtractTextPlugin.extract({
fallback: 'style-loader',
use: ['css-loader',
{
loader: 'postcss-loader',
},
'less-loader'
]
})
} }
] ]
rules = rules.concat(styleRules)
module.exports = require('./make-webpack-config.js')(rules, { module.exports = require("./make-webpack-config.js")(rules, {
_special: { _special: {
separateStylesheets: true, separateStylesheets: true,
minimize: true, minimize: true,

View File

@@ -1,56 +1,46 @@
var path = require('path') const path = require("path")
var rules = [ const rules = [
{ test: /\.(worker\.js)(\?.*)?$/, { test: /\.(worker\.js)(\?.*)?$/,
use: [ use: [
{ {
loader: 'worker-loader', loader: "worker-loader",
options: { options: {
inline: true inline: true
} }
}, },
{ loader: 'babel-loader' } { loader: "babel-loader" }
] ]
}, },
{ test: /\.(jsx)(\?.*)?$/, { test: /\.(jsx)(\?.*)?$/,
use: [ use: [
{ loader: 'react-hot-loader' }, { loader: "react-hot-loader" },
{ loader: 'babel-loader' } { loader: "babel-loader" }
] ]
}, },
{ test: /\.(css)(\?.*)?$/, { test: /\.(css)(\?.*)?$/,
use: [ use: [
'style-loader', "style-loader",
'css-loader', "css-loader",
'postcss-loader' "postcss-loader"
] ]
}, },
{ test: /\.(scss)(\?.*)?$/, { test: /\.(scss)(\?.*)?$/,
use: [ use: [
'style-loader', "style-loader",
'css-loader', "css-loader",
{ {
loader: 'postcss-loader', loader: "postcss-loader",
options: { sourceMap: true } options: { sourceMap: true }
}, },
{ loader: 'sass-loader', { loader: "sass-loader",
options: { options: {
outputStyle: 'expanded', outputStyle: "expanded",
sourceMap: true, sourceMap: true,
sourceMapContents: 'true' sourceMapContents: "true"
} }
} }
] ]
},
{ test: /\.(less)(\?.*)?$/,
use: [
'style-loader',
'css-loader',
{
loader: 'postcss-loader',
},
'less-loader'
]
} }
] ]
@@ -60,25 +50,26 @@ module.exports = require("./make-webpack-config")(rules, {
}, },
devtool: "eval", devtool: "eval",
entry: { entry: {
'swagger-ui-bundle': [ "swagger-ui-bundle": [
'./src/polyfills', "./src/polyfills",
'./src/core/index.js' "./src/core/index.js"
], ],
'swagger-ui-standalone-preset': [ "swagger-ui-standalone-preset": [
'./src/polyfills', "./src/style/main.scss",
'./src/standalone/index.js', "./src/polyfills",
"./src/standalone/index.js",
] ]
}, },
output: { output: {
pathinfo: true, pathinfo: true,
filename: '[name].js', filename: "[name].js",
library: "[name]", library: "[name]",
libraryTarget: "umd", libraryTarget: "umd",
chunkFilename: "[id].js" chunkFilename: "[id].js"
}, },
devServer: { devServer: {
port: 3200, port: 3200,
contentBase: path.join(__dirname, 'dev-helpers'), contentBase: path.join(__dirname, "dev-helpers"),
publicPath: "/", publicPath: "/",
noInfo: true, noInfo: true,
hot: true, hot: true,

View File

@@ -1,3 +1,3 @@
var config = require("./webpack-dist.config.js") const config = require("./webpack-dist.config.js")
module.exports = config module.exports = config

View File

@@ -1,8 +1,7 @@
const webpack = require('webpack') const path = require("path")
const path = require('path') const deepMerge = require("deepmerge")
const deepMerge = require('deepmerge') const webpackConfig = require("./webpack-dist-bundle.config.js")
const webpackConfig = require('./webpack-dist-bundle.config.js') const DEPS_CHECK_DIR = require("./package.json").config.deps_check_dir
const DEPS_CHECK_DIR = require('./package.json').config.deps_check_dir
module.exports = deepMerge( module.exports = deepMerge(
webpackConfig, { webpackConfig, {

View File

@@ -1,3 +1,3 @@
module.exports = require("./make-webpack-config")({ module.exports = require("./make-webpack-config")({
}); })

View File

@@ -0,0 +1,34 @@
const ExtractTextPlugin = require("extract-text-webpack-plugin")
module.exports = [{
test: /\.(css)(\?.*)?$/,
use: ExtractTextPlugin.extract({
fallback: "style-loader",
use: [
"css-loader",
"postcss-loader"
]
})
},
{ test: /\.(scss)(\?.*)?$/,
use: ExtractTextPlugin.extract({
fallback: "style-loader",
use: [
{
loader: "css-loader",
options: { minimize: true }
},
{
loader: "postcss-loader",
options: { sourceMap: true }
},
{ loader: "sass-loader",
options: {
outputStyle: "expanded",
sourceMap: true,
sourceMapContents: "true"
}
}
]
})
}]