diff --git a/visualization-playground/index.js b/visualization-playground/index.js
deleted file mode 100644
index 82a7dea..0000000
--- a/visualization-playground/index.js
+++ /dev/null
@@ -1,5 +0,0 @@
-// This is the entry point when this package is used as library from the extension.
-// This package MUST NOT be bundled.
-const path = require("path");
-
-module.exports.distPath = path.join(__dirname, "dist");
diff --git a/visualization-playground/package.json b/visualization-playground/package.json
index 20b22b1..8914331 100644
--- a/visualization-playground/package.json
+++ b/visualization-playground/package.json
@@ -4,9 +4,9 @@
"scripts": {
"dev": "webpack-dev-server --hot --port 8090",
"dev-fast": "webpack-dev-server --hot --port 8090 --fast",
- "build": "webpack"
+ "build": "webpack",
+ "pub": "gh-pages -d dist"
},
- "main": "./index.js",
"dependencies": {
"@blueprintjs/core": "^3.23.1",
"@hediet/std": "^0.6.0",
@@ -19,9 +19,11 @@
"react": "^16.12.0",
"react-dom": "^16.12.0",
"react-measure": "^2.3.0",
- "@hediet/debug-visualizer-data-extraction": "*"
+ "@hediet/debug-visualizer-data-extraction": "*",
+ "react-autosize-textarea": "^7.0.0"
},
"devDependencies": {
+ "gh-pages": "^2.2.0",
"@types/html-webpack-plugin": "^3.2.2",
"@types/react-measure": "^2.0.6",
"@types/webpack": "^4.41.6",
diff --git a/visualization-playground/src/components/GUI.tsx b/visualization-playground/src/components/GUI.tsx
index 1d986e9..8de6502 100644
--- a/visualization-playground/src/components/GUI.tsx
+++ b/visualization-playground/src/components/GUI.tsx
@@ -5,34 +5,41 @@ import { observer } from "mobx-react";
import { Model } from "../model/Model";
import classnames = require("classnames");
import { knownVisualizations } from "@hediet/visualization";
-import {
- ExtractedData,
- CommonDataType,
-} from "@hediet/debug-visualizer-data-extraction";
+import { CommonDataType } from "@hediet/debug-visualizer-data-extraction";
+import { LightExpressionInput } from "./LightExpressionInput";
@observer
export class GUI extends React.Component<{ model: Model }> {
render() {
const m = this.props.model;
- const e: CommonDataType = {
- kind: { graph: true },
- nodes: [
- { id: "1", label: "1" },
- { id: "2", label: "2" },
- ],
- edges: [
- {
- from: "1",
- to: "2",
- },
- ],
- };
- const result = knownVisualizations.getBestVisualization(e, undefined);
return (
-
- {result.visualization!.render()}
+
+
+
+
+
+ {this.renderVisualization()}
+
);
}
+
+ renderVisualization() {
+ const m = this.props.model;
+
+ if (!m.visualizations) {
+ return
No/Invalid Data
;
+ }
+ if (!m.visualizations.visualization) {
+ return
Data cannot be visualized
;
+ }
+ return m.visualizations.visualization.render();
+ }
}
diff --git a/visualization-playground/src/components/LightExpressionInput.tsx b/visualization-playground/src/components/LightExpressionInput.tsx
new file mode 100644
index 0000000..bf6ba5e
--- /dev/null
+++ b/visualization-playground/src/components/LightExpressionInput.tsx
@@ -0,0 +1,76 @@
+import * as React from "react";
+import { observer } from "mobx-react";
+import { observable, action } from "mobx";
+import TextareaAutosize from "react-autosize-textarea";
+
+export class ExpressionModel {
+ @observable
+ private _value: string;
+
+ constructor(initialValue: string) {
+ this._value = initialValue;
+ }
+
+ public get value(): string {
+ return this._value;
+ }
+
+ public setValue(newValue: string): void {
+ this._value = newValue;
+ }
+}
+
+@observer
+export class LightExpressionInput extends React.Component<{
+ model: ExpressionModel;
+}> {
+ @observable localText: string | undefined = undefined;
+
+ get text(): string {
+ if (this.localText !== undefined) {
+ return this.localText;
+ }
+ return this.props.model.value;
+ }
+
+ render() {
+ return (
+
+ (this.localText = e.currentTarget.value)}
+ onKeyDown={e => {
+ if (e.keyCode == 9 || e.which == 9) {
+ // enable tab
+ const target = e.currentTarget;
+ e.preventDefault();
+ var s = target.selectionStart;
+ target.value =
+ target.value.substring(
+ 0,
+ target.selectionStart
+ ) +
+ "\t" +
+ target.value.substring(target.selectionEnd);
+ target.selectionEnd = s + 1;
+ }
+ }}
+ style={{
+ width: "100%",
+ resize: "none",
+ }}
+ onBlur={this.handleBlur}
+ />
+
+ );
+ }
+
+ @action.bound
+ private handleBlur() {
+ if (this.localText !== undefined) {
+ this.props.model.setValue(this.localText);
+ }
+ this.localText = undefined;
+ }
+}
diff --git a/visualization-playground/src/model/Model.ts b/visualization-playground/src/model/Model.ts
index c38f73a..dd30e9a 100644
--- a/visualization-playground/src/model/Model.ts
+++ b/visualization-playground/src/model/Model.ts
@@ -5,6 +5,9 @@ import {
knownVisualizations,
} from "@hediet/visualization";
import { Disposable } from "@hediet/std/disposable";
+import { ExpressionModel } from "../components/LightExpressionInput";
+import { ExtractedData } from "@hediet/debug-visualizer-data-extraction";
+import { QueryController } from "./QueryController";
export class Model {
public readonly dispose = Disposable.fn();
@@ -21,24 +24,64 @@ export class Model {
this.preferredVisualizationId = id;
}
+ public jsonExpression = new ExpressionModel(
+ JSON.stringify(
+ {
+ kind: { graph: true },
+ nodes: [
+ { id: "1", label: "1" },
+ { id: "2", label: "2" },
+ ],
+ edges: [
+ {
+ from: "1",
+ to: "2",
+ },
+ ],
+ },
+ undefined,
+ 4
+ )
+ );
+
+ get state():
+ | { kind: "data"; data: ExtractedData }
+ | { kind: "parseError" } {
+ const json = this.jsonExpression.value;
+ let data: ExtractedData;
+ try {
+ data = JSON.parse(json);
+ } catch (e) {
+ return {
+ kind: "parseError",
+ };
+ }
+
+ return {
+ kind: "data",
+ data,
+ };
+ }
+
@computed get visualizations():
| {
visualization: Visualization | undefined;
allVisualizations: Visualization[];
}
| undefined {
- return undefined;
- /*if (this.state.kind === "data") {
+ if (this.state.kind === "data") {
const vis = knownVisualizations.getBestVisualization(
- this.state.result.data,
+ this.state.data,
this.preferredVisualizationId
);
return vis;
} else {
return undefined;
- }*/
+ }
}
+ private readonly q = new QueryController(this);
+
constructor() {
const url = new URL(window.location.href);
diff --git a/visualization-playground/src/model/QueryController.ts b/visualization-playground/src/model/QueryController.ts
new file mode 100644
index 0000000..d47d5a4
--- /dev/null
+++ b/visualization-playground/src/model/QueryController.ts
@@ -0,0 +1,26 @@
+import { Model } from "./Model";
+import { autorun } from "mobx";
+
+export class QueryController {
+ constructor(private readonly model: Model) {
+ this.loadFromQuery();
+ autorun(() => {
+ this.updateQuery();
+ });
+ }
+
+ loadFromQuery() {
+ const url = new URL(window.location.href);
+ const val = url.searchParams.get("value");
+ if (val) {
+ this.model.jsonExpression.setValue(val);
+ }
+ }
+
+ updateQuery() {
+ const url = new URL(window.location.href);
+ url.searchParams.set("value", this.model.jsonExpression.value);
+
+ history.replaceState(null, document.title, url.toString());
+ }
+}
diff --git a/visualization-playground/src/style.scss b/visualization-playground/src/style.scss
index 7f03f49..79cf191 100644
--- a/visualization-playground/src/style.scss
+++ b/visualization-playground/src/style.scss
@@ -36,8 +36,8 @@ body {
.component-GUI {
height: 100%;
& > .part-Header {
- padding: 6px 20px 6px 0;
- background-color: var(--vscode-sideBar-background);
+ //padding: 6px 20px 6px 0;
+ //background-color: var(--vscode-sideBar-background);
// border-top: solid 1px var(--vscode-button-background);
// rgba(128, 128, 128, 0.15)
@@ -66,13 +66,6 @@ body {
}
}
-.svgViewer {
- width: 100%;
- height: 100%;
- padding: 0;
- margin: 0;
-}
-
.bp3-transition-container {
z-index: 100000;
}
diff --git a/visualization-playground/webpack.config.ts b/visualization-playground/webpack.config.ts
index 1da126b..6af1f7c 100644
--- a/visualization-playground/webpack.config.ts
+++ b/visualization-playground/webpack.config.ts
@@ -4,13 +4,46 @@ import HtmlWebpackPlugin = require("html-webpack-plugin");
import MonacoWebpackPlugin = require("monaco-editor-webpack-plugin");
import ForkTsCheckerWebpackPlugin = require("fork-ts-checker-webpack-plugin");
import { CleanWebpackPlugin } from "clean-webpack-plugin";
+import { EnabledVisualizers } from "@hediet/visualization";
const r = (file: string) => path.resolve(__dirname, file);
const mode = process.argv.some(v => v === "--fast") ? "fast" : "default";
+const enabledVisualizers: EnabledVisualizers =
+ mode === "fast"
+ ? {
+ VisJsGraphVisualizer: true,
+ TreeVisualizer: false,
+ GraphvizGraphVisualizer: false,
+ SvgVisualizer: false,
+ GraphvizDotVisualizer: false,
+ TextVisualizer: false,
+ PlotlyVisualizer: false,
+ GridVisualizer: false,
+ MonacoTextVisualizer: false,
+ AstVisualizer: false,
+ }
+ : {
+ VisJsGraphVisualizer: true,
+ TreeVisualizer: true,
+ GraphvizGraphVisualizer: true,
+ SvgVisualizer: true,
+ GraphvizDotVisualizer: true,
+ TextVisualizer: true,
+ PlotlyVisualizer: true,
+ GridVisualizer: true,
+ MonacoTextVisualizer: true,
+ AstVisualizer: true,
+ };
+
+const stringifiedEnabledVisualizers: Record
= {};
+for (const [key, val] of Object.entries(enabledVisualizers)) {
+ stringifiedEnabledVisualizers[key] = JSON.stringify(val);
+}
+
module.exports = {
- entry: [mode === "default" ? r("src/index.tsx") : r("src/playground.tsx")],
+ entry: [r("src/index.tsx")],
output: {
path: r("dist"),
filename: "[name].js",
@@ -19,7 +52,7 @@ module.exports = {
resolve: {
extensions: [".webpack.js", ".web.js", ".ts", ".tsx", ".js"],
},
- devtool: "source-map",
+ devtool: "eval", // "source-map",
module: {
rules: [
{ test: /\.css$/, loader: "style-loader!css-loader" },
@@ -45,15 +78,18 @@ module.exports = {
}),
new ForkTsCheckerWebpackPlugin(),
new CleanWebpackPlugin(),
+ new webpack.DefinePlugin({
+ ENABLED_VISUALIZERS: stringifiedEnabledVisualizers,
+ }),
];
- if (mode === "default") {
- plugins.push(
- new MonacoWebpackPlugin({
- // Add more languages here once webworker issues are solved.
- languages: ["typescript"],
- })
- );
- }
+
+ plugins.push(
+ new MonacoWebpackPlugin({
+ // Add more languages here once webworker issues are solved.
+ languages: ["typescript"],
+ })
+ );
+
return plugins;
})(),
} as webpack.Configuration;
diff --git a/visualization/src/EnabledVisualizers.ts b/visualization/src/EnabledVisualizers.ts
new file mode 100644
index 0000000..083873a
--- /dev/null
+++ b/visualization/src/EnabledVisualizers.ts
@@ -0,0 +1,12 @@
+export interface EnabledVisualizers {
+ VisJsGraphVisualizer: boolean;
+ TreeVisualizer: boolean;
+ GraphvizGraphVisualizer: boolean;
+ SvgVisualizer: boolean;
+ GraphvizDotVisualizer: boolean;
+ TextVisualizer: boolean;
+ PlotlyVisualizer: boolean;
+ GridVisualizer: boolean;
+ MonacoTextVisualizer: boolean;
+ AstVisualizer: boolean;
+}
diff --git a/visualization/src/index.ts b/visualization/src/index.ts
index 686036d..bcf603e 100644
--- a/visualization/src/index.ts
+++ b/visualization/src/index.ts
@@ -1,3 +1,4 @@
export * from "./visualizers";
export * from "./Visualizer";
export * from "./VisualizerView";
+export * from "./EnabledVisualizers";
diff --git a/visualization/src/visualizers/index.ts b/visualization/src/visualizers/index.ts
index 5a391ba..817c1c0 100644
--- a/visualization/src/visualizers/index.ts
+++ b/visualization/src/visualizers/index.ts
@@ -1,25 +1,33 @@
-// import "./style.scss";
-import { ComposedVisualizer } from "../Visualizer";
-import { TreeVisualizer } from "./TreeVisualizer/TreeVisualizer";
-import { GraphvizGraphVisualizer } from "./graph-visualizers/GraphvizGraphVisualizer";
-import { SvgVisualizer } from "./SvgVisualizer";
-import { GraphvizDotVisualizer } from "./graph-visualizers/GraphvizDotVisualizer";
-import { TextVisualizer } from "./text-visualizers/TextVisualizer";
-import { MonacoTextVisualizer } from "./text-visualizers/MonacoTextVisualizer";
-import { AstVisualizer } from "./AstVisualizer";
-import { VisJsGraphVisualizer } from "./graph-visualizers/VisJsGraphVisualizer";
-import { PlotlyVisualizer } from "./plotly";
-import { GridVisualizer } from "./GridVisualizer";
+import { ComposedVisualizer, Visualizer } from "../Visualizer";
+import { EnabledVisualizers } from "../EnabledVisualizers";
-export const knownVisualizations = new ComposedVisualizer([
- new TreeVisualizer(),
- new GraphvizGraphVisualizer(),
- new VisJsGraphVisualizer(),
- new SvgVisualizer(),
- new GraphvizDotVisualizer(),
- new TextVisualizer(),
- new MonacoTextVisualizer(),
- new AstVisualizer(),
- new PlotlyVisualizer(),
- new GridVisualizer(),
-]);
+declare const ENABLED_VISUALIZERS: EnabledVisualizers;
+
+function isVisualizer(v: Visualizer | false): v is Visualizer {
+ return !!v;
+}
+
+export const knownVisualizations = new ComposedVisualizer(
+ [
+ ENABLED_VISUALIZERS.VisJsGraphVisualizer &&
+ new (require("./graph-visualizers/VisJsGraphVisualizer") as typeof import("./graph-visualizers/VisJsGraphVisualizer")).VisJsGraphVisualizer(),
+ ENABLED_VISUALIZERS.TreeVisualizer &&
+ new (require("./TreeVisualizer/TreeVisualizer") as typeof import("./TreeVisualizer/TreeVisualizer")).TreeVisualizer(),
+ ENABLED_VISUALIZERS.GraphvizGraphVisualizer &&
+ new (require("./graph-visualizers/GraphvizGraphVisualizer") as typeof import("./graph-visualizers/GraphvizGraphVisualizer")).GraphvizGraphVisualizer(),
+ ENABLED_VISUALIZERS.SvgVisualizer &&
+ new (require("./SvgVisualizer") as typeof import("./SvgVisualizer")).SvgVisualizer(),
+ ENABLED_VISUALIZERS.GraphvizDotVisualizer &&
+ new (require("./graph-visualizers/GraphvizDotVisualizer") as typeof import("./graph-visualizers/GraphvizDotVisualizer")).GraphvizDotVisualizer(),
+ ENABLED_VISUALIZERS.TextVisualizer &&
+ new (require("./text-visualizers/TextVisualizer") as typeof import("./text-visualizers/TextVisualizer")).TextVisualizer(),
+ ENABLED_VISUALIZERS.PlotlyVisualizer &&
+ new (require("./plotly") as typeof import("./plotly")).PlotlyVisualizer(),
+ ENABLED_VISUALIZERS.GridVisualizer &&
+ new (require("./GridVisualizer") as typeof import("./GridVisualizer")).GridVisualizer(),
+ ENABLED_VISUALIZERS.MonacoTextVisualizer &&
+ new (require("./text-visualizers/MonacoTextVisualizer") as typeof import("./text-visualizers/MonacoTextVisualizer")).MonacoTextVisualizer(),
+ ENABLED_VISUALIZERS.AstVisualizer &&
+ new (require("./AstVisualizer") as typeof import("./AstVisualizer")).AstVisualizer(),
+ ].filter(isVisualizer)
+);
diff --git a/webview/webpack.config.ts b/webview/webpack.config.ts
index 7295a83..1c1be8b 100644
--- a/webview/webpack.config.ts
+++ b/webview/webpack.config.ts
@@ -4,9 +4,28 @@ import HtmlWebpackPlugin = require("html-webpack-plugin");
import MonacoWebpackPlugin = require("monaco-editor-webpack-plugin");
import ForkTsCheckerWebpackPlugin = require("fork-ts-checker-webpack-plugin");
import { CleanWebpackPlugin } from "clean-webpack-plugin";
+import { EnabledVisualizers } from "@hediet/visualization";
const r = (file: string) => path.resolve(__dirname, file);
+const enabledVisualizers: EnabledVisualizers = {
+ VisJsGraphVisualizer: true,
+ TreeVisualizer: true,
+ GraphvizGraphVisualizer: true,
+ SvgVisualizer: true,
+ GraphvizDotVisualizer: true,
+ TextVisualizer: true,
+ PlotlyVisualizer: true,
+ GridVisualizer: true,
+ MonacoTextVisualizer: true,
+ AstVisualizer: true,
+};
+
+const stringifiedEnabledVisualizers: Record = {};
+for (const [key, val] of Object.entries(enabledVisualizers)) {
+ stringifiedEnabledVisualizers[key] = JSON.stringify(val);
+}
+
module.exports = {
entry: [r("src/index.tsx")],
output: {
@@ -47,6 +66,9 @@ module.exports = {
// Add more languages here once webworker issues are solved.
languages: ["typescript"],
}),
+ new webpack.DefinePlugin({
+ ENABLED_VISUALIZERS: stringifiedEnabledVisualizers,
+ }),
];
return plugins;
diff --git a/yarn.lock b/yarn.lock
index 3f344f8..6bb1069 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -1068,7 +1068,7 @@ async-limiter@~1.0.0:
resolved "https://registry.yarnpkg.com/async-limiter/-/async-limiter-1.0.1.tgz#dd379e94f0db8310b08291f9d64c3209766617fd"
integrity sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ==
-async@^2.6.2:
+async@^2.6.1, async@^2.6.2:
version "2.6.3"
resolved "https://registry.yarnpkg.com/async/-/async-2.6.3.tgz#d72625e2344a3656e3a3ad4fa749fa83299d82ff"
integrity sha512-zflvls11DCy+dQWzTW2dzuilv8Z5X/pjfmZOWba6TNIVDm+2UDaJmXSOXlasHKfNBs8oo3M0aT50fDEWfKZjXg==
@@ -1095,6 +1095,11 @@ atob@^2.1.1:
resolved "https://registry.yarnpkg.com/atob/-/atob-2.1.2.tgz#6d9517eb9e030d2436666651e86bd9f6f13533c9"
integrity sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==
+autosize@^4.0.2:
+ version "4.0.2"
+ resolved "https://registry.yarnpkg.com/autosize/-/autosize-4.0.2.tgz#073cfd07c8bf45da4b9fd153437f5bafbba1e4c9"
+ integrity sha512-jnSyH2d+qdfPGpWlcuhGiHmqBJ6g3X+8T+iRwFrHPLVcdoGJE/x6Qicm6aDHfTsbgZKxyV8UU/YB2p4cjKDRRA==
+
aws-sign2@~0.7.0:
version "0.7.0"
resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.7.0.tgz#b46e890934a9591f2d2f6f86d7e6a9f1b3fe76a8"
@@ -1886,7 +1891,7 @@ combined-stream@^1.0.6, combined-stream@~1.0.6:
dependencies:
delayed-stream "~1.0.0"
-commander@2, commander@^2.15.1:
+commander@2, commander@^2.15.1, commander@^2.18.0:
version "2.20.3"
resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33"
integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==
@@ -1971,6 +1976,11 @@ compute-dims@^1.1.0:
validate.io-ndarray-like "^1.0.0"
validate.io-positive-integer "^1.0.0"
+computed-style@~0.1.3:
+ version "0.1.4"
+ resolved "https://registry.yarnpkg.com/computed-style/-/computed-style-0.1.4.tgz#7f344fd8584b2e425bedca4a1afc0e300bb05d74"
+ integrity sha1-fzRP2FhLLkJb7cpKGvwOMAuwXXQ=
+
concat-map@0.0.1:
version "0.0.1"
resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b"
@@ -2786,6 +2796,11 @@ elliptic@^6.0.0:
minimalistic-assert "^1.0.0"
minimalistic-crypto-utils "^1.0.0"
+email-addresses@^3.0.1:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/email-addresses/-/email-addresses-3.1.0.tgz#cabf7e085cbdb63008a70319a74e6136188812fb"
+ integrity sha512-k0/r7GrWVL32kZlGwfPNgB2Y/mMXVTq/decgLczm/j34whdaspNrZO8CnXPf1laaHxI6ptUlsnAxN+UAPw+fzg==
+
emoji-regex@^7.0.1:
version "7.0.3"
resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-7.0.3.tgz#933a04052860c85e83c122479c4748a8e4c72156"
@@ -3266,6 +3281,28 @@ file-loader@^5.1.0:
loader-utils "^1.4.0"
schema-utils "^2.5.0"
+filename-reserved-regex@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/filename-reserved-regex/-/filename-reserved-regex-1.0.0.tgz#e61cf805f0de1c984567d0386dc5df50ee5af7e4"
+ integrity sha1-5hz4BfDeHJhFZ9A4bcXfUO5a9+Q=
+
+filenamify-url@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/filenamify-url/-/filenamify-url-1.0.0.tgz#b32bd81319ef5863b73078bed50f46a4f7975f50"
+ integrity sha1-syvYExnvWGO3MHi+1Q9GpPeXX1A=
+ dependencies:
+ filenamify "^1.0.0"
+ humanize-url "^1.0.0"
+
+filenamify@^1.0.0:
+ version "1.2.1"
+ resolved "https://registry.yarnpkg.com/filenamify/-/filenamify-1.2.1.tgz#a9f2ffd11c503bed300015029272378f1f1365a5"
+ integrity sha1-qfL/0RxQO+0wABUCknI3jx8TZaU=
+ dependencies:
+ filename-reserved-regex "^1.0.0"
+ strip-outer "^1.0.0"
+ trim-repeated "^1.0.0"
+
fill-range@^4.0.0:
version "4.0.0"
resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-4.0.0.tgz#d544811d428f98eb06a63dc402d2403c328c38f7"
@@ -3453,6 +3490,15 @@ from2@^2.1.0, from2@^2.3.0:
inherits "^2.0.1"
readable-stream "^2.0.0"
+fs-extra@^8.1.0:
+ version "8.1.0"
+ resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-8.1.0.tgz#49d43c45a88cd9677668cb7be1b46efdb8d2e1c0"
+ integrity sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==
+ dependencies:
+ graceful-fs "^4.2.0"
+ jsonfile "^4.0.0"
+ universalify "^0.1.0"
+
fs-minipass@^1.2.5:
version "1.2.6"
resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-1.2.6.tgz#2c5cc30ded81282bfe8a0d7c7c1853ddeb102c07"
@@ -3596,6 +3642,18 @@ getpass@^0.1.1:
dependencies:
assert-plus "^1.0.0"
+gh-pages@^2.2.0:
+ version "2.2.0"
+ resolved "https://registry.yarnpkg.com/gh-pages/-/gh-pages-2.2.0.tgz#74ebeaca8d2b9a11279dcbd4a39ddfff3e6caa24"
+ integrity sha512-c+yPkNOPMFGNisYg9r4qvsMIjVYikJv7ImFOhPIVPt0+AcRUamZ7zkGRLHz7FKB0xrlZ+ddSOJsZv9XAFVXLmA==
+ dependencies:
+ async "^2.6.1"
+ commander "^2.18.0"
+ email-addresses "^3.0.1"
+ filenamify-url "^1.0.0"
+ fs-extra "^8.1.0"
+ globby "^6.1.0"
+
gl-axes3d@^1.5.2:
version "1.5.2"
resolved "https://registry.yarnpkg.com/gl-axes3d/-/gl-axes3d-1.5.2.tgz#27dacb2f246cc5802b1ecddbb2caddf75e0c708a"
@@ -4258,6 +4316,11 @@ graceful-fs@^4.1.11, graceful-fs@^4.1.15, graceful-fs@^4.1.2:
resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.0.tgz#8d8fdc73977cb04104721cb53666c1ca64cd328b"
integrity sha512-jpSvDPV4Cq/bgtpndIWbI5hmYxhQGHPC4d4cqBPb4DLniCfhJokdXhwhaDuLBGLQdvvRum/UiX6ECVIPvDXqdg==
+graceful-fs@^4.1.6, graceful-fs@^4.2.0:
+ version "4.2.3"
+ resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.3.tgz#4a12ff1b60376ef09862c2093edd908328be8423"
+ integrity sha512-a30VEBm4PEdx1dRB7MFK7BejejvCvBronbLjht+sHuGYj8PHs7M/5Z+rt5lw551vZ7yfTCj4Vuyy3mSJytDWRQ==
+
grid-index@^1.1.0:
version "1.1.0"
resolved "https://registry.yarnpkg.com/grid-index/-/grid-index-1.1.0.tgz#97f8221edec1026c8377b86446a7c71e79522ea7"
@@ -4540,6 +4603,14 @@ https-browserify@^1.0.0:
resolved "https://registry.yarnpkg.com/https-browserify/-/https-browserify-1.0.0.tgz#ec06c10e0a34c0f2faf199f7fd7fc78fffd03c73"
integrity sha1-7AbBDgo0wPL68Zn3/X/Hj//QPHM=
+humanize-url@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/humanize-url/-/humanize-url-1.0.1.tgz#f4ab99e0d288174ca4e1e50407c55fbae464efff"
+ integrity sha1-9KuZ4NKIF0yk4eUEB8VfuuRk7/8=
+ dependencies:
+ normalize-url "^1.0.0"
+ strip-url-auth "^1.0.0"
+
iconv-lite@0.4.24, iconv-lite@^0.4.4:
version "0.4.24"
resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b"
@@ -4954,7 +5025,7 @@ is-path-inside@^2.1.0:
dependencies:
path-is-inside "^1.0.2"
-is-plain-obj@^1.1.0:
+is-plain-obj@^1.0.0, is-plain-obj@^1.1.0:
version "1.1.0"
resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-1.1.0.tgz#71a50c8429dfca773c92a390a4a03b39fcd51d3e"
integrity sha1-caUMhCnfync8kqOQpKA7OfzVHT4=
@@ -5139,6 +5210,13 @@ json5@^1.0.1:
dependencies:
minimist "^1.2.0"
+jsonfile@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-4.0.0.tgz#8771aae0799b64076b76640fca058f9c10e33ecb"
+ integrity sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=
+ optionalDependencies:
+ graceful-fs "^4.1.6"
+
jsprim@^1.2.2:
version "1.4.1"
resolved "https://registry.yarnpkg.com/jsprim/-/jsprim-1.4.1.tgz#313e66bc1e5cc06e438bc1b7499c2e5c56acb6a2"
@@ -5241,6 +5319,13 @@ line-column@^1.0.2:
isarray "^1.0.0"
isobject "^2.0.0"
+line-height@^0.3.1:
+ version "0.3.1"
+ resolved "https://registry.yarnpkg.com/line-height/-/line-height-0.3.1.tgz#4b1205edde182872a5efa3c8f620b3187a9c54c9"
+ integrity sha1-SxIF7d4YKHKl76PI9iCzGHqcVMk=
+ dependencies:
+ computed-style "~0.1.3"
+
load-json-file@^1.0.0:
version "1.1.0"
resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-1.1.0.tgz#956905708d58b4bab4c2261b04f59f31c99374c0"
@@ -6105,6 +6190,16 @@ normalize-svg-path@~0.1.0:
resolved "https://registry.yarnpkg.com/normalize-svg-path/-/normalize-svg-path-0.1.0.tgz#456360e60ece75fbef7b5d7e160480e7ffd16fe5"
integrity sha1-RWNg5g7Odfvve11+FgSA5//Rb+U=
+normalize-url@^1.0.0:
+ version "1.9.1"
+ resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-1.9.1.tgz#2cc0d66b31ea23036458436e3620d85954c66c3c"
+ integrity sha1-LMDWazHqIwNkWENuNiDYWVTGbDw=
+ dependencies:
+ object-assign "^4.0.1"
+ prepend-http "^1.0.0"
+ query-string "^4.1.0"
+ sort-keys "^1.0.0"
+
normalize.css@^8.0.1:
version "8.0.1"
resolved "https://registry.yarnpkg.com/normalize.css/-/normalize.css-8.0.1.tgz#9b98a208738b9cc2634caacbc42d131c97487bf3"
@@ -6891,6 +6986,11 @@ prelude-ls@~1.1.2:
resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54"
integrity sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=
+prepend-http@^1.0.0:
+ version "1.0.4"
+ resolved "https://registry.yarnpkg.com/prepend-http/-/prepend-http-1.0.4.tgz#d4f4562b0ce3696e41ac52d0e002e57a635dc6dc"
+ integrity sha1-1PRWKwzjaW5BrFLQ4ALlemNdxtw=
+
pretty-error@^2.0.2:
version "2.1.1"
resolved "https://registry.yarnpkg.com/pretty-error/-/pretty-error-2.1.1.tgz#5f4f87c8f91e5ae3f3ba87ab4cf5e03b1a17f1a3"
@@ -6919,7 +7019,7 @@ promise-inflight@^1.0.1:
resolved "https://registry.yarnpkg.com/promise-inflight/-/promise-inflight-1.0.1.tgz#98472870bf228132fcbdd868129bad12c3c029e3"
integrity sha1-mEcocL8igTL8vdhoEputEsPAKeM=
-prop-types@^15.6.1, prop-types@^15.6.2, prop-types@^15.7.2:
+prop-types@^15.5.6, prop-types@^15.6.1, prop-types@^15.6.2, prop-types@^15.7.2:
version "15.7.2"
resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.7.2.tgz#52c41e75b8c87e72b9d9360e0206b99dcbffa6c5"
integrity sha512-8QQikdH7//R2vurIJSutZ1smHYTcLpRWEOlHnzcWHmBYrOGUysKwSsrC89BCiFj3CbrfJ/nXFdJepOVrY1GCHQ==
@@ -7042,6 +7142,14 @@ quat-slerp@^1.0.0:
dependencies:
gl-quat "^1.0.0"
+query-string@^4.1.0:
+ version "4.3.4"
+ resolved "https://registry.yarnpkg.com/query-string/-/query-string-4.3.4.tgz#bbb693b9ca915c232515b228b1a02b609043dbeb"
+ integrity sha1-u7aTucqRXCMlFbIosaArYJBD2+s=
+ dependencies:
+ object-assign "^4.1.0"
+ strict-uri-encode "^1.0.0"
+
querystring-es3@^0.2.0:
version "0.2.1"
resolved "https://registry.yarnpkg.com/querystring-es3/-/querystring-es3-0.2.1.tgz#9ec61f79049875707d69414596fd907a4d711e73"
@@ -7132,6 +7240,15 @@ rc@^1.2.7:
minimist "^1.2.0"
strip-json-comments "~2.0.1"
+react-autosize-textarea@^7.0.0:
+ version "7.0.0"
+ resolved "https://registry.yarnpkg.com/react-autosize-textarea/-/react-autosize-textarea-7.0.0.tgz#4f633e4238de7ba73c1da8fdc307353c50f1c5ab"
+ integrity sha512-rGQLpGUaELvzy3NKzp0kkcppaUtZTptsyR0PGuLotaJDjwRbT0DpD000yCzETpXseJQ/eMsyVGDDHXjXP93u8w==
+ dependencies:
+ autosize "^4.0.2"
+ line-height "^0.3.1"
+ prop-types "^15.5.6"
+
react-dom@^16.12.0:
version "16.12.0"
resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-16.12.0.tgz#0da4b714b8d13c2038c9396b54a92baea633fe11"
@@ -8143,6 +8260,13 @@ sockjs@0.3.19:
faye-websocket "^0.10.0"
uuid "^3.0.1"
+sort-keys@^1.0.0:
+ version "1.1.2"
+ resolved "https://registry.yarnpkg.com/sort-keys/-/sort-keys-1.1.2.tgz#441b6d4d346798f1b4e49e8920adfba0e543f9ad"
+ integrity sha1-RBttTTRnmPG05J6JIK37oOVD+a0=
+ dependencies:
+ is-plain-obj "^1.0.0"
+
source-list-map@^2.0.0:
version "2.0.1"
resolved "https://registry.yarnpkg.com/source-list-map/-/source-list-map-2.0.1.tgz#3993bd873bfc48479cca9ea3a547835c7c154b34"
@@ -8410,6 +8534,11 @@ stream-shift@^1.0.0:
resolved "https://registry.yarnpkg.com/stream-shift/-/stream-shift-1.0.0.tgz#d5c752825e5367e786f78e18e445ea223a155952"
integrity sha1-1cdSgl5TZ+eG944Y5EXqIjoVWVI=
+strict-uri-encode@^1.0.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz#279b225df1d582b1f54e65addd4352e18faa0713"
+ integrity sha1-J5siXfHVgrH1TmWt3UNS4Y+qBxM=
+
string-split-by@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/string-split-by/-/string-split-by-1.0.0.tgz#53895fb3397ebc60adab1f1e3a131f5372586812"
@@ -8540,6 +8669,18 @@ strip-json-comments@~2.0.1:
resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a"
integrity sha1-PFMZQukIwml8DsNEhYwobHygpgo=
+strip-outer@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/strip-outer/-/strip-outer-1.0.1.tgz#b2fd2abf6604b9d1e6013057195df836b8a9d631"
+ integrity sha512-k55yxKHwaXnpYGsOzg4Vl8+tDrWylxDEpknGjhTiZB8dFRU5rTo9CAzeycivxV3s+zlTKwrs6WxMxR95n26kwg==
+ dependencies:
+ escape-string-regexp "^1.0.2"
+
+strip-url-auth@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/strip-url-auth/-/strip-url-auth-1.0.1.tgz#22b0fa3a41385b33be3f331551bbb837fa0cd7ae"
+ integrity sha1-IrD6OkE4WzO+PzMVUbu4N/oM164=
+
strongly-connected-components@^1.0.1:
version "1.0.1"
resolved "https://registry.yarnpkg.com/strongly-connected-components/-/strongly-connected-components-1.0.1.tgz#0920e2b4df67c8eaee96c6b6234fe29e873dba99"
@@ -8869,6 +9010,13 @@ trim-newlines@^1.0.0:
resolved "https://registry.yarnpkg.com/trim-newlines/-/trim-newlines-1.0.0.tgz#5887966bb582a4503a41eb524f7d35011815a613"
integrity sha1-WIeWa7WCpFA6QetST301ARgVphM=
+trim-repeated@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/trim-repeated/-/trim-repeated-1.0.0.tgz#e3646a2ea4e891312bf7eace6cfb05380bc01c21"
+ integrity sha1-42RqLqTokTEr9+rObPsFOAvAHCE=
+ dependencies:
+ escape-string-regexp "^1.0.2"
+
"true-case-path@^1.0.2":
version "1.0.3"
resolved "https://registry.yarnpkg.com/true-case-path/-/true-case-path-1.0.3.tgz#f813b5a8c86b40da59606722b144e3225799f47d"
@@ -9118,6 +9266,11 @@ unique-slug@^2.0.0:
dependencies:
imurmurhash "^0.1.4"
+universalify@^0.1.0:
+ version "0.1.2"
+ resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.1.2.tgz#b646f69be3942dabcecc9d6639c80dc105efaa66"
+ integrity sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==
+
unpipe@1.0.0, unpipe@~1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec"