Compare commits
13 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
fdc0b00f6b | ||
|
|
f12ea19369 | ||
|
|
f6a554c897 | ||
|
|
5318b5e4ae | ||
|
|
f55bef23c2 | ||
|
|
78a133505c | ||
|
|
1226a43f89 | ||
|
|
2bc1ce380d | ||
|
|
43e0a13dca | ||
|
|
89b96d53b7 | ||
|
|
9a5d6a083c | ||
|
|
994c9f6248 | ||
|
|
d4202d88e2 |
53
README.md
53
README.md
@@ -2,7 +2,58 @@
|
|||||||
|
|
||||||
[](https://twitter.com/intent/follow?screen_name=hediet_dev)
|
[](https://twitter.com/intent/follow?screen_name=hediet_dev)
|
||||||
|
|
||||||
See the [extension](extension) directory for the extension readme.
|
See [here](./extension/README.md) for the readme of the extension.
|
||||||
You can get the extension in the [marketplace](https://marketplace.visualstudio.com/items?itemName=hediet.debug-visualizer).
|
You can get the extension in the [marketplace](https://marketplace.visualstudio.com/items?itemName=hediet.debug-visualizer).
|
||||||
|
|
||||||

|

|
||||||
|
|
||||||
|
This readme extends the [readme](./extension/README.md) of the extension with implementation details.
|
||||||
|
|
||||||
|
## Build Instructions
|
||||||
|
|
||||||
|
- Clone the repository
|
||||||
|
- Run `yarn` in the repository root
|
||||||
|
- Run `yarn build`
|
||||||
|
|
||||||
|
## Dev Instructions
|
||||||
|
|
||||||
|
This project uses yarn workspaces and consists of the sub-projects _data-extraction_, _extension_ and _webview_.
|
||||||
|
To setup a dev environment, follow these steps:
|
||||||
|
|
||||||
|
- Clone the repository
|
||||||
|
- Run `yarn` in the repository root
|
||||||
|
- Run `yarn build` initially (or `yarn dev` for every sub-project)
|
||||||
|
- Run `yarn dev` for the sub-project (i.e. in its folder) you are working on.
|
||||||
|
|
||||||
|
For the _webview_ project, `yarn dev` will serve the react application on port 8080.
|
||||||
|
Certain query parameters need to be so that the UI can connect to the debug visualizer extension.
|
||||||
|
|
||||||
|
You can use VS Code to launch and debug the extension.
|
||||||
|
Chose the preconfigured `Run Extension (Dev UI)` as debug configuration
|
||||||
|
so that the extension loads the UI from the webpack server.
|
||||||
|
Otherwise, the extension will start a webserver on its own, hosting the `dist` folder of the _webview_ project.
|
||||||
|
|
||||||
|
## Publish Instructions
|
||||||
|
|
||||||
|
- Follow the Build Instructions
|
||||||
|
- `cd extension`
|
||||||
|
- `yarn pub`
|
||||||
|
|
||||||
|
## Architecture
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
### webview
|
||||||
|
|
||||||
|
Provides the UI and is hosted inside a webview in VS Code.
|
||||||
|
|
||||||
|
### extension
|
||||||
|
|
||||||
|
Creates the webview in VS Code, hosts a webserver and a websocket server.
|
||||||
|
The webserver serves the _webview_ project that is loaded by the webview.
|
||||||
|
After the webview is loaded, it connects to the websocket server.
|
||||||
|
The websocket server is used to evaluate expressions and is secured by a random token.
|
||||||
|
|
||||||
|
### data-extraction
|
||||||
|
|
||||||
|
Provides types and a JS runtime for data extraction.
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
{
|
{
|
||||||
"name": "@hediet/debug-visualizer-data-extraction",
|
"name": "@hediet/debug-visualizer-data-extraction",
|
||||||
"description": "A library that helps implementing data extractors for the Debug Visualizer VS Code extension.",
|
"description": "A library that helps implementing data extractors for the Debug Visualizer VS Code extension.",
|
||||||
"version": "0.11.0",
|
"version": "0.12.0",
|
||||||
"main": "dist/index.js",
|
"main": "dist/index.js",
|
||||||
"types": "dist/index.d.ts",
|
"types": "dist/index.d.ts",
|
||||||
"author": {
|
"author": {
|
||||||
@@ -27,9 +27,9 @@
|
|||||||
},
|
},
|
||||||
"dependencies": {},
|
"dependencies": {},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"typescript": "^3.7.5",
|
"typescript": "^3.8.2",
|
||||||
"@types/plotly.js": "^1.44.28",
|
"@types/plotly.js": "1.44.28",
|
||||||
"@types/node": "^13.7.1",
|
"@types/node": "^13.7.4",
|
||||||
"tslint": "^6.0.0",
|
"tslint": "^6.0.0",
|
||||||
"webpack": "^4.41.6",
|
"webpack": "^4.41.6",
|
||||||
"webpack-cli": "^3.3.11",
|
"webpack-cli": "^3.3.11",
|
||||||
|
|||||||
8
demo/.vscode/settings.json
vendored
8
demo/.vscode/settings.json
vendored
@@ -1,4 +1,10 @@
|
|||||||
{
|
{
|
||||||
"debugVisualizer.useChromeKioskMode": false,
|
"debugVisualizer.useChromeKioskMode": false,
|
||||||
"editor.minimap.enabled": false
|
"editor.minimap.enabled": false,
|
||||||
|
"debugVisualizer.debugAdapterConfigurations": {
|
||||||
|
"php": {
|
||||||
|
"context": "watch",
|
||||||
|
"expressionTemplate": "${expr}"
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -52,7 +52,7 @@ namespace Demo
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public ExtractedData Visualize()
|
public string Visualize()
|
||||||
{
|
{
|
||||||
var list = new Node(default(T)!) { Next = this.Head };
|
var list = new Node(default(T)!) { Next = this.Head };
|
||||||
return GraphData.From(new[] { list }, (item, info) =>
|
return GraphData.From(new[] { list }, (item, info) =>
|
||||||
@@ -65,7 +65,7 @@ namespace Demo
|
|||||||
if (item.Next != null)
|
if (item.Next != null)
|
||||||
info.AddEdge(item.Next!, label: item == list ? "head" : "next");
|
info.AddEdge(item.Next!, label: item == list ? "head" : "next");
|
||||||
return info;
|
return info;
|
||||||
});
|
}).ToString();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -3,11 +3,9 @@
|
|||||||
"version": "1.0.0",
|
"version": "1.0.0",
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@hediet/live-debug": "^0.5.2",
|
"@hediet/node-reload": "0.7.3",
|
||||||
"@hediet/node-reload": "0.7.0",
|
"@types/node": "^13.7.4",
|
||||||
"@hediet/std": "^0.4.0",
|
"typescript": "^3.8.2"
|
||||||
"@types/node": "^13.7.1",
|
|
||||||
"typescript": "^3.5.3"
|
|
||||||
},
|
},
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"dev": "tsc --watch"
|
"dev": "tsc --watch"
|
||||||
|
|||||||
36
demo/python/graph.py
Normal file
36
demo/python/graph.py
Normal file
@@ -0,0 +1,36 @@
|
|||||||
|
# Install the python extension for VS Code
|
||||||
|
# (https:#marketplace.visualstudio.com/items?itemName=ms-python.python).
|
||||||
|
|
||||||
|
# The Debug Visualizer has no support for Python data extractors yet,
|
||||||
|
# so to visualize data, your value must be a valid JSON string representing the data.
|
||||||
|
# See readme for supported data schemas.
|
||||||
|
|
||||||
|
from json import dumps
|
||||||
|
from random import randint
|
||||||
|
|
||||||
|
graph = {
|
||||||
|
"kind": {"graph": True},
|
||||||
|
"nodes": [
|
||||||
|
{"id": "1", "label": "1"}
|
||||||
|
],
|
||||||
|
"edges": []
|
||||||
|
}
|
||||||
|
|
||||||
|
for i in range(2,100):
|
||||||
|
# add a node
|
||||||
|
id = str(i)
|
||||||
|
graph["nodes"].append({"id": id, "label": id})
|
||||||
|
# connects the node to a random edge
|
||||||
|
targetId = str(randint(1, i - 1))
|
||||||
|
graph["edges"].append({"from": id, "to": targetId})
|
||||||
|
json_graph = dumps(graph)
|
||||||
|
print("i is " + str(i))
|
||||||
|
# try setting a breakpoint right above
|
||||||
|
# then put json_graph into the visualization console and press enter
|
||||||
|
# when you step through the code each time you hit the breakpoint
|
||||||
|
# the graph should automatically refresh!
|
||||||
|
|
||||||
|
# example of json_graph visualization with 10 nodes:
|
||||||
|
# https://i.imgur.com/RqZuYHH.png
|
||||||
|
|
||||||
|
print("finished")
|
||||||
BIN
docs/exported/main/Main.png
Normal file
BIN
docs/exported/main/Main.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 14 KiB |
14
docs/main.plantuml
Normal file
14
docs/main.plantuml
Normal file
@@ -0,0 +1,14 @@
|
|||||||
|
@startuml Main
|
||||||
|
|
||||||
|
[data-extraction]
|
||||||
|
[webview]
|
||||||
|
[extension]
|
||||||
|
|
||||||
|
[webview] ..> [extension]: "Uses RPC contracts, connects using websockets"
|
||||||
|
[extension] ..> [webview]: "Loads into a Webview in VS Code"
|
||||||
|
|
||||||
|
[extension] ..> [data-extraction]: "Injects Runtime into JavaScript applications"
|
||||||
|
|
||||||
|
[webview] ..> [data-extraction]: "Uses common types"
|
||||||
|
|
||||||
|
@enduml
|
||||||
@@ -1,13 +1,24 @@
|
|||||||
# Change Log
|
# Change Log
|
||||||
|
|
||||||
## 0.9.0
|
## 0.13.0
|
||||||
|
|
||||||
- Initial release
|
- Adds "debugVisualizer.debugAdapterConfigurations" config to customize the expression template.
|
||||||
|
- Code Restructuring
|
||||||
|
|
||||||
## 0.10.0
|
## 0.12.1
|
||||||
|
|
||||||
- Minor refactoring of `@hediet/debug-visualizer-data-extraction`'s API
|
- Tries to parse evaluated strings twice as JSON in case of C++/C# escape sequences.
|
||||||
- Improved documentation.
|
|
||||||
|
## 0.12.0
|
||||||
|
|
||||||
|
- Generic Debug Adapter Support (tested with PHP, Java, C#)
|
||||||
|
- Dark Theme Support
|
||||||
|
- Grid Visualizer
|
||||||
|
- Some Bugfixes
|
||||||
|
|
||||||
|
## 0.11.1
|
||||||
|
|
||||||
|
- Fixes crash on start
|
||||||
|
|
||||||
## 0.11.0
|
## 0.11.0
|
||||||
|
|
||||||
@@ -18,6 +29,11 @@
|
|||||||
- Plotly Data Extractor
|
- Plotly Data Extractor
|
||||||
- Some Bugfixes
|
- Some Bugfixes
|
||||||
|
|
||||||
## 0.11.1
|
## 0.10.0
|
||||||
|
|
||||||
- Fixes crash on start
|
- Minor refactoring of `@hediet/debug-visualizer-data-extraction`'s API
|
||||||
|
- Improved documentation.
|
||||||
|
|
||||||
|
## 0.9.0
|
||||||
|
|
||||||
|
- Initial release
|
||||||
|
|||||||
@@ -239,6 +239,30 @@ Creates Grid visualization data for an array.
|
|||||||
|
|
||||||

|

|
||||||
|
|
||||||
|
## Configuration
|
||||||
|
|
||||||
|
This extension provides these configuration options:
|
||||||
|
|
||||||
|
- `debugVisualizer.debugAdapterConfigurations`
|
||||||
|
|
||||||
|
Allows to set expression templates for specific debug adapter types.
|
||||||
|
Example:
|
||||||
|
|
||||||
|
```json
|
||||||
|
"debugVisualizer.debugAdapterConfigurations": {
|
||||||
|
"lldb": {
|
||||||
|
"expressionTemplate": "script to_json(\"${expr}\")",
|
||||||
|
"context": "repl"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
Configurations here overwrite the built-in support for the corresponding debug adapter type.
|
||||||
|
|
||||||
|
* `debugVisualizer.useChromeKioskMode`
|
||||||
|
|
||||||
|
Specifies whether to pop out Debug Visualization Views with Chrome in Kiosk Mode. Uses the default browser otherwise or if Chrome is not found. Defaults to `true`.
|
||||||
|
|
||||||
# See Also
|
# See Also
|
||||||
|
|
||||||
This extension works very well together with my library [`@hediet/node-reload`](https://github.com/hediet/node-reload) for TypeScript/JavaScript.
|
This extension works very well together with my library [`@hediet/node-reload`](https://github.com/hediet/node-reload) for TypeScript/JavaScript.
|
||||||
|
|||||||
@@ -1,9 +1,10 @@
|
|||||||
{
|
{
|
||||||
"name": "debug-visualizer",
|
"name": "debug-visualizer",
|
||||||
|
"private": true,
|
||||||
"displayName": "Debug Visualizer",
|
"displayName": "Debug Visualizer",
|
||||||
"description": "An extension that visualizes values while debugging.",
|
"description": "An extension that visualizes values while debugging.",
|
||||||
"icon": "docs/logo.png",
|
"icon": "docs/logo.png",
|
||||||
"version": "0.11.1",
|
"version": "0.13.0",
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"engines": {
|
"engines": {
|
||||||
"vscode": "^1.35.0"
|
"vscode": "^1.35.0"
|
||||||
@@ -41,26 +42,47 @@
|
|||||||
"type": "boolean",
|
"type": "boolean",
|
||||||
"default": true,
|
"default": true,
|
||||||
"description": "Pop out Debug Visualization Views with Chrome in Kiosk Mode."
|
"description": "Pop out Debug Visualization Views with Chrome in Kiosk Mode."
|
||||||
|
},
|
||||||
|
"debugVisualizer.debugAdapterConfigurations": {
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": {
|
||||||
|
"type": "object",
|
||||||
|
"properties": {
|
||||||
|
"expressionTemplate": {
|
||||||
|
"type:": "string",
|
||||||
|
"description": "A template for the final expression sent to the debugger for evaluation. Use `${expr}` to refer to the currently visualized expression."
|
||||||
|
},
|
||||||
|
"context": {
|
||||||
|
"type": "string",
|
||||||
|
"enum": [
|
||||||
|
"watch",
|
||||||
|
"repl"
|
||||||
|
],
|
||||||
|
"description": "The context to use for evaluating the expression."
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"pub": "vsce publish --yarn --baseImagesUrl https://github.com/hediet/vscode-debug-visualizer/raw/master/extension --baseContentUrl https://github.com/hediet/vscode-debug-visualizer/raw/master/extension",
|
"pub": "vsce publish --yarn --baseImagesUrl https://github.com/hediet/vscode-debug-visualizer/raw/master/extension --baseContentUrl https://github.com/hediet/vscode-debug-visualizer/raw/master/extension",
|
||||||
|
"package": "vsce package --yarn",
|
||||||
"vscode:prepublish": "yarn build",
|
"vscode:prepublish": "yarn build",
|
||||||
"build": "webpack --mode production",
|
"build": "webpack --mode production",
|
||||||
"dev": "tsc -watch -p ./"
|
"dev": "shx rm -rf dist && tsc -watch -p ./"
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@hediet/std": "^0.6.0",
|
"@hediet/std": "^0.6.0",
|
||||||
"@hediet/typed-json-rpc": "^0.7.7",
|
"@hediet/typed-json-rpc": "^0.7.7",
|
||||||
"@hediet/typed-json-rpc-websocket-server": "^0.7.7",
|
"@hediet/typed-json-rpc-websocket-server": "^0.7.7",
|
||||||
"chrome-launcher": "^0.11.2",
|
"chrome-launcher": "^0.12.0",
|
||||||
"@hediet/node-reload": "^0.7.2",
|
"@hediet/node-reload": "^0.7.3",
|
||||||
"express": "^4.17.1",
|
"express": "^4.17.1",
|
||||||
"open": "^6.4.0",
|
"open": "^7.0.2",
|
||||||
"serve-static": "^1.14.1",
|
"serve-static": "^1.14.1",
|
||||||
"ws": "^7.1.1",
|
"ws": "^7.2.1",
|
||||||
"crypto-random-string": "^3.1.0"
|
"crypto-random-string": "^3.1.0"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
@@ -68,12 +90,13 @@
|
|||||||
"@types/copy-webpack-plugin": "^5.0.0",
|
"@types/copy-webpack-plugin": "^5.0.0",
|
||||||
"@types/express": "^4.17.2",
|
"@types/express": "^4.17.2",
|
||||||
"@types/serve-static": "^1.13.3",
|
"@types/serve-static": "^1.13.3",
|
||||||
"@types/node": "^13.7.1",
|
"@types/node": "^13.7.4",
|
||||||
"@types/vscode": "^1.35.0",
|
"@types/vscode": "1.35.0",
|
||||||
"tslint": "^6.0.0",
|
"tslint": "^6.0.0",
|
||||||
"typescript": "^3.7.5",
|
"typescript": "^3.8.2",
|
||||||
"webpack": "^4.41.6",
|
"webpack": "^4.41.6",
|
||||||
"webpack-cli": "^3.3.11",
|
"webpack-cli": "^3.3.11",
|
||||||
"ts-loader": "^6.2.1"
|
"ts-loader": "^6.2.1",
|
||||||
|
"shx": "^0.3.2"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,28 +1,99 @@
|
|||||||
import { workspace } from "vscode";
|
import { workspace } from "vscode";
|
||||||
import { Disposable } from "@hediet/std/disposable";
|
import { Disposable } from "@hediet/std/disposable";
|
||||||
import { EventEmitter, EventSource } from "@hediet/std/events";
|
import { observable } from "mobx";
|
||||||
|
import { DataExtractorId } from "@hediet/debug-visualizer-data-extraction";
|
||||||
|
|
||||||
export const useChromeKioskModeKey = "debugVisualizer.useChromeKioskMode";
|
const useChromeKioskModeKey = "debugVisualizer.useChromeKioskMode";
|
||||||
|
const debugAdapterConfigsKey = "debugVisualizer.debugAdapterConfigurations";
|
||||||
|
|
||||||
export class Config {
|
export class Config {
|
||||||
private changeEventEmitter = new EventEmitter();
|
|
||||||
public readonly onChange: EventSource = this.changeEventEmitter;
|
|
||||||
public dispose = Disposable.fn();
|
public dispose = Disposable.fn();
|
||||||
|
|
||||||
|
@observable
|
||||||
|
private _useChromeKioskMode!: boolean;
|
||||||
|
|
||||||
|
@observable
|
||||||
|
private _debugAdapterConfigs!: DebugAdapterConfigs;
|
||||||
|
|
||||||
|
public get useChromeKioskMode(): boolean {
|
||||||
|
return this._useChromeKioskMode;
|
||||||
|
}
|
||||||
|
|
||||||
|
public get debugAdapterConfigs(): DebugAdapterConfigs {
|
||||||
|
return this._debugAdapterConfigs;
|
||||||
|
}
|
||||||
|
|
||||||
constructor() {
|
constructor() {
|
||||||
|
this.updateConfig();
|
||||||
this.dispose.track(
|
this.dispose.track(
|
||||||
workspace.onDidChangeConfiguration(() => {
|
workspace.onDidChangeConfiguration(() => {
|
||||||
this.changeEventEmitter.emit();
|
this.updateConfig();
|
||||||
})
|
})
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
public useChromeKioskMode(): boolean {
|
private updateConfig(): void {
|
||||||
const c = workspace.getConfiguration();
|
const c = workspace.getConfiguration();
|
||||||
const b = c.get<boolean>(useChromeKioskModeKey);
|
|
||||||
if (b === undefined) {
|
this._useChromeKioskMode = mapUndefined(
|
||||||
return true;
|
c.get<boolean>(useChromeKioskModeKey),
|
||||||
|
true
|
||||||
|
);
|
||||||
|
|
||||||
|
this._debugAdapterConfigs = mapUndefined(
|
||||||
|
c.get<DebugAdapterConfigs>(debugAdapterConfigsKey),
|
||||||
|
{}
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
public getDebugAdapterConfig(
|
||||||
|
debugAdapterType: string
|
||||||
|
): DebugAdapterConfig | undefined {
|
||||||
|
const c = this.debugAdapterConfigs[debugAdapterType];
|
||||||
|
if (!c) {
|
||||||
|
return undefined;
|
||||||
}
|
}
|
||||||
return b;
|
|
||||||
|
return {
|
||||||
|
context: c.context || "watch",
|
||||||
|
getFinalExpression: ({ expression, preferredExtractorId }) =>
|
||||||
|
evaluateTemplate(c.expressionTemplate || "${expr}", {
|
||||||
|
expr: expression,
|
||||||
|
preferredDataExtractorId: preferredExtractorId || "",
|
||||||
|
}),
|
||||||
|
};
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function mapUndefined<T>(val: T | undefined, defaultVal: T) {
|
||||||
|
if (val === undefined) {
|
||||||
|
return defaultVal;
|
||||||
|
}
|
||||||
|
return val;
|
||||||
|
}
|
||||||
|
|
||||||
|
type DebugAdapterConfigs = {
|
||||||
|
[debugAdapter: string]: {
|
||||||
|
context?: "watch" | "repl";
|
||||||
|
expressionTemplate?: "string";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
export interface DebugAdapterConfig {
|
||||||
|
context: "watch" | "repl";
|
||||||
|
getFinalExpression(vars: {
|
||||||
|
expression: string;
|
||||||
|
preferredExtractorId: DataExtractorId | undefined;
|
||||||
|
}): string;
|
||||||
|
}
|
||||||
|
|
||||||
|
function evaluateTemplate(
|
||||||
|
template: string,
|
||||||
|
data: Record<string, string>
|
||||||
|
): string {
|
||||||
|
let result = template;
|
||||||
|
for (const [key, val] of Object.entries(data)) {
|
||||||
|
result = result.split(`\${${key}}`).join(val);
|
||||||
|
}
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
import { Disposable } from "@hediet/std/disposable";
|
import { Disposable } from "@hediet/std/disposable";
|
||||||
import { debugVisualizerUIContract } from "@hediet/debug-visualizer-vscode-shared";
|
import { debugVisualizerUIContract } from "./contract";
|
||||||
import { ConsoleRpcLogger, RequestHandlingError } from "@hediet/typed-json-rpc";
|
import { ConsoleRpcLogger, RequestHandlingError } from "@hediet/typed-json-rpc";
|
||||||
import { EvaluationWatcher, DataSource } from "./DataSource/DataSource";
|
import { EvaluationWatcher, DataSource } from "./DataSource/DataSource";
|
||||||
import { WebSocketStream } from "@hediet/typed-json-rpc-websocket";
|
import { WebSocketStream } from "@hediet/typed-json-rpc-websocket";
|
||||||
@@ -76,7 +76,7 @@ export class ConnectionHandler {
|
|||||||
});
|
});
|
||||||
|
|
||||||
let opened = false;
|
let opened = false;
|
||||||
if (config.useChromeKioskMode()) {
|
if (config.useChromeKioskMode) {
|
||||||
opened = await launchChrome(url);
|
opened = await launchChrome(url);
|
||||||
}
|
}
|
||||||
if (!opened) {
|
if (!opened) {
|
||||||
|
|||||||
@@ -0,0 +1,49 @@
|
|||||||
|
import { DataExtractorId } from "@hediet/debug-visualizer-data-extraction";
|
||||||
|
import { VsCodeDebugSession } from "../../VsCodeDebugger";
|
||||||
|
import {
|
||||||
|
DataExtractionProviderFactory,
|
||||||
|
DataExtractionProvider,
|
||||||
|
} from "./DataExtractionProvider";
|
||||||
|
import { Config, DebugAdapterConfig } from "../../Config";
|
||||||
|
import { GenericDataExtractionProvider } from "./GenericDataExtractionProviderFactory";
|
||||||
|
|
||||||
|
export class ConfiguredDataExtractionProviderFactory
|
||||||
|
implements DataExtractionProviderFactory {
|
||||||
|
constructor(private readonly config: Config) {}
|
||||||
|
|
||||||
|
createDataExtractionProvider(
|
||||||
|
session: VsCodeDebugSession
|
||||||
|
): DataExtractionProvider | undefined {
|
||||||
|
const config = this.config.getDebugAdapterConfig(session.session.type);
|
||||||
|
if (!config) {
|
||||||
|
return undefined;
|
||||||
|
}
|
||||||
|
return new ConfiguredDataExtractionProvider(session, config);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
class ConfiguredDataExtractionProvider extends GenericDataExtractionProvider {
|
||||||
|
constructor(
|
||||||
|
session: VsCodeDebugSession,
|
||||||
|
private readonly config: DebugAdapterConfig
|
||||||
|
) {
|
||||||
|
super(session);
|
||||||
|
}
|
||||||
|
|
||||||
|
protected getContext() {
|
||||||
|
return this.config.context;
|
||||||
|
}
|
||||||
|
|
||||||
|
protected getFinalExpression({
|
||||||
|
expression,
|
||||||
|
preferredExtractorId,
|
||||||
|
}: {
|
||||||
|
expression: string;
|
||||||
|
preferredExtractorId: DataExtractorId | undefined;
|
||||||
|
}) {
|
||||||
|
return this.config.getFinalExpression({
|
||||||
|
expression,
|
||||||
|
preferredExtractorId,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1,4 +1,7 @@
|
|||||||
import { DataExtractionResult } from "@hediet/debug-visualizer-data-extraction";
|
import {
|
||||||
|
DataExtractionResult,
|
||||||
|
DataExtractorId,
|
||||||
|
} from "@hediet/debug-visualizer-data-extraction";
|
||||||
import { VsCodeDebugSession } from "../../VsCodeDebugger";
|
import { VsCodeDebugSession } from "../../VsCodeDebugger";
|
||||||
|
|
||||||
export interface DataExtractionProviderFactory {
|
export interface DataExtractionProviderFactory {
|
||||||
@@ -18,6 +21,6 @@ export interface DataExtractionProvider {
|
|||||||
|
|
||||||
export interface DataExtractionProviderArgs {
|
export interface DataExtractionProviderArgs {
|
||||||
expression: string;
|
expression: string;
|
||||||
preferredExtractor: string | undefined;
|
preferredExtractorId: DataExtractorId | undefined;
|
||||||
frameId: number | undefined;
|
frameId: number | undefined;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,8 +1,6 @@
|
|||||||
import {
|
import {
|
||||||
DataResult,
|
|
||||||
DataExtractionResult,
|
DataExtractionResult,
|
||||||
ExtractedData,
|
DataExtractorId,
|
||||||
isExtractedData,
|
|
||||||
} from "@hediet/debug-visualizer-data-extraction";
|
} from "@hediet/debug-visualizer-data-extraction";
|
||||||
import { VsCodeDebugSession } from "../../VsCodeDebugger";
|
import { VsCodeDebugSession } from "../../VsCodeDebugger";
|
||||||
import {
|
import {
|
||||||
@@ -10,6 +8,7 @@ import {
|
|||||||
DataExtractionProvider,
|
DataExtractionProvider,
|
||||||
DataExtractionProviderArgs,
|
DataExtractionProviderArgs,
|
||||||
} from "./DataExtractionProvider";
|
} from "./DataExtractionProvider";
|
||||||
|
import { parseEvaluationResultFromGenericDebugAdapter } from "./parseEvaluationResultFromGenericDebugAdapter";
|
||||||
|
|
||||||
export class GenericDataExtractionProviderFactory
|
export class GenericDataExtractionProviderFactory
|
||||||
implements DataExtractionProviderFactory {
|
implements DataExtractionProviderFactory {
|
||||||
@@ -20,47 +19,46 @@ export class GenericDataExtractionProviderFactory
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
class GenericDataExtractionProvider implements DataExtractionProvider {
|
export class GenericDataExtractionProvider implements DataExtractionProvider {
|
||||||
constructor(private readonly session: VsCodeDebugSession) {}
|
constructor(private readonly session: VsCodeDebugSession) {}
|
||||||
|
|
||||||
public async evaluate({
|
public async evaluate({
|
||||||
expression,
|
expression,
|
||||||
preferredExtractor,
|
preferredExtractorId,
|
||||||
frameId,
|
frameId,
|
||||||
}: DataExtractionProviderArgs): Promise<
|
}: DataExtractionProviderArgs): Promise<
|
||||||
| { kind: "data"; result: DataExtractionResult }
|
| { kind: "data"; result: DataExtractionResult }
|
||||||
| { kind: "error"; message: string }
|
| { kind: "error"; message: string }
|
||||||
> {
|
> {
|
||||||
|
const finalExpression = this.getFinalExpression({
|
||||||
|
expression,
|
||||||
|
preferredExtractorId,
|
||||||
|
});
|
||||||
|
let reply;
|
||||||
try {
|
try {
|
||||||
const reply = await this.session.evaluate({
|
reply = await this.session.evaluate({
|
||||||
expression,
|
expression: finalExpression,
|
||||||
frameId,
|
frameId,
|
||||||
|
context: this.getContext(),
|
||||||
});
|
});
|
||||||
const resultStr = reply.result;
|
|
||||||
const jsonData = resultStr.substr(1, resultStr.length - 2);
|
|
||||||
const result = JSON.parse(jsonData) as ExtractedData;
|
|
||||||
|
|
||||||
if (!isExtractedData(result)) {
|
|
||||||
throw new Error("Invalid Data");
|
|
||||||
}
|
|
||||||
|
|
||||||
return {
|
|
||||||
kind: "data",
|
|
||||||
result: {
|
|
||||||
availableExtractors: [],
|
|
||||||
usedExtractor: {
|
|
||||||
id: "generic" as any,
|
|
||||||
name: "Generic",
|
|
||||||
priority: 1,
|
|
||||||
},
|
|
||||||
data: result,
|
|
||||||
},
|
|
||||||
};
|
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
return {
|
return {
|
||||||
kind: "error",
|
kind: "error",
|
||||||
message: error.message,
|
message: error.message,
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
return parseEvaluationResultFromGenericDebugAdapter(reply.result);
|
||||||
|
}
|
||||||
|
|
||||||
|
protected getFinalExpression(args: {
|
||||||
|
expression: string;
|
||||||
|
preferredExtractorId: DataExtractorId | undefined;
|
||||||
|
}): string {
|
||||||
|
return args.expression;
|
||||||
|
}
|
||||||
|
|
||||||
|
protected getContext(): "watch" | "repl" {
|
||||||
|
return "watch";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -35,7 +35,7 @@ class JsDataEvaluator implements DataExtractionProvider {
|
|||||||
|
|
||||||
public async evaluate({
|
public async evaluate({
|
||||||
expression,
|
expression,
|
||||||
preferredExtractor,
|
preferredExtractorId,
|
||||||
frameId,
|
frameId,
|
||||||
}: DataExtractionProviderArgs): Promise<
|
}: DataExtractionProviderArgs): Promise<
|
||||||
| { kind: "data"; result: DataExtractionResult }
|
| { kind: "data"; result: DataExtractionResult }
|
||||||
@@ -43,8 +43,8 @@ class JsDataEvaluator implements DataExtractionProvider {
|
|||||||
> {
|
> {
|
||||||
while (true) {
|
while (true) {
|
||||||
try {
|
try {
|
||||||
const preferredExtractorExpr = preferredExtractor
|
const preferredExtractorExpr = preferredExtractorId
|
||||||
? `"${preferredExtractor}"`
|
? `"${preferredExtractorId}"`
|
||||||
: "undefined";
|
: "undefined";
|
||||||
|
|
||||||
const body = `${getExpressionForDataExtractorApi()}.getData(
|
const body = `${getExpressionForDataExtractorApi()}.getData(
|
||||||
|
|||||||
@@ -1,12 +1,6 @@
|
|||||||
export * from "./DataExtractionProvider";
|
export * from "./DataExtractionProvider";
|
||||||
|
|
||||||
import { ComposedDataExtractionProviderFactory } from "./ComposedDataExtractionProviderFactory";
|
export { ComposedDataExtractionProviderFactory } from "./ComposedDataExtractionProviderFactory";
|
||||||
import { JsDataExtractionProviderFactory } from "./JsDataExtractionProviderFactory";
|
export { JsDataExtractionProviderFactory } from "./JsDataExtractionProviderFactory";
|
||||||
import { GenericDataExtractionProviderFactory } from "./GenericDataExtractionProviderFactory";
|
export { GenericDataExtractionProviderFactory } from "./GenericDataExtractionProviderFactory";
|
||||||
|
export { ConfiguredDataExtractionProviderFactory } from "./ConfiguredDataExtractionProviderFactory";
|
||||||
export const defaultDataExtractionProviderFactory = new ComposedDataExtractionProviderFactory(
|
|
||||||
[
|
|
||||||
new JsDataExtractionProviderFactory(),
|
|
||||||
new GenericDataExtractionProviderFactory(),
|
|
||||||
]
|
|
||||||
);
|
|
||||||
|
|||||||
@@ -0,0 +1,76 @@
|
|||||||
|
import {
|
||||||
|
DataExtractionResult,
|
||||||
|
isExtractedData,
|
||||||
|
} from "@hediet/debug-visualizer-data-extraction";
|
||||||
|
|
||||||
|
export function parseEvaluationResultFromGenericDebugAdapter(
|
||||||
|
resultText: string
|
||||||
|
):
|
||||||
|
| { kind: "data"; result: DataExtractionResult }
|
||||||
|
| { kind: "error"; message: string } {
|
||||||
|
const jsonData = resultText.trim();
|
||||||
|
|
||||||
|
let resultObj;
|
||||||
|
try {
|
||||||
|
try {
|
||||||
|
let jsonData2;
|
||||||
|
// Remove optionally enclosing characters.
|
||||||
|
if (
|
||||||
|
isEnclosedWith(jsonData, '"') ||
|
||||||
|
isEnclosedWith(jsonData, "'")
|
||||||
|
) {
|
||||||
|
// In case of JavaScript: `"{ "kind": { ... }, "text": "some\ntext" }"`
|
||||||
|
jsonData2 = jsonData.substr(1, jsonData.length - 2);
|
||||||
|
} else {
|
||||||
|
// Just in case no quoting is done.
|
||||||
|
jsonData2 = jsonData;
|
||||||
|
}
|
||||||
|
resultObj = parseJson(jsonData2);
|
||||||
|
} catch (e) {
|
||||||
|
// in case of C++: `"{ \"kind\": { ... }, \"text\": \"some\\ntext\" }"`
|
||||||
|
const str = parseJson(jsonData);
|
||||||
|
// str is now `{ "kind": { ... }, "text": "some\ntext" }"`
|
||||||
|
resultObj = parseJson(str);
|
||||||
|
// result is now { kind: { ... }, text: "some\ntext" }
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!isExtractedData(resultObj)) {
|
||||||
|
return {
|
||||||
|
kind: "error",
|
||||||
|
message: "Data does not match ExtractedData interface.",
|
||||||
|
};
|
||||||
|
}
|
||||||
|
} catch (e) {
|
||||||
|
return {
|
||||||
|
kind: "error",
|
||||||
|
message: e.message,
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
return {
|
||||||
|
kind: "data",
|
||||||
|
result: {
|
||||||
|
availableExtractors: [],
|
||||||
|
usedExtractor: {
|
||||||
|
id: "generic" as any,
|
||||||
|
name: "Generic",
|
||||||
|
priority: 1,
|
||||||
|
},
|
||||||
|
data: resultObj,
|
||||||
|
},
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
function isEnclosedWith(str: string, char: string): boolean {
|
||||||
|
return str.startsWith(char) && str.endsWith(char);
|
||||||
|
}
|
||||||
|
|
||||||
|
function parseJson(str: string) {
|
||||||
|
try {
|
||||||
|
return JSON.parse(str);
|
||||||
|
} catch (error) {
|
||||||
|
throw new Error(
|
||||||
|
`Could not parse \`${str}\` as JSON.\n${error.message}`
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1,8 +1,5 @@
|
|||||||
import { DataExtractorId } from "@hediet/debug-visualizer-data-extraction";
|
import { DataExtractorId } from "@hediet/debug-visualizer-data-extraction";
|
||||||
import {
|
import { DataExtractionState, CompletionItem } from "../contract";
|
||||||
DataExtractionState,
|
|
||||||
CompletionItem,
|
|
||||||
} from "@hediet/debug-visualizer-vscode-shared";
|
|
||||||
|
|
||||||
export interface DataSource {
|
export interface DataSource {
|
||||||
createEvaluationWatcher(
|
createEvaluationWatcher(
|
||||||
|
|||||||
@@ -6,10 +6,7 @@ import {
|
|||||||
import { observable, autorun, action } from "mobx";
|
import { observable, autorun, action } from "mobx";
|
||||||
import { Disposable } from "@hediet/std/disposable";
|
import { Disposable } from "@hediet/std/disposable";
|
||||||
import { DataExtractorId } from "@hediet/debug-visualizer-data-extraction";
|
import { DataExtractorId } from "@hediet/debug-visualizer-data-extraction";
|
||||||
import {
|
import { DataExtractionState, CompletionItem } from "../contract";
|
||||||
DataExtractionState,
|
|
||||||
CompletionItem,
|
|
||||||
} from "@hediet/debug-visualizer-vscode-shared";
|
|
||||||
import { hotClass } from "@hediet/node-reload";
|
import { hotClass } from "@hediet/node-reload";
|
||||||
import { VsCodeDebuggerView } from "../VsCodeDebugger";
|
import { VsCodeDebuggerView } from "../VsCodeDebugger";
|
||||||
import { DataExtractionProviderFactory } from "./DataExtractionProvider/DataExtractionProvider";
|
import { DataExtractionProviderFactory } from "./DataExtractionProvider/DataExtractionProvider";
|
||||||
@@ -76,7 +73,7 @@ export class DataSourceImpl implements DataSource {
|
|||||||
const result = await extractionProvider.evaluate({
|
const result = await extractionProvider.evaluate({
|
||||||
expression: w.expression,
|
expression: w.expression,
|
||||||
frameId,
|
frameId,
|
||||||
preferredExtractor: w.preferredDataExtractor,
|
preferredExtractorId: w.preferredDataExtractor,
|
||||||
});
|
});
|
||||||
|
|
||||||
w._state = result;
|
w._state = result;
|
||||||
|
|||||||
@@ -1,17 +0,0 @@
|
|||||||
import { Disposable } from "@hediet/std/disposable";
|
|
||||||
import { VsCodeDebugger, VsCodeDebuggerView } from "../VsCodeDebugger";
|
|
||||||
import { DataSourceImpl } from "./DataSourceImpl";
|
|
||||||
import { defaultDataExtractionProviderFactory } from "./DataExtractionProvider";
|
|
||||||
|
|
||||||
export class Sources {
|
|
||||||
public readonly dispose = Disposable.fn();
|
|
||||||
private readonly debugger = this.dispose.track(new VsCodeDebugger());
|
|
||||||
private readonly debuggerView = this.dispose.track(
|
|
||||||
new VsCodeDebuggerView(this.debugger)
|
|
||||||
);
|
|
||||||
|
|
||||||
public readonly dataSource = new DataSourceImpl(
|
|
||||||
this.debuggerView,
|
|
||||||
defaultDataExtractionProviderFactory
|
|
||||||
);
|
|
||||||
}
|
|
||||||
@@ -1 +1 @@
|
|||||||
export * from "./Sources";
|
export * from "./DataSourceImpl";
|
||||||
|
|||||||
@@ -1,31 +1,37 @@
|
|||||||
import { WebSocketStream } from "@hediet/typed-json-rpc-websocket";
|
import { WebSocketStream } from "@hediet/typed-json-rpc-websocket";
|
||||||
import { AddressInfo } from "net";
|
import { AddressInfo } from "net";
|
||||||
import WebSocket = require("ws");
|
import WebSocket = require("ws");
|
||||||
import { join } from "path";
|
|
||||||
import { ConnectionHandler } from "./ConnectionHandler";
|
import { ConnectionHandler } from "./ConnectionHandler";
|
||||||
import { Sources } from "./DataSource";
|
|
||||||
import * as express from "express";
|
import * as express from "express";
|
||||||
import * as http from "http";
|
import * as http from "http";
|
||||||
import * as serveStatic from "serve-static";
|
import * as serveStatic from "serve-static";
|
||||||
import { Config } from "./Config";
|
import { Config } from "./Config";
|
||||||
import cryptoRandomString = require("crypto-random-string");
|
import cryptoRandomString = require("crypto-random-string");
|
||||||
|
import { distPath } from "debug-visualizer-webview";
|
||||||
|
import { DataSource } from "./DataSource/DataSource";
|
||||||
|
|
||||||
export class Server {
|
export class Server {
|
||||||
private server: http.Server;
|
private server: http.Server;
|
||||||
public readonly secret = cryptoRandomString({ length: 20 });
|
public readonly secret = cryptoRandomString({ length: 20 });
|
||||||
|
|
||||||
constructor(sources: Sources, config: Config) {
|
constructor(dataSource: DataSource, config: Config) {
|
||||||
const app = express();
|
const app = express();
|
||||||
const distPath = join(__dirname, "../ui/dist");
|
|
||||||
app.use(serveStatic(distPath));
|
app.use(serveStatic(distPath));
|
||||||
|
|
||||||
this.server = app.listen();
|
this.server = app.listen();
|
||||||
|
|
||||||
|
console.log(
|
||||||
|
`Serving "${distPath}" on port ${
|
||||||
|
(this.server.address() as AddressInfo).port
|
||||||
|
}`
|
||||||
|
);
|
||||||
|
|
||||||
const wss = new WebSocket.Server({ server: this.server });
|
const wss = new WebSocket.Server({ server: this.server });
|
||||||
wss.on("connection", ws => {
|
wss.on("connection", ws => {
|
||||||
const stream = new WebSocketStream(ws);
|
const stream = new WebSocketStream(ws);
|
||||||
new ConnectionHandler(
|
new ConnectionHandler(
|
||||||
sources.dataSource,
|
dataSource,
|
||||||
stream,
|
stream,
|
||||||
this,
|
this,
|
||||||
config,
|
config,
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
import { Disposable } from "@hediet/std/disposable";
|
import { Disposable } from "@hediet/std/disposable";
|
||||||
import { debug, DebugSession } from "vscode";
|
import { debug, DebugSession } from "vscode";
|
||||||
import { EventEmitter } from "@hediet/std/events";
|
import { EventEmitter } from "@hediet/std/events";
|
||||||
import { CompletionItem } from "@hediet/debug-visualizer-vscode-shared";
|
import { CompletionItem } from "./contract";
|
||||||
import { observable, runInAction } from "mobx";
|
import { observable, runInAction } from "mobx";
|
||||||
|
|
||||||
export class VsCodeDebugger {
|
export class VsCodeDebugger {
|
||||||
@@ -149,6 +149,9 @@ export class VsCodeDebugSession {
|
|||||||
frameId: args.frameId,
|
frameId: args.frameId,
|
||||||
column: args.column,
|
column: args.column,
|
||||||
});
|
});
|
||||||
|
if (!reply) {
|
||||||
|
return [];
|
||||||
|
}
|
||||||
return reply.targets;
|
return reply.targets;
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
console.error(error);
|
console.error(error);
|
||||||
@@ -159,11 +162,12 @@ export class VsCodeDebugSession {
|
|||||||
public async evaluate(args: {
|
public async evaluate(args: {
|
||||||
expression: string;
|
expression: string;
|
||||||
frameId: number | undefined;
|
frameId: number | undefined;
|
||||||
|
context?: "watch" | "repl";
|
||||||
}): Promise<{ result: string }> {
|
}): Promise<{ result: string }> {
|
||||||
const reply = await this.session.customRequest("evaluate", {
|
const reply = await this.session.customRequest("evaluate", {
|
||||||
expression: args.expression,
|
expression: args.expression,
|
||||||
frameId: args.frameId,
|
frameId: args.frameId,
|
||||||
context: "watch",
|
context: args.context || "watch",
|
||||||
});
|
});
|
||||||
return { result: reply.result };
|
return { result: reply.result };
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -15,14 +15,35 @@ registerUpdateReconciler(module);
|
|||||||
import { WebViews } from "./WebViews";
|
import { WebViews } from "./WebViews";
|
||||||
import { Server } from "./Server";
|
import { Server } from "./Server";
|
||||||
import { Config } from "./Config";
|
import { Config } from "./Config";
|
||||||
import { Sources } from "./DataSource";
|
import { VsCodeDebugger, VsCodeDebuggerView } from "./VsCodeDebugger";
|
||||||
|
import { DataSourceImpl } from "./DataSource";
|
||||||
|
import {
|
||||||
|
ComposedDataExtractionProviderFactory,
|
||||||
|
JsDataExtractionProviderFactory,
|
||||||
|
GenericDataExtractionProviderFactory,
|
||||||
|
ConfiguredDataExtractionProviderFactory,
|
||||||
|
} from "./DataSource/DataExtractionProvider";
|
||||||
|
|
||||||
export class Extension {
|
export class Extension {
|
||||||
public dispose = Disposable.fn();
|
public readonly dispose = Disposable.fn();
|
||||||
|
|
||||||
private readonly config = new Config();
|
private readonly config = new Config();
|
||||||
private readonly sources = this.dispose.track(new Sources());
|
|
||||||
private readonly server = new Server(this.sources, this.config);
|
private readonly debugger = this.dispose.track(new VsCodeDebugger());
|
||||||
|
private readonly debuggerView = this.dispose.track(
|
||||||
|
new VsCodeDebuggerView(this.debugger)
|
||||||
|
);
|
||||||
|
|
||||||
|
public readonly dataSource = new DataSourceImpl(
|
||||||
|
this.debuggerView,
|
||||||
|
new ComposedDataExtractionProviderFactory([
|
||||||
|
new ConfiguredDataExtractionProviderFactory(this.config),
|
||||||
|
new JsDataExtractionProviderFactory(),
|
||||||
|
new GenericDataExtractionProviderFactory(),
|
||||||
|
])
|
||||||
|
);
|
||||||
|
|
||||||
|
private readonly server = new Server(this.dataSource, this.config);
|
||||||
private readonly views = this.dispose.track(new WebViews(this.server));
|
private readonly views = this.dispose.track(new WebViews(this.server));
|
||||||
|
|
||||||
constructor() {
|
constructor() {
|
||||||
|
|||||||
4
extension/src/types.d.ts
vendored
4
extension/src/types.d.ts
vendored
@@ -4,3 +4,7 @@ declare namespace NodeJS {
|
|||||||
USE_DEV_UI?: "true";
|
USE_DEV_UI?: "true";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
declare module "debug-visualizer-webview" {
|
||||||
|
export const distPath: string;
|
||||||
|
}
|
||||||
|
|||||||
@@ -2,6 +2,7 @@ import * as webpack from "webpack";
|
|||||||
import path = require("path");
|
import path = require("path");
|
||||||
import { CleanWebpackPlugin } from "clean-webpack-plugin";
|
import { CleanWebpackPlugin } from "clean-webpack-plugin";
|
||||||
import CopyPlugin = require("copy-webpack-plugin");
|
import CopyPlugin = require("copy-webpack-plugin");
|
||||||
|
import { readFileSync } from "fs";
|
||||||
|
|
||||||
const r = (file: string) => path.resolve(__dirname, file);
|
const r = (file: string) => path.resolve(__dirname, file);
|
||||||
|
|
||||||
@@ -19,6 +20,7 @@ module.exports = {
|
|||||||
vscode: "commonjs vscode",
|
vscode: "commonjs vscode",
|
||||||
"@hediet/debug-visualizer-data-extraction":
|
"@hediet/debug-visualizer-data-extraction":
|
||||||
"@hediet/debug-visualizer-data-extraction",
|
"@hediet/debug-visualizer-data-extraction",
|
||||||
|
"debug-visualizer-webview": "debug-visualizer-webview",
|
||||||
},
|
},
|
||||||
resolve: {
|
resolve: {
|
||||||
extensions: [".ts", ".js"],
|
extensions: [".ts", ".js"],
|
||||||
@@ -41,14 +43,22 @@ module.exports = {
|
|||||||
},
|
},
|
||||||
plugins: [
|
plugins: [
|
||||||
new CleanWebpackPlugin(),
|
new CleanWebpackPlugin(),
|
||||||
new CopyPlugin([
|
includeDependency(r("../data-extraction/")),
|
||||||
{
|
includeDependency(r("../webview/")),
|
||||||
from: r("../data-extraction/"),
|
|
||||||
to: r(
|
|
||||||
"./dist/node_modules/@hediet/debug-visualizer-data-extraction/"
|
|
||||||
),
|
|
||||||
ignore: ["**/node_modules/**/*"],
|
|
||||||
},
|
|
||||||
]),
|
|
||||||
],
|
],
|
||||||
} as webpack.Configuration;
|
} as webpack.Configuration;
|
||||||
|
|
||||||
|
function includeDependency(location: string) {
|
||||||
|
const content = readFileSync(path.join(location, "package.json"), {
|
||||||
|
encoding: "utf8",
|
||||||
|
});
|
||||||
|
const pkgName = JSON.parse(content).name;
|
||||||
|
|
||||||
|
return new CopyPlugin([
|
||||||
|
{
|
||||||
|
from: location,
|
||||||
|
to: r(`./dist/node_modules/${pkgName}`),
|
||||||
|
ignore: ["**/node_modules/**/*"],
|
||||||
|
},
|
||||||
|
]);
|
||||||
|
}
|
||||||
|
|||||||
11
package.json
11
package.json
@@ -1,9 +1,14 @@
|
|||||||
{
|
{
|
||||||
"private": true,
|
"private": true,
|
||||||
"workspaces": [
|
"workspaces": [
|
||||||
"./shared",
|
|
||||||
"./data-extraction",
|
"./data-extraction",
|
||||||
"./extension",
|
"./extension",
|
||||||
"./extension/ui"
|
"./webview"
|
||||||
]
|
],
|
||||||
|
"scripts": {
|
||||||
|
"build": "yarn build-data-extraction && yarn build-extension && yarn build-ui",
|
||||||
|
"build-data-extraction": "yarn workspace @hediet/debug-visualizer-data-extraction build",
|
||||||
|
"build-extension": "yarn workspace debug-visualizer build",
|
||||||
|
"build-ui": "yarn workspace debug-visualizer-webview build"
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,23 +0,0 @@
|
|||||||
{
|
|
||||||
"name": "@hediet/debug-visualizer-vscode-shared",
|
|
||||||
"private": true,
|
|
||||||
"version": "1.0.0",
|
|
||||||
"main": "dist/index.js",
|
|
||||||
"types": "dist/index.d.ts",
|
|
||||||
"author": {
|
|
||||||
"name": "Henning Dieterichs",
|
|
||||||
"email": "henning.dieterichs@live.de"
|
|
||||||
},
|
|
||||||
"license": "MIT",
|
|
||||||
"files": [
|
|
||||||
"dist",
|
|
||||||
"src"
|
|
||||||
],
|
|
||||||
"scripts": {
|
|
||||||
"dev": "tsc --watch"
|
|
||||||
},
|
|
||||||
"dependencies": {
|
|
||||||
"@hediet/std": "^0.6.0",
|
|
||||||
"@hediet/typed-json-rpc": "^0.7.7"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1 +0,0 @@
|
|||||||
export * from "./contract";
|
|
||||||
@@ -1,16 +0,0 @@
|
|||||||
{
|
|
||||||
"compilerOptions": {
|
|
||||||
"target": "esnext",
|
|
||||||
"module": "commonjs",
|
|
||||||
"strict": true,
|
|
||||||
"outDir": "dist",
|
|
||||||
"skipLibCheck": true,
|
|
||||||
"rootDir": "./src",
|
|
||||||
"resolveJsonModule": true,
|
|
||||||
"declaration": true,
|
|
||||||
"declarationMap": true,
|
|
||||||
"newLine": "LF",
|
|
||||||
"sourceMap": true
|
|
||||||
},
|
|
||||||
"include": ["./src/**/*"]
|
|
||||||
}
|
|
||||||
5
webview/index.js
Normal file
5
webview/index.js
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
// 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");
|
||||||
@@ -1,18 +1,19 @@
|
|||||||
{
|
{
|
||||||
"name": "debug-visualizer-ui",
|
"name": "debug-visualizer-webview",
|
||||||
"version": "0.0.1",
|
"version": "0.0.1",
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"dev": "webpack-dev-server --hot",
|
"dev": "webpack-dev-server --hot",
|
||||||
"dev-playground": "webpack-dev-server --hot --port 8090 --playground",
|
"dev-playground": "webpack-dev-server --hot --port 8090 --playground",
|
||||||
"build": "webpack"
|
"build": "webpack"
|
||||||
},
|
},
|
||||||
|
"main": "./index.js",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@blueprintjs/core": "^3.23.1",
|
"@blueprintjs/core": "^3.23.1",
|
||||||
"@hediet/std": "^0.6.0",
|
"@hediet/std": "^0.6.0",
|
||||||
"blueprintjs": "^0.0.8",
|
"blueprintjs": "^0.0.8",
|
||||||
"classnames": "^2.2.6",
|
"classnames": "^2.2.6",
|
||||||
"mobx": "^5.15.4",
|
"mobx": "^5.15.4",
|
||||||
"mobx-react": "^6.1.7",
|
"mobx-react": "^6.1.8",
|
||||||
"monaco-editor": "^0.20.0",
|
"monaco-editor": "^0.20.0",
|
||||||
"popper.js": "^1.16.1",
|
"popper.js": "^1.16.1",
|
||||||
"react": "^16.12.0",
|
"react": "^16.12.0",
|
||||||
@@ -21,28 +22,29 @@
|
|||||||
"react-svg-pan-zoom": "^3.8.0",
|
"react-svg-pan-zoom": "^3.8.0",
|
||||||
"viz.js": "^2.1.2",
|
"viz.js": "^2.1.2",
|
||||||
"line-column": "^1.0.2",
|
"line-column": "^1.0.2",
|
||||||
"vis-network": "^7.3.4",
|
"vis-network": "^7.3.6",
|
||||||
"vis-data": "^6.3.5",
|
"vis-data": "^6.4.1",
|
||||||
"react-plotly.js": "^2.4.0",
|
"react-plotly.js": "^2.4.0",
|
||||||
"plotly.js": "^1.52.2"
|
"plotly.js": "^1.52.2",
|
||||||
|
"@hediet/debug-visualizer-data-extraction": "*"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@types/plotly.js": "^1.44.28",
|
"@types/plotly.js": "1.44.28",
|
||||||
"@types/react-plotly.js": "^2.2.4",
|
"@types/react-plotly.js": "^2.2.4",
|
||||||
"@types/html-webpack-plugin": "^3.2.2",
|
"@types/html-webpack-plugin": "^3.2.2",
|
||||||
"@types/react-measure": "^2.0.6",
|
"@types/react-measure": "^2.0.6",
|
||||||
"@types/react-svg-pan-zoom": "^3.3.0",
|
"@types/react-svg-pan-zoom": "^3.3.0",
|
||||||
"@types/webpack": "^4.41.6",
|
"@types/webpack": "^4.41.6",
|
||||||
"@types/classnames": "^2.2.9",
|
"@types/classnames": "^2.2.9",
|
||||||
"@types/react": "^16.9.19",
|
"@types/react": "^16.9.22",
|
||||||
"@types/react-dom": "^16.9.5",
|
"@types/react-dom": "^16.9.5",
|
||||||
"@types/line-column": "^1.0.0",
|
"@types/line-column": "^1.0.0",
|
||||||
"clean-webpack-plugin": "^3.0.0",
|
"clean-webpack-plugin": "^3.0.0",
|
||||||
"css-loader": "^3.4.2",
|
"css-loader": "^3.4.2",
|
||||||
"file-loader": "^5.0.2",
|
"file-loader": "^5.1.0",
|
||||||
"fork-ts-checker-webpack-plugin": "^4.0.3",
|
"fork-ts-checker-webpack-plugin": "^4.0.4",
|
||||||
"html-webpack-plugin": "^3.2.0",
|
"html-webpack-plugin": "^3.2.0",
|
||||||
"monaco-editor-webpack-plugin": "^1.8.2",
|
"monaco-editor-webpack-plugin": "^1.9.0",
|
||||||
"node-sass": "^4.13.1",
|
"node-sass": "^4.13.1",
|
||||||
"raw-loader": "^4.0.0",
|
"raw-loader": "^4.0.0",
|
||||||
"sass": "^1.25.0",
|
"sass": "^1.25.0",
|
||||||
@@ -50,7 +52,7 @@
|
|||||||
"style-loader": "^1.1.3",
|
"style-loader": "^1.1.3",
|
||||||
"ts-loader": "^6.2.1",
|
"ts-loader": "^6.2.1",
|
||||||
"ts-node": "^8.6.2",
|
"ts-node": "^8.6.2",
|
||||||
"typescript": "^3.7.5",
|
"typescript": "^3.8.2",
|
||||||
"webpack": "^4.41.6",
|
"webpack": "^4.41.6",
|
||||||
"webpack-cli": "^3.3.11",
|
"webpack-cli": "^3.3.11",
|
||||||
"webpack-dev-server": "^3.10.3"
|
"webpack-dev-server": "^3.10.3"
|
||||||
@@ -1,5 +1,5 @@
|
|||||||
import React = require("react");
|
import React = require("react");
|
||||||
import { Model } from "../Model/Model";
|
import { Model } from "../model/Model";
|
||||||
import { observer, disposeOnUnmount } from "mobx-react";
|
import { observer, disposeOnUnmount } from "mobx-react";
|
||||||
import { observable, action, autorun } from "mobx";
|
import { observable, action, autorun } from "mobx";
|
||||||
import * as monaco from "monaco-editor";
|
import * as monaco from "monaco-editor";
|
||||||
@@ -2,7 +2,7 @@ import React = require("react");
|
|||||||
import { Button, Spinner } from "@blueprintjs/core";
|
import { Button, Spinner } from "@blueprintjs/core";
|
||||||
import { observable, action } from "mobx";
|
import { observable, action } from "mobx";
|
||||||
import { observer } from "mobx-react";
|
import { observer } from "mobx-react";
|
||||||
import { Model } from "../Model/Model";
|
import { Model } from "../model/Model";
|
||||||
import { ExpressionInput } from "./ExpressionInput";
|
import { ExpressionInput } from "./ExpressionInput";
|
||||||
import { Visualizer } from "./Visualizer";
|
import { Visualizer } from "./Visualizer";
|
||||||
import classnames = require("classnames");
|
import classnames = require("classnames");
|
||||||
@@ -1,5 +1,5 @@
|
|||||||
import React = require("react");
|
import React = require("react");
|
||||||
import { Model } from "../Model/Model";
|
import { Model } from "../model/Model";
|
||||||
import { observer } from "mobx-react";
|
import { observer } from "mobx-react";
|
||||||
import { NoData } from "./NoData";
|
import { NoData } from "./NoData";
|
||||||
|
|
||||||
@@ -3,8 +3,8 @@ import { Popover } from "@blueprintjs/core";
|
|||||||
import { DataExtractorInfo } from "@hediet/debug-visualizer-data-extraction";
|
import { DataExtractorInfo } from "@hediet/debug-visualizer-data-extraction";
|
||||||
import { computed } from "mobx";
|
import { computed } from "mobx";
|
||||||
import { observer } from "mobx-react";
|
import { observer } from "mobx-react";
|
||||||
import { Model } from "../Model/Model";
|
import { Model } from "../model/Model";
|
||||||
import { VisualizationId } from "../Visualizers/Visualizer";
|
import { VisualizationId } from "../visualizers/Visualizer";
|
||||||
|
|
||||||
@observer
|
@observer
|
||||||
export class VisualizerHeaderDetails extends React.Component<{ model: Model }> {
|
export class VisualizerHeaderDetails extends React.Component<{ model: Model }> {
|
||||||
@@ -42,12 +42,14 @@ export class VisualizerHeaderDetails extends React.Component<{ model: Model }> {
|
|||||||
className="component-VisualizerHeaderDetails"
|
className="component-VisualizerHeaderDetails"
|
||||||
style={{ display: "flex", alignItems: "center" }}
|
style={{ display: "flex", alignItems: "center" }}
|
||||||
>
|
>
|
||||||
<NamedSelect
|
{/*
|
||||||
name="Source"
|
<NamedSelect
|
||||||
selected={0}
|
name="Source"
|
||||||
options={[{ label: "js" }]}
|
selected={0}
|
||||||
onSelected={item => {}}
|
options={[{ label: "js" }]}
|
||||||
/>
|
onSelected={item => {}}
|
||||||
|
/>
|
||||||
|
*/}
|
||||||
<div style={{ width: 10 }} />
|
<div style={{ width: 10 }} />
|
||||||
|
|
||||||
<NamedSelect
|
<NamedSelect
|
||||||
@@ -1,8 +1,8 @@
|
|||||||
import * as React from "react";
|
import * as React from "react";
|
||||||
import * as ReactDOM from "react-dom";
|
import * as ReactDOM from "react-dom";
|
||||||
import "./style.scss";
|
import "./style.scss";
|
||||||
import { Model } from "./Model/Model";
|
import { Model } from "./model/Model";
|
||||||
import Components = require("./Components/GUI");
|
import Components = require("./components/GUI");
|
||||||
|
|
||||||
const model = new Model();
|
const model = new Model();
|
||||||
|
|
||||||
@@ -15,7 +15,7 @@ if (model.runningMode !== "webView") {
|
|||||||
}
|
}
|
||||||
|
|
||||||
function render(target: HTMLDivElement) {
|
function render(target: HTMLDivElement) {
|
||||||
const c = require("./Components/GUI") as typeof Components;
|
const c = require("./components/GUI") as typeof Components;
|
||||||
ReactDOM.render(<c.GUI model={model} />, target);
|
ReactDOM.render(<c.GUI model={model} />, target);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -31,7 +31,7 @@ declare var module: {
|
|||||||
declare var require: (name: string) => any;
|
declare var require: (name: string) => any;
|
||||||
|
|
||||||
if (module.hot) {
|
if (module.hot) {
|
||||||
module.hot.accept("./Components/GUI", () => {
|
module.hot.accept("./components/GUI", () => {
|
||||||
render(target);
|
render(target);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
@@ -1,13 +1,13 @@
|
|||||||
import {
|
import {
|
||||||
debugVisualizerUIContract,
|
debugVisualizerUIContract,
|
||||||
DataExtractionState,
|
DataExtractionState,
|
||||||
} from "@hediet/debug-visualizer-vscode-shared";
|
} from "debug-visualizer/src/contract";
|
||||||
import { WebSocketStream } from "@hediet/typed-json-rpc-websocket";
|
import { WebSocketStream } from "@hediet/typed-json-rpc-websocket";
|
||||||
import { ConsoleRpcLogger } from "@hediet/typed-json-rpc";
|
import { ConsoleRpcLogger } from "@hediet/typed-json-rpc";
|
||||||
import { observable, action, computed, when, autorun } from "mobx";
|
import { observable, action, computed, when, autorun } from "mobx";
|
||||||
import { DataExtractorId } from "@hediet/debug-visualizer-data-extraction";
|
import { DataExtractorId } from "@hediet/debug-visualizer-data-extraction";
|
||||||
import { Visualization, VisualizationId } from "../Visualizers/Visualizer";
|
import { Visualization, VisualizationId } from "../visualizers/Visualizer";
|
||||||
import { knownVisualizations } from "../Visualizers";
|
import { knownVisualizations } from "../visualizers";
|
||||||
import { getApi as getVsCodeApi } from "./VsCodeApi";
|
import { getApi as getVsCodeApi } from "./VsCodeApi";
|
||||||
import { MonacoBridge } from "./MonacoBridge";
|
import { MonacoBridge } from "./MonacoBridge";
|
||||||
import { Disposable } from "@hediet/std/disposable";
|
import { Disposable } from "@hediet/std/disposable";
|
||||||
@@ -1,6 +1,6 @@
|
|||||||
import React = require("react");
|
import React = require("react");
|
||||||
import "../style.scss";
|
import "../style.scss";
|
||||||
import { DecoratedGridComponent } from "../Visualizers/GridVisualizer";
|
import { DecoratedGridComponent } from "../visualizers/GridVisualizer";
|
||||||
import { observable } from "mobx";
|
import { observable } from "mobx";
|
||||||
import { observer } from "mobx-react";
|
import { observer } from "mobx-react";
|
||||||
|
|
||||||
@@ -8,13 +8,13 @@ import {
|
|||||||
isCommonDataType,
|
isCommonDataType,
|
||||||
CommonDataTypes,
|
CommonDataTypes,
|
||||||
} from "@hediet/debug-visualizer-data-extraction";
|
} from "@hediet/debug-visualizer-data-extraction";
|
||||||
import { createTreeViewModelFromTreeNodeData } from "./TreeVisualizer/Visualizer";
|
import { createTreeViewModelFromTreeNodeData } from "./TreeVisualizer/TreeVisualizer";
|
||||||
import { TreeWithPathView, TreeViewModel } from "./TreeVisualizer/Views";
|
import { TreeWithPathView, TreeViewModel } from "./TreeVisualizer/Views";
|
||||||
import React = require("react");
|
import React = require("react");
|
||||||
import { observer, disposeOnUnmount } from "mobx-react";
|
import { observer, disposeOnUnmount } from "mobx-react";
|
||||||
import { observable, autorun, trace } from "mobx";
|
import { observable, autorun, trace } from "mobx";
|
||||||
import * as monaco from "monaco-editor";
|
import * as monaco from "monaco-editor";
|
||||||
import { getLanguageId } from "./TextVisualizer/MonacoTextVisualizer";
|
import { getLanguageId } from "./text-visualizers/MonacoTextVisualizer";
|
||||||
import LineColumn = require("line-column");
|
import LineColumn = require("line-column");
|
||||||
|
|
||||||
export class AstVisualizer extends VisualizationProvider {
|
export class AstVisualizer extends VisualizationProvider {
|
||||||
@@ -16,6 +16,25 @@ import {
|
|||||||
} from "../Visualizer";
|
} from "../Visualizer";
|
||||||
import React = require("react");
|
import React = require("react");
|
||||||
|
|
||||||
|
export class TreeVisualizer extends VisualizationProvider {
|
||||||
|
getVisualizations(
|
||||||
|
data: ExtractedData,
|
||||||
|
collector: VisualizationCollector
|
||||||
|
): void {
|
||||||
|
if (isCommonDataType(data, { tree: true })) {
|
||||||
|
collector.addVisualization({
|
||||||
|
id: asVisualizationId("tree"),
|
||||||
|
name: "Tree",
|
||||||
|
priority: 100,
|
||||||
|
render() {
|
||||||
|
const m = createTreeViewModelFromTreeNodeData(data.root);
|
||||||
|
return <TreeWithPathView model={m} />;
|
||||||
|
},
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
export function createTreeViewModelFromTreeNodeData<TData>(
|
export function createTreeViewModelFromTreeNodeData<TData>(
|
||||||
root: TreeNode<TData>
|
root: TreeNode<TData>
|
||||||
): TreeViewModel<TData> {
|
): TreeViewModel<TData> {
|
||||||
@@ -46,22 +65,3 @@ export function createTreeViewModelFromTreeNodeData<TData>(
|
|||||||
return model;
|
return model;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
export class TreeVisualizer extends VisualizationProvider {
|
|
||||||
getVisualizations(
|
|
||||||
data: ExtractedData,
|
|
||||||
collector: VisualizationCollector
|
|
||||||
): void {
|
|
||||||
if (isCommonDataType(data, { tree: true })) {
|
|
||||||
collector.addVisualization({
|
|
||||||
id: asVisualizationId("tree"),
|
|
||||||
name: "Tree",
|
|
||||||
priority: 100,
|
|
||||||
render() {
|
|
||||||
const m = createTreeViewModelFromTreeNodeData(data.root);
|
|
||||||
return <TreeWithPathView model={m} />;
|
|
||||||
},
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -2,8 +2,8 @@ import { observer, disposeOnUnmount } from "mobx-react";
|
|||||||
import { observable, autorun, computed, action, runInAction } from "mobx";
|
import { observable, autorun, computed, action, runInAction } from "mobx";
|
||||||
import React = require("react");
|
import React = require("react");
|
||||||
import classNames = require("classnames");
|
import classNames = require("classnames");
|
||||||
import { Rectangle, Point } from "../../Components/Point";
|
import { Rectangle, Point } from "../../components/Point";
|
||||||
import { SvgLine } from "../../Components/SvgElements";
|
import { SvgLine } from "../../components/SvgElements";
|
||||||
import "./style.scss";
|
import "./style.scss";
|
||||||
|
|
||||||
export class TreeViewModel<TData = unknown> {
|
export class TreeViewModel<TData = unknown> {
|
||||||
@@ -1,13 +1,13 @@
|
|||||||
import "./style.scss";
|
import "./style.scss";
|
||||||
import { ComposedVisualizationProvider } from "./Visualizer";
|
import { ComposedVisualizationProvider } from "./Visualizer";
|
||||||
import { TreeVisualizer } from "./TreeVisualizer/Visualizer";
|
import { TreeVisualizer } from "./TreeVisualizer/TreeVisualizer";
|
||||||
import { GraphvizGraphVisualizer } from "./GraphVisualizer/GraphvizGraphVisualizer";
|
import { GraphvizGraphVisualizer } from "./graph-visualizers/GraphvizGraphVisualizer";
|
||||||
import { SvgVisualizer } from "./SvgVisualizer";
|
import { SvgVisualizer } from "./SvgVisualizer";
|
||||||
import { GraphvizDotVisualizer } from "./GraphVisualizer/GraphvizDotVisualizer";
|
import { GraphvizDotVisualizer } from "./graph-visualizers/GraphvizDotVisualizer";
|
||||||
import { TextVisualizer } from "./TextVisualizer/TextVisualizer";
|
import { TextVisualizer } from "./text-visualizers/TextVisualizer";
|
||||||
import { MonacoTextVisualizer } from "./TextVisualizer/MonacoTextVisualizer";
|
import { MonacoTextVisualizer } from "./text-visualizers/MonacoTextVisualizer";
|
||||||
import { AstVisualizer } from "./AstVisualizer";
|
import { AstVisualizer } from "./AstVisualizer";
|
||||||
import { VisJsGraphVisualizer } from "./GraphVisualizer/VisJsGraphVisualizer";
|
import { VisJsGraphVisualizer } from "./graph-visualizers/VisJsGraphVisualizer";
|
||||||
import { PlotlyVisualizer } from "./PlotlyVisualizer";
|
import { PlotlyVisualizer } from "./PlotlyVisualizer";
|
||||||
import { GridVisualizer } from "./GridVisualizer";
|
import { GridVisualizer } from "./GridVisualizer";
|
||||||
|
|
||||||
@@ -47,7 +47,12 @@ module.exports = {
|
|||||||
new CleanWebpackPlugin(),
|
new CleanWebpackPlugin(),
|
||||||
];
|
];
|
||||||
if (mode === "default") {
|
if (mode === "default") {
|
||||||
plugins.push(new MonacoWebpackPlugin());
|
plugins.push(
|
||||||
|
new MonacoWebpackPlugin({
|
||||||
|
// Add more languages here once webworker issues are solved.
|
||||||
|
languages: ["typescript"],
|
||||||
|
})
|
||||||
|
);
|
||||||
}
|
}
|
||||||
return plugins;
|
return plugins;
|
||||||
})(),
|
})(),
|
||||||
197
yarn.lock
197
yarn.lock
@@ -77,10 +77,10 @@
|
|||||||
stacktracey "^1.2.112"
|
stacktracey "^1.2.112"
|
||||||
ws "^7.0.0"
|
ws "^7.0.0"
|
||||||
|
|
||||||
"@hediet/node-reload@^0.7.2":
|
"@hediet/node-reload@^0.7.3":
|
||||||
version "0.7.2"
|
version "0.7.3"
|
||||||
resolved "https://registry.yarnpkg.com/@hediet/node-reload/-/node-reload-0.7.2.tgz#d2b946e971ac7a2732704f2ede07a78401322187"
|
resolved "https://registry.yarnpkg.com/@hediet/node-reload/-/node-reload-0.7.3.tgz#305d68f54185200b018b14f257037ab8d8ca9857"
|
||||||
integrity sha512-RG35DwaKCgcw7RSQt+CI/3uGGkOn/K05qhIiktYVGnTshJn+ZWAtPUtp3bWAMQo5dxCWzw9IoIMh0az6/o8diw==
|
integrity sha512-icOyfDpArfvqmw0VLf2CoGR/jCSuWk3fScJGFuXQHpb0c9yNoGTiuG3Q8L2iJIuDzCjRu47DR2T+yCvZsY/f+w==
|
||||||
dependencies:
|
dependencies:
|
||||||
"@hediet/live-debug" "^0.5.1"
|
"@hediet/live-debug" "^0.5.1"
|
||||||
"@hediet/std" "^0.6.0"
|
"@hediet/std" "^0.6.0"
|
||||||
@@ -92,6 +92,11 @@
|
|||||||
stack-trace "^0.0.10"
|
stack-trace "^0.0.10"
|
||||||
ws "^7.0.0"
|
ws "^7.0.0"
|
||||||
|
|
||||||
|
"@hediet/semantic-json@0.1.0":
|
||||||
|
version "0.1.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/@hediet/semantic-json/-/semantic-json-0.1.0.tgz#ca3831778f1e59e555d0112decd5fe598437fdd3"
|
||||||
|
integrity sha512-lNdXabUmyxXnysXadTKyiKK9ik5L8b9SXu/QshgvE271QObPtp2Ubmh+rLNNCEAO65DE2VAxcesWmRKYfaQSJg==
|
||||||
|
|
||||||
"@hediet/std@^0.6.0":
|
"@hediet/std@^0.6.0":
|
||||||
version "0.6.0"
|
version "0.6.0"
|
||||||
resolved "https://registry.yarnpkg.com/@hediet/std/-/std-0.6.0.tgz#f7d2ffc1180ecef6ff272d0d6780f0c0d9337e4e"
|
resolved "https://registry.yarnpkg.com/@hediet/std/-/std-0.6.0.tgz#f7d2ffc1180ecef6ff272d0d6780f0c0d9337e4e"
|
||||||
@@ -398,17 +403,17 @@
|
|||||||
resolved "https://registry.yarnpkg.com/@types/node/-/node-12.6.8.tgz#e469b4bf9d1c9832aee4907ba8a051494357c12c"
|
resolved "https://registry.yarnpkg.com/@types/node/-/node-12.6.8.tgz#e469b4bf9d1c9832aee4907ba8a051494357c12c"
|
||||||
integrity sha512-aX+gFgA5GHcDi89KG5keey2zf0WfZk/HAQotEamsK2kbey+8yGKcson0hbK8E+v0NArlCJQCqMP161YhV6ZXLg==
|
integrity sha512-aX+gFgA5GHcDi89KG5keey2zf0WfZk/HAQotEamsK2kbey+8yGKcson0hbK8E+v0NArlCJQCqMP161YhV6ZXLg==
|
||||||
|
|
||||||
"@types/node@^13.7.1":
|
"@types/node@^13.7.4":
|
||||||
version "13.7.1"
|
version "13.7.4"
|
||||||
resolved "https://registry.yarnpkg.com/@types/node/-/node-13.7.1.tgz#238eb34a66431b71d2aaddeaa7db166f25971a0d"
|
resolved "https://registry.yarnpkg.com/@types/node/-/node-13.7.4.tgz#76c3cb3a12909510f52e5dc04a6298cdf9504ffd"
|
||||||
integrity sha512-Zq8gcQGmn4txQEJeiXo/KiLpon8TzAl0kmKH4zdWctPj05nWwp1ClMdAVEloqrQKfaC48PNLdgN/aVaLqUrluA==
|
integrity sha512-oVeL12C6gQS/GAExndigSaLxTrKpQPxewx9bOcwfvJiJge4rr7wNaph4J+ns5hrmIV2as5qxqN8YKthn9qh0jw==
|
||||||
|
|
||||||
"@types/node@^8.0.7":
|
"@types/node@^8.0.7":
|
||||||
version "8.10.51"
|
version "8.10.51"
|
||||||
resolved "https://registry.yarnpkg.com/@types/node/-/node-8.10.51.tgz#80600857c0a47a8e8bafc2dae6daed6db58e3627"
|
resolved "https://registry.yarnpkg.com/@types/node/-/node-8.10.51.tgz#80600857c0a47a8e8bafc2dae6daed6db58e3627"
|
||||||
integrity sha512-cArrlJp3Yv6IyFT/DYe+rlO8o3SIHraALbBW/+CcCYW/a9QucpLI+n2p4sRxAvl2O35TiecpX2heSZtJjvEO+Q==
|
integrity sha512-cArrlJp3Yv6IyFT/DYe+rlO8o3SIHraALbBW/+CcCYW/a9QucpLI+n2p4sRxAvl2O35TiecpX2heSZtJjvEO+Q==
|
||||||
|
|
||||||
"@types/plotly.js@*", "@types/plotly.js@^1.44.28":
|
"@types/plotly.js@*", "@types/plotly.js@1.44.28":
|
||||||
version "1.44.28"
|
version "1.44.28"
|
||||||
resolved "https://registry.yarnpkg.com/@types/plotly.js/-/plotly.js-1.44.28.tgz#e43afd646f2e93f9080b062d3cb7b578ae926f46"
|
resolved "https://registry.yarnpkg.com/@types/plotly.js/-/plotly.js-1.44.28.tgz#e43afd646f2e93f9080b062d3cb7b578ae926f46"
|
||||||
integrity sha512-Ajvtn6QHjLMZfRySd0L7f17ONKxiYpZSzW29sx/bU9KL/pzbu+pXdfNika9n+W0G1ScLEJEtI2yBsZXT1UXDKA==
|
integrity sha512-Ajvtn6QHjLMZfRySd0L7f17ONKxiYpZSzW29sx/bU9KL/pzbu+pXdfNika9n+W0G1ScLEJEtI2yBsZXT1UXDKA==
|
||||||
@@ -462,10 +467,10 @@
|
|||||||
"@types/prop-types" "*"
|
"@types/prop-types" "*"
|
||||||
csstype "^2.2.0"
|
csstype "^2.2.0"
|
||||||
|
|
||||||
"@types/react@^16.9.19":
|
"@types/react@^16.9.22":
|
||||||
version "16.9.19"
|
version "16.9.22"
|
||||||
resolved "https://registry.yarnpkg.com/@types/react/-/react-16.9.19.tgz#c842aa83ea490007d29938146ff2e4d9e4360c40"
|
resolved "https://registry.yarnpkg.com/@types/react/-/react-16.9.22.tgz#f0288c92d94e93c4b43e3f5633edf788b2c040ae"
|
||||||
integrity sha512-LJV97//H+zqKWMms0kvxaKYJDG05U2TtQB3chRLF8MPNs+MQh/H1aGlyDUxjaHvu08EAGerdX2z4LTBc7ns77A==
|
integrity sha512-7OSt4EGiLvy0h5R7X+r0c7S739TCU/LvWbkNOrm10lUwNHe7XPz5OLhLOSZeCkqO9JSCly1NkYJ7ODTUqVnHJQ==
|
||||||
dependencies:
|
dependencies:
|
||||||
"@types/prop-types" "*"
|
"@types/prop-types" "*"
|
||||||
csstype "^2.2.0"
|
csstype "^2.2.0"
|
||||||
@@ -518,10 +523,10 @@
|
|||||||
dependencies:
|
dependencies:
|
||||||
source-map "^0.6.1"
|
source-map "^0.6.1"
|
||||||
|
|
||||||
"@types/vscode@^1.35.0":
|
"@types/vscode@1.35.0":
|
||||||
version "1.42.0"
|
version "1.35.0"
|
||||||
resolved "https://registry.yarnpkg.com/@types/vscode/-/vscode-1.42.0.tgz#0ad891a9487e91e34be7c56985058a179031eb76"
|
resolved "https://registry.yarnpkg.com/@types/vscode/-/vscode-1.35.0.tgz#b17526ef1e9df5cbf7253be6765a33fd518a2304"
|
||||||
integrity sha512-ds6TceMsh77Fs0Mq0Vap6Y72JbGWB8Bay4DrnJlf5d9ui2RSe1wis13oQm+XhguOeH1HUfLGzaDAoupTUtgabw==
|
integrity sha512-Iyliuu8Hv4qy4TEaevQzChh9UsTEcuaKdcHXBbvJnoJSF5Td2yNENOrPK+vuOaXJJBhQZb4BNJKOxt6caaQR8A==
|
||||||
|
|
||||||
"@types/webpack-sources@*":
|
"@types/webpack-sources@*":
|
||||||
version "0.1.6"
|
version "0.1.6"
|
||||||
@@ -1659,10 +1664,10 @@ chownr@^1.1.1:
|
|||||||
resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.1.2.tgz#a18f1e0b269c8a6a5d3c86eb298beb14c3dd7bf6"
|
resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.1.2.tgz#a18f1e0b269c8a6a5d3c86eb298beb14c3dd7bf6"
|
||||||
integrity sha512-GkfeAQh+QNy3wquu9oIZr6SS5x7wGdSgNQvD10X3r+AZr1Oys22HW8kAmDMvNg2+Dm0TeGaEuO8gFwdBXxwO8A==
|
integrity sha512-GkfeAQh+QNy3wquu9oIZr6SS5x7wGdSgNQvD10X3r+AZr1Oys22HW8kAmDMvNg2+Dm0TeGaEuO8gFwdBXxwO8A==
|
||||||
|
|
||||||
chrome-launcher@^0.11.2:
|
chrome-launcher@^0.12.0:
|
||||||
version "0.11.2"
|
version "0.12.0"
|
||||||
resolved "https://registry.yarnpkg.com/chrome-launcher/-/chrome-launcher-0.11.2.tgz#c9a248dbccd3a08565553acf61adff879bcc982c"
|
resolved "https://registry.yarnpkg.com/chrome-launcher/-/chrome-launcher-0.12.0.tgz#08db81ef0f7b283c331df2c350e780c38bd0ce3a"
|
||||||
integrity sha512-jx0kJDCXdB2ARcDMwNCtrf04oY1Up4rOmVu+fqJ5MTPOOIG8EhRcEU9NZfXZc6dMw9FU8o1r21PNp8V2M0zQ+g==
|
integrity sha512-rBUP4tvWToiileDi3UR0SbWKoUoDCYTRmVND2sdoBL1xANBgVz8V9h1yQluj3MEQaBJg0fRw7hW82uOPrJus7A==
|
||||||
dependencies:
|
dependencies:
|
||||||
"@types/node" "*"
|
"@types/node" "*"
|
||||||
is-wsl "^2.1.0"
|
is-wsl "^2.1.0"
|
||||||
@@ -2796,6 +2801,11 @@ emojis-list@^2.0.0:
|
|||||||
resolved "https://registry.yarnpkg.com/emojis-list/-/emojis-list-2.1.0.tgz#4daa4d9db00f9819880c79fa457ae5b09a1fd389"
|
resolved "https://registry.yarnpkg.com/emojis-list/-/emojis-list-2.1.0.tgz#4daa4d9db00f9819880c79fa457ae5b09a1fd389"
|
||||||
integrity sha1-TapNnbAPmBmIDHn6RXrlsJof04k=
|
integrity sha1-TapNnbAPmBmIDHn6RXrlsJof04k=
|
||||||
|
|
||||||
|
emojis-list@^3.0.0:
|
||||||
|
version "3.0.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/emojis-list/-/emojis-list-3.0.0.tgz#5570662046ad29e2e916e71aae260abdff4f6a78"
|
||||||
|
integrity sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==
|
||||||
|
|
||||||
encodeurl@~1.0.2:
|
encodeurl@~1.0.2:
|
||||||
version "1.0.2"
|
version "1.0.2"
|
||||||
resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59"
|
resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59"
|
||||||
@@ -2901,6 +2911,11 @@ es6-iterator@^2.0.3, es6-iterator@~2.0.3:
|
|||||||
es5-ext "^0.10.35"
|
es5-ext "^0.10.35"
|
||||||
es6-symbol "^3.1.1"
|
es6-symbol "^3.1.1"
|
||||||
|
|
||||||
|
es6-object-assign@^1.0.3:
|
||||||
|
version "1.1.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/es6-object-assign/-/es6-object-assign-1.1.0.tgz#c2c3582656247c39ea107cb1e6652b6f9f24523c"
|
||||||
|
integrity sha1-wsNYJlYkfDnqEHyx5mUrb58kUjw=
|
||||||
|
|
||||||
es6-promise@^3.0.2:
|
es6-promise@^3.0.2:
|
||||||
version "3.3.1"
|
version "3.3.1"
|
||||||
resolved "https://registry.yarnpkg.com/es6-promise/-/es6-promise-3.3.1.tgz#a08cdde84ccdbf34d027a1451bc91d4bcd28a613"
|
resolved "https://registry.yarnpkg.com/es6-promise/-/es6-promise-3.3.1.tgz#a08cdde84ccdbf34d027a1451bc91d4bcd28a613"
|
||||||
@@ -3248,12 +3263,12 @@ figgy-pudding@^3.5.1:
|
|||||||
resolved "https://registry.yarnpkg.com/figgy-pudding/-/figgy-pudding-3.5.1.tgz#862470112901c727a0e495a80744bd5baa1d6790"
|
resolved "https://registry.yarnpkg.com/figgy-pudding/-/figgy-pudding-3.5.1.tgz#862470112901c727a0e495a80744bd5baa1d6790"
|
||||||
integrity sha512-vNKxJHTEKNThjfrdJwHc7brvM6eVevuO5nTj6ez8ZQ1qbXTvGthucRF7S4vf2cr71QVnT70V34v0S1DyQsti0w==
|
integrity sha512-vNKxJHTEKNThjfrdJwHc7brvM6eVevuO5nTj6ez8ZQ1qbXTvGthucRF7S4vf2cr71QVnT70V34v0S1DyQsti0w==
|
||||||
|
|
||||||
file-loader@^5.0.2:
|
file-loader@^5.1.0:
|
||||||
version "5.0.2"
|
version "5.1.0"
|
||||||
resolved "https://registry.yarnpkg.com/file-loader/-/file-loader-5.0.2.tgz#7f3d8b4ac85a5e8df61338cfec95d7405f971caa"
|
resolved "https://registry.yarnpkg.com/file-loader/-/file-loader-5.1.0.tgz#cb56c070efc0e40666424309bd0d9e45ac6f2bb8"
|
||||||
integrity sha512-QMiQ+WBkGLejKe81HU8SZ9PovsU/5uaLo0JdTCEXOYv7i7jfAjHZi1tcwp9tSASJPOmmHZtbdCervFmXMH/Dcg==
|
integrity sha512-u/VkLGskw3Ue59nyOwUwXI/6nuBCo7KBkniB/l7ICwr/7cPNGsL1WCXUp3GB0qgOOKU1TiP49bv4DZF/LJqprg==
|
||||||
dependencies:
|
dependencies:
|
||||||
loader-utils "^1.2.3"
|
loader-utils "^1.4.0"
|
||||||
schema-utils "^2.5.0"
|
schema-utils "^2.5.0"
|
||||||
|
|
||||||
fill-range@^4.0.0:
|
fill-range@^4.0.0:
|
||||||
@@ -3391,10 +3406,10 @@ forever-agent@~0.6.1:
|
|||||||
resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91"
|
resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91"
|
||||||
integrity sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=
|
integrity sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=
|
||||||
|
|
||||||
fork-ts-checker-webpack-plugin@^4.0.3:
|
fork-ts-checker-webpack-plugin@^4.0.4:
|
||||||
version "4.0.3"
|
version "4.0.4"
|
||||||
resolved "https://registry.yarnpkg.com/fork-ts-checker-webpack-plugin/-/fork-ts-checker-webpack-plugin-4.0.3.tgz#958f4e4ec3e7fd9d4ad5a50a4442abce77dca19a"
|
resolved "https://registry.yarnpkg.com/fork-ts-checker-webpack-plugin/-/fork-ts-checker-webpack-plugin-4.0.4.tgz#ba1be68d63dcf509f6d1b08fb8e19efb6d7e8a96"
|
||||||
integrity sha512-5hGeMYKg817Hp6rvdc2EOS/T/Cq0JW9LLJDZtVUPlNIojIuP7YbOAdrHEk4Irw1097YQUr56kWIiYhqNPzfNzQ==
|
integrity sha512-6IEqHH6s+tv5sho5d3dn7dfcnbjKHwfqL74kRfpAP2e8MCHuMh5ixtYrbdfPO4Zat3S5gwULOoVArjK3HMwNdA==
|
||||||
dependencies:
|
dependencies:
|
||||||
babel-code-frame "^6.22.0"
|
babel-code-frame "^6.22.0"
|
||||||
chalk "^2.4.1"
|
chalk "^2.4.1"
|
||||||
@@ -4654,7 +4669,7 @@ internal-ip@^4.3.0:
|
|||||||
default-gateway "^4.2.0"
|
default-gateway "^4.2.0"
|
||||||
ipaddr.js "^1.9.0"
|
ipaddr.js "^1.9.0"
|
||||||
|
|
||||||
interpret@1.2.0:
|
interpret@1.2.0, interpret@^1.0.0:
|
||||||
version "1.2.0"
|
version "1.2.0"
|
||||||
resolved "https://registry.yarnpkg.com/interpret/-/interpret-1.2.0.tgz#d5061a6224be58e8083985f5014d844359576296"
|
resolved "https://registry.yarnpkg.com/interpret/-/interpret-1.2.0.tgz#d5061a6224be58e8083985f5014d844359576296"
|
||||||
integrity sha512-mT34yGKMNceBQUoVn7iCDKDntA7SC6gycMAWzGx1z/CMCTV7b2AAtXlo3nRyHZ1FelRkQbQjprHSYGwzLtkVbw==
|
integrity sha512-mT34yGKMNceBQUoVn7iCDKDntA7SC6gycMAWzGx1z/CMCTV7b2AAtXlo3nRyHZ1FelRkQbQjprHSYGwzLtkVbw==
|
||||||
@@ -4828,6 +4843,11 @@ is-descriptor@^1.0.0, is-descriptor@^1.0.2:
|
|||||||
is-data-descriptor "^1.0.0"
|
is-data-descriptor "^1.0.0"
|
||||||
kind-of "^6.0.2"
|
kind-of "^6.0.2"
|
||||||
|
|
||||||
|
is-docker@^2.0.0:
|
||||||
|
version "2.0.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/is-docker/-/is-docker-2.0.0.tgz#2cb0df0e75e2d064fe1864c37cdeacb7b2dcf25b"
|
||||||
|
integrity sha512-pJEdRugimx4fBMra5z2/5iRdZ63OhYV0vr0Dwm5+xtW4D1FvRkB8hamMIhnWfyJeDdyr/aa7BDyNbtG38VxgoQ==
|
||||||
|
|
||||||
is-extendable@^0.1.0, is-extendable@^0.1.1:
|
is-extendable@^0.1.0, is-extendable@^0.1.1:
|
||||||
version "0.1.1"
|
version "0.1.1"
|
||||||
resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-0.1.1.tgz#62b110e289a471418e3ec36a617d472e301dfc89"
|
resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-0.1.1.tgz#62b110e289a471418e3ec36a617d472e301dfc89"
|
||||||
@@ -5012,6 +5032,11 @@ is-wsl@^2.1.0:
|
|||||||
resolved "https://registry.yarnpkg.com/is-wsl/-/is-wsl-2.1.0.tgz#94369bbeb2249ef07b831b1b08590e686330ccbb"
|
resolved "https://registry.yarnpkg.com/is-wsl/-/is-wsl-2.1.0.tgz#94369bbeb2249ef07b831b1b08590e686330ccbb"
|
||||||
integrity sha512-pFTjpv/x5HRj8kbZ/Msxi9VrvtOMRBqaDi3OIcbwPI3OuH+r3lLxVWukLITBaOGJIbA/w2+M1eVmVa4XNQlAmQ==
|
integrity sha512-pFTjpv/x5HRj8kbZ/Msxi9VrvtOMRBqaDi3OIcbwPI3OuH+r3lLxVWukLITBaOGJIbA/w2+M1eVmVa4XNQlAmQ==
|
||||||
|
|
||||||
|
is-wsl@^2.1.1:
|
||||||
|
version "2.1.1"
|
||||||
|
resolved "https://registry.yarnpkg.com/is-wsl/-/is-wsl-2.1.1.tgz#4a1c152d429df3d441669498e2486d3596ebaf1d"
|
||||||
|
integrity sha512-umZHcSrwlDHo2TGMXv0DZ8dIUGunZ2Iv68YZnrmCiBPkZ4aaOhtv7pXJKeki9k3qJ3RJr0cDyitcl5wEH3AYog==
|
||||||
|
|
||||||
isarray@0.0.1:
|
isarray@0.0.1:
|
||||||
version "0.0.1"
|
version "0.0.1"
|
||||||
resolved "https://registry.yarnpkg.com/isarray/-/isarray-0.0.1.tgz#8a18acfca9a8f4177e09abfc6038939b05d1eedf"
|
resolved "https://registry.yarnpkg.com/isarray/-/isarray-0.0.1.tgz#8a18acfca9a8f4177e09abfc6038939b05d1eedf"
|
||||||
@@ -5256,6 +5281,15 @@ loader-utils@^0.2.16:
|
|||||||
json5 "^0.5.0"
|
json5 "^0.5.0"
|
||||||
object-assign "^4.0.1"
|
object-assign "^4.0.1"
|
||||||
|
|
||||||
|
loader-utils@^1.4.0:
|
||||||
|
version "1.4.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-1.4.0.tgz#c579b5e34cb34b1a74edc6c1fb36bfa371d5a613"
|
||||||
|
integrity sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA==
|
||||||
|
dependencies:
|
||||||
|
big.js "^5.2.2"
|
||||||
|
emojis-list "^3.0.0"
|
||||||
|
json5 "^1.0.1"
|
||||||
|
|
||||||
locate-path@^3.0.0:
|
locate-path@^3.0.0:
|
||||||
version "3.0.0"
|
version "3.0.0"
|
||||||
resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-3.0.0.tgz#dbec3b3ab759758071b58fe59fc41871af21400e"
|
resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-3.0.0.tgz#dbec3b3ab759758071b58fe59fc41871af21400e"
|
||||||
@@ -5664,10 +5698,10 @@ mobx-react-lite@^1.4.2:
|
|||||||
resolved "https://registry.yarnpkg.com/mobx-react-lite/-/mobx-react-lite-1.5.2.tgz#c4395b0568b9cb16f07669d8869cc4efa1b8656d"
|
resolved "https://registry.yarnpkg.com/mobx-react-lite/-/mobx-react-lite-1.5.2.tgz#c4395b0568b9cb16f07669d8869cc4efa1b8656d"
|
||||||
integrity sha512-PyZmARqqWtpuQaAoHF5pKX7h6TKNLwq6vtovm4zZvG6sEbMRHHSqioGXSeQbpRmG8Kw8uln3q/W1yMO5IfL5Sg==
|
integrity sha512-PyZmARqqWtpuQaAoHF5pKX7h6TKNLwq6vtovm4zZvG6sEbMRHHSqioGXSeQbpRmG8Kw8uln3q/W1yMO5IfL5Sg==
|
||||||
|
|
||||||
mobx-react@^6.1.7:
|
mobx-react@^6.1.8:
|
||||||
version "6.1.7"
|
version "6.1.8"
|
||||||
resolved "https://registry.yarnpkg.com/mobx-react/-/mobx-react-6.1.7.tgz#2fe620851ef33df38e50645101321830a07fc4e2"
|
resolved "https://registry.yarnpkg.com/mobx-react/-/mobx-react-6.1.8.tgz#5b9a3950463d58c154dda2c94d16d48ed8fcb02e"
|
||||||
integrity sha512-TXwqweY7yEbMl+0F5jOO5bHWUbgeNJr8o1or+1NdhWWg6duIqsGW1D6ojNmn2RO27vRJHkZrp4kjv6919nHS0A==
|
integrity sha512-NCMJn/hrWoeyeNbzCsBDtftWSy6VlFgw1VzhogrciPFvJIl2xs+8rJJdPlRHQTiNirwNoHNKJgUE4WhPZPvKDw==
|
||||||
dependencies:
|
dependencies:
|
||||||
mobx-react-lite "^1.4.2"
|
mobx-react-lite "^1.4.2"
|
||||||
|
|
||||||
@@ -5681,10 +5715,10 @@ mobx@^5.15.4:
|
|||||||
resolved "https://registry.yarnpkg.com/mobx/-/mobx-5.15.4.tgz#9da1a84e97ba624622f4e55a0bf3300fb931c2ab"
|
resolved "https://registry.yarnpkg.com/mobx/-/mobx-5.15.4.tgz#9da1a84e97ba624622f4e55a0bf3300fb931c2ab"
|
||||||
integrity sha512-xRFJxSU2Im3nrGCdjSuOTFmxVDGeqOHL+TyADCGbT0k4HHqGmx5u2yaHNryvoORpI4DfbzjJ5jPmuv+d7sioFw==
|
integrity sha512-xRFJxSU2Im3nrGCdjSuOTFmxVDGeqOHL+TyADCGbT0k4HHqGmx5u2yaHNryvoORpI4DfbzjJ5jPmuv+d7sioFw==
|
||||||
|
|
||||||
monaco-editor-webpack-plugin@^1.8.2:
|
monaco-editor-webpack-plugin@^1.9.0:
|
||||||
version "1.8.2"
|
version "1.9.0"
|
||||||
resolved "https://registry.yarnpkg.com/monaco-editor-webpack-plugin/-/monaco-editor-webpack-plugin-1.8.2.tgz#3721b8d9a3e2e41b154cf2a2955a7d7246c03714"
|
resolved "https://registry.yarnpkg.com/monaco-editor-webpack-plugin/-/monaco-editor-webpack-plugin-1.9.0.tgz#5b547281b9f404057dc5d8c5722390df9ac90be6"
|
||||||
integrity sha512-g9G7A/lxQtpPsYaZFBqm73dwVkOziGUXExIR6iW7ksZUaiMkpvdTiE9O8edgdJGo+XtCmjycmIKB1Lt8VKbSTQ==
|
integrity sha512-tOiiToc94E1sb50BgZ8q8WK/bxus77SRrwCqIpAB5er3cpX78SULbEBY4YPOB8kDolOzKRt30WIHG/D6gz69Ww==
|
||||||
dependencies:
|
dependencies:
|
||||||
loader-utils "^1.2.3"
|
loader-utils "^1.2.3"
|
||||||
|
|
||||||
@@ -6247,12 +6281,13 @@ once@~1.3.0:
|
|||||||
dependencies:
|
dependencies:
|
||||||
wrappy "1"
|
wrappy "1"
|
||||||
|
|
||||||
open@^6.4.0:
|
open@^7.0.2:
|
||||||
version "6.4.0"
|
version "7.0.2"
|
||||||
resolved "https://registry.yarnpkg.com/open/-/open-6.4.0.tgz#5c13e96d0dc894686164f18965ecfe889ecfc8a9"
|
resolved "https://registry.yarnpkg.com/open/-/open-7.0.2.tgz#fb3681f11f157f2361d2392307548ca1792960e8"
|
||||||
integrity sha512-IFenVPgF70fSm1keSd2iDBIDIBZkroLeuffXq+wKTzTJlBpesFWojV9lb8mzOfaAzM1sr7HQHuO0vtV0zYekGg==
|
integrity sha512-70E/pFTPr7nZ9nLDPNTcj3IVqnNvKuP4VsBmoKV9YGTnChe0mlS3C4qM7qKarhZ8rGaHKLfo+vBTHXDp6ZSyLQ==
|
||||||
dependencies:
|
dependencies:
|
||||||
is-wsl "^1.1.0"
|
is-docker "^2.0.0"
|
||||||
|
is-wsl "^2.1.1"
|
||||||
|
|
||||||
opn@^5.5.0:
|
opn@^5.5.0:
|
||||||
version "5.5.0"
|
version "5.5.0"
|
||||||
@@ -7267,6 +7302,13 @@ readdirp@^3.1.1:
|
|||||||
dependencies:
|
dependencies:
|
||||||
picomatch "^2.0.4"
|
picomatch "^2.0.4"
|
||||||
|
|
||||||
|
rechoir@^0.6.2:
|
||||||
|
version "0.6.2"
|
||||||
|
resolved "https://registry.yarnpkg.com/rechoir/-/rechoir-0.6.2.tgz#85204b54dba82d5742e28c96756ef43af50e3384"
|
||||||
|
integrity sha1-hSBLVNuoLVdC4oyWdW70OvUOM4Q=
|
||||||
|
dependencies:
|
||||||
|
resolve "^1.1.6"
|
||||||
|
|
||||||
redent@^1.0.0:
|
redent@^1.0.0:
|
||||||
version "1.0.0"
|
version "1.0.0"
|
||||||
resolved "https://registry.yarnpkg.com/redent/-/redent-1.0.0.tgz#cf916ab1fd5f1f16dfb20822dd6ec7f730c2afde"
|
resolved "https://registry.yarnpkg.com/redent/-/redent-1.0.0.tgz#cf916ab1fd5f1f16dfb20822dd6ec7f730c2afde"
|
||||||
@@ -7556,7 +7598,7 @@ resolve@^0.6.1:
|
|||||||
resolved "https://registry.yarnpkg.com/resolve/-/resolve-0.6.3.tgz#dd957982e7e736debdf53b58a4dd91754575dd46"
|
resolved "https://registry.yarnpkg.com/resolve/-/resolve-0.6.3.tgz#dd957982e7e736debdf53b58a4dd91754575dd46"
|
||||||
integrity sha1-3ZV5gufnNt699TtYpN2RdUV13UY=
|
integrity sha1-3ZV5gufnNt699TtYpN2RdUV13UY=
|
||||||
|
|
||||||
resolve@^1.0.0, resolve@^1.1.5:
|
resolve@^1.0.0, resolve@^1.1.5, resolve@^1.1.6:
|
||||||
version "1.15.1"
|
version "1.15.1"
|
||||||
resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.15.1.tgz#27bdcdeffeaf2d6244b95bb0f9f4b4653451f3e8"
|
resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.15.1.tgz#27bdcdeffeaf2d6244b95bb0f9f4b4653451f3e8"
|
||||||
integrity sha512-84oo6ZTtoTUpjgNEr5SJyzQhzL72gaRodsSfyxC/AXRvwu0Yse9H8eF9IpGo7b8YetZhlI6v7ZQ6bKBFV/6S7w==
|
integrity sha512-84oo6ZTtoTUpjgNEr5SJyzQhzL72gaRodsSfyxC/AXRvwu0Yse9H8eF9IpGo7b8YetZhlI6v7ZQ6bKBFV/6S7w==
|
||||||
@@ -7954,6 +7996,24 @@ shebang-regex@^1.0.0:
|
|||||||
resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-1.0.0.tgz#da42f49740c0b42db2ca9728571cb190c98efea3"
|
resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-1.0.0.tgz#da42f49740c0b42db2ca9728571cb190c98efea3"
|
||||||
integrity sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=
|
integrity sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=
|
||||||
|
|
||||||
|
shelljs@^0.8.1:
|
||||||
|
version "0.8.3"
|
||||||
|
resolved "https://registry.yarnpkg.com/shelljs/-/shelljs-0.8.3.tgz#a7f3319520ebf09ee81275b2368adb286659b097"
|
||||||
|
integrity sha512-fc0BKlAWiLpwZljmOvAOTE/gXawtCoNrP5oaY7KIaQbbyHeQVg01pSEuEGvGh3HEdBU4baCD7wQBwADmM/7f7A==
|
||||||
|
dependencies:
|
||||||
|
glob "^7.0.0"
|
||||||
|
interpret "^1.0.0"
|
||||||
|
rechoir "^0.6.2"
|
||||||
|
|
||||||
|
shx@^0.3.2:
|
||||||
|
version "0.3.2"
|
||||||
|
resolved "https://registry.yarnpkg.com/shx/-/shx-0.3.2.tgz#40501ce14eb5e0cbcac7ddbd4b325563aad8c123"
|
||||||
|
integrity sha512-aS0mWtW3T2sHAenrSrip2XGv39O9dXIFUqxAEWHEOS1ePtGIBavdPJY1kE2IHl14V/4iCbUiNDPGdyYTtmhSoA==
|
||||||
|
dependencies:
|
||||||
|
es6-object-assign "^1.0.3"
|
||||||
|
minimist "^1.2.0"
|
||||||
|
shelljs "^0.8.1"
|
||||||
|
|
||||||
signal-exit@^3.0.0:
|
signal-exit@^3.0.0:
|
||||||
version "3.0.2"
|
version "3.0.2"
|
||||||
resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.2.tgz#b5fdc08f1287ea1178628e415e25132b73646c6d"
|
resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.2.tgz#b5fdc08f1287ea1178628e415e25132b73646c6d"
|
||||||
@@ -8973,10 +9033,10 @@ typedarray@^0.0.6:
|
|||||||
resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777"
|
resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777"
|
||||||
integrity sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=
|
integrity sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=
|
||||||
|
|
||||||
typescript@^3.7.5:
|
typescript@^3.8.2:
|
||||||
version "3.7.5"
|
version "3.8.2"
|
||||||
resolved "https://registry.yarnpkg.com/typescript/-/typescript-3.7.5.tgz#0692e21f65fd4108b9330238aac11dd2e177a1ae"
|
resolved "https://registry.yarnpkg.com/typescript/-/typescript-3.8.2.tgz#91d6868aaead7da74f493c553aeff76c0c0b1d5a"
|
||||||
integrity sha512-/P5lkRXkWHNAbcJIiHPfRoKqyd7bsyCma1hZNUGfn20qm64T6ZBlrzprymeu918H+mB/0rIg2gGK/BXkhhYgBw==
|
integrity sha512-EgOVgL/4xfVrCMbhYKUQTdF37SQn4Iw73H5BgCrF1Abdun7Kwy/QZsE/ssAy0y4LxBbvua3PIbFsbRczWWnDdQ==
|
||||||
|
|
||||||
uglify-js@3.4.x:
|
uglify-js@3.4.x:
|
||||||
version "3.4.10"
|
version "3.4.10"
|
||||||
@@ -9321,28 +9381,22 @@ verror@1.10.0:
|
|||||||
core-util-is "1.0.2"
|
core-util-is "1.0.2"
|
||||||
extsprintf "^1.2.0"
|
extsprintf "^1.2.0"
|
||||||
|
|
||||||
vis-data@^6.3.5:
|
vis-data@^6.4.1:
|
||||||
version "6.3.5"
|
version "6.4.1"
|
||||||
resolved "https://registry.yarnpkg.com/vis-data/-/vis-data-6.3.5.tgz#db53cb0828601aa0908f86eca1cfe80f69f17873"
|
resolved "https://registry.yarnpkg.com/vis-data/-/vis-data-6.4.1.tgz#2ee74ae3b376d3b911751a168c16b3d97c3fbca7"
|
||||||
integrity sha512-H8lD1NTmC5HimYeqTouxhbUya5qrYQGjpJhIHkxsm5R34EEdcm/D1cLTMLFFyIoZC6SQkADQj+dlFKf5DOnSww==
|
integrity sha512-kFCFQg1adQbC1hDMKtNLaLjYUe4hCDhg2/iqM6qAFvLu0x58IDolZwBluMJuaJfhU3ScC2W1higqglIWNKIJeQ==
|
||||||
optionalDependencies:
|
optionalDependencies:
|
||||||
vis-util "2.0.1"
|
vis-util "3.0.0"
|
||||||
vis-uuid "1.1.3"
|
|
||||||
|
|
||||||
vis-network@^7.3.4:
|
vis-network@^7.3.6:
|
||||||
version "7.3.4"
|
version "7.3.6"
|
||||||
resolved "https://registry.yarnpkg.com/vis-network/-/vis-network-7.3.4.tgz#818ccf7d82afffae7059e6b2cb520cd28ea01070"
|
resolved "https://registry.yarnpkg.com/vis-network/-/vis-network-7.3.6.tgz#b0fe0a2a4fea027327f15fe095e395d2ec81c305"
|
||||||
integrity sha512-4hfB1DDnzclUUdniBh2WN2agcCmrL2ERmWsRB8wv8XtiiQ+Gg6HNzx5v7xySRWK+yH88LVnrrzaM+mDb5jcQtg==
|
integrity sha512-XmcjZaKmwEuDMUkcOV1zDaQOo6ANVwIlAfFDSEtOkWbUi34sZLYbxhpr4UFPYxpQA//TnNC9Rgvoivt7uqdxTw==
|
||||||
|
|
||||||
vis-util@2.0.1:
|
vis-util@3.0.0:
|
||||||
version "2.0.1"
|
version "3.0.0"
|
||||||
resolved "https://registry.yarnpkg.com/vis-util/-/vis-util-2.0.1.tgz#4538aee119795bde1f7996a3ee8e0148baf71124"
|
resolved "https://registry.yarnpkg.com/vis-util/-/vis-util-3.0.0.tgz#9b0da1e86e9beb5fbea17f5af3a49263c48d7c87"
|
||||||
integrity sha512-VBQ6zCT+Iaum70uzLbjk0nLMOjp9NhPzU42j0gaM6q6tg0eTcgIWNXzAqamhQtmm1kDj0jMLzKvkFOPENYv34w==
|
integrity sha512-1B66y7E1Trc+SBjR8zhEULa4NzmPLitZoYoyw685Xi9CYn5UyJrNIB9TI/MAnwN+UioSQ4ogDQYOtO501CjREg==
|
||||||
|
|
||||||
vis-uuid@1.1.3:
|
|
||||||
version "1.1.3"
|
|
||||||
resolved "https://registry.yarnpkg.com/vis-uuid/-/vis-uuid-1.1.3.tgz#2f53ff35e9e026b0ec93bc433ce685c40c2f784c"
|
|
||||||
integrity sha512-2B6XdY1bkzbUh+TugmnAaFa61KO9R5pzBzIuFIm8a9FrkbxIdSmQXV+FbfkL8QunkQV/bT0JDLQ2puqCS2+0Og==
|
|
||||||
|
|
||||||
viz.js@^2.1.2:
|
viz.js@^2.1.2:
|
||||||
version "2.1.2"
|
version "2.1.2"
|
||||||
@@ -9623,13 +9677,18 @@ ws@^6.2.1:
|
|||||||
dependencies:
|
dependencies:
|
||||||
async-limiter "~1.0.0"
|
async-limiter "~1.0.0"
|
||||||
|
|
||||||
ws@^7.0.0, ws@^7.1.1:
|
ws@^7.0.0:
|
||||||
version "7.1.1"
|
version "7.1.1"
|
||||||
resolved "https://registry.yarnpkg.com/ws/-/ws-7.1.1.tgz#f9942dc868b6dffb72c14fd8f2ba05f77a4d5983"
|
resolved "https://registry.yarnpkg.com/ws/-/ws-7.1.1.tgz#f9942dc868b6dffb72c14fd8f2ba05f77a4d5983"
|
||||||
integrity sha512-o41D/WmDeca0BqYhsr3nJzQyg9NF5X8l/UdnFNux9cS3lwB+swm8qGWX5rn+aD6xfBU3rGmtHij7g7x6LxFU3A==
|
integrity sha512-o41D/WmDeca0BqYhsr3nJzQyg9NF5X8l/UdnFNux9cS3lwB+swm8qGWX5rn+aD6xfBU3rGmtHij7g7x6LxFU3A==
|
||||||
dependencies:
|
dependencies:
|
||||||
async-limiter "^1.0.0"
|
async-limiter "^1.0.0"
|
||||||
|
|
||||||
|
ws@^7.2.1:
|
||||||
|
version "7.2.1"
|
||||||
|
resolved "https://registry.yarnpkg.com/ws/-/ws-7.2.1.tgz#03ed52423cd744084b2cf42ed197c8b65a936b8e"
|
||||||
|
integrity sha512-sucePNSafamSKoOqoNfBd8V0StlkzJKL2ZAhGQinCfNQ+oacw+Pk7lcdAElecBF2VkLNZRiIb5Oi1Q5lVUVt2A==
|
||||||
|
|
||||||
"xtend@>=4.0.0 <4.1.0-0", xtend@^4.0.0, xtend@~4.0.1:
|
"xtend@>=4.0.0 <4.1.0-0", xtend@^4.0.0, xtend@~4.0.1:
|
||||||
version "4.0.2"
|
version "4.0.2"
|
||||||
resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54"
|
resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54"
|
||||||
|
|||||||
Reference in New Issue
Block a user