From 953c2f7c62f6a2abe3163ca98e80a1232d75a9f8 Mon Sep 17 00:00:00 2001 From: Chris Rybicki Date: Thu, 3 Aug 2023 18:38:22 -0400 Subject: [PATCH] revert: integrate console in vscode (#3702) Reverts winglang/wing#3584. This change appears to break the LSP features (like autocomplete, docs, and error underlines) in VS Code. --- apps/vscode-wing/.projen/deps.json | 37 +- apps/vscode-wing/.projen/tasks.json | 14 +- apps/vscode-wing/.projenrc.ts | 71 +--- apps/vscode-wing/package.json | 64 +-- apps/vscode-wing/resources/play-all-dark.svg | 10 - apps/vscode-wing/resources/play-all-light.svg | 10 - apps/vscode-wing/resources/play-dark.svg | 3 - apps/vscode-wing/resources/play-light.svg | 3 - .../resource-icons/dark/archive-box.svg | 3 - .../resources/resource-icons/dark/beaker.svg | 3 - .../resources/resource-icons/dark/bolt.svg | 3 - .../resource-icons/dark/calculator.svg | 3 - .../resources/resource-icons/dark/clock.svg | 3 - .../resources/resource-icons/dark/cloud.svg | 3 - .../resources/resource-icons/dark/cube.svg | 3 - .../resource-icons/dark/globe-alt.svg | 3 - .../resource-icons/dark/megaphone.svg | 3 - .../resource-icons/dark/queue-list.svg | 3 - .../resources/resource-icons/dark/redis.svg | 11 - .../resource-icons/dark/table-cells.svg | 3 - .../resource-icons/light/archive-box.svg | 3 - .../resources/resource-icons/light/beaker.svg | 3 - .../resources/resource-icons/light/bolt.svg | 3 - .../resource-icons/light/calculator.svg | 3 - .../resources/resource-icons/light/clock.svg | 3 - .../resources/resource-icons/light/cloud.svg | 3 - .../resources/resource-icons/light/cube.svg | 3 - .../resource-icons/light/globe-alt.svg | 3 - .../resource-icons/light/megaphone.svg | 3 - .../resource-icons/light/queue-list.svg | 3 - .../resources/resource-icons/light/redis.svg | 11 - .../resource-icons/light/table-cells.svg | 3 - apps/vscode-wing/src/bin-helper.ts | 2 +- apps/vscode-wing/src/console.ts | 133 ++++++ .../src/console/console-manager.ts | 274 ------------ .../ResourcesExplorerProvider.ts | 236 ---------- .../TestsExplorerProvider.ts | 83 ---- apps/vscode-wing/src/console/index.ts | 117 ----- .../src/console/services/client.ts | 117 ----- apps/vscode-wing/tsconfig.dev.json | 2 +- apps/vscode-wing/tsconfig.json | 2 +- apps/vscode-wing/tsup.config.ts | 9 - apps/wing-console/console/app/src/index.ts | 2 - .../console/server/src/expressServer.ts | 18 +- apps/wing-console/console/server/src/index.ts | 47 -- .../console/server/src/router/app.ts | 17 - .../console/server/src/router/index.ts | 2 +- .../console/server/src/router/test.ts | 38 +- .../console/server/src/utils/createRouter.ts | 65 +-- apps/wing-console/console/ui/package.json | 2 +- apps/wing-console/console/ui/src/App.tsx | 2 - apps/wing-console/console/ui/src/Console.tsx | 4 +- .../console/ui/src/layout/default-layout.tsx | 402 ------------------ .../console/ui/src/layout/header.tsx | 40 +- .../console/ui/src/layout/layout-provider.tsx | 87 +--- .../ui/src/layout/playground-layout.tsx | 174 ++++++++ .../console/ui/src/layout/status-bar.tsx | 5 - .../console/ui/src/layout/theme-toggle.tsx | 41 -- .../console/ui/src/layout/tutorial-layout.tsx | 153 +++++++ .../console/ui/src/layout/use-layout.tsx | 2 +- .../console/ui/src/layout/vscode-layout.tsx | 226 ++++++++++ .../console/ui/src/services/trpc.ts | 21 +- .../console/ui/src/services/use-explorer.tsx | 35 +- .../console/ui/src/services/use-tests.ts | 33 +- .../console/ui/src/ui/test-tree.tsx | 9 +- apps/wing/package.json | 1 - pnpm-lock.yaml | 299 ++++++++----- 67 files changed, 1014 insertions(+), 1986 deletions(-) delete mode 100644 apps/vscode-wing/resources/play-all-dark.svg delete mode 100644 apps/vscode-wing/resources/play-all-light.svg delete mode 100644 apps/vscode-wing/resources/play-dark.svg delete mode 100644 apps/vscode-wing/resources/play-light.svg delete mode 100644 apps/vscode-wing/resources/resource-icons/dark/archive-box.svg delete mode 100644 apps/vscode-wing/resources/resource-icons/dark/beaker.svg delete mode 100644 apps/vscode-wing/resources/resource-icons/dark/bolt.svg delete mode 100644 apps/vscode-wing/resources/resource-icons/dark/calculator.svg delete mode 100644 apps/vscode-wing/resources/resource-icons/dark/clock.svg delete mode 100644 apps/vscode-wing/resources/resource-icons/dark/cloud.svg delete mode 100644 apps/vscode-wing/resources/resource-icons/dark/cube.svg delete mode 100644 apps/vscode-wing/resources/resource-icons/dark/globe-alt.svg delete mode 100644 apps/vscode-wing/resources/resource-icons/dark/megaphone.svg delete mode 100644 apps/vscode-wing/resources/resource-icons/dark/queue-list.svg delete mode 100644 apps/vscode-wing/resources/resource-icons/dark/redis.svg delete mode 100644 apps/vscode-wing/resources/resource-icons/dark/table-cells.svg delete mode 100644 apps/vscode-wing/resources/resource-icons/light/archive-box.svg delete mode 100644 apps/vscode-wing/resources/resource-icons/light/beaker.svg delete mode 100644 apps/vscode-wing/resources/resource-icons/light/bolt.svg delete mode 100644 apps/vscode-wing/resources/resource-icons/light/calculator.svg delete mode 100644 apps/vscode-wing/resources/resource-icons/light/clock.svg delete mode 100644 apps/vscode-wing/resources/resource-icons/light/cloud.svg delete mode 100644 apps/vscode-wing/resources/resource-icons/light/cube.svg delete mode 100644 apps/vscode-wing/resources/resource-icons/light/globe-alt.svg delete mode 100644 apps/vscode-wing/resources/resource-icons/light/megaphone.svg delete mode 100644 apps/vscode-wing/resources/resource-icons/light/queue-list.svg delete mode 100644 apps/vscode-wing/resources/resource-icons/light/redis.svg delete mode 100644 apps/vscode-wing/resources/resource-icons/light/table-cells.svg create mode 100644 apps/vscode-wing/src/console.ts delete mode 100644 apps/vscode-wing/src/console/console-manager.ts delete mode 100644 apps/vscode-wing/src/console/explorer-providers/ResourcesExplorerProvider.ts delete mode 100644 apps/vscode-wing/src/console/explorer-providers/TestsExplorerProvider.ts delete mode 100644 apps/vscode-wing/src/console/index.ts delete mode 100644 apps/vscode-wing/src/console/services/client.ts delete mode 100644 apps/vscode-wing/tsup.config.ts delete mode 100644 apps/wing-console/console/ui/src/layout/default-layout.tsx create mode 100644 apps/wing-console/console/ui/src/layout/playground-layout.tsx delete mode 100644 apps/wing-console/console/ui/src/layout/theme-toggle.tsx create mode 100644 apps/wing-console/console/ui/src/layout/tutorial-layout.tsx create mode 100644 apps/wing-console/console/ui/src/layout/vscode-layout.tsx diff --git a/apps/vscode-wing/.projen/deps.json b/apps/vscode-wing/.projen/deps.json index 3a8535c880d..29a11112591 100644 --- a/apps/vscode-wing/.projen/deps.json +++ b/apps/vscode-wing/.projen/deps.json @@ -1,9 +1,5 @@ { "dependencies": [ - { - "name": "@types/node-fetch", - "type": "build" - }, { "name": "@types/node", "version": "^16", @@ -13,10 +9,6 @@ "name": "@types/which", "type": "build" }, - { - "name": "@types/ws", - "type": "build" - }, { "name": "@typescript-eslint/eslint-plugin", "version": "^5", @@ -32,13 +24,7 @@ "type": "build" }, { - "name": "@wingconsole/app", - "version": "workspace:^", - "type": "build" - }, - { - "name": "@wingconsole/server", - "version": "workspace:^", + "name": "esbuild", "type": "build" }, { @@ -83,32 +69,15 @@ "name": "ts-node", "type": "build" }, - { - "name": "tsup", - "type": "build" - }, { "name": "typescript", "type": "build" }, - { - "name": "@trpc/client", - "type": "runtime" - }, { "name": "@types/vscode", "version": "^1.70.0", "type": "runtime" }, - { - "name": "node-fetch", - "version": "2", - "type": "runtime" - }, - { - "name": "open", - "type": "runtime" - }, { "name": "vscode-languageclient", "type": "runtime" @@ -116,10 +85,6 @@ { "name": "which", "type": "runtime" - }, - { - "name": "ws", - "type": "runtime" } ], "//": "~~ Generated by projen. To modify, edit .projenrc.ts and run \"npx projen\"." diff --git a/apps/vscode-wing/.projen/tasks.json b/apps/vscode-wing/.projen/tasks.json index 2f7b8062098..5f9c733780a 100644 --- a/apps/vscode-wing/.projen/tasks.json +++ b/apps/vscode-wing/.projen/tasks.json @@ -61,7 +61,7 @@ "description": "Only compile", "steps": [ { - "exec": "tsup" + "exec": "esbuild src/extension.ts --outfile=lib/index.js --external:node-gyp --external:vscode --format=cjs --platform=node --bundle" } ] }, @@ -165,19 +165,19 @@ "exec": "pnpm update npm-check-updates" }, { - "exec": "npm-check-updates --dep dev --upgrade --target=minor --reject='@wingconsole/app,@wingconsole/server,node-fetch'" + "exec": "npm-check-updates --dep dev --upgrade --target=minor" }, { - "exec": "npm-check-updates --dep optional --upgrade --target=minor --reject='@wingconsole/app,@wingconsole/server,node-fetch'" + "exec": "npm-check-updates --dep optional --upgrade --target=minor" }, { - "exec": "npm-check-updates --dep peer --upgrade --target=minor --reject='@wingconsole/app,@wingconsole/server,node-fetch'" + "exec": "npm-check-updates --dep peer --upgrade --target=minor" }, { - "exec": "npm-check-updates --dep prod --upgrade --target=minor --reject='@wingconsole/app,@wingconsole/server,node-fetch'" + "exec": "npm-check-updates --dep prod --upgrade --target=minor" }, { - "exec": "npm-check-updates --dep bundle --upgrade --target=minor --reject='@wingconsole/app,@wingconsole/server,node-fetch'" + "exec": "npm-check-updates --dep bundle --upgrade --target=minor" }, { "exec": "pnpm i --no-frozen-lockfile" @@ -198,7 +198,7 @@ "description": "Watch & compile in the background", "steps": [ { - "exec": "tsup --watch" + "exec": "esbuild src/extension.ts --outfile=lib/index.js --external:node-gyp --external:vscode --format=cjs --platform=node --bundle --watch" } ] } diff --git a/apps/vscode-wing/.projenrc.ts b/apps/vscode-wing/.projenrc.ts index f7ceaa42bce..5d29d430914 100644 --- a/apps/vscode-wing/.projenrc.ts +++ b/apps/vscode-wing/.projenrc.ts @@ -36,7 +36,7 @@ const project = new TypeScriptAppProject({ jest: false, github: false, npmignoreEnabled: false, - entrypoint: "lib/extension.js", + entrypoint: "lib/index.js", eslintOptions: { dirs: ["src"], prettier: true, @@ -48,7 +48,6 @@ const project = new TypeScriptAppProject({ tsconfig: { compilerOptions: { noUncheckedIndexedAccess: true, - lib: ["es2021"], }, }, @@ -56,20 +55,8 @@ const project = new TypeScriptAppProject({ `@types/vscode@^${VSCODE_BASE_VERSION}`, "vscode-languageclient", "which", - "@trpc/client", - "node-fetch@2", - "ws", - "open", - ], - devDeps: [ - "@types/node", - "@types/which", - "@vscode/vsce", - "@types/node-fetch", - "@types/ws", - "@wingconsole/app@workspace:^", - "@wingconsole/server@workspace:^", ], + devDeps: ["@types/node", "@types/which", "esbuild", "@vscode/vsce"], }); project.addGitIgnore("*.vsix"); @@ -135,26 +122,6 @@ const contributes: VSCodeExtensionContributions = { dark: "resources/icon-dark.png", }, }, - { - command: "wingConsole.openResource", - title: "Open resource", - }, - { - command: "wingConsole.runTest", - title: "Run test", - icon: { - light: "resources/play-light.svg", - dark: "resources/play-dark.svg", - }, - }, - { - command: "wingConsole.runAllTests", - title: "Run all tests", - icon: { - light: "resources/play-all-light.svg", - dark: "resources/play-all-dark.svg", - }, - }, ], menus: { "editor/title": [ @@ -169,20 +136,6 @@ const contributes: VSCodeExtensionContributions = { group: "navigation", }, ], - "view/item/context": [ - { - command: "wingConsole.runTest", - when: "view == consoleTestsExplorer", - group: "inline", - }, - ], - "explorer/context": [ - { - command: "wingConsole.runAllTests", - when: "view == consoleTestsExplorer", - group: "inline", - }, - ], }, configuration: [ { @@ -197,18 +150,6 @@ const contributes: VSCodeExtensionContributions = { }, }, ], - views: { - explorer: [ - { - id: "consoleExplorer", - name: "Wing Resources", - }, - { - id: "consoleTestsExplorer", - name: "Wing Tests", - }, - ], - }, }; project.addFields({ @@ -225,11 +166,11 @@ project.addFields({ contributes, }); -project.addDevDeps("tsup"); - +const esbuildComment = + "esbuild src/extension.ts --outfile=lib/index.js --external:node-gyp --external:vscode --format=cjs --platform=node --bundle"; project.compileTask.reset(); -project.compileTask.exec("tsup"); -project.watchTask.reset("tsup --watch"); +project.compileTask.exec(esbuildComment); +project.watchTask.reset(`${esbuildComment} --watch`); project.packageTask.reset( "pnpm version ${PROJEN_BUMP_VERSION:-0.0.0} --allow-same-version" diff --git a/apps/vscode-wing/package.json b/apps/vscode-wing/package.json index d4cfd78967b..04353cc7ac0 100644 --- a/apps/vscode-wing/package.json +++ b/apps/vscode-wing/package.json @@ -30,14 +30,11 @@ }, "devDependencies": { "@types/node": "^16", - "@types/node-fetch": "^2.6.4", "@types/which": "^2.0.2", - "@types/ws": "^8.5.5", "@typescript-eslint/eslint-plugin": "^5", "@typescript-eslint/parser": "^5", "@vscode/vsce": "^2.16.0", - "@wingconsole/app": "workspace:^", - "@wingconsole/server": "workspace:^", + "esbuild": "^0.17.4", "eslint": "^8", "eslint-config-prettier": "^8.6.0", "eslint-import-resolver-node": "^0.3.7", @@ -48,17 +45,12 @@ "prettier": "^2.8.3", "projen": "^0.71.60", "ts-node": "^10.9.1", - "tsup": "^6.7.0", "typescript": "^4.9.4" }, "dependencies": { - "@trpc/client": "^10.30.0", "@types/vscode": "^1.70.0", - "node-fetch": "2", - "open": "^8.4.0", "vscode-languageclient": "^8.0.2", - "which": "^3.0.0", - "ws": "^8.13.0" + "which": "^3.0.0" }, "keywords": [ "cdk", @@ -73,14 +65,14 @@ "engines": { "vscode": "^1.70.0" }, - "main": "lib/extension.js", + "main": "lib/index.js", "license": "MIT", "homepage": "https://winglang.io", "version": "0.0.0", "bugs": { "url": "https://github.com/winglang/wing/issues" }, - "types": "lib/extension.d.ts", + "types": "lib/index.d.ts", "publisher": "Monada", "preview": true, "private": true, @@ -144,26 +136,6 @@ "light": "resources/icon-light.png", "dark": "resources/icon-dark.png" } - }, - { - "command": "wingConsole.openResource", - "title": "Open resource" - }, - { - "command": "wingConsole.runTest", - "title": "Run test", - "icon": { - "light": "resources/play-light.svg", - "dark": "resources/play-dark.svg" - } - }, - { - "command": "wingConsole.runAllTests", - "title": "Run all tests", - "icon": { - "light": "resources/play-all-light.svg", - "dark": "resources/play-all-dark.svg" - } } ], "menus": { @@ -178,20 +150,6 @@ "command": "wing.openFile", "group": "navigation" } - ], - "view/item/context": [ - { - "command": "wingConsole.runTest", - "when": "view == consoleTestsExplorer", - "group": "inline" - } - ], - "explorer/context": [ - { - "command": "wingConsole.runAllTests", - "when": "view == consoleTestsExplorer", - "group": "inline" - } ] }, "configuration": [ @@ -205,19 +163,7 @@ } } } - ], - "views": { - "explorer": [ - { - "id": "consoleExplorer", - "name": "Wing Resources" - }, - { - "id": "consoleTestsExplorer", - "name": "Wing Tests" - } - ] - } + ] }, "volta": { "extends": "../../package.json" diff --git a/apps/vscode-wing/resources/play-all-dark.svg b/apps/vscode-wing/resources/play-all-dark.svg deleted file mode 100644 index a8ff8f57595..00000000000 --- a/apps/vscode-wing/resources/play-all-dark.svg +++ /dev/null @@ -1,10 +0,0 @@ - diff --git a/apps/vscode-wing/resources/play-all-light.svg b/apps/vscode-wing/resources/play-all-light.svg deleted file mode 100644 index b2883623d14..00000000000 --- a/apps/vscode-wing/resources/play-all-light.svg +++ /dev/null @@ -1,10 +0,0 @@ - diff --git a/apps/vscode-wing/resources/play-dark.svg b/apps/vscode-wing/resources/play-dark.svg deleted file mode 100644 index 6e208f956e7..00000000000 --- a/apps/vscode-wing/resources/play-dark.svg +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/apps/vscode-wing/resources/play-light.svg b/apps/vscode-wing/resources/play-light.svg deleted file mode 100644 index 032a2f0a2c5..00000000000 --- a/apps/vscode-wing/resources/play-light.svg +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/apps/vscode-wing/resources/resource-icons/dark/archive-box.svg b/apps/vscode-wing/resources/resource-icons/dark/archive-box.svg deleted file mode 100644 index f6ef06fab73..00000000000 --- a/apps/vscode-wing/resources/resource-icons/dark/archive-box.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/apps/vscode-wing/resources/resource-icons/dark/beaker.svg b/apps/vscode-wing/resources/resource-icons/dark/beaker.svg deleted file mode 100644 index c45c483c366..00000000000 --- a/apps/vscode-wing/resources/resource-icons/dark/beaker.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/apps/vscode-wing/resources/resource-icons/dark/bolt.svg b/apps/vscode-wing/resources/resource-icons/dark/bolt.svg deleted file mode 100644 index 61574e4aee3..00000000000 --- a/apps/vscode-wing/resources/resource-icons/dark/bolt.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/apps/vscode-wing/resources/resource-icons/dark/calculator.svg b/apps/vscode-wing/resources/resource-icons/dark/calculator.svg deleted file mode 100644 index d79e9726463..00000000000 --- a/apps/vscode-wing/resources/resource-icons/dark/calculator.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/apps/vscode-wing/resources/resource-icons/dark/clock.svg b/apps/vscode-wing/resources/resource-icons/dark/clock.svg deleted file mode 100644 index 87eab2dc2dc..00000000000 --- a/apps/vscode-wing/resources/resource-icons/dark/clock.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/apps/vscode-wing/resources/resource-icons/dark/cloud.svg b/apps/vscode-wing/resources/resource-icons/dark/cloud.svg deleted file mode 100644 index 4eb9e708fbb..00000000000 --- a/apps/vscode-wing/resources/resource-icons/dark/cloud.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/apps/vscode-wing/resources/resource-icons/dark/cube.svg b/apps/vscode-wing/resources/resource-icons/dark/cube.svg deleted file mode 100644 index 8ce57410c00..00000000000 --- a/apps/vscode-wing/resources/resource-icons/dark/cube.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/apps/vscode-wing/resources/resource-icons/dark/globe-alt.svg b/apps/vscode-wing/resources/resource-icons/dark/globe-alt.svg deleted file mode 100644 index ab078d2abb6..00000000000 --- a/apps/vscode-wing/resources/resource-icons/dark/globe-alt.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/apps/vscode-wing/resources/resource-icons/dark/megaphone.svg b/apps/vscode-wing/resources/resource-icons/dark/megaphone.svg deleted file mode 100644 index f5c85040fe1..00000000000 --- a/apps/vscode-wing/resources/resource-icons/dark/megaphone.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/apps/vscode-wing/resources/resource-icons/dark/queue-list.svg b/apps/vscode-wing/resources/resource-icons/dark/queue-list.svg deleted file mode 100644 index 7eec9855d33..00000000000 --- a/apps/vscode-wing/resources/resource-icons/dark/queue-list.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/apps/vscode-wing/resources/resource-icons/dark/redis.svg b/apps/vscode-wing/resources/resource-icons/dark/redis.svg deleted file mode 100644 index 66e31bd3336..00000000000 --- a/apps/vscode-wing/resources/resource-icons/dark/redis.svg +++ /dev/null @@ -1,11 +0,0 @@ - - - diff --git a/apps/vscode-wing/resources/resource-icons/dark/table-cells.svg b/apps/vscode-wing/resources/resource-icons/dark/table-cells.svg deleted file mode 100644 index 3902cf36eb9..00000000000 --- a/apps/vscode-wing/resources/resource-icons/dark/table-cells.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/apps/vscode-wing/resources/resource-icons/light/archive-box.svg b/apps/vscode-wing/resources/resource-icons/light/archive-box.svg deleted file mode 100644 index 897ecf080e6..00000000000 --- a/apps/vscode-wing/resources/resource-icons/light/archive-box.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/apps/vscode-wing/resources/resource-icons/light/beaker.svg b/apps/vscode-wing/resources/resource-icons/light/beaker.svg deleted file mode 100644 index 6bd47ac6aa2..00000000000 --- a/apps/vscode-wing/resources/resource-icons/light/beaker.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/apps/vscode-wing/resources/resource-icons/light/bolt.svg b/apps/vscode-wing/resources/resource-icons/light/bolt.svg deleted file mode 100644 index 52b44d7d5b1..00000000000 --- a/apps/vscode-wing/resources/resource-icons/light/bolt.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/apps/vscode-wing/resources/resource-icons/light/calculator.svg b/apps/vscode-wing/resources/resource-icons/light/calculator.svg deleted file mode 100644 index f8c51446893..00000000000 --- a/apps/vscode-wing/resources/resource-icons/light/calculator.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/apps/vscode-wing/resources/resource-icons/light/clock.svg b/apps/vscode-wing/resources/resource-icons/light/clock.svg deleted file mode 100644 index f9ade369484..00000000000 --- a/apps/vscode-wing/resources/resource-icons/light/clock.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/apps/vscode-wing/resources/resource-icons/light/cloud.svg b/apps/vscode-wing/resources/resource-icons/light/cloud.svg deleted file mode 100644 index 6ca053e0754..00000000000 --- a/apps/vscode-wing/resources/resource-icons/light/cloud.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/apps/vscode-wing/resources/resource-icons/light/cube.svg b/apps/vscode-wing/resources/resource-icons/light/cube.svg deleted file mode 100644 index 7bd64203b32..00000000000 --- a/apps/vscode-wing/resources/resource-icons/light/cube.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/apps/vscode-wing/resources/resource-icons/light/globe-alt.svg b/apps/vscode-wing/resources/resource-icons/light/globe-alt.svg deleted file mode 100644 index 4733d467555..00000000000 --- a/apps/vscode-wing/resources/resource-icons/light/globe-alt.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/apps/vscode-wing/resources/resource-icons/light/megaphone.svg b/apps/vscode-wing/resources/resource-icons/light/megaphone.svg deleted file mode 100644 index 8d077b760b5..00000000000 --- a/apps/vscode-wing/resources/resource-icons/light/megaphone.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/apps/vscode-wing/resources/resource-icons/light/queue-list.svg b/apps/vscode-wing/resources/resource-icons/light/queue-list.svg deleted file mode 100644 index fc0f71ee8d4..00000000000 --- a/apps/vscode-wing/resources/resource-icons/light/queue-list.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/apps/vscode-wing/resources/resource-icons/light/redis.svg b/apps/vscode-wing/resources/resource-icons/light/redis.svg deleted file mode 100644 index 930dc657380..00000000000 --- a/apps/vscode-wing/resources/resource-icons/light/redis.svg +++ /dev/null @@ -1,11 +0,0 @@ - - - diff --git a/apps/vscode-wing/resources/resource-icons/light/table-cells.svg b/apps/vscode-wing/resources/resource-icons/light/table-cells.svg deleted file mode 100644 index eedec1524f4..00000000000 --- a/apps/vscode-wing/resources/resource-icons/light/table-cells.svg +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/apps/vscode-wing/src/bin-helper.ts b/apps/vscode-wing/src/bin-helper.ts index b2e89159f33..868fd063e39 100644 --- a/apps/vscode-wing/src/bin-helper.ts +++ b/apps/vscode-wing/src/bin-helper.ts @@ -1,4 +1,4 @@ -import { exec, execSync } from "child_process"; +import { exec } from "child_process"; import { env } from "process"; import { StatusBarItem, diff --git a/apps/vscode-wing/src/console.ts b/apps/vscode-wing/src/console.ts new file mode 100644 index 00000000000..f3036f4ad17 --- /dev/null +++ b/apps/vscode-wing/src/console.ts @@ -0,0 +1,133 @@ +import { spawn } from "child_process"; +import path from "path"; +import { + ExtensionContext, + WebviewPanel, + Uri, + ViewColumn, + window, + workspace, +} from "vscode"; +import { getWingBinAndArgs } from "./bin-helper"; +import { VIEW_TYPE_CONSOLE } from "./constants"; + +export class WingConsoleManager { + consolePanels: Record = {}; + activeConsolePanel: string | undefined; + + constructor(public readonly context: ExtensionContext) {} + + public async openConsole() { + // get the current active file + const editor = window.activeTextEditor; + if (!editor) { + return; + } + const document = editor.document; + if (document.languageId !== "wing") { + return; + } + const uri = document.uri; + + const existingPanel = this.consolePanels[uri.fsPath]; + if (existingPanel) { + existingPanel.reveal(); + return; + } + + const args = await getWingBinAndArgs(this.context); + if (!args) { + return; + } + + const filename = path.basename(uri.fsPath); + let panel: WebviewPanel; + + args.push("it", "--no-open", uri.fsPath); + + const cp = spawn(args[0]!, args.slice(1), { + stdio: ["ignore", "pipe", "pipe"], + windowsHide: true, + shell: false, + }); + + cp.on("error", (err) => { + if (err) { + void window.showErrorMessage(err.message); + + panel?.dispose(); + } + }); + cp.stdout?.once("data", (data) => { + // get localhost url from stdout + const url = data.toString().match(/http:\/\/localhost:\d+/); + if (!url) { + // there should be an error message in a different event + return; + } + + const port = parseInt(url[0].split(":")[2]); + + panel = window.createWebviewPanel( + VIEW_TYPE_CONSOLE, + `${filename} [Console]`, + ViewColumn.Beside, + { + enableScripts: true, + enableCommandUris: true, + portMapping: [{ webviewPort: port, extensionHostPort: port }], + } + ); + panel.iconPath = { + light: Uri.joinPath( + this.context.extensionUri, + "resources", + "icon-light.png" + ), + dark: Uri.joinPath( + this.context.extensionUri, + "resources", + "icon-dark.png" + ), + }; + + this.consolePanels[uri.fsPath] = panel; + this.activeConsolePanel = uri.fsPath; + panel.onDidChangeViewState(() => { + if (panel.active) { + this.activeConsolePanel = uri.fsPath; + } else if (this.activeConsolePanel === uri.fsPath) { + this.activeConsolePanel = undefined; + } + }); + + panel.onDidDispose(() => { + delete this.consolePanels[uri.fsPath]; + this.activeConsolePanel = undefined; + cp.kill(); + }); + panel.webview.html = `\ + + + + + + + + `; + }); + } + + public async openFile() { + if (this.activeConsolePanel) { + const document = await workspace.openTextDocument( + this.activeConsolePanel + ); + + await window.showTextDocument(document); + } + } +} diff --git a/apps/vscode-wing/src/console/console-manager.ts b/apps/vscode-wing/src/console/console-manager.ts deleted file mode 100644 index 6c1856e039f..00000000000 --- a/apps/vscode-wing/src/console/console-manager.ts +++ /dev/null @@ -1,274 +0,0 @@ -import { - window, - WebviewPanel, - commands, - OutputChannel, - TreeView, - ViewColumn, - Uri, - ExtensionContext, -} from "vscode"; - -import { - ResourceItem, - ResourcesExplorerProvider, -} from "./explorer-providers/ResourcesExplorerProvider"; -import { - TestItem, - TestsExplorerProvider, -} from "./explorer-providers/TestsExplorerProvider"; -import { type Client } from "./services/client"; -import { VIEW_TYPE_CONSOLE } from "../constants"; - -export interface ConsoleInstance { - id: string; - wingfile: string; - url: string; - client: Client; - onDidClose: () => void; -} - -export interface ConsoleManager { - addInstance: (instance: ConsoleInstance) => Promise; - getInstance: (instanceId: string) => ConsoleInstance | undefined; - closeInstance: (instanceId: string) => void; - setActiveInstance: (instanceId: string) => Promise; - activeInstances: () => boolean; - getActiveInstanceId: () => string | undefined; -} - -export const createConsoleManager = ( - context: ExtensionContext, - logger: OutputChannel -): ConsoleManager => { - const instances: Record = {}; - const resourcesExplorer = new ResourcesExplorerProvider(); - const testsExplorer = new TestsExplorerProvider(); - - let activeInstanceId: string | undefined; - let webviewPanel: WebviewPanel | undefined; - let explorerView: TreeView | undefined; - let testsExplorerView: TreeView | undefined; - - let timeout: NodeJS.Timeout | undefined; - let logsTimestamp: number = 0; - - const registerCommands = () => { - commands.registerCommand("wingConsole.openResource", async (resourceId) => { - if (!activeInstanceId) { - return; - } - const activePanel = getInstance(activeInstanceId); - if (!activePanel) { - return; - } - await activePanel.client.setSelectedNode(resourceId); - }); - - commands.registerCommand("wingConsole.runTest", async (test: TestItem) => { - if (!activeInstanceId) { - return; - } - const activePanel = getInstance(activeInstanceId); - if (!activePanel) { - return; - } - const tests = testsExplorer.getTests(); - testsExplorer.update( - tests.map((testItem) => { - if (testItem.id === test.id) { - return { - ...test, - status: "running", - }; - } - return testItem; - }) - ); - await activePanel.client.runTest(test.id); - }); - - commands.registerCommand("wingConsole.runAllTests", async () => { - if (!activeInstanceId) { - return; - } - const activePanel = getInstance(activeInstanceId); - if (!activePanel) { - return; - } - const tests = testsExplorer.getTests(); - testsExplorer.update( - tests.map((testItem) => { - return { - ...testItem, - status: "running", - }; - }) - ); - await activePanel.client.runAllTests(); - }); - }; - - const updateLogs = async (instance: ConsoleInstance) => { - const logs = await instance.client.getLogs({ time: logsTimestamp }); - - logs.forEach((log) => { - logger.appendLine(`[${log.level}] ${log.message}`); - }); - logsTimestamp = Date.now(); - }; - - const getTheme = () => { - const theme = window.activeColorTheme.kind; - if (theme === 1) { - return "light"; - } - return "dark"; - }; - - const getInstance = (instanceId: string) => { - if (!instanceId) { - return; - } - return instances[instanceId]; - }; - - const addInstance = async (instance: ConsoleInstance) => { - logger.appendLine(`Wing Console is running at http://${instance.url}`); - - instance.client.onInvalidateQuery({ - onData: async (key) => { - if (activeInstanceId !== instance.id) { - return; - } - if (timeout) { - clearTimeout(timeout); - } - timeout = setTimeout(async () => { - if (!key || key === "app.logs") { - await updateLogs(instance); - } - resourcesExplorer.update(await instance.client.listResources()); - testsExplorer.update(await instance.client.listTests()); - }, 300); - }, - onError: (err) => { - logger.appendLine(err); - }, - }); - instances[instance.id] = instance; - - await setActiveInstance(instance.id); - }; - - const setActiveInstance = async (instanceId: string) => { - const instance = getInstance(instanceId); - if (!instance) { - return; - } - - if (!webviewPanel) { - webviewPanel = window.createWebviewPanel( - VIEW_TYPE_CONSOLE, - `Console`, - ViewColumn.Beside, - { - enableScripts: true, - enableCommandUris: true, - } - ); - - webviewPanel.iconPath = { - light: Uri.joinPath( - context.extensionUri, - "resources", - "icon-light.png" - ), - dark: Uri.joinPath(context.extensionUri, "resources", "icon-dark.png"), - }; - - webviewPanel.onDidDispose(async () => { - resourcesExplorer.clear(); - testsExplorer.clear(); - webviewPanel = undefined; - activeInstanceId = undefined; - - Object.keys(instances).forEach(async (id) => { - await closeInstance(id); - }); - }); - logger.show(); - } - - webviewPanel.title = `${instance.wingfile} - [console]`; - webviewPanel.webview.html = ` - - - - - - - -