From 4b44505378794fe1efb7432c5fb0580703d2d728 Mon Sep 17 00:00:00 2001 From: Kyle Shockey Date: Tue, 10 Jul 2018 16:50:12 -0500 Subject: [PATCH 01/12] set new bundlesize goal --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 271a4897b0b..1a2ef8287b7 100644 --- a/package.json +++ b/package.json @@ -158,7 +158,7 @@ "bundlesize": [ { "path": "./dist/swagger-ui-bundle.js", - "maxSize": "1.5 MB", + "maxSize": "1 MB", "compression": "none" } ] From db9dde85e9c7e86f16467dbfa2f8c514987b4be2 Mon Sep 17 00:00:00 2001 From: Kyle Shockey Date: Tue, 10 Jul 2018 17:16:49 -0500 Subject: [PATCH 02/12] preserve `GeneratorFunction` instead of all function names --- make-webpack-config.js | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/make-webpack-config.js b/make-webpack-config.js index c9be0b23766..9e98e72a93c 100644 --- a/make-webpack-config.js +++ b/make-webpack-config.js @@ -71,10 +71,13 @@ module.exports = function(rules, options) { plugins.push( new UglifyJsPlugin({ uglifyOptions: { - mangle: specialOptions.mangle, + mangle: specialOptions.mangle ? { + reserved: ["GeneratorFunction"] + } : false, + compress: specialOptions.mangle, beautify: !specialOptions.mangle, - keep_fnames: true }, + sourceMap: true, }), new webpack.LoaderOptionsPlugin({ From 8466409235f8606ae4554f61be97e0b365fa51b7 Mon Sep 17 00:00:00 2001 From: Kyle Shockey Date: Tue, 10 Jul 2018 17:22:05 -0500 Subject: [PATCH 03/12] use js-yaml fork that doesn't require esprima --- make-webpack-config.js | 4 ++- package-lock.json | 45 ++++++++++++++++++++++++++++- package.json | 2 +- src/core/plugins/configs/helpers.js | 2 +- src/core/plugins/spec/actions.js | 2 +- 5 files changed, 50 insertions(+), 5 deletions(-) diff --git a/make-webpack-config.js b/make-webpack-config.js index 9e98e72a93c..780fa7c3602 100644 --- a/make-webpack-config.js +++ b/make-webpack-config.js @@ -145,7 +145,9 @@ module.exports = function(rules, options) { "node_modules" ], extensions: [".web.js", ".js", ".jsx", ".json", ".less"], - alias: {} + alias: { + "js-yaml": "@kyleshockey/js-yaml" + } }, devtool: specialOptions.sourcemaps ? "nosource-source-map" : false, diff --git a/package-lock.json b/package-lock.json index fdad7ea47fe..4ac69bf3807 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "swagger-ui", - "version": "3.17.2", + "version": "3.17.3", "lockfileVersion": 1, "requires": true, "dependencies": { @@ -9,6 +9,14 @@ "resolved": "https://registry.npmjs.org/@braintree/sanitize-url/-/sanitize-url-2.1.0.tgz", "integrity": "sha1-VJqdH5I8m8eVOlhdPpqpQpvo/ig=" }, + "@kyleshockey/js-yaml": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@kyleshockey/js-yaml/-/js-yaml-1.0.1.tgz", + "integrity": "sha512-coFyIk1LvTscq1cUU4nCCfYwv+cmG4fCP+wgDKgYZjhM4f++YwZy+g0k+1tUqa4GuUpBTEOGH2KUqKFFWdT73g==", + "requires": { + "argparse": "^1.0.7" + } + }, "@kyleshockey/object-assign-deep": { "version": "0.4.2", "resolved": "https://registry.npmjs.org/@kyleshockey/object-assign-deep/-/object-assign-deep-0.4.2.tgz", @@ -4543,6 +4551,36 @@ } } }, + "eslint-plugin-import": { + "version": "2.13.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.13.0.tgz", + "integrity": "sha512-t6hGKQDMIt9N8R7vLepsYXgDfeuhp6ZJSgtrLEDxonpSubyxUZHjhm6LsAaZX8q6GYVxkbT3kTsV9G5mBCFR6A==", + "dev": true, + "requires": { + "contains-path": "^0.1.0", + "debug": "^2.6.8", + "doctrine": "1.5.0", + "eslint-import-resolver-node": "^0.3.1", + "eslint-module-utils": "^2.2.0", + "has": "^1.0.1", + "lodash": "^4.17.4", + "minimatch": "^3.0.3", + "read-pkg-up": "^2.0.0", + "resolve": "^1.6.0" + }, + "dependencies": { + "doctrine": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-1.5.0.tgz", + "integrity": "sha1-N53Ocw9hZvds76TmcHoVmwLFpvo=", + "dev": true, + "requires": { + "esutils": "^2.0.2", + "isarray": "^1.0.0" + } + } + } + }, "eslint-plugin-mocha": { "version": "4.12.1", "resolved": "https://registry.npmjs.org/eslint-plugin-mocha/-/eslint-plugin-mocha-4.12.1.tgz", @@ -16494,6 +16532,11 @@ "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", "integrity": "sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8=" }, + "reselect": { + "version": "2.5.4", + "resolved": "https://registry.npmjs.org/reselect/-/reselect-2.5.4.tgz", + "integrity": "sha1-t9I/3wC4P6etAnlUb427vXZccEc=" + }, "resolve": { "version": "1.7.1", "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.7.1.tgz", diff --git a/package.json b/package.json index 1a2ef8287b7..7ab5792321a 100644 --- a/package.json +++ b/package.json @@ -43,6 +43,7 @@ }, "dependencies": { "@braintree/sanitize-url": "^2.0.2", + "@kyleshockey/js-yaml": "^1.0.1", "base64-js": "^1.2.0", "classnames": "^2.2.5", "commonmark": "^0.28.1", @@ -53,7 +54,6 @@ "ieee754": "^1.1.8", "immutable": "^3.x.x", "js-file-download": "^0.4.1", - "js-yaml": "^3.5.5", "lodash": "^4.17.10", "memoizee": "^0.4.12", "prop-types": "^15.5.10", diff --git a/src/core/plugins/configs/helpers.js b/src/core/plugins/configs/helpers.js index d36e42774fb..51d8a29a7b8 100644 --- a/src/core/plugins/configs/helpers.js +++ b/src/core/plugins/configs/helpers.js @@ -1,4 +1,4 @@ -import YAML from "js-yaml" +import YAML from "@kyleshockey/js-yaml" export const parseYamlConfig = (yaml, system) => { try { diff --git a/src/core/plugins/spec/actions.js b/src/core/plugins/spec/actions.js index b062ecf227b..d8b2103c2dd 100644 --- a/src/core/plugins/spec/actions.js +++ b/src/core/plugins/spec/actions.js @@ -1,4 +1,4 @@ -import YAML from "js-yaml" +import YAML from "@kyleshockey/js-yaml" import { Map } from "immutable" import parseUrl from "url-parse" import serializeError from "serialize-error" From dea6d039695b71008548c558294d46316f7620b6 Mon Sep 17 00:00:00 2001 From: Kyle Shockey Date: Tue, 10 Jul 2018 17:35:39 -0500 Subject: [PATCH 04/12] set HTML content directly, instead of using React-Markdown --- package-lock.json | 48 +++---------------- package.json | 1 - .../plugins/oas3/wrap-components/markdown.js | 7 +-- 3 files changed, 10 insertions(+), 46 deletions(-) diff --git a/package-lock.json b/package-lock.json index 4ac69bf3807..239a18f39d2 100644 --- a/package-lock.json +++ b/package-lock.json @@ -2938,17 +2938,6 @@ "string.prototype.repeat": "^0.2.0" } }, - "commonmark-react-renderer": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/commonmark-react-renderer/-/commonmark-react-renderer-4.3.4.tgz", - "integrity": "sha512-+/Rzo3sI37NR8LaVdkUiqBH3+CEW75hc86shwY4E9eEERg78VCy4rSkaP/p7OG5bTvosUMkvhn5d1ZJ5iyt/ag==", - "requires": { - "lodash.assign": "^4.2.0", - "lodash.isplainobject": "^4.0.6", - "pascalcase": "^0.1.1", - "xss-filters": "^1.2.6" - } - }, "compressible": { "version": "2.0.13", "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.13.tgz", @@ -6802,7 +6791,8 @@ "in-publish": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/in-publish/-/in-publish-2.0.0.tgz", - "integrity": "sha1-4g/146KvwmkDILbcVSaCqcf631E=" + "integrity": "sha1-4g/146KvwmkDILbcVSaCqcf631E=", + "dev": true }, "indent-string": { "version": "2.1.0", @@ -8223,7 +8213,8 @@ "lodash.assign": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/lodash.assign/-/lodash.assign-4.2.0.tgz", - "integrity": "sha1-DZnzzNem0mHRm9rrkkUAXShYCOc=" + "integrity": "sha1-DZnzzNem0mHRm9rrkkUAXShYCOc=", + "dev": true }, "lodash.assignin": { "version": "4.2.0", @@ -8337,7 +8328,8 @@ "lodash.isplainobject": { "version": "4.0.6", "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz", - "integrity": "sha1-fFJqUtibRcRcxpC4gWO+BJf1UMs=" + "integrity": "sha1-fFJqUtibRcRcxpC4gWO+BJf1UMs=", + "dev": true }, "lodash.keys": { "version": "3.1.2", @@ -16005,29 +15997,6 @@ "is-dom": "^1.0.9" } }, - "react-markdown": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/react-markdown/-/react-markdown-2.5.0.tgz", - "integrity": "sha1-scYZBP7liViGgDvZ332yPD3DqJ4=", - "requires": { - "commonmark": "^0.24.0", - "commonmark-react-renderer": "^4.2.4", - "in-publish": "^2.0.0", - "prop-types": "^15.5.1" - }, - "dependencies": { - "commonmark": { - "version": "0.24.0", - "resolved": "https://registry.npmjs.org/commonmark/-/commonmark-0.24.0.tgz", - "integrity": "sha1-uA3gGCxUY1VkOqFdsSv7KCNoJ48=", - "requires": { - "entities": "~ 1.1.1", - "mdurl": "~ 1.0.1", - "string.prototype.repeat": "^0.2.0" - } - } - } - }, "react-motion": { "version": "0.5.2", "resolved": "https://registry.npmjs.org/react-motion/-/react-motion-0.5.2.tgz", @@ -19715,11 +19684,6 @@ "integrity": "sha1-UqY+VsoLhKfzpfPWGHLxJq16WUM=", "dev": true }, - "xss-filters": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/xss-filters/-/xss-filters-1.2.7.tgz", - "integrity": "sha1-Wfod4gHzby80cNysX1jMwoMLCpo=" - }, "xtend": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz", diff --git a/package.json b/package.json index 7ab5792321a..558ed0c7d26 100644 --- a/package.json +++ b/package.json @@ -65,7 +65,6 @@ "react-immutable-proptypes": "2.1.0", "react-immutable-pure-component": "^1.1.1", "react-inspector": "^2.3.0", - "react-markdown": "^2.5.0", "react-motion": "^0.5.2", "react-redux": "^4.x.x", "react-split-pane": "^0.1.77", diff --git a/src/core/plugins/oas3/wrap-components/markdown.js b/src/core/plugins/oas3/wrap-components/markdown.js index 9bfdffb931d..650e099bab1 100644 --- a/src/core/plugins/oas3/wrap-components/markdown.js +++ b/src/core/plugins/oas3/wrap-components/markdown.js @@ -1,6 +1,5 @@ import React from "react" import PropTypes from "prop-types" -import ReactMarkdown from "react-markdown" import cx from "classnames" import { Parser, HtmlRenderer } from "commonmark" import { OAS3ComponentWrapFactory } from "../helpers" @@ -18,8 +17,10 @@ export const Markdown = ({ source, className = "" }) => { } return ( - ) From 2b4b9418146282d805d28c36be982d5e81e13edd Mon Sep 17 00:00:00 2001 From: Kyle Shockey Date: Tue, 10 Jul 2018 18:49:19 -0500 Subject: [PATCH 05/12] use remarkable for all Markdown rendering --- package-lock.json | 24 ++----------------- package.json | 1 - .../plugins/oas3/wrap-components/markdown.js | 12 ++++------ 3 files changed, 6 insertions(+), 31 deletions(-) diff --git a/package-lock.json b/package-lock.json index 239a18f39d2..e52ca05e669 100644 --- a/package-lock.json +++ b/package-lock.json @@ -2927,17 +2927,6 @@ "integrity": "sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=", "dev": true }, - "commonmark": { - "version": "0.28.1", - "resolved": "https://registry.npmjs.org/commonmark/-/commonmark-0.28.1.tgz", - "integrity": "sha1-Buq41SM4uDn6Gi11rwCF7tGxvq4=", - "requires": { - "entities": "~ 1.1.1", - "mdurl": "~ 1.0.1", - "minimist": "~ 1.2.0", - "string.prototype.repeat": "^0.2.0" - } - }, "compressible": { "version": "2.0.13", "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.13.tgz", @@ -4217,7 +4206,8 @@ "entities": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/entities/-/entities-1.1.1.tgz", - "integrity": "sha1-blwtClYhtdra7O+AuQ7ftc13cvA=" + "integrity": "sha1-blwtClYhtdra7O+AuQ7ftc13cvA=", + "dev": true }, "enzyme": { "version": "2.9.1", @@ -8593,11 +8583,6 @@ "inherits": "^2.0.1" } }, - "mdurl": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/mdurl/-/mdurl-1.0.1.tgz", - "integrity": "sha1-/oWy7HWlkDfyrf7BAP1sYBdhFS4=" - }, "media-typer": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", @@ -17923,11 +17908,6 @@ "function-bind": "^1.0.2" } }, - "string.prototype.repeat": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/string.prototype.repeat/-/string.prototype.repeat-0.2.0.tgz", - "integrity": "sha1-q6Nt4I3O5qWjN9SbLqHaGyj8Ds8=" - }, "string_decoder": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", diff --git a/package.json b/package.json index 558ed0c7d26..995ff8e1005 100644 --- a/package.json +++ b/package.json @@ -46,7 +46,6 @@ "@kyleshockey/js-yaml": "^1.0.1", "base64-js": "^1.2.0", "classnames": "^2.2.5", - "commonmark": "^0.28.1", "core-js": "^2.5.1", "css.escape": "1.5.1", "deep-extend": "0.5.1", diff --git a/src/core/plugins/oas3/wrap-components/markdown.js b/src/core/plugins/oas3/wrap-components/markdown.js index 650e099bab1..e825e37cd36 100644 --- a/src/core/plugins/oas3/wrap-components/markdown.js +++ b/src/core/plugins/oas3/wrap-components/markdown.js @@ -1,21 +1,17 @@ import React from "react" import PropTypes from "prop-types" import cx from "classnames" -import { Parser, HtmlRenderer } from "commonmark" +import Remarkable from "remarkable" import { OAS3ComponentWrapFactory } from "../helpers" import { sanitizer } from "core/components/providers/markdown" +const parser = new Remarkable("commonmark") + export const Markdown = ({ source, className = "" }) => { if ( source ) { - const parser = new Parser() - const writer = new HtmlRenderer() - const html = writer.render(parser.parse(source || "")) + const html = parser.render(source) const sanitized = sanitizer(html) - if ( !source || !html || !sanitized ) { - return null - } - return (
Date: Tue, 10 Jul 2018 23:13:07 -0500 Subject: [PATCH 06/12] add babel-plugin-transform-react-remove-prop-types --- .babelrc | 3 +++ package-lock.json | 6 ++++++ package.json | 1 + 3 files changed, 10 insertions(+) diff --git a/.babelrc b/.babelrc index 50f9abc80f7..db2042afa43 100644 --- a/.babelrc +++ b/.babelrc @@ -7,6 +7,9 @@ "plugins": [ "transform-runtime", "babel-plugin-transform-es2015-constants", + ["transform-react-remove-prop-types", { + "additionalLibraries": ["react-immutable-proptypes"] + }], [ "module-alias", [ diff --git a/package-lock.json b/package-lock.json index e52ca05e669..fe809e5e8b2 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1531,6 +1531,12 @@ "babel-runtime": "^6.22.0" } }, + "babel-plugin-transform-react-remove-prop-types": { + "version": "0.4.13", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-react-remove-prop-types/-/babel-plugin-transform-react-remove-prop-types-0.4.13.tgz", + "integrity": "sha1-Mxz8BQmagII4MR14MZwnRg1IEYk=", + "dev": true + }, "babel-plugin-transform-regenerator": { "version": "6.26.0", "resolved": "https://registry.npmjs.org/babel-plugin-transform-regenerator/-/babel-plugin-transform-regenerator-6.26.0.tgz", diff --git a/package.json b/package.json index 995ff8e1005..b844fbbafb2 100644 --- a/package.json +++ b/package.json @@ -86,6 +86,7 @@ "babel-loader": "^7.1.0", "babel-plugin-module-alias": "^1.6.0", "babel-plugin-transform-es2015-constants": "^6.1.4", + "babel-plugin-transform-react-remove-prop-types": "^0.4.13", "babel-plugin-transform-runtime": "^6.23.0", "babel-preset-es2015": "^6.22.0", "babel-preset-es2015-ie": "^6.6.2", From 9bb5b4fdd36d071e418ef9efdfb901f5f213d201 Mon Sep 17 00:00:00 2001 From: Kyle Shockey Date: Wed, 11 Jul 2018 13:59:34 -0400 Subject: [PATCH 07/12] remove SplitPaneMode plugin --- .../components/split-pane-mode.jsx | 85 ------------------- src/core/plugins/split-pane-mode/index.js | 15 ---- src/core/presets/base.js | 2 - 3 files changed, 102 deletions(-) delete mode 100644 src/core/plugins/split-pane-mode/components/split-pane-mode.jsx delete mode 100644 src/core/plugins/split-pane-mode/index.js diff --git a/src/core/plugins/split-pane-mode/components/split-pane-mode.jsx b/src/core/plugins/split-pane-mode/components/split-pane-mode.jsx deleted file mode 100644 index c1a8fa9c2a9..00000000000 --- a/src/core/plugins/split-pane-mode/components/split-pane-mode.jsx +++ /dev/null @@ -1,85 +0,0 @@ -import React from "react" -import PropTypes from "prop-types" -import SplitPane from "react-split-pane" - -const MODE_KEY = ["split-pane-mode"] -const MODE_LEFT = "left" -const MODE_RIGHT = "right" -const MODE_BOTH = "both" // or anything other than left/right - -export default class SplitPaneMode extends React.Component { - - static propTypes = { - threshold: PropTypes.number, - - children: PropTypes.array, - - layoutSelectors: PropTypes.object.isRequired, - layoutActions: PropTypes.object.isRequired, - }; - - static defaultProps = { - threshold: 100, // in pixels - children: [], - }; - - initializeComponent = (c) => { - this.splitPane = c - } - - onDragFinished = () => { - let { threshold, layoutActions } = this.props - let { position, draggedSize } = this.splitPane.state - this.draggedSize = draggedSize - - let nearLeftEdge = position <= threshold - let nearRightEdge = draggedSize <= threshold - - layoutActions - .changeMode(MODE_KEY, ( - nearLeftEdge - ? MODE_RIGHT : nearRightEdge - ? MODE_LEFT : MODE_BOTH - )) - } - - sizeFromMode = (mode, defaultSize) => { - if(mode === MODE_LEFT) { - this.draggedSize = null - return "0px" - } else if (mode === MODE_RIGHT) { - this.draggedSize = null - return "100%" - } - // mode === "both" - return this.draggedSize || defaultSize - } - - render() { - let { children, layoutSelectors } = this.props - - const mode = layoutSelectors.whatMode(MODE_KEY) - const left = mode === MODE_RIGHT ?